Delete more unused code.

Change-Id: I7503e4554798daaefeab690093d5fb3a4958bff7
diff --git a/ojluni/src/main/java/com/oracle/net/Sdp.java b/ojluni/src/main/java/com/oracle/net/Sdp.java
deleted file mode 100755
index 3231607..0000000
--- a/ojluni/src/main/java/com/oracle/net/Sdp.java
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
- * Copyright (c) 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
- * 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.oracle.net;
-
-import java.net.Socket;
-import java.net.ServerSocket;
-import java.net.SocketImpl;
-import java.net.SocketImplFactory;
-import java.net.SocketException;
-import java.nio.channels.SocketChannel;
-import java.nio.channels.ServerSocketChannel;
-import java.io.IOException;
-import java.io.FileDescriptor;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.AccessibleObject;
-import java.lang.reflect.InvocationTargetException;
-
-import sun.net.sdp.SdpSupport;
-
-/**
- * This class consists exclusively of static methods that Sockets or Channels to
- * sockets that support the InfiniBand Sockets Direct Protocol (SDP).
- */
-
-public final class Sdp {
-    private Sdp() { }
-
-    /**
-     * The package-privage ServerSocket(SocketImpl) constructor
-     */
-    private static final Constructor<ServerSocket> serverSocketCtor;
-    static {
-        try {
-            serverSocketCtor = (Constructor<ServerSocket>)
-                ServerSocket.class.getDeclaredConstructor(SocketImpl.class);
-            setAccessible(serverSocketCtor);
-        } catch (NoSuchMethodException e) {
-            throw new AssertionError(e);
-        }
-    }
-
-    /**
-     * The package-private SdpSocketImpl() constructor
-     */
-    private static final Constructor<SocketImpl> socketImplCtor;
-    static {
-        try {
-            Class<?> cl = Class.forName("java.net.SdpSocketImpl", true, null);
-            socketImplCtor = (Constructor<SocketImpl>)cl.getDeclaredConstructor();
-            setAccessible(socketImplCtor);
-        } catch (ClassNotFoundException e) {
-            throw new AssertionError(e);
-        } catch (NoSuchMethodException e) {
-            throw new AssertionError(e);
-        }
-    }
-
-    private static void setAccessible(final AccessibleObject o) {
-        AccessController.doPrivileged(new PrivilegedAction<Void>() {
-            public Void run() {
-                o.setAccessible(true);
-                return null;
-            }
-        });
-    }
-
-    /**
-     * SDP enabled Socket.
-     */
-    private static class SdpSocket extends Socket {
-        SdpSocket(SocketImpl impl) throws SocketException {
-            super(impl);
-        }
-    }
-
-    /**
-     * Creates a SDP enabled SocketImpl
-     */
-    private static SocketImpl createSocketImpl() {
-        try {
-            return socketImplCtor.newInstance();
-        } catch (InstantiationException x) {
-            throw new AssertionError(x);
-        } catch (IllegalAccessException x) {
-            throw new AssertionError(x);
-        } catch (InvocationTargetException x) {
-            throw new AssertionError(x);
-        }
-    }
-
-    /**
-     * Creates an unconnected and unbound SDP socket. The {@code Socket} is
-     * associated with a {@link java.net.SocketImpl} of the system-default type.
-     *
-     * @return  a new Socket
-     *
-     * @throws  UnsupportedOperationException
-     *          If SDP is not supported
-     * @throws  IOException
-     *          If an I/O error occurs
-     */
-    public static Socket openSocket() throws IOException {
-        SocketImpl impl = createSocketImpl();
-        return new SdpSocket(impl);
-    }
-
-    /**
-     * Creates an unbound SDP server socket. The {@code ServerSocket} is
-     * associated with a {@link java.net.SocketImpl} of the system-default type.
-     *
-     * @return  a new ServerSocket
-     *
-     * @throws  UnsupportedOperationException
-     *          If SDP is not supported
-     * @throws  IOException
-     *          If an I/O error occurs
-     */
-    public static ServerSocket openServerSocket() throws IOException {
-        // create ServerSocket via package-private constructor
-        SocketImpl impl = createSocketImpl();
-        try {
-            return serverSocketCtor.newInstance(impl);
-        } catch (IllegalAccessException x) {
-            throw new AssertionError(x);
-        } catch (InstantiationException x) {
-            throw new AssertionError(x);
-        } catch (InvocationTargetException x) {
-            Throwable cause = x.getCause();
-            if (cause instanceof IOException)
-                throw (IOException)cause;
-            if (cause instanceof RuntimeException)
-                throw (RuntimeException)cause;
-            throw new RuntimeException(x);
-        }
-    }
-
-    /**
-     * Opens a socket channel to a SDP socket.
-     *
-     * <p> The channel will be associated with the system-wide default
-     * {@link java.nio.channels.spi.SelectorProvider SelectorProvider}.
-     *
-     * @return  a new SocketChannel
-     *
-     * @throws  UnsupportedOperationException
-     *          If SDP is not supported or not supported by the default selector
-     *          provider
-     * @throws  IOException
-     *          If an I/O error occurs.
-     */
-    public static SocketChannel openSocketChannel() throws IOException {
-        FileDescriptor fd = SdpSupport.createSocket();
-        return sun.nio.ch.Secrets.newSocketChannel(fd);
-    }
-
-    /**
-     * Opens a socket channel to a SDP socket.
-     *
-     * <p> The channel will be associated with the system-wide default
-     * {@link java.nio.channels.spi.SelectorProvider SelectorProvider}.
-     *
-     * @return  a new ServerSocketChannel
-     *
-     * @throws  UnsupportedOperationException
-     *          If SDP is not supported or not supported by the default selector
-     *          provider
-     * @throws  IOException
-     *          If an I/O error occurs
-     */
-    public static ServerSocketChannel openServerSocketChannel()
-        throws IOException
-    {
-        FileDescriptor fd = SdpSupport.createSocket();
-        return sun.nio.ch.Secrets.newServerSocketChannel(fd);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/accessibility/internal/resources/accessibility.properties b/ojluni/src/main/java/com/sun/accessibility/internal/resources/accessibility.properties
deleted file mode 100755
index fd73143..0000000
--- a/ojluni/src/main/java/com/sun/accessibility/internal/resources/accessibility.properties
+++ /dev/null
@@ -1,146 +0,0 @@
-#
-# This properties file is used to create a PropertyResourceBundle
-# It contains Locale specific strings used be the Accessibility package.
-#
-# When this file is read in, the strings are put into the 
-# defaults table.  This is an implementation detail of the current
-# workings of Accessibility.  DO NOT DEPEND ON THIS.  
-# This may change in future versions of Accessibility as we improve 
-# localization support.
-#
-# @author  Lynn Monsanto
-
-#
-# accessible roles
-#
-alert=alert
-awtcomponent=AWT component
-checkbox=check box
-colorchooser=color chooser
-columnheader=column header
-combobox=combo box
-canvas=canvas
-desktopicon=desktop icon
-desktoppane=desktop pane
-dialog=dialog
-directorypane=directory pane
-glasspane=glass pane
-filechooser=file chooser
-filler=filler
-frame=frame
-internalframe=internal frame
-label=label
-layeredpane=layered pane
-list=list
-listitem=list item
-menubar=menu bar
-menu=menu
-menuitem=menu item
-optionpane=option pane
-pagetab=page tab
-pagetablist=page tab list
-panel=panel
-passwordtext=password text
-popupmenu=popup menu
-progressbar=progress bar
-pushbutton=push button
-radiobutton=radio button
-rootpane=root pane
-rowheader=row header
-scrollbar=scroll bar
-scrollpane=scroll pane
-separator=separator
-slider=slider
-splitpane=split pane
-swingcomponent=swing component
-table=table
-text=text
-tree=tree
-togglebutton=toggle button
-toolbar=tool bar
-tooltip=tool tip
-unknown=unknown
-viewport=viewport
-window=window
-#
-# accessible relations
-#
-labelFor=label for
-labeledBy=labeled by
-memberOf=member of
-controlledBy=controlledBy
-controllerFor=controllerFor
-#
-# accessible states
-#
-active=active
-armed=armed
-busy=busy
-checked=checked
-collapsed=collapsed
-editable=editable
-expandable=expandable
-expanded=expanded
-enabled=enabled
-focusable=focusable
-focused=focused
-iconified=iconified
-modal=modal
-multiline=multiple line
-multiselectable=multiselectable
-opaque=opaque
-pressed=pressed
-resizable=resizable
-selectable=selectable
-selected=selected
-showing=showing
-singleline=single line
-transient=transient
-visible=visible
-vertical=vertical
-horizontal=horizontal
-#
-# accessible actions
-#
-toggleexpand=toggle expand
-
-# new relations, roles and states for J2SE 1.5.0
-
-# 
-# accessible relations
-#
-flowsTo=flows to
-flowsFrom=flows from
-subwindowOf=subwindow of
-parentWindowOf=parent window of
-embeds=embeds
-embeddedBy=embedded by
-childNodeOf=child node of
-
-#
-# accessible roles
-#
-header=header
-footer=footer
-paragraph=paragraph
-ruler=ruler
-editbar=editbar
-progressMonitor=progress monitor
-
-#
-# accessible states
-#
-managesDescendants=manages descendants
-indeterminate=indeterminate
-truncated=truncated
-
-# new for J2SE 1.6.0
-
-#
-# accessible roles
-#
-htmlcontainer=HTML container
-
-#
-# END OF MATERIAL TO LOCALIZE
-#
diff --git a/ojluni/src/main/java/com/sun/accessibility/internal/resources/accessibility_de.properties b/ojluni/src/main/java/com/sun/accessibility/internal/resources/accessibility_de.properties
deleted file mode 100755
index fe0f918..0000000
--- a/ojluni/src/main/java/com/sun/accessibility/internal/resources/accessibility_de.properties
+++ /dev/null
@@ -1,146 +0,0 @@
-#
-# This properties file is used to create a PropertyResourceBundle
-# It contains Locale specific strings used be the Accessibility package.
-#
-# When this file is read in, the strings are put into the 
-# defaults table.  This is an implementation detail of the current
-# workings of Accessibility.  DO NOT DEPEND ON THIS.  
-# This may change in future versions of Accessibility as we improve 
-# localization support.
-#
-# @author  Lynn Monsanto
-
-#
-# accessible roles
-#
-alert=Alert
-awtcomponent=AWT-Komponente
-checkbox=Kontrollk\u00E4stchen
-colorchooser=Farbauswahl
-columnheader=Spalten-Header
-combobox=Kombinationsfeld
-canvas=Leinwand
-desktopicon=Desktopsymbol
-desktoppane=Desktopbereich
-dialog=Dialogfeld
-directorypane=Verzeichnisbereich
-glasspane=Glass Pane
-filechooser=Dateiauswahl
-filler=F\u00FCllbereich
-frame=Rahmen
-internalframe=Innerer Rahmen
-label=Label
-layeredpane=Layered Pane
-list=Liste
-listitem=Listenelement
-menubar=Men\u00FCleiste
-menu=Men\u00FC
-menuitem=Men\u00FCpunkt
-optionpane=Optionsbereich
-pagetab=Registerkarte
-pagetablist=Registerkartenliste
-panel=Bereich
-passwordtext=Kennworttext
-popupmenu=Popup-Men\u00FC
-progressbar=Fortschrittsbalken
-pushbutton=Schaltfl\u00E4che
-radiobutton=Optionsfeld
-rootpane=Root-Bereich
-rowheader=Zeilen-Header
-scrollbar=Bildlaufleiste
-scrollpane=Bildlaufbereich
-separator=Trennzeichen
-slider=Schieberegler
-splitpane=Split Pane
-swingcomponent=Swing-Komponente
-table=Tabelle
-text=Text
-tree=Baumstruktur
-togglebutton=Umschaltfl\u00E4che
-toolbar=Symbolleiste
-tooltip=QuickInfo
-unknown=Unbekannt
-viewport=Viewport
-window=Fenster
-#
-# accessible relations
-#
-labelFor=Label f\u00FCr
-labeledBy=beschriftet von
-memberOf=Mitglied von
-controlledBy=controlledBy
-controllerFor=controllerFor
-#
-# accessible states
-#
-active=aktiv
-armed=aktiviert
-busy=ausgelastet
-checked=markiert
-collapsed=ausgeblendet
-editable=bearbeitbar
-expandable=erweiterbar
-expanded=eingeblendet
-enabled=aktiviert
-focusable=fokussierbar
-focused=fokussiert
-iconified=minimiert
-modal=modal
-multiline=mehrzeilig
-multiselectable=mehrfach ausw\u00E4hlbar
-opaque=nicht transparent
-pressed=gedr\u00FCckt
-resizable=skalierbar
-selectable=w\u00E4hlbar
-selected=ausgew\u00E4hlt
-showing=angezeigt
-singleline=einzeilig
-transient=transient
-visible=sichtbar
-vertical=vertikal
-horizontal=horizontal
-#
-# accessible actions
-#
-toggleexpand=ein-/ausblenden
-
-# new relations, roles and states for J2SE 1.5.0
-
-# 
-# accessible relations
-#
-flowsTo=flie\u00DFt zu
-flowsFrom=flie\u00DFt von
-subwindowOf=Unterfenster von
-parentWindowOf=\u00FCbergeordnetes Fenster von
-embeds=bettet ein
-embeddedBy=eingebettet in
-childNodeOf=untergeordneter Knoten von
-
-#
-# accessible roles
-#
-header=Header
-footer=Footer
-paragraph=Absatz
-ruler=Lineal
-editbar=Bearbeitungsleiste
-progressMonitor=Fortschrittsmonitor
-
-#
-# accessible states
-#
-managesDescendants=verwaltet untergeordnete Objekte
-indeterminate=unbestimmt
-truncated=abgeschnitten
-
-# new for J2SE 1.6.0
-
-#
-# accessible roles
-#
-htmlcontainer=HTML-Container
-
-#
-# END OF MATERIAL TO LOCALIZE
-#
diff --git a/ojluni/src/main/java/com/sun/accessibility/internal/resources/accessibility_en.properties b/ojluni/src/main/java/com/sun/accessibility/internal/resources/accessibility_en.properties
deleted file mode 100755
index 1281e49..0000000
--- a/ojluni/src/main/java/com/sun/accessibility/internal/resources/accessibility_en.properties
+++ /dev/null
@@ -1,142 +0,0 @@
-#
-# This properties file is used to create a PropertyResourceBundle
-# It contains Locale specific strings used be the Accessibility package.
-#
-# When this file is read in, the strings are put into the 
-# defaults table.  This is an implementation detail of the current
-# workings of Accessibility.  DO NOT DEPEND ON THIS.  
-# This may change in future versions of Accessibility as we improve 
-# localization support.
-#
-# @author  Lynn Monsanto
-
-#
-# accessible roles
-#
-alert=alert
-awtcomponent=AWT component
-checkbox=check box
-colorchooser=color chooser
-columnheader=column header
-combobox=combo box
-canvas=canvas
-desktopicon=desktop icon
-desktoppane=desktop pane
-dialog=dialog
-directorypane=directory pane
-glasspane=glass pane
-filechooser=file chooser
-filler=filler
-frame=frame
-internalframe=internal frame
-label=label
-layeredpane=layered pane
-list=list
-listitem=list item
-menubar=menu bar
-menu=menu
-menuitem=menu item
-optionpane=option pane
-pagetab=page tab
-pagetablist=page tab list
-panel=panel
-passwordtext=password text
-popupmenu=popup menu
-progressbar=progress bar
-pushbutton=push button
-radiobutton=radio button
-rootpane=root pane
-rowheader=row header
-scrollbar=scroll bar
-scrollpane=scroll pane
-separator=separator
-slider=slider
-splitpane=split pane
-swingcomponent=swing component
-table=table
-text=text
-tree=tree
-togglebutton=toggle button
-toolbar=tool bar
-tooltip=tool tip
-unknown=unknown
-viewport=viewport
-window=window
-#
-# accessible relations
-#
-labelFor=label for
-labeledBy=labeled by
-memberOf=member of
-controlledBy=controlledBy
-controllerFor=controllerFor
-#
-# accessible states
-#
-active=active
-armed=armed
-busy=busy
-checked=checked
-collapsed=collapsed
-editable=editable
-expandable=expandable
-expanded=expanded
-enabled=enabled
-focusable=focusable
-focused=focused
-iconified=iconified
-modal=modal
-multiline=multiple line
-multiselectable=multiselectable
-opaque=opaque
-pressed=pressed
-resizable=resizable
-selectable=selectable
-selected=selected
-showing=showing
-singleline=single line
-transient=transient
-visible=visible
-vertical=vertical
-horizontal=horizontal
-
-# new relations, roles and states for J2SE 1.5.0
-
-# 
-# accessible relations
-#
-flowsTo=flows to
-flowsFrom=flows from
-subwindowOf=subwindow of
-parentWindowOf=parent window of
-embeds=embeds
-embeddedBy=embedded by
-childNodeOf=child node of
-
-#
-# accessible roles
-#
-header=header
-footer=footer
-paragraph=paragraph
-ruler=ruler
-editbar=editbar
-progressMonitor=progress monitor
-
-#
-# accessible states
-#
-managesDescendants=manages descendants
-indeterminate=indeterminate
-truncated=truncated
-
-# new for J2SE 1.6.0
-
-#
-# accessible roles
-#
-htmlcontainer=HTML container
-
-#
-# END OF MATERIAL TO LOCALIZE
-#
diff --git a/ojluni/src/main/java/com/sun/accessibility/internal/resources/accessibility_es.properties b/ojluni/src/main/java/com/sun/accessibility/internal/resources/accessibility_es.properties
deleted file mode 100755
index c3f9041..0000000
--- a/ojluni/src/main/java/com/sun/accessibility/internal/resources/accessibility_es.properties
+++ /dev/null
@@ -1,146 +0,0 @@
-#
-# This properties file is used to create a PropertyResourceBundle
-# It contains Locale specific strings used be the Accessibility package.
-#
-# When this file is read in, the strings are put into the 
-# defaults table.  This is an implementation detail of the current
-# workings of Accessibility.  DO NOT DEPEND ON THIS.  
-# This may change in future versions of Accessibility as we improve 
-# localization support.
-#
-# @author  Lynn Monsanto
-
-#
-# accessible roles
-#
-alert=alerta
-awtcomponent=componente AWT
-checkbox=casilla de control
-colorchooser=selector de color
-columnheader=cabecera de columna
-combobox=cuadro combinado
-canvas=lienzo
-desktopicon=icono de escritorio
-desktoppane=panel de escritorio
-dialog=cuadro de di\u00E1logo
-directorypane=panel de directorio
-glasspane=panel de cristal
-filechooser=selector de archivos
-filler=rellenador
-frame=marco
-internalframe=marco interno
-label=etiqueta
-layeredpane=panel en capas
-list=lista
-listitem=elemento de lista
-menubar=barra de men\u00FAs
-menu=men\u00FA
-menuitem=elemento de men\u00FA
-optionpane=panel de opciones
-pagetab=separador de p\u00E1gina
-pagetablist=lista de separadores de p\u00E1gina
-panel=panel
-passwordtext=texto de contrase\u00F1a
-popupmenu=men\u00FA emergente
-progressbar=barra de progreso
-pushbutton=bot\u00F3n
-radiobutton=bot\u00F3n de radio
-rootpane=panel ra\u00EDz
-rowheader=cabecera de filas
-scrollbar=barra de desplazamiento
-scrollpane=panel de desplazamiento
-separator=separador
-slider=deslizador
-splitpane=panel de divisi\u00F3n
-swingcomponent=componente swing
-table=tabla
-text=texto
-tree=\u00E1rbol
-togglebutton=bot\u00F3n conmutador
-toolbar=barra de herramientas
-tooltip=ayuda de burbuja
-unknown=desconocido
-viewport=viewport
-window=ventana
-#
-# accessible relations
-#
-labelFor=etiqueta para
-labeledBy=etiquetado por
-memberOf=miembro de
-controlledBy=controlledBy
-controllerFor=controllerFor
-#
-# accessible states
-#
-active=activo
-armed=armado
-busy=ocupado
-checked=activado
-collapsed=reducido
-editable=editable
-expandable=ampliable
-expanded=ampliado
-enabled=activado
-focusable=enfocable
-focused=enfocado
-iconified=convertido en icono
-modal=modal
-multiline=l\u00EDnea m\u00FAltiple
-multiselectable=multiseleccionable
-opaque=opaco
-pressed=pulsado
-resizable=redimensionable
-selectable=seleccionable
-selected=seleccionado
-showing=mostrando
-singleline=l\u00EDnea \u00FAnica
-transient=transitorio
-visible=visible
-vertical=vertical
-horizontal=horizontal
-#
-# accessible actions
-#
-toggleexpand=activar/desactivar ampliaci\u00F3n
-
-# new relations, roles and states for J2SE 1.5.0
-
-# 
-# accessible relations
-#
-flowsTo=llega a
-flowsFrom=procede de
-subwindowOf=ventana subordinada de
-parentWindowOf=ventana principal de
-embeds=embebe
-embeddedBy=embebido por
-childNodeOf=nodo secundario de
-
-#
-# accessible roles
-#
-header=cabecera
-footer=pie
-paragraph=p\u00E1rrafo
-ruler=regla
-editbar=barra de edici\u00F3n
-progressMonitor=monitor de progreso
-
-#
-# accessible states
-#
-managesDescendants=gestiona descendientes
-indeterminate=indeterminada
-truncated=truncado
-
-# new for J2SE 1.6.0
-
-#
-# accessible roles
-#
-htmlcontainer=Contenedor HTML
-
-#
-# END OF MATERIAL TO LOCALIZE
-#
diff --git a/ojluni/src/main/java/com/sun/accessibility/internal/resources/accessibility_fr.properties b/ojluni/src/main/java/com/sun/accessibility/internal/resources/accessibility_fr.properties
deleted file mode 100755
index c399d9a..0000000
--- a/ojluni/src/main/java/com/sun/accessibility/internal/resources/accessibility_fr.properties
+++ /dev/null
@@ -1,146 +0,0 @@
-#
-# This properties file is used to create a PropertyResourceBundle
-# It contains Locale specific strings used be the Accessibility package.
-#
-# When this file is read in, the strings are put into the 
-# defaults table.  This is an implementation detail of the current
-# workings of Accessibility.  DO NOT DEPEND ON THIS.  
-# This may change in future versions of Accessibility as we improve 
-# localization support.
-#
-# @author  Lynn Monsanto
-
-#
-# accessible roles
-#
-alert=alerte
-awtcomponent=composant AWT
-checkbox=case \u00E0 cocher
-colorchooser=s\u00E9lecteur de couleurs
-columnheader=en-t\u00EAte de colonne
-combobox=liste d\u00E9roulante
-canvas=canevas
-desktopicon=ic\u00F4ne de bureau
-desktoppane=panneau de bureau
-dialog=bo\u00EEte de dialogue
-directorypane=panneau de r\u00E9pertoires
-glasspane=panneau de grossissement
-filechooser=s\u00E9lecteur de fichiers
-filler=\u00E9l\u00E9ment de remplissage
-frame=cadre
-internalframe=cadre interne
-label=libell\u00E9
-layeredpane=panneau superpos\u00E9
-list=liste
-listitem=\u00E9l\u00E9ment de liste
-menubar=barre de menus
-menu=menu
-menuitem=option de menu
-optionpane=panneau d'options
-pagetab=onglet de page
-pagetablist=liste d'onglets de page
-panel=panneau
-passwordtext=texte de mot de passe
-popupmenu=menu contextuel
-progressbar=barre de progression
-pushbutton=bouton
-radiobutton=bouton radio
-rootpane=panneau racine
-rowheader=en-t\u00EAte de ligne
-scrollbar=barre de d\u00E9filement
-scrollpane=panneau de d\u00E9filement
-separator=s\u00E9parateur
-slider=curseur
-splitpane=panneau divis\u00E9
-swingcomponent=composant Swing
-table=tableau
-text=texte
-tree=arborescence
-togglebutton=bouton de basculement
-toolbar=barre d'outils
-tooltip=info-bulle
-unknown=inconnu
-viewport=lucarne
-window=fen\u00EAtre
-#
-# accessible relations
-#
-labelFor=libell\u00E9 de
-labeledBy=libell\u00E9 par
-memberOf=membre de
-controlledBy=contr\u00F4l\u00E9 par
-controllerFor=contr\u00F4leur pour
-#
-# accessible states
-#
-active=actif
-armed=arm\u00E9
-busy=occup\u00E9
-checked=coch\u00E9
-collapsed=r\u00E9duit
-editable=modifiable
-expandable=extensible
-expanded=d\u00E9velopp\u00E9
-enabled=activ\u00E9
-focusable=zone d'entr\u00E9e possible
-focused=avec zone d'entr\u00E9e
-iconified=r\u00E9duit \u00E0 une ic\u00F4ne
-modal=modal
-multiline=ligne multiple
-multiselectable=multis\u00E9lectionnable
-opaque=opaque
-pressed=enfonc\u00E9
-resizable=redimensionnable
-selectable=s\u00E9lectionnable
-selected=s\u00E9lectionn\u00E9
-showing=montrant
-singleline=ligne unique
-transient=non persistant
-visible=visible
-vertical=vertical
-horizontal=horizontal
-#
-# accessible actions
-#
-toggleexpand=basculer le d\u00E9veloppement
-
-# new relations, roles and states for J2SE 1.5.0
-
-# 
-# accessible relations
-#
-flowsTo=flux vers
-flowsFrom=flux depuis
-subwindowOf=sous-fen\u00EAtre de
-parentWindowOf=fen\u00EAtre parente de
-embeds=incorpore
-embeddedBy=incorpor\u00E9 par
-childNodeOf=noeud enfant de
-
-#
-# accessible roles
-#
-header=en-t\u00EAte
-footer=pied de page
-paragraph=paragraphe
-ruler=r\u00E8gle
-editbar=barre d'\u00E9dition
-progressMonitor=contr\u00F4le de la progression
-
-#
-# accessible states
-#
-managesDescendants=g\u00E8re les descendants
-indeterminate=ind\u00E9termin\u00E9
-truncated=tronqu\u00E9
-
-# new for J2SE 1.6.0
-
-#
-# accessible roles
-#
-htmlcontainer=conteneur HTML
-
-#
-# END OF MATERIAL TO LOCALIZE
-#
diff --git a/ojluni/src/main/java/com/sun/accessibility/internal/resources/accessibility_it.properties b/ojluni/src/main/java/com/sun/accessibility/internal/resources/accessibility_it.properties
deleted file mode 100755
index 94eefb0..0000000
--- a/ojluni/src/main/java/com/sun/accessibility/internal/resources/accessibility_it.properties
+++ /dev/null
@@ -1,146 +0,0 @@
-#
-# This properties file is used to create a PropertyResourceBundle
-# It contains Locale specific strings used be the Accessibility package.
-#
-# When this file is read in, the strings are put into the 
-# defaults table.  This is an implementation detail of the current
-# workings of Accessibility.  DO NOT DEPEND ON THIS.  
-# This may change in future versions of Accessibility as we improve 
-# localization support.
-#
-# @author  Lynn Monsanto
-
-#
-# accessible roles
-#
-alert=avviso
-awtcomponent=componente AWT
-checkbox=casella di controllo
-colorchooser=selezione colori
-columnheader=intestazione colonna
-combobox=casella combinata
-canvas=sfondo
-desktopicon=icona desktop
-desktoppane=riquadro desktop
-dialog=finestra di dialogo
-directorypane=riquadro directory
-glasspane=riquadro trasparente
-filechooser=selezione file
-filler=utilit\u00E0 riempimento
-frame=cornice
-internalframe=cornice interna
-label=etichetta
-layeredpane=riquadro a livelli
-list=lista
-listitem=voce lista
-menubar=barra dei menu
-menu=menu
-menuitem=voce di menu
-optionpane=riquadro opzioni
-pagetab=scheda pagina
-pagetablist=lista schede pagina
-panel=pannello
-passwordtext=testo della password
-popupmenu=menu popup
-progressbar=barra di avanzamento
-pushbutton=pulsante
-radiobutton=pulsante di scelta
-rootpane=riquadro root
-rowheader=intestazione di riga
-scrollbar=barra di scorrimento
-scrollpane=riquadro scorrimento
-separator=separatore
-slider=dispositivo di scorrimento
-splitpane=riquadro doppio
-swingcomponent=componente swing
-table=tabella
-text=testo
-tree=albero
-togglebutton=interruttore
-toolbar=barra degli strumenti
-tooltip=descrizione comandi
-unknown=sconosciuto
-viewport=viewport
-window=finestra
-#
-# accessible relations
-#
-labelFor=etichetta per
-labeledBy=etichetta di
-memberOf=membro di
-controlledBy=controlledBy
-controllerFor=controllerFor
-#
-# accessible states
-#
-active=attivo
-armed=abilitato
-busy=occupato
-checked=verificato
-collapsed=compresso
-editable=modificabile
-expandable=espandibile
-expanded=espanso
-enabled=abilitato
-focusable=attivabile in primo piano
-focused=in primo piano
-iconified=ridotto a icona
-modal=modale
-multiline=a righe multiple
-multiselectable=multi-selezionabile
-opaque=nascosto
-pressed=premuto
-resizable=ridimensionabile
-selectable=selezionabile
-selected=selezionato
-showing=visualizzato
-singleline=a riga singola
-transient=transitorio
-visible=visibile
-vertical=verticale
-horizontal=orizzontale
-#
-# accessible actions
-#
-toggleexpand=abilita/disabilita espansione
-
-# new relations, roles and states for J2SE 1.5.0
-
-# 
-# accessible relations
-#
-flowsTo=va verso
-flowsFrom=proviene da
-subwindowOf=sottofinestra di
-parentWindowOf=finestra di livello superiore di
-embeds=incorpora
-embeddedBy=incorporato da
-childNodeOf=nodo figlio di
-
-#
-# accessible roles
-#
-header=intestazione
-footer=pi\u00E8 di pagina
-paragraph=paragrafo
-ruler=righello
-editbar=barra di modifica
-progressMonitor=stato avanzamento
-
-#
-# accessible states
-#
-managesDescendants=gestisce i discendenti
-indeterminate=indeterminato
-truncated=troncato
-
-# new for J2SE 1.6.0
-
-#
-# accessible roles
-#
-htmlcontainer=Contenitore HTML
-
-#
-# END OF MATERIAL TO LOCALIZE
-#
diff --git a/ojluni/src/main/java/com/sun/accessibility/internal/resources/accessibility_ja.properties b/ojluni/src/main/java/com/sun/accessibility/internal/resources/accessibility_ja.properties
deleted file mode 100755
index eefc178..0000000
--- a/ojluni/src/main/java/com/sun/accessibility/internal/resources/accessibility_ja.properties
+++ /dev/null
@@ -1,146 +0,0 @@
-#
-# This properties file is used to create a PropertyResourceBundle
-# It contains Locale specific strings used be the Accessibility package.
-#
-# When this file is read in, the strings are put into the 
-# defaults table.  This is an implementation detail of the current
-# workings of Accessibility.  DO NOT DEPEND ON THIS.  
-# This may change in future versions of Accessibility as we improve 
-# localization support.
-#
-# @author  Lynn Monsanto
-
-#
-# accessible roles
-#
-alert=\u30A2\u30E9\u30FC\u30C8
-awtcomponent=AWT\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8
-checkbox=\u30C1\u30A7\u30C3\u30AF\u30FB\u30DC\u30C3\u30AF\u30B9
-colorchooser=\u30AB\u30E9\u30FC\u30FB\u30C1\u30E5\u30FC\u30B6
-columnheader=\u5217\u30D8\u30C3\u30C0\u30FC
-combobox=\u30B3\u30F3\u30DC\u30FB\u30DC\u30C3\u30AF\u30B9
-canvas=\u30AD\u30E3\u30F3\u30D0\u30B9
-desktopicon=\u30C7\u30B9\u30AF\u30C8\u30C3\u30D7\u30FB\u30A2\u30A4\u30B3\u30F3
-desktoppane=\u30C7\u30B9\u30AF\u30C8\u30C3\u30D7\u533A\u753B
-dialog=\u30C0\u30A4\u30A2\u30ED\u30B0
-directorypane=\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u533A\u753B
-glasspane=\u30AC\u30E9\u30B9\u533A\u753B
-filechooser=\u30D5\u30A1\u30A4\u30EB\u30FB\u30C1\u30E5\u30FC\u30B6
-filler=\u30D5\u30A3\u30E9\u30FC
-frame=\u30D5\u30EC\u30FC\u30E0
-internalframe=\u5185\u90E8\u30D5\u30EC\u30FC\u30E0
-label=\u30E9\u30D9\u30EB
-layeredpane=\u968E\u5C64\u5316\u3055\u308C\u305F\u533A\u753B
-list=\u30EA\u30B9\u30C8
-listitem=\u30EA\u30B9\u30C8\u9805\u76EE
-menubar=\u30E1\u30CB\u30E5\u30FC\u30FB\u30D0\u30FC
-menu=\u30E1\u30CB\u30E5\u30FC
-menuitem=\u30E1\u30CB\u30E5\u30FC\u9805\u76EE
-optionpane=\u30AA\u30D7\u30B7\u30E7\u30F3\u533A\u753B
-pagetab=\u30DA\u30FC\u30B8\u30FB\u30BF\u30D6
-pagetablist=\u30DA\u30FC\u30B8\u30FB\u30BF\u30D6\u30FB\u30EA\u30B9\u30C8
-panel=\u30D1\u30CD\u30EB
-passwordtext=\u30D1\u30B9\u30EF\u30FC\u30C9\u30FB\u30C6\u30AD\u30B9\u30C8
-popupmenu=\u30DD\u30C3\u30D7\u30A2\u30C3\u30D7\u30FB\u30E1\u30CB\u30E5\u30FC
-progressbar=\u9032\u6357\u30D0\u30FC
-pushbutton=\u30D7\u30C3\u30B7\u30E5\u30FB\u30DC\u30BF\u30F3
-radiobutton=\u30E9\u30B8\u30AA\u30FB\u30DC\u30BF\u30F3
-rootpane=\u30EB\u30FC\u30C8\u533A\u753B
-rowheader=\u884C\u30D8\u30C3\u30C0\u30FC
-scrollbar=\u30B9\u30AF\u30ED\u30FC\u30EB\u30FB\u30D0\u30FC
-scrollpane=\u30B9\u30AF\u30ED\u30FC\u30EB\u533A\u753B
-separator=\u30BB\u30D1\u30EC\u30FC\u30BF
-slider=\u30B9\u30E9\u30A4\u30C0
-splitpane=\u5206\u5272\u533A\u753B
-swingcomponent=Swing\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8
-table=\u8868
-text=\u30C6\u30AD\u30B9\u30C8
-tree=\u30C4\u30EA\u30FC
-togglebutton=\u30C8\u30B0\u30EB\u30FB\u30DC\u30BF\u30F3
-toolbar=\u30C4\u30FC\u30EB\u30D0\u30FC
-tooltip=\u30C4\u30FC\u30EB\u30C1\u30C3\u30D7
-unknown=\u4E0D\u660E
-viewport=\u30D3\u30E5\u30FC\u30DD\u30FC\u30C8
-window=\u30A6\u30A3\u30F3\u30C9\u30A6
-#
-# accessible relations
-#
-labelFor=label for
-labeledBy=labeled by
-memberOf=member of
-controlledBy=controlledBy
-controllerFor=controllerFor
-#
-# accessible states
-#
-active=\u30A2\u30AF\u30C6\u30A3\u30D6
-armed=\u4F5C\u52D5\u6E96\u5099\u5B8C\u4E86
-busy=\u30D3\u30B8\u30FC
-checked=\u30C1\u30A7\u30C3\u30AF
-collapsed=\u77ED\u7E2E
-editable=\u7DE8\u96C6\u53EF\u80FD
-expandable=\u5C55\u958B\u53EF\u80FD
-expanded=\u5C55\u958B
-enabled=\u6709\u52B9
-focusable=\u30D5\u30A9\u30FC\u30AB\u30B9\u53EF\u80FD
-focused=\u30D5\u30A9\u30FC\u30AB\u30B9
-iconified=\u30A2\u30A4\u30B3\u30F3\u5316
-modal=\u30E2\u30FC\u30C0\u30EB
-multiline=\u8907\u6570\u884C
-multiselectable=\u8907\u6570\u9078\u629E\u53EF\u80FD
-opaque=\u4E0D\u900F\u660E
-pressed=\u62BC\u4E0B
-resizable=\u30B5\u30A4\u30BA\u5909\u66F4\u53EF\u80FD
-selectable=\u9078\u629E\u53EF\u80FD
-selected=\u9078\u629E
-showing=\u8868\u793A
-singleline=\u5358\u4E00\u884C
-transient=\u4E00\u6642
-visible=\u53EF\u8996
-vertical=\u5782\u76F4
-horizontal=\u6C34\u5E73
-#
-# accessible actions
-#
-toggleexpand=\u5C55\u958B\u306E\u30C8\u30B0\u30EB
-
-# new relations, roles and states for J2SE 1.5.0
-
-# 
-# accessible relations
-#
-flowsTo=flows to
-flowsFrom=flows from
-subwindowOf=subwindow of
-parentWindowOf=parent window of
-embeds=\u57CB\u8FBC\u307F
-embeddedBy=embedded by
-childNodeOf=child node of
-
-#
-# accessible roles
-#
-header=\u30D8\u30C3\u30C0\u30FC
-footer=\u30D5\u30C3\u30BF\u30FC
-paragraph=\u6BB5\u843D
-ruler=\u30EB\u30FC\u30E9\u30FC
-editbar=\u7DE8\u96C6\u30D0\u30FC
-progressMonitor=\u9032\u6357\u30E2\u30CB\u30BF\u30FC
-
-#
-# accessible states
-#
-managesDescendants=\u5B50\u5B6B\u3092\u7BA1\u7406
-indeterminate=\u4E0D\u78BA\u5B9A
-truncated=\u4E0D\u5B8C\u5168
-
-# new for J2SE 1.6.0
-
-#
-# accessible roles
-#
-htmlcontainer=HTML\u30B3\u30F3\u30C6\u30CA
-
-#
-# END OF MATERIAL TO LOCALIZE
-#
diff --git a/ojluni/src/main/java/com/sun/accessibility/internal/resources/accessibility_ko.properties b/ojluni/src/main/java/com/sun/accessibility/internal/resources/accessibility_ko.properties
deleted file mode 100755
index 530caa6..0000000
--- a/ojluni/src/main/java/com/sun/accessibility/internal/resources/accessibility_ko.properties
+++ /dev/null
@@ -1,146 +0,0 @@
-#
-# This properties file is used to create a PropertyResourceBundle
-# It contains Locale specific strings used be the Accessibility package.
-#
-# When this file is read in, the strings are put into the 
-# defaults table.  This is an implementation detail of the current
-# workings of Accessibility.  DO NOT DEPEND ON THIS.  
-# This may change in future versions of Accessibility as we improve 
-# localization support.
-#
-# @author  Lynn Monsanto
-
-#
-# accessible roles
-#
-alert=\uACBD\uBCF4
-awtcomponent=AWT \uAD6C\uC131 \uC694\uC18C
-checkbox=\uCCB4\uD06C \uBC15\uC2A4
-colorchooser=\uC0C9\uC0C1 \uC120\uD0DD\uAE30
-columnheader=\uC5F4 \uBA38\uB9AC\uAE00
-combobox=\uCF64\uBCF4 \uC0C1\uC790
-canvas=\uCE94\uBC84\uC2A4
-desktopicon=\uBC14\uD0D5 \uD654\uBA74 \uC544\uC774\uCF58
-desktoppane=\uBC14\uD0D5 \uD654\uBA74 \uCC3D
-dialog=\uB300\uD654\uC0C1\uC790
-directorypane=\uB514\uB809\uD1A0\uB9AC \uCC3D
-glasspane=\uAE00\uB798\uC2A4 \uCC3D
-filechooser=\uD30C\uC77C \uC120\uD0DD\uAE30
-filler=\uD544\uB7EC
-frame=\uD504\uB808\uC784
-internalframe=\uB0B4\uBD80 \uD504\uB808\uC784
-label=\uB808\uC774\uBE14
-layeredpane=\uACC4\uCE35\uC801 \uCC3D
-list=\uBAA9\uB85D
-listitem=\uBAA9\uB85D \uD56D\uBAA9
-menubar=\uBA54\uB274 \uD45C\uC2DC\uC904
-menu=\uBA54\uB274
-menuitem=\uBA54\uB274 \uD56D\uBAA9
-optionpane=\uC635\uC158 \uCC3D
-pagetab=\uD398\uC774\uC9C0 \uD0ED
-pagetablist=\uD398\uC774\uC9C0 \uD0ED \uBAA9\uB85D
-panel=\uD328\uB110
-passwordtext=\uBE44\uBC00\uBC88\uD638 \uD14D\uC2A4\uD2B8
-popupmenu=\uD31D\uC5C5 \uBA54\uB274
-progressbar=\uC9C4\uD589 \uB9C9\uB300
-pushbutton=\uB204\uB984 \uB2E8\uCD94
-radiobutton=\uB77C\uB514\uC624 \uB2E8\uCD94
-rootpane=\uB8E8\uD2B8 \uCC3D
-rowheader=\uD589 \uBA38\uB9AC\uAE00
-scrollbar=\uC2A4\uD06C\uB864 \uB9C9\uB300
-scrollpane=\uC2A4\uD06C\uB864 \uCC3D
-separator=\uAD6C\uBD84 \uAE30\uD638
-slider=\uC2AC\uB77C\uC774\uB354
-splitpane=\uBD84\uD560 \uCC3D
-swingcomponent=\uD68C\uC804 \uAD6C\uC131 \uC694\uC18C
-table=\uD14C\uC774\uBE14
-text=\uD14D\uC2A4\uD2B8
-tree=\uD2B8\uB9AC
-togglebutton=\uD1A0\uAE00 \uB2E8\uCD94
-toolbar=\uB3C4\uAD6C \uBAA8\uC74C
-tooltip=\uB3C4\uAD6C \uC124\uBA85
-unknown=\uC54C \uC218 \uC5C6\uC74C
-viewport=\uBDF0\uD3EC\uD2B8
-window=\uCC3D
-#
-# accessible relations
-#
-labelFor=\uB808\uC774\uBE14 \uB300\uC0C1
-labeledBy=\uB808\uC774\uBE14 \uC9C0\uC815\uC790
-memberOf=\uC18C\uC18D \uADF8\uB8F9
-controlledBy=controlledBy
-controllerFor=controllerFor
-#
-# accessible states
-#
-active=\uD65C\uC131
-armed=\uD06C\uAE30
-busy=\uC0AC\uC6A9 \uC911
-checked=\uC120\uD0DD\uB428
-collapsed=\uCD95\uC18C\uB428
-editable=\uD3B8\uC9D1 \uAC00\uB2A5
-expandable=\uD655\uC7A5 \uAC00\uB2A5
-expanded=\uD655\uC7A5\uB428
-enabled=\uC0AC\uC6A9
-focusable=\uD3EC\uCEE4\uC2A4 \uAC00\uB2A5
-focused=\uD3EC\uCEE4\uC2A4\uB428
-iconified=\uC544\uC774\uCF58\uD654\uB428
-modal=\uBAA8\uB2EC
-multiline=\uBCF5\uC218 \uD589
-multiselectable=\uB2E4\uC911 \uC120\uD0DD \uAC00\uB2A5
-opaque=\uBD88\uD22C\uBA85
-pressed=\uB204\uB984
-resizable=\uD06C\uAE30 \uC870\uC815 \uAC00\uB2A5
-selectable=\uC120\uD0DD \uAC00\uB2A5
-selected=\uC120\uD0DD\uB428
-showing=\uD45C\uC2DC
-singleline=\uD55C \uC904
-transient=\uC77C\uC2DC
-visible=\uD45C\uC2DC \uAC00\uB2A5
-vertical=\uC138\uB85C
-horizontal=\uAC00\uB85C
-#
-# accessible actions
-#
-toggleexpand=\uD1A0\uAE00 \uD655\uC7A5
-
-# new relations, roles and states for J2SE 1.5.0
-
-# 
-# accessible relations
-#
-flowsTo=\uD750\uB984 \uB300\uC0C1
-flowsFrom=\uD750\uB984 \uCD9C\uCC98
-subwindowOf=\uD558\uC704 \uCC3D
-parentWindowOf=\uC0C1\uC704 \uCC3D
-embeds=\uD3EC\uD568
-embeddedBy=\uD3EC\uD568 \uC8FC\uCCB4
-childNodeOf=\uD558\uC704 \uB178\uB4DC
-
-#
-# accessible roles
-#
-header=\uBA38\uB9AC\uAE00
-footer=\uBC14\uB2E5\uAE00
-paragraph=\uB2E8\uB77D
-ruler=\uB208\uAE08\uC790
-editbar=\uD3B8\uC9D1 \uB3C4\uAD6C
-progressMonitor=\uC9C4\uD589 \uBAA8\uB2C8\uD130
-
-#
-# accessible states
-#
-managesDescendants=\uC885\uC18D \uD56D\uBAA9 \uAD00\uB9AC
-indeterminate=\uD655\uC815\uB418\uC9C0 \uC54A\uC74C
-truncated=\uC798\uB9BC
-
-# new for J2SE 1.6.0
-
-#
-# accessible roles
-#
-htmlcontainer=HTML \uCEE8\uD14C\uC774\uB108
-
-#
-# END OF MATERIAL TO LOCALIZE
-#
diff --git a/ojluni/src/main/java/com/sun/accessibility/internal/resources/accessibility_pt_BR.properties b/ojluni/src/main/java/com/sun/accessibility/internal/resources/accessibility_pt_BR.properties
deleted file mode 100755
index f8aaf35..0000000
--- a/ojluni/src/main/java/com/sun/accessibility/internal/resources/accessibility_pt_BR.properties
+++ /dev/null
@@ -1,146 +0,0 @@
-#
-# This properties file is used to create a PropertyResourceBundle
-# It contains Locale specific strings used be the Accessibility package.
-#
-# When this file is read in, the strings are put into the 
-# defaults table.  This is an implementation detail of the current
-# workings of Accessibility.  DO NOT DEPEND ON THIS.  
-# This may change in future versions of Accessibility as we improve 
-# localization support.
-#
-# @author  Lynn Monsanto
-
-#
-# accessible roles
-#
-alert=alerta
-awtcomponent=componente AWT
-checkbox=caixa de sele\u00E7\u00E3o
-colorchooser=seletor de cores
-columnheader=cabe\u00E7alho da coluna
-combobox=caixa de combina\u00E7\u00E3o
-canvas=tela
-desktopicon=\u00EDcone da \u00E1rea de trabalho
-desktoppane=painel da \u00E1rea de trabalho
-dialog=caixa de di\u00E1logo
-directorypane=painel do diret\u00F3rio
-glasspane=painel transparente
-filechooser=seletor de arquivos
-filler=preenchedor
-frame=quadro
-internalframe=quadro interno
-label=r\u00F3tulo
-layeredpane=painel em camadas
-list=lista
-listitem=item da lista
-menubar=barra de menus
-menu=menu
-menuitem=item do menu
-optionpane=painel de op\u00E7\u00F5es
-pagetab=guia da p\u00E1gina
-pagetablist=lista de guias da p\u00E1gina
-panel=painel
-passwordtext=texto da senha
-popupmenu=menu pop-up
-progressbar=barra de progresso
-pushbutton=bot\u00E3o de a\u00E7\u00E3o
-radiobutton=bot\u00E3o de op\u00E7\u00E3o
-rootpane=painel base
-rowheader=cabe\u00E7alho da linha
-scrollbar=barra de rolagem
-scrollpane=painel de rolagem
-separator=separador
-slider=controle deslizante
-splitpane=painel dividido
-swingcomponent=componente swing
-table=tabela
-text=texto
-tree=\u00E1rvore
-togglebutton=bot\u00E3o de altern\u00E2ncia
-toolbar=barra de ferramentas
-tooltip=dica de ferramenta
-unknown=desconhecido
-viewport=janela de visualiza\u00E7\u00E3o
-window=janela
-#
-# accessible relations
-#
-labelFor=r\u00F3tulo de
-labeledBy=rotulado por
-memberOf=membro de
-controlledBy=controlledBy
-controllerFor=controllerFor
-#
-# accessible states
-#
-active=ativo
-armed=armado
-busy=ocupado
-checked=selecionado
-collapsed=contra\u00EDdo
-editable=edit\u00E1vel
-expandable=expans\u00EDvel
-expanded=expandido
-enabled=ativado
-focusable=focaliz\u00E1vel
-focused=focalizado
-iconified=iconizado
-modal=modal
-multiline=v\u00E1rias linhas
-multiselectable=m\u00FAltipla escolha
-opaque=opaco
-pressed=pressionado
-resizable=redimension\u00E1vel
-selectable=selecion\u00E1vel
-selected=selecionado
-showing=mostrando
-singleline=linha \u00FAnica
-transient=transit\u00F3rio
-visible=vis\u00EDvel
-vertical=vertical
-horizontal=horizontal
-#
-# accessible actions
-#
-toggleexpand=alternar expans\u00E3o
-
-# new relations, roles and states for J2SE 1.5.0
-
-# 
-# accessible relations
-#
-flowsTo=fluxos para
-flowsFrom=fluxos de
-subwindowOf=subjanela de
-parentWindowOf=janela pai de
-embeds=integra
-embeddedBy=integrado por
-childNodeOf=n\u00F3 filho de
-
-#
-# accessible roles
-#
-header=cabe\u00E7alho
-footer=rodap\u00E9
-paragraph=par\u00E1grafo
-ruler=r\u00E9gua
-editbar=barra de edi\u00E7\u00E3o
-progressMonitor=monitor de progresso
-
-#
-# accessible states
-#
-managesDescendants=gerencia descendentes
-indeterminate=indeterminado
-truncated=truncado
-
-# new for J2SE 1.6.0
-
-#
-# accessible roles
-#
-htmlcontainer=Container de HTML
-
-#
-# END OF MATERIAL TO LOCALIZE
-#
diff --git a/ojluni/src/main/java/com/sun/accessibility/internal/resources/accessibility_sv.properties b/ojluni/src/main/java/com/sun/accessibility/internal/resources/accessibility_sv.properties
deleted file mode 100755
index 962b9d3..0000000
--- a/ojluni/src/main/java/com/sun/accessibility/internal/resources/accessibility_sv.properties
+++ /dev/null
@@ -1,146 +0,0 @@
-#
-# This properties file is used to create a PropertyResourceBundle
-# It contains Locale specific strings used be the Accessibility package.
-#
-# When this file is read in, the strings are put into the 
-# defaults table.  This is an implementation detail of the current
-# workings of Accessibility.  DO NOT DEPEND ON THIS.  
-# This may change in future versions of Accessibility as we improve 
-# localization support.
-#
-# @author  Lynn Monsanto
-
-#
-# accessible roles
-#
-alert=avisering
-awtcomponent=AWT-komponent
-checkbox=kryssruta
-colorchooser=f\u00E4rgv\u00E4ljare
-columnheader=kolumnrubrik
-combobox=kombinationsruta
-canvas=rityta
-desktopicon=skrivbordsikon
-desktoppane=skrivbordsruta
-dialog=dialogruta
-directorypane=katalogruta
-glasspane=glasruta
-filechooser=filv\u00E4ljare
-filler=utfyllnad
-frame=ram
-internalframe=intern ram
-label=etikett
-layeredpane=staplad ruta
-list=lista
-listitem=listobjekt
-menubar=menyrad
-menu=meny
-menuitem=menyalternativ
-optionpane=alternativruta
-pagetab=sidflik
-pagetablist=sidflikslista
-panel=panel
-passwordtext=l\u00F6senordstext
-popupmenu=snabbmeny
-progressbar=statusrad
-pushbutton=knapp
-radiobutton=alternativknapp
-rootpane=grundruta
-rowheader=radrubrik
-scrollbar=rullningslist
-scrollpane=rullningsruta
-separator=avskiljare
-slider=skjutreglage
-splitpane=delad ruta
-swingcomponent=swing-komponent
-table=tabell
-text=text
-tree=tr\u00E4d
-togglebutton=v\u00E4xlingsknapp
-toolbar=verktygsrad
-tooltip=knappbeskrivning
-unknown=ok\u00E4nd
-viewport=vyport
-window=f\u00F6nster
-#
-# accessible relations
-#
-labelFor=etikett f\u00F6r
-labeledBy=etikett av
-memberOf=medlem i
-controlledBy=controlledBy
-controllerFor=controllerFor
-#
-# accessible states
-#
-active=aktiv
-armed=redo
-busy=upptagen
-checked=markerad
-collapsed=komprimerad
-editable=redigerbar
-expandable=ut\u00F6kningsbar
-expanded=ut\u00F6kad
-enabled=aktiverad
-focusable=fokuseringsbar
-focused=fokuserad
-iconified=minimerad
-modal=modal
-multiline=flera rader
-multiselectable=flerval
-opaque=t\u00E4ckande
-pressed=nedtryckt
-resizable=storleks\u00E4ndringsbar
-selectable=valbar
-selected=vald
-showing=visas
-singleline=en rad
-transient=tillf\u00E4llig
-visible=synlig
-vertical=vertikal
-horizontal=horisontell
-#
-# accessible actions
-#
-toggleexpand=v\u00E4xla ut\u00F6ka
-
-# new relations, roles and states for J2SE 1.5.0
-
-# 
-# accessible relations
-#
-flowsTo=fl\u00F6dar till
-flowsFrom=fl\u00F6dar fr\u00E5n
-subwindowOf=delf\u00F6nster av
-parentWindowOf=\u00F6verordnat f\u00F6nster f\u00F6r
-embeds=b\u00E4ddar in
-embeddedBy=b\u00E4ddas in av
-childNodeOf=underordnad nod f\u00F6r
-
-#
-# accessible roles
-#
-header=sidhuvud
-footer=sidfot
-paragraph=stycke
-ruler=linjal
-editbar=redigeringslist
-progressMonitor=f\u00F6rlopps\u00F6vervakare
-
-#
-# accessible states
-#
-managesDescendants=hanterar underordnade
-indeterminate=obest\u00E4mt
-truncated=kapad
-
-# new for J2SE 1.6.0
-
-#
-# accessible roles
-#
-htmlcontainer=HTML-container
-
-#
-# END OF MATERIAL TO LOCALIZE
-#
diff --git a/ojluni/src/main/java/com/sun/accessibility/internal/resources/accessibility_zh_CN.properties b/ojluni/src/main/java/com/sun/accessibility/internal/resources/accessibility_zh_CN.properties
deleted file mode 100755
index da67e24..0000000
--- a/ojluni/src/main/java/com/sun/accessibility/internal/resources/accessibility_zh_CN.properties
+++ /dev/null
@@ -1,146 +0,0 @@
-#
-# This properties file is used to create a PropertyResourceBundle
-# It contains Locale specific strings used be the Accessibility package.
-#
-# When this file is read in, the strings are put into the 
-# defaults table.  This is an implementation detail of the current
-# workings of Accessibility.  DO NOT DEPEND ON THIS.  
-# This may change in future versions of Accessibility as we improve 
-# localization support.
-#
-# @author  Lynn Monsanto
-
-#
-# accessible roles
-#
-alert=\u9884\u8B66
-awtcomponent=AWT \u7EC4\u4EF6
-checkbox=\u590D\u9009\u6846
-colorchooser=\u989C\u8272\u9009\u62E9\u5668
-columnheader=\u5217\u6807\u9898
-combobox=\u7EC4\u5408\u6846
-canvas=\u753B\u5E03
-desktopicon=\u684C\u9762\u56FE\u6807
-desktoppane=\u684C\u9762\u7A97\u683C
-dialog=\u5BF9\u8BDD
-directorypane=\u76EE\u5F55\u7A97\u683C
-glasspane=\u73BB\u7483\u7A97\u683C
-filechooser=\u6587\u4EF6\u9009\u62E9\u5668
-filler=\u6F0F\u6597
-frame=\u6846\u67B6
-internalframe=\u5185\u90E8\u6846\u67B6
-label=\u6807\u7B7E
-layeredpane=\u5206\u5C42\u7A97\u683C
-list=\u5217\u8868
-listitem=\u5217\u8868\u9879
-menubar=\u83DC\u5355\u680F
-menu=\u83DC\u5355
-menuitem=\u83DC\u5355\u9879
-optionpane=\u9009\u9879\u7A97\u683C
-pagetab=\u9875\u6807\u7B7E
-pagetablist=\u9875\u6807\u7B7E\u5217\u8868
-panel=\u9762\u677F
-passwordtext=\u53E3\u4EE4\u6587\u672C
-popupmenu=\u5F39\u51FA\u5F0F\u83DC\u5355
-progressbar=\u8FDB\u5EA6\u680F
-pushbutton=\u6309\u94AE
-radiobutton=\u5355\u9009\u6309\u94AE
-rootpane=\u6839\u7A97\u683C
-rowheader=\u884C\u6807\u9898
-scrollbar=\u6EDA\u52A8\u6761
-scrollpane=\u6EDA\u52A8\u7A97\u683C
-separator=\u5206\u9694\u6761
-slider=\u6ED1\u5757
-splitpane=\u62C6\u5206\u7A97\u683C
-swingcomponent=\u65CB\u8F6C\u7EC4\u4EF6
-table=\u8868
-text=\u6587\u672C
-tree=\u6811
-togglebutton=\u5207\u6362\u6309\u94AE
-toolbar=\u5DE5\u5177\u680F
-tooltip=\u5DE5\u5177\u63D0\u793A
-unknown=\u672A\u77E5
-viewport=\u89C6\u7A97
-window=\u7A97\u53E3
-#
-# accessible relations
-#
-labelFor=\u6807\u7B7E\u5C5E\u4E8E
-labeledBy=\u6807\u7B7E\u5236\u4F5C\u8005
-memberOf=\u5C5E\u4E8E
-controlledBy=controlledBy
-controllerFor=controllerFor
-#
-# accessible states
-#
-active=\u6D3B\u52A8
-armed=\u5F85\u547D
-busy=\u5FD9
-checked=\u5DF2\u9009\u4E2D
-collapsed=\u5DF2\u6536\u7F29
-editable=\u53EF\u7F16\u8F91
-expandable=\u53EF\u5C55\u5F00
-expanded=\u5DF2\u5C55\u5F00
-enabled=\u542F\u7528
-focusable=\u53EF\u96C6\u4E2D
-focused=\u5DF2\u96C6\u4E2D
-iconified=\u56FE\u6807\u5F0F
-modal=\u6A21\u6001
-multiline=\u591A\u884C
-multiselectable=\u591A\u9009\u62E9
-opaque=\u4E0D\u900F\u660E
-pressed=\u5DF2\u6309\u4E0B
-resizable=\u53EF\u8C03\u6574\u5927\u5C0F
-selectable=\u53EF\u9009\u62E9
-selected=\u6240\u9009
-showing=\u6B63\u5728\u663E\u793A
-singleline=\u5355\u884C
-transient=\u77AC\u65F6
-visible=\u53EF\u89C1
-vertical=\u5782\u76F4
-horizontal=\u6C34\u5E73
-#
-# accessible actions
-#
-toggleexpand=\u5207\u6362\u5C55\u5F00
-
-# new relations, roles and states for J2SE 1.5.0
-
-# 
-# accessible relations
-#
-flowsTo=\u6D41\u5411
-flowsFrom=\u6D41\u81EA
-subwindowOf=\u5B50\u7A97\u53E3
-parentWindowOf=\u7236\u7A97\u53E3
-embeds=\u5D4C\u5165\u9879
-embeddedBy=\u5D4C\u5165\u8005
-childNodeOf=\u5B50\u8282\u70B9
-
-#
-# accessible roles
-#
-header=\u9875\u7709
-footer=\u9875\u811A
-paragraph=\u6BB5\u843D
-ruler=\u6807\u5C3A
-editbar=\u7F16\u8F91\u680F
-progressMonitor=\u8FDB\u5EA6\u76D1\u89C6\u5668
-
-#
-# accessible states
-#
-managesDescendants=\u7BA1\u7406\u5B50\u9879
-indeterminate=\u4E0D\u786E\u5B9A
-truncated=\u5DF2\u622A\u65AD
-
-# new for J2SE 1.6.0
-
-#
-# accessible roles
-#
-htmlcontainer=HTML \u5BB9\u5668
-
-#
-# END OF MATERIAL TO LOCALIZE
-#
diff --git a/ojluni/src/main/java/com/sun/accessibility/internal/resources/accessibility_zh_TW.properties b/ojluni/src/main/java/com/sun/accessibility/internal/resources/accessibility_zh_TW.properties
deleted file mode 100755
index 1de30c2..0000000
--- a/ojluni/src/main/java/com/sun/accessibility/internal/resources/accessibility_zh_TW.properties
+++ /dev/null
@@ -1,146 +0,0 @@
-#
-# This properties file is used to create a PropertyResourceBundle
-# It contains Locale specific strings used be the Accessibility package.
-#
-# When this file is read in, the strings are put into the 
-# defaults table.  This is an implementation detail of the current
-# workings of Accessibility.  DO NOT DEPEND ON THIS.  
-# This may change in future versions of Accessibility as we improve 
-# localization support.
-#
-# @author  Lynn Monsanto
-
-#
-# accessible roles
-#
-alert=\u8B66\u793A
-awtcomponent=AWT \u5143\u4EF6
-checkbox=\u6838\u53D6\u65B9\u584A
-colorchooser=\u8272\u5F69\u9078\u64C7\u5668
-columnheader=\u76F4\u6B04\u6A19\u984C
-combobox=\u4E0B\u62C9\u5F0F\u6E05\u55AE\u65B9\u584A
-canvas=\u756B\u5E03
-desktopicon=\u684C\u9762\u5716\u793A
-desktoppane=\u684C\u9762\u7A97\u683C
-dialog=\u5C0D\u8A71\u65B9\u584A
-directorypane=\u76EE\u9304\u7A97\u683C
-glasspane=\u6AA2\u8996\u7A97\u683C
-filechooser=\u6A94\u6848\u9078\u64C7\u5668
-filler=\u586B\u5145\u7269
-frame=\u6846\u67B6
-internalframe=\u5167\u90E8\u6846\u67B6
-label=\u6A19\u7C64
-layeredpane=\u5206\u5C64\u7A97\u683C
-list=\u6E05\u55AE
-listitem=\u6E05\u55AE\u9805\u76EE
-menubar=\u529F\u80FD\u8868\u5217
-menu=\u529F\u80FD\u8868
-menuitem=\u529F\u80FD\u8868\u9805\u76EE
-optionpane=\u9078\u9805\u7A97\u683C
-pagetab=\u9801\u9762\u9801\u7C64
-pagetablist=\u9801\u9762\u9801\u7C64\u6E05\u55AE
-panel=\u9762\u677F
-passwordtext=\u5BC6\u78BC\u6587\u5B57
-popupmenu=\u5373\u73FE\u5F0F\u529F\u80FD\u8868
-progressbar=\u9032\u5EA6\u5217
-pushbutton=\u4E0B\u58D3\u6309\u9215
-radiobutton=\u55AE\u9078\u9215
-rootpane=root \u7A97\u683C
-rowheader=\u5217\u6A19\u984C
-scrollbar=\u6372\u8EF8
-scrollpane=\u6372\u52D5\u7A97\u683C
-separator=\u5206\u9694\u5143
-slider=\u6ED1\u52D5\u8EF8
-splitpane=\u5206\u5272\u7A97\u683C
-swingcomponent=Swing \u5143\u4EF6
-table=\u8868\u683C
-text=\u6587\u5B57
-tree=\u6A39\u72C0\u7D50\u69CB
-togglebutton=\u5207\u63DB\u6309\u9215
-toolbar=\u5DE5\u5177\u5217
-tooltip=\u5DE5\u5177\u63D0\u793A
-unknown=\u4E0D\u660E\u7684
-viewport=\u6AA2\u8996\u5340
-window=\u8996\u7A97
-#
-# accessible relations
-#
-labelFor=\u6A19\u793A\u5C0D\u8C61
-labeledBy=\u6A19\u793A\u8005
-memberOf=\u6240\u5C6C\u6210\u54E1
-controlledBy=\u63A7\u5236\u8005
-controllerFor=\u63A7\u5236\u5C0D\u8C61
-#
-# accessible states
-#
-active=\u4F5C\u7528\u4E2D
-armed=\u5DF2\u914D\u5099
-busy=\u5FD9\u788C\u4E2D
-checked=\u5DF2\u6838\u9078
-collapsed=\u5DF2\u6536\u7E2E
-editable=\u53EF\u7DE8\u8F2F
-expandable=\u53EF\u64F4\u5C55
-expanded=\u5DF2\u64F4\u5C55
-enabled=\u5DF2\u555F\u7528
-focusable=\u53EF\u805A\u7126
-focused=\u5DF2\u805A\u7126
-iconified=\u5DF2\u5716\u793A\u5316
-modal=\u6A21\u614B
-multiline=\u591A\u884C
-multiselectable=\u53EF\u591A\u91CD\u9078\u53D6
-opaque=\u4E0D\u900F\u660E
-pressed=\u5DF2\u6309\u4E0B
-resizable=\u53EF\u8ABF\u6574\u5927\u5C0F
-selectable=\u53EF\u9078\u53D6
-selected=\u5DF2\u9078\u53D6
-showing=\u986F\u793A
-singleline=\u55AE\u884C
-transient=\u66AB\u6642\u7684
-visible=\u53EF\u898B\u7684
-vertical=\u5782\u76F4
-horizontal=\u6C34\u5E73
-#
-# accessible actions
-#
-toggleexpand=\u5207\u63DB\u64F4\u5C55
-
-# new relations, roles and states for J2SE 1.5.0
-
-# 
-# accessible relations
-#
-flowsTo=\u6D41\u52D5\u81F3
-flowsFrom=\u6D41\u52D5\u81EA
-subwindowOf=\u5B50\u8996\u7A97
-parentWindowOf=\u7236\u7CFB\u8996\u7A97
-embeds=\u5167\u5D4C
-embeddedBy=\u5167\u5D4C\u8005
-childNodeOf=\u5B50\u7BC0\u9EDE
-
-#
-# accessible roles
-#
-header=\u9801\u9996
-footer=\u9801\u5C3E
-paragraph=\u6BB5\u843D
-ruler=\u5C3A\u898F
-editbar=\u7DE8\u8F2F\u5217
-progressMonitor=\u9032\u5EA6\u76E3\u8996\u5668
-
-#
-# accessible states
-#
-managesDescendants=\u7BA1\u7406\u5B50\u4EE3
-indeterminate=\u4E0D\u78BA\u5B9A
-truncated=\u5DF2\u622A\u65B7
-
-# new for J2SE 1.6.0
-
-#
-# accessible roles
-#
-htmlcontainer=HTML \u5BB9\u5668
-
-#
-# END OF MATERIAL TO LOCALIZE
-#
diff --git a/ojluni/src/main/java/com/sun/awt/AWTUtilities.java b/ojluni/src/main/java/com/sun/awt/AWTUtilities.java
deleted file mode 100755
index e6ba760..0000000
--- a/ojluni/src/main/java/com/sun/awt/AWTUtilities.java
+++ /dev/null
@@ -1,462 +0,0 @@
-/*
- * Copyright (c) 2008, 2009, 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.awt;
-
-import java.awt.*;
-
-import sun.awt.AWTAccessor;
-import sun.awt.SunToolkit;
-
-/**
- * A collection of utility methods for AWT.
- *
- * The functionality provided by the static methods of the class includes:
- * <ul>
- * <li>Setting shapes on top-level windows
- * <li>Setting a constant alpha value for each pixel of a top-level window
- * <li>Making a window non-opaque, after that it paints only explicitly
- * painted pixels on the screen, with arbitrary alpha values for every pixel.
- * <li>Setting a 'mixing-cutout' shape for a component.
- * </ul>
- * <p>
- * A "top-level window" is an instance of the {@code Window} class (or its
- * descendant, such as {@code JFrame}).
- * <p>
- * Some of the mentioned features may not be supported by the native platform.
- * To determine whether a particular feature is supported, the user must use
- * the {@code isTranslucencySupported()} method of the class passing a desired
- * translucency kind (a member of the {@code Translucency} enum) as an
- * argument.
- * <p>
- * The per-pixel alpha feature also requires the user to create her/his
- * windows using a translucency-capable graphics configuration.
- * The {@code isTranslucencyCapable()} method must
- * be used to verify whether any given GraphicsConfiguration supports
- * the trasnlcency effects.
- * <p>
- * <b>WARNING</b>: This class is an implementation detail and only meant
- * for limited use outside of the core platform. This API may change
- * drastically between update release, and it may even be
- * removed or be moved in some other package(s)/class(es).
- */
-public final class AWTUtilities {
-
-    /**
-     * The AWTUtilities class should not be instantiated
-     */
-    private AWTUtilities() {
-    }
-
-    /** Kinds of translucency supported by the underlying system.
-     *  @see #isTranslucencySupported
-     */
-    public static enum Translucency {
-        /**
-         * Represents support in the underlying system for windows each pixel
-         * of which is guaranteed to be either completely opaque, with
-         * an alpha value of 1.0, or completely transparent, with an alpha
-         * value of 0.0.
-         */
-        PERPIXEL_TRANSPARENT,
-
-        /**
-         * Represents support in the underlying system for windows all of
-         * the pixels of which have the same alpha value between or including
-         * 0.0 and 1.0.
-         */
-        TRANSLUCENT,
-
-        /**
-         * Represents support in the underlying system for windows that
-         * contain or might contain pixels with arbitrary alpha values
-         * between and including 0.0 and 1.0.
-         */
-        PERPIXEL_TRANSLUCENT;
-    }
-
-
-    /**
-     * Returns whether the given level of translucency is supported by
-     * the underlying system.
-     *
-     * Note that this method may sometimes return the value
-     * indicating that the particular level is supported, but
-     * the native windowing system may still not support the
-     * given level of translucency (due to the bugs in
-     * the windowing system).
-     *
-     * @param translucencyKind a kind of translucency support
-     *                         (either PERPIXEL_TRANSPARENT,
-     *                         TRANSLUCENT, or PERPIXEL_TRANSLUCENT)
-     * @return whether the given translucency kind is supported
-     */
-    public static boolean isTranslucencySupported(Translucency translucencyKind) {
-        switch (translucencyKind) {
-            case PERPIXEL_TRANSPARENT:
-                return isWindowShapingSupported();
-            case TRANSLUCENT:
-                return isWindowOpacitySupported();
-            case PERPIXEL_TRANSLUCENT:
-                return isWindowTranslucencySupported();
-        }
-        return false;
-    }
-
-
-    /**
-     * Returns whether the windowing system supports changing the opacity
-     * value of top-level windows.
-     * Note that this method may sometimes return true, but the native
-     * windowing system may still not support the concept of
-     * translucency (due to the bugs in the windowing system).
-     */
-    private static boolean isWindowOpacitySupported() {
-        Toolkit curToolkit = Toolkit.getDefaultToolkit();
-        if (!(curToolkit instanceof SunToolkit)) {
-            return false;
-        }
-        return ((SunToolkit)curToolkit).isWindowOpacitySupported();
-    }
-
-    /**
-     * Set the opacity of the window. The opacity is at the range [0..1].
-     * Note that setting the opacity level of 0 may or may not disable
-     * the mouse event handling on this window. This is
-     * a platform-dependent behavior.
-     *
-     * In order for this method to enable the translucency effect,
-     * the isTranslucencySupported() method should indicate that the
-     * TRANSLUCENT level of translucency is supported.
-     *
-     * <p>Also note that the window must not be in the full-screen mode
-     * when setting the opacity value &lt; 1.0f. Otherwise
-     * the IllegalArgumentException is thrown.
-     *
-     * @param window the window to set the opacity level to
-     * @param opacity the opacity level to set to the window
-     * @throws NullPointerException if the window argument is null
-     * @throws IllegalArgumentException if the opacity is out of
-     *                                  the range [0..1]
-     * @throws IllegalArgumentException if the window is in full screen mode,
-     *                                  and the opacity is less than 1.0f
-     * @throws UnsupportedOperationException if the TRANSLUCENT translucency
-     *                                       kind is not supported
-     */
-    public static void setWindowOpacity(Window window, float opacity) {
-        if (window == null) {
-            throw new NullPointerException(
-                    "The window argument should not be null.");
-        }
-
-        AWTAccessor.getWindowAccessor().setOpacity(window, opacity);
-    }
-
-    /**
-     * Get the opacity of the window. If the opacity has not
-     * yet being set, this method returns 1.0.
-     *
-     * @param window the window to get the opacity level from
-     * @throws NullPointerException if the window argument is null
-     */
-    public static float getWindowOpacity(Window window) {
-        if (window == null) {
-            throw new NullPointerException(
-                    "The window argument should not be null.");
-        }
-
-        return AWTAccessor.getWindowAccessor().getOpacity(window);
-    }
-
-    /**
-     * Returns whether the windowing system supports changing the shape
-     * of top-level windows.
-     * Note that this method may sometimes return true, but the native
-     * windowing system may still not support the concept of
-     * shaping (due to the bugs in the windowing system).
-     */
-    public static boolean isWindowShapingSupported() {
-        Toolkit curToolkit = Toolkit.getDefaultToolkit();
-        if (!(curToolkit instanceof SunToolkit)) {
-            return false;
-        }
-        return ((SunToolkit)curToolkit).isWindowShapingSupported();
-    }
-
-    /**
-     * Returns an object that implements the Shape interface and represents
-     * the shape previously set with the call to the setWindowShape() method.
-     * If no shape has been set yet, or the shape has been reset to null,
-     * this method returns null.
-     *
-     * @param window the window to get the shape from
-     * @return the current shape of the window
-     * @throws NullPointerException if the window argument is null
-     */
-    public static Shape getWindowShape(Window window) {
-        if (window == null) {
-            throw new NullPointerException(
-                    "The window argument should not be null.");
-        }
-        return AWTAccessor.getWindowAccessor().getShape(window);
-    }
-
-    /**
-     * Sets a shape for the given window.
-     * If the shape argument is null, this methods restores
-     * the default shape making the window rectangular.
-     * <p>Note that in order to set a shape, the window must be undecorated.
-     * If the window is decorated, this method ignores the {@code shape}
-     * argument and resets the shape to null.
-     * <p>Also note that the window must not be in the full-screen mode
-     * when setting a non-null shape. Otherwise the IllegalArgumentException
-     * is thrown.
-     * <p>Depending on the platform, the method may return without
-     * effecting the shape of the window if the window has a non-null warning
-     * string ({@link Window#getWarningString()}). In this case the passed
-     * shape object is ignored.
-     *
-     * @param window the window to set the shape to
-     * @param shape the shape to set to the window
-     * @throws NullPointerException if the window argument is null
-     * @throws IllegalArgumentException if the window is in full screen mode,
-     *                                  and the shape is not null
-     * @throws UnsupportedOperationException if the PERPIXEL_TRANSPARENT
-     *                                       translucency kind is not supported
-     */
-    public static void setWindowShape(Window window, Shape shape) {
-        if (window == null) {
-            throw new NullPointerException(
-                    "The window argument should not be null.");
-        }
-        AWTAccessor.getWindowAccessor().setShape(window, shape);
-    }
-
-    private static boolean isWindowTranslucencySupported() {
-        /*
-         * Per-pixel alpha is supported if all the conditions are TRUE:
-         *    1. The toolkit is a sort of SunToolkit
-         *    2. The toolkit supports translucency in general
-         *        (isWindowTranslucencySupported())
-         *    3. There's at least one translucency-capable
-         *        GraphicsConfiguration
-         */
-
-        Toolkit curToolkit = Toolkit.getDefaultToolkit();
-        if (!(curToolkit instanceof SunToolkit)) {
-            return false;
-        }
-
-        if (!((SunToolkit)curToolkit).isWindowTranslucencySupported()) {
-            return false;
-        }
-
-        GraphicsEnvironment env =
-            GraphicsEnvironment.getLocalGraphicsEnvironment();
-
-        // If the default GC supports translucency return true.
-        // It is important to optimize the verification this way,
-        // see CR 6661196 for more details.
-        if (isTranslucencyCapable(env.getDefaultScreenDevice()
-                    .getDefaultConfiguration()))
-        {
-            return true;
-        }
-
-        // ... otherwise iterate through all the GCs.
-        GraphicsDevice[] devices = env.getScreenDevices();
-
-        for (int i = 0; i < devices.length; i++) {
-            GraphicsConfiguration[] configs = devices[i].getConfigurations();
-            for (int j = 0; j < configs.length; j++) {
-                if (isTranslucencyCapable(configs[j])) {
-                    return true;
-                }
-            }
-        }
-
-        return false;
-    }
-
-    /**
-     * Enables the per-pixel alpha support for the given window.
-     * Once the window becomes non-opaque (the isOpaque is set to false),
-     * the drawing sub-system is starting to respect the alpha value of each
-     * separate pixel. If a pixel gets painted with alpha color component
-     * equal to zero, it becomes visually transparent, if the alpha of the
-     * pixel is equal to 255, the pixel is fully opaque. Interim values
-     * of the alpha color component make the pixel semi-transparent (i.e.
-     * translucent).
-     * <p>Note that in order for the window to support the per-pixel alpha
-     * mode, the window must be created using the GraphicsConfiguration
-     * for which the {@link #isTranslucencyCapable}
-     * method returns true.
-     * <p>Also note that some native systems enable the per-pixel translucency
-     * mode for any window created using the translucency-compatible
-     * graphics configuration. However, it is highly recommended to always
-     * invoke the setWindowOpaque() method for these windows, at least for
-     * the sake of cross-platform compatibility reasons.
-     * <p>Also note that the window must not be in the full-screen mode
-     * when making it non-opaque. Otherwise the IllegalArgumentException
-     * is thrown.
-     * <p>If the window is a {@code Frame} or a {@code Dialog}, the window must
-     * be undecorated prior to enabling the per-pixel translucency effect (see
-     * {@link Frame#setUndecorated()} and/or {@link Dialog#setUndecorated()}).
-     * If the window becomes decorated through a subsequent call to the
-     * corresponding {@code setUndecorated()} method, the per-pixel
-     * translucency effect will be disabled and the opaque property reset to
-     * {@code true}.
-     * <p>Depending on the platform, the method may return without
-     * effecting the opaque property of the window if the window has a non-null
-     * warning string ({@link Window#getWarningString()}). In this case
-     * the passed 'isOpaque' value is ignored.
-     *
-     * @param window the window to set the shape to
-     * @param isOpaque whether the window must be opaque (true),
-     *                 or translucent (false)
-     * @throws NullPointerException if the window argument is null
-     * @throws IllegalArgumentException if the window uses
-     *                                  a GraphicsConfiguration for which the
-     *                                  {@code isTranslucencyCapable()}
-     *                                  method returns false
-     * @throws IllegalArgumentException if the window is in full screen mode,
-     *                                  and the isOpaque is false
-     * @throws IllegalArgumentException if the window is decorated and the
-     * isOpaque argument is {@code false}.
-     * @throws UnsupportedOperationException if the PERPIXEL_TRANSLUCENT
-     *                                       translucency kind is not supported
-     */
-    public static void setWindowOpaque(Window window, boolean isOpaque) {
-        if (window == null) {
-            throw new NullPointerException(
-                    "The window argument should not be null.");
-        }
-        if (!isOpaque && !isTranslucencySupported(Translucency.PERPIXEL_TRANSLUCENT)) {
-            throw new UnsupportedOperationException(
-                    "The PERPIXEL_TRANSLUCENT translucency kind is not supported");
-        }
-        AWTAccessor.getWindowAccessor().setOpaque(window, isOpaque);
-    }
-
-    /**
-     * Returns whether the window is opaque or translucent.
-     *
-     * @param window the window to set the shape to
-     * @return whether the window is currently opaque (true)
-     *         or translucent (false)
-     * @throws NullPointerException if the window argument is null
-     */
-    public static boolean isWindowOpaque(Window window) {
-        if (window == null) {
-            throw new NullPointerException(
-                    "The window argument should not be null.");
-        }
-
-        return window.isOpaque();
-    }
-
-    /**
-     * Verifies whether a given GraphicsConfiguration supports
-     * the PERPIXEL_TRANSLUCENT kind of translucency.
-     * All windows that are intended to be used with the {@link #setWindowOpaque}
-     * method must be created using a GraphicsConfiguration for which this method
-     * returns true.
-     * <p>Note that some native systems enable the per-pixel translucency
-     * mode for any window created using a translucency-capable
-     * graphics configuration. However, it is highly recommended to always
-     * invoke the setWindowOpaque() method for these windows, at least
-     * for the sake of cross-platform compatibility reasons.
-     *
-     * @param gc GraphicsConfiguration
-     * @throws NullPointerException if the gc argument is null
-     * @return whether the given GraphicsConfiguration supports
-     *         the translucency effects.
-     */
-    public static boolean isTranslucencyCapable(GraphicsConfiguration gc) {
-        if (gc == null) {
-            throw new NullPointerException("The gc argument should not be null");
-        }
-        /*
-        return gc.isTranslucencyCapable();
-        */
-        Toolkit curToolkit = Toolkit.getDefaultToolkit();
-        if (!(curToolkit instanceof SunToolkit)) {
-            return false;
-        }
-        return ((SunToolkit)curToolkit).isTranslucencyCapable(gc);
-    }
-
-    /**
-     * Sets a 'mixing-cutout' shape for the given component.
-     *
-     * By default a lightweight component is treated as an opaque rectangle for
-     * the purposes of the Heavyweight/Lightweight Components Mixing feature.
-     * This method enables developers to set an arbitrary shape to be cut out
-     * from heavyweight components positioned underneath the lightweight
-     * component in the z-order.
-     * <p>
-     * The {@code shape} argument may have the following values:
-     * <ul>
-     * <li>{@code null} - reverts the default cutout shape (the rectangle equal
-     * to the component's {@code getBounds()})
-     * <li><i>empty-shape</i> - does not cut out anything from heavyweight
-     * components. This makes the given lightweight component effectively
-     * transparent. Note that descendants of the lightweight component still
-     * affect the shapes of heavyweight components.  An example of an
-     * <i>empty-shape</i> is {@code new Rectangle()}.
-     * <li><i>non-empty-shape</i> - the given shape will be cut out from
-     * heavyweight components.
-     * </ul>
-     * <p>
-     * The most common example when the 'mixing-cutout' shape is needed is a
-     * glass pane component. The {@link JRootPane#setGlassPane()} method
-     * automatically sets the <i>empty-shape</i> as the 'mixing-cutout' shape
-     * for the given glass pane component.  If a developer needs some other
-     * 'mixing-cutout' shape for the glass pane (which is rare), this must be
-     * changed manually after installing the glass pane to the root pane.
-     * <p>
-     * Note that the 'mixing-cutout' shape neither affects painting, nor the
-     * mouse events handling for the given component. It is used exclusively
-     * for the purposes of the Heavyweight/Lightweight Components Mixing
-     * feature.
-     *
-     * @param component the component that needs non-default
-     * 'mixing-cutout' shape
-     * @param shape the new 'mixing-cutout' shape
-     * @throws NullPointerException if the component argument is {@code null}
-     */
-    public static void setComponentMixingCutoutShape(Component component,
-            Shape shape)
-    {
-        if (component == null) {
-            throw new NullPointerException(
-                    "The component argument should not be null.");
-        }
-
-        AWTAccessor.getComponentAccessor().setMixingCutoutShape(component,
-                shape);
-    }
-}
-
diff --git a/ojluni/src/main/java/com/sun/awt/SecurityWarning.java b/ojluni/src/main/java/com/sun/awt/SecurityWarning.java
deleted file mode 100755
index dd87ec1..0000000
--- a/ojluni/src/main/java/com/sun/awt/SecurityWarning.java
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
- * Copyright (c) 2008, 2009, 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.awt;
-
-import java.awt.*;
-import java.awt.geom.*;
-
-import sun.awt.AWTAccessor;
-
-
-/**
- * Security Warning control interface.
- *
- * This class provides a couple of methods that help a developer relocate
- * the AWT security warning to an appropriate position relative to the current
- * window size. A "top-level window" is an instance of the {@code Window}
- * class (or its descendant, such as {@code JFrame}). The security warning
- * is applied to all windows created by an untrusted code. All such windows
- * have a non-null "warning string" (see {@link Window#getWarningString()}).
- * <p>
- * <b>WARNING</b>: This class is an implementation detail and only meant
- * for limited use outside of the core platform. This API may change
- * drastically between update release, and it may even be
- * removed or be moved to some other packages or classes.
- */
-public final class SecurityWarning {
-
-    /**
-     * The SecurityWarning class should not be instantiated
-     */
-    private SecurityWarning() {
-    }
-
-    /**
-     * Gets the size of the security warning.
-     *
-     * The returned value is not valid until the peer has been created. Before
-     * invoking this method a developer must call the {@link Window#pack()},
-     * {@link Window#setVisible()}, or some other method that creates the peer.
-     *
-     * @param window the window to get the security warning size for
-     *
-     * @throws NullPointerException if the window argument is null
-     * @throws IllegalArgumentException if the window is trusted (i.e.
-     * the {@code getWarningString()} returns null)
-     */
-    public static Dimension getSize(Window window) {
-        if (window == null) {
-            throw new NullPointerException(
-                    "The window argument should not be null.");
-        }
-        if (window.getWarningString() == null) {
-            throw new IllegalArgumentException(
-                    "The window must have a non-null warning string.");
-        }
-        // We don't check for a non-null peer since it may be destroyed
-        // after assigning a valid value to the security warning size.
-
-        return AWTAccessor.getWindowAccessor().getSecurityWarningSize(window);
-    }
-
-    /**
-     * Sets the position of the security warning.
-     * <p>
-     * The {@code alignmentX} and {@code alignmentY} arguments specify the
-     * origin of the coordinate system used to calculate the position of the
-     * security warning. The values must be in the range [0.0f...1.0f].  The
-     * {@code 0.0f} value represents the left (top) edge of the rectangular
-     * bounds of the window. The {@code 1.0f} value represents the right
-     * (bottom) edge of the bounds. Whenever the size of the window changes,
-     * the origin of the coordinate system gets relocated accordingly. For
-     * convenience a developer may use the {@code Component.*_ALIGNMENT}
-     * constants to pass predefined values for these arguments.
-     * <p>
-     * The {@code point} argument specifies the location of the security
-     * warning in the coordinate system described above. If both {@code x} and
-     * {@code y} coordinates of the point are equal to zero, the warning will
-     * be located right in the origin of the coordinate system. On the other
-     * hand, if both {@code alignmentX} and {@code alignmentY} are equal to
-     * zero (i.e. the origin of the coordinate system is placed at the top-left
-     * corner of the window), then the {@code point} argument represents the
-     * absolute location of the security warning relative to the location of
-     * the window. The "absolute" in this case means that the position of the
-     * security warning is not effected by resizing of the window.
-     * <p>
-     * Note that the security warning managment code guarantees that:
-     * <ul>
-     * <li>The security warning cannot be located farther than two pixels from
-     * the rectangular bounds of the window (see {@link Window#getBounds}), and
-     * <li>The security warning is always visible on the screen.
-     * </ul>
-     * If either of the conditions is violated, the calculated position of the
-     * security warning is adjusted by the system to meet both these
-     * conditions.
-     * <p>
-     * The default position of the security warning is in the upper-right
-     * corner of the window, two pixels to the right from the right edge. This
-     * corresponds to the following arguments passed to this method:
-     * <ul>
-     * <li>{@code alignmentX = Component.RIGHT_ALIGNMENT}
-     * <li>{@code alignmentY = Component.TOP_ALIGNMENT}
-     * <li>{@code point = (2, 0)}
-     * </ul>
-     *
-     * @param window the window to set the position of the security warning for
-     * @param alignmentX the horizontal origin of the coordinate system
-     * @param alignmentY the vertical origin of the coordinate system
-     * @param point the position of the security warning in the specified
-     * coordinate system
-     *
-     * @throws NullPointerException if the window argument is null
-     * @throws NullPointerException if the point argument is null
-     * @throws IllegalArgumentException if the window is trusted (i.e.
-     * the {@code getWarningString()} returns null
-     * @throws IllegalArgumentException if the alignmentX or alignmentY
-     * arguments are not within the range [0.0f ... 1.0f]
-     */
-    public static void setPosition(Window window, Point2D point,
-            float alignmentX, float alignmentY)
-    {
-        if (window == null) {
-            throw new NullPointerException(
-                    "The window argument should not be null.");
-        }
-        if (window.getWarningString() == null) {
-            throw new IllegalArgumentException(
-                    "The window must have a non-null warning string.");
-        }
-        if (point == null) {
-            throw new NullPointerException(
-                    "The point argument must not be null");
-        }
-        if (alignmentX < 0.0f || alignmentX > 1.0f) {
-            throw new IllegalArgumentException(
-                    "alignmentX must be in the range [0.0f ... 1.0f].");
-        }
-        if (alignmentY < 0.0f || alignmentY > 1.0f) {
-            throw new IllegalArgumentException(
-                    "alignmentY must be in the range [0.0f ... 1.0f].");
-        }
-
-        AWTAccessor.getWindowAccessor().setSecurityWarningPosition(window,
-                point, alignmentX, alignmentY);
-    }
-}
-
diff --git a/ojluni/src/main/java/com/sun/beans/TypeResolver.java b/ojluni/src/main/java/com/sun/beans/TypeResolver.java
deleted file mode 100755
index e4cb0f3..0000000
--- a/ojluni/src/main/java/com/sun/beans/TypeResolver.java
+++ /dev/null
@@ -1,378 +0,0 @@
-/*
- * Copyright (c) 2003, 2012, 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.beans;
-
-import java.lang.reflect.Array;
-import java.lang.reflect.GenericArrayType;
-import java.lang.reflect.ParameterizedType;
-import java.lang.reflect.Type;
-import java.lang.reflect.TypeVariable;
-import java.lang.reflect.WildcardType;
-import java.util.HashMap;
-import java.util.Map;
-
-import sun.reflect.generics.reflectiveObjects.GenericArrayTypeImpl;
-import sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl;
-
-/**
- * This is utility class to resolve types.
- *
- * @since 1.7
- *
- * @author Eamonn McManus
- * @author Sergey Malenkov
- */
-public final class TypeResolver {
-
-    private static final WeakCache<Type, Map<Type, Type>> CACHE = new WeakCache<>();
-
-    /**
-     * Replaces the given {@code type} in an inherited method
-     * with the actual type it has in the given {@code inClass}.
-     *
-     * <p>Although type parameters are not inherited by subclasses in the Java
-     * language, they <em>are</em> effectively inherited when using reflection.
-     * For example, if you declare an interface like this...</p>
-     *
-     * <pre>
-     * public interface StringToIntMap extends Map&lt;String,Integer> {}
-     * </pre>
-     *
-     * <p>...then StringToIntMap.class.getMethods() will show that it has methods
-     * like put(K,V) even though StringToIntMap has no type parameters.  The K
-     * and V variables are the ones declared by Map, so
-     * {@link TypeVariable#getGenericDeclaration()} will return Map.class.</p>
-     *
-     * <p>The purpose of this method is to take a Type from a possibly-inherited
-     * method and replace it with the correct Type for the inheriting class.
-     * So given parameters of K and StringToIntMap.class in the above example,
-     * this method will return String.</p>
-     *
-     * @param inClass  the base class used to resolve
-     * @param type     the type to resolve
-     * @return a resolved type
-     *
-     * @see #getActualType(Class)
-     * @see #resolve(Type,Type)
-     */
-    public static Type resolveInClass(Class<?> inClass, Type type) {
-        return resolve(getActualType(inClass), type);
-    }
-
-    /**
-     * Replaces all {@code types} in the given array
-     * with the actual types they have in the given {@code inClass}.
-     *
-     * @param inClass  the base class used to resolve
-     * @param types    the array of types to resolve
-     * @return an array of resolved types
-     *
-     * @see #getActualType(Class)
-     * @see #resolve(Type,Type[])
-     */
-    public static Type[] resolveInClass(Class<?> inClass, Type[] types) {
-        return resolve(getActualType(inClass), types);
-    }
-
-    /**
-     * Replaces type variables of the given {@code formal} type
-     * with the types they stand for in the given {@code actual} type.
-     *
-     * <p>A ParameterizedType is a class with type parameters, and the values
-     * of those parameters.  For example, Map&lt;K,V> is a generic class, and
-     * a corresponding ParameterizedType might look like
-     * Map&lt;K=String,V=Integer>.  Given such a ParameterizedType, this method
-     * will replace K with String, or List&lt;K> with List&ltString;, or
-     * List&lt;? super K> with List&lt;? super String>.</p>
-     *
-     * <p>The {@code actual} argument to this method can also be a Class.
-     * In this case, either it is equivalent to a ParameterizedType with
-     * no parameters (for example, Integer.class), or it is equivalent to
-     * a "raw" ParameterizedType (for example, Map.class).  In the latter
-     * case, every type parameter declared or inherited by the class is replaced
-     * by its "erasure".  For a type parameter declared as &lt;T>, the erasure
-     * is Object.  For a type parameter declared as &lt;T extends Number>,
-     * the erasure is Number.</p>
-     *
-     * <p>Although type parameters are not inherited by subclasses in the Java
-     * language, they <em>are</em> effectively inherited when using reflection.
-     * For example, if you declare an interface like this...</p>
-     *
-     * <pre>
-     * public interface StringToIntMap extends Map&lt;String,Integer> {}
-     * </pre>
-     *
-     * <p>...then StringToIntMap.class.getMethods() will show that it has methods
-     * like put(K,V) even though StringToIntMap has no type parameters.  The K
-     * and V variables are the ones declared by Map, so
-     * {@link TypeVariable#getGenericDeclaration()} will return {@link Map Map.class}.</p>
-     *
-     * <p>For this reason, this method replaces inherited type parameters too.
-     * Therefore if this method is called with {@code actual} being
-     * StringToIntMap.class and {@code formal} being the K from Map,
-     * it will return {@link String String.class}.</p>
-     *
-     * <p>In the case where {@code actual} is a "raw" ParameterizedType, the
-     * inherited type parameters will also be replaced by their erasures.
-     * The erasure of a Class is the Class itself, so a "raw" subinterface of
-     * StringToIntMap will still show the K from Map as String.class.  But
-     * in a case like this...
-     *
-     * <pre>
-     * public interface StringToIntListMap extends Map&lt;String,List&lt;Integer>> {}
-     * public interface RawStringToIntListMap extends StringToIntListMap {}
-     * </pre>
-     *
-     * <p>...the V inherited from Map will show up as List&lt;Integer> in
-     * StringToIntListMap, but as plain List in RawStringToIntListMap.</p>
-     *
-     * @param actual  the type that supplies bindings for type variables
-     * @param formal  the type where occurrences of the variables
-     *                in {@code actual} will be replaced by the corresponding bound values
-     * @return a resolved type
-     */
-    public static Type resolve(Type actual, Type formal) {
-        if (formal instanceof Class) {
-            return formal;
-        }
-        if (formal instanceof GenericArrayType) {
-            Type comp = ((GenericArrayType) formal).getGenericComponentType();
-            comp = resolve(actual, comp);
-            return (comp instanceof Class)
-                    ? Array.newInstance((Class<?>) comp, 0).getClass()
-                    : GenericArrayTypeImpl.make(comp);
-        }
-        if (formal instanceof ParameterizedType) {
-            ParameterizedType fpt = (ParameterizedType) formal;
-            Type[] actuals = resolve(actual, fpt.getActualTypeArguments());
-            return ParameterizedTypeImpl.make(
-                    (Class<?>) fpt.getRawType(), actuals, fpt.getOwnerType());
-        }
-        if (formal instanceof WildcardType) {
-            WildcardType fwt = (WildcardType) formal;
-            Type[] upper = resolve(actual, fwt.getUpperBounds());
-            Type[] lower = resolve(actual, fwt.getLowerBounds());
-            return new WildcardTypeImpl(upper, lower);
-        }
-        if (formal instanceof TypeVariable) {
-            Map<Type, Type> map;
-            synchronized (CACHE) {
-                map = CACHE.get(actual);
-                if (map == null) {
-                    map = new HashMap<>();
-                    prepare(map, actual);
-                    CACHE.put(actual, map);
-                }
-            }
-            Type result = map.get(formal);
-            if (result == null || result.equals(formal)) {
-                return formal;
-            }
-            result = fixGenericArray(result);
-            // A variable can be bound to another variable that is itself bound
-            // to something.  For example, given:
-            // class Super<T> {...}
-            // class Mid<X> extends Super<T> {...}
-            // class Sub extends Mid<String>
-            // the variable T is bound to X, which is in turn bound to String.
-            // So if we have to resolve T, we need the tail recursion here.
-            return resolve(actual, result);
-        }
-        throw new IllegalArgumentException("Bad Type kind: " + formal.getClass());
-    }
-
-    /**
-     * Replaces type variables of all formal types in the given array
-     * with the types they stand for in the given {@code actual} type.
-     *
-     * @param actual   the type that supplies bindings for type variables
-     * @param formals  the array of types to resolve
-     * @return an array of resolved types
-     */
-    public static Type[] resolve(Type actual, Type[] formals) {
-        int length = formals.length;
-        Type[] actuals = new Type[length];
-        for (int i = 0; i < length; i++) {
-            actuals[i] = resolve(actual, formals[i]);
-        }
-        return actuals;
-    }
-
-    /**
-     * Converts the given {@code type} to the corresponding class.
-     * This method implements the concept of type erasure,
-     * that is described in section 4.6 of
-     * <cite>The Java&trade; Language Specification</cite>.
-     *
-     * @param type  the array of types to convert
-     * @return a corresponding class
-     */
-    public static Class<?> erase(Type type) {
-        if (type instanceof Class) {
-            return (Class<?>) type;
-        }
-        if (type instanceof ParameterizedType) {
-            ParameterizedType pt = (ParameterizedType) type;
-            return (Class<?>) pt.getRawType();
-        }
-        if (type instanceof TypeVariable) {
-            TypeVariable tv = (TypeVariable)type;
-            Type[] bounds = tv.getBounds();
-            return (0 < bounds.length)
-                    ? erase(bounds[0])
-                    : Object.class;
-        }
-        if (type instanceof WildcardType) {
-            WildcardType wt = (WildcardType)type;
-            Type[] bounds = wt.getUpperBounds();
-            return (0 < bounds.length)
-                    ? erase(bounds[0])
-                    : Object.class;
-        }
-        if (type instanceof GenericArrayType) {
-            GenericArrayType gat = (GenericArrayType)type;
-            return Array.newInstance(erase(gat.getGenericComponentType()), 0).getClass();
-        }
-        throw new IllegalArgumentException("Unknown Type kind: " + type.getClass());
-    }
-
-    /**
-     * Converts all {@code types} in the given array
-     * to the corresponding classes.
-     *
-     * @param types  the array of types to convert
-     * @return an array of corresponding classes
-     *
-     * @see #erase(Type)
-     */
-    public static Class[] erase(Type[] types) {
-        int length = types.length;
-        Class[] classes = new Class[length];
-        for (int i = 0; i < length; i++) {
-            classes[i] = TypeResolver.erase(types[i]);
-        }
-        return classes;
-    }
-
-    /**
-     * Fills the map from type parameters
-     * to types as seen by the given {@code type}.
-     * The method is recursive because the {@code type}
-     * inherits mappings from its parent classes and interfaces.
-     * The {@code type} can be either a {@link Class Class}
-     * or a {@link ParameterizedType ParameterizedType}.
-     * If it is a {@link Class Class}, it is either equivalent
-     * to a {@link ParameterizedType ParameterizedType} with no parameters,
-     * or it represents the erasure of a {@link ParameterizedType ParameterizedType}.
-     *
-     * @param map   the mappings of all type variables
-     * @param type  the next type in the hierarchy
-     */
-    private static void prepare(Map<Type, Type> map, Type type) {
-        Class<?> raw = (Class<?>)((type instanceof Class<?>)
-                ? type
-                : ((ParameterizedType)type).getRawType());
-
-        TypeVariable<?>[] formals = raw.getTypeParameters();
-
-        Type[] actuals = (type instanceof Class<?>)
-                ? formals
-                : ((ParameterizedType)type).getActualTypeArguments();
-
-        assert formals.length == actuals.length;
-        for (int i = 0; i < formals.length; i++) {
-            map.put(formals[i], actuals[i]);
-        }
-        Type gSuperclass = raw.getGenericSuperclass();
-        if (gSuperclass != null) {
-            prepare(map, gSuperclass);
-        }
-        for (Type gInterface : raw.getGenericInterfaces()) {
-            prepare(map, gInterface);
-        }
-        // If type is the raw version of a parameterized class, we type-erase
-        // all of its type variables, including inherited ones.
-        if (type instanceof Class<?> && formals.length > 0) {
-            for (Map.Entry<Type, Type> entry : map.entrySet()) {
-                entry.setValue(erase(entry.getValue()));
-            }
-        }
-    }
-
-    /**
-     * Replaces a {@link GenericArrayType GenericArrayType}
-     * with plain array class where it is possible.
-     * Bug <a href="http://bugs.sun.com/view_bug.do?bug_id=5041784">5041784</a>
-     * is that arrays of non-generic type sometimes show up
-     * as {@link GenericArrayType GenericArrayType} when using reflection.
-     * For example, a {@code String[]} might show up
-     * as a {@link GenericArrayType GenericArrayType}
-     * where {@link GenericArrayType#getGenericComponentType getGenericComponentType}
-     * is {@code String.class}.  This violates the specification,
-     * which says that {@link GenericArrayType GenericArrayType}
-     * is used when the component type is a type variable or parameterized type.
-     * We fit the specification here.
-     *
-     * @param type  the type to fix
-     * @return a corresponding type for the generic array type,
-     *         or the same type as {@code type}
-     */
-    private static Type fixGenericArray(Type type) {
-        if (type instanceof GenericArrayType) {
-            Type comp = ((GenericArrayType)type).getGenericComponentType();
-            comp = fixGenericArray(comp);
-            if (comp instanceof Class) {
-                return Array.newInstance((Class<?>)comp, 0).getClass();
-            }
-        }
-        return type;
-    }
-
-    /**
-     * Replaces a {@link Class Class} with type parameters
-     * with a {@link ParameterizedType ParameterizedType}
-     * where every parameter is bound to itself.
-     * When calling {@link #resolveInClass} in the context of {@code inClass},
-     * we can't just pass {@code inClass} as the {@code actual} parameter,
-     * because if {@code inClass} has type parameters
-     * that would be interpreted as accessing the raw type,
-     * so we would get unwanted erasure.
-     * This is why we bind each parameter to itself.
-     * If {@code inClass} does have type parameters and has methods
-     * where those parameters appear in the return type or argument types,
-     * we will correctly leave those types alone.
-     *
-     * @param inClass  the base class used to resolve
-     * @return a parameterized type for the class,
-     *         or the same class as {@code inClass}
-     */
-    private static Type getActualType(Class<?> inClass) {
-        Type[] params = inClass.getTypeParameters();
-        return (params.length == 0)
-                ? inClass
-                : ParameterizedTypeImpl.make(
-                        inClass, params, inClass.getEnclosingClass());
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/beans/WeakCache.java b/ojluni/src/main/java/com/sun/beans/WeakCache.java
deleted file mode 100755
index dbc22ea..0000000
--- a/ojluni/src/main/java/com/sun/beans/WeakCache.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-package com.sun.beans;
-
-import java.lang.ref.Reference;
-import java.lang.ref.WeakReference;
-
-import java.util.Map;
-import java.util.WeakHashMap;
-
-/**
- * A hashtable-based cache with weak keys and weak values.
- * An entry in the map will be automatically removed
- * when its key is no longer in the ordinary use.
- * A value will be automatically removed as well
- * when it is no longer in the ordinary use.
- *
- * @since 1.7
- *
- * @author Sergey A. Malenkov
- */
-public final class WeakCache<K, V> {
-    private final Map<K, Reference<V>> map = new WeakHashMap<K, Reference<V>>();
-
-    /**
-     * Returns a value to which the specified {@code key} is mapped,
-     * or {@code null} if this map contains no mapping for the {@code key}.
-     *
-     * @param key  the key whose associated value is returned
-     * @return a value to which the specified {@code key} is mapped
-     */
-    public V get(K key) {
-        Reference<V> reference = this.map.get(key);
-        if (reference == null) {
-            return null;
-        }
-        V value = reference.get();
-        if (value == null) {
-            this.map.remove(key);
-        }
-        return value;
-    }
-
-    /**
-     * Associates the specified {@code value} with the specified {@code key}.
-     * Removes the mapping for the specified {@code key} from this cache
-     * if it is present and the specified {@code value} is {@code null}.
-     * If the cache previously contained a mapping for the {@code key},
-     * the old value is replaced by the specified {@code value}.
-     *
-     * @param key    the key with which the specified value is associated
-     * @param value  the value to be associated with the specified key
-     */
-    public void put(K key, V value) {
-        if (value != null) {
-            this.map.put(key, new WeakReference<V>(value));
-        }
-        else {
-            this.map.remove(key);
-        }
-    }
-
-    /**
-     * Removes all of the mappings from this cache.
-     */
-    public void clear() {
-        this.map.clear();
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/beans/WildcardTypeImpl.java b/ojluni/src/main/java/com/sun/beans/WildcardTypeImpl.java
deleted file mode 100755
index 28e316c..0000000
--- a/ojluni/src/main/java/com/sun/beans/WildcardTypeImpl.java
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
- * Copyright (c) 2003, 2006, 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.beans;
-
-import java.lang.reflect.Type;
-import java.lang.reflect.WildcardType;
-import java.util.Arrays;
-
-/**
- * This class implements {@link WildcardType WildcardType} compatibly with the JDK's
- * {@link sun.reflect.generics.reflectiveObjects.WildcardTypeImpl WildcardTypeImpl}.
- * Unfortunately we can't use the JDK's
- * {@link sun.reflect.generics.reflectiveObjects.WildcardTypeImpl WildcardTypeImpl} here as we do for
- * {@link sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl ParameterizedTypeImpl} and
- * {@link sun.reflect.generics.reflectiveObjects.GenericArrayTypeImpl GenericArrayTypeImpl},
- * because {@link sun.reflect.generics.reflectiveObjects.WildcardTypeImpl WildcardTypeImpl}'s
- * constructor takes parameters representing intermediate structures obtained during class-file parsing.
- * We could reconstruct versions of those structures but it would be more trouble than it's worth.
- *
- * @since 1.7
- *
- * @author Eamonn McManus
- * @author Sergey Malenkov
- */
-final class WildcardTypeImpl implements WildcardType {
-    private final Type[] upperBounds;
-    private final Type[] lowerBounds;
-
-    /**
-     * Creates a wildcard type with the requested bounds.
-     * Note that the array arguments are not cloned
-     * because instances of this class are never constructed
-     * from outside the containing package.
-     *
-     * @param upperBounds  the array of types representing
-     *                     the upper bound(s) of this type variable
-     * @param lowerBounds  the array of types representing
-     *                     the lower bound(s) of this type variable
-     */
-    WildcardTypeImpl(Type[] upperBounds, Type[] lowerBounds) {
-        this.upperBounds = upperBounds;
-        this.lowerBounds = lowerBounds;
-    }
-
-    /**
-     * Returns an array of {@link Type Type} objects
-     * representing the upper bound(s) of this type variable.
-     * Note that if no upper bound is explicitly declared,
-     * the upper bound is {@link Object Object}.
-     *
-     * @return an array of types representing
-     *         the upper bound(s) of this type variable
-     */
-    public Type[] getUpperBounds() {
-        return this.upperBounds.clone();
-    }
-
-    /**
-     * Returns an array of {@link Type Type} objects
-     * representing the lower bound(s) of this type variable.
-     * Note that if no lower bound is explicitly declared,
-     * the lower bound is the type of {@code null}.
-     * In this case, a zero length array is returned.
-     *
-     * @return an array of types representing
-     *         the lower bound(s) of this type variable
-     */
-    public Type[] getLowerBounds() {
-        return this.lowerBounds.clone();
-    }
-
-    /**
-     * Indicates whether some other object is "equal to" this one.
-     * It is implemented compatibly with the JDK's
-     * {@link sun.reflect.generics.reflectiveObjects.WildcardTypeImpl WildcardTypeImpl}.
-     *
-     * @param object  the reference object with which to compare
-     * @return {@code true} if this object is the same as the object argument;
-     *         {@code false} otherwise
-     * @see sun.reflect.generics.reflectiveObjects.WildcardTypeImpl#equals
-     */
-    @Override
-    public boolean equals(Object object) {
-        if (object instanceof WildcardType) {
-            WildcardType type = (WildcardType) object;
-            return Arrays.equals(this.upperBounds, type.getUpperBounds())
-                && Arrays.equals(this.lowerBounds, type.getLowerBounds());
-        }
-        return false;
-    }
-
-    /**
-     * Returns a hash code value for the object.
-     * It is implemented compatibly with the JDK's
-     * {@link sun.reflect.generics.reflectiveObjects.WildcardTypeImpl WildcardTypeImpl}.
-     *
-     * @return a hash code value for this object
-     * @see sun.reflect.generics.reflectiveObjects.WildcardTypeImpl#hashCode
-     */
-    @Override
-    public int hashCode() {
-        return Arrays.hashCode(this.upperBounds)
-             ^ Arrays.hashCode(this.lowerBounds);
-    }
-
-    /**
-     * Returns a string representation of the object.
-     * It is implemented compatibly with the JDK's
-     * {@link sun.reflect.generics.reflectiveObjects.WildcardTypeImpl WildcardTypeImpl}.
-     *
-     * @return a string representation of the object
-     * @see sun.reflect.generics.reflectiveObjects.WildcardTypeImpl#toString
-     */
-    @Override
-    public String toString() {
-        StringBuilder sb;
-        Type[] bounds;
-        if (this.lowerBounds.length == 0) {
-            if (this.upperBounds.length == 0 || Object.class == this.upperBounds[0]) {
-                return "?";
-            }
-            bounds = this.upperBounds;
-            sb = new StringBuilder("? extends ");
-        }
-        else {
-            bounds = this.lowerBounds;
-            sb = new StringBuilder("? super ");
-        }
-        for (int i = 0; i < bounds.length; i++) {
-            if (i > 0) {
-                sb.append(" & ");
-            }
-            sb.append((bounds[i] instanceof Class)
-                    ? ((Class) bounds[i]).getName()
-                    : bounds[i].toString());
-        }
-        return sb.toString();
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/beans/decoder/AccessorElementHandler.java b/ojluni/src/main/java/com/sun/beans/decoder/AccessorElementHandler.java
deleted file mode 100755
index 93511bc..0000000
--- a/ojluni/src/main/java/com/sun/beans/decoder/AccessorElementHandler.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-package com.sun.beans.decoder;
-
-/**
- * This is base class that simplifies access to entities (fields or properties).
- * The {@code name} attribute specifies the name of the accessible entity.
- * The element defines getter if it contains no argument
- * or setter if it contains one argument.
- *
- * @since 1.7
- *
- * @author Sergey A. Malenkov
- */
-abstract class AccessorElementHandler extends ElementHandler {
-    private String name;
-    private ValueObject value;
-
-    /**
-     * Parses attributes of the element.
-     * The following atributes are supported:
-     * <dl>
-     * <dt>name
-     * <dd>the name of the accessible entity
-     * <dt>id
-     * <dd>the identifier of the variable that is intended to store the result
-     * </dl>
-     *
-     * @param name   the attribute name
-     * @param value  the attribute value
-     */
-    @Override
-    public void addAttribute(String name, String value) {
-        if (name.equals("name")) { // NON-NLS: the attribute name
-            this.name = value;
-        } else {
-            super.addAttribute(name, value);
-        }
-    }
-
-    /**
-     * Adds the argument that is used to set the value of this element.
-     *
-     * @param argument  the value of the element that contained in this one
-     */
-    @Override
-    protected final void addArgument(Object argument) {
-        if (this.value != null) {
-            throw new IllegalStateException("Could not add argument to evaluated element");
-        }
-        setValue(this.name, argument);
-        this.value = ValueObjectImpl.VOID;
-    }
-
-    /**
-     * Returns the value of this element.
-     *
-     * @return the value of this element
-     */
-    @Override
-    protected final ValueObject getValueObject() {
-        if (this.value == null) {
-            this.value = ValueObjectImpl.create(getValue(this.name));
-        }
-        return this.value;
-    }
-
-    /**
-     * Returns the value of the entity with specified {@code name}.
-     *
-     * @param name  the name of the accessible entity
-     * @return the value of the specified entity
-     */
-    protected abstract Object getValue(String name);
-
-    /**
-     * Sets the new value for the entity with specified {@code name}.
-     *
-     * @param name   the name of the accessible entity
-     * @param value  the new value for the specified entity
-     */
-    protected abstract void setValue(String name, Object value);
-}
diff --git a/ojluni/src/main/java/com/sun/beans/decoder/ArrayElementHandler.java b/ojluni/src/main/java/com/sun/beans/decoder/ArrayElementHandler.java
deleted file mode 100755
index 5406891..0000000
--- a/ojluni/src/main/java/com/sun/beans/decoder/ArrayElementHandler.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-package com.sun.beans.decoder;
-
-import java.lang.reflect.Array;
-
-/**
- * This class is intended to handle &lt;array&gt; element,
- * that is used to array creation.
- * The {@code length} attribute specifies the length of the array.
- * The {@code class} attribute specifies the elements type.
- * The {@link Object} type is used by default.
- * For example:<pre>
- * &lt;array length="10"/&gt;</pre>
- * is equivalent to {@code new Component[10]} in Java code.
- * The {@code set} and {@code get} methods,
- * as defined in the {@link java.util.List} interface,
- * can be used as if they could be applied to array instances.
- * The {@code index} attribute can thus be used with arrays.
- * For example:<pre>
- * &lt;array length="3" class="java.lang.String"&gt;
- *     &lt;void index="1"&gt;
- *         &lt;string&gt;Hello, world&lt;/string&gt;
- *     &lt;/void&gt;
- * &lt;/array&gt;</pre>
- * is equivalent to the following Java code:<pre>
- * String[] s = new String[3];
- * s[1] = "Hello, world";</pre>
- * It is possible to omit the {@code length} attribute and
- * specify the values directly, without using {@code void} tags.
- * The length of the array is equal to the number of values specified.
- * For example:<pre>
- * &lt;array id="array" class="int"&gt;
- *     &lt;int&gt;123&lt;/int&gt;
- *     &lt;int&gt;456&lt;/int&gt;
- * &lt;/array&gt;</pre>
- * is equivalent to {@code int[] array = {123, 456}} in Java code.
- * <p>The following atributes are supported:
- * <dl>
- * <dt>length
- * <dd>the array length
- * <dt>class
- * <dd>the type of object for instantiation
- * <dt>id
- * <dd>the identifier of the variable that is intended to store the result
- * </dl>
- *
- * @since 1.7
- *
- * @author Sergey A. Malenkov
- */
-final class ArrayElementHandler extends NewElementHandler {
-    private Integer length;
-
-    /**
-     * Parses attributes of the element.
-     * The following atributes are supported:
-     * <dl>
-     * <dt>length
-     * <dd>the array length
-     * <dt>class
-     * <dd>the type of object for instantiation
-     * <dt>id
-     * <dd>the identifier of the variable that is intended to store the result
-     * </dl>
-     *
-     * @param name   the attribute name
-     * @param value  the attribute value
-     */
-    @Override
-    public void addAttribute(String name, String value) {
-        if (name.equals("length")) { // NON-NLS: the attribute name
-            this.length = Integer.valueOf(value);
-        } else {
-            super.addAttribute(name, value);
-        }
-    }
-
-    /**
-     * Calculates the value of this element
-     * if the lentgh attribute is set.
-     */
-    @Override
-    public void startElement() {
-        if (this.length != null) {
-            getValueObject();
-        }
-    }
-
-    /**
-     * Creates an instance of the array.
-     *
-     * @param type  the base class
-     * @param args  the array of arguments
-     * @return the value of this element
-     */
-    @Override
-    protected ValueObject getValueObject(Class<?> type, Object[] args) {
-        if (type == null) {
-            type = Object.class;
-        }
-        if (this.length != null) {
-            return ValueObjectImpl.create(Array.newInstance(type, this.length));
-        }
-        Object array = Array.newInstance(type, args.length);
-        for (int i = 0; i < args.length; i++) {
-            Array.set(array, i, args[i]);
-        }
-        return ValueObjectImpl.create(array);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/beans/decoder/BooleanElementHandler.java b/ojluni/src/main/java/com/sun/beans/decoder/BooleanElementHandler.java
deleted file mode 100755
index e00af8c..0000000
--- a/ojluni/src/main/java/com/sun/beans/decoder/BooleanElementHandler.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-package com.sun.beans.decoder;
-
-/**
- * This class is intended to handle &lt;boolean&gt; element.
- * This element specifies {@code boolean} values.
- * The class {@link Boolean} is used as wrapper for these values.
- * The result value is created from text of the body of this element.
- * The body parsing is described in the class {@link StringElementHandler}.
- * For example:<pre>
- * &lt;boolean&gt;true&lt;/boolean&gt;</pre>
- * is shortcut to<pre>
- * &lt;method name="valueOf" class="java.lang.Boolean"&gt;
- *     &lt;string&gt;true&lt;/string&gt;
- * &lt;/method&gt;</pre>
- * which is equivalent to {@code Boolean.valueOf("true")} in Java code.
- * <p>The following atribute is supported:
- * <dl>
- * <dt>id
- * <dd>the identifier of the variable that is intended to store the result
- * </dl>
- *
- * @since 1.7
- *
- * @author Sergey A. Malenkov
- */
-final class BooleanElementHandler extends StringElementHandler {
-
-    /**
-     * Creates {@code boolean} value from
-     * the text of the body of this element.
-     *
-     * @param argument  the text of the body
-     * @return evaluated {@code boolean} value
-     */
-    @Override
-    public Object getValue(String argument) {
-        if (Boolean.TRUE.toString().equalsIgnoreCase(argument)) {
-            return Boolean.TRUE;
-        }
-        if (Boolean.FALSE.toString().equalsIgnoreCase(argument)) {
-            return Boolean.FALSE;
-        }
-        throw new IllegalArgumentException("Unsupported boolean argument: " + argument);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/beans/decoder/ByteElementHandler.java b/ojluni/src/main/java/com/sun/beans/decoder/ByteElementHandler.java
deleted file mode 100755
index a534759..0000000
--- a/ojluni/src/main/java/com/sun/beans/decoder/ByteElementHandler.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-package com.sun.beans.decoder;
-
-/**
- * This class is intended to handle &lt;byte&gt; element.
- * This element specifies {@code byte} values.
- * The class {@link Byte} is used as wrapper for these values.
- * The result value is created from text of the body of this element.
- * The body parsing is described in the class {@link StringElementHandler}.
- * For example:<pre>
- * &lt;byte&gt;127&lt;/byte&gt;</pre>
- * is shortcut to<pre>
- * &lt;method name="decode" class="java.lang.Byte"&gt;
- *     &lt;string&gt;127&lt;/string&gt;
- * &lt;/method&gt;</pre>
- * which is equivalent to {@code Byte.decode("127")} in Java code.
- * <p>The following atribute is supported:
- * <dl>
- * <dt>id
- * <dd>the identifier of the variable that is intended to store the result
- * </dl>
- *
- * @since 1.7
- *
- * @author Sergey A. Malenkov
- */
-final class ByteElementHandler extends StringElementHandler {
-
-    /**
-     * Creates {@code byte} value from
-     * the text of the body of this element.
-     *
-     * @param argument  the text of the body
-     * @return evaluated {@code byte} value
-     */
-    @Override
-    public Object getValue(String argument) {
-        return Byte.decode(argument);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/beans/decoder/CharElementHandler.java b/ojluni/src/main/java/com/sun/beans/decoder/CharElementHandler.java
deleted file mode 100755
index 6e257d6..0000000
--- a/ojluni/src/main/java/com/sun/beans/decoder/CharElementHandler.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-package com.sun.beans.decoder;
-
-/**
- * This class is intended to handle &lt;char&gt; element.
- * This element specifies {@code char} values.
- * The class {@link Character} is used as wrapper for these values.
- * The result value is created from text of the body of this element.
- * The body parsing is described in the class {@link StringElementHandler}.
- * For example:<pre>
- * &lt;char&gt;X&lt;/char&gt;</pre>
- * which is equivalent to {@code Character.valueOf('X')} in Java code.
- * <p>The following atributes are supported:
- * <dl>
- * <dt>code
- * <dd>this attribute specifies character code
- * <dt>id
- * <dd>the identifier of the variable that is intended to store the result
- * </dl>
- * The {@code code} attribute can be used for characters
- * that are illegal in XML document, for example:<pre>
- * &lt;char code="0"/&gt;</pre>
- *
- * @since 1.7
- *
- * @author Sergey A. Malenkov
- */
-final class CharElementHandler extends StringElementHandler {
-
-    /**
-     * Parses attributes of the element.
-     * The following atributes are supported:
-     * <dl>
-     * <dt>code
-     * <dd>this attribute specifies character code
-     * <dt>id
-     * <dd>the identifier of the variable that is intended to store the result
-     * </dl>
-     *
-     * @param name   the attribute name
-     * @param value  the attribute value
-     */
-    @Override
-    public void addAttribute(String name, String value) {
-        if (name.equals("code")) { // NON-NLS: the attribute name
-            int code = Integer.decode(value);
-            for (char ch : Character.toChars(code)) {
-                addCharacter(ch);
-            }
-        } else {
-            super.addAttribute(name, value);
-        }
-    }
-
-    /**
-     * Creates {@code char} value from
-     * the text of the body of this element.
-     *
-     * @param argument  the text of the body
-     * @return evaluated {@code char} value
-     */
-    @Override
-    public Object getValue(String argument) {
-        if (argument.length() != 1) {
-            throw new IllegalArgumentException("Wrong characters count");
-        }
-        return Character.valueOf(argument.charAt(0));
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/beans/decoder/ClassElementHandler.java b/ojluni/src/main/java/com/sun/beans/decoder/ClassElementHandler.java
deleted file mode 100755
index 9decb9f..0000000
--- a/ojluni/src/main/java/com/sun/beans/decoder/ClassElementHandler.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-package com.sun.beans.decoder;
-
-/**
- * This class is intended to handle &lt;class&gt; element.
- * This element specifies {@link Class} values.
- * The result value is created from text of the body of this element.
- * The body parsing is described in the class {@link StringElementHandler}.
- * For example:<pre>
- * &lt;class&gt;java.lang.Class&lt;/class&gt;</pre>
- * is shortcut to<pre>
- * &lt;method name="forName" class="java.lang.Class"&gt;
- *     &lt;string&gt;java.lang.Class&lt;/string&gt;
- * &lt;/method&gt;</pre>
- * which is equivalent to {@code Class.forName("java.lang.Class")} in Java code.
- * <p>The following atribute is supported:
- * <dl>
- * <dt>id
- * <dd>the identifier of the variable that is intended to store the result
- * </dl>
- *
- * @since 1.7
- *
- * @author Sergey A. Malenkov
- */
-final class ClassElementHandler extends StringElementHandler {
-
-    /**
-     * Creates class by the name from
-     * the text of the body of this element.
-     *
-     * @param argument  the text of the body
-     * @return evaluated {@code Class} value
-     */
-    @Override
-    public Object getValue(String argument) {
-        return getOwner().findClass(argument);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/beans/decoder/DocumentHandler.java b/ojluni/src/main/java/com/sun/beans/decoder/DocumentHandler.java
deleted file mode 100755
index 4bbb8f4..0000000
--- a/ojluni/src/main/java/com/sun/beans/decoder/DocumentHandler.java
+++ /dev/null
@@ -1,402 +0,0 @@
-/*
- * Copyright (c) 2008, 2012, 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.beans.decoder;
-
-import com.sun.beans.finder.ClassFinder;
-
-import java.beans.ExceptionListener;
-
-import java.io.IOException;
-
-import java.lang.ref.Reference;
-import java.lang.ref.WeakReference;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.security.AccessControlContext;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.parsers.SAXParserFactory;
-
-import org.xml.sax.Attributes;
-import org.xml.sax.InputSource;
-import org.xml.sax.SAXException;
-import org.xml.sax.helpers.DefaultHandler;
-
-import sun.misc.SharedSecrets;
-
-/**
- * The main class to parse JavaBeans XML archive.
- *
- * @since 1.7
- *
- * @author Sergey A. Malenkov
- *
- * @see ElementHandler
- */
-public final class DocumentHandler extends DefaultHandler {
-    private final AccessControlContext acc = AccessController.getContext();
-    private final Map<String, Class<? extends ElementHandler>> handlers = new HashMap<>();
-    private final Map<String, Object> environment = new HashMap<>();
-    private final List<Object> objects = new ArrayList<>();
-
-    private Reference<ClassLoader> loader;
-    private ExceptionListener listener;
-    private Object owner;
-
-    private ElementHandler handler;
-
-    /**
-     * Creates new instance of document handler.
-     */
-    public DocumentHandler() {
-        setElementHandler("java", JavaElementHandler.class); // NON-NLS: the element name
-        setElementHandler("null", NullElementHandler.class); // NON-NLS: the element name
-        setElementHandler("array", ArrayElementHandler.class); // NON-NLS: the element name
-        setElementHandler("class", ClassElementHandler.class); // NON-NLS: the element name
-        setElementHandler("string", StringElementHandler.class); // NON-NLS: the element name
-        setElementHandler("object", ObjectElementHandler.class); // NON-NLS: the element name
-
-        setElementHandler("void", VoidElementHandler.class); // NON-NLS: the element name
-        setElementHandler("char", CharElementHandler.class); // NON-NLS: the element name
-        setElementHandler("byte", ByteElementHandler.class); // NON-NLS: the element name
-        setElementHandler("short", ShortElementHandler.class); // NON-NLS: the element name
-        setElementHandler("int", IntElementHandler.class); // NON-NLS: the element name
-        setElementHandler("long", LongElementHandler.class); // NON-NLS: the element name
-        setElementHandler("float", FloatElementHandler.class); // NON-NLS: the element name
-        setElementHandler("double", DoubleElementHandler.class); // NON-NLS: the element name
-        setElementHandler("boolean", BooleanElementHandler.class); // NON-NLS: the element name
-
-        // some handlers for new elements
-        setElementHandler("new", NewElementHandler.class); // NON-NLS: the element name
-        setElementHandler("var", VarElementHandler.class); // NON-NLS: the element name
-        setElementHandler("true", TrueElementHandler.class); // NON-NLS: the element name
-        setElementHandler("false", FalseElementHandler.class); // NON-NLS: the element name
-        setElementHandler("field", FieldElementHandler.class); // NON-NLS: the element name
-        setElementHandler("method", MethodElementHandler.class); // NON-NLS: the element name
-        setElementHandler("property", PropertyElementHandler.class); // NON-NLS: the element name
-    }
-
-    /**
-     * Returns the class loader used to instantiate objects.
-     * If the class loader has not been explicitly set
-     * then {@code null} is returned.
-     *
-     * @return the class loader used to instantiate objects
-     */
-    public ClassLoader getClassLoader() {
-        return (this.loader != null)
-                ? this.loader.get()
-                : null;
-    }
-
-    /**
-     * Sets the class loader used to instantiate objects.
-     * If the class loader is not set
-     * then default class loader will be used.
-     *
-     * @param loader  a classloader to use
-     */
-    public void setClassLoader(ClassLoader loader) {
-        this.loader = new WeakReference<ClassLoader>(loader);
-    }
-
-    /**
-     * Returns the exception listener for parsing.
-     * The exception listener is notified
-     * when handler catches recoverable exceptions.
-     * If the exception listener has not been explicitly set
-     * then default exception listener is returned.
-     *
-     * @return the exception listener for parsing
-     */
-    public ExceptionListener getExceptionListener() {
-        return this.listener;
-    }
-
-    /**
-     * Sets the exception listener for parsing.
-     * The exception listener is notified
-     * when handler catches recoverable exceptions.
-     *
-     * @param listener  the exception listener for parsing
-     */
-    public void setExceptionListener(ExceptionListener listener) {
-        this.listener = listener;
-    }
-
-    /**
-     * Returns the owner of this document handler.
-     *
-     * @return the owner of this document handler
-     */
-    public Object getOwner() {
-        return this.owner;
-    }
-
-    /**
-     * Sets the owner of this document handler.
-     *
-     * @param owner  the owner of this document handler
-     */
-    public void setOwner(Object owner) {
-        this.owner = owner;
-    }
-
-    /**
-     * Returns the handler for the element with specified name.
-     *
-     * @param name  the name of the element
-     * @return the corresponding element handler
-     */
-    public Class<? extends ElementHandler> getElementHandler(String name) {
-        Class<? extends ElementHandler> type = this.handlers.get(name);
-        if (type == null) {
-            throw new IllegalArgumentException("Unsupported element: " + name);
-        }
-        return type;
-    }
-
-    /**
-     * Sets the handler for the element with specified name.
-     *
-     * @param name     the name of the element
-     * @param handler  the corresponding element handler
-     */
-    public void setElementHandler(String name, Class<? extends ElementHandler> handler) {
-        this.handlers.put(name, handler);
-    }
-
-    /**
-     * Indicates whether the variable with specified identifier is defined.
-     *
-     * @param id  the identifier
-     * @return @{code true} if the variable is defined;
-     *         @{code false} otherwise
-     */
-    public boolean hasVariable(String id) {
-        return this.environment.containsKey(id);
-    }
-
-    /**
-     * Returns the value of the variable with specified identifier.
-     *
-     * @param id  the identifier
-     * @return the value of the variable
-     */
-    public Object getVariable(String id) {
-        if (!this.environment.containsKey(id)) {
-            throw new IllegalArgumentException("Unbound variable: " + id);
-        }
-        return this.environment.get(id);
-    }
-
-    /**
-     * Sets new value of the variable with specified identifier.
-     *
-     * @param id     the identifier
-     * @param value  new value of the variable
-     */
-    public void setVariable(String id, Object value) {
-        this.environment.put(id, value);
-    }
-
-    /**
-     * Returns the array of readed objects.
-     *
-     * @return the array of readed objects
-     */
-    public Object[] getObjects() {
-        return this.objects.toArray();
-    }
-
-    /**
-     * Adds the object to the list of readed objects.
-     *
-     * @param object  the object that is readed from XML document
-     */
-    void addObject(Object object) {
-        this.objects.add(object);
-    }
-
-    /**
-     * Prepares this handler to read objects from XML document.
-     */
-    @Override
-    public void startDocument() {
-        this.objects.clear();
-        this.handler = null;
-    }
-
-    /**
-     * Parses opening tag of XML element
-     * using corresponding element handler.
-     *
-     * @param uri         the namespace URI, or the empty string
-     *                    if the element has no namespace URI or
-     *                    if namespace processing is not being performed
-     * @param localName   the local name (without prefix), or the empty string
-     *                    if namespace processing is not being performed
-     * @param qName       the qualified name (with prefix), or the empty string
-     *                    if qualified names are not available
-     * @param attributes  the attributes attached to the element
-     */
-    @Override
-    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
-        ElementHandler parent = this.handler;
-        try {
-            this.handler = getElementHandler(qName).newInstance();
-            this.handler.setOwner(this);
-            this.handler.setParent(parent);
-        }
-        catch (Exception exception) {
-            throw new SAXException(exception);
-        }
-        for (int i = 0; i < attributes.getLength(); i++)
-            try {
-                String name = attributes.getQName(i);
-                String value = attributes.getValue(i);
-                this.handler.addAttribute(name, value);
-            }
-            catch (RuntimeException exception) {
-                handleException(exception);
-            }
-
-        this.handler.startElement();
-    }
-
-    /**
-     * Parses closing tag of XML element
-     * using corresponding element handler.
-     *
-     * @param uri        the namespace URI, or the empty string
-     *                   if the element has no namespace URI or
-     *                   if namespace processing is not being performed
-     * @param localName  the local name (without prefix), or the empty string
-     *                   if namespace processing is not being performed
-     * @param qName      the qualified name (with prefix), or the empty string
-     *                   if qualified names are not available
-     */
-    @Override
-    public void endElement(String uri, String localName, String qName) {
-        try {
-            this.handler.endElement();
-        }
-        catch (RuntimeException exception) {
-            handleException(exception);
-        }
-        finally {
-            this.handler = this.handler.getParent();
-        }
-    }
-
-    /**
-     * Parses character data inside XML element.
-     *
-     * @param chars   the array of characters
-     * @param start   the start position in the character array
-     * @param length  the number of characters to use
-     */
-    @Override
-    public void characters(char[] chars, int start, int length) {
-        if (this.handler != null) {
-            try {
-                while (0 < length--) {
-                    this.handler.addCharacter(chars[start++]);
-                }
-            }
-            catch (RuntimeException exception) {
-                handleException(exception);
-            }
-        }
-    }
-
-    /**
-     * Handles an exception using current exception listener.
-     *
-     * @param exception  an exception to handle
-     * @see #setExceptionListener
-     */
-    public void handleException(Exception exception) {
-        if (this.listener == null) {
-            throw new IllegalStateException(exception);
-        }
-        this.listener.exceptionThrown(exception);
-    }
-
-    /**
-     * Starts parsing of the specified input source.
-     *
-     * @param input  the input source to parse
-     */
-    public void parse(final InputSource input) {
-        if ((this.acc == null) && (null != System.getSecurityManager())) {
-            throw new SecurityException("AccessControlContext is not set");
-        }
-        AccessControlContext stack = AccessController.getContext();
-        SharedSecrets.getJavaSecurityAccess().doIntersectionPrivilege(new PrivilegedAction<Void>() {
-            public Void run() {
-                try {
-                    SAXParserFactory.newInstance().newSAXParser().parse(input, DocumentHandler.this);
-                }
-                catch (ParserConfigurationException exception) {
-                    handleException(exception);
-                }
-                catch (SAXException wrapper) {
-                    Exception exception = wrapper.getException();
-                    if (exception == null) {
-                        exception = wrapper;
-                    }
-                    handleException(exception);
-                }
-                catch (IOException exception) {
-                    handleException(exception);
-                }
-                return null;
-            }
-        }, stack, this.acc);
-    }
-
-    /**
-     * Resolves class by name using current class loader.
-     * This method handles exception using current exception listener.
-     *
-     * @param name  the name of the class
-     * @return the object that represents the class
-     */
-    public Class<?> findClass(String name) {
-        try {
-            return ClassFinder.resolveClass(name, getClassLoader());
-        }
-        catch (ClassNotFoundException exception) {
-            handleException(exception);
-            return null;
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/beans/decoder/DoubleElementHandler.java b/ojluni/src/main/java/com/sun/beans/decoder/DoubleElementHandler.java
deleted file mode 100755
index f8292ae..0000000
--- a/ojluni/src/main/java/com/sun/beans/decoder/DoubleElementHandler.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-package com.sun.beans.decoder;
-
-/**
- * This class is intended to handle &lt;double&gt; element.
- * This element specifies {@code double} values.
- * The class {@link Double} is used as wrapper for these values.
- * The result value is created from text of the body of this element.
- * The body parsing is described in the class {@link StringElementHandler}.
- * For example:<pre>
- * &lt;double&gt;1.23e45&lt;/double&gt;</pre>
- * is shortcut to<pre>
- * &lt;method name="valueOf" class="java.lang.Double"&gt;
- *     &lt;string&gt;1.23e45&lt;/string&gt;
- * &lt;/method&gt;</pre>
- * which is equivalent to {@code Double.valueOf("1.23e45")} in Java code.
- * <p>The following atribute is supported:
- * <dl>
- * <dt>id
- * <dd>the identifier of the variable that is intended to store the result
- * </dl>
- *
- * @since 1.7
- *
- * @author Sergey A. Malenkov
- */
-final class DoubleElementHandler extends StringElementHandler {
-
-    /**
-     * Creates {@code double} value from
-     * the text of the body of this element.
-     *
-     * @param argument  the text of the body
-     * @return evaluated {@code double} value
-     */
-    @Override
-    public Object getValue(String argument) {
-        return Double.valueOf(argument);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/beans/decoder/ElementHandler.java b/ojluni/src/main/java/com/sun/beans/decoder/ElementHandler.java
deleted file mode 100755
index dc24b01..0000000
--- a/ojluni/src/main/java/com/sun/beans/decoder/ElementHandler.java
+++ /dev/null
@@ -1,224 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-package com.sun.beans.decoder;
-
-/**
- * The base class for element handlers.
- *
- * @since 1.7
- *
- * @author Sergey A. Malenkov
- *
- * @see DocumentHandler
- */
-public abstract class ElementHandler {
-    private DocumentHandler owner;
-    private ElementHandler parent;
-
-    private String id;
-
-    /**
-     * Returns the document handler that creates this element handler.
-     *
-     * @return the owner document handler
-     */
-    public final DocumentHandler getOwner() {
-        return this.owner;
-    }
-
-    /**
-     * Sets the document handler that creates this element handler.
-     * The owner document handler should be set after instantiation.
-     * Such approach is used to simplify the extensibility.
-     *
-     * @param owner  the owner document handler
-     * @see DocumentHandler#startElement
-     */
-    final void setOwner(DocumentHandler owner) {
-        if (owner == null) {
-            throw new IllegalArgumentException("Every element should have owner");
-        }
-        this.owner = owner;
-    }
-
-    /**
-     * Returns the element handler that contains this one.
-     *
-     * @return the parent element handler
-     */
-    public final ElementHandler getParent() {
-        return this.parent;
-    }
-
-    /**
-     * Sets the element handler that contains this one.
-     * The parent element handler should be set after instantiation.
-     * Such approach is used to simplify the extensibility.
-     *
-     * @param parent  the parent element handler
-     * @see DocumentHandler#startElement
-     */
-    final void setParent(ElementHandler parent) {
-        this.parent = parent;
-    }
-
-    /**
-     * Returns the value of the variable with specified identifier.
-     *
-     * @param id  the identifier
-     * @return the value of the variable
-     */
-    protected final Object getVariable(String id) {
-        if (id.equals(this.id)) {
-            ValueObject value = getValueObject();
-            if (value.isVoid()) {
-                throw new IllegalStateException("The element does not return value");
-            }
-            return value.getValue();
-        }
-        return (this.parent != null)
-                ? this.parent.getVariable(id)
-                : this.owner.getVariable(id);
-    }
-
-    /**
-     * Returns the value of the parent element.
-     *
-     * @return the value of the parent element
-     */
-    protected Object getContextBean() {
-        if (this.parent != null) {
-            ValueObject value = this.parent.getValueObject();
-            if (!value.isVoid()) {
-                return value.getValue();
-            }
-            throw new IllegalStateException("The outer element does not return value");
-        } else {
-            Object value = this.owner.getOwner();
-            if (value != null) {
-                return value;
-            }
-            throw new IllegalStateException("The topmost element does not have context");
-        }
-    }
-
-    /**
-     * Parses attributes of the element.
-     * By default, the following atribute is supported:
-     * <dl>
-     * <dt>id
-     * <dd>the identifier of the variable that is intended to store the result
-     * </dl>
-     *
-     * @param name   the attribute name
-     * @param value  the attribute value
-     */
-    public void addAttribute(String name, String value) {
-        if (name.equals("id")) { // NON-NLS: the attribute name
-            this.id = value;
-        } else {
-            throw new IllegalArgumentException("Unsupported attribute: " + name);
-        }
-    }
-
-    /**
-     * This method is called before parsing of the element's body.
-     * All attributes are parsed at this point.
-     * By default, do nothing.
-     */
-    public void startElement() {
-    }
-
-    /**
-     * This method is called after parsing of the element's body.
-     * By default, it calculates the value of this element.
-     * The following tasks are executing for any non-void value:
-     * <ol>
-     * <li>If the {@code id} attribute is set
-     * the value of the variable with the specified identifier
-     * is set to the value of this element.</li>
-     * <li>This element is used as an argument of parent element if it is possible.</li>
-     * </ol>
-     *
-     * @see #isArgument
-     */
-    public void endElement() {
-        // do nothing if no value returned
-        ValueObject value = getValueObject();
-        if (!value.isVoid()) {
-            if (this.id != null) {
-                this.owner.setVariable(this.id, value.getValue());
-            }
-            if (isArgument()) {
-                if (this.parent != null) {
-                    this.parent.addArgument(value.getValue());
-                } else {
-                    this.owner.addObject(value.getValue());
-                }
-            }
-        }
-    }
-
-    /**
-     * Adds the character that contained in this element.
-     * By default, only whitespaces are acceptable.
-     *
-     * @param ch  the character
-     */
-    public void addCharacter(char ch) {
-        if ((ch != ' ') && (ch != '\n') && (ch != '\t') && (ch != '\r')) {
-            throw new IllegalStateException("Illegal character with code " + (int) ch);
-        }
-    }
-
-    /**
-     * Adds the argument that is used to calculate the value of this element.
-     * By default, no arguments are acceptable.
-     *
-     * @param argument  the value of the element that contained in this one
-     */
-    protected void addArgument(Object argument) {
-        throw new IllegalStateException("Could not add argument to simple element");
-    }
-
-    /**
-     * Tests whether the value of this element can be used
-     * as an argument of the element that contained in this one.
-     *
-     * @return {@code true} if the value of this element can be used
-     *         as an argument of the element that contained in this one,
-     *         {@code false} otherwise
-     */
-    protected boolean isArgument() {
-        return this.id == null;
-    }
-
-    /**
-     * Returns the value of this element.
-     *
-     * @return the value of this element
-     */
-    protected abstract ValueObject getValueObject();
-}
diff --git a/ojluni/src/main/java/com/sun/beans/decoder/FalseElementHandler.java b/ojluni/src/main/java/com/sun/beans/decoder/FalseElementHandler.java
deleted file mode 100755
index 608a827..0000000
--- a/ojluni/src/main/java/com/sun/beans/decoder/FalseElementHandler.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-package com.sun.beans.decoder;
-
-/**
- * This class is intended to handle &lt;false&gt; element.
- * This element specifies {@code false} value.
- * It should not contain body or inner elements.
- * For example:<pre>
- * &lt;false/&gt;</pre>
- * is equivalent to {@code false} in Java code.
- * <p>The following atribute is supported:
- * <dl>
- * <dt>id
- * <dd>the identifier of the variable that is intended to store the result
- * </dl>
- *
- * @since 1.7
- *
- * @author Sergey A. Malenkov
- */
-final class FalseElementHandler extends NullElementHandler {
-
-    /**
-     * Returns {@code Boolean.FALSE}
-     * as a value of &lt;false&gt; element.
-     *
-     * @return {@code Boolean.FALSE} by default
-     */
-    @Override
-    public Object getValue() {
-        return Boolean.FALSE;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/beans/decoder/FieldElementHandler.java b/ojluni/src/main/java/com/sun/beans/decoder/FieldElementHandler.java
deleted file mode 100755
index caa3a1d..0000000
--- a/ojluni/src/main/java/com/sun/beans/decoder/FieldElementHandler.java
+++ /dev/null
@@ -1,189 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-package com.sun.beans.decoder;
-
-import com.sun.beans.finder.FieldFinder;
-
-import java.lang.reflect.Field;
-
-/**
- * This class is intended to handle &lt;field&gt; element.
- * This element simplifies access to the fields.
- * If the {@code class} attribute is specified
- * this element accesses static field of specified class.
- * This element defines getter if it contains no argument.
- * It returns the value of the field in this case.
- * For example:<pre>
- * &lt;field name="TYPE" class="java.lang.Long"/&gt;</pre>
- * is equivalent to {@code Long.TYPE} in Java code.
- * This element defines setter if it contains one argument.
- * It does not return the value of the field in this case.
- * For example:<pre>
- * &lt;field name="id"&gt;&lt;int&gt;0&lt;/int&gt;&lt;/field&gt;</pre>
- * is equivalent to {@code id = 0} in Java code.
- * <p>The following atributes are supported:
- * <dl>
- * <dt>name
- * <dd>the field name
- * <dt>class
- * <dd>the type is used for static fields only
- * <dt>id
- * <dd>the identifier of the variable that is intended to store the result
- * </dl>
- *
- * @since 1.7
- *
- * @author Sergey A. Malenkov
- */
-final class FieldElementHandler extends AccessorElementHandler {
-    private Class<?> type;
-
-    /**
-     * Parses attributes of the element.
-     * The following atributes are supported:
-     * <dl>
-     * <dt>name
-     * <dd>the field name
-     * <dt>class
-     * <dd>the type is used for static fields only
-     * <dt>id
-     * <dd>the identifier of the variable that is intended to store the result
-     * </dl>
-     *
-     * @param name   the attribute name
-     * @param value  the attribute value
-     */
-    @Override
-    public void addAttribute(String name, String value) {
-        if (name.equals("class")) { // NON-NLS: the attribute name
-            this.type = getOwner().findClass(value);
-        } else {
-            super.addAttribute(name, value);
-        }
-    }
-
-    /**
-     * Tests whether the value of this element can be used
-     * as an argument of the element that contained in this one.
-     *
-     * @return {@code true} if the value of this element should be used
-     *         as an argument of the element that contained in this one,
-     *         {@code false} otherwise
-     */
-    @Override
-    protected boolean isArgument() {
-        return super.isArgument() && (this.type != null); // only static accessor can be used an argument
-    }
-
-    /**
-     * Returns the context of the field.
-     * The context of the static field is the class object.
-     * The context of the non-static field is the value of the parent element.
-     *
-     * @return the context of the field
-     */
-    @Override
-    protected Object getContextBean() {
-        return (this.type != null)
-                ? this.type
-                : super.getContextBean();
-    }
-
-    /**
-     * Returns the value of the field with specified {@code name}.
-     *
-     * @param name  the name of the field
-     * @return the value of the specified field
-     */
-    @Override
-    protected Object getValue(String name) {
-        try {
-            return getFieldValue(getContextBean(), name);
-        }
-        catch (Exception exception) {
-            getOwner().handleException(exception);
-        }
-        return null;
-    }
-
-    /**
-     * Sets the new value for the field with specified {@code name}.
-     *
-     * @param name   the name of the field
-     * @param value  the new value for the specified field
-     */
-    @Override
-    protected void setValue(String name, Object value) {
-        try {
-            setFieldValue(getContextBean(), name, value);
-        }
-        catch (Exception exception) {
-            getOwner().handleException(exception);
-        }
-    }
-
-    /**
-     * Performs the search of the field with specified {@code name}
-     * in specified context and returns its value.
-     *
-     * @param bean  the context bean that contains field
-     * @param name  the name of the field
-     * @return the value of the field
-     * @throws IllegalAccessException if the field is not accesible
-     * @throws NoSuchFieldException   if the field is not found
-     */
-    static Object getFieldValue(Object bean, String name) throws IllegalAccessException, NoSuchFieldException {
-        return findField(bean, name).get(bean);
-    }
-
-    /**
-     * Performs the search of the field with specified {@code name}
-     * in specified context and updates its value.
-     *
-     * @param bean   the context bean that contains field
-     * @param name   the name of the field
-     * @param value  the new value for the field
-     * @throws IllegalAccessException if the field is not accesible
-     * @throws NoSuchFieldException   if the field is not found
-     */
-    private static void setFieldValue(Object bean, String name, Object value) throws IllegalAccessException, NoSuchFieldException {
-        findField(bean, name).set(bean, value);
-    }
-
-    /**
-     * Performs the search of the field
-     * with specified {@code name} in specified context.
-     *
-     * @param bean  the context bean that contains field
-     * @param name  the name of the field
-     * @return field object that represents found field
-     * @throws NoSuchFieldException if the field is not found
-     */
-    private static Field findField(Object bean, String name) throws NoSuchFieldException {
-        return (bean instanceof Class<?>)
-                ? FieldFinder.findStaticField((Class<?>) bean, name)
-                : FieldFinder.findField(bean.getClass(), name);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/beans/decoder/FloatElementHandler.java b/ojluni/src/main/java/com/sun/beans/decoder/FloatElementHandler.java
deleted file mode 100755
index 0f934e6..0000000
--- a/ojluni/src/main/java/com/sun/beans/decoder/FloatElementHandler.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-package com.sun.beans.decoder;
-
-/**
- * This class is intended to handle &lt;float&gt; element.
- * This element specifies {@code float} values.
- * The class {@link Float} is used as wrapper for these values.
- * The result value is created from text of the body of this element.
- * The body parsing is described in the class {@link StringElementHandler}.
- * For example:<pre>
- * &lt;float&gt;-1.23&lt;/float&gt;</pre>
- * is shortcut to<pre>
- * &lt;method name="valueOf" class="java.lang.Float"&gt;
- *     &lt;string&gt;-1.23&lt;/string&gt;
- * &lt;/method&gt;</pre>
- * which is equivalent to {@code Float.valueOf("-1.23")} in Java code.
- * <p>The following atribute is supported:
- * <dl>
- * <dt>id
- * <dd>the identifier of the variable that is intended to store the result
- * </dl>
- *
- * @since 1.7
- *
- * @author Sergey A. Malenkov
- */
-final class FloatElementHandler extends StringElementHandler {
-
-    /**
-     * Creates {@code float} value from
-     * the text of the body of this element.
-     *
-     * @param argument  the text of the body
-     * @return evaluated {@code float} value
-     */
-    @Override
-    public Object getValue(String argument) {
-        return Float.valueOf(argument);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/beans/decoder/IntElementHandler.java b/ojluni/src/main/java/com/sun/beans/decoder/IntElementHandler.java
deleted file mode 100755
index 0b9634a..0000000
--- a/ojluni/src/main/java/com/sun/beans/decoder/IntElementHandler.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-package com.sun.beans.decoder;
-
-/**
- * This class is intended to handle &lt;int&gt; element.
- * This element specifies {@code int} values.
- * The class {@link Integer} is used as wrapper for these values.
- * The result value is created from text of the body of this element.
- * The body parsing is described in the class {@link StringElementHandler}.
- * For example:<pre>
- * &lt;int&gt;-1&lt;/int&gt;</pre>
- * is shortcut to<pre>
- * &lt;method name="decode" class="java.lang.Integer"&gt;
- *     &lt;string&gt;-1&lt;/string&gt;
- * &lt;/method&gt;</pre>
- * which is equivalent to {@code Integer.decode("-1")} in Java code.
- * <p>The following atribute is supported:
- * <dl>
- * <dt>id
- * <dd>the identifier of the variable that is intended to store the result
- * </dl>
- *
- * @since 1.7
- *
- * @author Sergey A. Malenkov
- */
-final class IntElementHandler extends StringElementHandler {
-
-    /**
-     * Creates {@code int} value from
-     * the text of the body of this element.
-     *
-     * @param argument  the text of the body
-     * @return evaluated {@code int} value
-     */
-    @Override
-    public Object getValue(String argument) {
-        return Integer.decode(argument);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/beans/decoder/JavaElementHandler.java b/ojluni/src/main/java/com/sun/beans/decoder/JavaElementHandler.java
deleted file mode 100755
index 53f3086..0000000
--- a/ojluni/src/main/java/com/sun/beans/decoder/JavaElementHandler.java
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-package com.sun.beans.decoder;
-
-import java.beans.XMLDecoder;
-
-/**
- * This class is intended to handle &lt;java&gt; element.
- * Each element that appears in the body of this element
- * is evaluated in the context of the decoder itself.
- * Typically this outer context is used to retrieve the owner of the decoder,
- * which can be set before reading the archive.
- * <p>The following atributes are supported:
- * <dl>
- * <dt>version
- * <dd>the Java version (not supported)
- * <dt>class
- * <dd>the type of preferable parser (not supported)
- * <dt>id
- * <dd>the identifier of the variable that is intended to store the result
- * </dl>
- *
- * @see DocumentHandler#getOwner
- * @see DocumentHandler#setOwner
- * @since 1.7
- *
- * @author Sergey A. Malenkov
- */
-final class JavaElementHandler extends ElementHandler {
-    private Class<?> type;
-    private ValueObject value;
-
-    /**
-     * Parses attributes of the element.
-     * The following atributes are supported:
-     * <dl>
-     * <dt>version
-     * <dd>the Java version (not supported)
-     * <dt>class
-     * <dd>the type of preferable parser (not supported)
-     * <dt>id
-     * <dd>the identifier of the variable that is intended to store the result
-     * </dl>
-     *
-     * @param name   the attribute name
-     * @param value  the attribute value
-     */
-    @Override
-    public void addAttribute(String name, String value) {
-        if (name.equals("version")) { // NON-NLS: the attribute name
-            // unsupported attribute
-        } else if (name.equals("class")) { // NON-NLS: the attribute name
-            // check class for owner
-            this.type = getOwner().findClass(value);
-        } else {
-            super.addAttribute(name, value);
-        }
-    }
-
-    /**
-     * Adds the argument to the list of readed objects.
-     *
-     * @param argument  the value of the element that contained in this one
-     */
-    @Override
-    protected void addArgument(Object argument) {
-        getOwner().addObject(argument);
-    }
-
-    /**
-     * Tests whether the value of this element can be used
-     * as an argument of the element that contained in this one.
-     *
-     * @return {@code true} if the value of this element should be used
-     *         as an argument of the element that contained in this one,
-     *         {@code false} otherwise
-     */
-    @Override
-    protected boolean isArgument() {
-        return false; // do not use owner as object
-    }
-
-    /**
-     * Returns the value of this element.
-     *
-     * @return the value of this element
-     */
-    @Override
-    protected ValueObject getValueObject() {
-        if (this.value == null) {
-            this.value = ValueObjectImpl.create(getValue());
-        }
-        return this.value;
-    }
-
-    /**
-     * Returns the owner of the owner document handler
-     * as a value of &lt;java&gt; element.
-     *
-     * @return the owner of the owner document handler
-     */
-    private Object getValue() {
-        Object owner = getOwner().getOwner();
-        if ((this.type == null) || isValid(owner)) {
-            return owner;
-        }
-        if (owner instanceof XMLDecoder) {
-            XMLDecoder decoder = (XMLDecoder) owner;
-            owner = decoder.getOwner();
-            if (isValid(owner)) {
-                return owner;
-            }
-        }
-        throw new IllegalStateException("Unexpected owner class: " + owner.getClass().getName());
-    }
-
-    /**
-     * Validates the owner of the &lt;java&gt; element.
-     * The owner is valid if it is {@code null} or an instance
-     * of the class specified by the {@code class} attribute.
-     *
-     * @param owner  the owner of the &lt;java&gt; element
-     * @return {@code true} if the {@code owner} is valid;
-     *         {@code false} otherwise
-     */
-    private boolean isValid(Object owner) {
-        return (owner == null) || this.type.isInstance(owner);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/beans/decoder/LongElementHandler.java b/ojluni/src/main/java/com/sun/beans/decoder/LongElementHandler.java
deleted file mode 100755
index 3147f47..0000000
--- a/ojluni/src/main/java/com/sun/beans/decoder/LongElementHandler.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-package com.sun.beans.decoder;
-
-/**
- * This class is intended to handle &lt;long&gt; element.
- * This element specifies {@code long} values.
- * The class {@link Long} is used as wrapper for these values.
- * The result value is created from text of the body of this element.
- * The body parsing is described in the class {@link StringElementHandler}.
- * For example:<pre>
- * &lt;long&gt;0xFFFF&lt;/long&gt;</pre>
- * is shortcut to<pre>
- * &lt;method name="decode" class="java.lang.Long"&gt;
- *     &lt;string&gt;0xFFFF&lt;/string&gt;
- * &lt;/method&gt;</pre>
- * which is equivalent to {@code Long.decode("0xFFFF")} in Java code.
- * <p>The following atribute is supported:
- * <dl>
- * <dt>id
- * <dd>the identifier of the variable that is intended to store the result
- * </dl>
- *
- * @since 1.7
- *
- * @author Sergey A. Malenkov
- */
-final class LongElementHandler extends StringElementHandler {
-
-    /**
-     * Creates {@code long} value from
-     * the text of the body of this element.
-     *
-     * @param argument  the text of the body
-     * @return evaluated {@code long} value
-     */
-    @Override
-    public Object getValue(String argument) {
-        return Long.decode(argument);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/beans/decoder/MethodElementHandler.java b/ojluni/src/main/java/com/sun/beans/decoder/MethodElementHandler.java
deleted file mode 100755
index 73fcb67..0000000
--- a/ojluni/src/main/java/com/sun/beans/decoder/MethodElementHandler.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * Copyright (c) 2008, 2012, 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.beans.decoder;
-
-import com.sun.beans.finder.MethodFinder;
-
-import java.lang.reflect.Method;
-
-import sun.reflect.misc.MethodUtil;
-
-/**
- * This class is intended to handle &lt;method&gt; element.
- * It describes invocation of the method.
- * The {@code name} attribute denotes
- * the name of the method to invoke.
- * If the {@code class} attribute is specified
- * this element invokes static method of specified class.
- * The inner elements specifies the arguments of the method.
- * For example:<pre>
- * &lt;method name="valueOf" class="java.lang.Long"&gt;
- *     &lt;string&gt;10&lt;/string&gt;
- * &lt;/method&gt;</pre>
- * is equivalent to {@code Long.valueOf("10")} in Java code.
- * <p>The following atributes are supported:
- * <dl>
- * <dt>name
- * <dd>the method name
- * <dt>class
- * <dd>the type of object for instantiation
- * <dt>id
- * <dd>the identifier of the variable that is intended to store the result
- * </dl>
- *
- * @since 1.7
- *
- * @author Sergey A. Malenkov
- */
-final class MethodElementHandler extends NewElementHandler {
-    private String name;
-
-    /**
-     * Parses attributes of the element.
-     * The following atributes are supported:
-     * <dl>
-     * <dt>name
-     * <dd>the method name
-     * <dt>class
-     * <dd>the type of object for instantiation
-     * <dt>id
-     * <dd>the identifier of the variable that is intended to store the result
-     * </dl>
-     *
-     * @param name   the attribute name
-     * @param value  the attribute value
-     */
-    @Override
-    public void addAttribute(String name, String value) {
-        if (name.equals("name")) { // NON-NLS: the attribute name
-            this.name = value;
-        } else {
-            super.addAttribute(name, value);
-        }
-    }
-
-    /**
-     * Returns the result of method execution.
-     *
-     * @param type  the base class
-     * @param args  the array of arguments
-     * @return the value of this element
-     * @throws Exception if calculation is failed
-     */
-    @Override
-    protected ValueObject getValueObject(Class<?> type, Object[] args) throws Exception {
-        Object bean = getContextBean();
-        Class<?>[] types = getArgumentTypes(args);
-        Method method = (type != null)
-                ? MethodFinder.findStaticMethod(type, this.name, types)
-                : MethodFinder.findMethod(bean.getClass(), this.name, types);
-
-        if (method.isVarArgs()) {
-            args = getArguments(args, method.getParameterTypes());
-        }
-        Object value = MethodUtil.invoke(method, bean, args);
-        return method.getReturnType().equals(void.class)
-                ? ValueObjectImpl.VOID
-                : ValueObjectImpl.create(value);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/beans/decoder/NewElementHandler.java b/ojluni/src/main/java/com/sun/beans/decoder/NewElementHandler.java
deleted file mode 100755
index 18998db..0000000
--- a/ojluni/src/main/java/com/sun/beans/decoder/NewElementHandler.java
+++ /dev/null
@@ -1,205 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-package com.sun.beans.decoder;
-
-import com.sun.beans.finder.ConstructorFinder;
-
-import java.lang.reflect.Array;
-import java.lang.reflect.Constructor;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * This class is intended to handle &lt;new&gt; element.
- * It describes instantiation of the object.
- * The {@code class} attribute denotes
- * the name of the class to instantiate.
- * The inner elements specifies the arguments of the constructor.
- * For example:<pre>
- * &lt;new class="java.lang.Long"&gt;
- *     &lt;string&gt;10&lt;/string&gt;
- * &lt;/new&gt;</pre>
- * is equivalent to {@code new Long("10")} in Java code.
- * <p>The following atributes are supported:
- * <dl>
- * <dt>class
- * <dd>the type of object for instantiation
- * <dt>id
- * <dd>the identifier of the variable that is intended to store the result
- * </dl>
- *
- * @since 1.7
- *
- * @author Sergey A. Malenkov
- */
-class NewElementHandler extends ElementHandler {
-    private List<Object> arguments = new ArrayList<Object>();
-    private ValueObject value = ValueObjectImpl.VOID;
-
-    private Class<?> type;
-
-    /**
-     * Parses attributes of the element.
-     * The following atributes are supported:
-     * <dl>
-     * <dt>class
-     * <dd>the type of object for instantiation
-     * <dt>id
-     * <dd>the identifier of the variable that is intended to store the result
-     * </dl>
-     *
-     * @param name   the attribute name
-     * @param value  the attribute value
-     */
-    @Override
-    public void addAttribute(String name, String value) {
-        if (name.equals("class")) { // NON-NLS: the attribute name
-            this.type = getOwner().findClass(value);
-        } else {
-            super.addAttribute(name, value);
-        }
-    }
-
-    /**
-     * Adds the argument to the list of arguments
-     * that is used to calculate the value of this element.
-     *
-     * @param argument  the value of the element that contained in this one
-     */
-    @Override
-    protected final void addArgument(Object argument) {
-        if (this.arguments == null) {
-            throw new IllegalStateException("Could not add argument to evaluated element");
-        }
-        this.arguments.add(argument);
-    }
-
-    /**
-     * Returns the context of the method.
-     * The context of the static method is the class object.
-     * The context of the non-static method is the value of the parent element.
-     *
-     * @return the context of the method
-     */
-    @Override
-    protected final Object getContextBean() {
-        return (this.type != null)
-                ? this.type
-                : super.getContextBean();
-    }
-
-    /**
-     * Returns the value of this element.
-     *
-     * @return the value of this element
-     */
-    @Override
-    protected final ValueObject getValueObject() {
-        if (this.arguments != null) {
-            try {
-                this.value = getValueObject(this.type, this.arguments.toArray());
-            }
-            catch (Exception exception) {
-                getOwner().handleException(exception);
-            }
-            finally {
-                this.arguments = null;
-            }
-        }
-        return this.value;
-    }
-
-    /**
-     * Calculates the value of this element
-     * using the base class and the array of arguments.
-     * By default, it creates an instance of the base class.
-     * This method should be overridden in those handlers
-     * that extend behavior of this element.
-     *
-     * @param type  the base class
-     * @param args  the array of arguments
-     * @return the value of this element
-     * @throws Exception if calculation is failed
-     */
-    ValueObject getValueObject(Class<?> type, Object[] args) throws Exception {
-        if (type == null) {
-            throw new IllegalArgumentException("Class name is not set");
-        }
-        Class<?>[] types = getArgumentTypes(args);
-        Constructor<?> constructor = ConstructorFinder.findConstructor(type, types);
-        if (constructor.isVarArgs()) {
-            args = getArguments(args, constructor.getParameterTypes());
-        }
-        return ValueObjectImpl.create(constructor.newInstance(args));
-    }
-
-    /**
-     * Converts the array of arguments to the array of corresponding classes.
-     * If argument is {@code null} the class is {@code null} too.
-     *
-     * @param arguments  the array of arguments
-     * @return the array of corresponding classes
-     */
-    static Class<?>[] getArgumentTypes(Object[] arguments) {
-        Class<?>[] types = new Class<?>[arguments.length];
-        for (int i = 0; i < arguments.length; i++) {
-            if (arguments[i] != null) {
-                types[i] = arguments[i].getClass();
-            }
-        }
-        return types;
-    }
-
-    /**
-     * Resolves variable arguments.
-     *
-     * @param arguments  the array of arguments
-     * @param types      the array of parameter types
-     * @return the resolved array of arguments
-     */
-    static Object[] getArguments(Object[] arguments, Class<?>[] types) {
-        int index = types.length - 1;
-        if (types.length == arguments.length) {
-            Object argument = arguments[index];
-            if (argument == null) {
-                return arguments;
-            }
-            Class<?> type = types[index];
-            if (type.isAssignableFrom(argument.getClass())) {
-                return arguments;
-            }
-        }
-        int length = arguments.length - index;
-        Class<?> type = types[index].getComponentType();
-        Object array = Array.newInstance(type, length);
-        System.arraycopy(arguments, index, array, 0, length);
-
-        Object[] args = new Object[types.length];
-        System.arraycopy(arguments, 0, args, 0, index);
-        args[index] = array;
-        return args;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/beans/decoder/NullElementHandler.java b/ojluni/src/main/java/com/sun/beans/decoder/NullElementHandler.java
deleted file mode 100755
index 59cb0e9..0000000
--- a/ojluni/src/main/java/com/sun/beans/decoder/NullElementHandler.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-package com.sun.beans.decoder;
-
-/**
- * This class is intended to handle &lt;null&gt; element.
- * This element specifies {@code null} value.
- * It should not contain body or inner elements.
- * For example:<pre>
- * &lt;null/&gt;</pre>
- * is equivalent to {@code null} in Java code.
- * <p>The following atribute is supported:
- * <dl>
- * <dt>id
- * <dd>the identifier of the variable that is intended to store the result
- * </dl>
- *
- * @since 1.7
- *
- * @author Sergey A. Malenkov
- */
-class NullElementHandler extends ElementHandler implements ValueObject {
-
-    /**
-     * Returns the value of this element.
-     *
-     * @return the value of this element
-     */
-    @Override
-    protected final ValueObject getValueObject() {
-        return this;
-    }
-
-    /**
-     * Returns {@code null}
-     * as a value of &lt;null&gt; element.
-     * This method should be overridden in those handlers
-     * that extend behavior of this element.
-     *
-     * @return {@code null} by default
-     */
-    public Object getValue() {
-        return null;
-    }
-
-    /**
-     * Returns {@code void} state of this value object.
-     *
-     * @return {@code false} always
-     */
-    public final boolean isVoid() {
-        return false;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/beans/decoder/ObjectElementHandler.java b/ojluni/src/main/java/com/sun/beans/decoder/ObjectElementHandler.java
deleted file mode 100755
index 5669471..0000000
--- a/ojluni/src/main/java/com/sun/beans/decoder/ObjectElementHandler.java
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-package com.sun.beans.decoder;
-
-import java.beans.Expression;
-
-import static java.util.Locale.ENGLISH;
-
-/**
- * This class is intended to handle &lt;object&gt; element.
- * This element looks like &lt;void&gt; element,
- * but its value is always used as an argument for element
- * that contains this one.
- * <p>The following atributes are supported:
- * <dl>
- * <dt>class
- * <dd>the type is used for static methods and fields
- * <dt>method
- * <dd>the method name
- * <dt>property
- * <dd>the property name
- * <dt>index
- * <dd>the property index
- * <dt>field
- * <dd>the field name
- * <dt>idref
- * <dd>the identifier to refer to the variable
- * <dt>id
- * <dd>the identifier of the variable that is intended to store the result
- * </dl>
- *
- * @since 1.7
- *
- * @author Sergey A. Malenkov
- */
-class ObjectElementHandler extends NewElementHandler {
-    private String idref;
-    private String field;
-    private Integer index;
-    private String property;
-    private String method;
-
-    /**
-     * Parses attributes of the element.
-     * The following atributes are supported:
-     * <dl>
-     * <dt>class
-     * <dd>the type is used for static methods and fields
-     * <dt>method
-     * <dd>the method name
-     * <dt>property
-     * <dd>the property name
-     * <dt>index
-     * <dd>the property index
-     * <dt>field
-     * <dd>the field name
-     * <dt>idref
-     * <dd>the identifier to refer to the variable
-     * <dt>id
-     * <dd>the identifier of the variable that is intended to store the result
-     * </dl>
-     *
-     * @param name   the attribute name
-     * @param value  the attribute value
-     */
-    @Override
-    public final void addAttribute(String name, String value) {
-        if (name.equals("idref")) { // NON-NLS: the attribute name
-            this.idref = value;
-        } else if (name.equals("field")) { // NON-NLS: the attribute name
-            this.field = value;
-        } else if (name.equals("index")) { // NON-NLS: the attribute name
-            this.index = Integer.valueOf(value);
-            addArgument(this.index); // hack for compatibility
-        } else if (name.equals("property")) { // NON-NLS: the attribute name
-            this.property = value;
-        } else if (name.equals("method")) { // NON-NLS: the attribute name
-            this.method = value;
-        } else {
-            super.addAttribute(name, value);
-        }
-    }
-
-    /**
-     * Calculates the value of this element
-     * if the field attribute or the idref attribute is set.
-     */
-    @Override
-    public final void startElement() {
-        if ((this.field != null) || (this.idref != null)) {
-            getValueObject();
-        }
-    }
-
-    /**
-     * Tests whether the value of this element can be used
-     * as an argument of the element that contained in this one.
-     *
-     * @return {@code true} if the value of this element can be used
-     *         as an argument of the element that contained in this one,
-     *         {@code false} otherwise
-     */
-    @Override
-    protected boolean isArgument() {
-        return true; // hack for compatibility
-    }
-
-    /**
-     * Creates the value of this element.
-     *
-     * @param type  the base class
-     * @param args  the array of arguments
-     * @return the value of this element
-     * @throws Exception if calculation is failed
-     */
-    @Override
-    protected final ValueObject getValueObject(Class<?> type, Object[] args) throws Exception {
-        if (this.field != null) {
-            return ValueObjectImpl.create(FieldElementHandler.getFieldValue(getContextBean(), this.field));
-        }
-        if (this.idref != null) {
-            return ValueObjectImpl.create(getVariable(this.idref));
-        }
-        Object bean = getContextBean();
-        String name;
-        if (this.index != null) {
-            name = (args.length == 2)
-                    ? PropertyElementHandler.SETTER
-                    : PropertyElementHandler.GETTER;
-        } else if (this.property != null) {
-            name = (args.length == 1)
-                    ? PropertyElementHandler.SETTER
-                    : PropertyElementHandler.GETTER;
-
-            if (0 < this.property.length()) {
-                name += this.property.substring(0, 1).toUpperCase(ENGLISH) + this.property.substring(1);
-            }
-        } else {
-            name = (this.method != null) && (0 < this.method.length())
-                    ? this.method
-                    : "new"; // NON-NLS: the constructor marker
-        }
-        Expression expression = new Expression(bean, name, args);
-        return ValueObjectImpl.create(expression.getValue());
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/beans/decoder/PropertyElementHandler.java b/ojluni/src/main/java/com/sun/beans/decoder/PropertyElementHandler.java
deleted file mode 100755
index 8f4c40c..0000000
--- a/ojluni/src/main/java/com/sun/beans/decoder/PropertyElementHandler.java
+++ /dev/null
@@ -1,289 +0,0 @@
-/*
- * Copyright (c) 2008, 2012, 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.beans.decoder;
-
-import com.sun.beans.finder.MethodFinder;
-
-import java.beans.IndexedPropertyDescriptor;
-import java.beans.IntrospectionException;
-import java.beans.Introspector;
-import java.beans.PropertyDescriptor;
-
-import java.lang.reflect.Array;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-
-import sun.reflect.misc.MethodUtil;
-
-/**
- * This class is intended to handle &lt;property&gt; element.
- * This element simplifies access to the properties.
- * If the {@code index} attribute is specified
- * this element uses additional {@code int} parameter.
- * If the {@code name} attribute is not specified
- * this element uses method "get" as getter
- * and method "set" as setter.
- * This element defines getter if it contains no argument.
- * It returns the value of the property in this case.
- * For example:<pre>
- * &lt;property name="object" index="10"/&gt;</pre>
- * is shortcut to<pre>
- * &lt;method name="getObject"&gt;
- *     &lt;int&gt;10&lt;/int&gt;
- * &lt;/method&gt;</pre>
- * which is equivalent to {@code getObject(10)} in Java code.
- * This element defines setter if it contains one argument.
- * It does not return the value of the property in this case.
- * For example:<pre>
- * &lt;property&gt;&lt;int&gt;0&lt;/int&gt;&lt;/property&gt;</pre>
- * is shortcut to<pre>
- * &lt;method name="set"&gt;
- *     &lt;int&gt;0&lt;/int&gt;
- * &lt;/method&gt;</pre>
- * which is equivalent to {@code set(0)} in Java code.
- * <p>The following atributes are supported:
- * <dl>
- * <dt>name
- * <dd>the property name
- * <dt>index
- * <dd>the property index
- * <dt>id
- * <dd>the identifier of the variable that is intended to store the result
- * </dl>
- *
- * @since 1.7
- *
- * @author Sergey A. Malenkov
- */
-final class PropertyElementHandler extends AccessorElementHandler {
-    static final String GETTER = "get"; // NON-NLS: the getter prefix
-    static final String SETTER = "set"; // NON-NLS: the setter prefix
-
-    private Integer index;
-
-    /**
-     * Parses attributes of the element.
-     * The following atributes are supported:
-     * <dl>
-     * <dt>name
-     * <dd>the property name
-     * <dt>index
-     * <dd>the property index
-     * <dt>id
-     * <dd>the identifier of the variable that is intended to store the result
-     * </dl>
-     *
-     * @param name   the attribute name
-     * @param value  the attribute value
-     */
-    @Override
-    public void addAttribute(String name, String value) {
-        if (name.equals("index")) { // NON-NLS: the attribute name
-            this.index = Integer.valueOf(value);
-        } else {
-            super.addAttribute(name, value);
-        }
-    }
-
-    /**
-     * Tests whether the value of this element can be used
-     * as an argument of the element that contained in this one.
-     *
-     * @return {@code true} if the value of this element should be used
-     *         as an argument of the element that contained in this one,
-     *         {@code false} otherwise
-     */
-    @Override
-    protected boolean isArgument() {
-        return false; // non-static accessor cannot be used an argument
-    }
-
-    /**
-     * Returns the value of the property with specified {@code name}.
-     *
-     * @param name  the name of the property
-     * @return the value of the specified property
-     */
-    @Override
-    protected Object getValue(String name) {
-        try {
-            return getPropertyValue(getContextBean(), name, this.index);
-        }
-        catch (Exception exception) {
-            getOwner().handleException(exception);
-        }
-        return null;
-    }
-
-    /**
-     * Sets the new value for the property with specified {@code name}.
-     *
-     * @param name   the name of the property
-     * @param value  the new value for the specified property
-     */
-    @Override
-    protected void setValue(String name, Object value) {
-        try {
-            setPropertyValue(getContextBean(), name, this.index, value);
-        }
-        catch (Exception exception) {
-            getOwner().handleException(exception);
-        }
-    }
-
-    /**
-     * Performs the search of the getter for the property
-     * with specified {@code name} in specified class
-     * and returns value of the property.
-     *
-     * @param bean   the context bean that contains property
-     * @param name   the name of the property
-     * @param index  the index of the indexed property
-     * @return the value of the property
-     * @throws IllegalAccessException    if the property is not accesible
-     * @throws IntrospectionException    if the bean introspection is failed
-     * @throws InvocationTargetException if the getter cannot be invoked
-     * @throws NoSuchMethodException     if the getter is not found
-     */
-    private static Object getPropertyValue(Object bean, String name, Integer index) throws IllegalAccessException, IntrospectionException, InvocationTargetException, NoSuchMethodException {
-        Class<?> type = bean.getClass();
-        if (index == null) {
-            return MethodUtil.invoke(findGetter(type, name), bean, new Object[] {});
-        } else if (type.isArray() && (name == null)) {
-            return Array.get(bean, index);
-        } else {
-            return MethodUtil.invoke(findGetter(type, name, int.class), bean, new Object[] {index});
-        }
-    }
-
-    /**
-     * Performs the search of the setter for the property
-     * with specified {@code name} in specified class
-     * and updates value of the property.
-     *
-     * @param bean   the context bean that contains property
-     * @param name   the name of the property
-     * @param index  the index of the indexed property
-     * @param value  the new value for the property
-     * @throws IllegalAccessException    if the property is not accesible
-     * @throws IntrospectionException    if the bean introspection is failed
-     * @throws InvocationTargetException if the setter cannot be invoked
-     * @throws NoSuchMethodException     if the setter is not found
-     */
-    private static void setPropertyValue(Object bean, String name, Integer index, Object value) throws IllegalAccessException, IntrospectionException, InvocationTargetException, NoSuchMethodException {
-        Class<?> type = bean.getClass();
-        Class<?> param = (value != null)
-                ? value.getClass()
-                : null;
-
-        if (index == null) {
-            MethodUtil.invoke(findSetter(type, name, param), bean, new Object[] {value});
-        } else if (type.isArray() && (name == null)) {
-            Array.set(bean, index, value);
-        } else {
-            MethodUtil.invoke(findSetter(type, name, int.class, param), bean, new Object[] {index, value});
-        }
-    }
-
-    /**
-     * Performs the search of the getter for the property
-     * with specified {@code name} in specified class.
-     *
-     * @param type  the class that contains method
-     * @param name  the name of the property
-     * @param args  the method arguments
-     * @return method object that represents found getter
-     * @throws IntrospectionException if the bean introspection is failed
-     * @throws NoSuchMethodException  if method is not found
-     */
-    private static Method findGetter(Class<?> type, String name, Class<?>...args) throws IntrospectionException, NoSuchMethodException {
-        if (name == null) {
-            return MethodFinder.findInstanceMethod(type, GETTER, args);
-        }
-        PropertyDescriptor pd = getProperty(type, name);
-        if (args.length == 0) {
-            Method method = pd.getReadMethod();
-            if (method != null) {
-                return method;
-            }
-        } else if (pd instanceof IndexedPropertyDescriptor) {
-            IndexedPropertyDescriptor ipd = (IndexedPropertyDescriptor) pd;
-            Method method = ipd.getIndexedReadMethod();
-            if (method != null) {
-                return method;
-            }
-        }
-        throw new IntrospectionException("Could not find getter for the " + name + " property");
-    }
-
-    /**
-     * Performs the search of the setter for the property
-     * with specified {@code name} in specified class.
-     *
-     * @param type  the class that contains method
-     * @param name  the name of the property
-     * @param args  the method arguments
-     * @return method object that represents found setter
-     * @throws IntrospectionException if the bean introspection is failed
-     * @throws NoSuchMethodException  if method is not found
-     */
-    private static Method findSetter(Class<?> type, String name, Class<?>...args) throws IntrospectionException, NoSuchMethodException {
-        if (name == null) {
-            return MethodFinder.findInstanceMethod(type, SETTER, args);
-        }
-        PropertyDescriptor pd = getProperty(type, name);
-        if (args.length == 1) {
-            Method method = pd.getWriteMethod();
-            if (method != null) {
-                return method;
-            }
-        } else if (pd instanceof IndexedPropertyDescriptor) {
-            IndexedPropertyDescriptor ipd = (IndexedPropertyDescriptor) pd;
-            Method method = ipd.getIndexedWriteMethod();
-            if (method != null) {
-                return method;
-            }
-        }
-        throw new IntrospectionException("Could not find setter for the " + name + " property");
-    }
-
-    /**
-     * Performs the search of the descriptor for the property
-     * with specified {@code name} in specified class.
-     *
-     * @param type  the class to introspect
-     * @param name  the property name
-     * @return descriptor for the named property
-     * @throws IntrospectionException if property descriptor is not found
-     */
-    private static PropertyDescriptor getProperty(Class<?> type, String name) throws IntrospectionException {
-        for (PropertyDescriptor pd : Introspector.getBeanInfo(type).getPropertyDescriptors()) {
-            if (name.equals(pd.getName())) {
-                return pd;
-            }
-        }
-        throw new IntrospectionException("Could not find the " + name + " property descriptor");
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/beans/decoder/ShortElementHandler.java b/ojluni/src/main/java/com/sun/beans/decoder/ShortElementHandler.java
deleted file mode 100755
index f86ad38..0000000
--- a/ojluni/src/main/java/com/sun/beans/decoder/ShortElementHandler.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-package com.sun.beans.decoder;
-
-/**
- * This class is intended to handle &lt;short&gt; element.
- * This element specifies {@code short} values.
- * The class {@link Short} is used as wrapper for these values.
- * The result value is created from text of the body of this element.
- * The body parsing is described in the class {@link StringElementHandler}.
- * For example:<pre>
- * &lt;short&gt;200&lt;/short&gt;</pre>
- * is shortcut to<pre>
- * &lt;method name="decode" class="java.lang.Short"&gt;
- *     &lt;string&gt;200&lt;/string&gt;
- * &lt;/method&gt;</pre>
- * which is equivalent to {@code Short.decode("200")} in Java code.
- * <p>The following atribute is supported:
- * <dl>
- * <dt>id
- * <dd>the identifier of the variable that is intended to store the result
- * </dl>
- *
- * @since 1.7
- *
- * @author Sergey A. Malenkov
- */
-final class ShortElementHandler extends StringElementHandler {
-
-    /**
-     * Creates {@code short} value from
-     * the text of the body of this element.
-     *
-     * @param argument  the text of the body
-     * @return evaluated {@code short} value
-     */
-    @Override
-    public Object getValue(String argument) {
-        return Short.decode(argument);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/beans/decoder/StringElementHandler.java b/ojluni/src/main/java/com/sun/beans/decoder/StringElementHandler.java
deleted file mode 100755
index bceb7ce..0000000
--- a/ojluni/src/main/java/com/sun/beans/decoder/StringElementHandler.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-package com.sun.beans.decoder;
-
-/**
- * This class is intended to handle &lt;string&gt; element.
- * This element specifies {@link String} values.
- * The result value is created from text of the body of this element.
- * For example:<pre>
- * &lt;string&gt;description&lt;/string&gt;</pre>
- * is equivalent to {@code "description"} in Java code.
- * The value of inner element is calculated
- * before adding to the string using {@link String#valueOf(Object)}.
- * Note that all characters are used including whitespaces (' ', '\t', '\n', '\r').
- * So the value of the element<pre>
- * &lt;string&gt&lt;true&gt&lt;/string&gt;</pre>
- * is not equal to the value of the element<pre>
- * &lt;string&gt;
- *     &lt;true&gt;
- * &lt;/string&gt;</pre>
- * <p>The following atribute is supported:
- * <dl>
- * <dt>id
- * <dd>the identifier of the variable that is intended to store the result
- * </dl>
- *
- * @since 1.7
- *
- * @author Sergey A. Malenkov
- */
-public class StringElementHandler extends ElementHandler {
-    private StringBuilder sb = new StringBuilder();
-    private ValueObject value = ValueObjectImpl.NULL;
-
-    /**
-     * Adds the character that contained in this element.
-     *
-     * @param ch  the character
-     */
-    @Override
-    public final void addCharacter(char ch) {
-        if (this.sb == null) {
-            throw new IllegalStateException("Could not add chararcter to evaluated string element");
-        }
-        this.sb.append(ch);
-    }
-
-    /**
-     * Adds the string value of the argument to the string value of this element.
-     *
-     * @param argument  the value of the element that contained in this one
-     */
-    @Override
-    protected final void addArgument(Object argument) {
-        if (this.sb == null) {
-            throw new IllegalStateException("Could not add argument to evaluated string element");
-        }
-        this.sb.append(argument);
-    }
-
-    /**
-     * Returns the value of this element.
-     *
-     * @return the value of this element
-     */
-    @Override
-    protected final ValueObject getValueObject() {
-        if (this.sb != null) {
-            try {
-                this.value = ValueObjectImpl.create(getValue(this.sb.toString()));
-            }
-            catch (RuntimeException exception) {
-                getOwner().handleException(exception);
-            }
-            finally {
-                this.sb = null;
-            }
-        }
-        return this.value;
-    }
-
-    /**
-     * Returns the text of the body of this element.
-     * This method evaluates value from text of the body,
-     * and should be overridden in those handlers
-     * that extend behavior of this element.
-     *
-     * @param argument  the text of the body
-     * @return evaluated value
-     */
-    protected Object getValue(String argument) {
-        return argument;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/beans/decoder/TrueElementHandler.java b/ojluni/src/main/java/com/sun/beans/decoder/TrueElementHandler.java
deleted file mode 100755
index f3bed67..0000000
--- a/ojluni/src/main/java/com/sun/beans/decoder/TrueElementHandler.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-package com.sun.beans.decoder;
-
-/**
- * This class is intended to handle &lt;true&gt; element.
- * This element specifies {@code true} value.
- * It should not contain body or inner elements.
- * For example:<pre>
- * &lt;true/&gt;</pre>
- * is equivalent to {@code true} in Java code.
- * <p>The following atribute is supported:
- * <dl>
- * <dt>id
- * <dd>the identifier of the variable that is intended to store the result
- * </dl>
- *
- * @since 1.7
- *
- * @author Sergey A. Malenkov
- */
-final class TrueElementHandler extends NullElementHandler {
-
-    /**
-     * Returns {@code Boolean.TRUE}
-     * as a value of &lt;true&gt; element.
-     *
-     * @return {@code Boolean.TRUE} by default
-     */
-    @Override
-    public Object getValue() {
-        return Boolean.TRUE;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/beans/decoder/ValueObject.java b/ojluni/src/main/java/com/sun/beans/decoder/ValueObject.java
deleted file mode 100755
index d602818..0000000
--- a/ojluni/src/main/java/com/sun/beans/decoder/ValueObject.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-package com.sun.beans.decoder;
-
-/**
- * This interface represents the result of method execution.
- *
- * @since 1.7
- *
- * @author Sergey A. Malenkov
- */
-public interface ValueObject {
-
-    /**
-     * Returns the result of method execution.
-     *
-     * @return the result of method execution
-     */
-    Object getValue();
-
-    /**
-     * Returns {@code void} state of this value object.
-     *
-     * @return {@code true} if value can be ignored,
-     *         {@code false} otherwise
-     */
-    boolean isVoid();
-}
diff --git a/ojluni/src/main/java/com/sun/beans/decoder/ValueObjectImpl.java b/ojluni/src/main/java/com/sun/beans/decoder/ValueObjectImpl.java
deleted file mode 100755
index 6fa46c9..0000000
--- a/ojluni/src/main/java/com/sun/beans/decoder/ValueObjectImpl.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-package com.sun.beans.decoder;
-
-/**
- * This utility class provides {@code static} method
- * to create the object that contains the result of method execution.
- *
- * @since 1.7
- *
- * @author Sergey A. Malenkov
- */
-final class ValueObjectImpl implements ValueObject {
-    static final ValueObject NULL = new ValueObjectImpl(null);
-    static final ValueObject VOID = new ValueObjectImpl();
-
-    /**
-     * Returns the object that describes returning value.
-     *
-     * @param value  the result of method execution
-     * @return the object that describes value
-     */
-    static ValueObject create(Object value) {
-        return (value != null)
-                ? new ValueObjectImpl(value)
-                : NULL;
-    }
-
-    private Object value;
-    private boolean isVoid;
-
-    /**
-     * Creates the object that describes returning void value.
-     */
-    private ValueObjectImpl() {
-        this.isVoid = true;
-    }
-
-    /**
-     * Creates the object that describes returning non-void value.
-     *
-     * @param value  the result of method execution
-     */
-    private ValueObjectImpl(Object value) {
-        this.value = value;
-    }
-
-    /**
-     * Returns the result of method execution.
-     *
-     * @return the result of method execution
-     */
-    public Object getValue() {
-        return this.value;
-    }
-
-    /**
-     * Returns {@code void} state of this value object.
-     *
-     * @return {@code true} if value should be ignored,
-     *         {@code false} otherwise
-     */
-    public boolean isVoid() {
-        return this.isVoid;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/beans/decoder/VarElementHandler.java b/ojluni/src/main/java/com/sun/beans/decoder/VarElementHandler.java
deleted file mode 100755
index 2d540fd..0000000
--- a/ojluni/src/main/java/com/sun/beans/decoder/VarElementHandler.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-package com.sun.beans.decoder;
-
-/**
- * This class is intended to handle &lt;var&gt; element.
- * This element retrieves the value of specified variable.
- * For example:<pre>
- * &lt;var id="id1" idref="id2"/&gt;</pre>
- * is equivalent to {@code id1 = id2} in Java code.
- * <p>The following atributes are supported:
- * <dl>
- * <dt>idref
- * <dd>the identifier to refer to the variable
- * <dt>id
- * <dd>the identifier of the variable that is intended to store the result
- * </dl>
- *
- * @since 1.7
- *
- * @author Sergey A. Malenkov
- */
-final class VarElementHandler extends ElementHandler {
-    private ValueObject value;
-
-    /**
-     * Parses attributes of the element.
-     * The following atributes are supported:
-     * <dl>
-     * <dt>idref
-     * <dd>the identifier to refer to the variable
-     * <dt>id
-     * <dd>the identifier of the variable that is intended to store the result
-     * </dl>
-     *
-     * @param name   the attribute name
-     * @param value  the attribute value
-     */
-    @Override
-    public void addAttribute(String name, String value) {
-        if (name.equals("idref")) { // NON-NLS: the attribute name
-            this.value = ValueObjectImpl.create(getVariable(value));
-        } else {
-            super.addAttribute(name, value);
-        }
-    }
-
-    /**
-     * Returns the value of this element.
-     *
-     * @return the value of this element
-     */
-    @Override
-    protected ValueObject getValueObject() {
-        if (this.value == null) {
-            throw new IllegalArgumentException("Variable name is not set");
-        }
-        return this.value;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/beans/decoder/VoidElementHandler.java b/ojluni/src/main/java/com/sun/beans/decoder/VoidElementHandler.java
deleted file mode 100755
index 63ce32c..0000000
--- a/ojluni/src/main/java/com/sun/beans/decoder/VoidElementHandler.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-package com.sun.beans.decoder;
-
-/**
- * This class is intended to handle &lt;void&gt; element.
- * This element looks like &lt;object&gt; element,
- * but its value is not used as an argument for element
- * that contains this one.
- * <p>The following atributes are supported:
- * <dl>
- * <dt>class
- * <dd>the type is used for static methods and fields
- * <dt>method
- * <dd>the method name
- * <dt>property
- * <dd>the property name
- * <dt>index
- * <dd>the property index
- * <dt>field
- * <dd>the field name
- * <dt>idref
- * <dd>the identifier to refer to the variable
- * <dt>id
- * <dd>the identifier of the variable that is intended to store the result
- * </dl>
- *
- * @since 1.7
- *
- * @author Sergey A. Malenkov
- */
-final class VoidElementHandler extends ObjectElementHandler {
-
-    /**
-     * Tests whether the value of this element can be used
-     * as an argument of the element that contained in this one.
-     *
-     * @return {@code true} if the value of this element should be used
-     *         as an argument of the element that contained in this one,
-     *         {@code false} otherwise
-     */
-    @Override
-    protected boolean isArgument() {
-        return false; // hack for compatibility
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/beans/editors/BooleanEditor.java b/ojluni/src/main/java/com/sun/beans/editors/BooleanEditor.java
deleted file mode 100755
index 69aca32..0000000
--- a/ojluni/src/main/java/com/sun/beans/editors/BooleanEditor.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright (c) 2006, 2012, 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.beans.editors;
-
-/**
- * Property editor for a java builtin "boolean" type.
- */
-
-import java.beans.*;
-
-public class BooleanEditor extends PropertyEditorSupport {
-
-
-    public String getJavaInitializationString() {
-        Object value = getValue();
-        return (value != null)
-                ? value.toString()
-                : "null";
-    }
-
-    public String getAsText() {
-        Object value = getValue();
-        return (value instanceof Boolean)
-             ? getValidName((Boolean) value)
-             : null;
-    }
-
-    public void setAsText(String text) throws java.lang.IllegalArgumentException {
-        if (text == null) {
-            setValue(null);
-        } else if (isValidName(true, text)) {
-            setValue(Boolean.TRUE);
-        } else if (isValidName(false, text)) {
-            setValue(Boolean.FALSE);
-        } else {
-            throw new java.lang.IllegalArgumentException(text);
-        }
-    }
-
-    public String[] getTags() {
-        return new String[] {getValidName(true), getValidName(false)};
-    }
-
-    // the following method should be localized (4890258)
-
-    private String getValidName(boolean value) {
-        return value ? "True" : "False";
-    }
-
-    private boolean isValidName(boolean value, String name) {
-        return getValidName(value).equalsIgnoreCase(name);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/beans/editors/ByteEditor.java b/ojluni/src/main/java/com/sun/beans/editors/ByteEditor.java
deleted file mode 100755
index 2f4f342..0000000
--- a/ojluni/src/main/java/com/sun/beans/editors/ByteEditor.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1996, 2012, 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.beans.editors;
-
-/**
- * Property editor for a java builtin "byte" type.
- *
- */
-
-import java.beans.*;
-
-public class ByteEditor extends NumberEditor {
-
-    public String getJavaInitializationString() {
-        Object value = getValue();
-        return (value != null)
-                ? "((byte)" + value + ")"
-                : "null";
-    }
-
-    public void setAsText(String text) throws IllegalArgumentException {
-        setValue((text == null) ? null : Byte.decode(text));
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/beans/editors/ColorEditor.java b/ojluni/src/main/java/com/sun/beans/editors/ColorEditor.java
deleted file mode 100755
index 377af05..0000000
--- a/ojluni/src/main/java/com/sun/beans/editors/ColorEditor.java
+++ /dev/null
@@ -1,214 +0,0 @@
-/*
- * Copyright (c) 1996, 2012, 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.beans.editors;
-
-import java.awt.*;
-import java.beans.*;
-
-public class ColorEditor extends Panel implements PropertyEditor {
-    private static final long serialVersionUID = 1781257185164716054L;
-
-    public ColorEditor() {
-        setLayout(null);
-
-        ourWidth = hPad;
-
-        // Create a sample color block bordered in black
-        Panel p = new Panel();
-        p.setLayout(null);
-        p.setBackground(Color.black);
-        sample = new Canvas();
-        p.add(sample);
-        sample.reshape(2, 2, sampleWidth, sampleHeight);
-        add(p);
-        p.reshape(ourWidth, 2, sampleWidth+4, sampleHeight+4);
-        ourWidth += sampleWidth + 4 + hPad;
-
-        text = new TextField("", 14);
-        add(text);
-        text.reshape(ourWidth,0,100,30);
-        ourWidth += 100 + hPad;
-
-        choser = new Choice();
-        int active = 0;
-        for (int i = 0; i < colorNames.length; i++) {
-            choser.addItem(colorNames[i]);
-        }
-        add(choser);
-        choser.reshape(ourWidth,0,100,30);
-        ourWidth += 100 + hPad;
-
-        resize(ourWidth,40);
-    }
-
-    public void setValue(Object o) {
-        Color c = (Color)o;
-        changeColor(c);
-    }
-
-    public Dimension preferredSize() {
-        return new Dimension(ourWidth, 40);
-    }
-
-    public boolean keyUp(Event e, int key) {
-        if (e.target == text) {
-            try {
-                setAsText(text.getText());
-            } catch (IllegalArgumentException ex) {
-                // Quietly ignore.
-            }
-        }
-        return (false);
-    }
-
-    public void setAsText(String s) throws java.lang.IllegalArgumentException {
-        if (s == null) {
-            changeColor(null);
-            return;
-        }
-        int c1 = s.indexOf(',');
-        int c2 = s.indexOf(',', c1+1);
-        if (c1 < 0 || c2 < 0) {
-            // Invalid string.
-            throw new IllegalArgumentException(s);
-        }
-        try {
-            int r = Integer.parseInt(s.substring(0,c1));
-            int g = Integer.parseInt(s.substring(c1+1, c2));
-            int b = Integer.parseInt(s.substring(c2+1));
-            Color c = new Color(r,g,b);
-            changeColor(c);
-        } catch (Exception ex) {
-            throw new IllegalArgumentException(s);
-        }
-
-    }
-
-    public boolean action(Event e, Object arg) {
-        if (e.target == choser) {
-            changeColor(colors[choser.getSelectedIndex()]);
-        }
-        return false;
-    }
-
-    public String getJavaInitializationString() {
-        return (this.color != null)
-                ? "new java.awt.Color(" + this.color.getRGB() + ",true)"
-                : "null";
-    }
-
-
-    private void changeColor(Color c) {
-
-        if (c == null) {
-            this.color = null;
-            this.text.setText("");
-            return;
-        }
-
-        color = c;
-
-        text.setText("" + c.getRed() + "," + c.getGreen() + "," + c.getBlue());
-
-        int active = 0;
-        for (int i = 0; i < colorNames.length; i++) {
-            if (color.equals(colors[i])) {
-                active = i;
-            }
-        }
-        choser.select(active);
-
-        sample.setBackground(color);
-        sample.repaint();
-
-        support.firePropertyChange("", null, null);
-    }
-
-    public Object getValue() {
-        return color;
-    }
-
-    public boolean isPaintable() {
-        return true;
-    }
-
-    public void paintValue(java.awt.Graphics gfx, java.awt.Rectangle box) {
-        Color oldColor = gfx.getColor();
-        gfx.setColor(Color.black);
-        gfx.drawRect(box.x, box.y, box.width-3, box.height-3);
-        gfx.setColor(color);
-        gfx.fillRect(box.x+1, box.y+1, box.width-4, box.height-4);
-        gfx.setColor(oldColor);
-    }
-
-    public String getAsText() {
-        return (this.color != null)
-                ? this.color.getRed() + "," + this.color.getGreen() + "," + this.color.getBlue()
-                : null;
-    }
-
-    public String[] getTags() {
-        return null;
-    }
-
-    public java.awt.Component getCustomEditor() {
-        return this;
-    }
-
-    public boolean supportsCustomEditor() {
-        return true;
-    }
-
-    public void addPropertyChangeListener(PropertyChangeListener l) {
-        support.addPropertyChangeListener(l);
-    }
-
-    public void removePropertyChangeListener(PropertyChangeListener l) {
-        support.removePropertyChangeListener(l);
-    }
-
-
-    private String colorNames[] = { " ", "white", "lightGray", "gray", "darkGray",
-                        "black", "red", "pink", "orange",
-                        "yellow", "green", "magenta", "cyan",
-                        "blue"};
-    private Color colors[] = { null, Color.white, Color.lightGray, Color.gray, Color.darkGray,
-                        Color.black, Color.red, Color.pink, Color.orange,
-                        Color.yellow, Color.green, Color.magenta, Color.cyan,
-                        Color.blue};
-
-    private Canvas sample;
-    private int sampleHeight = 20;
-    private int sampleWidth = 40;
-    private int hPad = 5;
-    private int ourWidth;
-
-    private Color color;
-    private TextField text;
-    private Choice choser;
-
-    private PropertyChangeSupport support = new PropertyChangeSupport(this);
-}
diff --git a/ojluni/src/main/java/com/sun/beans/editors/DoubleEditor.java b/ojluni/src/main/java/com/sun/beans/editors/DoubleEditor.java
deleted file mode 100755
index 55d5a05..0000000
--- a/ojluni/src/main/java/com/sun/beans/editors/DoubleEditor.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (c) 1996, 2012, 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.beans.editors;
-
-/**
- * Property editor for a java builtin "double" type.
- *
- */
-
-import java.beans.*;
-
-public class DoubleEditor extends NumberEditor {
-
-    public void setAsText(String text) throws IllegalArgumentException {
-        setValue((text == null) ? null : Double.valueOf(text));
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/beans/editors/EnumEditor.java b/ojluni/src/main/java/com/sun/beans/editors/EnumEditor.java
deleted file mode 100755
index ee32685..0000000
--- a/ojluni/src/main/java/com/sun/beans/editors/EnumEditor.java
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * Copyright (c) 2006, 2012, 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.beans.editors;
-
-import java.awt.Component;
-import java.awt.Graphics;
-import java.awt.Rectangle;
-import java.beans.PropertyChangeEvent;
-import java.beans.PropertyChangeListener;
-import java.beans.PropertyEditor;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Property editor for java.lang.Enum subclasses.
- *
- * @see PropertyEditor
- *
- * @since 1.7
- *
- * @author Sergey A. Malenkov
- */
-public class EnumEditor implements PropertyEditor {
-    private final List<PropertyChangeListener> listeners = new ArrayList<PropertyChangeListener>();
-
-    private final Class type;
-    private final String[] tags;
-
-    private Object value;
-
-    public EnumEditor( Class type ) {
-        Object[] values = type.getEnumConstants();
-        if ( values == null ) {
-            throw new IllegalArgumentException( "Unsupported " + type );
-        }
-        this.type = type;
-        this.tags = new String[values.length];
-        for ( int i = 0; i < values.length; i++ ) {
-            this.tags[i] = ( ( Enum )values[i] ).name();
-        }
-    }
-
-    public Object getValue() {
-        return this.value;
-    }
-
-    public void setValue( Object value ) {
-        if ( ( value != null ) && !this.type.isInstance( value ) ) {
-            throw new IllegalArgumentException( "Unsupported value: " + value );
-        }
-        Object oldValue;
-        PropertyChangeListener[] listeners;
-        synchronized ( this.listeners ) {
-            oldValue = this.value;
-            this.value = value;
-
-            if ( ( value == null ) ? oldValue == null : value.equals( oldValue ) ) {
-                return; // do not fire event if value is not changed
-            }
-            int size = this.listeners.size();
-            if ( size == 0 ) {
-                return; // do not fire event if there are no any listener
-            }
-            listeners = this.listeners.toArray( new PropertyChangeListener[size] );
-        }
-        PropertyChangeEvent event = new PropertyChangeEvent( this, null, oldValue, value );
-        for ( PropertyChangeListener listener : listeners ) {
-            listener.propertyChange( event );
-        }
-    }
-
-    public String getAsText() {
-        return ( this.value != null )
-                ? ( ( Enum )this.value ).name()
-                : null;
-    }
-
-    public void setAsText( String text ) {
-        setValue( ( text != null )
-                ? Enum.valueOf( this.type, text )
-                : null );
-    }
-
-    public String[] getTags() {
-        return this.tags.clone();
-    }
-
-    public String getJavaInitializationString() {
-        String name = getAsText();
-        return ( name != null )
-                ? this.type.getName() + '.' + name
-                : "null";
-    }
-
-    public boolean isPaintable() {
-        return false;
-    }
-
-    public void paintValue( Graphics gfx, Rectangle box ) {
-    }
-
-    public boolean supportsCustomEditor() {
-        return false;
-    }
-
-    public Component getCustomEditor() {
-        return null;
-    }
-
-    public void addPropertyChangeListener( PropertyChangeListener listener ) {
-        synchronized ( this.listeners ) {
-            this.listeners.add( listener );
-        }
-    }
-
-    public void removePropertyChangeListener( PropertyChangeListener listener ) {
-        synchronized ( this.listeners ) {
-            this.listeners.remove( listener );
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/beans/editors/FloatEditor.java b/ojluni/src/main/java/com/sun/beans/editors/FloatEditor.java
deleted file mode 100755
index 4723c48..0000000
--- a/ojluni/src/main/java/com/sun/beans/editors/FloatEditor.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1996, 2012, 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.beans.editors;
-
-/**
- * Property editor for a java builtin "float" type.
- *
- */
-
-import java.beans.*;
-
-public class FloatEditor extends NumberEditor {
-
-    public String getJavaInitializationString() {
-        Object value = getValue();
-        return (value != null)
-                ? value + "F"
-                : "null";
-    }
-
-    public void setAsText(String text) throws IllegalArgumentException {
-        setValue((text == null) ? null : Float.valueOf(text));
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/beans/editors/FontEditor.java b/ojluni/src/main/java/com/sun/beans/editors/FontEditor.java
deleted file mode 100755
index 108ac5e..0000000
--- a/ojluni/src/main/java/com/sun/beans/editors/FontEditor.java
+++ /dev/null
@@ -1,219 +0,0 @@
-/*
- * Copyright (c) 1996, 2012, 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.beans.editors;
-
-import java.awt.*;
-import java.beans.*;
-
-public class FontEditor extends Panel implements java.beans.PropertyEditor {
-    private static final long serialVersionUID = 6732704486002715933L;
-
-    public FontEditor() {
-        setLayout(null);
-
-        toolkit = Toolkit.getDefaultToolkit();
-        fonts = toolkit.getFontList();
-
-        familyChoser = new Choice();
-        for (int i = 0; i < fonts.length; i++) {
-            familyChoser.addItem(fonts[i]);
-        }
-        add(familyChoser);
-        familyChoser.reshape(20, 5, 100, 30);
-
-        styleChoser = new Choice();
-        for (int i = 0; i < styleNames.length; i++) {
-            styleChoser.addItem(styleNames[i]);
-        }
-        add(styleChoser);
-        styleChoser.reshape(145, 5, 70, 30);
-
-        sizeChoser = new Choice();
-        for (int i = 0; i < pointSizes.length; i++) {
-            sizeChoser.addItem("" + pointSizes[i]);
-        }
-        add(sizeChoser);
-        sizeChoser.reshape(220, 5, 70, 30);
-
-        resize(300,40);
-    }
-
-
-    public Dimension preferredSize() {
-        return new Dimension(300, 40);
-    }
-
-    public void setValue(Object o) {
-        font = (Font) o;
-        if (this.font == null)
-            return;
-
-        changeFont(font);
-        // Update the current GUI choices.
-        for (int i = 0; i < fonts.length; i++) {
-            if (fonts[i].equals(font.getFamily())) {
-                familyChoser.select(i);
-                break;
-            }
-        }
-        for (int i = 0; i < styleNames.length; i++) {
-            if (font.getStyle() == styles[i]) {
-                styleChoser.select(i);
-                break;
-            }
-        }
-        for (int i = 0; i < pointSizes.length; i++) {
-            if (font.getSize() <= pointSizes[i]) {
-                sizeChoser.select(i);
-                break;
-            }
-        }
-    }
-
-    private void changeFont(Font f) {
-        font = f;
-        if (sample != null) {
-            remove(sample);
-        }
-        sample = new Label(sampleText);
-        sample.setFont(font);
-        add(sample);
-        Component p = getParent();
-        if (p != null) {
-            p.invalidate();
-            p.layout();
-        }
-        invalidate();
-        layout();
-        repaint();
-        support.firePropertyChange("", null, null);
-    }
-
-    public Object getValue() {
-        return (font);
-    }
-
-    public String getJavaInitializationString() {
-        if (this.font == null)
-            return "null";
-
-        return "new java.awt.Font(\"" + font.getName() + "\", " +
-                   font.getStyle() + ", " + font.getSize() + ")";
-    }
-
-    public boolean action(Event e, Object arg) {
-        String family = familyChoser.getSelectedItem();
-        int style = styles[styleChoser.getSelectedIndex()];
-        int size = pointSizes[sizeChoser.getSelectedIndex()];
-        try {
-            Font f = new Font(family, style, size);
-            changeFont(f);
-        } catch (Exception ex) {
-            System.err.println("Couldn't create font " + family + "-" +
-                        styleNames[style] + "-" + size);
-        }
-        return (false);
-    }
-
-
-    public boolean isPaintable() {
-        return true;
-    }
-
-    public void paintValue(java.awt.Graphics gfx, java.awt.Rectangle box) {
-        // Silent noop.
-        Font oldFont = gfx.getFont();
-        gfx.setFont(font);
-        FontMetrics fm = gfx.getFontMetrics();
-        int vpad = (box.height - fm.getAscent())/2;
-        gfx.drawString(sampleText, 0, box.height-vpad);
-        gfx.setFont(oldFont);
-    }
-
-    public String getAsText() {
-        if (this.font == null) {
-            return null;
-        }
-        StringBuilder sb = new StringBuilder();
-        sb.append(this.font.getName());
-        sb.append(' ');
-
-        boolean b = this.font.isBold();
-        if (b) {
-            sb.append("BOLD");
-        }
-        boolean i = this.font.isItalic();
-        if (i) {
-            sb.append("ITALIC");
-        }
-        if (b || i) {
-            sb.append(' ');
-        }
-        sb.append(this.font.getSize());
-        return sb.toString();
-    }
-
-    public void setAsText(String text) throws IllegalArgumentException {
-        setValue((text == null) ? null : Font.decode(text));
-    }
-
-    public String[] getTags() {
-        return null;
-    }
-
-    public java.awt.Component getCustomEditor() {
-        return this;
-    }
-
-    public boolean supportsCustomEditor() {
-        return true;
-    }
-
-    public void addPropertyChangeListener(PropertyChangeListener l) {
-        support.addPropertyChangeListener(l);
-    }
-
-    public void removePropertyChangeListener(PropertyChangeListener l) {
-        support.removePropertyChangeListener(l);
-    }
-
-    private Font font;
-    private Toolkit toolkit;
-    private String sampleText = "Abcde...";
-
-    private Label sample;
-    private Choice familyChoser;
-    private Choice styleChoser;
-    private Choice sizeChoser;
-
-    private String fonts[];
-    private String[] styleNames = { "plain", "bold", "italic" };
-    private int[] styles = { Font.PLAIN, Font.BOLD, Font.ITALIC };
-    private int[] pointSizes = { 3, 5, 8, 10, 12, 14, 18, 24, 36, 48 };
-
-    private PropertyChangeSupport support = new PropertyChangeSupport(this);
-
-}
diff --git a/ojluni/src/main/java/com/sun/beans/editors/IntegerEditor.java b/ojluni/src/main/java/com/sun/beans/editors/IntegerEditor.java
deleted file mode 100755
index 066b714..0000000
--- a/ojluni/src/main/java/com/sun/beans/editors/IntegerEditor.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (c) 2006, 2012, 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.beans.editors;
-
-/**
- * Property editor for a java builtin "int" type.
- *
- */
-
-import java.beans.*;
-
-public class IntegerEditor extends NumberEditor {
-
-
-    public void setAsText(String text) throws IllegalArgumentException {
-        setValue((text == null) ? null : Integer.decode(text));
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/beans/editors/LongEditor.java b/ojluni/src/main/java/com/sun/beans/editors/LongEditor.java
deleted file mode 100755
index 3a8efbb..0000000
--- a/ojluni/src/main/java/com/sun/beans/editors/LongEditor.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1996, 2012, 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.beans.editors;
-
-/**
- * Property editor for a java builtin "long" type.
- *
- */
-
-import java.beans.*;
-
-public class LongEditor extends NumberEditor {
-
-    public String getJavaInitializationString() {
-        Object value = getValue();
-        return (value != null)
-                ? value + "L"
-                : "null";
-    }
-
-    public void setAsText(String text) throws IllegalArgumentException {
-        setValue((text == null) ? null : Long.decode(text));
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/beans/editors/NumberEditor.java b/ojluni/src/main/java/com/sun/beans/editors/NumberEditor.java
deleted file mode 100755
index 3941e2c..0000000
--- a/ojluni/src/main/java/com/sun/beans/editors/NumberEditor.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (c) 1996, 2012, 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.beans.editors;
-
-/**
- * Abstract Property editor for a java builtin number types.
- *
- */
-
-import java.beans.*;
-
-abstract public class NumberEditor extends PropertyEditorSupport {
-
-    public String getJavaInitializationString() {
-        Object value = getValue();
-        return (value != null)
-                ? value.toString()
-                : "null";
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/beans/editors/ShortEditor.java b/ojluni/src/main/java/com/sun/beans/editors/ShortEditor.java
deleted file mode 100755
index cf82eef..0000000
--- a/ojluni/src/main/java/com/sun/beans/editors/ShortEditor.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (c) 1996, 2012, 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.beans.editors;
-
-/**
- * Property editor for a java builtin "short" type.
- *
- */
-
-import java.beans.*;
-
-public class ShortEditor extends NumberEditor {
-
-    public String getJavaInitializationString() {
-        Object value = getValue();
-        return (value != null)
-                ? "((short)" + value + ")"
-                : "null";
-    }
-
-    public void setAsText(String text) throws IllegalArgumentException {
-        setValue((text == null) ? null : Short.decode(text));
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/beans/editors/StringEditor.java b/ojluni/src/main/java/com/sun/beans/editors/StringEditor.java
deleted file mode 100755
index 2f1cde4..0000000
--- a/ojluni/src/main/java/com/sun/beans/editors/StringEditor.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright (c) 1996, 2012, 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.beans.editors;
-
-import java.beans.*;
-
-public class StringEditor extends PropertyEditorSupport {
-
-    public String getJavaInitializationString() {
-        Object value = getValue();
-        if (value == null)
-            return "null";
-
-        String str = value.toString();
-        int length = str.length();
-        StringBuilder sb = new StringBuilder(length + 2);
-        sb.append('"');
-        for (int i = 0; i < length; i++) {
-            char ch = str.charAt(i);
-            switch (ch) {
-            case '\b': sb.append("\\b");  break;
-            case '\t': sb.append("\\t");  break;
-            case '\n': sb.append("\\n");  break;
-            case '\f': sb.append("\\f");  break;
-            case '\r': sb.append("\\r");  break;
-            case '\"': sb.append("\\\""); break;
-            case '\\': sb.append("\\\\"); break;
-            default:
-                if ((ch < ' ') || (ch > '~')) {
-                    sb.append("\\u");
-                    String hex = Integer.toHexString((int) ch);
-                    for (int len = hex.length(); len < 4; len++) {
-                        sb.append('0');
-                    }
-                    sb.append(hex);
-                } else {
-                    sb.append(ch);
-                }
-                break;
-            }
-        }
-        sb.append('"');
-        return sb.toString();
-    }
-
-    public void setAsText(String text) {
-        setValue(text);
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/beans/finder/AbstractFinder.java b/ojluni/src/main/java/com/sun/beans/finder/AbstractFinder.java
deleted file mode 100755
index c1868ba..0000000
--- a/ojluni/src/main/java/com/sun/beans/finder/AbstractFinder.java
+++ /dev/null
@@ -1,228 +0,0 @@
-/*
- * Copyright (c) 2008, 2013, 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.beans.finder;
-
-import java.lang.reflect.Member;
-import java.lang.reflect.Modifier;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * This abstract class provides functionality
- * to find a public method or constructor
- * with specified parameter types.
- * It supports a variable number of parameters.
- *
- * @since 1.7
- *
- * @author Sergey A. Malenkov
- */
-abstract class AbstractFinder<T extends Member> {
-    private final Class<?>[] args;
-
-    /**
-     * Creates finder for array of classes of arguments.
-     * If a particular element of array equals {@code null},
-     * than the appropriate pair of classes
-     * does not take into consideration.
-     *
-     * @param args  array of classes of arguments
-     */
-    protected AbstractFinder(Class<?>[] args) {
-        this.args = args;
-    }
-
-    /**
-     * Returns an array of {@code Class} objects
-     * that represent the formal parameter types of the method.
-     * Returns an empty array if the method takes no parameters.
-     *
-     * @param method  the object that represents method
-     * @return the parameter types of the method
-     */
-    protected abstract Class<?>[] getParameters(T method);
-
-    /**
-     * Returns {@code true} if and only if the method
-     * was declared to take a variable number of arguments.
-     *
-     * @param method  the object that represents method
-     * @return {@code true} if the method was declared
-     *         to take a variable number of arguments;
-     *         {@code false} otherwise
-     */
-    protected abstract boolean isVarArgs(T method);
-
-    /**
-     * Checks validness of the method.
-     * At least the valid method should be public.
-     *
-     * @param method  the object that represents method
-     * @return {@code true} if the method is valid,
-     *         {@code false} otherwise
-     */
-    protected boolean isValid(T method) {
-        return Modifier.isPublic(method.getModifiers());
-    }
-
-    /**
-     * Performs a search in the {@code methods} array.
-     * The one method is selected from the array of the valid methods.
-     * The list of parameters of the selected method shows
-     * the best correlation with the list of arguments
-     * specified at class initialization.
-     * If more than one method is both accessible and applicable
-     * to a method invocation, it is necessary to choose one
-     * to provide the descriptor for the run-time method dispatch.
-     * The most specific method should be chosen.
-     *
-     * @param methods  the array of methods to search within
-     * @return the object that represents found method
-     * @throws NoSuchMethodException if no method was found or several
-     *                               methods meet the search criteria
-     * @see #isAssignable
-     */
-    final T find(T[] methods) throws NoSuchMethodException {
-        Map<T, Class<?>[]> map = new HashMap<T, Class<?>[]>();
-
-        T oldMethod = null;
-        Class<?>[] oldParams = null;
-        boolean ambiguous = false;
-
-        for (T newMethod : methods) {
-            if (isValid(newMethod)) {
-                Class<?>[] newParams = getParameters(newMethod);
-                if (newParams.length == this.args.length) {
-                    PrimitiveWrapperMap.replacePrimitivesWithWrappers(newParams);
-                    if (isAssignable(newParams, this.args)) {
-                        if (oldMethod == null) {
-                            oldMethod = newMethod;
-                            oldParams = newParams;
-                        } else {
-                            boolean useNew = isAssignable(oldParams, newParams);
-                            boolean useOld = isAssignable(newParams, oldParams);
-
-                            if (useOld && useNew) {
-                                // only if parameters are equal
-                                useNew = !newMethod.isSynthetic();
-                                useOld = !oldMethod.isSynthetic();
-                            }
-                            if (useOld == useNew) {
-                                ambiguous = true;
-                            } else if (useNew) {
-                                oldMethod = newMethod;
-                                oldParams = newParams;
-                                ambiguous = false;
-                            }
-                        }
-                    }
-                }
-                if (isVarArgs(newMethod)) {
-                    int length = newParams.length - 1;
-                    if (length <= this.args.length) {
-                        Class<?>[] array = new Class<?>[this.args.length];
-                        System.arraycopy(newParams, 0, array, 0, length);
-                        if (length < this.args.length) {
-                            Class<?> type = newParams[length].getComponentType();
-                            if (type.isPrimitive()) {
-                                type = PrimitiveWrapperMap.getType(type.getName());
-                            }
-                            for (int i = length; i < this.args.length; i++) {
-                                array[i] = type;
-                            }
-                        }
-                        map.put(newMethod, array);
-                    }
-                }
-            }
-        }
-        for (T newMethod : methods) {
-            Class<?>[] newParams = map.get(newMethod);
-            if (newParams != null) {
-                if (isAssignable(newParams, this.args)) {
-                    if (oldMethod == null) {
-                        oldMethod = newMethod;
-                        oldParams = newParams;
-                    } else {
-                        boolean useNew = isAssignable(oldParams, newParams);
-                        boolean useOld = isAssignable(newParams, oldParams);
-
-                        if (useOld && useNew) {
-                            // only if parameters are equal
-                            useNew = !newMethod.isSynthetic();
-                            useOld = !oldMethod.isSynthetic();
-                        }
-                        if (useOld == useNew) {
-                            if (oldParams == map.get(oldMethod)) {
-                                ambiguous = true;
-                            }
-                        } else if (useNew) {
-                            oldMethod = newMethod;
-                            oldParams = newParams;
-                            ambiguous = false;
-                        }
-                    }
-                }
-            }
-        }
-
-        if (ambiguous) {
-            throw new NoSuchMethodException("Ambiguous methods are found");
-        }
-        if (oldMethod == null) {
-            throw new NoSuchMethodException("Method is not found");
-        }
-        return oldMethod;
-    }
-
-    /**
-     * Determines if every class in {@code min} array is either the same as,
-     * or is a superclass of, the corresponding class in {@code max} array.
-     * The length of every array must equal the number of arguments.
-     * This comparison is performed in the {@link #find} method
-     * before the first call of the isAssignable method.
-     * If an argument equals {@code null}
-     * the appropriate pair of classes does not take into consideration.
-     *
-     * @param min  the array of classes to be checked
-     * @param max  the array of classes that is used to check
-     * @return {@code true} if all classes in {@code min} array
-     *         are assignable from corresponding classes in {@code max} array,
-     *         {@code false} otherwise
-     *
-     * @see Class#isAssignableFrom
-     */
-    private boolean isAssignable(Class<?>[] min, Class<?>[] max) {
-        for (int i = 0; i < this.args.length; i++) {
-            if (null != this.args[i]) {
-                if (!min[i].isAssignableFrom(max[i])) {
-                    return false;
-                }
-            }
-        }
-        return true;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/beans/finder/BeanInfoFinder.java b/ojluni/src/main/java/com/sun/beans/finder/BeanInfoFinder.java
deleted file mode 100755
index 28af1a4..0000000
--- a/ojluni/src/main/java/com/sun/beans/finder/BeanInfoFinder.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Copyright (c) 2009, 2012, 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.beans.finder;
-
-import java.beans.BeanDescriptor;
-import java.beans.BeanInfo;
-import java.beans.MethodDescriptor;
-import java.beans.PropertyDescriptor;
-import java.lang.reflect.Method;
-
-/**
- * This is utility class that provides functionality
- * to find a {@link BeanInfo} for a JavaBean specified by its type.
- *
- * @since 1.7
- *
- * @author Sergey A. Malenkov
- */
-public final class BeanInfoFinder
-        extends InstanceFinder<BeanInfo> {
-
-    private static final String DEFAULT = "sun.beans.infos";
-    private static final String DEFAULT_NEW = "com.sun.beans.infos";
-
-    public BeanInfoFinder() {
-        super(BeanInfo.class, true, "BeanInfo", DEFAULT);
-    }
-
-    private static boolean isValid(Class<?> type, Method method) {
-        return (method != null) && method.getDeclaringClass().isAssignableFrom(type);
-    }
-
-    @Override
-    protected BeanInfo instantiate(Class<?> type, String prefix, String name) {
-        if (DEFAULT.equals(prefix)) {
-            prefix = DEFAULT_NEW;
-        }
-        // this optimization will only use the BeanInfo search path
-        // if is has changed from the original
-        // or trying to get the ComponentBeanInfo
-        BeanInfo info = !DEFAULT_NEW.equals(prefix) || "ComponentBeanInfo".equals(name)
-                ? super.instantiate(type, prefix, name)
-                : null;
-
-        if (info != null) {
-            // make sure that the returned BeanInfo matches the class
-            BeanDescriptor bd = info.getBeanDescriptor();
-            if (bd != null) {
-                if (type.equals(bd.getBeanClass())) {
-                    return info;
-                }
-            }
-            else {
-                PropertyDescriptor[] pds = info.getPropertyDescriptors();
-                if (pds != null) {
-                    for (PropertyDescriptor pd : pds) {
-                        Method method = pd.getReadMethod();
-                        if (method == null) {
-                            method = pd.getWriteMethod();
-                        }
-                        if (isValid(type, method)) {
-                            return info;
-                        }
-                    }
-                }
-                else {
-                    MethodDescriptor[] mds = info.getMethodDescriptors();
-                    if (mds != null) {
-                        for (MethodDescriptor md : mds) {
-                            if (isValid(type, md.getMethod())) {
-                                return info;
-                            }
-                        }
-                    }
-                }
-            }
-        }
-        return null;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/beans/finder/ClassFinder.java b/ojluni/src/main/java/com/sun/beans/finder/ClassFinder.java
deleted file mode 100755
index 9d53235..0000000
--- a/ojluni/src/main/java/com/sun/beans/finder/ClassFinder.java
+++ /dev/null
@@ -1,180 +0,0 @@
-/*
- * Copyright (c) 2006, 2012, 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.beans.finder;
-
-import static sun.reflect.misc.ReflectUtil.checkPackageAccess;
-
-/**
- * This is utility class that provides {@code static} methods
- * to find a class with the specified name using the specified class loader.
- *
- * @since 1.7
- *
- * @author Sergey A. Malenkov
- */
-public final class ClassFinder {
-
-    /**
-     * Returns the {@code Class} object associated
-     * with the class or interface with the given string name,
-     * using the default class loader.
-     * <p>
-     * The {@code name} can denote an array class
-     * (see {@link Class#getName} for details).
-     *
-     * @param name  fully qualified name of the desired class
-     * @return class object representing the desired class
-     *
-     * @throws ClassNotFoundException  if the class cannot be located
-     *                                 by the specified class loader
-     *
-     * @see Class#forName(String)
-     * @see Class#forName(String,boolean,ClassLoader)
-     * @see ClassLoader#getSystemClassLoader()
-     * @see Thread#getContextClassLoader()
-     */
-    public static Class<?> findClass(String name) throws ClassNotFoundException {
-        checkPackageAccess(name);
-        try {
-            ClassLoader loader = Thread.currentThread().getContextClassLoader();
-            if (loader == null) {
-                // can be null in IE (see 6204697)
-                loader = ClassLoader.getSystemClassLoader();
-            }
-            if (loader != null) {
-                return Class.forName(name, false, loader);
-            }
-
-        } catch (ClassNotFoundException exception) {
-            // use current class loader instead
-        } catch (SecurityException exception) {
-            // use current class loader instead
-        }
-        return Class.forName(name);
-    }
-
-    /**
-     * Returns the {@code Class} object associated with
-     * the class or interface with the given string name,
-     * using the given class loader.
-     * <p>
-     * The {@code name} can denote an array class
-     * (see {@link Class#getName} for details).
-     * <p>
-     * If the parameter {@code loader} is null,
-     * the class is loaded through the default class loader.
-     *
-     * @param name    fully qualified name of the desired class
-     * @param loader  class loader from which the class must be loaded
-     * @return class object representing the desired class
-     *
-     * @throws ClassNotFoundException  if the class cannot be located
-     *                                 by the specified class loader
-     *
-     * @see #findClass(String,ClassLoader)
-     * @see Class#forName(String,boolean,ClassLoader)
-     */
-    public static Class<?> findClass(String name, ClassLoader loader) throws ClassNotFoundException {
-        checkPackageAccess(name);
-        if (loader != null) {
-            try {
-                return Class.forName(name, false, loader);
-            } catch (ClassNotFoundException exception) {
-                // use default class loader instead
-            } catch (SecurityException exception) {
-                // use default class loader instead
-            }
-        }
-        return findClass(name);
-    }
-
-    /**
-     * Returns the {@code Class} object associated
-     * with the class or interface with the given string name,
-     * using the default class loader.
-     * <p>
-     * The {@code name} can denote an array class
-     * (see {@link Class#getName} for details).
-     * <p>
-     * This method can be used to obtain
-     * any of the {@code Class} objects
-     * representing {@code void} or primitive Java types:
-     * {@code char}, {@code byte}, {@code short},
-     * {@code int}, {@code long}, {@code float},
-     * {@code double} and {@code boolean}.
-     *
-     * @param name  fully qualified name of the desired class
-     * @return class object representing the desired class
-     *
-     * @throws ClassNotFoundException  if the class cannot be located
-     *                                 by the specified class loader
-     *
-     * @see #resolveClass(String,ClassLoader)
-     */
-    public static Class<?> resolveClass(String name) throws ClassNotFoundException {
-        return resolveClass(name, null);
-    }
-
-    /**
-     * Returns the {@code Class} object associated with
-     * the class or interface with the given string name,
-     * using the given class loader.
-     * <p>
-     * The {@code name} can denote an array class
-     * (see {@link Class#getName} for details).
-     * <p>
-     * If the parameter {@code loader} is null,
-     * the class is loaded through the default class loader.
-     * <p>
-     * This method can be used to obtain
-     * any of the {@code Class} objects
-     * representing {@code void} or primitive Java types:
-     * {@code char}, {@code byte}, {@code short},
-     * {@code int}, {@code long}, {@code float},
-     * {@code double} and {@code boolean}.
-     *
-     * @param name    fully qualified name of the desired class
-     * @param loader  class loader from which the class must be loaded
-     * @return class object representing the desired class
-     *
-     * @throws ClassNotFoundException  if the class cannot be located
-     *                                 by the specified class loader
-     *
-     * @see #findClass(String,ClassLoader)
-     * @see PrimitiveTypeMap#getType(String)
-     */
-    public static Class<?> resolveClass(String name, ClassLoader loader) throws ClassNotFoundException {
-        Class<?> type = PrimitiveTypeMap.getType(name);
-        return (type == null)
-                ? findClass(name, loader)
-                : type;
-    }
-
-    /**
-     * Disable instantiation.
-     */
-    private ClassFinder() {
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/beans/finder/ConstructorFinder.java b/ojluni/src/main/java/com/sun/beans/finder/ConstructorFinder.java
deleted file mode 100755
index 9aed4c9..0000000
--- a/ojluni/src/main/java/com/sun/beans/finder/ConstructorFinder.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Copyright (c) 2008, 2013, 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.beans.finder;
-
-import com.sun.beans.WeakCache;
-
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Modifier;
-
-import static sun.reflect.misc.ReflectUtil.isPackageAccessible;
-
-/**
- * This utility class provides {@code static} methods
- * to find a public constructor with specified parameter types
- * in specified class.
- *
- * @since 1.7
- *
- * @author Sergey A. Malenkov
- */
-public final class ConstructorFinder extends AbstractFinder<Constructor<?>> {
-    private static final WeakCache<Signature, Constructor<?>> CACHE = new WeakCache<Signature, Constructor<?>>();
-
-    /**
-     * Finds public constructor
-     * that is declared in public class.
-     *
-     * @param type  the class that can have constructor
-     * @param args  parameter types that is used to find constructor
-     * @return object that represents found constructor
-     * @throws NoSuchMethodException if constructor could not be found
-     *                               or some constructors are found
-     */
-    public static Constructor<?> findConstructor(Class<?> type, Class<?>...args) throws NoSuchMethodException {
-        if (type.isPrimitive()) {
-            throw new NoSuchMethodException("Primitive wrapper does not contain constructors");
-        }
-        if (type.isInterface()) {
-            throw new NoSuchMethodException("Interface does not contain constructors");
-        }
-        if (Modifier.isAbstract(type.getModifiers())) {
-            throw new NoSuchMethodException("Abstract class cannot be instantiated");
-        }
-        if (!Modifier.isPublic(type.getModifiers()) || !isPackageAccessible(type)) {
-            throw new NoSuchMethodException("Class is not accessible");
-        }
-        PrimitiveWrapperMap.replacePrimitivesWithWrappers(args);
-        Signature signature = new Signature(type, args);
-
-        Constructor<?> constructor = CACHE.get(signature);
-        if (constructor != null) {
-            return constructor;
-        }
-        constructor = new ConstructorFinder(args).find(type.getConstructors());
-        CACHE.put(signature, constructor);
-        return constructor;
-    }
-
-    /**
-     * Creates constructor finder with specified array of parameter types.
-     *
-     * @param args  the array of parameter types
-     */
-    private ConstructorFinder(Class<?>[] args) {
-        super(args);
-    }
-
-    /**
-     * Returns an array of {@code Class} objects
-     * that represent the formal parameter types of the constructor.
-     * Returns an empty array if the constructor takes no parameters.
-     *
-     * @param constructor  the object that represents constructor
-     * @return the parameter types of the constructor
-     */
-    @Override
-    protected Class<?>[] getParameters(Constructor<?> constructor) {
-        return constructor.getParameterTypes();
-    }
-
-    /**
-     * Returns {@code true} if and only if the constructor
-     * was declared to take a variable number of arguments.
-     *
-     * @param constructor  the object that represents constructor
-     * @return {@code true} if the constructor was declared
-     *         to take a variable number of arguments;
-     *         {@code false} otherwise
-     */
-    @Override
-    protected boolean isVarArgs(Constructor<?> constructor) {
-        return constructor.isVarArgs();
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/beans/finder/FieldFinder.java b/ojluni/src/main/java/com/sun/beans/finder/FieldFinder.java
deleted file mode 100755
index eb8b5bb..0000000
--- a/ojluni/src/main/java/com/sun/beans/finder/FieldFinder.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Copyright (c) 2008, 2012, 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.beans.finder;
-
-import java.lang.reflect.Field;
-import java.lang.reflect.Modifier;
-
-import static sun.reflect.misc.ReflectUtil.isPackageAccessible;
-
-/**
- * This utility class provides {@code static} methods
- * to find a public field with specified name
- * in specified class.
- *
- * @since 1.7
- *
- * @author Sergey A. Malenkov
- */
-public final class FieldFinder {
-
-    /**
-     * Finds public field (static or non-static)
-     * that is declared in public class.
-     *
-     * @param type  the class that can have field
-     * @param name  the name of field to find
-     * @return object that represents found field
-     * @throws NoSuchFieldException if field is not found
-     * @see Class#getField
-     */
-    public static Field findField(Class<?> type, String name) throws NoSuchFieldException {
-        if (name == null) {
-            throw new IllegalArgumentException("Field name is not set");
-        }
-        Field field = type.getField(name);
-        if (!Modifier.isPublic(field.getModifiers())) {
-            throw new NoSuchFieldException("Field '" + name + "' is not public");
-        }
-        type = field.getDeclaringClass();
-        if (!Modifier.isPublic(type.getModifiers()) || !isPackageAccessible(type)) {
-            throw new NoSuchFieldException("Field '" + name + "' is not accessible");
-        }
-        return field;
-    }
-
-    /**
-     * Finds public non-static field
-     * that is declared in public class.
-     *
-     * @param type  the class that can have field
-     * @param name  the name of field to find
-     * @return object that represents found field
-     * @throws NoSuchFieldException if field is not found
-     * @see Class#getField
-     */
-    public static Field findInstanceField(Class<?> type, String name) throws NoSuchFieldException {
-        Field field = findField(type, name);
-        if (Modifier.isStatic(field.getModifiers())) {
-            throw new NoSuchFieldException("Field '" + name + "' is static");
-        }
-        return field;
-    }
-
-    /**
-     * Finds public static field
-     * that is declared in public class.
-     *
-     * @param type  the class that can have field
-     * @param name  the name of field to find
-     * @return object that represents found field
-     * @throws NoSuchFieldException if field is not found
-     * @see Class#getField
-     */
-    public static Field findStaticField(Class<?> type, String name) throws NoSuchFieldException {
-        Field field = findField(type, name);
-        if (!Modifier.isStatic(field.getModifiers())) {
-            throw new NoSuchFieldException("Field '" + name + "' is not static");
-        }
-        return field;
-    }
-
-    /**
-     * Disable instantiation.
-     */
-    private FieldFinder() {
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/beans/finder/InstanceFinder.java b/ojluni/src/main/java/com/sun/beans/finder/InstanceFinder.java
deleted file mode 100755
index 5842af2..0000000
--- a/ojluni/src/main/java/com/sun/beans/finder/InstanceFinder.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Copyright (c) 2009, 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
- * 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.beans.finder;
-
-/**
- * This is utility class that provides basic functionality
- * to find an auxiliary class for a JavaBean specified by its type.
- *
- * @since 1.7
- *
- * @author Sergey A. Malenkov
- */
-class InstanceFinder<T> {
-
-    private static final String[] EMPTY = { };
-
-    private final Class<? extends T> type;
-    private final boolean allow;
-    private final String suffix;
-    private volatile String[] packages;
-
-    InstanceFinder(Class<? extends T> type, boolean allow, String suffix, String... packages) {
-        this.type = type;
-        this.allow = allow;
-        this.suffix = suffix;
-        this.packages = packages.clone();
-    }
-
-    public String[] getPackages() {
-        return this.packages.clone();
-    }
-
-    public void setPackages(String... packages) {
-        this.packages = (packages != null) && (packages.length > 0)
-                ? packages.clone()
-                : EMPTY;
-    }
-
-    public T find(Class<?> type) {
-        if (type == null) {
-            return null;
-        }
-        String name = type.getName() + this.suffix;
-        T object = instantiate(type, name);
-        if (object != null) {
-            return object;
-        }
-        if (this.allow) {
-            object = instantiate(type, null);
-            if (object != null) {
-                return object;
-            }
-        }
-        int index = name.lastIndexOf('.') + 1;
-        if (index > 0) {
-            name = name.substring(index);
-        }
-        for (String prefix : this.packages) {
-            object = instantiate(type, prefix, name);
-            if (object != null) {
-                return object;
-            }
-        }
-        return null;
-    }
-
-    protected T instantiate(Class<?> type, String name) {
-        if (type != null) {
-            try {
-                if (name != null) {
-                    type = ClassFinder.findClass(name, type.getClassLoader());
-                }
-                if (this.type.isAssignableFrom(type)) {
-                    return (T) type.newInstance();
-                }
-            }
-            catch (Exception exception) {
-                // ignore any exceptions
-            }
-        }
-        return null;
-    }
-
-    protected T instantiate(Class<?> type, String prefix, String name) {
-        return instantiate(type, prefix + '.' + name);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/beans/finder/MethodFinder.java b/ojluni/src/main/java/com/sun/beans/finder/MethodFinder.java
deleted file mode 100755
index ec6b2b2..0000000
--- a/ojluni/src/main/java/com/sun/beans/finder/MethodFinder.java
+++ /dev/null
@@ -1,238 +0,0 @@
-/*
- * Copyright (c) 2008, 2013, 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.beans.finder;
-
-import com.sun.beans.TypeResolver;
-import com.sun.beans.WeakCache;
-
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.lang.reflect.ParameterizedType;
-import java.lang.reflect.Type;
-import java.util.Arrays;
-
-import static sun.reflect.misc.ReflectUtil.isPackageAccessible;
-
-/**
- * This utility class provides {@code static} methods
- * to find a public method with specified name and parameter types
- * in specified class.
- *
- * @since 1.7
- *
- * @author Sergey A. Malenkov
- */
-public final class MethodFinder extends AbstractFinder<Method> {
-    private static final WeakCache<Signature, Method> CACHE = new WeakCache<Signature, Method>();
-
-    /**
-     * Finds public method (static or non-static)
-     * that is accessible from public class.
-     *
-     * @param type  the class that can have method
-     * @param name  the name of method to find
-     * @param args  parameter types that is used to find method
-     * @return object that represents found method
-     * @throws NoSuchMethodException if method could not be found
-     *                               or some methods are found
-     */
-    public static Method findMethod(Class<?> type, String name, Class<?>...args) throws NoSuchMethodException {
-        if (name == null) {
-            throw new IllegalArgumentException("Method name is not set");
-        }
-        PrimitiveWrapperMap.replacePrimitivesWithWrappers(args);
-        Signature signature = new Signature(type, name, args);
-
-        Method method = CACHE.get(signature);
-        boolean cached = method != null;
-        if (cached && isPackageAccessible(method.getDeclaringClass())) {
-            return method;
-        }
-        method = findAccessibleMethod(new MethodFinder(name, args).find(type.getMethods()));
-        if (!cached) {
-            CACHE.put(signature, method);
-        }
-        return method;
-    }
-
-    /**
-     * Finds public non-static method
-     * that is accessible from public class.
-     *
-     * @param type  the class that can have method
-     * @param name  the name of method to find
-     * @param args  parameter types that is used to find method
-     * @return object that represents found method
-     * @throws NoSuchMethodException if method could not be found
-     *                               or some methods are found
-     */
-    public static Method findInstanceMethod(Class<?> type, String name, Class<?>... args) throws NoSuchMethodException {
-        Method method = findMethod(type, name, args);
-        if (Modifier.isStatic(method.getModifiers())) {
-            throw new NoSuchMethodException("Method '" + name + "' is static");
-        }
-        return method;
-    }
-
-    /**
-     * Finds public static method
-     * that is accessible from public class.
-     *
-     * @param type  the class that can have method
-     * @param name  the name of method to find
-     * @param args  parameter types that is used to find method
-     * @return object that represents found method
-     * @throws NoSuchMethodException if method could not be found
-     *                               or some methods are found
-     */
-    public static Method findStaticMethod(Class<?> type, String name, Class<?>...args) throws NoSuchMethodException {
-        Method method = findMethod(type, name, args);
-        if (!Modifier.isStatic(method.getModifiers())) {
-            throw new NoSuchMethodException("Method '" + name + "' is not static");
-        }
-        return method;
-    }
-
-    /**
-     * Finds method that is accessible from public class or interface through class hierarchy.
-     *
-     * @param method  object that represents found method
-     * @return object that represents accessible method
-     * @throws NoSuchMethodException if method is not accessible or is not found
-     *                               in specified superclass or interface
-     */
-    public static Method findAccessibleMethod(Method method) throws NoSuchMethodException {
-        Class<?> type = method.getDeclaringClass();
-        if (Modifier.isPublic(type.getModifiers()) && isPackageAccessible(type)) {
-            return method;
-        }
-        if (Modifier.isStatic(method.getModifiers())) {
-            throw new NoSuchMethodException("Method '" + method.getName() + "' is not accessible");
-        }
-        for (Type generic : type.getGenericInterfaces()) {
-            try {
-                return findAccessibleMethod(method, generic);
-            }
-            catch (NoSuchMethodException exception) {
-                // try to find in superclass or another interface
-            }
-        }
-        return findAccessibleMethod(method, type.getGenericSuperclass());
-    }
-
-    /**
-     * Finds method that accessible from specified class.
-     *
-     * @param method  object that represents found method
-     * @param generic generic type that is used to find accessible method
-     * @return object that represents accessible method
-     * @throws NoSuchMethodException if method is not accessible or is not found
-     *                               in specified superclass or interface
-     */
-    private static Method findAccessibleMethod(Method method, Type generic) throws NoSuchMethodException {
-        String name = method.getName();
-        Class<?>[] params = method.getParameterTypes();
-        if (generic instanceof Class) {
-            Class<?> type = (Class<?>) generic;
-            return findAccessibleMethod(type.getMethod(name, params));
-        }
-        if (generic instanceof ParameterizedType) {
-            ParameterizedType pt = (ParameterizedType) generic;
-            Class<?> type = (Class<?>) pt.getRawType();
-            for (Method m : type.getMethods()) {
-                if (m.getName().equals(name)) {
-                    Class<?>[] pts = m.getParameterTypes();
-                    if (pts.length == params.length) {
-                        if (Arrays.equals(params, pts)) {
-                            return findAccessibleMethod(m);
-                        }
-                        Type[] gpts = m.getGenericParameterTypes();
-                        if (params.length == gpts.length) {
-                            if (Arrays.equals(params, TypeResolver.erase(TypeResolver.resolve(pt, gpts)))) {
-                                return findAccessibleMethod(m);
-                            }
-                        }
-                    }
-                }
-            }
-        }
-        throw new NoSuchMethodException("Method '" + name + "' is not accessible");
-    }
-
-
-    private final String name;
-
-    /**
-     * Creates method finder with specified array of parameter types.
-     *
-     * @param name  the name of method to find
-     * @param args  the array of parameter types
-     */
-    private MethodFinder(String name, Class<?>[] args) {
-        super(args);
-        this.name = name;
-    }
-
-    /**
-     * Returns an array of {@code Class} objects
-     * that represent the formal parameter types of the method.
-     * Returns an empty array if the method takes no parameters.
-     *
-     * @param method  the object that represents method
-     * @return the parameter types of the method
-     */
-    @Override
-    protected Class<?>[] getParameters(Method method) {
-        return method.getParameterTypes();
-    }
-
-    /**
-     * Returns {@code true} if and only if the method
-     * was declared to take a variable number of arguments.
-     *
-     * @param method  the object that represents method
-     * @return {@code true} if the method was declared
-     *         to take a variable number of arguments;
-     *         {@code false} otherwise
-     */
-    @Override
-    protected boolean isVarArgs(Method method) {
-        return method.isVarArgs();
-    }
-
-    /**
-     * Checks validness of the method.
-     * The valid method should be public and
-     * should have the specified name.
-     *
-     * @param method  the object that represents method
-     * @return {@code true} if the method is valid,
-     *         {@code false} otherwise
-     */
-    @Override
-    protected boolean isValid(Method method) {
-        return super.isValid(method) && method.getName().equals(this.name);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/beans/finder/PersistenceDelegateFinder.java b/ojluni/src/main/java/com/sun/beans/finder/PersistenceDelegateFinder.java
deleted file mode 100755
index b29bbc9..0000000
--- a/ojluni/src/main/java/com/sun/beans/finder/PersistenceDelegateFinder.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (c) 2009, 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
- * 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.beans.finder;
-
-import java.beans.PersistenceDelegate;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * This is utility class that provides functionality
- * to find a {@link PersistenceDelegate} for a JavaBean specified by its type.
- *
- * @since 1.7
- *
- * @author Sergey A. Malenkov
- */
-public final class PersistenceDelegateFinder
-        extends InstanceFinder<PersistenceDelegate> {
-
-    private final Map<Class<?>, PersistenceDelegate> registry;
-
-    public PersistenceDelegateFinder() {
-        super(PersistenceDelegate.class, true, "PersistenceDelegate");
-        this.registry = new HashMap<Class<?>, PersistenceDelegate>();
-    }
-
-    public void register(Class<?> type, PersistenceDelegate delegate) {
-        synchronized (this.registry) {
-            if (delegate != null) {
-                this.registry.put(type, delegate);
-            }
-            else {
-                this.registry.remove(type);
-            }
-        }
-    }
-
-    @Override
-    public PersistenceDelegate find(Class<?> type) {
-        PersistenceDelegate delegate;
-        synchronized (this.registry) {
-            delegate = this.registry.get(type);
-        }
-        return (delegate != null) ? delegate : super.find(type);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/beans/finder/PrimitiveTypeMap.java b/ojluni/src/main/java/com/sun/beans/finder/PrimitiveTypeMap.java
deleted file mode 100755
index 55f30d9..0000000
--- a/ojluni/src/main/java/com/sun/beans/finder/PrimitiveTypeMap.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright (c) 2006, 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.
- */
-package com.sun.beans.finder;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * This utility class associates
- * name of primitive type with appropriate class.
- *
- * @since 1.7
- *
- * @author Sergey A. Malenkov
- */
-final class PrimitiveTypeMap {
-
-    /**
-     * Returns primitive type class by its name.
-     *
-     * @param name  the name of primitive type
-     * @return found primitive type class,
-     *         or {@code null} if not found
-     */
-    static Class<?> getType(String name) {
-        return map.get(name);
-    }
-
-    private static final Map<String, Class<?>> map = new HashMap<String, Class<?>>(9);
-
-    static {
-        map.put(boolean.class.getName(), boolean.class);
-        map.put(char.class.getName(), char.class);
-        map.put(byte.class.getName(), byte.class);
-        map.put(short.class.getName(), short.class);
-        map.put(int.class.getName(), int.class);
-        map.put(long.class.getName(), long.class);
-        map.put(float.class.getName(), float.class);
-        map.put(double.class.getName(), double.class);
-        map.put(void.class.getName(), void.class);
-    }
-
-    /**
-     * Disable instantiation.
-     */
-    private PrimitiveTypeMap() {
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/beans/finder/PrimitiveWrapperMap.java b/ojluni/src/main/java/com/sun/beans/finder/PrimitiveWrapperMap.java
deleted file mode 100755
index 31b816c..0000000
--- a/ojluni/src/main/java/com/sun/beans/finder/PrimitiveWrapperMap.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-package com.sun.beans.finder;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * This utility class associates
- * name of primitive type with appropriate wrapper.
- *
- * @since 1.7
- *
- * @author Sergey A. Malenkov
- */
-public final class PrimitiveWrapperMap {
-
-    /**
-     * Replaces all primitive types in specified array with wrappers.
-     *
-     * @param types  array of classes where all primitive types
-     *               will be replaced by appropriate wrappers
-     */
-    static void replacePrimitivesWithWrappers(Class<?>[] types) {
-        for (int i = 0; i < types.length; i++) {
-            if (types[i] != null) {
-                if (types[i].isPrimitive()) {
-                    types[i] = getType(types[i].getName());
-                }
-            }
-        }
-    }
-
-    /**
-     * Returns wrapper for primitive type by its name.
-     *
-     * @param name  the name of primitive type
-     * @return found wrapper for primitive type,
-     *         or {@code null} if not found
-     */
-    public static Class<?> getType(String name) {
-        return map.get(name);
-    }
-
-    private static final Map<String, Class<?>> map = new HashMap<String, Class<?>>(9);
-
-    static {
-        map.put(Boolean.TYPE.getName(), Boolean.class);
-        map.put(Character.TYPE.getName(), Character.class);
-        map.put(Byte.TYPE.getName(), Byte.class);
-        map.put(Short.TYPE.getName(), Short.class);
-        map.put(Integer.TYPE.getName(), Integer.class);
-        map.put(Long.TYPE.getName(), Long.class);
-        map.put(Float.TYPE.getName(), Float.class);
-        map.put(Double.TYPE.getName(), Double.class);
-        map.put(Void.TYPE.getName(), Void.class);
-    }
-
-    /**
-     * Disable instantiation.
-     */
-    private PrimitiveWrapperMap() {
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/beans/finder/PropertyEditorFinder.java b/ojluni/src/main/java/com/sun/beans/finder/PropertyEditorFinder.java
deleted file mode 100755
index c4097cc..0000000
--- a/ojluni/src/main/java/com/sun/beans/finder/PropertyEditorFinder.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright (c) 2009, 2012, 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.beans.finder;
-
-import com.sun.beans.WeakCache;
-
-import java.beans.PropertyEditor;
-
-import com.sun.beans.editors.BooleanEditor;
-import com.sun.beans.editors.ByteEditor;
-import com.sun.beans.editors.DoubleEditor;
-import com.sun.beans.editors.EnumEditor;
-import com.sun.beans.editors.FloatEditor;
-import com.sun.beans.editors.IntegerEditor;
-import com.sun.beans.editors.LongEditor;
-import com.sun.beans.editors.ShortEditor;
-
-/**
- * This is utility class that provides functionality
- * to find a {@link PropertyEditor} for a JavaBean specified by its type.
- *
- * @since 1.7
- *
- * @author Sergey A. Malenkov
- */
-public final class PropertyEditorFinder
-        extends InstanceFinder<PropertyEditor> {
-
-    private static final String DEFAULT = "sun.beans.editors";
-    private static final String DEFAULT_NEW = "com.sun.beans.editors";
-
-    private final WeakCache<Class<?>, Class<?>> registry;
-
-    public PropertyEditorFinder() {
-        super(PropertyEditor.class, false, "Editor", DEFAULT);
-
-        this.registry = new WeakCache<Class<?>, Class<?>>();
-        this.registry.put(Byte.TYPE, ByteEditor.class);
-        this.registry.put(Short.TYPE, ShortEditor.class);
-        this.registry.put(Integer.TYPE, IntegerEditor.class);
-        this.registry.put(Long.TYPE, LongEditor.class);
-        this.registry.put(Boolean.TYPE, BooleanEditor.class);
-        this.registry.put(Float.TYPE, FloatEditor.class);
-        this.registry.put(Double.TYPE, DoubleEditor.class);
-    }
-
-    public void register(Class<?> type, Class<?> editor) {
-        synchronized (this.registry) {
-            this.registry.put(type, editor);
-        }
-    }
-
-    @Override
-    public PropertyEditor find(Class<?> type) {
-        Class<?> predefined;
-        synchronized (this.registry) {
-            predefined = this.registry.get(type);
-        }
-        PropertyEditor editor = instantiate(predefined, null);
-        if (editor == null) {
-            editor = super.find(type);
-            if ((editor == null) && (null != type.getEnumConstants())) {
-                editor = new EnumEditor(type);
-            }
-        }
-        return editor;
-    }
-
-    @Override
-    protected PropertyEditor instantiate(Class<?> type, String prefix, String name) {
-        return super.instantiate(type, DEFAULT.equals(prefix) ? DEFAULT_NEW : prefix, name);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/beans/finder/Signature.java b/ojluni/src/main/java/com/sun/beans/finder/Signature.java
deleted file mode 100755
index 9e169b6..0000000
--- a/ojluni/src/main/java/com/sun/beans/finder/Signature.java
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-package com.sun.beans.finder;
-
-/**
- * This class is designed to be a key of a cache
- * of constructors or methods.
- *
- * @since 1.7
- *
- * @author Sergey A. Malenkov
- */
-final class Signature {
-    private final Class<?> type;
-    private final String name;
-    private final Class<?>[] args;
-
-    private volatile int code;
-
-    /**
-     * Constructs signature for constructor.
-     *
-     * @param type  the class that contains constructor
-     * @param args  the types of constructor's parameters
-     */
-    Signature(Class<?> type, Class<?>[] args) {
-        this(type, null, args);
-    }
-
-    /**
-     * Constructs signature for method.
-     *
-     * @param type  the class that contains method
-     * @param name  the name of the method
-     * @param args  the types of method's parameters
-     */
-    Signature(Class<?> type, String name, Class<?>[] args) {
-        this.type = type;
-        this.name = name;
-        this.args = args;
-    }
-
-    /**
-     * Indicates whether some other object is "equal to" this one.
-     *
-     * @param object  the reference object with which to compare
-     * @return {@code true} if this object is the same as the
-     *         {@code object} argument, {@code false} otherwise
-     * @see #hashCode()
-     */
-    @Override
-    public boolean equals(Object object) {
-        if (this == object) {
-            return true;
-        }
-        if (object instanceof Signature) {
-            Signature signature = (Signature) object;
-            return isEqual(signature.type, this.type)
-                && isEqual(signature.name, this.name)
-                && isEqual(signature.args, this.args);
-        }
-        return false;
-    }
-
-    /**
-     * Indicates whether some object is "equal to" another one.
-     * This method supports {@code null} values.
-     *
-     * @param obj1  the first reference object that will compared
-     * @param obj2  the second reference object that will compared
-     * @return {@code true} if first object is the same as the second object,
-     *         {@code false} otherwise
-     */
-    private static boolean isEqual(Object obj1, Object obj2) {
-        return (obj1 == null)
-                ? obj2 == null
-                : obj1.equals(obj2);
-    }
-
-    /**
-     * Indicates whether some array is "equal to" another one.
-     * This method supports {@code null} values.
-     *
-     * @param args1 the first reference array that will compared
-     * @param args2 the second reference array that will compared
-     * @return {@code true} if first array is the same as the second array,
-     *         {@code false} otherwise
-     */
-    private static boolean isEqual(Class<?>[] args1, Class<?>[] args2) {
-        if ((args1 == null) || (args2 == null)) {
-            return args1 == args2;
-        }
-        if (args1.length != args2.length) {
-            return false;
-        }
-        for (int i = 0; i < args1.length; i++) {
-            if (!isEqual(args1[i], args2[i])) {
-                return false;
-            }
-        }
-        return true;
-    }
-
-    /**
-     * Returns a hash code value for the object.
-     * This method is supported for the benefit of hashtables
-     * such as {@link java.util.HashMap} or {@link java.util.HashSet}.
-     * Hash code computed using algorithm
-     * suggested in Effective Java, Item 8.
-     *
-     * @return a hash code value for this object
-     * @see #equals(Object)
-     */
-    @Override
-    public int hashCode() {
-        if (this.code == 0) {
-            int code = 17;
-            code = addHashCode(code, this.type);
-            code = addHashCode(code, this.name);
-
-            if (this.args != null) {
-                for (Class<?> arg : this.args) {
-                    code = addHashCode(code, arg);
-                }
-            }
-            this.code = code;
-        }
-        return this.code;
-    }
-
-    /**
-     * Adds hash code value if specified object.
-     * This is a part of the algorithm
-     * suggested in Effective Java, Item 8.
-     *
-     * @param code    current hash code value
-     * @param object  object that updates hash code value
-     * @return updated hash code value
-     * @see #hashCode()
-     */
-    private static int addHashCode(int code, Object object) {
-        code *= 37;
-        return (object != null)
-                ? code + object.hashCode()
-                : code;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/beans/infos/ComponentBeanInfo.java b/ojluni/src/main/java/com/sun/beans/infos/ComponentBeanInfo.java
deleted file mode 100755
index 9f1e2a7..0000000
--- a/ojluni/src/main/java/com/sun/beans/infos/ComponentBeanInfo.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright (c) 1996, 2012, 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.beans.infos;
-
-import java.beans.*;
-
-/**
- * BeanInfo descriptor for a standard AWT component.
- */
-
-public class ComponentBeanInfo extends SimpleBeanInfo {
-    private static final Class beanClass = java.awt.Component.class;
-
-    public PropertyDescriptor[] getPropertyDescriptors() {
-        try {
-            PropertyDescriptor
-                      name = new PropertyDescriptor("name",       beanClass),
-                background = new PropertyDescriptor("background", beanClass),
-                foreground = new PropertyDescriptor("foreground", beanClass),
-                      font = new PropertyDescriptor("font",       beanClass),
-                   enabled = new PropertyDescriptor("enabled",    beanClass),
-                   visible = new PropertyDescriptor("visible",    beanClass),
-                 focusable = new PropertyDescriptor("focusable",  beanClass);
-
-            enabled.setExpert(true);
-            visible.setHidden(true);
-
-            background.setBound(true);
-            foreground.setBound(true);
-            font.setBound(true);
-            focusable.setBound(true);
-
-            PropertyDescriptor[] rv = {name, background, foreground, font, enabled, visible, focusable };
-            return rv;
-        } catch (IntrospectionException e) {
-            throw new Error(e.toString());
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/demo/jvmti/hprof/Tracker.java b/ojluni/src/main/java/com/sun/demo/jvmti/hprof/Tracker.java
deleted file mode 100755
index f2e33d7..0000000
--- a/ojluni/src/main/java/com/sun/demo/jvmti/hprof/Tracker.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- *   - Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- *
- *   - Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- *
- *   - Neither the name of Oracle nor the names of its
- *     contributors may be used to endorse or promote products derived
- *     from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-package com.sun.demo.jvmti.hprof;
-
-/* This class and it's methods are used by hprof when injecting bytecodes
- *   into class file images.
- *   See the directory src/share/demo/jvmti/hprof and the file README.txt
- *   for more details.
- */
-
-public class Tracker {
-
-    /* Master switch that activates calls to native functions. */
-
-    private static int engaged = 0;
-
-    /* To track memory allocated, we need to catch object init's and arrays. */
-
-    /* At the beginning of java.jang.Object.<init>(), a call to
-     *   Tracker.ObjectInit() is injected.
-     */
-
-    private static native void nativeObjectInit(Object thr, Object obj);
-
-    public static void ObjectInit(Object obj)
-    {
-        if ( engaged != 0 ) {
-            nativeObjectInit(Thread.currentThread(), obj);
-        }
-    }
-
-    /* Immediately following any of the newarray bytecodes, a call to
-     *   Tracker.NewArray() is injected.
-     */
-
-    private static native void nativeNewArray(Object thr, Object obj);
-
-    public static void NewArray(Object obj)
-    {
-        if ( engaged != 0 ) {
-            nativeNewArray(Thread.currentThread(), obj);
-        }
-    }
-
-    /* For cpu time spent in methods, we need to inject for every method. */
-
-    /* At the very beginning of every method, a call to
-     *   Tracker.CallSite() is injected.
-     */
-
-    private static native void nativeCallSite(Object thr, int cnum, int mnum);
-
-    public static void CallSite(int cnum, int mnum)
-    {
-        if ( engaged != 0 ) {
-            nativeCallSite(Thread.currentThread(), cnum, mnum);
-        }
-    }
-
-    /* Before any of the return bytecodes, a call to
-     *   Tracker.ReturnSite() is injected.
-     */
-
-    private static native void nativeReturnSite(Object thr, int cnum, int mnum);
-
-    public static void ReturnSite(int cnum, int mnum)
-    {
-        if ( engaged != 0 ) {
-            nativeReturnSite(Thread.currentThread(), cnum, mnum);
-        }
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/plugins/bmp/BMPConstants.java b/ojluni/src/main/java/com/sun/imageio/plugins/bmp/BMPConstants.java
deleted file mode 100755
index 7934eaf..0000000
--- a/ojluni/src/main/java/com/sun/imageio/plugins/bmp/BMPConstants.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-package com.sun.imageio.plugins.bmp;
-
-public interface BMPConstants {
-    // bmp versions
-    static final String VERSION_2 = "BMP v. 2.x";
-    static final String VERSION_3 = "BMP v. 3.x";
-    static final String VERSION_3_NT = "BMP v. 3.x NT";
-    static final String VERSION_4 = "BMP v. 4.x";
-    static final String VERSION_5 = "BMP v. 5.x";
-
-    // Color space types
-    static final int LCS_CALIBRATED_RGB = 0;
-    static final int LCS_sRGB = 1;
-    static final int LCS_WINDOWS_COLOR_SPACE = 2;
-    static final int PROFILE_LINKED = 3;
-    static final int PROFILE_EMBEDDED = 4;
-
-    // Compression Types
-    static final int BI_RGB = 0;
-    static final int BI_RLE8 = 1;
-    static final int BI_RLE4 = 2;
-    static final int BI_BITFIELDS = 3;
-    static final int BI_JPEG = 4;
-    static final int BI_PNG = 5;
-
-    static final String[] compressionTypeNames =
-        {"BI_RGB", "BI_RLE8", "BI_RLE4", "BI_BITFIELDS", "BI_JPEG", "BI_PNG"};
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/plugins/bmp/BMPImageReader.java b/ojluni/src/main/java/com/sun/imageio/plugins/bmp/BMPImageReader.java
deleted file mode 100755
index 94fd920..0000000
--- a/ojluni/src/main/java/com/sun/imageio/plugins/bmp/BMPImageReader.java
+++ /dev/null
@@ -1,1821 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-package com.sun.imageio.plugins.bmp;
-
-import java.awt.Point;
-import java.awt.Rectangle;
-import java.awt.Transparency;
-import java.awt.color.ColorSpace;
-import java.awt.color.ICC_ColorSpace;
-import java.awt.color.ICC_Profile;
-import java.awt.image.BufferedImage;
-import java.awt.image.ColorModel;
-import java.awt.image.ComponentColorModel;
-import java.awt.image.ComponentSampleModel;
-import java.awt.image.DataBuffer;
-import java.awt.image.DataBufferByte;
-import java.awt.image.DataBufferInt;
-import java.awt.image.DataBufferUShort;
-import java.awt.image.DirectColorModel;
-import java.awt.image.IndexColorModel;
-import java.awt.image.MultiPixelPackedSampleModel;
-import java.awt.image.PixelInterleavedSampleModel;
-import java.awt.image.Raster;
-import java.awt.image.SampleModel;
-import java.awt.image.SinglePixelPackedSampleModel;
-import java.awt.image.WritableRaster;
-
-import javax.imageio.IIOException;
-import javax.imageio.ImageIO;
-import javax.imageio.ImageReader;
-import javax.imageio.ImageReadParam;
-import javax.imageio.ImageTypeSpecifier;
-import javax.imageio.metadata.IIOMetadata;
-import javax.imageio.spi.ImageReaderSpi;
-import javax.imageio.stream.ImageInputStream;
-import javax.imageio.event.IIOReadProgressListener;
-import javax.imageio.event.IIOReadUpdateListener;
-import javax.imageio.event.IIOReadWarningListener;
-
-import java.io.*;
-import java.nio.*;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.StringTokenizer;
-
-import com.sun.imageio.plugins.common.ImageUtil;
-import com.sun.imageio.plugins.common.I18N;
-
-/** This class is the Java Image IO plugin reader for BMP images.
- *  It may subsample the image, clip the image, select sub-bands,
- *  and shift the decoded image origin if the proper decoding parameter
- *  are set in the provided <code>ImageReadParam</code>.
- *
- *  This class supports Microsoft Windows Bitmap Version 3-5,
- *  as well as OS/2 Bitmap Version 2.x (for single-image BMP file).
- */
-public class BMPImageReader extends ImageReader implements BMPConstants {
-    // BMP Image types
-    private static final int VERSION_2_1_BIT = 0;
-    private static final int VERSION_2_4_BIT = 1;
-    private static final int VERSION_2_8_BIT = 2;
-    private static final int VERSION_2_24_BIT = 3;
-
-    private static final int VERSION_3_1_BIT = 4;
-    private static final int VERSION_3_4_BIT = 5;
-    private static final int VERSION_3_8_BIT = 6;
-    private static final int VERSION_3_24_BIT = 7;
-
-    private static final int VERSION_3_NT_16_BIT = 8;
-    private static final int VERSION_3_NT_32_BIT = 9;
-
-    private static final int VERSION_4_1_BIT = 10;
-    private static final int VERSION_4_4_BIT = 11;
-    private static final int VERSION_4_8_BIT = 12;
-    private static final int VERSION_4_16_BIT = 13;
-    private static final int VERSION_4_24_BIT = 14;
-    private static final int VERSION_4_32_BIT = 15;
-
-    private static final int VERSION_3_XP_EMBEDDED = 16;
-    private static final int VERSION_4_XP_EMBEDDED = 17;
-    private static final int VERSION_5_XP_EMBEDDED = 18;
-
-    // BMP variables
-    private long bitmapFileSize;
-    private long bitmapOffset;
-    private long compression;
-    private long imageSize;
-    private byte palette[];
-    private int imageType;
-    private int numBands;
-    private boolean isBottomUp;
-    private int bitsPerPixel;
-    private int redMask, greenMask, blueMask, alphaMask;
-
-    private SampleModel sampleModel, originalSampleModel;
-    private ColorModel colorModel, originalColorModel;
-
-    /** The input stream where reads from */
-    private ImageInputStream iis = null;
-
-    /** Indicates whether the header is read. */
-    private boolean gotHeader = false;
-
-    /** The original image width. */
-    private int width;
-
-    /** The original image height. */
-    private int height;
-
-    /** The destination region. */
-    private Rectangle destinationRegion;
-
-    /** The source region. */
-    private Rectangle sourceRegion;
-
-    /** The metadata from the stream. */
-    private BMPMetadata metadata;
-
-    /** The destination image. */
-    private BufferedImage bi;
-
-    /** Indicates whether subsampled, subregion is required, and offset is
-     *  defined
-     */
-    private boolean noTransform = true;
-
-    /** Indicates whether subband is selected. */
-    private boolean seleBand = false;
-
-    /** The scaling factors. */
-    private int scaleX, scaleY;
-
-    /** source and destination bands. */
-    private int[] sourceBands, destBands;
-
-    /** Constructs <code>BMPImageReader</code> from the provided
-     *  <code>ImageReaderSpi</code>.
-     */
-    public BMPImageReader(ImageReaderSpi originator) {
-        super(originator);
-    }
-
-    /** Overrides the method defined in the superclass. */
-    public void setInput(Object input,
-                         boolean seekForwardOnly,
-                         boolean ignoreMetadata) {
-        super.setInput(input, seekForwardOnly, ignoreMetadata);
-        iis = (ImageInputStream) input; // Always works
-        if(iis != null)
-            iis.setByteOrder(ByteOrder.LITTLE_ENDIAN);
-        resetHeaderInfo();
-    }
-
-    /** Overrides the method defined in the superclass. */
-    public int getNumImages(boolean allowSearch) throws IOException {
-        if (iis == null) {
-            throw new IllegalStateException(I18N.getString("GetNumImages0"));
-        }
-        if (seekForwardOnly && allowSearch) {
-            throw new IllegalStateException(I18N.getString("GetNumImages1"));
-        }
-        return 1;
-    }
-
-    public int getWidth(int imageIndex) throws IOException {
-        checkIndex(imageIndex);
-        readHeader();
-        return width;
-    }
-
-    public int getHeight(int imageIndex) throws IOException {
-        checkIndex(imageIndex);
-        readHeader();
-        return height;
-    }
-
-    private void checkIndex(int imageIndex) {
-        if (imageIndex != 0) {
-            throw new IndexOutOfBoundsException(I18N.getString("BMPImageReader0"));
-        }
-    }
-
-    public void readHeader() throws IOException {
-        if (gotHeader)
-            return;
-
-        if (iis == null) {
-            throw new IllegalStateException("Input source not set!");
-        }
-        int profileData = 0, profileSize = 0;
-
-        this.metadata = new BMPMetadata();
-        iis.mark();
-
-        // read and check the magic marker
-        byte[] marker = new byte[2];
-        iis.read(marker);
-        if (marker[0] != 0x42 || marker[1] != 0x4d)
-            throw new IllegalArgumentException(I18N.getString("BMPImageReader1"));
-
-        // Read file size
-        bitmapFileSize = iis.readUnsignedInt();
-        // skip the two reserved fields
-        iis.skipBytes(4);
-
-        // Offset to the bitmap from the beginning
-        bitmapOffset = iis.readUnsignedInt();
-        // End File Header
-
-        // Start BitmapCoreHeader
-        long size = iis.readUnsignedInt();
-
-        if (size == 12) {
-            width = iis.readShort();
-            height = iis.readShort();
-        } else {
-            width = iis.readInt();
-            height = iis.readInt();
-        }
-
-        metadata.width = width;
-        metadata.height = height;
-
-        int planes = iis.readUnsignedShort();
-        bitsPerPixel = iis.readUnsignedShort();
-
-        //metadata.colorPlane = planes;
-        metadata.bitsPerPixel = (short)bitsPerPixel;
-
-        // As BMP always has 3 rgb bands, except for Version 5,
-        // which is bgra
-        numBands = 3;
-
-        if (size == 12) {
-            // Windows 2.x and OS/2 1.x
-            metadata.bmpVersion = VERSION_2;
-
-            // Classify the image type
-            if (bitsPerPixel == 1) {
-                imageType = VERSION_2_1_BIT;
-            } else if (bitsPerPixel == 4) {
-                imageType = VERSION_2_4_BIT;
-            } else if (bitsPerPixel == 8) {
-                imageType = VERSION_2_8_BIT;
-            } else if (bitsPerPixel == 24) {
-                imageType = VERSION_2_24_BIT;
-            }
-
-            // Read in the palette
-            int numberOfEntries = (int)((bitmapOffset - 14 - size) / 3);
-            int sizeOfPalette = numberOfEntries*3;
-            palette = new byte[sizeOfPalette];
-            iis.readFully(palette, 0, sizeOfPalette);
-            metadata.palette = palette;
-            metadata.paletteSize = numberOfEntries;
-        } else {
-            compression = iis.readUnsignedInt();
-            imageSize = iis.readUnsignedInt();
-            long xPelsPerMeter = iis.readInt();
-            long yPelsPerMeter = iis.readInt();
-            long colorsUsed = iis.readUnsignedInt();
-            long colorsImportant = iis.readUnsignedInt();
-
-            metadata.compression = (int)compression;
-            metadata.xPixelsPerMeter = (int)xPelsPerMeter;
-            metadata.yPixelsPerMeter = (int)yPelsPerMeter;
-            metadata.colorsUsed = (int)colorsUsed;
-            metadata.colorsImportant = (int)colorsImportant;
-
-            if (size == 40) {
-                // Windows 3.x and Windows NT
-                switch((int)compression) {
-
-                case BI_JPEG:
-                case BI_PNG:
-                    metadata.bmpVersion = VERSION_3;
-                    imageType = VERSION_3_XP_EMBEDDED;
-                    break;
-
-                case BI_RGB:  // No compression
-                case BI_RLE8:  // 8-bit RLE compression
-                case BI_RLE4:  // 4-bit RLE compression
-
-                    // Read in the palette
-                    int numberOfEntries = (int)((bitmapOffset-14-size) / 4);
-                    int sizeOfPalette = numberOfEntries * 4;
-                    palette = new byte[sizeOfPalette];
-                    iis.readFully(palette, 0, sizeOfPalette);
-
-                    metadata.palette = palette;
-                    metadata.paletteSize = numberOfEntries;
-
-                    if (bitsPerPixel == 1) {
-                        imageType = VERSION_3_1_BIT;
-                    } else if (bitsPerPixel == 4) {
-                        imageType = VERSION_3_4_BIT;
-                    } else if (bitsPerPixel == 8) {
-                        imageType = VERSION_3_8_BIT;
-                    } else if (bitsPerPixel == 24) {
-                        imageType = VERSION_3_24_BIT;
-                    } else if (bitsPerPixel == 16) {
-                        imageType = VERSION_3_NT_16_BIT;
-
-                        redMask = 0x7C00;
-                        greenMask = 0x3E0;
-                        blueMask =  (1 << 5) - 1;// 0x1F;
-                        metadata.redMask = redMask;
-                        metadata.greenMask = greenMask;
-                        metadata.blueMask = blueMask;
-                    } else if (bitsPerPixel == 32) {
-                        imageType = VERSION_3_NT_32_BIT;
-                        redMask   = 0x00FF0000;
-                        greenMask = 0x0000FF00;
-                        blueMask  = 0x000000FF;
-                        metadata.redMask = redMask;
-                        metadata.greenMask = greenMask;
-                        metadata.blueMask = blueMask;
-                    }
-
-                    metadata.bmpVersion = VERSION_3;
-                    break;
-
-                case BI_BITFIELDS:
-
-                    if (bitsPerPixel == 16) {
-                        imageType = VERSION_3_NT_16_BIT;
-                    } else if (bitsPerPixel == 32) {
-                        imageType = VERSION_3_NT_32_BIT;
-                    }
-
-                    // BitsField encoding
-                    redMask = (int)iis.readUnsignedInt();
-                    greenMask = (int)iis.readUnsignedInt();
-                    blueMask = (int)iis.readUnsignedInt();
-                    metadata.redMask = redMask;
-                    metadata.greenMask = greenMask;
-                    metadata.blueMask = blueMask;
-
-                    if (colorsUsed != 0) {
-                        // there is a palette
-                        sizeOfPalette = (int)colorsUsed*4;
-                        palette = new byte[sizeOfPalette];
-                        iis.readFully(palette, 0, sizeOfPalette);
-
-                        metadata.palette = palette;
-                        metadata.paletteSize = (int)colorsUsed;
-                    }
-                    metadata.bmpVersion = VERSION_3_NT;
-
-                    break;
-                default:
-                    throw new
-                        RuntimeException(I18N.getString("BMPImageReader2"));
-                }
-            } else if (size == 108 || size == 124) {
-                // Windows 4.x BMP
-                if (size == 108)
-                    metadata.bmpVersion = VERSION_4;
-                else if (size == 124)
-                    metadata.bmpVersion = VERSION_5;
-
-                // rgb masks, valid only if comp is BI_BITFIELDS
-                redMask = (int)iis.readUnsignedInt();
-                greenMask = (int)iis.readUnsignedInt();
-                blueMask = (int)iis.readUnsignedInt();
-                // Only supported for 32bpp BI_RGB argb
-                alphaMask = (int)iis.readUnsignedInt();
-                long csType = iis.readUnsignedInt();
-                int redX = iis.readInt();
-                int redY = iis.readInt();
-                int redZ = iis.readInt();
-                int greenX = iis.readInt();
-                int greenY = iis.readInt();
-                int greenZ = iis.readInt();
-                int blueX = iis.readInt();
-                int blueY = iis.readInt();
-                int blueZ = iis.readInt();
-                long gammaRed = iis.readUnsignedInt();
-                long gammaGreen = iis.readUnsignedInt();
-                long gammaBlue = iis.readUnsignedInt();
-
-                if (size == 124) {
-                    metadata.intent = iis.readInt();
-                    profileData = iis.readInt();
-                    profileSize = iis.readInt();
-                    iis.skipBytes(4);
-                }
-
-                metadata.colorSpace = (int)csType;
-
-                if (csType == LCS_CALIBRATED_RGB) {
-                    // All the new fields are valid only for this case
-                    metadata.redX = redX;
-                    metadata.redY = redY;
-                    metadata.redZ = redZ;
-                    metadata.greenX = greenX;
-                    metadata.greenY = greenY;
-                    metadata.greenZ = greenZ;
-                    metadata.blueX = blueX;
-                    metadata.blueY = blueY;
-                    metadata.blueZ = blueZ;
-                    metadata.gammaRed = (int)gammaRed;
-                    metadata.gammaGreen = (int)gammaGreen;
-                    metadata.gammaBlue = (int)gammaBlue;
-                }
-
-                // Read in the palette
-                int numberOfEntries = (int)((bitmapOffset-14-size) / 4);
-                int sizeOfPalette = numberOfEntries*4;
-                palette = new byte[sizeOfPalette];
-                iis.readFully(palette, 0, sizeOfPalette);
-                metadata.palette = palette;
-                metadata.paletteSize = numberOfEntries;
-
-                switch ((int)compression) {
-                case BI_JPEG:
-                case BI_PNG:
-                    if (size == 108) {
-                        imageType = VERSION_4_XP_EMBEDDED;
-                    } else if (size == 124) {
-                        imageType = VERSION_5_XP_EMBEDDED;
-                    }
-                    break;
-                default:
-                    if (bitsPerPixel == 1) {
-                        imageType = VERSION_4_1_BIT;
-                    } else if (bitsPerPixel == 4) {
-                        imageType = VERSION_4_4_BIT;
-                    } else if (bitsPerPixel == 8) {
-                        imageType = VERSION_4_8_BIT;
-                    } else if (bitsPerPixel == 16) {
-                        imageType = VERSION_4_16_BIT;
-                        if ((int)compression == BI_RGB) {
-                            redMask = 0x7C00;
-                            greenMask = 0x3E0;
-                            blueMask = 0x1F;
-                        }
-                    } else if (bitsPerPixel == 24) {
-                        imageType = VERSION_4_24_BIT;
-                    } else if (bitsPerPixel == 32) {
-                        imageType = VERSION_4_32_BIT;
-                        if ((int)compression == BI_RGB) {
-                            redMask   = 0x00FF0000;
-                            greenMask = 0x0000FF00;
-                            blueMask  = 0x000000FF;
-                        }
-                    }
-
-                    metadata.redMask = redMask;
-                    metadata.greenMask = greenMask;
-                    metadata.blueMask = blueMask;
-                    metadata.alphaMask = alphaMask;
-                }
-            } else {
-                throw new
-                    RuntimeException(I18N.getString("BMPImageReader3"));
-            }
-        }
-
-        if (height > 0) {
-            // bottom up image
-            isBottomUp = true;
-        } else {
-            // top down image
-            isBottomUp = false;
-            height = Math.abs(height);
-        }
-
-        // Reset Image Layout so there's only one tile.
-        //Define the color space
-        ColorSpace colorSpace = ColorSpace.getInstance(ColorSpace.CS_sRGB);
-        if (metadata.colorSpace == PROFILE_LINKED ||
-            metadata.colorSpace == PROFILE_EMBEDDED) {
-
-            iis.mark();
-            iis.skipBytes(profileData - size);
-            byte[] profile = new byte[profileSize];
-            iis.readFully(profile, 0, profileSize);
-            iis.reset();
-
-            try {
-                if (metadata.colorSpace == PROFILE_LINKED &&
-                    isLinkedProfileAllowed() &&
-                    !isUncOrDevicePath(profile))
-                {
-                    String path = new String(profile, "windows-1252");
-
-                    colorSpace =
-                        new ICC_ColorSpace(ICC_Profile.getInstance(path));
-                } else {
-                    colorSpace =
-                        new ICC_ColorSpace(ICC_Profile.getInstance(profile));
-                }
-            } catch (Exception e) {
-                colorSpace = ColorSpace.getInstance(ColorSpace.CS_sRGB);
-            }
-        }
-
-        if (bitsPerPixel == 0 ||
-            compression == BI_JPEG || compression == BI_PNG )
-        {
-            // the colorModel and sampleModel will be initialzed
-            // by the  reader of embedded image
-            colorModel = null;
-            sampleModel = null;
-        } else if (bitsPerPixel == 1 || bitsPerPixel == 4 || bitsPerPixel == 8) {
-            // When number of bitsPerPixel is <= 8, we use IndexColorModel.
-            numBands = 1;
-
-            if (bitsPerPixel == 8) {
-                int[] bandOffsets = new int[numBands];
-                for (int i = 0; i < numBands; i++) {
-                    bandOffsets[i] = numBands -1 -i;
-                }
-                sampleModel =
-                    new PixelInterleavedSampleModel(DataBuffer.TYPE_BYTE,
-                                                    width, height,
-                                                    numBands,
-                                                    numBands * width,
-                                                    bandOffsets);
-            } else {
-                // 1 and 4 bit pixels can be stored in a packed format.
-                sampleModel =
-                    new MultiPixelPackedSampleModel(DataBuffer.TYPE_BYTE,
-                                                    width, height,
-                                                    bitsPerPixel);
-            }
-
-            // Create IndexColorModel from the palette.
-            byte r[], g[], b[];
-            if (imageType == VERSION_2_1_BIT ||
-                imageType == VERSION_2_4_BIT ||
-                imageType == VERSION_2_8_BIT) {
-
-
-                size = palette.length/3;
-
-                if (size > 256) {
-                    size = 256;
-                }
-
-                int off;
-                r = new byte[(int)size];
-                g = new byte[(int)size];
-                b = new byte[(int)size];
-                for (int i=0; i<(int)size; i++) {
-                    off = 3 * i;
-                    b[i] = palette[off];
-                    g[i] = palette[off+1];
-                    r[i] = palette[off+2];
-                }
-            } else {
-                size = palette.length/4;
-
-                if (size > 256) {
-                    size = 256;
-                }
-
-                int off;
-                r = new byte[(int)size];
-                g = new byte[(int)size];
-                b = new byte[(int)size];
-                for (int i=0; i<size; i++) {
-                    off = 4 * i;
-                    b[i] = palette[off];
-                    g[i] = palette[off+1];
-                    r[i] = palette[off+2];
-                }
-            }
-
-            if (ImageUtil.isIndicesForGrayscale(r, g, b))
-                colorModel =
-                    ImageUtil.createColorModel(null, sampleModel);
-            else
-                colorModel = new IndexColorModel(bitsPerPixel, (int)size, r, g, b);
-        } else if (bitsPerPixel == 16) {
-            numBands = 3;
-            sampleModel =
-                new SinglePixelPackedSampleModel(DataBuffer.TYPE_USHORT,
-                                                 width, height,
-                                                 new int[] {redMask, greenMask, blueMask});
-
-            colorModel =
-                new DirectColorModel(colorSpace,
-                                     16, redMask, greenMask, blueMask, 0,
-                                     false, DataBuffer.TYPE_USHORT);
-
-        } else if (bitsPerPixel == 32) {
-            numBands = alphaMask == 0 ? 3 : 4;
-
-            // The number of bands in the SampleModel is determined by
-            // the length of the mask array passed in.
-            int[] bitMasks = numBands == 3 ?
-                new int[] {redMask, greenMask, blueMask} :
-                new int[] {redMask, greenMask, blueMask, alphaMask};
-
-                sampleModel =
-                    new SinglePixelPackedSampleModel(DataBuffer.TYPE_INT,
-                                                     width, height,
-                                                     bitMasks);
-
-                colorModel =
-                    new DirectColorModel(colorSpace,
-                                         32, redMask, greenMask, blueMask, alphaMask,
-                                         false, DataBuffer.TYPE_INT);
-        } else {
-            numBands = 3;
-            // Create SampleModel
-            int[] bandOffsets = new int[numBands];
-            for (int i = 0; i < numBands; i++) {
-                bandOffsets[i] = numBands -1 -i;
-            }
-
-            sampleModel =
-                new PixelInterleavedSampleModel(DataBuffer.TYPE_BYTE,
-                                                width, height,
-                                                numBands,
-                                                numBands * width,
-                                                bandOffsets);
-
-            colorModel =
-                ImageUtil.createColorModel(colorSpace, sampleModel);
-        }
-
-        originalSampleModel = sampleModel;
-        originalColorModel = colorModel;
-
-        // Reset to the start of bitmap; then jump to the
-        //start of image data
-        iis.reset();
-        iis.skipBytes(bitmapOffset);
-        gotHeader = true;
-    }
-
-    public Iterator getImageTypes(int imageIndex)
-      throws IOException {
-        checkIndex(imageIndex);
-        readHeader();
-        ArrayList list = new ArrayList(1);
-        list.add(new ImageTypeSpecifier(originalColorModel,
-                                        originalSampleModel));
-        return list.iterator();
-    }
-
-    public ImageReadParam getDefaultReadParam() {
-        return new ImageReadParam();
-    }
-
-    public IIOMetadata getImageMetadata(int imageIndex)
-      throws IOException {
-        checkIndex(imageIndex);
-        if (metadata == null) {
-            readHeader();
-        }
-        return metadata;
-    }
-
-    public IIOMetadata getStreamMetadata() throws IOException {
-        return null;
-    }
-
-    public boolean isRandomAccessEasy(int imageIndex) throws IOException {
-        checkIndex(imageIndex);
-        readHeader();
-        return metadata.compression == BI_RGB;
-    }
-
-    public BufferedImage read(int imageIndex, ImageReadParam param)
-        throws IOException {
-
-        if (iis == null) {
-            throw new IllegalStateException(I18N.getString("BMPImageReader5"));
-        }
-
-        checkIndex(imageIndex);
-        clearAbortRequest();
-        processImageStarted(imageIndex);
-
-        if (param == null)
-            param = getDefaultReadParam();
-
-        //read header
-        readHeader();
-
-        sourceRegion = new Rectangle(0, 0, 0, 0);
-        destinationRegion = new Rectangle(0, 0, 0, 0);
-
-        computeRegions(param, this.width, this.height,
-                       param.getDestination(),
-                       sourceRegion,
-                       destinationRegion);
-
-        scaleX = param.getSourceXSubsampling();
-        scaleY = param.getSourceYSubsampling();
-
-        // If the destination band is set used it
-        sourceBands = param.getSourceBands();
-        destBands = param.getDestinationBands();
-
-        seleBand = (sourceBands != null) && (destBands != null);
-        noTransform =
-            destinationRegion.equals(new Rectangle(0, 0, width, height)) ||
-            seleBand;
-
-        if (!seleBand) {
-            sourceBands = new int[numBands];
-            destBands = new int[numBands];
-            for (int i = 0; i < numBands; i++)
-                destBands[i] = sourceBands[i] = i;
-        }
-
-        // If the destination is provided, then use it.  Otherwise, create new one
-        bi = param.getDestination();
-
-        // Get the image data.
-        WritableRaster raster = null;
-
-        if (bi == null) {
-            if (sampleModel != null && colorModel != null) {
-                sampleModel =
-                    sampleModel.createCompatibleSampleModel(destinationRegion.x +
-                                                            destinationRegion.width,
-                                                            destinationRegion.y +
-                                                            destinationRegion.height);
-                if (seleBand)
-                    sampleModel = sampleModel.createSubsetSampleModel(sourceBands);
-                raster = Raster.createWritableRaster(sampleModel, new Point());
-                bi = new BufferedImage(colorModel, raster, false, null);
-            }
-        } else {
-            raster = bi.getWritableTile(0, 0);
-            sampleModel = bi.getSampleModel();
-            colorModel = bi.getColorModel();
-
-            noTransform &=  destinationRegion.equals(raster.getBounds());
-        }
-
-        byte bdata[] = null; // buffer for byte data
-        short sdata[] = null; // buffer for short data
-        int idata[] = null; // buffer for int data
-
-        // the sampleModel can be null in case of embedded image
-        if (sampleModel != null) {
-            if (sampleModel.getDataType() == DataBuffer.TYPE_BYTE)
-                bdata = (byte[])
-                    ((DataBufferByte)raster.getDataBuffer()).getData();
-            else if (sampleModel.getDataType() == DataBuffer.TYPE_USHORT)
-                sdata = (short[])
-                    ((DataBufferUShort)raster.getDataBuffer()).getData();
-            else if (sampleModel.getDataType() == DataBuffer.TYPE_INT)
-                idata = (int[])
-                    ((DataBufferInt)raster.getDataBuffer()).getData();
-        }
-
-        // There should only be one tile.
-        switch(imageType) {
-
-        case VERSION_2_1_BIT:
-            // no compression
-            read1Bit(bdata);
-            break;
-
-        case VERSION_2_4_BIT:
-            // no compression
-            read4Bit(bdata);
-            break;
-
-        case VERSION_2_8_BIT:
-            // no compression
-            read8Bit(bdata);
-            break;
-
-        case VERSION_2_24_BIT:
-            // no compression
-            read24Bit(bdata);
-            break;
-
-        case VERSION_3_1_BIT:
-            // 1-bit images cannot be compressed.
-            read1Bit(bdata);
-            break;
-
-        case VERSION_3_4_BIT:
-            switch((int)compression) {
-            case BI_RGB:
-                read4Bit(bdata);
-                break;
-
-            case BI_RLE4:
-                readRLE4(bdata);
-                break;
-
-            default:
-                throw new
-                    RuntimeException(I18N.getString("BMPImageReader1"));
-            }
-            break;
-
-        case VERSION_3_8_BIT:
-            switch((int)compression) {
-            case BI_RGB:
-                read8Bit(bdata);
-                break;
-
-            case BI_RLE8:
-                readRLE8(bdata);
-                break;
-
-            default:
-                throw new
-                    RuntimeException(I18N.getString("BMPImageReader1"));
-            }
-
-            break;
-
-        case VERSION_3_24_BIT:
-            // 24-bit images are not compressed
-            read24Bit(bdata);
-            break;
-
-        case VERSION_3_NT_16_BIT:
-            read16Bit(sdata);
-            break;
-
-        case VERSION_3_NT_32_BIT:
-            read32Bit(idata);
-            break;
-
-        case VERSION_3_XP_EMBEDDED:
-        case VERSION_4_XP_EMBEDDED:
-        case VERSION_5_XP_EMBEDDED:
-            bi = readEmbedded((int)compression, bi, param);
-            break;
-
-        case VERSION_4_1_BIT:
-            read1Bit(bdata);
-            break;
-
-        case VERSION_4_4_BIT:
-            switch((int)compression) {
-
-            case BI_RGB:
-                read4Bit(bdata);
-                break;
-
-            case BI_RLE4:
-                readRLE4(bdata);
-                break;
-
-            default:
-                throw new
-                    RuntimeException(I18N.getString("BMPImageReader1"));
-            }
-
-        case VERSION_4_8_BIT:
-            switch((int)compression) {
-
-            case BI_RGB:
-                read8Bit(bdata);
-                break;
-
-            case BI_RLE8:
-                readRLE8(bdata);
-                break;
-
-            default:
-                throw new
-                    RuntimeException(I18N.getString("BMPImageReader1"));
-            }
-            break;
-
-        case VERSION_4_16_BIT:
-            read16Bit(sdata);
-            break;
-
-        case VERSION_4_24_BIT:
-            read24Bit(bdata);
-            break;
-
-        case VERSION_4_32_BIT:
-            read32Bit(idata);
-            break;
-        }
-
-        if (abortRequested())
-            processReadAborted();
-        else
-            processImageComplete();
-
-        return bi;
-    }
-
-    public boolean canReadRaster() {
-        return true;
-    }
-
-    public Raster readRaster(int imageIndex,
-                             ImageReadParam param) throws IOException {
-        BufferedImage bi = read(imageIndex, param);
-        return bi.getData();
-    }
-
-    private void resetHeaderInfo() {
-        gotHeader = false;
-        bi = null;
-        sampleModel = originalSampleModel = null;
-        colorModel = originalColorModel = null;
-    }
-
-    public void reset() {
-        super.reset();
-        iis = null;
-        resetHeaderInfo();
-    }
-
-    // Deal with 1 Bit images using IndexColorModels
-    private void read1Bit(byte[] bdata) throws IOException {
-        int bytesPerScanline = (width + 7) / 8;
-        int padding = bytesPerScanline % 4;
-        if (padding != 0) {
-            padding = 4 - padding;
-        }
-
-        int lineLength = bytesPerScanline + padding;
-
-        if (noTransform) {
-            int j = isBottomUp ? (height -1)*bytesPerScanline : 0;
-
-            for (int i=0; i<height; i++) {
-                if (abortRequested()) {
-                    break;
-                }
-                iis.readFully(bdata, j, bytesPerScanline);
-                iis.skipBytes(padding);
-                j += isBottomUp ? -bytesPerScanline : bytesPerScanline;
-                processImageUpdate(bi, 0, i,
-                                   destinationRegion.width, 1, 1, 1,
-                                   new int[]{0});
-                processImageProgress(100.0F * i/destinationRegion.height);
-            }
-        } else {
-            byte[] buf = new byte[lineLength];
-            int lineStride =
-                ((MultiPixelPackedSampleModel)sampleModel).getScanlineStride();
-
-            if (isBottomUp) {
-                int lastLine =
-                    sourceRegion.y + (destinationRegion.height - 1) * scaleY;
-                iis.skipBytes(lineLength * (height - 1 - lastLine));
-            } else
-                iis.skipBytes(lineLength * sourceRegion.y);
-
-            int skipLength = lineLength * (scaleY - 1);
-
-            // cache the values to avoid duplicated computation
-            int[] srcOff = new int[destinationRegion.width];
-            int[] destOff = new int[destinationRegion.width];
-            int[] srcPos = new int[destinationRegion.width];
-            int[] destPos = new int[destinationRegion.width];
-
-            for (int i = destinationRegion.x, x = sourceRegion.x, j = 0;
-                 i < destinationRegion.x + destinationRegion.width;
-                 i++, j++, x += scaleX) {
-                srcPos[j] = x >> 3;
-                srcOff[j] = 7 - (x & 7);
-                destPos[j] = i >> 3;
-                destOff[j] = 7 - (i & 7);
-            }
-
-            int k = destinationRegion.y * lineStride;
-            if (isBottomUp)
-                k += (destinationRegion.height - 1) * lineStride;
-
-            for (int j = 0, y = sourceRegion.y;
-                 j < destinationRegion.height; j++, y+=scaleY) {
-
-                if (abortRequested())
-                    break;
-                iis.read(buf, 0, lineLength);
-                for (int i = 0; i < destinationRegion.width; i++) {
-                    //get the bit and assign to the data buffer of the raster
-                    int v = (buf[srcPos[i]] >> srcOff[i]) & 1;
-                    bdata[k + destPos[i]] |= v << destOff[i];
-                }
-
-                k += isBottomUp ? -lineStride : lineStride;
-                iis.skipBytes(skipLength);
-                processImageUpdate(bi, 0, j,
-                                   destinationRegion.width, 1, 1, 1,
-                                   new int[]{0});
-                processImageProgress(100.0F*j/destinationRegion.height);
-            }
-        }
-    }
-
-    // Method to read a 4 bit BMP image data
-    private void read4Bit(byte[] bdata) throws IOException {
-
-        int bytesPerScanline = (width + 1) / 2;
-
-        // Padding bytes at the end of each scanline
-        int padding = bytesPerScanline % 4;
-        if (padding != 0)
-            padding = 4 - padding;
-
-        int lineLength = bytesPerScanline + padding;
-
-        if (noTransform) {
-            int j = isBottomUp ? (height -1) * bytesPerScanline : 0;
-
-            for (int i=0; i<height; i++) {
-                if (abortRequested()) {
-                    break;
-                }
-                iis.readFully(bdata, j, bytesPerScanline);
-                iis.skipBytes(padding);
-                j += isBottomUp ? -bytesPerScanline : bytesPerScanline;
-                processImageUpdate(bi, 0, i,
-                                   destinationRegion.width, 1, 1, 1,
-                                   new int[]{0});
-                processImageProgress(100.0F * i/destinationRegion.height);
-            }
-        } else {
-            byte[] buf = new byte[lineLength];
-            int lineStride =
-                ((MultiPixelPackedSampleModel)sampleModel).getScanlineStride();
-
-            if (isBottomUp) {
-                int lastLine =
-                    sourceRegion.y + (destinationRegion.height - 1) * scaleY;
-                iis.skipBytes(lineLength * (height - 1 - lastLine));
-            } else
-                iis.skipBytes(lineLength * sourceRegion.y);
-
-            int skipLength = lineLength * (scaleY - 1);
-
-            // cache the values to avoid duplicated computation
-            int[] srcOff = new int[destinationRegion.width];
-            int[] destOff = new int[destinationRegion.width];
-            int[] srcPos = new int[destinationRegion.width];
-            int[] destPos = new int[destinationRegion.width];
-
-            for (int i = destinationRegion.x, x = sourceRegion.x, j = 0;
-                 i < destinationRegion.x + destinationRegion.width;
-                 i++, j++, x += scaleX) {
-                srcPos[j] = x >> 1;
-                srcOff[j] = (1 - (x & 1)) << 2;
-                destPos[j] = i >> 1;
-                destOff[j] = (1 - (i & 1)) << 2;
-            }
-
-            int k = destinationRegion.y * lineStride;
-            if (isBottomUp)
-                k += (destinationRegion.height - 1) * lineStride;
-
-            for (int j = 0, y = sourceRegion.y;
-                 j < destinationRegion.height; j++, y+=scaleY) {
-
-                if (abortRequested())
-                    break;
-                iis.read(buf, 0, lineLength);
-                for (int i = 0; i < destinationRegion.width; i++) {
-                    //get the bit and assign to the data buffer of the raster
-                    int v = (buf[srcPos[i]] >> srcOff[i]) & 0x0F;
-                    bdata[k + destPos[i]] |= v << destOff[i];
-                }
-
-                k += isBottomUp ? -lineStride : lineStride;
-                iis.skipBytes(skipLength);
-                processImageUpdate(bi, 0, j,
-                                   destinationRegion.width, 1, 1, 1,
-                                   new int[]{0});
-                processImageProgress(100.0F*j/destinationRegion.height);
-            }
-        }
-    }
-
-    // Method to read 8 bit BMP image data
-    private void read8Bit(byte[] bdata) throws IOException {
-
-        // Padding bytes at the end of each scanline
-        int padding = width % 4;
-        if (padding != 0) {
-            padding = 4 - padding;
-        }
-
-        int lineLength = width + padding;
-
-        if (noTransform) {
-            int j = isBottomUp ? (height -1) * width : 0;
-
-            for (int i=0; i<height; i++) {
-                if (abortRequested()) {
-                    break;
-                }
-                iis.readFully(bdata, j, width);
-                iis.skipBytes(padding);
-                j += isBottomUp ? -width : width;
-                processImageUpdate(bi, 0, i,
-                                   destinationRegion.width, 1, 1, 1,
-                                   new int[]{0});
-                processImageProgress(100.0F * i/destinationRegion.height);
-            }
-        } else {
-            byte[] buf = new byte[lineLength];
-            int lineStride =
-                ((ComponentSampleModel)sampleModel).getScanlineStride();
-
-            if (isBottomUp) {
-                int lastLine =
-                    sourceRegion.y + (destinationRegion.height - 1) * scaleY;
-                iis.skipBytes(lineLength * (height - 1 - lastLine));
-            } else
-                iis.skipBytes(lineLength * sourceRegion.y);
-
-            int skipLength = lineLength * (scaleY - 1);
-
-            int k = destinationRegion.y * lineStride;
-            if (isBottomUp)
-                k += (destinationRegion.height - 1) * lineStride;
-            k += destinationRegion.x;
-
-            for (int j = 0, y = sourceRegion.y;
-                 j < destinationRegion.height; j++, y+=scaleY) {
-
-                if (abortRequested())
-                    break;
-                iis.read(buf, 0, lineLength);
-                for (int i = 0, m = sourceRegion.x;
-                     i < destinationRegion.width; i++, m += scaleX) {
-                    //get the bit and assign to the data buffer of the raster
-                    bdata[k + i] = buf[m];
-                }
-
-                k += isBottomUp ? -lineStride : lineStride;
-                iis.skipBytes(skipLength);
-                processImageUpdate(bi, 0, j,
-                                   destinationRegion.width, 1, 1, 1,
-                                   new int[]{0});
-                processImageProgress(100.0F*j/destinationRegion.height);
-            }
-        }
-    }
-
-    // Method to read 24 bit BMP image data
-    private void read24Bit(byte[] bdata) throws IOException {
-        // Padding bytes at the end of each scanline
-        // width * bitsPerPixel should be divisible by 32
-        int padding = width * 3 % 4;
-        if ( padding != 0)
-            padding = 4 - padding;
-
-        int lineStride = width * 3;
-        int lineLength = lineStride + padding;
-
-        if (noTransform) {
-            int j = isBottomUp ? (height -1) * width * 3 : 0;
-
-            for (int i=0; i<height; i++) {
-                if (abortRequested()) {
-                    break;
-                }
-                iis.readFully(bdata, j, lineStride);
-                iis.skipBytes(padding);
-                j += isBottomUp ? -lineStride : lineStride;
-                processImageUpdate(bi, 0, i,
-                                   destinationRegion.width, 1, 1, 1,
-                                   new int[]{0});
-                processImageProgress(100.0F * i/destinationRegion.height);
-            }
-        } else {
-            byte[] buf = new byte[lineLength];
-            lineStride =
-                ((ComponentSampleModel)sampleModel).getScanlineStride();
-
-            if (isBottomUp) {
-                int lastLine =
-                    sourceRegion.y + (destinationRegion.height - 1) * scaleY;
-                iis.skipBytes(lineLength * (height - 1 - lastLine));
-            } else
-                iis.skipBytes(lineLength * sourceRegion.y);
-
-            int skipLength = lineLength * (scaleY - 1);
-
-            int k = destinationRegion.y * lineStride;
-            if (isBottomUp)
-                k += (destinationRegion.height - 1) * lineStride;
-            k += destinationRegion.x * 3;
-
-            for (int j = 0, y = sourceRegion.y;
-                 j < destinationRegion.height; j++, y+=scaleY) {
-
-                if (abortRequested())
-                    break;
-                iis.read(buf, 0, lineLength);
-                for (int i = 0, m = 3 * sourceRegion.x;
-                     i < destinationRegion.width; i++, m += 3 * scaleX) {
-                    //get the bit and assign to the data buffer of the raster
-                    int n = 3 * i + k;
-                    for (int b = 0; b < destBands.length; b++)
-                        bdata[n + destBands[b]] = buf[m + sourceBands[b]];
-                }
-
-                k += isBottomUp ? -lineStride : lineStride;
-                iis.skipBytes(skipLength);
-                processImageUpdate(bi, 0, j,
-                                   destinationRegion.width, 1, 1, 1,
-                                   new int[]{0});
-                processImageProgress(100.0F*j/destinationRegion.height);
-            }
-        }
-    }
-
-    private void read16Bit(short sdata[]) throws IOException {
-        // Padding bytes at the end of each scanline
-        // width * bitsPerPixel should be divisible by 32
-        int padding = width * 2 % 4;
-
-        if ( padding != 0)
-            padding = 4 - padding;
-
-        int lineLength = width + padding / 2;
-
-        if (noTransform) {
-            int j = isBottomUp ? (height -1) * width : 0;
-            for (int i=0; i<height; i++) {
-                if (abortRequested()) {
-                    break;
-                }
-
-                iis.readFully(sdata, j, width);
-                iis.skipBytes(padding);
-
-                j += isBottomUp ? -width : width;
-                processImageUpdate(bi, 0, i,
-                                   destinationRegion.width, 1, 1, 1,
-                                   new int[]{0});
-                processImageProgress(100.0F * i/destinationRegion.height);
-            }
-        } else {
-            short[] buf = new short[lineLength];
-            int lineStride =
-                ((SinglePixelPackedSampleModel)sampleModel).getScanlineStride();
-
-            if (isBottomUp) {
-                int lastLine =
-                    sourceRegion.y + (destinationRegion.height - 1) * scaleY;
-                iis.skipBytes(lineLength * (height - 1 - lastLine) << 1);
-            } else
-                iis.skipBytes(lineLength * sourceRegion.y << 1);
-
-            int skipLength = lineLength * (scaleY - 1) << 1;
-
-            int k = destinationRegion.y * lineStride;
-            if (isBottomUp)
-                k += (destinationRegion.height - 1) * lineStride;
-            k += destinationRegion.x;
-
-            for (int j = 0, y = sourceRegion.y;
-                 j < destinationRegion.height; j++, y+=scaleY) {
-
-                if (abortRequested())
-                    break;
-                iis.readFully(buf, 0, lineLength);
-                for (int i = 0, m = sourceRegion.x;
-                     i < destinationRegion.width; i++, m += scaleX) {
-                    //get the bit and assign to the data buffer of the raster
-                    sdata[k + i] = buf[m];
-                }
-
-                k += isBottomUp ? -lineStride : lineStride;
-                iis.skipBytes(skipLength);
-                processImageUpdate(bi, 0, j,
-                                   destinationRegion.width, 1, 1, 1,
-                                   new int[]{0});
-                processImageProgress(100.0F*j/destinationRegion.height);
-            }
-        }
-    }
-
-    private void read32Bit(int idata[]) throws IOException {
-        if (noTransform) {
-            int j = isBottomUp ? (height -1) * width : 0;
-
-            for (int i=0; i<height; i++) {
-                if (abortRequested()) {
-                    break;
-                }
-                iis.readFully(idata, j, width);
-                j += isBottomUp ? -width : width;
-                processImageUpdate(bi, 0, i,
-                                   destinationRegion.width, 1, 1, 1,
-                                   new int[]{0});
-                processImageProgress(100.0F * i/destinationRegion.height);
-            }
-        } else {
-            int[] buf = new int[width];
-            int lineStride =
-                ((SinglePixelPackedSampleModel)sampleModel).getScanlineStride();
-
-            if (isBottomUp) {
-                int lastLine =
-                    sourceRegion.y + (destinationRegion.height - 1) * scaleY;
-                iis.skipBytes(width * (height - 1 - lastLine) << 2);
-            } else
-                iis.skipBytes(width * sourceRegion.y << 2);
-
-            int skipLength = width * (scaleY - 1) << 2;
-
-            int k = destinationRegion.y * lineStride;
-            if (isBottomUp)
-                k += (destinationRegion.height - 1) * lineStride;
-            k += destinationRegion.x;
-
-            for (int j = 0, y = sourceRegion.y;
-                 j < destinationRegion.height; j++, y+=scaleY) {
-
-                if (abortRequested())
-                    break;
-                iis.readFully(buf, 0, width);
-                for (int i = 0, m = sourceRegion.x;
-                     i < destinationRegion.width; i++, m += scaleX) {
-                    //get the bit and assign to the data buffer of the raster
-                    idata[k + i] = buf[m];
-                }
-
-                k += isBottomUp ? -lineStride : lineStride;
-                iis.skipBytes(skipLength);
-                processImageUpdate(bi, 0, j,
-                                   destinationRegion.width, 1, 1, 1,
-                                   new int[]{0});
-                processImageProgress(100.0F*j/destinationRegion.height);
-            }
-        }
-    }
-
-    private void readRLE8(byte bdata[]) throws IOException {
-        // If imageSize field is not provided, calculate it.
-        int imSize = (int)imageSize;
-        if (imSize == 0) {
-            imSize = (int)(bitmapFileSize - bitmapOffset);
-        }
-
-        int padding = 0;
-        // If width is not 32 bit aligned, then while uncompressing each
-        // scanline will have padding bytes, calculate the amount of padding
-        int remainder = width % 4;
-        if (remainder != 0) {
-            padding = 4 - remainder;
-        }
-
-        // Read till we have the whole image
-        byte values[] = new byte[imSize];
-        int bytesRead = 0;
-        iis.readFully(values, 0, imSize);
-
-        // Since data is compressed, decompress it
-        decodeRLE8(imSize, padding, values, bdata);
-    }
-
-    private void decodeRLE8(int imSize,
-                            int padding,
-                            byte[] values,
-                            byte[] bdata) throws IOException {
-
-        byte val[] = new byte[width * height];
-        int count = 0, l = 0;
-        int value;
-        boolean flag = false;
-        int lineNo = isBottomUp ? height - 1 : 0;
-        int lineStride =
-            ((ComponentSampleModel)sampleModel).getScanlineStride();
-        int finished = 0;
-
-        while (count != imSize) {
-            value = values[count++] & 0xff;
-            if (value == 0) {
-                switch(values[count++] & 0xff) {
-
-                case 0:
-                    // End-of-scanline marker
-                    if (lineNo >= sourceRegion.y &&
-                        lineNo < sourceRegion.y + sourceRegion.height) {
-                        if (noTransform) {
-                            int pos = lineNo * width;
-                            for(int i = 0; i < width; i++)
-                                bdata[pos++] = val[i];
-                            processImageUpdate(bi, 0, lineNo,
-                                               destinationRegion.width, 1, 1, 1,
-                                               new int[]{0});
-                            finished++;
-                        } else if ((lineNo - sourceRegion.y) % scaleY == 0) {
-                            int currentLine = (lineNo - sourceRegion.y) / scaleY +
-                                destinationRegion.y;
-                            int pos = currentLine * lineStride;
-                            pos += destinationRegion.x;
-                            for (int i = sourceRegion.x;
-                                 i < sourceRegion.x + sourceRegion.width;
-                                 i += scaleX)
-                                bdata[pos++] = val[i];
-                            processImageUpdate(bi, 0, currentLine,
-                                               destinationRegion.width, 1, 1, 1,
-                                               new int[]{0});
-                            finished++;
-                        }
-                    }
-                    processImageProgress(100.0F * finished / destinationRegion.height);
-                    lineNo += isBottomUp ? -1 : 1;
-                    l = 0;
-
-                    if (abortRequested()) {
-                        flag = true;
-                    }
-
-                    break;
-
-                case 1:
-                    // End-of-RLE marker
-                    flag = true;
-                    break;
-
-                case 2:
-                    // delta or vector marker
-                    int xoff = values[count++] & 0xff;
-                    int yoff = values[count] & 0xff;
-                    // Move to the position xoff, yoff down
-                    l += xoff + yoff*width;
-                    break;
-
-                default:
-                    int end = values[count-1] & 0xff;
-                    for (int i=0; i<end; i++) {
-                        val[l++] = (byte)(values[count++] & 0xff);
-                    }
-
-                    // Whenever end pixels can fit into odd number of bytes,
-                    // an extra padding byte will be present, so skip that.
-                    if ((end & 1) == 1) {
-                        count++;
-                    }
-                }
-            } else {
-                for (int i=0; i<value; i++) {
-                    val[l++] = (byte)(values[count] & 0xff);
-                }
-
-                count++;
-            }
-
-            // If End-of-RLE data, then exit the while loop
-            if (flag) {
-                break;
-            }
-        }
-    }
-
-    private void readRLE4(byte[] bdata) throws IOException {
-
-        // If imageSize field is not specified, calculate it.
-        int imSize = (int)imageSize;
-        if (imSize == 0) {
-            imSize = (int)(bitmapFileSize - bitmapOffset);
-        }
-
-        int padding = 0;
-        // If width is not 32 byte aligned, then while uncompressing each
-        // scanline will have padding bytes, calculate the amount of padding
-        int remainder = width % 4;
-        if (remainder != 0) {
-            padding = 4 - remainder;
-        }
-
-        // Read till we have the whole image
-        byte[] values = new byte[imSize];
-        iis.readFully(values, 0, imSize);
-
-        // Decompress the RLE4 compressed data.
-        decodeRLE4(imSize, padding, values, bdata);
-    }
-
-    private void decodeRLE4(int imSize,
-                            int padding,
-                            byte[] values,
-                            byte[] bdata) throws IOException {
-        byte[] val = new byte[width];
-        int count = 0, l = 0;
-        int value;
-        boolean flag = false;
-        int lineNo = isBottomUp ? height - 1 : 0;
-        int lineStride =
-            ((MultiPixelPackedSampleModel)sampleModel).getScanlineStride();
-        int finished = 0;
-
-        while (count != imSize) {
-
-            value = values[count++] & 0xFF;
-            if (value == 0) {
-
-
-                // Absolute mode
-                switch(values[count++] & 0xFF) {
-
-                case 0:
-                    // End-of-scanline marker
-                    // End-of-scanline marker
-                    if (lineNo >= sourceRegion.y &&
-                        lineNo < sourceRegion.y + sourceRegion.height) {
-                        if (noTransform) {
-                            int pos = lineNo * (width + 1 >> 1);
-                            for(int i = 0, j = 0; i < width >> 1; i++)
-                                bdata[pos++] =
-                                    (byte)((val[j++] << 4) | val[j++]);
-                            if ((width & 1) == 1)
-                                bdata[pos] |= val[width - 1] << 4;
-
-                            processImageUpdate(bi, 0, lineNo,
-                                               destinationRegion.width, 1, 1, 1,
-                                               new int[]{0});
-                            finished++;
-                        } else if ((lineNo - sourceRegion.y) % scaleY == 0) {
-                            int currentLine = (lineNo - sourceRegion.y) / scaleY +
-                                destinationRegion.y;
-                            int pos = currentLine * lineStride;
-                            pos += destinationRegion.x >> 1;
-                            int shift = (1 - (destinationRegion.x & 1)) << 2;
-                            for (int i = sourceRegion.x;
-                                 i < sourceRegion.x + sourceRegion.width;
-                                 i += scaleX) {
-                                bdata[pos] |= val[i] << shift;
-                                shift += 4;
-                                if (shift == 4) {
-                                    pos++;
-                                }
-                                shift &= 7;
-                            }
-                            processImageUpdate(bi, 0, currentLine,
-                                               destinationRegion.width, 1, 1, 1,
-                                               new int[]{0});
-                            finished++;
-                        }
-                    }
-                    processImageProgress(100.0F * finished / destinationRegion.height);
-                    lineNo += isBottomUp ? -1 : 1;
-                    l = 0;
-
-                    if (abortRequested()) {
-                        flag = true;
-                    }
-
-                    break;
-
-                case 1:
-                    // End-of-RLE marker
-                    flag = true;
-                    break;
-
-                case 2:
-                    // delta or vector marker
-                    int xoff = values[count++] & 0xFF;
-                    int yoff = values[count] & 0xFF;
-                    // Move to the position xoff, yoff down
-                    l += xoff + yoff*width;
-                    break;
-
-                default:
-                    int end = values[count-1] & 0xFF;
-                    for (int i=0; i<end; i++) {
-                        val[l++] = (byte)(((i & 1) == 0) ? (values[count] & 0xf0) >> 4
-                                          : (values[count++] & 0x0f));
-                    }
-
-                    // When end is odd, the above for loop does not
-                    // increment count, so do it now.
-                    if ((end & 1) == 1) {
-                        count++;
-                    }
-
-                    // Whenever end pixels can fit into odd number of bytes,
-                    // an extra padding byte will be present, so skip that.
-                    if ((((int)Math.ceil(end/2)) & 1) ==1 ) {
-                        count++;
-                    }
-                    break;
-                }
-            } else {
-                // Encoded mode
-                int alternate[] = { (values[count] & 0xf0) >> 4,
-                                    values[count] & 0x0f };
-                for (int i=0; (i < value) && (l < width); i++) {
-                    val[l++] = (byte)alternate[i & 1];
-                }
-
-                count++;
-            }
-
-            // If End-of-RLE data, then exit the while loop
-            if (flag) {
-                break;
-            }
-        }
-    }
-
-    /** Decodes the jpeg/png image embedded in the bitmap using any jpeg
-     *  ImageIO-style plugin.
-     *
-     * @param bi The destination <code>BufferedImage</code>.
-     * @param bmpParam The <code>ImageReadParam</code> for decoding this
-     *          BMP image.  The parameters for subregion, band selection and
-     *          subsampling are used in decoding the jpeg image.
-     */
-
-    private BufferedImage readEmbedded(int type,
-                              BufferedImage bi, ImageReadParam bmpParam)
-      throws IOException {
-        String format;
-        switch(type) {
-          case BI_JPEG:
-              format = "JPEG";
-              break;
-          case BI_PNG:
-              format = "PNG";
-              break;
-          default:
-              throw new
-                  IOException("Unexpected compression type: " + type);
-        }
-        ImageReader reader =
-            ImageIO.getImageReadersByFormatName(format).next();
-        if (reader == null) {
-            throw new RuntimeException(I18N.getString("BMPImageReader4") +
-                                       " " + format);
-        }
-        // prepare input
-        byte[] buff = new byte[(int)imageSize];
-        iis.read(buff);
-        reader.setInput(ImageIO.createImageInputStream(new ByteArrayInputStream(buff)));
-        if (bi == null) {
-            ImageTypeSpecifier embType = reader.getImageTypes(0).next();
-            bi = embType.createBufferedImage(destinationRegion.x +
-                                             destinationRegion.width,
-                                             destinationRegion.y +
-                                             destinationRegion.height);
-        }
-
-        reader.addIIOReadProgressListener(new EmbeddedProgressAdapter() {
-                public void imageProgress(ImageReader source,
-                                          float percentageDone)
-                {
-                    processImageProgress(percentageDone);
-                }
-            });
-
-        reader.addIIOReadUpdateListener(new IIOReadUpdateListener() {
-                public void imageUpdate(ImageReader source,
-                                        BufferedImage theImage,
-                                        int minX, int minY,
-                                        int width, int height,
-                                        int periodX, int periodY,
-                                        int[] bands)
-                {
-                    processImageUpdate(theImage, minX, minY,
-                                       width, height,
-                                       periodX, periodY, bands);
-                }
-                public void passComplete(ImageReader source,
-                                         BufferedImage theImage)
-                {
-                    processPassComplete(theImage);
-                }
-                public void passStarted(ImageReader source,
-                                        BufferedImage theImage,
-                                        int pass,
-                                        int minPass, int maxPass,
-                                        int minX, int minY,
-                                        int periodX, int periodY,
-                                        int[] bands)
-                {
-                    processPassStarted(theImage, pass, minPass, maxPass,
-                                       minX, minY, periodX, periodY,
-                                       bands);
-                }
-                public void thumbnailPassComplete(ImageReader source,
-                                                  BufferedImage thumb) {}
-                public void thumbnailPassStarted(ImageReader source,
-                                                 BufferedImage thumb,
-                                                 int pass,
-                                                 int minPass, int maxPass,
-                                                 int minX, int minY,
-                                                 int periodX, int periodY,
-                                                 int[] bands) {}
-                public void thumbnailUpdate(ImageReader source,
-                                            BufferedImage theThumbnail,
-                                            int minX, int minY,
-                                            int width, int height,
-                                            int periodX, int periodY,
-                                            int[] bands) {}
-            });
-
-        reader.addIIOReadWarningListener(new IIOReadWarningListener() {
-                public void warningOccurred(ImageReader source, String warning)
-                {
-                    processWarningOccurred(warning);
-                }
-            });
-
-        ImageReadParam param = reader.getDefaultReadParam();
-        param.setDestination(bi);
-        param.setDestinationBands(bmpParam.getDestinationBands());
-        param.setDestinationOffset(bmpParam.getDestinationOffset());
-        param.setSourceBands(bmpParam.getSourceBands());
-        param.setSourceRegion(bmpParam.getSourceRegion());
-        param.setSourceSubsampling(bmpParam.getSourceXSubsampling(),
-                                   bmpParam.getSourceYSubsampling(),
-                                   bmpParam.getSubsamplingXOffset(),
-                                   bmpParam.getSubsamplingYOffset());
-        reader.read(0, param);
-        return bi;
-    }
-
-    private class EmbeddedProgressAdapter implements IIOReadProgressListener {
-        public void imageComplete(ImageReader src) {}
-        public void imageProgress(ImageReader src, float percentageDone) {}
-        public void imageStarted(ImageReader src, int imageIndex) {}
-        public void thumbnailComplete(ImageReader src) {}
-        public void thumbnailProgress(ImageReader src, float percentageDone) {}
-        public void thumbnailStarted(ImageReader src, int iIdx, int tIdx) {}
-        public void sequenceComplete(ImageReader src) {}
-        public void sequenceStarted(ImageReader src, int minIndex) {}
-        public void readAborted(ImageReader src) {}
-    }
-
-    private static Boolean isLinkedProfileDisabled = null;
-
-    private static boolean isLinkedProfileAllowed() {
-        if (isLinkedProfileDisabled == null) {
-            PrivilegedAction<Boolean> a = new PrivilegedAction<Boolean>() {
-                public Boolean run() {
-                    return Boolean.getBoolean("sun.imageio.plugins.bmp.disableLinkedProfiles");
-                }
-            };
-            isLinkedProfileDisabled = AccessController.doPrivileged(a);
-        }
-        return !isLinkedProfileDisabled;
-    }
-
-    private static Boolean isWindowsPlatform = null;
-
-    /**
-     * Verifies whether the byte array contans a unc path.
-     * Non-UNC path examples:
-     *  c:\path\to\file  - simple notation
-     *  \\?\c:\path\to\file - long notation
-     *
-     * UNC path examples:
-     *  \\server\share - a UNC path in simple notation
-     *  \\?\UNC\server\share - a UNC path in long notation
-     *  \\.\some\device - a path to device.
-     */
-    private static boolean isUncOrDevicePath(byte[] p) {
-        if (isWindowsPlatform == null) {
-            PrivilegedAction<Boolean> a = new PrivilegedAction<Boolean>() {
-                public Boolean run() {
-                    String osname = System.getProperty("os.name");
-                    return (osname != null &&
-                            osname.toLowerCase().startsWith("win"));
-                }
-            };
-            isWindowsPlatform = AccessController.doPrivileged(a);
-        }
-
-        if (!isWindowsPlatform) {
-            /* no need for the check on platforms except windows */
-            return false;
-        }
-
-        /* normalize prefix of the path */
-        if (p[0] == '/') p[0] = '\\';
-        if (p[1] == '/') p[1] = '\\';
-        if (p[3] == '/') p[3] = '\\';
-
-
-        if ((p[0] == '\\') && (p[1] == '\\')) {
-            if ((p[2] == '?') && (p[3] == '\\')) {
-                // long path: whether unc or local
-                return ((p[4] == 'U' || p[4] == 'u') &&
-                        (p[5] == 'N' || p[5] == 'n') &&
-                        (p[6] == 'C' || p[6] == 'c'));
-            } else {
-                // device path or short unc notation
-                return true;
-            }
-        } else {
-            return false;
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/plugins/bmp/BMPImageReaderSpi.java b/ojluni/src/main/java/com/sun/imageio/plugins/bmp/BMPImageReaderSpi.java
deleted file mode 100755
index 7e406a0..0000000
--- a/ojluni/src/main/java/com/sun/imageio/plugins/bmp/BMPImageReaderSpi.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Copyright (c) 2003, 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
- * 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.imageio.plugins.bmp;
-
-import java.util.Locale;
-import javax.imageio.spi.ImageReaderSpi;
-import javax.imageio.stream.ImageInputStream;
-import javax.imageio.spi.IIORegistry;
-import javax.imageio.spi.ServiceRegistry;
-import java.io.IOException;
-import javax.imageio.ImageReader;
-import javax.imageio.IIOException;
-
-public class BMPImageReaderSpi extends ImageReaderSpi {
-
-    private static String [] writerSpiNames =
-        {"com.sun.imageio.plugins.bmp.BMPImageWriterSpi"};
-    private static String[] formatNames = {"bmp", "BMP"};
-    private static String[] entensions = {"bmp"};
-    private static String[] mimeType = {"image/bmp"};
-
-    private boolean registered = false;
-
-    public BMPImageReaderSpi() {
-        super("Oracle Corporation",
-              "1.0",
-              formatNames,
-              entensions,
-              mimeType,
-              "com.sun.imageio.plugins.bmp.BMPImageReader",
-              new Class[] { ImageInputStream.class },
-              writerSpiNames,
-              false,
-              null, null, null, null,
-              true,
-              BMPMetadata.nativeMetadataFormatName,
-              "com.sun.imageio.plugins.bmp.BMPMetadataFormat",
-              null, null);
-    }
-
-    public void onRegistration(ServiceRegistry registry,
-                               Class<?> category) {
-        if (registered) {
-            return;
-        }
-        registered = true;
-    }
-
-    public String getDescription(Locale locale) {
-        return "Standard BMP Image Reader";
-    }
-
-    public boolean canDecodeInput(Object source) throws IOException {
-        if (!(source instanceof ImageInputStream)) {
-            return false;
-        }
-
-        ImageInputStream stream = (ImageInputStream)source;
-        byte[] b = new byte[2];
-        stream.mark();
-        stream.readFully(b);
-        stream.reset();
-
-        return (b[0] == 0x42) && (b[1] == 0x4d);
-    }
-
-    public ImageReader createReaderInstance(Object extension)
-        throws IIOException {
-        return new BMPImageReader(this);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/plugins/bmp/BMPImageWriter.java b/ojluni/src/main/java/com/sun/imageio/plugins/bmp/BMPImageWriter.java
deleted file mode 100755
index bfed710..0000000
--- a/ojluni/src/main/java/com/sun/imageio/plugins/bmp/BMPImageWriter.java
+++ /dev/null
@@ -1,1532 +0,0 @@
-/*
- * Copyright (c) 2003, 2007, 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.imageio.plugins.bmp;
-
-import java.awt.Point;
-import java.awt.Rectangle;
-import java.awt.image.ColorModel;
-import java.awt.image.ComponentSampleModel;
-import java.awt.image.DataBuffer;
-import java.awt.image.DataBufferByte;
-import java.awt.image.DataBufferInt;
-import java.awt.image.DataBufferShort;
-import java.awt.image.DataBufferUShort;
-import java.awt.image.DirectColorModel;
-import java.awt.image.IndexColorModel;
-import java.awt.image.MultiPixelPackedSampleModel;
-import java.awt.image.BandedSampleModel;
-import java.awt.image.Raster;
-import java.awt.image.RenderedImage;
-import java.awt.image.SampleModel;
-import java.awt.image.SinglePixelPackedSampleModel;
-import java.awt.image.WritableRaster;
-import java.awt.image.BufferedImage;
-
-import java.io.IOException;
-import java.io.ByteArrayOutputStream;
-import java.nio.ByteOrder;
-import java.util.Iterator;
-
-import javax.imageio.IIOImage;
-import javax.imageio.IIOException;
-import javax.imageio.ImageIO;
-import javax.imageio.ImageTypeSpecifier;
-import javax.imageio.ImageWriteParam;
-import javax.imageio.ImageWriter;
-import javax.imageio.metadata.IIOMetadata;
-import javax.imageio.metadata.IIOMetadataNode;
-import javax.imageio.metadata.IIOMetadataFormatImpl;
-import javax.imageio.metadata.IIOInvalidTreeException;
-import javax.imageio.spi.ImageWriterSpi;
-import javax.imageio.stream.ImageOutputStream;
-import javax.imageio.event.IIOWriteProgressListener;
-import javax.imageio.event.IIOWriteWarningListener;
-
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-
-import javax.imageio.plugins.bmp.BMPImageWriteParam;
-import com.sun.imageio.plugins.common.ImageUtil;
-import com.sun.imageio.plugins.common.I18N;
-
-/**
- * The Java Image IO plugin writer for encoding a binary RenderedImage into
- * a BMP format.
- *
- * The encoding process may clip, subsample using the parameters
- * specified in the <code>ImageWriteParam</code>.
- *
- * @see javax.imageio.plugins.bmp.BMPImageWriteParam
- */
-public class BMPImageWriter extends ImageWriter implements BMPConstants {
-    /** The output stream to write into */
-    private ImageOutputStream stream = null;
-    private ByteArrayOutputStream embedded_stream = null;
-    private int version;
-    private int compressionType;
-    private boolean isTopDown;
-    private int w, h;
-    private int compImageSize = 0;
-    private int[] bitMasks;
-    private int[] bitPos;
-    private byte[] bpixels;
-    private short[] spixels;
-    private int[] ipixels;
-
-    /** Constructs <code>BMPImageWriter</code> based on the provided
-     *  <code>ImageWriterSpi</code>.
-     */
-    public BMPImageWriter(ImageWriterSpi originator) {
-        super(originator);
-    }
-
-    public void setOutput(Object output) {
-        super.setOutput(output); // validates output
-        if (output != null) {
-            if (!(output instanceof ImageOutputStream))
-                throw new IllegalArgumentException(I18N.getString("BMPImageWriter0"));
-            this.stream = (ImageOutputStream)output;
-            stream.setByteOrder(ByteOrder.LITTLE_ENDIAN);
-        } else
-            this.stream = null;
-    }
-
-    public ImageWriteParam getDefaultWriteParam() {
-        return new BMPImageWriteParam();
-    }
-
-    public IIOMetadata getDefaultStreamMetadata(ImageWriteParam param) {
-        return null;
-    }
-
-    public IIOMetadata getDefaultImageMetadata(ImageTypeSpecifier imageType,
-                                               ImageWriteParam param) {
-        BMPMetadata meta = new BMPMetadata();
-        meta.bmpVersion = VERSION_3;
-        meta.compression = getPreferredCompressionType(imageType);
-        if (param != null
-            && param.getCompressionMode() == ImageWriteParam.MODE_EXPLICIT) {
-            meta.compression = getCompressionType(param.getCompressionType());
-        }
-        meta.bitsPerPixel = (short)imageType.getColorModel().getPixelSize();
-        return meta;
-    }
-
-    public IIOMetadata convertStreamMetadata(IIOMetadata inData,
-                                             ImageWriteParam param) {
-        return null;
-    }
-
-    public IIOMetadata convertImageMetadata(IIOMetadata metadata,
-                                            ImageTypeSpecifier type,
-                                            ImageWriteParam param) {
-        return null;
-    }
-
-    public boolean canWriteRasters() {
-        return true;
-    }
-
-    public void write(IIOMetadata streamMetadata,
-                      IIOImage image,
-                      ImageWriteParam param) throws IOException {
-
-        if (stream == null) {
-            throw new IllegalStateException(I18N.getString("BMPImageWriter7"));
-        }
-
-        if (image == null) {
-            throw new IllegalArgumentException(I18N.getString("BMPImageWriter8"));
-        }
-
-        clearAbortRequest();
-        processImageStarted(0);
-        if (param == null)
-            param = getDefaultWriteParam();
-
-        BMPImageWriteParam bmpParam = (BMPImageWriteParam)param;
-
-        // Default is using 24 bits per pixel.
-        int bitsPerPixel = 24;
-        boolean isPalette = false;
-        int paletteEntries = 0;
-        IndexColorModel icm = null;
-
-        RenderedImage input = null;
-        Raster inputRaster = null;
-        boolean writeRaster = image.hasRaster();
-        Rectangle sourceRegion = param.getSourceRegion();
-        SampleModel sampleModel = null;
-        ColorModel colorModel = null;
-
-        compImageSize = 0;
-
-        if (writeRaster) {
-            inputRaster = image.getRaster();
-            sampleModel = inputRaster.getSampleModel();
-            colorModel = ImageUtil.createColorModel(null, sampleModel);
-            if (sourceRegion == null)
-                sourceRegion = inputRaster.getBounds();
-            else
-                sourceRegion = sourceRegion.intersection(inputRaster.getBounds());
-        } else {
-            input = image.getRenderedImage();
-            sampleModel = input.getSampleModel();
-            colorModel = input.getColorModel();
-            Rectangle rect = new Rectangle(input.getMinX(), input.getMinY(),
-                                           input.getWidth(), input.getHeight());
-            if (sourceRegion == null)
-                sourceRegion = rect;
-            else
-                sourceRegion = sourceRegion.intersection(rect);
-        }
-
-        IIOMetadata imageMetadata = image.getMetadata();
-        BMPMetadata bmpImageMetadata = null;
-        if (imageMetadata != null
-            && imageMetadata instanceof BMPMetadata)
-        {
-            bmpImageMetadata = (BMPMetadata)imageMetadata;
-        } else {
-            ImageTypeSpecifier imageType =
-                new ImageTypeSpecifier(colorModel, sampleModel);
-
-            bmpImageMetadata = (BMPMetadata)getDefaultImageMetadata(imageType,
-                                                                    param);
-        }
-
-        if (sourceRegion.isEmpty())
-            throw new RuntimeException(I18N.getString("BMPImageWrite0"));
-
-        int scaleX = param.getSourceXSubsampling();
-        int scaleY = param.getSourceYSubsampling();
-        int xOffset = param.getSubsamplingXOffset();
-        int yOffset = param.getSubsamplingYOffset();
-
-        // cache the data type;
-        int dataType = sampleModel.getDataType();
-
-        sourceRegion.translate(xOffset, yOffset);
-        sourceRegion.width -= xOffset;
-        sourceRegion.height -= yOffset;
-
-        int minX = sourceRegion.x / scaleX;
-        int minY = sourceRegion.y / scaleY;
-        w = (sourceRegion.width + scaleX - 1) / scaleX;
-        h = (sourceRegion.height + scaleY - 1) / scaleY;
-        xOffset = sourceRegion.x % scaleX;
-        yOffset = sourceRegion.y % scaleY;
-
-        Rectangle destinationRegion = new Rectangle(minX, minY, w, h);
-        boolean noTransform = destinationRegion.equals(sourceRegion);
-
-        // Raw data can only handle bytes, everything greater must be ASCII.
-        int[] sourceBands = param.getSourceBands();
-        boolean noSubband = true;
-        int numBands = sampleModel.getNumBands();
-
-        if (sourceBands != null) {
-            sampleModel = sampleModel.createSubsetSampleModel(sourceBands);
-            colorModel = null;
-            noSubband = false;
-            numBands = sampleModel.getNumBands();
-        } else {
-            sourceBands = new int[numBands];
-            for (int i = 0; i < numBands; i++)
-                sourceBands[i] = i;
-        }
-
-        int[] bandOffsets = null;
-        boolean bgrOrder = true;
-
-        if (sampleModel instanceof ComponentSampleModel) {
-            bandOffsets = ((ComponentSampleModel)sampleModel).getBandOffsets();
-            if (sampleModel instanceof BandedSampleModel) {
-                // for images with BandedSampleModel we can not work
-                //  with raster directly and must use writePixels()
-                bgrOrder = false;
-            } else {
-                // we can work with raster directly only in case of
-                // BGR component order.
-                // In any other case we must use writePixels()
-                for (int i = 0; i < bandOffsets.length; i++) {
-                    bgrOrder &= (bandOffsets[i] == (bandOffsets.length - i - 1));
-                }
-            }
-        } else {
-            if (sampleModel instanceof SinglePixelPackedSampleModel) {
-
-                // BugId 4892214: we can not work with raster directly
-                // if image have different color order than RGB.
-                // We should use writePixels() for such images.
-                int[] bitOffsets = ((SinglePixelPackedSampleModel)sampleModel).getBitOffsets();
-                for (int i=0; i<bitOffsets.length-1; i++) {
-                    bgrOrder &= bitOffsets[i] > bitOffsets[i+1];
-                }
-            }
-        }
-
-        if (bandOffsets == null) {
-            // we will use getPixels() to extract pixel data for writePixels()
-            // Please note that getPixels() provides rgb bands order.
-            bandOffsets = new int[numBands];
-            for (int i = 0; i < numBands; i++)
-                bandOffsets[i] = i;
-        }
-
-        noTransform &= bgrOrder;
-
-        int sampleSize[] = sampleModel.getSampleSize();
-
-        //XXX: check more
-
-        // Number of bytes that a scanline for the image written out will have.
-        int destScanlineBytes = w * numBands;
-
-        switch(bmpParam.getCompressionMode()) {
-        case ImageWriteParam.MODE_EXPLICIT:
-            compressionType = getCompressionType(bmpParam.getCompressionType());
-            break;
-        case ImageWriteParam.MODE_COPY_FROM_METADATA:
-            compressionType = bmpImageMetadata.compression;
-            break;
-        case ImageWriteParam.MODE_DEFAULT:
-            compressionType = getPreferredCompressionType(colorModel, sampleModel);
-            break;
-        default:
-            // ImageWriteParam.MODE_DISABLED:
-            compressionType = BI_RGB;
-        }
-
-        if (!canEncodeImage(compressionType, colorModel, sampleModel)) {
-            throw new IOException("Image can not be encoded with compression type "
-                                  + compressionTypeNames[compressionType]);
-        }
-
-        byte r[] = null, g[] = null, b[] = null, a[] = null;
-
-        if (compressionType == BMPConstants.BI_BITFIELDS) {
-            bitsPerPixel =
-                DataBuffer.getDataTypeSize(sampleModel.getDataType());
-
-            if (bitsPerPixel != 16 && bitsPerPixel != 32) {
-                // we should use 32bpp images in case of BI_BITFIELD
-                // compression to avoid color conversion artefacts
-                bitsPerPixel = 32;
-
-                // Setting this flag to false ensures that generic
-                // writePixels() will be used to store image data
-                noTransform = false;
-            }
-
-            destScanlineBytes = w * bitsPerPixel + 7 >> 3;
-
-            isPalette = true;
-            paletteEntries = 3;
-            r = new byte[paletteEntries];
-            g = new byte[paletteEntries];
-            b = new byte[paletteEntries];
-            a = new byte[paletteEntries];
-
-            int rmask = 0x00ff0000;
-            int gmask = 0x0000ff00;
-            int bmask = 0x000000ff;
-
-            if (bitsPerPixel == 16) {
-                /* NB: canEncodeImage() ensures we have image of
-                 * either USHORT_565_RGB or USHORT_555_RGB type here.
-                 * Technically, it should work for other direct color
-                 * model types but it might be non compatible with win98
-                 * and friends.
-                 */
-                if (colorModel instanceof DirectColorModel) {
-                    DirectColorModel dcm = (DirectColorModel)colorModel;
-                    rmask = dcm.getRedMask();
-                    gmask = dcm.getGreenMask();
-                    bmask = dcm.getBlueMask();
-                } else {
-                    // it is unlikely, but if it happens, we should throw
-                    // an exception related to unsupported image format
-                    throw new IOException("Image can not be encoded with " +
-                                          "compression type " +
-                                          compressionTypeNames[compressionType]);
-                }
-            }
-            writeMaskToPalette(rmask, 0, r, g, b, a);
-            writeMaskToPalette(gmask, 1, r, g, b, a);
-            writeMaskToPalette(bmask, 2, r, g, b, a);
-
-            if (!noTransform) {
-                // prepare info for writePixels procedure
-                bitMasks = new int[3];
-                bitMasks[0] = rmask;
-                bitMasks[1] = gmask;
-                bitMasks[2] = bmask;
-
-                bitPos = new int[3];
-                bitPos[0] = firstLowBit(rmask);
-                bitPos[1] = firstLowBit(gmask);
-                bitPos[2] = firstLowBit(bmask);
-            }
-
-            if (colorModel instanceof IndexColorModel) {
-                icm = (IndexColorModel)colorModel;
-            }
-        } else { // handle BI_RGB compression
-            if (colorModel instanceof IndexColorModel) {
-                isPalette = true;
-                icm = (IndexColorModel)colorModel;
-                paletteEntries = icm.getMapSize();
-
-                if (paletteEntries <= 2) {
-                    bitsPerPixel = 1;
-                    destScanlineBytes = w + 7 >> 3;
-                } else if (paletteEntries <= 16) {
-                    bitsPerPixel = 4;
-                    destScanlineBytes = w + 1 >> 1;
-                } else if (paletteEntries <= 256) {
-                    bitsPerPixel = 8;
-                } else {
-                    // Cannot be written as a Palette image. So write out as
-                    // 24 bit image.
-                    bitsPerPixel = 24;
-                    isPalette = false;
-                    paletteEntries = 0;
-                    destScanlineBytes = w * 3;
-                }
-
-                if (isPalette == true) {
-                    r = new byte[paletteEntries];
-                    g = new byte[paletteEntries];
-                    b = new byte[paletteEntries];
-                    a = new byte[paletteEntries];
-
-                    icm.getAlphas(a);
-                    icm.getReds(r);
-                    icm.getGreens(g);
-                    icm.getBlues(b);
-                }
-
-            } else {
-                // Grey scale images
-                if (numBands == 1) {
-
-                    isPalette = true;
-                    paletteEntries = 256;
-                    bitsPerPixel = sampleSize[0];
-
-                    destScanlineBytes = (w * bitsPerPixel + 7 >> 3);
-
-                    r = new byte[256];
-                    g = new byte[256];
-                    b = new byte[256];
-                    a = new byte[256];
-
-                    for (int i = 0; i < 256; i++) {
-                        r[i] = (byte)i;
-                        g[i] = (byte)i;
-                        b[i] = (byte)i;
-                        a[i] = (byte)255;
-                    }
-
-                } else {
-                    if (sampleModel instanceof SinglePixelPackedSampleModel &&
-                        noSubband)
-                    {
-                        /* NB: the actual pixel size can be smaller than
-                         * size of used DataBuffer element.
-                         * For example: in case of TYPE_INT_RGB actual pixel
-                         * size is 24 bits, but size of DataBuffere element
-                         * is 32 bits
-                         */
-                        int[] sample_sizes = sampleModel.getSampleSize();
-                        bitsPerPixel = 0;
-                        for (int size : sample_sizes) {
-                            bitsPerPixel += size;
-                        }
-                        bitsPerPixel = roundBpp(bitsPerPixel);
-                        if (bitsPerPixel != DataBuffer.getDataTypeSize(sampleModel.getDataType())) {
-                            noTransform = false;
-                        }
-                        destScanlineBytes = w * bitsPerPixel + 7 >> 3;
-                    }
-                }
-            }
-        }
-
-        // actual writing of image data
-        int fileSize = 0;
-        int offset = 0;
-        int headerSize = 0;
-        int imageSize = 0;
-        int xPelsPerMeter = 0;
-        int yPelsPerMeter = 0;
-        int colorsUsed = 0;
-        int colorsImportant = paletteEntries;
-
-        // Calculate padding for each scanline
-        int padding = destScanlineBytes % 4;
-        if (padding != 0) {
-            padding = 4 - padding;
-        }
-
-
-        // FileHeader is 14 bytes, BitmapHeader is 40 bytes,
-        // add palette size and that is where the data will begin
-        offset = 54 + paletteEntries * 4;
-
-        imageSize = (destScanlineBytes + padding) * h;
-        fileSize = imageSize + offset;
-        headerSize = 40;
-
-        long headPos = stream.getStreamPosition();
-
-        writeFileHeader(fileSize, offset);
-
-        /* According to MSDN description, the top-down image layout
-         * is allowed only if compression type is BI_RGB or BI_BITFIELDS.
-         * Images with any other compression type must be wrote in the
-         * bottom-up layout.
-         */
-        if (compressionType == BMPConstants.BI_RGB ||
-            compressionType == BMPConstants.BI_BITFIELDS)
-        {
-            isTopDown = bmpParam.isTopDown();
-        } else {
-            isTopDown = false;
-        }
-
-        writeInfoHeader(headerSize, bitsPerPixel);
-
-        // compression
-        stream.writeInt(compressionType);
-
-        // imageSize
-        stream.writeInt(imageSize);
-
-        // xPelsPerMeter
-        stream.writeInt(xPelsPerMeter);
-
-        // yPelsPerMeter
-        stream.writeInt(yPelsPerMeter);
-
-        // Colors Used
-        stream.writeInt(colorsUsed);
-
-        // Colors Important
-        stream.writeInt(colorsImportant);
-
-        // palette
-        if (isPalette == true) {
-
-            // write palette
-            if (compressionType == BMPConstants.BI_BITFIELDS) {
-                // write masks for red, green and blue components.
-                for (int i=0; i<3; i++) {
-                    int mask = (a[i]&0xFF) + ((r[i]&0xFF)*0x100) + ((g[i]&0xFF)*0x10000) + ((b[i]&0xFF)*0x1000000);
-                    stream.writeInt(mask);
-                }
-            } else {
-                for (int i=0; i<paletteEntries; i++) {
-                    stream.writeByte(b[i]);
-                    stream.writeByte(g[i]);
-                    stream.writeByte(r[i]);
-                    stream.writeByte(a[i]);
-                }
-            }
-        }
-
-        // Writing of actual image data
-        int scanlineBytes = w * numBands;
-
-        // Buffer for up to 8 rows of pixels
-        int[] pixels = new int[scanlineBytes * scaleX];
-
-        // Also create a buffer to hold one line of the data
-        // to be written to the file, so we can use array writes.
-        bpixels = new byte[destScanlineBytes];
-
-        int l;
-
-        if (compressionType == BMPConstants.BI_JPEG ||
-            compressionType == BMPConstants.BI_PNG) {
-
-            // prepare embedded buffer
-            embedded_stream = new ByteArrayOutputStream();
-            writeEmbedded(image, bmpParam);
-            // update the file/image Size
-            embedded_stream.flush();
-            imageSize = embedded_stream.size();
-
-            long endPos = stream.getStreamPosition();
-            fileSize = (int)(offset + imageSize);
-            stream.seek(headPos);
-            writeSize(fileSize, 2);
-            stream.seek(headPos);
-            writeSize(imageSize, 34);
-            stream.seek(endPos);
-            stream.write(embedded_stream.toByteArray());
-            embedded_stream = null;
-
-            if (abortRequested()) {
-                processWriteAborted();
-            } else {
-                processImageComplete();
-                stream.flushBefore(stream.getStreamPosition());
-            }
-
-            return;
-        }
-
-        int maxBandOffset = bandOffsets[0];
-        for (int i = 1; i < bandOffsets.length; i++)
-            if (bandOffsets[i] > maxBandOffset)
-                maxBandOffset = bandOffsets[i];
-
-        int[] pixel = new int[maxBandOffset + 1];
-
-        int destScanlineLength = destScanlineBytes;
-
-        if (noTransform && noSubband) {
-            destScanlineLength = destScanlineBytes / (DataBuffer.getDataTypeSize(dataType)>>3);
-        }
-        for (int i = 0; i < h; i++) {
-            if (abortRequested()) {
-                break;
-            }
-
-            int row = minY + i;
-
-            if (!isTopDown)
-                row = minY + h - i -1;
-
-            // Get the pixels
-            Raster src = inputRaster;
-
-            Rectangle srcRect =
-                new Rectangle(minX * scaleX + xOffset,
-                              row * scaleY + yOffset,
-                              (w - 1)* scaleX + 1,
-                              1);
-            if (!writeRaster)
-                src = input.getData(srcRect);
-
-            if (noTransform && noSubband) {
-                SampleModel sm = src.getSampleModel();
-                int pos = 0;
-                int startX = srcRect.x - src.getSampleModelTranslateX();
-                int startY = srcRect.y - src.getSampleModelTranslateY();
-                if (sm instanceof ComponentSampleModel) {
-                    ComponentSampleModel csm = (ComponentSampleModel)sm;
-                    pos = csm.getOffset(startX, startY, 0);
-                    for(int nb=1; nb < csm.getNumBands(); nb++) {
-                        if (pos > csm.getOffset(startX, startY, nb)) {
-                            pos = csm.getOffset(startX, startY, nb);
-                        }
-                    }
-                } else if (sm instanceof MultiPixelPackedSampleModel) {
-                    MultiPixelPackedSampleModel mppsm =
-                        (MultiPixelPackedSampleModel)sm;
-                    pos = mppsm.getOffset(startX, startY);
-                } else if (sm instanceof SinglePixelPackedSampleModel) {
-                    SinglePixelPackedSampleModel sppsm =
-                        (SinglePixelPackedSampleModel)sm;
-                    pos = sppsm.getOffset(startX, startY);
-                }
-
-                if (compressionType == BMPConstants.BI_RGB || compressionType == BMPConstants.BI_BITFIELDS){
-                    switch(dataType) {
-                    case DataBuffer.TYPE_BYTE:
-                        byte[] bdata =
-                            ((DataBufferByte)src.getDataBuffer()).getData();
-                        stream.write(bdata, pos, destScanlineLength);
-                        break;
-
-                    case DataBuffer.TYPE_SHORT:
-                        short[] sdata =
-                            ((DataBufferShort)src.getDataBuffer()).getData();
-                        stream.writeShorts(sdata, pos, destScanlineLength);
-                        break;
-
-                    case DataBuffer.TYPE_USHORT:
-                        short[] usdata =
-                            ((DataBufferUShort)src.getDataBuffer()).getData();
-                        stream.writeShorts(usdata, pos, destScanlineLength);
-                        break;
-
-                    case DataBuffer.TYPE_INT:
-                        int[] idata =
-                            ((DataBufferInt)src.getDataBuffer()).getData();
-                        stream.writeInts(idata, pos, destScanlineLength);
-                        break;
-                    }
-
-                    for(int k=0; k<padding; k++) {
-                        stream.writeByte(0);
-                    }
-                } else if (compressionType == BMPConstants.BI_RLE4) {
-                    if (bpixels == null || bpixels.length < scanlineBytes)
-                        bpixels = new byte[scanlineBytes];
-                    src.getPixels(srcRect.x, srcRect.y,
-                                  srcRect.width, srcRect.height, pixels);
-                    for (int h=0; h<scanlineBytes; h++) {
-                        bpixels[h] = (byte)pixels[h];
-                    }
-                    encodeRLE4(bpixels, scanlineBytes);
-                } else if (compressionType == BMPConstants.BI_RLE8) {
-                    //byte[] bdata =
-                    //    ((DataBufferByte)src.getDataBuffer()).getData();
-                    //System.out.println("bdata.length="+bdata.length);
-                    //System.arraycopy(bdata, pos, bpixels, 0, scanlineBytes);
-                    if (bpixels == null || bpixels.length < scanlineBytes)
-                        bpixels = new byte[scanlineBytes];
-                    src.getPixels(srcRect.x, srcRect.y,
-                                  srcRect.width, srcRect.height, pixels);
-                    for (int h=0; h<scanlineBytes; h++) {
-                        bpixels[h] = (byte)pixels[h];
-                    }
-
-                    encodeRLE8(bpixels, scanlineBytes);
-                }
-            } else {
-                src.getPixels(srcRect.x, srcRect.y,
-                              srcRect.width, srcRect.height, pixels);
-
-                if (scaleX != 1 || maxBandOffset != numBands - 1) {
-                    for (int j = 0, k = 0, n=0; j < w;
-                         j++, k += scaleX * numBands, n += numBands)
-                    {
-                        System.arraycopy(pixels, k, pixel, 0, pixel.length);
-
-                        for (int m = 0; m < numBands; m++) {
-                            // pixel data is provided here in RGB order
-                            pixels[n + m] = pixel[sourceBands[m]];
-                        }
-                    }
-                }
-                writePixels(0, scanlineBytes, bitsPerPixel, pixels,
-                            padding, numBands, icm);
-            }
-
-            processImageProgress(100.0f * (((float)i) / ((float)h)));
-        }
-
-        if (compressionType == BMPConstants.BI_RLE4 ||
-            compressionType == BMPConstants.BI_RLE8) {
-            // Write the RLE EOF marker and
-            stream.writeByte(0);
-            stream.writeByte(1);
-            incCompImageSize(2);
-            // update the file/image Size
-            imageSize = compImageSize;
-            fileSize = compImageSize + offset;
-            long endPos = stream.getStreamPosition();
-            stream.seek(headPos);
-            writeSize(fileSize, 2);
-            stream.seek(headPos);
-            writeSize(imageSize, 34);
-            stream.seek(endPos);
-        }
-
-        if (abortRequested()) {
-            processWriteAborted();
-        } else {
-            processImageComplete();
-            stream.flushBefore(stream.getStreamPosition());
-        }
-    }
-
-    private void writePixels(int l, int scanlineBytes, int bitsPerPixel,
-                             int pixels[],
-                             int padding, int numBands,
-                             IndexColorModel icm) throws IOException {
-        int pixel = 0;
-        int k = 0;
-        switch (bitsPerPixel) {
-
-        case 1:
-
-            for (int j=0; j<scanlineBytes/8; j++) {
-                bpixels[k++] = (byte)((pixels[l++]  << 7) |
-                                      (pixels[l++]  << 6) |
-                                      (pixels[l++]  << 5) |
-                                      (pixels[l++]  << 4) |
-                                      (pixels[l++]  << 3) |
-                                      (pixels[l++]  << 2) |
-                                      (pixels[l++]  << 1) |
-                                      pixels[l++]);
-            }
-
-            // Partially filled last byte, if any
-            if (scanlineBytes%8 > 0) {
-                pixel = 0;
-                for (int j=0; j<scanlineBytes%8; j++) {
-                    pixel |= (pixels[l++] << (7 - j));
-                }
-                bpixels[k++] = (byte)pixel;
-            }
-            stream.write(bpixels, 0, (scanlineBytes+7)/8);
-
-            break;
-
-        case 4:
-            if (compressionType == BMPConstants.BI_RLE4){
-                byte[] bipixels = new byte[scanlineBytes];
-                for (int h=0; h<scanlineBytes; h++) {
-                    bipixels[h] = (byte)pixels[l++];
-                }
-                encodeRLE4(bipixels, scanlineBytes);
-            }else {
-                for (int j=0; j<scanlineBytes/2; j++) {
-                    pixel = (pixels[l++] << 4) | pixels[l++];
-                    bpixels[k++] = (byte)pixel;
-                }
-                // Put the last pixel of odd-length lines in the 4 MSBs
-                if ((scanlineBytes%2) == 1) {
-                    pixel = pixels[l] << 4;
-                    bpixels[k++] = (byte)pixel;
-                }
-                stream.write(bpixels, 0, (scanlineBytes+1)/2);
-            }
-            break;
-
-        case 8:
-            if(compressionType == BMPConstants.BI_RLE8) {
-                for (int h=0; h<scanlineBytes; h++) {
-                    bpixels[h] = (byte)pixels[l++];
-                }
-                encodeRLE8(bpixels, scanlineBytes);
-            }else {
-                for (int j=0; j<scanlineBytes; j++) {
-                    bpixels[j] = (byte)pixels[l++];
-                }
-                stream.write(bpixels, 0, scanlineBytes);
-            }
-            break;
-
-        case 16:
-            if (spixels == null)
-                spixels = new short[scanlineBytes / numBands];
-            /*
-             * We expect that pixel data comes in RGB order.
-             * We will assemble short pixel taking into account
-             * the compression type:
-             *
-             * BI_RGB        - the RGB order should be maintained.
-             * BI_BITFIELDS  - use bitPos array that was built
-             *                 according to bitfields masks.
-             */
-            for (int j = 0, m = 0; j < scanlineBytes; m++) {
-                spixels[m] = 0;
-                if (compressionType == BMPConstants.BI_RGB) {
-                    /*
-                     * please note that despite other cases,
-                     * the 16bpp BI_RGB requires the RGB data order
-                     */
-                    spixels[m] = (short)
-                        (((0x1f & pixels[j    ]) << 10) |
-                         ((0x1f & pixels[j + 1]) <<  5) |
-                         ((0x1f & pixels[j + 2])      ));
-                     j += 3;
-                } else {
-                    for(int i = 0 ; i < numBands; i++, j++) {
-                        spixels[m] |=
-                            (((pixels[j]) << bitPos[i]) & bitMasks[i]);
-                    }
-                }
-            }
-            stream.writeShorts(spixels, 0, spixels.length);
-            break;
-
-        case 24:
-            if (numBands == 3) {
-                for (int j=0; j<scanlineBytes; j+=3) {
-                    // Since BMP needs BGR format
-                    bpixels[k++] = (byte)(pixels[l+2]);
-                    bpixels[k++] = (byte)(pixels[l+1]);
-                    bpixels[k++] = (byte)(pixels[l]);
-                    l+=3;
-                }
-                stream.write(bpixels, 0, scanlineBytes);
-            } else {
-                // Case where IndexColorModel had > 256 colors.
-                int entries = icm.getMapSize();
-
-                byte r[] = new byte[entries];
-                byte g[] = new byte[entries];
-                byte b[] = new byte[entries];
-
-                icm.getReds(r);
-                icm.getGreens(g);
-                icm.getBlues(b);
-                int index;
-
-                for (int j=0; j<scanlineBytes; j++) {
-                    index = pixels[l];
-                    bpixels[k++] = b[index];
-                    bpixels[k++] = g[index];
-                    bpixels[k++] = b[index];
-                    l++;
-                }
-                stream.write(bpixels, 0, scanlineBytes*3);
-            }
-            break;
-
-        case 32:
-            if (ipixels == null)
-                ipixels = new int[scanlineBytes / numBands];
-            if (numBands == 3) {
-                /*
-                 * We expect that pixel data comes in RGB order.
-                 * We will assemble int pixel taking into account
-                 * the compression type.
-                 *
-                 * BI_RGB        - the BGR order should be used.
-                 * BI_BITFIELDS  - use bitPos array that was built
-                 *                 according to bitfields masks.
-                 */
-                for (int j = 0, m = 0; j < scanlineBytes; m++) {
-                    ipixels[m] = 0;
-                    if (compressionType == BMPConstants.BI_RGB) {
-                        ipixels[m] =
-                            ((0xff & pixels[j + 2]) << 16) |
-                            ((0xff & pixels[j + 1]) <<  8) |
-                            ((0xff & pixels[j    ])      );
-                        j += 3;
-                    } else {
-                        for(int i = 0 ; i < numBands; i++, j++) {
-                            ipixels[m] |=
-                                (((pixels[j]) << bitPos[i]) & bitMasks[i]);
-                        }
-                    }
-                }
-            } else {
-                // We have two possibilities here:
-                // 1. we are writing the indexed image with bitfields
-                //    compression (this covers also the case of BYTE_BINARY)
-                //    => use icm to get actual RGB color values.
-                // 2. we are writing the gray-scaled image with BI_BITFIELDS
-                //    compression
-                //    => just replicate the level of gray to color components.
-                for (int j = 0; j < scanlineBytes; j++) {
-                    if (icm != null) {
-                        ipixels[j] = icm.getRGB(pixels[j]);
-                    } else {
-                        ipixels[j] =
-                            pixels[j] << 16 | pixels[j] << 8 | pixels[j];
-                    }
-                }
-            }
-            stream.writeInts(ipixels, 0, ipixels.length);
-            break;
-        }
-
-        // Write out the padding
-        if (compressionType == BMPConstants.BI_RGB ||
-            compressionType == BMPConstants.BI_BITFIELDS)
-        {
-            for(k=0; k<padding; k++) {
-                stream.writeByte(0);
-            }
-        }
-    }
-
-    private void encodeRLE8(byte[] bpixels, int scanlineBytes)
-      throws IOException{
-
-        int runCount = 1, absVal = -1, j = -1;
-        byte runVal = 0, nextVal =0 ;
-
-        runVal = bpixels[++j];
-        byte[] absBuf = new byte[256];
-
-        while (j < scanlineBytes-1) {
-            nextVal = bpixels[++j];
-            if (nextVal == runVal ){
-                if(absVal >= 3 ){
-                    /// Check if there was an existing Absolute Run
-                    stream.writeByte(0);
-                    stream.writeByte(absVal);
-                    incCompImageSize(2);
-                    for(int a=0; a<absVal;a++){
-                        stream.writeByte(absBuf[a]);
-                        incCompImageSize(1);
-                    }
-                    if (!isEven(absVal)){
-                        //Padding
-                        stream.writeByte(0);
-                        incCompImageSize(1);
-                    }
-                }
-                else if(absVal > -1){
-                    /// Absolute Encoding for less than 3
-                    /// treated as regular encoding
-                    /// Do not include the last element since it will
-                    /// be inclued in the next encoding/run
-                    for (int b=0;b<absVal;b++){
-                        stream.writeByte(1);
-                        stream.writeByte(absBuf[b]);
-                        incCompImageSize(2);
-                    }
-                }
-                absVal = -1;
-                runCount++;
-                if (runCount == 256){
-                    /// Only 255 values permitted
-                    stream.writeByte(runCount-1);
-                    stream.writeByte(runVal);
-                    incCompImageSize(2);
-                    runCount = 1;
-                }
-            }
-            else {
-                if (runCount > 1){
-                    /// If there was an existing run
-                    stream.writeByte(runCount);
-                    stream.writeByte(runVal);
-                    incCompImageSize(2);
-                } else if (absVal < 0){
-                    // First time..
-                    absBuf[++absVal] = runVal;
-                    absBuf[++absVal] = nextVal;
-                } else if (absVal < 254){
-                    //  0-254 only
-                    absBuf[++absVal] = nextVal;
-                } else {
-                    stream.writeByte(0);
-                    stream.writeByte(absVal+1);
-                    incCompImageSize(2);
-                    for(int a=0; a<=absVal;a++){
-                        stream.writeByte(absBuf[a]);
-                        incCompImageSize(1);
-                    }
-                    // padding since 255 elts is not even
-                    stream.writeByte(0);
-                    incCompImageSize(1);
-                    absVal = -1;
-                }
-                runVal = nextVal;
-                runCount = 1;
-            }
-
-            if (j == scanlineBytes-1){ // EOF scanline
-                // Write the run
-                if (absVal == -1){
-                    stream.writeByte(runCount);
-                    stream.writeByte(runVal);
-                    incCompImageSize(2);
-                    runCount = 1;
-                }
-                else {
-                    // write the Absolute Run
-                    if(absVal >= 2){
-                        stream.writeByte(0);
-                        stream.writeByte(absVal+1);
-                        incCompImageSize(2);
-                        for(int a=0; a<=absVal;a++){
-                            stream.writeByte(absBuf[a]);
-                            incCompImageSize(1);
-                        }
-                        if (!isEven(absVal+1)){
-                            //Padding
-                            stream.writeByte(0);
-                            incCompImageSize(1);
-                        }
-
-                    }
-                    else if(absVal > -1){
-                        for (int b=0;b<=absVal;b++){
-                            stream.writeByte(1);
-                            stream.writeByte(absBuf[b]);
-                            incCompImageSize(2);
-                        }
-                    }
-                }
-                /// EOF scanline
-
-                stream.writeByte(0);
-                stream.writeByte(0);
-                incCompImageSize(2);
-            }
-        }
-    }
-
-    private void encodeRLE4(byte[] bipixels, int scanlineBytes)
-      throws IOException {
-
-        int runCount=2, absVal=-1, j=-1, pixel=0, q=0;
-        byte runVal1=0, runVal2=0, nextVal1=0, nextVal2=0;
-        byte[] absBuf = new byte[256];
-
-
-        runVal1 = bipixels[++j];
-        runVal2 = bipixels[++j];
-
-        while (j < scanlineBytes-2){
-            nextVal1 = bipixels[++j];
-            nextVal2 = bipixels[++j];
-
-            if (nextVal1 == runVal1 ) {
-
-                //Check if there was an existing Absolute Run
-                if(absVal >= 4){
-                    stream.writeByte(0);
-                    stream.writeByte(absVal - 1);
-                    incCompImageSize(2);
-                    // we need to exclude  last 2 elts, similarity of
-                    // which caused to enter this part of the code
-                    for(int a=0; a<absVal-2;a+=2){
-                        pixel = (absBuf[a] << 4) | absBuf[a+1];
-                        stream.writeByte((byte)pixel);
-                        incCompImageSize(1);
-                    }
-                    // if # of elts is odd - read the last element
-                    if(!(isEven(absVal-1))){
-                        q = absBuf[absVal-2] << 4| 0;
-                        stream.writeByte(q);
-                        incCompImageSize(1);
-                    }
-                    // Padding to word align absolute encoding
-                    if ( !isEven((int)Math.ceil((absVal-1)/2)) ) {
-                        stream.writeByte(0);
-                        incCompImageSize(1);
-                    }
-                } else if (absVal > -1){
-                    stream.writeByte(2);
-                    pixel = (absBuf[0] << 4) | absBuf[1];
-                    stream.writeByte(pixel);
-                    incCompImageSize(2);
-                }
-                absVal = -1;
-
-                if (nextVal2 == runVal2){
-                    // Even runlength
-                    runCount+=2;
-                    if(runCount == 256){
-                        stream.writeByte(runCount-1);
-                        pixel = ( runVal1 << 4) | runVal2;
-                        stream.writeByte(pixel);
-                        incCompImageSize(2);
-                        runCount =2;
-                        if(j< scanlineBytes - 1){
-                            runVal1 = runVal2;
-                            runVal2 = bipixels[++j];
-                        } else {
-                            stream.writeByte(01);
-                            int r = runVal2 << 4 | 0;
-                            stream.writeByte(r);
-                            incCompImageSize(2);
-                            runCount = -1;/// Only EOF required now
-                        }
-                    }
-                } else {
-                    // odd runlength and the run ends here
-                    // runCount wont be > 254 since 256/255 case will
-                    // be taken care of in above code.
-                    runCount++;
-                    pixel = ( runVal1 << 4) | runVal2;
-                    stream.writeByte(runCount);
-                    stream.writeByte(pixel);
-                    incCompImageSize(2);
-                    runCount = 2;
-                    runVal1 = nextVal2;
-                    // If end of scanline
-                    if (j < scanlineBytes -1){
-                        runVal2 = bipixels[++j];
-                    }else {
-                        stream.writeByte(01);
-                        int r = nextVal2 << 4 | 0;
-                        stream.writeByte(r);
-                        incCompImageSize(2);
-                        runCount = -1;/// Only EOF required now
-                    }
-
-                }
-            } else{
-                // Check for existing run
-                if (runCount > 2){
-                    pixel = ( runVal1 << 4) | runVal2;
-                    stream.writeByte(runCount);
-                    stream.writeByte(pixel);
-                    incCompImageSize(2);
-                } else if (absVal < 0){ // first time
-                    absBuf[++absVal] = runVal1;
-                    absBuf[++absVal] = runVal2;
-                    absBuf[++absVal] = nextVal1;
-                    absBuf[++absVal] = nextVal2;
-                } else if (absVal < 253){ // only 255 elements
-                    absBuf[++absVal] = nextVal1;
-                    absBuf[++absVal] = nextVal2;
-                } else {
-                    stream.writeByte(0);
-                    stream.writeByte(absVal+1);
-                    incCompImageSize(2);
-                    for(int a=0; a<absVal;a+=2){
-                        pixel = (absBuf[a] << 4) | absBuf[a+1];
-                        stream.writeByte((byte)pixel);
-                        incCompImageSize(1);
-                    }
-                    // Padding for word align
-                    // since it will fit into 127 bytes
-                    stream.writeByte(0);
-                    incCompImageSize(1);
-                    absVal = -1;
-                }
-
-                runVal1 = nextVal1;
-                runVal2 = nextVal2;
-                runCount = 2;
-            }
-            // Handle the End of scanline for the last 2 4bits
-            if (j >= scanlineBytes-2 ) {
-                if (absVal == -1 && runCount >= 2){
-                    if (j == scanlineBytes-2){
-                        if(bipixels[++j] == runVal1){
-                            runCount++;
-                            pixel = ( runVal1 << 4) | runVal2;
-                            stream.writeByte(runCount);
-                            stream.writeByte(pixel);
-                            incCompImageSize(2);
-                        } else {
-                            pixel = ( runVal1 << 4) | runVal2;
-                            stream.writeByte(runCount);
-                            stream.writeByte(pixel);
-                            stream.writeByte(01);
-                            pixel =  bipixels[j]<<4 |0;
-                            stream.writeByte(pixel);
-                            int n = bipixels[j]<<4|0;
-                            incCompImageSize(4);
-                        }
-                    } else {
-                        stream.writeByte(runCount);
-                        pixel =( runVal1 << 4) | runVal2 ;
-                        stream.writeByte(pixel);
-                        incCompImageSize(2);
-                    }
-                } else if(absVal > -1){
-                    if (j == scanlineBytes-2){
-                        absBuf[++absVal] = bipixels[++j];
-                    }
-                    if (absVal >=2){
-                        stream.writeByte(0);
-                        stream.writeByte(absVal+1);
-                        incCompImageSize(2);
-                        for(int a=0; a<absVal;a+=2){
-                            pixel = (absBuf[a] << 4) | absBuf[a+1];
-                            stream.writeByte((byte)pixel);
-                            incCompImageSize(1);
-                        }
-                        if(!(isEven(absVal+1))){
-                            q = absBuf[absVal] << 4|0;
-                            stream.writeByte(q);
-                            incCompImageSize(1);
-                        }
-
-                        // Padding
-                        if ( !isEven((int)Math.ceil((absVal+1)/2)) ) {
-                            stream.writeByte(0);
-                            incCompImageSize(1);
-                        }
-
-                    } else {
-                        switch (absVal){
-                        case 0:
-                            stream.writeByte(1);
-                            int n = absBuf[0]<<4 | 0;
-                            stream.writeByte(n);
-                            incCompImageSize(2);
-                            break;
-                        case 1:
-                            stream.writeByte(2);
-                            pixel = (absBuf[0] << 4) | absBuf[1];
-                            stream.writeByte(pixel);
-                            incCompImageSize(2);
-                            break;
-                        }
-                    }
-
-                }
-                stream.writeByte(0);
-                stream.writeByte(0);
-                incCompImageSize(2);
-            }
-        }
-    }
-
-
-    private synchronized void incCompImageSize(int value){
-        compImageSize = compImageSize + value;
-    }
-
-    private boolean isEven(int number) {
-        return (number%2 == 0 ? true : false);
-    }
-
-    private void writeFileHeader(int fileSize, int offset) throws IOException {
-        // magic value
-        stream.writeByte('B');
-        stream.writeByte('M');
-
-        // File size
-        stream.writeInt(fileSize);
-
-        // reserved1 and reserved2
-        stream.writeInt(0);
-
-        // offset to image data
-        stream.writeInt(offset);
-    }
-
-
-    private void writeInfoHeader(int headerSize,
-                                 int bitsPerPixel) throws IOException {
-        // size of header
-        stream.writeInt(headerSize);
-
-        // width
-        stream.writeInt(w);
-
-        // height
-        stream.writeInt(isTopDown ? -h : h);
-
-        // number of planes
-        stream.writeShort(1);
-
-        // Bits Per Pixel
-        stream.writeShort(bitsPerPixel);
-    }
-
-    private void writeSize(int dword, int offset) throws IOException {
-        stream.skipBytes(offset);
-        stream.writeInt(dword);
-    }
-
-    public void reset() {
-        super.reset();
-        stream = null;
-    }
-
-    private int getCompressionType(String typeString) {
-        for (int i = 0; i < BMPConstants.compressionTypeNames.length; i++)
-            if (BMPConstants.compressionTypeNames[i].equals(typeString))
-                return i;
-        return 0;
-    }
-
-    private void writeEmbedded(IIOImage image,
-                               ImageWriteParam bmpParam) throws IOException {
-        String format =
-            compressionType == BMPConstants.BI_JPEG ? "jpeg" : "png";
-        Iterator iterator = ImageIO.getImageWritersByFormatName(format);
-        ImageWriter writer = null;
-        if (iterator.hasNext())
-            writer = (ImageWriter)iterator.next();
-        if (writer != null) {
-            if (embedded_stream == null) {
-                throw new RuntimeException("No stream for writing embedded image!");
-            }
-
-            writer.addIIOWriteProgressListener(new IIOWriteProgressAdapter() {
-                    public void imageProgress(ImageWriter source, float percentageDone) {
-                        processImageProgress(percentageDone);
-                    }
-                });
-
-            writer.addIIOWriteWarningListener(new IIOWriteWarningListener() {
-                    public void warningOccurred(ImageWriter source, int imageIndex, String warning) {
-                        processWarningOccurred(imageIndex, warning);
-                    }
-                });
-
-            writer.setOutput(ImageIO.createImageOutputStream(embedded_stream));
-            ImageWriteParam param = writer.getDefaultWriteParam();
-            //param.setDestinationBands(bmpParam.getDestinationBands());
-            param.setDestinationOffset(bmpParam.getDestinationOffset());
-            param.setSourceBands(bmpParam.getSourceBands());
-            param.setSourceRegion(bmpParam.getSourceRegion());
-            param.setSourceSubsampling(bmpParam.getSourceXSubsampling(),
-                                       bmpParam.getSourceYSubsampling(),
-                                       bmpParam.getSubsamplingXOffset(),
-                                       bmpParam.getSubsamplingYOffset());
-            writer.write(null, image, param);
-        } else
-            throw new RuntimeException(I18N.getString("BMPImageWrite5") + " " + format);
-
-    }
-
-    private int firstLowBit(int num) {
-        int count = 0;
-        while ((num & 1) == 0) {
-            count++;
-            num >>>= 1;
-        }
-        return count;
-    }
-
-    private class IIOWriteProgressAdapter implements IIOWriteProgressListener {
-
-        public void imageComplete(ImageWriter source) {
-        }
-
-        public void imageProgress(ImageWriter source, float percentageDone) {
-        }
-
-        public void imageStarted(ImageWriter source, int imageIndex) {
-        }
-
-        public void thumbnailComplete(ImageWriter source) {
-        }
-
-        public void thumbnailProgress(ImageWriter source, float percentageDone) {
-        }
-
-        public void thumbnailStarted(ImageWriter source, int imageIndex, int thumbnailIndex) {
-        }
-
-        public void writeAborted(ImageWriter source) {
-        }
-    }
-
-    /*
-     * Returns preferred compression type for given image.
-     * The default compression type is BI_RGB, but some image types can't be
-     * encodeed with using default compression without cahnge color resolution.
-     * For example, TYPE_USHORT_565_RGB may be encodeed only by using BI_BITFIELDS
-     * compression type.
-     *
-     * NB: we probably need to extend this method if we encounter other image
-     * types which can not be encoded with BI_RGB compression type.
-     */
-    protected int getPreferredCompressionType(ColorModel cm, SampleModel sm) {
-        ImageTypeSpecifier imageType = new ImageTypeSpecifier(cm, sm);
-        return getPreferredCompressionType(imageType);
-    }
-
-    protected int getPreferredCompressionType(ImageTypeSpecifier imageType) {
-        if (imageType.getBufferedImageType() == BufferedImage.TYPE_USHORT_565_RGB) {
-            return  BI_BITFIELDS;
-        }
-        return BI_RGB;
-    }
-
-    /*
-     * Check whether we can encode image of given type using compression method in question.
-     *
-     * For example, TYPE_USHORT_565_RGB can be encodeed with BI_BITFIELDS compression only.
-     *
-     * NB: method should be extended if other cases when we can not encode
-     *     with given compression will be discovered.
-     */
-    protected boolean canEncodeImage(int compression, ColorModel cm, SampleModel sm) {
-        ImageTypeSpecifier imgType = new ImageTypeSpecifier(cm, sm);
-        return canEncodeImage(compression, imgType);
-    }
-
-    protected boolean canEncodeImage(int compression, ImageTypeSpecifier imgType) {
-        ImageWriterSpi spi = this.getOriginatingProvider();
-        if (!spi.canEncodeImage(imgType)) {
-            return false;
-        }
-        int biType = imgType.getBufferedImageType();
-        int bpp = imgType.getColorModel().getPixelSize();
-        if (compressionType == BI_RLE4 && bpp != 4) {
-            // only 4bpp images can be encoded as BI_RLE4
-            return false;
-        }
-        if (compressionType == BI_RLE8 && bpp != 8) {
-            // only 8bpp images can be encoded as BI_RLE8
-            return false;
-        }
-        if (bpp == 16) {
-            /*
-             * Technically we expect that we may be able to
-             * encode only some of SinglePixelPackedSampleModel
-             * images here.
-             *
-             * In addition we should take into account following:
-             *
-             * 1. BI_RGB case, according to the MSDN description:
-             *
-             *     The bitmap has a maximum of 2^16 colors. If the
-             *     biCompression member of the BITMAPINFOHEADER is BI_RGB,
-             *     the bmiColors member of BITMAPINFO is NULL. Each WORD
-             *     in the bitmap array represents a single pixel. The
-             *     relative intensities of red, green, and blue are
-             *     represented with five bits for each color component.
-             *
-             * 2. BI_BITFIELDS case, according ot the MSDN description:
-             *
-             *     Windows 95/98/Me: When the biCompression member is
-             *     BI_BITFIELDS, the system supports only the following
-             *     16bpp color masks: A 5-5-5 16-bit image, where the blue
-             *     mask is 0x001F, the green mask is 0x03E0, and the red mask
-             *     is 0x7C00; and a 5-6-5 16-bit image, where the blue mask
-             *     is 0x001F, the green mask is 0x07E0, and the red mask is
-             *     0xF800.
-             */
-            boolean canUseRGB = false;
-            boolean canUseBITFIELDS = false;
-
-            SampleModel sm = imgType.getSampleModel();
-            if (sm instanceof SinglePixelPackedSampleModel) {
-                int[] sizes =
-                    ((SinglePixelPackedSampleModel)sm).getSampleSize();
-
-                canUseRGB = true;
-                canUseBITFIELDS = true;
-                for (int i = 0; i < sizes.length; i++) {
-                    canUseRGB       &=  (sizes[i] == 5);
-                    canUseBITFIELDS &= ((sizes[i] == 5) ||
-                                        (i == 1 && sizes[i] == 6));
-                }
-            }
-
-            return (((compressionType == BI_RGB) && canUseRGB) ||
-                    ((compressionType == BI_BITFIELDS) && canUseBITFIELDS));
-        }
-        return true;
-    }
-
-    protected void writeMaskToPalette(int mask, int i,
-                                      byte[] r, byte[]g, byte[] b, byte[]a) {
-        b[i] = (byte)(0xff & (mask >> 24));
-        g[i] = (byte)(0xff & (mask >> 16));
-        r[i] = (byte)(0xff & (mask >> 8));
-        a[i] = (byte)(0xff & mask);
-    }
-
-    private int roundBpp(int x) {
-        if (x <= 8) {
-            return 8;
-        } else if (x <= 16) {
-            return 16;
-        } if (x <= 24) {
-            return 24;
-        } else {
-            return 32;
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/plugins/bmp/BMPImageWriterSpi.java b/ojluni/src/main/java/com/sun/imageio/plugins/bmp/BMPImageWriterSpi.java
deleted file mode 100755
index 983183d..0000000
--- a/ojluni/src/main/java/com/sun/imageio/plugins/bmp/BMPImageWriterSpi.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Copyright (c) 2003, 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
- * 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.imageio.plugins.bmp;
-
-import java.awt.image.DataBuffer;
-import java.awt.image.SampleModel;
-import java.awt.image.SinglePixelPackedSampleModel;
-
-import javax.imageio.spi.ImageWriterSpi;
-import javax.imageio.spi.ServiceRegistry;
-import javax.imageio.spi.IIORegistry;
-import javax.imageio.stream.ImageOutputStream;
-import javax.imageio.ImageWriter;
-import javax.imageio.ImageTypeSpecifier;
-import javax.imageio.IIOException;
-import java.util.Locale;
-
-import javax.imageio.plugins.bmp.BMPImageWriteParam;
-
-public class BMPImageWriterSpi extends ImageWriterSpi {
-    private static String [] readerSpiNames =
-        {"com.sun.imageio.plugins.bmp.BMPImageReaderSpi"};
-    private static String[] formatNames = {"bmp", "BMP"};
-    private static String[] entensions = {"bmp"};
-    private static String[] mimeType = {"image/bmp"};
-
-    private boolean registered = false;
-
-    public BMPImageWriterSpi() {
-        super("Oracle Corporation",
-              "1.0",
-              formatNames,
-              entensions,
-              mimeType,
-              "com.sun.imageio.plugins.bmp.BMPImageWriter",
-              new Class[] { ImageOutputStream.class },
-              readerSpiNames,
-              false,
-              null, null, null, null,
-              true,
-              BMPMetadata.nativeMetadataFormatName,
-              "com.sun.imageio.plugins.bmp.BMPMetadataFormat",
-              null, null);
-    }
-
-    public String getDescription(Locale locale) {
-        return "Standard BMP Image Writer";
-    }
-
-    public void onRegistration(ServiceRegistry registry,
-                               Class<?> category) {
-        if (registered) {
-            return;
-        }
-
-        registered = true;
-    }
-
-    public boolean canEncodeImage(ImageTypeSpecifier type) {
-        int dataType= type.getSampleModel().getDataType();
-        if (dataType < DataBuffer.TYPE_BYTE || dataType > DataBuffer.TYPE_INT)
-            return false;
-
-        SampleModel sm = type.getSampleModel();
-        int numBands = sm.getNumBands();
-        if (!(numBands == 1 || numBands == 3))
-            return false;
-
-        if (numBands == 1 && dataType != DataBuffer.TYPE_BYTE)
-            return false;
-
-        if (dataType > DataBuffer.TYPE_BYTE &&
-              !(sm instanceof SinglePixelPackedSampleModel))
-            return false;
-
-        return true;
-    }
-
-    public ImageWriter createWriterInstance(Object extension)
-        throws IIOException {
-        return new BMPImageWriter(this);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/plugins/bmp/BMPMetadata.java b/ojluni/src/main/java/com/sun/imageio/plugins/bmp/BMPMetadata.java
deleted file mode 100755
index 0a809ba..0000000
--- a/ojluni/src/main/java/com/sun/imageio/plugins/bmp/BMPMetadata.java
+++ /dev/null
@@ -1,307 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-package com.sun.imageio.plugins.bmp;
-
-import java.io.UnsupportedEncodingException;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import javax.imageio.ImageTypeSpecifier;
-import javax.imageio.metadata.IIOMetadata;
-import javax.imageio.metadata.IIOMetadataNode;
-import javax.imageio.metadata.IIOMetadataFormat;
-import javax.imageio.metadata.IIOMetadataFormatImpl;
-import org.w3c.dom.Node;
-import com.sun.imageio.plugins.common.I18N;
-
-import com.sun.imageio.plugins.common.ImageUtil;
-
-public class BMPMetadata extends IIOMetadata implements BMPConstants {
-    public static final String nativeMetadataFormatName =
-        "javax_imageio_bmp_1.0";
-
-    // Fields for Image Descriptor
-    public String bmpVersion;
-    public int width ;
-    public int height;
-    public short bitsPerPixel;
-    public int compression;
-    public int imageSize;
-
-    // Fields for PixelsPerMeter
-    public int xPixelsPerMeter;
-    public int yPixelsPerMeter;
-
-    public int colorsUsed;
-    public int colorsImportant;
-
-    // Fields for BI_BITFIELDS compression(Mask)
-    public int redMask;
-    public int greenMask;
-    public int blueMask;
-    public int alphaMask;
-
-    public int colorSpace;
-
-    // Fields for CIE XYZ for the LCS_CALIBRATED_RGB color space
-    public double redX;
-    public double redY;
-    public double redZ;
-    public double greenX;
-    public double greenY;
-    public double greenZ;
-    public double blueX;
-    public double blueY;
-    public double blueZ;
-
-    // Fields for Gamma values for the LCS_CALIBRATED_RGB color space
-    public int gammaRed;
-    public int gammaGreen;
-    public int gammaBlue;
-
-    public int intent;
-
-    // Fields for the Palette and Entries
-    public byte[] palette = null;
-    public int paletteSize;
-    public int red;
-    public int green;
-    public int blue;
-
-    // Fields from CommentExtension
-    // List of byte[]
-    public List comments = null; // new ArrayList();
-
-    public BMPMetadata() {
-        super(true,
-              nativeMetadataFormatName,
-              "com.sun.imageio.plugins.bmp.BMPMetadataFormat",
-              null, null);
-    }
-
-    public boolean isReadOnly() {
-        return true;
-    }
-
-    public Node getAsTree(String formatName) {
-        if (formatName.equals(nativeMetadataFormatName)) {
-            return getNativeTree();
-        } else if (formatName.equals
-                   (IIOMetadataFormatImpl.standardMetadataFormatName)) {
-            return getStandardTree();
-        } else {
-            throw new IllegalArgumentException(I18N.getString("BMPMetadata0"));
-        }
-    }
-
-    private String toISO8859(byte[] data) {
-        try {
-            return new String(data, "ISO-8859-1");
-        } catch (UnsupportedEncodingException e) {
-            return "";
-        }
-    }
-
-    private Node getNativeTree() {
-        IIOMetadataNode root =
-            new IIOMetadataNode(nativeMetadataFormatName);
-
-        addChildNode(root, "BMPVersion", bmpVersion);
-        addChildNode(root, "Width", new Integer(width));
-        addChildNode(root, "Height", new Integer(height));
-        addChildNode(root, "BitsPerPixel", new Short(bitsPerPixel));
-        addChildNode(root, "Compression", new Integer(compression));
-        addChildNode(root, "ImageSize", new Integer(imageSize));
-
-        IIOMetadataNode node = addChildNode(root, "PixelsPerMeter", null);
-        addChildNode(node, "X", new Integer(xPixelsPerMeter));
-        addChildNode(node, "Y", new Integer(yPixelsPerMeter));
-
-        addChildNode(root, "ColorsUsed", new Integer(colorsUsed));
-        addChildNode(root, "ColorsImportant", new Integer(colorsImportant));
-
-        int version = 0;
-        for (int i = 0; i < bmpVersion.length(); i++)
-            if (Character.isDigit(bmpVersion.charAt(i)))
-                version = bmpVersion.charAt(i) -'0';
-
-        if (version >= 4) {
-            node = addChildNode(root, "Mask", null);
-            addChildNode(node, "Red", new Integer(redMask));
-            addChildNode(node, "Green", new Integer(greenMask));
-            addChildNode(node, "Blue", new Integer(blueMask));
-            addChildNode(node, "Alpha", new Integer(alphaMask));
-
-            addChildNode(root, "ColorSpaceType", new Integer(colorSpace));
-
-            node = addChildNode(root, "CIEXYZEndPoints", null);
-            addXYZPoints(node, "Red", redX, redY, redZ);
-            addXYZPoints(node, "Green", greenX, greenY, greenZ);
-            addXYZPoints(node, "Blue", blueX, blueY, blueZ);
-
-            node = addChildNode(root, "Intent", new Integer(intent));
-        }
-
-        // Palette
-        if ((palette != null) && (paletteSize > 0)) {
-            node = addChildNode(root, "Palette", null);
-            int numComps = palette.length / paletteSize;
-
-            for (int i = 0, j = 0; i < paletteSize; i++) {
-                IIOMetadataNode entry =
-                    addChildNode(node, "PaletteEntry", null);
-                red = palette[j++] & 0xff;
-                green = palette[j++] & 0xff;
-                blue = palette[j++] & 0xff;
-                addChildNode(entry, "Red", new Byte((byte)red));
-                addChildNode(entry, "Green", new Byte((byte)green));
-                addChildNode(entry, "Blue", new Byte((byte)blue));
-                if (numComps == 4)
-                    addChildNode(entry, "Alpha",
-                                 new Byte((byte)(palette[j++] & 0xff)));
-            }
-        }
-
-        return root;
-    }
-
-    // Standard tree node methods
-    protected IIOMetadataNode getStandardChromaNode() {
-
-        if ((palette != null) && (paletteSize > 0)) {
-            IIOMetadataNode node = new IIOMetadataNode("Chroma");
-            IIOMetadataNode subNode = new IIOMetadataNode("Palette");
-            int numComps = palette.length / paletteSize;
-            subNode.setAttribute("value", "" + numComps);
-
-            for (int i = 0, j = 0; i < paletteSize; i++) {
-                IIOMetadataNode subNode1 = new IIOMetadataNode("PaletteEntry");
-                subNode1.setAttribute("index", ""+i);
-                subNode1.setAttribute("red", "" + palette[j++]);
-                subNode1.setAttribute("green", "" + palette[j++]);
-                subNode1.setAttribute("blue", "" + palette[j++]);
-                if (numComps == 4 && palette[j] != 0)
-                    subNode1.setAttribute("alpha", "" + palette[j++]);
-                subNode.appendChild(subNode1);
-            }
-            node.appendChild(subNode);
-            return node;
-        }
-
-        return null;
-    }
-
-    protected IIOMetadataNode getStandardCompressionNode() {
-        IIOMetadataNode node = new IIOMetadataNode("Compression");
-
-        // CompressionTypeName
-        IIOMetadataNode subNode = new IIOMetadataNode("CompressionTypeName");
-        subNode.setAttribute("value", compressionTypeNames[compression]);
-        node.appendChild(subNode);
-        return node;
-    }
-
-    protected IIOMetadataNode getStandardDataNode() {
-        IIOMetadataNode node = new IIOMetadataNode("Data");
-
-        String bits = "";
-        if (bitsPerPixel == 24)
-            bits = "8 8 8 ";
-        else if (bitsPerPixel == 16 || bitsPerPixel == 32) {
-            bits = "" + countBits(redMask) + " " + countBits(greenMask) +
-                  countBits(blueMask) + "" + countBits(alphaMask);
-        }
-
-        IIOMetadataNode subNode = new IIOMetadataNode("BitsPerSample");
-        subNode.setAttribute("value", bits);
-        node.appendChild(subNode);
-
-        return node;
-    }
-
-    protected IIOMetadataNode getStandardDimensionNode() {
-        if (yPixelsPerMeter > 0.0F && xPixelsPerMeter > 0.0F) {
-            IIOMetadataNode node = new IIOMetadataNode("Dimension");
-            float ratio = yPixelsPerMeter / xPixelsPerMeter;
-            IIOMetadataNode subNode = new IIOMetadataNode("PixelAspectRatio");
-            subNode.setAttribute("value", "" + ratio);
-            node.appendChild(subNode);
-
-            subNode = new IIOMetadataNode("HorizontalPhysicalPixelSpacing");
-            subNode.setAttribute("value", "" + (1 / xPixelsPerMeter * 1000));
-            node.appendChild(subNode);
-
-            subNode = new IIOMetadataNode("VerticalPhysicalPixelSpacing");
-            subNode.setAttribute("value", "" + (1 / yPixelsPerMeter * 1000));
-            node.appendChild(subNode);
-
-            return node;
-        }
-        return null;
-    }
-
-    public void setFromTree(String formatName, Node root) {
-        throw new IllegalStateException(I18N.getString("BMPMetadata1"));
-    }
-
-    public void mergeTree(String formatName, Node root) {
-        throw new IllegalStateException(I18N.getString("BMPMetadata1"));
-    }
-
-    public void reset() {
-        throw new IllegalStateException(I18N.getString("BMPMetadata1"));
-    }
-
-    private String countBits(int num) {
-        int count = 0;
-        while(num > 0) {
-            if ((num & 1) == 1)
-                count++;
-            num >>>= 1;
-        }
-
-        return count == 0 ? "" : "" + count;
-    }
-
-    private void addXYZPoints(IIOMetadataNode root, String name, double x, double y, double z) {
-        IIOMetadataNode node = addChildNode(root, name, null);
-        addChildNode(node, "X", new Double(x));
-        addChildNode(node, "Y", new Double(y));
-        addChildNode(node, "Z", new Double(z));
-    }
-
-    private IIOMetadataNode addChildNode(IIOMetadataNode root,
-                                         String name,
-                                         Object object) {
-        IIOMetadataNode child = new IIOMetadataNode(name);
-        if (object != null) {
-            child.setUserObject(object);
-            child.setNodeValue(ImageUtil.convertObjectToString(object));
-        }
-        root.appendChild(child);
-        return child;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/plugins/bmp/BMPMetadataFormat.java b/ojluni/src/main/java/com/sun/imageio/plugins/bmp/BMPMetadataFormat.java
deleted file mode 100755
index b9ea0ee..0000000
--- a/ojluni/src/main/java/com/sun/imageio/plugins/bmp/BMPMetadataFormat.java
+++ /dev/null
@@ -1,208 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-package com.sun.imageio.plugins.bmp;
-
-import java.util.Arrays;
-import javax.imageio.ImageTypeSpecifier;
-import javax.imageio.metadata.IIOMetadataFormat;
-import javax.imageio.metadata.IIOMetadataFormatImpl;
-
-public class BMPMetadataFormat extends IIOMetadataFormatImpl {
-
-    private static IIOMetadataFormat instance = null;
-
-    private BMPMetadataFormat() {
-        super(BMPMetadata.nativeMetadataFormatName,
-              CHILD_POLICY_SOME);
-
-        // root -> ImageDescriptor
-        addElement("ImageDescriptor",
-                   BMPMetadata.nativeMetadataFormatName,
-                   CHILD_POLICY_EMPTY);
-        addAttribute("ImageDescriptor", "bmpVersion",
-                     DATATYPE_STRING, true, null);
-        addAttribute("ImageDescriptor", "width",
-                     DATATYPE_INTEGER, true, null,
-                     "0", "65535", true, true);
-        addAttribute("ImageDescriptor", "height",
-                     DATATYPE_INTEGER, true, null,
-                     "1", "65535", true, true);
-        addAttribute("ImageDescriptor", "bitsPerPixel",
-                     DATATYPE_INTEGER, true, null,
-                     "1", "65535", true, true);
-        addAttribute("ImageDescriptor", "compression",
-                      DATATYPE_INTEGER, false, null);
-        addAttribute("ImageDescriptor", "imageSize",
-                     DATATYPE_INTEGER, true, null,
-                     "1", "65535", true, true);
-
-        addElement("PixelsPerMeter",
-                   BMPMetadata.nativeMetadataFormatName,
-                   CHILD_POLICY_EMPTY);
-        addAttribute("PixelsPerMeter", "X",
-                     DATATYPE_INTEGER, false, null,
-                     "1", "65535", true, true);
-        addAttribute("PixelsPerMeter", "Y",
-                     DATATYPE_INTEGER, false, null,
-                     "1", "65535", true, true);
-
-        addElement("ColorsUsed",
-                   BMPMetadata.nativeMetadataFormatName,
-                   CHILD_POLICY_EMPTY);
-        addAttribute("ColorsUsed", "value",
-                     DATATYPE_INTEGER, true, null,
-                     "0", "65535", true, true);
-
-        addElement("ColorsImportant",
-                   BMPMetadata.nativeMetadataFormatName,
-                   CHILD_POLICY_EMPTY);
-        addAttribute("ColorsImportant", "value",
-                     DATATYPE_INTEGER, false, null,
-                     "0", "65535", true, true);
-
-        addElement("BI_BITFIELDS_Mask",
-                   BMPMetadata.nativeMetadataFormatName,
-                   CHILD_POLICY_EMPTY);
-        addAttribute("BI_BITFIELDS_Mask", "red",
-                     DATATYPE_INTEGER, false, null,
-                     "0", "65535", true, true);
-        addAttribute("BI_BITFIELDS_Mask", "green",
-                     DATATYPE_INTEGER, false, null,
-                     "0", "65535", true, true);
-        addAttribute("BI_BITFIELDS_Mask", "blue",
-                     DATATYPE_INTEGER, false, null,
-                     "0", "65535", true, true);
-
-        addElement("ColorSpace",
-                   BMPMetadata.nativeMetadataFormatName,
-                   CHILD_POLICY_EMPTY);
-        addAttribute("ColorSpace", "value",
-                     DATATYPE_INTEGER, false, null,
-                     "0", "65535", true, true);
-
-        addElement("LCS_CALIBRATED_RGB",
-                   BMPMetadata.nativeMetadataFormatName,
-                   CHILD_POLICY_EMPTY);
-
-        /// Should the max value be 1.7976931348623157e+308 ?
-        addAttribute("LCS_CALIBRATED_RGB", "redX",
-                     DATATYPE_DOUBLE, false, null,
-                     "0", "65535", true, true);
-        addAttribute("LCS_CALIBRATED_RGB", "redY",
-                     DATATYPE_DOUBLE, false, null,
-                     "0", "65535", true, true);
-        addAttribute("LCS_CALIBRATED_RGB", "redZ",
-                     DATATYPE_DOUBLE, false, null,
-                     "0", "65535", true, true);
-        addAttribute("LCS_CALIBRATED_RGB", "greenX",
-                     DATATYPE_DOUBLE, false, null,
-                     "0", "65535", true, true);
-        addAttribute("LCS_CALIBRATED_RGB", "greenY",
-                     DATATYPE_DOUBLE, false, null,
-                     "0", "65535", true, true);
-        addAttribute("LCS_CALIBRATED_RGB", "greenZ",
-                     DATATYPE_DOUBLE, false, null,
-                     "0", "65535", true, true);
-        addAttribute("LCS_CALIBRATED_RGB", "blueX",
-                     DATATYPE_DOUBLE, false, null,
-                     "0", "65535", true, true);
-        addAttribute("LCS_CALIBRATED_RGB", "blueY",
-                     DATATYPE_DOUBLE, false, null,
-                     "0", "65535", true, true);
-        addAttribute("LCS_CALIBRATED_RGB", "blueZ",
-                     DATATYPE_DOUBLE, false, null,
-                     "0", "65535", true, true);
-
-        addElement("LCS_CALIBRATED_RGB_GAMMA",
-                   BMPMetadata.nativeMetadataFormatName,
-                   CHILD_POLICY_EMPTY);
-        addAttribute("LCS_CALIBRATED_RGB_GAMMA","red",
-                     DATATYPE_INTEGER, false, null,
-                     "0", "65535", true, true);
-        addAttribute("LCS_CALIBRATED_RGB_GAMMA","green",
-                     DATATYPE_INTEGER, false, null,
-                     "0", "65535", true, true);
-        addAttribute("LCS_CALIBRATED_RGB_GAMMA","blue",
-                     DATATYPE_INTEGER, false, null,
-                     "0", "65535", true, true);
-
-        addElement("Intent",
-                   BMPMetadata.nativeMetadataFormatName,
-                   CHILD_POLICY_EMPTY);
-        addAttribute("Intent", "value",
-                     DATATYPE_INTEGER, false, null,
-                     "0", "65535", true, true);
-
-        // root -> Palette
-        addElement("Palette",
-                   BMPMetadata.nativeMetadataFormatName,
-                   2, 256);
-        addAttribute("Palette", "sizeOfPalette",
-                     DATATYPE_INTEGER, true, null);
-        addBooleanAttribute("Palette", "sortFlag",
-                            false, false);
-
-        // root -> Palette -> PaletteEntry
-        addElement("PaletteEntry", "Palette",
-                   CHILD_POLICY_EMPTY);
-        addAttribute("PaletteEntry", "index",
-                     DATATYPE_INTEGER, true, null,
-                     "0", "255", true, true);
-        addAttribute("PaletteEntry", "red",
-                     DATATYPE_INTEGER, true, null,
-                     "0", "255", true, true);
-        addAttribute("PaletteEntry", "green",
-                     DATATYPE_INTEGER, true, null,
-                     "0", "255", true, true);
-        addAttribute("PaletteEntry", "blue",
-                     DATATYPE_INTEGER, true, null,
-                     "0", "255", true, true);
-
-
-        // root -> CommentExtensions
-        addElement("CommentExtensions",
-                   BMPMetadata.nativeMetadataFormatName,
-                   1, Integer.MAX_VALUE);
-
-        // root -> CommentExtensions -> CommentExtension
-        addElement("CommentExtension", "CommentExtensions",
-                   CHILD_POLICY_EMPTY);
-        addAttribute("CommentExtension", "value",
-                     DATATYPE_STRING, true, null);
-    }
-
-    public boolean canNodeAppear(String elementName,
-                                 ImageTypeSpecifier imageType) {
-        return true;
-    }
-
-    public static synchronized IIOMetadataFormat getInstance() {
-        if (instance == null) {
-            instance = new BMPMetadataFormat();
-        }
-        return instance;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/plugins/bmp/BMPMetadataFormatResources.java b/ojluni/src/main/java/com/sun/imageio/plugins/bmp/BMPMetadataFormatResources.java
deleted file mode 100755
index 1f2f444..0000000
--- a/ojluni/src/main/java/com/sun/imageio/plugins/bmp/BMPMetadataFormatResources.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-package com.sun.imageio.plugins.bmp;
-
-import java.util.ListResourceBundle;
-import javax.imageio.metadata.IIOMetadataFormat;
-import javax.imageio.metadata.IIOMetadataFormatImpl;
-
-public class BMPMetadataFormatResources extends ListResourceBundle {
-
-    public BMPMetadataFormatResources() {}
-
-    protected Object[][] getContents() {
-        return new Object[][] {
-
-        // Node name, followed by description
-        { "BMPVersion", "BMP version string" },
-        { "Width", "The width of the image" },
-        { "Height","The height of the image" },
-        { "BitsPerPixel", "" },
-        { "PixelsPerMeter", "Resolution in pixels per unit distance" },
-        { "X", "Pixels Per Meter along X" },
-        { "Y", "Pixels Per Meter along Y" },
-        { "ColorsUsed",
-          "Number of color indexes in the color table actually used" },
-        { "ColorsImportant",
-          "Number of color indexes considered important for display" },
-        { "Mask",
-          "Color masks; present for BI_BITFIELDS compression only"},
-
-        { "Intent", "Rendering intent" },
-        { "Palette", "The color palette" },
-
-        { "Red", "Red Mask/Color Palette" },
-        { "Green", "Green Mask/Color Palette/Gamma" },
-        { "Blue", "Blue Mask/Color Palette/Gamma" },
-        { "Alpha", "Alpha Mask/Color Palette/Gamma" },
-
-        { "ColorSpaceType", "Color Space Type" },
-
-        { "X", "The X coordinate of a point in XYZ color space" },
-        { "Y", "The Y coordinate of a point in XYZ color space" },
-        { "Z", "The Z coordinate of a point in XYZ color space" },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/plugins/common/BitFile.java b/ojluni/src/main/java/com/sun/imageio/plugins/common/BitFile.java
deleted file mode 100755
index fb6c25a..0000000
--- a/ojluni/src/main/java/com/sun/imageio/plugins/common/BitFile.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-package com.sun.imageio.plugins.common;
-
-import java.io.IOException;
-import javax.imageio.stream.ImageOutputStream;
-
-/*
- * Came from GIFEncoder initially.
- * Modified - to allow for output compressed data without the block counts
- * which breakup the compressed data stream for GIF.
- */
-public class BitFile {
-    ImageOutputStream output;
-    byte buffer[];
-    int index;
-    int bitsLeft; // bits left at current index that are avail.
-
-    /** note this also indicates gif format BITFile. **/
-    boolean blocks = false;
-
-    /*
-     * @param output destination for output data
-     * @param blocks GIF LZW requires block counts for output data
-     */
-    public BitFile(ImageOutputStream output, boolean blocks) {
-        this.output = output;
-        this.blocks = blocks;
-        buffer = new byte[256];
-        index = 0;
-        bitsLeft = 8;
-    }
-
-    public void flush() throws IOException {
-        int numBytes = index + (bitsLeft == 8 ? 0 : 1);
-        if (numBytes > 0) {
-            if (blocks) {
-                output.write(numBytes);
-            }
-            output.write(buffer, 0, numBytes);
-            buffer[0] = 0;
-            index = 0;
-            bitsLeft = 8;
-        }
-    }
-
-    public void writeBits(int bits, int numbits) throws IOException {
-        int bitsWritten = 0;
-        int numBytes = 255;  // gif block count
-        do {
-            // This handles the GIF block count stuff
-            if ((index == 254 && bitsLeft == 0) || index > 254) {
-                if (blocks) {
-                    output.write(numBytes);
-                }
-
-                output.write(buffer, 0, numBytes);
-
-                buffer[0] = 0;
-                index = 0;
-                bitsLeft = 8;
-            }
-
-            if (numbits <= bitsLeft) { // bits contents fit in current index byte
-                if (blocks) { // GIF
-                    buffer[index] |= (bits & ((1 << numbits) - 1)) << (8 - bitsLeft);
-                    bitsWritten += numbits;
-                    bitsLeft -= numbits;
-                    numbits = 0;
-                } else {
-                    buffer[index] |= (bits & ((1 << numbits) - 1)) << (bitsLeft - numbits);
-                    bitsWritten += numbits;
-                    bitsLeft -= numbits;
-                    numbits = 0;
-                }
-            } else { // bits overflow from current byte to next.
-                if (blocks) { // GIF
-                    // if bits  > space left in current byte then the lowest order bits
-                    // of code are taken and put in current byte and rest put in next.
-                    buffer[index] |= (bits & ((1 << bitsLeft) - 1)) << (8 - bitsLeft);
-                    bitsWritten += bitsLeft;
-                    bits >>= bitsLeft;
-                    numbits -= bitsLeft;
-                    buffer[++index] = 0;
-                    bitsLeft = 8;
-                } else {
-                    // if bits  > space left in current byte then the highest order bits
-                    // of code are taken and put in current byte and rest put in next.
-                    // at highest order bit location !!
-                    int topbits = (bits >>> (numbits - bitsLeft)) & ((1 << bitsLeft) - 1);
-                    buffer[index] |= topbits;
-                    numbits -= bitsLeft;  // ok this many bits gone off the top
-                    bitsWritten += bitsLeft;
-                    buffer[++index] = 0;  // next index
-                    bitsLeft = 8;
-                }
-            }
-        } while (numbits != 0);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/plugins/common/BogusColorSpace.java b/ojluni/src/main/java/com/sun/imageio/plugins/common/BogusColorSpace.java
deleted file mode 100755
index ea7fa4f..0000000
--- a/ojluni/src/main/java/com/sun/imageio/plugins/common/BogusColorSpace.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-package com.sun.imageio.plugins.common;
-
-import java.awt.color.ColorSpace;
-
-/**
- * A dummy <code>ColorSpace</code> to enable <code>ColorModel</code>
- * for image data which do not have an innate color representation.
- */
-public class BogusColorSpace extends ColorSpace {
-    /**
-     * Return the type given the number of components.
-     *
-     * @param numComponents The number of components in the
-     * <code>ColorSpace</code>.
-     * @exception IllegalArgumentException if <code>numComponents</code>
-     * is less than 1.
-     */
-    private static int getType(int numComponents) {
-        if(numComponents < 1) {
-            throw new IllegalArgumentException("numComponents < 1!");
-        }
-
-        int type;
-        switch(numComponents) {
-        case 1:
-            type = ColorSpace.TYPE_GRAY;
-            break;
-        default:
-            // Based on the constant definitions TYPE_2CLR=12 through
-            // TYPE_FCLR=25. This will return unknown types for
-            // numComponents > 15.
-            type = numComponents + 10;
-        }
-
-        return type;
-    }
-
-    /**
-     * Constructs a bogus <code>ColorSpace</code>.
-     *
-     * @param numComponents The number of components in the
-     * <code>ColorSpace</code>.
-     * @exception IllegalArgumentException if <code>numComponents</code>
-     * is less than 1.
-     */
-    public BogusColorSpace(int numComponents) {
-        super(getType(numComponents), numComponents);
-    }
-
-    //
-    // The following methods simply copy the input array to the
-    // output array while otherwise attempting to adhere to the
-    // specified behavior of the methods vis-a-vis exceptions.
-    //
-
-    public float[] toRGB(float[] colorvalue) {
-        if(colorvalue.length < getNumComponents()) {
-            throw new ArrayIndexOutOfBoundsException
-                ("colorvalue.length < getNumComponents()");
-        }
-
-        float[] rgbvalue = new float[3];
-
-        System.arraycopy(colorvalue, 0, rgbvalue, 0,
-                         Math.min(3, getNumComponents()));
-
-        return colorvalue;
-    }
-
-    public float[] fromRGB(float[] rgbvalue) {
-        if(rgbvalue.length < 3) {
-            throw new ArrayIndexOutOfBoundsException
-                ("rgbvalue.length < 3");
-        }
-
-        float[] colorvalue = new float[getNumComponents()];
-
-        System.arraycopy(rgbvalue, 0, colorvalue, 0,
-                         Math.min(3, colorvalue.length));
-
-        return rgbvalue;
-    }
-
-    public float[] toCIEXYZ(float[] colorvalue) {
-        if(colorvalue.length < getNumComponents()) {
-            throw new ArrayIndexOutOfBoundsException
-                ("colorvalue.length < getNumComponents()");
-        }
-
-        float[] xyzvalue = new float[3];
-
-        System.arraycopy(colorvalue, 0, xyzvalue, 0,
-                         Math.min(3, getNumComponents()));
-
-        return colorvalue;
-    }
-
-    public float[] fromCIEXYZ(float[] xyzvalue) {
-        if(xyzvalue.length < 3) {
-            throw new ArrayIndexOutOfBoundsException
-                ("xyzvalue.length < 3");
-        }
-
-        float[] colorvalue = new float[getNumComponents()];
-
-        System.arraycopy(xyzvalue, 0, colorvalue, 0,
-                         Math.min(3, colorvalue.length));
-
-        return xyzvalue;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/plugins/common/I18N.java b/ojluni/src/main/java/com/sun/imageio/plugins/common/I18N.java
deleted file mode 100755
index 7d55e35..0000000
--- a/ojluni/src/main/java/com/sun/imageio/plugins/common/I18N.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-package com.sun.imageio.plugins.common;
-
-public final class I18N extends I18NImpl {
-    private final static String resource_name = "iio-plugin.properties";
-    public static String getString(String key) {
-        return getString("com.sun.imageio.plugins.common.I18N", resource_name, key);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/plugins/common/I18NImpl.java b/ojluni/src/main/java/com/sun/imageio/plugins/common/I18NImpl.java
deleted file mode 100755
index 4c6d36a..0000000
--- a/ojluni/src/main/java/com/sun/imageio/plugins/common/I18NImpl.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-package com.sun.imageio.plugins.common;
-
-import java.io.InputStream;
-import java.util.PropertyResourceBundle;
-import java.net.URL;
-
-/**
- * Class to simplify use of internationalization message strings.
- * Property files are constructed in terms of content as for JAI with
- * one "key=value" pair per line. All such files however have the same
- * name "properties". The resource extractor resolves the extraction of
- * the file from the jar as the package name is included automatically.
- *
- * <p>Extenders need only provide a static method
- * <code>getString(String)</code> which calls the static method in this
- * class with the name of the invoking class and returns a
- * <code>String</code>.
- */
-public class I18NImpl {
-    /**
-     * Returns the message string with the specified key from the
-     * "properties" file in the package containing the class with
-     * the specified name.
-     */
-    protected static final String getString(String className, String resource_name, String key) {
-        PropertyResourceBundle bundle = null;
-        try {
-            InputStream stream =
-                Class.forName(className).getResourceAsStream(resource_name);
-            bundle = new PropertyResourceBundle(stream);
-        } catch(Throwable e) {
-            throw new RuntimeException(e); // Chain the exception.
-        }
-
-        return (String)bundle.handleGetObject(key);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/plugins/common/ImageUtil.java b/ojluni/src/main/java/com/sun/imageio/plugins/common/ImageUtil.java
deleted file mode 100755
index 2c27e56..0000000
--- a/ojluni/src/main/java/com/sun/imageio/plugins/common/ImageUtil.java
+++ /dev/null
@@ -1,1167 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-package com.sun.imageio.plugins.common;
-
-import java.awt.Point;
-import java.awt.Rectangle;
-import java.awt.Transparency;
-import java.awt.color.ColorSpace;
-import java.awt.image.BufferedImage;
-import java.awt.image.ColorModel;
-import java.awt.image.ComponentColorModel;
-import java.awt.image.ComponentSampleModel;
-import java.awt.image.DataBuffer;
-import java.awt.image.DataBufferByte;
-import java.awt.image.DataBufferInt;
-import java.awt.image.DataBufferShort;
-import java.awt.image.DataBufferUShort;
-import java.awt.image.DirectColorModel;
-import java.awt.image.IndexColorModel;
-import java.awt.image.MultiPixelPackedSampleModel;
-import java.awt.image.Raster;
-import java.awt.image.RenderedImage;
-import java.awt.image.SampleModel;
-import java.awt.image.SinglePixelPackedSampleModel;
-import java.awt.image.WritableRaster;
-import java.util.Arrays;
-
-//import javax.imageio.ImageTypeSpecifier;
-
-import javax.imageio.IIOException;
-import javax.imageio.IIOImage;
-import javax.imageio.ImageTypeSpecifier;
-import javax.imageio.ImageWriter;
-import javax.imageio.spi.ImageWriterSpi;
-
-public class ImageUtil {
-    /* XXX testing only
-    public static void main(String[] args) {
-        ImageTypeSpecifier bilevel =
-            ImageTypeSpecifier.createIndexed(new byte[] {(byte)0, (byte)255},
-                                             new byte[] {(byte)0, (byte)255},
-                                             new byte[] {(byte)0, (byte)255},
-                                             null, 1,
-                                             DataBuffer.TYPE_BYTE);
-        ImageTypeSpecifier gray =
-            ImageTypeSpecifier.createGrayscale(8, DataBuffer.TYPE_BYTE, false);
-        ImageTypeSpecifier grayAlpha =
-            ImageTypeSpecifier.createGrayscale(8, DataBuffer.TYPE_BYTE, false,
-                                               false);
-        ImageTypeSpecifier rgb =
-            ImageTypeSpecifier.createInterleaved(ColorSpace.getInstance(ColorSpace.CS_sRGB),
-                                                 new int[] {0, 1, 2},
-                                                 DataBuffer.TYPE_BYTE,
-                                                 false,
-                                                 false);
-        ImageTypeSpecifier rgba =
-            ImageTypeSpecifier.createInterleaved(ColorSpace.getInstance(ColorSpace.CS_sRGB),
-                                                 new int[] {0, 1, 2, 3},
-                                                 DataBuffer.TYPE_BYTE,
-                                                 true,
-                                                 false);
-        ImageTypeSpecifier packed =
-            ImageTypeSpecifier.createPacked(ColorSpace.getInstance(ColorSpace.CS_sRGB),
-                                            0xff000000,
-                                            0x00ff0000,
-                                            0x0000ff00,
-                                            0x000000ff,
-                                            DataBuffer.TYPE_BYTE,
-                                            false);
-
-        SampleModel bandedSM =
-            new java.awt.image.BandedSampleModel(DataBuffer.TYPE_BYTE,
-                                                 1, 1, 15);
-
-        System.out.println(createColorModel(bilevel.getSampleModel()));
-        System.out.println(createColorModel(gray.getSampleModel()));
-        System.out.println(createColorModel(grayAlpha.getSampleModel()));
-        System.out.println(createColorModel(rgb.getSampleModel()));
-        System.out.println(createColorModel(rgba.getSampleModel()));
-        System.out.println(createColorModel(packed.getSampleModel()));
-        System.out.println(createColorModel(bandedSM));
-    }
-    */
-
-    /**
-     * Creates a <code>ColorModel</code> that may be used with the
-     * specified <code>SampleModel</code>.  If a suitable
-     * <code>ColorModel</code> cannot be found, this method returns
-     * <code>null</code>.
-     *
-     * <p> Suitable <code>ColorModel</code>s are guaranteed to exist
-     * for all instances of <code>ComponentSampleModel</code>.
-     * For 1- and 3- banded <code>SampleModel</code>s, the returned
-     * <code>ColorModel</code> will be opaque.  For 2- and 4-banded
-     * <code>SampleModel</code>s, the output will use alpha transparency
-     * which is not premultiplied.  1- and 2-banded data will use a
-     * grayscale <code>ColorSpace</code>, and 3- and 4-banded data a sRGB
-     * <code>ColorSpace</code>. Data with 5 or more bands will have a
-     * <code>BogusColorSpace</code>.</p>
-     *
-     * <p>An instance of <code>DirectColorModel</code> will be created for
-     * instances of <code>SinglePixelPackedSampleModel</code> with no more
-     * than 4 bands.</p>
-     *
-     * <p>An instance of <code>IndexColorModel</code> will be created for
-     * instances of <code>MultiPixelPackedSampleModel</code>. The colormap
-     * will be a grayscale ramp with <code>1&nbsp;<<&nbsp;numberOfBits</code>
-     * entries ranging from zero to at most 255.</p>
-     *
-     * @return An instance of <code>ColorModel</code> that is suitable for
-     *         the supplied <code>SampleModel</code>, or <code>null</code>.
-     *
-     * @throws IllegalArgumentException  If <code>sampleModel</code> is
-     *         <code>null</code>.
-     */
-    public static final ColorModel createColorModel(SampleModel sampleModel) {
-        // Check the parameter.
-        if(sampleModel == null) {
-            throw new IllegalArgumentException("sampleModel == null!");
-        }
-
-        // Get the data type.
-        int dataType = sampleModel.getDataType();
-
-        // Check the data type
-        switch(dataType) {
-        case DataBuffer.TYPE_BYTE:
-        case DataBuffer.TYPE_USHORT:
-        case DataBuffer.TYPE_SHORT:
-        case DataBuffer.TYPE_INT:
-        case DataBuffer.TYPE_FLOAT:
-        case DataBuffer.TYPE_DOUBLE:
-            break;
-        default:
-            // Return null for other types.
-            return null;
-        }
-
-        // The return variable.
-        ColorModel colorModel = null;
-
-        // Get the sample size.
-        int[] sampleSize = sampleModel.getSampleSize();
-
-        // Create a Component ColorModel.
-        if(sampleModel instanceof ComponentSampleModel) {
-            // Get the number of bands.
-            int numBands = sampleModel.getNumBands();
-
-            // Determine the color space.
-            ColorSpace colorSpace = null;
-            if(numBands <= 2) {
-                colorSpace = ColorSpace.getInstance(ColorSpace.CS_GRAY);
-            } else if(numBands <= 4) {
-                colorSpace = ColorSpace.getInstance(ColorSpace.CS_sRGB);
-            } else {
-                colorSpace = new BogusColorSpace(numBands);
-            }
-
-            boolean hasAlpha = (numBands == 2) || (numBands == 4);
-            boolean isAlphaPremultiplied = false;
-            int transparency = hasAlpha ?
-                Transparency.TRANSLUCENT : Transparency.OPAQUE;
-
-            colorModel = new ComponentColorModel(colorSpace,
-                                                 sampleSize,
-                                                 hasAlpha,
-                                                 isAlphaPremultiplied,
-                                                 transparency,
-                                                 dataType);
-        } else if (sampleModel.getNumBands() <= 4 &&
-                   sampleModel instanceof SinglePixelPackedSampleModel) {
-            SinglePixelPackedSampleModel sppsm =
-                (SinglePixelPackedSampleModel)sampleModel;
-
-            int[] bitMasks = sppsm.getBitMasks();
-            int rmask = 0;
-            int gmask = 0;
-            int bmask = 0;
-            int amask = 0;
-
-            int numBands = bitMasks.length;
-            if (numBands <= 2) {
-                rmask = gmask = bmask = bitMasks[0];
-                if (numBands == 2) {
-                    amask = bitMasks[1];
-                }
-            } else {
-                rmask = bitMasks[0];
-                gmask = bitMasks[1];
-                bmask = bitMasks[2];
-                if (numBands == 4) {
-                    amask = bitMasks[3];
-                }
-            }
-
-            int bits = 0;
-            for (int i = 0; i < sampleSize.length; i++) {
-                bits += sampleSize[i];
-            }
-
-            return new DirectColorModel(bits, rmask, gmask, bmask, amask);
-
-        } else if(sampleModel instanceof MultiPixelPackedSampleModel) {
-            // Load the colormap with a ramp.
-            int bitsPerSample = sampleSize[0];
-            int numEntries = 1 << bitsPerSample;
-            byte[] map = new byte[numEntries];
-            for (int i = 0; i < numEntries; i++) {
-                map[i] = (byte)(i*255/(numEntries - 1));
-            }
-
-            colorModel = new IndexColorModel(bitsPerSample, numEntries,
-                                             map, map, map);
-
-        }
-
-        return colorModel;
-    }
-
-    /**
-     * For the case of binary data (<code>isBinary()</code> returns
-     * <code>true</code>), return the binary data as a packed byte array.
-     * The data will be packed as eight bits per byte with no bit offset,
-     * i.e., the first bit in each image line will be the left-most of the
-     * first byte of the line.  The line stride in bytes will be
-     * <code>(int)((getWidth()+7)/8)</code>.  The length of the returned
-     * array will be the line stride multiplied by <code>getHeight()</code>
-     *
-     * @return the binary data as a packed array of bytes with zero offset
-     * of <code>null</code> if the data are not binary.
-     * @throws IllegalArgumentException if <code>isBinary()</code> returns
-     * <code>false</code> with the <code>SampleModel</code> of the
-     * supplied <code>Raster</code> as argument.
-     */
-    public static byte[] getPackedBinaryData(Raster raster,
-                                             Rectangle rect) {
-        SampleModel sm = raster.getSampleModel();
-        if(!isBinary(sm)) {
-            throw new IllegalArgumentException(I18N.getString("ImageUtil0"));
-        }
-
-        int rectX = rect.x;
-        int rectY = rect.y;
-        int rectWidth = rect.width;
-        int rectHeight = rect.height;
-
-        DataBuffer dataBuffer = raster.getDataBuffer();
-
-        int dx = rectX - raster.getSampleModelTranslateX();
-        int dy = rectY - raster.getSampleModelTranslateY();
-
-        MultiPixelPackedSampleModel mpp = (MultiPixelPackedSampleModel)sm;
-        int lineStride = mpp.getScanlineStride();
-        int eltOffset = dataBuffer.getOffset() + mpp.getOffset(dx, dy);
-        int bitOffset = mpp.getBitOffset(dx);
-
-        int numBytesPerRow = (rectWidth + 7)/8;
-        if(dataBuffer instanceof DataBufferByte &&
-           eltOffset == 0 && bitOffset == 0 &&
-           numBytesPerRow == lineStride &&
-           ((DataBufferByte)dataBuffer).getData().length ==
-           numBytesPerRow*rectHeight) {
-            return ((DataBufferByte)dataBuffer).getData();
-        }
-
-        byte[] binaryDataArray = new byte[numBytesPerRow*rectHeight];
-
-        int b = 0;
-
-        if(bitOffset == 0) {
-            if(dataBuffer instanceof DataBufferByte) {
-                byte[] data = ((DataBufferByte)dataBuffer).getData();
-                int stride = numBytesPerRow;
-                int offset = 0;
-                for(int y = 0; y < rectHeight; y++) {
-                    System.arraycopy(data, eltOffset,
-                                     binaryDataArray, offset,
-                                     stride);
-                    offset += stride;
-                    eltOffset += lineStride;
-                }
-            } else if(dataBuffer instanceof DataBufferShort ||
-                      dataBuffer instanceof DataBufferUShort) {
-                short[] data = dataBuffer instanceof DataBufferShort ?
-                    ((DataBufferShort)dataBuffer).getData() :
-                    ((DataBufferUShort)dataBuffer).getData();
-
-                for(int y = 0; y < rectHeight; y++) {
-                    int xRemaining = rectWidth;
-                    int i = eltOffset;
-                    while(xRemaining > 8) {
-                        short datum = data[i++];
-                        binaryDataArray[b++] = (byte)((datum >>> 8) & 0xFF);
-                        binaryDataArray[b++] = (byte)(datum & 0xFF);
-                        xRemaining -= 16;
-                    }
-                    if(xRemaining > 0) {
-                        binaryDataArray[b++] = (byte)((data[i] >>> 8) & 0XFF);
-                    }
-                    eltOffset += lineStride;
-                }
-            } else if(dataBuffer instanceof DataBufferInt) {
-                int[] data = ((DataBufferInt)dataBuffer).getData();
-
-                for(int y = 0; y < rectHeight; y++) {
-                    int xRemaining = rectWidth;
-                    int i = eltOffset;
-                    while(xRemaining > 24) {
-                        int datum = data[i++];
-                        binaryDataArray[b++] = (byte)((datum >>> 24) & 0xFF);
-                        binaryDataArray[b++] = (byte)((datum >>> 16) & 0xFF);
-                        binaryDataArray[b++] = (byte)((datum >>> 8) & 0xFF);
-                        binaryDataArray[b++] = (byte)(datum & 0xFF);
-                        xRemaining -= 32;
-                    }
-                    int shift = 24;
-                    while(xRemaining > 0) {
-                        binaryDataArray[b++] =
-                            (byte)((data[i] >>> shift) & 0xFF);
-                        shift -= 8;
-                        xRemaining -= 8;
-                    }
-                    eltOffset += lineStride;
-                }
-            }
-        } else { // bitOffset != 0
-            if(dataBuffer instanceof DataBufferByte) {
-                byte[] data = ((DataBufferByte)dataBuffer).getData();
-
-                if((bitOffset & 7) == 0) {
-                    int stride = numBytesPerRow;
-                    int offset = 0;
-                    for(int y = 0; y < rectHeight; y++) {
-                        System.arraycopy(data, eltOffset,
-                                         binaryDataArray, offset,
-                                         stride);
-                        offset += stride;
-                        eltOffset += lineStride;
-                    }
-                } else { // bitOffset % 8 != 0
-                    int leftShift = bitOffset & 7;
-                    int rightShift = 8 - leftShift;
-                    for(int y = 0; y < rectHeight; y++) {
-                        int i = eltOffset;
-                        int xRemaining = rectWidth;
-                        while(xRemaining > 0) {
-                            if(xRemaining > rightShift) {
-                                binaryDataArray[b++] =
-                                    (byte)(((data[i++]&0xFF) << leftShift) |
-                                           ((data[i]&0xFF) >>> rightShift));
-                            } else {
-                                binaryDataArray[b++] =
-                                    (byte)((data[i]&0xFF) << leftShift);
-                            }
-                            xRemaining -= 8;
-                        }
-                        eltOffset += lineStride;
-                    }
-                }
-            } else if(dataBuffer instanceof DataBufferShort ||
-                      dataBuffer instanceof DataBufferUShort) {
-                short[] data = dataBuffer instanceof DataBufferShort ?
-                    ((DataBufferShort)dataBuffer).getData() :
-                    ((DataBufferUShort)dataBuffer).getData();
-
-                for(int y = 0; y < rectHeight; y++) {
-                    int bOffset = bitOffset;
-                    for(int x = 0; x < rectWidth; x += 8, bOffset += 8) {
-                        int i = eltOffset + bOffset/16;
-                        int mod = bOffset % 16;
-                        int left = data[i] & 0xFFFF;
-                        if(mod <= 8) {
-                            binaryDataArray[b++] = (byte)(left >>> (8 - mod));
-                        } else {
-                            int delta = mod - 8;
-                            int right = data[i+1] & 0xFFFF;
-                            binaryDataArray[b++] =
-                                (byte)((left << delta) |
-                                       (right >>> (16 - delta)));
-                        }
-                    }
-                    eltOffset += lineStride;
-                }
-            } else if(dataBuffer instanceof DataBufferInt) {
-                int[] data = ((DataBufferInt)dataBuffer).getData();
-
-                for(int y = 0; y < rectHeight; y++) {
-                    int bOffset = bitOffset;
-                    for(int x = 0; x < rectWidth; x += 8, bOffset += 8) {
-                        int i = eltOffset + bOffset/32;
-                        int mod = bOffset % 32;
-                        int left = data[i];
-                        if(mod <= 24) {
-                            binaryDataArray[b++] =
-                                (byte)(left >>> (24 - mod));
-                        } else {
-                            int delta = mod - 24;
-                            int right = data[i+1];
-                            binaryDataArray[b++] =
-                                (byte)((left << delta) |
-                                       (right >>> (32 - delta)));
-                        }
-                    }
-                    eltOffset += lineStride;
-                }
-            }
-        }
-
-        return binaryDataArray;
-    }
-
-    /**
-     * Returns the binary data unpacked into an array of bytes.
-     * The line stride will be the width of the <code>Raster</code>.
-     *
-     * @throws IllegalArgumentException if <code>isBinary()</code> returns
-     * <code>false</code> with the <code>SampleModel</code> of the
-     * supplied <code>Raster</code> as argument.
-     */
-    public static byte[] getUnpackedBinaryData(Raster raster,
-                                               Rectangle rect) {
-        SampleModel sm = raster.getSampleModel();
-        if(!isBinary(sm)) {
-            throw new IllegalArgumentException(I18N.getString("ImageUtil0"));
-        }
-
-        int rectX = rect.x;
-        int rectY = rect.y;
-        int rectWidth = rect.width;
-        int rectHeight = rect.height;
-
-        DataBuffer dataBuffer = raster.getDataBuffer();
-
-        int dx = rectX - raster.getSampleModelTranslateX();
-        int dy = rectY - raster.getSampleModelTranslateY();
-
-        MultiPixelPackedSampleModel mpp = (MultiPixelPackedSampleModel)sm;
-        int lineStride = mpp.getScanlineStride();
-        int eltOffset = dataBuffer.getOffset() + mpp.getOffset(dx, dy);
-        int bitOffset = mpp.getBitOffset(dx);
-
-        byte[] bdata = new byte[rectWidth*rectHeight];
-        int maxY = rectY + rectHeight;
-        int maxX = rectX + rectWidth;
-        int k = 0;
-
-        if(dataBuffer instanceof DataBufferByte) {
-            byte[] data = ((DataBufferByte)dataBuffer).getData();
-            for(int y = rectY; y < maxY; y++) {
-                int bOffset = eltOffset*8 + bitOffset;
-                for(int x = rectX; x < maxX; x++) {
-                    byte b = data[bOffset/8];
-                    bdata[k++] =
-                        (byte)((b >>> (7 - bOffset & 7)) & 0x0000001);
-                    bOffset++;
-                }
-                eltOffset += lineStride;
-            }
-        } else if(dataBuffer instanceof DataBufferShort ||
-                  dataBuffer instanceof DataBufferUShort) {
-            short[] data = dataBuffer instanceof DataBufferShort ?
-                ((DataBufferShort)dataBuffer).getData() :
-                ((DataBufferUShort)dataBuffer).getData();
-            for(int y = rectY; y < maxY; y++) {
-                int bOffset = eltOffset*16 + bitOffset;
-                for(int x = rectX; x < maxX; x++) {
-                    short s = data[bOffset/16];
-                    bdata[k++] =
-                        (byte)((s >>> (15 - bOffset % 16)) &
-                               0x0000001);
-                    bOffset++;
-                }
-                eltOffset += lineStride;
-            }
-        } else if(dataBuffer instanceof DataBufferInt) {
-            int[] data = ((DataBufferInt)dataBuffer).getData();
-            for(int y = rectY; y < maxY; y++) {
-                int bOffset = eltOffset*32 + bitOffset;
-                for(int x = rectX; x < maxX; x++) {
-                    int i = data[bOffset/32];
-                    bdata[k++] =
-                        (byte)((i >>> (31 - bOffset % 32)) &
-                               0x0000001);
-                    bOffset++;
-                }
-                eltOffset += lineStride;
-            }
-        }
-
-        return bdata;
-    }
-
-    /**
-     * Sets the supplied <code>Raster</code>'s data from an array
-     * of packed binary data of the form returned by
-     * <code>getPackedBinaryData()</code>.
-     *
-     * @throws IllegalArgumentException if <code>isBinary()</code> returns
-     * <code>false</code> with the <code>SampleModel</code> of the
-     * supplied <code>Raster</code> as argument.
-     */
-    public static void setPackedBinaryData(byte[] binaryDataArray,
-                                           WritableRaster raster,
-                                           Rectangle rect) {
-        SampleModel sm = raster.getSampleModel();
-        if(!isBinary(sm)) {
-            throw new IllegalArgumentException(I18N.getString("ImageUtil0"));
-        }
-
-        int rectX = rect.x;
-        int rectY = rect.y;
-        int rectWidth = rect.width;
-        int rectHeight = rect.height;
-
-        DataBuffer dataBuffer = raster.getDataBuffer();
-
-        int dx = rectX - raster.getSampleModelTranslateX();
-        int dy = rectY - raster.getSampleModelTranslateY();
-
-        MultiPixelPackedSampleModel mpp = (MultiPixelPackedSampleModel)sm;
-        int lineStride = mpp.getScanlineStride();
-        int eltOffset = dataBuffer.getOffset() + mpp.getOffset(dx, dy);
-        int bitOffset = mpp.getBitOffset(dx);
-
-        int b = 0;
-
-        if(bitOffset == 0) {
-            if(dataBuffer instanceof DataBufferByte) {
-                byte[] data = ((DataBufferByte)dataBuffer).getData();
-                if(data == binaryDataArray) {
-                    // Optimal case: simply return.
-                    return;
-                }
-                int stride = (rectWidth + 7)/8;
-                int offset = 0;
-                for(int y = 0; y < rectHeight; y++) {
-                    System.arraycopy(binaryDataArray, offset,
-                                     data, eltOffset,
-                                     stride);
-                    offset += stride;
-                    eltOffset += lineStride;
-                }
-            } else if(dataBuffer instanceof DataBufferShort ||
-                      dataBuffer instanceof DataBufferUShort) {
-                short[] data = dataBuffer instanceof DataBufferShort ?
-                    ((DataBufferShort)dataBuffer).getData() :
-                    ((DataBufferUShort)dataBuffer).getData();
-
-                for(int y = 0; y < rectHeight; y++) {
-                    int xRemaining = rectWidth;
-                    int i = eltOffset;
-                    while(xRemaining > 8) {
-                        data[i++] =
-                            (short)(((binaryDataArray[b++] & 0xFF) << 8) |
-                                    (binaryDataArray[b++] & 0xFF));
-                        xRemaining -= 16;
-                    }
-                    if(xRemaining > 0) {
-                        data[i++] =
-                            (short)((binaryDataArray[b++] & 0xFF) << 8);
-                    }
-                    eltOffset += lineStride;
-                }
-            } else if(dataBuffer instanceof DataBufferInt) {
-                int[] data = ((DataBufferInt)dataBuffer).getData();
-
-                for(int y = 0; y < rectHeight; y++) {
-                    int xRemaining = rectWidth;
-                    int i = eltOffset;
-                    while(xRemaining > 24) {
-                        data[i++] =
-                            (int)(((binaryDataArray[b++] & 0xFF) << 24) |
-                                  ((binaryDataArray[b++] & 0xFF) << 16) |
-                                  ((binaryDataArray[b++] & 0xFF) << 8) |
-                                  (binaryDataArray[b++] & 0xFF));
-                        xRemaining -= 32;
-                    }
-                    int shift = 24;
-                    while(xRemaining > 0) {
-                        data[i] |=
-                            (int)((binaryDataArray[b++] & 0xFF) << shift);
-                        shift -= 8;
-                        xRemaining -= 8;
-                    }
-                    eltOffset += lineStride;
-                }
-            }
-        } else { // bitOffset != 0
-            int stride = (rectWidth + 7)/8;
-            int offset = 0;
-            if(dataBuffer instanceof DataBufferByte) {
-                byte[] data = ((DataBufferByte)dataBuffer).getData();
-
-                if((bitOffset & 7) == 0) {
-                    for(int y = 0; y < rectHeight; y++) {
-                        System.arraycopy(binaryDataArray, offset,
-                                         data, eltOffset,
-                                         stride);
-                        offset += stride;
-                        eltOffset += lineStride;
-                    }
-                } else { // bitOffset % 8 != 0
-                    int rightShift = bitOffset & 7;
-                    int leftShift = 8 - rightShift;
-                    int leftShift8 = 8 + leftShift;
-                    int mask = (byte)(255<<leftShift);
-                    int mask1 = (byte)~mask;
-
-                    for(int y = 0; y < rectHeight; y++) {
-                        int i = eltOffset;
-                        int xRemaining = rectWidth;
-                        while(xRemaining > 0) {
-                            byte datum = binaryDataArray[b++];
-
-                            if (xRemaining > leftShift8) {
-                                // when all the bits in this BYTE will be set
-                                // into the data buffer.
-                                data[i] = (byte)((data[i] & mask ) |
-                                    ((datum&0xFF) >>> rightShift));
-                                data[++i] = (byte)((datum & 0xFF) << leftShift);
-                            } else if (xRemaining > leftShift) {
-                                // All the "leftShift" high bits will be set
-                                // into the data buffer.  But not all the
-                                // "rightShift" low bits will be set.
-                                data[i] = (byte)((data[i] & mask ) |
-                                    ((datum&0xFF) >>> rightShift));
-                                i++;
-                                data[i] =
-                                    (byte)((data[i] & mask1) | ((datum & 0xFF) << leftShift));
-                            }
-                            else {
-                                // Less than "leftShift" high bits will be set.
-                                int remainMask = (1 << leftShift - xRemaining) - 1;
-                                data[i] =
-                                    (byte)((data[i] & (mask | remainMask)) |
-                                    (datum&0xFF) >>> rightShift & ~remainMask);
-                            }
-                            xRemaining -= 8;
-                        }
-                        eltOffset += lineStride;
-                    }
-                }
-            } else if(dataBuffer instanceof DataBufferShort ||
-                      dataBuffer instanceof DataBufferUShort) {
-                short[] data = dataBuffer instanceof DataBufferShort ?
-                    ((DataBufferShort)dataBuffer).getData() :
-                    ((DataBufferUShort)dataBuffer).getData();
-
-                int rightShift = bitOffset & 7;
-                int leftShift = 8 - rightShift;
-                int leftShift16 = 16 + leftShift;
-                int mask = (short)(~(255 << leftShift));
-                int mask1 = (short)(65535 << leftShift);
-                int mask2 = (short)~mask1;
-
-                for(int y = 0; y < rectHeight; y++) {
-                    int bOffset = bitOffset;
-                    int xRemaining = rectWidth;
-                    for(int x = 0; x < rectWidth;
-                        x += 8, bOffset += 8, xRemaining -= 8) {
-                        int i = eltOffset + (bOffset >> 4);
-                        int mod = bOffset & 15;
-                        int datum = binaryDataArray[b++] & 0xFF;
-                        if(mod <= 8) {
-                            // This BYTE is set into one SHORT
-                            if (xRemaining < 8) {
-                                // Mask the bits to be set.
-                                datum &= 255 << 8 - xRemaining;
-                            }
-                            data[i] = (short)((data[i] & mask) | (datum << leftShift));
-                        } else if (xRemaining > leftShift16) {
-                            // This BYTE will be set into two SHORTs
-                            data[i] = (short)((data[i] & mask1) | ((datum >>> rightShift)&0xFFFF));
-                            data[++i] =
-                                (short)((datum << leftShift)&0xFFFF);
-                        } else if (xRemaining > leftShift) {
-                            // This BYTE will be set into two SHORTs;
-                            // But not all the low bits will be set into SHORT
-                            data[i] = (short)((data[i] & mask1) | ((datum >>> rightShift)&0xFFFF));
-                            i++;
-                            data[i] =
-                                (short)((data[i] & mask2) | ((datum << leftShift)&0xFFFF));
-                        } else {
-                            // Only some of the high bits will be set into
-                            // SHORTs
-                            int remainMask = (1 << leftShift - xRemaining) - 1;
-                            data[i] = (short)((data[i] & (mask1 | remainMask)) |
-                                      ((datum >>> rightShift)&0xFFFF & ~remainMask));
-                        }
-                    }
-                    eltOffset += lineStride;
-                }
-            } else if(dataBuffer instanceof DataBufferInt) {
-                int[] data = ((DataBufferInt)dataBuffer).getData();
-                int rightShift = bitOffset & 7;
-                int leftShift = 8 - rightShift;
-                int leftShift32 = 32 + leftShift;
-                int mask = 0xFFFFFFFF << leftShift;
-                int mask1 = ~mask;
-
-                for(int y = 0; y < rectHeight; y++) {
-                    int bOffset = bitOffset;
-                    int xRemaining = rectWidth;
-                    for(int x = 0; x < rectWidth;
-                        x += 8, bOffset += 8, xRemaining -= 8) {
-                        int i = eltOffset + (bOffset >> 5);
-                        int mod = bOffset & 31;
-                        int datum = binaryDataArray[b++] & 0xFF;
-                        if(mod <= 24) {
-                            // This BYTE is set into one INT
-                            int shift = 24 - mod;
-                            if (xRemaining < 8) {
-                                // Mask the bits to be set.
-                                datum &= 255 << 8 - xRemaining;
-                            }
-                            data[i] = (data[i] & (~(255 << shift))) | (datum << shift);
-                        } else if (xRemaining > leftShift32) {
-                            // All the bits of this BYTE will be set into two INTs
-                            data[i] = (data[i] & mask) | (datum >>> rightShift);
-                            data[++i] = datum << leftShift;
-                        } else if (xRemaining > leftShift) {
-                            // This BYTE will be set into two INTs;
-                            // But not all the low bits will be set into INT
-                            data[i] = (data[i] & mask) | (datum >>> rightShift);
-                            i++;
-                            data[i] = (data[i] & mask1) | (datum << leftShift);
-                        } else {
-                            // Only some of the high bits will be set into INT
-                            int remainMask = (1 << leftShift - xRemaining) - 1;
-                            data[i] = (data[i] & (mask | remainMask)) |
-                                      (datum >>> rightShift & ~remainMask);
-                        }
-                    }
-                    eltOffset += lineStride;
-                }
-            }
-        }
-    }
-
-    /**
-     * Copies data into the packed array of the <code>Raster</code>
-     * from an array of unpacked data of the form returned by
-     * <code>getUnpackedBinaryData()</code>.
-     *
-     * <p> If the data are binary, then the target bit will be set if
-     * and only if the corresponding byte is non-zero.
-     *
-     * @throws IllegalArgumentException if <code>isBinary()</code> returns
-     * <code>false</code> with the <code>SampleModel</code> of the
-     * supplied <code>Raster</code> as argument.
-     */
-    public static void setUnpackedBinaryData(byte[] bdata,
-                                             WritableRaster raster,
-                                             Rectangle rect) {
-        SampleModel sm = raster.getSampleModel();
-        if(!isBinary(sm)) {
-            throw new IllegalArgumentException(I18N.getString("ImageUtil0"));
-        }
-
-        int rectX = rect.x;
-        int rectY = rect.y;
-        int rectWidth = rect.width;
-        int rectHeight = rect.height;
-
-        DataBuffer dataBuffer = raster.getDataBuffer();
-
-        int dx = rectX - raster.getSampleModelTranslateX();
-        int dy = rectY - raster.getSampleModelTranslateY();
-
-        MultiPixelPackedSampleModel mpp = (MultiPixelPackedSampleModel)sm;
-        int lineStride = mpp.getScanlineStride();
-        int eltOffset = dataBuffer.getOffset() + mpp.getOffset(dx, dy);
-        int bitOffset = mpp.getBitOffset(dx);
-
-        int k = 0;
-
-        if(dataBuffer instanceof DataBufferByte) {
-            byte[] data = ((DataBufferByte)dataBuffer).getData();
-            for(int y = 0; y < rectHeight; y++) {
-                int bOffset = eltOffset*8 + bitOffset;
-                for(int x = 0; x < rectWidth; x++) {
-                    if(bdata[k++] != (byte)0) {
-                        data[bOffset/8] |=
-                            (byte)(0x00000001 << (7 - bOffset & 7));
-                    }
-                    bOffset++;
-                }
-                eltOffset += lineStride;
-            }
-        } else if(dataBuffer instanceof DataBufferShort ||
-                  dataBuffer instanceof DataBufferUShort) {
-            short[] data = dataBuffer instanceof DataBufferShort ?
-                ((DataBufferShort)dataBuffer).getData() :
-                ((DataBufferUShort)dataBuffer).getData();
-            for(int y = 0; y < rectHeight; y++) {
-                int bOffset = eltOffset*16 + bitOffset;
-                for(int x = 0; x < rectWidth; x++) {
-                    if(bdata[k++] != (byte)0) {
-                        data[bOffset/16] |=
-                            (short)(0x00000001 <<
-                                    (15 - bOffset % 16));
-                    }
-                    bOffset++;
-                }
-                eltOffset += lineStride;
-            }
-        } else if(dataBuffer instanceof DataBufferInt) {
-            int[] data = ((DataBufferInt)dataBuffer).getData();
-            for(int y = 0; y < rectHeight; y++) {
-                int bOffset = eltOffset*32 + bitOffset;
-                for(int x = 0; x < rectWidth; x++) {
-                    if(bdata[k++] != (byte)0) {
-                        data[bOffset/32] |=
-                            (int)(0x00000001 <<
-                                  (31 - bOffset % 32));
-                    }
-                    bOffset++;
-                }
-                eltOffset += lineStride;
-            }
-        }
-    }
-
-    public static boolean isBinary(SampleModel sm) {
-        return sm instanceof MultiPixelPackedSampleModel &&
-            ((MultiPixelPackedSampleModel)sm).getPixelBitStride() == 1 &&
-            sm.getNumBands() == 1;
-    }
-
-    public static ColorModel createColorModel(ColorSpace colorSpace,
-                                              SampleModel sampleModel) {
-        ColorModel colorModel = null;
-
-        if(sampleModel == null) {
-            throw new IllegalArgumentException(I18N.getString("ImageUtil1"));
-        }
-
-        int numBands = sampleModel.getNumBands();
-        if (numBands < 1 || numBands > 4) {
-            return null;
-        }
-
-        int dataType = sampleModel.getDataType();
-        if (sampleModel instanceof ComponentSampleModel) {
-            if (dataType < DataBuffer.TYPE_BYTE ||
-                //dataType == DataBuffer.TYPE_SHORT ||
-                dataType > DataBuffer.TYPE_DOUBLE) {
-                return null;
-            }
-
-            if (colorSpace == null)
-                colorSpace =
-                    numBands <= 2 ?
-                    ColorSpace.getInstance(ColorSpace.CS_GRAY) :
-                    ColorSpace.getInstance(ColorSpace.CS_sRGB);
-
-            boolean useAlpha = (numBands == 2) || (numBands == 4);
-            int transparency = useAlpha ?
-                               Transparency.TRANSLUCENT : Transparency.OPAQUE;
-
-            boolean premultiplied = false;
-
-            int dataTypeSize = DataBuffer.getDataTypeSize(dataType);
-            int[] bits = new int[numBands];
-            for (int i = 0; i < numBands; i++) {
-                bits[i] = dataTypeSize;
-            }
-
-            colorModel = new ComponentColorModel(colorSpace,
-                                                 bits,
-                                                 useAlpha,
-                                                 premultiplied,
-                                                 transparency,
-                                                 dataType);
-        } else if (sampleModel instanceof SinglePixelPackedSampleModel) {
-            SinglePixelPackedSampleModel sppsm =
-                (SinglePixelPackedSampleModel)sampleModel;
-
-            int[] bitMasks = sppsm.getBitMasks();
-            int rmask = 0;
-            int gmask = 0;
-            int bmask = 0;
-            int amask = 0;
-
-            numBands = bitMasks.length;
-            if (numBands <= 2) {
-                rmask = gmask = bmask = bitMasks[0];
-                if (numBands == 2) {
-                    amask = bitMasks[1];
-                }
-            } else {
-                rmask = bitMasks[0];
-                gmask = bitMasks[1];
-                bmask = bitMasks[2];
-                if (numBands == 4) {
-                    amask = bitMasks[3];
-                }
-            }
-
-            int[] sampleSize = sppsm.getSampleSize();
-            int bits = 0;
-            for (int i = 0; i < sampleSize.length; i++) {
-                bits += sampleSize[i];
-            }
-
-            if (colorSpace == null)
-                colorSpace = ColorSpace.getInstance(ColorSpace.CS_sRGB);
-
-            colorModel =
-                new DirectColorModel(colorSpace,
-                                     bits, rmask, gmask, bmask, amask,
-                                     false,
-                                     sampleModel.getDataType());
-        } else if (sampleModel instanceof MultiPixelPackedSampleModel) {
-            int bits =
-                ((MultiPixelPackedSampleModel)sampleModel).getPixelBitStride();
-            int size = 1 << bits;
-            byte[] comp = new byte[size];
-
-            for (int i = 0; i < size; i++)
-                comp[i] = (byte)(255 * i / (size - 1));
-
-            colorModel = new IndexColorModel(bits, size, comp, comp, comp);
-        }
-
-        return colorModel;
-    }
-
-    public static int getElementSize(SampleModel sm) {
-        int elementSize = DataBuffer.getDataTypeSize(sm.getDataType());
-
-        if (sm instanceof MultiPixelPackedSampleModel) {
-            MultiPixelPackedSampleModel mppsm =
-                (MultiPixelPackedSampleModel)sm;
-            return mppsm.getSampleSize(0) * mppsm.getNumBands();
-        } else if (sm instanceof ComponentSampleModel) {
-            return sm.getNumBands() * elementSize;
-        } else if (sm instanceof SinglePixelPackedSampleModel) {
-            return elementSize;
-        }
-
-        return elementSize * sm.getNumBands();
-
-    }
-
-    public static long getTileSize(SampleModel sm) {
-        int elementSize = DataBuffer.getDataTypeSize(sm.getDataType());
-
-        if (sm instanceof MultiPixelPackedSampleModel) {
-            MultiPixelPackedSampleModel mppsm =
-                (MultiPixelPackedSampleModel)sm;
-            return (mppsm.getScanlineStride() * mppsm.getHeight() +
-                   (mppsm.getDataBitOffset() + elementSize -1) / elementSize) *
-                   ((elementSize + 7) / 8);
-        } else if (sm instanceof ComponentSampleModel) {
-            ComponentSampleModel csm = (ComponentSampleModel)sm;
-            int[] bandOffsets = csm.getBandOffsets();
-            int maxBandOff = bandOffsets[0];
-            for (int i=1; i<bandOffsets.length; i++)
-                maxBandOff = Math.max(maxBandOff, bandOffsets[i]);
-
-            long size = 0;
-            int pixelStride = csm.getPixelStride();
-            int scanlineStride = csm.getScanlineStride();
-            if (maxBandOff >= 0)
-                size += maxBandOff + 1;
-            if (pixelStride > 0)
-                size += pixelStride * (sm.getWidth() - 1);
-            if (scanlineStride > 0)
-                size += scanlineStride * (sm.getHeight() - 1);
-
-            int[] bankIndices = csm.getBankIndices();
-            maxBandOff = bankIndices[0];
-            for (int i=1; i<bankIndices.length; i++)
-                maxBandOff = Math.max(maxBandOff, bankIndices[i]);
-            return size * (maxBandOff + 1) * ((elementSize + 7) / 8);
-        } else if (sm instanceof SinglePixelPackedSampleModel) {
-            SinglePixelPackedSampleModel sppsm =
-                (SinglePixelPackedSampleModel)sm;
-            long size = sppsm.getScanlineStride() * (sppsm.getHeight() - 1) +
-                        sppsm.getWidth();
-            return size * ((elementSize + 7) / 8);
-        }
-
-        return 0;
-    }
-
-    public static long getBandSize(SampleModel sm) {
-        int elementSize = DataBuffer.getDataTypeSize(sm.getDataType());
-
-        if (sm instanceof ComponentSampleModel) {
-            ComponentSampleModel csm = (ComponentSampleModel)sm;
-            int pixelStride = csm.getPixelStride();
-            int scanlineStride = csm.getScanlineStride();
-            long size = Math.min(pixelStride, scanlineStride);
-
-            if (pixelStride > 0)
-                size += pixelStride * (sm.getWidth() - 1);
-            if (scanlineStride > 0)
-                size += scanlineStride * (sm.getHeight() - 1);
-            return size * ((elementSize + 7) / 8);
-        } else
-            return getTileSize(sm);
-    }
-    /**
-     * Tests whether the color indices represent a gray-scale image.
-     *
-     * @param r The red channel color indices.
-     * @param g The green channel color indices.
-     * @param b The blue channel color indices.
-     * @return If all the indices have 256 entries, and are identical mappings,
-     *         return <code>true</code>; otherwise, return <code>false</code>.
-     */
-    public static boolean isIndicesForGrayscale(byte[] r, byte[] g, byte[] b) {
-        if (r.length != g.length || r.length != b.length)
-            return false;
-
-        int size = r.length;
-
-        if (size != 256)
-            return false;
-
-        for (int i = 0; i < size; i++) {
-            byte temp = (byte) i;
-
-            if (r[i] != temp || g[i] != temp || b[i] != temp)
-                return false;
-        }
-
-        return true;
-    }
-
-    /** Converts the provided object to <code>String</code> */
-    public static String convertObjectToString(Object obj) {
-        if (obj == null)
-            return "";
-
-        String s = "";
-        if (obj instanceof byte[]) {
-            byte[] bArray = (byte[])obj;
-            for (int i = 0; i < bArray.length; i++)
-                s += bArray[i] + " ";
-            return s;
-        }
-
-        if (obj instanceof int[]) {
-            int[] iArray = (int[])obj;
-            for (int i = 0; i < iArray.length; i++)
-                s += iArray[i] + " " ;
-            return s;
-        }
-
-        if (obj instanceof short[]) {
-            short[] sArray = (short[])obj;
-            for (int i = 0; i < sArray.length; i++)
-                s += sArray[i] + " " ;
-            return s;
-        }
-
-        return obj.toString();
-
-    }
-
-    /** Checks that the provided <code>ImageWriter</code> can encode
-     * the provided <code>ImageTypeSpecifier</code> or not.  If not, an
-     * <code>IIOException</code> will be thrown.
-     * @param writer The provided <code>ImageWriter</code>.
-     * @param type The image to be tested.
-     * @throws IIOException If the writer cannot encoded the provided image.
-     */
-    public static final void canEncodeImage(ImageWriter writer,
-                                            ImageTypeSpecifier type)
-        throws IIOException {
-        ImageWriterSpi spi = writer.getOriginatingProvider();
-
-        if(type != null && spi != null && !spi.canEncodeImage(type))  {
-            throw new IIOException(I18N.getString("ImageUtil2")+" "+
-                                   writer.getClass().getName());
-        }
-    }
-
-    /** Checks that the provided <code>ImageWriter</code> can encode
-     * the provided <code>ColorModel</code> and <code>SampleModel</code>.
-     * If not, an <code>IIOException</code> will be thrown.
-     * @param writer The provided <code>ImageWriter</code>.
-     * @param colorModel The provided <code>ColorModel</code>.
-     * @param sampleModel The provided <code>SampleModel</code>.
-     * @throws IIOException If the writer cannot encoded the provided image.
-     */
-    public static final void canEncodeImage(ImageWriter writer,
-                                            ColorModel colorModel,
-                                            SampleModel sampleModel)
-        throws IIOException {
-        ImageTypeSpecifier type = null;
-        if (colorModel != null && sampleModel != null)
-            type = new ImageTypeSpecifier(colorModel, sampleModel);
-        canEncodeImage(writer, type);
-    }
-
-    /**
-     * Returns whether the image has contiguous data across rows.
-     */
-    public static final boolean imageIsContiguous(RenderedImage image) {
-        SampleModel sm;
-        if(image instanceof BufferedImage) {
-            WritableRaster ras = ((BufferedImage)image).getRaster();
-            sm = ras.getSampleModel();
-        } else {
-            sm = image.getSampleModel();
-        }
-
-        if (sm instanceof ComponentSampleModel) {
-            // Ensure image rows samples are stored contiguously
-            // in a single bank.
-            ComponentSampleModel csm = (ComponentSampleModel)sm;
-
-            if (csm.getPixelStride() != csm.getNumBands()) {
-                return false;
-            }
-
-            int[] bandOffsets = csm.getBandOffsets();
-            for (int i = 0; i < bandOffsets.length; i++) {
-                if (bandOffsets[i] != i) {
-                    return false;
-                }
-            }
-
-            int[] bankIndices = csm.getBankIndices();
-            for (int i = 0; i < bandOffsets.length; i++) {
-                if (bankIndices[i] != 0) {
-                    return false;
-                }
-            }
-
-            return true;
-        }
-
-        // Otherwise true if and only if it's a bilevel image with
-        // a MultiPixelPackedSampleModel, 1 bit per pixel, and 1 bit
-        // pixel stride.
-        return ImageUtil.isBinary(sm);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/plugins/common/InputStreamAdapter.java b/ojluni/src/main/java/com/sun/imageio/plugins/common/InputStreamAdapter.java
deleted file mode 100755
index 7f5c2c2..0000000
--- a/ojluni/src/main/java/com/sun/imageio/plugins/common/InputStreamAdapter.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (c) 2000, 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.imageio.plugins.common;
-
-import java.io.IOException;
-import java.io.InputStream;
-import javax.imageio.stream.ImageInputStream;
-
-public class InputStreamAdapter extends InputStream {
-
-    ImageInputStream stream;
-
-    public InputStreamAdapter(ImageInputStream stream) {
-        super();
-
-        this.stream = stream;
-    }
-
-    public int read() throws IOException {
-        return stream.read();
-    }
-
-    public int read(byte b[], int off, int len) throws IOException {
-        return stream.read(b, off, len);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/plugins/common/LZWCompressor.java b/ojluni/src/main/java/com/sun/imageio/plugins/common/LZWCompressor.java
deleted file mode 100755
index 0177848..0000000
--- a/ojluni/src/main/java/com/sun/imageio/plugins/common/LZWCompressor.java
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-package com.sun.imageio.plugins.common;
-
-import java.io.IOException;
-import java.io.PrintStream;
-import javax.imageio.stream.ImageOutputStream;
-
-/*
- * Modified from original LZWCompressor to change interface to passing a
- * buffer of data to be compressed.
- */
-public class LZWCompressor {
-    /** base underlying code size of data being compressed 8 for TIFF, 1 to 8 for GIF **/
-    int codeSize;
-
-    /** reserved clear code based on code size **/
-    int clearCode;
-
-    /** reserved end of data code based on code size **/
-    int endOfInfo;
-
-    /** current number bits output for each code **/
-    int numBits;
-
-    /** limit at which current number of bits code size has to be increased **/
-    int limit;
-
-    /** the prefix code which represents the predecessor string to current input point **/
-    short prefix;
-
-    /** output destination for bit codes **/
-    BitFile bf;
-
-    /** general purpose LZW string table **/
-    LZWStringTable lzss;
-
-    /** modify the limits of the code values in LZW encoding due to TIFF bug / feature **/
-    boolean tiffFudge;
-
-    /**
-     * @param out destination for compressed data
-     * @param codeSize the initial code size for the LZW compressor
-     * @param TIFF flag indicating that TIFF lzw fudge needs to be applied
-     * @exception IOException if underlying output stream error
-     **/
-    public LZWCompressor(ImageOutputStream out, int codeSize, boolean TIFF)
-        throws IOException
-    {
-        bf = new BitFile(out, !TIFF); // set flag for GIF as NOT tiff
-        this.codeSize = codeSize;
-        tiffFudge = TIFF;
-        clearCode = 1 << codeSize;
-        endOfInfo = clearCode + 1;
-        numBits = codeSize + 1;
-
-        limit = (1 << numBits) - 1;
-        if (tiffFudge) {
-            --limit;
-        }
-
-        prefix = (short)0xFFFF;
-        lzss = new LZWStringTable();
-        lzss.clearTable(codeSize);
-        bf.writeBits(clearCode, numBits);
-    }
-
-    /**
-     * @param buf data to be compressed to output stream
-     * @exception IOException if underlying output stream error
-     **/
-    public void compress(byte[] buf, int offset, int length)
-        throws IOException
-    {
-        int idx;
-        byte c;
-        short index;
-
-        int maxOffset = offset + length;
-        for (idx = offset; idx < maxOffset; ++idx) {
-            c = buf[idx];
-            if ((index = lzss.findCharString(prefix, c)) != -1) {
-                prefix = index;
-            } else {
-                bf.writeBits(prefix, numBits);
-                if (lzss.addCharString(prefix, c) > limit) {
-                    if (numBits == 12) {
-                        bf.writeBits(clearCode, numBits);
-                        lzss.clearTable(codeSize);
-                        numBits = codeSize + 1;
-                    } else {
-                        ++numBits;
-                    }
-
-                    limit = (1 << numBits) - 1;
-                    if (tiffFudge) {
-                        --limit;
-                    }
-                }
-                prefix = (short)((short)c & 0xFF);
-            }
-        }
-    }
-
-    /*
-     * Indicate to compressor that no more data to go so write out
-     * any remaining buffered data.
-     *
-     * @exception IOException if underlying output stream error
-     */
-    public void flush() throws IOException {
-        if (prefix != -1) {
-            bf.writeBits(prefix, numBits);
-        }
-
-        bf.writeBits(endOfInfo, numBits);
-        bf.flush();
-    }
-
-    public void dump(PrintStream out) {
-        lzss.dump(out);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/plugins/common/LZWStringTable.java b/ojluni/src/main/java/com/sun/imageio/plugins/common/LZWStringTable.java
deleted file mode 100755
index cfed0f4..0000000
--- a/ojluni/src/main/java/com/sun/imageio/plugins/common/LZWStringTable.java
+++ /dev/null
@@ -1,218 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-package com.sun.imageio.plugins.common;
-
-import java.io.PrintStream;
-
-/**
- * General purpose LZW String Table.
- * Extracted from GIFEncoder by Adam Doppelt
- * Comments added by Robin Luiten
- * <code>expandCode</code> added by Robin Luiten
- * The strLen table to give quick access to the lenght of an expanded
- * code for use by the <code>expandCode</code> method added by Robin.
- **/
-public class LZWStringTable {
-    /** codesize + Reserved Codes */
-    private final static int RES_CODES = 2;
-
-    private final static short HASH_FREE = (short)0xFFFF;
-    private final static short NEXT_FIRST = (short)0xFFFF;
-
-    private final static int MAXBITS = 12;
-    private final static int MAXSTR = (1 << MAXBITS);
-
-    private final static short HASHSIZE = 9973;
-    private final static short HASHSTEP = 2039;
-
-    byte[]  strChr;  // after predecessor character
-    short[] strNxt;  // predecessor string
-    short[] strHsh;  // hash table to find  predecessor + char pairs
-    short numStrings;  // next code if adding new prestring + char
-
-    /*
-     * each entry corresponds to a code and contains the length of data
-     * that the code expands to when decoded.
-     */
-    int[] strLen;
-
-    /*
-     * Constructor allocate memory for string store data
-     */
-    public LZWStringTable() {
-        strChr = new byte[MAXSTR];
-        strNxt = new short[MAXSTR];
-        strLen = new int[MAXSTR];
-        strHsh = new short[HASHSIZE];
-    }
-
-    /*
-     * @param index value of -1 indicates no predecessor [used in initialisation]
-     * @param b the byte [character] to add to the string store which follows
-     * the predecessor string specified the index.
-     * @return 0xFFFF if no space in table left for addition of predecesor
-     * index and byte b. Else return the code allocated for combination index + b.
-     */
-    public int addCharString(short index, byte b) {
-        int hshidx;
-
-        if (numStrings >= MAXSTR) { // if used up all codes
-            return 0xFFFF;
-        }
-
-        hshidx = hash(index, b);
-        while (strHsh[hshidx] != HASH_FREE) {
-            hshidx = (hshidx + HASHSTEP) % HASHSIZE;
-        }
-
-        strHsh[hshidx] = numStrings;
-        strChr[numStrings] = b;
-        if (index == HASH_FREE) {
-            strNxt[numStrings] = NEXT_FIRST;
-            strLen[numStrings] = 1;
-        } else {
-            strNxt[numStrings] = index;
-            strLen[numStrings] = strLen[index] + 1;
-        }
-
-        return numStrings++; // return the code and inc for next code
-    }
-
-    /*
-     * @param index index to prefix string
-     * @param b the character that follws the index prefix
-     * @return b if param index is HASH_FREE. Else return the code
-     * for this prefix and byte successor
-     */
-    public short findCharString(short index, byte b) {
-        int hshidx, nxtidx;
-
-        if (index == HASH_FREE) {
-            return (short)(b & 0xFF);    // Rob fixed used to sign extend
-        }
-
-        hshidx = hash(index, b);
-        while ((nxtidx = strHsh[hshidx]) != HASH_FREE) { // search
-            if (strNxt[nxtidx] == index && strChr[nxtidx] == b) {
-                return (short)nxtidx;
-            }
-            hshidx = (hshidx + HASHSTEP) % HASHSIZE;
-        }
-
-        return (short)0xFFFF;
-    }
-
-    /*
-     * @param codesize the size of code to be preallocated for the
-     * string store.
-     */
-    public void clearTable(int codesize) {
-        numStrings = 0;
-
-        for (int q = 0; q < HASHSIZE; q++) {
-            strHsh[q] = HASH_FREE;
-        }
-
-        int w = (1 << codesize) + RES_CODES;
-        for (int q = 0; q < w; q++) {
-            addCharString((short)0xFFFF, (byte)q); // init with no prefix
-        }
-    }
-
-    static public int hash(short index, byte lastbyte) {
-        return ((int)((short)(lastbyte << 8) ^ index) & 0xFFFF) % HASHSIZE;
-    }
-
-    /*
-     * If expanded data doesn't fit into array only what will fit is written
-     * to buf and the return value indicates how much of the expanded code has
-     * been written to the buf. The next call to expandCode() should be with
-     * the same code and have the skip parameter set the negated value of the
-     * previous return. Succesive negative return values should be negated and
-     * added together for next skip parameter value with same code.
-     *
-     * @param buf buffer to place expanded data into
-     * @param offset offset to place expanded data
-     * @param code the code to expand to the byte array it represents.
-     * PRECONDITION This code must already be in the LZSS
-     * @param skipHead is the number of bytes at the start of the expanded code to
-     * be skipped before data is written to buf. It is possible that skipHead is
-     * equal to codeLen.
-     * @return the length of data expanded into buf. If the expanded code is longer
-     * than space left in buf then the value returned is a negative number which when
-     * negated is equal to the number of bytes that were used of the code being expanded.
-     * This negative value also indicates the buffer is full.
-     */
-    public int expandCode(byte[] buf, int offset, short code, int skipHead) {
-        if (offset == -2) {
-            if (skipHead == 1) {
-                skipHead = 0;
-            }
-        }
-        if (code == (short)0xFFFF ||    // just in case
-            skipHead == strLen[code])  // DONE no more unpacked
-        {
-            return 0;
-        }
-
-        int expandLen;  // how much data we are actually expanding
-        int codeLen = strLen[code] - skipHead; // length of expanded code left
-        int bufSpace = buf.length - offset;  // how much space left
-        if (bufSpace > codeLen) {
-            expandLen = codeLen; // only got this many to unpack
-        } else {
-            expandLen = bufSpace;
-        }
-
-        int skipTail = codeLen - expandLen;  // only > 0 if codeLen > bufSpace [left overs]
-
-        int idx = offset + expandLen;   // initialise to exclusive end address of buffer area
-
-        // NOTE: data unpacks in reverse direction and we are placing the
-        // unpacked data directly into the array in the correct location.
-        while ((idx > offset) && (code != (short)0xFFFF)) {
-            if (--skipTail < 0) { // skip required of expanded data
-                buf[--idx] = strChr[code];
-            }
-            code = strNxt[code];    // to predecessor code
-        }
-
-        if (codeLen > expandLen) {
-            return -expandLen; // indicate what part of codeLen used
-        } else {
-            return expandLen;     // indicate length of dat unpacked
-        }
-    }
-
-    public void dump(PrintStream out) {
-        int i;
-        for (i = 258; i < numStrings; ++i) {
-            out.println(" strNxt[" + i + "] = " + strNxt[i]
-                        + " strChr " + Integer.toHexString(strChr[i] & 0xFF)
-                        + " strLen " + Integer.toHexString(strLen[i]));
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/plugins/common/PaletteBuilder.java b/ojluni/src/main/java/com/sun/imageio/plugins/common/PaletteBuilder.java
deleted file mode 100755
index 35506ec..0000000
--- a/ojluni/src/main/java/com/sun/imageio/plugins/common/PaletteBuilder.java
+++ /dev/null
@@ -1,486 +0,0 @@
-/*
- * Copyright (c) 2005, 2006, 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.imageio.plugins.common;
-
-import java.awt.Transparency;
-import java.awt.image.BufferedImage;
-import java.awt.image.RenderedImage;
-import java.awt.image.ColorModel;
-import java.awt.image.IndexColorModel;
-import java.awt.image.Raster;
-import java.awt.image.WritableRaster;
-import java.awt.Color;
-import javax.imageio.ImageTypeSpecifier;
-
-
-/**
- * This class implements the octree quantization method
- *  as it is described in the "Graphics Gems"
- *  (ISBN 0-12-286166-3, Chapter 4, pages 297-293)
- */
-public class PaletteBuilder {
-
-    /**
-     * maximum of tree depth
-     */
-    protected static final int MAXLEVEL = 8;
-
-    protected RenderedImage src;
-    protected ColorModel srcColorModel;
-    protected Raster srcRaster;
-
-    protected int requiredSize;
-
-    protected ColorNode root;
-
-    protected int numNodes;
-    protected int maxNodes;
-    protected int currLevel;
-    protected int currSize;
-
-    protected ColorNode[] reduceList;
-    protected ColorNode[] palette;
-
-    protected int transparency;
-    protected ColorNode transColor;
-
-
-    /**
-     * Creates an image representing given image
-     * <code>src</code> using <code>IndexColorModel</code>.
-     *
-     * Lossless conversion is not always possible (e.g. if number
-     * of colors in the  given image exceeds maximum palette size).
-     * Result image then is an approximation constructed by octree
-     * quantization method.
-     *
-     * @exception IllegalArgumentException if <code>src</code> is
-     * <code>null</code>.
-     *
-     * @exception UnsupportedOperationException if implemented method
-     * is unable to create approximation of <code>src</code>
-     * and <code>canCreatePalette</code> returns <code>false</code>.
-     *
-     * @see createIndexColorModel
-     *
-     * @see canCreatePalette
-     *
-     */
-    public static RenderedImage createIndexedImage(RenderedImage src) {
-        PaletteBuilder pb = new PaletteBuilder(src);
-        pb.buildPalette();
-        return pb.getIndexedImage();
-    }
-
-    /**
-     * Creates an palette representing colors from given image
-     * <code>img</code>. If number of colors in the given image exceeds
-     * maximum palette size closest colors would be merged.
-     *
-     * @exception IllegalArgumentException if <code>img</code> is
-     * <code>null</code>.
-     *
-     * @exception UnsupportedOperationException if implemented method
-     * is unable to create approximation of <code>img</code>
-     * and <code>canCreatePalette</code> returns <code>false</code>.
-     *
-     * @see createIndexedImage
-     *
-     * @see canCreatePalette
-     *
-     */
-    public static IndexColorModel createIndexColorModel(RenderedImage img) {
-        PaletteBuilder pb = new PaletteBuilder(img);
-        pb.buildPalette();
-        return pb.getIndexColorModel();
-    }
-
-    /**
-     * Returns <code>true</code> if PaletteBuilder is able to create
-     * palette for given image type.
-     *
-     * @param type an instance of <code>ImageTypeSpecifier</code> to be
-     * indexed.
-     *
-     * @return <code>true</code> if the <code>PaletteBuilder</code>
-     * is likely to be able to create palette for this image type.
-     *
-     * @exception IllegalArgumentException if <code>type</code>
-     * is <code>null</code>.
-     */
-    public static boolean canCreatePalette(ImageTypeSpecifier type) {
-        if (type == null) {
-            throw new IllegalArgumentException("type == null");
-        }
-        return true;
-    }
-
-    /**
-     * Returns <code>true</code> if PaletteBuilder is able to create
-     * palette for given rendered image.
-     *
-     * @param image an instance of <code>RenderedImage</code> to be
-     * indexed.
-     *
-     * @return <code>true</code> if the <code>PaletteBuilder</code>
-     * is likely to be able to create palette for this image type.
-     *
-     * @exception IllegalArgumentException if <code>image</code>
-     * is <code>null</code>.
-     */
-    public static boolean canCreatePalette(RenderedImage image) {
-        if (image == null) {
-            throw new IllegalArgumentException("image == null");
-        }
-        ImageTypeSpecifier type = new ImageTypeSpecifier(image);
-        return canCreatePalette(type);
-    }
-
-    protected RenderedImage getIndexedImage() {
-        IndexColorModel icm = getIndexColorModel();
-
-        BufferedImage dst =
-            new BufferedImage(src.getWidth(), src.getHeight(),
-                              BufferedImage.TYPE_BYTE_INDEXED, icm);
-
-        WritableRaster wr = dst.getRaster();
-        for (int y =0; y < dst.getHeight(); y++) {
-            for (int x = 0; x < dst.getWidth(); x++) {
-                Color aColor = getSrcColor(x,y);
-                wr.setSample(x, y, 0, findColorIndex(root, aColor));
-            }
-        }
-
-        return dst;
-    }
-
-
-    protected PaletteBuilder(RenderedImage src) {
-        this(src, 256);
-    }
-
-    protected PaletteBuilder(RenderedImage src, int size) {
-        this.src = src;
-        this.srcColorModel = src.getColorModel();
-        this.srcRaster = src.getData();
-
-        this.transparency =
-            srcColorModel.getTransparency();
-
-        this.requiredSize = size;
-    }
-
-    private Color getSrcColor(int x, int y) {
-        int argb = srcColorModel.getRGB(srcRaster.getDataElements(x, y, null));
-        return new Color(argb, transparency != Transparency.OPAQUE);
-    }
-
-    protected int findColorIndex(ColorNode aNode, Color aColor) {
-        if (transparency != Transparency.OPAQUE &&
-            aColor.getAlpha() != 0xff)
-        {
-            return 0; // default transparnt pixel
-        }
-
-        if (aNode.isLeaf) {
-            return aNode.paletteIndex;
-        } else {
-            int childIndex = getBranchIndex(aColor, aNode.level);
-
-            return findColorIndex(aNode.children[childIndex], aColor);
-        }
-    }
-
-    protected void buildPalette() {
-        reduceList = new ColorNode[MAXLEVEL + 1];
-        for (int i = 0; i < reduceList.length; i++) {
-            reduceList[i] = null;
-        }
-
-        numNodes = 0;
-        maxNodes = 0;
-        root = null;
-        currSize = 0;
-        currLevel = MAXLEVEL;
-
-        /*
-          from the book
-
-        */
-
-        int w = src.getWidth();
-        int h = src.getHeight();
-        for (int y = 0; y < h; y++) {
-            for (int x = 0; x < w; x++) {
-
-                Color aColor = getSrcColor(w - x - 1, h - y - 1);
-                /*
-                 * If transparency of given image is not opaque we assume all
-                 * colors with alpha less than 1.0 as fully transparent.
-                 */
-                if (transparency != Transparency.OPAQUE &&
-                    aColor.getAlpha() != 0xff)
-                {
-                    if (transColor == null) {
-                        this.requiredSize --; // one slot for transparent color
-
-                        transColor = new ColorNode();
-                        transColor.isLeaf = true;
-                    }
-                    transColor = insertNode(transColor, aColor, 0);
-                } else {
-                    root = insertNode(root, aColor, 0);
-                }
-                if (currSize > requiredSize) {
-                    reduceTree();
-                }
-            }
-        }
-    }
-
-    protected ColorNode insertNode(ColorNode aNode, Color aColor, int aLevel) {
-
-        if (aNode == null) {
-            aNode = new ColorNode();
-            numNodes++;
-            if (numNodes > maxNodes) {
-                maxNodes = numNodes;
-            }
-            aNode.level = aLevel;
-            aNode.isLeaf = (aLevel > MAXLEVEL);
-            if (aNode.isLeaf) {
-                currSize++;
-            }
-        }
-        aNode.colorCount++;
-        aNode.red   += aColor.getRed();
-        aNode.green += aColor.getGreen();
-        aNode.blue  += aColor.getBlue();
-
-        if (!aNode.isLeaf) {
-            int branchIndex = getBranchIndex(aColor, aLevel);
-            if (aNode.children[branchIndex] == null) {
-                aNode.childCount++;
-                if (aNode.childCount == 2) {
-                    aNode.nextReducible = reduceList[aLevel];
-                    reduceList[aLevel] = aNode;
-                }
-            }
-            aNode.children[branchIndex] =
-                insertNode(aNode.children[branchIndex], aColor, aLevel + 1);
-        }
-        return aNode;
-    }
-
-    protected IndexColorModel getIndexColorModel() {
-        int size = currSize;
-        if (transColor != null) {
-            size ++; // we need place for transparent color;
-        }
-
-        byte[] red = new byte[size];
-        byte[] green = new byte[size];
-        byte[] blue = new byte[size];
-
-        int index = 0;
-        palette = new ColorNode[size];
-        if (transColor != null) {
-            index ++;
-        }
-
-        if (root != null) {
-            findPaletteEntry(root, index, red, green, blue);
-        }
-
-        IndexColorModel icm = null;
-        if (transColor  != null) {
-            icm = new IndexColorModel(8, size, red, green, blue, 0);
-        } else {
-            icm = new IndexColorModel(8, currSize, red, green, blue);
-        }
-        return icm;
-    }
-
-    protected int findPaletteEntry(ColorNode aNode, int index,
-                                   byte[] red, byte[] green, byte[] blue)
-        {
-            if (aNode.isLeaf) {
-                red[index]   = (byte)(aNode.red/aNode.colorCount);
-                green[index] = (byte)(aNode.green/aNode.colorCount);
-                blue[index]  = (byte)(aNode.blue/aNode.colorCount);
-                aNode.paletteIndex = index;
-
-                palette[index] = aNode;
-
-                index++;
-            } else {
-                for (int i = 0; i < 8; i++) {
-                    if (aNode.children[i] != null) {
-                        index = findPaletteEntry(aNode.children[i], index,
-                                                 red, green, blue);
-                    }
-                }
-            }
-            return index;
-        }
-
-    protected int getBranchIndex(Color aColor, int aLevel) {
-        if (aLevel > MAXLEVEL || aLevel < 0) {
-            throw new IllegalArgumentException("Invalid octree node depth: " +
-                                               aLevel);
-        }
-
-        int shift = MAXLEVEL - aLevel;
-        int red_index = 0x1 & ((0xff & aColor.getRed()) >> shift);
-        int green_index = 0x1 & ((0xff & aColor.getGreen()) >> shift);
-        int blue_index = 0x1 & ((0xff & aColor.getBlue()) >> shift);
-        int index = (red_index << 2) | (green_index << 1) | blue_index;
-        return index;
-    }
-
-    protected void reduceTree() {
-        int level = reduceList.length - 1;
-        while (reduceList[level] == null && level >= 0) {
-            level--;
-        }
-
-        ColorNode thisNode = reduceList[level];
-        if (thisNode == null) {
-            // nothing to reduce
-            return;
-        }
-
-        // look for element with lower color count
-        ColorNode pList = thisNode;
-        int minColorCount = pList.colorCount;
-
-        int cnt = 1;
-        while (pList.nextReducible != null) {
-            if (minColorCount > pList.nextReducible.colorCount) {
-                thisNode = pList;
-                minColorCount = pList.colorCount;
-            }
-            pList = pList.nextReducible;
-            cnt++;
-        }
-
-        // save pointer to first reducible node
-        // NB: current color count for node could be changed in future
-        if (thisNode == reduceList[level]) {
-            reduceList[level] = thisNode.nextReducible;
-        } else {
-            pList = thisNode.nextReducible; // we need to process it
-            thisNode.nextReducible = pList.nextReducible;
-            thisNode = pList;
-        }
-
-        if (thisNode.isLeaf) {
-            return;
-        }
-
-        // reduce node
-        int leafChildCount = thisNode.getLeafChildCount();
-        thisNode.isLeaf = true;
-        currSize -= (leafChildCount - 1);
-        int aDepth = thisNode.level;
-        for (int i = 0; i < 8; i++) {
-            thisNode.children[i] = freeTree(thisNode.children[i]);
-        }
-        thisNode.childCount = 0;
-    }
-
-    protected ColorNode freeTree(ColorNode aNode) {
-        if (aNode == null) {
-            return null;
-        }
-        for (int i = 0; i < 8; i++) {
-            aNode.children[i] = freeTree(aNode.children[i]);
-        }
-
-        numNodes--;
-        return null;
-    }
-
-    /**
-     * The node of color tree.
-     */
-    protected class ColorNode {
-        public boolean isLeaf;
-        public int childCount;
-        ColorNode[] children;
-
-        public int colorCount;
-        public long red;
-        public long blue;
-        public long green;
-
-        public int paletteIndex;
-
-        public int level;
-        ColorNode nextReducible;
-
-        public ColorNode() {
-            isLeaf = false;
-            level = 0;
-            childCount = 0;
-            children = new ColorNode[8];
-            for (int i = 0; i < 8; i++) {
-                children[i] = null;
-            }
-
-            colorCount = 0;
-            red = green = blue = 0;
-
-            paletteIndex = 0;
-        }
-
-        public int getLeafChildCount() {
-            if (isLeaf) {
-                return 0;
-            }
-            int cnt = 0;
-            for (int i = 0; i < children.length; i++) {
-                if (children[i] != null) {
-                    if (children[i].isLeaf) {
-                        cnt ++;
-                    } else {
-                        cnt += children[i].getLeafChildCount();
-                    }
-                }
-            }
-            return cnt;
-        }
-
-        public int getRGB() {
-            int r = (int)red/colorCount;
-            int g = (int)green/colorCount;
-            int b = (int)blue/colorCount;
-
-            int c = 0xff << 24 | (0xff&r) << 16 | (0xff&g) << 8 | (0xff&b);
-            return c;
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/plugins/common/ReaderUtil.java b/ojluni/src/main/java/com/sun/imageio/plugins/common/ReaderUtil.java
deleted file mode 100755
index cedc428..0000000
--- a/ojluni/src/main/java/com/sun/imageio/plugins/common/ReaderUtil.java
+++ /dev/null
@@ -1,216 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-package com.sun.imageio.plugins.common;
-
-import java.awt.Point;
-import java.awt.Rectangle;
-import java.io.IOException;
-import javax.imageio.stream.ImageInputStream;
-
-/**
- * This class contains utility methods that may be useful to ImageReader
- * plugins.  Ideally these methods would be in the ImageReader base class
- * so that all subclasses could benefit from them, but that would be an
- * addition to the existing API, and it is not yet clear whether these methods
- * are universally useful, so for now we will leave them here.
- */
-public class ReaderUtil {
-
-    // Helper for computeUpdatedPixels method
-    private static void computeUpdatedPixels(int sourceOffset,
-                                             int sourceExtent,
-                                             int destinationOffset,
-                                             int dstMin,
-                                             int dstMax,
-                                             int sourceSubsampling,
-                                             int passStart,
-                                             int passExtent,
-                                             int passPeriod,
-                                             int[] vals,
-                                             int offset)
-    {
-        // We need to satisfy the congruences:
-        // dst = destinationOffset + (src - sourceOffset)/sourceSubsampling
-        //
-        // src - passStart == 0 (mod passPeriod)
-        // src - sourceOffset == 0 (mod sourceSubsampling)
-        //
-        // subject to the inequalities:
-        //
-        // src >= passStart
-        // src < passStart + passExtent
-        // src >= sourceOffset
-        // src < sourceOffset + sourceExtent
-        // dst >= dstMin
-        // dst <= dstmax
-        //
-        // where
-        //
-        // dst = destinationOffset + (src - sourceOffset)/sourceSubsampling
-        //
-        // For now we use a brute-force approach although we could
-        // attempt to analyze the congruences.  If passPeriod and
-        // sourceSubsamling are relatively prime, the period will be
-        // their product.  If they share a common factor, either the
-        // period will be equal to the larger value, or the sequences
-        // will be completely disjoint, depending on the relationship
-        // between passStart and sourceOffset.  Since we only have to do this
-        // twice per image (once each for X and Y), it seems cheap enough
-        // to do it the straightforward way.
-
-        boolean gotPixel = false;
-        int firstDst = -1;
-        int secondDst = -1;
-        int lastDst = -1;
-
-        for (int i = 0; i < passExtent; i++) {
-            int src = passStart + i*passPeriod;
-            if (src < sourceOffset) {
-                continue;
-            }
-            if ((src - sourceOffset) % sourceSubsampling != 0) {
-                continue;
-            }
-            if (src >= sourceOffset + sourceExtent) {
-                break;
-            }
-
-            int dst = destinationOffset +
-                (src - sourceOffset)/sourceSubsampling;
-            if (dst < dstMin) {
-                continue;
-            }
-            if (dst > dstMax) {
-                break;
-            }
-
-            if (!gotPixel) {
-                firstDst = dst; // Record smallest valid pixel
-                gotPixel = true;
-            } else if (secondDst == -1) {
-                secondDst = dst; // Record second smallest valid pixel
-            }
-            lastDst = dst; // Record largest valid pixel
-        }
-
-        vals[offset] = firstDst;
-
-        // If we never saw a valid pixel, set width to 0
-        if (!gotPixel) {
-            vals[offset + 2] = 0;
-        } else {
-            vals[offset + 2] = lastDst - firstDst + 1;
-        }
-
-        // The period is given by the difference of any two adjacent pixels
-        vals[offset + 4] = Math.max(secondDst - firstDst, 1);
-    }
-
-    /**
-     * A utility method that computes the exact set of destination
-     * pixels that will be written during a particular decoding pass.
-     * The intent is to simplify the work done by readers in combining
-     * the source region, source subsampling, and destination offset
-     * information obtained from the <code>ImageReadParam</code> with
-     * the offsets and periods of a progressive or interlaced decoding
-     * pass.
-     *
-     * @param sourceRegion a <code>Rectangle</code> containing the
-     * source region being read, offset by the source subsampling
-     * offsets, and clipped against the source bounds, as returned by
-     * the <code>getSourceRegion</code> method.
-     * @param destinationOffset a <code>Point</code> containing the
-     * coordinates of the upper-left pixel to be written in the
-     * destination.
-     * @param dstMinX the smallest X coordinate (inclusive) of the
-     * destination <code>Raster</code>.
-     * @param dstMinY the smallest Y coordinate (inclusive) of the
-     * destination <code>Raster</code>.
-     * @param dstMaxX the largest X coordinate (inclusive) of the destination
-     * <code>Raster</code>.
-     * @param dstMaxY the largest Y coordinate (inclusive) of the destination
-     * <code>Raster</code>.
-     * @param sourceXSubsampling the X subsampling factor.
-     * @param sourceYSubsampling the Y subsampling factor.
-     * @param passXStart the smallest source X coordinate (inclusive)
-     * of the current progressive pass.
-     * @param passYStart the smallest source Y coordinate (inclusive)
-     * of the current progressive pass.
-     * @param passWidth the width in pixels of the current progressive
-     * pass.
-     * @param passHeight the height in pixels of the current progressive
-     * pass.
-     * @param passPeriodX the X period (horizontal spacing between
-     * pixels) of the current progressive pass.
-     * @param passPeriodY the Y period (vertical spacing between
-     * pixels) of the current progressive pass.
-     *
-     * @return an array of 6 <code>int</code>s containing the
-     * destination min X, min Y, width, height, X period and Y period
-     * of the region that will be updated.
-     */
-    public static int[] computeUpdatedPixels(Rectangle sourceRegion,
-                                             Point destinationOffset,
-                                             int dstMinX,
-                                             int dstMinY,
-                                             int dstMaxX,
-                                             int dstMaxY,
-                                             int sourceXSubsampling,
-                                             int sourceYSubsampling,
-                                             int passXStart,
-                                             int passYStart,
-                                             int passWidth,
-                                             int passHeight,
-                                             int passPeriodX,
-                                             int passPeriodY)
-    {
-        int[] vals = new int[6];
-        computeUpdatedPixels(sourceRegion.x, sourceRegion.width,
-                             destinationOffset.x,
-                             dstMinX, dstMaxX, sourceXSubsampling,
-                             passXStart, passWidth, passPeriodX,
-                             vals, 0);
-        computeUpdatedPixels(sourceRegion.y, sourceRegion.height,
-                             destinationOffset.y,
-                             dstMinY, dstMaxY, sourceYSubsampling,
-                             passYStart, passHeight, passPeriodY,
-                             vals, 1);
-        return vals;
-    }
-
-    public static int readMultiByteInteger(ImageInputStream iis)
-        throws IOException
-    {
-        int value = iis.readByte();
-        int result = value & 0x7f;
-        while((value & 0x80) == 0x80) {
-            result <<= 7;
-            value = iis.readByte();
-            result |= (value & 0x7f);
-        }
-        return result;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/plugins/common/StandardMetadataFormat.java b/ojluni/src/main/java/com/sun/imageio/plugins/common/StandardMetadataFormat.java
deleted file mode 100755
index 08a1715..0000000
--- a/ojluni/src/main/java/com/sun/imageio/plugins/common/StandardMetadataFormat.java
+++ /dev/null
@@ -1,499 +0,0 @@
-/*
- * Copyright (c) 2001, 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.imageio.plugins.common;
-
-import java.util.ArrayList;
-import java.util.List;
-import javax.imageio.ImageTypeSpecifier;
-import javax.imageio.metadata.IIOMetadataFormatImpl;
-
-public class StandardMetadataFormat extends IIOMetadataFormatImpl {
-
-    // Utility method for nodes with a single atttribute named "value"
-    private void addSingleAttributeElement(String elementName,
-                                           String parentName,
-                                           int dataType) {
-        addElement(elementName, parentName, CHILD_POLICY_EMPTY);
-        addAttribute(elementName, "value", dataType, true, null);
-    }
-
-    public StandardMetadataFormat() {
-        super(standardMetadataFormatName, CHILD_POLICY_SOME);
-        List values;
-
-        // root -> Chroma
-        addElement("Chroma", standardMetadataFormatName,
-                   CHILD_POLICY_SOME);
-
-        // root -> Chroma -> ColorSpaceType
-        addElement("ColorSpaceType", "Chroma",
-                   CHILD_POLICY_EMPTY);
-
-        values = new ArrayList();
-        values.add("XYZ");
-        values.add("Lab");
-        values.add("Luv");
-        values.add("YCbCr");
-        values.add("Yxy");
-        values.add("YCCK");
-        values.add("PhotoYCC");
-        values.add("RGB");
-        values.add("GRAY");
-        values.add("HSV");
-        values.add("HLS");
-        values.add("CMYK");
-        values.add("CMY");
-        values.add("2CLR");
-        values.add("3CLR");
-        values.add("4CLR");
-        values.add("5CLR");
-        values.add("6CLR");
-        values.add("7CLR");
-        values.add("8CLR");
-        values.add("9CLR");
-        values.add("ACLR");
-        values.add("BCLR");
-        values.add("CCLR");
-        values.add("DCLR");
-        values.add("ECLR");
-        values.add("FCLR");
-        addAttribute("ColorSpaceType",
-                     "name",
-                     DATATYPE_STRING,
-                     true,
-                     null,
-                     values);
-
-        // root -> Chroma -> NumChannels
-        addElement("NumChannels", "Chroma",
-                   CHILD_POLICY_EMPTY);
-        addAttribute("NumChannels", "value",
-                     DATATYPE_INTEGER,
-                     true,
-                     0, Integer.MAX_VALUE);
-
-        // root -> Chroma -> Gamma
-        addElement("Gamma", "Chroma", CHILD_POLICY_EMPTY);
-        addAttribute("Gamma", "value",
-                     DATATYPE_FLOAT, true, null);
-
-        // root -> Chroma -> BlackIsZero
-        addElement("BlackIsZero", "Chroma", CHILD_POLICY_EMPTY);
-        addBooleanAttribute("BlackIsZero", "value", true, true);
-
-        // root -> Chroma -> Palette
-        addElement("Palette", "Chroma", 0, Integer.MAX_VALUE);
-
-        // root -> Chroma -> PaletteEntry
-        addElement("PaletteEntry", "Palette", CHILD_POLICY_EMPTY);
-        addAttribute("PaletteEntry", "index", DATATYPE_INTEGER,
-                     true, null);
-        addAttribute("PaletteEntry", "red", DATATYPE_INTEGER,
-                     true, null);
-        addAttribute("PaletteEntry", "green", DATATYPE_INTEGER,
-                     true, null);
-        addAttribute("PaletteEntry", "blue", DATATYPE_INTEGER,
-                     true, null);
-        addAttribute("PaletteEntry", "alpha", DATATYPE_INTEGER,
-                     false, "255");
-
-        // root -> Chroma -> BackgroundIndex
-        addElement("BackgroundIndex", "Chroma", CHILD_POLICY_EMPTY);
-        addAttribute("BackgroundIndex", "value", DATATYPE_INTEGER,
-                     true, null);
-
-        // root -> Chroma -> BackgroundColor
-        addElement("BackgroundColor", "Chroma", CHILD_POLICY_EMPTY);
-        addAttribute("BackgroundColor", "red", DATATYPE_INTEGER,
-                     true, null);
-        addAttribute("BackgroundColor", "green", DATATYPE_INTEGER,
-                     true, null);
-        addAttribute("BackgroundColor", "blue", DATATYPE_INTEGER,
-                     true, null);
-
-        // root -> Compression
-        addElement("Compression", standardMetadataFormatName,
-                   CHILD_POLICY_SOME);
-
-        // root -> Compression -> CompressionTypeName
-        addSingleAttributeElement("CompressionTypeName",
-                                  "Compression",
-                                  DATATYPE_STRING);
-
-        // root -> Compression -> Lossless
-        addElement("Lossless", "Compression", CHILD_POLICY_EMPTY);
-        addBooleanAttribute("Lossless", "value", true, true);
-
-        // root -> Compression -> NumProgressiveScans
-        addSingleAttributeElement("NumProgressiveScans",
-                                  "Compression",
-                                  DATATYPE_INTEGER);
-
-        // root -> Compression -> BitRate
-        addSingleAttributeElement("BitRate",
-                                  "Compression",
-                                  DATATYPE_FLOAT);
-
-        // root -> Data
-        addElement("Data", standardMetadataFormatName,
-                   CHILD_POLICY_SOME);
-
-        // root -> Data -> PlanarConfiguration
-        addElement("PlanarConfiguration", "Data", CHILD_POLICY_EMPTY);
-
-        values = new ArrayList();
-        values.add("PixelInterleaved");
-        values.add("PlaneInterleaved");
-        values.add("LineInterleaved");
-        values.add("TileInterleaved");
-        addAttribute("PlanarConfiguration", "value",
-                     DATATYPE_STRING,
-                     true,
-                     null,
-                     values);
-
-        // root -> Data -> SampleFormat
-        addElement("SampleFormat", "Data", CHILD_POLICY_EMPTY);
-
-        values = new ArrayList();
-        values.add("SignedIntegral");
-        values.add("UnsignedIntegral");
-        values.add("Real");
-        values.add("Index");
-        addAttribute("SampleFormat", "value",
-                     DATATYPE_STRING,
-                     true,
-                     null,
-                     values);
-
-        // root -> Data -> BitsPerSample
-        addElement("BitsPerSample", "Data",
-                   CHILD_POLICY_EMPTY);
-        addAttribute("BitsPerSample", "value",
-                     DATATYPE_INTEGER,
-                     true,
-                     1, Integer.MAX_VALUE);
-
-        // root -> Data -> SignificantBitsPerSample
-        addElement("SignificantBitsPerSample", "Data", CHILD_POLICY_EMPTY);
-        addAttribute("SignificantBitsPerSample", "value",
-                     DATATYPE_INTEGER,
-                     true,
-                     1, Integer.MAX_VALUE);
-
-        // root -> Data -> SampleMSB
-        addElement("SampleMSB", "Data",
-                   CHILD_POLICY_EMPTY);
-        addAttribute("SampleMSB", "value",
-                     DATATYPE_INTEGER,
-                     true,
-                     1, Integer.MAX_VALUE);
-
-        // root -> Dimension
-        addElement("Dimension", standardMetadataFormatName,
-                   CHILD_POLICY_SOME);
-
-        // root -> Dimension -> PixelAspectRatio
-        addSingleAttributeElement("PixelAspectRatio",
-                                  "Dimension",
-                                  DATATYPE_FLOAT);
-
-        // root -> Dimension -> ImageOrientation
-        addElement("ImageOrientation", "Dimension",
-                   CHILD_POLICY_EMPTY);
-
-        values = new ArrayList();
-        values.add("Normal");
-        values.add("Rotate90");
-        values.add("Rotate180");
-        values.add("Rotate270");
-        values.add("FlipH");
-        values.add("FlipV");
-        values.add("FlipHRotate90");
-        values.add("FlipVRotate90");
-        addAttribute("ImageOrientation", "value",
-                     DATATYPE_STRING,
-                     true,
-                     null,
-                     values);
-
-        // root -> Dimension -> HorizontalPixelSize
-        addSingleAttributeElement("HorizontalPixelSize",
-                                  "Dimension",
-                                  DATATYPE_FLOAT);
-
-        // root -> Dimension -> VerticalPixelSize
-        addSingleAttributeElement("VerticalPixelSize",
-                                  "Dimension",
-                                  DATATYPE_FLOAT);
-
-        // root -> Dimension -> HorizontalPhysicalPixelSpacing
-        addSingleAttributeElement("HorizontalPhysicalPixelSpacing",
-                                  "Dimension",
-                                  DATATYPE_FLOAT);
-
-        // root -> Dimension -> VerticalPhysicalPixelSpacing
-        addSingleAttributeElement("VerticalPhysicalPixelSpacing",
-                                  "Dimension",
-                                  DATATYPE_FLOAT);
-
-        // root -> Dimension -> HorizontalPosition
-        addSingleAttributeElement("HorizontalPosition",
-                                  "Dimension",
-                                  DATATYPE_FLOAT);
-
-        // root -> Dimension -> VerticalPosition
-        addSingleAttributeElement("VerticalPosition",
-                                  "Dimension",
-                                  DATATYPE_FLOAT);
-
-        // root -> Dimension -> HorizontalPixelOffset
-        addSingleAttributeElement("HorizontalPixelOffset",
-                                  "Dimension",
-                                  DATATYPE_INTEGER);
-
-        // root -> Dimension -> VerticalPixelOffset
-        addSingleAttributeElement("VerticalPixelOffset",
-                                  "Dimension",
-                                  DATATYPE_INTEGER);
-
-        // root -> Dimension -> HorizontalScreenSize
-        addSingleAttributeElement("HorizontalScreenSize",
-                                  "Dimension",
-                                  DATATYPE_INTEGER);
-
-        // root -> Dimension -> VerticalScreenSize
-        addSingleAttributeElement("VerticalScreenSize",
-                                  "Dimension",
-                                  DATATYPE_INTEGER);
-
-
-        // root -> Document
-        addElement("Document", standardMetadataFormatName,
-                   CHILD_POLICY_SOME);
-
-        // root -> Document -> FormatVersion
-        addElement("FormatVersion", "Document",
-                   CHILD_POLICY_EMPTY);
-        addAttribute("FormatVersion", "value",
-                     DATATYPE_STRING,
-                     true,
-                     null);
-
-        // root -> Document -> SubimageInterpretation
-        addElement("SubimageInterpretation", "Document",
-                   CHILD_POLICY_EMPTY);
-        values = new ArrayList();
-        values.add("Standalone");
-        values.add("SinglePage");
-        values.add("FullResolution");
-        values.add("ReducedResolution");
-        values.add("PyramidLayer");
-        values.add("Preview");
-        values.add("VolumeSlice");
-        values.add("ObjectView");
-        values.add("Panorama");
-        values.add("AnimationFrame");
-        values.add("TransparencyMask");
-        values.add("CompositingLayer");
-        values.add("SpectralSlice");
-        values.add("Unknown");
-        addAttribute("SubimageInterpretation", "value",
-                     DATATYPE_STRING,
-                     true,
-                     null,
-                     values);
-
-        // root -> Document -> ImageCreationTime
-        addElement("ImageCreationTime", "Document",
-                   CHILD_POLICY_EMPTY);
-        addAttribute("ImageCreationTime", "year",
-                     DATATYPE_INTEGER,
-                     true,
-                     null);
-        addAttribute("ImageCreationTime", "month",
-                     DATATYPE_INTEGER,
-                     true,
-                     null,
-                     "1", "12", true, true);
-        addAttribute("ImageCreationTime", "day",
-                     DATATYPE_INTEGER,
-                     true,
-                     null,
-                     "1", "31", true, true);
-        addAttribute("ImageCreationTime", "hour",
-                     DATATYPE_INTEGER,
-                     false,
-                     "0",
-                     "0", "23", true, true);
-        addAttribute("ImageCreationTime", "minute",
-                     DATATYPE_INTEGER,
-                     false,
-                     "0",
-                     "0", "59", true, true);
-        // second = 60 denotes leap second
-        addAttribute("ImageCreationTime", "second",
-                     DATATYPE_INTEGER,
-                     false,
-                     "0",
-                     "0", "60", true, true);
-
-        // root -> Document -> ImageModificationTime
-        addElement("ImageModificationTime", "Document",
-                   CHILD_POLICY_EMPTY);
-        addAttribute("ImageModificationTime", "year",
-                     DATATYPE_INTEGER,
-                     true,
-                     null);
-        addAttribute("ImageModificationTime", "month",
-                     DATATYPE_INTEGER,
-                     true,
-                     null,
-                     "1", "12", true, true);
-        addAttribute("ImageModificationTime", "day",
-                     DATATYPE_INTEGER,
-                     true,
-                     null,
-                     "1", "31", true, true);
-        addAttribute("ImageModificationTime", "hour",
-                     DATATYPE_INTEGER,
-                     false,
-                     "0",
-                     "0", "23", true, true);
-        addAttribute("ImageModificationTime", "minute",
-                     DATATYPE_INTEGER,
-                     false,
-                     "0",
-                     "0", "59", true, true);
-        // second = 60 denotes leap second
-        addAttribute("ImageModificationTime", "second",
-                     DATATYPE_INTEGER,
-                     false,
-                     "0",
-                     "0", "60", true, true);
-
-        // root -> Text
-        addElement("Text", standardMetadataFormatName,
-                   0, Integer.MAX_VALUE);
-
-        // root -> Text -> TextEntry
-        addElement("TextEntry", "Text", CHILD_POLICY_EMPTY);
-        addAttribute("TextEntry", "keyword",
-                     DATATYPE_STRING,
-                     false,
-                     null);
-        addAttribute("TextEntry", "value",
-                     DATATYPE_STRING,
-                     true,
-                     null);
-        addAttribute("TextEntry", "language",
-                     DATATYPE_STRING,
-                     false,
-                     null);
-        addAttribute("TextEntry", "encoding",
-                     DATATYPE_STRING,
-                     false,
-                     null);
-
-        values = new ArrayList();
-        values.add("none");
-        values.add("lzw");
-        values.add("zip");
-        values.add("bzip");
-        values.add("other");
-        addAttribute("TextEntry", "compression",
-                     DATATYPE_STRING,
-                     false,
-                     "none",
-                     values);
-
-        // root -> Transparency
-        addElement("Transparency", standardMetadataFormatName,
-                   CHILD_POLICY_SOME);
-
-        // root -> Transparency -> Alpha
-        addElement("Alpha", "Transparency", CHILD_POLICY_EMPTY);
-
-        values = new ArrayList();
-        values.add("none");
-        values.add("premultiplied");
-        values.add("nonpremultiplied");
-        addAttribute("Alpha", "value",
-                     DATATYPE_STRING,
-                     false,
-                     "none",
-                     values);
-
-        // root -> Transparency -> TransparentIndex
-        addSingleAttributeElement("TransparentIndex", "Transparency",
-                                  DATATYPE_INTEGER);
-
-        // root -> Transparency -> TransparentColor
-        addElement("TransparentColor", "Transparency",
-                   CHILD_POLICY_EMPTY);
-        addAttribute("TransparentColor", "value",
-                     DATATYPE_INTEGER,
-                     true,
-                     0, Integer.MAX_VALUE);
-
-        // root -> Transparency -> TileTransparencies
-        addElement("TileTransparencies", "Transparency",
-                   0, Integer.MAX_VALUE);
-
-        // root -> Transparency -> TileTransparencies -> TransparentTile
-        addElement("TransparentTile", "TileTransparencies",
-                   CHILD_POLICY_EMPTY);
-        addAttribute("TransparentTile", "x",
-                     DATATYPE_INTEGER,
-                     true,
-                     null);
-        addAttribute("TransparentTile", "y",
-                     DATATYPE_INTEGER,
-                     true,
-                     null);
-
-        // root -> Transparency -> TileOpacities
-        addElement("TileOpacities", "Transparency",
-                   0, Integer.MAX_VALUE);
-
-        // root -> Transparency -> TileOpacities -> OpaqueTile
-        addElement("OpaqueTile", "TileOpacities",
-                   CHILD_POLICY_EMPTY);
-        addAttribute("OpaqueTile", "x",
-                     DATATYPE_INTEGER,
-                     true,
-                     null);
-        addAttribute("OpaqueTile", "y",
-                     DATATYPE_INTEGER,
-                     true,
-                     null);
-    }
-
-    public boolean canNodeAppear(String elementName,
-                                 ImageTypeSpecifier imageType) {
-            return true;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/plugins/common/StandardMetadataFormatResources.java b/ojluni/src/main/java/com/sun/imageio/plugins/common/StandardMetadataFormatResources.java
deleted file mode 100755
index 96f099c..0000000
--- a/ojluni/src/main/java/com/sun/imageio/plugins/common/StandardMetadataFormatResources.java
+++ /dev/null
@@ -1,210 +0,0 @@
-/*
- * Copyright (c) 2001, 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.
- */
-
-package com.sun.imageio.plugins.common;
-
-import java.util.ListResourceBundle;
-
-public class StandardMetadataFormatResources extends ListResourceBundle {
-
-    public StandardMetadataFormatResources() {}
-
-    protected Object[][] getContents() {
-        return new Object[][] {
-
-        // Node name, followed by description, or
-        // Node name + "/" + AttributeName, followed by description
-
-        { "Chroma", "Chroma (color) information" },
-
-        { "ColorSpaceType", "The raw color space of the image" },
-
-        { "NumChannels",
-          "The number of channels in the raw image, including alpha" },
-
-        { "Gamma", "The image gamma" },
-
-        { "BlackIsZero",
-          "True if smaller values represent darker shades"},
-
-        { "Palette", "Palette-color information" },
-
-        { "PaletteEntry", "A palette entry" },
-        { "PaletteEntry/index", "The index of the palette entry" },
-        { "PaletteEntry/red", "The red value for the palette entry" },
-        { "PaletteEntry/green", "The green value for the palette entry" },
-        { "PaletteEntry/blue", "The blue value for the palette entry" },
-        { "PaletteEntry/alpha", "The alpha value for the palette entry" },
-
-        { "BackgroundIndex", "A palette index to be used as a background" },
-
-        { "BackgroundColor", "An RGB triple to be used as a background" },
-        { "BackgroundColor/red", "The red background value" },
-        { "BackgroundColor/green", "The green background value" },
-        { "BackgroundColor/blue", "The blue background value" },
-
-        { "Compression", "Compression information" },
-
-        { "CompressionTypeName", "The name of the compression scheme in use" },
-
-        { "Lossless",
-          "True if the compression scheme is lossless" },
-
-        { "BitRate", "The estimated bit rate of the compression scheme" },
-
-        { "NumProgressiveScans",
-          "The number of progressive scans used in the image encoding"},
-
-        { "Data", "Information on the image layout" },
-
-        { "PlanarConfiguration",
-          "The organization of image samples in the stream" },
-
-        { "SampleFormat", "The numeric format of image samples" },
-
-        { "BitsPerSample", "The number of bits per sample"},
-        { "BitsPerSample/value",
-          "A list of integers, one per channel" },
-
-        { "SignificantBitsPerSample",
-          "The number of significant bits per sample"},
-        { "SignificantBitsPerSample/value",
-          "A list of integers, one per channel" },
-
-        { "SampleMSB",
-          "The position of the most significant bit of each sample"},
-        { "SampleMSB/value",
-          "A list of integers, one per channel" },
-
-        { "Dimension", "Dimension information" },
-
-        { "PixelAspectRatio", "The width of a pixel divided by its height" },
-
-        { "ImageOrientation", "The desired orientation of the image in terms of flips and counter-clockwise rotations" },
-
-        { "HorizontalPixelSize",
-  "The width of a pixel, in millimeters, as it should be rendered on media" },
-
-        { "VerticalPixelSize",
-  "The height of a pixel, in millimeters, as it should be rendered on media" },
-
-        { "HorizontalPhysicalPixelSpacing",
-          "The horizontal distance in the subject of the image, in millimeters, represented by one pixel at the center of the image" },
-
-        { "VerticalPhysicalPixelSpacing",
-          "The vertical distance in the subject of the image, in millimeters, represented by one pixel at the center of the image" },
-
-        { "HorizontalPosition",
-          "The horizontal position, in millimeters, where the image should be rendered on media " },
-
-        { "VerticalPosition",
-          "The vertical position, in millimeters, where the image should be rendered on media " },
-
-        { "HorizontalPixelOffset",
-          "The horizonal position, in pixels, where the image should be rendered onto a raster display" },
-
-        { "VerticalPixelOffset",
-          "The vertical position, in pixels, where the image should be rendered onto a raster display" },
-
-        { "HorizontalScreenSize",
-          "The width, in pixels, of the raster display into which the image should be rendered" },
-
-        { "VerticalScreenSize",
-          "The height, in pixels, of the raster display into which the image should be rendered" },
-
-        { "Document", "Document information" },
-
-        { "FormatVersion",
-          "The version of the format used by the stream" },
-
-        { "SubimageInterpretation",
-          "The interpretation of this image in relation to the other images stored in the same stream" },
-
-        { "ImageCreationTime", "The time of image creation" },
-        { "ImageCreationTime/year",
-          "The full year (e.g., 1967, not 67)" },
-        { "ImageCreationTime/month",
-          "The month, with January = 1" },
-        { "ImageCreationTime/day",
-          "The day of the month" },
-        { "ImageCreationTime/hour",
-          "The hour from 0 to 23" },
-        { "ImageCreationTime/minute",
-          "The minute from 0 to 59" },
-        { "ImageCreationTime/second",
-          "The second from 0 to 60 (60 = leap second)" },
-
-        { "ImageModificationTime", "The time of the last image modification" },
-        { "ImageModificationTime/year",
-          "The full year (e.g., 1967, not 67)" },
-        { "ImageModificationTime/month",
-          "The month, with January = 1" },
-        { "ImageModificationTime/day",
-          "The day of the month" },
-        { "ImageModificationTime/hour",
-          "The hour from 0 to 23" },
-        { "ImageModificationTime/minute",
-          "The minute from 0 to 59" },
-        { "ImageModificationTime/second",
-          "The second from 0 to 60 (60 = leap second)" },
-
-        { "Text", "Text information" },
-
-        { "TextEntry", "A text entry"},
-        { "TextEntry/keyword", "A keyword associated with the text entry" },
-        { "TextEntry/value", "the text entry" },
-        { "TextEntry/language", "The language of the text" },
-        { "TextEntry/encoding", "The encoding of the text" },
-        { "TextEntry/compression", "The method used to compress the text" },
-
-        { "Transparency", "Transparency information" },
-
-        { "Alpha", "The type of alpha information contained in the image" },
-
-        { "TransparentIndex", "A palette index to be treated as transparent" },
-
-        { "TransparentColor", "An RGB color to be treated as transparent" },
-        { "TransparentColor/red",
-          "The red channel of the transparent color" },
-        { "TransparentColor/green",
-          "The green channel of the transparent color" },
-        { "TransparentColor/blue",
-          "The blue channel of the transparent color" },
-
-        { "TileTransparencies", "A list of completely transparent tiles" },
-
-        { "TransparentTile", "The index of a completely transparent tile" },
-        { "TransparentTile/x", "The tile's X index" },
-        { "TransparentTile/y", "The tile's Y index" },
-
-        { "TileOpacities", "A list of completely opaque tiles" },
-
-        { "OpaqueTile", "The index of a completely opaque tile" },
-        { "OpaqueTile/x", "The tile's X index" },
-        { "OpaqueTile/y", "The tile's Y index" },
-
-        };
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/plugins/common/SubImageInputStream.java b/ojluni/src/main/java/com/sun/imageio/plugins/common/SubImageInputStream.java
deleted file mode 100755
index cdcb68d..0000000
--- a/ojluni/src/main/java/com/sun/imageio/plugins/common/SubImageInputStream.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Copyright (c) 2000, 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.
- */
-
-package com.sun.imageio.plugins.common;
-
-import java.io.IOException;
-import javax.imageio.stream.ImageInputStreamImpl;
-import javax.imageio.stream.ImageInputStream;
-
-public final class SubImageInputStream extends ImageInputStreamImpl {
-
-    ImageInputStream stream;
-    long startingPos;
-    int startingLength;
-    int length;
-
-    public SubImageInputStream(ImageInputStream stream, int length)
-        throws IOException {
-        this.stream = stream;
-        this.startingPos = stream.getStreamPosition();
-        this.startingLength = this.length = length;
-    }
-
-    public int read() throws IOException {
-        if (length == 0) { // Local EOF
-            return -1;
-        } else {
-            --length;
-            return stream.read();
-        }
-    }
-
-    public int read(byte[] b, int off, int len) throws IOException {
-        if (length == 0) { // Local EOF
-            return -1;
-        }
-
-        len = Math.min(len, length);
-        int bytes = stream.read(b, off, len);
-        length -= bytes;
-        return bytes;
-    }
-
-    public long length() {
-        return startingLength;
-    }
-
-    public void seek(long pos) throws IOException {
-        stream.seek(pos - startingPos);
-        streamPos = pos;
-    }
-
-    protected void finalize() throws Throwable {
-        // Empty finalizer (for improved performance; no need to call
-        // super.finalize() in this case)
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/plugins/common/iio-plugin.properties b/ojluni/src/main/java/com/sun/imageio/plugins/common/iio-plugin.properties
deleted file mode 100755
index 70a6f71..0000000
--- a/ojluni/src/main/java/com/sun/imageio/plugins/common/iio-plugin.properties
+++ /dev/null
@@ -1,47 +0,0 @@
-# Internationalization file for JAI plugins including
-#    javax.imageio.plugins.bmp
-#    com.sun.imageio.plugins.common
-#    com.sun.imageio.plugins.bmp
-#    com.sun.imageio.plugins.wbmp
-#
-
-# Common properties
-ImageUtil0=The supplied Raster does not represent a binary data set.
-ImageUtil1=The provided sample model is null.
-SimpleRenderedImage0=The provided region doesn't intersect with the image bounds.
-GetNumImages0=Input has not been set.
-GetNumImages1=seekForwardOnly and allowSearch cannot both be true.
-
-
-# BMP plugin properties
-BMPImageWriteParam0=Only versions 2-5 are supported.
-BMPImageReader0=Only one image exists in the stream.
-BMPImageReader1=Invalid magic value for BMP file.
-BMPImageReader2=Invalid compression specified in BMP stream.
-BMPImageReader3=New BMP version not implemented yet.
-BMPImageReader4=No ImageIO-style reader is found for
-BMPImageReader5=Input has not been set.
-BMPImageWriter0=Output is not an ImageOutputStream.
-BMPImageWriter1=The image region to be encoded is empty.
-BMPImageWriter2=Only 1 or 3 band image is encoded.
-BMPImageWriter3=The maximum pixel size should be 32.
-BMPImageWriter4=Only version 3 is supported.
-BMPImageWriter5=No ImageIO-style writer is found for
-BMPImageWriter6=Compression type BI_BITFIELDS should be used for 16 bpp or 32 bpp images only.
-BMPImageWriter7=Output has not been set.
-BMPImageWriter8=Image is null!
-BMPMetadata0=The provided metadata format isn't recognized.
-BMPMetadata1=Metadata is read-only.
-
-
-# WBMP plugin properties 
-WBMPImageReader0=Only one image exists in the stream.
-WBMPImageReader1=Input has not been set.
-WBMPImageReader2=Bad WBMP header.
-WBMPImageWriter0=Output is not an ImageOutputStream.
-WBMPImageWriter1=The image region to be encoded is empty.
-WBMPImageWriter2=Only integral single-band bilevel image is supported.
-WBMPImageWriter3=Output has not been set.
-WBMPImageWriter4=Image is null!
-WBMPMetadata0=The provided metadata format isn't recognized.
-WBMPMetadata1=Metadata is read-only.
diff --git a/ojluni/src/main/java/com/sun/imageio/plugins/gif/GIFImageMetadata.java b/ojluni/src/main/java/com/sun/imageio/plugins/gif/GIFImageMetadata.java
deleted file mode 100755
index 87a45c3..0000000
--- a/ojluni/src/main/java/com/sun/imageio/plugins/gif/GIFImageMetadata.java
+++ /dev/null
@@ -1,446 +0,0 @@
-/*
- * Copyright (c) 2000, 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.
- */
-
-package com.sun.imageio.plugins.gif;
-
-import java.io.UnsupportedEncodingException;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import javax.imageio.ImageTypeSpecifier;
-import javax.imageio.metadata.IIOInvalidTreeException;
-import javax.imageio.metadata.IIOMetadata;
-import javax.imageio.metadata.IIOMetadataNode;
-import javax.imageio.metadata.IIOMetadataFormat;
-import javax.imageio.metadata.IIOMetadataFormatImpl;
-import org.w3c.dom.Node;
-
-public class GIFImageMetadata extends GIFMetadata {
-
-    // package scope
-    static final String
-        nativeMetadataFormatName = "javax_imageio_gif_image_1.0";
-
-    static final String[] disposalMethodNames = {
-        "none",
-        "doNotDispose",
-        "restoreToBackgroundColor",
-        "restoreToPrevious",
-        "undefinedDisposalMethod4",
-        "undefinedDisposalMethod5",
-        "undefinedDisposalMethod6",
-        "undefinedDisposalMethod7"
-    };
-
-    // Fields from Image Descriptor
-    public int imageLeftPosition;
-    public int imageTopPosition;
-    public int imageWidth;
-    public int imageHeight;
-    public boolean interlaceFlag = false;
-    public boolean sortFlag = false;
-    public byte[] localColorTable = null;
-
-    // Fields from Graphic Control Extension
-    public int disposalMethod = 0;
-    public boolean userInputFlag = false;
-    public boolean transparentColorFlag = false;
-    public int delayTime = 0;
-    public int transparentColorIndex = 0;
-
-    // Fields from Plain Text Extension
-    public boolean hasPlainTextExtension = false;
-    public int textGridLeft;
-    public int textGridTop;
-    public int textGridWidth;
-    public int textGridHeight;
-    public int characterCellWidth;
-    public int characterCellHeight;
-    public int textForegroundColor;
-    public int textBackgroundColor;
-    public byte[] text;
-
-    // Fields from ApplicationExtension
-    // List of byte[]
-    public List applicationIDs = null; // new ArrayList();
-
-    // List of byte[]
-    public List authenticationCodes = null; // new ArrayList();
-
-    // List of byte[]
-    public List applicationData = null; // new ArrayList();
-
-    // Fields from CommentExtension
-    // List of byte[]
-    public List comments = null; // new ArrayList();
-
-    protected GIFImageMetadata(boolean standardMetadataFormatSupported,
-                               String nativeMetadataFormatName,
-                               String nativeMetadataFormatClassName,
-                               String[] extraMetadataFormatNames,
-                               String[] extraMetadataFormatClassNames)
-    {
-        super(standardMetadataFormatSupported,
-              nativeMetadataFormatName,
-              nativeMetadataFormatClassName,
-              extraMetadataFormatNames,
-              extraMetadataFormatClassNames);
-    }
-
-    public GIFImageMetadata() {
-        this(true,
-              nativeMetadataFormatName,
-              "com.sun.imageio.plugins.gif.GIFImageMetadataFormat",
-              null, null);
-    }
-
-    public boolean isReadOnly() {
-        return true;
-    }
-
-    public Node getAsTree(String formatName) {
-        if (formatName.equals(nativeMetadataFormatName)) {
-            return getNativeTree();
-        } else if (formatName.equals
-                   (IIOMetadataFormatImpl.standardMetadataFormatName)) {
-            return getStandardTree();
-        } else {
-            throw new IllegalArgumentException("Not a recognized format!");
-        }
-    }
-
-    private String toISO8859(byte[] data) {
-        try {
-            return new String(data, "ISO-8859-1");
-        } catch (UnsupportedEncodingException e) {
-            return "";
-        }
-    }
-
-    private Node getNativeTree() {
-        IIOMetadataNode node; // scratch node
-        IIOMetadataNode root =
-            new IIOMetadataNode(nativeMetadataFormatName);
-
-        // Image descriptor
-        node = new IIOMetadataNode("ImageDescriptor");
-        node.setAttribute("imageLeftPosition",
-                          Integer.toString(imageLeftPosition));
-        node.setAttribute("imageTopPosition",
-                          Integer.toString(imageTopPosition));
-        node.setAttribute("imageWidth", Integer.toString(imageWidth));
-        node.setAttribute("imageHeight", Integer.toString(imageHeight));
-        node.setAttribute("interlaceFlag",
-                          interlaceFlag ? "TRUE" : "FALSE");
-        root.appendChild(node);
-
-        // Local color table
-        if (localColorTable != null) {
-            node = new IIOMetadataNode("LocalColorTable");
-            int numEntries = localColorTable.length/3;
-            node.setAttribute("sizeOfLocalColorTable",
-                              Integer.toString(numEntries));
-            node.setAttribute("sortFlag",
-                              sortFlag ? "TRUE" : "FALSE");
-
-            for (int i = 0; i < numEntries; i++) {
-                IIOMetadataNode entry =
-                    new IIOMetadataNode("ColorTableEntry");
-                entry.setAttribute("index", Integer.toString(i));
-                int r = localColorTable[3*i] & 0xff;
-                int g = localColorTable[3*i + 1] & 0xff;
-                int b = localColorTable[3*i + 2] & 0xff;
-                entry.setAttribute("red", Integer.toString(r));
-                entry.setAttribute("green", Integer.toString(g));
-                entry.setAttribute("blue", Integer.toString(b));
-                node.appendChild(entry);
-            }
-            root.appendChild(node);
-        }
-
-        // Graphic control extension
-        node = new IIOMetadataNode("GraphicControlExtension");
-        node.setAttribute("disposalMethod",
-                          disposalMethodNames[disposalMethod]);
-        node.setAttribute("userInputFlag",
-                          userInputFlag ? "TRUE" : "FALSE");
-        node.setAttribute("transparentColorFlag",
-                          transparentColorFlag ? "TRUE" : "FALSE");
-        node.setAttribute("delayTime",
-                          Integer.toString(delayTime));
-        node.setAttribute("transparentColorIndex",
-                          Integer.toString(transparentColorIndex));
-        root.appendChild(node);
-
-        if (hasPlainTextExtension) {
-            node = new IIOMetadataNode("PlainTextExtension");
-            node.setAttribute("textGridLeft",
-                              Integer.toString(textGridLeft));
-            node.setAttribute("textGridTop",
-                              Integer.toString(textGridTop));
-            node.setAttribute("textGridWidth",
-                              Integer.toString(textGridWidth));
-            node.setAttribute("textGridHeight",
-                              Integer.toString(textGridHeight));
-            node.setAttribute("characterCellWidth",
-                              Integer.toString(characterCellWidth));
-            node.setAttribute("characterCellHeight",
-                              Integer.toString(characterCellHeight));
-            node.setAttribute("textForegroundColor",
-                              Integer.toString(textForegroundColor));
-            node.setAttribute("textBackgroundColor",
-                              Integer.toString(textBackgroundColor));
-            node.setAttribute("text", toISO8859(text));
-
-            root.appendChild(node);
-        }
-
-        // Application extensions
-        int numAppExtensions = applicationIDs == null ?
-            0 : applicationIDs.size();
-        if (numAppExtensions > 0) {
-            node = new IIOMetadataNode("ApplicationExtensions");
-            for (int i = 0; i < numAppExtensions; i++) {
-                IIOMetadataNode appExtNode =
-                    new IIOMetadataNode("ApplicationExtension");
-                byte[] applicationID = (byte[])applicationIDs.get(i);
-                appExtNode.setAttribute("applicationID",
-                                        toISO8859(applicationID));
-                byte[] authenticationCode = (byte[])authenticationCodes.get(i);
-                appExtNode.setAttribute("authenticationCode",
-                                        toISO8859(authenticationCode));
-                byte[] appData = (byte[])applicationData.get(i);
-                appExtNode.setUserObject((byte[])appData.clone());
-                node.appendChild(appExtNode);
-            }
-
-            root.appendChild(node);
-        }
-
-        // Comment extensions
-        int numComments = comments == null ? 0 : comments.size();
-        if (numComments > 0) {
-            node = new IIOMetadataNode("CommentExtensions");
-            for (int i = 0; i < numComments; i++) {
-                IIOMetadataNode commentNode =
-                    new IIOMetadataNode("CommentExtension");
-                byte[] comment = (byte[])comments.get(i);
-                commentNode.setAttribute("value", toISO8859(comment));
-                node.appendChild(commentNode);
-            }
-
-            root.appendChild(node);
-        }
-
-        return root;
-    }
-
-    public IIOMetadataNode getStandardChromaNode() {
-        IIOMetadataNode chroma_node = new IIOMetadataNode("Chroma");
-        IIOMetadataNode node = null; // scratch node
-
-        node = new IIOMetadataNode("ColorSpaceType");
-        node.setAttribute("name", "RGB");
-        chroma_node.appendChild(node);
-
-        node = new IIOMetadataNode("NumChannels");
-        node.setAttribute("value", transparentColorFlag ? "4" : "3");
-        chroma_node.appendChild(node);
-
-        // Gamma not in format
-
-        node = new IIOMetadataNode("BlackIsZero");
-        node.setAttribute("value", "TRUE");
-        chroma_node.appendChild(node);
-
-        if (localColorTable != null) {
-            node = new IIOMetadataNode("Palette");
-            int numEntries = localColorTable.length/3;
-            for (int i = 0; i < numEntries; i++) {
-                IIOMetadataNode entry =
-                    new IIOMetadataNode("PaletteEntry");
-                entry.setAttribute("index", Integer.toString(i));
-                entry.setAttribute("red",
-                           Integer.toString(localColorTable[3*i] & 0xff));
-                entry.setAttribute("green",
-                           Integer.toString(localColorTable[3*i + 1] & 0xff));
-                entry.setAttribute("blue",
-                           Integer.toString(localColorTable[3*i + 2] & 0xff));
-                node.appendChild(entry);
-            }
-            chroma_node.appendChild(node);
-        }
-
-        // BackgroundIndex not in image
-        // BackgroundColor not in format
-
-        return chroma_node;
-    }
-
-    public IIOMetadataNode getStandardCompressionNode() {
-        IIOMetadataNode compression_node = new IIOMetadataNode("Compression");
-        IIOMetadataNode node = null; // scratch node
-
-        node = new IIOMetadataNode("CompressionTypeName");
-        node.setAttribute("value", "lzw");
-        compression_node.appendChild(node);
-
-        node = new IIOMetadataNode("Lossless");
-        node.setAttribute("value", "TRUE");
-        compression_node.appendChild(node);
-
-        node = new IIOMetadataNode("NumProgressiveScans");
-        node.setAttribute("value", interlaceFlag ? "4" : "1");
-        compression_node.appendChild(node);
-
-        // BitRate not in format
-
-        return compression_node;
-    }
-
-    public IIOMetadataNode getStandardDataNode() {
-        IIOMetadataNode data_node = new IIOMetadataNode("Data");
-        IIOMetadataNode node = null; // scratch node
-
-        // PlanarConfiguration not in format
-
-        node = new IIOMetadataNode("SampleFormat");
-        node.setAttribute("value", "Index");
-        data_node.appendChild(node);
-
-        // BitsPerSample not in image
-        // SignificantBitsPerSample not in format
-        // SampleMSB not in format
-
-        return data_node;
-    }
-
-    public IIOMetadataNode getStandardDimensionNode() {
-        IIOMetadataNode dimension_node = new IIOMetadataNode("Dimension");
-        IIOMetadataNode node = null; // scratch node
-
-        // PixelAspectRatio not in image
-
-        node = new IIOMetadataNode("ImageOrientation");
-        node.setAttribute("value", "Normal");
-        dimension_node.appendChild(node);
-
-        // HorizontalPixelSize not in format
-        // VerticalPixelSize not in format
-        // HorizontalPhysicalPixelSpacing not in format
-        // VerticalPhysicalPixelSpacing not in format
-        // HorizontalPosition not in format
-        // VerticalPosition not in format
-
-        node = new IIOMetadataNode("HorizontalPixelOffset");
-        node.setAttribute("value", Integer.toString(imageLeftPosition));
-        dimension_node.appendChild(node);
-
-        node = new IIOMetadataNode("VerticalPixelOffset");
-        node.setAttribute("value", Integer.toString(imageTopPosition));
-        dimension_node.appendChild(node);
-
-        // HorizontalScreenSize not in image
-        // VerticalScreenSize not in image
-
-        return dimension_node;
-    }
-
-    // Document not in image
-
-    public IIOMetadataNode getStandardTextNode() {
-        if (comments == null) {
-            return null;
-        }
-        Iterator commentIter = comments.iterator();
-        if (!commentIter.hasNext()) {
-            return null;
-        }
-
-        IIOMetadataNode text_node = new IIOMetadataNode("Text");
-        IIOMetadataNode node = null; // scratch node
-
-        while (commentIter.hasNext()) {
-            byte[] comment = (byte[])commentIter.next();
-            String s = null;
-            try {
-                s = new String(comment, "ISO-8859-1");
-            } catch (UnsupportedEncodingException e) {
-                throw new RuntimeException("Encoding ISO-8859-1 unknown!");
-            }
-
-            node = new IIOMetadataNode("TextEntry");
-            node.setAttribute("value", s);
-            node.setAttribute("encoding", "ISO-8859-1");
-            node.setAttribute("compression", "none");
-            text_node.appendChild(node);
-        }
-
-        return text_node;
-    }
-
-    public IIOMetadataNode getStandardTransparencyNode() {
-        if (!transparentColorFlag) {
-            return null;
-        }
-
-        IIOMetadataNode transparency_node =
-            new IIOMetadataNode("Transparency");
-        IIOMetadataNode node = null; // scratch node
-
-        // Alpha not in format
-
-        node = new IIOMetadataNode("TransparentIndex");
-        node.setAttribute("value",
-                          Integer.toString(transparentColorIndex));
-        transparency_node.appendChild(node);
-
-        // TransparentColor not in format
-        // TileTransparencies not in format
-        // TileOpacities not in format
-
-        return transparency_node;
-    }
-
-    public void setFromTree(String formatName, Node root)
-        throws IIOInvalidTreeException
-    {
-        throw new IllegalStateException("Metadata is read-only!");
-    }
-
-    protected void mergeNativeTree(Node root) throws IIOInvalidTreeException
-    {
-        throw new IllegalStateException("Metadata is read-only!");
-    }
-
-    protected void mergeStandardTree(Node root) throws IIOInvalidTreeException
-    {
-        throw new IllegalStateException("Metadata is read-only!");
-    }
-
-    public void reset() {
-        throw new IllegalStateException("Metadata is read-only!");
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/plugins/gif/GIFImageMetadataFormat.java b/ojluni/src/main/java/com/sun/imageio/plugins/gif/GIFImageMetadataFormat.java
deleted file mode 100755
index fa982d7..0000000
--- a/ojluni/src/main/java/com/sun/imageio/plugins/gif/GIFImageMetadataFormat.java
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
- * Copyright (c) 2001, 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.
- */
-
-package com.sun.imageio.plugins.gif;
-
-import java.util.Arrays;
-import javax.imageio.ImageTypeSpecifier;
-import javax.imageio.metadata.IIOMetadataFormat;
-import javax.imageio.metadata.IIOMetadataFormatImpl;
-
-public class GIFImageMetadataFormat extends IIOMetadataFormatImpl {
-
-    private static IIOMetadataFormat instance = null;
-
-    private GIFImageMetadataFormat() {
-        super(GIFImageMetadata.nativeMetadataFormatName,
-              CHILD_POLICY_SOME);
-
-        // root -> ImageDescriptor
-        addElement("ImageDescriptor",
-                   GIFImageMetadata.nativeMetadataFormatName,
-                   CHILD_POLICY_EMPTY);
-        addAttribute("ImageDescriptor", "imageLeftPosition",
-                     DATATYPE_INTEGER, true, null,
-                     "0", "65535", true, true);
-        addAttribute("ImageDescriptor", "imageTopPosition",
-                     DATATYPE_INTEGER, true, null,
-                     "0", "65535", true, true);
-        addAttribute("ImageDescriptor", "imageWidth",
-                     DATATYPE_INTEGER, true, null,
-                     "1", "65535", true, true);
-        addAttribute("ImageDescriptor", "imageHeight",
-                     DATATYPE_INTEGER, true, null,
-                     "1", "65535", true, true);
-        addBooleanAttribute("ImageDescriptor", "interlaceFlag",
-                            false, false);
-
-        // root -> LocalColorTable
-        addElement("LocalColorTable",
-                   GIFImageMetadata.nativeMetadataFormatName,
-                   2, 256);
-        addAttribute("LocalColorTable", "sizeOfLocalColorTable",
-                     DATATYPE_INTEGER, true, null,
-                     Arrays.asList(GIFStreamMetadata.colorTableSizes));
-        addBooleanAttribute("LocalColorTable", "sortFlag",
-                            false, false);
-
-        // root -> LocalColorTable -> ColorTableEntry
-        addElement("ColorTableEntry", "LocalColorTable",
-                   CHILD_POLICY_EMPTY);
-        addAttribute("ColorTableEntry", "index",
-                     DATATYPE_INTEGER, true, null,
-                     "0", "255", true, true);
-        addAttribute("ColorTableEntry", "red",
-                     DATATYPE_INTEGER, true, null,
-                     "0", "255", true, true);
-        addAttribute("ColorTableEntry", "green",
-                     DATATYPE_INTEGER, true, null,
-                     "0", "255", true, true);
-        addAttribute("ColorTableEntry", "blue",
-                     DATATYPE_INTEGER, true, null,
-                     "0", "255", true, true);
-
-        // root -> GraphicControlExtension
-        addElement("GraphicControlExtension",
-                   GIFImageMetadata.nativeMetadataFormatName,
-                   CHILD_POLICY_EMPTY);
-        addAttribute("GraphicControlExtension", "disposalMethod",
-                     DATATYPE_STRING, true, null,
-                     Arrays.asList(GIFImageMetadata.disposalMethodNames));
-        addBooleanAttribute("GraphicControlExtension", "userInputFlag",
-                            false, false);
-        addBooleanAttribute("GraphicControlExtension", "transparentColorFlag",
-                            false, false);
-        addAttribute("GraphicControlExtension", "delayTime",
-                     DATATYPE_INTEGER, true, null,
-                     "0", "65535", true, true);
-        addAttribute("GraphicControlExtension", "transparentColorIndex",
-                     DATATYPE_INTEGER, true, null,
-                     "0", "255", true, true);
-
-        // root -> PlainTextExtension
-        addElement("PlainTextExtension",
-                   GIFImageMetadata.nativeMetadataFormatName,
-                   CHILD_POLICY_EMPTY);
-        addAttribute("PlainTextExtension", "textGridLeft",
-                     DATATYPE_INTEGER, true, null,
-                     "0", "65535", true, true);
-        addAttribute("PlainTextExtension", "textGridTop",
-                     DATATYPE_INTEGER, true, null,
-                     "0", "65535", true, true);
-        addAttribute("PlainTextExtension", "textGridWidth",
-                     DATATYPE_INTEGER, true, null,
-                     "1", "65535", true, true);
-        addAttribute("PlainTextExtension", "textGridHeight",
-                     DATATYPE_INTEGER, true, null,
-                     "1", "65535", true, true);
-        addAttribute("PlainTextExtension", "characterCellWidth",
-                     DATATYPE_INTEGER, true, null,
-                     "1", "65535", true, true);
-        addAttribute("PlainTextExtension", "characterCellHeight",
-                     DATATYPE_INTEGER, true, null,
-                     "1", "65535", true, true);
-        addAttribute("PlainTextExtension", "textForegroundColor",
-                     DATATYPE_INTEGER, true, null,
-                     "0", "255", true, true);
-        addAttribute("PlainTextExtension", "textBackgroundColor",
-                     DATATYPE_INTEGER, true, null,
-                     "0", "255", true, true);
-
-        // root -> ApplicationExtensions
-        addElement("ApplicationExtensions",
-                   GIFImageMetadata.nativeMetadataFormatName,
-                   1, Integer.MAX_VALUE);
-
-        // root -> ApplicationExtensions -> ApplicationExtension
-        addElement("ApplicationExtension", "ApplicationExtensions",
-                   CHILD_POLICY_EMPTY);
-        addAttribute("ApplicationExtension", "applicationID",
-                     DATATYPE_STRING, true, null);
-        addAttribute("ApplicationExtension", "authenticationCode",
-                     DATATYPE_STRING, true, null);
-        addObjectValue("ApplicationExtension", byte.class,
-                       0, Integer.MAX_VALUE);
-
-        // root -> CommentExtensions
-        addElement("CommentExtensions",
-                   GIFImageMetadata.nativeMetadataFormatName,
-                   1, Integer.MAX_VALUE);
-
-        // root -> CommentExtensions -> CommentExtension
-        addElement("CommentExtension", "CommentExtensions",
-                   CHILD_POLICY_EMPTY);
-        addAttribute("CommentExtension", "value",
-                     DATATYPE_STRING, true, null);
-    }
-
-    public boolean canNodeAppear(String elementName,
-                                 ImageTypeSpecifier imageType) {
-        return true;
-    }
-
-    public static synchronized IIOMetadataFormat getInstance() {
-        if (instance == null) {
-            instance = new GIFImageMetadataFormat();
-        }
-        return instance;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/plugins/gif/GIFImageMetadataFormatResources.java b/ojluni/src/main/java/com/sun/imageio/plugins/gif/GIFImageMetadataFormatResources.java
deleted file mode 100755
index aa9697a..0000000
--- a/ojluni/src/main/java/com/sun/imageio/plugins/gif/GIFImageMetadataFormatResources.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Copyright (c) 2001, 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.
- */
-
-package com.sun.imageio.plugins.gif;
-
-import java.util.ListResourceBundle;
-
-public class GIFImageMetadataFormatResources extends ListResourceBundle {
-
-    public GIFImageMetadataFormatResources() {}
-
-    protected Object[][] getContents() {
-        return new Object[][] {
-
-        // Node name, followed by description
-        { "ImageDescriptor", "The image descriptor" },
-        { "LocalColorTable", "The local color table" },
-        { "ColorTableEntry", "A local color table entry" },
-        { "GraphicControlExtension", "A graphic control extension" },
-        { "PlainTextExtension", "A plain text (text grid) extension" },
-        { "ApplicationExtensions", "A set of application extensions" },
-        { "ApplicationExtension", "An application extension" },
-        { "CommentExtensions", "A set of comments" },
-        { "CommentExtension", "A comment" },
-
-        // Node name + "/" + AttributeName, followed by description
-        { "ImageDescriptor/imageLeftPosition",
-          "The X offset of the image relative to the screen origin" },
-        { "ImageDescriptor/imageTopPosition",
-          "The Y offset of the image relative to the screen origin" },
-        { "ImageDescriptor/imageWidth",
-          "The width of the image" },
-        { "ImageDescriptor/imageHeight",
-          "The height of the image" },
-        { "ImageDescriptor/interlaceFlag",
-          "True if the image is stored using interlacing" },
-        { "LocalColorTable/sizeOfLocalColorTable",
-          "The number of entries in the local color table" },
-        { "LocalColorTable/sortFlag",
-          "True if the local color table is sorted by frequency" },
-        { "ColorTableEntry/index", "The index of the color table entry" },
-        { "ColorTableEntry/red",
-          "The red value for the color table entry" },
-        { "ColorTableEntry/green",
-          "The green value for the color table entry" },
-        { "ColorTableEntry/blue",
-          "The blue value for the color table entry" },
-        { "GraphicControlExtension/disposalMethod",
-          "The disposal method for this frame" },
-        { "GraphicControlExtension/userInputFlag",
-          "True if the frame should be advanced based on user input" },
-        { "GraphicControlExtension/transparentColorFlag",
-          "True if a transparent color exists" },
-        { "GraphicControlExtension/delayTime",
-          "The time to delay between frames, in hundredths of a second" },
-        { "GraphicControlExtension/transparentColorIndex",
-          "The transparent color, if transparentColorFlag is true" },
-        { "PlainTextExtension/textGridLeft",
-          "The X offset of the text grid" },
-        { "PlainTextExtension/textGridTop",
-          "The Y offset of the text grid" },
-        { "PlainTextExtension/textGridWidth",
-          "The number of columns in the text grid" },
-        { "PlainTextExtension/textGridHeight",
-          "The number of rows in the text grid" },
-        { "PlainTextExtension/characterCellWidth",
-          "The width of a character cell" },
-        { "PlainTextExtension/characterCellHeight",
-          "The height of a character cell" },
-        { "PlainTextExtension/textForegroundColor",
-          "The text foreground color index" },
-        { "PlainTextExtension/textBackgroundColor",
-          "The text background color index" },
-        { "ApplicationExtension/applicationID",
-          "The application ID" },
-        { "ApplicationExtension/authenticationCode",
-          "The authentication code" },
-        { "CommentExtension/value", "The comment" },
-
-        };
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/plugins/gif/GIFImageReader.java b/ojluni/src/main/java/com/sun/imageio/plugins/gif/GIFImageReader.java
deleted file mode 100755
index 36c78a4..0000000
--- a/ojluni/src/main/java/com/sun/imageio/plugins/gif/GIFImageReader.java
+++ /dev/null
@@ -1,1028 +0,0 @@
-/*
- * Copyright (c) 2000, 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.
- */
-
-package com.sun.imageio.plugins.gif;
-
-import java.awt.Point;
-import java.awt.Rectangle;
-import java.awt.image.BufferedImage;
-import java.awt.image.DataBuffer;
-import java.awt.image.WritableRaster;
-import java.io.BufferedInputStream;
-import java.io.DataInputStream;
-import java.io.EOFException;
-import java.io.InputStream;
-import java.io.IOException;
-import java.nio.ByteOrder;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Iterator;
-import java.util.List;
-import javax.imageio.IIOException;
-import javax.imageio.ImageReader;
-import javax.imageio.ImageReadParam;
-import javax.imageio.ImageTypeSpecifier;
-import javax.imageio.metadata.IIOMetadata;
-import javax.imageio.spi.ImageReaderSpi;
-import javax.imageio.stream.ImageInputStream;
-import com.sun.imageio.plugins.common.ReaderUtil;
-
-public class GIFImageReader extends ImageReader {
-
-    // The current ImageInputStream source.
-    ImageInputStream stream = null;
-
-    // Per-stream settings
-
-    // True if the file header including stream metadata has been read.
-    boolean gotHeader = false;
-
-    // Global metadata, read once per input setting.
-    GIFStreamMetadata streamMetadata = null;
-
-    // The current image index
-    int currIndex = -1;
-
-    // Metadata for image at 'currIndex', or null.
-    GIFImageMetadata imageMetadata = null;
-
-    // A List of Longs indicating the stream positions of the
-    // start of the metadata for each image.  Entries are added
-    // as needed.
-    List imageStartPosition = new ArrayList();
-
-    // Length of metadata for image at 'currIndex', valid only if
-    // imageMetadata != null.
-    int imageMetadataLength;
-
-    // The number of images in the stream, if known, otherwise -1.
-    int numImages = -1;
-
-    // Variables used by the LZW decoding process
-    byte[] block = new byte[255];
-    int blockLength = 0;
-    int bitPos = 0;
-    int nextByte = 0;
-    int initCodeSize;
-    int clearCode;
-    int eofCode;
-
-    // 32-bit lookahead buffer
-    int next32Bits = 0;
-
-    // Try if the end of the data blocks has been found,
-    // and we are simply draining the 32-bit buffer
-    boolean lastBlockFound = false;
-
-    // The image to be written.
-    BufferedImage theImage = null;
-
-    // The image's tile.
-    WritableRaster theTile = null;
-
-    // The image dimensions (from the stream).
-    int width = -1, height = -1;
-
-    // The pixel currently being decoded (in the stream's coordinates).
-    int streamX = -1, streamY = -1;
-
-    // The number of rows decoded
-    int rowsDone = 0;
-
-    // The current interlace pass, starting with 0.
-    int interlacePass = 0;
-
-    // End per-stream settings
-
-    // Constants used to control interlacing.
-    static final int[] interlaceIncrement = { 8, 8, 4, 2, -1 };
-    static final int[] interlaceOffset = { 0, 4, 2, 1, -1 };
-
-    public GIFImageReader(ImageReaderSpi originatingProvider) {
-        super(originatingProvider);
-    }
-
-    // Take input from an ImageInputStream
-    public void setInput(Object input,
-                         boolean seekForwardOnly,
-                         boolean ignoreMetadata) {
-        super.setInput(input, seekForwardOnly, ignoreMetadata);
-        if (input != null) {
-            if (!(input instanceof ImageInputStream)) {
-                throw new IllegalArgumentException
-                    ("input not an ImageInputStream!");
-            }
-            this.stream = (ImageInputStream)input;
-        } else {
-            this.stream = null;
-        }
-
-        // Clear all values based on the previous stream contents
-        resetStreamSettings();
-    }
-
-    public int getNumImages(boolean allowSearch) throws IIOException {
-        if (stream == null) {
-            throw new IllegalStateException("Input not set!");
-        }
-        if (seekForwardOnly && allowSearch) {
-            throw new IllegalStateException
-                ("seekForwardOnly and allowSearch can't both be true!");
-        }
-
-        if (numImages > 0) {
-            return numImages;
-        }
-        if (allowSearch) {
-            this.numImages = locateImage(Integer.MAX_VALUE) + 1;
-        }
-        return numImages;
-    }
-
-    // Throw an IndexOutOfBoundsException if index < minIndex,
-    // and bump minIndex if required.
-    private void checkIndex(int imageIndex) {
-        if (imageIndex < minIndex) {
-            throw new IndexOutOfBoundsException("imageIndex < minIndex!");
-        }
-        if (seekForwardOnly) {
-            minIndex = imageIndex;
-        }
-    }
-
-    public int getWidth(int imageIndex) throws IIOException {
-        checkIndex(imageIndex);
-
-        int index = locateImage(imageIndex);
-        if (index != imageIndex) {
-            throw new IndexOutOfBoundsException();
-        }
-        readMetadata();
-        return imageMetadata.imageWidth;
-    }
-
-    public int getHeight(int imageIndex) throws IIOException {
-        checkIndex(imageIndex);
-
-        int index = locateImage(imageIndex);
-        if (index != imageIndex) {
-            throw new IndexOutOfBoundsException();
-        }
-        readMetadata();
-        return imageMetadata.imageHeight;
-    }
-
-    public Iterator getImageTypes(int imageIndex) throws IIOException {
-        checkIndex(imageIndex);
-
-        int index = locateImage(imageIndex);
-        if (index != imageIndex) {
-            throw new IndexOutOfBoundsException();
-        }
-        readMetadata();
-
-        List l = new ArrayList(1);
-
-        byte[] colorTable;
-        if (imageMetadata.localColorTable != null) {
-            colorTable = imageMetadata.localColorTable;
-        } else {
-            colorTable = streamMetadata.globalColorTable;
-        }
-
-        // Normalize color table length to 2^1, 2^2, 2^4, or 2^8
-        int length = colorTable.length/3;
-        int bits;
-        if (length == 2) {
-            bits = 1;
-        } else if (length == 4) {
-            bits = 2;
-        } else if (length == 8 || length == 16) {
-            // Bump from 3 to 4 bits
-            bits = 4;
-        } else {
-            // Bump to 8 bits
-            bits = 8;
-        }
-        int lutLength = 1 << bits;
-        byte[] r = new byte[lutLength];
-        byte[] g = new byte[lutLength];
-        byte[] b = new byte[lutLength];
-
-        // Entries from length + 1 to lutLength - 1 will be 0
-        int rgbIndex = 0;
-        for (int i = 0; i < length; i++) {
-            r[i] = colorTable[rgbIndex++];
-            g[i] = colorTable[rgbIndex++];
-            b[i] = colorTable[rgbIndex++];
-        }
-
-        byte[] a = null;
-        if (imageMetadata.transparentColorFlag) {
-            a = new byte[lutLength];
-            Arrays.fill(a, (byte)255);
-
-            // Some files erroneously have a transparent color index
-            // of 255 even though there are fewer than 256 colors.
-            int idx = Math.min(imageMetadata.transparentColorIndex,
-                               lutLength - 1);
-            a[idx] = (byte)0;
-        }
-
-        int[] bitsPerSample = new int[1];
-        bitsPerSample[0] = bits;
-        l.add(ImageTypeSpecifier.createIndexed(r, g, b, a, bits,
-                                               DataBuffer.TYPE_BYTE));
-        return l.iterator();
-    }
-
-    public ImageReadParam getDefaultReadParam() {
-        return new ImageReadParam();
-    }
-
-    public IIOMetadata getStreamMetadata() throws IIOException {
-        readHeader();
-        return streamMetadata;
-    }
-
-    public IIOMetadata getImageMetadata(int imageIndex) throws IIOException {
-        checkIndex(imageIndex);
-
-        int index = locateImage(imageIndex);
-        if (index != imageIndex) {
-            throw new IndexOutOfBoundsException("Bad image index!");
-        }
-        readMetadata();
-        return imageMetadata;
-    }
-
-    // BEGIN LZW STUFF
-
-    private void initNext32Bits() {
-        next32Bits = block[0] & 0xff;
-        next32Bits |= (block[1] & 0xff) << 8;
-        next32Bits |= (block[2] & 0xff) << 16;
-        next32Bits |= block[3] << 24;
-        nextByte = 4;
-    }
-
-    // Load a block (1-255 bytes) at a time, and maintain
-    // a 32-bit lookahead buffer that is filled from the left
-    // and extracted from the right.
-    //
-    // When the last block is found, we continue to
-    //
-    private int getCode(int codeSize, int codeMask) throws IOException {
-        if (bitPos + codeSize > 32) {
-            return eofCode; // No more data available
-        }
-
-        int code = (next32Bits >> bitPos) & codeMask;
-        bitPos += codeSize;
-
-        // Shift in a byte of new data at a time
-        while (bitPos >= 8 && !lastBlockFound) {
-            next32Bits >>>= 8;
-            bitPos -= 8;
-
-            // Check if current block is out of bytes
-            if (nextByte >= blockLength) {
-                // Get next block size
-                blockLength = stream.readUnsignedByte();
-                if (blockLength == 0) {
-                    lastBlockFound = true;
-                    return code;
-                } else {
-                    int left = blockLength;
-                    int off = 0;
-                    while (left > 0) {
-                        int nbytes = stream.read(block, off, left);
-                        off += nbytes;
-                        left -= nbytes;
-                    }
-                    nextByte = 0;
-                }
-            }
-
-            next32Bits |= block[nextByte++] << 24;
-        }
-
-        return code;
-    }
-
-    public void initializeStringTable(int[] prefix,
-                                      byte[] suffix,
-                                      byte[] initial,
-                                      int[] length) {
-        int numEntries = 1 << initCodeSize;
-        for (int i = 0; i < numEntries; i++) {
-            prefix[i] = -1;
-            suffix[i] = (byte)i;
-            initial[i] = (byte)i;
-            length[i] = 1;
-        }
-
-        // Fill in the entire table for robustness against
-        // out-of-sequence codes.
-        for (int i = numEntries; i < 4096; i++) {
-            prefix[i] = -1;
-            length[i] = 1;
-        }
-
-        // tableIndex = numEntries + 2;
-        // codeSize = initCodeSize + 1;
-        // codeMask = (1 << codeSize) - 1;
-    }
-
-    Rectangle sourceRegion;
-    int sourceXSubsampling;
-    int sourceYSubsampling;
-    int sourceMinProgressivePass;
-    int sourceMaxProgressivePass;
-
-    Point destinationOffset;
-    Rectangle destinationRegion;
-
-    // Used only if IIOReadUpdateListeners are present
-    int updateMinY;
-    int updateYStep;
-
-    boolean decodeThisRow = true;
-    int destY = 0;
-
-    byte[] rowBuf;
-
-    private void outputRow() {
-        // Clip against ImageReadParam
-        int width = Math.min(sourceRegion.width,
-                             destinationRegion.width*sourceXSubsampling);
-        int destX = destinationRegion.x;
-
-        if (sourceXSubsampling == 1) {
-            theTile.setDataElements(destX, destY, width, 1, rowBuf);
-        } else {
-            for (int x = 0; x < width; x += sourceXSubsampling, destX++) {
-                theTile.setSample(destX, destY, 0, rowBuf[x] & 0xff);
-            }
-        }
-
-        // Update IIOReadUpdateListeners, if any
-        if (updateListeners != null) {
-            int[] bands = { 0 };
-            // updateYStep will have been initialized if
-            // updateListeners is non-null
-            processImageUpdate(theImage,
-                               destX, destY,
-                               width, 1, 1, updateYStep,
-                               bands);
-        }
-    }
-
-    private void computeDecodeThisRow() {
-        this.decodeThisRow =
-            (destY < destinationRegion.y + destinationRegion.height) &&
-            (streamY >= sourceRegion.y) &&
-            (streamY < sourceRegion.y + sourceRegion.height) &&
-            (((streamY - sourceRegion.y) % sourceYSubsampling) == 0);
-    }
-
-    private void outputPixels(byte[] string, int len) {
-        if (interlacePass < sourceMinProgressivePass ||
-            interlacePass > sourceMaxProgressivePass) {
-            return;
-        }
-
-        for (int i = 0; i < len; i++) {
-            if (streamX >= sourceRegion.x) {
-                rowBuf[streamX - sourceRegion.x] = string[i];
-            }
-
-            // Process end-of-row
-            ++streamX;
-            if (streamX == width) {
-                // Update IIOReadProgressListeners
-                ++rowsDone;
-                processImageProgress(100.0F*rowsDone/height);
-
-                if (decodeThisRow) {
-                    outputRow();
-                }
-
-                streamX = 0;
-                if (imageMetadata.interlaceFlag) {
-                    streamY += interlaceIncrement[interlacePass];
-                    if (streamY >= height) {
-                        // Inform IIOReadUpdateListeners of end of pass
-                        if (updateListeners != null) {
-                            processPassComplete(theImage);
-                        }
-
-                        ++interlacePass;
-                        if (interlacePass > sourceMaxProgressivePass) {
-                            return;
-                        }
-                        streamY = interlaceOffset[interlacePass];
-                        startPass(interlacePass);
-                    }
-                } else {
-                    ++streamY;
-                }
-
-                // Determine whether pixels from this row will
-                // be written to the destination
-                this.destY = destinationRegion.y +
-                    (streamY - sourceRegion.y)/sourceYSubsampling;
-                computeDecodeThisRow();
-            }
-        }
-    }
-
-    // END LZW STUFF
-
-    private void readHeader() throws IIOException {
-        if (gotHeader) {
-            return;
-        }
-        if (stream == null) {
-            throw new IllegalStateException("Input not set!");
-        }
-
-        // Create an object to store the stream metadata
-        this.streamMetadata = new GIFStreamMetadata();
-
-        try {
-            stream.setByteOrder(ByteOrder.LITTLE_ENDIAN);
-
-            byte[] signature = new byte[6];
-            stream.readFully(signature);
-
-            StringBuffer version = new StringBuffer(3);
-            version.append((char)signature[3]);
-            version.append((char)signature[4]);
-            version.append((char)signature[5]);
-            streamMetadata.version = version.toString();
-
-            streamMetadata.logicalScreenWidth = stream.readUnsignedShort();
-            streamMetadata.logicalScreenHeight = stream.readUnsignedShort();
-
-            int packedFields = stream.readUnsignedByte();
-            boolean globalColorTableFlag = (packedFields & 0x80) != 0;
-            streamMetadata.colorResolution = ((packedFields >> 4) & 0x7) + 1;
-            streamMetadata.sortFlag = (packedFields & 0x8) != 0;
-            int numGCTEntries = 1 << ((packedFields & 0x7) + 1);
-
-            streamMetadata.backgroundColorIndex = stream.readUnsignedByte();
-            streamMetadata.pixelAspectRatio = stream.readUnsignedByte();
-
-            if (globalColorTableFlag) {
-                streamMetadata.globalColorTable = new byte[3*numGCTEntries];
-                stream.readFully(streamMetadata.globalColorTable);
-            } else {
-                streamMetadata.globalColorTable = null;
-            }
-
-            // Found position of metadata for image 0
-            imageStartPosition.add(Long.valueOf(stream.getStreamPosition()));
-        } catch (IOException e) {
-            throw new IIOException("I/O error reading header!", e);
-        }
-
-        gotHeader = true;
-    }
-
-    private boolean skipImage() throws IIOException {
-        // Stream must be at the beginning of an image descriptor
-        // upon exit
-
-        try {
-            while (true) {
-                int blockType = stream.readUnsignedByte();
-
-                if (blockType == 0x2c) {
-                    stream.skipBytes(8);
-
-                    int packedFields = stream.readUnsignedByte();
-                    if ((packedFields & 0x80) != 0) {
-                        // Skip color table if any
-                        int bits = (packedFields & 0x7) + 1;
-                        stream.skipBytes(3*(1 << bits));
-                    }
-
-                    stream.skipBytes(1);
-
-                    int length = 0;
-                    do {
-                        length = stream.readUnsignedByte();
-                        stream.skipBytes(length);
-                    } while (length > 0);
-
-                    return true;
-                } else if (blockType == 0x3b) {
-                    return false;
-                } else if (blockType == 0x21) {
-                    int label = stream.readUnsignedByte();
-
-                    int length = 0;
-                    do {
-                        length = stream.readUnsignedByte();
-                        stream.skipBytes(length);
-                    } while (length > 0);
-                } else if (blockType == 0x0) {
-                    // EOF
-                    return false;
-                } else {
-                    int length = 0;
-                    do {
-                        length = stream.readUnsignedByte();
-                        stream.skipBytes(length);
-                    } while (length > 0);
-                }
-            }
-        } catch (EOFException e) {
-            return false;
-        } catch (IOException e) {
-            throw new IIOException("I/O error locating image!", e);
-        }
-    }
-
-    private int locateImage(int imageIndex) throws IIOException {
-        readHeader();
-
-        try {
-            // Find closest known index
-            int index = Math.min(imageIndex, imageStartPosition.size() - 1);
-
-            // Seek to that position
-            Long l = (Long)imageStartPosition.get(index);
-            stream.seek(l.longValue());
-
-            // Skip images until at desired index or last image found
-            while (index < imageIndex) {
-                if (!skipImage()) {
-                    --index;
-                    return index;
-                }
-
-                Long l1 = new Long(stream.getStreamPosition());
-                imageStartPosition.add(l1);
-                ++index;
-            }
-        } catch (IOException e) {
-            throw new IIOException("Couldn't seek!", e);
-        }
-
-        if (currIndex != imageIndex) {
-            imageMetadata = null;
-        }
-        currIndex = imageIndex;
-        return imageIndex;
-    }
-
-    // Read blocks of 1-255 bytes, stop at a 0-length block
-    private byte[] concatenateBlocks() throws IOException {
-        byte[] data = new byte[0];
-        while (true) {
-            int length = stream.readUnsignedByte();
-            if (length == 0) {
-                break;
-            }
-            byte[] newData = new byte[data.length + length];
-            System.arraycopy(data, 0, newData, 0, data.length);
-            stream.readFully(newData, data.length, length);
-            data = newData;
-        }
-
-        return data;
-    }
-
-    // Stream must be positioned at start of metadata for 'currIndex'
-    private void readMetadata() throws IIOException {
-        if (stream == null) {
-            throw new IllegalStateException("Input not set!");
-        }
-
-        try {
-            // Create an object to store the image metadata
-            this.imageMetadata = new GIFImageMetadata();
-
-            long startPosition = stream.getStreamPosition();
-            while (true) {
-                int blockType = stream.readUnsignedByte();
-                if (blockType == 0x2c) { // Image Descriptor
-                    imageMetadata.imageLeftPosition =
-                        stream.readUnsignedShort();
-                    imageMetadata.imageTopPosition =
-                        stream.readUnsignedShort();
-                    imageMetadata.imageWidth = stream.readUnsignedShort();
-                    imageMetadata.imageHeight = stream.readUnsignedShort();
-
-                    int idPackedFields = stream.readUnsignedByte();
-                    boolean localColorTableFlag =
-                        (idPackedFields & 0x80) != 0;
-                    imageMetadata.interlaceFlag = (idPackedFields & 0x40) != 0;
-                    imageMetadata.sortFlag = (idPackedFields & 0x20) != 0;
-                    int numLCTEntries = 1 << ((idPackedFields & 0x7) + 1);
-
-                    if (localColorTableFlag) {
-                        // Read color table if any
-                        imageMetadata.localColorTable =
-                            new byte[3*numLCTEntries];
-                        stream.readFully(imageMetadata.localColorTable);
-                    } else {
-                        imageMetadata.localColorTable = null;
-                    }
-
-                    // Record length of this metadata block
-                    this.imageMetadataLength =
-                        (int)(stream.getStreamPosition() - startPosition);
-
-                    // Now positioned at start of LZW-compressed pixels
-                    return;
-                } else if (blockType == 0x21) { // Extension block
-                    int label = stream.readUnsignedByte();
-
-                    if (label == 0xf9) { // Graphics Control Extension
-                        int gceLength = stream.readUnsignedByte(); // 4
-                        int gcePackedFields = stream.readUnsignedByte();
-                        imageMetadata.disposalMethod =
-                            (gcePackedFields >> 2) & 0x3;
-                        imageMetadata.userInputFlag =
-                            (gcePackedFields & 0x2) != 0;
-                        imageMetadata.transparentColorFlag =
-                            (gcePackedFields & 0x1) != 0;
-
-                        imageMetadata.delayTime = stream.readUnsignedShort();
-                        imageMetadata.transparentColorIndex
-                            = stream.readUnsignedByte();
-
-                        int terminator = stream.readUnsignedByte();
-                    } else if (label == 0x1) { // Plain text extension
-                        int length = stream.readUnsignedByte();
-                        imageMetadata.hasPlainTextExtension = true;
-                        imageMetadata.textGridLeft =
-                            stream.readUnsignedShort();
-                        imageMetadata.textGridTop =
-                            stream.readUnsignedShort();
-                        imageMetadata.textGridWidth =
-                            stream.readUnsignedShort();
-                        imageMetadata.textGridHeight =
-                            stream.readUnsignedShort();
-                        imageMetadata.characterCellWidth =
-                            stream.readUnsignedByte();
-                        imageMetadata.characterCellHeight =
-                            stream.readUnsignedByte();
-                        imageMetadata.textForegroundColor =
-                            stream.readUnsignedByte();
-                        imageMetadata.textBackgroundColor =
-                            stream.readUnsignedByte();
-                        imageMetadata.text = concatenateBlocks();
-                    } else if (label == 0xfe) { // Comment extension
-                        byte[] comment = concatenateBlocks();
-                        if (imageMetadata.comments == null) {
-                            imageMetadata.comments = new ArrayList();
-                        }
-                        imageMetadata.comments.add(comment);
-                    } else if (label == 0xff) { // Application extension
-                        int blockSize = stream.readUnsignedByte();
-                        byte[] applicationID = new byte[8];
-                        byte[] authCode = new byte[3];
-
-                        // read available data
-                        byte[] blockData = new byte[blockSize];
-                        stream.readFully(blockData);
-
-                        int offset = copyData(blockData, 0, applicationID);
-                        offset = copyData(blockData, offset, authCode);
-
-                        byte[] applicationData = concatenateBlocks();
-
-                        if (offset < blockSize) {
-                            int len = blockSize - offset;
-                            byte[] data =
-                                new byte[len + applicationData.length];
-
-                            System.arraycopy(blockData, offset, data, 0, len);
-                            System.arraycopy(applicationData, 0, data, len,
-                                             applicationData.length);
-
-                            applicationData = data;
-                        }
-
-                        // Init lists if necessary
-                        if (imageMetadata.applicationIDs == null) {
-                            imageMetadata.applicationIDs = new ArrayList();
-                            imageMetadata.authenticationCodes =
-                                new ArrayList();
-                            imageMetadata.applicationData = new ArrayList();
-                        }
-                        imageMetadata.applicationIDs.add(applicationID);
-                        imageMetadata.authenticationCodes.add(authCode);
-                        imageMetadata.applicationData.add(applicationData);
-                    } else {
-                        // Skip over unknown extension blocks
-                        int length = 0;
-                        do {
-                            length = stream.readUnsignedByte();
-                            stream.skipBytes(length);
-                        } while (length > 0);
-                    }
-                } else if (blockType == 0x3b) { // Trailer
-                    throw new IndexOutOfBoundsException
-                        ("Attempt to read past end of image sequence!");
-                } else {
-                    throw new IIOException("Unexpected block type " +
-                                           blockType + "!");
-                }
-            }
-        } catch (IIOException iioe) {
-            throw iioe;
-        } catch (IOException ioe) {
-            throw new IIOException("I/O error reading image metadata!", ioe);
-        }
-    }
-
-    private int copyData(byte[] src, int offset, byte[] dst) {
-        int len = dst.length;
-        int rest = src.length - offset;
-        if (len > rest) {
-            len = rest;
-        }
-        System.arraycopy(src, offset, dst, 0, len);
-        return offset + len;
-    }
-
-    private void startPass(int pass) {
-        if (updateListeners == null) {
-            return;
-        }
-
-        int y = 0;
-        int yStep = 1;
-        if (imageMetadata.interlaceFlag) {
-            y = interlaceOffset[interlacePass];
-            yStep = interlaceIncrement[interlacePass];
-        }
-
-        int[] vals = ReaderUtil.
-            computeUpdatedPixels(sourceRegion,
-                                 destinationOffset,
-                                 destinationRegion.x,
-                                 destinationRegion.y,
-                                 destinationRegion.x +
-                                 destinationRegion.width - 1,
-                                 destinationRegion.y +
-                                 destinationRegion.height - 1,
-                                 sourceXSubsampling,
-                                 sourceYSubsampling,
-                                 0,
-                                 y,
-                                 destinationRegion.width,
-                                 (destinationRegion.height + yStep - 1)/yStep,
-                                 1,
-                                 yStep);
-
-        // Initialized updateMinY and updateYStep
-        this.updateMinY = vals[1];
-        this.updateYStep = vals[5];
-
-        // Inform IIOReadUpdateListeners of new pass
-        int[] bands = { 0 };
-
-        processPassStarted(theImage,
-                           interlacePass,
-                           sourceMinProgressivePass,
-                           sourceMaxProgressivePass,
-                           0,
-                           updateMinY,
-                           1,
-                           updateYStep,
-                           bands);
-    }
-
-    public BufferedImage read(int imageIndex, ImageReadParam param)
-        throws IIOException {
-        if (stream == null) {
-            throw new IllegalStateException("Input not set!");
-        }
-        checkIndex(imageIndex);
-
-        int index = locateImage(imageIndex);
-        if (index != imageIndex) {
-            throw new IndexOutOfBoundsException("imageIndex out of bounds!");
-        }
-
-        clearAbortRequest();
-        readMetadata();
-
-        // A null ImageReadParam means we use the default
-        if (param == null) {
-            param = getDefaultReadParam();
-        }
-
-        // Initialize the destination image
-        Iterator imageTypes = getImageTypes(imageIndex);
-        this.theImage = getDestination(param,
-                                       imageTypes,
-                                       imageMetadata.imageWidth,
-                                       imageMetadata.imageHeight);
-        this.theTile = theImage.getWritableTile(0, 0);
-        this.width = imageMetadata.imageWidth;
-        this.height = imageMetadata.imageHeight;
-        this.streamX = 0;
-        this.streamY = 0;
-        this.rowsDone = 0;
-        this.interlacePass = 0;
-
-        // Get source region, taking subsampling offsets into account,
-        // and clipping against the true source bounds
-
-        this.sourceRegion = new Rectangle(0, 0, 0, 0);
-        this.destinationRegion = new Rectangle(0, 0, 0, 0);
-        computeRegions(param, width, height, theImage,
-                       sourceRegion, destinationRegion);
-        this.destinationOffset = new Point(destinationRegion.x,
-                                           destinationRegion.y);
-
-        this.sourceXSubsampling = param.getSourceXSubsampling();
-        this.sourceYSubsampling = param.getSourceYSubsampling();
-        this.sourceMinProgressivePass =
-            Math.max(param.getSourceMinProgressivePass(), 0);
-        this.sourceMaxProgressivePass =
-            Math.min(param.getSourceMaxProgressivePass(), 3);
-
-        this.destY = destinationRegion.y +
-            (streamY - sourceRegion.y)/sourceYSubsampling;
-        computeDecodeThisRow();
-
-        // Inform IIOReadProgressListeners of start of image
-        processImageStarted(imageIndex);
-        startPass(0);
-
-        this.rowBuf = new byte[width];
-
-        try {
-            // Read and decode the image data, fill in theImage
-            this.initCodeSize = stream.readUnsignedByte();
-
-            // Read first data block
-            this.blockLength = stream.readUnsignedByte();
-            int left = blockLength;
-            int off = 0;
-            while (left > 0) {
-                int nbytes = stream.read(block, off, left);
-                left -= nbytes;
-                off += nbytes;
-            }
-
-            this.bitPos = 0;
-            this.nextByte = 0;
-            this.lastBlockFound = false;
-            this.interlacePass = 0;
-
-            // Init 32-bit buffer
-            initNext32Bits();
-
-            this.clearCode = 1 << initCodeSize;
-            this.eofCode = clearCode + 1;
-
-            int code, oldCode = 0;
-
-            int[] prefix = new int[4096];
-            byte[] suffix = new byte[4096];
-            byte[] initial = new byte[4096];
-            int[] length = new int[4096];
-            byte[] string = new byte[4096];
-
-            initializeStringTable(prefix, suffix, initial, length);
-            int tableIndex = (1 << initCodeSize) + 2;
-            int codeSize = initCodeSize + 1;
-            int codeMask = (1 << codeSize) - 1;
-
-            while (!abortRequested()) {
-                code = getCode(codeSize, codeMask);
-
-                if (code == clearCode) {
-                    initializeStringTable(prefix, suffix, initial, length);
-                    tableIndex = (1 << initCodeSize) + 2;
-                    codeSize = initCodeSize + 1;
-                    codeMask = (1 << codeSize) - 1;
-
-                    code = getCode(codeSize, codeMask);
-                    if (code == eofCode) {
-                        // Inform IIOReadProgressListeners of end of image
-                        processImageComplete();
-                        return theImage;
-                    }
-                } else if (code == eofCode) {
-                    // Inform IIOReadProgressListeners of end of image
-                    processImageComplete();
-                    return theImage;
-                } else {
-                    int newSuffixIndex;
-                    if (code < tableIndex) {
-                        newSuffixIndex = code;
-                    } else { // code == tableIndex
-                        newSuffixIndex = oldCode;
-                        if (code != tableIndex) {
-                            // warning - code out of sequence
-                            // possibly data corruption
-                            processWarningOccurred("Out-of-sequence code!");
-                        }
-                    }
-
-                    int ti = tableIndex;
-                    int oc = oldCode;
-
-                    prefix[ti] = oc;
-                    suffix[ti] = initial[newSuffixIndex];
-                    initial[ti] = initial[oc];
-                    length[ti] = length[oc] + 1;
-
-                    ++tableIndex;
-                    if ((tableIndex == (1 << codeSize)) &&
-                        (tableIndex < 4096)) {
-                        ++codeSize;
-                        codeMask = (1 << codeSize) - 1;
-                    }
-                }
-
-                // Reverse code
-                int c = code;
-                int len = length[c];
-                for (int i = len - 1; i >= 0; i--) {
-                    string[i] = suffix[c];
-                    c = prefix[c];
-                }
-
-                outputPixels(string, len);
-                oldCode = code;
-            }
-
-            processReadAborted();
-            return theImage;
-        } catch (IOException e) {
-            e.printStackTrace();
-            throw new IIOException("I/O error reading image!", e);
-        }
-    }
-
-    /**
-     * Remove all settings including global settings such as
-     * <code>Locale</code>s and listeners, as well as stream settings.
-     */
-    public void reset() {
-        super.reset();
-        resetStreamSettings();
-    }
-
-    /**
-     * Remove local settings based on parsing of a stream.
-     */
-    private void resetStreamSettings() {
-        gotHeader = false;
-        streamMetadata = null;
-        currIndex = -1;
-        imageMetadata = null;
-        imageStartPosition = new ArrayList();
-        numImages = -1;
-
-        // No need to reinitialize 'block'
-        blockLength = 0;
-        bitPos = 0;
-        nextByte = 0;
-
-        next32Bits = 0;
-        lastBlockFound = false;
-
-        theImage = null;
-        theTile = null;
-        width = -1;
-        height = -1;
-        streamX = -1;
-        streamY = -1;
-        rowsDone = 0;
-        interlacePass = 0;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/plugins/gif/GIFImageReaderSpi.java b/ojluni/src/main/java/com/sun/imageio/plugins/gif/GIFImageReaderSpi.java
deleted file mode 100755
index c611a79..0000000
--- a/ojluni/src/main/java/com/sun/imageio/plugins/gif/GIFImageReaderSpi.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright (c) 2000, 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
- * 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.imageio.plugins.gif;
-
-import java.io.IOException;
-import java.util.Locale;
-import java.util.Iterator;
-import javax.imageio.ImageReader;
-import javax.imageio.metadata.IIOMetadataFormat;
-import javax.imageio.metadata.IIOMetadataFormatImpl;
-import javax.imageio.spi.ImageReaderSpi;
-import javax.imageio.stream.ImageInputStream;
-
-public class GIFImageReaderSpi extends ImageReaderSpi {
-
-    private static final String vendorName = "Oracle Corporation";
-
-    private static final String version = "1.0";
-
-    private static final String[] names = { "gif", "GIF" };
-
-    private static final String[] suffixes = { "gif" };
-
-    private static final String[] MIMETypes = { "image/gif" };
-
-    private static final String readerClassName =
-        "com.sun.imageio.plugins.gif.GIFImageReader";
-
-    private static final String[] writerSpiNames = {
-        "com.sun.imageio.plugins.gif.GIFImageWriterSpi"
-    };
-
-    public GIFImageReaderSpi() {
-        super(vendorName,
-              version,
-              names,
-              suffixes,
-              MIMETypes,
-              readerClassName,
-              new Class[] { ImageInputStream.class },
-              writerSpiNames,
-              true,
-              GIFStreamMetadata.nativeMetadataFormatName,
-              "com.sun.imageio.plugins.gif.GIFStreamMetadataFormat",
-              null, null,
-              true,
-              GIFImageMetadata.nativeMetadataFormatName,
-              "com.sun.imageio.plugins.gif.GIFImageMetadataFormat",
-              null, null
-              );
-    }
-
-    public String getDescription(Locale locale) {
-        return "Standard GIF image reader";
-    }
-
-    public boolean canDecodeInput(Object input) throws IOException {
-        if (!(input instanceof ImageInputStream)) {
-            return false;
-        }
-
-        ImageInputStream stream = (ImageInputStream)input;
-        byte[] b = new byte[6];
-        stream.mark();
-        stream.readFully(b);
-        stream.reset();
-
-        return b[0] == 'G' && b[1] == 'I' && b[2] == 'F' && b[3] == '8' &&
-            (b[4] == '7' || b[4] == '9') && b[5] == 'a';
-    }
-
-    public ImageReader createReaderInstance(Object extension) {
-        return new GIFImageReader(this);
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/plugins/gif/GIFImageWriter.java b/ojluni/src/main/java/com/sun/imageio/plugins/gif/GIFImageWriter.java
deleted file mode 100755
index e62db31..0000000
--- a/ojluni/src/main/java/com/sun/imageio/plugins/gif/GIFImageWriter.java
+++ /dev/null
@@ -1,1317 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-package com.sun.imageio.plugins.gif;
-
-import java.awt.Dimension;
-import java.awt.Rectangle;
-import java.awt.image.ColorModel;
-import java.awt.image.ComponentSampleModel;
-import java.awt.image.DataBufferByte;
-import java.awt.image.IndexColorModel;
-import java.awt.image.Raster;
-import java.awt.image.RenderedImage;
-import java.awt.image.SampleModel;
-import java.awt.image.WritableRaster;
-import java.io.IOException;
-import java.nio.ByteOrder;
-import java.util.Arrays;
-import java.util.Iterator;
-import java.util.Locale;
-import javax.imageio.IIOException;
-import javax.imageio.IIOImage;
-import javax.imageio.ImageTypeSpecifier;
-import javax.imageio.ImageWriteParam;
-import javax.imageio.ImageWriter;
-import javax.imageio.spi.ImageWriterSpi;
-import javax.imageio.metadata.IIOInvalidTreeException;
-import javax.imageio.metadata.IIOMetadata;
-import javax.imageio.metadata.IIOMetadataFormatImpl;
-import javax.imageio.metadata.IIOMetadataNode;
-import javax.imageio.stream.ImageOutputStream;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import com.sun.imageio.plugins.common.LZWCompressor;
-import com.sun.imageio.plugins.common.PaletteBuilder;
-import sun.awt.image.ByteComponentRaster;
-
-public class GIFImageWriter extends ImageWriter {
-    private static final boolean DEBUG = false; // XXX false for release!
-
-    static final String STANDARD_METADATA_NAME =
-    IIOMetadataFormatImpl.standardMetadataFormatName;
-
-    static final String STREAM_METADATA_NAME =
-    GIFWritableStreamMetadata.NATIVE_FORMAT_NAME;
-
-    static final String IMAGE_METADATA_NAME =
-    GIFWritableImageMetadata.NATIVE_FORMAT_NAME;
-
-    /**
-     * The <code>output</code> case to an <code>ImageOutputStream</code>.
-     */
-    private ImageOutputStream stream = null;
-
-    /**
-     * Whether a sequence is being written.
-     */
-    private boolean isWritingSequence = false;
-
-    /**
-     * Whether the header has been written.
-     */
-    private boolean wroteSequenceHeader = false;
-
-    /**
-     * The stream metadata of a sequence.
-     */
-    private GIFWritableStreamMetadata theStreamMetadata = null;
-
-    /**
-     * The index of the image being written.
-     */
-    private int imageIndex = 0;
-
-    /**
-     * The number of bits represented by the value which should be a
-     * legal length for a color table.
-     */
-    private static int getNumBits(int value) throws IOException {
-        int numBits;
-        switch(value) {
-        case 2:
-            numBits = 1;
-            break;
-        case 4:
-            numBits = 2;
-            break;
-        case 8:
-            numBits = 3;
-            break;
-        case 16:
-            numBits = 4;
-            break;
-        case 32:
-            numBits = 5;
-            break;
-        case 64:
-            numBits = 6;
-            break;
-        case 128:
-            numBits = 7;
-            break;
-        case 256:
-            numBits = 8;
-            break;
-        default:
-            throw new IOException("Bad palette length: "+value+"!");
-        }
-
-        return numBits;
-    }
-
-    /**
-     * Compute the source region and destination dimensions taking any
-     * parameter settings into account.
-     */
-    private static void computeRegions(Rectangle sourceBounds,
-                                       Dimension destSize,
-                                       ImageWriteParam p) {
-        ImageWriteParam param;
-        int periodX = 1;
-        int periodY = 1;
-        if (p != null) {
-            int[] sourceBands = p.getSourceBands();
-            if (sourceBands != null &&
-                (sourceBands.length != 1 ||
-                 sourceBands[0] != 0)) {
-                throw new IllegalArgumentException("Cannot sub-band image!");
-            }
-
-            // Get source region and subsampling factors
-            Rectangle sourceRegion = p.getSourceRegion();
-            if (sourceRegion != null) {
-                // Clip to actual image bounds
-                sourceRegion = sourceRegion.intersection(sourceBounds);
-                sourceBounds.setBounds(sourceRegion);
-            }
-
-            // Adjust for subsampling offsets
-            int gridX = p.getSubsamplingXOffset();
-            int gridY = p.getSubsamplingYOffset();
-            sourceBounds.x += gridX;
-            sourceBounds.y += gridY;
-            sourceBounds.width -= gridX;
-            sourceBounds.height -= gridY;
-
-            // Get subsampling factors
-            periodX = p.getSourceXSubsampling();
-            periodY = p.getSourceYSubsampling();
-        }
-
-        // Compute output dimensions
-        destSize.setSize((sourceBounds.width + periodX - 1)/periodX,
-                         (sourceBounds.height + periodY - 1)/periodY);
-        if (destSize.width <= 0 || destSize.height <= 0) {
-            throw new IllegalArgumentException("Empty source region!");
-        }
-    }
-
-    /**
-     * Create a color table from the image ColorModel and SampleModel.
-     */
-    private static byte[] createColorTable(ColorModel colorModel,
-                                           SampleModel sampleModel)
-    {
-        byte[] colorTable;
-        if (colorModel instanceof IndexColorModel) {
-            IndexColorModel icm = (IndexColorModel)colorModel;
-            int mapSize = icm.getMapSize();
-
-            /**
-             * The GIF image format assumes that size of image palette
-             * is power of two. We will use closest larger power of two
-             * as size of color table.
-             */
-            int ctSize = getGifPaletteSize(mapSize);
-
-            byte[] reds = new byte[ctSize];
-            byte[] greens = new byte[ctSize];
-            byte[] blues = new byte[ctSize];
-            icm.getReds(reds);
-            icm.getGreens(greens);
-            icm.getBlues(blues);
-
-            /**
-             * fill tail of color component arrays by replica of first color
-             * in order to avoid appearance of extra colors in the color table
-             */
-            for (int i = mapSize; i < ctSize; i++) {
-                reds[i] = reds[0];
-                greens[i] = greens[0];
-                blues[i] = blues[0];
-            }
-
-            colorTable = new byte[3*ctSize];
-            int idx = 0;
-            for (int i = 0; i < ctSize; i++) {
-                colorTable[idx++] = reds[i];
-                colorTable[idx++] = greens[i];
-                colorTable[idx++] = blues[i];
-            }
-        } else if (sampleModel.getNumBands() == 1) {
-            // create gray-scaled color table for single-banded images
-            int numBits = sampleModel.getSampleSize()[0];
-            if (numBits > 8) {
-                numBits = 8;
-            }
-            int colorTableLength = 3*(1 << numBits);
-            colorTable = new byte[colorTableLength];
-            for (int i = 0; i < colorTableLength; i++) {
-                colorTable[i] = (byte)(i/3);
-            }
-        } else {
-            // We do not have enough information here
-            // to create well-fit color table for RGB image.
-            colorTable = null;
-        }
-
-        return colorTable;
-    }
-
-    /**
-     * According do GIF specification size of clor table (palette here)
-     * must be in range from 2 to 256 and must be power of 2.
-     */
-    private static int getGifPaletteSize(int x) {
-        if (x <= 2) {
-            return 2;
-        }
-        x = x - 1;
-        x = x | (x >> 1);
-        x = x | (x >> 2);
-        x = x | (x >> 4);
-        x = x | (x >> 8);
-        x = x | (x >> 16);
-        return x + 1;
-    }
-
-
-
-    public GIFImageWriter(GIFImageWriterSpi originatingProvider) {
-        super(originatingProvider);
-        if (DEBUG) {
-            System.err.println("GIF Writer is created");
-        }
-    }
-
-    public boolean canWriteSequence() {
-        return true;
-    }
-
-    /**
-     * Merges <code>inData</code> into <code>outData</code>. The supplied
-     * metadata format name is attempted first and failing that the standard
-     * metadata format name is attempted.
-     */
-    private void convertMetadata(String metadataFormatName,
-                                 IIOMetadata inData,
-                                 IIOMetadata outData) {
-        String formatName = null;
-
-        String nativeFormatName = inData.getNativeMetadataFormatName();
-        if (nativeFormatName != null &&
-            nativeFormatName.equals(metadataFormatName)) {
-            formatName = metadataFormatName;
-        } else {
-            String[] extraFormatNames = inData.getExtraMetadataFormatNames();
-
-            if (extraFormatNames != null) {
-                for (int i = 0; i < extraFormatNames.length; i++) {
-                    if (extraFormatNames[i].equals(metadataFormatName)) {
-                        formatName = metadataFormatName;
-                        break;
-                    }
-                }
-            }
-        }
-
-        if (formatName == null &&
-            inData.isStandardMetadataFormatSupported()) {
-            formatName = STANDARD_METADATA_NAME;
-        }
-
-        if (formatName != null) {
-            try {
-                Node root = inData.getAsTree(formatName);
-                outData.mergeTree(formatName, root);
-            } catch(IIOInvalidTreeException e) {
-                // ignore
-            }
-        }
-    }
-
-    /**
-     * Creates a default stream metadata object and merges in the
-     * supplied metadata.
-     */
-    public IIOMetadata convertStreamMetadata(IIOMetadata inData,
-                                             ImageWriteParam param) {
-        if (inData == null) {
-            throw new IllegalArgumentException("inData == null!");
-        }
-
-        IIOMetadata sm = getDefaultStreamMetadata(param);
-
-        convertMetadata(STREAM_METADATA_NAME, inData, sm);
-
-        return sm;
-    }
-
-    /**
-     * Creates a default image metadata object and merges in the
-     * supplied metadata.
-     */
-    public IIOMetadata convertImageMetadata(IIOMetadata inData,
-                                            ImageTypeSpecifier imageType,
-                                            ImageWriteParam param) {
-        if (inData == null) {
-            throw new IllegalArgumentException("inData == null!");
-        }
-        if (imageType == null) {
-            throw new IllegalArgumentException("imageType == null!");
-        }
-
-        GIFWritableImageMetadata im =
-            (GIFWritableImageMetadata)getDefaultImageMetadata(imageType,
-                                                              param);
-
-        // Save interlace flag state.
-
-        boolean isProgressive = im.interlaceFlag;
-
-        convertMetadata(IMAGE_METADATA_NAME, inData, im);
-
-        // Undo change to interlace flag if not MODE_COPY_FROM_METADATA.
-
-        if (param != null && param.canWriteProgressive() &&
-            param.getProgressiveMode() != param.MODE_COPY_FROM_METADATA) {
-            im.interlaceFlag = isProgressive;
-        }
-
-        return im;
-    }
-
-    public void endWriteSequence() throws IOException {
-        if (stream == null) {
-            throw new IllegalStateException("output == null!");
-        }
-        if (!isWritingSequence) {
-            throw new IllegalStateException("prepareWriteSequence() was not invoked!");
-        }
-        writeTrailer();
-        resetLocal();
-    }
-
-    public IIOMetadata getDefaultImageMetadata(ImageTypeSpecifier imageType,
-                                               ImageWriteParam param) {
-        GIFWritableImageMetadata imageMetadata =
-            new GIFWritableImageMetadata();
-
-        // Image dimensions
-
-        SampleModel sampleModel = imageType.getSampleModel();
-
-        Rectangle sourceBounds = new Rectangle(sampleModel.getWidth(),
-                                               sampleModel.getHeight());
-        Dimension destSize = new Dimension();
-        computeRegions(sourceBounds, destSize, param);
-
-        imageMetadata.imageWidth = destSize.width;
-        imageMetadata.imageHeight = destSize.height;
-
-        // Interlacing
-
-        if (param != null && param.canWriteProgressive() &&
-            param.getProgressiveMode() == ImageWriteParam.MODE_DISABLED) {
-            imageMetadata.interlaceFlag = false;
-        } else {
-            imageMetadata.interlaceFlag = true;
-        }
-
-        // Local color table
-
-        ColorModel colorModel = imageType.getColorModel();
-
-        imageMetadata.localColorTable =
-            createColorTable(colorModel, sampleModel);
-
-        // Transparency
-
-        if (colorModel instanceof IndexColorModel) {
-            int transparentIndex =
-                ((IndexColorModel)colorModel).getTransparentPixel();
-            if (transparentIndex != -1) {
-                imageMetadata.transparentColorFlag = true;
-                imageMetadata.transparentColorIndex = transparentIndex;
-            }
-        }
-
-        return imageMetadata;
-    }
-
-    public IIOMetadata getDefaultStreamMetadata(ImageWriteParam param) {
-        GIFWritableStreamMetadata streamMetadata =
-            new GIFWritableStreamMetadata();
-        streamMetadata.version = "89a";
-        return streamMetadata;
-    }
-
-    public ImageWriteParam getDefaultWriteParam() {
-        return new GIFImageWriteParam(getLocale());
-    }
-
-    public void prepareWriteSequence(IIOMetadata streamMetadata)
-      throws IOException {
-
-        if (stream == null) {
-            throw new IllegalStateException("Output is not set.");
-        }
-
-        resetLocal();
-
-        // Save the possibly converted stream metadata as an instance variable.
-        if (streamMetadata == null) {
-            this.theStreamMetadata =
-                (GIFWritableStreamMetadata)getDefaultStreamMetadata(null);
-        } else {
-            this.theStreamMetadata = new GIFWritableStreamMetadata();
-            convertMetadata(STREAM_METADATA_NAME, streamMetadata,
-                            theStreamMetadata);
-        }
-
-        this.isWritingSequence = true;
-    }
-
-    public void reset() {
-        super.reset();
-        resetLocal();
-    }
-
-    /**
-     * Resets locally defined instance variables.
-     */
-    private void resetLocal() {
-        this.isWritingSequence = false;
-        this.wroteSequenceHeader = false;
-        this.theStreamMetadata = null;
-        this.imageIndex = 0;
-    }
-
-    public void setOutput(Object output) {
-        super.setOutput(output);
-        if (output != null) {
-            if (!(output instanceof ImageOutputStream)) {
-                throw new
-                    IllegalArgumentException("output is not an ImageOutputStream");
-            }
-            this.stream = (ImageOutputStream)output;
-            this.stream.setByteOrder(ByteOrder.LITTLE_ENDIAN);
-        } else {
-            this.stream = null;
-        }
-    }
-
-    public void write(IIOMetadata sm,
-                      IIOImage iioimage,
-                      ImageWriteParam p) throws IOException {
-        if (stream == null) {
-            throw new IllegalStateException("output == null!");
-        }
-        if (iioimage == null) {
-            throw new IllegalArgumentException("iioimage == null!");
-        }
-        if (iioimage.hasRaster()) {
-            throw new UnsupportedOperationException("canWriteRasters() == false!");
-        }
-
-        resetLocal();
-
-        GIFWritableStreamMetadata streamMetadata;
-        if (sm == null) {
-            streamMetadata =
-                (GIFWritableStreamMetadata)getDefaultStreamMetadata(p);
-        } else {
-            streamMetadata =
-                (GIFWritableStreamMetadata)convertStreamMetadata(sm, p);
-        }
-
-        write(true, true, streamMetadata, iioimage, p);
-    }
-
-    public void writeToSequence(IIOImage image, ImageWriteParam param)
-      throws IOException {
-        if (stream == null) {
-            throw new IllegalStateException("output == null!");
-        }
-        if (image == null) {
-            throw new IllegalArgumentException("image == null!");
-        }
-        if (image.hasRaster()) {
-            throw new UnsupportedOperationException("canWriteRasters() == false!");
-        }
-        if (!isWritingSequence) {
-            throw new IllegalStateException("prepareWriteSequence() was not invoked!");
-        }
-
-        write(!wroteSequenceHeader, false, theStreamMetadata,
-              image, param);
-
-        if (!wroteSequenceHeader) {
-            wroteSequenceHeader = true;
-        }
-
-        this.imageIndex++;
-    }
-
-
-    private boolean needToCreateIndex(RenderedImage image) {
-
-        SampleModel sampleModel = image.getSampleModel();
-        ColorModel colorModel = image.getColorModel();
-
-        return sampleModel.getNumBands() != 1 ||
-            sampleModel.getSampleSize()[0] > 8 ||
-            colorModel.getComponentSize()[0] > 8;
-    }
-
-    /**
-     * Writes any extension blocks, the Image Descriptor, the image data,
-     * and optionally the header (Signature and Logical Screen Descriptor)
-     * and trailer (Block Terminator).
-     *
-     * @param writeHeader Whether to write the header.
-     * @param writeTrailer Whether to write the trailer.
-     * @param sm The stream metadata or <code>null</code> if
-     * <code>writeHeader</code> is <code>false</code>.
-     * @param iioimage The image and image metadata.
-     * @param p The write parameters.
-     *
-     * @throws IllegalArgumentException if the number of bands is not 1.
-     * @throws IllegalArgumentException if the number of bits per sample is
-     * greater than 8.
-     * @throws IllegalArgumentException if the color component size is
-     * greater than 8.
-     * @throws IllegalArgumentException if <code>writeHeader</code> is
-     * <code>true</code> and <code>sm</code> is <code>null</code>.
-     * @throws IllegalArgumentException if <code>writeHeader</code> is
-     * <code>false</code> and a sequence is not being written.
-     */
-    private void write(boolean writeHeader,
-                       boolean writeTrailer,
-                       IIOMetadata sm,
-                       IIOImage iioimage,
-                       ImageWriteParam p) throws IOException {
-        clearAbortRequest();
-
-        RenderedImage image = iioimage.getRenderedImage();
-
-        // Check for ability to encode image.
-        if (needToCreateIndex(image)) {
-            image = PaletteBuilder.createIndexedImage(image);
-            iioimage.setRenderedImage(image);
-        }
-
-        ColorModel colorModel = image.getColorModel();
-        SampleModel sampleModel = image.getSampleModel();
-
-        // Determine source region and destination dimensions.
-        Rectangle sourceBounds = new Rectangle(image.getMinX(),
-                                               image.getMinY(),
-                                               image.getWidth(),
-                                               image.getHeight());
-        Dimension destSize = new Dimension();
-        computeRegions(sourceBounds, destSize, p);
-
-        // Convert any provided image metadata.
-        GIFWritableImageMetadata imageMetadata = null;
-        if (iioimage.getMetadata() != null) {
-            imageMetadata = new GIFWritableImageMetadata();
-            convertMetadata(IMAGE_METADATA_NAME, iioimage.getMetadata(),
-                            imageMetadata);
-            // Converted rgb image can use palette different from global.
-            // In order to avoid color artefacts we want to be sure we use
-            // appropriate palette. For this we initialize local color table
-            // from current color and sample models.
-            // At this point we can guarantee that local color table can be
-            // build because image was already converted to indexed or
-            // gray-scale representations
-            if (imageMetadata.localColorTable == null) {
-                imageMetadata.localColorTable =
-                    createColorTable(colorModel, sampleModel);
-
-                // in case of indexed image we should take care of
-                // transparent pixels
-                if (colorModel instanceof IndexColorModel) {
-                    IndexColorModel icm =
-                        (IndexColorModel)colorModel;
-                    int index = icm.getTransparentPixel();
-                    imageMetadata.transparentColorFlag = (index != -1);
-                    if (imageMetadata.transparentColorFlag) {
-                        imageMetadata.transparentColorIndex = index;
-                    }
-                    /* NB: transparentColorFlag might have not beed reset for
-                       greyscale images but explicitly reseting it here
-                       is potentially not right thing to do until we have way
-                       to find whether current value was explicitly set by
-                       the user.
-                    */
-                }
-            }
-        }
-
-        // Global color table values.
-        byte[] globalColorTable = null;
-
-        // Write the header (Signature+Logical Screen Descriptor+
-        // Global Color Table).
-        if (writeHeader) {
-            if (sm == null) {
-                throw new IllegalArgumentException("Cannot write null header!");
-            }
-
-            GIFWritableStreamMetadata streamMetadata =
-                (GIFWritableStreamMetadata)sm;
-
-            // Set the version if not set.
-            if (streamMetadata.version == null) {
-                streamMetadata.version = "89a";
-            }
-
-            // Set the Logical Screen Desriptor if not set.
-            if (streamMetadata.logicalScreenWidth ==
-                GIFMetadata.UNDEFINED_INTEGER_VALUE)
-            {
-                streamMetadata.logicalScreenWidth = destSize.width;
-            }
-
-            if (streamMetadata.logicalScreenHeight ==
-                GIFMetadata.UNDEFINED_INTEGER_VALUE)
-            {
-                streamMetadata.logicalScreenHeight = destSize.height;
-            }
-
-            if (streamMetadata.colorResolution ==
-                GIFMetadata.UNDEFINED_INTEGER_VALUE)
-            {
-                streamMetadata.colorResolution = colorModel != null ?
-                    colorModel.getComponentSize()[0] :
-                    sampleModel.getSampleSize()[0];
-            }
-
-            // Set the Global Color Table if not set, i.e., if not
-            // provided in the stream metadata.
-            if (streamMetadata.globalColorTable == null) {
-                if (isWritingSequence && imageMetadata != null &&
-                    imageMetadata.localColorTable != null) {
-                    // Writing a sequence and a local color table was
-                    // provided in the metadata of the first image: use it.
-                    streamMetadata.globalColorTable =
-                        imageMetadata.localColorTable;
-                } else if (imageMetadata == null ||
-                           imageMetadata.localColorTable == null) {
-                    // Create a color table.
-                    streamMetadata.globalColorTable =
-                        createColorTable(colorModel, sampleModel);
-                }
-            }
-
-            // Set the Global Color Table. At this point it should be
-            // A) the global color table provided in stream metadata, if any;
-            // B) the local color table of the image metadata, if any, if
-            //    writing a sequence;
-            // C) a table created on the basis of the first image ColorModel
-            //    and SampleModel if no local color table is available; or
-            // D) null if none of the foregoing conditions obtain (which
-            //    should only be if a sequence is not being written and
-            //    a local color table is provided in image metadata).
-            globalColorTable = streamMetadata.globalColorTable;
-
-            // Write the header.
-            int bitsPerPixel;
-            if (globalColorTable != null) {
-                bitsPerPixel = getNumBits(globalColorTable.length/3);
-            } else if (imageMetadata != null &&
-                       imageMetadata.localColorTable != null) {
-                bitsPerPixel =
-                    getNumBits(imageMetadata.localColorTable.length/3);
-            } else {
-                bitsPerPixel = sampleModel.getSampleSize(0);
-            }
-            writeHeader(streamMetadata, bitsPerPixel);
-        } else if (isWritingSequence) {
-            globalColorTable = theStreamMetadata.globalColorTable;
-        } else {
-            throw new IllegalArgumentException("Must write header for single image!");
-        }
-
-        // Write extension blocks, Image Descriptor, and image data.
-        writeImage(iioimage.getRenderedImage(), imageMetadata, p,
-                   globalColorTable, sourceBounds, destSize);
-
-        // Write the trailer.
-        if (writeTrailer) {
-            writeTrailer();
-        }
-    }
-
-    /**
-     * Writes any extension blocks, the Image Descriptor, and the image data
-     *
-     * @param iioimage The image and image metadata.
-     * @param param The write parameters.
-     * @param globalColorTable The Global Color Table.
-     * @param sourceBounds The source region.
-     * @param destSize The destination dimensions.
-     */
-    private void writeImage(RenderedImage image,
-                            GIFWritableImageMetadata imageMetadata,
-                            ImageWriteParam param, byte[] globalColorTable,
-                            Rectangle sourceBounds, Dimension destSize)
-      throws IOException {
-        ColorModel colorModel = image.getColorModel();
-        SampleModel sampleModel = image.getSampleModel();
-
-        boolean writeGraphicsControlExtension;
-        if (imageMetadata == null) {
-            // Create default metadata.
-            imageMetadata = (GIFWritableImageMetadata)getDefaultImageMetadata(
-                new ImageTypeSpecifier(image), param);
-
-            // Set GraphicControlExtension flag only if there is
-            // transparency.
-            writeGraphicsControlExtension = imageMetadata.transparentColorFlag;
-        } else {
-            // Check for GraphicControlExtension element.
-            NodeList list = null;
-            try {
-                IIOMetadataNode root = (IIOMetadataNode)
-                    imageMetadata.getAsTree(IMAGE_METADATA_NAME);
-                list = root.getElementsByTagName("GraphicControlExtension");
-            } catch(IllegalArgumentException iae) {
-                // Should never happen.
-            }
-
-            // Set GraphicControlExtension flag if element present.
-            writeGraphicsControlExtension =
-                list != null && list.getLength() > 0;
-
-            // If progressive mode is not MODE_COPY_FROM_METADATA, ensure
-            // the interlacing is set per the ImageWriteParam mode setting.
-            if (param != null && param.canWriteProgressive()) {
-                if (param.getProgressiveMode() ==
-                    ImageWriteParam.MODE_DISABLED) {
-                    imageMetadata.interlaceFlag = false;
-                } else if (param.getProgressiveMode() ==
-                           ImageWriteParam.MODE_DEFAULT) {
-                    imageMetadata.interlaceFlag = true;
-                }
-            }
-        }
-
-        // Unset local color table if equal to global color table.
-        if (Arrays.equals(globalColorTable, imageMetadata.localColorTable)) {
-            imageMetadata.localColorTable = null;
-        }
-
-        // Override dimensions
-        imageMetadata.imageWidth = destSize.width;
-        imageMetadata.imageHeight = destSize.height;
-
-        // Write Graphics Control Extension.
-        if (writeGraphicsControlExtension) {
-            writeGraphicControlExtension(imageMetadata);
-        }
-
-        // Write extension blocks.
-        writePlainTextExtension(imageMetadata);
-        writeApplicationExtension(imageMetadata);
-        writeCommentExtension(imageMetadata);
-
-        // Write Image Descriptor
-        int bitsPerPixel =
-            getNumBits(imageMetadata.localColorTable == null ?
-                       (globalColorTable == null ?
-                        sampleModel.getSampleSize(0) :
-                        globalColorTable.length/3) :
-                       imageMetadata.localColorTable.length/3);
-        writeImageDescriptor(imageMetadata, bitsPerPixel);
-
-        // Write image data
-        writeRasterData(image, sourceBounds, destSize,
-                        param, imageMetadata.interlaceFlag);
-    }
-
-    private void writeRows(RenderedImage image, LZWCompressor compressor,
-                           int sx, int sdx, int sy, int sdy, int sw,
-                           int dy, int ddy, int dw, int dh,
-                           int numRowsWritten, int progressReportRowPeriod)
-      throws IOException {
-        if (DEBUG) System.out.println("Writing unoptimized");
-
-        int[] sbuf = new int[sw];
-        byte[] dbuf = new byte[dw];
-
-        Raster raster =
-            image.getNumXTiles() == 1 && image.getNumYTiles() == 1 ?
-            image.getTile(0, 0) : image.getData();
-        for (int y = dy; y < dh; y += ddy) {
-            if (numRowsWritten % progressReportRowPeriod == 0) {
-                if (abortRequested()) {
-                    processWriteAborted();
-                    return;
-                }
-                processImageProgress((numRowsWritten*100.0F)/dh);
-            }
-
-            raster.getSamples(sx, sy, sw, 1, 0, sbuf);
-            for (int i = 0, j = 0; i < dw; i++, j += sdx) {
-                dbuf[i] = (byte)sbuf[j];
-            }
-            compressor.compress(dbuf, 0, dw);
-            numRowsWritten++;
-            sy += sdy;
-        }
-    }
-
-    private void writeRowsOpt(byte[] data, int offset, int lineStride,
-                              LZWCompressor compressor,
-                              int dy, int ddy, int dw, int dh,
-                              int numRowsWritten, int progressReportRowPeriod)
-      throws IOException {
-        if (DEBUG) System.out.println("Writing optimized");
-
-        offset += dy*lineStride;
-        lineStride *= ddy;
-        for (int y = dy; y < dh; y += ddy) {
-            if (numRowsWritten % progressReportRowPeriod == 0) {
-                if (abortRequested()) {
-                    processWriteAborted();
-                    return;
-                }
-                processImageProgress((numRowsWritten*100.0F)/dh);
-            }
-
-            compressor.compress(data, offset, dw);
-            numRowsWritten++;
-            offset += lineStride;
-        }
-    }
-
-    private void writeRasterData(RenderedImage image,
-                                 Rectangle sourceBounds,
-                                 Dimension destSize,
-                                 ImageWriteParam param,
-                                 boolean interlaceFlag) throws IOException {
-
-        int sourceXOffset = sourceBounds.x;
-        int sourceYOffset = sourceBounds.y;
-        int sourceWidth = sourceBounds.width;
-        int sourceHeight = sourceBounds.height;
-
-        int destWidth = destSize.width;
-        int destHeight = destSize.height;
-
-        int periodX;
-        int periodY;
-        if (param == null) {
-            periodX = 1;
-            periodY = 1;
-        } else {
-            periodX = param.getSourceXSubsampling();
-            periodY = param.getSourceYSubsampling();
-        }
-
-        SampleModel sampleModel = image.getSampleModel();
-        int bitsPerPixel = sampleModel.getSampleSize()[0];
-
-        int initCodeSize = bitsPerPixel;
-        if (initCodeSize == 1) {
-            initCodeSize++;
-        }
-        stream.write(initCodeSize);
-
-        LZWCompressor compressor =
-            new LZWCompressor(stream, initCodeSize, false);
-
-        /* At this moment we know that input image is indexed image.
-         * We can directly copy data iff:
-         *   - no subsampling required (periodX = 1, periodY = 0)
-         *   - we can access data directly (image is non-tiled,
-         *     i.e. image data are in single block)
-         *   - we can calculate offset in data buffer (next 3 lines)
-         */
-        boolean isOptimizedCase =
-            periodX == 1 && periodY == 1 &&
-            image.getNumXTiles() == 1 && image.getNumYTiles() == 1 &&
-            sampleModel instanceof ComponentSampleModel &&
-            image.getTile(0, 0) instanceof ByteComponentRaster &&
-            image.getTile(0, 0).getDataBuffer() instanceof DataBufferByte;
-
-        int numRowsWritten = 0;
-
-        int progressReportRowPeriod = Math.max(destHeight/20, 1);
-
-        processImageStarted(imageIndex);
-
-        if (interlaceFlag) {
-            if (DEBUG) System.out.println("Writing interlaced");
-
-            if (isOptimizedCase) {
-                ByteComponentRaster tile =
-                    (ByteComponentRaster)image.getTile(0, 0);
-                byte[] data = ((DataBufferByte)tile.getDataBuffer()).getData();
-                ComponentSampleModel csm =
-                    (ComponentSampleModel)tile.getSampleModel();
-                int offset = csm.getOffset(sourceXOffset, sourceYOffset, 0);
-                // take into account the raster data offset
-                offset += tile.getDataOffset(0);
-                int lineStride = csm.getScanlineStride();
-
-                writeRowsOpt(data, offset, lineStride, compressor,
-                             0, 8, destWidth, destHeight,
-                             numRowsWritten, progressReportRowPeriod);
-
-                if (abortRequested()) {
-                    return;
-                }
-
-                numRowsWritten += destHeight/8;
-
-                writeRowsOpt(data, offset, lineStride, compressor,
-                             4, 8, destWidth, destHeight,
-                             numRowsWritten, progressReportRowPeriod);
-
-                if (abortRequested()) {
-                    return;
-                }
-
-                numRowsWritten += (destHeight - 4)/8;
-
-                writeRowsOpt(data, offset, lineStride, compressor,
-                             2, 4, destWidth, destHeight,
-                             numRowsWritten, progressReportRowPeriod);
-
-                if (abortRequested()) {
-                    return;
-                }
-
-                numRowsWritten += (destHeight - 2)/4;
-
-                writeRowsOpt(data, offset, lineStride, compressor,
-                             1, 2, destWidth, destHeight,
-                             numRowsWritten, progressReportRowPeriod);
-            } else {
-                writeRows(image, compressor,
-                          sourceXOffset, periodX,
-                          sourceYOffset, 8*periodY,
-                          sourceWidth,
-                          0, 8, destWidth, destHeight,
-                          numRowsWritten, progressReportRowPeriod);
-
-                if (abortRequested()) {
-                    return;
-                }
-
-                numRowsWritten += destHeight/8;
-
-                writeRows(image, compressor, sourceXOffset, periodX,
-                          sourceYOffset + 4*periodY, 8*periodY,
-                          sourceWidth,
-                          4, 8, destWidth, destHeight,
-                          numRowsWritten, progressReportRowPeriod);
-
-                if (abortRequested()) {
-                    return;
-                }
-
-                numRowsWritten += (destHeight - 4)/8;
-
-                writeRows(image, compressor, sourceXOffset, periodX,
-                          sourceYOffset + 2*periodY, 4*periodY,
-                          sourceWidth,
-                          2, 4, destWidth, destHeight,
-                          numRowsWritten, progressReportRowPeriod);
-
-                if (abortRequested()) {
-                    return;
-                }
-
-                numRowsWritten += (destHeight - 2)/4;
-
-                writeRows(image, compressor, sourceXOffset, periodX,
-                          sourceYOffset + periodY, 2*periodY,
-                          sourceWidth,
-                          1, 2, destWidth, destHeight,
-                          numRowsWritten, progressReportRowPeriod);
-            }
-        } else {
-            if (DEBUG) System.out.println("Writing non-interlaced");
-
-            if (isOptimizedCase) {
-                Raster tile = image.getTile(0, 0);
-                byte[] data = ((DataBufferByte)tile.getDataBuffer()).getData();
-                ComponentSampleModel csm =
-                    (ComponentSampleModel)tile.getSampleModel();
-                int offset = csm.getOffset(sourceXOffset, sourceYOffset, 0);
-                int lineStride = csm.getScanlineStride();
-
-                writeRowsOpt(data, offset, lineStride, compressor,
-                             0, 1, destWidth, destHeight,
-                             numRowsWritten, progressReportRowPeriod);
-            } else {
-                writeRows(image, compressor,
-                          sourceXOffset, periodX,
-                          sourceYOffset, periodY,
-                          sourceWidth,
-                          0, 1, destWidth, destHeight,
-                          numRowsWritten, progressReportRowPeriod);
-            }
-        }
-
-        if (abortRequested()) {
-            return;
-        }
-
-        processImageProgress(100.0F);
-
-        compressor.flush();
-
-        stream.write(0x00);
-
-        processImageComplete();
-    }
-
-    private void writeHeader(String version,
-                             int logicalScreenWidth,
-                             int logicalScreenHeight,
-                             int colorResolution,
-                             int pixelAspectRatio,
-                             int backgroundColorIndex,
-                             boolean sortFlag,
-                             int bitsPerPixel,
-                             byte[] globalColorTable) throws IOException {
-        try {
-            // Signature
-            stream.writeBytes("GIF"+version);
-
-            // Screen Descriptor
-            // Width
-            stream.writeShort((short)logicalScreenWidth);
-
-            // Height
-            stream.writeShort((short)logicalScreenHeight);
-
-            // Global Color Table
-            // Packed fields
-            int packedFields = globalColorTable != null ? 0x80 : 0x00;
-            packedFields |= ((colorResolution - 1) & 0x7) << 4;
-            if (sortFlag) {
-                packedFields |= 0x8;
-            }
-            packedFields |= (bitsPerPixel - 1);
-            stream.write(packedFields);
-
-            // Background color index
-            stream.write(backgroundColorIndex);
-
-            // Pixel aspect ratio
-            stream.write(pixelAspectRatio);
-
-            // Global Color Table
-            if (globalColorTable != null) {
-                stream.write(globalColorTable);
-            }
-        } catch (IOException e) {
-            throw new IIOException("I/O error writing header!", e);
-        }
-    }
-
-    private void writeHeader(IIOMetadata streamMetadata, int bitsPerPixel)
-      throws IOException {
-
-        GIFWritableStreamMetadata sm;
-        if (streamMetadata instanceof GIFWritableStreamMetadata) {
-            sm = (GIFWritableStreamMetadata)streamMetadata;
-        } else {
-            sm = new GIFWritableStreamMetadata();
-            Node root =
-                streamMetadata.getAsTree(STREAM_METADATA_NAME);
-            sm.setFromTree(STREAM_METADATA_NAME, root);
-        }
-
-        writeHeader(sm.version,
-                    sm.logicalScreenWidth,
-                    sm.logicalScreenHeight,
-                    sm.colorResolution,
-                    sm.pixelAspectRatio,
-                    sm.backgroundColorIndex,
-                    sm.sortFlag,
-                    bitsPerPixel,
-                    sm.globalColorTable);
-    }
-
-    private void writeGraphicControlExtension(int disposalMethod,
-                                              boolean userInputFlag,
-                                              boolean transparentColorFlag,
-                                              int delayTime,
-                                              int transparentColorIndex)
-      throws IOException {
-        try {
-            stream.write(0x21);
-            stream.write(0xf9);
-
-            stream.write(4);
-
-            int packedFields = (disposalMethod & 0x3) << 2;
-            if (userInputFlag) {
-                packedFields |= 0x2;
-            }
-            if (transparentColorFlag) {
-                packedFields |= 0x1;
-            }
-            stream.write(packedFields);
-
-            stream.writeShort((short)delayTime);
-
-            stream.write(transparentColorIndex);
-            stream.write(0x00);
-        } catch (IOException e) {
-            throw new IIOException("I/O error writing Graphic Control Extension!", e);
-        }
-    }
-
-    private void writeGraphicControlExtension(GIFWritableImageMetadata im)
-      throws IOException {
-        writeGraphicControlExtension(im.disposalMethod,
-                                     im.userInputFlag,
-                                     im.transparentColorFlag,
-                                     im.delayTime,
-                                     im.transparentColorIndex);
-    }
-
-    private void writeBlocks(byte[] data) throws IOException {
-        if (data != null && data.length > 0) {
-            int offset = 0;
-            while (offset < data.length) {
-                int len = Math.min(data.length - offset, 255);
-                stream.write(len);
-                stream.write(data, offset, len);
-                offset += len;
-            }
-        }
-    }
-
-    private void writePlainTextExtension(GIFWritableImageMetadata im)
-      throws IOException {
-        if (im.hasPlainTextExtension) {
-            try {
-                stream.write(0x21);
-                stream.write(0x1);
-
-                stream.write(12);
-
-                stream.writeShort(im.textGridLeft);
-                stream.writeShort(im.textGridTop);
-                stream.writeShort(im.textGridWidth);
-                stream.writeShort(im.textGridHeight);
-                stream.write(im.characterCellWidth);
-                stream.write(im.characterCellHeight);
-                stream.write(im.textForegroundColor);
-                stream.write(im.textBackgroundColor);
-
-                writeBlocks(im.text);
-
-                stream.write(0x00);
-            } catch (IOException e) {
-                throw new IIOException("I/O error writing Plain Text Extension!", e);
-            }
-        }
-    }
-
-    private void writeApplicationExtension(GIFWritableImageMetadata im)
-      throws IOException {
-        if (im.applicationIDs != null) {
-            Iterator iterIDs = im.applicationIDs.iterator();
-            Iterator iterCodes = im.authenticationCodes.iterator();
-            Iterator iterData = im.applicationData.iterator();
-
-            while (iterIDs.hasNext()) {
-                try {
-                    stream.write(0x21);
-                    stream.write(0xff);
-
-                    stream.write(11);
-                    stream.write((byte[])iterIDs.next(), 0, 8);
-                    stream.write((byte[])iterCodes.next(), 0, 3);
-
-                    writeBlocks((byte[])iterData.next());
-
-                    stream.write(0x00);
-                } catch (IOException e) {
-                    throw new IIOException("I/O error writing Application Extension!", e);
-                }
-            }
-        }
-    }
-
-    private void writeCommentExtension(GIFWritableImageMetadata im)
-      throws IOException {
-        if (im.comments != null) {
-            try {
-                Iterator iter = im.comments.iterator();
-                while (iter.hasNext()) {
-                    stream.write(0x21);
-                    stream.write(0xfe);
-                    writeBlocks((byte[])iter.next());
-                    stream.write(0x00);
-                }
-            } catch (IOException e) {
-                throw new IIOException("I/O error writing Comment Extension!", e);
-            }
-        }
-    }
-
-    private void writeImageDescriptor(int imageLeftPosition,
-                                      int imageTopPosition,
-                                      int imageWidth,
-                                      int imageHeight,
-                                      boolean interlaceFlag,
-                                      boolean sortFlag,
-                                      int bitsPerPixel,
-                                      byte[] localColorTable)
-      throws IOException {
-
-        try {
-            stream.write(0x2c);
-
-            stream.writeShort((short)imageLeftPosition);
-            stream.writeShort((short)imageTopPosition);
-            stream.writeShort((short)imageWidth);
-            stream.writeShort((short)imageHeight);
-
-            int packedFields = localColorTable != null ? 0x80 : 0x00;
-            if (interlaceFlag) {
-                packedFields |= 0x40;
-            }
-            if (sortFlag) {
-                packedFields |= 0x8;
-            }
-            packedFields |= (bitsPerPixel - 1);
-            stream.write(packedFields);
-
-            if (localColorTable != null) {
-                stream.write(localColorTable);
-            }
-        } catch (IOException e) {
-            throw new IIOException("I/O error writing Image Descriptor!", e);
-        }
-    }
-
-    private void writeImageDescriptor(GIFWritableImageMetadata imageMetadata,
-                                      int bitsPerPixel)
-      throws IOException {
-
-        writeImageDescriptor(imageMetadata.imageLeftPosition,
-                             imageMetadata.imageTopPosition,
-                             imageMetadata.imageWidth,
-                             imageMetadata.imageHeight,
-                             imageMetadata.interlaceFlag,
-                             imageMetadata.sortFlag,
-                             bitsPerPixel,
-                             imageMetadata.localColorTable);
-    }
-
-    private void writeTrailer() throws IOException {
-        stream.write(0x3b);
-    }
-}
-
-class GIFImageWriteParam extends ImageWriteParam {
-    GIFImageWriteParam(Locale locale) {
-        super(locale);
-        this.canWriteCompressed = true;
-        this.canWriteProgressive = true;
-        this.compressionTypes = new String[] {"LZW", "lzw"};
-        this.compressionType = compressionTypes[0];
-    }
-
-    public void setCompressionMode(int mode) {
-        if (mode == MODE_DISABLED) {
-            throw new UnsupportedOperationException("MODE_DISABLED is not supported.");
-        }
-        super.setCompressionMode(mode);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/plugins/gif/GIFImageWriterSpi.java b/ojluni/src/main/java/com/sun/imageio/plugins/gif/GIFImageWriterSpi.java
deleted file mode 100755
index 4f27ed9..0000000
--- a/ojluni/src/main/java/com/sun/imageio/plugins/gif/GIFImageWriterSpi.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Copyright (c) 2005, 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
- * 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.imageio.plugins.gif;
-
-import java.awt.image.ColorModel;
-import java.awt.image.SampleModel;
-import java.util.Locale;
-import javax.imageio.ImageTypeSpecifier;
-import javax.imageio.ImageWriter;
-import javax.imageio.spi.ImageWriterSpi;
-import javax.imageio.stream.ImageOutputStream;
-import com.sun.imageio.plugins.common.PaletteBuilder;
-
-public class GIFImageWriterSpi extends ImageWriterSpi {
-
-    private static final String vendorName = "Oracle Corporation";
-
-    private static final String version = "1.0";
-
-    private static final String[] names = { "gif", "GIF" };
-
-    private static final String[] suffixes = { "gif" };
-
-    private static final String[] MIMETypes = { "image/gif" };
-
-    private static final String writerClassName =
-    "com.sun.imageio.plugins.gif.GIFImageWriter";
-
-    private static final String[] readerSpiNames = {
-        "com.sun.imageio.plugins.gif.GIFImageReaderSpi"
-    };
-
-    public GIFImageWriterSpi() {
-        super(vendorName,
-              version,
-              names,
-              suffixes,
-              MIMETypes,
-              writerClassName,
-              new Class[] { ImageOutputStream.class },
-              readerSpiNames,
-              true,
-              GIFWritableStreamMetadata.NATIVE_FORMAT_NAME,
-              "com.sun.imageio.plugins.gif.GIFStreamMetadataFormat",
-              null, null,
-              true,
-              GIFWritableImageMetadata.NATIVE_FORMAT_NAME,
-              "com.sun.imageio.plugins.gif.GIFImageMetadataFormat",
-              null, null
-              );
-    }
-
-    public boolean canEncodeImage(ImageTypeSpecifier type) {
-        if (type == null) {
-            throw new IllegalArgumentException("type == null!");
-        }
-
-        SampleModel sm = type.getSampleModel();
-        ColorModel cm = type.getColorModel();
-
-        boolean canEncode = sm.getNumBands() == 1 &&
-            sm.getSampleSize(0) <= 8 &&
-            sm.getWidth() <= 65535 &&
-            sm.getHeight() <= 65535 &&
-            (cm == null || cm.getComponentSize()[0] <= 8);
-
-        if (canEncode) {
-            return true;
-        } else {
-            return PaletteBuilder.canCreatePalette(type);
-        }
-    }
-
-    public String getDescription(Locale locale) {
-        return "Standard GIF image writer";
-    }
-
-    public ImageWriter createWriterInstance(Object extension) {
-        return new GIFImageWriter(this);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/plugins/gif/GIFMetadata.java b/ojluni/src/main/java/com/sun/imageio/plugins/gif/GIFMetadata.java
deleted file mode 100755
index 7e03f0f..0000000
--- a/ojluni/src/main/java/com/sun/imageio/plugins/gif/GIFMetadata.java
+++ /dev/null
@@ -1,317 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-package com.sun.imageio.plugins.gif;
-
-import javax.imageio.metadata.IIOInvalidTreeException;
-import javax.imageio.metadata.IIOMetadata;
-import javax.imageio.metadata.IIOMetadataFormatImpl;
-import org.w3c.dom.Node;
-
-/**
- * Class which adds utility DOM element attribute access methods to
- * <code>IIOMetadata</code> for subclass use.
- */
-abstract class GIFMetadata extends IIOMetadata {
-
-    /**
-     * Represents an undefined value of integer attributes.
-     */
-    static final int UNDEFINED_INTEGER_VALUE = -1;
-
-    //
-    // Note: These attribute methods were shamelessly lifted from
-    // com.sun.imageio.plugins.png.PNGMetadata and modified.
-    //
-
-    // Shorthand for throwing an IIOInvalidTreeException
-    protected static void fatal(Node node, String reason)
-      throws IIOInvalidTreeException {
-        throw new IIOInvalidTreeException(reason, node);
-    }
-
-    // Get an integer-valued attribute
-    protected static String getStringAttribute(Node node, String name,
-                                               String defaultValue,
-                                               boolean required,
-                                               String[] range)
-      throws IIOInvalidTreeException {
-        Node attr = node.getAttributes().getNamedItem(name);
-        if (attr == null) {
-            if (!required) {
-                return defaultValue;
-            } else {
-                fatal(node, "Required attribute " + name + " not present!");
-            }
-        }
-        String value = attr.getNodeValue();
-
-        if (range != null) {
-            if (value == null) {
-                fatal(node,
-                      "Null value for "+node.getNodeName()+
-                      " attribute "+name+"!");
-            }
-            boolean validValue = false;
-            int len = range.length;
-            for (int i = 0; i < len; i++) {
-                if (value.equals(range[i])) {
-                    validValue = true;
-                    break;
-                }
-            }
-            if (!validValue) {
-                fatal(node,
-                      "Bad value for "+node.getNodeName()+
-                      " attribute "+name+"!");
-            }
-        }
-
-        return value;
-    }
-
-
-    // Get an integer-valued attribute
-    protected static int getIntAttribute(Node node, String name,
-                                         int defaultValue, boolean required,
-                                         boolean bounded, int min, int max)
-      throws IIOInvalidTreeException {
-        String value = getStringAttribute(node, name, null, required, null);
-        if (value == null || "".equals(value)) {
-            return defaultValue;
-        }
-
-        int intValue = defaultValue;
-        try {
-            intValue = Integer.parseInt(value);
-        } catch (NumberFormatException e) {
-            fatal(node,
-                  "Bad value for "+node.getNodeName()+
-                  " attribute "+name+"!");
-        }
-        if (bounded && (intValue < min || intValue > max)) {
-            fatal(node,
-                  "Bad value for "+node.getNodeName()+
-                  " attribute "+name+"!");
-        }
-        return intValue;
-    }
-
-    // Get a float-valued attribute
-    protected static float getFloatAttribute(Node node, String name,
-                                             float defaultValue,
-                                             boolean required)
-      throws IIOInvalidTreeException {
-        String value = getStringAttribute(node, name, null, required, null);
-        if (value == null) {
-            return defaultValue;
-        }
-        return Float.parseFloat(value);
-    }
-
-    // Get a required integer-valued attribute
-    protected static int getIntAttribute(Node node, String name,
-                                         boolean bounded, int min, int max)
-      throws IIOInvalidTreeException {
-        return getIntAttribute(node, name, -1, true, bounded, min, max);
-    }
-
-    // Get a required float-valued attribute
-    protected static float getFloatAttribute(Node node, String name)
-      throws IIOInvalidTreeException {
-        return getFloatAttribute(node, name, -1.0F, true);
-    }
-
-    // Get a boolean-valued attribute
-    protected static boolean getBooleanAttribute(Node node, String name,
-                                                 boolean defaultValue,
-                                                 boolean required)
-      throws IIOInvalidTreeException {
-        Node attr = node.getAttributes().getNamedItem(name);
-        if (attr == null) {
-            if (!required) {
-                return defaultValue;
-            } else {
-                fatal(node, "Required attribute " + name + " not present!");
-            }
-        }
-        String value = attr.getNodeValue();
-        // Allow lower case booleans for backward compatibility, #5082756
-        if (value.equals("TRUE") || value.equals("true")) {
-            return true;
-        } else if (value.equals("FALSE") || value.equals("false")) {
-            return false;
-        } else {
-            fatal(node, "Attribute " + name + " must be 'TRUE' or 'FALSE'!");
-            return false;
-        }
-    }
-
-    // Get a required boolean-valued attribute
-    protected static boolean getBooleanAttribute(Node node, String name)
-      throws IIOInvalidTreeException {
-        return getBooleanAttribute(node, name, false, true);
-    }
-
-    // Get an enumerated attribute as an index into a String array
-    protected static int getEnumeratedAttribute(Node node,
-                                                String name,
-                                                String[] legalNames,
-                                                int defaultValue,
-                                                boolean required)
-      throws IIOInvalidTreeException {
-        Node attr = node.getAttributes().getNamedItem(name);
-        if (attr == null) {
-            if (!required) {
-                return defaultValue;
-            } else {
-                fatal(node, "Required attribute " + name + " not present!");
-            }
-        }
-        String value = attr.getNodeValue();
-        for (int i = 0; i < legalNames.length; i++) {
-            if(value.equals(legalNames[i])) {
-                return i;
-            }
-        }
-
-        fatal(node, "Illegal value for attribute " + name + "!");
-        return -1;
-    }
-
-    // Get a required enumerated attribute as an index into a String array
-    protected static int getEnumeratedAttribute(Node node,
-                                                String name,
-                                                String[] legalNames)
-      throws IIOInvalidTreeException {
-        return getEnumeratedAttribute(node, name, legalNames, -1, true);
-    }
-
-    // Get a String-valued attribute
-    protected static String getAttribute(Node node, String name,
-                                         String defaultValue, boolean required)
-      throws IIOInvalidTreeException {
-        Node attr = node.getAttributes().getNamedItem(name);
-        if (attr == null) {
-            if (!required) {
-                return defaultValue;
-            } else {
-                fatal(node, "Required attribute " + name + " not present!");
-            }
-        }
-        return attr.getNodeValue();
-    }
-
-    // Get a required String-valued attribute
-    protected static String getAttribute(Node node, String name)
-      throws IIOInvalidTreeException {
-        return getAttribute(node, name, null, true);
-    }
-
-    protected GIFMetadata(boolean standardMetadataFormatSupported,
-                          String nativeMetadataFormatName,
-                          String nativeMetadataFormatClassName,
-                          String[] extraMetadataFormatNames,
-                          String[] extraMetadataFormatClassNames) {
-        super(standardMetadataFormatSupported,
-              nativeMetadataFormatName,
-              nativeMetadataFormatClassName,
-              extraMetadataFormatNames,
-              extraMetadataFormatClassNames);
-    }
-
-    public void mergeTree(String formatName, Node root)
-      throws IIOInvalidTreeException {
-        if (formatName.equals(nativeMetadataFormatName)) {
-            if (root == null) {
-                throw new IllegalArgumentException("root == null!");
-            }
-            mergeNativeTree(root);
-        } else if (formatName.equals
-                  (IIOMetadataFormatImpl.standardMetadataFormatName)) {
-            if (root == null) {
-                throw new IllegalArgumentException("root == null!");
-            }
-            mergeStandardTree(root);
-        } else {
-            throw new IllegalArgumentException("Not a recognized format!");
-        }
-    }
-
-    protected byte[] getColorTable(Node colorTableNode,
-                                   String entryNodeName,
-                                   boolean lengthExpected,
-                                   int expectedLength)
-      throws IIOInvalidTreeException {
-        byte[] red = new byte[256];
-        byte[] green  = new byte[256];
-        byte[] blue = new byte[256];
-        int maxIndex = -1;
-
-        Node entry = colorTableNode.getFirstChild();
-        if (entry == null) {
-            fatal(colorTableNode, "Palette has no entries!");
-        }
-
-        while (entry != null) {
-            if (!entry.getNodeName().equals(entryNodeName)) {
-                fatal(colorTableNode,
-                      "Only a "+entryNodeName+" may be a child of a "+
-                      entry.getNodeName()+"!");
-            }
-
-            int index = getIntAttribute(entry, "index", true, 0, 255);
-            if (index > maxIndex) {
-                maxIndex = index;
-            }
-            red[index] = (byte)getIntAttribute(entry, "red", true, 0, 255);
-            green[index] = (byte)getIntAttribute(entry, "green", true, 0, 255);
-            blue[index] = (byte)getIntAttribute(entry, "blue", true, 0, 255);
-
-            entry = entry.getNextSibling();
-        }
-
-        int numEntries = maxIndex + 1;
-
-        if (lengthExpected && numEntries != expectedLength) {
-            fatal(colorTableNode, "Unexpected length for palette!");
-        }
-
-        byte[] colorTable = new byte[3*numEntries];
-        for (int i = 0, j = 0; i < numEntries; i++) {
-            colorTable[j++] = red[i];
-            colorTable[j++] = green[i];
-            colorTable[j++] = blue[i];
-        }
-
-        return colorTable;
-    }
-
-    protected abstract void mergeNativeTree(Node root)
-      throws IIOInvalidTreeException;
-
-   protected abstract void mergeStandardTree(Node root)
-      throws IIOInvalidTreeException;
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/plugins/gif/GIFStreamMetadata.java b/ojluni/src/main/java/com/sun/imageio/plugins/gif/GIFStreamMetadata.java
deleted file mode 100755
index c4f9b64..0000000
--- a/ojluni/src/main/java/com/sun/imageio/plugins/gif/GIFStreamMetadata.java
+++ /dev/null
@@ -1,320 +0,0 @@
-/*
- * Copyright (c) 2000, 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.
- */
-
-package com.sun.imageio.plugins.gif;
-
-import javax.imageio.ImageTypeSpecifier;
-import javax.imageio.metadata.IIOInvalidTreeException;
-import javax.imageio.metadata.IIOMetadata;
-import javax.imageio.metadata.IIOMetadataNode;
-import javax.imageio.metadata.IIOMetadataFormat;
-import javax.imageio.metadata.IIOMetadataFormatImpl;
-import org.w3c.dom.Node;
-
-// TODO - document elimination of globalColorTableFlag
-
-public class GIFStreamMetadata extends GIFMetadata {
-
-    // package scope
-    static final String
-        nativeMetadataFormatName = "javax_imageio_gif_stream_1.0";
-
-    public static final String[] versionStrings = { "87a", "89a" };
-
-    public String version; // 87a or 89a
-    public int logicalScreenWidth;
-    public int logicalScreenHeight;
-    public int colorResolution; // 1 to 8
-    public int pixelAspectRatio;
-
-    public int backgroundColorIndex; // Valid if globalColorTable != null
-    public boolean sortFlag; // Valid if globalColorTable != null
-
-    public static final String[] colorTableSizes = {
-        "2", "4", "8", "16", "32", "64", "128", "256"
-    };
-
-    // Set global color table flag in header to 0 if null, 1 otherwise
-    public byte[] globalColorTable = null;
-
-    protected GIFStreamMetadata(boolean standardMetadataFormatSupported,
-                                String nativeMetadataFormatName,
-                                String nativeMetadataFormatClassName,
-                                String[] extraMetadataFormatNames,
-                                String[] extraMetadataFormatClassNames)
-    {
-        super(standardMetadataFormatSupported,
-              nativeMetadataFormatName,
-              nativeMetadataFormatClassName,
-              extraMetadataFormatNames,
-              extraMetadataFormatClassNames);
-    }
-
-    public GIFStreamMetadata() {
-        this(true,
-              nativeMetadataFormatName,
-              "com.sun.imageio.plugins.gif.GIFStreamMetadataFormat",
-              null, null);
-
-    }
-
-    public boolean isReadOnly() {
-        return true;
-    }
-
-    public Node getAsTree(String formatName) {
-        if (formatName.equals(nativeMetadataFormatName)) {
-            return getNativeTree();
-        } else if (formatName.equals
-                   (IIOMetadataFormatImpl.standardMetadataFormatName)) {
-            return getStandardTree();
-        } else {
-            throw new IllegalArgumentException("Not a recognized format!");
-        }
-    }
-
-    private Node getNativeTree() {
-        IIOMetadataNode node; // scratch node
-        IIOMetadataNode root =
-            new IIOMetadataNode(nativeMetadataFormatName);
-
-        node = new IIOMetadataNode("Version");
-        node.setAttribute("value", version);
-        root.appendChild(node);
-
-        // Image descriptor
-        node = new IIOMetadataNode("LogicalScreenDescriptor");
-        /* NB: At the moment we use empty strings to support undefined
-         * integer values in tree representation.
-         * We need to add better support for undefined/default values later.
-         */
-        node.setAttribute("logicalScreenWidth",
-                          logicalScreenWidth == UNDEFINED_INTEGER_VALUE ?
-                          "" : Integer.toString(logicalScreenWidth));
-        node.setAttribute("logicalScreenHeight",
-                          logicalScreenHeight == UNDEFINED_INTEGER_VALUE ?
-                          "" : Integer.toString(logicalScreenHeight));
-        // Stored value plus one
-        node.setAttribute("colorResolution",
-                          colorResolution == UNDEFINED_INTEGER_VALUE ?
-                          "" : Integer.toString(colorResolution));
-        node.setAttribute("pixelAspectRatio",
-                          Integer.toString(pixelAspectRatio));
-        root.appendChild(node);
-
-        if (globalColorTable != null) {
-            node = new IIOMetadataNode("GlobalColorTable");
-            int numEntries = globalColorTable.length/3;
-            node.setAttribute("sizeOfGlobalColorTable",
-                              Integer.toString(numEntries));
-            node.setAttribute("backgroundColorIndex",
-                              Integer.toString(backgroundColorIndex));
-            node.setAttribute("sortFlag",
-                              sortFlag ? "TRUE" : "FALSE");
-
-            for (int i = 0; i < numEntries; i++) {
-                IIOMetadataNode entry =
-                    new IIOMetadataNode("ColorTableEntry");
-                entry.setAttribute("index", Integer.toString(i));
-                int r = globalColorTable[3*i] & 0xff;
-                int g = globalColorTable[3*i + 1] & 0xff;
-                int b = globalColorTable[3*i + 2] & 0xff;
-                entry.setAttribute("red", Integer.toString(r));
-                entry.setAttribute("green", Integer.toString(g));
-                entry.setAttribute("blue", Integer.toString(b));
-                node.appendChild(entry);
-            }
-            root.appendChild(node);
-        }
-
-        return root;
-    }
-
-    public IIOMetadataNode getStandardChromaNode() {
-        IIOMetadataNode chroma_node = new IIOMetadataNode("Chroma");
-        IIOMetadataNode node = null; // scratch node
-
-        node = new IIOMetadataNode("ColorSpaceType");
-        node.setAttribute("name", "RGB");
-        chroma_node.appendChild(node);
-
-        node = new IIOMetadataNode("BlackIsZero");
-        node.setAttribute("value", "TRUE");
-        chroma_node.appendChild(node);
-
-        // NumChannels not in stream
-        // Gamma not in format
-
-        if (globalColorTable != null) {
-            node = new IIOMetadataNode("Palette");
-            int numEntries = globalColorTable.length/3;
-            for (int i = 0; i < numEntries; i++) {
-                IIOMetadataNode entry =
-                    new IIOMetadataNode("PaletteEntry");
-                entry.setAttribute("index", Integer.toString(i));
-                entry.setAttribute("red",
-                           Integer.toString(globalColorTable[3*i] & 0xff));
-                entry.setAttribute("green",
-                           Integer.toString(globalColorTable[3*i + 1] & 0xff));
-                entry.setAttribute("blue",
-                           Integer.toString(globalColorTable[3*i + 2] & 0xff));
-                node.appendChild(entry);
-            }
-            chroma_node.appendChild(node);
-
-            // backgroundColorIndex is valid iff there is a color table
-            node = new IIOMetadataNode("BackgroundIndex");
-            node.setAttribute("value", Integer.toString(backgroundColorIndex));
-            chroma_node.appendChild(node);
-        }
-
-        return chroma_node;
-    }
-
-    public IIOMetadataNode getStandardCompressionNode() {
-        IIOMetadataNode compression_node = new IIOMetadataNode("Compression");
-        IIOMetadataNode node = null; // scratch node
-
-        node = new IIOMetadataNode("CompressionTypeName");
-        node.setAttribute("value", "lzw");
-        compression_node.appendChild(node);
-
-        node = new IIOMetadataNode("Lossless");
-        node.setAttribute("value", "TRUE");
-        compression_node.appendChild(node);
-
-        // NumProgressiveScans not in stream
-        // BitRate not in format
-
-        return compression_node;
-    }
-
-    public IIOMetadataNode getStandardDataNode() {
-        IIOMetadataNode data_node = new IIOMetadataNode("Data");
-        IIOMetadataNode node = null; // scratch node
-
-        // PlanarConfiguration
-
-        node = new IIOMetadataNode("SampleFormat");
-        node.setAttribute("value", "Index");
-        data_node.appendChild(node);
-
-        node = new IIOMetadataNode("BitsPerSample");
-        node.setAttribute("value",
-                          colorResolution == UNDEFINED_INTEGER_VALUE ?
-                          "" : Integer.toString(colorResolution));
-        data_node.appendChild(node);
-
-        // SignificantBitsPerSample
-        // SampleMSB
-
-        return data_node;
-    }
-
-    public IIOMetadataNode getStandardDimensionNode() {
-        IIOMetadataNode dimension_node = new IIOMetadataNode("Dimension");
-        IIOMetadataNode node = null; // scratch node
-
-        node = new IIOMetadataNode("PixelAspectRatio");
-        float aspectRatio = 1.0F;
-        if (pixelAspectRatio != 0) {
-            aspectRatio = (pixelAspectRatio + 15)/64.0F;
-        }
-        node.setAttribute("value", Float.toString(aspectRatio));
-        dimension_node.appendChild(node);
-
-        node = new IIOMetadataNode("ImageOrientation");
-        node.setAttribute("value", "Normal");
-        dimension_node.appendChild(node);
-
-        // HorizontalPixelSize not in format
-        // VerticalPixelSize not in format
-        // HorizontalPhysicalPixelSpacing not in format
-        // VerticalPhysicalPixelSpacing not in format
-        // HorizontalPosition not in format
-        // VerticalPosition not in format
-        // HorizontalPixelOffset not in stream
-        // VerticalPixelOffset not in stream
-
-        node = new IIOMetadataNode("HorizontalScreenSize");
-        node.setAttribute("value",
-                          logicalScreenWidth == UNDEFINED_INTEGER_VALUE ?
-                          "" : Integer.toString(logicalScreenWidth));
-        dimension_node.appendChild(node);
-
-        node = new IIOMetadataNode("VerticalScreenSize");
-        node.setAttribute("value",
-                          logicalScreenHeight == UNDEFINED_INTEGER_VALUE ?
-                          "" : Integer.toString(logicalScreenHeight));
-        dimension_node.appendChild(node);
-
-        return dimension_node;
-    }
-
-    public IIOMetadataNode getStandardDocumentNode() {
-        IIOMetadataNode document_node = new IIOMetadataNode("Document");
-        IIOMetadataNode node = null; // scratch node
-
-        node = new IIOMetadataNode("FormatVersion");
-        node.setAttribute("value", version);
-        document_node.appendChild(node);
-
-        // SubimageInterpretation not in format
-        // ImageCreationTime not in format
-        // ImageModificationTime not in format
-
-        return document_node;
-    }
-
-    public IIOMetadataNode getStandardTextNode() {
-        // Not in stream
-        return null;
-    }
-
-    public IIOMetadataNode getStandardTransparencyNode() {
-        // Not in stream
-        return null;
-    }
-
-    public void setFromTree(String formatName, Node root)
-        throws IIOInvalidTreeException
-    {
-        throw new IllegalStateException("Metadata is read-only!");
-    }
-
-    protected void mergeNativeTree(Node root) throws IIOInvalidTreeException
-    {
-        throw new IllegalStateException("Metadata is read-only!");
-    }
-
-    protected void mergeStandardTree(Node root) throws IIOInvalidTreeException
-    {
-        throw new IllegalStateException("Metadata is read-only!");
-    }
-
-    public void reset() {
-        throw new IllegalStateException("Metadata is read-only!");
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/plugins/gif/GIFStreamMetadataFormat.java b/ojluni/src/main/java/com/sun/imageio/plugins/gif/GIFStreamMetadataFormat.java
deleted file mode 100755
index b598674..0000000
--- a/ojluni/src/main/java/com/sun/imageio/plugins/gif/GIFStreamMetadataFormat.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Copyright (c) 2001, 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.
- */
-
-package com.sun.imageio.plugins.gif;
-
-import java.util.Arrays;
-import javax.imageio.ImageTypeSpecifier;
-import javax.imageio.metadata.IIOMetadataFormat;
-import javax.imageio.metadata.IIOMetadataFormatImpl;
-
-public class GIFStreamMetadataFormat extends IIOMetadataFormatImpl {
-
-    private static IIOMetadataFormat instance = null;
-
-    private GIFStreamMetadataFormat() {
-        super(GIFStreamMetadata.nativeMetadataFormatName,
-              CHILD_POLICY_SOME);
-
-        // root -> Version
-        addElement("Version", GIFStreamMetadata.nativeMetadataFormatName,
-                   CHILD_POLICY_EMPTY);
-        addAttribute("Version", "value",
-                     DATATYPE_STRING, true, null,
-                     Arrays.asList(GIFStreamMetadata.versionStrings));
-
-        // root -> LogicalScreenDescriptor
-        addElement("LogicalScreenDescriptor",
-                   GIFStreamMetadata.nativeMetadataFormatName,
-                   CHILD_POLICY_EMPTY);
-        addAttribute("LogicalScreenDescriptor", "logicalScreenWidth",
-                     DATATYPE_INTEGER, true, null,
-                     "1", "65535", true, true);
-        addAttribute("LogicalScreenDescriptor", "logicalScreenHeight",
-                     DATATYPE_INTEGER, true, null,
-                     "1", "65535", true, true);
-        addAttribute("LogicalScreenDescriptor", "colorResolution",
-                     DATATYPE_INTEGER, true, null,
-                     "1", "8", true, true);
-        addAttribute("LogicalScreenDescriptor", "pixelAspectRatio",
-                     DATATYPE_INTEGER, true, null,
-                     "0", "255", true, true);
-
-        // root -> GlobalColorTable
-        addElement("GlobalColorTable",
-                   GIFStreamMetadata.nativeMetadataFormatName,
-                   2, 256);
-        addAttribute("GlobalColorTable", "sizeOfGlobalColorTable",
-                     DATATYPE_INTEGER, true, null,
-                     Arrays.asList(GIFStreamMetadata.colorTableSizes));
-        addAttribute("GlobalColorTable", "backgroundColorIndex",
-                     DATATYPE_INTEGER, true, null,
-                     "0", "255", true, true);
-        addBooleanAttribute("GlobalColorTable", "sortFlag",
-                            false, false);
-
-        // root -> GlobalColorTable -> ColorTableEntry
-        addElement("ColorTableEntry", "GlobalColorTable",
-                   CHILD_POLICY_EMPTY);
-        addAttribute("ColorTableEntry", "index",
-                     DATATYPE_INTEGER, true, null,
-                     "0", "255", true, true);
-        addAttribute("ColorTableEntry", "red",
-                     DATATYPE_INTEGER, true, null,
-                     "0", "255", true, true);
-        addAttribute("ColorTableEntry", "green",
-                     DATATYPE_INTEGER, true, null,
-                     "0", "255", true, true);
-        addAttribute("ColorTableEntry", "blue",
-                     DATATYPE_INTEGER, true, null,
-                     "0", "255", true, true);
-    }
-
-    public boolean canNodeAppear(String elementName,
-                                 ImageTypeSpecifier imageType) {
-        return true;
-    }
-
-    public static synchronized IIOMetadataFormat getInstance() {
-        if (instance == null) {
-            instance = new GIFStreamMetadataFormat();
-        }
-        return instance;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/plugins/gif/GIFStreamMetadataFormatResources.java b/ojluni/src/main/java/com/sun/imageio/plugins/gif/GIFStreamMetadataFormatResources.java
deleted file mode 100755
index 61aa815..0000000
--- a/ojluni/src/main/java/com/sun/imageio/plugins/gif/GIFStreamMetadataFormatResources.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Copyright (c) 2001, 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.
- */
-
-package com.sun.imageio.plugins.gif;
-
-import java.util.ListResourceBundle;
-
-public class GIFStreamMetadataFormatResources extends ListResourceBundle {
-
-    public GIFStreamMetadataFormatResources() {}
-
-    protected Object[][] getContents() {
-        return new Object[][] {
-
-        // Node name, followed by description
-        { "Version", "The file version, either 87a or 89a" },
-        { "LogicalScreenDescriptor",
-          "The logical screen descriptor, except for the global color table" },
-        { "GlobalColorTable", "The global color table" },
-        { "ColorTableEntry", "A global color table entry" },
-
-        // Node name + "/" + AttributeName, followed by description
-        { "Version/value",
-          "The version string" },
-        { "LogicalScreenDescriptor/logicalScreenWidth",
-          "The width in pixels of the whole picture" },
-        { "LogicalScreenDescriptor/logicalScreenHeight",
-          "The height in pixels of the whole picture" },
-        { "LogicalScreenDescriptor/colorResolution",
-          "The number of bits of color resolution, beteen 1 and 8" },
-        { "LogicalScreenDescriptor/pixelAspectRatio",
-          "If 0, indicates square pixels, else W/H = (value + 15)/64" },
-        { "GlobalColorTable/sizeOfGlobalColorTable",
-          "The number of entries in the global color table" },
-        { "GlobalColorTable/backgroundColorIndex",
-          "The index of the color table entry to be used as a background" },
-        { "GlobalColorTable/sortFlag",
-          "True if the global color table is sorted by frequency" },
-        { "ColorTableEntry/index", "The index of the color table entry" },
-        { "ColorTableEntry/red",
-          "The red value for the color table entry" },
-        { "ColorTableEntry/green",
-          "The green value for the color table entry" },
-        { "ColorTableEntry/blue",
-          "The blue value for the color table entry" },
-
-        };
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/plugins/gif/GIFWritableImageMetadata.java b/ojluni/src/main/java/com/sun/imageio/plugins/gif/GIFWritableImageMetadata.java
deleted file mode 100755
index 3a87554..0000000
--- a/ojluni/src/main/java/com/sun/imageio/plugins/gif/GIFWritableImageMetadata.java
+++ /dev/null
@@ -1,402 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-package com.sun.imageio.plugins.gif;
-
-import java.io.UnsupportedEncodingException;
-import java.nio.charset.Charset;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import javax.imageio.ImageTypeSpecifier;
-import javax.imageio.metadata.IIOInvalidTreeException;
-import javax.imageio.metadata.IIOMetadata;
-import javax.imageio.metadata.IIOMetadataNode;
-import javax.imageio.metadata.IIOMetadataFormat;
-import javax.imageio.metadata.IIOMetadataFormatImpl;
-import org.w3c.dom.Node;
-
-class GIFWritableImageMetadata extends GIFImageMetadata {
-
-    // package scope
-    static final String
-    NATIVE_FORMAT_NAME = "javax_imageio_gif_image_1.0";
-
-    GIFWritableImageMetadata() {
-        super(true,
-              NATIVE_FORMAT_NAME,
-              "com.sun.imageio.plugins.gif.GIFImageMetadataFormat",
-              null, null);
-    }
-
-    public boolean isReadOnly() {
-        return false;
-    }
-
-    public void reset() {
-        // Fields from Image Descriptor
-        imageLeftPosition = 0;
-        imageTopPosition = 0;
-        imageWidth = 0;
-        imageHeight = 0;
-        interlaceFlag = false;
-        sortFlag = false;
-        localColorTable = null;
-
-        // Fields from Graphic Control Extension
-        disposalMethod = 0;
-        userInputFlag = false;
-        transparentColorFlag = false;
-        delayTime = 0;
-        transparentColorIndex = 0;
-
-        // Fields from Plain Text Extension
-        hasPlainTextExtension = false;
-        textGridLeft = 0;
-        textGridTop = 0;
-        textGridWidth = 0;
-        textGridHeight = 0;
-        characterCellWidth = 0;
-        characterCellHeight = 0;
-        textForegroundColor = 0;
-        textBackgroundColor = 0;
-        text = null;
-
-        // Fields from ApplicationExtension
-        applicationIDs = null;
-        authenticationCodes = null;
-        applicationData = null;
-
-        // Fields from CommentExtension
-        // List of byte[]
-        comments = null;
-    }
-
-    private byte[] fromISO8859(String data) {
-        try {
-            return data.getBytes("ISO-8859-1");
-        } catch (UnsupportedEncodingException e) {
-            return "".getBytes();
-        }
-    }
-
-    protected void mergeNativeTree(Node root) throws IIOInvalidTreeException {
-        Node node = root;
-        if (!node.getNodeName().equals(nativeMetadataFormatName)) {
-            fatal(node, "Root must be " + nativeMetadataFormatName);
-        }
-
-        node = node.getFirstChild();
-        while (node != null) {
-            String name = node.getNodeName();
-
-            if (name.equals("ImageDescriptor")) {
-                imageLeftPosition = getIntAttribute(node,
-                                                    "imageLeftPosition",
-                                                    -1, true,
-                                                    true, 0, 65535);
-
-                imageTopPosition = getIntAttribute(node,
-                                                   "imageTopPosition",
-                                                   -1, true,
-                                                   true, 0, 65535);
-
-                imageWidth = getIntAttribute(node,
-                                             "imageWidth",
-                                             -1, true,
-                                             true, 1, 65535);
-
-                imageHeight = getIntAttribute(node,
-                                              "imageHeight",
-                                              -1, true,
-                                              true, 1, 65535);
-
-                interlaceFlag = getBooleanAttribute(node, "interlaceFlag",
-                                                    false, true);
-            } else if (name.equals("LocalColorTable")) {
-                int sizeOfLocalColorTable =
-                    getIntAttribute(node, "sizeOfLocalColorTable",
-                                    true, 2, 256);
-                if (sizeOfLocalColorTable != 2 &&
-                    sizeOfLocalColorTable != 4 &&
-                    sizeOfLocalColorTable != 8 &&
-                    sizeOfLocalColorTable != 16 &&
-                    sizeOfLocalColorTable != 32 &&
-                    sizeOfLocalColorTable != 64 &&
-                    sizeOfLocalColorTable != 128 &&
-                    sizeOfLocalColorTable != 256) {
-                    fatal(node,
-                          "Bad value for LocalColorTable attribute sizeOfLocalColorTable!");
-                }
-
-                sortFlag = getBooleanAttribute(node, "sortFlag", false, true);
-
-                localColorTable = getColorTable(node, "ColorTableEntry",
-                                                true, sizeOfLocalColorTable);
-            } else if (name.equals("GraphicControlExtension")) {
-                String disposalMethodName =
-                    getStringAttribute(node, "disposalMethod", null,
-                                       true, disposalMethodNames);
-                disposalMethod = 0;
-                while(!disposalMethodName.equals(disposalMethodNames[disposalMethod])) {
-                    disposalMethod++;
-                }
-
-                userInputFlag = getBooleanAttribute(node, "userInputFlag",
-                                                    false, true);
-
-                transparentColorFlag =
-                    getBooleanAttribute(node, "transparentColorFlag",
-                                        false, true);
-
-                delayTime = getIntAttribute(node,
-                                            "delayTime",
-                                            -1, true,
-                                            true, 0, 65535);
-
-                transparentColorIndex =
-                    getIntAttribute(node, "transparentColorIndex",
-                                    -1, true,
-                                    true, 0, 65535);
-            } else if (name.equals("PlainTextExtension")) {
-                hasPlainTextExtension = true;
-
-                textGridLeft = getIntAttribute(node,
-                                               "textGridLeft",
-                                               -1, true,
-                                               true, 0, 65535);
-
-                textGridTop = getIntAttribute(node,
-                                              "textGridTop",
-                                              -1, true,
-                                              true, 0, 65535);
-
-                textGridWidth = getIntAttribute(node,
-                                                "textGridWidth",
-                                                -1, true,
-                                                true, 1, 65535);
-
-                textGridHeight = getIntAttribute(node,
-                                                 "textGridHeight",
-                                                 -1, true,
-                                                 true, 1, 65535);
-
-                characterCellWidth = getIntAttribute(node,
-                                                     "characterCellWidth",
-                                                     -1, true,
-                                                     true, 1, 65535);
-
-                characterCellHeight = getIntAttribute(node,
-                                                      "characterCellHeight",
-                                                      -1, true,
-                                                      true, 1, 65535);
-
-                textForegroundColor = getIntAttribute(node,
-                                                      "textForegroundColor",
-                                                      -1, true,
-                                                      true, 0, 255);
-
-                textBackgroundColor = getIntAttribute(node,
-                                                      "textBackgroundColor",
-                                                      -1, true,
-                                                      true, 0, 255);
-
-                // XXX The "text" attribute of the PlainTextExtension element
-                // is not defined in the GIF image metadata format but it is
-                // present in the GIFImageMetadata class. Consequently it is
-                // used here but not required and with a default of "". See
-                // bug 5082763.
-
-                String textString =
-                    getStringAttribute(node, "text", "", false, null);
-                text = fromISO8859(textString);
-            } else if (name.equals("ApplicationExtensions")) {
-                IIOMetadataNode applicationExtension =
-                    (IIOMetadataNode)node.getFirstChild();
-
-                if (!applicationExtension.getNodeName().equals("ApplicationExtension")) {
-                    fatal(node,
-                          "Only a ApplicationExtension may be a child of a ApplicationExtensions!");
-                }
-
-                String applicationIDString =
-                    getStringAttribute(applicationExtension, "applicationID",
-                                       null, true, null);
-
-                String authenticationCodeString =
-                    getStringAttribute(applicationExtension, "authenticationCode",
-                                       null, true, null);
-
-                Object applicationExtensionData =
-                    applicationExtension.getUserObject();
-                if (applicationExtensionData == null ||
-                    !(applicationExtensionData instanceof byte[])) {
-                    fatal(applicationExtension,
-                          "Bad user object in ApplicationExtension!");
-                }
-
-                if (applicationIDs == null) {
-                    applicationIDs = new ArrayList();
-                    authenticationCodes = new ArrayList();
-                    applicationData = new ArrayList();
-                }
-
-                applicationIDs.add(fromISO8859(applicationIDString));
-                authenticationCodes.add(fromISO8859(authenticationCodeString));
-                applicationData.add(applicationExtensionData);
-            } else if (name.equals("CommentExtensions")) {
-                Node commentExtension = node.getFirstChild();
-                if (commentExtension != null) {
-                    while(commentExtension != null) {
-                        if (!commentExtension.getNodeName().equals("CommentExtension")) {
-                            fatal(node,
-                                  "Only a CommentExtension may be a child of a CommentExtensions!");
-                        }
-
-                        if (comments == null) {
-                            comments = new ArrayList();
-                        }
-
-                        String comment =
-                            getStringAttribute(commentExtension, "value", null,
-                                               true, null);
-
-                        comments.add(fromISO8859(comment));
-
-                        commentExtension = commentExtension.getNextSibling();
-                    }
-                }
-            } else {
-                fatal(node, "Unknown child of root node!");
-            }
-
-            node = node.getNextSibling();
-        }
-    }
-
-    protected void mergeStandardTree(Node root)
-      throws IIOInvalidTreeException {
-        Node node = root;
-        if (!node.getNodeName()
-            .equals(IIOMetadataFormatImpl.standardMetadataFormatName)) {
-            fatal(node, "Root must be " +
-                  IIOMetadataFormatImpl.standardMetadataFormatName);
-        }
-
-        node = node.getFirstChild();
-        while (node != null) {
-            String name = node.getNodeName();
-
-            if (name.equals("Chroma")) {
-                Node childNode = node.getFirstChild();
-                while(childNode != null) {
-                    String childName = childNode.getNodeName();
-                    if (childName.equals("Palette")) {
-                        localColorTable = getColorTable(childNode,
-                                                        "PaletteEntry",
-                                                        false, -1);
-                        break;
-                    }
-                    childNode = childNode.getNextSibling();
-                }
-            } else if (name.equals("Compression")) {
-                Node childNode = node.getFirstChild();
-                while(childNode != null) {
-                    String childName = childNode.getNodeName();
-                    if (childName.equals("NumProgressiveScans")) {
-                        int numProgressiveScans =
-                            getIntAttribute(childNode, "value", 4, false,
-                                            true, 1, Integer.MAX_VALUE);
-                        if (numProgressiveScans > 1) {
-                            interlaceFlag = true;
-                        }
-                        break;
-                    }
-                    childNode = childNode.getNextSibling();
-                }
-            } else if (name.equals("Dimension")) {
-                Node childNode = node.getFirstChild();
-                while(childNode != null) {
-                    String childName = childNode.getNodeName();
-                    if (childName.equals("HorizontalPixelOffset")) {
-                        imageLeftPosition = getIntAttribute(childNode,
-                                                            "value",
-                                                            -1, true,
-                                                            true, 0, 65535);
-                    } else if (childName.equals("VerticalPixelOffset")) {
-                        imageTopPosition = getIntAttribute(childNode,
-                                                           "value",
-                                                           -1, true,
-                                                           true, 0, 65535);
-                    }
-                    childNode = childNode.getNextSibling();
-                }
-            } else if (name.equals("Text")) {
-                Node childNode = node.getFirstChild();
-                while(childNode != null) {
-                    String childName = childNode.getNodeName();
-                    if (childName.equals("TextEntry") &&
-                        getAttribute(childNode, "compression",
-                                     "none", false).equals("none") &&
-                        Charset.isSupported(getAttribute(childNode,
-                                                         "encoding",
-                                                         "ISO-8859-1",
-                                                         false))) {
-                        String value = getAttribute(childNode, "value");
-                        byte[] comment = fromISO8859(value);
-                        if (comments == null) {
-                            comments = new ArrayList();
-                        }
-                        comments.add(comment);
-                    }
-                    childNode = childNode.getNextSibling();
-                }
-            } else if (name.equals("Transparency")) {
-                Node childNode = node.getFirstChild();
-                while(childNode != null) {
-                    String childName = childNode.getNodeName();
-                    if (childName.equals("TransparentIndex")) {
-                        transparentColorIndex = getIntAttribute(childNode,
-                                                                "value",
-                                                                -1, true,
-                                                                true, 0, 255);
-                        transparentColorFlag = true;
-                        break;
-                    }
-                    childNode = childNode.getNextSibling();
-                }
-            }
-
-            node = node.getNextSibling();
-        }
-    }
-
-    public void setFromTree(String formatName, Node root)
-        throws IIOInvalidTreeException
-    {
-        reset();
-        mergeTree(formatName, root);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/plugins/gif/GIFWritableStreamMetadata.java b/ojluni/src/main/java/com/sun/imageio/plugins/gif/GIFWritableStreamMetadata.java
deleted file mode 100755
index 8a9a6d8..0000000
--- a/ojluni/src/main/java/com/sun/imageio/plugins/gif/GIFWritableStreamMetadata.java
+++ /dev/null
@@ -1,267 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-package com.sun.imageio.plugins.gif;
-
-/*
- * The source for this class was copied verbatim from the source for
- * package com.sun.imageio.plugins.gif.GIFImageMetadata and then modified
- * to make the class read-write capable.
- */
-
-import javax.imageio.ImageTypeSpecifier;
-import javax.imageio.metadata.IIOInvalidTreeException;
-import javax.imageio.metadata.IIOMetadata;
-import javax.imageio.metadata.IIOMetadataNode;
-import javax.imageio.metadata.IIOMetadataFormat;
-import javax.imageio.metadata.IIOMetadataFormatImpl;
-import org.w3c.dom.Node;
-
-class GIFWritableStreamMetadata extends GIFStreamMetadata {
-
-    // package scope
-    static final String
-    NATIVE_FORMAT_NAME = "javax_imageio_gif_stream_1.0";
-
-    public GIFWritableStreamMetadata() {
-        super(true,
-              NATIVE_FORMAT_NAME,
-              "com.sun.imageio.plugins.gif.GIFStreamMetadataFormat", // XXX J2SE
-              null, null);
-
-        // initialize metadata fields by default values
-        reset();
-    }
-
-    public boolean isReadOnly() {
-        return false;
-    }
-
-    public void mergeTree(String formatName, Node root)
-      throws IIOInvalidTreeException {
-        if (formatName.equals(nativeMetadataFormatName)) {
-            if (root == null) {
-                throw new IllegalArgumentException("root == null!");
-            }
-            mergeNativeTree(root);
-        } else if (formatName.equals
-                   (IIOMetadataFormatImpl.standardMetadataFormatName)) {
-            if (root == null) {
-                throw new IllegalArgumentException("root == null!");
-            }
-            mergeStandardTree(root);
-        } else {
-            throw new IllegalArgumentException("Not a recognized format!");
-        }
-    }
-
-    public void reset() {
-        version = null;
-
-        logicalScreenWidth = UNDEFINED_INTEGER_VALUE;
-        logicalScreenHeight = UNDEFINED_INTEGER_VALUE;
-        colorResolution = UNDEFINED_INTEGER_VALUE;
-        pixelAspectRatio = 0;
-
-        backgroundColorIndex = 0;
-        sortFlag = false;
-        globalColorTable = null;
-    }
-
-    protected void mergeNativeTree(Node root) throws IIOInvalidTreeException {
-        Node node = root;
-        if (!node.getNodeName().equals(nativeMetadataFormatName)) {
-            fatal(node, "Root must be " + nativeMetadataFormatName);
-        }
-
-        node = node.getFirstChild();
-        while (node != null) {
-            String name = node.getNodeName();
-
-            if (name.equals("Version")) {
-                version = getStringAttribute(node, "value", null,
-                                             true, versionStrings);
-            } else if (name.equals("LogicalScreenDescriptor")) {
-                /* NB: At the moment we use empty strings to support undefined
-                 * integer values in tree representation.
-                 * We need to add better support for undefined/default values
-                 * later.
-                 */
-                logicalScreenWidth = getIntAttribute(node,
-                                                     "logicalScreenWidth",
-                                                     UNDEFINED_INTEGER_VALUE,
-                                                     true,
-                                                     true, 1, 65535);
-
-                logicalScreenHeight = getIntAttribute(node,
-                                                      "logicalScreenHeight",
-                                                      UNDEFINED_INTEGER_VALUE,
-                                                      true,
-                                                      true, 1, 65535);
-
-                colorResolution = getIntAttribute(node,
-                                                  "colorResolution",
-                                                  UNDEFINED_INTEGER_VALUE,
-                                                  true,
-                                                  true, 1, 8);
-
-                pixelAspectRatio = getIntAttribute(node,
-                                                   "pixelAspectRatio",
-                                                   0, true,
-                                                   true, 0, 255);
-            } else if (name.equals("GlobalColorTable")) {
-                int sizeOfGlobalColorTable =
-                    getIntAttribute(node, "sizeOfGlobalColorTable",
-                                    true, 2, 256);
-                if (sizeOfGlobalColorTable != 2 &&
-                   sizeOfGlobalColorTable != 4 &&
-                   sizeOfGlobalColorTable != 8 &&
-                   sizeOfGlobalColorTable != 16 &&
-                   sizeOfGlobalColorTable != 32 &&
-                   sizeOfGlobalColorTable != 64 &&
-                   sizeOfGlobalColorTable != 128 &&
-                   sizeOfGlobalColorTable != 256) {
-                    fatal(node,
-                          "Bad value for GlobalColorTable attribute sizeOfGlobalColorTable!");
-                }
-
-                backgroundColorIndex = getIntAttribute(node,
-                                                       "backgroundColorIndex",
-                                                       0, true,
-                                                       true, 0, 255);
-
-                sortFlag = getBooleanAttribute(node, "sortFlag", false, true);
-
-                globalColorTable = getColorTable(node, "ColorTableEntry",
-                                                 true, sizeOfGlobalColorTable);
-            } else {
-                fatal(node, "Unknown child of root node!");
-            }
-
-            node = node.getNextSibling();
-        }
-    }
-
-    protected void mergeStandardTree(Node root)
-      throws IIOInvalidTreeException {
-        Node node = root;
-        if (!node.getNodeName()
-            .equals(IIOMetadataFormatImpl.standardMetadataFormatName)) {
-            fatal(node, "Root must be " +
-                  IIOMetadataFormatImpl.standardMetadataFormatName);
-        }
-
-        node = node.getFirstChild();
-        while (node != null) {
-            String name = node.getNodeName();
-
-            if (name.equals("Chroma")) {
-                Node childNode = node.getFirstChild();
-                while(childNode != null) {
-                    String childName = childNode.getNodeName();
-                    if (childName.equals("Palette")) {
-                        globalColorTable = getColorTable(childNode,
-                                                         "PaletteEntry",
-                                                         false, -1);
-
-                    } else if (childName.equals("BackgroundIndex")) {
-                        backgroundColorIndex = getIntAttribute(childNode,
-                                                               "value",
-                                                               -1, true,
-                                                               true, 0, 255);
-                    }
-                    childNode = childNode.getNextSibling();
-                }
-            } else if (name.equals("Data")) {
-                Node childNode = node.getFirstChild();
-                while(childNode != null) {
-                    String childName = childNode.getNodeName();
-                    if (childName.equals("BitsPerSample")) {
-                        colorResolution = getIntAttribute(childNode,
-                                                          "value",
-                                                          -1, true,
-                                                          true, 1, 8);
-                        break;
-                    }
-                    childNode = childNode.getNextSibling();
-                }
-            } else if (name.equals("Dimension")) {
-                Node childNode = node.getFirstChild();
-                while(childNode != null) {
-                    String childName = childNode.getNodeName();
-                    if (childName.equals("PixelAspectRatio")) {
-                        float aspectRatio = getFloatAttribute(childNode,
-                                                              "value");
-                        if (aspectRatio == 1.0F) {
-                            pixelAspectRatio = 0;
-                        } else {
-                            int ratio = (int)(aspectRatio*64.0F - 15.0F);
-                            pixelAspectRatio =
-                                Math.max(Math.min(ratio, 255), 0);
-                        }
-                    } else if (childName.equals("HorizontalScreenSize")) {
-                        logicalScreenWidth = getIntAttribute(childNode,
-                                                             "value",
-                                                             -1, true,
-                                                             true, 1, 65535);
-                    } else if (childName.equals("VerticalScreenSize")) {
-                        logicalScreenHeight = getIntAttribute(childNode,
-                                                              "value",
-                                                              -1, true,
-                                                              true, 1, 65535);
-                    }
-                    childNode = childNode.getNextSibling();
-                }
-            } else if (name.equals("Document")) {
-                Node childNode = node.getFirstChild();
-                while(childNode != null) {
-                    String childName = childNode.getNodeName();
-                    if (childName.equals("FormatVersion")) {
-                        String formatVersion =
-                            getStringAttribute(childNode, "value", null,
-                                               true, null);
-                        for (int i = 0; i < versionStrings.length; i++) {
-                            if (formatVersion.equals(versionStrings[i])) {
-                                version = formatVersion;
-                                break;
-                            }
-                        }
-                        break;
-                    }
-                    childNode = childNode.getNextSibling();
-                }
-            }
-
-            node = node.getNextSibling();
-        }
-    }
-
-    public void setFromTree(String formatName, Node root)
-        throws IIOInvalidTreeException
-    {
-        reset();
-        mergeTree(formatName, root);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/plugins/jpeg/AdobeMarkerSegment.java b/ojluni/src/main/java/com/sun/imageio/plugins/jpeg/AdobeMarkerSegment.java
deleted file mode 100755
index f7063bd..0000000
--- a/ojluni/src/main/java/com/sun/imageio/plugins/jpeg/AdobeMarkerSegment.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * Copyright (c) 2001, 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.imageio.plugins.jpeg;
-
-import javax.imageio.IIOException;
-import javax.imageio.metadata.IIOInvalidTreeException;
-import javax.imageio.metadata.IIOMetadataNode;
-import javax.imageio.stream.ImageOutputStream;
-
-import java.io.IOException;
-
-import org.w3c.dom.Node;
-import org.w3c.dom.NamedNodeMap;
-
-/**
- * An Adobe APP14 (Application-Specific) marker segment.
- */
-class AdobeMarkerSegment extends MarkerSegment {
-    int version;
-    int flags0;
-    int flags1;
-    int transform;
-    private static final int ID_SIZE = 5;
-
-    AdobeMarkerSegment(int transform) {
-        super(JPEG.APP14);
-        version = 101;
-        flags0 = 0;
-        flags1 = 0;
-        this.transform = transform;
-    }
-
-    AdobeMarkerSegment(JPEGBuffer buffer) throws IOException {
-        super(buffer);
-        buffer.bufPtr += ID_SIZE; // Skip the id
-        version = (buffer.buf[buffer.bufPtr++] & 0xff) << 8;
-        version |= buffer.buf[buffer.bufPtr++] & 0xff;
-        flags0 = (buffer.buf[buffer.bufPtr++] & 0xff) << 8;
-        flags0 |= buffer.buf[buffer.bufPtr++] & 0xff;
-        flags1 = (buffer.buf[buffer.bufPtr++] & 0xff) << 8;
-        flags1 |= buffer.buf[buffer.bufPtr++] & 0xff;
-        transform = buffer.buf[buffer.bufPtr++] & 0xff;
-        buffer.bufAvail -= length;
-    }
-
-    AdobeMarkerSegment(Node node) throws IIOInvalidTreeException {
-        this(0); // default transform will be changed
-        updateFromNativeNode(node, true);
-    }
-
-    IIOMetadataNode getNativeNode() {
-        IIOMetadataNode node = new IIOMetadataNode("app14Adobe");
-        node.setAttribute("version", Integer.toString(version));
-        node.setAttribute("flags0", Integer.toString(flags0));
-        node.setAttribute("flags1", Integer.toString(flags1));
-        node.setAttribute("transform", Integer.toString(transform));
-
-        return node;
-    }
-
-    void updateFromNativeNode(Node node, boolean fromScratch)
-        throws IIOInvalidTreeException {
-        // Only the transform is required
-        NamedNodeMap attrs = node.getAttributes();
-        transform = getAttributeValue(node, attrs, "transform", 0, 2, true);
-        int count = attrs.getLength();
-        if (count > 4) {
-            throw new IIOInvalidTreeException
-                ("Adobe APP14 node cannot have > 4 attributes", node);
-        }
-        if (count > 1) {
-            int value = getAttributeValue(node, attrs, "version",
-                                          100, 255, false);
-            version = (value != -1) ? value : version;
-            value = getAttributeValue(node, attrs, "flags0", 0, 65535, false);
-            flags0 = (value != -1) ? value : flags0;
-            value = getAttributeValue(node, attrs, "flags1", 0, 65535, false);
-            flags1 = (value != -1) ? value : flags1;
-        }
-    }
-
-    /**
-     * Writes the data for this segment to the stream in
-     * valid JPEG format.
-     */
-    void write(ImageOutputStream ios) throws IOException {
-        length = 14;
-        writeTag(ios);
-        byte [] id = {0x41, 0x64, 0x6F, 0x62, 0x65};
-        ios.write(id);
-        write2bytes(ios, version);
-        write2bytes(ios, flags0);
-        write2bytes(ios, flags1);
-        ios.write(transform);
-    }
-
-    static void writeAdobeSegment(ImageOutputStream ios, int transform)
-        throws IOException {
-        (new AdobeMarkerSegment(transform)).write(ios);
-    }
-
-    void print () {
-        printTag("Adobe APP14");
-        System.out.print("Version: ");
-        System.out.println(version);
-        System.out.print("Flags0: 0x");
-        System.out.println(Integer.toHexString(flags0));
-        System.out.print("Flags1: 0x");
-        System.out.println(Integer.toHexString(flags1));
-        System.out.print("Transform: ");
-        System.out.println(transform);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/plugins/jpeg/COMMarkerSegment.java b/ojluni/src/main/java/com/sun/imageio/plugins/jpeg/COMMarkerSegment.java
deleted file mode 100755
index c53cf35..0000000
--- a/ojluni/src/main/java/com/sun/imageio/plugins/jpeg/COMMarkerSegment.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * Copyright (c) 2001, 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.imageio.plugins.jpeg;
-
-import javax.imageio.metadata.IIOMetadataNode;
-import javax.imageio.stream.ImageOutputStream;
-import javax.imageio.metadata.IIOInvalidTreeException;
-
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-
-import org.w3c.dom.Node;
-
-/**
- * A Comment marker segment.  Retains an array of bytes representing the
- * comment data as it is read from the stream.  If the marker segment is
- * constructed from a String, then local default encoding is assumed
- * when creating the byte array.  If the marker segment is created from
- * an <code>IIOMetadataNode</code>, the user object, if present is
- * assumed to be a byte array containing the comment data.  If there is
- * no user object then the comment attribute is used to create the
- * byte array, again assuming the default local encoding.
- */
-class COMMarkerSegment extends MarkerSegment {
-    private static final String ENCODING = "ISO-8859-1";
-
-    /**
-     * Constructs a marker segment from the given buffer, which contains
-     * data from an <code>ImageInputStream</code>.  This is used when
-     * reading metadata from a stream.
-     */
-    COMMarkerSegment(JPEGBuffer buffer) throws IOException {
-        super(buffer);
-        loadData(buffer);
-    }
-
-    /**
-     * Constructs a marker segment from a String.  This is used when
-     * modifying metadata from a non-native tree and when transcoding.
-     * The default encoding is used to construct the byte array.
-     */
-    COMMarkerSegment(String comment) {
-        super(JPEG.COM);
-        data = comment.getBytes(); // Default encoding
-    }
-
-    /**
-     * Constructs a marker segment from a native tree node.  If the node
-     * is an <code>IIOMetadataNode</code> and contains a user object,
-     * that object is used rather than the string attribute.  If the
-     * string attribute is used, the default encoding is used.
-     */
-    COMMarkerSegment(Node node) throws IIOInvalidTreeException{
-        super(JPEG.COM);
-        if (node instanceof IIOMetadataNode) {
-            IIOMetadataNode ourNode = (IIOMetadataNode) node;
-            data = (byte []) ourNode.getUserObject();
-        }
-        if (data == null) {
-            String comment =
-                node.getAttributes().getNamedItem("comment").getNodeValue();
-            if (comment != null) {
-                data = comment.getBytes(); // Default encoding
-            } else {
-                throw new IIOInvalidTreeException("Empty comment node!", node);
-            }
-        }
-    }
-
-    /**
-     * Returns the array encoded as a String, using ISO-Latin-1 encoding.
-     * If an application needs another encoding, the data array must be
-     * consulted directly.
-     */
-    String getComment() {
-        try {
-            return new String (data, ENCODING);
-        } catch (UnsupportedEncodingException e) {}  // Won't happen
-        return null;
-    }
-
-    /**
-     * Returns an <code>IIOMetadataNode</code> containing the data array
-     * as a user object and a string encoded using ISO-8895-1, as an
-     * attribute.
-     */
-    IIOMetadataNode getNativeNode() {
-        IIOMetadataNode node = new IIOMetadataNode("com");
-        node.setAttribute("comment", getComment());
-        if (data != null) {
-            node.setUserObject(data.clone());
-        }
-        return node;
-    }
-
-    /**
-     * Writes the data for this segment to the stream in
-     * valid JPEG format, directly from the data array.
-     */
-    void write(ImageOutputStream ios) throws IOException {
-        length = 2 + data.length;
-        writeTag(ios);
-        ios.write(data);
-    }
-
-    void print() {
-        printTag("COM");
-        System.out.println("<" + getComment() + ">");
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/plugins/jpeg/DHTMarkerSegment.java b/ojluni/src/main/java/com/sun/imageio/plugins/jpeg/DHTMarkerSegment.java
deleted file mode 100755
index f619bb1..0000000
--- a/ojluni/src/main/java/com/sun/imageio/plugins/jpeg/DHTMarkerSegment.java
+++ /dev/null
@@ -1,260 +0,0 @@
-/*
- * Copyright (c) 2001, 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.imageio.plugins.jpeg;
-
-import javax.imageio.metadata.IIOInvalidTreeException;
-import javax.imageio.metadata.IIOMetadataNode;
-import javax.imageio.stream.ImageOutputStream;
-import javax.imageio.plugins.jpeg.JPEGHuffmanTable;
-
-import java.io.IOException;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Iterator;
-
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.w3c.dom.NamedNodeMap;
-
-/**
- * A DHT (Define Huffman Table) marker segment.
- */
-class DHTMarkerSegment extends MarkerSegment {
-    List tables = new ArrayList();
-
-    DHTMarkerSegment(boolean needFour) {
-        super(JPEG.DHT);
-        tables.add(new Htable(JPEGHuffmanTable.StdDCLuminance, true, 0));
-        if (needFour) {
-            tables.add(new Htable(JPEGHuffmanTable.StdDCChrominance, true, 1));
-        }
-        tables.add(new Htable(JPEGHuffmanTable.StdACLuminance, false, 0));
-        if (needFour) {
-            tables.add(new Htable(JPEGHuffmanTable.StdACChrominance, false, 1));
-        }
-    }
-
-    DHTMarkerSegment(JPEGBuffer buffer) throws IOException {
-        super(buffer);
-        int count = length;
-        while (count > 0) {
-            Htable newGuy = new Htable(buffer);
-            tables.add(newGuy);
-            count -= 1 + 16 + newGuy.values.length;
-        }
-        buffer.bufAvail -= length;
-    }
-
-    DHTMarkerSegment(JPEGHuffmanTable[] dcTables,
-                     JPEGHuffmanTable[] acTables) {
-        super(JPEG.DHT);
-        for (int i = 0; i < dcTables.length; i++) {
-            tables.add(new Htable(dcTables[i], true, i));
-        }
-        for (int i = 0; i < acTables.length; i++) {
-            tables.add(new Htable(acTables[i], false, i));
-        }
-    }
-
-    DHTMarkerSegment(Node node) throws IIOInvalidTreeException {
-        super(JPEG.DHT);
-        NodeList children = node.getChildNodes();
-        int size = children.getLength();
-        if ((size < 1) || (size > 4)) {
-            throw new IIOInvalidTreeException("Invalid DHT node", node);
-        }
-        for (int i = 0; i < size; i++) {
-            tables.add(new Htable(children.item(i)));
-        }
-    }
-
-    protected Object clone() {
-        DHTMarkerSegment newGuy = (DHTMarkerSegment) super.clone();
-        newGuy.tables = new ArrayList(tables.size());
-        Iterator iter = tables.iterator();
-        while (iter.hasNext()) {
-            Htable table = (Htable) iter.next();
-            newGuy.tables.add(table.clone());
-        }
-        return newGuy;
-    }
-
-    IIOMetadataNode getNativeNode() {
-        IIOMetadataNode node = new IIOMetadataNode("dht");
-        for (int i= 0; i<tables.size(); i++) {
-            Htable table = (Htable) tables.get(i);
-            node.appendChild(table.getNativeNode());
-        }
-        return node;
-    }
-
-    /**
-     * Writes the data for this segment to the stream in
-     * valid JPEG format.
-     */
-    void write(ImageOutputStream ios) throws IOException {
-        // We don't write DHT segments; the IJG library does.
-    }
-
-    void print() {
-        printTag("DHT");
-        System.out.println("Num tables: "
-                           + Integer.toString(tables.size()));
-        for (int i= 0; i<tables.size(); i++) {
-            Htable table = (Htable) tables.get(i);
-            table.print();
-        }
-        System.out.println();
-
-    }
-
-    Htable getHtableFromNode(Node node) throws IIOInvalidTreeException {
-        return new Htable(node);
-    }
-
-    void addHtable(JPEGHuffmanTable table, boolean isDC, int id) {
-        tables.add(new Htable(table, isDC, id));
-    }
-
-    /**
-     * A Huffman table within a DHT marker segment.
-     */
-    class Htable implements Cloneable {
-        int tableClass;  // 0 == DC, 1 == AC
-        int tableID; // 0 - 4
-        private static final int NUM_LENGTHS = 16;
-        // # of codes of each length
-        short [] numCodes = new short[NUM_LENGTHS];
-        short [] values;
-
-        Htable(JPEGBuffer buffer) {
-            tableClass = buffer.buf[buffer.bufPtr] >>> 4;
-            tableID = buffer.buf[buffer.bufPtr++] & 0xf;
-            for (int i = 0; i < NUM_LENGTHS; i++) {
-                numCodes[i] = (short) (buffer.buf[buffer.bufPtr++] & 0xff);
-            }
-
-            int numValues = 0;
-            for (int i = 0; i < NUM_LENGTHS; i++) {
-                numValues += numCodes[i];
-            }
-            values = new short[numValues];
-            for (int i = 0; i < numValues; i++) {
-                values[i] = (short) (buffer.buf[buffer.bufPtr++] & 0xff);
-            }
-        }
-
-        Htable(JPEGHuffmanTable table, boolean isDC, int id) {
-            tableClass = isDC ? 0 : 1;
-            tableID = id;
-            numCodes = table.getLengths();
-            values = table.getValues();
-        }
-
-        Htable(Node node) throws IIOInvalidTreeException {
-            if (node.getNodeName().equals("dhtable")) {
-                NamedNodeMap attrs = node.getAttributes();
-                int count = attrs.getLength();
-                if (count != 2) {
-                    throw new IIOInvalidTreeException
-                        ("dhtable node must have 2 attributes", node);
-                }
-                tableClass = getAttributeValue(node, attrs, "class", 0, 1, true);
-                tableID = getAttributeValue(node, attrs, "htableId", 0, 3, true);
-                if (node instanceof IIOMetadataNode) {
-                    IIOMetadataNode ourNode = (IIOMetadataNode) node;
-                    JPEGHuffmanTable table =
-                        (JPEGHuffmanTable) ourNode.getUserObject();
-                    if (table == null) {
-                        throw new IIOInvalidTreeException
-                            ("dhtable node must have user object", node);
-                    }
-                    numCodes = table.getLengths();
-                    values = table.getValues();
-                } else {
-                    throw new IIOInvalidTreeException
-                        ("dhtable node must have user object", node);
-                }
-            } else {
-                throw new IIOInvalidTreeException
-                    ("Invalid node, expected dqtable", node);
-            }
-
-        }
-
-        protected Object clone() {
-            Htable newGuy = null;
-            try {
-                newGuy = (Htable) super.clone();
-            } catch (CloneNotSupportedException e) {} // won't happen
-            if (numCodes != null) {
-                newGuy.numCodes = (short []) numCodes.clone();
-            }
-            if (values != null) {
-                newGuy.values = (short []) values.clone();
-            }
-            return newGuy;
-        }
-
-        IIOMetadataNode getNativeNode() {
-            IIOMetadataNode node = new IIOMetadataNode("dhtable");
-            node.setAttribute("class", Integer.toString(tableClass));
-            node.setAttribute("htableId", Integer.toString(tableID));
-
-            node.setUserObject(new JPEGHuffmanTable(numCodes, values));
-
-            return node;
-        }
-
-
-        void print() {
-            System.out.println("Huffman Table");
-            System.out.println("table class: "
-                               + ((tableClass == 0) ? "DC":"AC"));
-            System.out.println("table id: " + Integer.toString(tableID));
-
-            (new JPEGHuffmanTable(numCodes, values)).toString();
-            /*
-              System.out.print("Lengths:");
-              for (int i=0; i<16; i++) {
-              System.out.print(" " + Integer.toString(numCodes[i]));
-              }
-              int count = 0;
-              if (values.length > 16) {
-              System.out.println("\nFirst 16 Values:");
-              count = 16;
-              } else {
-              System.out.println("\nValues:");
-              count = values.length;
-              }
-              for (int i=0; i<count; i++) {
-              System.out.println(Integer.toString(values[i]&0xff));
-              }
-            */
-        }
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/plugins/jpeg/DQTMarkerSegment.java b/ojluni/src/main/java/com/sun/imageio/plugins/jpeg/DQTMarkerSegment.java
deleted file mode 100755
index 34fe0d2..0000000
--- a/ojluni/src/main/java/com/sun/imageio/plugins/jpeg/DQTMarkerSegment.java
+++ /dev/null
@@ -1,309 +0,0 @@
-/*
- * Copyright (c) 2001, 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.imageio.plugins.jpeg;
-
-import javax.imageio.IIOException;
-import javax.imageio.metadata.IIOInvalidTreeException;
-import javax.imageio.metadata.IIOMetadataNode;
-import javax.imageio.stream.ImageOutputStream;
-import javax.imageio.plugins.jpeg.JPEGQTable;
-
-import java.io.IOException;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Iterator;
-
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.w3c.dom.NamedNodeMap;
-
-/**
- * A DQT (Define Quantization Table) marker segment.
- */
-class DQTMarkerSegment extends MarkerSegment {
-    List tables = new ArrayList();  // Could be 1 to 4
-
-    DQTMarkerSegment(float quality, boolean needTwo) {
-        super(JPEG.DQT);
-        tables.add(new Qtable(true, quality));
-        if (needTwo) {
-            tables.add(new Qtable(false, quality));
-        }
-    }
-
-    DQTMarkerSegment(JPEGBuffer buffer) throws IOException {
-        super(buffer);
-        int count = length;
-        while (count > 0) {
-            Qtable newGuy = new Qtable(buffer);
-            tables.add(newGuy);
-            count -= newGuy.data.length+1;
-        }
-        buffer.bufAvail -= length;
-    }
-
-    DQTMarkerSegment(JPEGQTable[] qtables) {
-        super(JPEG.DQT);
-        for (int i = 0; i < qtables.length; i++) {
-            tables.add(new Qtable(qtables[i], i));
-        }
-    }
-
-    DQTMarkerSegment(Node node) throws IIOInvalidTreeException {
-        super(JPEG.DQT);
-        NodeList children = node.getChildNodes();
-        int size = children.getLength();
-        if ((size < 1) || (size > 4)) {
-            throw new IIOInvalidTreeException("Invalid DQT node", node);
-        }
-        for (int i = 0; i < size; i++) {
-            tables.add(new Qtable(children.item(i)));
-        }
-    }
-
-    protected Object clone() {
-        DQTMarkerSegment newGuy = (DQTMarkerSegment) super.clone();
-        newGuy.tables = new ArrayList(tables.size());
-        Iterator iter = tables.iterator();
-        while (iter.hasNext()) {
-            Qtable table = (Qtable) iter.next();
-            newGuy.tables.add(table.clone());
-        }
-        return newGuy;
-    }
-
-    IIOMetadataNode getNativeNode() {
-        IIOMetadataNode node = new IIOMetadataNode("dqt");
-        for (int i= 0; i<tables.size(); i++) {
-            Qtable table = (Qtable) tables.get(i);
-            node.appendChild(table.getNativeNode());
-        }
-        return node;
-    }
-
-    /**
-     * Writes the data for this segment to the stream in
-     * valid JPEG format.
-     */
-    void write(ImageOutputStream ios) throws IOException {
-        // We don't write DQT segments; the IJG library does.
-    }
-
-    void print() {
-        printTag("DQT");
-        System.out.println("Num tables: "
-                           + Integer.toString(tables.size()));
-        for (int i= 0; i<tables.size(); i++) {
-            Qtable table = (Qtable) tables.get(i);
-            table.print();
-        }
-        System.out.println();
-    }
-
-    /**
-     * Assuming the given table was generated by scaling the "standard"
-     * visually lossless luminance table, extract the scale factor that
-     * was used.
-     */
-    Qtable getChromaForLuma(Qtable luma) {
-        Qtable newGuy = null;
-        // Determine if the table is all the same values
-        // if so, use the same table
-        boolean allSame = true;
-        for (int i = 1; i < luma.QTABLE_SIZE; i++) {
-            if (luma.data[i] != luma.data[i-1]) {
-                allSame = false;
-                break;
-            }
-        }
-        if (allSame) {
-            newGuy = (Qtable) luma.clone();
-            newGuy.tableID = 1;
-        } else {
-            // Otherwise, find the largest coefficient less than 255.  This is
-            // the largest value that we know did not clamp on scaling.
-            int largestPos = 0;
-            for (int i = 1; i < luma.QTABLE_SIZE; i++) {
-                if (luma.data[i] > luma.data[largestPos]) {
-                    largestPos = i;
-                }
-            }
-            // Compute the scale factor by dividing it by the value in the
-            // same position from the "standard" table.
-            // If the given table was not generated by scaling the standard,
-            // the resulting table will still be reasonable, as it will reflect
-            // a comparable scaling of chrominance frequency response of the
-            // eye.
-            float scaleFactor = ((float)(luma.data[largestPos]))
-                / ((float)(JPEGQTable.K1Div2Luminance.getTable()[largestPos]));
-            //    generate a new table
-            JPEGQTable jpegTable =
-                JPEGQTable.K2Div2Chrominance.getScaledInstance(scaleFactor,
-                                                               true);
-            newGuy = new Qtable(jpegTable, 1);
-        }
-        return newGuy;
-    }
-
-    Qtable getQtableFromNode(Node node) throws IIOInvalidTreeException {
-        return new Qtable(node);
-    }
-
-    /**
-     * A quantization table within a DQT marker segment.
-     */
-    class Qtable implements Cloneable {
-        int elementPrecision;
-        int tableID;
-        final int QTABLE_SIZE = 64;
-        int [] data; // 64 elements, in natural order
-
-        /**
-         * The zigzag-order position of the i'th element
-         * of a DCT block read in natural order.
-         */
-        private final int [] zigzag = {
-            0,  1,  5,  6, 14, 15, 27, 28,
-            2,  4,  7, 13, 16, 26, 29, 42,
-            3,  8, 12, 17, 25, 30, 41, 43,
-            9, 11, 18, 24, 31, 40, 44, 53,
-            10, 19, 23, 32, 39, 45, 52, 54,
-            20, 22, 33, 38, 46, 51, 55, 60,
-            21, 34, 37, 47, 50, 56, 59, 61,
-            35, 36, 48, 49, 57, 58, 62, 63
-        };
-
-        Qtable(boolean wantLuma, float quality) {
-            elementPrecision = 0;
-            JPEGQTable base = null;
-            if (wantLuma) {
-                tableID = 0;
-                base = JPEGQTable.K1Div2Luminance;
-            } else {
-                tableID = 1;
-                base = JPEGQTable.K2Div2Chrominance;
-            }
-            if (quality != JPEG.DEFAULT_QUALITY) {
-                quality = JPEG.convertToLinearQuality(quality);
-                if (wantLuma) {
-                    base = JPEGQTable.K1Luminance.getScaledInstance
-                        (quality, true);
-                } else {
-                    base = JPEGQTable.K2Div2Chrominance.getScaledInstance
-                        (quality, true);
-                }
-            }
-            data = base.getTable();
-        }
-
-        Qtable(JPEGBuffer buffer) throws IIOException {
-            elementPrecision = buffer.buf[buffer.bufPtr] >>> 4;
-            tableID = buffer.buf[buffer.bufPtr++] & 0xf;
-            if (elementPrecision != 0) {
-                // IJG is compiled for 8-bits, so this shouldn't happen
-                throw new IIOException ("Unsupported element precision");
-            }
-            data = new int [QTABLE_SIZE];
-            // Read from zig-zag order to natural order
-            for (int i = 0; i < QTABLE_SIZE; i++) {
-                data[i] = buffer.buf[buffer.bufPtr+zigzag[i]] & 0xff;
-            }
-            buffer.bufPtr += QTABLE_SIZE;
-        }
-
-        Qtable(JPEGQTable table, int id) {
-            elementPrecision = 0;
-            tableID = id;
-            data = table.getTable();
-        }
-
-        Qtable(Node node) throws IIOInvalidTreeException {
-            if (node.getNodeName().equals("dqtable")) {
-                NamedNodeMap attrs = node.getAttributes();
-                int count = attrs.getLength();
-                if ((count < 1) || (count > 2)) {
-                    throw new IIOInvalidTreeException
-                        ("dqtable node must have 1 or 2 attributes", node);
-                }
-                elementPrecision = 0;
-                tableID = getAttributeValue(node, attrs, "qtableId", 0, 3, true);
-                if (node instanceof IIOMetadataNode) {
-                    IIOMetadataNode ourNode = (IIOMetadataNode) node;
-                    JPEGQTable table = (JPEGQTable) ourNode.getUserObject();
-                    if (table == null) {
-                        throw new IIOInvalidTreeException
-                            ("dqtable node must have user object", node);
-                    }
-                    data = table.getTable();
-                } else {
-                    throw new IIOInvalidTreeException
-                        ("dqtable node must have user object", node);
-                }
-            } else {
-                throw new IIOInvalidTreeException
-                    ("Invalid node, expected dqtable", node);
-            }
-        }
-
-        protected Object clone() {
-            Qtable newGuy = null;
-            try {
-                newGuy = (Qtable) super.clone();
-            } catch (CloneNotSupportedException e) {} // won't happen
-            if (data != null) {
-                newGuy.data = (int []) data.clone();
-            }
-            return newGuy;
-        }
-
-        IIOMetadataNode getNativeNode() {
-            IIOMetadataNode node = new IIOMetadataNode("dqtable");
-            node.setAttribute("elementPrecision",
-                              Integer.toString(elementPrecision));
-            node.setAttribute("qtableId",
-                              Integer.toString(tableID));
-            node.setUserObject(new JPEGQTable(data));
-            return node;
-        }
-
-        void print() {
-            System.out.println("Table id: " + Integer.toString(tableID));
-            System.out.println("Element precision: "
-                               + Integer.toString(elementPrecision));
-
-            (new JPEGQTable(data)).toString();
-            /*
-              for (int i = 0; i < 64; i++) {
-              if (i % 8 == 0) {
-              System.out.println();
-              }
-              System.out.print(" " + Integer.toString(data[i]));
-              }
-              System.out.println();
-            */
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/plugins/jpeg/DRIMarkerSegment.java b/ojluni/src/main/java/com/sun/imageio/plugins/jpeg/DRIMarkerSegment.java
deleted file mode 100755
index 8033fbd..0000000
--- a/ojluni/src/main/java/com/sun/imageio/plugins/jpeg/DRIMarkerSegment.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Copyright (c) 2001, 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.imageio.plugins.jpeg;
-
-import javax.imageio.metadata.IIOInvalidTreeException;
-import javax.imageio.metadata.IIOMetadataNode;
-import javax.imageio.stream.ImageOutputStream;
-
-import java.io.IOException;
-
-import org.w3c.dom.Node;
-
-/**
-     * A DRI (Define Restart Interval) marker segment.
-     */
-class DRIMarkerSegment extends MarkerSegment {
-    /**
-     * Restart interval, or 0 if none is specified.
-     */
-    int restartInterval = 0;
-
-    DRIMarkerSegment(JPEGBuffer buffer)
-        throws IOException {
-        super(buffer);
-        restartInterval = (buffer.buf[buffer.bufPtr++] & 0xff) << 8;
-        restartInterval |= buffer.buf[buffer.bufPtr++] & 0xff;
-        buffer.bufAvail -= length;
-    }
-
-    DRIMarkerSegment(Node node) throws IIOInvalidTreeException {
-        super(JPEG.DRI);
-        updateFromNativeNode(node, true);
-    }
-
-    IIOMetadataNode getNativeNode() {
-        IIOMetadataNode node = new IIOMetadataNode("dri");
-        node.setAttribute("interval", Integer.toString(restartInterval));
-        return node;
-    }
-
-    void updateFromNativeNode(Node node, boolean fromScratch)
-        throws IIOInvalidTreeException {
-        restartInterval = getAttributeValue(node, null, "interval",
-                                            0, 65535, true);
-    }
-
-    /**
-     * Writes the data for this segment to the stream in
-     * valid JPEG format.
-     */
-    void write(ImageOutputStream ios) throws IOException {
-        // We don't write DRI segments; the IJG library does.
-    }
-
-    void print() {
-        printTag("DRI");
-        System.out.println("Interval: "
-                           + Integer.toString(restartInterval));
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/plugins/jpeg/JFIFMarkerSegment.java b/ojluni/src/main/java/com/sun/imageio/plugins/jpeg/JFIFMarkerSegment.java
deleted file mode 100755
index 3adcddc..0000000
--- a/ojluni/src/main/java/com/sun/imageio/plugins/jpeg/JFIFMarkerSegment.java
+++ /dev/null
@@ -1,1564 +0,0 @@
-/*
- * Copyright (c) 2001, 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.imageio.plugins.jpeg;
-
-import javax.imageio.IIOException;
-import javax.imageio.IIOImage;
-import javax.imageio.ImageTypeSpecifier;
-import javax.imageio.ImageReader;
-import javax.imageio.metadata.IIOInvalidTreeException;
-import javax.imageio.metadata.IIOMetadataNode;
-import javax.imageio.metadata.IIOMetadata;
-import javax.imageio.stream.ImageInputStream;
-import javax.imageio.stream.ImageOutputStream;
-import javax.imageio.stream.MemoryCacheImageOutputStream;
-import javax.imageio.event.IIOReadProgressListener;
-
-import java.awt.Graphics;
-import java.awt.color.ICC_Profile;
-import java.awt.color.ICC_ColorSpace;
-import java.awt.color.ColorSpace;
-import java.awt.image.ColorModel;
-import java.awt.image.SampleModel;
-import java.awt.image.IndexColorModel;
-import java.awt.image.ComponentColorModel;
-import java.awt.image.BufferedImage;
-import java.awt.image.DataBuffer;
-import java.awt.image.DataBufferByte;
-import java.awt.image.Raster;
-import java.awt.image.WritableRaster;
-import java.io.IOException;
-import java.io.ByteArrayOutputStream;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Iterator;
-
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.w3c.dom.NamedNodeMap;
-
-/**
- * A JFIF (JPEG File Interchange Format) APP0 (Application-Specific)
- * marker segment.  Inner classes are included for JFXX extension
- * marker segments, for different varieties of thumbnails, and for
- * ICC Profile APP2 marker segments.  Any of these secondary types
- * that occur are kept as members of a single JFIFMarkerSegment object.
- */
-class JFIFMarkerSegment extends MarkerSegment {
-    int majorVersion;
-    int minorVersion;
-    int resUnits;
-    int Xdensity;
-    int Ydensity;
-    int thumbWidth;
-    int thumbHeight;
-    JFIFThumbRGB thumb = null;  // If present
-    ArrayList extSegments = new ArrayList();
-    ICCMarkerSegment iccSegment = null; // optional ICC
-    private static final int THUMB_JPEG = 0x10;
-    private static final int THUMB_PALETTE = 0x11;
-    private static final int THUMB_UNASSIGNED = 0x12;
-    private static final int THUMB_RGB = 0x13;
-    private static final int DATA_SIZE = 14;
-    private static final int ID_SIZE = 5;
-    private final int MAX_THUMB_WIDTH = 255;
-    private final int MAX_THUMB_HEIGHT = 255;
-
-    private final boolean debug = false;
-
-    /**
-     * Set to <code>true</code> when reading the chunks of an
-     * ICC profile.  All chunks are consolidated to create a single
-     * "segment" containing all the chunks.  This flag is a state
-     * variable identifying whether to construct a new segment or
-     * append to an old one.
-     */
-    private boolean inICC = false;
-
-    /**
-     * A placeholder for an ICC profile marker segment under
-     * construction.  The segment is not added to the list
-     * until all chunks have been read.
-     */
-    private ICCMarkerSegment tempICCSegment = null;
-
-
-    /**
-     * Default constructor.  Used to create a default JFIF header
-     */
-    JFIFMarkerSegment() {
-        super(JPEG.APP0);
-        majorVersion = 1;
-        minorVersion = 2;
-        resUnits = JPEG.DENSITY_UNIT_ASPECT_RATIO;
-        Xdensity = 1;
-        Ydensity = 1;
-        thumbWidth = 0;
-        thumbHeight = 0;
-    }
-
-    /**
-     * Constructs a JFIF header by reading from a stream wrapped
-     * in a JPEGBuffer.
-     */
-    JFIFMarkerSegment(JPEGBuffer buffer) throws IOException {
-        super(buffer);
-        buffer.bufPtr += ID_SIZE;  // skip the id, we already checked it
-
-        majorVersion = buffer.buf[buffer.bufPtr++];
-        minorVersion = buffer.buf[buffer.bufPtr++];
-        resUnits = buffer.buf[buffer.bufPtr++];
-        Xdensity = (buffer.buf[buffer.bufPtr++] & 0xff) << 8;
-        Xdensity |= buffer.buf[buffer.bufPtr++] & 0xff;
-        Ydensity = (buffer.buf[buffer.bufPtr++] & 0xff) << 8;
-        Ydensity |= buffer.buf[buffer.bufPtr++] & 0xff;
-        thumbWidth = buffer.buf[buffer.bufPtr++] & 0xff;
-        thumbHeight = buffer.buf[buffer.bufPtr++] & 0xff;
-        buffer.bufAvail -= DATA_SIZE;
-        if (thumbWidth > 0) {
-            thumb = new JFIFThumbRGB(buffer, thumbWidth, thumbHeight);
-        }
-    }
-
-    /**
-     * Constructs a JFIF header from a DOM Node.
-     */
-    JFIFMarkerSegment(Node node) throws IIOInvalidTreeException {
-        this();
-        updateFromNativeNode(node, true);
-    }
-
-    /**
-     * Returns a deep-copy clone of this object.
-     */
-    protected Object clone() {
-        JFIFMarkerSegment newGuy = (JFIFMarkerSegment) super.clone();
-        if (!extSegments.isEmpty()) { // Clone the list with a deep copy
-            newGuy.extSegments = new ArrayList();
-            for (Iterator iter = extSegments.iterator(); iter.hasNext();) {
-                JFIFExtensionMarkerSegment jfxx =
-                    (JFIFExtensionMarkerSegment) iter.next();
-                newGuy.extSegments.add(jfxx.clone());
-            }
-        }
-        if (iccSegment != null) {
-            newGuy.iccSegment = (ICCMarkerSegment) iccSegment.clone();
-        }
-        return newGuy;
-    }
-
-    /**
-     * Add an JFXX extension marker segment from the stream wrapped
-     * in the JPEGBuffer to the list of extension segments.
-     */
-    void addJFXX(JPEGBuffer buffer, JPEGImageReader reader)
-        throws IOException {
-        extSegments.add(new JFIFExtensionMarkerSegment(buffer, reader));
-    }
-
-    /**
-     * Adds an ICC Profile APP2 segment from the stream wrapped
-     * in the JPEGBuffer.
-     */
-    void addICC(JPEGBuffer buffer) throws IOException {
-        if (inICC == false) {
-            if (iccSegment != null) {
-                throw new IIOException
-                    ("> 1 ICC APP2 Marker Segment not supported");
-            }
-            tempICCSegment = new ICCMarkerSegment(buffer);
-            if (inICC == false) { // Just one chunk
-                iccSegment = tempICCSegment;
-                tempICCSegment = null;
-            }
-        } else {
-            if (tempICCSegment.addData(buffer) == true) {
-                iccSegment = tempICCSegment;
-                tempICCSegment = null;
-            }
-        }
-    }
-
-    /**
-     * Add an ICC Profile APP2 segment by constructing it from
-     * the given ICC_ColorSpace object.
-     */
-    void addICC(ICC_ColorSpace cs) throws IOException {
-        if (iccSegment != null) {
-            throw new IIOException
-                ("> 1 ICC APP2 Marker Segment not supported");
-        }
-        iccSegment = new ICCMarkerSegment(cs);
-    }
-
-    /**
-     * Returns a tree of DOM nodes representing this object and any
-     * subordinate JFXX extension or ICC Profile segments.
-     */
-    IIOMetadataNode getNativeNode() {
-        IIOMetadataNode node = new IIOMetadataNode("app0JFIF");
-        node.setAttribute("majorVersion", Integer.toString(majorVersion));
-        node.setAttribute("minorVersion", Integer.toString(minorVersion));
-        node.setAttribute("resUnits", Integer.toString(resUnits));
-        node.setAttribute("Xdensity", Integer.toString(Xdensity));
-        node.setAttribute("Ydensity", Integer.toString(Ydensity));
-        node.setAttribute("thumbWidth", Integer.toString(thumbWidth));
-        node.setAttribute("thumbHeight", Integer.toString(thumbHeight));
-        if (!extSegments.isEmpty()) {
-            IIOMetadataNode JFXXnode = new IIOMetadataNode("JFXX");
-            node.appendChild(JFXXnode);
-            for (Iterator iter = extSegments.iterator(); iter.hasNext();) {
-                JFIFExtensionMarkerSegment seg =
-                    (JFIFExtensionMarkerSegment) iter.next();
-                JFXXnode.appendChild(seg.getNativeNode());
-            }
-        }
-        if (iccSegment != null) {
-            node.appendChild(iccSegment.getNativeNode());
-        }
-
-        return node;
-    }
-
-    /**
-     * Updates the data in this object from the given DOM Node tree.
-     * If fromScratch is true, this object is being constructed.
-     * Otherwise an existing object is being modified.
-     * Throws an IIOInvalidTreeException if the tree is invalid in
-     * any way.
-     */
-    void updateFromNativeNode(Node node, boolean fromScratch)
-        throws IIOInvalidTreeException {
-        // none of the attributes are required
-        NamedNodeMap attrs = node.getAttributes();
-        if (attrs.getLength() > 0) {
-            int value = getAttributeValue(node, attrs, "majorVersion",
-                                          0, 255, false);
-            majorVersion = (value != -1) ? value : majorVersion;
-            value = getAttributeValue(node, attrs, "minorVersion",
-                                      0, 255, false);
-            minorVersion = (value != -1) ? value : minorVersion;
-            value = getAttributeValue(node, attrs, "resUnits", 0, 2, false);
-            resUnits = (value != -1) ? value : resUnits;
-            value = getAttributeValue(node, attrs, "Xdensity", 1, 65535, false);
-            Xdensity = (value != -1) ? value : Xdensity;
-            value = getAttributeValue(node, attrs, "Ydensity", 1, 65535, false);
-            Ydensity = (value != -1) ? value : Ydensity;
-            value = getAttributeValue(node, attrs, "thumbWidth", 0, 255, false);
-            thumbWidth = (value != -1) ? value : thumbWidth;
-            value = getAttributeValue(node, attrs, "thumbHeight", 0, 255, false);
-            thumbHeight = (value != -1) ? value : thumbHeight;
-        }
-        if (node.hasChildNodes()) {
-            NodeList children = node.getChildNodes();
-            int count = children.getLength();
-            if (count > 2) {
-                throw new IIOInvalidTreeException
-                    ("app0JFIF node cannot have > 2 children", node);
-            }
-            for (int i = 0; i < count; i++) {
-                Node child = children.item(i);
-                String name = child.getNodeName();
-                if (name.equals("JFXX")) {
-                    if ((!extSegments.isEmpty()) && fromScratch) {
-                        throw new IIOInvalidTreeException
-                            ("app0JFIF node cannot have > 1 JFXX node", node);
-                    }
-                    NodeList exts = child.getChildNodes();
-                    int extCount = exts.getLength();
-                    for (int j = 0; j < extCount; j++) {
-                        Node ext = exts.item(j);
-                        extSegments.add(new JFIFExtensionMarkerSegment(ext));
-                    }
-                }
-                if (name.equals("app2ICC")) {
-                    if ((iccSegment != null) && fromScratch) {
-                        throw new IIOInvalidTreeException
-                            ("> 1 ICC APP2 Marker Segment not supported", node);
-                    }
-                    iccSegment = new ICCMarkerSegment(child);
-                }
-            }
-        }
-    }
-
-    int getThumbnailWidth(int index) {
-        if (thumb != null) {
-            if (index == 0) {
-                return thumb.getWidth();
-            }
-            index--;
-        }
-        JFIFExtensionMarkerSegment jfxx =
-            (JFIFExtensionMarkerSegment) extSegments.get(index);
-        return jfxx.thumb.getWidth();
-    }
-
-    int getThumbnailHeight(int index) {
-        if (thumb != null) {
-            if (index == 0) {
-                return thumb.getHeight();
-            }
-            index--;
-        }
-        JFIFExtensionMarkerSegment jfxx =
-            (JFIFExtensionMarkerSegment) extSegments.get(index);
-        return jfxx.thumb.getHeight();
-    }
-
-    BufferedImage getThumbnail(ImageInputStream iis,
-                               int index,
-                               JPEGImageReader reader) throws IOException {
-        reader.thumbnailStarted(index);
-        BufferedImage ret = null;
-        if ((thumb != null) && (index == 0)) {
-                ret = thumb.getThumbnail(iis, reader);
-        } else {
-            if (thumb != null) {
-                index--;
-            }
-            JFIFExtensionMarkerSegment jfxx =
-                (JFIFExtensionMarkerSegment) extSegments.get(index);
-            ret = jfxx.thumb.getThumbnail(iis, reader);
-        }
-        reader.thumbnailComplete();
-        return ret;
-    }
-
-
-    /**
-     * Writes the data for this segment to the stream in
-     * valid JPEG format.  Assumes that there will be no thumbnail.
-     */
-    void write(ImageOutputStream ios,
-               JPEGImageWriter writer) throws IOException {
-        // No thumbnail
-        write(ios, null, writer);
-    }
-
-    /**
-     * Writes the data for this segment to the stream in
-     * valid JPEG format.  The length written takes the thumbnail
-     * width and height into account.  If necessary, the thumbnail
-     * is clipped to 255 x 255 and a warning is sent to the writer
-     * argument.  Progress updates are sent to the writer argument.
-     */
-    void write(ImageOutputStream ios,
-               BufferedImage thumb,
-               JPEGImageWriter writer) throws IOException {
-        int thumbWidth = 0;
-        int thumbHeight = 0;
-        int thumbLength = 0;
-        int [] thumbData = null;
-        if (thumb != null) {
-            // Clip if necessary and get the data in thumbData
-            thumbWidth = thumb.getWidth();
-            thumbHeight = thumb.getHeight();
-            if ((thumbWidth > MAX_THUMB_WIDTH)
-                || (thumbHeight > MAX_THUMB_HEIGHT)) {
-                writer.warningOccurred(JPEGImageWriter.WARNING_THUMB_CLIPPED);
-            }
-            thumbWidth = Math.min(thumbWidth, MAX_THUMB_WIDTH);
-            thumbHeight = Math.min(thumbHeight, MAX_THUMB_HEIGHT);
-            thumbData = thumb.getRaster().getPixels(0, 0,
-                                                    thumbWidth, thumbHeight,
-                                                    (int []) null);
-            thumbLength = thumbData.length;
-        }
-        length = DATA_SIZE + LENGTH_SIZE + thumbLength;
-        writeTag(ios);
-        byte [] id = {0x4A, 0x46, 0x49, 0x46, 0x00};
-        ios.write(id);
-        ios.write(majorVersion);
-        ios.write(minorVersion);
-        ios.write(resUnits);
-        write2bytes(ios, Xdensity);
-        write2bytes(ios, Ydensity);
-        ios.write(thumbWidth);
-        ios.write(thumbHeight);
-        if (thumbData != null) {
-            writer.thumbnailStarted(0);
-            writeThumbnailData(ios, thumbData, writer);
-            writer.thumbnailComplete();
-        }
-    }
-
-    /*
-     * Write out the values in the integer array as a sequence of bytes,
-     * reporting progress to the writer argument.
-     */
-    void writeThumbnailData(ImageOutputStream ios,
-                            int [] thumbData,
-                            JPEGImageWriter writer) throws IOException {
-        int progInterval = thumbData.length / 20;  // approx. every 5%
-        if (progInterval == 0) {
-            progInterval = 1;
-        }
-        for (int i = 0; i < thumbData.length; i++) {
-            ios.write(thumbData[i]);
-            if ((i > progInterval) && (i % progInterval == 0)) {
-                writer.thumbnailProgress
-                    (((float) i * 100) / ((float) thumbData.length));
-            }
-        }
-    }
-
-    /**
-     * Write out this JFIF Marker Segment, including a thumbnail or
-     * appending a series of JFXX Marker Segments, as appropriate.
-     * Warnings and progress reports are sent to the writer argument.
-     * The list of thumbnails is matched to the list of JFXX extension
-     * segments, if any, in order to determine how to encode the
-     * thumbnails.  If there are more thumbnails than metadata segments,
-     * default encoding is used for the extra thumbnails.
-     */
-    void writeWithThumbs(ImageOutputStream ios,
-                         List thumbnails,
-                         JPEGImageWriter writer) throws IOException {
-        if (thumbnails != null) {
-            JFIFExtensionMarkerSegment jfxx = null;
-            if (thumbnails.size() == 1) {
-                if (!extSegments.isEmpty()) {
-                    jfxx = (JFIFExtensionMarkerSegment) extSegments.get(0);
-                }
-                writeThumb(ios,
-                           (BufferedImage) thumbnails.get(0),
-                           jfxx,
-                           0,
-                           true,
-                           writer);
-            } else {
-                // All others write as separate JFXX segments
-                write(ios, writer);  // Just the header without any thumbnail
-                for (int i = 0; i < thumbnails.size(); i++) {
-                    jfxx = null;
-                    if (i < extSegments.size()) {
-                        jfxx = (JFIFExtensionMarkerSegment) extSegments.get(i);
-                    }
-                    writeThumb(ios,
-                               (BufferedImage) thumbnails.get(i),
-                               jfxx,
-                               i,
-                               false,
-                               writer);
-                }
-            }
-        } else {  // No thumbnails
-            write(ios, writer);
-        }
-
-    }
-
-    private void writeThumb(ImageOutputStream ios,
-                            BufferedImage thumb,
-                            JFIFExtensionMarkerSegment jfxx,
-                            int index,
-                            boolean onlyOne,
-                            JPEGImageWriter writer) throws IOException {
-        ColorModel cm = thumb.getColorModel();
-        ColorSpace cs = cm.getColorSpace();
-
-        if (cm instanceof IndexColorModel) {
-            // We never write a palette image into the header
-            // So if it's the only one, we need to write the header first
-            if (onlyOne) {
-                write(ios, writer);
-            }
-            if ((jfxx == null)
-                || (jfxx.code == THUMB_PALETTE)) {
-                writeJFXXSegment(index, thumb, ios, writer); // default
-            } else {
-                // Expand to RGB
-                BufferedImage thumbRGB =
-                    ((IndexColorModel) cm).convertToIntDiscrete
-                    (thumb.getRaster(), false);
-                jfxx.setThumbnail(thumbRGB);
-                writer.thumbnailStarted(index);
-                jfxx.write(ios, writer);  // Handles clipping if needed
-                writer.thumbnailComplete();
-            }
-        } else if (cs.getType() == ColorSpace.TYPE_RGB) {
-            if (jfxx == null) {
-                if (onlyOne) {
-                    write(ios, thumb, writer); // As part of the header
-                } else {
-                    writeJFXXSegment(index, thumb, ios, writer); // default
-                }
-            } else {
-                // If this is the only one, write the header first
-                if (onlyOne) {
-                    write(ios, writer);
-                }
-                if (jfxx.code == THUMB_PALETTE) {
-                    writeJFXXSegment(index, thumb, ios, writer); // default
-                    writer.warningOccurred
-                        (JPEGImageWriter.WARNING_NO_RGB_THUMB_AS_INDEXED);
-                } else {
-                    jfxx.setThumbnail(thumb);
-                    writer.thumbnailStarted(index);
-                    jfxx.write(ios, writer);  // Handles clipping if needed
-                    writer.thumbnailComplete();
-                }
-            }
-        } else if (cs.getType() == ColorSpace.TYPE_GRAY) {
-            if (jfxx == null) {
-                if (onlyOne) {
-                    BufferedImage thumbRGB = expandGrayThumb(thumb);
-                    write(ios, thumbRGB, writer); // As part of the header
-                } else {
-                    writeJFXXSegment(index, thumb, ios, writer); // default
-                }
-            } else {
-                // If this is the only one, write the header first
-                if (onlyOne) {
-                    write(ios, writer);
-                }
-                if (jfxx.code == THUMB_RGB) {
-                    BufferedImage thumbRGB = expandGrayThumb(thumb);
-                    writeJFXXSegment(index, thumbRGB, ios, writer);
-                } else if (jfxx.code == THUMB_JPEG) {
-                    jfxx.setThumbnail(thumb);
-                    writer.thumbnailStarted(index);
-                    jfxx.write(ios, writer);  // Handles clipping if needed
-                    writer.thumbnailComplete();
-                } else if (jfxx.code == THUMB_PALETTE) {
-                    writeJFXXSegment(index, thumb, ios, writer); // default
-                    writer.warningOccurred
-                        (JPEGImageWriter.WARNING_NO_GRAY_THUMB_AS_INDEXED);
-                }
-            }
-        } else {
-            writer.warningOccurred
-                (JPEGImageWriter.WARNING_ILLEGAL_THUMBNAIL);
-        }
-    }
-
-    // Could put reason codes in here to be parsed in writeJFXXSegment
-    // in order to provide more meaningful warnings.
-    private class IllegalThumbException extends Exception {}
-
-    /**
-     * Writes out a new JFXX extension segment, without saving it.
-     */
-    private void writeJFXXSegment(int index,
-                                  BufferedImage thumbnail,
-                                  ImageOutputStream ios,
-                                  JPEGImageWriter writer) throws IOException {
-        JFIFExtensionMarkerSegment jfxx = null;
-        try {
-             jfxx = new JFIFExtensionMarkerSegment(thumbnail);
-        } catch (IllegalThumbException e) {
-            writer.warningOccurred
-                (JPEGImageWriter.WARNING_ILLEGAL_THUMBNAIL);
-            return;
-        }
-        writer.thumbnailStarted(index);
-        jfxx.write(ios, writer);
-        writer.thumbnailComplete();
-    }
-
-
-    /**
-     * Return an RGB image that is the expansion of the given grayscale
-     * image.
-     */
-    private static BufferedImage expandGrayThumb(BufferedImage thumb) {
-        BufferedImage ret = new BufferedImage(thumb.getWidth(),
-                                              thumb.getHeight(),
-                                              BufferedImage.TYPE_INT_RGB);
-        Graphics g = ret.getGraphics();
-        g.drawImage(thumb, 0, 0, null);
-        return ret;
-    }
-
-    /**
-     * Writes out a default JFIF marker segment to the given
-     * output stream.  If <code>thumbnails</code> is not <code>null</code>,
-     * writes out the set of thumbnail images as JFXX marker segments, or
-     * incorporated into the JFIF segment if appropriate.
-     * If <code>iccProfile</code> is not <code>null</code>,
-     * writes out the profile after the JFIF segment using as many APP2
-     * marker segments as necessary.
-     */
-    static void writeDefaultJFIF(ImageOutputStream ios,
-                                 List thumbnails,
-                                 ICC_Profile iccProfile,
-                                 JPEGImageWriter writer)
-        throws IOException {
-
-        JFIFMarkerSegment jfif = new JFIFMarkerSegment();
-        jfif.writeWithThumbs(ios, thumbnails, writer);
-        if (iccProfile != null) {
-            writeICC(iccProfile, ios);
-        }
-    }
-
-    /**
-     * Prints out the contents of this object to System.out for debugging.
-     */
-    void print() {
-        printTag("JFIF");
-        System.out.print("Version ");
-        System.out.print(majorVersion);
-        System.out.println(".0"
-                           + Integer.toString(minorVersion));
-        System.out.print("Resolution units: ");
-        System.out.println(resUnits);
-        System.out.print("X density: ");
-        System.out.println(Xdensity);
-        System.out.print("Y density: ");
-        System.out.println(Ydensity);
-        System.out.print("Thumbnail Width: ");
-        System.out.println(thumbWidth);
-        System.out.print("Thumbnail Height: ");
-        System.out.println(thumbHeight);
-        if (!extSegments.isEmpty()) {
-            for (Iterator iter = extSegments.iterator(); iter.hasNext();) {
-                JFIFExtensionMarkerSegment extSegment =
-                    (JFIFExtensionMarkerSegment) iter.next();
-                extSegment.print();
-            }
-        }
-        if (iccSegment != null) {
-            iccSegment.print();
-        }
-    }
-
-    /**
-     * A JFIF extension APP0 marker segment.
-     */
-    class JFIFExtensionMarkerSegment extends MarkerSegment {
-        int code;
-        JFIFThumb thumb;
-        private static final int DATA_SIZE = 6;
-        private static final int ID_SIZE = 5;
-
-        JFIFExtensionMarkerSegment(JPEGBuffer buffer, JPEGImageReader reader)
-            throws IOException {
-
-            super(buffer);
-            buffer.bufPtr += ID_SIZE;  // skip the id, we already checked it
-
-            code = buffer.buf[buffer.bufPtr++] & 0xff;
-            buffer.bufAvail -= DATA_SIZE;
-            if (code == THUMB_JPEG) {
-                thumb = new JFIFThumbJPEG(buffer, length, reader);
-            } else {
-                buffer.loadBuf(2);
-                int thumbX = buffer.buf[buffer.bufPtr++] & 0xff;
-                int thumbY = buffer.buf[buffer.bufPtr++] & 0xff;
-                buffer.bufAvail -= 2;
-                // following constructors handle bufAvail
-                if (code == THUMB_PALETTE) {
-                    thumb = new JFIFThumbPalette(buffer, thumbX, thumbY);
-                } else {
-                    thumb = new JFIFThumbRGB(buffer, thumbX, thumbY);
-                }
-            }
-        }
-
-        JFIFExtensionMarkerSegment(Node node) throws IIOInvalidTreeException {
-            super(JPEG.APP0);
-            NamedNodeMap attrs = node.getAttributes();
-            if (attrs.getLength() > 0) {
-                code = getAttributeValue(node,
-                                         attrs,
-                                         "extensionCode",
-                                         THUMB_JPEG,
-                                         THUMB_RGB,
-                                         false);
-                if (code == THUMB_UNASSIGNED) {
-                throw new IIOInvalidTreeException
-                    ("invalid extensionCode attribute value", node);
-                }
-            } else {
-                code = THUMB_UNASSIGNED;
-            }
-            // Now the child
-            if (node.getChildNodes().getLength() != 1) {
-                throw new IIOInvalidTreeException
-                    ("app0JFXX node must have exactly 1 child", node);
-            }
-            Node child = node.getFirstChild();
-            String name = child.getNodeName();
-            if (name.equals("JFIFthumbJPEG")) {
-                if (code == THUMB_UNASSIGNED) {
-                    code = THUMB_JPEG;
-                }
-                thumb = new JFIFThumbJPEG(child);
-            } else if (name.equals("JFIFthumbPalette")) {
-                if (code == THUMB_UNASSIGNED) {
-                    code = THUMB_PALETTE;
-                }
-                thumb = new JFIFThumbPalette(child);
-            } else if (name.equals("JFIFthumbRGB")) {
-                if (code == THUMB_UNASSIGNED) {
-                    code = THUMB_RGB;
-                }
-                thumb = new JFIFThumbRGB(child);
-            } else {
-                throw new IIOInvalidTreeException
-                    ("unrecognized app0JFXX child node", node);
-            }
-        }
-
-        JFIFExtensionMarkerSegment(BufferedImage thumbnail)
-            throws IllegalThumbException {
-
-            super(JPEG.APP0);
-            ColorModel cm = thumbnail.getColorModel();
-            int csType = cm.getColorSpace().getType();
-            if (cm.hasAlpha()) {
-                throw new IllegalThumbException();
-            }
-            if (cm instanceof IndexColorModel) {
-                code = THUMB_PALETTE;
-                thumb = new JFIFThumbPalette(thumbnail);
-            } else if (csType == ColorSpace.TYPE_RGB) {
-                code = THUMB_RGB;
-                thumb = new JFIFThumbRGB(thumbnail);
-            } else if (csType == ColorSpace.TYPE_GRAY) {
-                code = THUMB_JPEG;
-                thumb = new JFIFThumbJPEG(thumbnail);
-            } else {
-                throw new IllegalThumbException();
-            }
-        }
-
-        void setThumbnail(BufferedImage thumbnail) {
-            try {
-                switch (code) {
-                case THUMB_PALETTE:
-                    thumb = new JFIFThumbPalette(thumbnail);
-                    break;
-                case THUMB_RGB:
-                    thumb = new JFIFThumbRGB(thumbnail);
-                    break;
-                case THUMB_JPEG:
-                    thumb = new JFIFThumbJPEG(thumbnail);
-                    break;
-                }
-            } catch (IllegalThumbException e) {
-                // Should never happen
-                throw new InternalError("Illegal thumb in setThumbnail!");
-            }
-        }
-
-        protected Object clone() {
-            JFIFExtensionMarkerSegment newGuy =
-                (JFIFExtensionMarkerSegment) super.clone();
-            if (thumb != null) {
-                newGuy.thumb = (JFIFThumb) thumb.clone();
-            }
-            return newGuy;
-        }
-
-        IIOMetadataNode getNativeNode() {
-            IIOMetadataNode node = new IIOMetadataNode("app0JFXX");
-            node.setAttribute("extensionCode", Integer.toString(code));
-            node.appendChild(thumb.getNativeNode());
-            return node;
-        }
-
-        void write(ImageOutputStream ios,
-                   JPEGImageWriter writer) throws IOException {
-            length = LENGTH_SIZE + DATA_SIZE + thumb.getLength();
-            writeTag(ios);
-            byte [] id = {0x4A, 0x46, 0x58, 0x58, 0x00};
-            ios.write(id);
-            ios.write(code);
-            thumb.write(ios, writer);
-        }
-
-        void print() {
-            printTag("JFXX");
-            thumb.print();
-        }
-    }
-
-    /**
-     * A superclass for the varieties of thumbnails that can
-     * be stored in a JFIF extension marker segment.
-     */
-    abstract class JFIFThumb implements Cloneable {
-        long streamPos = -1L;  // Save the thumbnail pos when reading
-        abstract int getLength(); // When writing
-        abstract int getWidth();
-        abstract int getHeight();
-        abstract BufferedImage getThumbnail(ImageInputStream iis,
-                                            JPEGImageReader reader)
-            throws IOException;
-
-        protected JFIFThumb() {}
-
-        protected JFIFThumb(JPEGBuffer buffer) throws IOException{
-            // Save the stream position for reading the thumbnail later
-            streamPos = buffer.getStreamPosition();
-        }
-
-        abstract void print();
-
-        abstract IIOMetadataNode getNativeNode();
-
-        abstract void write(ImageOutputStream ios,
-                            JPEGImageWriter writer) throws IOException;
-
-        protected Object clone() {
-            try {
-                return super.clone();
-            } catch (CloneNotSupportedException e) {} // won't happen
-            return null;
-        }
-
-    }
-
-    abstract class JFIFThumbUncompressed extends JFIFThumb {
-        BufferedImage thumbnail = null;
-        int thumbWidth;
-        int thumbHeight;
-        String name;
-
-        JFIFThumbUncompressed(JPEGBuffer buffer,
-                              int width,
-                              int height,
-                              int skip,
-                              String name)
-            throws IOException {
-            super(buffer);
-            thumbWidth = width;
-            thumbHeight = height;
-            // Now skip the thumbnail data
-            buffer.skipData(skip);
-            this.name = name;
-        }
-
-        JFIFThumbUncompressed(Node node, String name)
-            throws IIOInvalidTreeException {
-
-            thumbWidth = 0;
-            thumbHeight = 0;
-            this.name = name;
-            NamedNodeMap attrs = node.getAttributes();
-            int count = attrs.getLength();
-            if (count > 2) {
-                throw new IIOInvalidTreeException
-                    (name +" node cannot have > 2 attributes", node);
-            }
-            if (count != 0) {
-                int value = getAttributeValue(node, attrs, "thumbWidth",
-                                              0, 255, false);
-                thumbWidth = (value != -1) ? value : thumbWidth;
-                value = getAttributeValue(node, attrs, "thumbHeight",
-                                          0, 255, false);
-                thumbHeight = (value != -1) ? value : thumbHeight;
-            }
-        }
-
-        JFIFThumbUncompressed(BufferedImage thumb) {
-            thumbnail = thumb;
-            thumbWidth = thumb.getWidth();
-            thumbHeight = thumb.getHeight();
-            name = null;  // not used when writing
-        }
-
-        void readByteBuffer(ImageInputStream iis,
-                            byte [] data,
-                            JPEGImageReader reader,
-                            float workPortion,
-                            float workOffset) throws IOException {
-            int progInterval = Math.max((int)(data.length/20/workPortion),
-                                        1);
-            for (int offset = 0;
-                 offset < data.length;) {
-                int len = Math.min(progInterval, data.length-offset);
-                iis.read(data, offset, len);
-                offset += progInterval;
-                float percentDone = ((float) offset* 100)
-                    / data.length
-                    * workPortion + workOffset;
-                if (percentDone > 100.0F) {
-                    percentDone = 100.0F;
-                }
-                reader.thumbnailProgress (percentDone);
-            }
-        }
-
-
-        int getWidth() {
-            return thumbWidth;
-        }
-
-        int getHeight() {
-            return thumbHeight;
-        }
-
-        IIOMetadataNode getNativeNode() {
-            IIOMetadataNode node = new IIOMetadataNode(name);
-            node.setAttribute("thumbWidth", Integer.toString(thumbWidth));
-            node.setAttribute("thumbHeight", Integer.toString(thumbHeight));
-            return node;
-        }
-
-        void write(ImageOutputStream ios,
-                   JPEGImageWriter writer) throws IOException {
-            if ((thumbWidth > MAX_THUMB_WIDTH)
-                || (thumbHeight > MAX_THUMB_HEIGHT)) {
-                writer.warningOccurred(JPEGImageWriter.WARNING_THUMB_CLIPPED);
-            }
-            thumbWidth = Math.min(thumbWidth, MAX_THUMB_WIDTH);
-            thumbHeight = Math.min(thumbHeight, MAX_THUMB_HEIGHT);
-            ios.write(thumbWidth);
-            ios.write(thumbHeight);
-        }
-
-        void writePixels(ImageOutputStream ios,
-                         JPEGImageWriter writer) throws IOException {
-            if ((thumbWidth > MAX_THUMB_WIDTH)
-                || (thumbHeight > MAX_THUMB_HEIGHT)) {
-                writer.warningOccurred(JPEGImageWriter.WARNING_THUMB_CLIPPED);
-            }
-            thumbWidth = Math.min(thumbWidth, MAX_THUMB_WIDTH);
-            thumbHeight = Math.min(thumbHeight, MAX_THUMB_HEIGHT);
-            int [] data = thumbnail.getRaster().getPixels(0, 0,
-                                                          thumbWidth,
-                                                          thumbHeight,
-                                                          (int []) null);
-            writeThumbnailData(ios, data, writer);
-        }
-
-        void print() {
-            System.out.print(name + " width: ");
-            System.out.println(thumbWidth);
-            System.out.print(name + " height: ");
-            System.out.println(thumbHeight);
-        }
-
-    }
-
-    /**
-     * A JFIF thumbnail stored as RGB, one byte per channel,
-     * interleaved.
-     */
-    class JFIFThumbRGB extends JFIFThumbUncompressed {
-
-        JFIFThumbRGB(JPEGBuffer buffer, int width, int height)
-            throws IOException {
-
-            super(buffer, width, height, width*height*3, "JFIFthumbRGB");
-        }
-
-        JFIFThumbRGB(Node node) throws IIOInvalidTreeException {
-            super(node, "JFIFthumbRGB");
-        }
-
-        JFIFThumbRGB(BufferedImage thumb) throws IllegalThumbException {
-            super(thumb);
-        }
-
-        int getLength() {
-            return (thumbWidth*thumbHeight*3);
-        }
-
-        BufferedImage getThumbnail(ImageInputStream iis,
-                                   JPEGImageReader reader)
-            throws IOException {
-            iis.mark();
-            iis.seek(streamPos);
-            DataBufferByte buffer = new DataBufferByte(getLength());
-            readByteBuffer(iis,
-                           buffer.getData(),
-                           reader,
-                           1.0F,
-                           0.0F);
-            iis.reset();
-
-            WritableRaster raster =
-                Raster.createInterleavedRaster(buffer,
-                                               thumbWidth,
-                                               thumbHeight,
-                                               thumbWidth*3,
-                                               3,
-                                               new int [] {0, 1, 2},
-                                               null);
-            ColorModel cm = new ComponentColorModel(JPEG.JCS.sRGB,
-                                                    false,
-                                                    false,
-                                                    ColorModel.OPAQUE,
-                                                    DataBuffer.TYPE_BYTE);
-            return new BufferedImage(cm,
-                                     raster,
-                                     false,
-                                     null);
-        }
-
-        void write(ImageOutputStream ios,
-                   JPEGImageWriter writer) throws IOException {
-            super.write(ios, writer); // width and height
-            writePixels(ios, writer);
-        }
-
-    }
-
-    /**
-     * A JFIF thumbnail stored as an indexed palette image
-     * using an RGB palette.
-     */
-    class JFIFThumbPalette extends JFIFThumbUncompressed {
-        private static final int PALETTE_SIZE = 768;
-
-        JFIFThumbPalette(JPEGBuffer buffer, int width, int height)
-            throws IOException {
-            super(buffer,
-                  width,
-                  height,
-                  PALETTE_SIZE + width * height,
-                  "JFIFThumbPalette");
-        }
-
-        JFIFThumbPalette(Node node) throws IIOInvalidTreeException {
-            super(node, "JFIFThumbPalette");
-        }
-
-        JFIFThumbPalette(BufferedImage thumb) throws IllegalThumbException {
-            super(thumb);
-            IndexColorModel icm = (IndexColorModel) thumbnail.getColorModel();
-            if (icm.getMapSize() > 256) {
-                throw new IllegalThumbException();
-            }
-        }
-
-        int getLength() {
-            return (thumbWidth*thumbHeight + PALETTE_SIZE);
-        }
-
-        BufferedImage getThumbnail(ImageInputStream iis,
-                                   JPEGImageReader reader)
-            throws IOException {
-            iis.mark();
-            iis.seek(streamPos);
-            // read the palette
-            byte [] palette = new byte [PALETTE_SIZE];
-            float palettePart = ((float) PALETTE_SIZE) / getLength();
-            readByteBuffer(iis,
-                           palette,
-                           reader,
-                           palettePart,
-                           0.0F);
-            DataBufferByte buffer = new DataBufferByte(thumbWidth*thumbHeight);
-            readByteBuffer(iis,
-                           buffer.getData(),
-                           reader,
-                           1.0F-palettePart,
-                           palettePart);
-            iis.read();
-            iis.reset();
-
-            IndexColorModel cm = new IndexColorModel(8,
-                                                     256,
-                                                     palette,
-                                                     0,
-                                                     false);
-            SampleModel sm = cm.createCompatibleSampleModel(thumbWidth,
-                                                            thumbHeight);
-            WritableRaster raster =
-                Raster.createWritableRaster(sm, buffer, null);
-            return new BufferedImage(cm,
-                                     raster,
-                                     false,
-                                     null);
-        }
-
-        void write(ImageOutputStream ios,
-                   JPEGImageWriter writer) throws IOException {
-            super.write(ios, writer); // width and height
-            // Write the palette (must be 768 bytes)
-            byte [] palette = new byte[768];
-            IndexColorModel icm = (IndexColorModel) thumbnail.getColorModel();
-            byte [] reds = new byte [256];
-            byte [] greens = new byte [256];
-            byte [] blues = new byte [256];
-            icm.getReds(reds);
-            icm.getGreens(greens);
-            icm.getBlues(blues);
-            for (int i = 0; i < 256; i++) {
-                palette[i*3] = reds[i];
-                palette[i*3+1] = greens[i];
-                palette[i*3+2] = blues[i];
-            }
-            ios.write(palette);
-            writePixels(ios, writer);
-        }
-    }
-
-
-    /**
-     * A JFIF thumbnail stored as a JPEG stream.  No JFIF or
-     * JFIF extension markers are permitted.  There is no need
-     * to clip these, but the entire image must fit into a
-     * single JFXX marker segment.
-     */
-    class JFIFThumbJPEG extends JFIFThumb {
-        JPEGMetadata thumbMetadata = null;
-        byte [] data = null;  // Compressed image data, for writing
-        private static final int PREAMBLE_SIZE = 6;
-
-        JFIFThumbJPEG(JPEGBuffer buffer,
-                      int length,
-                      JPEGImageReader reader) throws IOException {
-            super(buffer);
-            // Compute the final stream position
-            long finalPos = streamPos + (length - PREAMBLE_SIZE);
-            // Set the stream back to the start of the thumbnail
-            // and read its metadata (but don't decode the image)
-            buffer.iis.seek(streamPos);
-            thumbMetadata = new JPEGMetadata(false, true, buffer.iis, reader);
-            // Set the stream to the computed final position
-            buffer.iis.seek(finalPos);
-            // Clear the now invalid buffer
-            buffer.bufAvail = 0;
-            buffer.bufPtr = 0;
-        }
-
-        JFIFThumbJPEG(Node node) throws IIOInvalidTreeException {
-            if (node.getChildNodes().getLength() > 1) {
-                throw new IIOInvalidTreeException
-                    ("JFIFThumbJPEG node must have 0 or 1 child", node);
-            }
-            Node child = node.getFirstChild();
-            if (child != null) {
-                String name = child.getNodeName();
-                if (!name.equals("markerSequence")) {
-                    throw new IIOInvalidTreeException
-                        ("JFIFThumbJPEG child must be a markerSequence node",
-                         node);
-                }
-                thumbMetadata = new JPEGMetadata(false, true);
-                thumbMetadata.setFromMarkerSequenceNode(child);
-            }
-        }
-
-        JFIFThumbJPEG(BufferedImage thumb) throws IllegalThumbException {
-            int INITIAL_BUFSIZE = 4096;
-            int MAZ_BUFSIZE = 65535 - 2 - PREAMBLE_SIZE;
-            try {
-                ByteArrayOutputStream baos =
-                    new ByteArrayOutputStream(INITIAL_BUFSIZE);
-                MemoryCacheImageOutputStream mos =
-                    new MemoryCacheImageOutputStream(baos);
-
-                JPEGImageWriter thumbWriter = new JPEGImageWriter(null);
-
-                thumbWriter.setOutput(mos);
-
-                // get default metadata for the thumb
-                JPEGMetadata metadata =
-                    (JPEGMetadata) thumbWriter.getDefaultImageMetadata
-                    (new ImageTypeSpecifier(thumb), null);
-
-                // Remove the jfif segment, which should be there.
-                MarkerSegment jfif = metadata.findMarkerSegment
-                    (JFIFMarkerSegment.class, true);
-                if (jfif == null) {
-                    throw new IllegalThumbException();
-                }
-
-                metadata.markerSequence.remove(jfif);
-
-                /*  Use this if removing leaves a hole and causes trouble
-
-                // Get the tree
-                String format = metadata.getNativeMetadataFormatName();
-                IIOMetadataNode tree =
-                (IIOMetadataNode) metadata.getAsTree(format);
-
-                // If there is no app0jfif node, the image is bad
-                NodeList jfifs = tree.getElementsByTagName("app0JFIF");
-                if (jfifs.getLength() == 0) {
-                throw new IllegalThumbException();
-                }
-
-                // remove the app0jfif node
-                Node jfif = jfifs.item(0);
-                Node parent = jfif.getParentNode();
-                parent.removeChild(jfif);
-
-                metadata.setFromTree(format, tree);
-                */
-
-                thumbWriter.write(new IIOImage(thumb, null, metadata));
-
-                thumbWriter.dispose();
-                // Now check that the size is OK
-                if (baos.size() > MAZ_BUFSIZE) {
-                    throw new IllegalThumbException();
-                }
-                data = baos.toByteArray();
-            } catch (IOException e) {
-                throw new IllegalThumbException();
-            }
-        }
-
-        int getWidth() {
-            int retval = 0;
-            SOFMarkerSegment sof =
-                (SOFMarkerSegment) thumbMetadata.findMarkerSegment
-                (SOFMarkerSegment.class, true);
-            if (sof != null) {
-                retval = sof.samplesPerLine;
-            }
-            return retval;
-        }
-
-        int getHeight() {
-            int retval = 0;
-            SOFMarkerSegment sof =
-                (SOFMarkerSegment) thumbMetadata.findMarkerSegment
-                (SOFMarkerSegment.class, true);
-            if (sof != null) {
-                retval = sof.numLines;
-            }
-            return retval;
-        }
-
-        private class ThumbnailReadListener
-            implements IIOReadProgressListener {
-            JPEGImageReader reader = null;
-            ThumbnailReadListener (JPEGImageReader reader) {
-                this.reader = reader;
-            }
-            public void sequenceStarted(ImageReader source, int minIndex) {}
-            public void sequenceComplete(ImageReader source) {}
-            public void imageStarted(ImageReader source, int imageIndex) {}
-            public void imageProgress(ImageReader source,
-                                      float percentageDone) {
-                reader.thumbnailProgress(percentageDone);
-            }
-            public void imageComplete(ImageReader source) {}
-            public void thumbnailStarted(ImageReader source,
-                int imageIndex, int thumbnailIndex) {}
-            public void thumbnailProgress(ImageReader source, float percentageDone) {}
-            public void thumbnailComplete(ImageReader source) {}
-            public void readAborted(ImageReader source) {}
-        }
-
-        BufferedImage getThumbnail(ImageInputStream iis,
-                                   JPEGImageReader reader)
-            throws IOException {
-            iis.mark();
-            iis.seek(streamPos);
-            JPEGImageReader thumbReader = new JPEGImageReader(null);
-            thumbReader.setInput(iis);
-            thumbReader.addIIOReadProgressListener
-                (new ThumbnailReadListener(reader));
-            BufferedImage ret = thumbReader.read(0, null);
-            thumbReader.dispose();
-            iis.reset();
-            return ret;
-        }
-
-        protected Object clone() {
-            JFIFThumbJPEG newGuy = (JFIFThumbJPEG) super.clone();
-            if (thumbMetadata != null) {
-                newGuy.thumbMetadata = (JPEGMetadata) thumbMetadata.clone();
-            }
-            return newGuy;
-        }
-
-        IIOMetadataNode getNativeNode() {
-            IIOMetadataNode node = new IIOMetadataNode("JFIFthumbJPEG");
-            if (thumbMetadata != null) {
-                node.appendChild(thumbMetadata.getNativeTree());
-            }
-            return node;
-        }
-
-        int getLength() {
-            if (data == null) {
-                return 0;
-            } else {
-                return data.length;
-            }
-        }
-
-        void write(ImageOutputStream ios,
-                   JPEGImageWriter writer) throws IOException {
-            int progInterval = data.length / 20;  // approx. every 5%
-            if (progInterval == 0) {
-                progInterval = 1;
-            }
-            for (int offset = 0;
-                 offset < data.length;) {
-                int len = Math.min(progInterval, data.length-offset);
-                ios.write(data, offset, len);
-                offset += progInterval;
-                float percentDone = ((float) offset * 100) / data.length;
-                if (percentDone > 100.0F) {
-                    percentDone = 100.0F;
-                }
-                writer.thumbnailProgress (percentDone);
-            }
-        }
-
-        void print () {
-            System.out.println("JFIF thumbnail stored as JPEG");
-        }
-    }
-
-    /**
-     * Write out the given profile to the stream, embedded in
-     * the necessary number of APP2 segments, per the ICC spec.
-     * This is the only mechanism for writing an ICC profile
-     * to a stream.
-     */
-    static void writeICC(ICC_Profile profile, ImageOutputStream ios)
-        throws IOException {
-        int LENGTH_LENGTH = 2;
-        final String ID = "ICC_PROFILE";
-        int ID_LENGTH = ID.length()+1; // spec says it's null-terminated
-        int COUNTS_LENGTH = 2;
-        int MAX_ICC_CHUNK_SIZE =
-            65535 - LENGTH_LENGTH - ID_LENGTH - COUNTS_LENGTH;
-
-        byte [] data = profile.getData();
-        int numChunks = data.length / MAX_ICC_CHUNK_SIZE;
-        if ((data.length % MAX_ICC_CHUNK_SIZE) != 0) {
-            numChunks++;
-        }
-        int chunkNum = 1;
-        int offset = 0;
-        for (int i = 0; i < numChunks; i++) {
-            int dataLength = Math.min(data.length-offset, MAX_ICC_CHUNK_SIZE);
-            int segLength = dataLength+COUNTS_LENGTH+ID_LENGTH+LENGTH_LENGTH;
-            ios.write(0xff);
-            ios.write(JPEG.APP2);
-            MarkerSegment.write2bytes(ios, segLength);
-            byte [] id = ID.getBytes("US-ASCII");
-            ios.write(id);
-            ios.write(0); // Null-terminate the string
-            ios.write(chunkNum++);
-            ios.write(numChunks);
-            ios.write(data, offset, dataLength);
-            offset += dataLength;
-        }
-    }
-
-    /**
-     * An APP2 marker segment containing an ICC profile.  In the stream
-     * a profile larger than 64K is broken up into a series of chunks.
-     * This inner class represents the complete profile as a single objec,
-     * combining chunks as necessary.
-     */
-    class ICCMarkerSegment extends MarkerSegment {
-        ArrayList chunks = null;
-        byte [] profile = null; // The complete profile when it's fully read
-                         // May remain null when writing
-        private static final int ID_SIZE = 12;
-        int chunksRead;
-        int numChunks;
-
-        ICCMarkerSegment(ICC_ColorSpace cs) {
-            super(JPEG.APP2);
-            chunks = null;
-            chunksRead = 0;
-            numChunks = 0;
-            profile = cs.getProfile().getData();
-        }
-
-        ICCMarkerSegment(JPEGBuffer buffer) throws IOException {
-            super(buffer);  // gets whole segment or fills the buffer
-            if (debug) {
-                System.out.println("Creating new ICC segment");
-            }
-            buffer.bufPtr += ID_SIZE; // Skip the id
-            buffer.bufAvail -= ID_SIZE;
-            /*
-             * Reduce the stored length by the id size.  The stored
-             * length is used to store the length of the profile
-             * data only.
-             */
-            length -= ID_SIZE;
-
-            // get the chunk number
-            int chunkNum = buffer.buf[buffer.bufPtr] & 0xff;
-            // get the total number of chunks
-            numChunks = buffer.buf[buffer.bufPtr+1] & 0xff;
-
-            if (chunkNum > numChunks) {
-                throw new IIOException
-                    ("Image format Error; chunk num > num chunks");
-            }
-
-            // if there are no more chunks, set up the data
-            if (numChunks == 1) {
-                // reduce the stored length by the two chunk numbering bytes
-                length -= 2;
-                profile = new byte[length];
-                buffer.bufPtr += 2;
-                buffer.bufAvail-=2;
-                buffer.readData(profile);
-                inICC = false;
-            } else {
-                // If we store them away, include the chunk numbering bytes
-                byte [] profileData = new byte[length];
-                // Now reduce the stored length by the
-                // two chunk numbering bytes
-                length -= 2;
-                buffer.readData(profileData);
-                chunks = new ArrayList();
-                chunks.add(profileData);
-                chunksRead = 1;
-                inICC = true;
-            }
-        }
-
-        ICCMarkerSegment(Node node) throws IIOInvalidTreeException {
-            super(JPEG.APP2);
-            if (node instanceof IIOMetadataNode) {
-                IIOMetadataNode ourNode = (IIOMetadataNode) node;
-                ICC_Profile prof = (ICC_Profile) ourNode.getUserObject();
-                if (prof != null) {  // May be null
-                    profile = prof.getData();
-                }
-            }
-        }
-
-        protected Object clone () {
-            ICCMarkerSegment newGuy = (ICCMarkerSegment) super.clone();
-            if (profile != null) {
-                newGuy.profile = (byte[]) profile.clone();
-            }
-            return newGuy;
-        }
-
-        boolean addData(JPEGBuffer buffer) throws IOException {
-            if (debug) {
-                System.out.println("Adding to ICC segment");
-            }
-            // skip the tag
-            buffer.bufPtr++;
-            buffer.bufAvail--;
-            // Get the length, but not in length
-            int dataLen = (buffer.buf[buffer.bufPtr++] & 0xff) << 8;
-            dataLen |= buffer.buf[buffer.bufPtr++] & 0xff;
-            buffer.bufAvail -= 2;
-            // Don't include length itself
-            dataLen -= 2;
-            // skip the id
-            buffer.bufPtr += ID_SIZE; // Skip the id
-            buffer.bufAvail -= ID_SIZE;
-            /*
-             * Reduce the stored length by the id size.  The stored
-             * length is used to store the length of the profile
-             * data only.
-             */
-            dataLen -= ID_SIZE;
-
-            // get the chunk number
-            int chunkNum = buffer.buf[buffer.bufPtr] & 0xff;
-            if (chunkNum > numChunks) {
-                throw new IIOException
-                    ("Image format Error; chunk num > num chunks");
-            }
-
-            // get the number of chunks, which should match
-            int newNumChunks = buffer.buf[buffer.bufPtr+1] & 0xff;
-            if (numChunks != newNumChunks) {
-                throw new IIOException
-                    ("Image format Error; icc num chunks mismatch");
-            }
-            dataLen -= 2;
-            if (debug) {
-                System.out.println("chunkNum: " + chunkNum
-                                   + ", numChunks: " + numChunks
-                                   + ", dataLen: " + dataLen);
-            }
-            boolean retval = false;
-            byte [] profileData = new byte[dataLen];
-            buffer.readData(profileData);
-            chunks.add(profileData);
-            length += dataLen;
-            chunksRead++;
-            if (chunksRead < numChunks) {
-                inICC = true;
-            } else {
-                if (debug) {
-                    System.out.println("Completing profile; total length is "
-                                       + length);
-                }
-                // create an array for the whole thing
-                profile = new byte[length];
-                // copy the existing chunks, releasing them
-                // Note that they may be out of order
-
-                int index = 0;
-                for (int i = 1; i <= numChunks; i++) {
-                    boolean foundIt = false;
-                    for (int chunk = 0; chunk < chunks.size(); chunk++) {
-                        byte [] chunkData = (byte []) chunks.get(chunk);
-                        if (chunkData[0] == i) { // Right one
-                            System.arraycopy(chunkData, 2,
-                                             profile, index,
-                                             chunkData.length-2);
-                            index += chunkData.length-2;
-                            foundIt = true;
-                        }
-                    }
-                    if (foundIt == false) {
-                        throw new IIOException
-                            ("Image Format Error: Missing ICC chunk num " + i);
-                    }
-                }
-
-                chunks = null;
-                chunksRead = 0;
-                numChunks = 0;
-                inICC = false;
-                retval = true;
-            }
-            return retval;
-        }
-
-        IIOMetadataNode getNativeNode() {
-            IIOMetadataNode node = new IIOMetadataNode("app2ICC");
-            if (profile != null) {
-                node.setUserObject(ICC_Profile.getInstance(profile));
-            }
-            return node;
-        }
-
-        /**
-         * No-op.  Profiles are never written from metadata.
-         * They are written from the ColorSpace of the image.
-         */
-        void write(ImageOutputStream ios) throws IOException {
-            // No-op
-        }
-
-        void print () {
-            printTag("ICC Profile APP2");
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/plugins/jpeg/JPEG.java b/ojluni/src/main/java/com/sun/imageio/plugins/jpeg/JPEG.java
deleted file mode 100755
index 64ffe69..0000000
--- a/ojluni/src/main/java/com/sun/imageio/plugins/jpeg/JPEG.java
+++ /dev/null
@@ -1,371 +0,0 @@
-/*
- * Copyright (c) 2000, 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
- * 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.imageio.plugins.jpeg;
-
-import javax.imageio.metadata.IIOMetadataFormatImpl;
-import javax.imageio.ImageTypeSpecifier;
-import javax.imageio.plugins.jpeg.JPEGQTable;
-import javax.imageio.plugins.jpeg.JPEGHuffmanTable;
-
-import java.awt.image.ColorModel;
-import java.awt.image.BufferedImage;
-import java.awt.image.DataBuffer;
-import java.awt.color.ColorSpace;
-import java.awt.color.ICC_ColorSpace;
-
-/**
- * A class containing JPEG-related constants, definitions, and
- * static methods.  This class and its constants must be public so that
- * <code>JPEGImageWriteParam</code> can see it.
- */
-public class JPEG {
-
-    // List of all the JPEG markers (pre-JPEG2000)
-
-    /** For temporary use in arithmetic coding */
-    public static final int TEM = 0x01;
-
-    // Codes 0x02 - 0xBF are reserved
-
-    // SOF markers for Nondifferential Huffman coding
-    /** Baseline DCT */
-    public static final int SOF0 = 0xC0;
-    /** Extended Sequential DCT */
-    public static final int SOF1 = 0xC1;
-    /** Progressive DCT */
-    public static final int SOF2 = 0xC2;
-    /** Lossless Sequential */
-    public static final int SOF3 = 0xC3;
-
-    /** Define Huffman Tables */
-    public static final int DHT = 0xC4;
-
-    // SOF markers for Differential Huffman coding
-    /** Differential Sequential DCT */
-    public static final int SOF5 = 0xC5;
-    /** Differential Progressive DCT */
-    public static final int SOF6 = 0xC6;
-    /** Differential Lossless */
-    public static final int SOF7 = 0xC7;
-
-    /** Reserved for JPEG extensions */
-    public static final int JPG = 0xC8;
-
-    // SOF markers for Nondifferential arithmetic coding
-    /** Extended Sequential DCT, Arithmetic coding */
-    public static final int SOF9 = 0xC9;
-    /** Progressive DCT, Arithmetic coding */
-    public static final int SOF10 = 0xCA;
-    /** Lossless Sequential, Arithmetic coding */
-    public static final int SOF11 = 0xCB;
-
-    /** Define Arithmetic conditioning tables */
-    public static final int DAC = 0xCC;
-
-    // SOF markers for Differential arithmetic coding
-    /** Differential Sequential DCT, Arithmetic coding */
-    public static final int SOF13 = 0xCD;
-    /** Differential Progressive DCT, Arithmetic coding */
-    public static final int SOF14 = 0xCE;
-    /** Differential Lossless, Arithmetic coding */
-    public static final int SOF15 = 0xCF;
-
-    // Restart Markers
-    public static final int RST0 = 0xD0;
-    public static final int RST1 = 0xD1;
-    public static final int RST2 = 0xD2;
-    public static final int RST3 = 0xD3;
-    public static final int RST4 = 0xD4;
-    public static final int RST5 = 0xD5;
-    public static final int RST6 = 0xD6;
-    public static final int RST7 = 0xD7;
-    /** Number of restart markers */
-    public static final int RESTART_RANGE = 8;
-
-    /** Start of Image */
-    public static final int SOI = 0xD8;
-    /** End of Image */
-    public static final int EOI = 0xD9;
-    /** Start of Scan */
-    public static final int SOS = 0xDA;
-
-    /** Define Quantisation Tables */
-    public static final int DQT = 0xDB;
-
-    /** Define Number of lines */
-    public static final int DNL = 0xDC;
-
-    /** Define Restart Interval */
-    public static final int DRI = 0xDD;
-
-    /** Define Heirarchical progression */
-    public static final int DHP = 0xDE;
-
-    /** Expand reference image(s) */
-    public static final int EXP = 0xDF;
-
-    // Application markers
-    /** APP0 used by JFIF */
-    public static final int APP0 = 0xE0;
-    public static final int APP1 = 0xE1;
-    public static final int APP2 = 0xE2;
-    public static final int APP3 = 0xE3;
-    public static final int APP4 = 0xE4;
-    public static final int APP5 = 0xE5;
-    public static final int APP6 = 0xE6;
-    public static final int APP7 = 0xE7;
-    public static final int APP8 = 0xE8;
-    public static final int APP9 = 0xE9;
-    public static final int APP10 = 0xEA;
-    public static final int APP11 = 0xEB;
-    public static final int APP12 = 0xEC;
-    public static final int APP13 = 0xED;
-    /** APP14 used by Adobe */
-    public static final int APP14 = 0xEE;
-    public static final int APP15 = 0xEF;
-
-    // codes 0xF0 to 0xFD are reserved
-
-    /** Comment marker */
-    public static final int COM = 0xFE;
-
-    // JFIF Resolution units
-    /** The X and Y units simply indicate the aspect ratio of the pixels. */
-    public static final int DENSITY_UNIT_ASPECT_RATIO = 0;
-    /** Pixel density is in pixels per inch. */
-    public static final int DENSITY_UNIT_DOTS_INCH    = 1;
-    /** Pixel density is in pixels per centemeter. */
-    public static final int DENSITY_UNIT_DOTS_CM      = 2;
-    /** The max known value for DENSITY_UNIT */
-    public static final int NUM_DENSITY_UNIT = 3;
-
-    // Adobe transform values
-    public static final int ADOBE_IMPOSSIBLE = -1;
-    public static final int ADOBE_UNKNOWN = 0;
-    public static final int ADOBE_YCC = 1;
-    public static final int ADOBE_YCCK = 2;
-
-    // Spi initialization stuff
-    public static final String vendor = "Oracle Corporation";
-    public static final String version = "0.5";
-    // Names of the formats we can read or write
-    public static final String [] names = {"JPEG", "jpeg", "JPG", "jpg"};
-    public static final String [] suffixes = {"jpg", "jpeg"};
-    public static final String [] MIMETypes = {"image/jpeg"};
-    public static final String nativeImageMetadataFormatName =
-        "javax_imageio_jpeg_image_1.0";
-    public static final String nativeImageMetadataFormatClassName =
-        "com.sun.imageio.plugins.jpeg.JPEGImageMetadataFormat";
-    public static final String nativeStreamMetadataFormatName =
-        "javax_imageio_jpeg_stream_1.0";
-    public static final String nativeStreamMetadataFormatClassName =
-        "com.sun.imageio.plugins.jpeg.JPEGStreamMetadataFormat";
-
-    // IJG Color codes.
-    public static final int JCS_UNKNOWN = 0;       // error/unspecified
-    public static final int JCS_GRAYSCALE = 1;     // monochrome
-    public static final int JCS_RGB = 2;           // red/green/blue
-    public static final int JCS_YCbCr = 3;         // Y/Cb/Cr (also known as YUV)
-    public static final int JCS_CMYK = 4;          // C/M/Y/K
-    public static final int JCS_YCC = 5;           // PhotoYCC
-    public static final int JCS_RGBA = 6;          // RGB-Alpha
-    public static final int JCS_YCbCrA = 7;        // Y/Cb/Cr/Alpha
-    // 8 and 9 were old "Legacy" codes which the old code never identified
-    // on reading anyway.  Support for writing them is being dropped, too.
-    public static final int JCS_YCCA = 10;         // PhotoYCC-Alpha
-    public static final int JCS_YCCK = 11;         // Y/Cb/Cr/K
-
-    public static final int NUM_JCS_CODES = JCS_YCCK+1;
-
-    /** IJG can handle up to 4-channel JPEGs */
-    public static final int [] [] bandOffsets = {{0},
-                                          {0, 1},
-                                          {0, 1, 2},
-                                          {0, 1, 2, 3}};
-
-    public static final int [] bOffsRGB = { 2, 1, 0 };
-
-    /* These are kept in the inner class to avoid static initialization
-     * of the CMM class until someone actually needs it.
-     * (e.g. do not init CMM on the request for jpeg mime types)
-     */
-    public static class JCS {
-        public static final ColorSpace sRGB =
-            ColorSpace.getInstance(ColorSpace.CS_sRGB);
-
-        private static ColorSpace YCC = null;
-        private static boolean yccInited = false;
-
-        public static ColorSpace getYCC() {
-            if (!yccInited) {
-                try {
-                    YCC = ColorSpace.getInstance(ColorSpace.CS_PYCC);
-                } catch (IllegalArgumentException e) {
-                    // PYCC.pf may not always be installed
-                } finally {
-                    yccInited = true;
-                }
-            }
-            return YCC;
-        }
-    }
-
-    // Default value for ImageWriteParam
-    public static final float DEFAULT_QUALITY = 0.75F;
-
-    /**
-     * Returns <code>true</code> if the given <code>ColorSpace</code>
-     * object is an instance of ICC_ColorSpace but is not one of the
-     * standard <code>ColorSpaces</code> returned by
-     * <code>ColorSpace.getInstance()</code>.
-     */
-    static boolean isNonStandardICC(ColorSpace cs) {
-        boolean retval = false;
-        if ((cs instanceof ICC_ColorSpace)
-            && (!cs.isCS_sRGB())
-            && (!cs.equals(ColorSpace.getInstance(ColorSpace.CS_CIEXYZ)))
-            && (!cs.equals(ColorSpace.getInstance(ColorSpace.CS_GRAY)))
-            && (!cs.equals(ColorSpace.getInstance(ColorSpace.CS_LINEAR_RGB)))
-            && (!cs.equals(ColorSpace.getInstance(ColorSpace.CS_PYCC)))
-            ) {
-            retval = true;
-        }
-        return retval;
-    }
-
-
-    /**
-     * Returns <code>true</code> if the given imageType can be used
-     * in a JFIF file.  If <code>input</code> is true, then the
-     * image type is considered before colorspace conversion.
-     */
-    static boolean isJFIFcompliant(ImageTypeSpecifier imageType,
-                                   boolean input) {
-        ColorModel cm = imageType.getColorModel();
-        // Can't have alpha
-        if (cm.hasAlpha()) {
-            return false;
-        }
-        // Gray is OK, always
-        int numComponents = imageType.getNumComponents();
-        if (numComponents == 1) {
-            return true;
-        }
-
-        // If it isn't gray, it must have 3 channels
-        if (numComponents != 3) {
-            return false;
-        }
-
-        if (input) {
-            // Must be RGB
-            if (cm.getColorSpace().getType() == ColorSpace.TYPE_RGB) {
-                return true;
-            }
-        } else {
-            // Must be YCbCr
-            if (cm.getColorSpace().getType() == ColorSpace.TYPE_YCbCr) {
-                return true;
-            }
-        }
-
-        return false;
-    }
-
-    /**
-     * Given an image type, return the Adobe transform corresponding to
-     * that type, or ADOBE_IMPOSSIBLE if the image type is incompatible
-     * with an Adobe marker segment.  If <code>input</code> is true, then
-     * the image type is considered before colorspace conversion.
-     */
-    static int transformForType(ImageTypeSpecifier imageType, boolean input) {
-        int retval = ADOBE_IMPOSSIBLE;
-        ColorModel cm = imageType.getColorModel();
-        switch (cm.getColorSpace().getType()) {
-        case ColorSpace.TYPE_GRAY:
-            retval = ADOBE_UNKNOWN;
-            break;
-        case ColorSpace.TYPE_RGB:
-            retval = input ? ADOBE_YCC : ADOBE_UNKNOWN;
-            break;
-        case ColorSpace.TYPE_YCbCr:
-            retval = ADOBE_YCC;
-            break;
-        case ColorSpace.TYPE_CMYK:
-            retval = input ? ADOBE_YCCK : ADOBE_IMPOSSIBLE;
-        }
-        return retval;
-    }
-
-    /**
-     * Converts an ImageWriteParam (i.e. IJG) non-linear quality value
-     * to a float suitable for passing to JPEGQTable.getScaledInstance().
-     */
-    static float convertToLinearQuality(float quality) {
-        // The following is converted from the IJG code.
-        if (quality <= 0.0F) {
-            quality = 0.01F;
-        }
-
-        if (quality > 1.00F) {
-            quality = 1.00F;
-        }
-
-        if (quality < 0.5F) {
-            quality = 0.5F / quality;
-        } else {
-            quality = 2.0F - (quality * 2.0F);
-        }
-
-        return quality;
-    }
-
-    /**
-     * Return an array of default, visually lossless quantization tables.
-     */
-    static JPEGQTable [] getDefaultQTables() {
-        JPEGQTable [] qTables = new JPEGQTable[2];
-        qTables[0] = JPEGQTable.K1Div2Luminance;
-        qTables[1] = JPEGQTable.K2Div2Chrominance;
-        return qTables;
-    }
-
-    /**
-     * Return an array of default Huffman tables.
-     */
-    static JPEGHuffmanTable [] getDefaultHuffmanTables(boolean wantDC) {
-        JPEGHuffmanTable [] tables = new JPEGHuffmanTable[2];
-        if (wantDC) {
-            tables[0] = JPEGHuffmanTable.StdDCLuminance;
-            tables[1] = JPEGHuffmanTable.StdDCChrominance;
-        } else {
-            tables[0] = JPEGHuffmanTable.StdACLuminance;
-            tables[1] = JPEGHuffmanTable.StdACChrominance;
-        }
-        return tables;
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/plugins/jpeg/JPEGBuffer.java b/ojluni/src/main/java/com/sun/imageio/plugins/jpeg/JPEGBuffer.java
deleted file mode 100755
index 60bdbf0..0000000
--- a/ojluni/src/main/java/com/sun/imageio/plugins/jpeg/JPEGBuffer.java
+++ /dev/null
@@ -1,254 +0,0 @@
-/*
- * Copyright (c) 2001, 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.imageio.plugins.jpeg;
-
-import javax.imageio.stream.ImageInputStream;
-import javax.imageio.IIOException;
-
-import java.io.IOException;
-
-/**
- * A class wrapping a buffer and its state.  For efficiency,
- * the members are made visible to other classes in this package.
- */
-class JPEGBuffer {
-
-    private boolean debug = false;
-
-    /**
-     * The size of the buffer.  This is large enough to hold all
-     * known marker segments (other than thumbnails and icc profiles)
-     */
-    final int BUFFER_SIZE = 4096;
-
-    /**
-     * The actual buffer.
-     */
-    byte [] buf;
-
-    /**
-     * The number of bytes available for reading from the buffer.
-     * Anytime data is read from the buffer, this should be updated.
-     */
-    int bufAvail;
-
-    /**
-     * A pointer to the next available byte in the buffer.  This is
-     * used to read data from the buffer and must be updated to
-     * move through the buffer.
-     */
-    int bufPtr;
-
-    /**
-     * The ImageInputStream buffered.
-     */
-    ImageInputStream iis;
-
-    JPEGBuffer (ImageInputStream iis) {
-        buf = new byte[BUFFER_SIZE];
-        bufAvail = 0;
-        bufPtr = 0;
-        this.iis = iis;
-    }
-
-    /**
-     * Ensures that there are at least <code>count</code> bytes available
-     * in the buffer, loading more data and moving any remaining
-     * bytes to the front.  A count of 0 means to just fill the buffer.
-     * If the count is larger than the buffer size, just fills the buffer.
-     * If the end of the stream is encountered before a non-0 count can
-     * be satisfied, an <code>IIOException</code> is thrown with the
-     * message "Image Format Error".
-     */
-    void loadBuf(int count) throws IOException {
-        if (debug) {
-            System.out.print("loadbuf called with ");
-            System.out.print("count " + count + ", ");
-            System.out.println("bufAvail " + bufAvail + ", ");
-        }
-        if (count != 0) {
-            if (bufAvail >= count) {  // have enough
-                return;
-            }
-        } else {
-            if (bufAvail == BUFFER_SIZE) {  // already full
-                return;
-            }
-        }
-        // First copy any remaining bytes down to the beginning
-        if ((bufAvail > 0) && (bufAvail < BUFFER_SIZE)) {
-            System.arraycopy(buf, bufPtr, buf, 0, bufAvail);
-        }
-        // Now fill the rest of the buffer
-        int ret = iis.read(buf, bufAvail, buf.length - bufAvail);
-        if (debug) {
-            System.out.println("iis.read returned " + ret);
-        }
-        if (ret != -1) {
-            bufAvail += ret;
-        }
-        bufPtr = 0;
-        int minimum = Math.min(BUFFER_SIZE, count);
-        if (bufAvail < minimum) {
-            throw new IIOException ("Image Format Error");
-        }
-    }
-
-    /**
-     * Fills the data array from the stream, starting with
-     * the buffer and then reading directly from the stream
-     * if necessary.  The buffer is left in an appropriate
-     * state.  If the end of the stream is encountered, an
-     * <code>IIOException</code> is thrown with the
-     * message "Image Format Error".
-     */
-    void readData(byte [] data) throws IOException {
-        int count = data.length;
-        // First see what's left in the buffer.
-        if (bufAvail >= count) {  // It's enough
-            System.arraycopy(buf, bufPtr, data, 0, count);
-            bufAvail -= count;
-            bufPtr += count;
-            return;
-        }
-        int offset = 0;
-        if (bufAvail > 0) {  // Some there, but not enough
-            System.arraycopy(buf, bufPtr, data, 0, bufAvail);
-            offset = bufAvail;
-            count -= bufAvail;
-            bufAvail = 0;
-            bufPtr = 0;
-        }
-        // Now read the rest directly from the stream
-        if (iis.read(data, offset, count) != count) {
-            throw new IIOException ("Image format Error");
-        }
-    }
-
-    /**
-     * Skips <code>count</code> bytes, leaving the buffer
-     * in an appropriate state.  If the end of the stream is
-     * encountered, an <code>IIOException</code> is thrown with the
-     * message "Image Format Error".
-     */
-    void skipData(int count) throws IOException {
-        // First see what's left in the buffer.
-        if (bufAvail >= count) {  // It's enough
-            bufAvail -= count;
-            bufPtr += count;
-            return;
-        }
-        if (bufAvail > 0) {  // Some there, but not enough
-            count -= bufAvail;
-            bufAvail = 0;
-            bufPtr = 0;
-        }
-        // Now read the rest directly from the stream
-        if (iis.skipBytes(count) != count) {
-            throw new IIOException ("Image format Error");
-        }
-    }
-
-    /**
-     * Push back the remaining contents of the buffer by
-     * repositioning the input stream.
-     */
-    void pushBack() throws IOException {
-        iis.seek(iis.getStreamPosition()-bufAvail);
-        bufAvail = 0;
-        bufPtr = 0;
-    }
-
-    /**
-     * Return the stream position corresponding to the next
-     * available byte in the buffer.
-     */
-    long getStreamPosition() throws IOException {
-        return (iis.getStreamPosition()-bufAvail);
-    }
-
-    /**
-     * Scan the buffer until the next 0xff byte, reloading
-     * the buffer as necessary.  The buffer position is left
-     * pointing to the first non-0xff byte after a run of
-     * 0xff bytes.  If the end of the stream is encountered,
-     * an EOI marker is inserted into the buffer and <code>true</code>
-     * is returned.  Otherwise returns <code>false</code>.
-     */
-    boolean scanForFF(JPEGImageReader reader) throws IOException {
-        boolean retval = false;
-        boolean foundFF = false;
-        while (foundFF == false) {
-            while (bufAvail > 0) {
-                if ((buf[bufPtr++] & 0xff) == 0xff) {
-                    bufAvail--;
-                    foundFF = true;
-                    break;  // out of inner while
-                }
-                bufAvail--;
-            }
-            // Reload the buffer and keep going
-            loadBuf(0);
-            // Skip any remaining pad bytes
-            if (foundFF == true) {
-                while ((bufAvail > 0) && (buf[bufPtr] & 0xff) == 0xff) {
-                    bufPtr++;  // Only if it still is 0xff
-                    bufAvail--;
-                }
-            }
-            if (bufAvail == 0) {  // Premature EOF
-                // send out a warning, but treat it as EOI
-                //reader.warningOccurred(JPEGImageReader.WARNING_NO_EOI);
-                retval = true;
-                buf[0] = (byte)JPEG.EOI;
-                bufAvail = 1;
-                bufPtr = 0;
-                foundFF = true;
-            }
-        }
-        return retval;
-    }
-
-    /**
-     * Prints the contents of the buffer, in hex.
-     * @param count the number of bytes to print,
-     * starting at the current available byte.
-     */
-    void print(int count) {
-        System.out.print("buffer has ");
-        System.out.print(bufAvail);
-        System.out.println(" bytes available");
-        if (bufAvail < count) {
-            count = bufAvail;
-        }
-        for (int ptr = bufPtr; count > 0; count--) {
-            int val = (int)buf[ptr++] & 0xff;
-            System.out.print(" " + Integer.toHexString(val));
-        }
-        System.out.println();
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/plugins/jpeg/JPEGImageMetadataFormat.java b/ojluni/src/main/java/com/sun/imageio/plugins/jpeg/JPEGImageMetadataFormat.java
deleted file mode 100755
index 92c3e59..0000000
--- a/ojluni/src/main/java/com/sun/imageio/plugins/jpeg/JPEGImageMetadataFormat.java
+++ /dev/null
@@ -1,366 +0,0 @@
-/*
- * Copyright (c) 2001, 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.imageio.plugins.jpeg;
-
-import javax.imageio.metadata.IIOMetadataFormat;
-import javax.imageio.metadata.IIOMetadataFormatImpl;
-import javax.imageio.ImageTypeSpecifier;
-
-import java.awt.color.ICC_Profile;
-import java.awt.color.ColorSpace;
-import java.awt.image.ColorModel;
-
-import java.util.List;
-import java.util.ArrayList;
-
-public class JPEGImageMetadataFormat extends JPEGMetadataFormat {
-
-    private static JPEGImageMetadataFormat theInstance = null;
-
-    private JPEGImageMetadataFormat() {
-        super(JPEG.nativeImageMetadataFormatName,
-              CHILD_POLICY_ALL);
-
-        addElement("JPEGvariety",
-                   JPEG.nativeImageMetadataFormatName,
-                   CHILD_POLICY_CHOICE);
-
-        addElement("markerSequence",
-                   JPEG.nativeImageMetadataFormatName,
-                   CHILD_POLICY_SEQUENCE);
-
-        addElement("app0JFIF", "JPEGvariety", CHILD_POLICY_SOME);
-
-        addStreamElements("markerSequence");
-
-        addElement("app14Adobe", "markerSequence", CHILD_POLICY_EMPTY);
-
-        addElement("sof", "markerSequence", 1, 4);
-
-        addElement("sos", "markerSequence", 1, 4);
-
-        addElement("JFXX", "app0JFIF", 1, Integer.MAX_VALUE);
-
-        addElement("app0JFXX", "JFXX", CHILD_POLICY_CHOICE);
-
-        addElement("app2ICC", "app0JFIF", CHILD_POLICY_EMPTY);
-
-        addAttribute("app0JFIF",
-                     "majorVersion",
-                     DATATYPE_INTEGER,
-                     false,
-                     "1",
-                     "0", "255",
-                     true, true);
-        addAttribute("app0JFIF",
-                     "minorVersion",
-                     DATATYPE_INTEGER,
-                     false,
-                     "2",
-                     "0", "255",
-                     true, true);
-        List resUnits = new ArrayList();
-        resUnits.add("0");
-        resUnits.add("1");
-        resUnits.add("2");
-        addAttribute("app0JFIF",
-                     "resUnits",
-                     DATATYPE_INTEGER,
-                     false,
-                     "0",
-                     resUnits);
-        addAttribute("app0JFIF",
-                     "Xdensity",
-                     DATATYPE_INTEGER,
-                     false,
-                     "1",
-                     "1", "65535",
-                     true, true);
-        addAttribute("app0JFIF",
-                     "Ydensity",
-                     DATATYPE_INTEGER,
-                     false,
-                     "1",
-                     "1", "65535",
-                     true, true);
-        addAttribute("app0JFIF",
-                     "thumbWidth",
-                     DATATYPE_INTEGER,
-                     false,
-                     "0",
-                     "0", "255",
-                     true, true);
-        addAttribute("app0JFIF",
-                     "thumbHeight",
-                     DATATYPE_INTEGER,
-                     false,
-                     "0",
-                     "0", "255",
-                     true, true);
-
-        addElement("JFIFthumbJPEG", "app0JFXX", CHILD_POLICY_SOME);
-        addElement("JFIFthumbPalette", "app0JFXX", CHILD_POLICY_EMPTY);
-        addElement("JFIFthumbRGB", "app0JFXX", CHILD_POLICY_EMPTY);
-
-        List codes = new ArrayList();
-        codes.add("16"); // Hex 10
-        codes.add("17"); // Hex 11
-        codes.add("19"); // Hex 13
-        addAttribute("app0JFXX",
-                     "extensionCode",
-                     DATATYPE_INTEGER,
-                     false,
-                     null,
-                     codes);
-
-        addChildElement("markerSequence", "JFIFthumbJPEG");
-
-        addAttribute("JFIFthumbPalette",
-                     "thumbWidth",
-                     DATATYPE_INTEGER,
-                     false,
-                     null,
-                     "0", "255",
-                     true, true);
-        addAttribute("JFIFthumbPalette",
-                     "thumbHeight",
-                     DATATYPE_INTEGER,
-                     false,
-                     null,
-                     "0", "255",
-                     true, true);
-
-        addAttribute("JFIFthumbRGB",
-                     "thumbWidth",
-                     DATATYPE_INTEGER,
-                     false,
-                     null,
-                     "0", "255",
-                     true, true);
-        addAttribute("JFIFthumbRGB",
-                     "thumbHeight",
-                     DATATYPE_INTEGER,
-                     false,
-                     null,
-                     "0", "255",
-                     true, true);
-
-        addObjectValue("app2ICC", ICC_Profile.class, false, null);
-
-        addAttribute("app14Adobe",
-                     "version",
-                     DATATYPE_INTEGER,
-                     false,
-                     "100",
-                     "100", "255",
-                     true, true);
-        addAttribute("app14Adobe",
-                     "flags0",
-                     DATATYPE_INTEGER,
-                     false,
-                     "0",
-                     "0", "65535",
-                     true, true);
-        addAttribute("app14Adobe",
-                     "flags1",
-                     DATATYPE_INTEGER,
-                     false,
-                     "0",
-                     "0", "65535",
-                     true, true);
-
-        List transforms = new ArrayList();
-        transforms.add("0");
-        transforms.add("1");
-        transforms.add("2");
-        addAttribute("app14Adobe",
-                     "transform",
-                     DATATYPE_INTEGER,
-                     true,
-                     null,
-                     transforms);
-
-        addElement("componentSpec", "sof", CHILD_POLICY_EMPTY);
-
-        List procs = new ArrayList();
-        procs.add("0");
-        procs.add("1");
-        procs.add("2");
-        addAttribute("sof",
-                     "process",
-                     DATATYPE_INTEGER,
-                     false,
-                     null,
-                     procs);
-        addAttribute("sof",
-                     "samplePrecision",
-                     DATATYPE_INTEGER,
-                     false,
-                     "8");
-        addAttribute("sof",
-                     "numLines",
-                     DATATYPE_INTEGER,
-                     false,
-                     null,
-                     "0", "65535",
-                     true, true);
-        addAttribute("sof",
-                     "samplesPerLine",
-                     DATATYPE_INTEGER,
-                     false,
-                     null,
-                     "0", "65535",
-                     true, true);
-        List comps = new ArrayList();
-        comps.add("1");
-        comps.add("2");
-        comps.add("3");
-        comps.add("4");
-        addAttribute("sof",
-                     "numFrameComponents",
-                     DATATYPE_INTEGER,
-                     false,
-                     null,
-                     comps);
-
-        addAttribute("componentSpec",
-                     "componentId",
-                     DATATYPE_INTEGER,
-                     true,
-                     null,
-                     "0", "255",
-                     true, true);
-        addAttribute("componentSpec",
-                     "HsamplingFactor",
-                     DATATYPE_INTEGER,
-                     true,
-                     null,
-                     "1", "255",
-                     true, true);
-        addAttribute("componentSpec",
-                     "VsamplingFactor",
-                     DATATYPE_INTEGER,
-                     true,
-                     null,
-                     "1", "255",
-                     true, true);
-        List tabids = new ArrayList();
-        tabids.add("0");
-        tabids.add("1");
-        tabids.add("2");
-        tabids.add("3");
-        addAttribute("componentSpec",
-                     "QtableSelector",
-                     DATATYPE_INTEGER,
-                     true,
-                     null,
-                     tabids);
-
-        addElement("scanComponentSpec", "sos", CHILD_POLICY_EMPTY);
-
-        addAttribute("sos",
-                     "numScanComponents",
-                     DATATYPE_INTEGER,
-                     true,
-                     null,
-                     comps);
-        addAttribute("sos",
-                     "startSpectralSelection",
-                      DATATYPE_INTEGER,
-                     false,
-                     "0",
-                     "0", "63",
-                     true, true);
-        addAttribute("sos",
-                     "endSpectralSelection",
-                      DATATYPE_INTEGER,
-                     false,
-                     "63",
-                     "0", "63",
-                     true, true);
-        addAttribute("sos",
-                     "approxHigh",
-                      DATATYPE_INTEGER,
-                     false,
-                     "0",
-                     "0", "15",
-                     true, true);
-        addAttribute("sos",
-                     "approxLow",
-                      DATATYPE_INTEGER,
-                     false,
-                     "0",
-                     "0", "15",
-                     true, true);
-
-        addAttribute("scanComponentSpec",
-                     "componentSelector",
-                     DATATYPE_INTEGER,
-                     true,
-                     null,
-                     "0", "255",
-                     true, true);
-        addAttribute("scanComponentSpec",
-                     "dcHuffTable",
-                     DATATYPE_INTEGER,
-                     true,
-                     null,
-                     tabids);
-        addAttribute("scanComponentSpec",
-                     "acHuffTable",
-                     DATATYPE_INTEGER,
-                     true,
-                     null,
-                     tabids);
-    }
-
-    public boolean canNodeAppear(String elementName,
-                                 ImageTypeSpecifier imageType) {
-        // All images can have these
-        if (elementName.equals(getRootName())
-            || elementName.equals("JPEGvariety")
-            || isInSubtree(elementName, "markerSequence")) {
-            return true;
-        }
-
-        // If it is an element in the app0jfif subtree, just check
-        // that the image type is JFIF compliant.
-        if ((isInSubtree(elementName, "app0JFIF"))
-            && JPEG.isJFIFcompliant(imageType, true)) {
-            return true;
-        }
-
-        return false;
-    }
-
-
-    public static synchronized IIOMetadataFormat getInstance() {
-        if (theInstance == null) {
-            theInstance = new JPEGImageMetadataFormat();
-        }
-        return theInstance;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/plugins/jpeg/JPEGImageMetadataFormatResources.java b/ojluni/src/main/java/com/sun/imageio/plugins/jpeg/JPEGImageMetadataFormatResources.java
deleted file mode 100755
index e242a35..0000000
--- a/ojluni/src/main/java/com/sun/imageio/plugins/jpeg/JPEGImageMetadataFormatResources.java
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * Copyright (c) 2001, 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.
- */
-
-package com.sun.imageio.plugins.jpeg;
-
-import java.util.ListResourceBundle;
-
-public class JPEGImageMetadataFormatResources
-       extends JPEGMetadataFormatResources {
-
-    static final Object[][] imageContents = {
-        // Node name, followed by description
-        { "JPEGvariety", "A node grouping all marker segments specific to the variety of stream being read/written (e.g. JFIF) - may be empty" },
-        { "markerSequence", "A node grouping all non-jfif marker segments" },
-        { "app0jfif", "A JFIF APP0 marker segment" },
-        { "app14Adobe", "An Adobe APP14 marker segment" },
-        { "sof", "A Start Of Frame marker segment" },
-        { "sos", "A Start Of Scan marker segment" },
-        { "app0JFXX", "A JFIF extension marker segment" },
-        { "app2ICC", "An ICC profile APP2 marker segment" },
-        { "JFIFthumbJPEG",
-          "A JFIF thumbnail in JPEG format (no JFIF segments permitted)" },
-        { "JFIFthumbPalette", "A JFIF thumbnail as an RGB indexed image" },
-        { "JFIFthumbRGB", "A JFIF thumbnail as an RGB image" },
-        { "componentSpec", "A component specification for a frame" },
-        { "scanComponentSpec", "A component specification for a scan" },
-
-        // Node name + "/" + AttributeName, followed by description
-        { "app0JFIF/majorVersion",
-          "The major JFIF version number" },
-        { "app0JFIF/minorVersion",
-          "The minor JFIF version number" },
-        { "app0JFIF/resUnits",
-          "The resolution units for Xdensity and Ydensity "
-          + "(0 = no units, just aspect ratio; 1 = dots/inch; 2 = dots/cm)" },
-        { "app0JFIF/Xdensity",
-          "The horizontal density or aspect ratio numerator" },
-        { "app0JFIF/Ydensity",
-          "The vertical density or aspect ratio denominator" },
-        { "app0JFIF/thumbWidth",
-          "The width of the thumbnail, or 0 if there isn't one" },
-        { "app0JFIF/thumbHeight",
-          "The height of the thumbnail, or 0 if there isn't one" },
-        { "app0JFXX/extensionCode",
-          "The JFXX extension code identifying thumbnail type: "
-          + "(16 = JPEG, 17 = indexed, 19 = RGB" },
-        { "JFIFthumbPalette/thumbWidth",
-          "The width of the thumbnail" },
-        { "JFIFthumbPalette/thumbHeight",
-          "The height of the thumbnail" },
-        { "JFIFthumbRGB/thumbWidth",
-          "The width of the thumbnail" },
-        { "JFIFthumbRGB/thumbHeight",
-          "The height of the thumbnail" },
-        { "app14Adobe/version",
-          "The version of Adobe APP14 marker segment" },
-        { "app14Adobe/flags0",
-          "The flags0 variable of an APP14 marker segment" },
-        { "app14Adobe/flags1",
-          "The flags1 variable of an APP14 marker segment" },
-        { "app14Adobe/transform",
-          "The color transform applied to the image "
-          + "(0 = Unknown, 1 = YCbCr, 2 = YCCK)" },
-        { "sof/process",
-          "The JPEG process (0 = Baseline sequential, "
-          + "1 = Extended sequential, 2 = Progressive)" },
-        { "sof/samplePrecision",
-          "The number of bits per sample" },
-        { "sof/numLines",
-          "The number of lines in the image" },
-        { "sof/samplesPerLine",
-          "The number of samples per line" },
-        { "sof/numFrameComponents",
-          "The number of components in the image" },
-        { "componentSpec/componentId",
-          "The id for this component" },
-        { "componentSpec/HsamplingFactor",
-          "The horizontal sampling factor for this component" },
-        { "componentSpec/VsamplingFactor",
-          "The vertical sampling factor for this component" },
-        { "componentSpec/QtableSelector",
-          "The quantization table to use for this component" },
-        { "sos/numScanComponents",
-          "The number of components in the scan" },
-        { "sos/startSpectralSelection",
-          "The first spectral band included in this scan" },
-        { "sos/endSpectralSelection",
-          "The last spectral band included in this scan" },
-        { "sos/approxHigh",
-          "The highest bit position included in this scan" },
-        { "sos/approxLow",
-          "The lowest bit position included in this scan" },
-        { "scanComponentSpec/componentSelector",
-          "The id of this component" },
-        { "scanComponentSpec/dcHuffTable",
-          "The huffman table to use for encoding DC coefficients" },
-        { "scanComponentSpec/acHuffTable",
-          "The huffman table to use for encoding AC coefficients" }
-    };
-
-    public JPEGImageMetadataFormatResources() {}
-
-    protected Object[][] getContents() {
-        // return a copy of the combined commonContents and imageContents;
-        // in theory we want a deep clone of the combined arrays,
-        // but since it only contains (immutable) Strings, this shallow
-        // copy is sufficient
-        Object[][] combinedContents =
-            new Object[commonContents.length + imageContents.length][2];
-        int combined = 0;
-        for (int i = 0; i < commonContents.length; i++, combined++) {
-            combinedContents[combined][0] = commonContents[i][0];
-            combinedContents[combined][1] = commonContents[i][1];
-        }
-        for (int i = 0; i < imageContents.length; i++, combined++) {
-            combinedContents[combined][0] = imageContents[i][0];
-            combinedContents[combined][1] = imageContents[i][1];
-        }
-        return combinedContents;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/plugins/jpeg/JPEGImageReader.java b/ojluni/src/main/java/com/sun/imageio/plugins/jpeg/JPEGImageReader.java
deleted file mode 100755
index e151179..0000000
--- a/ojluni/src/main/java/com/sun/imageio/plugins/jpeg/JPEGImageReader.java
+++ /dev/null
@@ -1,1820 +0,0 @@
-/*
- * Copyright (c) 2000, 2007, 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.imageio.plugins.jpeg;
-
-import javax.imageio.IIOException;
-import javax.imageio.ImageReader;
-import javax.imageio.ImageReadParam;
-import javax.imageio.ImageTypeSpecifier;
-import javax.imageio.metadata.IIOMetadata;
-import javax.imageio.spi.ImageReaderSpi;
-import javax.imageio.stream.ImageInputStream;
-import javax.imageio.plugins.jpeg.JPEGImageReadParam;
-import javax.imageio.plugins.jpeg.JPEGQTable;
-import javax.imageio.plugins.jpeg.JPEGHuffmanTable;
-
-import java.awt.Point;
-import java.awt.Rectangle;
-import java.awt.color.ColorSpace;
-import java.awt.color.ICC_Profile;
-import java.awt.color.ICC_ColorSpace;
-import java.awt.color.CMMException;
-import java.awt.image.BufferedImage;
-import java.awt.image.Raster;
-import java.awt.image.WritableRaster;
-import java.awt.image.DataBuffer;
-import java.awt.image.DataBufferByte;
-import java.awt.image.ColorModel;
-import java.awt.image.IndexColorModel;
-import java.awt.image.ColorConvertOp;
-import java.io.IOException;
-import java.util.List;
-import java.util.Iterator;
-import java.util.ArrayList;
-import java.util.NoSuchElementException;
-
-import sun.java2d.Disposer;
-import sun.java2d.DisposerRecord;
-
-public class JPEGImageReader extends ImageReader {
-
-    private boolean debug = false;
-
-    /**
-     * The following variable contains a pointer to the IJG library
-     * structure for this reader.  It is assigned in the constructor
-     * and then is passed in to every native call.  It is set to 0
-     * by dispose to avoid disposing twice.
-     */
-    private long structPointer = 0;
-
-    /** The input stream we read from */
-    private ImageInputStream iis = null;
-
-    /**
-     * List of stream positions for images, reinitialized every time
-     * a new input source is set.
-     */
-    private List imagePositions = null;
-
-    /**
-     * The number of images in the stream, or 0.
-     */
-    private int numImages = 0;
-
-    static {
-        java.security.AccessController.doPrivileged(
-            new sun.security.action.LoadLibraryAction("jpeg"));
-        initReaderIDs(ImageInputStream.class,
-                      JPEGQTable.class,
-                      JPEGHuffmanTable.class);
-    }
-
-    // The following warnings are converted to strings when used
-    // as keys to get localized resources from JPEGImageReaderResources
-    // and its children.
-
-    /**
-     * Warning code to be passed to warningOccurred to indicate
-     * that the EOI marker is missing from the end of the stream.
-     * This usually signals that the stream is corrupted, but
-     * everything up to the last MCU should be usable.
-     */
-    protected static final int WARNING_NO_EOI = 0;
-
-    /**
-     * Warning code to be passed to warningOccurred to indicate
-     * that a JFIF segment was encountered inside a JFXX JPEG
-     * thumbnail and is being ignored.
-     */
-    protected static final int WARNING_NO_JFIF_IN_THUMB = 1;
-
-    /**
-     * Warning code to be passed to warningOccurred to indicate
-     * that embedded ICC profile is invalid and will be ignored.
-     */
-    protected static final int WARNING_IGNORE_INVALID_ICC = 2;
-
-    private static final int MAX_WARNING = WARNING_IGNORE_INVALID_ICC;
-
-    /**
-     * Image index of image for which header information
-     * is available.
-     */
-    private int currentImage = -1;
-
-    // The following is copied out from C after reading the header.
-    // Unlike metadata, which may never be retrieved, we need this
-    // if we are to read an image at all.
-
-    /** Set by setImageData native code callback */
-    private int width;
-    /** Set by setImageData native code callback */
-    private int height;
-    /**
-     * Set by setImageData native code callback.  A modified
-     * IJG+NIFTY colorspace code.
-     */
-    private int colorSpaceCode;
-    /**
-     * Set by setImageData native code callback.  A modified
-     * IJG+NIFTY colorspace code.
-     */
-    private int outColorSpaceCode;
-    /** Set by setImageData native code callback */
-    private int numComponents;
-    /** Set by setImageData native code callback */
-    private ColorSpace iccCS = null;
-
-
-    /** If we need to post-convert in Java, convert with this op */
-    private ColorConvertOp convert = null;
-
-    /** The image we are going to fill */
-    private BufferedImage image = null;
-
-    /** An intermediate Raster to hold decoded data */
-    private WritableRaster raster = null;
-
-    /** A view of our target Raster that we can setRect to */
-    private WritableRaster target = null;
-
-    /** The databuffer for the above Raster */
-    private DataBufferByte buffer = null;
-
-    /** The region in the destination where we will write pixels */
-    private Rectangle destROI = null;
-
-    /** The list of destination bands, if any */
-    private int [] destinationBands = null;
-
-    /** Stream metadata, cached, even when the stream is changed. */
-    private JPEGMetadata streamMetadata = null;
-
-    /** Image metadata, valid for the imageMetadataIndex only. */
-    private JPEGMetadata imageMetadata = null;
-    private int imageMetadataIndex = -1;
-
-    /**
-     * Set to true every time we seek in the stream; used to
-     * invalidate the native buffer contents in C.
-     */
-    private boolean haveSeeked = false;
-
-    /**
-     * Tables that have been read from a tables-only image at the
-     * beginning of a stream.
-     */
-    private JPEGQTable [] abbrevQTables = null;
-    private JPEGHuffmanTable[] abbrevDCHuffmanTables = null;
-    private JPEGHuffmanTable[] abbrevACHuffmanTables = null;
-
-    private int minProgressivePass = 0;
-    private int maxProgressivePass = Integer.MAX_VALUE;
-
-    /**
-     * Variables used by progress monitoring.
-     */
-    private static final int UNKNOWN = -1;  // Number of passes
-    private static final int MIN_ESTIMATED_PASSES = 10; // IJG default
-    private int knownPassCount = UNKNOWN;
-    private int pass = 0;
-    private float percentToDate = 0.0F;
-    private float previousPassPercentage = 0.0F;
-    private int progInterval = 0;
-
-    /**
-     * Set to true once stream has been checked for stream metadata
-     */
-    private boolean tablesOnlyChecked = false;
-
-    /** The referent to be registered with the Disposer. */
-    private Object disposerReferent = new Object();
-
-    /** The DisposerRecord that handles the actual disposal of this reader. */
-    private DisposerRecord disposerRecord;
-
-    /** Sets up static C structures. */
-    private static native void initReaderIDs(Class iisClass,
-                                             Class qTableClass,
-                                             Class huffClass);
-
-    public JPEGImageReader(ImageReaderSpi originator) {
-        super(originator);
-        structPointer = initJPEGImageReader();
-        disposerRecord = new JPEGReaderDisposerRecord(structPointer);
-        Disposer.addRecord(disposerReferent, disposerRecord);
-    }
-
-    /** Sets up per-reader C structure and returns a pointer to it. */
-    private native long initJPEGImageReader();
-
-    /**
-     * Called by the native code or other classes to signal a warning.
-     * The code is used to lookup a localized message to be used when
-     * sending warnings to listeners.
-     */
-    protected void warningOccurred(int code) {
-        cbLock.lock();
-        try {
-            if ((code < 0) || (code > MAX_WARNING)){
-                throw new InternalError("Invalid warning index");
-            }
-            processWarningOccurred
-                ("com.sun.imageio.plugins.jpeg.JPEGImageReaderResources",
-                 Integer.toString(code));
-        } finally {
-            cbLock.unlock();
-        }
-    }
-
-    /**
-     * The library has it's own error facility that emits warning messages.
-     * This routine is called by the native code when it has already
-     * formatted a string for output.
-     * XXX  For truly complete localization of all warning messages,
-     * the sun_jpeg_output_message routine in the native code should
-     * send only the codes and parameters to a method here in Java,
-     * which will then format and send the warnings, using localized
-     * strings.  This method will have to deal with all the parameters
-     * and formats (%u with possibly large numbers, %02d, %02x, etc.)
-     * that actually occur in the JPEG library.  For now, this prevents
-     * library warnings from being printed to stderr.
-     */
-    protected void warningWithMessage(String msg) {
-        cbLock.lock();
-        try {
-            processWarningOccurred(msg);
-        } finally {
-            cbLock.unlock();
-        }
-    }
-
-    public void setInput(Object input,
-                         boolean seekForwardOnly,
-                         boolean ignoreMetadata)
-    {
-        setThreadLock();
-        try {
-            cbLock.check();
-
-            super.setInput(input, seekForwardOnly, ignoreMetadata);
-            this.ignoreMetadata = ignoreMetadata;
-            resetInternalState();
-            iis = (ImageInputStream) input; // Always works
-            setSource(structPointer);
-        } finally {
-            clearThreadLock();
-        }
-    }
-
-    /**
-     * This method is called from native code in order to fill
-     * native input buffer.
-     *
-     * We block any attempt to change the reading state during this
-     * method, in order to prevent a corruption of the native decoder
-     * state.
-     *
-     * @return number of bytes read from the stream.
-     */
-    private int readInputData(byte[] buf, int off, int len) throws IOException {
-        cbLock.lock();
-        try {
-            return iis.read(buf, off, len);
-        } finally {
-            cbLock.unlock();
-        }
-    }
-
-    /**
-     * This method is called from the native code in order to
-     * skip requested number of bytes in the input stream.
-     *
-     * @param n
-     * @return
-     * @throws IOException
-     */
-    private long skipInputBytes(long n) throws IOException {
-        cbLock.lock();
-        try {
-            return iis.skipBytes(n);
-        } finally {
-            cbLock.unlock();
-        }
-    }
-
-    private native void setSource(long structPointer);
-
-    private void checkTablesOnly() throws IOException {
-        if (debug) {
-            System.out.println("Checking for tables-only image");
-        }
-        long savePos = iis.getStreamPosition();
-        if (debug) {
-            System.out.println("saved pos is " + savePos);
-            System.out.println("length is " + iis.length());
-        }
-        // Read the first header
-        boolean tablesOnly = readNativeHeader(true);
-        if (tablesOnly) {
-            if (debug) {
-                System.out.println("tables-only image found");
-                long pos = iis.getStreamPosition();
-                System.out.println("pos after return from native is " + pos);
-            }
-            // This reads the tables-only image twice, once from C
-            // and once from Java, but only if ignoreMetadata is false
-            if (ignoreMetadata == false) {
-                iis.seek(savePos);
-                haveSeeked = true;
-                streamMetadata = new JPEGMetadata(true, false,
-                                                  iis, this);
-                long pos = iis.getStreamPosition();
-                if (debug) {
-                    System.out.println
-                        ("pos after constructing stream metadata is " + pos);
-                }
-            }
-            // Now we are at the first image if there are any, so add it
-            // to the list
-            if (hasNextImage()) {
-                imagePositions.add(new Long(iis.getStreamPosition()));
-            }
-        } else { // Not tables only, so add original pos to the list
-            imagePositions.add(new Long(savePos));
-            // And set current image since we've read it now
-            currentImage = 0;
-        }
-        if (seekForwardOnly) {
-            Long pos = (Long) imagePositions.get(imagePositions.size()-1);
-            iis.flushBefore(pos.longValue());
-        }
-        tablesOnlyChecked = true;
-    }
-
-    public int getNumImages(boolean allowSearch) throws IOException {
-        setThreadLock();
-        try { // locked thread
-            cbLock.check();
-
-            return getNumImagesOnThread(allowSearch);
-        } finally {
-            clearThreadLock();
-        }
-    }
-
-    private int getNumImagesOnThread(boolean allowSearch)
-      throws IOException {
-        if (numImages != 0) {
-            return numImages;
-        }
-        if (iis == null) {
-            throw new IllegalStateException("Input not set");
-        }
-        if (allowSearch == true) {
-            if (seekForwardOnly) {
-                throw new IllegalStateException(
-                    "seekForwardOnly and allowSearch can't both be true!");
-            }
-            // Otherwise we have to read the entire stream
-
-            if (!tablesOnlyChecked) {
-                checkTablesOnly();
-            }
-
-            iis.mark();
-
-            gotoImage(0);
-
-            JPEGBuffer buffer = new JPEGBuffer(iis);
-            buffer.loadBuf(0);
-
-            boolean done = false;
-            while (!done) {
-                done = buffer.scanForFF(this);
-                switch (buffer.buf[buffer.bufPtr] & 0xff) {
-                case JPEG.SOI:
-                    numImages++;
-                    // FALL THROUGH to decrement buffer vars
-                    // This first set doesn't have a length
-                case 0: // not a marker, just a data 0xff
-                case JPEG.RST0:
-                case JPEG.RST1:
-                case JPEG.RST2:
-                case JPEG.RST3:
-                case JPEG.RST4:
-                case JPEG.RST5:
-                case JPEG.RST6:
-                case JPEG.RST7:
-                case JPEG.EOI:
-                    buffer.bufAvail--;
-                    buffer.bufPtr++;
-                    break;
-                    // All the others have a length
-                default:
-                    buffer.bufAvail--;
-                    buffer.bufPtr++;
-                    buffer.loadBuf(2);
-                    int length = ((buffer.buf[buffer.bufPtr++] & 0xff) << 8) |
-                        (buffer.buf[buffer.bufPtr++] & 0xff);
-                    buffer.bufAvail -= 2;
-                    length -= 2; // length includes itself
-                    buffer.skipData(length);
-                }
-            }
-
-
-            iis.reset();
-
-            return numImages;
-        }
-
-        return -1;  // Search is necessary for JPEG
-    }
-
-    /**
-     * Sets the input stream to the start of the requested image.
-     * <pre>
-     * @exception IllegalStateException if the input source has not been
-     * set.
-     * @exception IndexOutOfBoundsException if the supplied index is
-     * out of bounds.
-     * </pre>
-     */
-    private void gotoImage(int imageIndex) throws IOException {
-        if (iis == null) {
-            throw new IllegalStateException("Input not set");
-        }
-        if (imageIndex < minIndex) {
-            throw new IndexOutOfBoundsException();
-        }
-        if (!tablesOnlyChecked) {
-            checkTablesOnly();
-        }
-        if (imageIndex < imagePositions.size()) {
-            iis.seek(((Long)(imagePositions.get(imageIndex))).longValue());
-        } else {
-            // read to start of image, saving positions
-            // First seek to the last position we already have, and skip the
-            // entire image
-            Long pos = (Long) imagePositions.get(imagePositions.size()-1);
-            iis.seek(pos.longValue());
-            skipImage();
-            // Now add all intervening positions, skipping images
-            for (int index = imagePositions.size();
-                 index <= imageIndex;
-                 index++) {
-                // Is there an image?
-                if (!hasNextImage()) {
-                    throw new IndexOutOfBoundsException();
-                }
-                pos = new Long(iis.getStreamPosition());
-                imagePositions.add(pos);
-                if (seekForwardOnly) {
-                    iis.flushBefore(pos.longValue());
-                }
-                if (index < imageIndex) {
-                    skipImage();
-                }  // Otherwise we are where we want to be
-            }
-        }
-
-        if (seekForwardOnly) {
-            minIndex = imageIndex;
-        }
-
-        haveSeeked = true;  // No way is native buffer still valid
-    }
-
-    /**
-     * Skip over a complete image in the stream, leaving the stream
-     * positioned such that the next byte to be read is the first
-     * byte of the next image.  For JPEG, this means that we read
-     * until we encounter an EOI marker or until the end of the stream.
-     * If the stream ends before an EOI marker is encountered, an
-     * IndexOutOfBoundsException is thrown.
-     */
-    private void skipImage() throws IOException {
-        if (debug) {
-            System.out.println("skipImage called");
-        }
-        boolean foundFF = false;
-        for (int byteval = iis.read();
-             byteval != -1;
-             byteval = iis.read()) {
-
-            if (foundFF == true) {
-                if (byteval == JPEG.EOI) {
-                    return;
-                }
-            }
-            foundFF = (byteval == 0xff) ? true : false;
-        }
-        throw new IndexOutOfBoundsException();
-    }
-
-    /**
-     * Returns <code>true</code> if there is an image beyond
-     * the current stream position.  Does not disturb the
-     * stream position.
-     */
-    private boolean hasNextImage() throws IOException {
-        if (debug) {
-            System.out.print("hasNextImage called; returning ");
-        }
-        iis.mark();
-        boolean foundFF = false;
-        for (int byteval = iis.read();
-             byteval != -1;
-             byteval = iis.read()) {
-
-            if (foundFF == true) {
-                if (byteval == JPEG.SOI) {
-                    iis.reset();
-                    if (debug) {
-                        System.out.println("true");
-                    }
-                    return true;
-                }
-            }
-            foundFF = (byteval == 0xff) ? true : false;
-        }
-        // We hit the end of the stream before we hit an SOI, so no image
-        iis.reset();
-        if (debug) {
-            System.out.println("false");
-        }
-        return false;
-    }
-
-    /**
-     * Push back the given number of bytes to the input stream.
-     * Called by the native code at the end of each image so
-     * that the next one can be identified from Java.
-     */
-    private void pushBack(int num) throws IOException {
-        if (debug) {
-            System.out.println("pushing back " + num + " bytes");
-        }
-        cbLock.lock();
-        try {
-            iis.seek(iis.getStreamPosition()-num);
-            // The buffer is clear after this, so no need to set haveSeeked.
-        } finally {
-            cbLock.unlock();
-        }
-    }
-
-    /**
-     * Reads header information for the given image, if possible.
-     */
-    private void readHeader(int imageIndex, boolean reset)
-        throws IOException {
-        gotoImage(imageIndex);
-        readNativeHeader(reset); // Ignore return
-        currentImage = imageIndex;
-    }
-
-    private boolean readNativeHeader(boolean reset) throws IOException {
-        boolean retval = false;
-        retval = readImageHeader(structPointer, haveSeeked, reset);
-        haveSeeked = false;
-        return retval;
-    }
-
-    /**
-     * Read in the header information starting from the current
-     * stream position, returning <code>true</code> if the
-     * header was a tables-only image.  After this call, the
-     * native IJG decompression struct will contain the image
-     * information required by most query calls below
-     * (e.g. getWidth, getHeight, etc.), if the header was not
-     * a tables-only image.
-     * If reset is <code>true</code>, the state of the IJG
-     * object is reset so that it can read a header again.
-     * This happens automatically if the header was a tables-only
-     * image.
-     */
-    private native boolean readImageHeader(long structPointer,
-                                           boolean clearBuffer,
-                                           boolean reset)
-        throws IOException;
-
-    /*
-     * Called by the native code whenever an image header has been
-     * read.  Whether we read metadata or not, we always need this
-     * information, so it is passed back independently of
-     * metadata, which may never be read.
-     */
-    private void setImageData(int width,
-                              int height,
-                              int colorSpaceCode,
-                              int outColorSpaceCode,
-                              int numComponents,
-                              byte [] iccData) {
-        this.width = width;
-        this.height = height;
-        this.colorSpaceCode = colorSpaceCode;
-        this.outColorSpaceCode = outColorSpaceCode;
-        this.numComponents = numComponents;
-
-        if (iccData == null) {
-            iccCS = null;
-            return;
-        }
-
-        ICC_Profile newProfile = null;
-        try {
-            newProfile = ICC_Profile.getInstance(iccData);
-        } catch (IllegalArgumentException e) {
-            /*
-             * Color profile data seems to be invalid.
-             * Ignore this profile.
-             */
-            iccCS = null;
-            warningOccurred(WARNING_IGNORE_INVALID_ICC);
-
-            return;
-        }
-        byte[] newData = newProfile.getData();
-
-        ICC_Profile oldProfile = null;
-        if (iccCS instanceof ICC_ColorSpace) {
-            oldProfile = ((ICC_ColorSpace)iccCS).getProfile();
-        }
-        byte[] oldData = null;
-        if (oldProfile != null) {
-            oldData = oldProfile.getData();
-        }
-
-        /*
-         * At the moment we can't rely on the ColorSpace.equals()
-         * and ICC_Profile.equals() because they do not detect
-         * the case when two profiles are created from same data.
-         *
-         * So, we have to do data comparison in order to avoid
-         * creation of different ColorSpace instances for the same
-         * embedded data.
-         */
-        if (oldData == null ||
-            !java.util.Arrays.equals(oldData, newData))
-        {
-            iccCS = new ICC_ColorSpace(newProfile);
-            // verify new color space
-            try {
-                float[] colors = iccCS.fromRGB(new float[] {1f, 0f, 0f});
-            } catch (CMMException e) {
-                /*
-                 * Embedded profile seems to be corrupted.
-                 * Ignore this profile.
-                 */
-                iccCS = null;
-                cbLock.lock();
-                try {
-                    warningOccurred(WARNING_IGNORE_INVALID_ICC);
-                } finally {
-                    cbLock.unlock();
-                }
-            }
-        }
-    }
-
-    public int getWidth(int imageIndex) throws IOException {
-        setThreadLock();
-        try {
-            if (currentImage != imageIndex) {
-                cbLock.check();
-                readHeader(imageIndex, true);
-            }
-            return width;
-        } finally {
-            clearThreadLock();
-        }
-    }
-
-    public int getHeight(int imageIndex) throws IOException {
-        setThreadLock();
-        try {
-            if (currentImage != imageIndex) {
-                cbLock.check();
-                readHeader(imageIndex, true);
-            }
-            return height;
-        } finally {
-            clearThreadLock();
-        }
-    }
-
-    /////////// Color Conversion and Image Types
-
-    /**
-     * Return an ImageTypeSpecifier corresponding to the given
-     * color space code, or null if the color space is unsupported.
-     */
-    private ImageTypeProducer getImageType(int code) {
-        ImageTypeProducer ret = null;
-
-        if ((code > 0) && (code < JPEG.NUM_JCS_CODES)) {
-            ret = ImageTypeProducer.getTypeProducer(code);
-        }
-        return ret;
-    }
-
-    public ImageTypeSpecifier getRawImageType(int imageIndex)
-        throws IOException {
-        setThreadLock();
-        try {
-            if (currentImage != imageIndex) {
-                cbLock.check();
-
-                readHeader(imageIndex, true);
-            }
-
-            // Returns null if it can't be represented
-            return getImageType(colorSpaceCode).getType();
-        } finally {
-            clearThreadLock();
-        }
-    }
-
-    public Iterator getImageTypes(int imageIndex)
-        throws IOException {
-        setThreadLock();
-        try {
-            return getImageTypesOnThread(imageIndex);
-        } finally {
-            clearThreadLock();
-        }
-    }
-
-    private Iterator getImageTypesOnThread(int imageIndex)
-        throws IOException {
-        if (currentImage != imageIndex) {
-            cbLock.check();
-            readHeader(imageIndex, true);
-        }
-
-        // We return an iterator containing the default, any
-        // conversions that the library provides, and
-        // all the other default types with the same number
-        // of components, as we can do these as a post-process.
-        // As we convert Rasters rather than images, images
-        // with alpha cannot be converted in a post-process.
-
-        // If this image can't be interpreted, this method
-        // returns an empty Iterator.
-
-        // Get the raw ITS, if there is one.  Note that this
-        // won't always be the same as the default.
-        ImageTypeProducer raw = getImageType(colorSpaceCode);
-
-        // Given the encoded colorspace, build a list of ITS's
-        // representing outputs you could handle starting
-        // with the default.
-
-        ArrayList<ImageTypeProducer> list = new ArrayList<ImageTypeProducer>(1);
-
-        switch (colorSpaceCode) {
-        case JPEG.JCS_GRAYSCALE:
-            list.add(raw);
-            list.add(getImageType(JPEG.JCS_RGB));
-            break;
-        case JPEG.JCS_RGB:
-            list.add(raw);
-            list.add(getImageType(JPEG.JCS_GRAYSCALE));
-            list.add(getImageType(JPEG.JCS_YCC));
-            break;
-        case JPEG.JCS_RGBA:
-            list.add(raw);
-            break;
-        case JPEG.JCS_YCC:
-            if (raw != null) {  // Might be null if PYCC.pf not installed
-                list.add(raw);
-                list.add(getImageType(JPEG.JCS_RGB));
-            }
-            break;
-        case JPEG.JCS_YCCA:
-            if (raw != null) {  // Might be null if PYCC.pf not installed
-                list.add(raw);
-            }
-            break;
-        case JPEG.JCS_YCbCr:
-            // As there is no YCbCr ColorSpace, we can't support
-            // the raw type.
-
-            // due to 4705399, use RGB as default in order to avoid
-            // slowing down of drawing operations with result image.
-            list.add(getImageType(JPEG.JCS_RGB));
-
-            if (iccCS != null) {
-                list.add(new ImageTypeProducer() {
-                    protected ImageTypeSpecifier produce() {
-                        return ImageTypeSpecifier.createInterleaved
-                         (iccCS,
-                          JPEG.bOffsRGB,  // Assume it's for RGB
-                          DataBuffer.TYPE_BYTE,
-                          false,
-                          false);
-                    }
-                });
-
-            }
-
-            list.add(getImageType(JPEG.JCS_GRAYSCALE));
-            list.add(getImageType(JPEG.JCS_YCC));
-            break;
-        case JPEG.JCS_YCbCrA:  // Default is to convert to RGBA
-            // As there is no YCbCr ColorSpace, we can't support
-            // the raw type.
-            list.add(getImageType(JPEG.JCS_RGBA));
-            break;
-        }
-
-        return new ImageTypeIterator(list.iterator());
-    }
-
-    /**
-     * Checks the implied color conversion between the stream and
-     * the target image, altering the IJG output color space if necessary.
-     * If a java color conversion is required, then this sets up
-     * <code>convert</code>.
-     * If bands are being rearranged at all (either source or destination
-     * bands are specified in the param), then the default color
-     * conversions are assumed to be correct.
-     * Throws an IIOException if there is no conversion available.
-     */
-    private void checkColorConversion(BufferedImage image,
-                                      ImageReadParam param)
-        throws IIOException {
-
-        // If we are rearranging channels at all, the default
-        // conversions remain in place.  If the user wants
-        // raw channels then he should do this while reading
-        // a Raster.
-        if (param != null) {
-            if ((param.getSourceBands() != null) ||
-                (param.getDestinationBands() != null)) {
-                // Accept default conversions out of decoder, silently
-                return;
-            }
-        }
-
-        // XXX - We do not currently support any indexed color models,
-        // though we could, as IJG will quantize for us.
-        // This is a performance and memory-use issue, as
-        // users can read RGB and then convert to indexed in Java.
-
-        ColorModel cm = image.getColorModel();
-
-        if (cm instanceof IndexColorModel) {
-            throw new IIOException("IndexColorModel not supported");
-        }
-
-        // Now check the ColorSpace type against outColorSpaceCode
-        // We may want to tweak the default
-        ColorSpace cs = cm.getColorSpace();
-        int csType = cs.getType();
-        convert = null;
-        switch (outColorSpaceCode) {
-        case JPEG.JCS_GRAYSCALE:  // Its gray in the file
-            if  (csType == ColorSpace.TYPE_RGB) { // We want RGB
-                // IJG can do this for us more efficiently
-                setOutColorSpace(structPointer, JPEG.JCS_RGB);
-                // Update java state according to changes
-                // in the native part of decoder.
-                outColorSpaceCode = JPEG.JCS_RGB;
-                numComponents = 3;
-            } else if (csType != ColorSpace.TYPE_GRAY) {
-                throw new IIOException("Incompatible color conversion");
-            }
-            break;
-        case JPEG.JCS_RGB:  // IJG wants to go to RGB
-            if (csType ==  ColorSpace.TYPE_GRAY) {  // We want gray
-                if (colorSpaceCode == JPEG.JCS_YCbCr) {
-                    // If the jpeg space is YCbCr, IJG can do it
-                    setOutColorSpace(structPointer, JPEG.JCS_GRAYSCALE);
-                    // Update java state according to changes
-                    // in the native part of decoder.
-                    outColorSpaceCode = JPEG.JCS_GRAYSCALE;
-                    numComponents = 1;
-                }
-            } else if ((iccCS != null) &&
-                       (cm.getNumComponents() == numComponents) &&
-                       (cs != iccCS)) {
-                // We have an ICC profile but it isn't used in the dest
-                // image.  So convert from the profile cs to the target cs
-                convert = new ColorConvertOp(iccCS, cs, null);
-                // Leave IJG conversion in place; we still need it
-            } else if ((iccCS == null) &&
-                       (!cs.isCS_sRGB()) &&
-                       (cm.getNumComponents() == numComponents)) {
-                // Target isn't sRGB, so convert from sRGB to the target
-                convert = new ColorConvertOp(JPEG.JCS.sRGB, cs, null);
-            } else if (csType != ColorSpace.TYPE_RGB) {
-                throw new IIOException("Incompatible color conversion");
-            }
-            break;
-        case JPEG.JCS_RGBA:
-            // No conversions available; image must be RGBA
-            if ((csType != ColorSpace.TYPE_RGB) ||
-                (cm.getNumComponents() != numComponents)) {
-                throw new IIOException("Incompatible color conversion");
-            }
-            break;
-        case JPEG.JCS_YCC:
-            {
-                ColorSpace YCC = JPEG.JCS.getYCC();
-                if (YCC == null) { // We can't do YCC at all
-                    throw new IIOException("Incompatible color conversion");
-                }
-                if ((cs != YCC) &&
-                    (cm.getNumComponents() == numComponents)) {
-                    convert = new ColorConvertOp(YCC, cs, null);
-                }
-            }
-            break;
-        case JPEG.JCS_YCCA:
-            {
-                ColorSpace YCC = JPEG.JCS.getYCC();
-                // No conversions available; image must be YCCA
-                if ((YCC == null) || // We can't do YCC at all
-                    (cs != YCC) ||
-                    (cm.getNumComponents() != numComponents)) {
-                    throw new IIOException("Incompatible color conversion");
-                }
-            }
-            break;
-        default:
-            // Anything else we can't handle at all
-            throw new IIOException("Incompatible color conversion");
-        }
-    }
-
-    /**
-     * Set the IJG output space to the given value.  The library will
-     * perform the appropriate colorspace conversions.
-     */
-    private native void setOutColorSpace(long structPointer, int id);
-
-    /////// End of Color Conversion & Image Types
-
-    public ImageReadParam getDefaultReadParam() {
-        return new JPEGImageReadParam();
-    }
-
-    public IIOMetadata getStreamMetadata() throws IOException {
-        setThreadLock();
-        try {
-            if (!tablesOnlyChecked) {
-                cbLock.check();
-                checkTablesOnly();
-            }
-            return streamMetadata;
-        } finally {
-            clearThreadLock();
-        }
-    }
-
-    public IIOMetadata getImageMetadata(int imageIndex)
-        throws IOException {
-        setThreadLock();
-        try {
-            // imageMetadataIndex will always be either a valid index or
-            // -1, in which case imageMetadata will not be null.
-            // So we can leave checking imageIndex for gotoImage.
-            if ((imageMetadataIndex == imageIndex)
-                && (imageMetadata != null)) {
-                return imageMetadata;
-            }
-
-            cbLock.check();
-
-            gotoImage(imageIndex);
-
-            imageMetadata = new JPEGMetadata(false, false, iis, this);
-
-            imageMetadataIndex = imageIndex;
-
-            return imageMetadata;
-        } finally {
-            clearThreadLock();
-        }
-    }
-
-    public BufferedImage read(int imageIndex, ImageReadParam param)
-        throws IOException {
-        setThreadLock();
-        try {
-            cbLock.check();
-            try {
-                readInternal(imageIndex, param, false);
-            } catch (RuntimeException e) {
-                resetLibraryState(structPointer);
-                throw e;
-            } catch (IOException e) {
-                resetLibraryState(structPointer);
-                throw e;
-            }
-
-            BufferedImage ret = image;
-            image = null;  // don't keep a reference here
-            return ret;
-        } finally {
-            clearThreadLock();
-        }
-    }
-
-    private Raster readInternal(int imageIndex,
-                                ImageReadParam param,
-                                boolean wantRaster) throws IOException {
-        readHeader(imageIndex, false);
-
-        WritableRaster imRas = null;
-        int numImageBands = 0;
-
-        if (!wantRaster){
-            // Can we read this image?
-            Iterator imageTypes = getImageTypes(imageIndex);
-            if (imageTypes.hasNext() == false) {
-                throw new IIOException("Unsupported Image Type");
-            }
-
-            image = getDestination(param, imageTypes, width, height);
-            imRas = image.getRaster();
-
-            // The destination may still be incompatible.
-
-            numImageBands = image.getSampleModel().getNumBands();
-
-            // Check whether we can handle any implied color conversion
-
-            // Throws IIOException if the stream and the image are
-            // incompatible, and sets convert if a java conversion
-            // is necessary
-            checkColorConversion(image, param);
-
-            // Check the source and destination bands in the param
-            checkReadParamBandSettings(param, numComponents, numImageBands);
-        } else {
-            // Set the output color space equal to the input colorspace
-            // This disables all conversions
-            setOutColorSpace(structPointer, colorSpaceCode);
-            image = null;
-        }
-
-        // Create an intermediate 1-line Raster that will hold the decoded,
-        // subsampled, clipped, band-selected image data in a single
-        // byte-interleaved buffer.  The above transformations
-        // will occur in C for performance.  Every time this Raster
-        // is filled we will call back to acceptPixels below to copy
-        // this to whatever kind of buffer our image has.
-
-        int [] srcBands = JPEG.bandOffsets[numComponents-1];
-        int numRasterBands = (wantRaster ? numComponents : numImageBands);
-        destinationBands = null;
-
-        Rectangle srcROI = new Rectangle(0, 0, 0, 0);
-        destROI = new Rectangle(0, 0, 0, 0);
-        computeRegions(param, width, height, image, srcROI, destROI);
-
-        int periodX = 1;
-        int periodY = 1;
-
-        minProgressivePass = 0;
-        maxProgressivePass = Integer.MAX_VALUE;
-
-        if (param != null) {
-            periodX = param.getSourceXSubsampling();
-            periodY = param.getSourceYSubsampling();
-
-            int[] sBands = param.getSourceBands();
-            if (sBands != null) {
-                srcBands = sBands;
-                numRasterBands = srcBands.length;
-            }
-            if (!wantRaster) {  // ignore dest bands for Raster
-                destinationBands = param.getDestinationBands();
-            }
-
-            minProgressivePass = param.getSourceMinProgressivePass();
-            maxProgressivePass = param.getSourceMaxProgressivePass();
-
-            if (param instanceof JPEGImageReadParam) {
-                JPEGImageReadParam jparam = (JPEGImageReadParam) param;
-                if (jparam.areTablesSet()) {
-                    abbrevQTables = jparam.getQTables();
-                    abbrevDCHuffmanTables = jparam.getDCHuffmanTables();
-                    abbrevACHuffmanTables = jparam.getACHuffmanTables();
-                }
-            }
-        }
-
-        int lineSize = destROI.width*numRasterBands;
-
-        buffer = new DataBufferByte(lineSize);
-
-        int [] bandOffs = JPEG.bandOffsets[numRasterBands-1];
-
-        raster = Raster.createInterleavedRaster(buffer,
-                                                destROI.width, 1,
-                                                lineSize,
-                                                numRasterBands,
-                                                bandOffs,
-                                                null);
-
-        // Now that we have the Raster we'll decode to, get a view of the
-        // target Raster that will permit a simple setRect for each scanline
-        if (wantRaster) {
-            target =  Raster.createInterleavedRaster(DataBuffer.TYPE_BYTE,
-                                                     destROI.width,
-                                                     destROI.height,
-                                                     lineSize,
-                                                     numRasterBands,
-                                                     bandOffs,
-                                                     null);
-        } else {
-            target = imRas;
-        }
-        int [] bandSizes = target.getSampleModel().getSampleSize();
-
-        /*
-         * If the process is sequential, and we have restart markers,
-         * we could skip to the correct restart marker, if the library
-         * lets us.  That's an optimization to investigate later.
-         */
-
-        // Check for update listeners (don't call back if none)
-        boolean callbackUpdates = ((updateListeners != null)
-                                   || (progressListeners != null));
-
-        // Set up progression data
-        initProgressData();
-        // if we have a metadata object, we can count the scans
-        // and set knownPassCount
-        if (imageIndex == imageMetadataIndex) { // We have metadata
-            knownPassCount = 0;
-            for (Iterator iter = imageMetadata.markerSequence.iterator();
-                 iter.hasNext();) {
-                if (iter.next() instanceof SOSMarkerSegment) {
-                    knownPassCount++;
-                }
-            }
-        }
-        progInterval = Math.max((target.getHeight()-1) / 20, 1);
-        if (knownPassCount > 0) {
-            progInterval *= knownPassCount;
-        } else if (maxProgressivePass != Integer.MAX_VALUE) {
-            progInterval *= (maxProgressivePass - minProgressivePass + 1);
-        }
-
-        if (debug) {
-            System.out.println("**** Read Data *****");
-            System.out.println("numRasterBands is " + numRasterBands);
-            System.out.print("srcBands:");
-            for (int i = 0; i<srcBands.length;i++)
-                System.out.print(" " + srcBands[i]);
-            System.out.println();
-            System.out.println("destination bands is " + destinationBands);
-            if (destinationBands != null) {
-                for (int i = 0; i < destinationBands.length; i++) {
-                    System.out.print(" " + destinationBands[i]);
-                }
-                System.out.println();
-            }
-            System.out.println("sourceROI is " + srcROI);
-            System.out.println("destROI is " + destROI);
-            System.out.println("periodX is " + periodX);
-            System.out.println("periodY is " + periodY);
-            System.out.println("minProgressivePass is " + minProgressivePass);
-            System.out.println("maxProgressivePass is " + maxProgressivePass);
-            System.out.println("callbackUpdates is " + callbackUpdates);
-        }
-
-        // Finally, we are ready to read
-
-        processImageStarted(currentImage);
-
-        boolean aborted = false;
-
-        // Note that getData disables acceleration on buffer, but it is
-        // just a 1-line intermediate data transfer buffer that will not
-        // affect the acceleration of the resulting image.
-        aborted = readImage(structPointer,
-                            buffer.getData(),
-                            numRasterBands,
-                            srcBands,
-                            bandSizes,
-                            srcROI.x, srcROI.y,
-                            srcROI.width, srcROI.height,
-                            periodX, periodY,
-                            abbrevQTables,
-                            abbrevDCHuffmanTables,
-                            abbrevACHuffmanTables,
-                            minProgressivePass, maxProgressivePass,
-                            callbackUpdates);
-
-        if (aborted) {
-            processReadAborted();
-        } else {
-            processImageComplete();
-        }
-
-        return target;
-
-    }
-
-    /**
-     * This method is called back from C when the intermediate Raster
-     * is full.  The parameter indicates the scanline in the target
-     * Raster to which the intermediate Raster should be copied.
-     * After the copy, we notify update listeners.
-     */
-    private void acceptPixels(int y, boolean progressive) {
-        if (convert != null) {
-            convert.filter(raster, raster);
-        }
-        target.setRect(destROI.x, destROI.y + y, raster);
-
-        cbLock.lock();
-        try {
-            processImageUpdate(image,
-                               destROI.x, destROI.y+y,
-                               raster.getWidth(), 1,
-                               1, 1,
-                               destinationBands);
-            if ((y > 0) && (y%progInterval == 0)) {
-                int height = target.getHeight()-1;
-                float percentOfPass = ((float)y)/height;
-                if (progressive) {
-                    if (knownPassCount != UNKNOWN) {
-                        processImageProgress((pass + percentOfPass)*100.0F
-                                             / knownPassCount);
-                    } else if (maxProgressivePass != Integer.MAX_VALUE) {
-                        // Use the range of allowed progressive passes
-                        processImageProgress((pass + percentOfPass)*100.0F
-                                             / (maxProgressivePass - minProgressivePass + 1));
-                    } else {
-                        // Assume there are a minimum of MIN_ESTIMATED_PASSES
-                        // and that there is always one more pass
-                        // Compute the percentage as the percentage at the end
-                        // of the previous pass, plus the percentage of this
-                        // pass scaled to be the percentage of the total remaining,
-                        // assuming a minimum of MIN_ESTIMATED_PASSES passes and
-                        // that there is always one more pass.  This is monotonic
-                        // and asymptotic to 1.0, which is what we need.
-                        int remainingPasses = // including this one
-                            Math.max(2, MIN_ESTIMATED_PASSES-pass);
-                        int totalPasses = pass + remainingPasses-1;
-                        progInterval = Math.max(height/20*totalPasses,
-                                                totalPasses);
-                        if (y%progInterval == 0) {
-                            percentToDate = previousPassPercentage +
-                                (1.0F - previousPassPercentage)
-                                * (percentOfPass)/remainingPasses;
-                            if (debug) {
-                                System.out.print("pass= " + pass);
-                                System.out.print(", y= " + y);
-                                System.out.print(", progInt= " + progInterval);
-                                System.out.print(", % of pass: " + percentOfPass);
-                                System.out.print(", rem. passes: "
-                                                 + remainingPasses);
-                                System.out.print(", prev%: "
-                                                 + previousPassPercentage);
-                                System.out.print(", %ToDate: " + percentToDate);
-                                System.out.print(" ");
-                            }
-                            processImageProgress(percentToDate*100.0F);
-                        }
-                    }
-                } else {
-                    processImageProgress(percentOfPass * 100.0F);
-                }
-            }
-        } finally {
-            cbLock.unlock();
-        }
-    }
-
-    private void initProgressData() {
-        knownPassCount = UNKNOWN;
-        pass = 0;
-        percentToDate = 0.0F;
-        previousPassPercentage = 0.0F;
-        progInterval = 0;
-    }
-
-    private void passStarted (int pass) {
-        cbLock.lock();
-        try {
-            this.pass = pass;
-            previousPassPercentage = percentToDate;
-            processPassStarted(image,
-                               pass,
-                               minProgressivePass,
-                               maxProgressivePass,
-                               0, 0,
-                               1,1,
-                               destinationBands);
-        } finally {
-            cbLock.unlock();
-        }
-    }
-
-    private void passComplete () {
-        cbLock.lock();
-        try {
-            processPassComplete(image);
-        } finally {
-            cbLock.unlock();
-        }
-    }
-
-    void thumbnailStarted(int thumbnailIndex) {
-        cbLock.lock();
-        try {
-            processThumbnailStarted(currentImage, thumbnailIndex);
-        } finally {
-            cbLock.unlock();
-        }
-    }
-
-    // Provide access to protected superclass method
-    void thumbnailProgress(float percentageDone) {
-        cbLock.lock();
-        try {
-            processThumbnailProgress(percentageDone);
-        } finally {
-            cbLock.unlock();
-        }
-    }
-
-    // Provide access to protected superclass method
-    void thumbnailComplete() {
-        cbLock.lock();
-        try {
-            processThumbnailComplete();
-        } finally {
-            cbLock.unlock();
-        }
-    }
-
-    /**
-     * Returns <code>true</code> if the read was aborted.
-     */
-    private native boolean readImage(long structPointer,
-                                     byte [] buffer,
-                                     int numRasterBands,
-                                     int [] srcBands,
-                                     int [] bandSizes,
-                                     int sourceXOffset, int sourceYOffset,
-                                     int sourceWidth, int sourceHeight,
-                                     int periodX, int periodY,
-                                     JPEGQTable [] abbrevQTables,
-                                     JPEGHuffmanTable [] abbrevDCHuffmanTables,
-                                     JPEGHuffmanTable [] abbrevACHuffmanTables,
-                                     int minProgressivePass,
-                                     int maxProgressivePass,
-                                     boolean wantUpdates);
-
-    public void abort() {
-        setThreadLock();
-        try {
-            /**
-             * NB: we do not check the call back lock here,
-             * we allow to abort the reader any time.
-             */
-
-            super.abort();
-            abortRead(structPointer);
-        } finally {
-            clearThreadLock();
-        }
-    }
-
-    /** Set the C level abort flag. Keep it atomic for thread safety. */
-    private native void abortRead(long structPointer);
-
-    /** Resets library state when an exception occurred during a read. */
-    private native void resetLibraryState(long structPointer);
-
-    public boolean canReadRaster() {
-        return true;
-    }
-
-    public Raster readRaster(int imageIndex, ImageReadParam param)
-        throws IOException {
-        setThreadLock();
-        Raster retval = null;
-        try {
-            cbLock.check();
-            /*
-             * This could be further optimized by not resetting the dest.
-             * offset and creating a translated raster in readInternal()
-             * (see bug 4994702 for more info).
-             */
-
-            // For Rasters, destination offset is logical, not physical, so
-            // set it to 0 before calling computeRegions, so that the destination
-            // region is not clipped.
-            Point saveDestOffset = null;
-            if (param != null) {
-                saveDestOffset = param.getDestinationOffset();
-                param.setDestinationOffset(new Point(0, 0));
-            }
-            retval = readInternal(imageIndex, param, true);
-            // Apply the destination offset, if any, as a logical offset
-            if (saveDestOffset != null) {
-                target = target.createWritableTranslatedChild(saveDestOffset.x,
-                                                              saveDestOffset.y);
-            }
-        } catch (RuntimeException e) {
-            resetLibraryState(structPointer);
-            throw e;
-        } catch (IOException e) {
-            resetLibraryState(structPointer);
-            throw e;
-        } finally {
-            clearThreadLock();
-        }
-        return retval;
-    }
-
-    public boolean readerSupportsThumbnails() {
-        return true;
-    }
-
-    public int getNumThumbnails(int imageIndex) throws IOException {
-        setThreadLock();
-        try {
-            cbLock.check();
-
-            getImageMetadata(imageIndex);  // checks iis state for us
-            // Now check the jfif segments
-            JFIFMarkerSegment jfif =
-                (JFIFMarkerSegment) imageMetadata.findMarkerSegment
-                (JFIFMarkerSegment.class, true);
-            int retval = 0;
-            if (jfif != null) {
-                retval = (jfif.thumb == null) ? 0 : 1;
-                retval += jfif.extSegments.size();
-            }
-            return retval;
-        } finally {
-            clearThreadLock();
-        }
-    }
-
-    public int getThumbnailWidth(int imageIndex, int thumbnailIndex)
-        throws IOException {
-        setThreadLock();
-        try {
-            cbLock.check();
-
-            if ((thumbnailIndex < 0)
-                || (thumbnailIndex >= getNumThumbnails(imageIndex))) {
-                throw new IndexOutOfBoundsException("No such thumbnail");
-            }
-            // Now we know that there is a jfif segment
-            JFIFMarkerSegment jfif =
-                (JFIFMarkerSegment) imageMetadata.findMarkerSegment
-                (JFIFMarkerSegment.class, true);
-            return  jfif.getThumbnailWidth(thumbnailIndex);
-        } finally {
-            clearThreadLock();
-        }
-    }
-
-    public int getThumbnailHeight(int imageIndex, int thumbnailIndex)
-        throws IOException {
-        setThreadLock();
-        try {
-            cbLock.check();
-
-            if ((thumbnailIndex < 0)
-                || (thumbnailIndex >= getNumThumbnails(imageIndex))) {
-                throw new IndexOutOfBoundsException("No such thumbnail");
-            }
-            // Now we know that there is a jfif segment
-            JFIFMarkerSegment jfif =
-                (JFIFMarkerSegment) imageMetadata.findMarkerSegment
-                (JFIFMarkerSegment.class, true);
-            return  jfif.getThumbnailHeight(thumbnailIndex);
-        } finally {
-            clearThreadLock();
-        }
-    }
-
-    public BufferedImage readThumbnail(int imageIndex,
-                                       int thumbnailIndex)
-        throws IOException {
-        setThreadLock();
-        try {
-            cbLock.check();
-
-            if ((thumbnailIndex < 0)
-                || (thumbnailIndex >= getNumThumbnails(imageIndex))) {
-                throw new IndexOutOfBoundsException("No such thumbnail");
-            }
-            // Now we know that there is a jfif segment and that iis is good
-            JFIFMarkerSegment jfif =
-                (JFIFMarkerSegment) imageMetadata.findMarkerSegment
-                (JFIFMarkerSegment.class, true);
-            return  jfif.getThumbnail(iis, thumbnailIndex, this);
-        } finally {
-            clearThreadLock();
-        }
-    }
-
-    private void resetInternalState() {
-        // reset C structures
-        resetReader(structPointer);
-
-        // reset local Java structures
-        numImages = 0;
-        imagePositions = new ArrayList();
-        currentImage = -1;
-        image = null;
-        raster = null;
-        target = null;
-        buffer = null;
-        destROI = null;
-        destinationBands = null;
-        streamMetadata = null;
-        imageMetadata = null;
-        imageMetadataIndex = -1;
-        haveSeeked = false;
-        tablesOnlyChecked = false;
-        iccCS = null;
-        initProgressData();
-    }
-
-    public void reset() {
-        setThreadLock();
-        try {
-            cbLock.check();
-            super.reset();
-        } finally {
-            clearThreadLock();
-        }
-    }
-
-    private native void resetReader(long structPointer);
-
-    public void dispose() {
-        setThreadLock();
-        try {
-            cbLock.check();
-
-            if (structPointer != 0) {
-                disposerRecord.dispose();
-                structPointer = 0;
-            }
-        } finally {
-            clearThreadLock();
-        }
-    }
-
-    private static native void disposeReader(long structPointer);
-
-    private static class JPEGReaderDisposerRecord implements DisposerRecord {
-        private long pData;
-
-        public JPEGReaderDisposerRecord(long pData) {
-            this.pData = pData;
-        }
-
-        public synchronized void dispose() {
-            if (pData != 0) {
-                disposeReader(pData);
-                pData = 0;
-            }
-        }
-    }
-
-    private Thread theThread = null;
-    private int theLockCount = 0;
-
-    private synchronized void setThreadLock() {
-        Thread currThread = Thread.currentThread();
-        if (theThread != null) {
-            if (theThread != currThread) {
-                // it looks like that this reader instance is used
-                // by multiple threads.
-                throw new IllegalStateException("Attempt to use instance of " +
-                                                this + " locked on thread " +
-                                                theThread + " from thread " +
-                                                currThread);
-            } else {
-                theLockCount ++;
-            }
-        } else {
-            theThread = currThread;
-            theLockCount = 1;
-        }
-    }
-
-    private synchronized void clearThreadLock() {
-        Thread currThread = Thread.currentThread();
-        if (theThread == null || theThread != currThread) {
-            throw new IllegalStateException("Attempt to clear thread lock " +
-                                            " form wrong thread." +
-                                            " Locked thread: " + theThread +
-                                            "; current thread: " + currThread);
-        }
-        theLockCount --;
-        if (theLockCount == 0) {
-            theThread = null;
-        }
-    }
-
-    private CallBackLock cbLock = new CallBackLock();
-
-    private static class CallBackLock {
-
-        private State lockState;
-
-        CallBackLock() {
-            lockState = State.Unlocked;
-        }
-
-        void check() {
-            if (lockState != State.Unlocked) {
-                throw new IllegalStateException("Access to the reader is not allowed");
-            }
-        }
-
-        private void lock() {
-            lockState = State.Locked;
-        }
-
-        private void unlock() {
-            lockState = State.Unlocked;
-        }
-
-        private static enum State {
-            Unlocked,
-            Locked
-        }
-    }
-}
-
-/**
- * An internal helper class that wraps producer's iterator
- * and extracts specifier instances on demand.
- */
-class ImageTypeIterator implements Iterator<ImageTypeSpecifier> {
-     private Iterator<ImageTypeProducer> producers;
-     private ImageTypeSpecifier theNext = null;
-
-     public ImageTypeIterator(Iterator<ImageTypeProducer> producers) {
-         this.producers = producers;
-     }
-
-     public boolean hasNext() {
-         if (theNext != null) {
-             return true;
-         }
-         if (!producers.hasNext()) {
-             return false;
-         }
-         do {
-             theNext = producers.next().getType();
-         } while (theNext == null && producers.hasNext());
-
-         return (theNext != null);
-     }
-
-     public ImageTypeSpecifier next() {
-         if (theNext != null || hasNext()) {
-             ImageTypeSpecifier t = theNext;
-             theNext = null;
-             return t;
-         } else {
-             throw new NoSuchElementException();
-         }
-     }
-
-     public void remove() {
-         producers.remove();
-     }
-}
-
-/**
- * An internal helper class that provides means for deferred creation
- * of ImageTypeSpecifier instance required to describe available
- * destination types.
- *
- * This implementation only supports standard
- * jpeg color spaces (defined by corresponding JCS color space code).
- *
- * To support other color spaces one can override produce() method to
- * return custom instance of ImageTypeSpecifier.
- */
-class ImageTypeProducer {
-
-    private ImageTypeSpecifier type = null;
-    boolean failed = false;
-    private int csCode;
-
-    public ImageTypeProducer(int csCode) {
-        this.csCode = csCode;
-    }
-
-    public ImageTypeProducer() {
-        csCode = -1; // undefined
-    }
-
-    public synchronized ImageTypeSpecifier getType() {
-        if (!failed && type == null) {
-            try {
-                type = produce();
-            } catch (Throwable e) {
-                failed = true;
-            }
-        }
-        return type;
-    }
-
-    private static final ImageTypeProducer [] defaultTypes =
-            new ImageTypeProducer [JPEG.NUM_JCS_CODES];
-
-    public synchronized static ImageTypeProducer getTypeProducer(int csCode) {
-        if (csCode < 0 || csCode >= JPEG.NUM_JCS_CODES) {
-            return null;
-        }
-        if (defaultTypes[csCode] == null) {
-            defaultTypes[csCode] = new ImageTypeProducer(csCode);
-        }
-        return defaultTypes[csCode];
-    }
-
-    protected ImageTypeSpecifier produce() {
-        switch (csCode) {
-            case JPEG.JCS_GRAYSCALE:
-                return ImageTypeSpecifier.createFromBufferedImageType
-                        (BufferedImage.TYPE_BYTE_GRAY);
-            case JPEG.JCS_RGB:
-                return ImageTypeSpecifier.createInterleaved(JPEG.JCS.sRGB,
-                        JPEG.bOffsRGB,
-                        DataBuffer.TYPE_BYTE,
-                        false,
-                        false);
-            case JPEG.JCS_RGBA:
-                return ImageTypeSpecifier.createPacked(JPEG.JCS.sRGB,
-                        0xff000000,
-                        0x00ff0000,
-                        0x0000ff00,
-                        0x000000ff,
-                        DataBuffer.TYPE_INT,
-                        false);
-            case JPEG.JCS_YCC:
-                if (JPEG.JCS.getYCC() != null) {
-                    return ImageTypeSpecifier.createInterleaved(
-                            JPEG.JCS.getYCC(),
-                        JPEG.bandOffsets[2],
-                        DataBuffer.TYPE_BYTE,
-                        false,
-                        false);
-                } else {
-                    return null;
-                }
-            case JPEG.JCS_YCCA:
-                if (JPEG.JCS.getYCC() != null) {
-                    return ImageTypeSpecifier.createInterleaved(
-                            JPEG.JCS.getYCC(),
-                        JPEG.bandOffsets[3],
-                        DataBuffer.TYPE_BYTE,
-                        true,
-                        false);
-                } else {
-                    return null;
-                }
-            default:
-                return null;
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/plugins/jpeg/JPEGImageReaderResources.java b/ojluni/src/main/java/com/sun/imageio/plugins/jpeg/JPEGImageReaderResources.java
deleted file mode 100755
index e4b0919..0000000
--- a/ojluni/src/main/java/com/sun/imageio/plugins/jpeg/JPEGImageReaderResources.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (c) 2001, 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.
- */
-
-package com.sun.imageio.plugins.jpeg;
-
-import java.util.ListResourceBundle;
-
-public class JPEGImageReaderResources extends ListResourceBundle {
-
-    public JPEGImageReaderResources() {}
-
-    protected Object[][] getContents() {
-        return new Object[][] {
-
-        {Integer.toString(JPEGImageReader.WARNING_NO_EOI),
-         "Truncated File - Missing EOI marker"},
-        {Integer.toString(JPEGImageReader.WARNING_NO_JFIF_IN_THUMB),
-         "JFIF markers not allowed in JFIF JPEG thumbnail; ignored"},
-        {Integer.toString(JPEGImageReader.WARNING_IGNORE_INVALID_ICC),
-         "Embedded color profile is invalid; ignored"}
-
-        };
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/plugins/jpeg/JPEGImageReaderSpi.java b/ojluni/src/main/java/com/sun/imageio/plugins/jpeg/JPEGImageReaderSpi.java
deleted file mode 100755
index 8d2569e..0000000
--- a/ojluni/src/main/java/com/sun/imageio/plugins/jpeg/JPEGImageReaderSpi.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Copyright (c) 2000, 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.
- */
-
-package com.sun.imageio.plugins.jpeg;
-
-import java.util.Locale;
-import javax.imageio.spi.ImageReaderSpi;
-import javax.imageio.stream.ImageInputStream;
-import javax.imageio.spi.IIORegistry;
-import javax.imageio.spi.ServiceRegistry;
-import java.io.IOException;
-import javax.imageio.ImageReader;
-import javax.imageio.IIOException;
-
-public class JPEGImageReaderSpi extends ImageReaderSpi {
-
-    private static String [] writerSpiNames =
-        {"com.sun.imageio.plugins.jpeg.JPEGImageWriterSpi"};
-
-    public JPEGImageReaderSpi() {
-        super(JPEG.vendor,
-              JPEG.version,
-              JPEG.names,
-              JPEG.suffixes,
-              JPEG.MIMETypes,
-              "com.sun.imageio.plugins.jpeg.JPEGImageReader",
-              new Class[] { ImageInputStream.class },
-              writerSpiNames,
-              true,
-              JPEG.nativeStreamMetadataFormatName,
-              JPEG.nativeStreamMetadataFormatClassName,
-              null, null,
-              true,
-              JPEG.nativeImageMetadataFormatName,
-              JPEG.nativeImageMetadataFormatClassName,
-              null, null
-              );
-    }
-
-    public String getDescription(Locale locale) {
-        return "Standard JPEG Image Reader";
-    }
-
-    public boolean canDecodeInput(Object source) throws IOException {
-        if (!(source instanceof ImageInputStream)) {
-            return false;
-        }
-        ImageInputStream iis = (ImageInputStream) source;
-        iis.mark();
-        // If the first two bytes are a JPEG SOI marker, it's probably
-        // a JPEG file.  If they aren't, it definitely isn't a JPEG file.
-        int byte1 = iis.read();
-        int byte2 = iis.read();
-        iis.reset();
-        if ((byte1 == 0xFF) && (byte2 == JPEG.SOI)) {
-            return true;
-        }
-        return false;
-    }
-
-    public ImageReader createReaderInstance(Object extension)
-        throws IIOException {
-        return new JPEGImageReader(this);
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/plugins/jpeg/JPEGImageWriter.java b/ojluni/src/main/java/com/sun/imageio/plugins/jpeg/JPEGImageWriter.java
deleted file mode 100755
index 8fdce8d..0000000
--- a/ojluni/src/main/java/com/sun/imageio/plugins/jpeg/JPEGImageWriter.java
+++ /dev/null
@@ -1,1908 +0,0 @@
-/*
- * Copyright (c) 2000, 2007, 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.imageio.plugins.jpeg;
-
-import javax.imageio.IIOException;
-import javax.imageio.ImageWriter;
-import javax.imageio.ImageWriteParam;
-import javax.imageio.IIOImage;
-import javax.imageio.ImageTypeSpecifier;
-import javax.imageio.metadata.IIOMetadata;
-import javax.imageio.metadata.IIOMetadataFormatImpl;
-import javax.imageio.metadata.IIOInvalidTreeException;
-import javax.imageio.spi.ImageWriterSpi;
-import javax.imageio.stream.ImageOutputStream;
-import javax.imageio.plugins.jpeg.JPEGImageWriteParam;
-import javax.imageio.plugins.jpeg.JPEGQTable;
-import javax.imageio.plugins.jpeg.JPEGHuffmanTable;
-
-import org.w3c.dom.Node;
-
-import java.awt.image.Raster;
-import java.awt.image.WritableRaster;
-import java.awt.image.SampleModel;
-import java.awt.image.DataBuffer;
-import java.awt.image.DataBufferByte;
-import java.awt.image.ColorModel;
-import java.awt.image.IndexColorModel;
-import java.awt.image.ColorConvertOp;
-import java.awt.image.RenderedImage;
-import java.awt.image.BufferedImage;
-import java.awt.color.ColorSpace;
-import java.awt.color.ICC_ColorSpace;
-import java.awt.color.ICC_Profile;
-import java.awt.Dimension;
-import java.awt.Rectangle;
-import java.awt.Transparency;
-
-import java.io.IOException;
-
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Iterator;
-
-import sun.java2d.Disposer;
-import sun.java2d.DisposerRecord;
-
-public class JPEGImageWriter extends ImageWriter {
-
-    ///////// Private variables
-
-    private boolean debug = false;
-
-    /**
-     * The following variable contains a pointer to the IJG library
-     * structure for this reader.  It is assigned in the constructor
-     * and then is passed in to every native call.  It is set to 0
-     * by dispose to avoid disposing twice.
-     */
-    private long structPointer = 0;
-
-
-    /** The output stream we write to */
-    private ImageOutputStream ios = null;
-
-    /** The Raster we will write from */
-    private Raster srcRas = null;
-
-    /** An intermediate Raster holding compressor-friendly data */
-    private WritableRaster raster = null;
-
-    /**
-     * Set to true if we are writing an image with an
-     * indexed ColorModel
-     */
-    private boolean indexed = false;
-    private IndexColorModel indexCM = null;
-
-    private boolean convertTosRGB = false;  // Used by PhotoYCC only
-    private WritableRaster converted = null;
-
-    private boolean isAlphaPremultiplied = false;
-    private ColorModel srcCM = null;
-
-    /**
-     * If there are thumbnails to be written, this is the list.
-     */
-    private List thumbnails = null;
-
-    /**
-     * If metadata should include an icc profile, store it here.
-     */
-    private ICC_Profile iccProfile = null;
-
-    private int sourceXOffset = 0;
-    private int sourceYOffset = 0;
-    private int sourceWidth = 0;
-    private int [] srcBands = null;
-    private int sourceHeight = 0;
-
-    /** Used when calling listeners */
-    private int currentImage = 0;
-
-    private ColorConvertOp convertOp = null;
-
-    private JPEGQTable [] streamQTables = null;
-    private JPEGHuffmanTable[] streamDCHuffmanTables = null;
-    private JPEGHuffmanTable[] streamACHuffmanTables = null;
-
-    // Parameters for writing metadata
-    private boolean ignoreJFIF = false;  // If it's there, use it
-    private boolean forceJFIF = false;  // Add one for the thumbnails
-    private boolean ignoreAdobe = false;  // If it's there, use it
-    private int newAdobeTransform = JPEG.ADOBE_IMPOSSIBLE;  // Change if needed
-    private boolean writeDefaultJFIF = false;
-    private boolean writeAdobe = false;
-    private JPEGMetadata metadata = null;
-
-    private boolean sequencePrepared = false;
-
-    private int numScans = 0;
-
-    /** The referent to be registered with the Disposer. */
-    private Object disposerReferent = new Object();
-
-    /** The DisposerRecord that handles the actual disposal of this writer. */
-    private DisposerRecord disposerRecord;
-
-    ///////// End of Private variables
-
-    ///////// Protected variables
-
-    protected static final int WARNING_DEST_IGNORED = 0;
-    protected static final int WARNING_STREAM_METADATA_IGNORED = 1;
-    protected static final int WARNING_DEST_METADATA_COMP_MISMATCH = 2;
-    protected static final int WARNING_DEST_METADATA_JFIF_MISMATCH = 3;
-    protected static final int WARNING_DEST_METADATA_ADOBE_MISMATCH = 4;
-    protected static final int WARNING_IMAGE_METADATA_JFIF_MISMATCH = 5;
-    protected static final int WARNING_IMAGE_METADATA_ADOBE_MISMATCH = 6;
-    protected static final int WARNING_METADATA_NOT_JPEG_FOR_RASTER = 7;
-    protected static final int WARNING_NO_BANDS_ON_INDEXED = 8;
-    protected static final int WARNING_ILLEGAL_THUMBNAIL = 9;
-    protected static final int WARNING_IGNORING_THUMBS = 10;
-    protected static final int WARNING_FORCING_JFIF = 11;
-    protected static final int WARNING_THUMB_CLIPPED = 12;
-    protected static final int WARNING_METADATA_ADJUSTED_FOR_THUMB = 13;
-    protected static final int WARNING_NO_RGB_THUMB_AS_INDEXED = 14;
-    protected static final int WARNING_NO_GRAY_THUMB_AS_INDEXED = 15;
-
-    private static final int MAX_WARNING = WARNING_NO_GRAY_THUMB_AS_INDEXED;
-
-    ///////// End of Protected variables
-
-    ///////// static initializer
-
-    static {
-        java.security.AccessController.doPrivileged(
-            new sun.security.action.LoadLibraryAction("jpeg"));
-        initWriterIDs(JPEGQTable.class,
-                      JPEGHuffmanTable.class);
-    }
-
-    //////// Public API
-
-    public JPEGImageWriter(ImageWriterSpi originator) {
-        super(originator);
-        structPointer = initJPEGImageWriter();
-        disposerRecord = new JPEGWriterDisposerRecord(structPointer);
-        Disposer.addRecord(disposerReferent, disposerRecord);
-    }
-
-    public void setOutput(Object output) {
-        setThreadLock();
-        try {
-            cbLock.check();
-
-            super.setOutput(output); // validates output
-            resetInternalState();
-            ios = (ImageOutputStream) output; // so this will always work
-            // Set the native destination
-            setDest(structPointer);
-        } finally {
-            clearThreadLock();
-        }
-    }
-
-    public ImageWriteParam getDefaultWriteParam() {
-        return new JPEGImageWriteParam(null);
-    }
-
-    public IIOMetadata getDefaultStreamMetadata(ImageWriteParam param) {
-        setThreadLock();
-        try {
-            return new JPEGMetadata(param, this);
-        } finally {
-            clearThreadLock();
-        }
-    }
-
-    public IIOMetadata
-        getDefaultImageMetadata(ImageTypeSpecifier imageType,
-                                ImageWriteParam param) {
-        setThreadLock();
-        try {
-            return new JPEGMetadata(imageType, param, this);
-        } finally {
-            clearThreadLock();
-        }
-    }
-
-    public IIOMetadata convertStreamMetadata(IIOMetadata inData,
-                                             ImageWriteParam param) {
-        // There isn't much we can do.  If it's one of ours, then
-        // return it.  Otherwise just return null.  We use it only
-        // for tables, so we can't get a default and modify it,
-        // as this will usually not be what is intended.
-        if (inData instanceof JPEGMetadata) {
-            JPEGMetadata jpegData = (JPEGMetadata) inData;
-            if (jpegData.isStream) {
-                return inData;
-            }
-        }
-        return null;
-    }
-
-    public IIOMetadata
-        convertImageMetadata(IIOMetadata inData,
-                             ImageTypeSpecifier imageType,
-                             ImageWriteParam param) {
-        setThreadLock();
-        try {
-            return convertImageMetadataOnThread(inData, imageType, param);
-        } finally {
-            clearThreadLock();
-        }
-    }
-
-    private IIOMetadata
-        convertImageMetadataOnThread(IIOMetadata inData,
-                                     ImageTypeSpecifier imageType,
-                                     ImageWriteParam param) {
-        // If it's one of ours, just return it
-        if (inData instanceof JPEGMetadata) {
-            JPEGMetadata jpegData = (JPEGMetadata) inData;
-            if (!jpegData.isStream) {
-                return inData;
-            } else {
-                // Can't convert stream metadata to image metadata
-                // XXX Maybe this should put out a warning?
-                return null;
-            }
-        }
-        // If it's not one of ours, create a default and set it from
-        // the standard tree from the input, if it exists.
-        if (inData.isStandardMetadataFormatSupported()) {
-            String formatName =
-                IIOMetadataFormatImpl.standardMetadataFormatName;
-            Node tree = inData.getAsTree(formatName);
-            if (tree != null) {
-                JPEGMetadata jpegData = new JPEGMetadata(imageType,
-                                                         param,
-                                                         this);
-                try {
-                    jpegData.setFromTree(formatName, tree);
-                } catch (IIOInvalidTreeException e) {
-                    // Other plug-in generates bogus standard tree
-                    // XXX Maybe this should put out a warning?
-                    return null;
-                }
-
-                return jpegData;
-            }
-        }
-        return null;
-    }
-
-    public int getNumThumbnailsSupported(ImageTypeSpecifier imageType,
-                                         ImageWriteParam param,
-                                         IIOMetadata streamMetadata,
-                                         IIOMetadata imageMetadata) {
-        if (jfifOK(imageType, param, streamMetadata, imageMetadata)) {
-            return Integer.MAX_VALUE;
-        }
-        return 0;
-    }
-
-    static final Dimension [] preferredThumbSizes = {new Dimension(1, 1),
-                                                     new Dimension(255, 255)};
-
-    public Dimension[] getPreferredThumbnailSizes(ImageTypeSpecifier imageType,
-                                                  ImageWriteParam param,
-                                                  IIOMetadata streamMetadata,
-                                                  IIOMetadata imageMetadata) {
-        if (jfifOK(imageType, param, streamMetadata, imageMetadata)) {
-            return (Dimension [])preferredThumbSizes.clone();
-        }
-        return null;
-    }
-
-    private boolean jfifOK(ImageTypeSpecifier imageType,
-                           ImageWriteParam param,
-                           IIOMetadata streamMetadata,
-                           IIOMetadata imageMetadata) {
-        // If the image type and metadata are JFIF compatible, return true
-        if ((imageType != null) &&
-            (!JPEG.isJFIFcompliant(imageType, true))) {
-            return false;
-        }
-        if (imageMetadata != null) {
-            JPEGMetadata metadata = null;
-            if (imageMetadata instanceof JPEGMetadata) {
-                metadata = (JPEGMetadata) imageMetadata;
-            } else {
-                metadata = (JPEGMetadata)convertImageMetadata(imageMetadata,
-                                                              imageType,
-                                                              param);
-            }
-            // metadata must have a jfif node
-            if (metadata.findMarkerSegment
-                (JFIFMarkerSegment.class, true) == null){
-                return false;
-            }
-        }
-        return true;
-    }
-
-    public boolean canWriteRasters() {
-        return true;
-    }
-
-    public void write(IIOMetadata streamMetadata,
-                      IIOImage image,
-                      ImageWriteParam param) throws IOException {
-        setThreadLock();
-        try {
-            cbLock.check();
-
-            writeOnThread(streamMetadata, image, param);
-        } finally {
-            clearThreadLock();
-        }
-    }
-
-    private void writeOnThread(IIOMetadata streamMetadata,
-                      IIOImage image,
-                      ImageWriteParam param) throws IOException {
-
-        if (ios == null) {
-            throw new IllegalStateException("Output has not been set!");
-        }
-
-        if (image == null) {
-            throw new IllegalArgumentException("image is null!");
-        }
-
-        // if streamMetadata is not null, issue a warning
-        if (streamMetadata != null) {
-            warningOccurred(WARNING_STREAM_METADATA_IGNORED);
-        }
-
-        // Obtain the raster and image, if there is one
-        boolean rasterOnly = image.hasRaster();
-
-        RenderedImage rimage = null;
-        if (rasterOnly) {
-            srcRas = image.getRaster();
-        } else {
-            rimage = image.getRenderedImage();
-            if (rimage instanceof BufferedImage) {
-                // Use the Raster directly.
-                srcRas = ((BufferedImage)rimage).getRaster();
-            } else if (rimage.getNumXTiles() == 1 &&
-                       rimage.getNumYTiles() == 1)
-            {
-                // Get the unique tile.
-                srcRas = rimage.getTile(rimage.getMinTileX(),
-                                        rimage.getMinTileY());
-
-                // Ensure the Raster has dimensions of the image,
-                // as the tile dimensions might differ.
-                if (srcRas.getWidth() != rimage.getWidth() ||
-                    srcRas.getHeight() != rimage.getHeight())
-                {
-                    srcRas = srcRas.createChild(srcRas.getMinX(),
-                                                srcRas.getMinY(),
-                                                rimage.getWidth(),
-                                                rimage.getHeight(),
-                                                srcRas.getMinX(),
-                                                srcRas.getMinY(),
-                                                null);
-                }
-            } else {
-                // Image is tiled so get a contiguous raster by copying.
-                srcRas = rimage.getData();
-            }
-        }
-
-        // Now determine if we are using a band subset
-
-        // By default, we are using all source bands
-        int numSrcBands = srcRas.getNumBands();
-        indexed = false;
-        indexCM = null;
-        ColorModel cm = null;
-        ColorSpace cs = null;
-        isAlphaPremultiplied = false;
-        srcCM = null;
-        if (!rasterOnly) {
-            cm = rimage.getColorModel();
-            if (cm != null) {
-                cs = cm.getColorSpace();
-                if (cm instanceof IndexColorModel) {
-                    indexed = true;
-                    indexCM = (IndexColorModel) cm;
-                    numSrcBands = cm.getNumComponents();
-                }
-                if (cm.isAlphaPremultiplied()) {
-                    isAlphaPremultiplied = true;
-                    srcCM = cm;
-                }
-            }
-        }
-
-        srcBands = JPEG.bandOffsets[numSrcBands-1];
-        int numBandsUsed = numSrcBands;
-        // Consult the param to determine if we're writing a subset
-
-        if (param != null) {
-            int[] sBands = param.getSourceBands();
-            if (sBands != null) {
-                if (indexed) {
-                    warningOccurred(WARNING_NO_BANDS_ON_INDEXED);
-                } else {
-                    srcBands = sBands;
-                    numBandsUsed = srcBands.length;
-                    if (numBandsUsed > numSrcBands) {
-                        throw new IIOException
-                        ("ImageWriteParam specifies too many source bands");
-                    }
-                }
-            }
-        }
-
-        boolean usingBandSubset = (numBandsUsed != numSrcBands);
-        boolean fullImage = ((!rasterOnly) && (!usingBandSubset));
-
-        int [] bandSizes = null;
-        if (!indexed) {
-            bandSizes = srcRas.getSampleModel().getSampleSize();
-            // If this is a subset, we must adjust bandSizes
-            if (usingBandSubset) {
-                int [] temp = new int [numBandsUsed];
-                for (int i = 0; i < numBandsUsed; i++) {
-                    temp[i] = bandSizes[srcBands[i]];
-                }
-                bandSizes = temp;
-            }
-        } else {
-            int [] tempSize = srcRas.getSampleModel().getSampleSize();
-            bandSizes = new int [numSrcBands];
-            for (int i = 0; i < numSrcBands; i++) {
-                bandSizes[i] = tempSize[0];  // All the same
-            }
-        }
-
-        for (int i = 0; i < bandSizes.length; i++) {
-            // 4450894 part 1: The IJG libraries are compiled so they only
-            // handle <= 8-bit samples.  We now check the band sizes and throw
-            // an exception for images, such as USHORT_GRAY, with > 8 bits
-            // per sample.
-            if (bandSizes[i] > 8) {
-                throw new IIOException("Sample size must be <= 8");
-            }
-            // 4450894 part 2: We expand IndexColorModel images to full 24-
-            // or 32-bit in grabPixels() for each scanline.  For indexed
-            // images such as BYTE_BINARY, we need to ensure that we update
-            // bandSizes to account for the scaling from 1-bit band sizes
-            // to 8-bit.
-            if (indexed) {
-                bandSizes[i] = 8;
-            }
-        }
-
-        if (debug) {
-            System.out.println("numSrcBands is " + numSrcBands);
-            System.out.println("numBandsUsed is " + numBandsUsed);
-            System.out.println("usingBandSubset is " + usingBandSubset);
-            System.out.println("fullImage is " + fullImage);
-            System.out.print("Band sizes:");
-            for (int i = 0; i< bandSizes.length; i++) {
-                System.out.print(" " + bandSizes[i]);
-            }
-            System.out.println();
-        }
-
-        // Destination type, if there is one
-        ImageTypeSpecifier destType = null;
-        if (param != null) {
-            destType = param.getDestinationType();
-            // Ignore dest type if we are writing a complete image
-            if ((fullImage) && (destType != null)) {
-                warningOccurred(WARNING_DEST_IGNORED);
-                destType = null;
-            }
-        }
-
-        // Examine the param
-
-        sourceXOffset = srcRas.getMinX();
-        sourceYOffset = srcRas.getMinY();
-        int imageWidth = srcRas.getWidth();
-        int imageHeight = srcRas.getHeight();
-        sourceWidth = imageWidth;
-        sourceHeight = imageHeight;
-        int periodX = 1;
-        int periodY = 1;
-        int gridX = 0;
-        int gridY = 0;
-        JPEGQTable [] qTables = null;
-        JPEGHuffmanTable[] DCHuffmanTables = null;
-        JPEGHuffmanTable[] ACHuffmanTables = null;
-        boolean optimizeHuffman = false;
-        JPEGImageWriteParam jparam = null;
-        int progressiveMode = ImageWriteParam.MODE_DISABLED;
-
-        if (param != null) {
-
-            Rectangle sourceRegion = param.getSourceRegion();
-            if (sourceRegion != null) {
-                Rectangle imageBounds = new Rectangle(sourceXOffset,
-                                                      sourceYOffset,
-                                                      sourceWidth,
-                                                      sourceHeight);
-                sourceRegion = sourceRegion.intersection(imageBounds);
-                sourceXOffset = sourceRegion.x;
-                sourceYOffset = sourceRegion.y;
-                sourceWidth = sourceRegion.width;
-                sourceHeight = sourceRegion.height;
-            }
-
-            if (sourceWidth + sourceXOffset > imageWidth) {
-                sourceWidth = imageWidth - sourceXOffset;
-            }
-            if (sourceHeight + sourceYOffset > imageHeight) {
-                sourceHeight = imageHeight - sourceYOffset;
-            }
-
-            periodX = param.getSourceXSubsampling();
-            periodY = param.getSourceYSubsampling();
-            gridX = param.getSubsamplingXOffset();
-            gridY = param.getSubsamplingYOffset();
-
-            switch(param.getCompressionMode()) {
-            case ImageWriteParam.MODE_DISABLED:
-                throw new IIOException("JPEG compression cannot be disabled");
-            case ImageWriteParam.MODE_EXPLICIT:
-                float quality = param.getCompressionQuality();
-                quality = JPEG.convertToLinearQuality(quality);
-                qTables = new JPEGQTable[2];
-                qTables[0] = JPEGQTable.K1Luminance.getScaledInstance
-                    (quality, true);
-                qTables[1] = JPEGQTable.K2Chrominance.getScaledInstance
-                    (quality, true);
-                break;
-            case ImageWriteParam.MODE_DEFAULT:
-                qTables = new JPEGQTable[2];
-                qTables[0] = JPEGQTable.K1Div2Luminance;
-                qTables[1] = JPEGQTable.K2Div2Chrominance;
-                break;
-            // We'll handle the metadata case later
-            }
-
-            progressiveMode = param.getProgressiveMode();
-
-            if (param instanceof JPEGImageWriteParam) {
-                jparam = (JPEGImageWriteParam)param;
-                optimizeHuffman = jparam.getOptimizeHuffmanTables();
-            }
-        }
-
-        // Now examine the metadata
-        IIOMetadata mdata = image.getMetadata();
-        if (mdata != null) {
-            if (mdata instanceof JPEGMetadata) {
-                metadata = (JPEGMetadata) mdata;
-                if (debug) {
-                    System.out.println
-                        ("We have metadata, and it's JPEG metadata");
-                }
-            } else {
-                if (!rasterOnly) {
-                    ImageTypeSpecifier type = destType;
-                    if (type == null) {
-                        type = new ImageTypeSpecifier(rimage);
-                    }
-                    metadata = (JPEGMetadata) convertImageMetadata(mdata,
-                                                                   type,
-                                                                   param);
-                } else {
-                    warningOccurred(WARNING_METADATA_NOT_JPEG_FOR_RASTER);
-                }
-            }
-        }
-
-        // First set a default state
-
-        ignoreJFIF = false;  // If it's there, use it
-        ignoreAdobe = false;  // If it's there, use it
-        newAdobeTransform = JPEG.ADOBE_IMPOSSIBLE;  // Change if needed
-        writeDefaultJFIF = false;
-        writeAdobe = false;
-
-        // By default we'll do no conversion:
-        int inCsType = JPEG.JCS_UNKNOWN;
-        int outCsType = JPEG.JCS_UNKNOWN;
-
-        JFIFMarkerSegment jfif = null;
-        AdobeMarkerSegment adobe = null;
-        SOFMarkerSegment sof = null;
-
-        if (metadata != null) {
-            jfif = (JFIFMarkerSegment) metadata.findMarkerSegment
-                (JFIFMarkerSegment.class, true);
-            adobe = (AdobeMarkerSegment) metadata.findMarkerSegment
-                (AdobeMarkerSegment.class, true);
-            sof = (SOFMarkerSegment) metadata.findMarkerSegment
-                (SOFMarkerSegment.class, true);
-        }
-
-        iccProfile = null;  // By default don't write one
-        convertTosRGB = false;  // PhotoYCC does this
-        converted = null;
-
-        if (destType != null) {
-            if (numBandsUsed != destType.getNumBands()) {
-                throw new IIOException
-                    ("Number of source bands != number of destination bands");
-            }
-            cs = destType.getColorModel().getColorSpace();
-            // Check the metadata against the destination type
-            if (metadata != null) {
-                checkSOFBands(sof, numBandsUsed);
-
-                checkJFIF(jfif, destType, false);
-                // Do we want to write an ICC profile?
-                if ((jfif != null) && (ignoreJFIF == false)) {
-                    if (JPEG.isNonStandardICC(cs)) {
-                        iccProfile = ((ICC_ColorSpace) cs).getProfile();
-                    }
-                }
-                checkAdobe(adobe, destType, false);
-
-            } else { // no metadata, but there is a dest type
-                // If we can add a JFIF or an Adobe marker segment, do so
-                if (JPEG.isJFIFcompliant(destType, false)) {
-                    writeDefaultJFIF = true;
-                    // Do we want to write an ICC profile?
-                    if (JPEG.isNonStandardICC(cs)) {
-                        iccProfile = ((ICC_ColorSpace) cs).getProfile();
-                    }
-                } else {
-                    int transform = JPEG.transformForType(destType, false);
-                    if (transform != JPEG.ADOBE_IMPOSSIBLE) {
-                        writeAdobe = true;
-                        newAdobeTransform = transform;
-                    }
-                }
-                // re-create the metadata
-                metadata = new JPEGMetadata(destType, null, this);
-            }
-            inCsType = getSrcCSType(destType);
-            outCsType = getDefaultDestCSType(destType);
-        } else { // no destination type
-            if (metadata == null) {
-                if (fullImage) {  // no dest, no metadata, full image
-                    // Use default metadata matching the image and param
-                    metadata = new JPEGMetadata(new ImageTypeSpecifier(rimage),
-                                                param, this);
-                    if (metadata.findMarkerSegment
-                        (JFIFMarkerSegment.class, true) != null) {
-                        cs = rimage.getColorModel().getColorSpace();
-                        if (JPEG.isNonStandardICC(cs)) {
-                            iccProfile = ((ICC_ColorSpace) cs).getProfile();
-                        }
-                    }
-
-                    inCsType = getSrcCSType(rimage);
-                    outCsType = getDefaultDestCSType(rimage);
-                }
-                // else no dest, no metadata, not an image,
-                // so no special headers, no color conversion
-            } else { // no dest type, but there is metadata
-                checkSOFBands(sof, numBandsUsed);
-                if (fullImage) {  // no dest, metadata, image
-                    // Check that the metadata and the image match
-
-                    ImageTypeSpecifier inputType =
-                        new ImageTypeSpecifier(rimage);
-
-                    inCsType = getSrcCSType(rimage);
-
-                    if (cm != null) {
-                        boolean alpha = cm.hasAlpha();
-                        switch (cs.getType()) {
-                        case ColorSpace.TYPE_GRAY:
-                            if (!alpha) {
-                                outCsType = JPEG.JCS_GRAYSCALE;
-                            } else {
-                                if (jfif != null) {
-                                    ignoreJFIF = true;
-                                    warningOccurred
-                                    (WARNING_IMAGE_METADATA_JFIF_MISMATCH);
-                                }
-                                // out colorspace remains unknown
-                            }
-                            if ((adobe != null)
-                                && (adobe.transform != JPEG.ADOBE_UNKNOWN)) {
-                                newAdobeTransform = JPEG.ADOBE_UNKNOWN;
-                                warningOccurred
-                                (WARNING_IMAGE_METADATA_ADOBE_MISMATCH);
-                            }
-                            break;
-                        case ColorSpace.TYPE_RGB:
-                            if (!alpha) {
-                                if (jfif != null) {
-                                    outCsType = JPEG.JCS_YCbCr;
-                                    if (JPEG.isNonStandardICC(cs)
-                                        || ((cs instanceof ICC_ColorSpace)
-                                            && (jfif.iccSegment != null))) {
-                                        iccProfile =
-                                            ((ICC_ColorSpace) cs).getProfile();
-                                    }
-                                } else if (adobe != null) {
-                                    switch (adobe.transform) {
-                                    case JPEG.ADOBE_UNKNOWN:
-                                        outCsType = JPEG.JCS_RGB;
-                                        break;
-                                    case JPEG.ADOBE_YCC:
-                                        outCsType = JPEG.JCS_YCbCr;
-                                        break;
-                                    default:
-                                        warningOccurred
-                                        (WARNING_IMAGE_METADATA_ADOBE_MISMATCH);
-                                        newAdobeTransform = JPEG.ADOBE_UNKNOWN;
-                                        outCsType = JPEG.JCS_RGB;
-                                        break;
-                                    }
-                                } else {
-                                    // consult the ids
-                                    int outCS = sof.getIDencodedCSType();
-                                    // if they don't resolve it,
-                                    // consult the sampling factors
-                                    if (outCS != JPEG.JCS_UNKNOWN) {
-                                        outCsType = outCS;
-                                    } else {
-                                        boolean subsampled =
-                                        isSubsampled(sof.componentSpecs);
-                                        if (subsampled) {
-                                            outCsType = JPEG.JCS_YCbCr;
-                                        } else {
-                                            outCsType = JPEG.JCS_RGB;
-                                        }
-                                    }
-                                }
-                            } else { // RGBA
-                                if (jfif != null) {
-                                    ignoreJFIF = true;
-                                    warningOccurred
-                                    (WARNING_IMAGE_METADATA_JFIF_MISMATCH);
-                                }
-                                if (adobe != null) {
-                                    if (adobe.transform
-                                        != JPEG.ADOBE_UNKNOWN) {
-                                        newAdobeTransform = JPEG.ADOBE_UNKNOWN;
-                                        warningOccurred
-                                        (WARNING_IMAGE_METADATA_ADOBE_MISMATCH);
-                                    }
-                                    outCsType = JPEG.JCS_RGBA;
-                                } else {
-                                    // consult the ids
-                                    int outCS = sof.getIDencodedCSType();
-                                    // if they don't resolve it,
-                                    // consult the sampling factors
-                                    if (outCS != JPEG.JCS_UNKNOWN) {
-                                        outCsType = outCS;
-                                    } else {
-                                        boolean subsampled =
-                                        isSubsampled(sof.componentSpecs);
-                                        outCsType = subsampled ?
-                                            JPEG.JCS_YCbCrA : JPEG.JCS_RGBA;
-                                    }
-                                }
-                            }
-                            break;
-                        case ColorSpace.TYPE_3CLR:
-                            if (cs == JPEG.JCS.getYCC()) {
-                                if (!alpha) {
-                                    if (jfif != null) {
-                                        convertTosRGB = true;
-                                        convertOp =
-                                        new ColorConvertOp(cs,
-                                                           JPEG.JCS.sRGB,
-                                                           null);
-                                        outCsType = JPEG.JCS_YCbCr;
-                                    } else if (adobe != null) {
-                                        if (adobe.transform
-                                            != JPEG.ADOBE_YCC) {
-                                            newAdobeTransform = JPEG.ADOBE_YCC;
-                                            warningOccurred
-                                            (WARNING_IMAGE_METADATA_ADOBE_MISMATCH);
-                                        }
-                                        outCsType = JPEG.JCS_YCC;
-                                    } else {
-                                        outCsType = JPEG.JCS_YCC;
-                                    }
-                                } else { // PhotoYCCA
-                                    if (jfif != null) {
-                                        ignoreJFIF = true;
-                                        warningOccurred
-                                        (WARNING_IMAGE_METADATA_JFIF_MISMATCH);
-                                    } else if (adobe != null) {
-                                        if (adobe.transform
-                                            != JPEG.ADOBE_UNKNOWN) {
-                                            newAdobeTransform
-                                            = JPEG.ADOBE_UNKNOWN;
-                                            warningOccurred
-                                            (WARNING_IMAGE_METADATA_ADOBE_MISMATCH);
-                                        }
-                                    }
-                                    outCsType = JPEG.JCS_YCCA;
-                                }
-                            }
-                        }
-                    }
-                } // else no dest, metadata, not an image.  Defaults ok
-            }
-        }
-
-        boolean metadataProgressive = false;
-        int [] scans = null;
-
-        if (metadata != null) {
-            if (sof == null) {
-                sof = (SOFMarkerSegment) metadata.findMarkerSegment
-                    (SOFMarkerSegment.class, true);
-            }
-            if ((sof != null) && (sof.tag == JPEG.SOF2)) {
-                metadataProgressive = true;
-                if (progressiveMode == ImageWriteParam.MODE_COPY_FROM_METADATA) {
-                    scans = collectScans(metadata, sof);  // Might still be null
-                } else {
-                    numScans = 0;
-                }
-            }
-            if (jfif == null) {
-                jfif = (JFIFMarkerSegment) metadata.findMarkerSegment
-                    (JFIFMarkerSegment.class, true);
-            }
-        }
-
-        thumbnails = image.getThumbnails();
-        int numThumbs = image.getNumThumbnails();
-        forceJFIF = false;
-        // determine if thumbnails can be written
-        // If we are going to add a default JFIF marker segment,
-        // then thumbnails can be written
-        if (!writeDefaultJFIF) {
-            // If there is no metadata, then we can't write thumbnails
-            if (metadata == null) {
-                thumbnails = null;
-                if (numThumbs != 0) {
-                    warningOccurred(WARNING_IGNORING_THUMBS);
-                }
-            } else {
-                // There is metadata
-                // If we are writing a raster or subbands,
-                // then the user must specify JFIF on the metadata
-                if (fullImage == false) {
-                    if (jfif == null) {
-                        thumbnails = null;  // Or we can't include thumbnails
-                        if (numThumbs != 0) {
-                            warningOccurred(WARNING_IGNORING_THUMBS);
-                        }
-                    }
-                } else {  // It is a full image, and there is metadata
-                    if (jfif == null) {  // Not JFIF
-                        // Can it have JFIF?
-                        if ((outCsType == JPEG.JCS_GRAYSCALE)
-                            || (outCsType == JPEG.JCS_YCbCr)) {
-                            if (numThumbs != 0) {
-                                forceJFIF = true;
-                                warningOccurred(WARNING_FORCING_JFIF);
-                            }
-                        } else {  // Nope, not JFIF-compatible
-                            thumbnails = null;
-                            if (numThumbs != 0) {
-                                warningOccurred(WARNING_IGNORING_THUMBS);
-                            }
-                        }
-                    }
-                }
-            }
-        }
-
-        // Set up a boolean to indicate whether we need to call back to
-        // write metadata
-        boolean haveMetadata =
-            ((metadata != null) || writeDefaultJFIF || writeAdobe);
-
-        // Now that we have dealt with metadata, finalize our tables set up
-
-        // Are we going to write tables?  By default, yes.
-        boolean writeDQT = true;
-        boolean writeDHT = true;
-
-        // But if the metadata has no tables, no.
-        DQTMarkerSegment dqt = null;
-        DHTMarkerSegment dht = null;
-
-        int restartInterval = 0;
-
-        if (metadata != null) {
-            dqt = (DQTMarkerSegment) metadata.findMarkerSegment
-                (DQTMarkerSegment.class, true);
-            dht = (DHTMarkerSegment) metadata.findMarkerSegment
-                (DHTMarkerSegment.class, true);
-            DRIMarkerSegment dri =
-                (DRIMarkerSegment) metadata.findMarkerSegment
-                (DRIMarkerSegment.class, true);
-            if (dri != null) {
-                restartInterval = dri.restartInterval;
-            }
-
-            if (dqt == null) {
-                writeDQT = false;
-            }
-            if (dht == null) {
-                writeDHT = false;  // Ignored if optimizeHuffman is true
-            }
-        }
-
-        // Whether we write tables or not, we need to figure out which ones
-        // to use
-        if (qTables == null) { // Get them from metadata, or use defaults
-            if (dqt != null) {
-                qTables = collectQTablesFromMetadata(metadata);
-            } else if (streamQTables != null) {
-                qTables = streamQTables;
-            } else if ((jparam != null) && (jparam.areTablesSet())) {
-                qTables = jparam.getQTables();
-            } else {
-                qTables = JPEG.getDefaultQTables();
-            }
-
-        }
-
-        // If we are optimizing, we don't want any tables.
-        if (optimizeHuffman == false) {
-            // If they were for progressive scans, we can't use them.
-            if ((dht != null) && (metadataProgressive == false)) {
-                DCHuffmanTables = collectHTablesFromMetadata(metadata, true);
-                ACHuffmanTables = collectHTablesFromMetadata(metadata, false);
-            } else if (streamDCHuffmanTables != null) {
-                DCHuffmanTables = streamDCHuffmanTables;
-                ACHuffmanTables = streamACHuffmanTables;
-            } else if ((jparam != null) && (jparam.areTablesSet())) {
-                DCHuffmanTables = jparam.getDCHuffmanTables();
-                ACHuffmanTables = jparam.getACHuffmanTables();
-            } else {
-                DCHuffmanTables = JPEG.getDefaultHuffmanTables(true);
-                ACHuffmanTables = JPEG.getDefaultHuffmanTables(false);
-            }
-        }
-
-        // By default, ids are 1 - N, no subsampling
-        int [] componentIds = new int[numBandsUsed];
-        int [] HsamplingFactors = new int[numBandsUsed];
-        int [] VsamplingFactors = new int[numBandsUsed];
-        int [] QtableSelectors = new int[numBandsUsed];
-        for (int i = 0; i < numBandsUsed; i++) {
-            componentIds[i] = i+1; // JFIF compatible
-            HsamplingFactors[i] = 1;
-            VsamplingFactors[i] = 1;
-            QtableSelectors[i] = 0;
-        }
-
-        // Now override them with the contents of sof, if there is one,
-        if (sof != null) {
-            for (int i = 0; i < numBandsUsed; i++) {
-                if (forceJFIF == false) {  // else use JFIF-compatible default
-                    componentIds[i] = sof.componentSpecs[i].componentId;
-                }
-                HsamplingFactors[i] = sof.componentSpecs[i].HsamplingFactor;
-                VsamplingFactors[i] = sof.componentSpecs[i].VsamplingFactor;
-                QtableSelectors[i] = sof.componentSpecs[i].QtableSelector;
-            }
-        }
-
-        sourceXOffset += gridX;
-        sourceWidth -= gridX;
-        sourceYOffset += gridY;
-        sourceHeight -= gridY;
-
-        int destWidth = (sourceWidth + periodX - 1)/periodX;
-        int destHeight = (sourceHeight + periodY - 1)/periodY;
-
-        // Create an appropriate 1-line databuffer for writing
-        int lineSize = sourceWidth*numBandsUsed;
-
-        DataBufferByte buffer = new DataBufferByte(lineSize);
-
-        // Create a raster from that
-        int [] bandOffs = JPEG.bandOffsets[numBandsUsed-1];
-
-        raster = Raster.createInterleavedRaster(buffer,
-                                                sourceWidth, 1,
-                                                lineSize,
-                                                numBandsUsed,
-                                                bandOffs,
-                                                null);
-
-        // Call the writer, who will call back for every scanline
-
-        processImageStarted(currentImage);
-
-        boolean aborted = false;
-
-        if (debug) {
-            System.out.println("inCsType: " + inCsType);
-            System.out.println("outCsType: " + outCsType);
-        }
-
-        // Note that getData disables acceleration on buffer, but it is
-        // just a 1-line intermediate data transfer buffer that does not
-        // affect the acceleration of the source image.
-        aborted = writeImage(structPointer,
-                             buffer.getData(),
-                             inCsType, outCsType,
-                             numBandsUsed,
-                             bandSizes,
-                             sourceWidth,
-                             destWidth, destHeight,
-                             periodX, periodY,
-                             qTables,
-                             writeDQT,
-                             DCHuffmanTables,
-                             ACHuffmanTables,
-                             writeDHT,
-                             optimizeHuffman,
-                             (progressiveMode
-                              != ImageWriteParam.MODE_DISABLED),
-                             numScans,
-                             scans,
-                             componentIds,
-                             HsamplingFactors,
-                             VsamplingFactors,
-                             QtableSelectors,
-                             haveMetadata,
-                             restartInterval);
-
-        cbLock.lock();
-        try {
-            if (aborted) {
-                processWriteAborted();
-            } else {
-                processImageComplete();
-            }
-
-            ios.flush();
-        } finally {
-            cbLock.unlock();
-        }
-        currentImage++;  // After a successful write
-    }
-
-    public void prepareWriteSequence(IIOMetadata streamMetadata)
-        throws IOException {
-        setThreadLock();
-        try {
-            cbLock.check();
-
-            prepareWriteSequenceOnThread(streamMetadata);
-        } finally {
-            clearThreadLock();
-        }
-    }
-
-    private void prepareWriteSequenceOnThread(IIOMetadata streamMetadata)
-        throws IOException {
-        if (ios == null) {
-            throw new IllegalStateException("Output has not been set!");
-        }
-
-        /*
-         * from jpeg_metadata.html:
-         * If no stream metadata is supplied to
-         * <code>ImageWriter.prepareWriteSequence</code>, then no
-         * tables-only image is written.  If stream metadata containing
-         * no tables is supplied to
-         * <code>ImageWriter.prepareWriteSequence</code>, then a tables-only
-         * image containing default visually lossless tables is written.
-         */
-        if (streamMetadata != null) {
-            if (streamMetadata instanceof JPEGMetadata) {
-                // write a complete tables-only image at the beginning of
-                // the stream.
-                JPEGMetadata jmeta = (JPEGMetadata) streamMetadata;
-                if (jmeta.isStream == false) {
-                    throw new IllegalArgumentException
-                        ("Invalid stream metadata object.");
-                }
-                // Check that we are
-                // at the beginning of the stream, or can go there, and haven't
-                // written out the metadata already.
-                if (currentImage != 0) {
-                    throw new IIOException
-                        ("JPEG Stream metadata must precede all images");
-                }
-                if (sequencePrepared == true) {
-                    throw new IIOException("Stream metadata already written!");
-                }
-
-                // Set the tables
-                // If the metadata has no tables, use default tables.
-                streamQTables = collectQTablesFromMetadata(jmeta);
-                if (debug) {
-                    System.out.println("after collecting from stream metadata, "
-                                       + "streamQTables.length is "
-                                       + streamQTables.length);
-                }
-                if (streamQTables == null) {
-                    streamQTables = JPEG.getDefaultQTables();
-                }
-                streamDCHuffmanTables =
-                    collectHTablesFromMetadata(jmeta, true);
-                if (streamDCHuffmanTables == null) {
-                    streamDCHuffmanTables = JPEG.getDefaultHuffmanTables(true);
-                }
-                streamACHuffmanTables =
-                    collectHTablesFromMetadata(jmeta, false);
-                if (streamACHuffmanTables == null) {
-                    streamACHuffmanTables = JPEG.getDefaultHuffmanTables(false);
-                }
-
-                // Now write them out
-                writeTables(structPointer,
-                            streamQTables,
-                            streamDCHuffmanTables,
-                            streamACHuffmanTables);
-            } else {
-                throw new IIOException("Stream metadata must be JPEG metadata");
-            }
-        }
-        sequencePrepared = true;
-    }
-
-    public void writeToSequence(IIOImage image, ImageWriteParam param)
-        throws IOException {
-        setThreadLock();
-        try {
-            cbLock.check();
-
-            if (sequencePrepared == false) {
-                throw new IllegalStateException("sequencePrepared not called!");
-            }
-            // In the case of JPEG this does nothing different from write
-            write(null, image, param);
-        } finally {
-            clearThreadLock();
-        }
-    }
-
-    public void endWriteSequence() throws IOException {
-        setThreadLock();
-        try {
-            cbLock.check();
-
-            if (sequencePrepared == false) {
-                throw new IllegalStateException("sequencePrepared not called!");
-            }
-            sequencePrepared = false;
-        } finally {
-            clearThreadLock();
-        }
-    }
-
-    public synchronized void abort() {
-        setThreadLock();
-        try {
-            /**
-             * NB: we do not check the call back lock here, we allow to abort
-             * the reader any time.
-             */
-            super.abort();
-            abortWrite(structPointer);
-        } finally {
-            clearThreadLock();
-        }
-    }
-
-    private void resetInternalState() {
-        // reset C structures
-        resetWriter(structPointer);
-
-        // reset local Java structures
-        srcRas = null;
-        raster = null;
-        convertTosRGB = false;
-        currentImage = 0;
-        numScans = 0;
-        metadata = null;
-    }
-
-    public void reset() {
-        setThreadLock();
-        try {
-            cbLock.check();
-
-            super.reset();
-        } finally {
-            clearThreadLock();
-        }
-    }
-
-    public void dispose() {
-        setThreadLock();
-        try {
-            cbLock.check();
-
-            if (structPointer != 0) {
-                disposerRecord.dispose();
-                structPointer = 0;
-            }
-        } finally {
-            clearThreadLock();
-        }
-    }
-
-    ////////// End of public API
-
-    ///////// Package-access API
-
-    /**
-     * Called by the native code or other classes to signal a warning.
-     * The code is used to lookup a localized message to be used when
-     * sending warnings to listeners.
-     */
-    void warningOccurred(int code) {
-        cbLock.lock();
-        try {
-            if ((code < 0) || (code > MAX_WARNING)){
-                throw new InternalError("Invalid warning index");
-            }
-            processWarningOccurred
-                (currentImage,
-                 "com.sun.imageio.plugins.jpeg.JPEGImageWriterResources",
-                Integer.toString(code));
-        } finally {
-            cbLock.unlock();
-        }
-    }
-
-    /**
-     * The library has it's own error facility that emits warning messages.
-     * This routine is called by the native code when it has already
-     * formatted a string for output.
-     * XXX  For truly complete localization of all warning messages,
-     * the sun_jpeg_output_message routine in the native code should
-     * send only the codes and parameters to a method here in Java,
-     * which will then format and send the warnings, using localized
-     * strings.  This method will have to deal with all the parameters
-     * and formats (%u with possibly large numbers, %02d, %02x, etc.)
-     * that actually occur in the JPEG library.  For now, this prevents
-     * library warnings from being printed to stderr.
-     */
-    void warningWithMessage(String msg) {
-        cbLock.lock();
-        try {
-            processWarningOccurred(currentImage, msg);
-        } finally {
-            cbLock.unlock();
-        }
-    }
-
-    void thumbnailStarted(int thumbnailIndex) {
-        cbLock.lock();
-        try {
-            processThumbnailStarted(currentImage, thumbnailIndex);
-        } finally {
-            cbLock.unlock();
-        }
-    }
-
-    // Provide access to protected superclass method
-    void thumbnailProgress(float percentageDone) {
-        cbLock.lock();
-        try {
-            processThumbnailProgress(percentageDone);
-        } finally {
-            cbLock.unlock();
-        }
-    }
-
-    // Provide access to protected superclass method
-    void thumbnailComplete() {
-        cbLock.lock();
-        try {
-            processThumbnailComplete();
-        } finally {
-            cbLock.unlock();
-        }
-    }
-
-    ///////// End of Package-access API
-
-    ///////// Private methods
-
-    ///////// Metadata handling
-
-    private void checkSOFBands(SOFMarkerSegment sof, int numBandsUsed)
-        throws IIOException {
-        // Does the metadata frame header, if any, match numBandsUsed?
-        if (sof != null) {
-            if (sof.componentSpecs.length != numBandsUsed) {
-                throw new IIOException
-                    ("Metadata components != number of destination bands");
-            }
-        }
-    }
-
-    private void checkJFIF(JFIFMarkerSegment jfif,
-                           ImageTypeSpecifier type,
-                           boolean input) {
-        if (jfif != null) {
-            if (!JPEG.isJFIFcompliant(type, input)) {
-                ignoreJFIF = true;  // type overrides metadata
-                warningOccurred(input
-                                ? WARNING_IMAGE_METADATA_JFIF_MISMATCH
-                                : WARNING_DEST_METADATA_JFIF_MISMATCH);
-            }
-        }
-    }
-
-    private void checkAdobe(AdobeMarkerSegment adobe,
-                           ImageTypeSpecifier type,
-                           boolean input) {
-        if (adobe != null) {
-            int rightTransform = JPEG.transformForType(type, input);
-            if (adobe.transform != rightTransform) {
-                warningOccurred(input
-                                ? WARNING_IMAGE_METADATA_ADOBE_MISMATCH
-                                : WARNING_DEST_METADATA_ADOBE_MISMATCH);
-                if (rightTransform == JPEG.ADOBE_IMPOSSIBLE) {
-                    ignoreAdobe = true;
-                } else {
-                    newAdobeTransform = rightTransform;
-                }
-            }
-        }
-    }
-
-    /**
-     * Collect all the scan info from the given metadata, and
-     * organize it into the scan info array required by the
-     * IJG libray.  It is much simpler to parse out this
-     * data in Java and then just copy the data in C.
-     */
-    private int [] collectScans(JPEGMetadata metadata,
-                                SOFMarkerSegment sof) {
-        List segments = new ArrayList();
-        int SCAN_SIZE = 9;
-        int MAX_COMPS_PER_SCAN = 4;
-        for (Iterator iter = metadata.markerSequence.iterator();
-             iter.hasNext();) {
-            MarkerSegment seg = (MarkerSegment) iter.next();
-            if (seg instanceof SOSMarkerSegment) {
-                segments.add(seg);
-            }
-        }
-        int [] retval = null;
-        numScans = 0;
-        if (!segments.isEmpty()) {
-            numScans = segments.size();
-            retval = new int [numScans*SCAN_SIZE];
-            int index = 0;
-            for (int i = 0; i < numScans; i++) {
-                SOSMarkerSegment sos = (SOSMarkerSegment) segments.get(i);
-                retval[index++] = sos.componentSpecs.length; // num comps
-                for (int j = 0; j < MAX_COMPS_PER_SCAN; j++) {
-                    if (j < sos.componentSpecs.length) {
-                        int compSel = sos.componentSpecs[j].componentSelector;
-                        for (int k = 0; k < sof.componentSpecs.length; k++) {
-                            if (compSel == sof.componentSpecs[k].componentId) {
-                                retval[index++] = k;
-                                break; // out of for over sof comps
-                            }
-                        }
-                    } else {
-                        retval[index++] = 0;
-                    }
-                }
-                retval[index++] = sos.startSpectralSelection;
-                retval[index++] = sos.endSpectralSelection;
-                retval[index++] = sos.approxHigh;
-                retval[index++] = sos.approxLow;
-            }
-        }
-        return retval;
-    }
-
-    /**
-     * Finds all DQT marker segments and returns all the q
-     * tables as a single array of JPEGQTables.
-     */
-    private JPEGQTable [] collectQTablesFromMetadata
-        (JPEGMetadata metadata) {
-        ArrayList tables = new ArrayList();
-        Iterator iter = metadata.markerSequence.iterator();
-        while (iter.hasNext()) {
-            MarkerSegment seg = (MarkerSegment) iter.next();
-            if (seg instanceof DQTMarkerSegment) {
-                DQTMarkerSegment dqt =
-                    (DQTMarkerSegment) seg;
-                tables.addAll(dqt.tables);
-            }
-        }
-        JPEGQTable [] retval = null;
-        if (tables.size() != 0) {
-            retval = new JPEGQTable[tables.size()];
-            for (int i = 0; i < retval.length; i++) {
-                retval[i] =
-                    new JPEGQTable(((DQTMarkerSegment.Qtable)tables.get(i)).data);
-            }
-        }
-        return retval;
-    }
-
-    /**
-     * Finds all DHT marker segments and returns all the q
-     * tables as a single array of JPEGQTables.  The metadata
-     * must not be for a progressive image, or an exception
-     * will be thrown when two Huffman tables with the same
-     * table id are encountered.
-     */
-    private JPEGHuffmanTable[] collectHTablesFromMetadata
-        (JPEGMetadata metadata, boolean wantDC) throws IIOException {
-        ArrayList tables = new ArrayList();
-        Iterator iter = metadata.markerSequence.iterator();
-        while (iter.hasNext()) {
-            MarkerSegment seg = (MarkerSegment) iter.next();
-            if (seg instanceof DHTMarkerSegment) {
-                DHTMarkerSegment dht =
-                    (DHTMarkerSegment) seg;
-                for (int i = 0; i < dht.tables.size(); i++) {
-                    DHTMarkerSegment.Htable htable =
-                        (DHTMarkerSegment.Htable) dht.tables.get(i);
-                    if (htable.tableClass == (wantDC ? 0 : 1)) {
-                        tables.add(htable);
-                    }
-                }
-            }
-        }
-        JPEGHuffmanTable [] retval = null;
-        if (tables.size() != 0) {
-            DHTMarkerSegment.Htable [] htables =
-                new DHTMarkerSegment.Htable[tables.size()];
-            tables.toArray(htables);
-            retval = new JPEGHuffmanTable[tables.size()];
-            for (int i = 0; i < retval.length; i++) {
-                retval[i] = null;
-                for (int j = 0; j < tables.size(); j++) {
-                    if (htables[j].tableID == i) {
-                        if (retval[i] != null) {
-                            throw new IIOException("Metadata has duplicate Htables!");
-                        }
-                        retval[i] = new JPEGHuffmanTable(htables[j].numCodes,
-                                                         htables[j].values);
-                    }
-                }
-            }
-        }
-
-        return retval;
-    }
-
-    /////////// End of metadata handling
-
-    ////////////// ColorSpace conversion
-
-    private int getSrcCSType(ImageTypeSpecifier type) {
-         return getSrcCSType(type.getColorModel());
-    }
-
-    private int getSrcCSType(RenderedImage rimage) {
-        return getSrcCSType(rimage.getColorModel());
-    }
-
-    private int getSrcCSType(ColorModel cm) {
-        int retval = JPEG.JCS_UNKNOWN;
-        if (cm != null) {
-            boolean alpha = cm.hasAlpha();
-            ColorSpace cs = cm.getColorSpace();
-            switch (cs.getType()) {
-            case ColorSpace.TYPE_GRAY:
-                retval = JPEG.JCS_GRAYSCALE;
-                break;
-            case ColorSpace.TYPE_RGB:
-                if (alpha) {
-                    retval = JPEG.JCS_RGBA;
-                } else {
-                    retval = JPEG.JCS_RGB;
-                }
-                break;
-            case ColorSpace.TYPE_YCbCr:
-                if (alpha) {
-                    retval = JPEG.JCS_YCbCrA;
-                } else {
-                    retval = JPEG.JCS_YCbCr;
-                }
-                break;
-            case ColorSpace.TYPE_3CLR:
-                if (cs == JPEG.JCS.getYCC()) {
-                    if (alpha) {
-                        retval = JPEG.JCS_YCCA;
-                    } else {
-                        retval = JPEG.JCS_YCC;
-                    }
-                }
-            case ColorSpace.TYPE_CMYK:
-                retval = JPEG.JCS_CMYK;
-                break;
-            }
-        }
-        return retval;
-    }
-
-    private int getDestCSType(ImageTypeSpecifier destType) {
-        ColorModel cm = destType.getColorModel();
-        boolean alpha = cm.hasAlpha();
-        ColorSpace cs = cm.getColorSpace();
-        int retval = JPEG.JCS_UNKNOWN;
-        switch (cs.getType()) {
-        case ColorSpace.TYPE_GRAY:
-                retval = JPEG.JCS_GRAYSCALE;
-                break;
-            case ColorSpace.TYPE_RGB:
-                if (alpha) {
-                    retval = JPEG.JCS_RGBA;
-                } else {
-                    retval = JPEG.JCS_RGB;
-                }
-                break;
-            case ColorSpace.TYPE_YCbCr:
-                if (alpha) {
-                    retval = JPEG.JCS_YCbCrA;
-                } else {
-                    retval = JPEG.JCS_YCbCr;
-                }
-                break;
-            case ColorSpace.TYPE_3CLR:
-                if (cs == JPEG.JCS.getYCC()) {
-                    if (alpha) {
-                        retval = JPEG.JCS_YCCA;
-                    } else {
-                        retval = JPEG.JCS_YCC;
-                    }
-                }
-            case ColorSpace.TYPE_CMYK:
-                retval = JPEG.JCS_CMYK;
-                break;
-            }
-        return retval;
-        }
-
-    private int getDefaultDestCSType(ImageTypeSpecifier type) {
-        return getDefaultDestCSType(type.getColorModel());
-    }
-
-    private int getDefaultDestCSType(RenderedImage rimage) {
-        return getDefaultDestCSType(rimage.getColorModel());
-    }
-
-    private int getDefaultDestCSType(ColorModel cm) {
-        int retval = JPEG.JCS_UNKNOWN;
-        if (cm != null) {
-            boolean alpha = cm.hasAlpha();
-            ColorSpace cs = cm.getColorSpace();
-            switch (cs.getType()) {
-            case ColorSpace.TYPE_GRAY:
-                retval = JPEG.JCS_GRAYSCALE;
-                break;
-            case ColorSpace.TYPE_RGB:
-                if (alpha) {
-                    retval = JPEG.JCS_YCbCrA;
-                } else {
-                    retval = JPEG.JCS_YCbCr;
-                }
-                break;
-            case ColorSpace.TYPE_YCbCr:
-                if (alpha) {
-                    retval = JPEG.JCS_YCbCrA;
-                } else {
-                    retval = JPEG.JCS_YCbCr;
-                }
-                break;
-            case ColorSpace.TYPE_3CLR:
-                if (cs == JPEG.JCS.getYCC()) {
-                    if (alpha) {
-                        retval = JPEG.JCS_YCCA;
-                    } else {
-                        retval = JPEG.JCS_YCC;
-                    }
-                }
-            case ColorSpace.TYPE_CMYK:
-                retval = JPEG.JCS_YCCK;
-                break;
-            }
-        }
-        return retval;
-    }
-
-    private boolean isSubsampled(SOFMarkerSegment.ComponentSpec [] specs) {
-        int hsamp0 = specs[0].HsamplingFactor;
-        int vsamp0 = specs[0].VsamplingFactor;
-        for (int i = 1; i < specs.length; i++) {
-            if ((specs[i].HsamplingFactor != hsamp0) ||
-                (specs[i].HsamplingFactor != hsamp0))
-                return true;
-        }
-        return false;
-    }
-
-    ////////////// End of ColorSpace conversion
-
-    ////////////// Native methods and callbacks
-
-    /** Sets up static native structures. */
-    private static native void initWriterIDs(Class qTableClass,
-                                             Class huffClass);
-
-    /** Sets up per-writer native structure and returns a pointer to it. */
-    private native long initJPEGImageWriter();
-
-    /** Sets up native structures for output stream */
-    private native void setDest(long structPointer);
-
-    /**
-     * Returns <code>true</code> if the write was aborted.
-     */
-    private native boolean writeImage(long structPointer,
-                                      byte [] data,
-                                      int inCsType, int outCsType,
-                                      int numBands,
-                                      int [] bandSizes,
-                                      int srcWidth,
-                                      int destWidth, int destHeight,
-                                      int stepX, int stepY,
-                                      JPEGQTable [] qtables,
-                                      boolean writeDQT,
-                                      JPEGHuffmanTable[] DCHuffmanTables,
-                                      JPEGHuffmanTable[] ACHuffmanTables,
-                                      boolean writeDHT,
-                                      boolean optimizeHuffman,
-                                      boolean progressive,
-                                      int numScans,
-                                      int [] scans,
-                                      int [] componentIds,
-                                      int [] HsamplingFactors,
-                                      int [] VsamplingFactors,
-                                      int [] QtableSelectors,
-                                      boolean haveMetadata,
-                                      int restartInterval);
-
-
-    /**
-     * Writes the metadata out when called by the native code,
-     * which will have already written the header to the stream
-     * and established the library state.  This is simpler than
-     * breaking the write call in two.
-     */
-    private void writeMetadata() throws IOException {
-        if (metadata == null) {
-            if (writeDefaultJFIF) {
-                JFIFMarkerSegment.writeDefaultJFIF(ios,
-                                                   thumbnails,
-                                                   iccProfile,
-                                                   this);
-            }
-            if (writeAdobe) {
-                AdobeMarkerSegment.writeAdobeSegment(ios, newAdobeTransform);
-            }
-        } else {
-            metadata.writeToStream(ios,
-                                   ignoreJFIF,
-                                   forceJFIF,
-                                   thumbnails,
-                                   iccProfile,
-                                   ignoreAdobe,
-                                   newAdobeTransform,
-                                   this);
-        }
-    }
-
-    /**
-     * Write out a tables-only image to the stream.
-     */
-    private native void writeTables(long structPointer,
-                                    JPEGQTable [] qtables,
-                                    JPEGHuffmanTable[] DCHuffmanTables,
-                                    JPEGHuffmanTable[] ACHuffmanTables);
-
-    /**
-     * Put the scanline y of the source ROI view Raster into the
-     * 1-line Raster for writing.  This handles ROI and band
-     * rearrangements, and expands indexed images.  Subsampling is
-     * done in the native code.
-     * This is called by the native code.
-     */
-    private void grabPixels(int y) {
-
-        Raster sourceLine = null;
-        if (indexed) {
-            sourceLine = srcRas.createChild(sourceXOffset,
-                                            sourceYOffset+y,
-                                            sourceWidth, 1,
-                                            0, 0,
-                                            new int [] {0});
-            // If the image has BITMASK transparency, we need to make sure
-            // it gets converted to 32-bit ARGB, because the JPEG encoder
-            // relies upon the full 8-bit alpha channel.
-            boolean forceARGB =
-                (indexCM.getTransparency() != Transparency.OPAQUE);
-            BufferedImage temp = indexCM.convertToIntDiscrete(sourceLine,
-                                                              forceARGB);
-            sourceLine = temp.getRaster();
-        } else {
-            sourceLine = srcRas.createChild(sourceXOffset,
-                                            sourceYOffset+y,
-                                            sourceWidth, 1,
-                                            0, 0,
-                                            srcBands);
-        }
-        if (convertTosRGB) {
-            if (debug) {
-                System.out.println("Converting to sRGB");
-            }
-            // The first time through, converted is null, so
-            // a new raster is allocated.  It is then reused
-            // on subsequent lines.
-            converted = convertOp.filter(sourceLine, converted);
-            sourceLine = converted;
-        }
-        if (isAlphaPremultiplied) {
-            WritableRaster wr = sourceLine.createCompatibleWritableRaster();
-            int[] data = null;
-            data = sourceLine.getPixels(sourceLine.getMinX(), sourceLine.getMinY(),
-                                        sourceLine.getWidth(), sourceLine.getHeight(),
-                                        data);
-            wr.setPixels(sourceLine.getMinX(), sourceLine.getMinY(),
-                         sourceLine.getWidth(), sourceLine.getHeight(),
-                         data);
-            srcCM.coerceData(wr, false);
-            sourceLine = wr.createChild(wr.getMinX(), wr.getMinY(),
-                                        wr.getWidth(), wr.getHeight(),
-                                        0, 0,
-                                        srcBands);
-        }
-        raster.setRect(sourceLine);
-        if ((y > 7) && (y%8 == 0)) {  // Every 8 scanlines
-            cbLock.lock();
-            try {
-                processImageProgress((float) y / (float) sourceHeight * 100.0F);
-            } finally {
-                cbLock.unlock();
-            }
-        }
-    }
-
-    /** Aborts the current write in the native code */
-    private native void abortWrite(long structPointer);
-
-    /** Resets native structures */
-    private native void resetWriter(long structPointer);
-
-    /** Releases native structures */
-    private static native void disposeWriter(long structPointer);
-
-    private static class JPEGWriterDisposerRecord implements DisposerRecord {
-        private long pData;
-
-        public JPEGWriterDisposerRecord(long pData) {
-            this.pData = pData;
-        }
-
-        public synchronized void dispose() {
-            if (pData != 0) {
-                disposeWriter(pData);
-                pData = 0;
-            }
-        }
-    }
-
-    /**
-     * This method is called from native code in order to write encoder
-     * output to the destination.
-     *
-     * We block any attempt to change the writer state during this
-     * method, in order to prevent a corruption of the native encoder
-     * state.
-     */
-    private void writeOutputData(byte[] data, int offset, int len)
-            throws IOException
-    {
-        cbLock.lock();
-        try {
-            ios.write(data, offset, len);
-        } finally {
-            cbLock.unlock();
-        }
-    }
-
-    private Thread theThread = null;
-    private int theLockCount = 0;
-
-    private synchronized void setThreadLock() {
-        Thread currThread = Thread.currentThread();
-        if (theThread != null) {
-            if (theThread != currThread) {
-                // it looks like that this reader instance is used
-                // by multiple threads.
-                throw new IllegalStateException("Attempt to use instance of " +
-                                                this + " locked on thread " +
-                                                theThread + " from thread " +
-                                                currThread);
-            } else {
-                theLockCount ++;
-            }
-        } else {
-            theThread = currThread;
-            theLockCount = 1;
-        }
-    }
-
-    private synchronized void clearThreadLock() {
-        Thread currThread = Thread.currentThread();
-        if (theThread == null || theThread != currThread) {
-            throw new IllegalStateException("Attempt to clear thread lock form wrong thread. " +
-                                            "Locked thread: " + theThread +
-                                            "; current thread: " + currThread);
-        }
-        theLockCount --;
-        if (theLockCount == 0) {
-            theThread = null;
-        }
-    }
-
-    private CallBackLock cbLock = new CallBackLock();
-
-    private static class CallBackLock {
-
-        private State lockState;
-
-        CallBackLock() {
-            lockState = State.Unlocked;
-        }
-
-        void check() {
-            if (lockState != State.Unlocked) {
-                throw new IllegalStateException("Access to the writer is not allowed");
-            }
-        }
-
-        private void lock() {
-            lockState = State.Locked;
-        }
-
-        private void unlock() {
-            lockState = State.Unlocked;
-        }
-
-        private static enum State {
-            Unlocked,
-            Locked
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/plugins/jpeg/JPEGImageWriterResources.java b/ojluni/src/main/java/com/sun/imageio/plugins/jpeg/JPEGImageWriterResources.java
deleted file mode 100755
index 3db20b3..0000000
--- a/ojluni/src/main/java/com/sun/imageio/plugins/jpeg/JPEGImageWriterResources.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Copyright (c) 2001, 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.
- */
-
-package com.sun.imageio.plugins.jpeg;
-
-import java.util.ListResourceBundle;
-
-public class JPEGImageWriterResources extends ListResourceBundle {
-
-    public JPEGImageWriterResources() {}
-
-    protected Object[][] getContents() {
-        return new Object[][] {
-
-        {Integer.toString(JPEGImageWriter.WARNING_DEST_IGNORED),
-         "Only Rasters or band subsets may be written with a destination type. "
-         + "Destination type ignored."},
-        {Integer.toString(JPEGImageWriter.WARNING_STREAM_METADATA_IGNORED),
-         "Stream metadata ignored on write"},
-        {Integer.toString(JPEGImageWriter.WARNING_DEST_METADATA_COMP_MISMATCH),
-         "Metadata component ids incompatible with destination type. "
-         + "Metadata modified."},
-        {Integer.toString(JPEGImageWriter.WARNING_DEST_METADATA_JFIF_MISMATCH),
-         "Metadata JFIF settings incompatible with destination type. "
-         + "Metadata modified."},
-        {Integer.toString(JPEGImageWriter.WARNING_DEST_METADATA_ADOBE_MISMATCH),
-         "Metadata Adobe settings incompatible with destination type. "
-         + "Metadata modified."},
-        {Integer.toString(JPEGImageWriter.WARNING_IMAGE_METADATA_JFIF_MISMATCH),
-         "Metadata JFIF settings incompatible with image type. "
-         + "Metadata modified."},
-        {Integer.toString(JPEGImageWriter.WARNING_IMAGE_METADATA_ADOBE_MISMATCH),
-         "Metadata Adobe settings incompatible with image type. "
-         + "Metadata modified."},
-        {Integer.toString(JPEGImageWriter.WARNING_METADATA_NOT_JPEG_FOR_RASTER),
-         "Metadata must be JPEGMetadata when writing a Raster. "
-         + "Metadata ignored."},
-        {Integer.toString(JPEGImageWriter.WARNING_NO_BANDS_ON_INDEXED),
-         "Band subset not allowed for an IndexColorModel image.  "
-         + "Band subset ignored."},
-        {Integer.toString(JPEGImageWriter.WARNING_ILLEGAL_THUMBNAIL),
-         "Thumbnails must be simple (possibly index) RGB or grayscale.  "
-         + "Incompatible thumbnail ignored."},
-        {Integer.toString(JPEGImageWriter.WARNING_IGNORING_THUMBS ),
-         "Thumbnails ignored for non-JFIF-compatible image."},
-        {Integer.toString(JPEGImageWriter.WARNING_FORCING_JFIF ),
-         "Thumbnails require JFIF marker segment.  "
-         + "Missing node added to metadata."},
-        {Integer.toString(JPEGImageWriter.WARNING_THUMB_CLIPPED ),
-         "Thumbnail clipped."},
-        {Integer.toString(JPEGImageWriter.WARNING_METADATA_ADJUSTED_FOR_THUMB ),
-         "Metadata adjusted (made JFIF-compatible) for thumbnail."},
-        {Integer.toString(JPEGImageWriter.WARNING_NO_RGB_THUMB_AS_INDEXED ),
-         "RGB thumbnail can't be written as indexed.  Written as RGB"},
-        {Integer.toString(JPEGImageWriter.WARNING_NO_GRAY_THUMB_AS_INDEXED),
-         "Grayscale thumbnail can't be written as indexed.  Written as JPEG"},
-
-       };
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/plugins/jpeg/JPEGImageWriterSpi.java b/ojluni/src/main/java/com/sun/imageio/plugins/jpeg/JPEGImageWriterSpi.java
deleted file mode 100755
index 9973992..0000000
--- a/ojluni/src/main/java/com/sun/imageio/plugins/jpeg/JPEGImageWriterSpi.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Copyright (c) 2000, 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.
- */
-
-package com.sun.imageio.plugins.jpeg;
-
-import javax.imageio.spi.ImageWriterSpi;
-import javax.imageio.spi.ServiceRegistry;
-import javax.imageio.spi.IIORegistry;
-import javax.imageio.stream.ImageOutputStream;
-import javax.imageio.ImageWriter;
-import javax.imageio.ImageTypeSpecifier;
-import javax.imageio.IIOException;
-
-import java.awt.image.ColorModel;
-import java.awt.image.IndexColorModel;
-import java.awt.image.SampleModel;
-import java.util.Locale;
-
-public class JPEGImageWriterSpi extends ImageWriterSpi {
-
-    private static String [] readerSpiNames =
-        {"com.sun.imageio.plugins.jpeg.JPEGImageReaderSpi"};
-
-    public JPEGImageWriterSpi() {
-        super(JPEG.vendor,
-              JPEG.version,
-              JPEG.names,
-              JPEG.suffixes,
-              JPEG.MIMETypes,
-              "com.sun.imageio.plugins.jpeg.JPEGImageWriter",
-              new Class[] { ImageOutputStream.class },
-              readerSpiNames,
-              true,
-              JPEG.nativeStreamMetadataFormatName,
-              JPEG.nativeStreamMetadataFormatClassName,
-              null, null,
-              true,
-              JPEG.nativeImageMetadataFormatName,
-              JPEG.nativeImageMetadataFormatClassName,
-              null, null
-              );
-    }
-
-    public String getDescription(Locale locale) {
-        return "Standard JPEG Image Writer";
-    }
-
-    public boolean isFormatLossless() {
-        return false;
-    }
-
-    public boolean canEncodeImage(ImageTypeSpecifier type) {
-        SampleModel sampleModel = type.getSampleModel();
-
-        // Find the maximum bit depth across all channels
-        int[] sampleSize = sampleModel.getSampleSize();
-        int bitDepth = sampleSize[0];
-        for (int i = 1; i < sampleSize.length; i++) {
-            if (sampleSize[i] > bitDepth) {
-                bitDepth = sampleSize[i];
-            }
-        }
-
-        // 4450894: Ensure bitDepth is between 1 and 8
-        if (bitDepth < 1 || bitDepth > 8) {
-            return false;
-        }
-
-        return true;
-    }
-
-    public ImageWriter createWriterInstance(Object extension)
-        throws IIOException {
-        return new JPEGImageWriter(this);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/plugins/jpeg/JPEGMetadata.java b/ojluni/src/main/java/com/sun/imageio/plugins/jpeg/JPEGMetadata.java
deleted file mode 100755
index 6036cb4..0000000
--- a/ojluni/src/main/java/com/sun/imageio/plugins/jpeg/JPEGMetadata.java
+++ /dev/null
@@ -1,2416 +0,0 @@
-/*
- * Copyright (c) 2001, 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.
- */
-
-package com.sun.imageio.plugins.jpeg;
-
-import javax.imageio.ImageTypeSpecifier;
-import javax.imageio.ImageWriteParam;
-import javax.imageio.IIOException;
-import javax.imageio.stream.ImageInputStream;
-import javax.imageio.stream.ImageOutputStream;
-import javax.imageio.metadata.IIOMetadata;
-import javax.imageio.metadata.IIOMetadataNode;
-import javax.imageio.metadata.IIOMetadataFormat;
-import javax.imageio.metadata.IIOMetadataFormatImpl;
-import javax.imageio.metadata.IIOInvalidTreeException;
-import javax.imageio.plugins.jpeg.JPEGQTable;
-import javax.imageio.plugins.jpeg.JPEGHuffmanTable;
-import javax.imageio.plugins.jpeg.JPEGImageWriteParam;
-
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.w3c.dom.NamedNodeMap;
-
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Iterator;
-import java.util.ListIterator;
-import java.io.IOException;
-import java.awt.color.ICC_Profile;
-import java.awt.color.ICC_ColorSpace;
-import java.awt.color.ColorSpace;
-import java.awt.image.ColorModel;
-import java.awt.Point;
-
-/**
- * Metadata for the JPEG plug-in.
- */
-public class JPEGMetadata extends IIOMetadata implements Cloneable {
-
-    //////// Private variables
-
-    private static final boolean debug = false;
-
-    /**
-     * A copy of <code>markerSequence</code>, created the first time the
-     * <code>markerSequence</code> is modified.  This is used by reset
-     * to restore the original state.
-     */
-    private List resetSequence = null;
-
-    /**
-     * Set to <code>true</code> when reading a thumbnail stored as
-     * JPEG.  This is used to enforce the prohibition of JFIF thumbnails
-     * containing any JFIF marker segments, and to ensure generation of
-     * a correct native subtree during <code>getAsTree</code>.
-     */
-    private boolean inThumb = false;
-
-    /**
-     * Set by the chroma node construction method to signal the
-     * presence or absence of an alpha channel to the transparency
-     * node construction method.  Used only when constructing a
-     * standard metadata tree.
-     */
-    private boolean hasAlpha;
-
-    //////// end of private variables
-
-    /////// Package-access variables
-
-    /**
-     * All data is a list of <code>MarkerSegment</code> objects.
-     * When accessing the list, use the tag to identify the particular
-     * subclass.  Any JFIF marker segment must be the first element
-     * of the list if it is present, and any JFXX or APP2ICC marker
-     * segments are subordinate to the JFIF marker segment.  This
-     * list is package visible so that the writer can access it.
-     * @see #MarkerSegment
-     */
-    List markerSequence = new ArrayList();
-
-    /**
-     * Indicates whether this object represents stream or image
-     * metadata.  Package-visible so the writer can see it.
-     */
-    final boolean isStream;
-
-    /////// End of package-access variables
-
-    /////// Constructors
-
-    /**
-     * Constructor containing code shared by other constructors.
-     */
-    JPEGMetadata(boolean isStream, boolean inThumb) {
-        super(true,  // Supports standard format
-              JPEG.nativeImageMetadataFormatName,  // and a native format
-              JPEG.nativeImageMetadataFormatClassName,
-              null, null);  // No other formats
-        this.inThumb = inThumb;
-        // But if we are stream metadata, adjust the variables
-        this.isStream = isStream;
-        if (isStream) {
-            nativeMetadataFormatName = JPEG.nativeStreamMetadataFormatName;
-            nativeMetadataFormatClassName =
-                JPEG.nativeStreamMetadataFormatClassName;
-        }
-    }
-
-    /*
-     * Constructs a <code>JPEGMetadata</code> object by reading the
-     * contents of an <code>ImageInputStream</code>.  Has package-only
-     * access.
-     *
-     * @param isStream A boolean indicating whether this object will be
-     * stream or image metadata.
-     * @param isThumb A boolean indicating whether this metadata object
-     * is for an image or for a thumbnail stored as JPEG.
-     * @param iis An <code>ImageInputStream</code> from which to read
-     * the metadata.
-     * @param reader The <code>JPEGImageReader</code> calling this
-     * constructor, to which warnings should be sent.
-     */
-    JPEGMetadata(boolean isStream,
-                 boolean isThumb,
-                 ImageInputStream iis,
-                 JPEGImageReader reader) throws IOException {
-        this(isStream, isThumb);
-
-        JPEGBuffer buffer = new JPEGBuffer(iis);
-
-        buffer.loadBuf(0);
-
-        // The first three bytes should be FF, SOI, FF
-        if (((buffer.buf[0] & 0xff) != 0xff)
-            || ((buffer.buf[1] & 0xff) != JPEG.SOI)
-            || ((buffer.buf[2] & 0xff) != 0xff)) {
-            throw new IIOException ("Image format error");
-        }
-
-        boolean done = false;
-        buffer.bufAvail -=2;  // Next byte should be the ff before a marker
-        buffer.bufPtr = 2;
-        MarkerSegment newGuy = null;
-        while (!done) {
-            byte [] buf;
-            int ptr;
-            buffer.loadBuf(1);
-            if (debug) {
-                System.out.println("top of loop");
-                buffer.print(10);
-            }
-            buffer.scanForFF(reader);
-            switch (buffer.buf[buffer.bufPtr] & 0xff) {
-            case 0:
-                if (debug) {
-                    System.out.println("Skipping 0");
-                }
-                buffer.bufAvail--;
-                buffer.bufPtr++;
-                break;
-            case JPEG.SOF0:
-            case JPEG.SOF1:
-            case JPEG.SOF2:
-                if (isStream) {
-                    throw new IIOException
-                        ("SOF not permitted in stream metadata");
-                }
-                newGuy = new SOFMarkerSegment(buffer);
-                break;
-            case JPEG.DQT:
-                newGuy = new DQTMarkerSegment(buffer);
-                break;
-            case JPEG.DHT:
-                newGuy = new DHTMarkerSegment(buffer);
-                break;
-            case JPEG.DRI:
-                newGuy = new DRIMarkerSegment(buffer);
-                break;
-            case JPEG.APP0:
-                // Either JFIF, JFXX, or unknown APP0
-                buffer.loadBuf(8); // tag, length, id
-                buf = buffer.buf;
-                ptr = buffer.bufPtr;
-                if ((buf[ptr+3] == 'J')
-                    && (buf[ptr+4] == 'F')
-                    && (buf[ptr+5] == 'I')
-                    && (buf[ptr+6] == 'F')
-                    && (buf[ptr+7] == 0)) {
-                    if (inThumb) {
-                        reader.warningOccurred
-                            (JPEGImageReader.WARNING_NO_JFIF_IN_THUMB);
-                        // Leave newGuy null
-                        // Read a dummy to skip the segment
-                        JFIFMarkerSegment dummy =
-                            new JFIFMarkerSegment(buffer);
-                    } else if (isStream) {
-                        throw new IIOException
-                            ("JFIF not permitted in stream metadata");
-                    } else if (markerSequence.isEmpty() == false) {
-                        throw new IIOException
-                            ("JFIF APP0 must be first marker after SOI");
-                    } else {
-                        newGuy = new JFIFMarkerSegment(buffer);
-                    }
-                } else if ((buf[ptr+3] == 'J')
-                           && (buf[ptr+4] == 'F')
-                           && (buf[ptr+5] == 'X')
-                           && (buf[ptr+6] == 'X')
-                           && (buf[ptr+7] == 0)) {
-                    if (isStream) {
-                        throw new IIOException
-                            ("JFXX not permitted in stream metadata");
-                    }
-                    if (inThumb) {
-                        throw new IIOException
-                          ("JFXX markers not allowed in JFIF JPEG thumbnail");
-                    }
-                    JFIFMarkerSegment jfif =
-                        (JFIFMarkerSegment) findMarkerSegment
-                               (JFIFMarkerSegment.class, true);
-                    if (jfif == null) {
-                        throw new IIOException
-                            ("JFXX encountered without prior JFIF!");
-                    }
-                    jfif.addJFXX(buffer, reader);
-                    // newGuy remains null
-                } else {
-                    newGuy = new MarkerSegment(buffer);
-                    newGuy.loadData(buffer);
-                }
-                break;
-            case JPEG.APP2:
-                // Either an ICC profile or unknown APP2
-                buffer.loadBuf(15); // tag, length, id
-                if ((buffer.buf[buffer.bufPtr+3] == 'I')
-                    && (buffer.buf[buffer.bufPtr+4] == 'C')
-                    && (buffer.buf[buffer.bufPtr+5] == 'C')
-                    && (buffer.buf[buffer.bufPtr+6] == '_')
-                    && (buffer.buf[buffer.bufPtr+7] == 'P')
-                    && (buffer.buf[buffer.bufPtr+8] == 'R')
-                    && (buffer.buf[buffer.bufPtr+9] == 'O')
-                    && (buffer.buf[buffer.bufPtr+10] == 'F')
-                    && (buffer.buf[buffer.bufPtr+11] == 'I')
-                    && (buffer.buf[buffer.bufPtr+12] == 'L')
-                    && (buffer.buf[buffer.bufPtr+13] == 'E')
-                    && (buffer.buf[buffer.bufPtr+14] == 0)
-                    ) {
-                    if (isStream) {
-                        throw new IIOException
-                            ("ICC profiles not permitted in stream metadata");
-                    }
-
-                    JFIFMarkerSegment jfif =
-                        (JFIFMarkerSegment) findMarkerSegment
-                        (JFIFMarkerSegment.class, true);
-                    if (jfif == null) {
-                        throw new IIOException
-                            ("ICC APP2 encountered without prior JFIF!");
-                    }
-                    jfif.addICC(buffer);
-                    // newGuy remains null
-                } else {
-                    newGuy = new MarkerSegment(buffer);
-                    newGuy.loadData(buffer);
-                }
-                break;
-            case JPEG.APP14:
-                // Either Adobe or unknown APP14
-                buffer.loadBuf(8); // tag, length, id
-                if ((buffer.buf[buffer.bufPtr+3] == 'A')
-                    && (buffer.buf[buffer.bufPtr+4] == 'd')
-                    && (buffer.buf[buffer.bufPtr+5] == 'o')
-                    && (buffer.buf[buffer.bufPtr+6] == 'b')
-                    && (buffer.buf[buffer.bufPtr+7] == 'e')) {
-                    if (isStream) {
-                        throw new IIOException
-                      ("Adobe APP14 markers not permitted in stream metadata");
-                    }
-                    newGuy = new AdobeMarkerSegment(buffer);
-                } else {
-                    newGuy = new MarkerSegment(buffer);
-                    newGuy.loadData(buffer);
-                }
-
-                break;
-            case JPEG.COM:
-                newGuy = new COMMarkerSegment(buffer);
-                break;
-            case JPEG.SOS:
-                if (isStream) {
-                    throw new IIOException
-                        ("SOS not permitted in stream metadata");
-                }
-                newGuy = new SOSMarkerSegment(buffer);
-                break;
-            case JPEG.RST0:
-            case JPEG.RST1:
-            case JPEG.RST2:
-            case JPEG.RST3:
-            case JPEG.RST4:
-            case JPEG.RST5:
-            case JPEG.RST6:
-            case JPEG.RST7:
-                if (debug) {
-                    System.out.println("Restart Marker");
-                }
-                buffer.bufPtr++; // Just skip it
-                buffer.bufAvail--;
-                break;
-            case JPEG.EOI:
-                done = true;
-                buffer.bufPtr++;
-                buffer.bufAvail--;
-                break;
-            default:
-                newGuy = new MarkerSegment(buffer);
-                newGuy.loadData(buffer);
-                newGuy.unknown = true;
-                break;
-            }
-            if (newGuy != null) {
-                markerSequence.add(newGuy);
-                if (debug) {
-                    newGuy.print();
-                }
-                newGuy = null;
-            }
-        }
-
-        // Now that we've read up to the EOI, we need to push back
-        // whatever is left in the buffer, so that the next read
-        // in the native code will work.
-
-        buffer.pushBack();
-
-        if (!isConsistent()) {
-            throw new IIOException("Inconsistent metadata read from stream");
-        }
-    }
-
-    /**
-     * Constructs a default stream <code>JPEGMetadata</code> object appropriate
-     * for the given write parameters.
-     */
-    JPEGMetadata(ImageWriteParam param, JPEGImageWriter writer) {
-        this(true, false);
-
-        JPEGImageWriteParam jparam = null;
-
-        if ((param != null) && (param instanceof JPEGImageWriteParam)) {
-            jparam = (JPEGImageWriteParam) param;
-            if (!jparam.areTablesSet()) {
-                jparam = null;
-            }
-        }
-        if (jparam != null) {
-            markerSequence.add(new DQTMarkerSegment(jparam.getQTables()));
-            markerSequence.add
-                (new DHTMarkerSegment(jparam.getDCHuffmanTables(),
-                                      jparam.getACHuffmanTables()));
-        } else {
-            // default tables.
-            markerSequence.add(new DQTMarkerSegment(JPEG.getDefaultQTables()));
-            markerSequence.add(new DHTMarkerSegment(JPEG.getDefaultHuffmanTables(true),
-                                                    JPEG.getDefaultHuffmanTables(false)));
-        }
-
-        // Defensive programming
-        if (!isConsistent()) {
-            throw new InternalError("Default stream metadata is inconsistent");
-        }
-    }
-
-    /**
-     * Constructs a default image <code>JPEGMetadata</code> object appropriate
-     * for the given image type and write parameters.
-     */
-    JPEGMetadata(ImageTypeSpecifier imageType,
-                 ImageWriteParam param,
-                 JPEGImageWriter writer) {
-        this(false, false);
-
-        boolean wantJFIF = true;
-        boolean wantAdobe = false;
-        int transform = JPEG.ADOBE_UNKNOWN;
-        boolean willSubsample = true;
-        boolean wantICC = false;
-        boolean wantProg = false;
-        boolean wantOptimized = false;
-        boolean wantExtended = false;
-        boolean wantQTables = true;
-        boolean wantHTables = true;
-        float quality = JPEG.DEFAULT_QUALITY;
-        byte[] componentIDs = { 1, 2, 3, 4};
-        int numComponents = 0;
-
-        ImageTypeSpecifier destType = null;
-
-        if (param != null) {
-            destType = param.getDestinationType();
-            if (destType != null) {
-                if (imageType != null) {
-                    // Ignore the destination type.
-                    writer.warningOccurred
-                        (JPEGImageWriter.WARNING_DEST_IGNORED);
-                    destType = null;
-                }
-            }
-            // The only progressive mode that makes sense here is MODE_DEFAULT
-            if (param.canWriteProgressive()) {
-                // the param may not be one of ours, so it may return false.
-                // If so, the following would throw an exception
-                if (param.getProgressiveMode() == ImageWriteParam.MODE_DEFAULT) {
-                    wantProg = true;
-                    wantOptimized = true;
-                    wantHTables = false;
-                }
-            }
-
-            if (param instanceof JPEGImageWriteParam) {
-                JPEGImageWriteParam jparam = (JPEGImageWriteParam) param;
-                if (jparam.areTablesSet()) {
-                    wantQTables = false;  // If the param has them, metadata shouldn't
-                    wantHTables = false;
-                    if ((jparam.getDCHuffmanTables().length > 2)
-                            || (jparam.getACHuffmanTables().length > 2)) {
-                        wantExtended = true;
-                    }
-                }
-                // Progressive forces optimized, regardless of param setting
-                // so consult the param re optimized only if not progressive
-                if (!wantProg) {
-                    wantOptimized = jparam.getOptimizeHuffmanTables();
-                    if (wantOptimized) {
-                        wantHTables = false;
-                    }
-                }
-            }
-
-            // compression quality should determine the q tables.  Note that this
-            // will be ignored if we already decided not to create any.
-            // Again, the param may not be one of ours, so we must check that it
-            // supports compression settings
-            if (param.canWriteCompressed()) {
-                if (param.getCompressionMode() == ImageWriteParam.MODE_EXPLICIT) {
-                    quality = param.getCompressionQuality();
-                }
-            }
-        }
-
-        // We are done with the param, now for the image types
-
-        ColorSpace cs = null;
-        if (destType != null) {
-            ColorModel cm = destType.getColorModel();
-            numComponents = cm.getNumComponents();
-            boolean hasExtraComponents = (cm.getNumColorComponents() != numComponents);
-            boolean hasAlpha = cm.hasAlpha();
-            cs = cm.getColorSpace();
-            int type = cs.getType();
-            switch(type) {
-            case ColorSpace.TYPE_GRAY:
-                willSubsample = false;
-                if (hasExtraComponents) {  // e.g. alpha
-                    wantJFIF = false;
-                }
-                break;
-            case ColorSpace.TYPE_3CLR:
-                if (cs == JPEG.JCS.getYCC()) {
-                    wantJFIF = false;
-                    componentIDs[0] = (byte) 'Y';
-                    componentIDs[1] = (byte) 'C';
-                    componentIDs[2] = (byte) 'c';
-                    if (hasAlpha) {
-                        componentIDs[3] = (byte) 'A';
-                    }
-                }
-                break;
-            case ColorSpace.TYPE_YCbCr:
-                if (hasExtraComponents) { // e.g. K or alpha
-                    wantJFIF = false;
-                    if (!hasAlpha) { // Not alpha, so must be K
-                        wantAdobe = true;
-                        transform = JPEG.ADOBE_YCCK;
-                    }
-                }
-                break;
-            case ColorSpace.TYPE_RGB:  // with or without alpha
-                wantJFIF = false;
-                wantAdobe = true;
-                willSubsample = false;
-                componentIDs[0] = (byte) 'R';
-                componentIDs[1] = (byte) 'G';
-                componentIDs[2] = (byte) 'B';
-                if (hasAlpha) {
-                    componentIDs[3] = (byte) 'A';
-                }
-                break;
-            default:
-                // Everything else is not subsampled, gets no special marker,
-                // and component ids are 1 - N
-                wantJFIF = false;
-                willSubsample = false;
-            }
-        } else if (imageType != null) {
-            ColorModel cm = imageType.getColorModel();
-            numComponents = cm.getNumComponents();
-            boolean hasExtraComponents = (cm.getNumColorComponents() != numComponents);
-            boolean hasAlpha = cm.hasAlpha();
-            cs = cm.getColorSpace();
-            int type = cs.getType();
-            switch(type) {
-            case ColorSpace.TYPE_GRAY:
-                willSubsample = false;
-                if (hasExtraComponents) {  // e.g. alpha
-                    wantJFIF = false;
-                }
-                break;
-            case ColorSpace.TYPE_RGB:  // with or without alpha
-                // without alpha we just accept the JFIF defaults
-                if (hasAlpha) {
-                    wantJFIF = false;
-                }
-                break;
-            case ColorSpace.TYPE_3CLR:
-                wantJFIF = false;
-                willSubsample = false;
-                if (cs.equals(ColorSpace.getInstance(ColorSpace.CS_PYCC))) {
-                    willSubsample = true;
-                    wantAdobe = true;
-                    componentIDs[0] = (byte) 'Y';
-                    componentIDs[1] = (byte) 'C';
-                    componentIDs[2] = (byte) 'c';
-                    if (hasAlpha) {
-                        componentIDs[3] = (byte) 'A';
-                    }
-                }
-                break;
-            case ColorSpace.TYPE_YCbCr:
-                if (hasExtraComponents) { // e.g. K or alpha
-                    wantJFIF = false;
-                    if (!hasAlpha) {  // then it must be K
-                        wantAdobe = true;
-                        transform = JPEG.ADOBE_YCCK;
-                    }
-                }
-                break;
-            case ColorSpace.TYPE_CMYK:
-                wantJFIF = false;
-                wantAdobe = true;
-                transform = JPEG.ADOBE_YCCK;
-                break;
-
-            default:
-                // Everything else is not subsampled, gets no special marker,
-                // and component ids are 0 - N
-                wantJFIF = false;
-                willSubsample = false;
-            }
-
-        }
-
-        // do we want an ICC profile?
-        if (wantJFIF && JPEG.isNonStandardICC(cs)) {
-            wantICC = true;
-        }
-
-        // Now step through the markers, consulting our variables.
-        if (wantJFIF) {
-            JFIFMarkerSegment jfif = new JFIFMarkerSegment();
-            markerSequence.add(jfif);
-            if (wantICC) {
-                try {
-                    jfif.addICC((ICC_ColorSpace)cs);
-                } catch (IOException e) {} // Can't happen here
-            }
-        }
-        // Adobe
-        if (wantAdobe) {
-            markerSequence.add(new AdobeMarkerSegment(transform));
-        }
-
-        // dqt
-        if (wantQTables) {
-            markerSequence.add(new DQTMarkerSegment(quality, willSubsample));
-        }
-
-        // dht
-        if (wantHTables) {
-            markerSequence.add(new DHTMarkerSegment(willSubsample));
-        }
-
-        // sof
-        markerSequence.add(new SOFMarkerSegment(wantProg,
-                                                wantExtended,
-                                                willSubsample,
-                                                componentIDs,
-                                                numComponents));
-
-        // sos
-        if (!wantProg) {  // Default progression scans are done in the writer
-            markerSequence.add(new SOSMarkerSegment(willSubsample,
-                                                    componentIDs,
-                                                    numComponents));
-        }
-
-        // Defensive programming
-        if (!isConsistent()) {
-            throw new InternalError("Default image metadata is inconsistent");
-        }
-    }
-
-    ////// End of constructors
-
-    // Utilities for dealing with the marker sequence.
-    // The first ones have package access for access from the writer.
-
-    /**
-     * Returns the first MarkerSegment object in the list
-     * with the given tag, or null if none is found.
-     */
-    MarkerSegment findMarkerSegment(int tag) {
-        Iterator iter = markerSequence.iterator();
-        while (iter.hasNext()) {
-            MarkerSegment seg = (MarkerSegment)iter.next();
-            if (seg.tag == tag) {
-                return seg;
-            }
-        }
-        return null;
-    }
-
-    /**
-     * Returns the first or last MarkerSegment object in the list
-     * of the given class, or null if none is found.
-     */
-    MarkerSegment findMarkerSegment(Class cls, boolean first) {
-        if (first) {
-            Iterator iter = markerSequence.iterator();
-            while (iter.hasNext()) {
-                MarkerSegment seg = (MarkerSegment)iter.next();
-                if (cls.isInstance(seg)) {
-                    return seg;
-                }
-            }
-        } else {
-            ListIterator iter = markerSequence.listIterator(markerSequence.size());
-            while (iter.hasPrevious()) {
-                MarkerSegment seg = (MarkerSegment)iter.previous();
-                if (cls.isInstance(seg)) {
-                    return seg;
-                }
-            }
-        }
-        return null;
-    }
-
-    /**
-     * Returns the index of the first or last MarkerSegment in the list
-     * of the given class, or -1 if none is found.
-     */
-    private int findMarkerSegmentPosition(Class cls, boolean first) {
-        if (first) {
-            ListIterator iter = markerSequence.listIterator();
-            for (int i = 0; iter.hasNext(); i++) {
-                MarkerSegment seg = (MarkerSegment)iter.next();
-                if (cls.isInstance(seg)) {
-                    return i;
-                }
-            }
-        } else {
-            ListIterator iter = markerSequence.listIterator(markerSequence.size());
-            for (int i = markerSequence.size()-1; iter.hasPrevious(); i--) {
-                MarkerSegment seg = (MarkerSegment)iter.previous();
-                if (cls.isInstance(seg)) {
-                    return i;
-                }
-            }
-        }
-        return -1;
-    }
-
-    private int findLastUnknownMarkerSegmentPosition() {
-        ListIterator iter = markerSequence.listIterator(markerSequence.size());
-        for (int i = markerSequence.size()-1; iter.hasPrevious(); i--) {
-            MarkerSegment seg = (MarkerSegment)iter.previous();
-            if (seg.unknown == true) {
-                return i;
-            }
-        }
-        return -1;
-    }
-
-    // Implement Cloneable, but restrict access
-
-    protected Object clone() {
-        JPEGMetadata newGuy = null;
-        try {
-            newGuy = (JPEGMetadata) super.clone();
-        } catch (CloneNotSupportedException e) {} // won't happen
-        if (markerSequence != null) {
-            newGuy.markerSequence = (List) cloneSequence();
-        }
-        newGuy.resetSequence = null;
-        return newGuy;
-    }
-
-    /**
-     * Returns a deep copy of the current marker sequence.
-     */
-    private List cloneSequence() {
-        if (markerSequence == null) {
-            return null;
-        }
-        List retval = new ArrayList(markerSequence.size());
-        Iterator iter = markerSequence.iterator();
-        while(iter.hasNext()) {
-            MarkerSegment seg = (MarkerSegment)iter.next();
-            retval.add(seg.clone());
-        }
-
-        return retval;
-    }
-
-
-    // Tree methods
-
-    public Node getAsTree(String formatName) {
-        if (formatName == null) {
-            throw new IllegalArgumentException("null formatName!");
-        }
-        if (isStream) {
-            if (formatName.equals(JPEG.nativeStreamMetadataFormatName)) {
-                return getNativeTree();
-            }
-        } else {
-            if (formatName.equals(JPEG.nativeImageMetadataFormatName)) {
-                return getNativeTree();
-            }
-            if (formatName.equals
-                    (IIOMetadataFormatImpl.standardMetadataFormatName)) {
-                return getStandardTree();
-            }
-        }
-        throw  new IllegalArgumentException("Unsupported format name: "
-                                                + formatName);
-    }
-
-    IIOMetadataNode getNativeTree() {
-        IIOMetadataNode root;
-        IIOMetadataNode top;
-        Iterator iter = markerSequence.iterator();
-        if (isStream) {
-            root = new IIOMetadataNode(JPEG.nativeStreamMetadataFormatName);
-            top = root;
-        } else {
-            IIOMetadataNode sequence = new IIOMetadataNode("markerSequence");
-            if (!inThumb) {
-                root = new IIOMetadataNode(JPEG.nativeImageMetadataFormatName);
-                IIOMetadataNode header = new IIOMetadataNode("JPEGvariety");
-                root.appendChild(header);
-                JFIFMarkerSegment jfif = (JFIFMarkerSegment)
-                    findMarkerSegment(JFIFMarkerSegment.class, true);
-                if (jfif != null) {
-                    iter.next();  // JFIF must be first, so this skips it
-                    header.appendChild(jfif.getNativeNode());
-                }
-                root.appendChild(sequence);
-            } else {
-                root = sequence;
-            }
-            top = sequence;
-        }
-        while(iter.hasNext()) {
-            MarkerSegment seg = (MarkerSegment) iter.next();
-            top.appendChild(seg.getNativeNode());
-        }
-        return root;
-    }
-
-    // Standard tree node methods
-
-    protected IIOMetadataNode getStandardChromaNode() {
-        hasAlpha = false;  // Unless we find otherwise
-
-        // Colorspace type - follow the rules in the spec
-        // First get the SOF marker segment, if there is one
-        SOFMarkerSegment sof = (SOFMarkerSegment)
-            findMarkerSegment(SOFMarkerSegment.class, true);
-        if (sof == null) {
-            // No image, so no chroma
-            return null;
-        }
-
-        IIOMetadataNode chroma = new IIOMetadataNode("Chroma");
-        IIOMetadataNode csType = new IIOMetadataNode("ColorSpaceType");
-        chroma.appendChild(csType);
-
-        // get the number of channels
-        int numChannels = sof.componentSpecs.length;
-
-        IIOMetadataNode numChanNode = new IIOMetadataNode("NumChannels");
-        chroma.appendChild(numChanNode);
-        numChanNode.setAttribute("value", Integer.toString(numChannels));
-
-        // is there a JFIF marker segment?
-        if (findMarkerSegment(JFIFMarkerSegment.class, true) != null) {
-            if (numChannels == 1) {
-                csType.setAttribute("name", "GRAY");
-            } else {
-                csType.setAttribute("name", "YCbCr");
-            }
-            return chroma;
-        }
-
-        // How about an Adobe marker segment?
-        AdobeMarkerSegment adobe =
-            (AdobeMarkerSegment) findMarkerSegment(AdobeMarkerSegment.class, true);
-        if (adobe != null){
-            switch (adobe.transform) {
-            case JPEG.ADOBE_YCCK:
-                csType.setAttribute("name", "YCCK");
-                break;
-            case JPEG.ADOBE_YCC:
-                csType.setAttribute("name", "YCbCr");
-                break;
-            case JPEG.ADOBE_UNKNOWN:
-                if (numChannels == 3) {
-                    csType.setAttribute("name", "RGB");
-                } else if (numChannels == 4) {
-                    csType.setAttribute("name", "CMYK");
-                }
-                break;
-            }
-            return chroma;
-        }
-
-        // Neither marker.  Check components
-        if (numChannels < 3) {
-            csType.setAttribute("name", "GRAY");
-            if (numChannels == 2) {
-                hasAlpha = true;
-            }
-            return chroma;
-        }
-
-        boolean idsAreJFIF = true;
-
-        for (int i = 0; i < sof.componentSpecs.length; i++) {
-            int id = sof.componentSpecs[i].componentId;
-            if ((id < 1) || (id >= sof.componentSpecs.length)) {
-                idsAreJFIF = false;
-            }
-        }
-
-        if (idsAreJFIF) {
-            csType.setAttribute("name", "YCbCr");
-            if (numChannels == 4) {
-                hasAlpha = true;
-            }
-            return chroma;
-        }
-
-        // Check against the letters
-        if ((sof.componentSpecs[0].componentId == 'R')
-            && (sof.componentSpecs[1].componentId == 'G')
-            && (sof.componentSpecs[2].componentId == 'B')){
-
-            csType.setAttribute("name", "RGB");
-            if ((numChannels == 4)
-                && (sof.componentSpecs[3].componentId == 'A')) {
-                hasAlpha = true;
-            }
-            return chroma;
-        }
-
-        if ((sof.componentSpecs[0].componentId == 'Y')
-            && (sof.componentSpecs[1].componentId == 'C')
-            && (sof.componentSpecs[2].componentId == 'c')){
-
-            csType.setAttribute("name", "PhotoYCC");
-            if ((numChannels == 4)
-                && (sof.componentSpecs[3].componentId == 'A')) {
-                hasAlpha = true;
-            }
-            return chroma;
-        }
-
-        // Finally, 3-channel subsampled are YCbCr, unsubsampled are RGB
-        // 4-channel subsampled are YCbCrA, unsubsampled are CMYK
-
-        boolean subsampled = false;
-
-        int hfactor = sof.componentSpecs[0].HsamplingFactor;
-        int vfactor = sof.componentSpecs[0].VsamplingFactor;
-
-        for (int i = 1; i<sof.componentSpecs.length; i++) {
-            if ((sof.componentSpecs[i].HsamplingFactor != hfactor)
-                || (sof.componentSpecs[i].VsamplingFactor != vfactor)){
-                subsampled = true;
-                break;
-            }
-        }
-
-        if (subsampled) {
-            csType.setAttribute("name", "YCbCr");
-            if (numChannels == 4) {
-                hasAlpha = true;
-            }
-            return chroma;
-        }
-
-        // Not subsampled.  numChannels < 3 is taken care of above
-        if (numChannels == 3) {
-            csType.setAttribute("name", "RGB");
-        } else {
-            csType.setAttribute("name", "CMYK");
-        }
-
-        return chroma;
-    }
-
-    protected IIOMetadataNode getStandardCompressionNode() {
-
-        IIOMetadataNode compression = new IIOMetadataNode("Compression");
-
-        // CompressionTypeName
-        IIOMetadataNode name = new IIOMetadataNode("CompressionTypeName");
-        name.setAttribute("value", "JPEG");
-        compression.appendChild(name);
-
-        // Lossless - false
-        IIOMetadataNode lossless = new IIOMetadataNode("Lossless");
-        lossless.setAttribute("value", "FALSE");
-        compression.appendChild(lossless);
-
-        // NumProgressiveScans - count sos segments
-        int sosCount = 0;
-        Iterator iter = markerSequence.iterator();
-        while (iter.hasNext()) {
-            MarkerSegment ms = (MarkerSegment) iter.next();
-            if (ms.tag == JPEG.SOS) {
-                sosCount++;
-            }
-        }
-        if (sosCount != 0) {
-            IIOMetadataNode prog = new IIOMetadataNode("NumProgressiveScans");
-            prog.setAttribute("value", Integer.toString(sosCount));
-            compression.appendChild(prog);
-        }
-
-        return compression;
-    }
-
-    protected IIOMetadataNode getStandardDimensionNode() {
-        // If we have a JFIF marker segment, we know a little
-        // otherwise all we know is the orientation, which is always normal
-        IIOMetadataNode dim = new IIOMetadataNode("Dimension");
-        IIOMetadataNode orient = new IIOMetadataNode("ImageOrientation");
-        orient.setAttribute("value", "normal");
-        dim.appendChild(orient);
-
-        JFIFMarkerSegment jfif =
-            (JFIFMarkerSegment) findMarkerSegment(JFIFMarkerSegment.class, true);
-        if (jfif != null) {
-
-            // Aspect Ratio is width of pixel / height of pixel
-            float aspectRatio;
-            if (jfif.resUnits == 0) {
-                // In this case they just encode aspect ratio directly
-                aspectRatio = ((float) jfif.Xdensity)/jfif.Ydensity;
-            } else {
-                // They are true densities (e.g. dpi) and must be inverted
-                aspectRatio = ((float) jfif.Ydensity)/jfif.Xdensity;
-            }
-            IIOMetadataNode aspect = new IIOMetadataNode("PixelAspectRatio");
-            aspect.setAttribute("value", Float.toString(aspectRatio));
-            dim.insertBefore(aspect, orient);
-
-            // Pixel size
-            if (jfif.resUnits != 0) {
-                // 1 == dpi, 2 == dpc
-                float scale = (jfif.resUnits == 1) ? 25.4F : 10.0F;
-
-                IIOMetadataNode horiz =
-                    new IIOMetadataNode("HorizontalPixelSize");
-                horiz.setAttribute("value",
-                                   Float.toString(scale/jfif.Xdensity));
-                dim.appendChild(horiz);
-
-                IIOMetadataNode vert =
-                    new IIOMetadataNode("VerticalPixelSize");
-                vert.setAttribute("value",
-                                  Float.toString(scale/jfif.Ydensity));
-                dim.appendChild(vert);
-            }
-        }
-        return dim;
-    }
-
-    protected IIOMetadataNode getStandardTextNode() {
-        IIOMetadataNode text = null;
-        // Add a text entry for each COM Marker Segment
-        if (findMarkerSegment(JPEG.COM) != null) {
-            text = new IIOMetadataNode("Text");
-            Iterator iter = markerSequence.iterator();
-            while (iter.hasNext()) {
-                MarkerSegment seg = (MarkerSegment) iter.next();
-                if (seg.tag == JPEG.COM) {
-                    COMMarkerSegment com = (COMMarkerSegment) seg;
-                    IIOMetadataNode entry = new IIOMetadataNode("TextEntry");
-                    entry.setAttribute("keyword", "comment");
-                    entry.setAttribute("value", com.getComment());
-                text.appendChild(entry);
-                }
-            }
-        }
-        return text;
-    }
-
-    protected IIOMetadataNode getStandardTransparencyNode() {
-        IIOMetadataNode trans = null;
-        if (hasAlpha == true) {
-            trans = new IIOMetadataNode("Transparency");
-            IIOMetadataNode alpha = new IIOMetadataNode("Alpha");
-            alpha.setAttribute("value", "nonpremultiplied"); // Always assume
-            trans.appendChild(alpha);
-        }
-        return trans;
-    }
-
-    // Editing
-
-    public boolean isReadOnly() {
-        return false;
-    }
-
-    public void mergeTree(String formatName, Node root)
-        throws IIOInvalidTreeException {
-        if (formatName == null) {
-            throw new IllegalArgumentException("null formatName!");
-        }
-        if (root == null) {
-            throw new IllegalArgumentException("null root!");
-        }
-        List copy = null;
-        if (resetSequence == null) {
-            resetSequence = cloneSequence();  // Deep copy
-            copy = resetSequence;  // Avoid cloning twice
-        } else {
-            copy = cloneSequence();
-        }
-        if (isStream &&
-            (formatName.equals(JPEG.nativeStreamMetadataFormatName))) {
-                mergeNativeTree(root);
-        } else if (!isStream &&
-                   (formatName.equals(JPEG.nativeImageMetadataFormatName))) {
-            mergeNativeTree(root);
-        } else if (!isStream &&
-                   (formatName.equals
-                    (IIOMetadataFormatImpl.standardMetadataFormatName))) {
-            mergeStandardTree(root);
-        } else {
-            throw  new IllegalArgumentException("Unsupported format name: "
-                                                + formatName);
-        }
-        if (!isConsistent()) {
-            markerSequence = copy;
-            throw new IIOInvalidTreeException
-                ("Merged tree is invalid; original restored", root);
-        }
-    }
-
-    private void mergeNativeTree(Node root) throws IIOInvalidTreeException {
-        String name = root.getNodeName();
-        if (name != ((isStream) ? JPEG.nativeStreamMetadataFormatName
-                                : JPEG.nativeImageMetadataFormatName)) {
-            throw new IIOInvalidTreeException("Invalid root node name: " + name,
-                                              root);
-        }
-        if (root.getChildNodes().getLength() != 2) { // JPEGvariety and markerSequence
-            throw new IIOInvalidTreeException(
-                "JPEGvariety and markerSequence nodes must be present", root);
-        }
-        mergeJFIFsubtree(root.getFirstChild());
-        mergeSequenceSubtree(root.getLastChild());
-    }
-
-    /**
-     * Merge a JFIF subtree into the marker sequence, if the subtree
-     * is non-empty.
-     * If a JFIF marker exists, update it from the subtree.
-     * If none exists, create one from the subtree and insert it at the
-     * beginning of the marker sequence.
-     */
-    private void mergeJFIFsubtree(Node JPEGvariety)
-        throws IIOInvalidTreeException {
-        if (JPEGvariety.getChildNodes().getLength() != 0) {
-            Node jfifNode = JPEGvariety.getFirstChild();
-            // is there already a jfif marker segment?
-            JFIFMarkerSegment jfifSeg =
-                (JFIFMarkerSegment) findMarkerSegment(JFIFMarkerSegment.class, true);
-            if (jfifSeg != null) {
-                jfifSeg.updateFromNativeNode(jfifNode, false);
-            } else {
-                // Add it as the first element in the list.
-                markerSequence.add(0, new JFIFMarkerSegment(jfifNode));
-            }
-        }
-    }
-
-    private void mergeSequenceSubtree(Node sequenceTree)
-        throws IIOInvalidTreeException {
-        NodeList children = sequenceTree.getChildNodes();
-        for (int i = 0; i < children.getLength(); i++) {
-            Node node = children.item(i);
-            String name = node.getNodeName();
-            if (name.equals("dqt")) {
-                mergeDQTNode(node);
-            } else if (name.equals("dht")) {
-                mergeDHTNode(node);
-            } else if (name.equals("dri")) {
-                mergeDRINode(node);
-            } else if (name.equals("com")) {
-                mergeCOMNode(node);
-            } else if (name.equals("app14Adobe")) {
-                mergeAdobeNode(node);
-            } else if (name.equals("unknown")) {
-                mergeUnknownNode(node);
-            } else if (name.equals("sof")) {
-                mergeSOFNode(node);
-            } else if (name.equals("sos")) {
-                mergeSOSNode(node);
-            } else {
-                throw new IIOInvalidTreeException("Invalid node: " + name, node);
-            }
-        }
-    }
-
-    /**
-     * Merge the given DQT node into the marker sequence.  If there already
-     * exist DQT marker segments in the sequence, then each table in the
-     * node replaces the first table, in any DQT segment, with the same
-     * table id.  If none of the existing DQT segments contain a table with
-     * the same id, then the table is added to the last existing DQT segment.
-     * If there are no DQT segments, then a new one is created and added
-     * as follows:
-     * If there are DHT segments, the new DQT segment is inserted before the
-     * first one.
-     * If there are no DHT segments, the new DQT segment is inserted before
-     * an SOF segment, if there is one.
-     * If there is no SOF segment, the new DQT segment is inserted before
-     * the first SOS segment, if there is one.
-     * If there is no SOS segment, the new DQT segment is added to the end
-     * of the sequence.
-     */
-    private void mergeDQTNode(Node node) throws IIOInvalidTreeException {
-        // First collect any existing DQT nodes into a local list
-        ArrayList oldDQTs = new ArrayList();
-        Iterator iter = markerSequence.iterator();
-        while (iter.hasNext()) {
-            MarkerSegment seg = (MarkerSegment) iter.next();
-            if (seg instanceof DQTMarkerSegment) {
-                oldDQTs.add(seg);
-            }
-        }
-        if (!oldDQTs.isEmpty()) {
-            NodeList children = node.getChildNodes();
-            for (int i = 0; i < children.getLength(); i++) {
-                Node child = children.item(i);
-                int childID = MarkerSegment.getAttributeValue(child,
-                                                              null,
-                                                              "qtableId",
-                                                              0, 3,
-                                                              true);
-                DQTMarkerSegment dqt = null;
-                int tableIndex = -1;
-                for (int j = 0; j < oldDQTs.size(); j++) {
-                    DQTMarkerSegment testDQT = (DQTMarkerSegment) oldDQTs.get(j);
-                    for (int k = 0; k < testDQT.tables.size(); k++) {
-                        DQTMarkerSegment.Qtable testTable =
-                            (DQTMarkerSegment.Qtable) testDQT.tables.get(k);
-                        if (childID == testTable.tableID) {
-                            dqt = testDQT;
-                            tableIndex = k;
-                            break;
-                        }
-                    }
-                    if (dqt != null) break;
-                }
-                if (dqt != null) {
-                    dqt.tables.set(tableIndex, dqt.getQtableFromNode(child));
-                } else {
-                    dqt = (DQTMarkerSegment) oldDQTs.get(oldDQTs.size()-1);
-                    dqt.tables.add(dqt.getQtableFromNode(child));
-                }
-            }
-        } else {
-            DQTMarkerSegment newGuy = new DQTMarkerSegment(node);
-            int firstDHT = findMarkerSegmentPosition(DHTMarkerSegment.class, true);
-            int firstSOF = findMarkerSegmentPosition(SOFMarkerSegment.class, true);
-            int firstSOS = findMarkerSegmentPosition(SOSMarkerSegment.class, true);
-            if (firstDHT != -1) {
-                markerSequence.add(firstDHT, newGuy);
-            } else if (firstSOF != -1) {
-                markerSequence.add(firstSOF, newGuy);
-            } else if (firstSOS != -1) {
-                markerSequence.add(firstSOS, newGuy);
-            } else {
-                markerSequence.add(newGuy);
-            }
-        }
-    }
-
-    /**
-     * Merge the given DHT node into the marker sequence.  If there already
-     * exist DHT marker segments in the sequence, then each table in the
-     * node replaces the first table, in any DHT segment, with the same
-     * table class and table id.  If none of the existing DHT segments contain
-     * a table with the same class and id, then the table is added to the last
-     * existing DHT segment.
-     * If there are no DHT segments, then a new one is created and added
-     * as follows:
-     * If there are DQT segments, the new DHT segment is inserted immediately
-     * following the last DQT segment.
-     * If there are no DQT segments, the new DHT segment is inserted before
-     * an SOF segment, if there is one.
-     * If there is no SOF segment, the new DHT segment is inserted before
-     * the first SOS segment, if there is one.
-     * If there is no SOS segment, the new DHT segment is added to the end
-     * of the sequence.
-     */
-    private void mergeDHTNode(Node node) throws IIOInvalidTreeException {
-        // First collect any existing DQT nodes into a local list
-        ArrayList oldDHTs = new ArrayList();
-        Iterator iter = markerSequence.iterator();
-        while (iter.hasNext()) {
-            MarkerSegment seg = (MarkerSegment) iter.next();
-            if (seg instanceof DHTMarkerSegment) {
-                oldDHTs.add(seg);
-            }
-        }
-        if (!oldDHTs.isEmpty()) {
-            NodeList children = node.getChildNodes();
-            for (int i = 0; i < children.getLength(); i++) {
-                Node child = children.item(i);
-                NamedNodeMap attrs = child.getAttributes();
-                int childID = MarkerSegment.getAttributeValue(child,
-                                                              attrs,
-                                                              "htableId",
-                                                              0, 3,
-                                                              true);
-                int childClass = MarkerSegment.getAttributeValue(child,
-                                                                 attrs,
-                                                                 "class",
-                                                                 0, 1,
-                                                                 true);
-                DHTMarkerSegment dht = null;
-                int tableIndex = -1;
-                for (int j = 0; j < oldDHTs.size(); j++) {
-                    DHTMarkerSegment testDHT = (DHTMarkerSegment) oldDHTs.get(j);
-                    for (int k = 0; k < testDHT.tables.size(); k++) {
-                        DHTMarkerSegment.Htable testTable =
-                            (DHTMarkerSegment.Htable) testDHT.tables.get(k);
-                        if ((childID == testTable.tableID) &&
-                            (childClass == testTable.tableClass)) {
-                            dht = testDHT;
-                            tableIndex = k;
-                            break;
-                        }
-                    }
-                    if (dht != null) break;
-                }
-                if (dht != null) {
-                    dht.tables.set(tableIndex, dht.getHtableFromNode(child));
-                } else {
-                    dht = (DHTMarkerSegment) oldDHTs.get(oldDHTs.size()-1);
-                    dht.tables.add(dht.getHtableFromNode(child));
-                }
-            }
-        } else {
-            DHTMarkerSegment newGuy = new DHTMarkerSegment(node);
-            int lastDQT = findMarkerSegmentPosition(DQTMarkerSegment.class, false);
-            int firstSOF = findMarkerSegmentPosition(SOFMarkerSegment.class, true);
-            int firstSOS = findMarkerSegmentPosition(SOSMarkerSegment.class, true);
-            if (lastDQT != -1) {
-                markerSequence.add(lastDQT+1, newGuy);
-            } else if (firstSOF != -1) {
-                markerSequence.add(firstSOF, newGuy);
-            } else if (firstSOS != -1) {
-                markerSequence.add(firstSOS, newGuy);
-            } else {
-                markerSequence.add(newGuy);
-            }
-        }
-    }
-
-    /**
-     * Merge the given DRI node into the marker sequence.
-     * If there already exists a DRI marker segment, the restart interval
-     * value is updated.
-     * If there is no DRI segment, then a new one is created and added as
-     * follows:
-     * If there is an SOF segment, the new DRI segment is inserted before
-     * it.
-     * If there is no SOF segment, the new DRI segment is inserted before
-     * the first SOS segment, if there is one.
-     * If there is no SOS segment, the new DRI segment is added to the end
-     * of the sequence.
-     */
-    private void mergeDRINode(Node node) throws IIOInvalidTreeException {
-        DRIMarkerSegment dri =
-            (DRIMarkerSegment) findMarkerSegment(DRIMarkerSegment.class, true);
-        if (dri != null) {
-            dri.updateFromNativeNode(node, false);
-        } else {
-            DRIMarkerSegment newGuy = new DRIMarkerSegment(node);
-            int firstSOF = findMarkerSegmentPosition(SOFMarkerSegment.class, true);
-            int firstSOS = findMarkerSegmentPosition(SOSMarkerSegment.class, true);
-            if (firstSOF != -1) {
-                markerSequence.add(firstSOF, newGuy);
-            } else if (firstSOS != -1) {
-                markerSequence.add(firstSOS, newGuy);
-            } else {
-                markerSequence.add(newGuy);
-            }
-        }
-    }
-
-    /**
-     * Merge the given COM node into the marker sequence.
-     * A new COM marker segment is created and added to the sequence
-     * using insertCOMMarkerSegment.
-     */
-    private void mergeCOMNode(Node node) throws IIOInvalidTreeException {
-        COMMarkerSegment newGuy = new COMMarkerSegment(node);
-        insertCOMMarkerSegment(newGuy);
-    }
-
-     /**
-      * Insert a new COM marker segment into an appropriate place in the
-      * marker sequence, as follows:
-      * If there already exist COM marker segments, the new one is inserted
-      * after the last one.
-      * If there are no COM segments, the new COM segment is inserted after the
-      * JFIF segment, if there is one.
-      * If there is no JFIF segment, the new COM segment is inserted after the
-      * Adobe marker segment, if there is one.
-      * If there is no Adobe segment, the new COM segment is inserted
-      * at the beginning of the sequence.
-      */
-    private void insertCOMMarkerSegment(COMMarkerSegment newGuy) {
-        int lastCOM = findMarkerSegmentPosition(COMMarkerSegment.class, false);
-        boolean hasJFIF = (findMarkerSegment(JFIFMarkerSegment.class, true) != null);
-        int firstAdobe = findMarkerSegmentPosition(AdobeMarkerSegment.class, true);
-        if (lastCOM != -1) {
-            markerSequence.add(lastCOM+1, newGuy);
-        } else if (hasJFIF) {
-            markerSequence.add(1, newGuy);  // JFIF is always 0
-        } else if (firstAdobe != -1) {
-            markerSequence.add(firstAdobe+1, newGuy);
-        } else {
-            markerSequence.add(0, newGuy);
-        }
-    }
-
-    /**
-     * Merge the given Adobe APP14 node into the marker sequence.
-     * If there already exists an Adobe marker segment, then its attributes
-     * are updated from the node.
-     * If there is no Adobe segment, then a new one is created and added
-     * using insertAdobeMarkerSegment.
-     */
-    private void mergeAdobeNode(Node node) throws IIOInvalidTreeException {
-        AdobeMarkerSegment adobe =
-            (AdobeMarkerSegment) findMarkerSegment(AdobeMarkerSegment.class, true);
-        if (adobe != null) {
-            adobe.updateFromNativeNode(node, false);
-        } else {
-            AdobeMarkerSegment newGuy = new AdobeMarkerSegment(node);
-            insertAdobeMarkerSegment(newGuy);
-        }
-    }
-
-    /**
-     * Insert the given AdobeMarkerSegment into the marker sequence, as
-     * follows (we assume there is no Adobe segment yet):
-     * If there is a JFIF segment, then the new Adobe segment is inserted
-     * after it.
-     * If there is no JFIF segment, the new Adobe segment is inserted after the
-     * last Unknown segment, if there are any.
-     * If there are no Unknown segments, the new Adobe segment is inserted
-     * at the beginning of the sequence.
-     */
-    private void insertAdobeMarkerSegment(AdobeMarkerSegment newGuy) {
-        boolean hasJFIF =
-            (findMarkerSegment(JFIFMarkerSegment.class, true) != null);
-        int lastUnknown = findLastUnknownMarkerSegmentPosition();
-        if (hasJFIF) {
-            markerSequence.add(1, newGuy);  // JFIF is always 0
-        } else if (lastUnknown != -1) {
-            markerSequence.add(lastUnknown+1, newGuy);
-        } else {
-            markerSequence.add(0, newGuy);
-        }
-    }
-
-    /**
-     * Merge the given Unknown node into the marker sequence.
-     * A new Unknown marker segment is created and added to the sequence as
-     * follows:
-     * If there already exist Unknown marker segments, the new one is inserted
-     * after the last one.
-     * If there are no Unknown marker segments, the new Unknown marker segment
-     * is inserted after the JFIF segment, if there is one.
-     * If there is no JFIF segment, the new Unknown segment is inserted before
-     * the Adobe marker segment, if there is one.
-     * If there is no Adobe segment, the new Unknown segment is inserted
-     * at the beginning of the sequence.
-     */
-    private void mergeUnknownNode(Node node) throws IIOInvalidTreeException {
-        MarkerSegment newGuy = new MarkerSegment(node);
-        int lastUnknown = findLastUnknownMarkerSegmentPosition();
-        boolean hasJFIF = (findMarkerSegment(JFIFMarkerSegment.class, true) != null);
-        int firstAdobe = findMarkerSegmentPosition(AdobeMarkerSegment.class, true);
-        if (lastUnknown != -1) {
-            markerSequence.add(lastUnknown+1, newGuy);
-        } else if (hasJFIF) {
-            markerSequence.add(1, newGuy);  // JFIF is always 0
-        } if (firstAdobe != -1) {
-            markerSequence.add(firstAdobe, newGuy);
-        } else {
-            markerSequence.add(0, newGuy);
-        }
-    }
-
-    /**
-     * Merge the given SOF node into the marker sequence.
-     * If there already exists an SOF marker segment in the sequence, then
-     * its values are updated from the node.
-     * If there is no SOF segment, then a new one is created and added as
-     * follows:
-     * If there are any SOS segments, the new SOF segment is inserted before
-     * the first one.
-     * If there is no SOS segment, the new SOF segment is added to the end
-     * of the sequence.
-     *
-     */
-    private void mergeSOFNode(Node node) throws IIOInvalidTreeException {
-        SOFMarkerSegment sof =
-            (SOFMarkerSegment) findMarkerSegment(SOFMarkerSegment.class, true);
-        if (sof != null) {
-            sof.updateFromNativeNode(node, false);
-        } else {
-            SOFMarkerSegment newGuy = new SOFMarkerSegment(node);
-            int firstSOS = findMarkerSegmentPosition(SOSMarkerSegment.class, true);
-            if (firstSOS != -1) {
-                markerSequence.add(firstSOS, newGuy);
-            } else {
-                markerSequence.add(newGuy);
-            }
-        }
-    }
-
-    /**
-     * Merge the given SOS node into the marker sequence.
-     * If there already exists a single SOS marker segment, then the values
-     * are updated from the node.
-     * If there are more than one existing SOS marker segments, then an
-     * IIOInvalidTreeException is thrown, as SOS segments cannot be merged
-     * into a set of progressive scans.
-     * If there are no SOS marker segments, a new one is created and added
-     * to the end of the sequence.
-     */
-    private void mergeSOSNode(Node node) throws IIOInvalidTreeException {
-        SOSMarkerSegment firstSOS =
-            (SOSMarkerSegment) findMarkerSegment(SOSMarkerSegment.class, true);
-        SOSMarkerSegment lastSOS =
-            (SOSMarkerSegment) findMarkerSegment(SOSMarkerSegment.class, false);
-        if (firstSOS != null) {
-            if (firstSOS != lastSOS) {
-                throw new IIOInvalidTreeException
-                    ("Can't merge SOS node into a tree with > 1 SOS node", node);
-            }
-            firstSOS.updateFromNativeNode(node, false);
-        } else {
-            markerSequence.add(new SOSMarkerSegment(node));
-        }
-    }
-
-    private boolean transparencyDone;
-
-    private void mergeStandardTree(Node root) throws IIOInvalidTreeException {
-        transparencyDone = false;
-        NodeList children = root.getChildNodes();
-        for (int i = 0; i < children.getLength(); i++) {
-            Node node = children.item(i);
-            String name = node.getNodeName();
-            if (name.equals("Chroma")) {
-                mergeStandardChromaNode(node, children);
-            } else if (name.equals("Compression")) {
-                mergeStandardCompressionNode(node);
-            } else if (name.equals("Data")) {
-                mergeStandardDataNode(node);
-            } else if (name.equals("Dimension")) {
-                mergeStandardDimensionNode(node);
-            } else if (name.equals("Document")) {
-                mergeStandardDocumentNode(node);
-            } else if (name.equals("Text")) {
-                mergeStandardTextNode(node);
-            } else if (name.equals("Transparency")) {
-                mergeStandardTransparencyNode(node);
-            } else {
-                throw new IIOInvalidTreeException("Invalid node: " + name, node);
-            }
-        }
-    }
-
-    /*
-     * In general, it could be possible to convert all non-pixel data to some
-     * textual form and include it in comments, but then this would create the
-     * expectation that these comment forms be recognized by the reader, thus
-     * creating a defacto extension to JPEG metadata capabilities.  This is
-     * probably best avoided, so the following convert only text nodes to
-     * comments, and lose the keywords as well.
-     */
-
-    private void mergeStandardChromaNode(Node node, NodeList siblings)
-        throws IIOInvalidTreeException {
-        // ColorSpaceType can change the target colorspace for compression
-        // This must take any transparency node into account as well, as
-        // that affects the number of channels (if alpha is present).  If
-        // a transparency node is dealt with here, set a flag to indicate
-        // this to the transparency processor below.  If we discover that
-        // the nodes are not in order, throw an exception as the tree is
-        // invalid.
-
-        if (transparencyDone) {
-            throw new IIOInvalidTreeException
-                ("Transparency node must follow Chroma node", node);
-        }
-
-        Node csType = node.getFirstChild();
-        if ((csType == null) || !csType.getNodeName().equals("ColorSpaceType")) {
-            // If there is no ColorSpaceType node, we have nothing to do
-            return;
-        }
-
-        String csName = csType.getAttributes().getNamedItem("name").getNodeValue();
-
-        int numChannels = 0;
-        boolean wantJFIF = false;
-        boolean wantAdobe = false;
-        int transform = 0;
-        boolean willSubsample = false;
-        byte [] ids = {1, 2, 3, 4};  // JFIF compatible
-        if (csName.equals("GRAY")) {
-            numChannels = 1;
-            wantJFIF = true;
-        } else if (csName.equals("YCbCr")) {
-            numChannels = 3;
-            wantJFIF = true;
-            willSubsample = true;
-        } else if (csName.equals("PhotoYCC")) {
-            numChannels = 3;
-            wantAdobe = true;
-            transform = JPEG.ADOBE_YCC;
-            ids[0] = (byte) 'Y';
-            ids[1] = (byte) 'C';
-            ids[2] = (byte) 'c';
-        } else if (csName.equals("RGB")) {
-            numChannels = 3;
-            wantAdobe = true;
-            transform = JPEG.ADOBE_UNKNOWN;
-            ids[0] = (byte) 'R';
-            ids[1] = (byte) 'G';
-            ids[2] = (byte) 'B';
-        } else if ((csName.equals("XYZ"))
-                   || (csName.equals("Lab"))
-                   || (csName.equals("Luv"))
-                   || (csName.equals("YxY"))
-                   || (csName.equals("HSV"))
-                   || (csName.equals("HLS"))
-                   || (csName.equals("CMY"))
-                   || (csName.equals("3CLR"))) {
-            numChannels = 3;
-        } else if (csName.equals("YCCK")) {
-            numChannels = 4;
-            wantAdobe = true;
-            transform = JPEG.ADOBE_YCCK;
-            willSubsample = true;
-        } else if (csName.equals("CMYK")) {
-            numChannels = 4;
-            wantAdobe = true;
-            transform = JPEG.ADOBE_UNKNOWN;
-        } else if (csName.equals("4CLR")) {
-            numChannels = 4;
-        } else { // We can't handle them, so don't modify any metadata
-            return;
-        }
-
-        boolean wantAlpha = false;
-        for (int i = 0; i < siblings.getLength(); i++) {
-            Node trans = siblings.item(i);
-            if (trans.getNodeName().equals("Transparency")) {
-                wantAlpha = wantAlpha(trans);
-                break;  // out of for
-            }
-        }
-
-        if (wantAlpha) {
-            numChannels++;
-            wantJFIF = false;
-            if (ids[0] == (byte) 'R') {
-                ids[3] = (byte) 'A';
-                wantAdobe = false;
-            }
-        }
-
-        JFIFMarkerSegment jfif =
-            (JFIFMarkerSegment) findMarkerSegment(JFIFMarkerSegment.class, true);
-        AdobeMarkerSegment adobe =
-            (AdobeMarkerSegment) findMarkerSegment(AdobeMarkerSegment.class, true);
-        SOFMarkerSegment sof =
-            (SOFMarkerSegment) findMarkerSegment(SOFMarkerSegment.class, true);
-        SOSMarkerSegment sos =
-            (SOSMarkerSegment) findMarkerSegment(SOSMarkerSegment.class, true);
-
-        // If the metadata specifies progressive, then the number of channels
-        // must match, so that we can modify all the existing SOS marker segments.
-        // If they don't match, we don't know what to do with SOS so we can't do
-        // the merge.  We then just return silently.
-        // An exception would not be appropriate.  A warning might, but we have
-        // nowhere to send it to.
-        if ((sof != null) && (sof.tag == JPEG.SOF2)) { // Progressive
-            if ((sof.componentSpecs.length != numChannels) && (sos != null)) {
-                return;
-            }
-        }
-
-        // JFIF header might be removed
-        if (!wantJFIF && (jfif != null)) {
-            markerSequence.remove(jfif);
-        }
-
-        // Now add a JFIF if we do want one, but only if it isn't stream metadata
-        if (wantJFIF && !isStream) {
-            markerSequence.add(0, new JFIFMarkerSegment());
-        }
-
-        // Adobe header might be removed or the transform modified, if it isn't
-        // stream metadata
-        if (wantAdobe) {
-            if ((adobe == null) && !isStream) {
-                adobe = new AdobeMarkerSegment(transform);
-                insertAdobeMarkerSegment(adobe);
-            } else {
-                adobe.transform = transform;
-            }
-        } else if (adobe != null) {
-            markerSequence.remove(adobe);
-        }
-
-        boolean updateQtables = false;
-        boolean updateHtables = false;
-
-        boolean progressive = false;
-
-        int [] subsampledSelectors = {0, 1, 1, 0 } ;
-        int [] nonSubsampledSelectors = { 0, 0, 0, 0};
-
-        int [] newTableSelectors = willSubsample
-                                   ? subsampledSelectors
-                                   : nonSubsampledSelectors;
-
-        // Keep the old componentSpecs array
-        SOFMarkerSegment.ComponentSpec [] oldCompSpecs = null;
-        // SOF might be modified
-        if (sof != null) {
-            oldCompSpecs = sof.componentSpecs;
-            progressive = (sof.tag == JPEG.SOF2);
-            // Now replace the SOF with a new one; it might be the same, but
-            // this is easier.
-            markerSequence.set(markerSequence.indexOf(sof),
-                               new SOFMarkerSegment(progressive,
-                                                    false, // we never need extended
-                                                    willSubsample,
-                                                    ids,
-                                                    numChannels));
-
-            // Now suss out if subsampling changed and set the boolean for
-            // updating the q tables
-            // if the old componentSpec q table selectors don't match
-            // the new ones, update the qtables.  The new selectors are already
-            // in place in the new SOF segment above.
-            for (int i = 0; i < oldCompSpecs.length; i++) {
-                if (oldCompSpecs[i].QtableSelector != newTableSelectors[i]) {
-                    updateQtables = true;
-                }
-            }
-
-            if (progressive) {
-                // if the component ids are different, update all the existing scans
-                // ignore Huffman tables
-                boolean idsDiffer = false;
-                for (int i = 0; i < oldCompSpecs.length; i++) {
-                    if (ids[i] != oldCompSpecs[i].componentId) {
-                        idsDiffer = true;
-                    }
-                }
-                if (idsDiffer) {
-                    // update the ids in each SOS marker segment
-                    for (Iterator iter = markerSequence.iterator(); iter.hasNext();) {
-                        MarkerSegment seg = (MarkerSegment) iter.next();
-                        if (seg instanceof SOSMarkerSegment) {
-                            SOSMarkerSegment target = (SOSMarkerSegment) seg;
-                            for (int i = 0; i < target.componentSpecs.length; i++) {
-                                int oldSelector =
-                                    target.componentSpecs[i].componentSelector;
-                                // Find the position in the old componentSpecs array
-                                // of the old component with the old selector
-                                // and replace the component selector with the
-                                // new id at the same position, as these match
-                                // the new component specs array in the SOF created
-                                // above.
-                                for (int j = 0; j < oldCompSpecs.length; j++) {
-                                    if (oldCompSpecs[j].componentId == oldSelector) {
-                                        target.componentSpecs[i].componentSelector =
-                                            ids[j];
-                                    }
-                                }
-                            }
-                        }
-                    }
-                }
-            } else {
-                if (sos != null) {
-                    // htables - if the old htable selectors don't match the new ones,
-                    // update the tables.
-                    for (int i = 0; i < sos.componentSpecs.length; i++) {
-                        if ((sos.componentSpecs[i].dcHuffTable
-                             != newTableSelectors[i])
-                            || (sos.componentSpecs[i].acHuffTable
-                                != newTableSelectors[i])) {
-                            updateHtables = true;
-                        }
-                    }
-
-                    // Might be the same as the old one, but this is easier.
-                    markerSequence.set(markerSequence.indexOf(sos),
-                               new SOSMarkerSegment(willSubsample,
-                                                    ids,
-                                                    numChannels));
-                }
-            }
-        } else {
-            // should be stream metadata if there isn't an SOF, but check it anyway
-            if (isStream) {
-                // update tables - routines below check if it's really necessary
-                updateQtables = true;
-                updateHtables = true;
-            }
-        }
-
-        if (updateQtables) {
-            List tableSegments = new ArrayList();
-            for (Iterator iter = markerSequence.iterator(); iter.hasNext();) {
-                MarkerSegment seg = (MarkerSegment) iter.next();
-                if (seg instanceof DQTMarkerSegment) {
-                    tableSegments.add(seg);
-                }
-            }
-            // If there are no tables, don't add them, as the metadata encodes an
-            // abbreviated stream.
-            // If we are not subsampling, we just need one, so don't do anything
-            if (!tableSegments.isEmpty() && willSubsample) {
-                // Is it really necessary?  There should be at least 2 tables.
-                // If there is only one, assume it's a scaled "standard"
-                // luminance table, extract the scaling factor, and generate a
-                // scaled "standard" chrominance table.
-
-                // Find the table with selector 1.
-                boolean found = false;
-                for (Iterator iter = tableSegments.iterator(); iter.hasNext();) {
-                    DQTMarkerSegment testdqt = (DQTMarkerSegment) iter.next();
-                    for (Iterator tabiter = testdqt.tables.iterator();
-                         tabiter.hasNext();) {
-                        DQTMarkerSegment.Qtable tab =
-                            (DQTMarkerSegment.Qtable) tabiter.next();
-                        if (tab.tableID == 1) {
-                            found = true;
-                        }
-                    }
-                }
-                if (!found) {
-                    //    find the table with selector 0.  There should be one.
-                    DQTMarkerSegment.Qtable table0 = null;
-                    for (Iterator iter = tableSegments.iterator(); iter.hasNext();) {
-                        DQTMarkerSegment testdqt = (DQTMarkerSegment) iter.next();
-                        for (Iterator tabiter = testdqt.tables.iterator();
-                             tabiter.hasNext();) {
-                            DQTMarkerSegment.Qtable tab =
-                                (DQTMarkerSegment.Qtable) tabiter.next();
-                            if (tab.tableID == 0) {
-                                table0 = tab;
-                            }
-                        }
-                    }
-
-                    // Assuming that the table with id 0 is a luminance table,
-                    // compute a new chrominance table of the same quality and
-                    // add it to the last DQT segment
-                    DQTMarkerSegment dqt =
-                        (DQTMarkerSegment) tableSegments.get(tableSegments.size()-1);
-                    dqt.tables.add(dqt.getChromaForLuma(table0));
-                }
-            }
-        }
-
-        if (updateHtables) {
-            List tableSegments = new ArrayList();
-            for (Iterator iter = markerSequence.iterator(); iter.hasNext();) {
-                MarkerSegment seg = (MarkerSegment) iter.next();
-                if (seg instanceof DHTMarkerSegment) {
-                    tableSegments.add(seg);
-                }
-            }
-            // If there are no tables, don't add them, as the metadata encodes an
-            // abbreviated stream.
-            // If we are not subsampling, we just need one, so don't do anything
-            if (!tableSegments.isEmpty() && willSubsample) {
-                // Is it really necessary?  There should be at least 2 dc and 2 ac
-                // tables.  If there is only one, add a
-                // "standard " chrominance table.
-
-                // find a table with selector 1. AC/DC is irrelevant
-                boolean found = false;
-                for (Iterator iter = tableSegments.iterator(); iter.hasNext();) {
-                    DHTMarkerSegment testdht = (DHTMarkerSegment) iter.next();
-                    for (Iterator tabiter = testdht.tables.iterator();
-                         tabiter.hasNext();) {
-                        DHTMarkerSegment.Htable tab =
-                            (DHTMarkerSegment.Htable) tabiter.next();
-                        if (tab.tableID == 1) {
-                            found = true;
-                        }
-                    }
-                }
-                if (!found) {
-                    // Create new standard dc and ac chrominance tables and add them
-                    // to the last DHT segment
-                    DHTMarkerSegment lastDHT =
-                        (DHTMarkerSegment) tableSegments.get(tableSegments.size()-1);
-                    lastDHT.addHtable(JPEGHuffmanTable.StdDCLuminance, true, 1);
-                    lastDHT.addHtable(JPEGHuffmanTable.StdACLuminance, true, 1);
-                }
-            }
-        }
-    }
-
-    private boolean wantAlpha(Node transparency) {
-        boolean returnValue = false;
-        Node alpha = transparency.getFirstChild();  // Alpha must be first if present
-        if (alpha.getNodeName().equals("Alpha")) {
-            if (alpha.hasAttributes()) {
-                String value =
-                    alpha.getAttributes().getNamedItem("value").getNodeValue();
-                if (!value.equals("none")) {
-                    returnValue = true;
-                }
-            }
-        }
-        transparencyDone = true;
-        return returnValue;
-    }
-
-    private void mergeStandardCompressionNode(Node node)
-        throws IIOInvalidTreeException {
-        // NumProgressiveScans is ignored.  Progression must be enabled on the
-        // ImageWriteParam.
-        // No-op
-    }
-
-    private void mergeStandardDataNode(Node node)
-        throws IIOInvalidTreeException {
-        // No-op
-    }
-
-    private void mergeStandardDimensionNode(Node node)
-        throws IIOInvalidTreeException {
-        // Pixel Aspect Ratio or pixel size can be incorporated if there is,
-        // or can be, a JFIF segment
-        JFIFMarkerSegment jfif =
-            (JFIFMarkerSegment) findMarkerSegment(JFIFMarkerSegment.class, true);
-        if (jfif == null) {
-            // Can there be one?
-            // Criteria:
-            // SOF must be present with 1 or 3 channels, (stream metadata fails this)
-            //     Component ids must be JFIF compatible.
-            boolean canHaveJFIF = false;
-            SOFMarkerSegment sof =
-                (SOFMarkerSegment) findMarkerSegment(SOFMarkerSegment.class, true);
-            if (sof != null) {
-                int numChannels = sof.componentSpecs.length;
-                if ((numChannels == 1) || (numChannels == 3)) {
-                    canHaveJFIF = true; // remaining tests are negative
-                    for (int i = 0; i < sof.componentSpecs.length; i++) {
-                        if (sof.componentSpecs[i].componentId != i+1)
-                            canHaveJFIF = false;
-                    }
-                    // if Adobe present, transform = ADOBE_UNKNOWN for 1-channel,
-                    //     ADOBE_YCC for 3-channel.
-                    AdobeMarkerSegment adobe =
-                        (AdobeMarkerSegment) findMarkerSegment(AdobeMarkerSegment.class,
-                                                               true);
-                    if (adobe != null) {
-                        if (adobe.transform != ((numChannels == 1)
-                                                ? JPEG.ADOBE_UNKNOWN
-                                                : JPEG.ADOBE_YCC)) {
-                            canHaveJFIF = false;
-                        }
-                    }
-                }
-            }
-            // If so, create one and insert it into the sequence.  Note that
-            // default is just pixel ratio at 1:1
-            if (canHaveJFIF) {
-                jfif = new JFIFMarkerSegment();
-                markerSequence.add(0, jfif);
-            }
-        }
-        if (jfif != null) {
-            NodeList children = node.getChildNodes();
-            for (int i = 0; i < children.getLength(); i++) {
-                Node child = children.item(i);
-                NamedNodeMap attrs = child.getAttributes();
-                String name = child.getNodeName();
-                if (name.equals("PixelAspectRatio")) {
-                    String valueString = attrs.getNamedItem("value").getNodeValue();
-                    float value = Float.parseFloat(valueString);
-                    Point p = findIntegerRatio(value);
-                    jfif.resUnits = JPEG.DENSITY_UNIT_ASPECT_RATIO;
-                    jfif.Xdensity = p.x;
-                    jfif.Xdensity = p.y;
-                } else if (name.equals("HorizontalPixelSize")) {
-                    String valueString = attrs.getNamedItem("value").getNodeValue();
-                    float value = Float.parseFloat(valueString);
-                    // Convert from mm/dot to dots/cm
-                    int dpcm = (int) Math.round(1.0/(value*10.0));
-                    jfif.resUnits = JPEG.DENSITY_UNIT_DOTS_CM;
-                    jfif.Xdensity = dpcm;
-                } else if (name.equals("VerticalPixelSize")) {
-                    String valueString = attrs.getNamedItem("value").getNodeValue();
-                    float value = Float.parseFloat(valueString);
-                    // Convert from mm/dot to dots/cm
-                    int dpcm = (int) Math.round(1.0/(value*10.0));
-                    jfif.resUnits = JPEG.DENSITY_UNIT_DOTS_CM;
-                    jfif.Ydensity = dpcm;
-                }
-
-            }
-        }
-    }
-
-    /*
-     * Return a pair of integers whose ratio (x/y) approximates the given
-     * float value.
-     */
-    private static Point findIntegerRatio(float value) {
-        float epsilon = 0.005F;
-
-        // Normalize
-        value = Math.abs(value);
-
-        // Deal with min case
-        if (value <= epsilon) {
-            return new Point(1, 255);
-        }
-
-        // Deal with max case
-        if (value >= 255) {
-            return new Point(255, 1);
-        }
-
-        // Remember if we invert
-        boolean inverted = false;
-        if (value < 1.0) {
-            value = 1.0F/value;
-            inverted = true;
-        }
-
-        // First approximation
-        int y = 1;
-        int x = (int) Math.round(value);
-
-        float ratio = (float) x;
-        float delta = Math.abs(value - ratio);
-        while (delta > epsilon) { // not close enough
-            // Increment y and compute a new x
-            y++;
-            x = (int) Math.round(y*value);
-            ratio = (float)x/(float)y;
-            delta = Math.abs(value - ratio);
-        }
-        return inverted ? new Point(y, x) : new Point(x, y);
-    }
-
-    private void mergeStandardDocumentNode(Node node)
-        throws IIOInvalidTreeException {
-        // No-op
-    }
-
-    private void mergeStandardTextNode(Node node)
-        throws IIOInvalidTreeException {
-        // Convert to comments.  For the moment ignore the encoding issue.
-        // Ignore keywords, language, and encoding (for the moment).
-        // If compression tag is present, use only entries with "none".
-        NodeList children = node.getChildNodes();
-        for (int i = 0; i < children.getLength(); i++) {
-            Node child = children.item(i);
-            NamedNodeMap attrs = child.getAttributes();
-            Node comp = attrs.getNamedItem("compression");
-            boolean copyIt = true;
-            if (comp != null) {
-                String compString = comp.getNodeValue();
-                if (!compString.equals("none")) {
-                    copyIt = false;
-                }
-            }
-            if (copyIt) {
-                String value = attrs.getNamedItem("value").getNodeValue();
-                COMMarkerSegment com = new COMMarkerSegment(value);
-                insertCOMMarkerSegment(com);
-            }
-        }
-    }
-
-    private void mergeStandardTransparencyNode(Node node)
-        throws IIOInvalidTreeException {
-        // This might indicate that an alpha channel is being added or removed.
-        // The nodes must appear in order, and a Chroma node will process any
-        // transparency, so process it here only if there was no Chroma node
-        // Do nothing for stream metadata
-        if (!transparencyDone && !isStream) {
-            boolean wantAlpha = wantAlpha(node);
-            // do we have alpha already?  If the number of channels is 2 or 4,
-            // we do, as we don't support CMYK, nor can we add alpha to it
-            // The number of channels can be determined from the SOF
-            JFIFMarkerSegment jfif = (JFIFMarkerSegment) findMarkerSegment
-                (JFIFMarkerSegment.class, true);
-            AdobeMarkerSegment adobe = (AdobeMarkerSegment) findMarkerSegment
-                (AdobeMarkerSegment.class, true);
-            SOFMarkerSegment sof = (SOFMarkerSegment) findMarkerSegment
-                (SOFMarkerSegment.class, true);
-            SOSMarkerSegment sos = (SOSMarkerSegment) findMarkerSegment
-                (SOSMarkerSegment.class, true);
-
-            // We can do nothing for progressive, as we don't know how to
-            // modify the scans.
-            if ((sof != null) && (sof.tag == JPEG.SOF2)) { // Progressive
-                return;
-            }
-
-            // Do we already have alpha?  We can tell by the number of channels
-            // We must have an sof, or we can't do anything further
-            if (sof != null) {
-                int numChannels = sof.componentSpecs.length;
-                boolean hadAlpha = (numChannels == 2) || (numChannels == 4);
-                // proceed only if the old state and the new state differ
-                if (hadAlpha != wantAlpha) {
-                    if (wantAlpha) {  // Adding alpha
-                        numChannels++;
-                        if (jfif != null) {
-                            markerSequence.remove(jfif);
-                        }
-
-                        // If an adobe marker is present, transform must be UNKNOWN
-                        if (adobe != null) {
-                            adobe.transform = JPEG.ADOBE_UNKNOWN;
-                        }
-
-                        // Add a component spec with appropriate parameters to SOF
-                        SOFMarkerSegment.ComponentSpec [] newSpecs =
-                            new SOFMarkerSegment.ComponentSpec[numChannels];
-                        for (int i = 0; i < sof.componentSpecs.length; i++) {
-                            newSpecs[i] = sof.componentSpecs[i];
-                        }
-                        byte oldFirstID = (byte) sof.componentSpecs[0].componentId;
-                        byte newID = (byte) ((oldFirstID > 1) ? 'A' : 4);
-                        newSpecs[numChannels-1] =
-                            sof.getComponentSpec(newID,
-                                sof.componentSpecs[0].HsamplingFactor,
-                                sof.componentSpecs[0].QtableSelector);
-
-                        sof.componentSpecs = newSpecs;
-
-                        // Add a component spec with appropriate parameters to SOS
-                        SOSMarkerSegment.ScanComponentSpec [] newScanSpecs =
-                            new SOSMarkerSegment.ScanComponentSpec [numChannels];
-                        for (int i = 0; i < sos.componentSpecs.length; i++) {
-                            newScanSpecs[i] = sos.componentSpecs[i];
-                        }
-                        newScanSpecs[numChannels-1] =
-                            sos.getScanComponentSpec (newID, 0);
-                        sos.componentSpecs = newScanSpecs;
-                    } else {  // Removing alpha
-                        numChannels--;
-                        // Remove a component spec from SOF
-                        SOFMarkerSegment.ComponentSpec [] newSpecs =
-                            new SOFMarkerSegment.ComponentSpec[numChannels];
-                        for (int i = 0; i < numChannels; i++) {
-                            newSpecs[i] = sof.componentSpecs[i];
-                        }
-                        sof.componentSpecs = newSpecs;
-
-                        // Remove a component spec from SOS
-                        SOSMarkerSegment.ScanComponentSpec [] newScanSpecs =
-                            new SOSMarkerSegment.ScanComponentSpec [numChannels];
-                        for (int i = 0; i < numChannels; i++) {
-                            newScanSpecs[i] = sos.componentSpecs[i];
-                        }
-                        sos.componentSpecs = newScanSpecs;
-                    }
-                }
-            }
-        }
-    }
-
-
-    public void setFromTree(String formatName, Node root)
-        throws IIOInvalidTreeException {
-        if (formatName == null) {
-            throw new IllegalArgumentException("null formatName!");
-        }
-        if (root == null) {
-            throw new IllegalArgumentException("null root!");
-        }
-        if (isStream &&
-            (formatName.equals(JPEG.nativeStreamMetadataFormatName))) {
-            setFromNativeTree(root);
-        } else if (!isStream &&
-                   (formatName.equals(JPEG.nativeImageMetadataFormatName))) {
-            setFromNativeTree(root);
-        } else if (!isStream &&
-                   (formatName.equals
-                    (IIOMetadataFormatImpl.standardMetadataFormatName))) {
-            // In this case a reset followed by a merge is correct
-            super.setFromTree(formatName, root);
-        } else {
-            throw  new IllegalArgumentException("Unsupported format name: "
-                                                + formatName);
-        }
-    }
-
-    private void setFromNativeTree(Node root) throws IIOInvalidTreeException {
-        if (resetSequence == null) {
-            resetSequence = markerSequence;
-        }
-        markerSequence = new ArrayList();
-
-        // Build a whole new marker sequence from the tree
-
-        String name = root.getNodeName();
-        if (name != ((isStream) ? JPEG.nativeStreamMetadataFormatName
-                                : JPEG.nativeImageMetadataFormatName)) {
-            throw new IIOInvalidTreeException("Invalid root node name: " + name,
-                                              root);
-        }
-        if (!isStream) {
-            if (root.getChildNodes().getLength() != 2) { // JPEGvariety and markerSequence
-                throw new IIOInvalidTreeException(
-                    "JPEGvariety and markerSequence nodes must be present", root);
-            }
-
-            Node JPEGvariety = root.getFirstChild();
-
-            if (JPEGvariety.getChildNodes().getLength() != 0) {
-                markerSequence.add(new JFIFMarkerSegment(JPEGvariety.getFirstChild()));
-            }
-        }
-
-        Node markerSequenceNode = isStream ? root : root.getLastChild();
-        setFromMarkerSequenceNode(markerSequenceNode);
-
-    }
-
-    void setFromMarkerSequenceNode(Node markerSequenceNode)
-        throws IIOInvalidTreeException{
-
-        NodeList children = markerSequenceNode.getChildNodes();
-        // for all the children, add a marker segment
-        for (int i = 0; i < children.getLength(); i++) {
-            Node node = children.item(i);
-            String childName = node.getNodeName();
-            if (childName.equals("dqt")) {
-                markerSequence.add(new DQTMarkerSegment(node));
-            } else if (childName.equals("dht")) {
-                markerSequence.add(new DHTMarkerSegment(node));
-            } else if (childName.equals("dri")) {
-                markerSequence.add(new DRIMarkerSegment(node));
-            } else if (childName.equals("com")) {
-                markerSequence.add(new COMMarkerSegment(node));
-            } else if (childName.equals("app14Adobe")) {
-                markerSequence.add(new AdobeMarkerSegment(node));
-            } else if (childName.equals("unknown")) {
-                markerSequence.add(new MarkerSegment(node));
-            } else if (childName.equals("sof")) {
-                markerSequence.add(new SOFMarkerSegment(node));
-            } else if (childName.equals("sos")) {
-                markerSequence.add(new SOSMarkerSegment(node));
-            } else {
-                throw new IIOInvalidTreeException("Invalid "
-                    + (isStream ? "stream " : "image ") + "child: "
-                    + childName, node);
-            }
-        }
-    }
-
-    /**
-     * Check that this metadata object is in a consistent state and
-     * return <code>true</code> if it is or <code>false</code>
-     * otherwise.  All the constructors and modifiers should call
-     * this method at the end to guarantee that the data is always
-     * consistent, as the writer relies on this.
-     */
-    private boolean isConsistent() {
-        SOFMarkerSegment sof =
-            (SOFMarkerSegment) findMarkerSegment(SOFMarkerSegment.class,
-                                                 true);
-        JFIFMarkerSegment jfif =
-            (JFIFMarkerSegment) findMarkerSegment(JFIFMarkerSegment.class,
-                                                  true);
-        AdobeMarkerSegment adobe =
-            (AdobeMarkerSegment) findMarkerSegment(AdobeMarkerSegment.class,
-                                                   true);
-        boolean retval = true;
-        if (!isStream) {
-            if (sof != null) {
-                // SOF numBands = total scan bands
-                int numSOFBands = sof.componentSpecs.length;
-                int numScanBands = countScanBands();
-                if (numScanBands != 0) {  // No SOS is OK
-                    if (numScanBands != numSOFBands) {
-                        retval = false;
-                    }
-                }
-                // If JFIF is present, component ids are 1-3, bands are 1 or 3
-                if (jfif != null) {
-                    if ((numSOFBands != 1) && (numSOFBands != 3)) {
-                        retval = false;
-                    }
-                    for (int i = 0; i < numSOFBands; i++) {
-                        if (sof.componentSpecs[i].componentId != i+1) {
-                            retval = false;
-                        }
-                    }
-
-                    // If both JFIF and Adobe are present,
-                    // Adobe transform == unknown for gray,
-                    // YCC for 3-chan.
-                    if ((adobe != null)
-                        && (((numSOFBands == 1)
-                             && (adobe.transform != JPEG.ADOBE_UNKNOWN))
-                            || ((numSOFBands == 3)
-                                && (adobe.transform != JPEG.ADOBE_YCC)))) {
-                        retval = false;
-                    }
-                }
-            } else {
-                // stream can't have jfif, adobe, sof, or sos
-                SOSMarkerSegment sos =
-                    (SOSMarkerSegment) findMarkerSegment(SOSMarkerSegment.class,
-                                                         true);
-                if ((jfif != null) || (adobe != null)
-                    || (sof != null) || (sos != null)) {
-                    retval = false;
-                }
-            }
-        }
-        return retval;
-    }
-
-    /**
-     * Returns the total number of bands referenced in all SOS marker
-     * segments, including 0 if there are no SOS marker segments.
-     */
-    private int countScanBands() {
-        List ids = new ArrayList();
-        Iterator iter = markerSequence.iterator();
-        while(iter.hasNext()) {
-            MarkerSegment seg = (MarkerSegment)iter.next();
-            if (seg instanceof SOSMarkerSegment) {
-                SOSMarkerSegment sos = (SOSMarkerSegment) seg;
-                SOSMarkerSegment.ScanComponentSpec [] specs = sos.componentSpecs;
-                for (int i = 0; i < specs.length; i++) {
-                    Integer id = new Integer(specs[i].componentSelector);
-                    if (!ids.contains(id)) {
-                        ids.add(id);
-                    }
-                }
-            }
-        }
-
-        return ids.size();
-    }
-
-    ///// Writer support
-
-    void writeToStream(ImageOutputStream ios,
-                       boolean ignoreJFIF,
-                       boolean forceJFIF,
-                       List thumbnails,
-                       ICC_Profile iccProfile,
-                       boolean ignoreAdobe,
-                       int newAdobeTransform,
-                       JPEGImageWriter writer)
-        throws IOException {
-        if (forceJFIF) {
-            // Write a default JFIF segment, including thumbnails
-            // This won't be duplicated below because forceJFIF will be
-            // set only if there is no JFIF present already.
-            JFIFMarkerSegment.writeDefaultJFIF(ios,
-                                               thumbnails,
-                                               iccProfile,
-                                               writer);
-            if ((ignoreAdobe == false)
-                && (newAdobeTransform != JPEG.ADOBE_IMPOSSIBLE)) {
-                if ((newAdobeTransform != JPEG.ADOBE_UNKNOWN)
-                    && (newAdobeTransform != JPEG.ADOBE_YCC)) {
-                    // Not compatible, so ignore Adobe.
-                    ignoreAdobe = true;
-                    writer.warningOccurred
-                        (JPEGImageWriter.WARNING_METADATA_ADJUSTED_FOR_THUMB);
-                }
-            }
-        }
-        // Iterate over each MarkerSegment
-        Iterator iter = markerSequence.iterator();
-        while(iter.hasNext()) {
-            MarkerSegment seg = (MarkerSegment)iter.next();
-            if (seg instanceof JFIFMarkerSegment) {
-                if (ignoreJFIF == false) {
-                    JFIFMarkerSegment jfif = (JFIFMarkerSegment) seg;
-                    jfif.writeWithThumbs(ios, thumbnails, writer);
-                    if (iccProfile != null) {
-                        JFIFMarkerSegment.writeICC(iccProfile, ios);
-                    }
-                } // Otherwise ignore it, as requested
-            } else if (seg instanceof AdobeMarkerSegment) {
-                if (ignoreAdobe == false) {
-                    if (newAdobeTransform != JPEG.ADOBE_IMPOSSIBLE) {
-                        AdobeMarkerSegment newAdobe =
-                            (AdobeMarkerSegment) seg.clone();
-                        newAdobe.transform = newAdobeTransform;
-                        newAdobe.write(ios);
-                    } else if (forceJFIF) {
-                        // If adobe isn't JFIF compatible, ignore it
-                        AdobeMarkerSegment adobe = (AdobeMarkerSegment) seg;
-                        if ((adobe.transform == JPEG.ADOBE_UNKNOWN)
-                            || (adobe.transform == JPEG.ADOBE_YCC)) {
-                            adobe.write(ios);
-                        } else {
-                            writer.warningOccurred
-                         (JPEGImageWriter.WARNING_METADATA_ADJUSTED_FOR_THUMB);
-                        }
-                    } else {
-                        seg.write(ios);
-                    }
-                } // Otherwise ignore it, as requested
-            } else {
-                seg.write(ios);
-            }
-        }
-    }
-
-    //// End of writer support
-
-    public void reset() {
-        if (resetSequence != null) {  // Otherwise no need to reset
-            markerSequence = resetSequence;
-            resetSequence = null;
-        }
-    }
-
-    public void print() {
-        for (int i = 0; i < markerSequence.size(); i++) {
-            MarkerSegment seg = (MarkerSegment) markerSequence.get(i);
-            seg.print();
-        }
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/plugins/jpeg/JPEGMetadataFormat.java b/ojluni/src/main/java/com/sun/imageio/plugins/jpeg/JPEGMetadataFormat.java
deleted file mode 100755
index a7c1169..0000000
--- a/ojluni/src/main/java/com/sun/imageio/plugins/jpeg/JPEGMetadataFormat.java
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- * Copyright (c) 2001, 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.imageio.plugins.jpeg;
-
-import javax.imageio.metadata.IIOMetadataFormat;
-import javax.imageio.metadata.IIOMetadataFormatImpl;
-import javax.imageio.ImageTypeSpecifier;
-import javax.imageio.plugins.jpeg.JPEGQTable;
-import javax.imageio.plugins.jpeg.JPEGHuffmanTable;
-
-import java.util.List;
-import java.util.ArrayList;
-
-abstract class JPEGMetadataFormat extends IIOMetadataFormatImpl {
-    // 2-byte length reduces max to 65533
-    private static final int MAX_JPEG_DATA_SIZE = 65533;
-
-    String resourceBaseName = this.getClass().getName() + "Resources";
-
-    JPEGMetadataFormat(String formatName, int childPolicy) {
-        super(formatName, childPolicy);
-        setResourceBaseName(resourceBaseName);
-    }
-
-    // Format shared between image and stream formats
-    void addStreamElements(String parentName) {
-        addElement("dqt", parentName, 1, 4);
-
-        addElement("dqtable", "dqt", CHILD_POLICY_EMPTY);
-
-        addAttribute("dqtable",
-                     "elementPrecision",
-                     DATATYPE_INTEGER,
-                     false,
-                     "0");
-        List tabids = new ArrayList();
-        tabids.add("0");
-        tabids.add("1");
-        tabids.add("2");
-        tabids.add("3");
-        addAttribute("dqtable",
-                     "qtableId",
-                     DATATYPE_INTEGER,
-                     true,
-                     null,
-                     tabids);
-        addObjectValue("dqtable",
-                       JPEGQTable.class,
-                       true,
-                       null);
-
-        addElement("dht", parentName, 1, 4);
-        addElement("dhtable", "dht", CHILD_POLICY_EMPTY);
-        List classes = new ArrayList();
-        classes.add("0");
-        classes.add("1");
-        addAttribute("dhtable",
-                     "class",
-                     DATATYPE_INTEGER,
-                     true,
-                     null,
-                     classes);
-        addAttribute("dhtable",
-                     "htableId",
-                     DATATYPE_INTEGER,
-                     true,
-                     null,
-                     tabids);
-        addObjectValue("dhtable",
-                       JPEGHuffmanTable.class,
-                       true,
-                       null);
-
-
-        addElement("dri", parentName, CHILD_POLICY_EMPTY);
-        addAttribute("dri",
-                     "interval",
-                     DATATYPE_INTEGER,
-                     true,
-                     null,
-                     "0", "65535",
-                     true, true);
-
-        addElement("com", parentName, CHILD_POLICY_EMPTY);
-        addAttribute("com",
-                     "comment",
-                     DATATYPE_STRING,
-                     false,
-                     null);
-        addObjectValue("com", byte[].class, 1, MAX_JPEG_DATA_SIZE);
-
-        addElement("unknown", parentName, CHILD_POLICY_EMPTY);
-        addAttribute("unknown",
-                     "MarkerTag",
-                     DATATYPE_INTEGER,
-                     true,
-                     null,
-                     "0", "255",
-                     true, true);
-        addObjectValue("unknown", byte[].class, 1, MAX_JPEG_DATA_SIZE);
-    }
-
-    public boolean canNodeAppear(String elementName,
-                                 ImageTypeSpecifier imageType) {
-        // Just check if it appears in the format
-        if (isInSubtree(elementName, getRootName())){
-            return true;
-        }
-        return false;
-    }
-
-    /**
-     * Returns <code>true</code> if the named element occurs in the
-     * subtree of the format starting with the node named by
-     * <code>subtreeName</code>, including the node
-     * itself.  <code>subtreeName</code> may be any node in
-     * the format.  If it is not, an
-     * <code>IllegalArgumentException</code> is thrown.
-     */
-    protected boolean isInSubtree(String elementName,
-                                  String subtreeName) {
-        if (elementName.equals(subtreeName)) {
-            return true;
-        }
-        String [] children = getChildNames(elementName);
-        for (int i=0; i < children.length; i++) {
-            if (isInSubtree(elementName, children[i])) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/plugins/jpeg/JPEGMetadataFormatResources.java b/ojluni/src/main/java/com/sun/imageio/plugins/jpeg/JPEGMetadataFormatResources.java
deleted file mode 100755
index fb245e1..0000000
--- a/ojluni/src/main/java/com/sun/imageio/plugins/jpeg/JPEGMetadataFormatResources.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (c) 2001, 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.imageio.plugins.jpeg;
-
-import java.util.ListResourceBundle;
-
-abstract class JPEGMetadataFormatResources
-        extends ListResourceBundle {
-
-    static final Object[][] commonContents = {
-        // Node name, followed by description
-        { "dqt", "A Define Quantization Table(s) marker segment" },
-        { "dqtable", "A single quantization table" },
-        { "dht", "A Define Huffman Table(s) marker segment" },
-        { "dhtable", "A single Huffman table" },
-        { "dri", "A Define Restart Interval marker segment" },
-        { "com", "A Comment marker segment.  The user object contains "
-          + "the actual bytes."},
-        { "unknown", "An unrecognized marker segment.  The user object "
-          + "contains the data not including length." },
-
-        // Node name + "/" + AttributeName, followed by description
-        { "dqtable/elementPrecision",
-          "The number of bits in each table element (0 = 8, 1 = 16)" },
-        { "dgtable/qtableId",
-          "The table id" },
-        { "dhtable/class",
-          "Indicates whether this is a DC (0) or an AC (1) table" },
-        { "dhtable/htableId",
-          "The table id" },
-        { "dri/interval",
-          "The restart interval in MCUs" },
-        { "com/comment",
-          "The comment as a string (used only if user object is null)" },
-        { "unknown/MarkerTag",
-          "The tag identifying this marker segment" }
-    };
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/plugins/jpeg/JPEGStreamMetadataFormat.java b/ojluni/src/main/java/com/sun/imageio/plugins/jpeg/JPEGStreamMetadataFormat.java
deleted file mode 100755
index 1e21149..0000000
--- a/ojluni/src/main/java/com/sun/imageio/plugins/jpeg/JPEGStreamMetadataFormat.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 2001, 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.imageio.plugins.jpeg;
-
-import javax.imageio.metadata.IIOMetadataFormat;
-import javax.imageio.metadata.IIOMetadataFormatImpl;
-
-public class JPEGStreamMetadataFormat extends JPEGMetadataFormat {
-
-    private static JPEGStreamMetadataFormat theInstance = null;
-
-    private JPEGStreamMetadataFormat() {
-        super(JPEG.nativeStreamMetadataFormatName,
-              CHILD_POLICY_SEQUENCE);
-        addStreamElements(getRootName());
-    }
-
-    public static synchronized IIOMetadataFormat getInstance() {
-        if (theInstance == null) {
-            theInstance = new JPEGStreamMetadataFormat();
-        }
-        return theInstance;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/plugins/jpeg/JPEGStreamMetadataFormatResources.java b/ojluni/src/main/java/com/sun/imageio/plugins/jpeg/JPEGStreamMetadataFormatResources.java
deleted file mode 100755
index ea6d2b7..0000000
--- a/ojluni/src/main/java/com/sun/imageio/plugins/jpeg/JPEGStreamMetadataFormatResources.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (c) 2001, 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.
- */
-
-package com.sun.imageio.plugins.jpeg;
-
-import java.util.ListResourceBundle;
-
-public class JPEGStreamMetadataFormatResources
-       extends JPEGMetadataFormatResources {
-
-    public JPEGStreamMetadataFormatResources() {}
-
-    protected Object[][] getContents() {
-        // return a copy of commonContents; in theory we want a deep clone
-        // of commonContents, but since it only contains (immutable) Strings,
-        // this shallow copy is sufficient
-        Object[][] commonCopy = new Object[commonContents.length][2];
-        for (int i = 0; i < commonContents.length; i++) {
-            commonCopy[i][0] = commonContents[i][0];
-            commonCopy[i][1] = commonContents[i][1];
-        }
-        return commonCopy;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/plugins/jpeg/MarkerSegment.java b/ojluni/src/main/java/com/sun/imageio/plugins/jpeg/MarkerSegment.java
deleted file mode 100755
index fd8d1cd5..0000000
--- a/ojluni/src/main/java/com/sun/imageio/plugins/jpeg/MarkerSegment.java
+++ /dev/null
@@ -1,224 +0,0 @@
-/*
- * Copyright (c) 2001, 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.imageio.plugins.jpeg;
-
-import javax.imageio.metadata.IIOInvalidTreeException;
-import javax.imageio.metadata.IIOMetadataNode;
-import javax.imageio.stream.ImageOutputStream;
-
-import java.io.IOException;
-
-import org.w3c.dom.Node;
-import org.w3c.dom.NamedNodeMap;
-
-/**
- * All metadata is stored in MarkerSegments.  Marker segments
- * that we know about are stored in subclasses of this
- * basic class, which used for unrecognized APPn marker
- * segments.  XXX break out UnknownMarkerSegment as a subclass
- * and make this abstract, avoiding unused data field.
- */
-class MarkerSegment implements Cloneable {
-    protected static final int LENGTH_SIZE = 2; // length is 2 bytes
-    int tag;      // See JPEG.java
-    int length;    /* Sometimes needed by subclasses; doesn't include
-                      itself.  Meaningful only if constructed from a stream */
-    byte [] data = null;  // Raw segment data, used for unrecognized segments
-    boolean unknown = false; // Set to true if the tag is not recognized
-
-    /**
-     * Constructor for creating <code>MarkerSegment</code>s by reading
-     * from an <code>ImageInputStream</code>.
-     */
-    MarkerSegment(JPEGBuffer buffer) throws IOException {
-
-        buffer.loadBuf(3);  // tag plus length
-        tag = buffer.buf[buffer.bufPtr++] & 0xff;
-        length = (buffer.buf[buffer.bufPtr++] & 0xff) << 8;
-        length |= buffer.buf[buffer.bufPtr++] & 0xff;
-        length -= 2;  // JPEG length includes itself, we don't
-        buffer.bufAvail -= 3;
-        // Now that we know the true length, ensure that we've got it,
-        // or at least a bufferful if length is too big.
-        buffer.loadBuf(length);
-    }
-
-    /**
-     * Constructor used when creating segments other than by
-     * reading them from a stream.
-     */
-    MarkerSegment(int tag) {
-        this.tag = tag;
-        length = 0;
-    }
-
-    /**
-     * Construct a MarkerSegment from an "unknown" DOM Node.
-     */
-    MarkerSegment(Node node) throws IIOInvalidTreeException {
-        // The type of node should have been verified already.
-        // get the attribute and assign it to the tag
-        tag = getAttributeValue(node,
-                                null,
-                                "MarkerTag",
-                                0, 255,
-                                true);
-        length = 0;
-        // get the user object and clone it to the data
-        if (node instanceof IIOMetadataNode) {
-            IIOMetadataNode iioNode = (IIOMetadataNode) node;
-            try {
-                data = (byte []) iioNode.getUserObject();
-            } catch (Exception e) {
-                IIOInvalidTreeException newGuy =
-                    new IIOInvalidTreeException
-                    ("Can't get User Object", node);
-                newGuy.initCause(e);
-                throw newGuy;
-            }
-        } else {
-            throw new IIOInvalidTreeException
-                ("Node must have User Object", node);
-        }
-    }
-
-    /**
-     * Deep copy of data array.
-     */
-    protected Object clone() {
-        MarkerSegment newGuy = null;
-        try {
-            newGuy = (MarkerSegment) super.clone();
-        } catch (CloneNotSupportedException e) {} // won't happen
-        if (this.data != null) {
-            newGuy.data = (byte[]) data.clone();
-        }
-        return newGuy;
-    }
-
-    /**
-     * We have determined that we don't know the type, so load
-     * the data using the length parameter.
-     */
-    void loadData(JPEGBuffer buffer) throws IOException {
-        data = new byte[length];
-        buffer.readData(data);
-    }
-
-    IIOMetadataNode getNativeNode() {
-        IIOMetadataNode node = new IIOMetadataNode("unknown");
-        node.setAttribute("MarkerTag", Integer.toString(tag));
-        node.setUserObject(data);
-
-        return node;
-    }
-
-    static int getAttributeValue(Node node,
-                                 NamedNodeMap attrs,
-                                 String name,
-                                 int min,
-                                 int max,
-                                 boolean required)
-        throws IIOInvalidTreeException {
-        if (attrs == null) {
-            attrs = node.getAttributes();
-        }
-        String valueString = attrs.getNamedItem(name).getNodeValue();
-        int value = -1;
-        if (valueString == null) {
-            if (required) {
-                throw new IIOInvalidTreeException
-                    (name + " attribute not found", node);
-            }
-        } else {
-              value = Integer.parseInt(valueString);
-              if ((value < min) || (value > max)) {
-                  throw new IIOInvalidTreeException
-                      (name + " attribute out of range", node);
-              }
-        }
-        return value;
-    }
-
-    /**
-     * Writes the marker, tag, and length.  Note that length
-     * should be verified by the caller as a correct JPEG
-     * length, i.e it includes itself.
-     */
-    void writeTag(ImageOutputStream ios) throws IOException {
-        ios.write(0xff);
-        ios.write(tag);
-        write2bytes(ios, length);
-    }
-
-    /**
-     * Writes the data for this segment to the stream in
-     * valid JPEG format.
-     */
-    void write(ImageOutputStream ios) throws IOException {
-        length = 2 + ((data != null) ? data.length : 0);
-        writeTag(ios);
-        if (data != null) {
-            ios.write(data);
-        }
-    }
-
-    static void write2bytes(ImageOutputStream ios,
-                            int value) throws IOException {
-        ios.write((value >> 8) & 0xff);
-        ios.write(value & 0xff);
-
-    }
-
-    void printTag(String prefix) {
-        System.out.println(prefix + " marker segment - marker = 0x"
-                           + Integer.toHexString(tag));
-        System.out.println("length: " + length);
-    }
-
-    void print() {
-        printTag("Unknown");
-        if (length > 10) {
-            System.out.print("First 5 bytes:");
-            for (int i=0;i<5;i++) {
-                System.out.print(" Ox"
-                                 + Integer.toHexString((int)data[i]));
-            }
-            System.out.print("\nLast 5 bytes:");
-            for (int i=data.length-5;i<data.length;i++) {
-                System.out.print(" Ox"
-                                 + Integer.toHexString((int)data[i]));
-            }
-        } else {
-            System.out.print("Data:");
-            for (int i=0;i<data.length;i++) {
-                System.out.print(" Ox"
-                                 + Integer.toHexString((int)data[i]));
-            }
-        }
-        System.out.println();
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/plugins/jpeg/SOFMarkerSegment.java b/ojluni/src/main/java/com/sun/imageio/plugins/jpeg/SOFMarkerSegment.java
deleted file mode 100755
index c1359e7..0000000
--- a/ojluni/src/main/java/com/sun/imageio/plugins/jpeg/SOFMarkerSegment.java
+++ /dev/null
@@ -1,284 +0,0 @@
-/*
- * Copyright (c) 2001, 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.imageio.plugins.jpeg;
-
-//import javax.imageio.IIOException;
-import javax.imageio.metadata.IIOInvalidTreeException;
-import javax.imageio.metadata.IIOMetadataNode;
-import javax.imageio.stream.ImageOutputStream;
-
-import java.io.IOException;
-
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.w3c.dom.NamedNodeMap;
-
-/**
- * An SOF (Start Of Frame)  marker segment.
- */
-class SOFMarkerSegment extends MarkerSegment {
-    int samplePrecision;
-    int numLines;
-    int samplesPerLine;
-    ComponentSpec [] componentSpecs;  // Array size is num components
-
-    SOFMarkerSegment(boolean wantProg,
-                     boolean wantExtended,
-                     boolean willSubsample,
-                     byte[] componentIDs,
-                     int numComponents) {
-        super(wantProg ? JPEG.SOF2
-              : wantExtended ? JPEG.SOF1
-              : JPEG.SOF0);
-        samplePrecision = 8;
-        numLines = 0;
-        samplesPerLine = 0;
-        componentSpecs = new ComponentSpec[numComponents];
-        for(int i = 0; i < numComponents; i++) {
-            int factor = 1;
-            int qsel = 0;
-            if (willSubsample) {
-                factor = 2;
-                if ((i == 1) || (i == 2)) {
-                    factor = 1;
-                    qsel = 1;
-                }
-            }
-            componentSpecs[i] = new ComponentSpec(componentIDs[i], factor, qsel);
-        }
-    }
-
-    SOFMarkerSegment(JPEGBuffer buffer) throws IOException{
-        super(buffer);
-        samplePrecision = buffer.buf[buffer.bufPtr++];
-        numLines = (buffer.buf[buffer.bufPtr++] & 0xff) << 8;
-        numLines |= buffer.buf[buffer.bufPtr++] & 0xff;
-        samplesPerLine = (buffer.buf[buffer.bufPtr++] & 0xff) << 8;
-        samplesPerLine |= buffer.buf[buffer.bufPtr++] & 0xff;
-        int numComponents = buffer.buf[buffer.bufPtr++];
-        componentSpecs = new ComponentSpec [numComponents];
-        for (int i = 0; i < numComponents; i++) {
-            componentSpecs[i] = new ComponentSpec(buffer);
-        }
-        buffer.bufAvail -= length;
-    }
-
-    SOFMarkerSegment(Node node) throws IIOInvalidTreeException {
-        // All attributes are optional, so setup defaults first
-        super(JPEG.SOF0);
-        samplePrecision = 8;
-        numLines = 0;
-        samplesPerLine = 0;
-        updateFromNativeNode(node, true);
-    }
-
-    protected Object clone() {
-        SOFMarkerSegment newGuy = (SOFMarkerSegment) super.clone();
-        if (componentSpecs != null) {
-            newGuy.componentSpecs = (ComponentSpec []) componentSpecs.clone();
-            for (int i = 0; i < componentSpecs.length; i++) {
-                newGuy.componentSpecs[i] =
-                    (ComponentSpec) componentSpecs[i].clone();
-            }
-        }
-        return newGuy;
-    }
-
-    IIOMetadataNode getNativeNode() {
-        IIOMetadataNode node = new IIOMetadataNode("sof");
-        node.setAttribute("process", Integer.toString(tag-JPEG.SOF0));
-        node.setAttribute("samplePrecision",
-                          Integer.toString(samplePrecision));
-        node.setAttribute("numLines",
-                          Integer.toString(numLines));
-        node.setAttribute("samplesPerLine",
-                          Integer.toString(samplesPerLine));
-        node.setAttribute("numFrameComponents",
-                          Integer.toString(componentSpecs.length));
-        for (int i = 0; i < componentSpecs.length; i++) {
-            node.appendChild(componentSpecs[i].getNativeNode());
-        }
-
-        return node;
-    }
-
-    void updateFromNativeNode(Node node, boolean fromScratch)
-        throws IIOInvalidTreeException {
-        NamedNodeMap attrs = node.getAttributes();
-        int value = getAttributeValue(node, attrs, "process", 0, 2, false);
-        tag = (value != -1) ? value+JPEG.SOF0 : tag;
-        // If samplePrecision is present, it must be 8.
-        // This just checks.  We don't bother to assign the value.
-        value = getAttributeValue(node, attrs, "samplePrecision", 8, 8, false);
-        value = getAttributeValue(node, attrs, "numLines", 0, 65535, false);
-        numLines = (value != -1) ? value : numLines;
-        value = getAttributeValue(node, attrs, "samplesPerLine", 0, 65535, false);
-        samplesPerLine = (value != -1) ? value : samplesPerLine;
-        int numComponents = getAttributeValue(node, attrs, "numFrameComponents",
-                                              1, 4, false);
-        NodeList children = node.getChildNodes();
-        if (children.getLength() != numComponents) {
-            throw new IIOInvalidTreeException
-                ("numFrameComponents must match number of children", node);
-        }
-        componentSpecs = new ComponentSpec [numComponents];
-        for (int i = 0; i < numComponents; i++) {
-            componentSpecs[i] = new ComponentSpec(children.item(i));
-        }
-    }
-
-    /**
-     * Writes the data for this segment to the stream in
-     * valid JPEG format.
-     */
-    void write(ImageOutputStream ios) throws IOException {
-        // We don't write SOF segments; the IJG library does.
-    }
-
-    void print () {
-        printTag("SOF");
-        System.out.print("Sample precision: ");
-        System.out.println(samplePrecision);
-        System.out.print("Number of lines: ");
-        System.out.println(numLines);
-        System.out.print("Samples per line: ");
-        System.out.println(samplesPerLine);
-        System.out.print("Number of components: ");
-        System.out.println(componentSpecs.length);
-        for(int i = 0; i<componentSpecs.length; i++) {
-            componentSpecs[i].print();
-        }
-    }
-
-    int getIDencodedCSType () {
-        for (int i = 0; i < componentSpecs.length; i++) {
-            if (componentSpecs[i].componentId < 'A') {
-                return JPEG.JCS_UNKNOWN;
-            }
-        }
-        switch(componentSpecs.length) {
-        case 3:
-            if ((componentSpecs[0].componentId == 'R')
-                &&(componentSpecs[0].componentId == 'G')
-                &&(componentSpecs[0].componentId == 'B')) {
-                return JPEG.JCS_RGB;
-            }
-            if ((componentSpecs[0].componentId == 'Y')
-                &&(componentSpecs[0].componentId == 'C')
-                &&(componentSpecs[0].componentId == 'c')) {
-                return JPEG.JCS_YCC;
-            }
-            break;
-        case 4:
-            if ((componentSpecs[0].componentId == 'R')
-                &&(componentSpecs[0].componentId == 'G')
-                &&(componentSpecs[0].componentId == 'B')
-                &&(componentSpecs[0].componentId == 'A')) {
-                return JPEG.JCS_RGBA;
-            }
-            if ((componentSpecs[0].componentId == 'Y')
-                &&(componentSpecs[0].componentId == 'C')
-                &&(componentSpecs[0].componentId == 'c')
-                &&(componentSpecs[0].componentId == 'A')) {
-                return JPEG.JCS_YCCA;
-            }
-        }
-
-        return JPEG.JCS_UNKNOWN;
-    }
-
-    ComponentSpec getComponentSpec(byte id, int factor, int qSelector) {
-        return new ComponentSpec(id, factor, qSelector);
-    }
-
-    /**
-     * A component spec within an SOF marker segment.
-     */
-    class ComponentSpec implements Cloneable {
-        int componentId;
-        int HsamplingFactor;
-        int VsamplingFactor;
-        int QtableSelector;
-
-        ComponentSpec(byte id, int factor, int qSelector) {
-            componentId = id;
-            HsamplingFactor = factor;
-            VsamplingFactor = factor;
-            QtableSelector = qSelector;
-        }
-
-        ComponentSpec(JPEGBuffer buffer) {
-            // Parent already did a loadBuf
-            componentId = buffer.buf[buffer.bufPtr++];
-            HsamplingFactor = buffer.buf[buffer.bufPtr] >>> 4;
-            VsamplingFactor = buffer.buf[buffer.bufPtr++] & 0xf;
-            QtableSelector = buffer.buf[buffer.bufPtr++];
-        }
-
-        ComponentSpec(Node node) throws IIOInvalidTreeException {
-            NamedNodeMap attrs = node.getAttributes();
-            componentId = getAttributeValue(node, attrs, "componentId", 0, 255, true);
-            HsamplingFactor = getAttributeValue(node, attrs, "HsamplingFactor",
-                                                1, 255, true);
-            VsamplingFactor = getAttributeValue(node, attrs, "VsamplingFactor",
-                                                1, 255, true);
-            QtableSelector = getAttributeValue(node, attrs, "QtableSelector",
-                                               0, 3, true);
-        }
-
-        protected Object clone() {
-            try {
-                return super.clone();
-            } catch (CloneNotSupportedException e) {} // won't happen
-            return null;
-        }
-
-        IIOMetadataNode getNativeNode() {
-            IIOMetadataNode node = new IIOMetadataNode("componentSpec");
-            node.setAttribute("componentId",
-                              Integer.toString(componentId));
-            node.setAttribute("HsamplingFactor",
-                              Integer.toString(HsamplingFactor));
-            node.setAttribute("VsamplingFactor",
-                              Integer.toString(VsamplingFactor));
-            node.setAttribute("QtableSelector",
-                              Integer.toString(QtableSelector));
-            return node;
-        }
-
-        void print () {
-            System.out.print("Component ID: ");
-            System.out.println(componentId);
-            System.out.print("H sampling factor: ");
-            System.out.println(HsamplingFactor);
-            System.out.print("V sampling factor: ");
-            System.out.println(VsamplingFactor);
-            System.out.print("Q table selector: ");
-            System.out.println(QtableSelector);
-        }
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/plugins/jpeg/SOSMarkerSegment.java b/ojluni/src/main/java/com/sun/imageio/plugins/jpeg/SOSMarkerSegment.java
deleted file mode 100755
index afffa7b..0000000
--- a/ojluni/src/main/java/com/sun/imageio/plugins/jpeg/SOSMarkerSegment.java
+++ /dev/null
@@ -1,241 +0,0 @@
-/*
- * Copyright (c) 2001, 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.imageio.plugins.jpeg;
-
-//import javax.imageio.IIOException;
-import javax.imageio.metadata.IIOInvalidTreeException;
-import javax.imageio.metadata.IIOMetadataNode;
-import javax.imageio.stream.ImageOutputStream;
-
-import java.io.IOException;
-
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.w3c.dom.NamedNodeMap;
-
-/**
- * An SOS (Start Of Scan) marker segment.
- */
-class SOSMarkerSegment extends MarkerSegment {
-    int startSpectralSelection;
-    int endSpectralSelection;
-    int approxHigh;
-    int approxLow;
-    ScanComponentSpec [] componentSpecs; // Array size is numScanComponents
-
-    SOSMarkerSegment(boolean willSubsample,
-                     byte[] componentIDs,
-                     int numComponents) {
-        super(JPEG.SOS);
-        startSpectralSelection = 0;
-        endSpectralSelection = 63;
-        approxHigh = 0;
-        approxLow = 0;
-        componentSpecs = new ScanComponentSpec[numComponents];
-        for (int i = 0; i < numComponents; i++) {
-            int tableSel = 0;
-            if (willSubsample) {
-                if ((i == 1) || (i == 2)) {
-                    tableSel = 1;
-                }
-            }
-            componentSpecs[i] = new ScanComponentSpec(componentIDs[i],
-                                                      tableSel);
-        }
-    }
-
-    SOSMarkerSegment(JPEGBuffer buffer) throws IOException {
-        super(buffer);
-        int numComponents = buffer.buf[buffer.bufPtr++];
-        componentSpecs = new ScanComponentSpec[numComponents];
-        for (int i = 0; i < numComponents; i++) {
-            componentSpecs[i] = new ScanComponentSpec(buffer);
-        }
-        startSpectralSelection = buffer.buf[buffer.bufPtr++];
-        endSpectralSelection = buffer.buf[buffer.bufPtr++];
-        approxHigh = buffer.buf[buffer.bufPtr] >> 4;
-        approxLow = buffer.buf[buffer.bufPtr++] &0xf;
-        buffer.bufAvail -= length;
-    }
-
-    SOSMarkerSegment(Node node) throws IIOInvalidTreeException {
-        super(JPEG.SOS);
-        startSpectralSelection = 0;
-        endSpectralSelection = 63;
-        approxHigh = 0;
-        approxLow = 0;
-        updateFromNativeNode(node, true);
-    }
-
-    protected Object clone () {
-        SOSMarkerSegment newGuy = (SOSMarkerSegment) super.clone();
-        if (componentSpecs != null) {
-            newGuy.componentSpecs =
-                (ScanComponentSpec []) componentSpecs.clone();
-            for (int i = 0; i < componentSpecs.length; i++) {
-                newGuy.componentSpecs[i] =
-                    (ScanComponentSpec) componentSpecs[i].clone();
-            }
-        }
-        return newGuy;
-    }
-
-    IIOMetadataNode getNativeNode() {
-        IIOMetadataNode node = new IIOMetadataNode("sos");
-        node.setAttribute("numScanComponents",
-                          Integer.toString(componentSpecs.length));
-        node.setAttribute("startSpectralSelection",
-                          Integer.toString(startSpectralSelection));
-        node.setAttribute("endSpectralSelection",
-                          Integer.toString(endSpectralSelection));
-        node.setAttribute("approxHigh",
-                          Integer.toString(approxHigh));
-        node.setAttribute("approxLow",
-                          Integer.toString(approxLow));
-        for (int i = 0; i < componentSpecs.length; i++) {
-            node.appendChild(componentSpecs[i].getNativeNode());
-        }
-
-        return node;
-    }
-
-    void updateFromNativeNode(Node node, boolean fromScratch)
-        throws IIOInvalidTreeException {
-        NamedNodeMap attrs = node.getAttributes();
-        int numComponents = getAttributeValue(node, attrs, "numScanComponents",
-                                              1, 4, true);
-        int value = getAttributeValue(node, attrs, "startSpectralSelection",
-                                      0, 63, false);
-        startSpectralSelection = (value != -1) ? value : startSpectralSelection;
-        value = getAttributeValue(node, attrs, "endSpectralSelection",
-                                  0, 63, false);
-        endSpectralSelection = (value != -1) ? value : endSpectralSelection;
-        value = getAttributeValue(node, attrs, "approxHigh", 0, 15, false);
-        approxHigh = (value != -1) ? value : approxHigh;
-        value = getAttributeValue(node, attrs, "approxLow", 0, 15, false);
-        approxLow = (value != -1) ? value : approxLow;
-
-        // Now the children
-        NodeList children = node.getChildNodes();
-        if (children.getLength() != numComponents) {
-            throw new IIOInvalidTreeException
-                ("numScanComponents must match the number of children", node);
-        }
-        componentSpecs = new ScanComponentSpec[numComponents];
-        for (int i = 0; i < numComponents; i++) {
-            componentSpecs[i] = new ScanComponentSpec(children.item(i));
-        }
-    }
-
-    /**
-     * Writes the data for this segment to the stream in
-     * valid JPEG format.
-     */
-    void write(ImageOutputStream ios) throws IOException {
-        // We don't write SOS segments; the IJG library does.
-    }
-
-    void print () {
-        printTag("SOS");
-        System.out.print("Start spectral selection: ");
-        System.out.println(startSpectralSelection);
-        System.out.print("End spectral selection: ");
-        System.out.println(endSpectralSelection);
-        System.out.print("Approx high: ");
-        System.out.println(approxHigh);
-        System.out.print("Approx low: ");
-        System.out.println(approxLow);
-        System.out.print("Num scan components: ");
-        System.out.println(componentSpecs.length);
-        for (int i = 0; i< componentSpecs.length; i++) {
-            componentSpecs[i].print();
-        }
-    }
-
-    ScanComponentSpec getScanComponentSpec(byte componentSel, int tableSel) {
-        return new ScanComponentSpec(componentSel, tableSel);
-    }
-
-    /**
-     * A scan component spec within an SOS marker segment.
-     */
-    class ScanComponentSpec implements Cloneable {
-        int componentSelector;
-        int dcHuffTable;
-        int acHuffTable;
-
-        ScanComponentSpec(byte componentSel, int tableSel) {
-            componentSelector = componentSel;
-            dcHuffTable = tableSel;
-            acHuffTable = tableSel;
-        }
-
-        ScanComponentSpec(JPEGBuffer buffer) {
-            // Parent already loaded the buffer
-            componentSelector = buffer.buf[buffer.bufPtr++];
-            dcHuffTable = buffer.buf[buffer.bufPtr] >> 4;
-            acHuffTable = buffer.buf[buffer.bufPtr++] & 0xf;
-        }
-
-        ScanComponentSpec(Node node) throws IIOInvalidTreeException {
-            NamedNodeMap attrs = node.getAttributes();
-            componentSelector = getAttributeValue(node, attrs, "componentSelector",
-                                                  0, 255, true);
-            dcHuffTable = getAttributeValue(node, attrs, "dcHuffTable",
-                                            0, 3, true);
-            acHuffTable = getAttributeValue(node, attrs, "acHuffTable",
-                                            0, 3, true);
-        }
-
-        protected Object clone() {
-            try {
-                return super.clone();
-            } catch (CloneNotSupportedException e) {} // won't happen
-            return null;
-        }
-
-        IIOMetadataNode getNativeNode() {
-            IIOMetadataNode node = new IIOMetadataNode("scanComponentSpec");
-            node.setAttribute("componentSelector",
-                              Integer.toString(componentSelector));
-            node.setAttribute("dcHuffTable",
-                              Integer.toString(dcHuffTable));
-            node.setAttribute("acHuffTable",
-                              Integer.toString(acHuffTable));
-            return node;
-        }
-
-        void print () {
-            System.out.print("Component Selector: ");
-            System.out.println(componentSelector);
-            System.out.print("DC huffman table: ");
-            System.out.println(dcHuffTable);
-            System.out.print("AC huffman table: ");
-            System.out.println(acHuffTable);
-        }
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/plugins/png/PNGImageReader.java b/ojluni/src/main/java/com/sun/imageio/plugins/png/PNGImageReader.java
deleted file mode 100755
index e2ab957..0000000
--- a/ojluni/src/main/java/com/sun/imageio/plugins/png/PNGImageReader.java
+++ /dev/null
@@ -1,1592 +0,0 @@
-/*
- * Copyright (c) 2000, 2006, 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.imageio.plugins.png;
-
-import java.awt.Point;
-import java.awt.Rectangle;
-import java.awt.color.ColorSpace;
-import java.awt.image.BufferedImage;
-import java.awt.image.DataBuffer;
-import java.awt.image.DataBufferByte;
-import java.awt.image.DataBufferUShort;
-import java.awt.image.Raster;
-import java.awt.image.WritableRaster;
-import java.io.BufferedInputStream;
-import java.io.ByteArrayInputStream;
-import java.io.DataInputStream;
-import java.io.EOFException;
-import java.io.InputStream;
-import java.io.IOException;
-import java.io.SequenceInputStream;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Enumeration;
-import java.util.Iterator;
-import java.util.zip.Inflater;
-import java.util.zip.InflaterInputStream;
-import javax.imageio.IIOException;
-import javax.imageio.ImageReader;
-import javax.imageio.ImageReadParam;
-import javax.imageio.ImageTypeSpecifier;
-import javax.imageio.metadata.IIOMetadata;
-import javax.imageio.spi.ImageReaderSpi;
-import javax.imageio.stream.ImageInputStream;
-import com.sun.imageio.plugins.common.InputStreamAdapter;
-import com.sun.imageio.plugins.common.ReaderUtil;
-import com.sun.imageio.plugins.common.SubImageInputStream;
-import java.io.ByteArrayOutputStream;
-import sun.awt.image.ByteInterleavedRaster;
-
-class PNGImageDataEnumeration implements Enumeration<InputStream> {
-
-    boolean firstTime = true;
-    ImageInputStream stream;
-    int length;
-
-    public PNGImageDataEnumeration(ImageInputStream stream)
-        throws IOException {
-        this.stream = stream;
-        this.length = stream.readInt();
-        int type = stream.readInt(); // skip chunk type
-    }
-
-    public InputStream nextElement() {
-        try {
-            firstTime = false;
-            ImageInputStream iis = new SubImageInputStream(stream, length);
-            return new InputStreamAdapter(iis);
-        } catch (IOException e) {
-            return null;
-        }
-    }
-
-    public boolean hasMoreElements() {
-        if (firstTime) {
-            return true;
-        }
-
-        try {
-            int crc = stream.readInt();
-            this.length = stream.readInt();
-            int type = stream.readInt();
-            if (type == PNGImageReader.IDAT_TYPE) {
-                return true;
-            } else {
-                return false;
-            }
-        } catch (IOException e) {
-            return false;
-        }
-    }
-}
-
-public class PNGImageReader extends ImageReader {
-
-    /*
-     * Note: The following chunk type constants are autogenerated.  Each
-     * one is derived from the ASCII values of its 4-character name.  For
-     * example, IHDR_TYPE is calculated as follows:
-     *            ('I' << 24) | ('H' << 16) | ('D' << 8) | 'R'
-     */
-
-    // Critical chunks
-    static final int IHDR_TYPE = 0x49484452;
-    static final int PLTE_TYPE = 0x504c5445;
-    static final int IDAT_TYPE = 0x49444154;
-    static final int IEND_TYPE = 0x49454e44;
-
-    // Ancillary chunks
-    static final int bKGD_TYPE = 0x624b4744;
-    static final int cHRM_TYPE = 0x6348524d;
-    static final int gAMA_TYPE = 0x67414d41;
-    static final int hIST_TYPE = 0x68495354;
-    static final int iCCP_TYPE = 0x69434350;
-    static final int iTXt_TYPE = 0x69545874;
-    static final int pHYs_TYPE = 0x70485973;
-    static final int sBIT_TYPE = 0x73424954;
-    static final int sPLT_TYPE = 0x73504c54;
-    static final int sRGB_TYPE = 0x73524742;
-    static final int tEXt_TYPE = 0x74455874;
-    static final int tIME_TYPE = 0x74494d45;
-    static final int tRNS_TYPE = 0x74524e53;
-    static final int zTXt_TYPE = 0x7a545874;
-
-    static final int PNG_COLOR_GRAY = 0;
-    static final int PNG_COLOR_RGB = 2;
-    static final int PNG_COLOR_PALETTE = 3;
-    static final int PNG_COLOR_GRAY_ALPHA = 4;
-    static final int PNG_COLOR_RGB_ALPHA = 6;
-
-    // The number of bands by PNG color type
-    static final int[] inputBandsForColorType = {
-         1, // gray
-        -1, // unused
-         3, // rgb
-         1, // palette
-         2, // gray + alpha
-        -1, // unused
-         4  // rgb + alpha
-    };
-
-    static final int PNG_FILTER_NONE = 0;
-    static final int PNG_FILTER_SUB = 1;
-    static final int PNG_FILTER_UP = 2;
-    static final int PNG_FILTER_AVERAGE = 3;
-    static final int PNG_FILTER_PAETH = 4;
-
-    static final int[] adam7XOffset = { 0, 4, 0, 2, 0, 1, 0 };
-    static final int[] adam7YOffset = { 0, 0, 4, 0, 2, 0, 1 };
-    static final int[] adam7XSubsampling = { 8, 8, 4, 4, 2, 2, 1, 1 };
-    static final int[] adam7YSubsampling = { 8, 8, 8, 4, 4, 2, 2, 1 };
-
-    private static final boolean debug = true;
-
-    ImageInputStream stream = null;
-
-    boolean gotHeader = false;
-    boolean gotMetadata = false;
-
-    ImageReadParam lastParam = null;
-
-    long imageStartPosition = -1L;
-
-    Rectangle sourceRegion = null;
-    int sourceXSubsampling = -1;
-    int sourceYSubsampling = -1;
-    int sourceMinProgressivePass = 0;
-    int sourceMaxProgressivePass = 6;
-    int[] sourceBands = null;
-    int[] destinationBands = null;
-    Point destinationOffset = new Point(0, 0);
-
-    PNGMetadata metadata = new PNGMetadata();
-
-    DataInputStream pixelStream = null;
-
-    BufferedImage theImage = null;
-
-    // The number of source pixels processed
-    int pixelsDone = 0;
-
-    // The total number of pixels in the source image
-    int totalPixels;
-
-    public PNGImageReader(ImageReaderSpi originatingProvider) {
-        super(originatingProvider);
-    }
-
-    public void setInput(Object input,
-                         boolean seekForwardOnly,
-                         boolean ignoreMetadata) {
-        super.setInput(input, seekForwardOnly, ignoreMetadata);
-        this.stream = (ImageInputStream)input; // Always works
-
-        // Clear all values based on the previous stream contents
-        resetStreamSettings();
-    }
-
-    private String readNullTerminatedString(String charset, int maxLen) throws IOException {
-        ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        int b;
-        int count = 0;
-        while ((maxLen > count++) && ((b = stream.read()) != 0)) {
-            if (b == -1) throw new EOFException();
-            baos.write(b);
-        }
-        return new String(baos.toByteArray(), charset);
-    }
-
-    private void readHeader() throws IIOException {
-        if (gotHeader) {
-            return;
-        }
-        if (stream == null) {
-            throw new IllegalStateException("Input source not set!");
-        }
-
-        try {
-            byte[] signature = new byte[8];
-            stream.readFully(signature);
-
-            if (signature[0] != (byte)137 ||
-                signature[1] != (byte)80 ||
-                signature[2] != (byte)78 ||
-                signature[3] != (byte)71 ||
-                signature[4] != (byte)13 ||
-                signature[5] != (byte)10 ||
-                signature[6] != (byte)26 ||
-                signature[7] != (byte)10) {
-                throw new IIOException("Bad PNG signature!");
-            }
-
-            int IHDR_length = stream.readInt();
-            if (IHDR_length != 13) {
-                throw new IIOException("Bad length for IHDR chunk!");
-            }
-            int IHDR_type = stream.readInt();
-            if (IHDR_type != IHDR_TYPE) {
-                throw new IIOException("Bad type for IHDR chunk!");
-            }
-
-            this.metadata = new PNGMetadata();
-
-            int width = stream.readInt();
-            int height = stream.readInt();
-
-            // Re-use signature array to bulk-read these unsigned byte values
-            stream.readFully(signature, 0, 5);
-            int bitDepth          = signature[0] & 0xff;
-            int colorType         = signature[1] & 0xff;
-            int compressionMethod = signature[2] & 0xff;
-            int filterMethod      = signature[3] & 0xff;
-            int interlaceMethod   = signature[4] & 0xff;
-
-            // Skip IHDR CRC
-            stream.skipBytes(4);
-
-            stream.flushBefore(stream.getStreamPosition());
-
-            if (width == 0) {
-                throw new IIOException("Image width == 0!");
-            }
-            if (height == 0) {
-                throw new IIOException("Image height == 0!");
-            }
-            if (bitDepth != 1 && bitDepth != 2 && bitDepth != 4 &&
-                bitDepth != 8 && bitDepth != 16) {
-                throw new IIOException("Bit depth must be 1, 2, 4, 8, or 16!");
-            }
-            if (colorType != 0 && colorType != 2 && colorType != 3 &&
-                colorType != 4 && colorType != 6) {
-                throw new IIOException("Color type must be 0, 2, 3, 4, or 6!");
-            }
-            if (colorType == PNG_COLOR_PALETTE && bitDepth == 16) {
-                throw new IIOException("Bad color type/bit depth combination!");
-            }
-            if ((colorType == PNG_COLOR_RGB ||
-                 colorType == PNG_COLOR_RGB_ALPHA ||
-                 colorType == PNG_COLOR_GRAY_ALPHA) &&
-                (bitDepth != 8 && bitDepth != 16)) {
-                throw new IIOException("Bad color type/bit depth combination!");
-            }
-            if (compressionMethod != 0) {
-                throw new IIOException("Unknown compression method (not 0)!");
-            }
-            if (filterMethod != 0) {
-                throw new IIOException("Unknown filter method (not 0)!");
-            }
-            if (interlaceMethod != 0 && interlaceMethod != 1) {
-                throw new IIOException("Unknown interlace method (not 0 or 1)!");
-            }
-
-            metadata.IHDR_present = true;
-            metadata.IHDR_width = width;
-            metadata.IHDR_height = height;
-            metadata.IHDR_bitDepth = bitDepth;
-            metadata.IHDR_colorType = colorType;
-            metadata.IHDR_compressionMethod = compressionMethod;
-            metadata.IHDR_filterMethod = filterMethod;
-            metadata.IHDR_interlaceMethod = interlaceMethod;
-            gotHeader = true;
-        } catch (IOException e) {
-            throw new IIOException("I/O error reading PNG header!", e);
-        }
-    }
-
-    private void parse_PLTE_chunk(int chunkLength) throws IOException {
-        if (metadata.PLTE_present) {
-            processWarningOccurred(
-"A PNG image may not contain more than one PLTE chunk.\n" +
-"The chunk wil be ignored.");
-            return;
-        } else if (metadata.IHDR_colorType == PNG_COLOR_GRAY ||
-                   metadata.IHDR_colorType == PNG_COLOR_GRAY_ALPHA) {
-            processWarningOccurred(
-"A PNG gray or gray alpha image cannot have a PLTE chunk.\n" +
-"The chunk wil be ignored.");
-            return;
-        }
-
-        byte[] palette = new byte[chunkLength];
-        stream.readFully(palette);
-
-        int numEntries = chunkLength/3;
-        if (metadata.IHDR_colorType == PNG_COLOR_PALETTE) {
-            int maxEntries = 1 << metadata.IHDR_bitDepth;
-            if (numEntries > maxEntries) {
-                processWarningOccurred(
-"PLTE chunk contains too many entries for bit depth, ignoring extras.");
-                numEntries = maxEntries;
-            }
-            numEntries = Math.min(numEntries, maxEntries);
-        }
-
-        // Round array sizes up to 2^2^n
-        int paletteEntries;
-        if (numEntries > 16) {
-            paletteEntries = 256;
-        } else if (numEntries > 4) {
-            paletteEntries = 16;
-        } else if (numEntries > 2) {
-            paletteEntries = 4;
-        } else {
-            paletteEntries = 2;
-        }
-
-        metadata.PLTE_present = true;
-        metadata.PLTE_red = new byte[paletteEntries];
-        metadata.PLTE_green = new byte[paletteEntries];
-        metadata.PLTE_blue = new byte[paletteEntries];
-
-        int index = 0;
-        for (int i = 0; i < numEntries; i++) {
-            metadata.PLTE_red[i] = palette[index++];
-            metadata.PLTE_green[i] = palette[index++];
-            metadata.PLTE_blue[i] = palette[index++];
-        }
-    }
-
-    private void parse_bKGD_chunk() throws IOException {
-        if (metadata.IHDR_colorType == PNG_COLOR_PALETTE) {
-            metadata.bKGD_colorType = PNG_COLOR_PALETTE;
-            metadata.bKGD_index = stream.readUnsignedByte();
-        } else if (metadata.IHDR_colorType == PNG_COLOR_GRAY ||
-                   metadata.IHDR_colorType == PNG_COLOR_GRAY_ALPHA) {
-            metadata.bKGD_colorType = PNG_COLOR_GRAY;
-            metadata.bKGD_gray = stream.readUnsignedShort();
-        } else { // RGB or RGB_ALPHA
-            metadata.bKGD_colorType = PNG_COLOR_RGB;
-            metadata.bKGD_red = stream.readUnsignedShort();
-            metadata.bKGD_green = stream.readUnsignedShort();
-            metadata.bKGD_blue = stream.readUnsignedShort();
-        }
-
-        metadata.bKGD_present = true;
-    }
-
-    private void parse_cHRM_chunk() throws IOException {
-        metadata.cHRM_whitePointX = stream.readInt();
-        metadata.cHRM_whitePointY = stream.readInt();
-        metadata.cHRM_redX = stream.readInt();
-        metadata.cHRM_redY = stream.readInt();
-        metadata.cHRM_greenX = stream.readInt();
-        metadata.cHRM_greenY = stream.readInt();
-        metadata.cHRM_blueX = stream.readInt();
-        metadata.cHRM_blueY = stream.readInt();
-
-        metadata.cHRM_present = true;
-    }
-
-    private void parse_gAMA_chunk() throws IOException {
-        int gamma = stream.readInt();
-        metadata.gAMA_gamma = gamma;
-
-        metadata.gAMA_present = true;
-    }
-
-    private void parse_hIST_chunk(int chunkLength) throws IOException,
-        IIOException
-    {
-        if (!metadata.PLTE_present) {
-            throw new IIOException("hIST chunk without prior PLTE chunk!");
-        }
-
-        /* According to PNG specification length of
-         * hIST chunk is specified in bytes and
-         * hIST chunk consists of 2 byte elements
-         * (so we expect length is even).
-         */
-        metadata.hIST_histogram = new char[chunkLength/2];
-        stream.readFully(metadata.hIST_histogram,
-                         0, metadata.hIST_histogram.length);
-
-        metadata.hIST_present = true;
-    }
-
-    private void parse_iCCP_chunk(int chunkLength) throws IOException {
-        String keyword = readNullTerminatedString("ISO-8859-1", 80);
-        metadata.iCCP_profileName = keyword;
-
-        metadata.iCCP_compressionMethod = stream.readUnsignedByte();
-
-        byte[] compressedProfile =
-          new byte[chunkLength - keyword.length() - 2];
-        stream.readFully(compressedProfile);
-        metadata.iCCP_compressedProfile = compressedProfile;
-
-        metadata.iCCP_present = true;
-    }
-
-    private void parse_iTXt_chunk(int chunkLength) throws IOException {
-        long chunkStart = stream.getStreamPosition();
-
-        String keyword = readNullTerminatedString("ISO-8859-1", 80);
-        metadata.iTXt_keyword.add(keyword);
-
-        int compressionFlag = stream.readUnsignedByte();
-        metadata.iTXt_compressionFlag.add(Boolean.valueOf(compressionFlag == 1));
-
-        int compressionMethod = stream.readUnsignedByte();
-        metadata.iTXt_compressionMethod.add(Integer.valueOf(compressionMethod));
-
-        String languageTag = readNullTerminatedString("UTF8", 80);
-        metadata.iTXt_languageTag.add(languageTag);
-
-        long pos = stream.getStreamPosition();
-        int maxLen = (int)(chunkStart + chunkLength - pos);
-        String translatedKeyword =
-            readNullTerminatedString("UTF8", maxLen);
-        metadata.iTXt_translatedKeyword.add(translatedKeyword);
-
-        String text;
-        pos = stream.getStreamPosition();
-        byte[] b = new byte[(int)(chunkStart + chunkLength - pos)];
-        stream.readFully(b);
-
-        if (compressionFlag == 1) { // Decompress the text
-            text = new String(inflate(b), "UTF8");
-        } else {
-            text = new String(b, "UTF8");
-        }
-        metadata.iTXt_text.add(text);
-    }
-
-    private void parse_pHYs_chunk() throws IOException {
-        metadata.pHYs_pixelsPerUnitXAxis = stream.readInt();
-        metadata.pHYs_pixelsPerUnitYAxis = stream.readInt();
-        metadata.pHYs_unitSpecifier = stream.readUnsignedByte();
-
-        metadata.pHYs_present = true;
-    }
-
-    private void parse_sBIT_chunk() throws IOException {
-        int colorType = metadata.IHDR_colorType;
-        if (colorType == PNG_COLOR_GRAY ||
-            colorType == PNG_COLOR_GRAY_ALPHA) {
-            metadata.sBIT_grayBits = stream.readUnsignedByte();
-        } else if (colorType == PNG_COLOR_RGB ||
-                   colorType == PNG_COLOR_PALETTE ||
-                   colorType == PNG_COLOR_RGB_ALPHA) {
-            metadata.sBIT_redBits = stream.readUnsignedByte();
-            metadata.sBIT_greenBits = stream.readUnsignedByte();
-            metadata.sBIT_blueBits = stream.readUnsignedByte();
-        }
-
-        if (colorType == PNG_COLOR_GRAY_ALPHA ||
-            colorType == PNG_COLOR_RGB_ALPHA) {
-            metadata.sBIT_alphaBits = stream.readUnsignedByte();
-        }
-
-        metadata.sBIT_colorType = colorType;
-        metadata.sBIT_present = true;
-    }
-
-    private void parse_sPLT_chunk(int chunkLength)
-        throws IOException, IIOException {
-        metadata.sPLT_paletteName = readNullTerminatedString("ISO-8859-1", 80);
-        chunkLength -= metadata.sPLT_paletteName.length() + 1;
-
-        int sampleDepth = stream.readUnsignedByte();
-        metadata.sPLT_sampleDepth = sampleDepth;
-
-        int numEntries = chunkLength/(4*(sampleDepth/8) + 2);
-        metadata.sPLT_red = new int[numEntries];
-        metadata.sPLT_green = new int[numEntries];
-        metadata.sPLT_blue = new int[numEntries];
-        metadata.sPLT_alpha = new int[numEntries];
-        metadata.sPLT_frequency = new int[numEntries];
-
-        if (sampleDepth == 8) {
-            for (int i = 0; i < numEntries; i++) {
-                metadata.sPLT_red[i] = stream.readUnsignedByte();
-                metadata.sPLT_green[i] = stream.readUnsignedByte();
-                metadata.sPLT_blue[i] = stream.readUnsignedByte();
-                metadata.sPLT_alpha[i] = stream.readUnsignedByte();
-                metadata.sPLT_frequency[i] = stream.readUnsignedShort();
-            }
-        } else if (sampleDepth == 16) {
-            for (int i = 0; i < numEntries; i++) {
-                metadata.sPLT_red[i] = stream.readUnsignedShort();
-                metadata.sPLT_green[i] = stream.readUnsignedShort();
-                metadata.sPLT_blue[i] = stream.readUnsignedShort();
-                metadata.sPLT_alpha[i] = stream.readUnsignedShort();
-                metadata.sPLT_frequency[i] = stream.readUnsignedShort();
-            }
-        } else {
-            throw new IIOException("sPLT sample depth not 8 or 16!");
-        }
-
-        metadata.sPLT_present = true;
-    }
-
-    private void parse_sRGB_chunk() throws IOException {
-        metadata.sRGB_renderingIntent = stream.readUnsignedByte();
-
-        metadata.sRGB_present = true;
-    }
-
-    private void parse_tEXt_chunk(int chunkLength) throws IOException {
-        String keyword = readNullTerminatedString("ISO-8859-1", 80);
-        metadata.tEXt_keyword.add(keyword);
-
-        byte[] b = new byte[chunkLength - keyword.length() - 1];
-        stream.readFully(b);
-        metadata.tEXt_text.add(new String(b, "ISO-8859-1"));
-    }
-
-    private void parse_tIME_chunk() throws IOException {
-        metadata.tIME_year = stream.readUnsignedShort();
-        metadata.tIME_month = stream.readUnsignedByte();
-        metadata.tIME_day = stream.readUnsignedByte();
-        metadata.tIME_hour = stream.readUnsignedByte();
-        metadata.tIME_minute = stream.readUnsignedByte();
-        metadata.tIME_second = stream.readUnsignedByte();
-
-        metadata.tIME_present = true;
-    }
-
-    private void parse_tRNS_chunk(int chunkLength) throws IOException {
-        int colorType = metadata.IHDR_colorType;
-        if (colorType == PNG_COLOR_PALETTE) {
-            if (!metadata.PLTE_present) {
-                processWarningOccurred(
-"tRNS chunk without prior PLTE chunk, ignoring it.");
-                return;
-            }
-
-            // Alpha table may have fewer entries than RGB palette
-            int maxEntries = metadata.PLTE_red.length;
-            int numEntries = chunkLength;
-            if (numEntries > maxEntries) {
-                processWarningOccurred(
-"tRNS chunk has more entries than prior PLTE chunk, ignoring extras.");
-                numEntries = maxEntries;
-            }
-            metadata.tRNS_alpha = new byte[numEntries];
-            metadata.tRNS_colorType = PNG_COLOR_PALETTE;
-            stream.read(metadata.tRNS_alpha, 0, numEntries);
-            stream.skipBytes(chunkLength - numEntries);
-        } else if (colorType == PNG_COLOR_GRAY) {
-            if (chunkLength != 2) {
-                processWarningOccurred(
-"tRNS chunk for gray image must have length 2, ignoring chunk.");
-                stream.skipBytes(chunkLength);
-                return;
-            }
-            metadata.tRNS_gray = stream.readUnsignedShort();
-            metadata.tRNS_colorType = PNG_COLOR_GRAY;
-        } else if (colorType == PNG_COLOR_RGB) {
-            if (chunkLength != 6) {
-                processWarningOccurred(
-"tRNS chunk for RGB image must have length 6, ignoring chunk.");
-                stream.skipBytes(chunkLength);
-                return;
-            }
-            metadata.tRNS_red = stream.readUnsignedShort();
-            metadata.tRNS_green = stream.readUnsignedShort();
-            metadata.tRNS_blue = stream.readUnsignedShort();
-            metadata.tRNS_colorType = PNG_COLOR_RGB;
-        } else {
-            processWarningOccurred(
-"Gray+Alpha and RGBS images may not have a tRNS chunk, ignoring it.");
-            return;
-        }
-
-        metadata.tRNS_present = true;
-    }
-
-    private static byte[] inflate(byte[] b) throws IOException {
-        InputStream bais = new ByteArrayInputStream(b);
-        InputStream iis = new InflaterInputStream(bais);
-        ByteArrayOutputStream baos = new ByteArrayOutputStream();
-
-        int c;
-        try {
-            while ((c = iis.read()) != -1) {
-                baos.write(c);
-            }
-        } finally {
-            iis.close();
-        }
-        return baos.toByteArray();
-    }
-
-    private void parse_zTXt_chunk(int chunkLength) throws IOException {
-        String keyword = readNullTerminatedString("ISO-8859-1", 80);
-        metadata.zTXt_keyword.add(keyword);
-
-        int method = stream.readUnsignedByte();
-        metadata.zTXt_compressionMethod.add(new Integer(method));
-
-        byte[] b = new byte[chunkLength - keyword.length() - 2];
-        stream.readFully(b);
-        metadata.zTXt_text.add(new String(inflate(b), "ISO-8859-1"));
-    }
-
-    private void readMetadata() throws IIOException {
-        if (gotMetadata) {
-            return;
-        }
-
-        readHeader();
-
-        /*
-         * Optimization: We can skip the remaining metadata if the
-         * ignoreMetadata flag is set, and only if this is not a palette
-         * image (in that case, we need to read the metadata to get the
-         * tRNS chunk, which is needed for the getImageTypes() method).
-         */
-        int colorType = metadata.IHDR_colorType;
-        if (ignoreMetadata && colorType != PNG_COLOR_PALETTE) {
-            try {
-                while (true) {
-                    int chunkLength = stream.readInt();
-                    int chunkType = stream.readInt();
-
-                    if (chunkType == IDAT_TYPE) {
-                        // We've reached the image data
-                        stream.skipBytes(-8);
-                        imageStartPosition = stream.getStreamPosition();
-                        break;
-                    } else {
-                        // Skip the chunk plus the 4 CRC bytes that follow
-                        stream.skipBytes(chunkLength + 4);
-                    }
-                }
-            } catch (IOException e) {
-                throw new IIOException("Error skipping PNG metadata", e);
-            }
-
-            gotMetadata = true;
-            return;
-        }
-
-        try {
-            loop: while (true) {
-                int chunkLength = stream.readInt();
-                int chunkType = stream.readInt();
-
-                switch (chunkType) {
-                case IDAT_TYPE:
-                    // If chunk type is 'IDAT', we've reached the image data.
-                    stream.skipBytes(-8);
-                    imageStartPosition = stream.getStreamPosition();
-                    break loop;
-                case PLTE_TYPE:
-                    parse_PLTE_chunk(chunkLength);
-                    break;
-                case bKGD_TYPE:
-                    parse_bKGD_chunk();
-                    break;
-                case cHRM_TYPE:
-                    parse_cHRM_chunk();
-                    break;
-                case gAMA_TYPE:
-                    parse_gAMA_chunk();
-                    break;
-                case hIST_TYPE:
-                    parse_hIST_chunk(chunkLength);
-                    break;
-                case iCCP_TYPE:
-                    parse_iCCP_chunk(chunkLength);
-                    break;
-                case iTXt_TYPE:
-                    parse_iTXt_chunk(chunkLength);
-                    break;
-                case pHYs_TYPE:
-                    parse_pHYs_chunk();
-                    break;
-                case sBIT_TYPE:
-                    parse_sBIT_chunk();
-                    break;
-                case sPLT_TYPE:
-                    parse_sPLT_chunk(chunkLength);
-                    break;
-                case sRGB_TYPE:
-                    parse_sRGB_chunk();
-                    break;
-                case tEXt_TYPE:
-                    parse_tEXt_chunk(chunkLength);
-                    break;
-                case tIME_TYPE:
-                    parse_tIME_chunk();
-                    break;
-                case tRNS_TYPE:
-                    parse_tRNS_chunk(chunkLength);
-                    break;
-                case zTXt_TYPE:
-                    parse_zTXt_chunk(chunkLength);
-                    break;
-                default:
-                    // Read an unknown chunk
-                    byte[] b = new byte[chunkLength];
-                    stream.readFully(b);
-
-                    StringBuilder chunkName = new StringBuilder(4);
-                    chunkName.append((char)(chunkType >>> 24));
-                    chunkName.append((char)((chunkType >> 16) & 0xff));
-                    chunkName.append((char)((chunkType >> 8) & 0xff));
-                    chunkName.append((char)(chunkType & 0xff));
-
-                    int ancillaryBit = chunkType >>> 28;
-                    if (ancillaryBit == 0) {
-                        processWarningOccurred(
-"Encountered unknown chunk with critical bit set!");
-                    }
-
-                    metadata.unknownChunkType.add(chunkName.toString());
-                    metadata.unknownChunkData.add(b);
-                    break;
-                }
-
-                int chunkCRC = stream.readInt();
-                stream.flushBefore(stream.getStreamPosition());
-            }
-        } catch (IOException e) {
-            throw new IIOException("Error reading PNG metadata", e);
-        }
-
-        gotMetadata = true;
-    }
-
-    // Data filtering methods
-
-    private static void decodeSubFilter(byte[] curr, int coff, int count,
-                                        int bpp) {
-        for (int i = bpp; i < count; i++) {
-            int val;
-
-            val = curr[i + coff] & 0xff;
-            val += curr[i + coff - bpp] & 0xff;
-
-            curr[i + coff] = (byte)val;
-        }
-    }
-
-    private static void decodeUpFilter(byte[] curr, int coff,
-                                       byte[] prev, int poff,
-                                       int count) {
-        for (int i = 0; i < count; i++) {
-            int raw = curr[i + coff] & 0xff;
-            int prior = prev[i + poff] & 0xff;
-
-            curr[i + coff] = (byte)(raw + prior);
-        }
-    }
-
-    private static void decodeAverageFilter(byte[] curr, int coff,
-                                            byte[] prev, int poff,
-                                            int count, int bpp) {
-        int raw, priorPixel, priorRow;
-
-        for (int i = 0; i < bpp; i++) {
-            raw = curr[i + coff] & 0xff;
-            priorRow = prev[i + poff] & 0xff;
-
-            curr[i + coff] = (byte)(raw + priorRow/2);
-        }
-
-        for (int i = bpp; i < count; i++) {
-            raw = curr[i + coff] & 0xff;
-            priorPixel = curr[i + coff - bpp] & 0xff;
-            priorRow = prev[i + poff] & 0xff;
-
-            curr[i + coff] = (byte)(raw + (priorPixel + priorRow)/2);
-        }
-    }
-
-    private static int paethPredictor(int a, int b, int c) {
-        int p = a + b - c;
-        int pa = Math.abs(p - a);
-        int pb = Math.abs(p - b);
-        int pc = Math.abs(p - c);
-
-        if ((pa <= pb) && (pa <= pc)) {
-            return a;
-        } else if (pb <= pc) {
-            return b;
-        } else {
-            return c;
-        }
-    }
-
-    private static void decodePaethFilter(byte[] curr, int coff,
-                                          byte[] prev, int poff,
-                                          int count, int bpp) {
-        int raw, priorPixel, priorRow, priorRowPixel;
-
-        for (int i = 0; i < bpp; i++) {
-            raw = curr[i + coff] & 0xff;
-            priorRow = prev[i + poff] & 0xff;
-
-            curr[i + coff] = (byte)(raw + priorRow);
-        }
-
-        for (int i = bpp; i < count; i++) {
-            raw = curr[i + coff] & 0xff;
-            priorPixel = curr[i + coff - bpp] & 0xff;
-            priorRow = prev[i + poff] & 0xff;
-            priorRowPixel = prev[i + poff - bpp] & 0xff;
-
-            curr[i + coff] = (byte)(raw + paethPredictor(priorPixel,
-                                                         priorRow,
-                                                         priorRowPixel));
-        }
-    }
-
-    private static final int[][] bandOffsets = {
-        null,
-        { 0 }, // G
-        { 0, 1 }, // GA in GA order
-        { 0, 1, 2 }, // RGB in RGB order
-        { 0, 1, 2, 3 } // RGBA in RGBA order
-    };
-
-    private WritableRaster createRaster(int width, int height, int bands,
-                                        int scanlineStride,
-                                        int bitDepth) {
-
-        DataBuffer dataBuffer;
-        WritableRaster ras = null;
-        Point origin = new Point(0, 0);
-        if ((bitDepth < 8) && (bands == 1)) {
-            dataBuffer = new DataBufferByte(height*scanlineStride);
-            ras = Raster.createPackedRaster(dataBuffer,
-                                            width, height,
-                                            bitDepth,
-                                            origin);
-        } else if (bitDepth <= 8) {
-            dataBuffer = new DataBufferByte(height*scanlineStride);
-            ras = Raster.createInterleavedRaster(dataBuffer,
-                                                 width, height,
-                                                 scanlineStride,
-                                                 bands,
-                                                 bandOffsets[bands],
-                                                 origin);
-        } else {
-            dataBuffer = new DataBufferUShort(height*scanlineStride);
-            ras = Raster.createInterleavedRaster(dataBuffer,
-                                                 width, height,
-                                                 scanlineStride,
-                                                 bands,
-                                                 bandOffsets[bands],
-                                                 origin);
-        }
-
-        return ras;
-    }
-
-    private void skipPass(int passWidth, int passHeight)
-        throws IOException, IIOException  {
-        if ((passWidth == 0) || (passHeight == 0)) {
-            return;
-        }
-
-        int inputBands = inputBandsForColorType[metadata.IHDR_colorType];
-        int bytesPerRow = (inputBands*passWidth*metadata.IHDR_bitDepth + 7)/8;
-
-        // Read the image row-by-row
-        for (int srcY = 0; srcY < passHeight; srcY++) {
-            // Skip filter byte and the remaining row bytes
-            pixelStream.skipBytes(1 + bytesPerRow);
-
-            // If read has been aborted, just return
-            // processReadAborted will be called later
-            if (abortRequested()) {
-                return;
-            }
-        }
-    }
-
-    private void updateImageProgress(int newPixels) {
-        pixelsDone += newPixels;
-        processImageProgress(100.0F*pixelsDone/totalPixels);
-    }
-
-    private void decodePass(int passNum,
-                            int xStart, int yStart,
-                            int xStep, int yStep,
-                            int passWidth, int passHeight) throws IOException {
-
-        if ((passWidth == 0) || (passHeight == 0)) {
-            return;
-        }
-
-        WritableRaster imRas = theImage.getWritableTile(0, 0);
-        int dstMinX = imRas.getMinX();
-        int dstMaxX = dstMinX + imRas.getWidth() - 1;
-        int dstMinY = imRas.getMinY();
-        int dstMaxY = dstMinY + imRas.getHeight() - 1;
-
-        // Determine which pixels will be updated in this pass
-        int[] vals =
-          ReaderUtil.computeUpdatedPixels(sourceRegion,
-                                          destinationOffset,
-                                          dstMinX, dstMinY,
-                                          dstMaxX, dstMaxY,
-                                          sourceXSubsampling,
-                                          sourceYSubsampling,
-                                          xStart, yStart,
-                                          passWidth, passHeight,
-                                          xStep, yStep);
-        int updateMinX = vals[0];
-        int updateMinY = vals[1];
-        int updateWidth = vals[2];
-        int updateXStep = vals[4];
-        int updateYStep = vals[5];
-
-        int bitDepth = metadata.IHDR_bitDepth;
-        int inputBands = inputBandsForColorType[metadata.IHDR_colorType];
-        int bytesPerPixel = (bitDepth == 16) ? 2 : 1;
-        bytesPerPixel *= inputBands;
-
-        int bytesPerRow = (inputBands*passWidth*bitDepth + 7)/8;
-        int eltsPerRow = (bitDepth == 16) ? bytesPerRow/2 : bytesPerRow;
-
-        // If no pixels need updating, just skip the input data
-        if (updateWidth == 0) {
-            for (int srcY = 0; srcY < passHeight; srcY++) {
-                // Update count of pixels read
-                updateImageProgress(passWidth);
-                // Skip filter byte and the remaining row bytes
-                pixelStream.skipBytes(1 + bytesPerRow);
-            }
-            return;
-        }
-
-        // Backwards map from destination pixels
-        // (dstX = updateMinX + k*updateXStep)
-        // to source pixels (sourceX), and then
-        // to offset and skip in passRow (srcX and srcXStep)
-        int sourceX =
-            (updateMinX - destinationOffset.x)*sourceXSubsampling +
-            sourceRegion.x;
-        int srcX = (sourceX - xStart)/xStep;
-
-        // Compute the step factor in the source
-        int srcXStep = updateXStep*sourceXSubsampling/xStep;
-
-        byte[] byteData = null;
-        short[] shortData = null;
-        byte[] curr = new byte[bytesPerRow];
-        byte[] prior = new byte[bytesPerRow];
-
-        // Create a 1-row tall Raster to hold the data
-        WritableRaster passRow = createRaster(passWidth, 1, inputBands,
-                                              eltsPerRow,
-                                              bitDepth);
-
-        // Create an array suitable for holding one pixel
-        int[] ps = passRow.getPixel(0, 0, (int[])null);
-
-        DataBuffer dataBuffer = passRow.getDataBuffer();
-        int type = dataBuffer.getDataType();
-        if (type == DataBuffer.TYPE_BYTE) {
-            byteData = ((DataBufferByte)dataBuffer).getData();
-        } else {
-            shortData = ((DataBufferUShort)dataBuffer).getData();
-        }
-
-        processPassStarted(theImage,
-                           passNum,
-                           sourceMinProgressivePass,
-                           sourceMaxProgressivePass,
-                           updateMinX, updateMinY,
-                           updateXStep, updateYStep,
-                           destinationBands);
-
-        // Handle source and destination bands
-        if (sourceBands != null) {
-            passRow = passRow.createWritableChild(0, 0,
-                                                  passRow.getWidth(), 1,
-                                                  0, 0,
-                                                  sourceBands);
-        }
-        if (destinationBands != null) {
-            imRas = imRas.createWritableChild(0, 0,
-                                              imRas.getWidth(),
-                                              imRas.getHeight(),
-                                              0, 0,
-                                              destinationBands);
-        }
-
-        // Determine if all of the relevant output bands have the
-        // same bit depth as the source data
-        boolean adjustBitDepths = false;
-        int[] outputSampleSize = imRas.getSampleModel().getSampleSize();
-        int numBands = outputSampleSize.length;
-        for (int b = 0; b < numBands; b++) {
-            if (outputSampleSize[b] != bitDepth) {
-                adjustBitDepths = true;
-                break;
-            }
-        }
-
-        // If the bit depths differ, create a lookup table per band to perform
-        // the conversion
-        int[][] scale = null;
-        if (adjustBitDepths) {
-            int maxInSample = (1 << bitDepth) - 1;
-            int halfMaxInSample = maxInSample/2;
-            scale = new int[numBands][];
-            for (int b = 0; b < numBands; b++) {
-                int maxOutSample = (1 << outputSampleSize[b]) - 1;
-                scale[b] = new int[maxInSample + 1];
-                for (int s = 0; s <= maxInSample; s++) {
-                    scale[b][s] =
-                        (s*maxOutSample + halfMaxInSample)/maxInSample;
-                }
-            }
-        }
-
-        // Limit passRow to relevant area for the case where we
-        // will can setRect to copy a contiguous span
-        boolean useSetRect = srcXStep == 1 &&
-            updateXStep == 1 &&
-            !adjustBitDepths &&
-            (imRas instanceof ByteInterleavedRaster);
-
-        if (useSetRect) {
-            passRow = passRow.createWritableChild(srcX, 0,
-                                                  updateWidth, 1,
-                                                  0, 0,
-                                                  null);
-        }
-
-        // Decode the (sub)image row-by-row
-        for (int srcY = 0; srcY < passHeight; srcY++) {
-            // Update count of pixels read
-            updateImageProgress(passWidth);
-
-            // Read the filter type byte and a row of data
-            int filter = pixelStream.read();
-            try {
-                // Swap curr and prior
-                byte[] tmp = prior;
-                prior = curr;
-                curr = tmp;
-
-                pixelStream.readFully(curr, 0, bytesPerRow);
-            } catch (java.util.zip.ZipException ze) {
-                // TODO - throw a more meaningful exception
-                throw ze;
-            }
-
-            switch (filter) {
-            case PNG_FILTER_NONE:
-                break;
-            case PNG_FILTER_SUB:
-                decodeSubFilter(curr, 0, bytesPerRow, bytesPerPixel);
-                break;
-            case PNG_FILTER_UP:
-                decodeUpFilter(curr, 0, prior, 0, bytesPerRow);
-                break;
-            case PNG_FILTER_AVERAGE:
-                decodeAverageFilter(curr, 0, prior, 0, bytesPerRow,
-                                    bytesPerPixel);
-                break;
-            case PNG_FILTER_PAETH:
-                decodePaethFilter(curr, 0, prior, 0, bytesPerRow,
-                                  bytesPerPixel);
-                break;
-            default:
-                throw new IIOException("Unknown row filter type (= " +
-                                       filter + ")!");
-            }
-
-            // Copy data into passRow byte by byte
-            if (bitDepth < 16) {
-                System.arraycopy(curr, 0, byteData, 0, bytesPerRow);
-            } else {
-                int idx = 0;
-                for (int j = 0; j < eltsPerRow; j++) {
-                    shortData[j] =
-                        (short)((curr[idx] << 8) | (curr[idx + 1] & 0xff));
-                    idx += 2;
-                }
-            }
-
-            // True Y position in source
-            int sourceY = srcY*yStep + yStart;
-            if ((sourceY >= sourceRegion.y) &&
-                (sourceY < sourceRegion.y + sourceRegion.height) &&
-                (((sourceY - sourceRegion.y) %
-                  sourceYSubsampling) == 0)) {
-
-                int dstY = destinationOffset.y +
-                    (sourceY - sourceRegion.y)/sourceYSubsampling;
-                if (dstY < dstMinY) {
-                    continue;
-                }
-                if (dstY > dstMaxY) {
-                    break;
-                }
-
-                if (useSetRect) {
-                    imRas.setRect(updateMinX, dstY, passRow);
-                } else {
-                    int newSrcX = srcX;
-
-                    for (int dstX = updateMinX;
-                         dstX < updateMinX + updateWidth;
-                         dstX += updateXStep) {
-
-                        passRow.getPixel(newSrcX, 0, ps);
-                        if (adjustBitDepths) {
-                            for (int b = 0; b < numBands; b++) {
-                                ps[b] = scale[b][ps[b]];
-                            }
-                        }
-                        imRas.setPixel(dstX, dstY, ps);
-                        newSrcX += srcXStep;
-                    }
-                }
-
-                processImageUpdate(theImage,
-                                   updateMinX, dstY,
-                                   updateWidth, 1,
-                                   updateXStep, updateYStep,
-                                   destinationBands);
-
-                // If read has been aborted, just return
-                // processReadAborted will be called later
-                if (abortRequested()) {
-                    return;
-                }
-            }
-        }
-
-        processPassComplete(theImage);
-    }
-
-    private void decodeImage()
-        throws IOException, IIOException  {
-        int width = metadata.IHDR_width;
-        int height = metadata.IHDR_height;
-
-        this.pixelsDone = 0;
-        this.totalPixels = width*height;
-
-        clearAbortRequest();
-
-        if (metadata.IHDR_interlaceMethod == 0) {
-            decodePass(0, 0, 0, 1, 1, width, height);
-        } else {
-            for (int i = 0; i <= sourceMaxProgressivePass; i++) {
-                int XOffset = adam7XOffset[i];
-                int YOffset = adam7YOffset[i];
-                int XSubsampling = adam7XSubsampling[i];
-                int YSubsampling = adam7YSubsampling[i];
-                int xbump = adam7XSubsampling[i + 1] - 1;
-                int ybump = adam7YSubsampling[i + 1] - 1;
-
-                if (i >= sourceMinProgressivePass) {
-                    decodePass(i,
-                               XOffset,
-                               YOffset,
-                               XSubsampling,
-                               YSubsampling,
-                               (width + xbump)/XSubsampling,
-                               (height + ybump)/YSubsampling);
-                } else {
-                    skipPass((width + xbump)/XSubsampling,
-                             (height + ybump)/YSubsampling);
-                }
-
-                // If read has been aborted, just return
-                // processReadAborted will be called later
-                if (abortRequested()) {
-                    return;
-                }
-            }
-        }
-    }
-
-    private void readImage(ImageReadParam param) throws IIOException {
-        readMetadata();
-
-        int width = metadata.IHDR_width;
-        int height = metadata.IHDR_height;
-
-        // Init default values
-        sourceXSubsampling = 1;
-        sourceYSubsampling = 1;
-        sourceMinProgressivePass = 0;
-        sourceMaxProgressivePass = 6;
-        sourceBands = null;
-        destinationBands = null;
-        destinationOffset = new Point(0, 0);
-
-        // If an ImageReadParam is available, get values from it
-        if (param != null) {
-            sourceXSubsampling = param.getSourceXSubsampling();
-            sourceYSubsampling = param.getSourceYSubsampling();
-
-            sourceMinProgressivePass =
-                Math.max(param.getSourceMinProgressivePass(), 0);
-            sourceMaxProgressivePass =
-                Math.min(param.getSourceMaxProgressivePass(), 6);
-
-            sourceBands = param.getSourceBands();
-            destinationBands = param.getDestinationBands();
-            destinationOffset = param.getDestinationOffset();
-        }
-        Inflater inf = null;
-        try {
-            stream.seek(imageStartPosition);
-
-            Enumeration<InputStream> e = new PNGImageDataEnumeration(stream);
-            InputStream is = new SequenceInputStream(e);
-
-           /* InflaterInputStream uses an Inflater instance which consumes
-            * native (non-GC visible) resources. This is normally implicitly
-            * freed when the stream is closed. However since the
-            * InflaterInputStream wraps a client-supplied input stream,
-            * we cannot close it.
-            * But the app may depend on GC finalization to close the stream.
-            * Therefore to ensure timely freeing of native resources we
-            * explicitly create the Inflater instance and free its resources
-            * when we are done with the InflaterInputStream by calling
-            * inf.end();
-            */
-            inf = new Inflater();
-            is = new InflaterInputStream(is, inf);
-            is = new BufferedInputStream(is);
-            this.pixelStream = new DataInputStream(is);
-
-            theImage = getDestination(param,
-                                      getImageTypes(0),
-                                      width,
-                                      height);
-
-            Rectangle destRegion = new Rectangle(0, 0, 0, 0);
-            sourceRegion = new Rectangle(0, 0, 0, 0);
-            computeRegions(param, width, height,
-                           theImage,
-                           sourceRegion, destRegion);
-            destinationOffset.setLocation(destRegion.getLocation());
-
-            // At this point the header has been read and we know
-            // how many bands are in the image, so perform checking
-            // of the read param.
-            int colorType = metadata.IHDR_colorType;
-            checkReadParamBandSettings(param,
-                                       inputBandsForColorType[colorType],
-                                      theImage.getSampleModel().getNumBands());
-
-            processImageStarted(0);
-            decodeImage();
-            if (abortRequested()) {
-                processReadAborted();
-            } else {
-                processImageComplete();
-            }
-        } catch (IOException e) {
-            throw new IIOException("Error reading PNG image data", e);
-        } finally {
-            if (inf != null) {
-                inf.end();
-            }
-        }
-    }
-
-    public int getNumImages(boolean allowSearch) throws IIOException {
-        if (stream == null) {
-            throw new IllegalStateException("No input source set!");
-        }
-        if (seekForwardOnly && allowSearch) {
-            throw new IllegalStateException
-                ("seekForwardOnly and allowSearch can't both be true!");
-        }
-        return 1;
-    }
-
-    public int getWidth(int imageIndex) throws IIOException {
-        if (imageIndex != 0) {
-            throw new IndexOutOfBoundsException("imageIndex != 0!");
-        }
-
-        readHeader();
-
-        return metadata.IHDR_width;
-    }
-
-    public int getHeight(int imageIndex) throws IIOException {
-        if (imageIndex != 0) {
-            throw new IndexOutOfBoundsException("imageIndex != 0!");
-        }
-
-        readHeader();
-
-        return metadata.IHDR_height;
-    }
-
-    public Iterator<ImageTypeSpecifier> getImageTypes(int imageIndex)
-      throws IIOException
-    {
-        if (imageIndex != 0) {
-            throw new IndexOutOfBoundsException("imageIndex != 0!");
-        }
-
-        readHeader();
-
-        ArrayList<ImageTypeSpecifier> l =
-            new ArrayList<ImageTypeSpecifier>(1);
-
-        ColorSpace rgb;
-        ColorSpace gray;
-        int[] bandOffsets;
-
-        int bitDepth = metadata.IHDR_bitDepth;
-        int colorType = metadata.IHDR_colorType;
-
-        int dataType;
-        if (bitDepth <= 8) {
-            dataType = DataBuffer.TYPE_BYTE;
-        } else {
-            dataType = DataBuffer.TYPE_USHORT;
-        }
-
-        switch (colorType) {
-        case PNG_COLOR_GRAY:
-            // Packed grayscale
-            l.add(ImageTypeSpecifier.createGrayscale(bitDepth,
-                                                     dataType,
-                                                     false));
-            break;
-
-        case PNG_COLOR_RGB:
-            if (bitDepth == 8) {
-                // some standard types of buffered images
-                // which can be used as destination
-                l.add(ImageTypeSpecifier.createFromBufferedImageType(
-                          BufferedImage.TYPE_3BYTE_BGR));
-
-                l.add(ImageTypeSpecifier.createFromBufferedImageType(
-                          BufferedImage.TYPE_INT_RGB));
-
-                l.add(ImageTypeSpecifier.createFromBufferedImageType(
-                          BufferedImage.TYPE_INT_BGR));
-
-            }
-            // Component R, G, B
-            rgb = ColorSpace.getInstance(ColorSpace.CS_sRGB);
-            bandOffsets = new int[3];
-            bandOffsets[0] = 0;
-            bandOffsets[1] = 1;
-            bandOffsets[2] = 2;
-            l.add(ImageTypeSpecifier.createInterleaved(rgb,
-                                                       bandOffsets,
-                                                       dataType,
-                                                       false,
-                                                       false));
-            break;
-
-        case PNG_COLOR_PALETTE:
-            readMetadata(); // Need tRNS chunk
-
-            /*
-             * The PLTE chunk spec says:
-             *
-             * The number of palette entries must not exceed the range that
-             * can be represented in the image bit depth (for example, 2^4 = 16
-             * for a bit depth of 4). It is permissible to have fewer entries
-             * than the bit depth would allow. In that case, any out-of-range
-             * pixel value found in the image data is an error.
-             *
-             * http://www.libpng.org/pub/png/spec/1.2/PNG-Chunks.html#C.PLTE
-             *
-             * Consequently, the case when the palette length is smaller than
-             * 2^bitDepth is legal in the view of PNG spec.
-             *
-             * However the spec of createIndexed() method demands the exact
-             * equality of the palette lengh and number of possible palette
-             * entries (2^bitDepth).
-             *
-             * {@link javax.imageio.ImageTypeSpecifier.html#createIndexed}
-             *
-             * In order to avoid this contradiction we need to extend the
-             * palette arrays to the limit defined by the bitDepth.
-             */
-
-            int plength = 1 << bitDepth;
-
-            byte[] red = metadata.PLTE_red;
-            byte[] green = metadata.PLTE_green;
-            byte[] blue = metadata.PLTE_blue;
-
-            if (metadata.PLTE_red.length < plength) {
-                red = Arrays.copyOf(metadata.PLTE_red, plength);
-                Arrays.fill(red, metadata.PLTE_red.length, plength,
-                            metadata.PLTE_red[metadata.PLTE_red.length - 1]);
-
-                green = Arrays.copyOf(metadata.PLTE_green, plength);
-                Arrays.fill(green, metadata.PLTE_green.length, plength,
-                            metadata.PLTE_green[metadata.PLTE_green.length - 1]);
-
-                blue = Arrays.copyOf(metadata.PLTE_blue, plength);
-                Arrays.fill(blue, metadata.PLTE_blue.length, plength,
-                            metadata.PLTE_blue[metadata.PLTE_blue.length - 1]);
-
-            }
-
-            // Alpha from tRNS chunk may have fewer entries than
-            // the RGB LUTs from the PLTE chunk; if so, pad with
-            // 255.
-            byte[] alpha = null;
-            if (metadata.tRNS_present && (metadata.tRNS_alpha != null)) {
-                if (metadata.tRNS_alpha.length == red.length) {
-                    alpha = metadata.tRNS_alpha;
-                } else {
-                    alpha = Arrays.copyOf(metadata.tRNS_alpha, red.length);
-                    Arrays.fill(alpha,
-                                metadata.tRNS_alpha.length,
-                                red.length, (byte)255);
-                }
-            }
-
-            l.add(ImageTypeSpecifier.createIndexed(red, green,
-                                                   blue, alpha,
-                                                   bitDepth,
-                                                   DataBuffer.TYPE_BYTE));
-            break;
-
-        case PNG_COLOR_GRAY_ALPHA:
-            // Component G, A
-            gray = ColorSpace.getInstance(ColorSpace.CS_GRAY);
-            bandOffsets = new int[2];
-            bandOffsets[0] = 0;
-            bandOffsets[1] = 1;
-            l.add(ImageTypeSpecifier.createInterleaved(gray,
-                                                       bandOffsets,
-                                                       dataType,
-                                                       true,
-                                                       false));
-            break;
-
-        case PNG_COLOR_RGB_ALPHA:
-            if (bitDepth == 8) {
-                // some standard types of buffered images
-                // wich can be used as destination
-                l.add(ImageTypeSpecifier.createFromBufferedImageType(
-                          BufferedImage.TYPE_4BYTE_ABGR));
-
-                l.add(ImageTypeSpecifier.createFromBufferedImageType(
-                          BufferedImage.TYPE_INT_ARGB));
-            }
-
-            // Component R, G, B, A (non-premultiplied)
-            rgb = ColorSpace.getInstance(ColorSpace.CS_sRGB);
-            bandOffsets = new int[4];
-            bandOffsets[0] = 0;
-            bandOffsets[1] = 1;
-            bandOffsets[2] = 2;
-            bandOffsets[3] = 3;
-
-            l.add(ImageTypeSpecifier.createInterleaved(rgb,
-                                                       bandOffsets,
-                                                       dataType,
-                                                       true,
-                                                       false));
-            break;
-
-        default:
-            break;
-        }
-
-        return l.iterator();
-    }
-
-    /*
-     * Super class implementation uses first element
-     * of image types list as raw image type.
-     *
-     * Also, super implementation uses first element of this list
-     * as default destination type image read param does not specify
-     * anything other.
-     *
-     * However, in case of RGB and RGBA color types, raw image type
-     * produces buffered image of custom type. It causes some
-     * performance degradation of subsequent rendering operations.
-     *
-     * To resolve this contradiction we put standard image types
-     * at the first positions of image types list (to produce standard
-     * images by default) and put raw image type (which is custom)
-     * at the last position of this list.
-     *
-     * After this changes we should override getRawImageType()
-     * to return last element of image types list.
-     */
-    public ImageTypeSpecifier getRawImageType(int imageIndex)
-      throws IOException {
-
-        Iterator<ImageTypeSpecifier> types = getImageTypes(imageIndex);
-        ImageTypeSpecifier raw = null;
-        do {
-            raw = types.next();
-        } while (types.hasNext());
-        return raw;
-    }
-
-    public ImageReadParam getDefaultReadParam() {
-        return new ImageReadParam();
-    }
-
-    public IIOMetadata getStreamMetadata()
-        throws IIOException {
-        return null;
-    }
-
-    public IIOMetadata getImageMetadata(int imageIndex) throws IIOException {
-        if (imageIndex != 0) {
-            throw new IndexOutOfBoundsException("imageIndex != 0!");
-        }
-        readMetadata();
-        return metadata;
-    }
-
-    public BufferedImage read(int imageIndex, ImageReadParam param)
-        throws IIOException {
-        if (imageIndex != 0) {
-            throw new IndexOutOfBoundsException("imageIndex != 0!");
-        }
-
-        readImage(param);
-        return theImage;
-    }
-
-    public void reset() {
-        super.reset();
-        resetStreamSettings();
-    }
-
-    private void resetStreamSettings() {
-        gotHeader = false;
-        gotMetadata = false;
-        metadata = null;
-        pixelStream = null;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/plugins/png/PNGImageReaderSpi.java b/ojluni/src/main/java/com/sun/imageio/plugins/png/PNGImageReaderSpi.java
deleted file mode 100755
index 1385595..0000000
--- a/ojluni/src/main/java/com/sun/imageio/plugins/png/PNGImageReaderSpi.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Copyright (c) 2000, 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
- * 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.imageio.plugins.png;
-
-import java.io.IOException;
-import java.util.Locale;
-import java.util.Iterator;
-import javax.imageio.ImageReader;
-import javax.imageio.spi.ImageReaderSpi;
-import javax.imageio.metadata.IIOMetadataFormat;
-import javax.imageio.metadata.IIOMetadataFormatImpl;
-import javax.imageio.stream.ImageInputStream;
-
-public class PNGImageReaderSpi extends ImageReaderSpi {
-
-    private static final String vendorName = "Oracle Corporation";
-
-    private static final String version = "1.0";
-
-    private static final String[] names = { "png", "PNG" };
-
-    private static final String[] suffixes = { "png" };
-
-    private static final String[] MIMETypes = { "image/png", "image/x-png" };
-
-    private static final String readerClassName =
-        "com.sun.imageio.plugins.png.PNGImageReader";
-
-    private static final String[] writerSpiNames = {
-        "com.sun.imageio.plugins.png.PNGImageWriterSpi"
-    };
-
-    public PNGImageReaderSpi() {
-        super(vendorName,
-              version,
-              names,
-              suffixes,
-              MIMETypes,
-              readerClassName,
-              new Class[] { ImageInputStream.class },
-              writerSpiNames,
-              false,
-              null, null,
-              null, null,
-              true,
-              PNGMetadata.nativeMetadataFormatName,
-              "com.sun.imageio.plugins.png.PNGMetadataFormat",
-              null, null
-              );
-    }
-
-    public String getDescription(Locale locale) {
-        return "Standard PNG image reader";
-    }
-
-    public boolean canDecodeInput(Object input) throws IOException {
-        if (!(input instanceof ImageInputStream)) {
-            return false;
-        }
-
-        ImageInputStream stream = (ImageInputStream)input;
-        byte[] b = new byte[8];
-        stream.mark();
-        stream.readFully(b);
-        stream.reset();
-
-        return (b[0] == (byte)137 &&
-                b[1] == (byte)80 &&
-                b[2] == (byte)78 &&
-                b[3] == (byte)71 &&
-                b[4] == (byte)13 &&
-                b[5] == (byte)10 &&
-                b[6] == (byte)26 &&
-                b[7] == (byte)10);
-    }
-
-    public ImageReader createReaderInstance(Object extension) {
-        return new PNGImageReader(this);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/plugins/png/PNGImageWriter.java b/ojluni/src/main/java/com/sun/imageio/plugins/png/PNGImageWriter.java
deleted file mode 100755
index 350d2b6..0000000
--- a/ojluni/src/main/java/com/sun/imageio/plugins/png/PNGImageWriter.java
+++ /dev/null
@@ -1,1171 +0,0 @@
-/*
- * Copyright (c) 2000, 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.
- */
-
-package com.sun.imageio.plugins.png;
-
-import java.awt.Rectangle;
-import java.awt.image.ColorModel;
-import java.awt.image.IndexColorModel;
-import java.awt.image.Raster;
-import java.awt.image.WritableRaster;
-import java.awt.image.RenderedImage;
-import java.awt.image.SampleModel;
-import java.io.ByteArrayOutputStream;
-import java.io.DataOutput;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.util.Iterator;
-import java.util.Locale;
-import java.util.zip.Deflater;
-import java.util.zip.DeflaterOutputStream;
-import javax.imageio.IIOException;
-import javax.imageio.IIOImage;
-import javax.imageio.ImageTypeSpecifier;
-import javax.imageio.ImageWriteParam;
-import javax.imageio.ImageWriter;
-import javax.imageio.metadata.IIOMetadata;
-import javax.imageio.metadata.IIOMetadata;
-import javax.imageio.spi.ImageWriterSpi;
-import javax.imageio.stream.ImageOutputStream;
-import javax.imageio.stream.ImageOutputStreamImpl;
-
-class CRC {
-
-    private static int[] crcTable = new int[256];
-    private int crc = 0xffffffff;
-
-    static {
-        // Initialize CRC table
-        for (int n = 0; n < 256; n++) {
-            int c = n;
-            for (int k = 0; k < 8; k++) {
-                if ((c & 1) == 1) {
-                    c = 0xedb88320 ^ (c >>> 1);
-                } else {
-                    c >>>= 1;
-                }
-
-                crcTable[n] = c;
-            }
-        }
-    }
-
-    public CRC() {}
-
-    public void reset() {
-        crc = 0xffffffff;
-    }
-
-    public void update(byte[] data, int off, int len) {
-        for (int n = 0; n < len; n++) {
-            crc = crcTable[(crc ^ data[off + n]) & 0xff] ^ (crc >>> 8);
-        }
-    }
-
-    public void update(int data) {
-        crc = crcTable[(crc ^ data) & 0xff] ^ (crc >>> 8);
-    }
-
-    public int getValue() {
-        return crc ^ 0xffffffff;
-    }
-}
-
-
-final class ChunkStream extends ImageOutputStreamImpl {
-
-    private ImageOutputStream stream;
-    private long startPos;
-    private CRC crc = new CRC();
-
-    public ChunkStream(int type, ImageOutputStream stream) throws IOException {
-        this.stream = stream;
-        this.startPos = stream.getStreamPosition();
-
-        stream.writeInt(-1); // length, will backpatch
-        writeInt(type);
-    }
-
-    public int read() throws IOException {
-        throw new RuntimeException("Method not available");
-    }
-
-    public int read(byte[] b, int off, int len) throws IOException {
-        throw new RuntimeException("Method not available");
-    }
-
-    public void write(byte[] b, int off, int len) throws IOException {
-        crc.update(b, off, len);
-        stream.write(b, off, len);
-    }
-
-    public void write(int b) throws IOException {
-        crc.update(b);
-        stream.write(b);
-    }
-
-    public void finish() throws IOException {
-        // Write CRC
-        stream.writeInt(crc.getValue());
-
-        // Write length
-        long pos = stream.getStreamPosition();
-        stream.seek(startPos);
-        stream.writeInt((int)(pos - startPos) - 12);
-
-        // Return to end of chunk and flush to minimize buffering
-        stream.seek(pos);
-        stream.flushBefore(pos);
-    }
-
-    protected void finalize() throws Throwable {
-        // Empty finalizer (for improved performance; no need to call
-        // super.finalize() in this case)
-    }
-}
-
-// Compress output and write as a series of 'IDAT' chunks of
-// fixed length.
-final class IDATOutputStream extends ImageOutputStreamImpl {
-
-    private static byte[] chunkType = {
-        (byte)'I', (byte)'D', (byte)'A', (byte)'T'
-    };
-
-    private ImageOutputStream stream;
-    private int chunkLength;
-    private long startPos;
-    private CRC crc = new CRC();
-
-    Deflater def = new Deflater(Deflater.BEST_COMPRESSION);
-    byte[] buf = new byte[512];
-
-    private int bytesRemaining;
-
-    public IDATOutputStream(ImageOutputStream stream, int chunkLength)
-        throws IOException {
-        this.stream = stream;
-        this.chunkLength = chunkLength;
-        startChunk();
-    }
-
-    private void startChunk() throws IOException {
-        crc.reset();
-        this.startPos = stream.getStreamPosition();
-        stream.writeInt(-1); // length, will backpatch
-
-        crc.update(chunkType, 0, 4);
-        stream.write(chunkType, 0, 4);
-
-        this.bytesRemaining = chunkLength;
-    }
-
-    private void finishChunk() throws IOException {
-        // Write CRC
-        stream.writeInt(crc.getValue());
-
-        // Write length
-        long pos = stream.getStreamPosition();
-        stream.seek(startPos);
-        stream.writeInt((int)(pos - startPos) - 12);
-
-        // Return to end of chunk and flush to minimize buffering
-        stream.seek(pos);
-        stream.flushBefore(pos);
-    }
-
-    public int read() throws IOException {
-        throw new RuntimeException("Method not available");
-    }
-
-    public int read(byte[] b, int off, int len) throws IOException {
-        throw new RuntimeException("Method not available");
-    }
-
-    public void write(byte[] b, int off, int len) throws IOException {
-        if (len == 0) {
-            return;
-        }
-
-        if (!def.finished()) {
-            def.setInput(b, off, len);
-            while (!def.needsInput()) {
-                deflate();
-            }
-        }
-    }
-
-    public void deflate() throws IOException {
-        int len = def.deflate(buf, 0, buf.length);
-        int off = 0;
-
-        while (len > 0) {
-            if (bytesRemaining == 0) {
-                finishChunk();
-                startChunk();
-            }
-
-            int nbytes = Math.min(len, bytesRemaining);
-            crc.update(buf, off, nbytes);
-            stream.write(buf, off, nbytes);
-
-            off += nbytes;
-            len -= nbytes;
-            bytesRemaining -= nbytes;
-        }
-    }
-
-    public void write(int b) throws IOException {
-        byte[] wbuf = new byte[1];
-        wbuf[0] = (byte)b;
-        write(wbuf, 0, 1);
-    }
-
-    public void finish() throws IOException {
-        try {
-            if (!def.finished()) {
-                def.finish();
-                while (!def.finished()) {
-                    deflate();
-                }
-            }
-            finishChunk();
-        } finally {
-            def.end();
-        }
-    }
-
-    protected void finalize() throws Throwable {
-        // Empty finalizer (for improved performance; no need to call
-        // super.finalize() in this case)
-    }
-}
-
-
-class PNGImageWriteParam extends ImageWriteParam {
-
-    public PNGImageWriteParam(Locale locale) {
-        super();
-        this.canWriteProgressive = true;
-        this.locale = locale;
-    }
-}
-
-/**
- */
-public class PNGImageWriter extends ImageWriter {
-
-    ImageOutputStream stream = null;
-
-    PNGMetadata metadata = null;
-
-    // Factors from the ImageWriteParam
-    int sourceXOffset = 0;
-    int sourceYOffset = 0;
-    int sourceWidth = 0;
-    int sourceHeight = 0;
-    int[] sourceBands = null;
-    int periodX = 1;
-    int periodY = 1;
-
-    int numBands;
-    int bpp;
-
-    RowFilter rowFilter = new RowFilter();
-    byte[] prevRow = null;
-    byte[] currRow = null;
-    byte[][] filteredRows = null;
-
-    // Per-band scaling tables
-    //
-    // After the first call to initializeScaleTables, either scale and scale0
-    // will be valid, or scaleh and scalel will be valid, but not both.
-    //
-    // The tables will be designed for use with a set of input but depths
-    // given by sampleSize, and an output bit depth given by scalingBitDepth.
-    //
-    int[] sampleSize = null; // Sample size per band, in bits
-    int scalingBitDepth = -1; // Output bit depth of the scaling tables
-
-    // Tables for 1, 2, 4, or 8 bit output
-    byte[][] scale = null; // 8 bit table
-    byte[] scale0 = null; // equivalent to scale[0]
-
-    // Tables for 16 bit output
-    byte[][] scaleh = null; // High bytes of output
-    byte[][] scalel = null; // Low bytes of output
-
-    int totalPixels; // Total number of pixels to be written by write_IDAT
-    int pixelsDone; // Running count of pixels written by write_IDAT
-
-    public PNGImageWriter(ImageWriterSpi originatingProvider) {
-        super(originatingProvider);
-    }
-
-    public void setOutput(Object output) {
-        super.setOutput(output);
-        if (output != null) {
-            if (!(output instanceof ImageOutputStream)) {
-                throw new IllegalArgumentException("output not an ImageOutputStream!");
-            }
-            this.stream = (ImageOutputStream)output;
-        } else {
-            this.stream = null;
-        }
-    }
-
-    private static int[] allowedProgressivePasses = { 1, 7 };
-
-    public ImageWriteParam getDefaultWriteParam() {
-        return new PNGImageWriteParam(getLocale());
-    }
-
-    public IIOMetadata getDefaultStreamMetadata(ImageWriteParam param) {
-        return null;
-    }
-
-    public IIOMetadata getDefaultImageMetadata(ImageTypeSpecifier imageType,
-                                               ImageWriteParam param) {
-        PNGMetadata m = new PNGMetadata();
-        m.initialize(imageType, imageType.getSampleModel().getNumBands());
-        return m;
-    }
-
-    public IIOMetadata convertStreamMetadata(IIOMetadata inData,
-                                             ImageWriteParam param) {
-        return null;
-    }
-
-    public IIOMetadata convertImageMetadata(IIOMetadata inData,
-                                            ImageTypeSpecifier imageType,
-                                            ImageWriteParam param) {
-        // TODO - deal with imageType
-        if (inData instanceof PNGMetadata) {
-            return (PNGMetadata)((PNGMetadata)inData).clone();
-        } else {
-            return new PNGMetadata(inData);
-        }
-    }
-
-    private void write_magic() throws IOException {
-        // Write signature
-        byte[] magic = { (byte)137, 80, 78, 71, 13, 10, 26, 10 };
-        stream.write(magic);
-    }
-
-    private void write_IHDR() throws IOException {
-        // Write IHDR chunk
-        ChunkStream cs = new ChunkStream(PNGImageReader.IHDR_TYPE, stream);
-        cs.writeInt(metadata.IHDR_width);
-        cs.writeInt(metadata.IHDR_height);
-        cs.writeByte(metadata.IHDR_bitDepth);
-        cs.writeByte(metadata.IHDR_colorType);
-        if (metadata.IHDR_compressionMethod != 0) {
-            throw new IIOException(
-"Only compression method 0 is defined in PNG 1.1");
-        }
-        cs.writeByte(metadata.IHDR_compressionMethod);
-        if (metadata.IHDR_filterMethod != 0) {
-            throw new IIOException(
-"Only filter method 0 is defined in PNG 1.1");
-        }
-        cs.writeByte(metadata.IHDR_filterMethod);
-        if (metadata.IHDR_interlaceMethod < 0 ||
-            metadata.IHDR_interlaceMethod > 1) {
-            throw new IIOException(
-"Only interlace methods 0 (node) and 1 (adam7) are defined in PNG 1.1");
-        }
-        cs.writeByte(metadata.IHDR_interlaceMethod);
-        cs.finish();
-    }
-
-    private void write_cHRM() throws IOException {
-        if (metadata.cHRM_present) {
-            ChunkStream cs = new ChunkStream(PNGImageReader.cHRM_TYPE, stream);
-            cs.writeInt(metadata.cHRM_whitePointX);
-            cs.writeInt(metadata.cHRM_whitePointY);
-            cs.writeInt(metadata.cHRM_redX);
-            cs.writeInt(metadata.cHRM_redY);
-            cs.writeInt(metadata.cHRM_greenX);
-            cs.writeInt(metadata.cHRM_greenY);
-            cs.writeInt(metadata.cHRM_blueX);
-            cs.writeInt(metadata.cHRM_blueY);
-            cs.finish();
-        }
-    }
-
-    private void write_gAMA() throws IOException {
-        if (metadata.gAMA_present) {
-            ChunkStream cs = new ChunkStream(PNGImageReader.gAMA_TYPE, stream);
-            cs.writeInt(metadata.gAMA_gamma);
-            cs.finish();
-        }
-    }
-
-    private void write_iCCP() throws IOException {
-        if (metadata.iCCP_present) {
-            ChunkStream cs = new ChunkStream(PNGImageReader.iCCP_TYPE, stream);
-            cs.writeBytes(metadata.iCCP_profileName);
-            cs.writeByte(0); // null terminator
-
-            cs.writeByte(metadata.iCCP_compressionMethod);
-            cs.write(metadata.iCCP_compressedProfile);
-            cs.finish();
-        }
-    }
-
-    private void write_sBIT() throws IOException {
-        if (metadata.sBIT_present) {
-            ChunkStream cs = new ChunkStream(PNGImageReader.sBIT_TYPE, stream);
-            int colorType = metadata.IHDR_colorType;
-            if (metadata.sBIT_colorType != colorType) {
-                processWarningOccurred(0,
-"sBIT metadata has wrong color type.\n" +
-"The chunk will not be written.");
-                return;
-            }
-
-            if (colorType == PNGImageReader.PNG_COLOR_GRAY ||
-                colorType == PNGImageReader.PNG_COLOR_GRAY_ALPHA) {
-                cs.writeByte(metadata.sBIT_grayBits);
-            } else if (colorType == PNGImageReader.PNG_COLOR_RGB ||
-                       colorType == PNGImageReader.PNG_COLOR_PALETTE ||
-                       colorType == PNGImageReader.PNG_COLOR_RGB_ALPHA) {
-                cs.writeByte(metadata.sBIT_redBits);
-                cs.writeByte(metadata.sBIT_greenBits);
-                cs.writeByte(metadata.sBIT_blueBits);
-            }
-
-            if (colorType == PNGImageReader.PNG_COLOR_GRAY_ALPHA ||
-                colorType == PNGImageReader.PNG_COLOR_RGB_ALPHA) {
-                cs.writeByte(metadata.sBIT_alphaBits);
-            }
-            cs.finish();
-        }
-    }
-
-    private void write_sRGB() throws IOException {
-        if (metadata.sRGB_present) {
-            ChunkStream cs = new ChunkStream(PNGImageReader.sRGB_TYPE, stream);
-            cs.writeByte(metadata.sRGB_renderingIntent);
-            cs.finish();
-        }
-    }
-
-    private void write_PLTE() throws IOException {
-        if (metadata.PLTE_present) {
-            if (metadata.IHDR_colorType == PNGImageReader.PNG_COLOR_GRAY ||
-              metadata.IHDR_colorType == PNGImageReader.PNG_COLOR_GRAY_ALPHA) {
-                // PLTE cannot occur in a gray image
-
-                processWarningOccurred(0,
-"A PLTE chunk may not appear in a gray or gray alpha image.\n" +
-"The chunk will not be written");
-                return;
-            }
-
-            ChunkStream cs = new ChunkStream(PNGImageReader.PLTE_TYPE, stream);
-
-            int numEntries = metadata.PLTE_red.length;
-            byte[] palette = new byte[numEntries*3];
-            int index = 0;
-            for (int i = 0; i < numEntries; i++) {
-                palette[index++] = metadata.PLTE_red[i];
-                palette[index++] = metadata.PLTE_green[i];
-                palette[index++] = metadata.PLTE_blue[i];
-            }
-
-            cs.write(palette);
-            cs.finish();
-        }
-    }
-
-    private void write_hIST() throws IOException, IIOException {
-        if (metadata.hIST_present) {
-            ChunkStream cs = new ChunkStream(PNGImageReader.hIST_TYPE, stream);
-
-            if (!metadata.PLTE_present) {
-                throw new IIOException("hIST chunk without PLTE chunk!");
-            }
-
-            cs.writeChars(metadata.hIST_histogram,
-                          0, metadata.hIST_histogram.length);
-            cs.finish();
-        }
-    }
-
-    private void write_tRNS() throws IOException, IIOException {
-        if (metadata.tRNS_present) {
-            ChunkStream cs = new ChunkStream(PNGImageReader.tRNS_TYPE, stream);
-            int colorType = metadata.IHDR_colorType;
-            int chunkType = metadata.tRNS_colorType;
-
-            // Special case: image is RGB and chunk is Gray
-            // Promote chunk contents to RGB
-            int chunkRed = metadata.tRNS_red;
-            int chunkGreen = metadata.tRNS_green;
-            int chunkBlue = metadata.tRNS_blue;
-            if (colorType == PNGImageReader.PNG_COLOR_RGB &&
-                chunkType == PNGImageReader.PNG_COLOR_GRAY) {
-                chunkType = colorType;
-                chunkRed = chunkGreen = chunkBlue =
-                    metadata.tRNS_gray;
-            }
-
-            if (chunkType != colorType) {
-                processWarningOccurred(0,
-"tRNS metadata has incompatible color type.\n" +
-"The chunk will not be written.");
-                return;
-            }
-
-            if (colorType == PNGImageReader.PNG_COLOR_PALETTE) {
-                if (!metadata.PLTE_present) {
-                    throw new IIOException("tRNS chunk without PLTE chunk!");
-                }
-                cs.write(metadata.tRNS_alpha);
-            } else if (colorType == PNGImageReader.PNG_COLOR_GRAY) {
-                cs.writeShort(metadata.tRNS_gray);
-            } else if (colorType == PNGImageReader.PNG_COLOR_RGB) {
-                cs.writeShort(chunkRed);
-                cs.writeShort(chunkGreen);
-                cs.writeShort(chunkBlue);
-            } else {
-                throw new IIOException("tRNS chunk for color type 4 or 6!");
-            }
-            cs.finish();
-        }
-    }
-
-    private void write_bKGD() throws IOException {
-        if (metadata.bKGD_present) {
-            ChunkStream cs = new ChunkStream(PNGImageReader.bKGD_TYPE, stream);
-            int colorType = metadata.IHDR_colorType & 0x3;
-            int chunkType = metadata.bKGD_colorType;
-
-            // Special case: image is RGB(A) and chunk is Gray
-            // Promote chunk contents to RGB
-            int chunkRed = metadata.bKGD_red;
-            int chunkGreen = metadata.bKGD_red;
-            int chunkBlue = metadata.bKGD_red;
-            if (colorType == PNGImageReader.PNG_COLOR_RGB &&
-                chunkType == PNGImageReader.PNG_COLOR_GRAY) {
-                // Make a gray bKGD chunk look like RGB
-                chunkType = colorType;
-                chunkRed = chunkGreen = chunkBlue =
-                    metadata.bKGD_gray;
-            }
-
-            // Ignore status of alpha in colorType
-            if (chunkType != colorType) {
-                processWarningOccurred(0,
-"bKGD metadata has incompatible color type.\n" +
-"The chunk will not be written.");
-                return;
-            }
-
-            if (colorType == PNGImageReader.PNG_COLOR_PALETTE) {
-                cs.writeByte(metadata.bKGD_index);
-            } else if (colorType == PNGImageReader.PNG_COLOR_GRAY ||
-                       colorType == PNGImageReader.PNG_COLOR_GRAY_ALPHA) {
-                cs.writeShort(metadata.bKGD_gray);
-            } else { // colorType == PNGImageReader.PNG_COLOR_RGB ||
-                     // colorType == PNGImageReader.PNG_COLOR_RGB_ALPHA
-                cs.writeShort(chunkRed);
-                cs.writeShort(chunkGreen);
-                cs.writeShort(chunkBlue);
-            }
-            cs.finish();
-        }
-    }
-
-    private void write_pHYs() throws IOException {
-        if (metadata.pHYs_present) {
-            ChunkStream cs = new ChunkStream(PNGImageReader.pHYs_TYPE, stream);
-            cs.writeInt(metadata.pHYs_pixelsPerUnitXAxis);
-            cs.writeInt(metadata.pHYs_pixelsPerUnitYAxis);
-            cs.writeByte(metadata.pHYs_unitSpecifier);
-            cs.finish();
-        }
-    }
-
-    private void write_sPLT() throws IOException {
-        if (metadata.sPLT_present) {
-            ChunkStream cs = new ChunkStream(PNGImageReader.sPLT_TYPE, stream);
-
-            cs.writeBytes(metadata.sPLT_paletteName);
-            cs.writeByte(0); // null terminator
-
-            cs.writeByte(metadata.sPLT_sampleDepth);
-            int numEntries = metadata.sPLT_red.length;
-
-            if (metadata.sPLT_sampleDepth == 8) {
-                for (int i = 0; i < numEntries; i++) {
-                    cs.writeByte(metadata.sPLT_red[i]);
-                    cs.writeByte(metadata.sPLT_green[i]);
-                    cs.writeByte(metadata.sPLT_blue[i]);
-                    cs.writeByte(metadata.sPLT_alpha[i]);
-                    cs.writeShort(metadata.sPLT_frequency[i]);
-                }
-            } else { // sampleDepth == 16
-                for (int i = 0; i < numEntries; i++) {
-                    cs.writeShort(metadata.sPLT_red[i]);
-                    cs.writeShort(metadata.sPLT_green[i]);
-                    cs.writeShort(metadata.sPLT_blue[i]);
-                    cs.writeShort(metadata.sPLT_alpha[i]);
-                    cs.writeShort(metadata.sPLT_frequency[i]);
-                }
-            }
-            cs.finish();
-        }
-    }
-
-    private void write_tIME() throws IOException {
-        if (metadata.tIME_present) {
-            ChunkStream cs = new ChunkStream(PNGImageReader.tIME_TYPE, stream);
-            cs.writeShort(metadata.tIME_year);
-            cs.writeByte(metadata.tIME_month);
-            cs.writeByte(metadata.tIME_day);
-            cs.writeByte(metadata.tIME_hour);
-            cs.writeByte(metadata.tIME_minute);
-            cs.writeByte(metadata.tIME_second);
-            cs.finish();
-        }
-    }
-
-    private void write_tEXt() throws IOException {
-        Iterator keywordIter = metadata.tEXt_keyword.iterator();
-        Iterator textIter = metadata.tEXt_text.iterator();
-
-        while (keywordIter.hasNext()) {
-            ChunkStream cs = new ChunkStream(PNGImageReader.tEXt_TYPE, stream);
-            String keyword = (String)keywordIter.next();
-            cs.writeBytes(keyword);
-            cs.writeByte(0);
-
-            String text = (String)textIter.next();
-            cs.writeBytes(text);
-            cs.finish();
-        }
-    }
-
-    private byte[] deflate(byte[] b) throws IOException {
-        ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        DeflaterOutputStream dos = new DeflaterOutputStream(baos);
-        dos.write(b);
-        dos.close();
-        return baos.toByteArray();
-    }
-
-    private void write_iTXt() throws IOException {
-        Iterator<String> keywordIter = metadata.iTXt_keyword.iterator();
-        Iterator<Boolean> flagIter = metadata.iTXt_compressionFlag.iterator();
-        Iterator<Integer> methodIter = metadata.iTXt_compressionMethod.iterator();
-        Iterator<String> languageIter = metadata.iTXt_languageTag.iterator();
-        Iterator<String> translatedKeywordIter =
-            metadata.iTXt_translatedKeyword.iterator();
-        Iterator<String> textIter = metadata.iTXt_text.iterator();
-
-        while (keywordIter.hasNext()) {
-            ChunkStream cs = new ChunkStream(PNGImageReader.iTXt_TYPE, stream);
-
-            cs.writeBytes(keywordIter.next());
-            cs.writeByte(0);
-
-            Boolean compressed = flagIter.next();
-            cs.writeByte(compressed ? 1 : 0);
-
-            cs.writeByte(methodIter.next().intValue());
-
-            cs.writeBytes(languageIter.next());
-            cs.writeByte(0);
-
-
-            cs.write(translatedKeywordIter.next().getBytes("UTF8"));
-            cs.writeByte(0);
-
-            String text = textIter.next();
-            if (compressed) {
-                cs.write(deflate(text.getBytes("UTF8")));
-            } else {
-                cs.write(text.getBytes("UTF8"));
-            }
-            cs.finish();
-        }
-    }
-
-    private void write_zTXt() throws IOException {
-        Iterator keywordIter = metadata.zTXt_keyword.iterator();
-        Iterator methodIter = metadata.zTXt_compressionMethod.iterator();
-        Iterator textIter = metadata.zTXt_text.iterator();
-
-        while (keywordIter.hasNext()) {
-            ChunkStream cs = new ChunkStream(PNGImageReader.zTXt_TYPE, stream);
-            String keyword = (String)keywordIter.next();
-            cs.writeBytes(keyword);
-            cs.writeByte(0);
-
-            int compressionMethod = ((Integer)methodIter.next()).intValue();
-            cs.writeByte(compressionMethod);
-
-            String text = (String)textIter.next();
-            cs.write(deflate(text.getBytes("ISO-8859-1")));
-            cs.finish();
-        }
-    }
-
-    private void writeUnknownChunks() throws IOException {
-        Iterator typeIter = metadata.unknownChunkType.iterator();
-        Iterator dataIter = metadata.unknownChunkData.iterator();
-
-        while (typeIter.hasNext() && dataIter.hasNext()) {
-            String type = (String)typeIter.next();
-            ChunkStream cs = new ChunkStream(chunkType(type), stream);
-            byte[] data = (byte[])dataIter.next();
-            cs.write(data);
-            cs.finish();
-        }
-    }
-
-    private static int chunkType(String typeString) {
-        char c0 = typeString.charAt(0);
-        char c1 = typeString.charAt(1);
-        char c2 = typeString.charAt(2);
-        char c3 = typeString.charAt(3);
-
-        int type = (c0 << 24) | (c1 << 16) | (c2 << 8) | c3;
-        return type;
-    }
-
-    private void encodePass(ImageOutputStream os,
-                            RenderedImage image,
-                            int xOffset, int yOffset,
-                            int xSkip, int ySkip) throws IOException {
-        int minX = sourceXOffset;
-        int minY = sourceYOffset;
-        int width = sourceWidth;
-        int height = sourceHeight;
-
-        // Adjust offsets and skips based on source subsampling factors
-        xOffset *= periodX;
-        xSkip *= periodX;
-        yOffset *= periodY;
-        ySkip *= periodY;
-
-        // Early exit if no data for this pass
-        int hpixels = (width - xOffset + xSkip - 1)/xSkip;
-        int vpixels = (height - yOffset + ySkip - 1)/ySkip;
-        if (hpixels == 0 || vpixels == 0) {
-            return;
-        }
-
-        // Convert X offset and skip from pixels to samples
-        xOffset *= numBands;
-        xSkip *= numBands;
-
-        // Create row buffers
-        int samplesPerByte = 8/metadata.IHDR_bitDepth;
-        int numSamples = width*numBands;
-        int[] samples = new int[numSamples];
-
-        int bytesPerRow = hpixels*numBands;
-        if (metadata.IHDR_bitDepth < 8) {
-            bytesPerRow = (bytesPerRow + samplesPerByte - 1)/samplesPerByte;
-        } else if (metadata.IHDR_bitDepth == 16) {
-            bytesPerRow *= 2;
-        }
-
-        IndexColorModel icm_gray_alpha = null;
-        if (metadata.IHDR_colorType == PNGImageReader.PNG_COLOR_GRAY_ALPHA &&
-            image.getColorModel() instanceof IndexColorModel)
-        {
-            // reserve space for alpha samples
-            bytesPerRow *= 2;
-
-            // will be used to calculate alpha value for the pixel
-            icm_gray_alpha = (IndexColorModel)image.getColorModel();
-        }
-
-        currRow = new byte[bytesPerRow + bpp];
-        prevRow = new byte[bytesPerRow + bpp];
-        filteredRows = new byte[5][bytesPerRow + bpp];
-
-        int bitDepth = metadata.IHDR_bitDepth;
-        for (int row = minY + yOffset; row < minY + height; row += ySkip) {
-            Rectangle rect = new Rectangle(minX, row, width, 1);
-            Raster ras = image.getData(rect);
-            if (sourceBands != null) {
-                ras = ras.createChild(minX, row, width, 1, minX, row,
-                                      sourceBands);
-            }
-
-            ras.getPixels(minX, row, width, 1, samples);
-
-            if (image.getColorModel().isAlphaPremultiplied()) {
-                WritableRaster wr = ras.createCompatibleWritableRaster();
-                wr.setPixels(wr.getMinX(), wr.getMinY(),
-                             wr.getWidth(), wr.getHeight(),
-                             samples);
-
-                image.getColorModel().coerceData(wr, false);
-                wr.getPixels(wr.getMinX(), wr.getMinY(),
-                             wr.getWidth(), wr.getHeight(),
-                             samples);
-            }
-
-            // Reorder palette data if necessary
-            int[] paletteOrder = metadata.PLTE_order;
-            if (paletteOrder != null) {
-                for (int i = 0; i < numSamples; i++) {
-                    samples[i] = paletteOrder[samples[i]];
-                }
-            }
-
-            int count = bpp; // leave first 'bpp' bytes zero
-            int pos = 0;
-            int tmp = 0;
-
-            switch (bitDepth) {
-            case 1: case 2: case 4:
-                // Image can only have a single band
-
-                int mask = samplesPerByte - 1;
-                for (int s = xOffset; s < numSamples; s += xSkip) {
-                    byte val = scale0[samples[s]];
-                    tmp = (tmp << bitDepth) | val;
-
-                    if ((pos++ & mask) == mask) {
-                        currRow[count++] = (byte)tmp;
-                        tmp = 0;
-                        pos = 0;
-                    }
-                }
-
-                // Left shift the last byte
-                if ((pos & mask) != 0) {
-                    tmp <<= ((8/bitDepth) - pos)*bitDepth;
-                    currRow[count++] = (byte)tmp;
-                }
-                break;
-
-            case 8:
-                if (numBands == 1) {
-                    for (int s = xOffset; s < numSamples; s += xSkip) {
-                        currRow[count++] = scale0[samples[s]];
-                        if (icm_gray_alpha != null) {
-                            currRow[count++] =
-                                scale0[icm_gray_alpha.getAlpha(0xff & samples[s])];
-                        }
-                    }
-                } else {
-                    for (int s = xOffset; s < numSamples; s += xSkip) {
-                        for (int b = 0; b < numBands; b++) {
-                            currRow[count++] = scale[b][samples[s + b]];
-                        }
-                    }
-                }
-                break;
-
-            case 16:
-                for (int s = xOffset; s < numSamples; s += xSkip) {
-                    for (int b = 0; b < numBands; b++) {
-                        currRow[count++] = scaleh[b][samples[s + b]];
-                        currRow[count++] = scalel[b][samples[s + b]];
-                    }
-                }
-                break;
-            }
-
-            // Perform filtering
-            int filterType = rowFilter.filterRow(metadata.IHDR_colorType,
-                                                 currRow, prevRow,
-                                                 filteredRows,
-                                                 bytesPerRow, bpp);
-
-            os.write(filterType);
-            os.write(filteredRows[filterType], bpp, bytesPerRow);
-
-            // Swap current and previous rows
-            byte[] swap = currRow;
-            currRow = prevRow;
-            prevRow = swap;
-
-            pixelsDone += hpixels;
-            processImageProgress(100.0F*pixelsDone/totalPixels);
-
-            // If write has been aborted, just return;
-            // processWriteAborted will be called later
-            if (abortRequested()) {
-                return;
-            }
-        }
-    }
-
-    // Use sourceXOffset, etc.
-    private void write_IDAT(RenderedImage image) throws IOException {
-        IDATOutputStream ios = new IDATOutputStream(stream, 32768);
-        try {
-            if (metadata.IHDR_interlaceMethod == 1) {
-                for (int i = 0; i < 7; i++) {
-                    encodePass(ios, image,
-                               PNGImageReader.adam7XOffset[i],
-                               PNGImageReader.adam7YOffset[i],
-                               PNGImageReader.adam7XSubsampling[i],
-                               PNGImageReader.adam7YSubsampling[i]);
-                    if (abortRequested()) {
-                        break;
-                    }
-                }
-            } else {
-                encodePass(ios, image, 0, 0, 1, 1);
-            }
-        } finally {
-            ios.finish();
-        }
-    }
-
-    private void writeIEND() throws IOException {
-        ChunkStream cs = new ChunkStream(PNGImageReader.IEND_TYPE, stream);
-        cs.finish();
-    }
-
-    // Check two int arrays for value equality, always returns false
-    // if either array is null
-    private boolean equals(int[] s0, int[] s1) {
-        if (s0 == null || s1 == null) {
-            return false;
-        }
-        if (s0.length != s1.length) {
-            return false;
-        }
-        for (int i = 0; i < s0.length; i++) {
-            if (s0[i] != s1[i]) {
-                return false;
-            }
-        }
-        return true;
-    }
-
-    // Initialize the scale/scale0 or scaleh/scalel arrays to
-    // hold the results of scaling an input value to the desired
-    // output bit depth
-    private void initializeScaleTables(int[] sampleSize) {
-        int bitDepth = metadata.IHDR_bitDepth;
-
-        // If the existing tables are still valid, just return
-        if (bitDepth == scalingBitDepth &&
-            equals(sampleSize, this.sampleSize)) {
-            return;
-        }
-
-        // Compute new tables
-        this.sampleSize = sampleSize;
-        this.scalingBitDepth = bitDepth;
-        int maxOutSample = (1 << bitDepth) - 1;
-        if (bitDepth <= 8) {
-            scale = new byte[numBands][];
-            for (int b = 0; b < numBands; b++) {
-                int maxInSample = (1 << sampleSize[b]) - 1;
-                int halfMaxInSample = maxInSample/2;
-                scale[b] = new byte[maxInSample + 1];
-                for (int s = 0; s <= maxInSample; s++) {
-                    scale[b][s] =
-                        (byte)((s*maxOutSample + halfMaxInSample)/maxInSample);
-                }
-            }
-            scale0 = scale[0];
-            scaleh = scalel = null;
-        } else { // bitDepth == 16
-            // Divide scaling table into high and low bytes
-            scaleh = new byte[numBands][];
-            scalel = new byte[numBands][];
-
-            for (int b = 0; b < numBands; b++) {
-                int maxInSample = (1 << sampleSize[b]) - 1;
-                int halfMaxInSample = maxInSample/2;
-                scaleh[b] = new byte[maxInSample + 1];
-                scalel[b] = new byte[maxInSample + 1];
-                for (int s = 0; s <= maxInSample; s++) {
-                    int val = (s*maxOutSample + halfMaxInSample)/maxInSample;
-                    scaleh[b][s] = (byte)(val >> 8);
-                    scalel[b][s] = (byte)(val & 0xff);
-                }
-            }
-            scale = null;
-            scale0 = null;
-        }
-    }
-
-    public void write(IIOMetadata streamMetadata,
-                      IIOImage image,
-                      ImageWriteParam param) throws IIOException {
-        if (stream == null) {
-            throw new IllegalStateException("output == null!");
-        }
-        if (image == null) {
-            throw new IllegalArgumentException("image == null!");
-        }
-        if (image.hasRaster()) {
-            throw new UnsupportedOperationException("image has a Raster!");
-        }
-
-        RenderedImage im = image.getRenderedImage();
-        SampleModel sampleModel = im.getSampleModel();
-        this.numBands = sampleModel.getNumBands();
-
-        // Set source region and subsampling to default values
-        this.sourceXOffset = im.getMinX();
-        this.sourceYOffset = im.getMinY();
-        this.sourceWidth = im.getWidth();
-        this.sourceHeight = im.getHeight();
-        this.sourceBands = null;
-        this.periodX = 1;
-        this.periodY = 1;
-
-        if (param != null) {
-            // Get source region and subsampling factors
-            Rectangle sourceRegion = param.getSourceRegion();
-            if (sourceRegion != null) {
-                Rectangle imageBounds = new Rectangle(im.getMinX(),
-                                                      im.getMinY(),
-                                                      im.getWidth(),
-                                                      im.getHeight());
-                // Clip to actual image bounds
-                sourceRegion = sourceRegion.intersection(imageBounds);
-                sourceXOffset = sourceRegion.x;
-                sourceYOffset = sourceRegion.y;
-                sourceWidth = sourceRegion.width;
-                sourceHeight = sourceRegion.height;
-            }
-
-            // Adjust for subsampling offsets
-            int gridX = param.getSubsamplingXOffset();
-            int gridY = param.getSubsamplingYOffset();
-            sourceXOffset += gridX;
-            sourceYOffset += gridY;
-            sourceWidth -= gridX;
-            sourceHeight -= gridY;
-
-            // Get subsampling factors
-            periodX = param.getSourceXSubsampling();
-            periodY = param.getSourceYSubsampling();
-
-            int[] sBands = param.getSourceBands();
-            if (sBands != null) {
-                sourceBands = sBands;
-                numBands = sourceBands.length;
-            }
-        }
-
-        // Compute output dimensions
-        int destWidth = (sourceWidth + periodX - 1)/periodX;
-        int destHeight = (sourceHeight + periodY - 1)/periodY;
-        if (destWidth <= 0 || destHeight <= 0) {
-            throw new IllegalArgumentException("Empty source region!");
-        }
-
-        // Compute total number of pixels for progress notification
-        this.totalPixels = destWidth*destHeight;
-        this.pixelsDone = 0;
-
-        // Create metadata
-        IIOMetadata imd = image.getMetadata();
-        if (imd != null) {
-            metadata = (PNGMetadata)convertImageMetadata(imd,
-                               ImageTypeSpecifier.createFromRenderedImage(im),
-                                                         null);
-        } else {
-            metadata = new PNGMetadata();
-        }
-
-        if (param != null) {
-            // Use Adam7 interlacing if set in write param
-            switch (param.getProgressiveMode()) {
-            case ImageWriteParam.MODE_DEFAULT:
-                metadata.IHDR_interlaceMethod = 1;
-                break;
-            case ImageWriteParam.MODE_DISABLED:
-                metadata.IHDR_interlaceMethod = 0;
-                break;
-                // MODE_COPY_FROM_METADATA should alreay be taken care of
-                // MODE_EXPLICIT is not allowed
-            }
-        }
-
-        // Initialize bitDepth and colorType
-        metadata.initialize(new ImageTypeSpecifier(im), numBands);
-
-        // Overwrite IHDR width and height values with values from image
-        metadata.IHDR_width = destWidth;
-        metadata.IHDR_height = destHeight;
-
-        this.bpp = numBands*((metadata.IHDR_bitDepth == 16) ? 2 : 1);
-
-        // Initialize scaling tables for this image
-        initializeScaleTables(sampleModel.getSampleSize());
-
-        clearAbortRequest();
-
-        processImageStarted(0);
-
-        try {
-            write_magic();
-            write_IHDR();
-
-            write_cHRM();
-            write_gAMA();
-            write_iCCP();
-            write_sBIT();
-            write_sRGB();
-
-            write_PLTE();
-
-            write_hIST();
-            write_tRNS();
-            write_bKGD();
-
-            write_pHYs();
-            write_sPLT();
-            write_tIME();
-            write_tEXt();
-            write_iTXt();
-            write_zTXt();
-
-            writeUnknownChunks();
-
-            write_IDAT(im);
-
-            if (abortRequested()) {
-                processWriteAborted();
-            } else {
-                // Finish up and inform the listeners we are done
-                writeIEND();
-                processImageComplete();
-            }
-        } catch (IOException e) {
-            throw new IIOException("I/O error writing PNG file!", e);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/plugins/png/PNGImageWriterSpi.java b/ojluni/src/main/java/com/sun/imageio/plugins/png/PNGImageWriterSpi.java
deleted file mode 100755
index 18d7614..0000000
--- a/ojluni/src/main/java/com/sun/imageio/plugins/png/PNGImageWriterSpi.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * Copyright (c) 2000, 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
- * 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.imageio.plugins.png;
-
-import java.awt.image.ColorModel;
-import java.awt.image.IndexColorModel;
-import java.awt.image.SampleModel;
-import java.util.Locale;
-import javax.imageio.ImageWriter;
-import javax.imageio.ImageTypeSpecifier;
-import javax.imageio.metadata.IIOMetadataFormat;
-import javax.imageio.metadata.IIOMetadataFormatImpl;
-import javax.imageio.spi.ImageWriterSpi;
-import javax.imageio.stream.ImageOutputStream;
-
-public class PNGImageWriterSpi extends ImageWriterSpi {
-
-    private static final String vendorName = "Oracle Corporation";
-
-    private static final String version = "1.0";
-
-    private static final String[] names = { "png", "PNG" };
-
-    private static final String[] suffixes = { "png" };
-
-    private static final String[] MIMETypes = { "image/png", "image/x-png" };
-
-    private static final String writerClassName =
-        "com.sun.imageio.plugins.png.PNGImageWriter";
-
-    private static final String[] readerSpiNames = {
-        "com.sun.imageio.plugins.png.PNGImageReaderSpi"
-    };
-
-    public PNGImageWriterSpi() {
-          super(vendorName,
-                version,
-                names,
-                suffixes,
-                MIMETypes,
-                writerClassName,
-                new Class[] { ImageOutputStream.class },
-                readerSpiNames,
-                false,
-                null, null,
-                null, null,
-                true,
-                PNGMetadata.nativeMetadataFormatName,
-                "com.sun.imageio.plugins.png.PNGMetadataFormat",
-                null, null
-                );
-    }
-
-    public boolean canEncodeImage(ImageTypeSpecifier type) {
-        SampleModel sampleModel = type.getSampleModel();
-        ColorModel colorModel = type.getColorModel();
-
-        // Find the maximum bit depth across all channels
-        int[] sampleSize = sampleModel.getSampleSize();
-        int bitDepth = sampleSize[0];
-        for (int i = 1; i < sampleSize.length; i++) {
-            if (sampleSize[i] > bitDepth) {
-                bitDepth = sampleSize[i];
-            }
-        }
-
-        // Ensure bitDepth is between 1 and 16
-        if (bitDepth < 1 || bitDepth > 16) {
-            return false;
-        }
-
-        // Check number of bands, alpha
-        int numBands = sampleModel.getNumBands();
-        if (numBands < 1 || numBands > 4) {
-            return false;
-        }
-
-        boolean hasAlpha = colorModel.hasAlpha();
-        // Fix 4464413: PNGTransparency reg-test was failing
-        // because for IndexColorModels that have alpha,
-        // numBands == 1 && hasAlpha == true, thus causing
-        // the check below to fail and return false.
-        if (colorModel instanceof IndexColorModel) {
-            return true;
-        }
-        if ((numBands == 1 || numBands == 3) && hasAlpha) {
-            return false;
-        }
-        if ((numBands == 2 || numBands == 4) && !hasAlpha) {
-            return false;
-        }
-
-        return true;
-    }
-
-    public String getDescription(Locale locale) {
-        return "Standard PNG image writer";
-    }
-
-    public ImageWriter createWriterInstance(Object extension) {
-        return new PNGImageWriter(this);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/plugins/png/PNGMetadata.java b/ojluni/src/main/java/com/sun/imageio/plugins/png/PNGMetadata.java
deleted file mode 100755
index 1a326db..0000000
--- a/ojluni/src/main/java/com/sun/imageio/plugins/png/PNGMetadata.java
+++ /dev/null
@@ -1,2046 +0,0 @@
-/*
- * Copyright (c) 2000, 2001, 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.imageio.plugins.png;
-
-import java.awt.image.ColorModel;
-import java.awt.image.IndexColorModel;
-import java.awt.image.SampleModel;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.StringTokenizer;
-import javax.imageio.ImageTypeSpecifier;
-import javax.imageio.metadata.IIOInvalidTreeException;
-import javax.imageio.metadata.IIOMetadata;
-import javax.imageio.metadata.IIOMetadataFormat;
-import javax.imageio.metadata.IIOMetadataFormatImpl;
-import javax.imageio.metadata.IIOMetadataNode;
-import org.w3c.dom.Node;
-
-public class PNGMetadata extends IIOMetadata implements Cloneable {
-
-    // package scope
-    public static final String
-        nativeMetadataFormatName = "javax_imageio_png_1.0";
-
-    protected static final String nativeMetadataFormatClassName
-        = "com.sun.imageio.plugins.png.PNGMetadataFormat";
-
-    // Color types for IHDR chunk
-    public static final String[] IHDR_colorTypeNames = {
-        "Grayscale", null, "RGB", "Palette",
-        "GrayAlpha", null, "RGBAlpha"
-    };
-
-    public static final int[] IHDR_numChannels = {
-        1, 0, 3, 3, 2, 0, 4
-    };
-
-    // Bit depths for IHDR chunk
-    public static final String[] IHDR_bitDepths = {
-        "1", "2", "4", "8", "16"
-    };
-
-    // Compression methods for IHDR chunk
-    public static final String[] IHDR_compressionMethodNames = {
-        "deflate"
-    };
-
-    // Filter methods for IHDR chunk
-    public static final String[] IHDR_filterMethodNames = {
-        "adaptive"
-    };
-
-    // Interlace methods for IHDR chunk
-    public static final String[] IHDR_interlaceMethodNames = {
-        "none", "adam7"
-    };
-
-    // Compression methods for iCCP chunk
-    public static final String[] iCCP_compressionMethodNames = {
-        "deflate"
-    };
-
-    // Compression methods for zTXt chunk
-    public static final String[] zTXt_compressionMethodNames = {
-        "deflate"
-    };
-
-    // "Unknown" unit for pHYs chunk
-    public static final int PHYS_UNIT_UNKNOWN = 0;
-
-    // "Meter" unit for pHYs chunk
-    public static final int PHYS_UNIT_METER = 1;
-
-    // Unit specifiers for pHYs chunk
-    public static final String[] unitSpecifierNames = {
-        "unknown", "meter"
-    };
-
-    // Rendering intents for sRGB chunk
-    public static final String[] renderingIntentNames = {
-        "Perceptual", // 0
-        "Relative colorimetric", // 1
-        "Saturation", // 2
-        "Absolute colorimetric" // 3
-
-    };
-
-    // Color space types for Chroma->ColorSpaceType node
-    public static final String[] colorSpaceTypeNames = {
-        "GRAY", null, "RGB", "RGB",
-        "GRAY", null, "RGB"
-    };
-
-    // IHDR chunk
-    public boolean IHDR_present;
-    public int IHDR_width;
-    public int IHDR_height;
-    public int IHDR_bitDepth;
-    public int IHDR_colorType;
-    public int IHDR_compressionMethod;
-    public int IHDR_filterMethod;
-    public int IHDR_interlaceMethod; // 0 == none, 1 == adam7
-
-    // PLTE chunk
-    public boolean PLTE_present;
-    public byte[] PLTE_red;
-    public byte[] PLTE_green;
-    public byte[] PLTE_blue;
-
-    // If non-null, used to reorder palette entries during encoding in
-    // order to minimize the size of the tRNS chunk.  Thus an index of
-    // 'i' in the source should be encoded as index 'PLTE_order[i]'.
-    // PLTE_order will be null unless 'initialize' is called with an
-    // IndexColorModel image type.
-    public int[] PLTE_order = null;
-
-    // bKGD chunk
-    // If external (non-PNG sourced) data has red = green = blue,
-    // always store it as gray and promote when writing
-    public boolean bKGD_present;
-    public int bKGD_colorType; // PNG_COLOR_GRAY, _RGB, or _PALETTE
-    public int bKGD_index;
-    public int bKGD_gray;
-    public int bKGD_red;
-    public int bKGD_green;
-    public int bKGD_blue;
-
-    // cHRM chunk
-    public boolean cHRM_present;
-    public int cHRM_whitePointX;
-    public int cHRM_whitePointY;
-    public int cHRM_redX;
-    public int cHRM_redY;
-    public int cHRM_greenX;
-    public int cHRM_greenY;
-    public int cHRM_blueX;
-    public int cHRM_blueY;
-
-    // gAMA chunk
-    public boolean gAMA_present;
-    public int gAMA_gamma;
-
-    // hIST chunk
-    public boolean hIST_present;
-    public char[] hIST_histogram;
-
-    // iCCP chunk
-    public boolean iCCP_present;
-    public String iCCP_profileName;
-    public int iCCP_compressionMethod;
-    public byte[] iCCP_compressedProfile;
-
-    // iTXt chunk
-    public ArrayList<String> iTXt_keyword = new ArrayList<String>();
-    public ArrayList<Boolean> iTXt_compressionFlag = new ArrayList<Boolean>();
-    public ArrayList<Integer> iTXt_compressionMethod = new ArrayList<Integer>();
-    public ArrayList<String> iTXt_languageTag = new ArrayList<String>();
-    public ArrayList<String> iTXt_translatedKeyword = new ArrayList<String>();
-    public ArrayList<String> iTXt_text = new ArrayList<String>();
-
-    // pHYs chunk
-    public boolean pHYs_present;
-    public int pHYs_pixelsPerUnitXAxis;
-    public int pHYs_pixelsPerUnitYAxis;
-    public int pHYs_unitSpecifier; // 0 == unknown, 1 == meter
-
-    // sBIT chunk
-    public boolean sBIT_present;
-    public int sBIT_colorType; // PNG_COLOR_GRAY, _GRAY_ALPHA, _RGB, _RGB_ALPHA
-    public int sBIT_grayBits;
-    public int sBIT_redBits;
-    public int sBIT_greenBits;
-    public int sBIT_blueBits;
-    public int sBIT_alphaBits;
-
-    // sPLT chunk
-    public boolean sPLT_present;
-    public String sPLT_paletteName; // 1-79 characters
-    public int sPLT_sampleDepth; // 8 or 16
-    public int[] sPLT_red;
-    public int[] sPLT_green;
-    public int[] sPLT_blue;
-    public int[] sPLT_alpha;
-    public int[] sPLT_frequency;
-
-    // sRGB chunk
-    public boolean sRGB_present;
-    public int sRGB_renderingIntent;
-
-    // tEXt chunk
-    public ArrayList<String> tEXt_keyword = new ArrayList<String>(); // 1-79 characters
-    public ArrayList<String> tEXt_text = new ArrayList<String>();
-
-    // tIME chunk
-    public boolean tIME_present;
-    public int tIME_year;
-    public int tIME_month;
-    public int tIME_day;
-    public int tIME_hour;
-    public int tIME_minute;
-    public int tIME_second;
-
-    // tRNS chunk
-    // If external (non-PNG sourced) data has red = green = blue,
-    // always store it as gray and promote when writing
-    public boolean tRNS_present;
-    public int tRNS_colorType; // PNG_COLOR_GRAY, _RGB, or _PALETTE
-    public byte[] tRNS_alpha; // May have fewer entries than PLTE_red, etc.
-    public int tRNS_gray;
-    public int tRNS_red;
-    public int tRNS_green;
-    public int tRNS_blue;
-
-    // zTXt chunk
-    public ArrayList<String> zTXt_keyword = new ArrayList<String>();
-    public ArrayList<Integer> zTXt_compressionMethod = new ArrayList<Integer>();
-    public ArrayList<String> zTXt_text = new ArrayList<String>();
-
-    // Unknown chunks
-    public ArrayList<String> unknownChunkType = new ArrayList<String>();
-    public ArrayList<byte[]> unknownChunkData = new ArrayList<byte[]>();
-
-    public PNGMetadata() {
-        super(true,
-              nativeMetadataFormatName,
-              nativeMetadataFormatClassName,
-              null, null);
-    }
-
-    public PNGMetadata(IIOMetadata metadata) {
-        // TODO -- implement
-    }
-
-    /**
-     * Sets the IHDR_bitDepth and IHDR_colorType variables.
-     * The <code>numBands</code> parameter is necessary since
-     * we may only be writing a subset of the image bands.
-     */
-    public void initialize(ImageTypeSpecifier imageType, int numBands) {
-        ColorModel colorModel = imageType.getColorModel();
-        SampleModel sampleModel = imageType.getSampleModel();
-
-        // Initialize IHDR_bitDepth
-        int[] sampleSize = sampleModel.getSampleSize();
-        int bitDepth = sampleSize[0];
-        // Choose max bit depth over all channels
-        // Fixes bug 4413109
-        for (int i = 1; i < sampleSize.length; i++) {
-            if (sampleSize[i] > bitDepth) {
-                bitDepth = sampleSize[i];
-            }
-        }
-        // Multi-channel images must have a bit depth of 8 or 16
-        if (sampleSize.length > 1 && bitDepth < 8) {
-            bitDepth = 8;
-        }
-
-        // Round bit depth up to a power of 2
-        if (bitDepth > 2 && bitDepth < 4) {
-            bitDepth = 4;
-        } else if (bitDepth > 4 && bitDepth < 8) {
-            bitDepth = 8;
-        } else if (bitDepth > 8 && bitDepth < 16) {
-            bitDepth = 16;
-        } else if (bitDepth > 16) {
-            throw new RuntimeException("bitDepth > 16!");
-        }
-        IHDR_bitDepth = bitDepth;
-
-        // Initialize IHDR_colorType
-        if (colorModel instanceof IndexColorModel) {
-            IndexColorModel icm = (IndexColorModel)colorModel;
-            int size = icm.getMapSize();
-
-            byte[] reds = new byte[size];
-            icm.getReds(reds);
-            byte[] greens = new byte[size];
-            icm.getGreens(greens);
-            byte[] blues = new byte[size];
-            icm.getBlues(blues);
-
-            // Determine whether the color tables are actually a gray ramp
-            // if the color type has not been set previously
-            boolean isGray = false;
-            if (!IHDR_present ||
-                (IHDR_colorType != PNGImageReader.PNG_COLOR_PALETTE)) {
-                isGray = true;
-                int scale = 255/((1 << IHDR_bitDepth) - 1);
-                for (int i = 0; i < size; i++) {
-                    byte red = reds[i];
-                    if ((red != (byte)(i*scale)) ||
-                        (red != greens[i]) ||
-                        (red != blues[i])) {
-                        isGray = false;
-                        break;
-                    }
-                }
-            }
-
-            // Determine whether transparency exists
-            boolean hasAlpha = colorModel.hasAlpha();
-
-            byte[] alpha = null;
-            if (hasAlpha) {
-                alpha = new byte[size];
-                icm.getAlphas(alpha);
-            }
-
-            /*
-             * NB: PNG_COLOR_GRAY_ALPHA color type may be not optimal for images
-             * contained more than 1024 pixels (or even than 768 pixels in case of
-             * single transparent pixel in palette).
-             * For such images alpha samples in raster will occupy more space than
-             * it is required to store palette so it could be reasonable to
-             * use PNG_COLOR_PALETTE color type for large images.
-             */
-
-            if (isGray && hasAlpha && (bitDepth == 8 || bitDepth == 16)) {
-                IHDR_colorType = PNGImageReader.PNG_COLOR_GRAY_ALPHA;
-            } else if (isGray && !hasAlpha) {
-                IHDR_colorType = PNGImageReader.PNG_COLOR_GRAY;
-            } else {
-                IHDR_colorType = PNGImageReader.PNG_COLOR_PALETTE;
-                PLTE_present = true;
-                PLTE_order = null;
-                PLTE_red = (byte[])reds.clone();
-                PLTE_green = (byte[])greens.clone();
-                PLTE_blue = (byte[])blues.clone();
-
-                if (hasAlpha) {
-                    tRNS_present = true;
-                    tRNS_colorType = PNGImageReader.PNG_COLOR_PALETTE;
-
-                    PLTE_order = new int[alpha.length];
-
-                    // Reorder the palette so that non-opaque entries
-                    // come first.  Since the tRNS chunk does not have
-                    // to store trailing 255's, this can save a
-                    // considerable amount of space when encoding
-                    // images with only one transparent pixel value,
-                    // e.g., images from GIF sources.
-
-                    byte[] newAlpha = new byte[alpha.length];
-
-                    // Scan for non-opaque entries and assign them
-                    // positions starting at 0.
-                    int newIndex = 0;
-                    for (int i = 0; i < alpha.length; i++) {
-                        if (alpha[i] != (byte)255) {
-                            PLTE_order[i] = newIndex;
-                            newAlpha[newIndex] = alpha[i];
-                            ++newIndex;
-                        }
-                    }
-                    int numTransparent = newIndex;
-
-                    // Scan for opaque entries and assign them
-                    // positions following the non-opaque entries.
-                    for (int i = 0; i < alpha.length; i++) {
-                        if (alpha[i] == (byte)255) {
-                            PLTE_order[i] = newIndex++;
-                        }
-                    }
-
-                    // Reorder the palettes
-                    byte[] oldRed = PLTE_red;
-                    byte[] oldGreen = PLTE_green;
-                    byte[] oldBlue = PLTE_blue;
-                    int len = oldRed.length; // All have the same length
-                    PLTE_red = new byte[len];
-                    PLTE_green = new byte[len];
-                    PLTE_blue = new byte[len];
-                    for (int i = 0; i < len; i++) {
-                        PLTE_red[PLTE_order[i]] = oldRed[i];
-                        PLTE_green[PLTE_order[i]] = oldGreen[i];
-                        PLTE_blue[PLTE_order[i]] = oldBlue[i];
-                    }
-
-                    // Copy only the transparent entries into tRNS_alpha
-                    tRNS_alpha = new byte[numTransparent];
-                    System.arraycopy(newAlpha, 0,
-                                     tRNS_alpha, 0, numTransparent);
-                }
-            }
-        } else {
-            if (numBands == 1) {
-                IHDR_colorType = PNGImageReader.PNG_COLOR_GRAY;
-            } else if (numBands == 2) {
-                IHDR_colorType = PNGImageReader.PNG_COLOR_GRAY_ALPHA;
-            } else if (numBands == 3) {
-                IHDR_colorType = PNGImageReader.PNG_COLOR_RGB;
-            } else if (numBands == 4) {
-                IHDR_colorType = PNGImageReader.PNG_COLOR_RGB_ALPHA;
-            } else {
-                throw new RuntimeException("Number of bands not 1-4!");
-            }
-        }
-
-        IHDR_present = true;
-    }
-
-    public boolean isReadOnly() {
-        return false;
-    }
-
-    private ArrayList<byte[]> cloneBytesArrayList(ArrayList<byte[]> in) {
-        if (in == null) {
-            return null;
-        } else {
-            ArrayList<byte[]> list = new ArrayList<byte[]>(in.size());
-            for (byte[] b: in) {
-                list.add((b == null) ? null : (byte[])b.clone());
-            }
-            return list;
-        }
-    }
-
-    // Deep clone
-    public Object clone() {
-        PNGMetadata metadata;
-        try {
-            metadata = (PNGMetadata)super.clone();
-        } catch (CloneNotSupportedException e) {
-            return null;
-        }
-
-        // unknownChunkData needs deep clone
-        metadata.unknownChunkData =
-            cloneBytesArrayList(this.unknownChunkData);
-
-        return metadata;
-    }
-
-    public Node getAsTree(String formatName) {
-        if (formatName.equals(nativeMetadataFormatName)) {
-            return getNativeTree();
-        } else if (formatName.equals
-                   (IIOMetadataFormatImpl.standardMetadataFormatName)) {
-            return getStandardTree();
-        } else {
-            throw new IllegalArgumentException("Not a recognized format!");
-        }
-    }
-
-    private Node getNativeTree() {
-        IIOMetadataNode node = null; // scratch node
-        IIOMetadataNode root = new IIOMetadataNode(nativeMetadataFormatName);
-
-        // IHDR
-        if (IHDR_present) {
-            IIOMetadataNode IHDR_node = new IIOMetadataNode("IHDR");
-            IHDR_node.setAttribute("width", Integer.toString(IHDR_width));
-            IHDR_node.setAttribute("height", Integer.toString(IHDR_height));
-            IHDR_node.setAttribute("bitDepth",
-                                   Integer.toString(IHDR_bitDepth));
-            IHDR_node.setAttribute("colorType",
-                                   IHDR_colorTypeNames[IHDR_colorType]);
-            // IHDR_compressionMethod must be 0 in PNG 1.1
-            IHDR_node.setAttribute("compressionMethod",
-                          IHDR_compressionMethodNames[IHDR_compressionMethod]);
-            // IHDR_filterMethod must be 0 in PNG 1.1
-            IHDR_node.setAttribute("filterMethod",
-                                    IHDR_filterMethodNames[IHDR_filterMethod]);
-            IHDR_node.setAttribute("interlaceMethod",
-                              IHDR_interlaceMethodNames[IHDR_interlaceMethod]);
-            root.appendChild(IHDR_node);
-        }
-
-        // PLTE
-        if (PLTE_present) {
-            IIOMetadataNode PLTE_node = new IIOMetadataNode("PLTE");
-            int numEntries = PLTE_red.length;
-            for (int i = 0; i < numEntries; i++) {
-                IIOMetadataNode entry = new IIOMetadataNode("PLTEEntry");
-                entry.setAttribute("index", Integer.toString(i));
-                entry.setAttribute("red",
-                                   Integer.toString(PLTE_red[i] & 0xff));
-                entry.setAttribute("green",
-                                   Integer.toString(PLTE_green[i] & 0xff));
-                entry.setAttribute("blue",
-                                   Integer.toString(PLTE_blue[i] & 0xff));
-                PLTE_node.appendChild(entry);
-            }
-
-            root.appendChild(PLTE_node);
-        }
-
-        // bKGD
-        if (bKGD_present) {
-            IIOMetadataNode bKGD_node = new IIOMetadataNode("bKGD");
-
-            if (bKGD_colorType == PNGImageReader.PNG_COLOR_PALETTE) {
-                node = new IIOMetadataNode("bKGD_Palette");
-                node.setAttribute("index", Integer.toString(bKGD_index));
-            } else if (bKGD_colorType == PNGImageReader.PNG_COLOR_GRAY) {
-                node = new IIOMetadataNode("bKGD_Grayscale");
-                node.setAttribute("gray", Integer.toString(bKGD_gray));
-            } else if (bKGD_colorType == PNGImageReader.PNG_COLOR_RGB) {
-                node = new IIOMetadataNode("bKGD_RGB");
-                node.setAttribute("red", Integer.toString(bKGD_red));
-                node.setAttribute("green", Integer.toString(bKGD_green));
-                node.setAttribute("blue", Integer.toString(bKGD_blue));
-            }
-            bKGD_node.appendChild(node);
-
-            root.appendChild(bKGD_node);
-        }
-
-        // cHRM
-        if (cHRM_present) {
-            IIOMetadataNode cHRM_node = new IIOMetadataNode("cHRM");
-            cHRM_node.setAttribute("whitePointX",
-                              Integer.toString(cHRM_whitePointX));
-            cHRM_node.setAttribute("whitePointY",
-                              Integer.toString(cHRM_whitePointY));
-            cHRM_node.setAttribute("redX", Integer.toString(cHRM_redX));
-            cHRM_node.setAttribute("redY", Integer.toString(cHRM_redY));
-            cHRM_node.setAttribute("greenX", Integer.toString(cHRM_greenX));
-            cHRM_node.setAttribute("greenY", Integer.toString(cHRM_greenY));
-            cHRM_node.setAttribute("blueX", Integer.toString(cHRM_blueX));
-            cHRM_node.setAttribute("blueY", Integer.toString(cHRM_blueY));
-
-            root.appendChild(cHRM_node);
-        }
-
-        // gAMA
-        if (gAMA_present) {
-            IIOMetadataNode gAMA_node = new IIOMetadataNode("gAMA");
-            gAMA_node.setAttribute("value", Integer.toString(gAMA_gamma));
-
-            root.appendChild(gAMA_node);
-        }
-
-        // hIST
-        if (hIST_present) {
-            IIOMetadataNode hIST_node = new IIOMetadataNode("hIST");
-
-            for (int i = 0; i < hIST_histogram.length; i++) {
-                IIOMetadataNode hist =
-                    new IIOMetadataNode("hISTEntry");
-                hist.setAttribute("index", Integer.toString(i));
-                hist.setAttribute("value",
-                                  Integer.toString(hIST_histogram[i]));
-                hIST_node.appendChild(hist);
-            }
-
-            root.appendChild(hIST_node);
-        }
-
-        // iCCP
-        if (iCCP_present) {
-            IIOMetadataNode iCCP_node = new IIOMetadataNode("iCCP");
-            iCCP_node.setAttribute("profileName", iCCP_profileName);
-            iCCP_node.setAttribute("compressionMethod",
-                          iCCP_compressionMethodNames[iCCP_compressionMethod]);
-
-            Object profile = iCCP_compressedProfile;
-            if (profile != null) {
-                profile = ((byte[])profile).clone();
-            }
-            iCCP_node.setUserObject(profile);
-
-            root.appendChild(iCCP_node);
-        }
-
-        // iTXt
-        if (iTXt_keyword.size() > 0) {
-            IIOMetadataNode iTXt_parent = new IIOMetadataNode("iTXt");
-            for (int i = 0; i < iTXt_keyword.size(); i++) {
-                IIOMetadataNode iTXt_node = new IIOMetadataNode("iTXtEntry");
-                iTXt_node.setAttribute("keyword", iTXt_keyword.get(i));
-                iTXt_node.setAttribute("compressionFlag",
-                        iTXt_compressionFlag.get(i) ? "TRUE" : "FALSE");
-                iTXt_node.setAttribute("compressionMethod",
-                        iTXt_compressionMethod.get(i).toString());
-                iTXt_node.setAttribute("languageTag",
-                                       iTXt_languageTag.get(i));
-                iTXt_node.setAttribute("translatedKeyword",
-                                       iTXt_translatedKeyword.get(i));
-                iTXt_node.setAttribute("text", iTXt_text.get(i));
-
-                iTXt_parent.appendChild(iTXt_node);
-            }
-
-            root.appendChild(iTXt_parent);
-        }
-
-        // pHYs
-        if (pHYs_present) {
-            IIOMetadataNode pHYs_node = new IIOMetadataNode("pHYs");
-            pHYs_node.setAttribute("pixelsPerUnitXAxis",
-                              Integer.toString(pHYs_pixelsPerUnitXAxis));
-            pHYs_node.setAttribute("pixelsPerUnitYAxis",
-                                   Integer.toString(pHYs_pixelsPerUnitYAxis));
-            pHYs_node.setAttribute("unitSpecifier",
-                                   unitSpecifierNames[pHYs_unitSpecifier]);
-
-            root.appendChild(pHYs_node);
-        }
-
-        // sBIT
-        if (sBIT_present) {
-            IIOMetadataNode sBIT_node = new IIOMetadataNode("sBIT");
-
-            if (sBIT_colorType == PNGImageReader.PNG_COLOR_GRAY) {
-                node = new IIOMetadataNode("sBIT_Grayscale");
-                node.setAttribute("gray",
-                                  Integer.toString(sBIT_grayBits));
-            } else if (sBIT_colorType == PNGImageReader.PNG_COLOR_GRAY_ALPHA) {
-                node = new IIOMetadataNode("sBIT_GrayAlpha");
-                node.setAttribute("gray",
-                                  Integer.toString(sBIT_grayBits));
-                node.setAttribute("alpha",
-                                  Integer.toString(sBIT_alphaBits));
-            } else if (sBIT_colorType == PNGImageReader.PNG_COLOR_RGB) {
-                node = new IIOMetadataNode("sBIT_RGB");
-                node.setAttribute("red",
-                                  Integer.toString(sBIT_redBits));
-                node.setAttribute("green",
-                                  Integer.toString(sBIT_greenBits));
-                node.setAttribute("blue",
-                                  Integer.toString(sBIT_blueBits));
-            } else if (sBIT_colorType == PNGImageReader.PNG_COLOR_RGB_ALPHA) {
-                node = new IIOMetadataNode("sBIT_RGBAlpha");
-                node.setAttribute("red",
-                                  Integer.toString(sBIT_redBits));
-                node.setAttribute("green",
-                                  Integer.toString(sBIT_greenBits));
-                node.setAttribute("blue",
-                                  Integer.toString(sBIT_blueBits));
-                node.setAttribute("alpha",
-                                  Integer.toString(sBIT_alphaBits));
-            } else if (sBIT_colorType == PNGImageReader.PNG_COLOR_PALETTE) {
-                node = new IIOMetadataNode("sBIT_Palette");
-                node.setAttribute("red",
-                                  Integer.toString(sBIT_redBits));
-                node.setAttribute("green",
-                                  Integer.toString(sBIT_greenBits));
-                node.setAttribute("blue",
-                                  Integer.toString(sBIT_blueBits));
-            }
-            sBIT_node.appendChild(node);
-
-            root.appendChild(sBIT_node);
-        }
-
-        // sPLT
-        if (sPLT_present) {
-            IIOMetadataNode sPLT_node = new IIOMetadataNode("sPLT");
-
-            sPLT_node.setAttribute("name", sPLT_paletteName);
-            sPLT_node.setAttribute("sampleDepth",
-                                   Integer.toString(sPLT_sampleDepth));
-
-            int numEntries = sPLT_red.length;
-            for (int i = 0; i < numEntries; i++) {
-                IIOMetadataNode entry = new IIOMetadataNode("sPLTEntry");
-                entry.setAttribute("index", Integer.toString(i));
-                entry.setAttribute("red", Integer.toString(sPLT_red[i]));
-                entry.setAttribute("green", Integer.toString(sPLT_green[i]));
-                entry.setAttribute("blue", Integer.toString(sPLT_blue[i]));
-                entry.setAttribute("alpha", Integer.toString(sPLT_alpha[i]));
-                entry.setAttribute("frequency",
-                                  Integer.toString(sPLT_frequency[i]));
-                sPLT_node.appendChild(entry);
-            }
-
-            root.appendChild(sPLT_node);
-        }
-
-        // sRGB
-        if (sRGB_present) {
-            IIOMetadataNode sRGB_node = new IIOMetadataNode("sRGB");
-            sRGB_node.setAttribute("renderingIntent",
-                                   renderingIntentNames[sRGB_renderingIntent]);
-
-            root.appendChild(sRGB_node);
-        }
-
-        // tEXt
-        if (tEXt_keyword.size() > 0) {
-            IIOMetadataNode tEXt_parent = new IIOMetadataNode("tEXt");
-            for (int i = 0; i < tEXt_keyword.size(); i++) {
-                IIOMetadataNode tEXt_node = new IIOMetadataNode("tEXtEntry");
-                tEXt_node.setAttribute("keyword" , (String)tEXt_keyword.get(i));
-                tEXt_node.setAttribute("value" , (String)tEXt_text.get(i));
-
-                tEXt_parent.appendChild(tEXt_node);
-            }
-
-            root.appendChild(tEXt_parent);
-        }
-
-        // tIME
-        if (tIME_present) {
-            IIOMetadataNode tIME_node = new IIOMetadataNode("tIME");
-            tIME_node.setAttribute("year", Integer.toString(tIME_year));
-            tIME_node.setAttribute("month", Integer.toString(tIME_month));
-            tIME_node.setAttribute("day", Integer.toString(tIME_day));
-            tIME_node.setAttribute("hour", Integer.toString(tIME_hour));
-            tIME_node.setAttribute("minute", Integer.toString(tIME_minute));
-            tIME_node.setAttribute("second", Integer.toString(tIME_second));
-
-            root.appendChild(tIME_node);
-        }
-
-        // tRNS
-        if (tRNS_present) {
-            IIOMetadataNode tRNS_node = new IIOMetadataNode("tRNS");
-
-            if (tRNS_colorType == PNGImageReader.PNG_COLOR_PALETTE) {
-                node = new IIOMetadataNode("tRNS_Palette");
-
-                for (int i = 0; i < tRNS_alpha.length; i++) {
-                    IIOMetadataNode entry =
-                        new IIOMetadataNode("tRNS_PaletteEntry");
-                    entry.setAttribute("index", Integer.toString(i));
-                    entry.setAttribute("alpha",
-                                       Integer.toString(tRNS_alpha[i] & 0xff));
-                    node.appendChild(entry);
-                }
-            } else if (tRNS_colorType == PNGImageReader.PNG_COLOR_GRAY) {
-                node = new IIOMetadataNode("tRNS_Grayscale");
-                node.setAttribute("gray", Integer.toString(tRNS_gray));
-            } else if (tRNS_colorType == PNGImageReader.PNG_COLOR_RGB) {
-                node = new IIOMetadataNode("tRNS_RGB");
-                node.setAttribute("red", Integer.toString(tRNS_red));
-                node.setAttribute("green", Integer.toString(tRNS_green));
-                node.setAttribute("blue", Integer.toString(tRNS_blue));
-            }
-            tRNS_node.appendChild(node);
-
-            root.appendChild(tRNS_node);
-        }
-
-        // zTXt
-        if (zTXt_keyword.size() > 0) {
-            IIOMetadataNode zTXt_parent = new IIOMetadataNode("zTXt");
-            for (int i = 0; i < zTXt_keyword.size(); i++) {
-                IIOMetadataNode zTXt_node = new IIOMetadataNode("zTXtEntry");
-                zTXt_node.setAttribute("keyword", (String)zTXt_keyword.get(i));
-
-                int cm = ((Integer)zTXt_compressionMethod.get(i)).intValue();
-                zTXt_node.setAttribute("compressionMethod",
-                                       zTXt_compressionMethodNames[cm]);
-
-                zTXt_node.setAttribute("text", (String)zTXt_text.get(i));
-
-                zTXt_parent.appendChild(zTXt_node);
-            }
-
-            root.appendChild(zTXt_parent);
-        }
-
-        // Unknown chunks
-        if (unknownChunkType.size() > 0) {
-            IIOMetadataNode unknown_parent =
-                new IIOMetadataNode("UnknownChunks");
-            for (int i = 0; i < unknownChunkType.size(); i++) {
-                IIOMetadataNode unknown_node =
-                    new IIOMetadataNode("UnknownChunk");
-                unknown_node.setAttribute("type",
-                                          (String)unknownChunkType.get(i));
-                unknown_node.setUserObject((byte[])unknownChunkData.get(i));
-
-                unknown_parent.appendChild(unknown_node);
-            }
-
-            root.appendChild(unknown_parent);
-        }
-
-        return root;
-    }
-
-    private int getNumChannels() {
-        // Determine number of channels
-        // Be careful about palette color with transparency
-        int numChannels = IHDR_numChannels[IHDR_colorType];
-        if (IHDR_colorType == PNGImageReader.PNG_COLOR_PALETTE &&
-            tRNS_present && tRNS_colorType == IHDR_colorType) {
-            numChannels = 4;
-        }
-        return numChannels;
-    }
-
-    public IIOMetadataNode getStandardChromaNode() {
-        IIOMetadataNode chroma_node = new IIOMetadataNode("Chroma");
-        IIOMetadataNode node = null; // scratch node
-
-        node = new IIOMetadataNode("ColorSpaceType");
-        node.setAttribute("name", colorSpaceTypeNames[IHDR_colorType]);
-        chroma_node.appendChild(node);
-
-        node = new IIOMetadataNode("NumChannels");
-        node.setAttribute("value", Integer.toString(getNumChannels()));
-        chroma_node.appendChild(node);
-
-        if (gAMA_present) {
-            node = new IIOMetadataNode("Gamma");
-            node.setAttribute("value", Float.toString(gAMA_gamma*1.0e-5F));
-            chroma_node.appendChild(node);
-        }
-
-        node = new IIOMetadataNode("BlackIsZero");
-        node.setAttribute("value", "TRUE");
-        chroma_node.appendChild(node);
-
-        if (PLTE_present) {
-            boolean hasAlpha = tRNS_present &&
-                (tRNS_colorType == PNGImageReader.PNG_COLOR_PALETTE);
-
-            node = new IIOMetadataNode("Palette");
-            for (int i = 0; i < PLTE_red.length; i++) {
-                IIOMetadataNode entry =
-                    new IIOMetadataNode("PaletteEntry");
-                entry.setAttribute("index", Integer.toString(i));
-                entry.setAttribute("red",
-                                   Integer.toString(PLTE_red[i] & 0xff));
-                entry.setAttribute("green",
-                                   Integer.toString(PLTE_green[i] & 0xff));
-                entry.setAttribute("blue",
-                                   Integer.toString(PLTE_blue[i] & 0xff));
-                if (hasAlpha) {
-                    int alpha = (i < tRNS_alpha.length) ?
-                        (tRNS_alpha[i] & 0xff) : 255;
-                    entry.setAttribute("alpha", Integer.toString(alpha));
-                }
-                node.appendChild(entry);
-            }
-            chroma_node.appendChild(node);
-        }
-
-        if (bKGD_present) {
-            if (bKGD_colorType == PNGImageReader.PNG_COLOR_PALETTE) {
-                node = new IIOMetadataNode("BackgroundIndex");
-                node.setAttribute("value", Integer.toString(bKGD_index));
-            } else {
-                node = new IIOMetadataNode("BackgroundColor");
-                int r, g, b;
-
-                if (bKGD_colorType == PNGImageReader.PNG_COLOR_GRAY) {
-                    r = g = b = bKGD_gray;
-                } else {
-                    r = bKGD_red;
-                    g = bKGD_green;
-                    b = bKGD_blue;
-                }
-                node.setAttribute("red", Integer.toString(r));
-                node.setAttribute("green", Integer.toString(g));
-                node.setAttribute("blue", Integer.toString(b));
-            }
-            chroma_node.appendChild(node);
-        }
-
-        return chroma_node;
-    }
-
-    public IIOMetadataNode getStandardCompressionNode() {
-        IIOMetadataNode compression_node = new IIOMetadataNode("Compression");
-        IIOMetadataNode node = null; // scratch node
-
-        node = new IIOMetadataNode("CompressionTypeName");
-        node.setAttribute("value", "deflate");
-        compression_node.appendChild(node);
-
-        node = new IIOMetadataNode("Lossless");
-        node.setAttribute("value", "TRUE");
-        compression_node.appendChild(node);
-
-        node = new IIOMetadataNode("NumProgressiveScans");
-        node.setAttribute("value",
-                          (IHDR_interlaceMethod == 0) ? "1" : "7");
-        compression_node.appendChild(node);
-
-        return compression_node;
-    }
-
-    private String repeat(String s, int times) {
-        if (times == 1) {
-            return s;
-        }
-        StringBuffer sb = new StringBuffer((s.length() + 1)*times - 1);
-        sb.append(s);
-        for (int i = 1; i < times; i++) {
-            sb.append(" ");
-            sb.append(s);
-        }
-        return sb.toString();
-    }
-
-    public IIOMetadataNode getStandardDataNode() {
-        IIOMetadataNode data_node = new IIOMetadataNode("Data");
-        IIOMetadataNode node = null; // scratch node
-
-        node = new IIOMetadataNode("PlanarConfiguration");
-        node.setAttribute("value", "PixelInterleaved");
-        data_node.appendChild(node);
-
-        node = new IIOMetadataNode("SampleFormat");
-        node.setAttribute("value",
-                          IHDR_colorType == PNGImageReader.PNG_COLOR_PALETTE ?
-                          "Index" : "UnsignedIntegral");
-        data_node.appendChild(node);
-
-        String bitDepth = Integer.toString(IHDR_bitDepth);
-        node = new IIOMetadataNode("BitsPerSample");
-        node.setAttribute("value", repeat(bitDepth, getNumChannels()));
-        data_node.appendChild(node);
-
-        if (sBIT_present) {
-            node = new IIOMetadataNode("SignificantBitsPerSample");
-            String sbits;
-            if (sBIT_colorType == PNGImageReader.PNG_COLOR_GRAY ||
-                sBIT_colorType == PNGImageReader.PNG_COLOR_GRAY_ALPHA) {
-                sbits = Integer.toString(sBIT_grayBits);
-            } else { // sBIT_colorType == PNGImageReader.PNG_COLOR_RGB ||
-                     // sBIT_colorType == PNGImageReader.PNG_COLOR_RGB_ALPHA
-                sbits = Integer.toString(sBIT_redBits) + " " +
-                    Integer.toString(sBIT_greenBits) + " " +
-                    Integer.toString(sBIT_blueBits);
-            }
-
-            if (sBIT_colorType == PNGImageReader.PNG_COLOR_GRAY_ALPHA ||
-                sBIT_colorType == PNGImageReader.PNG_COLOR_RGB_ALPHA) {
-                sbits += " " + Integer.toString(sBIT_alphaBits);
-            }
-
-            node.setAttribute("value", sbits);
-            data_node.appendChild(node);
-        }
-
-        // SampleMSB
-
-        return data_node;
-    }
-
-    public IIOMetadataNode getStandardDimensionNode() {
-        IIOMetadataNode dimension_node = new IIOMetadataNode("Dimension");
-        IIOMetadataNode node = null; // scratch node
-
-        node = new IIOMetadataNode("PixelAspectRatio");
-        float ratio = pHYs_present ?
-            (float)pHYs_pixelsPerUnitXAxis/pHYs_pixelsPerUnitYAxis : 1.0F;
-        node.setAttribute("value", Float.toString(ratio));
-        dimension_node.appendChild(node);
-
-        node = new IIOMetadataNode("ImageOrientation");
-        node.setAttribute("value", "Normal");
-        dimension_node.appendChild(node);
-
-        if (pHYs_present && pHYs_unitSpecifier == PHYS_UNIT_METER) {
-            node = new IIOMetadataNode("HorizontalPixelSize");
-            node.setAttribute("value",
-                              Float.toString(1000.0F/pHYs_pixelsPerUnitXAxis));
-            dimension_node.appendChild(node);
-
-            node = new IIOMetadataNode("VerticalPixelSize");
-            node.setAttribute("value",
-                              Float.toString(1000.0F/pHYs_pixelsPerUnitYAxis));
-            dimension_node.appendChild(node);
-        }
-
-        return dimension_node;
-    }
-
-    public IIOMetadataNode getStandardDocumentNode() {
-        if (!tIME_present) {
-            return null;
-        }
-
-        IIOMetadataNode document_node = new IIOMetadataNode("Document");
-        IIOMetadataNode node = null; // scratch node
-
-        node = new IIOMetadataNode("ImageModificationTime");
-        node.setAttribute("year", Integer.toString(tIME_year));
-        node.setAttribute("month", Integer.toString(tIME_month));
-        node.setAttribute("day", Integer.toString(tIME_day));
-        node.setAttribute("hour", Integer.toString(tIME_hour));
-        node.setAttribute("minute", Integer.toString(tIME_minute));
-        node.setAttribute("second", Integer.toString(tIME_second));
-        document_node.appendChild(node);
-
-        return document_node;
-    }
-
-    public IIOMetadataNode getStandardTextNode() {
-        int numEntries = tEXt_keyword.size() +
-            iTXt_keyword.size() + zTXt_keyword.size();
-        if (numEntries == 0) {
-            return null;
-        }
-
-        IIOMetadataNode text_node = new IIOMetadataNode("Text");
-        IIOMetadataNode node = null; // scratch node
-
-        for (int i = 0; i < tEXt_keyword.size(); i++) {
-            node = new IIOMetadataNode("TextEntry");
-            node.setAttribute("keyword", (String)tEXt_keyword.get(i));
-            node.setAttribute("value", (String)tEXt_text.get(i));
-            node.setAttribute("encoding", "ISO-8859-1");
-            node.setAttribute("compression", "none");
-
-            text_node.appendChild(node);
-        }
-
-        for (int i = 0; i < iTXt_keyword.size(); i++) {
-            node = new IIOMetadataNode("TextEntry");
-            node.setAttribute("keyword", iTXt_keyword.get(i));
-            node.setAttribute("value", iTXt_text.get(i));
-            node.setAttribute("language",
-                              iTXt_languageTag.get(i));
-            if (iTXt_compressionFlag.get(i)) {
-                node.setAttribute("compression", "zip");
-            } else {
-                node.setAttribute("compression", "none");
-            }
-
-            text_node.appendChild(node);
-        }
-
-        for (int i = 0; i < zTXt_keyword.size(); i++) {
-            node = new IIOMetadataNode("TextEntry");
-            node.setAttribute("keyword", (String)zTXt_keyword.get(i));
-            node.setAttribute("value", (String)zTXt_text.get(i));
-            node.setAttribute("compression", "zip");
-
-            text_node.appendChild(node);
-        }
-
-        return text_node;
-    }
-
-    public IIOMetadataNode getStandardTransparencyNode() {
-        IIOMetadataNode transparency_node =
-            new IIOMetadataNode("Transparency");
-        IIOMetadataNode node = null; // scratch node
-
-        node = new IIOMetadataNode("Alpha");
-        boolean hasAlpha =
-            (IHDR_colorType == PNGImageReader.PNG_COLOR_RGB_ALPHA) ||
-            (IHDR_colorType == PNGImageReader.PNG_COLOR_GRAY_ALPHA) ||
-            (IHDR_colorType == PNGImageReader.PNG_COLOR_PALETTE &&
-             tRNS_present &&
-             (tRNS_colorType == IHDR_colorType) &&
-             (tRNS_alpha != null));
-        node.setAttribute("value", hasAlpha ? "nonpremultipled" : "none");
-        transparency_node.appendChild(node);
-
-        if (tRNS_present) {
-            node = new IIOMetadataNode("TransparentColor");
-            if (tRNS_colorType == PNGImageReader.PNG_COLOR_RGB) {
-                node.setAttribute("value",
-                                  Integer.toString(tRNS_red) + " " +
-                                  Integer.toString(tRNS_green) + " " +
-                                  Integer.toString(tRNS_blue));
-            } else if (tRNS_colorType == PNGImageReader.PNG_COLOR_GRAY) {
-                node.setAttribute("value", Integer.toString(tRNS_gray));
-            }
-            transparency_node.appendChild(node);
-        }
-
-        return transparency_node;
-    }
-
-    // Shorthand for throwing an IIOInvalidTreeException
-    private void fatal(Node node, String reason)
-        throws IIOInvalidTreeException {
-        throw new IIOInvalidTreeException(reason, node);
-    }
-
-    // Get an integer-valued attribute
-    private String getStringAttribute(Node node, String name,
-                                      String defaultValue, boolean required)
-        throws IIOInvalidTreeException {
-        Node attr = node.getAttributes().getNamedItem(name);
-        if (attr == null) {
-            if (!required) {
-                return defaultValue;
-            } else {
-                fatal(node, "Required attribute " + name + " not present!");
-            }
-        }
-        return attr.getNodeValue();
-    }
-
-
-    // Get an integer-valued attribute
-    private int getIntAttribute(Node node, String name,
-                                int defaultValue, boolean required)
-        throws IIOInvalidTreeException {
-        String value = getStringAttribute(node, name, null, required);
-        if (value == null) {
-            return defaultValue;
-        }
-        return Integer.parseInt(value);
-    }
-
-    // Get a float-valued attribute
-    private float getFloatAttribute(Node node, String name,
-                                    float defaultValue, boolean required)
-        throws IIOInvalidTreeException {
-        String value = getStringAttribute(node, name, null, required);
-        if (value == null) {
-            return defaultValue;
-        }
-        return Float.parseFloat(value);
-    }
-
-    // Get a required integer-valued attribute
-    private int getIntAttribute(Node node, String name)
-        throws IIOInvalidTreeException {
-        return getIntAttribute(node, name, -1, true);
-    }
-
-    // Get a required float-valued attribute
-    private float getFloatAttribute(Node node, String name)
-        throws IIOInvalidTreeException {
-        return getFloatAttribute(node, name, -1.0F, true);
-    }
-
-    // Get a boolean-valued attribute
-    private boolean getBooleanAttribute(Node node, String name,
-                                        boolean defaultValue,
-                                        boolean required)
-        throws IIOInvalidTreeException {
-        Node attr = node.getAttributes().getNamedItem(name);
-        if (attr == null) {
-            if (!required) {
-                return defaultValue;
-            } else {
-                fatal(node, "Required attribute " + name + " not present!");
-            }
-        }
-        String value = attr.getNodeValue();
-        // Allow lower case booleans for backward compatibility, #5082756
-        if (value.equals("TRUE") || value.equals("true")) {
-            return true;
-        } else if (value.equals("FALSE") || value.equals("false")) {
-            return false;
-        } else {
-            fatal(node, "Attribute " + name + " must be 'TRUE' or 'FALSE'!");
-            return false;
-        }
-    }
-
-    // Get a required boolean-valued attribute
-    private boolean getBooleanAttribute(Node node, String name)
-        throws IIOInvalidTreeException {
-        return getBooleanAttribute(node, name, false, true);
-    }
-
-    // Get an enumerated attribute as an index into a String array
-    private int getEnumeratedAttribute(Node node,
-                                       String name, String[] legalNames,
-                                       int defaultValue, boolean required)
-        throws IIOInvalidTreeException {
-        Node attr = node.getAttributes().getNamedItem(name);
-        if (attr == null) {
-            if (!required) {
-                return defaultValue;
-            } else {
-                fatal(node, "Required attribute " + name + " not present!");
-            }
-        }
-        String value = attr.getNodeValue();
-        for (int i = 0; i < legalNames.length; i++) {
-            if (value.equals(legalNames[i])) {
-                return i;
-            }
-        }
-
-        fatal(node, "Illegal value for attribute " + name + "!");
-        return -1;
-    }
-
-    // Get a required enumerated attribute as an index into a String array
-    private int getEnumeratedAttribute(Node node,
-                                       String name, String[] legalNames)
-        throws IIOInvalidTreeException {
-        return getEnumeratedAttribute(node, name, legalNames, -1, true);
-    }
-
-    // Get a String-valued attribute
-    private String getAttribute(Node node, String name,
-                                String defaultValue, boolean required)
-        throws IIOInvalidTreeException {
-        Node attr = node.getAttributes().getNamedItem(name);
-        if (attr == null) {
-            if (!required) {
-                return defaultValue;
-            } else {
-                fatal(node, "Required attribute " + name + " not present!");
-            }
-        }
-        return attr.getNodeValue();
-    }
-
-    // Get a required String-valued attribute
-    private String getAttribute(Node node, String name)
-        throws IIOInvalidTreeException {
-            return getAttribute(node, name, null, true);
-    }
-
-    public void mergeTree(String formatName, Node root)
-        throws IIOInvalidTreeException {
-        if (formatName.equals(nativeMetadataFormatName)) {
-            if (root == null) {
-                throw new IllegalArgumentException("root == null!");
-            }
-            mergeNativeTree(root);
-        } else if (formatName.equals
-                   (IIOMetadataFormatImpl.standardMetadataFormatName)) {
-            if (root == null) {
-                throw new IllegalArgumentException("root == null!");
-            }
-            mergeStandardTree(root);
-        } else {
-            throw new IllegalArgumentException("Not a recognized format!");
-        }
-    }
-
-    private void mergeNativeTree(Node root)
-        throws IIOInvalidTreeException {
-        Node node = root;
-        if (!node.getNodeName().equals(nativeMetadataFormatName)) {
-            fatal(node, "Root must be " + nativeMetadataFormatName);
-        }
-
-        node = node.getFirstChild();
-        while (node != null) {
-            String name = node.getNodeName();
-
-            if (name.equals("IHDR")) {
-                IHDR_width = getIntAttribute(node, "width");
-                IHDR_height = getIntAttribute(node, "height");
-                IHDR_bitDepth = getEnumeratedAttribute(node, "bitDepth",
-                                                       IHDR_bitDepths);
-                IHDR_colorType = getEnumeratedAttribute(node, "colorType",
-                                                        IHDR_colorTypeNames);
-                IHDR_compressionMethod =
-                    getEnumeratedAttribute(node, "compressionMethod",
-                                           IHDR_compressionMethodNames);
-                IHDR_filterMethod =
-                    getEnumeratedAttribute(node,
-                                           "filterMethod",
-                                           IHDR_filterMethodNames);
-                IHDR_interlaceMethod =
-                    getEnumeratedAttribute(node, "interlaceMethod",
-                                           IHDR_interlaceMethodNames);
-                IHDR_present = true;
-            } else if (name.equals("PLTE")) {
-                byte[] red = new byte[256];
-                byte[] green  = new byte[256];
-                byte[] blue = new byte[256];
-                int maxindex = -1;
-
-                Node PLTE_entry = node.getFirstChild();
-                if (PLTE_entry == null) {
-                    fatal(node, "Palette has no entries!");
-                }
-
-                while (PLTE_entry != null) {
-                    if (!PLTE_entry.getNodeName().equals("PLTEEntry")) {
-                        fatal(node,
-                              "Only a PLTEEntry may be a child of a PLTE!");
-                    }
-
-                    int index = getIntAttribute(PLTE_entry, "index");
-                    if (index < 0 || index > 255) {
-                        fatal(node,
-                              "Bad value for PLTEEntry attribute index!");
-                    }
-                    if (index > maxindex) {
-                        maxindex = index;
-                    }
-                    red[index] =
-                        (byte)getIntAttribute(PLTE_entry, "red");
-                    green[index] =
-                        (byte)getIntAttribute(PLTE_entry, "green");
-                    blue[index] =
-                        (byte)getIntAttribute(PLTE_entry, "blue");
-
-                    PLTE_entry = PLTE_entry.getNextSibling();
-                }
-
-                int numEntries = maxindex + 1;
-                PLTE_red = new byte[numEntries];
-                PLTE_green = new byte[numEntries];
-                PLTE_blue = new byte[numEntries];
-                System.arraycopy(red, 0, PLTE_red, 0, numEntries);
-                System.arraycopy(green, 0, PLTE_green, 0, numEntries);
-                System.arraycopy(blue, 0, PLTE_blue, 0, numEntries);
-                PLTE_present = true;
-            } else if (name.equals("bKGD")) {
-                bKGD_present = false; // Guard against partial overwrite
-                Node bKGD_node = node.getFirstChild();
-                if (bKGD_node == null) {
-                    fatal(node, "bKGD node has no children!");
-                }
-                String bKGD_name = bKGD_node.getNodeName();
-                if (bKGD_name.equals("bKGD_Palette")) {
-                    bKGD_index = getIntAttribute(bKGD_node, "index");
-                    bKGD_colorType = PNGImageReader.PNG_COLOR_PALETTE;
-                } else if (bKGD_name.equals("bKGD_Grayscale")) {
-                    bKGD_gray = getIntAttribute(bKGD_node, "gray");
-                    bKGD_colorType = PNGImageReader.PNG_COLOR_GRAY;
-                } else if (bKGD_name.equals("bKGD_RGB")) {
-                    bKGD_red = getIntAttribute(bKGD_node, "red");
-                    bKGD_green = getIntAttribute(bKGD_node, "green");
-                    bKGD_blue = getIntAttribute(bKGD_node, "blue");
-                    bKGD_colorType = PNGImageReader.PNG_COLOR_RGB;
-                } else {
-                    fatal(node, "Bad child of a bKGD node!");
-                }
-                if (bKGD_node.getNextSibling() != null) {
-                    fatal(node, "bKGD node has more than one child!");
-                }
-
-                bKGD_present = true;
-            } else if (name.equals("cHRM")) {
-                cHRM_whitePointX = getIntAttribute(node, "whitePointX");
-                cHRM_whitePointY = getIntAttribute(node, "whitePointY");
-                cHRM_redX = getIntAttribute(node, "redX");
-                cHRM_redY = getIntAttribute(node, "redY");
-                cHRM_greenX = getIntAttribute(node, "greenX");
-                cHRM_greenY = getIntAttribute(node, "greenY");
-                cHRM_blueX = getIntAttribute(node, "blueX");
-                cHRM_blueY = getIntAttribute(node, "blueY");
-
-                cHRM_present = true;
-            } else if (name.equals("gAMA")) {
-                gAMA_gamma = getIntAttribute(node, "value");
-                gAMA_present = true;
-            } else if (name.equals("hIST")) {
-                char[] hist = new char[256];
-                int maxindex = -1;
-
-                Node hIST_entry = node.getFirstChild();
-                if (hIST_entry == null) {
-                    fatal(node, "hIST node has no children!");
-                }
-
-                while (hIST_entry != null) {
-                    if (!hIST_entry.getNodeName().equals("hISTEntry")) {
-                        fatal(node,
-                              "Only a hISTEntry may be a child of a hIST!");
-                    }
-
-                    int index = getIntAttribute(hIST_entry, "index");
-                    if (index < 0 || index > 255) {
-                        fatal(node,
-                              "Bad value for histEntry attribute index!");
-                    }
-                    if (index > maxindex) {
-                        maxindex = index;
-                    }
-                    hist[index] =
-                        (char)getIntAttribute(hIST_entry, "value");
-
-                    hIST_entry = hIST_entry.getNextSibling();
-                }
-
-                int numEntries = maxindex + 1;
-                hIST_histogram = new char[numEntries];
-                System.arraycopy(hist, 0, hIST_histogram, 0, numEntries);
-
-                hIST_present = true;
-            } else if (name.equals("iCCP")) {
-                iCCP_profileName = getAttribute(node, "profileName");
-                iCCP_compressionMethod =
-                    getEnumeratedAttribute(node, "compressionMethod",
-                                           iCCP_compressionMethodNames);
-                Object compressedProfile =
-                    ((IIOMetadataNode)node).getUserObject();
-                if (compressedProfile == null) {
-                    fatal(node, "No ICCP profile present in user object!");
-                }
-                if (!(compressedProfile instanceof byte[])) {
-                    fatal(node, "User object not a byte array!");
-                }
-
-                iCCP_compressedProfile =
-                    (byte[])((byte[])compressedProfile).clone();
-
-                iCCP_present = true;
-            } else if (name.equals("iTXt")) {
-                Node iTXt_node = node.getFirstChild();
-                while (iTXt_node != null) {
-                    if (!iTXt_node.getNodeName().equals("iTXtEntry")) {
-                        fatal(node,
-                              "Only an iTXtEntry may be a child of an iTXt!");
-                    }
-
-                    String keyword = getAttribute(iTXt_node, "keyword");
-                    if (isValidKeyword(keyword)) {
-                        iTXt_keyword.add(keyword);
-
-                        boolean compressionFlag =
-                            getBooleanAttribute(iTXt_node, "compressionFlag");
-                        iTXt_compressionFlag.add(Boolean.valueOf(compressionFlag));
-
-                        String compressionMethod =
-                            getAttribute(iTXt_node, "compressionMethod");
-                        iTXt_compressionMethod.add(Integer.valueOf(compressionMethod));
-
-                        String languageTag =
-                            getAttribute(iTXt_node, "languageTag");
-                        iTXt_languageTag.add(languageTag);
-
-                        String translatedKeyword =
-                            getAttribute(iTXt_node, "translatedKeyword");
-                        iTXt_translatedKeyword.add(translatedKeyword);
-
-                        String text = getAttribute(iTXt_node, "text");
-                        iTXt_text.add(text);
-
-                    }
-                    // silently skip invalid text entry
-
-                    iTXt_node = iTXt_node.getNextSibling();
-                }
-            } else if (name.equals("pHYs")) {
-                pHYs_pixelsPerUnitXAxis =
-                    getIntAttribute(node, "pixelsPerUnitXAxis");
-                pHYs_pixelsPerUnitYAxis =
-                    getIntAttribute(node, "pixelsPerUnitYAxis");
-                pHYs_unitSpecifier =
-                    getEnumeratedAttribute(node, "unitSpecifier",
-                                           unitSpecifierNames);
-
-                pHYs_present = true;
-            } else if (name.equals("sBIT")) {
-                sBIT_present = false; // Guard against partial overwrite
-                Node sBIT_node = node.getFirstChild();
-                if (sBIT_node == null) {
-                    fatal(node, "sBIT node has no children!");
-                }
-                String sBIT_name = sBIT_node.getNodeName();
-                if (sBIT_name.equals("sBIT_Grayscale")) {
-                    sBIT_grayBits = getIntAttribute(sBIT_node, "gray");
-                    sBIT_colorType = PNGImageReader.PNG_COLOR_GRAY;
-                } else if (sBIT_name.equals("sBIT_GrayAlpha")) {
-                    sBIT_grayBits = getIntAttribute(sBIT_node, "gray");
-                    sBIT_alphaBits = getIntAttribute(sBIT_node, "alpha");
-                    sBIT_colorType = PNGImageReader.PNG_COLOR_GRAY_ALPHA;
-                } else if (sBIT_name.equals("sBIT_RGB")) {
-                    sBIT_redBits = getIntAttribute(sBIT_node, "red");
-                    sBIT_greenBits = getIntAttribute(sBIT_node, "green");
-                    sBIT_blueBits = getIntAttribute(sBIT_node, "blue");
-                    sBIT_colorType = PNGImageReader.PNG_COLOR_RGB;
-                } else if (sBIT_name.equals("sBIT_RGBAlpha")) {
-                    sBIT_redBits = getIntAttribute(sBIT_node, "red");
-                    sBIT_greenBits = getIntAttribute(sBIT_node, "green");
-                    sBIT_blueBits = getIntAttribute(sBIT_node, "blue");
-                    sBIT_alphaBits = getIntAttribute(sBIT_node, "alpha");
-                    sBIT_colorType = PNGImageReader.PNG_COLOR_RGB_ALPHA;
-                } else if (sBIT_name.equals("sBIT_Palette")) {
-                    sBIT_redBits = getIntAttribute(sBIT_node, "red");
-                    sBIT_greenBits = getIntAttribute(sBIT_node, "green");
-                    sBIT_blueBits = getIntAttribute(sBIT_node, "blue");
-                    sBIT_colorType = PNGImageReader.PNG_COLOR_PALETTE;
-                } else {
-                    fatal(node, "Bad child of an sBIT node!");
-                }
-                if (sBIT_node.getNextSibling() != null) {
-                    fatal(node, "sBIT node has more than one child!");
-                }
-
-                sBIT_present = true;
-            } else if (name.equals("sPLT")) {
-                sPLT_paletteName = getAttribute(node, "name");
-                sPLT_sampleDepth = getIntAttribute(node, "sampleDepth");
-
-                int[] red = new int[256];
-                int[] green  = new int[256];
-                int[] blue = new int[256];
-                int[] alpha = new int[256];
-                int[] frequency = new int[256];
-                int maxindex = -1;
-
-                Node sPLT_entry = node.getFirstChild();
-                if (sPLT_entry == null) {
-                    fatal(node, "sPLT node has no children!");
-                }
-
-                while (sPLT_entry != null) {
-                    if (!sPLT_entry.getNodeName().equals("sPLTEntry")) {
-                        fatal(node,
-                              "Only an sPLTEntry may be a child of an sPLT!");
-                    }
-
-                    int index = getIntAttribute(sPLT_entry, "index");
-                    if (index < 0 || index > 255) {
-                        fatal(node,
-                              "Bad value for PLTEEntry attribute index!");
-                    }
-                    if (index > maxindex) {
-                        maxindex = index;
-                    }
-                    red[index] = getIntAttribute(sPLT_entry, "red");
-                    green[index] = getIntAttribute(sPLT_entry, "green");
-                    blue[index] = getIntAttribute(sPLT_entry, "blue");
-                    alpha[index] = getIntAttribute(sPLT_entry, "alpha");
-                    frequency[index] =
-                        getIntAttribute(sPLT_entry, "frequency");
-
-                    sPLT_entry = sPLT_entry.getNextSibling();
-                }
-
-                int numEntries = maxindex + 1;
-                sPLT_red = new int[numEntries];
-                sPLT_green = new int[numEntries];
-                sPLT_blue = new int[numEntries];
-                sPLT_alpha = new int[numEntries];
-                sPLT_frequency = new int[numEntries];
-                System.arraycopy(red, 0, sPLT_red, 0, numEntries);
-                System.arraycopy(green, 0, sPLT_green, 0, numEntries);
-                System.arraycopy(blue, 0, sPLT_blue, 0, numEntries);
-                System.arraycopy(alpha, 0, sPLT_alpha, 0, numEntries);
-                System.arraycopy(frequency, 0,
-                                 sPLT_frequency, 0, numEntries);
-
-                sPLT_present = true;
-            } else if (name.equals("sRGB")) {
-                sRGB_renderingIntent =
-                    getEnumeratedAttribute(node, "renderingIntent",
-                                           renderingIntentNames);
-
-                sRGB_present = true;
-            } else if (name.equals("tEXt")) {
-                Node tEXt_node = node.getFirstChild();
-                while (tEXt_node != null) {
-                    if (!tEXt_node.getNodeName().equals("tEXtEntry")) {
-                        fatal(node,
-                              "Only an tEXtEntry may be a child of an tEXt!");
-                    }
-
-                    String keyword = getAttribute(tEXt_node, "keyword");
-                    tEXt_keyword.add(keyword);
-
-                    String text = getAttribute(tEXt_node, "value");
-                    tEXt_text.add(text);
-
-                    tEXt_node = tEXt_node.getNextSibling();
-                }
-            } else if (name.equals("tIME")) {
-                tIME_year = getIntAttribute(node, "year");
-                tIME_month = getIntAttribute(node, "month");
-                tIME_day = getIntAttribute(node, "day");
-                tIME_hour = getIntAttribute(node, "hour");
-                tIME_minute = getIntAttribute(node, "minute");
-                tIME_second = getIntAttribute(node, "second");
-
-                tIME_present = true;
-            } else if (name.equals("tRNS")) {
-                tRNS_present = false; // Guard against partial overwrite
-                Node tRNS_node = node.getFirstChild();
-                if (tRNS_node == null) {
-                    fatal(node, "tRNS node has no children!");
-                }
-                String tRNS_name = tRNS_node.getNodeName();
-                if (tRNS_name.equals("tRNS_Palette")) {
-                    byte[] alpha = new byte[256];
-                    int maxindex = -1;
-
-                    Node tRNS_paletteEntry = tRNS_node.getFirstChild();
-                    if (tRNS_paletteEntry == null) {
-                        fatal(node, "tRNS_Palette node has no children!");
-                    }
-                    while (tRNS_paletteEntry != null) {
-                        if (!tRNS_paletteEntry.getNodeName().equals(
-                                                        "tRNS_PaletteEntry")) {
-                            fatal(node,
-                 "Only a tRNS_PaletteEntry may be a child of a tRNS_Palette!");
-                        }
-                        int index =
-                            getIntAttribute(tRNS_paletteEntry, "index");
-                        if (index < 0 || index > 255) {
-                            fatal(node,
-                           "Bad value for tRNS_PaletteEntry attribute index!");
-                        }
-                        if (index > maxindex) {
-                            maxindex = index;
-                        }
-                        alpha[index] =
-                            (byte)getIntAttribute(tRNS_paletteEntry,
-                                                  "alpha");
-
-                        tRNS_paletteEntry =
-                            tRNS_paletteEntry.getNextSibling();
-                    }
-
-                    int numEntries = maxindex + 1;
-                    tRNS_alpha = new byte[numEntries];
-                    tRNS_colorType = PNGImageReader.PNG_COLOR_PALETTE;
-                    System.arraycopy(alpha, 0, tRNS_alpha, 0, numEntries);
-                } else if (tRNS_name.equals("tRNS_Grayscale")) {
-                    tRNS_gray = getIntAttribute(tRNS_node, "gray");
-                    tRNS_colorType = PNGImageReader.PNG_COLOR_GRAY;
-                } else if (tRNS_name.equals("tRNS_RGB")) {
-                    tRNS_red = getIntAttribute(tRNS_node, "red");
-                    tRNS_green = getIntAttribute(tRNS_node, "green");
-                    tRNS_blue = getIntAttribute(tRNS_node, "blue");
-                    tRNS_colorType = PNGImageReader.PNG_COLOR_RGB;
-                } else {
-                    fatal(node, "Bad child of a tRNS node!");
-                }
-                if (tRNS_node.getNextSibling() != null) {
-                    fatal(node, "tRNS node has more than one child!");
-                }
-
-                tRNS_present = true;
-            } else if (name.equals("zTXt")) {
-                Node zTXt_node = node.getFirstChild();
-                while (zTXt_node != null) {
-                    if (!zTXt_node.getNodeName().equals("zTXtEntry")) {
-                        fatal(node,
-                              "Only an zTXtEntry may be a child of an zTXt!");
-                    }
-
-                    String keyword = getAttribute(zTXt_node, "keyword");
-                    zTXt_keyword.add(keyword);
-
-                    int compressionMethod =
-                        getEnumeratedAttribute(zTXt_node, "compressionMethod",
-                                               zTXt_compressionMethodNames);
-                    zTXt_compressionMethod.add(new Integer(compressionMethod));
-
-                    String text = getAttribute(zTXt_node, "text");
-                    zTXt_text.add(text);
-
-                    zTXt_node = zTXt_node.getNextSibling();
-                }
-            } else if (name.equals("UnknownChunks")) {
-                Node unknown_node = node.getFirstChild();
-                while (unknown_node != null) {
-                    if (!unknown_node.getNodeName().equals("UnknownChunk")) {
-                        fatal(node,
-                   "Only an UnknownChunk may be a child of an UnknownChunks!");
-                    }
-                    String chunkType = getAttribute(unknown_node, "type");
-                    Object chunkData =
-                        ((IIOMetadataNode)unknown_node).getUserObject();
-
-                    if (chunkType.length() != 4) {
-                        fatal(unknown_node,
-                              "Chunk type must be 4 characters!");
-                    }
-                    if (chunkData == null) {
-                        fatal(unknown_node,
-                              "No chunk data present in user object!");
-                    }
-                    if (!(chunkData instanceof byte[])) {
-                        fatal(unknown_node,
-                              "User object not a byte array!");
-                    }
-                    unknownChunkType.add(chunkType);
-                    unknownChunkData.add(((byte[])chunkData).clone());
-
-                    unknown_node = unknown_node.getNextSibling();
-                }
-            } else {
-                fatal(node, "Unknown child of root node!");
-            }
-
-            node = node.getNextSibling();
-        }
-    }
-
-    /*
-     * Accrding to PNG spec, keywords are restricted to 1 to 79 bytes
-     * in length. Keywords shall contain only printable Latin-1 characters
-     * and spaces; To reduce the chances for human misreading of a keyword,
-     * leading spaces, trailing spaces, and consecutive spaces are not
-     * permitted in keywords.
-     *
-     * See: http://www.w3.org/TR/PNG/#11keywords
-     */
-    private boolean isValidKeyword(String s) {
-        int len = s.length();
-        if (len < 1 || len >= 80) {
-            return false;
-        }
-        if (s.startsWith(" ") || s.endsWith(" ") || s.contains("  ")) {
-            return false;
-        }
-        return isISOLatin(s, false);
-    }
-
-    /*
-     * According to PNG spec, keyword shall contain only printable
-     * Latin-1 [ISO-8859-1] characters and spaces; that is, only
-     * character codes 32-126 and 161-255 decimal are allowed.
-     * For Latin-1 value fields the 0x10 (linefeed) control
-     * character is aloowed too.
-     *
-     * See: http://www.w3.org/TR/PNG/#11keywords
-     */
-    private boolean isISOLatin(String s, boolean isLineFeedAllowed) {
-        int len = s.length();
-        for (int i = 0; i < len; i++) {
-            char c = s.charAt(i);
-            if (c < 32 || c > 255 || (c > 126 && c < 161)) {
-                // not printable. Check whether this is an allowed
-                // control char
-                if (!isLineFeedAllowed || c != 0x10) {
-                    return false;
-                }
-            }
-        }
-        return true;
-    }
-
-    private void mergeStandardTree(Node root)
-        throws IIOInvalidTreeException {
-        Node node = root;
-        if (!node.getNodeName()
-            .equals(IIOMetadataFormatImpl.standardMetadataFormatName)) {
-            fatal(node, "Root must be " +
-                  IIOMetadataFormatImpl.standardMetadataFormatName);
-        }
-
-        node = node.getFirstChild();
-        while (node != null) {
-            String name = node.getNodeName();
-
-            if (name.equals("Chroma")) {
-                Node child = node.getFirstChild();
-                while (child != null) {
-                    String childName = child.getNodeName();
-                    if (childName.equals("Gamma")) {
-                        float gamma = getFloatAttribute(child, "value");
-                        gAMA_present = true;
-                        gAMA_gamma = (int)(gamma*100000 + 0.5);
-                    } else if (childName.equals("Palette")) {
-                        byte[] red = new byte[256];
-                        byte[] green = new byte[256];
-                        byte[] blue = new byte[256];
-                        int maxindex = -1;
-
-                        Node entry = child.getFirstChild();
-                        while (entry != null) {
-                            int index = getIntAttribute(entry, "index");
-                            if (index >= 0 && index <= 255) {
-                                red[index] =
-                                    (byte)getIntAttribute(entry, "red");
-                                green[index] =
-                                    (byte)getIntAttribute(entry, "green");
-                                blue[index] =
-                                    (byte)getIntAttribute(entry, "blue");
-                                if (index > maxindex) {
-                                    maxindex = index;
-                                }
-                            }
-                            entry = entry.getNextSibling();
-                        }
-
-                        int numEntries = maxindex + 1;
-                        PLTE_red = new byte[numEntries];
-                        PLTE_green = new byte[numEntries];
-                        PLTE_blue = new byte[numEntries];
-                        System.arraycopy(red, 0, PLTE_red, 0, numEntries);
-                        System.arraycopy(green, 0, PLTE_green, 0, numEntries);
-                        System.arraycopy(blue, 0, PLTE_blue, 0, numEntries);
-                        PLTE_present = true;
-                    } else if (childName.equals("BackgroundIndex")) {
-                        bKGD_present = true;
-                        bKGD_colorType = PNGImageReader.PNG_COLOR_PALETTE;
-                        bKGD_index = getIntAttribute(child, "value");
-                    } else if (childName.equals("BackgroundColor")) {
-                        int red = getIntAttribute(child, "red");
-                        int green = getIntAttribute(child, "green");
-                        int blue = getIntAttribute(child, "blue");
-                        if (red == green && red == blue) {
-                            bKGD_colorType = PNGImageReader.PNG_COLOR_GRAY;
-                            bKGD_gray = red;
-                        } else {
-                            bKGD_red = red;
-                            bKGD_green = green;
-                            bKGD_blue = blue;
-                        }
-                        bKGD_present = true;
-                    }
-//                  } else if (childName.equals("ColorSpaceType")) {
-//                  } else if (childName.equals("NumChannels")) {
-
-                    child = child.getNextSibling();
-                }
-            } else if (name.equals("Compression")) {
-                Node child = node.getFirstChild();
-                while (child != null) {
-                    String childName = child.getNodeName();
-                    if (childName.equals("NumProgressiveScans")) {
-                        // Use Adam7 if NumProgressiveScans > 1
-                        int scans = getIntAttribute(child, "value");
-                        IHDR_interlaceMethod = (scans > 1) ? 1 : 0;
-//                  } else if (childName.equals("CompressionTypeName")) {
-//                  } else if (childName.equals("Lossless")) {
-//                  } else if (childName.equals("BitRate")) {
-                    }
-                    child = child.getNextSibling();
-                }
-            } else if (name.equals("Data")) {
-                Node child = node.getFirstChild();
-                while (child != null) {
-                    String childName = child.getNodeName();
-                    if (childName.equals("BitsPerSample")) {
-                        String s = getAttribute(child, "value");
-                        StringTokenizer t = new StringTokenizer(s);
-                        int maxBits = -1;
-                        while (t.hasMoreTokens()) {
-                            int bits = Integer.parseInt(t.nextToken());
-                            if (bits > maxBits) {
-                                maxBits = bits;
-                            }
-                        }
-                        if (maxBits < 1) {
-                            maxBits = 1;
-                        }
-                        if (maxBits == 3) maxBits = 4;
-                        if (maxBits > 4 || maxBits < 8) {
-                            maxBits = 8;
-                        }
-                        if (maxBits > 8) {
-                            maxBits = 16;
-                        }
-                        IHDR_bitDepth = maxBits;
-                    } else if (childName.equals("SignificantBitsPerSample")) {
-                        String s = getAttribute(child, "value");
-                        StringTokenizer t = new StringTokenizer(s);
-                        int numTokens = t.countTokens();
-                        if (numTokens == 1) {
-                            sBIT_colorType = PNGImageReader.PNG_COLOR_GRAY;
-                            sBIT_grayBits = Integer.parseInt(t.nextToken());
-                        } else if (numTokens == 2) {
-                            sBIT_colorType =
-                              PNGImageReader.PNG_COLOR_GRAY_ALPHA;
-                            sBIT_grayBits = Integer.parseInt(t.nextToken());
-                            sBIT_alphaBits = Integer.parseInt(t.nextToken());
-                        } else if (numTokens == 3) {
-                            sBIT_colorType = PNGImageReader.PNG_COLOR_RGB;
-                            sBIT_redBits = Integer.parseInt(t.nextToken());
-                            sBIT_greenBits = Integer.parseInt(t.nextToken());
-                            sBIT_blueBits = Integer.parseInt(t.nextToken());
-                        } else if (numTokens == 4) {
-                            sBIT_colorType =
-                              PNGImageReader.PNG_COLOR_RGB_ALPHA;
-                            sBIT_redBits = Integer.parseInt(t.nextToken());
-                            sBIT_greenBits = Integer.parseInt(t.nextToken());
-                            sBIT_blueBits = Integer.parseInt(t.nextToken());
-                            sBIT_alphaBits = Integer.parseInt(t.nextToken());
-                        }
-                        if (numTokens >= 1 && numTokens <= 4) {
-                            sBIT_present = true;
-                        }
-//                      } else if (childName.equals("PlanarConfiguration")) {
-//                      } else if (childName.equals("SampleFormat")) {
-//                      } else if (childName.equals("SampleMSB")) {
-                    }
-                    child = child.getNextSibling();
-                }
-            } else if (name.equals("Dimension")) {
-                boolean gotWidth = false;
-                boolean gotHeight = false;
-                boolean gotAspectRatio = false;
-
-                float width = -1.0F;
-                float height = -1.0F;
-                float aspectRatio = -1.0F;
-
-                Node child = node.getFirstChild();
-                while (child != null) {
-                    String childName = child.getNodeName();
-                    if (childName.equals("PixelAspectRatio")) {
-                        aspectRatio = getFloatAttribute(child, "value");
-                        gotAspectRatio = true;
-                    } else if (childName.equals("HorizontalPixelSize")) {
-                        width = getFloatAttribute(child, "value");
-                        gotWidth = true;
-                    } else if (childName.equals("VerticalPixelSize")) {
-                        height = getFloatAttribute(child, "value");
-                        gotHeight = true;
-//                  } else if (childName.equals("ImageOrientation")) {
-//                  } else if
-//                      (childName.equals("HorizontalPhysicalPixelSpacing")) {
-//                  } else if
-//                      (childName.equals("VerticalPhysicalPixelSpacing")) {
-//                  } else if (childName.equals("HorizontalPosition")) {
-//                  } else if (childName.equals("VerticalPosition")) {
-//                  } else if (childName.equals("HorizontalPixelOffset")) {
-//                  } else if (childName.equals("VerticalPixelOffset")) {
-                    }
-                    child = child.getNextSibling();
-                }
-
-                if (gotWidth && gotHeight) {
-                    pHYs_present = true;
-                    pHYs_unitSpecifier = 1;
-                    pHYs_pixelsPerUnitXAxis = (int)(width*1000 + 0.5F);
-                    pHYs_pixelsPerUnitYAxis = (int)(height*1000 + 0.5F);
-                } else if (gotAspectRatio) {
-                    pHYs_present = true;
-                    pHYs_unitSpecifier = 0;
-
-                    // Find a reasonable rational approximation
-                    int denom = 1;
-                    for (; denom < 100; denom++) {
-                        int num = (int)(aspectRatio*denom);
-                        if (Math.abs(num/denom - aspectRatio) < 0.001) {
-                            break;
-                        }
-                    }
-                    pHYs_pixelsPerUnitXAxis = (int)(aspectRatio*denom);
-                    pHYs_pixelsPerUnitYAxis = denom;
-                }
-            } else if (name.equals("Document")) {
-                Node child = node.getFirstChild();
-                while (child != null) {
-                    String childName = child.getNodeName();
-                    if (childName.equals("ImageModificationTime")) {
-                        tIME_present = true;
-                        tIME_year = getIntAttribute(child, "year");
-                        tIME_month = getIntAttribute(child, "month");
-                        tIME_day = getIntAttribute(child, "day");
-                        tIME_hour =
-                            getIntAttribute(child, "hour", 0, false);
-                        tIME_minute =
-                            getIntAttribute(child, "minute", 0, false);
-                        tIME_second =
-                            getIntAttribute(child, "second", 0, false);
-//                  } else if (childName.equals("SubimageInterpretation")) {
-//                  } else if (childName.equals("ImageCreationTime")) {
-                    }
-                    child = child.getNextSibling();
-                }
-            } else if (name.equals("Text")) {
-                Node child = node.getFirstChild();
-                while (child != null) {
-                    String childName = child.getNodeName();
-                    if (childName.equals("TextEntry")) {
-                        String keyword =
-                            getAttribute(child, "keyword", "", false);
-                        String value = getAttribute(child, "value");
-                        String language =
-                            getAttribute(child, "language", "", false);
-                        String compression =
-                            getAttribute(child, "compression", "none", false);
-
-                        if (!isValidKeyword(keyword)) {
-                            // Just ignore this node, PNG requires keywords
-                        } else if (isISOLatin(value, true)) {
-                            if (compression.equals("zip")) {
-                                // Use a zTXt node
-                                zTXt_keyword.add(keyword);
-                                zTXt_text.add(value);
-                                zTXt_compressionMethod.add(Integer.valueOf(0));
-                            } else {
-                                // Use a tEXt node
-                                tEXt_keyword.add(keyword);
-                                tEXt_text.add(value);
-                            }
-                        } else {
-                            // Use an iTXt node
-                            iTXt_keyword.add(keyword);
-                            iTXt_compressionFlag.add(Boolean.valueOf(compression.equals("zip")));
-                            iTXt_compressionMethod.add(Integer.valueOf(0));
-                            iTXt_languageTag.add(language);
-                            iTXt_translatedKeyword.add(keyword); // fake it
-                            iTXt_text.add(value);
-                        }
-                    }
-                    child = child.getNextSibling();
-                }
-//          } else if (name.equals("Transparency")) {
-//              Node child = node.getFirstChild();
-//              while (child != null) {
-//                  String childName = child.getNodeName();
-//                  if (childName.equals("Alpha")) {
-//                  } else if (childName.equals("TransparentIndex")) {
-//                  } else if (childName.equals("TransparentColor")) {
-//                  } else if (childName.equals("TileTransparencies")) {
-//                  } else if (childName.equals("TileOpacities")) {
-//                  }
-//                  child = child.getNextSibling();
-//              }
-//          } else {
-//              // fatal(node, "Unknown child of root node!");
-            }
-
-            node = node.getNextSibling();
-        }
-    }
-
-    // Reset all instance variables to their initial state
-    public void reset() {
-        IHDR_present = false;
-        PLTE_present = false;
-        bKGD_present = false;
-        cHRM_present = false;
-        gAMA_present = false;
-        hIST_present = false;
-        iCCP_present = false;
-        iTXt_keyword = new ArrayList<String>();
-        iTXt_compressionFlag = new ArrayList<Boolean>();
-        iTXt_compressionMethod = new ArrayList<Integer>();
-        iTXt_languageTag = new ArrayList<String>();
-        iTXt_translatedKeyword = new ArrayList<String>();
-        iTXt_text = new ArrayList<String>();
-        pHYs_present = false;
-        sBIT_present = false;
-        sPLT_present = false;
-        sRGB_present = false;
-        tEXt_keyword = new ArrayList<String>();
-        tEXt_text = new ArrayList<String>();
-        tIME_present = false;
-        tRNS_present = false;
-        zTXt_keyword = new ArrayList<String>();
-        zTXt_compressionMethod = new ArrayList<Integer>();
-        zTXt_text = new ArrayList<String>();
-        unknownChunkType = new ArrayList<String>();
-        unknownChunkData = new ArrayList<byte[]>();
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/plugins/png/PNGMetadataFormat.java b/ojluni/src/main/java/com/sun/imageio/plugins/png/PNGMetadataFormat.java
deleted file mode 100755
index b7d96dc..0000000
--- a/ojluni/src/main/java/com/sun/imageio/plugins/png/PNGMetadataFormat.java
+++ /dev/null
@@ -1,500 +0,0 @@
-/*
- * Copyright (c) 2001, 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.
- */
-
-package com.sun.imageio.plugins.png;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.ListResourceBundle;
-import javax.imageio.ImageTypeSpecifier;
-import javax.imageio.metadata.IIOMetadataFormat;
-import javax.imageio.metadata.IIOMetadataFormatImpl;
-
-public class PNGMetadataFormat extends IIOMetadataFormatImpl {
-
-    private static IIOMetadataFormat instance = null;
-
-    private static String VALUE_0 = "0";
-    private static String VALUE_1 = "1";
-    private static String VALUE_12 = "12";
-    private static String VALUE_23 = "23";
-    private static String VALUE_31 = "31";
-    private static String VALUE_59 = "59";
-    private static String VALUE_60 = "60";
-    private static String VALUE_255 = "255";
-    private static String VALUE_MAX_16 = "65535"; // 2^16 - 1
-    private static String VALUE_MAX_32 = "2147483647"; // 2^32 - 1
-
-    private PNGMetadataFormat() {
-        super(PNGMetadata.nativeMetadataFormatName,
-              CHILD_POLICY_SOME);
-
-        // root -> IHDR
-        addElement("IHDR", PNGMetadata.nativeMetadataFormatName,
-                   CHILD_POLICY_EMPTY);
-
-        addAttribute("IHDR", "width",
-                     DATATYPE_INTEGER, true, null,
-                     VALUE_1, VALUE_MAX_32, true, true);
-
-        addAttribute("IHDR", "height",
-                     DATATYPE_INTEGER, true, null,
-                     VALUE_1, VALUE_MAX_32, true, true);
-
-        addAttribute("IHDR", "bitDepth",
-                     DATATYPE_INTEGER, true, null,
-                     Arrays.asList(PNGMetadata.IHDR_bitDepths));
-
-        String[] colorTypes = {
-            "Grayscale", "RGB", "Palette", "GrayAlpha", "RGBAlpha"
-        };
-        addAttribute("IHDR", "colorType",
-                     DATATYPE_STRING, true, null,
-                     Arrays.asList(colorTypes));
-
-        addAttribute("IHDR", "compressionMethod",
-                     DATATYPE_STRING, true, null,
-                     Arrays.asList(PNGMetadata.IHDR_compressionMethodNames));
-
-        addAttribute("IHDR", "filterMethod",
-                     DATATYPE_STRING, true, null,
-                     Arrays.asList(PNGMetadata.IHDR_filterMethodNames));
-
-        addAttribute("IHDR", "interlaceMethod",
-                     DATATYPE_STRING, true, null,
-                     Arrays.asList(PNGMetadata.IHDR_interlaceMethodNames));
-
-        // root -> PLTE
-        addElement("PLTE", PNGMetadata.nativeMetadataFormatName,
-                   1, 256);
-
-        // root -> PLTE -> PLTEEntry
-        addElement("PLTEEntry", "PLTE",
-                   CHILD_POLICY_EMPTY);
-
-        addAttribute("PLTEEntry", "index",
-                     DATATYPE_INTEGER, true, null,
-                     VALUE_0, VALUE_255, true, true);
-
-        addAttribute("PLTEEntry", "red",
-                     DATATYPE_INTEGER, true, null,
-                     VALUE_0, VALUE_255, true, true);
-
-        addAttribute("PLTEEntry", "green",
-                     DATATYPE_INTEGER, true, null,
-                     VALUE_0, VALUE_255, true, true);
-
-        addAttribute("PLTEEntry", "blue",
-                     DATATYPE_INTEGER, true, null,
-                     VALUE_0, VALUE_255, true, true);
-
-        // root -> bKGD
-        addElement("bKGD", PNGMetadata.nativeMetadataFormatName,
-                   CHILD_POLICY_CHOICE);
-
-        // root -> bKGD -> bKGD_Grayscale
-        addElement("bKGD_Grayscale", "bKGD",
-                   CHILD_POLICY_EMPTY);
-
-        addAttribute("bKGD_Grayscale", "gray",
-                     DATATYPE_INTEGER, true, null,
-                     VALUE_0, VALUE_MAX_16, true, true);
-
-        // root -> bKGD -> bKGD_RGB
-        addElement("bKGD_RGB", "bKGD",
-                   CHILD_POLICY_EMPTY);
-
-        addAttribute("bKGD_RGB", "red",
-                     DATATYPE_INTEGER, true, null,
-                     VALUE_0, VALUE_MAX_16, true, true);
-
-        addAttribute("bKGD_RGB", "green",
-                     DATATYPE_INTEGER, true, null,
-                     VALUE_0, VALUE_MAX_16, true, true);
-
-        addAttribute("bKGD_RGB", "blue",
-                     DATATYPE_INTEGER, true, null,
-                     VALUE_0, VALUE_MAX_16, true, true);
-
-        // root -> bKGD -> bKGD_Palette
-        addElement("bKGD_Palette", "bKGD",
-                   CHILD_POLICY_EMPTY);
-
-        addAttribute("bKGD_Palette", "index",
-                     DATATYPE_INTEGER, true, null,
-                     VALUE_0, VALUE_255, true, true);
-
-        // root -> cHRM
-        addElement("cHRM", PNGMetadata.nativeMetadataFormatName,
-                   CHILD_POLICY_EMPTY);
-
-        addAttribute("cHRM", "whitePointX",
-                     DATATYPE_INTEGER, true, null,
-                     VALUE_0, VALUE_MAX_16, true, true);
-
-        addAttribute("cHRM", "whitePointY",
-                     DATATYPE_INTEGER, true, null,
-                     VALUE_0, VALUE_MAX_16, true, true);
-
-        addAttribute("cHRM", "redX",
-                     DATATYPE_INTEGER, true, null,
-                     VALUE_0, VALUE_MAX_16, true, true);
-
-        addAttribute("cHRM", "redY",
-                     DATATYPE_INTEGER, true, null,
-                     VALUE_0, VALUE_MAX_16, true, true);
-
-        addAttribute("cHRM", "greenX",
-                     DATATYPE_INTEGER, true, null,
-                     VALUE_0, VALUE_MAX_16, true, true);
-
-        addAttribute("cHRM", "greenY",
-                     DATATYPE_INTEGER, true, null,
-                     VALUE_0, VALUE_MAX_16, true, true);
-
-        addAttribute("cHRM", "blueX",
-                     DATATYPE_INTEGER, true, null,
-                     VALUE_0, VALUE_MAX_16, true, true);
-
-        addAttribute("cHRM", "blueY",
-                     DATATYPE_INTEGER, true, null,
-                     VALUE_0, VALUE_MAX_16, true, true);
-
-        // root -> gAMA
-        addElement("gAMA", PNGMetadata.nativeMetadataFormatName,
-                   CHILD_POLICY_EMPTY);
-
-        addAttribute("gAMA", "value",
-                     DATATYPE_INTEGER, true, null,
-                     VALUE_0, VALUE_MAX_32, true, true);
-
-        // root -> hIST
-        addElement("hIST", PNGMetadata.nativeMetadataFormatName,
-                   1, 256);
-
-        // root -> hISTEntry
-        addElement("hISTEntry", "hIST",
-                   CHILD_POLICY_EMPTY);
-
-        addAttribute("hISTEntry", "index",
-                     DATATYPE_INTEGER, true, null,
-                     VALUE_0, VALUE_255, true, true);
-
-        addAttribute("hISTEntry", "value",
-                     DATATYPE_INTEGER, true, null,
-                     VALUE_0, VALUE_MAX_16, true, true);
-
-        // root -> iCCP
-        addElement("iCCP", PNGMetadata.nativeMetadataFormatName,
-                   CHILD_POLICY_EMPTY);
-
-        addAttribute("iCCP", "profileName",
-                     DATATYPE_STRING, true, null);
-
-        addAttribute("iCCP", "compressionMethod",
-                     DATATYPE_STRING, true, null,
-                     Arrays.asList(PNGMetadata.iCCP_compressionMethodNames));
-
-        addObjectValue("iCCP", byte.class, 0, Integer.MAX_VALUE);
-
-        // root -> iTXt
-        addElement("iTXt", PNGMetadata.nativeMetadataFormatName,
-                   1, Integer.MAX_VALUE);
-
-        // root -> iTXt -> iTXtEntry
-        addElement("iTXtEntry", "iTXt",
-                   CHILD_POLICY_EMPTY);
-
-        addAttribute("iTXtEntry", "keyword",
-                     DATATYPE_STRING, true, null);
-
-        addBooleanAttribute("iTXtEntry", "compressionFlag",
-                            false, false);
-
-        addAttribute("iTXtEntry", "compressionMethod",
-                     DATATYPE_STRING, true, null);
-
-        addAttribute("iTXtEntry", "languageTag",
-                     DATATYPE_STRING, true, null);
-
-        addAttribute("iTXtEntry", "translatedKeyword",
-                     DATATYPE_STRING, true, null);
-
-        addAttribute("iTXtEntry", "text",
-                     DATATYPE_STRING, true, null);
-
-        // root -> pHYS
-        addElement("pHYS", PNGMetadata.nativeMetadataFormatName,
-                   CHILD_POLICY_EMPTY);
-
-        addAttribute("pHYS", "pixelsPerUnitXAxis",
-                     DATATYPE_INTEGER, true, null,
-                     VALUE_0, VALUE_MAX_32, true, true);
-        addAttribute("pHYS", "pixelsPerUnitYAxis",
-                     DATATYPE_INTEGER, true, null,
-                     VALUE_0, VALUE_MAX_32, true, true);
-        addAttribute("pHYS", "unitSpecifier",
-                     DATATYPE_STRING, true, null,
-                     Arrays.asList(PNGMetadata.unitSpecifierNames));
-
-        // root -> sBIT
-        addElement("sBIT", PNGMetadata.nativeMetadataFormatName,
-                   CHILD_POLICY_CHOICE);
-
-        // root -> sBIT -> sBIT_Grayscale
-        addElement("sBIT_Grayscale", "sBIT",
-                   CHILD_POLICY_EMPTY);
-
-        addAttribute("sBIT_Grayscale", "gray",
-                     DATATYPE_INTEGER, true, null,
-                     VALUE_0, VALUE_255, true, true);
-
-        // root -> sBIT -> sBIT_GrayAlpha
-        addElement("sBIT_GrayAlpha", "sBIT",
-                   CHILD_POLICY_EMPTY);
-
-        addAttribute("sBIT_GrayAlpha", "gray",
-                     DATATYPE_INTEGER, true, null,
-                     VALUE_0, VALUE_255, true, true);
-
-        addAttribute("sBIT_GrayAlpha", "alpha",
-                     DATATYPE_INTEGER, true, null,
-                     VALUE_0, VALUE_255, true, true);
-
-        // root -> sBIT -> sBIT_RGB
-        addElement("sBIT_RGB", "sBIT",
-                   CHILD_POLICY_EMPTY);
-
-        addAttribute("sBIT_RGB", "red",
-                     DATATYPE_INTEGER, true, null,
-                     VALUE_0, VALUE_255, true, true);
-
-        addAttribute("sBIT_RGB", "green",
-                     DATATYPE_INTEGER, true, null,
-                     VALUE_0, VALUE_255, true, true);
-
-        addAttribute("sBIT_RGB", "blue",
-                     DATATYPE_INTEGER, true, null,
-                     VALUE_0, VALUE_255, true, true);
-
-        // root -> sBIT -> sBIT_RGBAlpha
-        addElement("sBIT_RGBAlpha", "sBIT",
-                   CHILD_POLICY_EMPTY);
-
-        addAttribute("sBIT_RGBAlpha", "red",
-                     DATATYPE_INTEGER, true, null,
-                     VALUE_0, VALUE_255, true, true);
-
-        addAttribute("sBIT_RGBAlpha", "green",
-                     DATATYPE_INTEGER, true, null,
-                     VALUE_0, VALUE_255, true, true);
-
-        addAttribute("sBIT_RGBAlpha", "blue",
-                     DATATYPE_INTEGER, true, null,
-                     VALUE_0, VALUE_255, true, true);
-
-        addAttribute("sBIT_RGBAlpha", "alpha",
-                     DATATYPE_INTEGER, true, null,
-                     VALUE_0, VALUE_255, true, true);
-
-        // root -> sBIT -> sBIT_Palette
-        addElement("sBIT_Palette", "sBIT",
-                   CHILD_POLICY_EMPTY);
-
-        addAttribute("sBIT_Palette", "red",
-                     DATATYPE_INTEGER, true, null,
-                     VALUE_0, VALUE_255, true, true);
-
-        addAttribute("sBIT_Palette", "green",
-                     DATATYPE_INTEGER, true, null,
-                     VALUE_0, VALUE_255, true, true);
-
-        addAttribute("sBIT_Palette", "blue",
-                     DATATYPE_INTEGER, true, null,
-                     VALUE_0, VALUE_255, true, true);
-
-        // root -> sPLT
-        addElement("sPLT", PNGMetadata.nativeMetadataFormatName,
-                   1, 256);
-
-        // root -> sPLT -> sPLTEntry
-        addElement("sPLTEntry", "sPLT",
-                   CHILD_POLICY_EMPTY);
-
-        addAttribute("sPLTEntry", "index",
-                     DATATYPE_INTEGER, true, null,
-                     VALUE_0, VALUE_255, true, true);
-
-        addAttribute("sPLTEntry", "red",
-                     DATATYPE_INTEGER, true, null,
-                     VALUE_0, VALUE_255, true, true);
-
-        addAttribute("sPLTEntry", "green",
-                     DATATYPE_INTEGER, true, null,
-                     VALUE_0, VALUE_255, true, true);
-
-        addAttribute("sPLTEntry", "blue",
-                     DATATYPE_INTEGER, true, null,
-                     VALUE_0, VALUE_255, true, true);
-
-        addAttribute("sPLTEntry", "alpha",
-                     DATATYPE_INTEGER, true, null,
-                     VALUE_0, VALUE_255, true, true);
-
-        // root -> sRGB
-        addElement("sRGB", PNGMetadata.nativeMetadataFormatName,
-                   CHILD_POLICY_EMPTY);
-
-        addAttribute("sRGB", "renderingIntent",
-                     DATATYPE_STRING, true, null,
-                     Arrays.asList(PNGMetadata.renderingIntentNames));
-
-        // root -> tEXt
-        addElement("tEXt", PNGMetadata.nativeMetadataFormatName,
-                   1, Integer.MAX_VALUE);
-
-        // root -> tEXt -> tEXtEntry
-        addElement("tEXtEntry", "tEXt",
-                   CHILD_POLICY_EMPTY);
-
-        addAttribute("tEXtEntry", "keyword",
-                     DATATYPE_STRING, true, null);
-
-        addAttribute("tEXtEntry", "value",
-                     DATATYPE_STRING, true, null);
-
-        // root -> tIME
-        addElement("tIME", PNGMetadata.nativeMetadataFormatName,
-                   CHILD_POLICY_EMPTY);
-
-        addAttribute("tIME", "year",
-                     DATATYPE_INTEGER, true, null,
-                     VALUE_0, VALUE_MAX_16, true, true);
-
-        addAttribute("tIME", "month",
-                     DATATYPE_INTEGER, true, null,
-                     VALUE_1, VALUE_12, true, true);
-
-        addAttribute("tIME", "day",
-                     DATATYPE_INTEGER, true, null,
-                     VALUE_1, VALUE_31, true, true);
-
-        addAttribute("tIME", "hour",
-                     DATATYPE_INTEGER, true, null,
-                     VALUE_0, VALUE_23, true, true);
-
-        addAttribute("tIME", "minute",
-                     DATATYPE_INTEGER, true, null,
-                     VALUE_0, VALUE_59, true, true);
-
-        addAttribute("tIME", "second",
-                     DATATYPE_INTEGER, true, null,
-                     VALUE_0, VALUE_60, true, true);
-
-        // root -> tRNS
-        addElement("tRNS", PNGMetadata.nativeMetadataFormatName,
-                   CHILD_POLICY_CHOICE);
-
-        // root -> tRNS -> tRNS_Grayscale
-        addElement("tRNS_Grayscale", "tRNS",
-                   CHILD_POLICY_EMPTY);
-
-        addAttribute("tRNS_Grayscale", "gray",
-                     DATATYPE_INTEGER, true, null,
-                     VALUE_0, VALUE_MAX_16, true, true);
-
-        // root -> tRNS -> tRNS_RGB
-        addElement("tRNS_RGB", "tRNS",
-                   CHILD_POLICY_EMPTY);
-
-        addAttribute("tRNS_RGB", "red",
-                     DATATYPE_INTEGER, true, null,
-                     VALUE_0, VALUE_MAX_16, true, true);
-
-        addAttribute("tRNS_RGB", "green",
-                     DATATYPE_INTEGER, true, null,
-                     VALUE_0, VALUE_MAX_16, true, true);
-
-        addAttribute("tRNS_RGB", "blue",
-                     DATATYPE_INTEGER, true, null,
-                     VALUE_0, VALUE_MAX_16, true, true);
-
-        // root -> tRNS -> tRNS_Palette
-        addElement("tRNS_Palette", "tRNS",
-                   CHILD_POLICY_EMPTY);
-
-        addAttribute("tRNS_Palette", "index",
-                     DATATYPE_INTEGER, true, null,
-                     VALUE_0, VALUE_255, true, true);
-
-        addAttribute("tRNS_Palette", "alpha",
-                     DATATYPE_INTEGER, true, null,
-                     VALUE_0, VALUE_255, true, true);
-
-        // root -> zTXt
-        addElement("zTXt", PNGMetadata.nativeMetadataFormatName,
-                   1, Integer.MAX_VALUE);
-
-        // root -> zTXt -> zTXtEntry
-        addElement("zTXtEntry", "zTXt",
-                   CHILD_POLICY_EMPTY);
-
-        addAttribute("zTXtEntry", "keyword",
-                     DATATYPE_STRING, true, null);
-
-        addAttribute("zTXtEntry", "compressionMethod",
-                     DATATYPE_STRING, true, null,
-                     Arrays.asList(PNGMetadata.zTXt_compressionMethodNames));
-
-        addAttribute("zTXtEntry", "text",
-                     DATATYPE_STRING, true, null);
-
-        // root -> UnknownChunks
-        addElement("UnknownChunks", PNGMetadata.nativeMetadataFormatName,
-                   1, Integer.MAX_VALUE);
-
-        // root -> UnknownChunks -> UnknownChunk
-        addElement("UnknownChunk", "UnknownChunks",
-                   CHILD_POLICY_EMPTY);
-
-        addAttribute("UnknownChunk", "type",
-                     DATATYPE_STRING, true, null);
-
-        addObjectValue("UnknownChunk", byte.class, 0, Integer.MAX_VALUE);
-    }
-
-    public boolean canNodeAppear(String elementName,
-                                 ImageTypeSpecifier imageType) {
-        return true;
-    }
-
-    public static synchronized IIOMetadataFormat getInstance() {
-        if (instance == null) {
-            instance = new PNGMetadataFormat();
-        }
-        return instance;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/plugins/png/PNGMetadataFormatResources.java b/ojluni/src/main/java/com/sun/imageio/plugins/png/PNGMetadataFormatResources.java
deleted file mode 100755
index d99946b..0000000
--- a/ojluni/src/main/java/com/sun/imageio/plugins/png/PNGMetadataFormatResources.java
+++ /dev/null
@@ -1,219 +0,0 @@
-/*
- * Copyright (c) 2001, 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.
- */
-
-package com.sun.imageio.plugins.png;
-
-import java.util.ListResourceBundle;
-
-public class PNGMetadataFormatResources extends ListResourceBundle {
-
-    public PNGMetadataFormatResources() {}
-
-    protected Object[][] getContents() {
-        return new Object[][] {
-
-        // Node name, followed by description
-        { "IHDR", "The IHDR chunk, containing the header" },
-        { "PLTE", "The PLTE chunk, containing the palette" },
-        { "PLTEEntry", "A palette entry" },
-        { "bKGD", "The bKGD chunk, containing the background color" },
-        { "bKGD_RGB", "An RGB background color, for RGB and RGBAlpha images" },
-        { "bKGD_Grayscale",
-          "A grayscale background color, for Gray and GrayAlpha images" },
-        { "bKGD_Palette", "A background palette index" },
-        { "cHRM", "The cHRM chunk, containing color calibration" },
-        { "gAMA", "The gAMA chunk, containing the image gamma" },
-        { "hIST", "The hIST chunk, containing histogram information " },
-        { "hISTEntry", "A histogram entry" },
-        { "iCCP", "The iCCP chunk, containing an ICC color profile" },
-        { "iTXt", "The iTXt chunk, containing internationalized text" },
-        { "iTXtEntry", "A localized text entry" },
-        { "pHYS",
-          "The pHYS chunk, containing the pixel size and aspect ratio" },
-        { "sBIT", "The sBIT chunk, containing significant bit information" },
-        { "sBIT_Grayscale", "Significant bit information for gray samples" },
-        { "sBIT_GrayAlpha",
-          "Significant bit information for gray and alpha samples" },
-        { "sBIT_RGB", "Significant bit information for RGB samples" },
-        { "sBIT_RGBAlpha", "Significant bit information for RGBA samples" },
-        { "sBIT_Palette",
-          "Significant bit information for RGB palette entries" },
-        { "sPLT", "The sPLT chunk, containing a suggested palette" },
-        { "sPLTEntry", "A suggested palette entry" },
-        { "sRGB", "The sRGB chunk, containing rendering intent information" },
-        { "tEXt", "The tEXt chunk, containing text" },
-        { "tEXtEntry", "A text entry" },
-        { "tIME", "The tIME chunk, containing the image modification time" },
-        { "tRNS", "The tRNS chunk, containing transparency information" },
-        { "tRNS_Grayscale",
-          "A grayscale value that should be considered transparent" },
-        { "tRNS_RGB",
-          "An RGB value that should be considered transparent" },
-        { "tRNS_Palette",
-          "A palette index that should be considered transparent" },
-        { "zTXt", "The zTXt chunk, containing compressed text" },
-        { "zTXtEntry", "A compressed text entry" },
-        { "UnknownChunks", "A set of unknown chunks" },
-        { "UnknownChunk", "Unknown chunk data stored as a byte array" },
-
-        // Node name + "/" + AttributeName, followed by description
-        { "IHDR/width", "The width of the image in pixels" },
-        { "IHDR/height", "The height of the image in pixels" },
-        { "IHDR/bitDepth", "The bit depth of the image samples" },
-        { "IHDR/colorType", "The color type of the image" },
-        { "IHDR/compressionMethod",
-"The compression used for image data, always \"deflate\"" },
-        { "IHDR/filterMethod",
-"The filtering method used for compression, always \"adaptive\"" },
-        { "IHDR/interlaceMethod",
-          "The interlacing method, \"none\" or \"adam7\"" },
-
-        { "PLTEEntry/index", "The index of a palette entry" },
-        { "PLTEEntry/red", "The red value of a palette entry" },
-        { "PLTEEntry/green", "The green value of a palette entry" },
-        { "PLTEEntry/blue", "The blue value of a palette entry" },
-
-        { "bKGD_Grayscale/gray", "A gray value to be used as a background" },
-        { "bKGD_RGB/red", "A red value to be used as a background" },
-        { "bKGD_RGB/green", "A green value to be used as a background" },
-        { "bKGD_RGB/blue", "A blue value to be used as a background" },
-        { "bKGD_Palette/index", "A palette index to be used as a background" },
-
-        { "cHRM/whitePointX",
-              "The CIE x coordinate of the white point, multiplied by 1e5" },
-        { "cHRM/whitePointY",
-              "The CIE y coordinate of the white point, multiplied by 1e5" },
-        { "cHRM/redX",
-              "The CIE x coordinate of the red primary, multiplied by 1e5" },
-        { "cHRM/redY",
-              "The CIE y coordinate of the red primary, multiplied by 1e5" },
-        { "cHRM/greenX",
-              "The CIE x coordinate of the green primary, multiplied by 1e5" },
-        { "cHRM/greenY",
-              "The CIE y coordinate of the green primary, multiplied by 1e5" },
-        { "cHRM/blueX",
-              "The CIE x coordinate of the blue primary, multiplied by 1e5" },
-        { "cHRM/blueY",
-              "The CIE y coordinate of the blue primary, multiplied by 1e5" },
-
-        { "gAMA/value",
-              "The image gamma, multiplied by 1e5" },
-
-        { "hISTEntry/index", "The palette index of this histogram entry" },
-        { "hISTEntry/value", "The frequency of this histogram entry" },
-
-        { "iCCP/profileName", "The name of this ICC profile" },
-        { "iCCP/compressionMethod",
-              "The compression method used to store this ICC profile" },
-
-        { "iTXtEntry/keyword", "The keyword" },
-        { "iTXtEntry/compressionMethod",
-              "The compression method used to store this iTXt entry" },
-        { "iTXtEntry/languageTag",
-              "The ISO tag describing the language this iTXt entry" },
-        { "iTXtEntry/translatedKeyword",
-              "The translated keyword for iTXt entry" },
-        { "iTXtEntry/text",
-              "The localized text" },
-
-        { "pHYS/pixelsPerUnitXAxis",
-            "The number of horizontal pixels per unit, multiplied by 1e5" },
-        { "pHYS/pixelsPerUnitYAxis",
-            "The number of vertical pixels per unit, multiplied by 1e5" },
-        { "pHYS/unitSpecifier",
-            "The unit specifier for this chunk (i.e., meters)" },
-
-        { "sBIT_Grayscale/gray",
-            "The number of significant bits of the gray samples" },
-        { "sBIT_GrayAlpha/gray",
-            "The number of significant bits of the gray samples" },
-        { "sBIT_GrayAlpha/alpha",
-            "The number of significant bits of the alpha samples" },
-        { "sBIT_RGB/red",
-            "The number of significant bits of the red samples" },
-        { "sBIT_RGB/green",
-            "The number of significant bits of the green samples" },
-        { "sBIT_RGB/blue",
-            "The number of significant bits of the blue samples" },
-        { "sBIT_RGBAlpha/red",
-            "The number of significant bits of the red samples" },
-        { "sBIT_RGBAlpha/green",
-            "The number of significant bits of the green samples" },
-        { "sBIT_RGBAlpha/blue",
-            "The number of significant bits of the blue samples" },
-        { "sBIT_RGBAlpha/alpha",
-            "The number of significant bits of the alpha samples" },
-        { "sBIT_Palette/red",
-            "The number of significant bits of the red palette entries" },
-        { "sBIT_Palette/green",
-            "The number of significant bits of the green palette entries" },
-        { "sBIT_Palette/blue",
-            "The number of significant bits of the blue palette entries" },
-
-        { "sPLTEntry/index", "The index of a suggested palette entry" },
-        { "sPLTEntry/red", "The red value of a suggested palette entry" },
-        { "sPLTEntry/green", "The green value of a suggested palette entry" },
-        { "sPLTEntry/blue", "The blue value of a suggested palette entry" },
-        { "sPLTEntry/alpha", "The blue value of a suggested palette entry" },
-
-        { "sRGB/renderingIntent", "The rendering intent" },
-
-        { "tEXtEntry/keyword", "The keyword" },
-        { "tEXtEntry/value", "The text" },
-
-        { "tIME/year", "The year when the image was last modified" },
-        { "tIME/month",
-          "The month when the image was last modified, 1 = January" },
-        { "tIME/day",
-          "The day of the month when the image was last modified" },
-        { "tIME/hour",
-          "The hour when the image was last modified" },
-        { "tIME/minute",
-          "The minute when the image was last modified" },
-        { "tIME/second",
-          "The second when the image was last modified, 60 = leap second" },
-
-        { "tRNS_Grayscale/gray",
-          "The gray value to be considered transparent" },
-        { "tRNS_RGB/red",
-          "The red value to be considered transparent" },
-        { "tRNS_RGB/green",
-          "The green value to be considered transparent" },
-        { "tRNS_RGB/blue",
-          "The blure value to be considered transparent" },
-        { "tRNS_Palette/index",
-          "A palette index to be considered transparent" },
-        { "tRNS_Palette/alpha",
-          "The transparency associated with the palette entry" },
-
-        { "zTXtEntry/keyword", "The keyword" },
-        { "zTXtEntry/compressionMethod", "The compression method" },
-        { "zTXtEntry/text", "The compressed text" },
-
-        { "UnknownChunk/type", "The 4-character type of the unknown chunk" }
-
-        };
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/plugins/png/RowFilter.java b/ojluni/src/main/java/com/sun/imageio/plugins/png/RowFilter.java
deleted file mode 100755
index 63ac14b..0000000
--- a/ojluni/src/main/java/com/sun/imageio/plugins/png/RowFilter.java
+++ /dev/null
@@ -1,192 +0,0 @@
-/*
- * Copyright (c) 2000, 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.imageio.plugins.png;
-
-public class RowFilter {
-
-    private static final int abs(int x) {
-        return (x < 0) ? -x : x;
-    }
-
-    // Returns the sum of absolute differences
-    protected static int subFilter(byte[] currRow,
-                                   byte[] subFilteredRow,
-                                   int bytesPerPixel,
-                                   int bytesPerRow) {
-        int badness = 0;
-        for (int i = bytesPerPixel; i < bytesPerRow + bytesPerPixel; i++) {
-            int curr = currRow[i] & 0xff;
-            int left = currRow[i - bytesPerPixel] & 0xff;
-            int difference = curr - left;
-            subFilteredRow[i] = (byte)difference;
-
-            badness += abs(difference);
-        }
-
-        return badness;
-    }
-
-    // Returns the sum of absolute differences
-    protected static int upFilter(byte[] currRow,
-                                  byte[] prevRow,
-                                  byte[] upFilteredRow,
-                                  int bytesPerPixel,
-                                  int bytesPerRow) {
-        int badness = 0;
-        for (int i = bytesPerPixel; i < bytesPerRow + bytesPerPixel; i++) {
-            int curr = currRow[i] & 0xff;
-            int up = prevRow[i] & 0xff;
-            int difference = curr - up;
-            upFilteredRow[i] = (byte)difference;
-
-            badness += abs(difference);
-        }
-
-        return badness;
-    }
-
-    protected final int paethPredictor(int a, int b, int c) {
-        int p = a + b - c;
-        int pa = abs(p - a);
-        int pb = abs(p - b);
-        int pc = abs(p - c);
-
-        if ((pa <= pb) && (pa <= pc)) {
-            return a;
-        } else if (pb <= pc) {
-            return b;
-        } else {
-            return c;
-        }
-    }
-
-    public int filterRow(int colorType,
-                         byte[] currRow,
-                         byte[] prevRow,
-                         byte[][] scratchRows,
-                         int bytesPerRow,
-                         int bytesPerPixel) {
-
-        // Use type 0 for palette images
-        if (colorType != PNGImageReader.PNG_COLOR_PALETTE) {
-            System.arraycopy(currRow, bytesPerPixel,
-                             scratchRows[0], bytesPerPixel,
-                             bytesPerRow);
-            return 0;
-        }
-
-        int[] filterBadness = new int[5];
-        for (int i = 0; i < 5; i++) {
-            filterBadness[i] = Integer.MAX_VALUE;
-        }
-
-        {
-            int badness = 0;
-
-            for (int i = bytesPerPixel; i < bytesPerRow + bytesPerPixel; i++) {
-                int curr = currRow[i] & 0xff;
-                badness += curr;
-            }
-
-            filterBadness[0] = badness;
-        }
-
-        {
-            byte[] subFilteredRow = scratchRows[1];
-            int badness = subFilter(currRow,
-                                    subFilteredRow,
-                                    bytesPerPixel,
-                                    bytesPerRow);
-
-            filterBadness[1] = badness;
-        }
-
-        {
-            byte[] upFilteredRow = scratchRows[2];
-            int badness = upFilter(currRow,
-                                   prevRow,
-                                   upFilteredRow,
-                                   bytesPerPixel,
-                                   bytesPerRow);
-
-            filterBadness[2] = badness;
-        }
-
-        {
-            byte[] averageFilteredRow = scratchRows[3];
-            int badness = 0;
-
-            for (int i = bytesPerPixel; i < bytesPerRow + bytesPerPixel; i++) {
-                int curr = currRow[i] & 0xff;
-                int left = currRow[i - bytesPerPixel] & 0xff;
-                int up = prevRow[i] & 0xff;
-                int difference = curr - (left + up)/2;;
-                averageFilteredRow[i] = (byte)difference;
-
-                badness += abs(difference);
-            }
-
-            filterBadness[3] = badness;
-        }
-
-        {
-            byte[] paethFilteredRow = scratchRows[4];
-            int badness = 0;
-
-            for (int i = bytesPerPixel; i < bytesPerRow + bytesPerPixel; i++) {
-                int curr = currRow[i] & 0xff;
-                int left = currRow[i - bytesPerPixel] & 0xff;
-                int up = prevRow[i] & 0xff;
-                int upleft = prevRow[i - bytesPerPixel] & 0xff;
-                int predictor = paethPredictor(left, up, upleft);
-                int difference = curr - predictor;
-                paethFilteredRow[i] = (byte)difference;
-
-                badness += abs(difference);
-            }
-
-            filterBadness[4] = badness;
-        }
-
-        int minBadness = filterBadness[0];
-        int filterType = 0;
-
-        for (int i = 1; i < 5; i++) {
-            if (filterBadness[i] < minBadness) {
-                minBadness = filterBadness[i];
-                filterType = i;
-            }
-        }
-
-        if (filterType == 0) {
-            System.arraycopy(currRow, bytesPerPixel,
-                             scratchRows[0], bytesPerPixel,
-                             bytesPerRow);
-        }
-
-        return filterType;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/plugins/wbmp/WBMPImageReader.java b/ojluni/src/main/java/com/sun/imageio/plugins/wbmp/WBMPImageReader.java
deleted file mode 100755
index 22377d7..0000000
--- a/ojluni/src/main/java/com/sun/imageio/plugins/wbmp/WBMPImageReader.java
+++ /dev/null
@@ -1,322 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-package com.sun.imageio.plugins.wbmp;
-
-import java.awt.Rectangle;
-import java.awt.image.BufferedImage;
-import java.awt.image.DataBufferByte;
-import java.awt.image.MultiPixelPackedSampleModel;
-import java.awt.image.Raster;
-import java.awt.image.WritableRaster;
-
-import javax.imageio.IIOException;
-import javax.imageio.ImageReader;
-import javax.imageio.ImageReadParam;
-import javax.imageio.ImageTypeSpecifier;
-import javax.imageio.metadata.IIOMetadata;
-import javax.imageio.spi.ImageReaderSpi;
-import javax.imageio.stream.ImageInputStream;
-
-import java.io.*;
-import java.util.ArrayList;
-import java.util.Iterator;
-
-import com.sun.imageio.plugins.common.I18N;
-import com.sun.imageio.plugins.common.ReaderUtil;
-
-/** This class is the Java Image IO plugin reader for WBMP images.
- *  It may subsample the image, clip the image,
- *  and shift the decoded image origin if the proper decoding parameter
- *  are set in the provided <code>WBMPImageReadParam</code>.
- */
-public class WBMPImageReader extends ImageReader {
-    /** The input stream where reads from */
-    private ImageInputStream iis = null;
-
-    /** Indicates whether the header is read. */
-    private boolean gotHeader = false;
-
-    /** The original image width. */
-    private int width;
-
-    /** The original image height. */
-    private int height;
-
-    private int wbmpType;
-
-    private WBMPMetadata metadata;
-
-    /** Constructs <code>WBMPImageReader</code> from the provided
-     *  <code>ImageReaderSpi</code>.
-     */
-    public WBMPImageReader(ImageReaderSpi originator) {
-        super(originator);
-    }
-
-    /** Overrides the method defined in the superclass. */
-    public void setInput(Object input,
-                         boolean seekForwardOnly,
-                         boolean ignoreMetadata) {
-        super.setInput(input, seekForwardOnly, ignoreMetadata);
-        iis = (ImageInputStream) input; // Always works
-        gotHeader = false;
-    }
-
-    /** Overrides the method defined in the superclass. */
-    public int getNumImages(boolean allowSearch) throws IOException {
-        if (iis == null) {
-            throw new IllegalStateException(I18N.getString("GetNumImages0"));
-        }
-        if (seekForwardOnly && allowSearch) {
-            throw new IllegalStateException(I18N.getString("GetNumImages1"));
-        }
-        return 1;
-    }
-
-    public int getWidth(int imageIndex) throws IOException {
-        checkIndex(imageIndex);
-        readHeader();
-        return width;
-    }
-
-    public int getHeight(int imageIndex) throws IOException {
-        checkIndex(imageIndex);
-        readHeader();
-        return height;
-    }
-
-    public boolean isRandomAccessEasy(int imageIndex) throws IOException {
-        checkIndex(imageIndex);
-        return true;
-    }
-
-    private void checkIndex(int imageIndex) {
-        if (imageIndex != 0) {
-            throw new IndexOutOfBoundsException(I18N.getString("WBMPImageReader0"));
-        }
-    }
-
-    public void readHeader() throws IOException {
-        if (gotHeader)
-            return;
-
-        if (iis == null) {
-            throw new IllegalStateException("Input source not set!");
-        }
-
-        metadata = new WBMPMetadata();
-
-        wbmpType = iis.readByte();   // TypeField
-        byte fixHeaderField = iis.readByte();
-
-        // check for valid wbmp image
-        if (fixHeaderField != 0
-            || !isValidWbmpType(wbmpType))
-        {
-            throw new IIOException(I18N.getString("WBMPImageReader2"));
-        }
-
-        metadata.wbmpType = wbmpType;
-
-        // Read image width
-        width = ReaderUtil.readMultiByteInteger(iis);
-        metadata.width = width;
-
-        // Read image height
-        height = ReaderUtil.readMultiByteInteger(iis);
-        metadata.height = height;
-
-        gotHeader = true;
-    }
-
-    public Iterator getImageTypes(int imageIndex)
-        throws IOException {
-        checkIndex(imageIndex);
-        readHeader();
-
-        BufferedImage bi =
-            new BufferedImage(1, 1, BufferedImage.TYPE_BYTE_BINARY);
-        ArrayList list = new ArrayList(1);
-        list.add(new ImageTypeSpecifier(bi));
-        return list.iterator();
-    }
-
-    public ImageReadParam getDefaultReadParam() {
-        return new ImageReadParam();
-    }
-
-    public IIOMetadata getImageMetadata(int imageIndex)
-        throws IOException {
-        checkIndex(imageIndex);
-        if (metadata == null) {
-            readHeader();
-        }
-        return metadata;
-    }
-
-    public IIOMetadata getStreamMetadata() throws IOException {
-        return null;
-    }
-
-    public BufferedImage read(int imageIndex, ImageReadParam param)
-        throws IOException {
-
-        if (iis == null) {
-            throw new IllegalStateException(I18N.getString("WBMPImageReader1"));
-        }
-
-        checkIndex(imageIndex);
-        clearAbortRequest();
-        processImageStarted(imageIndex);
-        if (param == null)
-            param = getDefaultReadParam();
-
-        //read header
-        readHeader();
-
-        Rectangle sourceRegion = new Rectangle(0, 0, 0, 0);
-        Rectangle destinationRegion = new Rectangle(0, 0, 0, 0);
-
-        computeRegions(param, this.width, this.height,
-                       param.getDestination(),
-                       sourceRegion,
-                       destinationRegion);
-
-        int scaleX = param.getSourceXSubsampling();
-        int scaleY = param.getSourceYSubsampling();
-        int xOffset = param.getSubsamplingXOffset();
-        int yOffset = param.getSubsamplingYOffset();
-
-        // If the destination is provided, then use it.  Otherwise, create new one
-        BufferedImage bi = param.getDestination();
-
-        if (bi == null)
-            bi = new BufferedImage(destinationRegion.x + destinationRegion.width,
-                              destinationRegion.y + destinationRegion.height,
-                              BufferedImage.TYPE_BYTE_BINARY);
-
-        boolean noTransform =
-            destinationRegion.equals(new Rectangle(0, 0, width, height)) &&
-            destinationRegion.equals(new Rectangle(0, 0, bi.getWidth(), bi.getHeight()));
-
-        // Get the image data.
-        WritableRaster tile = bi.getWritableTile(0, 0);
-
-        // Get the SampleModel.
-        MultiPixelPackedSampleModel sm =
-            (MultiPixelPackedSampleModel)bi.getSampleModel();
-
-        if (noTransform) {
-            if (abortRequested()) {
-                processReadAborted();
-                return bi;
-            }
-
-            // If noTransform is necessary, read the data.
-            iis.read(((DataBufferByte)tile.getDataBuffer()).getData(),
-                     0, height*sm.getScanlineStride());
-            processImageUpdate(bi,
-                               0, 0,
-                               width, height, 1, 1,
-                               new int[]{0});
-            processImageProgress(100.0F);
-        } else {
-            int len = (this.width + 7) / 8;
-            byte[] buf = new byte[len];
-            byte[] data = ((DataBufferByte)tile.getDataBuffer()).getData();
-            int lineStride = sm.getScanlineStride();
-            iis.skipBytes(len * sourceRegion.y);
-            int skipLength = len * (scaleY - 1);
-
-            // cache the values to avoid duplicated computation
-            int[] srcOff = new int[destinationRegion.width];
-            int[] destOff = new int[destinationRegion.width];
-            int[] srcPos = new int[destinationRegion.width];
-            int[] destPos = new int[destinationRegion.width];
-
-            for (int i = destinationRegion.x, x = sourceRegion.x, j = 0;
-                i < destinationRegion.x + destinationRegion.width;
-                    i++, j++, x += scaleX) {
-                srcPos[j] = x >> 3;
-                srcOff[j] = 7 - (x & 7);
-                destPos[j] = i >> 3;
-                destOff[j] = 7 - (i & 7);
-            }
-
-            for (int j = 0, y = sourceRegion.y,
-                k = destinationRegion.y * lineStride;
-                j < destinationRegion.height; j++, y+=scaleY) {
-
-                if (abortRequested())
-                    break;
-                iis.read(buf, 0, len);
-                for (int i = 0; i < destinationRegion.width; i++) {
-                    //get the bit and assign to the data buffer of the raster
-                    int v = (buf[srcPos[i]] >> srcOff[i]) & 1;
-                    data[k + destPos[i]] |= v << destOff[i];
-                }
-
-                k += lineStride;
-                iis.skipBytes(skipLength);
-                        processImageUpdate(bi,
-                                           0, j,
-                                           destinationRegion.width, 1, 1, 1,
-                                           new int[]{0});
-                        processImageProgress(100.0F*j/destinationRegion.height);
-            }
-        }
-
-        if (abortRequested())
-            processReadAborted();
-        else
-            processImageComplete();
-        return bi;
-    }
-
-    public boolean canReadRaster() {
-        return true;
-    }
-
-    public Raster readRaster(int imageIndex,
-                             ImageReadParam param) throws IOException {
-        BufferedImage bi = read(imageIndex, param);
-        return bi.getData();
-    }
-
-    public void reset() {
-        super.reset();
-        iis = null;
-        gotHeader = false;
-    }
-
-    /*
-     * This method verifies that given byte is valid wbmp type marker.
-     * At the moment only 0x0 marker is described by wbmp spec.
-     */
-    boolean isValidWbmpType(int type) {
-        return type == 0;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/plugins/wbmp/WBMPImageReaderSpi.java b/ojluni/src/main/java/com/sun/imageio/plugins/wbmp/WBMPImageReaderSpi.java
deleted file mode 100755
index 38fb6d7..0000000
--- a/ojluni/src/main/java/com/sun/imageio/plugins/wbmp/WBMPImageReaderSpi.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * Copyright (c) 2003, 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
- * 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.imageio.plugins.wbmp;
-
-import java.util.Locale;
-import javax.imageio.spi.ImageReaderSpi;
-import javax.imageio.stream.ImageInputStream;
-import javax.imageio.spi.IIORegistry;
-import javax.imageio.spi.ServiceRegistry;
-import java.io.IOException;
-import javax.imageio.ImageReader;
-import javax.imageio.IIOException;
-import com.sun.imageio.plugins.common.ReaderUtil;
-
-public class WBMPImageReaderSpi extends ImageReaderSpi {
-
-    private static final int MAX_WBMP_WIDTH = 1024;
-    private static final int MAX_WBMP_HEIGHT = 768;
-
-    private static String [] writerSpiNames =
-        {"com.sun.imageio.plugins.wbmp.WBMPImageWriterSpi"};
-    private static String[] formatNames = {"wbmp", "WBMP"};
-    private static String[] entensions = {"wbmp"};
-    private static String[] mimeType = {"image/vnd.wap.wbmp"};
-
-    private boolean registered = false;
-
-    public WBMPImageReaderSpi() {
-        super("Oracle Corporation",
-              "1.0",
-              formatNames,
-              entensions,
-              mimeType,
-              "com.sun.imageio.plugins.wbmp.WBMPImageReader",
-              new Class[] { ImageInputStream.class },
-              writerSpiNames,
-              true,
-              null, null, null, null,
-              true,
-              WBMPMetadata.nativeMetadataFormatName,
-              "com.sun.imageio.plugins.wbmp.WBMPMetadataFormat",
-              null, null);
-    }
-
-    public void onRegistration(ServiceRegistry registry,
-                               Class<?> category) {
-        if (registered) {
-            return;
-        }
-        registered = true;
-    }
-
-    public String getDescription(Locale locale) {
-        return "Standard WBMP Image Reader";
-    }
-
-    public boolean canDecodeInput(Object source) throws IOException {
-        if (!(source instanceof ImageInputStream)) {
-            return false;
-        }
-
-        ImageInputStream stream = (ImageInputStream)source;
-
-        stream.mark();
-        int type = stream.readByte();   // TypeField
-        int fixHeaderField = stream.readByte();
-        // check WBMP "header"
-        if (type != 0 || fixHeaderField != 0) {
-            // while WBMP reader does not support ext WBMP headers
-            stream.reset();
-            return false;
-        }
-
-        int width = ReaderUtil.readMultiByteInteger(stream);
-        int height = ReaderUtil.readMultiByteInteger(stream);
-        // check image dimension
-        if (width <= 0 || height <= 0) {
-            stream.reset();
-            return false;
-        }
-
-        long dataLength = stream.length();
-        if (dataLength == -1) {
-            // We can't verify that amount of data in the stream
-            // corresponds to image dimension because we do not know
-            // the length of the data stream.
-            // Assuming that wbmp image are used for mobile devices,
-            // let's introduce an upper limit for image dimension.
-            // In case if exact amount of raster data is unknown,
-            // let's reject images with dimension above the limit.
-            stream.reset();
-            return (width < MAX_WBMP_WIDTH) && (height < MAX_WBMP_HEIGHT);
-        }
-
-        dataLength -= stream.getStreamPosition();
-        stream.reset();
-
-        long scanSize = (width / 8) + ((width % 8) == 0 ? 0 : 1);
-
-        return (dataLength == scanSize * height);
-    }
-
-    public ImageReader createReaderInstance(Object extension)
-        throws IIOException {
-        return new WBMPImageReader(this);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/plugins/wbmp/WBMPImageWriter.java b/ojluni/src/main/java/com/sun/imageio/plugins/wbmp/WBMPImageWriter.java
deleted file mode 100755
index 45d3187..0000000
--- a/ojluni/src/main/java/com/sun/imageio/plugins/wbmp/WBMPImageWriter.java
+++ /dev/null
@@ -1,315 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-package com.sun.imageio.plugins.wbmp;
-
-import java.awt.Point;
-import java.awt.Rectangle;
-import java.awt.image.ColorModel;
-import java.awt.image.DataBuffer;
-import java.awt.image.DataBufferByte;
-import java.awt.image.IndexColorModel;
-import java.awt.image.MultiPixelPackedSampleModel;
-import java.awt.image.Raster;
-import java.awt.image.RenderedImage;
-import java.awt.image.SampleModel;
-import java.awt.image.WritableRaster;
-
-import java.io.IOException;
-
-import javax.imageio.IIOImage;
-import javax.imageio.IIOException;
-import javax.imageio.ImageTypeSpecifier;
-import javax.imageio.ImageWriteParam;
-import javax.imageio.ImageWriter;
-import javax.imageio.metadata.IIOMetadata;
-import javax.imageio.metadata.IIOMetadataFormatImpl;
-import javax.imageio.metadata.IIOInvalidTreeException;
-import javax.imageio.spi.ImageWriterSpi;
-import javax.imageio.stream.ImageOutputStream;
-
-import com.sun.imageio.plugins.common.I18N;
-
-/**
- * The Java Image IO plugin writer for encoding a binary RenderedImage into
- * a WBMP format.
- *
- * The encoding process may clip, subsample using the parameters
- * specified in the <code>ImageWriteParam</code>.
- *
- * @see com.sun.media.imageio.plugins.WBMPImageWriteParam
- */
-public class WBMPImageWriter extends ImageWriter {
-    /** The output stream to write into */
-    private ImageOutputStream stream = null;
-
-    // Get the number of bits required to represent an int.
-    private static int getNumBits(int intValue) {
-        int numBits = 32;
-        int mask = 0x80000000;
-        while(mask != 0 && (intValue & mask) == 0) {
-            numBits--;
-            mask >>>= 1;
-        }
-        return numBits;
-    }
-
-    // Convert an int value to WBMP multi-byte format.
-    private static byte[] intToMultiByte(int intValue) {
-        int numBitsLeft = getNumBits(intValue);
-        byte[] multiBytes = new byte[(numBitsLeft + 6)/7];
-
-        int maxIndex = multiBytes.length - 1;
-        for(int b = 0; b <= maxIndex; b++) {
-            multiBytes[b] = (byte)((intValue >>> ((maxIndex - b)*7))&0x7f);
-            if(b != maxIndex) {
-                multiBytes[b] |= (byte)0x80;
-            }
-        }
-
-        return multiBytes;
-    }
-
-    /** Constructs <code>WBMPImageWriter</code> based on the provided
-     *  <code>ImageWriterSpi</code>.
-     */
-    public WBMPImageWriter(ImageWriterSpi originator) {
-        super(originator);
-    }
-
-    public void setOutput(Object output) {
-        super.setOutput(output); // validates output
-        if (output != null) {
-            if (!(output instanceof ImageOutputStream))
-                throw new IllegalArgumentException(I18N.getString("WBMPImageWriter"));
-            this.stream = (ImageOutputStream)output;
-        } else
-            this.stream = null;
-    }
-
-    public IIOMetadata getDefaultStreamMetadata(ImageWriteParam param) {
-        return null;
-    }
-
-    public IIOMetadata getDefaultImageMetadata(ImageTypeSpecifier imageType,
-                                               ImageWriteParam param) {
-        WBMPMetadata meta = new WBMPMetadata();
-        meta.wbmpType = 0; // default wbmp level
-        return meta;
-    }
-
-    public IIOMetadata convertStreamMetadata(IIOMetadata inData,
-                                             ImageWriteParam param) {
-        return null;
-    }
-
-    public IIOMetadata convertImageMetadata(IIOMetadata metadata,
-                                            ImageTypeSpecifier type,
-                                            ImageWriteParam param) {
-        return null;
-    }
-
-    public boolean canWriteRasters() {
-        return true;
-    }
-
-    public void write(IIOMetadata streamMetadata,
-                      IIOImage image,
-                      ImageWriteParam param) throws IOException {
-
-        if (stream == null) {
-            throw new IllegalStateException(I18N.getString("WBMPImageWriter3"));
-        }
-
-        if (image == null) {
-            throw new IllegalArgumentException(I18N.getString("WBMPImageWriter4"));
-        }
-
-        clearAbortRequest();
-        processImageStarted(0);
-        if (param == null)
-            param = getDefaultWriteParam();
-
-        RenderedImage input = null;
-        Raster inputRaster = null;
-        boolean writeRaster = image.hasRaster();
-        Rectangle sourceRegion = param.getSourceRegion();
-        SampleModel sampleModel = null;
-
-        if (writeRaster) {
-            inputRaster = image.getRaster();
-            sampleModel = inputRaster.getSampleModel();
-        } else {
-            input = image.getRenderedImage();
-            sampleModel = input.getSampleModel();
-
-            inputRaster = input.getData();
-        }
-
-        checkSampleModel(sampleModel);
-        if (sourceRegion == null)
-            sourceRegion = inputRaster.getBounds();
-        else
-            sourceRegion = sourceRegion.intersection(inputRaster.getBounds());
-
-        if (sourceRegion.isEmpty())
-            throw new RuntimeException(I18N.getString("WBMPImageWriter1"));
-
-        int scaleX = param.getSourceXSubsampling();
-        int scaleY = param.getSourceYSubsampling();
-        int xOffset = param.getSubsamplingXOffset();
-        int yOffset = param.getSubsamplingYOffset();
-
-        sourceRegion.translate(xOffset, yOffset);
-        sourceRegion.width -= xOffset;
-        sourceRegion.height -= yOffset;
-
-        int minX = sourceRegion.x / scaleX;
-        int minY = sourceRegion.y / scaleY;
-        int w = (sourceRegion.width + scaleX - 1) / scaleX;
-        int h = (sourceRegion.height + scaleY - 1) / scaleY;
-
-        Rectangle destinationRegion = new Rectangle(minX, minY, w, h);
-        sampleModel = sampleModel.createCompatibleSampleModel(w, h);
-
-        SampleModel destSM= sampleModel;
-
-        // If the data are not formatted nominally then reformat.
-        if(sampleModel.getDataType() != DataBuffer.TYPE_BYTE ||
-           !(sampleModel instanceof MultiPixelPackedSampleModel) ||
-           ((MultiPixelPackedSampleModel)sampleModel).getDataBitOffset() != 0) {
-           destSM =
-                new MultiPixelPackedSampleModel(DataBuffer.TYPE_BYTE,
-                                                w, h, 1,
-                                                w + 7 >> 3, 0);
-        }
-
-        if (!destinationRegion.equals(sourceRegion)) {
-            if (scaleX == 1 && scaleY == 1)
-                inputRaster = inputRaster.createChild(inputRaster.getMinX(),
-                                                      inputRaster.getMinY(),
-                                                      w, h, minX, minY, null);
-            else {
-                WritableRaster ras = Raster.createWritableRaster(destSM,
-                                                                 new Point(minX, minY));
-
-                byte[] data = ((DataBufferByte)ras.getDataBuffer()).getData();
-
-                for(int j = minY, y = sourceRegion.y, k = 0;
-                    j < minY + h; j++, y += scaleY) {
-
-                    for (int i = 0, x = sourceRegion.x;
-                        i <w; i++, x +=scaleX) {
-                        int v = inputRaster.getSample(x, y, 0);
-                        data[k + (i >> 3)] |= v << (7 - (i & 7));
-                    }
-                    k += w + 7 >> 3;
-                }
-                inputRaster = ras;
-            }
-        }
-
-        // If the data are not formatted nominally then reformat.
-        if(!destSM.equals(inputRaster.getSampleModel())) {
-            WritableRaster raster =
-                Raster.createWritableRaster(destSM,
-                                            new Point(inputRaster.getMinX(),
-                                                      inputRaster.getMinY()));
-            raster.setRect(inputRaster);
-            inputRaster = raster;
-        }
-
-        // Check whether the image is white-is-zero.
-        boolean isWhiteZero = false;
-        if(!writeRaster && input.getColorModel() instanceof IndexColorModel) {
-            IndexColorModel icm = (IndexColorModel)input.getColorModel();
-            isWhiteZero = icm.getRed(0) > icm.getRed(1);
-        }
-
-        // Get the line stride, bytes per row, and data array.
-        int lineStride =
-            ((MultiPixelPackedSampleModel)destSM).getScanlineStride();
-        int bytesPerRow = (w + 7)/8;
-        byte[] bdata = ((DataBufferByte)inputRaster.getDataBuffer()).getData();
-
-        // Write WBMP header.
-        stream.write(0); // TypeField
-        stream.write(0); // FixHeaderField
-        stream.write(intToMultiByte(w)); // width
-        stream.write(intToMultiByte(h)); // height
-
-        // Write the data.
-        if(!isWhiteZero && lineStride == bytesPerRow) {
-            // Write the entire image.
-            stream.write(bdata, 0, h * bytesPerRow);
-            processImageProgress(100.0F);
-        } else {
-            // Write the image row-by-row.
-            int offset = 0;
-            if(!isWhiteZero) {
-                // Black-is-zero
-                for(int row = 0; row < h; row++) {
-                    if (abortRequested())
-                        break;
-                    stream.write(bdata, offset, bytesPerRow);
-                    offset += lineStride;
-                    processImageProgress(100.0F * row / h);
-                }
-            } else {
-                // White-is-zero: need to invert data.
-                byte[] inverted = new byte[bytesPerRow];
-                for(int row = 0; row < h; row++) {
-                    if (abortRequested())
-                        break;
-                    for(int col = 0; col < bytesPerRow; col++) {
-                        inverted[col] = (byte)(~(bdata[col+offset]));
-                    }
-                    stream.write(inverted, 0, bytesPerRow);
-                    offset += lineStride;
-                    processImageProgress(100.0F * row / h);
-                }
-            }
-        }
-
-        if (abortRequested())
-            processWriteAborted();
-        else {
-            processImageComplete();
-            stream.flushBefore(stream.getStreamPosition());
-        }
-    }
-
-    public void reset() {
-        super.reset();
-        stream = null;
-    }
-
-    private void checkSampleModel(SampleModel sm) {
-        int type = sm.getDataType();
-        if (type < DataBuffer.TYPE_BYTE || type > DataBuffer.TYPE_INT
-            || sm.getNumBands() != 1 || sm.getSampleSize(0) != 1)
-            throw new IllegalArgumentException(I18N.getString("WBMPImageWriter2"));
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/plugins/wbmp/WBMPImageWriterSpi.java b/ojluni/src/main/java/com/sun/imageio/plugins/wbmp/WBMPImageWriterSpi.java
deleted file mode 100755
index 5b18f0e..0000000
--- a/ojluni/src/main/java/com/sun/imageio/plugins/wbmp/WBMPImageWriterSpi.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Copyright (c) 2003, 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
- * 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.imageio.plugins.wbmp;
-
-import javax.imageio.spi.ImageWriterSpi;
-import javax.imageio.spi.ServiceRegistry;
-import javax.imageio.spi.IIORegistry;
-import javax.imageio.stream.ImageOutputStream;
-import javax.imageio.ImageWriter;
-import javax.imageio.ImageTypeSpecifier;
-import javax.imageio.IIOException;
-
-import java.awt.image.ColorModel;
-import java.awt.image.IndexColorModel;
-import java.awt.image.MultiPixelPackedSampleModel;
-import java.awt.image.SampleModel;
-import java.util.Locale;
-
-public class WBMPImageWriterSpi extends ImageWriterSpi {
-    private static String [] readerSpiNames =
-        {"com.sun.imageio.plugins.wbmp.WBMPImageReaderSpi"};
-    private static String[] formatNames = {"wbmp", "WBMP"};
-    private static String[] entensions = {"wbmp"};
-    private static String[] mimeType = {"image/vnd.wap.wbmp"};
-
-    private boolean registered = false;
-
-    public WBMPImageWriterSpi() {
-        super("Oracle Corporation",
-              "1.0",
-              formatNames,
-              entensions,
-              mimeType,
-              "com.sun.imageio.plugins.wbmp.WBMPImageWriter",
-              new Class[] { ImageOutputStream.class },
-              readerSpiNames,
-              true,
-              null, null, null, null,
-              true,
-              null, null, null, null);
-    }
-
-    public String getDescription(Locale locale) {
-        return "Standard WBMP Image Writer";
-    }
-
-    public void onRegistration(ServiceRegistry registry,
-                               Class<?> category) {
-        if (registered) {
-            return;
-        }
-
-        registered = true;
-    }
-
-    public boolean canEncodeImage(ImageTypeSpecifier type) {
-        SampleModel sm = type.getSampleModel();
-        if (!(sm instanceof MultiPixelPackedSampleModel))
-            return false;
-        if (sm.getSampleSize(0) != 1)
-            return false;
-
-        return true;
-    }
-
-    public ImageWriter createWriterInstance(Object extension)
-        throws IIOException {
-        return new WBMPImageWriter(this);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/plugins/wbmp/WBMPMetadata.java b/ojluni/src/main/java/com/sun/imageio/plugins/wbmp/WBMPMetadata.java
deleted file mode 100755
index c28046f..0000000
--- a/ojluni/src/main/java/com/sun/imageio/plugins/wbmp/WBMPMetadata.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-package com.sun.imageio.plugins.wbmp;
-
-import java.io.UnsupportedEncodingException;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import javax.imageio.ImageTypeSpecifier;
-import javax.imageio.metadata.IIOMetadata;
-import javax.imageio.metadata.IIOMetadataNode;
-import javax.imageio.metadata.IIOMetadataFormat;
-import javax.imageio.metadata.IIOMetadataFormatImpl;
-import org.w3c.dom.Node;
-import com.sun.imageio.plugins.common.I18N;
-
-import com.sun.imageio.plugins.common.ImageUtil;
-
-public class WBMPMetadata extends IIOMetadata {
-
-    static final String nativeMetadataFormatName =
-        "javax_imageio_wbmp_1.0";
-
-    public int wbmpType;
-
-    public int width;
-    public int height;
-
-    public WBMPMetadata() {
-        super(true,
-              nativeMetadataFormatName,
-              "com.sun.imageio.plugins.wbmp.WBMPMetadataFormat",
-              null, null);
-    }
-
-    public boolean isReadOnly() {
-        return true;
-    }
-
-    public Node getAsTree(String formatName) {
-        if (formatName.equals(nativeMetadataFormatName)) {
-            return getNativeTree();
-        } else if (formatName.equals
-                   (IIOMetadataFormatImpl.standardMetadataFormatName)) {
-            return getStandardTree();
-        } else {
-            throw new IllegalArgumentException(I18N.getString("WBMPMetadata0"));
-        }
-    }
-
-    private Node getNativeTree() {
-        IIOMetadataNode root =
-            new IIOMetadataNode(nativeMetadataFormatName);
-
-        addChildNode(root, "WBMPType", new Integer(wbmpType));
-        addChildNode(root, "Width", new Integer(width));
-        addChildNode(root, "Height", new Integer(height));
-
-        return root;
-    }
-
-    public void setFromTree(String formatName, Node root) {
-        throw new IllegalStateException(I18N.getString("WBMPMetadata1"));
-    }
-
-    public void mergeTree(String formatName, Node root) {
-        throw new IllegalStateException(I18N.getString("WBMPMetadata1"));
-    }
-
-    public void reset() {
-        throw new IllegalStateException(I18N.getString("WBMPMetadata1"));
-    }
-
-    private IIOMetadataNode addChildNode(IIOMetadataNode root,
-                                         String name,
-                                         Object object) {
-        IIOMetadataNode child = new IIOMetadataNode(name);
-        if (object != null) {
-            child.setUserObject(object);
-            child.setNodeValue(ImageUtil.convertObjectToString(object));
-        }
-        root.appendChild(child);
-        return child;
-    }
-
-
-    protected IIOMetadataNode getStandardChromaNode() {
-
-        IIOMetadataNode node = new IIOMetadataNode("Chroma");
-        IIOMetadataNode subNode = new IIOMetadataNode("BlackIsZero");
-        subNode.setAttribute("value", "TRUE");
-
-        node.appendChild(subNode);
-        return node;
-    }
-
-
-    protected IIOMetadataNode getStandardDimensionNode() {
-        IIOMetadataNode dimension_node = new IIOMetadataNode("Dimension");
-        IIOMetadataNode node = null; // scratch node
-
-        // PixelAspectRatio not in image
-
-        node = new IIOMetadataNode("ImageOrientation");
-        node.setAttribute("value", "Normal");
-        dimension_node.appendChild(node);
-
-        return dimension_node;
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/plugins/wbmp/WBMPMetadataFormat.java b/ojluni/src/main/java/com/sun/imageio/plugins/wbmp/WBMPMetadataFormat.java
deleted file mode 100755
index 49bce89..0000000
--- a/ojluni/src/main/java/com/sun/imageio/plugins/wbmp/WBMPMetadataFormat.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-package com.sun.imageio.plugins.wbmp;
-
-import java.util.Arrays;
-import javax.imageio.ImageTypeSpecifier;
-import javax.imageio.metadata.IIOMetadataFormat;
-import javax.imageio.metadata.IIOMetadataFormatImpl;
-
-public class WBMPMetadataFormat extends IIOMetadataFormatImpl {
-
-    private static IIOMetadataFormat instance = null;
-
-    private WBMPMetadataFormat() {
-        super(WBMPMetadata.nativeMetadataFormatName,
-              CHILD_POLICY_SOME);
-
-        // root -> ImageDescriptor
-        addElement("ImageDescriptor",
-                   WBMPMetadata.nativeMetadataFormatName,
-                   CHILD_POLICY_EMPTY);
-
-        addAttribute("ImageDescriptor", "WBMPType",
-                     DATATYPE_INTEGER, true, "0");
-
-        addAttribute("ImageDescriptor", "Width",
-                     DATATYPE_INTEGER, true, null,
-                     "0", "65535", true, true);
-        addAttribute("ImageDescriptor", "Height",
-                     DATATYPE_INTEGER, true, null,
-                     "1", "65535", true, true);
-    }
-
-
-
-    public boolean canNodeAppear(String elementName,
-                                 ImageTypeSpecifier imageType) {
-        return true;
-    }
-
-    public static synchronized IIOMetadataFormat getInstance() {
-        if (instance == null) {
-            instance = new WBMPMetadataFormat();
-        }
-        return instance;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/spi/FileImageInputStreamSpi.java b/ojluni/src/main/java/com/sun/imageio/spi/FileImageInputStreamSpi.java
deleted file mode 100755
index 5b23588..0000000
--- a/ojluni/src/main/java/com/sun/imageio/spi/FileImageInputStreamSpi.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (c) 2000, 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
- * 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.imageio.spi;
-
-import java.io.File;
-import java.util.Locale;
-import javax.imageio.spi.ImageInputStreamSpi;
-import javax.imageio.stream.ImageInputStream;
-import javax.imageio.stream.FileImageInputStream;
-
-public class FileImageInputStreamSpi extends ImageInputStreamSpi {
-
-    private static final String vendorName = "Oracle Corporation";
-
-    private static final String version = "1.0";
-
-    private static final Class inputClass = File.class;
-
-    public FileImageInputStreamSpi() {
-        super(vendorName, version, inputClass);
-    }
-
-    public String getDescription(Locale locale) {
-        return "Service provider that instantiates a FileImageInputStream from a File";
-    }
-
-    public ImageInputStream createInputStreamInstance(Object input,
-                                                      boolean useCache,
-                                                      File cacheDir) {
-        if (input instanceof File) {
-            try {
-                return new FileImageInputStream((File)input);
-            } catch (Exception e) {
-                return null;
-            }
-        } else {
-            throw new IllegalArgumentException();
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/spi/FileImageOutputStreamSpi.java b/ojluni/src/main/java/com/sun/imageio/spi/FileImageOutputStreamSpi.java
deleted file mode 100755
index 61a3a6e..0000000
--- a/ojluni/src/main/java/com/sun/imageio/spi/FileImageOutputStreamSpi.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (c) 2000, 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
- * 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.imageio.spi;
-
-import java.io.File;
-import java.util.Locale;
-import javax.imageio.spi.ImageOutputStreamSpi;
-import javax.imageio.stream.ImageOutputStream;
-import javax.imageio.stream.FileImageOutputStream;
-
-public class FileImageOutputStreamSpi extends ImageOutputStreamSpi {
-
-    private static final String vendorName = "Oracle Corporation";
-
-    private static final String version = "1.0";
-
-    private static final Class outputClass = File.class;
-
-    public FileImageOutputStreamSpi() {
-        super(vendorName, version, outputClass);
-    }
-
-    public String getDescription(Locale locale) {
-        return "Service provider that instantiates a FileImageOutputStream from a File";
-    }
-
-    public ImageOutputStream createOutputStreamInstance(Object output,
-                                                        boolean useCache,
-                                                        File cacheDir) {
-        if (output instanceof File) {
-            try {
-                return new FileImageOutputStream((File)output);
-            } catch (Exception e) {
-                e.printStackTrace();
-                return null;
-            }
-        } else {
-            throw new IllegalArgumentException();
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/spi/InputStreamImageInputStreamSpi.java b/ojluni/src/main/java/com/sun/imageio/spi/InputStreamImageInputStreamSpi.java
deleted file mode 100755
index 5b33133..0000000
--- a/ojluni/src/main/java/com/sun/imageio/spi/InputStreamImageInputStreamSpi.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Copyright (c) 2000, 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
- * 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.imageio.spi;
-
-import java.io.File;
-import java.io.InputStream;
-import java.io.IOException;
-import java.util.Locale;
-import javax.imageio.spi.ImageInputStreamSpi;
-import javax.imageio.stream.ImageInputStream;
-import javax.imageio.stream.FileCacheImageInputStream;
-import javax.imageio.stream.MemoryCacheImageInputStream;
-
-public class InputStreamImageInputStreamSpi extends ImageInputStreamSpi {
-
-    private static final String vendorName = "Oracle Corporation";
-
-    private static final String version = "1.0";
-
-    private static final Class inputClass = InputStream.class;
-
-    public InputStreamImageInputStreamSpi() {
-        super(vendorName, version, inputClass);
-    }
-
-    public String getDescription(Locale locale) {
-        return "Service provider that instantiates a FileCacheImageInputStream or MemoryCacheImageInputStream from an InputStream";
-    }
-
-    public boolean canUseCacheFile() {
-        return true;
-    }
-
-    public boolean needsCacheFile() {
-        return false;
-    }
-
-    public ImageInputStream createInputStreamInstance(Object input,
-                                                      boolean useCache,
-                                                      File cacheDir)
-        throws IOException {
-        if (input instanceof InputStream) {
-            InputStream is = (InputStream)input;
-
-            if (useCache) {
-                return new FileCacheImageInputStream(is, cacheDir);
-            } else {
-                return new MemoryCacheImageInputStream(is);
-            }
-        } else {
-            throw new IllegalArgumentException();
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/spi/OutputStreamImageOutputStreamSpi.java b/ojluni/src/main/java/com/sun/imageio/spi/OutputStreamImageOutputStreamSpi.java
deleted file mode 100755
index f0e5c85..0000000
--- a/ojluni/src/main/java/com/sun/imageio/spi/OutputStreamImageOutputStreamSpi.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright (c) 2000, 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
- * 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.imageio.spi;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.util.Locale;
-import javax.imageio.spi.ImageOutputStreamSpi;
-import javax.imageio.stream.ImageOutputStream;
-import javax.imageio.stream.FileCacheImageOutputStream;
-import javax.imageio.stream.MemoryCacheImageOutputStream;
-
-public class OutputStreamImageOutputStreamSpi extends ImageOutputStreamSpi {
-
-    private static final String vendorName = "Oracle Corporation";
-
-    private static final String version = "1.0";
-
-    private static final Class outputClass = OutputStream.class;
-
-    public OutputStreamImageOutputStreamSpi() {
-        super(vendorName, version, outputClass);
-    }
-
-    public String getDescription(Locale locale) {
-        return "Service provider that instantiates an OutputStreamImageOutputStream from an OutputStream";
-    }
-
-    public boolean canUseCacheFile() {
-        return true;
-    }
-
-    public boolean needsCacheFile() {
-        return false;
-    }
-
-    public ImageOutputStream createOutputStreamInstance(Object output,
-                                                        boolean useCache,
-                                                        File cacheDir)
-        throws IOException {
-        if (output instanceof OutputStream) {
-            OutputStream os = (OutputStream)output;
-            if (useCache) {
-                return new FileCacheImageOutputStream(os, cacheDir);
-            } else {
-                return new MemoryCacheImageOutputStream(os);
-            }
-        } else {
-            throw new IllegalArgumentException();
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/spi/RAFImageInputStreamSpi.java b/ojluni/src/main/java/com/sun/imageio/spi/RAFImageInputStreamSpi.java
deleted file mode 100755
index 5ccd59d..0000000
--- a/ojluni/src/main/java/com/sun/imageio/spi/RAFImageInputStreamSpi.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright (c) 2000, 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
- * 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.imageio.spi;
-
-import java.io.File;
-import java.io.RandomAccessFile;
-import java.util.Locale;
-import javax.imageio.spi.ImageInputStreamSpi;
-import javax.imageio.stream.ImageInputStream;
-import javax.imageio.stream.FileImageInputStream;
-
-public class RAFImageInputStreamSpi extends ImageInputStreamSpi {
-
-    private static final String vendorName = "Oracle Corporation";
-
-    private static final String version = "1.0";
-
-    private static final Class inputClass = RandomAccessFile.class;
-
-    public RAFImageInputStreamSpi() {
-        super(vendorName, version, inputClass);
-    }
-
-    public String getDescription(Locale locale) {
-        return "Service provider that instantiates a FileImageInputStream from a RandomAccessFile";
-    }
-
-    public ImageInputStream createInputStreamInstance(Object input,
-                                                      boolean useCache,
-                                                      File cacheDir) {
-        if (input instanceof RandomAccessFile) {
-            try {
-                return new FileImageInputStream((RandomAccessFile)input);
-            } catch (Exception e) {
-                return null;
-            }
-        } else {
-            throw new IllegalArgumentException
-                ("input not a RandomAccessFile!");
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/spi/RAFImageOutputStreamSpi.java b/ojluni/src/main/java/com/sun/imageio/spi/RAFImageOutputStreamSpi.java
deleted file mode 100755
index 9b19f52..0000000
--- a/ojluni/src/main/java/com/sun/imageio/spi/RAFImageOutputStreamSpi.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright (c) 2000, 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
- * 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.imageio.spi;
-
-import java.io.File;
-import java.io.RandomAccessFile;
-import java.util.Locale;
-import javax.imageio.spi.ImageOutputStreamSpi;
-import javax.imageio.stream.ImageOutputStream;
-import javax.imageio.stream.FileImageOutputStream;
-
-public class RAFImageOutputStreamSpi extends ImageOutputStreamSpi {
-
-    private static final String vendorName = "Oracle Corporation";
-
-    private static final String version = "1.0";
-
-    private static final Class outputClass = RandomAccessFile.class;
-
-    public RAFImageOutputStreamSpi() {
-        super(vendorName, version, outputClass);
-    }
-
-    public String getDescription(Locale locale) {
-        return "Service provider that instantiates a FileImageOutputStream from a RandomAccessFile";
-    }
-
-    public ImageOutputStream createOutputStreamInstance(Object output,
-                                                        boolean useCache,
-                                                        File cacheDir) {
-        if (output instanceof RandomAccessFile) {
-            try {
-                return new FileImageOutputStream((RandomAccessFile)output);
-            } catch (Exception e) {
-                e.printStackTrace();
-                return null;
-            }
-        } else {
-            throw new IllegalArgumentException
-                ("input not a RandomAccessFile!");
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/stream/CloseableDisposerRecord.java b/ojluni/src/main/java/com/sun/imageio/stream/CloseableDisposerRecord.java
deleted file mode 100755
index 5ea52de..0000000
--- a/ojluni/src/main/java/com/sun/imageio/stream/CloseableDisposerRecord.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-package com.sun.imageio.stream;
-
-import java.io.Closeable;
-import java.io.IOException;
-import sun.java2d.DisposerRecord;
-
-/**
- * Convenience class that closes a given resource (e.g. RandomAccessFile),
- * typically associated with an Image{Input,Output}Stream, prior to the
- * stream being garbage collected.
- */
-public class CloseableDisposerRecord implements DisposerRecord {
-    private Closeable closeable;
-
-    public CloseableDisposerRecord(Closeable closeable) {
-        this.closeable = closeable;
-    }
-
-    public synchronized void dispose() {
-        if (closeable != null) {
-            try {
-                closeable.close();
-            } catch (IOException e) {
-            } finally {
-                closeable = null;
-            }
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/stream/StreamCloser.java b/ojluni/src/main/java/com/sun/imageio/stream/StreamCloser.java
deleted file mode 100755
index e4b887d..0000000
--- a/ojluni/src/main/java/com/sun/imageio/stream/StreamCloser.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-package com.sun.imageio.stream;
-
-import java.io.IOException;
-import java.util.Set;
-import java.util.WeakHashMap;
-import javax.imageio.stream.ImageInputStream;
-
-/**
- * This class provide means to properly close hanging
- * image input/output streams on VM shutdown.
- * This might be useful for proper cleanup such as removal
- * of temporary files.
- *
- * Addition of stream do not prevent it from being garbage collected
- * if no other references to it exists. Stream can be closed
- * explicitly without removal from StreamCloser queue.
- * Explicit removal from the queue only helps to save some memory.
- */
-public class StreamCloser {
-
-    private static WeakHashMap<CloseAction, Object> toCloseQueue;
-    private static Thread streamCloser;
-
-    public static void addToQueue(CloseAction ca) {
-        synchronized (StreamCloser.class) {
-            if (toCloseQueue == null) {
-                toCloseQueue =
-                    new WeakHashMap<CloseAction, Object>();
-            }
-
-            toCloseQueue.put(ca, null);
-
-            if (streamCloser == null) {
-                final Runnable streamCloserRunnable = new Runnable() {
-                    public void run() {
-                        if (toCloseQueue != null) {
-                            synchronized (StreamCloser.class) {
-                                Set<CloseAction> set =
-                                    toCloseQueue.keySet();
-                                // Make a copy of the set in order to avoid
-                                // concurrent modification (the is.close()
-                                // will in turn call removeFromQueue())
-                                CloseAction[] actions =
-                                    new CloseAction[set.size()];
-                                actions = set.toArray(actions);
-                                for (CloseAction ca : actions) {
-                                    if (ca != null) {
-                                        try {
-                                            ca.performAction();
-                                        } catch (IOException e) {
-                                        }
-                                    }
-                                }
-                            }
-                        }
-                    }
-                };
-
-                java.security.AccessController.doPrivileged(
-                    new java.security.PrivilegedAction() {
-                        public Object run() {
-                            /* The thread must be a member of a thread group
-                             * which will not get GCed before VM exit.
-                             * Make its parent the top-level thread group.
-                             */
-                            ThreadGroup tg =
-                                Thread.currentThread().getThreadGroup();
-                            for (ThreadGroup tgn = tg;
-                                 tgn != null;
-                                 tg = tgn, tgn = tg.getParent());
-                            streamCloser = new Thread(tg, streamCloserRunnable);
-                            /* Set context class loader to null in order to avoid
-                             * keeping a strong reference to an application classloader.
-                             */
-                            streamCloser.setContextClassLoader(null);
-                            Runtime.getRuntime().addShutdownHook(streamCloser);
-                            return null;
-                        }
-                    });
-            }
-        }
-    }
-
-    public static void removeFromQueue(CloseAction ca) {
-        synchronized (StreamCloser.class) {
-            if (toCloseQueue != null) {
-                toCloseQueue.remove(ca);
-            }
-        }
-    }
-
-    public static CloseAction createCloseAction(ImageInputStream iis) {
-        return new CloseAction(iis);
-    }
-
-    public static final class CloseAction {
-        private ImageInputStream iis;
-
-        private CloseAction(ImageInputStream iis) {
-            this.iis = iis;
-        }
-
-        public void performAction() throws IOException {
-            if (iis != null) {
-                iis.close();
-            }
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/imageio/stream/StreamFinalizer.java b/ojluni/src/main/java/com/sun/imageio/stream/StreamFinalizer.java
deleted file mode 100755
index 3695498..0000000
--- a/ojluni/src/main/java/com/sun/imageio/stream/StreamFinalizer.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-package com.sun.imageio.stream;
-
-import java.io.IOException;
-import javax.imageio.stream.ImageInputStream;
-
-/**
- * Small class to assist in properly closing an ImageInputStream instance
- * prior to garbage collection.  The ImageInputStreamImpl class defines a
- * finalize() method, but in a number of its public subclasses
- * (e.g. FileImageInputStream) we override the finalize() method to be
- * empty for performance reasons, and instead rely on the Disposer mechanism
- * for closing/disposing resources.  This is fine when one of these classes
- * is instantiated directly (e.g. new FileImageInputStream()) but in the
- * unlikely case where a user defines their own subclass of one of those
- * streams, we need some way to get back to the behavior of
- * ImageInputStreamImpl, which will call close() as part of finalization.
- *
- * Typically an Image{Input,Output}Stream will construct an instance of
- * StreamFinalizer in its constructor if it detects that it has been
- * subclassed by the user.  The ImageInputStream instance will hold a
- * reference to the StreamFinalizer, and the StreamFinalizer will hold a
- * reference back to the ImageInputStream from which it was created.  When
- * both are no longer reachable, the StreamFinalizer.finalize() method will
- * be called, which will take care of closing down the ImageInputStream.
- *
- * Clearly this is a bit of a hack, but it will likely only be used in the
- * rarest of circumstances: when a user has subclassed one of the public
- * stream classes.  (It should be no worse than the old days when the public
- * stream classes had non-empty finalize() methods.)
- */
-public class StreamFinalizer {
-    private ImageInputStream stream;
-
-    public StreamFinalizer(ImageInputStream stream) {
-        this.stream = stream;
-    }
-
-    protected void finalize() throws Throwable {
-        try {
-            stream.close();
-        } catch (IOException e) {
-        } finally {
-            stream = null;
-            super.finalize();
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jarsigner/ContentSigner.java b/ojluni/src/main/java/com/sun/jarsigner/ContentSigner.java
deleted file mode 100755
index 1a29bf7..0000000
--- a/ojluni/src/main/java/com/sun/jarsigner/ContentSigner.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-package com.sun.jarsigner;
-
-import java.io.IOException;
-import java.security.NoSuchAlgorithmException;
-import java.security.cert.CertificateException;
-
-/**
- * This class defines a content signing service.
- * Implementations must be instantiable using a zero-argument constructor.
- *
- * @since 1.5
- * @author Vincent Ryan
- */
-
-public abstract class ContentSigner {
-
-    /**
-     * Generates a PKCS #7 signed data message.
-     * This method is used when the signature has already been generated.
-     * The signature, the signer's details, and optionally a signature
-     * timestamp and the content that was signed, are all packaged into a
-     * signed data message.
-     *
-     * @param parameters The non-null input parameters.
-     * @param omitContent true if the content should be omitted from the
-     *         signed data message. Otherwise the content is included.
-     * @param applyTimestamp true if the signature should be timestamped.
-     *         Otherwise timestamping is not performed.
-     * @return A PKCS #7 signed data message.
-     * @throws NoSuchAlgorithmException The exception is thrown if the signature
-     *         algorithm is unrecognised.
-     * @throws CertificateException The exception is thrown if an error occurs
-     *         while processing the signer's certificate or the TSA's
-     *         certificate.
-     * @throws IOException The exception is thrown if an error occurs while
-     *         generating the signature timestamp or while generating the signed
-     *         data message.
-     * @throws NullPointerException The exception is thrown if parameters is
-     *         null.
-     */
-    public abstract byte[] generateSignedData(
-        ContentSignerParameters parameters, boolean omitContent,
-        boolean applyTimestamp)
-            throws NoSuchAlgorithmException, CertificateException, IOException;
-}
diff --git a/ojluni/src/main/java/com/sun/jarsigner/ContentSignerParameters.java b/ojluni/src/main/java/com/sun/jarsigner/ContentSignerParameters.java
deleted file mode 100755
index fe48bc5..0000000
--- a/ojluni/src/main/java/com/sun/jarsigner/ContentSignerParameters.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Copyright (c) 2003, 2011, 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.jarsigner;
-
-import java.net.URI;
-import java.security.cert.X509Certificate;
-import java.util.zip.ZipFile;
-
-/**
- * This interface encapsulates the parameters for a ContentSigner object.
- *
- * @since 1.5
- * @author Vincent Ryan
- */
-
-public interface ContentSignerParameters {
-
-    /**
-     * Retrieves the command-line arguments passed to the jarsigner tool.
-     *
-     * @return The command-line arguments. May be null.
-     */
-    public String[] getCommandLine();
-
-    /**
-     * Retrieves the identifier for a Timestamping Authority (TSA).
-     *
-     * @return The TSA identifier. May be null.
-     */
-    public URI getTimestampingAuthority();
-
-    /**
-     * Retrieves the certificate for a Timestamping Authority (TSA).
-     *
-     * @return The TSA certificate. May be null.
-     */
-    public X509Certificate getTimestampingAuthorityCertificate();
-
-    /**
-     * Retrieves the JAR file's signature.
-     *
-     * @return The non-null array of signature bytes.
-     */
-    public byte[] getSignature();
-
-    /**
-     * Retrieves the name of the signature algorithm.
-     *
-     * @return The non-null string name of the signature algorithm.
-     */
-    public String getSignatureAlgorithm();
-
-    /**
-     * Retrieves the signer's X.509 certificate chain.
-     *
-     * @return The non-null array of X.509 public-key certificates.
-     */
-    public X509Certificate[] getSignerCertificateChain();
-
-    /**
-     * Retrieves the content that was signed.
-     * The content is the JAR file's signature file.
-     *
-     * @return The content bytes. May be null.
-     */
-    public byte[] getContent();
-
-    /**
-     * Retrieves the original source ZIP file before it was signed.
-     *
-     * @return The original ZIP file. May be null.
-     */
-    public ZipFile getSource();
-}
diff --git a/ojluni/src/main/java/com/sun/jarsigner/package.html b/ojluni/src/main/java/com/sun/jarsigner/package.html
deleted file mode 100755
index b00d655..0000000
--- a/ojluni/src/main/java/com/sun/jarsigner/package.html
+++ /dev/null
@@ -1,38 +0,0 @@
-<html>
-<!--
- 
-Copyright (c) 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.
--->
-  <head>
-    <title>Jarsigner Signing Mechanism Package</title>
-  </head>   
-  <body>
-This package comprises the interfaces and classes used to define the
-signing mechanism used by the <tt>jarsigner</tt> tool.
-<p>
-Clients may override the default signing mechanism of the <tt>jarsigner</tt>
-tool by supplying an alternative implementation of 
-{@link com.sun.jarsigner.ContentSigner}.
-  </body>
-</html>
diff --git a/ojluni/src/main/java/com/sun/java/browser/dom/DOMAccessException.java b/ojluni/src/main/java/com/sun/java/browser/dom/DOMAccessException.java
deleted file mode 100755
index 62a0515..0000000
--- a/ojluni/src/main/java/com/sun/java/browser/dom/DOMAccessException.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Copyright (c) 2000, 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.java.browser.dom;
-
-public class DOMAccessException extends Exception
-{
-    /**
-     * Constructs a new DOMAccessException with no detail message.
-     */
-    public DOMAccessException()
-    {
-        this(null, null);
-    }
-
-
-    /**
-     * Constructs a new DOMAccessException with the given detail message.
-     *
-     * @param msg Detail message.
-     */
-    public DOMAccessException(String msg)
-    {
-        this(null, msg);
-    }
-
-    /**
-     * Constructs a new DOMAccessException with the given exception as a root clause.
-     *
-     * @param e Exception.
-     */
-    public DOMAccessException(Exception e)
-    {
-        this(e, null);
-    }
-
-    /**
-     * Constructs a new DOMAccessException with the given exception as a root clause and the given detail message.
-     *
-     * @param e Exception.
-     * @param msg Detail message.
-     */
-    public DOMAccessException(Exception e, String msg)
-    {
-        this.ex = e;
-        this.msg = msg;
-    }
-
-    /**
-     * Returns the detail message of the error or null if there is no detail message.
-     */
-    public String getMessage()
-    {
-        return msg;
-    }
-
-    /**
-     * Returns the root cause of the error or null if there is none.
-     */
-    public Throwable getCause()
-    {
-        return ex;
-    }
-
-    private Throwable ex;
-    private String msg;
-}
diff --git a/ojluni/src/main/java/com/sun/java/browser/dom/DOMAccessor.java b/ojluni/src/main/java/com/sun/java/browser/dom/DOMAccessor.java
deleted file mode 100755
index 6435be4..0000000
--- a/ojluni/src/main/java/com/sun/java/browser/dom/DOMAccessor.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (c) 2000, 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.java.browser.dom;
-
-
-public interface DOMAccessor
-{
-    /**
-     * Returns the Document object of the DOM.
-     */
-    public org.w3c.dom.Document getDocument(Object obj) throws org.w3c.dom.DOMException;
-
-    /**
-     * Returns a DOMImplementation object.
-     */
-    public org.w3c.dom.DOMImplementation getDOMImplementation();
-}
diff --git a/ojluni/src/main/java/com/sun/java/browser/dom/DOMAction.java b/ojluni/src/main/java/com/sun/java/browser/dom/DOMAction.java
deleted file mode 100755
index 8e8e4e4..0000000
--- a/ojluni/src/main/java/com/sun/java/browser/dom/DOMAction.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (c) 2000, 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.java.browser.dom;
-
-
-public interface DOMAction
-{
-    /**
-     * When an object implementing interface DOMAction is passed
-     * to DOMService.invokeAndWait() or DOMService.invokeLater(),
-     * run method is called in the DOM access dispatch thread.
-     *
-     * accessor is used for the DOMAction to access the entry point of
-     * the browser's DOM, if necessary.
-     *
-     * @param accessor DOMAccessor
-     */
-    public Object run(DOMAccessor accessor);
-}
diff --git a/ojluni/src/main/java/com/sun/java/browser/dom/DOMService.java b/ojluni/src/main/java/com/sun/java/browser/dom/DOMService.java
deleted file mode 100755
index 483fbf8..0000000
--- a/ojluni/src/main/java/com/sun/java/browser/dom/DOMService.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Copyright (c) 2000, 2001, 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.java.browser.dom;
-
-public abstract class DOMService
-{
-    /**
-     * Returns new instance of a DOMService. The implementation
-     * of the DOMService returns depends on the setting of the
-     * com.sun.java.browser.dom.DOMServiceProvider property or,
-     * if the property is not set, a platform specific default.
-     *
-     * Throws DOMUnsupportedException if the DOMService is not
-     * available to the obj.
-     *
-     * @param obj Object to leverage the DOMService
-     */
-    public static DOMService getService(Object obj)
-                  throws DOMUnsupportedException
-    {
-        try
-        {
-            String provider = (String) java.security.AccessController.doPrivileged(
-                   new sun.security.action.GetPropertyAction("com.sun.java.browser.dom.DOMServiceProvider"));
-
-            Class clazz = DOMService.class.forName("sun.plugin.dom.DOMService");
-
-            return (DOMService) clazz.newInstance();
-        }
-        catch (Throwable e)
-        {
-            throw new DOMUnsupportedException(e.toString());
-        }
-    }
-
-    /**
-     * An empty constructor is provided. Implementations of this
-     * abstract class must provide a public no-argument constructor
-     * in order for the static getService() method to work correctly.
-     * Application programmers should not be able to directly
-     * construct implementation subclasses of this abstract subclass.
-     */
-    public DOMService()
-    {
-    }
-
-    /**
-     * Causes action.run() to be executed synchronously on the
-     * DOM action dispatching thread. This call will block until all
-     * pending DOM actions have been processed and (then)
-     * action.run() returns. This method should be used when an
-     * application thread needs to access the browser's DOM.
-     * It should not be called from the DOMActionDispatchThread.
-     *
-     * Note that if the DOMAction.run() method throws an uncaught
-     * exception (on the DOM action dispatching thread),  it's caught
-     * and re-thrown, as an DOMAccessException, on the caller's thread.
-     *
-     * If the DOMAction.run() method throws any DOM security related
-     * exception (on the DOM action dispatching thread), it's caught
-     * and re-thrown, as an DOMSecurityException, on the caller's thread.
-     *
-     * @param action DOMAction.
-     */
-    public abstract Object invokeAndWait(DOMAction action) throws DOMAccessException;
-
-    /**
-     * Causes action.run() to be executed asynchronously on the
-     * DOM action dispatching thread. This method should be used
-     * when an application thread needs to access the browser's
-     * DOM. It should not be called from the DOMActionDispatchThread.
-     *
-     * Note that if the DOMAction.run() method throws an uncaught
-     * exception (on the DOM action dispatching thread),  it will not be
-     * caught and re-thrown on the caller's thread.
-     *
-     * @param action DOMAction.
-     */
-    public abstract void invokeLater(DOMAction action);
-}
diff --git a/ojluni/src/main/java/com/sun/java/browser/dom/DOMServiceProvider.java b/ojluni/src/main/java/com/sun/java/browser/dom/DOMServiceProvider.java
deleted file mode 100755
index 8cd7aa1..0000000
--- a/ojluni/src/main/java/com/sun/java/browser/dom/DOMServiceProvider.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (c) 2000, 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.java.browser.dom;
-
-public abstract class DOMServiceProvider
-{
-    /**
-     * An empty constructor is provided. Implementations should
-     * provide a public constructor so that the DOMService
-     * can instantiate instances of the implementation class.
-     * Application programmers should not be able to directly
-     * construct implementation subclasses of this abstract subclass.
-     * The only way an application should be able to obtain a
-     * reference to a DOMServiceProvider implementation
-     * instance is by using the appropriate methods of the
-     * DOMService.
-     */
-    public DOMServiceProvider()
-    {
-    }
-
-    /**
-     * Returns true if the DOMService can determine the association
-     * between the obj and the underlying DOM in the browser.
-     */
-    public abstract boolean canHandle(Object obj);
-
-    /**
-     * Returns the Document object of the DOM.
-     */
-    public abstract org.w3c.dom.Document getDocument(Object obj) throws DOMUnsupportedException;
-
-    /**
-     * Returns the DOMImplemenation object of the DOM.
-     */
-    public abstract org.w3c.dom.DOMImplementation getDOMImplementation();
-}
diff --git a/ojluni/src/main/java/com/sun/java/browser/dom/DOMUnsupportedException.java b/ojluni/src/main/java/com/sun/java/browser/dom/DOMUnsupportedException.java
deleted file mode 100755
index 94fa9c6..0000000
--- a/ojluni/src/main/java/com/sun/java/browser/dom/DOMUnsupportedException.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Copyright (c) 2000, 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.java.browser.dom;
-
-
-public class DOMUnsupportedException extends Exception
-{
-    /**
-     * Constructs a new DOMUnsupportedException with no detail message.
-     */
-    public DOMUnsupportedException()
-    {
-        this(null, null);
-    }
-
-    /**
-     * Constructs a new DOMUnsupportedException with the given detail message.
-     *
-     * @param msg Detail message.
-     */
-    public DOMUnsupportedException(String msg)
-    {
-        this(null, msg);
-    }
-
-    /**
-     * Constructs a new DOMUnsupportedException with the given exception as a root clause.
-     *
-     * @param e Exception.
-     */
-    public DOMUnsupportedException(Exception e)
-    {
-        this(e, null);
-    }
-
-    /**
-     * Constructs a new DOMUnsupportedException with the given exception as a root clause and the given detail message.
-     *
-     * @param e Exception.
-     * @param msg Detail message.
-     */
-    public DOMUnsupportedException(Exception e, String msg)
-    {
-        this.ex = e;
-        this.msg = msg;
-    }
-
-    /**
-     * Returns the detail message of the error or null if there is no detail message.
-     */
-    public String getMessage()
-    {
-        return msg;
-    }
-
-    /**
-     * Returns the root cause of the error or null if there is none.
-     */
-    public Throwable getCause()
-    {
-        return ex;
-    }
-
-    private Throwable ex;
-    private String msg;
-}
diff --git a/ojluni/src/main/java/com/sun/java/browser/net/ProxyInfo.java b/ojluni/src/main/java/com/sun/java/browser/net/ProxyInfo.java
deleted file mode 100755
index f966e813..0000000
--- a/ojluni/src/main/java/com/sun/java/browser/net/ProxyInfo.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (c) 2001, 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.java.browser.net;
-
-/**
- *
- * @author  Zhengyu Gu
- */
-public interface ProxyInfo {
-    public String   getHost();
-    public int      getPort();
-    public boolean  isSocks();
-}
diff --git a/ojluni/src/main/java/com/sun/java/browser/net/ProxyService.java b/ojluni/src/main/java/com/sun/java/browser/net/ProxyService.java
deleted file mode 100755
index b496090..0000000
--- a/ojluni/src/main/java/com/sun/java/browser/net/ProxyService.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (c) 2001, 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.java.browser.net;
-
-import java.net.URL;
-import java.io.IOException;
-
-/**
- *
- * @author  Zhengyu Gu
- */
-public class ProxyService extends Object {
-    private static ProxyServiceProvider provider = null;
-
-
-    public static void setProvider(ProxyServiceProvider p)
-    throws IOException {
-        if(null == provider)
-            provider = p;
-        else
-            throw new IOException("Proxy service provider has already been set.");
-    }
-
-
-    /**
-     *  <p>The function returns proxy information of the specified URL.</p>
-     *  @param url URL
-     *  @return returns proxy information. If there is not proxy, returns null
-     *  @since 1.4
-     */
-    public static ProxyInfo[] getProxyInfo(URL url)
-    throws IOException {
-        if(null == provider)
-            throw new IOException("Proxy service provider is not yet set");
-
-        return provider.getProxyInfo(url);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/java/browser/net/ProxyServiceProvider.java b/ojluni/src/main/java/com/sun/java/browser/net/ProxyServiceProvider.java
deleted file mode 100755
index df4513a..0000000
--- a/ojluni/src/main/java/com/sun/java/browser/net/ProxyServiceProvider.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (c) 2001, 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.java.browser.net;
-
-import java.net.URL;
-
-/**
- *
- * @author  Zhengyu Gu
- */
-public interface ProxyServiceProvider {
-    public ProxyInfo[] getProxyInfo(URL url);
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/Painter.java b/ojluni/src/main/java/com/sun/java/swing/Painter.java
deleted file mode 100755
index b0bd846..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/Painter.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (c) 2005, 2006, 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.java.swing;
-
-/**
- * This class is preserved for backward compatibility with JDK 6.
- *
- * @deprecated Use {@link javax.swing.Painter} instead.
- */
-public interface Painter<T> extends javax.swing.Painter {
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/SwingUtilities3.java b/ojluni/src/main/java/com/sun/java/swing/SwingUtilities3.java
deleted file mode 100755
index 1ca240d..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/SwingUtilities3.java
+++ /dev/null
@@ -1,220 +0,0 @@
-/*
- * Copyright (c) 2002, 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
- * 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.java.swing;
-
-import sun.awt.EventQueueDelegate;
-import sun.awt.AppContext;
-import java.util.Collections;
-import java.util.Map;
-import java.util.WeakHashMap;
-import java.util.concurrent.Callable;
-import java.applet.Applet;
-import java.awt.AWTEvent;
-import java.awt.EventQueue;
-import java.awt.Component;
-import java.awt.Container;
-import java.awt.Window;
-import javax.swing.JComponent;
-import javax.swing.RepaintManager;
-
-/**
- * A collection of utility methods for Swing.
- * <p>
- * <b>WARNING:</b> While this class is public, it should not be treated as
- * public API and its API may change in incompatable ways between dot dot
- * releases and even patch releases. You should not rely on this class even
- * existing.
- *
- * This is a second part of sun.swing.SwingUtilities2. It is required
- * to provide services for JavaFX applets.
- *
- */
-public class SwingUtilities3 {
-    /**
-     * The {@code clientProperty} key for delegate {@code RepaintManager}
-     */
-    private static final Object DELEGATE_REPAINT_MANAGER_KEY =
-        new StringBuilder("DelegateRepaintManagerKey");
-
-    /**
-      * Registers delegate RepaintManager for {@code JComponent}.
-      */
-    public static void setDelegateRepaintManager(JComponent component,
-                                                RepaintManager repaintManager) {
-        /* setting up flag in AppContext to speed up lookups in case
-         * there are no delegate RepaintManagers used.
-         */
-        AppContext.getAppContext().put(DELEGATE_REPAINT_MANAGER_KEY,
-                                       Boolean.TRUE);
-
-        component.putClientProperty(DELEGATE_REPAINT_MANAGER_KEY,
-                                    repaintManager);
-    }
-
-    private static final Map<Container, Boolean> vsyncedMap =
-        Collections.synchronizedMap(new WeakHashMap<Container, Boolean>());
-
-    /**
-     * Sets vsyncRequested state for the {@code rootContainer}.  If
-     * {@code isRequested} is {@code true} then vsynced
-     * {@code BufferStrategy} is enabled for this {@code rootContainer}.
-     *
-     * Note: requesting vsynced painting does not guarantee one. The outcome
-     * depends on current RepaintManager's RepaintManager.PaintManager
-     * and on the capabilities of the graphics hardware/software and what not.
-     *
-     * @param rootContainer topmost container. Should be either {@code Window}
-     *  or {@code Applet}
-     * @param isRequested the value to set vsyncRequested state to
-     */
-    public static void setVsyncRequested(Container rootContainer,
-                                         boolean isRequested) {
-        assert (rootContainer instanceof Applet) || (rootContainer instanceof Window);
-        if (isRequested) {
-            vsyncedMap.put(rootContainer, Boolean.TRUE);
-        } else {
-            vsyncedMap.remove(rootContainer);
-        }
-    }
-
-    /**
-     * Checks if vsync painting is requested for {@code rootContainer}
-     *
-     * @param rootContainer topmost container. Should be either Window or Applet
-     * @return {@code true} if vsync painting is requested for {@code rootContainer}
-     */
-    public static boolean isVsyncRequested(Container rootContainer) {
-        assert (rootContainer instanceof Applet) || (rootContainer instanceof Window);
-        return Boolean.TRUE == vsyncedMap.get(rootContainer);
-    }
-
-    /**
-     * Returns delegate {@code RepaintManager} for {@code component} hierarchy.
-     */
-    public static RepaintManager getDelegateRepaintManager(Component
-                                                            component) {
-        RepaintManager delegate = null;
-        if (Boolean.TRUE == AppContext.getAppContext().get(
-                                               DELEGATE_REPAINT_MANAGER_KEY)) {
-            while (delegate == null && component != null) {
-                while (component != null
-                         && ! (component instanceof JComponent)) {
-                    component = component.getParent();
-                }
-                if (component != null) {
-                    delegate = (RepaintManager)
-                        ((JComponent) component)
-                          .getClientProperty(DELEGATE_REPAINT_MANAGER_KEY);
-                    component = component.getParent();
-                }
-
-            }
-        }
-        return delegate;
-    }
-
-    /*
-     * We use maps to avoid reflection. Hopefully it should perform better
-     * this way.
-     */
-    public static void setEventQueueDelegate(
-            Map<String, Map<String, Object>> map) {
-        EventQueueDelegate.setDelegate(new EventQueueDelegateFromMap(map));
-    }
-
-    private static class EventQueueDelegateFromMap
-    implements EventQueueDelegate.Delegate {
-        private final AWTEvent[] afterDispatchEventArgument;
-        private final Object[] afterDispatchHandleArgument;
-        private final Callable<Void> afterDispatchCallable;
-
-        private final AWTEvent[] beforeDispatchEventArgument;
-        private final Callable<Object> beforeDispatchCallable;
-
-        private final EventQueue[] getNextEventEventQueueArgument;
-        private final Callable<AWTEvent> getNextEventCallable;
-
-        @SuppressWarnings("unchecked")
-        public EventQueueDelegateFromMap(Map<String, Map<String, Object>> objectMap) {
-            Map<String, Object> methodMap = objectMap.get("afterDispatch");
-            afterDispatchEventArgument = (AWTEvent[]) methodMap.get("event");
-            afterDispatchHandleArgument = (Object[]) methodMap.get("handle");
-            afterDispatchCallable = (Callable<Void>) methodMap.get("method");
-
-            methodMap = objectMap.get("beforeDispatch");
-            beforeDispatchEventArgument = (AWTEvent[]) methodMap.get("event");
-            beforeDispatchCallable = (Callable<Object>) methodMap.get("method");
-
-            methodMap = objectMap.get("getNextEvent");
-            getNextEventEventQueueArgument =
-                (EventQueue[]) methodMap.get("eventQueue");
-            getNextEventCallable = (Callable<AWTEvent>) methodMap.get("method");
-        }
-
-        @Override
-        public void afterDispatch(AWTEvent event, Object handle) throws InterruptedException {
-            afterDispatchEventArgument[0] = event;
-            afterDispatchHandleArgument[0] = handle;
-            try {
-                afterDispatchCallable.call();
-            } catch (InterruptedException e) {
-                throw e;
-            } catch (RuntimeException e) {
-                throw e;
-            } catch (Exception e) {
-                throw new RuntimeException(e);
-            }
-        }
-
-        @Override
-        public Object beforeDispatch(AWTEvent event) throws InterruptedException {
-            beforeDispatchEventArgument[0] = event;
-            try {
-                return beforeDispatchCallable.call();
-            } catch (InterruptedException e) {
-                throw e;
-            } catch (RuntimeException e) {
-                throw e;
-            } catch (Exception e) {
-                throw new RuntimeException(e);
-            }
-        }
-
-        @Override
-        public AWTEvent getNextEvent(EventQueue eventQueue) throws InterruptedException {
-            getNextEventEventQueueArgument[0] = eventQueue;
-            try {
-                return getNextEventCallable.call();
-            } catch (InterruptedException e) {
-                throw e;
-            } catch (RuntimeException e) {
-                throw e;
-            } catch (Exception e) {
-                throw new RuntimeException(e);
-            }
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/GTKColorChooserPanel.java b/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/GTKColorChooserPanel.java
deleted file mode 100755
index be764d0..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/GTKColorChooserPanel.java
+++ /dev/null
@@ -1,1303 +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.
- */
-package com.sun.java.swing.plaf.gtk;
-
-import java.awt.*;
-import java.awt.event.*;
-import java.awt.image.*;
-import javax.swing.*;
-import javax.swing.colorchooser.*;
-import javax.swing.event.*;
-import javax.swing.plaf.*;
-
-/**
- * A color chooser panel mimicking that of GTK's: a color wheel showing
- * hue and a triangle that varies saturation and brightness.
- *
- * @author Scott Violet
- */
-class GTKColorChooserPanel extends AbstractColorChooserPanel implements
-              ChangeListener {
-    private static final float PI_3 = (float)(Math.PI / 3);
-
-    private ColorTriangle triangle;
-    private JLabel lastLabel;
-    private JLabel label;
-
-    private JSpinner hueSpinner;
-    private JSpinner saturationSpinner;
-    private JSpinner valueSpinner;
-
-    private JSpinner redSpinner;
-    private JSpinner greenSpinner;
-    private JSpinner blueSpinner;
-
-    private JTextField colorNameTF;
-
-    private boolean settingColor;
-
-    // The colors are mirrored to avoid creep in adjusting an individual
-    // value.
-    private float hue;
-    private float saturation;
-    private float brightness;
-
-
-
-    /**
-     * Convenience method to transfer focus to the next child of component.
-     */
-    // PENDING: remove this when a variant of this is added to awt.
-    static void compositeRequestFocus(Component component, boolean direction) {
-        if (component instanceof Container) {
-            Container container = (Container)component;
-            if (container.isFocusCycleRoot()) {
-                FocusTraversalPolicy policy = container.
-                                              getFocusTraversalPolicy();
-                Component comp = policy.getDefaultComponent(container);
-                if (comp!=null) {
-                    comp.requestFocus();
-                    return;
-                }
-            }
-            Container rootAncestor = container.getFocusCycleRootAncestor();
-            if (rootAncestor!=null) {
-                FocusTraversalPolicy policy = rootAncestor.
-                                                  getFocusTraversalPolicy();
-                Component comp;
-
-                if (direction) {
-                    comp = policy.getComponentAfter(rootAncestor, container);
-                }
-                else {
-                    comp = policy.getComponentBefore(rootAncestor, container);
-                }
-                if (comp != null) {
-                    comp.requestFocus();
-                    return;
-                }
-            }
-        }
-        component.requestFocus();
-    }
-
-
-    /**
-     * Returns a user presentable description of this GTKColorChooserPane.
-     */
-    public String getDisplayName() {
-        return (String)UIManager.get("GTKColorChooserPanel.nameText");
-    }
-
-    /**
-     * Returns the mnemonic to use with <code>getDisplayName</code>.
-     */
-    public int getMnemonic() {
-        String m = (String)UIManager.get("GTKColorChooserPanel.mnemonic");
-
-        if (m != null) {
-            try {
-                int value = Integer.parseInt(m);
-
-                return value;
-            } catch (NumberFormatException nfe) {}
-        }
-        return -1;
-    }
-
-    /**
-     * Character to underline that represents the mnemonic.
-     */
-    public int getDisplayedMnemonicIndex() {
-        String m = (String)UIManager.get(
-                           "GTKColorChooserPanel.displayedMnemonicIndex");
-
-        if (m != null) {
-            try {
-                int value = Integer.parseInt(m);
-
-                return value;
-            } catch (NumberFormatException nfe) {}
-        }
-        return -1;
-    }
-
-    public Icon getSmallDisplayIcon() {
-        return null;
-    }
-
-    public Icon getLargeDisplayIcon() {
-        return null;
-    }
-
-    public void uninstallChooserPanel(JColorChooser enclosingChooser) {
-        super.uninstallChooserPanel(enclosingChooser);
-        removeAll();
-    }
-
-    /**
-     * Builds and configures the widgets for the GTKColorChooserPanel.
-     */
-    protected void buildChooser() {
-        triangle = new ColorTriangle();
-        triangle.setName("GTKColorChooserPanel.triangle");
-
-        // PENDING: when we straighten out user setting opacity, this should
-        // be changed.
-        label = new OpaqueLabel();
-        label.setName("GTKColorChooserPanel.colorWell");
-        label.setOpaque(true);
-        label.setMinimumSize(new Dimension(67, 32));
-        label.setPreferredSize(new Dimension(67, 32));
-        label.setMaximumSize(new Dimension(67, 32));
-
-        // PENDING: when we straighten out user setting opacity, this should
-        // be changed.
-        lastLabel = new OpaqueLabel();
-        lastLabel.setName("GTKColorChooserPanel.lastColorWell");
-        lastLabel.setOpaque(true);
-        lastLabel.setMinimumSize(new Dimension(67, 32));
-        lastLabel.setPreferredSize(new Dimension(67, 32));
-        lastLabel.setMaximumSize(new Dimension(67, 32));
-
-        hueSpinner = new JSpinner(new SpinnerNumberModel(0, 0, 360, 1));
-        configureSpinner(hueSpinner, "GTKColorChooserPanel.hueSpinner");
-        saturationSpinner = new JSpinner(new SpinnerNumberModel(0, 0, 255, 1));
-        configureSpinner(saturationSpinner,
-                         "GTKColorChooserPanel.saturationSpinner");
-        valueSpinner = new JSpinner(new SpinnerNumberModel(0, 0, 255, 1));
-        configureSpinner(valueSpinner, "GTKColorChooserPanel.valueSpinner");
-        redSpinner = new JSpinner(new SpinnerNumberModel(0, 0, 255, 1));
-        configureSpinner(redSpinner, "GTKColorChooserPanel.redSpinner");
-        greenSpinner = new JSpinner(new SpinnerNumberModel(0, 0, 255, 1));
-        configureSpinner(greenSpinner, "GTKColorChooserPanel.greenSpinner");
-        blueSpinner = new JSpinner(new SpinnerNumberModel(0, 0, 255, 1));
-        configureSpinner(blueSpinner, "GTKColorChooserPanel.blueSpinner");
-
-        colorNameTF = new JTextField(8);
-
-        setLayout(new GridBagLayout());
-
-        add(this, "GTKColorChooserPanel.hue", hueSpinner, -1, -1);
-        add(this, "GTKColorChooserPanel.red", redSpinner, -1, -1);
-        add(this, "GTKColorChooserPanel.saturation", saturationSpinner, -1,-1);
-        add(this, "GTKColorChooserPanel.green", greenSpinner, -1, -1);
-        add(this, "GTKColorChooserPanel.value", valueSpinner, -1, -1);
-        add(this, "GTKColorChooserPanel.blue", blueSpinner, -1, -1);
-
-        add(new JSeparator(SwingConstants.HORIZONTAL), new
-                  GridBagConstraints(1, 3, 4, 1, 1, 0,
-                  GridBagConstraints.LINE_START, GridBagConstraints.HORIZONTAL,
-                  new Insets(14, 0, 0, 0), 0, 0));
-
-        add(this, "GTKColorChooserPanel.colorName", colorNameTF, 0, 4);
-
-        add(triangle, new GridBagConstraints(0, 0, 1, 5, 0, 0,
-                      GridBagConstraints.LINE_START, GridBagConstraints.NONE,
-                      new Insets(14, 20, 2, 9), 0, 0));
-
-        Box hBox = Box.createHorizontalBox();
-        hBox.add(lastLabel);
-        hBox.add(label);
-        add(hBox, new GridBagConstraints(0, 5, 1, 1, 0, 0,
-                      GridBagConstraints.CENTER, GridBagConstraints.NONE,
-                      new Insets(0, 0, 0, 0), 0, 0));
-
-        add(new JSeparator(SwingConstants.HORIZONTAL), new
-                  GridBagConstraints(0, 6, 5, 1, 1, 0,
-                  GridBagConstraints.LINE_START, GridBagConstraints.HORIZONTAL,
-                  new Insets(12, 0, 0, 0), 0, 0));
-    }
-
-    /**
-     * Configures the spinner.
-     */
-    private void configureSpinner(JSpinner spinner, String name) {
-        spinner.addChangeListener(this);
-        spinner.setName(name);
-        JComponent editor = spinner.getEditor();
-        if (editor instanceof JSpinner.DefaultEditor) {
-            JFormattedTextField ftf = ((JSpinner.DefaultEditor)editor).
-                                                 getTextField();
-
-            ftf.setFocusLostBehavior(JFormattedTextField.COMMIT_OR_REVERT);
-        }
-    }
-
-    /**
-     * Adds the widget creating a JLabel with the specified name.
-     */
-    private void add(Container parent, String key, JComponent widget,
-                     int x, int y) {
-        JLabel label = new JLabel(UIManager.getString(key + "Text",
-                                                      getLocale()));
-        String mnemonic = (String)UIManager.get(key + "Mnemonic", getLocale());
-
-        if (mnemonic != null) {
-            try {
-                label.setDisplayedMnemonic(Integer.parseInt(mnemonic));
-            } catch (NumberFormatException nfe) {
-            }
-            String mnemonicIndex = (String)UIManager.get(key + "MnemonicIndex",
-                                                    getLocale());
-
-            if (mnemonicIndex != null) {
-                try {
-                    label.setDisplayedMnemonicIndex(Integer.parseInt(
-                                                        mnemonicIndex));
-                } catch (NumberFormatException nfe) {
-                }
-            }
-        }
-        label.setLabelFor(widget);
-        if (x < 0) {
-            x = parent.getComponentCount() % 4;
-        }
-        if (y < 0) {
-            y = parent.getComponentCount() / 4;
-        }
-        GridBagConstraints con = new GridBagConstraints(x + 1, y, 1, 1, 0, 0,
-                   GridBagConstraints.FIRST_LINE_END, GridBagConstraints.NONE,
-                   new Insets(4, 0, 0, 4), 0, 0);
-        if (y == 0) {
-            con.insets.top = 14;
-        }
-        parent.add(label, con);
-        con.gridx++;
-        parent.add(widget, con);
-    }
-
-    /**
-     * Refreshes the display from the model.
-     */
-    public void updateChooser() {
-        if (!settingColor) {
-            lastLabel.setBackground(getColorFromModel());
-            setColor(getColorFromModel(), true, true, false);
-        }
-    }
-
-    /**
-     * Resets the red component of the selected color.
-     */
-    private void setRed(int red) {
-        setRGB(red << 16 | getColor().getGreen() << 8 | getColor().getBlue());
-    }
-
-    /**
-     * Resets the green component of the selected color.
-     */
-    private void setGreen(int green) {
-        setRGB(getColor().getRed() << 16 | green << 8 | getColor().getBlue());
-    }
-
-    /**
-     * Resets the blue component of the selected color.
-     */
-    private void setBlue(int blue) {
-        setRGB(getColor().getRed() << 16 | getColor().getGreen() << 8 | blue);
-    }
-
-    /**
-     * Sets the hue of the selected color and updates the display if
-     * necessary.
-     */
-    private void setHue(float hue, boolean update) {
-        setHSB(hue, saturation, brightness);
-        if (update) {
-            settingColor = true;
-            hueSpinner.setValue(Integer.valueOf((int)(hue * 360)));
-            settingColor = false;
-        }
-    }
-
-    /**
-     * Returns the current amount of hue.
-     */
-    private float getHue() {
-        return hue;
-    }
-
-    /**
-     * Resets the saturation.
-     */
-    private void setSaturation(float saturation) {
-        setHSB(hue, saturation, brightness);
-    }
-
-    /**
-     * Returns the saturation.
-     */
-    private float getSaturation() {
-        return saturation;
-    }
-
-    /**
-     * Sets the brightness.
-     */
-    private void setBrightness(float brightness) {
-        setHSB(hue, saturation, brightness);
-    }
-
-    /**
-     * Returns the brightness.
-     */
-    private float getBrightness() {
-        return brightness;
-    }
-
-    /**
-     * Sets the saturation and brightness and updates the display if
-     * necessary.
-     */
-    private void setSaturationAndBrightness(float s, float b, boolean update) {
-        setHSB(hue, s, b);
-        if (update) {
-            settingColor = true;
-            saturationSpinner.setValue(Integer.valueOf((int)(s * 255)));
-            valueSpinner.setValue(Integer.valueOf((int)(b * 255)));
-            settingColor = false;
-        }
-    }
-
-    /**
-     * Resets the rgb values.
-     */
-    private void setRGB(int rgb) {
-        Color color = new Color(rgb);
-
-        setColor(color, false, true, true);
-
-        settingColor = true;
-        hueSpinner.setValue(Integer.valueOf((int)(hue * 360)));
-        saturationSpinner.setValue(Integer.valueOf((int)(saturation * 255)));
-        valueSpinner.setValue(Integer.valueOf((int)(brightness * 255)));
-        settingColor = false;
-    }
-
-    /**
-     * Resets the hsb values.
-     */
-    private void setHSB(float h, float s, float b) {
-        Color color = Color.getHSBColor(h, s, b);
-
-        this.hue = h;
-        this.saturation = s;
-        this.brightness = b;
-        setColor(color, false, false, true);
-
-        settingColor = true;
-        redSpinner.setValue(Integer.valueOf(color.getRed()));
-        greenSpinner.setValue(Integer.valueOf(color.getGreen()));
-        blueSpinner.setValue(Integer.valueOf(color.getBlue()));
-        settingColor = false;
-    }
-
-
-    /**
-     * Rests the color.
-     *
-     * @param color new Color
-     * @param updateSpinners whether or not to update the spinners.
-     * @param updateHSB if true, the hsb fields are updated based on the
-     *                  new color
-     * @param updateModel if true, the model is set.
-     */
-    private void setColor(Color color, boolean updateSpinners,
-                          boolean updateHSB, boolean updateModel) {
-        if (color == null) {
-            color = Color.BLACK;
-        }
-
-        settingColor = true;
-
-        if (updateHSB) {
-            float[] hsb = Color.RGBtoHSB(color.getRed(), color.getGreen(),
-                                         color.getBlue(), null);
-            hue = hsb[0];
-            saturation = hsb[1];
-            brightness = hsb[2];
-        }
-
-        if (updateModel) {
-            ColorSelectionModel model = getColorSelectionModel();
-            if (model != null) {
-                model.setSelectedColor(color);
-            }
-        }
-
-        triangle.setColor(hue, saturation, brightness);
-        label.setBackground(color);
-        // Force Integer to pad the string with 0's by adding 0x1000000 and
-        // then removing the first character.
-        String hexString = Integer.toHexString(
-                  (color.getRGB() & 0xFFFFFF) | 0x1000000);
-        colorNameTF.setText("#" + hexString.substring(1));
-
-        if (updateSpinners) {
-            redSpinner.setValue(Integer.valueOf(color.getRed()));
-            greenSpinner.setValue(Integer.valueOf(color.getGreen()));
-            blueSpinner.setValue(Integer.valueOf(color.getBlue()));
-
-            hueSpinner.setValue(Integer.valueOf((int)(hue * 360)));
-            saturationSpinner.setValue(Integer.valueOf((int)(saturation * 255)));
-            valueSpinner.setValue(Integer.valueOf((int)(brightness * 255)));
-        }
-        settingColor = false;
-    }
-
-    public Color getColor() {
-        return label.getBackground();
-    }
-
-    /**
-     * ChangeListener method, updates the necessary display widgets.
-     */
-    public void stateChanged(ChangeEvent e) {
-        if (settingColor) {
-            return;
-        }
-        Color color = getColor();
-
-        if (e.getSource() == hueSpinner) {
-            setHue(((Number)hueSpinner.getValue()).floatValue() / 360, false);
-        }
-        else if (e.getSource() == saturationSpinner) {
-            setSaturation(((Number)saturationSpinner.getValue()).
-                          floatValue() / 255);
-        }
-        else if (e.getSource() == valueSpinner) {
-            setBrightness(((Number)valueSpinner.getValue()).
-                          floatValue() / 255);
-        }
-        else if (e.getSource() == redSpinner) {
-            setRed(((Number)redSpinner.getValue()).intValue());
-        }
-        else if (e.getSource() == greenSpinner) {
-            setGreen(((Number)greenSpinner.getValue()).intValue());
-        }
-        else if (e.getSource() == blueSpinner) {
-            setBlue(((Number)blueSpinner.getValue()).intValue());
-        }
-    }
-
-
-
-    /**
-     * Flag indicating the angle, or hue, has changed and the triangle
-     * needs to be recreated.
-     */
-    private static final int FLAGS_CHANGED_ANGLE = 1 << 0;
-    /**
-     * Indicates the wheel is being dragged.
-     */
-    private static final int FLAGS_DRAGGING = 1 << 1;
-    /**
-     * Indicates the triangle is being dragged.
-     */
-    private static final int FLAGS_DRAGGING_TRIANGLE = 1 << 2;
-    /**
-     * Indicates a color is being set and we should ignore setColor
-     */
-    private static final int FLAGS_SETTING_COLOR = 1 << 3;
-    /**
-     * Indicates the wheel has focus.
-     */
-    private static final int FLAGS_FOCUSED_WHEEL = 1 << 4;
-    /**
-     * Indicates the triangle has focus.
-     */
-    private static final int FLAGS_FOCUSED_TRIANGLE = 1 << 5;
-
-
-    /**
-     * Class responsible for rendering a color wheel and color triangle.
-     */
-    private class ColorTriangle extends JPanel {
-        /**
-         * Cached image of the wheel.
-         */
-        private Image wheelImage;
-
-        /**
-         * Cached image of the triangle.
-         */
-        private Image triangleImage;
-
-        /**
-         * Angle triangle is rotated by.
-         */
-        private double angle;
-
-        /**
-         * Boolean bitmask.
-         */
-        private int flags;
-
-        /**
-         * X location of selected color indicator.
-         */
-        private int circleX;
-        /**
-         * Y location of selected color indicator.
-         */
-        private int circleY;
-
-
-        public ColorTriangle() {
-            enableEvents(AWTEvent.FOCUS_EVENT_MASK);
-            enableEvents(AWTEvent.MOUSE_EVENT_MASK);
-            enableEvents(AWTEvent.MOUSE_MOTION_EVENT_MASK);
-
-            setMinimumSize(new Dimension(getWheelRadius() * 2 + 2,
-                                         getWheelRadius() * 2 + 2));
-            setPreferredSize(new Dimension(getWheelRadius() * 2 + 2,
-                                           getWheelRadius() * 2 + 2));
-
-            // We want to handle tab ourself.
-            setFocusTraversalKeysEnabled(false);
-
-            // PENDING: this should come from the style.
-            getInputMap().put(KeyStroke.getKeyStroke("UP"), "up");
-            getInputMap().put(KeyStroke.getKeyStroke("DOWN"), "down");
-            getInputMap().put(KeyStroke.getKeyStroke("LEFT"), "left");
-            getInputMap().put(KeyStroke.getKeyStroke("RIGHT"), "right");
-
-            getInputMap().put(KeyStroke.getKeyStroke("KP_UP"), "up");
-            getInputMap().put(KeyStroke.getKeyStroke("KP_DOWN"), "down");
-            getInputMap().put(KeyStroke.getKeyStroke("KP_LEFT"), "left");
-            getInputMap().put(KeyStroke.getKeyStroke("KP_RIGHT"), "right");
-
-            getInputMap().put(KeyStroke.getKeyStroke("TAB"), "focusNext");
-            getInputMap().put(KeyStroke.getKeyStroke("shift TAB"),"focusLast");
-
-            ActionMap map = (ActionMap)UIManager.get(
-                                       "GTKColorChooserPanel.actionMap");
-
-            if (map == null) {
-                map = new ActionMapUIResource();
-                map.put("left", new ColorAction("left", 2));
-                map.put("right", new ColorAction("right", 3));
-                map.put("up", new ColorAction("up", 0));
-                map.put("down", new ColorAction("down", 1));
-                map.put("focusNext", new ColorAction("focusNext", 4));
-                map.put("focusLast", new ColorAction("focusLast", 5));
-                UIManager.getLookAndFeelDefaults().put(
-                             "GTKColorChooserPanel.actionMap", map);
-            }
-            SwingUtilities.replaceUIActionMap(this, map);
-        }
-
-        /**
-         * Returns the GTKColorChooserPanel.
-         */
-        GTKColorChooserPanel getGTKColorChooserPanel() {
-            return GTKColorChooserPanel.this;
-        }
-
-        /**
-         * Gives focus to the wheel.
-         */
-        void focusWheel() {
-            setFocusType(1);
-        }
-
-        /**
-         * Gives focus to the triangle.
-         */
-        void focusTriangle() {
-            setFocusType(2);
-        }
-
-        /**
-         * Returns true if the wheel currently has focus.
-         */
-        boolean isWheelFocused() {
-            return isSet(FLAGS_FOCUSED_WHEEL);
-        }
-
-        /**
-         * Resets the selected color.
-         */
-        public void setColor(float h, float s, float b) {
-            if (isSet(FLAGS_SETTING_COLOR)) {
-                return;
-            }
-
-            setAngleFromHue(h);
-            setSaturationAndBrightness(s, b);
-        }
-
-        /**
-         * Returns the selected color.
-         */
-        public Color getColor() {
-            return GTKColorChooserPanel.this.getColor();
-        }
-
-        /**
-         * Returns the x location of the selected color indicator.
-         */
-        int getColorX() {
-            return circleX + getIndicatorSize() / 2 - getWheelXOrigin();
-        }
-
-        /**
-         * Returns the y location of the selected color indicator.
-         */
-        int getColorY() {
-            return circleY + getIndicatorSize() / 2 - getWheelYOrigin();
-        }
-
-        protected void processEvent(AWTEvent e) {
-            if (e.getID() == MouseEvent.MOUSE_PRESSED ||
-                   ((isSet(FLAGS_DRAGGING) ||isSet(FLAGS_DRAGGING_TRIANGLE)) &&
-                   e.getID() == MouseEvent.MOUSE_DRAGGED)) {
-                // Assign focus to either the wheel or triangle and attempt
-                // to drag either the wheel or triangle.
-                int size = getWheelRadius();
-                int x = ((MouseEvent)e).getX() - size;
-                int y = ((MouseEvent)e).getY() - size;
-
-                if (!hasFocus()) {
-                    requestFocus();
-                }
-                if (!isSet(FLAGS_DRAGGING_TRIANGLE) &&
-                      adjustHue(x, y, e.getID() == MouseEvent.MOUSE_PRESSED)) {
-                    setFlag(FLAGS_DRAGGING, true);
-                    setFocusType(1);
-                }
-                else if (adjustSB(x, y, e.getID() ==
-                                        MouseEvent.MOUSE_PRESSED)) {
-                    setFlag(FLAGS_DRAGGING_TRIANGLE, true);
-                    setFocusType(2);
-                }
-                else {
-                    setFocusType(2);
-                }
-            }
-            else if (e.getID() == MouseEvent.MOUSE_RELEASED) {
-                // Stopped dragging
-                setFlag(FLAGS_DRAGGING_TRIANGLE, false);
-                setFlag(FLAGS_DRAGGING, false);
-            }
-            else if (e.getID() == FocusEvent.FOCUS_LOST) {
-                // Reset the flags to indicate no one has focus
-                setFocusType(0);
-            }
-            else if (e.getID() == FocusEvent.FOCUS_GAINED) {
-                // Gained focus, reassign focus to the wheel if no one
-                // currently has focus.
-                if (!isSet(FLAGS_FOCUSED_TRIANGLE) &&
-                          !isSet(FLAGS_FOCUSED_WHEEL)) {
-                    setFlag(FLAGS_FOCUSED_WHEEL, true);
-                    setFocusType(1);
-                }
-                repaint();
-            }
-            super.processEvent(e);
-        }
-
-        public void paintComponent(Graphics g) {
-            super.paintComponent(g);
-
-            // Draw the wheel and triangle
-            int size = getWheelRadius();
-            int width = getWheelWidth();
-            Image image = getImage(size);
-            g.drawImage(image, getWheelXOrigin() - size,
-                        getWheelYOrigin() - size, null);
-
-            // Draw the focus indicator for the wheel
-            if (hasFocus() && isSet(FLAGS_FOCUSED_WHEEL)) {
-                g.setColor(Color.BLACK);
-                g.drawOval(getWheelXOrigin() - size, getWheelYOrigin() - size,
-                           2 * size, 2 * size);
-                g.drawOval(getWheelXOrigin() - size + width, getWheelYOrigin()-
-                           size + width, 2 * (size - width), 2 *
-                           (size - width));
-            }
-
-            // Draw a line on the wheel indicating the selected hue.
-            if (Math.toDegrees(Math.PI * 2 - angle) <= 20 ||
-                     Math.toDegrees(Math.PI * 2 - angle) >= 201) {
-                g.setColor(Color.WHITE);
-            }
-            else {
-                g.setColor(Color.BLACK);
-            }
-            int lineX0 = (int)(Math.cos(angle) * size);
-            int lineY0 = (int)(Math.sin(angle) * size);
-            int lineX1 = (int)(Math.cos(angle) * (size - width));
-            int lineY1 = (int)(Math.sin(angle) * (size - width));
-            g.drawLine(lineX0 + size, lineY0 + size, lineX1 + size,
-                       lineY1 + size);
-
-            // Draw the focus indicator on the triangle
-            if (hasFocus() && isSet(FLAGS_FOCUSED_TRIANGLE)) {
-                Graphics g2 = g.create();
-                int innerR = getTriangleCircumscribedRadius();
-                int a = (int)(3 * innerR / Math.sqrt(3));
-                g2.translate(getWheelXOrigin(), getWheelYOrigin());
-                ((Graphics2D)g2).rotate(angle + Math.PI / 2);
-                g2.setColor(Color.BLACK);
-                g2.drawLine(0, -innerR, a / 2, innerR / 2);
-                g2.drawLine(a / 2, innerR / 2, -a / 2, innerR / 2);
-                g2.drawLine(-a / 2, innerR / 2, 0, -innerR);
-                g2.dispose();
-            }
-
-            // Draw the selected color indicator.
-            g.setColor(Color.BLACK);
-            g.drawOval(circleX, circleY, getIndicatorSize() - 1,
-                       getIndicatorSize() - 1);
-            g.setColor(Color.WHITE);
-            g.drawOval(circleX + 1, circleY + 1, getIndicatorSize() - 3,
-                       getIndicatorSize() - 3);
-        }
-
-        /**
-         * Returns an image representing the triangle and wheel.
-         */
-        private Image getImage(int size) {
-            if (!isSet(FLAGS_CHANGED_ANGLE) && wheelImage != null &&
-                        wheelImage.getWidth(null) == size * 2) {
-                return wheelImage;
-            }
-            if (wheelImage == null || wheelImage.getWidth(null) != size) {
-                wheelImage = getWheelImage(size);
-            }
-            int innerR = getTriangleCircumscribedRadius();
-            int triangleSize = (int)(innerR * 3.0 / 2.0);
-            int a = (int)(2 * triangleSize / Math.sqrt(3));
-            if (triangleImage == null || triangleImage.getWidth(null) != a) {
-                triangleImage = new BufferedImage(a, a,
-                                                  BufferedImage.TYPE_INT_ARGB);
-            }
-            Graphics g = triangleImage.getGraphics();
-            g.setColor(new Color(0, 0, 0, 0));
-            g.fillRect(0, 0, a, a);
-            g.translate(a / 2, 0);
-            paintTriangle(g, triangleSize, getColor());
-            g.translate(-a / 2, 0);
-            g.dispose();
-
-            g = wheelImage.getGraphics();
-            g.setColor(new Color(0, 0, 0, 0));
-            g.fillOval(getWheelWidth(), getWheelWidth(),
-                       2 * (size - getWheelWidth()),
-                       2 * (size - getWheelWidth()));
-
-            double rotate = Math.toRadians(-30.0) + angle;
-            g.translate(size, size);
-            ((Graphics2D)g).rotate(rotate);
-            g.drawImage(triangleImage, -a / 2,
-                        getWheelWidth() - size, null);
-            ((Graphics2D)g).rotate(-rotate);
-            g.translate(a / 2, size - getWheelWidth());
-
-            setFlag(FLAGS_CHANGED_ANGLE, false);
-
-            return wheelImage;
-        }
-
-        private void paintTriangle(Graphics g, int size, Color color) {
-            float[] colors = Color.RGBtoHSB(color.getRed(),
-                                            color.getGreen(),
-                                            color.getBlue(), null);
-            float hue = colors[0];
-            double dSize = (double)size;
-            for (int y = 0; y < size; y++) {
-                int maxX = (int)(y * Math.tan(Math.toRadians(30.0)));
-                float factor = maxX * 2;
-                if (maxX > 0) {
-                    float value = (float)(y / dSize);
-                    for (int x = -maxX; x <= maxX; x++) {
-                        float saturation = (float)x / factor + .5f;
-                        g.setColor(Color.getHSBColor(hue, saturation, value));
-                        g.fillRect(x, y, 1, 1);
-                    }
-                }
-                else {
-                    g.setColor(color);
-                    g.fillRect(0, y, 1, 1);
-                }
-            }
-        }
-
-        /**
-         * Returns a color wheel image for the specified size.
-         *
-         * @param size Integer giving size of color wheel.
-         * @return Color wheel image
-         */
-        private Image getWheelImage(int size) {
-            int minSize = size - getWheelWidth();
-            int doubleSize = size * 2;
-            BufferedImage image = new BufferedImage(doubleSize, doubleSize,
-                                              BufferedImage.TYPE_INT_ARGB);
-
-            for (int y = -size; y < size; y++) {
-                int ySquared = y * y;
-                for (int x = -size; x < size; x++) {
-                    double rad = Math.sqrt(ySquared + x * x);
-
-                    if (rad < size && rad > minSize) {
-                        int rgb = colorWheelLocationToRGB(x, y, rad) |
-                              0xFF000000;
-                        image.setRGB(x + size, y + size, rgb);
-                    }
-                }
-            }
-            wheelImage = image;
-            return wheelImage;
-        }
-
-        /**
-         * Adjusts the saturation and brightness. <code>x</code> and
-         * <code>y</code> give the location to adjust to and are relative
-         * to the origin of the wheel/triangle.
-         *
-         * @param x X coordinate on the triangle to adjust to
-         * @param y Y coordinate on the triangle to adjust to
-         * @param checkLoc if true the location is checked to make sure
-         *        it is contained in the triangle, if false the location is
-         *        constrained to fit in the triangle.
-         * @return true if the location is valid
-         */
-        boolean adjustSB(int x, int y, boolean checkLoc) {
-            int innerR = getWheelRadius() - getWheelWidth();
-            boolean resetXY = false;
-            // Invert the axis.
-            y = -y;
-            if (checkLoc && (x < -innerR || x > innerR || y < -innerR ||
-                             y > innerR)) {
-                return false;
-            }
-            // Rotate to origin and and verify x is valid.
-            int triangleSize = innerR * 3 / 2;
-            double x1 = Math.cos(angle) * x - Math.sin(angle) * y;
-            double y1 = Math.sin(angle) * x + Math.cos(angle) * y;
-            if (x1 < -(innerR / 2)) {
-                if (checkLoc) {
-                    return false;
-                }
-                x1 = -innerR / 2;
-                resetXY = true;
-            }
-            else if ((int)x1 > innerR) {
-                if (checkLoc) {
-                    return false;
-                }
-                x1 = innerR;
-                resetXY = true;
-            }
-            // Verify y location is valid.
-            int maxY = (int)((triangleSize - x1 - innerR / 2.0) *
-                             Math.tan(Math.toRadians(30.0)));
-            if (y1 <= -maxY) {
-                if (checkLoc) {
-                    return false;
-                }
-                y1 = -maxY;
-                resetXY = true;
-            }
-            else if (y1 > maxY) {
-                if (checkLoc) {
-                    return false;
-                }
-                y1 = maxY;
-                resetXY = true;
-            }
-            // Rotate again to determine value and scale
-            double x2 = Math.cos(Math.toRadians(-30.0)) * x1 -
-                 Math.sin(Math.toRadians(-30.0)) * y1;
-            double y2 = Math.sin(Math.toRadians(-30.0)) * x1 +
-                 Math.cos(Math.toRadians(-30.0)) * y1;
-            float value = Math.min(1.0f, (float)((innerR - y2) /
-                                                (double)triangleSize));
-            float maxX = (float)(Math.tan(Math.toRadians(30)) * (innerR - y2));
-            float saturation = Math.min(1.0f, (float)(x2 / maxX / 2 + .5));
-
-            setFlag(FLAGS_SETTING_COLOR, true);
-            if (resetXY) {
-                setSaturationAndBrightness(saturation, value);
-            }
-            else {
-                setSaturationAndBrightness(saturation, value, x +
-                                      getWheelXOrigin(),getWheelYOrigin() - y);
-            }
-            GTKColorChooserPanel.this.setSaturationAndBrightness(saturation,
-                                                                 value, true);
-            setFlag(FLAGS_SETTING_COLOR, false);
-            return true;
-        }
-
-        /**
-         * Sets the saturation and brightness.
-         */
-        private void setSaturationAndBrightness(float s, float b) {
-            int innerR = getTriangleCircumscribedRadius();
-            int triangleSize = innerR * 3 / 2;
-            double x = b * triangleSize;
-            double maxY = x * Math.tan(Math.toRadians(30.0));
-            double y = 2 * maxY * s - maxY;
-            x = x - innerR;
-            double x1 = Math.cos(Math.toRadians(-60.0) - angle) *
-                        x - Math.sin(Math.toRadians(-60.0) - angle) * y;
-            double y1 = Math.sin(Math.toRadians(-60.0) - angle) * x +
-                        Math.cos(Math.toRadians(-60.0) - angle) * y;
-            int newCircleX = (int)x1 + getWheelXOrigin();
-            int newCircleY = getWheelYOrigin() - (int)y1;
-
-            setSaturationAndBrightness(s, b, newCircleX, newCircleY);
-        }
-
-
-        /**
-         * Sets the saturation and brightness.
-         */
-        private void setSaturationAndBrightness(float s, float b,
-                                             int newCircleX, int newCircleY) {
-            newCircleX -= getIndicatorSize() / 2;
-            newCircleY -= getIndicatorSize() / 2;
-
-            int minX = Math.min(newCircleX, circleX);
-            int minY = Math.min(newCircleY, circleY);
-
-            repaint(minX, minY, Math.max(circleX, newCircleX) - minX +
-                    getIndicatorSize() + 1, Math.max(circleY, newCircleY) -
-                    minY + getIndicatorSize() + 1);
-            circleX = newCircleX;
-            circleY = newCircleY;
-        }
-
-        /**
-         * Adjusts the hue based on the passed in location.
-         *
-         * @param x X location to adjust to, relative to the origin of the
-         *        wheel
-         * @param y Y location to adjust to, relative to the origin of the
-         *        wheel
-         * @param check if true the location is checked to make sure
-         *        it is contained in the wheel, if false the location is
-         *        constrained to fit in the wheel
-         * @return true if the location is valid.
-         */
-        private boolean adjustHue(int x, int y, boolean check) {
-            double rad = Math.sqrt(x * x + y * y);
-            int size = getWheelRadius();
-
-            if (!check || (rad >= size - getWheelWidth() && rad < size)) {
-                // Map the location to an angle and reset hue
-                double angle;
-                if (x == 0) {
-                    if (y > 0) {
-                        angle = Math.PI / 2.0;
-                    }
-                    else {
-                        angle = Math.PI + Math.PI / 2.0;
-                    }
-                }
-                else {
-                    angle = Math.atan((double)y / (double)x);
-                    if (x < 0) {
-                        angle += Math.PI;
-                    }
-                    else if (angle < 0) {
-                        angle += 2 * Math.PI;
-                    }
-                }
-                setFlag(FLAGS_SETTING_COLOR, true);
-                setHue((float)(1.0 - angle / Math.PI / 2), true);
-                setFlag(FLAGS_SETTING_COLOR, false);
-                setHueAngle(angle);
-                setSaturationAndBrightness(getSaturation(), getBrightness());
-                return true;
-            }
-            return false;
-        }
-
-        /**
-         * Rotates the triangle to accomodate the passed in hue.
-         */
-        private void setAngleFromHue(float hue) {
-            setHueAngle((1.0 - hue) * Math.PI * 2);
-        }
-
-        /**
-         * Sets the angle representing the hue.
-         */
-        private void setHueAngle(double angle) {
-            double oldAngle = this.angle;
-
-            this.angle = angle;
-            if (angle != oldAngle) {
-                setFlag(FLAGS_CHANGED_ANGLE, true);
-                repaint();
-            }
-        }
-
-        /**
-         * Returns the size of the color indicator.
-         */
-        private int getIndicatorSize() {
-            return 8;
-        }
-
-        /**
-         * Returns the circumscribed radius of the triangle.
-         */
-        private int getTriangleCircumscribedRadius() {
-            return 72;
-        }
-
-        /**
-         * Returns the x origin of the wheel and triangle.
-         */
-        private int getWheelXOrigin() {
-            return 85;
-        }
-
-        /**
-         * Returns y origin of the wheel and triangle.
-         */
-        private int getWheelYOrigin() {
-            return 85;
-        }
-
-        /**
-         * Returns the width of the wheel.
-         */
-        private int getWheelWidth() {
-            return 13;
-        }
-
-        /**
-         * Sets the focus to one of: 0 no one, 1 the wheel or 2 the triangle.
-         */
-        private void setFocusType(int type) {
-            if (type == 0) {
-                setFlag(FLAGS_FOCUSED_WHEEL, false);
-                setFlag(FLAGS_FOCUSED_TRIANGLE, false);
-                repaint();
-            }
-            else {
-                int toSet = FLAGS_FOCUSED_WHEEL;
-                int toUnset = FLAGS_FOCUSED_TRIANGLE;
-
-                if (type == 2) {
-                    toSet = FLAGS_FOCUSED_TRIANGLE;
-                    toUnset = FLAGS_FOCUSED_WHEEL;
-                }
-                if (!isSet(toSet)) {
-                    setFlag(toSet, true);
-                    repaint();
-                    setFlag(toUnset, false);
-                }
-            }
-        }
-
-        /**
-         * Returns the radius of the wheel.
-         */
-        private int getWheelRadius() {
-            // As far as I can tell, GTK doesn't allow stretching this
-            // widget
-            return 85;
-        }
-
-        /**
-         * Updates the flags bitmask.
-         */
-        private void setFlag(int flag, boolean value) {
-            if (value) {
-                flags |= flag;
-            }
-            else {
-                flags &= ~flag;
-            }
-        }
-
-        /**
-         * Returns true if a particular flag has been set.
-         */
-        private boolean isSet(int flag) {
-            return ((flags & flag) == flag);
-        }
-
-        /**
-         * Returns the RGB color to use for the specified location. The
-         * passed in point must be on the color wheel and be relative to the
-         * origin of the color wheel.
-         *
-         * @param x X location to get color for
-         * @param y Y location to get color for
-         * @param rad Radius from center of color wheel
-         * @return integer with red, green and blue components
-         */
-        private int colorWheelLocationToRGB(int x, int y, double rad) {
-            double angle = Math.acos((double)x / rad);
-            int rgb;
-
-            if (angle < PI_3) {
-                if (y < 0) {
-                    // FFFF00 - FF0000
-                    rgb = 0xFF0000 | Math.min(255,
-                                           (int)(255 * angle / PI_3)) << 8;
-                }
-                else {
-                    // FF0000 - FF00FF
-                    rgb = 0xFF0000 | Math.min(255,
-                                           (int)(255 * angle / PI_3));
-                }
-            }
-            else if (angle < 2 * PI_3) {
-                angle -= PI_3;
-                if (y < 0) {
-                    // 00FF00 - FFFF00
-                    rgb = 0x00FF00 | Math.max(0, 255 -
-                                           (int)(255 * angle / PI_3)) << 16;
-                }
-                else {
-                    // FF00FF - 0000FF
-                    rgb = 0x0000FF | Math.max(0, 255 -
-                                           (int)(255 * angle / PI_3)) << 16;
-                }
-            }
-            else {
-                angle -= 2 * PI_3;
-                if (y < 0) {
-                    // 00FFFF - 00FF00
-                    rgb = 0x00FF00 | Math.min(255,
-                                           (int)(255 * angle / PI_3));
-                }
-                else {
-                    // 0000FF - 00FFFF
-                    rgb = 0x0000FF | Math.min(255,
-                                           (int)(255 * angle / PI_3)) << 8;
-                }
-            }
-            return rgb;
-        }
-
-        /**
-         * Increments the hue.
-         */
-        void incrementHue(boolean positive) {
-            float hue = triangle.getGTKColorChooserPanel().getHue();
-
-            if (positive) {
-                hue += 1.0f / 360.0f;
-            }
-            else {
-                hue -= 1.0f / 360.0f;
-            }
-            if (hue > 1) {
-                hue -= 1;
-            }
-            else if (hue < 0) {
-                hue += 1;
-            }
-            getGTKColorChooserPanel().setHue(hue, true);
-        }
-    }
-
-
-    /**
-     * Action class used for colors.
-     */
-    private static class ColorAction extends AbstractAction {
-        private int type;
-
-        ColorAction(String name, int type) {
-            super(name);
-            this.type = type;
-        }
-
-        public void actionPerformed(ActionEvent e) {
-            ColorTriangle triangle = (ColorTriangle)e.getSource();
-
-            if (triangle.isWheelFocused()) {
-                float hue = triangle.getGTKColorChooserPanel().getHue();
-
-                switch (type) {
-                case 0:
-                case 2:
-                    triangle.incrementHue(true);
-                    break;
-                case 1:
-                case 3:
-                    triangle.incrementHue(false);
-                    break;
-                case 4:
-                    triangle.focusTriangle();
-                    break;
-                case 5:
-                    compositeRequestFocus(triangle, false);
-                    break;
-                }
-            }
-            else {
-                int xDelta = 0;
-                int yDelta = 0;
-
-                switch (type) {
-                case 0:
-                    // up
-                    yDelta--;
-                    break;
-                case 1:
-                    // down
-                    yDelta++;
-                    break;
-                case 2:
-                    // left
-                    xDelta--;
-                    break;
-                case 3:
-                    // right
-                    xDelta++;
-                    break;
-                case 4:
-                    compositeRequestFocus(triangle, true);
-                    return;
-                case 5:
-                    triangle.focusWheel();
-                    return;
-                }
-                triangle.adjustSB(triangle.getColorX() + xDelta,
-                                  triangle.getColorY() + yDelta, true);
-            }
-        }
-    }
-
-
-    private class OpaqueLabel extends JLabel {
-        public boolean isOpaque() {
-            return true;
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/GTKColorType.java b/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/GTKColorType.java
deleted file mode 100755
index 1d619c1..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/GTKColorType.java
+++ /dev/null
@@ -1,167 +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.
- */
-package com.sun.java.swing.plaf.gtk;
-
-import javax.swing.plaf.synth.ColorType;
-import java.awt.Color;
-import javax.swing.plaf.ColorUIResource;
-
-/**
- * @author Scott Violet
- */
-public class GTKColorType extends ColorType {
-    // GTK allows you to specify the foreground and background in a
-    // gtkrc, the rest (dark, mid, light) are calculated from these
-    // values.
-    public static final ColorType LIGHT = new GTKColorType("Light");
-    public static final ColorType DARK = new GTKColorType("Dark");
-    public static final ColorType MID = new GTKColorType("Mid");
-    public static final ColorType BLACK = new GTKColorType("Black");
-    public static final ColorType WHITE = new GTKColorType("White");
-
-    public static final int MAX_COUNT;
-
-    private static final float[] HLS_COLORS = new float[3];
-    private static final Object HLS_COLOR_LOCK = new Object();
-
-    static {
-        MAX_COUNT = WHITE.getID() + 1;
-    }
-
-    private static int hlsToRGB(float h, float l, float s) {
-        float m2 = (l <= .5f) ? (l * (1 + s)) : (l + s - l * s);
-        float m1 = 2.0f * l - m2;
-        float r, g, b;
-
-        if (s == 0.0) {
-            if (h == 0.0) {
-                r = g = b = l;
-            }
-            else {
-                r = g = b = 0;
-            }
-        }
-        else {
-            r = hlsValue(m1, m2, h + 120);
-            g = hlsValue(m1, m2, h);
-            b = hlsValue(m1, m2, h - 120);
-        }
-        return (((int)(r * 255)) << 16) | (((int)(g * 255.0)) << 8) |
-               ((int)(b * 255));
-    }
-
-    private static float hlsValue(float n1, float n2, float h) {
-        if (h > 360) {
-            h -= 360;
-        }
-        else if (h < 0) {
-            h += 360;
-        }
-        if (h < 60) {
-            return n1 + (n2 - n1) * h / 60.0f;
-        }
-        else if (h < 180) {
-            return n2;
-        }
-        else if (h < 240) {
-            return n1 + (n2 - n1) * (240.0f - h) / 60.0f;
-        }
-        return n1;
-    }
-
-    /**
-     * Converts from RGB color space to HLS colorspace.
-     */
-    private static float[] rgbToHLS(int rgb, float[] hls) {
-        float r = ((rgb & 0xFF0000) >> 16) / 255.0f;
-        float g = ((rgb & 0xFF00) >> 8) / 255.0f;
-        float b = (rgb & 0xFF) / 255.0f;
-
-        /* calculate lightness */
-        float max = Math.max(Math.max(r, g), b);
-        float min = Math.min(Math.min(r, g), b);
-        float l = (max + min) / 2.0f;
-        float s = 0;
-        float h = 0;
-
-        if (max != min) {
-            float delta = max - min;
-            s = (l <= .5f) ? (delta / (max + min)) : (delta / (2.0f - max -min));
-            if (r == max) {
-                h = (g - b) / delta;
-            }
-            else if (g == max) {
-                h = 2.0f + (b - r) / delta;
-            }
-            else {
-                h = 4.0f + (r - g) / delta;
-            }
-            h *= 60.0f;
-            if (h < 0) {
-                h += 360.0f;
-            }
-        }
-        if (hls == null) {
-            hls = new float[3];
-        }
-        hls[0] = h;
-        hls[1] = l;
-        hls[2] = s;
-        return hls;
-    }
-
-    /**
-     * Creates and returns a new color derived from the passed in color.
-     * The transformation is done in the HLS color space using the specified
-     * arguments to scale.
-     *
-     * @param color Color to alter
-     * @param hFactory Amount to scale the hue
-     * @param lFactor Amount to scale the lightness
-     * @param sFactory Amount to sacle saturation
-     * @return newly created color
-     */
-    static Color adjustColor(Color color, float hFactor, float lFactor,
-                             float sFactor) {
-        float h;
-        float l;
-        float s;
-
-        synchronized(HLS_COLOR_LOCK) {
-            float[] hls = rgbToHLS(color.getRGB(), HLS_COLORS);
-            h = hls[0];
-            l = hls[1];
-            s = hls[2];
-        }
-        h = Math.min(360, hFactor * h);
-        l = Math.min(1, lFactor * l);
-        s = Math.min(1, sFactor * s);
-        return new ColorUIResource(hlsToRGB(h, l, s));
-    }
-
-    protected GTKColorType(String name) {
-        super(name);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/GTKConstants.java b/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/GTKConstants.java
deleted file mode 100755
index 7c0a81e..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/GTKConstants.java
+++ /dev/null
@@ -1,118 +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.
- */
-package com.sun.java.swing.plaf.gtk;
-
-/**
- * @author Scott Violet
- */
-public interface GTKConstants {
-
-    /**
-     * Used to indicate a constant is not defined.
-     */
-    public static final int UNDEFINED = -100;
-
-    /**
-     * Java representation of native GtkIconSize enum
-     */
-    public enum IconSize {
-        INVALID,
-        MENU,
-        SMALL_TOOLBAR,
-        LARGE_TOOLBAR,
-        BUTTON,
-        DND,
-        DIALOG
-    }
-
-    /**
-     * Java representation of native GtkTextDirection enum
-     */
-    public enum TextDirection {
-        NONE,
-        LTR,
-        RTL
-    }
-
-    /**
-     * Java representation of native GtkShadowType enum
-     */
-    public enum ShadowType {
-        NONE,
-        IN,
-        OUT,
-        ETCHED_IN,
-        ETCHED_OUT
-    }
-
-    /**
-     * Java representation of native GtkStateType enum
-     */
-    public enum StateType {
-        NORMAL,
-        ACTIVE,
-        PRELIGHT,
-        SELECTED,
-        INSENSITIVE
-    }
-
-    /**
-     * Java representation of native GtkExpanderStyle enum
-     */
-    public enum ExpanderStyle {
-        COLLAPSED,
-        SEMI_COLLAPSED,
-        SEMI_EXPANDED,
-        EXPANDED,
-    }
-
-    /**
-     * Java representation of native GtkPositionType enum
-     */
-    public enum PositionType {
-        LEFT,
-        RIGHT,
-        TOP,
-        BOTTOM
-    }
-
-    /**
-     * Java representation of native GtkArrowType enum
-     */
-    public enum ArrowType {
-        UP,
-        DOWN,
-        LEFT,
-        RIGHT
-    }
-
-    /**
-     * Java representation of native GtkOrientation enum
-     */
-    public enum Orientation {
-        HORIZONTAL,
-        VERTICAL
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/GTKEngine.java b/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/GTKEngine.java
deleted file mode 100755
index 30b0831..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/GTKEngine.java
+++ /dev/null
@@ -1,635 +0,0 @@
-/*
- * Copyright (c) 2005, 2007, 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.java.swing.plaf.gtk;
-
-import java.awt.*;
-import java.awt.image.*;
-import java.util.HashMap;
-import javax.swing.*;
-import javax.swing.plaf.synth.*;
-
-import com.sun.java.swing.plaf.gtk.GTKConstants.ArrowType;
-import com.sun.java.swing.plaf.gtk.GTKConstants.ExpanderStyle;
-import com.sun.java.swing.plaf.gtk.GTKConstants.Orientation;
-import com.sun.java.swing.plaf.gtk.GTKConstants.PositionType;
-import com.sun.java.swing.plaf.gtk.GTKConstants.ShadowType;
-import com.sun.java.swing.plaf.gtk.GTKConstants.TextDirection;
-
-import sun.awt.image.SunWritableRaster;
-import sun.swing.ImageCache;
-
-/**
- * GTKEngine delegates all painting job to native GTK libraries.
- *
- * Painting with GTKEngine looks like this:
- * First, startPainting() is called. It prepares an offscreen buffer of the
- *   required size.
- * Then, any number of paintXXX() methods can be called. They effectively ignore
- *   the Graphics parameter and draw to the offscreen buffer.
- * Finally, finishPainting() should be called. It fills the data buffer passed
- *   in with the image data.
- *
- * @author Josh Outwater
- */
-class GTKEngine {
-
-    final static GTKEngine INSTANCE = new GTKEngine();
-
-    /** Size of the image cache */
-    private static final int CACHE_SIZE = 50;
-
-    /** This enum mirrors that in gtk2_interface.h */
-    static enum WidgetType {
-        BUTTON, CHECK_BOX, CHECK_BOX_MENU_ITEM, COLOR_CHOOSER,
-        COMBO_BOX, COMBO_BOX_ARROW_BUTTON, COMBO_BOX_TEXT_FIELD,
-        DESKTOP_ICON, DESKTOP_PANE, EDITOR_PANE, FORMATTED_TEXT_FIELD,
-        HANDLE_BOX, HPROGRESS_BAR,
-        HSCROLL_BAR, HSCROLL_BAR_BUTTON_LEFT, HSCROLL_BAR_BUTTON_RIGHT,
-        HSCROLL_BAR_TRACK, HSCROLL_BAR_THUMB,
-        HSEPARATOR, HSLIDER, HSLIDER_TRACK, HSLIDER_THUMB, HSPLIT_PANE_DIVIDER,
-        INTERNAL_FRAME, INTERNAL_FRAME_TITLE_PANE, IMAGE, LABEL, LIST, MENU,
-        MENU_BAR, MENU_ITEM, MENU_ITEM_ACCELERATOR, OPTION_PANE, PANEL,
-        PASSWORD_FIELD, POPUP_MENU, POPUP_MENU_SEPARATOR,
-        RADIO_BUTTON, RADIO_BUTTON_MENU_ITEM, ROOT_PANE, SCROLL_PANE,
-        SPINNER, SPINNER_ARROW_BUTTON, SPINNER_TEXT_FIELD,
-        SPLIT_PANE, TABBED_PANE, TABBED_PANE_TAB_AREA, TABBED_PANE_CONTENT,
-        TABBED_PANE_TAB, TABLE, TABLE_HEADER, TEXT_AREA, TEXT_FIELD, TEXT_PANE,
-        TITLED_BORDER,
-        TOGGLE_BUTTON, TOOL_BAR, TOOL_BAR_DRAG_WINDOW, TOOL_BAR_SEPARATOR,
-        TOOL_TIP, TREE, TREE_CELL, VIEWPORT, VPROGRESS_BAR,
-        VSCROLL_BAR, VSCROLL_BAR_BUTTON_UP, VSCROLL_BAR_BUTTON_DOWN,
-        VSCROLL_BAR_TRACK, VSCROLL_BAR_THUMB,
-        VSEPARATOR, VSLIDER, VSLIDER_TRACK, VSLIDER_THUMB,
-        VSPLIT_PANE_DIVIDER
-    }
-
-    /**
-     * Representation of GtkSettings properties.
-     * When we need more settings we can add them here and
-     * to all implementations of getGTKSetting().
-     */
-    static enum Settings {
-        GTK_FONT_NAME,
-        GTK_ICON_SIZES
-    }
-
-    /* Custom regions are needed for representing regions that don't exist
-     * in the original Region class.
-     */
-    static class CustomRegion extends Region {
-        /*
-         * TITLED_BORDER Region is mapped to GtkFrame class which can draw
-         * titled borders around components.
-         */
-        static Region TITLED_BORDER = new CustomRegion("TitledBorder");
-
-        private CustomRegion(String name) {
-            super(name, null, false);
-        }
-    }
-
-
-    private static HashMap<Region, Object> regionToWidgetTypeMap;
-    private ImageCache cache = new ImageCache(CACHE_SIZE);
-    private int x0, y0, w0, h0;
-    private Graphics graphics;
-    private Object[] cacheArgs;
-
-    private native void native_paint_arrow(
-            int widgetType, int state, int shadowType, String detail,
-            int x, int y, int width, int height, int arrowType);
-    private native void native_paint_box(
-            int widgetType, int state, int shadowType, String detail,
-            int x, int y, int width, int height, int synthState, int dir);
-    private native void native_paint_box_gap(
-            int widgetType, int state, int shadowType, String detail,
-            int x, int y, int width, int height,
-            int gapSide, int gapX, int gapWidth);
-    private native void native_paint_check(
-            int widgetType, int synthState, String detail,
-            int x, int y, int width, int height);
-    private native void native_paint_expander(
-            int widgetType, int state, String detail,
-            int x, int y, int width, int height, int expanderStyle);
-    private native void native_paint_extension(
-            int widgetType, int state, int shadowType, String detail,
-            int x, int y, int width, int height, int placement);
-    private native void native_paint_flat_box(
-            int widgetType, int state, int shadowType, String detail,
-            int x, int y, int width, int height, boolean hasFocus);
-    private native void native_paint_focus(
-            int widgetType, int state, String detail,
-            int x, int y, int width, int height);
-    private native void native_paint_handle(
-            int widgetType, int state, int shadowType, String detail,
-            int x, int y, int width, int height, int orientation);
-    private native void native_paint_hline(
-            int widgetType, int state, String detail,
-            int x, int y, int width, int height);
-    private native void native_paint_option(
-            int widgetType, int synthState, String detail,
-            int x, int y, int width, int height);
-    private native void native_paint_shadow(
-            int widgetType, int state, int shadowType, String detail,
-            int x, int y, int width, int height, int synthState, int dir);
-    private native void native_paint_slider(
-            int widgetType, int state, int shadowType, String detail,
-            int x, int y, int width, int height, int orientation);
-    private native void native_paint_vline(
-            int widgetType, int state, String detail,
-            int x, int y, int width, int height);
-    private native void native_paint_background(
-            int widgetType, int state, int x, int y, int width, int height);
-    private native Object native_get_gtk_setting(int property);
-    private native void nativeSetRangeValue(int widgetType, double value,
-                                            double min, double max,
-                                            double visible);
-
-    private native void nativeStartPainting(int w, int h);
-    private native int nativeFinishPainting(int[] buffer, int width, int height);
-    private native void native_switch_theme();
-
-    static {
-        // Make sure the awt toolkit is loaded so we have access to native
-        // methods.
-        Toolkit.getDefaultToolkit();
-
-        // Initialize regionToWidgetTypeMap
-        regionToWidgetTypeMap = new HashMap<Region, Object>(50);
-        regionToWidgetTypeMap.put(Region.ARROW_BUTTON, new WidgetType[] {
-            WidgetType.SPINNER_ARROW_BUTTON,
-            WidgetType.COMBO_BOX_ARROW_BUTTON,
-            WidgetType.HSCROLL_BAR_BUTTON_LEFT,
-            WidgetType.HSCROLL_BAR_BUTTON_RIGHT,
-            WidgetType.VSCROLL_BAR_BUTTON_UP,
-            WidgetType.VSCROLL_BAR_BUTTON_DOWN});
-        regionToWidgetTypeMap.put(Region.BUTTON, WidgetType.BUTTON);
-        regionToWidgetTypeMap.put(Region.CHECK_BOX, WidgetType.CHECK_BOX);
-        regionToWidgetTypeMap.put(Region.CHECK_BOX_MENU_ITEM,
-                                  WidgetType.CHECK_BOX_MENU_ITEM);
-        regionToWidgetTypeMap.put(Region.COLOR_CHOOSER, WidgetType.COLOR_CHOOSER);
-        regionToWidgetTypeMap.put(Region.FILE_CHOOSER, WidgetType.OPTION_PANE);
-        regionToWidgetTypeMap.put(Region.COMBO_BOX, WidgetType.COMBO_BOX);
-        regionToWidgetTypeMap.put(Region.DESKTOP_ICON, WidgetType.DESKTOP_ICON);
-        regionToWidgetTypeMap.put(Region.DESKTOP_PANE, WidgetType.DESKTOP_PANE);
-        regionToWidgetTypeMap.put(Region.EDITOR_PANE, WidgetType.EDITOR_PANE);
-        regionToWidgetTypeMap.put(Region.FORMATTED_TEXT_FIELD, new WidgetType[] {
-            WidgetType.FORMATTED_TEXT_FIELD, WidgetType.SPINNER_TEXT_FIELD});
-        regionToWidgetTypeMap.put(GTKRegion.HANDLE_BOX, WidgetType.HANDLE_BOX);
-        regionToWidgetTypeMap.put(Region.INTERNAL_FRAME,
-                                  WidgetType.INTERNAL_FRAME);
-        regionToWidgetTypeMap.put(Region.INTERNAL_FRAME_TITLE_PANE,
-                                  WidgetType.INTERNAL_FRAME_TITLE_PANE);
-        regionToWidgetTypeMap.put(Region.LABEL, new WidgetType[] {
-            WidgetType.LABEL, WidgetType.COMBO_BOX_TEXT_FIELD});
-        regionToWidgetTypeMap.put(Region.LIST, WidgetType.LIST);
-        regionToWidgetTypeMap.put(Region.MENU, WidgetType.MENU);
-        regionToWidgetTypeMap.put(Region.MENU_BAR, WidgetType.MENU_BAR);
-        regionToWidgetTypeMap.put(Region.MENU_ITEM, WidgetType.MENU_ITEM);
-        regionToWidgetTypeMap.put(Region.MENU_ITEM_ACCELERATOR,
-                                  WidgetType.MENU_ITEM_ACCELERATOR);
-        regionToWidgetTypeMap.put(Region.OPTION_PANE, WidgetType.OPTION_PANE);
-        regionToWidgetTypeMap.put(Region.PANEL, WidgetType.PANEL);
-        regionToWidgetTypeMap.put(Region.PASSWORD_FIELD,
-                                  WidgetType.PASSWORD_FIELD);
-        regionToWidgetTypeMap.put(Region.POPUP_MENU, WidgetType.POPUP_MENU);
-        regionToWidgetTypeMap.put(Region.POPUP_MENU_SEPARATOR,
-                                  WidgetType.POPUP_MENU_SEPARATOR);
-        regionToWidgetTypeMap.put(Region.PROGRESS_BAR, new WidgetType[] {
-            WidgetType.HPROGRESS_BAR, WidgetType.VPROGRESS_BAR});
-        regionToWidgetTypeMap.put(Region.RADIO_BUTTON, WidgetType.RADIO_BUTTON);
-        regionToWidgetTypeMap.put(Region.RADIO_BUTTON_MENU_ITEM,
-                                  WidgetType.RADIO_BUTTON_MENU_ITEM);
-        regionToWidgetTypeMap.put(Region.ROOT_PANE, WidgetType.ROOT_PANE);
-        regionToWidgetTypeMap.put(Region.SCROLL_BAR, new WidgetType[] {
-            WidgetType.HSCROLL_BAR, WidgetType.VSCROLL_BAR});
-        regionToWidgetTypeMap.put(Region.SCROLL_BAR_THUMB, new WidgetType[] {
-            WidgetType.HSCROLL_BAR_THUMB, WidgetType.VSCROLL_BAR_THUMB});
-        regionToWidgetTypeMap.put(Region.SCROLL_BAR_TRACK, new WidgetType[] {
-            WidgetType.HSCROLL_BAR_TRACK, WidgetType.VSCROLL_BAR_TRACK});
-        regionToWidgetTypeMap.put(Region.SCROLL_PANE, WidgetType.SCROLL_PANE);
-        regionToWidgetTypeMap.put(Region.SEPARATOR, new WidgetType[] {
-            WidgetType.HSEPARATOR, WidgetType.VSEPARATOR});
-        regionToWidgetTypeMap.put(Region.SLIDER, new WidgetType[] {
-            WidgetType.HSLIDER, WidgetType.VSLIDER});
-        regionToWidgetTypeMap.put(Region.SLIDER_THUMB, new WidgetType[] {
-            WidgetType.HSLIDER_THUMB, WidgetType.VSLIDER_THUMB});
-        regionToWidgetTypeMap.put(Region.SLIDER_TRACK, new WidgetType[] {
-            WidgetType.HSLIDER_TRACK, WidgetType.VSLIDER_TRACK});
-        regionToWidgetTypeMap.put(Region.SPINNER, WidgetType.SPINNER);
-        regionToWidgetTypeMap.put(Region.SPLIT_PANE, WidgetType.SPLIT_PANE);
-        regionToWidgetTypeMap.put(Region.SPLIT_PANE_DIVIDER, new WidgetType[] {
-            WidgetType.HSPLIT_PANE_DIVIDER, WidgetType.VSPLIT_PANE_DIVIDER});
-        regionToWidgetTypeMap.put(Region.TABBED_PANE, WidgetType.TABBED_PANE);
-        regionToWidgetTypeMap.put(Region.TABBED_PANE_CONTENT,
-                                  WidgetType.TABBED_PANE_CONTENT);
-        regionToWidgetTypeMap.put(Region.TABBED_PANE_TAB,
-                                  WidgetType.TABBED_PANE_TAB);
-        regionToWidgetTypeMap.put(Region.TABBED_PANE_TAB_AREA,
-                                  WidgetType.TABBED_PANE_TAB_AREA);
-        regionToWidgetTypeMap.put(Region.TABLE, WidgetType.TABLE);
-        regionToWidgetTypeMap.put(Region.TABLE_HEADER, WidgetType.TABLE_HEADER);
-        regionToWidgetTypeMap.put(Region.TEXT_AREA, WidgetType.TEXT_AREA);
-        regionToWidgetTypeMap.put(Region.TEXT_FIELD, new WidgetType[] {
-            WidgetType.TEXT_FIELD, WidgetType.COMBO_BOX_TEXT_FIELD});
-        regionToWidgetTypeMap.put(Region.TEXT_PANE, WidgetType.TEXT_PANE);
-        regionToWidgetTypeMap.put(CustomRegion.TITLED_BORDER, WidgetType.TITLED_BORDER);
-        regionToWidgetTypeMap.put(Region.TOGGLE_BUTTON, WidgetType.TOGGLE_BUTTON);
-        regionToWidgetTypeMap.put(Region.TOOL_BAR, WidgetType.TOOL_BAR);
-        regionToWidgetTypeMap.put(Region.TOOL_BAR_CONTENT, WidgetType.TOOL_BAR);
-        regionToWidgetTypeMap.put(Region.TOOL_BAR_DRAG_WINDOW,
-                                  WidgetType.TOOL_BAR_DRAG_WINDOW);
-        regionToWidgetTypeMap.put(Region.TOOL_BAR_SEPARATOR,
-                                  WidgetType.TOOL_BAR_SEPARATOR);
-        regionToWidgetTypeMap.put(Region.TOOL_TIP, WidgetType.TOOL_TIP);
-        regionToWidgetTypeMap.put(Region.TREE, WidgetType.TREE);
-        regionToWidgetTypeMap.put(Region.TREE_CELL, WidgetType.TREE_CELL);
-        regionToWidgetTypeMap.put(Region.VIEWPORT, WidgetType.VIEWPORT);
-    }
-
-    /** Translate Region and JComponent into WidgetType ordinals */
-    static WidgetType getWidgetType(JComponent c, Region id) {
-        Object value = regionToWidgetTypeMap.get(id);
-
-        if (value instanceof WidgetType) {
-            return (WidgetType)value;
-        }
-
-        WidgetType[] widgets = (WidgetType[])value;
-        if (c == null ) {
-            return widgets[0];
-        }
-
-        if (c instanceof JScrollBar) {
-            return (((JScrollBar)c).getOrientation() == JScrollBar.HORIZONTAL) ?
-                widgets[0] : widgets[1];
-        } else if (c instanceof JSeparator) {
-            JSeparator separator = (JSeparator)c;
-
-            /* We should return correrct WidgetType if the seperator is inserted
-             * in Menu/PopupMenu/ToolBar. BugID: 6465603
-             */
-            if (separator.getParent() instanceof JPopupMenu) {
-                return WidgetType.POPUP_MENU_SEPARATOR;
-            } else if (separator.getParent() instanceof JToolBar) {
-                return WidgetType.TOOL_BAR_SEPARATOR;
-            }
-
-            return (separator.getOrientation() == JSeparator.HORIZONTAL) ?
-                widgets[0] : widgets[1];
-        } else if (c instanceof JSlider) {
-            return (((JSlider)c).getOrientation() == JSlider.HORIZONTAL) ?
-                widgets[0] : widgets[1];
-        } else if (c instanceof JProgressBar) {
-            return (((JProgressBar)c).getOrientation() == JProgressBar.HORIZONTAL) ?
-                widgets[0] : widgets[1];
-        } else if (c instanceof JSplitPane) {
-            return (((JSplitPane)c).getOrientation() == JSplitPane.HORIZONTAL_SPLIT) ?
-                widgets[1] : widgets[0];
-        } else if (id == Region.LABEL) {
-            /*
-             * For all ListCellRenderers we will use COMBO_BOX_TEXT_FIELD widget
-             * type because we can get correct insets. List items however won't be
-             * drawn as a text entry (see GTKPainter.paintLabelBackground).
-             */
-            if (c instanceof ListCellRenderer) {
-                return widgets[1];
-            } else {
-                return widgets[0];
-            }
-        } else if (id == Region.TEXT_FIELD) {
-            String name = c.getName();
-            if (name != null && name.startsWith("ComboBox")) {
-                return widgets[1];
-            } else {
-                return widgets[0];
-            }
-        } else if (id == Region.FORMATTED_TEXT_FIELD) {
-            String name = c.getName();
-            if (name != null && name.startsWith("Spinner")) {
-                return widgets[1];
-            } else {
-                return widgets[0];
-            }
-        } else if (id == Region.ARROW_BUTTON) {
-            if (c.getParent() instanceof JScrollBar) {
-                Integer prop = (Integer)
-                    c.getClientProperty("__arrow_direction__");
-                int dir = (prop != null) ?
-                    prop.intValue() : SwingConstants.WEST;
-                switch (dir) {
-                case SwingConstants.WEST:
-                    return WidgetType.HSCROLL_BAR_BUTTON_LEFT;
-                case SwingConstants.EAST:
-                    return WidgetType.HSCROLL_BAR_BUTTON_RIGHT;
-                case SwingConstants.NORTH:
-                    return WidgetType.VSCROLL_BAR_BUTTON_UP;
-                case SwingConstants.SOUTH:
-                    return WidgetType.VSCROLL_BAR_BUTTON_DOWN;
-                default:
-                    return null;
-                }
-            } else if (c.getParent() instanceof JComboBox) {
-                return WidgetType.COMBO_BOX_ARROW_BUTTON;
-            } else {
-                return WidgetType.SPINNER_ARROW_BUTTON;
-            }
-        }
-
-        return null;
-    }
-
-    private static int getTextDirection(SynthContext context) {
-        TextDirection dir = TextDirection.NONE;
-        JComponent comp = context.getComponent();
-        if (comp != null) {
-            ComponentOrientation co = comp.getComponentOrientation();
-            if (co != null) {
-                dir = co.isLeftToRight() ?
-                    TextDirection.LTR : TextDirection.RTL;
-            }
-        }
-        return dir.ordinal();
-    }
-
-    public void paintArrow(Graphics g, SynthContext context,
-            Region id, int state, ShadowType shadowType, ArrowType direction,
-            String detail, int x, int y, int w, int h) {
-
-        state = GTKLookAndFeel.synthStateToGTKStateType(state).ordinal();
-        int widget = getWidgetType(context.getComponent(), id).ordinal();
-        native_paint_arrow(widget, state, shadowType.ordinal(),
-                detail, x - x0, y - y0, w, h, direction.ordinal());
-    }
-
-    public void paintBox(Graphics g, SynthContext context,
-            Region id, int state, ShadowType shadowType,
-            String detail, int x, int y, int w, int h) {
-
-        int gtkState =
-            GTKLookAndFeel.synthStateToGTKStateType(state).ordinal();
-        int synthState = context.getComponentState();
-        int dir = getTextDirection(context);
-        int widget = getWidgetType(context.getComponent(), id).ordinal();
-        native_paint_box(widget, gtkState, shadowType.ordinal(),
-                         detail, x - x0, y - y0, w, h, synthState, dir);
-    }
-
-    public void paintBoxGap(Graphics g, SynthContext context,
-            Region id, int state, ShadowType shadowType,
-            String detail, int x, int y, int w, int h,
-            PositionType boxGapType, int tabBegin, int size) {
-
-        state = GTKLookAndFeel.synthStateToGTKStateType(state).ordinal();
-        int widget = getWidgetType(context.getComponent(), id).ordinal();
-        native_paint_box_gap(widget, state, shadowType.ordinal(), detail,
-                x - x0, y - y0, w, h, boxGapType.ordinal(), tabBegin, size);
-    }
-
-    public void paintCheck(Graphics g, SynthContext context,
-            Region id, String detail, int x, int y, int w, int h) {
-
-        int synthState = context.getComponentState();
-        int widget = getWidgetType(context.getComponent(), id).ordinal();
-        native_paint_check(widget, synthState, detail, x - x0, y - y0, w, h);
-    }
-
-    public void paintExpander(Graphics g, SynthContext context,
-            Region id, int state, ExpanderStyle expanderStyle, String detail,
-            int x, int y, int w, int h) {
-
-        state = GTKLookAndFeel.synthStateToGTKStateType(state).ordinal();
-        int widget = getWidgetType(context.getComponent(), id).ordinal();
-        native_paint_expander(widget, state, detail, x - x0, y - y0, w, h,
-                              expanderStyle.ordinal());
-    }
-
-    public void paintExtension(Graphics g, SynthContext context,
-            Region id, int state, ShadowType shadowType, String detail,
-            int x, int y, int w, int h, PositionType placement, int tabIndex) {
-
-        state = GTKLookAndFeel.synthStateToGTKStateType(state).ordinal();
-        int widget = getWidgetType(context.getComponent(), id).ordinal();
-        native_paint_extension(widget, state, shadowType.ordinal(), detail,
-                               x - x0, y - y0, w, h, placement.ordinal());
-    }
-
-    public void paintFlatBox(Graphics g, SynthContext context,
-            Region id, int state, ShadowType shadowType, String detail,
-            int x, int y, int w, int h, ColorType colorType) {
-
-        state = GTKLookAndFeel.synthStateToGTKStateType(state).ordinal();
-        int widget = getWidgetType(context.getComponent(), id).ordinal();
-        native_paint_flat_box(widget, state, shadowType.ordinal(), detail,
-                              x - x0, y - y0, w, h,
-                              context.getComponent().hasFocus());
-    }
-
-    public void paintFocus(Graphics g, SynthContext context,
-            Region id, int state, String detail, int x, int y, int w, int h) {
-
-        state = GTKLookAndFeel.synthStateToGTKStateType(state).ordinal();
-        int widget = getWidgetType(context.getComponent(), id).ordinal();
-        native_paint_focus(widget, state, detail, x - x0, y - y0, w, h);
-    }
-
-    public void paintHandle(Graphics g, SynthContext context,
-            Region id, int state, ShadowType shadowType, String detail,
-            int x, int y, int w, int h, Orientation orientation) {
-
-        state = GTKLookAndFeel.synthStateToGTKStateType(state).ordinal();
-        int widget = getWidgetType(context.getComponent(), id).ordinal();
-        native_paint_handle(widget, state, shadowType.ordinal(), detail,
-                            x - x0, y - y0, w, h, orientation.ordinal());
-    }
-
-    public void paintHline(Graphics g, SynthContext context,
-            Region id, int state, String detail, int x, int y, int w, int h) {
-
-        state = GTKLookAndFeel.synthStateToGTKStateType(state).ordinal();
-        int widget = getWidgetType(context.getComponent(), id).ordinal();
-        native_paint_hline(widget, state, detail, x - x0, y - y0, w, h);
-    }
-
-    public void paintOption(Graphics g, SynthContext context,
-            Region id, String detail, int x, int y, int w, int h) {
-
-        int synthState = context.getComponentState();
-        int widget = getWidgetType(context.getComponent(), id).ordinal();
-        native_paint_option(widget, synthState, detail, x - x0, y - y0, w, h);
-    }
-
-    public void paintShadow(Graphics g, SynthContext context,
-            Region id, int state, ShadowType shadowType, String detail,
-            int x, int y, int w, int h) {
-
-        int gtkState =
-            GTKLookAndFeel.synthStateToGTKStateType(state).ordinal();
-        int synthState = context.getComponentState();
-        int dir = getTextDirection(context);
-        int widget = getWidgetType(context.getComponent(), id).ordinal();
-        native_paint_shadow(widget, gtkState, shadowType.ordinal(), detail,
-                            x - x0, y - y0, w, h, synthState, dir);
-    }
-
-    public void paintSlider(Graphics g, SynthContext context,
-            Region id, int state, ShadowType shadowType, String detail,
-            int x, int y, int w, int h, Orientation orientation) {
-
-        state = GTKLookAndFeel.synthStateToGTKStateType(state).ordinal();
-        int widget = getWidgetType(context.getComponent(), id).ordinal();
-        native_paint_slider(widget, state, shadowType.ordinal(), detail,
-                            x - x0, y - y0, w, h, orientation.ordinal());
-    }
-
-    public void paintVline(Graphics g, SynthContext context,
-            Region id, int state, String detail, int x, int y, int w, int h) {
-
-        state = GTKLookAndFeel.synthStateToGTKStateType(state).ordinal();
-        int widget = getWidgetType(context.getComponent(), id).ordinal();
-        native_paint_vline(widget, state, detail, x - x0, y - y0, w, h);
-    }
-
-    public void paintBackground(Graphics g, SynthContext context,
-            Region id, int state, Color color, int x, int y, int w, int h) {
-
-        state = GTKLookAndFeel.synthStateToGTKStateType(state).ordinal();
-        int widget = getWidgetType(context.getComponent(), id).ordinal();
-        native_paint_background(widget, state, x - x0, y - y0, w, h);
-    }
-
-    private final static ColorModel[] COLOR_MODELS = {
-        // Transparency.OPAQUE
-        new DirectColorModel(24, 0x00ff0000, 0x0000ff00, 0x000000ff, 0x00000000),
-        // Transparency.BITMASK
-        new DirectColorModel(25, 0x00ff0000, 0x0000ff00, 0x000000ff, 0x01000000),
-        // Transparency.TRANSLUCENT
-        ColorModel.getRGBdefault(),
-    };
-
-    private final static int[][] BAND_OFFSETS = {
-        { 0x00ff0000, 0x0000ff00, 0x000000ff },             // OPAQUE
-        { 0x00ff0000, 0x0000ff00, 0x000000ff, 0x01000000 }, // BITMASK
-        { 0x00ff0000, 0x0000ff00, 0x000000ff, 0xff000000 }  // TRANSLUCENT
-    };
-
-
-    /**
-     * Paint a cached image identified by its size and a set of additional
-     * arguments, if there's one.
-     *
-     * @return true if a cached image has been painted, false otherwise
-     */
-    public boolean paintCachedImage(Graphics g,
-            int x, int y, int w, int h, Object... args) {
-        if (w <= 0 || h <= 0) {
-            return true;
-        }
-
-        // look for cached image
-        Image img = cache.getImage(getClass(), null, w, h, args);
-        if (img != null) {
-            g.drawImage(img, x, y, null);
-            return true;
-        }
-        return false;
-    }
-
-    /*
-     * Allocate a native offscreen buffer of the specified size.
-     */
-    public void startPainting(Graphics g,
-            int x, int y, int w, int h, Object... args) {
-        nativeStartPainting(w, h);
-        x0 = x;
-        y0 = y;
-        w0 = w;
-        h0 = h;
-        graphics = g;
-        cacheArgs = args;
-    }
-
-    /**
-     * Convenience method that delegates to finishPainting() with
-     * caching enabled.
-     */
-    public void finishPainting() {
-        finishPainting(true);
-    }
-
-    /**
-     * Called to indicate that painting is finished. We create a new
-     * BufferedImage from the offscreen buffer, (optionally) cache it,
-     * and paint it.
-     */
-    public void finishPainting(boolean useCache) {
-        DataBufferInt dataBuffer = new DataBufferInt(w0 * h0);
-        // Note that stealData() requires a markDirty() afterwards
-        // since we modify the data in it.
-        int transparency =
-            nativeFinishPainting(SunWritableRaster.stealData(dataBuffer, 0),
-                                 w0, h0);
-        SunWritableRaster.markDirty(dataBuffer);
-
-        int[] bands = BAND_OFFSETS[transparency - 1];
-        WritableRaster raster = Raster.createPackedRaster(
-                dataBuffer, w0, h0, w0, bands, null);
-
-        ColorModel cm = COLOR_MODELS[transparency - 1];
-        Image img = new BufferedImage(cm, raster, false, null);
-        if (useCache) {
-            cache.setImage(getClass(), null, w0, h0, cacheArgs, img);
-        }
-        graphics.drawImage(img, x0, y0, null);
-    }
-
-    /**
-     * Notify native layer of theme change, and flush cache
-     */
-    public void themeChanged() {
-        synchronized(sun.awt.UNIXToolkit.GTK_LOCK) {
-            native_switch_theme();
-        }
-        cache.flush();
-    }
-
-    /* GtkSettings enum mirrors that in gtk2_interface.h */
-    public Object getSetting(Settings property) {
-        synchronized(sun.awt.UNIXToolkit.GTK_LOCK) {
-            return native_get_gtk_setting(property.ordinal());
-        }
-    }
-
-    /**
-     * Sets up the GtkAdjustment values for the native GtkRange widget
-     * associated with the given region (e.g. SLIDER, SCROLL_BAR).
-     */
-    void setRangeValue(SynthContext context, Region id,
-                       double value, double min, double max, double visible) {
-        int widget = getWidgetType(context.getComponent(), id).ordinal();
-        nativeSetRangeValue(widget, value, min, max, visible);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/GTKFileChooserUI.java b/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/GTKFileChooserUI.java
deleted file mode 100755
index 0cff673..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/GTKFileChooserUI.java
+++ /dev/null
@@ -1,1398 +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.
- */
-package com.sun.java.swing.plaf.gtk;
-
-import java.awt.*;
-import java.awt.event.*;
-import java.beans.*;
-import java.io.File;
-import java.io.IOException;
-import java.text.MessageFormat;
-import java.util.*;
-
-import javax.swing.*;
-import javax.swing.border.*;
-import javax.swing.filechooser.*;
-import javax.swing.event.*;
-import javax.swing.plaf.*;
-import javax.swing.plaf.basic.BasicDirectoryModel;
-import javax.swing.table.*;
-import javax.accessibility.*;
-
-import sun.swing.SwingUtilities2;
-
-import sun.swing.plaf.synth.*;
-import sun.swing.FilePane;
-import sun.awt.shell.ShellFolder;
-
-/**
- * GTK FileChooserUI.
- *
- * @author Leif Samuelsson
- * @author Jeff Dinkins
- */
-class GTKFileChooserUI extends SynthFileChooserUI {
-
-    // The accessoryPanel is a container to place the JFileChooser accessory component
-    private JPanel accessoryPanel = null;
-
-    private String newFolderButtonText = null;
-    private String newFolderErrorSeparator = null;
-    private String newFolderErrorText = null;
-    private String newFolderDialogText = null;
-    private String newFolderNoDirectoryErrorTitleText = null;
-    private String newFolderNoDirectoryErrorText = null;
-
-    private String deleteFileButtonText = null;
-    private String renameFileButtonText = null;
-
-    private String newFolderButtonToolTipText = null;
-    private String deleteFileButtonToolTipText = null;
-    private String renameFileButtonToolTipText = null;
-
-    private int newFolderButtonMnemonic = 0;
-    private int deleteFileButtonMnemonic = 0;
-    private int renameFileButtonMnemonic = 0;
-    private int foldersLabelMnemonic = 0;
-    private int filesLabelMnemonic = 0;
-
-    private String renameFileDialogText = null;
-    private String renameFileErrorTitle = null;
-    private String renameFileErrorText = null;
-
-    private JComboBox filterComboBox;
-    private FilterComboBoxModel filterComboBoxModel;
-
-    // From Motif
-
-    private JPanel rightPanel;
-    private JList directoryList;
-    private JList fileList;
-
-    private JLabel pathField;
-    private JTextField fileNameTextField;
-
-    private static final Dimension hstrut3 = new Dimension(3, 1);
-    private static final Dimension vstrut10 = new Dimension(1, 10);
-
-    private static Dimension prefListSize = new Dimension(75, 150);
-
-    private static Dimension PREF_SIZE = new Dimension(435, 360);
-    private static Dimension MIN_SIZE = new Dimension(200, 300);
-
-    private static Dimension ZERO_ACC_SIZE = new Dimension(1, 1);
-
-    private static Dimension MAX_SIZE = new Dimension(Short.MAX_VALUE, Short.MAX_VALUE);
-
-    private static final Insets buttonMargin = new Insets(3, 3, 3, 3);
-
-    private String filesLabelText = null;
-    private String foldersLabelText = null;
-    private String pathLabelText = null;
-    private String filterLabelText = null;
-
-    private int pathLabelMnemonic = 0;
-    private int filterLabelMnemonic = 0;
-
-    private JComboBox directoryComboBox;
-    private DirectoryComboBoxModel directoryComboBoxModel;
-    private Action directoryComboBoxAction = new DirectoryComboBoxAction();
-    private JPanel bottomButtonPanel;
-    private GTKDirectoryModel model = null;
-    private Action newFolderAction;
-    private boolean readOnly;
-    private boolean showDirectoryIcons;
-    private boolean showFileIcons;
-    private GTKFileView fileView = new GTKFileView();
-    private PropertyChangeListener gtkFCPropertyChangeListener;
-    private Action approveSelectionAction = new GTKApproveSelectionAction();
-    private GTKDirectoryListModel directoryListModel;
-
-    public GTKFileChooserUI(JFileChooser filechooser) {
-        super(filechooser);
-    }
-
-    protected ActionMap createActionMap() {
-        ActionMap map = new ActionMapUIResource();
-        map.put("approveSelection", getApproveSelectionAction());
-        map.put("cancelSelection", getCancelSelectionAction());
-        map.put("Go Up", getChangeToParentDirectoryAction());
-        map.put("fileNameCompletion", getFileNameCompletionAction());
-        return map;
-    }
-
-    public String getFileName() {
-        JFileChooser fc = getFileChooser();
-        String typedInName = fileNameTextField != null ?
-            fileNameTextField.getText() : null;
-
-        if (!fc.isMultiSelectionEnabled()) {
-            return typedInName;
-        }
-
-        int mode = fc.getFileSelectionMode();
-        JList list = mode == JFileChooser.DIRECTORIES_ONLY ?
-            directoryList : fileList;
-        Object[] files = list.getSelectedValues();
-        int len = files.length;
-        Vector<String> result = new Vector<String>(len + 1);
-
-        // we return all selected file names
-        for (int i = 0; i < len; i++) {
-            File file = (File)files[i];
-            result.add(file.getName());
-        }
-        // plus the file name typed into the text field, if not already there
-        if (typedInName != null && !result.contains(typedInName)) {
-            result.add(typedInName);
-        }
-
-        StringBuffer buf = new StringBuffer();
-        len = result.size();
-
-        // construct the resulting string
-        for (int i=0; i<len; i++) {
-            if (i > 0) {
-                buf.append(" ");
-            }
-            if (len > 1) {
-                buf.append("\"");
-            }
-            buf.append(result.get(i));
-            if (len > 1) {
-                buf.append("\"");
-            }
-        }
-        return buf.toString();
-    }
-
-    public void setFileName(String fileName) {
-        if (fileNameTextField != null) {
-            fileNameTextField.setText(fileName);
-        }
-    }
-
-//     public String getDirectoryName() {
-//      return pathField.getText();
-//     }
-
-    public void setDirectoryName(String dirname) {
-        pathField.setText(dirname);
-    }
-
-    public void ensureFileIsVisible(JFileChooser fc, File f) {
-        // PENDING
-    }
-
-    public void rescanCurrentDirectory(JFileChooser fc) {
-        getModel().validateFileCache();
-    }
-
-    public JPanel getAccessoryPanel() {
-        return accessoryPanel;
-    }
-
-    // ***********************
-    // * FileView operations *
-    // ***********************
-
-    public FileView getFileView(JFileChooser fc) {
-        return fileView;
-    }
-
-    private class GTKFileView extends BasicFileView {
-        public GTKFileView() {
-            iconCache = null;
-        }
-
-        public void clearIconCache() {
-        }
-
-        public Icon getCachedIcon(File f) {
-            return null;
-        }
-
-        public void cacheIcon(File f, Icon i) {
-        }
-
-        public Icon getIcon(File f) {
-            return (f != null && f.isDirectory()) ? directoryIcon : fileIcon;
-        }
-    }
-
-
-    private void updateDefaultButton() {
-        JFileChooser filechooser = getFileChooser();
-        JRootPane root = SwingUtilities.getRootPane(filechooser);
-        if (root == null) {
-            return;
-        }
-
-        if (filechooser.getControlButtonsAreShown()) {
-            if (root.getDefaultButton() == null) {
-                root.setDefaultButton(getApproveButton(filechooser));
-                getCancelButton(filechooser).setDefaultCapable(false);
-            }
-        } else {
-            if (root.getDefaultButton() == getApproveButton(filechooser)) {
-                root.setDefaultButton(null);
-            }
-        }
-    }
-
-    protected void doSelectedFileChanged(PropertyChangeEvent e) {
-        super.doSelectedFileChanged(e);
-        File f = (File) e.getNewValue();
-        if (f != null) {
-            setFileName(getFileChooser().getName(f));
-        }
-    }
-
-    protected void doDirectoryChanged(PropertyChangeEvent e) {
-        directoryList.clearSelection();
-        ListSelectionModel sm = directoryList.getSelectionModel();
-        if (sm instanceof DefaultListSelectionModel) {
-            ((DefaultListSelectionModel)sm).moveLeadSelectionIndex(0);
-            sm.setAnchorSelectionIndex(0);
-        }
-        fileList.clearSelection();
-        sm = fileList.getSelectionModel();
-        if (sm instanceof DefaultListSelectionModel) {
-            ((DefaultListSelectionModel)sm).moveLeadSelectionIndex(0);
-            sm.setAnchorSelectionIndex(0);
-        }
-
-        File currentDirectory = getFileChooser().getCurrentDirectory();
-        if (currentDirectory != null) {
-            try {
-                setDirectoryName(ShellFolder.getNormalizedFile((File)e.getNewValue()).getPath());
-            } catch (IOException ioe) {
-                setDirectoryName(((File)e.getNewValue()).getAbsolutePath());
-            }
-            if ((getFileChooser().getFileSelectionMode() == JFileChooser.DIRECTORIES_ONLY) && !getFileChooser().isMultiSelectionEnabled()) {
-                setFileName(pathField.getText());
-            }
-            directoryComboBoxModel.addItem(currentDirectory);
-            directoryListModel.directoryChanged();
-        }
-        super.doDirectoryChanged(e);
-    }
-
-    protected void doAccessoryChanged(PropertyChangeEvent e) {
-        if (getAccessoryPanel() != null) {
-            if (e.getOldValue() != null) {
-                getAccessoryPanel().remove((JComponent)e.getOldValue());
-            }
-            JComponent accessory = (JComponent)e.getNewValue();
-            if (accessory != null) {
-                getAccessoryPanel().add(accessory, BorderLayout.CENTER);
-                getAccessoryPanel().setPreferredSize(accessory.getPreferredSize());
-                getAccessoryPanel().setMaximumSize(MAX_SIZE);
-            } else {
-                getAccessoryPanel().setPreferredSize(ZERO_ACC_SIZE);
-                getAccessoryPanel().setMaximumSize(ZERO_ACC_SIZE);
-            }
-        }
-    }
-
-    protected void doFileSelectionModeChanged(PropertyChangeEvent e) {
-        directoryList.clearSelection();
-        rightPanel.setVisible(((Integer)e.getNewValue()).intValue() != JFileChooser.DIRECTORIES_ONLY);
-
-        super.doFileSelectionModeChanged(e);
-    }
-
-    protected void doMultiSelectionChanged(PropertyChangeEvent e) {
-        if (getFileChooser().isMultiSelectionEnabled()) {
-            fileList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
-        } else {
-            fileList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
-            fileList.clearSelection();
-        }
-
-        super.doMultiSelectionChanged(e);
-    }
-
-    protected void doControlButtonsChanged(PropertyChangeEvent e) {
-        super.doControlButtonsChanged(e);
-
-        JFileChooser filechooser = getFileChooser();
-        if (filechooser.getControlButtonsAreShown()) {
-            filechooser.add(bottomButtonPanel, BorderLayout.SOUTH);
-        } else {
-            filechooser.remove(bottomButtonPanel);
-        }
-        updateDefaultButton();
-    }
-
-    protected void doAncestorChanged(PropertyChangeEvent e) {
-        if (e.getOldValue() == null && e.getNewValue() != null) {
-            // Ancestor was added, set initial focus
-            fileNameTextField.selectAll();
-            fileNameTextField.requestFocus();
-            updateDefaultButton();
-        }
-
-        super.doAncestorChanged(e);
-    }
-
-
-
-    // ********************************************
-    // ************ Create Listeners **************
-    // ********************************************
-
-    public ListSelectionListener createListSelectionListener(JFileChooser fc) {
-        return new SelectionListener();
-    }
-
-    class DoubleClickListener extends MouseAdapter {
-        JList list;
-        public  DoubleClickListener(JList list) {
-            this.list = list;
-        }
-
-        public void mouseClicked(MouseEvent e) {
-            if (SwingUtilities.isLeftMouseButton(e) && e.getClickCount() == 2) {
-                int index = list.locationToIndex(e.getPoint());
-                if (index >= 0) {
-                    File f = (File) list.getModel().getElementAt(index);
-                    try {
-                        // Strip trailing ".."
-                        f = ShellFolder.getNormalizedFile(f);
-                    } catch (IOException ex) {
-                        // That's ok, we'll use f as is
-                    }
-                    if (getFileChooser().isTraversable(f)) {
-                        list.clearSelection();
-                        if (getFileChooser().getCurrentDirectory().equals(f)){
-                            rescanCurrentDirectory(getFileChooser());
-                        } else {
-                            getFileChooser().setCurrentDirectory(f);
-                        }
-                    } else {
-                        getFileChooser().approveSelection();
-                    }
-                }
-            }
-        }
-
-        public void mouseEntered(MouseEvent evt) {
-            if (list != null) {
-                TransferHandler th1 = getFileChooser().getTransferHandler();
-                TransferHandler th2 = list.getTransferHandler();
-                if (th1 != th2) {
-                    list.setTransferHandler(th1);
-                }
-                if (getFileChooser().getDragEnabled() != list.getDragEnabled()) {
-                    list.setDragEnabled(getFileChooser().getDragEnabled());
-                }
-            }
-        }
-    }
-
-    protected MouseListener createDoubleClickListener(JFileChooser fc, JList list) {
-        return new DoubleClickListener(list);
-    }
-
-
-
-    protected class SelectionListener implements ListSelectionListener {
-        public void valueChanged(ListSelectionEvent e) {
-            if (!e.getValueIsAdjusting()) {
-                JFileChooser chooser = getFileChooser();
-                JList list = (JList) e.getSource();
-
-                if (chooser.isMultiSelectionEnabled()) {
-                    File[] files = null;
-                    Object[] objects = list.getSelectedValues();
-                    if (objects != null) {
-                        if (objects.length == 1
-                            && ((File)objects[0]).isDirectory()
-                            && chooser.isTraversable(((File)objects[0]))
-                            && (chooser.getFileSelectionMode() != chooser.DIRECTORIES_ONLY
-                                || !chooser.getFileSystemView().isFileSystem(((File)objects[0])))) {
-                            setDirectorySelected(true);
-                            setDirectory(((File)objects[0]));
-                        } else {
-                            ArrayList<File> fList = new ArrayList<File>(objects.length);
-                            for (Object object : objects) {
-                                File f = (File) object;
-                                if ((chooser.isFileSelectionEnabled() && f.isFile())
-                                    || (chooser.isDirectorySelectionEnabled() && f.isDirectory())) {
-                                    fList.add(f);
-                                }
-                            }
-                            if (fList.size() > 0) {
-                                files = fList.toArray(new File[fList.size()]);
-                            }
-                            setDirectorySelected(false);
-                        }
-                    }
-                    chooser.setSelectedFiles(files);
-                } else {
-                    File file = (File)list.getSelectedValue();
-                    if (file != null
-                        && file.isDirectory()
-                        && chooser.isTraversable(file)
-                        && (chooser.getFileSelectionMode() == chooser.FILES_ONLY
-                            || !chooser.getFileSystemView().isFileSystem(file))) {
-
-                        setDirectorySelected(true);
-                        setDirectory(file);
-                    } else {
-                        setDirectorySelected(false);
-                        if (file != null) {
-                            chooser.setSelectedFile(file);
-                        }
-                    }
-                }
-            }
-        }
-    }
-
-
-    //
-    // ComponentUI Interface Implementation methods
-    //
-    public static ComponentUI createUI(JComponent c) {
-        return new GTKFileChooserUI((JFileChooser)c);
-    }
-
-    public void installUI(JComponent c) {
-        accessoryPanel = new JPanel(new BorderLayout(10, 10));
-        accessoryPanel.setName("GTKFileChooser.accessoryPanel");
-
-        super.installUI(c);
-    }
-
-    public void uninstallUI(JComponent c) {
-        c.removePropertyChangeListener(filterComboBoxModel);
-        super.uninstallUI(c);
-
-        if (accessoryPanel != null) {
-            accessoryPanel.removeAll();
-        }
-        accessoryPanel = null;
-        getFileChooser().removeAll();
-    }
-
-    public void installComponents(JFileChooser fc) {
-        super.installComponents(fc);
-
-        boolean leftToRight = fc.getComponentOrientation().isLeftToRight();
-
-        fc.setLayout(new BorderLayout());
-        fc.setAlignmentX(JComponent.CENTER_ALIGNMENT);
-
-        // Top row of buttons
-        JPanel topButtonPanel = new JPanel(new FlowLayout(FlowLayout.LEADING, 0, 0));
-        topButtonPanel.setBorder(new EmptyBorder(10, 10, 0, 10));
-        topButtonPanel.setName("GTKFileChooser.topButtonPanel");
-
-        if (!UIManager.getBoolean("FileChooser.readOnly")) {
-            JButton newFolderButton = new JButton(getNewFolderAction());
-            newFolderButton.setName("GTKFileChooser.newFolderButton");
-            newFolderButton.setMnemonic(newFolderButtonMnemonic);
-            newFolderButton.setToolTipText(newFolderButtonToolTipText);
-            newFolderButton.setText(newFolderButtonText);
-            topButtonPanel.add(newFolderButton);
-        }
-        JButton deleteFileButton = new JButton(deleteFileButtonText);
-        deleteFileButton.setName("GTKFileChooser.deleteFileButton");
-        deleteFileButton.setMnemonic(deleteFileButtonMnemonic);
-        deleteFileButton.setToolTipText(deleteFileButtonToolTipText);
-        deleteFileButton.setEnabled(false);
-        topButtonPanel.add(deleteFileButton);
-
-        RenameFileAction rfa = new RenameFileAction();
-        JButton renameFileButton = new JButton(rfa);
-        if (readOnly) {
-            rfa.setEnabled(false);
-        }
-        renameFileButton.setText(renameFileButtonText);
-        renameFileButton.setName("GTKFileChooser.renameFileButton");
-        renameFileButton.setMnemonic(renameFileButtonMnemonic);
-        renameFileButton.setToolTipText(renameFileButtonToolTipText);
-        topButtonPanel.add(renameFileButton);
-
-        fc.add(topButtonPanel, BorderLayout.NORTH);
-
-
-        JPanel interior = new JPanel();
-        interior.setBorder(new EmptyBorder(0, 10, 10, 10));
-        interior.setName("GTKFileChooser.interiorPanel");
-        align(interior);
-        interior.setLayout(new BoxLayout(interior, BoxLayout.PAGE_AXIS));
-
-        fc.add(interior, BorderLayout.CENTER);
-
-        JPanel comboBoxPanel = new JPanel(new FlowLayout(FlowLayout.CENTER,
-                                                         0, 0) {
-            public void layoutContainer(Container target) {
-                super.layoutContainer(target);
-                JComboBox comboBox = directoryComboBox;
-                if (comboBox.getWidth() > target.getWidth()) {
-                    comboBox.setBounds(0, comboBox.getY(), target.getWidth(),
-                                       comboBox.getHeight());
-                }
-            }
-        });
-        comboBoxPanel.setBorder(new EmptyBorder(0, 0, 4, 0));
-        comboBoxPanel.setName("GTKFileChooser.directoryComboBoxPanel");
-        // CurrentDir ComboBox
-        directoryComboBoxModel = createDirectoryComboBoxModel(fc);
-        directoryComboBox = new JComboBox(directoryComboBoxModel);
-        directoryComboBox.setName("GTKFileChooser.directoryComboBox");
-        directoryComboBox.putClientProperty( "JComboBox.lightweightKeyboardNavigation", "Lightweight" );
-        directoryComboBox.addActionListener(directoryComboBoxAction);
-        directoryComboBox.setMaximumRowCount(8);
-        comboBoxPanel.add(directoryComboBox);
-        interior.add(comboBoxPanel);
-
-
-        // CENTER: left, right, accessory
-        JPanel centerPanel = new JPanel(new BorderLayout());
-        centerPanel.setName("GTKFileChooser.centerPanel");
-
-        // SPLIT PANEL: left, right
-        JSplitPane splitPanel = new JSplitPane();
-        splitPanel.setName("GTKFileChooser.splitPanel");
-        splitPanel.setDividerLocation((PREF_SIZE.width-8)/2);
-
-        // left panel - Filter & directoryList
-        JPanel leftPanel = new JPanel(new GridBagLayout());
-        leftPanel.setName("GTKFileChooser.directoryListPanel");
-
-        // Add the Directory List
-        // Create a label that looks like button (should be a table header)
-        TableCellRenderer headerRenderer = new JTableHeader().getDefaultRenderer();
-        JLabel directoryListLabel =
-            (JLabel)headerRenderer.getTableCellRendererComponent(null, foldersLabelText,
-                                                                     false, false, 0, 0);
-        directoryListLabel.setName("GTKFileChooser.directoryListLabel");
-        leftPanel.add(directoryListLabel, new GridBagConstraints(
-                          0, 0, 1, 1, 1, 0, GridBagConstraints.WEST,
-                          GridBagConstraints.HORIZONTAL,
-                          new Insets(0, 0, 0, 0), 0, 0));
-        leftPanel.add(createDirectoryList(), new GridBagConstraints(
-                          0, 1, 1, 1, 1, 1, GridBagConstraints.EAST,
-                          GridBagConstraints.BOTH,
-                          new Insets(0, 0, 0, 0), 0, 0));
-        directoryListLabel.setDisplayedMnemonic(foldersLabelMnemonic);
-        directoryListLabel.setLabelFor(directoryList);
-
-        // create files list
-        rightPanel = new JPanel(new GridBagLayout());
-        rightPanel.setName("GTKFileChooser.fileListPanel");
-
-        headerRenderer = new JTableHeader().getDefaultRenderer();
-        JLabel fileListLabel =
-            (JLabel)headerRenderer.getTableCellRendererComponent(null, filesLabelText,
-                                                                     false, false, 0, 0);
-        fileListLabel.setName("GTKFileChooser.fileListLabel");
-        rightPanel.add(fileListLabel, new GridBagConstraints(
-                          0, 0, 1, 1, 1, 0, GridBagConstraints.WEST,
-                          GridBagConstraints.HORIZONTAL,
-                          new Insets(0, 0, 0, 0), 0, 0));
-        rightPanel.add(createFilesList(), new GridBagConstraints(
-                          0, 1, 1, 1, 1, 1, GridBagConstraints.EAST,
-                          GridBagConstraints.BOTH,
-                          new Insets(0, 0, 0, 0), 0, 0));
-        fileListLabel.setDisplayedMnemonic(filesLabelMnemonic);
-        fileListLabel.setLabelFor(fileList);
-
-        splitPanel.add(leftPanel,  leftToRight ? JSplitPane.LEFT : JSplitPane.RIGHT);
-        splitPanel.add(rightPanel, leftToRight ? JSplitPane.RIGHT : JSplitPane.LEFT);
-        centerPanel.add(splitPanel, BorderLayout.CENTER);
-
-        JComponent accessoryPanel = getAccessoryPanel();
-        JComponent accessory = fc.getAccessory();
-        if (accessoryPanel != null) {
-            if (accessory == null) {
-                accessoryPanel.setPreferredSize(ZERO_ACC_SIZE);
-                accessoryPanel.setMaximumSize(ZERO_ACC_SIZE);
-            } else {
-                getAccessoryPanel().add(accessory, BorderLayout.CENTER);
-                accessoryPanel.setPreferredSize(accessory.getPreferredSize());
-                accessoryPanel.setMaximumSize(MAX_SIZE);
-            }
-            align(accessoryPanel);
-            centerPanel.add(accessoryPanel, BorderLayout.AFTER_LINE_ENDS);
-        }
-        interior.add(centerPanel);
-        interior.add(Box.createRigidArea(vstrut10));
-
-        JPanel pathFieldPanel = new JPanel(new FlowLayout(FlowLayout.LEADING,
-                                                          0, 0));
-        pathFieldPanel.setBorder(new EmptyBorder(0, 0, 4, 0));
-        JLabel pathFieldLabel = new JLabel(pathLabelText);
-        pathFieldLabel.setName("GTKFileChooser.pathFieldLabel");
-        pathFieldLabel.setDisplayedMnemonic(pathLabelMnemonic);
-        align(pathFieldLabel);
-        pathFieldPanel.add(pathFieldLabel);
-        pathFieldPanel.add(Box.createRigidArea(hstrut3));
-
-        File currentDirectory = fc.getCurrentDirectory();
-        String curDirName = null;
-        if (currentDirectory != null) {
-            curDirName = currentDirectory.getPath();
-        }
-        pathField = new JLabel(curDirName) {
-            public Dimension getMaximumSize() {
-                Dimension d = super.getMaximumSize();
-                d.height = getPreferredSize().height;
-                return d;
-            }
-        };
-        pathField.setName("GTKFileChooser.pathField");
-        align(pathField);
-        pathFieldPanel.add(pathField);
-        interior.add(pathFieldPanel);
-
-        // add the fileName field
-        fileNameTextField = new JTextField() {
-            public Dimension getMaximumSize() {
-                Dimension d = super.getMaximumSize();
-                d.height = getPreferredSize().height;
-                return d;
-            }
-        };
-
-        pathFieldLabel.setLabelFor(fileNameTextField);
-
-        Set<AWTKeyStroke> forwardTraversalKeys = fileNameTextField.getFocusTraversalKeys(
-            KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS);
-        forwardTraversalKeys = new HashSet<AWTKeyStroke>(forwardTraversalKeys);
-        forwardTraversalKeys.remove(KeyStroke.getKeyStroke(KeyEvent.VK_TAB, 0));
-        fileNameTextField.setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, forwardTraversalKeys);
-
-        fileNameTextField.setName("GTKFileChooser.fileNameTextField");
-        fileNameTextField.getActionMap().put("fileNameCompletionAction", getFileNameCompletionAction());
-        fileNameTextField.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_TAB, 0), "fileNameCompletionAction");
-        interior.add(fileNameTextField);
-
-        // Add the filter combo box
-        JPanel panel = new JPanel();
-        panel.setLayout(new FlowLayout(FlowLayout.LEADING, 0, 0));
-        panel.setBorder(new EmptyBorder(0, 0, 4, 0));
-        JLabel filterLabel = new JLabel(filterLabelText);
-        filterLabel.setName("GTKFileChooser.filterLabel");
-        filterLabel.setDisplayedMnemonic(filterLabelMnemonic);
-        panel.add(filterLabel);
-
-        filterComboBoxModel = createFilterComboBoxModel();
-        fc.addPropertyChangeListener(filterComboBoxModel);
-        filterComboBox = new JComboBox(filterComboBoxModel);
-        filterComboBox.setRenderer(createFilterComboBoxRenderer());
-        filterLabel.setLabelFor(filterComboBox);
-
-        interior.add(Box.createRigidArea(vstrut10));
-        interior.add(panel);
-        interior.add(filterComboBox);
-
-        // Add buttons
-        bottomButtonPanel = new JPanel(new FlowLayout(FlowLayout.TRAILING));
-        bottomButtonPanel.setName("GTKFileChooser.bottomButtonPanel");
-        align(bottomButtonPanel);
-
-        JPanel pnButtons = new JPanel(new GridLayout(1, 2, 5, 0));
-
-        JButton cancelButton = getCancelButton(fc);
-        align(cancelButton);
-        cancelButton.setMargin(buttonMargin);
-        pnButtons.add(cancelButton);
-
-        JButton approveButton = getApproveButton(fc);
-        align(approveButton);
-        approveButton.setMargin(buttonMargin);
-        pnButtons.add(approveButton);
-
-        bottomButtonPanel.add(pnButtons);
-
-        if (fc.getControlButtonsAreShown()) {
-            fc.add(bottomButtonPanel, BorderLayout.SOUTH);
-        }
-    }
-
-    protected void installListeners(JFileChooser fc) {
-        super.installListeners(fc);
-
-        gtkFCPropertyChangeListener = new GTKFCPropertyChangeListener();
-        fc.addPropertyChangeListener(gtkFCPropertyChangeListener);
-    }
-
-    private int getMnemonic(String key, Locale l) {
-        return SwingUtilities2.getUIDefaultsInt(key, l);
-    }
-
-    protected void uninstallListeners(JFileChooser fc) {
-        super.uninstallListeners(fc);
-
-        if (gtkFCPropertyChangeListener != null) {
-            fc.removePropertyChangeListener(gtkFCPropertyChangeListener);
-        }
-    }
-
-    private class GTKFCPropertyChangeListener implements PropertyChangeListener {
-        public void propertyChange(PropertyChangeEvent e) {
-            String prop = e.getPropertyName();
-            if (prop.equals("GTKFileChooser.showDirectoryIcons")) {
-                showDirectoryIcons = Boolean.TRUE.equals(e.getNewValue());
-            } else if (prop.equals("GTKFileChooser.showFileIcons")) {
-                showFileIcons      = Boolean.TRUE.equals(e.getNewValue());
-            }
-        }
-    }
-
-    protected void installDefaults(JFileChooser fc) {
-        super.installDefaults(fc);
-        readOnly = UIManager.getBoolean("FileChooser.readOnly");
-        showDirectoryIcons =
-            Boolean.TRUE.equals(fc.getClientProperty("GTKFileChooser.showDirectoryIcons"));
-        showFileIcons =
-            Boolean.TRUE.equals(fc.getClientProperty("GTKFileChooser.showFileIcons"));
-    }
-
-    protected void installIcons(JFileChooser fc) {
-        directoryIcon    = UIManager.getIcon("FileView.directoryIcon");
-        fileIcon         = UIManager.getIcon("FileView.fileIcon");
-    }
-
-    protected void installStrings(JFileChooser fc) {
-        super.installStrings(fc);
-
-        Locale l = fc.getLocale();
-
-        newFolderDialogText = UIManager.getString("FileChooser.newFolderDialogText", l);
-        newFolderErrorText = UIManager.getString("FileChooser.newFolderErrorText",l);
-        newFolderErrorSeparator = UIManager.getString("FileChooser.newFolderErrorSeparator",l);
-        newFolderButtonText = UIManager.getString("FileChooser.newFolderButtonText", l);
-        newFolderNoDirectoryErrorTitleText = UIManager.getString("FileChooser.newFolderNoDirectoryErrorTitleText", l);
-        newFolderNoDirectoryErrorText = UIManager.getString("FileChooser.newFolderNoDirectoryErrorText", l);
-        deleteFileButtonText = UIManager.getString("FileChooser.deleteFileButtonText", l);
-        renameFileButtonText = UIManager.getString("FileChooser.renameFileButtonText", l);
-
-        newFolderButtonMnemonic = getMnemonic("FileChooser.newFolderButtonMnemonic", l);
-        deleteFileButtonMnemonic = getMnemonic("FileChooser.deleteFileButtonMnemonic", l);
-        renameFileButtonMnemonic = getMnemonic("FileChooser.renameFileButtonMnemonic", l);
-
-        newFolderButtonToolTipText = UIManager.getString("FileChooser.newFolderButtonToolTipText", l);
-        deleteFileButtonToolTipText = UIManager.getString("FileChooser.deleteFileButtonToolTipText", l);
-        renameFileButtonToolTipText = UIManager.getString("FileChooser.renameFileButtonToolTipText", l);
-
-        renameFileDialogText = UIManager.getString("FileChooser.renameFileDialogText", l);
-        renameFileErrorTitle = UIManager.getString("FileChooser.renameFileErrorTitle", l);
-        renameFileErrorText = UIManager.getString("FileChooser.renameFileErrorText", l);
-
-        foldersLabelText = UIManager.getString("FileChooser.foldersLabelText",l);
-        foldersLabelMnemonic = getMnemonic("FileChooser.foldersLabelMnemonic", l);
-
-        filesLabelText = UIManager.getString("FileChooser.filesLabelText",l);
-        filesLabelMnemonic = getMnemonic("FileChooser.filesLabelMnemonic", l);
-
-        pathLabelText = UIManager.getString("FileChooser.pathLabelText",l);
-        pathLabelMnemonic = getMnemonic("FileChooser.pathLabelMnemonic", l);
-
-        filterLabelText = UIManager.getString("FileChooser.filterLabelText", l);
-        filterLabelMnemonic = UIManager.getInt("FileChooser.filterLabelMnemonic");
-    }
-
-    protected void uninstallStrings(JFileChooser fc) {
-        super.uninstallStrings(fc);
-
-        newFolderButtonText = null;
-        deleteFileButtonText = null;
-        renameFileButtonText = null;
-
-        newFolderButtonToolTipText = null;
-        deleteFileButtonToolTipText = null;
-        renameFileButtonToolTipText = null;
-
-        renameFileDialogText = null;
-        renameFileErrorTitle = null;
-        renameFileErrorText = null;
-
-        foldersLabelText = null;
-        filesLabelText = null;
-
-        pathLabelText = null;
-
-        newFolderDialogText = null;
-        newFolderErrorText = null;
-        newFolderErrorSeparator = null;
-    }
-
-    protected JScrollPane createFilesList() {
-        fileList = new JList();
-        fileList.setName("GTKFileChooser.fileList");
-        fileList.putClientProperty(AccessibleContext.ACCESSIBLE_NAME_PROPERTY, filesLabelText);
-
-        if (getFileChooser().isMultiSelectionEnabled()) {
-            fileList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
-        } else {
-            fileList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
-        }
-
-        fileList.setModel(new GTKFileListModel());
-        fileList.getSelectionModel().removeSelectionInterval(0, 0);
-        fileList.setCellRenderer(new FileCellRenderer());
-        fileList.addListSelectionListener(createListSelectionListener(getFileChooser()));
-        fileList.addMouseListener(createDoubleClickListener(getFileChooser(), fileList));
-        align(fileList);
-        JScrollPane scrollpane = new JScrollPane(fileList);
-    scrollpane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
-        scrollpane.setName("GTKFileChooser.fileListScrollPane");
-        scrollpane.setPreferredSize(prefListSize);
-        scrollpane.setMaximumSize(MAX_SIZE);
-        align(scrollpane);
-        return scrollpane;
-    }
-
-    protected JScrollPane createDirectoryList() {
-        directoryList = new JList();
-        directoryList.setName("GTKFileChooser.directoryList");
-        directoryList.putClientProperty(AccessibleContext.ACCESSIBLE_NAME_PROPERTY, foldersLabelText);
-        align(directoryList);
-
-        directoryList.setCellRenderer(new DirectoryCellRenderer());
-        directoryListModel = new GTKDirectoryListModel();
-        directoryList.getSelectionModel().removeSelectionInterval(0, 0);
-        directoryList.setModel(directoryListModel);
-        directoryList.addMouseListener(createDoubleClickListener(getFileChooser(), directoryList));
-        directoryList.addListSelectionListener(createListSelectionListener(getFileChooser()));
-
-        JScrollPane scrollpane = new JScrollPane(directoryList);
-    scrollpane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
-        scrollpane.setName("GTKFileChooser.directoryListScrollPane");
-        scrollpane.setMaximumSize(MAX_SIZE);
-        scrollpane.setPreferredSize(prefListSize);
-        align(scrollpane);
-        return scrollpane;
-    }
-
-    protected void createModel() {
-        model = new GTKDirectoryModel();
-    }
-
-    public BasicDirectoryModel getModel() {
-        return model;
-    }
-
-    public Action getApproveSelectionAction() {
-        return approveSelectionAction;
-    }
-
-    private class GTKDirectoryModel extends BasicDirectoryModel {
-        FileSystemView fsv;
-        private Comparator<File> fileComparator = new Comparator<File>() {
-            public int compare(File o, File o1) {
-                return fsv.getSystemDisplayName(o).compareTo(fsv.getSystemDisplayName(o1));
-            }
-        };
-
-        public GTKDirectoryModel() {
-            super(getFileChooser());
-        }
-
-        protected void sort(Vector<? extends File> v) {
-            fsv = getFileChooser().getFileSystemView();
-            Collections.sort(v, fileComparator);
-        }
-    }
-
-    protected class GTKDirectoryListModel extends AbstractListModel implements ListDataListener {
-        File curDir;
-        public GTKDirectoryListModel() {
-            getModel().addListDataListener(this);
-            directoryChanged();
-        }
-
-        public int getSize() {
-            return getModel().getDirectories().size() + 1;
-        }
-
-        public Object getElementAt(int index) {
-            return index > 0 ? getModel().getDirectories().elementAt(index - 1):
-                    curDir;
-        }
-
-        public void intervalAdded(ListDataEvent e) {
-            fireIntervalAdded(this, e.getIndex0(), e.getIndex1());
-        }
-
-        public void intervalRemoved(ListDataEvent e) {
-            fireIntervalRemoved(this, e.getIndex0(), e.getIndex1());
-        }
-
-        // PENDING - this is inefficient - should sent out
-        // incremental adjustment values instead of saying that the
-        // whole list has changed.
-        public void fireContentsChanged() {
-            fireContentsChanged(this, 0, getModel().getDirectories().size()-1);
-        }
-
-        // PENDING - fire the correct interval changed - currently sending
-        // out that everything has changed
-        public void contentsChanged(ListDataEvent e) {
-            fireContentsChanged();
-        }
-
-        private void directoryChanged() {
-            curDir = getFileChooser().getFileSystemView().createFileObject(
-                    getFileChooser().getCurrentDirectory(), ".");
-        }
-    }
-
-    protected class GTKFileListModel extends AbstractListModel implements ListDataListener {
-        public GTKFileListModel() {
-            getModel().addListDataListener(this);
-        }
-
-        public int getSize() {
-            return getModel().getFiles().size();
-        }
-
-        public boolean contains(Object o) {
-            return getModel().getFiles().contains(o);
-        }
-
-        public int indexOf(Object o) {
-            return getModel().getFiles().indexOf(o);
-        }
-
-        public Object getElementAt(int index) {
-            return getModel().getFiles().elementAt(index);
-        }
-
-        public void intervalAdded(ListDataEvent e) {
-            fireIntervalAdded(this, e.getIndex0(), e.getIndex1());
-        }
-
-        public void intervalRemoved(ListDataEvent e) {
-            fireIntervalRemoved(this, e.getIndex0(), e.getIndex1());
-        }
-
-        // PENDING - this is inefficient - should sent out
-        // incremental adjustment values instead of saying that the
-        // whole list has changed.
-        public void fireContentsChanged() {
-            fireContentsChanged(this, 0, getModel().getFiles().size()-1);
-        }
-
-        // PENDING - fire the interval changed
-        public void contentsChanged(ListDataEvent e) {
-            fireContentsChanged();
-        }
-    }
-
-
-    protected class FileCellRenderer extends DefaultListCellRenderer  {
-        public Component getListCellRendererComponent(JList list, Object value, int index,
-                                                      boolean isSelected, boolean cellHasFocus) {
-
-            super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
-            setText(getFileChooser().getName((File) value));
-            if (showFileIcons) {
-                setIcon(getFileChooser().getIcon((File)value));
-            }
-            return this;
-        }
-    }
-
-    protected class DirectoryCellRenderer extends DefaultListCellRenderer  {
-        public Component getListCellRendererComponent(JList list, Object value, int index,
-                                                      boolean isSelected, boolean cellHasFocus) {
-
-            super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
-
-            if (showDirectoryIcons) {
-                setIcon(getFileChooser().getIcon((File)value));
-                setText(getFileChooser().getName((File)value));
-            } else {
-                setText(getFileChooser().getName((File)value) + "/");
-            }
-            return this;
-        }
-    }
-
-    public Dimension getPreferredSize(JComponent c) {
-        Dimension prefSize = new Dimension(PREF_SIZE);
-        JComponent accessory = getFileChooser().getAccessory();
-        if (accessory != null) {
-            prefSize.width += accessory.getPreferredSize().width + 20;
-        }
-        Dimension d = c.getLayout().preferredLayoutSize(c);
-        if (d != null) {
-            return new Dimension(d.width < prefSize.width ? prefSize.width : d.width,
-                                 d.height < prefSize.height ? prefSize.height : d.height);
-        } else {
-            return prefSize;
-        }
-    }
-
-    public Dimension getMinimumSize(JComponent x)  {
-        return new Dimension(MIN_SIZE);
-    }
-
-    public Dimension getMaximumSize(JComponent x) {
-        return new Dimension(Integer.MAX_VALUE, Integer.MAX_VALUE);
-    }
-
-    protected void align(JComponent c) {
-        c.setAlignmentX(JComponent.LEFT_ALIGNMENT);
-        c.setAlignmentY(JComponent.TOP_ALIGNMENT);
-    }
-
-    public Action getNewFolderAction() {
-        if (newFolderAction == null) {
-            newFolderAction = new NewFolderAction();
-            newFolderAction.setEnabled(!readOnly);
-        }
-        return newFolderAction;
-    }
-
-    //
-    // DataModel for DirectoryComboxbox
-    //
-    protected DirectoryComboBoxModel createDirectoryComboBoxModel(JFileChooser fc) {
-        return new DirectoryComboBoxModel();
-    }
-
-    /**
-     * Data model for a type-face selection combo-box.
-     */
-    protected class DirectoryComboBoxModel extends AbstractListModel implements ComboBoxModel {
-        Vector<File> directories = new Vector<File>();
-        File selectedDirectory = null;
-        JFileChooser chooser = getFileChooser();
-        FileSystemView fsv = chooser.getFileSystemView();
-
-        public DirectoryComboBoxModel() {
-            // Add the current directory to the model, and make it the
-            // selectedDirectory
-            File dir = getFileChooser().getCurrentDirectory();
-            if (dir != null) {
-                addItem(dir);
-            }
-        }
-
-        /**
-         * Adds the directory to the model and sets it to be selected,
-         * additionally clears out the previous selected directory and
-         * the paths leading up to it, if any.
-         */
-        private void addItem(File directory) {
-
-            if (directory == null) {
-                return;
-            }
-
-            int oldSize = directories.size();
-            directories.clear();
-            if (oldSize > 0) {
-                fireIntervalRemoved(this, 0, oldSize);
-            }
-
-            // Get the canonical (full) path. This has the side
-            // benefit of removing extraneous chars from the path,
-            // for example /foo/bar/ becomes /foo/bar
-            File canonical;
-            try {
-                canonical = fsv.createFileObject(ShellFolder.getNormalizedFile(directory).getPath());
-            } catch (IOException e) {
-                // Maybe drive is not ready. Can't abort here.
-                canonical = directory;
-            }
-
-            // create File instances of each directory leading up to the top
-            File f = canonical;
-            do {
-                directories.add(f);
-            } while ((f = f.getParentFile()) != null);
-            int newSize = directories.size();
-            if (newSize > 0) {
-                fireIntervalAdded(this, 0, newSize);
-            }
-            setSelectedItem(canonical);
-        }
-
-        public void setSelectedItem(Object selectedDirectory) {
-            this.selectedDirectory = (File)selectedDirectory;
-            fireContentsChanged(this, -1, -1);
-        }
-
-        public Object getSelectedItem() {
-            return selectedDirectory;
-        }
-
-        public int getSize() {
-            return directories.size();
-        }
-
-        public Object getElementAt(int index) {
-            return directories.elementAt(index);
-        }
-    }
-
-    /**
-     * Acts when DirectoryComboBox has changed the selected item.
-     */
-    protected class DirectoryComboBoxAction extends AbstractAction {
-        protected DirectoryComboBoxAction() {
-            super("DirectoryComboBoxAction");
-        }
-
-        public void actionPerformed(ActionEvent e) {
-            File f = (File)directoryComboBox.getSelectedItem();
-            getFileChooser().setCurrentDirectory(f);
-        }
-    }
-
-    /**
-     * Creates a new folder.
-     */
-    private class NewFolderAction extends AbstractAction {
-        protected NewFolderAction() {
-            super(FilePane.ACTION_NEW_FOLDER);
-        }
-        public void actionPerformed(ActionEvent e) {
-            if (readOnly) {
-                return;
-            }
-            JFileChooser fc = getFileChooser();
-            File currentDirectory = fc.getCurrentDirectory();
-            String dirName = JOptionPane.showInputDialog(fc,
-                    newFolderDialogText, newFolderButtonText,
-                    JOptionPane.PLAIN_MESSAGE);
-
-            if (dirName != null) {
-                if (!currentDirectory.exists()) {
-                    JOptionPane.showMessageDialog(fc,
-                            MessageFormat.format(newFolderNoDirectoryErrorText, dirName),
-                            newFolderNoDirectoryErrorTitleText, JOptionPane.ERROR_MESSAGE);
-                    return;
-                }
-
-                File newDir = fc.getFileSystemView().createFileObject
-                        (currentDirectory, dirName);
-                if (newDir == null || !newDir.mkdir()) {
-                    JOptionPane.showMessageDialog(fc,
-                            newFolderErrorText + newFolderErrorSeparator + " \"" +
-                            dirName + "\"",
-                            newFolderErrorText, JOptionPane.ERROR_MESSAGE);
-                }
-                fc.rescanCurrentDirectory();
-            }
-        }
-    }
-
-    private class GTKApproveSelectionAction extends ApproveSelectionAction {
-        public void actionPerformed(ActionEvent e) {
-            if (isDirectorySelected()) {
-                File dir = getDirectory();
-                try {
-                    // Strip trailing ".."
-                    if (dir != null) {
-                        dir = ShellFolder.getNormalizedFile(dir);
-                    }
-                } catch (IOException ex) {
-                    // Ok, use f as is
-                }
-                if (getFileChooser().getCurrentDirectory().equals(dir)) {
-                    directoryList.clearSelection();
-                    fileList.clearSelection();
-                    ListSelectionModel sm = fileList.getSelectionModel();
-                    if (sm instanceof DefaultListSelectionModel) {
-                        ((DefaultListSelectionModel)sm).moveLeadSelectionIndex(0);
-                        sm.setAnchorSelectionIndex(0);
-                    }
-                    rescanCurrentDirectory(getFileChooser());
-                    return;
-                }
-            }
-            super.actionPerformed(e);
-        }
-    }
-
-    /**
-     * Renames file
-     */
-    private class RenameFileAction extends AbstractAction {
-        protected RenameFileAction() {
-            super(FilePane.ACTION_EDIT_FILE_NAME);
-        }
-        public void actionPerformed(ActionEvent e) {
-            if (getFileName().equals("")) {
-                return;
-            }
-            JFileChooser fc = getFileChooser();
-            File currentDirectory = fc.getCurrentDirectory();
-            String newFileName = (String) JOptionPane.showInputDialog
-                   (fc, new MessageFormat(renameFileDialogText).format
-                           (new Object[] { getFileName() }),
-                           renameFileButtonText, JOptionPane.PLAIN_MESSAGE, null, null,
-                           getFileName());
-
-            if (newFileName != null) {
-                File oldFile = fc.getFileSystemView().createFileObject
-                        (currentDirectory, getFileName());
-                File newFile = fc.getFileSystemView().createFileObject
-                        (currentDirectory, newFileName);
-                if (oldFile == null || newFile == null ||
-                        !getModel().renameFile(oldFile, newFile)) {
-                    JOptionPane.showMessageDialog(fc,
-                            new MessageFormat(renameFileErrorText).
-                            format(new Object[] { getFileName(), newFileName}),
-                            renameFileErrorTitle, JOptionPane.ERROR_MESSAGE);
-                } else {
-                    setFileName(getFileChooser().getName(newFile));
-                    fc.rescanCurrentDirectory();
-                }
-            }
-        }
-    }
-
-    //
-    // Renderer for Filter ComboBox
-    //
-    protected FilterComboBoxRenderer createFilterComboBoxRenderer() {
-        return new FilterComboBoxRenderer();
-    }
-
-    /**
-     * Render different filters
-     */
-    public class FilterComboBoxRenderer extends DefaultListCellRenderer implements UIResource {
-        public String getName() {
-            // As SynthComboBoxRenderer's are asked for a size BEFORE they
-            // are parented getName is overriden to force the name to be
-            // ComboBox.renderer if it isn't set. If we didn't do this the
-            // wrong style could be used for size calculations.
-            String name = super.getName();
-            if (name == null) {
-                return "ComboBox.renderer";
-            }
-            return name;
-        }
-
-        public Component getListCellRendererComponent(JList list, Object value,
-                                                      int index, boolean isSelected,
-                                                      boolean cellHasFocus) {
-
-            super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
-
-            setName("ComboBox.listRenderer");
-
-            if (value != null) {
-                if (value instanceof FileFilter) {
-                    setText(((FileFilter) value).getDescription());
-                }
-            } else {
-                setText("");
-            }
-
-            return this;
-        }
-    }
-
-    //
-    // DataModel for Filter Combobox
-    //
-    protected FilterComboBoxModel createFilterComboBoxModel() {
-        return new FilterComboBoxModel();
-    }
-
-    /**
-     * Data model for filter combo-box.
-     */
-    protected class FilterComboBoxModel extends AbstractListModel
-            implements ComboBoxModel, PropertyChangeListener {
-        protected FileFilter[] filters;
-
-        protected FilterComboBoxModel() {
-            super();
-            filters = getFileChooser().getChoosableFileFilters();
-        }
-
-        public void propertyChange(PropertyChangeEvent e) {
-            String prop = e.getPropertyName();
-            if (prop == JFileChooser.CHOOSABLE_FILE_FILTER_CHANGED_PROPERTY) {
-                filters = (FileFilter[]) e.getNewValue();
-                fireContentsChanged(this, -1, -1);
-            } else if (prop == JFileChooser.FILE_FILTER_CHANGED_PROPERTY) {
-                fireContentsChanged(this, -1, -1);
-            }
-        }
-
-        public void setSelectedItem(Object filter) {
-            if (filter != null) {
-                getFileChooser().setFileFilter((FileFilter) filter);
-                fireContentsChanged(this, -1, -1);
-            }
-        }
-
-        public Object getSelectedItem() {
-            // Ensure that the current filter is in the list.
-            // NOTE: we shouldnt' have to do this, since JFileChooser adds
-            // the filter to the choosable filters list when the filter
-            // is set. Lets be paranoid just in case someone overrides
-            // setFileFilter in JFileChooser.
-            FileFilter currentFilter = getFileChooser().getFileFilter();
-            boolean found = false;
-            if (currentFilter != null) {
-                for (FileFilter filter : filters) {
-                    if (filter == currentFilter) {
-                        found = true;
-                    }
-                }
-                if (found == false) {
-                    getFileChooser().addChoosableFileFilter(currentFilter);
-                }
-            }
-            return getFileChooser().getFileFilter();
-        }
-
-        public int getSize() {
-            if (filters != null) {
-                return filters.length;
-            } else {
-                return 0;
-            }
-        }
-
-        public Object getElementAt(int index) {
-            if (index > getSize() - 1) {
-                // This shouldn't happen. Try to recover gracefully.
-                return getFileChooser().getFileFilter();
-            }
-            if (filters != null) {
-                return filters[index];
-            } else {
-                return null;
-            }
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/GTKGraphicsUtils.java b/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/GTKGraphicsUtils.java
deleted file mode 100755
index a8868ff..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/GTKGraphicsUtils.java
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * Copyright (c) 2002, 2006, 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.java.swing.plaf.gtk;
-
-import javax.swing.*;
-import javax.swing.plaf.synth.*;
-import java.awt.Color;
-import java.awt.Graphics;
-import java.awt.Rectangle;
-
-/**
- * @author Joshua Outwater
- */
-class GTKGraphicsUtils extends SynthGraphicsUtils {
-    public void paintText(SynthContext context, Graphics g, String text,
-                          int x, int y, int mnemonicIndex) {
-        if (text == null || text.length() <= 0) {
-            // We don't need to paint empty strings
-            return;
-        }
-
-        if (context.getRegion() == Region.INTERNAL_FRAME_TITLE_PANE) {
-            // Metacity handles painting of text on internal frame title,
-            // ignore this.
-            return;
-        }
-        int componentState = context.getComponentState();
-        if ((componentState & SynthConstants.DISABLED) ==
-                              SynthConstants.DISABLED){
-            Color orgColor = g.getColor();
-            g.setColor(context.getStyle().getColor(context,
-                                                   GTKColorType.WHITE));
-            x += 1;
-            y += 1;
-            super.paintText(context, g, text, x, y, mnemonicIndex);
-
-            g.setColor(orgColor);
-            x -= 1;
-            y -= 1;
-            super.paintText(context, g, text, x, y, mnemonicIndex);
-        }
-        else {
-            String themeName = GTKLookAndFeel.getGtkThemeName();
-            if (themeName != null && themeName.startsWith("blueprint") &&
-                shouldShadowText(context.getRegion(), componentState)) {
-
-                g.setColor(Color.BLACK);
-                super.paintText(context, g, text, x+1, y+1, mnemonicIndex);
-                g.setColor(Color.WHITE);
-            }
-
-            super.paintText(context, g, text, x, y, mnemonicIndex);
-        }
-    }
-
-    /**
-     * Paints text at the specified location. This will not attempt to
-     * render the text as html nor will it offset by the insets of the
-     * component.
-     *
-     * @param ss SynthContext
-     * @param g Graphics used to render string in.
-     * @param text Text to render
-     * @param bounds Bounds of the text to be drawn.
-     * @param mnemonicIndex Index to draw string at.
-     */
-    public void paintText(SynthContext context, Graphics g, String text,
-                          Rectangle bounds, int mnemonicIndex) {
-        if (text == null || text.length() <= 0) {
-            // We don't need to paint empty strings
-            return;
-        }
-
-        Region id = context.getRegion();
-        if ((id == Region.RADIO_BUTTON ||
-             id == Region.CHECK_BOX ||
-             id == Region.TABBED_PANE_TAB) &&
-            (context.getComponentState() & SynthConstants.FOCUSED) != 0)
-        {
-            JComponent source = context.getComponent();
-            if (!(source instanceof AbstractButton) ||
-                ((AbstractButton)source).isFocusPainted()) {
-
-                // The "bounds" parameter encompasses only the actual text;
-                // when drawing the focus, we need to expand that bounding
-                // box by "focus-line-width" plus "focus-padding".  Note that
-                // the layout process for these components will have already
-                // taken these values into account, so there should always
-                // be enough space allocated for drawing the focus indicator.
-                int synthState = context.getComponentState();
-                GTKStyle style = (GTKStyle)context.getStyle();
-                int focusSize =
-                    style.getClassSpecificIntValue(context,
-                                                   "focus-line-width", 1);
-                int focusPad =
-                    style.getClassSpecificIntValue(context,
-                                                   "focus-padding", 1);
-                int totalFocus = focusSize + focusPad;
-                int x = bounds.x - totalFocus;
-                int y = bounds.y - totalFocus;
-                int w = bounds.width  + (2 * totalFocus);
-                int h = bounds.height + (2 * totalFocus);
-
-                Color color = g.getColor();
-                GTKPainter.INSTANCE.paintFocus(context, g, id,
-                                               synthState, "checkbutton",
-                                               x, y, w, h);
-                g.setColor(color);
-            }
-        }
-        super.paintText(context, g, text, bounds, mnemonicIndex);
-    }
-
-    private static boolean shouldShadowText(Region id, int state) {
-        int gtkState = GTKLookAndFeel.synthStateToGTKState(id, state);
-        return((gtkState == SynthConstants.MOUSE_OVER) &&
-               (id == Region.MENU ||
-                id == Region.MENU_ITEM ||
-                id == Region.CHECK_BOX_MENU_ITEM ||
-                id == Region.RADIO_BUTTON_MENU_ITEM));
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/GTKIconFactory.java b/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/GTKIconFactory.java
deleted file mode 100755
index 8850b51..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/GTKIconFactory.java
+++ /dev/null
@@ -1,351 +0,0 @@
-/*
- * Copyright (c) 2002, 2006, 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.java.swing.plaf.gtk;
-
-import java.util.*;
-import javax.swing.plaf.synth.*;
-import java.awt.*;
-import java.awt.image.BufferedImage;
-import java.lang.reflect.*;
-import javax.swing.*;
-import javax.swing.plaf.*;
-import sun.swing.plaf.synth.*;
-import com.sun.java.swing.plaf.gtk.GTKConstants.ArrowType;
-import com.sun.java.swing.plaf.gtk.GTKConstants.ExpanderStyle;
-import com.sun.java.swing.plaf.gtk.GTKConstants.Orientation;
-import com.sun.java.swing.plaf.gtk.GTKConstants.ShadowType;
-
-/**
- */
-class GTKIconFactory {
-    static final int CHECK_ICON_EXTRA_INSET        = 1;
-    static final int DEFAULT_ICON_SPACING          = 2;
-    static final int DEFAULT_ICON_SIZE             = 13;
-    static final int DEFAULT_TOGGLE_MENU_ITEM_SIZE = 12; // For pre-gtk2.4
-
-    private static final String RADIO_BUTTON_ICON    = "paintRadioButtonIcon";
-    private static final String CHECK_BOX_ICON       = "paintCheckBoxIcon";
-    private static final String MENU_ARROW_ICON      = "paintMenuArrowIcon";
-    private static final String CHECK_BOX_MENU_ITEM_CHECK_ICON =
-                                      "paintCheckBoxMenuItemCheckIcon";
-    private static final String RADIO_BUTTON_MENU_ITEM_CHECK_ICON =
-                                      "paintRadioButtonMenuItemCheckIcon";
-    private static final String TREE_EXPANDED_ICON = "paintTreeExpandedIcon";
-    private static final String TREE_COLLAPSED_ICON = "paintTreeCollapsedIcon";
-    private static final String ASCENDING_SORT_ICON = "paintAscendingSortIcon";
-    private static final String DESCENDING_SORT_ICON = "paintDescendingSortIcon";
-    private static final String TOOL_BAR_HANDLE_ICON = "paintToolBarHandleIcon";
-
-    private static Map<String, DelegatingIcon> iconsPool =
-            Collections.synchronizedMap(new HashMap<String, DelegatingIcon>());
-
-    private static DelegatingIcon getIcon(String methodName) {
-        DelegatingIcon result = iconsPool.get(methodName);
-        if (result == null) {
-            if (methodName == TREE_COLLAPSED_ICON ||
-                methodName == TREE_EXPANDED_ICON)
-            {
-                result = new SynthExpanderIcon(methodName);
-
-            } else if (methodName == TOOL_BAR_HANDLE_ICON) {
-                result = new ToolBarHandleIcon();
-
-            } else if (methodName == MENU_ARROW_ICON) {
-                result = new MenuArrowIcon();
-
-            } else {
-                result = new DelegatingIcon(methodName);
-            }
-            iconsPool.put(methodName, result);
-        }
-        return result;
-    }
-
-    //
-    // Sort arrow
-    //
-    public static Icon getAscendingSortIcon() {
-        return getIcon(ASCENDING_SORT_ICON);
-    }
-
-    public static Icon getDescendingSortIcon() {
-        return getIcon(DESCENDING_SORT_ICON);
-    }
-
-    //
-    // Tree methods
-    //
-    public static SynthIcon getTreeExpandedIcon() {
-        return getIcon(TREE_EXPANDED_ICON);
-    }
-
-    public static SynthIcon getTreeCollapsedIcon() {
-        return getIcon(TREE_COLLAPSED_ICON);
-    }
-
-    //
-    // Radio button
-    //
-    public static SynthIcon getRadioButtonIcon() {
-        return getIcon(RADIO_BUTTON_ICON);
-    }
-
-    //
-    // CheckBox
-    //
-    public static SynthIcon getCheckBoxIcon() {
-        return getIcon(CHECK_BOX_ICON);
-    }
-
-    //
-    // Menus
-    //
-    public static SynthIcon getMenuArrowIcon() {
-        return getIcon(MENU_ARROW_ICON);
-    }
-
-    public static SynthIcon getCheckBoxMenuItemCheckIcon() {
-        return getIcon(CHECK_BOX_MENU_ITEM_CHECK_ICON);
-    }
-
-    public static SynthIcon getRadioButtonMenuItemCheckIcon() {
-        return getIcon(RADIO_BUTTON_MENU_ITEM_CHECK_ICON);
-    }
-
-    //
-    // ToolBar Handle
-    //
-    public static SynthIcon getToolBarHandleIcon() {
-        return getIcon(TOOL_BAR_HANDLE_ICON);
-    }
-
-    static void resetIcons() {
-        synchronized (iconsPool) {
-            for (DelegatingIcon di: iconsPool.values()) {
-                di.resetIconDimensions();
-            }
-        }
-    }
-
-    private static class DelegatingIcon extends SynthIcon implements
-                                   UIResource {
-        private static final Class[] PARAM_TYPES = new Class[] {
-            SynthContext.class, Graphics.class, int.class,
-            int.class, int.class, int.class, int.class
-        };
-
-        private Object method;
-        int iconDimension = -1;
-
-        DelegatingIcon(String methodName ){
-            this.method = methodName;
-        }
-
-        public void paintIcon(SynthContext context, Graphics g,
-                              int x, int y, int w, int h) {
-            if (context != null) {
-                GTKPainter.INSTANCE.paintIcon(context, g,
-                        getMethod(), x, y, w, h);
-            }
-        }
-
-        public int getIconWidth(SynthContext context) {
-            return getIconDimension(context);
-        }
-
-        public int getIconHeight(SynthContext context) {
-            return getIconDimension(context);
-        }
-
-        void resetIconDimensions() {
-            iconDimension = -1;
-        }
-
-        protected Method getMethod() {
-            if (method instanceof String) {
-                method = resolveMethod((String)method);
-            }
-            return (Method)method;
-        }
-
-        protected Class[] getMethodParamTypes() {
-            return PARAM_TYPES;
-        }
-
-        private Method resolveMethod(String name) {
-            try {
-                return GTKPainter.class.getMethod(name, getMethodParamTypes());
-            } catch (NoSuchMethodException e) {
-                assert false;
-            }
-            return null;
-        }
-
-        int getIconDimension(SynthContext context) {
-            if (iconDimension >= 0) {
-                return iconDimension;
-            }
-
-            if (context == null) {
-                return DEFAULT_ICON_SIZE;
-            }
-
-            Region region = context.getRegion();
-            GTKStyle style = (GTKStyle) context.getStyle();
-            iconDimension = style.getClassSpecificIntValue(context,
-                    "indicator-size",
-                    (region == Region.CHECK_BOX_MENU_ITEM ||
-                     region == Region.RADIO_BUTTON_MENU_ITEM) ?
-                        DEFAULT_TOGGLE_MENU_ITEM_SIZE : DEFAULT_ICON_SIZE);
-
-            if (region == Region.CHECK_BOX || region == Region.RADIO_BUTTON) {
-                iconDimension += 2 * style.getClassSpecificIntValue(context,
-                        "indicator-spacing", DEFAULT_ICON_SPACING);
-            } else if (region == Region.CHECK_BOX_MENU_ITEM ||
-                       region == Region.RADIO_BUTTON_MENU_ITEM) {
-                iconDimension += 2 * CHECK_ICON_EXTRA_INSET;
-            }
-            return iconDimension;
-        }
-    }
-
-    private static class SynthExpanderIcon extends DelegatingIcon {
-        SynthExpanderIcon(String method) {
-            super(method);
-        }
-
-        public void paintIcon(SynthContext context, Graphics g, int x, int y,
-                              int w, int h) {
-            if (context != null) {
-                super.paintIcon(context, g, x, y, w, h);
-                updateSizeIfNecessary(context);
-            }
-        }
-
-        int getIconDimension(SynthContext context) {
-            updateSizeIfNecessary(context);
-            return (iconDimension == -1) ? DEFAULT_ICON_SIZE :
-                                           iconDimension;
-        }
-
-        private void updateSizeIfNecessary(SynthContext context) {
-            if (iconDimension == -1 && context != null) {
-                iconDimension = context.getStyle().getInt(context,
-                        "Tree.expanderSize", 10);
-            }
-        }
-    }
-
-    // GTK has a separate widget for the handle box, to mirror this
-    // we create a unique icon per ToolBar and lookup the style for the
-    // HandleBox.
-    private static class ToolBarHandleIcon extends DelegatingIcon {
-        private static final Class[] PARAM_TYPES = new Class[] {
-            SynthContext.class, Graphics.class, int.class,
-            int.class, int.class, int.class, int.class, Orientation.class,
-        };
-
-        private SynthStyle style;
-
-        public ToolBarHandleIcon() {
-            super(TOOL_BAR_HANDLE_ICON);
-        }
-
-        protected Class[] getMethodParamTypes() {
-            return PARAM_TYPES;
-        }
-
-        public void paintIcon(SynthContext context, Graphics g, int x, int y,
-                              int w, int h) {
-            if (context != null) {
-                JToolBar toolbar = (JToolBar)context.getComponent();
-                Orientation orientation =
-                        (toolbar.getOrientation() == JToolBar.HORIZONTAL ?
-                            Orientation.HORIZONTAL : Orientation.VERTICAL);
-
-                if (style == null) {
-                    style = SynthLookAndFeel.getStyleFactory().getStyle(
-                            context.getComponent(), GTKRegion.HANDLE_BOX);
-                }
-                context = new SynthContext(toolbar, GTKRegion.HANDLE_BOX,
-                        style, SynthConstants.ENABLED);
-
-                GTKPainter.INSTANCE.paintIcon(context, g,
-                        getMethod(), x, y, w, h, orientation);
-            }
-        }
-
-        public int getIconWidth(SynthContext context) {
-            if (context == null) {
-                return 10;
-            }
-            if (((JToolBar)context.getComponent()).getOrientation() ==
-                    JToolBar.HORIZONTAL) {
-                return 10;
-            } else {
-                return context.getComponent().getWidth();
-            }
-        }
-
-        public int getIconHeight(SynthContext context) {
-            if (context == null) {
-                return 10;
-            }
-            if (((JToolBar)context.getComponent()).getOrientation() ==
-                    JToolBar.HORIZONTAL) {
-                return context.getComponent().getHeight();
-            } else {
-                return 10;
-            }
-        }
-    }
-
-    private static class MenuArrowIcon extends DelegatingIcon {
-        private static final Class[] PARAM_TYPES = new Class[] {
-            SynthContext.class, Graphics.class, int.class,
-            int.class, int.class, int.class, int.class, ArrowType.class,
-        };
-
-        public MenuArrowIcon() {
-            super(MENU_ARROW_ICON);
-        }
-
-        protected Class[] getMethodParamTypes() {
-            return PARAM_TYPES;
-        }
-
-        public void paintIcon(SynthContext context, Graphics g, int x, int y,
-                              int w, int h) {
-            if (context != null) {
-                ArrowType arrowDir = ArrowType.RIGHT;
-                if (!context.getComponent().getComponentOrientation().isLeftToRight()) {
-                    arrowDir = ArrowType.LEFT;
-                }
-                GTKPainter.INSTANCE.paintIcon(context, g,
-                        getMethod(), x, y, w, h, arrowDir);
-            }
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/GTKLookAndFeel.java b/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/GTKLookAndFeel.java
deleted file mode 100755
index 1fe26b0..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/GTKLookAndFeel.java
+++ /dev/null
@@ -1,1739 +0,0 @@
-/*
- * Copyright (c) 2002, 2009, 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.java.swing.plaf.gtk;
-
-import java.awt.*;
-import java.awt.event.*;
-import java.beans.*;
-import java.io.File;
-import java.lang.ref.*;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import java.util.Locale;
-import javax.swing.*;
-import javax.swing.colorchooser.*;
-import javax.swing.plaf.*;
-import javax.swing.plaf.synth.*;
-import javax.swing.text.DefaultEditorKit;
-
-import com.sun.java.swing.plaf.gtk.GTKConstants.PositionType;
-import com.sun.java.swing.plaf.gtk.GTKConstants.StateType;
-import sun.awt.SunToolkit;
-import sun.awt.UNIXToolkit;
-import sun.awt.OSInfo;
-import sun.security.action.GetPropertyAction;
-import sun.swing.DefaultLayoutStyle;
-import sun.swing.SwingUtilities2;
-
-/**
- * @author Scott Violet
- */
-public class GTKLookAndFeel extends SynthLookAndFeel {
-    private static final boolean IS_22;
-
-    /**
-     * Whether or not text is drawn antialiased.  This keys off the
-     * desktop property 'gnome.Xft/Antialias' and 'gnome.Xft/RGBA'
-     * We should assume ON - or some variation of ON as no GTK desktop
-     * ships with it OFF.
-     */
-    static Object aaTextInfo;
-
-    /**
-     * Solaris, or Linux with Sun JDS in a CJK Locale.
-     * Used to determine if Sun's high quality CJK fonts are present.
-     */
-    private static boolean isSunCJK;
-
-    /*
-     * Used to override if system (desktop) text anti-aliasing settings should
-     * be used. The reasons for this are are is that currently its "off"
-     * for CJK locales which is not likely to be a good universal answer, and
-     * also its off for remote display. So this provides an unsupported
-     * way to explicitly request that it be "on".
-     */
-    private static boolean gtkAAFontSettingsCond;
-
-    /**
-     * Font to use in places where there is no widget.
-     */
-    private Font fallbackFont;
-
-    /**
-     * If true, GTKLookAndFeel is inside the <code>initialize</code>
-     * method.
-     */
-    private boolean inInitialize;
-
-    /**
-     * If true, PropertyChangeListeners have been installed for the
-     * Toolkit.
-     */
-    private boolean pclInstalled;
-
-    /**
-     * StyleFactory needs to be created only the first time.
-     */
-    private GTKStyleFactory styleFactory;
-
-    /**
-     * Cached theme name. Used by GTKGraphicsUtils
-     */
-    private static String gtkThemeName = "Default";
-
-    static {
-        // Backup for specifying the version, this isn't currently documented.
-        // If you pass in anything but 2.2 you got the 2.0 colors/look.
-        String version = AccessController.doPrivileged(
-               new GetPropertyAction("swing.gtk.version"));
-        if (version != null) {
-            IS_22 = version.equals("2.2");
-        }
-        else {
-            IS_22 = true;
-        }
-
-        String language = Locale.getDefault().getLanguage();
-        boolean cjkLocale =
-            (Locale.CHINESE.getLanguage().equals(language) ||
-             Locale.JAPANESE.getLanguage().equals(language) ||
-             Locale.KOREAN.getLanguage().equals(language));
-
-        if (cjkLocale) {
-            boolean isSunDesktop = false;
-            switch (OSInfo.getOSType()) {
-                case SOLARIS:
-                    isSunDesktop = true;
-                    break;
-
-                case LINUX:
-                    Boolean val = AccessController.doPrivileged(
-                                    new PrivilegedAction<Boolean>() {
-                                        public Boolean run() {
-                                            File f = new File("/etc/sun-release");
-                                            return Boolean.valueOf(f.exists());
-                                        }
-                                    });
-                    isSunDesktop = val.booleanValue();
-            }
-            if (isSunDesktop && !sun.java2d.SunGraphicsEnvironment.isOpenSolaris) {
-                isSunCJK = true;
-            }
-        }
-    }
-
-    /**
-     * Returns true if running on system containing at least 2.2.
-     */
-    static boolean is2_2() {
-        // NOTE: We're currently hard coding to use 2.2.
-        // If we want to support both GTK 2.0 and 2.2, we'll
-        // need to get the major/minor/micro version from the .so.
-        // Refer to bug 4912613 for details.
-        return IS_22;
-    }
-
-    /**
-     * Maps a swing constant to a GTK constant.
-     */
-    static PositionType SwingOrientationConstantToGTK(int side) {
-        switch (side) {
-        case SwingConstants.LEFT:
-            return PositionType.LEFT;
-        case SwingConstants.RIGHT:
-            return PositionType.RIGHT;
-        case SwingConstants.TOP:
-            return PositionType.TOP;
-        case SwingConstants.BOTTOM:
-            return PositionType.BOTTOM;
-        }
-        assert false : "Unknown orientation: " + side;
-        return PositionType.TOP;
-    }
-
-    /**
-     * Maps from Synth state to native GTK state using typesafe enumeration
-     * StateType.  This is only used by GTKEngine.
-     */
-    static StateType synthStateToGTKStateType(int state) {
-        StateType result;
-        switch (state) {
-            case SynthConstants.PRESSED:
-                result = StateType.ACTIVE;
-                break;
-            case SynthConstants.MOUSE_OVER:
-                result = StateType.PRELIGHT;
-                break;
-            case SynthConstants.SELECTED:
-                result = StateType.SELECTED;
-                break;
-            case SynthConstants.DISABLED:
-                result = StateType.INSENSITIVE;
-                break;
-            case SynthConstants.ENABLED:
-            default:
-                result = StateType.NORMAL;
-                break;
-        }
-        return result;
-    }
-
-    /**
-     * Maps from a Synth state to the corresponding GTK state.
-     * The GTK states are named differently than Synth's states, the
-     * following gives the mapping:
-     * <table><tr><td>Synth<td>GTK
-     * <tr><td>SynthConstants.PRESSED<td>ACTIVE
-     * <tr><td>SynthConstants.SELECTED<td>SELECTED
-     * <tr><td>SynthConstants.MOUSE_OVER<td>PRELIGHT
-     * <tr><td>SynthConstants.DISABLED<td>INSENSITIVE
-     * <tr><td>SynthConstants.ENABLED<td>NORMAL
-     * </table>
-     * Additionally some widgets are special cased.
-     */
-    static int synthStateToGTKState(Region region, int state) {
-        if ((state & SynthConstants.PRESSED) != 0) {
-            if (region == Region.RADIO_BUTTON
-                    || region == Region.CHECK_BOX
-                    || region == Region.MENU
-                    || region == Region.MENU_ITEM
-                    || region == Region.RADIO_BUTTON_MENU_ITEM
-                    || region == Region.CHECK_BOX_MENU_ITEM
-                    || region == Region.SPLIT_PANE) {
-                state = SynthConstants.MOUSE_OVER;
-            } else {
-                state = SynthConstants.PRESSED;
-            }
-
-        } else if (region == Region.TABBED_PANE_TAB) {
-            if ((state & SynthConstants.DISABLED) != 0) {
-                state = SynthConstants.DISABLED;
-            }
-            else if ((state & SynthConstants.SELECTED) != 0) {
-                state = SynthConstants.ENABLED;
-            } else {
-                state = SynthConstants.PRESSED;
-            }
-
-        } else if ((state & SynthConstants.SELECTED) != 0) {
-            if (region == Region.MENU) {
-                state = SynthConstants.MOUSE_OVER;
-            } else if (region == Region.RADIO_BUTTON ||
-                          region == Region.TOGGLE_BUTTON ||
-                          region == Region.RADIO_BUTTON_MENU_ITEM ||
-                          region == Region.CHECK_BOX_MENU_ITEM ||
-                          region == Region.CHECK_BOX ||
-                          region == Region.BUTTON) {
-                if ((state & SynthConstants.DISABLED) != 0) {
-                    state = SynthConstants.DISABLED;
-                }
-                // If the button is SELECTED and is PRELIGHT we need to
-                // make the state MOUSE_OVER otherwise we don't paint the
-                // PRELIGHT.
-                else if ((state & SynthConstants.MOUSE_OVER) != 0) {
-                    state = SynthConstants.MOUSE_OVER;
-                } else {
-                    state = SynthConstants.PRESSED;
-                }
-            } else {
-                state = SynthConstants.SELECTED;
-            }
-        }
-
-        else if ((state & SynthConstants.MOUSE_OVER) != 0) {
-            state = SynthConstants.MOUSE_OVER;
-        }
-        else if ((state & SynthConstants.DISABLED) != 0) {
-            state = SynthConstants.DISABLED;
-        }
-        else {
-            if (region == Region.SLIDER_TRACK) {
-                state = SynthConstants.PRESSED;
-            } else {
-                state = SynthConstants.ENABLED;
-            }
-        }
-        return state;
-    }
-
-    static boolean isText(Region region) {
-        // These Regions treat FOREGROUND as TEXT.
-        return (region == Region.TEXT_FIELD ||
-                region == Region.FORMATTED_TEXT_FIELD ||
-                region == Region.LIST ||
-                region == Region.PASSWORD_FIELD ||
-                region == Region.SPINNER ||
-                region == Region.TABLE ||
-                region == Region.TEXT_AREA ||
-                region == Region.TEXT_FIELD ||
-                region == Region.TEXT_PANE ||
-                region == Region.TREE);
-    }
-
-    public UIDefaults getDefaults() {
-        // We need to call super for basic's properties file.
-        UIDefaults table = super.getDefaults();
-
-        // SynthTabbedPaneUI supports rollover on tabs, GTK does not
-        table.put("TabbedPane.isTabRollover", Boolean.FALSE);
-
-        // Prevents Synth from setting text AA by itself
-        table.put("Synth.doNotSetTextAA", true);
-
-        initResourceBundle(table);
-        // For compatability with apps expecting certain defaults we'll
-        // populate the table with the values from basic.
-        initSystemColorDefaults(table);
-        initComponentDefaults(table);
-        installPropertyChangeListeners();
-        return table;
-    }
-
-    private void installPropertyChangeListeners() {
-        if(!pclInstalled) {
-            Toolkit kit = Toolkit.getDefaultToolkit();
-            WeakPCL pcl = new WeakPCL(this, kit, "gnome.Net/ThemeName");
-            kit.addPropertyChangeListener(pcl.getKey(), pcl);
-            pcl = new WeakPCL(this, kit, "gnome.Gtk/FontName");
-            kit.addPropertyChangeListener(pcl.getKey(), pcl);
-            pcl = new WeakPCL(this, kit, "gnome.Xft/DPI");
-            kit.addPropertyChangeListener(pcl.getKey(), pcl);
-
-            flushUnreferenced();
-            pclInstalled = true;
-        }
-    }
-
-    private void initResourceBundle(UIDefaults table) {
-        table.addResourceBundle("com.sun.java.swing.plaf.gtk.resources.gtk");
-    }
-
-    protected void initComponentDefaults(UIDefaults table) {
-        // For compatability with apps expecting certain defaults we'll
-        // populate the table with the values from basic.
-        super.initComponentDefaults(table);
-
-        Integer zero =  Integer.valueOf(0);
-        Object zeroBorder = new sun.swing.SwingLazyValue(
-            "javax.swing.plaf.BorderUIResource$EmptyBorderUIResource",
-            new Object[] {zero, zero, zero, zero});
-        Object focusBorder = new GTKStyle.GTKLazyValue(
-            "com.sun.java.swing.plaf.gtk.GTKPainter$ListTableFocusBorder",
-            "getUnselectedCellBorder");
-        Object focusSelectedBorder = new GTKStyle.GTKLazyValue(
-            "com.sun.java.swing.plaf.gtk.GTKPainter$ListTableFocusBorder",
-            "getSelectedCellBorder");
-        Object noFocusBorder = new GTKStyle.GTKLazyValue(
-            "com.sun.java.swing.plaf.gtk.GTKPainter$ListTableFocusBorder",
-            "getNoFocusCellBorder");
-
-        GTKStyleFactory factory = (GTKStyleFactory)getStyleFactory();
-        GTKStyle tableStyle = (GTKStyle)factory.getStyle(null, Region.TREE);
-        Color tableBg = tableStyle.getGTKColor(SynthConstants.ENABLED,
-                GTKColorType.TEXT_BACKGROUND);
-        Color tableFocusCellBg = tableStyle.getGTKColor(SynthConstants.ENABLED,
-                GTKColorType.BACKGROUND);
-        Color tableFocusCellFg = tableStyle.getGTKColor(SynthConstants.ENABLED,
-                GTKColorType.FOREGROUND);
-
-        // The following progress bar size calculations come from
-        // gtkprogressbar.c (version 2.8.20), see MIN_* constants and
-        // the gtk_progress_bar_size_request() method.
-        GTKStyle progStyle = (GTKStyle)
-            factory.getStyle(null, Region.PROGRESS_BAR);
-        int progXThickness = progStyle.getXThickness();
-        int progYThickness = progStyle.getYThickness();
-        int hProgWidth  = 150 - (progXThickness * 2);
-        int hProgHeight =  20 - (progYThickness * 2);
-        int vProgWidth  =  22 - (progXThickness * 2);
-        int vProgHeight =  80 - (progYThickness * 2);
-
-        Integer caretBlinkRate = Integer.valueOf(500);
-        Insets zeroInsets = new InsetsUIResource(0, 0, 0, 0);
-
-        Double defaultCaretAspectRatio = new Double(0.025);
-        Color caretColor = table.getColor("caretColor");
-        Color controlText = table.getColor("controlText");
-
-        Object fieldInputMap = new UIDefaults.LazyInputMap(new Object[] {
-                       "ctrl C", DefaultEditorKit.copyAction,
-                       "ctrl V", DefaultEditorKit.pasteAction,
-                       "ctrl X", DefaultEditorKit.cutAction,
-                         "COPY", DefaultEditorKit.copyAction,
-                        "PASTE", DefaultEditorKit.pasteAction,
-                          "CUT", DefaultEditorKit.cutAction,
-               "control INSERT", DefaultEditorKit.copyAction,
-                 "shift INSERT", DefaultEditorKit.pasteAction,
-                 "shift DELETE", DefaultEditorKit.cutAction,
-                   "shift LEFT", DefaultEditorKit.selectionBackwardAction,
-                "shift KP_LEFT", DefaultEditorKit.selectionBackwardAction,
-                  "shift RIGHT", DefaultEditorKit.selectionForwardAction,
-               "shift KP_RIGHT", DefaultEditorKit.selectionForwardAction,
-                    "ctrl LEFT", DefaultEditorKit.previousWordAction,
-                 "ctrl KP_LEFT", DefaultEditorKit.previousWordAction,
-                   "ctrl RIGHT", DefaultEditorKit.nextWordAction,
-                "ctrl KP_RIGHT", DefaultEditorKit.nextWordAction,
-              "ctrl shift LEFT", DefaultEditorKit.selectionPreviousWordAction,
-           "ctrl shift KP_LEFT", DefaultEditorKit.selectionPreviousWordAction,
-             "ctrl shift RIGHT", DefaultEditorKit.selectionNextWordAction,
-          "ctrl shift KP_RIGHT", DefaultEditorKit.selectionNextWordAction,
-                       "ctrl A", DefaultEditorKit.selectAllAction,
-                         "HOME", DefaultEditorKit.beginLineAction,
-                          "END", DefaultEditorKit.endLineAction,
-                   "shift HOME", DefaultEditorKit.selectionBeginLineAction,
-                    "shift END", DefaultEditorKit.selectionEndLineAction,
-                   "BACK_SPACE", DefaultEditorKit.deletePrevCharAction,
-             "shift BACK_SPACE", DefaultEditorKit.deletePrevCharAction,
-                       "ctrl H", DefaultEditorKit.deletePrevCharAction,
-                       "DELETE", DefaultEditorKit.deleteNextCharAction,
-                  "ctrl DELETE", DefaultEditorKit.deleteNextWordAction,
-              "ctrl BACK_SPACE", DefaultEditorKit.deletePrevWordAction,
-                        "RIGHT", DefaultEditorKit.forwardAction,
-                         "LEFT", DefaultEditorKit.backwardAction,
-                     "KP_RIGHT", DefaultEditorKit.forwardAction,
-                      "KP_LEFT", DefaultEditorKit.backwardAction,
-                        "ENTER", JTextField.notifyAction,
-              "ctrl BACK_SLASH", "unselect"/*DefaultEditorKit.unselectAction*/,
-               "control shift O", "toggle-componentOrientation"/*DefaultEditorKit.toggleComponentOrientation*/
-            });
-
-        Object passwordInputMap = new UIDefaults.LazyInputMap(new Object[] {
-                       "ctrl C", DefaultEditorKit.copyAction,
-                       "ctrl V", DefaultEditorKit.pasteAction,
-                       "ctrl X", DefaultEditorKit.cutAction,
-                         "COPY", DefaultEditorKit.copyAction,
-                        "PASTE", DefaultEditorKit.pasteAction,
-                          "CUT", DefaultEditorKit.cutAction,
-               "control INSERT", DefaultEditorKit.copyAction,
-                 "shift INSERT", DefaultEditorKit.pasteAction,
-                 "shift DELETE", DefaultEditorKit.cutAction,
-                   "shift LEFT", DefaultEditorKit.selectionBackwardAction,
-                "shift KP_LEFT", DefaultEditorKit.selectionBackwardAction,
-                  "shift RIGHT", DefaultEditorKit.selectionForwardAction,
-               "shift KP_RIGHT", DefaultEditorKit.selectionForwardAction,
-                    "ctrl LEFT", DefaultEditorKit.beginLineAction,
-                 "ctrl KP_LEFT", DefaultEditorKit.beginLineAction,
-                   "ctrl RIGHT", DefaultEditorKit.endLineAction,
-                "ctrl KP_RIGHT", DefaultEditorKit.endLineAction,
-              "ctrl shift LEFT", DefaultEditorKit.selectionBeginLineAction,
-           "ctrl shift KP_LEFT", DefaultEditorKit.selectionBeginLineAction,
-             "ctrl shift RIGHT", DefaultEditorKit.selectionEndLineAction,
-          "ctrl shift KP_RIGHT", DefaultEditorKit.selectionEndLineAction,
-                       "ctrl A", DefaultEditorKit.selectAllAction,
-                         "HOME", DefaultEditorKit.beginLineAction,
-                          "END", DefaultEditorKit.endLineAction,
-                   "shift HOME", DefaultEditorKit.selectionBeginLineAction,
-                    "shift END", DefaultEditorKit.selectionEndLineAction,
-                   "BACK_SPACE", DefaultEditorKit.deletePrevCharAction,
-             "shift BACK_SPACE", DefaultEditorKit.deletePrevCharAction,
-                       "ctrl H", DefaultEditorKit.deletePrevCharAction,
-                       "DELETE", DefaultEditorKit.deleteNextCharAction,
-                        "RIGHT", DefaultEditorKit.forwardAction,
-                         "LEFT", DefaultEditorKit.backwardAction,
-                     "KP_RIGHT", DefaultEditorKit.forwardAction,
-                      "KP_LEFT", DefaultEditorKit.backwardAction,
-                        "ENTER", JTextField.notifyAction,
-              "ctrl BACK_SLASH", "unselect"/*DefaultEditorKit.unselectAction*/,
-               "control shift O", "toggle-componentOrientation"/*DefaultEditorKit.toggleComponentOrientation*/
-            });
-
-        Object editorMargin = new InsetsUIResource(3,3,3,3);
-
-        Object multilineInputMap = new UIDefaults.LazyInputMap(new Object[] {
-                           "ctrl C", DefaultEditorKit.copyAction,
-                           "ctrl V", DefaultEditorKit.pasteAction,
-                           "ctrl X", DefaultEditorKit.cutAction,
-                             "COPY", DefaultEditorKit.copyAction,
-                            "PASTE", DefaultEditorKit.pasteAction,
-                              "CUT", DefaultEditorKit.cutAction,
-                   "control INSERT", DefaultEditorKit.copyAction,
-                     "shift INSERT", DefaultEditorKit.pasteAction,
-                     "shift DELETE", DefaultEditorKit.cutAction,
-                       "shift LEFT", DefaultEditorKit.selectionBackwardAction,
-                    "shift KP_LEFT", DefaultEditorKit.selectionBackwardAction,
-                      "shift RIGHT", DefaultEditorKit.selectionForwardAction,
-                   "shift KP_RIGHT", DefaultEditorKit.selectionForwardAction,
-                        "ctrl LEFT", DefaultEditorKit.previousWordAction,
-                     "ctrl KP_LEFT", DefaultEditorKit.previousWordAction,
-                       "ctrl RIGHT", DefaultEditorKit.nextWordAction,
-                    "ctrl KP_RIGHT", DefaultEditorKit.nextWordAction,
-                  "ctrl shift LEFT", DefaultEditorKit.selectionPreviousWordAction,
-               "ctrl shift KP_LEFT", DefaultEditorKit.selectionPreviousWordAction,
-                 "ctrl shift RIGHT", DefaultEditorKit.selectionNextWordAction,
-              "ctrl shift KP_RIGHT", DefaultEditorKit.selectionNextWordAction,
-                           "ctrl A", DefaultEditorKit.selectAllAction,
-                             "HOME", DefaultEditorKit.beginLineAction,
-                              "END", DefaultEditorKit.endLineAction,
-                       "shift HOME", DefaultEditorKit.selectionBeginLineAction,
-                        "shift END", DefaultEditorKit.selectionEndLineAction,
-
-                               "UP", DefaultEditorKit.upAction,
-                            "KP_UP", DefaultEditorKit.upAction,
-                             "DOWN", DefaultEditorKit.downAction,
-                          "KP_DOWN", DefaultEditorKit.downAction,
-                          "PAGE_UP", DefaultEditorKit.pageUpAction,
-                        "PAGE_DOWN", DefaultEditorKit.pageDownAction,
-                    "shift PAGE_UP", "selection-page-up",
-                  "shift PAGE_DOWN", "selection-page-down",
-               "ctrl shift PAGE_UP", "selection-page-left",
-             "ctrl shift PAGE_DOWN", "selection-page-right",
-                         "shift UP", DefaultEditorKit.selectionUpAction,
-                      "shift KP_UP", DefaultEditorKit.selectionUpAction,
-                       "shift DOWN", DefaultEditorKit.selectionDownAction,
-                    "shift KP_DOWN", DefaultEditorKit.selectionDownAction,
-                            "ENTER", DefaultEditorKit.insertBreakAction,
-                       "BACK_SPACE", DefaultEditorKit.deletePrevCharAction,
-                 "shift BACK_SPACE", DefaultEditorKit.deletePrevCharAction,
-                           "ctrl H", DefaultEditorKit.deletePrevCharAction,
-                           "DELETE", DefaultEditorKit.deleteNextCharAction,
-                      "ctrl DELETE", DefaultEditorKit.deleteNextWordAction,
-                  "ctrl BACK_SPACE", DefaultEditorKit.deletePrevWordAction,
-                            "RIGHT", DefaultEditorKit.forwardAction,
-                             "LEFT", DefaultEditorKit.backwardAction,
-                         "KP_RIGHT", DefaultEditorKit.forwardAction,
-                          "KP_LEFT", DefaultEditorKit.backwardAction,
-                              "TAB", DefaultEditorKit.insertTabAction,
-                  "ctrl BACK_SLASH", "unselect"/*DefaultEditorKit.unselectAction*/,
-                        "ctrl HOME", DefaultEditorKit.beginAction,
-                         "ctrl END", DefaultEditorKit.endAction,
-                  "ctrl shift HOME", DefaultEditorKit.selectionBeginAction,
-                   "ctrl shift END", DefaultEditorKit.selectionEndAction,
-                           "ctrl T", "next-link-action",
-                     "ctrl shift T", "previous-link-action",
-                       "ctrl SPACE", "activate-link-action",
-                   "control shift O", "toggle-componentOrientation"/*DefaultEditorKit.toggleComponentOrientation*/
-            });
-
-        class FontLazyValue implements UIDefaults.LazyValue {
-            private Region region;
-            FontLazyValue(Region region) {
-                this.region = region;
-            }
-            public Object createValue(UIDefaults table) {
-                GTKStyleFactory factory = (GTKStyleFactory)getStyleFactory();
-                GTKStyle style = (GTKStyle)factory.getStyle(null, region);
-                return style.getFontForState(null);
-            }
-        }
-
-        Object[] defaults = new Object[] {
-            "ArrowButton.size", Integer.valueOf(13),
-
-
-            "Button.defaultButtonFollowsFocus", Boolean.FALSE,
-            "Button.focusInputMap", new UIDefaults.LazyInputMap(new Object[] {
-                         "SPACE", "pressed",
-                "released SPACE", "released",
-                         "ENTER", "pressed",
-                "released ENTER", "released"
-              }),
-            "Button.font", new FontLazyValue(Region.BUTTON),
-            "Button.margin", zeroInsets,
-
-
-            "CheckBox.focusInputMap", new UIDefaults.LazyInputMap(new Object[]{
-                         "SPACE", "pressed",
-                "released SPACE", "released"
-              }),
-            "CheckBox.icon", new GTKStyle.GTKLazyValue(
-                              "com.sun.java.swing.plaf.gtk.GTKIconFactory",
-                              "getCheckBoxIcon"),
-            "CheckBox.font", new FontLazyValue(Region.CHECK_BOX),
-            "CheckBox.margin", zeroInsets,
-
-
-            "CheckBoxMenuItem.arrowIcon", null,
-            "CheckBoxMenuItem.checkIcon", new GTKStyle.GTKLazyValue(
-                              "com.sun.java.swing.plaf.gtk.GTKIconFactory",
-                              "getCheckBoxMenuItemCheckIcon"),
-            "CheckBoxMenuItem.font",
-                new FontLazyValue(Region.CHECK_BOX_MENU_ITEM),
-            "CheckBoxMenuItem.margin", zeroInsets,
-            "CheckBoxMenuItem.alignAcceleratorText", Boolean.FALSE,
-
-
-            "ColorChooser.showPreviewPanelText", Boolean.FALSE,
-            "ColorChooser.panels", new UIDefaults.ActiveValue() {
-                public Object createValue(UIDefaults table) {
-                    return new AbstractColorChooserPanel[] {
-                                       new GTKColorChooserPanel() };
-                }
-            },
-            "ColorChooser.font", new FontLazyValue(Region.COLOR_CHOOSER),
-
-
-            "ComboBox.ancestorInputMap",
-               new UIDefaults.LazyInputMap(new Object[] {
-                     "ESCAPE", "hidePopup",
-                    "PAGE_UP", "pageUpPassThrough",
-                  "PAGE_DOWN", "pageDownPassThrough",
-                       "HOME", "homePassThrough",
-                        "END", "endPassThrough",
-                       "DOWN", "selectNext",
-                    "KP_DOWN", "selectNext",
-                   "alt DOWN", "togglePopup",
-                "alt KP_DOWN", "togglePopup",
-                     "alt UP", "togglePopup",
-                  "alt KP_UP", "togglePopup",
-                      "SPACE", "spacePopup",
-                      "ENTER", "enterPressed",
-                         "UP", "selectPrevious",
-                      "KP_UP", "selectPrevious"
-
-                 }),
-            "ComboBox.font", new FontLazyValue(Region.COMBO_BOX),
-            "ComboBox.isEnterSelectablePopup", Boolean.TRUE,
-
-
-            "EditorPane.caretForeground", caretColor,
-            "EditorPane.caretAspectRatio", defaultCaretAspectRatio,
-            "EditorPane.caretBlinkRate", caretBlinkRate,
-            "EditorPane.margin", editorMargin,
-            "EditorPane.focusInputMap", multilineInputMap,
-            "EditorPane.font", new FontLazyValue(Region.EDITOR_PANE),
-
-
-            "FileChooser.ancestorInputMap",
-               new UIDefaults.LazyInputMap(new Object[] {
-                     "ESCAPE", "cancelSelection",
-                 "ctrl ENTER", "approveSelection"
-                 }),
-            "FileChooserUI", "com.sun.java.swing.plaf.gtk.GTKLookAndFeel",
-
-
-            "FormattedTextField.caretForeground", caretColor,
-            "FormattedTextField.caretAspectRatio", defaultCaretAspectRatio,
-            "FormattedTextField.caretBlinkRate", caretBlinkRate,
-            "FormattedTextField.focusInputMap",
-              new UIDefaults.LazyInputMap(new Object[] {
-                           "ctrl C", DefaultEditorKit.copyAction,
-                           "ctrl V", DefaultEditorKit.pasteAction,
-                           "ctrl X", DefaultEditorKit.cutAction,
-                             "COPY", DefaultEditorKit.copyAction,
-                            "PASTE", DefaultEditorKit.pasteAction,
-                              "CUT", DefaultEditorKit.cutAction,
-                   "control INSERT", DefaultEditorKit.copyAction,
-                     "shift INSERT", DefaultEditorKit.pasteAction,
-                     "shift DELETE", DefaultEditorKit.cutAction,
-                       "shift LEFT", DefaultEditorKit.selectionBackwardAction,
-                    "shift KP_LEFT", DefaultEditorKit.selectionBackwardAction,
-                      "shift RIGHT", DefaultEditorKit.selectionForwardAction,
-                   "shift KP_RIGHT", DefaultEditorKit.selectionForwardAction,
-                        "ctrl LEFT", DefaultEditorKit.previousWordAction,
-                     "ctrl KP_LEFT", DefaultEditorKit.previousWordAction,
-                       "ctrl RIGHT", DefaultEditorKit.nextWordAction,
-                    "ctrl KP_RIGHT", DefaultEditorKit.nextWordAction,
-                  "ctrl shift LEFT", DefaultEditorKit.selectionPreviousWordAction,
-               "ctrl shift KP_LEFT", DefaultEditorKit.selectionPreviousWordAction,
-                 "ctrl shift RIGHT", DefaultEditorKit.selectionNextWordAction,
-              "ctrl shift KP_RIGHT", DefaultEditorKit.selectionNextWordAction,
-                           "ctrl A", DefaultEditorKit.selectAllAction,
-                             "HOME", DefaultEditorKit.beginLineAction,
-                              "END", DefaultEditorKit.endLineAction,
-                       "shift HOME", DefaultEditorKit.selectionBeginLineAction,
-                        "shift END", DefaultEditorKit.selectionEndLineAction,
-                       "BACK_SPACE", DefaultEditorKit.deletePrevCharAction,
-                 "shift BACK_SPACE", DefaultEditorKit.deletePrevCharAction,
-                           "ctrl H", DefaultEditorKit.deletePrevCharAction,
-                           "DELETE", DefaultEditorKit.deleteNextCharAction,
-                      "ctrl DELETE", DefaultEditorKit.deleteNextWordAction,
-                  "ctrl BACK_SPACE", DefaultEditorKit.deletePrevWordAction,
-                            "RIGHT", DefaultEditorKit.forwardAction,
-                             "LEFT", DefaultEditorKit.backwardAction,
-                         "KP_RIGHT", DefaultEditorKit.forwardAction,
-                          "KP_LEFT", DefaultEditorKit.backwardAction,
-                            "ENTER", JTextField.notifyAction,
-                  "ctrl BACK_SLASH", "unselect",
-                  "control shift O", "toggle-componentOrientation",
-                           "ESCAPE", "reset-field-edit",
-                               "UP", "increment",
-                            "KP_UP", "increment",
-                             "DOWN", "decrement",
-                          "KP_DOWN", "decrement",
-              }),
-            "FormattedTextField.font",
-                new FontLazyValue(Region.FORMATTED_TEXT_FIELD),
-
-
-            "InternalFrameTitlePane.titlePaneLayout",
-                                new GTKStyle.GTKLazyValue("com.sun.java.swing.plaf.gtk.Metacity",
-                                                 "getTitlePaneLayout"),
-            "InternalFrame.windowBindings", new Object[] {
-                  "shift ESCAPE", "showSystemMenu",
-                    "ctrl SPACE", "showSystemMenu",
-                        "ESCAPE", "hideSystemMenu" },
-            "InternalFrame.layoutTitlePaneAtOrigin", Boolean.TRUE,
-            "InternalFrame.useTaskBar", Boolean.TRUE,
-
-            "InternalFrameTitlePane.iconifyButtonOpacity", null,
-            "InternalFrameTitlePane.maximizeButtonOpacity", null,
-            "InternalFrameTitlePane.closeButtonOpacity", null,
-
-            "Label.font", new FontLazyValue(Region.LABEL),
-
-            "List.background", tableBg,
-            "List.focusCellHighlightBorder", focusBorder,
-            "List.focusSelectedCellHighlightBorder", focusSelectedBorder,
-            "List.noFocusBorder", noFocusBorder,
-            "List.focusInputMap",
-               new UIDefaults.LazyInputMap(new Object[] {
-                           "ctrl C", "copy",
-                           "ctrl V", "paste",
-                           "ctrl X", "cut",
-                             "COPY", "copy",
-                            "PASTE", "paste",
-                              "CUT", "cut",
-                   "control INSERT", "copy",
-                     "shift INSERT", "paste",
-                     "shift DELETE", "cut",
-                               "UP", "selectPreviousRow",
-                            "KP_UP", "selectPreviousRow",
-                         "shift UP", "selectPreviousRowExtendSelection",
-                      "shift KP_UP", "selectPreviousRowExtendSelection",
-                    "ctrl shift UP", "selectPreviousRowExtendSelection",
-                 "ctrl shift KP_UP", "selectPreviousRowExtendSelection",
-                          "ctrl UP", "selectPreviousRowChangeLead",
-                       "ctrl KP_UP", "selectPreviousRowChangeLead",
-                             "DOWN", "selectNextRow",
-                          "KP_DOWN", "selectNextRow",
-                       "shift DOWN", "selectNextRowExtendSelection",
-                    "shift KP_DOWN", "selectNextRowExtendSelection",
-                  "ctrl shift DOWN", "selectNextRowExtendSelection",
-               "ctrl shift KP_DOWN", "selectNextRowExtendSelection",
-                        "ctrl DOWN", "selectNextRowChangeLead",
-                     "ctrl KP_DOWN", "selectNextRowChangeLead",
-                             "LEFT", "selectPreviousColumn",
-                          "KP_LEFT", "selectPreviousColumn",
-                       "shift LEFT", "selectPreviousColumnExtendSelection",
-                    "shift KP_LEFT", "selectPreviousColumnExtendSelection",
-                  "ctrl shift LEFT", "selectPreviousColumnExtendSelection",
-               "ctrl shift KP_LEFT", "selectPreviousColumnExtendSelection",
-                        "ctrl LEFT", "selectPreviousColumnChangeLead",
-                     "ctrl KP_LEFT", "selectPreviousColumnChangeLead",
-                            "RIGHT", "selectNextColumn",
-                         "KP_RIGHT", "selectNextColumn",
-                      "shift RIGHT", "selectNextColumnExtendSelection",
-                   "shift KP_RIGHT", "selectNextColumnExtendSelection",
-                 "ctrl shift RIGHT", "selectNextColumnExtendSelection",
-              "ctrl shift KP_RIGHT", "selectNextColumnExtendSelection",
-                       "ctrl RIGHT", "selectNextColumnChangeLead",
-                    "ctrl KP_RIGHT", "selectNextColumnChangeLead",
-                             "HOME", "selectFirstRow",
-                       "shift HOME", "selectFirstRowExtendSelection",
-                  "ctrl shift HOME", "selectFirstRowExtendSelection",
-                        "ctrl HOME", "selectFirstRowChangeLead",
-                              "END", "selectLastRow",
-                        "shift END", "selectLastRowExtendSelection",
-                   "ctrl shift END", "selectLastRowExtendSelection",
-                         "ctrl END", "selectLastRowChangeLead",
-                          "PAGE_UP", "scrollUp",
-                    "shift PAGE_UP", "scrollUpExtendSelection",
-               "ctrl shift PAGE_UP", "scrollUpExtendSelection",
-                     "ctrl PAGE_UP", "scrollUpChangeLead",
-                        "PAGE_DOWN", "scrollDown",
-                  "shift PAGE_DOWN", "scrollDownExtendSelection",
-             "ctrl shift PAGE_DOWN", "scrollDownExtendSelection",
-                   "ctrl PAGE_DOWN", "scrollDownChangeLead",
-                           "ctrl A", "selectAll",
-                       "ctrl SLASH", "selectAll",
-                  "ctrl BACK_SLASH", "clearSelection",
-                            "SPACE", "addToSelection",
-                       "ctrl SPACE", "toggleAndAnchor",
-                      "shift SPACE", "extendTo",
-                 "ctrl shift SPACE", "moveSelectionTo"
-                 }),
-            "List.focusInputMap.RightToLeft",
-               new UIDefaults.LazyInputMap(new Object[] {
-                             "LEFT", "selectNextColumn",
-                          "KP_LEFT", "selectNextColumn",
-                       "shift LEFT", "selectNextColumnExtendSelection",
-                    "shift KP_LEFT", "selectNextColumnExtendSelection",
-                  "ctrl shift LEFT", "selectNextColumnExtendSelection",
-               "ctrl shift KP_LEFT", "selectNextColumnExtendSelection",
-                        "ctrl LEFT", "selectNextColumnChangeLead",
-                     "ctrl KP_LEFT", "selectNextColumnChangeLead",
-                            "RIGHT", "selectPreviousColumn",
-                         "KP_RIGHT", "selectPreviousColumn",
-                      "shift RIGHT", "selectPreviousColumnExtendSelection",
-                   "shift KP_RIGHT", "selectPreviousColumnExtendSelection",
-                 "ctrl shift RIGHT", "selectPreviousColumnExtendSelection",
-              "ctrl shift KP_RIGHT", "selectPreviousColumnExtendSelection",
-                       "ctrl RIGHT", "selectPreviousColumnChangeLead",
-                    "ctrl KP_RIGHT", "selectPreviousColumnChangeLead",
-                 }),
-            "List.font", new FontLazyValue(Region.LIST),
-            "List.rendererUseUIBorder", Boolean.FALSE,
-
-            "Menu.arrowIcon", new GTKStyle.GTKLazyValue(
-                              "com.sun.java.swing.plaf.gtk.GTKIconFactory",
-                              "getMenuArrowIcon"),
-            "Menu.checkIcon", null,
-            "Menu.font", new FontLazyValue(Region.MENU),
-            "Menu.margin", zeroInsets,
-            "Menu.cancelMode", "hideMenuTree",
-            "Menu.alignAcceleratorText", Boolean.FALSE,
-            "Menu.useMenuBarForTopLevelMenus", Boolean.TRUE,
-
-
-                "MenuBar.windowBindings", new Object[] {
-                "F10", "takeFocus" },
-            "MenuBar.font", new FontLazyValue(Region.MENU_BAR),
-
-
-            "MenuItem.arrowIcon", null,
-            "MenuItem.checkIcon", null,
-            "MenuItem.font", new FontLazyValue(Region.MENU_ITEM),
-            "MenuItem.margin", zeroInsets,
-            "MenuItem.alignAcceleratorText", Boolean.FALSE,
-
-
-            "OptionPane.setButtonMargin", Boolean.FALSE,
-            "OptionPane.sameSizeButtons", Boolean.TRUE,
-            "OptionPane.buttonOrientation", new Integer(SwingConstants.RIGHT),
-            "OptionPane.minimumSize", new DimensionUIResource(262, 90),
-            "OptionPane.buttonPadding", new Integer(10),
-            "OptionPane.windowBindings", new Object[] {
-                "ESCAPE", "close" },
-            "OptionPane.buttonClickThreshhold", new Integer(500),
-            "OptionPane.isYesLast", Boolean.TRUE,
-            "OptionPane.font", new FontLazyValue(Region.OPTION_PANE),
-
-            "Panel.font", new FontLazyValue(Region.PANEL),
-
-            "PasswordField.caretForeground", caretColor,
-            "PasswordField.caretAspectRatio", defaultCaretAspectRatio,
-            "PasswordField.caretBlinkRate", caretBlinkRate,
-            "PasswordField.margin", zeroInsets,
-            "PasswordField.focusInputMap", passwordInputMap,
-            "PasswordField.font", new FontLazyValue(Region.PASSWORD_FIELD),
-
-
-            "PopupMenu.consumeEventOnClose", Boolean.TRUE,
-            "PopupMenu.selectedWindowInputMapBindings", new Object[] {
-                  "ESCAPE", "cancel",
-                    "DOWN", "selectNext",
-                 "KP_DOWN", "selectNext",
-                      "UP", "selectPrevious",
-                   "KP_UP", "selectPrevious",
-                    "LEFT", "selectParent",
-                 "KP_LEFT", "selectParent",
-                   "RIGHT", "selectChild",
-                "KP_RIGHT", "selectChild",
-                   "ENTER", "return",
-                   "SPACE", "return"
-            },
-            "PopupMenu.selectedWindowInputMapBindings.RightToLeft",
-                  new Object[] {
-                    "LEFT", "selectChild",
-                 "KP_LEFT", "selectChild",
-                   "RIGHT", "selectParent",
-                "KP_RIGHT", "selectParent",
-            },
-            "PopupMenu.font", new FontLazyValue(Region.POPUP_MENU),
-
-            "ProgressBar.horizontalSize",
-                new DimensionUIResource(hProgWidth, hProgHeight),
-            "ProgressBar.verticalSize",
-                new DimensionUIResource(vProgWidth, vProgHeight),
-            "ProgressBar.font", new FontLazyValue(Region.PROGRESS_BAR),
-
-            "RadioButton.focusInputMap",
-                   new UIDefaults.LazyInputMap(new Object[] {
-                            "SPACE", "pressed",
-                   "released SPACE", "released",
-                           "RETURN", "pressed"
-                   }),
-            "RadioButton.icon", new GTKStyle.GTKLazyValue(
-                              "com.sun.java.swing.plaf.gtk.GTKIconFactory",
-                              "getRadioButtonIcon"),
-            "RadioButton.font", new FontLazyValue(Region.RADIO_BUTTON),
-            "RadioButton.margin", zeroInsets,
-
-
-            "RadioButtonMenuItem.arrowIcon", null,
-            "RadioButtonMenuItem.checkIcon", new GTKStyle.GTKLazyValue(
-                              "com.sun.java.swing.plaf.gtk.GTKIconFactory",
-                              "getRadioButtonMenuItemCheckIcon"),
-            "RadioButtonMenuItem.font", new FontLazyValue(Region.RADIO_BUTTON_MENU_ITEM),
-            "RadioButtonMenuItem.margin", zeroInsets,
-            "RadioButtonMenuItem.alignAcceleratorText", Boolean.FALSE,
-
-
-            // These bindings are only enabled when there is a default
-            // button set on the rootpane.
-            "RootPane.defaultButtonWindowKeyBindings", new Object[] {
-                               "ENTER", "press",
-                      "released ENTER", "release",
-                          "ctrl ENTER", "press",
-                 "ctrl released ENTER", "release"
-            },
-
-
-            "ScrollBar.squareButtons", Boolean.FALSE,
-            "ScrollBar.thumbHeight", Integer.valueOf(14),
-            "ScrollBar.width", Integer.valueOf(16),
-            "ScrollBar.minimumThumbSize", new Dimension(8, 8),
-            "ScrollBar.maximumThumbSize", new Dimension(4096, 4096),
-            "ScrollBar.allowsAbsolutePositioning", Boolean.TRUE,
-            "ScrollBar.alwaysShowThumb", Boolean.TRUE,
-            "ScrollBar.ancestorInputMap",
-                   new UIDefaults.LazyInputMap(new Object[] {
-                       "RIGHT", "positiveUnitIncrement",
-                    "KP_RIGHT", "positiveUnitIncrement",
-                        "DOWN", "positiveUnitIncrement",
-                     "KP_DOWN", "positiveUnitIncrement",
-                   "PAGE_DOWN", "positiveBlockIncrement",
-                        "LEFT", "negativeUnitIncrement",
-                     "KP_LEFT", "negativeUnitIncrement",
-                          "UP", "negativeUnitIncrement",
-                       "KP_UP", "negativeUnitIncrement",
-                     "PAGE_UP", "negativeBlockIncrement",
-                        "HOME", "minScroll",
-                         "END", "maxScroll"
-                   }),
-            "ScrollBar.ancestorInputMap.RightToLeft",
-                    new UIDefaults.LazyInputMap(new Object[] {
-                       "RIGHT", "negativeUnitIncrement",
-                    "KP_RIGHT", "negativeUnitIncrement",
-                        "LEFT", "positiveUnitIncrement",
-                     "KP_LEFT", "positiveUnitIncrement",
-                    }),
-
-
-            "Spinner.disableOnBoundaryValues", Boolean.TRUE,
-
-
-            "ScrollPane.fillUpperCorner", Boolean.TRUE,
-            "ScrollPane.fillLowerCorner", Boolean.TRUE,
-            "ScrollPane.ancestorInputMap",
-                    new UIDefaults.LazyInputMap(new Object[] {
-                           "RIGHT", "unitScrollRight",
-                        "KP_RIGHT", "unitScrollRight",
-                            "DOWN", "unitScrollDown",
-                         "KP_DOWN", "unitScrollDown",
-                            "LEFT", "unitScrollLeft",
-                         "KP_LEFT", "unitScrollLeft",
-                              "UP", "unitScrollUp",
-                           "KP_UP", "unitScrollUp",
-                         "PAGE_UP", "scrollUp",
-                       "PAGE_DOWN", "scrollDown",
-                    "ctrl PAGE_UP", "scrollLeft",
-                  "ctrl PAGE_DOWN", "scrollRight",
-                       "ctrl HOME", "scrollHome",
-                        "ctrl END", "scrollEnd"
-                    }),
-            "ScrollPane.ancestorInputMap.RightToLeft",
-                    new UIDefaults.LazyInputMap(new Object[] {
-                    "ctrl PAGE_UP", "scrollRight",
-                  "ctrl PAGE_DOWN", "scrollLeft",
-                    }),
-            "ScrollPane.font", new FontLazyValue(Region.SCROLL_PANE),
-
-
-            "Separator.insets", zeroInsets,
-            "Separator.thickness", Integer.valueOf(2),
-
-
-            "Slider.paintValue", Boolean.TRUE,
-            "Slider.thumbWidth", Integer.valueOf(30),
-            "Slider.thumbHeight", Integer.valueOf(14),
-            "Slider.focusInputMap",
-                    new UIDefaults.LazyInputMap(new Object[] {
-                            "RIGHT", "positiveUnitIncrement",
-                         "KP_RIGHT", "positiveUnitIncrement",
-                             "DOWN", "negativeUnitIncrement",
-                          "KP_DOWN", "negativeUnitIncrement",
-                        "PAGE_DOWN", "negativeBlockIncrement",
-                             "LEFT", "negativeUnitIncrement",
-                          "KP_LEFT", "negativeUnitIncrement",
-                               "UP", "positiveUnitIncrement",
-                            "KP_UP", "positiveUnitIncrement",
-                          "PAGE_UP", "positiveBlockIncrement",
-                             "HOME", "minScroll",
-                              "END", "maxScroll"
-                        }),
-            "Slider.focusInputMap.RightToLeft",
-                    new UIDefaults.LazyInputMap(new Object[] {
-                            "RIGHT", "negativeUnitIncrement",
-                         "KP_RIGHT", "negativeUnitIncrement",
-                             "LEFT", "positiveUnitIncrement",
-                          "KP_LEFT", "positiveUnitIncrement",
-                         }),
-            "Slider.onlyLeftMouseButtonDrag", Boolean.FALSE,
-
-            "Spinner.ancestorInputMap",
-               new UIDefaults.LazyInputMap(new Object[] {
-                               "UP", "increment",
-                            "KP_UP", "increment",
-                             "DOWN", "decrement",
-                          "KP_DOWN", "decrement",
-               }),
-            "Spinner.font", new FontLazyValue(Region.SPINNER),
-            "Spinner.editorAlignment", JTextField.LEADING,
-
-            "SplitPane.ancestorInputMap",
-                    new UIDefaults.LazyInputMap(new Object[] {
-                        "UP", "negativeIncrement",
-                      "DOWN", "positiveIncrement",
-                      "LEFT", "negativeIncrement",
-                     "RIGHT", "positiveIncrement",
-                     "KP_UP", "negativeIncrement",
-                   "KP_DOWN", "positiveIncrement",
-                   "KP_LEFT", "negativeIncrement",
-                  "KP_RIGHT", "positiveIncrement",
-                      "HOME", "selectMin",
-                       "END", "selectMax",
-                        "F8", "startResize",
-                        "F6", "toggleFocus",
-                  "ctrl TAB", "focusOutForward",
-            "ctrl shift TAB", "focusOutBackward"
-                    }),
-
-
-            "SplitPane.size", Integer.valueOf(7),
-            "SplitPane.oneTouchOffset", Integer.valueOf(2),
-            "SplitPane.oneTouchButtonSize", Integer.valueOf(5),
-            "SplitPane.supportsOneTouchButtons", Boolean.FALSE,
-
-
-            "TabbedPane.focusInputMap",
-              new UIDefaults.LazyInputMap(new Object[] {
-                         "RIGHT", "navigateRight",
-                      "KP_RIGHT", "navigateRight",
-                          "LEFT", "navigateLeft",
-                       "KP_LEFT", "navigateLeft",
-                            "UP", "navigateUp",
-                         "KP_UP", "navigateUp",
-                          "DOWN", "navigateDown",
-                       "KP_DOWN", "navigateDown",
-                     "ctrl DOWN", "requestFocusForVisibleComponent",
-                  "ctrl KP_DOWN", "requestFocusForVisibleComponent",
-                         "SPACE", "selectTabWithFocus"
-                }),
-            "TabbedPane.ancestorInputMap",
-               new UIDefaults.LazyInputMap(new Object[] {
-                         "ctrl TAB", "navigateNext",
-                   "ctrl shift TAB", "navigatePrevious",
-                   "ctrl PAGE_DOWN", "navigatePageDown",
-                     "ctrl PAGE_UP", "navigatePageUp",
-                          "ctrl UP", "requestFocus",
-                       "ctrl KP_UP", "requestFocus",
-                 }),
-
-            "TabbedPane.labelShift", 3,
-            "TabbedPane.selectedLabelShift", 3,
-            "TabbedPane.font", new FontLazyValue(Region.TABBED_PANE),
-            "TabbedPane.selectedTabPadInsets", new InsetsUIResource(2, 2, 0, 1),
-
-            "Table.scrollPaneBorder", zeroBorder,
-            "Table.background", tableBg,
-            "Table.focusCellBackground", tableFocusCellBg,
-            "Table.focusCellForeground", tableFocusCellFg,
-            "Table.focusCellHighlightBorder", focusBorder,
-            "Table.focusSelectedCellHighlightBorder", focusSelectedBorder,
-            "Table.ancestorInputMap",
-                    new UIDefaults.LazyInputMap(new Object[] {
-                               "ctrl C", "copy",
-                               "ctrl V", "paste",
-                               "ctrl X", "cut",
-                                 "COPY", "copy",
-                                "PASTE", "paste",
-                                  "CUT", "cut",
-                       "control INSERT", "copy",
-                         "shift INSERT", "paste",
-                         "shift DELETE", "cut",
-                                "RIGHT", "selectNextColumn",
-                             "KP_RIGHT", "selectNextColumn",
-                          "shift RIGHT", "selectNextColumnExtendSelection",
-                       "shift KP_RIGHT", "selectNextColumnExtendSelection",
-                     "ctrl shift RIGHT", "selectNextColumnExtendSelection",
-                  "ctrl shift KP_RIGHT", "selectNextColumnExtendSelection",
-                           "ctrl RIGHT", "selectNextColumnChangeLead",
-                        "ctrl KP_RIGHT", "selectNextColumnChangeLead",
-                                 "LEFT", "selectPreviousColumn",
-                              "KP_LEFT", "selectPreviousColumn",
-                           "shift LEFT", "selectPreviousColumnExtendSelection",
-                        "shift KP_LEFT", "selectPreviousColumnExtendSelection",
-                      "ctrl shift LEFT", "selectPreviousColumnExtendSelection",
-                   "ctrl shift KP_LEFT", "selectPreviousColumnExtendSelection",
-                            "ctrl LEFT", "selectPreviousColumnChangeLead",
-                         "ctrl KP_LEFT", "selectPreviousColumnChangeLead",
-                                 "DOWN", "selectNextRow",
-                              "KP_DOWN", "selectNextRow",
-                           "shift DOWN", "selectNextRowExtendSelection",
-                        "shift KP_DOWN", "selectNextRowExtendSelection",
-                      "ctrl shift DOWN", "selectNextRowExtendSelection",
-                   "ctrl shift KP_DOWN", "selectNextRowExtendSelection",
-                            "ctrl DOWN", "selectNextRowChangeLead",
-                         "ctrl KP_DOWN", "selectNextRowChangeLead",
-                                   "UP", "selectPreviousRow",
-                                "KP_UP", "selectPreviousRow",
-                             "shift UP", "selectPreviousRowExtendSelection",
-                          "shift KP_UP", "selectPreviousRowExtendSelection",
-                        "ctrl shift UP", "selectPreviousRowExtendSelection",
-                     "ctrl shift KP_UP", "selectPreviousRowExtendSelection",
-                              "ctrl UP", "selectPreviousRowChangeLead",
-                           "ctrl KP_UP", "selectPreviousRowChangeLead",
-                                 "HOME", "selectFirstColumn",
-                           "shift HOME", "selectFirstColumnExtendSelection",
-                      "ctrl shift HOME", "selectFirstRowExtendSelection",
-                            "ctrl HOME", "selectFirstRow",
-                                  "END", "selectLastColumn",
-                            "shift END", "selectLastColumnExtendSelection",
-                       "ctrl shift END", "selectLastRowExtendSelection",
-                             "ctrl END", "selectLastRow",
-                              "PAGE_UP", "scrollUpChangeSelection",
-                        "shift PAGE_UP", "scrollUpExtendSelection",
-                   "ctrl shift PAGE_UP", "scrollLeftExtendSelection",
-                         "ctrl PAGE_UP", "scrollLeftChangeSelection",
-                            "PAGE_DOWN", "scrollDownChangeSelection",
-                      "shift PAGE_DOWN", "scrollDownExtendSelection",
-                 "ctrl shift PAGE_DOWN", "scrollRightExtendSelection",
-                       "ctrl PAGE_DOWN", "scrollRightChangeSelection",
-                                  "TAB", "selectNextColumnCell",
-                            "shift TAB", "selectPreviousColumnCell",
-                                "ENTER", "selectNextRowCell",
-                          "shift ENTER", "selectPreviousRowCell",
-                               "ctrl A", "selectAll",
-                           "ctrl SLASH", "selectAll",
-                      "ctrl BACK_SLASH", "clearSelection",
-                               "ESCAPE", "cancel",
-                                   "F2", "startEditing",
-                                "SPACE", "addToSelection",
-                           "ctrl SPACE", "toggleAndAnchor",
-                          "shift SPACE", "extendTo",
-                     "ctrl shift SPACE", "moveSelectionTo",
-                                   "F8", "focusHeader"
-                    }),
-            "Table.ancestorInputMap.RightToLeft",
-                    new UIDefaults.LazyInputMap(new Object[] {
-                                "RIGHT", "selectPreviousColumn",
-                             "KP_RIGHT", "selectPreviousColumn",
-                          "shift RIGHT", "selectPreviousColumnExtendSelection",
-                       "shift KP_RIGHT", "selectPreviousColumnExtendSelection",
-                     "ctrl shift RIGHT", "selectPreviousColumnExtendSelection",
-                  "ctrl shift KP_RIGHT", "selectPreviousColumnExtendSelection",
-                          "shift RIGHT", "selectPreviousColumnChangeLead",
-                       "shift KP_RIGHT", "selectPreviousColumnChangeLead",
-                                 "LEFT", "selectNextColumn",
-                              "KP_LEFT", "selectNextColumn",
-                           "shift LEFT", "selectNextColumnExtendSelection",
-                        "shift KP_LEFT", "selectNextColumnExtendSelection",
-                      "ctrl shift LEFT", "selectNextColumnExtendSelection",
-                   "ctrl shift KP_LEFT", "selectNextColumnExtendSelection",
-                            "ctrl LEFT", "selectNextColumnChangeLead",
-                         "ctrl KP_LEFT", "selectNextColumnChangeLead",
-                         "ctrl PAGE_UP", "scrollRightChangeSelection",
-                       "ctrl PAGE_DOWN", "scrollLeftChangeSelection",
-                   "ctrl shift PAGE_UP", "scrollRightExtendSelection",
-                 "ctrl shift PAGE_DOWN", "scrollLeftExtendSelection",
-                    }),
-            "Table.font", new FontLazyValue(Region.TABLE),
-            "Table.ascendingSortIcon",  new GTKStyle.GTKLazyValue(
-                              "com.sun.java.swing.plaf.gtk.GTKIconFactory",
-                              "getAscendingSortIcon"),
-            "Table.descendingSortIcon",  new GTKStyle.GTKLazyValue(
-                              "com.sun.java.swing.plaf.gtk.GTKIconFactory",
-                              "getDescendingSortIcon"),
-
-            "TableHeader.font", new FontLazyValue(Region.TABLE_HEADER),
-            "TableHeader.alignSorterArrow", Boolean.TRUE,
-
-            "TextArea.caretForeground", caretColor,
-            "TextArea.caretAspectRatio", defaultCaretAspectRatio,
-            "TextArea.caretBlinkRate", caretBlinkRate,
-            "TextArea.margin", zeroInsets,
-            "TextArea.focusInputMap", multilineInputMap,
-            "TextArea.font", new FontLazyValue(Region.TEXT_AREA),
-
-
-            "TextField.caretForeground", caretColor,
-            "TextField.caretAspectRatio", defaultCaretAspectRatio,
-            "TextField.caretBlinkRate", caretBlinkRate,
-            "TextField.margin", zeroInsets,
-            "TextField.focusInputMap", fieldInputMap,
-            "TextField.font", new FontLazyValue(Region.TEXT_FIELD),
-
-
-            "TextPane.caretForeground", caretColor,
-            "TextPane.caretAspectRatio", defaultCaretAspectRatio,
-            "TextPane.caretBlinkRate", caretBlinkRate,
-            "TextPane.margin", editorMargin,
-            "TextPane.focusInputMap", multilineInputMap,
-            "TextPane.font", new FontLazyValue(Region.TEXT_PANE),
-
-
-            "TitledBorder.titleColor", controlText,
-            "TitledBorder.border", new UIDefaults.LazyValue() {
-                public Object createValue(UIDefaults table) {
-                    return new GTKPainter.TitledBorder();
-                }
-            },
-
-            "ToggleButton.focusInputMap",
-                   new UIDefaults.LazyInputMap(new Object[] {
-                            "SPACE", "pressed",
-                   "released SPACE", "released"
-                   }),
-            "ToggleButton.font", new FontLazyValue(Region.TOGGLE_BUTTON),
-            "ToggleButton.margin", zeroInsets,
-
-
-            "ToolBar.separatorSize", new DimensionUIResource(10, 10),
-            "ToolBar.handleIcon", new UIDefaults.ActiveValue() {
-                public Object createValue(UIDefaults table) {
-                    return GTKIconFactory.getToolBarHandleIcon();
-                }
-            },
-            "ToolBar.ancestorInputMap",
-               new UIDefaults.LazyInputMap(new Object[] {
-                        "UP", "navigateUp",
-                     "KP_UP", "navigateUp",
-                      "DOWN", "navigateDown",
-                   "KP_DOWN", "navigateDown",
-                      "LEFT", "navigateLeft",
-                   "KP_LEFT", "navigateLeft",
-                     "RIGHT", "navigateRight",
-                  "KP_RIGHT", "navigateRight"
-                 }),
-            "ToolBar.font", new FontLazyValue(Region.TOOL_BAR),
-
-            "ToolTip.font", new FontLazyValue(Region.TOOL_TIP),
-
-            "Tree.padding", Integer.valueOf(4),
-            "Tree.background", tableBg,
-            "Tree.drawHorizontalLines", Boolean.FALSE,
-            "Tree.drawVerticalLines", Boolean.FALSE,
-            "Tree.rowHeight", Integer.valueOf(-1),
-            "Tree.scrollsOnExpand", Boolean.FALSE,
-            "Tree.expanderSize", Integer.valueOf(10),
-            "Tree.repaintWholeRow", Boolean.TRUE,
-            "Tree.closedIcon", null,
-            "Tree.leafIcon", null,
-            "Tree.openIcon", null,
-            "Tree.expandedIcon", new GTKStyle.GTKLazyValue(
-                              "com.sun.java.swing.plaf.gtk.GTKIconFactory",
-                              "getTreeExpandedIcon"),
-            "Tree.collapsedIcon", new GTKStyle.GTKLazyValue(
-                              "com.sun.java.swing.plaf.gtk.GTKIconFactory",
-                              "getTreeCollapsedIcon"),
-            "Tree.leftChildIndent", Integer.valueOf(2),
-            "Tree.rightChildIndent", Integer.valueOf(12),
-            "Tree.scrollsHorizontallyAndVertically", Boolean.FALSE,
-            "Tree.drawsFocusBorder", Boolean.TRUE,
-            "Tree.focusInputMap",
-                    new UIDefaults.LazyInputMap(new Object[] {
-                                 "ctrl C", "copy",
-                                 "ctrl V", "paste",
-                                 "ctrl X", "cut",
-                                   "COPY", "copy",
-                                  "PASTE", "paste",
-                                    "CUT", "cut",
-                         "control INSERT", "copy",
-                           "shift INSERT", "paste",
-                           "shift DELETE", "cut",
-                                     "UP", "selectPrevious",
-                                  "KP_UP", "selectPrevious",
-                               "shift UP", "selectPreviousExtendSelection",
-                            "shift KP_UP", "selectPreviousExtendSelection",
-                          "ctrl shift UP", "selectPreviousExtendSelection",
-                       "ctrl shift KP_UP", "selectPreviousExtendSelection",
-                                "ctrl UP", "selectPreviousChangeLead",
-                             "ctrl KP_UP", "selectPreviousChangeLead",
-                                   "DOWN", "selectNext",
-                                "KP_DOWN", "selectNext",
-                             "shift DOWN", "selectNextExtendSelection",
-                          "shift KP_DOWN", "selectNextExtendSelection",
-                        "ctrl shift DOWN", "selectNextExtendSelection",
-                     "ctrl shift KP_DOWN", "selectNextExtendSelection",
-                              "ctrl DOWN", "selectNextChangeLead",
-                           "ctrl KP_DOWN", "selectNextChangeLead",
-                                  "RIGHT", "selectChild",
-                               "KP_RIGHT", "selectChild",
-                                   "LEFT", "selectParent",
-                                "KP_LEFT", "selectParent",
-                                "typed +", "expand",
-                                "typed -", "collapse",
-                             "BACK_SPACE", "moveSelectionToParent",
-                                "PAGE_UP", "scrollUpChangeSelection",
-                          "shift PAGE_UP", "scrollUpExtendSelection",
-                     "ctrl shift PAGE_UP", "scrollUpExtendSelection",
-                           "ctrl PAGE_UP", "scrollUpChangeLead",
-                              "PAGE_DOWN", "scrollDownChangeSelection",
-                        "shift PAGE_DOWN", "scrollDownExtendSelection",
-                   "ctrl shift PAGE_DOWN", "scrollDownExtendSelection",
-                         "ctrl PAGE_DOWN", "scrollDownChangeLead",
-                                   "HOME", "selectFirst",
-                             "shift HOME", "selectFirstExtendSelection",
-                        "ctrl shift HOME", "selectFirstExtendSelection",
-                              "ctrl HOME", "selectFirstChangeLead",
-                                    "END", "selectLast",
-                              "shift END", "selectLastExtendSelection",
-                         "ctrl shift END", "selectLastExtendSelection",
-                               "ctrl END", "selectLastChangeLead",
-                                     "F2", "startEditing",
-                                 "ctrl A", "selectAll",
-                             "ctrl SLASH", "selectAll",
-                        "ctrl BACK_SLASH", "clearSelection",
-                              "ctrl LEFT", "scrollLeft",
-                           "ctrl KP_LEFT", "scrollLeft",
-                             "ctrl RIGHT", "scrollRight",
-                          "ctrl KP_RIGHT", "scrollRight",
-                                  "SPACE", "addToSelection",
-                             "ctrl SPACE", "toggleAndAnchor",
-                            "shift SPACE", "extendTo",
-                       "ctrl shift SPACE", "moveSelectionTo"
-                    }),
-            "Tree.focusInputMap.RightToLeft",
-                    new UIDefaults.LazyInputMap(new Object[] {
-                                  "RIGHT", "selectParent",
-                               "KP_RIGHT", "selectParent",
-                                   "LEFT", "selectChild",
-                                "KP_LEFT", "selectChild",
-                 }),
-            "Tree.ancestorInputMap",
-                      new UIDefaults.LazyInputMap(new Object[] {
-                         "ESCAPE", "cancel"
-                      }),
-            "Tree.font", new FontLazyValue(Region.TREE),
-
-            "Viewport.font", new FontLazyValue(Region.VIEWPORT)
-        };
-        table.putDefaults(defaults);
-
-        if (fallbackFont != null) {
-            table.put("TitledBorder.font", fallbackFont);
-        }
-        table.put(SwingUtilities2.AA_TEXT_PROPERTY_KEY, aaTextInfo);
-    }
-
-    protected void initSystemColorDefaults(UIDefaults table) {
-        GTKStyleFactory factory = (GTKStyleFactory)getStyleFactory();
-        GTKStyle windowStyle =
-                (GTKStyle)factory.getStyle(null, Region.INTERNAL_FRAME);
-        table.put("window", windowStyle.getGTKColor(SynthConstants.ENABLED,
-                GTKColorType.BACKGROUND));
-        table.put("windowText", windowStyle.getGTKColor(SynthConstants.ENABLED,
-                GTKColorType.TEXT_FOREGROUND));
-
-        GTKStyle entryStyle = (GTKStyle)factory.getStyle(null, Region.TEXT_FIELD);
-        table.put("text", entryStyle.getGTKColor(SynthConstants.ENABLED,
-                                           GTKColorType.TEXT_BACKGROUND));
-        table.put("textText", entryStyle.getGTKColor(SynthConstants.ENABLED,
-                                           GTKColorType.TEXT_FOREGROUND));
-        table.put("textHighlight",
-                entryStyle.getGTKColor(SynthConstants.SELECTED,
-                                         GTKColorType.TEXT_BACKGROUND));
-        table.put("textHighlightText",
-                  entryStyle.getGTKColor(SynthConstants.SELECTED,
-                                         GTKColorType.TEXT_FOREGROUND));
-        table.put("textInactiveText",
-                  entryStyle.getGTKColor(SynthConstants.DISABLED,
-                                         GTKColorType.TEXT_FOREGROUND));
-        Object caretColor =
-            entryStyle.getClassSpecificValue("cursor-color");
-        if (caretColor == null) {
-            caretColor = GTKStyle.BLACK_COLOR;
-        }
-        table.put("caretColor", caretColor);
-
-        GTKStyle menuStyle = (GTKStyle)factory.getStyle(null, Region.MENU_ITEM);
-        table.put("menu", menuStyle.getGTKColor(SynthConstants.ENABLED,
-                                           GTKColorType.BACKGROUND));
-        table.put("menuText", menuStyle.getGTKColor(SynthConstants.ENABLED,
-                                           GTKColorType.TEXT_FOREGROUND));
-
-        GTKStyle scrollbarStyle = (GTKStyle)factory.getStyle(null, Region.SCROLL_BAR);
-        table.put("scrollbar", scrollbarStyle.getGTKColor(SynthConstants.ENABLED,
-                                           GTKColorType.BACKGROUND));
-
-        GTKStyle infoStyle = (GTKStyle)factory.getStyle(null, Region.OPTION_PANE);
-        table.put("info", infoStyle.getGTKColor(SynthConstants.ENABLED,
-                                           GTKColorType.BACKGROUND));
-        table.put("infoText", infoStyle.getGTKColor(SynthConstants.ENABLED,
-                                           GTKColorType.TEXT_FOREGROUND));
-
-        GTKStyle desktopStyle = (GTKStyle)factory.getStyle(null, Region.DESKTOP_PANE);
-        table.put("desktop", desktopStyle.getGTKColor(SynthConstants.ENABLED,
-                                           GTKColorType.BACKGROUND));
-
-        // colors specific only for GTK
-        // It is impossible to create a simple GtkWidget without specifying the
-        // type. So for GtkWidget we can use any appropriate concrete type of
-        // wigdet. LABEL in this case.
-        GTKStyle widgetStyle = (GTKStyle)factory.getStyle(null, Region.LABEL);
-        Color bg = widgetStyle.getGTKColor(SynthConstants.ENABLED,
-                                           GTKColorType.BACKGROUND);
-        table.put("control", bg);
-        table.put("controlHighlight", bg);
-        table.put("controlText", widgetStyle.getGTKColor(SynthConstants.ENABLED,
-                                               GTKColorType.TEXT_FOREGROUND));
-        table.put("controlLtHighlight", widgetStyle.getGTKColor(
-                SynthConstants.ENABLED, GTKColorType.LIGHT));
-        table.put("controlShadow", widgetStyle.getGTKColor(
-                SynthConstants.ENABLED, GTKColorType.DARK));
-        table.put("controlDkShadow", widgetStyle.getGTKColor(
-                SynthConstants.ENABLED, GTKColorType.BLACK));
-        table.put("light", widgetStyle.getGTKColor(
-                SynthConstants.ENABLED, GTKColorType.LIGHT));
-        table.put("mid", widgetStyle.getGTKColor(
-                SynthConstants.ENABLED, GTKColorType.MID));
-        table.put("dark", widgetStyle.getGTKColor(
-                SynthConstants.ENABLED, GTKColorType.DARK));
-        table.put("black", widgetStyle.getGTKColor(
-                SynthConstants.ENABLED, GTKColorType.BLACK));
-        table.put("white", widgetStyle.getGTKColor(
-                SynthConstants.ENABLED, GTKColorType.WHITE));
-    }
-
-    /**
-     * Creates the GTK look and feel class for the passed in Component.
-     */
-    public static ComponentUI createUI(JComponent c) {
-        String key = c.getUIClassID().intern();
-
-        if (key == "FileChooserUI") {
-            return GTKFileChooserUI.createUI(c);
-        }
-        return SynthLookAndFeel.createUI(c);
-    }
-
-    /**
-     * Returns the cached gtkThemeName
-     */
-    static String getGtkThemeName() {
-        return gtkThemeName;
-    }
-
-    static boolean isLeftToRight(Component c) {
-        return c.getComponentOrientation().isLeftToRight();
-    }
-
-    public void initialize() {
-        /*
-         * We need to call loadGTK() to ensure that the native GTK
-         * libraries are loaded.  It is very unlikely that this call will
-         * fail (since we've already verified native GTK support in
-         * isSupportedLookAndFeel()), but we can throw an error in the
-         * failure situation just in case.
-         */
-        Toolkit toolkit = Toolkit.getDefaultToolkit();
-        if (toolkit instanceof UNIXToolkit &&
-            !((UNIXToolkit)toolkit).loadGTK())
-        {
-            throw new InternalError("Unable to load native GTK libraries");
-        }
-
-        super.initialize();
-        inInitialize = true;
-        loadStyles();
-        inInitialize = false;
-
-        /*
-         * Check if system AA font settings should be used.
-         * Sun's JDS (for Linux and Solaris) ships with high quality CJK
-         * fonts and specifies via fontconfig that these be rendered in
-         * B&W to take advantage of the embedded bitmaps.
-         * If is a Sun CJK locale or remote display, indicate by the condition
-         * variable that in this case the L&F recommends ignoring desktop
-         * settings. On other Unixes (eg Linux) this doesn't apply.
-         * REMIND 1: The isSunCJK test is really just a place holder
-         * until we can properly query fontconfig and use the properties
-         * set for specific fonts.
-         * REMIND 2: See comment on isLocalDisplay() definition regarding
-         * XRender.
-         */
-        gtkAAFontSettingsCond = !isSunCJK && SwingUtilities2.isLocalDisplay();
-        aaTextInfo = SwingUtilities2.AATextInfo.getAATextInfo(gtkAAFontSettingsCond);
-    }
-
-    static ReferenceQueue<GTKLookAndFeel> queue = new ReferenceQueue<GTKLookAndFeel>();
-
-    private static void flushUnreferenced() {
-        WeakPCL pcl;
-
-        while ((pcl = (WeakPCL)queue.poll()) != null) {
-            pcl.dispose();
-        }
-    }
-
-    static class WeakPCL extends WeakReference<GTKLookAndFeel> implements
-            PropertyChangeListener {
-        private Toolkit kit;
-        private String key;
-
-        WeakPCL(GTKLookAndFeel target, Toolkit kit, String key) {
-            super(target, queue);
-            this.kit = kit;
-            this.key = key;
-        }
-
-        public String getKey() { return key; }
-
-        public void propertyChange(final PropertyChangeEvent pce) {
-            final GTKLookAndFeel lnf = get();
-
-            if (lnf == null || UIManager.getLookAndFeel() != lnf) {
-                // The property was GC'ed, we're no longer interested in
-                // PropertyChanges, remove the listener.
-                dispose();
-            }
-            else {
-                // We are using invokeLater here because we are getting called
-                // on the AWT-Motif thread which can cause a deadlock.
-                SwingUtilities.invokeLater(new Runnable() {
-                    public void run() {
-                        String name = pce.getPropertyName();
-                        /* We are listening for GTK desktop text AA settings:
-                         * "gnome.Xft/Antialias" and "gnome.Xft/RGBA".
-                         * However we don't need to read these here as
-                         * the UIDefaults reads them and this event causes
-                         * those to be reinitialised.
-                         */
-                        if ("gnome.Net/ThemeName".equals(name)) {
-                            GTKEngine.INSTANCE.themeChanged();
-                            GTKIconFactory.resetIcons();
-                        }
-                        lnf.loadStyles();
-                        Window appWindows[] = Window.getWindows();
-                        for (int i = 0; i < appWindows.length; i++) {
-                            SynthLookAndFeel.updateStyles(appWindows[i]);
-                        }
-                    }
-                });
-            }
-        }
-
-        void dispose() {
-            kit.removePropertyChangeListener(key, this);
-        }
-    }
-
-    public boolean isSupportedLookAndFeel() {
-        Toolkit toolkit = Toolkit.getDefaultToolkit();
-        return (toolkit instanceof SunToolkit &&
-                ((SunToolkit)toolkit).isNativeGTKAvailable());
-    }
-
-    public boolean isNativeLookAndFeel() {
-        return true;
-    }
-
-    public String getDescription() {
-        return "GTK look and feel";
-    }
-
-    public String getName() {
-        return "GTK look and feel";
-    }
-
-    public String getID() {
-        return "GTK";
-    }
-
-    // Subclassed to pass in false to the superclass, we don't want to try
-    // and load the system colors.
-    protected void loadSystemColors(UIDefaults table, String[] systemColors, boolean useNative) {
-        super.loadSystemColors(table, systemColors, false);
-    }
-
-    private void loadStyles() {
-        gtkThemeName = (String)Toolkit.getDefaultToolkit().
-                getDesktopProperty("gnome.Net/ThemeName");
-
-        setStyleFactory(getGTKStyleFactory());
-
-        // If we are in initialize initializations will be
-        // called later, don't do it now.
-        if (!inInitialize) {
-            UIDefaults table = UIManager.getLookAndFeelDefaults();
-            initSystemColorDefaults(table);
-            initComponentDefaults(table);
-        }
-    }
-
-    private GTKStyleFactory getGTKStyleFactory() {
-
-        GTKEngine engine = GTKEngine.INSTANCE;
-        Object iconSizes = engine.getSetting(GTKEngine.Settings.GTK_ICON_SIZES);
-        if (iconSizes instanceof String) {
-            if (!configIconSizes((String)iconSizes)) {
-                System.err.println("Error parsing gtk-icon-sizes string: '" + iconSizes + "'");
-            }
-        }
-
-        // Desktop property appears to have preference over rc font.
-        Object fontName = Toolkit.getDefaultToolkit().getDesktopProperty(
-                                  "gnome.Gtk/FontName");
-
-       if (!(fontName instanceof String)) {
-            fontName = engine.getSetting(GTKEngine.Settings.GTK_FONT_NAME);
-            if (!(fontName instanceof String)) {
-               fontName = "sans 10";
-            }
-        }
-
-        if (styleFactory == null) {
-            styleFactory = new GTKStyleFactory();
-        }
-
-        Font defaultFont = PangoFonts.lookupFont((String)fontName);
-        fallbackFont = defaultFont;
-        styleFactory.initStyles(defaultFont);
-
-        return styleFactory;
-    }
-
-    private boolean configIconSizes(String sizeString) {
-        String[] sizes = sizeString.split(":");
-        for (int i = 0; i < sizes.length; i++) {
-            String[] splits = sizes[i].split("=");
-
-            if (splits.length != 2) {
-                return false;
-            }
-
-            String size = splits[0].trim().intern();
-            if (size.length() < 1) {
-                return false;
-            }
-
-            splits = splits[1].split(",");
-
-            if (splits.length != 2) {
-                return false;
-            }
-
-            String width = splits[0].trim();
-            String height = splits[1].trim();
-
-            if (width.length() < 1 || height.length() < 1) {
-                return false;
-            }
-
-            int w;
-            int h;
-
-            try {
-                w = Integer.parseInt(width);
-                h = Integer.parseInt(height);
-            } catch (NumberFormatException nfe) {
-                return false;
-            }
-
-            if (w > 0 && h > 0) {
-                int type = GTKStyle.GTKStockIconInfo.getIconType(size);
-                GTKStyle.GTKStockIconInfo.setIconSize(type, w, h);
-            } else {
-                System.err.println("Invalid size in gtk-icon-sizes: " + w + "," + h);
-            }
-        }
-
-        return true;
-    }
-
-    /**
-     * Returns whether or not the UIs should update their
-     * <code>SynthStyles</code> from the <code>SynthStyleFactory</code>
-     * when the ancestor of the Component changes.
-     *
-     * @return whether or not the UIs should update their
-     * <code>SynthStyles</code> from the <code>SynthStyleFactory</code>
-     * when the ancestor changed.
-     */
-    public boolean shouldUpdateStyleOnAncestorChanged() {
-        return true;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public LayoutStyle getLayoutStyle() {
-        return GnomeLayoutStyle.INSTANCE;
-    }
-
-
-    /**
-     * Gnome layout style.  From:
-     * http://developer.gnome.org/projects/gup/hig/2.0/design-window.html#window-layout-spacing
-     * You'll notice this doesn't do the radiobutton/checkbox border
-     * adjustments that windows/metal do.  This is because gtk doesn't
-     * provide margins/insets for checkbox/radiobuttons.
-     */
-    private static class GnomeLayoutStyle extends DefaultLayoutStyle {
-        private static GnomeLayoutStyle INSTANCE = new GnomeLayoutStyle();
-
-        @Override
-        public int getPreferredGap(JComponent component1,
-                JComponent component2, ComponentPlacement type, int position,
-                Container parent) {
-            // Checks args
-            super.getPreferredGap(component1, component2, type, position,
-                                  parent);
-
-            switch(type) {
-            case INDENT:
-                if (position == SwingConstants.EAST ||
-                        position == SwingConstants.WEST) {
-                    // Indent group members 12 pixels to denote hierarchy and
-                    // association.
-                    return 12;
-                }
-                // Fall through to related
-            // As a basic rule of thumb, leave space between user
-            // interface components in increments of 6 pixels, going up as
-            // the relationship between related elements becomes more
-            // distant. For example, between icon labels and associated
-            // graphics within an icon, 6 pixels are adequate. Between
-            // labels and associated components, leave 12 horizontal
-            // pixels. For vertical spacing between groups of components,
-            // 18 pixels is adequate.
-            //
-            // The first part of this is handled automatically by Icon (which
-            // won't give you 6 pixels).
-            case RELATED:
-                if (isLabelAndNonlabel(component1, component2, position)) {
-                    return 12;
-                }
-                return 6;
-            case UNRELATED:
-                return 12;
-            }
-            return 0;
-        }
-
-        @Override
-        public int getContainerGap(JComponent component, int position,
-                                   Container parent) {
-            // Checks args
-            super.getContainerGap(component, position, parent);
-            // A general padding of 12 pixels is
-            // recommended between the contents of a dialog window and the
-            // window borders.
-            return 12;
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/GTKPainter.java b/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/GTKPainter.java
deleted file mode 100755
index 4a1f429..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/GTKPainter.java
+++ /dev/null
@@ -1,1523 +0,0 @@
-/*
- * Copyright (c) 2002, 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
- * 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.java.swing.plaf.gtk;
-
-import sun.awt.UNIXToolkit;
-
-import javax.swing.plaf.synth.*;
-import java.awt.*;
-import javax.swing.*;
-import javax.swing.border.*;
-import javax.swing.plaf.*;
-import com.sun.java.swing.plaf.gtk.GTKConstants.ArrowType;
-import com.sun.java.swing.plaf.gtk.GTKConstants.ExpanderStyle;
-import com.sun.java.swing.plaf.gtk.GTKConstants.Orientation;
-import com.sun.java.swing.plaf.gtk.GTKConstants.PositionType;
-import com.sun.java.swing.plaf.gtk.GTKConstants.ShadowType;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-
-/**
- * @author Joshua Outwater
- * @author Scott Violet
- */
-// Need to support:
-// default_outside_border: Insets when default.
-// interior_focus: Indicates if focus should appear inside border, or
-//                       outside border.
-// focus-line-width: Integer giving size of focus border
-// focus-padding: Integer giving padding between border and focus
-//        indicator.
-// focus-line-pattern:
-//
-class GTKPainter extends SynthPainter {
-    private static final PositionType[] POSITIONS = {
-        PositionType.BOTTOM, PositionType.RIGHT,
-        PositionType.TOP, PositionType.LEFT
-    };
-
-    private static final ShadowType SHADOWS[] = {
-        ShadowType.NONE, ShadowType.IN, ShadowType.OUT,
-        ShadowType.ETCHED_IN, ShadowType.OUT
-    };
-
-    private final static GTKEngine ENGINE = GTKEngine.INSTANCE;
-    final static GTKPainter INSTANCE = new GTKPainter();
-
-    private GTKPainter() {
-    }
-
-    private String getName(SynthContext context) {
-        return (context.getRegion().isSubregion()) ? null :
-               context.getComponent().getName();
-    }
-
-    public void paintCheckBoxBackground(SynthContext context,
-            Graphics g, int x, int y, int w, int h) {
-        paintRadioButtonBackground(context, g, x, y, w, h);
-    }
-
-    public void paintCheckBoxMenuItemBackground(SynthContext context,
-            Graphics g, int x, int y, int w, int h) {
-        paintRadioButtonMenuItemBackground(context, g, x, y, w, h);
-    }
-
-    // FORMATTED_TEXT_FIELD
-    public void paintFormattedTextFieldBackground(SynthContext context,
-                                          Graphics g, int x, int y,
-                                          int w, int h) {
-        paintTextBackground(context, g, x, y, w, h);
-    }
-
-    //
-    // TOOL_BAR_DRAG_WINDOW
-    //
-    public void paintToolBarDragWindowBackground(SynthContext context,
-                                     Graphics g, int x, int y,
-                                     int w, int h) {
-        paintToolBarBackground(context, g, x, y, w, h);
-    }
-
-
-    //
-    // TOOL_BAR
-    //
-    public void paintToolBarBackground(SynthContext context,
-                                     Graphics g, int x, int y,
-                                     int w, int h) {
-        Region id = context.getRegion();
-        int state = context.getComponentState();
-        int gtkState = GTKLookAndFeel.synthStateToGTKState(id, state);
-        int orientation = ((JToolBar)context.getComponent()).getOrientation();
-        synchronized (UNIXToolkit.GTK_LOCK) {
-            if (! ENGINE.paintCachedImage(g, x, y, w, h, id,
-                                          state, orientation))
-            {
-                ENGINE.startPainting(g, x, y, w, h, id, state, orientation);
-                ENGINE.paintBox(g, context, id, gtkState, ShadowType.OUT,
-                                "handlebox_bin", x, y, w, h);
-                ENGINE.finishPainting();
-            }
-        }
-    }
-
-    public void paintToolBarContentBackground(SynthContext context,
-                                              Graphics g,
-                                              int x, int y, int w, int h) {
-        Region id = context.getRegion();
-        int orientation = ((JToolBar)context.getComponent()).getOrientation();
-        synchronized (UNIXToolkit.GTK_LOCK) {
-            if (! ENGINE.paintCachedImage(g, x, y, w, h, id, orientation)) {
-                ENGINE.startPainting(g, x, y, w, h, id, orientation);
-                ENGINE.paintBox(g, context, id, SynthConstants.ENABLED,
-                                ShadowType.OUT, "toolbar", x, y, w, h);
-                ENGINE.finishPainting();
-            }
-        }
-    }
-
-    //
-    // PASSWORD_FIELD
-    //
-    public void paintPasswordFieldBackground(SynthContext context,
-                                     Graphics g, int x, int y,
-                                     int w, int h) {
-        paintTextBackground(context, g, x, y, w, h);
-    }
-
-    //
-    // TEXT_FIELD
-    //
-    public void paintTextFieldBackground(SynthContext context, Graphics g,
-                                         int x, int y, int w, int h) {
-        if (getName(context) == "Tree.cellEditor") {
-            paintTreeCellEditorBackground(context, g, x, y, w, h);
-        } else {
-            paintTextBackground(context, g, x, y, w, h);
-        }
-    }
-
-    //
-    // RADIO_BUTTON
-    //
-    // NOTE: this is called for JCheckBox too
-    public void paintRadioButtonBackground(SynthContext context,
-                                     Graphics g, int x, int y,
-                                     int w, int h) {
-        Region id = context.getRegion();
-        int gtkState = GTKLookAndFeel.synthStateToGTKState(
-                id, context.getComponentState());
-        if (gtkState == SynthConstants.MOUSE_OVER) {
-            synchronized (UNIXToolkit.GTK_LOCK) {
-                if (! ENGINE.paintCachedImage(g, x, y, w, h, id)) {
-                    ENGINE.startPainting(g, x, y, w, h, id);
-                    ENGINE.paintFlatBox(g, context, id,
-                            SynthConstants.MOUSE_OVER, ShadowType.ETCHED_OUT,
-                            "checkbutton", x, y, w, h, ColorType.BACKGROUND);
-                    ENGINE.finishPainting();
-                }
-            }
-        }
-    }
-
-    //
-    // RADIO_BUTTON_MENU_ITEM
-    //
-    // NOTE: this is called for JCheckBoxMenuItem too
-    public void paintRadioButtonMenuItemBackground(SynthContext context,
-                                     Graphics g, int x, int y,
-                                     int w, int h) {
-        Region id = context.getRegion();
-        int gtkState = GTKLookAndFeel.synthStateToGTKState(
-                id, context.getComponentState());
-        if (gtkState == SynthConstants.MOUSE_OVER) {
-            synchronized (UNIXToolkit.GTK_LOCK) {
-                if (! ENGINE.paintCachedImage(g, x, y, w, h, id)) {
-                    ShadowType shadow = (GTKLookAndFeel.is2_2() ?
-                        ShadowType.NONE : ShadowType.OUT);
-                    ENGINE.startPainting(g, x, y, w, h, id);
-                    ENGINE.paintBox(g, context, id, gtkState,
-                            shadow, "menuitem", x, y, w, h);
-                    ENGINE.finishPainting();
-                }
-            }
-        }
-    }
-
-    //
-    // LABEL
-    //
-    public void paintLabelBackground(SynthContext context,
-                                     Graphics g, int x, int y,
-                                     int w, int h) {
-        String name = getName(context);
-        JComponent c = context.getComponent();
-        Container  container = c.getParent();
-
-        if (name == "TableHeader.renderer" ||
-            name == "GTKFileChooser.directoryListLabel" ||
-            name == "GTKFileChooser.fileListLabel") {
-
-            paintButtonBackgroundImpl(context, g, Region.BUTTON, "button",
-                    x, y, w, h, true, false, false, false);
-        }
-        /*
-         * If the label is a ListCellRenderer and it's in a container
-         * (CellRendererPane) which is in a JComboBox then we paint the label
-         * as a TextField like a gtk_entry for a combobox.
-         */
-        else if (c instanceof ListCellRenderer &&
-                 container != null &&
-                 container.getParent() instanceof JComboBox ) {
-            paintTextBackground(context, g, x, y, w, h);
-        }
-    }
-
-    //
-    // INTERNAL_FRAME
-    //
-    public void paintInternalFrameBorder(SynthContext context,
-                                      Graphics g, int x, int y,
-                                      int w, int h) {
-        Metacity.INSTANCE.paintFrameBorder(context, g, x, y, w, h);
-    }
-
-    //
-    // DESKTOP_PANE
-    //
-    public void paintDesktopPaneBackground(SynthContext context,
-                                           Graphics g, int x, int y,
-                                           int w, int h) {
-        // Does not call into ENGINE for better performance
-        fillArea(context, g, x, y, w, h, ColorType.BACKGROUND);
-    }
-
-    //
-    // DESKTOP_ICON
-    //
-    public void paintDesktopIconBorder(SynthContext context,
-                                           Graphics g, int x, int y,
-                                           int w, int h) {
-        Metacity.INSTANCE.paintFrameBorder(context, g, x, y, w, h);
-    }
-
-    public void paintButtonBackground(SynthContext context, Graphics g,
-                                      int x, int y, int w, int h) {
-        String name = getName(context);
-        if (name != null && name.startsWith("InternalFrameTitlePane.")) {
-            Metacity.INSTANCE.paintButtonBackground(context, g, x, y, w, h);
-
-        } else {
-            AbstractButton button = (AbstractButton)context.getComponent();
-            boolean paintBG = button.isContentAreaFilled() &&
-                              button.isBorderPainted();
-            boolean paintFocus = button.isFocusPainted();
-            boolean defaultCapable = (button instanceof JButton) &&
-                    ((JButton)button).isDefaultCapable();
-            boolean toolButton = (button.getParent() instanceof JToolBar);
-            paintButtonBackgroundImpl(context, g, Region.BUTTON, "button",
-                    x, y, w, h, paintBG, paintFocus, defaultCapable, toolButton);
-        }
-    }
-
-    private void paintButtonBackgroundImpl(SynthContext context, Graphics g,
-            Region id, String detail, int x, int y, int w, int h,
-            boolean paintBackground, boolean paintFocus,
-            boolean defaultCapable, boolean toolButton) {
-        int state = context.getComponentState();
-        synchronized (UNIXToolkit.GTK_LOCK) {
-            if (ENGINE.paintCachedImage(g, x, y, w, h, id, state, detail,
-                    paintBackground, paintFocus, defaultCapable, toolButton)) {
-                return;
-            }
-            ENGINE.startPainting(g, x, y, w, h, id, state, detail,
-                paintBackground, paintFocus, defaultCapable, toolButton);
-
-            // Paint the default indicator
-            GTKStyle style = (GTKStyle)context.getStyle();
-            if (defaultCapable && !toolButton) {
-                Insets defaultInsets = style.getClassSpecificInsetsValue(
-                        context, "default-border",
-                        GTKStyle.BUTTON_DEFAULT_BORDER_INSETS);
-
-                if (paintBackground && (state & SynthConstants.DEFAULT) != 0) {
-                    ENGINE.paintBox(g, context, id, SynthConstants.ENABLED,
-                            ShadowType.IN, "buttondefault", x, y, w, h);
-                }
-                x += defaultInsets.left;
-                y += defaultInsets.top;
-                w -= (defaultInsets.left + defaultInsets.right);
-                h -= (defaultInsets.top + defaultInsets.bottom);
-            }
-
-            boolean interiorFocus = style.getClassSpecificBoolValue(
-                    context, "interior-focus", true);
-            int focusSize = style.getClassSpecificIntValue(
-                    context, "focus-line-width",1);
-            int focusPad = style.getClassSpecificIntValue(
-                    context, "focus-padding", 1);
-
-            int totalFocusSize = focusSize + focusPad;
-            int xThickness = style.getXThickness();
-            int yThickness = style.getYThickness();
-
-            // Render the box.
-            if (!interiorFocus &&
-                    (state & SynthConstants.FOCUSED) == SynthConstants.FOCUSED) {
-                x += totalFocusSize;
-                y += totalFocusSize;
-                w -= 2 * totalFocusSize;
-                h -= 2 * totalFocusSize;
-            }
-
-            int gtkState = GTKLookAndFeel.synthStateToGTKState(id, state);
-            boolean paintBg;
-            if (toolButton) {
-                // Toolbar buttons should only have their background painted
-                // in the PRESSED, SELECTED, or MOUSE_OVER states.
-                paintBg =
-                    (gtkState != SynthConstants.ENABLED) &&
-                    (gtkState != SynthConstants.DISABLED);
-            } else {
-                // Otherwise, always paint the button's background, unless
-                // the user has overridden it and we're in the ENABLED state.
-                paintBg =
-                    paintBackground ||
-                    (gtkState != SynthConstants.ENABLED);
-            }
-            if (paintBg) {
-                ShadowType shadowType = ShadowType.OUT;
-                if ((state & (SynthConstants.PRESSED |
-                              SynthConstants.SELECTED)) != 0) {
-                    shadowType = ShadowType.IN;
-                }
-                ENGINE.paintBox(g, context, id, gtkState,
-                        shadowType, detail, x, y, w, h);
-            }
-
-            // focus
-            if (paintFocus && (state & SynthConstants.FOCUSED) != 0) {
-                if (interiorFocus) {
-                    x += xThickness + focusPad;
-                    y += yThickness + focusPad;
-                    w -= 2 * (xThickness + focusPad);
-                    h -= 2 * (yThickness + focusPad);
-                } else {
-                    x -= totalFocusSize;
-                    y -= totalFocusSize;
-                    w += 2 * totalFocusSize;
-                    h += 2 * totalFocusSize;
-                }
-                ENGINE.paintFocus(g, context, id, gtkState, detail, x, y, w, h);
-            }
-            ENGINE.finishPainting();
-        }
-    }
-
-    //
-    // ARROW_BUTTON
-    //
-    public void paintArrowButtonForeground(SynthContext context, Graphics g,
-                                           int x, int y, int w, int h,
-                                           int direction) {
-        Region id = context.getRegion();
-        Component c = context.getComponent();
-        String name = c.getName();
-
-        ArrowType arrowType = null;
-        switch (direction) {
-            case SwingConstants.NORTH:
-                arrowType = ArrowType.UP; break;
-            case SwingConstants.SOUTH:
-                arrowType = ArrowType.DOWN; break;
-            case SwingConstants.EAST:
-                arrowType = ArrowType.RIGHT; break;
-            case SwingConstants.WEST:
-                arrowType = ArrowType.LEFT; break;
-        }
-
-        String detail = "arrow";
-        if ((name == "ScrollBar.button") || (name == "TabbedPane.button")) {
-            if (arrowType == ArrowType.UP || arrowType == ArrowType.DOWN) {
-                detail = "vscrollbar";
-            } else {
-                detail = "hscrollbar";
-            }
-        } else if (name == "Spinner.nextButton" ||
-                   name == "Spinner.previousButton") {
-            detail = "spinbutton";
-        } else if (name != "ComboBox.arrowButton") {
-            assert false : "unexpected name: " + name;
-        }
-
-        int gtkState = GTKLookAndFeel.synthStateToGTKState(
-                id, context.getComponentState());
-        ShadowType shadowType = (gtkState == SynthConstants.PRESSED ?
-            ShadowType.IN : ShadowType.OUT);
-        synchronized (UNIXToolkit.GTK_LOCK) {
-            if (ENGINE.paintCachedImage(g, x, y, w, h,
-                    gtkState, name, direction)) {
-                return;
-            }
-            ENGINE.startPainting(g, x, y, w, h, gtkState, name, direction);
-            ENGINE.paintArrow(g, context, id, gtkState,
-                    shadowType, arrowType, detail, x, y, w, h);
-            ENGINE.finishPainting();
-        }
-    }
-
-    public void paintArrowButtonBackground(SynthContext context,
-            Graphics g, int x, int y, int w, int h) {
-        Region id = context.getRegion();
-        AbstractButton button = (AbstractButton)context.getComponent();
-
-        String name = button.getName();
-        String detail = "button";
-        int direction = SwingConstants.CENTER;
-        if ((name == "ScrollBar.button") || (name == "TabbedPane.button")) {
-            Integer prop = (Integer)
-                button.getClientProperty("__arrow_direction__");
-            direction = (prop != null) ?
-                prop.intValue() : SwingConstants.WEST;
-            switch (direction) {
-            default:
-            case SwingConstants.EAST:
-            case SwingConstants.WEST:
-                detail = "hscrollbar";
-                break;
-            case SwingConstants.NORTH:
-            case SwingConstants.SOUTH:
-                detail = "vscrollbar";
-                break;
-            }
-        } else if (name == "Spinner.previousButton") {
-            detail = "spinbutton_down";
-        } else if (name == "Spinner.nextButton") {
-            detail = "spinbutton_up";
-        } else if (name != "ComboBox.arrowButton") {
-            assert false : "unexpected name: " + name;
-        }
-
-        int state = context.getComponentState();
-        synchronized (UNIXToolkit.GTK_LOCK) {
-            if (ENGINE.paintCachedImage(g, x, y, w, h, id,
-                                        state, detail, direction))
-            {
-                return;
-            }
-            ENGINE.startPainting(g, x, y, w, h, id,
-                                 state, detail, direction);
-
-            if (detail.startsWith("spin")) {
-                /*
-                 * The ubuntulooks engine (and presumably others) expect us to
-                 * first draw the full "spinbutton" background, and then draw
-                 * the individual "spinbutton_up/down" buttons on top of that.
-                 * Note that it is the state of the JSpinner (not its arrow
-                 * button) that determines how we draw this background.
-                 */
-                int spinState = button.getParent().isEnabled() ?
-                    SynthConstants.ENABLED : SynthConstants.DISABLED;
-                int mody = (detail == "spinbutton_up") ? y : y-h;
-                int modh = h*2;
-                ENGINE.paintBox(g, context, id, spinState,
-                                ShadowType.IN, "spinbutton",
-                                x, mody, w, modh);
-            }
-
-            int gtkState = GTKLookAndFeel.synthStateToGTKState(id, state);
-            ShadowType shadowType = ShadowType.OUT;
-            if ((gtkState & (SynthConstants.PRESSED |
-                             SynthConstants.SELECTED)) != 0)
-            {
-                shadowType = ShadowType.IN;
-            }
-            ENGINE.paintBox(g, context, id, gtkState,
-                            shadowType, detail,
-                            x, y, w, h);
-
-            ENGINE.finishPainting();
-        }
-    }
-
-
-    //
-    // LIST
-    //
-    public void paintListBackground(SynthContext context, Graphics g,
-                                    int x, int y, int w, int h) {
-        // Does not call into ENGINE for better performance
-        fillArea(context, g, x, y, w, h, GTKColorType.TEXT_BACKGROUND);
-    }
-
-    public void paintMenuBarBackground(SynthContext context, Graphics g,
-                                       int x, int y, int w, int h) {
-        Region id = context.getRegion();
-        synchronized (UNIXToolkit.GTK_LOCK) {
-            if (ENGINE.paintCachedImage(g, x, y, w, h, id)) {
-                return;
-            }
-            GTKStyle style = (GTKStyle)context.getStyle();
-            int shadow = style.getClassSpecificIntValue(
-                    context, "shadow-type", 2);
-            ShadowType shadowType = SHADOWS[shadow];
-            int gtkState = GTKLookAndFeel.synthStateToGTKState(
-                    id, context.getComponentState());
-            ENGINE.startPainting(g, x, y, w, h, id);
-            ENGINE.paintBox(g, context, id, gtkState,
-                shadowType, "menubar", x, y, w, h);
-            ENGINE.finishPainting();
-        }
-    }
-
-    //
-    // MENU
-    //
-    public void paintMenuBackground(SynthContext context,
-                                     Graphics g,
-                                     int x, int y, int w, int h) {
-        paintMenuItemBackground(context, g, x, y, w, h);
-    }
-
-    // This is called for both MENU and MENU_ITEM
-    public void paintMenuItemBackground(SynthContext context,
-                                     Graphics g,
-                                     int x, int y, int w, int h) {
-        int gtkState = GTKLookAndFeel.synthStateToGTKState(
-                context.getRegion(), context.getComponentState());
-        if (gtkState == SynthConstants.MOUSE_OVER) {
-            Region id = Region.MENU_ITEM;
-            synchronized (UNIXToolkit.GTK_LOCK) {
-                if (! ENGINE.paintCachedImage(g, x, y, w, h, id)) {
-                    ShadowType shadow = (GTKLookAndFeel.is2_2() ?
-                        ShadowType.NONE : ShadowType.OUT);
-                    ENGINE.startPainting(g, x, y, w, h, id);
-                    ENGINE.paintBox(g, context, id, gtkState, shadow,
-                            "menuitem", x, y, w, h);
-                    ENGINE.finishPainting();
-                }
-            }
-        }
-    }
-
-    public void paintPopupMenuBackground(SynthContext context, Graphics g,
-                                        int x, int y, int w, int h) {
-        Region id = context.getRegion();
-        int gtkState = GTKLookAndFeel.synthStateToGTKState(
-                id, context.getComponentState());
-        synchronized (UNIXToolkit.GTK_LOCK) {
-            if (ENGINE.paintCachedImage(g, x, y, w, h, id, gtkState)) {
-                return;
-            }
-            ENGINE.startPainting(g, x, y, w, h, id, gtkState);
-            ENGINE.paintBox(g, context, id, gtkState,
-                    ShadowType.OUT, "menu", x, y, w, h);
-
-            GTKStyle style = (GTKStyle)context.getStyle();
-            int xThickness = style.getXThickness();
-            int yThickness = style.getYThickness();
-            ENGINE.paintBackground(g, context, id, gtkState,
-                    style.getGTKColor(context, gtkState, GTKColorType.BACKGROUND),
-                    x + xThickness, y + yThickness,
-                    w - xThickness - xThickness, h - yThickness - yThickness);
-            ENGINE.finishPainting();
-        }
-    }
-
-    public void paintProgressBarBackground(SynthContext context,
-                                            Graphics g,
-                                            int x, int y, int w, int h) {
-        Region id = context.getRegion();
-        synchronized (UNIXToolkit.GTK_LOCK) {
-            if (! ENGINE.paintCachedImage(g, x, y, w, h, id)) {
-                ENGINE.startPainting(g, x, y, w, h, id);
-                ENGINE.paintBox(g, context, id, SynthConstants.ENABLED,
-                        ShadowType.IN, "trough", x, y, w, h);
-                ENGINE.finishPainting();
-            }
-        }
-    }
-
-    public void paintProgressBarForeground(SynthContext context, Graphics g,
-                                            int x, int y, int w, int h,
-                                            int orientation) {
-        Region id = context.getRegion();
-        synchronized (UNIXToolkit.GTK_LOCK) {
-            // Note that we don't call paintCachedImage() here.  Since the
-            // progress bar foreground is painted differently for each value
-            // it would be wasteful to try to cache an image for each state,
-            // so instead we simply avoid caching in this case.
-            if (w <= 0 || h <= 0) {
-                return;
-            }
-            ENGINE.startPainting(g, x, y, w, h, id, "fg");
-            ENGINE.paintBox(g, context, id, SynthConstants.MOUSE_OVER,
-                            ShadowType.OUT, "bar", x, y, w, h);
-            ENGINE.finishPainting(false); // don't bother caching the image
-        }
-    }
-
-    public void paintViewportBorder(SynthContext context, Graphics g,
-                                           int x, int y, int w, int h) {
-        Region id = context.getRegion();
-        synchronized (UNIXToolkit.GTK_LOCK) {
-            if (! ENGINE.paintCachedImage(g, x, y, w, h, id)) {
-                ENGINE.startPainting(g, x, y, w, h, id);
-                ENGINE.paintShadow(g, context, id, SynthConstants.ENABLED,
-                        ShadowType.IN, "scrolled_window", x, y, w, h);
-                ENGINE.finishPainting();
-            }
-        }
-    }
-
-    public void paintSeparatorBackground(SynthContext context,
-                                          Graphics g,
-                                          int x, int y, int w, int h,
-                                         int orientation) {
-        Region id = context.getRegion();
-        int state = context.getComponentState();
-        JComponent c = context.getComponent();
-
-        /*
-         * Note: In theory, the style's x/y thickness values would determine
-         * the width of the separator content.  In practice, however, some
-         * engines will render a line that is wider than the corresponding
-         * thickness value.  For example, ubuntulooks reports x/y thickness
-         * values of 1 for separators, but always renders a 2-pixel wide line.
-         * As a result of all this, we need to be careful not to restrict
-         * the w/h values below too much, so that the full thickness of the
-         * rendered line will be captured by our image caching code.
-         */
-        String detail;
-        if (c instanceof JToolBar.Separator) {
-            /*
-             * GTK renders toolbar separators differently in that an
-             * artificial padding is added to each end of the separator.
-             * The value of 0.2f below is derived from the source code of
-             * gtktoolbar.c in the current version of GTK+ (2.8.20 at the
-             * time of this writing).  Specifically, the relevant values are:
-             *     SPACE_LINE_DIVISION 10.0
-             *     SPACE_LINE_START     2.0
-             *     SPACE_LINE_END       8.0
-             * These are used to determine the distance from the top (or left)
-             * edge of the toolbar to the other edge.  So for example, the
-             * starting/top point of a vertical separator is 2/10 of the
-             * height of a horizontal toolbar away from the top edge, which
-             * is how we arrive at 0.2f below.  Likewise, the ending/bottom
-             * point is 8/10 of the height away from the top edge, or in other
-             * words, it is 2/10 away from the bottom edge, which is again
-             * how we arrive at the 0.2f value below.
-             *
-             * The separator is also centered horizontally or vertically,
-             * depending on its orientation.  This was determined empirically
-             * and by examining the code referenced above.
-             */
-            detail = "toolbar";
-            float pct = 0.2f;
-            JToolBar.Separator sep = (JToolBar.Separator)c;
-            Dimension size = sep.getSeparatorSize();
-            GTKStyle style = (GTKStyle)context.getStyle();
-            if (orientation == JSeparator.HORIZONTAL) {
-                x += (int)(w * pct);
-                w -= (int)(w * pct * 2);
-                y += (size.height - style.getYThickness()) / 2;
-            } else {
-                y += (int)(h * pct);
-                h -= (int)(h * pct * 2);
-                x += (size.width - style.getXThickness()) / 2;
-            }
-        } else {
-            // For regular/menu separators, we simply subtract out the insets.
-            detail = "separator";
-            Insets insets = c.getInsets();
-            x += insets.left;
-            y += insets.top;
-            if (orientation == JSeparator.HORIZONTAL) {
-                w -= (insets.left + insets.right);
-            } else {
-                h -= (insets.top + insets.bottom);
-            }
-        }
-
-        synchronized (UNIXToolkit.GTK_LOCK) {
-            if (! ENGINE.paintCachedImage(g, x, y, w, h, id,
-                                          state, detail, orientation)) {
-                ENGINE.startPainting(g, x, y, w, h, id,
-                                     state, detail, orientation);
-                if (orientation == JSeparator.HORIZONTAL) {
-                    ENGINE.paintHline(g, context, id, state,
-                                      detail, x, y, w, h);
-                } else {
-                    ENGINE.paintVline(g, context, id, state,
-                                      detail, x, y, w, h);
-                }
-                ENGINE.finishPainting();
-            }
-        }
-    }
-
-    public void paintSliderTrackBackground(SynthContext context,
-                                       Graphics g,
-                                       int x, int y, int w,int h) {
-        Region id = context.getRegion();
-        int state = context.getComponentState();
-
-        // For focused sliders, we paint focus rect outside the bounds passed.
-        // Need to adjust for that.
-        boolean focused = ((state & SynthConstants.FOCUSED) != 0);
-        int focusSize = 0;
-        if (focused) {
-            GTKStyle style = (GTKStyle)context.getStyle();
-            focusSize = style.getClassSpecificIntValue(
-                                context, "focus-line-width", 1) +
-                        style.getClassSpecificIntValue(
-                                context, "focus-padding", 1);
-            x -= focusSize;
-            y -= focusSize;
-            w += focusSize * 2;
-            h += focusSize * 2;
-        }
-
-        // The ubuntulooks engine paints slider troughs differently depending
-        // on the current slider value and its component orientation.
-        JSlider slider = (JSlider)context.getComponent();
-        double value = slider.getValue();
-        double min = slider.getMinimum();
-        double max = slider.getMaximum();
-        double visible = 20; // not used for sliders; any value will work
-
-        synchronized (UNIXToolkit.GTK_LOCK) {
-            // Note that we don't call paintCachedImage() here.  Since some
-            // engines (e.g. ubuntulooks) paint the slider background
-            // differently for any given slider value, it would be wasteful
-            // to try to cache an image for each state, so instead we simply
-            // avoid caching in this case.
-            if (w <= 0 || h <= 0) {
-                return;
-            }
-            ENGINE.startPainting(g, x, y, w, h, id, state, value);
-            int gtkState = GTKLookAndFeel.synthStateToGTKState(id, state);
-            ENGINE.setRangeValue(context, id, value, min, max, visible);
-            ENGINE.paintBox(g, context, id, gtkState, ShadowType.IN,
-                            "trough", x + focusSize, y + focusSize,
-                            w - 2 * focusSize, h - 2 * focusSize);
-            if (focused) {
-                ENGINE.paintFocus(g, context, id, SynthConstants.ENABLED,
-                                  "trough", x, y, w, h);
-            }
-            ENGINE.finishPainting(false); // don't bother caching the image
-        }
-    }
-
-    public void paintSliderThumbBackground(SynthContext context,
-            Graphics g, int x, int y, int w, int h, int dir) {
-        Region id = context.getRegion();
-        int gtkState = GTKLookAndFeel.synthStateToGTKState(
-                id, context.getComponentState());
-        synchronized (UNIXToolkit.GTK_LOCK) {
-            if (! ENGINE.paintCachedImage(g, x, y, w, h, id, gtkState, dir)) {
-                Orientation orientation = (dir == JSlider.HORIZONTAL ?
-                    Orientation.HORIZONTAL : Orientation.VERTICAL);
-                String detail = (dir == JSlider.HORIZONTAL ?
-                    "hscale" : "vscale");
-                ENGINE.startPainting(g, x, y, w, h, id, gtkState, dir);
-                ENGINE.paintSlider(g, context, id, gtkState,
-                        ShadowType.OUT, detail, x, y, w, h, orientation);
-                ENGINE.finishPainting();
-            }
-        }
-    }
-
-    //
-    // SPINNER
-    //
-    public void paintSpinnerBackground(SynthContext context,
-                                        Graphics g,
-                                        int x, int y, int w, int h) {
-        // This is handled in paintTextFieldBackground
-    }
-
-    //
-    // SPLIT_PANE_DIVIDER
-    //
-    public void paintSplitPaneDividerBackground(SynthContext context,
-                                       Graphics g,
-                                       int x, int y, int w, int h) {
-        Region id = context.getRegion();
-        int gtkState = GTKLookAndFeel.synthStateToGTKState(
-                id, context.getComponentState());
-        JSplitPane splitPane = (JSplitPane)context.getComponent();
-        Orientation orientation =
-                (splitPane.getOrientation() == JSplitPane.HORIZONTAL_SPLIT ?
-                    Orientation.VERTICAL : Orientation.HORIZONTAL);
-        synchronized (UNIXToolkit.GTK_LOCK) {
-            if (! ENGINE.paintCachedImage(g, x, y, w, h,
-                    id, gtkState, orientation)) {
-                ENGINE.startPainting(g, x, y, w, h, id, gtkState, orientation);
-                ENGINE.paintHandle(g, context, id, gtkState,
-                        ShadowType.OUT, "paned", x, y, w, h, orientation);
-                ENGINE.finishPainting();
-            }
-        }
-    }
-
-    public void paintSplitPaneDragDivider(SynthContext context,
-                                       Graphics g,int x, int y, int w, int h,
-                                       int orientation) {
-        paintSplitPaneDividerForeground(context, g, x, y, w, h, orientation);
-    }
-
-    public void paintTabbedPaneContentBackground(SynthContext context,
-                                      Graphics g, int x, int y, int w, int h) {
-        JTabbedPane pane = (JTabbedPane)context.getComponent();
-        int selectedIndex = pane.getSelectedIndex();
-        PositionType placement = GTKLookAndFeel.SwingOrientationConstantToGTK(
-                                                        pane.getTabPlacement());
-
-        int gapStart = 0;
-        int gapSize = 0;
-        if (selectedIndex != -1) {
-            Rectangle tabBounds = pane.getBoundsAt(selectedIndex);
-
-            if (placement == PositionType.TOP ||
-                placement == PositionType.BOTTOM) {
-
-                gapStart = tabBounds.x - x;
-                gapSize = tabBounds.width;
-            }
-            else {
-                gapStart = tabBounds.y - y;
-                gapSize = tabBounds.height;
-            }
-        }
-
-        Region id = context.getRegion();
-        int gtkState = GTKLookAndFeel.synthStateToGTKState(
-                id, context.getComponentState());
-        synchronized (UNIXToolkit.GTK_LOCK) {
-            if (! ENGINE.paintCachedImage(g, x, y, w, h,
-                    id, gtkState, placement, gapStart, gapSize)) {
-                ENGINE.startPainting(g, x, y, w, h,
-                        id, gtkState, placement, gapStart, gapSize);
-                ENGINE.paintBoxGap(g, context, id, gtkState, ShadowType.OUT,
-                        "notebook", x, y, w, h, placement, gapStart, gapSize);
-                ENGINE.finishPainting();
-            }
-        }
-    }
-
-    public void paintTabbedPaneTabBackground(SynthContext context,
-                                           Graphics g,
-                                           int x, int y, int w, int h,
-                                           int tabIndex) {
-        Region id = context.getRegion();
-        int state = context.getComponentState();
-        int gtkState = ((state & SynthConstants.SELECTED) != 0 ?
-            SynthConstants.ENABLED : SynthConstants.PRESSED);
-        JTabbedPane pane = (JTabbedPane)context.getComponent();
-        int placement = pane.getTabPlacement();
-
-        synchronized (UNIXToolkit.GTK_LOCK) {
-            if (! ENGINE.paintCachedImage(g, x, y, w, h,
-                    id, gtkState, placement, tabIndex)) {
-                PositionType side = POSITIONS[placement - 1];
-                ENGINE.startPainting(g, x, y, w, h,
-                        id, gtkState, placement, tabIndex);
-                ENGINE.paintExtension(g, context, id, gtkState,
-                        ShadowType.OUT, "tab", x, y, w, h, side, tabIndex);
-                ENGINE.finishPainting();
-            }
-        }
-    }
-
-    //
-    // TEXT_PANE
-    //
-    public void paintTextPaneBackground(SynthContext context, Graphics g,
-                                        int x, int y, int w, int h) {
-        paintTextAreaBackground(context, g, x, y, w, h);
-    }
-
-    //
-    // EDITOR_PANE
-    //
-    public void paintEditorPaneBackground(SynthContext context, Graphics g,
-                                          int x, int y, int w, int h) {
-        paintTextAreaBackground(context, g, x, y, w, h);
-    }
-
-    //
-    // TEXT_AREA
-    //
-    public void paintTextAreaBackground(SynthContext context, Graphics g,
-                                        int x, int y, int w, int h) {
-        // Does not call into ENGINE for better performance
-        fillArea(context, g, x, y, w, h, GTKColorType.TEXT_BACKGROUND);
-    }
-
-    //
-    // TEXT_FIELD
-    //
-    // NOTE: Combobox and Label, Password and FormattedTextField calls this
-    // too.
-    private void paintTextBackground(SynthContext context, Graphics g,
-                                     int x, int y, int w, int h) {
-        // Text is odd in that it uses the TEXT_BACKGROUND vs BACKGROUND.
-        JComponent c = context.getComponent();
-        Container container = c.getParent();
-        Container containerParent = null;
-        GTKStyle style = (GTKStyle)context.getStyle();
-        Region id = context.getRegion();
-        int state = context.getComponentState();
-
-        if (c instanceof ListCellRenderer && container != null) {
-            containerParent = container.getParent();
-            if (containerParent instanceof JComboBox
-                    && containerParent.hasFocus()) {
-                state |= SynthConstants.FOCUSED;
-            }
-        }
-
-        synchronized (UNIXToolkit.GTK_LOCK) {
-            if (ENGINE.paintCachedImage(g, x, y, w, h, id, state)) {
-                return;
-            }
-
-            int gtkState = GTKLookAndFeel.synthStateToGTKState(id, state);
-            int focusSize = 0;
-            boolean interiorFocus = style.getClassSpecificBoolValue(
-                    context, "interior-focus", true);
-
-            focusSize = style.getClassSpecificIntValue(context,
-                    "focus-line-width",1);
-            if (!interiorFocus && (state & SynthConstants.FOCUSED) != 0) {
-                x += focusSize;
-                y += focusSize;
-                w -= 2 * focusSize;
-                h -= 2 * focusSize;
-            }
-
-            int xThickness = style.getXThickness();
-            int yThickness = style.getYThickness();
-
-            ENGINE.startPainting(g, x, y, w, h, id, state);
-            ENGINE.paintShadow(g, context, id, gtkState,
-                               ShadowType.IN, "entry", x, y, w, h);
-            ENGINE.paintFlatBox(g, context, id,
-                                gtkState, ShadowType.NONE, "entry_bg",
-                                x + xThickness,
-                                y + yThickness,
-                                w - (2 * xThickness),
-                                h - (2 * yThickness),
-                                ColorType.TEXT_BACKGROUND);
-
-            if (focusSize > 0 && (state & SynthConstants.FOCUSED) != 0) {
-                if (!interiorFocus) {
-                    x -=  focusSize;
-                    y -=  focusSize;
-                    w +=  2 * focusSize;
-                    h +=  2 * focusSize;
-                } else {
-                    if (containerParent instanceof JComboBox) {
-                        x += (focusSize + 2);
-                        y += (focusSize + 1);
-                        w -= (2 * focusSize + 1);
-                        h -= (2 * focusSize + 2);
-                    } else {
-                        x += focusSize;
-                        y += focusSize;
-                        w -= 2 * focusSize;
-                        h -= 2 * focusSize;
-                    }
-                }
-                ENGINE.paintFocus(g, context, id, gtkState,
-                        "entry", x, y, w, h);
-            }
-            ENGINE.finishPainting();
-        }
-    }
-
-    private void paintTreeCellEditorBackground(SynthContext context, Graphics g,
-                                               int x, int y, int w, int h) {
-        Region id = context.getRegion();
-        int gtkState = GTKLookAndFeel.synthStateToGTKState(
-                id, context.getComponentState());
-        synchronized (UNIXToolkit.GTK_LOCK) {
-            if (! ENGINE.paintCachedImage(g, x, y, w, h, id, gtkState)) {
-                ENGINE.startPainting(g, x, y, w, h, id, gtkState);
-                ENGINE.paintFlatBox(g, context, id, gtkState, ShadowType.NONE,
-                        "entry_bg", x, y, w, h, ColorType.TEXT_BACKGROUND);
-                ENGINE.finishPainting();
-            }
-        }
-    }
-
-
-    //
-    // ROOT_PANE
-    //
-    public void paintRootPaneBackground(SynthContext context, Graphics g,
-                                        int x, int y, int w, int h) {
-        // Does not call into ENGINE for better performance
-        fillArea(context, g, x, y, w, h, GTKColorType.BACKGROUND);
-    }
-
-    //
-    // TOGGLE_BUTTON
-    //
-    public void paintToggleButtonBackground(SynthContext context,
-                                            Graphics g,
-                                            int x, int y, int w, int h) {
-        Region id = context.getRegion();
-        JToggleButton toggleButton = (JToggleButton)context.getComponent();
-        boolean paintBG = toggleButton.isContentAreaFilled() &&
-                          toggleButton.isBorderPainted();
-        boolean paintFocus = toggleButton.isFocusPainted();
-        boolean toolButton = (toggleButton.getParent() instanceof JToolBar);
-        paintButtonBackgroundImpl(context, g, id, "button",
-                                  x, y, w, h,
-                                  paintBG, paintFocus, false, toolButton);
-    }
-
-
-    //
-    // SCROLL_BAR
-    //
-    public void paintScrollBarBackground(SynthContext context,
-                                          Graphics g,
-                                          int x, int y, int w,int h) {
-        Region id = context.getRegion();
-        boolean focused =
-                (context.getComponentState() & SynthConstants.FOCUSED) != 0;
-        synchronized (UNIXToolkit.GTK_LOCK) {
-            if (ENGINE.paintCachedImage(g, x, y, w, h, id, focused)) {
-                return;
-            }
-            ENGINE.startPainting(g, x, y, w, h, id, focused);
-
-            // Note: the scrollbar insets already include the "trough-border",
-            // which is needed to position the scrollbar buttons properly.
-            // But when we render, we need to take the trough border out
-            // of the equation so that we paint the entire area covered by
-            // the trough border and the scrollbar content itself.
-            Insets insets = context.getComponent().getInsets();
-            GTKStyle style = (GTKStyle)context.getStyle();
-            int troughBorder =
-                style.getClassSpecificIntValue(context, "trough-border", 1);
-            insets.left   -= troughBorder;
-            insets.right  -= troughBorder;
-            insets.top    -= troughBorder;
-            insets.bottom -= troughBorder;
-
-            ENGINE.paintBox(g, context, id, SynthConstants.PRESSED,
-                            ShadowType.IN, "trough",
-                            x + insets.left,
-                            y + insets.top,
-                            w - insets.left - insets.right,
-                            h - insets.top - insets.bottom);
-
-            if (focused) {
-                ENGINE.paintFocus(g, context, id,
-                        SynthConstants.ENABLED, "trough", x, y, w, h);
-            }
-            ENGINE.finishPainting();
-        }
-    }
-
-
-    //
-    // SCROLL_BAR_THUMB
-    //
-    public void paintScrollBarThumbBackground(SynthContext context,
-            Graphics g, int x, int y, int w, int h, int dir) {
-        Region id = context.getRegion();
-        int gtkState = GTKLookAndFeel.synthStateToGTKState(
-                id, context.getComponentState());
-
-        // The clearlooks engine paints scrollbar thumbs differently
-        // depending on the current scroll value (specifically, it will avoid
-        // rendering a certain line when the thumb is at the starting or
-        // ending position).  Therefore, we normalize the current value to
-        // the range [0,100] here and then pass it down to setRangeValue()
-        // so that the native widget is configured appropriately.  Note that
-        // there are really only four values that matter (min, middle, max,
-        // or fill) so we restrict to one of those four values to avoid
-        // blowing out the image cache.
-        JScrollBar sb = (JScrollBar)context.getComponent();
-        boolean rtl =
-            sb.getOrientation() == JScrollBar.HORIZONTAL &&
-            !sb.getComponentOrientation().isLeftToRight();
-        double min = 0;
-        double max = 100;
-        double visible = 20;
-        double value;
-        if (sb.getMaximum() - sb.getMinimum() == sb.getVisibleAmount()) {
-            // In this case, the thumb fills the entire track, so it is
-            // touching both ends at the same time
-            value = 0;
-            visible = 100;
-        } else if (sb.getValue() == sb.getMinimum()) {
-            // At minimum
-            value = rtl ? 100 : 0;
-        } else if (sb.getValue() >= sb.getMaximum() - sb.getVisibleAmount()) {
-            // At maximum
-            value = rtl ? 0 : 100;
-        } else {
-            // Somewhere in between
-            value = 50;
-        }
-
-        synchronized (UNIXToolkit.GTK_LOCK) {
-            if (! ENGINE.paintCachedImage(g, x, y, w, h, id, gtkState,
-                                          dir, value, visible, rtl))
-            {
-                ENGINE.startPainting(g, x, y, w, h, id, gtkState,
-                                     dir, value, visible, rtl);
-                Orientation orientation = (dir == JScrollBar.HORIZONTAL ?
-                    Orientation.HORIZONTAL : Orientation.VERTICAL);
-                ENGINE.setRangeValue(context, id, value, min, max, visible);
-                ENGINE.paintSlider(g, context, id, gtkState,
-                        ShadowType.OUT, "slider", x, y, w, h, orientation);
-                ENGINE.finishPainting();
-            }
-        }
-    }
-
-    //
-    // TOOL_TIP
-    //
-    public void paintToolTipBackground(SynthContext context, Graphics g,
-                                        int x, int y, int w,int h) {
-        Region id = context.getRegion();
-        synchronized (UNIXToolkit.GTK_LOCK) {
-            if (! ENGINE.paintCachedImage(g, x, y, w, h, id)) {
-                ENGINE.startPainting(g, x, y, w, h, id);
-                ENGINE.paintFlatBox(g, context, id, SynthConstants.ENABLED,
-                        ShadowType.OUT, "tooltip", x, y, w, h,
-                        ColorType.BACKGROUND);
-                ENGINE.finishPainting();
-            }
-        }
-    }
-
-
-    //
-    // TREE_CELL
-    //
-    public void paintTreeCellBackground(SynthContext context, Graphics g,
-                                        int x, int y, int w, int h) {
-        Region id = context.getRegion();
-        int state = context.getComponentState();
-        int gtkState = GTKLookAndFeel.synthStateToGTKState(id, state);
-        synchronized (UNIXToolkit.GTK_LOCK) {
-            if (! ENGINE.paintCachedImage(g, x, y, w, h, id, state)) {
-                ENGINE.startPainting(g, x, y, w, h, id, state);
-                // the string arg should alternate based on row being painted,
-                // but we currently don't pass that in.
-                ENGINE.paintFlatBox(g, context, id, gtkState, ShadowType.NONE,
-                        "cell_odd", x, y, w, h, ColorType.TEXT_BACKGROUND);
-                ENGINE.finishPainting();
-            }
-        }
-    }
-
-    public void paintTreeCellFocus(SynthContext context, Graphics g,
-                                    int x, int y, int w, int h) {
-        Region id = Region.TREE_CELL;
-        int state = context.getComponentState();
-        paintFocus(context, g, id, state, "treeview", x, y, w, h);
-    }
-
-
-    //
-    // TREE
-    //
-    public void paintTreeBackground(SynthContext context, Graphics g,
-                                    int x, int y, int w, int h) {
-        // As far as I can tell, these don't call into the ENGINE.
-        fillArea(context, g, x, y, w, h, GTKColorType.TEXT_BACKGROUND);
-    }
-
-
-    //
-    // VIEWPORT
-    //
-    public void paintViewportBackground(SynthContext context, Graphics g,
-                                        int x, int y, int w, int h) {
-        // As far as I can tell, these don't call into the ENGINE.
-        // Also note that you don't want this to call into the ENGINE
-        // as if it where to paint a background JViewport wouldn't scroll
-        // correctly.
-        fillArea(context, g, x, y, w, h, GTKColorType.TEXT_BACKGROUND);
-    }
-
-    void paintFocus(SynthContext context, Graphics g, Region id,
-            int state, String detail, int x, int y, int w, int h) {
-        int gtkState = GTKLookAndFeel.synthStateToGTKState(id, state);
-        synchronized (UNIXToolkit.GTK_LOCK) {
-            if (! ENGINE.paintCachedImage(g, x, y, w, h, id, gtkState, "focus")) {
-                ENGINE.startPainting(g, x, y, w, h, id, gtkState, "focus");
-                ENGINE.paintFocus(g, context, id, gtkState, detail, x, y, w, h);
-                ENGINE.finishPainting();
-            }
-        }
-    }
-
-    void paintMetacityElement(SynthContext context, Graphics g,
-            int gtkState, String detail, int x, int y, int w, int h,
-            ShadowType shadow, ArrowType direction) {
-        synchronized (UNIXToolkit.GTK_LOCK) {
-            if (! ENGINE.paintCachedImage(
-                    g, x, y, w, h, gtkState, detail, shadow, direction)) {
-                ENGINE.startPainting(
-                        g, x, y, w, h, gtkState, detail, shadow, direction);
-                if (detail == "metacity-arrow") {
-                    ENGINE.paintArrow(g, context, Region.INTERNAL_FRAME_TITLE_PANE,
-                            gtkState, shadow, direction, "", x, y, w, h);
-
-                } else if (detail == "metacity-box") {
-                    ENGINE.paintBox(g, context, Region.INTERNAL_FRAME_TITLE_PANE,
-                            gtkState, shadow, "", x, y, w, h);
-
-                } else if (detail == "metacity-vline") {
-                    ENGINE.paintVline(g, context, Region.INTERNAL_FRAME_TITLE_PANE,
-                            gtkState, "", x, y, w, h);
-                }
-                ENGINE.finishPainting();
-            }
-        }
-    }
-
-    void paintIcon(SynthContext context, Graphics g,
-            Method paintMethod, int x, int y, int w, int h) {
-        int state = context.getComponentState();
-        synchronized (UNIXToolkit.GTK_LOCK) {
-            if (! ENGINE.paintCachedImage(g, x, y, w, h, state, paintMethod)) {
-                ENGINE.startPainting(g, x, y, w, h, state, paintMethod);
-                try {
-                    paintMethod.invoke(this, context, g, state, x, y, w, h);
-                } catch (IllegalAccessException iae) {
-                    assert false;
-                } catch (InvocationTargetException ite) {
-                    assert false;
-                }
-                ENGINE.finishPainting();
-            }
-        }
-    }
-
-    void paintIcon(SynthContext context, Graphics g,
-            Method paintMethod, int x, int y, int w, int h, Object direction) {
-        int state = context.getComponentState();
-        synchronized (UNIXToolkit.GTK_LOCK) {
-            if (! ENGINE.paintCachedImage(g,
-                    x, y, w, h, state, paintMethod, direction)) {
-                ENGINE.startPainting(g,
-                        x, y, w, h, state, paintMethod, direction);
-                try {
-                    paintMethod.invoke(this, context,
-                            g, state, x, y, w, h, direction);
-                } catch (IllegalAccessException iae) {
-                    assert false;
-                } catch (InvocationTargetException ite) {
-                    assert false;
-                }
-                ENGINE.finishPainting();
-            }
-        }
-    }
-
-    // All icon painting methods are called from under GTK_LOCK
-
-    public void paintTreeExpandedIcon(SynthContext context,
-            Graphics g, int state, int x, int y, int w, int h) {
-        ENGINE.paintExpander(g, context, Region.TREE,
-                GTKLookAndFeel.synthStateToGTKState(context.getRegion(), state),
-                ExpanderStyle.EXPANDED, "treeview", x, y, w, h);
-    }
-
-    public void paintTreeCollapsedIcon(SynthContext context,
-            Graphics g, int state, int x, int y, int w, int h) {
-        ENGINE.paintExpander(g, context, Region.TREE,
-                GTKLookAndFeel.synthStateToGTKState(context.getRegion(), state),
-                ExpanderStyle.COLLAPSED, "treeview", x, y, w, h);
-    }
-
-    public void paintCheckBoxIcon(SynthContext context,
-            Graphics g, int state, int x, int y, int w, int h) {
-        GTKStyle style = (GTKStyle)context.getStyle();
-        int size = style.getClassSpecificIntValue(context,
-                        "indicator-size", GTKIconFactory.DEFAULT_ICON_SIZE);
-        int offset = style.getClassSpecificIntValue(context,
-                        "indicator-spacing", GTKIconFactory.DEFAULT_ICON_SPACING);
-
-        ENGINE.paintCheck(g, context, Region.CHECK_BOX, "checkbutton",
-                x+offset, y+offset, size, size);
-    }
-
-    public void paintRadioButtonIcon(SynthContext context,
-            Graphics g, int state, int x, int y, int w, int h) {
-        GTKStyle style = (GTKStyle)context.getStyle();
-        int size = style.getClassSpecificIntValue(context,
-                        "indicator-size", GTKIconFactory.DEFAULT_ICON_SIZE);
-        int offset = style.getClassSpecificIntValue(context,
-                        "indicator-spacing", GTKIconFactory.DEFAULT_ICON_SPACING);
-
-        ENGINE.paintOption(g, context, Region.RADIO_BUTTON, "radiobutton",
-                x+offset, y+offset, size, size);
-    }
-
-    public void paintMenuArrowIcon(SynthContext context, Graphics g,
-            int state, int x, int y, int w, int h, ArrowType dir) {
-        int gtkState = GTKLookAndFeel.synthStateToGTKState(
-                context.getRegion(), state);
-        ShadowType shadow = ShadowType.OUT;
-        if (gtkState == SynthConstants.MOUSE_OVER) {
-            shadow = ShadowType.IN;
-        }
-        ENGINE.paintArrow(g, context, Region.MENU_ITEM, gtkState, shadow,
-                dir, "menuitem", x + 3, y + 3, 7, 7);
-    }
-
-    public void paintCheckBoxMenuItemCheckIcon(SynthContext context,
-            Graphics g, int state, int x, int y, int w, int h) {
-
-        GTKStyle style = (GTKStyle)context.getStyle();
-        int size = style.getClassSpecificIntValue(context,"indicator-size",
-                GTKIconFactory.DEFAULT_TOGGLE_MENU_ITEM_SIZE);
-
-        ENGINE.paintCheck(g, context, Region.CHECK_BOX_MENU_ITEM, "check",
-                x + GTKIconFactory.CHECK_ICON_EXTRA_INSET,
-                y + GTKIconFactory.CHECK_ICON_EXTRA_INSET,
-                size, size);
-    }
-
-    public void paintRadioButtonMenuItemCheckIcon(SynthContext context,
-            Graphics g, int state, int x, int y, int w, int h) {
-
-        GTKStyle style = (GTKStyle)context.getStyle();
-        int size = style.getClassSpecificIntValue(context,"indicator-size",
-                GTKIconFactory.DEFAULT_TOGGLE_MENU_ITEM_SIZE);
-
-        ENGINE.paintOption(g, context, Region.RADIO_BUTTON_MENU_ITEM, "option",
-                x + GTKIconFactory.CHECK_ICON_EXTRA_INSET,
-                y + GTKIconFactory.CHECK_ICON_EXTRA_INSET,
-                size, size);
-    }
-
-    public void paintToolBarHandleIcon(SynthContext context, Graphics g,
-            int state, int x, int y, int w, int h, Orientation orientation) {
-        int gtkState = GTKLookAndFeel.synthStateToGTKState(
-                context.getRegion(), state);
-
-        // The orientation parameter passed down by Synth refers to the
-        // orientation of the toolbar, but the one we pass to GTK refers
-        // to the orientation of the handle.  Therefore, we need to swap
-        // the value here: horizontal toolbars have vertical handles, and
-        // vice versa.
-        orientation = (orientation == Orientation.HORIZONTAL) ?
-            Orientation.VERTICAL : Orientation.HORIZONTAL;
-
-        ENGINE.paintHandle(g, context, Region.TOOL_BAR, gtkState,
-                ShadowType.OUT, "handlebox", x, y, w, h, orientation);
-    }
-
-    public void paintAscendingSortIcon(SynthContext context,
-            Graphics g, int state, int x, int y, int w, int h) {
-        ENGINE.paintArrow(g, context, Region.TABLE, SynthConstants.ENABLED,
-                ShadowType.IN, ArrowType.UP, "arrow", x, y, w, h);
-    }
-
-    public void paintDescendingSortIcon(SynthContext context,
-            Graphics g, int state, int x, int y, int w, int h) {
-        ENGINE.paintArrow(g, context, Region.TABLE, SynthConstants.ENABLED,
-                ShadowType.IN, ArrowType.DOWN, "arrow", x, y, w, h);
-    }
-
-    /*
-     * Fill an area with color determined from this context's Style using the
-     * specified GTKColorType
-     */
-    private void fillArea(SynthContext context, Graphics g,
-                          int x, int y, int w, int h, ColorType colorType) {
-        if (context.getComponent().isOpaque()) {
-            Region id = context.getRegion();
-            int gtkState = GTKLookAndFeel.synthStateToGTKState(id,
-                    context.getComponentState());
-            GTKStyle style = (GTKStyle)context.getStyle();
-
-            g.setColor(style.getGTKColor(context, gtkState, colorType));
-            g.fillRect(x, y, w, h);
-        }
-    }
-
-    // Refer to GTKLookAndFeel for details on this.
-    static class ListTableFocusBorder extends AbstractBorder implements
-                          UIResource {
-
-        private boolean selectedCell;
-        private boolean focusedCell;
-
-        public static ListTableFocusBorder getSelectedCellBorder() {
-            return new ListTableFocusBorder(true, true);
-        }
-
-        public static ListTableFocusBorder getUnselectedCellBorder() {
-            return new ListTableFocusBorder(false, true);
-        }
-
-        public static ListTableFocusBorder getNoFocusCellBorder() {
-            return new ListTableFocusBorder(false, false);
-        }
-
-        public ListTableFocusBorder(boolean selectedCell, boolean focusedCell) {
-            this.selectedCell = selectedCell;
-            this.focusedCell = focusedCell;
-        }
-
-        private SynthContext getContext(Component c) {
-            SynthContext context = null;
-
-            ComponentUI ui = null;
-            if (c instanceof JLabel) {
-                ui = ((JLabel)c).getUI();
-            }
-
-            if (ui instanceof SynthUI) {
-                context = ((SynthUI)ui).getContext((JComponent)c);
-            }
-
-            return context;
-        }
-
-        public void paintBorder(Component c, Graphics g, int x, int y,
-                                int w, int h) {
-            if (focusedCell) {
-                SynthContext context = getContext(c);
-                int state = (selectedCell? SynthConstants.SELECTED:
-                             SynthConstants.FOCUSED | SynthConstants.ENABLED);
-
-                if (context != null) {
-                    GTKPainter.INSTANCE.paintFocus(context, g,
-                            Region.TABLE, state, "", x, y, w, h);
-                }
-            }
-        }
-
-        public Insets getBorderInsets(Component c, Insets i) {
-            SynthContext context = getContext(c);
-
-            if (context != null) {
-                i = context.getStyle().getInsets(context, i);
-            }
-
-            return i;
-        }
-
-        public boolean isBorderOpaque() {
-            return true;
-        }
-    }
-
-    // TitledBorder implementation for GTK L&F
-    static class TitledBorder extends AbstractBorder implements UIResource {
-
-        public void paintBorder(Component c, Graphics g, int x, int y,
-                                int w, int h) {
-            SynthContext context = getContext((JComponent)c);
-            Region id = context.getRegion();
-            int state = context.getComponentState();
-            int gtkState = GTKLookAndFeel.synthStateToGTKState(id, state);
-
-            synchronized (UNIXToolkit.GTK_LOCK) {
-                if (! ENGINE.paintCachedImage(g, x, y, w, h, id)) {
-                    ENGINE.startPainting(g, x, y, w, h, id);
-                    ENGINE.paintShadow(g, context, id, gtkState, ShadowType.ETCHED_IN,
-                                      "frame", x, y, w, h);
-                    ENGINE.finishPainting();
-                }
-            }
-        }
-
-        public Insets getBorderInsets(Component c, Insets i) {
-            SynthContext context = getContext((JComponent)c);
-            return context.getStyle().getInsets(context, i);
-        }
-
-        public boolean isBorderOpaque() {
-            return true;
-        }
-
-        private SynthStyle getStyle(JComponent c) {
-            return SynthLookAndFeel.getStyle(c, GTKEngine.CustomRegion.TITLED_BORDER);
-        }
-
-        private SynthContext getContext(JComponent c) {
-            int state = SynthConstants.DEFAULT;
-            return new SynthContext(c, GTKEngine.CustomRegion.TITLED_BORDER,
-                                    getStyle(c), state);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/GTKRegion.java b/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/GTKRegion.java
deleted file mode 100755
index 2317def..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/GTKRegion.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-package com.sun.java.swing.plaf.gtk;
-
-import javax.swing.plaf.synth.Region;
-
-/**
- * A typesafe enumeration of the distinct rendering portions specific
- * to GTK.
- *
- * @author Scott Violet
- */
-class GTKRegion extends Region {
-    public static final Region HANDLE_BOX = new GTKRegion("HandleBox", null,
-                                                          true);
-
-    protected GTKRegion(String name, String ui, boolean subregion) {
-        super(name, ui, subregion);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/GTKStyle.java b/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/GTKStyle.java
deleted file mode 100755
index 751c2d8..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/GTKStyle.java
+++ /dev/null
@@ -1,1141 +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.
- */
-
-package com.sun.java.swing.plaf.gtk;
-
-import java.awt.*;
-import java.lang.reflect.*;
-import java.security.*;
-import java.util.*;
-import javax.swing.*;
-import javax.swing.plaf.*;
-import javax.swing.plaf.synth.*;
-
-import sun.awt.AppContext;
-import sun.awt.UNIXToolkit;
-import sun.swing.SwingUtilities2;
-import sun.swing.plaf.synth.SynthIcon;
-
-import com.sun.java.swing.plaf.gtk.GTKEngine.WidgetType;
-
-/**
- *
- * @author Scott Violet
- */
-class GTKStyle extends SynthStyle implements GTKConstants {
-
-    private static native int nativeGetXThickness(int widgetType);
-    private static native int nativeGetYThickness(int widgetType);
-    private static native int nativeGetColorForState(int widgetType,
-                                                     int state, int typeID);
-    private static native Object nativeGetClassValue(int widgetType,
-                                                     String key);
-    private static native String nativeGetPangoFontName(int widgetType);
-
-    private static final String ICON_PROPERTY_PREFIX = "gtk.icon.";
-
-    static final Color BLACK_COLOR = new ColorUIResource(Color.BLACK);
-    static final Color WHITE_COLOR = new ColorUIResource(Color.WHITE);
-
-    static final Font DEFAULT_FONT = new FontUIResource("sansserif",
-                                                        Font.PLAIN, 10  );
-    static final Insets BUTTON_DEFAULT_BORDER_INSETS = new Insets(1, 1, 1, 1);
-
-    private static final GTKGraphicsUtils GTK_GRAPHICS = new GTKGraphicsUtils();
-
-    /**
-     * Maps from a key that is passed to Style.get to the equivalent class
-     * specific key.
-     */
-    private static final Map<String,String> CLASS_SPECIFIC_MAP;
-
-    /**
-     * Backing style properties that are used if the style does not
-     * defined the property.
-     */
-    private static final Map<String,GTKStockIcon> ICONS_MAP;
-
-    /**
-     * The font used for this particular style, as determined at
-     * construction time.
-     */
-    private final Font font;
-
-    /** Widget type used when looking up class specific values. */
-    private final int widgetType;
-
-    /** The x/y thickness values for this particular style. */
-    private final int xThickness, yThickness;
-
-    GTKStyle(Font userFont, WidgetType widgetType) {
-        this.widgetType = widgetType.ordinal();
-
-        String pangoFontName;
-        synchronized (sun.awt.UNIXToolkit.GTK_LOCK) {
-            xThickness = nativeGetXThickness(this.widgetType);
-            yThickness = nativeGetYThickness(this.widgetType);
-            pangoFontName = nativeGetPangoFontName(this.widgetType);
-        }
-
-        Font pangoFont = null;
-        if (pangoFontName != null) {
-            pangoFont = PangoFonts.lookupFont(pangoFontName);
-        }
-        if (pangoFont != null) {
-            this.font = pangoFont;
-        } else if (userFont != null) {
-            this.font = userFont;
-        } else {
-            this.font = DEFAULT_FONT;
-        }
-    }
-
-    @Override
-    public void installDefaults(SynthContext context) {
-        super.installDefaults(context);
-        if (!context.getRegion().isSubregion()) {
-            context.getComponent().putClientProperty(
-                SwingUtilities2.AA_TEXT_PROPERTY_KEY,
-                GTKLookAndFeel.aaTextInfo);
-        }
-    }
-
-    @Override
-    public SynthGraphicsUtils getGraphicsUtils(SynthContext context) {
-        return GTK_GRAPHICS;
-    }
-
-    /**
-     * Returns a <code>SynthPainter</code> that will route the appropriate
-     * calls to a <code>GTKEngine</code>.
-     *
-     * @param state SynthContext indentifying requestor
-     * @return SynthPainter
-     */
-    @Override
-    public SynthPainter getPainter(SynthContext state) {
-        return GTKPainter.INSTANCE;
-    }
-
-    protected Color getColorForState(SynthContext context, ColorType type) {
-        if (type == ColorType.FOCUS || type == GTKColorType.BLACK) {
-            return BLACK_COLOR;
-        }
-        else if (type == GTKColorType.WHITE) {
-            return WHITE_COLOR;
-        }
-
-        Region id = context.getRegion();
-        int state = context.getComponentState();
-        state = GTKLookAndFeel.synthStateToGTKState(id, state);
-
-        if (type == ColorType.TEXT_FOREGROUND &&
-               (id == Region.BUTTON ||
-                id == Region.CHECK_BOX ||
-                id == Region.CHECK_BOX_MENU_ITEM ||
-                id == Region.MENU ||
-                id == Region.MENU_ITEM ||
-                id == Region.RADIO_BUTTON ||
-                id == Region.RADIO_BUTTON_MENU_ITEM ||
-                id == Region.TABBED_PANE_TAB ||
-                id == Region.TOGGLE_BUTTON ||
-                id == Region.TOOL_TIP ||
-                id == Region.MENU_ITEM_ACCELERATOR ||
-                id == Region.TABBED_PANE_TAB)) {
-            type = ColorType.FOREGROUND;
-        } else if (id == Region.TABLE ||
-                   id == Region.LIST ||
-                   id == Region.TREE ||
-                   id == Region.TREE_CELL) {
-            if (type == ColorType.FOREGROUND) {
-                type = ColorType.TEXT_FOREGROUND;
-                if (state == SynthConstants.PRESSED) {
-                    state = SynthConstants.SELECTED;
-                }
-            } else if (type == ColorType.BACKGROUND) {
-                type = ColorType.TEXT_BACKGROUND;
-            }
-        }
-
-        return getStyleSpecificColor(context, state, type);
-    }
-
-    /**
-     * Returns color specific to the current style. This method is
-     * invoked when other variants don't fit.
-     */
-    private Color getStyleSpecificColor(SynthContext context, int state,
-                                        ColorType type)
-    {
-        state = GTKLookAndFeel.synthStateToGTKStateType(state).ordinal();
-        synchronized (sun.awt.UNIXToolkit.GTK_LOCK) {
-            int rgb = nativeGetColorForState(widgetType, state,
-                                             type.getID());
-            return new ColorUIResource(rgb);
-        }
-    }
-
-    Color getGTKColor(int state, ColorType type) {
-        return getGTKColor(null, state, type);
-    }
-
-    /**
-     * Returns the color for the specified state.
-     *
-     * @param context SynthContext identifying requester
-     * @param state to get the color for
-     * @param type of the color
-     * @return Color to render with
-     */
-    Color getGTKColor(SynthContext context, int state, ColorType type) {
-        if (context != null) {
-            JComponent c = context.getComponent();
-            Region id = context.getRegion();
-
-            state = GTKLookAndFeel.synthStateToGTKState(id, state);
-            if (!id.isSubregion() &&
-                (state & SynthConstants.ENABLED) != 0) {
-                if (type == ColorType.BACKGROUND ||
-                    type == ColorType.TEXT_BACKGROUND) {
-                    Color bg = c.getBackground();
-                    if (!(bg instanceof UIResource)) {
-                        return bg;
-                    }
-                }
-                else if (type == ColorType.FOREGROUND ||
-                         type == ColorType.TEXT_FOREGROUND) {
-                    Color fg = c.getForeground();
-                    if (!(fg instanceof UIResource)) {
-                        return fg;
-                    }
-                }
-            }
-        }
-
-        return getStyleSpecificColor(context, state, type);
-    }
-
-    @Override
-    public Color getColor(SynthContext context, ColorType type) {
-        JComponent c = context.getComponent();
-        Region id = context.getRegion();
-        int state = context.getComponentState();
-
-        if (c.getName() == "Table.cellRenderer") {
-             if (type == ColorType.BACKGROUND) {
-                 return c.getBackground();
-             }
-             if (type == ColorType.FOREGROUND) {
-                 return c.getForeground();
-             }
-        }
-
-        if (id == Region.LABEL && type == ColorType.TEXT_FOREGROUND) {
-            type = ColorType.FOREGROUND;
-        }
-
-        // For the enabled state, prefer the widget's colors
-        if (!id.isSubregion() && (state & SynthConstants.ENABLED) != 0) {
-            if (type == ColorType.BACKGROUND) {
-                return c.getBackground();
-            }
-            else if (type == ColorType.FOREGROUND) {
-                return c.getForeground();
-            }
-            else if (type == ColorType.TEXT_FOREGROUND) {
-                // If getForeground returns a non-UIResource it means the
-                // developer has explicitly set the foreground, use it over
-                // that of TEXT_FOREGROUND as that is typically the expected
-                // behavior.
-                Color color = c.getForeground();
-                if (color != null && !(color instanceof UIResource)) {
-                    return color;
-                }
-            }
-        }
-        return getColorForState(context, type);
-    }
-
-    protected Font getFontForState(SynthContext context) {
-        return font;
-    }
-
-    /**
-     * Returns the X thickness to use for this GTKStyle.
-     *
-     * @return x thickness.
-     */
-    int getXThickness() {
-        return xThickness;
-    }
-
-    /**
-     * Returns the Y thickness to use for this GTKStyle.
-     *
-     * @return y thickness.
-     */
-    int getYThickness() {
-        return yThickness;
-    }
-
-    /**
-     * Returns the Insets. If <code>insets</code> is non-null the resulting
-     * insets will be placed in it, otherwise a new Insets object will be
-     * created and returned.
-     *
-     * @param context SynthContext indentifying requestor
-     * @param insets Where to place Insets
-     * @return Insets.
-     */
-    @Override
-    public Insets getInsets(SynthContext state, Insets insets) {
-        Region id = state.getRegion();
-        JComponent component = state.getComponent();
-        String name = (id.isSubregion()) ? null : component.getName();
-
-        if (insets == null) {
-            insets = new Insets(0, 0, 0, 0);
-        } else {
-            insets.top = insets.bottom = insets.left = insets.right = 0;
-        }
-
-        if (id == Region.ARROW_BUTTON || id == Region.BUTTON ||
-                id == Region.TOGGLE_BUTTON) {
-            if ("Spinner.previousButton" == name ||
-                    "Spinner.nextButton" == name) {
-                return getSimpleInsets(state, insets, 1);
-            } else {
-                return getButtonInsets(state, insets);
-            }
-        }
-        else if (id == Region.CHECK_BOX || id == Region.RADIO_BUTTON) {
-            return getRadioInsets(state, insets);
-        }
-        else if (id == Region.MENU_BAR) {
-            return getMenuBarInsets(state, insets);
-        }
-        else if (id == Region.MENU ||
-                 id == Region.MENU_ITEM ||
-                 id == Region.CHECK_BOX_MENU_ITEM ||
-                 id == Region.RADIO_BUTTON_MENU_ITEM) {
-            return getMenuItemInsets(state, insets);
-        }
-        else if (id == Region.FORMATTED_TEXT_FIELD) {
-            return getTextFieldInsets(state, insets);
-        }
-        else if (id == Region.INTERNAL_FRAME) {
-            insets = Metacity.INSTANCE.getBorderInsets(state, insets);
-        }
-        else if (id == Region.LABEL) {
-            if ("TableHeader.renderer" == name) {
-                return getButtonInsets(state, insets);
-            }
-            else if (component instanceof ListCellRenderer) {
-                return getTextFieldInsets(state, insets);
-            }
-            else if ("Tree.cellRenderer" == name) {
-                return getSimpleInsets(state, insets, 1);
-            }
-        }
-        else if (id == Region.OPTION_PANE) {
-            return getSimpleInsets(state, insets, 6);
-        }
-        else if (id == Region.POPUP_MENU) {
-            return getSimpleInsets(state, insets, 2);
-        }
-        else if (id == Region.PROGRESS_BAR || id == Region.SLIDER ||
-                 id == Region.TABBED_PANE  || id == Region.TABBED_PANE_CONTENT ||
-                 id == Region.TOOL_BAR     ||
-                 id == Region.TOOL_BAR_DRAG_WINDOW ||
-                 id == Region.TOOL_TIP) {
-            return getThicknessInsets(state, insets);
-        }
-        else if (id == Region.SCROLL_BAR) {
-            return getScrollBarInsets(state, insets);
-        }
-        else if (id == Region.SLIDER_TRACK) {
-            return getSliderTrackInsets(state, insets);
-        }
-        else if (id == Region.TABBED_PANE_TAB) {
-            return getTabbedPaneTabInsets(state, insets);
-        }
-        else if (id == Region.TEXT_FIELD || id == Region.PASSWORD_FIELD) {
-            if (name == "Tree.cellEditor") {
-                return getSimpleInsets(state, insets, 1);
-            }
-            return getTextFieldInsets(state, insets);
-        } else if (id == Region.SEPARATOR ||
-                   id == Region.POPUP_MENU_SEPARATOR ||
-                   id == Region.TOOL_BAR_SEPARATOR) {
-            return getSeparatorInsets(state, insets);
-        } else if (id == GTKEngine.CustomRegion.TITLED_BORDER) {
-            return getThicknessInsets(state, insets);
-        }
-        return insets;
-    }
-
-    private Insets getButtonInsets(SynthContext context, Insets insets) {
-        // The following calculations are derived from gtkbutton.c
-        // (GTK+ version 2.8.20), gtk_button_size_allocate() method.
-        int CHILD_SPACING = 1;
-        int focusSize = getClassSpecificIntValue(context, "focus-line-width",1);
-        int focusPad = getClassSpecificIntValue(context, "focus-padding", 1);
-        int xThickness = getXThickness();
-        int yThickness = getYThickness();
-        int w = focusSize + focusPad + xThickness + CHILD_SPACING;
-        int h = focusSize + focusPad + yThickness + CHILD_SPACING;
-        insets.left = insets.right = w;
-        insets.top = insets.bottom = h;
-
-        Component component = context.getComponent();
-        if ((component instanceof JButton) &&
-            !(component.getParent() instanceof JToolBar) &&
-            ((JButton)component).isDefaultCapable())
-        {
-            // Include the default border insets, but only for JButtons
-            // that are default capable.  Note that
-            // JButton.getDefaultCapable() returns true by default, but
-            // GtkToolButtons are never default capable, so we skip this
-            // step if the button is contained in a toolbar.
-            Insets defaultInsets = getClassSpecificInsetsValue(context,
-                          "default-border", BUTTON_DEFAULT_BORDER_INSETS);
-            insets.left += defaultInsets.left;
-            insets.right += defaultInsets.right;
-            insets.top += defaultInsets.top;
-            insets.bottom += defaultInsets.bottom;
-        }
-
-        return insets;
-    }
-
-    /*
-     * This is used for both RADIO_BUTTON and CHECK_BOX.
-     */
-    private Insets getRadioInsets(SynthContext context, Insets insets) {
-        // The following calculations are derived from gtkcheckbutton.c
-        // (GTK+ version 2.8.20), gtk_check_button_size_allocate() method.
-        int focusSize =
-            getClassSpecificIntValue(context, "focus-line-width", 1);
-        int focusPad =
-            getClassSpecificIntValue(context, "focus-padding", 1);
-        int totalFocus = focusSize + focusPad;
-
-        // Note: GTKIconFactory.DelegateIcon will have already included the
-        // "indicator-spacing" value in the size of the indicator icon,
-        // which explains why we use zero as the left inset (or right inset
-        // in the RTL case); see 6489585 for more details.
-        insets.top    = totalFocus;
-        insets.bottom = totalFocus;
-        if (context.getComponent().getComponentOrientation().isLeftToRight()) {
-            insets.left  = 0;
-            insets.right = totalFocus;
-        } else {
-            insets.left  = totalFocus;
-            insets.right = 0;
-        }
-
-        return insets;
-    }
-
-    private Insets getMenuBarInsets(SynthContext context, Insets insets) {
-        // The following calculations are derived from gtkmenubar.c
-        // (GTK+ version 2.8.20), gtk_menu_bar_size_allocate() method.
-        int internalPadding = getClassSpecificIntValue(context,
-                                                       "internal-padding", 1);
-        int xThickness = getXThickness();
-        int yThickness = getYThickness();
-        insets.left = insets.right = xThickness + internalPadding;
-        insets.top = insets.bottom = yThickness + internalPadding;
-        return insets;
-    }
-
-    private Insets getMenuItemInsets(SynthContext context, Insets insets) {
-        // The following calculations are derived from gtkmenuitem.c
-        // (GTK+ version 2.8.20), gtk_menu_item_size_allocate() method.
-        int horizPadding = getClassSpecificIntValue(context,
-                                                    "horizontal-padding", 3);
-        int xThickness = getXThickness();
-        int yThickness = getYThickness();
-        insets.left = insets.right = xThickness + horizPadding;
-        insets.top = insets.bottom = yThickness;
-        return insets;
-    }
-
-    private Insets getThicknessInsets(SynthContext context, Insets insets) {
-        insets.left = insets.right = getXThickness();
-        insets.top = insets.bottom = getYThickness();
-        return insets;
-    }
-
-    private Insets getSeparatorInsets(SynthContext context, Insets insets) {
-        int horizPadding = 0;
-        if (context.getRegion() == Region.POPUP_MENU_SEPARATOR) {
-            horizPadding =
-                getClassSpecificIntValue(context, "horizontal-padding", 3);
-        }
-        insets.right = insets.left = getXThickness() + horizPadding;
-        insets.top = insets.bottom = getYThickness();
-        return insets;
-    }
-
-    private Insets getSliderTrackInsets(SynthContext context, Insets insets) {
-        int focusSize = getClassSpecificIntValue(context, "focus-line-width", 1);
-        int focusPad = getClassSpecificIntValue(context, "focus-padding", 1);
-        insets.top = insets.bottom =
-                insets.left = insets.right = focusSize + focusPad;
-        return insets;
-    }
-
-    private Insets getSimpleInsets(SynthContext context, Insets insets, int n) {
-        insets.top = insets.bottom = insets.right = insets.left = n;
-        return insets;
-    }
-
-    private Insets getTabbedPaneTabInsets(SynthContext context, Insets insets) {
-        int xThickness = getXThickness();
-        int yThickness = getYThickness();
-        int focusSize = getClassSpecificIntValue(context, "focus-line-width",1);
-        int pad = 2;
-
-        insets.left = insets.right = focusSize + pad + xThickness;
-        insets.top = insets.bottom = focusSize + pad + yThickness;
-        return insets;
-    }
-
-    // NOTE: this is called for ComboBox, and FormattedTextField also
-    private Insets getTextFieldInsets(SynthContext context, Insets insets) {
-        insets = getClassSpecificInsetsValue(context, "inner-border",
-                                    getSimpleInsets(context, insets, 2));
-
-        int xThickness = getXThickness();
-        int yThickness = getYThickness();
-        boolean interiorFocus =
-                getClassSpecificBoolValue(context, "interior-focus", true);
-        int focusSize = 0;
-
-        if (!interiorFocus) {
-            focusSize = getClassSpecificIntValue(context, "focus-line-width",1);
-        }
-
-        insets.left   += focusSize + xThickness;
-        insets.right  += focusSize + xThickness;
-        insets.top    += focusSize + yThickness;
-        insets.bottom += focusSize + yThickness;
-        return insets;
-    }
-
-    private Insets getScrollBarInsets(SynthContext context, Insets insets) {
-        int troughBorder =
-            getClassSpecificIntValue(context, "trough-border", 1);
-        insets.left = insets.right = insets.top = insets.bottom = troughBorder;
-
-        JComponent c = context.getComponent();
-        if (c.getParent() instanceof JScrollPane) {
-            // This scrollbar is part of a scrollpane; use only the
-            // "scrollbar-spacing" style property to determine the padding
-            // between the scrollbar and its parent scrollpane.
-            int spacing =
-                getClassSpecificIntValue(WidgetType.SCROLL_PANE,
-                                         "scrollbar-spacing", 3);
-            if (((JScrollBar)c).getOrientation() == JScrollBar.HORIZONTAL) {
-                insets.top += spacing;
-            } else {
-                if (c.getComponentOrientation().isLeftToRight()) {
-                    insets.left += spacing;
-                } else {
-                    insets.right += spacing;
-                }
-            }
-        } else {
-            // This is a standalone scrollbar; leave enough room for the
-            // focus line in addition to the trough border.
-            if (c.isFocusable()) {
-                int focusSize =
-                    getClassSpecificIntValue(context, "focus-line-width", 1);
-                int focusPad =
-                    getClassSpecificIntValue(context, "focus-padding", 1);
-                int totalFocus = focusSize + focusPad;
-                insets.left   += totalFocus;
-                insets.right  += totalFocus;
-                insets.top    += totalFocus;
-                insets.bottom += totalFocus;
-            }
-        }
-        return insets;
-    }
-
-    /**
-     * Returns the value for a class specific property for a particular
-     * WidgetType.  This method is useful in those cases where we need to
-     * fetch a value for a Region that is not associated with the component
-     * currently in use (e.g. we need to figure out the insets for a
-     * SCROLL_BAR, but certain values can only be extracted from a
-     * SCROLL_PANE region).
-     *
-     * @param wt WidgetType for which to fetch the value
-     * @param key Key identifying class specific value
-     * @return Value, or null if one has not been defined
-     */
-    private static Object getClassSpecificValue(WidgetType wt, String key) {
-        synchronized (UNIXToolkit.GTK_LOCK) {
-            return nativeGetClassValue(wt.ordinal(), key);
-        }
-    }
-
-    /**
-     * Convenience method to get a class specific integer value for
-     * a particular WidgetType.
-     *
-     * @param wt WidgetType for which to fetch the value
-     * @param key Key identifying class specific value
-     * @param defaultValue Returned if there is no value for the specified
-     *        type
-     * @return Value, or defaultValue if <code>key</code> is not defined
-     */
-    private static int getClassSpecificIntValue(WidgetType wt, String key,
-                                                int defaultValue)
-    {
-        Object value = getClassSpecificValue(wt, key);
-        if (value instanceof Number) {
-            return ((Number)value).intValue();
-        }
-        return defaultValue;
-    }
-
-    /**
-     * Returns the value for a class specific property. A class specific value
-     * is a value that will be picked up based on class hierarchy.
-     *
-     * @param key Key identifying class specific value
-     * @return Value, or null if one has not been defined.
-     */
-    Object getClassSpecificValue(String key) {
-        synchronized (sun.awt.UNIXToolkit.GTK_LOCK) {
-            return nativeGetClassValue(widgetType, key);
-        }
-    }
-
-    /**
-     * Convenience method to get a class specific integer value.
-     *
-     * @param context SynthContext indentifying requestor
-     * @param key Key identifying class specific value
-     * @param defaultValue Returned if there is no value for the specified
-     *        type
-     * @return Value, or defaultValue if <code>key</code> is not defined
-     */
-    int getClassSpecificIntValue(SynthContext context, String key,
-                                 int defaultValue)
-    {
-        Object value = getClassSpecificValue(key);
-
-        if (value instanceof Number) {
-            return ((Number)value).intValue();
-        }
-        return defaultValue;
-    }
-
-    /**
-     * Convenience method to get a class specific Insets value.
-     *
-     * @param context SynthContext indentifying requestor
-     * @param key Key identifying class specific value
-     * @param defaultValue Returned if there is no value for the specified
-     *        type
-     * @return Value, or defaultValue if <code>key</code> is not defined
-     */
-    Insets getClassSpecificInsetsValue(SynthContext context, String key,
-                                       Insets defaultValue)
-    {
-        Object value = getClassSpecificValue(key);
-
-        if (value instanceof Insets) {
-            return (Insets)value;
-        }
-        return defaultValue;
-    }
-
-    /**
-     * Convenience method to get a class specific Boolean value.
-     *
-     * @param context SynthContext indentifying requestor
-     * @param key Key identifying class specific value
-     * @param defaultValue Returned if there is no value for the specified
-     *        type
-     * @return Value, or defaultValue if <code>key</code> is not defined
-     */
-    boolean getClassSpecificBoolValue(SynthContext context, String key,
-                                      boolean defaultValue)
-    {
-        Object value = getClassSpecificValue(key);
-
-        if (value instanceof Boolean) {
-            return ((Boolean)value).booleanValue();
-        }
-        return defaultValue;
-    }
-
-    /**
-     * Returns the value to initialize the opacity property of the Component
-     * to. A Style should NOT assume the opacity will remain this value, the
-     * developer may reset it or override it.
-     *
-     * @param context SynthContext indentifying requestor
-     * @return opaque Whether or not the JComponent is opaque.
-     */
-    @Override
-    public boolean isOpaque(SynthContext context) {
-        Region region = context.getRegion();
-        if (region == Region.COMBO_BOX ||
-              region == Region.DESKTOP_PANE ||
-              region == Region.DESKTOP_ICON ||
-              region == Region.EDITOR_PANE ||
-              region == Region.FORMATTED_TEXT_FIELD ||
-              region == Region.INTERNAL_FRAME ||
-              region == Region.LIST ||
-              region == Region.MENU_BAR ||
-              region == Region.PANEL ||
-              region == Region.PASSWORD_FIELD ||
-              region == Region.POPUP_MENU ||
-              region == Region.PROGRESS_BAR ||
-              region == Region.ROOT_PANE ||
-              region == Region.SCROLL_PANE ||
-              region == Region.SPINNER ||
-              region == Region.SPLIT_PANE_DIVIDER ||
-              region == Region.TABLE ||
-              region == Region.TEXT_AREA ||
-              region == Region.TEXT_FIELD ||
-              region == Region.TEXT_PANE ||
-              region == Region.TOOL_BAR_DRAG_WINDOW ||
-              region == Region.TOOL_TIP ||
-              region == Region.TREE ||
-              region == Region.VIEWPORT) {
-            return true;
-        }
-        Component c = context.getComponent();
-        String name = c.getName();
-        if (name == "ComboBox.renderer" || name == "ComboBox.listRenderer") {
-            return true;
-        }
-        return false;
-    }
-
-    @Override
-    public Object get(SynthContext context, Object key) {
-        // See if this is a class specific value.
-        String classKey = CLASS_SPECIFIC_MAP.get(key);
-        if (classKey != null) {
-            Object value = getClassSpecificValue(classKey);
-            if (value != null) {
-                return value;
-            }
-        }
-
-        // Is it a specific value ?
-        if (key == "ScrollPane.viewportBorderInsets") {
-            return getThicknessInsets(context, new Insets(0, 0, 0, 0));
-        }
-        else if (key == "Slider.tickColor") {
-            return getColorForState(context, ColorType.FOREGROUND);
-        }
-        else if (key == "ScrollBar.minimumThumbSize") {
-            int len =
-                getClassSpecificIntValue(context, "min-slider-length", 21);
-            JScrollBar sb = (JScrollBar)context.getComponent();
-            if (sb.getOrientation() == JScrollBar.HORIZONTAL) {
-                return new DimensionUIResource(len, 0);
-            } else {
-                return new DimensionUIResource(0, len);
-            }
-        }
-        else if (key == "Separator.thickness") {
-            JSeparator sep = (JSeparator)context.getComponent();
-            if (sep.getOrientation() == JSeparator.HORIZONTAL) {
-                return getYThickness();
-            } else {
-                return getXThickness();
-            }
-        }
-        else if (key == "ToolBar.separatorSize") {
-            int size = getClassSpecificIntValue(WidgetType.TOOL_BAR,
-                                                "space-size", 12);
-            return new DimensionUIResource(size, size);
-        }
-        else if (key == "ScrollBar.buttonSize") {
-            JScrollBar sb = (JScrollBar)context.getComponent().getParent();
-            boolean horiz = (sb.getOrientation() == JScrollBar.HORIZONTAL);
-            WidgetType wt = horiz ?
-                WidgetType.HSCROLL_BAR : WidgetType.VSCROLL_BAR;
-            int sliderWidth = getClassSpecificIntValue(wt, "slider-width", 14);
-            int stepperSize = getClassSpecificIntValue(wt, "stepper-size", 14);
-            return horiz ?
-                new DimensionUIResource(stepperSize, sliderWidth) :
-                new DimensionUIResource(sliderWidth, stepperSize);
-        }
-        else if (key == "ArrowButton.size") {
-            String name = context.getComponent().getName();
-            if (name != null && name.startsWith("Spinner")) {
-                // Believe it or not, the size of a spinner arrow button is
-                // dependent upon the size of the spinner's font.  These
-                // calculations come from gtkspinbutton.c (version 2.8.20),
-                // spin_button_get_arrow_size() method.
-                String pangoFontName;
-                synchronized (sun.awt.UNIXToolkit.GTK_LOCK) {
-                    pangoFontName =
-                        nativeGetPangoFontName(WidgetType.SPINNER.ordinal());
-                }
-                int arrowSize = (pangoFontName != null) ?
-                    PangoFonts.getFontSize(pangoFontName) : 10;
-                return (arrowSize + (getXThickness() * 2));
-            }
-            // For all other kinds of arrow buttons (e.g. combobox arrow
-            // buttons), we will simply fall back on the value of
-            // ArrowButton.size as defined in the UIDefaults for
-            // GTKLookAndFeel when we call UIManager.get() below...
-        }
-        else if ("CheckBox.iconTextGap".equals(key) ||
-                 "RadioButton.iconTextGap".equals(key))
-        {
-            // The iconTextGap value needs to include "indicator-spacing"
-            // and it also needs to leave enough space for the focus line,
-            // which falls between the indicator icon and the text.
-            // See getRadioInsets() and 6489585 for more details.
-            int indicatorSpacing =
-                getClassSpecificIntValue(context, "indicator-spacing", 2);
-            int focusSize =
-                getClassSpecificIntValue(context, "focus-line-width", 1);
-            int focusPad =
-                getClassSpecificIntValue(context, "focus-padding", 1);
-            return indicatorSpacing + focusSize + focusPad;
-        }
-
-        // Is it a stock icon ?
-        GTKStockIcon stockIcon = null;
-        synchronized (ICONS_MAP) {
-            stockIcon = ICONS_MAP.get(key);
-        }
-
-        if (stockIcon != null) {
-            return stockIcon;
-        }
-
-        // Is it another kind of value ?
-        if (key != "engine") {
-            // For backward compatability we'll fallback to the UIManager.
-            // We don't go to the UIManager for engine as the engine is GTK
-            // specific.
-            Object value = UIManager.get(key);
-            if (key == "Table.rowHeight") {
-                int focusLineWidth = getClassSpecificIntValue(context,
-                        "focus-line-width", 0);
-                if (value == null && focusLineWidth > 0) {
-                    value = Integer.valueOf(16 + 2 * focusLineWidth);
-                }
-            }
-            return value;
-        }
-
-        // Don't call super, we don't want to pick up defaults from
-        // SynthStyle.
-        return null;
-    }
-
-    private Icon getStockIcon(SynthContext context, String key, int type) {
-        TextDirection direction = TextDirection.LTR;
-
-        if (context != null) {
-            ComponentOrientation co = context.getComponent().
-                                              getComponentOrientation();
-
-            if (co != null && !co.isLeftToRight()) {
-                direction = TextDirection.RTL;
-            }
-        }
-
-        // First try loading a theme-specific icon using the native
-        // GTK libraries (native GTK handles the resizing for us).
-        Icon icon = getStyleSpecificIcon(key, direction, type);
-        if (icon != null) {
-            return icon;
-        }
-
-        // In a failure case where native GTK (unexpectedly) returns a
-        // null icon, we can try loading a default icon as a fallback.
-        String propName = ICON_PROPERTY_PREFIX + key + '.' + type + '.' +
-                          (direction == TextDirection.RTL ? "rtl" : "ltr");
-        Image img = (Image)
-            Toolkit.getDefaultToolkit().getDesktopProperty(propName);
-        if (img != null) {
-            return new ImageIcon(img);
-        }
-
-        // In an extreme failure situation, just return null (callers are
-        // already prepared to handle a null icon, so the worst that can
-        // happen is that an icon won't be included in the button/dialog).
-        return null;
-    }
-
-    private Icon getStyleSpecificIcon(String key,
-                                      TextDirection direction, int type)
-    {
-        UNIXToolkit tk = (UNIXToolkit)Toolkit.getDefaultToolkit();
-        Image img =
-            tk.getStockIcon(widgetType, key, type, direction.ordinal(), null);
-        return (img != null) ? new ImageIcon(img) : null;
-    }
-
-    static class GTKStockIconInfo {
-        private static Map<String,Integer> ICON_TYPE_MAP;
-        private static final Object ICON_SIZE_KEY = new StringBuffer("IconSize");
-
-        private static Dimension[] getIconSizesMap() {
-            AppContext appContext = AppContext.getAppContext();
-            Dimension[] iconSizes = (Dimension[])appContext.get(ICON_SIZE_KEY);
-
-            if (iconSizes == null) {
-                iconSizes = new Dimension[7];
-                iconSizes[0] = null;                  // GTK_ICON_SIZE_INVALID
-                iconSizes[1] = new Dimension(16, 16); // GTK_ICON_SIZE_MENU
-                iconSizes[2] = new Dimension(18, 18); // GTK_ICON_SIZE_SMALL_TOOLBAR
-                iconSizes[3] = new Dimension(24, 24); // GTK_ICON_SIZE_LARGE_TOOLBAR
-                iconSizes[4] = new Dimension(20, 20); // GTK_ICON_SIZE_BUTTON
-                iconSizes[5] = new Dimension(32, 32); // GTK_ICON_SIZE_DND
-                iconSizes[6] = new Dimension(48, 48); // GTK_ICON_SIZE_DIALOG
-                appContext.put(ICON_SIZE_KEY, iconSizes);
-            }
-            return iconSizes;
-        }
-
-        /**
-         * Return the size of a particular icon type (logical size)
-         *
-         * @param type icon type (GtkIconSize value)
-         * @return a Dimension object, or null if lsize is invalid
-         */
-        public static Dimension getIconSize(int type) {
-            Dimension[] iconSizes = getIconSizesMap();
-            return type >= 0 && type < iconSizes.length ?
-                iconSizes[type] : null;
-        }
-
-        /**
-         * Change icon size in a type to size mapping. This is called by code
-         * that parses the gtk-icon-sizes setting
-         *
-         * @param type icon type (GtkIconSize value)
-         * @param w the new icon width
-         * @param h the new icon height
-         */
-        public static void setIconSize(int type, int w, int h) {
-            Dimension[] iconSizes = getIconSizesMap();
-            if (type >= 0 && type < iconSizes.length) {
-                iconSizes[type] = new Dimension(w, h);
-            }
-        }
-
-        /**
-         * Return icon type (GtkIconSize value) given a symbolic name which can
-         * occur in a theme file.
-         *
-         * @param size symbolic name, e.g. gtk-button
-         * @return icon type. Valid types are 1 to 6
-         */
-        public static int getIconType(String size) {
-            if (size == null) {
-                return UNDEFINED;
-            }
-            if (ICON_TYPE_MAP == null) {
-                initIconTypeMap();
-            }
-            Integer n = ICON_TYPE_MAP.get(size);
-            return n != null ? n.intValue() : UNDEFINED;
-        }
-
-        private static void initIconTypeMap() {
-            ICON_TYPE_MAP = new HashMap<String,Integer>();
-            ICON_TYPE_MAP.put("gtk-menu", Integer.valueOf(1));
-            ICON_TYPE_MAP.put("gtk-small-toolbar", Integer.valueOf(2));
-            ICON_TYPE_MAP.put("gtk-large-toolbar", Integer.valueOf(3));
-            ICON_TYPE_MAP.put("gtk-button", Integer.valueOf(4));
-            ICON_TYPE_MAP.put("gtk-dnd", Integer.valueOf(5));
-            ICON_TYPE_MAP.put("gtk-dialog", Integer.valueOf(6));
-        }
-
-    }
-
-    /**
-     * An Icon that is fetched using getStockIcon.
-     */
-    private static class GTKStockIcon extends SynthIcon {
-        private String key;
-        private int size;
-        private boolean loadedLTR;
-        private boolean loadedRTL;
-        private Icon ltrIcon;
-        private Icon rtlIcon;
-        private SynthStyle style;
-
-        GTKStockIcon(String key, int size) {
-            this.key = key;
-            this.size = size;
-        }
-
-        public void paintIcon(SynthContext context, Graphics g, int x,
-                              int y, int w, int h) {
-            Icon icon = getIcon(context);
-
-            if (icon != null) {
-                if (context == null) {
-                    icon.paintIcon(null, g, x, y);
-                }
-                else {
-                    icon.paintIcon(context.getComponent(), g, x, y);
-                }
-            }
-        }
-
-        public int getIconWidth(SynthContext context) {
-            Icon icon = getIcon(context);
-
-            if (icon != null) {
-                return icon.getIconWidth();
-            }
-            return 0;
-        }
-
-        public int getIconHeight(SynthContext context) {
-            Icon icon = getIcon(context);
-
-            if (icon != null) {
-                return icon.getIconHeight();
-            }
-            return 0;
-        }
-
-        private Icon getIcon(SynthContext context) {
-            if (context != null) {
-                ComponentOrientation co = context.getComponent().
-                                                  getComponentOrientation();
-                SynthStyle style = context.getStyle();
-
-                if (style != this.style) {
-                    this.style = style;
-                    loadedLTR = loadedRTL = false;
-                }
-                if (co == null || co.isLeftToRight()) {
-                    if (!loadedLTR) {
-                        loadedLTR = true;
-                        ltrIcon = ((GTKStyle)context.getStyle()).
-                                  getStockIcon(context, key, size);
-                    }
-                    return ltrIcon;
-                }
-                else if (!loadedRTL) {
-                    loadedRTL = true;
-                    rtlIcon = ((GTKStyle)context.getStyle()).
-                              getStockIcon(context, key,size);
-                }
-                return rtlIcon;
-            }
-            return ltrIcon;
-        }
-    }
-
-    /**
-     * GTKLazyValue is a slimmed down version of <code>ProxyLaxyValue</code>.
-     * The code is duplicate so that it can get at the package private
-     * classes in gtk.
-     */
-    static class GTKLazyValue implements UIDefaults.LazyValue {
-        /**
-         * Name of the class to create.
-         */
-        private String className;
-        private String methodName;
-
-        GTKLazyValue(String name) {
-            this(name, null);
-        }
-
-        GTKLazyValue(String name, String methodName) {
-            this.className = name;
-            this.methodName = methodName;
-        }
-
-        public Object createValue(UIDefaults table) {
-            try {
-                Class c = Class.forName(className, true,Thread.currentThread().
-                                        getContextClassLoader());
-
-                if (methodName == null) {
-                    return c.newInstance();
-                }
-                Method m = c.getMethod(methodName, (Class[])null);
-
-                return m.invoke(c, (Object[])null);
-            } catch (ClassNotFoundException cnfe) {
-            } catch (IllegalAccessException iae) {
-            } catch (InvocationTargetException ite) {
-            } catch (NoSuchMethodException nsme) {
-            } catch (InstantiationException ie) {
-            }
-            return null;
-        }
-    }
-
-    static {
-        CLASS_SPECIFIC_MAP = new HashMap<String,String>();
-        CLASS_SPECIFIC_MAP.put("Slider.thumbHeight", "slider-width");
-        CLASS_SPECIFIC_MAP.put("Slider.trackBorder", "trough-border");
-        CLASS_SPECIFIC_MAP.put("SplitPane.size", "handle-size");
-        CLASS_SPECIFIC_MAP.put("Tree.expanderSize", "expander-size");
-        CLASS_SPECIFIC_MAP.put("ScrollBar.thumbHeight", "slider-width");
-        CLASS_SPECIFIC_MAP.put("ScrollBar.width", "slider-width");
-        CLASS_SPECIFIC_MAP.put("TextArea.caretForeground", "cursor-color");
-        CLASS_SPECIFIC_MAP.put("TextArea.caretAspectRatio", "cursor-aspect-ratio");
-        CLASS_SPECIFIC_MAP.put("TextField.caretForeground", "cursor-color");
-        CLASS_SPECIFIC_MAP.put("TextField.caretAspectRatio", "cursor-aspect-ratio");
-        CLASS_SPECIFIC_MAP.put("PasswordField.caretForeground", "cursor-color");
-        CLASS_SPECIFIC_MAP.put("PasswordField.caretAspectRatio", "cursor-aspect-ratio");
-        CLASS_SPECIFIC_MAP.put("FormattedTextField.caretForeground", "cursor-color");
-        CLASS_SPECIFIC_MAP.put("FormattedTextField.caretAspectRatio", "cursor-aspect-");
-        CLASS_SPECIFIC_MAP.put("TextPane.caretForeground", "cursor-color");
-        CLASS_SPECIFIC_MAP.put("TextPane.caretAspectRatio", "cursor-aspect-ratio");
-        CLASS_SPECIFIC_MAP.put("EditorPane.caretForeground", "cursor-color");
-        CLASS_SPECIFIC_MAP.put("EditorPane.caretAspectRatio", "cursor-aspect-ratio");
-
-        ICONS_MAP = new HashMap<String, GTKStockIcon>();
-        ICONS_MAP.put("FileChooser.cancelIcon", new GTKStockIcon("gtk-cancel", 4));
-        ICONS_MAP.put("FileChooser.okIcon",     new GTKStockIcon("gtk-ok",     4));
-        ICONS_MAP.put("OptionPane.errorIcon", new GTKStockIcon("gtk-dialog-error", 6));
-        ICONS_MAP.put("OptionPane.informationIcon", new GTKStockIcon("gtk-dialog-info", 6));
-        ICONS_MAP.put("OptionPane.warningIcon", new GTKStockIcon("gtk-dialog-warning", 6));
-        ICONS_MAP.put("OptionPane.questionIcon", new GTKStockIcon("gtk-dialog-question", 6));
-        ICONS_MAP.put("OptionPane.yesIcon", new GTKStockIcon("gtk-yes", 4));
-        ICONS_MAP.put("OptionPane.noIcon", new GTKStockIcon("gtk-no", 4));
-        ICONS_MAP.put("OptionPane.cancelIcon", new GTKStockIcon("gtk-cancel", 4));
-        ICONS_MAP.put("OptionPane.okIcon", new GTKStockIcon("gtk-ok", 4));
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/GTKStyleFactory.java b/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/GTKStyleFactory.java
deleted file mode 100755
index cfc2fc3..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/GTKStyleFactory.java
+++ /dev/null
@@ -1,188 +0,0 @@
-/*
- * Copyright (c) 2002, 2006, 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.java.swing.plaf.gtk;
-
-import java.awt.Font;
-import java.util.*;
-import javax.swing.*;
-import javax.swing.plaf.synth.*;
-import com.sun.java.swing.plaf.gtk.GTKEngine.WidgetType;
-
-/**
- *
- * @author Scott Violet
- */
-class GTKStyleFactory extends SynthStyleFactory {
-
-    /**
-     * Saves all styles that have been accessed.  In most common cases,
-     * the hash key is simply the WidgetType, but in more complex cases
-     * it will be a ComplexKey object that contains arguments to help
-     * differentiate similar styles.
-     */
-    private final Map<Object, GTKStyle> stylesCache;
-
-    private Font defaultFont;
-
-    GTKStyleFactory() {
-        stylesCache = new HashMap<Object, GTKStyle>();
-    }
-
-    /**
-     * Returns the <code>GTKStyle</code> to use based on the
-     * <code>Region</code> id
-     *
-     * @param c this parameter isn't used, may be null.
-     * @param id of the region to get the style.
-     */
-    public synchronized SynthStyle getStyle(JComponent c, Region id) {
-        WidgetType wt = GTKEngine.getWidgetType(c, id);
-
-        Object key = null;
-        if (id == Region.SCROLL_BAR) {
-            // The style/insets of a scrollbar can depend on a number of
-            // factors (see GTKStyle.getScrollBarInsets()) so use a
-            // complex key here.
-            if (c != null) {
-                JScrollBar sb = (JScrollBar)c;
-                boolean sp = (sb.getParent() instanceof JScrollPane);
-                boolean horiz = (sb.getOrientation() == JScrollBar.HORIZONTAL);
-                boolean ltr = sb.getComponentOrientation().isLeftToRight();
-                boolean focusable = sb.isFocusable();
-                key = new ComplexKey(wt, sp, horiz, ltr, focusable);
-            }
-        }
-        else if (id == Region.CHECK_BOX || id == Region.RADIO_BUTTON) {
-            // The style/insets of a checkbox or radiobutton can depend
-            // on the component orientation, so use a complex key here.
-            if (c != null) {
-                boolean ltr = c.getComponentOrientation().isLeftToRight();
-                key = new ComplexKey(wt, ltr);
-            }
-        }
-        else if (id == Region.BUTTON) {
-            // The style/insets of a button can depend on whether it is
-            // default capable or in a toolbar, so use a complex key here.
-            if (c != null) {
-                JButton btn = (JButton)c;
-                boolean toolButton = (btn.getParent() instanceof JToolBar);
-                boolean defaultCapable = btn.isDefaultCapable();
-                key = new ComplexKey(wt, toolButton, defaultCapable);
-            }
-        } else if (id == Region.MENU) {
-            if (c instanceof JMenu && ((JMenu) c).isTopLevelMenu() &&
-                    UIManager.getBoolean("Menu.useMenuBarForTopLevelMenus")) {
-                wt = WidgetType.MENU_BAR;
-            }
-        }
-
-        if (key == null) {
-            // Otherwise, just use the WidgetType as the key.
-            key = wt;
-        }
-
-        GTKStyle result = stylesCache.get(key);
-        if (result == null) {
-            result = new GTKStyle(defaultFont, wt);
-            stylesCache.put(key, result);
-        }
-
-        return result;
-    }
-
-    void initStyles(Font defaultFont) {
-        this.defaultFont = defaultFont;
-        stylesCache.clear();
-    }
-
-    /**
-     * Represents a hash key used for fetching GTKStyle objects from the
-     * cache.  In most cases only the WidgetType is used for lookup, but
-     * in some complex cases, other Object arguments can be specified
-     * via a ComplexKey to differentiate the various styles.
-     */
-    private static class ComplexKey {
-        private final WidgetType wt;
-        private final Object[] args;
-
-        ComplexKey(WidgetType wt, Object... args) {
-            this.wt = wt;
-            this.args = args;
-        }
-
-        @Override
-        public int hashCode() {
-            int hash = wt.hashCode();
-            if (args != null) {
-                for (Object arg : args) {
-                    hash = hash*29 + (arg == null ? 0 : arg.hashCode());
-                }
-            }
-            return hash;
-        }
-
-        @Override
-        public boolean equals(Object o) {
-            if (!(o instanceof ComplexKey)) {
-                return false;
-            }
-            ComplexKey that = (ComplexKey)o;
-            if (this.wt == that.wt) {
-                if (this.args == null && that.args == null) {
-                    return true;
-                }
-                if (this.args != null && that.args != null &&
-                    this.args.length == that.args.length)
-                {
-                    for (int i = 0; i < this.args.length; i++) {
-                        Object a1 = this.args[i];
-                        Object a2 = that.args[i];
-                        if (!(a1==null ? a2==null : a1.equals(a2))) {
-                            return false;
-                        }
-                    }
-                    return true;
-                }
-            }
-            return false;
-        }
-
-        @Override
-        public String toString() {
-            String str = "ComplexKey[wt=" + wt;
-            if (args != null) {
-                str += ",args=[";
-                for (int i = 0; i < args.length; i++) {
-                    str += args[i];
-                    if (i < args.length-1) str += ",";
-                }
-                str += "]";
-            }
-            str += "]";
-            return str;
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/Metacity.java b/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/Metacity.java
deleted file mode 100755
index fd304e0..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/Metacity.java
+++ /dev/null
@@ -1,2159 +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.
- */
-package com.sun.java.swing.plaf.gtk;
-
-import sun.swing.SwingUtilities2;
-import com.sun.java.swing.plaf.gtk.GTKConstants.ArrowType;
-import com.sun.java.swing.plaf.gtk.GTKConstants.ShadowType;
-
-import javax.swing.plaf.ColorUIResource;
-import javax.swing.plaf.synth.*;
-
-import java.awt.*;
-import java.awt.geom.*;
-import java.awt.image.*;
-import java.io.*;
-import java.net.*;
-import java.security.*;
-import java.util.*;
-
-import javax.swing.*;
-import javax.swing.border.*;
-
-import javax.xml.parsers.*;
-import org.xml.sax.SAXException;
-import org.w3c.dom.*;
-
-/**
- */
-class Metacity implements SynthConstants {
-    // Tutorial:
-    // http://developer.gnome.org/doc/tutorials/metacity/metacity-themes.html
-
-    // Themes:
-    // http://art.gnome.org/theme_list.php?category=metacity
-
-    static Metacity INSTANCE;
-
-    private static final String[] themeNames = {
-        getUserTheme(),
-        "blueprint",
-        "Bluecurve",
-        "Crux",
-        "SwingFallbackTheme"
-    };
-
-    static {
-        for (String themeName : themeNames) {
-            if (themeName != null) {
-            try {
-                INSTANCE = new Metacity(themeName);
-            } catch (FileNotFoundException ex) {
-            } catch (IOException ex) {
-                logError(themeName, ex);
-            } catch (ParserConfigurationException ex) {
-                logError(themeName, ex);
-            } catch (SAXException ex) {
-                logError(themeName, ex);
-            }
-            }
-            if (INSTANCE != null) {
-            break;
-            }
-        }
-        if (INSTANCE == null) {
-            throw new Error("Could not find any installed metacity theme, and fallback failed");
-        }
-    }
-
-    private static boolean errorLogged = false;
-    private static DocumentBuilder documentBuilder;
-    private static Document xmlDoc;
-    private static String userHome;
-
-    private Node frame_style_set;
-    private Map<String, Object> frameGeometry;
-    private Map<String, Map<String, Object>> frameGeometries;
-
-    private LayoutManager titlePaneLayout = new TitlePaneLayout();
-
-    private ColorizeImageFilter imageFilter = new ColorizeImageFilter();
-    private URL themeDir = null;
-    private SynthContext context;
-    private String themeName;
-
-    private ArithmeticExpressionEvaluator aee = new ArithmeticExpressionEvaluator();
-    private Map<String, Integer> variables;
-
-    // Reusable clip shape object
-    private RoundRectClipShape roundedClipShape;
-
-    protected Metacity(String themeName) throws IOException, ParserConfigurationException, SAXException {
-        this.themeName = themeName;
-        themeDir = getThemeDir(themeName);
-        if (themeDir != null) {
-            URL themeURL = new URL(themeDir, "metacity-theme-1.xml");
-            xmlDoc = getXMLDoc(themeURL);
-            if (xmlDoc == null) {
-                throw new IOException(themeURL.toString());
-            }
-        } else {
-            throw new FileNotFoundException(themeName);
-        }
-
-        // Initialize constants
-        variables = new HashMap<String, Integer>();
-        NodeList nodes = xmlDoc.getElementsByTagName("constant");
-        int n = nodes.getLength();
-        for (int i = 0; i < n; i++) {
-            Node node = nodes.item(i);
-            String name = getStringAttr(node, "name");
-            if (name != null) {
-                String value = getStringAttr(node, "value");
-                if (value != null) {
-                    try {
-                        variables.put(name, Integer.parseInt(value));
-                    } catch (NumberFormatException ex) {
-                        logError(themeName, ex);
-                        // Ignore bad value
-                    }
-                }
-            }
-        }
-
-        // Cache frame geometries
-        frameGeometries = new HashMap<String, Map<String, Object>>();
-        nodes = xmlDoc.getElementsByTagName("frame_geometry");
-        n = nodes.getLength();
-        for (int i = 0; i < n; i++) {
-            Node node = nodes.item(i);
-            String name = getStringAttr(node, "name");
-            if (name != null) {
-                HashMap<String, Object> gm = new HashMap<String, Object>();
-                frameGeometries.put(name, gm);
-
-                String parentGM = getStringAttr(node, "parent");
-                if (parentGM != null) {
-                    gm.putAll(frameGeometries.get(parentGM));
-                }
-
-                gm.put("has_title",
-                       Boolean.valueOf(getBooleanAttr(node, "has_title",            true)));
-                gm.put("rounded_top_left",
-                       Boolean.valueOf(getBooleanAttr(node, "rounded_top_left",     false)));
-                gm.put("rounded_top_right",
-                       Boolean.valueOf(getBooleanAttr(node, "rounded_top_right",    false)));
-                gm.put("rounded_bottom_left",
-                       Boolean.valueOf(getBooleanAttr(node, "rounded_bottom_left",  false)));
-                gm.put("rounded_bottom_right",
-                       Boolean.valueOf(getBooleanAttr(node, "rounded_bottom_right", false)));
-
-                NodeList childNodes = node.getChildNodes();
-                int nc = childNodes.getLength();
-                for (int j = 0; j < nc; j++) {
-                    Node child = childNodes.item(j);
-                    if (child.getNodeType() == Node.ELEMENT_NODE) {
-                        name = child.getNodeName();
-                        Object value = null;
-                        if ("distance".equals(name)) {
-                            value = Integer.valueOf(getIntAttr(child, "value", 0));
-                        } else if ("border".equals(name)) {
-                            value = new Insets(getIntAttr(child, "top", 0),
-                                               getIntAttr(child, "left", 0),
-                                               getIntAttr(child, "bottom", 0),
-                                               getIntAttr(child, "right", 0));
-                        } else if ("aspect_ratio".equals(name)) {
-                            value = new Float(getFloatAttr(child, "value", 1.0F));
-                        } else {
-                            logError(themeName, "Unknown Metacity frame geometry value type: "+name);
-                        }
-                        String childName = getStringAttr(child, "name");
-                        if (childName != null && value != null) {
-                            gm.put(childName, value);
-                        }
-                    }
-                }
-            }
-        }
-        frameGeometry = frameGeometries.get("normal");
-    }
-
-
-    public static LayoutManager getTitlePaneLayout() {
-        return INSTANCE.titlePaneLayout;
-    }
-
-    private Shape getRoundedClipShape(int x, int y, int w, int h,
-                                      int arcw, int arch, int corners) {
-        if (roundedClipShape == null) {
-            roundedClipShape = new RoundRectClipShape();
-        }
-        roundedClipShape.setRoundedRect(x, y, w, h, arcw, arch, corners);
-
-        return roundedClipShape;
-    }
-
-    void paintButtonBackground(SynthContext context, Graphics g, int x, int y, int w, int h) {
-        updateFrameGeometry(context);
-
-        this.context = context;
-        JButton button = (JButton)context.getComponent();
-        String buttonName = button.getName();
-        int buttonState = context.getComponentState();
-
-        JComponent titlePane = (JComponent)button.getParent();
-        Container titlePaneParent = titlePane.getParent();
-
-        JInternalFrame jif;
-        if (titlePaneParent instanceof JInternalFrame) {
-            jif = (JInternalFrame)titlePaneParent;
-        } else if (titlePaneParent instanceof JInternalFrame.JDesktopIcon) {
-            jif = ((JInternalFrame.JDesktopIcon)titlePaneParent).getInternalFrame();
-        } else {
-            return;
-        }
-
-        boolean active = jif.isSelected();
-        button.setOpaque(false);
-
-        String state = "normal";
-        if ((buttonState & PRESSED) != 0) {
-            state = "pressed";
-        } else if ((buttonState & MOUSE_OVER) != 0) {
-            state = "prelight";
-        }
-
-        String function = null;
-        String location = null;
-        boolean left_corner  = false;
-        boolean right_corner = false;
-
-
-        if (buttonName == "InternalFrameTitlePane.menuButton") {
-            function = "menu";
-            location = "left_left";
-            left_corner = true;
-        } else if (buttonName == "InternalFrameTitlePane.iconifyButton") {
-            function = "minimize";
-            int nButtons = ((jif.isIconifiable() ? 1 : 0) +
-                            (jif.isMaximizable() ? 1 : 0) +
-                            (jif.isClosable() ? 1 : 0));
-            right_corner = (nButtons == 1);
-            switch (nButtons) {
-              case 1: location = "right_right"; break;
-              case 2: location = "right_middle"; break;
-              case 3: location = "right_left"; break;
-            }
-        } else if (buttonName == "InternalFrameTitlePane.maximizeButton") {
-            function = "maximize";
-            right_corner = !jif.isClosable();
-            location = jif.isClosable() ? "right_middle" : "right_right";
-        } else if (buttonName == "InternalFrameTitlePane.closeButton") {
-            function = "close";
-            right_corner = true;
-            location = "right_right";
-        }
-
-        Node frame = getNode(frame_style_set, "frame", new String[] {
-            "focus", (active ? "yes" : "no"),
-            "state", (jif.isMaximum() ? "maximized" : "normal")
-        });
-
-        if (function != null && frame != null) {
-            Node frame_style = getNode("frame_style", new String[] {
-                "name", getStringAttr(frame, "style")
-            });
-            if (frame_style != null) {
-                Shape oldClip = g.getClip();
-                if ((right_corner && getBoolean("rounded_top_right", false)) ||
-                    (left_corner  && getBoolean("rounded_top_left", false))) {
-
-                    Point buttonLoc = button.getLocation();
-                    if (right_corner) {
-                        g.setClip(getRoundedClipShape(0, 0, w, h,
-                                                      12, 12, RoundRectClipShape.TOP_RIGHT));
-                    } else {
-                        g.setClip(getRoundedClipShape(0, 0, w, h,
-                                                      11, 11, RoundRectClipShape.TOP_LEFT));
-                    }
-
-                    Rectangle clipBounds = oldClip.getBounds();
-                    g.clipRect(clipBounds.x, clipBounds.y,
-                               clipBounds.width, clipBounds.height);
-                }
-                drawButton(frame_style, location+"_background", state, g, w, h, jif);
-                drawButton(frame_style, function, state, g, w, h, jif);
-                g.setClip(oldClip);
-            }
-        }
-    }
-
-    protected void drawButton(Node frame_style, String function, String state,
-                            Graphics g, int w, int h, JInternalFrame jif) {
-        Node buttonNode = getNode(frame_style, "button",
-                                  new String[] { "function", function, "state", state });
-        if (buttonNode == null && !state.equals("normal")) {
-            buttonNode = getNode(frame_style, "button",
-                                 new String[] { "function", function, "state", "normal" });
-        }
-        if (buttonNode != null) {
-            Node draw_ops;
-            String draw_ops_name = getStringAttr(buttonNode, "draw_ops");
-            if (draw_ops_name != null) {
-                draw_ops = getNode("draw_ops", new String[] { "name", draw_ops_name });
-            } else {
-                draw_ops = getNode(buttonNode, "draw_ops", null);
-            }
-            variables.put("width",  w);
-            variables.put("height", h);
-            draw(draw_ops, g, jif);
-        }
-    }
-
-    void paintFrameBorder(SynthContext context, Graphics g, int x0, int y0, int width, int height) {
-        updateFrameGeometry(context);
-
-        this.context = context;
-        JComponent comp = context.getComponent();
-        JComponent titlePane = findChild(comp, "InternalFrame.northPane");
-
-        if (titlePane == null) {
-            return;
-        }
-
-        JInternalFrame jif = null;
-        if (comp instanceof JInternalFrame) {
-            jif = (JInternalFrame)comp;
-        } else if (comp instanceof JInternalFrame.JDesktopIcon) {
-            jif = ((JInternalFrame.JDesktopIcon)comp).getInternalFrame();
-        } else {
-            assert false : "component is not JInternalFrame or JInternalFrame.JDesktopIcon";
-            return;
-        }
-
-        boolean active = jif.isSelected();
-        Font oldFont = g.getFont();
-        g.setFont(titlePane.getFont());
-        g.translate(x0, y0);
-
-        Rectangle titleRect = calculateTitleArea(jif);
-        JComponent menuButton = findChild(titlePane, "InternalFrameTitlePane.menuButton");
-
-        Icon frameIcon = jif.getFrameIcon();
-        variables.put("mini_icon_width",
-                      (frameIcon != null) ? frameIcon.getIconWidth()  : 0);
-        variables.put("mini_icon_height",
-                      (frameIcon != null) ? frameIcon.getIconHeight() : 0);
-        variables.put("title_width",  calculateTitleTextWidth(g, jif));
-        FontMetrics fm = SwingUtilities2.getFontMetrics(jif, g);
-        variables.put("title_height", fm.getAscent() + fm.getDescent());
-
-        // These don't seem to apply here, but the Galaxy theme uses them. Not sure why.
-        variables.put("icon_width",  32);
-        variables.put("icon_height", 32);
-
-        if (frame_style_set != null) {
-            Node frame = getNode(frame_style_set, "frame", new String[] {
-                "focus", (active ? "yes" : "no"),
-                "state", (jif.isMaximum() ? "maximized" : "normal")
-            });
-
-            if (frame != null) {
-                Node frame_style = getNode("frame_style", new String[] {
-                    "name", getStringAttr(frame, "style")
-                });
-                if (frame_style != null) {
-                    Shape oldClip = g.getClip();
-                    boolean roundTopLeft     = getBoolean("rounded_top_left",     false);
-                    boolean roundTopRight    = getBoolean("rounded_top_right",    false);
-                    boolean roundBottomLeft  = getBoolean("rounded_bottom_left",  false);
-                    boolean roundBottomRight = getBoolean("rounded_bottom_right", false);
-
-                    if (roundTopLeft || roundTopRight || roundBottomLeft || roundBottomRight) {
-                        jif.setOpaque(false);
-
-                        g.setClip(getRoundedClipShape(0, 0, width, height, 12, 12,
-                                        (roundTopLeft     ? RoundRectClipShape.TOP_LEFT     : 0) |
-                                        (roundTopRight    ? RoundRectClipShape.TOP_RIGHT    : 0) |
-                                        (roundBottomLeft  ? RoundRectClipShape.BOTTOM_LEFT  : 0) |
-                                        (roundBottomRight ? RoundRectClipShape.BOTTOM_RIGHT : 0)));
-                    }
-
-                    Rectangle clipBounds = oldClip.getBounds();
-                    g.clipRect(clipBounds.x, clipBounds.y,
-                               clipBounds.width, clipBounds.height);
-
-                    int titleHeight = titlePane.getHeight();
-
-                    boolean minimized = jif.isIcon();
-                    Insets insets = getBorderInsets(context, null);
-
-                    int leftTitlebarEdge   = getInt("left_titlebar_edge");
-                    int rightTitlebarEdge  = getInt("right_titlebar_edge");
-                    int topTitlebarEdge    = getInt("top_titlebar_edge");
-                    int bottomTitlebarEdge = getInt("bottom_titlebar_edge");
-
-                    if (!minimized) {
-                        drawPiece(frame_style, g, "entire_background",
-                                  0, 0, width, height, jif);
-                    }
-                    drawPiece(frame_style, g, "titlebar",
-                              0, 0, width, titleHeight, jif);
-                    drawPiece(frame_style, g, "titlebar_middle",
-                              leftTitlebarEdge, topTitlebarEdge,
-                              width - leftTitlebarEdge - rightTitlebarEdge,
-                              titleHeight - topTitlebarEdge - bottomTitlebarEdge,
-                              jif);
-                    drawPiece(frame_style, g, "left_titlebar_edge",
-                              0, 0, leftTitlebarEdge, titleHeight, jif);
-                    drawPiece(frame_style, g, "right_titlebar_edge",
-                              width - rightTitlebarEdge, 0,
-                              rightTitlebarEdge, titleHeight, jif);
-                    drawPiece(frame_style, g, "top_titlebar_edge",
-                              0, 0, width, topTitlebarEdge, jif);
-                    drawPiece(frame_style, g, "bottom_titlebar_edge",
-                              0, titleHeight - bottomTitlebarEdge,
-                              width, bottomTitlebarEdge, jif);
-                    drawPiece(frame_style, g, "title",
-                              titleRect.x, titleRect.y, titleRect.width, titleRect.height, jif);
-                    if (!minimized) {
-                        drawPiece(frame_style, g, "left_edge",
-                                  0, titleHeight, insets.left, height-titleHeight, jif);
-                        drawPiece(frame_style, g, "right_edge",
-                                  width-insets.right, titleHeight, insets.right, height-titleHeight, jif);
-                        drawPiece(frame_style, g, "bottom_edge",
-                                  0, height - insets.bottom, width, insets.bottom, jif);
-                        drawPiece(frame_style, g, "overlay",
-                                  0, 0, width, height, jif);
-                    }
-                    g.setClip(oldClip);
-                }
-            }
-        }
-        g.translate(-x0, -y0);
-        g.setFont(oldFont);
-    }
-
-
-
-    private static class Privileged implements PrivilegedAction<Object> {
-        private static int GET_THEME_DIR  = 0;
-        private static int GET_USER_THEME = 1;
-        private static int GET_IMAGE      = 2;
-        private int type;
-        private Object arg;
-
-        public Object doPrivileged(int type, Object arg) {
-            this.type = type;
-            this.arg = arg;
-            return AccessController.doPrivileged(this);
-        }
-
-        public Object run() {
-            if (type == GET_THEME_DIR) {
-                String sep = File.separator;
-                String[] dirs = new String[] {
-                    userHome + sep + ".themes",
-                    System.getProperty("swing.metacitythemedir"),
-                    "/usr/X11R6/share/themes",
-                    "/usr/X11R6/share/gnome/themes",
-                    "/usr/local/share/themes",
-                    "/usr/local/share/gnome/themes",
-                    "/usr/share/themes",
-                    "/usr/gnome/share/themes",  // Debian/Redhat/Solaris
-                    "/opt/gnome2/share/themes"  // SuSE
-                };
-
-                URL themeDir = null;
-                for (int i = 0; i < dirs.length; i++) {
-                    // System property may not be set so skip null directories.
-                    if (dirs[i] == null) {
-                        continue;
-                    }
-                    File dir =
-                        new File(dirs[i] + sep + arg + sep + "metacity-1");
-                    if (new File(dir, "metacity-theme-1.xml").canRead()) {
-                        try {
-                            themeDir = dir.toURI().toURL();
-                        } catch (MalformedURLException ex) {
-                            themeDir = null;
-                        }
-                        break;
-                    }
-                }
-                if (themeDir == null) {
-                    String filename = "resources/metacity/" + arg +
-                        "/metacity-1/metacity-theme-1.xml";
-                    URL url = getClass().getResource(filename);
-                    if (url != null) {
-                        String str = url.toString();
-                        try {
-                            themeDir = new URL(str.substring(0, str.lastIndexOf('/'))+"/");
-                        } catch (MalformedURLException ex) {
-                            themeDir = null;
-                        }
-                    }
-                }
-                return themeDir;
-            } else if (type == GET_USER_THEME) {
-                try {
-                    // Set userHome here because we need the privilege
-                    userHome = System.getProperty("user.home");
-
-                    String theme = System.getProperty("swing.metacitythemename");
-                    if (theme != null) {
-                        return theme;
-                    }
-                    // Note: this is a small file (< 1024 bytes) so it's not worth
-                    // starting an XML parser or even to use a buffered reader.
-                    URL url = new URL(new File(userHome).toURI().toURL(),
-                                      ".gconf/apps/metacity/general/%25gconf.xml");
-                    // Pending: verify character encoding spec for gconf
-                    Reader reader = new InputStreamReader(url.openStream(), "ISO-8859-1");
-                    char[] buf = new char[1024];
-                    StringBuffer strBuf = new StringBuffer();
-                    int n;
-                    while ((n = reader.read(buf)) >= 0) {
-                        strBuf.append(buf, 0, n);
-                    }
-                    reader.close();
-                    String str = strBuf.toString();
-                    if (str != null) {
-                        String strLowerCase = str.toLowerCase();
-                        int i = strLowerCase.indexOf("<entry name=\"theme\"");
-                        if (i >= 0) {
-                            i = strLowerCase.indexOf("<stringvalue>", i);
-                            if (i > 0) {
-                                i += "<stringvalue>".length();
-                                int i2 = str.indexOf("<", i);
-                                return str.substring(i, i2);
-                            }
-                        }
-                    }
-                } catch (MalformedURLException ex) {
-                    // OK to just ignore. We'll use a fallback theme.
-                } catch (IOException ex) {
-                    // OK to just ignore. We'll use a fallback theme.
-                }
-                return null;
-            } else if (type == GET_IMAGE) {
-                return new ImageIcon((URL)arg).getImage();
-            } else {
-                return null;
-            }
-        }
-    }
-
-    private static URL getThemeDir(String themeName) {
-        return (URL)new Privileged().doPrivileged(Privileged.GET_THEME_DIR, themeName);
-    }
-
-    private static String getUserTheme() {
-        return (String)new Privileged().doPrivileged(Privileged.GET_USER_THEME, null);
-    }
-
-    protected void tileImage(Graphics g, Image image, int x0, int y0, int w, int h, float[] alphas) {
-        Graphics2D g2 = (Graphics2D)g;
-        Composite oldComp = g2.getComposite();
-
-        int sw = image.getWidth(null);
-        int sh = image.getHeight(null);
-        int y = y0;
-        while (y < y0 + h) {
-            sh = Math.min(sh, y0 + h - y);
-            int x = x0;
-            while (x < x0 + w) {
-                float f = (alphas.length - 1.0F) * x / (x0 + w);
-                int i = (int)f;
-                f -= (int)f;
-                float alpha = (1-f) * alphas[i];
-                if (i+1 < alphas.length) {
-                    alpha += f * alphas[i+1];
-                }
-                g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha));
-                int swm = Math.min(sw, x0 + w - x);
-                g.drawImage(image, x, y, x+swm, y+sh, 0, 0, swm, sh, null);
-                x += swm;
-            }
-            y += sh;
-        }
-        g2.setComposite(oldComp);
-    }
-
-    private HashMap<String, Image> images = new HashMap<String, Image>();
-
-    protected Image getImage(String key, Color c) {
-        Image image = images.get(key+"-"+c.getRGB());
-        if (image == null) {
-            image = imageFilter.colorize(getImage(key), c);
-            if (image != null) {
-                images.put(key+"-"+c.getRGB(), image);
-            }
-        }
-        return image;
-    }
-
-    protected Image getImage(String key) {
-        Image image = images.get(key);
-        if (image == null) {
-            if (themeDir != null) {
-                try {
-                    URL url = new URL(themeDir, key);
-                    image = (Image)new Privileged().doPrivileged(Privileged.GET_IMAGE, url);
-                } catch (MalformedURLException ex) {
-                    //log("Bad image url: "+ themeDir + "/" + key);
-                }
-            }
-            if (image != null) {
-                images.put(key, image);
-            }
-        }
-        return image;
-    }
-
-    private class ColorizeImageFilter extends RGBImageFilter {
-        double cr, cg, cb;
-
-        public ColorizeImageFilter() {
-            canFilterIndexColorModel = true;
-        }
-
-        public void setColor(Color color) {
-            cr = color.getRed()   / 255.0;
-            cg = color.getGreen() / 255.0;
-            cb = color.getBlue()  / 255.0;
-        }
-
-        public Image colorize(Image fromImage, Color c) {
-            setColor(c);
-            ImageProducer producer = new FilteredImageSource(fromImage.getSource(), this);
-            return new ImageIcon(context.getComponent().createImage(producer)).getImage();
-        }
-
-        public int filterRGB(int x, int y, int rgb) {
-            // Assume all rgb values are shades of gray
-            double grayLevel = 2 * (rgb & 0xff) / 255.0;
-            double r, g, b;
-
-            if (grayLevel <= 1.0) {
-                r = cr * grayLevel;
-                g = cg * grayLevel;
-                b = cb * grayLevel;
-            } else {
-                grayLevel -= 1.0;
-                r = cr + (1.0 - cr) * grayLevel;
-                g = cg + (1.0 - cg) * grayLevel;
-                b = cb + (1.0 - cb) * grayLevel;
-            }
-
-            return ((rgb & 0xff000000) +
-                    (((int)(r * 255)) << 16) +
-                    (((int)(g * 255)) << 8) +
-                    (int)(b * 255));
-        }
-    }
-
-    protected static JComponent findChild(JComponent parent, String name) {
-        int n = parent.getComponentCount();
-        for (int i = 0; i < n; i++) {
-            JComponent c = (JComponent)parent.getComponent(i);
-            if (name.equals(c.getName())) {
-                return c;
-            }
-        }
-        return null;
-    }
-
-
-    protected class TitlePaneLayout implements LayoutManager {
-        public void addLayoutComponent(String name, Component c) {}
-        public void removeLayoutComponent(Component c) {}
-        public Dimension preferredLayoutSize(Container c)  {
-            return minimumLayoutSize(c);
-        }
-
-        public Dimension minimumLayoutSize(Container c) {
-            JComponent titlePane = (JComponent)c;
-            Container titlePaneParent = titlePane.getParent();
-            JInternalFrame frame;
-            if (titlePaneParent instanceof JInternalFrame) {
-                frame = (JInternalFrame)titlePaneParent;
-            } else if (titlePaneParent instanceof JInternalFrame.JDesktopIcon) {
-                frame = ((JInternalFrame.JDesktopIcon)titlePaneParent).getInternalFrame();
-            } else {
-                return null;
-            }
-
-            Dimension buttonDim = calculateButtonSize(titlePane);
-            Insets title_border  = (Insets)getFrameGeometry().get("title_border");
-            Insets button_border = (Insets)getFrameGeometry().get("button_border");
-
-            // Calculate width.
-            int width = getInt("left_titlebar_edge") + buttonDim.width + getInt("right_titlebar_edge");
-            if (title_border != null) {
-                width += title_border.left + title_border.right;
-            }
-            if (frame.isClosable()) {
-                width += buttonDim.width;
-            }
-            if (frame.isMaximizable()) {
-                width += buttonDim.width;
-            }
-            if (frame.isIconifiable()) {
-                width += buttonDim.width;
-            }
-            FontMetrics fm = frame.getFontMetrics(titlePane.getFont());
-            String frameTitle = frame.getTitle();
-            int title_w = frameTitle != null ? SwingUtilities2.stringWidth(
-                               frame, fm, frameTitle) : 0;
-            int title_length = frameTitle != null ? frameTitle.length() : 0;
-
-            // Leave room for three characters in the title.
-            if (title_length > 3) {
-                int subtitle_w = SwingUtilities2.stringWidth(
-                    frame, fm, frameTitle.substring(0, 3) + "...");
-                width += (title_w < subtitle_w) ? title_w : subtitle_w;
-            } else {
-                width += title_w;
-            }
-
-            // Calculate height.
-            int titleHeight = fm.getHeight() + getInt("title_vertical_pad");
-            if (title_border != null) {
-                titleHeight += title_border.top + title_border.bottom;
-            }
-            int buttonHeight = buttonDim.height;
-            if (button_border != null) {
-                buttonHeight += button_border.top + button_border.bottom;
-            }
-            int height = Math.max(buttonHeight, titleHeight);
-
-            return new Dimension(width, height);
-        }
-
-        public void layoutContainer(Container c) {
-            JComponent titlePane = (JComponent)c;
-            Container titlePaneParent = titlePane.getParent();
-            JInternalFrame frame;
-            if (titlePaneParent instanceof JInternalFrame) {
-                frame = (JInternalFrame)titlePaneParent;
-            } else if (titlePaneParent instanceof JInternalFrame.JDesktopIcon) {
-                frame = ((JInternalFrame.JDesktopIcon)titlePaneParent).getInternalFrame();
-            } else {
-                return;
-            }
-            Map gm = getFrameGeometry();
-
-            int w = titlePane.getWidth();
-            int h = titlePane.getHeight();
-
-            JComponent menuButton     = findChild(titlePane, "InternalFrameTitlePane.menuButton");
-            JComponent minimizeButton = findChild(titlePane, "InternalFrameTitlePane.iconifyButton");
-            JComponent maximizeButton = findChild(titlePane, "InternalFrameTitlePane.maximizeButton");
-            JComponent closeButton    = findChild(titlePane, "InternalFrameTitlePane.closeButton");
-
-            Insets button_border = (Insets)gm.get("button_border");
-            Dimension buttonDim = calculateButtonSize(titlePane);
-
-            int y = (button_border != null) ? button_border.top : 0;
-            if (titlePaneParent.getComponentOrientation().isLeftToRight()) {
-                int x = getInt("left_titlebar_edge");
-
-                menuButton.setBounds(x, y, buttonDim.width, buttonDim.height);
-
-                x = w - buttonDim.width - getInt("right_titlebar_edge");
-                if (button_border != null) {
-                    x -= button_border.right;
-                }
-
-                if (frame.isClosable()) {
-                    closeButton.setBounds(x, y, buttonDim.width, buttonDim.height);
-                    x -= buttonDim.width;
-                }
-
-                if (frame.isMaximizable()) {
-                    maximizeButton.setBounds(x, y, buttonDim.width, buttonDim.height);
-                    x -= buttonDim.width;
-                }
-
-                if (frame.isIconifiable()) {
-                    minimizeButton.setBounds(x, y, buttonDim.width, buttonDim.height);
-                }
-            } else {
-                int x = w - buttonDim.width - getInt("right_titlebar_edge");
-
-                menuButton.setBounds(x, y, buttonDim.width, buttonDim.height);
-
-                x = getInt("left_titlebar_edge");
-                if (button_border != null) {
-                    x += button_border.left;
-                }
-
-                if (frame.isClosable()) {
-                    closeButton.setBounds(x, y, buttonDim.width, buttonDim.height);
-                    x += buttonDim.width;
-                }
-
-                if (frame.isMaximizable()) {
-                    maximizeButton.setBounds(x, y, buttonDim.width, buttonDim.height);
-                    x += buttonDim.width;
-                }
-
-                if (frame.isIconifiable()) {
-                    minimizeButton.setBounds(x, y, buttonDim.width, buttonDim.height);
-                }
-            }
-        }
-    } // end TitlePaneLayout
-
-    protected Map getFrameGeometry() {
-        return frameGeometry;
-    }
-
-    protected void setFrameGeometry(JComponent titlePane, Map gm) {
-        this.frameGeometry = gm;
-        if (getInt("top_height") == 0 && titlePane != null) {
-            gm.put("top_height", Integer.valueOf(titlePane.getHeight()));
-        }
-    }
-
-    protected int getInt(String key) {
-        Integer i = (Integer)frameGeometry.get(key);
-        if (i == null) {
-            i = variables.get(key);
-        }
-        return (i != null) ? i.intValue() : 0;
-    }
-
-    protected boolean getBoolean(String key, boolean fallback) {
-        Boolean b = (Boolean)frameGeometry.get(key);
-        return (b != null) ? b.booleanValue() : fallback;
-    }
-
-
-    protected void drawArc(Node node, Graphics g) {
-        NamedNodeMap attrs = node.getAttributes();
-        Color color = parseColor(getStringAttr(attrs, "color"));
-        int x = aee.evaluate(getStringAttr(attrs, "x"));
-        int y = aee.evaluate(getStringAttr(attrs, "y"));
-        int w = aee.evaluate(getStringAttr(attrs, "width"));
-        int h = aee.evaluate(getStringAttr(attrs, "height"));
-        int start_angle = aee.evaluate(getStringAttr(attrs, "start_angle"));
-        int extent_angle = aee.evaluate(getStringAttr(attrs, "extent_angle"));
-        boolean filled = getBooleanAttr(node, "filled", false);
-        if (getInt("width") == -1) {
-            x -= w;
-        }
-        if (getInt("height") == -1) {
-            y -= h;
-        }
-        g.setColor(color);
-        if (filled) {
-            g.fillArc(x, y, w, h, start_angle, extent_angle);
-        } else {
-            g.drawArc(x, y, w, h, start_angle, extent_angle);
-        }
-    }
-
-    protected void drawLine(Node node, Graphics g) {
-        NamedNodeMap attrs = node.getAttributes();
-        Color color = parseColor(getStringAttr(attrs, "color"));
-        int x1 = aee.evaluate(getStringAttr(attrs, "x1"));
-        int y1 = aee.evaluate(getStringAttr(attrs, "y1"));
-        int x2 = aee.evaluate(getStringAttr(attrs, "x2"));
-        int y2 = aee.evaluate(getStringAttr(attrs, "y2"));
-        int lineWidth = aee.evaluate(getStringAttr(attrs, "width"), 1);
-        g.setColor(color);
-        if (lineWidth != 1) {
-            Graphics2D g2d = (Graphics2D)g;
-            Stroke stroke = g2d.getStroke();
-            g2d.setStroke(new BasicStroke((float)lineWidth));
-            g2d.drawLine(x1, y1, x2, y2);
-            g2d.setStroke(stroke);
-        } else {
-            g.drawLine(x1, y1, x2, y2);
-        }
-    }
-
-    protected void drawRectangle(Node node, Graphics g) {
-        NamedNodeMap attrs = node.getAttributes();
-        Color color = parseColor(getStringAttr(attrs, "color"));
-        boolean filled = getBooleanAttr(node, "filled", false);
-        int x = aee.evaluate(getStringAttr(attrs, "x"));
-        int y = aee.evaluate(getStringAttr(attrs, "y"));
-        int w = aee.evaluate(getStringAttr(attrs, "width"));
-        int h = aee.evaluate(getStringAttr(attrs, "height"));
-        g.setColor(color);
-        if (getInt("width") == -1) {
-            x -= w;
-        }
-        if (getInt("height") == -1) {
-            y -= h;
-        }
-        if (filled) {
-            g.fillRect(x, y, w, h);
-        } else {
-            g.drawRect(x, y, w, h);
-        }
-    }
-
-    protected void drawTile(Node node, Graphics g, JInternalFrame jif) {
-        NamedNodeMap attrs = node.getAttributes();
-        int x0 = aee.evaluate(getStringAttr(attrs, "x"));
-        int y0 = aee.evaluate(getStringAttr(attrs, "y"));
-        int w = aee.evaluate(getStringAttr(attrs, "width"));
-        int h = aee.evaluate(getStringAttr(attrs, "height"));
-        int tw = aee.evaluate(getStringAttr(attrs, "tile_width"));
-        int th = aee.evaluate(getStringAttr(attrs, "tile_height"));
-        int width  = getInt("width");
-        int height = getInt("height");
-        if (width == -1) {
-            x0 -= w;
-        }
-        if (height == -1) {
-            y0 -= h;
-        }
-        Shape oldClip = g.getClip();
-        if (g instanceof Graphics2D) {
-            ((Graphics2D)g).clip(new Rectangle(x0, y0, w, h));
-        }
-        variables.put("width",  tw);
-        variables.put("height", th);
-
-        Node draw_ops = getNode("draw_ops", new String[] { "name", getStringAttr(node, "name") });
-
-        int y = y0;
-        while (y < y0 + h) {
-            int x = x0;
-            while (x < x0 + w) {
-                g.translate(x, y);
-                draw(draw_ops, g, jif);
-                g.translate(-x, -y);
-                x += tw;
-            }
-            y += th;
-        }
-
-        variables.put("width",  width);
-        variables.put("height", height);
-        g.setClip(oldClip);
-    }
-
-    protected void drawTint(Node node, Graphics g) {
-        NamedNodeMap attrs = node.getAttributes();
-        Color color = parseColor(getStringAttr(attrs, "color"));
-        float alpha = Float.parseFloat(getStringAttr(attrs, "alpha"));
-        int x = aee.evaluate(getStringAttr(attrs, "x"));
-        int y = aee.evaluate(getStringAttr(attrs, "y"));
-        int w = aee.evaluate(getStringAttr(attrs, "width"));
-        int h = aee.evaluate(getStringAttr(attrs, "height"));
-        if (getInt("width") == -1) {
-            x -= w;
-        }
-        if (getInt("height") == -1) {
-            y -= h;
-        }
-        if (g instanceof Graphics2D) {
-            Graphics2D g2 = (Graphics2D)g;
-            Composite oldComp = g2.getComposite();
-            AlphaComposite ac = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha);
-            g2.setComposite(ac);
-            g2.setColor(color);
-            g2.fillRect(x, y, w, h);
-            g2.setComposite(oldComp);
-        }
-    }
-
-    protected void drawTitle(Node node, Graphics g, JInternalFrame jif) {
-        NamedNodeMap attrs = node.getAttributes();
-        String colorStr = getStringAttr(attrs, "color");
-        int i = colorStr.indexOf("gtk:fg[");
-        if (i > 0) {
-            colorStr = colorStr.substring(0, i) + "gtk:text[" + colorStr.substring(i+7);
-        }
-        Color color = parseColor(colorStr);
-        int x = aee.evaluate(getStringAttr(attrs, "x"));
-        int y = aee.evaluate(getStringAttr(attrs, "y"));
-
-        String title = jif.getTitle();
-        if (title != null) {
-            FontMetrics fm = SwingUtilities2.getFontMetrics(jif, g);
-            title = SwingUtilities2.clipStringIfNecessary(jif, fm, title,
-                         calculateTitleArea(jif).width);
-            g.setColor(color);
-            SwingUtilities2.drawString(jif, g, title, x, y + fm.getAscent());
-        }
-    }
-
-    protected Dimension calculateButtonSize(JComponent titlePane) {
-        int buttonHeight = getInt("button_height");
-        if (buttonHeight == 0) {
-            buttonHeight = titlePane.getHeight();
-            if (buttonHeight == 0) {
-                buttonHeight = 13;
-            } else {
-                Insets button_border = (Insets)frameGeometry.get("button_border");
-                if (button_border != null) {
-                    buttonHeight -= (button_border.top + button_border.bottom);
-                }
-            }
-        }
-        int buttonWidth = getInt("button_width");
-        if (buttonWidth == 0) {
-            buttonWidth = buttonHeight;
-            Float aspect_ratio = (Float)frameGeometry.get("aspect_ratio");
-            if (aspect_ratio != null) {
-                buttonWidth = (int)(buttonHeight / aspect_ratio.floatValue());
-            }
-        }
-        return new Dimension(buttonWidth, buttonHeight);
-    }
-
-    protected Rectangle calculateTitleArea(JInternalFrame jif) {
-        JComponent titlePane = findChild(jif, "InternalFrame.northPane");
-        Dimension buttonDim = calculateButtonSize(titlePane);
-        Insets title_border = (Insets)frameGeometry.get("title_border");
-        Insets button_border = (Insets)getFrameGeometry().get("button_border");
-
-        Rectangle r = new Rectangle();
-        r.x = getInt("left_titlebar_edge");
-        r.y = 0;
-        r.height = titlePane.getHeight();
-        if (title_border != null) {
-            r.x += title_border.left;
-            r.y += title_border.top;
-            r.height -= (title_border.top + title_border.bottom);
-        }
-
-        if (titlePane.getParent().getComponentOrientation().isLeftToRight()) {
-            r.x += buttonDim.width;
-            if (button_border != null) {
-                r.x += button_border.left;
-            }
-            r.width = titlePane.getWidth() - r.x - getInt("right_titlebar_edge");
-            if (jif.isClosable()) {
-                r.width -= buttonDim.width;
-            }
-            if (jif.isMaximizable()) {
-                r.width -= buttonDim.width;
-            }
-            if (jif.isIconifiable()) {
-                r.width -= buttonDim.width;
-            }
-        } else {
-            if (jif.isClosable()) {
-                r.x += buttonDim.width;
-            }
-            if (jif.isMaximizable()) {
-                r.x += buttonDim.width;
-            }
-            if (jif.isIconifiable()) {
-                r.x += buttonDim.width;
-            }
-            r.width = titlePane.getWidth() - r.x - getInt("right_titlebar_edge")
-                    - buttonDim.width;
-            if (button_border != null) {
-                r.x -= button_border.right;
-            }
-        }
-        if (title_border != null) {
-            r.width -= title_border.right;
-        }
-        return r;
-    }
-
-
-    protected int calculateTitleTextWidth(Graphics g, JInternalFrame jif) {
-        String title = jif.getTitle();
-        if (title != null) {
-            Rectangle r = calculateTitleArea(jif);
-            return Math.min(SwingUtilities2.stringWidth(jif,
-                     SwingUtilities2.getFontMetrics(jif, g), title), r.width);
-        }
-        return 0;
-    }
-
-    protected void setClip(Node node, Graphics g) {
-        NamedNodeMap attrs = node.getAttributes();
-        int x = aee.evaluate(getStringAttr(attrs, "x"));
-        int y = aee.evaluate(getStringAttr(attrs, "y"));
-        int w = aee.evaluate(getStringAttr(attrs, "width"));
-        int h = aee.evaluate(getStringAttr(attrs, "height"));
-        if (getInt("width") == -1) {
-            x -= w;
-        }
-        if (getInt("height") == -1) {
-            y -= h;
-        }
-        if (g instanceof Graphics2D) {
-            ((Graphics2D)g).clip(new Rectangle(x, y, w, h));
-        }
-    }
-
-    protected void drawGTKArrow(Node node, Graphics g) {
-        NamedNodeMap attrs = node.getAttributes();
-        String arrow    = getStringAttr(attrs, "arrow");
-        String shadow   = getStringAttr(attrs, "shadow");
-        String stateStr = getStringAttr(attrs, "state").toUpperCase();
-        int x = aee.evaluate(getStringAttr(attrs, "x"));
-        int y = aee.evaluate(getStringAttr(attrs, "y"));
-        int w = aee.evaluate(getStringAttr(attrs, "width"));
-        int h = aee.evaluate(getStringAttr(attrs, "height"));
-
-        int state = -1;
-        if ("NORMAL".equals(stateStr)) {
-            state = ENABLED;
-        } else if ("SELECTED".equals(stateStr)) {
-            state = SELECTED;
-        } else if ("INSENSITIVE".equals(stateStr)) {
-            state = DISABLED;
-        } else if ("PRELIGHT".equals(stateStr)) {
-            state = MOUSE_OVER;
-        }
-
-        ShadowType shadowType = null;
-        if ("in".equals(shadow)) {
-            shadowType = ShadowType.IN;
-        } else if ("out".equals(shadow)) {
-            shadowType = ShadowType.OUT;
-        } else if ("etched_in".equals(shadow)) {
-            shadowType = ShadowType.ETCHED_IN;
-        } else if ("etched_out".equals(shadow)) {
-            shadowType = ShadowType.ETCHED_OUT;
-        } else if ("none".equals(shadow)) {
-            shadowType = ShadowType.NONE;
-        }
-
-        ArrowType direction = null;
-        if ("up".equals(arrow)) {
-            direction = ArrowType.UP;
-        } else if ("down".equals(arrow)) {
-            direction = ArrowType.DOWN;
-        } else if ("left".equals(arrow)) {
-            direction = ArrowType.LEFT;
-        } else if ("right".equals(arrow)) {
-            direction = ArrowType.RIGHT;
-        }
-
-        GTKPainter.INSTANCE.paintMetacityElement(context, g, state,
-                "metacity-arrow", x, y, w, h, shadowType, direction);
-    }
-
-    protected void drawGTKBox(Node node, Graphics g) {
-        NamedNodeMap attrs = node.getAttributes();
-        String shadow   = getStringAttr(attrs, "shadow");
-        String stateStr = getStringAttr(attrs, "state").toUpperCase();
-        int x = aee.evaluate(getStringAttr(attrs, "x"));
-        int y = aee.evaluate(getStringAttr(attrs, "y"));
-        int w = aee.evaluate(getStringAttr(attrs, "width"));
-        int h = aee.evaluate(getStringAttr(attrs, "height"));
-
-        int state = -1;
-        if ("NORMAL".equals(stateStr)) {
-            state = ENABLED;
-        } else if ("SELECTED".equals(stateStr)) {
-            state = SELECTED;
-        } else if ("INSENSITIVE".equals(stateStr)) {
-            state = DISABLED;
-        } else if ("PRELIGHT".equals(stateStr)) {
-            state = MOUSE_OVER;
-        }
-
-        ShadowType shadowType = null;
-        if ("in".equals(shadow)) {
-            shadowType = ShadowType.IN;
-        } else if ("out".equals(shadow)) {
-            shadowType = ShadowType.OUT;
-        } else if ("etched_in".equals(shadow)) {
-            shadowType = ShadowType.ETCHED_IN;
-        } else if ("etched_out".equals(shadow)) {
-            shadowType = ShadowType.ETCHED_OUT;
-        } else if ("none".equals(shadow)) {
-            shadowType = ShadowType.NONE;
-        }
-        GTKPainter.INSTANCE.paintMetacityElement(context, g, state,
-                "metacity-box", x, y, w, h, shadowType, null);
-    }
-
-    protected void drawGTKVLine(Node node, Graphics g) {
-        NamedNodeMap attrs = node.getAttributes();
-        String stateStr = getStringAttr(attrs, "state").toUpperCase();
-
-        int x  = aee.evaluate(getStringAttr(attrs, "x"));
-        int y1 = aee.evaluate(getStringAttr(attrs, "y1"));
-        int y2 = aee.evaluate(getStringAttr(attrs, "y2"));
-
-        int state = -1;
-        if ("NORMAL".equals(stateStr)) {
-            state = ENABLED;
-        } else if ("SELECTED".equals(stateStr)) {
-            state = SELECTED;
-        } else if ("INSENSITIVE".equals(stateStr)) {
-            state = DISABLED;
-        } else if ("PRELIGHT".equals(stateStr)) {
-            state = MOUSE_OVER;
-        }
-
-        GTKPainter.INSTANCE.paintMetacityElement(context, g, state,
-                "metacity-vline", x, y1, 1, y2 - y1, null, null);
-    }
-
-    protected void drawGradient(Node node, Graphics g) {
-        NamedNodeMap attrs = node.getAttributes();
-        String type = getStringAttr(attrs, "type");
-        float alpha = getFloatAttr(node, "alpha", -1F);
-        int x = aee.evaluate(getStringAttr(attrs, "x"));
-        int y = aee.evaluate(getStringAttr(attrs, "y"));
-        int w = aee.evaluate(getStringAttr(attrs, "width"));
-        int h = aee.evaluate(getStringAttr(attrs, "height"));
-        if (getInt("width") == -1) {
-            x -= w;
-        }
-        if (getInt("height") == -1) {
-            y -= h;
-        }
-
-        // Get colors from child nodes
-        Node[] colorNodes = getNodesByName(node, "color");
-        Color[] colors = new Color[colorNodes.length];
-        for (int i = 0; i < colorNodes.length; i++) {
-            colors[i] = parseColor(getStringAttr(colorNodes[i], "value"));
-        }
-
-        boolean horizontal = ("diagonal".equals(type) || "horizontal".equals(type));
-        boolean vertical   = ("diagonal".equals(type) || "vertical".equals(type));
-
-        if (g instanceof Graphics2D) {
-            Graphics2D g2 = (Graphics2D)g;
-            Composite oldComp = g2.getComposite();
-            if (alpha >= 0F) {
-                g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha));
-            }
-            int n = colors.length - 1;
-            for (int i = 0; i < n; i++) {
-                g2.setPaint(new GradientPaint(x + (horizontal ? (i*w/n) : 0),
-                                              y + (vertical   ? (i*h/n) : 0),
-                                              colors[i],
-                                              x + (horizontal ? ((i+1)*w/n) : 0),
-                                              y + (vertical   ? ((i+1)*h/n) : 0),
-                                              colors[i+1]));
-                g2.fillRect(x + (horizontal ? (i*w/n) : 0),
-                            y + (vertical   ? (i*h/n) : 0),
-                            (horizontal ? (w/n) : w),
-                            (vertical   ? (h/n) : h));
-            }
-            g2.setComposite(oldComp);
-        }
-    }
-
-    protected void drawImage(Node node, Graphics g) {
-        NamedNodeMap attrs = node.getAttributes();
-        String filename = getStringAttr(attrs, "filename");
-        String colorizeStr = getStringAttr(attrs, "colorize");
-        Color colorize = (colorizeStr != null) ? parseColor(colorizeStr) : null;
-        String alpha = getStringAttr(attrs, "alpha");
-        Image object = (colorize != null) ? getImage(filename, colorize) : getImage(filename);
-        variables.put("object_width",  object.getWidth(null));
-        variables.put("object_height", object.getHeight(null));
-        String fill_type = getStringAttr(attrs, "fill_type");
-        int x = aee.evaluate(getStringAttr(attrs, "x"));
-        int y = aee.evaluate(getStringAttr(attrs, "y"));
-        int w = aee.evaluate(getStringAttr(attrs, "width"));
-        int h = aee.evaluate(getStringAttr(attrs, "height"));
-        if (getInt("width") == -1) {
-            x -= w;
-        }
-        if (getInt("height") == -1) {
-            y -= h;
-        }
-
-        if (alpha != null) {
-            if ("tile".equals(fill_type)) {
-                StringTokenizer tokenizer = new StringTokenizer(alpha, ":");
-                float[] alphas = new float[tokenizer.countTokens()];
-                for (int i = 0; i < alphas.length; i++) {
-                    alphas[i] = Float.parseFloat(tokenizer.nextToken());
-                }
-                tileImage(g, object, x, y, w, h, alphas);
-            } else {
-                float a = Float.parseFloat(alpha);
-                if (g instanceof Graphics2D) {
-                    Graphics2D g2 = (Graphics2D)g;
-                    Composite oldComp = g2.getComposite();
-                    g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, a));
-                    g2.drawImage(object, x, y, w, h, null);
-                    g2.setComposite(oldComp);
-                }
-            }
-        } else {
-            g.drawImage(object, x, y, w, h, null);
-        }
-    }
-
-    protected void drawIcon(Node node, Graphics g, JInternalFrame jif) {
-        Icon icon = jif.getFrameIcon();
-        if (icon == null) {
-            return;
-        }
-
-        NamedNodeMap attrs = node.getAttributes();
-        String alpha = getStringAttr(attrs, "alpha");
-        int x = aee.evaluate(getStringAttr(attrs, "x"));
-        int y = aee.evaluate(getStringAttr(attrs, "y"));
-        int w = aee.evaluate(getStringAttr(attrs, "width"));
-        int h = aee.evaluate(getStringAttr(attrs, "height"));
-        if (getInt("width") == -1) {
-            x -= w;
-        }
-        if (getInt("height") == -1) {
-            y -= h;
-        }
-
-        if (alpha != null) {
-            float a = Float.parseFloat(alpha);
-            if (g instanceof Graphics2D) {
-                Graphics2D g2 = (Graphics2D)g;
-                Composite oldComp = g2.getComposite();
-                g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, a));
-                icon.paintIcon(jif, g, x, y);
-                g2.setComposite(oldComp);
-            }
-        } else {
-            icon.paintIcon(jif, g, x, y);
-        }
-    }
-
-    protected void drawInclude(Node node, Graphics g, JInternalFrame jif) {
-        int oldWidth  = getInt("width");
-        int oldHeight = getInt("height");
-
-        NamedNodeMap attrs = node.getAttributes();
-        int x = aee.evaluate(getStringAttr(attrs, "x"),       0);
-        int y = aee.evaluate(getStringAttr(attrs, "y"),       0);
-        int w = aee.evaluate(getStringAttr(attrs, "width"),  -1);
-        int h = aee.evaluate(getStringAttr(attrs, "height"), -1);
-
-        if (w != -1) {
-            variables.put("width",  w);
-        }
-        if (h != -1) {
-            variables.put("height", h);
-        }
-
-        Node draw_ops = getNode("draw_ops", new String[] {
-            "name", getStringAttr(node, "name")
-        });
-        g.translate(x, y);
-        draw(draw_ops, g, jif);
-        g.translate(-x, -y);
-
-        if (w != -1) {
-            variables.put("width",  oldWidth);
-        }
-        if (h != -1) {
-            variables.put("height", oldHeight);
-        }
-    }
-
-    protected void draw(Node draw_ops, Graphics g, JInternalFrame jif) {
-        if (draw_ops != null) {
-            NodeList nodes = draw_ops.getChildNodes();
-            if (nodes != null) {
-                Shape oldClip = g.getClip();
-                for (int i = 0; i < nodes.getLength(); i++) {
-                    Node child = nodes.item(i);
-                    if (child.getNodeType() == Node.ELEMENT_NODE) {
-                        try {
-                            String name = child.getNodeName();
-                            if ("include".equals(name)) {
-                                drawInclude(child, g, jif);
-                            } else if ("arc".equals(name)) {
-                                drawArc(child, g);
-                            } else if ("clip".equals(name)) {
-                                setClip(child, g);
-                            } else if ("gradient".equals(name)) {
-                                drawGradient(child, g);
-                            } else if ("gtk_arrow".equals(name)) {
-                                drawGTKArrow(child, g);
-                            } else if ("gtk_box".equals(name)) {
-                                drawGTKBox(child, g);
-                            } else if ("gtk_vline".equals(name)) {
-                                drawGTKVLine(child, g);
-                            } else if ("image".equals(name)) {
-                                drawImage(child, g);
-                            } else if ("icon".equals(name)) {
-                                drawIcon(child, g, jif);
-                            } else if ("line".equals(name)) {
-                                drawLine(child, g);
-                            } else if ("rectangle".equals(name)) {
-                                drawRectangle(child, g);
-                            } else if ("tint".equals(name)) {
-                                drawTint(child, g);
-                            } else if ("tile".equals(name)) {
-                                drawTile(child, g, jif);
-                            } else if ("title".equals(name)) {
-                                drawTitle(child, g, jif);
-                            } else {
-                                System.err.println("Unknown Metacity drawing op: "+child);
-                            }
-                        } catch (NumberFormatException ex) {
-                            logError(themeName, ex);
-                        }
-                    }
-                }
-                g.setClip(oldClip);
-            }
-        }
-    }
-
-    protected void drawPiece(Node frame_style, Graphics g, String position, int x, int y,
-                             int width, int height, JInternalFrame jif) {
-        Node piece = getNode(frame_style, "piece", new String[] { "position", position });
-        if (piece != null) {
-            Node draw_ops;
-            String draw_ops_name = getStringAttr(piece, "draw_ops");
-            if (draw_ops_name != null) {
-                draw_ops = getNode("draw_ops", new String[] { "name", draw_ops_name });
-            } else {
-                draw_ops = getNode(piece, "draw_ops", null);
-            }
-            variables.put("width",  width);
-            variables.put("height", height);
-            g.translate(x, y);
-            draw(draw_ops, g, jif);
-            g.translate(-x, -y);
-        }
-    }
-
-
-    Insets getBorderInsets(SynthContext context, Insets insets) {
-        updateFrameGeometry(context);
-
-        if (insets == null) {
-            insets = new Insets(0, 0, 0, 0);
-        }
-        insets.top    = ((Insets)frameGeometry.get("title_border")).top;
-        insets.bottom = getInt("bottom_height");
-        insets.left   = getInt("left_width");
-        insets.right  = getInt("right_width");
-        return insets;
-    }
-
-
-    private void updateFrameGeometry(SynthContext context) {
-        this.context = context;
-        JComponent comp = context.getComponent();
-        JComponent titlePane = findChild(comp, "InternalFrame.northPane");
-
-        JInternalFrame jif = null;
-        if (comp instanceof JInternalFrame) {
-            jif = (JInternalFrame)comp;
-        } else if (comp instanceof JInternalFrame.JDesktopIcon) {
-            jif = ((JInternalFrame.JDesktopIcon)comp).getInternalFrame();
-        } else {
-            assert false : "component is not JInternalFrame or JInternalFrame.JDesktopIcon";
-            return;
-        }
-
-        if (frame_style_set == null) {
-            Node window = getNode("window", new String[]{"type", "normal"});
-
-            if (window != null) {
-                frame_style_set = getNode("frame_style_set",
-                        new String[] {"name", getStringAttr(window, "style_set")});
-            }
-
-            if (frame_style_set == null) {
-                frame_style_set = getNode("frame_style_set", new String[] {"name", "normal"});
-            }
-        }
-
-        if (frame_style_set != null) {
-            Node frame = getNode(frame_style_set, "frame", new String[] {
-                "focus", (jif.isSelected() ? "yes" : "no"),
-                "state", (jif.isMaximum() ? "maximized" : "normal")
-            });
-
-            if (frame != null) {
-                Node frame_style = getNode("frame_style", new String[] {
-                    "name", getStringAttr(frame, "style")
-                });
-                if (frame_style != null) {
-                    Map gm = frameGeometries.get(getStringAttr(frame_style, "geometry"));
-
-                    setFrameGeometry(titlePane, gm);
-                }
-            }
-        }
-    }
-
-
-    protected static void logError(String themeName, Exception ex) {
-        logError(themeName, ex.toString());
-    }
-
-    protected static void logError(String themeName, String msg) {
-        if (!errorLogged) {
-            System.err.println("Exception in Metacity for theme \""+themeName+"\": "+msg);
-            errorLogged = true;
-        }
-    }
-
-
-    // XML Parsing
-
-
-    protected static Document getXMLDoc(final URL xmlFile)
-                                throws IOException,
-                                       ParserConfigurationException,
-                                       SAXException {
-        if (documentBuilder == null) {
-            documentBuilder =
-                DocumentBuilderFactory.newInstance().newDocumentBuilder();
-        }
-        InputStream inputStream =
-            AccessController.doPrivileged(new PrivilegedAction<InputStream>() {
-                public InputStream run() {
-                    try {
-                        return new BufferedInputStream(xmlFile.openStream());
-                    } catch (IOException ex) {
-                        return null;
-                    }
-                }
-            });
-
-        Document doc = null;
-        if (inputStream != null) {
-            doc = documentBuilder.parse(inputStream);
-        }
-        return doc;
-    }
-
-
-    protected Node[] getNodesByName(Node parent, String name) {
-        NodeList nodes = parent.getChildNodes(); // ElementNode
-        int n = nodes.getLength();
-        ArrayList<Node> list = new ArrayList<Node>();
-        for (int i=0; i < n; i++) {
-            Node node = nodes.item(i);
-            if (name.equals(node.getNodeName())) {
-                list.add(node);
-            }
-        }
-        return list.toArray(new Node[list.size()]);
-    }
-
-
-
-    protected Node getNode(String tagName, String[] attrs) {
-        NodeList nodes = xmlDoc.getElementsByTagName(tagName);
-        return (nodes != null) ? getNode(nodes, tagName, attrs) : null;
-    }
-
-    protected Node getNode(Node parent, String name, String[] attrs) {
-        Node node = null;
-        NodeList nodes = parent.getChildNodes();
-        if (nodes != null) {
-            node = getNode(nodes, name, attrs);
-        }
-        if (node == null) {
-            String inheritFrom = getStringAttr(parent, "parent");
-            if (inheritFrom != null) {
-                Node inheritFromNode = getNode(parent.getParentNode(),
-                                               parent.getNodeName(),
-                                               new String[] { "name", inheritFrom });
-                if (inheritFromNode != null) {
-                    node = getNode(inheritFromNode, name, attrs);
-                }
-            }
-        }
-        return node;
-    }
-
-    protected Node getNode(NodeList nodes, String name, String[] attrs) {
-        int n = nodes.getLength();
-        for (int i=0; i < n; i++) {
-            Node node = nodes.item(i);
-            if (name.equals(node.getNodeName())) {
-                if (attrs != null) {
-                    NamedNodeMap nodeAttrs = node.getAttributes();
-                    if (nodeAttrs != null) {
-                        boolean matches = true;
-                        int nAttrs = attrs.length / 2;
-                        for (int a = 0; a < nAttrs; a++) {
-                            String aName  = attrs[a * 2];
-                            String aValue = attrs[a * 2 + 1];
-                            Node attr = nodeAttrs.getNamedItem(aName);
-                            if (attr == null ||
-                                aValue != null && !aValue.equals(attr.getNodeValue())) {
-                                matches = false;
-                                break;
-                            }
-                        }
-                        if (matches) {
-                            return node;
-                        }
-                    }
-                } else {
-                    return node;
-                }
-            }
-        }
-        return null;
-    }
-
-    protected String getStringAttr(Node node, String name) {
-        String value = null;
-        NamedNodeMap attrs = node.getAttributes();
-        if (attrs != null) {
-            value = getStringAttr(attrs, name);
-            if (value == null) {
-                String inheritFrom = getStringAttr(attrs, "parent");
-                if (inheritFrom != null) {
-                    Node inheritFromNode = getNode(node.getParentNode(),
-                                                   node.getNodeName(),
-                                                   new String[] { "name", inheritFrom });
-                    if (inheritFromNode != null) {
-                        value = getStringAttr(inheritFromNode, name);
-                    }
-                }
-            }
-        }
-        return value;
-    }
-
-    protected String getStringAttr(NamedNodeMap attrs, String name) {
-        Node item = attrs.getNamedItem(name);
-        return (item != null) ? item.getNodeValue() : null;
-    }
-
-    protected boolean getBooleanAttr(Node node, String name, boolean fallback) {
-        String str = getStringAttr(node, name);
-        if (str != null) {
-            return Boolean.valueOf(str).booleanValue();
-        }
-        return fallback;
-    }
-
-    protected int getIntAttr(Node node, String name, int fallback) {
-        String str = getStringAttr(node, name);
-        int value = fallback;
-        if (str != null) {
-            try {
-                value = Integer.parseInt(str);
-            } catch (NumberFormatException ex) {
-                logError(themeName, ex);
-            }
-        }
-        return value;
-    }
-
-    protected float getFloatAttr(Node node, String name, float fallback) {
-        String str = getStringAttr(node, name);
-        float value = fallback;
-        if (str != null) {
-            try {
-                value = Float.parseFloat(str);
-            } catch (NumberFormatException ex) {
-                logError(themeName, ex);
-            }
-        }
-        return value;
-    }
-
-
-
-    protected Color parseColor(String str) {
-        StringTokenizer tokenizer = new StringTokenizer(str, "/");
-        int n = tokenizer.countTokens();
-        if (n > 1) {
-            String function = tokenizer.nextToken();
-            if ("shade".equals(function)) {
-                assert (n == 3);
-                Color c = parseColor2(tokenizer.nextToken());
-                float alpha = Float.parseFloat(tokenizer.nextToken());
-                return GTKColorType.adjustColor(c, 1.0F, alpha, alpha);
-            } else if ("blend".equals(function)) {
-                assert (n == 4);
-                Color  bg = parseColor2(tokenizer.nextToken());
-                Color  fg = parseColor2(tokenizer.nextToken());
-                float alpha = Float.parseFloat(tokenizer.nextToken());
-                if (alpha > 1.0f) {
-                    alpha = 1.0f / alpha;
-                }
-
-                return new Color((int)(bg.getRed() + ((fg.getRed() - bg.getRed()) * alpha)),
-                                 (int)(bg.getRed() + ((fg.getRed() - bg.getRed()) * alpha)),
-                                 (int)(bg.getRed() + ((fg.getRed() - bg.getRed()) * alpha)));
-            } else {
-                System.err.println("Unknown Metacity color function="+str);
-                return null;
-            }
-        } else {
-            return parseColor2(str);
-        }
-    }
-
-    protected Color parseColor2(String str) {
-        Color c = null;
-        if (str.startsWith("gtk:")) {
-            int i1 = str.indexOf('[');
-            if (i1 > 3) {
-                String typeStr = str.substring(4, i1).toLowerCase();
-                int i2 = str.indexOf(']');
-                if (i2 > i1+1) {
-                    String stateStr = str.substring(i1+1, i2).toUpperCase();
-                    int state = -1;
-                    if ("ACTIVE".equals(stateStr)) {
-                        state = PRESSED;
-                    } else if ("INSENSITIVE".equals(stateStr)) {
-                        state = DISABLED;
-                    } else if ("NORMAL".equals(stateStr)) {
-                        state = ENABLED;
-                    } else if ("PRELIGHT".equals(stateStr)) {
-                        state = MOUSE_OVER;
-                    } else if ("SELECTED".equals(stateStr)) {
-                        state = SELECTED;
-                    }
-                    ColorType type = null;
-                    if ("fg".equals(typeStr)) {
-                        type = GTKColorType.FOREGROUND;
-                    } else if ("bg".equals(typeStr)) {
-                        type = GTKColorType.BACKGROUND;
-                    } else if ("base".equals(typeStr)) {
-                        type = GTKColorType.TEXT_BACKGROUND;
-                    } else if ("text".equals(typeStr)) {
-                        type = GTKColorType.TEXT_FOREGROUND;
-                    } else if ("dark".equals(typeStr)) {
-                        type = GTKColorType.DARK;
-                    } else if ("light".equals(typeStr)) {
-                        type = GTKColorType.LIGHT;
-                    }
-                    if (state >= 0 && type != null) {
-                        c = ((GTKStyle)context.getStyle()).getGTKColor(context, state, type);
-                    }
-                }
-            }
-        }
-        if (c == null) {
-            c = parseColorString(str);
-        }
-        return c;
-    }
-
-    private static Color parseColorString(String str) {
-        if (str.charAt(0) == '#') {
-            str = str.substring(1);
-
-            int i = str.length();
-
-            if (i < 3 || i > 12 || (i % 3) != 0) {
-                return null;
-            }
-
-            i /= 3;
-
-            int r;
-            int g;
-            int b;
-
-            try {
-                r = Integer.parseInt(str.substring(0, i), 16);
-                g = Integer.parseInt(str.substring(i, i * 2), 16);
-                b = Integer.parseInt(str.substring(i * 2, i * 3), 16);
-            } catch (NumberFormatException nfe) {
-                return null;
-            }
-
-            if (i == 4) {
-                return new ColorUIResource(r / 65535.0f, g / 65535.0f, b / 65535.0f);
-            } else if (i == 1) {
-                return new ColorUIResource(r / 15.0f, g / 15.0f, b / 15.0f);
-            } else if (i == 2) {
-                return new ColorUIResource(r, g, b);
-            } else {
-                return new ColorUIResource(r / 4095.0f, g / 4095.0f, b / 4095.0f);
-            }
-        } else {
-            return XColors.lookupColor(str);
-        }
-    }
-
-    class ArithmeticExpressionEvaluator {
-        private PeekableStringTokenizer tokenizer;
-
-        int evaluate(String expr) {
-            tokenizer = new PeekableStringTokenizer(expr, " \t+-*/%()", true);
-            return Math.round(expression());
-        }
-
-        int evaluate(String expr, int fallback) {
-            return (expr != null) ? evaluate(expr) : fallback;
-        }
-
-        public float expression() {
-            float value = getTermValue();
-            boolean done = false;
-            while (!done && tokenizer.hasMoreTokens()) {
-                String next = tokenizer.peek();
-                if ("+".equals(next) ||
-                    "-".equals(next) ||
-                    "`max`".equals(next) ||
-                    "`min`".equals(next)) {
-                    tokenizer.nextToken();
-                    float value2 = getTermValue();
-                    if ("+".equals(next)) {
-                        value += value2;
-                    } else if ("-".equals(next)) {
-                        value -= value2;
-                    } else if ("`max`".equals(next)) {
-                        value = Math.max(value, value2);
-                    } else if ("`min`".equals(next)) {
-                        value = Math.min(value, value2);
-                    }
-                } else {
-                    done = true;
-                }
-            }
-            return value;
-        }
-
-        public float getTermValue() {
-            float value = getFactorValue();
-            boolean done = false;
-            while (!done && tokenizer.hasMoreTokens()) {
-                String next = tokenizer.peek();
-                if ("*".equals(next) || "/".equals(next) || "%".equals(next)) {
-                    tokenizer.nextToken();
-                    float value2 = getFactorValue();
-                    if ("*".equals(next)) {
-                        value *= value2;
-                    } else if ("/".equals(next)) {
-                        value /= value2;
-                    } else {
-                        value %= value2;
-                    }
-                } else {
-                    done = true;
-                }
-            }
-            return value;
-        }
-
-        public float getFactorValue() {
-            float value;
-            if ("(".equals(tokenizer.peek())) {
-                tokenizer.nextToken();
-                value = expression();
-                tokenizer.nextToken(); // skip right paren
-            } else {
-                String token = tokenizer.nextToken();
-                if (Character.isDigit(token.charAt(0))) {
-                    value = Float.parseFloat(token);
-                } else {
-                    Integer i = variables.get(token);
-                    if (i == null) {
-                        i = (Integer)getFrameGeometry().get(token);
-                    }
-                    if (i == null) {
-                        logError(themeName, "Variable \"" + token + "\" not defined");
-                        return 0;
-                    }
-                    value = (i != null) ? i.intValue() : 0F;
-                }
-            }
-            return value;
-        }
-
-
-    }
-
-    static class PeekableStringTokenizer extends StringTokenizer {
-        String token = null;
-
-        public PeekableStringTokenizer(String str, String delim,
-                                       boolean returnDelims) {
-            super(str, delim, returnDelims);
-            peek();
-        }
-
-        public String peek() {
-            if (token == null) {
-                token = nextToken();
-            }
-            return token;
-        }
-
-        public boolean hasMoreTokens() {
-            return (token != null || super.hasMoreTokens());
-        }
-
-        public String nextToken() {
-            if (token != null) {
-                String t = token;
-                token = null;
-                if (hasMoreTokens()) {
-                    peek();
-                }
-                return t;
-            } else {
-                String token = super.nextToken();
-                while ((token.equals(" ") || token.equals("\t"))
-                       && hasMoreTokens()) {
-                    token = super.nextToken();
-                }
-                return token;
-            }
-        }
-    }
-
-
-    static class RoundRectClipShape extends RectangularShape {
-        static final int TOP_LEFT = 1;
-        static final int TOP_RIGHT = 2;
-        static final int BOTTOM_LEFT = 4;
-        static final int BOTTOM_RIGHT = 8;
-
-        int x;
-        int y;
-        int width;
-        int height;
-        int arcwidth;
-        int archeight;
-        int corners;
-
-        public RoundRectClipShape() {
-        }
-
-        public RoundRectClipShape(int x, int y, int w, int h,
-                                  int arcw, int arch, int corners) {
-            setRoundedRect(x, y, w, h, arcw, arch, corners);
-        }
-
-        public void setRoundedRect(int x, int y, int w, int h,
-                                   int arcw, int arch, int corners) {
-            this.corners = corners;
-            this.x = x;
-            this.y = y;
-            this.width = w;
-            this.height = h;
-            this.arcwidth = arcw;
-            this.archeight = arch;
-        }
-
-        public double getX() {
-            return (double)x;
-        }
-
-        public double getY() {
-            return (double)y;
-        }
-
-        public double getWidth() {
-            return (double)width;
-        }
-
-        public double getHeight() {
-            return (double)height;
-        }
-
-        public double getArcWidth() {
-            return (double)arcwidth;
-        }
-
-        public double getArcHeight() {
-            return (double)archeight;
-        }
-
-        public boolean isEmpty() {
-            return false;  // Not called
-        }
-
-        public Rectangle2D getBounds2D() {
-            return null;  // Not called
-        }
-
-        public int getCornerFlags() {
-            return corners;
-        }
-
-        public void setFrame(double x, double y, double w, double h) {
-            // Not called
-        }
-
-        public boolean contains(double x, double y) {
-            return false;  // Not called
-        }
-
-        private int classify(double coord, double left, double right, double arcsize) {
-            return 0;  // Not called
-        }
-
-        public boolean intersects(double x, double y, double w, double h) {
-            return false;  // Not called
-        }
-
-        public boolean contains(double x, double y, double w, double h) {
-            return false;  // Not called
-        }
-
-        public PathIterator getPathIterator(AffineTransform at) {
-            return new RoundishRectIterator(this, at);
-        }
-
-
-        static class RoundishRectIterator implements PathIterator {
-            double x, y, w, h, aw, ah;
-            AffineTransform affine;
-            int index;
-
-            double ctrlpts[][];
-            int types[];
-
-            private static final double angle = Math.PI / 4.0;
-            private static final double a = 1.0 - Math.cos(angle);
-            private static final double b = Math.tan(angle);
-            private static final double c = Math.sqrt(1.0 + b * b) - 1 + a;
-            private static final double cv = 4.0 / 3.0 * a * b / c;
-            private static final double acv = (1.0 - cv) / 2.0;
-
-            // For each array:
-            //     4 values for each point {v0, v1, v2, v3}:
-            //         point = (x + v0 * w + v1 * arcWidth,
-            //                  y + v2 * h + v3 * arcHeight);
-            private static final double CtrlPtTemplate[][] = {
-                {  0.0,  0.0,  1.0,  0.0 },     /* BOTTOM LEFT corner */
-                {  0.0,  0.0,  1.0, -0.5 },     /* BOTTOM LEFT arc start */
-                {  0.0,  0.0,  1.0, -acv,       /* BOTTOM LEFT arc curve */
-                   0.0,  acv,  1.0,  0.0,
-                   0.0,  0.5,  1.0,  0.0 },
-                {  1.0,  0.0,  1.0,  0.0 },     /* BOTTOM RIGHT corner */
-                {  1.0, -0.5,  1.0,  0.0 },     /* BOTTOM RIGHT arc start */
-                {  1.0, -acv,  1.0,  0.0,       /* BOTTOM RIGHT arc curve */
-                   1.0,  0.0,  1.0, -acv,
-                   1.0,  0.0,  1.0, -0.5 },
-                {  1.0,  0.0,  0.0,  0.0 },     /* TOP RIGHT corner */
-                {  1.0,  0.0,  0.0,  0.5 },     /* TOP RIGHT arc start */
-                {  1.0,  0.0,  0.0,  acv,       /* TOP RIGHT arc curve */
-                   1.0, -acv,  0.0,  0.0,
-                   1.0, -0.5,  0.0,  0.0 },
-                {  0.0,  0.0,  0.0,  0.0 },     /* TOP LEFT corner */
-                {  0.0,  0.5,  0.0,  0.0 },     /* TOP LEFT arc start */
-                {  0.0,  acv,  0.0,  0.0,       /* TOP LEFT arc curve */
-                   0.0,  0.0,  0.0,  acv,
-                   0.0,  0.0,  0.0,  0.5 },
-                {},                             /* Closing path element */
-            };
-            private static final int CornerFlags[] = {
-                RoundRectClipShape.BOTTOM_LEFT,
-                RoundRectClipShape.BOTTOM_RIGHT,
-                RoundRectClipShape.TOP_RIGHT,
-                RoundRectClipShape.TOP_LEFT,
-            };
-
-            RoundishRectIterator(RoundRectClipShape rr, AffineTransform at) {
-                this.x = rr.getX();
-                this.y = rr.getY();
-                this.w = rr.getWidth();
-                this.h = rr.getHeight();
-                this.aw = Math.min(w, Math.abs(rr.getArcWidth()));
-                this.ah = Math.min(h, Math.abs(rr.getArcHeight()));
-                this.affine = at;
-                if (w < 0 || h < 0) {
-                    // Don't draw anything...
-                    ctrlpts = new double[0][];
-                    types = new int[0];
-                } else {
-                    int corners = rr.getCornerFlags();
-                    int numedges = 5;  // 4xCORNER_POINT, CLOSE
-                    for (int i = 1; i < 0x10; i <<= 1) {
-                        // Add one for each corner that has a curve
-                        if ((corners & i) != 0) numedges++;
-                    }
-                    ctrlpts = new double[numedges][];
-                    types = new int[numedges];
-                    int j = 0;
-                    for (int i = 0; i < 4; i++) {
-                        types[j] = SEG_LINETO;
-                        if ((corners & CornerFlags[i]) == 0) {
-                            ctrlpts[j++] = CtrlPtTemplate[i*3+0];
-                        } else {
-                            ctrlpts[j++] = CtrlPtTemplate[i*3+1];
-                            types[j] = SEG_CUBICTO;
-                            ctrlpts[j++] = CtrlPtTemplate[i*3+2];
-                        }
-                    }
-                    types[j] = SEG_CLOSE;
-                    ctrlpts[j++] = CtrlPtTemplate[12];
-                    types[0] = SEG_MOVETO;
-                }
-            }
-
-            public int getWindingRule() {
-                return WIND_NON_ZERO;
-            }
-
-            public boolean isDone() {
-                return index >= ctrlpts.length;
-            }
-
-            public void next() {
-                index++;
-            }
-
-            public int currentSegment(float[] coords) {
-                if (isDone()) {
-                    throw new NoSuchElementException("roundrect iterator out of bounds");
-                }
-                double ctrls[] = ctrlpts[index];
-                int nc = 0;
-                for (int i = 0; i < ctrls.length; i += 4) {
-                    coords[nc++] = (float) (x + ctrls[i + 0] * w + ctrls[i + 1] * aw);
-                    coords[nc++] = (float) (y + ctrls[i + 2] * h + ctrls[i + 3] * ah);
-                }
-                if (affine != null) {
-                    affine.transform(coords, 0, coords, 0, nc / 2);
-                }
-                return types[index];
-            }
-
-            public int currentSegment(double[] coords) {
-                if (isDone()) {
-                    throw new NoSuchElementException("roundrect iterator out of bounds");
-                }
-                double ctrls[] = ctrlpts[index];
-                int nc = 0;
-                for (int i = 0; i < ctrls.length; i += 4) {
-                    coords[nc++] = x + ctrls[i + 0] * w + ctrls[i + 1] * aw;
-                    coords[nc++] = y + ctrls[i + 2] * h + ctrls[i + 3] * ah;
-                }
-                if (affine != null) {
-                    affine.transform(coords, 0, coords, 0, nc / 2);
-                }
-                return types[index];
-            }
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/PangoFonts.java b/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/PangoFonts.java
deleted file mode 100755
index 4794d83..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/PangoFonts.java
+++ /dev/null
@@ -1,233 +0,0 @@
-/*
- * Copyright (c) 2002, 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
- * 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.java.swing.plaf.gtk;
-
-import java.awt.*;
-import java.awt.geom.AffineTransform;
-import javax.swing.plaf.FontUIResource;
-import java.util.StringTokenizer;
-
-import sun.font.FontConfigManager;
-import sun.font.FontUtilities;
-
-/**
- * @author Shannon Hickey
- * @author Leif Samuelsson
- */
-class PangoFonts {
-
-    public static final String CHARS_DIGITS = "0123456789";
-
-    /**
-     * Calculate a default scale factor for fonts in this L&F to match
-     * the reported resolution of the screen.
-     * Java 2D specified a default user-space scale of 72dpi.
-     * This is unlikely to correspond to that of the real screen.
-     * The Xserver reports a value which may be used to adjust for this.
-     * and Java 2D exposes it via a normalizing transform.
-     * However many Xservers report a hard-coded 90dpi whilst others report a
-     * calculated value based on possibly incorrect data.
-     * That is something that must be solved at the X11 level
-     * Note that in an X11 multi-screen environment, the default screen
-     * is the one used by the JRE so it is safe to use it here.
-     */
-    private static double fontScale;
-
-    static {
-        fontScale = 1.0d;
-        GraphicsEnvironment ge =
-           GraphicsEnvironment.getLocalGraphicsEnvironment();
-
-        if (!ge.isHeadless()) {
-            GraphicsConfiguration gc =
-                ge.getDefaultScreenDevice().getDefaultConfiguration();
-            AffineTransform at = gc.getNormalizingTransform();
-            fontScale = at.getScaleY();
-        }
-    }
-
-
-    /**
-     * Parses a String containing a pango font description and returns
-     * a Font object.
-     *
-     * @param pangoName a String describing a pango font
-     *                  e.g. "Sans Italic 10"
-     * @return a Font object as a FontUIResource
-     *         or null if no suitable font could be created.
-     */
-    static Font lookupFont(String pangoName) {
-        String family = "";
-        int style = Font.PLAIN;
-        int size = 10;
-
-        StringTokenizer tok = new StringTokenizer(pangoName);
-
-        while (tok.hasMoreTokens()) {
-            String word = tok.nextToken();
-
-            if (word.equalsIgnoreCase("italic")) {
-                style |= Font.ITALIC;
-            } else if (word.equalsIgnoreCase("bold")) {
-                style |= Font.BOLD;
-            } else if (CHARS_DIGITS.indexOf(word.charAt(0)) != -1) {
-                try {
-                    size = Integer.parseInt(word);
-                } catch (NumberFormatException ex) {
-                }
-            } else {
-                if (family.length() > 0) {
-                    family += " ";
-                }
-
-                family += word;
-            }
-        }
-
-        /*
-         * Java 2D font point sizes are in a user-space scale of 72dpi.
-         * GTK allows a user to configure a "dpi" property used to scale
-         * the fonts used to match a user's preference.
-         * To match the font size of GTK apps we need to obtain this DPI and
-         * adjust as follows:
-         * Some versions of GTK use XSETTINGS if available to dynamically
-         * monitor user-initiated changes in the DPI to be used by GTK
-         * apps. This value is also made available as the Xft.dpi X resource.
-         * This is presumably a function of the font preferences API and/or
-         * the manner in which it requests the toolkit to update the default
-         * for the desktop. This dual approach is probably necessary since
-         * other versions of GTK - or perhaps some apps - determine the size
-         * to use only at start-up from that X resource.
-         * If that resource is not set then GTK scales for the DPI resolution
-         * reported by the Xserver using the formula
-         * DisplayHeight(dpy, screen) / DisplayHeightMM(dpy, screen) * 25.4
-         * (25.4mm == 1 inch).
-         * JDK tracks the Xft.dpi XSETTINGS property directly so it can
-         * dynamically change font size by tracking just that value.
-         * If that resource is not available use the same fall back formula
-         * as GTK (see calculation for fontScale).
-         *
-         * GTK's default setting for Xft.dpi is 96 dpi (and it seems -1
-         * apparently also can mean that "default"). However this default
-         * isn't used if there's no property set. The real default in the
-         * absence of a resource is the Xserver reported dpi.
-         * Finally this DPI is used to calculate the nearest Java 2D font
-         * 72 dpi font size.
-         * There are cases in which JDK behaviour may not exactly mimic
-         * GTK native app behaviour :
-         * 1) When a GTK app is not able to dynamically track the changes
-         * (does not use XSETTINGS), JDK will resize but other apps will
-         * not. This is OK as JDK is exhibiting preferred behaviour and
-         * this is probably how all later GTK apps will behave
-         * 2) When a GTK app does not use XSETTINGS and for some reason
-         * the XRDB property is not present. JDK will pick up XSETTINGS
-         * and the GTK app will use the Xserver default. Since its
-         * impossible for JDK to know that some other GTK app is not
-         * using XSETTINGS its impossible to account for this and in any
-         * case for it to be a problem the values would have to be different.
-         * It also seems unlikely to arise except when a user explicitly
-         * deletes the X resource database entry.
-         * There also some other issues to be aware of for the future:
-         * GTK specifies the Xft.dpi value as server-wide which when used
-         * on systems with 2 distinct X screens with different physical DPI
-         * the font sizes will inevitably appear different. It would have
-         * been a more user-friendly design to further adjust that one
-         * setting depending on the screen resolution to achieve perceived
-         * equivalent sizes. If such a change were ever to be made in GTK
-         * we would need to update for that.
-         */
-        double dsize = size;
-        int dpi = 96;
-        Object value =
-            Toolkit.getDefaultToolkit().getDesktopProperty("gnome.Xft/DPI");
-        if (value instanceof Integer) {
-            dpi = ((Integer)value).intValue() / 1024;
-            if (dpi == -1) {
-              dpi = 96;
-            }
-            if (dpi < 50) { /* 50 dpi is the minimum value gnome allows */
-                dpi = 50;
-            }
-            /* The Java rasteriser assumes pts are in a user space of
-             * 72 dpi, so we need to adjust for that.
-             */
-            dsize = ((double)(dpi * size)/ 72.0);
-        } else {
-            /* If there's no property, GTK scales for the resolution
-             * reported by the Xserver using the formula listed above.
-             * fontScale already accounts for the 72 dpi Java 2D space.
-             */
-            dsize = size * fontScale;
-        }
-
-        /* Round size to nearest integer pt size */
-        size = (int)(dsize + 0.5);
-        if (size < 1) {
-            size = 1;
-        }
-
-        String fcFamilyLC = family.toLowerCase();
-        if (FontUtilities.mapFcName(fcFamilyLC) != null) {
-            /* family is a Fc/Pango logical font which we need to expand. */
-            Font font =  FontUtilities.getFontConfigFUIR(fcFamilyLC, style, size);
-            font = font.deriveFont(style, (float)dsize);
-            return new FontUIResource(font);
-        } else {
-            /* It's a physical font which we will create with a fallback */
-            Font font = new Font(family, style, size);
-            /* a roundabout way to set the font size in floating points */
-            font = font.deriveFont(style, (float)dsize);
-            FontUIResource fuir = new FontUIResource(font);
-            return FontUtilities.getCompositeFontUIResource(fuir);
-        }
-    }
-
-    /**
-     * Parses a String containing a pango font description and returns
-     * the (unscaled) font size as an integer.
-     *
-     * @param pangoName a String describing a pango font
-     * @return the size of the font described by pangoName (e.g. if
-     *         pangoName is "Sans Italic 10", then this method returns 10)
-     */
-    static int getFontSize(String pangoName) {
-        int size = 10;
-
-        StringTokenizer tok = new StringTokenizer(pangoName);
-        while (tok.hasMoreTokens()) {
-            String word = tok.nextToken();
-
-            if (CHARS_DIGITS.indexOf(word.charAt(0)) != -1) {
-                try {
-                    size = Integer.parseInt(word);
-                } catch (NumberFormatException ex) {
-                }
-            }
-        }
-
-        return size;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/XColors.java b/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/XColors.java
deleted file mode 100755
index 657a81c..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/XColors.java
+++ /dev/null
@@ -1,831 +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.java.swing.plaf.gtk;
-
-import java.awt.Color;
-import java.util.Arrays;
-import javax.swing.plaf.ColorUIResource;
-
-/**
- * @author  Shannon Hickey
- */
-class XColors {
-
-    private static class XColor implements Comparable {
-        String name;
-
-        int red;
-        int green;
-        int blue;
-
-        XColor(String name, int red, int green, int blue) {
-            this.name = name;
-            this.red = red;
-            this.green = green;
-            this.blue = blue;
-        }
-
-        Color toColor() {
-            return new ColorUIResource(red, green, blue);
-        }
-
-        public int compareTo(Object o) {
-            XColor other = (XColor)o;
-
-            return name.compareTo(other.name);
-        }
-    }
-
-    private static XColor key = new XColor("", -1, -1, -1);
-
-    static Color lookupColor(String name) {
-        key.name = name.toLowerCase();
-
-        int pos = Arrays.binarySearch(colors, key);
-
-        if (pos < 0) {
-            return null;
-        }
-
-        return colors[pos].toColor();
-    }
-
-    private static final XColor[] colors = {
-        new XColor("alice blue", 240, 248, 255),
-        new XColor("aliceblue", 240, 248, 255),
-        new XColor("antique white", 250, 235, 215),
-        new XColor("antiquewhite", 250, 235, 215),
-        new XColor("antiquewhite1", 255, 239, 219),
-        new XColor("antiquewhite2", 238, 223, 204),
-        new XColor("antiquewhite3", 205, 192, 176),
-        new XColor("antiquewhite4", 139, 131, 120),
-        new XColor("aquamarine", 127, 255, 212),
-        new XColor("aquamarine1", 127, 255, 212),
-        new XColor("aquamarine2", 118, 238, 198),
-        new XColor("aquamarine3", 102, 205, 170),
-        new XColor("aquamarine4", 69, 139, 116),
-        new XColor("azure", 240, 255, 255),
-        new XColor("azure1", 240, 255, 255),
-        new XColor("azure2", 224, 238, 238),
-        new XColor("azure3", 193, 205, 205),
-        new XColor("azure4", 131, 139, 139),
-        new XColor("beige", 245, 245, 220),
-        new XColor("bisque", 255, 228, 196),
-        new XColor("bisque1", 255, 228, 196),
-        new XColor("bisque2", 238, 213, 183),
-        new XColor("bisque3", 205, 183, 158),
-        new XColor("bisque4", 139, 125, 107),
-        new XColor("black", 0, 0, 0),
-        new XColor("blanched almond", 255, 235, 205),
-        new XColor("blanchedalmond", 255, 235, 205),
-        new XColor("blue", 0, 0, 255),
-        new XColor("blue violet", 138, 43, 226),
-        new XColor("blue1", 0, 0, 255),
-        new XColor("blue2", 0, 0, 238),
-        new XColor("blue3", 0, 0, 205),
-        new XColor("blue4", 0, 0, 139),
-        new XColor("blueviolet", 138, 43, 226),
-        new XColor("brown", 165, 42, 42),
-        new XColor("brown1", 255, 64, 64),
-        new XColor("brown2", 238, 59, 59),
-        new XColor("brown3", 205, 51, 51),
-        new XColor("brown4", 139, 35, 35),
-        new XColor("burlywood", 222, 184, 135),
-        new XColor("burlywood1", 255, 211, 155),
-        new XColor("burlywood2", 238, 197, 145),
-        new XColor("burlywood3", 205, 170, 125),
-        new XColor("burlywood4", 139, 115, 85),
-        new XColor("cadet blue", 95, 158, 160),
-        new XColor("cadetblue", 95, 158, 160),
-        new XColor("cadetblue1", 152, 245, 255),
-        new XColor("cadetblue2", 142, 229, 238),
-        new XColor("cadetblue3", 122, 197, 205),
-        new XColor("cadetblue4", 83, 134, 139),
-        new XColor("chartreuse", 127, 255, 0),
-        new XColor("chartreuse1", 127, 255, 0),
-        new XColor("chartreuse2", 118, 238, 0),
-        new XColor("chartreuse3", 102, 205, 0),
-        new XColor("chartreuse4", 69, 139, 0),
-        new XColor("chocolate", 210, 105, 30),
-        new XColor("chocolate1", 255, 127, 36),
-        new XColor("chocolate2", 238, 118, 33),
-        new XColor("chocolate3", 205, 102, 29),
-        new XColor("chocolate4", 139, 69, 19),
-        new XColor("coral", 255, 127, 80),
-        new XColor("coral1", 255, 114, 86),
-        new XColor("coral2", 238, 106, 80),
-        new XColor("coral3", 205, 91, 69),
-        new XColor("coral4", 139, 62, 47),
-        new XColor("cornflower blue", 100, 149, 237),
-        new XColor("cornflowerblue", 100, 149, 237),
-        new XColor("cornsilk", 255, 248, 220),
-        new XColor("cornsilk1", 255, 248, 220),
-        new XColor("cornsilk2", 238, 232, 205),
-        new XColor("cornsilk3", 205, 200, 177),
-        new XColor("cornsilk4", 139, 136, 120),
-        new XColor("cyan", 0, 255, 255),
-        new XColor("cyan1", 0, 255, 255),
-        new XColor("cyan2", 0, 238, 238),
-        new XColor("cyan3", 0, 205, 205),
-        new XColor("cyan4", 0, 139, 139),
-        new XColor("dark blue", 0, 0, 139),
-        new XColor("dark cyan", 0, 139, 139),
-        new XColor("dark goldenrod", 184, 134, 11),
-        new XColor("dark gray", 169, 169, 169),
-        new XColor("dark green", 0, 100, 0),
-        new XColor("dark grey", 169, 169, 169),
-        new XColor("dark khaki", 189, 183, 107),
-        new XColor("dark magenta", 139, 0, 139),
-        new XColor("dark olive green", 85, 107, 47),
-        new XColor("dark orange", 255, 140, 0),
-        new XColor("dark orchid", 153, 50, 204),
-        new XColor("dark red", 139, 0, 0),
-        new XColor("dark salmon", 233, 150, 122),
-        new XColor("dark sea green", 143, 188, 143),
-        new XColor("dark slate blue", 72, 61, 139),
-        new XColor("dark slate gray", 47, 79, 79),
-        new XColor("dark slate grey", 47, 79, 79),
-        new XColor("dark turquoise", 0, 206, 209),
-        new XColor("dark violet", 148, 0, 211),
-        new XColor("darkblue", 0, 0, 139),
-        new XColor("darkcyan", 0, 139, 139),
-        new XColor("darkgoldenrod", 184, 134, 11),
-        new XColor("darkgoldenrod1", 255, 185, 15),
-        new XColor("darkgoldenrod2", 238, 173, 14),
-        new XColor("darkgoldenrod3", 205, 149, 12),
-        new XColor("darkgoldenrod4", 139, 101, 8),
-        new XColor("darkgray", 169, 169, 169),
-        new XColor("darkgreen", 0, 100, 0),
-        new XColor("darkgrey", 169, 169, 169),
-        new XColor("darkkhaki", 189, 183, 107),
-        new XColor("darkmagenta", 139, 0, 139),
-        new XColor("darkolivegreen", 85, 107, 47),
-        new XColor("darkolivegreen1", 202, 255, 112),
-        new XColor("darkolivegreen2", 188, 238, 104),
-        new XColor("darkolivegreen3", 162, 205, 90),
-        new XColor("darkolivegreen4", 110, 139, 61),
-        new XColor("darkorange", 255, 140, 0),
-        new XColor("darkorange1", 255, 127, 0),
-        new XColor("darkorange2", 238, 118, 0),
-        new XColor("darkorange3", 205, 102, 0),
-        new XColor("darkorange4", 139, 69, 0),
-        new XColor("darkorchid", 153, 50, 204),
-        new XColor("darkorchid1", 191, 62, 255),
-        new XColor("darkorchid2", 178, 58, 238),
-        new XColor("darkorchid3", 154, 50, 205),
-        new XColor("darkorchid4", 104, 34, 139),
-        new XColor("darkred", 139, 0, 0),
-        new XColor("darksalmon", 233, 150, 122),
-        new XColor("darkseagreen", 143, 188, 143),
-        new XColor("darkseagreen1", 193, 255, 193),
-        new XColor("darkseagreen2", 180, 238, 180),
-        new XColor("darkseagreen3", 155, 205, 155),
-        new XColor("darkseagreen4", 105, 139, 105),
-        new XColor("darkslateblue", 72, 61, 139),
-        new XColor("darkslategray", 47, 79, 79),
-        new XColor("darkslategray1", 151, 255, 255),
-        new XColor("darkslategray2", 141, 238, 238),
-        new XColor("darkslategray3", 121, 205, 205),
-        new XColor("darkslategray4", 82, 139, 139),
-        new XColor("darkslategrey", 47, 79, 79),
-        new XColor("darkturquoise", 0, 206, 209),
-        new XColor("darkviolet", 148, 0, 211),
-        new XColor("deep pink", 255, 20, 147),
-        new XColor("deep sky blue", 0, 191, 255),
-        new XColor("deeppink", 255, 20, 147),
-        new XColor("deeppink1", 255, 20, 147),
-        new XColor("deeppink2", 238, 18, 137),
-        new XColor("deeppink3", 205, 16, 118),
-        new XColor("deeppink4", 139, 10, 80),
-        new XColor("deepskyblue", 0, 191, 255),
-        new XColor("deepskyblue1", 0, 191, 255),
-        new XColor("deepskyblue2", 0, 178, 238),
-        new XColor("deepskyblue3", 0, 154, 205),
-        new XColor("deepskyblue4", 0, 104, 139),
-        new XColor("dim gray", 105, 105, 105),
-        new XColor("dim grey", 105, 105, 105),
-        new XColor("dimgray", 105, 105, 105),
-        new XColor("dimgrey", 105, 105, 105),
-        new XColor("dodger blue", 30, 144, 255),
-        new XColor("dodgerblue", 30, 144, 255),
-        new XColor("dodgerblue1", 30, 144, 255),
-        new XColor("dodgerblue2", 28, 134, 238),
-        new XColor("dodgerblue3", 24, 116, 205),
-        new XColor("dodgerblue4", 16, 78, 139),
-        new XColor("firebrick", 178, 34, 34),
-        new XColor("firebrick1", 255, 48, 48),
-        new XColor("firebrick2", 238, 44, 44),
-        new XColor("firebrick3", 205, 38, 38),
-        new XColor("firebrick4", 139, 26, 26),
-        new XColor("floral white", 255, 250, 240),
-        new XColor("floralwhite", 255, 250, 240),
-        new XColor("forest green", 34, 139, 34),
-        new XColor("forestgreen", 34, 139, 34),
-        new XColor("gainsboro", 220, 220, 220),
-        new XColor("ghost white", 248, 248, 255),
-        new XColor("ghostwhite", 248, 248, 255),
-        new XColor("gold", 255, 215, 0),
-        new XColor("gold1", 255, 215, 0),
-        new XColor("gold2", 238, 201, 0),
-        new XColor("gold3", 205, 173, 0),
-        new XColor("gold4", 139, 117, 0),
-        new XColor("goldenrod", 218, 165, 32),
-        new XColor("goldenrod1", 255, 193, 37),
-        new XColor("goldenrod2", 238, 180, 34),
-        new XColor("goldenrod3", 205, 155, 29),
-        new XColor("goldenrod4", 139, 105, 20),
-        new XColor("gray", 190, 190, 190),
-        new XColor("gray0", 0, 0, 0),
-        new XColor("gray1", 3, 3, 3),
-        new XColor("gray10", 26, 26, 26),
-        new XColor("gray100", 255, 255, 255),
-        new XColor("gray11", 28, 28, 28),
-        new XColor("gray12", 31, 31, 31),
-        new XColor("gray13", 33, 33, 33),
-        new XColor("gray14", 36, 36, 36),
-        new XColor("gray15", 38, 38, 38),
-        new XColor("gray16", 41, 41, 41),
-        new XColor("gray17", 43, 43, 43),
-        new XColor("gray18", 46, 46, 46),
-        new XColor("gray19", 48, 48, 48),
-        new XColor("gray2", 5, 5, 5),
-        new XColor("gray20", 51, 51, 51),
-        new XColor("gray21", 54, 54, 54),
-        new XColor("gray22", 56, 56, 56),
-        new XColor("gray23", 59, 59, 59),
-        new XColor("gray24", 61, 61, 61),
-        new XColor("gray25", 64, 64, 64),
-        new XColor("gray26", 66, 66, 66),
-        new XColor("gray27", 69, 69, 69),
-        new XColor("gray28", 71, 71, 71),
-        new XColor("gray29", 74, 74, 74),
-        new XColor("gray3", 8, 8, 8),
-        new XColor("gray30", 77, 77, 77),
-        new XColor("gray31", 79, 79, 79),
-        new XColor("gray32", 82, 82, 82),
-        new XColor("gray33", 84, 84, 84),
-        new XColor("gray34", 87, 87, 87),
-        new XColor("gray35", 89, 89, 89),
-        new XColor("gray36", 92, 92, 92),
-        new XColor("gray37", 94, 94, 94),
-        new XColor("gray38", 97, 97, 97),
-        new XColor("gray39", 99, 99, 99),
-        new XColor("gray4", 10, 10, 10),
-        new XColor("gray40", 102, 102, 102),
-        new XColor("gray41", 105, 105, 105),
-        new XColor("gray42", 107, 107, 107),
-        new XColor("gray43", 110, 110, 110),
-        new XColor("gray44", 112, 112, 112),
-        new XColor("gray45", 115, 115, 115),
-        new XColor("gray46", 117, 117, 117),
-        new XColor("gray47", 120, 120, 120),
-        new XColor("gray48", 122, 122, 122),
-        new XColor("gray49", 125, 125, 125),
-        new XColor("gray5", 13, 13, 13),
-        new XColor("gray50", 127, 127, 127),
-        new XColor("gray51", 130, 130, 130),
-        new XColor("gray52", 133, 133, 133),
-        new XColor("gray53", 135, 135, 135),
-        new XColor("gray54", 138, 138, 138),
-        new XColor("gray55", 140, 140, 140),
-        new XColor("gray56", 143, 143, 143),
-        new XColor("gray57", 145, 145, 145),
-        new XColor("gray58", 148, 148, 148),
-        new XColor("gray59", 150, 150, 150),
-        new XColor("gray6", 15, 15, 15),
-        new XColor("gray60", 153, 153, 153),
-        new XColor("gray61", 156, 156, 156),
-        new XColor("gray62", 158, 158, 158),
-        new XColor("gray63", 161, 161, 161),
-        new XColor("gray64", 163, 163, 163),
-        new XColor("gray65", 166, 166, 166),
-        new XColor("gray66", 168, 168, 168),
-        new XColor("gray67", 171, 171, 171),
-        new XColor("gray68", 173, 173, 173),
-        new XColor("gray69", 176, 176, 176),
-        new XColor("gray7", 18, 18, 18),
-        new XColor("gray70", 179, 179, 179),
-        new XColor("gray71", 181, 181, 181),
-        new XColor("gray72", 184, 184, 184),
-        new XColor("gray73", 186, 186, 186),
-        new XColor("gray74", 189, 189, 189),
-        new XColor("gray75", 191, 191, 191),
-        new XColor("gray76", 194, 194, 194),
-        new XColor("gray77", 196, 196, 196),
-        new XColor("gray78", 199, 199, 199),
-        new XColor("gray79", 201, 201, 201),
-        new XColor("gray8", 20, 20, 20),
-        new XColor("gray80", 204, 204, 204),
-        new XColor("gray81", 207, 207, 207),
-        new XColor("gray82", 209, 209, 209),
-        new XColor("gray83", 212, 212, 212),
-        new XColor("gray84", 214, 214, 214),
-        new XColor("gray85", 217, 217, 217),
-        new XColor("gray86", 219, 219, 219),
-        new XColor("gray87", 222, 222, 222),
-        new XColor("gray88", 224, 224, 224),
-        new XColor("gray89", 227, 227, 227),
-        new XColor("gray9", 23, 23, 23),
-        new XColor("gray90", 229, 229, 229),
-        new XColor("gray91", 232, 232, 232),
-        new XColor("gray92", 235, 235, 235),
-        new XColor("gray93", 237, 237, 237),
-        new XColor("gray94", 240, 240, 240),
-        new XColor("gray95", 242, 242, 242),
-        new XColor("gray96", 245, 245, 245),
-        new XColor("gray97", 247, 247, 247),
-        new XColor("gray98", 250, 250, 250),
-        new XColor("gray99", 252, 252, 252),
-        new XColor("green", 0, 255, 0),
-        new XColor("green yellow", 173, 255, 47),
-        new XColor("green1", 0, 255, 0),
-        new XColor("green2", 0, 238, 0),
-        new XColor("green3", 0, 205, 0),
-        new XColor("green4", 0, 139, 0),
-        new XColor("greenyellow", 173, 255, 47),
-        new XColor("grey", 190, 190, 190),
-        new XColor("grey0", 0, 0, 0),
-        new XColor("grey1", 3, 3, 3),
-        new XColor("grey10", 26, 26, 26),
-        new XColor("grey100", 255, 255, 255),
-        new XColor("grey11", 28, 28, 28),
-        new XColor("grey12", 31, 31, 31),
-        new XColor("grey13", 33, 33, 33),
-        new XColor("grey14", 36, 36, 36),
-        new XColor("grey15", 38, 38, 38),
-        new XColor("grey16", 41, 41, 41),
-        new XColor("grey17", 43, 43, 43),
-        new XColor("grey18", 46, 46, 46),
-        new XColor("grey19", 48, 48, 48),
-        new XColor("grey2", 5, 5, 5),
-        new XColor("grey20", 51, 51, 51),
-        new XColor("grey21", 54, 54, 54),
-        new XColor("grey22", 56, 56, 56),
-        new XColor("grey23", 59, 59, 59),
-        new XColor("grey24", 61, 61, 61),
-        new XColor("grey25", 64, 64, 64),
-        new XColor("grey26", 66, 66, 66),
-        new XColor("grey27", 69, 69, 69),
-        new XColor("grey28", 71, 71, 71),
-        new XColor("grey29", 74, 74, 74),
-        new XColor("grey3", 8, 8, 8),
-        new XColor("grey30", 77, 77, 77),
-        new XColor("grey31", 79, 79, 79),
-        new XColor("grey32", 82, 82, 82),
-        new XColor("grey33", 84, 84, 84),
-        new XColor("grey34", 87, 87, 87),
-        new XColor("grey35", 89, 89, 89),
-        new XColor("grey36", 92, 92, 92),
-        new XColor("grey37", 94, 94, 94),
-        new XColor("grey38", 97, 97, 97),
-        new XColor("grey39", 99, 99, 99),
-        new XColor("grey4", 10, 10, 10),
-        new XColor("grey40", 102, 102, 102),
-        new XColor("grey41", 105, 105, 105),
-        new XColor("grey42", 107, 107, 107),
-        new XColor("grey43", 110, 110, 110),
-        new XColor("grey44", 112, 112, 112),
-        new XColor("grey45", 115, 115, 115),
-        new XColor("grey46", 117, 117, 117),
-        new XColor("grey47", 120, 120, 120),
-        new XColor("grey48", 122, 122, 122),
-        new XColor("grey49", 125, 125, 125),
-        new XColor("grey5", 13, 13, 13),
-        new XColor("grey50", 127, 127, 127),
-        new XColor("grey51", 130, 130, 130),
-        new XColor("grey52", 133, 133, 133),
-        new XColor("grey53", 135, 135, 135),
-        new XColor("grey54", 138, 138, 138),
-        new XColor("grey55", 140, 140, 140),
-        new XColor("grey56", 143, 143, 143),
-        new XColor("grey57", 145, 145, 145),
-        new XColor("grey58", 148, 148, 148),
-        new XColor("grey59", 150, 150, 150),
-        new XColor("grey6", 15, 15, 15),
-        new XColor("grey60", 153, 153, 153),
-        new XColor("grey61", 156, 156, 156),
-        new XColor("grey62", 158, 158, 158),
-        new XColor("grey63", 161, 161, 161),
-        new XColor("grey64", 163, 163, 163),
-        new XColor("grey65", 166, 166, 166),
-        new XColor("grey66", 168, 168, 168),
-        new XColor("grey67", 171, 171, 171),
-        new XColor("grey68", 173, 173, 173),
-        new XColor("grey69", 176, 176, 176),
-        new XColor("grey7", 18, 18, 18),
-        new XColor("grey70", 179, 179, 179),
-        new XColor("grey71", 181, 181, 181),
-        new XColor("grey72", 184, 184, 184),
-        new XColor("grey73", 186, 186, 186),
-        new XColor("grey74", 189, 189, 189),
-        new XColor("grey75", 191, 191, 191),
-        new XColor("grey76", 194, 194, 194),
-        new XColor("grey77", 196, 196, 196),
-        new XColor("grey78", 199, 199, 199),
-        new XColor("grey79", 201, 201, 201),
-        new XColor("grey8", 20, 20, 20),
-        new XColor("grey80", 204, 204, 204),
-        new XColor("grey81", 207, 207, 207),
-        new XColor("grey82", 209, 209, 209),
-        new XColor("grey83", 212, 212, 212),
-        new XColor("grey84", 214, 214, 214),
-        new XColor("grey85", 217, 217, 217),
-        new XColor("grey86", 219, 219, 219),
-        new XColor("grey87", 222, 222, 222),
-        new XColor("grey88", 224, 224, 224),
-        new XColor("grey89", 227, 227, 227),
-        new XColor("grey9", 23, 23, 23),
-        new XColor("grey90", 229, 229, 229),
-        new XColor("grey91", 232, 232, 232),
-        new XColor("grey92", 235, 235, 235),
-        new XColor("grey93", 237, 237, 237),
-        new XColor("grey94", 240, 240, 240),
-        new XColor("grey95", 242, 242, 242),
-        new XColor("grey96", 245, 245, 245),
-        new XColor("grey97", 247, 247, 247),
-        new XColor("grey98", 250, 250, 250),
-        new XColor("grey99", 252, 252, 252),
-        new XColor("honeydew", 240, 255, 240),
-        new XColor("honeydew1", 240, 255, 240),
-        new XColor("honeydew2", 224, 238, 224),
-        new XColor("honeydew3", 193, 205, 193),
-        new XColor("honeydew4", 131, 139, 131),
-        new XColor("hot pink", 255, 105, 180),
-        new XColor("hotpink", 255, 105, 180),
-        new XColor("hotpink1", 255, 110, 180),
-        new XColor("hotpink2", 238, 106, 167),
-        new XColor("hotpink3", 205, 96, 144),
-        new XColor("hotpink4", 139, 58, 98),
-        new XColor("indian red", 205, 92, 92),
-        new XColor("indianred", 205, 92, 92),
-        new XColor("indianred1", 255, 106, 106),
-        new XColor("indianred2", 238, 99, 99),
-        new XColor("indianred3", 205, 85, 85),
-        new XColor("indianred4", 139, 58, 58),
-        new XColor("ivory", 255, 255, 240),
-        new XColor("ivory1", 255, 255, 240),
-        new XColor("ivory2", 238, 238, 224),
-        new XColor("ivory3", 205, 205, 193),
-        new XColor("ivory4", 139, 139, 131),
-        new XColor("khaki", 240, 230, 140),
-        new XColor("khaki1", 255, 246, 143),
-        new XColor("khaki2", 238, 230, 133),
-        new XColor("khaki3", 205, 198, 115),
-        new XColor("khaki4", 139, 134, 78),
-        new XColor("lavender", 230, 230, 250),
-        new XColor("lavender blush", 255, 240, 245),
-        new XColor("lavenderblush", 255, 240, 245),
-        new XColor("lavenderblush1", 255, 240, 245),
-        new XColor("lavenderblush2", 238, 224, 229),
-        new XColor("lavenderblush3", 205, 193, 197),
-        new XColor("lavenderblush4", 139, 131, 134),
-        new XColor("lawn green", 124, 252, 0),
-        new XColor("lawngreen", 124, 252, 0),
-        new XColor("lemon chiffon", 255, 250, 205),
-        new XColor("lemonchiffon", 255, 250, 205),
-        new XColor("lemonchiffon1", 255, 250, 205),
-        new XColor("lemonchiffon2", 238, 233, 191),
-        new XColor("lemonchiffon3", 205, 201, 165),
-        new XColor("lemonchiffon4", 139, 137, 112),
-        new XColor("light blue", 173, 216, 230),
-        new XColor("light coral", 240, 128, 128),
-        new XColor("light cyan", 224, 255, 255),
-        new XColor("light goldenrod", 238, 221, 130),
-        new XColor("light goldenrod yellow", 250, 250, 210),
-        new XColor("light gray", 211, 211, 211),
-        new XColor("light green", 144, 238, 144),
-        new XColor("light grey", 211, 211, 211),
-        new XColor("light pink", 255, 182, 193),
-        new XColor("light salmon", 255, 160, 122),
-        new XColor("light sea green", 32, 178, 170),
-        new XColor("light sky blue", 135, 206, 250),
-        new XColor("light slate blue", 132, 112, 255),
-        new XColor("light slate gray", 119, 136, 153),
-        new XColor("light slate grey", 119, 136, 153),
-        new XColor("light steel blue", 176, 196, 222),
-        new XColor("light yellow", 255, 255, 224),
-        new XColor("lightblue", 173, 216, 230),
-        new XColor("lightblue1", 191, 239, 255),
-        new XColor("lightblue2", 178, 223, 238),
-        new XColor("lightblue3", 154, 192, 205),
-        new XColor("lightblue4", 104, 131, 139),
-        new XColor("lightcoral", 240, 128, 128),
-        new XColor("lightcyan", 224, 255, 255),
-        new XColor("lightcyan1", 224, 255, 255),
-        new XColor("lightcyan2", 209, 238, 238),
-        new XColor("lightcyan3", 180, 205, 205),
-        new XColor("lightcyan4", 122, 139, 139),
-        new XColor("lightgoldenrod", 238, 221, 130),
-        new XColor("lightgoldenrod1", 255, 236, 139),
-        new XColor("lightgoldenrod2", 238, 220, 130),
-        new XColor("lightgoldenrod3", 205, 190, 112),
-        new XColor("lightgoldenrod4", 139, 129, 76),
-        new XColor("lightgoldenrodyellow", 250, 250, 210),
-        new XColor("lightgray", 211, 211, 211),
-        new XColor("lightgreen", 144, 238, 144),
-        new XColor("lightgrey", 211, 211, 211),
-        new XColor("lightpink", 255, 182, 193),
-        new XColor("lightpink1", 255, 174, 185),
-        new XColor("lightpink2", 238, 162, 173),
-        new XColor("lightpink3", 205, 140, 149),
-        new XColor("lightpink4", 139, 95, 101),
-        new XColor("lightsalmon", 255, 160, 122),
-        new XColor("lightsalmon1", 255, 160, 122),
-        new XColor("lightsalmon2", 238, 149, 114),
-        new XColor("lightsalmon3", 205, 129, 98),
-        new XColor("lightsalmon4", 139, 87, 66),
-        new XColor("lightseagreen", 32, 178, 170),
-        new XColor("lightskyblue", 135, 206, 250),
-        new XColor("lightskyblue1", 176, 226, 255),
-        new XColor("lightskyblue2", 164, 211, 238),
-        new XColor("lightskyblue3", 141, 182, 205),
-        new XColor("lightskyblue4", 96, 123, 139),
-        new XColor("lightslateblue", 132, 112, 255),
-        new XColor("lightslategray", 119, 136, 153),
-        new XColor("lightslategrey", 119, 136, 153),
-        new XColor("lightsteelblue", 176, 196, 222),
-        new XColor("lightsteelblue1", 202, 225, 255),
-        new XColor("lightsteelblue2", 188, 210, 238),
-        new XColor("lightsteelblue3", 162, 181, 205),
-        new XColor("lightsteelblue4", 110, 123, 139),
-        new XColor("lightyellow", 255, 255, 224),
-        new XColor("lightyellow1", 255, 255, 224),
-        new XColor("lightyellow2", 238, 238, 209),
-        new XColor("lightyellow3", 205, 205, 180),
-        new XColor("lightyellow4", 139, 139, 122),
-        new XColor("lime green", 50, 205, 50),
-        new XColor("limegreen", 50, 205, 50),
-        new XColor("linen", 250, 240, 230),
-        new XColor("magenta", 255, 0, 255),
-        new XColor("magenta1", 255, 0, 255),
-        new XColor("magenta2", 238, 0, 238),
-        new XColor("magenta3", 205, 0, 205),
-        new XColor("magenta4", 139, 0, 139),
-        new XColor("maroon", 176, 48, 96),
-        new XColor("maroon1", 255, 52, 179),
-        new XColor("maroon2", 238, 48, 167),
-        new XColor("maroon3", 205, 41, 144),
-        new XColor("maroon4", 139, 28, 98),
-        new XColor("medium aquamarine", 102, 205, 170),
-        new XColor("medium blue", 0, 0, 205),
-        new XColor("medium orchid", 186, 85, 211),
-        new XColor("medium purple", 147, 112, 219),
-        new XColor("medium sea green", 60, 179, 113),
-        new XColor("medium slate blue", 123, 104, 238),
-        new XColor("medium spring green", 0, 250, 154),
-        new XColor("medium turquoise", 72, 209, 204),
-        new XColor("medium violet red", 199, 21, 133),
-        new XColor("mediumaquamarine", 102, 205, 170),
-        new XColor("mediumblue", 0, 0, 205),
-        new XColor("mediumorchid", 186, 85, 211),
-        new XColor("mediumorchid1", 224, 102, 255),
-        new XColor("mediumorchid2", 209, 95, 238),
-        new XColor("mediumorchid3", 180, 82, 205),
-        new XColor("mediumorchid4", 122, 55, 139),
-        new XColor("mediumpurple", 147, 112, 219),
-        new XColor("mediumpurple1", 171, 130, 255),
-        new XColor("mediumpurple2", 159, 121, 238),
-        new XColor("mediumpurple3", 137, 104, 205),
-        new XColor("mediumpurple4", 93, 71, 139),
-        new XColor("mediumseagreen", 60, 179, 113),
-        new XColor("mediumslateblue", 123, 104, 238),
-        new XColor("mediumspringgreen", 0, 250, 154),
-        new XColor("mediumturquoise", 72, 209, 204),
-        new XColor("mediumvioletred", 199, 21, 133),
-        new XColor("midnight blue", 25, 25, 112),
-        new XColor("midnightblue", 25, 25, 112),
-        new XColor("mint cream", 245, 255, 250),
-        new XColor("mintcream", 245, 255, 250),
-        new XColor("misty rose", 255, 228, 225),
-        new XColor("mistyrose", 255, 228, 225),
-        new XColor("mistyrose1", 255, 228, 225),
-        new XColor("mistyrose2", 238, 213, 210),
-        new XColor("mistyrose3", 205, 183, 181),
-        new XColor("mistyrose4", 139, 125, 123),
-        new XColor("moccasin", 255, 228, 181),
-        new XColor("navajo white", 255, 222, 173),
-        new XColor("navajowhite", 255, 222, 173),
-        new XColor("navajowhite1", 255, 222, 173),
-        new XColor("navajowhite2", 238, 207, 161),
-        new XColor("navajowhite3", 205, 179, 139),
-        new XColor("navajowhite4", 139, 121, 94),
-        new XColor("navy", 0, 0, 128),
-        new XColor("navy blue", 0, 0, 128),
-        new XColor("navyblue", 0, 0, 128),
-        new XColor("old lace", 253, 245, 230),
-        new XColor("oldlace", 253, 245, 230),
-        new XColor("olive drab", 107, 142, 35),
-        new XColor("olivedrab", 107, 142, 35),
-        new XColor("olivedrab1", 192, 255, 62),
-        new XColor("olivedrab2", 179, 238, 58),
-        new XColor("olivedrab3", 154, 205, 50),
-        new XColor("olivedrab4", 105, 139, 34),
-        new XColor("orange", 255, 165, 0),
-        new XColor("orange red", 255, 69, 0),
-        new XColor("orange1", 255, 165, 0),
-        new XColor("orange2", 238, 154, 0),
-        new XColor("orange3", 205, 133, 0),
-        new XColor("orange4", 139, 90, 0),
-        new XColor("orangered", 255, 69, 0),
-        new XColor("orangered1", 255, 69, 0),
-        new XColor("orangered2", 238, 64, 0),
-        new XColor("orangered3", 205, 55, 0),
-        new XColor("orangered4", 139, 37, 0),
-        new XColor("orchid", 218, 112, 214),
-        new XColor("orchid1", 255, 131, 250),
-        new XColor("orchid2", 238, 122, 233),
-        new XColor("orchid3", 205, 105, 201),
-        new XColor("orchid4", 139, 71, 137),
-        new XColor("pale goldenrod", 238, 232, 170),
-        new XColor("pale green", 152, 251, 152),
-        new XColor("pale turquoise", 175, 238, 238),
-        new XColor("pale violet red", 219, 112, 147),
-        new XColor("palegoldenrod", 238, 232, 170),
-        new XColor("palegreen", 152, 251, 152),
-        new XColor("palegreen1", 154, 255, 154),
-        new XColor("palegreen2", 144, 238, 144),
-        new XColor("palegreen3", 124, 205, 124),
-        new XColor("palegreen4", 84, 139, 84),
-        new XColor("paleturquoise", 175, 238, 238),
-        new XColor("paleturquoise1", 187, 255, 255),
-        new XColor("paleturquoise2", 174, 238, 238),
-        new XColor("paleturquoise3", 150, 205, 205),
-        new XColor("paleturquoise4", 102, 139, 139),
-        new XColor("palevioletred", 219, 112, 147),
-        new XColor("palevioletred1", 255, 130, 171),
-        new XColor("palevioletred2", 238, 121, 159),
-        new XColor("palevioletred3", 205, 104, 137),
-        new XColor("palevioletred4", 139, 71, 93),
-        new XColor("papaya whip", 255, 239, 213),
-        new XColor("papayawhip", 255, 239, 213),
-        new XColor("peach puff", 255, 218, 185),
-        new XColor("peachpuff", 255, 218, 185),
-        new XColor("peachpuff1", 255, 218, 185),
-        new XColor("peachpuff2", 238, 203, 173),
-        new XColor("peachpuff3", 205, 175, 149),
-        new XColor("peachpuff4", 139, 119, 101),
-        new XColor("peru", 205, 133, 63),
-        new XColor("pink", 255, 192, 203),
-        new XColor("pink1", 255, 181, 197),
-        new XColor("pink2", 238, 169, 184),
-        new XColor("pink3", 205, 145, 158),
-        new XColor("pink4", 139, 99, 108),
-        new XColor("plum", 221, 160, 221),
-        new XColor("plum1", 255, 187, 255),
-        new XColor("plum2", 238, 174, 238),
-        new XColor("plum3", 205, 150, 205),
-        new XColor("plum4", 139, 102, 139),
-        new XColor("powder blue", 176, 224, 230),
-        new XColor("powderblue", 176, 224, 230),
-        new XColor("purple", 160, 32, 240),
-        new XColor("purple1", 155, 48, 255),
-        new XColor("purple2", 145, 44, 238),
-        new XColor("purple3", 125, 38, 205),
-        new XColor("purple4", 85, 26, 139),
-        new XColor("red", 255, 0, 0),
-        new XColor("red1", 255, 0, 0),
-        new XColor("red2", 238, 0, 0),
-        new XColor("red3", 205, 0, 0),
-        new XColor("red4", 139, 0, 0),
-        new XColor("rosy brown", 188, 143, 143),
-        new XColor("rosybrown", 188, 143, 143),
-        new XColor("rosybrown1", 255, 193, 193),
-        new XColor("rosybrown2", 238, 180, 180),
-        new XColor("rosybrown3", 205, 155, 155),
-        new XColor("rosybrown4", 139, 105, 105),
-        new XColor("royal blue", 65, 105, 225),
-        new XColor("royalblue", 65, 105, 225),
-        new XColor("royalblue1", 72, 118, 255),
-        new XColor("royalblue2", 67, 110, 238),
-        new XColor("royalblue3", 58, 95, 205),
-        new XColor("royalblue4", 39, 64, 139),
-        new XColor("saddle brown", 139, 69, 19),
-        new XColor("saddlebrown", 139, 69, 19),
-        new XColor("salmon", 250, 128, 114),
-        new XColor("salmon1", 255, 140, 105),
-        new XColor("salmon2", 238, 130, 98),
-        new XColor("salmon3", 205, 112, 84),
-        new XColor("salmon4", 139, 76, 57),
-        new XColor("sandy brown", 244, 164, 96),
-        new XColor("sandybrown", 244, 164, 96),
-        new XColor("sea green", 46, 139, 87),
-        new XColor("seagreen", 46, 139, 87),
-        new XColor("seagreen1", 84, 255, 159),
-        new XColor("seagreen2", 78, 238, 148),
-        new XColor("seagreen3", 67, 205, 128),
-        new XColor("seagreen4", 46, 139, 87),
-        new XColor("seashell", 255, 245, 238),
-        new XColor("seashell1", 255, 245, 238),
-        new XColor("seashell2", 238, 229, 222),
-        new XColor("seashell3", 205, 197, 191),
-        new XColor("seashell4", 139, 134, 130),
-        new XColor("sienna", 160, 82, 45),
-        new XColor("sienna1", 255, 130, 71),
-        new XColor("sienna2", 238, 121, 66),
-        new XColor("sienna3", 205, 104, 57),
-        new XColor("sienna4", 139, 71, 38),
-        new XColor("sky blue", 135, 206, 235),
-        new XColor("skyblue", 135, 206, 235),
-        new XColor("skyblue1", 135, 206, 255),
-        new XColor("skyblue2", 126, 192, 238),
-        new XColor("skyblue3", 108, 166, 205),
-        new XColor("skyblue4", 74, 112, 139),
-        new XColor("slate blue", 106, 90, 205),
-        new XColor("slate gray", 112, 128, 144),
-        new XColor("slate grey", 112, 128, 144),
-        new XColor("slateblue", 106, 90, 205),
-        new XColor("slateblue1", 131, 111, 255),
-        new XColor("slateblue2", 122, 103, 238),
-        new XColor("slateblue3", 105, 89, 205),
-        new XColor("slateblue4", 71, 60, 139),
-        new XColor("slategray", 112, 128, 144),
-        new XColor("slategray1", 198, 226, 255),
-        new XColor("slategray2", 185, 211, 238),
-        new XColor("slategray3", 159, 182, 205),
-        new XColor("slategray4", 108, 123, 139),
-        new XColor("slategrey", 112, 128, 144),
-        new XColor("snow", 255, 250, 250),
-        new XColor("snow1", 255, 250, 250),
-        new XColor("snow2", 238, 233, 233),
-        new XColor("snow3", 205, 201, 201),
-        new XColor("snow4", 139, 137, 137),
-        new XColor("spring green", 0, 255, 127),
-        new XColor("springgreen", 0, 255, 127),
-        new XColor("springgreen1", 0, 255, 127),
-        new XColor("springgreen2", 0, 238, 118),
-        new XColor("springgreen3", 0, 205, 102),
-        new XColor("springgreen4", 0, 139, 69),
-        new XColor("steel blue", 70, 130, 180),
-        new XColor("steelblue", 70, 130, 180),
-        new XColor("steelblue1", 99, 184, 255),
-        new XColor("steelblue2", 92, 172, 238),
-        new XColor("steelblue3", 79, 148, 205),
-        new XColor("steelblue4", 54, 100, 139),
-        new XColor("tan", 210, 180, 140),
-        new XColor("tan1", 255, 165, 79),
-        new XColor("tan2", 238, 154, 73),
-        new XColor("tan3", 205, 133, 63),
-        new XColor("tan4", 139, 90, 43),
-        new XColor("thistle", 216, 191, 216),
-        new XColor("thistle1", 255, 225, 255),
-        new XColor("thistle2", 238, 210, 238),
-        new XColor("thistle3", 205, 181, 205),
-        new XColor("thistle4", 139, 123, 139),
-        new XColor("tomato", 255, 99, 71),
-        new XColor("tomato1", 255, 99, 71),
-        new XColor("tomato2", 238, 92, 66),
-        new XColor("tomato3", 205, 79, 57),
-        new XColor("tomato4", 139, 54, 38),
-        new XColor("turquoise", 64, 224, 208),
-        new XColor("turquoise1", 0, 245, 255),
-        new XColor("turquoise2", 0, 229, 238),
-        new XColor("turquoise3", 0, 197, 205),
-        new XColor("turquoise4", 0, 134, 139),
-        new XColor("violet", 238, 130, 238),
-        new XColor("violet red", 208, 32, 144),
-        new XColor("violetred", 208, 32, 144),
-        new XColor("violetred1", 255, 62, 150),
-        new XColor("violetred2", 238, 58, 140),
-        new XColor("violetred3", 205, 50, 120),
-        new XColor("violetred4", 139, 34, 82),
-        new XColor("wheat", 245, 222, 179),
-        new XColor("wheat1", 255, 231, 186),
-        new XColor("wheat2", 238, 216, 174),
-        new XColor("wheat3", 205, 186, 150),
-        new XColor("wheat4", 139, 126, 102),
-        new XColor("white", 255, 255, 255),
-        new XColor("white smoke", 245, 245, 245),
-        new XColor("whitesmoke", 245, 245, 245),
-        new XColor("yellow", 255, 255, 0),
-        new XColor("yellow green", 154, 205, 50),
-        new XColor("yellow1", 255, 255, 0),
-        new XColor("yellow2", 238, 238, 0),
-        new XColor("yellow3", 205, 205, 0),
-        new XColor("yellow4", 139, 139, 0),
-        new XColor("yellowgreen", 154, 205, 5)
-    };
-
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/icons/Directory.gif b/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/icons/Directory.gif
deleted file mode 100755
index fa34e2f..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/icons/Directory.gif
+++ /dev/null
Binary files differ
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/icons/File.gif b/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/icons/File.gif
deleted file mode 100755
index 800b562..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/icons/File.gif
+++ /dev/null
Binary files differ
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/icons/image-delayed.png b/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/icons/image-delayed.png
deleted file mode 100755
index 43e0342..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/icons/image-delayed.png
+++ /dev/null
Binary files differ
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/icons/image-failed.png b/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/icons/image-failed.png
deleted file mode 100755
index 1584329..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/icons/image-failed.png
+++ /dev/null
Binary files differ
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/resources/gtk.properties b/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/resources/gtk.properties
deleted file mode 100755
index dc84d13..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/resources/gtk.properties
+++ /dev/null
@@ -1,54 +0,0 @@
-# Refer to the note in basic.properties for a description as to what
-# the mnemonics correspond to and how to calculate them.
-
-
-
-# GTK specific properties
-
-# GTK color chooser properties:
-GTKColorChooserPanel.textAndMnemonic=&GTK Color Chooser
-# mnemonic as a VK_ constant
-
-GTKColorChooserPanel.hue.textAndMnemonic=&Hue:
-
-GTKColorChooserPanel.red.textAndMnemonic=R&ed:
-
-GTKColorChooserPanel.saturation.textAndMnemonic=&Saturation:
-
-GTKColorChooserPanel.green.textAndMnemonic=&Green:
-
-GTKColorChooserPanel.value.textAndMnemonic=&Value:
-
-GTKColorChooserPanel.blue.textAndMnemonic=&Blue:
-
-GTKColorChooserPanel.color.textAndMnemonic=Color &Name:
-
-
-
-############ FILE CHOOSER STRINGS #############
-
-FileChooser.acceptAllFileFilter.textAndMnemonic=All Files
-FileChooser.newFolderButton.textAndMnemonic=&New Folder
-FileChooser.newFolderDialog.textAndMnemonic=Folder name:
-FileChooser.newFolderNoDirectoryErrorTitle.textAndMnemonic=Error
-FileChooser.newFolderNoDirectoryError.textAndMnemonic=Error creating directory "{0}": No such file or directory
-FileChooser.deleteFileButton.textAndMnemonic=De&lete File
-FileChooser.renameFileButton.textAndMnemonic=&Rename File
-FileChooser.cancelButton.textAndMnemonic=&Cancel
-FileChooser.saveButton.textAndMnemonic=&OK
-FileChooser.openButton.textAndMnemonic=&OK
-FileChooser.saveDialogTitle.textAndMnemonic=Save
-FileChooser.openDialogTitle.textAndMnemonic=Open
-FileChooser.pathLabel.textAndMnemonic=&Selection:
-FileChooser.filterLabel.textAndMnemonic=Filter:
-FileChooser.foldersLabel.textAndMnemonic=Fol&ders
-FileChooser.filesLabel.textAndMnemonic=&Files
-
-FileChooser.cancelButtonToolTip.textAndMnemonic=Abort file chooser dialog.
-FileChooser.saveButtonToolTip.textAndMnemonic=Save selected file.
-FileChooser.openButtonToolTip.textAndMnemonic=Open selected file.
-
-FileChooser.renameFileDialog.textAndMnemonic=Rename file "{0}" to
-FileChooser.renameFileError.titleAndMnemonic=Error
-FileChooser.renameFileError.textAndMnemonic=Error renaming file "{0}" to "{1}"
-
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/resources/gtk_de.properties b/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/resources/gtk_de.properties
deleted file mode 100755
index c4eeded..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/resources/gtk_de.properties
+++ /dev/null
@@ -1,54 +0,0 @@
-# Refer to the note in basic.properties for a description as to what
-# the mnemonics correspond to and how to calculate them.
-
-
-
-# GTK specific properties
-
-# GTK color chooser properties:
-GTKColorChooserPanel.textAndMnemonic=&GTK-Farbauswahl
-# mnemonic as a VK_ constant
-
-GTKColorChooserPanel.hue.textAndMnemonic=&Farbton:
-
-GTKColorChooserPanel.red.textAndMnemonic=R&ot:
-
-GTKColorChooserPanel.saturation.textAndMnemonic=&S\u00E4ttigung:
-
-GTKColorChooserPanel.green.textAndMnemonic=&Gr\u00FCn:
-
-GTKColorChooserPanel.value.textAndMnemonic=&Wert:
-
-GTKColorChooserPanel.blue.textAndMnemonic=&Blau:
-
-GTKColorChooserPanel.color.textAndMnemonic=Farb&name:
-
-
-
-############ FILE CHOOSER STRINGS #############
-
-FileChooser.acceptAllFileFilter.textAndMnemonic=Alle Dateien
-FileChooser.newFolderButton.textAndMnemonic=&Neuer Ordner
-FileChooser.newFolderDialog.textAndMnemonic=Ordnername:
-FileChooser.newFolderNoDirectoryErrorTitle.textAndMnemonic=Fehler
-FileChooser.newFolderNoDirectoryError.textAndMnemonic=Fehler beim Erstellen von Verzeichnis "{0}": Datei oder Verzeichnis nicht vorhanden
-FileChooser.deleteFileButton.textAndMnemonic=Datei &l\u00F6schen
-FileChooser.renameFileButton.textAndMnemonic=Datei &umbenennen
-FileChooser.cancelButton.textAndMnemonic=&Abbrechen
-FileChooser.saveButton.textAndMnemonic=&OK
-FileChooser.openButton.textAndMnemonic=&OK
-FileChooser.saveDialogTitle.textAndMnemonic=Speichern
-FileChooser.openDialogTitle.textAndMnemonic=\u00D6ffnen
-FileChooser.pathLabel.textAndMnemonic=Aus&wahl:
-FileChooser.filterLabel.textAndMnemonic=Filter:
-FileChooser.foldersLabel.textAndMnemonic=Or&dner
-FileChooser.filesLabel.textAndMnemonic=&Dateien
-
-FileChooser.cancelButtonToolTip.textAndMnemonic=Dialogfeld f\u00FCr Dateiauswahl schlie\u00DFen.
-FileChooser.saveButtonToolTip.textAndMnemonic=Ausgew\u00E4hlte Datei speichern.
-FileChooser.openButtonToolTip.textAndMnemonic=Ausgew\u00E4hlte Datei \u00F6ffnen.
-
-FileChooser.renameFileDialog.textAndMnemonic=Datei "{0}" umbenennen in
-FileChooser.renameFileError.titleAndMnemonic=Fehler
-FileChooser.renameFileError.textAndMnemonic=Fehler beim Umbenennen der Datei "{0}" in "{1}"
-
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/resources/gtk_es.properties b/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/resources/gtk_es.properties
deleted file mode 100755
index 412938e..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/resources/gtk_es.properties
+++ /dev/null
@@ -1,54 +0,0 @@
-# Refer to the note in basic.properties for a description as to what
-# the mnemonics correspond to and how to calculate them.
-
-
-
-# GTK specific properties
-
-# GTK color chooser properties:
-GTKColorChooserPanel.textAndMnemonic=Selector de Color para &GTK
-# mnemonic as a VK_ constant
-
-GTKColorChooserPanel.hue.textAndMnemonic=&Mat:
-
-GTKColorChooserPanel.red.textAndMnemonic=Ro&jo:
-
-GTKColorChooserPanel.saturation.textAndMnemonic=&Saturaci\u00F3n:
-
-GTKColorChooserPanel.green.textAndMnemonic=&Verde:
-
-GTKColorChooserPanel.value.textAndMnemonic=&Valor:
-
-GTKColorChooserPanel.blue.textAndMnemonic=&Azul:
-
-GTKColorChooserPanel.color.textAndMnemonic=&Nombre del Color:
-
-
-
-############ FILE CHOOSER STRINGS #############
-
-FileChooser.acceptAllFileFilter.textAndMnemonic=Todos los Archivos
-FileChooser.newFolderButton.textAndMnemonic=&Nueva Carpeta
-FileChooser.newFolderDialog.textAndMnemonic=Nombre de la Carpeta:
-FileChooser.newFolderNoDirectoryErrorTitle.textAndMnemonic=Error
-FileChooser.newFolderNoDirectoryError.textAndMnemonic=Error al crear el directorio "{0}": no existe dicho archivo o directorio
-FileChooser.deleteFileButton.textAndMnemonic=Su&primir Archivo
-FileChooser.renameFileButton.textAndMnemonic=Cambiar Nomb&re de Archivo
-FileChooser.cancelButton.textAndMnemonic=&Cancelar
-FileChooser.saveButton.textAndMnemonic=&Aceptar
-FileChooser.openButton.textAndMnemonic=&Aceptar
-FileChooser.saveDialogTitle.textAndMnemonic=Guardar
-FileChooser.openDialogTitle.textAndMnemonic=Abrir
-FileChooser.pathLabel.textAndMnemonic=&Selecci\u00F3n:
-FileChooser.filterLabel.textAndMnemonic=Filtro:
-FileChooser.foldersLabel.textAndMnemonic=Carpe&tas
-FileChooser.filesLabel.textAndMnemonic=&Archivos
-
-FileChooser.cancelButtonToolTip.textAndMnemonic=Abortar cuadro de di\u00E1logo del selector de archivos.
-FileChooser.saveButtonToolTip.textAndMnemonic=Guardar el archivo seleccionado.
-FileChooser.openButtonToolTip.textAndMnemonic=Abrir el archivo seleccionado.
-
-FileChooser.renameFileDialog.textAndMnemonic=Cambiar el nombre del archivo "{0}" por
-FileChooser.renameFileError.titleAndMnemonic=Error
-FileChooser.renameFileError.textAndMnemonic=Error al cambiar el nombre del archivo "{0}" a "{1}"
-
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/resources/gtk_fr.properties b/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/resources/gtk_fr.properties
deleted file mode 100755
index 380f3d4..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/resources/gtk_fr.properties
+++ /dev/null
@@ -1,54 +0,0 @@
-# Refer to the note in basic.properties for a description as to what
-# the mnemonics correspond to and how to calculate them.
-
-
-
-# GTK specific properties
-
-# GTK color chooser properties:
-GTKColorChooserPanel.textAndMnemonic=S\u00E9lecteur de couleurs &GTK
-# mnemonic as a VK_ constant
-
-GTKColorChooserPanel.hue.textAndMnemonic=&Teinte :
-
-GTKColorChooserPanel.red.textAndMnemonic=Roug&e\u00A0:
-
-GTKColorChooserPanel.saturation.textAndMnemonic=&Saturation :
-
-GTKColorChooserPanel.green.textAndMnemonic=&Vert :
-
-GTKColorChooserPanel.value.textAndMnemonic=&Valeur :
-
-GTKColorChooserPanel.blue.textAndMnemonic=&Bleu :
-
-GTKColorChooserPanel.color.textAndMnemonic=&Nom de couleur :
-
-
-
-############ FILE CHOOSER STRINGS #############
-
-FileChooser.acceptAllFileFilter.textAndMnemonic=Tous les fichiers
-FileChooser.newFolderButton.textAndMnemonic=&Nouveau dossier
-FileChooser.newFolderDialog.textAndMnemonic=Nom du dossier :
-FileChooser.newFolderNoDirectoryErrorTitle.textAndMnemonic=Erreur
-FileChooser.newFolderNoDirectoryError.textAndMnemonic=Erreur lors de la cr\u00E9ation du r\u00E9pertoire "{0}" : ce fichier ou r\u00E9pertoire n''existe pas
-FileChooser.deleteFileButton.textAndMnemonic=Supprimer &le fichier
-FileChooser.renameFileButton.textAndMnemonic=&Renommer le fichier
-FileChooser.cancelButton.textAndMnemonic=&Annuler
-FileChooser.saveButton.textAndMnemonic=&OK
-FileChooser.openButton.textAndMnemonic=&OK
-FileChooser.saveDialogTitle.textAndMnemonic=Enregistrer
-FileChooser.openDialogTitle.textAndMnemonic=Ouvrir
-FileChooser.pathLabel.textAndMnemonic=&S\u00E9lection :
-FileChooser.filterLabel.textAndMnemonic=Filtre :
-FileChooser.foldersLabel.textAndMnemonic=&Dossiers
-FileChooser.filesLabel.textAndMnemonic=&Fichiers
-
-FileChooser.cancelButtonToolTip.textAndMnemonic=Ferme la bo\u00EEte de dialogue du s\u00E9lecteur de fichiers.
-FileChooser.saveButtonToolTip.textAndMnemonic=Enregistre le fichier s\u00E9lectionn\u00E9.
-FileChooser.openButtonToolTip.textAndMnemonic=Ouvre le fichier s\u00E9lectionn\u00E9.
-
-FileChooser.renameFileDialog.textAndMnemonic=Renomme le fichier "{0}" en
-FileChooser.renameFileError.titleAndMnemonic=Erreur
-FileChooser.renameFileError.textAndMnemonic=Erreur lors du changement de nom du fichier "{0}" en "{1}"
-
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/resources/gtk_it.properties b/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/resources/gtk_it.properties
deleted file mode 100755
index c629de5..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/resources/gtk_it.properties
+++ /dev/null
@@ -1,54 +0,0 @@
-# Refer to the note in basic.properties for a description as to what
-# the mnemonics correspond to and how to calculate them.
-
-
-
-# GTK specific properties
-
-# GTK color chooser properties:
-GTKColorChooserPanel.textAndMnemonic=Selezione colore &GTK
-# mnemonic as a VK_ constant
-
-GTKColorChooserPanel.hue.textAndMnemonic=&Ton.:
-
-GTKColorChooserPanel.red.textAndMnemonic=R&osso:
-
-GTKColorChooserPanel.saturation.textAndMnemonic=&Saturazione:
-
-GTKColorChooserPanel.green.textAndMnemonic=&Verde:
-
-GTKColorChooserPanel.value.textAndMnemonic=&Valore:
-
-GTKColorChooserPanel.blue.textAndMnemonic=&Blu:
-
-GTKColorChooserPanel.color.textAndMnemonic=&Nome colore:
-
-
-
-############ FILE CHOOSER STRINGS #############
-
-FileChooser.acceptAllFileFilter.textAndMnemonic=Tutti i file
-FileChooser.newFolderButton.textAndMnemonic=&Nuova cartella
-FileChooser.newFolderDialog.textAndMnemonic=Nome della cartella:
-FileChooser.newFolderNoDirectoryErrorTitle.textAndMnemonic=Errore
-FileChooser.newFolderNoDirectoryError.textAndMnemonic=Errore durante la creazione della directory "{0}": file o directory inesistente
-FileChooser.deleteFileButton.textAndMnemonic=E&limina file
-FileChooser.renameFileButton.textAndMnemonic=&Rinomina file
-FileChooser.cancelButton.textAndMnemonic=&Annulla
-FileChooser.saveButton.textAndMnemonic=&OK
-FileChooser.openButton.textAndMnemonic=&OK
-FileChooser.saveDialogTitle.textAndMnemonic=Salva
-FileChooser.openDialogTitle.textAndMnemonic=Apri
-FileChooser.pathLabel.textAndMnemonic=&Selezione:
-FileChooser.filterLabel.textAndMnemonic=Filtro:
-FileChooser.foldersLabel.textAndMnemonic=Car&telle
-FileChooser.filesLabel.textAndMnemonic=&File
-
-FileChooser.cancelButtonToolTip.textAndMnemonic=Chiude la finestra di dialogo di selezione file.
-FileChooser.saveButtonToolTip.textAndMnemonic=Salva il file selezionato.
-FileChooser.openButtonToolTip.textAndMnemonic=Apre il file selezionato.
-
-FileChooser.renameFileDialog.textAndMnemonic=Rinomina file "{0}" in
-FileChooser.renameFileError.titleAndMnemonic=Errore
-FileChooser.renameFileError.textAndMnemonic=Errore durante la ridenominazione del file "{0}" in "{1}"
-
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/resources/gtk_ja.properties b/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/resources/gtk_ja.properties
deleted file mode 100755
index 5f4343e..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/resources/gtk_ja.properties
+++ /dev/null
@@ -1,54 +0,0 @@
-# Refer to the note in basic.properties for a description as to what
-# the mnemonics correspond to and how to calculate them.
-
-
-
-# GTK specific properties
-
-# GTK color chooser properties:
-GTKColorChooserPanel.textAndMnemonic=GTK\u30AB\u30E9\u30FC\u30FB\u30C1\u30E5\u30FC\u30B6(&G)
-# mnemonic as a VK_ constant
-
-GTKColorChooserPanel.hue.textAndMnemonic=\u8272\u76F8(&H):
-
-GTKColorChooserPanel.red.textAndMnemonic=\u8D64(&E):
-
-GTKColorChooserPanel.saturation.textAndMnemonic=\u5F69\u5EA6(&S):
-
-GTKColorChooserPanel.green.textAndMnemonic=\u7DD1(&G):
-
-GTKColorChooserPanel.value.textAndMnemonic=\u5024(&V):
-
-GTKColorChooserPanel.blue.textAndMnemonic=\u9752(&B):
-
-GTKColorChooserPanel.color.textAndMnemonic=\u8272\u540D(&N):
-
-
-
-############ FILE CHOOSER STRINGS #############
-
-FileChooser.acceptAllFileFilter.textAndMnemonic=\u3059\u3079\u3066\u306E\u30D5\u30A1\u30A4\u30EB
-FileChooser.newFolderButton.textAndMnemonic=\u65B0\u898F\u30D5\u30A9\u30EB\u30C0(&N)
-FileChooser.newFolderDialog.textAndMnemonic=\u30D5\u30A9\u30EB\u30C0\u540D:
-FileChooser.newFolderNoDirectoryErrorTitle.textAndMnemonic=\u30A8\u30E9\u30FC
-FileChooser.newFolderNoDirectoryError.textAndMnemonic=\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA"{0}"\u306E\u4F5C\u6210\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F: \u3053\u306E\u30D5\u30A1\u30A4\u30EB\u307E\u305F\u306F\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u306F\u5B58\u5728\u3057\u307E\u305B\u3093
-FileChooser.deleteFileButton.textAndMnemonic=\u30D5\u30A1\u30A4\u30EB\u306E\u524A\u9664(&L)
-FileChooser.renameFileButton.textAndMnemonic=\u30D5\u30A1\u30A4\u30EB\u306E\u540D\u524D\u5909\u66F4(&R)
-FileChooser.cancelButton.textAndMnemonic=\u53D6\u6D88(&C)
-FileChooser.saveButton.textAndMnemonic=OK(&O)
-FileChooser.openButton.textAndMnemonic=OK(&O)
-FileChooser.saveDialogTitle.textAndMnemonic=\u4FDD\u5B58
-FileChooser.openDialogTitle.textAndMnemonic=\u958B\u304F
-FileChooser.pathLabel.textAndMnemonic=\u9078\u629E(&S):
-FileChooser.filterLabel.textAndMnemonic=\u30D5\u30A3\u30EB\u30BF:
-FileChooser.foldersLabel.textAndMnemonic=\u30D5\u30A9\u30EB\u30C0(&D)
-FileChooser.filesLabel.textAndMnemonic=\u30D5\u30A1\u30A4\u30EB(&F)
-
-FileChooser.cancelButtonToolTip.textAndMnemonic=\u30D5\u30A1\u30A4\u30EB\u30FB\u30C1\u30E5\u30FC\u30B6\u30FB\u30C0\u30A4\u30A2\u30ED\u30B0\u3092\u7D42\u4E86\u3057\u307E\u3059\u3002
-FileChooser.saveButtonToolTip.textAndMnemonic=\u9078\u629E\u3057\u305F\u30D5\u30A1\u30A4\u30EB\u3092\u4FDD\u5B58\u3057\u307E\u3059\u3002
-FileChooser.openButtonToolTip.textAndMnemonic=\u9078\u629E\u3057\u305F\u30D5\u30A1\u30A4\u30EB\u3092\u958B\u304D\u307E\u3059\u3002
-
-FileChooser.renameFileDialog.textAndMnemonic=\u30D5\u30A1\u30A4\u30EB"{0}"\u3092\u6B21\u306E\u540D\u524D\u306B\u5909\u66F4:
-FileChooser.renameFileError.titleAndMnemonic=\u30A8\u30E9\u30FC
-FileChooser.renameFileError.textAndMnemonic=\u30D5\u30A1\u30A4\u30EB"{0}"\u306E"{1}"\u3078\u306E\u5909\u66F4\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F
-
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/resources/gtk_ko.properties b/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/resources/gtk_ko.properties
deleted file mode 100755
index c3696a9..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/resources/gtk_ko.properties
+++ /dev/null
@@ -1,54 +0,0 @@
-# Refer to the note in basic.properties for a description as to what
-# the mnemonics correspond to and how to calculate them.
-
-
-
-# GTK specific properties
-
-# GTK color chooser properties:
-GTKColorChooserPanel.textAndMnemonic=GTK \uC0C9\uC0C1 \uC120\uD0DD\uAE30(&G)
-# mnemonic as a VK_ constant
-
-GTKColorChooserPanel.hue.textAndMnemonic=\uC0C9\uC870(&H):
-
-GTKColorChooserPanel.red.textAndMnemonic=\uBE68\uAC04\uC0C9(&E):
-
-GTKColorChooserPanel.saturation.textAndMnemonic=\uCC44\uB3C4(&S):
-
-GTKColorChooserPanel.green.textAndMnemonic=\uB179\uC0C9(&G):
-
-GTKColorChooserPanel.value.textAndMnemonic=\uAC12(&V):
-
-GTKColorChooserPanel.blue.textAndMnemonic=\uD30C\uB780\uC0C9(&B):
-
-GTKColorChooserPanel.color.textAndMnemonic=\uC0C9\uC0C1 \uC774\uB984(&N):
-
-
-
-############ FILE CHOOSER STRINGS #############
-
-FileChooser.acceptAllFileFilter.textAndMnemonic=\uBAA8\uB4E0 \uD30C\uC77C
-FileChooser.newFolderButton.textAndMnemonic=\uC0C8 \uD3F4\uB354(&N)
-FileChooser.newFolderDialog.textAndMnemonic=\uD3F4\uB354 \uC774\uB984:
-FileChooser.newFolderNoDirectoryErrorTitle.textAndMnemonic=\uC624\uB958
-FileChooser.newFolderNoDirectoryError.textAndMnemonic="{0}" \uB514\uB809\uD1A0\uB9AC\uB97C \uC0DD\uC131\uD558\uB294 \uC911 \uC624\uB958 \uBC1C\uC0DD: \uD574\uB2F9 \uD30C\uC77C \uB610\uB294 \uB514\uB809\uD1A0\uB9AC\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4.
-FileChooser.deleteFileButton.textAndMnemonic=\uD30C\uC77C \uC0AD\uC81C(&L)
-FileChooser.renameFileButton.textAndMnemonic=\uD30C\uC77C \uC774\uB984 \uBC14\uAFB8\uAE30(&R)
-FileChooser.cancelButton.textAndMnemonic=\uCDE8\uC18C(&C)
-FileChooser.saveButton.textAndMnemonic=\uD655\uC778(&O)
-FileChooser.openButton.textAndMnemonic=\uD655\uC778(&O)
-FileChooser.saveDialogTitle.textAndMnemonic=\uC800\uC7A5
-FileChooser.openDialogTitle.textAndMnemonic=\uC5F4\uAE30
-FileChooser.pathLabel.textAndMnemonic=\uC120\uD0DD \uC0AC\uD56D(&S):
-FileChooser.filterLabel.textAndMnemonic=\uD544\uD130:
-FileChooser.foldersLabel.textAndMnemonic=\uD3F4\uB354(&D)
-FileChooser.filesLabel.textAndMnemonic=\uD30C\uC77C(&F)
-
-FileChooser.cancelButtonToolTip.textAndMnemonic=\uD30C\uC77C \uC120\uD0DD\uAE30 \uB300\uD654\uC0C1\uC790\uB97C \uC911\uB2E8\uD569\uB2C8\uB2E4.
-FileChooser.saveButtonToolTip.textAndMnemonic=\uC120\uD0DD\uB41C \uD30C\uC77C\uC744 \uC800\uC7A5\uD569\uB2C8\uB2E4.
-FileChooser.openButtonToolTip.textAndMnemonic=\uC120\uD0DD\uB41C \uD30C\uC77C\uC744 \uC5FD\uB2C8\uB2E4.
-
-FileChooser.renameFileDialog.textAndMnemonic="{0}" \uD30C\uC77C\uC758 \uC774\uB984 \uBC14\uAFB8\uAE30
-FileChooser.renameFileError.titleAndMnemonic=\uC624\uB958
-FileChooser.renameFileError.textAndMnemonic="{0}" \uD30C\uC77C\uC758 \uC774\uB984\uC744 "{1}"(\uC73C)\uB85C \uBC14\uAFB8\uB294 \uC911 \uC624\uB958\uAC00 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4.
-
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/resources/gtk_pt_BR.properties b/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/resources/gtk_pt_BR.properties
deleted file mode 100755
index 383fd9f..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/resources/gtk_pt_BR.properties
+++ /dev/null
@@ -1,54 +0,0 @@
-# Refer to the note in basic.properties for a description as to what
-# the mnemonics correspond to and how to calculate them.
-
-
-
-# GTK specific properties
-
-# GTK color chooser properties:
-GTKColorChooserPanel.textAndMnemonic=Seletor de Cores do &GTK
-# mnemonic as a VK_ constant
-
-GTKColorChooserPanel.hue.textAndMnemonic=&Matiz:
-
-GTKColorChooserPanel.red.textAndMnemonic=V&ermelho:
-
-GTKColorChooserPanel.saturation.textAndMnemonic=&Satura\u00E7\u00E3o:
-
-GTKColorChooserPanel.green.textAndMnemonic=&Verde:
-
-GTKColorChooserPanel.value.textAndMnemonic=&Valor:
-
-GTKColorChooserPanel.blue.textAndMnemonic=&Azul:
-
-GTKColorChooserPanel.color.textAndMnemonic=&Nome da Cor:
-
-
-
-############ FILE CHOOSER STRINGS #############
-
-FileChooser.acceptAllFileFilter.textAndMnemonic=Todos os Arquivos
-FileChooser.newFolderButton.textAndMnemonic=&Nova Pasta
-FileChooser.newFolderDialog.textAndMnemonic=Nome da pasta:
-FileChooser.newFolderNoDirectoryErrorTitle.textAndMnemonic=Erro
-FileChooser.newFolderNoDirectoryError.textAndMnemonic=Erro ao criar o diret\u00F3rio "{0}": N\u00E3o h\u00E1 arquivo ou diret\u00F3rio
-FileChooser.deleteFileButton.textAndMnemonic=De&letar Arquivo
-FileChooser.renameFileButton.textAndMnemonic=&Renomear Arquivo
-FileChooser.cancelButton.textAndMnemonic=&Cancelar
-FileChooser.saveButton.textAndMnemonic=&OK
-FileChooser.openButton.textAndMnemonic=&OK
-FileChooser.saveDialogTitle.textAndMnemonic=Salvar
-FileChooser.openDialogTitle.textAndMnemonic=Abrir
-FileChooser.pathLabel.textAndMnemonic=&Sele\u00E7\u00E3o:
-FileChooser.filterLabel.textAndMnemonic=Filtro:
-FileChooser.foldersLabel.textAndMnemonic=&Pastas
-FileChooser.filesLabel.textAndMnemonic=&Arquivos
-
-FileChooser.cancelButtonToolTip.textAndMnemonic=Abortar caixa de di\u00E1logo do seletor de arquivos.
-FileChooser.saveButtonToolTip.textAndMnemonic=Salvar arquivo selecionado.
-FileChooser.openButtonToolTip.textAndMnemonic=Abrir arquivo selecionado.
-
-FileChooser.renameFileDialog.textAndMnemonic=Renomear arquivo "{0}" por
-FileChooser.renameFileError.titleAndMnemonic=Erro
-FileChooser.renameFileError.textAndMnemonic=Erro ao renomear o arquivo "{0}" por "{1}"
-
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/resources/gtk_sv.properties b/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/resources/gtk_sv.properties
deleted file mode 100755
index 1737b57..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/resources/gtk_sv.properties
+++ /dev/null
@@ -1,54 +0,0 @@
-# Refer to the note in basic.properties for a description as to what
-# the mnemonics correspond to and how to calculate them.
-
-
-
-# GTK specific properties
-
-# GTK color chooser properties:
-GTKColorChooserPanel.textAndMnemonic=&GTK-f\u00E4rgv\u00E4ljaren
-# mnemonic as a VK_ constant
-
-GTKColorChooserPanel.hue.textAndMnemonic=&Nyans:
-
-GTKColorChooserPanel.red.textAndMnemonic=R&\u00F6d:
-
-GTKColorChooserPanel.saturation.textAndMnemonic=&M\u00E4ttnad:
-
-GTKColorChooserPanel.green.textAndMnemonic=&Gr\u00F6n:
-
-GTKColorChooserPanel.value.textAndMnemonic=&V\u00E4rde:
-
-GTKColorChooserPanel.blue.textAndMnemonic=&Bl\u00E5:
-
-GTKColorChooserPanel.color.textAndMnemonic=F\u00E4rg&namn:
-
-
-
-############ FILE CHOOSER STRINGS #############
-
-FileChooser.acceptAllFileFilter.textAndMnemonic=Alla filer
-FileChooser.newFolderButton.textAndMnemonic=&Ny mapp
-FileChooser.newFolderDialog.textAndMnemonic=Mapp:
-FileChooser.newFolderNoDirectoryErrorTitle.textAndMnemonic=Fel
-FileChooser.newFolderNoDirectoryError.textAndMnemonic=Ett fel intr\u00E4ffade vid f\u00F6rs\u00F6k att skapa katalogen "{0}": Filen eller katalogen finns inte
-FileChooser.deleteFileButton.textAndMnemonic=Ta &bort fil
-FileChooser.renameFileButton.textAndMnemonic=&\u00C4ndra namn p\u00E5 filen
-FileChooser.cancelButton.textAndMnemonic=&Avbryt
-FileChooser.saveButton.textAndMnemonic=&OK
-FileChooser.openButton.textAndMnemonic=&OK
-FileChooser.saveDialogTitle.textAndMnemonic=Spara
-FileChooser.openDialogTitle.textAndMnemonic=\u00D6ppna
-FileChooser.pathLabel.textAndMnemonic=&Urval:
-FileChooser.filterLabel.textAndMnemonic=Filter:
-FileChooser.foldersLabel.textAndMnemonic=Map&par
-FileChooser.filesLabel.textAndMnemonic=&Filer
-
-FileChooser.cancelButtonToolTip.textAndMnemonic=Avbryt dialogrutan Filv\u00E4ljare.
-FileChooser.saveButtonToolTip.textAndMnemonic=Spara vald fil.
-FileChooser.openButtonToolTip.textAndMnemonic=\u00D6ppna vald fil.
-
-FileChooser.renameFileDialog.textAndMnemonic=Namn\u00E4ndra fil "{0}" till
-FileChooser.renameFileError.titleAndMnemonic=Fel
-FileChooser.renameFileError.textAndMnemonic=Fel vid namn\u00E4ndring av fil "{0}" till "{1}"
-
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/resources/gtk_zh_CN.properties b/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/resources/gtk_zh_CN.properties
deleted file mode 100755
index 9e00fe1..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/resources/gtk_zh_CN.properties
+++ /dev/null
@@ -1,54 +0,0 @@
-# Refer to the note in basic.properties for a description as to what
-# the mnemonics correspond to and how to calculate them.
-
-
-
-# GTK specific properties
-
-# GTK color chooser properties:
-GTKColorChooserPanel.textAndMnemonic=GTK \u989C\u8272\u9009\u62E9\u5668(&G)
-# mnemonic as a VK_ constant
-
-GTKColorChooserPanel.hue.textAndMnemonic=\u8272\u8C03(&H):
-
-GTKColorChooserPanel.red.textAndMnemonic=\u7EA2\u8272(&E):
-
-GTKColorChooserPanel.saturation.textAndMnemonic=\u9971\u548C\u5EA6(&S):
-
-GTKColorChooserPanel.green.textAndMnemonic=\u7EFF\u8272(&G):
-
-GTKColorChooserPanel.value.textAndMnemonic=\u503C(&V):
-
-GTKColorChooserPanel.blue.textAndMnemonic=\u84DD\u8272(&B):
-
-GTKColorChooserPanel.color.textAndMnemonic=\u989C\u8272\u540D(&N):
-
-
-
-############ FILE CHOOSER STRINGS #############
-
-FileChooser.acceptAllFileFilter.textAndMnemonic=\u6240\u6709\u6587\u4EF6
-FileChooser.newFolderButton.textAndMnemonic=\u65B0\u6587\u4EF6\u5939(&N)
-FileChooser.newFolderDialog.textAndMnemonic=\u6587\u4EF6\u5939\u540D: 
-FileChooser.newFolderNoDirectoryErrorTitle.textAndMnemonic=\u9519\u8BEF
-FileChooser.newFolderNoDirectoryError.textAndMnemonic=\u521B\u5EFA\u76EE\u5F55 "{0}" \u65F6\u51FA\u9519: \u6CA1\u6709\u6B64\u7C7B\u6587\u4EF6\u6216\u76EE\u5F55
-FileChooser.deleteFileButton.textAndMnemonic=\u5220\u9664\u6587\u4EF6(&L)
-FileChooser.renameFileButton.textAndMnemonic=\u91CD\u547D\u540D\u6587\u4EF6(&R)
-FileChooser.cancelButton.textAndMnemonic=\u53D6\u6D88(&C)
-FileChooser.saveButton.textAndMnemonic=\u786E\u5B9A(&O)
-FileChooser.openButton.textAndMnemonic=\u786E\u5B9A(&O)
-FileChooser.saveDialogTitle.textAndMnemonic=\u4FDD\u5B58
-FileChooser.openDialogTitle.textAndMnemonic=\u6253\u5F00
-FileChooser.pathLabel.textAndMnemonic=\u9009\u5B9A\u5185\u5BB9(&S):
-FileChooser.filterLabel.textAndMnemonic=\u7B5B\u9009\u5668: 
-FileChooser.foldersLabel.textAndMnemonic=\u6587\u4EF6\u5939(&D)
-FileChooser.filesLabel.textAndMnemonic=\u6587\u4EF6(&F)
-
-FileChooser.cancelButtonToolTip.textAndMnemonic=\u4E2D\u6B62\u6587\u4EF6\u9009\u62E9\u5668\u5BF9\u8BDD\u6846\u3002
-FileChooser.saveButtonToolTip.textAndMnemonic=\u4FDD\u5B58\u6240\u9009\u6587\u4EF6\u3002
-FileChooser.openButtonToolTip.textAndMnemonic=\u6253\u5F00\u6240\u9009\u6587\u4EF6\u3002
-
-FileChooser.renameFileDialog.textAndMnemonic=\u5C06\u6587\u4EF6 "{0}" \u91CD\u547D\u540D\u4E3A
-FileChooser.renameFileError.titleAndMnemonic=\u9519\u8BEF
-FileChooser.renameFileError.textAndMnemonic=\u5C06\u6587\u4EF6 "{0}" \u91CD\u547D\u540D\u4E3A "{1}" \u65F6\u51FA\u9519
-
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/resources/gtk_zh_TW.properties b/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/resources/gtk_zh_TW.properties
deleted file mode 100755
index 9ee492a..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/resources/gtk_zh_TW.properties
+++ /dev/null
@@ -1,54 +0,0 @@
-# Refer to the note in basic.properties for a description as to what
-# the mnemonics correspond to and how to calculate them.
-
-
-
-# GTK specific properties
-
-# GTK color chooser properties:
-GTKColorChooserPanel.textAndMnemonic=GTK \u8272\u5F69\u9078\u64C7\u5668(&G)
-# mnemonic as a VK_ constant
-
-GTKColorChooserPanel.hue.textAndMnemonic=\u8272\u8ABF(&H):
-
-GTKColorChooserPanel.red.textAndMnemonic=\u7D05(&E):
-
-GTKColorChooserPanel.saturation.textAndMnemonic=\u5F69\u5EA6(&S):
-
-GTKColorChooserPanel.green.textAndMnemonic=\u7DA0(&G):
-
-GTKColorChooserPanel.value.textAndMnemonic=\u503C(&V):
-
-GTKColorChooserPanel.blue.textAndMnemonic=\u85CD(&B):
-
-GTKColorChooserPanel.color.textAndMnemonic=\u984F\u8272\u540D\u7A31(&N):
-
-
-
-############ FILE CHOOSER STRINGS #############
-
-FileChooser.acceptAllFileFilter.textAndMnemonic=\u6240\u6709\u6A94\u6848
-FileChooser.newFolderButton.textAndMnemonic=\u65B0\u5EFA\u8CC7\u6599\u593E(&N)
-FileChooser.newFolderDialog.textAndMnemonic=\u8CC7\u6599\u593E\u540D\u7A31:
-FileChooser.newFolderNoDirectoryErrorTitle.textAndMnemonic=\u932F\u8AA4
-FileChooser.newFolderNoDirectoryError.textAndMnemonic=\u5EFA\u7ACB\u76EE\u9304 "{0}" \u6642\u767C\u751F\u932F\u8AA4: \u6C92\u6709\u6B64\u6A94\u6848\u6216\u76EE\u9304
-FileChooser.deleteFileButton.textAndMnemonic=\u522A\u9664\u6A94\u6848(&L)
-FileChooser.renameFileButton.textAndMnemonic=\u91CD\u65B0\u547D\u540D\u6A94\u6848(&R)
-FileChooser.cancelButton.textAndMnemonic=\u53D6\u6D88(&C)
-FileChooser.saveButton.textAndMnemonic=\u78BA\u5B9A(&O)
-FileChooser.openButton.textAndMnemonic=\u78BA\u5B9A(&O)
-FileChooser.saveDialogTitle.textAndMnemonic=\u5132\u5B58
-FileChooser.openDialogTitle.textAndMnemonic=\u958B\u555F
-FileChooser.pathLabel.textAndMnemonic=\u9078\u53D6(&S):
-FileChooser.filterLabel.textAndMnemonic=\u7BE9\u9078:
-FileChooser.foldersLabel.textAndMnemonic=\u8CC7\u6599\u593E(&D)
-FileChooser.filesLabel.textAndMnemonic=\u6A94\u6848(&F)
-
-FileChooser.cancelButtonToolTip.textAndMnemonic=\u4E2D\u6B62\u6A94\u6848\u9078\u64C7\u5668\u5C0D\u8A71\u65B9\u584A\u3002
-FileChooser.saveButtonToolTip.textAndMnemonic=\u5132\u5B58\u9078\u53D6\u7684\u6A94\u6848\u3002
-FileChooser.openButtonToolTip.textAndMnemonic=\u958B\u555F\u9078\u53D6\u7684\u6A94\u6848\u3002
-
-FileChooser.renameFileDialog.textAndMnemonic=\u5C07\u6A94\u6848 "{0}" \u91CD\u65B0\u547D\u540D\u70BA
-FileChooser.renameFileError.titleAndMnemonic=\u932F\u8AA4
-FileChooser.renameFileError.textAndMnemonic=\u5C07\u6A94\u6848 "{0}" \u91CD\u65B0\u547D\u540D\u70BA "{1}" \u6642\u51FA\u73FE\u932F\u8AA4
-
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/resources/metacity/SwingFallbackTheme/metacity-1/metacity-theme-1.xml b/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/resources/metacity/SwingFallbackTheme/metacity-1/metacity-theme-1.xml
deleted file mode 100755
index 94eab37..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/gtk/resources/metacity/SwingFallbackTheme/metacity-1/metacity-theme-1.xml
+++ /dev/null
@@ -1,178 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
- Copyright (c) 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.
--->
-
-<metacity_theme>
-  <info>
-    <name>SwingFallbackTheme</name>
-    <author>Leif Samuelsson</author>
-    <copyright>&#194; Sun Microsystems, Inc, 2003</copyright>
-    <description>
-	  A fallback theme for Swing's GTK Look and Feel, in case no other metacity 
-	  theme can be found. Note: This theme is not intended to work with the
-	  Metacity window manager, nor to be used for any purpose other than stated
-	  here.
-     </description>
-  </info>
-
-  <frame_geometry name="normal">
-    <distance name="left_width" value="5"/>
-    <distance name="right_width" value="6"/>
-    <distance name="bottom_height" value="6"/>
-    <distance name="left_titlebar_edge" value="5"/>
-    <distance name="right_titlebar_edge" value="6"/>
-    <aspect_ratio name="button" value="1.0"/>
-    <distance name="title_vertical_pad" value="0"/>
-    <border name="title_border" left="0" right="0" top="3" bottom="3"/>
-    <border name="button_border" left="0" right="0" top="3" bottom="3"/>
-  </frame_geometry>
-
-  <draw_ops name="button">
-    <rectangle color="black" x="0" y="0" width="width-2" height="height-2"/>
-  </draw_ops>
-
-  <draw_ops name="button_pressed">
-    <rectangle color="black" x="1" y="1" width="width-2" height="height-2"/>
-  </draw_ops>
-
-  <frame_style name="normal" geometry="normal">
-
-    <piece position="entire_background">
-      <draw_ops>
-	  <rectangle color="black" x="0" y="0" width="width-1" height="height-1"/>
-	  <rectangle color="black" x="left_width-1" y="1" width="width-left_width-right_width+1" height="height-bottom_height-1"/>
-      </draw_ops>
-    </piece>
-
-    <piece position="title">
-      <draw_ops>
-	<title color="black" x="2" y="0"/>
-      </draw_ops>
-    </piece>
-
-    <piece position="titlebar">
-      <draw_ops>
-	<gradient type="diagonal" x="1" y="1" width="width-2" height="height-2">
-		<color value="shade/gtk:bg[NORMAL]/1.0"/>
-		<color value="shade/gtk:bg[NORMAL]/0.9"/>
-	</gradient>
-	<line color="black" x1="left_width" y1="height-1" x2="width-right_width" y2="height-1"/>
-      </draw_ops>
-    </piece>
-
-    <button function="close" state="normal">
-      <draw_ops>
-	<include name="button"/>
-	<line color="black" x1="3"       y1="3" x2="width-5" y2="height-5"/>
-	<line color="black" x1="width-5" y1="3" x2="3"       y2="height-5"/>
-      </draw_ops>
-    </button>
-
-    <button function="close" state="pressed">
-      <draw_ops>
-	<include name="button_pressed"/>
-	<line color="black" x1="4"       y1="4" x2="width-4" y2="height-4"/>
-	<line color="black" x1="width-4" y1="4" x2="4"       y2="height-4"/>
-      </draw_ops>
-    </button>
-
-    <button function="minimize" state="normal">
-      <draw_ops>
-	<include name="button"/>
-	<line color="black" x1="4"       y1="height-4" x2="width-5" y2="height-4"/>
-      </draw_ops>
-    </button>
-
-    <button function="minimize" state="pressed">
-      <draw_ops>
-	<include name="button_pressed"/>
-	<line color="black" x1="5"       y1="height-3" x2="width-4" y2="height-3"/>
-      </draw_ops>
-    </button>
-
-    <button function="maximize" state="normal">
-      <draw_ops>
-	<include name="button"/>
-	<rectangle color="black" x="3" y="3" width="width-3-5" height="height-3-5"/>
-      </draw_ops>
-    </button>
-
-    <button function="maximize" state="pressed">
-      <draw_ops>
-	<include name="button_pressed"/>
-	<rectangle color="black" x="4" y="4" width="width-3-5" height="height-3-5"/>
-      </draw_ops>
-    </button>
-
-    <button function="menu" state="normal">
-      <draw_ops>
-	<include name="button"/>
-      </draw_ops>
-    </button>
-
-    <button function="menu" state="pressed">
-      <draw_ops>
-	<include name="button_pressed"/>
-      </draw_ops>
-    </button>
-  </frame_style>
-
-
-  <frame_style name="focused" geometry="normal" parent="normal">
-
-    <piece position="entire_background">
-      <draw_ops>
-	  <rectangle color="black" x="0" y="0" width="width-1" height="height-1"/>
-	  <rectangle color="black" x="left_width-1" y="1" width="width-left_width-right_width+1" height="height-bottom_height-1"/>
-      </draw_ops>
-    </piece>
-
-    <piece position="title">
-      <draw_ops>
-	<title color="black" x="2" y="((height - title_height) / 2) `max` 0"/>
-      </draw_ops>
-    </piece>
-
-    <piece position="titlebar">
-      <draw_ops>
-	<gradient type="diagonal" x="1" y="1" width="width-2" height="height-2">
-		<color value="#f0f0f0"/>
-		<color value="shade/gtk:bg[NORMAL]/1.0"/>
-	</gradient>
-	<line color="black" x1="left_width" y1="height-1" x2="width-right_width" y2="height-1"/>
-      </draw_ops>
-    </piece>
-
-  </frame_style>
-
-  <frame_style_set name="normal">
-    <frame focus="yes" state="normal" resize="both" style="focused"/>
-    <frame focus="yes" state="maximized" style="focused"/>
-    <frame focus="no" state="normal" resize="both" style="normal"/>
-    <frame focus="no" state="maximized" style="normal"/>
-  </frame_style_set>
-
-</metacity_theme>
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifBorders.java b/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifBorders.java
deleted file mode 100755
index 4b140f1..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifBorders.java
+++ /dev/null
@@ -1,734 +0,0 @@
-/*
- * 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
- * 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.java.swing.plaf.motif;
-
-import sun.swing.SwingUtilities2;
-import javax.swing.*;
-import javax.swing.border.*;
-import javax.swing.plaf.*;
-
-import java.awt.Color;
-import java.awt.Component;
-import java.awt.Dimension;
-import java.awt.Font;
-import java.awt.FontMetrics;
-import java.awt.Graphics;
-import java.awt.Insets;
-import java.awt.Point;
-import java.awt.Rectangle;
-
-/**
- * Factory object that can vend Icons appropriate for the basic L & F.
- * <p>
- * <strong>Warning:</strong>
- * Serialized objects of this class will not be compatible with
- * future Swing releases.  The current serialization support is appropriate
- * for short term storage or RMI between applications running the same
- * version of Swing.  A future release of Swing will provide support for
- * long term persistence.
- *
- * @author Amy Fowler
- */
-public class MotifBorders {
-
-    public static class BevelBorder extends AbstractBorder implements UIResource {
-        private Color darkShadow = UIManager.getColor("controlShadow");
-        private Color lightShadow = UIManager.getColor("controlLtHighlight");
-        private boolean isRaised;
-
-        public BevelBorder(boolean isRaised, Color darkShadow, Color lightShadow) {
-            this.isRaised = isRaised;
-            this.darkShadow = darkShadow;
-            this.lightShadow = lightShadow;
-        }
-
-        public void paintBorder(Component c, Graphics g, int x, int y, int w, int h) {
-            g.setColor((isRaised) ? lightShadow : darkShadow);
-            g.drawLine(x, y, x+w-1, y);           // top
-            g.drawLine(x, y+h-1, x, y+1);         // left
-
-            g.setColor((isRaised) ? darkShadow : lightShadow);
-            g.drawLine(x+1, y+h-1, x+w-1, y+h-1); // bottom
-            g.drawLine(x+w-1, y+h-1, x+w-1, y+1); // right
-        }
-
-        public Insets getBorderInsets(Component c, Insets insets) {
-            insets.set(1, 1, 1, 1);
-            return insets;
-        }
-
-        public boolean isOpaque(Component c) {
-            return true;
-        }
-
-    }
-
-
-    public static class FocusBorder extends AbstractBorder implements UIResource {
-        private Color focus;
-        private Color control;
-
-        public FocusBorder(Color control, Color focus) {
-            this.control = control;
-            this.focus = focus;
-        }
-
-        public void paintBorder(Component c, Graphics g, int x, int y, int w, int h) {
-            if (c.hasFocus()) {
-                g.setColor(focus);
-                g.drawRect(x, y, w-1, h-1);
-            } else {
-                g.setColor(control);
-                g.drawRect(x, y, w-1, h-1);
-            }
-        }
-
-        public Insets getBorderInsets(Component c, Insets insets) {
-            insets.set(1, 1, 1, 1);
-            return insets;
-        }
-    }
-
-
-    public static class ButtonBorder extends AbstractBorder implements UIResource {
-        protected Color focus = UIManager.getColor("activeCaptionBorder");
-        protected Color shadow = UIManager.getColor("Button.shadow");
-        protected Color highlight = UIManager.getColor("Button.light");
-        protected Color darkShadow;
-
-        public ButtonBorder(Color shadow, Color highlight, Color darkShadow, Color focus) {
-            this.shadow = shadow;
-            this.highlight = highlight;
-            this.darkShadow = darkShadow;
-            this.focus = focus;
-        }
-
-        public void paintBorder(Component c, Graphics g, int x, int y, int w, int h) {
-            boolean isPressed = false;
-            boolean hasFocus = false;
-            boolean canBeDefault = false;
-            boolean isDefault = false;
-
-            if (c instanceof AbstractButton) {
-                AbstractButton b = (AbstractButton)c;
-                ButtonModel model = b.getModel();
-
-                isPressed = (model.isArmed() && model.isPressed());
-                hasFocus = (model.isArmed() && isPressed) ||
-                           (b.isFocusPainted() && b.hasFocus());
-                if (b instanceof JButton) {
-                    canBeDefault = ((JButton)b).isDefaultCapable();
-                    isDefault = ((JButton)b).isDefaultButton();
-                }
-            }
-            int bx1 = x+1;
-            int by1 = y+1;
-            int bx2 = x+w-2;
-            int by2 = y+h-2;
-
-            if (canBeDefault) {
-                if (isDefault) {
-                    g.setColor(shadow);
-                    g.drawLine(x+3, y+3, x+3, y+h-4);
-                    g.drawLine(x+3, y+3, x+w-4, y+3);
-
-                    g.setColor(highlight);
-                    g.drawLine(x+4, y+h-4, x+w-4, y+h-4);
-                    g.drawLine(x+w-4, y+3, x+w-4, y+h-4);
-                }
-                bx1 +=6;
-                by1 += 6;
-                bx2 -= 6;
-                by2 -= 6;
-            }
-
-            if (hasFocus) {
-                g.setColor(focus);
-                if (isDefault) {
-                    g.drawRect(x, y, w-1, h-1);
-                } else {
-                    g.drawRect(bx1-1, by1-1, bx2-bx1+2, by2-by1+2);
-                }
-            }
-
-            g.setColor(isPressed? shadow : highlight);
-            g.drawLine(bx1, by1, bx2, by1);
-            g.drawLine(bx1, by1, bx1, by2);
-
-            g.setColor(isPressed? highlight : shadow);
-            g.drawLine(bx2, by1+1, bx2, by2);
-            g.drawLine(bx1+1, by2, bx2, by2);
-        }
-
-        public Insets getBorderInsets(Component c, Insets insets) {
-            int thickness = (c instanceof JButton && ((JButton)c).isDefaultCapable())? 8 : 2;
-            insets.set(thickness, thickness, thickness, thickness);
-            return insets;
-        }
-
-    }
-
-    public static class ToggleButtonBorder extends ButtonBorder {
-
-        public ToggleButtonBorder(Color shadow, Color highlight, Color darkShadow, Color focus) {
-             super(shadow, highlight, darkShadow, focus);
-        }
-
-        public void paintBorder(Component c, Graphics g, int x, int y,
-                            int width, int height) {
-            if (c instanceof AbstractButton) {
-                AbstractButton b = (AbstractButton)c;
-                ButtonModel model = b.getModel();
-
-                if (model.isArmed() && model.isPressed() || model.isSelected()) {
-                    drawBezel(g, x, y, width, height,
-                              (model.isPressed() || model.isSelected()),
-                              b.isFocusPainted() && b.hasFocus(), shadow, highlight, darkShadow, focus);
-                } else {
-                    drawBezel(g, x, y, width, height,
-                              false, b.isFocusPainted() && b.hasFocus(),
-                              shadow, highlight, darkShadow, focus);
-                }
-            } else {
-                drawBezel(g, x, y, width, height, false, false,
-                          shadow, highlight, darkShadow, focus);
-            }
-        }
-
-        public Insets getBorderInsets(Component c, Insets insets) {
-            insets.set(2, 2, 3, 3);
-            return insets;
-        }
-    }
-
-    public static class MenuBarBorder extends ButtonBorder {
-
-        public MenuBarBorder(Color shadow, Color highlight, Color darkShadow, Color focus) {
-            super(shadow, highlight, darkShadow, focus);
-        }
-
-        public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) {
-            if (!(c instanceof JMenuBar)) {
-                return;
-            }
-            JMenuBar menuBar = (JMenuBar)c;
-            if (menuBar.isBorderPainted() == true) {
-                // this draws the MenuBar border
-                Dimension size = menuBar.getSize();
-                drawBezel(g,x,y,size.width,size.height,false,false,
-                          shadow, highlight, darkShadow, focus);
-            }
-        }
-
-        public Insets getBorderInsets(Component c, Insets insets) {
-            insets.set(6, 6, 6, 6);
-            return insets;
-        }
-    }
-
-    public static class FrameBorder extends AbstractBorder implements UIResource {
-
-        JComponent jcomp;
-        Color frameHighlight;
-        Color frameColor;
-        Color frameShadow;
-
-        // The width of the border
-        public final static int BORDER_SIZE = 5;
-
-        /** Constructs an FrameBorder for the JComponent <b>comp</b>.
-        */
-        public FrameBorder(JComponent comp) {
-            jcomp = comp;
-        }
-
-        /** Sets the FrameBorder's JComponent.
-      */
-        public void setComponent(JComponent comp) {
-            jcomp = comp;
-        }
-
-        /** Returns the FrameBorder's JComponent.
-          * @see #setComponent
-          */
-        public JComponent component() {
-            return jcomp;
-        }
-
-        protected Color getFrameHighlight() {
-            return frameHighlight;
-        }
-
-        protected Color getFrameColor() {
-            return frameColor;
-        }
-
-        protected Color getFrameShadow() {
-            return frameShadow;
-        }
-
-        public Insets getBorderInsets(Component c, Insets newInsets) {
-            newInsets.set(BORDER_SIZE, BORDER_SIZE, BORDER_SIZE, BORDER_SIZE);
-            return newInsets;
-        }
-
-       /** Draws the FrameBorder's top border.
-         */
-        protected boolean drawTopBorder(Component c, Graphics g,
-                                    int x, int y, int width, int height) {
-            Rectangle titleBarRect = new Rectangle(x, y, width, BORDER_SIZE);
-            if (!g.getClipBounds().intersects(titleBarRect)) {
-                return false;
-            }
-
-            int maxX = width - 1;
-            int maxY = BORDER_SIZE - 1;
-
-            // Draw frame
-            g.setColor(frameColor);
-            g.drawLine(x, y + 2, maxX - 2, y + 2);
-            g.drawLine(x, y + 3, maxX - 2, y + 3);
-            g.drawLine(x, y + 4, maxX - 2, y + 4);
-
-            // Draw highlights
-            g.setColor(frameHighlight);
-            g.drawLine(x, y, maxX, y);
-            g.drawLine(x, y + 1, maxX, y + 1);
-            g.drawLine(x, y + 2, x, y + 4);
-            g.drawLine(x + 1, y + 2, x + 1, y + 4);
-
-            // Draw shadows
-            g.setColor(frameShadow);
-            g.drawLine(x + 4, y + 4, maxX - 4, y + 4);
-            g.drawLine(maxX, y + 1, maxX, maxY);
-            g.drawLine(maxX - 1, y + 2, maxX - 1, maxY);
-
-            return true;
-        }
-
-        /** Draws the FrameBorder's left border.
-          */
-        protected boolean drawLeftBorder(Component c, Graphics g, int x, int y,
-                               int width, int height) {
-            Rectangle borderRect =
-                new Rectangle(0, 0, getBorderInsets(c).left, height);
-            if (!g.getClipBounds().intersects(borderRect)) {
-                return false;
-            }
-
-            int startY = BORDER_SIZE;
-
-            g.setColor(frameHighlight);
-            g.drawLine(x, startY, x, height - 1);
-            g.drawLine(x + 1, startY, x + 1, height - 2);
-
-            g.setColor(frameColor);
-            g.fillRect(x + 2, startY, x + 2, height - 3);
-
-            g.setColor(frameShadow);
-            g.drawLine(x + 4, startY, x + 4, height - 5);
-
-            return true;
-        }
-
-        /** Draws the FrameBorder's right border.
-          */
-        protected boolean drawRightBorder(Component c, Graphics g, int x, int y,
-                                int width, int height) {
-            Rectangle borderRect = new Rectangle(
-                width - getBorderInsets(c).right, 0,
-                getBorderInsets(c).right, height);
-            if (!g.getClipBounds().intersects(borderRect)) {
-                return false;
-            }
-
-            int startX = width - getBorderInsets(c).right;
-            int startY = BORDER_SIZE;
-
-            g.setColor(frameColor);
-            g.fillRect(startX + 1, startY, 2, height - 1);
-
-            g.setColor(frameShadow);
-            g.fillRect(startX + 3, startY, 2, height - 1);
-
-            g.setColor(frameHighlight);
-            g.drawLine(startX, startY, startX, height - 1);
-
-            return true;
-        }
-
-        /** Draws the FrameBorder's bottom border.
-          */
-        protected boolean drawBottomBorder(Component c, Graphics g, int x, int y,
-                                 int width, int height) {
-            Rectangle    borderRect;
-            int     marginHeight, startY;
-
-            borderRect = new Rectangle(0, height - getBorderInsets(c).bottom,
-                                  width, getBorderInsets(c).bottom);
-            if (!g.getClipBounds().intersects(borderRect)) {
-                return false;
-            }
-
-            startY = height - getBorderInsets(c).bottom;
-
-            g.setColor(frameShadow);
-            g.drawLine(x + 1, height - 1, width - 1, height - 1);
-            g.drawLine(x + 2, height - 2, width - 2, height - 2);
-
-            g.setColor(frameColor);
-            g.fillRect(x + 2, startY + 1, width - 4, 2);
-
-            g.setColor(frameHighlight);
-            g.drawLine(x + 5, startY, width - 5, startY);
-
-            return true;
-        }
-
-        // Returns true if the associated component has focus.
-        protected boolean isActiveFrame() {
-            return jcomp.hasFocus();
-        }
-
-        /** Draws the FrameBorder in the given Rect.  Calls
-          * <b>drawTitleBar</b>, <b>drawLeftBorder</b>, <b>drawRightBorder</b> and
-          * <b>drawBottomBorder</b>.
-          */
-        public void paintBorder(Component c, Graphics g,
-                            int x, int y, int width, int height) {
-            if (isActiveFrame()) {
-                frameColor = UIManager.getColor("activeCaptionBorder");
-            } else {
-                frameColor = UIManager.getColor("inactiveCaptionBorder");
-            }
-            frameHighlight = frameColor.brighter();
-            frameShadow = frameColor.darker().darker();
-
-            drawTopBorder(c, g, x, y, width, height);
-            drawLeftBorder(c, g, x, y, width, height);
-            drawRightBorder(c, g, x, y, width, height);
-            drawBottomBorder(c, g, x, y, width, height);
-        }
-    }
-
-    public static class InternalFrameBorder extends FrameBorder {
-
-        JInternalFrame frame;
-
-        // The size of the bounding box for Motif frame corners.
-        public final static int CORNER_SIZE = 24;
-
-        /** Constructs an InternalFrameBorder for the InternalFrame
-          * <b>aFrame</b>.
-          */
-        public InternalFrameBorder(JInternalFrame aFrame) {
-            super(aFrame);
-            frame = aFrame;
-        }
-
-        /** Sets the InternalFrameBorder's InternalFrame.
-          */
-        public void setFrame(JInternalFrame aFrame) {
-            frame = aFrame;
-        }
-
-        /** Returns the InternalFrameBorder's InternalFrame.
-          * @see #setFrame
-          */
-        public JInternalFrame frame() {
-            return frame;
-        }
-
-        /** Returns the width of the InternalFrameBorder's resize controls,
-          * appearing along the InternalFrameBorder's bottom border.  Clicking
-          * and dragging within these controls lets the user change both the
-          * InternalFrame's width and height, while dragging between the controls
-          * constrains resizing to just the vertical dimension.  Override this
-          * method if you implement your own bottom border painting and use a
-          * resize control with a different size.
-          */
-        public int resizePartWidth() {
-            if (!frame.isResizable()) {
-                return 0;
-            }
-            return FrameBorder.BORDER_SIZE;
-        }
-
-        /** Draws the InternalFrameBorder's top border.
-         */
-        protected boolean drawTopBorder(Component c, Graphics g,
-                                    int x, int y, int width, int height) {
-            if (super.drawTopBorder(c, g, x, y, width, height) &&
-                frame.isResizable()) {
-                g.setColor(getFrameShadow());
-                g.drawLine(CORNER_SIZE - 1, y + 1, CORNER_SIZE - 1, y + 4);
-                g.drawLine(width - CORNER_SIZE - 1, y + 1,
-                       width - CORNER_SIZE - 1, y + 4);
-
-                g.setColor(getFrameHighlight());
-                g.drawLine(CORNER_SIZE, y, CORNER_SIZE, y + 4);
-                g.drawLine(width - CORNER_SIZE, y, width - CORNER_SIZE, y + 4);
-                return true;
-            }
-            return false;
-        }
-
-        /** Draws the InternalFrameBorder's left border.
-          */
-        protected boolean drawLeftBorder(Component c, Graphics g, int x, int y,
-                                     int width, int height) {
-            if (super.drawLeftBorder(c, g, x, y, width, height) &&
-                frame.isResizable()) {
-                g.setColor(getFrameHighlight());
-                int topY = y + CORNER_SIZE;
-                g.drawLine(x, topY, x + 4, topY);
-                int bottomY = height - CORNER_SIZE;
-                g.drawLine(x + 1, bottomY, x + 5, bottomY);
-                g.setColor(getFrameShadow());
-                g.drawLine(x + 1, topY - 1, x + 5, topY - 1);
-                g.drawLine(x + 1, bottomY - 1, x + 5, bottomY - 1);
-                return true;
-            }
-            return false;
-        }
-
-        /** Draws the InternalFrameBorder's right border.
-          */
-        protected boolean drawRightBorder(Component c, Graphics g, int x, int y,
-                                      int width, int height) {
-            if (super.drawRightBorder(c, g, x, y, width, height) &&
-                frame.isResizable()) {
-                int startX = width - getBorderInsets(c).right;
-                g.setColor(getFrameHighlight());
-                int topY = y + CORNER_SIZE;
-                g.drawLine(startX, topY, width - 2, topY);
-                int bottomY = height - CORNER_SIZE;
-                g.drawLine(startX + 1, bottomY, startX + 3, bottomY);
-                g.setColor(getFrameShadow());
-                g.drawLine(startX + 1, topY - 1, width - 2, topY - 1);
-                g.drawLine(startX + 1, bottomY - 1, startX + 3, bottomY - 1);
-                return true;
-            }
-            return false;
-        }
-
-        /** Draws the InternalFrameBorder's bottom border.
-          */
-        protected boolean drawBottomBorder(Component c, Graphics g, int x, int y,
-                                       int width, int height) {
-            if (super.drawBottomBorder(c, g, x, y, width, height) &&
-                frame.isResizable()) {
-                int startY = height - getBorderInsets(c).bottom;
-
-                g.setColor(getFrameShadow());
-                g.drawLine(CORNER_SIZE - 1, startY + 1,
-                       CORNER_SIZE - 1, height - 1);
-                g.drawLine(width - CORNER_SIZE, startY + 1,
-                       width - CORNER_SIZE, height - 1);
-
-                g.setColor(getFrameHighlight());
-                g.drawLine(CORNER_SIZE, startY, CORNER_SIZE, height - 2);
-                g.drawLine(width - CORNER_SIZE + 1, startY,
-                       width - CORNER_SIZE + 1, height - 2);
-                return true;
-            }
-            return false;
-        }
-
-        // Returns true if the associated internal frame has focus.
-        protected boolean isActiveFrame() {
-            return frame.isSelected();
-        }
-    }
-
-    public static void drawBezel(Graphics g, int x, int y, int w, int h,
-                               boolean isPressed, boolean hasFocus,
-                               Color shadow, Color highlight,
-                               Color darkShadow, Color focus)  {
-
-        Color oldColor = g.getColor();
-        g.translate(x, y);
-
-        if (isPressed) {
-            if (hasFocus){
-                g.setColor(focus);
-                g.drawRect(0, 0, w-1, h-1);
-            }
-            g.setColor(shadow);         // inner border
-            g.drawRect(1, 1, w-3, h-3);
-
-            g.setColor(highlight);    // inner 3D border
-            g.drawLine(2, h-3, w-3, h-3);
-            g.drawLine(w-3, 2, w-3, h-4);
-
-        } else {
-            if (hasFocus) {
-                g.setColor(focus);
-                g.drawRect(0, 0, w-1, h-1);
-
-                g.setColor(highlight);   // inner 3D border
-                g.drawLine(1, 1, 1, h-3);
-                g.drawLine(2, 1, w-4, 1);
-
-                g.setColor(shadow);
-                g.drawLine(2, h-3, w-3, h-3);
-                g.drawLine(w-3, 1, w-3, h-4);
-
-                g.setColor(darkShadow);        // black drop shadow  __|
-                g.drawLine(1, h-2, w-2, h-2);
-                g.drawLine(w-2, h-2, w-2, 1);
-            } else {
-                g.setColor(highlight);    // inner 3D border
-                g.drawLine(1,1,1,h-3);
-                g.drawLine(2,1,w-4,1);
-                g.setColor(shadow);
-                g.drawLine(2,h-3,w-3,h-3);
-                g.drawLine(w-3,1,w-3,h-4);
-
-                g.setColor(darkShadow);         // black drop shadow  __|
-                g.drawLine(1,h-2,w-2,h-2);
-                g.drawLine(w-2,h-2,w-2,0);
-
-            }
-            g.translate(-x, -y);
-        }
-        g.setColor(oldColor);
-    }
-
-    public static class MotifPopupMenuBorder extends AbstractBorder implements UIResource {
-        protected Font   font;
-        protected Color  background;
-        protected Color  foreground;
-        protected Color  shadowColor;
-        protected Color  highlightColor;
-
-        // Space between the border and text
-        static protected final int TEXT_SPACING = 2;
-
-        // Space for the separator under the title
-        static protected final int GROOVE_HEIGHT = 2;
-
-        /**
-         * Creates a MotifPopupMenuBorder instance
-         *
-         */
-        public MotifPopupMenuBorder(
-                                    Font titleFont,
-                                    Color bgColor,
-                                    Color fgColor,
-                                    Color shadow,
-                                    Color highlight)       {
-            this.font = titleFont;
-            this.background = bgColor;
-            this.foreground = fgColor;
-            this.shadowColor = shadow;
-            this.highlightColor = highlight;
-        }
-
-        /**
-         * Paints the border for the specified component with the
-         * specified position and size.
-         * @param c the component for which this border is being painted
-         * @param g the paint graphics
-         * @param x the x position of the painted border
-         * @param y the y position of the painted border
-         * @param width the width of the painted border
-         * @param height the height of the painted border
-         */
-        public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) {
-            if (!(c instanceof JPopupMenu)) {
-                return;
-            }
-
-            Font origFont = g.getFont();
-            Color origColor = g.getColor();
-            JPopupMenu popup = (JPopupMenu)c;
-
-            String title = popup.getLabel();
-            if (title == null) {
-                return;
-            }
-
-            g.setFont(font);
-
-            FontMetrics fm = SwingUtilities2.getFontMetrics(popup, g, font);
-            int         fontHeight = fm.getHeight();
-            int         descent = fm.getDescent();
-            int         ascent = fm.getAscent();
-            Point       textLoc = new Point();
-            int         stringWidth = SwingUtilities2.stringWidth(popup, fm,
-                                                                  title);
-
-            textLoc.y = y + ascent + TEXT_SPACING;
-            textLoc.x = x + ((width - stringWidth) / 2);
-
-            g.setColor(background);
-            g.fillRect(textLoc.x - TEXT_SPACING, textLoc.y - (fontHeight-descent),
-                       stringWidth + (2 * TEXT_SPACING), fontHeight - descent);
-            g.setColor(foreground);
-            SwingUtilities2.drawString(popup, g, title, textLoc.x, textLoc.y);
-
-            MotifGraphicsUtils.drawGroove(g, x, textLoc.y + TEXT_SPACING,
-                                          width, GROOVE_HEIGHT,
-                                          shadowColor, highlightColor);
-
-            g.setFont(origFont);
-            g.setColor(origColor);
-        }
-
-        /**
-         * Reinitialize the insets parameter with this Border's current Insets.
-         * @param c the component for which this border insets value applies
-         * @param insets the object to be reinitialized
-         */
-        public Insets getBorderInsets(Component c, Insets insets) {
-            if (!(c instanceof JPopupMenu)) {
-                return insets;
-            }
-            FontMetrics fm;
-            int         descent = 0;
-            int         ascent = 16;
-
-            String title = ((JPopupMenu)c).getLabel();
-            if (title == null) {
-                insets.left = insets.top = insets.right = insets.bottom = 0;
-                return insets;
-            }
-
-            fm = c.getFontMetrics(font);
-
-            if(fm != null) {
-                descent = fm.getDescent();
-                ascent = fm.getAscent();
-            }
-
-            insets.top += ascent + descent + TEXT_SPACING + GROOVE_HEIGHT;
-            return insets;
-        }
-
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifButtonListener.java b/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifButtonListener.java
deleted file mode 100755
index 0e0f5d5..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifButtonListener.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (c) 1997, 2001, 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.java.swing.plaf.motif;
-
-import java.awt.*;
-import java.awt.event.*;
-import javax.swing.*;
-import javax.swing.plaf.basic.*;
-import javax.swing.event.*;
-
-/**
- * Button Listener
- * <p>
- *
- * @author Rich Schiavi
- */
-public class MotifButtonListener extends BasicButtonListener {
-    public MotifButtonListener(AbstractButton b ) {
-        super(b);
-    }
-
-    protected void checkOpacity(AbstractButton b) {
-        b.setOpaque( false );
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifButtonUI.java b/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifButtonUI.java
deleted file mode 100755
index eb2520c..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifButtonUI.java
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-package com.sun.java.swing.plaf.motif;
-
-import sun.awt.AppContext;
-
-import javax.swing.*;
-import javax.swing.border.*;
-import javax.swing.plaf.basic.*;
-import java.awt.*;
-import java.awt.event.*;
-import javax.swing.plaf.*;
-
-/**
- * MotifButton implementation
- * <p>
- * <strong>Warning:</strong>
- * Serialized objects of this class will not be compatible with
- * future Swing releases.  The current serialization support is appropriate
- * for short term storage or RMI between applications running the same
- * version of Swing.  A future release of Swing will provide support for
- * long term persistence.
- *
- * @author Rich Schiavi
- */
-public class MotifButtonUI extends BasicButtonUI {
-
-    protected Color selectColor;
-
-    private boolean defaults_initialized = false;
-
-    private static final Object MOTIF_BUTTON_UI_KEY = new Object();
-
-    // ********************************
-    //          Create PLAF
-    // ********************************
-    public static ComponentUI createUI(JComponent c) {
-        AppContext appContext = AppContext.getAppContext();
-        MotifButtonUI motifButtonUI =
-                (MotifButtonUI) appContext.get(MOTIF_BUTTON_UI_KEY);
-        if (motifButtonUI == null) {
-            motifButtonUI = new MotifButtonUI();
-            appContext.put(MOTIF_BUTTON_UI_KEY, motifButtonUI);
-        }
-        return motifButtonUI;
-    }
-
-    // ********************************
-    //         Create Listeners
-    // ********************************
-    protected BasicButtonListener createButtonListener(AbstractButton b){
-        return new MotifButtonListener(b);
-    }
-
-    // ********************************
-    //          Install Defaults
-    // ********************************
-    public void installDefaults(AbstractButton b) {
-        super.installDefaults(b);
-        if(!defaults_initialized) {
-            selectColor = UIManager.getColor(getPropertyPrefix() + "select");
-            defaults_initialized = true;
-        }
-        LookAndFeel.installProperty(b, "opaque", Boolean.FALSE);
-    }
-
-    protected void uninstallDefaults(AbstractButton b) {
-        super.uninstallDefaults(b);
-        defaults_initialized = false;
-    }
-
-    // ********************************
-    //          Default Accessors
-    // ********************************
-
-    protected Color getSelectColor() {
-        return selectColor;
-    }
-
-    // ********************************
-    //          Paint Methods
-    // ********************************
-    public void paint(Graphics g, JComponent c) {
-        fillContentArea( g, (AbstractButton)c , c.getBackground() );
-        super.paint(g,c);
-    }
-
-    // Overridden to ensure we don't paint icon over button borders.
-    protected void paintIcon(Graphics g, JComponent c, Rectangle iconRect) {
-        Shape oldClip = g.getClip();
-        Rectangle newClip =
-            AbstractBorder.getInteriorRectangle(c, c.getBorder(), 0, 0,
-                                                c.getWidth(), c.getHeight());
-
-        Rectangle r = oldClip.getBounds();
-        newClip =
-            SwingUtilities.computeIntersection(r.x, r.y, r.width, r.height,
-                                               newClip);
-        g.setClip(newClip);
-        super.paintIcon(g, c, iconRect);
-        g.setClip(oldClip);
-    }
-
-    protected void paintFocus(Graphics g, AbstractButton b, Rectangle viewRect, Rectangle textRect, Rectangle iconRect){
-        // focus painting is handled by the border
-    }
-
-    protected void paintButtonPressed(Graphics g, AbstractButton b) {
-
-        fillContentArea( g, b , selectColor );
-
-    }
-
-    protected void fillContentArea( Graphics g, AbstractButton b, Color fillColor) {
-
-        if (b.isContentAreaFilled()) {
-            Insets margin = b.getMargin();
-            Insets insets = b.getInsets();
-            Dimension size = b.getSize();
-            g.setColor(fillColor);
-            g.fillRect(insets.left - margin.left,
-                       insets.top - margin.top,
-                       size.width - (insets.left-margin.left) - (insets.right - margin.right),
-                       size.height - (insets.top-margin.top) - (insets.bottom - margin.bottom));
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifCheckBoxMenuItemUI.java b/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifCheckBoxMenuItemUI.java
deleted file mode 100755
index fea72f0..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifCheckBoxMenuItemUI.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * Copyright (c) 1997, 2006, 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.java.swing.plaf.motif;
-
-import javax.swing.*;
-import javax.swing.event.*;
-import javax.swing.plaf.*;
-import javax.swing.plaf.basic.BasicButtonListener;
-import javax.swing.plaf.basic.BasicCheckBoxMenuItemUI;
-
-import java.awt.*;
-import java.awt.event.*;
-
-
-/**
- * MotifCheckboxMenuItem implementation
- * <p>
- *
- * @author Georges Saab
- * @author Rich Schiavi
- */
-public class MotifCheckBoxMenuItemUI extends BasicCheckBoxMenuItemUI
-{
-    protected ChangeListener changeListener;
-
-    public static ComponentUI createUI(JComponent b) {
-        return new MotifCheckBoxMenuItemUI();
-    }
-
-    protected void installListeners() {
-        super.installListeners();
-        changeListener = createChangeListener(menuItem);
-        menuItem.addChangeListener(changeListener);
-    }
-
-    protected void uninstallListeners() {
-        super.uninstallListeners();
-        menuItem.removeChangeListener(changeListener);
-    }
-
-    protected ChangeListener createChangeListener(JComponent c) {
-        return new ChangeHandler();
-    }
-
-    protected class ChangeHandler implements ChangeListener {
-        public void stateChanged(ChangeEvent e) {
-            JMenuItem c = (JMenuItem)e.getSource();
-            LookAndFeel.installProperty(c, "borderPainted", c.isArmed());
-        }
-    }
-
-    protected MouseInputListener createMouseInputListener(JComponent c) {
-        return new MouseInputHandler();
-    }
-
-
-    protected class MouseInputHandler implements MouseInputListener {
-        public void mouseClicked(MouseEvent e) {}
-        public void mousePressed(MouseEvent e) {
-            MenuSelectionManager manager = MenuSelectionManager.defaultManager();
-            manager.setSelectedPath(getPath());
-        }
-        public void mouseReleased(MouseEvent e) {
-            MenuSelectionManager manager =
-                MenuSelectionManager.defaultManager();
-            JMenuItem menuItem = (JMenuItem)e.getComponent();
-            Point p = e.getPoint();
-            if(p.x >= 0 && p.x < menuItem.getWidth() &&
-               p.y >= 0 && p.y < menuItem.getHeight()) {
-                manager.clearSelectedPath();
-                menuItem.doClick(0);
-            } else {
-                manager.processMouseEvent(e);
-            }
-        }
-        public void mouseEntered(MouseEvent e) {}
-        public void mouseExited(MouseEvent e) {}
-        public void mouseDragged(MouseEvent e) {
-            MenuSelectionManager.defaultManager().processMouseEvent(e);
-        }
-        public void mouseMoved(MouseEvent e) { }
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifCheckBoxUI.java b/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifCheckBoxUI.java
deleted file mode 100755
index 62b1577..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifCheckBoxUI.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Copyright (c) 1997, 1998, 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.java.swing.plaf.motif;
-
-import sun.awt.AppContext;
-
-import javax.swing.*;
-
-import javax.swing.plaf.*;
-
-import java.awt.*;
-
-/**
- * MotifCheckBox implementation
- * <p>
- * <strong>Warning:</strong>
- * Serialized objects of this class will not be compatible with
- * future Swing releases.  The current serialization support is appropriate
- * for short term storage or RMI between applications running the same
- * version of Swing.  A future release of Swing will provide support for
- * long term persistence.
- *
- * @author Rich Schiavi
- */
-public class MotifCheckBoxUI extends MotifRadioButtonUI {
-
-    private static final Object MOTIF_CHECK_BOX_UI_KEY = new Object();
-
-    private final static String propertyPrefix = "CheckBox" + ".";
-
-    private boolean defaults_initialized = false;
-
-
-    // ********************************
-    //         Create PLAF
-    // ********************************
-    public static ComponentUI createUI(JComponent c) {
-        AppContext appContext = AppContext.getAppContext();
-        MotifCheckBoxUI motifCheckBoxUI =
-                (MotifCheckBoxUI) appContext.get(MOTIF_CHECK_BOX_UI_KEY);
-        if (motifCheckBoxUI == null) {
-            motifCheckBoxUI = new MotifCheckBoxUI();
-            appContext.put(MOTIF_CHECK_BOX_UI_KEY, motifCheckBoxUI);
-        }
-        return motifCheckBoxUI;
-    }
-
-    public String getPropertyPrefix() {
-        return propertyPrefix;
-    }
-
-    // ********************************
-    //          Defaults
-    // ********************************
-    public void installDefaults(AbstractButton b) {
-        super.installDefaults(b);
-        if(!defaults_initialized) {
-            icon = UIManager.getIcon(getPropertyPrefix() + "icon");
-            defaults_initialized = true;
-        }
-    }
-
-    protected void uninstallDefaults(AbstractButton b) {
-        super.uninstallDefaults(b);
-        defaults_initialized = false;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifComboBoxUI.java b/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifComboBoxUI.java
deleted file mode 100755
index 953869f..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifComboBoxUI.java
+++ /dev/null
@@ -1,361 +0,0 @@
-/*
- * Copyright (c) 1997, 2006, 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.java.swing.plaf.motif;
-
-import java.awt.*;
-import javax.swing.*;
-import javax.swing.plaf.*;
-import javax.swing.border.*;
-import javax.swing.plaf.basic.*;
-import java.io.Serializable;
-import java.awt.event.*;
-import java.beans.*;
-
-/**
- * ComboBox motif look and feel
- * <p> * <strong>Warning:</strong>
- * Serialized objects of this class will not be compatible with
- * future Swing releases.  The current serialization support is appropriate
- * for short term storage or RMI between applications running the same
- * version of Swing.  A future release of Swing will provide support for
- * long term persistence.
- *
- * @author Arnaud Weber
- */
-public class MotifComboBoxUI extends BasicComboBoxUI implements Serializable {
-    Icon arrowIcon;
-    static final int HORIZ_MARGIN = 3;
-
-    public static ComponentUI createUI(JComponent c) {
-        return new MotifComboBoxUI();
-    }
-
-    public void installUI(JComponent c) {
-        super.installUI(c);
-        arrowIcon = new MotifComboBoxArrowIcon(UIManager.getColor("controlHighlight"),
-                                               UIManager.getColor("controlShadow"),
-                                               UIManager.getColor("control"));
-
-        Runnable initCode = new Runnable() {
-            public void run(){
-                if ( motifGetEditor() != null ) {
-                    motifGetEditor().setBackground( UIManager.getColor( "text" ) );
-                }
-            }
-        };
-
-        SwingUtilities.invokeLater( initCode );
-    }
-
-    public Dimension getMinimumSize( JComponent c ) {
-        if ( !isMinimumSizeDirty ) {
-            return new Dimension( cachedMinimumSize );
-        }
-        Dimension size;
-        Insets insets = getInsets();
-        size = getDisplaySize();
-        size.height += insets.top + insets.bottom;
-        int buttonSize = iconAreaWidth();
-        size.width +=  insets.left + insets.right + buttonSize;
-
-        cachedMinimumSize.setSize( size.width, size.height );
-        isMinimumSizeDirty = false;
-
-        return size;
-    }
-
-    protected ComboPopup createPopup() {
-        return new MotifComboPopup( comboBox );
-    }
-
-    /**
-     * Overriden to empty the MouseMotionListener.
-     */
-    protected class MotifComboPopup extends BasicComboPopup {
-
-        public MotifComboPopup( JComboBox comboBox ) {
-            super( comboBox );
-        }
-
-        /**
-         * Motif combo popup should not track the mouse in the list.
-         */
-        public MouseMotionListener createListMouseMotionListener() {
-           return new MouseMotionAdapter() {};
-        }
-
-        public KeyListener createKeyListener() {
-            return super.createKeyListener();
-        }
-
-        protected class InvocationKeyHandler extends BasicComboPopup.InvocationKeyHandler {
-            protected InvocationKeyHandler() {
-                MotifComboPopup.this.super();
-            }
-        }
-    }
-
-    protected void installComponents() {
-        if ( comboBox.isEditable() ) {
-            addEditor();
-        }
-
-        comboBox.add( currentValuePane );
-    }
-
-    protected void uninstallComponents() {
-        removeEditor();
-        comboBox.removeAll();
-    }
-
-    public void paint(Graphics g, JComponent c) {
-        boolean hasFocus = comboBox.hasFocus();
-        Rectangle r;
-
-        if (comboBox.isEnabled()) {
-            g.setColor(comboBox.getBackground());
-        } else {
-            g.setColor(UIManager.getColor("ComboBox.disabledBackground"));
-        }
-        g.fillRect(0,0,c.getWidth(),c.getHeight());
-
-        if ( !comboBox.isEditable() ) {
-            r = rectangleForCurrentValue();
-            paintCurrentValue(g,r,hasFocus);
-        }
-        r = rectangleForArrowIcon();
-        arrowIcon.paintIcon(c,g,r.x,r.y);
-        if ( !comboBox.isEditable() ) {
-            Border border = comboBox.getBorder();
-            Insets in;
-            if ( border != null ) {
-                in = border.getBorderInsets(comboBox);
-            }
-            else {
-                in = new Insets( 0, 0, 0, 0 );
-            }
-            // Draw the separation
-            if(MotifGraphicsUtils.isLeftToRight(comboBox)) {
-                r.x -= (HORIZ_MARGIN + 2);
-            }
-            else {
-                r.x += r.width + HORIZ_MARGIN + 1;
-            }
-            r.y = in.top;
-            r.width = 1;
-            r.height = comboBox.getBounds().height - in.bottom - in.top;
-            g.setColor(UIManager.getColor("controlShadow"));
-            g.fillRect(r.x,r.y,r.width,r.height);
-            r.x++;
-            g.setColor(UIManager.getColor("controlHighlight"));
-            g.fillRect(r.x,r.y,r.width,r.height);
-        }
-    }
-
-    public void paintCurrentValue(Graphics g,Rectangle bounds,boolean hasFocus) {
-        ListCellRenderer renderer = comboBox.getRenderer();
-        Component c;
-        Dimension d;
-        c = renderer.getListCellRendererComponent(listBox, comboBox.getSelectedItem(), -1, false, false);
-        c.setFont(comboBox.getFont());
-        if ( comboBox.isEnabled() ) {
-            c.setForeground(comboBox.getForeground());
-            c.setBackground(comboBox.getBackground());
-        }
-        else {
-            c.setForeground(UIManager.getColor("ComboBox.disabledForeground"));
-            c.setBackground(UIManager.getColor("ComboBox.disabledBackground"));
-        }
-        d  = c.getPreferredSize();
-        currentValuePane.paintComponent(g,c,comboBox,bounds.x,bounds.y,
-                                        bounds.width,d.height);
-    }
-
-    protected Rectangle rectangleForArrowIcon() {
-        Rectangle b = comboBox.getBounds();
-        Border border = comboBox.getBorder();
-        Insets in;
-        if ( border != null ) {
-            in = border.getBorderInsets(comboBox);
-        }
-        else {
-            in = new Insets( 0, 0, 0, 0 );
-        }
-        b.x = in.left;
-        b.y = in.top;
-        b.width -= (in.left + in.right);
-        b.height -= (in.top + in.bottom);
-
-        if(MotifGraphicsUtils.isLeftToRight(comboBox)) {
-            b.x = b.x + b.width - HORIZ_MARGIN - arrowIcon.getIconWidth();
-        }
-        else {
-            b.x += HORIZ_MARGIN;
-        }
-        b.y = b.y + (b.height - arrowIcon.getIconHeight()) / 2;
-        b.width = arrowIcon.getIconWidth();
-        b.height = arrowIcon.getIconHeight();
-        return b;
-    }
-
-    protected Rectangle rectangleForCurrentValue() {
-        int width = comboBox.getWidth();
-        int height = comboBox.getHeight();
-        Insets insets = getInsets();
-        if(MotifGraphicsUtils.isLeftToRight(comboBox)) {
-            return new Rectangle(insets.left, insets.top,
-                                 (width - (insets.left + insets.right)) -
-                                                        iconAreaWidth(),
-                                 height - (insets.top + insets.bottom));
-        }
-        else {
-            return new Rectangle(insets.left + iconAreaWidth(), insets.top,
-                                 (width - (insets.left + insets.right)) -
-                                                        iconAreaWidth(),
-                                 height - (insets.top + insets.bottom));
-        }
-    }
-
-    public int iconAreaWidth() {
-        if ( comboBox.isEditable() )
-            return arrowIcon.getIconWidth() + (2 * HORIZ_MARGIN);
-        else
-            return arrowIcon.getIconWidth() + (3 * HORIZ_MARGIN) + 2;
-    }
-
-    public void configureEditor() {
-        super.configureEditor();
-        editor.setBackground( UIManager.getColor( "text" ) );
-    }
-
-    protected LayoutManager createLayoutManager() {
-        return new ComboBoxLayoutManager();
-    }
-
-    private Component motifGetEditor() {
-        return editor;
-    }
-
-    /**
-     * This inner class is marked &quot;public&quot; due to a compiler bug.
-     * This class should be treated as a &quot;protected&quot; inner class.
-     * Instantiate it only within subclasses of <FooUI>.
-     */
-    public class ComboBoxLayoutManager extends BasicComboBoxUI.ComboBoxLayoutManager {
-        public ComboBoxLayoutManager() {
-            MotifComboBoxUI.this.super();
-        }
-        public void layoutContainer(Container parent) {
-            if ( motifGetEditor() != null ) {
-                Rectangle cvb = rectangleForCurrentValue();
-                cvb.x += 1;
-                cvb.y += 1;
-                cvb.width -= 1;
-                cvb.height -= 2;
-                motifGetEditor().setBounds(cvb);
-            }
-        }
-    }
-
-    static class MotifComboBoxArrowIcon implements Icon, Serializable {
-        private Color lightShadow;
-        private Color darkShadow;
-        private Color fill;
-
-        public MotifComboBoxArrowIcon(Color lightShadow, Color darkShadow, Color fill) {
-            this.lightShadow = lightShadow;
-            this.darkShadow = darkShadow;
-            this.fill = fill;
-        }
-
-
-        public void paintIcon(Component c, Graphics g, int xo, int yo) {
-            int w = getIconWidth();
-            int h = getIconHeight();
-
-            g.setColor(lightShadow);
-            g.drawLine(xo, yo, xo+w-1, yo);
-            g.drawLine(xo, yo+1, xo+w-3, yo+1);
-            g.setColor(darkShadow);
-            g.drawLine(xo+w-2, yo+1, xo+w-1, yo+1);
-
-            for ( int x = xo+1, y = yo+2, dx = w-6; y+1 < yo+h; y += 2 ) {
-                g.setColor(lightShadow);
-                g.drawLine(x, y,   x+1, y);
-                g.drawLine(x, y+1, x+1, y+1);
-                if ( dx > 0 ) {
-                    g.setColor(fill);
-                    g.drawLine(x+2, y,   x+1+dx, y);
-                    g.drawLine(x+2, y+1, x+1+dx, y+1);
-                }
-                g.setColor(darkShadow);
-                g.drawLine(x+dx+2, y,   x+dx+3, y);
-                g.drawLine(x+dx+2, y+1, x+dx+3, y+1);
-                x += 1;
-                dx -= 2;
-            }
-
-            g.setColor(darkShadow);
-            g.drawLine(xo+(w/2), yo+h-1, xo+(w/2), yo+h-1);
-
-        }
-
-        public int getIconWidth() {
-            return 11;
-        }
-
-        public int getIconHeight() {
-            return 11;
-        }
-    }
-
-    /**
-     *{@inheritDoc}
-     *
-     * @since 1.6
-     */
-    protected PropertyChangeListener createPropertyChangeListener() {
-        return new MotifPropertyChangeListener();
-    }
-
-    /**
-     * This class should be made &quot;protected&quot; in future releases.
-     */
-    private class MotifPropertyChangeListener
-            extends BasicComboBoxUI.PropertyChangeHandler {
-        public void propertyChange(PropertyChangeEvent e) {
-            super.propertyChange(e);
-            String propertyName = e.getPropertyName();
-            if (propertyName == "enabled") {
-                if (comboBox.isEnabled()) {
-                    Component editor = motifGetEditor();
-                    if (editor != null) {
-                        editor.setBackground(UIManager.getColor("text"));
-                    }
-                }
-            }
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifDesktopIconUI.java b/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifDesktopIconUI.java
deleted file mode 100755
index a3ce690..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifDesktopIconUI.java
+++ /dev/null
@@ -1,365 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-package com.sun.java.swing.plaf.motif;
-
-import sun.swing.SwingUtilities2;
-import java.awt.*;
-import java.awt.event.*;
-import javax.swing.*;
-import javax.swing.border.*;
-import javax.swing.plaf.*;
-import javax.swing.plaf.basic.*;
-import java.beans.*;
-import java.util.EventListener;
-import java.io.Serializable;
-
-
-/**
- * Motif rendition of the component.
- *
- * @author Thomas Ball
- * @author Rich Schiavi
- */
-public class MotifDesktopIconUI extends BasicDesktopIconUI
-{
-    protected DesktopIconActionListener desktopIconActionListener;
-    protected DesktopIconMouseListener  desktopIconMouseListener;
-
-    protected Icon       defaultIcon;
-    protected IconButton iconButton;
-    protected IconLabel  iconLabel;
-
-    // This is only used for its system menu, but we need a reference to it so
-    // we can remove its listeners.
-    private MotifInternalFrameTitlePane sysMenuTitlePane;
-
-    JPopupMenu systemMenu;
-    EventListener mml;
-
-    final static int LABEL_HEIGHT = 18;
-    final static int LABEL_DIVIDER = 4;    // padding between icon and label
-
-    final static Font defaultTitleFont =
-        new Font(Font.SANS_SERIF, Font.PLAIN, 12);
-
-    public static ComponentUI createUI(JComponent c)    {
-        return new MotifDesktopIconUI();
-    }
-
-    public MotifDesktopIconUI() {
-    }
-
-    protected void installDefaults(){
-        super.installDefaults();
-        setDefaultIcon(UIManager.getIcon("DesktopIcon.icon"));
-        iconButton = createIconButton(defaultIcon);
-        // An underhanded way of creating a system popup menu.
-        sysMenuTitlePane =  new MotifInternalFrameTitlePane(frame);
-        systemMenu = sysMenuTitlePane.getSystemMenu();
-
-        MotifBorders.FrameBorder border = new MotifBorders.FrameBorder(desktopIcon);
-        desktopIcon.setLayout(new BorderLayout());
-        iconButton.setBorder(border);
-        desktopIcon.add(iconButton, BorderLayout.CENTER);
-        iconLabel = createIconLabel(frame);
-        iconLabel.setBorder(border);
-        desktopIcon.add(iconLabel, BorderLayout.SOUTH);
-        desktopIcon.setSize(desktopIcon.getPreferredSize());
-        desktopIcon.validate();
-        JLayeredPane.putLayer(desktopIcon, JLayeredPane.getLayer(frame));
-    }
-
-    protected void installComponents(){
-    }
-
-    protected void uninstallComponents(){
-    }
-
-    protected void installListeners(){
-        super.installListeners();
-        desktopIconActionListener = createDesktopIconActionListener();
-        desktopIconMouseListener = createDesktopIconMouseListener();
-        iconButton.addActionListener(desktopIconActionListener);
-        iconButton.addMouseListener(desktopIconMouseListener);
-        iconLabel.addMouseListener(desktopIconMouseListener);
-    }
-
-    JInternalFrame.JDesktopIcon getDesktopIcon(){
-      return desktopIcon;
-    }
-
-    void setDesktopIcon(JInternalFrame.JDesktopIcon d){
-      desktopIcon = d;
-    }
-
-    JInternalFrame getFrame(){
-      return frame;
-    }
-
-    void setFrame(JInternalFrame f){
-      frame = f ;
-    }
-
-    protected void showSystemMenu(){
-      systemMenu.show(iconButton, 0, getDesktopIcon().getHeight());
-    }
-
-    protected void hideSystemMenu(){
-      systemMenu.setVisible(false);
-    }
-
-    protected IconLabel createIconLabel(JInternalFrame frame){
-        return new IconLabel(frame);
-    }
-
-    protected IconButton createIconButton(Icon i){
-        return new IconButton(i);
-    }
-
-    protected DesktopIconActionListener createDesktopIconActionListener(){
-        return new DesktopIconActionListener();
-    }
-
-    protected DesktopIconMouseListener createDesktopIconMouseListener(){
-        return new DesktopIconMouseListener();
-    }
-
-    protected void uninstallDefaults(){
-        super.uninstallDefaults();
-        desktopIcon.setLayout(null);
-        desktopIcon.remove(iconButton);
-        desktopIcon.remove(iconLabel);
-    }
-
-    protected void uninstallListeners(){
-        super.uninstallListeners();
-        iconButton.removeActionListener(desktopIconActionListener);
-        iconButton.removeMouseListener(desktopIconMouseListener);
-        sysMenuTitlePane.uninstallListeners();
-    }
-
-    public Dimension getMinimumSize(JComponent c) {
-        JInternalFrame iframe = desktopIcon.getInternalFrame();
-
-        int w = defaultIcon.getIconWidth();
-        int h = defaultIcon.getIconHeight() + LABEL_HEIGHT + LABEL_DIVIDER;
-
-        Border border = iframe.getBorder();
-        if(border != null) {
-            w += border.getBorderInsets(iframe).left +
-                border.getBorderInsets(iframe).right;
-            h += border.getBorderInsets(iframe).bottom +
-                border.getBorderInsets(iframe).top;
-        }
-
-        return new Dimension(w, h);
-    }
-
-    public Dimension getPreferredSize(JComponent c) {
-        return getMinimumSize(c);
-    }
-
-    public Dimension getMaximumSize(JComponent c){
-        return getMinimumSize(c);
-    }
-
-    /**
-      * Returns the default desktop icon.
-      */
-    public Icon getDefaultIcon() {
-        return defaultIcon;
-    }
-
-    /**
-      * Sets the icon used as the default desktop icon.
-      */
-    public void setDefaultIcon(Icon newIcon) {
-        defaultIcon = newIcon;
-    }
-
-    protected class IconLabel extends JPanel {
-        JInternalFrame frame;
-
-        IconLabel(JInternalFrame f) {
-            super();
-            this.frame = f;
-            setFont(defaultTitleFont);
-
-            // Forward mouse events to titlebar for moves.
-            addMouseMotionListener(new MouseMotionListener() {
-                public void mouseDragged(MouseEvent e) {
-                    forwardEventToParent(e);
-                }
-                public void mouseMoved(MouseEvent e) {
-                    forwardEventToParent(e);
-                }
-            });
-            addMouseListener(new MouseListener() {
-                public void mouseClicked(MouseEvent e) {
-                    forwardEventToParent(e);
-                }
-                public void mousePressed(MouseEvent e) {
-                    forwardEventToParent(e);
-                }
-                public void mouseReleased(MouseEvent e) {
-                    forwardEventToParent(e);
-                }
-                public void mouseEntered(MouseEvent e) {
-                    forwardEventToParent(e);
-                }
-                public void mouseExited(MouseEvent e) {
-                    forwardEventToParent(e);
-                }
-            });
-        }
-
-        void forwardEventToParent(MouseEvent e) {
-            getParent().dispatchEvent(new MouseEvent(
-                getParent(), e.getID(), e.getWhen(), e.getModifiers(),
-                e.getX(), e.getY(), e.getXOnScreen(),
-                e.getYOnScreen(), e.getClickCount(),
-                e.isPopupTrigger(), MouseEvent.NOBUTTON));
-        }
-
-        public boolean isFocusTraversable() {
-            return false;
-        }
-
-        public Dimension getMinimumSize() {
-            return new Dimension(defaultIcon.getIconWidth() + 1,
-                                 LABEL_HEIGHT + LABEL_DIVIDER);
-        }
-
-        public Dimension getPreferredSize() {
-            String title = frame.getTitle();
-            FontMetrics fm = frame.getFontMetrics(defaultTitleFont);
-            int w = 4;
-            if (title != null) {
-                w += SwingUtilities2.stringWidth(frame, fm, title);
-            }
-            return new Dimension(w, LABEL_HEIGHT + LABEL_DIVIDER);
-        }
-
-        public void paint(Graphics g) {
-            super.paint(g);
-
-            // touch-up frame
-            int maxX = getWidth() - 1;
-            Color shadow =
-                UIManager.getColor("inactiveCaptionBorder").darker().darker();
-            g.setColor(shadow);
-            g.setClip(0, 0, getWidth(), getHeight());
-            g.drawLine(maxX - 1, 1, maxX - 1, 1);
-            g.drawLine(maxX, 0, maxX, 0);
-
-            // fill background
-            g.setColor(UIManager.getColor("inactiveCaption"));
-            g.fillRect(2, 1, maxX - 3, LABEL_HEIGHT + 1);
-
-            // draw text -- clipping to truncate text like CDE/Motif
-            g.setClip(2, 1, maxX - 4, LABEL_HEIGHT);
-            int y = LABEL_HEIGHT - SwingUtilities2.getFontMetrics(frame, g).
-                                                   getDescent();
-            g.setColor(UIManager.getColor("inactiveCaptionText"));
-            String title = frame.getTitle();
-            if (title != null) {
-                SwingUtilities2.drawString(frame, g, title, 4, y);
-            }
-        }
-    }
-
-    protected class IconButton extends JButton {
-        Icon icon;
-
-        IconButton(Icon icon) {
-            super(icon);
-            this.icon = icon;
-            // Forward mouse events to titlebar for moves.
-            addMouseMotionListener(new MouseMotionListener() {
-                public void mouseDragged(MouseEvent e) {
-                    forwardEventToParent(e);
-                }
-                public void mouseMoved(MouseEvent e) {
-                    forwardEventToParent(e);
-                }
-            });
-            addMouseListener(new MouseListener() {
-                public void mouseClicked(MouseEvent e) {
-                    forwardEventToParent(e);
-                }
-                public void mousePressed(MouseEvent e) {
-                    forwardEventToParent(e);
-                }
-                public void mouseReleased(MouseEvent e) {
-                    if (!systemMenu.isShowing()) {
-                        forwardEventToParent(e);
-                    }
-                }
-                public void mouseEntered(MouseEvent e) {
-                    forwardEventToParent(e);
-                }
-                public void mouseExited(MouseEvent e) {
-                    forwardEventToParent(e);
-                }
-            });
-        }
-
-        void forwardEventToParent(MouseEvent e) {
-            getParent().dispatchEvent(new MouseEvent(
-                getParent(), e.getID(), e.getWhen(), e.getModifiers(),
-                e.getX(), e.getY(), e.getXOnScreen(), e.getYOnScreen(),
-                e.getClickCount(), e.isPopupTrigger(), MouseEvent.NOBUTTON ));
-        }
-
-        public boolean isFocusTraversable() {
-            return false;
-        }
-    }
-
-
-    protected class DesktopIconActionListener implements ActionListener {
-        public void actionPerformed(ActionEvent e){
-            systemMenu.show(iconButton, 0, getDesktopIcon().getHeight());
-        }
-    }
-
-    protected class DesktopIconMouseListener extends MouseAdapter {
-        // if we drag or move we should deengage the popup
-        public void mousePressed(MouseEvent e){
-            if (e.getClickCount() > 1) {
-                try {
-                    getFrame().setIcon(false);
-                } catch (PropertyVetoException e2){ }
-                systemMenu.setVisible(false);
-                /* the mouse release will not get reported correctly,
-                   because the icon will no longer be in the hierarchy;
-                   maybe that should be fixed, but until it is, we need
-                   to do the required cleanup here. */
-                getFrame().getDesktopPane().getDesktopManager().endDraggingFrame((JComponent)e.getSource());
-            }
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifDesktopPaneUI.java b/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifDesktopPaneUI.java
deleted file mode 100755
index 122e1c6..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifDesktopPaneUI.java
+++ /dev/null
@@ -1,267 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-package com.sun.java.swing.plaf.motif;
-
-import javax.swing.*;
-import java.awt.Rectangle;
-import java.awt.Dimension;
-import java.awt.Insets;
-import java.awt.Color;
-import java.awt.Graphics;
-import java.awt.Component;
-import java.awt.Point;
-import javax.swing.plaf.*;
-import java.io.Serializable;
-
-/**
- * <p>
- * <strong>Warning:</strong>
- * Serialized objects of this class will not be compatible with
- * future Swing releases.  The current serialization support is appropriate
- * for short term storage or RMI between applications running the same
- * version of Swing.  A future release of Swing will provide support for
- * long term persistence.
- *
- * @author David Kloba
- */
-public class MotifDesktopPaneUI extends javax.swing.plaf.basic.BasicDesktopPaneUI
-{
-
-/// DesktopPaneUI methods
-    public static ComponentUI createUI(JComponent d)    {
-        return new MotifDesktopPaneUI();
-    }
-
-    public MotifDesktopPaneUI() {
-    }
-
-    protected void installDesktopManager() {
-        desktopManager = desktop.getDesktopManager();
-        if(desktopManager == null) {
-            desktopManager = new MotifDesktopManager();
-            desktop.setDesktopManager(desktopManager);
-            ((MotifDesktopManager)desktopManager).adjustIcons(desktop);
-        }
-    }
-
-    public Insets getInsets(JComponent c) {return new Insets(0,0,0,0);}
-
-////////////////////////////////////////////////////////////////////////////////////
-///  DragPane class
-////////////////////////////////////////////////////////////////////////////////////
-    private class DragPane extends JComponent {
-        public void paint(Graphics g) {
-            g.setColor(Color.darkGray);
-            g.drawRect(0, 0, getWidth()-1, getHeight()-1);
-        }
-    };
-
-////////////////////////////////////////////////////////////////////////////////////
-///  MotifDesktopManager class
-////////////////////////////////////////////////////////////////////////////////////
-    private class MotifDesktopManager extends DefaultDesktopManager implements Serializable, UIResource {
-        JComponent dragPane;
-        boolean usingDragPane = false;
-        private transient JLayeredPane layeredPaneForDragPane;
-        int iconWidth, iconHeight;
-
-    // PENDING(klobad) this should be optimized
-    public void setBoundsForFrame(JComponent f, int newX, int newY,
-                        int newWidth, int newHeight) {
-        if(!usingDragPane) {
-            boolean didResize;
-            didResize = (f.getWidth() != newWidth || f.getHeight() != newHeight);
-            Rectangle r = f.getBounds();
-            f.setBounds(newX, newY, newWidth, newHeight);
-            SwingUtilities.computeUnion(newX, newY, newWidth, newHeight, r);
-            f.getParent().repaint(r.x, r.y, r.width, r.height);
-            if(didResize) {
-                f.validate();
-            }
-        } else {
-            Rectangle r = dragPane.getBounds();
-            dragPane.setBounds(newX, newY, newWidth, newHeight);
-            SwingUtilities.computeUnion(newX, newY, newWidth, newHeight, r);
-            dragPane.getParent().repaint(r.x, r.y, r.width, r.height);
-        }
-    }
-
-    public void beginDraggingFrame(JComponent f) {
-        usingDragPane = false;
-        if(f.getParent() instanceof JLayeredPane) {
-            if(dragPane == null)
-                dragPane = new DragPane();
-            layeredPaneForDragPane = (JLayeredPane)f.getParent();
-            layeredPaneForDragPane.setLayer(dragPane, Integer.MAX_VALUE);
-            dragPane.setBounds(f.getX(), f.getY(), f.getWidth(), f.getHeight());
-            layeredPaneForDragPane.add(dragPane);
-            usingDragPane = true;
-        }
-    }
-
-    public void dragFrame(JComponent f, int newX, int newY) {
-        setBoundsForFrame(f, newX, newY, f.getWidth(), f.getHeight());
-    }
-
-    public void endDraggingFrame(JComponent f) {
-        if(usingDragPane) {
-            layeredPaneForDragPane.remove(dragPane);
-            usingDragPane = false;
-            if (f instanceof JInternalFrame) {
-                setBoundsForFrame(f, dragPane.getX(), dragPane.getY(),
-                        dragPane.getWidth(), dragPane.getHeight());
-            } else if (f instanceof JInternalFrame.JDesktopIcon) {
-                adjustBoundsForIcon((JInternalFrame.JDesktopIcon)f,
-                        dragPane.getX(), dragPane.getY());
-            }
-        }
-    }
-
-    public void beginResizingFrame(JComponent f, int direction) {
-        usingDragPane = false;
-        if(f.getParent() instanceof JLayeredPane) {
-            if(dragPane == null)
-                dragPane = new DragPane();
-            JLayeredPane p = (JLayeredPane)f.getParent();
-            p.setLayer(dragPane, Integer.MAX_VALUE);
-            dragPane.setBounds(f.getX(), f.getY(),
-                                f.getWidth(), f.getHeight());
-            p.add(dragPane);
-            usingDragPane = true;
-        }
-    }
-
-    public void resizeFrame(JComponent f, int newX, int newY,
-                                int newWidth, int newHeight) {
-        setBoundsForFrame(f, newX, newY, newWidth, newHeight);
-    }
-
-    public void endResizingFrame(JComponent f) {
-        if(usingDragPane) {
-            JLayeredPane p = (JLayeredPane)f.getParent();
-            p.remove(dragPane);
-            usingDragPane = false;
-            setBoundsForFrame(f, dragPane.getX(), dragPane.getY(),
-                                dragPane.getWidth(), dragPane.getHeight());
-        }
-    }
-
-        public void iconifyFrame(JInternalFrame f) {
-            JInternalFrame.JDesktopIcon icon = f.getDesktopIcon();
-            Point p = icon.getLocation();
-            adjustBoundsForIcon(icon, p.x, p.y);
-            super.iconifyFrame(f);
-        }
-
-        /**
-         * Change positions of icons in the desktop pane so that
-         * they do not overlap
-         */
-        protected void adjustIcons(JDesktopPane desktop) {
-            // We need to know Motif icon size
-            JInternalFrame.JDesktopIcon icon = new JInternalFrame.JDesktopIcon(
-                    new JInternalFrame());
-            Dimension iconSize = icon.getPreferredSize();
-            iconWidth = iconSize.width;
-            iconHeight = iconSize.height;
-
-            JInternalFrame[] frames = desktop.getAllFrames();
-            for (int i=0; i<frames.length; i++) {
-                icon = frames[i].getDesktopIcon();
-                Point ip = icon.getLocation();
-                adjustBoundsForIcon(icon, ip.x, ip.y);
-            }
-        }
-
-        /**
-         * Change positions of icon so that it doesn't overlap
-         * other icons.
-         */
-        protected void adjustBoundsForIcon(JInternalFrame.JDesktopIcon icon,
-                int x, int y) {
-            JDesktopPane c = icon.getDesktopPane();
-
-            int maxy = c.getHeight();
-            int w = iconWidth;
-            int h = iconHeight;
-            c.repaint(x, y, w, h);
-            x = x < 0 ? 0 : x;
-            y = y < 0 ? 0 : y;
-
-            /* Fix for disappearing icons. If the y value is maxy then this
-             * algorithm would place the icon in a non-displayed cell.  Never
-             * to be ssen again.*/
-            y = y >= maxy ? (maxy - 1) : y;
-
-            /* Compute the offset for the cell we are trying to go in. */
-            int lx = (x / w) * w;
-            int ygap = maxy % h;
-            int ly = ((y-ygap) / h) * h + ygap;
-
-            /* How far are we into the cell we dropped the icon in. */
-            int dx = x - lx;
-            int dy = y - ly;
-
-            /* Set coordinates for the icon. */
-            x = dx < w/2 ? lx: lx + w;
-            y = dy < h/2 ? ly: ((ly + h) < maxy ? ly + h: ly);
-
-            while (getIconAt(c, icon, x, y) != null) {
-                x += w;
-            }
-
-            /* Cancel the move if the x value was moved off screen. */
-            if (x > c.getWidth()) {
-                return;
-            }
-            if (icon.getParent() != null) {
-                setBoundsForFrame(icon, x, y, w, h);
-            } else {
-                icon.setLocation(x, y);
-            }
-        }
-
-        protected JInternalFrame.JDesktopIcon getIconAt(JDesktopPane desktop,
-            JInternalFrame.JDesktopIcon icon, int x, int y) {
-
-            JInternalFrame.JDesktopIcon currentIcon = null;
-            Component[] components = desktop.getComponents();
-
-            for (int i=0; i<components.length; i++) {
-                Component comp = components[i];
-                if (comp instanceof JInternalFrame.JDesktopIcon &&
-                    comp != icon) {
-
-                    Point p = comp.getLocation();
-                    if (p.x == x && p.y == y) {
-                        return (JInternalFrame.JDesktopIcon)comp;
-                    }
-                }
-            }
-            return null;
-        }
-    }; /// END of MotifDesktopManager
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifEditorPaneUI.java b/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifEditorPaneUI.java
deleted file mode 100755
index c7943df..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifEditorPaneUI.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (c) 1997, 1998, 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.java.swing.plaf.motif;
-
-import javax.swing.*;
-import javax.swing.text.*;
-import javax.swing.plaf.*;
-import javax.swing.plaf.basic.BasicEditorPaneUI;
-
-/**
- * Provides the look and feel for an pluggable content-type text editor.
- * <p>
- * <strong>Warning:</strong>
- * Serialized objects of this class will not be compatible with
- * future Swing releases.  The current serialization support is appropriate
- * for short term storage or RMI between applications running the same
- * version of Swing.  A future release of Swing will provide support for
- * long term persistence.
- *
- * @author  Timothy Prinzing
- */
-public class MotifEditorPaneUI extends BasicEditorPaneUI {
-
-    /**
-     * Creates a UI for the JTextPane.
-     *
-     * @param c the JTextPane component
-     * @return the UI
-     */
-    public static ComponentUI createUI(JComponent c) {
-        return new MotifEditorPaneUI();
-    }
-
-    /**
-     * Creates the object to use for a caret.  By default an
-     * instance of MotifTextUI.MotifCaret is created.  This method
-     * can be redefined to provide something else that implements
-     * the Caret interface.
-     *
-     * @return the caret object
-     */
-    protected Caret createCaret() {
-        return MotifTextUI.createCaret();
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifFileChooserUI.java b/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifFileChooserUI.java
deleted file mode 100755
index 9f2814e..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifFileChooserUI.java
+++ /dev/null
@@ -1,850 +0,0 @@
-/*
- * 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
- * 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.java.swing.plaf.motif;
-
-import javax.swing.*;
-import javax.swing.filechooser.*;
-import javax.swing.event.*;
-import javax.swing.plaf.*;
-import javax.swing.plaf.basic.*;
-import java.awt.*;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-import java.beans.*;
-import java.io.File;
-import java.io.IOException;
-import java.util.*;
-import sun.awt.shell.ShellFolder;
-import sun.swing.SwingUtilities2;
-
-/**
- * Motif FileChooserUI.
- *
- * @author Jeff Dinkins
- */
-public class MotifFileChooserUI extends BasicFileChooserUI {
-
-    private FilterComboBoxModel filterComboBoxModel;
-
-    protected JList directoryList = null;
-    protected JList fileList = null;
-
-    protected JTextField pathField = null;
-    protected JComboBox filterComboBox = null;
-    protected JTextField filenameTextField = null;
-
-    private static final Dimension hstrut10 = new Dimension(10, 1);
-    private static final Dimension vstrut10 = new Dimension(1, 10);
-
-    private static final Insets insets = new Insets(10, 10, 10, 10);
-
-    private static Dimension prefListSize = new Dimension(75, 150);
-
-    private static Dimension WITH_ACCELERATOR_PREF_SIZE = new Dimension(650, 450);
-    private static Dimension PREF_SIZE = new Dimension(350, 450);
-    private static Dimension MIN_SIZE = new Dimension(200, 300);
-
-    private static Dimension PREF_ACC_SIZE = new Dimension(10, 10);
-    private static Dimension ZERO_ACC_SIZE = new Dimension(1, 1);
-
-    private static Dimension MAX_SIZE = new Dimension(Short.MAX_VALUE, Short.MAX_VALUE);
-
-    private static final Insets buttonMargin = new Insets(3, 3, 3, 3);
-
-    private JPanel bottomPanel;
-
-    protected JButton approveButton;
-
-    private String enterFolderNameLabelText = null;
-    private int enterFolderNameLabelMnemonic = 0;
-    private String enterFileNameLabelText = null;
-    private int enterFileNameLabelMnemonic = 0;
-
-    private String filesLabelText = null;
-    private int filesLabelMnemonic = 0;
-
-    private String foldersLabelText = null;
-    private int foldersLabelMnemonic = 0;
-
-    private String pathLabelText = null;
-    private int pathLabelMnemonic = 0;
-
-    private String filterLabelText = null;
-    private int filterLabelMnemonic = 0;
-
-    private JLabel fileNameLabel;
-
-    private void populateFileNameLabel() {
-        if (getFileChooser().getFileSelectionMode() == JFileChooser.DIRECTORIES_ONLY) {
-            fileNameLabel.setText(enterFolderNameLabelText);
-            fileNameLabel.setDisplayedMnemonic(enterFolderNameLabelMnemonic);
-        } else {
-            fileNameLabel.setText(enterFileNameLabelText);
-            fileNameLabel.setDisplayedMnemonic(enterFileNameLabelMnemonic);
-        }
-    }
-
-    private String fileNameString(File file) {
-        if (file == null) {
-            return null;
-        } else {
-            JFileChooser fc = getFileChooser();
-            if (fc.isDirectorySelectionEnabled() && !fc.isFileSelectionEnabled()) {
-                return file.getPath();
-            } else {
-                return file.getName();
-            }
-        }
-    }
-
-    private String fileNameString(File[] files) {
-        StringBuffer buf = new StringBuffer();
-        for (int i = 0; files != null && i < files.length; i++) {
-            if (i > 0) {
-                buf.append(" ");
-            }
-            if (files.length > 1) {
-                buf.append("\"");
-            }
-            buf.append(fileNameString(files[i]));
-            if (files.length > 1) {
-                buf.append("\"");
-            }
-        }
-        return buf.toString();
-    }
-
-    public MotifFileChooserUI(JFileChooser filechooser) {
-        super(filechooser);
-    }
-
-    public String getFileName() {
-        if(filenameTextField != null) {
-            return filenameTextField.getText();
-        } else {
-            return null;
-        }
-    }
-
-    public void setFileName(String filename) {
-        if(filenameTextField != null) {
-            filenameTextField.setText(filename);
-        }
-    }
-
-    public String getDirectoryName() {
-        return pathField.getText();
-    }
-
-    public void setDirectoryName(String dirname) {
-        pathField.setText(dirname);
-    }
-
-    public void ensureFileIsVisible(JFileChooser fc, File f) {
-        // PENDING(jeff)
-    }
-
-    public void rescanCurrentDirectory(JFileChooser fc) {
-        getModel().validateFileCache();
-    }
-
-    public PropertyChangeListener createPropertyChangeListener(JFileChooser fc) {
-        return new PropertyChangeListener() {
-            public void propertyChange(PropertyChangeEvent e) {
-                String prop = e.getPropertyName();
-                if(prop.equals(JFileChooser.SELECTED_FILE_CHANGED_PROPERTY)) {
-                    File f = (File) e.getNewValue();
-                    if(f != null) {
-                        setFileName(getFileChooser().getName(f));
-                    }
-                } else if (prop.equals(JFileChooser.SELECTED_FILES_CHANGED_PROPERTY)) {
-                    File[] files = (File[]) e.getNewValue();
-                    JFileChooser fc = getFileChooser();
-                    if (files != null && files.length > 0 && (files.length > 1 || fc.isDirectorySelectionEnabled()
-                            || !files[0].isDirectory())) {
-                        setFileName(fileNameString(files));
-                    }
-                } else if (prop.equals(JFileChooser.FILE_FILTER_CHANGED_PROPERTY)) {
-                    fileList.clearSelection();
-                } else if(prop.equals(JFileChooser.DIRECTORY_CHANGED_PROPERTY)) {
-                    directoryList.clearSelection();
-                    ListSelectionModel sm = directoryList.getSelectionModel();
-                    if (sm instanceof DefaultListSelectionModel) {
-                        ((DefaultListSelectionModel)sm).moveLeadSelectionIndex(0);
-                        sm.setAnchorSelectionIndex(0);
-                    }
-                    fileList.clearSelection();
-                    sm = fileList.getSelectionModel();
-                    if (sm instanceof DefaultListSelectionModel) {
-                        ((DefaultListSelectionModel)sm).moveLeadSelectionIndex(0);
-                        sm.setAnchorSelectionIndex(0);
-                    }
-                    File currentDirectory = getFileChooser().getCurrentDirectory();
-                    if(currentDirectory != null) {
-                        try {
-                            setDirectoryName(ShellFolder.getNormalizedFile((File)e.getNewValue()).getPath());
-                        } catch (IOException ioe) {
-                            setDirectoryName(((File)e.getNewValue()).getAbsolutePath());
-                        }
-                        if ((getFileChooser().getFileSelectionMode() == JFileChooser.DIRECTORIES_ONLY) && !getFileChooser().isMultiSelectionEnabled()) {
-                            setFileName(getDirectoryName());
-                        }
-                    }
-                } else if(prop.equals(JFileChooser.FILE_SELECTION_MODE_CHANGED_PROPERTY)) {
-                    if (fileNameLabel != null) {
-                        populateFileNameLabel();
-                    }
-                    directoryList.clearSelection();
-                } else if (prop.equals(JFileChooser.MULTI_SELECTION_ENABLED_CHANGED_PROPERTY)) {
-                    if(getFileChooser().isMultiSelectionEnabled()) {
-                        fileList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
-                    } else {
-                        fileList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
-                        fileList.clearSelection();
-                        getFileChooser().setSelectedFiles(null);
-                    }
-                } else if (prop.equals(JFileChooser.ACCESSORY_CHANGED_PROPERTY)) {
-                    if(getAccessoryPanel() != null) {
-                        if(e.getOldValue() != null) {
-                            getAccessoryPanel().remove((JComponent) e.getOldValue());
-                        }
-                        JComponent accessory = (JComponent) e.getNewValue();
-                        if(accessory != null) {
-                            getAccessoryPanel().add(accessory, BorderLayout.CENTER);
-                            getAccessoryPanel().setPreferredSize(PREF_ACC_SIZE);
-                            getAccessoryPanel().setMaximumSize(MAX_SIZE);
-                        } else {
-                            getAccessoryPanel().setPreferredSize(ZERO_ACC_SIZE);
-                            getAccessoryPanel().setMaximumSize(ZERO_ACC_SIZE);
-                        }
-                    }
-                } else if (prop.equals(JFileChooser.APPROVE_BUTTON_TEXT_CHANGED_PROPERTY) ||
-                        prop.equals(JFileChooser.APPROVE_BUTTON_TOOL_TIP_TEXT_CHANGED_PROPERTY) ||
-                        prop.equals(JFileChooser.DIALOG_TYPE_CHANGED_PROPERTY)) {
-                    approveButton.setText(getApproveButtonText(getFileChooser()));
-                    approveButton.setToolTipText(getApproveButtonToolTipText(getFileChooser()));
-                } else if (prop.equals(JFileChooser.CONTROL_BUTTONS_ARE_SHOWN_CHANGED_PROPERTY)) {
-                    doControlButtonsChanged(e);
-                } else if (prop.equals("componentOrientation")) {
-                    ComponentOrientation o = (ComponentOrientation)e.getNewValue();
-                    JFileChooser cc = (JFileChooser)e.getSource();
-                    if (o != (ComponentOrientation)e.getOldValue()) {
-                        cc.applyComponentOrientation(o);
-                    }
-                }
-            }
-        };
-    }
-
-    //
-    // ComponentUI Interface Implementation methods
-    //
-    public static ComponentUI createUI(JComponent c) {
-        return new MotifFileChooserUI((JFileChooser)c);
-    }
-
-    public void installUI(JComponent c) {
-        super.installUI(c);
-    }
-
-    public void uninstallUI(JComponent c) {
-        c.removePropertyChangeListener(filterComboBoxModel);
-        approveButton.removeActionListener(getApproveSelectionAction());
-        filenameTextField.removeActionListener(getApproveSelectionAction());
-        super.uninstallUI(c);
-    }
-
-    public void installComponents(JFileChooser fc) {
-        fc.setLayout(new BorderLayout(10, 10));
-        fc.setAlignmentX(JComponent.CENTER_ALIGNMENT);
-
-        JPanel interior = new JPanel() {
-            public Insets getInsets() {
-                return insets;
-            }
-        };
-        interior.setInheritsPopupMenu(true);
-        align(interior);
-        interior.setLayout(new BoxLayout(interior, BoxLayout.PAGE_AXIS));
-
-        fc.add(interior, BorderLayout.CENTER);
-
-        // PENDING(jeff) - I18N
-        JLabel l = new JLabel(pathLabelText);
-        l.setDisplayedMnemonic(pathLabelMnemonic);
-        align(l);
-        interior.add(l);
-
-        File currentDirectory = fc.getCurrentDirectory();
-        String curDirName = null;
-        if(currentDirectory != null) {
-            curDirName = currentDirectory.getPath();
-        }
-        pathField = new JTextField(curDirName) {
-            public Dimension getMaximumSize() {
-                Dimension d = super.getMaximumSize();
-                d.height = getPreferredSize().height;
-                return d;
-            }
-        };
-        pathField.setInheritsPopupMenu(true);
-        l.setLabelFor(pathField);
-        align(pathField);
-
-        // Change to folder on return
-        pathField.addActionListener(getUpdateAction());
-        interior.add(pathField);
-
-        interior.add(Box.createRigidArea(vstrut10));
-
-
-        // CENTER: left, right accessory
-        JPanel centerPanel = new JPanel();
-        centerPanel.setLayout(new BoxLayout(centerPanel, BoxLayout.LINE_AXIS));
-        align(centerPanel);
-
-        // left panel - Filter & folderList
-        JPanel leftPanel = new JPanel();
-        leftPanel.setLayout(new BoxLayout(leftPanel, BoxLayout.PAGE_AXIS));
-        align(leftPanel);
-
-        // add the filter PENDING(jeff) - I18N
-        l = new JLabel(filterLabelText);
-        l.setDisplayedMnemonic(filterLabelMnemonic);
-        align(l);
-        leftPanel.add(l);
-
-        filterComboBox = new JComboBox() {
-            public Dimension getMaximumSize() {
-                Dimension d = super.getMaximumSize();
-                d.height = getPreferredSize().height;
-                return d;
-            }
-        };
-        filterComboBox.setInheritsPopupMenu(true);
-        l.setLabelFor(filterComboBox);
-        filterComboBoxModel = createFilterComboBoxModel();
-        filterComboBox.setModel(filterComboBoxModel);
-        filterComboBox.setRenderer(createFilterComboBoxRenderer());
-        fc.addPropertyChangeListener(filterComboBoxModel);
-        align(filterComboBox);
-        leftPanel.add(filterComboBox);
-
-        // leftPanel.add(Box.createRigidArea(vstrut10));
-
-        // Add the Folder List PENDING(jeff) - I18N
-        l = new JLabel(foldersLabelText);
-        l.setDisplayedMnemonic(foldersLabelMnemonic);
-        align(l);
-        leftPanel.add(l);
-        JScrollPane sp = createDirectoryList();
-        sp.getVerticalScrollBar().setFocusable(false);
-        sp.getHorizontalScrollBar().setFocusable(false);
-        sp.setInheritsPopupMenu(true);
-        l.setLabelFor(sp.getViewport().getView());
-        leftPanel.add(sp);
-        leftPanel.setInheritsPopupMenu(true);
-
-
-        // create files list
-        JPanel rightPanel = new JPanel();
-        align(rightPanel);
-        rightPanel.setLayout(new BoxLayout(rightPanel, BoxLayout.PAGE_AXIS));
-        rightPanel.setInheritsPopupMenu(true);
-
-        l = new JLabel(filesLabelText);
-        l.setDisplayedMnemonic(filesLabelMnemonic);
-        align(l);
-        rightPanel.add(l);
-        sp = createFilesList();
-        l.setLabelFor(sp.getViewport().getView());
-        rightPanel.add(sp);
-        sp.setInheritsPopupMenu(true);
-
-        centerPanel.add(leftPanel);
-        centerPanel.add(Box.createRigidArea(hstrut10));
-        centerPanel.add(rightPanel);
-        centerPanel.setInheritsPopupMenu(true);
-
-        JComponent accessoryPanel = getAccessoryPanel();
-        JComponent accessory = fc.getAccessory();
-        if(accessoryPanel != null) {
-            if(accessory == null) {
-                accessoryPanel.setPreferredSize(ZERO_ACC_SIZE);
-                accessoryPanel.setMaximumSize(ZERO_ACC_SIZE);
-            } else {
-                getAccessoryPanel().add(accessory, BorderLayout.CENTER);
-                accessoryPanel.setPreferredSize(PREF_ACC_SIZE);
-                accessoryPanel.setMaximumSize(MAX_SIZE);
-            }
-            align(accessoryPanel);
-            centerPanel.add(accessoryPanel);
-            accessoryPanel.setInheritsPopupMenu(true);
-        }
-        interior.add(centerPanel);
-        interior.add(Box.createRigidArea(vstrut10));
-
-        // add the filename field PENDING(jeff) - I18N
-        fileNameLabel = new JLabel();
-        populateFileNameLabel();
-        align(fileNameLabel);
-        interior.add(fileNameLabel);
-
-        filenameTextField = new JTextField() {
-            public Dimension getMaximumSize() {
-                Dimension d = super.getMaximumSize();
-                d.height = getPreferredSize().height;
-                return d;
-            }
-        };
-        filenameTextField.setInheritsPopupMenu(true);
-        fileNameLabel.setLabelFor(filenameTextField);
-        filenameTextField.addActionListener(getApproveSelectionAction());
-        align(filenameTextField);
-        filenameTextField.setAlignmentX(JComponent.LEFT_ALIGNMENT);
-        interior.add(filenameTextField);
-
-        bottomPanel = getBottomPanel();
-        bottomPanel.add(new JSeparator(), BorderLayout.NORTH);
-
-        // Add buttons
-        JPanel buttonPanel = new JPanel();
-        align(buttonPanel);
-        buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.LINE_AXIS));
-        buttonPanel.add(Box.createGlue());
-
-        approveButton = new JButton(getApproveButtonText(fc)) {
-            public Dimension getMaximumSize() {
-                return new Dimension(MAX_SIZE.width, this.getPreferredSize().height);
-            }
-        };
-        approveButton.setMnemonic(getApproveButtonMnemonic(fc));
-        approveButton.setToolTipText(getApproveButtonToolTipText(fc));
-        approveButton.setInheritsPopupMenu(true);
-        align(approveButton);
-        approveButton.setMargin(buttonMargin);
-        approveButton.addActionListener(getApproveSelectionAction());
-        buttonPanel.add(approveButton);
-        buttonPanel.add(Box.createGlue());
-
-        JButton updateButton = new JButton(updateButtonText) {
-            public Dimension getMaximumSize() {
-                return new Dimension(MAX_SIZE.width, this.getPreferredSize().height);
-            }
-        };
-        updateButton.setMnemonic(updateButtonMnemonic);
-        updateButton.setToolTipText(updateButtonToolTipText);
-        updateButton.setInheritsPopupMenu(true);
-        align(updateButton);
-        updateButton.setMargin(buttonMargin);
-        updateButton.addActionListener(getUpdateAction());
-        buttonPanel.add(updateButton);
-        buttonPanel.add(Box.createGlue());
-
-        JButton cancelButton = new JButton(cancelButtonText) {
-            public Dimension getMaximumSize() {
-                return new Dimension(MAX_SIZE.width, this.getPreferredSize().height);
-            }
-        };
-        cancelButton.setMnemonic(cancelButtonMnemonic);
-        cancelButton.setToolTipText(cancelButtonToolTipText);
-        cancelButton.setInheritsPopupMenu(true);
-        align(cancelButton);
-        cancelButton.setMargin(buttonMargin);
-        cancelButton.addActionListener(getCancelSelectionAction());
-        buttonPanel.add(cancelButton);
-        buttonPanel.add(Box.createGlue());
-
-        JButton helpButton = new JButton(helpButtonText) {
-            public Dimension getMaximumSize() {
-                return new Dimension(MAX_SIZE.width, this.getPreferredSize().height);
-            }
-        };
-        helpButton.setMnemonic(helpButtonMnemonic);
-        helpButton.setToolTipText(helpButtonToolTipText);
-        align(helpButton);
-        helpButton.setMargin(buttonMargin);
-        helpButton.setEnabled(false);
-        helpButton.setInheritsPopupMenu(true);
-        buttonPanel.add(helpButton);
-        buttonPanel.add(Box.createGlue());
-        buttonPanel.setInheritsPopupMenu(true);
-
-        bottomPanel.add(buttonPanel, BorderLayout.SOUTH);
-        bottomPanel.setInheritsPopupMenu(true);
-        if (fc.getControlButtonsAreShown()) {
-           fc.add(bottomPanel, BorderLayout.SOUTH);
-        }
-    }
-
-    protected JPanel getBottomPanel() {
-        if (bottomPanel == null) {
-            bottomPanel = new JPanel(new BorderLayout(0, 4));
-        }
-        return bottomPanel;
-    }
-
-    private void doControlButtonsChanged(PropertyChangeEvent e) {
-        if (getFileChooser().getControlButtonsAreShown()) {
-            getFileChooser().add(bottomPanel,BorderLayout.SOUTH);
-        } else {
-            getFileChooser().remove(getBottomPanel());
-        }
-    }
-
-    public void uninstallComponents(JFileChooser fc) {
-        fc.removeAll();
-        bottomPanel = null;
-        if (filterComboBoxModel != null) {
-            fc.removePropertyChangeListener(filterComboBoxModel);
-        }
-    }
-
-    protected void installStrings(JFileChooser fc) {
-        super.installStrings(fc);
-
-        Locale l = fc.getLocale();
-
-        enterFolderNameLabelText = UIManager.getString("FileChooser.enterFolderNameLabelText",l);
-        enterFolderNameLabelMnemonic = getMnemonic("FileChooser.enterFolderNameLabelMnemonic", l);
-        enterFileNameLabelText = UIManager.getString("FileChooser.enterFileNameLabelText",l);
-        enterFileNameLabelMnemonic = getMnemonic("FileChooser.enterFileNameLabelMnemonic", l);
-
-        filesLabelText = UIManager.getString("FileChooser.filesLabelText",l);
-        filesLabelMnemonic = getMnemonic("FileChooser.filesLabelMnemonic", l);
-
-        foldersLabelText = UIManager.getString("FileChooser.foldersLabelText",l);
-        foldersLabelMnemonic = getMnemonic("FileChooser.foldersLabelMnemonic", l);
-
-        pathLabelText = UIManager.getString("FileChooser.pathLabelText",l);
-        pathLabelMnemonic = getMnemonic("FileChooser.pathLabelMnemonic", l);
-
-        filterLabelText = UIManager.getString("FileChooser.filterLabelText",l);
-        filterLabelMnemonic = getMnemonic("FileChooser.filterLabelMnemonic", l);
-    }
-
-    private Integer getMnemonic(String key, Locale l) {
-        return SwingUtilities2.getUIDefaultsInt(key, l);
-    }
-
-    protected void installIcons(JFileChooser fc) {
-        // Since motif doesn't have button icons, leave this empty
-        // which overrides the supertype icon loading
-    }
-
-    protected void uninstallIcons(JFileChooser fc) {
-        // Since motif doesn't have button icons, leave this empty
-        // which overrides the supertype icon loading
-    }
-
-    protected JScrollPane createFilesList() {
-        fileList = new JList();
-
-        if(getFileChooser().isMultiSelectionEnabled()) {
-            fileList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
-        } else {
-            fileList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
-        }
-
-        fileList.setModel(new MotifFileListModel());
-        fileList.getSelectionModel().removeSelectionInterval(0, 0);
-        fileList.setCellRenderer(new FileCellRenderer());
-        fileList.addListSelectionListener(createListSelectionListener(getFileChooser()));
-        fileList.addMouseListener(createDoubleClickListener(getFileChooser(), fileList));
-        fileList.addMouseListener(new MouseAdapter() {
-            public void mouseClicked(MouseEvent e) {
-                JFileChooser chooser = getFileChooser();
-                if (SwingUtilities.isLeftMouseButton(e) && !chooser.isMultiSelectionEnabled()) {
-                    int index = SwingUtilities2.loc2IndexFileList(fileList, e.getPoint());
-                    if (index >= 0) {
-                        File file = (File) fileList.getModel().getElementAt(index);
-                        setFileName(chooser.getName(file));
-                    }
-                }
-            }
-        });
-        align(fileList);
-        JScrollPane scrollpane = new JScrollPane(fileList);
-        scrollpane.setPreferredSize(prefListSize);
-        scrollpane.setMaximumSize(MAX_SIZE);
-        align(scrollpane);
-        fileList.setInheritsPopupMenu(true);
-        scrollpane.setInheritsPopupMenu(true);
-        return scrollpane;
-    }
-
-    protected JScrollPane createDirectoryList() {
-        directoryList = new JList();
-        align(directoryList);
-
-        directoryList.setCellRenderer(new DirectoryCellRenderer());
-        directoryList.setModel(new MotifDirectoryListModel());
-        directoryList.getSelectionModel().removeSelectionInterval(0, 0);
-        directoryList.addMouseListener(createDoubleClickListener(getFileChooser(), directoryList));
-        directoryList.addListSelectionListener(createListSelectionListener(getFileChooser()));
-        directoryList.setInheritsPopupMenu(true);
-
-        JScrollPane scrollpane = new JScrollPane(directoryList);
-        scrollpane.setMaximumSize(MAX_SIZE);
-        scrollpane.setPreferredSize(prefListSize);
-        scrollpane.setInheritsPopupMenu(true);
-        align(scrollpane);
-        return scrollpane;
-    }
-
-    public Dimension getPreferredSize(JComponent c) {
-        Dimension prefSize =
-            (getFileChooser().getAccessory() != null) ? WITH_ACCELERATOR_PREF_SIZE : PREF_SIZE;
-        Dimension d = c.getLayout().preferredLayoutSize(c);
-        if (d != null) {
-            return new Dimension(d.width < prefSize.width ? prefSize.width : d.width,
-                                 d.height < prefSize.height ? prefSize.height : d.height);
-        } else {
-            return prefSize;
-        }
-    }
-
-    public Dimension getMinimumSize(JComponent x)  {
-        return MIN_SIZE;
-    }
-
-    public Dimension getMaximumSize(JComponent x) {
-        return new Dimension(Integer.MAX_VALUE, Integer.MAX_VALUE);
-    }
-
-    protected void align(JComponent c) {
-        c.setAlignmentX(JComponent.LEFT_ALIGNMENT);
-        c.setAlignmentY(JComponent.TOP_ALIGNMENT);
-    }
-
-    protected class FileCellRenderer extends DefaultListCellRenderer  {
-        public Component getListCellRendererComponent(JList list, Object value, int index,
-                                                      boolean isSelected, boolean cellHasFocus) {
-
-            super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
-            setText(getFileChooser().getName((File) value));
-            setInheritsPopupMenu(true);
-            return this;
-        }
-    }
-
-    protected class DirectoryCellRenderer extends DefaultListCellRenderer  {
-        public Component getListCellRendererComponent(JList list, Object value, int index,
-                                                      boolean isSelected, boolean cellHasFocus) {
-
-            super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
-            setText(getFileChooser().getName((File) value));
-            setInheritsPopupMenu(true);
-            return this;
-        }
-    }
-
-    protected class MotifDirectoryListModel extends AbstractListModel implements ListDataListener {
-        public MotifDirectoryListModel() {
-            getModel().addListDataListener(this);
-        }
-
-        public int getSize() {
-            return getModel().getDirectories().size();
-        }
-
-        public Object getElementAt(int index) {
-            return getModel().getDirectories().elementAt(index);
-        }
-
-        public void intervalAdded(ListDataEvent e) {
-            fireIntervalAdded(this, e.getIndex0(), e.getIndex1());
-        }
-
-        public void intervalRemoved(ListDataEvent e) {
-            fireIntervalRemoved(this, e.getIndex0(), e.getIndex1());
-        }
-
-        // PENDING(jeff) - this is inefficient - should sent out
-        // incremental adjustment values instead of saying that the
-        // whole list has changed.
-        public void fireContentsChanged() {
-            fireContentsChanged(this, 0, getModel().getDirectories().size()-1);
-        }
-
-        // PENDING(jeff) - fire the correct interval changed - currently sending
-        // out that everything has changed
-        public void contentsChanged(ListDataEvent e) {
-            fireContentsChanged();
-        }
-
-    }
-
-    protected class MotifFileListModel extends AbstractListModel implements ListDataListener {
-        public MotifFileListModel() {
-            getModel().addListDataListener(this);
-        }
-
-        public int getSize() {
-            return getModel().getFiles().size();
-        }
-
-        public boolean contains(Object o) {
-            return getModel().getFiles().contains(o);
-        }
-
-        public int indexOf(Object o) {
-            return getModel().getFiles().indexOf(o);
-        }
-
-        public Object getElementAt(int index) {
-            return getModel().getFiles().elementAt(index);
-        }
-
-        public void intervalAdded(ListDataEvent e) {
-            fireIntervalAdded(this, e.getIndex0(), e.getIndex1());
-        }
-
-        public void intervalRemoved(ListDataEvent e) {
-            fireIntervalRemoved(this, e.getIndex0(), e.getIndex1());
-        }
-
-        // PENDING(jeff) - this is inefficient - should sent out
-        // incremental adjustment values instead of saying that the
-        // whole list has changed.
-        public void fireContentsChanged() {
-            fireContentsChanged(this, 0, getModel().getFiles().size()-1);
-        }
-
-        // PENDING(jeff) - fire the interval changed
-        public void contentsChanged(ListDataEvent e) {
-            fireContentsChanged();
-        }
-
-    }
-
-    //
-    // DataModel for Types Comboxbox
-    //
-    protected FilterComboBoxModel createFilterComboBoxModel() {
-        return new FilterComboBoxModel();
-    }
-
-    //
-    // Renderer for Types ComboBox
-    //
-    protected FilterComboBoxRenderer createFilterComboBoxRenderer() {
-        return new FilterComboBoxRenderer();
-    }
-
-
-    /**
-     * Render different type sizes and styles.
-     */
-    public class FilterComboBoxRenderer extends DefaultListCellRenderer {
-        public Component getListCellRendererComponent(JList list,
-            Object value, int index, boolean isSelected,
-            boolean cellHasFocus) {
-
-            super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
-
-            if (value != null && value instanceof FileFilter) {
-                setText(((FileFilter)value).getDescription());
-            }
-
-            return this;
-        }
-    }
-
-    /**
-     * Data model for a type-face selection combo-box.
-     */
-    protected class FilterComboBoxModel extends AbstractListModel implements ComboBoxModel, PropertyChangeListener {
-        protected FileFilter[] filters;
-        protected FilterComboBoxModel() {
-            super();
-            filters = getFileChooser().getChoosableFileFilters();
-        }
-
-        public void propertyChange(PropertyChangeEvent e) {
-            String prop = e.getPropertyName();
-            if(prop.equals(JFileChooser.CHOOSABLE_FILE_FILTER_CHANGED_PROPERTY)) {
-                filters = (FileFilter[]) e.getNewValue();
-                fireContentsChanged(this, -1, -1);
-            } else if (prop.equals(JFileChooser.FILE_FILTER_CHANGED_PROPERTY)) {
-                fireContentsChanged(this, -1, -1);
-            }
-        }
-
-        public void setSelectedItem(Object filter) {
-            if(filter != null) {
-                getFileChooser().setFileFilter((FileFilter) filter);
-                fireContentsChanged(this, -1, -1);
-            }
-        }
-
-        public Object getSelectedItem() {
-            // Ensure that the current filter is in the list.
-            // NOTE: we shouldnt' have to do this, since JFileChooser adds
-            // the filter to the choosable filters list when the filter
-            // is set. Lets be paranoid just in case someone overrides
-            // setFileFilter in JFileChooser.
-            FileFilter currentFilter = getFileChooser().getFileFilter();
-            boolean found = false;
-            if(currentFilter != null) {
-                for (FileFilter filter : filters) {
-                    if (filter == currentFilter) {
-                        found = true;
-                    }
-                }
-                if (!found) {
-                    getFileChooser().addChoosableFileFilter(currentFilter);
-                }
-            }
-            return getFileChooser().getFileFilter();
-        }
-
-        public int getSize() {
-            if(filters != null) {
-                return filters.length;
-            } else {
-                return 0;
-            }
-        }
-
-        public Object getElementAt(int index) {
-            if(index > getSize() - 1) {
-                // This shouldn't happen. Try to recover gracefully.
-                return getFileChooser().getFileFilter();
-            }
-            if(filters != null) {
-                return filters[index];
-            } else {
-                return null;
-            }
-        }
-    }
-
-    protected JButton getApproveButton(JFileChooser fc) {
-        return approveButton;
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifGraphicsUtils.java b/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifGraphicsUtils.java
deleted file mode 100755
index 47bed21..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifGraphicsUtils.java
+++ /dev/null
@@ -1,476 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-package com.sun.java.swing.plaf.motif;
-
-import sun.swing.SwingUtilities2;
-
-import javax.swing.*;
-import java.awt.Color;
-import java.awt.Dimension;
-import java.awt.Graphics;
-import java.awt.Font;
-import java.awt.FontMetrics;
-import java.awt.Rectangle;
-import java.awt.Component;
-import java.awt.Insets;
-import java.awt.event.KeyEvent;
-import java.awt.Container;
-
-import javax.swing.plaf.basic.*;
-import javax.swing.text.View;
-
-/*
- * @author Jeff Dinkins
- * @author Dave Kloba
- */
-
-public class MotifGraphicsUtils implements SwingConstants
-{
-    /* Client Property keys for text and accelerator text widths */
-    private static final String MAX_ACC_WIDTH  =  "maxAccWidth";
-
-    /**
-     * Draws the point (<b>x</b>, <b>y</b>) in the current color.
-     */
-    static void drawPoint(Graphics g, int x, int y) {
-        g.drawLine(x, y, x, y);
-    }
-
-    /*
-     * Convenience method for drawing a grooved line
-     *
-     */
-    public static void drawGroove(Graphics g, int x, int y, int w, int h,
-                                  Color shadow, Color highlight)
-    {
-        Color oldColor = g.getColor();  // Make no net change to g
-        g.translate(x, y);
-
-        g.setColor(shadow);
-        g.drawRect(0, 0, w-2, h-2);
-
-        g.setColor(highlight);
-        g.drawLine(1, h-3, 1, 1);
-        g.drawLine(1, 1, w-3, 1);
-
-        g.drawLine(0, h-1, w-1, h-1);
-        g.drawLine(w-1, h-1, w-1, 0);
-
-        g.translate(-x, -y);
-        g.setColor(oldColor);
-    }
-
-    /** Draws <b>aString</b> in the rectangle defined by
-      * (<b>x</b>, <b>y</b>, <b>width</b>, <b>height</b>).
-      * <b>justification</b> specifies the text's justification, one of
-      * LEFT, CENTER, or RIGHT.
-      * <b>drawStringInRect()</b> does not clip to the rectangle, but instead
-      * uses this rectangle and the desired justification to compute the point
-      * at which to begin drawing the text.
-      * @see #drawString
-      */
-    public static void drawStringInRect(Graphics g, String aString, int x, int y,
-                                 int width, int height, int justification) {
-        drawStringInRect(null, g, aString, x, y, width, height, justification);
-    }
-
-    static void drawStringInRect(JComponent c, Graphics g, String aString,
-                                 int x, int y, int width, int height,
-                                 int justification) {
-        FontMetrics  fontMetrics;
-        int          drawWidth, startX, startY, delta;
-
-        if (g.getFont() == null) {
-//            throw new InconsistencyException("No font set");
-            return;
-        }
-        fontMetrics = SwingUtilities2.getFontMetrics(c, g);
-        if (fontMetrics == null) {
-//            throw new InconsistencyException("No metrics for Font " + font());
-            return;
-        }
-
-        if (justification == CENTER) {
-            drawWidth = SwingUtilities2.stringWidth(c, fontMetrics, aString);
-            if (drawWidth > width) {
-                drawWidth = width;
-            }
-            startX = x + (width - drawWidth) / 2;
-        } else if (justification == RIGHT) {
-            drawWidth = SwingUtilities2.stringWidth(c, fontMetrics, aString);
-            if (drawWidth > width) {
-                drawWidth = width;
-            }
-            startX = x + width - drawWidth;
-        } else {
-            startX = x;
-        }
-
-        delta = (height - fontMetrics.getAscent() - fontMetrics.getDescent()) / 2;
-        if (delta < 0) {
-            delta = 0;
-        }
-
-        startY = y + height - delta - fontMetrics.getDescent();
-
-        SwingUtilities2.drawString(c, g, aString, startX, startY);
-    }
-
-  /**
-   * This method is not being used to paint menu item since
-   * 6.0 This code left for compatibility only. Do not use or
-   * override it, this will not cause any visible effect.
-   */
-  public static void paintMenuItem(Graphics g, JComponent c,
-                                   Icon checkIcon, Icon arrowIcon,
-                                   Color background, Color foreground,
-                                   int defaultTextIconGap)
-    {
-
-        JMenuItem b = (JMenuItem) c;
-        ButtonModel model = b.getModel();
-
-        Dimension size = b.getSize();
-        Insets i = c.getInsets();
-
-        Rectangle viewRect = new Rectangle(size);
-
-        viewRect.x += i.left;
-        viewRect.y += i.top;
-        viewRect.width -= (i.right + viewRect.x);
-        viewRect.height -= (i.bottom + viewRect.y);
-
-        Rectangle iconRect = new Rectangle();
-        Rectangle textRect = new Rectangle();
-        Rectangle acceleratorRect = new Rectangle();
-        Rectangle checkRect = new Rectangle();
-        Rectangle arrowRect = new Rectangle();
-
-        Font holdf = g.getFont();
-        Font f = c.getFont();
-        g.setFont(f);
-        FontMetrics fm = SwingUtilities2.getFontMetrics(c, g, f);
-        FontMetrics fmAccel = SwingUtilities2.getFontMetrics(
-            c, g, UIManager.getFont("MenuItem.acceleratorFont"));
-
-        if (c.isOpaque()) {
-            if (model.isArmed()|| (c instanceof JMenu && model.isSelected())) {
-                g.setColor(background);
-            } else {
-                g.setColor(c.getBackground());
-            }
-            g.fillRect(0,0, size.width, size.height);
-        }
-
-        // get Accelerator text
-        KeyStroke accelerator =  b.getAccelerator();
-        String acceleratorText = "";
-        if (accelerator != null) {
-            int modifiers = accelerator.getModifiers();
-            if (modifiers > 0) {
-                acceleratorText = KeyEvent.getKeyModifiersText(modifiers);
-                acceleratorText += "+";
-            }
-            acceleratorText += KeyEvent.getKeyText(accelerator.getKeyCode());
-        }
-
-        // layout the text and icon
-        String text = layoutMenuItem(c, fm, b.getText(), fmAccel,
-                                     acceleratorText, b.getIcon(),
-                                     checkIcon, arrowIcon,
-                                     b.getVerticalAlignment(),
-                                     b.getHorizontalAlignment(),
-                                     b.getVerticalTextPosition(),
-                                     b.getHorizontalTextPosition(),
-                                     viewRect, iconRect,
-                                     textRect, acceleratorRect,
-                                     checkRect, arrowRect,
-                                     b.getText() == null
-                                     ? 0 : defaultTextIconGap,
-                                     defaultTextIconGap
-                                     );
-
-        // Paint the Check
-        Color holdc = g.getColor();
-        if (checkIcon != null) {
-            if(model.isArmed() || (c instanceof JMenu && model.isSelected()))
-                g.setColor(foreground);
-            checkIcon.paintIcon(c, g, checkRect.x, checkRect.y);
-            g.setColor(holdc);
-        }
-
-        // Paint the Icon
-        if(b.getIcon() != null) {
-            Icon icon;
-            if(!model.isEnabled()) {
-                icon = b.getDisabledIcon();
-            } else if(model.isPressed() && model.isArmed()) {
-                icon = b.getPressedIcon();
-                if(icon == null) {
-                    // Use default icon
-                    icon = b.getIcon();
-                }
-            } else {
-                icon = b.getIcon();
-            }
-
-            if (icon!=null) {
-                icon.paintIcon(c, g, iconRect.x, iconRect.y);
-            }
-        }
-
-        // Draw the Text
-        if(text != null && !text.equals("")) {
-            // Once BasicHTML becomes public, use BasicHTML.propertyKey
-            // instead of the hardcoded string below!
-            View v = (View) c.getClientProperty("html");
-            if (v != null) {
-                v.paint(g, textRect);
-            } else {
-                int mnemIndex = b.getDisplayedMnemonicIndex();
-
-                if(!model.isEnabled()) {
-                    // *** paint the text disabled
-                    g.setColor(b.getBackground().brighter());
-                    SwingUtilities2.drawStringUnderlineCharAt(b, g,text,
-                        mnemIndex,
-                        textRect.x, textRect.y + fmAccel.getAscent());
-                    g.setColor(b.getBackground().darker());
-                    SwingUtilities2.drawStringUnderlineCharAt(b, g,text,
-                        mnemIndex,
-                        textRect.x - 1, textRect.y + fmAccel.getAscent() - 1);
-
-                } else {
-                    // *** paint the text normally
-                    if (model.isArmed()|| (c instanceof JMenu && model.isSelected())) {
-                        g.setColor(foreground);
-                    } else {
-                        g.setColor(b.getForeground());
-                    }
-                    SwingUtilities2.drawStringUnderlineCharAt(b, g,text,
-                                                  mnemIndex,
-                                                  textRect.x,
-                                                  textRect.y + fm.getAscent());
-                }
-            }
-        }
-
-        // Draw the Accelerator Text
-        if(acceleratorText != null && !acceleratorText.equals("")) {
-
-            //Get the maxAccWidth from the parent to calculate the offset.
-            int accOffset = 0;
-            Container parent = b.getParent();
-            if (parent != null && parent instanceof JComponent) {
-                JComponent p = (JComponent) parent;
-                Integer maxValueInt = (Integer) p.getClientProperty(MotifGraphicsUtils.MAX_ACC_WIDTH);
-                int maxValue = maxValueInt != null ?
-                    maxValueInt.intValue() : acceleratorRect.width;
-
-                //Calculate the offset, with which the accelerator texts will be drawn with.
-                accOffset = maxValue - acceleratorRect.width;
-            }
-
-            g.setFont( UIManager.getFont("MenuItem.acceleratorFont") );
-            if(!model.isEnabled()) {
-                // *** paint the acceleratorText disabled
-                g.setColor(b.getBackground().brighter());
-                SwingUtilities2.drawString(c, g,acceleratorText,
-                                              acceleratorRect.x - accOffset, acceleratorRect.y + fm.getAscent());
-                g.setColor(b.getBackground().darker());
-                SwingUtilities2.drawString(c, g,acceleratorText,
-                                              acceleratorRect.x - accOffset - 1, acceleratorRect.y + fm.getAscent() - 1);
-            } else {
-                // *** paint the acceleratorText normally
-                if (model.isArmed()|| (c instanceof JMenu && model.isSelected()))
-                    {
-                        g.setColor(foreground);
-                    } else {
-                        g.setColor(b.getForeground());
-                    }
-                SwingUtilities2.drawString(c, g,acceleratorText,
-                                              acceleratorRect.x - accOffset,
-                                              acceleratorRect.y + fmAccel.getAscent());
-            }
-        }
-
-        // Paint the Arrow
-        if (arrowIcon != null) {
-            if(model.isArmed() || (c instanceof JMenu && model.isSelected()))
-                g.setColor(foreground);
-            if( !(b.getParent() instanceof JMenuBar) )
-                arrowIcon.paintIcon(c, g, arrowRect.x, arrowRect.y);
-        }
-
-        g.setColor(holdc);
-        g.setFont(holdf);
-    }
-
-
-    /**
-     * Compute and return the location of the icons origin, the
-     * location of origin of the text baseline, and a possibly clipped
-     * version of the compound labels string.  Locations are computed
-     * relative to the viewR rectangle.
-     */
-
-    private static String layoutMenuItem(
-        JComponent c,
-        FontMetrics fm,
-        String text,
-        FontMetrics fmAccel,
-        String acceleratorText,
-        Icon icon,
-        Icon checkIcon,
-        Icon arrowIcon,
-        int verticalAlignment,
-        int horizontalAlignment,
-        int verticalTextPosition,
-        int horizontalTextPosition,
-        Rectangle viewR,
-        Rectangle iconR,
-        Rectangle textR,
-        Rectangle acceleratorR,
-        Rectangle checkIconR,
-        Rectangle arrowIconR,
-        int textIconGap,
-        int menuItemGap
-        )
-    {
-
-        SwingUtilities.layoutCompoundLabel(c,
-                                           fm,
-                                           text,
-                                           icon,
-                                           verticalAlignment,
-                                           horizontalAlignment,
-                                           verticalTextPosition,
-                                           horizontalTextPosition,
-                                           viewR,
-                                           iconR,
-                                           textR,
-                                           textIconGap);
-
-        /* Initialize the acceelratorText bounds rectangle textR.  If a null
-         * or and empty String was specified we substitute "" here
-         * and use 0,0,0,0 for acceleratorTextR.
-         */
-        if( (acceleratorText == null) || acceleratorText.equals("") ) {
-            acceleratorR.width = acceleratorR.height = 0;
-            acceleratorText = "";
-        }
-        else {
-            acceleratorR.width
-                = SwingUtilities2.stringWidth(c, fmAccel, acceleratorText);
-            acceleratorR.height = fmAccel.getHeight();
-        }
-
-        /* Initialize the checkIcon bounds rectangle checkIconR.
-         */
-
-        if (checkIcon != null) {
-            checkIconR.width = checkIcon.getIconWidth();
-            checkIconR.height = checkIcon.getIconHeight();
-        }
-        else {
-            checkIconR.width = checkIconR.height = 0;
-        }
-
-        /* Initialize the arrowIcon bounds rectangle arrowIconR.
-         */
-
-        if (arrowIcon != null) {
-            arrowIconR.width = arrowIcon.getIconWidth();
-            arrowIconR.height = arrowIcon.getIconHeight();
-        }
-        else {
-            arrowIconR.width = arrowIconR.height = 0;
-        }
-
-
-        Rectangle labelR = iconR.union(textR);
-        if( MotifGraphicsUtils.isLeftToRight(c) ) {
-            textR.x += checkIconR.width + menuItemGap;
-            iconR.x += checkIconR.width + menuItemGap;
-
-            // Position the Accelerator text rect
-            acceleratorR.x = viewR.x + viewR.width - arrowIconR.width
-                             - menuItemGap - acceleratorR.width;
-
-            // Position the Check and Arrow Icons
-            checkIconR.x = viewR.x;
-            arrowIconR.x = viewR.x + viewR.width - menuItemGap
-                           - arrowIconR.width;
-        } else {
-            textR.x -= (checkIconR.width + menuItemGap);
-            iconR.x -= (checkIconR.width + menuItemGap);
-
-            // Position the Accelerator text rect
-            acceleratorR.x = viewR.x + arrowIconR.width + menuItemGap;
-
-            // Position the Check and Arrow Icons
-            checkIconR.x = viewR.x + viewR.width - checkIconR.width;
-            arrowIconR.x = viewR.x + menuItemGap;
-        }
-
-        // Align the accelertor text and the check and arrow icons vertically
-        // with the center of the label rect.
-        acceleratorR.y = labelR.y + (labelR.height/2) - (acceleratorR.height/2);
-        arrowIconR.y = labelR.y + (labelR.height/2) - (arrowIconR.height/2);
-        checkIconR.y = labelR.y + (labelR.height/2) - (checkIconR.height/2);
-
-        /*
-          System.out.println("Layout: v=" +viewR+"  c="+checkIconR+" i="+
-          iconR+" t="+textR+" acc="+acceleratorR+" a="+arrowIconR);
-          */
-        return text;
-    }
-
-  private static void drawMenuBezel(Graphics g, Color background,
-                                    int x, int y,
-                                    int width, int height)
-    {
-      // shadowed button region
-      g.setColor(background);
-      g.fillRect(x,y,width,height);
-
-      g.setColor(background.brighter().brighter());
-      g.drawLine(x+1,       y+height-1,  x+width-1, y+height-1);
-      g.drawLine(x+width-1, y+height-2,  x+width-1, y+1);
-
-      g.setColor(background.darker().darker());
-      g.drawLine(x,   y,   x+width-2, y);
-      g.drawLine(x,   y+1, x,         y+height-2);
-
-    }
-
-    /*
-     * Convenience function for determining ComponentOrientation.  Helps us
-     * avoid having Munge directives throughout the code.
-     */
-    static boolean isLeftToRight( Component c ) {
-        return c.getComponentOrientation().isLeftToRight();
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifIconFactory.java b/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifIconFactory.java
deleted file mode 100755
index 7c732af..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifIconFactory.java
+++ /dev/null
@@ -1,460 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-package com.sun.java.swing.plaf.motif;
-
-import javax.swing.*;
-
-import javax.swing.plaf.UIResource;
-
-import java.awt.Color;
-import java.awt.Component;
-import java.awt.Dimension;
-import java.awt.Graphics;
-import java.awt.Polygon;
-
-import java.io.Serializable;
-
-/**
- * Icon factory for the CDE/Motif Look and Feel
- * <p>
- * <strong>Warning:</strong>
- * Serialized objects of this class will not be compatible with
- * future Swing releases.  The current serialization support is appropriate
- * for short term storage or RMI between applications running the same
- * version of Swing.  A future release of Swing will provide support for
- * long term persistence.
- *
- * 1.20 04/27/99
- * @author Georges Saab
- */
-public class MotifIconFactory implements Serializable
-{
-    private static Icon checkBoxIcon;
-    private static Icon radioButtonIcon;
-    private static Icon menuItemCheckIcon;
-    private static Icon menuItemArrowIcon;
-    private static Icon menuArrowIcon;
-
-    public static Icon getMenuItemCheckIcon() {
-        return null;
-    }
-
-    public static Icon getMenuItemArrowIcon() {
-        if (menuItemArrowIcon == null) {
-            menuItemArrowIcon = new MenuItemArrowIcon();
-        }
-        return menuItemArrowIcon;
-    }
-
-    public static Icon getMenuArrowIcon() {
-        if (menuArrowIcon == null) {
-            menuArrowIcon = new MenuArrowIcon();
-        }
-        return menuArrowIcon;
-    }
-
-    public static Icon getCheckBoxIcon() {
-        if (checkBoxIcon == null) {
-            checkBoxIcon = new CheckBoxIcon();
-        }
-        return checkBoxIcon;
-    }
-
-    public static Icon getRadioButtonIcon() {
-        if (radioButtonIcon == null) {
-            radioButtonIcon = new RadioButtonIcon();
-        }
-        return radioButtonIcon;
-    }
-
-    private static class CheckBoxIcon implements Icon, UIResource, Serializable  {
-        final static int csize = 13;
-
-        private Color control = UIManager.getColor("control");
-        private Color foreground = UIManager.getColor("CheckBox.foreground");
-        private Color shadow = UIManager.getColor("controlShadow");
-        private Color highlight = UIManager.getColor("controlHighlight");
-        private Color lightShadow = UIManager.getColor("controlLightShadow");
-
-        public void paintIcon(Component c, Graphics g, int x, int y) {
-            AbstractButton b = (AbstractButton) c;
-            ButtonModel model = b.getModel();
-
-            boolean flat = false;
-
-            if(b instanceof JCheckBox) {
-                flat = ((JCheckBox)b).isBorderPaintedFlat();
-            }
-
-            boolean isPressed = model.isPressed();
-            boolean isArmed = model.isArmed();
-            boolean isEnabled = model.isEnabled();
-            boolean isSelected = model.isSelected();
-
-            // There are 4 "looks" to the Motif CheckBox:
-            //  drawCheckBezelOut  -  default unchecked state
-            //  drawBezel          -  when we uncheck in toggled state
-            //  drawCheckBezel     -  when we check in toggle state
-            //  drawCheckBezelIn   -  selected, mouseReleased
-            boolean checkToggleIn = ((isPressed &&
-                                      !isArmed   &&
-                                      isSelected) ||
-                                     (isPressed &&
-                                      isArmed   &&
-                                      !isSelected));
-            boolean uncheckToggleOut = ((isPressed &&
-                                         !isArmed &&
-                                         !isSelected) ||
-                                        (isPressed &&
-                                         isArmed &&
-                                         isSelected));
-
-            boolean checkIn = (!isPressed  &&
-                               isArmed    &&
-                               isSelected  ||
-                               (!isPressed &&
-                                !isArmed  &&
-                                isSelected));
-
-
-            if(flat) {
-                g.setColor(shadow);
-                g.drawRect(x+2,y,csize-1,csize-1);
-                if(uncheckToggleOut || checkToggleIn) {
-                    g.setColor(control);
-                    g.fillRect(x+3,y+1,csize-2,csize-2);
-                }
-            }
-
-            if (checkToggleIn) {
-                // toggled from unchecked to checked
-                drawCheckBezel(g,x,y,csize,true,false,false,flat);
-            } else if (uncheckToggleOut) {
-                // MotifBorderFactory.drawBezel(g,x,y,csize,csize,false,false);
-                drawCheckBezel(g,x,y,csize,true,true,false,flat);
-            } else if (checkIn) {
-                // show checked, unpressed state
-                drawCheckBezel(g,x,y,csize,false,false,true,flat);
-            } else if(!flat) {
-                //  show unchecked state
-                drawCheckBezelOut(g,x,y,csize);
-            }
-        }
-
-        public int getIconWidth() {
-            return csize;
-        }
-
-        public int getIconHeight() {
-            return csize;
-        }
-
-        public void drawCheckBezelOut(Graphics g, int x, int y, int csize){
-            Color controlShadow = UIManager.getColor("controlShadow");
-
-            int w = csize;
-            int h = csize;
-            Color oldColor = g.getColor();
-
-            g.translate(x,y);
-            g.setColor(highlight);    // inner 3D border
-            g.drawLine(0, 0, 0, h-1);
-            g.drawLine(1, 0, w-1, 0);
-
-            g.setColor(shadow);         // black drop shadow  __|
-            g.drawLine(1, h-1, w-1, h-1);
-            g.drawLine(w-1, h-1, w-1, 1);
-            g.translate(-x,-y);
-            g.setColor(oldColor);
-        }
-
-        public void drawCheckBezel(Graphics g, int x, int y, int csize,
-                                   boolean shade, boolean out, boolean check, boolean flat)
-            {
-
-
-                Color oldColor = g.getColor();
-                g.translate(x, y);
-
-
-                //bottom
-                if(!flat) {
-                    if (out) {
-                        g.setColor(control);
-                        g.fillRect(1,1,csize-2,csize-2);
-                        g.setColor(shadow);
-                    } else {
-                        g.setColor(lightShadow);
-                        g.fillRect(0,0,csize,csize);
-                        g.setColor(highlight);
-                    }
-
-                    g.drawLine(1,csize-1,csize-2,csize-1);
-                    if (shade) {
-                        g.drawLine(2,csize-2,csize-3,csize-2);
-                        g.drawLine(csize-2,2,csize-2 ,csize-1);
-                        if (out) {
-                            g.setColor(highlight);
-                        } else {
-                            g.setColor(shadow);
-                        }
-                        g.drawLine(1,2,1,csize-2);
-                        g.drawLine(1,1,csize-3,1);
-                        if (out) {
-                            g.setColor(shadow);
-                        } else {
-                            g.setColor(highlight);
-                        }
-                    }
-                    //right
-                    g.drawLine(csize-1,1,csize-1,csize-1);
-
-                    //left
-                    if (out) {
-                        g.setColor(highlight);
-                    } else {
-                        g.setColor(shadow);
-                    }
-                    g.drawLine(0,1,0,csize-1);
-
-                    //top
-                    g.drawLine(0,0,csize-1,0);
-                }
-
-                if (check) {
-                    // draw check
-                    g.setColor(foreground);
-                    g.drawLine(csize-2,1,csize-2,2);
-                    g.drawLine(csize-3,2,csize-3,3);
-                    g.drawLine(csize-4,3,csize-4,4);
-                    g.drawLine(csize-5,4,csize-5,6);
-                    g.drawLine(csize-6,5,csize-6,8);
-                    g.drawLine(csize-7,6,csize-7,10);
-                    g.drawLine(csize-8,7,csize-8,10);
-                    g.drawLine(csize-9,6,csize-9,9);
-                    g.drawLine(csize-10,5,csize-10,8);
-                    g.drawLine(csize-11,5,csize-11,7);
-                    g.drawLine(csize-12,6,csize-12,6);
-                }
-                g.translate(-x, -y);
-                g.setColor(oldColor);
-            }
-    } // end class CheckBoxIcon
-
-    private static class RadioButtonIcon implements Icon, UIResource, Serializable {
-        private Color dot = UIManager.getColor("activeCaptionBorder");
-        private Color highlight = UIManager.getColor("controlHighlight");
-        private Color shadow = UIManager.getColor("controlShadow");
-
-        public void paintIcon(Component c, Graphics g, int x, int y) {
-            // fill interior
-            AbstractButton b = (AbstractButton) c;
-            ButtonModel model = b.getModel();
-
-            int w = getIconWidth();
-            int h = getIconHeight();
-
-            boolean isPressed = model.isPressed();
-            boolean isArmed = model.isArmed();
-            boolean isEnabled = model.isEnabled();
-            boolean isSelected = model.isSelected();
-
-            boolean checkIn = ((isPressed &&
-                                !isArmed   &&
-                                isSelected) ||
-                               (isPressed &&
-                                isArmed   &&
-                                !isSelected)
-                               ||
-                               (!isPressed  &&
-                                isArmed    &&
-                                isSelected  ||
-                                (!isPressed &&
-                                 !isArmed  &&
-                                 isSelected)));
-
-            if (checkIn){
-                g.setColor(shadow);
-                g.drawLine(x+5,y+0,x+8,y+0);
-                g.drawLine(x+3,y+1,x+4,y+1);
-                g.drawLine(x+9,y+1,x+9,y+1);
-                g.drawLine(x+2,y+2,x+2,y+2);
-                g.drawLine(x+1,y+3,x+1,y+3);
-                g.drawLine(x,y+4,x,y+9);
-                g.drawLine(x+1,y+10,x+1,y+10);
-                g.drawLine(x+2,y+11,x+2,y+11);
-                g.setColor(highlight);
-                g.drawLine(x+3,y+12,x+4,y+12);
-                g.drawLine(x+5,y+13,x+8,y+13);
-                g.drawLine(x+9,y+12,x+10,y+12);
-                g.drawLine(x+11,y+11,x+11,y+11);
-                g.drawLine(x+12,y+10,x+12,y+10);
-                g.drawLine(x+13,y+9,x+13,y+4);
-                g.drawLine(x+12,y+3,x+12,y+3);
-                g.drawLine(x+11,y+2,x+11,y+2);
-                g.drawLine(x+10,y+1,x+10,y+1);
-                g.setColor(dot);
-                g.fillRect(x+4,y+5,6,4);
-                g.drawLine(x+5,y+4,x+8,y+4);
-                g.drawLine(x+5,y+9,x+8,y+9);
-            }
-            else {
-                g.setColor(highlight);
-                g.drawLine(x+5,y+0,x+8,y+0);
-                g.drawLine(x+3,y+1,x+4,y+1);
-                g.drawLine(x+9,y+1,x+9,y+1);
-                g.drawLine(x+2,y+2,x+2,y+2);
-                g.drawLine(x+1,y+3,x+1,y+3);
-                g.drawLine(x,y+4,x,y+9);
-                g.drawLine(x+1,y+10,x+1,y+10);
-                g.drawLine(x+2,y+11,x+2,y+11);
-
-                g.setColor(shadow);
-                g.drawLine(x+3,y+12,x+4,y+12);
-                g.drawLine(x+5,y+13,x+8,y+13);
-                g.drawLine(x+9,y+12,x+10,y+12);
-                g.drawLine(x+11,y+11,x+11,y+11);
-                g.drawLine(x+12,y+10,x+12,y+10);
-                g.drawLine(x+13,y+9,x+13,y+4);
-                g.drawLine(x+12,y+3,x+12,y+3);
-                g.drawLine(x+11,y+2,x+11,y+2);
-                g.drawLine(x+10,y+1,x+10,y+1);
-
-            }
-        }
-
-        public int getIconWidth() {
-            return 14;
-        }
-
-        public int getIconHeight() {
-            return 14;
-        }
-    } // end class RadioButtonIcon
-
-    private static class MenuItemCheckIcon implements Icon, UIResource, Serializable
-    {
-        public void paintIcon(Component c,Graphics g, int x, int y)
-            {
-            }
-        public int getIconWidth() { return 0; }
-        public int getIconHeight() { return 0; }
-    }  // end class MenuItemCheckIcon
-
-
-    private static class MenuItemArrowIcon implements Icon, UIResource, Serializable
-    {
-        public void paintIcon(Component c,Graphics g, int x, int y)
-            {
-            }
-        public int getIconWidth() { return 0; }
-        public int getIconHeight() { return 0; }
-    }  // end class MenuItemArrowIcon
-
-    private static class MenuArrowIcon implements Icon, UIResource, Serializable
-    {
-        private Color focus = UIManager.getColor("windowBorder");
-        private Color shadow = UIManager.getColor("controlShadow");
-        private Color highlight = UIManager.getColor("controlHighlight");
-
-        public void paintIcon(Component c, Graphics g, int x, int y) {
-            AbstractButton b = (AbstractButton) c;
-            ButtonModel model = b.getModel();
-
-            // These variables are kind of pointless as the following code
-            // assumes the icon will be 10 x 10 regardless of their value.
-            int w = getIconWidth();
-            int h = getIconHeight();
-
-            Color oldColor = g.getColor();
-
-            if (model.isSelected()){
-                if( MotifGraphicsUtils.isLeftToRight(c) ){
-                    g.setColor(shadow);
-                    g.fillRect(x+1,y+1,2,h);
-                    g.drawLine(x+4,y+2,x+4,y+2);
-                    g.drawLine(x+6,y+3,x+6,y+3);
-                    g.drawLine(x+8,y+4,x+8,y+5);
-                    g.setColor(focus);
-                    g.fillRect(x+2,y+2,2,h-2);
-                    g.fillRect(x+4,y+3,2,h-4);
-                    g.fillRect(x+6,y+4,2,h-6);
-                    g.setColor(highlight);
-                    g.drawLine(x+2,y+h,x+2,y+h);
-                    g.drawLine(x+4,y+h-1,x+4,y+h-1);
-                    g.drawLine(x+6,y+h-2,x+6,y+h-2);
-                    g.drawLine(x+8,y+h-4,x+8,y+h-3);
-                } else {
-                    g.setColor(highlight);
-                    g.fillRect(x+7,y+1,2,10);
-                    g.drawLine(x+5,y+9,x+5,y+9);
-                    g.drawLine(x+3,y+8,x+3,y+8);
-                    g.drawLine(x+1,y+6,x+1,y+7);
-                    g.setColor(focus);
-                    g.fillRect(x+6,y+2,2,8);
-                    g.fillRect(x+4,y+3,2,6);
-                    g.fillRect(x+2,y+4,2,4);
-                    g.setColor(shadow);
-                    g.drawLine(x+1,y+4,x+1,y+5);
-                    g.drawLine(x+3,y+3,x+3,y+3);
-                    g.drawLine(x+5,y+2,x+5,y+2);
-                    g.drawLine(x+7,y+1,x+7,y+1);
-                }
-            } else {
-                if( MotifGraphicsUtils.isLeftToRight(c) ){
-                    g.setColor(highlight);
-                    g.drawLine(x+1,y+1,x+1,y+h);
-                    g.drawLine(x+2,y+1,x+2,y+h-2);
-                    g.fillRect(x+3,y+2,2,2);
-                    g.fillRect(x+5,y+3,2,2);
-                    g.fillRect(x+7,y+4,2,2);
-                    g.setColor(shadow);
-                    g.drawLine(x+2,y+h-1,x+2,y+h);
-                    g.fillRect(x+3,y+h-2,2,2);
-                    g.fillRect(x+5,y+h-3,2,2);
-                    g.fillRect(x+7,y+h-4,2,2);
-                    g.setColor(oldColor);
-                } else {
-                    g.setColor(highlight);
-                    g.fillRect(x+1,y+4,2,2);
-                    g.fillRect(x+3,y+3,2,2);
-                    g.fillRect(x+5,y+2,2,2);
-                    g.drawLine(x+7,y+1,x+7,y+2);
-                    g.setColor(shadow);
-                    g.fillRect(x+1,y+h-4,2,2);
-                    g.fillRect(x+3,y+h-3,2,2);
-                    g.fillRect(x+5,y+h-2,2,2);
-                    g.drawLine(x+7,y+3,x+7,y+h);
-                    g.drawLine(x+8,y+1,x+8,y+h);
-                    g.setColor(oldColor);
-                }
-            }
-
-        }
-        public int getIconWidth() { return 10; }
-        public int getIconHeight() { return 10; }
-    } // End class MenuArrowIcon
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifInternalFrameTitlePane.java b/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifInternalFrameTitlePane.java
deleted file mode 100755
index 31cd9fd..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifInternalFrameTitlePane.java
+++ /dev/null
@@ -1,374 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-package com.sun.java.swing.plaf.motif;
-
-import java.awt.*;
-import java.awt.event.*;
-import javax.swing.*;
-import javax.swing.border.*;
-import javax.swing.event.InternalFrameEvent;
-import javax.swing.plaf.basic.*;
-import java.util.EventListener;
-import java.beans.PropertyChangeListener;
-import java.beans.PropertyChangeEvent;
-import java.beans.VetoableChangeListener;
-import java.beans.PropertyVetoException;
-
-/**
- * Class that manages a Motif title bar
- *
- * @since 1.3
- */
-public class MotifInternalFrameTitlePane
-    extends BasicInternalFrameTitlePane implements LayoutManager, ActionListener, PropertyChangeListener
-{
-    SystemButton systemButton;
-    MinimizeButton minimizeButton;
-    MaximizeButton maximizeButton;
-    JPopupMenu systemMenu;
-    Title title;
-    Color color;
-    Color highlight;
-    Color shadow;
-
-    // The width and height of a title pane button
-    public final static int BUTTON_SIZE = 19;  // 17 + 1 pixel border
-
-
-    public MotifInternalFrameTitlePane(JInternalFrame frame) {
-        super(frame);
-    }
-
-    protected void installDefaults() {
-        setFont(UIManager.getFont("InternalFrame.titleFont"));
-        setPreferredSize(new Dimension(100, BUTTON_SIZE));
-    }
-
-    protected void uninstallListeners() {
-        // Get around protected method in superclass
-        super.uninstallListeners();
-    }
-
-    protected PropertyChangeListener createPropertyChangeListener() {
-        return this;
-    }
-
-    protected LayoutManager createLayout() {
-        return this;
-    }
-
-    JPopupMenu getSystemMenu() {
-        return systemMenu;
-    }
-
-    protected void assembleSystemMenu() {
-        systemMenu = new JPopupMenu();
-        JMenuItem mi = systemMenu.add(new JMenuItem(restoreAction));
-        mi.setMnemonic('R');
-        mi = systemMenu.add(new JMenuItem(moveAction));
-        mi.setMnemonic('M');
-        mi = systemMenu.add(new JMenuItem(sizeAction));
-        mi.setMnemonic('S');
-        mi = systemMenu.add(new JMenuItem(iconifyAction));
-        mi.setMnemonic('n');
-        mi = systemMenu.add(new JMenuItem(maximizeAction));
-        mi.setMnemonic('x');
-        systemMenu.add(new JSeparator());
-        mi = systemMenu.add(new JMenuItem(closeAction));
-        mi.setMnemonic('C');
-
-        systemButton = new SystemButton();
-        systemButton.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent e) {
-                systemMenu.show(systemButton, 0, BUTTON_SIZE);
-            }
-        });
-
-        systemButton.addMouseListener(new MouseAdapter() {
-            public void mousePressed(MouseEvent evt) {
-                try {
-                    frame.setSelected(true);
-                } catch (PropertyVetoException pve) {
-                }
-                if ((evt.getClickCount() == 2)) {
-                    closeAction.actionPerformed(new
-                        ActionEvent(evt.getSource(),
-                            ActionEvent.ACTION_PERFORMED,
-                            null, evt.getWhen(), 0));
-                    systemMenu.setVisible(false);
-                }
-            }
-        });
-    }
-
-
-    protected void createButtons() {
-        minimizeButton = new MinimizeButton();
-        minimizeButton.addActionListener(iconifyAction);
-
-        maximizeButton = new MaximizeButton();
-        maximizeButton.addActionListener(maximizeAction);
-    }
-
-
-    protected void addSubComponents() {
-        title = new Title(frame.getTitle());
-        title.setFont(getFont());
-
-        add(systemButton);
-        add(title);
-        add(minimizeButton);
-        add(maximizeButton);
-    }
-
-    public void paintComponent(Graphics g) {
-    }
-
-    void setColors(Color c, Color h, Color s) {
-        color = c;
-        highlight = h;
-        shadow = s;
-    }
-
-    public void actionPerformed(ActionEvent e) {
-    }
-
-    public void propertyChange(PropertyChangeEvent evt) {
-        String prop = evt.getPropertyName();
-        JInternalFrame f = (JInternalFrame)evt.getSource();
-        boolean value = false;
-        if (JInternalFrame.IS_SELECTED_PROPERTY.equals(prop)) {
-            repaint();
-        } else if (prop.equals("maximizable")) {
-            if ((Boolean)evt.getNewValue() == Boolean.TRUE)
-                add(maximizeButton);
-            else
-                remove(maximizeButton);
-            revalidate();
-            repaint();
-        } else if (prop.equals("iconable")) {
-            if ((Boolean)evt.getNewValue() == Boolean.TRUE)
-                add(minimizeButton);
-            else
-                remove(minimizeButton);
-            revalidate();
-            repaint();
-        } else if (prop.equals(JInternalFrame.TITLE_PROPERTY)) {
-            repaint();
-        }
-        enableActions();
-    }
-
-    public void addLayoutComponent(String name, Component c) {}
-    public void removeLayoutComponent(Component c) {}
-    public Dimension preferredLayoutSize(Container c)  {
-        return minimumLayoutSize(c);
-    }
-
-    public Dimension minimumLayoutSize(Container c) {
-        return new Dimension(100, BUTTON_SIZE);
-    }
-
-    public void layoutContainer(Container c) {
-        int w = getWidth();
-        systemButton.setBounds(0, 0, BUTTON_SIZE, BUTTON_SIZE);
-        int x = w - BUTTON_SIZE;
-
-        if(frame.isMaximizable()) {
-            maximizeButton.setBounds(x, 0, BUTTON_SIZE, BUTTON_SIZE);
-            x -= BUTTON_SIZE;
-        } else if(maximizeButton.getParent() != null) {
-            maximizeButton.getParent().remove(maximizeButton);
-        }
-
-        if(frame.isIconifiable()) {
-            minimizeButton.setBounds(x, 0, BUTTON_SIZE, BUTTON_SIZE);
-            x -= BUTTON_SIZE;
-        } else if(minimizeButton.getParent() != null) {
-            minimizeButton.getParent().remove(minimizeButton);
-        }
-
-        title.setBounds(BUTTON_SIZE, 0, x, BUTTON_SIZE);
-    }
-
-    protected void showSystemMenu(){
-      systemMenu.show(systemButton, 0, BUTTON_SIZE);
-    }
-
-    protected void hideSystemMenu(){
-      systemMenu.setVisible(false);
-    }
-
-    static Dimension buttonDimension = new Dimension(BUTTON_SIZE, BUTTON_SIZE);
-
-    private abstract class FrameButton extends JButton {
-
-        FrameButton() {
-            super();
-            setFocusPainted(false);
-            setBorderPainted(false);
-        }
-
-        public boolean isFocusTraversable() {
-            return false;
-        }
-
-        public void requestFocus() {
-            // ignore request.
-        }
-
-        public Dimension getMinimumSize() {
-            return buttonDimension;
-        }
-
-        public Dimension getPreferredSize() {
-            return buttonDimension;
-        }
-
-        public void paintComponent(Graphics g) {
-            Dimension d = getSize();
-            int maxX = d.width - 1;
-            int maxY = d.height - 1;
-
-            // draw background
-            g.setColor(color);
-            g.fillRect(1, 1, d.width, d.height);
-
-            // draw border
-            boolean pressed = getModel().isPressed();
-            g.setColor(pressed ? shadow : highlight);
-            g.drawLine(0, 0, maxX, 0);
-            g.drawLine(0, 0, 0, maxY);
-            g.setColor(pressed ? highlight : shadow);
-            g.drawLine(1, maxY, maxX, maxY);
-            g.drawLine(maxX, 1, maxX, maxY);
-        }
-    }
-
-    private class MinimizeButton extends FrameButton {
-        public void paintComponent(Graphics g) {
-            super.paintComponent(g);
-            g.setColor(highlight);
-            g.drawLine(7, 8, 7, 11);
-            g.drawLine(7, 8, 10, 8);
-            g.setColor(shadow);
-            g.drawLine(8, 11, 10, 11);
-            g.drawLine(11, 9, 11, 11);
-        }
-    }
-
-    private class MaximizeButton extends FrameButton {
-        public void paintComponent(Graphics g) {
-            super.paintComponent(g);
-            int max = BUTTON_SIZE - 5;
-            boolean isMaxed = frame.isMaximum();
-            g.setColor(isMaxed ? shadow : highlight);
-            g.drawLine(4, 4, 4, max);
-            g.drawLine(4, 4, max, 4);
-            g.setColor(isMaxed ? highlight : shadow);
-            g.drawLine(5, max, max, max);
-            g.drawLine(max, 5, max, max);
-        }
-    }
-
-    private class SystemButton extends FrameButton {
-        public boolean isFocusTraversable() { return false; }
-        public void requestFocus() {}
-
-        public void paintComponent(Graphics g) {
-            super.paintComponent(g);
-            g.setColor(highlight);
-            g.drawLine(4, 8, 4, 11);
-            g.drawLine(4, 8, BUTTON_SIZE - 5, 8);
-            g.setColor(shadow);
-            g.drawLine(5, 11, BUTTON_SIZE - 5, 11);
-            g.drawLine(BUTTON_SIZE - 5, 9, BUTTON_SIZE - 5, 11);
-        }
-    }
-
-    private class Title extends FrameButton {
-        Title(String title) {
-            super();
-            setText(title);
-            setHorizontalAlignment(SwingConstants.CENTER);
-            setBorder(BorderFactory.createBevelBorder(
-                BevelBorder.RAISED,
-                UIManager.getColor("activeCaptionBorder"),
-                UIManager.getColor("inactiveCaptionBorder")));
-
-            // Forward mouse events to titlebar for moves.
-            addMouseMotionListener(new MouseMotionListener() {
-                public void mouseDragged(MouseEvent e) {
-                    forwardEventToParent(e);
-                }
-                public void mouseMoved(MouseEvent e) {
-                    forwardEventToParent(e);
-                }
-            });
-            addMouseListener(new MouseListener() {
-                public void mouseClicked(MouseEvent e) {
-                    forwardEventToParent(e);
-                }
-                public void mousePressed(MouseEvent e) {
-                    forwardEventToParent(e);
-                }
-                public void mouseReleased(MouseEvent e) {
-                    forwardEventToParent(e);
-                }
-                public void mouseEntered(MouseEvent e) {
-                    forwardEventToParent(e);
-                }
-                public void mouseExited(MouseEvent e) {
-                    forwardEventToParent(e);
-                }
-            });
-        }
-
-        void forwardEventToParent(MouseEvent e) {
-            getParent().dispatchEvent(new MouseEvent(
-                getParent(), e.getID(), e.getWhen(), e.getModifiers(),
-                e.getX(), e.getY(),  e.getXOnScreen(),
-                e.getYOnScreen(), e.getClickCount(),
-                e.isPopupTrigger(),  MouseEvent.NOBUTTON));
-        }
-
-        public void paintComponent(Graphics g) {
-            super.paintComponent(g);
-            if (frame.isSelected()) {
-                g.setColor(UIManager.getColor("activeCaptionText"));
-            } else {
-                g.setColor(UIManager.getColor("inactiveCaptionText"));
-            }
-            Dimension d = getSize();
-            String frameTitle = frame.getTitle();
-            if (frameTitle != null) {
-                MotifGraphicsUtils.drawStringInRect(frame, g, frameTitle,
-                                                    0, 0, d.width, d.height,
-                                                    SwingConstants.CENTER);
-            }
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifInternalFrameUI.java b/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifInternalFrameUI.java
deleted file mode 100755
index dbfda30..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifInternalFrameUI.java
+++ /dev/null
@@ -1,223 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-package com.sun.java.swing.plaf.motif;
-
-import java.awt.*;
-import java.awt.event.*;
-import javax.swing.*;
-import javax.swing.event.*;
-
-import java.util.EventListener;
-
-import javax.swing.plaf.basic.*;
-import javax.swing.border.*;
-import javax.swing.plaf.*;
-
-
-/**
- * A Motif L&F implementation of InternalFrame.
- * <p>
- * <strong>Warning:</strong>
- * Serialized objects of this class will not be compatible with
- * future Swing releases.  The current serialization support is appropriate
- * for short term storage or RMI between applications running the same
- * version of Swing.  A future release of Swing will provide support for
- * long term persistence.
- *
- * @author Tom Ball
- */
-public class MotifInternalFrameUI extends BasicInternalFrameUI {
-
-    Color color;
-    Color highlight;
-    Color shadow;
-    MotifInternalFrameTitlePane titlePane;
-
-    /**
-     * As of Java 2 platform v1.3 this previously undocumented field is no
-     * longer used.
-     * Key bindings are now defined by the LookAndFeel, please refer to
-     * the key bindings specification for further details.
-     *
-     * @deprecated As of Java 2 platform v1.3.
-     */
-    @Deprecated
-    protected KeyStroke closeMenuKey;
-
-
-/////////////////////////////////////////////////////////////////////////////
-// ComponentUI Interface Implementation methods
-/////////////////////////////////////////////////////////////////////////////
-    public static ComponentUI createUI(JComponent w)    {
-        return new MotifInternalFrameUI((JInternalFrame)w);
-    }
-
-    public MotifInternalFrameUI(JInternalFrame w)   {
-        super(w);
-    }
-
-    public void installUI(JComponent c)   {
-        super.installUI(c);
-        setColors((JInternalFrame)c);
-    }
-
-    protected void installDefaults() {
-        Border frameBorder = frame.getBorder();
-        frame.setLayout(internalFrameLayout = createLayoutManager());
-        if (frameBorder == null || frameBorder instanceof UIResource) {
-            frame.setBorder(new MotifBorders.InternalFrameBorder(frame));
-        }
-    }
-
-
-    protected void installKeyboardActions(){
-      super.installKeyboardActions();
-      // We replace the
-      // we use JPopup in our TitlePane so need escape support
-      closeMenuKey = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0);
-    }
-
-
-    protected void uninstallDefaults() {
-        LookAndFeel.uninstallBorder(frame);
-        frame.setLayout(null);
-        internalFrameLayout = null;
-    }
-
-    private JInternalFrame getFrame(){
-      return frame;
-    }
-
-    public JComponent createNorthPane(JInternalFrame w) {
-        titlePane = new MotifInternalFrameTitlePane(w);
-        return titlePane;
-    }
-
-    public Dimension getMaximumSize(JComponent x) {
-        return Toolkit.getDefaultToolkit().getScreenSize();
-    }
-
-    protected void uninstallKeyboardActions(){
-      super.uninstallKeyboardActions();
-      if (isKeyBindingRegistered()){
-        JInternalFrame.JDesktopIcon di = frame.getDesktopIcon();
-        SwingUtilities.replaceUIActionMap(di, null);
-        SwingUtilities.replaceUIInputMap(di, JComponent.WHEN_IN_FOCUSED_WINDOW,
-                                         null);
-      }
-    }
-
-    protected void setupMenuOpenKey(){
-        super.setupMenuOpenKey();
-        ActionMap map = SwingUtilities.getUIActionMap(frame);
-        if (map != null) {
-            // BasicInternalFrameUI creates an action with the same name, we override
-            // it as MotifInternalFrameTitlePane has a titlePane ivar that shadows the
-            // titlePane ivar in BasicInternalFrameUI, making supers action throw
-            // an NPE for us.
-            map.put("showSystemMenu", new AbstractAction(){
-                public void actionPerformed(ActionEvent e){
-                    titlePane.showSystemMenu();
-                }
-                public boolean isEnabled(){
-                    return isKeyBindingActive();
-                }
-            });
-        }
-    }
-
-    protected void setupMenuCloseKey(){
-        ActionMap map = SwingUtilities.getUIActionMap(frame);
-        if (map != null) {
-            map.put("hideSystemMenu", new AbstractAction(){
-                public void actionPerformed(ActionEvent e){
-                    titlePane.hideSystemMenu();
-                }
-                public boolean isEnabled(){
-                    return isKeyBindingActive();
-                }
-            });
-        }
-
-        // Set up the bindings for the DesktopIcon, it is odd that
-        // we install them, and not the desktop icon.
-        JInternalFrame.JDesktopIcon di = frame.getDesktopIcon();
-        InputMap diInputMap = SwingUtilities.getUIInputMap
-                          (di, JComponent.WHEN_IN_FOCUSED_WINDOW);
-        if (diInputMap == null) {
-            Object[] bindings = (Object[])UIManager.get
-                                          ("DesktopIcon.windowBindings");
-            if (bindings != null) {
-                diInputMap = LookAndFeel.makeComponentInputMap(di, bindings);
-
-                SwingUtilities.replaceUIInputMap(di, JComponent.
-                                               WHEN_IN_FOCUSED_WINDOW,
-                                               diInputMap);
-            }
-        }
-        ActionMap diActionMap = SwingUtilities.getUIActionMap(di);
-        if (diActionMap == null) {
-            diActionMap = new ActionMapUIResource();
-            diActionMap.put("hideSystemMenu", new AbstractAction(){
-                public void actionPerformed(ActionEvent e){
-                    JInternalFrame.JDesktopIcon icon = getFrame().
-                                     getDesktopIcon();
-                    MotifDesktopIconUI micon = (MotifDesktopIconUI)icon.
-                                               getUI();
-                    micon.hideSystemMenu();
-                }
-                public boolean isEnabled(){
-                    return isKeyBindingActive();
-                }
-            });
-            SwingUtilities.replaceUIActionMap(di, diActionMap);
-        }
-    }
-
-    /** This method is called when the frame becomes selected.
-      */
-    protected void activateFrame(JInternalFrame f) {
-        super.activateFrame(f);
-        setColors(f);
-    }
-    /** This method is called when the frame is no longer selected.
-      */
-    protected void deactivateFrame(JInternalFrame f) {
-        setColors(f);
-        super.deactivateFrame(f);
-    }
-
-    void setColors(JInternalFrame frame) {
-        if (frame.isSelected()) {
-            color = UIManager.getColor("InternalFrame.activeTitleBackground");
-        } else {
-            color = UIManager.getColor("InternalFrame.inactiveTitleBackground");
-        }
-        highlight = color.brighter();
-        shadow = color.darker().darker();
-        titlePane.setColors(color, highlight, shadow);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifLabelUI.java b/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifLabelUI.java
deleted file mode 100755
index 22b224e..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifLabelUI.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (c) 1997, 1998, 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.java.swing.plaf.motif;
-
-import sun.awt.AppContext;
-
-import javax.swing.*;
-import javax.swing.plaf.basic.BasicLabelUI;
-import javax.swing.plaf.ComponentUI;
-
-/**
- * A Motif L&F implementation of LabelUI.
- * This merely sets up new default values in MotifLookAndFeel.
- * <p>
- * <strong>Warning:</strong>
- * Serialized objects of this class will not be compatible with
- * future Swing releases.  The current serialization support is appropriate
- * for short term storage or RMI between applications running the same
- * version of Swing.  A future release of Swing will provide support for
- * long term persistence.
- *
- * @author Amy Fowler
- */
-public class MotifLabelUI extends BasicLabelUI
-{
-    private static final Object MOTIF_LABEL_UI_KEY = new Object();
-
-    public static ComponentUI createUI(JComponent c) {
-        AppContext appContext = AppContext.getAppContext();
-        MotifLabelUI motifLabelUI =
-                (MotifLabelUI) appContext.get(MOTIF_LABEL_UI_KEY);
-        if (motifLabelUI == null) {
-            motifLabelUI = new MotifLabelUI();
-            appContext.put(MOTIF_LABEL_UI_KEY, motifLabelUI);
-        }
-        return motifLabelUI;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifLookAndFeel.java b/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifLookAndFeel.java
deleted file mode 100755
index fdc6fa6..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifLookAndFeel.java
+++ /dev/null
@@ -1,1280 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-package com.sun.java.swing.plaf.motif;
-
-import java.awt.Color;
-import java.awt.Font;
-import java.awt.Insets;
-import java.awt.event.KeyEvent;
-import java.awt.event.InputEvent;
-import java.util.*;
-
-import javax.swing.*;
-import javax.swing.plaf.*;
-import javax.swing.border.*;
-import javax.swing.text.JTextComponent;
-import javax.swing.text.DefaultEditorKit;
-
-import javax.swing.plaf.basic.BasicLookAndFeel;
-import javax.swing.plaf.basic.BasicBorders;
-import javax.swing.plaf.basic.BasicComboBoxRenderer;
-import javax.swing.plaf.basic.BasicComboBoxEditor;
-
-import sun.swing.SwingUtilities2;
-import sun.awt.OSInfo;
-
-/**
- * Implements the Motif Look and Feel.
- * UI classes not implemented specifically for Motif will
- * default to those implemented in Basic.
- * <p>
- * <strong>Warning:</strong>
- * Serialized objects of this class will not be compatible with
- * future Swing releases.  The current serialization support is appropriate
- * for short term storage or RMI between applications running the same
- * version of Swing.  A future release of Swing will provide support for
- * long term persistence.
- *
- * @author unattributed
- */
-public class MotifLookAndFeel extends BasicLookAndFeel
-{
-    public String getName() {
-        return "CDE/Motif";
-    }
-
-    public String getID() {
-        return "Motif";
-    }
-
-    public String getDescription() {
-        return "The CDE/Motif Look and Feel";
-    }
-
-
-    public boolean isNativeLookAndFeel() {
-        return OSInfo.getOSType() == OSInfo.OSType.SOLARIS;
-    }
-
-
-    public boolean isSupportedLookAndFeel() {
-        return true;
-    }
-
-
-    /**
-     * Load the SystemColors into the defaults table.  The keys
-     * for SystemColor defaults are the same as the names of
-     * the public fields in SystemColor.  If the table is being
-     * created on a native Motif platform we use the SystemColor
-     * values, otherwise we create color objects whose values match
-     * the default CDE/Motif colors.
-     */
-    protected void initSystemColorDefaults(UIDefaults table)
-    {
-        String[] defaultSystemColors = {
-                  "desktop", "#005C5C", /* Color of the desktop background */
-            "activeCaption", "#000080", /* Color for captions (title bars) when they are active. */
-        "activeCaptionText", "#FFFFFF", /* Text color for text in captions (title bars). */
-      "activeCaptionBorder", "#B24D7A", /* Border color for caption (title bar) window borders. */
-          "inactiveCaption", "#AEB2C3", /* Color for captions (title bars) when not active. */
-      "inactiveCaptionText", "#000000", /* Text color for text in inactive captions (title bars). */
-    "inactiveCaptionBorder", "#AEB2C3", /* Border color for inactive caption (title bar) window borders. */
-                   "window", "#AEB2C3", /* Default color for the interior of windows */
-             "windowBorder", "#AEB2C3", /* ??? */
-               "windowText", "#000000", /* ??? */
-                     "menu", "#AEB2C3", /* ??? */
-                 "menuText", "#000000", /* ??? */
-                     "text", "#FFF7E9", /* Text background color */
-                 "textText", "#000000", /* Text foreground color */
-            "textHighlight", "#000000", /* Text background color when selected */
-        "textHighlightText", "#FFF7E9", /* Text color when selected */
-         "textInactiveText", "#808080", /* Text color when disabled */
-                  "control", "#AEB2C3", /* Default color for controls (buttons, sliders, etc) */
-              "controlText", "#000000", /* Default color for text in controls */
-         "controlHighlight", "#DCDEE5", /* Highlight color for controls */
-       "controlLtHighlight", "#DCDEE5", /* Light highlight color for controls */
-            "controlShadow", "#63656F", /* Shadow color for controls */
-       "controlLightShadow", "#9397A5", /* Shadow color for controls */
-          "controlDkShadow", "#000000", /* Dark shadow color for controls */
-                "scrollbar", "#AEB2C3", /* Scrollbar ??? color. PENDING(jeff) foreground? background? ?*/
-                     "info", "#FFF7E9", /* ??? */
-                 "infoText", "#000000"  /* ??? */
-        };
-
-        loadSystemColors(table, defaultSystemColors, false);
-    }
-
-
-    protected void initClassDefaults(UIDefaults table)
-    {
-        super.initClassDefaults(table);
-        String motifPackageName = "com.sun.java.swing.plaf.motif.";
-
-        Object[] uiDefaults = {
-                   "ButtonUI", motifPackageName + "MotifButtonUI",
-                 "CheckBoxUI", motifPackageName + "MotifCheckBoxUI",
-            "DirectoryPaneUI", motifPackageName + "MotifDirectoryPaneUI",
-              "FileChooserUI", motifPackageName + "MotifFileChooserUI",
-                    "LabelUI", motifPackageName + "MotifLabelUI",
-                  "MenuBarUI", motifPackageName + "MotifMenuBarUI",
-                     "MenuUI", motifPackageName + "MotifMenuUI",
-                 "MenuItemUI", motifPackageName + "MotifMenuItemUI",
-         "CheckBoxMenuItemUI", motifPackageName + "MotifCheckBoxMenuItemUI",
-      "RadioButtonMenuItemUI", motifPackageName + "MotifRadioButtonMenuItemUI",
-              "RadioButtonUI", motifPackageName + "MotifRadioButtonUI",
-             "ToggleButtonUI", motifPackageName + "MotifToggleButtonUI",
-                "PopupMenuUI", motifPackageName + "MotifPopupMenuUI",
-              "ProgressBarUI", motifPackageName + "MotifProgressBarUI",
-                "ScrollBarUI", motifPackageName + "MotifScrollBarUI",
-               "ScrollPaneUI", motifPackageName + "MotifScrollPaneUI",
-                   "SliderUI", motifPackageName + "MotifSliderUI",
-                "SplitPaneUI", motifPackageName + "MotifSplitPaneUI",
-               "TabbedPaneUI", motifPackageName + "MotifTabbedPaneUI",
-                 "TextAreaUI", motifPackageName + "MotifTextAreaUI",
-                "TextFieldUI", motifPackageName + "MotifTextFieldUI",
-            "PasswordFieldUI", motifPackageName + "MotifPasswordFieldUI",
-                 "TextPaneUI", motifPackageName + "MotifTextPaneUI",
-               "EditorPaneUI", motifPackageName + "MotifEditorPaneUI",
-                     "TreeUI", motifPackageName + "MotifTreeUI",
-            "InternalFrameUI", motifPackageName + "MotifInternalFrameUI",
-              "DesktopPaneUI", motifPackageName + "MotifDesktopPaneUI",
-                "SeparatorUI", motifPackageName + "MotifSeparatorUI",
-       "PopupMenuSeparatorUI", motifPackageName + "MotifPopupMenuSeparatorUI",
-               "OptionPaneUI", motifPackageName + "MotifOptionPaneUI",
-                 "ComboBoxUI", motifPackageName + "MotifComboBoxUI",
-              "DesktopIconUI", motifPackageName + "MotifDesktopIconUI"
-        };
-
-        table.putDefaults(uiDefaults);
-    }
-
-
-    /**
-     * Initialize the defaults table with the name of the ResourceBundle
-     * used for getting localized defaults.
-     */
-    private void initResourceBundle(UIDefaults table) {
-        table.addResourceBundle( "com.sun.java.swing.plaf.motif.resources.motif" );
-    }
-
-
-    protected void initComponentDefaults(UIDefaults table)
-    {
-        super.initComponentDefaults(table);
-
-        initResourceBundle(table);
-
-        FontUIResource dialogPlain12 = new FontUIResource(Font.DIALOG,
-                                                          Font.PLAIN, 12);
-        FontUIResource serifPlain12 = new FontUIResource(Font.SERIF,
-                                                          Font.PLAIN, 12);
-        FontUIResource sansSerifPlain12 = new FontUIResource(Font.SANS_SERIF,
-                                                          Font.PLAIN, 12);
-        FontUIResource monospacedPlain12 = new FontUIResource(Font.MONOSPACED,
-                                                          Font.PLAIN, 12);
-        ColorUIResource red = new ColorUIResource(Color.red);
-        ColorUIResource black = new ColorUIResource(Color.black);
-        ColorUIResource white = new ColorUIResource(Color.white);
-        ColorUIResource lightGray = new ColorUIResource(Color.lightGray);
-        ColorUIResource controlDarker = new ColorUIResource(147, 151, 165);  // slate blue
-        ColorUIResource scrollBarTrack = controlDarker;
-        ColorUIResource menuItemPressedBackground = new ColorUIResource(165,165,165);
-        ColorUIResource menuItemPressedForeground = new ColorUIResource(0,0,0);
-
-
-        Border loweredBevelBorder = new MotifBorders.BevelBorder(false,
-                                           table.getColor("controlShadow"),
-                                           table.getColor("controlLtHighlight"));
-
-        Border raisedBevelBorder = new MotifBorders.BevelBorder(true,                                                                  table.getColor("controlShadow"),
-                                           table.getColor("controlLtHighlight"));
-
-        Border marginBorder = new BasicBorders.MarginBorder();
-
-        Border focusBorder = new MotifBorders.FocusBorder(
-                                           table.getColor("control"),
-                                           table.getColor("activeCaptionBorder"));
-
-
-        Border focusBevelBorder = new BorderUIResource.CompoundBorderUIResource(
-                                          focusBorder,
-                                          loweredBevelBorder);
-
-        Border comboBoxBorder = new BorderUIResource.CompoundBorderUIResource(
-                                          focusBorder,
-                                          raisedBevelBorder);
-
-
-        Border buttonBorder = new BorderUIResource.CompoundBorderUIResource(
-                                      new MotifBorders.ButtonBorder(
-                                          table.getColor("Button.shadow"),
-                                          table.getColor("Button.highlight"),
-                                          table.getColor("Button.darkShadow"),
-                                          table.getColor("activeCaptionBorder")),
-                                      marginBorder);
-
-        Border toggleButtonBorder = new BorderUIResource.CompoundBorderUIResource(
-                                      new MotifBorders.ToggleButtonBorder(
-                                          table.getColor("ToggleButton.shadow"),
-                                          table.getColor("ToggleButton.highlight"),
-                                          table.getColor("ToggleButton.darkShadow"),
-                                          table.getColor("activeCaptionBorder")),                                                        marginBorder);
-
-        Border textFieldBorder = new BorderUIResource.CompoundBorderUIResource(
-                                      focusBevelBorder,
-                                      marginBorder);
-
-        Border popupMenuBorder = new BorderUIResource.CompoundBorderUIResource(
-                                      raisedBevelBorder,
-                                      new MotifBorders.MotifPopupMenuBorder(
-                                        table.getFont("PopupMenu.font"),
-                                        table.getColor("PopupMenu.background"),
-                                        table.getColor("PopupMenu.foreground"),
-                                        table.getColor("controlShadow"),
-                                        table.getColor("controlLtHighlight")
-                                        ));
-
-        Object menuItemCheckIcon = new UIDefaults.LazyValue() {
-            public Object createValue(UIDefaults table) {
-                return MotifIconFactory.getMenuItemCheckIcon();
-            }
-        };
-
-        Object menuItemArrowIcon = new UIDefaults.LazyValue() {
-            public Object createValue(UIDefaults table) {
-                return MotifIconFactory.getMenuItemArrowIcon();
-            }
-        };
-
-        Object menuArrowIcon = new UIDefaults.LazyValue() {
-            public Object createValue(UIDefaults table) {
-                return MotifIconFactory.getMenuArrowIcon();
-            }
-        };
-
-        Object checkBoxIcon = new UIDefaults.LazyValue() {
-            public Object createValue(UIDefaults table) {
-                return MotifIconFactory.getCheckBoxIcon();
-            }
-        };
-
-        Object radioButtonIcon = new UIDefaults.LazyValue() {
-            public Object createValue(UIDefaults table) {
-                return MotifIconFactory.getRadioButtonIcon();
-            }
-        };
-
-        Object unselectedTabBackground = new UIDefaults.LazyValue() {
-            public Object createValue(UIDefaults table) {
-                Color c = table.getColor("control");
-                return new ColorUIResource(Math.max((int)(c.getRed()*.85),0),
-                                           Math.max((int)(c.getGreen()*.85),0),
-                                           Math.max((int)(c.getBlue()*.85),0));
-            }
-        };
-
-        Object unselectedTabForeground = new UIDefaults.LazyValue() {
-            public Object createValue(UIDefaults table) {
-                Color c = table.getColor("controlText");
-                return new ColorUIResource(Math.max((int)(c.getRed()*.85),0),
-                                           Math.max((int)(c.getGreen()*.85),0),
-                                           Math.max((int)(c.getBlue()*.85),0));
-            }
-        };
-
-        Object unselectedTabShadow = new UIDefaults.LazyValue() {
-            public Object createValue(UIDefaults table) {
-                Color c = table.getColor("control");
-                Color base = new Color(Math.max((int)(c.getRed()*.85),0),
-                                       Math.max((int)(c.getGreen()*.85),0),
-                                       Math.max((int)(c.getBlue()*.85),0));
-                return new ColorUIResource(base.darker());
-            }
-        };
-
-        Object unselectedTabHighlight = new UIDefaults.LazyValue() {
-            public Object createValue(UIDefaults table) {
-                Color c = table.getColor("control");
-                Color base = new Color(Math.max((int)(c.getRed()*.85),0),
-                                       Math.max((int)(c.getGreen()*.85),0),
-                                       Math.max((int)(c.getBlue()*.85),0));
-                return new ColorUIResource(base.brighter());
-            }
-        };
-
-        // *** Text
-
-        Object fieldInputMap = new UIDefaults.LazyInputMap(new Object[] {
-                           "COPY", DefaultEditorKit.copyAction,
-                          "PASTE", DefaultEditorKit.pasteAction,
-                            "CUT", DefaultEditorKit.cutAction,
-                 "control INSERT", DefaultEditorKit.copyAction,
-                   "shift INSERT", DefaultEditorKit.pasteAction,
-                   "shift DELETE", DefaultEditorKit.cutAction,
-                      "control F", DefaultEditorKit.forwardAction,
-                      "control B", DefaultEditorKit.backwardAction,
-                      "control D", DefaultEditorKit.deleteNextCharAction,
-                     "BACK_SPACE", DefaultEditorKit.deletePrevCharAction,
-               "shift BACK_SPACE", DefaultEditorKit.deletePrevCharAction,
-                         "ctrl H", DefaultEditorKit.deletePrevCharAction,
-                         "DELETE", DefaultEditorKit.deleteNextCharAction,
-                    "ctrl DELETE", DefaultEditorKit.deleteNextWordAction,
-                "ctrl BACK_SPACE", DefaultEditorKit.deletePrevWordAction,
-                          "RIGHT", DefaultEditorKit.forwardAction,
-                           "LEFT", DefaultEditorKit.backwardAction,
-                       "KP_RIGHT", DefaultEditorKit.forwardAction,
-                        "KP_LEFT", DefaultEditorKit.backwardAction,
-                     "shift LEFT", DefaultEditorKit.selectionBackwardAction,
-                    "shift RIGHT", DefaultEditorKit.selectionForwardAction,
-                   "control LEFT", DefaultEditorKit.previousWordAction,
-                  "control RIGHT", DefaultEditorKit.nextWordAction,
-             "control shift LEFT", DefaultEditorKit.selectionPreviousWordAction,
-            "control shift RIGHT", DefaultEditorKit.selectionNextWordAction,
-                  "control SLASH", DefaultEditorKit.selectAllAction,
-                           "HOME", DefaultEditorKit.beginLineAction,
-                            "END", DefaultEditorKit.endLineAction,
-                     "shift HOME", DefaultEditorKit.selectionBeginLineAction,
-                      "shift END", DefaultEditorKit.selectionEndLineAction,
-             "control BACK_SLASH", "unselect"/*DefaultEditorKit.unselectAction*/,
-                          "ENTER", JTextField.notifyAction,
-                "control shift O", "toggle-componentOrientation"/*DefaultEditorKit.toggleComponentOrientation*/
-        });
-
-        Object passwordInputMap = new UIDefaults.LazyInputMap(new Object[] {
-                           "COPY", DefaultEditorKit.copyAction,
-                          "PASTE", DefaultEditorKit.pasteAction,
-                            "CUT", DefaultEditorKit.cutAction,
-                 "control INSERT", DefaultEditorKit.copyAction,
-                   "shift INSERT", DefaultEditorKit.pasteAction,
-                   "shift DELETE", DefaultEditorKit.cutAction,
-                      "control F", DefaultEditorKit.forwardAction,
-                      "control B", DefaultEditorKit.backwardAction,
-                      "control D", DefaultEditorKit.deleteNextCharAction,
-                     "BACK_SPACE", DefaultEditorKit.deletePrevCharAction,
-               "shift BACK_SPACE", DefaultEditorKit.deletePrevCharAction,
-                         "ctrl H", DefaultEditorKit.deletePrevCharAction,
-                         "DELETE", DefaultEditorKit.deleteNextCharAction,
-                          "RIGHT", DefaultEditorKit.forwardAction,
-                           "LEFT", DefaultEditorKit.backwardAction,
-                       "KP_RIGHT", DefaultEditorKit.forwardAction,
-                        "KP_LEFT", DefaultEditorKit.backwardAction,
-                     "shift LEFT", DefaultEditorKit.selectionBackwardAction,
-                    "shift RIGHT", DefaultEditorKit.selectionForwardAction,
-                   "control LEFT", DefaultEditorKit.beginLineAction,
-                  "control RIGHT", DefaultEditorKit.endLineAction,
-             "control shift LEFT", DefaultEditorKit.selectionBeginLineAction,
-            "control shift RIGHT", DefaultEditorKit.selectionEndLineAction,
-                  "control SLASH", DefaultEditorKit.selectAllAction,
-                           "HOME", DefaultEditorKit.beginLineAction,
-                            "END", DefaultEditorKit.endLineAction,
-                     "shift HOME", DefaultEditorKit.selectionBeginLineAction,
-                      "shift END", DefaultEditorKit.selectionEndLineAction,
-             "control BACK_SLASH", "unselect"/*DefaultEditorKit.unselectAction*/,
-                          "ENTER", JTextField.notifyAction,
-                "control shift O", "toggle-componentOrientation"/*DefaultEditorKit.toggleComponentOrientation*/
-        });
-
-        Object multilineInputMap = new UIDefaults.LazyInputMap(new Object[] {
-                           "COPY", DefaultEditorKit.copyAction,
-                          "PASTE", DefaultEditorKit.pasteAction,
-                            "CUT", DefaultEditorKit.cutAction,
-                 "control INSERT", DefaultEditorKit.copyAction,
-                   "shift INSERT", DefaultEditorKit.pasteAction,
-                   "shift DELETE", DefaultEditorKit.cutAction,
-                      "control F", DefaultEditorKit.forwardAction,
-                      "control B", DefaultEditorKit.backwardAction,
-                      "control D", DefaultEditorKit.deleteNextCharAction,
-                     "BACK_SPACE", DefaultEditorKit.deletePrevCharAction,
-               "shift BACK_SPACE", DefaultEditorKit.deletePrevCharAction,
-                         "ctrl H", DefaultEditorKit.deletePrevCharAction,
-                         "DELETE", DefaultEditorKit.deleteNextCharAction,
-                    "ctrl DELETE", DefaultEditorKit.deleteNextWordAction,
-                "ctrl BACK_SPACE", DefaultEditorKit.deletePrevWordAction,
-                          "RIGHT", DefaultEditorKit.forwardAction,
-                           "LEFT", DefaultEditorKit.backwardAction,
-                       "KP_RIGHT", DefaultEditorKit.forwardAction,
-                        "KP_LEFT", DefaultEditorKit.backwardAction,
-                     "shift LEFT", DefaultEditorKit.selectionBackwardAction,
-                    "shift RIGHT", DefaultEditorKit.selectionForwardAction,
-                   "control LEFT", DefaultEditorKit.previousWordAction,
-                  "control RIGHT", DefaultEditorKit.nextWordAction,
-             "control shift LEFT", DefaultEditorKit.selectionPreviousWordAction,
-            "control shift RIGHT", DefaultEditorKit.selectionNextWordAction,
-                  "control SLASH", DefaultEditorKit.selectAllAction,
-                           "HOME", DefaultEditorKit.beginLineAction,
-                            "END", DefaultEditorKit.endLineAction,
-                     "shift HOME", DefaultEditorKit.selectionBeginLineAction,
-                      "shift END", DefaultEditorKit.selectionEndLineAction,
-
-                      "control N", DefaultEditorKit.downAction,
-                      "control P", DefaultEditorKit.upAction,
-                             "UP", DefaultEditorKit.upAction,
-                           "DOWN", DefaultEditorKit.downAction,
-                        "PAGE_UP", DefaultEditorKit.pageUpAction,
-                      "PAGE_DOWN", DefaultEditorKit.pageDownAction,
-                  "shift PAGE_UP", "selection-page-up",
-                "shift PAGE_DOWN", "selection-page-down",
-             "ctrl shift PAGE_UP", "selection-page-left",
-           "ctrl shift PAGE_DOWN", "selection-page-right",
-                       "shift UP", DefaultEditorKit.selectionUpAction,
-                     "shift DOWN", DefaultEditorKit.selectionDownAction,
-                          "ENTER", DefaultEditorKit.insertBreakAction,
-                            "TAB", DefaultEditorKit.insertTabAction,
-             "control BACK_SLASH", "unselect"/*DefaultEditorKit.unselectAction*/,
-                   "control HOME", DefaultEditorKit.beginAction,
-                    "control END", DefaultEditorKit.endAction,
-             "control shift HOME", DefaultEditorKit.selectionBeginAction,
-              "control shift END", DefaultEditorKit.selectionEndAction,
-                      "control T", "next-link-action",
-                "control shift T", "previous-link-action",
-                  "control SPACE", "activate-link-action",
-                "control shift O", "toggle-componentOrientation"/*DefaultEditorKit.toggleComponentOrientation*/
-        });
-
-        // *** Tree
-
-        Object treeOpenIcon = SwingUtilities2.makeIcon(getClass(),
-                                                       MotifLookAndFeel.class,
-                                                       "icons/TreeOpen.gif");
-
-        Object treeClosedIcon = SwingUtilities2.makeIcon(getClass(),
-                                                         MotifLookAndFeel.class,
-                                                         "icons/TreeClosed.gif");
-
-        Object treeLeafIcon = new UIDefaults.LazyValue() {
-            public Object createValue(UIDefaults table) {
-                return MotifTreeCellRenderer.loadLeafIcon();
-            }
-        };
-
-        Object treeExpandedIcon = new UIDefaults.LazyValue() {
-            public Object createValue(UIDefaults table) {
-                return MotifTreeUI.MotifExpandedIcon.createExpandedIcon();
-            }
-        };
-
-        Object treeCollapsedIcon = new UIDefaults.LazyValue() {
-            public Object createValue(UIDefaults table) {
-                return MotifTreeUI.MotifCollapsedIcon.createCollapsedIcon();
-            }
-        };
-
-        Border menuBarBorder = new MotifBorders.MenuBarBorder(
-                                          table.getColor("MenuBar.shadow"),
-                                          table.getColor("MenuBar.highlight"),
-                                          table.getColor("MenuBar.darkShadow"),
-                                          table.getColor("activeCaptionBorder"));
-
-
-        Border menuMarginBorder = new BorderUIResource.CompoundBorderUIResource(
-                                          loweredBevelBorder,
-                                          marginBorder);
-
-
-        Border focusCellHighlightBorder = new BorderUIResource.LineBorderUIResource(
-                                                table.getColor("activeCaptionBorder"));
-
-        Object sliderFocusInsets = new InsetsUIResource( 0, 0, 0, 0 );
-
-        // ** for tabbedpane
-
-        Object tabbedPaneTabInsets = new InsetsUIResource(3, 4, 3, 4);
-
-        Object tabbedPaneTabPadInsets = new InsetsUIResource(3, 0, 1, 0);
-
-        Object tabbedPaneTabAreaInsets = new InsetsUIResource(4, 2, 0, 8);
-
-        Object tabbedPaneContentBorderInsets = new InsetsUIResource(2, 2, 2, 2);
-
-
-        // ** for optionpane
-
-        Object optionPaneBorder = new BorderUIResource.EmptyBorderUIResource(10,0,0,0);
-
-        Object optionPaneButtonAreaBorder = new BorderUIResource.EmptyBorderUIResource(10,10,10,10);
-
-        Object optionPaneMessageAreaBorder = new BorderUIResource.EmptyBorderUIResource(10,10,12,10);
-
-
-        Object[] defaults = {
-
-            "Desktop.background", table.get("desktop"),
-            "Desktop.ancestorInputMap",
-               new UIDefaults.LazyInputMap(new Object[] {
-                 "ctrl F5", "restore",
-                 "ctrl F4", "close",
-                 "ctrl F7", "move",
-                 "ctrl F8", "resize",
-                   "RIGHT", "right",
-                "KP_RIGHT", "right",
-             "shift RIGHT", "shrinkRight",
-          "shift KP_RIGHT", "shrinkRight",
-                    "LEFT", "left",
-                 "KP_LEFT", "left",
-              "shift LEFT", "shrinkLeft",
-           "shift KP_LEFT", "shrinkLeft",
-                      "UP", "up",
-                   "KP_UP", "up",
-                "shift UP", "shrinkUp",
-             "shift KP_UP", "shrinkUp",
-                    "DOWN", "down",
-                 "KP_DOWN", "down",
-              "shift DOWN", "shrinkDown",
-           "shift KP_DOWN", "shrinkDown",
-                  "ESCAPE", "escape",
-                 "ctrl F9", "minimize",
-                "ctrl F10", "maximize",
-                 "ctrl F6", "selectNextFrame",
-                "ctrl TAB", "selectNextFrame",
-             "ctrl alt F6", "selectNextFrame",
-       "shift ctrl alt F6", "selectPreviousFrame",
-                "ctrl F12", "navigateNext",
-          "shift ctrl F12", "navigatePrevious"
-              }),
-
-            "Panel.background", table.get("control"),
-            "Panel.foreground", table.get("textText"),
-            "Panel.font", dialogPlain12,
-
-            "ProgressBar.font", dialogPlain12,
-            "ProgressBar.foreground", controlDarker,
-            "ProgressBar.background", table.get("control"),
-            "ProgressBar.selectionForeground", table.get("control"),
-            "ProgressBar.selectionBackground", table.get("controlText"),
-            "ProgressBar.border", loweredBevelBorder,
-            "ProgressBar.cellLength", new Integer(6),
-            "ProgressBar.cellSpacing", Integer.valueOf(0),
-
-            // Buttons
-            "Button.margin", new InsetsUIResource(2, 4, 2, 4),
-            "Button.border", buttonBorder,
-            "Button.background", table.get("control"),
-            "Button.foreground", table.get("controlText"),
-            "Button.select", table.get("controlLightShadow"),
-            "Button.font", dialogPlain12,
-            "Button.focusInputMap", new UIDefaults.LazyInputMap(new Object[] {
-                          "SPACE", "pressed",
-                 "released SPACE", "released"
-              }),
-
-            "CheckBox.textIconGap", new Integer(8),
-            "CheckBox.margin", new InsetsUIResource(4, 2, 4, 2),
-            "CheckBox.icon", checkBoxIcon,
-            "CheckBox.focus", table.get("activeCaptionBorder"),
-            "CheckBox.focusInputMap",
-               new UIDefaults.LazyInputMap(new Object[] {
-                            "SPACE", "pressed",
-                   "released SPACE", "released"
-                 }),
-
-            "RadioButton.margin", new InsetsUIResource(4, 2, 4, 2),
-            "RadioButton.textIconGap", new Integer(8),
-            "RadioButton.background", table.get("control"),
-            "RadioButton.foreground", table.get("controlText"),
-            "RadioButton.icon", radioButtonIcon,
-            "RadioButton.focus", table.get("activeCaptionBorder"),
-            "RadioButton.icon", radioButtonIcon,
-            "RadioButton.focusInputMap",
-               new UIDefaults.LazyInputMap(new Object[] {
-                          "SPACE", "pressed",
-                 "released SPACE", "released"
-              }),
-
-            "ToggleButton.border", toggleButtonBorder,
-            "ToggleButton.background", table.get("control"),
-            "ToggleButton.foreground", table.get("controlText"),
-            "ToggleButton.focus", table.get("controlText"),
-            "ToggleButton.select", table.get("controlLightShadow"),
-            "ToggleButton.focusInputMap",
-              new UIDefaults.LazyInputMap(new Object[] {
-                            "SPACE", "pressed",
-                   "released SPACE", "released"
-                }),
-
-            // Menus
-            "Menu.border", menuMarginBorder,
-            "Menu.font", dialogPlain12,
-            "Menu.acceleratorFont", dialogPlain12,
-            "Menu.acceleratorSelectionForeground", menuItemPressedForeground,
-            "Menu.foreground", table.get("menuText"),
-            "Menu.background", table.get("menu"),
-            "Menu.selectionForeground", menuItemPressedForeground,
-            "Menu.selectionBackground", menuItemPressedBackground,
-            "Menu.checkIcon", menuItemCheckIcon,
-            "Menu.arrowIcon", menuArrowIcon,
-            "Menu.menuPopupOffsetX", new Integer(0),
-            "Menu.menuPopupOffsetY", new Integer(0),
-            "Menu.submenuPopupOffsetX", new Integer(-2),
-            "Menu.submenuPopupOffsetY", new Integer(3),
-            "Menu.shortcutKeys", new int[]{
-                SwingUtilities2.getSystemMnemonicKeyMask(),
-                KeyEvent.META_MASK
-            },
-            "Menu.cancelMode", "hideMenuTree",
-
-            "MenuBar.border", menuBarBorder,
-            "MenuBar.background", table.get("menu"),
-            "MenuBar.foreground", table.get("menuText"),
-            "MenuBar.font", dialogPlain12,
-            "MenuBar.windowBindings", new Object[] {
-                "F10", "takeFocus" },
-
-            "MenuItem.border", menuMarginBorder,
-            "MenuItem.font", dialogPlain12,
-            "MenuItem.acceleratorFont", dialogPlain12,
-            "MenuItem.acceleratorSelectionForeground", menuItemPressedForeground,
-            "MenuItem.foreground", table.get("menuText"),
-            "MenuItem.background", table.get("menu"),
-            "MenuItem.selectionForeground", menuItemPressedForeground,
-            "MenuItem.selectionBackground", menuItemPressedBackground,
-            "MenuItem.checkIcon", menuItemCheckIcon,
-            "MenuItem.arrowIcon", menuItemArrowIcon,
-
-            "RadioButtonMenuItem.border", menuMarginBorder,
-            "RadioButtonMenuItem.font", dialogPlain12,
-            "RadioButtonMenuItem.acceleratorFont", dialogPlain12,
-            "RadioButtonMenuItem.acceleratorSelectionForeground", menuItemPressedForeground,
-            "RadioButtonMenuItem.foreground", table.get("menuText"),
-            "RadioButtonMenuItem.background", table.get("menu"),
-            "RadioButtonMenuItem.selectionForeground", menuItemPressedForeground,
-            "RadioButtonMenuItem.selectionBackground", menuItemPressedBackground,
-            "RadioButtonMenuItem.checkIcon", radioButtonIcon,
-            "RadioButtonMenuItem.arrowIcon", menuItemArrowIcon,
-
-            "CheckBoxMenuItem.border", menuMarginBorder,
-            "CheckBoxMenuItem.font", dialogPlain12,
-            "CheckBoxMenuItem.acceleratorFont", dialogPlain12,
-            "CheckBoxMenuItem.acceleratorSelectionForeground", menuItemPressedForeground,
-            "CheckBoxMenuItem.foreground", table.get("menuText"),
-            "CheckBoxMenuItem.background", table.get("menu"),
-            "CheckBoxMenuItem.selectionForeground", menuItemPressedForeground,
-            "CheckBoxMenuItem.selectionBackground", menuItemPressedBackground,
-            "CheckBoxMenuItem.checkIcon", checkBoxIcon,
-            "CheckBoxMenuItem.arrowIcon", menuItemArrowIcon,
-
-            "PopupMenu.background", table.get("menu"),
-            "PopupMenu.border", popupMenuBorder,
-            "PopupMenu.foreground", table.get("menuText"),
-            "PopupMenu.font", dialogPlain12,
-            "PopupMenu.consumeEventOnClose", Boolean.TRUE,
-
-            "Label.font", dialogPlain12,
-            "Label.background", table.get("control"),
-            "Label.foreground", table.get("controlText"),
-
-            "Separator.shadow", table.get("controlShadow"),          // DEPRECATED - DO NOT USE!
-            "Separator.highlight", table.get("controlLtHighlight"),  // DEPRECATED - DO NOT USE!
-
-            "Separator.background", table.get("controlLtHighlight"),
-            "Separator.foreground", table.get("controlShadow"),
-
-            "List.focusCellHighlightBorder", focusCellHighlightBorder,
-            "List.focusInputMap",
-               new UIDefaults.LazyInputMap(new Object[] {
-                             "COPY", "copy",
-                            "PASTE", "paste",
-                              "CUT", "cut",
-                   "control INSERT", "copy",
-                     "shift INSERT", "paste",
-                     "shift DELETE", "cut",
-                               "UP", "selectPreviousRow",
-                            "KP_UP", "selectPreviousRow",
-                         "shift UP", "selectPreviousRowExtendSelection",
-                      "shift KP_UP", "selectPreviousRowExtendSelection",
-                    "ctrl shift UP", "selectPreviousRowExtendSelection",
-                 "ctrl shift KP_UP", "selectPreviousRowExtendSelection",
-                          "ctrl UP", "selectPreviousRowChangeLead",
-                       "ctrl KP_UP", "selectPreviousRowChangeLead",
-                             "DOWN", "selectNextRow",
-                          "KP_DOWN", "selectNextRow",
-                       "shift DOWN", "selectNextRowExtendSelection",
-                    "shift KP_DOWN", "selectNextRowExtendSelection",
-                  "ctrl shift DOWN", "selectNextRowExtendSelection",
-               "ctrl shift KP_DOWN", "selectNextRowExtendSelection",
-                        "ctrl DOWN", "selectNextRowChangeLead",
-                     "ctrl KP_DOWN", "selectNextRowChangeLead",
-                             "LEFT", "selectPreviousColumn",
-                          "KP_LEFT", "selectPreviousColumn",
-                       "shift LEFT", "selectPreviousColumnExtendSelection",
-                    "shift KP_LEFT", "selectPreviousColumnExtendSelection",
-                  "ctrl shift LEFT", "selectPreviousColumnExtendSelection",
-               "ctrl shift KP_LEFT", "selectPreviousColumnExtendSelection",
-                        "ctrl LEFT", "selectPreviousColumnChangeLead",
-                     "ctrl KP_LEFT", "selectPreviousColumnChangeLead",
-                            "RIGHT", "selectNextColumn",
-                         "KP_RIGHT", "selectNextColumn",
-                      "shift RIGHT", "selectNextColumnExtendSelection",
-                   "shift KP_RIGHT", "selectNextColumnExtendSelection",
-                 "ctrl shift RIGHT", "selectNextColumnExtendSelection",
-              "ctrl shift KP_RIGHT", "selectNextColumnExtendSelection",
-                       "ctrl RIGHT", "selectNextColumnChangeLead",
-                    "ctrl KP_RIGHT", "selectNextColumnChangeLead",
-                             "HOME", "selectFirstRow",
-                       "shift HOME", "selectFirstRowExtendSelection",
-                  "ctrl shift HOME", "selectFirstRowExtendSelection",
-                        "ctrl HOME", "selectFirstRowChangeLead",
-                              "END", "selectLastRow",
-                        "shift END", "selectLastRowExtendSelection",
-                   "ctrl shift END", "selectLastRowExtendSelection",
-                         "ctrl END", "selectLastRowChangeLead",
-                          "PAGE_UP", "scrollUp",
-                    "shift PAGE_UP", "scrollUpExtendSelection",
-               "ctrl shift PAGE_UP", "scrollUpExtendSelection",
-                     "ctrl PAGE_UP", "scrollUpChangeLead",
-                        "PAGE_DOWN", "scrollDown",
-                  "shift PAGE_DOWN", "scrollDownExtendSelection",
-             "ctrl shift PAGE_DOWN", "scrollDownExtendSelection",
-                   "ctrl PAGE_DOWN", "scrollDownChangeLead",
-                           "ctrl A", "selectAll",
-                       "ctrl SLASH", "selectAll",
-                  "ctrl BACK_SLASH", "clearSelection",
-                            "SPACE", "addToSelection",
-                       "ctrl SPACE", "toggleAndAnchor",
-                      "shift SPACE", "extendTo",
-                 "ctrl shift SPACE", "moveSelectionTo"
-                 }),
-
-            "DesktopIcon.icon", SwingUtilities2.makeIcon(getClass(),
-                                                         MotifLookAndFeel.class,
-                                                         "icons/DesktopIcon.gif"),
-            "DesktopIcon.border", null,
-            // These are a little odd, MotifInternalFrameUI isntalls em!
-            "DesktopIcon.windowBindings", new Object[]
-              { "ESCAPE", "hideSystemMenu" },
-
-            "InternalFrame.activeTitleBackground", table.get("activeCaptionBorder"),
-            "InternalFrame.inactiveTitleBackground", table.get("inactiveCaptionBorder"),
-            "InternalFrame.windowBindings", new Object[] {
-                "shift ESCAPE", "showSystemMenu",
-                  "ctrl SPACE", "showSystemMenu",
-                      "ESCAPE", "hideSystemMenu"
-            },
-
-            "ScrollBar.background", scrollBarTrack,
-            "ScrollBar.foreground", table.get("control"),
-            "ScrollBar.track", scrollBarTrack,
-            "ScrollBar.trackHighlight", table.get("controlDkShadow"),
-            "ScrollBar.thumb", table.get("control"),
-            "ScrollBar.thumbHighlight", table.get("controlHighlight"),
-            "ScrollBar.thumbDarkShadow", table.get("controlDkShadow"),
-            "ScrollBar.thumbShadow", table.get("controlShadow"),
-            "ScrollBar.border", loweredBevelBorder,
-            "ScrollBar.allowsAbsolutePositioning", Boolean.TRUE,
-            "ScrollBar.ancestorInputMap",
-               new UIDefaults.LazyInputMap(new Object[] {
-                       "RIGHT", "positiveUnitIncrement",
-                    "KP_RIGHT", "positiveUnitIncrement",
-                        "DOWN", "positiveUnitIncrement",
-                     "KP_DOWN", "positiveUnitIncrement",
-                   "PAGE_DOWN", "positiveBlockIncrement",
-              "ctrl PAGE_DOWN", "positiveBlockIncrement",
-                        "LEFT", "negativeUnitIncrement",
-                     "KP_LEFT", "negativeUnitIncrement",
-                          "UP", "negativeUnitIncrement",
-                       "KP_UP", "negativeUnitIncrement",
-                     "PAGE_UP", "negativeBlockIncrement",
-                "ctrl PAGE_UP", "negativeBlockIncrement",
-                        "HOME", "minScroll",
-                         "END", "maxScroll"
-                 }),
-
-            "ScrollPane.font", dialogPlain12,
-            "ScrollPane.background", table.get("control"),
-            "ScrollPane.foreground", table.get("controlText"),
-            "ScrollPane.border", null,
-            "ScrollPane.viewportBorder", loweredBevelBorder,
-            "ScrollPane.ancestorInputMap",
-               new UIDefaults.LazyInputMap(new Object[] {
-                           "RIGHT", "unitScrollRight",
-                        "KP_RIGHT", "unitScrollRight",
-                            "DOWN", "unitScrollDown",
-                         "KP_DOWN", "unitScrollDown",
-                            "LEFT", "unitScrollLeft",
-                         "KP_LEFT", "unitScrollLeft",
-                              "UP", "unitScrollUp",
-                           "KP_UP", "unitScrollUp",
-                         "PAGE_UP", "scrollUp",
-                       "PAGE_DOWN", "scrollDown",
-                    "ctrl PAGE_UP", "scrollLeft",
-                  "ctrl PAGE_DOWN", "scrollRight",
-                       "ctrl HOME", "scrollHome",
-                        "ctrl END", "scrollEnd"
-                 }),
-
-            "Slider.font", dialogPlain12,
-            "Slider.border", focusBevelBorder,
-            "Slider.foreground", table.get("control"),
-            "Slider.background", controlDarker,
-            "Slider.highlight", table.get("controlHighlight"),
-            "Slider.shadow", table.get("controlShadow"),
-            "Slider.focus", table.get("controlDkShadow"),
-            "Slider.focusInsets", sliderFocusInsets,
-            "Slider.focusInputMap", new UIDefaults.LazyInputMap(new Object[] {
-                         "RIGHT", "positiveUnitIncrement",
-                      "KP_RIGHT", "positiveUnitIncrement",
-                          "DOWN", "negativeUnitIncrement",
-                       "KP_DOWN", "negativeUnitIncrement",
-                "ctrl PAGE_DOWN", "negativeBlockIncrement",
-                          "LEFT", "negativeUnitIncrement",
-                       "KP_LEFT", "negativeUnitIncrement",
-                            "UP", "positiveUnitIncrement",
-                         "KP_UP", "positiveUnitIncrement",
-                  "ctrl PAGE_UP", "positiveBlockIncrement",
-                          "HOME", "minScroll",
-                           "END", "maxScroll"
-            }),
-
-            // Spinner
-            "Spinner.ancestorInputMap",
-               new UIDefaults.LazyInputMap(new Object[] {
-                               "UP", "increment",
-                            "KP_UP", "increment",
-                             "DOWN", "decrement",
-                          "KP_DOWN", "decrement",
-               }),
-            "Spinner.border", textFieldBorder,
-
-            "SplitPane.background", table.get("control"),
-            "SplitPane.highlight", table.get("controlHighlight"),
-            "SplitPane.shadow", table.get("controlShadow"),
-            "SplitPane.dividerSize", Integer.valueOf(20),
-            "SplitPane.activeThumb", table.get("activeCaptionBorder"),
-            "SplitPane.ancestorInputMap",
-               new UIDefaults.LazyInputMap(new Object[] {
-                        "UP", "negativeIncrement",
-                      "DOWN", "positiveIncrement",
-                      "LEFT", "negativeIncrement",
-                     "RIGHT", "positiveIncrement",
-                     "KP_UP", "negativeIncrement",
-                   "KP_DOWN", "positiveIncrement",
-                   "KP_LEFT", "negativeIncrement",
-                  "KP_RIGHT", "positiveIncrement",
-                      "HOME", "selectMin",
-                       "END", "selectMax",
-                        "F8", "startResize",
-                        "F6", "toggleFocus",
-                  "ctrl TAB", "focusOutForward",
-            "ctrl shift TAB", "focusOutBackward"
-               }),
-
-            "TabbedPane.font", dialogPlain12,
-            "TabbedPane.background", table.get("control"),
-            "TabbedPane.foreground", table.get("controlText"),
-            "TabbedPane.light", table.get("controlHighlight"),
-            "TabbedPane.highlight", table.get("controlLtHighlight"),
-            "TabbedPane.shadow", table.get("controlShadow"),
-            "TabbedPane.darkShadow", table.get("controlShadow"),
-            "TabbedPane.unselectedTabBackground", unselectedTabBackground,
-            "TabbedPane.unselectedTabForeground", unselectedTabForeground,
-            "TabbedPane.unselectedTabHighlight", unselectedTabHighlight,
-            "TabbedPane.unselectedTabShadow", unselectedTabShadow,
-            "TabbedPane.focus", table.get("activeCaptionBorder"),
-            "TabbedPane.tabInsets", tabbedPaneTabInsets,
-            "TabbedPane.selectedTabPadInsets", tabbedPaneTabPadInsets,
-            "TabbedPane.tabAreaInsets", tabbedPaneTabAreaInsets,
-            "TabbedPane.contentBorderInsets", tabbedPaneContentBorderInsets,
-            "TabbedPane.focusInputMap",
-              new UIDefaults.LazyInputMap(new Object[] {
-                         "RIGHT", "navigateRight",
-                      "KP_RIGHT", "navigateRight",
-                          "LEFT", "navigateLeft",
-                       "KP_LEFT", "navigateLeft",
-                            "UP", "navigateUp",
-                         "KP_UP", "navigateUp",
-                          "DOWN", "navigateDown",
-                       "KP_DOWN", "navigateDown",
-                     "ctrl DOWN", "requestFocusForVisibleComponent",
-                  "ctrl KP_DOWN", "requestFocusForVisibleComponent",
-                }),
-            "TabbedPane.ancestorInputMap",
-               new UIDefaults.LazyInputMap(new Object[] {
-                   "ctrl PAGE_DOWN", "navigatePageDown",
-                     "ctrl PAGE_UP", "navigatePageUp",
-                          "ctrl UP", "requestFocus",
-                       "ctrl KP_UP", "requestFocus",
-                 }),
-
-
-            "Tree.background", controlDarker,                              // default: dark slate blue
-            "Tree.hash", table.get("controlDkShadow"),                     // default: black
-            "Tree.iconShadow", table.get("controlShadow"),
-            "Tree.iconHighlight", table.get("controlHighlight"),
-            "Tree.iconBackground", table.get("control"),
-            "Tree.iconForeground", table.get("controlShadow"),             // default: black
-            "Tree.textBackground", controlDarker,             // default: dark slate blue
-            "Tree.textForeground", table.get("textText"),           // default: black
-            "Tree.selectionBackground", table.get("text"),            // default: white
-            "Tree.selectionForeground", table.get("textText"),              // default: black
-            "Tree.selectionBorderColor", table.get("activeCaptionBorder"), // default: maroon
-            "Tree.openIcon", treeOpenIcon,
-            "Tree.closedIcon", treeClosedIcon,
-            "Tree.leafIcon", treeLeafIcon,
-            "Tree.expandedIcon", treeExpandedIcon,
-            "Tree.collapsedIcon", treeCollapsedIcon,
-            "Tree.editorBorder", focusBorder,
-            "Tree.editorBorderSelectionColor", table.get("activeCaptionBorder"),
-            "Tree.rowHeight", new Integer(18),
-            "Tree.drawsFocusBorderAroundIcon", Boolean.TRUE,
-            "Tree.focusInputMap", new UIDefaults.LazyInputMap(new Object[] {
-                                "COPY", "copy",
-                               "PASTE", "paste",
-                                 "CUT", "cut",
-                      "control INSERT", "copy",
-                        "shift INSERT", "paste",
-                        "shift DELETE", "cut",
-                                  "UP", "selectPrevious",
-                               "KP_UP", "selectPrevious",
-                            "shift UP", "selectPreviousExtendSelection",
-                         "shift KP_UP", "selectPreviousExtendSelection",
-                       "ctrl shift UP", "selectPreviousExtendSelection",
-                    "ctrl shift KP_UP", "selectPreviousExtendSelection",
-                             "ctrl UP", "selectPreviousChangeLead",
-                          "ctrl KP_UP", "selectPreviousChangeLead",
-                                "DOWN", "selectNext",
-                             "KP_DOWN", "selectNext",
-                          "shift DOWN", "selectNextExtendSelection",
-                       "shift KP_DOWN", "selectNextExtendSelection",
-                     "ctrl shift DOWN", "selectNextExtendSelection",
-                  "ctrl shift KP_DOWN", "selectNextExtendSelection",
-                           "ctrl DOWN", "selectNextChangeLead",
-                        "ctrl KP_DOWN", "selectNextChangeLead",
-                               "RIGHT", "selectChild",
-                            "KP_RIGHT", "selectChild",
-                                "LEFT", "selectParent",
-                             "KP_LEFT", "selectParent",
-                             "PAGE_UP", "scrollUpChangeSelection",
-                       "shift PAGE_UP", "scrollUpExtendSelection",
-                  "ctrl shift PAGE_UP", "scrollUpExtendSelection",
-                        "ctrl PAGE_UP", "scrollUpChangeLead",
-                           "PAGE_DOWN", "scrollDownChangeSelection",
-                     "shift PAGE_DOWN", "scrollDownExtendSelection",
-                "ctrl shift PAGE_DOWN", "scrollDownExtendSelection",
-                      "ctrl PAGE_DOWN", "scrollDownChangeLead",
-                                "HOME", "selectFirst",
-                          "shift HOME", "selectFirstExtendSelection",
-                     "ctrl shift HOME", "selectFirstExtendSelection",
-                           "ctrl HOME", "selectFirstChangeLead",
-                                 "END", "selectLast",
-                           "shift END", "selectLastExtendSelection",
-                      "ctrl shift END", "selectLastExtendSelection",
-                            "ctrl END", "selectLastChangeLead",
-                                  "F2", "startEditing",
-                              "ctrl A", "selectAll",
-                          "ctrl SLASH", "selectAll",
-                     "ctrl BACK_SLASH", "clearSelection",
-                           "ctrl LEFT", "scrollLeft",
-                        "ctrl KP_LEFT", "scrollLeft",
-                          "ctrl RIGHT", "scrollRight",
-                       "ctrl KP_RIGHT", "scrollRight",
-                               "SPACE", "addToSelection",
-                          "ctrl SPACE", "toggleAndAnchor",
-                         "shift SPACE", "extendTo",
-                    "ctrl shift SPACE", "moveSelectionTo"
-              }),
-            "Tree.ancestorInputMap", new UIDefaults.LazyInputMap(new Object[] {
-                "ESCAPE", "cancel" }),
-
-            "Table.focusCellHighlightBorder", focusCellHighlightBorder,
-            "Table.scrollPaneBorder", null,
-            "Table.dropLineShortColor", table.get("activeCaptionBorder"),
-
-            //      "Table.background", white,  // cell background color
-            "Table.ancestorInputMap",
-               new UIDefaults.LazyInputMap(new Object[] {
-                                 "COPY", "copy",
-                                "PASTE", "paste",
-                                  "CUT", "cut",
-                       "control INSERT", "copy",
-                         "shift INSERT", "paste",
-                         "shift DELETE", "cut",
-                                "RIGHT", "selectNextColumn",
-                             "KP_RIGHT", "selectNextColumn",
-                          "shift RIGHT", "selectNextColumnExtendSelection",
-                       "shift KP_RIGHT", "selectNextColumnExtendSelection",
-                     "ctrl shift RIGHT", "selectNextColumnExtendSelection",
-                  "ctrl shift KP_RIGHT", "selectNextColumnExtendSelection",
-                           "ctrl RIGHT", "selectNextColumnChangeLead",
-                        "ctrl KP_RIGHT", "selectNextColumnChangeLead",
-                                 "LEFT", "selectPreviousColumn",
-                              "KP_LEFT", "selectPreviousColumn",
-                           "shift LEFT", "selectPreviousColumnExtendSelection",
-                        "shift KP_LEFT", "selectPreviousColumnExtendSelection",
-                      "ctrl shift LEFT", "selectPreviousColumnExtendSelection",
-                   "ctrl shift KP_LEFT", "selectPreviousColumnExtendSelection",
-                            "ctrl LEFT", "selectPreviousColumnChangeLead",
-                         "ctrl KP_LEFT", "selectPreviousColumnChangeLead",
-                                 "DOWN", "selectNextRow",
-                              "KP_DOWN", "selectNextRow",
-                           "shift DOWN", "selectNextRowExtendSelection",
-                        "shift KP_DOWN", "selectNextRowExtendSelection",
-                      "ctrl shift DOWN", "selectNextRowExtendSelection",
-                   "ctrl shift KP_DOWN", "selectNextRowExtendSelection",
-                            "ctrl DOWN", "selectNextRowChangeLead",
-                         "ctrl KP_DOWN", "selectNextRowChangeLead",
-                                   "UP", "selectPreviousRow",
-                                "KP_UP", "selectPreviousRow",
-                             "shift UP", "selectPreviousRowExtendSelection",
-                          "shift KP_UP", "selectPreviousRowExtendSelection",
-                        "ctrl shift UP", "selectPreviousRowExtendSelection",
-                     "ctrl shift KP_UP", "selectPreviousRowExtendSelection",
-                              "ctrl UP", "selectPreviousRowChangeLead",
-                           "ctrl KP_UP", "selectPreviousRowChangeLead",
-                                 "HOME", "selectFirstColumn",
-                           "shift HOME", "selectFirstColumnExtendSelection",
-                      "ctrl shift HOME", "selectFirstRowExtendSelection",
-                            "ctrl HOME", "selectFirstRow",
-                                  "END", "selectLastColumn",
-                            "shift END", "selectLastColumnExtendSelection",
-                       "ctrl shift END", "selectLastRowExtendSelection",
-                             "ctrl END", "selectLastRow",
-                              "PAGE_UP", "scrollUpChangeSelection",
-                        "shift PAGE_UP", "scrollUpExtendSelection",
-                   "ctrl shift PAGE_UP", "scrollLeftExtendSelection",
-                         "ctrl PAGE_UP", "scrollLeftChangeSelection",
-                            "PAGE_DOWN", "scrollDownChangeSelection",
-                      "shift PAGE_DOWN", "scrollDownExtendSelection",
-                 "ctrl shift PAGE_DOWN", "scrollRightExtendSelection",
-                       "ctrl PAGE_DOWN", "scrollRightChangeSelection",
-                                  "TAB", "selectNextColumnCell",
-                            "shift TAB", "selectPreviousColumnCell",
-                                "ENTER", "selectNextRowCell",
-                          "shift ENTER", "selectPreviousRowCell",
-                               "ctrl A", "selectAll",
-                           "ctrl SLASH", "selectAll",
-                      "ctrl BACK_SLASH", "clearSelection",
-                               "ESCAPE", "cancel",
-                                   "F2", "startEditing",
-                                "SPACE", "addToSelection",
-                           "ctrl SPACE", "toggleAndAnchor",
-                          "shift SPACE", "extendTo",
-                     "ctrl shift SPACE", "moveSelectionTo",
-                                   "F8", "focusHeader"
-                 }),
-
-
-            "FormattedTextField.focusInputMap",
-              new UIDefaults.LazyInputMap(new Object[] {
-                           "ctrl C", DefaultEditorKit.copyAction,
-                           "ctrl V", DefaultEditorKit.pasteAction,
-                           "ctrl X", DefaultEditorKit.cutAction,
-                             "COPY", DefaultEditorKit.copyAction,
-                            "PASTE", DefaultEditorKit.pasteAction,
-                              "CUT", DefaultEditorKit.cutAction,
-                       "shift LEFT", DefaultEditorKit.selectionBackwardAction,
-                    "shift KP_LEFT", DefaultEditorKit.selectionBackwardAction,
-                      "shift RIGHT", DefaultEditorKit.selectionForwardAction,
-                   "shift KP_RIGHT", DefaultEditorKit.selectionForwardAction,
-                        "ctrl LEFT", DefaultEditorKit.previousWordAction,
-                     "ctrl KP_LEFT", DefaultEditorKit.previousWordAction,
-                       "ctrl RIGHT", DefaultEditorKit.nextWordAction,
-                    "ctrl KP_RIGHT", DefaultEditorKit.nextWordAction,
-                  "ctrl shift LEFT", DefaultEditorKit.selectionPreviousWordAction,
-               "ctrl shift KP_LEFT", DefaultEditorKit.selectionPreviousWordAction,
-                 "ctrl shift RIGHT", DefaultEditorKit.selectionNextWordAction,
-              "ctrl shift KP_RIGHT", DefaultEditorKit.selectionNextWordAction,
-                           "ctrl A", DefaultEditorKit.selectAllAction,
-                             "HOME", DefaultEditorKit.beginLineAction,
-                              "END", DefaultEditorKit.endLineAction,
-                       "shift HOME", DefaultEditorKit.selectionBeginLineAction,
-                        "shift END", DefaultEditorKit.selectionEndLineAction,
-                       "BACK_SPACE", DefaultEditorKit.deletePrevCharAction,
-                 "shift BACK_SPACE", DefaultEditorKit.deletePrevCharAction,
-                           "ctrl H", DefaultEditorKit.deletePrevCharAction,
-                           "DELETE", DefaultEditorKit.deleteNextCharAction,
-                      "ctrl DELETE", DefaultEditorKit.deleteNextWordAction,
-                  "ctrl BACK_SPACE", DefaultEditorKit.deletePrevWordAction,
-                            "RIGHT", DefaultEditorKit.forwardAction,
-                             "LEFT", DefaultEditorKit.backwardAction,
-                         "KP_RIGHT", DefaultEditorKit.forwardAction,
-                          "KP_LEFT", DefaultEditorKit.backwardAction,
-                            "ENTER", JTextField.notifyAction,
-                  "ctrl BACK_SLASH", "unselect",
-                   "control shift O", "toggle-componentOrientation",
-                           "ESCAPE", "reset-field-edit",
-                               "UP", "increment",
-                            "KP_UP", "increment",
-                             "DOWN", "decrement",
-                          "KP_DOWN", "decrement",
-              }),
-
-            // ToolBar.
-            "ToolBar.ancestorInputMap",
-               new UIDefaults.LazyInputMap(new Object[] {
-                        "UP", "navigateUp",
-                     "KP_UP", "navigateUp",
-                      "DOWN", "navigateDown",
-                   "KP_DOWN", "navigateDown",
-                      "LEFT", "navigateLeft",
-                   "KP_LEFT", "navigateLeft",
-                     "RIGHT", "navigateRight",
-                  "KP_RIGHT", "navigateRight"
-                 }),
-
-
-
-            "ComboBox.control", table.get("control"),
-            "ComboBox.controlForeground", black,
-            "ComboBox.background", table.get("window"),
-            "ComboBox.foreground", black,
-            "ComboBox.border", comboBoxBorder,
-            "ComboBox.selectionBackground", black,
-            "ComboBox.selectionForeground", table.get("text"),
-            "ComboBox.disabledBackground", table.get("control"),
-            "ComboBox.disabledForeground", table.get("textInactiveText"),
-            "ComboBox.font", dialogPlain12,
-            "ComboBox.ancestorInputMap", new UIDefaults.LazyInputMap(new Object[] {
-                   "ESCAPE", "hidePopup",
-                  "PAGE_UP", "pageUpPassThrough",
-                "PAGE_DOWN", "pageDownPassThrough",
-                     "HOME", "homePassThrough",
-                      "END", "endPassThrough",
-                     "DOWN", "selectNext",
-                  "KP_DOWN", "selectNext",
-                       "UP", "selectPrevious",
-                    "KP_UP", "selectPrevious",
-                    "SPACE", "spacePopup",
-                    "ENTER", "enterPressed"
-
-              }),
-
-            "TextField.caretForeground", black,
-            "TextField.caretBlinkRate", Integer.valueOf(500),
-            "TextField.inactiveForeground", table.get("textInactiveText"),
-            "TextField.selectionBackground", table.get("textHighlight"),
-            "TextField.selectionForeground", table.get("textHighlightText"),
-            "TextField.background", table.get("window"),
-            "TextField.foreground", table.get("textText"),
-            "TextField.font", sansSerifPlain12,
-            "TextField.border", textFieldBorder,
-            "TextField.focusInputMap", fieldInputMap,
-
-            "PasswordField.caretForeground", black,
-            "PasswordField.caretBlinkRate", Integer.valueOf(500),
-            "PasswordField.inactiveForeground", table.get("textInactiveText"),
-            "PasswordField.selectionBackground", table.get("textHighlight"),
-            "PasswordField.selectionForeground", table.get("textHighlightText"),
-            "PasswordField.background", table.get("window"),
-            "PasswordField.foreground", table.get("textText"),
-            "PasswordField.font", monospacedPlain12,
-            "PasswordField.border", textFieldBorder,
-            "PasswordField.focusInputMap", passwordInputMap,
-
-            "TextArea.caretForeground", black,
-            "TextArea.caretBlinkRate", Integer.valueOf(500),
-            "TextArea.inactiveForeground", table.get("textInactiveText"),
-            "TextArea.selectionBackground", table.get("textHighlight"),
-            "TextArea.selectionForeground", table.get("textHighlightText"),
-            "TextArea.background", table.get("window"),
-            "TextArea.foreground", table.get("textText"),
-            "TextArea.font", monospacedPlain12,
-            "TextArea.border", marginBorder,
-            "TextArea.focusInputMap", multilineInputMap,
-
-            "TextPane.caretForeground", black,
-            "TextPane.caretBlinkRate", Integer.valueOf(500),
-            "TextPane.inactiveForeground", table.get("textInactiveText"),
-            "TextPane.selectionBackground", lightGray,
-            "TextPane.selectionForeground", table.get("textHighlightText"),
-            "TextPane.background", white,
-            "TextPane.foreground", table.get("textText"),
-            "TextPane.font", serifPlain12,
-            "TextPane.border", marginBorder,
-            "TextPane.focusInputMap", multilineInputMap,
-
-            "EditorPane.caretForeground", red,
-            "EditorPane.caretBlinkRate", Integer.valueOf(500),
-            "EditorPane.inactiveForeground", table.get("textInactiveText"),
-            "EditorPane.selectionBackground", lightGray,
-            "EditorPane.selectionForeground", table.get("textHighlightText"),
-            "EditorPane.background", white,
-            "EditorPane.foreground", table.get("textText"),
-            "EditorPane.font", serifPlain12,
-            "EditorPane.border", marginBorder,
-            "EditorPane.focusInputMap", multilineInputMap,
-
-
-            "FileChooser.ancestorInputMap",
-               new UIDefaults.LazyInputMap(new Object[] {
-                     "ESCAPE", "cancelSelection"
-                 }),
-
-
-            "ToolTip.border", raisedBevelBorder,
-            "ToolTip.background", table.get("info"),
-            "ToolTip.foreground", table.get("infoText"),
-
-            // These window InputMap bindings are used when the Menu is
-            // selected.
-            "PopupMenu.selectedWindowInputMapBindings", new Object[] {
-                  "ESCAPE", "cancel",
-                     "TAB", "cancel",
-               "shift TAB", "cancel",
-                    "DOWN", "selectNext",
-                 "KP_DOWN", "selectNext",
-                      "UP", "selectPrevious",
-                   "KP_UP", "selectPrevious",
-                    "LEFT", "selectParent",
-                 "KP_LEFT", "selectParent",
-                   "RIGHT", "selectChild",
-                "KP_RIGHT", "selectChild",
-                   "ENTER", "return",
-                   "SPACE", "return"
-            },
-
-
-            "OptionPane.border", optionPaneBorder,
-            "OptionPane.messageAreaBorder", optionPaneMessageAreaBorder,
-            "OptionPane.buttonAreaBorder", optionPaneButtonAreaBorder,
-            "OptionPane.errorIcon", SwingUtilities2.makeIcon(getClass(),
-                                                             MotifLookAndFeel.class,
-                                                             "icons/Error.gif"),
-            "OptionPane.informationIcon", SwingUtilities2.makeIcon(getClass(),
-                                                                   MotifLookAndFeel.class,
-                                                                   "icons/Inform.gif"),
-            "OptionPane.warningIcon", SwingUtilities2.makeIcon(getClass(),
-                                                               MotifLookAndFeel.class,
-                                                               "icons/Warn.gif"),
-            "OptionPane.questionIcon", SwingUtilities2.makeIcon(getClass(),
-                                                                MotifLookAndFeel.class,
-                                                                "icons/Question.gif"),
-            "OptionPane.windowBindings", new Object[] {
-                "ESCAPE", "close" },
-
-            // These bindings are only enabled when there is a default
-            // button set on the rootpane.
-            "RootPane.defaultButtonWindowKeyBindings", new Object[] {
-                             "ENTER", "press",
-                    "released ENTER", "release",
-                        "ctrl ENTER", "press",
-               "ctrl released ENTER", "release"
-              },
-        };
-
-        table.putDefaults(defaults);
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifMenuBarUI.java b/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifMenuBarUI.java
deleted file mode 100755
index a225689..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifMenuBarUI.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright (c) 1997, 1998, 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.java.swing.plaf.motif;
-
-import java.awt.Component;
-import java.awt.Container;
-import java.awt.Dimension;
-import java.awt.Graphics;
-import java.awt.Color;
-import java.awt.Insets;
-import java.awt.Point;
-import java.awt.Rectangle;
-import java.awt.event.*;
-import java.io.Serializable;
-
-import javax.swing.*;
-import javax.swing.event.*;
-import javax.swing.border.*;
-import javax.swing.plaf.*;
-import javax.swing.plaf.basic.BasicMenuBarUI;
-//REMIND
-import javax.swing.plaf.basic.*;
-
-/**
- * A Windows L&F implementation of MenuBarUI.  This implementation
- * is a "combined" view/controller.
- * <p>
- * <strong>Warning:</strong>
- * Serialized objects of this class will not be compatible with
- * future Swing releases.  The current serialization support is appropriate
- * for short term storage or RMI between applications running the same
- * version of Swing.  A future release of Swing will provide support for
- * long term persistence.
- *
- * @author Georges Saab
- * @author Rich Schiavi
- */
-
-public class MotifMenuBarUI extends BasicMenuBarUI
-{
-
-    public static ComponentUI createUI(JComponent x) {
-        return new MotifMenuBarUI();
-    }
-
-} // end class
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifMenuItemUI.java b/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifMenuItemUI.java
deleted file mode 100755
index c11ad6c..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifMenuItemUI.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-package com.sun.java.swing.plaf.motif;
-
-
-import javax.swing.*;
-import javax.swing.event.*;
-import java.awt.*;
-import java.awt.event.*;
-
-import javax.swing.plaf.*;
-import javax.swing.plaf.basic.BasicMenuItemUI;
-
-
-/**
- * MotifMenuItem implementation
- * <p>
- *
- * @author Rich Schiavi
- * @author Georges Saab
- */
-public class MotifMenuItemUI extends BasicMenuItemUI
-{
-    protected ChangeListener changeListener;
-
-    public static ComponentUI createUI(JComponent c)
-    {
-        return new MotifMenuItemUI();
-    }
-
-    protected void installListeners() {
-        super.installListeners();
-        changeListener = createChangeListener(menuItem);
-        menuItem.addChangeListener(changeListener);
-    }
-
-    protected void uninstallListeners() {
-        super.uninstallListeners();
-        menuItem.removeChangeListener(changeListener);
-    }
-
-    protected ChangeListener createChangeListener(JComponent c) {
-        return new ChangeHandler();
-    }
-
-    protected MouseInputListener createMouseInputListener(JComponent c) {
-        return new MouseInputHandler();
-    }
-
-    protected class ChangeHandler implements ChangeListener {
-
-        public void stateChanged(ChangeEvent e) {
-            JMenuItem c = (JMenuItem)e.getSource();
-            LookAndFeel.installProperty(c, "borderPainted",
-                        Boolean.valueOf(c.isArmed() || c.isSelected()));
-        }
-    }
-
-    protected class MouseInputHandler implements MouseInputListener {
-        public void mouseClicked(MouseEvent e) {}
-        public void mousePressed(MouseEvent e) {
-            MenuSelectionManager manager = MenuSelectionManager.defaultManager();
-            manager.setSelectedPath(getPath());
-        }
-        public void mouseReleased(MouseEvent e) {
-            MenuSelectionManager manager =
-                MenuSelectionManager.defaultManager();
-            JMenuItem menuItem = (JMenuItem)e.getComponent();
-            Point p = e.getPoint();
-            if(p.x >= 0 && p.x < menuItem.getWidth() &&
-               p.y >= 0 && p.y < menuItem.getHeight()) {
-                manager.clearSelectedPath();
-                menuItem.doClick(0);
-            } else {
-                manager.processMouseEvent(e);
-            }
-        }
-        public void mouseEntered(MouseEvent e) {}
-        public void mouseExited(MouseEvent e) {}
-        public void mouseDragged(MouseEvent e) {
-            MenuSelectionManager.defaultManager().processMouseEvent(e);
-        }
-        public void mouseMoved(MouseEvent e) { }
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifMenuMouseListener.java b/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifMenuMouseListener.java
deleted file mode 100755
index 93f4d2c..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifMenuMouseListener.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1997, 1998, 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.java.swing.plaf.motif;
-
-import java.awt.event.*;
-import javax.swing.MenuSelectionManager;
-
-/**
- * A default MouseListener for menu elements
- *
- * @author Arnaud Weber
- */
-class MotifMenuMouseListener extends MouseAdapter {
-    public void mousePressed(MouseEvent e) {
-        MenuSelectionManager.defaultManager().processMouseEvent(e);
-    }
-    public void mouseReleased(MouseEvent e) {
-        MenuSelectionManager.defaultManager().processMouseEvent(e);
-    }
-    public void mouseEntered(MouseEvent e) {
-        MenuSelectionManager.defaultManager().processMouseEvent(e);
-    }
-    public void mouseExited(MouseEvent e) {
-        MenuSelectionManager.defaultManager().processMouseEvent(e);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifMenuMouseMotionListener.java b/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifMenuMouseMotionListener.java
deleted file mode 100755
index 22fcd90..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifMenuMouseMotionListener.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (c) 1997, 1998, 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.java.swing.plaf.motif;
-
-import java.awt.event.*;
-import javax.swing.MenuSelectionManager;
-
-/**
- * A default MouseListener for menu elements
- *
- * @author Arnaud Weber
- */
-class MotifMenuMouseMotionListener implements MouseMotionListener {
-    public void mouseDragged(MouseEvent e) {
-        MenuSelectionManager.defaultManager().processMouseEvent(e);
-    }
-
-    public void mouseMoved(MouseEvent e) {
-        MenuSelectionManager.defaultManager().processMouseEvent(e);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifMenuUI.java b/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifMenuUI.java
deleted file mode 100755
index fd32fd0..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifMenuUI.java
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-package com.sun.java.swing.plaf.motif;
-
-import java.awt.*;
-import java.awt.event.*;
-import javax.swing.*;
-import javax.swing.event.*;
-import javax.swing.plaf.*;
-import javax.swing.border.*;
-import javax.swing.plaf.basic.*;
-
-
-import javax.swing.plaf.basic.BasicMenuUI;
-
-/**
- * A Motif L&F implementation of MenuUI.
- * <p>
- *
- * @author Georges Saab
- * @author Rich Schiavi
- */
-public class MotifMenuUI extends BasicMenuUI
-{
-
-    public static ComponentUI createUI( JComponent x ) {
-        return new MotifMenuUI();
-    }
-
-// These should not be necessary because BasicMenuUI does this,
-// and this class overrides createChangeListener.
-//    protected void installListeners() {
-//      super.installListeners();
-//        changeListener = createChangeListener(menuItem);
-//        menuItem.addChangeListener(changeListener);
-//    }
-//
-//    protected void uninstallListeners() {
-//      super.uninstallListeners();
-//      menuItem.removeChangeListener(changeListener);
-//    }
-
-    protected ChangeListener createChangeListener(JComponent c) {
-        return new MotifChangeHandler((JMenu)c, this);
-    }
-
-    private boolean popupIsOpen(JMenu m,MenuElement me[]) {
-        int i;
-        JPopupMenu pm = m.getPopupMenu();
-
-        for(i=me.length-1;i>=0;i--) {
-            if(me[i].getComponent() == pm)
-                return true;
-        }
-        return false;
-    }
-
-    protected MouseInputListener createMouseInputListener(JComponent c) {
-        return new MouseInputHandler();
-    }
-
-    public class MotifChangeHandler extends ChangeHandler {
-        public MotifChangeHandler(JMenu m, MotifMenuUI ui) {
-            super(m, ui);
-        }
-
-
-        public void stateChanged(ChangeEvent e) {
-            JMenuItem c = (JMenuItem)e.getSource();
-            if (c.isArmed() || c.isSelected()) {
-                c.setBorderPainted(true);
-                // c.repaint();
-            } else {
-                c.setBorderPainted(false);
-            }
-
-            super.stateChanged(e);
-        }
-    }
-
-    protected class MouseInputHandler implements MouseInputListener {
-        public void mouseClicked(MouseEvent e) {}
-        public void mousePressed(MouseEvent e) {
-            MenuSelectionManager manager = MenuSelectionManager.defaultManager();
-            JMenu menu = (JMenu)e.getComponent();
-            if(menu.isEnabled()) {
-                if(menu.isTopLevelMenu()) {
-                    if(menu.isSelected()) {
-                        manager.clearSelectedPath();
-                    } else {
-                        Container cnt = menu.getParent();
-                        if(cnt != null && cnt instanceof JMenuBar) {
-                            MenuElement me[] = new MenuElement[2];
-                            me[0]=(MenuElement)cnt;
-                            me[1]=menu;
-                            manager.setSelectedPath(me);
-                        }
-                    }
-                }
-
-                MenuElement path[] = getPath();
-                if (path.length > 0) {
-                    MenuElement newPath[] = new MenuElement[path.length+1];
-                    System.arraycopy(path,0,newPath,0,path.length);
-                    newPath[path.length] = menu.getPopupMenu();
-                    manager.setSelectedPath(newPath);
-                }
-            }
-        }
-
-        public void mouseReleased(MouseEvent e) {
-            MenuSelectionManager manager =
-                MenuSelectionManager.defaultManager();
-            JMenuItem menuItem = (JMenuItem)e.getComponent();
-            Point p = e.getPoint();
-            if(!(p.x >= 0 && p.x < menuItem.getWidth() &&
-                 p.y >= 0 && p.y < menuItem.getHeight())) {
-                manager.processMouseEvent(e);
-            }
-        }
-        public void mouseEntered(MouseEvent e) {}
-        public void mouseExited(MouseEvent e) {}
-        public void mouseDragged(MouseEvent e) {
-            MenuSelectionManager.defaultManager().processMouseEvent(e);
-        }
-        public void mouseMoved(MouseEvent e) { }
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifOptionPaneUI.java b/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifOptionPaneUI.java
deleted file mode 100755
index 8b11193..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifOptionPaneUI.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * Copyright (c) 1997, 1998, 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.java.swing.plaf.motif;
-
-import javax.swing.*;
-import javax.swing.plaf.basic.BasicOptionPaneUI;
-import javax.swing.plaf.ComponentUI;
-import java.awt.Color;
-import java.awt.Component;
-import java.awt.Container;
-import java.awt.Dimension;
-import java.awt.Graphics;
-import java.awt.Insets;
-import java.awt.Rectangle;
-
-/**
- * Provides the CDE/Motif look and feel for a JOptionPane.
- * <p>
- * <strong>Warning:</strong>
- * Serialized objects of this class will not be compatible with
- * future Swing releases.  The current serialization support is appropriate
- * for short term storage or RMI between applications running the same
- * version of Swing.  A future release of Swing will provide support for
- * long term persistence.
- *
- * @author Scott Violet
- */
-public class MotifOptionPaneUI extends BasicOptionPaneUI
-{
-    /**
-      * Creates a new MotifOptionPaneUI instance.
-      */
-    public static ComponentUI createUI(JComponent x) {
-        return new MotifOptionPaneUI();
-    }
-
-    /**
-     * Creates and returns a Container containin the buttons. The buttons
-     * are created by calling <code>getButtons</code>.
-     */
-    protected Container createButtonArea() {
-        Container          b = super.createButtonArea();
-
-        if(b != null && b.getLayout() instanceof ButtonAreaLayout) {
-            ((ButtonAreaLayout)b.getLayout()).setCentersChildren(false);
-        }
-        return b;
-    }
-
-    /**
-     * Returns null, CDE/Motif does not impose a minimum size.
-     */
-    public Dimension getMinimumOptionPaneSize() {
-        return null;
-    }
-
-    protected Container createSeparator() {
-        return new JPanel() {
-
-            public Dimension getPreferredSize() {
-                return new Dimension(10, 2);
-            }
-
-            public void paint(Graphics g) {
-                int width = getWidth();
-                g.setColor(Color.darkGray);
-                g.drawLine(0, 0, width, 0);
-                g.setColor(Color.white);
-                g.drawLine(0, 1, width, 1);
-            }
-        };
-    }
-
-    /**
-     * Creates and adds a JLabel representing the icon returned from
-     * <code>getIcon</code> to <code>top</code>. This is messaged from
-     * <code>createMessageArea</code>
-     */
-    protected void addIcon(Container top) {
-        /* Create the icon. */
-        Icon                  sideIcon = getIcon();
-
-        if (sideIcon != null) {
-            JLabel            iconLabel = new JLabel(sideIcon);
-
-            iconLabel.setVerticalAlignment(SwingConstants.CENTER);
-            top.add(iconLabel, "West");
-        }
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifPasswordFieldUI.java b/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifPasswordFieldUI.java
deleted file mode 100755
index 3b0159c..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifPasswordFieldUI.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (c) 1997, 1998, 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.java.swing.plaf.motif;
-
-import javax.swing.*;
-import javax.swing.text.*;
-import javax.swing.plaf.*;
-import javax.swing.plaf.basic.BasicPasswordFieldUI;
-
-/**
- * Provides the Motif look and feel for a password field.
- * <p>
- * <strong>Warning:</strong>
- * Serialized objects of this class will not be compatible with
- * future Swing releases.  The current serialization support is appropriate
- * for short term storage or RMI between applications running the same
- * version of Swing.  A future release of Swing will provide support for
- * long term persistence.
- *
- * @author  Timothy Prinzing
- */
-public class MotifPasswordFieldUI extends BasicPasswordFieldUI {
-
-    /**
-     * Creates a UI for a JPasswordField.
-     *
-     * @param c the JPasswordField
-     * @return the UI
-     */
-    public static ComponentUI createUI(JComponent c) {
-        return new MotifPasswordFieldUI();
-    }
-
-    /**
-     * Creates the object to use for a caret.  By default an
-     * instance of MotifTextUI.MotifCaret is created.  This method
-     * can be redefined to provide something else that implements
-     * the Caret interface.
-     *
-     * @return the caret object
-     */
-    protected Caret createCaret() {
-        return MotifTextUI.createCaret();
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifPopupMenuSeparatorUI.java b/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifPopupMenuSeparatorUI.java
deleted file mode 100755
index bd3aa15..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifPopupMenuSeparatorUI.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright (c) 1998, 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.java.swing.plaf.motif;
-
-import javax.swing.*;
-import java.awt.Color;
-import java.awt.Dimension;
-import java.awt.Graphics;
-import java.awt.Insets;
-import java.awt.Rectangle;
-import javax.swing.plaf.*;
-
-/**
- * A Motif L&F implementation of PopupMenuSeparatorUI.  This implementation
- * is a "combined" view/controller.
- *
- * @author Jeff Shapiro
- */
-
-public class MotifPopupMenuSeparatorUI extends MotifSeparatorUI
-{
-    public static ComponentUI createUI( JComponent c )
-    {
-        return new MotifPopupMenuSeparatorUI();
-    }
-
-    public void paint( Graphics g, JComponent c )
-    {
-        Dimension s = c.getSize();
-
-        g.setColor( c.getForeground() );
-        g.drawLine( 0, 0, s.width, 0 );
-
-        g.setColor( c.getBackground() );
-        g.drawLine( 0, 1, s.width, 1 );
-    }
-
-    public Dimension getPreferredSize( JComponent c )
-    {
-        return new Dimension( 0, 2 );
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifPopupMenuUI.java b/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifPopupMenuUI.java
deleted file mode 100755
index f34c45e..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifPopupMenuUI.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-package com.sun.java.swing.plaf.motif;
-
-import sun.swing.SwingUtilities2;
-import javax.swing.*;
-import javax.swing.event.*;
-import javax.swing.border.*;
-import java.awt.Color;
-import java.awt.Component;
-import java.awt.Container;
-import java.awt.Dimension;
-import java.awt.Font;
-import java.awt.FontMetrics;
-import java.awt.Frame;
-import java.awt.Graphics;
-import java.awt.Insets;
-import java.awt.LayoutManager;
-import java.awt.Point;
-import java.awt.Rectangle;
-import java.awt.event.*;
-import javax.swing.plaf.*;
-import javax.swing.plaf.basic.BasicPopupMenuUI;
-
-
-/**
- * A Motif L&F implementation of PopupMenuUI.
- * <p>
- * <strong>Warning:</strong>
- * Serialized objects of this class will not be compatible with
- * future Swing releases.  The current serialization support is appropriate
- * for short term storage or RMI between applications running the same
- * version of Swing.  A future release of Swing will provide support for
- * long term persistence.
- *
- * @author Georges Saab
- * @author Rich Schiavi
- */
-public class MotifPopupMenuUI extends BasicPopupMenuUI {
-    private static Border border = null;
-    private Font titleFont = null;
-
-    public static ComponentUI createUI(JComponent x) {
-        return new MotifPopupMenuUI();
-    }
-
-    /* This has to deal with the fact that the title may be wider than
-       the widest child component.
-       */
-    public Dimension getPreferredSize(JComponent c) {
-        LayoutManager layout = c.getLayout();
-        Dimension d = layout.preferredLayoutSize(c);
-        String title = ((JPopupMenu)c).getLabel();
-        if (titleFont == null) {
-            UIDefaults table = UIManager.getLookAndFeelDefaults();
-            titleFont = table.getFont("PopupMenu.font");
-        }
-        FontMetrics fm = c.getFontMetrics(titleFont);
-        int         stringWidth = 0;
-
-        if (title!=null) {
-            stringWidth += SwingUtilities2.stringWidth(c, fm, title);
-        }
-
-        if (d.width < stringWidth) {
-            d.width = stringWidth + 8;
-            Insets i = c.getInsets();
-            if (i!=null) {
-                d.width += i.left + i.right;
-            }
-            if (border != null) {
-                i = border.getBorderInsets(c);
-                d.width += i.left + i.right;
-            }
-
-            return d;
-        }
-        return null;
-    }
-
-    protected ChangeListener createChangeListener(JPopupMenu m) {
-        return new ChangeListener() {
-            public void stateChanged(ChangeEvent e) {}
-        };
-    }
-
-    public boolean isPopupTrigger(MouseEvent e) {
-        return ((e.getID()==MouseEvent.MOUSE_PRESSED)
-                && ((e.getModifiers() & MouseEvent.BUTTON3_MASK)!=0));
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifProgressBarUI.java b/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifProgressBarUI.java
deleted file mode 100755
index 66d99e0..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifProgressBarUI.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright (c) 1997, 1998, 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.java.swing.plaf.motif;
-
-import java.awt.*;
-import javax.swing.*;
-import javax.swing.event.*;
-import javax.swing.plaf.*;
-import java.io.Serializable;
-
-import javax.swing.plaf.basic.BasicProgressBarUI;
-
-
-/**
- * A Motif ProgressBarUI.
- * <p>
- * <strong>Warning:</strong>
- * Serialized objects of this class will not be compatible with
- * future Swing releases.  The current serialization support is appropriate
- * for short term storage or RMI between applications running the same
- * version of Swing.  A future release of Swing will provide support for
- * long term persistence.
- *
- * @author Michael C. Albers
- */
-public class MotifProgressBarUI extends BasicProgressBarUI
-{
-    /**
-     * Creates the ProgressBar's UI
-     */
-    public static ComponentUI createUI(JComponent x) {
-        return new MotifProgressBarUI();
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifRadioButtonMenuItemUI.java b/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifRadioButtonMenuItemUI.java
deleted file mode 100755
index 6822b04..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifRadioButtonMenuItemUI.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Copyright (c) 1997, 2006, 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.java.swing.plaf.motif;
-
-import javax.swing.*;
-import javax.swing.event.*;
-import javax.swing.plaf.*;
-import javax.swing.plaf.basic.BasicRadioButtonMenuItemUI;
-
-import java.awt.*;
-import java.awt.event.*;
-import java.io.Serializable;
-
-
-/**
- * MotifRadioButtonMenuItem implementation
- * <p>
- * <strong>Warning:</strong>
- * Serialized objects of this class will not be compatible with
- * future Swing releases.  The current serialization support is appropriate
- * for short term storage or RMI between applications running the same
- * version of Swing.  A future release of Swing will provide support for
- * long term persistence.
- *
- * @author Georges Saab
- * @author Rich Schiavi
- */
-public class MotifRadioButtonMenuItemUI extends BasicRadioButtonMenuItemUI
-{
-    protected ChangeListener changeListener;
-
-    public static ComponentUI createUI(JComponent b) {
-        return new MotifRadioButtonMenuItemUI();
-    }
-
-    protected void installListeners() {
-        super.installListeners();
-        changeListener = createChangeListener(menuItem);
-        menuItem.addChangeListener(changeListener);
-    }
-
-    protected void uninstallListeners() {
-        super.uninstallListeners();
-        menuItem.removeChangeListener(changeListener);
-    }
-
-    protected ChangeListener createChangeListener(JComponent c) {
-        return new ChangeHandler();
-    }
-
-    protected class ChangeHandler implements ChangeListener, Serializable {
-        public void stateChanged(ChangeEvent e) {
-            JMenuItem c = (JMenuItem)e.getSource();
-            LookAndFeel.installProperty(c, "borderPainted", c.isArmed());
-        }
-    }
-
-    protected MouseInputListener createMouseInputListener(JComponent c) {
-        return new MouseInputHandler();
-    }
-
-
-    protected class MouseInputHandler implements MouseInputListener {
-        public void mouseClicked(MouseEvent e) {}
-        public void mousePressed(MouseEvent e) {
-            MenuSelectionManager manager = MenuSelectionManager.defaultManager();
-            manager.setSelectedPath(getPath());
-        }
-        public void mouseReleased(MouseEvent e) {
-            MenuSelectionManager manager =
-                MenuSelectionManager.defaultManager();
-            JMenuItem menuItem = (JMenuItem)e.getComponent();
-            Point p = e.getPoint();
-            if(p.x >= 0 && p.x < menuItem.getWidth() &&
-               p.y >= 0 && p.y < menuItem.getHeight()) {
-                manager.clearSelectedPath();
-                menuItem.doClick(0);
-            } else {
-                manager.processMouseEvent(e);
-            }
-        }
-        public void mouseEntered(MouseEvent e) {}
-        public void mouseExited(MouseEvent e) {}
-        public void mouseDragged(MouseEvent e) {
-            MenuSelectionManager.defaultManager().processMouseEvent(e);
-        }
-        public void mouseMoved(MouseEvent e) { }
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifRadioButtonUI.java b/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifRadioButtonUI.java
deleted file mode 100755
index 328ca48..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifRadioButtonUI.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-package com.sun.java.swing.plaf.motif;
-
-import sun.awt.AppContext;
-
-import javax.swing.*;
-import javax.swing.border.*;
-import javax.swing.plaf.basic.BasicRadioButtonUI;
-
-import javax.swing.plaf.*;
-
-import java.awt.*;
-
-/**
- * RadioButtonUI implementation for MotifRadioButtonUI
- * <p>
- * <strong>Warning:</strong>
- * Serialized objects of this class will not be compatible with
- * future Swing releases.  The current serialization support is appropriate
- * for short term storage or RMI between applications running the same
- * version of Swing.  A future release of Swing will provide support for
- * long term persistence.
- *
- * @author Rich Schiavi
- */
-public class MotifRadioButtonUI extends BasicRadioButtonUI {
-
-    private static final Object MOTIF_RADIO_BUTTON_UI_KEY = new Object();
-
-    protected Color focusColor;
-
-    private boolean defaults_initialized = false;
-
-    // ********************************
-    //         Create PLAF
-    // ********************************
-    public static ComponentUI createUI(JComponent c) {
-        AppContext appContext = AppContext.getAppContext();
-        MotifRadioButtonUI motifRadioButtonUI =
-                (MotifRadioButtonUI) appContext.get(MOTIF_RADIO_BUTTON_UI_KEY);
-        if (motifRadioButtonUI == null) {
-            motifRadioButtonUI = new MotifRadioButtonUI();
-            appContext.put(MOTIF_RADIO_BUTTON_UI_KEY, motifRadioButtonUI);
-        }
-        return motifRadioButtonUI;
-    }
-
-    // ********************************
-    //          Install Defaults
-    // ********************************
-    public void installDefaults(AbstractButton b) {
-        super.installDefaults(b);
-        if(!defaults_initialized) {
-            focusColor = UIManager.getColor(getPropertyPrefix() + "focus");
-            defaults_initialized = true;
-        }
-    }
-
-    protected void uninstallDefaults(AbstractButton b) {
-        super.uninstallDefaults(b);
-        defaults_initialized = false;
-    }
-
-    // ********************************
-    //          Default Accessors
-    // ********************************
-
-    protected Color getFocusColor() {
-        return focusColor;
-    }
-
-    // ********************************
-    //         Paint Methods
-    // ********************************
-    protected void paintFocus(Graphics g, Rectangle t, Dimension d){
-        g.setColor(getFocusColor());
-        g.drawRect(0,0,d.width-1,d.height-1);
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifScrollBarButton.java b/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifScrollBarButton.java
deleted file mode 100755
index 316d521..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifScrollBarButton.java
+++ /dev/null
@@ -1,211 +0,0 @@
-/*
- * Copyright (c) 1997, 1998, 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.java.swing.plaf.motif;
-
-import javax.swing.*;
-import javax.swing.event.*;
-import javax.swing.plaf.*;
-import javax.swing.plaf.basic.BasicArrowButton;
-
-import java.awt.*;
-import java.awt.event.*;
-
-/**
- * Motif scroll bar button.
- * <p>
- * <strong>Warning:</strong>
- * Serialized objects of this class will not be compatible with
- * future Swing releases.  The current serialization support is appropriate
- * for short term storage or RMI between applications running the same
- * version of Swing.  A future release of Swing will provide support for
- * long term persistence.
- */
-public class MotifScrollBarButton extends BasicArrowButton
-{
-    private Color darkShadow = UIManager.getColor("controlShadow");
-    private Color lightShadow = UIManager.getColor("controlLtHighlight");
-
-
-    public MotifScrollBarButton(int direction)
-    {
-        super(direction);
-
-        switch (direction) {
-        case NORTH:
-        case SOUTH:
-        case EAST:
-        case WEST:
-            this.direction = direction;
-            break;
-        default:
-            throw new IllegalArgumentException("invalid direction");
-        }
-
-        setRequestFocusEnabled(false);
-        setOpaque(true);
-        setBackground(UIManager.getColor("ScrollBar.background"));
-        setForeground(UIManager.getColor("ScrollBar.foreground"));
-    }
-
-
-    public Dimension getPreferredSize() {
-        switch (direction) {
-        case NORTH:
-        case SOUTH:
-            return new Dimension(11, 12);
-        case EAST:
-        case WEST:
-        default:
-            return new Dimension(12, 11);
-        }
-    }
-
-    public Dimension getMinimumSize() {
-        return getPreferredSize();
-    }
-
-    public Dimension getMaximumSize() {
-        return getPreferredSize();
-    }
-
-    public boolean isFocusTraversable() {
-        return false;
-    }
-
-    public void paint(Graphics g)
-    {
-        int w = getWidth();
-        int h = getHeight();
-
-        if (isOpaque()) {
-            g.setColor(getBackground());
-            g.fillRect(0, 0, w, h);
-        }
-
-        boolean isPressed = getModel().isPressed();
-        Color lead = (isPressed) ? darkShadow : lightShadow;
-        Color trail = (isPressed) ? lightShadow : darkShadow;
-        Color fill = getBackground();
-
-        int cx = w / 2;
-        int cy = h / 2;
-        int s = Math.min(w, h);
-
-        switch (direction) {
-        case NORTH:
-            g.setColor(lead);
-            g.drawLine(cx, 0, cx, 0);
-            for (int x = cx - 1, y = 1, dx = 1; y <= s - 2; y += 2) {
-                g.setColor(lead);
-                g.drawLine(x, y, x, y);
-                if (y >= (s - 2)) {
-                    g.drawLine(x, y + 1, x, y + 1);
-                }
-                g.setColor(fill);
-                g.drawLine(x + 1, y, x + dx, y);
-                if (y < (s - 2)) {
-                    g.drawLine(x, y + 1, x + dx + 1, y + 1);
-                }
-                g.setColor(trail);
-                g.drawLine(x + dx + 1, y, x + dx + 1, y);
-                if (y >= (s - 2)) {
-                    g.drawLine(x + 1, y + 1, x + dx + 1, y + 1);
-                }
-                dx += 2;
-                x -= 1;
-            }
-            break;
-
-        case SOUTH:
-            g.setColor(trail);
-            g.drawLine(cx, s, cx, s);
-            for (int x = cx - 1, y = s - 1, dx = 1; y >= 1; y -= 2) {
-                g.setColor(lead);
-                g.drawLine(x, y, x, y);
-                if (y <= 2) {
-                    g.drawLine(x, y - 1, x + dx + 1, y - 1);
-                }
-                g.setColor(fill);
-                g.drawLine(x + 1, y, x + dx, y);
-                if (y > 2) {
-                    g.drawLine(x, y - 1, x + dx + 1, y - 1);
-                }
-                g.setColor(trail);
-                g.drawLine(x + dx + 1, y, x + dx + 1, y);
-
-                dx += 2;
-                x -= 1;
-            }
-            break;
-
-        case EAST:
-            g.setColor(lead);
-            g.drawLine(s, cy, s, cy);
-            for (int y = cy - 1, x = s - 1, dy = 1; x >= 1; x -= 2) {
-                g.setColor(lead);
-                g.drawLine(x, y, x, y);
-                if (x <= 2) {
-                    g.drawLine(x - 1, y, x - 1, y + dy + 1);
-                }
-                g.setColor(fill);
-                g.drawLine(x, y + 1, x, y + dy);
-                if (x > 2) {
-                    g.drawLine(x - 1, y, x - 1, y + dy + 1);
-                }
-                g.setColor(trail);
-                g.drawLine(x, y + dy + 1, x, y + dy + 1);
-
-                dy += 2;
-                y -= 1;
-            }
-            break;
-
-        case WEST:
-            g.setColor(trail);
-            g.drawLine(0, cy, 0, cy);
-            for (int y = cy - 1, x = 1, dy = 1; x <= s - 2; x += 2) {
-                g.setColor(lead);
-                g.drawLine(x, y, x, y);
-                if (x >= (s - 2)) {
-                    g.drawLine(x + 1, y, x + 1, y);
-                }
-                g.setColor(fill);
-                g.drawLine(x, y + 1, x, y + dy);
-                if (x < (s - 2)) {
-                    g.drawLine(x + 1, y, x + 1, y + dy + 1);
-                }
-                g.setColor(trail);
-                g.drawLine(x, y + dy + 1, x, y + dy + 1);
-                if (x >= (s - 2)) {
-                    g.drawLine(x + 1, y + 1, x + 1, y + dy + 1);
-                }
-                dy += 2;
-                y -= 1;
-            }
-            break;
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifScrollBarUI.java b/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifScrollBarUI.java
deleted file mode 100755
index b2d79dd..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifScrollBarUI.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-package com.sun.java.swing.plaf.motif;
-
-import javax.swing.*;
-import javax.swing.event.*;
-import javax.swing.plaf.*;
-import javax.swing.border.*;
-import javax.swing.plaf.basic.BasicScrollBarUI;
-
-import java.awt.Dimension;
-import java.awt.Insets;
-import java.awt.Rectangle;
-import java.awt.Graphics;
-import java.awt.Color;
-
-
-/**
- * Implementation of ScrollBarUI for the Motif Look and Feel
- * <p>
- * <strong>Warning:</strong>
- * Serialized objects of this class will not be compatible with
- * future Swing releases.  The current serialization support is appropriate
- * for short term storage or RMI between applications running the same
- * version of Swing.  A future release of Swing will provide support for
- * long term persistence.
- *
- * @author Rich Schiavi
- * @author Hans Muller
- */
-public class MotifScrollBarUI extends BasicScrollBarUI
-{
-
-    public static ComponentUI createUI(JComponent c) {
-        return new MotifScrollBarUI();
-    }
-
-    public Dimension getPreferredSize(JComponent c) {
-        Insets insets = c.getInsets();
-        int dx = insets.left + insets.right;
-        int dy = insets.top + insets.bottom;
-        return (scrollbar.getOrientation() == JScrollBar.VERTICAL)
-            ? new Dimension(dx + 11, dy + 33)
-            : new Dimension(dx + 33, dy + 11);
-    }
-
-    protected JButton createDecreaseButton(int orientation) {
-        return new MotifScrollBarButton(orientation);
-    }
-
-    protected JButton createIncreaseButton(int orientation) {
-        return new MotifScrollBarButton(orientation);
-    }
-
-
-    public void paintTrack(Graphics g, JComponent c, Rectangle trackBounds)  {
-        g.setColor(trackColor);
-        g.fillRect(trackBounds.x, trackBounds.y, trackBounds.width, trackBounds.height);
-    }
-
-
-    public void paintThumb(Graphics g, JComponent c, Rectangle thumbBounds)
-    {
-
-        if(thumbBounds.isEmpty() || !scrollbar.isEnabled())     {
-            return;
-        }
-
-        int w = thumbBounds.width;
-        int h = thumbBounds.height;
-
-        g.translate(thumbBounds.x, thumbBounds.y);
-        g.setColor(thumbColor);
-        g.fillRect(0, 0, w-1, h-1);
-
-        g.setColor(thumbHighlightColor);
-        g.drawLine(0, 0, 0, h-1);
-        g.drawLine(1, 0, w-1, 0);
-
-        g.setColor(thumbLightShadowColor);
-        g.drawLine(1, h-1, w-1, h-1);
-        g.drawLine(w-1, 1, w-1, h-2);
-
-        g.translate(-thumbBounds.x, -thumbBounds.y);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifScrollPaneUI.java b/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifScrollPaneUI.java
deleted file mode 100755
index 2a12ed8..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifScrollPaneUI.java
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-package com.sun.java.swing.plaf.motif;
-
-import javax.swing.*;
-import javax.swing.border.*;
-import javax.swing.plaf.*;
-import javax.swing.plaf.basic.BasicScrollPaneUI;
-
-import java.beans.PropertyChangeEvent;
-import java.beans.PropertyChangeListener;
-
-/**
- * A CDE/Motif L&F implementation of ScrollPaneUI.
- * <p>
- * <strong>Warning:</strong>
- * Serialized objects of this class will not be compatible with
- * future Swing releases.  The current serialization support is appropriate
- * for short term storage or RMI between applications running the same
- * version of Swing.  A future release of Swing will provide support for
- * long term persistence.
- *
- * @author Hans Muller
- */
-public class MotifScrollPaneUI extends BasicScrollPaneUI
-{
-    private final static Border vsbMarginBorderR = new EmptyBorder(0, 4, 0, 0);
-    private final static Border vsbMarginBorderL = new EmptyBorder(0, 0, 0, 4);
-    private final static Border hsbMarginBorder = new EmptyBorder(4, 0, 0, 0);
-
-    private CompoundBorder vsbBorder;
-    private CompoundBorder hsbBorder;
-
-    private PropertyChangeListener propertyChangeHandler;
-
-    protected void installListeners(JScrollPane scrollPane) {
-        super.installListeners(scrollPane);
-        propertyChangeHandler = createPropertyChangeHandler();
-        scrollPane.addPropertyChangeListener(propertyChangeHandler);
-    }
-
-    protected void uninstallListeners(JScrollPane scrollPane) {
-        super.uninstallListeners(scrollPane);
-        scrollPane.removePropertyChangeListener(propertyChangeHandler);
-    }
-
-    private PropertyChangeListener createPropertyChangeHandler() {
-        return new PropertyChangeListener() {
-            public void propertyChange(PropertyChangeEvent e) {
-                  String propertyName = e.getPropertyName();
-
-                  if (propertyName.equals("componentOrientation")) {
-                        JScrollPane pane = (JScrollPane)e.getSource();
-                        JScrollBar vsb = pane.getVerticalScrollBar();
-                        if (vsb != null && vsbBorder != null &&
-                            vsb.getBorder() == vsbBorder) {
-                            // The Border on the verticall scrollbar matches
-                            // what we installed, reset it.
-                            if (MotifGraphicsUtils.isLeftToRight(pane)) {
-                                vsbBorder = new CompoundBorder(vsbMarginBorderR,
-                                                vsbBorder.getInsideBorder());
-                            } else {
-                                vsbBorder = new CompoundBorder(vsbMarginBorderL,
-                                                vsbBorder.getInsideBorder());
-                            }
-                            vsb.setBorder(vsbBorder);
-                        }
-                  }
-        }};
-    }
-
-    protected void installDefaults(JScrollPane scrollpane) {
-        super.installDefaults(scrollpane);
-
-        JScrollBar vsb = scrollpane.getVerticalScrollBar();
-        if (vsb != null) {
-            if (MotifGraphicsUtils.isLeftToRight(scrollpane)) {
-                vsbBorder = new CompoundBorder(vsbMarginBorderR,
-                                               vsb.getBorder());
-            }
-            else {
-                vsbBorder = new CompoundBorder(vsbMarginBorderL,
-                                               vsb.getBorder());
-            }
-            vsb.setBorder(vsbBorder);
-        }
-
-        JScrollBar hsb = scrollpane.getHorizontalScrollBar();
-        if (hsb != null) {
-            hsbBorder = new CompoundBorder(hsbMarginBorder, hsb.getBorder());
-            hsb.setBorder(hsbBorder);
-        }
-    }
-
-
-    protected void uninstallDefaults(JScrollPane c) {
-        super.uninstallDefaults(c);
-
-        JScrollBar vsb = scrollpane.getVerticalScrollBar();
-        if (vsb != null) {
-            if (vsb.getBorder() == vsbBorder) {
-                vsb.setBorder(null);
-            }
-            vsbBorder = null;
-        }
-
-        JScrollBar hsb = scrollpane.getHorizontalScrollBar();
-        if (hsb != null) {
-            if (hsb.getBorder() == hsbBorder) {
-                hsb.setBorder(null);
-            }
-            hsbBorder = null;
-        }
-    }
-
-
-    public static ComponentUI createUI(JComponent x) {
-        return new MotifScrollPaneUI();
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifSeparatorUI.java b/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifSeparatorUI.java
deleted file mode 100755
index db6033f..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifSeparatorUI.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright (c) 1997, 1998, 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.java.swing.plaf.motif;
-
-import javax.swing.*;
-import java.awt.Color;
-import java.awt.Dimension;
-import java.awt.Graphics;
-import java.awt.Insets;
-import java.awt.Rectangle;
-import javax.swing.plaf.*;
-import javax.swing.plaf.basic.BasicSeparatorUI;
-
-/**
- * A Motif L&F implementation of SeparatorUI.  This implementation
- * is a "combined" view/controller.
- * <p>
- * <strong>Warning:</strong>
- * Serialized objects of this class will not be compatible with
- * future Swing releases.  The current serialization support is appropriate
- * for short term storage or RMI between applications running the same
- * version of Swing.  A future release of Swing will provide support for
- * long term persistence.
- *
- * @author Georges Saab
- * @author Jeff Shapiro
- */
-
-public class MotifSeparatorUI extends BasicSeparatorUI
-{
-    public static ComponentUI createUI( JComponent c )
-    {
-        return new MotifSeparatorUI();
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifSliderUI.java b/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifSliderUI.java
deleted file mode 100755
index 2ee2845..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifSliderUI.java
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * Copyright (c) 1997, 1999, 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.java.swing.plaf.motif;
-
-import java.awt.*;
-import java.awt.event.*;
-
-import javax.swing.*;
-import javax.swing.event.*;
-import javax.swing.plaf.*;
-
-import javax.swing.plaf.basic.BasicSliderUI;
-
-/**
- * Motif Slider
- * <p>
- * <strong>Warning:</strong>
- * Serialized objects of this class will not be compatible with
- * future Swing releases.  The current serialization support is appropriate
- * for short term storage or RMI between applications running the same
- * version of Swing.  A future release of Swing will provide support for
- * long term persistence.
- *
- * @author Jeff Dinkins
- */
-public class MotifSliderUI extends BasicSliderUI {
-
-    static final Dimension PREFERRED_HORIZONTAL_SIZE = new Dimension(164, 15);
-    static final Dimension PREFERRED_VERTICAL_SIZE = new Dimension(15, 164);
-
-    static final Dimension MINIMUM_HORIZONTAL_SIZE = new Dimension(43, 15);
-    static final Dimension MINIMUM_VERTICAL_SIZE = new Dimension(15, 43);
-
-    /**
-     * MotifSliderUI Constructor
-     */
-    public MotifSliderUI(JSlider b)   {
-        super(b);
-    }
-
-    /**
-     * create a MotifSliderUI object
-     */
-    public static ComponentUI createUI(JComponent b)    {
-        return new MotifSliderUI((JSlider)b);
-    }
-
-    public Dimension getPreferredHorizontalSize() {
-        return PREFERRED_HORIZONTAL_SIZE;
-    }
-
-    public Dimension getPreferredVerticalSize() {
-        return PREFERRED_VERTICAL_SIZE;
-    }
-
-    public Dimension getMinimumHorizontalSize() {
-        return MINIMUM_HORIZONTAL_SIZE;
-    }
-
-    public Dimension getMinimumVerticalSize() {
-        return MINIMUM_VERTICAL_SIZE;
-    }
-
-    protected Dimension getThumbSize() {
-        if ( slider.getOrientation() == JSlider.HORIZONTAL ) {
-            return new Dimension( 30, 15 );
-        }
-        else {
-            return new Dimension( 15, 30 );
-        }
-    }
-
-    public void paintFocus(Graphics g)  {
-    }
-
-    public void paintTrack(Graphics g)  {
-    }
-
-    public void paintThumb(Graphics g)  {
-        Rectangle knobBounds = thumbRect;
-
-        int x = knobBounds.x;
-        int y = knobBounds.y;
-        int w = knobBounds.width;
-        int h = knobBounds.height;
-
-        if ( slider.isEnabled() ) {
-            g.setColor(slider.getForeground());
-        }
-        else {
-            // PENDING(jeff) - the thumb should be dithered when disabled
-            g.setColor(slider.getForeground().darker());
-        }
-
-        if ( slider.getOrientation() == JSlider.HORIZONTAL ) {
-            g.translate(x, knobBounds.y-1);
-
-            // fill
-            g.fillRect(0, 1, w, h - 1);
-
-            // highlight
-            g.setColor(getHighlightColor());
-            g.drawLine(0, 1, w - 1, 1);             // top
-            g.drawLine(0, 1, 0, h);                     // left
-            g.drawLine(w/2, 2, w/2, h-1);       // center
-
-            // shadow
-            g.setColor(getShadowColor());
-            g.drawLine(0, h, w - 1, h);         // bottom
-            g.drawLine(w - 1, 1, w - 1, h);     // right
-            g.drawLine(w/2 - 1, 2, w/2 - 1, h); // center
-
-            g.translate(-x, -(knobBounds.y-1));
-        }
-        else {
-            g.translate(knobBounds.x-1, 0);
-
-            // fill
-            g.fillRect(1, y, w - 1, h);
-
-            // highlight
-            g.setColor(getHighlightColor());
-            g.drawLine(1, y, w, y);                     // top
-            g.drawLine(1, y+1, 1, y+h-1);               // left
-            g.drawLine(2, y+h/2, w-1, y+h/2);           // center
-
-            // shadow
-            g.setColor(getShadowColor());
-            g.drawLine(2, y+h-1, w, y+h-1);             // bottom
-            g.drawLine(w, y+h-1, w, y);                 // right
-            g.drawLine(2, y+h/2-1, w-1, y+h/2-1);       // center
-
-            g.translate(-(knobBounds.x-1), 0);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifSplitPaneDivider.java b/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifSplitPaneDivider.java
deleted file mode 100755
index 1ce751a..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifSplitPaneDivider.java
+++ /dev/null
@@ -1,295 +0,0 @@
-/*
- * Copyright (c) 1997, 1999, 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.java.swing.plaf.motif;
-
-import java.awt.*;
-import java.awt.event.*;
-import javax.swing.JSplitPane;
-import javax.swing.UIManager;
-import javax.swing.plaf.basic.BasicSplitPaneUI;
-import javax.swing.plaf.basic.BasicSplitPaneDivider;
-
-
-/**
- * Divider used for Motif split pane.
- * <p>
- * <strong>Warning:</strong>
- * Serialized objects of this class will not be compatible with
- * future Swing releases.  The current serialization support is appropriate
- * for short term storage or RMI between applications running the same
- * version of Swing.  A future release of Swing will provide support for
- * long term persistence.
- *
- * @author Jeff Dinkins
- */
-public class MotifSplitPaneDivider extends BasicSplitPaneDivider
-{
-    /**
-     * Default cursor, supers is package private, so we have to have one
-     * too.
-     */
-    private static final Cursor defaultCursor =
-                            Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR);
-
-
-    public static final int minimumThumbSize = 6;
-    public static final int defaultDividerSize = 18;
-
-    protected  static final int pad = 6;
-
-    private int hThumbOffset = 30;
-    private int vThumbOffset = 40;
-    protected int hThumbWidth = 12;
-    protected int hThumbHeight = 18;
-    protected int vThumbWidth = 18;
-    protected int vThumbHeight = 12;
-
-    protected Color highlightColor;
-    protected Color shadowColor;
-    protected Color focusedColor;
-
-    /**
-     * Creates a new Motif SplitPaneDivider
-     */
-    public MotifSplitPaneDivider(BasicSplitPaneUI ui) {
-        super(ui);
-        highlightColor = UIManager.getColor("SplitPane.highlight");
-        shadowColor = UIManager.getColor("SplitPane.shadow");
-        focusedColor = UIManager.getColor("SplitPane.activeThumb");
-        setDividerSize(hThumbWidth + pad);
-    }
-
-    /**
-     * overrides to hardcode the size of the divider
-     * PENDING(jeff) - rewrite JSplitPane so that this ins't needed
-     */
-    public void setDividerSize(int newSize) {
-        Insets          insets = getInsets();
-        int             borderSize = 0;
-        if (getBasicSplitPaneUI().getOrientation() ==
-            JSplitPane.HORIZONTAL_SPLIT) {
-            if (insets != null) {
-                borderSize = insets.left + insets.right;
-            }
-        }
-        else if (insets != null) {
-            borderSize = insets.top + insets.bottom;
-        }
-        if (newSize < pad + minimumThumbSize + borderSize) {
-            setDividerSize(pad + minimumThumbSize + borderSize);
-        } else {
-            vThumbHeight = hThumbWidth = newSize - pad - borderSize;
-            super.setDividerSize(newSize);
-        }
-    }
-
-    /**
-      * Paints the divider.
-      */
-    // PENDING(jeff) - the thumb's location and size is currently hard coded.
-    // It should be dynamic.
-    public void paint(Graphics g) {
-        Color               bgColor = getBackground();
-        Dimension           size = getSize();
-
-        // fill
-        g.setColor(getBackground());
-        g.fillRect(0, 0, size.width, size.height);
-
-        if(getBasicSplitPaneUI().getOrientation() ==
-           JSplitPane.HORIZONTAL_SPLIT) {
-            int center = size.width/2;
-            int x = center - hThumbWidth/2;
-            int y = hThumbOffset;
-
-            // split line
-            g.setColor(shadowColor);
-            g.drawLine(center-1, 0, center-1, size.height);
-
-            g.setColor(highlightColor);
-            g.drawLine(center, 0, center, size.height);
-
-            // draw thumb
-            g.setColor((splitPane.hasFocus()) ? focusedColor :
-                                                getBackground());
-            g.fillRect(x+1, y+1, hThumbWidth-2, hThumbHeight-1);
-
-            g.setColor(highlightColor);
-            g.drawLine(x, y, x+hThumbWidth-1, y);       // top
-            g.drawLine(x, y+1, x, y+hThumbHeight-1);    // left
-
-            g.setColor(shadowColor);
-            g.drawLine(x+1, y+hThumbHeight-1,
-                       x+hThumbWidth-1, y+hThumbHeight-1);      // bottom
-            g.drawLine(x+hThumbWidth-1, y+1,
-                       x+hThumbWidth-1, y+hThumbHeight-2);      // right
-
-        } else {
-            int center = size.height/2;
-            int x = size.width - vThumbOffset;
-            int y = size.height/2 - vThumbHeight/2;
-
-            // split line
-            g.setColor(shadowColor);
-            g.drawLine(0, center-1, size.width, center-1);
-
-            g.setColor(highlightColor);
-            g.drawLine(0, center, size.width, center);
-
-            // draw thumb
-            g.setColor((splitPane.hasFocus()) ? focusedColor :
-                                                getBackground());
-            g.fillRect(x+1, y+1, vThumbWidth-1, vThumbHeight-1);
-
-            g.setColor(highlightColor);
-            g.drawLine(x, y, x+vThumbWidth, y);    // top
-            g.drawLine(x, y+1, x, y+vThumbHeight); // left
-
-            g.setColor(shadowColor);
-            g.drawLine(x+1, y+vThumbHeight,
-                       x+vThumbWidth, y+vThumbHeight);          // bottom
-            g.drawLine(x+vThumbWidth, y+1,
-                       x+vThumbWidth, y+vThumbHeight-1);        // right
-        }
-        super.paint(g);
-
-    }
-
-    /**
-      * The minimums size is the same as the preferredSize
-      */
-    public Dimension getMinimumSize() {
-        return getPreferredSize();
-    }
-
-    /**
-     * Sets the SplitPaneUI that is using the receiver. This is completely
-     * overriden from super to create a different MouseHandler.
-     */
-    public void setBasicSplitPaneUI(BasicSplitPaneUI newUI) {
-        if (splitPane != null) {
-            splitPane.removePropertyChangeListener(this);
-           if (mouseHandler != null) {
-               splitPane.removeMouseListener(mouseHandler);
-               splitPane.removeMouseMotionListener(mouseHandler);
-               removeMouseListener(mouseHandler);
-               removeMouseMotionListener(mouseHandler);
-               mouseHandler = null;
-           }
-        }
-        splitPaneUI = newUI;
-        if (newUI != null) {
-            splitPane = newUI.getSplitPane();
-            if (splitPane != null) {
-                if (mouseHandler == null) mouseHandler=new MotifMouseHandler();
-                splitPane.addMouseListener(mouseHandler);
-                splitPane.addMouseMotionListener(mouseHandler);
-                addMouseListener(mouseHandler);
-                addMouseMotionListener(mouseHandler);
-                splitPane.addPropertyChangeListener(this);
-                if (splitPane.isOneTouchExpandable()) {
-                    oneTouchExpandableChanged();
-                }
-            }
-        }
-        else {
-            splitPane = null;
-        }
-    }
-
-    /**
-     * Returns true if the point at <code>x</code>, <code>y</code>
-     * is inside the thumb.
-     */
-    private boolean isInThumb(int x, int y) {
-        Dimension           size = getSize();
-        int                 thumbX;
-        int                 thumbY;
-        int                 thumbWidth;
-        int                 thumbHeight;
-
-        if (getBasicSplitPaneUI().getOrientation() ==
-            JSplitPane.HORIZONTAL_SPLIT) {
-            int center = size.width/2;
-            thumbX = center - hThumbWidth/2;
-            thumbY = hThumbOffset;
-            thumbWidth = hThumbWidth;
-            thumbHeight = hThumbHeight;
-        }
-        else {
-            int center = size.height/2;
-            thumbX = size.width - vThumbOffset;
-            thumbY = size.height/2 - vThumbHeight/2;
-            thumbWidth = vThumbWidth;
-            thumbHeight = vThumbHeight;
-        }
-        return (x >= thumbX && x < (thumbX + thumbWidth) &&
-                y >= thumbY && y < (thumbY + thumbHeight));
-    }
-
-    //
-    // Two methods are exposed so that MotifMouseHandler can see the
-    // superclass protected ivars
-    //
-
-    private DragController getDragger() {
-        return dragger;
-    }
-
-    private JSplitPane getSplitPane() {
-        return splitPane;
-    }
-
-
-    /**
-     * MouseHandler is subclassed to only pass off to super if the mouse
-     * is in the thumb. Motif only allows dragging when the thumb is clicked
-     * in.
-     */
-    private class MotifMouseHandler extends MouseHandler {
-        public void mousePressed(MouseEvent e) {
-            // Constrain the mouse pressed to the thumb.
-            if (e.getSource() == MotifSplitPaneDivider.this &&
-                getDragger() == null && getSplitPane().isEnabled() &&
-                isInThumb(e.getX(), e.getY())) {
-                super.mousePressed(e);
-            }
-        }
-
-        public void mouseMoved(MouseEvent e) {
-            if (getDragger() != null) {
-                return;
-            }
-            if (!isInThumb(e.getX(), e.getY())) {
-                if (getCursor() != defaultCursor) {
-                    setCursor(defaultCursor);
-                }
-                return;
-            }
-            super.mouseMoved(e);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifSplitPaneUI.java b/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifSplitPaneUI.java
deleted file mode 100755
index 6ee6708..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifSplitPaneUI.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright (c) 1997, 1998, 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.java.swing.plaf.motif;
-
-import javax.swing.plaf.basic.BasicSplitPaneUI;
-import javax.swing.plaf.basic.BasicSplitPaneDivider;
-import javax.swing.plaf.*;
-import javax.swing.*;
-import java.awt.*;
-
-/**
- * Motif rendition of a split pane.
- * <p>
- * <strong>Warning:</strong>
- * Serialized objects of this class will not be compatible with
- * future Swing releases.  The current serialization support is appropriate
- * for short term storage or RMI between applications running the same
- * version of Swing.  A future release of Swing will provide support for
- * long term persistence.
- *
- * @author Jeff Dinkins
- */
-public class MotifSplitPaneUI extends BasicSplitPaneUI
-{
-    public MotifSplitPaneUI() {
-        super();
-    }
-
-    /**
-      * Creates a new MotifSplitPaneUI instance
-      */
-    public static ComponentUI createUI(JComponent x) {
-        return new MotifSplitPaneUI();
-    }
-
-    /**
-      * Creates the default divider.
-      */
-    public BasicSplitPaneDivider createDefaultDivider() {
-        return new MotifSplitPaneDivider(this);
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifTabbedPaneUI.java b/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifTabbedPaneUI.java
deleted file mode 100755
index ce2408f..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifTabbedPaneUI.java
+++ /dev/null
@@ -1,306 +0,0 @@
-/*
- * Copyright (c) 1997, 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.java.swing.plaf.motif;
-
-import java.awt.*;
-import java.awt.event.*;
-import javax.swing.*;
-import javax.swing.event.*;
-import javax.swing.plaf.*;
-import javax.swing.plaf.basic.BasicTabbedPaneUI;
-import java.io.Serializable;
-
-/**
- * A Motif L&F implementation of TabbedPaneUI.
- * <p>
- * <strong>Warning:</strong>
- * Serialized objects of this class will not be compatible with
- * future Swing releases.  The current serialization support is appropriate
- * for short term storage or RMI between applications running the same
- * version of Swing.  A future release of Swing will provide support for
- * long term persistence.
- *
- * @author Amy Fowler
- * @author Philip Milne
- */
-public class MotifTabbedPaneUI extends BasicTabbedPaneUI
-{
-
-// Instance variables initialized at installation
-
-    protected Color unselectedTabBackground;
-    protected Color unselectedTabForeground;
-    protected Color unselectedTabShadow;
-    protected Color unselectedTabHighlight;
-
-
-// UI creation
-
-    public static ComponentUI createUI(JComponent tabbedPane) {
-        return new MotifTabbedPaneUI();
-    }
-
-
-// UI Installation/De-installation
-
-
-    protected void installDefaults() {
-        super.installDefaults();
-
-        unselectedTabBackground = UIManager.getColor("TabbedPane.unselectedTabBackground");
-        unselectedTabForeground = UIManager.getColor("TabbedPane.unselectedTabForeground");
-        unselectedTabShadow = UIManager.getColor("TabbedPane.unselectedTabShadow");
-        unselectedTabHighlight = UIManager.getColor("TabbedPane.unselectedTabHighlight");
-    }
-
-    protected void uninstallDefaults() {
-        super.uninstallDefaults();
-
-        unselectedTabBackground = null;
-        unselectedTabForeground = null;
-        unselectedTabShadow = null;
-        unselectedTabHighlight = null;
-    }
-
-// UI Rendering
-
-   protected void paintContentBorderTopEdge(Graphics g, int tabPlacement,
-                                            int selectedIndex,
-                                            int x, int y, int w, int h) {
-        Rectangle selRect = selectedIndex < 0? null :
-                               getTabBounds(selectedIndex, calcRect);
-        g.setColor(lightHighlight);
-
-        // Draw unbroken line if tabs are not on TOP, OR
-        // selected tab is not visible (SCROLL_TAB_LAYOUT)
-        //
-        if (tabPlacement != TOP || selectedIndex < 0 ||
-            (selRect.x < x || selRect.x > x + w)) {
-            g.drawLine(x, y, x+w-2, y);
-        } else {
-            // Break line to show visual connection to selected tab
-            g.drawLine(x, y, selRect.x - 1, y);
-            if (selRect.x + selRect.width < x + w - 2) {
-                g.drawLine(selRect.x + selRect.width, y,
-                           x+w-2, y);
-            }
-        }
-    }
-
-    protected void paintContentBorderBottomEdge(Graphics g, int tabPlacement,
-                                               int selectedIndex,
-                                               int x, int y, int w, int h) {
-        Rectangle selRect = selectedIndex < 0? null :
-                               getTabBounds(selectedIndex, calcRect);
-        g.setColor(shadow);
-
-        // Draw unbroken line if tabs are not on BOTTOM, OR
-        // selected tab is not visible (SCROLL_TAB_LAYOUT)
-        //
-        if (tabPlacement != BOTTOM || selectedIndex < 0 ||
-             (selRect.x < x || selRect.x > x + w)) {
-            g.drawLine(x+1, y+h-1, x+w-1, y+h-1);
-        } else {
-            // Break line to show visual connection to selected tab
-            g.drawLine(x+1, y+h-1, selRect.x - 1, y+h-1);
-            if (selRect.x + selRect.width < x + w - 2) {
-                g.drawLine(selRect.x + selRect.width, y+h-1, x+w-2, y+h-1);
-            }
-        }
-    }
-
-    protected void paintContentBorderRightEdge(Graphics g, int tabPlacement,
-                                               int selectedIndex,
-                                               int x, int y, int w, int h) {
-        Rectangle selRect = selectedIndex < 0? null :
-                               getTabBounds(selectedIndex, calcRect);
-        g.setColor(shadow);
-        // Draw unbroken line if tabs are not on RIGHT, OR
-        // selected tab is not visible (SCROLL_TAB_LAYOUT)
-        //
-        if (tabPlacement != RIGHT || selectedIndex < 0 ||
-             (selRect.y < y || selRect.y > y + h)) {
-            g.drawLine(x+w-1, y+1, x+w-1, y+h-1);
-        } else {
-            // Break line to show visual connection to selected tab
-            g.drawLine(x+w-1, y+1, x+w-1, selRect.y - 1);
-            if (selRect.y + selRect.height < y + h - 2 ) {
-                g.drawLine(x+w-1, selRect.y + selRect.height,
-                           x+w-1, y+h-2);
-            }
-        }
-    }
-
-    protected void paintTabBackground(Graphics g,
-                                      int tabPlacement, int tabIndex,
-                                      int x, int y, int w, int h,
-                                      boolean isSelected ) {
-        g.setColor(isSelected? tabPane.getBackgroundAt(tabIndex) : unselectedTabBackground);
-        switch(tabPlacement) {
-          case LEFT:
-              g.fillRect(x+1, y+1, w-1, h-2);
-              break;
-          case RIGHT:
-              g.fillRect(x, y+1, w-1, h-2);
-              break;
-          case BOTTOM:
-              g.fillRect(x+1, y, w-2, h-3);
-              g.drawLine(x+2, y+h-3, x+w-3, y+h-3);
-              g.drawLine(x+3, y+h-2, x+w-4, y+h-2);
-              break;
-          case TOP:
-          default:
-              g.fillRect(x+1, y+3, w-2, h-3);
-              g.drawLine(x+2, y+2, x+w-3, y+2);
-              g.drawLine(x+3, y+1, x+w-4, y+1);
-        }
-
-    }
-
-    protected void paintTabBorder(Graphics g,
-                                  int tabPlacement, int tabIndex,
-                                  int x, int y, int w, int h,
-                                  boolean isSelected) {
-        g.setColor(isSelected? lightHighlight : unselectedTabHighlight);
-
-        switch(tabPlacement) {
-          case LEFT:
-              g.drawLine(x, y+2, x, y+h-3);
-              g.drawLine(x+1, y+1, x+1, y+2);
-              g.drawLine(x+2, y, x+2, y+1);
-              g.drawLine(x+3, y, x+w-1, y);
-              g.setColor(isSelected? shadow : unselectedTabShadow);
-              g.drawLine(x+1, y+h-3, x+1, y+h-2);
-              g.drawLine(x+2, y+h-2, x+2, y+h-1);
-              g.drawLine(x+3, y+h-1, x+w-1, y+h-1);
-              break;
-          case RIGHT:
-              g.drawLine(x, y, x+w-3, y);
-              g.setColor(isSelected? shadow : unselectedTabShadow);
-              g.drawLine(x+w-3, y, x+w-3, y+1);
-              g.drawLine(x+w-2, y+1, x+w-2, y+2);
-              g.drawLine(x+w-1, y+2, x+w-1, y+h-3);
-              g.drawLine(x+w-2, y+h-3, x+w-2, y+h-2);
-              g.drawLine(x+w-3, y+h-2, x+w-3, y+h-1);
-              g.drawLine(x, y+h-1, x+w-3, y+h-1);
-              break;
-          case BOTTOM:
-              g.drawLine(x, y, x, y+h-3);
-              g.drawLine(x+1, y+h-3, x+1, y+h-2);
-              g.drawLine(x+2, y+h-2, x+2, y+h-1);
-              g.setColor(isSelected? shadow : unselectedTabShadow);
-              g.drawLine(x+3, y+h-1, x+w-4, y+h-1);
-              g.drawLine(x+w-3, y+h-2, x+w-3, y+h-1);
-              g.drawLine(x+w-2, y+h-3, x+w-2, y+h-2);
-              g.drawLine(x+w-1, y, x+w-1, y+h-3);
-              break;
-          case TOP:
-          default:
-              g.drawLine(x, y+2, x, y+h-1);
-              g.drawLine(x+1, y+1, x+1, y+2);
-              g.drawLine(x+2, y, x+2, y+1);
-              g.drawLine(x+3, y, x+w-4, y);
-              g.setColor(isSelected? shadow : unselectedTabShadow);
-              g.drawLine(x+w-3, y, x+w-3, y+1);
-              g.drawLine(x+w-2, y+1, x+w-2, y+2);
-              g.drawLine(x+w-1, y+2, x+w-1, y+h-1);
-        }
-
-    }
-
-    protected void paintFocusIndicator(Graphics g, int tabPlacement,
-                                       Rectangle[] rects, int tabIndex,
-                                       Rectangle iconRect, Rectangle textRect,
-                                       boolean isSelected) {
-        Rectangle tabRect = rects[tabIndex];
-        if (tabPane.hasFocus() && isSelected) {
-            int x, y, w, h;
-            g.setColor(focus);
-            switch(tabPlacement) {
-              case LEFT:
-                  x = tabRect.x + 3;
-                  y = tabRect.y + 3;
-                  w = tabRect.width - 6;
-                  h = tabRect.height - 7;
-                  break;
-              case RIGHT:
-                  x = tabRect.x + 2;
-                  y = tabRect.y + 3;
-                  w = tabRect.width - 6;
-                  h = tabRect.height - 7;
-                  break;
-              case BOTTOM:
-                  x = tabRect.x + 3;
-                  y = tabRect.y + 2;
-                  w = tabRect.width - 7;
-                  h = tabRect.height - 6;
-                  break;
-              case TOP:
-              default:
-                  x = tabRect.x + 3;
-                  y = tabRect.y + 3;
-                  w = tabRect.width - 7;
-                  h = tabRect.height - 6;
-            }
-            g.drawRect(x, y, w, h);
-        }
-    }
-
-    protected int getTabRunIndent(int tabPlacement, int run) {
-        return run*3;
-    }
-
-    protected int getTabRunOverlay(int tabPlacement) {
-        tabRunOverlay = (tabPlacement == LEFT || tabPlacement == RIGHT)?
-            (int)Math.round((float)maxTabWidth * .10) :
-            (int)Math.round((float)maxTabHeight * .22);
-
-        // Ensure that runover lay is not more than insets
-        // 2 pixel offset is set from insets to each run
-        switch(tabPlacement) {
-        case LEFT:
-                if( tabRunOverlay > tabInsets.right - 2 )
-                    tabRunOverlay = tabInsets.right - 2 ;
-                break;
-        case RIGHT:
-                if( tabRunOverlay > tabInsets.left - 2 )
-                    tabRunOverlay = tabInsets.left - 2 ;
-                break;
-        case TOP:
-                if( tabRunOverlay > tabInsets.bottom - 2 )
-                    tabRunOverlay = tabInsets.bottom - 2 ;
-                break;
-        case BOTTOM:
-                if( tabRunOverlay > tabInsets.top - 2 )
-                    tabRunOverlay = tabInsets.top - 2 ;
-                break;
-
-        }
-
-        return tabRunOverlay;
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifTextAreaUI.java b/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifTextAreaUI.java
deleted file mode 100755
index c6f4cc5..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifTextAreaUI.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright (c) 1997, 1998, 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.java.swing.plaf.motif;
-
-import javax.swing.*;
-import javax.swing.text.*;
-import javax.swing.plaf.*;
-import javax.swing.plaf.basic.BasicTextAreaUI;
-
-/**
- * Provides the look and feel for a plain text editor.  In this
- * implementation the default UI is extended to act as a simple
- * view factory.
- * <p>
- * <strong>Warning:</strong>
- * Serialized objects of this class will not be compatible with
- * future Swing releases.  The current serialization support is appropriate
- * for short term storage or RMI between applications running the same
- * version of Swing.  A future release of Swing will provide support for
- * long term persistence.
- *
- * @author  Timothy Prinzing
- */
-public class MotifTextAreaUI extends BasicTextAreaUI {
-
-    /**
-     * Creates a UI for a JTextArea.
-     *
-     * @param ta a text area
-     * @return the UI
-     */
-    public static ComponentUI createUI(JComponent ta) {
-        return new MotifTextAreaUI();
-    }
-
-    /**
-     * Creates the object to use for a caret.  By default an
-     * instance of MotifTextUI.MotifCaret is created.  This method
-     * can be redefined to provide something else that implements
-     * the Caret interface.
-     *
-     * @return the caret object
-     */
-    protected Caret createCaret() {
-        return MotifTextUI.createCaret();
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifTextFieldUI.java b/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifTextFieldUI.java
deleted file mode 100755
index 895183c..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifTextFieldUI.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (c) 1997, 1998, 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.java.swing.plaf.motif;
-
-import javax.swing.*;
-import javax.swing.plaf.basic.BasicTextFieldUI;
-import javax.swing.plaf.*;
-import javax.swing.text.Caret;
-
-/**
- * Provides the Motif look and feel for a text field.
- * <p>
- * <strong>Warning:</strong>
- * Serialized objects of this class will not be compatible with
- * future Swing releases.  The current serialization support is appropriate
- * for short term storage or RMI between applications running the same
- * version of Swing.  A future release of Swing will provide support for
- * long term persistence.
- *
- * @author  Timothy Prinzing
- */
-public class MotifTextFieldUI extends BasicTextFieldUI {
-
-    /**
-     * Creates a UI for a JTextField.
-     *
-     * @param c the text field
-     * @return the UI
-     */
-    public static ComponentUI createUI(JComponent c) {
-        return new MotifTextFieldUI();
-    }
-
-    /**
-     * Creates the object to use for a caret.  By default an
-     * instance of MotifTextUI.MotifCaret is created.  This method
-     * can be redefined to provide something else that implements
-     * the Caret interface.
-     *
-     * @return the caret object
-     */
-    protected Caret createCaret() {
-        return MotifTextUI.createCaret();
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifTextPaneUI.java b/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifTextPaneUI.java
deleted file mode 100755
index 3e1590a..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifTextPaneUI.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (c) 1997, 1998, 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.java.swing.plaf.motif;
-
-import javax.swing.*;
-import javax.swing.text.*;
-import javax.swing.plaf.*;
-import javax.swing.plaf.basic.BasicTextPaneUI;
-
-/**
- * Provides the look and feel for a styled text editor.
- * <p>
- * <strong>Warning:</strong>
- * Serialized objects of this class will not be compatible with
- * future Swing releases.  The current serialization support is appropriate
- * for short term storage or RMI between applications running the same
- * version of Swing.  A future release of Swing will provide support for
- * long term persistence.
- *
- * @author  Timothy Prinzing
- */
-public class MotifTextPaneUI extends BasicTextPaneUI {
-
-    /**
-     * Creates a UI for the JTextPane.
-     *
-     * @param c the JTextPane object
-     * @return the UI
-     */
-    public static ComponentUI createUI(JComponent c) {
-        return new MotifTextPaneUI();
-    }
-
-    /**
-     * Creates the object to use for a caret.  By default an
-     * instance of MotifTextUI.MotifCaret is created.  This method
-     * can be redefined to provide something else that implements
-     * the Caret interface.
-     *
-     * @return the caret object
-     */
-    protected Caret createCaret() {
-        return MotifTextUI.createCaret();
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifTextUI.java b/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifTextUI.java
deleted file mode 100755
index 3bfad49..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifTextUI.java
+++ /dev/null
@@ -1,175 +0,0 @@
-/*
- * Copyright (c) 1997, 1998, 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.java.swing.plaf.motif;
-
-import java.awt.*;
-import java.awt.event.*;
-
-import javax.swing.*;
-import javax.swing.text.*;
-import javax.swing.plaf.*;
-
-/**
- * Provides the look and feel features that are common across
- * the Motif/CDE text LAF implementations.
- * <p>
- * <strong>Warning:</strong>
- * Serialized objects of this class will not be compatible with
- * future Swing releases.  The current serialization support is appropriate
- * for short term storage or RMI between applications running the same
- * version of Swing.  A future release of Swing will provide support for
- * long term persistence.
- *
- * @author  Timothy Prinzing
- */
-public class MotifTextUI {
-
-    /**
-     * Creates the object to use for a caret for all of the Motif
-     * text components.  The caret is rendered as an I-beam on Motif.
-     *
-     * @return the caret object
-     */
-    public static Caret createCaret() {
-        return new MotifCaret();
-    }
-
-    /**
-     * The motif caret is rendered as an I beam.
-     * <p>
-     * <strong>Warning:</strong>
-     * Serialized objects of this class will not be compatible with
-     * future Swing releases.  The current serialization support is appropriate
-     * for short term storage or RMI between applications running the same
-     * version of Swing.  A future release of Swing will provide support for
-     * long term persistence.
-     */
-    public static class MotifCaret extends DefaultCaret implements UIResource {
-
-        /**
-         * Called when the component containing the caret gains
-         * focus.  This is implemented to repaint the component
-         * so the focus rectangle will be re-rendered, as well
-         * as providing the superclass behavior.
-         *
-         * @param e the focus event
-         * @see FocusListener#focusGained
-         */
-        public void focusGained(FocusEvent e) {
-            super.focusGained(e);
-            getComponent().repaint();
-        }
-
-        /**
-         * Called when the component containing the caret loses
-         * focus.  This is implemented to set the caret to visibility
-         * to false.
-         *
-         * @param e the focus event
-         * @see FocusListener#focusLost
-         */
-        public void focusLost(FocusEvent e) {
-            super.focusLost(e);
-            getComponent().repaint();
-        }
-
-        /**
-         * Damages the area surrounding the caret to cause
-         * it to be repainted.  If paint() is reimplemented,
-         * this method should also be reimplemented.
-         *
-         * @param r  the current location of the caret, does nothing if null
-         * @see #paint
-         */
-        protected void damage(Rectangle r) {
-            if (r != null) {
-                x = r.x - IBeamOverhang - 1;
-                y = r.y;
-                width = r.width + (2 * IBeamOverhang) + 3;
-                height = r.height;
-                repaint();
-            }
-        }
-
-        /**
-         * Renders the caret as a vertical line.  If this is reimplemented
-         * the damage method should also be reimplemented as it assumes the
-         * shape of the caret is a vertical line.  Does nothing if isVisible()
-         * is false.  The caret color is derived from getCaretColor() if
-         * the component has focus, else from getDisabledTextColor().
-         *
-         * @param g the graphics context
-         * @see #damage
-         */
-        public void paint(Graphics g) {
-            if(isVisible()) {
-                try {
-                    JTextComponent c = getComponent();
-                    Color fg = c.hasFocus() ? c.getCaretColor() :
-                        c.getDisabledTextColor();
-                    TextUI mapper = c.getUI();
-                    int dot = getDot();
-                    Rectangle r = mapper.modelToView(c, dot);
-                    int x0 = r.x - IBeamOverhang;
-                    int x1 = r.x + IBeamOverhang;
-                    int y0 = r.y + 1;
-                    int y1 = r.y + r.height - 2;
-                    g.setColor(fg);
-                    g.drawLine(r.x, y0, r.x, y1);
-                    g.drawLine(x0, y0, x1, y0);
-                    g.drawLine(x0, y1, x1, y1);
-                } catch (BadLocationException e) {
-                    // can't render I guess
-                    //System.err.println("Can't render caret");
-                }
-            }
-        }
-
-        static final int IBeamOverhang = 2;
-    }
-
-    /**
-     * Default bindings all keymaps implementing the Motif feel.
-     */
-    static final JTextComponent.KeyBinding[] defaultBindings = {
-        new JTextComponent.KeyBinding(KeyStroke.getKeyStroke(KeyEvent.VK_INSERT,
-                                                                    InputEvent.CTRL_MASK),
-                                             DefaultEditorKit.copyAction),
-        new JTextComponent.KeyBinding(KeyStroke.getKeyStroke(KeyEvent.VK_INSERT,
-                                                                    InputEvent.SHIFT_MASK),
-                                             DefaultEditorKit.pasteAction),
-        new JTextComponent.KeyBinding(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE,
-                                                                    InputEvent.SHIFT_MASK),
-                                             DefaultEditorKit.cutAction),
-        new JTextComponent.KeyBinding(KeyStroke.getKeyStroke(KeyEvent.VK_LEFT,
-                                                                    InputEvent.SHIFT_MASK),
-                                             DefaultEditorKit.selectionBackwardAction),
-        new JTextComponent.KeyBinding(KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT,
-                                                                    InputEvent.SHIFT_MASK),
-                                             DefaultEditorKit.selectionForwardAction),
-    };
-
-
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifToggleButtonUI.java b/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifToggleButtonUI.java
deleted file mode 100755
index b13c87e..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifToggleButtonUI.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-package com.sun.java.swing.plaf.motif;
-
-import sun.awt.AppContext;
-
-import java.awt.*;
-import java.awt.event.*;
-
-import javax.swing.*;
-import javax.swing.border.*;
-import javax.swing.plaf.*;
-import javax.swing.plaf.basic.*;
-
-
-/**
- * BasicToggleButton implementation
- * <p>
- * <strong>Warning:</strong>
- * Serialized objects of this class will not be compatible with
- * future Swing releases.  The current serialization support is appropriate
- * for short term storage or RMI between applications running the same
- * version of Swing.  A future release of Swing will provide support for
- * long term persistence.
- *
- * @author Rich Schiavi
- */
-public class MotifToggleButtonUI extends BasicToggleButtonUI
-{
-    private static final Object MOTIF_TOGGLE_BUTTON_UI_KEY = new Object();
-
-    protected Color selectColor;
-
-    private boolean defaults_initialized = false;
-
-    // ********************************
-    //         Create PLAF
-    // ********************************
-    public static ComponentUI createUI(JComponent b) {
-        AppContext appContext = AppContext.getAppContext();
-        MotifToggleButtonUI motifToggleButtonUI =
-                (MotifToggleButtonUI) appContext.get(MOTIF_TOGGLE_BUTTON_UI_KEY);
-        if (motifToggleButtonUI == null) {
-            motifToggleButtonUI = new MotifToggleButtonUI();
-            appContext.put(MOTIF_TOGGLE_BUTTON_UI_KEY, motifToggleButtonUI);
-        }
-        return motifToggleButtonUI;
-    }
-
-    // ********************************
-    //          Install Defaults
-    // ********************************
-    public void installDefaults(AbstractButton b) {
-        super.installDefaults(b);
-        if(!defaults_initialized) {
-            selectColor = UIManager.getColor(getPropertyPrefix() + "select");
-            defaults_initialized = true;
-        }
-        LookAndFeel.installProperty(b, "opaque", Boolean.FALSE);
-    }
-
-    protected void uninstallDefaults(AbstractButton b) {
-        super.uninstallDefaults(b);
-        defaults_initialized = false;
-    }
-
-    // ********************************
-    //          Default Accessors
-    // ********************************
-
-    protected Color getSelectColor() {
-        return selectColor;
-    }
-
-    // ********************************
-    //         Paint Methods
-    // ********************************
-    protected void paintButtonPressed(Graphics g, AbstractButton b) {
-        if (b.isContentAreaFilled()) {
-            Color oldColor = g.getColor();
-            Dimension size = b.getSize();
-            Insets insets = b.getInsets();
-            Insets margin = b.getMargin();
-
-            if(b.getBackground() instanceof UIResource) {
-                g.setColor(getSelectColor());
-            }
-            g.fillRect(insets.left - margin.left,
-                       insets.top - margin.top,
-                       size.width - (insets.left-margin.left) - (insets.right - margin.right),
-                       size.height - (insets.top-margin.top) - (insets.bottom - margin.bottom));
-            g.setColor(oldColor);
-        }
-    }
-
-    public Insets getInsets(JComponent c) {
-        Border border = c.getBorder();
-        Insets i = border != null? border.getBorderInsets(c) : new Insets(0,0,0,0);
-        return i;
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifTreeCellRenderer.java b/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifTreeCellRenderer.java
deleted file mode 100755
index 5db617c..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifTreeCellRenderer.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Copyright (c) 1997, 1999, 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.java.swing.plaf.motif;
-
-import javax.swing.*;
-import javax.swing.plaf.*;
-import javax.swing.tree.*;
-import java.awt.*;
-import java.awt.event.*;
-import java.beans.*;
-import java.io.*;
-import java.util.*;
-
-/**
- * Motif rendered to display a tree cell.
- * <p>
- * <strong>Warning:</strong>
- * Serialized objects of this class will not be compatible with
- * future Swing releases.  The current serialization support is appropriate
- * for short term storage or RMI between applications running the same
- * version of Swing.  A future release of Swing will provide support for
- * long term persistence.
- *
- * @author Jeff Dinkins
- */
-public class MotifTreeCellRenderer extends DefaultTreeCellRenderer
-{
-    static final int LEAF_SIZE = 13;
-    static final Icon LEAF_ICON = new IconUIResource(new TreeLeafIcon());
-
-    public MotifTreeCellRenderer() {
-        super();
-    }
-
-    public static Icon loadLeafIcon() {
-        return LEAF_ICON;
-    }
-
-    /**
-     * Icon for a node with no children.
-     * <p>
-     * <strong>Warning:</strong>
-     * Serialized objects of this class will not be compatible with
-     * future Swing releases.  The current serialization support is appropriate
-     * for short term storage or RMI between applications running the same
-     * version of Swing.  A future release of Swing will provide support for
-     * long term persistence.
-     */
-    public static class TreeLeafIcon implements Icon, Serializable {
-
-        Color bg;
-        Color shadow;
-        Color highlight;
-
-        public TreeLeafIcon() {
-            bg = UIManager.getColor("Tree.iconBackground");
-            shadow = UIManager.getColor("Tree.iconShadow");
-            highlight = UIManager.getColor("Tree.iconHighlight");
-        }
-
-        public void paintIcon(Component c, Graphics g, int x, int y) {
-            g.setColor(bg);
-
-            y -= 3;
-            g.fillRect(x + 4, y + 7, 5, 5);
-
-            g.drawLine(x + 6, y + 6, x + 6, y + 6);
-            g.drawLine(x + 3, y + 9, x + 3, y + 9);
-            g.drawLine(x + 6, y + 12, x + 6, y + 12);
-            g.drawLine(x + 9, y + 9, x + 9, y + 9);
-
-            g.setColor(highlight);
-            g.drawLine(x + 2, y + 9, x + 5, y + 6);
-            g.drawLine(x + 3, y + 10, x + 5, y + 12);
-
-            g.setColor(shadow);
-            g.drawLine(x + 6, y + 13, x + 10, y + 9);
-            g.drawLine(x + 9, y + 8, x + 7, y + 6);
-        }
-
-        public int getIconWidth() {
-            return LEAF_SIZE;
-        }
-
-        public int getIconHeight() {
-            return LEAF_SIZE;
-        }
-
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifTreeUI.java b/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifTreeUI.java
deleted file mode 100755
index d44886f..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/MotifTreeUI.java
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * Copyright (c) 1997, 2006, 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.java.swing.plaf.motif;
-
-import java.awt.*;
-import java.awt.event.*;
-
-import java.io.*;
-import java.util.*;
-
-import javax.swing.*;
-import javax.swing.plaf.*;
-import javax.swing.tree.*;
-import javax.swing.plaf.basic.*;
-
-/**
- * Motif rendition of the tree component.
- * <p>
- * <strong>Warning:</strong>
- * Serialized objects of this class will not be compatible with
- * future Swing releases.  The current serialization support is appropriate
- * for short term storage or RMI between applications running the same
- * version of Swing.  A future release of Swing will provide support for
- * long term persistence.
- *
- * @author Jeff Dinkins
- */
-public class MotifTreeUI extends BasicTreeUI
-{
-    static final int HALF_SIZE = 7;
-    static final int SIZE = 14;
-
-    /**
-     * creates a UI object to represent a Motif Tree widget
-     */
-    public MotifTreeUI() {
-        super();
-    }
-
-    public void installUI(JComponent c) {
-        super.installUI(c);
-    }
-
-    // BasicTreeUI overrides
-
-    protected void paintVerticalLine( Graphics g, JComponent c, int x, int top, int bottom )
-      {
-          if (tree.getComponentOrientation().isLeftToRight()) {
-              g.fillRect( x, top, 2, bottom - top + 2 );
-          } else {
-              g.fillRect( x - 1, top, 2, bottom - top + 2 );
-          }
-      }
-
-    protected void paintHorizontalLine( Graphics g, JComponent c, int y, int left, int right )
-      {
-          g.fillRect( left, y, right - left + 1, 2 );
-      }
-
-
-    /**
-     * The minus sign button icon.
-     * <p>
-     * <strong>Warning:</strong>
-     * Serialized objects of this class will not be compatible with
-     * future Swing releases.  The current serialization support is appropriate
-     * for short term storage or RMI between applications running the same
-     * version of Swing.  A future release of Swing will provide support for
-     * long term persistence.
-     */
-    public static class MotifExpandedIcon implements Icon, Serializable {
-        static Color bg;
-        static Color fg;
-        static Color highlight;
-        static Color shadow;
-
-        public MotifExpandedIcon() {
-            bg = UIManager.getColor("Tree.iconBackground");
-            fg = UIManager.getColor("Tree.iconForeground");
-            highlight = UIManager.getColor("Tree.iconHighlight");
-            shadow = UIManager.getColor("Tree.iconShadow");
-        }
-
-        public static Icon createExpandedIcon() {
-            return new MotifExpandedIcon();
-        }
-
-        public void paintIcon(Component c, Graphics g, int x, int y) {
-            g.setColor(highlight);
-            g.drawLine(x, y, x+SIZE-1, y);
-            g.drawLine(x, y+1, x, y+SIZE-1);
-
-            g.setColor(shadow);
-            g.drawLine(x+SIZE-1, y+1, x+SIZE-1, y+SIZE-1);
-            g.drawLine(x+1, y+SIZE-1, x+SIZE-1, y+SIZE-1);
-
-            g.setColor(bg);
-            g.fillRect(x+1, y+1, SIZE-2, SIZE-2);
-
-            g.setColor(fg);
-            g.drawLine(x+3, y+HALF_SIZE-1, x+SIZE-4, y+HALF_SIZE-1);
-            g.drawLine(x+3, y+HALF_SIZE, x+SIZE-4, y+HALF_SIZE);
-        }
-
-        public int getIconWidth() { return SIZE; }
-        public int getIconHeight() { return SIZE; }
-    }
-
-    /**
-     * The plus sign button icon.
-     * <p>
-     * <strong>Warning:</strong>
-     * Serialized objects of this class will not be compatible with
-     * future Swing releases.  The current serialization support is appropriate
-     * for short term storage or RMI between applications running the same
-     * version of Swing.  A future release of Swing will provide support for
-     * long term persistence.
-     */
-    public static class MotifCollapsedIcon extends MotifExpandedIcon {
-        public static Icon createCollapsedIcon() {
-            return new MotifCollapsedIcon();
-        }
-
-        public void paintIcon(Component c, Graphics g, int x, int y) {
-            super.paintIcon(c, g, x, y);
-            g.drawLine(x + HALF_SIZE-1, y + 3, x + HALF_SIZE-1, y + (SIZE - 4));
-            g.drawLine(x + HALF_SIZE, y + 3, x + HALF_SIZE, y + (SIZE - 4));
-        }
-    }
-
-    public static ComponentUI createUI(JComponent x) {
-        return new MotifTreeUI();
-    }
-
-    /**
-     * Returns the default cell renderer that is used to do the
-     * stamping of each node.
-     */
-    public TreeCellRenderer createDefaultCellRenderer() {
-        return new MotifTreeCellRenderer();
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/icons/DesktopIcon.gif b/ojluni/src/main/java/com/sun/java/swing/plaf/motif/icons/DesktopIcon.gif
deleted file mode 100755
index c8aa172..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/icons/DesktopIcon.gif
+++ /dev/null
Binary files differ
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/icons/Error.gif b/ojluni/src/main/java/com/sun/java/swing/plaf/motif/icons/Error.gif
deleted file mode 100755
index a43cdde..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/icons/Error.gif
+++ /dev/null
Binary files differ
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/icons/Inform.gif b/ojluni/src/main/java/com/sun/java/swing/plaf/motif/icons/Inform.gif
deleted file mode 100755
index d20c8cf..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/icons/Inform.gif
+++ /dev/null
Binary files differ
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/icons/Question.gif b/ojluni/src/main/java/com/sun/java/swing/plaf/motif/icons/Question.gif
deleted file mode 100755
index 5cea716..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/icons/Question.gif
+++ /dev/null
Binary files differ
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/icons/TreeClosed.gif b/ojluni/src/main/java/com/sun/java/swing/plaf/motif/icons/TreeClosed.gif
deleted file mode 100755
index ee09b77..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/icons/TreeClosed.gif
+++ /dev/null
Binary files differ
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/icons/TreeOpen.gif b/ojluni/src/main/java/com/sun/java/swing/plaf/motif/icons/TreeOpen.gif
deleted file mode 100755
index ee09b77..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/icons/TreeOpen.gif
+++ /dev/null
Binary files differ
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/icons/Warn.gif b/ojluni/src/main/java/com/sun/java/swing/plaf/motif/icons/Warn.gif
deleted file mode 100755
index bf34b29..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/icons/Warn.gif
+++ /dev/null
Binary files differ
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/icons/image-delayed.png b/ojluni/src/main/java/com/sun/java/swing/plaf/motif/icons/image-delayed.png
deleted file mode 100755
index 3379115..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/icons/image-delayed.png
+++ /dev/null
Binary files differ
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/icons/image-failed.png b/ojluni/src/main/java/com/sun/java/swing/plaf/motif/icons/image-failed.png
deleted file mode 100755
index 5f3dd46..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/icons/image-failed.png
+++ /dev/null
Binary files differ
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/resources/motif.properties b/ojluni/src/main/java/com/sun/java/swing/plaf/motif/resources/motif.properties
deleted file mode 100755
index fed806c..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/resources/motif.properties
+++ /dev/null
@@ -1,40 +0,0 @@
-# This properties file is used to create a PropertyResourceBundle
-# It contains Locale specific strings used be the Motif Look and Feel.
-# Currently, the following components need this for support:
-#
-#    FileChooser
-#
-# When this file is read in, the strings are put into the 
-# defaults table.  This is an implementation detail of the current
-# workings of Swing.  DO NOT DEPEND ON THIS.  
-# This may change in future versions of Swing as we improve localization 
-# support.
-#
-# Refer to the note in basic.properties for a description as to what
-# the mnemonics correspond to and how to calculate them.
-#
-# @author Steve Wilson
-
-
-############ FILE CHOOSER STRINGS #############
-
-FileChooser.acceptAllFileFilter.textAndMnemonic=*
-FileChooser.cancelButton.textAndMnemonic=Cancel
-FileChooser.saveButton.textAndMnemonic=Save
-FileChooser.openButton.textAndMnemonic=OK
-FileChooser.saveDialogTitle.textAndMnemonic=Save
-FileChooser.openDialogTitle.textAndMnemonic=Open
-FileChooser.updateButton.textAndMnemonic=Update
-FileChooser.helpButton.textAndMnemonic=Help
-FileChooser.pathLabel.textAndMnemonic=Enter &path or folder name:
-FileChooser.filterLabel.textAndMnemonic=Filte&r
-FileChooser.foldersLabel.textAndMnemonic=Fo&lders
-FileChooser.filesLabel.textAndMnemonic=F&iles
-FileChooser.enterFileNameLabel.textAndMnemonic=E&nter file name:
-FileChooser.enterFolderNameLabel.textAndMnemonic=Enter folder name:
-
-FileChooser.cancelButtonToolTip.textAndMnemonic=Abort file chooser dialog.
-FileChooser.saveButtonToolTip.textAndMnemonic=Save selected file.
-FileChooser.openButtonToolTip.textAndMnemonic=Open selected file.
-FileChooser.updateButtonToolTip.textAndMnemonic=Update directory listing.
-FileChooser.helpButtonToolTip.textAndMnemonic=FileChooser help.
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/resources/motif_de.properties b/ojluni/src/main/java/com/sun/java/swing/plaf/motif/resources/motif_de.properties
deleted file mode 100755
index 0c177f8..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/resources/motif_de.properties
+++ /dev/null
@@ -1,40 +0,0 @@
-# This properties file is used to create a PropertyResourceBundle
-# It contains Locale specific strings used be the Motif Look and Feel.
-# Currently, the following components need this for support:
-#
-#    FileChooser
-#
-# When this file is read in, the strings are put into the 
-# defaults table.  This is an implementation detail of the current
-# workings of Swing.  DO NOT DEPEND ON THIS.  
-# This may change in future versions of Swing as we improve localization 
-# support.
-#
-# Refer to the note in basic.properties for a description as to what
-# the mnemonics correspond to and how to calculate them.
-#
-# @author Steve Wilson
-
-
-############ FILE CHOOSER STRINGS #############
-
-FileChooser.acceptAllFileFilter.textAndMnemonic=*
-FileChooser.cancelButton.textAndMnemonic=Abbrechen
-FileChooser.saveButton.textAndMnemonic=Speichern
-FileChooser.openButton.textAndMnemonic=OK
-FileChooser.saveDialogTitle.textAndMnemonic=Speichern
-FileChooser.openDialogTitle.textAndMnemonic=\u00D6ffnen
-FileChooser.updateButton.textAndMnemonic=Aktualisieren
-FileChooser.helpButton.textAndMnemonic=Hilfe
-FileChooser.pathLabel.textAndMnemonic=&Pfad- oder Ordnername eingeben:
-FileChooser.filterLabel.textAndMnemonic=Filte&r
-FileChooser.foldersLabel.textAndMnemonic=Ord&ner
-FileChooser.filesLabel.textAndMnemonic=Date&ien
-FileChooser.enterFileNameLabel.textAndMnemonic=Dateina&me eingeben:
-FileChooser.enterFolderNameLabel.textAndMnemonic=Ordnernamen eingeben:
-
-FileChooser.cancelButtonToolTip.textAndMnemonic=Dialogfeld f\u00FCr Dateiauswahl schlie\u00DFen.
-FileChooser.saveButtonToolTip.textAndMnemonic=Ausgew\u00E4hlte Datei speichern.
-FileChooser.openButtonToolTip.textAndMnemonic=Ausgew\u00E4hlte Datei \u00F6ffnen.
-FileChooser.updateButtonToolTip.textAndMnemonic=Verzeichnisliste aktualisieren.
-FileChooser.helpButtonToolTip.textAndMnemonic=FileChooser-Hilfe.
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/resources/motif_es.properties b/ojluni/src/main/java/com/sun/java/swing/plaf/motif/resources/motif_es.properties
deleted file mode 100755
index 014f094..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/resources/motif_es.properties
+++ /dev/null
@@ -1,40 +0,0 @@
-# This properties file is used to create a PropertyResourceBundle
-# It contains Locale specific strings used be the Motif Look and Feel.
-# Currently, the following components need this for support:
-#
-#    FileChooser
-#
-# When this file is read in, the strings are put into the 
-# defaults table.  This is an implementation detail of the current
-# workings of Swing.  DO NOT DEPEND ON THIS.  
-# This may change in future versions of Swing as we improve localization 
-# support.
-#
-# Refer to the note in basic.properties for a description as to what
-# the mnemonics correspond to and how to calculate them.
-#
-# @author Steve Wilson
-
-
-############ FILE CHOOSER STRINGS #############
-
-FileChooser.acceptAllFileFilter.textAndMnemonic=*
-FileChooser.cancelButton.textAndMnemonic=Cancelar
-FileChooser.saveButton.textAndMnemonic=Guardar
-FileChooser.openButton.textAndMnemonic=Aceptar
-FileChooser.saveDialogTitle.textAndMnemonic=Guardar
-FileChooser.openDialogTitle.textAndMnemonic=Abrir
-FileChooser.updateButton.textAndMnemonic=Actualizar
-FileChooser.helpButton.textAndMnemonic=Ayuda
-FileChooser.pathLabel.textAndMnemonic=Introducir nombre de ruta de acceso o car&peta:
-FileChooser.filterLabel.textAndMnemonic=Filt&ro
-FileChooser.foldersLabel.textAndMnemonic=Carpe&tas
-FileChooser.filesLabel.textAndMnemonic=Arch&ivos
-FileChooser.enterFileNameLabel.textAndMnemonic=I&ntroducir nombre de archivo:
-FileChooser.enterFolderNameLabel.textAndMnemonic=Introducir nombre de carpeta:
-
-FileChooser.cancelButtonToolTip.textAndMnemonic=Abortar cuadro de di\u00E1logo del selector de archivos.
-FileChooser.saveButtonToolTip.textAndMnemonic=Guardar archivo seleccionado.
-FileChooser.openButtonToolTip.textAndMnemonic=Abrir archivo seleccionado.
-FileChooser.updateButtonToolTip.textAndMnemonic=Actualizar lista de directorios.
-FileChooser.helpButtonToolTip.textAndMnemonic=Ayuda del selector de archivos.
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/resources/motif_fr.properties b/ojluni/src/main/java/com/sun/java/swing/plaf/motif/resources/motif_fr.properties
deleted file mode 100755
index 938c1e0..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/resources/motif_fr.properties
+++ /dev/null
@@ -1,40 +0,0 @@
-# This properties file is used to create a PropertyResourceBundle
-# It contains Locale specific strings used be the Motif Look and Feel.
-# Currently, the following components need this for support:
-#
-#    FileChooser
-#
-# When this file is read in, the strings are put into the 
-# defaults table.  This is an implementation detail of the current
-# workings of Swing.  DO NOT DEPEND ON THIS.  
-# This may change in future versions of Swing as we improve localization 
-# support.
-#
-# Refer to the note in basic.properties for a description as to what
-# the mnemonics correspond to and how to calculate them.
-#
-# @author Steve Wilson
-
-
-############ FILE CHOOSER STRINGS #############
-
-FileChooser.acceptAllFileFilter.textAndMnemonic=*
-FileChooser.cancelButton.textAndMnemonic=Annuler
-FileChooser.saveButton.textAndMnemonic=Enregistrer
-FileChooser.openButton.textAndMnemonic=OK
-FileChooser.saveDialogTitle.textAndMnemonic=Enregistrer
-FileChooser.openDialogTitle.textAndMnemonic=Ouvrir
-FileChooser.updateButton.textAndMnemonic=Mettre \u00E0 jour
-FileChooser.helpButton.textAndMnemonic=Aide
-FileChooser.pathLabel.textAndMnemonic=Entrez le c&hemin ou le nom du dossier :
-FileChooser.filterLabel.textAndMnemonic=Filt&re
-FileChooser.foldersLabel.textAndMnemonic=&Dossiers
-FileChooser.filesLabel.textAndMnemonic=F&ichiers
-FileChooser.enterFileNameLabel.textAndMnemonic=E&ntrez le nom du fichier :
-FileChooser.enterFolderNameLabel.textAndMnemonic=Entrez le nom du dossier :
-
-FileChooser.cancelButtonToolTip.textAndMnemonic=Ferme la bo\u00EEte de dialogue du s\u00E9lecteur de fichiers.
-FileChooser.saveButtonToolTip.textAndMnemonic=Enregistre le fichier s\u00E9lectionn\u00E9.
-FileChooser.openButtonToolTip.textAndMnemonic=Ouvre le fichier s\u00E9lectionn\u00E9.
-FileChooser.updateButtonToolTip.textAndMnemonic=Met \u00E0 jour la liste des r\u00E9pertoires.
-FileChooser.helpButtonToolTip.textAndMnemonic=Aide du s\u00E9lecteur de fichiers
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/resources/motif_it.properties b/ojluni/src/main/java/com/sun/java/swing/plaf/motif/resources/motif_it.properties
deleted file mode 100755
index e73c84e..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/resources/motif_it.properties
+++ /dev/null
@@ -1,40 +0,0 @@
-# This properties file is used to create a PropertyResourceBundle
-# It contains Locale specific strings used be the Motif Look and Feel.
-# Currently, the following components need this for support:
-#
-#    FileChooser
-#
-# When this file is read in, the strings are put into the 
-# defaults table.  This is an implementation detail of the current
-# workings of Swing.  DO NOT DEPEND ON THIS.  
-# This may change in future versions of Swing as we improve localization 
-# support.
-#
-# Refer to the note in basic.properties for a description as to what
-# the mnemonics correspond to and how to calculate them.
-#
-# @author Steve Wilson
-
-
-############ FILE CHOOSER STRINGS #############
-
-FileChooser.acceptAllFileFilter.textAndMnemonic=*
-FileChooser.cancelButton.textAndMnemonic=Annulla
-FileChooser.saveButton.textAndMnemonic=Salva
-FileChooser.openButton.textAndMnemonic=OK
-FileChooser.saveDialogTitle.textAndMnemonic=Salva
-FileChooser.openDialogTitle.textAndMnemonic=Apri
-FileChooser.updateButton.textAndMnemonic=Aggiorna
-FileChooser.helpButton.textAndMnemonic=?
-FileChooser.pathLabel.textAndMnemonic=&Percorso o nome cartella:
-FileChooser.filterLabel.textAndMnemonic=Filt&ro
-FileChooser.foldersLabel.textAndMnemonic=Car&telle
-FileChooser.filesLabel.textAndMnemonic=F&ile
-FileChooser.enterFileNameLabel.textAndMnemonic=Immettere il &nome file: 
-FileChooser.enterFolderNameLabel.textAndMnemonic=Nome cartella:
-
-FileChooser.cancelButtonToolTip.textAndMnemonic=Chiude la finestra di dialogo di selezione file.
-FileChooser.saveButtonToolTip.textAndMnemonic=Salva il file selezionato.
-FileChooser.openButtonToolTip.textAndMnemonic=Apre il file selezionato.
-FileChooser.updateButtonToolTip.textAndMnemonic=Aggiorna lista directory.
-FileChooser.helpButtonToolTip.textAndMnemonic=Guida FileChooser.
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/resources/motif_ja.properties b/ojluni/src/main/java/com/sun/java/swing/plaf/motif/resources/motif_ja.properties
deleted file mode 100755
index 9b28788..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/resources/motif_ja.properties
+++ /dev/null
@@ -1,40 +0,0 @@
-# This properties file is used to create a PropertyResourceBundle
-# It contains Locale specific strings used be the Motif Look and Feel.
-# Currently, the following components need this for support:
-#
-#    FileChooser
-#
-# When this file is read in, the strings are put into the 
-# defaults table.  This is an implementation detail of the current
-# workings of Swing.  DO NOT DEPEND ON THIS.  
-# This may change in future versions of Swing as we improve localization 
-# support.
-#
-# Refer to the note in basic.properties for a description as to what
-# the mnemonics correspond to and how to calculate them.
-#
-# @author Steve Wilson
-
-
-############ FILE CHOOSER STRINGS #############
-
-FileChooser.acceptAllFileFilter.textAndMnemonic=*
-FileChooser.cancelButton.textAndMnemonic=\u53D6\u6D88
-FileChooser.saveButton.textAndMnemonic=\u4FDD\u5B58
-FileChooser.openButton.textAndMnemonic=OK
-FileChooser.saveDialogTitle.textAndMnemonic=\u4FDD\u5B58
-FileChooser.openDialogTitle.textAndMnemonic=\u958B\u304F
-FileChooser.updateButton.textAndMnemonic=\u66F4\u65B0
-FileChooser.helpButton.textAndMnemonic=\u30D8\u30EB\u30D7
-FileChooser.pathLabel.textAndMnemonic=\u30D1\u30B9\u307E\u305F\u306F\u30D5\u30A9\u30EB\u30C0\u540D\u3092\u5165\u529B(&P):
-FileChooser.filterLabel.textAndMnemonic=\u30D5\u30A3\u30EB\u30BF(&R)
-FileChooser.foldersLabel.textAndMnemonic=\u30D5\u30A9\u30EB\u30C0(&L)
-FileChooser.filesLabel.textAndMnemonic=\u30D5\u30A1\u30A4\u30EB(&I)
-FileChooser.enterFileNameLabel.textAndMnemonic=\u30D5\u30A1\u30A4\u30EB\u540D\u3092\u5165\u529B(&N):
-FileChooser.enterFolderNameLabel.textAndMnemonic=\u30D5\u30A9\u30EB\u30C0\u540D\u3092\u5165\u529B:
-
-FileChooser.cancelButtonToolTip.textAndMnemonic=\u30D5\u30A1\u30A4\u30EB\u30FB\u30C1\u30E5\u30FC\u30B6\u30FB\u30C0\u30A4\u30A2\u30ED\u30B0\u3092\u7D42\u4E86\u3057\u307E\u3059\u3002
-FileChooser.saveButtonToolTip.textAndMnemonic=\u9078\u629E\u3057\u305F\u30D5\u30A1\u30A4\u30EB\u3092\u4FDD\u5B58\u3057\u307E\u3059\u3002
-FileChooser.openButtonToolTip.textAndMnemonic=\u9078\u629E\u3057\u305F\u30D5\u30A1\u30A4\u30EB\u3092\u958B\u304D\u307E\u3059\u3002
-FileChooser.updateButtonToolTip.textAndMnemonic=\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u306E\u30EA\u30B9\u30C8\u3092\u66F4\u65B0\u3057\u307E\u3059\u3002
-FileChooser.helpButtonToolTip.textAndMnemonic=FileChooser\u306E\u30D8\u30EB\u30D7\u3067\u3059\u3002
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/resources/motif_ko.properties b/ojluni/src/main/java/com/sun/java/swing/plaf/motif/resources/motif_ko.properties
deleted file mode 100755
index f7e2625..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/resources/motif_ko.properties
+++ /dev/null
@@ -1,40 +0,0 @@
-# This properties file is used to create a PropertyResourceBundle
-# It contains Locale specific strings used be the Motif Look and Feel.
-# Currently, the following components need this for support:
-#
-#    FileChooser
-#
-# When this file is read in, the strings are put into the 
-# defaults table.  This is an implementation detail of the current
-# workings of Swing.  DO NOT DEPEND ON THIS.  
-# This may change in future versions of Swing as we improve localization 
-# support.
-#
-# Refer to the note in basic.properties for a description as to what
-# the mnemonics correspond to and how to calculate them.
-#
-# @author Steve Wilson
-
-
-############ FILE CHOOSER STRINGS #############
-
-FileChooser.acceptAllFileFilter.textAndMnemonic=*
-FileChooser.cancelButton.textAndMnemonic=\uCDE8\uC18C
-FileChooser.saveButton.textAndMnemonic=\uC800\uC7A5
-FileChooser.openButton.textAndMnemonic=\uD655\uC778
-FileChooser.saveDialogTitle.textAndMnemonic=\uC800\uC7A5
-FileChooser.openDialogTitle.textAndMnemonic=\uC5F4\uAE30
-FileChooser.updateButton.textAndMnemonic=\uAC31\uC2E0
-FileChooser.helpButton.textAndMnemonic=\uB3C4\uC6C0\uB9D0
-FileChooser.pathLabel.textAndMnemonic=\uACBD\uB85C \uB610\uB294 \uD3F4\uB354 \uC774\uB984 \uC785\uB825(&P):
-FileChooser.filterLabel.textAndMnemonic=\uD544\uD130(&R)
-FileChooser.foldersLabel.textAndMnemonic=\uD3F4\uB354(&L)
-FileChooser.filesLabel.textAndMnemonic=\uD30C\uC77C(&I)
-FileChooser.enterFileNameLabel.textAndMnemonic=\uD30C\uC77C \uC774\uB984 \uC785\uB825(&N):
-FileChooser.enterFolderNameLabel.textAndMnemonic=\uD3F4\uB354 \uC774\uB984 \uC785\uB825:
-
-FileChooser.cancelButtonToolTip.textAndMnemonic=\uD30C\uC77C \uC120\uD0DD\uAE30 \uB300\uD654\uC0C1\uC790\uB97C \uC911\uB2E8\uD569\uB2C8\uB2E4.
-FileChooser.saveButtonToolTip.textAndMnemonic=\uC120\uD0DD\uB41C \uD30C\uC77C\uC744 \uC800\uC7A5\uD569\uB2C8\uB2E4.
-FileChooser.openButtonToolTip.textAndMnemonic=\uC120\uD0DD\uB41C \uD30C\uC77C\uC744 \uC5FD\uB2C8\uB2E4.
-FileChooser.updateButtonToolTip.textAndMnemonic=\uB514\uB809\uD1A0\uB9AC \uBAA9\uB85D\uC744 \uAC31\uC2E0\uD569\uB2C8\uB2E4.
-FileChooser.helpButtonToolTip.textAndMnemonic=FileChooser \uB3C4\uC6C0\uB9D0\uC785\uB2C8\uB2E4.
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/resources/motif_pt_BR.properties b/ojluni/src/main/java/com/sun/java/swing/plaf/motif/resources/motif_pt_BR.properties
deleted file mode 100755
index 3fd4af2..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/resources/motif_pt_BR.properties
+++ /dev/null
@@ -1,40 +0,0 @@
-# This properties file is used to create a PropertyResourceBundle
-# It contains Locale specific strings used be the Motif Look and Feel.
-# Currently, the following components need this for support:
-#
-#    FileChooser
-#
-# When this file is read in, the strings are put into the 
-# defaults table.  This is an implementation detail of the current
-# workings of Swing.  DO NOT DEPEND ON THIS.  
-# This may change in future versions of Swing as we improve localization 
-# support.
-#
-# Refer to the note in basic.properties for a description as to what
-# the mnemonics correspond to and how to calculate them.
-#
-# @author Steve Wilson
-
-
-############ FILE CHOOSER STRINGS #############
-
-FileChooser.acceptAllFileFilter.textAndMnemonic=*
-FileChooser.cancelButton.textAndMnemonic=Cancelar
-FileChooser.saveButton.textAndMnemonic=Salvar
-FileChooser.openButton.textAndMnemonic=OK
-FileChooser.saveDialogTitle.textAndMnemonic=Salvar
-FileChooser.openDialogTitle.textAndMnemonic=Abrir
-FileChooser.updateButton.textAndMnemonic=Atualizar
-FileChooser.helpButton.textAndMnemonic=Ajuda
-FileChooser.pathLabel.textAndMnemonic=Informar &caminho ou nome da pasta:
-FileChooser.filterLabel.textAndMnemonic=Filt&ro
-FileChooser.foldersLabel.textAndMnemonic=Pa&stas
-FileChooser.filesLabel.textAndMnemonic=Arqu&ivos
-FileChooser.enterFileNameLabel.textAndMnemonic=I&nforme o nome do arquivo:
-FileChooser.enterFolderNameLabel.textAndMnemonic=Informar nome da pasta:
-
-FileChooser.cancelButtonToolTip.textAndMnemonic=Abortar caixa de di\u00E1logo do seletor de arquivos.
-FileChooser.saveButtonToolTip.textAndMnemonic=Salvar arquivo selecionado.
-FileChooser.openButtonToolTip.textAndMnemonic=Abrir arquivo selecionado.
-FileChooser.updateButtonToolTip.textAndMnemonic=Atualizar lista de diret\u00F3rios.
-FileChooser.helpButtonToolTip.textAndMnemonic=Ajuda do FileChooser.
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/resources/motif_sv.properties b/ojluni/src/main/java/com/sun/java/swing/plaf/motif/resources/motif_sv.properties
deleted file mode 100755
index fff8ecf..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/resources/motif_sv.properties
+++ /dev/null
@@ -1,40 +0,0 @@
-# This properties file is used to create a PropertyResourceBundle
-# It contains Locale specific strings used be the Motif Look and Feel.
-# Currently, the following components need this for support:
-#
-#    FileChooser
-#
-# When this file is read in, the strings are put into the 
-# defaults table.  This is an implementation detail of the current
-# workings of Swing.  DO NOT DEPEND ON THIS.  
-# This may change in future versions of Swing as we improve localization 
-# support.
-#
-# Refer to the note in basic.properties for a description as to what
-# the mnemonics correspond to and how to calculate them.
-#
-# @author Steve Wilson
-
-
-############ FILE CHOOSER STRINGS #############
-
-FileChooser.acceptAllFileFilter.textAndMnemonic=*
-FileChooser.cancelButton.textAndMnemonic=Avbryt
-FileChooser.saveButton.textAndMnemonic=Spara
-FileChooser.openButton.textAndMnemonic=OK
-FileChooser.saveDialogTitle.textAndMnemonic=Spara
-FileChooser.openDialogTitle.textAndMnemonic=\u00D6ppna
-FileChooser.updateButton.textAndMnemonic=Uppdatera
-FileChooser.helpButton.textAndMnemonic=Hj\u00E4lp
-FileChooser.pathLabel.textAndMnemonic=Ange &s\u00F6kv\u00E4g eller mappnamn:
-FileChooser.filterLabel.textAndMnemonic=Filte&r
-FileChooser.foldersLabel.textAndMnemonic=Ma&ppar
-FileChooser.filesLabel.textAndMnemonic=F&iler
-FileChooser.enterFileNameLabel.textAndMnemonic=A&nge filnamn:
-FileChooser.enterFolderNameLabel.textAndMnemonic=Ange ett mappnamn:
-
-FileChooser.cancelButtonToolTip.textAndMnemonic=Avbryt dialogrutan Filv\u00E4ljare.
-FileChooser.saveButtonToolTip.textAndMnemonic=Spara vald fil.
-FileChooser.openButtonToolTip.textAndMnemonic=\u00D6ppna vald fil.
-FileChooser.updateButtonToolTip.textAndMnemonic=Uppdatera kataloglistan.
-FileChooser.helpButtonToolTip.textAndMnemonic=Hj\u00E4lp - Filv\u00E4ljare.
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/resources/motif_zh_CN.properties b/ojluni/src/main/java/com/sun/java/swing/plaf/motif/resources/motif_zh_CN.properties
deleted file mode 100755
index 11df70d..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/resources/motif_zh_CN.properties
+++ /dev/null
@@ -1,40 +0,0 @@
-# This properties file is used to create a PropertyResourceBundle
-# It contains Locale specific strings used be the Motif Look and Feel.
-# Currently, the following components need this for support:
-#
-#    FileChooser
-#
-# When this file is read in, the strings are put into the 
-# defaults table.  This is an implementation detail of the current
-# workings of Swing.  DO NOT DEPEND ON THIS.  
-# This may change in future versions of Swing as we improve localization 
-# support.
-#
-# Refer to the note in basic.properties for a description as to what
-# the mnemonics correspond to and how to calculate them.
-#
-# @author Steve Wilson
-
-
-############ FILE CHOOSER STRINGS #############
-
-FileChooser.acceptAllFileFilter.textAndMnemonic=*
-FileChooser.cancelButton.textAndMnemonic=\u53D6\u6D88
-FileChooser.saveButton.textAndMnemonic=\u4FDD\u5B58
-FileChooser.openButton.textAndMnemonic=\u786E\u5B9A
-FileChooser.saveDialogTitle.textAndMnemonic=\u4FDD\u5B58
-FileChooser.openDialogTitle.textAndMnemonic=\u6253\u5F00
-FileChooser.updateButton.textAndMnemonic=\u66F4\u65B0
-FileChooser.helpButton.textAndMnemonic=\u5E2E\u52A9
-FileChooser.pathLabel.textAndMnemonic=\u8F93\u5165\u8DEF\u5F84\u6216\u6587\u4EF6\u5939\u540D(&P):
-FileChooser.filterLabel.textAndMnemonic=\u7B5B\u9009\u5668(&R)
-FileChooser.foldersLabel.textAndMnemonic=\u6587\u4EF6\u5939(&L)
-FileChooser.filesLabel.textAndMnemonic=\u6587\u4EF6(&I)
-FileChooser.enterFileNameLabel.textAndMnemonic=\u8F93\u5165\u6587\u4EF6\u540D(&N):
-FileChooser.enterFolderNameLabel.textAndMnemonic=\u8F93\u5165\u6587\u4EF6\u5939\u540D:
-
-FileChooser.cancelButtonToolTip.textAndMnemonic=\u4E2D\u6B62\u6587\u4EF6\u9009\u62E9\u5668\u5BF9\u8BDD\u6846\u3002
-FileChooser.saveButtonToolTip.textAndMnemonic=\u4FDD\u5B58\u6240\u9009\u6587\u4EF6\u3002
-FileChooser.openButtonToolTip.textAndMnemonic=\u6253\u5F00\u6240\u9009\u6587\u4EF6\u3002
-FileChooser.updateButtonToolTip.textAndMnemonic=\u66F4\u65B0\u76EE\u5F55\u5217\u8868\u3002
-FileChooser.helpButtonToolTip.textAndMnemonic=FileChooser \u5E2E\u52A9\u3002
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/resources/motif_zh_TW.properties b/ojluni/src/main/java/com/sun/java/swing/plaf/motif/resources/motif_zh_TW.properties
deleted file mode 100755
index 6e77bba..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/motif/resources/motif_zh_TW.properties
+++ /dev/null
@@ -1,40 +0,0 @@
-# This properties file is used to create a PropertyResourceBundle
-# It contains Locale specific strings used be the Motif Look and Feel.
-# Currently, the following components need this for support:
-#
-#    FileChooser
-#
-# When this file is read in, the strings are put into the 
-# defaults table.  This is an implementation detail of the current
-# workings of Swing.  DO NOT DEPEND ON THIS.  
-# This may change in future versions of Swing as we improve localization 
-# support.
-#
-# Refer to the note in basic.properties for a description as to what
-# the mnemonics correspond to and how to calculate them.
-#
-# @author Steve Wilson
-
-
-############ FILE CHOOSER STRINGS #############
-
-FileChooser.acceptAllFileFilter.textAndMnemonic=*
-FileChooser.cancelButton.textAndMnemonic=\u53D6\u6D88
-FileChooser.saveButton.textAndMnemonic=\u5132\u5B58
-FileChooser.openButton.textAndMnemonic=\u78BA\u5B9A
-FileChooser.saveDialogTitle.textAndMnemonic=\u5132\u5B58
-FileChooser.openDialogTitle.textAndMnemonic=\u958B\u555F
-FileChooser.updateButton.textAndMnemonic=\u66F4\u65B0
-FileChooser.helpButton.textAndMnemonic=\u8AAA\u660E
-FileChooser.pathLabel.textAndMnemonic=\u8F38\u5165\u8DEF\u5F91\u6216\u8CC7\u6599\u593E\u540D\u7A31(&P):
-FileChooser.filterLabel.textAndMnemonic=\u7BE9\u9078(&R)
-FileChooser.foldersLabel.textAndMnemonic=\u8CC7\u6599\u593E(&L)
-FileChooser.filesLabel.textAndMnemonic=\u6A94\u6848(&I)
-FileChooser.enterFileNameLabel.textAndMnemonic=\u8F38\u5165\u6A94\u6848\u540D\u7A31(&N):
-FileChooser.enterFolderNameLabel.textAndMnemonic=\u8F38\u5165\u8CC7\u6599\u593E\u540D\u7A31:
-
-FileChooser.cancelButtonToolTip.textAndMnemonic=\u4E2D\u6B62\u6A94\u6848\u9078\u64C7\u5668\u5C0D\u8A71\u65B9\u584A\u3002
-FileChooser.saveButtonToolTip.textAndMnemonic=\u5132\u5B58\u9078\u53D6\u7684\u6A94\u6848\u3002
-FileChooser.openButtonToolTip.textAndMnemonic=\u958B\u555F\u9078\u53D6\u7684\u6A94\u6848\u3002
-FileChooser.updateButtonToolTip.textAndMnemonic=\u66F4\u65B0\u76EE\u9304\u6E05\u55AE\u3002
-FileChooser.helpButtonToolTip.textAndMnemonic=\u300C\u6A94\u6848\u9078\u64C7\u5668\u300D\u8AAA\u660E\u3002
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/nimbus/AbstractRegionPainter.java b/ojluni/src/main/java/com/sun/java/swing/plaf/nimbus/AbstractRegionPainter.java
deleted file mode 100755
index e95cd57..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/nimbus/AbstractRegionPainter.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (c) 2005, 2006, 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.java.swing.plaf.nimbus;
-
-/**
- * This class is preserved for backward compatibility with JDK 6.
- *
- * @deprecated Use {@link javax.swing.plaf.nimbus.AbstractRegionPainter} instead.
- */
-public abstract class AbstractRegionPainter extends javax.swing.plaf.nimbus.AbstractRegionPainter {
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/nimbus/NimbusLookAndFeel.java b/ojluni/src/main/java/com/sun/java/swing/plaf/nimbus/NimbusLookAndFeel.java
deleted file mode 100755
index e702014..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/nimbus/NimbusLookAndFeel.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (c) 2005, 2006, 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.java.swing.plaf.nimbus;
-
-/**
- * This class is preserved for backward compatibility with JDK 6.
- *
- * @deprecated Use {@link javax.swing.plaf.nimbus.NimbusLookAndFeel} instead.
- */
-public class NimbusLookAndFeel extends javax.swing.plaf.nimbus.NimbusLookAndFeel {
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/AnimationController.java b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/AnimationController.java
deleted file mode 100755
index 8fec402..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/AnimationController.java
+++ /dev/null
@@ -1,428 +0,0 @@
-/*
- * Copyright (c) 2006, 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.java.swing.plaf.windows;
-
-import java.security.AccessController;
-import sun.security.action.GetBooleanAction;
-
-import java.util.*;
-import java.beans.PropertyChangeListener;
-import java.beans.PropertyChangeEvent;
-import java.awt.*;
-import java.awt.event.*;
-import javax.swing.*;
-
-
-
-import sun.swing.UIClientPropertyKey;
-import com.sun.java.swing.plaf.windows.TMSchema.State;
-import static com.sun.java.swing.plaf.windows.TMSchema.State.*;
-import com.sun.java.swing.plaf.windows.TMSchema.Part;
-import com.sun.java.swing.plaf.windows.TMSchema.Prop;
-import com.sun.java.swing.plaf.windows.XPStyle.Skin;
-
-import sun.awt.AppContext;
-
-/**
- * A class to help mimic Vista theme animations.  The only kind of
- * animation it handles for now is 'transition' animation (this seems
- * to be the only animation which Vista theme can do). This is when
- * one picture fadein over another one in some period of time.
- * According to
- * https://connect.microsoft.com/feedback/ViewFeedback.aspx?FeedbackID=86852&SiteID=4
- * The animations are all linear.
- *
- * This class has a number of responsibilities.
- * <ul>
- *   <li> It trigger rapaint for the UI components involved in the animation
- *   <li> It tracks the animation state for every UI component involved in the
- *        animation and paints {@code Skin} in new {@code State} over the
- *        {@code Skin} in last {@code State} using
- *        {@code AlphaComposite.SrcOver.derive(alpha)} where {code alpha}
- *        depends on the state of animation
- * </ul>
- *
- * @author Igor Kushnirskiy
- */
-class AnimationController implements ActionListener, PropertyChangeListener {
-
-    private final static boolean VISTA_ANIMATION_DISABLED =
-        AccessController.doPrivileged(new GetBooleanAction("swing.disablevistaanimation"));
-
-
-    private final static Object ANIMATION_CONTROLLER_KEY =
-        new StringBuilder("ANIMATION_CONTROLLER_KEY");
-
-    private final Map<JComponent, Map<Part, AnimationState>> animationStateMap =
-            new WeakHashMap<JComponent, Map<Part, AnimationState>>();
-
-    //this timer is used to cause repaint on animated components
-    //30 repaints per second should give smooth animation affect
-    private final javax.swing.Timer timer =
-        new javax.swing.Timer(1000/30, this);
-
-    private static synchronized AnimationController getAnimationController() {
-        AppContext appContext = AppContext.getAppContext();
-        Object obj = appContext.get(ANIMATION_CONTROLLER_KEY);
-        if (obj == null) {
-            obj = new AnimationController();
-            appContext.put(ANIMATION_CONTROLLER_KEY, obj);
-        }
-        return (AnimationController) obj;
-    }
-
-    private AnimationController() {
-        timer.setRepeats(true);
-        timer.setCoalesce(true);
-        //we need to dispose the controller on l&f change
-        UIManager.addPropertyChangeListener(this);
-    }
-
-    private static void triggerAnimation(JComponent c,
-                           Part part, State newState) {
-        if (c instanceof javax.swing.JTabbedPane
-            || part == Part.TP_BUTTON) {
-            //idk: we can not handle tabs animation because
-            //the same (component,part) is used to handle all the tabs
-            //and we can not track the states
-            //Vista theme might have transition duration for toolbar buttons
-            //but native application does not seem to animate them
-            return;
-        }
-        AnimationController controller =
-            AnimationController.getAnimationController();
-        State oldState = controller.getState(c, part);
-        if (oldState != newState) {
-            controller.putState(c, part, newState);
-            if (newState == State.DEFAULTED) {
-                // it seems for DEFAULTED button state Vista does animation from
-                // HOT
-                oldState = State.HOT;
-            }
-            if (oldState != null) {
-                long duration;
-                if (newState == State.DEFAULTED) {
-                    //Only button might have DEFAULTED state
-                    //idk: do not know how to get the value from Vista
-                    //one second seems plausible value
-                    duration = 1000;
-                } else {
-                     duration = XPStyle.getXP().getThemeTransitionDuration(
-                           c, part,
-                           normalizeState(oldState),
-                           normalizeState(newState),
-                           Prop.TRANSITIONDURATIONS);
-                }
-                controller.startAnimation(c, part, oldState, newState, duration);
-            }
-        }
-    }
-
-    // for scrollbar up, down, left and right button pictures are
-    // defined by states.  It seems that theme has duration defined
-    // only for up button states thus we doing this translation here.
-    private static State normalizeState(State state) {
-        State rv;
-        switch (state) {
-        case DOWNPRESSED:
-            /* falls through */
-        case LEFTPRESSED:
-            /* falls through */
-        case RIGHTPRESSED:
-            rv = UPPRESSED;
-            break;
-
-        case DOWNDISABLED:
-            /* falls through */
-        case LEFTDISABLED:
-            /* falls through */
-        case RIGHTDISABLED:
-            rv = UPDISABLED;
-            break;
-
-        case DOWNHOT:
-            /* falls through */
-        case LEFTHOT:
-            /* falls through */
-        case RIGHTHOT:
-            rv = UPHOT;
-            break;
-
-        case DOWNNORMAL:
-            /* falls through */
-        case LEFTNORMAL:
-            /* falls through */
-        case RIGHTNORMAL:
-            rv = UPNORMAL;
-            break;
-
-        default :
-            rv = state;
-            break;
-        }
-        return rv;
-    }
-
-    private synchronized State getState(JComponent component, Part part) {
-        State rv = null;
-        Object tmpObject =
-            component.getClientProperty(PartUIClientPropertyKey.getKey(part));
-        if (tmpObject instanceof State) {
-            rv = (State) tmpObject;
-        }
-        return rv;
-    }
-
-    private synchronized void putState(JComponent component, Part part,
-                                       State state) {
-        component.putClientProperty(PartUIClientPropertyKey.getKey(part),
-                                    state);
-    }
-
-    private synchronized void startAnimation(JComponent component,
-                                     Part part,
-                                     State startState,
-                                     State endState,
-                                     long millis) {
-        boolean isForwardAndReverse = false;
-        if (endState == State.DEFAULTED) {
-            isForwardAndReverse = true;
-        }
-        Map<Part, AnimationState> map = animationStateMap.get(component);
-        if (millis <= 0) {
-            if (map != null) {
-                map.remove(part);
-                if (map.size() == 0) {
-                    animationStateMap.remove(component);
-                }
-            }
-            return;
-        }
-        if (map == null) {
-            map = new EnumMap<Part, AnimationState>(Part.class);
-            animationStateMap.put(component, map);
-        }
-        map.put(part,
-                new AnimationState(startState, millis, isForwardAndReverse));
-        if (! timer.isRunning()) {
-            timer.start();
-        }
-    }
-
-    static void paintSkin(JComponent component, Skin skin,
-                      Graphics g, int dx, int dy, int dw, int dh, State state) {
-        if (VISTA_ANIMATION_DISABLED) {
-            skin.paintSkinRaw(g, dx, dy, dw, dh, state);
-            return;
-        }
-        triggerAnimation(component, skin.part, state);
-        AnimationController controller = getAnimationController();
-        synchronized (controller) {
-            AnimationState animationState = null;
-            Map<Part, AnimationState> map =
-                controller.animationStateMap.get(component);
-            if (map != null) {
-                animationState = map.get(skin.part);
-            }
-            if (animationState != null) {
-                animationState.paintSkin(skin, g, dx, dy, dw, dh, state);
-            } else {
-                skin.paintSkinRaw(g, dx, dy, dw, dh, state);
-            }
-        }
-    }
-
-    public synchronized void propertyChange(PropertyChangeEvent e) {
-        if ("lookAndFeel" == e.getPropertyName()
-            && ! (e.getNewValue() instanceof WindowsLookAndFeel) ) {
-            dispose();
-        }
-    }
-
-    public synchronized void actionPerformed(ActionEvent e) {
-        java.util.List<JComponent> componentsToRemove = null;
-        java.util.List<Part> partsToRemove = null;
-        for (JComponent component : animationStateMap.keySet()) {
-            component.repaint();
-            if (partsToRemove != null) {
-                partsToRemove.clear();
-            }
-            Map<Part, AnimationState> map = animationStateMap.get(component);
-            if (! component.isShowing()
-                  || map == null
-                  || map.size() == 0) {
-                if (componentsToRemove == null) {
-                    componentsToRemove = new ArrayList<JComponent>();
-                }
-                componentsToRemove.add(component);
-                continue;
-            }
-            for (Part part : map.keySet()) {
-                if (map.get(part).isDone()) {
-                    if (partsToRemove == null) {
-                        partsToRemove = new ArrayList<Part>();
-                    }
-                    partsToRemove.add(part);
-                }
-            }
-            if (partsToRemove != null) {
-                if (partsToRemove.size() == map.size()) {
-                    //animation is done for the component
-                    if (componentsToRemove == null) {
-                        componentsToRemove = new ArrayList<JComponent>();
-                    }
-                    componentsToRemove.add(component);
-                } else {
-                    for (Part part : partsToRemove) {
-                        map.remove(part);
-                    }
-                }
-            }
-        }
-        if (componentsToRemove != null) {
-            for (JComponent component : componentsToRemove) {
-                animationStateMap.remove(component);
-            }
-        }
-        if (animationStateMap.size() == 0) {
-            timer.stop();
-        }
-    }
-
-    private synchronized void dispose() {
-        timer.stop();
-        UIManager.removePropertyChangeListener(this);
-        synchronized (AnimationController.class) {
-            AppContext.getAppContext()
-                .put(ANIMATION_CONTROLLER_KEY, null);
-        }
-    }
-
-    private static class AnimationState {
-        private final State startState;
-
-        //animation duration in nanoseconds
-        private final long duration;
-
-        //animatin start time in nanoseconds
-        private long startTime;
-
-        //direction the alpha value is changing
-        //forward  - from 0 to 1
-        //!forward - from 1 to 0
-        private boolean isForward = true;
-
-        //if isForwardAndReverse the animation continually goes
-        //forward and reverse. alpha value is changing from 0 to 1 then
-        //from 1 to 0 and so forth
-        private boolean isForwardAndReverse;
-
-        private float progress;
-
-        AnimationState(final State startState,
-                       final long milliseconds,
-                       boolean isForwardAndReverse) {
-            assert startState != null && milliseconds > 0;
-            assert SwingUtilities.isEventDispatchThread();
-
-            this.startState = startState;
-            this.duration = milliseconds * 1000000;
-            this.startTime = System.nanoTime();
-            this.isForwardAndReverse = isForwardAndReverse;
-            progress = 0f;
-        }
-        private void updateProgress() {
-            assert SwingUtilities.isEventDispatchThread();
-
-            if (isDone()) {
-                return;
-            }
-            long currentTime = System.nanoTime();
-
-            progress = ((float) (currentTime - startTime))
-                / duration;
-            progress = Math.max(progress, 0); //in case time was reset
-            if (progress >= 1) {
-                progress = 1;
-                if (isForwardAndReverse) {
-                    startTime = currentTime;
-                    progress = 0;
-                    isForward = ! isForward;
-                }
-            }
-        }
-        void paintSkin(Skin skin, Graphics _g,
-                       int dx, int dy, int dw, int dh, State state) {
-            assert SwingUtilities.isEventDispatchThread();
-
-            updateProgress();
-            if (! isDone()) {
-                Graphics2D g = (Graphics2D) _g.create();
-                skin.paintSkinRaw(g, dx, dy, dw, dh, startState);
-                float alpha;
-                if (isForward) {
-                    alpha = progress;
-                } else {
-                    alpha = 1 - progress;
-                }
-                g.setComposite(AlphaComposite.SrcOver.derive(alpha));
-                skin.paintSkinRaw(g, dx, dy, dw, dh, state);
-                g.dispose();
-            } else {
-                skin.paintSkinRaw(_g, dx, dy, dw, dh, state);
-            }
-        }
-        boolean isDone() {
-            assert SwingUtilities.isEventDispatchThread();
-
-            return  progress >= 1;
-        }
-    }
-
-    private static class PartUIClientPropertyKey
-          implements UIClientPropertyKey {
-
-        private static final Map<Part, PartUIClientPropertyKey> map =
-            new EnumMap<Part, PartUIClientPropertyKey>(Part.class);
-
-        static synchronized PartUIClientPropertyKey getKey(Part part) {
-            PartUIClientPropertyKey rv = map.get(part);
-            if (rv == null) {
-                rv = new PartUIClientPropertyKey(part);
-                map.put(part, rv);
-            }
-            return rv;
-        }
-
-        private final Part part;
-        private PartUIClientPropertyKey(Part part) {
-            this.part  = part;
-        }
-        public String toString() {
-            return part.toString();
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/DesktopProperty.java b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/DesktopProperty.java
deleted file mode 100755
index 410a4f2..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/DesktopProperty.java
+++ /dev/null
@@ -1,285 +0,0 @@
-/*
- * Copyright (c) 2001, 2009, 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.java.swing.plaf.windows;
-
-import java.awt.*;
-import java.beans.*;
-import java.lang.ref.*;
-import javax.swing.*;
-import javax.swing.plaf.*;
-
-/**
- * Wrapper for a value from the desktop. The value is lazily looked up, and
- * can be accessed using the <code>UIManager.ActiveValue</code> method
- * <code>createValue</code>. If the underlying desktop property changes this
- * will force the UIs to update all known Frames. You can invoke
- * <code>invalidate</code> to force the value to be fetched again.
- *
- */
-// NOTE: Don't rely on this class staying in this location. It is likely
-// to move to a different package in the future.
-public class DesktopProperty implements UIDefaults.ActiveValue {
-    /**
-     * Indicates if an updateUI call is pending.
-     */
-    private static boolean updatePending;
-
-    /**
-     * ReferenceQueue of unreferenced WeakPCLs.
-     */
-    private static final ReferenceQueue<DesktopProperty> queue = new ReferenceQueue<DesktopProperty>();
-
-    /**
-     * PropertyChangeListener attached to the Toolkit.
-     */
-    private WeakPCL pcl;
-    /**
-     * Key used to lookup value from desktop.
-     */
-    private final String key;
-    /**
-     * Value to return.
-     */
-    private Object value;
-    /**
-     * Fallback value in case we get null from desktop.
-     */
-    private final Object fallback;
-
-
-    /**
-     * Cleans up any lingering state held by unrefeernced
-     * DesktopProperties.
-     */
-    static void flushUnreferencedProperties() {
-        WeakPCL pcl;
-
-        while ((pcl = (WeakPCL)queue.poll()) != null) {
-            pcl.dispose();
-        }
-    }
-
-
-    /**
-     * Sets whether or not an updateUI call is pending.
-     */
-    private static synchronized void setUpdatePending(boolean update) {
-        updatePending = update;
-    }
-
-    /**
-     * Returns true if a UI update is pending.
-     */
-    private static synchronized boolean isUpdatePending() {
-        return updatePending;
-    }
-
-    /**
-     * Updates the UIs of all the known Frames.
-     */
-    private static void updateAllUIs() {
-        // Check if the current UI is WindowsLookAndfeel and flush the XP style map.
-        // Note: Change the package test if this class is moved to a different package.
-        Class uiClass = UIManager.getLookAndFeel().getClass();
-        if (uiClass.getPackage().equals(DesktopProperty.class.getPackage())) {
-            XPStyle.invalidateStyle();
-        }
-        Frame appFrames[] = Frame.getFrames();
-        for (Frame appFrame : appFrames) {
-            updateWindowUI(appFrame);
-        }
-    }
-
-    /**
-     * Updates the UI of the passed in window and all its children.
-     */
-    private static void updateWindowUI(Window window) {
-        SwingUtilities.updateComponentTreeUI(window);
-        Window ownedWins[] = window.getOwnedWindows();
-        for (Window ownedWin : ownedWins) {
-            updateWindowUI(ownedWin);
-        }
-    }
-
-
-    /**
-     * Creates a DesktopProperty.
-     *
-     * @param key Key used in looking up desktop value.
-     * @param fallback Value used if desktop property is null.
-     */
-    public DesktopProperty(String key, Object fallback) {
-        this.key = key;
-        this.fallback = fallback;
-        // The only sure fire way to clear our references is to create a
-        // Thread and wait for a reference to be added to the queue.
-        // Because it is so rare that you will actually change the look
-        // and feel, this stepped is forgoed and a middle ground of
-        // flushing references from the constructor is instead done.
-        // The implication is that once one DesktopProperty is created
-        // there will most likely be n (number of DesktopProperties created
-        // by the LookAndFeel) WeakPCLs around, but this number will not
-        // grow past n.
-        flushUnreferencedProperties();
-    }
-
-    /**
-     * UIManager.LazyValue method, returns the value from the desktop
-     * or the fallback value if the desktop value is null.
-     */
-    public Object createValue(UIDefaults table) {
-        if (value == null) {
-            value = configureValue(getValueFromDesktop());
-            if (value == null) {
-                value = configureValue(getDefaultValue());
-            }
-        }
-        return value;
-    }
-
-    /**
-     * Returns the value from the desktop.
-     */
-    protected Object getValueFromDesktop() {
-        Toolkit toolkit = Toolkit.getDefaultToolkit();
-
-        if (pcl == null) {
-            pcl = new WeakPCL(this, getKey(), UIManager.getLookAndFeel());
-            toolkit.addPropertyChangeListener(getKey(), pcl);
-        }
-
-        return toolkit.getDesktopProperty(getKey());
-    }
-
-    /**
-     * Returns the value to use if the desktop property is null.
-     */
-    protected Object getDefaultValue() {
-        return fallback;
-    }
-
-    /**
-     * Invalidates the current value.
-     *
-     * @param laf the LookAndFeel this DesktopProperty was created with
-     */
-    public void invalidate(LookAndFeel laf) {
-        invalidate();
-    }
-
-    /**
-     * Invalides the current value so that the next invocation of
-     * <code>createValue</code> will ask for the property again.
-     */
-    public void invalidate() {
-        value = null;
-    }
-
-    /**
-     * Requests that all components in the GUI hierarchy be updated
-     * to reflect dynamic changes in this look&feel.  This update occurs
-     * by uninstalling and re-installing the UI objects. Requests are
-     * batched and collapsed into a single update pass because often
-     * many desktop properties will change at once.
-     */
-    protected void updateUI() {
-        if (!isUpdatePending()) {
-            setUpdatePending(true);
-            Runnable uiUpdater = new Runnable() {
-                public void run() {
-                    updateAllUIs();
-                    setUpdatePending(false);
-                }
-            };
-            SwingUtilities.invokeLater(uiUpdater);
-        }
-    }
-
-    /**
-     * Configures the value as appropriate for a defaults property in
-     * the UIDefaults table.
-     */
-    protected Object configureValue(Object value) {
-        if (value != null) {
-            if (value instanceof Color) {
-                return new ColorUIResource((Color)value);
-            }
-            else if (value instanceof Font) {
-                return new FontUIResource((Font)value);
-            }
-            else if (value instanceof UIDefaults.LazyValue) {
-                value = ((UIDefaults.LazyValue)value).createValue(null);
-            }
-            else if (value instanceof UIDefaults.ActiveValue) {
-                value = ((UIDefaults.ActiveValue)value).createValue(null);
-            }
-        }
-        return value;
-    }
-
-    /**
-     * Returns the key used to lookup the desktop properties value.
-     */
-    protected String getKey() {
-        return key;
-    }
-
-
-
-    /**
-     * As there is typically only one Toolkit, the PropertyChangeListener
-     * is handled via a WeakReference so as not to pin down the
-     * DesktopProperty.
-     */
-    private static class WeakPCL extends WeakReference<DesktopProperty>
-                               implements PropertyChangeListener {
-        private String key;
-        private LookAndFeel laf;
-
-        WeakPCL(DesktopProperty target, String key, LookAndFeel laf) {
-            super(target, queue);
-            this.key = key;
-            this.laf = laf;
-        }
-
-        public void propertyChange(PropertyChangeEvent pce) {
-            DesktopProperty property = get();
-
-            if (property == null || laf != UIManager.getLookAndFeel()) {
-                // The property was GC'ed, we're no longer interested in
-                // PropertyChanges, remove the listener.
-                dispose();
-            }
-            else {
-                property.invalidate(laf);
-                property.updateUI();
-            }
-        }
-
-        void dispose() {
-            Toolkit.getDefaultToolkit().removePropertyChangeListener(key, this);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/TMSchema.java b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/TMSchema.java
deleted file mode 100755
index d6ded35..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/TMSchema.java
+++ /dev/null
@@ -1,565 +0,0 @@
-/*
- * Copyright (c) 2005, 2006, 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.
- */
-
-/*
- * <p>These classes are designed to be used while the
- * corresponding <code>LookAndFeel</code> class has been installed
- * (<code>UIManager.setLookAndFeel(new <i>XXX</i>LookAndFeel())</code>).
- * Using them while a different <code>LookAndFeel</code> is installed
- * may produce unexpected results, including exceptions.
- * Additionally, changing the <code>LookAndFeel</code>
- * maintained by the <code>UIManager</code> without updating the
- * corresponding <code>ComponentUI</code> of any
- * <code>JComponent</code>s may also produce unexpected results,
- * such as the wrong colors showing up, and is generally not
- * encouraged.
- *
- */
-
-package com.sun.java.swing.plaf.windows;
-
-import java.awt.*;
-import java.util.*;
-
-import javax.swing.*;
-
-import sun.awt.windows.ThemeReader;
-
-/**
- * Implements Windows Parts and their States and Properties for the Windows Look and Feel.
- *
- * See http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/userex/topics/partsandstates.asp
- * See tmschema.h (or vssym32.h & vsstyle.h for MS Vista)
- *
- * @author Leif Samuelsson
- */
-class TMSchema {
-
-    /**
-     * An enumeration of the various Windows controls (also known as
-     * components, or top-level parts)
-     */
-    public static enum Control {
-        BUTTON,
-        COMBOBOX,
-        EDIT,
-        HEADER,
-        LISTBOX,
-        LISTVIEW,
-        MENU,
-        PROGRESS,
-        REBAR,
-        SCROLLBAR,
-        SPIN,
-        TAB,
-        TOOLBAR,
-        TRACKBAR,
-        TREEVIEW,
-        WINDOW
-    }
-
-
-    /**
-     * An enumeration of the Windows compoent parts
-     */
-    public static enum Part {
-        MENU (Control.MENU, 0), // Special case, not in native
-        MP_BARBACKGROUND   (Control.MENU, 7),
-        MP_BARITEM         (Control.MENU, 8),
-        MP_POPUPBACKGROUND (Control.MENU, 9),
-        MP_POPUPBORDERS    (Control.MENU, 10),
-        MP_POPUPCHECK      (Control.MENU, 11),
-        MP_POPUPCHECKBACKGROUND (Control.MENU, 12),
-        MP_POPUPGUTTER     (Control.MENU, 13),
-        MP_POPUPITEM       (Control.MENU, 14),
-        MP_POPUPSEPARATOR  (Control.MENU, 15),
-        MP_POPUPSUBMENU    (Control.MENU, 16),
-
-        BP_PUSHBUTTON (Control.BUTTON, 1),
-        BP_RADIOBUTTON(Control.BUTTON, 2),
-        BP_CHECKBOX   (Control.BUTTON, 3),
-        BP_GROUPBOX   (Control.BUTTON, 4),
-
-        CP_COMBOBOX      (Control.COMBOBOX, 0),
-        CP_DROPDOWNBUTTON(Control.COMBOBOX, 1),
-        CP_BACKGROUND    (Control.COMBOBOX, 2),
-        CP_TRANSPARENTBACKGROUND (Control.COMBOBOX, 3),
-        CP_BORDER                (Control.COMBOBOX, 4),
-        CP_READONLY              (Control.COMBOBOX, 5),
-        CP_DROPDOWNBUTTONRIGHT   (Control.COMBOBOX, 6),
-        CP_DROPDOWNBUTTONLEFT    (Control.COMBOBOX, 7),
-        CP_CUEBANNER             (Control.COMBOBOX, 8),
-
-
-        EP_EDIT    (Control.EDIT, 0),
-        EP_EDITTEXT(Control.EDIT, 1),
-
-        HP_HEADERITEM(Control.HEADER,      1),
-        HP_HEADERSORTARROW(Control.HEADER, 4),
-
-        LBP_LISTBOX(Control.LISTBOX, 0),
-
-        LVP_LISTVIEW(Control.LISTVIEW, 0),
-
-        PP_PROGRESS (Control.PROGRESS, 0),
-        PP_BAR      (Control.PROGRESS, 1),
-        PP_BARVERT  (Control.PROGRESS, 2),
-        PP_CHUNK    (Control.PROGRESS, 3),
-        PP_CHUNKVERT(Control.PROGRESS, 4),
-
-        RP_GRIPPER    (Control.REBAR, 1),
-        RP_GRIPPERVERT(Control.REBAR, 2),
-
-        SBP_SCROLLBAR     (Control.SCROLLBAR,  0),
-        SBP_ARROWBTN      (Control.SCROLLBAR,  1),
-        SBP_THUMBBTNHORZ  (Control.SCROLLBAR,  2),
-        SBP_THUMBBTNVERT  (Control.SCROLLBAR,  3),
-        SBP_LOWERTRACKHORZ(Control.SCROLLBAR,  4),
-        SBP_UPPERTRACKHORZ(Control.SCROLLBAR,  5),
-        SBP_LOWERTRACKVERT(Control.SCROLLBAR,  6),
-        SBP_UPPERTRACKVERT(Control.SCROLLBAR,  7),
-        SBP_GRIPPERHORZ   (Control.SCROLLBAR,  8),
-        SBP_GRIPPERVERT   (Control.SCROLLBAR,  9),
-        SBP_SIZEBOX       (Control.SCROLLBAR, 10),
-
-        SPNP_UP  (Control.SPIN, 1),
-        SPNP_DOWN(Control.SPIN, 2),
-
-        TABP_TABITEM         (Control.TAB, 1),
-        TABP_TABITEMLEFTEDGE (Control.TAB, 2),
-        TABP_TABITEMRIGHTEDGE(Control.TAB, 3),
-        TABP_PANE            (Control.TAB, 9),
-
-        TP_TOOLBAR        (Control.TOOLBAR, 0),
-        TP_BUTTON         (Control.TOOLBAR, 1),
-        TP_SEPARATOR      (Control.TOOLBAR, 5),
-        TP_SEPARATORVERT  (Control.TOOLBAR, 6),
-
-        TKP_TRACK      (Control.TRACKBAR,  1),
-        TKP_TRACKVERT  (Control.TRACKBAR,  2),
-        TKP_THUMB      (Control.TRACKBAR,  3),
-        TKP_THUMBBOTTOM(Control.TRACKBAR,  4),
-        TKP_THUMBTOP   (Control.TRACKBAR,  5),
-        TKP_THUMBVERT  (Control.TRACKBAR,  6),
-        TKP_THUMBLEFT  (Control.TRACKBAR,  7),
-        TKP_THUMBRIGHT (Control.TRACKBAR,  8),
-        TKP_TICS       (Control.TRACKBAR,  9),
-        TKP_TICSVERT   (Control.TRACKBAR, 10),
-
-        TVP_TREEVIEW(Control.TREEVIEW, 0),
-        TVP_GLYPH   (Control.TREEVIEW, 2),
-
-        WP_WINDOW          (Control.WINDOW,  0),
-        WP_CAPTION         (Control.WINDOW,  1),
-        WP_MINCAPTION      (Control.WINDOW,  3),
-        WP_MAXCAPTION      (Control.WINDOW,  5),
-        WP_FRAMELEFT       (Control.WINDOW,  7),
-        WP_FRAMERIGHT      (Control.WINDOW,  8),
-        WP_FRAMEBOTTOM     (Control.WINDOW,  9),
-        WP_SYSBUTTON       (Control.WINDOW, 13),
-        WP_MDISYSBUTTON    (Control.WINDOW, 14),
-        WP_MINBUTTON       (Control.WINDOW, 15),
-        WP_MDIMINBUTTON    (Control.WINDOW, 16),
-        WP_MAXBUTTON       (Control.WINDOW, 17),
-        WP_CLOSEBUTTON     (Control.WINDOW, 18),
-        WP_MDICLOSEBUTTON  (Control.WINDOW, 20),
-        WP_RESTOREBUTTON   (Control.WINDOW, 21),
-        WP_MDIRESTOREBUTTON(Control.WINDOW, 22);
-
-        private final Control control;
-        private final int value;
-
-        private Part(Control control, int value) {
-            this.control = control;
-            this.value = value;
-        }
-
-        public int getValue() {
-            return value;
-        }
-
-        public String getControlName(Component component) {
-            String str = "";
-            if (component instanceof JComponent) {
-                JComponent c = (JComponent)component;
-                String subAppName = (String)c.getClientProperty("XPStyle.subAppName");
-                if (subAppName != null) {
-                    str = subAppName + "::";
-                }
-            }
-            return str + control.toString();
-        }
-
-        public String toString() {
-            return control.toString()+"."+name();
-        }
-    }
-
-
-    /**
-     * An enumeration of the possible component states
-     */
-    public static enum State {
-        ACTIVE,
-        ASSIST,
-        BITMAP,
-        CHECKED,
-        CHECKEDDISABLED,
-        CHECKEDHOT,
-        CHECKEDNORMAL,
-        CHECKEDPRESSED,
-        CHECKMARKNORMAL,
-        CHECKMARKDISABLED,
-        BULLETNORMAL,
-        BULLETDISABLED,
-        CLOSED,
-        DEFAULTED,
-        DISABLED,
-        DISABLEDHOT,
-        DISABLEDPUSHED,
-        DOWNDISABLED,
-        DOWNHOT,
-        DOWNNORMAL,
-        DOWNPRESSED,
-        FOCUSED,
-        HOT,
-        HOTCHECKED,
-        ICONHOT,
-        ICONNORMAL,
-        ICONPRESSED,
-        ICONSORTEDHOT,
-        ICONSORTEDNORMAL,
-        ICONSORTEDPRESSED,
-        INACTIVE,
-        INACTIVENORMAL,         // See note 1
-        INACTIVEHOT,            // See note 1
-        INACTIVEPUSHED,         // See note 1
-        INACTIVEDISABLED,       // See note 1
-        LEFTDISABLED,
-        LEFTHOT,
-        LEFTNORMAL,
-        LEFTPRESSED,
-        MIXEDDISABLED,
-        MIXEDHOT,
-        MIXEDNORMAL,
-        MIXEDPRESSED,
-        NORMAL,
-        PRESSED,
-        OPENED,
-        PUSHED,
-        READONLY,
-        RIGHTDISABLED,
-        RIGHTHOT,
-        RIGHTNORMAL,
-        RIGHTPRESSED,
-        SELECTED,
-        UNCHECKEDDISABLED,
-        UNCHECKEDHOT,
-        UNCHECKEDNORMAL,
-        UNCHECKEDPRESSED,
-        UPDISABLED,
-        UPHOT,
-        UPNORMAL,
-        UPPRESSED,
-        HOVER,
-        UPHOVER,
-        DOWNHOVER,
-        LEFTHOVER,
-        RIGHTHOVER,
-        SORTEDDOWN,
-        SORTEDHOT,
-        SORTEDNORMAL,
-        SORTEDPRESSED,
-        SORTEDUP;
-
-
-        /**
-         * A map of allowed states for each Part
-         */
-        private static EnumMap<Part, State[]> stateMap;
-
-        private static synchronized void initStates() {
-            stateMap = new EnumMap<Part, State[]>(Part.class);
-
-            stateMap.put(Part.EP_EDITTEXT,
-                       new State[] {
-                        NORMAL, HOT, SELECTED, DISABLED, FOCUSED, READONLY, ASSIST
-            });
-
-            stateMap.put(Part.BP_PUSHBUTTON,
-                       new State[] { NORMAL, HOT, PRESSED, DISABLED, DEFAULTED });
-
-            stateMap.put(Part.BP_RADIOBUTTON,
-                       new State[] {
-                        UNCHECKEDNORMAL, UNCHECKEDHOT, UNCHECKEDPRESSED, UNCHECKEDDISABLED,
-                        CHECKEDNORMAL,   CHECKEDHOT,   CHECKEDPRESSED,   CHECKEDDISABLED
-            });
-
-            stateMap.put(Part.BP_CHECKBOX,
-                       new State[] {
-                        UNCHECKEDNORMAL, UNCHECKEDHOT, UNCHECKEDPRESSED, UNCHECKEDDISABLED,
-                        CHECKEDNORMAL,   CHECKEDHOT,   CHECKEDPRESSED,   CHECKEDDISABLED,
-                        MIXEDNORMAL,     MIXEDHOT,     MIXEDPRESSED,     MIXEDDISABLED
-            });
-
-            State[] comboBoxStates = new State[] { NORMAL, HOT, PRESSED, DISABLED };
-            stateMap.put(Part.CP_COMBOBOX, comboBoxStates);
-            stateMap.put(Part.CP_DROPDOWNBUTTON, comboBoxStates);
-            stateMap.put(Part.CP_BACKGROUND, comboBoxStates);
-            stateMap.put(Part.CP_TRANSPARENTBACKGROUND, comboBoxStates);
-            stateMap.put(Part.CP_BORDER, comboBoxStates);
-            stateMap.put(Part.CP_READONLY, comboBoxStates);
-            stateMap.put(Part.CP_DROPDOWNBUTTONRIGHT, comboBoxStates);
-            stateMap.put(Part.CP_DROPDOWNBUTTONLEFT, comboBoxStates);
-            stateMap.put(Part.CP_CUEBANNER, comboBoxStates);
-
-            stateMap.put(Part.HP_HEADERITEM, new State[] { NORMAL, HOT, PRESSED,
-                          SORTEDNORMAL, SORTEDHOT, SORTEDPRESSED,
-                          ICONNORMAL, ICONHOT, ICONPRESSED,
-                          ICONSORTEDNORMAL, ICONSORTEDHOT, ICONSORTEDPRESSED });
-
-            stateMap.put(Part.HP_HEADERSORTARROW,
-                         new State[] {SORTEDDOWN, SORTEDUP});
-
-            State[] scrollBarStates = new State[] { NORMAL, HOT, PRESSED, DISABLED, HOVER };
-            stateMap.put(Part.SBP_SCROLLBAR,    scrollBarStates);
-            stateMap.put(Part.SBP_THUMBBTNVERT, scrollBarStates);
-            stateMap.put(Part.SBP_THUMBBTNHORZ, scrollBarStates);
-            stateMap.put(Part.SBP_GRIPPERVERT,  scrollBarStates);
-            stateMap.put(Part.SBP_GRIPPERHORZ,  scrollBarStates);
-
-            stateMap.put(Part.SBP_ARROWBTN,
-                       new State[] {
-                UPNORMAL,    UPHOT,     UPPRESSED,    UPDISABLED,
-                DOWNNORMAL,  DOWNHOT,   DOWNPRESSED,  DOWNDISABLED,
-                LEFTNORMAL,  LEFTHOT,   LEFTPRESSED,  LEFTDISABLED,
-                RIGHTNORMAL, RIGHTHOT,  RIGHTPRESSED, RIGHTDISABLED,
-                UPHOVER,     DOWNHOVER, LEFTHOVER,    RIGHTHOVER
-            });
-
-
-            State[] spinnerStates = new State[] { NORMAL, HOT, PRESSED, DISABLED };
-            stateMap.put(Part.SPNP_UP,   spinnerStates);
-            stateMap.put(Part.SPNP_DOWN, spinnerStates);
-
-            stateMap.put(Part.TVP_GLYPH, new State[] { CLOSED, OPENED });
-
-            State[] frameButtonStates = new State[] {
-                        NORMAL,         HOT,         PUSHED,         DISABLED,  // See note 1
-                        INACTIVENORMAL, INACTIVEHOT, INACTIVEPUSHED, INACTIVEDISABLED,
-            };
-            // Note 1: The INACTIVE frame button states apply when the frame
-            //         is inactive. They are not defined in tmschema.h
-
-            // Fix for 6316538: Vista has five frame button states
-            if (ThemeReader.getInt(Control.WINDOW.toString(),
-                                   Part.WP_CLOSEBUTTON.getValue(), 1,
-                                   Prop.IMAGECOUNT.getValue()) == 10) {
-                frameButtonStates = new State[] {
-                        NORMAL,         HOT,         PUSHED,         DISABLED,         null,
-                        INACTIVENORMAL, INACTIVEHOT, INACTIVEPUSHED, INACTIVEDISABLED, null
-                };
-            }
-
-            stateMap.put(Part.WP_MINBUTTON,     frameButtonStates);
-            stateMap.put(Part.WP_MAXBUTTON,     frameButtonStates);
-            stateMap.put(Part.WP_RESTOREBUTTON, frameButtonStates);
-            stateMap.put(Part.WP_CLOSEBUTTON,   frameButtonStates);
-
-            // States for Slider (trackbar)
-            stateMap.put(Part.TKP_TRACK,     new State[] { NORMAL });
-            stateMap.put(Part.TKP_TRACKVERT, new State[] { NORMAL });
-
-            State[] sliderThumbStates =
-                new State[] { NORMAL, HOT, PRESSED, FOCUSED, DISABLED };
-            stateMap.put(Part.TKP_THUMB,       sliderThumbStates);
-            stateMap.put(Part.TKP_THUMBBOTTOM, sliderThumbStates);
-            stateMap.put(Part.TKP_THUMBTOP,    sliderThumbStates);
-            stateMap.put(Part.TKP_THUMBVERT,   sliderThumbStates);
-            stateMap.put(Part.TKP_THUMBRIGHT,  sliderThumbStates);
-
-            // States for Tabs
-            State[] tabStates = new State[] { NORMAL, HOT, SELECTED, DISABLED, FOCUSED };
-            stateMap.put(Part.TABP_TABITEM,          tabStates);
-            stateMap.put(Part.TABP_TABITEMLEFTEDGE,  tabStates);
-            stateMap.put(Part.TABP_TABITEMRIGHTEDGE, tabStates);
-
-
-            stateMap.put(Part.TP_BUTTON,
-                       new State[] {
-                        NORMAL, HOT, PRESSED, DISABLED, CHECKED, HOTCHECKED
-            });
-
-            State[] frameStates = new State[] { ACTIVE, INACTIVE };
-            stateMap.put(Part.WP_WINDOW,      frameStates);
-            stateMap.put(Part.WP_FRAMELEFT,   frameStates);
-            stateMap.put(Part.WP_FRAMERIGHT,  frameStates);
-            stateMap.put(Part.WP_FRAMEBOTTOM, frameStates);
-
-            State[] captionStates = new State[] { ACTIVE, INACTIVE, DISABLED };
-            stateMap.put(Part.WP_CAPTION,    captionStates);
-            stateMap.put(Part.WP_MINCAPTION, captionStates);
-            stateMap.put(Part.WP_MAXCAPTION, captionStates);
-
-            stateMap.put(Part.MP_BARBACKGROUND,
-                         new State[] { ACTIVE, INACTIVE });
-            stateMap.put(Part.MP_BARITEM,
-                         new State[] { NORMAL, HOT, PUSHED,
-                                       DISABLED, DISABLEDHOT, DISABLEDPUSHED });
-            stateMap.put(Part.MP_POPUPCHECK,
-                         new State[] { CHECKMARKNORMAL, CHECKMARKDISABLED,
-                                       BULLETNORMAL, BULLETDISABLED });
-            stateMap.put(Part.MP_POPUPCHECKBACKGROUND,
-                         new State[] { DISABLEDPUSHED, NORMAL, BITMAP });
-            stateMap.put(Part.MP_POPUPITEM,
-                         new State[] { NORMAL, HOT, DISABLED, DISABLEDHOT });
-            stateMap.put(Part.MP_POPUPSUBMENU,
-                         new State[] { NORMAL, DISABLED });
-
-        }
-
-
-        public static synchronized int getValue(Part part, State state) {
-            if (stateMap == null) {
-                initStates();
-            }
-
-            Enum[] states = stateMap.get(part);
-            if (states != null) {
-                for (int i = 0; i < states.length; i++) {
-                    if (state == states[i]) {
-                        return i + 1;
-                    }
-                }
-            }
-
-            if (state == null || state == State.NORMAL) {
-                return 1;
-            }
-
-            return 0;
-        }
-
-    }
-
-
-    /**
-     * An enumeration of the possible component attributes and the
-     * corresponding value type
-     */
-    public static enum Prop {
-        COLOR(Color.class,                204),
-        SIZE(Dimension.class,             207),
-
-        FLATMENUS(Boolean.class,         1001),
-
-        BORDERONLY(Boolean.class,        2203), // only draw the border area of the image
-
-        IMAGECOUNT(Integer.class,        2401), // the number of state images in an imagefile
-        BORDERSIZE(Integer.class,        2403), // the size of the border line for bgtype=BorderFill
-
-        PROGRESSCHUNKSIZE(Integer.class, 2411), // size of progress control chunks
-        PROGRESSSPACESIZE(Integer.class, 2412), // size of progress control spaces
-
-        TEXTSHADOWOFFSET(Point.class,    3402), // where char shadows are drawn, relative to orig. chars
-
-        NORMALSIZE(Dimension.class,      3409), // size of dest rect that exactly source
-
-
-        SIZINGMARGINS ( Insets.class,    3601), // margins used for 9-grid sizing
-        CONTENTMARGINS(Insets.class,     3602), // margins that define where content can be placed
-        CAPTIONMARGINS(Insets.class,     3603), // margins that define where caption text can be placed
-
-        BORDERCOLOR(Color.class,         3801), // color of borders for BorderFill
-        FILLCOLOR  (  Color.class,       3802), // color of bg fill
-        TEXTCOLOR  (  Color.class,       3803), // color text is drawn in
-
-        TEXTSHADOWCOLOR(Color.class,     3818), // color of text shadow
-
-        BGTYPE(Integer.class,            4001), // basic drawing type for each part
-
-        TEXTSHADOWTYPE(Integer.class,    4010), // type of shadow to draw with text
-
-        TRANSITIONDURATIONS(Integer.class, 6000);
-
-        private final Class type;
-        private final int value;
-
-        private Prop(Class type, int value) {
-            this.type     = type;
-            this.value    = value;
-        }
-
-        public int getValue() {
-            return value;
-        }
-
-        public String toString() {
-            return name()+"["+type.getName()+"] = "+value;
-        }
-    }
-
-
-    /**
-     * An enumeration of attribute values for some Props
-     */
-    public static enum TypeEnum {
-        BT_IMAGEFILE (Prop.BGTYPE, "imagefile",  0),
-        BT_BORDERFILL(Prop.BGTYPE, "borderfill", 1),
-
-        TST_NONE(Prop.TEXTSHADOWTYPE, "none", 0),
-        TST_SINGLE(Prop.TEXTSHADOWTYPE, "single", 1),
-        TST_CONTINUOUS(Prop.TEXTSHADOWTYPE, "continuous", 2);
-
-
-        private TypeEnum(Prop prop, String enumName, int value) {
-            this.prop = prop;
-            this.enumName = enumName;
-            this.value = value;
-        }
-
-        private final Prop prop;
-        private final String enumName;
-        private final int value;
-
-        public String toString() {
-            return prop+"="+enumName+"="+value;
-        }
-
-        String getName() {
-            return enumName;
-        }
-
-
-        static TypeEnum getTypeEnum(Prop prop, int enumval) {
-            for (TypeEnum e : TypeEnum.values()) {
-                if (e.prop == prop && e.value == enumval) {
-                    return e;
-                }
-            }
-            return null;
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsBorders.java b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsBorders.java
deleted file mode 100755
index 286c3a5..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsBorders.java
+++ /dev/null
@@ -1,336 +0,0 @@
-/*
- * Copyright (c) 1998, 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
- * 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.java.swing.plaf.windows;
-
-import javax.swing.*;
-import javax.swing.border.*;
-import javax.swing.plaf.*;
-import javax.swing.plaf.basic.*;
-
-import java.awt.Component;
-import java.awt.Insets;
-import java.awt.Color;
-import java.awt.Graphics;
-
-import static com.sun.java.swing.plaf.windows.TMSchema.*;
-import static com.sun.java.swing.plaf.windows.XPStyle.Skin;
-
-/**
- * Factory object that can vend Borders appropriate for the Windows 95 L & F.
- * @author Rich Schiavi
- */
-
-public class WindowsBorders {
-
-    /**
-     * Returns a  border instance for a Windows Progress Bar
-     * @since 1.4
-     */
-    public static Border getProgressBarBorder() {
-        UIDefaults table = UIManager.getLookAndFeelDefaults();
-        Border progressBarBorder = new BorderUIResource.CompoundBorderUIResource(
-                                         new WindowsBorders.ProgressBarBorder(
-                                              table.getColor("ProgressBar.shadow"),
-                                              table.getColor("ProgressBar.highlight")),
-                                              new EmptyBorder(1,1,1,1)
-                                        );
-        return progressBarBorder;
-    }
-
-    /**
-     * Returns a border instance for a Windows ToolBar
-     *
-     * @return a border used for the toolbar
-     * @since 1.4
-     */
-    public static Border getToolBarBorder() {
-        UIDefaults table = UIManager.getLookAndFeelDefaults();
-        Border toolBarBorder = new WindowsBorders.ToolBarBorder(
-                                        table.getColor("ToolBar.shadow"),
-                                        table.getColor("ToolBar.highlight"));
-        return toolBarBorder;
-    }
-
-    /**
-     * Returns an new instance of a border used to indicate which cell item
-     * has focus.
-     *
-     * @return a border to indicate which cell item has focus
-     * @since 1.4
-     */
-    public static Border getFocusCellHighlightBorder() {
-        return new ComplementDashedBorder();
-    }
-
-    public static Border getTableHeaderBorder() {
-        UIDefaults table = UIManager.getLookAndFeelDefaults();
-        Border tableHeaderBorder = new BorderUIResource.CompoundBorderUIResource(
-                           new BasicBorders.ButtonBorder(
-                                           table.getColor("Table.shadow"),
-                                           table.getColor("Table.darkShadow"),
-                                           table.getColor("Table.light"),
-                                           table.getColor("Table.highlight")),
-                                     new BasicBorders.MarginBorder());
-        return tableHeaderBorder;
-    }
-
-    public static Border getInternalFrameBorder() {
-        UIDefaults table = UIManager.getLookAndFeelDefaults();
-        Border internalFrameBorder = new
-            BorderUIResource.CompoundBorderUIResource(
-                BorderFactory.createBevelBorder(BevelBorder.RAISED,
-                    table.getColor("InternalFrame.borderColor"),
-                    table.getColor("InternalFrame.borderHighlight"),
-                    table.getColor("InternalFrame.borderDarkShadow"),
-                    table.getColor("InternalFrame.borderShadow")),
-                new WindowsBorders.InternalFrameLineBorder(
-                    table.getColor("InternalFrame.activeBorderColor"),
-                    table.getColor("InternalFrame.inactiveBorderColor"),
-                    table.getInt("InternalFrame.borderWidth")));
-
-        return internalFrameBorder;
-    }
-
-    public static class ProgressBarBorder extends AbstractBorder implements UIResource {
-        protected Color shadow;
-        protected Color highlight;
-
-        public ProgressBarBorder(Color shadow, Color highlight) {
-            this.highlight = highlight;
-            this.shadow = shadow;
-        }
-
-        public void paintBorder(Component c, Graphics g, int x, int y,
-                                int width, int height) {
-            g.setColor(shadow);
-            g.drawLine(x,y, width-1,y); // draw top
-            g.drawLine(x,y, x,height-1); // draw left
-            g.setColor(highlight);
-            g.drawLine(x,height-1, width-1,height-1); // draw bottom
-            g.drawLine(width-1,y, width-1,height-1); // draw right
-        }
-
-        public Insets getBorderInsets(Component c, Insets insets) {
-            insets.set(1,1,1,1);
-            return insets;
-        }
-    }
-
-    /**
-     * A border for the ToolBar. If the ToolBar is floatable then the handle grip is drawn
-     * <p>
-     * @since 1.4
-     */
-    public static class ToolBarBorder extends AbstractBorder implements UIResource, SwingConstants {
-        protected Color shadow;
-        protected Color highlight;
-
-        public ToolBarBorder(Color shadow, Color highlight) {
-            this.highlight = highlight;
-            this.shadow = shadow;
-        }
-
-        public void paintBorder(Component c, Graphics g, int x, int y,
-                                int width, int height) {
-            if (!(c instanceof JToolBar)) {
-                return;
-            }
-            g.translate(x, y);
-
-            XPStyle xp = XPStyle.getXP();
-            if (xp != null) {
-                Border xpBorder = xp.getBorder(c, Part.TP_TOOLBAR);
-                if (xpBorder != null) {
-                    xpBorder.paintBorder(c, g, 0, 0, width, height);
-                }
-            }
-            if (((JToolBar)c).isFloatable()) {
-                boolean vertical = ((JToolBar)c).getOrientation() == VERTICAL;
-
-                if (xp != null) {
-                    Part part = vertical ? Part.RP_GRIPPERVERT : Part.RP_GRIPPER;
-                    Skin skin = xp.getSkin(c, part);
-                    int dx, dy, dw, dh;
-                    if (vertical) {
-                        dx = 0;
-                        dy = 2;
-                        dw = width - 1;
-                        dh = skin.getHeight();
-                    } else {
-                        dw = skin.getWidth();
-                        dh = height - 1;
-                        dx = c.getComponentOrientation().isLeftToRight() ? 2 : (width-dw-2);
-                        dy = 0;
-                    }
-                    skin.paintSkin(g, dx, dy, dw, dh, State.NORMAL);
-
-                } else {
-
-                    if (!vertical) {
-                        if (c.getComponentOrientation().isLeftToRight()) {
-                            g.setColor(shadow);
-                            g.drawLine(4, 3, 4, height - 4);
-                            g.drawLine(4, height - 4, 2, height - 4);
-
-                            g.setColor(highlight);
-                            g.drawLine(2, 3, 3, 3);
-                            g.drawLine(2, 3, 2, height - 5);
-                        } else {
-                            g.setColor(shadow);
-                            g.drawLine(width - 3, 3, width - 3, height - 4);
-                            g.drawLine(width - 4, height - 4, width - 4, height - 4);
-
-                            g.setColor(highlight);
-                            g.drawLine(width - 5, 3, width - 4, 3);
-                            g.drawLine(width - 5, 3, width - 5, height - 5);
-                        }
-                    } else { // Vertical
-                        g.setColor(shadow);
-                        g.drawLine(3, 4, width - 4, 4);
-                        g.drawLine(width - 4, 2, width - 4, 4);
-
-                        g.setColor(highlight);
-                        g.drawLine(3, 2, width - 4, 2);
-                        g.drawLine(3, 2, 3, 3);
-                    }
-                }
-            }
-
-            g.translate(-x, -y);
-        }
-
-        public Insets getBorderInsets(Component c, Insets insets) {
-            insets.set(1,1,1,1);
-            if (!(c instanceof JToolBar)) {
-                return insets;
-            }
-            if (((JToolBar)c).isFloatable()) {
-                int gripInset = (XPStyle.getXP() != null) ? 12 : 9;
-                if (((JToolBar)c).getOrientation() == HORIZONTAL) {
-                    if (c.getComponentOrientation().isLeftToRight()) {
-                        insets.left = gripInset;
-                    } else {
-                        insets.right = gripInset;
-                    }
-                } else {
-                    insets.top = gripInset;
-                }
-            }
-            return insets;
-        }
-    }
-
-    /**
-     * This class is an implementation of a dashed border.
-     * @since 1.4
-     */
-    public static class DashedBorder extends LineBorder implements UIResource {
-        public DashedBorder(Color color) {
-            super(color);
-        }
-
-        public DashedBorder(Color color, int thickness)  {
-            super(color, thickness);
-        }
-
-        public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) {
-            Color oldColor = g.getColor();
-            int i;
-
-            g.setColor(lineColor);
-            for(i = 0; i < thickness; i++)  {
-                BasicGraphicsUtils.drawDashedRect(g, x+i, y+i, width-i-i, height-i-i);
-            }
-            g.setColor(oldColor);
-        }
-    }
-
-    /**
-     * A dashed border that paints itself in the complementary color
-     * of the component's background color.
-     */
-    static class ComplementDashedBorder extends LineBorder implements UIResource {
-        private Color origColor;
-        private Color paintColor;
-
-        public ComplementDashedBorder() {
-            super(null);
-        }
-
-        public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) {
-            Color color = c.getBackground();
-
-            if (origColor != color) {
-                origColor = color;
-                paintColor = new Color(~origColor.getRGB());
-            }
-
-            g.setColor(paintColor);
-            BasicGraphicsUtils.drawDashedRect(g, x, y, width, height);
-        }
-    }
-
-    /**
-     * This class is an implementation of the InternalFrameLine border.
-     * @since 1.4
-     */
-    public static class InternalFrameLineBorder extends LineBorder implements
-            UIResource {
-        protected Color activeColor;
-        protected Color inactiveColor;
-
-        public InternalFrameLineBorder(Color activeBorderColor,
-                                       Color inactiveBorderColor,
-                                       int thickness) {
-            super(activeBorderColor, thickness);
-            activeColor = activeBorderColor;
-            inactiveColor = inactiveBorderColor;
-        }
-
-        public void paintBorder(Component c, Graphics g, int x, int y,
-                int width, int height) {
-
-            JInternalFrame jif = null;
-            if (c instanceof JInternalFrame) {
-                jif = (JInternalFrame)c;
-            } else if (c instanceof JInternalFrame.JDesktopIcon) {
-                jif = ((JInternalFrame.JDesktopIcon)c).getInternalFrame();
-            } else {
-                return;
-            }
-
-            if (jif.isSelected()) {
-                // Set the line color so the line border gets the correct
-                // color.
-                lineColor = activeColor;
-                super.paintBorder(c, g, x, y, width, height);
-            } else {
-                lineColor = inactiveColor;
-                super.paintBorder(c, g, x, y, width, height);
-            }
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsButtonListener.java b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsButtonListener.java
deleted file mode 100755
index a78298c..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsButtonListener.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright (c) 1998, 2006, 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.java.swing.plaf.windows;
-
-import java.beans.PropertyChangeEvent;
-
-import javax.swing.*;
-import javax.swing.plaf.basic.*;
-
-/**
- * Button Listener
- * <p>
- * <strong>Warning:</strong>
- * Serialized objects of this class will not be compatible with
- * future Swing releases.  The current serialization support is appropriate
- * for short term storage or RMI between applications running the same
- * version of Swing.  A future release of Swing will provide support for
- * long term persistence.
- *
- * @author Rich Schiavi
- */
-public class WindowsButtonListener extends BasicButtonListener {
-    public WindowsButtonListener(AbstractButton b) {
-        super(b);
-    }
-    /*
-     This class is currently not used, but exists in case customers
-     were subclassing it.
-     */
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsButtonUI.java b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsButtonUI.java
deleted file mode 100755
index 0ea400d..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsButtonUI.java
+++ /dev/null
@@ -1,320 +0,0 @@
-/*
- * Copyright (c) 1997, 2006, 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.java.swing.plaf.windows;
-
-import javax.swing.plaf.basic.*;
-import javax.swing.border.*;
-import javax.swing.plaf.*;
-import javax.swing.*;
-
-import java.awt.*;
-
-import static com.sun.java.swing.plaf.windows.TMSchema.*;
-import static com.sun.java.swing.plaf.windows.TMSchema.Part.*;
-import static com.sun.java.swing.plaf.windows.XPStyle.Skin;
-import sun.awt.AppContext;
-
-
-/**
- * Windows button.
- * <p>
- * <strong>Warning:</strong>
- * Serialized objects of this class will not be compatible with
- * future Swing releases.  The current serialization support is appropriate
- * for short term storage or RMI between applications running the same
- * version of Swing.  A future release of Swing will provide support for
- * long term persistence.
- *
- * @author Jeff Dinkins
- *
- */
-public class WindowsButtonUI extends BasicButtonUI
-{
-    protected int dashedRectGapX;
-    protected int dashedRectGapY;
-    protected int dashedRectGapWidth;
-    protected int dashedRectGapHeight;
-
-    protected Color focusColor;
-
-    private boolean defaults_initialized = false;
-
-    private static final Object WINDOWS_BUTTON_UI_KEY = new Object();
-
-    // ********************************
-    //          Create PLAF
-    // ********************************
-    public static ComponentUI createUI(JComponent c) {
-        AppContext appContext = AppContext.getAppContext();
-        WindowsButtonUI windowsButtonUI =
-                (WindowsButtonUI) appContext.get(WINDOWS_BUTTON_UI_KEY);
-        if (windowsButtonUI == null) {
-            windowsButtonUI = new WindowsButtonUI();
-            appContext.put(WINDOWS_BUTTON_UI_KEY, windowsButtonUI);
-        }
-        return windowsButtonUI;
-    }
-
-
-    // ********************************
-    //            Defaults
-    // ********************************
-    protected void installDefaults(AbstractButton b) {
-        super.installDefaults(b);
-        if(!defaults_initialized) {
-            String pp = getPropertyPrefix();
-            dashedRectGapX = UIManager.getInt(pp + "dashedRectGapX");
-            dashedRectGapY = UIManager.getInt(pp + "dashedRectGapY");
-            dashedRectGapWidth = UIManager.getInt(pp + "dashedRectGapWidth");
-            dashedRectGapHeight = UIManager.getInt(pp + "dashedRectGapHeight");
-            focusColor = UIManager.getColor(pp + "focus");
-            defaults_initialized = true;
-        }
-
-        XPStyle xp = XPStyle.getXP();
-        if (xp != null) {
-            b.setBorder(xp.getBorder(b, getXPButtonType(b)));
-            LookAndFeel.installProperty(b, "rolloverEnabled", Boolean.TRUE);
-        }
-    }
-
-    protected void uninstallDefaults(AbstractButton b) {
-        super.uninstallDefaults(b);
-        defaults_initialized = false;
-    }
-
-    protected Color getFocusColor() {
-        return focusColor;
-    }
-
-    // ********************************
-    //         Paint Methods
-    // ********************************
-
-    /**
-     * Overridden method to render the text without the mnemonic
-     */
-    protected void paintText(Graphics g, AbstractButton b, Rectangle textRect, String text) {
-        WindowsGraphicsUtils.paintText(g, b, textRect, text, getTextShiftOffset());
-    }
-
-    protected void paintFocus(Graphics g, AbstractButton b, Rectangle viewRect, Rectangle textRect, Rectangle iconRect){
-
-        // focus painted same color as text on Basic??
-        int width = b.getWidth();
-        int height = b.getHeight();
-        g.setColor(getFocusColor());
-        BasicGraphicsUtils.drawDashedRect(g, dashedRectGapX, dashedRectGapY,
-                                          width - dashedRectGapWidth, height - dashedRectGapHeight);
-    }
-
-    protected void paintButtonPressed(Graphics g, AbstractButton b){
-        setTextShiftOffset();
-    }
-
-    // ********************************
-    //          Layout Methods
-    // ********************************
-    public Dimension getPreferredSize(JComponent c) {
-        Dimension d = super.getPreferredSize(c);
-
-        /* Ensure that the width and height of the button is odd,
-         * to allow for the focus line if focus is painted
-         */
-        AbstractButton b = (AbstractButton)c;
-        if (d != null && b.isFocusPainted()) {
-            if(d.width % 2 == 0) { d.width += 1; }
-            if(d.height % 2 == 0) { d.height += 1; }
-        }
-        return d;
-    }
-
-
-    /* These rectangles/insets are allocated once for all
-     * ButtonUI.paint() calls.  Re-using rectangles rather than
-     * allocating them in each paint call substantially reduced the time
-     * it took paint to run.  Obviously, this method can't be re-entered.
-     */
-    private Rectangle viewRect = new Rectangle();
-
-    public void paint(Graphics g, JComponent c) {
-        if (XPStyle.getXP() != null) {
-            WindowsButtonUI.paintXPButtonBackground(g, c);
-        }
-        super.paint(g, c);
-    }
-
-    static Part getXPButtonType(AbstractButton b) {
-        if(b instanceof JCheckBox) {
-            return Part.BP_CHECKBOX;
-        }
-        if(b instanceof JRadioButton) {
-            return Part.BP_RADIOBUTTON;
-        }
-        boolean toolbar = (b.getParent() instanceof JToolBar);
-        return toolbar ? Part.TP_BUTTON : Part.BP_PUSHBUTTON;
-    }
-
-    static State getXPButtonState(AbstractButton b) {
-        Part part = getXPButtonType(b);
-        ButtonModel model = b.getModel();
-        State state = State.NORMAL;
-        switch (part) {
-        case BP_RADIOBUTTON:
-            /* falls through */
-        case BP_CHECKBOX:
-            if (! model.isEnabled()) {
-                state = (model.isSelected()) ? State.CHECKEDDISABLED
-                    : State.UNCHECKEDDISABLED;
-            } else if (model.isPressed() && model.isArmed()) {
-                state = (model.isSelected()) ? State.CHECKEDPRESSED
-                    : State.UNCHECKEDPRESSED;
-            } else if (model.isRollover()) {
-                state = (model.isSelected()) ? State.CHECKEDHOT
-                    : State.UNCHECKEDHOT;
-            } else {
-                state = (model.isSelected()) ? State.CHECKEDNORMAL
-                    : State.UNCHECKEDNORMAL;
-            }
-            break;
-        case BP_PUSHBUTTON:
-            /* falls through */
-        case TP_BUTTON:
-            boolean toolbar = (b.getParent() instanceof JToolBar);
-            if (toolbar) {
-                if (model.isArmed() && model.isPressed()) {
-                    state = State.PRESSED;
-                } else if (!model.isEnabled()) {
-                    state = State.DISABLED;
-                } else if (model.isSelected() && model.isRollover()) {
-                    state = State.HOTCHECKED;
-                } else if (model.isSelected()) {
-                    state = State.CHECKED;
-                } else if (model.isRollover()) {
-                    state = State.HOT;
-                } else if (b.hasFocus()) {
-                    state = State.HOT;
-                }
-            } else {
-                if ((model.isArmed() && model.isPressed())
-                      || model.isSelected()) {
-                    state = State.PRESSED;
-                } else if (!model.isEnabled()) {
-                    state = State.DISABLED;
-                } else if (model.isRollover() || model.isPressed()) {
-                    state = State.HOT;
-                } else if (b instanceof JButton
-                           && ((JButton)b).isDefaultButton()) {
-                    state = State.DEFAULTED;
-                } else if (b.hasFocus()) {
-                    state = State.HOT;
-                }
-            }
-            break;
-        default :
-            state = State.NORMAL;
-        }
-
-        return state;
-    }
-
-    static void paintXPButtonBackground(Graphics g, JComponent c) {
-        AbstractButton b = (AbstractButton)c;
-
-        XPStyle xp = XPStyle.getXP();
-
-        Part part = getXPButtonType(b);
-
-        if (b.isContentAreaFilled() && xp != null) {
-
-            Skin skin = xp.getSkin(b, part);
-
-            State state = getXPButtonState(b);
-            Dimension d = c.getSize();
-            int dx = 0;
-            int dy = 0;
-            int dw = d.width;
-            int dh = d.height;
-
-            Border border = c.getBorder();
-            Insets insets;
-            if (border != null) {
-                // Note: The border may be compound, containing an outer
-                // opaque border (supplied by the application), plus an
-                // inner transparent margin border. We want to size the
-                // background to fill the transparent part, but stay
-                // inside the opaque part.
-                insets = WindowsButtonUI.getOpaqueInsets(border, c);
-            } else {
-                insets = c.getInsets();
-            }
-            if (insets != null) {
-                dx += insets.left;
-                dy += insets.top;
-                dw -= (insets.left + insets.right);
-                dh -= (insets.top + insets.bottom);
-            }
-            skin.paintSkin(g, dx, dy, dw, dh, state);
-        }
-    }
-
-    /**
-     * returns - b.getBorderInsets(c) if border is opaque
-     *         - null if border is completely non-opaque
-     *         - somewhere inbetween if border is compound and
-     *              outside border is opaque and inside isn't
-     */
-    private static Insets getOpaqueInsets(Border b, Component c) {
-        if (b == null) {
-            return null;
-        }
-        if (b.isBorderOpaque()) {
-            return b.getBorderInsets(c);
-        } else if (b instanceof CompoundBorder) {
-            CompoundBorder cb = (CompoundBorder)b;
-            Insets iOut = getOpaqueInsets(cb.getOutsideBorder(), c);
-            if (iOut != null && iOut.equals(cb.getOutsideBorder().getBorderInsets(c))) {
-                // Outside border is opaque, keep looking
-                Insets iIn = getOpaqueInsets(cb.getInsideBorder(), c);
-                if (iIn == null) {
-                    // Inside is non-opaque, use outside insets
-                    return iOut;
-                } else {
-                    // Found non-opaque somewhere in the inside (which is
-                    // also compound).
-                    return new Insets(iOut.top + iIn.top, iOut.left + iIn.left,
-                                      iOut.bottom + iIn.bottom, iOut.right + iIn.right);
-                }
-            } else {
-                // Outside is either all non-opaque or has non-opaque
-                // border inside another compound border
-                return iOut;
-            }
-        } else {
-            return null;
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsCheckBoxMenuItemUI.java b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsCheckBoxMenuItemUI.java
deleted file mode 100755
index ab1a1bc..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsCheckBoxMenuItemUI.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Copyright (c) 1997, 2006, 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.java.swing.plaf.windows;
-
-import java.awt.*;
-import javax.swing.*;
-import javax.swing.plaf.*;
-import javax.swing.plaf.basic.*;
-
-import com.sun.java.swing.plaf.windows.TMSchema.Part;
-import com.sun.java.swing.plaf.windows.TMSchema.State;
-
-
-/**
- * Windows check box menu item.
- * <p>
- * <strong>Warning:</strong>
- * Serialized objects of this class will not be compatible with
- * future Swing releases.  The current serialization support is appropriate
- * for short term storage or RMI between applications running the same
- * version of Swing.  A future release of Swing will provide support for
- * long term persistence.
- */
-public class WindowsCheckBoxMenuItemUI extends BasicCheckBoxMenuItemUI {
-
-    final WindowsMenuItemUIAccessor accessor =
-        new WindowsMenuItemUIAccessor() {
-
-            public JMenuItem getMenuItem() {
-                return menuItem;
-            }
-
-            public State getState(JMenuItem menuItem) {
-                return WindowsMenuItemUI.getState(this, menuItem);
-            }
-
-            public Part getPart(JMenuItem menuItem) {
-                return WindowsMenuItemUI.getPart(this, menuItem);
-            }
-    };
-    public static ComponentUI createUI(JComponent b) {
-        return new WindowsCheckBoxMenuItemUI();
-    }
-
-    @Override
-    protected  void paintBackground(Graphics g, JMenuItem menuItem,
-            Color bgColor) {
-        if (WindowsMenuItemUI.isVistaPainting()) {
-            WindowsMenuItemUI.paintBackground(accessor, g, menuItem, bgColor);
-            return;
-        }
-        super.paintBackground(g, menuItem, bgColor);
-    }
-    /**
-     * Method which renders the text of the current menu item.
-     * <p>
-     * @param g Graphics context
-     * @param menuItem Current menu item to render
-     * @param textRect Bounding rectangle to render the text.
-     * @param text String to render
-     * @since 1.4
-     */
-    protected void paintText(Graphics g, JMenuItem menuItem,
-                             Rectangle textRect, String text) {
-        if (WindowsMenuItemUI.isVistaPainting()) {
-            WindowsMenuItemUI.paintText(accessor, g, menuItem,
-                                        textRect, text);
-            return;
-        }
-        ButtonModel model = menuItem.getModel();
-        Color oldColor = g.getColor();
-
-        if(model.isEnabled() && model.isArmed()) {
-            g.setColor(selectionForeground); // Uses protected field.
-        }
-
-        WindowsGraphicsUtils.paintText(g, menuItem, textRect, text, 0);
-
-        g.setColor(oldColor);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsCheckBoxUI.java b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsCheckBoxUI.java
deleted file mode 100755
index 91f4530..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsCheckBoxUI.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright (c) 1997, 1998, 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.java.swing.plaf.windows;
-
-import sun.awt.AppContext;
-
-import javax.swing.plaf.basic.*;
-import javax.swing.*;
-import javax.swing.plaf.*;
-
-import java.awt.*;
-
-/**
- * Windows check box.
- * <p>
- * <strong>Warning:</strong>
- * Serialized objects of this class will not be compatible with
- * future Swing releases.  The current serialization support is appropriate
- * for short term storage or RMI between applications running the same
- * version of Swing.  A future release of Swing will provide support for
- * long term persistence.
- *
- * @author Jeff Dinkins
- */
-public class WindowsCheckBoxUI extends WindowsRadioButtonUI
-{
-    // NOTE: MetalCheckBoxUI inherts from MetalRadioButtonUI instead
-    // of BasicCheckBoxUI because we want to pick up all the
-    // painting changes made in MetalRadioButtonUI.
-
-    private static final Object WINDOWS_CHECK_BOX_UI_KEY = new Object();
-
-    private final static String propertyPrefix = "CheckBox" + ".";
-
-    private boolean defaults_initialized = false;
-
-    // ********************************
-    //          Create PLAF
-    // ********************************
-    public static ComponentUI createUI(JComponent c) {
-        AppContext appContext = AppContext.getAppContext();
-        WindowsCheckBoxUI windowsCheckBoxUI =
-                (WindowsCheckBoxUI) appContext.get(WINDOWS_CHECK_BOX_UI_KEY);
-        if (windowsCheckBoxUI == null) {
-            windowsCheckBoxUI = new WindowsCheckBoxUI();
-            appContext.put(WINDOWS_CHECK_BOX_UI_KEY, windowsCheckBoxUI);
-        }
-        return windowsCheckBoxUI;
-    }
-
-
-    public String getPropertyPrefix() {
-        return propertyPrefix;
-    }
-
-    // ********************************
-    //          Defaults
-    // ********************************
-    public void installDefaults(AbstractButton b) {
-        super.installDefaults(b);
-        if(!defaults_initialized) {
-            icon = UIManager.getIcon(getPropertyPrefix() + "icon");
-            defaults_initialized = true;
-        }
-    }
-
-    public void uninstallDefaults(AbstractButton b) {
-        super.uninstallDefaults(b);
-        defaults_initialized = false;
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsClassicLookAndFeel.java b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsClassicLookAndFeel.java
deleted file mode 100755
index 672ea76..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsClassicLookAndFeel.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-package com.sun.java.swing.plaf.windows;
-
-/**
- * Implements the Windows95/98/ME/NT/2000 Look and Feel.
- * <p>
- * <strong>Warning:</strong>
- * Serialized objects of this class will not be compatible with
- * future Swing releases.  The current serialization support is appropriate
- * for short term storage or RMI between applications running the same
- * version of Swing.  A future release of Swing will provide support for
- * long term persistence.
- *
- * @since 1.5
- */
-public class WindowsClassicLookAndFeel extends WindowsLookAndFeel {
-    public String getName() {
-        return "Windows Classic";
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsComboBoxUI.java b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsComboBoxUI.java
deleted file mode 100755
index 30a3d5e..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsComboBoxUI.java
+++ /dev/null
@@ -1,565 +0,0 @@
-/*
- * 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
- * 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.java.swing.plaf.windows;
-
-import java.beans.PropertyChangeListener;
-import java.beans.PropertyChangeEvent;
-import javax.swing.plaf.basic.*;
-import javax.swing.plaf.*;
-import javax.swing.border.*;
-import javax.swing.*;
-import java.awt.event.*;
-import java.awt.*;
-
-import static com.sun.java.swing.plaf.windows.TMSchema.Part;
-import static com.sun.java.swing.plaf.windows.TMSchema.State;
-import static com.sun.java.swing.plaf.windows.XPStyle.Skin;
-import sun.swing.DefaultLookup;
-import sun.swing.StringUIClientPropertyKey;
-
-
-/**
- * Windows combo box.
- * <p>
- * <strong>Warning:</strong>
- * Serialized objects of this class will not be compatible with
- * future Swing releases.  The current serialization support is appropriate
- * for short term storage or RMI between applications running the same
- * version of Swing.  A future release of Swing will provide support for
- * long term persistence.
- *
- * @author Tom Santos
- * @author Igor Kushnirskiy
- */
-
-public class WindowsComboBoxUI extends BasicComboBoxUI {
-
-    private static final MouseListener rolloverListener =
-        new MouseAdapter() {
-            private void handleRollover(MouseEvent e, boolean isRollover) {
-                JComboBox comboBox = getComboBox(e);
-                WindowsComboBoxUI comboBoxUI = getWindowsComboBoxUI(e);
-                if (comboBox == null || comboBoxUI == null) {
-                    return;
-                }
-                if (! comboBox.isEditable()) {
-                    //mouse over editable ComboBox does not switch rollover
-                    //for the arrow button
-                    ButtonModel m = null;
-                    if (comboBoxUI.arrowButton != null) {
-                        m = comboBoxUI.arrowButton.getModel();
-                    }
-                    if (m != null ) {
-                        m.setRollover(isRollover);
-                    }
-                }
-                comboBoxUI.isRollover = isRollover;
-                comboBox.repaint();
-            }
-
-            public void mouseEntered(MouseEvent e) {
-                handleRollover(e, true);
-            }
-
-            public void mouseExited(MouseEvent e) {
-                handleRollover(e, false);
-            }
-
-            private JComboBox getComboBox(MouseEvent event) {
-                Object source = event.getSource();
-                JComboBox rv = null;
-                if (source instanceof JComboBox) {
-                    rv = (JComboBox) source;
-                } else if (source instanceof XPComboBoxButton) {
-                    rv = ((XPComboBoxButton) source)
-                        .getWindowsComboBoxUI().comboBox;
-                }
-                return rv;
-            }
-
-            private WindowsComboBoxUI getWindowsComboBoxUI(MouseEvent event) {
-                JComboBox comboBox = getComboBox(event);
-                WindowsComboBoxUI rv = null;
-                if (comboBox != null
-                    && comboBox.getUI() instanceof WindowsComboBoxUI) {
-                    rv = (WindowsComboBoxUI) comboBox.getUI();
-                }
-                return rv;
-            }
-
-        };
-    private boolean isRollover = false;
-
-    private static final PropertyChangeListener componentOrientationListener =
-        new PropertyChangeListener() {
-            public void propertyChange(PropertyChangeEvent e) {
-                String propertyName = e.getPropertyName();
-                Object source = null;
-                if ("componentOrientation" == propertyName
-                    && (source = e.getSource()) instanceof JComboBox
-                    && ((JComboBox) source).getUI() instanceof
-                      WindowsComboBoxUI) {
-                    JComboBox comboBox = (JComboBox) source;
-                    WindowsComboBoxUI comboBoxUI = (WindowsComboBoxUI) comboBox.getUI();
-                    if (comboBoxUI.arrowButton instanceof XPComboBoxButton) {
-                        ((XPComboBoxButton) comboBoxUI.arrowButton).setPart(
-                                    (comboBox.getComponentOrientation() ==
-                                       ComponentOrientation.RIGHT_TO_LEFT)
-                                    ? Part.CP_DROPDOWNBUTTONLEFT
-                                    : Part.CP_DROPDOWNBUTTONRIGHT);
-                            }
-                        }
-                    }
-                };
-
-    public static ComponentUI createUI(JComponent c) {
-        return new WindowsComboBoxUI();
-    }
-
-    public void installUI( JComponent c ) {
-        super.installUI( c );
-        isRollover = false;
-        comboBox.setRequestFocusEnabled( true );
-        if (XPStyle.getXP() != null && arrowButton != null) {
-            //we can not do it in installListeners because arrowButton
-            //is initialized after installListeners is invoked
-            comboBox.addMouseListener(rolloverListener);
-            arrowButton.addMouseListener(rolloverListener);
-        }
-    }
-
-    public void uninstallUI(JComponent c ) {
-        comboBox.removeMouseListener(rolloverListener);
-        if(arrowButton != null) {
-            arrowButton.removeMouseListener(rolloverListener);
-        }
-        super.uninstallUI( c );
-    }
-
-    /**
-     * {@inheritDoc}
-     * @since 1.6
-     */
-    @Override
-    protected void installListeners() {
-        super.installListeners();
-        XPStyle xp = XPStyle.getXP();
-        //button glyph for LTR and RTL combobox might differ
-        if (xp != null
-              && xp.isSkinDefined(comboBox, Part.CP_DROPDOWNBUTTONRIGHT)) {
-            comboBox.addPropertyChangeListener("componentOrientation",
-                                               componentOrientationListener);
-        }
-    }
-
-    /**
-     * {@inheritDoc}
-     * @since 1.6
-     */
-    @Override
-    protected void uninstallListeners() {
-        super.uninstallListeners();
-        comboBox.removePropertyChangeListener("componentOrientation",
-                                              componentOrientationListener);
-    }
-
-    /**
-     * {@inheritDoc}
-     * @since 1.6
-     */
-    protected void configureEditor() {
-        super.configureEditor();
-        if (XPStyle.getXP() != null) {
-            editor.addMouseListener(rolloverListener);
-        }
-    }
-
-    /**
-     * {@inheritDoc}
-     * @since 1.6
-     */
-    protected void unconfigureEditor() {
-        super.unconfigureEditor();
-        editor.removeMouseListener(rolloverListener);
-    }
-
-    /**
-     * {@inheritDoc}
-     * @since 1.6
-     */
-    public void paint(Graphics g, JComponent c) {
-        if (XPStyle.getXP() != null) {
-            paintXPComboBoxBackground(g, c);
-        }
-        super.paint(g, c);
-    }
-
-    State getXPComboBoxState(JComponent c) {
-        State state = State.NORMAL;
-        if (!c.isEnabled()) {
-            state = State.DISABLED;
-        } else if (isPopupVisible(comboBox)) {
-            state = State.PRESSED;
-        } else if (isRollover) {
-            state = State.HOT;
-        }
-        return state;
-    }
-
-    private void paintXPComboBoxBackground(Graphics g, JComponent c) {
-        XPStyle xp = XPStyle.getXP();
-        State state = getXPComboBoxState(c);
-        Skin skin = null;
-        if (! comboBox.isEditable()
-              && xp.isSkinDefined(c, Part.CP_READONLY)) {
-            skin = xp.getSkin(c, Part.CP_READONLY);
-        }
-        if (skin == null) {
-            skin = xp.getSkin(c, Part.CP_COMBOBOX);
-        }
-        skin.paintSkin(g, 0, 0, c.getWidth(), c.getHeight(), state);
-    }
-
-    /**
-     * If necessary paints the currently selected item.
-     *
-     * @param g Graphics to paint to
-     * @param bounds Region to paint current value to
-     * @param hasFocus whether or not the JComboBox has focus
-     * @throws NullPointerException if any of the arguments are null.
-     * @since 1.5
-     */
-    public void paintCurrentValue(Graphics g, Rectangle bounds,
-                                  boolean hasFocus) {
-        XPStyle xp = XPStyle.getXP();
-        if ( xp != null) {
-            bounds.x += 2;
-            bounds.y += 2;
-            bounds.width -= 4;
-            bounds.height -= 4;
-        } else {
-            bounds.x += 1;
-            bounds.y += 1;
-            bounds.width -= 2;
-            bounds.height -= 2;
-        }
-        if (! comboBox.isEditable()
-            && xp != null
-            && xp.isSkinDefined(comboBox, Part.CP_READONLY)) {
-            // On vista for READNLY ComboBox
-            // color for currentValue is the same as for any other item
-
-            // mostly copied from javax.swing.plaf.basic.BasicComboBoxUI.paintCurrentValue
-            ListCellRenderer renderer = comboBox.getRenderer();
-            Component c;
-            if ( hasFocus && !isPopupVisible(comboBox) ) {
-                c = renderer.getListCellRendererComponent(
-                        listBox,
-                        comboBox.getSelectedItem(),
-                        -1,
-                        true,
-                        false );
-            } else {
-                c = renderer.getListCellRendererComponent(
-                        listBox,
-                        comboBox.getSelectedItem(),
-                        -1,
-                        false,
-                        false );
-            }
-            c.setFont(comboBox.getFont());
-            if ( comboBox.isEnabled() ) {
-                c.setForeground(comboBox.getForeground());
-                c.setBackground(comboBox.getBackground());
-            } else {
-                c.setForeground(DefaultLookup.getColor(
-                         comboBox, this, "ComboBox.disabledForeground", null));
-                c.setBackground(DefaultLookup.getColor(
-                         comboBox, this, "ComboBox.disabledBackground", null));
-            }
-            boolean shouldValidate = false;
-            if (c instanceof JPanel)  {
-                shouldValidate = true;
-            }
-            currentValuePane.paintComponent(g, c, comboBox, bounds.x, bounds.y,
-                                            bounds.width, bounds.height, shouldValidate);
-
-        } else {
-            super.paintCurrentValue(g, bounds, hasFocus);
-        }
-    }
-
-    /**
-     * {@inheritDoc}
-     * @since 1.6
-     */
-    public void paintCurrentValueBackground(Graphics g, Rectangle bounds,
-                                            boolean hasFocus) {
-        if (XPStyle.getXP() == null) {
-            super.paintCurrentValueBackground(g, bounds, hasFocus);
-        }
-    }
-
-    public Dimension getMinimumSize( JComponent c ) {
-        Dimension d = super.getMinimumSize(c);
-        if (XPStyle.getXP() != null) {
-            d.width += 5;
-        } else {
-            d.width += 4;
-        }
-        d.height += 2;
-        return d;
-    }
-
-    /**
-     * Creates a layout manager for managing the components which make up the
-     * combo box.
-     *
-     * @return an instance of a layout manager
-     */
-    protected LayoutManager createLayoutManager() {
-        return new BasicComboBoxUI.ComboBoxLayoutManager() {
-            public void layoutContainer(Container parent) {
-                super.layoutContainer(parent);
-
-                if (XPStyle.getXP() != null && arrowButton != null) {
-                    Dimension d = parent.getSize();
-                    Insets insets = getInsets();
-                    int buttonWidth = arrowButton.getPreferredSize().width;
-                    arrowButton.setBounds(WindowsGraphicsUtils.isLeftToRight((JComboBox)parent)
-                                          ? (d.width - insets.right - buttonWidth)
-                                          : insets.left,
-                                          insets.top,
-                                          buttonWidth, d.height - insets.top - insets.bottom);
-                }
-            }
-        };
-    }
-
-    protected void installKeyboardActions() {
-        super.installKeyboardActions();
-    }
-
-    protected ComboPopup createPopup() {
-        return super.createPopup();
-    }
-
-    /**
-     * Creates the default editor that will be used in editable combo boxes.
-     * A default editor will be used only if an editor has not been
-     * explicitly set with <code>setEditor</code>.
-     *
-     * @return a <code>ComboBoxEditor</code> used for the combo box
-     * @see javax.swing.JComboBox#setEditor
-     */
-    protected ComboBoxEditor createEditor() {
-        return new WindowsComboBoxEditor();
-    }
-
-    /**
-     * {@inheritDoc}
-     * @since 1.6
-     */
-    @Override
-    protected ListCellRenderer createRenderer() {
-        XPStyle xp = XPStyle.getXP();
-        if (xp != null && xp.isSkinDefined(comboBox, Part.CP_READONLY)) {
-            return new WindowsComboBoxRenderer();
-        } else {
-            return super.createRenderer();
-        }
-    }
-
-    /**
-     * Creates an button which will be used as the control to show or hide
-     * the popup portion of the combo box.
-     *
-     * @return a button which represents the popup control
-     */
-    protected JButton createArrowButton() {
-        if (XPStyle.getXP() != null) {
-            return new XPComboBoxButton();
-        } else {
-            return super.createArrowButton();
-        }
-    }
-
-    private class XPComboBoxButton extends XPStyle.GlyphButton {
-        public XPComboBoxButton() {
-            super(null,
-                  (! XPStyle.getXP().isSkinDefined(comboBox, Part.CP_DROPDOWNBUTTONRIGHT))
-                   ? Part.CP_DROPDOWNBUTTON
-                   : (comboBox.getComponentOrientation() == ComponentOrientation.RIGHT_TO_LEFT)
-                     ? Part.CP_DROPDOWNBUTTONLEFT
-                     : Part.CP_DROPDOWNBUTTONRIGHT
-                  );
-            setRequestFocusEnabled(false);
-        }
-
-        @Override
-        protected State getState() {
-            State rv;
-            rv = super.getState();
-            if (rv != State.DISABLED
-                && comboBox != null && ! comboBox.isEditable()
-                && XPStyle.getXP().isSkinDefined(comboBox,
-                                                 Part.CP_DROPDOWNBUTTONRIGHT)) {
-                /*
-                 * for non editable ComboBoxes Vista seems to have the
-                 * same glyph for all non DISABLED states
-                 */
-                rv = State.NORMAL;
-            }
-            return rv;
-        }
-
-        public Dimension getPreferredSize() {
-            return new Dimension(17, 21);
-        }
-
-        void setPart(Part part) {
-            setPart(comboBox, part);
-        }
-
-        WindowsComboBoxUI getWindowsComboBoxUI() {
-            return WindowsComboBoxUI.this;
-        }
-    }
-
-
-    /**
-     * Subclassed to add Windows specific Key Bindings.
-     * This class is now obsolete and doesn't do anything.
-     * Only included for backwards API compatibility.
-     * Do not call or override.
-     *
-     * @deprecated As of Java 2 platform v1.4.
-     */
-    @Deprecated
-    protected class WindowsComboPopup extends BasicComboPopup {
-
-        public WindowsComboPopup( JComboBox cBox ) {
-            super( cBox );
-        }
-
-        protected KeyListener createKeyListener() {
-            return new InvocationKeyHandler();
-        }
-
-        protected class InvocationKeyHandler extends BasicComboPopup.InvocationKeyHandler {
-            protected InvocationKeyHandler() {
-                WindowsComboPopup.this.super();
-            }
-        }
-    }
-
-
-    /**
-     * Subclassed to highlight selected item in an editable combo box.
-     */
-    public static class WindowsComboBoxEditor
-        extends BasicComboBoxEditor.UIResource {
-
-        /**
-         * {@inheritDoc}
-         * @since 1.6
-         */
-        protected JTextField createEditorComponent() {
-            JTextField editor = super.createEditorComponent();
-            Border border = (Border)UIManager.get("ComboBox.editorBorder");
-            if (border != null) {
-                editor.setBorder(border);
-            }
-            editor.setOpaque(false);
-            return editor;
-        }
-
-        public void setItem(Object item) {
-            super.setItem(item);
-            if (editor.hasFocus()) {
-                editor.selectAll();
-            }
-        }
-    }
-
-    /**
-     * Subclassed to set opacity {@code false} on the renderer
-     * and to show border for focused cells.
-     */
-    private static class WindowsComboBoxRenderer
-          extends BasicComboBoxRenderer.UIResource {
-        private static final Object BORDER_KEY
-            = new StringUIClientPropertyKey("BORDER_KEY");
-        private static final Border NULL_BORDER = new EmptyBorder(0, 0, 0, 0);
-        /**
-         * {@inheritDoc}
-         */
-        @Override
-        public Component getListCellRendererComponent(
-                                                 JList list,
-                                                 Object value,
-                                                 int index,
-                                                 boolean isSelected,
-                                                 boolean cellHasFocus) {
-            Component rv =
-                super.getListCellRendererComponent(list, value, index,
-                                                   isSelected, cellHasFocus);
-            if (rv instanceof JComponent) {
-                JComponent component = (JComponent) rv;
-                if (index == -1 && isSelected) {
-                    Border border = component.getBorder();
-                    Border dashedBorder =
-                        new WindowsBorders.DashedBorder(list.getForeground());
-                    component.setBorder(dashedBorder);
-                    //store current border in client property if needed
-                    if (component.getClientProperty(BORDER_KEY) == null) {
-                        component.putClientProperty(BORDER_KEY,
-                                       (border == null) ? NULL_BORDER : border);
-                    }
-                } else {
-                    if (component.getBorder() instanceof
-                          WindowsBorders.DashedBorder) {
-                        Object storedBorder = component.getClientProperty(BORDER_KEY);
-                        if (storedBorder instanceof Border) {
-                            component.setBorder(
-                                (storedBorder == NULL_BORDER) ? null
-                                    : (Border) storedBorder);
-                        }
-                        component.putClientProperty(BORDER_KEY, null);
-                    }
-                }
-                if (index == -1) {
-                    component.setOpaque(false);
-                    component.setForeground(list.getForeground());
-                } else {
-                    component.setOpaque(true);
-                }
-            }
-            return rv;
-        }
-
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsDesktopIconUI.java b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsDesktopIconUI.java
deleted file mode 100755
index 38618a8..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsDesktopIconUI.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-package com.sun.java.swing.plaf.windows;
-
-import java.awt.*;
-import javax.swing.plaf.*;
-import javax.swing.plaf.basic.*;
-import javax.swing.*;
-import javax.swing.border.*;
-
-
-
-/**
- * Windows icon for a minimized window on the desktop.
- * <p>
- * <strong>Warning:</strong>
- * Serialized objects of this class will not be compatible with
- * future Swing releases.  The current serialization support is appropriate
- * for short term storage or RMI between applications running the same
- * version of Swing.  A future release of Swing will provide support for
- * long term persistence.
- */
-public class WindowsDesktopIconUI extends BasicDesktopIconUI {
-    private int width;
-
-    public static ComponentUI createUI(JComponent c) {
-        return new WindowsDesktopIconUI();
-    }
-
-    public void installDefaults() {
-        super.installDefaults();
-        width = UIManager.getInt("DesktopIcon.width");
-    }
-
-    public void installUI(JComponent c)   {
-        super.installUI(c);
-
-        c.setOpaque(XPStyle.getXP() == null);
-    }
-
-    // Uninstall the listeners added by the WindowsInternalFrameTitlePane
-    public void uninstallUI(JComponent c) {
-        WindowsInternalFrameTitlePane thePane =
-                                        (WindowsInternalFrameTitlePane)iconPane;
-        super.uninstallUI(c);
-        thePane.uninstallListeners();
-    }
-
-    protected void installComponents() {
-        iconPane = new WindowsInternalFrameTitlePane(frame);
-        desktopIcon.setLayout(new BorderLayout());
-        desktopIcon.add(iconPane, BorderLayout.CENTER);
-
-        if (XPStyle.getXP() != null) {
-            desktopIcon.setBorder(null);
-        }
-    }
-
-    public Dimension getPreferredSize(JComponent c) {
-        // Windows desktop icons can not be resized.  Therefore, we should
-        // always return the minimum size of the desktop icon. See
-        // getMinimumSize(JComponent c).
-        return getMinimumSize(c);
-    }
-
-    /**
-     * Windows desktop icons are restricted to a width of 160 pixels by
-     * default.  This value is retrieved by the DesktopIcon.width property.
-     */
-    public Dimension getMinimumSize(JComponent c) {
-        Dimension dim = super.getMinimumSize(c);
-        dim.width = width;
-        return dim;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsDesktopManager.java b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsDesktopManager.java
deleted file mode 100755
index a0c7945..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsDesktopManager.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-
-package com.sun.java.swing.plaf.windows;
-
-import javax.swing.DefaultDesktopManager;
-import javax.swing.JInternalFrame;
-import javax.swing.JLayeredPane;
-import java.awt.Component;
-import java.awt.Container;
-import java.awt.Dimension;
-import java.beans.PropertyVetoException;
-import java.util.Vector;
-import java.lang.ref.WeakReference;
-
-/**
- * This class implements a DesktopManager which more closely follows
- * the MDI model than the DefaultDesktopManager.  Unlike the
- * DefaultDesktopManager policy, MDI requires that the selected
- * and activated child frames are the same, and that that frame
- * always be the top-most window.
- * <p>
- * The maximized state is managed by the DesktopManager with MDI,
- * instead of just being a property of the individual child frame.
- * This means that if the currently selected window is maximized
- * and another window is selected, that new window will be maximized.
- *
- * @see javax.swing.DefaultDesktopManager
- * @author Thomas Ball
- */
-public class WindowsDesktopManager extends DefaultDesktopManager
-        implements java.io.Serializable, javax.swing.plaf.UIResource {
-
-    /* The frame which is currently selected/activated.
-     * We store this value to enforce MDI's single-selection model.
-     */
-    private WeakReference<JInternalFrame> currentFrameRef;
-
-    public void activateFrame(JInternalFrame f) {
-        JInternalFrame currentFrame = currentFrameRef != null ?
-            currentFrameRef.get() : null;
-        try {
-            super.activateFrame(f);
-            if (currentFrame != null && f != currentFrame) {
-                // If the current frame is maximized, transfer that
-                // attribute to the frame being activated.
-                if (currentFrame.isMaximum() &&
-                    (f.getClientProperty("JInternalFrame.frameType") !=
-                    "optionDialog") ) {
-                    //Special case.  If key binding was used to select next
-                    //frame instead of minimizing the icon via the minimize
-                    //icon.
-                    if (!currentFrame.isIcon()) {
-                        currentFrame.setMaximum(false);
-                        if (f.isMaximizable()) {
-                            if (!f.isMaximum()) {
-                                f.setMaximum(true);
-                            } else if (f.isMaximum() && f.isIcon()) {
-                                f.setIcon(false);
-                            } else {
-                                f.setMaximum(false);
-                            }
-                        }
-                    }
-                }
-                if (currentFrame.isSelected()) {
-                    currentFrame.setSelected(false);
-                }
-            }
-
-            if (!f.isSelected()) {
-                f.setSelected(true);
-            }
-        } catch (PropertyVetoException e) {}
-        if (f != currentFrame) {
-            currentFrameRef = new WeakReference<JInternalFrame>(f);
-        }
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsDesktopPaneUI.java b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsDesktopPaneUI.java
deleted file mode 100755
index bd1a140..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsDesktopPaneUI.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-package com.sun.java.swing.plaf.windows;
-
-import javax.swing.*;
-import javax.swing.plaf.basic.*;
-import javax.swing.plaf.ComponentUI;
-import java.awt.event.*;
-
-/**
- * Windows desktop pane.
- * <p>
- * <strong>Warning:</strong>
- * Serialized objects of this class will not be compatible with
- * future Swing releases.  The current serialization support is appropriate
- * for short term storage or RMI between applications running the same
- * version of Swing.  A future release of Swing will provide support for
- * long term persistence.
- *
- * @author David Kloba
- */
-public class WindowsDesktopPaneUI extends BasicDesktopPaneUI
-{
-    public static ComponentUI createUI(JComponent c) {
-        return new WindowsDesktopPaneUI();
-    }
-
-    protected void installDesktopManager() {
-        desktopManager = desktop.getDesktopManager();
-        if(desktopManager == null) {
-            desktopManager = new WindowsDesktopManager();
-            desktop.setDesktopManager(desktopManager);
-        }
-    }
-
-    protected void installDefaults() {
-        super.installDefaults();
-    }
-
-    protected void installKeyboardActions() {
-        super.installKeyboardActions();
-
-        // Request focus if it isn't set.
-        if(!desktop.requestDefaultFocus()) {
-            desktop.requestFocus();
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsEditorPaneUI.java b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsEditorPaneUI.java
deleted file mode 100755
index 0e2a1bc..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsEditorPaneUI.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (c) 1997, 1998, 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.java.swing.plaf.windows;
-
-import javax.swing.plaf.*;
-import javax.swing.plaf.basic.*;
-import javax.swing.*;
-import javax.swing.text.Caret;
-
-
-/**
- * Windows rendition of the component.
- * <p>
- * <strong>Warning:</strong>
- * Serialized objects of this class will not be compatible with
- * future Swing releases.  The current serialization support is appropriate
- * for short term storage or RMI between applications running the same
- * version of Swing.  A future release of Swing will provide support for
- * long term persistence.
- */
-public class WindowsEditorPaneUI extends BasicEditorPaneUI
-{
-
-    /**
-     * Creates a UI for a JEditorPane.
-     *
-     * @param c the configurable text component
-     * @return the UI
-     */
-    public static ComponentUI createUI(JComponent c) {
-        return new WindowsEditorPaneUI();
-    }
-
-    /**
-     * Creates the object to use for a caret.  By default an
-     * instance of WindowsCaret is created.  This method
-     * can be redefined to provide something else that implements
-     * the InputPosition interface or a subclass of DefaultCaret.
-     *
-     * @return the caret object
-     */
-    protected Caret createCaret() {
-        return new WindowsTextUI.WindowsCaret();
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsFileChooserUI.java b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsFileChooserUI.java
deleted file mode 100755
index 2c7e16e..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsFileChooserUI.java
+++ /dev/null
@@ -1,1313 +0,0 @@
-/*
- * Copyright (c) 1997, 2009, 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.java.swing.plaf.windows;
-
-import javax.swing.*;
-import javax.swing.border.*;
-import javax.swing.filechooser.*;
-import javax.swing.event.*;
-import javax.swing.plaf.*;
-import javax.swing.plaf.basic.*;
-import java.awt.*;
-import java.awt.event.*;
-import java.awt.image.BufferedImage;
-import java.beans.*;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.util.*;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-
-import sun.awt.shell.ShellFolder;
-import sun.swing.*;
-
-import javax.accessibility.*;
-
-/**
- * Windows L&F implementation of a FileChooser.
- *
- * @author Jeff Dinkins
- */
-public class WindowsFileChooserUI extends BasicFileChooserUI {
-
-    // The following are private because the implementation of the
-    // Windows FileChooser L&F is not complete yet.
-
-    private JPanel centerPanel;
-
-    private JLabel lookInLabel;
-    private JComboBox directoryComboBox;
-    private DirectoryComboBoxModel directoryComboBoxModel;
-    private ActionListener directoryComboBoxAction = new DirectoryComboBoxAction();
-
-    private FilterComboBoxModel filterComboBoxModel;
-
-    private JTextField filenameTextField;
-    private FilePane filePane;
-    private WindowsPlacesBar placesBar;
-
-    private JButton approveButton;
-    private JButton cancelButton;
-
-    private JPanel buttonPanel;
-    private JPanel bottomPanel;
-
-    private JComboBox filterComboBox;
-
-    private static final Dimension hstrut10 = new Dimension(10, 1);
-
-    private static final Dimension vstrut4  = new Dimension(1, 4);
-    private static final Dimension vstrut6  = new Dimension(1, 6);
-    private static final Dimension vstrut8  = new Dimension(1, 8);
-
-    private static final Insets shrinkwrap = new Insets(0,0,0,0);
-
-    // Preferred and Minimum sizes for the dialog box
-    private static int PREF_WIDTH = 425;
-    private static int PREF_HEIGHT = 245;
-    private static Dimension PREF_SIZE = new Dimension(PREF_WIDTH, PREF_HEIGHT);
-
-    private static int MIN_WIDTH = 425;
-    private static int MIN_HEIGHT = 245;
-    private static Dimension MIN_SIZE = new Dimension(MIN_WIDTH, MIN_HEIGHT);
-
-    private static int LIST_PREF_WIDTH = 444;
-    private static int LIST_PREF_HEIGHT = 138;
-    private static Dimension LIST_PREF_SIZE = new Dimension(LIST_PREF_WIDTH, LIST_PREF_HEIGHT);
-
-    // Labels, mnemonics, and tooltips (oh my!)
-    private int    lookInLabelMnemonic = 0;
-    private String lookInLabelText = null;
-    private String saveInLabelText = null;
-
-    private int    fileNameLabelMnemonic = 0;
-    private String fileNameLabelText = null;
-    private int    folderNameLabelMnemonic = 0;
-    private String folderNameLabelText = null;
-
-    private int    filesOfTypeLabelMnemonic = 0;
-    private String filesOfTypeLabelText = null;
-
-    private String upFolderToolTipText = null;
-    private String upFolderAccessibleName = null;
-
-    private String newFolderToolTipText = null;
-    private String newFolderAccessibleName = null;
-
-    private String viewMenuButtonToolTipText = null;
-    private String viewMenuButtonAccessibleName = null;
-
-    private BasicFileView fileView = new WindowsFileView();
-
-    private JLabel fileNameLabel;
-
-    private void populateFileNameLabel() {
-        if (getFileChooser().getFileSelectionMode() == JFileChooser.DIRECTORIES_ONLY) {
-            fileNameLabel.setText(folderNameLabelText);
-            fileNameLabel.setDisplayedMnemonic(folderNameLabelMnemonic);
-        } else {
-            fileNameLabel.setText(fileNameLabelText);
-            fileNameLabel.setDisplayedMnemonic(fileNameLabelMnemonic);
-        }
-    }
-
-    //
-    // ComponentUI Interface Implementation methods
-    //
-    public static ComponentUI createUI(JComponent c) {
-        return new WindowsFileChooserUI((JFileChooser) c);
-    }
-
-    public WindowsFileChooserUI(JFileChooser filechooser) {
-        super(filechooser);
-    }
-
-    public void installUI(JComponent c) {
-        super.installUI(c);
-    }
-
-    public void uninstallComponents(JFileChooser fc) {
-        fc.removeAll();
-    }
-
-    private class WindowsFileChooserUIAccessor implements FilePane.FileChooserUIAccessor {
-        public JFileChooser getFileChooser() {
-            return WindowsFileChooserUI.this.getFileChooser();
-        }
-
-        public BasicDirectoryModel getModel() {
-            return WindowsFileChooserUI.this.getModel();
-        }
-
-        public JPanel createList() {
-            return WindowsFileChooserUI.this.createList(getFileChooser());
-        }
-
-        public JPanel createDetailsView() {
-            return WindowsFileChooserUI.this.createDetailsView(getFileChooser());
-        }
-
-        public boolean isDirectorySelected() {
-            return WindowsFileChooserUI.this.isDirectorySelected();
-        }
-
-        public File getDirectory() {
-            return WindowsFileChooserUI.this.getDirectory();
-        }
-
-        public Action getChangeToParentDirectoryAction() {
-            return WindowsFileChooserUI.this.getChangeToParentDirectoryAction();
-        }
-
-        public Action getApproveSelectionAction() {
-            return WindowsFileChooserUI.this.getApproveSelectionAction();
-        }
-
-        public Action getNewFolderAction() {
-            return WindowsFileChooserUI.this.getNewFolderAction();
-        }
-
-        public MouseListener createDoubleClickListener(JList list) {
-            return WindowsFileChooserUI.this.createDoubleClickListener(getFileChooser(),
-                                                                       list);
-        }
-
-        public ListSelectionListener createListSelectionListener() {
-            return WindowsFileChooserUI.this.createListSelectionListener(getFileChooser());
-        }
-    }
-
-    public void installComponents(JFileChooser fc) {
-        filePane = new FilePane(new WindowsFileChooserUIAccessor());
-        fc.addPropertyChangeListener(filePane);
-
-        FileSystemView fsv = fc.getFileSystemView();
-
-        fc.setBorder(new EmptyBorder(4, 10, 10, 10));
-        fc.setLayout(new BorderLayout(8, 8));
-
-        updateUseShellFolder();
-
-        // ********************************* //
-        // **** Construct the top panel **** //
-        // ********************************* //
-
-        // Directory manipulation buttons
-        JToolBar topPanel = new JToolBar();
-        topPanel.setFloatable(false);
-        topPanel.putClientProperty("JToolBar.isRollover", Boolean.TRUE);
-
-        // Add the top panel to the fileChooser
-        fc.add(topPanel, BorderLayout.NORTH);
-
-        // ComboBox Label
-        lookInLabel = new JLabel(lookInLabelText, JLabel.TRAILING) {
-            public Dimension getPreferredSize() {
-                return getMinimumSize();
-            }
-
-            public Dimension getMinimumSize() {
-                Dimension d = super.getPreferredSize();
-                if (placesBar != null) {
-                    d.width = Math.max(d.width, placesBar.getWidth());
-                }
-                return d;
-            }
-        };
-        lookInLabel.setDisplayedMnemonic(lookInLabelMnemonic);
-        lookInLabel.setAlignmentX(JComponent.LEFT_ALIGNMENT);
-        lookInLabel.setAlignmentY(JComponent.CENTER_ALIGNMENT);
-        topPanel.add(lookInLabel);
-        topPanel.add(Box.createRigidArea(new Dimension(8,0)));
-
-        // CurrentDir ComboBox
-        directoryComboBox = new JComboBox() {
-            public Dimension getMinimumSize() {
-                Dimension d = super.getMinimumSize();
-                d.width = 60;
-                return d;
-            }
-
-            public Dimension getPreferredSize() {
-                Dimension d = super.getPreferredSize();
-                // Must be small enough to not affect total width.
-                d.width = 150;
-                return d;
-            }
-        };
-        directoryComboBox.putClientProperty( "JComboBox.lightweightKeyboardNavigation", "Lightweight" );
-        lookInLabel.setLabelFor(directoryComboBox);
-        directoryComboBoxModel = createDirectoryComboBoxModel(fc);
-        directoryComboBox.setModel(directoryComboBoxModel);
-        directoryComboBox.addActionListener(directoryComboBoxAction);
-        directoryComboBox.setRenderer(createDirectoryComboBoxRenderer(fc));
-        directoryComboBox.setAlignmentX(JComponent.LEFT_ALIGNMENT);
-        directoryComboBox.setAlignmentY(JComponent.CENTER_ALIGNMENT);
-        directoryComboBox.setMaximumRowCount(8);
-
-        topPanel.add(directoryComboBox);
-        topPanel.add(Box.createRigidArea(hstrut10));
-
-        // Up Button
-        JButton upFolderButton = createToolButton(getChangeToParentDirectoryAction(), upFolderIcon,
-            upFolderToolTipText, upFolderAccessibleName);
-        topPanel.add(upFolderButton);
-
-        // New Directory Button
-        if (!UIManager.getBoolean("FileChooser.readOnly")) {
-            JButton newFolderButton = createToolButton(filePane.getNewFolderAction(), newFolderIcon,
-                newFolderToolTipText, newFolderAccessibleName);
-            topPanel.add(newFolderButton);
-        }
-
-        // View button group
-        ButtonGroup viewButtonGroup = new ButtonGroup();
-
-        // Popup Menu
-        final JPopupMenu viewTypePopupMenu = new JPopupMenu();
-
-        final JRadioButtonMenuItem listViewMenuItem = new JRadioButtonMenuItem(
-                filePane.getViewTypeAction(FilePane.VIEWTYPE_LIST));
-        listViewMenuItem.setSelected(filePane.getViewType() == FilePane.VIEWTYPE_LIST);
-        viewTypePopupMenu.add(listViewMenuItem);
-        viewButtonGroup.add(listViewMenuItem);
-
-        final JRadioButtonMenuItem detailsViewMenuItem = new JRadioButtonMenuItem(
-                filePane.getViewTypeAction(FilePane.VIEWTYPE_DETAILS));
-        detailsViewMenuItem.setSelected(filePane.getViewType() == FilePane.VIEWTYPE_DETAILS);
-        viewTypePopupMenu.add(detailsViewMenuItem);
-        viewButtonGroup.add(detailsViewMenuItem);
-
-        // Create icon for viewMenuButton
-        BufferedImage image = new BufferedImage(viewMenuIcon.getIconWidth() + 7, viewMenuIcon.getIconHeight(),
-                BufferedImage.TYPE_INT_ARGB);
-        Graphics graphics = image.getGraphics();
-        viewMenuIcon.paintIcon(filePane, graphics, 0, 0);
-        int x = image.getWidth() - 5;
-        int y = image.getHeight() / 2 - 1;
-        graphics.setColor(Color.BLACK);
-        graphics.fillPolygon(new int[]{x, x + 5, x + 2}, new int[]{y, y, y + 3}, 3);
-
-        // Details Button
-        final JButton viewMenuButton = createToolButton(null, new ImageIcon(image), viewMenuButtonToolTipText,
-                viewMenuButtonAccessibleName);
-
-        viewMenuButton.addMouseListener(new MouseAdapter() {
-            public void mousePressed(MouseEvent e) {
-                if (SwingUtilities.isLeftMouseButton(e) && !viewMenuButton.isSelected()) {
-                    viewMenuButton.setSelected(true);
-
-                    viewTypePopupMenu.show(viewMenuButton, 0, viewMenuButton.getHeight());
-                }
-            }
-        });
-        viewMenuButton.addKeyListener(new KeyAdapter() {
-            public void keyPressed(KeyEvent e) {
-                // Forbid keyboard actions if the button is not in rollover state
-                if (e.getKeyCode() == KeyEvent.VK_SPACE && viewMenuButton.getModel().isRollover()) {
-                    viewMenuButton.setSelected(true);
-
-                    viewTypePopupMenu.show(viewMenuButton, 0, viewMenuButton.getHeight());
-                }
-            }
-        });
-        viewTypePopupMenu.addPopupMenuListener(new PopupMenuListener() {
-            public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
-            }
-
-            public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
-                SwingUtilities.invokeLater(new Runnable() {
-                    public void run() {
-                        viewMenuButton.setSelected(false);
-                    }
-                });
-            }
-
-            public void popupMenuCanceled(PopupMenuEvent e) {
-            }
-        });
-
-        topPanel.add(viewMenuButton);
-
-        topPanel.add(Box.createRigidArea(new Dimension(80, 0)));
-
-        filePane.addPropertyChangeListener(new PropertyChangeListener() {
-            public void propertyChange(PropertyChangeEvent e) {
-                if ("viewType".equals(e.getPropertyName())) {
-                    switch (filePane.getViewType()) {
-                        case FilePane.VIEWTYPE_LIST:
-                            listViewMenuItem.setSelected(true);
-                            break;
-
-                        case FilePane.VIEWTYPE_DETAILS:
-                            detailsViewMenuItem.setSelected(true);
-                            break;
-                    }
-                }
-            }
-        });
-
-        // ************************************** //
-        // ******* Add the directory pane ******* //
-        // ************************************** //
-        centerPanel = new JPanel(new BorderLayout());
-        centerPanel.add(getAccessoryPanel(), BorderLayout.AFTER_LINE_ENDS);
-        JComponent accessory = fc.getAccessory();
-        if(accessory != null) {
-            getAccessoryPanel().add(accessory);
-        }
-        filePane.setPreferredSize(LIST_PREF_SIZE);
-        centerPanel.add(filePane, BorderLayout.CENTER);
-        fc.add(centerPanel, BorderLayout.CENTER);
-
-        // ********************************** //
-        // **** Construct the bottom panel ** //
-        // ********************************** //
-        getBottomPanel().setLayout(new BoxLayout(getBottomPanel(), BoxLayout.LINE_AXIS));
-
-        // Add the bottom panel to file chooser
-        centerPanel.add(getBottomPanel(), BorderLayout.SOUTH);
-
-        // labels
-        JPanel labelPanel = new JPanel();
-        labelPanel.setLayout(new BoxLayout(labelPanel, BoxLayout.PAGE_AXIS));
-        labelPanel.add(Box.createRigidArea(vstrut4));
-
-        fileNameLabel = new JLabel();
-        populateFileNameLabel();
-        fileNameLabel.setAlignmentY(0);
-        labelPanel.add(fileNameLabel);
-
-        labelPanel.add(Box.createRigidArea(new Dimension(1,12)));
-
-        JLabel ftl = new JLabel(filesOfTypeLabelText);
-        ftl.setDisplayedMnemonic(filesOfTypeLabelMnemonic);
-        labelPanel.add(ftl);
-
-        getBottomPanel().add(labelPanel);
-        getBottomPanel().add(Box.createRigidArea(new Dimension(15, 0)));
-
-        // file entry and filters
-        JPanel fileAndFilterPanel = new JPanel();
-        fileAndFilterPanel.add(Box.createRigidArea(vstrut8));
-        fileAndFilterPanel.setLayout(new BoxLayout(fileAndFilterPanel, BoxLayout.Y_AXIS));
-
-
-        filenameTextField = new JTextField(35) {
-            public Dimension getMaximumSize() {
-                return new Dimension(Short.MAX_VALUE, super.getPreferredSize().height);
-            }
-        };
-
-        fileNameLabel.setLabelFor(filenameTextField);
-        filenameTextField.addFocusListener(
-            new FocusAdapter() {
-                public void focusGained(FocusEvent e) {
-                    if (!getFileChooser().isMultiSelectionEnabled()) {
-                        filePane.clearSelection();
-                    }
-                }
-            }
-        );
-
-        if (fc.isMultiSelectionEnabled()) {
-            setFileName(fileNameString(fc.getSelectedFiles()));
-        } else {
-            setFileName(fileNameString(fc.getSelectedFile()));
-        }
-
-        fileAndFilterPanel.add(filenameTextField);
-        fileAndFilterPanel.add(Box.createRigidArea(vstrut8));
-
-        filterComboBoxModel = createFilterComboBoxModel();
-        fc.addPropertyChangeListener(filterComboBoxModel);
-        filterComboBox = new JComboBox(filterComboBoxModel);
-        ftl.setLabelFor(filterComboBox);
-        filterComboBox.setRenderer(createFilterComboBoxRenderer());
-        fileAndFilterPanel.add(filterComboBox);
-
-        getBottomPanel().add(fileAndFilterPanel);
-        getBottomPanel().add(Box.createRigidArea(new Dimension(30, 0)));
-
-        // buttons
-        getButtonPanel().setLayout(new BoxLayout(getButtonPanel(), BoxLayout.Y_AXIS));
-
-        approveButton = new JButton(getApproveButtonText(fc)) {
-            public Dimension getMaximumSize() {
-                return approveButton.getPreferredSize().width > cancelButton.getPreferredSize().width ?
-                       approveButton.getPreferredSize() : cancelButton.getPreferredSize();
-            }
-        };
-        Insets buttonMargin = approveButton.getMargin();
-        buttonMargin = new InsetsUIResource(buttonMargin.top,    buttonMargin.left  + 5,
-                                            buttonMargin.bottom, buttonMargin.right + 5);
-        approveButton.setMargin(buttonMargin);
-        approveButton.setMnemonic(getApproveButtonMnemonic(fc));
-        approveButton.addActionListener(getApproveSelectionAction());
-        approveButton.setToolTipText(getApproveButtonToolTipText(fc));
-        getButtonPanel().add(Box.createRigidArea(vstrut6));
-        getButtonPanel().add(approveButton);
-        getButtonPanel().add(Box.createRigidArea(vstrut4));
-
-        cancelButton = new JButton(cancelButtonText) {
-            public Dimension getMaximumSize() {
-                return approveButton.getPreferredSize().width > cancelButton.getPreferredSize().width ?
-                       approveButton.getPreferredSize() : cancelButton.getPreferredSize();
-            }
-        };
-        cancelButton.setMargin(buttonMargin);
-        cancelButton.setToolTipText(cancelButtonToolTipText);
-        cancelButton.addActionListener(getCancelSelectionAction());
-        getButtonPanel().add(cancelButton);
-
-        if(fc.getControlButtonsAreShown()) {
-            addControlButtons();
-        }
-    }
-
-    private void updateUseShellFolder() {
-        // Decide whether to use the ShellFolder class to populate shortcut
-        // panel and combobox.
-        JFileChooser fc = getFileChooser();
-
-        if (FilePane.usesShellFolder(fc)) {
-            if (placesBar == null && !UIManager.getBoolean("FileChooser.noPlacesBar")) {
-                placesBar = new WindowsPlacesBar(fc, XPStyle.getXP() != null);
-                fc.add(placesBar, BorderLayout.BEFORE_LINE_BEGINS);
-                fc.addPropertyChangeListener(placesBar);
-            }
-        } else {
-            if (placesBar != null) {
-                fc.remove(placesBar);
-                fc.removePropertyChangeListener(placesBar);
-                placesBar = null;
-            }
-        }
-    }
-
-    protected JPanel getButtonPanel() {
-        if(buttonPanel == null) {
-            buttonPanel = new JPanel();
-        }
-        return buttonPanel;
-    }
-
-    protected JPanel getBottomPanel() {
-        if(bottomPanel == null) {
-            bottomPanel = new JPanel();
-        }
-        return bottomPanel;
-    }
-
-    protected void installStrings(JFileChooser fc) {
-        super.installStrings(fc);
-
-        Locale l = fc.getLocale();
-
-        lookInLabelMnemonic = getMnemonic("FileChooser.lookInLabelMnemonic", l);
-        lookInLabelText = UIManager.getString("FileChooser.lookInLabelText",l);
-        saveInLabelText = UIManager.getString("FileChooser.saveInLabelText",l);
-
-        fileNameLabelMnemonic = getMnemonic("FileChooser.fileNameLabelMnemonic", l);
-        fileNameLabelText = UIManager.getString("FileChooser.fileNameLabelText",l);
-        folderNameLabelMnemonic = getMnemonic("FileChooser.folderNameLabelMnemonic", l);
-        folderNameLabelText = UIManager.getString("FileChooser.folderNameLabelText",l);
-
-        filesOfTypeLabelMnemonic = getMnemonic("FileChooser.filesOfTypeLabelMnemonic", l);
-        filesOfTypeLabelText = UIManager.getString("FileChooser.filesOfTypeLabelText",l);
-
-        upFolderToolTipText =  UIManager.getString("FileChooser.upFolderToolTipText",l);
-        upFolderAccessibleName = UIManager.getString("FileChooser.upFolderAccessibleName",l);
-
-        newFolderToolTipText = UIManager.getString("FileChooser.newFolderToolTipText",l);
-        newFolderAccessibleName = UIManager.getString("FileChooser.newFolderAccessibleName",l);
-
-        viewMenuButtonToolTipText = UIManager.getString("FileChooser.viewMenuButtonToolTipText",l);
-        viewMenuButtonAccessibleName = UIManager.getString("FileChooser.viewMenuButtonAccessibleName",l);
-    }
-
-    private Integer getMnemonic(String key, Locale l) {
-        return SwingUtilities2.getUIDefaultsInt(key, l);
-    }
-
-    protected void installListeners(JFileChooser fc) {
-        super.installListeners(fc);
-        ActionMap actionMap = getActionMap();
-        SwingUtilities.replaceUIActionMap(fc, actionMap);
-    }
-
-    protected ActionMap getActionMap() {
-        return createActionMap();
-    }
-
-    protected ActionMap createActionMap() {
-        ActionMap map = new ActionMapUIResource();
-        FilePane.addActionsToMap(map, filePane.getActions());
-        return map;
-    }
-
-    protected JPanel createList(JFileChooser fc) {
-        return filePane.createList();
-    }
-
-    protected JPanel createDetailsView(JFileChooser fc) {
-        return filePane.createDetailsView();
-    }
-
-    /**
-     * Creates a selection listener for the list of files and directories.
-     *
-     * @param fc a <code>JFileChooser</code>
-     * @return a <code>ListSelectionListener</code>
-     */
-    public ListSelectionListener createListSelectionListener(JFileChooser fc) {
-        return super.createListSelectionListener(fc);
-    }
-
-    // Obsolete class, not used in this version.
-    protected class WindowsNewFolderAction extends NewFolderAction {
-    }
-
-    // Obsolete class, not used in this version.
-    protected class SingleClickListener extends MouseAdapter {
-    }
-
-    // Obsolete class, not used in this version.
-    protected class FileRenderer extends DefaultListCellRenderer  {
-    }
-
-    public void uninstallUI(JComponent c) {
-        // Remove listeners
-        c.removePropertyChangeListener(filterComboBoxModel);
-        c.removePropertyChangeListener(filePane);
-        if (placesBar != null) {
-            c.removePropertyChangeListener(placesBar);
-        }
-        cancelButton.removeActionListener(getCancelSelectionAction());
-        approveButton.removeActionListener(getApproveSelectionAction());
-        filenameTextField.removeActionListener(getApproveSelectionAction());
-
-        if (filePane != null) {
-            filePane.uninstallUI();
-            filePane = null;
-        }
-
-        super.uninstallUI(c);
-    }
-
-    /**
-     * Returns the preferred size of the specified
-     * <code>JFileChooser</code>.
-     * The preferred size is at least as large,
-     * in both height and width,
-     * as the preferred size recommended
-     * by the file chooser's layout manager.
-     *
-     * @param c  a <code>JFileChooser</code>
-     * @return   a <code>Dimension</code> specifying the preferred
-     *           width and height of the file chooser
-     */
-    public Dimension getPreferredSize(JComponent c) {
-        int prefWidth = PREF_SIZE.width;
-        Dimension d = c.getLayout().preferredLayoutSize(c);
-        if (d != null) {
-            return new Dimension(d.width < prefWidth ? prefWidth : d.width,
-                                 d.height < PREF_SIZE.height ? PREF_SIZE.height : d.height);
-        } else {
-            return new Dimension(prefWidth, PREF_SIZE.height);
-        }
-    }
-
-    /**
-     * Returns the minimum size of the <code>JFileChooser</code>.
-     *
-     * @param c  a <code>JFileChooser</code>
-     * @return   a <code>Dimension</code> specifying the minimum
-     *           width and height of the file chooser
-     */
-    public Dimension getMinimumSize(JComponent c) {
-        return MIN_SIZE;
-    }
-
-    /**
-     * Returns the maximum size of the <code>JFileChooser</code>.
-     *
-     * @param c  a <code>JFileChooser</code>
-     * @return   a <code>Dimension</code> specifying the maximum
-     *           width and height of the file chooser
-     */
-    public Dimension getMaximumSize(JComponent c) {
-        return new Dimension(Integer.MAX_VALUE, Integer.MAX_VALUE);
-    }
-
-    private String fileNameString(File file) {
-        if (file == null) {
-            return null;
-        } else {
-            JFileChooser fc = getFileChooser();
-            if ((fc.isDirectorySelectionEnabled() && !fc.isFileSelectionEnabled()) ||
-                (fc.isDirectorySelectionEnabled() && fc.isFileSelectionEnabled() && fc.getFileSystemView().isFileSystemRoot(file))){
-                return file.getPath();
-            } else {
-                return file.getName();
-            }
-        }
-    }
-
-    private String fileNameString(File[] files) {
-        StringBuffer buf = new StringBuffer();
-        for (int i = 0; files != null && i < files.length; i++) {
-            if (i > 0) {
-                buf.append(" ");
-            }
-            if (files.length > 1) {
-                buf.append("\"");
-            }
-            buf.append(fileNameString(files[i]));
-            if (files.length > 1) {
-                buf.append("\"");
-            }
-        }
-        return buf.toString();
-    }
-
-    /* The following methods are used by the PropertyChange Listener */
-
-    private void doSelectedFileChanged(PropertyChangeEvent e) {
-        File f = (File) e.getNewValue();
-        JFileChooser fc = getFileChooser();
-        if (f != null
-            && ((fc.isFileSelectionEnabled() && !f.isDirectory())
-                || (f.isDirectory() && fc.isDirectorySelectionEnabled()))) {
-
-            setFileName(fileNameString(f));
-        }
-    }
-
-    private void doSelectedFilesChanged(PropertyChangeEvent e) {
-        File[] files = (File[]) e.getNewValue();
-        JFileChooser fc = getFileChooser();
-        if (files != null
-            && files.length > 0
-            && (files.length > 1 || fc.isDirectorySelectionEnabled() || !files[0].isDirectory())) {
-            setFileName(fileNameString(files));
-        }
-    }
-
-    private void doDirectoryChanged(PropertyChangeEvent e) {
-        JFileChooser fc = getFileChooser();
-        FileSystemView fsv = fc.getFileSystemView();
-
-        clearIconCache();
-        File currentDirectory = fc.getCurrentDirectory();
-        if(currentDirectory != null) {
-            directoryComboBoxModel.addItem(currentDirectory);
-
-            if (fc.isDirectorySelectionEnabled() && !fc.isFileSelectionEnabled()) {
-                if (fsv.isFileSystem(currentDirectory)) {
-                    setFileName(currentDirectory.getPath());
-                } else {
-                    setFileName(null);
-                }
-            }
-        }
-    }
-
-    private void doFilterChanged(PropertyChangeEvent e) {
-        clearIconCache();
-    }
-
-    private void doFileSelectionModeChanged(PropertyChangeEvent e) {
-        if (fileNameLabel != null) {
-            populateFileNameLabel();
-        }
-        clearIconCache();
-
-        JFileChooser fc = getFileChooser();
-        File currentDirectory = fc.getCurrentDirectory();
-        if (currentDirectory != null
-            && fc.isDirectorySelectionEnabled()
-            && !fc.isFileSelectionEnabled()
-            && fc.getFileSystemView().isFileSystem(currentDirectory)) {
-
-            setFileName(currentDirectory.getPath());
-        } else {
-            setFileName(null);
-        }
-    }
-
-    private void doAccessoryChanged(PropertyChangeEvent e) {
-        if(getAccessoryPanel() != null) {
-            if(e.getOldValue() != null) {
-                getAccessoryPanel().remove((JComponent) e.getOldValue());
-            }
-            JComponent accessory = (JComponent) e.getNewValue();
-            if(accessory != null) {
-                getAccessoryPanel().add(accessory, BorderLayout.CENTER);
-            }
-        }
-    }
-
-    private void doApproveButtonTextChanged(PropertyChangeEvent e) {
-        JFileChooser chooser = getFileChooser();
-        approveButton.setText(getApproveButtonText(chooser));
-        approveButton.setToolTipText(getApproveButtonToolTipText(chooser));
-        approveButton.setMnemonic(getApproveButtonMnemonic(chooser));
-    }
-
-    private void doDialogTypeChanged(PropertyChangeEvent e) {
-        JFileChooser chooser = getFileChooser();
-        approveButton.setText(getApproveButtonText(chooser));
-        approveButton.setToolTipText(getApproveButtonToolTipText(chooser));
-        approveButton.setMnemonic(getApproveButtonMnemonic(chooser));
-        if (chooser.getDialogType() == JFileChooser.SAVE_DIALOG) {
-            lookInLabel.setText(saveInLabelText);
-        } else {
-            lookInLabel.setText(lookInLabelText);
-        }
-    }
-
-    private void doApproveButtonMnemonicChanged(PropertyChangeEvent e) {
-        approveButton.setMnemonic(getApproveButtonMnemonic(getFileChooser()));
-    }
-
-    private void doControlButtonsChanged(PropertyChangeEvent e) {
-        if(getFileChooser().getControlButtonsAreShown()) {
-            addControlButtons();
-        } else {
-            removeControlButtons();
-        }
-    }
-
-    /*
-     * Listen for filechooser property changes, such as
-     * the selected file changing, or the type of the dialog changing.
-     */
-    public PropertyChangeListener createPropertyChangeListener(JFileChooser fc) {
-        return new PropertyChangeListener() {
-            public void propertyChange(PropertyChangeEvent e) {
-                String s = e.getPropertyName();
-                if(s.equals(JFileChooser.SELECTED_FILE_CHANGED_PROPERTY)) {
-                    doSelectedFileChanged(e);
-                } else if (s.equals(JFileChooser.SELECTED_FILES_CHANGED_PROPERTY)) {
-                    doSelectedFilesChanged(e);
-                } else if(s.equals(JFileChooser.DIRECTORY_CHANGED_PROPERTY)) {
-                    doDirectoryChanged(e);
-                } else if(s.equals(JFileChooser.FILE_FILTER_CHANGED_PROPERTY)) {
-                    doFilterChanged(e);
-                } else if(s.equals(JFileChooser.FILE_SELECTION_MODE_CHANGED_PROPERTY)) {
-                    doFileSelectionModeChanged(e);
-                } else if(s.equals(JFileChooser.ACCESSORY_CHANGED_PROPERTY)) {
-                    doAccessoryChanged(e);
-                } else if (s.equals(JFileChooser.APPROVE_BUTTON_TEXT_CHANGED_PROPERTY) ||
-                           s.equals(JFileChooser.APPROVE_BUTTON_TOOL_TIP_TEXT_CHANGED_PROPERTY)) {
-                    doApproveButtonTextChanged(e);
-                } else if(s.equals(JFileChooser.DIALOG_TYPE_CHANGED_PROPERTY)) {
-                    doDialogTypeChanged(e);
-                } else if(s.equals(JFileChooser.APPROVE_BUTTON_MNEMONIC_CHANGED_PROPERTY)) {
-                    doApproveButtonMnemonicChanged(e);
-                } else if(s.equals(JFileChooser.CONTROL_BUTTONS_ARE_SHOWN_CHANGED_PROPERTY)) {
-                    doControlButtonsChanged(e);
-                } else if (s == "FileChooser.useShellFolder") {
-                    updateUseShellFolder();
-                    doDirectoryChanged(e);
-                } else if (s.equals("componentOrientation")) {
-                    ComponentOrientation o = (ComponentOrientation)e.getNewValue();
-                    JFileChooser cc = (JFileChooser)e.getSource();
-                    if (o != e.getOldValue()) {
-                        cc.applyComponentOrientation(o);
-                    }
-                } else if (s.equals("ancestor")) {
-                    if (e.getOldValue() == null && e.getNewValue() != null) {
-                        // Ancestor was added, set initial focus
-                        filenameTextField.selectAll();
-                        filenameTextField.requestFocus();
-                    }
-                }
-            }
-        };
-    }
-
-
-    protected void removeControlButtons() {
-        getBottomPanel().remove(getButtonPanel());
-    }
-
-    protected void addControlButtons() {
-        getBottomPanel().add(getButtonPanel());
-    }
-
-    public void ensureFileIsVisible(JFileChooser fc, File f) {
-        filePane.ensureFileIsVisible(fc, f);
-    }
-
-    public void rescanCurrentDirectory(JFileChooser fc) {
-        filePane.rescanCurrentDirectory();
-    }
-
-    public String getFileName() {
-        if(filenameTextField != null) {
-            return filenameTextField.getText();
-        } else {
-            return null;
-        }
-    }
-
-    public void setFileName(String filename) {
-        if(filenameTextField != null) {
-            filenameTextField.setText(filename);
-        }
-    }
-
-    /**
-     * Property to remember whether a directory is currently selected in the UI.
-     * This is normally called by the UI on a selection event.
-     *
-     * @param directorySelected if a directory is currently selected.
-     * @since 1.4
-     */
-    protected void setDirectorySelected(boolean directorySelected) {
-        super.setDirectorySelected(directorySelected);
-        JFileChooser chooser = getFileChooser();
-        if(directorySelected) {
-            approveButton.setText(directoryOpenButtonText);
-            approveButton.setToolTipText(directoryOpenButtonToolTipText);
-            approveButton.setMnemonic(directoryOpenButtonMnemonic);
-        } else {
-            approveButton.setText(getApproveButtonText(chooser));
-            approveButton.setToolTipText(getApproveButtonToolTipText(chooser));
-            approveButton.setMnemonic(getApproveButtonMnemonic(chooser));
-        }
-    }
-
-    public String getDirectoryName() {
-        // PENDING(jeff) - get the name from the directory combobox
-        return null;
-    }
-
-    public void setDirectoryName(String dirname) {
-        // PENDING(jeff) - set the name in the directory combobox
-    }
-
-    protected DirectoryComboBoxRenderer createDirectoryComboBoxRenderer(JFileChooser fc) {
-        return new DirectoryComboBoxRenderer();
-    }
-
-    private static JButton createToolButton(Action a, Icon defaultIcon, String toolTipText, String accessibleName) {
-        final JButton result = new JButton(a);
-
-        result.setText(null);
-        result.setIcon(defaultIcon);
-        result.setToolTipText(toolTipText);
-        result.setRequestFocusEnabled(false);
-        result.putClientProperty(AccessibleContext.ACCESSIBLE_NAME_PROPERTY, accessibleName);
-        result.putClientProperty(WindowsLookAndFeel.HI_RES_DISABLED_ICON_CLIENT_KEY, Boolean.TRUE);
-        result.setAlignmentX(JComponent.LEFT_ALIGNMENT);
-        result.setAlignmentY(JComponent.CENTER_ALIGNMENT);
-        result.setMargin(shrinkwrap);
-        result.setFocusPainted(false);
-
-        result.setModel(new DefaultButtonModel() {
-            public void setPressed(boolean b) {
-                // Forbid keyboard actions if the button is not in rollover state
-                if (!b || isRollover()) {
-                    super.setPressed(b);
-                }
-            }
-
-            public void setRollover(boolean b) {
-                if (b && !isRollover()) {
-                    // Reset other buttons
-                    for (Component component : result.getParent().getComponents()) {
-                        if (component instanceof JButton && component != result) {
-                            ((JButton) component).getModel().setRollover(false);
-                        }
-                    }
-                }
-
-                super.setRollover(b);
-            }
-
-            public void setSelected(boolean b) {
-                super.setSelected(b);
-
-                if (b) {
-                    stateMask |= PRESSED | ARMED;
-                } else {
-                    stateMask &= ~(PRESSED | ARMED);
-                }
-            }
-        });
-
-        result.addFocusListener(new FocusAdapter() {
-            public void focusGained(FocusEvent e) {
-                result.getModel().setRollover(true);
-            }
-
-            public void focusLost(FocusEvent e) {
-                result.getModel().setRollover(false);
-            }
-        });
-
-        return result;
-    }
-
-    //
-    // Renderer for DirectoryComboBox
-    //
-    class DirectoryComboBoxRenderer extends DefaultListCellRenderer  {
-        IndentIcon ii = new IndentIcon();
-        public Component getListCellRendererComponent(JList list, Object value,
-                                                      int index, boolean isSelected,
-                                                      boolean cellHasFocus) {
-
-            super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
-
-            if (value == null) {
-                setText("");
-                return this;
-            }
-            File directory = (File)value;
-            setText(getFileChooser().getName(directory));
-            Icon icon = getFileChooser().getIcon(directory);
-            ii.icon = icon;
-            ii.depth = directoryComboBoxModel.getDepth(index);
-            setIcon(ii);
-
-            return this;
-        }
-    }
-
-    final static int space = 10;
-    class IndentIcon implements Icon {
-
-        Icon icon = null;
-        int depth = 0;
-
-        public void paintIcon(Component c, Graphics g, int x, int y) {
-            if (c.getComponentOrientation().isLeftToRight()) {
-                icon.paintIcon(c, g, x+depth*space, y);
-            } else {
-                icon.paintIcon(c, g, x, y);
-            }
-        }
-
-        public int getIconWidth() {
-            return icon.getIconWidth() + depth*space;
-        }
-
-        public int getIconHeight() {
-            return icon.getIconHeight();
-        }
-
-    }
-
-    //
-    // DataModel for DirectoryComboxbox
-    //
-    protected DirectoryComboBoxModel createDirectoryComboBoxModel(JFileChooser fc) {
-        return new DirectoryComboBoxModel();
-    }
-
-    /**
-     * Data model for a type-face selection combo-box.
-     */
-    protected class DirectoryComboBoxModel extends AbstractListModel implements ComboBoxModel {
-        Vector<File> directories = new Vector<File>();
-        int[] depths = null;
-        File selectedDirectory = null;
-        JFileChooser chooser = getFileChooser();
-        FileSystemView fsv = chooser.getFileSystemView();
-
-        public DirectoryComboBoxModel() {
-            // Add the current directory to the model, and make it the
-            // selectedDirectory
-            File dir = getFileChooser().getCurrentDirectory();
-            if(dir != null) {
-                addItem(dir);
-            }
-        }
-
-        /**
-         * Adds the directory to the model and sets it to be selected,
-         * additionally clears out the previous selected directory and
-         * the paths leading up to it, if any.
-         */
-        private void addItem(File directory) {
-
-            if(directory == null) {
-                return;
-            }
-
-            boolean useShellFolder = FilePane.usesShellFolder(chooser);
-
-            directories.clear();
-
-            File[] baseFolders;
-            if (useShellFolder) {
-                baseFolders = AccessController.doPrivileged(new PrivilegedAction<File[]>() {
-                    public File[] run() {
-                        return (File[]) ShellFolder.get("fileChooserComboBoxFolders");
-                    }
-                });
-            } else {
-                baseFolders = fsv.getRoots();
-            }
-            directories.addAll(Arrays.asList(baseFolders));
-
-            // Get the canonical (full) path. This has the side
-            // benefit of removing extraneous chars from the path,
-            // for example /foo/bar/ becomes /foo/bar
-            File canonical;
-            try {
-                canonical = directory.getCanonicalFile();
-            } catch (IOException e) {
-                // Maybe drive is not ready. Can't abort here.
-                canonical = directory;
-            }
-
-            // create File instances of each directory leading up to the top
-            try {
-                File sf = useShellFolder ? ShellFolder.getShellFolder(canonical)
-                                         : canonical;
-                File f = sf;
-                Vector<File> path = new Vector<File>(10);
-                do {
-                    path.addElement(f);
-                } while ((f = f.getParentFile()) != null);
-
-                int pathCount = path.size();
-                // Insert chain at appropriate place in vector
-                for (int i = 0; i < pathCount; i++) {
-                    f = path.get(i);
-                    if (directories.contains(f)) {
-                        int topIndex = directories.indexOf(f);
-                        for (int j = i-1; j >= 0; j--) {
-                            directories.insertElementAt(path.get(j), topIndex+i-j);
-                        }
-                        break;
-                    }
-                }
-                calculateDepths();
-                setSelectedItem(sf);
-            } catch (FileNotFoundException ex) {
-                calculateDepths();
-            }
-        }
-
-        private void calculateDepths() {
-            depths = new int[directories.size()];
-            for (int i = 0; i < depths.length; i++) {
-                File dir = directories.get(i);
-                File parent = dir.getParentFile();
-                depths[i] = 0;
-                if (parent != null) {
-                    for (int j = i-1; j >= 0; j--) {
-                        if (parent.equals(directories.get(j))) {
-                            depths[i] = depths[j] + 1;
-                            break;
-                        }
-                    }
-                }
-            }
-        }
-
-        public int getDepth(int i) {
-            return (depths != null && i >= 0 && i < depths.length) ? depths[i] : 0;
-        }
-
-        public void setSelectedItem(Object selectedDirectory) {
-            this.selectedDirectory = (File)selectedDirectory;
-            fireContentsChanged(this, -1, -1);
-        }
-
-        public Object getSelectedItem() {
-            return selectedDirectory;
-        }
-
-        public int getSize() {
-            return directories.size();
-        }
-
-        public Object getElementAt(int index) {
-            return directories.elementAt(index);
-        }
-    }
-
-    //
-    // Renderer for Types ComboBox
-    //
-    protected FilterComboBoxRenderer createFilterComboBoxRenderer() {
-        return new FilterComboBoxRenderer();
-    }
-
-    /**
-     * Render different type sizes and styles.
-     */
-    public class FilterComboBoxRenderer extends DefaultListCellRenderer {
-        public Component getListCellRendererComponent(JList list,
-            Object value, int index, boolean isSelected,
-            boolean cellHasFocus) {
-
-            super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
-
-            if (value != null && value instanceof FileFilter) {
-                setText(((FileFilter)value).getDescription());
-            }
-
-            return this;
-        }
-    }
-
-    //
-    // DataModel for Types Comboxbox
-    //
-    protected FilterComboBoxModel createFilterComboBoxModel() {
-        return new FilterComboBoxModel();
-    }
-
-    /**
-     * Data model for a type-face selection combo-box.
-     */
-    protected class FilterComboBoxModel extends AbstractListModel implements ComboBoxModel, PropertyChangeListener {
-        protected FileFilter[] filters;
-        protected FilterComboBoxModel() {
-            super();
-            filters = getFileChooser().getChoosableFileFilters();
-        }
-
-        public void propertyChange(PropertyChangeEvent e) {
-            String prop = e.getPropertyName();
-            if(prop == JFileChooser.CHOOSABLE_FILE_FILTER_CHANGED_PROPERTY) {
-                filters = (FileFilter[]) e.getNewValue();
-                fireContentsChanged(this, -1, -1);
-            } else if (prop == JFileChooser.FILE_FILTER_CHANGED_PROPERTY) {
-                fireContentsChanged(this, -1, -1);
-            }
-        }
-
-        public void setSelectedItem(Object filter) {
-            if(filter != null) {
-                getFileChooser().setFileFilter((FileFilter) filter);
-                fireContentsChanged(this, -1, -1);
-            }
-        }
-
-        public Object getSelectedItem() {
-            // Ensure that the current filter is in the list.
-            // NOTE: we shouldnt' have to do this, since JFileChooser adds
-            // the filter to the choosable filters list when the filter
-            // is set. Lets be paranoid just in case someone overrides
-            // setFileFilter in JFileChooser.
-            FileFilter currentFilter = getFileChooser().getFileFilter();
-            boolean found = false;
-            if(currentFilter != null) {
-                for (FileFilter filter : filters) {
-                    if (filter == currentFilter) {
-                        found = true;
-                    }
-                }
-                if(found == false) {
-                    getFileChooser().addChoosableFileFilter(currentFilter);
-                }
-            }
-            return getFileChooser().getFileFilter();
-        }
-
-        public int getSize() {
-            if(filters != null) {
-                return filters.length;
-            } else {
-                return 0;
-            }
-        }
-
-        public Object getElementAt(int index) {
-            if(index > getSize() - 1) {
-                // This shouldn't happen. Try to recover gracefully.
-                return getFileChooser().getFileFilter();
-            }
-            if(filters != null) {
-                return filters[index];
-            } else {
-                return null;
-            }
-        }
-    }
-
-    public void valueChanged(ListSelectionEvent e) {
-        JFileChooser fc = getFileChooser();
-        File f = fc.getSelectedFile();
-        if (!e.getValueIsAdjusting() && f != null && !getFileChooser().isTraversable(f)) {
-            setFileName(fileNameString(f));
-        }
-    }
-
-    /**
-     * Acts when DirectoryComboBox has changed the selected item.
-     */
-    protected class DirectoryComboBoxAction implements ActionListener {
-
-
-
-
-        public void actionPerformed(ActionEvent e) {
-            File f = (File)directoryComboBox.getSelectedItem();
-            getFileChooser().setCurrentDirectory(f);
-        }
-    }
-
-    protected JButton getApproveButton(JFileChooser fc) {
-        return approveButton;
-    }
-
-    public FileView getFileView(JFileChooser fc) {
-        return fileView;
-    }
-
-    // ***********************
-    // * FileView operations *
-    // ***********************
-    protected class WindowsFileView extends BasicFileView {
-        /* FileView type descriptions */
-
-        public Icon getIcon(File f) {
-            Icon icon = getCachedIcon(f);
-            if (icon != null) {
-                return icon;
-            }
-            if (f != null) {
-                icon = getFileChooser().getFileSystemView().getSystemIcon(f);
-            }
-            if (icon == null) {
-                icon = super.getIcon(f);
-            }
-            cacheIcon(f, icon);
-            return icon;
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsGraphicsUtils.java b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsGraphicsUtils.java
deleted file mode 100755
index 9efb196..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsGraphicsUtils.java
+++ /dev/null
@@ -1,211 +0,0 @@
-/*
- * Copyright (c) 2000, 2006, 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.java.swing.plaf.windows;
-
-import sun.swing.SwingUtilities2;
-
-import java.awt.*;
-
-import javax.swing.*;
-import javax.swing.plaf.UIResource;
-
-import static com.sun.java.swing.plaf.windows.TMSchema.*;
-
-/**
- * A collection of static utility methods used for rendering the Windows look
- * and feel.
- *
- * @author Mark Davidson
- * @since 1.4
- */
-public class WindowsGraphicsUtils {
-
-    /**
-     * Renders a text String in Windows without the mnemonic.
-     * This is here because the WindowsUI hiearchy doesn't match the Component heirarchy. All
-     * the overriden paintText methods of the ButtonUI delegates will call this static method.
-     * <p>
-     * @param g Graphics context
-     * @param b Current button to render
-     * @param textRect Bounding rectangle to render the text.
-     * @param text String to render
-     */
-    public static void paintText(Graphics g, AbstractButton b,
-                                        Rectangle textRect, String text,
-                                        int textShiftOffset) {
-        FontMetrics fm = SwingUtilities2.getFontMetrics(b, g);
-
-        int mnemIndex = b.getDisplayedMnemonicIndex();
-        // W2K Feature: Check to see if the Underscore should be rendered.
-        if (WindowsLookAndFeel.isMnemonicHidden() == true) {
-            mnemIndex = -1;
-        }
-
-        XPStyle xp = XPStyle.getXP();
-        if (xp != null && !(b instanceof JMenuItem)) {
-            paintXPText(b, g, textRect.x + textShiftOffset,
-                        textRect.y + fm.getAscent() + textShiftOffset,
-                        text, mnemIndex);
-        } else {
-            paintClassicText(b, g, textRect.x + textShiftOffset,
-                             textRect.y + fm.getAscent() + textShiftOffset,
-                             text, mnemIndex);
-        }
-    }
-
-    static void paintClassicText(AbstractButton b, Graphics g, int x, int y,
-                                 String text, int mnemIndex) {
-        ButtonModel model = b.getModel();
-
-        /* Draw the Text */
-        Color color = b.getForeground();
-        if(model.isEnabled()) {
-            /*** paint the text normally */
-            if(!(b instanceof JMenuItem && model.isArmed())
-                && !(b instanceof JMenu && (model.isSelected() || model.isRollover()))) {
-                /* We shall not set foreground color for selected menu or
-                 * armed menuitem. Foreground must be set in appropriate
-                 * Windows* class because these colors passes from
-                 * BasicMenuItemUI as protected fields and we can't
-                 * reach them from this class */
-                g.setColor(b.getForeground());
-            }
-            SwingUtilities2.drawStringUnderlineCharAt(b, g,text, mnemIndex, x, y);
-        } else {        /*** paint the text disabled ***/
-            color        = UIManager.getColor("Button.shadow");
-            Color shadow = UIManager.getColor("Button.disabledShadow");
-            if(model.isArmed()) {
-                color = UIManager.getColor("Button.disabledForeground");
-            } else {
-                if (shadow == null) {
-                    shadow = b.getBackground().darker();
-                }
-                g.setColor(shadow);
-                SwingUtilities2.drawStringUnderlineCharAt(b, g, text, mnemIndex,
-                                                          x + 1, y + 1);
-            }
-            if (color == null) {
-                color = b.getBackground().brighter();
-            }
-            g.setColor(color);
-            SwingUtilities2.drawStringUnderlineCharAt(b, g, text, mnemIndex, x, y);
-        }
-    }
-
-    static void paintXPText(AbstractButton b, Graphics g, int x, int y,
-                            String text, int mnemIndex) {
-        Part part = WindowsButtonUI.getXPButtonType(b);
-        State state = WindowsButtonUI.getXPButtonState(b);
-        paintXPText(b, part, state, g, x, y, text, mnemIndex);
-    }
-
-    static void paintXPText(AbstractButton b, Part part, State state,
-            Graphics g, int x, int y, String text, int mnemIndex) {
-        XPStyle xp = XPStyle.getXP();
-        Color textColor = b.getForeground();
-
-        if (textColor instanceof UIResource) {
-            textColor = xp.getColor(b, part, state, Prop.TEXTCOLOR, b.getForeground());
-            // to work around an apparent bug in Windows, use the pushbutton
-            // color for disabled toolbar buttons if the disabled color is the
-            // same as the enabled color
-            if (part == Part.TP_BUTTON && state == State.DISABLED) {
-                Color enabledColor = xp.getColor(b, part, State.NORMAL,
-                                     Prop.TEXTCOLOR, b.getForeground());
-                if(textColor.equals(enabledColor)) {
-                    textColor = xp.getColor(b, Part.BP_PUSHBUTTON, state,
-                                Prop.TEXTCOLOR, textColor);
-                }
-            }
-            // only draw shadow if developer hasn't changed the foreground color
-            // and if the current style has text shadows.
-            TypeEnum shadowType = xp.getTypeEnum(b, part,
-                                                 state, Prop.TEXTSHADOWTYPE);
-            if (shadowType == TypeEnum.TST_SINGLE ||
-                        shadowType == TypeEnum.TST_CONTINUOUS) {
-                Color shadowColor = xp.getColor(b, part, state,
-                                                Prop.TEXTSHADOWCOLOR, Color.black);
-                Point offset = xp.getPoint(b, part, state, Prop.TEXTSHADOWOFFSET);
-                if (offset != null) {
-                    g.setColor(shadowColor);
-                    SwingUtilities2.drawStringUnderlineCharAt(b, g, text, mnemIndex,
-                                                              x + offset.x,
-                                                              y + offset.y);
-                }
-            }
-        }
-
-        g.setColor(textColor);
-        SwingUtilities2.drawStringUnderlineCharAt(b, g, text, mnemIndex, x, y);
-    }
-
-    static boolean isLeftToRight(Component c) {
-        return c.getComponentOrientation().isLeftToRight();
-    }
-
-    /*
-     * Repaints all the components with the mnemonics in the given window and
-     * all its owned windows.
-     */
-    static void repaintMnemonicsInWindow(Window w) {
-        if(w == null || !w.isShowing()) {
-            return;
-        }
-
-        Window[] ownedWindows = w.getOwnedWindows();
-        for(int i=0;i<ownedWindows.length;i++) {
-            repaintMnemonicsInWindow(ownedWindows[i]);
-        }
-
-        repaintMnemonicsInContainer(w);
-    }
-
-    /*
-     * Repaints all the components with the mnemonics in container.
-     * Recursively searches for all the subcomponents.
-     */
-    static void repaintMnemonicsInContainer(Container cont) {
-        Component c;
-        for(int i=0; i<cont.getComponentCount(); i++) {
-            c = cont.getComponent(i);
-            if(c == null || !c.isVisible()) {
-                continue;
-            }
-            if(c instanceof AbstractButton
-               && ((AbstractButton)c).getMnemonic() != '\0') {
-                c.repaint();
-                continue;
-            } else if(c instanceof JLabel
-                      && ((JLabel)c).getDisplayedMnemonic() != '\0') {
-                c.repaint();
-                continue;
-            }
-            if(c instanceof Container) {
-                repaintMnemonicsInContainer((Container)c);
-            }
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsIconFactory.java b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsIconFactory.java
deleted file mode 100755
index 3e5d313..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsIconFactory.java
+++ /dev/null
@@ -1,903 +0,0 @@
-/*
- * Copyright (c) 1998, 2006, 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.java.swing.plaf.windows;
-
-import javax.swing.*;
-import javax.swing.plaf.ButtonUI;
-import javax.swing.plaf.UIResource;
-
-import java.awt.*;
-import java.io.Serializable;
-
-import static com.sun.java.swing.plaf.windows.TMSchema.*;
-import static com.sun.java.swing.plaf.windows.XPStyle.Skin;
-
-import sun.swing.MenuItemCheckIconFactory;
-
-/**
- * Factory object that can vend Icons appropriate for the Windows L & F.
- * <p>
- * <strong>Warning:</strong>
- * Serialized objects of this class will not be compatible with
- * future Swing releases.  The current serialization support is appropriate
- * for short term storage or RMI between applications running the same
- * version of Swing.  A future release of Swing will provide support for
- * long term persistence.
- *
- * @author David Kloba
- * @author Georges Saab
- * @author Rich Schiavi
- */
-public class WindowsIconFactory implements Serializable
-{
-    private static Icon frame_closeIcon;
-    private static Icon frame_iconifyIcon;
-    private static Icon frame_maxIcon;
-    private static Icon frame_minIcon;
-    private static Icon frame_resizeIcon;
-    private static Icon checkBoxIcon;
-    private static Icon radioButtonIcon;
-    private static Icon checkBoxMenuItemIcon;
-    private static Icon radioButtonMenuItemIcon;
-    private static Icon menuItemCheckIcon;
-    private static Icon menuItemArrowIcon;
-    private static Icon menuArrowIcon;
-    private static VistaMenuItemCheckIconFactory menuItemCheckIconFactory;
-
-    public static Icon getMenuItemCheckIcon() {
-        if (menuItemCheckIcon == null) {
-            menuItemCheckIcon = new MenuItemCheckIcon();
-        }
-        return menuItemCheckIcon;
-    }
-
-    public static Icon getMenuItemArrowIcon() {
-        if (menuItemArrowIcon == null) {
-            menuItemArrowIcon = new MenuItemArrowIcon();
-        }
-        return menuItemArrowIcon;
-    }
-
-    public static Icon getMenuArrowIcon() {
-        if (menuArrowIcon == null) {
-            menuArrowIcon = new MenuArrowIcon();
-        }
-        return menuArrowIcon;
-    }
-
-    public static Icon getCheckBoxIcon() {
-        if (checkBoxIcon == null) {
-            checkBoxIcon = new CheckBoxIcon();
-        }
-        return checkBoxIcon;
-    }
-
-    public static Icon getRadioButtonIcon() {
-        if (radioButtonIcon == null) {
-            radioButtonIcon = new RadioButtonIcon();
-        }
-        return radioButtonIcon;
-    }
-
-    public static Icon getCheckBoxMenuItemIcon() {
-        if (checkBoxMenuItemIcon == null) {
-            checkBoxMenuItemIcon = new CheckBoxMenuItemIcon();
-        }
-        return checkBoxMenuItemIcon;
-    }
-
-    public static Icon getRadioButtonMenuItemIcon() {
-        if (radioButtonMenuItemIcon == null) {
-            radioButtonMenuItemIcon = new RadioButtonMenuItemIcon();
-        }
-        return radioButtonMenuItemIcon;
-    }
-
-    static
-    synchronized VistaMenuItemCheckIconFactory getMenuItemCheckIconFactory() {
-        if (menuItemCheckIconFactory == null) {
-            menuItemCheckIconFactory =
-                new VistaMenuItemCheckIconFactory();
-        }
-        return menuItemCheckIconFactory;
-    }
-
-    public static Icon createFrameCloseIcon() {
-        if (frame_closeIcon == null) {
-            frame_closeIcon = new FrameButtonIcon(Part.WP_CLOSEBUTTON);
-        }
-        return frame_closeIcon;
-    }
-
-    public static Icon createFrameIconifyIcon() {
-        if (frame_iconifyIcon == null) {
-            frame_iconifyIcon = new FrameButtonIcon(Part.WP_MINBUTTON);
-        }
-        return frame_iconifyIcon;
-    }
-
-    public static Icon createFrameMaximizeIcon() {
-        if (frame_maxIcon == null) {
-            frame_maxIcon = new FrameButtonIcon(Part.WP_MAXBUTTON);
-        }
-        return frame_maxIcon;
-    }
-
-    public static Icon createFrameMinimizeIcon() {
-        if (frame_minIcon == null) {
-            frame_minIcon = new FrameButtonIcon(Part.WP_RESTOREBUTTON);
-        }
-        return frame_minIcon;
-    }
-
-    public static Icon createFrameResizeIcon() {
-        if(frame_resizeIcon == null)
-            frame_resizeIcon = new ResizeIcon();
-        return frame_resizeIcon;
-    }
-
-
-    private static class FrameButtonIcon implements Icon, Serializable {
-        private Part part;
-
-        private FrameButtonIcon(Part part) {
-            this.part = part;
-        }
-
-        public void paintIcon(Component c, Graphics g, int x0, int y0) {
-            int width = getIconWidth();
-            int height = getIconHeight();
-
-            XPStyle xp = XPStyle.getXP();
-            if (xp != null) {
-                Skin skin = xp.getSkin(c, part);
-                JButton b = (JButton)c;
-                ButtonModel model = b.getModel();
-
-                // Find out if frame is inactive
-                JInternalFrame jif = (JInternalFrame)SwingUtilities.
-                                        getAncestorOfClass(JInternalFrame.class, b);
-                boolean jifSelected = (jif != null && jif.isSelected());
-
-                State state;
-                if (jifSelected) {
-                    if (!model.isEnabled()) {
-                        state = State.DISABLED;
-                    } else if (model.isArmed() && model.isPressed()) {
-                        state = State.PUSHED;
-                    } else if (model.isRollover()) {
-                        state = State.HOT;
-                    } else {
-                        state = State.NORMAL;
-                    }
-                } else {
-                    if (!model.isEnabled()) {
-                        state = State.INACTIVEDISABLED;
-                    } else if (model.isArmed() && model.isPressed()) {
-                        state = State.INACTIVEPUSHED;
-                    } else if (model.isRollover()) {
-                        state = State.INACTIVEHOT;
-                    } else {
-                        state = State.INACTIVENORMAL;
-                    }
-                }
-                skin.paintSkin(g, 0, 0, width, height, state);
-            } else {
-                g.setColor(Color.black);
-                int x = width / 12 + 2;
-                int y = height / 5;
-                int h = height - y * 2 - 1;
-                int w = width * 3/4 -3;
-                int thickness2 = Math.max(height / 8, 2);
-                int thickness  = Math.max(width / 15, 1);
-                if (part == Part.WP_CLOSEBUTTON) {
-                    int lineWidth;
-                    if      (width > 47) lineWidth = 6;
-                    else if (width > 37) lineWidth = 5;
-                    else if (width > 26) lineWidth = 4;
-                    else if (width > 16) lineWidth = 3;
-                    else if (width > 12) lineWidth = 2;
-                    else                 lineWidth = 1;
-                    y = height / 12 + 2;
-                    if (lineWidth == 1) {
-                        if (w % 2 == 1) { x++; w++; }
-                        g.drawLine(x,     y, x+w-2, y+w-2);
-                        g.drawLine(x+w-2, y, x,     y+w-2);
-                    } else if (lineWidth == 2) {
-                        if (w > 6) { x++; w--; }
-                        g.drawLine(x,     y, x+w-2, y+w-2);
-                        g.drawLine(x+w-2, y, x,     y+w-2);
-                        g.drawLine(x+1,   y, x+w-1, y+w-2);
-                        g.drawLine(x+w-1, y, x+1,   y+w-2);
-                    } else {
-                        x += 2; y++; w -= 2;
-                        g.drawLine(x,     y,   x+w-1, y+w-1);
-                        g.drawLine(x+w-1, y,   x,     y+w-1);
-                        g.drawLine(x+1,   y,   x+w-1, y+w-2);
-                        g.drawLine(x+w-2, y,   x,     y+w-2);
-                        g.drawLine(x,     y+1, x+w-2, y+w-1);
-                        g.drawLine(x+w-1, y+1, x+1,   y+w-1);
-                        for (int i = 4; i <= lineWidth; i++) {
-                            g.drawLine(x+i-2,   y,     x+w-1,   y+w-i+1);
-                            g.drawLine(x,       y+i-2, x+w-i+1, y+w-1);
-                            g.drawLine(x+w-i+1, y,     x,       y+w-i+1);
-                            g.drawLine(x+w-1,   y+i-2, x+i-2,   y+w-1);
-                        }
-                    }
-                } else if (part == Part.WP_MINBUTTON) {
-                    g.fillRect(x, y+h-thickness2, w-w/3, thickness2);
-                } else if (part == Part.WP_MAXBUTTON) {
-                    g.fillRect(x, y, w, thickness2);
-                    g.fillRect(x, y, thickness, h);
-                    g.fillRect(x+w-thickness, y, thickness, h);
-                    g.fillRect(x, y+h-thickness, w, thickness);
-                } else if (part == Part.WP_RESTOREBUTTON) {
-                    g.fillRect(x+w/3, y, w-w/3, thickness2);
-                    g.fillRect(x+w/3, y, thickness, h/3);
-                    g.fillRect(x+w-thickness, y, thickness, h-h/3);
-                    g.fillRect(x+w-w/3, y+h-h/3-thickness, w/3, thickness);
-
-                    g.fillRect(x, y+h/3, w-w/3, thickness2);
-                    g.fillRect(x, y+h/3, thickness, h-h/3);
-                    g.fillRect(x+w-w/3-thickness, y+h/3, thickness, h-h/3);
-                    g.fillRect(x, y+h-thickness, w-w/3, thickness);
-                }
-            }
-        }
-
-        public int getIconWidth() {
-            int width;
-            if (XPStyle.getXP() != null) {
-                // Fix for XP bug where sometimes these sizes aren't updated properly
-                // Assume for now that height is correct and derive width using the
-                // ratio from the uxtheme part
-                width = UIManager.getInt("InternalFrame.titleButtonHeight") -2;
-                Dimension d = XPStyle.getPartSize(Part.WP_CLOSEBUTTON, State.NORMAL);
-                if (d != null && d.width != 0 && d.height != 0) {
-                    width = (int) ((float) width * d.width / d.height);
-                }
-            } else {
-                width = UIManager.getInt("InternalFrame.titleButtonWidth") -2;
-            }
-            if (XPStyle.getXP() != null) {
-                width -= 2;
-            }
-            return width;
-        }
-
-        public int getIconHeight() {
-            int height = UIManager.getInt("InternalFrame.titleButtonHeight")-4;
-            return height;
-        }
-    }
-
-
-
-        private static class ResizeIcon implements Icon, Serializable {
-            public void paintIcon(Component c, Graphics g, int x, int y) {
-                g.setColor(UIManager.getColor("InternalFrame.resizeIconHighlight"));
-                g.drawLine(0, 11, 11, 0);
-                g.drawLine(4, 11, 11, 4);
-                g.drawLine(8, 11, 11, 8);
-
-                g.setColor(UIManager.getColor("InternalFrame.resizeIconShadow"));
-                g.drawLine(1, 11, 11, 1);
-                g.drawLine(2, 11, 11, 2);
-                g.drawLine(5, 11, 11, 5);
-                g.drawLine(6, 11, 11, 6);
-                g.drawLine(9, 11, 11, 9);
-                g.drawLine(10, 11, 11, 10);
-            }
-            public int getIconWidth() { return 13; }
-            public int getIconHeight() { return 13; }
-        };
-
-    private static class CheckBoxIcon implements Icon, Serializable
-    {
-        final static int csize = 13;
-        public void paintIcon(Component c, Graphics g, int x, int y) {
-            JCheckBox cb = (JCheckBox) c;
-            ButtonModel model = cb.getModel();
-            XPStyle xp = XPStyle.getXP();
-
-            if (xp != null) {
-                State state;
-                if (model.isSelected()) {
-                    state = State.CHECKEDNORMAL;
-                    if (!model.isEnabled()) {
-                        state = State.CHECKEDDISABLED;
-                    } else if (model.isPressed() && model.isArmed()) {
-                        state = State.CHECKEDPRESSED;
-                    } else if (model.isRollover()) {
-                        state = State.CHECKEDHOT;
-                    }
-                } else {
-                    state = State.UNCHECKEDNORMAL;
-                    if (!model.isEnabled()) {
-                        state = State.UNCHECKEDDISABLED;
-                    } else if (model.isPressed() && model.isArmed()) {
-                        state = State.UNCHECKEDPRESSED;
-                    } else if (model.isRollover()) {
-                        state = State.UNCHECKEDHOT;
-                    }
-                }
-                Part part = Part.BP_CHECKBOX;
-                xp.getSkin(c, part).paintSkin(g, x, y, state);
-            } else {
-                // outer bevel
-                if(!cb.isBorderPaintedFlat()) {
-                    // Outer top/left
-                    g.setColor(UIManager.getColor("CheckBox.shadow"));
-                    g.drawLine(x, y, x+11, y);
-                    g.drawLine(x, y+1, x, y+11);
-
-                    // Outer bottom/right
-                    g.setColor(UIManager.getColor("CheckBox.highlight"));
-                    g.drawLine(x+12, y, x+12, y+12);
-                    g.drawLine(x, y+12, x+11, y+12);
-
-                    // Inner top.left
-                    g.setColor(UIManager.getColor("CheckBox.darkShadow"));
-                    g.drawLine(x+1, y+1, x+10, y+1);
-                    g.drawLine(x+1, y+2, x+1, y+10);
-
-                    // Inner bottom/right
-                    g.setColor(UIManager.getColor("CheckBox.light"));
-                    g.drawLine(x+1, y+11, x+11, y+11);
-                    g.drawLine(x+11, y+1, x+11, y+10);
-
-                    // inside box
-                    if((model.isPressed() && model.isArmed()) || !model.isEnabled()) {
-                        g.setColor(UIManager.getColor("CheckBox.background"));
-                    } else {
-                        g.setColor(UIManager.getColor("CheckBox.interiorBackground"));
-                    }
-                    g.fillRect(x+2, y+2, csize-4, csize-4);
-                } else {
-                    g.setColor(UIManager.getColor("CheckBox.shadow"));
-                    g.drawRect(x+1, y+1, csize-3, csize-3);
-
-                    if((model.isPressed() && model.isArmed()) || !model.isEnabled()) {
-                        g.setColor(UIManager.getColor("CheckBox.background"));
-                    } else {
-                        g.setColor(UIManager.getColor("CheckBox.interiorBackground"));
-                    }
-                    g.fillRect(x+2, y+2, csize-4, csize-4);
-                }
-
-                if(model.isEnabled()) {
-                    g.setColor(UIManager.getColor("CheckBox.foreground"));
-                } else {
-                    g.setColor(UIManager.getColor("CheckBox.shadow"));
-                }
-
-                // paint check
-                if (model.isSelected()) {
-                    g.drawLine(x+9, y+3, x+9, y+3);
-                    g.drawLine(x+8, y+4, x+9, y+4);
-                    g.drawLine(x+7, y+5, x+9, y+5);
-                    g.drawLine(x+6, y+6, x+8, y+6);
-                    g.drawLine(x+3, y+7, x+7, y+7);
-                    g.drawLine(x+4, y+8, x+6, y+8);
-                    g.drawLine(x+5, y+9, x+5, y+9);
-                    g.drawLine(x+3, y+5, x+3, y+5);
-                    g.drawLine(x+3, y+6, x+4, y+6);
-                }
-            }
-        }
-
-        public int getIconWidth() {
-            XPStyle xp = XPStyle.getXP();
-            if (xp != null) {
-                return xp.getSkin(null, Part.BP_CHECKBOX).getWidth();
-            } else {
-                return csize;
-            }
-        }
-
-        public int getIconHeight() {
-            XPStyle xp = XPStyle.getXP();
-            if (xp != null) {
-                return xp.getSkin(null, Part.BP_CHECKBOX).getHeight();
-            } else {
-                return csize;
-            }
-        }
-    }
-
-    private static class RadioButtonIcon implements Icon, UIResource, Serializable
-    {
-        public void paintIcon(Component c, Graphics g, int x, int y) {
-            AbstractButton b = (AbstractButton) c;
-            ButtonModel model = b.getModel();
-            XPStyle xp = XPStyle.getXP();
-
-            if (xp != null) {
-                Part part = Part.BP_RADIOBUTTON;
-                Skin skin = xp.getSkin(b, part);
-                State state;
-                int index = 0;
-                if (model.isSelected()) {
-                    state = State.CHECKEDNORMAL;
-                    if (!model.isEnabled()) {
-                        state = State.CHECKEDDISABLED;
-                    } else if (model.isPressed() && model.isArmed()) {
-                        state = State.CHECKEDPRESSED;
-                    } else if (model.isRollover()) {
-                        state = State.CHECKEDHOT;
-                    }
-                } else {
-                    state = State.UNCHECKEDNORMAL;
-                    if (!model.isEnabled()) {
-                        state = State.UNCHECKEDDISABLED;
-                    } else if (model.isPressed() && model.isArmed()) {
-                        state = State.UNCHECKEDPRESSED;
-                    } else if (model.isRollover()) {
-                        state = State.UNCHECKEDHOT;
-                    }
-                }
-                skin.paintSkin(g, x, y, state);
-            } else {
-                // fill interior
-                if((model.isPressed() && model.isArmed()) || !model.isEnabled()) {
-                    g.setColor(UIManager.getColor("RadioButton.background"));
-                } else {
-                    g.setColor(UIManager.getColor("RadioButton.interiorBackground"));
-                }
-                g.fillRect(x+2, y+2, 8, 8);
-
-
-                    // outter left arc
-                g.setColor(UIManager.getColor("RadioButton.shadow"));
-                g.drawLine(x+4, y+0, x+7, y+0);
-                g.drawLine(x+2, y+1, x+3, y+1);
-                g.drawLine(x+8, y+1, x+9, y+1);
-                g.drawLine(x+1, y+2, x+1, y+3);
-                g.drawLine(x+0, y+4, x+0, y+7);
-                g.drawLine(x+1, y+8, x+1, y+9);
-
-                // outter right arc
-                g.setColor(UIManager.getColor("RadioButton.highlight"));
-                g.drawLine(x+2, y+10, x+3, y+10);
-                g.drawLine(x+4, y+11, x+7, y+11);
-                g.drawLine(x+8, y+10, x+9, y+10);
-                g.drawLine(x+10, y+9, x+10, y+8);
-                g.drawLine(x+11, y+7, x+11, y+4);
-                g.drawLine(x+10, y+3, x+10, y+2);
-
-
-                // inner left arc
-                g.setColor(UIManager.getColor("RadioButton.darkShadow"));
-                g.drawLine(x+4, y+1, x+7, y+1);
-                g.drawLine(x+2, y+2, x+3, y+2);
-                g.drawLine(x+8, y+2, x+9, y+2);
-                g.drawLine(x+2, y+3, x+2, y+3);
-                g.drawLine(x+1, y+4, x+1, y+7);
-                g.drawLine(x+2, y+8, x+2, y+8);
-
-
-                // inner right arc
-                g.setColor(UIManager.getColor("RadioButton.light"));
-                g.drawLine(x+2,  y+9,  x+3,  y+9);
-                g.drawLine(x+4,  y+10, x+7,  y+10);
-                g.drawLine(x+8,  y+9,  x+9,  y+9);
-                g.drawLine(x+9,  y+8,  x+9,  y+8);
-                g.drawLine(x+10, y+7,  x+10, y+4);
-                g.drawLine(x+9,  y+3,  x+9,  y+3);
-
-
-                 // indicate whether selected or not
-                if (model.isSelected()) {
-                    if (model.isEnabled()) {
-                        g.setColor(UIManager.getColor("RadioButton.foreground"));
-                    } else {
-                        g.setColor(UIManager.getColor("RadioButton.shadow"));
-                    }
-                    g.fillRect(x+4, y+5, 4, 2);
-                    g.fillRect(x+5, y+4, 2, 4);
-                }
-            }
-        }
-
-        public int getIconWidth() {
-            XPStyle xp = XPStyle.getXP();
-            if (xp != null) {
-                return xp.getSkin(null, Part.BP_RADIOBUTTON).getWidth();
-            } else {
-                return 13;
-            }
-        }
-
-        public int getIconHeight() {
-            XPStyle xp = XPStyle.getXP();
-            if (xp != null) {
-                return xp.getSkin(null, Part.BP_RADIOBUTTON).getHeight();
-            } else {
-                return 13;
-            }
-        }
-    } // end class RadioButtonIcon
-
-
-    private static class CheckBoxMenuItemIcon implements Icon, UIResource, Serializable
-    {
-        public void paintIcon(Component c, Graphics g, int x, int y) {
-            AbstractButton b = (AbstractButton) c;
-            ButtonModel model = b.getModel();
-            boolean isSelected = model.isSelected();
-            if (isSelected) {
-                y = y - getIconHeight() / 2;
-                g.drawLine(x+9, y+3, x+9, y+3);
-                g.drawLine(x+8, y+4, x+9, y+4);
-                g.drawLine(x+7, y+5, x+9, y+5);
-                g.drawLine(x+6, y+6, x+8, y+6);
-                g.drawLine(x+3, y+7, x+7, y+7);
-                g.drawLine(x+4, y+8, x+6, y+8);
-                g.drawLine(x+5, y+9, x+5, y+9);
-                g.drawLine(x+3, y+5, x+3, y+5);
-                g.drawLine(x+3, y+6, x+4, y+6);
-            }
-        }
-        public int getIconWidth() { return 9; }
-        public int getIconHeight() { return 9; }
-
-    } // End class CheckBoxMenuItemIcon
-
-
-    private static class RadioButtonMenuItemIcon implements Icon, UIResource, Serializable
-    {
-        public void paintIcon(Component c, Graphics g, int x, int y) {
-            AbstractButton b = (AbstractButton) c;
-            ButtonModel model = b.getModel();
-            if (b.isSelected() == true) {
-               g.fillRoundRect(x+3,y+3, getIconWidth()-6, getIconHeight()-6,
-                               4, 4);
-            }
-        }
-        public int getIconWidth() { return 12; }
-        public int getIconHeight() { return 12; }
-
-    } // End class RadioButtonMenuItemIcon
-
-
-    private static class MenuItemCheckIcon implements Icon, UIResource, Serializable{
-        public void paintIcon(Component c, Graphics g, int x, int y) {
-            /* For debugging:
-               Color oldColor = g.getColor();
-            g.setColor(Color.orange);
-            g.fill3DRect(x,y,getIconWidth(), getIconHeight(), true);
-            g.setColor(oldColor);
-            */
-        }
-        public int getIconWidth() { return 9; }
-        public int getIconHeight() { return 9; }
-
-    } // End class MenuItemCheckIcon
-
-    private static class MenuItemArrowIcon implements Icon, UIResource, Serializable {
-        public void paintIcon(Component c, Graphics g, int x, int y) {
-            /* For debugging:
-            Color oldColor = g.getColor();
-            g.setColor(Color.green);
-            g.fill3DRect(x,y,getIconWidth(), getIconHeight(), true);
-            g.setColor(oldColor);
-            */
-        }
-        public int getIconWidth() { return 4; }
-        public int getIconHeight() { return 8; }
-
-    } // End class MenuItemArrowIcon
-
-    private static class MenuArrowIcon implements Icon, UIResource, Serializable {
-        public void paintIcon(Component c, Graphics g, int x, int y) {
-            if (WindowsMenuItemUI.isVistaPainting()) {
-                XPStyle xp = XPStyle.getXP();
-                State state = State.NORMAL;
-                if (c instanceof JMenuItem) {
-                    state = ((JMenuItem) c).getModel().isEnabled()
-                    ? State.NORMAL : State.DISABLED;
-                }
-                Skin skin = xp.getSkin(c, Part.MP_POPUPSUBMENU);
-                if (WindowsGraphicsUtils.isLeftToRight(c)) {
-                    skin.paintSkin(g, x, y, state);
-                } else {
-                    Graphics2D g2d = (Graphics2D)g.create();
-                    g2d.translate(x + skin.getWidth(), y);
-                    g2d.scale(-1, 1);
-                    skin.paintSkin(g2d, 0, 0, state);
-                    g2d.dispose();
-                }
-            } else {
-                g.translate(x,y);
-                if( WindowsGraphicsUtils.isLeftToRight(c) ) {
-                    g.drawLine( 0, 0, 0, 7 );
-                    g.drawLine( 1, 1, 1, 6 );
-                    g.drawLine( 2, 2, 2, 5 );
-                    g.drawLine( 3, 3, 3, 4 );
-                } else {
-                    g.drawLine( 4, 0, 4, 7 );
-                    g.drawLine( 3, 1, 3, 6 );
-                    g.drawLine( 2, 2, 2, 5 );
-                    g.drawLine( 1, 3, 1, 4 );
-                }
-                g.translate(-x,-y);
-            }
-        }
-        public int getIconWidth() {
-            if (WindowsMenuItemUI.isVistaPainting()) {
-                Skin skin = XPStyle.getXP().getSkin(null, Part.MP_POPUPSUBMENU);
-                return skin.getWidth();
-            } else {
-                return 4;
-            }
-        }
-        public int getIconHeight() {
-            if (WindowsMenuItemUI.isVistaPainting()) {
-                Skin skin = XPStyle.getXP().getSkin(null, Part.MP_POPUPSUBMENU);
-                return skin.getHeight();
-            } else {
-                return 8;
-            }
-        }
-    } // End class MenuArrowIcon
-
-    static class VistaMenuItemCheckIconFactory
-           implements MenuItemCheckIconFactory {
-        private static final int OFFSET = 3;
-
-        public Icon getIcon(JMenuItem component) {
-            return new VistaMenuItemCheckIcon(component);
-        }
-
-        public boolean isCompatible(Object icon, String prefix) {
-            return icon instanceof VistaMenuItemCheckIcon
-              && ((VistaMenuItemCheckIcon) icon).type == getType(prefix);
-        }
-
-        public Icon getIcon(String type) {
-            return new VistaMenuItemCheckIcon(type);
-        }
-
-        static int getIconWidth() {
-            return XPStyle.getXP().getSkin(null, Part.MP_POPUPCHECK).getWidth()
-                + 2 * OFFSET;
-        }
-
-        private static Class<? extends JMenuItem> getType(Component c) {
-            Class<? extends JMenuItem> rv = null;
-            if (c instanceof JCheckBoxMenuItem) {
-                rv = JCheckBoxMenuItem.class;
-            } else if (c instanceof JRadioButtonMenuItem) {
-                rv = JRadioButtonMenuItem.class;
-            } else if (c instanceof JMenu) {
-                rv = JMenu.class;
-            } else if (c instanceof JMenuItem) {
-                rv = JMenuItem.class;
-            }
-            return rv;
-        }
-
-        private static Class<? extends JMenuItem> getType(String type) {
-            Class<? extends JMenuItem> rv = null;
-            if (type == "CheckBoxMenuItem") {
-                rv = JCheckBoxMenuItem.class;
-            } else if (type == "RadioButtonMenuItem") {
-                rv = JRadioButtonMenuItem.class;
-            } else if (type == "Menu") {
-                rv = JMenu.class;
-            } else if (type == "MenuItem") {
-                rv = JMenuItem.class;
-            } else {
-                // this should never happen
-                rv = JMenuItem.class;
-            }
-            return rv;
-        }
-
-        /**
-         * CheckIcon for JMenuItem, JMenu, JCheckBoxMenuItem and
-         * JRadioButtonMenuItem.
-         * Note: to be used on Vista only.
-         */
-        private static class VistaMenuItemCheckIcon
-              implements Icon, UIResource, Serializable {
-
-            private final JMenuItem menuItem;
-            private final Class<? extends JMenuItem> type;
-
-            VistaMenuItemCheckIcon(JMenuItem menuItem) {
-                this.type = getType(menuItem);
-                this.menuItem = menuItem;
-            }
-            VistaMenuItemCheckIcon(String type) {
-                this.type = getType(type);
-                this.menuItem = null;
-            }
-
-            public int getIconHeight() {
-                Icon lafIcon = getLaFIcon();
-                if (lafIcon != null) {
-                    return lafIcon.getIconHeight();
-                }
-                Icon icon = getIcon();
-                int height = 0;
-                if (icon != null) {
-                    height = icon.getIconHeight() + 2 * OFFSET;
-                } else {
-                    Skin skin =
-                        XPStyle.getXP().getSkin(null, Part.MP_POPUPCHECK);
-                    height = skin.getHeight() + 2 * OFFSET;
-                }
-                return height;
-            }
-
-            public int getIconWidth() {
-                Icon lafIcon = getLaFIcon();
-                if (lafIcon != null) {
-                    return lafIcon.getIconWidth();
-                }
-                Icon icon = getIcon();
-                int width = 0;
-                if (icon != null) {
-                    width = icon.getIconWidth() + 2 * OFFSET;
-                } else {
-                    width = VistaMenuItemCheckIconFactory.getIconWidth();
-                }
-                return width;
-            }
-
-            public void paintIcon(Component c, Graphics g, int x, int y) {
-                Icon lafIcon = getLaFIcon();
-                if (lafIcon != null) {
-                    lafIcon.paintIcon(c, g, x, y);
-                    return;
-                }
-                assert menuItem == null || c == menuItem;
-                Icon icon = getIcon();
-                if (type == JCheckBoxMenuItem.class
-                      || type == JRadioButtonMenuItem.class) {
-                    AbstractButton b = (AbstractButton) c;
-                    if (b.isSelected()) {
-                        Part backgroundPart = Part.MP_POPUPCHECKBACKGROUND;
-                        Part part = Part.MP_POPUPCHECK;
-                        State backgroundState;
-                        State state;
-                        if (isEnabled(c, null)) {
-                            backgroundState =
-                                (icon != null) ? State.BITMAP : State.NORMAL;
-                            state = (type == JRadioButtonMenuItem.class)
-                              ? State.BULLETNORMAL
-                              : State.CHECKMARKNORMAL;
-                        } else {
-                            backgroundState = State.DISABLEDPUSHED;
-                            state =
-                                (type == JRadioButtonMenuItem.class)
-                                  ? State.BULLETDISABLED
-                                  : State.CHECKMARKDISABLED;
-                        }
-                        Skin skin;
-                        XPStyle xp = XPStyle.getXP();
-                        skin =  xp.getSkin(c, backgroundPart);
-                        skin.paintSkin(g, x, y,
-                            getIconWidth(), getIconHeight(), backgroundState);
-                        if (icon == null) {
-                            skin = xp.getSkin(c, part);
-                            skin.paintSkin(g, x + OFFSET, y + OFFSET, state);
-                        }
-                    }
-                }
-                if (icon != null) {
-                    icon.paintIcon(c, g, x + OFFSET, y + OFFSET);
-                }
-            }
-            private static WindowsMenuItemUIAccessor getAccessor(
-                    JMenuItem menuItem) {
-                WindowsMenuItemUIAccessor rv = null;
-                ButtonUI uiObject = (menuItem != null) ? menuItem.getUI()
-                        : null;
-                if (uiObject instanceof WindowsMenuItemUI) {
-                    rv = ((WindowsMenuItemUI) uiObject).accessor;
-                } else if (uiObject instanceof WindowsMenuUI) {
-                    rv = ((WindowsMenuUI) uiObject).accessor;
-                } else if (uiObject instanceof WindowsCheckBoxMenuItemUI) {
-                    rv = ((WindowsCheckBoxMenuItemUI) uiObject).accessor;
-                } else if (uiObject instanceof WindowsRadioButtonMenuItemUI) {
-                    rv = ((WindowsRadioButtonMenuItemUI) uiObject).accessor;
-                }
-                return rv;
-            }
-
-            private static boolean isEnabled(Component  c, State state) {
-                if (state == null && c instanceof JMenuItem) {
-                    WindowsMenuItemUIAccessor accessor =
-                        getAccessor((JMenuItem) c);
-                    if (accessor != null) {
-                        state = accessor.getState((JMenuItem) c);
-                    }
-                }
-                if (state == null) {
-                    if (c != null) {
-                        return c.isEnabled();
-                    } else {
-                        return true;
-                    }
-                } else {
-                    return (state != State.DISABLED)
-                        && (state != State.DISABLEDHOT)
-                        && (state != State.DISABLEDPUSHED);
-                }
-            }
-            private Icon getIcon() {
-                Icon rv = null;
-                if (menuItem == null) {
-                    return rv;
-                }
-                WindowsMenuItemUIAccessor accessor =
-                    getAccessor(menuItem);
-                State state = (accessor != null) ? accessor.getState(menuItem)
-                        : null;
-                if (isEnabled(menuItem, null)) {
-                    if (state == State.PUSHED) {
-                        rv = menuItem.getPressedIcon();
-                    } else {
-                        rv = menuItem.getIcon();
-                    }
-                } else {
-                    rv = menuItem.getDisabledIcon();
-                }
-                return rv;
-            }
-            /**
-             * Check if developer changed icon in the UI table.
-             *
-             * @return the icon to use or {@code null} if the current one is to
-             * be used
-             */
-            private Icon getLaFIcon() {
-                // use icon from the UI table if it does not match this one.
-                Icon rv = (Icon) UIManager.getDefaults().get(typeToString(type));
-                if (rv instanceof VistaMenuItemCheckIcon
-                      && ((VistaMenuItemCheckIcon) rv).type == type) {
-                    rv = null;
-                }
-                return rv;
-            }
-
-            private static String typeToString(
-                    Class<? extends JMenuItem> type) {
-                assert type == JMenuItem.class
-                    || type == JMenu.class
-                    || type == JCheckBoxMenuItem.class
-                    || type == JRadioButtonMenuItem.class;
-                StringBuilder sb = new StringBuilder(type.getName());
-                // remove package name, dot and the first character
-                sb.delete(0, sb.lastIndexOf("J") + 1);
-                sb.append(".checkIcon");
-                return sb.toString();
-            }
-        }
-    } // End class VistaMenuItemCheckIconFactory
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsInternalFrameTitlePane.java b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsInternalFrameTitlePane.java
deleted file mode 100755
index 715f26c..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsInternalFrameTitlePane.java
+++ /dev/null
@@ -1,559 +0,0 @@
-/*
- * Copyright (c) 2001, 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.
- */
-
-package com.sun.java.swing.plaf.windows;
-
-import sun.swing.SwingUtilities2;
-
-import javax.swing.*;
-import javax.swing.border.*;
-import javax.swing.UIManager;
-import javax.swing.plaf.*;
-import javax.swing.plaf.basic.BasicInternalFrameTitlePane;
-import java.awt.*;
-import java.awt.event.*;
-import java.beans.PropertyChangeEvent;
-import java.beans.PropertyChangeListener;
-import java.beans.PropertyVetoException;
-
-import static com.sun.java.swing.plaf.windows.TMSchema.*;
-import static com.sun.java.swing.plaf.windows.XPStyle.Skin;
-
-public class WindowsInternalFrameTitlePane extends BasicInternalFrameTitlePane {
-    private Color selectedTitleGradientColor;
-    private Color notSelectedTitleGradientColor;
-    private JPopupMenu systemPopupMenu;
-    private JLabel systemLabel;
-
-    private Font titleFont;
-    private int titlePaneHeight;
-    private int buttonWidth, buttonHeight;
-    private boolean hotTrackingOn;
-
-    public WindowsInternalFrameTitlePane(JInternalFrame f) {
-        super(f);
-    }
-
-    protected void addSubComponents() {
-        add(systemLabel);
-        add(iconButton);
-        add(maxButton);
-        add(closeButton);
-    }
-
-    protected void installDefaults() {
-        super.installDefaults();
-
-        titlePaneHeight = UIManager.getInt("InternalFrame.titlePaneHeight");
-        buttonWidth     = UIManager.getInt("InternalFrame.titleButtonWidth")  - 4;
-        buttonHeight    = UIManager.getInt("InternalFrame.titleButtonHeight") - 4;
-
-        Object obj      = UIManager.get("InternalFrame.titleButtonToolTipsOn");
-        hotTrackingOn = (obj instanceof Boolean) ? (Boolean)obj : true;
-
-
-        if (XPStyle.getXP() != null) {
-            // Fix for XP bug where sometimes these sizes aren't updated properly
-            // Assume for now that height is correct and derive width using the
-            // ratio from the uxtheme part
-            buttonWidth = buttonHeight;
-            Dimension d = XPStyle.getPartSize(Part.WP_CLOSEBUTTON, State.NORMAL);
-            if (d != null && d.width != 0 && d.height != 0) {
-                buttonWidth = (int) ((float) buttonWidth * d.width / d.height);
-            }
-        } else {
-            buttonWidth += 2;
-            selectedTitleGradientColor =
-                    UIManager.getColor("InternalFrame.activeTitleGradient");
-            notSelectedTitleGradientColor =
-                    UIManager.getColor("InternalFrame.inactiveTitleGradient");
-            Color activeBorderColor =
-                    UIManager.getColor("InternalFrame.activeBorderColor");
-            setBorder(BorderFactory.createLineBorder(activeBorderColor, 1));
-        }
-    }
-
-    protected void uninstallListeners() {
-        // Get around protected method in superclass
-        super.uninstallListeners();
-    }
-
-    protected void createButtons() {
-        super.createButtons();
-        if (XPStyle.getXP() != null) {
-            iconButton.setContentAreaFilled(false);
-            maxButton.setContentAreaFilled(false);
-            closeButton.setContentAreaFilled(false);
-        }
-    }
-
-    protected void setButtonIcons() {
-        super.setButtonIcons();
-
-        if (!hotTrackingOn) {
-            iconButton.setToolTipText(null);
-            maxButton.setToolTipText(null);
-            closeButton.setToolTipText(null);
-        }
-    }
-
-
-    public void paintComponent(Graphics g)  {
-        XPStyle xp = XPStyle.getXP();
-
-        paintTitleBackground(g);
-
-        String title = frame.getTitle();
-        if (title != null) {
-            boolean isSelected = frame.isSelected();
-            Font oldFont = g.getFont();
-            Font newFont = (titleFont != null) ? titleFont : getFont();
-            g.setFont(newFont);
-
-            // Center text vertically.
-            FontMetrics fm = SwingUtilities2.getFontMetrics(frame, g, newFont);
-            int baseline = (getHeight() + fm.getAscent() - fm.getLeading() -
-                    fm.getDescent()) / 2;
-
-            Rectangle lastIconBounds = new Rectangle(0, 0, 0, 0);
-            if (frame.isIconifiable()) {
-                lastIconBounds = iconButton.getBounds();
-            } else if (frame.isMaximizable()) {
-                lastIconBounds = maxButton.getBounds();
-            } else if (frame.isClosable()) {
-                lastIconBounds = closeButton.getBounds();
-            }
-
-            int titleX;
-            int titleW;
-            int gap = 2;
-            if (WindowsGraphicsUtils.isLeftToRight(frame)) {
-                if (lastIconBounds.x == 0) { // There are no icons
-                    lastIconBounds.x = frame.getWidth() - frame.getInsets().right;
-                }
-                titleX = systemLabel.getX() + systemLabel.getWidth() + gap;
-                if (xp != null) {
-                    titleX += 2;
-                }
-                titleW = lastIconBounds.x - titleX - gap;
-            } else {
-                if (lastIconBounds.x == 0) { // There are no icons
-                    lastIconBounds.x = frame.getInsets().left;
-                }
-                titleW = SwingUtilities2.stringWidth(frame, fm, title);
-                int minTitleX = lastIconBounds.x + lastIconBounds.width + gap;
-                if (xp != null) {
-                    minTitleX += 2;
-                }
-                int availableWidth = systemLabel.getX() - gap - minTitleX;
-                if (availableWidth > titleW) {
-                    titleX = systemLabel.getX() - gap - titleW;
-                } else {
-                    titleX = minTitleX;
-                    titleW = availableWidth;
-                }
-            }
-            title = getTitle(frame.getTitle(), fm, titleW);
-
-            if (xp != null) {
-                String shadowType = null;
-                if (isSelected) {
-                    shadowType = xp.getString(this, Part.WP_CAPTION,
-                                              State.ACTIVE, Prop.TEXTSHADOWTYPE);
-                }
-                if ("single".equalsIgnoreCase(shadowType)) {
-                    Point shadowOffset = xp.getPoint(this, Part.WP_WINDOW, State.ACTIVE,
-                                                     Prop.TEXTSHADOWOFFSET);
-                    Color shadowColor  = xp.getColor(this, Part.WP_WINDOW, State.ACTIVE,
-                                                     Prop.TEXTSHADOWCOLOR, null);
-                    if (shadowOffset != null && shadowColor != null) {
-                        g.setColor(shadowColor);
-                        SwingUtilities2.drawString(frame, g, title,
-                                     titleX + shadowOffset.x,
-                                     baseline + shadowOffset.y);
-                    }
-                }
-            }
-            g.setColor(isSelected ? selectedTextColor : notSelectedTextColor);
-            SwingUtilities2.drawString(frame, g, title, titleX, baseline);
-            g.setFont(oldFont);
-        }
-    }
-
-    public Dimension getPreferredSize() {
-        return getMinimumSize();
-    }
-
-    public Dimension getMinimumSize() {
-        Dimension d = new Dimension(super.getMinimumSize());
-        d.height = titlePaneHeight + 2;
-
-        XPStyle xp = XPStyle.getXP();
-        if (xp != null) {
-            // Note: Don't know how to calculate height on XP,
-            // the captionbarheight is 25 but native caption is 30 (maximized 26)
-            if (frame.isMaximum()) {
-                d.height -= 1;
-            } else {
-                d.height += 3;
-            }
-        }
-        return d;
-    }
-
-    protected void paintTitleBackground(Graphics g) {
-        XPStyle xp = XPStyle.getXP();
-        if (xp != null) {
-            Part part = frame.isIcon() ? Part.WP_MINCAPTION
-                                       : (frame.isMaximum() ? Part.WP_MAXCAPTION
-                                                            : Part.WP_CAPTION);
-            State state = frame.isSelected() ? State.ACTIVE : State.INACTIVE;
-            Skin skin = xp.getSkin(this, part);
-            skin.paintSkin(g, 0,  0, getWidth(), getHeight(), state);
-        } else {
-            Boolean gradientsOn = (Boolean)LookAndFeel.getDesktopPropertyValue(
-                "win.frame.captionGradientsOn", Boolean.valueOf(false));
-            if (gradientsOn.booleanValue() && g instanceof Graphics2D) {
-                Graphics2D g2 = (Graphics2D)g;
-                Paint savePaint = g2.getPaint();
-
-                boolean isSelected = frame.isSelected();
-                int w = getWidth();
-
-                if (isSelected) {
-                    GradientPaint titleGradient = new GradientPaint(0,0,
-                            selectedTitleColor,
-                            (int)(w*.75),0,
-                            selectedTitleGradientColor);
-                    g2.setPaint(titleGradient);
-                } else {
-                    GradientPaint titleGradient = new GradientPaint(0,0,
-                            notSelectedTitleColor,
-                            (int)(w*.75),0,
-                            notSelectedTitleGradientColor);
-                    g2.setPaint(titleGradient);
-                }
-                g2.fillRect(0, 0, getWidth(), getHeight());
-                g2.setPaint(savePaint);
-            } else {
-                super.paintTitleBackground(g);
-            }
-        }
-    }
-
-    protected void assembleSystemMenu() {
-        systemPopupMenu = new JPopupMenu();
-        addSystemMenuItems(systemPopupMenu);
-        enableActions();
-        systemLabel = new JLabel(frame.getFrameIcon()) {
-            protected void paintComponent(Graphics g) {
-                int x = 0;
-                int y = 0;
-                int w = getWidth();
-                int h = getHeight();
-                g = g.create();  // Create scratch graphics
-                if (isOpaque()) {
-                    g.setColor(getBackground());
-                    g.fillRect(0, 0, w, h);
-                }
-                Icon icon = getIcon();
-                int iconWidth;
-                int iconHeight;
-                if (icon != null &&
-                    (iconWidth = icon.getIconWidth()) > 0 &&
-                    (iconHeight = icon.getIconHeight()) > 0) {
-
-                    // Set drawing scale to make icon scale to our desired size
-                    double drawScale;
-                    if (iconWidth > iconHeight) {
-                        // Center icon vertically
-                        y = (h - w*iconHeight/iconWidth) / 2;
-                        drawScale = w / (double)iconWidth;
-                    } else {
-                        // Center icon horizontally
-                        x = (w - h*iconWidth/iconHeight) / 2;
-                        drawScale = h / (double)iconHeight;
-                    }
-                    ((Graphics2D)g).translate(x, y);
-                    ((Graphics2D)g).scale(drawScale, drawScale);
-                    icon.paintIcon(this, g, 0, 0);
-                }
-                g.dispose();
-            }
-        };
-        systemLabel.addMouseListener(new MouseAdapter() {
-            public void mouseClicked(MouseEvent e) {
-                if (e.getClickCount() == 2 && frame.isClosable() &&
-                    !frame.isIcon()) {
-                    systemPopupMenu.setVisible(false);
-                    frame.doDefaultCloseAction();
-                }
-                else {
-                    super.mouseClicked(e);
-                }
-            }
-            public void mousePressed(MouseEvent e) {
-                try {
-                    frame.setSelected(true);
-                } catch(PropertyVetoException pve) {
-                }
-                showSystemPopupMenu(e.getComponent());
-            }
-        });
-    }
-
-    protected void addSystemMenuItems(JPopupMenu menu) {
-        JMenuItem mi = menu.add(restoreAction);
-        mi.setMnemonic('R');
-        mi = menu.add(moveAction);
-        mi.setMnemonic('M');
-        mi = menu.add(sizeAction);
-        mi.setMnemonic('S');
-        mi = menu.add(iconifyAction);
-        mi.setMnemonic('n');
-        mi = menu.add(maximizeAction);
-        mi.setMnemonic('x');
-        systemPopupMenu.add(new JSeparator());
-        mi = menu.add(closeAction);
-        mi.setMnemonic('C');
-    }
-
-    protected void showSystemMenu(){
-        showSystemPopupMenu(systemLabel);
-    }
-
-    private void showSystemPopupMenu(Component invoker){
-        Dimension dim = new Dimension();
-        Border border = frame.getBorder();
-        if (border != null) {
-            dim.width += border.getBorderInsets(frame).left +
-                border.getBorderInsets(frame).right;
-            dim.height += border.getBorderInsets(frame).bottom +
-                border.getBorderInsets(frame).top;
-        }
-        if (!frame.isIcon()) {
-            systemPopupMenu.show(invoker,
-                getX() - dim.width,
-                getY() + getHeight() - dim.height);
-        } else {
-            systemPopupMenu.show(invoker,
-                getX() - dim.width,
-                getY() - systemPopupMenu.getPreferredSize().height -
-                     dim.height);
-        }
-    }
-
-    protected PropertyChangeListener createPropertyChangeListener() {
-        return new WindowsPropertyChangeHandler();
-    }
-
-    protected LayoutManager createLayout() {
-        return new WindowsTitlePaneLayout();
-    }
-
-    public class WindowsTitlePaneLayout extends BasicInternalFrameTitlePane.TitlePaneLayout {
-        private Insets captionMargin = null;
-        private Insets contentMargin = null;
-        private XPStyle xp = XPStyle.getXP();
-
-        WindowsTitlePaneLayout() {
-            if (xp != null) {
-                Component c = WindowsInternalFrameTitlePane.this;
-                captionMargin = xp.getMargin(c, Part.WP_CAPTION, null, Prop.CAPTIONMARGINS);
-                contentMargin = xp.getMargin(c, Part.WP_CAPTION, null, Prop.CONTENTMARGINS);
-            }
-            if (captionMargin == null) {
-                captionMargin = new Insets(0, 2, 0, 2);
-            }
-            if (contentMargin == null) {
-                contentMargin = new Insets(0, 0, 0, 0);
-            }
-        }
-
-        private int layoutButton(JComponent button, Part part,
-                                 int x, int y, int w, int h, int gap,
-                                 boolean leftToRight) {
-            if (!leftToRight) {
-                x -= w;
-            }
-            button.setBounds(x, y, w, h);
-            if (leftToRight) {
-                x += w + 2;
-            } else {
-                x -= 2;
-            }
-            return x;
-        }
-
-        public void layoutContainer(Container c) {
-            boolean leftToRight = WindowsGraphicsUtils.isLeftToRight(frame);
-            int x, y;
-            int w = getWidth();
-            int h = getHeight();
-
-            // System button
-            // Note: this icon is square, but the buttons aren't always.
-            int iconSize = (xp != null) ? (h-2)*6/10 : h-4;
-            if (xp != null) {
-                x = (leftToRight) ? captionMargin.left + 2 : w - captionMargin.right - 2;
-            } else {
-                x = (leftToRight) ? captionMargin.left : w - captionMargin.right;
-            }
-            y = (h - iconSize) / 2;
-            layoutButton(systemLabel, Part.WP_SYSBUTTON,
-                         x, y, iconSize, iconSize, 0,
-                         leftToRight);
-
-            // Right hand buttons
-            if (xp != null) {
-                x = (leftToRight) ? w - captionMargin.right - 2 : captionMargin.left + 2;
-                y = 1;  // XP seems to ignore margins and offset here
-                if (frame.isMaximum()) {
-                    y += 1;
-                } else {
-                    y += 5;
-                }
-            } else {
-                x = (leftToRight) ? w - captionMargin.right : captionMargin.left;
-                y = (h - buttonHeight) / 2;
-            }
-
-            if(frame.isClosable()) {
-                x = layoutButton(closeButton, Part.WP_CLOSEBUTTON,
-                                 x, y, buttonWidth, buttonHeight, 2,
-                                 !leftToRight);
-            }
-
-            if(frame.isMaximizable()) {
-                x = layoutButton(maxButton, Part.WP_MAXBUTTON,
-                                 x, y, buttonWidth, buttonHeight, (xp != null) ? 2 : 0,
-                                 !leftToRight);
-            }
-
-            if(frame.isIconifiable()) {
-                layoutButton(iconButton, Part.WP_MINBUTTON,
-                             x, y, buttonWidth, buttonHeight, 0,
-                             !leftToRight);
-            }
-        }
-    } // end WindowsTitlePaneLayout
-
-    public class WindowsPropertyChangeHandler extends PropertyChangeHandler {
-        public void propertyChange(PropertyChangeEvent evt) {
-            String prop = evt.getPropertyName();
-
-            // Update the internal frame icon for the system menu.
-            if (JInternalFrame.FRAME_ICON_PROPERTY.equals(prop) &&
-                    systemLabel != null) {
-                systemLabel.setIcon(frame.getFrameIcon());
-            }
-
-            super.propertyChange(evt);
-        }
-    }
-
-    /**
-     * A versatile Icon implementation which can take an array of Icon
-     * instances (typically <code>ImageIcon</code>s) and choose one that gives the best
-     * quality for a given Graphics2D scale factor when painting.
-     * <p>
-     * The class is public so it can be instantiated by UIDefaults.ProxyLazyValue.
-     * <p>
-     * Note: We assume here that icons are square.
-     */
-    public static class ScalableIconUIResource implements Icon, UIResource {
-        // We can use an arbitrary size here because we scale to it in paintIcon()
-        private static final int SIZE = 16;
-
-        private Icon[] icons;
-
-        /**
-         * @params objects an array of Icon or UIDefaults.LazyValue
-         * <p>
-         * The constructor is public so it can be called by UIDefaults.ProxyLazyValue.
-         */
-        public ScalableIconUIResource(Object[] objects) {
-            this.icons = new Icon[objects.length];
-
-            for (int i = 0; i < objects.length; i++) {
-                if (objects[i] instanceof UIDefaults.LazyValue) {
-                    icons[i] = (Icon)((UIDefaults.LazyValue)objects[i]).createValue(null);
-                } else {
-                    icons[i] = (Icon)objects[i];
-                }
-            }
-        }
-
-        /**
-         * @return the <code>Icon</code> closest to the requested size
-         */
-        protected Icon getBestIcon(int size) {
-            if (icons != null && icons.length > 0) {
-                int bestIndex = 0;
-                int minDiff = Integer.MAX_VALUE;
-                for (int i=0; i < icons.length; i++) {
-                    Icon icon = icons[i];
-                    int iconSize;
-                    if (icon != null && (iconSize = icon.getIconWidth()) > 0) {
-                        int diff = Math.abs(iconSize - size);
-                        if (diff < minDiff) {
-                            minDiff = diff;
-                            bestIndex = i;
-                        }
-                    }
-                }
-                return icons[bestIndex];
-            } else {
-                return null;
-            }
-        }
-
-        public void paintIcon(Component c, Graphics g, int x, int y) {
-            Graphics2D g2d = (Graphics2D)g.create();
-            // Calculate how big our drawing area is in pixels
-            // Assume we are square
-            int size = getIconWidth();
-            double scale = g2d.getTransform().getScaleX();
-            Icon icon = getBestIcon((int)(size * scale));
-            int iconSize;
-            if (icon != null && (iconSize = icon.getIconWidth()) > 0) {
-                // Set drawing scale to make icon act true to our reported size
-                double drawScale = size / (double)iconSize;
-                g2d.translate(x, y);
-                g2d.scale(drawScale, drawScale);
-                icon.paintIcon(c, g2d, 0, 0);
-            }
-            g2d.dispose();
-        }
-
-        public int getIconWidth() {
-            return SIZE;
-        }
-
-        public int getIconHeight() {
-            return SIZE;
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsInternalFrameUI.java b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsInternalFrameUI.java
deleted file mode 100755
index a61270d..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsInternalFrameUI.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-package com.sun.java.swing.plaf.windows;
-
-import java.awt.*;
-import java.beans.*;
-import javax.swing.*;
-import javax.swing.border.*;
-import javax.swing.plaf.basic.*;
-import javax.swing.plaf.ComponentUI;
-
-import static com.sun.java.swing.plaf.windows.TMSchema.*;
-import static com.sun.java.swing.plaf.windows.XPStyle.Skin;
-
-/**
- * Windows rendition of the component.
- * <p>
- * <strong>Warning:</strong>
- * Serialized objects of this class will not be compatible with
- * future Swing releases.  The current serialization support is appropriate
- * for short term storage or RMI between applications running the same
- * version of Swing.  A future release of Swing will provide support for
- * long term persistence.
- */
-public class WindowsInternalFrameUI extends BasicInternalFrameUI
-{
-    XPStyle xp = XPStyle.getXP();
-
-    public void installDefaults() {
-        super.installDefaults();
-
-        if (xp != null) {
-            frame.setBorder(new XPBorder());
-        } else {
-            frame.setBorder(UIManager.getBorder("InternalFrame.border"));
-        }
-    }
-
-    public void installUI(JComponent c)   {
-        super.installUI(c);
-
-        LookAndFeel.installProperty(c, "opaque",
-                                    xp == null? Boolean.TRUE : Boolean.FALSE);
-    }
-
-    public void uninstallDefaults() {
-        frame.setBorder(null);
-        super.uninstallDefaults();
-    }
-
-    public static ComponentUI createUI(JComponent b)    {
-        return new WindowsInternalFrameUI((JInternalFrame)b);
-    }
-
-    public WindowsInternalFrameUI(JInternalFrame w){
-        super(w);
-    }
-
-    protected DesktopManager createDesktopManager(){
-        return new WindowsDesktopManager();
-    }
-
-    protected JComponent createNorthPane(JInternalFrame w) {
-        titlePane = new WindowsInternalFrameTitlePane(w);
-        return titlePane;
-    }
-
-    private class XPBorder extends AbstractBorder {
-        private Skin leftSkin   = xp.getSkin(frame, Part.WP_FRAMELEFT);
-        private Skin rightSkin  = xp.getSkin(frame, Part.WP_FRAMERIGHT);
-        private Skin bottomSkin = xp.getSkin(frame, Part.WP_FRAMEBOTTOM);
-
-        /**
-         * @param x the x position of the painted border
-         * @param y the y position of the painted border
-         * @param width the width of the painted border
-         * @param height the height of the painted border
-         */
-        public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) {
-            State state = ((JInternalFrame)c).isSelected() ? State.ACTIVE : State.INACTIVE;
-            int topBorderHeight  = (titlePane != null) ? titlePane.getSize().height : 0;
-
-            bottomSkin.paintSkin(g, 0, height-bottomSkin.getHeight(),
-                                 width, bottomSkin.getHeight(),
-                                 state);
-
-            leftSkin.paintSkin(g, 0, topBorderHeight-1,
-                               leftSkin.getWidth(), height-topBorderHeight-bottomSkin.getHeight()+2,
-                               state);
-
-            rightSkin.paintSkin(g, width-rightSkin.getWidth(), topBorderHeight-1,
-                                rightSkin.getWidth(), height-topBorderHeight-bottomSkin.getHeight()+2,
-                                state);
-
-        }
-
-        public Insets getBorderInsets(Component c, Insets insets) {
-            insets.top    = 4;
-            insets.left   = leftSkin.getWidth();
-            insets.right  = rightSkin.getWidth();
-            insets.bottom = bottomSkin.getHeight();
-
-            return insets;
-        }
-
-        public boolean isBorderOpaque() {
-            return true;
-        }
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsLabelUI.java b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsLabelUI.java
deleted file mode 100755
index 0f3c456..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsLabelUI.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-package com.sun.java.swing.plaf.windows;
-
-import sun.swing.SwingUtilities2;
-import sun.awt.AppContext;
-
-import java.awt.Color;
-import java.awt.Graphics;
-
-import javax.swing.JComponent;
-import javax.swing.JLabel;
-import javax.swing.UIManager;
-
-import javax.swing.plaf.ComponentUI;
-
-import javax.swing.plaf.basic.BasicLabelUI;
-
-
-
-/**
- * Windows rendition of the component.
- * <p>
- * <strong>Warning:</strong>
- * Serialized objects of this class will not be compatible with
- * future Swing releases.  The current serialization support is appropriate
- * for short term storage or RMI between applications running the same
- * version of Swing.  A future release of Swing will provide support for
- * long term persistence.
- */
-public class WindowsLabelUI extends BasicLabelUI {
-
-    private static final Object WINDOWS_LABEL_UI_KEY = new Object();
-
-    // ********************************
-    //          Create PLAF
-    // ********************************
-    public static ComponentUI createUI(JComponent c) {
-        AppContext appContext = AppContext.getAppContext();
-        WindowsLabelUI windowsLabelUI =
-                (WindowsLabelUI) appContext.get(WINDOWS_LABEL_UI_KEY);
-        if (windowsLabelUI == null) {
-            windowsLabelUI = new WindowsLabelUI();
-            appContext.put(WINDOWS_LABEL_UI_KEY, windowsLabelUI);
-        }
-        return windowsLabelUI;
-    }
-
-    protected void paintEnabledText(JLabel l, Graphics g, String s,
-                                    int textX, int textY) {
-        int mnemonicIndex = l.getDisplayedMnemonicIndex();
-        // W2K Feature: Check to see if the Underscore should be rendered.
-        if (WindowsLookAndFeel.isMnemonicHidden() == true) {
-            mnemonicIndex = -1;
-        }
-
-        g.setColor(l.getForeground());
-        SwingUtilities2.drawStringUnderlineCharAt(l, g, s, mnemonicIndex,
-                                                     textX, textY);
-    }
-
-    protected void paintDisabledText(JLabel l, Graphics g, String s,
-                                     int textX, int textY) {
-        int mnemonicIndex = l.getDisplayedMnemonicIndex();
-        // W2K Feature: Check to see if the Underscore should be rendered.
-        if (WindowsLookAndFeel.isMnemonicHidden() == true) {
-            mnemonicIndex = -1;
-        }
-        if ( UIManager.getColor("Label.disabledForeground") instanceof Color &&
-             UIManager.getColor("Label.disabledShadow") instanceof Color) {
-            g.setColor( UIManager.getColor("Label.disabledShadow") );
-            SwingUtilities2.drawStringUnderlineCharAt(l, g, s,
-                                                         mnemonicIndex,
-                                                         textX + 1, textY + 1);
-            g.setColor( UIManager.getColor("Label.disabledForeground") );
-            SwingUtilities2.drawStringUnderlineCharAt(l, g, s,
-                                                         mnemonicIndex,
-                                                         textX, textY);
-        } else {
-            Color background = l.getBackground();
-            g.setColor(background.brighter());
-            SwingUtilities2.drawStringUnderlineCharAt(l,g, s, mnemonicIndex,
-                                                         textX + 1, textY + 1);
-            g.setColor(background.darker());
-            SwingUtilities2.drawStringUnderlineCharAt(l,g, s, mnemonicIndex,
-                                                         textX, textY);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsLookAndFeel.java b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsLookAndFeel.java
deleted file mode 100755
index 48961a0..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsLookAndFeel.java
+++ /dev/null
@@ -1,2636 +0,0 @@
-/*
- * Copyright (c) 1997, 2012, 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.
- */
-
-/*
- * <p>These classes are designed to be used while the
- * corresponding <code>LookAndFeel</code> class has been installed
- * (<code>UIManager.setLookAndFeel(new <i>XXX</i>LookAndFeel())</code>).
- * Using them while a different <code>LookAndFeel</code> is installed
- * may produce unexpected results, including exceptions.
- * Additionally, changing the <code>LookAndFeel</code>
- * maintained by the <code>UIManager</code> without updating the
- * corresponding <code>ComponentUI</code> of any
- * <code>JComponent</code>s may also produce unexpected results,
- * such as the wrong colors showing up, and is generally not
- * encouraged.
- *
- */
-
-package com.sun.java.swing.plaf.windows;
-
-import java.awt.*;
-import java.awt.image.BufferedImage;
-import java.awt.image.ImageFilter;
-import java.awt.image.ImageProducer;
-import java.awt.image.FilteredImageSource;
-import java.awt.image.RGBImageFilter;
-
-import javax.swing.plaf.*;
-import javax.swing.*;
-import javax.swing.plaf.basic.*;
-import javax.swing.border.*;
-import javax.swing.text.DefaultEditorKit;
-
-import java.awt.Font;
-import java.awt.Color;
-import java.awt.event.KeyEvent;
-import java.awt.event.ActionEvent;
-
-import java.security.AccessController;
-
-import sun.awt.SunToolkit;
-import sun.awt.OSInfo;
-import sun.awt.shell.ShellFolder;
-import sun.font.FontUtilities;
-import sun.security.action.GetPropertyAction;
-
-import sun.swing.DefaultLayoutStyle;
-import sun.swing.ImageIconUIResource;
-import sun.swing.SwingLazyValue;
-import sun.swing.SwingUtilities2;
-import sun.swing.StringUIClientPropertyKey;
-
-import static com.sun.java.swing.plaf.windows.TMSchema.*;
-import static com.sun.java.swing.plaf.windows.XPStyle.Skin;
-
-import com.sun.java.swing.plaf.windows.WindowsIconFactory.VistaMenuItemCheckIconFactory;
-
-/**
- * Implements the Windows95/98/NT/2000 Look and Feel.
- * UI classes not implemented specifically for Windows will
- * default to those implemented in Basic.
- * <p>
- * <strong>Warning:</strong>
- * Serialized objects of this class will not be compatible with
- * future Swing releases.  The current serialization support is appropriate
- * for short term storage or RMI between applications running the same
- * version of Swing.  A future release of Swing will provide support for
- * long term persistence.
- *
- * @author unattributed
- */
-public class WindowsLookAndFeel extends BasicLookAndFeel
-{
-    /**
-     * A client property that can be used with any JComponent that will end up
-     * calling the LookAndFeel.getDisabledIcon method. This client property,
-     * when set to Boolean.TRUE, will cause getDisabledIcon to use an
-     * alternate algorithm for creating disabled icons to produce icons
-     * that appear similar to the native Windows file chooser
-     */
-    static final Object HI_RES_DISABLED_ICON_CLIENT_KEY =
-        new StringUIClientPropertyKey(
-            "WindowsLookAndFeel.generateHiResDisabledIcon");
-
-    private boolean updatePending = false;
-
-    private boolean useSystemFontSettings = true;
-    private boolean useSystemFontSizeSettings;
-
-    // These properties are not used directly, but are kept as
-    // private members to avoid being GC'd.
-    private DesktopProperty themeActive, dllName, colorName, sizeName;
-    private DesktopProperty aaSettings;
-
-    private transient LayoutStyle style;
-
-    /**
-     * Base dialog units along the horizontal axis.
-     */
-    private int baseUnitX;
-
-    /**
-     * Base dialog units along the vertical axis.
-     */
-    private int baseUnitY;
-
-    public String getName() {
-        return "Windows";
-    }
-
-    public String getDescription() {
-        return "The Microsoft Windows Look and Feel";
-    }
-
-    public String getID() {
-        return "Windows";
-    }
-
-    public boolean isNativeLookAndFeel() {
-        return OSInfo.getOSType() == OSInfo.OSType.WINDOWS;
-    }
-
-    public boolean isSupportedLookAndFeel() {
-        return isNativeLookAndFeel();
-    }
-
-    public void initialize() {
-        super.initialize();
-
-        // Set the flag which determines which version of Windows should
-        // be rendered. This flag only need to be set once.
-        // if version <= 4.0 then the classic LAF should be loaded.
-        if (OSInfo.getWindowsVersion().compareTo(OSInfo.WINDOWS_95) <= 0) {
-            isClassicWindows = true;
-        } else {
-            isClassicWindows = false;
-            XPStyle.invalidateStyle();
-        }
-
-        // Using the fonts set by the user can potentially cause
-        // performance and compatibility issues, so allow this feature
-        // to be switched off either at runtime or programmatically
-        //
-        String systemFonts = java.security.AccessController.doPrivileged(
-               new GetPropertyAction("swing.useSystemFontSettings"));
-        useSystemFontSettings = (systemFonts == null ||
-                                 Boolean.valueOf(systemFonts).booleanValue());
-
-        if (useSystemFontSettings) {
-            Object value = UIManager.get("Application.useSystemFontSettings");
-
-            useSystemFontSettings = (value == null ||
-                                     Boolean.TRUE.equals(value));
-        }
-        KeyboardFocusManager.getCurrentKeyboardFocusManager().
-            addKeyEventPostProcessor(WindowsRootPaneUI.altProcessor);
-
-    }
-
-    /**
-     * Initialize the uiClassID to BasicComponentUI mapping.
-     * The JComponent classes define their own uiClassID constants
-     * (see AbstractComponent.getUIClassID).  This table must
-     * map those constants to a BasicComponentUI class of the
-     * appropriate type.
-     *
-     * @see BasicLookAndFeel#getDefaults
-     */
-    protected void initClassDefaults(UIDefaults table)
-    {
-        super.initClassDefaults(table);
-
-        final String windowsPackageName = "com.sun.java.swing.plaf.windows.";
-
-        Object[] uiDefaults = {
-              "ButtonUI", windowsPackageName + "WindowsButtonUI",
-            "CheckBoxUI", windowsPackageName + "WindowsCheckBoxUI",
-    "CheckBoxMenuItemUI", windowsPackageName + "WindowsCheckBoxMenuItemUI",
-               "LabelUI", windowsPackageName + "WindowsLabelUI",
-         "RadioButtonUI", windowsPackageName + "WindowsRadioButtonUI",
- "RadioButtonMenuItemUI", windowsPackageName + "WindowsRadioButtonMenuItemUI",
-        "ToggleButtonUI", windowsPackageName + "WindowsToggleButtonUI",
-         "ProgressBarUI", windowsPackageName + "WindowsProgressBarUI",
-              "SliderUI", windowsPackageName + "WindowsSliderUI",
-           "SeparatorUI", windowsPackageName + "WindowsSeparatorUI",
-           "SplitPaneUI", windowsPackageName + "WindowsSplitPaneUI",
-             "SpinnerUI", windowsPackageName + "WindowsSpinnerUI",
-          "TabbedPaneUI", windowsPackageName + "WindowsTabbedPaneUI",
-            "TextAreaUI", windowsPackageName + "WindowsTextAreaUI",
-           "TextFieldUI", windowsPackageName + "WindowsTextFieldUI",
-       "PasswordFieldUI", windowsPackageName + "WindowsPasswordFieldUI",
-            "TextPaneUI", windowsPackageName + "WindowsTextPaneUI",
-          "EditorPaneUI", windowsPackageName + "WindowsEditorPaneUI",
-                "TreeUI", windowsPackageName + "WindowsTreeUI",
-             "ToolBarUI", windowsPackageName + "WindowsToolBarUI",
-    "ToolBarSeparatorUI", windowsPackageName + "WindowsToolBarSeparatorUI",
-            "ComboBoxUI", windowsPackageName + "WindowsComboBoxUI",
-         "TableHeaderUI", windowsPackageName + "WindowsTableHeaderUI",
-       "InternalFrameUI", windowsPackageName + "WindowsInternalFrameUI",
-         "DesktopPaneUI", windowsPackageName + "WindowsDesktopPaneUI",
-         "DesktopIconUI", windowsPackageName + "WindowsDesktopIconUI",
-         "FileChooserUI", windowsPackageName + "WindowsFileChooserUI",
-                "MenuUI", windowsPackageName + "WindowsMenuUI",
-            "MenuItemUI", windowsPackageName + "WindowsMenuItemUI",
-             "MenuBarUI", windowsPackageName + "WindowsMenuBarUI",
-           "PopupMenuUI", windowsPackageName + "WindowsPopupMenuUI",
-  "PopupMenuSeparatorUI", windowsPackageName + "WindowsPopupMenuSeparatorUI",
-           "ScrollBarUI", windowsPackageName + "WindowsScrollBarUI",
-            "RootPaneUI", windowsPackageName + "WindowsRootPaneUI"
-        };
-
-        table.putDefaults(uiDefaults);
-    }
-
-    /**
-     * Load the SystemColors into the defaults table.  The keys
-     * for SystemColor defaults are the same as the names of
-     * the public fields in SystemColor.  If the table is being
-     * created on a native Windows platform we use the SystemColor
-     * values, otherwise we create color objects whose values match
-     * the defaults Windows95 colors.
-     */
-    protected void initSystemColorDefaults(UIDefaults table)
-    {
-        String[] defaultSystemColors = {
-                "desktop", "#005C5C", /* Color of the desktop background */
-          "activeCaption", "#000080", /* Color for captions (title bars) when they are active. */
-      "activeCaptionText", "#FFFFFF", /* Text color for text in captions (title bars). */
-    "activeCaptionBorder", "#C0C0C0", /* Border color for caption (title bar) window borders. */
-        "inactiveCaption", "#808080", /* Color for captions (title bars) when not active. */
-    "inactiveCaptionText", "#C0C0C0", /* Text color for text in inactive captions (title bars). */
-  "inactiveCaptionBorder", "#C0C0C0", /* Border color for inactive caption (title bar) window borders. */
-                 "window", "#FFFFFF", /* Default color for the interior of windows */
-           "windowBorder", "#000000", /* ??? */
-             "windowText", "#000000", /* ??? */
-                   "menu", "#C0C0C0", /* Background color for menus */
-       "menuPressedItemB", "#000080", /* LightShadow of menubutton highlight */
-       "menuPressedItemF", "#FFFFFF", /* Default color for foreground "text" in menu item */
-               "menuText", "#000000", /* Text color for menus  */
-                   "text", "#C0C0C0", /* Text background color */
-               "textText", "#000000", /* Text foreground color */
-          "textHighlight", "#000080", /* Text background color when selected */
-      "textHighlightText", "#FFFFFF", /* Text color when selected */
-       "textInactiveText", "#808080", /* Text color when disabled */
-                "control", "#C0C0C0", /* Default color for controls (buttons, sliders, etc) */
-            "controlText", "#000000", /* Default color for text in controls */
-       "controlHighlight", "#C0C0C0",
-
-  /*"controlHighlight", "#E0E0E0",*/ /* Specular highlight (opposite of the shadow) */
-     "controlLtHighlight", "#FFFFFF", /* Highlight color for controls */
-          "controlShadow", "#808080", /* Shadow color for controls */
-        "controlDkShadow", "#000000", /* Dark shadow color for controls */
-              "scrollbar", "#E0E0E0", /* Scrollbar background (usually the "track") */
-                   "info", "#FFFFE1", /* ??? */
-               "infoText", "#000000"  /* ??? */
-        };
-
-        loadSystemColors(table, defaultSystemColors, isNativeLookAndFeel());
-    }
-
-   /**
-     * Initialize the defaults table with the name of the ResourceBundle
-     * used for getting localized defaults.
-     */
-    private void initResourceBundle(UIDefaults table) {
-        table.addResourceBundle( "com.sun.java.swing.plaf.windows.resources.windows" );
-    }
-
-    // XXX - there are probably a lot of redundant values that could be removed.
-    // ie. Take a look at RadioButtonBorder, etc...
-    protected void initComponentDefaults(UIDefaults table)
-    {
-        super.initComponentDefaults( table );
-
-        initResourceBundle(table);
-
-        // *** Shared Fonts
-        Integer twelve = Integer.valueOf(12);
-        Integer fontPlain = Integer.valueOf(Font.PLAIN);
-        Integer fontBold = Integer.valueOf(Font.BOLD);
-
-        Object dialogPlain12 = new SwingLazyValue(
-                               "javax.swing.plaf.FontUIResource",
-                               null,
-                               new Object[] {Font.DIALOG, fontPlain, twelve});
-
-        Object sansSerifPlain12 =  new SwingLazyValue(
-                          "javax.swing.plaf.FontUIResource",
-                          null,
-                          new Object[] {Font.SANS_SERIF, fontPlain, twelve});
-        Object monospacedPlain12 = new SwingLazyValue(
-                          "javax.swing.plaf.FontUIResource",
-                          null,
-                          new Object[] {Font.MONOSPACED, fontPlain, twelve});
-        Object dialogBold12 = new SwingLazyValue(
-                          "javax.swing.plaf.FontUIResource",
-                          null,
-                          new Object[] {Font.DIALOG, fontBold, twelve});
-
-        // *** Colors
-        // XXX - some of these doens't seem to be used
-        ColorUIResource red = new ColorUIResource(Color.red);
-        ColorUIResource black = new ColorUIResource(Color.black);
-        ColorUIResource white = new ColorUIResource(Color.white);
-        ColorUIResource gray = new ColorUIResource(Color.gray);
-        ColorUIResource darkGray = new ColorUIResource(Color.darkGray);
-        ColorUIResource scrollBarTrackHighlight = darkGray;
-
-        // Set the flag which determines which version of Windows should
-        // be rendered. This flag only need to be set once.
-        // if version <= 4.0 then the classic LAF should be loaded.
-        isClassicWindows = OSInfo.getWindowsVersion().compareTo(OSInfo.WINDOWS_95) <= 0;
-
-        // *** Tree
-        Object treeExpandedIcon = WindowsTreeUI.ExpandedIcon.createExpandedIcon();
-
-        Object treeCollapsedIcon = WindowsTreeUI.CollapsedIcon.createCollapsedIcon();
-
-
-        // *** Text
-        Object fieldInputMap = new UIDefaults.LazyInputMap(new Object[] {
-                      "control C", DefaultEditorKit.copyAction,
-                      "control V", DefaultEditorKit.pasteAction,
-                      "control X", DefaultEditorKit.cutAction,
-                           "COPY", DefaultEditorKit.copyAction,
-                          "PASTE", DefaultEditorKit.pasteAction,
-                            "CUT", DefaultEditorKit.cutAction,
-                 "control INSERT", DefaultEditorKit.copyAction,
-                   "shift INSERT", DefaultEditorKit.pasteAction,
-                   "shift DELETE", DefaultEditorKit.cutAction,
-                      "control A", DefaultEditorKit.selectAllAction,
-             "control BACK_SLASH", "unselect"/*DefaultEditorKit.unselectAction*/,
-                     "shift LEFT", DefaultEditorKit.selectionBackwardAction,
-                    "shift RIGHT", DefaultEditorKit.selectionForwardAction,
-                   "control LEFT", DefaultEditorKit.previousWordAction,
-                  "control RIGHT", DefaultEditorKit.nextWordAction,
-             "control shift LEFT", DefaultEditorKit.selectionPreviousWordAction,
-            "control shift RIGHT", DefaultEditorKit.selectionNextWordAction,
-                           "HOME", DefaultEditorKit.beginLineAction,
-                            "END", DefaultEditorKit.endLineAction,
-                     "shift HOME", DefaultEditorKit.selectionBeginLineAction,
-                      "shift END", DefaultEditorKit.selectionEndLineAction,
-                     "BACK_SPACE", DefaultEditorKit.deletePrevCharAction,
-               "shift BACK_SPACE", DefaultEditorKit.deletePrevCharAction,
-                         "ctrl H", DefaultEditorKit.deletePrevCharAction,
-                         "DELETE", DefaultEditorKit.deleteNextCharAction,
-                    "ctrl DELETE", DefaultEditorKit.deleteNextWordAction,
-                "ctrl BACK_SPACE", DefaultEditorKit.deletePrevWordAction,
-                          "RIGHT", DefaultEditorKit.forwardAction,
-                           "LEFT", DefaultEditorKit.backwardAction,
-                       "KP_RIGHT", DefaultEditorKit.forwardAction,
-                        "KP_LEFT", DefaultEditorKit.backwardAction,
-                          "ENTER", JTextField.notifyAction,
-                "control shift O", "toggle-componentOrientation"/*DefaultEditorKit.toggleComponentOrientation*/
-        });
-
-        Object passwordInputMap = new UIDefaults.LazyInputMap(new Object[] {
-                      "control C", DefaultEditorKit.copyAction,
-                      "control V", DefaultEditorKit.pasteAction,
-                      "control X", DefaultEditorKit.cutAction,
-                           "COPY", DefaultEditorKit.copyAction,
-                          "PASTE", DefaultEditorKit.pasteAction,
-                            "CUT", DefaultEditorKit.cutAction,
-                 "control INSERT", DefaultEditorKit.copyAction,
-                   "shift INSERT", DefaultEditorKit.pasteAction,
-                   "shift DELETE", DefaultEditorKit.cutAction,
-                      "control A", DefaultEditorKit.selectAllAction,
-             "control BACK_SLASH", "unselect"/*DefaultEditorKit.unselectAction*/,
-                     "shift LEFT", DefaultEditorKit.selectionBackwardAction,
-                    "shift RIGHT", DefaultEditorKit.selectionForwardAction,
-                   "control LEFT", DefaultEditorKit.beginLineAction,
-                  "control RIGHT", DefaultEditorKit.endLineAction,
-             "control shift LEFT", DefaultEditorKit.selectionBeginLineAction,
-            "control shift RIGHT", DefaultEditorKit.selectionEndLineAction,
-                           "HOME", DefaultEditorKit.beginLineAction,
-                            "END", DefaultEditorKit.endLineAction,
-                     "shift HOME", DefaultEditorKit.selectionBeginLineAction,
-                      "shift END", DefaultEditorKit.selectionEndLineAction,
-                     "BACK_SPACE", DefaultEditorKit.deletePrevCharAction,
-               "shift BACK_SPACE", DefaultEditorKit.deletePrevCharAction,
-                         "ctrl H", DefaultEditorKit.deletePrevCharAction,
-                         "DELETE", DefaultEditorKit.deleteNextCharAction,
-                          "RIGHT", DefaultEditorKit.forwardAction,
-                           "LEFT", DefaultEditorKit.backwardAction,
-                       "KP_RIGHT", DefaultEditorKit.forwardAction,
-                        "KP_LEFT", DefaultEditorKit.backwardAction,
-                          "ENTER", JTextField.notifyAction,
-                "control shift O", "toggle-componentOrientation"/*DefaultEditorKit.toggleComponentOrientation*/
-        });
-
-        Object multilineInputMap = new UIDefaults.LazyInputMap(new Object[] {
-                      "control C", DefaultEditorKit.copyAction,
-                      "control V", DefaultEditorKit.pasteAction,
-                      "control X", DefaultEditorKit.cutAction,
-                           "COPY", DefaultEditorKit.copyAction,
-                          "PASTE", DefaultEditorKit.pasteAction,
-                            "CUT", DefaultEditorKit.cutAction,
-                 "control INSERT", DefaultEditorKit.copyAction,
-                   "shift INSERT", DefaultEditorKit.pasteAction,
-                   "shift DELETE", DefaultEditorKit.cutAction,
-                     "shift LEFT", DefaultEditorKit.selectionBackwardAction,
-                    "shift RIGHT", DefaultEditorKit.selectionForwardAction,
-                   "control LEFT", DefaultEditorKit.previousWordAction,
-                  "control RIGHT", DefaultEditorKit.nextWordAction,
-             "control shift LEFT", DefaultEditorKit.selectionPreviousWordAction,
-            "control shift RIGHT", DefaultEditorKit.selectionNextWordAction,
-                      "control A", DefaultEditorKit.selectAllAction,
-             "control BACK_SLASH", "unselect"/*DefaultEditorKit.unselectAction*/,
-                           "HOME", DefaultEditorKit.beginLineAction,
-                            "END", DefaultEditorKit.endLineAction,
-                     "shift HOME", DefaultEditorKit.selectionBeginLineAction,
-                      "shift END", DefaultEditorKit.selectionEndLineAction,
-                   "control HOME", DefaultEditorKit.beginAction,
-                    "control END", DefaultEditorKit.endAction,
-             "control shift HOME", DefaultEditorKit.selectionBeginAction,
-              "control shift END", DefaultEditorKit.selectionEndAction,
-                             "UP", DefaultEditorKit.upAction,
-                           "DOWN", DefaultEditorKit.downAction,
-                     "BACK_SPACE", DefaultEditorKit.deletePrevCharAction,
-               "shift BACK_SPACE", DefaultEditorKit.deletePrevCharAction,
-                         "ctrl H", DefaultEditorKit.deletePrevCharAction,
-                         "DELETE", DefaultEditorKit.deleteNextCharAction,
-                    "ctrl DELETE", DefaultEditorKit.deleteNextWordAction,
-                "ctrl BACK_SPACE", DefaultEditorKit.deletePrevWordAction,
-                          "RIGHT", DefaultEditorKit.forwardAction,
-                           "LEFT", DefaultEditorKit.backwardAction,
-                       "KP_RIGHT", DefaultEditorKit.forwardAction,
-                        "KP_LEFT", DefaultEditorKit.backwardAction,
-                        "PAGE_UP", DefaultEditorKit.pageUpAction,
-                      "PAGE_DOWN", DefaultEditorKit.pageDownAction,
-                  "shift PAGE_UP", "selection-page-up",
-                "shift PAGE_DOWN", "selection-page-down",
-             "ctrl shift PAGE_UP", "selection-page-left",
-           "ctrl shift PAGE_DOWN", "selection-page-right",
-                       "shift UP", DefaultEditorKit.selectionUpAction,
-                     "shift DOWN", DefaultEditorKit.selectionDownAction,
-                          "ENTER", DefaultEditorKit.insertBreakAction,
-                            "TAB", DefaultEditorKit.insertTabAction,
-                      "control T", "next-link-action",
-                "control shift T", "previous-link-action",
-                  "control SPACE", "activate-link-action",
-                "control shift O", "toggle-componentOrientation"/*DefaultEditorKit.toggleComponentOrientation*/
-        });
-
-        Object menuItemAcceleratorDelimiter = "+";
-
-        Object ControlBackgroundColor = new DesktopProperty(
-                                                       "win.3d.backgroundColor",
-                                                        table.get("control"));
-        Object ControlLightColor      = new DesktopProperty(
-                                                       "win.3d.lightColor",
-                                                        table.get("controlHighlight"));
-        Object ControlHighlightColor  = new DesktopProperty(
-                                                       "win.3d.highlightColor",
-                                                        table.get("controlLtHighlight"));
-        Object ControlShadowColor     = new DesktopProperty(
-                                                       "win.3d.shadowColor",
-                                                        table.get("controlShadow"));
-        Object ControlDarkShadowColor = new DesktopProperty(
-                                                       "win.3d.darkShadowColor",
-                                                        table.get("controlDkShadow"));
-        Object ControlTextColor       = new DesktopProperty(
-                                                       "win.button.textColor",
-                                                        table.get("controlText"));
-        Object MenuBackgroundColor    = new DesktopProperty(
-                                                       "win.menu.backgroundColor",
-                                                        table.get("menu"));
-        Object MenuBarBackgroundColor = new DesktopProperty(
-                                                       "win.menubar.backgroundColor",
-                                                        table.get("menu"));
-        Object MenuTextColor          = new DesktopProperty(
-                                                       "win.menu.textColor",
-                                                        table.get("menuText"));
-        Object SelectionBackgroundColor = new DesktopProperty(
-                                                       "win.item.highlightColor",
-                                                        table.get("textHighlight"));
-        Object SelectionTextColor     = new DesktopProperty(
-                                                       "win.item.highlightTextColor",
-                                                        table.get("textHighlightText"));
-        Object WindowBackgroundColor  = new DesktopProperty(
-                                                       "win.frame.backgroundColor",
-                                                        table.get("window"));
-        Object WindowTextColor        = new DesktopProperty(
-                                                       "win.frame.textColor",
-                                                        table.get("windowText"));
-        Object WindowBorderWidth      = new DesktopProperty(
-                                                       "win.frame.sizingBorderWidth",
-                                                       Integer.valueOf(1));
-        Object TitlePaneHeight        = new DesktopProperty(
-                                                       "win.frame.captionHeight",
-                                                       Integer.valueOf(18));
-        Object TitleButtonWidth       = new DesktopProperty(
-                                                       "win.frame.captionButtonWidth",
-                                                       Integer.valueOf(16));
-        Object TitleButtonHeight      = new DesktopProperty(
-                                                       "win.frame.captionButtonHeight",
-                                                       Integer.valueOf(16));
-        Object InactiveTextColor      = new DesktopProperty(
-                                                       "win.text.grayedTextColor",
-                                                        table.get("textInactiveText"));
-        Object ScrollbarBackgroundColor = new DesktopProperty(
-                                                       "win.scrollbar.backgroundColor",
-                                                        table.get("scrollbar"));
-        Object buttonFocusColor = new FocusColorProperty();
-
-        Object TextBackground         = new XPColorValue(Part.EP_EDIT, null, Prop.FILLCOLOR,
-                                                         WindowBackgroundColor);
-        //The following four lines were commented out as part of bug 4991597
-        //This code *is* correct, however it differs from WindowsXP and is, apparently
-        //a Windows XP bug. Until Windows fixes this bug, we shall also exhibit the same
-        //behavior
-        //Object ReadOnlyTextBackground = new XPColorValue(Part.EP_EDITTEXT, State.READONLY, Prop.FILLCOLOR,
-        //                                                 ControlBackgroundColor);
-        //Object DisabledTextBackground = new XPColorValue(Part.EP_EDITTEXT, State.DISABLED, Prop.FILLCOLOR,
-        //                                                 ControlBackgroundColor);
-        Object ReadOnlyTextBackground = ControlBackgroundColor;
-        Object DisabledTextBackground = ControlBackgroundColor;
-
-        Object MenuFont = dialogPlain12;
-        Object FixedControlFont = monospacedPlain12;
-        Object ControlFont = dialogPlain12;
-        Object MessageFont = dialogPlain12;
-        Object WindowFont = dialogBold12;
-        Object ToolTipFont = sansSerifPlain12;
-        Object IconFont = ControlFont;
-
-        Object scrollBarWidth = new DesktopProperty("win.scrollbar.width", Integer.valueOf(16));
-
-        Object menuBarHeight = new DesktopProperty("win.menu.height", null);
-
-        Object hotTrackingOn = new DesktopProperty("win.item.hotTrackingOn", true);
-
-        Object showMnemonics = new DesktopProperty("win.menu.keyboardCuesOn", Boolean.TRUE);
-
-        if (useSystemFontSettings) {
-            MenuFont = getDesktopFontValue("win.menu.font", MenuFont);
-            FixedControlFont = getDesktopFontValue("win.ansiFixed.font", FixedControlFont);
-            ControlFont = getDesktopFontValue("win.defaultGUI.font", ControlFont);
-            MessageFont = getDesktopFontValue("win.messagebox.font", MessageFont);
-            WindowFont = getDesktopFontValue("win.frame.captionFont", WindowFont);
-            IconFont    = getDesktopFontValue("win.icon.font", IconFont);
-            ToolTipFont = getDesktopFontValue("win.tooltip.font", ToolTipFont);
-
-            /* Put the desktop AA settings in the defaults.
-             * JComponent.setUI() retrieves this and makes it available
-             * as a client property on the JComponent. Use the same key name
-             * for both client property and UIDefaults.
-             * Also need to set up listeners for changes in these settings.
-             */
-            Object aaTextInfo = SwingUtilities2.AATextInfo.getAATextInfo(true);
-            table.put(SwingUtilities2.AA_TEXT_PROPERTY_KEY, aaTextInfo);
-            this.aaSettings =
-                new FontDesktopProperty(SunToolkit.DESKTOPFONTHINTS);
-        }
-        if (useSystemFontSizeSettings) {
-            MenuFont = new WindowsFontSizeProperty("win.menu.font.height", Font.DIALOG, Font.PLAIN, 12);
-            FixedControlFont = new WindowsFontSizeProperty("win.ansiFixed.font.height", Font.MONOSPACED,
-                       Font.PLAIN, 12);
-            ControlFont = new WindowsFontSizeProperty("win.defaultGUI.font.height", Font.DIALOG, Font.PLAIN, 12);
-            MessageFont = new WindowsFontSizeProperty("win.messagebox.font.height", Font.DIALOG, Font.PLAIN, 12);
-            WindowFont = new WindowsFontSizeProperty("win.frame.captionFont.height", Font.DIALOG, Font.BOLD, 12);
-            ToolTipFont = new WindowsFontSizeProperty("win.tooltip.font.height", Font.SANS_SERIF, Font.PLAIN, 12);
-            IconFont    = new WindowsFontSizeProperty("win.icon.font.height", Font.DIALOG, Font.PLAIN, 12);
-        }
-
-
-        if (!(this instanceof WindowsClassicLookAndFeel) &&
-            (OSInfo.getOSType() == OSInfo.OSType.WINDOWS &&
-             OSInfo.getWindowsVersion().compareTo(OSInfo.WINDOWS_XP) >= 0) &&
-            AccessController.doPrivileged(new GetPropertyAction("swing.noxp")) == null) {
-
-            // These desktop properties are not used directly, but are needed to
-            // trigger realoading of UI's.
-            this.themeActive = new TriggerDesktopProperty("win.xpstyle.themeActive");
-            this.dllName     = new TriggerDesktopProperty("win.xpstyle.dllName");
-            this.colorName   = new TriggerDesktopProperty("win.xpstyle.colorName");
-            this.sizeName    = new TriggerDesktopProperty("win.xpstyle.sizeName");
-        }
-
-
-        Object[] defaults = {
-            // *** Auditory Feedback
-            // this key defines which of the various cues to render
-            // Overridden from BasicL&F. This L&F should play all sounds
-            // all the time. The infrastructure decides what to play.
-            // This is disabled until sound bugs can be resolved.
-            "AuditoryCues.playList", null, // table.get("AuditoryCues.cueList"),
-
-            "Application.useSystemFontSettings", Boolean.valueOf(useSystemFontSettings),
-
-            "TextField.focusInputMap", fieldInputMap,
-            "PasswordField.focusInputMap", passwordInputMap,
-            "TextArea.focusInputMap", multilineInputMap,
-            "TextPane.focusInputMap", multilineInputMap,
-            "EditorPane.focusInputMap", multilineInputMap,
-
-            // Buttons
-            "Button.font", ControlFont,
-            "Button.background", ControlBackgroundColor,
-            // Button.foreground, Button.shadow, Button.darkShadow,
-            // Button.disabledForground, and Button.disabledShadow are only
-            // used for Windows Classic. Windows XP will use colors
-            // from the current visual style.
-            "Button.foreground", ControlTextColor,
-            "Button.shadow", ControlShadowColor,
-            "Button.darkShadow", ControlDarkShadowColor,
-            "Button.light", ControlLightColor,
-            "Button.highlight", ControlHighlightColor,
-            "Button.disabledForeground", InactiveTextColor,
-            "Button.disabledShadow", ControlHighlightColor,
-            "Button.focus", buttonFocusColor,
-            "Button.dashedRectGapX", new XPValue(Integer.valueOf(3), Integer.valueOf(5)),
-            "Button.dashedRectGapY", new XPValue(Integer.valueOf(3), Integer.valueOf(4)),
-            "Button.dashedRectGapWidth", new XPValue(Integer.valueOf(6), Integer.valueOf(10)),
-            "Button.dashedRectGapHeight", new XPValue(Integer.valueOf(6), Integer.valueOf(8)),
-            "Button.textShiftOffset", new XPValue(Integer.valueOf(0),
-                                                  Integer.valueOf(1)),
-            // W2K keyboard navigation hidding.
-            "Button.showMnemonics", showMnemonics,
-            "Button.focusInputMap",
-               new UIDefaults.LazyInputMap(new Object[] {
-                            "SPACE", "pressed",
-                   "released SPACE", "released"
-                 }),
-
-            "Caret.width",
-                  new DesktopProperty("win.caret.width", null),
-
-            "CheckBox.font", ControlFont,
-            "CheckBox.interiorBackground", WindowBackgroundColor,
-            "CheckBox.background", ControlBackgroundColor,
-            "CheckBox.foreground", WindowTextColor,
-            "CheckBox.shadow", ControlShadowColor,
-            "CheckBox.darkShadow", ControlDarkShadowColor,
-            "CheckBox.light", ControlLightColor,
-            "CheckBox.highlight", ControlHighlightColor,
-            "CheckBox.focus", buttonFocusColor,
-            "CheckBox.focusInputMap",
-               new UIDefaults.LazyInputMap(new Object[] {
-                            "SPACE", "pressed",
-                   "released SPACE", "released"
-                 }),
-            // margin is 2 all the way around, BasicBorders.RadioButtonBorder
-            // (checkbox uses RadioButtonBorder) is 2 all the way around too.
-            "CheckBox.totalInsets", new Insets(4, 4, 4, 4),
-
-            "CheckBoxMenuItem.font", MenuFont,
-            "CheckBoxMenuItem.background", MenuBackgroundColor,
-            "CheckBoxMenuItem.foreground", MenuTextColor,
-            "CheckBoxMenuItem.selectionForeground", SelectionTextColor,
-            "CheckBoxMenuItem.selectionBackground", SelectionBackgroundColor,
-            "CheckBoxMenuItem.acceleratorForeground", MenuTextColor,
-            "CheckBoxMenuItem.acceleratorSelectionForeground", SelectionTextColor,
-            "CheckBoxMenuItem.commandSound", "win.sound.menuCommand",
-
-            "ComboBox.font", ControlFont,
-            "ComboBox.background", WindowBackgroundColor,
-            "ComboBox.foreground", WindowTextColor,
-            "ComboBox.buttonBackground", ControlBackgroundColor,
-            "ComboBox.buttonShadow", ControlShadowColor,
-            "ComboBox.buttonDarkShadow", ControlDarkShadowColor,
-            "ComboBox.buttonHighlight", ControlHighlightColor,
-            "ComboBox.selectionBackground", SelectionBackgroundColor,
-            "ComboBox.selectionForeground", SelectionTextColor,
-            "ComboBox.editorBorder", new XPValue(new EmptyBorder(1,2,1,1),
-                                                 new EmptyBorder(1,4,1,4)),
-            "ComboBox.disabledBackground",
-                        new XPColorValue(Part.CP_COMBOBOX, State.DISABLED,
-                        Prop.FILLCOLOR, DisabledTextBackground),
-            "ComboBox.disabledForeground",
-                        new XPColorValue(Part.CP_COMBOBOX, State.DISABLED,
-                        Prop.TEXTCOLOR, InactiveTextColor),
-            "ComboBox.ancestorInputMap", new UIDefaults.LazyInputMap(new Object[] {
-                   "ESCAPE", "hidePopup",
-                  "PAGE_UP", "pageUpPassThrough",
-                "PAGE_DOWN", "pageDownPassThrough",
-                     "HOME", "homePassThrough",
-                      "END", "endPassThrough",
-                     "DOWN", "selectNext2",
-                  "KP_DOWN", "selectNext2",
-                       "UP", "selectPrevious2",
-                    "KP_UP", "selectPrevious2",
-                    "ENTER", "enterPressed",
-                       "F4", "togglePopup",
-                 "alt DOWN", "togglePopup",
-              "alt KP_DOWN", "togglePopup",
-                   "alt UP", "togglePopup",
-                "alt KP_UP", "togglePopup"
-              }),
-
-            // DeskTop.
-            "Desktop.background", new DesktopProperty(
-                                                 "win.desktop.backgroundColor",
-                                                  table.get("desktop")),
-            "Desktop.ancestorInputMap",
-               new UIDefaults.LazyInputMap(new Object[] {
-                   "ctrl F5", "restore",
-                   "ctrl F4", "close",
-                   "ctrl F7", "move",
-                   "ctrl F8", "resize",
-                   "RIGHT", "right",
-                   "KP_RIGHT", "right",
-                   "LEFT", "left",
-                   "KP_LEFT", "left",
-                   "UP", "up",
-                   "KP_UP", "up",
-                   "DOWN", "down",
-                   "KP_DOWN", "down",
-                   "ESCAPE", "escape",
-                   "ctrl F9", "minimize",
-                   "ctrl F10", "maximize",
-                   "ctrl F6", "selectNextFrame",
-                   "ctrl TAB", "selectNextFrame",
-                   "ctrl alt F6", "selectNextFrame",
-                   "shift ctrl alt F6", "selectPreviousFrame",
-                   "ctrl F12", "navigateNext",
-                   "shift ctrl F12", "navigatePrevious"
-               }),
-
-            // DesktopIcon
-            "DesktopIcon.width", Integer.valueOf(160),
-
-            "EditorPane.font", ControlFont,
-            "EditorPane.background", WindowBackgroundColor,
-            "EditorPane.foreground", WindowTextColor,
-            "EditorPane.selectionBackground", SelectionBackgroundColor,
-            "EditorPane.selectionForeground", SelectionTextColor,
-            "EditorPane.caretForeground", WindowTextColor,
-            "EditorPane.inactiveForeground", InactiveTextColor,
-            "EditorPane.inactiveBackground", WindowBackgroundColor,
-            "EditorPane.disabledBackground", DisabledTextBackground,
-
-            "FileChooser.homeFolderIcon",  new LazyWindowsIcon(null,
-                                                               "icons/HomeFolder.gif"),
-            "FileChooser.listFont", IconFont,
-            "FileChooser.listViewBackground", new XPColorValue(Part.LVP_LISTVIEW, null, Prop.FILLCOLOR,
-                                                               WindowBackgroundColor),
-            "FileChooser.listViewBorder", new XPBorderValue(Part.LVP_LISTVIEW,
-                                                  new SwingLazyValue(
-                                                        "javax.swing.plaf.BorderUIResource",
-                                                        "getLoweredBevelBorderUIResource")),
-            "FileChooser.listViewIcon",    new LazyWindowsIcon("fileChooserIcon ListView",
-                                                               "icons/ListView.gif"),
-            "FileChooser.listViewWindowsStyle", Boolean.TRUE,
-            "FileChooser.detailsViewIcon", new LazyWindowsIcon("fileChooserIcon DetailsView",
-                                                               "icons/DetailsView.gif"),
-            "FileChooser.viewMenuIcon", new LazyWindowsIcon("fileChooserIcon ViewMenu",
-                                                            "icons/ListView.gif"),
-            "FileChooser.upFolderIcon",    new LazyWindowsIcon("fileChooserIcon UpFolder",
-                                                               "icons/UpFolder.gif"),
-            "FileChooser.newFolderIcon",   new LazyWindowsIcon("fileChooserIcon NewFolder",
-                                                               "icons/NewFolder.gif"),
-            "FileChooser.useSystemExtensionHiding", Boolean.TRUE,
-
-            "FileChooser.usesSingleFilePane", Boolean.TRUE,
-            "FileChooser.noPlacesBar", new DesktopProperty("win.comdlg.noPlacesBar",
-                                                           Boolean.FALSE),
-            "FileChooser.ancestorInputMap",
-               new UIDefaults.LazyInputMap(new Object[] {
-                     "ESCAPE", "cancelSelection",
-                     "F2", "editFileName",
-                     "F5", "refresh",
-                     "BACK_SPACE", "Go Up"
-                 }),
-
-            "FileView.directoryIcon", SwingUtilities2.makeIcon(getClass(),
-                                                               WindowsLookAndFeel.class,
-                                                               "icons/Directory.gif"),
-            "FileView.fileIcon", SwingUtilities2.makeIcon(getClass(),
-                                                          WindowsLookAndFeel.class,
-                                                          "icons/File.gif"),
-            "FileView.computerIcon", SwingUtilities2.makeIcon(getClass(),
-                                                              WindowsLookAndFeel.class,
-                                                              "icons/Computer.gif"),
-            "FileView.hardDriveIcon", SwingUtilities2.makeIcon(getClass(),
-                                                               WindowsLookAndFeel.class,
-                                                               "icons/HardDrive.gif"),
-            "FileView.floppyDriveIcon", SwingUtilities2.makeIcon(getClass(),
-                                                                 WindowsLookAndFeel.class,
-                                                                 "icons/FloppyDrive.gif"),
-
-            "FormattedTextField.font", ControlFont,
-            "InternalFrame.titleFont", WindowFont,
-            "InternalFrame.titlePaneHeight",   TitlePaneHeight,
-            "InternalFrame.titleButtonWidth",  TitleButtonWidth,
-            "InternalFrame.titleButtonHeight", TitleButtonHeight,
-            "InternalFrame.titleButtonToolTipsOn", hotTrackingOn,
-            "InternalFrame.borderColor", ControlBackgroundColor,
-            "InternalFrame.borderShadow", ControlShadowColor,
-            "InternalFrame.borderDarkShadow", ControlDarkShadowColor,
-            "InternalFrame.borderHighlight", ControlHighlightColor,
-            "InternalFrame.borderLight", ControlLightColor,
-            "InternalFrame.borderWidth", WindowBorderWidth,
-            "InternalFrame.minimizeIconBackground", ControlBackgroundColor,
-            "InternalFrame.resizeIconHighlight", ControlLightColor,
-            "InternalFrame.resizeIconShadow", ControlShadowColor,
-            "InternalFrame.activeBorderColor", new DesktopProperty(
-                                                       "win.frame.activeBorderColor",
-                                                       table.get("windowBorder")),
-            "InternalFrame.inactiveBorderColor", new DesktopProperty(
-                                                       "win.frame.inactiveBorderColor",
-                                                       table.get("windowBorder")),
-            "InternalFrame.activeTitleBackground", new DesktopProperty(
-                                                        "win.frame.activeCaptionColor",
-                                                         table.get("activeCaption")),
-            "InternalFrame.activeTitleGradient", new DesktopProperty(
-                                                        "win.frame.activeCaptionGradientColor",
-                                                         table.get("activeCaption")),
-            "InternalFrame.activeTitleForeground", new DesktopProperty(
-                                                        "win.frame.captionTextColor",
-                                                         table.get("activeCaptionText")),
-            "InternalFrame.inactiveTitleBackground", new DesktopProperty(
-                                                        "win.frame.inactiveCaptionColor",
-                                                         table.get("inactiveCaption")),
-            "InternalFrame.inactiveTitleGradient", new DesktopProperty(
-                                                        "win.frame.inactiveCaptionGradientColor",
-                                                         table.get("inactiveCaption")),
-            "InternalFrame.inactiveTitleForeground", new DesktopProperty(
-                                                        "win.frame.inactiveCaptionTextColor",
-                                                         table.get("inactiveCaptionText")),
-
-            "InternalFrame.maximizeIcon",
-                WindowsIconFactory.createFrameMaximizeIcon(),
-            "InternalFrame.minimizeIcon",
-                WindowsIconFactory.createFrameMinimizeIcon(),
-            "InternalFrame.iconifyIcon",
-                WindowsIconFactory.createFrameIconifyIcon(),
-            "InternalFrame.closeIcon",
-                WindowsIconFactory.createFrameCloseIcon(),
-            "InternalFrame.icon",
-                new SwingLazyValue(
-        "com.sun.java.swing.plaf.windows.WindowsInternalFrameTitlePane$ScalableIconUIResource",
-                    // The constructor takes one arg: an array of UIDefaults.LazyValue
-                    // representing the icons
-                    new Object[][] { {
-                        SwingUtilities2.makeIcon(getClass(), BasicLookAndFeel.class, "icons/JavaCup16.png"),
-                        SwingUtilities2.makeIcon(getClass(), WindowsLookAndFeel.class, "icons/JavaCup32.png")
-                    } }),
-
-            // Internal Frame Auditory Cue Mappings
-            "InternalFrame.closeSound", "win.sound.close",
-            "InternalFrame.maximizeSound", "win.sound.maximize",
-            "InternalFrame.minimizeSound", "win.sound.minimize",
-            "InternalFrame.restoreDownSound", "win.sound.restoreDown",
-            "InternalFrame.restoreUpSound", "win.sound.restoreUp",
-
-            "InternalFrame.windowBindings", new Object[] {
-                "shift ESCAPE", "showSystemMenu",
-                  "ctrl SPACE", "showSystemMenu",
-                      "ESCAPE", "hideSystemMenu"},
-
-            // Label
-            "Label.font", ControlFont,
-            "Label.background", ControlBackgroundColor,
-            "Label.foreground", WindowTextColor,
-            "Label.disabledForeground", InactiveTextColor,
-            "Label.disabledShadow", ControlHighlightColor,
-
-            // List.
-            "List.font", ControlFont,
-            "List.background", WindowBackgroundColor,
-            "List.foreground", WindowTextColor,
-            "List.selectionBackground", SelectionBackgroundColor,
-            "List.selectionForeground", SelectionTextColor,
-            "List.lockToPositionOnScroll", Boolean.TRUE,
-            "List.focusInputMap",
-               new UIDefaults.LazyInputMap(new Object[] {
-                           "ctrl C", "copy",
-                           "ctrl V", "paste",
-                           "ctrl X", "cut",
-                             "COPY", "copy",
-                            "PASTE", "paste",
-                              "CUT", "cut",
-                   "control INSERT", "copy",
-                     "shift INSERT", "paste",
-                     "shift DELETE", "cut",
-                               "UP", "selectPreviousRow",
-                            "KP_UP", "selectPreviousRow",
-                         "shift UP", "selectPreviousRowExtendSelection",
-                      "shift KP_UP", "selectPreviousRowExtendSelection",
-                    "ctrl shift UP", "selectPreviousRowExtendSelection",
-                 "ctrl shift KP_UP", "selectPreviousRowExtendSelection",
-                          "ctrl UP", "selectPreviousRowChangeLead",
-                       "ctrl KP_UP", "selectPreviousRowChangeLead",
-                             "DOWN", "selectNextRow",
-                          "KP_DOWN", "selectNextRow",
-                       "shift DOWN", "selectNextRowExtendSelection",
-                    "shift KP_DOWN", "selectNextRowExtendSelection",
-                  "ctrl shift DOWN", "selectNextRowExtendSelection",
-               "ctrl shift KP_DOWN", "selectNextRowExtendSelection",
-                        "ctrl DOWN", "selectNextRowChangeLead",
-                     "ctrl KP_DOWN", "selectNextRowChangeLead",
-                             "LEFT", "selectPreviousColumn",
-                          "KP_LEFT", "selectPreviousColumn",
-                       "shift LEFT", "selectPreviousColumnExtendSelection",
-                    "shift KP_LEFT", "selectPreviousColumnExtendSelection",
-                  "ctrl shift LEFT", "selectPreviousColumnExtendSelection",
-               "ctrl shift KP_LEFT", "selectPreviousColumnExtendSelection",
-                        "ctrl LEFT", "selectPreviousColumnChangeLead",
-                     "ctrl KP_LEFT", "selectPreviousColumnChangeLead",
-                            "RIGHT", "selectNextColumn",
-                         "KP_RIGHT", "selectNextColumn",
-                      "shift RIGHT", "selectNextColumnExtendSelection",
-                   "shift KP_RIGHT", "selectNextColumnExtendSelection",
-                 "ctrl shift RIGHT", "selectNextColumnExtendSelection",
-              "ctrl shift KP_RIGHT", "selectNextColumnExtendSelection",
-                       "ctrl RIGHT", "selectNextColumnChangeLead",
-                    "ctrl KP_RIGHT", "selectNextColumnChangeLead",
-                             "HOME", "selectFirstRow",
-                       "shift HOME", "selectFirstRowExtendSelection",
-                  "ctrl shift HOME", "selectFirstRowExtendSelection",
-                        "ctrl HOME", "selectFirstRowChangeLead",
-                              "END", "selectLastRow",
-                        "shift END", "selectLastRowExtendSelection",
-                   "ctrl shift END", "selectLastRowExtendSelection",
-                         "ctrl END", "selectLastRowChangeLead",
-                          "PAGE_UP", "scrollUp",
-                    "shift PAGE_UP", "scrollUpExtendSelection",
-               "ctrl shift PAGE_UP", "scrollUpExtendSelection",
-                     "ctrl PAGE_UP", "scrollUpChangeLead",
-                        "PAGE_DOWN", "scrollDown",
-                  "shift PAGE_DOWN", "scrollDownExtendSelection",
-             "ctrl shift PAGE_DOWN", "scrollDownExtendSelection",
-                   "ctrl PAGE_DOWN", "scrollDownChangeLead",
-                           "ctrl A", "selectAll",
-                       "ctrl SLASH", "selectAll",
-                  "ctrl BACK_SLASH", "clearSelection",
-                            "SPACE", "addToSelection",
-                       "ctrl SPACE", "toggleAndAnchor",
-                      "shift SPACE", "extendTo",
-                 "ctrl shift SPACE", "moveSelectionTo"
-                 }),
-
-            // PopupMenu
-            "PopupMenu.font", MenuFont,
-            "PopupMenu.background", MenuBackgroundColor,
-            "PopupMenu.foreground", MenuTextColor,
-            "PopupMenu.popupSound", "win.sound.menuPopup",
-            "PopupMenu.consumeEventOnClose", Boolean.TRUE,
-
-            // Menus
-            "Menu.font", MenuFont,
-            "Menu.foreground", MenuTextColor,
-            "Menu.background", MenuBackgroundColor,
-            "Menu.useMenuBarBackgroundForTopLevel", Boolean.TRUE,
-            "Menu.selectionForeground", SelectionTextColor,
-            "Menu.selectionBackground", SelectionBackgroundColor,
-            "Menu.acceleratorForeground", MenuTextColor,
-            "Menu.acceleratorSelectionForeground", SelectionTextColor,
-            "Menu.menuPopupOffsetX", Integer.valueOf(0),
-            "Menu.menuPopupOffsetY", Integer.valueOf(0),
-            "Menu.submenuPopupOffsetX", Integer.valueOf(-4),
-            "Menu.submenuPopupOffsetY", Integer.valueOf(-3),
-            "Menu.crossMenuMnemonic", Boolean.FALSE,
-            "Menu.preserveTopLevelSelection", Boolean.TRUE,
-
-            // MenuBar.
-            "MenuBar.font", MenuFont,
-            "MenuBar.background", new XPValue(MenuBarBackgroundColor,
-                                              MenuBackgroundColor),
-            "MenuBar.foreground", MenuTextColor,
-            "MenuBar.shadow", ControlShadowColor,
-            "MenuBar.highlight", ControlHighlightColor,
-            "MenuBar.height", menuBarHeight,
-            "MenuBar.rolloverEnabled", hotTrackingOn,
-            "MenuBar.windowBindings", new Object[] {
-                "F10", "takeFocus" },
-
-            "MenuItem.font", MenuFont,
-            "MenuItem.acceleratorFont", MenuFont,
-            "MenuItem.foreground", MenuTextColor,
-            "MenuItem.background", MenuBackgroundColor,
-            "MenuItem.selectionForeground", SelectionTextColor,
-            "MenuItem.selectionBackground", SelectionBackgroundColor,
-            "MenuItem.disabledForeground", InactiveTextColor,
-            "MenuItem.acceleratorForeground", MenuTextColor,
-            "MenuItem.acceleratorSelectionForeground", SelectionTextColor,
-            "MenuItem.acceleratorDelimiter", menuItemAcceleratorDelimiter,
-                 // Menu Item Auditory Cue Mapping
-            "MenuItem.commandSound", "win.sound.menuCommand",
-             // indicates that keyboard navigation won't skip disabled menu items
-            "MenuItem.disabledAreNavigable", Boolean.TRUE,
-
-            "RadioButton.font", ControlFont,
-            "RadioButton.interiorBackground", WindowBackgroundColor,
-            "RadioButton.background", ControlBackgroundColor,
-            "RadioButton.foreground", WindowTextColor,
-            "RadioButton.shadow", ControlShadowColor,
-            "RadioButton.darkShadow", ControlDarkShadowColor,
-            "RadioButton.light", ControlLightColor,
-            "RadioButton.highlight", ControlHighlightColor,
-            "RadioButton.focus", buttonFocusColor,
-            "RadioButton.focusInputMap",
-               new UIDefaults.LazyInputMap(new Object[] {
-                          "SPACE", "pressed",
-                 "released SPACE", "released"
-              }),
-            // margin is 2 all the way around, BasicBorders.RadioButtonBorder
-            // is 2 all the way around too.
-            "RadioButton.totalInsets", new Insets(4, 4, 4, 4),
-
-
-            "RadioButtonMenuItem.font", MenuFont,
-            "RadioButtonMenuItem.foreground", MenuTextColor,
-            "RadioButtonMenuItem.background", MenuBackgroundColor,
-            "RadioButtonMenuItem.selectionForeground", SelectionTextColor,
-            "RadioButtonMenuItem.selectionBackground", SelectionBackgroundColor,
-            "RadioButtonMenuItem.disabledForeground", InactiveTextColor,
-            "RadioButtonMenuItem.acceleratorForeground", MenuTextColor,
-            "RadioButtonMenuItem.acceleratorSelectionForeground", SelectionTextColor,
-            "RadioButtonMenuItem.commandSound", "win.sound.menuCommand",
-
-            // OptionPane.
-            "OptionPane.font", MessageFont,
-            "OptionPane.messageFont", MessageFont,
-            "OptionPane.buttonFont", MessageFont,
-            "OptionPane.background", ControlBackgroundColor,
-            "OptionPane.foreground", WindowTextColor,
-            "OptionPane.buttonMinimumWidth", new XPDLUValue(50, 50, SwingConstants.EAST),
-            "OptionPane.messageForeground", ControlTextColor,
-            "OptionPane.errorIcon",       new LazyWindowsIcon("optionPaneIcon Error",
-                                                              "icons/Error.gif"),
-            "OptionPane.informationIcon", new LazyWindowsIcon("optionPaneIcon Information",
-                                                              "icons/Inform.gif"),
-            "OptionPane.questionIcon",    new LazyWindowsIcon("optionPaneIcon Question",
-                                                              "icons/Question.gif"),
-            "OptionPane.warningIcon",     new LazyWindowsIcon("optionPaneIcon Warning",
-                                                              "icons/Warn.gif"),
-            "OptionPane.windowBindings", new Object[] {
-                "ESCAPE", "close" },
-                 // Option Pane Auditory Cue Mappings
-            "OptionPane.errorSound", "win.sound.hand", // Error
-            "OptionPane.informationSound", "win.sound.asterisk", // Info Plain
-            "OptionPane.questionSound", "win.sound.question", // Question
-            "OptionPane.warningSound", "win.sound.exclamation", // Warning
-
-            "FormattedTextField.focusInputMap",
-              new UIDefaults.LazyInputMap(new Object[] {
-                           "ctrl C", DefaultEditorKit.copyAction,
-                           "ctrl V", DefaultEditorKit.pasteAction,
-                           "ctrl X", DefaultEditorKit.cutAction,
-                             "COPY", DefaultEditorKit.copyAction,
-                            "PASTE", DefaultEditorKit.pasteAction,
-                              "CUT", DefaultEditorKit.cutAction,
-                   "control INSERT", DefaultEditorKit.copyAction,
-                     "shift INSERT", DefaultEditorKit.pasteAction,
-                     "shift DELETE", DefaultEditorKit.cutAction,
-                       "shift LEFT", DefaultEditorKit.selectionBackwardAction,
-                    "shift KP_LEFT", DefaultEditorKit.selectionBackwardAction,
-                      "shift RIGHT", DefaultEditorKit.selectionForwardAction,
-                   "shift KP_RIGHT", DefaultEditorKit.selectionForwardAction,
-                        "ctrl LEFT", DefaultEditorKit.previousWordAction,
-                     "ctrl KP_LEFT", DefaultEditorKit.previousWordAction,
-                       "ctrl RIGHT", DefaultEditorKit.nextWordAction,
-                    "ctrl KP_RIGHT", DefaultEditorKit.nextWordAction,
-                  "ctrl shift LEFT", DefaultEditorKit.selectionPreviousWordAction,
-               "ctrl shift KP_LEFT", DefaultEditorKit.selectionPreviousWordAction,
-                 "ctrl shift RIGHT", DefaultEditorKit.selectionNextWordAction,
-              "ctrl shift KP_RIGHT", DefaultEditorKit.selectionNextWordAction,
-                           "ctrl A", DefaultEditorKit.selectAllAction,
-                             "HOME", DefaultEditorKit.beginLineAction,
-                              "END", DefaultEditorKit.endLineAction,
-                       "shift HOME", DefaultEditorKit.selectionBeginLineAction,
-                        "shift END", DefaultEditorKit.selectionEndLineAction,
-                       "BACK_SPACE", DefaultEditorKit.deletePrevCharAction,
-                 "shift BACK_SPACE", DefaultEditorKit.deletePrevCharAction,
-                           "ctrl H", DefaultEditorKit.deletePrevCharAction,
-                           "DELETE", DefaultEditorKit.deleteNextCharAction,
-                      "ctrl DELETE", DefaultEditorKit.deleteNextWordAction,
-                  "ctrl BACK_SPACE", DefaultEditorKit.deletePrevWordAction,
-                            "RIGHT", DefaultEditorKit.forwardAction,
-                             "LEFT", DefaultEditorKit.backwardAction,
-                         "KP_RIGHT", DefaultEditorKit.forwardAction,
-                          "KP_LEFT", DefaultEditorKit.backwardAction,
-                            "ENTER", JTextField.notifyAction,
-                  "ctrl BACK_SLASH", "unselect",
-                   "control shift O", "toggle-componentOrientation",
-                           "ESCAPE", "reset-field-edit",
-                               "UP", "increment",
-                            "KP_UP", "increment",
-                             "DOWN", "decrement",
-                          "KP_DOWN", "decrement",
-              }),
-            "FormattedTextField.inactiveBackground", ReadOnlyTextBackground,
-            "FormattedTextField.disabledBackground", DisabledTextBackground,
-
-            // *** Panel
-            "Panel.font", ControlFont,
-            "Panel.background", ControlBackgroundColor,
-            "Panel.foreground", WindowTextColor,
-
-            // *** PasswordField
-            "PasswordField.font", ControlFont,
-            "PasswordField.background", TextBackground,
-            "PasswordField.foreground", WindowTextColor,
-            "PasswordField.inactiveForeground", InactiveTextColor,      // for disabled
-            "PasswordField.inactiveBackground", ReadOnlyTextBackground, // for readonly
-            "PasswordField.disabledBackground", DisabledTextBackground, // for disabled
-            "PasswordField.selectionBackground", SelectionBackgroundColor,
-            "PasswordField.selectionForeground", SelectionTextColor,
-            "PasswordField.caretForeground",WindowTextColor,
-            "PasswordField.echoChar", new XPValue(new Character((char)0x25CF),
-                                                  new Character('*')),
-
-            // *** ProgressBar
-            "ProgressBar.font", ControlFont,
-            "ProgressBar.foreground",  SelectionBackgroundColor,
-            "ProgressBar.background", ControlBackgroundColor,
-            "ProgressBar.shadow", ControlShadowColor,
-            "ProgressBar.highlight", ControlHighlightColor,
-            "ProgressBar.selectionForeground", ControlBackgroundColor,
-            "ProgressBar.selectionBackground", SelectionBackgroundColor,
-            "ProgressBar.cellLength", Integer.valueOf(7),
-            "ProgressBar.cellSpacing", Integer.valueOf(2),
-            "ProgressBar.indeterminateInsets", new Insets(3, 3, 3, 3),
-
-            // *** RootPane.
-            // These bindings are only enabled when there is a default
-            // button set on the rootpane.
-            "RootPane.defaultButtonWindowKeyBindings", new Object[] {
-                             "ENTER", "press",
-                    "released ENTER", "release",
-                        "ctrl ENTER", "press",
-               "ctrl released ENTER", "release"
-              },
-
-            // *** ScrollBar.
-            "ScrollBar.background", ScrollbarBackgroundColor,
-            "ScrollBar.foreground", ControlBackgroundColor,
-            "ScrollBar.track", white,
-            "ScrollBar.trackForeground", ScrollbarBackgroundColor,
-            "ScrollBar.trackHighlight", black,
-            "ScrollBar.trackHighlightForeground", scrollBarTrackHighlight,
-            "ScrollBar.thumb", ControlBackgroundColor,
-            "ScrollBar.thumbHighlight", ControlHighlightColor,
-            "ScrollBar.thumbDarkShadow", ControlDarkShadowColor,
-            "ScrollBar.thumbShadow", ControlShadowColor,
-            "ScrollBar.width", scrollBarWidth,
-            "ScrollBar.ancestorInputMap",
-               new UIDefaults.LazyInputMap(new Object[] {
-                       "RIGHT", "positiveUnitIncrement",
-                    "KP_RIGHT", "positiveUnitIncrement",
-                        "DOWN", "positiveUnitIncrement",
-                     "KP_DOWN", "positiveUnitIncrement",
-                   "PAGE_DOWN", "positiveBlockIncrement",
-              "ctrl PAGE_DOWN", "positiveBlockIncrement",
-                        "LEFT", "negativeUnitIncrement",
-                     "KP_LEFT", "negativeUnitIncrement",
-                          "UP", "negativeUnitIncrement",
-                       "KP_UP", "negativeUnitIncrement",
-                     "PAGE_UP", "negativeBlockIncrement",
-                "ctrl PAGE_UP", "negativeBlockIncrement",
-                        "HOME", "minScroll",
-                         "END", "maxScroll"
-                 }),
-
-            // *** ScrollPane.
-            "ScrollPane.font", ControlFont,
-            "ScrollPane.background", ControlBackgroundColor,
-            "ScrollPane.foreground", ControlTextColor,
-            "ScrollPane.ancestorInputMap",
-               new UIDefaults.LazyInputMap(new Object[] {
-                           "RIGHT", "unitScrollRight",
-                        "KP_RIGHT", "unitScrollRight",
-                            "DOWN", "unitScrollDown",
-                         "KP_DOWN", "unitScrollDown",
-                            "LEFT", "unitScrollLeft",
-                         "KP_LEFT", "unitScrollLeft",
-                              "UP", "unitScrollUp",
-                           "KP_UP", "unitScrollUp",
-                         "PAGE_UP", "scrollUp",
-                       "PAGE_DOWN", "scrollDown",
-                    "ctrl PAGE_UP", "scrollLeft",
-                  "ctrl PAGE_DOWN", "scrollRight",
-                       "ctrl HOME", "scrollHome",
-                        "ctrl END", "scrollEnd"
-                 }),
-
-            // *** Separator
-            "Separator.background", ControlHighlightColor,
-            "Separator.foreground", ControlShadowColor,
-
-            // *** Slider.
-            "Slider.font", ControlFont,
-            "Slider.foreground", ControlBackgroundColor,
-            "Slider.background", ControlBackgroundColor,
-            "Slider.highlight", ControlHighlightColor,
-            "Slider.shadow", ControlShadowColor,
-            "Slider.focus", ControlDarkShadowColor,
-            "Slider.focusInputMap",
-               new UIDefaults.LazyInputMap(new Object[] {
-                       "RIGHT", "positiveUnitIncrement",
-                    "KP_RIGHT", "positiveUnitIncrement",
-                        "DOWN", "negativeUnitIncrement",
-                     "KP_DOWN", "negativeUnitIncrement",
-                   "PAGE_DOWN", "negativeBlockIncrement",
-                        "LEFT", "negativeUnitIncrement",
-                     "KP_LEFT", "negativeUnitIncrement",
-                          "UP", "positiveUnitIncrement",
-                       "KP_UP", "positiveUnitIncrement",
-                     "PAGE_UP", "positiveBlockIncrement",
-                        "HOME", "minScroll",
-                         "END", "maxScroll"
-                 }),
-
-            // Spinner
-            "Spinner.font", ControlFont,
-            "Spinner.ancestorInputMap",
-               new UIDefaults.LazyInputMap(new Object[] {
-                               "UP", "increment",
-                            "KP_UP", "increment",
-                             "DOWN", "decrement",
-                          "KP_DOWN", "decrement",
-               }),
-
-            // *** SplitPane
-            "SplitPane.background", ControlBackgroundColor,
-            "SplitPane.highlight", ControlHighlightColor,
-            "SplitPane.shadow", ControlShadowColor,
-            "SplitPane.darkShadow", ControlDarkShadowColor,
-            "SplitPane.dividerSize", Integer.valueOf(5),
-            "SplitPane.ancestorInputMap",
-               new UIDefaults.LazyInputMap(new Object[] {
-                        "UP", "negativeIncrement",
-                      "DOWN", "positiveIncrement",
-                      "LEFT", "negativeIncrement",
-                     "RIGHT", "positiveIncrement",
-                     "KP_UP", "negativeIncrement",
-                   "KP_DOWN", "positiveIncrement",
-                   "KP_LEFT", "negativeIncrement",
-                  "KP_RIGHT", "positiveIncrement",
-                      "HOME", "selectMin",
-                       "END", "selectMax",
-                        "F8", "startResize",
-                        "F6", "toggleFocus",
-                  "ctrl TAB", "focusOutForward",
-            "ctrl shift TAB", "focusOutBackward"
-               }),
-
-            // *** TabbedPane
-            "TabbedPane.tabsOverlapBorder", new XPValue(Boolean.TRUE, Boolean.FALSE),
-            "TabbedPane.tabInsets",         new XPValue(new InsetsUIResource(1, 4, 1, 4),
-                                                        new InsetsUIResource(0, 4, 1, 4)),
-            "TabbedPane.tabAreaInsets",     new XPValue(new InsetsUIResource(3, 2, 2, 2),
-                                                        new InsetsUIResource(3, 2, 0, 2)),
-            "TabbedPane.font", ControlFont,
-            "TabbedPane.background", ControlBackgroundColor,
-            "TabbedPane.foreground", ControlTextColor,
-            "TabbedPane.highlight", ControlHighlightColor,
-            "TabbedPane.light", ControlLightColor,
-            "TabbedPane.shadow", ControlShadowColor,
-            "TabbedPane.darkShadow", ControlDarkShadowColor,
-            "TabbedPane.focus", ControlTextColor,
-            "TabbedPane.focusInputMap",
-              new UIDefaults.LazyInputMap(new Object[] {
-                         "RIGHT", "navigateRight",
-                      "KP_RIGHT", "navigateRight",
-                          "LEFT", "navigateLeft",
-                       "KP_LEFT", "navigateLeft",
-                            "UP", "navigateUp",
-                         "KP_UP", "navigateUp",
-                          "DOWN", "navigateDown",
-                       "KP_DOWN", "navigateDown",
-                     "ctrl DOWN", "requestFocusForVisibleComponent",
-                  "ctrl KP_DOWN", "requestFocusForVisibleComponent",
-                }),
-            "TabbedPane.ancestorInputMap",
-               new UIDefaults.LazyInputMap(new Object[] {
-                         "ctrl TAB", "navigateNext",
-                   "ctrl shift TAB", "navigatePrevious",
-                   "ctrl PAGE_DOWN", "navigatePageDown",
-                     "ctrl PAGE_UP", "navigatePageUp",
-                          "ctrl UP", "requestFocus",
-                       "ctrl KP_UP", "requestFocus",
-                 }),
-
-            // *** Table
-            "Table.font", ControlFont,
-            "Table.foreground", ControlTextColor,  // cell text color
-            "Table.background", WindowBackgroundColor,  // cell background color
-            "Table.highlight", ControlHighlightColor,
-            "Table.light", ControlLightColor,
-            "Table.shadow", ControlShadowColor,
-            "Table.darkShadow", ControlDarkShadowColor,
-            "Table.selectionForeground", SelectionTextColor,
-            "Table.selectionBackground", SelectionBackgroundColor,
-            "Table.gridColor", gray,  // grid line color
-            "Table.focusCellBackground", WindowBackgroundColor,
-            "Table.focusCellForeground", ControlTextColor,
-            "Table.ancestorInputMap",
-               new UIDefaults.LazyInputMap(new Object[] {
-                               "ctrl C", "copy",
-                               "ctrl V", "paste",
-                               "ctrl X", "cut",
-                                 "COPY", "copy",
-                                "PASTE", "paste",
-                                  "CUT", "cut",
-                       "control INSERT", "copy",
-                         "shift INSERT", "paste",
-                         "shift DELETE", "cut",
-                                "RIGHT", "selectNextColumn",
-                             "KP_RIGHT", "selectNextColumn",
-                          "shift RIGHT", "selectNextColumnExtendSelection",
-                       "shift KP_RIGHT", "selectNextColumnExtendSelection",
-                     "ctrl shift RIGHT", "selectNextColumnExtendSelection",
-                  "ctrl shift KP_RIGHT", "selectNextColumnExtendSelection",
-                           "ctrl RIGHT", "selectNextColumnChangeLead",
-                        "ctrl KP_RIGHT", "selectNextColumnChangeLead",
-                                 "LEFT", "selectPreviousColumn",
-                              "KP_LEFT", "selectPreviousColumn",
-                           "shift LEFT", "selectPreviousColumnExtendSelection",
-                        "shift KP_LEFT", "selectPreviousColumnExtendSelection",
-                      "ctrl shift LEFT", "selectPreviousColumnExtendSelection",
-                   "ctrl shift KP_LEFT", "selectPreviousColumnExtendSelection",
-                            "ctrl LEFT", "selectPreviousColumnChangeLead",
-                         "ctrl KP_LEFT", "selectPreviousColumnChangeLead",
-                                 "DOWN", "selectNextRow",
-                              "KP_DOWN", "selectNextRow",
-                           "shift DOWN", "selectNextRowExtendSelection",
-                        "shift KP_DOWN", "selectNextRowExtendSelection",
-                      "ctrl shift DOWN", "selectNextRowExtendSelection",
-                   "ctrl shift KP_DOWN", "selectNextRowExtendSelection",
-                            "ctrl DOWN", "selectNextRowChangeLead",
-                         "ctrl KP_DOWN", "selectNextRowChangeLead",
-                                   "UP", "selectPreviousRow",
-                                "KP_UP", "selectPreviousRow",
-                             "shift UP", "selectPreviousRowExtendSelection",
-                          "shift KP_UP", "selectPreviousRowExtendSelection",
-                        "ctrl shift UP", "selectPreviousRowExtendSelection",
-                     "ctrl shift KP_UP", "selectPreviousRowExtendSelection",
-                              "ctrl UP", "selectPreviousRowChangeLead",
-                           "ctrl KP_UP", "selectPreviousRowChangeLead",
-                                 "HOME", "selectFirstColumn",
-                           "shift HOME", "selectFirstColumnExtendSelection",
-                      "ctrl shift HOME", "selectFirstRowExtendSelection",
-                            "ctrl HOME", "selectFirstRow",
-                                  "END", "selectLastColumn",
-                            "shift END", "selectLastColumnExtendSelection",
-                       "ctrl shift END", "selectLastRowExtendSelection",
-                             "ctrl END", "selectLastRow",
-                              "PAGE_UP", "scrollUpChangeSelection",
-                        "shift PAGE_UP", "scrollUpExtendSelection",
-                   "ctrl shift PAGE_UP", "scrollLeftExtendSelection",
-                         "ctrl PAGE_UP", "scrollLeftChangeSelection",
-                            "PAGE_DOWN", "scrollDownChangeSelection",
-                      "shift PAGE_DOWN", "scrollDownExtendSelection",
-                 "ctrl shift PAGE_DOWN", "scrollRightExtendSelection",
-                       "ctrl PAGE_DOWN", "scrollRightChangeSelection",
-                                  "TAB", "selectNextColumnCell",
-                            "shift TAB", "selectPreviousColumnCell",
-                                "ENTER", "selectNextRowCell",
-                          "shift ENTER", "selectPreviousRowCell",
-                               "ctrl A", "selectAll",
-                           "ctrl SLASH", "selectAll",
-                      "ctrl BACK_SLASH", "clearSelection",
-                               "ESCAPE", "cancel",
-                                   "F2", "startEditing",
-                                "SPACE", "addToSelection",
-                           "ctrl SPACE", "toggleAndAnchor",
-                          "shift SPACE", "extendTo",
-                     "ctrl shift SPACE", "moveSelectionTo",
-                                   "F8", "focusHeader"
-                 }),
-            "Table.sortIconHighlight", ControlShadowColor,
-            "Table.sortIconLight", white,
-
-            "TableHeader.font", ControlFont,
-            "TableHeader.foreground", ControlTextColor, // header text color
-            "TableHeader.background", ControlBackgroundColor, // header background
-            "TableHeader.focusCellBackground",
-                new XPValue(XPValue.NULL_VALUE,     // use default bg from XP styles
-                            WindowBackgroundColor), // or white bg otherwise
-
-            // *** TextArea
-            "TextArea.font", FixedControlFont,
-            "TextArea.background", WindowBackgroundColor,
-            "TextArea.foreground", WindowTextColor,
-            "TextArea.inactiveForeground", InactiveTextColor,
-            "TextArea.inactiveBackground", WindowBackgroundColor,
-            "TextArea.disabledBackground", DisabledTextBackground,
-            "TextArea.selectionBackground", SelectionBackgroundColor,
-            "TextArea.selectionForeground", SelectionTextColor,
-            "TextArea.caretForeground", WindowTextColor,
-
-            // *** TextField
-            "TextField.font", ControlFont,
-            "TextField.background", TextBackground,
-            "TextField.foreground", WindowTextColor,
-            "TextField.shadow", ControlShadowColor,
-            "TextField.darkShadow", ControlDarkShadowColor,
-            "TextField.light", ControlLightColor,
-            "TextField.highlight", ControlHighlightColor,
-            "TextField.inactiveForeground", InactiveTextColor,      // for disabled
-            "TextField.inactiveBackground", ReadOnlyTextBackground, // for readonly
-            "TextField.disabledBackground", DisabledTextBackground, // for disabled
-            "TextField.selectionBackground", SelectionBackgroundColor,
-            "TextField.selectionForeground", SelectionTextColor,
-            "TextField.caretForeground", WindowTextColor,
-
-            // *** TextPane
-            "TextPane.font", ControlFont,
-            "TextPane.background", WindowBackgroundColor,
-            "TextPane.foreground", WindowTextColor,
-            "TextPane.selectionBackground", SelectionBackgroundColor,
-            "TextPane.selectionForeground", SelectionTextColor,
-            "TextPane.inactiveBackground", WindowBackgroundColor,
-            "TextPane.disabledBackground", DisabledTextBackground,
-            "TextPane.caretForeground", WindowTextColor,
-
-            // *** TitledBorder
-            "TitledBorder.font", ControlFont,
-            "TitledBorder.titleColor",
-                        new XPColorValue(Part.BP_GROUPBOX, null, Prop.TEXTCOLOR,
-                                         WindowTextColor),
-
-            // *** ToggleButton
-            "ToggleButton.font", ControlFont,
-            "ToggleButton.background", ControlBackgroundColor,
-            "ToggleButton.foreground", ControlTextColor,
-            "ToggleButton.shadow", ControlShadowColor,
-            "ToggleButton.darkShadow", ControlDarkShadowColor,
-            "ToggleButton.light", ControlLightColor,
-            "ToggleButton.highlight", ControlHighlightColor,
-            "ToggleButton.focus", ControlTextColor,
-            "ToggleButton.textShiftOffset", Integer.valueOf(1),
-            "ToggleButton.focusInputMap",
-              new UIDefaults.LazyInputMap(new Object[] {
-                            "SPACE", "pressed",
-                   "released SPACE", "released"
-                }),
-
-            // *** ToolBar
-            "ToolBar.font", MenuFont,
-            "ToolBar.background", ControlBackgroundColor,
-            "ToolBar.foreground", ControlTextColor,
-            "ToolBar.shadow", ControlShadowColor,
-            "ToolBar.darkShadow", ControlDarkShadowColor,
-            "ToolBar.light", ControlLightColor,
-            "ToolBar.highlight", ControlHighlightColor,
-            "ToolBar.dockingBackground", ControlBackgroundColor,
-            "ToolBar.dockingForeground", red,
-            "ToolBar.floatingBackground", ControlBackgroundColor,
-            "ToolBar.floatingForeground", darkGray,
-            "ToolBar.ancestorInputMap",
-               new UIDefaults.LazyInputMap(new Object[] {
-                        "UP", "navigateUp",
-                     "KP_UP", "navigateUp",
-                      "DOWN", "navigateDown",
-                   "KP_DOWN", "navigateDown",
-                      "LEFT", "navigateLeft",
-                   "KP_LEFT", "navigateLeft",
-                     "RIGHT", "navigateRight",
-                  "KP_RIGHT", "navigateRight"
-                 }),
-            "ToolBar.separatorSize", null,
-
-            // *** ToolTip
-            "ToolTip.font", ToolTipFont,
-            "ToolTip.background", new DesktopProperty("win.tooltip.backgroundColor", table.get("info")),
-            "ToolTip.foreground", new DesktopProperty("win.tooltip.textColor", table.get("infoText")),
-
-        // *** ToolTipManager
-            "ToolTipManager.enableToolTipMode", "activeApplication",
-
-        // *** Tree
-            "Tree.selectionBorderColor", black,
-            "Tree.drawDashedFocusIndicator", Boolean.TRUE,
-            "Tree.lineTypeDashed", Boolean.TRUE,
-            "Tree.font", ControlFont,
-            "Tree.background", WindowBackgroundColor,
-            "Tree.foreground", WindowTextColor,
-            "Tree.hash", gray,
-            "Tree.leftChildIndent", Integer.valueOf(8),
-            "Tree.rightChildIndent", Integer.valueOf(11),
-            "Tree.textForeground", WindowTextColor,
-            "Tree.textBackground", WindowBackgroundColor,
-            "Tree.selectionForeground", SelectionTextColor,
-            "Tree.selectionBackground", SelectionBackgroundColor,
-            "Tree.expandedIcon", treeExpandedIcon,
-            "Tree.collapsedIcon", treeCollapsedIcon,
-            "Tree.openIcon",   new ActiveWindowsIcon("win.icon.shellIconBPP",
-                                   "shell32Icon 5", "icons/TreeOpen.gif"),
-            "Tree.closedIcon", new ActiveWindowsIcon("win.icon.shellIconBPP",
-                                   "shell32Icon 4", "icons/TreeClosed.gif"),
-            "Tree.focusInputMap",
-               new UIDefaults.LazyInputMap(new Object[] {
-                                    "ADD", "expand",
-                               "SUBTRACT", "collapse",
-                                 "ctrl C", "copy",
-                                 "ctrl V", "paste",
-                                 "ctrl X", "cut",
-                                   "COPY", "copy",
-                                  "PASTE", "paste",
-                                    "CUT", "cut",
-                         "control INSERT", "copy",
-                           "shift INSERT", "paste",
-                           "shift DELETE", "cut",
-                                     "UP", "selectPrevious",
-                                  "KP_UP", "selectPrevious",
-                               "shift UP", "selectPreviousExtendSelection",
-                            "shift KP_UP", "selectPreviousExtendSelection",
-                          "ctrl shift UP", "selectPreviousExtendSelection",
-                       "ctrl shift KP_UP", "selectPreviousExtendSelection",
-                                "ctrl UP", "selectPreviousChangeLead",
-                             "ctrl KP_UP", "selectPreviousChangeLead",
-                                   "DOWN", "selectNext",
-                                "KP_DOWN", "selectNext",
-                             "shift DOWN", "selectNextExtendSelection",
-                          "shift KP_DOWN", "selectNextExtendSelection",
-                        "ctrl shift DOWN", "selectNextExtendSelection",
-                     "ctrl shift KP_DOWN", "selectNextExtendSelection",
-                              "ctrl DOWN", "selectNextChangeLead",
-                           "ctrl KP_DOWN", "selectNextChangeLead",
-                                  "RIGHT", "selectChild",
-                               "KP_RIGHT", "selectChild",
-                                   "LEFT", "selectParent",
-                                "KP_LEFT", "selectParent",
-                                "PAGE_UP", "scrollUpChangeSelection",
-                          "shift PAGE_UP", "scrollUpExtendSelection",
-                     "ctrl shift PAGE_UP", "scrollUpExtendSelection",
-                           "ctrl PAGE_UP", "scrollUpChangeLead",
-                              "PAGE_DOWN", "scrollDownChangeSelection",
-                        "shift PAGE_DOWN", "scrollDownExtendSelection",
-                   "ctrl shift PAGE_DOWN", "scrollDownExtendSelection",
-                         "ctrl PAGE_DOWN", "scrollDownChangeLead",
-                                   "HOME", "selectFirst",
-                             "shift HOME", "selectFirstExtendSelection",
-                        "ctrl shift HOME", "selectFirstExtendSelection",
-                              "ctrl HOME", "selectFirstChangeLead",
-                                    "END", "selectLast",
-                              "shift END", "selectLastExtendSelection",
-                         "ctrl shift END", "selectLastExtendSelection",
-                               "ctrl END", "selectLastChangeLead",
-                                     "F2", "startEditing",
-                                 "ctrl A", "selectAll",
-                             "ctrl SLASH", "selectAll",
-                        "ctrl BACK_SLASH", "clearSelection",
-                              "ctrl LEFT", "scrollLeft",
-                           "ctrl KP_LEFT", "scrollLeft",
-                             "ctrl RIGHT", "scrollRight",
-                          "ctrl KP_RIGHT", "scrollRight",
-                                  "SPACE", "addToSelection",
-                             "ctrl SPACE", "toggleAndAnchor",
-                            "shift SPACE", "extendTo",
-                       "ctrl shift SPACE", "moveSelectionTo"
-                 }),
-            "Tree.ancestorInputMap",
-               new UIDefaults.LazyInputMap(new Object[] {
-                     "ESCAPE", "cancel"
-                 }),
-
-            // *** Viewport
-            "Viewport.font", ControlFont,
-            "Viewport.background", ControlBackgroundColor,
-            "Viewport.foreground", WindowTextColor,
-
-
-        };
-
-        table.putDefaults(defaults);
-        table.putDefaults(getLazyValueDefaults());
-        initVistaComponentDefaults(table);
-    }
-
-    static boolean isOnVista() {
-        return OSInfo.getOSType() == OSInfo.OSType.WINDOWS
-                && OSInfo.getWindowsVersion().compareTo(OSInfo.WINDOWS_VISTA) >= 0;
-    }
-
-    private void initVistaComponentDefaults(UIDefaults table) {
-        if (! isOnVista()) {
-            return;
-        }
-        /* START handling menus for Vista */
-        String[] menuClasses = { "MenuItem", "Menu",
-                "CheckBoxMenuItem", "RadioButtonMenuItem",
-        };
-
-        Object menuDefaults[] = new Object[menuClasses.length * 2];
-
-        /* all the menus need to be non opaque. */
-        for (int i = 0, j = 0; i < menuClasses.length; i++) {
-            String key = menuClasses[i] + ".opaque";
-            Object oldValue = table.get(key);
-            menuDefaults[j++] = key;
-            menuDefaults[j++] =
-                new XPValue(Boolean.FALSE, oldValue);
-        }
-        table.putDefaults(menuDefaults);
-
-        /*
-         * acceleratorSelectionForeground color is the same as
-         * acceleratorForeground
-         */
-        for (int i = 0, j = 0; i < menuClasses.length; i++) {
-            String key = menuClasses[i] + ".acceleratorSelectionForeground";
-            Object oldValue = table.get(key);
-            menuDefaults[j++] = key;
-            menuDefaults[j++] =
-                new XPValue(
-                    table.getColor(
-                        menuClasses[i] + ".acceleratorForeground"),
-                        oldValue);
-        }
-        table.putDefaults(menuDefaults);
-
-        /* they have the same MenuItemCheckIconFactory */
-        VistaMenuItemCheckIconFactory menuItemCheckIconFactory =
-            WindowsIconFactory.getMenuItemCheckIconFactory();
-        for (int i = 0, j = 0; i < menuClasses.length; i++) {
-            String key = menuClasses[i] + ".checkIconFactory";
-            Object oldValue = table.get(key);
-            menuDefaults[j++] = key;
-            menuDefaults[j++] =
-                new XPValue(menuItemCheckIconFactory, oldValue);
-        }
-        table.putDefaults(menuDefaults);
-
-        for (int i = 0, j = 0; i < menuClasses.length; i++) {
-            String key = menuClasses[i] + ".checkIcon";
-            Object oldValue = table.get(key);
-            menuDefaults[j++] = key;
-            menuDefaults[j++] =
-                new XPValue(menuItemCheckIconFactory.getIcon(menuClasses[i]),
-                    oldValue);
-        }
-        table.putDefaults(menuDefaults);
-
-
-        /* height can be even */
-        for (int i = 0, j = 0; i < menuClasses.length; i++) {
-            String key = menuClasses[i] + ".evenHeight";
-            Object oldValue = table.get(key);
-            menuDefaults[j++] = key;
-            menuDefaults[j++] = new XPValue(Boolean.TRUE, oldValue);
-        }
-        table.putDefaults(menuDefaults);
-
-        /* no margins */
-        InsetsUIResource insets = new InsetsUIResource(0, 0, 0, 0);
-        for (int i = 0, j = 0; i < menuClasses.length; i++) {
-            String key = menuClasses[i] + ".margin";
-            Object oldValue = table.get(key);
-            menuDefaults[j++] = key;
-            menuDefaults[j++] = new XPValue(insets, oldValue);
-        }
-        table.putDefaults(menuDefaults);
-
-        /* set checkIcon offset */
-        Integer checkIconOffsetInteger =
-            Integer.valueOf(0);
-        for (int i = 0, j = 0; i < menuClasses.length; i++) {
-            String key = menuClasses[i] + ".checkIconOffset";
-            Object oldValue = table.get(key);
-            menuDefaults[j++] = key;
-            menuDefaults[j++] =
-                new XPValue(checkIconOffsetInteger, oldValue);
-        }
-        table.putDefaults(menuDefaults);
-
-        /* set width of the gap after check icon */
-        Integer afterCheckIconGap = WindowsPopupMenuUI.getSpanBeforeGutter()
-                + WindowsPopupMenuUI.getGutterWidth()
-                + WindowsPopupMenuUI.getSpanAfterGutter();
-        for (int i = 0, j = 0; i < menuClasses.length; i++) {
-            String key = menuClasses[i] + ".afterCheckIconGap";
-            Object oldValue = table.get(key);
-            menuDefaults[j++] = key;
-            menuDefaults[j++] =
-                new XPValue(afterCheckIconGap, oldValue);
-        }
-        table.putDefaults(menuDefaults);
-
-        /* text is started after this position */
-        Object minimumTextOffset = new UIDefaults.ActiveValue() {
-            public Object createValue(UIDefaults table) {
-                return VistaMenuItemCheckIconFactory.getIconWidth()
-                + WindowsPopupMenuUI.getSpanBeforeGutter()
-                + WindowsPopupMenuUI.getGutterWidth()
-                + WindowsPopupMenuUI.getSpanAfterGutter();
-            }
-        };
-        for (int i = 0, j = 0; i < menuClasses.length; i++) {
-            String key = menuClasses[i] + ".minimumTextOffset";
-            Object oldValue = table.get(key);
-            menuDefaults[j++] = key;
-            menuDefaults[j++] = new XPValue(minimumTextOffset, oldValue);
-        }
-        table.putDefaults(menuDefaults);
-
-        /*
-         * JPopupMenu has a bit of free space around menu items
-         */
-        String POPUP_MENU_BORDER = "PopupMenu.border";
-
-        Object popupMenuBorder = new XPBorderValue(Part.MENU,
-                new SwingLazyValue(
-                  "javax.swing.plaf.basic.BasicBorders",
-                  "getInternalFrameBorder"),
-                  BorderFactory.createEmptyBorder(2, 2, 2, 2));
-        table.put(POPUP_MENU_BORDER, popupMenuBorder);
-        /* END handling menus for Vista */
-
-        /* START table handling for Vista */
-        table.put("Table.ascendingSortIcon", new XPValue(
-            new SkinIcon(Part.HP_HEADERSORTARROW, State.SORTEDDOWN),
-            new SwingLazyValue(
-                "sun.swing.plaf.windows.ClassicSortArrowIcon",
-                null, new Object[] { Boolean.TRUE })));
-        table.put("Table.descendingSortIcon", new XPValue(
-            new SkinIcon(Part.HP_HEADERSORTARROW, State.SORTEDUP),
-            new SwingLazyValue(
-                "sun.swing.plaf.windows.ClassicSortArrowIcon",
-                null, new Object[] { Boolean.FALSE })));
-        /* END table handling for Vista */
-    }
-
-    /**
-     * If we support loading of fonts from the desktop this will return
-     * a DesktopProperty representing the font. If the font can't be
-     * represented in the current encoding this will return null and
-     * turn off the use of system fonts.
-     */
-    private Object getDesktopFontValue(String fontName, Object backup) {
-        if (useSystemFontSettings) {
-            return new WindowsFontProperty(fontName, backup);
-        }
-        return null;
-    }
-
-    // When a desktop property change is detected, these classes must be
-    // reinitialized in the defaults table to ensure the classes reference
-    // the updated desktop property values (colors mostly)
-    //
-    private Object[] getLazyValueDefaults() {
-
-        Object buttonBorder =
-            new XPBorderValue(Part.BP_PUSHBUTTON,
-                              new SwingLazyValue(
-                               "javax.swing.plaf.basic.BasicBorders",
-                               "getButtonBorder"));
-
-        Object textFieldBorder =
-            new XPBorderValue(Part.EP_EDIT,
-                              new SwingLazyValue(
-                               "javax.swing.plaf.basic.BasicBorders",
-                               "getTextFieldBorder"));
-
-        Object textFieldMargin =
-            new XPValue(new InsetsUIResource(2, 2, 2, 2),
-                        new InsetsUIResource(1, 1, 1, 1));
-
-        Object spinnerBorder =
-            new XPBorderValue(Part.EP_EDIT, textFieldBorder,
-                              new EmptyBorder(2, 2, 2, 2));
-
-        Object spinnerArrowInsets =
-            new XPValue(new InsetsUIResource(1, 1, 1, 1),
-                        null);
-
-        Object comboBoxBorder = new XPBorderValue(Part.CP_COMBOBOX, textFieldBorder);
-
-        // For focus rectangle for cells and trees.
-        Object focusCellHighlightBorder = new SwingLazyValue(
-                          "com.sun.java.swing.plaf.windows.WindowsBorders",
-                          "getFocusCellHighlightBorder");
-
-        Object etchedBorder = new SwingLazyValue(
-                          "javax.swing.plaf.BorderUIResource",
-                          "getEtchedBorderUIResource");
-
-        Object internalFrameBorder = new SwingLazyValue(
-                "com.sun.java.swing.plaf.windows.WindowsBorders",
-                "getInternalFrameBorder");
-
-        Object loweredBevelBorder = new SwingLazyValue(
-                          "javax.swing.plaf.BorderUIResource",
-                          "getLoweredBevelBorderUIResource");
-
-
-        Object marginBorder = new SwingLazyValue(
-                            "javax.swing.plaf.basic.BasicBorders$MarginBorder");
-
-        Object menuBarBorder = new SwingLazyValue(
-                "javax.swing.plaf.basic.BasicBorders",
-                "getMenuBarBorder");
-
-
-        Object popupMenuBorder = new XPBorderValue(Part.MENU,
-                        new SwingLazyValue(
-                          "javax.swing.plaf.basic.BasicBorders",
-                          "getInternalFrameBorder"));
-
-        // *** ProgressBar
-        Object progressBarBorder = new SwingLazyValue(
-                              "com.sun.java.swing.plaf.windows.WindowsBorders",
-                              "getProgressBarBorder");
-
-        Object radioButtonBorder = new SwingLazyValue(
-                               "javax.swing.plaf.basic.BasicBorders",
-                               "getRadioButtonBorder");
-
-        Object scrollPaneBorder =
-            new XPBorderValue(Part.LBP_LISTBOX, textFieldBorder);
-
-        Object tableScrollPaneBorder =
-            new XPBorderValue(Part.LBP_LISTBOX, loweredBevelBorder);
-
-        Object tableHeaderBorder = new SwingLazyValue(
-                          "com.sun.java.swing.plaf.windows.WindowsBorders",
-                          "getTableHeaderBorder");
-
-        // *** ToolBar
-        Object toolBarBorder = new SwingLazyValue(
-                              "com.sun.java.swing.plaf.windows.WindowsBorders",
-                              "getToolBarBorder");
-
-        // *** ToolTips
-        Object toolTipBorder = new SwingLazyValue(
-                              "javax.swing.plaf.BorderUIResource",
-                              "getBlackLineBorderUIResource");
-
-
-
-        Object checkBoxIcon = new SwingLazyValue(
-                     "com.sun.java.swing.plaf.windows.WindowsIconFactory",
-                     "getCheckBoxIcon");
-
-        Object radioButtonIcon = new SwingLazyValue(
-                     "com.sun.java.swing.plaf.windows.WindowsIconFactory",
-                     "getRadioButtonIcon");
-
-        Object radioButtonMenuItemIcon = new SwingLazyValue(
-                     "com.sun.java.swing.plaf.windows.WindowsIconFactory",
-                     "getRadioButtonMenuItemIcon");
-
-        Object menuItemCheckIcon = new SwingLazyValue(
-                     "com.sun.java.swing.plaf.windows.WindowsIconFactory",
-                     "getMenuItemCheckIcon");
-
-        Object menuItemArrowIcon = new SwingLazyValue(
-                     "com.sun.java.swing.plaf.windows.WindowsIconFactory",
-                     "getMenuItemArrowIcon");
-
-        Object menuArrowIcon = new SwingLazyValue(
-                     "com.sun.java.swing.plaf.windows.WindowsIconFactory",
-                     "getMenuArrowIcon");
-
-
-        Object[] lazyDefaults = {
-            "Button.border", buttonBorder,
-            "CheckBox.border", radioButtonBorder,
-            "ComboBox.border", comboBoxBorder,
-            "DesktopIcon.border", internalFrameBorder,
-            "FormattedTextField.border", textFieldBorder,
-            "FormattedTextField.margin", textFieldMargin,
-            "InternalFrame.border", internalFrameBorder,
-            "List.focusCellHighlightBorder", focusCellHighlightBorder,
-            "Table.focusCellHighlightBorder", focusCellHighlightBorder,
-            "Menu.border", marginBorder,
-            "MenuBar.border", menuBarBorder,
-            "MenuItem.border", marginBorder,
-            "PasswordField.border", textFieldBorder,
-            "PasswordField.margin", textFieldMargin,
-            "PopupMenu.border", popupMenuBorder,
-            "ProgressBar.border", progressBarBorder,
-            "RadioButton.border", radioButtonBorder,
-            "ScrollPane.border", scrollPaneBorder,
-            "Spinner.border", spinnerBorder,
-            "Spinner.arrowButtonInsets", spinnerArrowInsets,
-            "Spinner.arrowButtonSize", new Dimension(17, 9),
-            "Table.scrollPaneBorder", tableScrollPaneBorder,
-            "TableHeader.cellBorder", tableHeaderBorder,
-            "TextArea.margin", textFieldMargin,
-            "TextField.border", textFieldBorder,
-            "TextField.margin", textFieldMargin,
-            "TitledBorder.border",
-                        new XPBorderValue(Part.BP_GROUPBOX, etchedBorder),
-            "ToggleButton.border", radioButtonBorder,
-            "ToolBar.border", toolBarBorder,
-            "ToolTip.border", toolTipBorder,
-
-            "CheckBox.icon", checkBoxIcon,
-            "Menu.arrowIcon", menuArrowIcon,
-            "MenuItem.checkIcon", menuItemCheckIcon,
-            "MenuItem.arrowIcon", menuItemArrowIcon,
-            "RadioButton.icon", radioButtonIcon,
-            "RadioButtonMenuItem.checkIcon", radioButtonMenuItemIcon,
-            "InternalFrame.layoutTitlePaneAtOrigin",
-                        new XPValue(Boolean.TRUE, Boolean.FALSE),
-            "Table.ascendingSortIcon", new XPValue(
-                  new SwingLazyValue(
-                     "sun.swing.icon.SortArrowIcon",
-                     null, new Object[] { Boolean.TRUE,
-                                          "Table.sortIconColor" }),
-                  new SwingLazyValue(
-                      "sun.swing.plaf.windows.ClassicSortArrowIcon",
-                      null, new Object[] { Boolean.TRUE })),
-            "Table.descendingSortIcon", new XPValue(
-                  new SwingLazyValue(
-                     "sun.swing.icon.SortArrowIcon",
-                     null, new Object[] { Boolean.FALSE,
-                                          "Table.sortIconColor" }),
-                  new SwingLazyValue(
-                     "sun.swing.plaf.windows.ClassicSortArrowIcon",
-                     null, new Object[] { Boolean.FALSE })),
-        };
-
-        return lazyDefaults;
-    }
-
-    public void uninitialize() {
-        super.uninitialize();
-
-        if (WindowsPopupMenuUI.mnemonicListener != null) {
-            MenuSelectionManager.defaultManager().
-                removeChangeListener(WindowsPopupMenuUI.mnemonicListener);
-        }
-        KeyboardFocusManager.getCurrentKeyboardFocusManager().
-            removeKeyEventPostProcessor(WindowsRootPaneUI.altProcessor);
-        DesktopProperty.flushUnreferencedProperties();
-    }
-
-
-    // Toggle flag for drawing the mnemonic state
-    private static boolean isMnemonicHidden = true;
-
-    // Flag which indicates that the Win98/Win2k/WinME features
-    // should be disabled.
-    private static boolean isClassicWindows = false;
-
-    /**
-     * Sets the state of the hide mnemonic flag. This flag is used by the
-     * component UI delegates to determine if the mnemonic should be rendered.
-     * This method is a non operation if the underlying operating system
-     * does not support the mnemonic hiding feature.
-     *
-     * @param hide true if mnemonics should be hidden
-     * @since 1.4
-     */
-    public static void setMnemonicHidden(boolean hide) {
-        if (UIManager.getBoolean("Button.showMnemonics") == true) {
-            // Do not hide mnemonics if the UI defaults do not support this
-            isMnemonicHidden = false;
-        } else {
-            isMnemonicHidden = hide;
-        }
-    }
-
-    /**
-     * Gets the state of the hide mnemonic flag. This only has meaning
-     * if this feature is supported by the underlying OS.
-     *
-     * @return true if mnemonics are hidden, otherwise, false
-     * @see #setMnemonicHidden
-     * @since 1.4
-     */
-    public static boolean isMnemonicHidden() {
-        if (UIManager.getBoolean("Button.showMnemonics") == true) {
-            // Do not hide mnemonics if the UI defaults do not support this
-            isMnemonicHidden = false;
-        }
-        return isMnemonicHidden;
-    }
-
-    /**
-     * Gets the state of the flag which indicates if the old Windows
-     * look and feel should be rendered. This flag is used by the
-     * component UI delegates as a hint to determine which style the component
-     * should be rendered.
-     *
-     * @return true if Windows 95 and Windows NT 4 look and feel should
-     *         be rendered
-     * @since 1.4
-     */
-    public static boolean isClassicWindows() {
-        return isClassicWindows;
-    }
-
-    /**
-     * <p>
-     * Invoked when the user attempts an invalid operation,
-     * such as pasting into an uneditable <code>JTextField</code>
-     * that has focus.
-     * </p>
-     * <p>
-     * If the user has enabled visual error indication on
-     * the desktop, this method will flash the caption bar
-     * of the active window. The user can also set the
-     * property awt.visualbell=true to achieve the same
-     * results.
-     * </p>
-     *
-     * @param component Component the error occured in, may be
-     *                  null indicating the error condition is
-     *                  not directly associated with a
-     *                  <code>Component</code>.
-     *
-     * @see javax.swing.LookAndFeel#provideErrorFeedback
-     */
-     public void provideErrorFeedback(Component component) {
-         super.provideErrorFeedback(component);
-     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public LayoutStyle getLayoutStyle() {
-        LayoutStyle style = this.style;
-        if (style == null) {
-            style = new WindowsLayoutStyle();
-            this.style = style;
-        }
-        return style;
-    }
-
-    // ********* Auditory Cue support methods and objects *********
-
-    /**
-     * Returns an <code>Action</code>.
-     * <P>
-     * This Action contains the information and logic to render an
-     * auditory cue. The <code>Object</code> that is passed to this
-     * method contains the information needed to render the auditory
-     * cue. Normally, this <code>Object</code> is a <code>String</code>
-     * that points to a <code>Toolkit</code> <code>desktopProperty</code>.
-     * This <code>desktopProperty</code> is resolved by AWT and the
-     * Windows OS.
-     * <P>
-     * This <code>Action</code>'s <code>actionPerformed</code> method
-     * is fired by the <code>playSound</code> method.
-     *
-     * @return      an Action which knows how to render the auditory
-     *              cue for one particular system or user activity
-     * @see #playSound(Action)
-     * @since 1.4
-     */
-    protected Action createAudioAction(Object key) {
-        if (key != null) {
-            String audioKey = (String)key;
-            String audioValue = (String)UIManager.get(key);
-            return new AudioAction(audioKey, audioValue);
-        } else {
-            return null;
-        }
-    }
-
-    static void repaintRootPane(Component c) {
-        JRootPane root = null;
-        for (; c != null; c = c.getParent()) {
-            if (c instanceof JRootPane) {
-                root = (JRootPane)c;
-            }
-        }
-
-        if (root != null) {
-            root.repaint();
-        } else {
-            c.repaint();
-        }
-    }
-
-    /**
-     * Pass the name String to the super constructor. This is used
-     * later to identify the Action and decide whether to play it or
-     * not. Store the resource String. It is used to get the audio
-     * resource. In this case, the resource is a <code>Runnable</code>
-     * supplied by <code>Toolkit</code>. This <code>Runnable</code> is
-     * effectively a pointer down into the Win32 OS that knows how to
-     * play the right sound.
-     *
-     * @since 1.4
-     */
-    private static class AudioAction extends AbstractAction {
-        private Runnable audioRunnable;
-        private String audioResource;
-        /**
-         * We use the String as the name of the Action and as a pointer to
-         * the underlying OSes audio resource.
-         */
-        public AudioAction(String name, String resource) {
-            super(name);
-            audioResource = resource;
-        }
-        public void actionPerformed(ActionEvent e) {
-            if (audioRunnable == null) {
-                audioRunnable = (Runnable)Toolkit.getDefaultToolkit().getDesktopProperty(audioResource);
-            }
-            if (audioRunnable != null) {
-                // Runnable appears to block until completed playing, hence
-                // start up another thread to handle playing.
-                new Thread(audioRunnable).start();
-            }
-        }
-    }
-
-    /**
-     * Gets an <code>Icon</code> from the native libraries if available,
-     * otherwise gets it from an image resource file.
-     */
-    private static class LazyWindowsIcon implements UIDefaults.LazyValue {
-        private String nativeImage;
-        private String resource;
-
-        LazyWindowsIcon(String nativeImage, String resource) {
-            this.nativeImage = nativeImage;
-            this.resource = resource;
-        }
-
-        public Object createValue(UIDefaults table) {
-            if (nativeImage != null) {
-                Image image = (Image)ShellFolder.get(nativeImage);
-                if (image != null) {
-                    return new ImageIcon(image);
-                }
-            }
-            return SwingUtilities2.makeIcon(getClass(),
-                                            WindowsLookAndFeel.class,
-                                            resource);
-        }
-    }
-
-
-    /**
-     * Gets an <code>Icon</code> from the native libraries if available.
-     * A desktop property is used to trigger reloading the icon when needed.
-     */
-    private class ActiveWindowsIcon implements UIDefaults.ActiveValue {
-        private Icon icon;
-        private String nativeImageName;
-        private String fallbackName;
-        private DesktopProperty desktopProperty;
-
-        ActiveWindowsIcon(String desktopPropertyName,
-                            String nativeImageName, String fallbackName) {
-            this.nativeImageName = nativeImageName;
-            this.fallbackName = fallbackName;
-
-            if (OSInfo.getOSType() == OSInfo.OSType.WINDOWS &&
-                    OSInfo.getWindowsVersion().compareTo(OSInfo.WINDOWS_XP) < 0) {
-                // This desktop property is needed to trigger reloading the icon.
-                // It is kept in member variable to avoid GC.
-                this.desktopProperty = new TriggerDesktopProperty(desktopPropertyName) {
-                    @Override protected void updateUI() {
-                        icon = null;
-                        super.updateUI();
-                    }
-                };
-            }
-        }
-
-        @Override
-        public Object createValue(UIDefaults table) {
-            if (icon == null) {
-                Image image = (Image)ShellFolder.get(nativeImageName);
-                if (image != null) {
-                    icon = new ImageIconUIResource(image);
-                }
-            }
-            if (icon == null && fallbackName != null) {
-                UIDefaults.LazyValue fallback = (UIDefaults.LazyValue)
-                        SwingUtilities2.makeIcon(WindowsLookAndFeel.class,
-                            BasicLookAndFeel.class, fallbackName);
-                icon = (Icon) fallback.createValue(table);
-            }
-            return icon;
-        }
-    }
-
-    /**
-     * Icon backed-up by XP Skin.
-     */
-    private static class SkinIcon implements Icon, UIResource {
-        private final Part part;
-        private final State state;
-        SkinIcon(Part part, State state) {
-            this.part = part;
-            this.state = state;
-        }
-
-        /**
-         * Draw the icon at the specified location.  Icon implementations
-         * may use the Component argument to get properties useful for
-         * painting, e.g. the foreground or background color.
-         */
-        public void paintIcon(Component c, Graphics g, int x, int y) {
-            XPStyle xp = XPStyle.getXP();
-            assert xp != null;
-            if (xp != null) {
-                Skin skin = xp.getSkin(null, part);
-                skin.paintSkin(g, x, y, state);
-            }
-        }
-
-        /**
-         * Returns the icon's width.
-         *
-         * @return an int specifying the fixed width of the icon.
-         */
-        public int getIconWidth() {
-            int width = 0;
-            XPStyle xp = XPStyle.getXP();
-            assert xp != null;
-            if (xp != null) {
-                Skin skin = xp.getSkin(null, part);
-                width = skin.getWidth();
-            }
-            return width;
-        }
-
-        /**
-         * Returns the icon's height.
-         *
-         * @return an int specifying the fixed height of the icon.
-         */
-        public int getIconHeight() {
-            int height = 0;
-            XPStyle xp = XPStyle.getXP();
-            if (xp != null) {
-                Skin skin = xp.getSkin(null, part);
-                height = skin.getHeight();
-            }
-            return height;
-        }
-
-    }
-
-    /**
-     * DesktopProperty for fonts. If a font with the name 'MS Sans Serif'
-     * is returned, it is mapped to 'Microsoft Sans Serif'.
-     */
-    private static class WindowsFontProperty extends DesktopProperty {
-        WindowsFontProperty(String key, Object backup) {
-            super(key, backup);
-        }
-
-        public void invalidate(LookAndFeel laf) {
-            if ("win.defaultGUI.font.height".equals(getKey())) {
-                ((WindowsLookAndFeel)laf).style = null;
-            }
-            super.invalidate(laf);
-        }
-
-        protected Object configureValue(Object value) {
-            if (value instanceof Font) {
-                Font font = (Font)value;
-                if ("MS Sans Serif".equals(font.getName())) {
-                    int size = font.getSize();
-                    // 4950968: Workaround to mimic the way Windows maps the default
-                    // font size of 6 pts to the smallest available bitmap font size.
-                    // This happens mostly on Win 98/Me & NT.
-                    int dpi;
-                    try {
-                        dpi = Toolkit.getDefaultToolkit().getScreenResolution();
-                    } catch (HeadlessException ex) {
-                        dpi = 96;
-                    }
-                    if (Math.round(size * 72F / dpi) < 8) {
-                        size = Math.round(8 * dpi / 72F);
-                    }
-                    Font msFont = new FontUIResource("Microsoft Sans Serif",
-                                          font.getStyle(), size);
-                    if (msFont.getName() != null &&
-                        msFont.getName().equals(msFont.getFamily())) {
-                        font = msFont;
-                    } else if (size != font.getSize()) {
-                        font = new FontUIResource("MS Sans Serif",
-                                                  font.getStyle(), size);
-                    }
-                }
-
-                if (FontUtilities.fontSupportsDefaultEncoding(font)) {
-                    if (!(font instanceof UIResource)) {
-                        font = new FontUIResource(font);
-                    }
-                }
-                else {
-                    font = FontUtilities.getCompositeFontUIResource(font);
-                }
-                return font;
-
-            }
-            return super.configureValue(value);
-        }
-    }
-
-
-    /**
-     * DesktopProperty for fonts that only gets sizes from the desktop,
-     * font name and style are passed into the constructor
-     */
-    private static class WindowsFontSizeProperty extends DesktopProperty {
-        private String fontName;
-        private int fontSize;
-        private int fontStyle;
-
-        WindowsFontSizeProperty(String key, String fontName,
-                                int fontStyle, int fontSize) {
-            super(key, null);
-            this.fontName = fontName;
-            this.fontSize = fontSize;
-            this.fontStyle = fontStyle;
-        }
-
-        protected Object configureValue(Object value) {
-            if (value == null) {
-                value = new FontUIResource(fontName, fontStyle, fontSize);
-            }
-            else if (value instanceof Integer) {
-                value = new FontUIResource(fontName, fontStyle,
-                                           ((Integer)value).intValue());
-            }
-            return value;
-        }
-    }
-
-
-    /**
-     * A value wrapper that actively retrieves values from xp or falls back
-     * to the classic value if not running XP styles.
-     */
-    private static class XPValue implements UIDefaults.ActiveValue {
-        protected Object classicValue, xpValue;
-
-        // A constant that lets you specify null when using XP styles.
-        private final static Object NULL_VALUE = new Object();
-
-        XPValue(Object xpValue, Object classicValue) {
-            this.xpValue = xpValue;
-            this.classicValue = classicValue;
-        }
-
-        public Object createValue(UIDefaults table) {
-            Object value = null;
-            if (XPStyle.getXP() != null) {
-                value = getXPValue(table);
-            }
-
-            if (value == null) {
-                value = getClassicValue(table);
-            } else if (value == NULL_VALUE) {
-                value = null;
-            }
-
-            return value;
-        }
-
-        protected Object getXPValue(UIDefaults table) {
-            return recursiveCreateValue(xpValue, table);
-        }
-
-        protected Object getClassicValue(UIDefaults table) {
-            return recursiveCreateValue(classicValue, table);
-        }
-
-        private Object recursiveCreateValue(Object value, UIDefaults table) {
-            if (value instanceof UIDefaults.LazyValue) {
-                value = ((UIDefaults.LazyValue)value).createValue(table);
-            }
-            if (value instanceof UIDefaults.ActiveValue) {
-                return ((UIDefaults.ActiveValue)value).createValue(table);
-            } else {
-                return value;
-            }
-        }
-    }
-
-    private static class XPBorderValue extends XPValue {
-        private final Border extraMargin;
-
-        XPBorderValue(Part xpValue, Object classicValue) {
-            this(xpValue, classicValue, null);
-        }
-
-        XPBorderValue(Part xpValue, Object classicValue, Border extraMargin) {
-            super(xpValue, classicValue);
-            this.extraMargin = extraMargin;
-        }
-
-        public Object getXPValue(UIDefaults table) {
-            Border xpBorder = XPStyle.getXP().getBorder(null, (Part)xpValue);
-            if (extraMargin != null) {
-                return new BorderUIResource.
-                        CompoundBorderUIResource(xpBorder, extraMargin);
-            } else {
-                return xpBorder;
-            }
-        }
-    }
-
-    private static class XPColorValue extends XPValue {
-        XPColorValue(Part part, State state, Prop prop, Object classicValue) {
-            super(new XPColorValueKey(part, state, prop), classicValue);
-        }
-
-        public Object getXPValue(UIDefaults table) {
-            XPColorValueKey key = (XPColorValueKey)xpValue;
-            return XPStyle.getXP().getColor(key.skin, key.prop, null);
-        }
-
-        private static class XPColorValueKey {
-            Skin skin;
-            Prop prop;
-
-            XPColorValueKey(Part part, State state, Prop prop) {
-                this.skin = new Skin(part, state);
-                this.prop = prop;
-            }
-        }
-    }
-
-    private class XPDLUValue extends XPValue {
-        private int direction;
-
-        XPDLUValue(int xpdlu, int classicdlu, int direction) {
-            super(Integer.valueOf(xpdlu), Integer.valueOf(classicdlu));
-            this.direction = direction;
-        }
-
-        public Object getXPValue(UIDefaults table) {
-            int px = dluToPixels(((Integer)xpValue).intValue(), direction);
-            return Integer.valueOf(px);
-        }
-
-        public Object getClassicValue(UIDefaults table) {
-            int px = dluToPixels(((Integer)classicValue).intValue(), direction);
-            return Integer.valueOf(px);
-        }
-    }
-
-    private class TriggerDesktopProperty extends DesktopProperty {
-        TriggerDesktopProperty(String key) {
-            super(key, null);
-            // This call adds a property change listener for the property,
-            // which triggers a call to updateUI(). The value returned
-            // is not interesting here.
-            getValueFromDesktop();
-        }
-
-        protected void updateUI() {
-            super.updateUI();
-
-            // Make sure property change listener is readded each time
-            getValueFromDesktop();
-        }
-    }
-
-    private class FontDesktopProperty extends TriggerDesktopProperty {
-        FontDesktopProperty(String key) {
-            super(key);
-        }
-
-        protected void updateUI() {
-            Object aaTextInfo = SwingUtilities2.AATextInfo.getAATextInfo(true);
-            UIDefaults defaults = UIManager.getLookAndFeelDefaults();
-            defaults.put(SwingUtilities2.AA_TEXT_PROPERTY_KEY, aaTextInfo);
-            super.updateUI();
-        }
-    }
-
-    // Windows LayoutStyle.  From:
-    // http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnwue/html/ch14e.asp
-    private class WindowsLayoutStyle extends DefaultLayoutStyle {
-        @Override
-        public int getPreferredGap(JComponent component1,
-                JComponent component2, ComponentPlacement type, int position,
-                Container parent) {
-            // Checks args
-            super.getPreferredGap(component1, component2, type, position,
-                                  parent);
-
-            switch(type) {
-            case INDENT:
-                // Windows doesn't spec this
-                if (position == SwingConstants.EAST ||
-                        position == SwingConstants.WEST) {
-                    int indent = getIndent(component1, position);
-                    if (indent > 0) {
-                        return indent;
-                    }
-                    return 10;
-                }
-                // Fall through to related.
-            case RELATED:
-                if (isLabelAndNonlabel(component1, component2, position)) {
-                    // Between text labels and their associated controls (for
-                    // example, text boxes and list boxes): 3
-                    // NOTE: We're not honoring:
-                    // 'Text label beside a button 3 down from the top of
-                    // the button,' but I suspect that is an attempt to
-                    // enforce a baseline layout which will be handled
-                    // separately.  In order to enforce this we would need
-                    // this API to return a more complicated type (Insets,
-                    // or something else).
-                    return getButtonGap(component1, component2, position,
-                                        dluToPixels(3, position));
-                }
-                // Between related controls: 4
-                return getButtonGap(component1, component2, position,
-                                    dluToPixels(4, position));
-            case UNRELATED:
-                // Between unrelated controls: 7
-                return getButtonGap(component1, component2, position,
-                                    dluToPixels(7, position));
-            }
-            return 0;
-        }
-
-        @Override
-        public int getContainerGap(JComponent component, int position,
-                                   Container parent) {
-            // Checks args
-            super.getContainerGap(component, position, parent);
-            return getButtonGap(component, position, dluToPixels(7, position));
-        }
-
-    }
-
-    /**
-     * Converts the dialog unit argument to pixels along the specified
-     * axis.
-     */
-    private int dluToPixels(int dlu, int direction) {
-        if (baseUnitX == 0) {
-            calculateBaseUnits();
-        }
-        if (direction == SwingConstants.EAST ||
-            direction == SwingConstants.WEST) {
-            return dlu * baseUnitX / 4;
-        }
-        assert (direction == SwingConstants.NORTH ||
-                direction == SwingConstants.SOUTH);
-        return dlu * baseUnitY / 8;
-    }
-
-    /**
-     * Calculates the dialog unit mapping.
-     */
-    private void calculateBaseUnits() {
-        // This calculation comes from:
-        // http://support.microsoft.com/default.aspx?scid=kb;EN-US;125681
-        FontMetrics metrics = Toolkit.getDefaultToolkit().getFontMetrics(
-                UIManager.getFont("Button.font"));
-        baseUnitX = metrics.stringWidth(
-                "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz");
-        baseUnitX = (baseUnitX / 26 + 1) / 2;
-        // The -1 comes from experimentation.
-        baseUnitY = metrics.getAscent() + metrics.getDescent() - 1;
-    }
-
-    /**
-     * {@inheritDoc}
-     *
-     * @since 1.6
-     */
-    public Icon getDisabledIcon(JComponent component, Icon icon) {
-        // if the component has a HI_RES_DISABLED_ICON_CLIENT_KEY
-        // client property set to Boolean.TRUE, then use the new
-        // hi res algorithm for creating the disabled icon (used
-        // in particular by the WindowsFileChooserUI class)
-        if (icon != null
-                && component != null
-                && Boolean.TRUE.equals(component.getClientProperty(HI_RES_DISABLED_ICON_CLIENT_KEY))
-                && icon.getIconWidth() > 0
-                && icon.getIconHeight() > 0) {
-            BufferedImage img = new BufferedImage(icon.getIconWidth(),
-                    icon.getIconWidth(), BufferedImage.TYPE_INT_ARGB);
-            icon.paintIcon(component, img.getGraphics(), 0, 0);
-            ImageFilter filter = new RGBGrayFilter();
-            ImageProducer producer = new FilteredImageSource(img.getSource(), filter);
-            Image resultImage = component.createImage(producer);
-            return new ImageIconUIResource(resultImage);
-        }
-        return super.getDisabledIcon(component, icon);
-    }
-
-    private static class RGBGrayFilter extends RGBImageFilter {
-        public RGBGrayFilter() {
-            canFilterIndexColorModel = true;
-        }
-        public int filterRGB(int x, int y, int rgb) {
-            // find the average of red, green, and blue
-            float avg = (((rgb >> 16) & 0xff) / 255f +
-                          ((rgb >>  8) & 0xff) / 255f +
-                           (rgb        & 0xff) / 255f) / 3;
-            // pull out the alpha channel
-            float alpha = (((rgb>>24)&0xff)/255f);
-            // calc the average
-            avg = Math.min(1.0f, (1f-avg)/(100.0f/35.0f) + avg);
-            // turn back into rgb
-            int rgbval = (int)(alpha * 255f) << 24 |
-                         (int)(avg   * 255f) << 16 |
-                         (int)(avg   * 255f) <<  8 |
-                         (int)(avg   * 255f);
-            return rgbval;
-        }
-    }
-
-    private static class FocusColorProperty extends DesktopProperty {
-        public FocusColorProperty () {
-            // Fallback value is never used bacause of the configureValue method doesn't return null
-            super("win.3d.backgroundColor", Color.BLACK);
-        }
-
-        @Override
-        protected Object configureValue(Object value) {
-            if (! ((Boolean)Toolkit.getDefaultToolkit().getDesktopProperty("win.highContrast.on")).booleanValue()){
-                return Color.BLACK;
-            }
-            return Color.BLACK.equals(value) ? Color.WHITE : Color.BLACK;
-        }
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsMenuBarUI.java b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsMenuBarUI.java
deleted file mode 100755
index c56b83b..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsMenuBarUI.java
+++ /dev/null
@@ -1,186 +0,0 @@
-/*
- * Copyright (c) 1997, 2006, 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.java.swing.plaf.windows;
-
-import javax.swing.plaf.basic.*;
-import javax.swing.*;
-import javax.swing.plaf.ActionMapUIResource;
-import javax.swing.plaf.ComponentUI;
-import java.awt.event.ActionEvent;
-import java.awt.event.HierarchyEvent;
-import java.awt.event.HierarchyListener;
-import java.awt.event.WindowAdapter;
-import java.awt.event.WindowEvent;
-import java.awt.event.WindowListener;
-import java.awt.event.WindowStateListener;
-
-import java.awt.*;
-
-import com.sun.java.swing.plaf.windows.TMSchema.*;
-import com.sun.java.swing.plaf.windows.XPStyle.*;
-
-/**
- * Windows rendition of the component.
- * <p>
- * <strong>Warning:</strong>
- * Serialized objects of this class will not be compatible with
- * future Swing releases.  The current serialization support is appropriate
- * for short term storage or RMI between applications running the same
- * version of Swing.  A future release of Swing will provide support for
- * long term persistence.
- */
-public class WindowsMenuBarUI extends BasicMenuBarUI
-{
-    /* to be accessed on the EDT only */
-    private WindowListener windowListener = null;
-    private HierarchyListener hierarchyListener = null;
-    private Window window = null;
-
-    public static ComponentUI createUI(JComponent x) {
-        return new WindowsMenuBarUI();
-    }
-
-    @Override
-    protected void uninstallListeners() {
-        uninstallWindowListener();
-        if (hierarchyListener != null) {
-            menuBar.removeHierarchyListener(hierarchyListener);
-            hierarchyListener = null;
-        }
-        super.uninstallListeners();
-    }
-    private void installWindowListener() {
-        if (windowListener == null) {
-            Component component = menuBar.getTopLevelAncestor();
-            if (component instanceof Window) {
-                window = (Window) component;
-                windowListener = new WindowAdapter() {
-                    @Override
-                    public void windowActivated(WindowEvent e) {
-                        menuBar.repaint();
-                    }
-                    @Override
-                    public void windowDeactivated(WindowEvent e) {
-                        menuBar.repaint();
-                    }
-                };
-                ((Window) component).addWindowListener(windowListener);
-            }
-        }
-    }
-    private void uninstallWindowListener() {
-        if (windowListener != null && window != null) {
-            window.removeWindowListener(windowListener);
-        }
-        window = null;
-        windowListener = null;
-    }
-    @Override
-    protected void installListeners() {
-        if (WindowsLookAndFeel.isOnVista()) {
-            installWindowListener();
-            hierarchyListener =
-                new HierarchyListener() {
-                    public void hierarchyChanged(HierarchyEvent e) {
-                        if ((e.getChangeFlags()
-                                & HierarchyEvent.DISPLAYABILITY_CHANGED) != 0) {
-                            if (menuBar.isDisplayable()) {
-                                installWindowListener();
-                            } else {
-                                uninstallWindowListener();
-                            }
-                        }
-                    }
-            };
-            menuBar.addHierarchyListener(hierarchyListener);
-        }
-        super.installListeners();
-    }
-
-    protected void installKeyboardActions() {
-        super.installKeyboardActions();
-        ActionMap map = SwingUtilities.getUIActionMap(menuBar);
-        if (map == null) {
-            map = new ActionMapUIResource();
-            SwingUtilities.replaceUIActionMap(menuBar, map);
-        }
-        map.put("takeFocus", new TakeFocus());
-    }
-
-    /**
-     * Action that activates the menu (e.g. when F10 is pressed).
-     * Unlike BasicMenuBarUI.TakeFocus, this Action will not show menu popup.
-     */
-    private static class TakeFocus extends AbstractAction {
-        public void actionPerformed(ActionEvent e) {
-            JMenuBar menuBar = (JMenuBar)e.getSource();
-            JMenu menu = menuBar.getMenu(0);
-            if (menu != null) {
-                MenuSelectionManager msm =
-                    MenuSelectionManager.defaultManager();
-                MenuElement path[] = new MenuElement[2];
-                path[0] = (MenuElement)menuBar;
-                path[1] = (MenuElement)menu;
-                msm.setSelectedPath(path);
-
-                // show mnemonics
-                WindowsLookAndFeel.setMnemonicHidden(false);
-                WindowsLookAndFeel.repaintRootPane(menuBar);
-            }
-        }
-    }
-
-    @Override
-    public void paint(Graphics g, JComponent c) {
-        if (WindowsMenuItemUI.isVistaPainting()) {
-            XPStyle xp = XPStyle.getXP();
-            Skin skin;
-            skin = xp.getSkin(c, Part.MP_BARBACKGROUND);
-            int width = c.getWidth();
-            int height = c.getHeight();
-            State state =  isActive(c) ? State.ACTIVE : State.INACTIVE;
-            skin.paintSkin(g, 0, 0, width, height, state);
-        } else {
-            super.paint(g, c);
-        }
-    }
-
-    /**
-     * Checks if component belongs to an active window.
-     * @param c component to check
-     * @return true if component belongs to an active window
-     */
-    static boolean isActive(JComponent c) {
-        JRootPane rootPane = c.getRootPane();
-        if (rootPane != null) {
-            Component component = rootPane.getParent();
-            if (component instanceof Window) {
-                return ((Window) component).isActive();
-            }
-        }
-        return true;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsMenuItemUI.java b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsMenuItemUI.java
deleted file mode 100755
index cac7af5..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsMenuItemUI.java
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
- * Copyright (c) 1997, 2006, 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.java.swing.plaf.windows;
-
-import java.awt.*;
-import javax.swing.*;
-import javax.swing.plaf.*;
-import javax.swing.plaf.basic.*;
-
-import sun.swing.SwingUtilities2;
-
-import com.sun.java.swing.plaf.windows.TMSchema.*;
-import com.sun.java.swing.plaf.windows.XPStyle.*;
-
-/**
- * Windows rendition of the component.
- * <p>
- * <strong>Warning:</strong>
- * Serialized objects of this class will not be compatible with
- * future Swing releases.  The current serialization support is appropriate
- * for short term storage or RMI between applications running the same
- * version of Swing.  A future release of Swing will provide support for
- * long term persistence.
- *
- * @author Igor Kushnirskiy
- */
-
-public class WindowsMenuItemUI extends BasicMenuItemUI {
-    final WindowsMenuItemUIAccessor accessor =
-        new  WindowsMenuItemUIAccessor() {
-
-            public JMenuItem getMenuItem() {
-                return menuItem;
-            }
-
-            public State getState(JMenuItem menuItem) {
-                return WindowsMenuItemUI.getState(this, menuItem);
-            }
-
-            public Part getPart(JMenuItem menuItem) {
-                return WindowsMenuItemUI.getPart(this, menuItem);
-            }
-    };
-    public static ComponentUI createUI(JComponent c) {
-        return new WindowsMenuItemUI();
-    }
-
-    /**
-     * Method which renders the text of the current menu item.
-     * <p>
-     * @param g Graphics context
-     * @param menuItem Current menu item to render
-     * @param textRect Bounding rectangle to render the text.
-     * @param text String to render
-     */
-    protected void paintText(Graphics g, JMenuItem menuItem,
-                             Rectangle textRect, String text) {
-        if (WindowsMenuItemUI.isVistaPainting()) {
-            WindowsMenuItemUI.paintText(accessor, g, menuItem, textRect, text);
-            return;
-        }
-        ButtonModel model = menuItem.getModel();
-        Color oldColor = g.getColor();
-
-        if(model.isEnabled() &&
-            (model.isArmed() || (menuItem instanceof JMenu &&
-             model.isSelected()))) {
-            g.setColor(selectionForeground); // Uses protected field.
-        }
-
-        WindowsGraphicsUtils.paintText(g, menuItem, textRect, text, 0);
-
-        g.setColor(oldColor);
-    }
-
-    @Override
-    protected void paintBackground(Graphics g, JMenuItem menuItem,
-            Color bgColor) {
-        if (WindowsMenuItemUI.isVistaPainting()) {
-            WindowsMenuItemUI.paintBackground(accessor, g, menuItem, bgColor);
-            return;
-        }
-        super.paintBackground(g, menuItem, bgColor);
-    }
-
-    static void paintBackground(WindowsMenuItemUIAccessor menuItemUI,
-            Graphics g, JMenuItem menuItem, Color bgColor) {
-        assert isVistaPainting();
-        if (isVistaPainting()) {
-            int menuWidth = menuItem.getWidth();
-            int menuHeight = menuItem.getHeight();
-            if (menuItem.isOpaque()) {
-                Color oldColor = g.getColor();
-                g.setColor(menuItem.getBackground());
-                g.fillRect(0,0, menuWidth, menuHeight);
-                g.setColor(oldColor);
-            }
-            XPStyle xp = XPStyle.getXP();
-            Part part = menuItemUI.getPart(menuItem);
-            Skin skin = xp.getSkin(menuItem, part);
-            skin.paintSkin(g, 0 , 0,
-                menuWidth,
-                menuHeight,
-                menuItemUI.getState(menuItem));
-        }
-    }
-
-    static void paintText(WindowsMenuItemUIAccessor menuItemUI, Graphics g,
-                                JMenuItem menuItem, Rectangle textRect,
-                                String text) {
-        assert isVistaPainting();
-        if (isVistaPainting()) {
-            State state = menuItemUI.getState(menuItem);
-
-            /* part of it copied from WindowsGraphicsUtils.java */
-            FontMetrics fm = SwingUtilities2.getFontMetrics(menuItem, g);
-            int mnemIndex = menuItem.getDisplayedMnemonicIndex();
-            // W2K Feature: Check to see if the Underscore should be rendered.
-            if (WindowsLookAndFeel.isMnemonicHidden() == true) {
-                mnemIndex = -1;
-            }
-            WindowsGraphicsUtils.paintXPText(menuItem,
-                menuItemUI.getPart(menuItem), state,
-                g, textRect.x,
-                textRect.y + fm.getAscent(),
-                text, mnemIndex);
-        }
-    }
-
-    static State getState(WindowsMenuItemUIAccessor menuItemUI, JMenuItem menuItem) {
-        State state;
-        ButtonModel model = menuItem.getModel();
-        if (model.isArmed()) {
-            state = (model.isEnabled()) ? State.HOT : State.DISABLEDHOT;
-        } else {
-            state = (model.isEnabled()) ? State.NORMAL : State.DISABLED;
-        }
-        return state;
-    }
-
-    static Part getPart(WindowsMenuItemUIAccessor menuItemUI, JMenuItem menuItem) {
-        return Part.MP_POPUPITEM;
-    }
-
-    /*
-     * TODO idk can we use XPStyle.isVista?
-     * is it possible that in some theme some Vista parts are not defined while
-     * others are?
-     */
-    static boolean isVistaPainting() {
-        XPStyle xp = XPStyle.getXP();
-        return xp != null && xp.isSkinDefined(null, Part.MP_POPUPITEM);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsMenuItemUIAccessor.java b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsMenuItemUIAccessor.java
deleted file mode 100755
index 60246f9..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsMenuItemUIAccessor.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (c) 2006, 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.java.swing.plaf.windows;
-
-import java.awt.Color;
-import java.awt.Graphics;
-
-import javax.swing.JMenuItem;
-
-import com.sun.java.swing.plaf.windows.TMSchema.Part;
-import com.sun.java.swing.plaf.windows.TMSchema.State;
-
-/**
- * Accessor interface for WindowsMenuItemUI to allow for "multiple implementation
- * inheritance".
- *
- * @author Igor Kushnirskiy
- */
-interface WindowsMenuItemUIAccessor {
-    JMenuItem getMenuItem();
-    State getState(JMenuItem menuItem);
-    Part getPart(JMenuItem menuItem);
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsMenuUI.java b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsMenuUI.java
deleted file mode 100755
index a2e7795..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsMenuUI.java
+++ /dev/null
@@ -1,295 +0,0 @@
-/*
- * Copyright (c) 1997, 2007, 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.java.swing.plaf.windows;
-
-import java.awt.*;
-import java.awt.event.MouseEvent;
-
-import javax.swing.plaf.ComponentUI;
-import javax.swing.plaf.basic.BasicMenuUI;
-import javax.swing.event.MouseInputListener;
-import javax.swing.*;
-
-import com.sun.java.swing.plaf.windows.TMSchema.Part;
-import com.sun.java.swing.plaf.windows.TMSchema.State;
-
-/**
- * Windows rendition of the component.
- * <p>
- * <strong>Warning:</strong>
- * Serialized objects of this class will not be compatible with
- * future Swing releases.  The current serialization support is appropriate
- * for short term storage or RMI between applications running the same
- * version of Swing.  A future release of Swing will provide support for
- * long term persistence.
- */
-public class WindowsMenuUI extends BasicMenuUI {
-    protected Integer menuBarHeight;
-    protected boolean hotTrackingOn;
-
-    final WindowsMenuItemUIAccessor accessor =
-        new WindowsMenuItemUIAccessor() {
-
-            public JMenuItem getMenuItem() {
-                return menuItem;
-            }
-
-            public State getState(JMenuItem menu) {
-                State state = menu.isEnabled() ? State.NORMAL
-                        : State.DISABLED;
-                ButtonModel model = menu.getModel();
-                if (model.isArmed() || model.isSelected()) {
-                    state = (menu.isEnabled()) ? State.PUSHED
-                            : State.DISABLEDPUSHED;
-                } else if (model.isRollover()
-                           && ((JMenu) menu).isTopLevelMenu()) {
-                    /*
-                     * Only paint rollover if no other menu on menubar is
-                     * selected
-                     */
-                    State stateTmp = state;
-                    state = (menu.isEnabled()) ? State.HOT
-                            : State.DISABLEDHOT;
-                    for (MenuElement menuElement :
-                        ((JMenuBar) menu.getParent()).getSubElements()) {
-                        if (((JMenuItem) menuElement).isSelected()) {
-                            state = stateTmp;
-                            break;
-                        }
-                    }
-                }
-
-                //non top level menus have HOT state instead of PUSHED
-                if (!((JMenu) menu).isTopLevelMenu()) {
-                    if (state == State.PUSHED) {
-                        state = State.HOT;
-                    } else if (state == State.DISABLEDPUSHED) {
-                        state = State.DISABLEDHOT;
-                    }
-                }
-
-                /*
-                 * on Vista top level menu for non active frame looks disabled
-                 */
-                if (((JMenu) menu).isTopLevelMenu() && WindowsMenuItemUI.isVistaPainting()) {
-                    if (! WindowsMenuBarUI.isActive(menu)) {
-                        state = State.DISABLED;
-                    }
-                }
-                return state;
-            }
-
-            public Part getPart(JMenuItem menuItem) {
-                return ((JMenu) menuItem).isTopLevelMenu() ? Part.MP_BARITEM
-                        : Part.MP_POPUPITEM;
-            }
-    };
-    public static ComponentUI createUI(JComponent x) {
-        return new WindowsMenuUI();
-    }
-
-    protected void installDefaults() {
-        super.installDefaults();
-        if (!WindowsLookAndFeel.isClassicWindows()) {
-            menuItem.setRolloverEnabled(true);
-        }
-
-        menuBarHeight = (Integer)UIManager.getInt("MenuBar.height");
-
-        Object obj      = UIManager.get("MenuBar.rolloverEnabled");
-        hotTrackingOn = (obj instanceof Boolean) ? (Boolean)obj : true;
-    }
-
-    /**
-     * Draws the background of the menu.
-     * @since 1.4
-     */
-    protected void paintBackground(Graphics g, JMenuItem menuItem, Color bgColor) {
-        if (WindowsMenuItemUI.isVistaPainting()) {
-            WindowsMenuItemUI.paintBackground(accessor, g, menuItem, bgColor);
-            return;
-        }
-
-        JMenu menu = (JMenu)menuItem;
-        ButtonModel model = menu.getModel();
-
-        // Use superclass method for the old Windows LAF,
-        // for submenus, and for XP toplevel if selected or pressed
-        if (WindowsLookAndFeel.isClassicWindows() ||
-            !menu.isTopLevelMenu() ||
-            (XPStyle.getXP() != null && (model.isArmed() || model.isSelected()))) {
-
-            super.paintBackground(g, menu, bgColor);
-            return;
-        }
-
-        Color oldColor = g.getColor();
-        int menuWidth = menu.getWidth();
-        int menuHeight = menu.getHeight();
-
-        UIDefaults table = UIManager.getLookAndFeelDefaults();
-        Color highlight = table.getColor("controlLtHighlight");
-        Color shadow = table.getColor("controlShadow");
-
-        g.setColor(menu.getBackground());
-        g.fillRect(0,0, menuWidth, menuHeight);
-
-        if (menu.isOpaque()) {
-            if (model.isArmed() || model.isSelected()) {
-                // Draw a lowered bevel border
-                g.setColor(shadow);
-                g.drawLine(0,0, menuWidth - 1,0);
-                g.drawLine(0,0, 0,menuHeight - 2);
-
-                g.setColor(highlight);
-                g.drawLine(menuWidth - 1,0, menuWidth - 1,menuHeight - 2);
-                g.drawLine(0,menuHeight - 2, menuWidth - 1,menuHeight - 2);
-            } else if (model.isRollover() && model.isEnabled()) {
-                // Only paint rollover if no other menu on menubar is selected
-                boolean otherMenuSelected = false;
-                MenuElement[] menus = ((JMenuBar)menu.getParent()).getSubElements();
-                for (int i = 0; i < menus.length; i++) {
-                    if (((JMenuItem)menus[i]).isSelected()) {
-                        otherMenuSelected = true;
-                        break;
-                    }
-                }
-                if (!otherMenuSelected) {
-                    if (XPStyle.getXP() != null) {
-                        g.setColor(selectionBackground); // Uses protected field.
-                        g.fillRect(0, 0, menuWidth, menuHeight);
-                    } else {
-                        // Draw a raised bevel border
-                        g.setColor(highlight);
-                        g.drawLine(0,0, menuWidth - 1,0);
-                        g.drawLine(0,0, 0,menuHeight - 2);
-
-                        g.setColor(shadow);
-                        g.drawLine(menuWidth - 1,0, menuWidth - 1,menuHeight - 2);
-                        g.drawLine(0,menuHeight - 2, menuWidth - 1,menuHeight - 2);
-                    }
-                }
-            }
-        }
-        g.setColor(oldColor);
-    }
-
-    /**
-     * Method which renders the text of the current menu item.
-     * <p>
-     * @param g Graphics context
-     * @param menuItem Current menu item to render
-     * @param textRect Bounding rectangle to render the text.
-     * @param text String to render
-     * @since 1.4
-     */
-    protected void paintText(Graphics g, JMenuItem menuItem,
-                             Rectangle textRect, String text) {
-        if (WindowsMenuItemUI.isVistaPainting()) {
-            WindowsMenuItemUI.paintText(accessor, g, menuItem, textRect, text);
-            return;
-        }
-        JMenu menu = (JMenu)menuItem;
-        ButtonModel model = menuItem.getModel();
-        Color oldColor = g.getColor();
-
-        // Only paint rollover if no other menu on menubar is selected
-        boolean paintRollover = model.isRollover();
-        if (paintRollover && menu.isTopLevelMenu()) {
-            MenuElement[] menus = ((JMenuBar)menu.getParent()).getSubElements();
-            for (int i = 0; i < menus.length; i++) {
-                if (((JMenuItem)menus[i]).isSelected()) {
-                    paintRollover = false;
-                    break;
-                }
-            }
-        }
-
-        if ((model.isSelected() && (WindowsLookAndFeel.isClassicWindows() ||
-                                    !menu.isTopLevelMenu())) ||
-            (XPStyle.getXP() != null && (paintRollover ||
-                                         model.isArmed() ||
-                                         model.isSelected()))) {
-            g.setColor(selectionForeground); // Uses protected field.
-        }
-
-        WindowsGraphicsUtils.paintText(g, menuItem, textRect, text, 0);
-
-        g.setColor(oldColor);
-    }
-
-    protected MouseInputListener createMouseInputListener(JComponent c) {
-        return new WindowsMouseInputHandler();
-    }
-
-    /**
-     * This class implements a mouse handler that sets the rollover flag to
-     * true when the mouse enters the menu and false when it exits.
-     * @since 1.4
-     */
-    protected class WindowsMouseInputHandler extends BasicMenuUI.MouseInputHandler {
-        public void mouseEntered(MouseEvent evt) {
-            super.mouseEntered(evt);
-
-            JMenu menu = (JMenu)evt.getSource();
-            if (hotTrackingOn && menu.isTopLevelMenu() && menu.isRolloverEnabled()) {
-                menu.getModel().setRollover(true);
-                menuItem.repaint();
-            }
-        }
-
-        public void mouseExited(MouseEvent evt) {
-            super.mouseExited(evt);
-
-            JMenu menu = (JMenu)evt.getSource();
-            ButtonModel model = menu.getModel();
-            if (menu.isRolloverEnabled()) {
-                model.setRollover(false);
-                menuItem.repaint();
-            }
-        }
-    }
-
-    protected Dimension getPreferredMenuItemSize(JComponent c,
-                                                     Icon checkIcon,
-                                                     Icon arrowIcon,
-                                                     int defaultTextIconGap) {
-
-        Dimension d = super.getPreferredMenuItemSize(c, checkIcon, arrowIcon,
-                                                     defaultTextIconGap);
-
-        // Note: When toolbar containers (rebars) are implemented, only do
-        // this if the JMenuBar is not in a rebar (i.e. ignore the desktop
-        // property win.menu.height if in a rebar.)
-        if (c instanceof JMenu && ((JMenu)c).isTopLevelMenu() &&
-            menuBarHeight != null && d.height < menuBarHeight) {
-
-            d.height = menuBarHeight;
-        }
-
-        return d;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsOptionPaneUI.java b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsOptionPaneUI.java
deleted file mode 100755
index b163d88..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsOptionPaneUI.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 1997, 2000, 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.java.swing.plaf.windows;
-
-import javax.swing.*;
-import javax.swing.plaf.*;
-import javax.swing.plaf.basic.*;
-import java.beans.PropertyChangeEvent;
-import java.beans.PropertyChangeListener;
-
-
-
-/**
- * Windows rendition of the component.
- * <p>
- * <strong>Warning:</strong>
- * Serialized objects of this class will not be compatible with
- * future Swing releases.  The current serialization support is appropriate
- * for short term storage or RMI between applications running the same
- * version of Swing.  A future release of Swing will provide support for
- * long term persistence.
- */
-public class WindowsOptionPaneUI extends BasicOptionPaneUI {
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsPasswordFieldUI.java b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsPasswordFieldUI.java
deleted file mode 100755
index aef2a21..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsPasswordFieldUI.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright (c) 1997, 1998, 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.java.swing.plaf.windows;
-
-import javax.swing.plaf.*;
-import javax.swing.plaf.basic.*;
-import javax.swing.*;
-import javax.swing.text.Caret;
-
-
-
-/**
- * Windows rendition of the component.
- * <p>
- * <strong>Warning:</strong>
- * Serialized objects of this class will not be compatible with
- * future Swing releases.  The current serialization support is appropriate
- * for short term storage or RMI between applications running the same
- * version of Swing.  A future release of Swing will provide support for
- * long term persistence.
- */
-public class WindowsPasswordFieldUI extends BasicPasswordFieldUI {
-
-    /**
-     * Creates a UI for a JPasswordField
-     *
-     * @param c the password field
-     * @return the UI
-     */
-    public static ComponentUI createUI(JComponent c) {
-        return new WindowsPasswordFieldUI();
-    }
-
-
-    /**
-     * Creates the object to use for a caret.  By default an
-     * instance of WindowsCaret is created.  This method
-     * can be redefined to provide something else that implements
-     * the InputPosition interface or a subclass of DefaultCaret.
-     *
-     * @return the caret object
-     */
-    protected Caret createCaret() {
-        return new WindowsTextUI.WindowsCaret();
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsPopupMenuSeparatorUI.java b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsPopupMenuSeparatorUI.java
deleted file mode 100755
index 797aa5a..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsPopupMenuSeparatorUI.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Copyright (c) 2004, 2006, 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.java.swing.plaf.windows;
-
-import java.awt.*;
-
-import javax.swing.*;
-import javax.swing.plaf.basic.BasicPopupMenuSeparatorUI;
-import javax.swing.plaf.ComponentUI;
-
-import com.sun.java.swing.plaf.windows.TMSchema.Part;
-import com.sun.java.swing.plaf.windows.TMSchema.State;
-import com.sun.java.swing.plaf.windows.XPStyle.Skin;
-
-/**
- * Windows L&F implementation of PopupMenuSeparatorUI.
- *
- * @author Leif Samuelsson
- * @author Igor Kushnirskiy
- */
-
-public class WindowsPopupMenuSeparatorUI extends BasicPopupMenuSeparatorUI {
-
-    public static ComponentUI createUI(JComponent c) {
-        return new WindowsPopupMenuSeparatorUI();
-    }
-
-    public void paint(Graphics g, JComponent c) {
-        Dimension s = c.getSize();
-        if (WindowsMenuItemUI.isVistaPainting()) {
-            int x = 1;
-            Component parent = c.getParent();
-            if (parent instanceof JComponent) {
-                Object gutterOffsetObject =
-                    ((JComponent) parent).getClientProperty(
-                        WindowsPopupMenuUI.GUTTER_OFFSET_KEY);
-                if (gutterOffsetObject instanceof Integer) {
-                    /*
-                     * gutter offset is in parent's coordinates.
-                     * See comment in
-                     * WindowsPopupMenuUI.getTextOffset(JComponent)
-                     */
-                    x = ((Integer) gutterOffsetObject).intValue() - c.getX();
-                    x += WindowsPopupMenuUI.getGutterWidth();
-                }
-            }
-            Skin skin = XPStyle.getXP().getSkin(c, Part.MP_POPUPSEPARATOR);
-            int skinHeight = skin.getHeight();
-            int y = (s.height - skinHeight) / 2;
-            skin.paintSkin(g, x, y, s.width - x - 1, skinHeight, State.NORMAL);
-        } else {
-            int y = s.height / 2;
-            g.setColor(c.getForeground());
-            g.drawLine(1, y - 1, s.width - 2, y - 1);
-
-            g.setColor(c.getBackground());
-            g.drawLine(1, y,     s.width - 2, y);
-        }
-    }
-
-    public Dimension getPreferredSize(JComponent c) {
-        int fontHeight = 0;
-        Font font = c.getFont();
-        if (font != null) {
-            fontHeight = c.getFontMetrics(font).getHeight();
-        }
-
-        return new Dimension(0, fontHeight/2 + 2);
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsPopupMenuUI.java b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsPopupMenuUI.java
deleted file mode 100755
index 584641b..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsPopupMenuUI.java
+++ /dev/null
@@ -1,224 +0,0 @@
-/*
- * Copyright (c) 1997, 2006, 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.java.swing.plaf.windows;
-
-import java.awt.Component;
-import java.awt.Graphics;
-import java.awt.Insets;
-import java.awt.KeyEventPostProcessor;
-import java.awt.KeyboardFocusManager;
-import java.awt.Window;
-import java.awt.event.KeyEvent;
-import javax.swing.*;
-import javax.swing.event.*;
-import javax.swing.plaf.*;
-import javax.swing.plaf.basic.*;
-
-import sun.swing.StringUIClientPropertyKey;
-
-import com.sun.java.swing.plaf.windows.TMSchema.Part;
-import com.sun.java.swing.plaf.windows.TMSchema.State;
-import com.sun.java.swing.plaf.windows.XPStyle.Skin;
-import static sun.swing.SwingUtilities2.BASICMENUITEMUI_MAX_TEXT_OFFSET;
-
-/**
- * Windows rendition of the component.
- * <p>
- * <strong>Warning:</strong>
- * Serialized objects of this class will not be compatible with
- * future Swing releases.  The current serialization support is appropriate
- * for short term storage or RMI between applications running the same
- * version of Swing.  A future release of Swing will provide support for
- * long term persistence.
- *
- * @author Igor Kushnirskiy
- */
-public class WindowsPopupMenuUI extends BasicPopupMenuUI {
-
-    static MnemonicListener mnemonicListener = null;
-    static final Object GUTTER_OFFSET_KEY =
-        new StringUIClientPropertyKey("GUTTER_OFFSET_KEY");
-
-    public static ComponentUI createUI(JComponent c) {
-        return new WindowsPopupMenuUI();
-    }
-
-    public void installListeners() {
-        super.installListeners();
-        if (! UIManager.getBoolean("Button.showMnemonics") &&
-            mnemonicListener == null) {
-
-            mnemonicListener = new MnemonicListener();
-            MenuSelectionManager.defaultManager().
-                addChangeListener(mnemonicListener);
-        }
-    }
-
-    /**
-     * Returns the <code>Popup</code> that will be responsible for
-     * displaying the <code>JPopupMenu</code>.
-     *
-     * @param popupMenu JPopupMenu requesting Popup
-     * @param x     Screen x location Popup is to be shown at
-     * @param y     Screen y location Popup is to be shown at.
-     * @return Popup that will show the JPopupMenu
-     * @since 1.4
-     */
-    public Popup getPopup(JPopupMenu popupMenu, int x, int y) {
-        PopupFactory popupFactory = PopupFactory.getSharedInstance();
-        return popupFactory.getPopup(popupMenu.getInvoker(), popupMenu, x, y);
-    }
-
-    static class MnemonicListener implements ChangeListener {
-        JRootPane repaintRoot = null;
-
-        public void stateChanged(ChangeEvent ev) {
-            MenuSelectionManager msm = (MenuSelectionManager)ev.getSource();
-            MenuElement[] path = msm.getSelectedPath();
-            if (path.length == 0) {
-                if(!WindowsLookAndFeel.isMnemonicHidden()) {
-                    // menu was canceled -- hide mnemonics
-                    WindowsLookAndFeel.setMnemonicHidden(true);
-                    if (repaintRoot != null) {
-                        Window win =
-                            SwingUtilities.getWindowAncestor(repaintRoot);
-                        WindowsGraphicsUtils.repaintMnemonicsInWindow(win);
-                    }
-                }
-            } else {
-                Component c = (Component)path[0];
-                if (c instanceof JPopupMenu) c = ((JPopupMenu)c).getInvoker();
-                repaintRoot = SwingUtilities.getRootPane(c);
-            }
-        }
-    }
-
-    /**
-     * Returns offset for the text.
-     * BasicMenuItemUI sets max text offset on the JPopupMenuUI.
-     * @param c PopupMenu to return text offset for.
-     * @return text offset for the component
-     */
-    static int getTextOffset(JComponent c) {
-        int rv = -1;
-        Object maxTextOffset =
-            c.getClientProperty(BASICMENUITEMUI_MAX_TEXT_OFFSET);
-        if (maxTextOffset instanceof Integer) {
-            /*
-             * this is in JMenuItem coordinates.
-             * Let's assume all the JMenuItem have the same offset along X.
-             */
-            rv = (Integer) maxTextOffset;
-            int menuItemOffset = 0;
-            Component component = c.getComponent(0);
-            if (component != null) {
-                menuItemOffset = component.getX();
-            }
-            rv += menuItemOffset;
-        }
-        return rv;
-    }
-
-    /**
-     * Returns span before gutter.
-     * used only on Vista.
-     * @return span before gutter
-     */
-    static int getSpanBeforeGutter() {
-        return 3;
-    }
-
-    /**
-     * Returns span after gutter.
-     * used only on Vista.
-     * @return span after gutter
-     */
-    static int getSpanAfterGutter() {
-        return 3;
-    }
-
-    /**
-     * Returns gutter width.
-     * used only on Vista.
-     * @return width of the gutter
-     */
-    static int getGutterWidth() {
-        int rv = 2;
-        XPStyle xp = XPStyle.getXP();
-        if (xp != null) {
-            Skin skin = xp.getSkin(null, Part.MP_POPUPGUTTER);
-            rv = skin.getWidth();
-        }
-        return rv;
-    }
-
-    /**
-     * Checks if PopupMenu is leftToRight
-     * The orientation is derived from the children of the component.
-     * It is leftToRight if all the children are leftToRight
-     *
-     * @param c component to return orientation for
-     * @return true if all the children are leftToRight
-     */
-    private static boolean isLeftToRight(JComponent c) {
-        boolean leftToRight = true;
-        for (int i = c.getComponentCount() - 1; i >=0 && leftToRight; i-- ) {
-            leftToRight =
-                c.getComponent(i).getComponentOrientation().isLeftToRight();
-        }
-        return leftToRight;
-    }
-
-    @Override
-    public void paint(Graphics g, JComponent c) {
-        if (WindowsMenuItemUI.isVistaPainting()) {
-            XPStyle xp = XPStyle.getXP();
-            Skin skin = xp.getSkin(c, Part.MP_POPUPBACKGROUND);
-            skin.paintSkin(g, 0, 0, c.getWidth(),c.getHeight(), State.NORMAL);
-            int textOffset = getTextOffset(c);
-            if (textOffset >= 0
-                    /* paint gutter only for leftToRight case */
-                    && isLeftToRight(c)) {
-                skin = xp.getSkin(c, Part.MP_POPUPGUTTER);
-                int gutterWidth = getGutterWidth();
-                int gutterOffset =
-                    textOffset - getSpanAfterGutter() - gutterWidth;
-                c.putClientProperty(GUTTER_OFFSET_KEY,
-                    Integer.valueOf(gutterOffset));
-                Insets insets = c.getInsets();
-                skin.paintSkin(g, gutterOffset, insets.top,
-                    gutterWidth, c.getHeight() - insets.bottom - insets.top,
-                    State.NORMAL);
-            } else {
-                if (c.getClientProperty(GUTTER_OFFSET_KEY) != null) {
-                    c.putClientProperty(GUTTER_OFFSET_KEY, null);
-                }
-            }
-        } else {
-            super.paint(g, c);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsPopupWindow.java b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsPopupWindow.java
deleted file mode 100755
index 9534346..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsPopupWindow.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright (c) 2001, 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.java.swing.plaf.windows;
-
-import javax.swing.JWindow;
-import java.awt.Window;
-import java.awt.Graphics;
-
-/**
- * A class which tags a window with a particular semantic usage,
- * either tooltip, menu, sub-menu, popup-menu, or comobobox-popup.
- * This is used as a temporary solution for getting native AWT support
- * for transition effects in Windows 98 and Windows 2000.  The native
- * code will interpret the windowType property and automatically
- * implement appropriate animation when the window is shown/hidden.
- * <p>
- * Note that support for transition effects may be supported with a
- * different mechanism in the future and so this class is
- * package-private and targeted for Swing implementation use only.
- * <p>
- * <strong>Warning:</strong>
- * Serialized objects of this class will not be compatible with
- * future Swing releases.  The current serialization support is appropriate
- * for short term storage or RMI between applications running the same
- * version of Swing.  A future release of Swing will provide support for
- * long term persistence.
- *
- * @author Amy Fowler
- */
-class WindowsPopupWindow extends JWindow {
-
-    static final int UNDEFINED_WINDOW_TYPE      = 0;
-    static final int TOOLTIP_WINDOW_TYPE        = 1;
-    static final int MENU_WINDOW_TYPE           = 2;
-    static final int SUBMENU_WINDOW_TYPE        = 3;
-    static final int POPUPMENU_WINDOW_TYPE      = 4;
-    static final int COMBOBOX_POPUP_WINDOW_TYPE = 5;
-
-    private int windowType;
-
-    WindowsPopupWindow(Window parent) {
-        super(parent);
-        setFocusableWindowState(false);
-    }
-
-    void setWindowType(int type) {
-        windowType = type;
-    }
-
-    int getWindowType() {
-        return windowType;
-    }
-
-    public void update(Graphics g) {
-        paint(g);
-    }
-
-    public void hide() {
-        super.hide();
-        /** We need to call removeNotify() here because hide() does
-         * something only if Component.visible is true. When the app
-         * frame is miniaturized, the parent frame of this frame is
-         * invisible, causing AWT to believe that this frame
-         *  is invisible and causing hide() to do nothing
-         */
-        removeNotify();
-    }
-
-    public void show() {
-        super.show();
-        this.pack();
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsProgressBarUI.java b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsProgressBarUI.java
deleted file mode 100755
index 8fb15f9..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsProgressBarUI.java
+++ /dev/null
@@ -1,400 +0,0 @@
-/*
- * Copyright (c) 1997, 2006, 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.java.swing.plaf.windows;
-
-import javax.swing.plaf.basic.*;
-import javax.swing.plaf.*;
-import javax.swing.*;
-import java.awt.*;
-
-import static com.sun.java.swing.plaf.windows.TMSchema.*;
-import static com.sun.java.swing.plaf.windows.XPStyle.Skin;
-
-
-/**
- * Windows rendition of the component.
- * <p>
- * <strong>Warning:</strong>
- * Serialized objects of this class will not be compatible with
- * future Swing releases.  The current serialization support is appropriate
- * for short term storage or RMI between applications running the same
- * version of Swing.  A future release of Swing will provide support for
- * long term persistence.
- *
- * @author Michael C. Albers
- */
-public class WindowsProgressBarUI extends BasicProgressBarUI
-{
-
-    private Rectangle previousFullBox;
-    private Insets indeterminateInsets;
-
-    public static ComponentUI createUI(JComponent x) {
-        return new WindowsProgressBarUI();
-    }
-
-
-    protected void installDefaults() {
-        super.installDefaults();
-
-        if (XPStyle.getXP() != null) {
-            LookAndFeel.installProperty(progressBar, "opaque", Boolean.FALSE);
-            progressBar.setBorder(null);
-            indeterminateInsets = UIManager.getInsets("ProgressBar.indeterminateInsets");
-        }
-    }
-
-    /**
-     * Returns the baseline.
-     *
-     * @throws NullPointerException {@inheritDoc}
-     * @throws IllegalArgumentException {@inheritDoc}
-     * @see javax.swing.JComponent#getBaseline(int, int)
-     * @since 1.6
-     */
-    public int getBaseline(JComponent c, int width, int height) {
-        int baseline = super.getBaseline(c, width, height);
-        if (XPStyle.getXP() != null && progressBar.isStringPainted() &&
-                progressBar.getOrientation() == JProgressBar.HORIZONTAL) {
-            FontMetrics metrics = progressBar.
-                    getFontMetrics(progressBar.getFont());
-            int y = progressBar.getInsets().top;
-            if (progressBar.isIndeterminate()) {
-                y = -1;
-                height--;
-            }
-            else {
-                y = 0;
-                height -= 3;
-            }
-            baseline = y + (height + metrics.getAscent() -
-                        metrics.getLeading() -
-                        metrics.getDescent()) / 2;
-        }
-        return baseline;
-    }
-
-    protected Dimension getPreferredInnerHorizontal() {
-        XPStyle xp = XPStyle.getXP();
-        if (xp != null) {
-             Skin skin = xp.getSkin(progressBar, Part.PP_BAR);
-             return new Dimension(
-                     (int)super.getPreferredInnerHorizontal().getWidth(),
-                     skin.getHeight());
-         }
-         return super.getPreferredInnerHorizontal();
-    }
-
-    protected Dimension getPreferredInnerVertical() {
-         XPStyle xp = XPStyle.getXP();
-         if (xp != null) {
-             Skin skin = xp.getSkin(progressBar, Part.PP_BARVERT);
-             return new Dimension(
-                     skin.getWidth(),
-                     (int)super.getPreferredInnerVertical().getHeight());
-         }
-         return super.getPreferredInnerVertical();
-    }
-
-    protected void paintDeterminate(Graphics g, JComponent c) {
-        XPStyle xp = XPStyle.getXP();
-        if (xp != null) {
-            boolean vertical = (progressBar.getOrientation() == JProgressBar.VERTICAL);
-            boolean isLeftToRight = WindowsGraphicsUtils.isLeftToRight(c);
-            int barRectWidth = progressBar.getWidth();
-            int barRectHeight = progressBar.getHeight()-1;
-            // amount of progress to draw
-            int amountFull = getAmountFull(null, barRectWidth, barRectHeight);
-
-            paintXPBackground(g, vertical, barRectWidth, barRectHeight);
-            // Paint progress
-            if (progressBar.isStringPainted()) {
-                // Do not paint the standard stripes from the skin, because they obscure
-                // the text
-                g.setColor(progressBar.getForeground());
-                barRectHeight -= 2;
-                barRectWidth -= 2;
-                Graphics2D g2 = (Graphics2D)g;
-                g2.setStroke(new BasicStroke((float)(vertical ? barRectWidth : barRectHeight),
-                                             BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL));
-                if (!vertical) {
-                    if (isLeftToRight) {
-                        g2.drawLine(2,              barRectHeight / 2 + 1,
-                                    amountFull - 2, barRectHeight / 2 + 1);
-                    } else {
-                        g2.drawLine(2 + barRectWidth,
-                                    barRectHeight / 2 + 1,
-                                    2 + barRectWidth - (amountFull - 2),
-                                    barRectHeight / 2 + 1);
-                    }
-                    paintString(g, 0, 0, barRectWidth, barRectHeight, amountFull, null);
-                } else {
-                    g2.drawLine(barRectWidth/2 + 1, barRectHeight + 1,
-                                barRectWidth/2 + 1, barRectHeight + 1 - amountFull + 2);
-                    paintString(g, 2, 2, barRectWidth, barRectHeight, amountFull, null);
-                }
-
-            } else {
-                Skin skin = xp.getSkin(progressBar, vertical ? Part.PP_CHUNKVERT : Part.PP_CHUNK);
-                int thickness;
-                if (vertical) {
-                    thickness = barRectWidth - 5;
-                } else {
-                    thickness = barRectHeight - 5;
-                }
-
-                int chunkSize = xp.getInt(progressBar, Part.PP_PROGRESS, null, Prop.PROGRESSCHUNKSIZE, 2);
-                int spaceSize = xp.getInt(progressBar, Part.PP_PROGRESS, null, Prop.PROGRESSSPACESIZE, 0);
-                int nChunks = (amountFull-4) / (chunkSize + spaceSize);
-
-                // See if we can squeeze in an extra chunk without spacing after
-                if (spaceSize > 0 && (nChunks * (chunkSize + spaceSize) + chunkSize) < (amountFull-4)) {
-                    nChunks++;
-                }
-
-                for (int i = 0; i < nChunks; i++) {
-                    if (vertical) {
-                        skin.paintSkin(g,
-                                       3, barRectHeight - i * (chunkSize + spaceSize) - chunkSize - 2,
-                                       thickness, chunkSize, null);
-                    } else {
-                        if (isLeftToRight) {
-                            skin.paintSkin(g,
-                                           4 + i * (chunkSize + spaceSize), 2,
-                                           chunkSize, thickness, null);
-                        } else {
-                            skin.paintSkin(g,
-                                           barRectWidth - (2 + (i+1) * (chunkSize + spaceSize)), 2,
-                                           chunkSize, thickness, null);
-                        }
-                    }
-                }
-            }
-        } else {
-            super.paintDeterminate(g, c);
-        }
-    }
-
-
-    /**
-     * {@inheritDoc}
-     * @since 1.6
-     */
-    protected void setAnimationIndex(int newValue) {
-        super.setAnimationIndex(newValue);
-        XPStyle xp = XPStyle.getXP();
-        if (xp != null) {
-            if (boxRect != null) {
-                // get the full repaint area and add it the
-                // previous one so we can erase it
-                Rectangle chunk = getFullChunkBounds(boxRect);
-                if (previousFullBox != null) {
-                    chunk.add(previousFullBox);
-                }
-                progressBar.repaint(chunk);
-            } else {
-                progressBar.repaint();
-            }
-        }
-    }
-
-
-    /**
-     * {@inheritDoc}
-     * @since 1.6
-     */
-    protected int getBoxLength(int availableLength, int otherDimension) {
-        XPStyle xp = XPStyle.getXP();
-        if (xp != null) {
-            return 6; // an apparently hard coded value in Windows
-        }
-        return super.getBoxLength(availableLength, otherDimension);
-    }
-
-    /**
-     * {@inheritDoc}
-     * @since 1.6
-     */
-    protected Rectangle getBox(Rectangle r) {
-        Rectangle rect = super.getBox(r);
-
-        XPStyle xp = XPStyle.getXP();
-        if (xp != null) {
-            boolean vertical = (progressBar.getOrientation()
-                                 == JProgressBar.VERTICAL);
-            Part part = vertical ? Part.PP_BARVERT : Part.PP_BAR;
-            Insets ins = indeterminateInsets;
-
-            int currentFrame = getAnimationIndex();
-            int framecount = getFrameCount()/2;
-
-            int gap = xp.getInt(progressBar, Part.PP_PROGRESS, null,
-                    Prop.PROGRESSSPACESIZE, 0);
-            currentFrame = currentFrame % framecount;
-
-            // this code adjusts the chunk size to properly account for the
-            // size and gap specified in the XP style. It also does it's own
-            // box placement for the chunk animation. This is required because
-            // the inherited algorithm from BasicProgressBarUI goes back and
-            // forth whereas XP only goes in one direction. XP also has ghosted
-            // trailing chunks to create the illusion of speed. This code
-            // adjusts the pixel length of the animation to account for the
-            // trails.
-            if (!vertical) {
-                rect.y = rect.y + ins.top;
-                rect.height = progressBar.getHeight() - ins.top - ins.bottom;
-                int len = progressBar.getWidth() - ins.left - ins.right;
-                len += (rect.width+gap)*2; // add 2x for the trails
-                double delta = (double)(len) / (double)framecount;
-                rect.x = (int)(delta * currentFrame) + ins.left;
-            } else {
-                rect.x = rect.x + ins.left;
-                rect.width = progressBar.getWidth() - ins.left - ins.right;
-                int len = progressBar.getHeight() - ins.top - ins.bottom;
-                len += (rect.height+gap)*2; // add 2x for the trails
-                double delta = (double)(len) / (double)framecount;
-                rect.y = (int)(delta * currentFrame) + ins.top;
-            }
-        }
-        return rect;
-    }
-
-
-    protected void paintIndeterminate(Graphics g, JComponent c) {
-        XPStyle xp = XPStyle.getXP();
-        if (xp != null) {
-            boolean vertical = (progressBar.getOrientation()
-                                 == JProgressBar.VERTICAL);
-            int barRectWidth = progressBar.getWidth();
-            int barRectHeight = progressBar.getHeight();
-            paintXPBackground(g, vertical, barRectWidth, barRectHeight);
-
-            // Paint the bouncing box.
-            boxRect = getBox(boxRect);
-            if (boxRect != null) {
-                g.setColor(progressBar.getForeground());
-                if (!(g instanceof Graphics2D)) {
-                    return;
-                }
-                paintIndeterminateFrame(boxRect, (Graphics2D)g, vertical,
-                                        barRectWidth, barRectHeight);
-                if (progressBar.isStringPainted()) {
-                    if (!vertical) {
-                        paintString(g, -1, -1, barRectWidth, barRectHeight, 0, null);
-                    } else {
-                        paintString(g, 1, 1, barRectWidth, barRectHeight, 0, null);
-                    }
-                }
-            }
-        } else {
-            super.paintIndeterminate(g, c);
-        }
-    }
-
-    private Rectangle getFullChunkBounds(Rectangle box) {
-        boolean vertical = (progressBar.getOrientation() == JProgressBar.VERTICAL);
-        XPStyle xp = XPStyle.getXP();
-        int gap = xp.getInt(progressBar, Part.PP_PROGRESS, null,
-                            Prop.PROGRESSSPACESIZE, 0);
-
-        if (!vertical) {
-            int chunksize = box.width+gap;
-            return new Rectangle(box.x-chunksize*2, box.y, chunksize*3, box.height);
-        } else {
-            int chunksize = box.height+gap;
-            return new Rectangle(box.x, box.y-chunksize*2, box.width, chunksize*3);
-        }
-    }
-
-    private void paintIndeterminateFrame(Rectangle box, Graphics2D g,
-                                          boolean vertical,
-                                          int bgwidth, int bgheight) {
-        XPStyle xp = XPStyle.getXP();
-
-        // create a new graphics to keep drawing surface state
-        Graphics2D gfx = (Graphics2D)g.create();
-
-        Part part = vertical ? Part.PP_BARVERT : Part.PP_BAR;
-        Part chunk = vertical ? Part.PP_CHUNKVERT : Part.PP_CHUNK;
-
-        // calculate the chunk offsets
-        int gap = xp.getInt(progressBar, Part.PP_PROGRESS, null,
-                            Prop.PROGRESSSPACESIZE, 0);
-        int deltax = 0;
-        int deltay = 0;
-        if (!vertical) {
-            deltax = -box.width - gap;
-            deltay = 0;
-        } else {
-            deltax = 0;
-            deltay = -box.height - gap;
-        }
-
-        // Calculate the area of the chunks combined
-        Rectangle fullBox = getFullChunkBounds(box);
-
-        // save this box for the next time
-        previousFullBox = fullBox;
-
-        // this is the entire progress bar minus the track and borders
-        Insets ins = indeterminateInsets;
-        Rectangle progbarExtents = new Rectangle(ins.left, ins.top,
-                                                 bgwidth  - ins.left - ins.right,
-                                                 bgheight - ins.top  - ins.bottom);
-
-        // only paint where the chunks overlap with the progress bar drawing area
-        Rectangle repaintArea = progbarExtents.intersection(fullBox);
-
-        // adjust the cliprect to chop the chunks when they go off the end
-        gfx.clip(repaintArea);
-
-        // get the skin
-        XPStyle.Skin skin = xp.getSkin(progressBar, chunk);
-
-        // do the drawing
-        gfx.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.8f));
-        skin.paintSkin(gfx, box.x, box.y, box.width, box.height, null);
-        box.translate(deltax, deltay);
-        gfx.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f));
-        skin.paintSkin(gfx, box.x, box.y, box.width, box.height, null);
-        box.translate(deltax, deltay);
-        gfx.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.2f));
-        skin.paintSkin(gfx, box.x, box.y, box.width, box.height, null);
-
-        // get rid of our clip and composite changes
-        gfx.dispose();
-    }
-
-    private void paintXPBackground(Graphics g, boolean vertical,
-                                   int barRectWidth, int barRectHeight) {
-        XPStyle xp = XPStyle.getXP();
-        Part part = vertical ? Part.PP_BARVERT : Part.PP_BAR;
-        Skin skin = xp.getSkin(progressBar, part);
-
-        // Paint background
-        skin.paintSkin(g, 0, 0, barRectWidth, barRectHeight, null);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsRadioButtonMenuItemUI.java b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsRadioButtonMenuItemUI.java
deleted file mode 100755
index c43876f..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsRadioButtonMenuItemUI.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Copyright (c) 1997, 2006, 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.java.swing.plaf.windows;
-
-import java.awt.*;
-import javax.swing.*;
-import javax.swing.plaf.*;
-import javax.swing.plaf.basic.*;
-
-import com.sun.java.swing.plaf.windows.TMSchema.Part;
-import com.sun.java.swing.plaf.windows.TMSchema.State;
-
-/**
- * Windows rendition of the component.
- * <p>
- * <strong>Warning:</strong>
- * Serialized objects of this class will not be compatible with
- * future Swing releases.  The current serialization support is appropriate
- * for short term storage or RMI between applications running the same
- * version of Swing.  A future release of Swing will provide support for
- * long term persistence.
- */
-public class WindowsRadioButtonMenuItemUI extends BasicRadioButtonMenuItemUI {
-
-    final WindowsMenuItemUIAccessor accessor =
-        new WindowsMenuItemUIAccessor() {
-
-           public JMenuItem getMenuItem() {
-               return menuItem;
-           }
-
-           public State getState(JMenuItem menuItem) {
-               return WindowsMenuItemUI.getState(this, menuItem);
-           }
-
-           public Part getPart(JMenuItem menuItem) {
-               return WindowsMenuItemUI.getPart(this, menuItem);
-           }
-    };
-    public static ComponentUI createUI(JComponent b) {
-        return new WindowsRadioButtonMenuItemUI();
-    }
-
-    @Override
-    protected  void paintBackground(Graphics g, JMenuItem menuItem,
-            Color bgColor) {
-        if (WindowsMenuItemUI.isVistaPainting()) {
-            WindowsMenuItemUI.paintBackground(accessor, g, menuItem, bgColor);
-            return;
-        }
-        super.paintBackground(g, menuItem, bgColor);
-    }
-
-    /**
-     * Method which renders the text of the current menu item.
-     * <p>
-     * @param g Graphics context
-     * @param menuItem Current menu item to render
-     * @param textRect Bounding rectangle to render the text.
-     * @param text String to render
-     * @since 1.4
-     */
-    protected void paintText(Graphics g, JMenuItem menuItem,
-            Rectangle textRect, String text) {
-        if (WindowsMenuItemUI.isVistaPainting()) {
-            WindowsMenuItemUI.paintText(accessor, g, menuItem, textRect, text);
-            return;
-        }
-        ButtonModel model = menuItem.getModel();
-        Color oldColor = g.getColor();
-
-        if(model.isEnabled() && model.isArmed()) {
-            g.setColor(selectionForeground); // Uses protected field.
-        }
-
-        WindowsGraphicsUtils.paintText(g, menuItem, textRect, text, 0);
-
-        g.setColor(oldColor);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsRadioButtonUI.java b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsRadioButtonUI.java
deleted file mode 100755
index 81c97f4..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsRadioButtonUI.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-package com.sun.java.swing.plaf.windows;
-
-import sun.awt.AppContext;
-
-import javax.swing.plaf.basic.*;
-import javax.swing.*;
-import javax.swing.plaf.*;
-
-import java.awt.*;
-
-
-/**
- * Windows rendition of the component.
- * <p>
- * <strong>Warning:</strong>
- * Serialized objects of this class will not be compatible with
- * future Swing releases.  The current serialization support is appropriate
- * for short term storage or RMI between applications running the same
- * version of Swing.  A future release of Swing will provide support for
- * long term persistence.
- */
-public class WindowsRadioButtonUI extends BasicRadioButtonUI
-{
-    private static final Object WINDOWS_RADIO_BUTTON_UI_KEY = new Object();
-
-    protected int dashedRectGapX;
-    protected int dashedRectGapY;
-    protected int dashedRectGapWidth;
-    protected int dashedRectGapHeight;
-
-    protected Color focusColor;
-
-    private boolean initialized = false;
-
-    // ********************************
-    //          Create PLAF
-    // ********************************
-    public static ComponentUI createUI(JComponent c) {
-        AppContext appContext = AppContext.getAppContext();
-        WindowsRadioButtonUI windowsRadioButtonUI =
-                (WindowsRadioButtonUI) appContext.get(WINDOWS_RADIO_BUTTON_UI_KEY);
-        if (windowsRadioButtonUI == null) {
-            windowsRadioButtonUI = new WindowsRadioButtonUI();
-            appContext.put(WINDOWS_RADIO_BUTTON_UI_KEY, windowsRadioButtonUI);
-        }
-        return windowsRadioButtonUI;
-    }
-
-    // ********************************
-    //           Defaults
-    // ********************************
-    public void installDefaults(AbstractButton b) {
-        super.installDefaults(b);
-        if(!initialized) {
-            dashedRectGapX = ((Integer)UIManager.get("Button.dashedRectGapX")).intValue();
-            dashedRectGapY = ((Integer)UIManager.get("Button.dashedRectGapY")).intValue();
-            dashedRectGapWidth = ((Integer)UIManager.get("Button.dashedRectGapWidth")).intValue();
-            dashedRectGapHeight = ((Integer)UIManager.get("Button.dashedRectGapHeight")).intValue();
-            focusColor = UIManager.getColor(getPropertyPrefix() + "focus");
-            initialized = true;
-        }
-        if (XPStyle.getXP() != null) {
-            LookAndFeel.installProperty(b, "rolloverEnabled", Boolean.TRUE);
-        }
-    }
-
-    protected void uninstallDefaults(AbstractButton b) {
-        super.uninstallDefaults(b);
-        initialized = false;
-    }
-
-    protected Color getFocusColor() {
-        return focusColor;
-    }
-
-    // ********************************
-    //          Paint Methods
-    // ********************************
-
-    /**
-     * Overridden method to render the text without the mnemonic
-     */
-    protected void paintText(Graphics g, AbstractButton b, Rectangle textRect, String text) {
-        WindowsGraphicsUtils.paintText(g, b, textRect, text, getTextShiftOffset());
-    }
-
-
-    protected void paintFocus(Graphics g, Rectangle textRect, Dimension d){
-        g.setColor(getFocusColor());
-        BasicGraphicsUtils.drawDashedRect(g, textRect.x, textRect.y, textRect.width, textRect.height);
-    }
-
-    // ********************************
-    //          Layout Methods
-    // ********************************
-    public Dimension getPreferredSize(JComponent c) {
-        Dimension d = super.getPreferredSize(c);
-
-        /* Ensure that the width and height of the button is odd,
-         * to allow for the focus line if focus is painted
-         */
-        AbstractButton b = (AbstractButton)c;
-        if (d != null && b.isFocusPainted()) {
-            if(d.width % 2 == 0) { d.width += 1; }
-            if(d.height % 2 == 0) { d.height += 1; }
-        }
-        return d;
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsRootPaneUI.java b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsRootPaneUI.java
deleted file mode 100755
index 3da0830..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsRootPaneUI.java
+++ /dev/null
@@ -1,198 +0,0 @@
-/*
- * Copyright (c) 2000, 2006, 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.java.swing.plaf.windows;
-
-import java.awt.Component;
-import java.awt.Container;
-import java.awt.Event;
-import java.awt.KeyEventPostProcessor;
-import java.awt.Window;
-import java.awt.Toolkit;
-import sun.awt.SunToolkit;
-
-import java.awt.event.ActionEvent;
-import java.awt.event.KeyEvent;
-
-import javax.swing.AbstractAction;
-import javax.swing.ActionMap;
-import javax.swing.InputMap;
-import javax.swing.KeyStroke;
-import javax.swing.JComponent;
-import javax.swing.JLabel;
-import javax.swing.JRootPane;
-import javax.swing.SwingUtilities;
-import javax.swing.UIManager;
-import javax.swing.AbstractButton;
-import javax.swing.JFrame;
-import javax.swing.JMenu;
-import javax.swing.JMenuBar;
-import javax.swing.MenuElement;
-import javax.swing.MenuSelectionManager;
-
-import javax.swing.plaf.ActionMapUIResource;
-import javax.swing.plaf.ComponentUI;
-import javax.swing.plaf.InputMapUIResource;
-
-import javax.swing.plaf.basic.BasicRootPaneUI;
-import javax.swing.plaf.basic.ComboPopup;
-
-/**
- * Windows implementation of RootPaneUI, there is one shared between all
- * JRootPane instances.
- *
- * @author Mark Davidson
- * @since 1.4
- */
-public class WindowsRootPaneUI extends BasicRootPaneUI {
-
-    private final static WindowsRootPaneUI windowsRootPaneUI = new WindowsRootPaneUI();
-    static final AltProcessor altProcessor = new AltProcessor();
-
-    public static ComponentUI createUI(JComponent c) {
-        return windowsRootPaneUI;
-    }
-
-    static class AltProcessor implements KeyEventPostProcessor {
-        static boolean altKeyPressed = false;
-        static boolean menuCanceledOnPress = false;
-        static JRootPane root = null;
-        static Window winAncestor = null;
-
-        void altPressed(KeyEvent ev) {
-            MenuSelectionManager msm =
-                MenuSelectionManager.defaultManager();
-            MenuElement[] path = msm.getSelectedPath();
-            if (path.length > 0 && ! (path[0] instanceof ComboPopup)) {
-                msm.clearSelectedPath();
-                menuCanceledOnPress = true;
-                ev.consume();
-            } else if(path.length > 0) { // We are in ComboBox
-                menuCanceledOnPress = false;
-                WindowsLookAndFeel.setMnemonicHidden(false);
-                WindowsGraphicsUtils.repaintMnemonicsInWindow(winAncestor);
-                ev.consume();
-            } else {
-                menuCanceledOnPress = false;
-                WindowsLookAndFeel.setMnemonicHidden(false);
-                WindowsGraphicsUtils.repaintMnemonicsInWindow(winAncestor);
-                JMenuBar mbar = root != null ? root.getJMenuBar() : null;
-                if(mbar == null && winAncestor instanceof JFrame) {
-                    mbar = ((JFrame)winAncestor).getJMenuBar();
-                }
-                JMenu menu = mbar != null ? mbar.getMenu(0) : null;
-                if(menu != null) {
-                    ev.consume();
-                }
-            }
-        }
-
-        void altReleased(KeyEvent ev) {
-            if (menuCanceledOnPress) {
-                WindowsLookAndFeel.setMnemonicHidden(true);
-                WindowsGraphicsUtils.repaintMnemonicsInWindow(winAncestor);
-                return;
-            }
-
-            MenuSelectionManager msm =
-                MenuSelectionManager.defaultManager();
-            if (msm.getSelectedPath().length == 0) {
-                // if no menu is active, we try activating the menubar
-
-                JMenuBar mbar = root != null ? root.getJMenuBar() : null;
-                if(mbar == null && winAncestor instanceof JFrame) {
-                    mbar = ((JFrame)winAncestor).getJMenuBar();
-                }
-                JMenu menu = mbar != null ? mbar.getMenu(0) : null;
-
-                // It might happen that the altRelease event is processed
-                // with a reasonable delay since it has been generated.
-                // Here we check the last deactivation time of the containing
-                // window. If this time appears to be greater than the altRelease
-                // event time the event is skipped to avoid unexpected menu
-                // activation. See 7121442.
-                boolean skip = false;
-                Toolkit tk = Toolkit.getDefaultToolkit();
-                if (tk instanceof SunToolkit) {
-                    skip = ev.getWhen() <= ((SunToolkit)tk).getWindowDeactivationTime(winAncestor);
-                }
-
-                if (menu != null && !skip) {
-                    MenuElement[] path = new MenuElement[2];
-                    path[0] = mbar;
-                    path[1] = menu;
-                    msm.setSelectedPath(path);
-                } else if(!WindowsLookAndFeel.isMnemonicHidden()) {
-                    WindowsLookAndFeel.setMnemonicHidden(true);
-                    WindowsGraphicsUtils.repaintMnemonicsInWindow(winAncestor);
-                }
-            } else {
-                if((msm.getSelectedPath())[0] instanceof ComboPopup) {
-                    WindowsLookAndFeel.setMnemonicHidden(true);
-                    WindowsGraphicsUtils.repaintMnemonicsInWindow(winAncestor);
-                }
-            }
-
-        }
-
-        public boolean postProcessKeyEvent(KeyEvent ev) {
-            if(ev.isConsumed()) {
-                // do not manage consumed event
-                return false;
-            }
-            if (ev.getKeyCode() == KeyEvent.VK_ALT) {
-                root = SwingUtilities.getRootPane(ev.getComponent());
-                winAncestor = (root == null ? null :
-                        SwingUtilities.getWindowAncestor(root));
-
-                if (ev.getID() == KeyEvent.KEY_PRESSED) {
-                    if (!altKeyPressed) {
-                        altPressed(ev);
-                    }
-                    altKeyPressed = true;
-                    return true;
-                } else if (ev.getID() == KeyEvent.KEY_RELEASED) {
-                    if (altKeyPressed) {
-                        altReleased(ev);
-                    } else {
-                        MenuSelectionManager msm =
-                            MenuSelectionManager.defaultManager();
-                        MenuElement[] path = msm.getSelectedPath();
-                        if (path.length <= 0) {
-                            WindowsLookAndFeel.setMnemonicHidden(true);
-                            WindowsGraphicsUtils.repaintMnemonicsInWindow(winAncestor);
-                        }
-                    }
-                    altKeyPressed = false;
-                }
-                root = null;
-                winAncestor = null;
-            } else {
-                altKeyPressed = false;
-            }
-            return false;
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsScrollBarUI.java b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsScrollBarUI.java
deleted file mode 100755
index 2052617..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsScrollBarUI.java
+++ /dev/null
@@ -1,479 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-package com.sun.java.swing.plaf.windows;
-
-import java.awt.*;
-import java.awt.event.*;
-import java.awt.image.*;
-import java.lang.ref.*;
-import java.util.*;
-import javax.swing.plaf.basic.*;
-import javax.swing.*;
-import javax.swing.plaf.ComponentUI;
-
-import static com.sun.java.swing.plaf.windows.TMSchema.*;
-import static com.sun.java.swing.plaf.windows.XPStyle.Skin;
-
-
-/**
- * Windows rendition of the component.
- * <p>
- * <strong>Warning:</strong>
- * Serialized objects of this class will not be compatible with
- * future Swing releases.  The current serialization support is appropriate
- * for short term storage or RMI between applications running the same
- * version of Swing.  A future release of Swing will provide support for
- * long term persistence.
- */
-public class WindowsScrollBarUI extends BasicScrollBarUI {
-    private Grid thumbGrid;
-    private Grid highlightGrid;
-
-    /**
-     * Creates a UI for a JScrollBar.
-     *
-     * @param c the text field
-     * @return the UI
-     */
-    public static ComponentUI createUI(JComponent c) {
-        return new WindowsScrollBarUI();
-    }
-
-    protected void installDefaults() {
-        super.installDefaults();
-
-        if (XPStyle.getXP() != null) {
-            scrollbar.setBorder(null);
-        }
-    }
-
-    public void uninstallUI(JComponent c) {
-        super.uninstallUI(c);
-        thumbGrid = highlightGrid = null;
-    }
-
-    protected void configureScrollBarColors() {
-        super.configureScrollBarColors();
-        Color color = UIManager.getColor("ScrollBar.trackForeground");
-        if (color != null && trackColor != null) {
-            thumbGrid = Grid.getGrid(color, trackColor);
-        }
-
-        color = UIManager.getColor("ScrollBar.trackHighlightForeground");
-        if (color != null && trackHighlightColor != null) {
-            highlightGrid = Grid.getGrid(color, trackHighlightColor);
-        }
-    }
-
-    protected JButton createDecreaseButton(int orientation)  {
-        return new WindowsArrowButton(orientation,
-                                    UIManager.getColor("ScrollBar.thumb"),
-                                    UIManager.getColor("ScrollBar.thumbShadow"),
-                                    UIManager.getColor("ScrollBar.thumbDarkShadow"),
-                                    UIManager.getColor("ScrollBar.thumbHighlight"));
-    }
-
-    protected JButton createIncreaseButton(int orientation)  {
-        return new WindowsArrowButton(orientation,
-                                    UIManager.getColor("ScrollBar.thumb"),
-                                    UIManager.getColor("ScrollBar.thumbShadow"),
-                                    UIManager.getColor("ScrollBar.thumbDarkShadow"),
-                                    UIManager.getColor("ScrollBar.thumbHighlight"));
-    }
-
-    /**
-     * {@inheritDoc}
-     * @since 1.6
-     */
-    @Override
-    protected ArrowButtonListener createArrowButtonListener(){
-        // we need to repaint the entire scrollbar because state change for each
-        // button causes a state change for the thumb and other button on Vista
-        if(XPStyle.isVista()) {
-            return new ArrowButtonListener() {
-                public void mouseEntered(MouseEvent evt) {
-                    repaint();
-                    super.mouseEntered(evt);
-                }
-                public void mouseExited(MouseEvent evt) {
-                    repaint();
-                    super.mouseExited(evt);
-                }
-                private void repaint() {
-                    scrollbar.repaint();
-                }
-            };
-        } else {
-            return super.createArrowButtonListener();
-        }
-    }
-
-    protected void paintTrack(Graphics g, JComponent c, Rectangle trackBounds){
-        boolean v = (scrollbar.getOrientation() == JScrollBar.VERTICAL);
-
-        XPStyle xp = XPStyle.getXP();
-        if (xp != null) {
-            JScrollBar sb = (JScrollBar)c;
-            State state = State.NORMAL;
-            // Pending: Implement rollover (hot) and pressed
-            if (!sb.isEnabled()) {
-                state = State.DISABLED;
-            }
-            Part part = v ? Part.SBP_LOWERTRACKVERT : Part.SBP_LOWERTRACKHORZ;
-            xp.getSkin(sb, part).paintSkin(g, trackBounds, state);
-        } else if (thumbGrid == null) {
-            super.paintTrack(g, c, trackBounds);
-        }
-        else {
-            thumbGrid.paint(g, trackBounds.x, trackBounds.y, trackBounds.width,
-                            trackBounds.height);
-            if (trackHighlight == DECREASE_HIGHLIGHT) {
-                paintDecreaseHighlight(g);
-            }
-            else if (trackHighlight == INCREASE_HIGHLIGHT) {
-                paintIncreaseHighlight(g);
-            }
-        }
-    }
-
-    protected void paintThumb(Graphics g, JComponent c, Rectangle thumbBounds) {
-        boolean v = (scrollbar.getOrientation() == JScrollBar.VERTICAL);
-
-        XPStyle xp = XPStyle.getXP();
-        if (xp != null) {
-            JScrollBar sb = (JScrollBar)c;
-            State state = State.NORMAL;
-            if (!sb.isEnabled()) {
-                state = State.DISABLED;
-            } else if (isDragging) {
-                state = State.PRESSED;
-            } else if (isThumbRollover()) {
-                state = State.HOT;
-            } else if (XPStyle.isVista()) {
-                if ((incrButton != null && incrButton.getModel().isRollover()) ||
-                    (decrButton != null && decrButton.getModel().isRollover())) {
-                    state = State.HOVER;
-                }
-            }
-            // Paint thumb
-            Part thumbPart = v ? Part.SBP_THUMBBTNVERT : Part.SBP_THUMBBTNHORZ;
-            xp.getSkin(sb, thumbPart).paintSkin(g, thumbBounds, state);
-            // Paint gripper
-            Part gripperPart = v ? Part.SBP_GRIPPERVERT : Part.SBP_GRIPPERHORZ;
-            Skin skin = xp.getSkin(sb, gripperPart);
-            Insets gripperInsets = xp.getMargin(c, thumbPart, null, Prop.CONTENTMARGINS);
-            if (gripperInsets == null ||
-                (v && (thumbBounds.height - gripperInsets.top -
-                       gripperInsets.bottom >= skin.getHeight())) ||
-                (!v && (thumbBounds.width - gripperInsets.left -
-                        gripperInsets.right >= skin.getWidth()))) {
-                skin.paintSkin(g,
-                               thumbBounds.x + (thumbBounds.width  - skin.getWidth()) / 2,
-                               thumbBounds.y + (thumbBounds.height - skin.getHeight()) / 2,
-                               skin.getWidth(), skin.getHeight(), state);
-            }
-        } else {
-            super.paintThumb(g, c, thumbBounds);
-        }
-    }
-
-
-    protected void paintDecreaseHighlight(Graphics g) {
-        if (highlightGrid == null) {
-            super.paintDecreaseHighlight(g);
-        }
-        else {
-            Insets insets = scrollbar.getInsets();
-            Rectangle thumbR = getThumbBounds();
-            int x, y, w, h;
-
-            if (scrollbar.getOrientation() == JScrollBar.VERTICAL) {
-                x = insets.left;
-                y = decrButton.getY() + decrButton.getHeight();
-                w = scrollbar.getWidth() - (insets.left + insets.right);
-                h = thumbR.y - y;
-            }
-            else {
-                x = decrButton.getX() + decrButton.getHeight();
-                y = insets.top;
-                w = thumbR.x - x;
-                h = scrollbar.getHeight() - (insets.top + insets.bottom);
-            }
-            highlightGrid.paint(g, x, y, w, h);
-        }
-    }
-
-
-    protected void paintIncreaseHighlight(Graphics g) {
-        if (highlightGrid == null) {
-            super.paintDecreaseHighlight(g);
-        }
-        else {
-            Insets insets = scrollbar.getInsets();
-            Rectangle thumbR = getThumbBounds();
-            int x, y, w, h;
-
-            if (scrollbar.getOrientation() == JScrollBar.VERTICAL) {
-                x = insets.left;
-                y = thumbR.y + thumbR.height;
-                w = scrollbar.getWidth() - (insets.left + insets.right);
-                h = incrButton.getY() - y;
-            }
-            else {
-                x = thumbR.x + thumbR.width;
-                y = insets.top;
-                w = incrButton.getX() - x;
-                h = scrollbar.getHeight() - (insets.top + insets.bottom);
-            }
-            highlightGrid.paint(g, x, y, w, h);
-        }
-    }
-
-
-    /**
-     * {@inheritDoc}
-     * @since 1.6
-     */
-    @Override
-    protected void setThumbRollover(boolean active) {
-        boolean old = isThumbRollover();
-        super.setThumbRollover(active);
-        // we need to repaint the entire scrollbar because state change for thumb
-        // causes state change for incr and decr buttons on Vista
-        if(XPStyle.isVista() && active != old) {
-            scrollbar.repaint();
-        }
-    }
-
-    /**
-     * WindowsArrowButton is used for the buttons to position the
-     * document up/down. It differs from BasicArrowButton in that the
-     * preferred size is always a square.
-     */
-    private class WindowsArrowButton extends BasicArrowButton {
-
-        public WindowsArrowButton(int direction, Color background, Color shadow,
-                         Color darkShadow, Color highlight) {
-            super(direction, background, shadow, darkShadow, highlight);
-        }
-
-        public WindowsArrowButton(int direction) {
-            super(direction);
-        }
-
-        public void paint(Graphics g) {
-            XPStyle xp = XPStyle.getXP();
-            if (xp != null) {
-                ButtonModel model = getModel();
-                Skin skin = xp.getSkin(this, Part.SBP_ARROWBTN);
-                State state = null;
-
-                boolean jointRollover = XPStyle.isVista() && (isThumbRollover() ||
-                    (this == incrButton && decrButton.getModel().isRollover()) ||
-                    (this == decrButton && incrButton.getModel().isRollover()));
-
-                // normal, rollover, pressed, disabled
-                if (model.isArmed() && model.isPressed()) {
-                    switch (direction) {
-                        case NORTH: state = State.UPPRESSED;    break;
-                        case SOUTH: state = State.DOWNPRESSED;  break;
-                        case WEST:  state = State.LEFTPRESSED;  break;
-                        case EAST:  state = State.RIGHTPRESSED; break;
-                    }
-                } else if (!model.isEnabled()) {
-                    switch (direction) {
-                        case NORTH: state = State.UPDISABLED;    break;
-                        case SOUTH: state = State.DOWNDISABLED;  break;
-                        case WEST:  state = State.LEFTDISABLED;  break;
-                        case EAST:  state = State.RIGHTDISABLED; break;
-                    }
-                } else if (model.isRollover() || model.isPressed()) {
-                    switch (direction) {
-                        case NORTH: state = State.UPHOT;    break;
-                        case SOUTH: state = State.DOWNHOT;  break;
-                        case WEST:  state = State.LEFTHOT;  break;
-                        case EAST:  state = State.RIGHTHOT; break;
-                    }
-                } else if (jointRollover) {
-                    switch (direction) {
-                        case NORTH: state = State.UPHOVER;    break;
-                        case SOUTH: state = State.DOWNHOVER;  break;
-                        case WEST:  state = State.LEFTHOVER;  break;
-                        case EAST:  state = State.RIGHTHOVER; break;
-                    }
-                } else {
-                    switch (direction) {
-                        case NORTH: state = State.UPNORMAL;    break;
-                        case SOUTH: state = State.DOWNNORMAL;  break;
-                        case WEST:  state = State.LEFTNORMAL;  break;
-                        case EAST:  state = State.RIGHTNORMAL; break;
-                    }
-                }
-
-                skin.paintSkin(g, 0, 0, getWidth(), getHeight(), state);
-            } else {
-                super.paint(g);
-            }
-        }
-
-        public Dimension getPreferredSize() {
-            int size = 16;
-            if (scrollbar != null) {
-                switch (scrollbar.getOrientation()) {
-                case JScrollBar.VERTICAL:
-                    size = scrollbar.getWidth();
-                    break;
-                case JScrollBar.HORIZONTAL:
-                    size = scrollbar.getHeight();
-                    break;
-                }
-                size = Math.max(size, 5);
-            }
-            return new Dimension(size, size);
-        }
-    }
-
-
-    /**
-     * This should be pulled out into its own class if more classes need to
-     * use it.
-     * <p>
-     * Grid is used to draw the track for windows scrollbars. Grids
-     * are cached in a HashMap, with the key being the rgb components
-     * of the foreground/background colors. Further the Grid is held through
-     * a WeakRef so that it can be freed when no longer needed. As the
-     * Grid is rather expensive to draw, it is drawn in a BufferedImage.
-     */
-    private static class Grid {
-        private static final int BUFFER_SIZE = 64;
-        private static HashMap<String, WeakReference<Grid>> map;
-
-        private BufferedImage image;
-
-        static {
-            map = new HashMap<String, WeakReference<Grid>>();
-        }
-
-        public static Grid getGrid(Color fg, Color bg) {
-            String key = fg.getRGB() + " " + bg.getRGB();
-            WeakReference<Grid> ref = map.get(key);
-            Grid grid = (ref == null) ? null : ref.get();
-            if (grid == null) {
-                grid = new Grid(fg, bg);
-                map.put(key, new WeakReference<Grid>(grid));
-            }
-            return grid;
-        }
-
-        public Grid(Color fg, Color bg) {
-            int cmap[] = { fg.getRGB(), bg.getRGB() };
-            IndexColorModel icm = new IndexColorModel(8, 2, cmap, 0, false, -1,
-                                                      DataBuffer.TYPE_BYTE);
-            image = new BufferedImage(BUFFER_SIZE, BUFFER_SIZE,
-                                      BufferedImage.TYPE_BYTE_INDEXED, icm);
-            Graphics g = image.getGraphics();
-            try {
-                g.setClip(0, 0, BUFFER_SIZE, BUFFER_SIZE);
-                paintGrid(g, fg, bg);
-            }
-            finally {
-                g.dispose();
-            }
-        }
-
-        /**
-         * Paints the grid into the specified Graphics at the specified
-         * location.
-         */
-        public void paint(Graphics g, int x, int y, int w, int h) {
-            Rectangle clipRect = g.getClipBounds();
-            int minX = Math.max(x, clipRect.x);
-            int minY = Math.max(y, clipRect.y);
-            int maxX = Math.min(clipRect.x + clipRect.width, x + w);
-            int maxY = Math.min(clipRect.y + clipRect.height, y + h);
-
-            if (maxX <= minX || maxY <= minY) {
-                return;
-            }
-            int xOffset = (minX - x) % 2;
-            for (int xCounter = minX; xCounter < maxX;
-                 xCounter += BUFFER_SIZE) {
-                int yOffset = (minY - y) % 2;
-                int width = Math.min(BUFFER_SIZE - xOffset,
-                                     maxX - xCounter);
-
-                for (int yCounter = minY; yCounter < maxY;
-                     yCounter += BUFFER_SIZE) {
-                    int height = Math.min(BUFFER_SIZE - yOffset,
-                                          maxY - yCounter);
-
-                    g.drawImage(image, xCounter, yCounter,
-                                xCounter + width, yCounter + height,
-                                xOffset, yOffset,
-                                xOffset + width, yOffset + height, null);
-                    if (yOffset != 0) {
-                        yCounter -= yOffset;
-                        yOffset = 0;
-                    }
-                }
-                if (xOffset != 0) {
-                    xCounter -= xOffset;
-                    xOffset = 0;
-                }
-            }
-        }
-
-        /**
-         * Actually renders the grid into the Graphics <code>g</code>.
-         */
-        private void paintGrid(Graphics g, Color fg, Color bg) {
-            Rectangle clipRect = g.getClipBounds();
-            g.setColor(bg);
-            g.fillRect(clipRect.x, clipRect.y, clipRect.width,
-                       clipRect.height);
-            g.setColor(fg);
-            g.translate(clipRect.x, clipRect.y);
-            int width = clipRect.width;
-            int height = clipRect.height;
-            int xCounter = clipRect.x % 2;
-            for (int end = width - height; xCounter < end; xCounter += 2) {
-                g.drawLine(xCounter, 0, xCounter + height, height);
-            }
-            for (int end = width; xCounter < end; xCounter += 2) {
-                g.drawLine(xCounter, 0, width, width - xCounter);
-            }
-
-            int yCounter = ((clipRect.x % 2) == 0) ? 2 : 1;
-            for (int end = height - width; yCounter < end; yCounter += 2) {
-                g.drawLine(0, yCounter, width, yCounter + width);
-            }
-            for (int end = height; yCounter < end; yCounter += 2) {
-                g.drawLine(0, yCounter, height - yCounter, height);
-            }
-            g.translate(-clipRect.x, -clipRect.y);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsScrollPaneUI.java b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsScrollPaneUI.java
deleted file mode 100755
index 86e5a0c..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsScrollPaneUI.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (c) 1997, 1998, 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.java.swing.plaf.windows;
-
-import javax.swing.plaf.basic.*;
-import javax.swing.*;
-
-
-
-/**
- * Windows rendition of the component.
- * <p>
- * <strong>Warning:</strong>
- * Serialized objects of this class will not be compatible with
- * future Swing releases.  The current serialization support is appropriate
- * for short term storage or RMI between applications running the same
- * version of Swing.  A future release of Swing will provide support for
- * long term persistence.
- */
-public class WindowsScrollPaneUI extends BasicScrollPaneUI
-{}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsSeparatorUI.java b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsSeparatorUI.java
deleted file mode 100755
index 1f0ece1..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsSeparatorUI.java
+++ /dev/null
@@ -1,35 +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.java.swing.plaf.windows;
-
-import javax.swing.plaf.basic.*;
-
-/**
- * Windows Separator.
- * <p>
- *
- */
-public class WindowsSeparatorUI extends BasicSeparatorUI { }
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsSliderUI.java b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsSliderUI.java
deleted file mode 100755
index dbfb7b8..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsSliderUI.java
+++ /dev/null
@@ -1,234 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-package com.sun.java.swing.plaf.windows;
-
-import java.awt.*;
-import java.awt.event.MouseEvent;
-
-import javax.swing.plaf.*;
-import javax.swing.plaf.basic.*;
-import javax.swing.*;
-
-import static com.sun.java.swing.plaf.windows.TMSchema.*;
-import static com.sun.java.swing.plaf.windows.XPStyle.Skin;
-
-
-/**
- * Windows rendition of the component.
- * <p>
- * <strong>Warning:</strong>
- * Serialized objects of this class will not be compatible with
- * future Swing releases.  The current serialization support is appropriate
- * for short term storage or RMI between applications running the same
- * version of Swing.  A future release of Swing will provide support for
- * long term persistence.
- */
-public class WindowsSliderUI extends BasicSliderUI
-{
-    private boolean rollover = false;
-    private boolean pressed = false;
-
-    public WindowsSliderUI(JSlider b){
-        super(b);
-    }
-
-    public static ComponentUI createUI(JComponent b) {
-        return new WindowsSliderUI((JSlider)b);
-    }
-
-
-    /**
-     * Overrides to return a private track listener subclass which handles
-     * the HOT, PRESSED, and FOCUSED states.
-     * @since 1.6
-     */
-    protected TrackListener createTrackListener(JSlider slider) {
-        return new WindowsTrackListener();
-    }
-
-    private class WindowsTrackListener extends TrackListener {
-
-        public void mouseMoved(MouseEvent e) {
-            updateRollover(thumbRect.contains(e.getX(), e.getY()));
-            super.mouseMoved(e);
-        }
-
-        public void mouseEntered(MouseEvent e) {
-            updateRollover(thumbRect.contains(e.getX(), e.getY()));
-            super.mouseEntered(e);
-        }
-
-        public void mouseExited(MouseEvent e) {
-            updateRollover(false);
-            super.mouseExited(e);
-        }
-
-        public void mousePressed(MouseEvent e) {
-            updatePressed(thumbRect.contains(e.getX(), e.getY()));
-            super.mousePressed(e);
-        }
-
-        public void mouseReleased(MouseEvent e) {
-            updatePressed(false);
-            super.mouseReleased(e);
-        }
-
-        public void updatePressed(boolean newPressed) {
-            // You can't press a disabled slider
-            if (!slider.isEnabled()) {
-                return;
-            }
-            if (pressed != newPressed) {
-                pressed = newPressed;
-                slider.repaint(thumbRect);
-            }
-        }
-
-        public void updateRollover(boolean newRollover) {
-            // You can't have a rollover on a disabled slider
-            if (!slider.isEnabled()) {
-                return;
-            }
-            if (rollover != newRollover) {
-                rollover = newRollover;
-                slider.repaint(thumbRect);
-            }
-        }
-
-    }
-
-
-    public void paintTrack(Graphics g)  {
-        XPStyle xp = XPStyle.getXP();
-        if (xp != null) {
-            boolean vertical = (slider.getOrientation() == JSlider.VERTICAL);
-            Part part = vertical ? Part.TKP_TRACKVERT : Part.TKP_TRACK;
-            Skin skin = xp.getSkin(slider, part);
-
-            if (vertical) {
-                int x = (trackRect.width - skin.getWidth()) / 2;
-                skin.paintSkin(g, trackRect.x + x, trackRect.y,
-                               skin.getWidth(), trackRect.height, null);
-            } else {
-                int y = (trackRect.height - skin.getHeight()) / 2;
-                skin.paintSkin(g, trackRect.x, trackRect.y + y,
-                               trackRect.width, skin.getHeight(), null);
-            }
-        } else {
-            super.paintTrack(g);
-        }
-    }
-
-
-    protected void paintMinorTickForHorizSlider( Graphics g, Rectangle tickBounds, int x ) {
-        XPStyle xp = XPStyle.getXP();
-        if (xp != null) {
-            g.setColor(xp.getColor(slider, Part.TKP_TICS, null, Prop.COLOR, Color.black));
-        }
-        super.paintMinorTickForHorizSlider(g, tickBounds, x);
-    }
-
-    protected void paintMajorTickForHorizSlider( Graphics g, Rectangle tickBounds, int x ) {
-        XPStyle xp = XPStyle.getXP();
-        if (xp != null) {
-            g.setColor(xp.getColor(slider, Part.TKP_TICS, null, Prop.COLOR, Color.black));
-        }
-        super.paintMajorTickForHorizSlider(g, tickBounds, x);
-    }
-
-    protected void paintMinorTickForVertSlider( Graphics g, Rectangle tickBounds, int y ) {
-        XPStyle xp = XPStyle.getXP();
-        if (xp != null) {
-            g.setColor(xp.getColor(slider, Part.TKP_TICSVERT, null, Prop.COLOR, Color.black));
-        }
-        super.paintMinorTickForVertSlider(g, tickBounds, y);
-    }
-
-    protected void paintMajorTickForVertSlider( Graphics g, Rectangle tickBounds, int y ) {
-        XPStyle xp = XPStyle.getXP();
-        if (xp != null) {
-            g.setColor(xp.getColor(slider, Part.TKP_TICSVERT, null, Prop.COLOR, Color.black));
-        }
-        super.paintMajorTickForVertSlider(g, tickBounds, y);
-    }
-
-
-    public void paintThumb(Graphics g)  {
-        XPStyle xp = XPStyle.getXP();
-        if (xp != null) {
-            Part part = getXPThumbPart();
-            State state = State.NORMAL;
-
-            if (slider.hasFocus()) {
-                state = State.FOCUSED;
-            }
-            if (rollover) {
-                state = State.HOT;
-            }
-            if (pressed) {
-                state = State.PRESSED;
-            }
-            if(!slider.isEnabled()) {
-                state = State.DISABLED;
-            }
-
-            xp.getSkin(slider, part).paintSkin(g, thumbRect.x, thumbRect.y, state);
-        } else {
-            super.paintThumb(g);
-        }
-    }
-
-    protected Dimension getThumbSize() {
-        XPStyle xp = XPStyle.getXP();
-        if (xp != null) {
-            Dimension size = new Dimension();
-            Skin s = xp.getSkin(slider, getXPThumbPart());
-            size.width = s.getWidth();
-            size.height = s.getHeight();
-            return size;
-        } else {
-            return super.getThumbSize();
-        }
-    }
-
-    private Part getXPThumbPart() {
-        XPStyle xp = XPStyle.getXP();
-        Part part;
-        boolean vertical = (slider.getOrientation() == JSlider.VERTICAL);
-        boolean leftToRight = slider.getComponentOrientation().isLeftToRight();
-        Boolean paintThumbArrowShape =
-                (Boolean)slider.getClientProperty("Slider.paintThumbArrowShape");
-        if ((!slider.getPaintTicks() && paintThumbArrowShape == null) ||
-            paintThumbArrowShape == Boolean.FALSE) {
-                part = vertical ? Part.TKP_THUMBVERT
-                                : Part.TKP_THUMB;
-        } else {
-                part = vertical ? (leftToRight ? Part.TKP_THUMBRIGHT : Part.TKP_THUMBLEFT)
-                                : Part.TKP_THUMBBOTTOM;
-        }
-        return part;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsSpinnerUI.java b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsSpinnerUI.java
deleted file mode 100755
index ccc6d03..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsSpinnerUI.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Copyright (c) 1997, 2006, 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.java.swing.plaf.windows;
-
-import java.awt.*;
-import java.awt.event.*;
-
-import javax.swing.plaf.basic.*;
-import javax.swing.plaf.*;
-import javax.swing.*;
-
-import static com.sun.java.swing.plaf.windows.TMSchema.Part;
-import static com.sun.java.swing.plaf.windows.TMSchema.State;
-import static com.sun.java.swing.plaf.windows.XPStyle.Skin;
-
-
-public class WindowsSpinnerUI extends BasicSpinnerUI {
-    public static ComponentUI createUI(JComponent c) {
-        return new WindowsSpinnerUI();
-    }
-
-    /**
-     * {@inheritDoc}
-     * @since 1.6
-     */
-    public void paint(Graphics g, JComponent c) {
-        if (XPStyle.getXP() != null) {
-            paintXPBackground(g, c);
-        }
-        super.paint(g,c);
-    }
-
-    private State getXPState(JComponent c) {
-        State state = State.NORMAL;
-        if (!c.isEnabled()) {
-            state = State.DISABLED;
-        }
-        return state;
-    }
-
-    private void paintXPBackground(Graphics g, JComponent c) {
-        XPStyle xp = XPStyle.getXP();
-        Skin skin = xp.getSkin(c, Part.EP_EDIT);
-        State state = getXPState(c);
-        skin.paintSkin(g, 0, 0, c.getWidth(), c.getHeight(), state);
-    }
-
-    protected Component createPreviousButton() {
-        if (XPStyle.getXP() != null) {
-            JButton xpButton = new XPStyle.GlyphButton(spinner, Part.SPNP_DOWN);
-            Dimension size = UIManager.getDimension("Spinner.arrowButtonSize");
-            xpButton.setPreferredSize(size);
-            xpButton.setRequestFocusEnabled(false);
-            installPreviousButtonListeners(xpButton);
-            return xpButton;
-        }
-        return super.createPreviousButton();
-    }
-
-    protected Component createNextButton() {
-        if (XPStyle.getXP() != null) {
-            JButton xpButton = new XPStyle.GlyphButton(spinner, Part.SPNP_UP);
-            Dimension size = UIManager.getDimension("Spinner.arrowButtonSize");
-            xpButton.setPreferredSize(size);
-            xpButton.setRequestFocusEnabled(false);
-            installNextButtonListeners(xpButton);
-            return xpButton;
-        }
-        return super.createNextButton();
-    }
-
-    private UIResource getUIResource(Object[] listeners) {
-        for (int counter = 0; counter < listeners.length; counter++) {
-            if (listeners[counter] instanceof UIResource) {
-                return (UIResource)listeners[counter];
-            }
-        }
-        return null;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsSplitPaneDivider.java b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsSplitPaneDivider.java
deleted file mode 100755
index 4f272a5..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsSplitPaneDivider.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright (c) 1998, 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.java.swing.plaf.windows;
-
-import java.awt.*;
-import javax.swing.JSplitPane;
-import javax.swing.UIManager;
-import javax.swing.plaf.basic.BasicSplitPaneUI;
-import javax.swing.plaf.basic.BasicSplitPaneDivider;
-
-
-/**
- * Divider used for Windows split pane.
- * <p>
- * <strong>Warning:</strong>
- * Serialized objects of this class will not be compatible with
- * future Swing releases.  The current serialization support is appropriate
- * for short term storage or RMI between applications running the same
- * version of Swing.  A future release of Swing will provide support for
- * long term persistence.
- *
- * @author Jeff Dinkins
- */
-public class WindowsSplitPaneDivider extends BasicSplitPaneDivider
-{
-
-    /**
-     * Creates a new Windows SplitPaneDivider
-     */
-    public WindowsSplitPaneDivider(BasicSplitPaneUI ui) {
-        super(ui);
-    }
-
-    /**
-      * Paints the divider.
-      */
-    public void paint(Graphics g) {
-        Color bgColor = (splitPane.hasFocus()) ?
-                            UIManager.getColor("SplitPane.shadow") :
-                            getBackground();
-        Dimension size = getSize();
-
-        if(bgColor != null) {
-            g.setColor(bgColor);
-            g.fillRect(0, 0, size.width, size.height);
-        }
-        super.paint(g);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsSplitPaneUI.java b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsSplitPaneUI.java
deleted file mode 100755
index 3b85bbe..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsSplitPaneUI.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (c) 1997, 1998, 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.java.swing.plaf.windows;
-
-import javax.swing.plaf.basic.*;
-import javax.swing.*;
-
-import javax.swing.plaf.basic.BasicSplitPaneUI;
-import javax.swing.plaf.basic.BasicSplitPaneDivider;
-import javax.swing.plaf.*;
-
-
-/**
- * Windows rendition of the component.
- * <p>
- * <strong>Warning:</strong>
- * Serialized objects of this class will not be compatible with
- * future Swing releases.  The current serialization support is appropriate
- * for short term storage or RMI between applications running the same
- * version of Swing.  A future release of Swing will provide support for
- * long term persistence.
- */
-public class WindowsSplitPaneUI extends BasicSplitPaneUI
-{
-
-    public WindowsSplitPaneUI() {
-        super();
-    }
-
-    /**
-      * Creates a new WindowsSplitPaneUI instance
-      */
-    public static ComponentUI createUI(JComponent x) {
-        return new WindowsSplitPaneUI();
-    }
-
-    /**
-      * Creates the default divider.
-      */
-    public BasicSplitPaneDivider createDefaultDivider() {
-        return new WindowsSplitPaneDivider(this);
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsTabbedPaneUI.java b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsTabbedPaneUI.java
deleted file mode 100755
index 30f348d..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsTabbedPaneUI.java
+++ /dev/null
@@ -1,227 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-package com.sun.java.swing.plaf.windows;
-
-import java.awt.*;
-
-import javax.swing.plaf.basic.*;
-import javax.swing.plaf.*;
-import javax.swing.*;
-import java.util.Set;
-import java.util.HashSet;
-import java.awt.event.*;
-
-import static com.sun.java.swing.plaf.windows.TMSchema.*;
-import static com.sun.java.swing.plaf.windows.XPStyle.Skin;
-
-
-/**
- * Windows rendition of the component.
- * <p>
- * <strong>Warning:</strong>
- * Serialized objects of this class will not be compatible with
- * future Swing releases.  The current serialization support is appropriate
- * for short term storage or RMI between applications running the same
- * version of Swing.  A future release of Swing will provide support for
- * long term persistence.
- */
-public class WindowsTabbedPaneUI extends BasicTabbedPaneUI {
-    /**
-     * Keys to use for forward focus traversal when the JComponent is
-     * managing focus.
-     */
-    private static Set<KeyStroke> managingFocusForwardTraversalKeys;
-
-    /**
-     * Keys to use for backward focus traversal when the JComponent is
-     * managing focus.
-     */
-    private static Set<KeyStroke> managingFocusBackwardTraversalKeys;
-
-    private boolean contentOpaque = true;
-
-    protected void installDefaults() {
-        super.installDefaults();
-        contentOpaque = UIManager.getBoolean("TabbedPane.contentOpaque");
-
-        // focus forward traversal key
-        if (managingFocusForwardTraversalKeys==null) {
-            managingFocusForwardTraversalKeys = new HashSet<KeyStroke>();
-            managingFocusForwardTraversalKeys.add(KeyStroke.getKeyStroke(KeyEvent.VK_TAB, 0));
-        }
-        tabPane.setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, managingFocusForwardTraversalKeys);
-        // focus backward traversal key
-        if (managingFocusBackwardTraversalKeys==null) {
-            managingFocusBackwardTraversalKeys = new HashSet<KeyStroke>();
-            managingFocusBackwardTraversalKeys.add( KeyStroke.getKeyStroke(KeyEvent.VK_TAB, InputEvent.SHIFT_MASK));
-        }
-        tabPane.setFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, managingFocusBackwardTraversalKeys);
-    }
-
-    protected void uninstallDefaults() {
-        // sets the focus forward and backward traversal keys to null
-        // to restore the defaults
-        tabPane.setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, null);
-        tabPane.setFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, null);
-        super.uninstallDefaults();
-    }
-
-    public static ComponentUI createUI(JComponent c) {
-        return new WindowsTabbedPaneUI();
-    }
-
-    protected void setRolloverTab(int index) {
-        // Rollover is only supported on XP
-        if (XPStyle.getXP() != null) {
-            int oldRolloverTab = getRolloverTab();
-            super.setRolloverTab(index);
-            Rectangle r1 = null;
-            Rectangle r2 = null;
-            if ( (oldRolloverTab >= 0) && (oldRolloverTab < tabPane.getTabCount()) ) {
-                r1 = getTabBounds(tabPane, oldRolloverTab);
-            }
-            if (index >= 0) {
-                r2 = getTabBounds(tabPane, index);
-            }
-            if (r1 != null) {
-                if (r2 != null) {
-                    tabPane.repaint(r1.union(r2));
-                } else {
-                    tabPane.repaint(r1);
-                }
-            } else if (r2 != null) {
-                tabPane.repaint(r2);
-            }
-        }
-    }
-
-    protected void paintContentBorder(Graphics g, int tabPlacement, int selectedIndex) {
-        XPStyle xp = XPStyle.getXP();
-        if (xp != null && (contentOpaque || tabPane.isOpaque())) {
-            Skin skin = xp.getSkin(tabPane, Part.TABP_PANE);
-            if (skin != null) {
-                Insets insets = tabPane.getInsets();
-                // Note: don't call getTabAreaInsets(), because it causes rotation.
-                // Make sure "TabbedPane.tabsOverlapBorder" is set to true in WindowsLookAndFeel
-                Insets tabAreaInsets = UIManager.getInsets("TabbedPane.tabAreaInsets");
-                int x = insets.left;
-                int y = insets.top;
-                int w = tabPane.getWidth() - insets.right - insets.left;
-                int h = tabPane.getHeight() - insets.top - insets.bottom;
-
-                // Expand area by tabAreaInsets.bottom to allow tabs to overlap onto the border.
-                if (tabPlacement == LEFT || tabPlacement == RIGHT) {
-                    int tabWidth = calculateTabAreaWidth(tabPlacement, runCount, maxTabWidth);
-                    if (tabPlacement == LEFT) {
-                        x += (tabWidth - tabAreaInsets.bottom);
-                    }
-                    w -= (tabWidth - tabAreaInsets.bottom);
-                } else {
-                    int tabHeight = calculateTabAreaHeight(tabPlacement, runCount, maxTabHeight);
-                    if (tabPlacement == TOP) {
-                        y += (tabHeight - tabAreaInsets.bottom);
-                    }
-                    h -= (tabHeight - tabAreaInsets.bottom);
-                }
-
-                paintRotatedSkin(g, skin, tabPlacement, x, y, w, h, null);
-                return;
-            }
-        }
-        super.paintContentBorder(g, tabPlacement, selectedIndex);
-    }
-
-    protected void paintTabBackground(Graphics g, int tabPlacement, int tabIndex,
-                                      int x, int y, int w, int h, boolean isSelected ) {
-        if (XPStyle.getXP() == null) {
-            super.paintTabBackground(g, tabPlacement, tabIndex, x, y, w, h, isSelected);
-        }
-    }
-
-    protected void paintTabBorder(Graphics g, int tabPlacement, int tabIndex,
-                                  int x, int y, int w, int h, boolean isSelected ) {
-        XPStyle xp = XPStyle.getXP();
-        if (xp != null) {
-            Part part;
-
-            int tabCount = tabPane.getTabCount();
-            int tabRun = getRunForTab(tabCount, tabIndex);
-            if (tabRuns[tabRun] == tabIndex) {
-                part = Part.TABP_TABITEMLEFTEDGE;
-            } else if (tabCount > 1 && lastTabInRun(tabCount, tabRun) == tabIndex) {
-                part = Part.TABP_TABITEMRIGHTEDGE;
-                if (isSelected) {
-                    // Align with right edge
-                    if (tabPlacement == TOP || tabPlacement == BOTTOM) {
-                        w++;
-                    } else {
-                        h++;
-                    }
-                }
-            } else {
-                part = Part.TABP_TABITEM;
-            }
-
-            State state = State.NORMAL;
-            if (isSelected) {
-                state = State.SELECTED;
-            } else if (tabIndex == getRolloverTab()) {
-                state = State.HOT;
-            }
-
-            paintRotatedSkin(g, xp.getSkin(tabPane, part), tabPlacement, x, y, w, h, state);
-        } else {
-            super.paintTabBorder(g, tabPlacement, tabIndex, x, y, w, h, isSelected);
-        }
-    }
-
-    private void paintRotatedSkin(Graphics g, Skin skin, int tabPlacement,
-                                  int x, int y, int w, int h, State state) {
-        Graphics2D g2d = (Graphics2D)g.create();
-        g2d.translate(x, y);
-        switch (tabPlacement) {
-           case RIGHT:  g2d.translate(w, 0);
-                        g2d.rotate(Math.toRadians(90.0));
-                        skin.paintSkin(g2d, 0, 0, h, w, state);
-                        break;
-
-           case LEFT:   g2d.scale(-1.0, 1.0);
-                        g2d.rotate(Math.toRadians(90.0));
-                        skin.paintSkin(g2d, 0, 0, h, w, state);
-                        break;
-
-           case BOTTOM: g2d.translate(0, h);
-                        g2d.scale(-1.0, 1.0);
-                        g2d.rotate(Math.toRadians(180.0));
-                        skin.paintSkin(g2d, 0, 0, w, h, state);
-                        break;
-
-           case TOP:
-           default:     skin.paintSkin(g2d, 0, 0, w, h, state);
-        }
-        g2d.dispose();
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsTableHeaderUI.java b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsTableHeaderUI.java
deleted file mode 100755
index 391f019..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsTableHeaderUI.java
+++ /dev/null
@@ -1,245 +0,0 @@
-/*
- * 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
- * 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.java.swing.plaf.windows;
-
-import java.awt.*;
-import javax.swing.*;
-import javax.swing.border.*;
-import javax.swing.plaf.*;
-import javax.swing.plaf.basic.*;
-import javax.swing.table.*;
-
-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 {
-    private TableCellRenderer originalHeaderRenderer;
-
-    public static ComponentUI createUI(JComponent h) {
-        return new WindowsTableHeaderUI();
-    }
-
-    public void installUI(JComponent c) {
-        super.installUI(c);
-
-        if (XPStyle.getXP() != null) {
-            originalHeaderRenderer = header.getDefaultRenderer();
-            if (originalHeaderRenderer instanceof UIResource) {
-                header.setDefaultRenderer(new XPDefaultRenderer());
-            }
-        }
-    }
-
-    public void uninstallUI(JComponent c) {
-        if (header.getDefaultRenderer() instanceof XPDefaultRenderer) {
-            header.setDefaultRenderer(originalHeaderRenderer);
-        }
-        super.uninstallUI(c);
-    }
-
-    @Override
-    protected void rolloverColumnUpdated(int oldColumn, int newColumn) {
-        if (XPStyle.getXP() != null) {
-            header.repaint(header.getHeaderRect(oldColumn));
-            header.repaint(header.getHeaderRect(newColumn));
-        }
-    }
-
-    private class XPDefaultRenderer extends DefaultTableCellHeaderRenderer {
-        Skin skin;
-        boolean isSelected, hasFocus, hasRollover;
-        int column;
-
-        XPDefaultRenderer() {
-            setHorizontalAlignment(LEADING);
-        }
-
-        public Component getTableCellRendererComponent(JTable table, Object value,
-                                                       boolean isSelected, boolean hasFocus,
-                                                       int row, int column) {
-            super.getTableCellRendererComponent(table, value, isSelected,
-                                                hasFocus, row, column);
-            this.isSelected = isSelected;
-            this.hasFocus = hasFocus;
-            this.column = column;
-            this.hasRollover = (column == getRolloverColumn());
-            if (skin == null) {
-                skin = XPStyle.getXP().getSkin(header, Part.HP_HEADERITEM);
-            }
-            Insets margins = skin.getContentMargin();
-            Border border = null;
-            int contentTop = 0;
-            int contentLeft = 0;
-            int contentBottom = 0;
-            int contentRight = 0;
-            if (margins != null) {
-                contentTop = margins.top;
-                contentLeft = margins.left;
-                contentBottom = margins.bottom;
-                contentRight = margins.right;
-            }
-            /* idk:
-             * Both on Vista and XP there is some offset to the
-             * HP_HEADERITEM content. It does not seem to come from
-             * Prop.CONTENTMARGINS. Do not know where it is defined.
-             * using some hardcoded values.
-             */
-            contentLeft += 5;
-            contentBottom += 4;
-            contentRight += 5;
-
-            /* On Vista sortIcon is painted above the header's text.
-             * We use border to paint it.
-             */
-            Icon sortIcon;
-            if (WindowsLookAndFeel.isOnVista()
-                && ((sortIcon = getIcon()) instanceof javax.swing.plaf.UIResource
-                    || sortIcon == null)) {
-                contentTop += 1;
-                setIcon(null);
-                sortIcon = null;
-                SortOrder sortOrder =
-                    getColumnSortOrder(table, column);
-                if (sortOrder != null) {
-                    switch (sortOrder) {
-                    case ASCENDING:
-                        sortIcon =
-                            UIManager.getIcon("Table.ascendingSortIcon");
-                        break;
-                    case DESCENDING:
-                        sortIcon =
-                            UIManager.getIcon("Table.descendingSortIcon");
-                        break;
-                    }
-                }
-                if (sortIcon != null) {
-                    contentBottom = sortIcon.getIconHeight();
-                    border = new IconBorder(sortIcon, contentTop, contentLeft,
-                                            contentBottom, contentRight);
-                } else {
-                    sortIcon =
-                        UIManager.getIcon("Table.ascendingSortIcon");
-                    int sortIconHeight =
-                        (sortIcon != null) ? sortIcon.getIconHeight() : 0;
-                    if (sortIconHeight != 0) {
-                        contentBottom = sortIconHeight;
-                    }
-                    border =
-                        new EmptyBorder(
-                            sortIconHeight + contentTop, contentLeft,
-                            contentBottom, contentRight);
-                }
-            } else {
-                contentTop += 3;
-                border = new EmptyBorder(contentTop, contentLeft,
-                                         contentBottom, contentRight);
-            }
-            setBorder(border);
-            return this;
-        }
-
-        public void paint(Graphics g) {
-            Dimension size = getSize();
-            State state = State.NORMAL;
-            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;
-            }
-            /* on Vista there are more states for sorted columns */
-            if (WindowsLookAndFeel.isOnVista()) {
-                SortOrder sortOrder = getColumnSortOrder(header.getTable(), column);
-                if (sortOrder != null) {
-                     switch(sortOrder) {
-                     case ASCENDING:
-                         /* falls through */
-                     case DESCENDING:
-                         switch (state) {
-                         case NORMAL:
-                             state = State.SORTEDNORMAL;
-                             break;
-                         case PRESSED:
-                             state = State.SORTEDPRESSED;
-                             break;
-                         case HOT:
-                             state = State.SORTEDHOT;
-                             break;
-                         default:
-                             /* do nothing */
-                         }
-                     default :
-                         /* do nothing */
-                     }
-                }
-            }
-            skin.paintSkin(g, 0, 0, size.width-1, size.height-1, state);
-            super.paint(g);
-        }
-    }
-
-    /**
-     * A border with an Icon at the middle of the top side.
-     * Outer insets can be provided for this border.
-     */
-    private static class IconBorder implements Border, UIResource{
-        private final Icon icon;
-        private final int top;
-        private final int left;
-        private final int bottom;
-        private final int right;
-        /**
-         * Creates this border;
-         * @param icon - icon to paint for this border
-         * @param top, left, bottom, right - outer insets for this border
-         */
-        public IconBorder(Icon icon, int top, int left,
-                          int bottom, int right) {
-            this.icon = icon;
-            this.top = top;
-            this.left = left;
-            this.bottom = bottom;
-            this.right = right;
-        }
-        public Insets getBorderInsets(Component c) {
-            return new Insets(icon.getIconHeight() + top, left, bottom, right);
-        }
-        public boolean isBorderOpaque() {
-            return false;
-        }
-        public void paintBorder(Component c, Graphics g, int x, int y,
-                                int width, int height) {
-            icon.paintIcon(c, g,
-                x + left + (width - left - right - icon.getIconWidth()) / 2,
-                y + top);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsTextAreaUI.java b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsTextAreaUI.java
deleted file mode 100755
index ed8f90d..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsTextAreaUI.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (c) 1997, 1998, 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.java.swing.plaf.windows;
-
-import javax.swing.plaf.*;
-import javax.swing.plaf.basic.*;
-import javax.swing.*;
-import javax.swing.text.Caret;
-
-
-
-/**
- * Windows rendition of the component.
- * <p>
- * <strong>Warning:</strong>
- * Serialized objects of this class will not be compatible with
- * future Swing releases.  The current serialization support is appropriate
- * for short term storage or RMI between applications running the same
- * version of Swing.  A future release of Swing will provide support for
- * long term persistence.
- */
-public class WindowsTextAreaUI extends BasicTextAreaUI {
-    /**
-     * Creates the object to use for a caret.  By default an
-     * instance of WindowsCaret is created.  This method
-     * can be redefined to provide something else that implements
-     * the InputPosition interface or a subclass of DefaultCaret.
-     *
-     * @return the caret object
-     */
-    protected Caret createCaret() {
-        return new WindowsTextUI.WindowsCaret();
-    }
-
-    /**
-     * Creates a UI for a JTextField.
-     *
-     * @param c the text field
-     * @return the UI
-     */
-    public static ComponentUI createUI(JComponent c) {
-        return new WindowsTextAreaUI();
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsTextFieldUI.java b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsTextFieldUI.java
deleted file mode 100755
index 1df612f..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsTextFieldUI.java
+++ /dev/null
@@ -1,175 +0,0 @@
-/*
- * Copyright (c) 1997, 2006, 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.java.swing.plaf.windows;
-
-import java.awt.*;
-import java.awt.event.*;
-import java.beans.PropertyChangeEvent;
-import javax.swing.plaf.*;
-import javax.swing.plaf.basic.BasicTextFieldUI;
-import javax.swing.text.*;
-import javax.swing.*;
-import javax.swing.plaf.UIResource;
-import sun.swing.DefaultLookup;
-
-
-
-/**
- * Provides the Windows look and feel for a text field.  This
- * is basically the following customizations to the default
- * look-and-feel.
- * <ul>
- * <li>The border is beveled (using the standard control color).
- * <li>The background is white by default.
- * <li>The highlight color is a dark color, blue by default.
- * <li>The foreground color is high contrast in the selected
- *  area, white by default.  The unselected foreground is black.
- * <li>The cursor blinks at about 1/2 second intervals.
- * <li>The entire value is selected when focus is gained.
- * <li>Shift-left-arrow and shift-right-arrow extend selection
- * <li>Cntrl-left-arrow and cntrl-right-arrow act like home and
- *   end respectively.
- * </ul>
- * <p>
- * <strong>Warning:</strong>
- * Serialized objects of this class will not be compatible with
- * future Swing releases.  The current serialization support is appropriate
- * for short term storage or RMI between applications running the same
- * version of Swing.  A future release of Swing will provide support for
- * long term persistence.
- *
- * @author  Timothy Prinzing
- */
-public class WindowsTextFieldUI extends BasicTextFieldUI
-{
-    /**
-     * Creates a UI for a JTextField.
-     *
-     * @param c the text field
-     * @return the UI
-     */
-    public static ComponentUI createUI(JComponent c) {
-        return new WindowsTextFieldUI();
-    }
-
-    /**
-     * Paints a background for the view.  This will only be
-     * called if isOpaque() on the associated component is
-     * true.  The default is to paint the background color
-     * of the component.
-     *
-     * @param g the graphics context
-     */
-    protected void paintBackground(Graphics g) {
-        super.paintBackground(g);
-    }
-
-    /**
-     * Creates the caret for a field.
-     *
-     * @return the caret
-     */
-    protected Caret createCaret() {
-        return new WindowsFieldCaret();
-    }
-
-    /**
-     * WindowsFieldCaret has different scrolling behavior than
-     * DefaultCaret.
-     */
-    static class WindowsFieldCaret extends DefaultCaret implements UIResource {
-
-        public WindowsFieldCaret() {
-            super();
-        }
-
-        /**
-         * Adjusts the visibility of the caret according to
-         * the windows feel which seems to be to move the
-         * caret out into the field by about a quarter of
-         * a field length if not visible.
-         */
-        protected void adjustVisibility(Rectangle r) {
-            SwingUtilities.invokeLater(new SafeScroller(r));
-        }
-
-        /**
-         * Gets the painter for the Highlighter.
-         *
-         * @return the painter
-         */
-        protected Highlighter.HighlightPainter getSelectionPainter() {
-            return WindowsTextUI.WindowsPainter;
-        }
-
-
-        private class SafeScroller implements Runnable {
-            SafeScroller(Rectangle r) {
-                this.r = r;
-            }
-
-            public void run() {
-                JTextField field = (JTextField) getComponent();
-                if (field != null) {
-                    TextUI ui = field.getUI();
-                    int dot = getDot();
-                    // PENDING: We need to expose the bias in DefaultCaret.
-                    Position.Bias bias = Position.Bias.Forward;
-                    Rectangle startRect = null;
-                    try {
-                        startRect = ui.modelToView(field, dot, bias);
-                    } catch (BadLocationException ble) {}
-
-                    Insets i = field.getInsets();
-                    BoundedRangeModel vis = field.getHorizontalVisibility();
-                    int x = r.x + vis.getValue() - i.left;
-                    int quarterSpan = vis.getExtent() / 4;
-                    if (r.x < i.left) {
-                        vis.setValue(x - quarterSpan);
-                    } else if (r.x + r.width > i.left + vis.getExtent()) {
-                        vis.setValue(x - (3 * quarterSpan));
-                    }
-                    // If we scroll, our visual location will have changed,
-                    // but we won't have updated our internal location as
-                    // the model hasn't changed. This checks for the change,
-                    // and if necessary, resets the internal location.
-                    if (startRect != null) {
-                        try {
-                            Rectangle endRect;
-                            endRect = ui.modelToView(field, dot, bias);
-                            if (endRect != null && !endRect.equals(startRect)){
-                                damage(endRect);
-                            }
-                        } catch (BadLocationException ble) {}
-                    }
-                }
-            }
-
-            private Rectangle r;
-        }
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsTextPaneUI.java b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsTextPaneUI.java
deleted file mode 100755
index f17b2c4..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsTextPaneUI.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (c) 1997, 1998, 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.java.swing.plaf.windows;
-
-import javax.swing.plaf.*;
-import javax.swing.plaf.basic.*;
-import javax.swing.*;
-import javax.swing.text.Caret;
-
-
-/**
- * Windows rendition of the component.
- * <p>
- * <strong>Warning:</strong>
- * Serialized objects of this class will not be compatible with
- * future Swing releases.  The current serialization support is appropriate
- * for short term storage or RMI between applications running the same
- * version of Swing.  A future release of Swing will provide support for
- * long term persistence.
- */
-public class WindowsTextPaneUI extends BasicTextPaneUI
-{
-    /**
-     * Creates a UI for a JTextPane.
-     *
-     * @param c the styled text component
-     * @return the UI
-     */
-    public static ComponentUI createUI(JComponent c) {
-        return new WindowsTextPaneUI();
-    }
-
-    /**
-     * Creates the object to use for a caret.  By default an
-     * instance of WindowsCaret is created.  This method
-     * can be redefined to provide something else that implements
-     * the InputPosition interface or a subclass of DefaultCaret.
-     *
-     * @return the caret object
-     */
-    protected Caret createCaret() {
-        return new WindowsTextUI.WindowsCaret();
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsTextUI.java b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsTextUI.java
deleted file mode 100755
index 9d2a7ce..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsTextUI.java
+++ /dev/null
@@ -1,236 +0,0 @@
-/*
- * Copyright (c) 1997, 1998, 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.java.swing.plaf.windows;
-
-import java.awt.Color;
-import java.awt.Graphics;
-import java.awt.Rectangle;
-import java.awt.Shape;
-import javax.swing.plaf.basic.*;
-import javax.swing.*;
-import javax.swing.plaf.TextUI;
-import javax.swing.plaf.UIResource;
-import javax.swing.text.*;
-
-/**
- * Windows text rendering.
- * <p>
- * <strong>Warning:</strong>
- * Serialized objects of this class will not be compatible with
- * future Swing releases.  The current serialization support is appropriate
- * for short term storage or RMI between applications running the same
- * version of Swing.  A future release of Swing will provide support for
- * long term persistence.
- */
-public abstract class WindowsTextUI extends BasicTextUI {
-    /**
-     * Creates the object to use for a caret.  By default an
-     * instance of WindowsCaret is created.  This method
-     * can be redefined to provide something else that implements
-     * the InputPosition interface or a subclass of DefaultCaret.
-     *
-     * @return the caret object
-     */
-    protected Caret createCaret() {
-        return new WindowsCaret();
-    }
-
-    /* public */
-    static LayeredHighlighter.LayerPainter WindowsPainter = new WindowsHighlightPainter(null);
-
-    /* public */
-    static class WindowsCaret extends DefaultCaret
-                     implements UIResource {
-        /**
-         * Gets the painter for the Highlighter.
-         *
-         * @return the painter
-         */
-        protected Highlighter.HighlightPainter getSelectionPainter() {
-            return WindowsTextUI.WindowsPainter;
-        }
-    }
-
-    /* public */
-    static class WindowsHighlightPainter extends
-                     DefaultHighlighter.DefaultHighlightPainter {
-        WindowsHighlightPainter(Color c) {
-            super(c);
-        }
-
-        // --- HighlightPainter methods ---------------------------------------
-
-        /**
-         * Paints a highlight.
-         *
-         * @param g the graphics context
-         * @param offs0 the starting model offset >= 0
-         * @param offs1 the ending model offset >= offs1
-         * @param bounds the bounding box for the highlight
-         * @param c the editor
-         */
-        public void paint(Graphics g, int offs0, int offs1, Shape bounds, JTextComponent c) {
-            Rectangle alloc = bounds.getBounds();
-            try {
-                // --- determine locations ---
-                TextUI mapper = c.getUI();
-                Rectangle p0 = mapper.modelToView(c, offs0);
-                Rectangle p1 = mapper.modelToView(c, offs1);
-
-                // --- render ---
-                Color color = getColor();
-
-                if (color == null) {
-                    g.setColor(c.getSelectionColor());
-                }
-                else {
-                    g.setColor(color);
-                }
-                boolean firstIsDot = false;
-                boolean secondIsDot = false;
-                if (c.isEditable()) {
-                    int dot = c.getCaretPosition();
-                    firstIsDot = (offs0 == dot);
-                    secondIsDot = (offs1 == dot);
-                }
-                if (p0.y == p1.y) {
-                    // same line, render a rectangle
-                    Rectangle r = p0.union(p1);
-                    if (r.width > 0) {
-                        if (firstIsDot) {
-                            r.x++;
-                            r.width--;
-                        }
-                        else if (secondIsDot) {
-                            r.width--;
-                        }
-                    }
-                    g.fillRect(r.x, r.y, r.width, r.height);
-                } else {
-                    // different lines
-                    int p0ToMarginWidth = alloc.x + alloc.width - p0.x;
-                    if (firstIsDot && p0ToMarginWidth > 0) {
-                        p0.x++;
-                        p0ToMarginWidth--;
-                    }
-                    g.fillRect(p0.x, p0.y, p0ToMarginWidth, p0.height);
-                    if ((p0.y + p0.height) != p1.y) {
-                        g.fillRect(alloc.x, p0.y + p0.height, alloc.width,
-                                   p1.y - (p0.y + p0.height));
-                    }
-                    if (secondIsDot && p1.x > alloc.x) {
-                        p1.x--;
-                    }
-                    g.fillRect(alloc.x, p1.y, (p1.x - alloc.x), p1.height);
-                }
-            } catch (BadLocationException e) {
-                // can't render
-            }
-        }
-
-        // --- LayerPainter methods ----------------------------
-        /**
-         * Paints a portion of a highlight.
-         *
-         * @param g the graphics context
-         * @param offs0 the starting model offset >= 0
-         * @param offs1 the ending model offset >= offs1
-         * @param bounds the bounding box of the view, which is not
-         *        necessarily the region to paint.
-         * @param c the editor
-         * @param view View painting for
-         * @return region drawing occured in
-         */
-        public Shape paintLayer(Graphics g, int offs0, int offs1,
-                                Shape bounds, JTextComponent c, View view) {
-            Color color = getColor();
-
-            if (color == null) {
-                g.setColor(c.getSelectionColor());
-            }
-            else {
-                g.setColor(color);
-            }
-            boolean firstIsDot = false;
-            boolean secondIsDot = false;
-            if (c.isEditable()) {
-                int dot = c.getCaretPosition();
-                firstIsDot = (offs0 == dot);
-                secondIsDot = (offs1 == dot);
-            }
-            if (offs0 == view.getStartOffset() &&
-                offs1 == view.getEndOffset()) {
-                // Contained in view, can just use bounds.
-                Rectangle alloc;
-                if (bounds instanceof Rectangle) {
-                    alloc = (Rectangle)bounds;
-                }
-                else {
-                    alloc = bounds.getBounds();
-                }
-                if (firstIsDot && alloc.width > 0) {
-                    g.fillRect(alloc.x + 1, alloc.y, alloc.width - 1,
-                               alloc.height);
-                }
-                else if (secondIsDot && alloc.width > 0) {
-                    g.fillRect(alloc.x, alloc.y, alloc.width - 1,
-                               alloc.height);
-                }
-                else {
-                    g.fillRect(alloc.x, alloc.y, alloc.width, alloc.height);
-                }
-                return alloc;
-            }
-            else {
-                // Should only render part of View.
-                try {
-                    // --- determine locations ---
-                    Shape shape = view.modelToView(offs0, Position.Bias.Forward,
-                                                   offs1,Position.Bias.Backward,
-                                                   bounds);
-                    Rectangle r = (shape instanceof Rectangle) ?
-                                  (Rectangle)shape : shape.getBounds();
-                    if (firstIsDot && r.width > 0) {
-                        g.fillRect(r.x + 1, r.y, r.width - 1, r.height);
-                    }
-                    else if (secondIsDot && r.width > 0) {
-                        g.fillRect(r.x, r.y, r.width - 1, r.height);
-                    }
-                    else {
-                        g.fillRect(r.x, r.y, r.width, r.height);
-                    }
-                    return r;
-                } catch (BadLocationException e) {
-                    // can't render
-                }
-            }
-            // Only if exception
-            return null;
-        }
-
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsToggleButtonUI.java b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsToggleButtonUI.java
deleted file mode 100755
index afbc825..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsToggleButtonUI.java
+++ /dev/null
@@ -1,181 +0,0 @@
-/*
- * Copyright (c) 1997, 2006, 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.java.swing.plaf.windows;
-
-import sun.awt.AppContext;
-
-import javax.swing.plaf.basic.*;
-import javax.swing.border.*;
-import javax.swing.plaf.*;
-import javax.swing.*;
-
-import java.awt.*;
-import java.beans.PropertyChangeEvent;
-
-
-
-/**
- * A Windows toggle button.
- * <p>
- * <strong>Warning:</strong>
- * Serialized objects of this class will not be compatible with
- * future Swing releases.  The current serialization support is appropriate
- * for short term storage or RMI between applications running the same
- * version of Swing.  A future release of Swing will provide support for
- * long term persistence.
- *
- * @author Jeff Dinkins
- */
-public class WindowsToggleButtonUI extends BasicToggleButtonUI
-{
-    protected int dashedRectGapX;
-    protected int dashedRectGapY;
-    protected int dashedRectGapWidth;
-    protected int dashedRectGapHeight;
-
-    protected Color focusColor;
-
-    private static final Object WINDOWS_TOGGLE_BUTTON_UI_KEY = new Object();
-
-    private boolean defaults_initialized = false;
-
-    public static ComponentUI createUI(JComponent b) {
-        AppContext appContext = AppContext.getAppContext();
-        WindowsToggleButtonUI windowsToggleButtonUI =
-                (WindowsToggleButtonUI) appContext.get(WINDOWS_TOGGLE_BUTTON_UI_KEY);
-        if (windowsToggleButtonUI == null) {
-            windowsToggleButtonUI = new WindowsToggleButtonUI();
-            appContext.put(WINDOWS_TOGGLE_BUTTON_UI_KEY, windowsToggleButtonUI);
-        }
-        return windowsToggleButtonUI;
-    }
-
-
-    // ********************************
-    //            Defaults
-    // ********************************
-    protected void installDefaults(AbstractButton b) {
-        super.installDefaults(b);
-        if(!defaults_initialized) {
-            String pp = getPropertyPrefix();
-            dashedRectGapX = ((Integer)UIManager.get("Button.dashedRectGapX")).intValue();
-            dashedRectGapY = ((Integer)UIManager.get("Button.dashedRectGapY")).intValue();
-            dashedRectGapWidth = ((Integer)UIManager.get("Button.dashedRectGapWidth")).intValue();
-            dashedRectGapHeight = ((Integer)UIManager.get("Button.dashedRectGapHeight")).intValue();
-            focusColor = UIManager.getColor(pp + "focus");
-            defaults_initialized = true;
-        }
-
-        XPStyle xp = XPStyle.getXP();
-        if (xp != null) {
-            b.setBorder(xp.getBorder(b, WindowsButtonUI.getXPButtonType(b)));
-            LookAndFeel.installProperty(b, "opaque", Boolean.FALSE);
-            LookAndFeel.installProperty(b, "rolloverEnabled", Boolean.TRUE);
-        }
-    }
-
-    protected void uninstallDefaults(AbstractButton b) {
-        super.uninstallDefaults(b);
-        defaults_initialized = false;
-    }
-
-
-    protected Color getFocusColor() {
-        return focusColor;
-    }
-
-
-    // ********************************
-    //         Paint Methods
-    // ********************************
-
-    private transient Color cachedSelectedColor = null;
-    private transient Color cachedBackgroundColor = null;
-    private transient Color cachedHighlightColor = null;
-
-    protected void paintButtonPressed(Graphics g, AbstractButton b) {
-        if (XPStyle.getXP() == null && b.isContentAreaFilled()) {
-            Color oldColor = g.getColor();
-            Color c1 = b.getBackground();
-            Color c2 = UIManager.getColor("ToggleButton.highlight");
-            if (c1 != cachedBackgroundColor || c2 != cachedHighlightColor) {
-                int r1 = c1.getRed(), r2 = c2.getRed();
-                int g1 = c1.getGreen(), g2 = c2.getGreen();
-                int b1 = c1.getBlue(), b2 = c2.getBlue();
-                cachedSelectedColor = new Color(
-                        Math.min(r1, r2) + Math.abs(r1 - r2) / 2,
-                        Math.min(g1, g2) + Math.abs(g1 - g2) / 2,
-                        Math.min(b1, b2) + Math.abs(b1 - b2) / 2
-                );
-                cachedBackgroundColor = c1;
-                cachedHighlightColor = c2;
-            }
-            g.setColor(cachedSelectedColor);
-            g.fillRect(0, 0, b.getWidth(), b.getHeight());
-            g.setColor(oldColor);
-        }
-    }
-
-    public void paint(Graphics g, JComponent c) {
-        if (XPStyle.getXP() != null) {
-            WindowsButtonUI.paintXPButtonBackground(g, c);
-        }
-        super.paint(g, c);
-    }
-
-
-    /**
-     * Overridden method to render the text without the mnemonic
-     */
-    protected void paintText(Graphics g, AbstractButton b, Rectangle textRect, String text) {
-        WindowsGraphicsUtils.paintText(g, b, textRect, text, getTextShiftOffset());
-    }
-
-    protected void paintFocus(Graphics g, AbstractButton b,
-                              Rectangle viewRect, Rectangle textRect, Rectangle iconRect) {
-        g.setColor(getFocusColor());
-        BasicGraphicsUtils.drawDashedRect(g, dashedRectGapX, dashedRectGapY,
-                                          b.getWidth() - dashedRectGapWidth,
-                                          b.getHeight() - dashedRectGapHeight);
-    }
-
-    // ********************************
-    //          Layout Methods
-    // ********************************
-    public Dimension getPreferredSize(JComponent c) {
-        Dimension d = super.getPreferredSize(c);
-
-        /* Ensure that the width and height of the button is odd,
-         * to allow for the focus line if focus is painted
-         */
-        AbstractButton b = (AbstractButton)c;
-        if (d != null && b.isFocusPainted()) {
-            if(d.width % 2 == 0) { d.width += 1; }
-            if(d.height % 2 == 0) { d.height += 1; }
-        }
-        return d;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsToolBarSeparatorUI.java b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsToolBarSeparatorUI.java
deleted file mode 100755
index 997fc90..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsToolBarSeparatorUI.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-package com.sun.java.swing.plaf.windows;
-
-import java.awt.*;
-
-import javax.swing.plaf.ComponentUI;
-import javax.swing.plaf.basic.*;
-import javax.swing.*;
-
-import static com.sun.java.swing.plaf.windows.TMSchema.Part;
-import static com.sun.java.swing.plaf.windows.XPStyle.Skin;
-
-
-/**
- * Draws Windows toolbar separators.
- * <p>
- *
- * @author Mark Davidson
- */
-public class WindowsToolBarSeparatorUI extends BasicToolBarSeparatorUI {
-
-    public static ComponentUI createUI( JComponent c ) {
-        return new WindowsToolBarSeparatorUI();
-    }
-
-    public Dimension getPreferredSize(JComponent c) {
-        Dimension size = ((JToolBar.Separator)c).getSeparatorSize();
-
-        if (size != null) {
-            size = size.getSize();
-        } else {
-            size = new Dimension(6, 6);
-            XPStyle xp = XPStyle.getXP();
-            if (xp != null) {
-                boolean vertical = ((JSeparator)c).getOrientation() == SwingConstants.VERTICAL;
-                Part part = vertical ? Part.TP_SEPARATOR : Part.TP_SEPARATORVERT;
-                Skin skin = xp.getSkin(c, part);
-                size.width = skin.getWidth();
-                size.height = skin.getHeight();
-            }
-
-            if (((JSeparator)c).getOrientation() == SwingConstants.VERTICAL) {
-                size.height = 0;
-            } else {
-                size.width = 0;
-            }
-        }
-        return size;
-    }
-
-    public Dimension getMaximumSize(JComponent c) {
-        Dimension pref = getPreferredSize(c);
-        if (((JSeparator)c).getOrientation() == SwingConstants.VERTICAL) {
-            return new Dimension(pref.width, Short.MAX_VALUE);
-        } else {
-            return new Dimension(Short.MAX_VALUE, pref.height);
-        }
-    }
-
-    public void paint( Graphics g, JComponent c ) {
-        boolean vertical = ((JSeparator)c).getOrientation() == SwingConstants.VERTICAL;
-        Dimension size = c.getSize();
-
-        XPStyle xp = XPStyle.getXP();
-        if (xp != null) {
-            Part part = vertical ? Part.TP_SEPARATOR : Part.TP_SEPARATORVERT;
-            Skin skin = xp.getSkin(c, part);
-
-            int dx = vertical ? (size.width - skin.getWidth()) / 2 : 0;
-            int dy = vertical ? 0 : (size.height - skin.getHeight()) / 2;
-            int dw = vertical ? skin.getWidth() : size.width;
-            int dh = vertical ? size.height : skin.getHeight();
-            skin.paintSkin(g, dx, dy, dw, dh, null);
-        } else {
-
-        Color temp = g.getColor();
-
-        UIDefaults table = UIManager.getLookAndFeelDefaults();
-
-        Color shadow = table.getColor("ToolBar.shadow");
-        Color highlight = table.getColor("ToolBar.highlight");
-
-        if (vertical) {
-            int x = (size.width / 2) - 1;
-            g.setColor(shadow);
-            g.drawLine(x, 2, x, size.height - 2);
-
-            g.setColor(highlight);
-            g.drawLine(x + 1, 2, x + 1, size.height - 2);
-        } else {
-            int y = (size.height / 2) - 1;
-            g.setColor(shadow);
-            g.drawLine(2, y, size.width - 2, y);
-            g.setColor(highlight);
-            g.drawLine(2, y + 1, size.width - 2, y + 1);
-        }
-        g.setColor(temp);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsToolBarUI.java b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsToolBarUI.java
deleted file mode 100755
index a34ce0c..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsToolBarUI.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright (c) 1997, 2006, 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.java.swing.plaf.windows;
-
-import java.awt.*;
-
-import javax.swing.AbstractButton;
-import javax.swing.JComponent;
-import javax.swing.JToggleButton;
-import javax.swing.UIDefaults;
-import javax.swing.UIManager;
-
-import javax.swing.border.Border;
-import javax.swing.border.CompoundBorder;
-import javax.swing.border.EmptyBorder;
-
-import javax.swing.plaf.*;
-
-import javax.swing.plaf.basic.BasicBorders;
-import javax.swing.plaf.basic.BasicToolBarUI;
-
-import static com.sun.java.swing.plaf.windows.TMSchema.Part;
-
-
-public class WindowsToolBarUI extends BasicToolBarUI {
-
-    public static ComponentUI createUI(JComponent c) {
-        return new WindowsToolBarUI();
-    }
-
-    protected void installDefaults() {
-        if (XPStyle.getXP() != null) {
-            setRolloverBorders(true);
-        }
-        super.installDefaults();
-    }
-
-    protected Border createRolloverBorder() {
-        if (XPStyle.getXP() != null) {
-            return new EmptyBorder(3, 3, 3, 3);
-        } else {
-            return super.createRolloverBorder();
-        }
-    }
-
-    protected Border createNonRolloverBorder() {
-        if (XPStyle.getXP() != null) {
-            return new EmptyBorder(3, 3, 3, 3);
-        } else {
-            return super.createNonRolloverBorder();
-        }
-    }
-
-    public void paint(Graphics g, JComponent c) {
-        XPStyle xp = XPStyle.getXP();
-        if (xp != null) {
-            xp.getSkin(c, Part.TP_TOOLBAR).paintSkin(g, 0, 0,
-                        c.getWidth(), c.getHeight(), null, true);
-        } else {
-            super.paint(g, c);
-        }
-    }
-
-    /**
-     * {@inheritDoc}
-     * @since 1.6
-     */
-    protected Border getRolloverBorder(AbstractButton b) {
-        XPStyle xp = XPStyle.getXP();
-        if (xp != null) {
-            return xp.getBorder(b, WindowsButtonUI.getXPButtonType(b));
-        } else {
-            return super.getRolloverBorder(b);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsTreeUI.java b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsTreeUI.java
deleted file mode 100755
index db5baf9..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/WindowsTreeUI.java
+++ /dev/null
@@ -1,242 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-package com.sun.java.swing.plaf.windows;
-
-import java.awt.*;
-import java.awt.event.*;
-
-import java.io.*;
-import java.util.*;
-
-import javax.swing.plaf.basic.*;
-import javax.swing.*;
-import javax.swing.plaf.*;
-
-import javax.swing.tree.*;
-
-import static com.sun.java.swing.plaf.windows.TMSchema.*;
-import static com.sun.java.swing.plaf.windows.XPStyle.Skin;
-
-
-/**
- * A Windows tree.
- * <p>
- * <strong>Warning:</strong>
- * Serialized objects of this class will not be compatible with
- * future Swing releases.  The current serialization support is appropriate
- * for short term storage or RMI between applications running the same
- * version of Swing.  A future release of Swing will provide support for
- * long term persistence.
- *
- * @author Scott Violet
- */
-public class WindowsTreeUI extends BasicTreeUI {
-
-    public static ComponentUI createUI( JComponent c )
-      {
-        return new WindowsTreeUI();
-      }
-
-
-    /**
-      * Ensures that the rows identified by beginRow through endRow are
-      * visible.
-      */
-    protected void ensureRowsAreVisible(int beginRow, int endRow) {
-        if(tree != null && beginRow >= 0 && endRow < getRowCount(tree)) {
-            Rectangle visRect = tree.getVisibleRect();
-            if(beginRow == endRow) {
-                Rectangle     scrollBounds = getPathBounds(tree, getPathForRow
-                                                           (tree, beginRow));
-
-                if(scrollBounds != null) {
-                    scrollBounds.x = visRect.x;
-                    scrollBounds.width = visRect.width;
-                    tree.scrollRectToVisible(scrollBounds);
-                }
-            }
-            else {
-                Rectangle   beginRect = getPathBounds(tree, getPathForRow
-                                                      (tree, beginRow));
-                if (beginRect != null) {
-                    Rectangle   testRect = beginRect;
-                    int         beginY = beginRect.y;
-                    int         maxY = beginY + visRect.height;
-
-                    for(int counter = beginRow + 1; counter <= endRow; counter++) {
-                        testRect = getPathBounds(tree,
-                                                 getPathForRow(tree, counter));
-                        if(testRect != null && (testRect.y + testRect.height) > maxY) {
-                            counter = endRow;
-                        }
-                    }
-
-                    if (testRect == null) {
-                        return;
-                    }
-
-                    tree.scrollRectToVisible(new Rectangle(visRect.x, beginY, 1,
-                                                      testRect.y + testRect.height-
-                                                      beginY));
-                }
-            }
-        }
-    }
-
-    static protected final int HALF_SIZE = 4;
-    static protected final int SIZE = 9;
-
-    /**
-     * Returns the default cell renderer that is used to do the
-     * stamping of each node.
-     */
-    protected TreeCellRenderer createDefaultCellRenderer() {
-        return new WindowsTreeCellRenderer();
-    }
-
-    /**
-     * The minus sign button icon
-     * <p>
-     * <strong>Warning:</strong>
-     * Serialized objects of this class will not be compatible with
-     * future Swing releases.  The current serialization support is appropriate
-     * for short term storage or RMI between applications running the same
-     * version of Swing.  A future release of Swing will provide support for
-     * long term persistence.
-     */
-    public static class ExpandedIcon implements Icon, Serializable {
-
-        static public Icon createExpandedIcon() {
-            return new ExpandedIcon();
-        }
-
-        Skin getSkin(Component c) {
-            XPStyle xp = XPStyle.getXP();
-            return (xp != null) ? xp.getSkin(c, Part.TVP_GLYPH) : null;
-        }
-
-        public void paintIcon(Component c, Graphics g, int x, int y) {
-            Skin skin = getSkin(c);
-            if (skin != null) {
-                skin.paintSkin(g, x, y, State.OPENED);
-                return;
-            }
-
-            Color     backgroundColor = c.getBackground();
-
-            if(backgroundColor != null)
-                g.setColor(backgroundColor);
-            else
-                g.setColor(Color.white);
-            g.fillRect(x, y, SIZE-1, SIZE-1);
-            g.setColor(Color.gray);
-            g.drawRect(x, y, SIZE-1, SIZE-1);
-            g.setColor(Color.black);
-            g.drawLine(x + 2, y + HALF_SIZE, x + (SIZE - 3), y + HALF_SIZE);
-        }
-
-        public int getIconWidth() {
-            Skin skin = getSkin(null);
-            return (skin != null) ? skin.getWidth() : SIZE;
-        }
-
-        public int getIconHeight() {
-            Skin skin = getSkin(null);
-            return (skin != null) ? skin.getHeight() : SIZE;
-        }
-    }
-
-    /**
-     * The plus sign button icon
-     * <p>
-     * <strong>Warning:</strong>
-     * Serialized objects of this class will not be compatible with
-     * future Swing releases.  The current serialization support is appropriate
-     * for short term storage or RMI between applications running the same
-     * version of Swing.  A future release of Swing will provide support for
-     * long term persistence.
-     */
-    public static class CollapsedIcon extends ExpandedIcon {
-        static public Icon createCollapsedIcon() {
-            return new CollapsedIcon();
-        }
-
-        public void paintIcon(Component c, Graphics g, int x, int y) {
-            Skin skin = getSkin(c);
-            if (skin != null) {
-                skin.paintSkin(g, x, y, State.CLOSED);
-            } else {
-            super.paintIcon(c, g, x, y);
-            g.drawLine(x + HALF_SIZE, y + 2, x + HALF_SIZE, y + (SIZE - 3));
-            }
-        }
-    }
-
-    public class WindowsTreeCellRenderer extends DefaultTreeCellRenderer {
-
-        /**
-         * Configures the renderer based on the passed in components.
-         * The value is set from messaging the tree with
-         * <code>convertValueToText</code>, which ultimately invokes
-         * <code>toString</code> on <code>value</code>.
-         * The foreground color is set based on the selection and the icon
-         * is set based on on leaf and expanded.
-         */
-        public Component getTreeCellRendererComponent(JTree tree, Object value,
-                                                      boolean sel,
-                                                      boolean expanded,
-                                                      boolean leaf, int row,
-                                                      boolean hasFocus) {
-            super.getTreeCellRendererComponent(tree, value, sel,
-                                               expanded, leaf, row,
-                                               hasFocus);
-            // Windows displays the open icon when the tree item selected.
-            if (!tree.isEnabled()) {
-                setEnabled(false);
-                if (leaf) {
-                    setDisabledIcon(getLeafIcon());
-                } else if (sel) {
-                    setDisabledIcon(getOpenIcon());
-                } else {
-                    setDisabledIcon(getClosedIcon());
-                }
-            }
-            else {
-                setEnabled(true);
-                if (leaf) {
-                    setIcon(getLeafIcon());
-                } else if (sel) {
-                    setIcon(getOpenIcon());
-                } else {
-                    setIcon(getClosedIcon());
-                }
-            }
-            return this;
-        }
-
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/XPStyle.java b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/XPStyle.java
deleted file mode 100755
index 7379533..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/XPStyle.java
+++ /dev/null
@@ -1,751 +0,0 @@
-/*
- * Copyright (c) 2002, 2007, 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.
- */
-
-/*
- * <p>These classes are designed to be used while the
- * corresponding <code>LookAndFeel</code> class has been installed
- * (<code>UIManager.setLookAndFeel(new <i>XXX</i>LookAndFeel())</code>).
- * Using them while a different <code>LookAndFeel</code> is installed
- * may produce unexpected results, including exceptions.
- * Additionally, changing the <code>LookAndFeel</code>
- * maintained by the <code>UIManager</code> without updating the
- * corresponding <code>ComponentUI</code> of any
- * <code>JComponent</code>s may also produce unexpected results,
- * such as the wrong colors showing up, and is generally not
- * encouraged.
- *
- */
-
-package com.sun.java.swing.plaf.windows;
-
-import java.awt.*;
-import java.awt.image.*;
-import java.security.AccessController;
-import java.util.*;
-
-import javax.swing.*;
-import javax.swing.border.*;
-import javax.swing.plaf.*;
-import javax.swing.text.JTextComponent;
-
-import sun.awt.image.SunWritableRaster;
-import sun.awt.windows.ThemeReader;
-import sun.security.action.GetPropertyAction;
-import sun.swing.CachedPainter;
-
-import static com.sun.java.swing.plaf.windows.TMSchema.*;
-
-
-/**
- * Implements Windows XP Styles for the Windows Look and Feel.
- *
- * @author Leif Samuelsson
- */
-class XPStyle {
-    // Singleton instance of this class
-    private static XPStyle xp;
-
-    // Singleton instance of SkinPainter
-    private static SkinPainter skinPainter = new SkinPainter();
-
-    private static Boolean themeActive = null;
-
-    private HashMap<String, Border> borderMap;
-    private HashMap<String, Color>  colorMap;
-
-    private boolean flatMenus;
-
-    static {
-        invalidateStyle();
-    }
-
-    /** Static method for clearing the hashmap and loading the
-     * current XP style and theme
-     */
-    static synchronized void invalidateStyle() {
-        xp = null;
-        themeActive = null;
-        skinPainter.flush();
-    }
-
-    /** Get the singleton instance of this class
-     *
-     * @return the singleton instance of this class or null if XP styles
-     * are not active or if this is not Windows XP
-     */
-    static synchronized XPStyle getXP() {
-        if (themeActive == null) {
-            Toolkit toolkit = Toolkit.getDefaultToolkit();
-            themeActive =
-                (Boolean)toolkit.getDesktopProperty("win.xpstyle.themeActive");
-            if (themeActive == null) {
-                themeActive = Boolean.FALSE;
-            }
-            if (themeActive.booleanValue()) {
-                GetPropertyAction propertyAction =
-                    new GetPropertyAction("swing.noxp");
-                if (AccessController.doPrivileged(propertyAction) == null &&
-                    ThemeReader.isThemed() &&
-                    !(UIManager.getLookAndFeel()
-                      instanceof WindowsClassicLookAndFeel)) {
-
-                    xp = new XPStyle();
-                }
-            }
-        }
-        return xp;
-    }
-
-    static boolean isVista() {
-        XPStyle xp = XPStyle.getXP();
-        return (xp != null && xp.isSkinDefined(null, Part.CP_DROPDOWNBUTTONRIGHT));
-    }
-
-    /** Get a named <code>String</code> value from the current style
-     *
-     * @param part a <code>Part</code>
-     * @param state a <code>String</code>
-     * @param attributeKey a <code>String</code>
-     * @return a <code>String</code> or null if key is not found
-     *    in the current style
-     *
-     * This is currently only used by WindowsInternalFrameTitlePane for painting
-     * title foregound and can be removed when no longer needed
-     */
-    String getString(Component c, Part part, State state, Prop prop) {
-        return getTypeEnumName(c, part, state, prop);
-    }
-
-    TypeEnum getTypeEnum(Component c, Part part, State state, Prop prop) {
-        int enumValue = ThemeReader.getEnum(part.getControlName(c), part.getValue(),
-                                            State.getValue(part, state),
-                                            prop.getValue());
-        return TypeEnum.getTypeEnum(prop, enumValue);
-    }
-
-    private static String getTypeEnumName(Component c, Part part, State state, Prop prop) {
-        int enumValue = ThemeReader.getEnum(part.getControlName(c), part.getValue(),
-                                            State.getValue(part, state),
-                                            prop.getValue());
-        if (enumValue == -1) {
-            return null;
-        }
-        return TypeEnum.getTypeEnum(prop, enumValue).getName();
-    }
-
-
-
-
-    /** Get a named <code>int</code> value from the current style
-     *
-     * @param part a <code>Part</code>
-     * @return an <code>int</code> or null if key is not found
-     *    in the current style
-     */
-    int getInt(Component c, Part part, State state, Prop prop, int fallback) {
-        return ThemeReader.getInt(part.getControlName(c), part.getValue(),
-                                  State.getValue(part, state),
-                                  prop.getValue());
-    }
-
-    /** Get a named <code>Dimension</code> value from the current style
-     *
-     * @param key a <code>String</code>
-     * @return a <code>Dimension</code> or null if key is not found
-     *    in the current style
-     *
-     * This is currently only used by WindowsProgressBarUI and the value
-     * should probably be cached there instead of here.
-     */
-    Dimension getDimension(Component c, Part part, State state, Prop prop) {
-        return ThemeReader.getPosition(part.getControlName(c), part.getValue(),
-                                       State.getValue(part, state),
-                                       prop.getValue());
-    }
-
-    /** Get a named <code>Point</code> (e.g. a location or an offset) value
-     *  from the current style
-     *
-     * @param key a <code>String</code>
-     * @return a <code>Point</code> or null if key is not found
-     *    in the current style
-     *
-     * This is currently only used by WindowsInternalFrameTitlePane for painting
-     * title foregound and can be removed when no longer needed
-     */
-    Point getPoint(Component c, Part part, State state, Prop prop) {
-        Dimension d = ThemeReader.getPosition(part.getControlName(c), part.getValue(),
-                                              State.getValue(part, state),
-                                              prop.getValue());
-        if (d != null) {
-            return new Point(d.width, d.height);
-        } else {
-            return null;
-        }
-    }
-
-    /** Get a named <code>Insets</code> value from the current style
-     *
-     * @param key a <code>String</code>
-     * @return an <code>Insets</code> object or null if key is not found
-     *    in the current style
-     *
-     * This is currently only used to create borders and by
-     * WindowsInternalFrameTitlePane for painting title foregound.
-     * The return value is already cached in those places.
-     */
-    Insets getMargin(Component c, Part part, State state, Prop prop) {
-        return ThemeReader.getThemeMargins(part.getControlName(c), part.getValue(),
-                                           State.getValue(part, state),
-                                           prop.getValue());
-    }
-
-
-    /** Get a named <code>Color</code> value from the current style
-     *
-     * @param part a <code>Part</code>
-     * @return a <code>Color</code> or null if key is not found
-     *    in the current style
-     */
-    synchronized Color getColor(Skin skin, Prop prop, Color fallback) {
-        String key = skin.toString() + "." + prop.name();
-        Part part = skin.part;
-        Color color = colorMap.get(key);
-        if (color == null) {
-            color = ThemeReader.getColor(part.getControlName(null), part.getValue(),
-                                         State.getValue(part, skin.state),
-                                         prop.getValue());
-            if (color != null) {
-                color = new ColorUIResource(color);
-                colorMap.put(key, color);
-            }
-        }
-        return (color != null) ? color : fallback;
-    }
-
-    Color getColor(Component c, Part part, State state, Prop prop, Color fallback) {
-        return getColor(new Skin(c, part, state), prop, fallback);
-    }
-
-
-
-    /** Get a named <code>Border</code> value from the current style
-     *
-     * @param part a <code>Part</code>
-     * @return a <code>Border</code> or null if key is not found
-     *    in the current style or if the style for the particular
-     *    part is not defined as "borderfill".
-     */
-    synchronized Border getBorder(Component c, Part part) {
-        if (part == Part.MENU) {
-            // Special case because XP has no skin for menus
-            if (flatMenus) {
-                // TODO: The classic border uses this color, but we should
-                // create a new UI property called "PopupMenu.borderColor"
-                // instead.
-                return new XPFillBorder(UIManager.getColor("InternalFrame.borderShadow"),
-                                        1);
-            } else {
-                return null;    // Will cause L&F to use classic border
-            }
-        }
-        Skin skin = new Skin(c, part, null);
-        Border border = borderMap.get(skin.string);
-        if (border == null) {
-            String bgType = getTypeEnumName(c, part, null, Prop.BGTYPE);
-            if ("borderfill".equalsIgnoreCase(bgType)) {
-                int thickness = getInt(c, part, null, Prop.BORDERSIZE, 1);
-                Color color = getColor(skin, Prop.BORDERCOLOR, Color.black);
-                border = new XPFillBorder(color, thickness);
-                if (part == Part.CP_COMBOBOX) {
-                    border = new XPStatefulFillBorder(color, thickness, part, Prop.BORDERCOLOR);
-                }
-            } else if ("imagefile".equalsIgnoreCase(bgType)) {
-                Insets m = getMargin(c, part, null, Prop.SIZINGMARGINS);
-                if (m != null) {
-                    if (getBoolean(c, part, null, Prop.BORDERONLY)) {
-                        border = new XPImageBorder(c, part);
-                    } else if (part == Part.CP_COMBOBOX) {
-                        border = new EmptyBorder(1, 1, 1, 1);
-                    } else {
-                        if(part == Part.TP_BUTTON) {
-                            border = new XPEmptyBorder(new Insets(3,3,3,3));
-                        } else {
-                            border = new XPEmptyBorder(m);
-                        }
-                    }
-                }
-            }
-            if (border != null) {
-                borderMap.put(skin.string, border);
-            }
-        }
-        return border;
-    }
-
-    private class XPFillBorder extends LineBorder implements UIResource {
-        XPFillBorder(Color color, int thickness) {
-            super(color, thickness);
-        }
-
-        public Insets getBorderInsets(Component c, Insets insets)       {
-            Insets margin = null;
-            //
-            // Ideally we'd have an interface defined for classes which
-            // support margins (to avoid this hackery), but we've
-            // decided against it for simplicity
-            //
-           if (c instanceof AbstractButton) {
-               margin = ((AbstractButton)c).getMargin();
-           } else if (c instanceof JToolBar) {
-               margin = ((JToolBar)c).getMargin();
-           } else if (c instanceof JTextComponent) {
-               margin = ((JTextComponent)c).getMargin();
-           }
-           insets.top    = (margin != null? margin.top : 0)    + thickness;
-           insets.left   = (margin != null? margin.left : 0)   + thickness;
-           insets.bottom = (margin != null? margin.bottom : 0) + thickness;
-           insets.right =  (margin != null? margin.right : 0)  + thickness;
-
-           return insets;
-        }
-    }
-
-    private class XPStatefulFillBorder extends XPFillBorder {
-        private final Part part;
-        private final Prop prop;
-        XPStatefulFillBorder(Color color, int thickness, Part part, Prop prop) {
-            super(color, thickness);
-            this.part = part;
-            this.prop = prop;
-        }
-
-        public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) {
-            State state = State.NORMAL;
-            // special casing for comboboxes.
-            // there may be more special cases in the future
-            if(c instanceof JComboBox) {
-                JComboBox cb = (JComboBox)c;
-                // note. in the future this should be replaced with a call
-                // to BasicLookAndFeel.getUIOfType()
-                if(cb.getUI() instanceof WindowsComboBoxUI) {
-                    WindowsComboBoxUI wcb = (WindowsComboBoxUI)cb.getUI();
-                    state = wcb.getXPComboBoxState(cb);
-                }
-            }
-            lineColor = getColor(c, part, state, prop, Color.black);
-            super.paintBorder(c, g, x, y, width, height);
-        }
-    }
-
-    private class XPImageBorder extends AbstractBorder implements UIResource {
-        Skin skin;
-
-        XPImageBorder(Component c, Part part) {
-            this.skin = getSkin(c, part);
-        }
-
-        public void paintBorder(Component c, Graphics g,
-                                int x, int y, int width, int height) {
-            skin.paintSkin(g, x, y, width, height, null);
-        }
-
-        public Insets getBorderInsets(Component c, Insets insets)       {
-            Insets margin = null;
-            Insets borderInsets = skin.getContentMargin();
-            if(borderInsets == null) {
-                borderInsets = new Insets(0, 0, 0, 0);
-            }
-            //
-            // Ideally we'd have an interface defined for classes which
-            // support margins (to avoid this hackery), but we've
-            // decided against it for simplicity
-            //
-           if (c instanceof AbstractButton) {
-               margin = ((AbstractButton)c).getMargin();
-           } else if (c instanceof JToolBar) {
-               margin = ((JToolBar)c).getMargin();
-           } else if (c instanceof JTextComponent) {
-               margin = ((JTextComponent)c).getMargin();
-           }
-           insets.top    = (margin != null? margin.top : 0)    + borderInsets.top;
-           insets.left   = (margin != null? margin.left : 0)   + borderInsets.left;
-           insets.bottom = (margin != null? margin.bottom : 0) + borderInsets.bottom;
-           insets.right  = (margin != null? margin.right : 0)  + borderInsets.right;
-
-           return insets;
-        }
-    }
-
-    private class XPEmptyBorder extends EmptyBorder implements UIResource {
-        XPEmptyBorder(Insets m) {
-            super(m.top+2, m.left+2, m.bottom+2, m.right+2);
-        }
-
-        public Insets getBorderInsets(Component c, Insets insets)       {
-            insets = super.getBorderInsets(c, insets);
-
-            Insets margin = null;
-            if (c instanceof AbstractButton) {
-                Insets m = ((AbstractButton)c).getMargin();
-                // if this is a toolbar button then ignore getMargin()
-                // and subtract the padding added by the constructor
-                if(c.getParent() instanceof JToolBar
-                   && ! (c instanceof JRadioButton)
-                   && ! (c instanceof JCheckBox)
-                   && m instanceof InsetsUIResource) {
-                    insets.top -= 2;
-                    insets.left -= 2;
-                    insets.bottom -= 2;
-                    insets.right -= 2;
-                } else {
-                    margin = m;
-                }
-            } else if (c instanceof JToolBar) {
-                margin = ((JToolBar)c).getMargin();
-            } else if (c instanceof JTextComponent) {
-                margin = ((JTextComponent)c).getMargin();
-            }
-            if (margin != null) {
-                insets.top    = margin.top + 2;
-                insets.left   = margin.left + 2;
-                insets.bottom = margin.bottom + 2;
-                insets.right  = margin.right + 2;
-            }
-            return insets;
-        }
-    }
-    boolean isSkinDefined(Component c, Part part) {
-        return (part.getValue() == 0)
-            || ThemeReader.isThemePartDefined(
-                   part.getControlName(c), part.getValue(), 0);
-    }
-
-
-    /** Get a <code>Skin</code> object from the current style
-     * for a named part (component type)
-     *
-     * @param part a <code>Part</code>
-     * @return a <code>Skin</code> object
-     */
-    synchronized Skin getSkin(Component c, Part part) {
-        assert isSkinDefined(c, part) : "part " + part + " is not defined";
-        return new Skin(c, part, null);
-    }
-
-
-    long getThemeTransitionDuration(Component c, Part part, State stateFrom,
-                                    State stateTo, Prop prop) {
-         return ThemeReader.getThemeTransitionDuration(part.getControlName(c),
-                                          part.getValue(),
-                                          State.getValue(part, stateFrom),
-                                          State.getValue(part, stateTo),
-                                          (prop != null) ? prop.getValue() : 0);
-    }
-
-
-    /** A class which encapsulates attributes for a given part
-     * (component type) and which provides methods for painting backgrounds
-     * and glyphs
-     */
-    static class Skin {
-        final Component component;
-        final Part part;
-        final State state;
-
-        private final String string;
-        private Dimension size = null;
-
-        Skin(Component component, Part part) {
-            this(component, part, null);
-        }
-
-        Skin(Part part, State state) {
-            this(null, part, state);
-        }
-
-        Skin(Component component, Part part, State state) {
-            this.component = component;
-            this.part  = part;
-            this.state = state;
-
-            String str = part.getControlName(component) +"." + part.name();
-            if (state != null) {
-                str += "("+state.name()+")";
-            }
-            string = str;
-        }
-
-        Insets getContentMargin() {
-            /* idk: it seems margins are the same for all 'big enough'
-             * bounding rectangles.
-             */
-            int boundingWidth = 100;
-            int boundingHeight = 100;
-
-            return ThemeReader.getThemeBackgroundContentMargins(
-                part.getControlName(null), part.getValue(),
-                0, boundingWidth, boundingHeight);
-        }
-
-        private int getWidth(State state) {
-            if (size == null) {
-                size = getPartSize(part, state);
-            }
-            return size.width;
-        }
-
-        int getWidth() {
-            return getWidth((state != null) ? state : State.NORMAL);
-        }
-
-        private int getHeight(State state) {
-            if (size == null) {
-                size = getPartSize(part, state);
-            }
-            return size.height;
-        }
-
-        int getHeight() {
-            return getHeight((state != null) ? state : State.NORMAL);
-        }
-
-        public String toString() {
-            return string;
-        }
-
-        public boolean equals(Object obj) {
-            return (obj instanceof Skin && ((Skin)obj).string.equals(string));
-        }
-
-        public int hashCode() {
-            return string.hashCode();
-        }
-
-        /** Paint a skin at x, y.
-         *
-         * @param g   the graphics context to use for painting
-         * @param dx  the destination <i>x</i> coordinate
-         * @param dy  the destination <i>y</i> coordinate
-         * @param state which state to paint
-         */
-        void paintSkin(Graphics g, int dx, int dy, State state) {
-            if (state == null) {
-                state = this.state;
-            }
-            paintSkin(g, dx, dy, getWidth(state), getHeight(state), state);
-        }
-
-        /** Paint a skin in an area defined by a rectangle.
-         *
-         * @param g the graphics context to use for painting
-         * @param r     a <code>Rectangle</code> defining the area to fill,
-         *                     may cause the image to be stretched or tiled
-         * @param state which state to paint
-         */
-        void paintSkin(Graphics g, Rectangle r, State state) {
-            paintSkin(g, r.x, r.y, r.width, r.height, state);
-        }
-
-        /** Paint a skin at a defined position and size
-         *  This method supports animation.
-         *
-         * @param g   the graphics context to use for painting
-         * @param dx  the destination <i>x</i> coordinate
-         * @param dy  the destination <i>y</i> coordinate
-         * @param dw  the width of the area to fill, may cause
-         *                  the image to be stretched or tiled
-         * @param dh  the height of the area to fill, may cause
-         *                  the image to be stretched or tiled
-         * @param state which state to paint
-         */
-        void paintSkin(Graphics g, int dx, int dy, int dw, int dh, State state) {
-            if (ThemeReader.isGetThemeTransitionDurationDefined()
-                  && component instanceof JComponent
-                  && SwingUtilities.getAncestorOfClass(CellRendererPane.class,
-                                                       component) == null) {
-                AnimationController.paintSkin((JComponent) component, this,
-                                              g, dx, dy, dw, dh, state);
-            } else {
-                paintSkinRaw(g, dx, dy, dw, dh, state);
-            }
-        }
-
-        /** Paint a skin at a defined position and size. This method
-         *  does not trigger animation. It is needed for the animation
-         *  support.
-         *
-         * @param g   the graphics context to use for painting
-         * @param dx  the destination <i>x</i> coordinate.
-         * @param dy  the destination <i>y</i> coordinate.
-         * @param dw  the width of the area to fill, may cause
-         *                  the image to be stretched or tiled
-         * @param dh  the height of the area to fill, may cause
-         *                  the image to be stretched or tiled
-         * @param state which state to paint
-         */
-        void paintSkinRaw(Graphics g, int dx, int dy, int dw, int dh, State state) {
-            skinPainter.paint(null, g, dx, dy, dw, dh, this, state);
-        }
-
-        /** Paint a skin at a defined position and size
-         *
-         * @param g   the graphics context to use for painting
-         * @param dx  the destination <i>x</i> coordinate
-         * @param dy  the destination <i>y</i> coordinate
-         * @param dw  the width of the area to fill, may cause
-         *                  the image to be stretched or tiled
-         * @param dh  the height of the area to fill, may cause
-         *                  the image to be stretched or tiled
-         * @param state which state to paint
-         * @param borderFill should test if the component uses a border fill
-                            and skip painting if it is
-         */
-        void paintSkin(Graphics g, int dx, int dy, int dw, int dh, State state,
-                boolean borderFill) {
-            if(borderFill && "borderfill".equals(getTypeEnumName(component, part,
-                    state, Prop.BGTYPE))) {
-                return;
-            }
-            skinPainter.paint(null, g, dx, dy, dw, dh, this, state);
-        }
-    }
-
-    private static class SkinPainter extends CachedPainter {
-        SkinPainter() {
-            super(30);
-            flush();
-        }
-
-        public void flush() {
-            super.flush();
-        }
-
-        protected void paintToImage(Component c, Image image, Graphics g,
-                                    int w, int h, Object[] args) {
-            boolean accEnabled = false;
-            Skin skin = (Skin)args[0];
-            Part part = skin.part;
-            State state = (State)args[1];
-            if (state == null) {
-                state = skin.state;
-            }
-            if (c == null) {
-                c = skin.component;
-            }
-            BufferedImage bi = (BufferedImage)image;
-
-            WritableRaster raster = bi.getRaster();
-            DataBufferInt dbi = (DataBufferInt)raster.getDataBuffer();
-            // Note that stealData() requires a markDirty() afterwards
-            // since we modify the data in it.
-            ThemeReader.paintBackground(SunWritableRaster.stealData(dbi, 0),
-                                        part.getControlName(c), part.getValue(),
-                                        State.getValue(part, state),
-                                        0, 0, w, h, w);
-            SunWritableRaster.markDirty(dbi);
-        }
-
-        protected Image createImage(Component c, int w, int h,
-                                    GraphicsConfiguration config, Object[] args) {
-            return new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
-        }
-    }
-
-    static class GlyphButton extends JButton {
-        private Skin skin;
-
-        public GlyphButton(Component parent, Part part) {
-            XPStyle xp = getXP();
-            skin = xp.getSkin(parent, part);
-            setBorder(null);
-            setContentAreaFilled(false);
-            setMinimumSize(new Dimension(5, 5));
-            setPreferredSize(new Dimension(16, 16));
-            setMaximumSize(new Dimension(Integer.MAX_VALUE, Integer.MAX_VALUE));
-        }
-
-        public boolean isFocusTraversable() {
-            return false;
-        }
-
-        protected State getState() {
-            State state = State.NORMAL;
-            if (!isEnabled()) {
-                state = State.DISABLED;
-            } else if (getModel().isPressed()) {
-                state = State.PRESSED;
-            } else if (getModel().isRollover()) {
-                state = State.HOT;
-            }
-            return state;
-        }
-
-        public void paintComponent(Graphics g) {
-            Dimension d = getSize();
-            skin.paintSkin(g, 0, 0, d.width, d.height, getState());
-        }
-
-        public void setPart(Component parent, Part part) {
-            XPStyle xp = getXP();
-            skin = xp.getSkin(parent, part);
-            revalidate();
-            repaint();
-        }
-
-        protected void paintBorder(Graphics g) {
-        }
-
-
-    }
-
-    // Private constructor
-    private XPStyle() {
-        flatMenus = getSysBoolean(Prop.FLATMENUS);
-
-        colorMap  = new HashMap<String, Color>();
-        borderMap = new HashMap<String, Border>();
-        // Note: All further access to the maps must be synchronized
-    }
-
-
-    private boolean getBoolean(Component c, Part part, State state, Prop prop) {
-        return ThemeReader.getBoolean(part.getControlName(c), part.getValue(),
-                                      State.getValue(part, state),
-                                      prop.getValue());
-    }
-
-
-
-    static Dimension getPartSize(Part part, State state) {
-        return ThemeReader.getPartSize(part.getControlName(null), part.getValue(),
-                                       State.getValue(part, state));
-    }
-
-    private static boolean getSysBoolean(Prop prop) {
-        // We can use any widget name here, I guess.
-        return ThemeReader.getSysBoolean("window", prop.getValue());
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/icons/Computer.gif b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/icons/Computer.gif
deleted file mode 100755
index d09e11c..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/icons/Computer.gif
+++ /dev/null
Binary files differ
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/icons/DetailsView.gif b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/icons/DetailsView.gif
deleted file mode 100755
index 7e247ea..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/icons/DetailsView.gif
+++ /dev/null
Binary files differ
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/icons/Directory.gif b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/icons/Directory.gif
deleted file mode 100755
index fa34e2f..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/icons/Directory.gif
+++ /dev/null
Binary files differ
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/icons/Error.gif b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/icons/Error.gif
deleted file mode 100755
index 28645eb..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/icons/Error.gif
+++ /dev/null
Binary files differ
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/icons/File.gif b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/icons/File.gif
deleted file mode 100755
index 800b562..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/icons/File.gif
+++ /dev/null
Binary files differ
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/icons/FloppyDrive.gif b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/icons/FloppyDrive.gif
deleted file mode 100755
index 4dfaeb5..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/icons/FloppyDrive.gif
+++ /dev/null
Binary files differ
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/icons/HardDrive.gif b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/icons/HardDrive.gif
deleted file mode 100755
index ef38bdc..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/icons/HardDrive.gif
+++ /dev/null
Binary files differ
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/icons/HomeFolder.gif b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/icons/HomeFolder.gif
deleted file mode 100755
index eb0ef88..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/icons/HomeFolder.gif
+++ /dev/null
Binary files differ
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/icons/Inform.gif b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/icons/Inform.gif
deleted file mode 100755
index 0f59de8..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/icons/Inform.gif
+++ /dev/null
Binary files differ
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/icons/JavaCup32.png b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/icons/JavaCup32.png
deleted file mode 100755
index 0c41d65..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/icons/JavaCup32.png
+++ /dev/null
Binary files differ
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/icons/ListView.gif b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/icons/ListView.gif
deleted file mode 100755
index 77f6863..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/icons/ListView.gif
+++ /dev/null
Binary files differ
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/icons/NewFolder.gif b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/icons/NewFolder.gif
deleted file mode 100755
index 9ef889c..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/icons/NewFolder.gif
+++ /dev/null
Binary files differ
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/icons/Question.gif b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/icons/Question.gif
deleted file mode 100755
index a4d12cd..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/icons/Question.gif
+++ /dev/null
Binary files differ
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/icons/TreeClosed.gif b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/icons/TreeClosed.gif
deleted file mode 100755
index fa34e2f..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/icons/TreeClosed.gif
+++ /dev/null
Binary files differ
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/icons/TreeLeaf.gif b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/icons/TreeLeaf.gif
deleted file mode 100755
index da9de41..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/icons/TreeLeaf.gif
+++ /dev/null
Binary files differ
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/icons/TreeOpen.gif b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/icons/TreeOpen.gif
deleted file mode 100755
index fa34e2f..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/icons/TreeOpen.gif
+++ /dev/null
Binary files differ
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/icons/UpFolder.gif b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/icons/UpFolder.gif
deleted file mode 100755
index 9488299..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/icons/UpFolder.gif
+++ /dev/null
Binary files differ
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/icons/Warn.gif b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/icons/Warn.gif
deleted file mode 100755
index 6ede41f..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/icons/Warn.gif
+++ /dev/null
Binary files differ
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/icons/image-delayed.png b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/icons/image-delayed.png
deleted file mode 100755
index 43e0342..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/icons/image-delayed.png
+++ /dev/null
Binary files differ
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/icons/image-failed.png b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/icons/image-failed.png
deleted file mode 100755
index 8d70c9c..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/icons/image-failed.png
+++ /dev/null
Binary files differ
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/resources/windows.properties b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/resources/windows.properties
deleted file mode 100755
index 7f36db6..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/resources/windows.properties
+++ /dev/null
@@ -1,47 +0,0 @@
-# This properties file is used to create a PropertyResourceBundle
-# It contains Locale specific strings used be the Windows Look and Feel.
-# Currently, the following components need this for support:
-#
-#    FileChooser
-#
-# When this file is read in, the strings are put into the 
-# defaults table.  This is an implementation detail of the current
-# workings of Swing.  DO NOT DEPEND ON THIS.  
-# This may change in future versions of Swing as we improve localization 
-# support.
-#
-# Refer to the note in basic.properties for a description as to what
-# the mnemonics correspond to and how to calculate them.
-#
-# @author Steve Wilson
-
-
-############ FILE CHOOSER STRINGS #############
-
-FileChooser.lookInLabel.textAndMnemonic=Look &in:
-FileChooser.saveInLabel.textAndMnemonic=Save in:
-FileChooser.fileNameLabel.textAndMnemonic=File &name:
-FileChooser.folderNameLabel.textAndMnemonic=Folder &name:
-FileChooser.filesOfTypeLabel.textAndMnemonic=Files of &type:
-FileChooser.upFolderToolTip.textAndMnemonic=Up One Level
-FileChooser.upFolderAccessibleName=Up
-FileChooser.homeFolderToolTip.textAndMnemonic=Home
-FileChooser.homeFolderAccessibleName=Home
-FileChooser.newFolderToolTip.textAndMnemonic=Create New Folder
-FileChooser.newFolderAccessibleName=New Folder
-FileChooser.newFolderActionLabel.textAndMnemonic=New Folder
-FileChooser.listViewButtonToolTip.textAndMnemonic=List
-FileChooser.listViewButtonAccessibleName=List
-FileChooser.listViewActionLabel.textAndMnemonic=List
-FileChooser.detailsViewButtonToolTip.textAndMnemonic=Details
-FileChooser.detailsViewButtonAccessibleName=Details
-FileChooser.viewMenuButtonToolTipText = View Menu
-FileChooser.viewMenuButtonAccessibleName = View Menu
-FileChooser.detailsViewActionLabel.textAndMnemonic=Details
-FileChooser.refreshActionLabel.textAndMnemonic=Refresh
-FileChooser.viewMenuLabel.textAndMnemonic=View
-FileChooser.fileNameHeader.textAndMnemonic=Name
-FileChooser.fileSizeHeader.textAndMnemonic=Size
-FileChooser.fileTypeHeader.textAndMnemonic=Type
-FileChooser.fileDateHeader.textAndMnemonic=Modified
-FileChooser.fileAttrHeader.textAndMnemonic=Attributes
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/resources/windows_de.properties b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/resources/windows_de.properties
deleted file mode 100755
index 860b96f..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/resources/windows_de.properties
+++ /dev/null
@@ -1,47 +0,0 @@
-# This properties file is used to create a PropertyResourceBundle
-# It contains Locale specific strings used be the Windows Look and Feel.
-# Currently, the following components need this for support:
-#
-#    FileChooser
-#
-# When this file is read in, the strings are put into the 
-# defaults table.  This is an implementation detail of the current
-# workings of Swing.  DO NOT DEPEND ON THIS.  
-# This may change in future versions of Swing as we improve localization 
-# support.
-#
-# Refer to the note in basic.properties for a description as to what
-# the mnemonics correspond to and how to calculate them.
-#
-# @author Steve Wilson
-
-
-############ FILE CHOOSER STRINGS #############
-
-FileChooser.lookInLabel.textAndMnemonic=Suchen &in:
-FileChooser.saveInLabel.textAndMnemonic=Speichern in:
-FileChooser.fileNameLabel.textAndMnemonic=&Dateiname:
-FileChooser.folderNameLabel.textAndMnemonic=Ordner&name:
-FileChooser.filesOfTypeLabel.textAndMnemonic=Datei&typ:
-FileChooser.upFolderToolTip.textAndMnemonic=Eine Ebene h\u00F6her
-FileChooser.upFolderAccessibleName=Nach oben
-FileChooser.homeFolderToolTip.textAndMnemonic=Home
-FileChooser.homeFolderAccessibleName=Home
-FileChooser.newFolderToolTip.textAndMnemonic=Neuen Ordner erstellen
-FileChooser.newFolderAccessibleName=Neuer Ordner
-FileChooser.newFolderActionLabel.textAndMnemonic=Neuer Ordner
-FileChooser.listViewButtonToolTip.textAndMnemonic=Liste
-FileChooser.listViewButtonAccessibleName=Liste
-FileChooser.listViewActionLabel.textAndMnemonic=Liste
-FileChooser.detailsViewButtonToolTip.textAndMnemonic=Details
-FileChooser.detailsViewButtonAccessibleName=Details
-FileChooser.viewMenuButtonToolTipText = Ansichtsmen\u00FC
-FileChooser.viewMenuButtonAccessibleName = Ansichtsmen\u00FC
-FileChooser.detailsViewActionLabel.textAndMnemonic=Details
-FileChooser.refreshActionLabel.textAndMnemonic=Aktualisieren
-FileChooser.viewMenuLabel.textAndMnemonic=Ansicht
-FileChooser.fileNameHeader.textAndMnemonic=Name
-FileChooser.fileSizeHeader.textAndMnemonic=Gr\u00F6\u00DFe
-FileChooser.fileTypeHeader.textAndMnemonic=Typ
-FileChooser.fileDateHeader.textAndMnemonic=Ge\u00E4ndert
-FileChooser.fileAttrHeader.textAndMnemonic=Attribute
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/resources/windows_es.properties b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/resources/windows_es.properties
deleted file mode 100755
index 4a8e6ac..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/resources/windows_es.properties
+++ /dev/null
@@ -1,47 +0,0 @@
-# This properties file is used to create a PropertyResourceBundle
-# It contains Locale specific strings used be the Windows Look and Feel.
-# Currently, the following components need this for support:
-#
-#    FileChooser
-#
-# When this file is read in, the strings are put into the 
-# defaults table.  This is an implementation detail of the current
-# workings of Swing.  DO NOT DEPEND ON THIS.  
-# This may change in future versions of Swing as we improve localization 
-# support.
-#
-# Refer to the note in basic.properties for a description as to what
-# the mnemonics correspond to and how to calculate them.
-#
-# @author Steve Wilson
-
-
-############ FILE CHOOSER STRINGS #############
-
-FileChooser.lookInLabel.textAndMnemonic=&Buscar en:
-FileChooser.saveInLabel.textAndMnemonic=Guardar en:
-FileChooser.fileNameLabel.textAndMnemonic=&Nombre de archivo:
-FileChooser.folderNameLabel.textAndMnemonic=&Nombre de carpeta:
-FileChooser.filesOfTypeLabel.textAndMnemonic=Archivos de &tipo:
-FileChooser.upFolderToolTip.textAndMnemonic=Subir un Nivel
-FileChooser.upFolderAccessibleName=Arriba
-FileChooser.homeFolderToolTip.textAndMnemonic=Inicio
-FileChooser.homeFolderAccessibleName=Inicio
-FileChooser.newFolderToolTip.textAndMnemonic=Crear Nueva Carpeta
-FileChooser.newFolderAccessibleName=Nueva Carpeta
-FileChooser.newFolderActionLabel.textAndMnemonic=Nueva Carpeta
-FileChooser.listViewButtonToolTip.textAndMnemonic=Lista
-FileChooser.listViewButtonAccessibleName=Lista
-FileChooser.listViewActionLabel.textAndMnemonic=Lista
-FileChooser.detailsViewButtonToolTip.textAndMnemonic=Detalles
-FileChooser.detailsViewButtonAccessibleName=Detalles
-FileChooser.viewMenuButtonToolTipText = Men\u00FA Ver
-FileChooser.viewMenuButtonAccessibleName = Men\u00FA Ver
-FileChooser.detailsViewActionLabel.textAndMnemonic=Detalles
-FileChooser.refreshActionLabel.textAndMnemonic=Refrescar
-FileChooser.viewMenuLabel.textAndMnemonic=Ver
-FileChooser.fileNameHeader.textAndMnemonic=Nombre
-FileChooser.fileSizeHeader.textAndMnemonic=Tama\u00F1o
-FileChooser.fileTypeHeader.textAndMnemonic=Tipo
-FileChooser.fileDateHeader.textAndMnemonic=Modificado
-FileChooser.fileAttrHeader.textAndMnemonic=Atributos
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/resources/windows_fr.properties b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/resources/windows_fr.properties
deleted file mode 100755
index 87e7a8d..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/resources/windows_fr.properties
+++ /dev/null
@@ -1,47 +0,0 @@
-# This properties file is used to create a PropertyResourceBundle
-# It contains Locale specific strings used be the Windows Look and Feel.
-# Currently, the following components need this for support:
-#
-#    FileChooser
-#
-# When this file is read in, the strings are put into the 
-# defaults table.  This is an implementation detail of the current
-# workings of Swing.  DO NOT DEPEND ON THIS.  
-# This may change in future versions of Swing as we improve localization 
-# support.
-#
-# Refer to the note in basic.properties for a description as to what
-# the mnemonics correspond to and how to calculate them.
-#
-# @author Steve Wilson
-
-
-############ FILE CHOOSER STRINGS #############
-
-FileChooser.lookInLabel.textAndMnemonic=Rechercher &dans :
-FileChooser.saveInLabel.textAndMnemonic=Enregistrer dans :
-FileChooser.fileNameLabel.textAndMnemonic=&Nom du fichier :
-FileChooser.folderNameLabel.textAndMnemonic=&Nom du dossier :
-FileChooser.filesOfTypeLabel.textAndMnemonic=&Type de fichier :
-FileChooser.upFolderToolTip.textAndMnemonic=Remonte d'un niveau.
-FileChooser.upFolderAccessibleName=Monter
-FileChooser.homeFolderToolTip.textAndMnemonic=R\u00E9pertoire d'origine
-FileChooser.homeFolderAccessibleName=R\u00E9pertoire d'origine
-FileChooser.newFolderToolTip.textAndMnemonic=Cr\u00E9e un dossier.
-FileChooser.newFolderAccessibleName=Nouveau dossier
-FileChooser.newFolderActionLabel.textAndMnemonic=Nouveau dossier
-FileChooser.listViewButtonToolTip.textAndMnemonic=Liste
-FileChooser.listViewButtonAccessibleName=Liste
-FileChooser.listViewActionLabel.textAndMnemonic=Liste
-FileChooser.detailsViewButtonToolTip.textAndMnemonic=D\u00E9tails
-FileChooser.detailsViewButtonAccessibleName=D\u00E9tails
-FileChooser.viewMenuButtonToolTipText = Menu Affichage
-FileChooser.viewMenuButtonAccessibleName = Menu Affichage
-FileChooser.detailsViewActionLabel.textAndMnemonic=D\u00E9tails
-FileChooser.refreshActionLabel.textAndMnemonic=Actualiser
-FileChooser.viewMenuLabel.textAndMnemonic=Affichage
-FileChooser.fileNameHeader.textAndMnemonic=Nom
-FileChooser.fileSizeHeader.textAndMnemonic=Taille
-FileChooser.fileTypeHeader.textAndMnemonic=Type
-FileChooser.fileDateHeader.textAndMnemonic=Modifi\u00E9
-FileChooser.fileAttrHeader.textAndMnemonic=Attributs
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/resources/windows_it.properties b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/resources/windows_it.properties
deleted file mode 100755
index cb70495..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/resources/windows_it.properties
+++ /dev/null
@@ -1,47 +0,0 @@
-# This properties file is used to create a PropertyResourceBundle
-# It contains Locale specific strings used be the Windows Look and Feel.
-# Currently, the following components need this for support:
-#
-#    FileChooser
-#
-# When this file is read in, the strings are put into the 
-# defaults table.  This is an implementation detail of the current
-# workings of Swing.  DO NOT DEPEND ON THIS.  
-# This may change in future versions of Swing as we improve localization 
-# support.
-#
-# Refer to the note in basic.properties for a description as to what
-# the mnemonics correspond to and how to calculate them.
-#
-# @author Steve Wilson
-
-
-############ FILE CHOOSER STRINGS #############
-
-FileChooser.lookInLabel.textAndMnemonic=Cerca &in:
-FileChooser.saveInLabel.textAndMnemonic=Salva in:
-FileChooser.fileNameLabel.textAndMnemonic=&Nome file:
-FileChooser.folderNameLabel.textAndMnemonic=&Nome cartella:
-FileChooser.filesOfTypeLabel.textAndMnemonic=&Tipo file:
-FileChooser.upFolderToolTip.textAndMnemonic=Cartella superiore
-FileChooser.upFolderAccessibleName=Superiore
-FileChooser.homeFolderToolTip.textAndMnemonic=Home
-FileChooser.homeFolderAccessibleName=Home
-FileChooser.newFolderToolTip.textAndMnemonic=Crea nuova cartella
-FileChooser.newFolderAccessibleName=Nuova cartella
-FileChooser.newFolderActionLabel.textAndMnemonic=Nuova cartella
-FileChooser.listViewButtonToolTip.textAndMnemonic=Lista
-FileChooser.listViewButtonAccessibleName=Lista
-FileChooser.listViewActionLabel.textAndMnemonic=Lista
-FileChooser.detailsViewButtonToolTip.textAndMnemonic=Dettagli
-FileChooser.detailsViewButtonAccessibleName=Dettagli
-FileChooser.viewMenuButtonToolTipText = Visualizza menu
-FileChooser.viewMenuButtonAccessibleName = Visualizza menu
-FileChooser.detailsViewActionLabel.textAndMnemonic=Dettagli
-FileChooser.refreshActionLabel.textAndMnemonic=Aggiorna
-FileChooser.viewMenuLabel.textAndMnemonic=Visualizza
-FileChooser.fileNameHeader.textAndMnemonic=Nome
-FileChooser.fileSizeHeader.textAndMnemonic=Dimensioni
-FileChooser.fileTypeHeader.textAndMnemonic=Tipo
-FileChooser.fileDateHeader.textAndMnemonic=Modificato
-FileChooser.fileAttrHeader.textAndMnemonic=Attributi
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/resources/windows_ja.properties b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/resources/windows_ja.properties
deleted file mode 100755
index 2162e3b..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/resources/windows_ja.properties
+++ /dev/null
@@ -1,47 +0,0 @@
-# This properties file is used to create a PropertyResourceBundle
-# It contains Locale specific strings used be the Windows Look and Feel.
-# Currently, the following components need this for support:
-#
-#    FileChooser
-#
-# When this file is read in, the strings are put into the 
-# defaults table.  This is an implementation detail of the current
-# workings of Swing.  DO NOT DEPEND ON THIS.  
-# This may change in future versions of Swing as we improve localization 
-# support.
-#
-# Refer to the note in basic.properties for a description as to what
-# the mnemonics correspond to and how to calculate them.
-#
-# @author Steve Wilson
-
-
-############ FILE CHOOSER STRINGS #############
-
-FileChooser.lookInLabel.textAndMnemonic=\u30D5\u30A1\u30A4\u30EB\u306E\u5834\u6240(&I):
-FileChooser.saveInLabel.textAndMnemonic=\u4FDD\u5B58:
-FileChooser.fileNameLabel.textAndMnemonic=\u30D5\u30A1\u30A4\u30EB\u540D(&N):
-FileChooser.folderNameLabel.textAndMnemonic=\u30D5\u30A9\u30EB\u30C0\u540D(&N):
-FileChooser.filesOfTypeLabel.textAndMnemonic=\u30D5\u30A1\u30A4\u30EB\u306E\u30BF\u30A4\u30D7(&T):
-FileChooser.upFolderToolTip.textAndMnemonic=1\u30EC\u30D9\u30EB\u4E0A\u3078
-FileChooser.upFolderAccessibleName=\u4E0A\u3078
-FileChooser.homeFolderToolTip.textAndMnemonic=\u30DB\u30FC\u30E0
-FileChooser.homeFolderAccessibleName=\u30DB\u30FC\u30E0
-FileChooser.newFolderToolTip.textAndMnemonic=\u65B0\u898F\u30D5\u30A9\u30EB\u30C0\u306E\u4F5C\u6210
-FileChooser.newFolderAccessibleName=\u65B0\u898F\u30D5\u30A9\u30EB\u30C0
-FileChooser.newFolderActionLabel.textAndMnemonic=\u65B0\u898F\u30D5\u30A9\u30EB\u30C0
-FileChooser.listViewButtonToolTip.textAndMnemonic=\u30EA\u30B9\u30C8
-FileChooser.listViewButtonAccessibleName=\u30EA\u30B9\u30C8
-FileChooser.listViewActionLabel.textAndMnemonic=\u30EA\u30B9\u30C8
-FileChooser.detailsViewButtonToolTip.textAndMnemonic=\u8A73\u7D30
-FileChooser.detailsViewButtonAccessibleName=\u8A73\u7D30
-FileChooser.viewMenuButtonToolTipText = \u8868\u793A\u30E1\u30CB\u30E5\u30FC
-FileChooser.viewMenuButtonAccessibleName = \u8868\u793A\u30E1\u30CB\u30E5\u30FC
-FileChooser.detailsViewActionLabel.textAndMnemonic=\u8A73\u7D30
-FileChooser.refreshActionLabel.textAndMnemonic=\u30EA\u30D5\u30EC\u30C3\u30B7\u30E5
-FileChooser.viewMenuLabel.textAndMnemonic=\u8868\u793A
-FileChooser.fileNameHeader.textAndMnemonic=\u540D\u524D
-FileChooser.fileSizeHeader.textAndMnemonic=\u30B5\u30A4\u30BA
-FileChooser.fileTypeHeader.textAndMnemonic=\u30BF\u30A4\u30D7
-FileChooser.fileDateHeader.textAndMnemonic=\u4FEE\u6B63\u65E5
-FileChooser.fileAttrHeader.textAndMnemonic=\u5C5E\u6027
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/resources/windows_ko.properties b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/resources/windows_ko.properties
deleted file mode 100755
index a5d7862..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/resources/windows_ko.properties
+++ /dev/null
@@ -1,47 +0,0 @@
-# This properties file is used to create a PropertyResourceBundle
-# It contains Locale specific strings used be the Windows Look and Feel.
-# Currently, the following components need this for support:
-#
-#    FileChooser
-#
-# When this file is read in, the strings are put into the 
-# defaults table.  This is an implementation detail of the current
-# workings of Swing.  DO NOT DEPEND ON THIS.  
-# This may change in future versions of Swing as we improve localization 
-# support.
-#
-# Refer to the note in basic.properties for a description as to what
-# the mnemonics correspond to and how to calculate them.
-#
-# @author Steve Wilson
-
-
-############ FILE CHOOSER STRINGS #############
-
-FileChooser.lookInLabel.textAndMnemonic=\uCC3E\uB294 \uC704\uCE58(&I):
-FileChooser.saveInLabel.textAndMnemonic=\uC800\uC7A5 \uC704\uCE58:
-FileChooser.fileNameLabel.textAndMnemonic=\uD30C\uC77C \uC774\uB984(&N):
-FileChooser.folderNameLabel.textAndMnemonic=\uD3F4\uB354 \uC774\uB984(&N):
-FileChooser.filesOfTypeLabel.textAndMnemonic=\uD30C\uC77C \uC720\uD615(&T):
-FileChooser.upFolderToolTip.textAndMnemonic=\uD55C \uB808\uBCA8 \uC704\uB85C
-FileChooser.upFolderAccessibleName=\uC704\uB85C
-FileChooser.homeFolderToolTip.textAndMnemonic=\uD648
-FileChooser.homeFolderAccessibleName=\uD648
-FileChooser.newFolderToolTip.textAndMnemonic=\uC0C8 \uD3F4\uB354 \uC0DD\uC131
-FileChooser.newFolderAccessibleName=\uC0C8 \uD3F4\uB354
-FileChooser.newFolderActionLabel.textAndMnemonic=\uC0C8 \uD3F4\uB354
-FileChooser.listViewButtonToolTip.textAndMnemonic=\uBAA9\uB85D
-FileChooser.listViewButtonAccessibleName=\uBAA9\uB85D
-FileChooser.listViewActionLabel.textAndMnemonic=\uBAA9\uB85D
-FileChooser.detailsViewButtonToolTip.textAndMnemonic=\uC138\uBD80 \uC815\uBCF4
-FileChooser.detailsViewButtonAccessibleName=\uC138\uBD80 \uC815\uBCF4
-FileChooser.viewMenuButtonToolTipText = \uBCF4\uAE30 \uBA54\uB274
-FileChooser.viewMenuButtonAccessibleName = \uBCF4\uAE30 \uBA54\uB274
-FileChooser.detailsViewActionLabel.textAndMnemonic=\uC138\uBD80 \uC815\uBCF4
-FileChooser.refreshActionLabel.textAndMnemonic=\uC0C8\uB85C \uACE0\uCE68
-FileChooser.viewMenuLabel.textAndMnemonic=\uBCF4\uAE30
-FileChooser.fileNameHeader.textAndMnemonic=\uC774\uB984
-FileChooser.fileSizeHeader.textAndMnemonic=\uD06C\uAE30
-FileChooser.fileTypeHeader.textAndMnemonic=\uC720\uD615
-FileChooser.fileDateHeader.textAndMnemonic=\uC218\uC815 \uB0A0\uC9DC
-FileChooser.fileAttrHeader.textAndMnemonic=\uC18D\uC131
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/resources/windows_pt_BR.properties b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/resources/windows_pt_BR.properties
deleted file mode 100755
index 83ff1ce..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/resources/windows_pt_BR.properties
+++ /dev/null
@@ -1,47 +0,0 @@
-# This properties file is used to create a PropertyResourceBundle
-# It contains Locale specific strings used be the Windows Look and Feel.
-# Currently, the following components need this for support:
-#
-#    FileChooser
-#
-# When this file is read in, the strings are put into the 
-# defaults table.  This is an implementation detail of the current
-# workings of Swing.  DO NOT DEPEND ON THIS.  
-# This may change in future versions of Swing as we improve localization 
-# support.
-#
-# Refer to the note in basic.properties for a description as to what
-# the mnemonics correspond to and how to calculate them.
-#
-# @author Steve Wilson
-
-
-############ FILE CHOOSER STRINGS #############
-
-FileChooser.lookInLabel.textAndMnemonic=Pesquisar &em:
-FileChooser.saveInLabel.textAndMnemonic=Salvar em:
-FileChooser.fileNameLabel.textAndMnemonic=&Nome do arquivo:
-FileChooser.folderNameLabel.textAndMnemonic=&Nome da pasta:
-FileChooser.filesOfTypeLabel.textAndMnemonic=Arquivos do &tipo:
-FileChooser.upFolderToolTip.textAndMnemonic=Um N\u00EDvel Acima
-FileChooser.upFolderAccessibleName=Acima
-FileChooser.homeFolderToolTip.textAndMnemonic=In\u00EDcio
-FileChooser.homeFolderAccessibleName=In\u00EDcio
-FileChooser.newFolderToolTip.textAndMnemonic=Criar Nova Pasta
-FileChooser.newFolderAccessibleName=Nova Pasta
-FileChooser.newFolderActionLabel.textAndMnemonic=Nova Pasta
-FileChooser.listViewButtonToolTip.textAndMnemonic=Lista
-FileChooser.listViewButtonAccessibleName=Lista
-FileChooser.listViewActionLabel.textAndMnemonic=Lista
-FileChooser.detailsViewButtonToolTip.textAndMnemonic=Detalhes
-FileChooser.detailsViewButtonAccessibleName=Detalhes
-FileChooser.viewMenuButtonToolTipText = Exibir Menu
-FileChooser.viewMenuButtonAccessibleName = Exibir Menu
-FileChooser.detailsViewActionLabel.textAndMnemonic=Detalhes
-FileChooser.refreshActionLabel.textAndMnemonic=Atualizar
-FileChooser.viewMenuLabel.textAndMnemonic=Exibir
-FileChooser.fileNameHeader.textAndMnemonic=Nome
-FileChooser.fileSizeHeader.textAndMnemonic=Tamanho
-FileChooser.fileTypeHeader.textAndMnemonic=Tipo
-FileChooser.fileDateHeader.textAndMnemonic=Modificado
-FileChooser.fileAttrHeader.textAndMnemonic=Atributos
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/resources/windows_sv.properties b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/resources/windows_sv.properties
deleted file mode 100755
index 977b0db..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/resources/windows_sv.properties
+++ /dev/null
@@ -1,47 +0,0 @@
-# This properties file is used to create a PropertyResourceBundle
-# It contains Locale specific strings used be the Windows Look and Feel.
-# Currently, the following components need this for support:
-#
-#    FileChooser
-#
-# When this file is read in, the strings are put into the 
-# defaults table.  This is an implementation detail of the current
-# workings of Swing.  DO NOT DEPEND ON THIS.  
-# This may change in future versions of Swing as we improve localization 
-# support.
-#
-# Refer to the note in basic.properties for a description as to what
-# the mnemonics correspond to and how to calculate them.
-#
-# @author Steve Wilson
-
-
-############ FILE CHOOSER STRINGS #############
-
-FileChooser.lookInLabel.textAndMnemonic=Leta &i:
-FileChooser.saveInLabel.textAndMnemonic=Spara i:
-FileChooser.fileNameLabel.textAndMnemonic=Fil&namn:
-FileChooser.folderNameLabel.textAndMnemonic=Mapp&namn:
-FileChooser.filesOfTypeLabel.textAndMnemonic=Filer av &typ:
-FileChooser.upFolderToolTip.textAndMnemonic=Upp en niv\u00E5
-FileChooser.upFolderAccessibleName=Upp
-FileChooser.homeFolderToolTip.textAndMnemonic=Hem
-FileChooser.homeFolderAccessibleName=Hem
-FileChooser.newFolderToolTip.textAndMnemonic=Skapa ny mapp
-FileChooser.newFolderAccessibleName=Ny mapp
-FileChooser.newFolderActionLabel.textAndMnemonic=Ny mapp
-FileChooser.listViewButtonToolTip.textAndMnemonic=Lista
-FileChooser.listViewButtonAccessibleName=Lista
-FileChooser.listViewActionLabel.textAndMnemonic=Lista
-FileChooser.detailsViewButtonToolTip.textAndMnemonic=Detaljer
-FileChooser.detailsViewButtonAccessibleName=Detaljer
-FileChooser.viewMenuButtonToolTipText = Menyn Visa
-FileChooser.viewMenuButtonAccessibleName = Menyn Visa
-FileChooser.detailsViewActionLabel.textAndMnemonic=Detaljer
-FileChooser.refreshActionLabel.textAndMnemonic=F\u00F6rnya
-FileChooser.viewMenuLabel.textAndMnemonic=Vy
-FileChooser.fileNameHeader.textAndMnemonic=Namn
-FileChooser.fileSizeHeader.textAndMnemonic=Storlek
-FileChooser.fileTypeHeader.textAndMnemonic=Typ
-FileChooser.fileDateHeader.textAndMnemonic=\u00C4ndrad
-FileChooser.fileAttrHeader.textAndMnemonic=Attribut
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/resources/windows_zh_CN.properties b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/resources/windows_zh_CN.properties
deleted file mode 100755
index c621f3f..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/resources/windows_zh_CN.properties
+++ /dev/null
@@ -1,47 +0,0 @@
-# This properties file is used to create a PropertyResourceBundle
-# It contains Locale specific strings used be the Windows Look and Feel.
-# Currently, the following components need this for support:
-#
-#    FileChooser
-#
-# When this file is read in, the strings are put into the 
-# defaults table.  This is an implementation detail of the current
-# workings of Swing.  DO NOT DEPEND ON THIS.  
-# This may change in future versions of Swing as we improve localization 
-# support.
-#
-# Refer to the note in basic.properties for a description as to what
-# the mnemonics correspond to and how to calculate them.
-#
-# @author Steve Wilson
-
-
-############ FILE CHOOSER STRINGS #############
-
-FileChooser.lookInLabel.textAndMnemonic=\u67E5\u627E(&I):
-FileChooser.saveInLabel.textAndMnemonic=\u4FDD\u5B58: 
-FileChooser.fileNameLabel.textAndMnemonic=\u6587\u4EF6\u540D(&N):
-FileChooser.folderNameLabel.textAndMnemonic=\u6587\u4EF6\u5939\u540D(&N):
-FileChooser.filesOfTypeLabel.textAndMnemonic=\u6587\u4EF6\u7C7B\u578B(&T):
-FileChooser.upFolderToolTip.textAndMnemonic=\u5411\u4E0A\u4E00\u7EA7
-FileChooser.upFolderAccessibleName=\u5411\u4E0A
-FileChooser.homeFolderToolTip.textAndMnemonic=\u4E3B\u76EE\u5F55
-FileChooser.homeFolderAccessibleName=\u4E3B\u76EE\u5F55
-FileChooser.newFolderToolTip.textAndMnemonic=\u521B\u5EFA\u65B0\u6587\u4EF6\u5939
-FileChooser.newFolderAccessibleName=\u65B0\u5EFA\u6587\u4EF6\u5939
-FileChooser.newFolderActionLabel.textAndMnemonic=\u65B0\u5EFA\u6587\u4EF6\u5939
-FileChooser.listViewButtonToolTip.textAndMnemonic=\u5217\u8868
-FileChooser.listViewButtonAccessibleName=\u5217\u8868
-FileChooser.listViewActionLabel.textAndMnemonic=\u5217\u8868
-FileChooser.detailsViewButtonToolTip.textAndMnemonic=\u8BE6\u7EC6\u4FE1\u606F
-FileChooser.detailsViewButtonAccessibleName=\u8BE6\u7EC6\u4FE1\u606F
-FileChooser.viewMenuButtonToolTipText = \u67E5\u770B\u83DC\u5355
-FileChooser.viewMenuButtonAccessibleName = \u67E5\u770B\u83DC\u5355
-FileChooser.detailsViewActionLabel.textAndMnemonic=\u8BE6\u7EC6\u4FE1\u606F
-FileChooser.refreshActionLabel.textAndMnemonic=\u5237\u65B0
-FileChooser.viewMenuLabel.textAndMnemonic=\u89C6\u56FE
-FileChooser.fileNameHeader.textAndMnemonic=\u540D\u79F0
-FileChooser.fileSizeHeader.textAndMnemonic=\u5927\u5C0F
-FileChooser.fileTypeHeader.textAndMnemonic=\u7C7B\u578B
-FileChooser.fileDateHeader.textAndMnemonic=\u4FEE\u6539\u65E5\u671F
-FileChooser.fileAttrHeader.textAndMnemonic=\u5C5E\u6027
diff --git a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/resources/windows_zh_TW.properties b/ojluni/src/main/java/com/sun/java/swing/plaf/windows/resources/windows_zh_TW.properties
deleted file mode 100755
index 099caad..0000000
--- a/ojluni/src/main/java/com/sun/java/swing/plaf/windows/resources/windows_zh_TW.properties
+++ /dev/null
@@ -1,47 +0,0 @@
-# This properties file is used to create a PropertyResourceBundle
-# It contains Locale specific strings used be the Windows Look and Feel.
-# Currently, the following components need this for support:
-#
-#    FileChooser
-#
-# When this file is read in, the strings are put into the 
-# defaults table.  This is an implementation detail of the current
-# workings of Swing.  DO NOT DEPEND ON THIS.  
-# This may change in future versions of Swing as we improve localization 
-# support.
-#
-# Refer to the note in basic.properties for a description as to what
-# the mnemonics correspond to and how to calculate them.
-#
-# @author Steve Wilson
-
-
-############ FILE CHOOSER STRINGS #############
-
-FileChooser.lookInLabel.textAndMnemonic=\u67E5\u8A62(&I):
-FileChooser.saveInLabel.textAndMnemonic=\u5132\u5B58\u65BC: 
-FileChooser.fileNameLabel.textAndMnemonic=\u6A94\u6848\u540D\u7A31(&N):
-FileChooser.folderNameLabel.textAndMnemonic=\u8CC7\u6599\u593E\u540D\u7A31(&N):
-FileChooser.filesOfTypeLabel.textAndMnemonic=\u6A94\u6848\u985E\u578B(&T):
-FileChooser.upFolderToolTip.textAndMnemonic=\u5F80\u4E0A\u4E00\u5C64
-FileChooser.upFolderAccessibleName=\u5F80\u4E0A
-FileChooser.homeFolderToolTip.textAndMnemonic=\u4E3B\u76EE\u9304
-FileChooser.homeFolderAccessibleName=\u4E3B\u76EE\u9304
-FileChooser.newFolderToolTip.textAndMnemonic=\u5EFA\u7ACB\u65B0\u8CC7\u6599\u593E
-FileChooser.newFolderAccessibleName=\u65B0\u8CC7\u6599\u593E
-FileChooser.newFolderActionLabel.textAndMnemonic=\u65B0\u8CC7\u6599\u593E
-FileChooser.listViewButtonToolTip.textAndMnemonic=\u6E05\u55AE
-FileChooser.listViewButtonAccessibleName=\u6E05\u55AE
-FileChooser.listViewActionLabel.textAndMnemonic=\u6E05\u55AE
-FileChooser.detailsViewButtonToolTip.textAndMnemonic=\u8A73\u7D30\u8CC7\u8A0A
-FileChooser.detailsViewButtonAccessibleName=\u8A73\u7D30\u8CC7\u8A0A
-FileChooser.viewMenuButtonToolTipText = \u6AA2\u8996\u529F\u80FD\u8868
-FileChooser.viewMenuButtonAccessibleName = \u6AA2\u8996\u529F\u80FD\u8868
-FileChooser.detailsViewActionLabel.textAndMnemonic=\u8A73\u7D30\u8CC7\u8A0A
-FileChooser.refreshActionLabel.textAndMnemonic=\u91CD\u65B0\u6574\u7406
-FileChooser.viewMenuLabel.textAndMnemonic=\u6AA2\u8996
-FileChooser.fileNameHeader.textAndMnemonic=\u540D\u7A31
-FileChooser.fileSizeHeader.textAndMnemonic=\u5927\u5C0F
-FileChooser.fileTypeHeader.textAndMnemonic=\u985E\u578B
-FileChooser.fileDateHeader.textAndMnemonic=\u4FEE\u6539\u65E5\u671F
-FileChooser.fileAttrHeader.textAndMnemonic=\u5C6C\u6027
diff --git a/ojluni/src/main/java/com/sun/jdi/AbsentInformationException.java b/ojluni/src/main/java/com/sun/jdi/AbsentInformationException.java
deleted file mode 100755
index f5ef5b8..0000000
--- a/ojluni/src/main/java/com/sun/jdi/AbsentInformationException.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (c) 1998, 1999, 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.jdi;
-
-/**
- * Thrown to indicate line number or variable information is not available.
- *
- * @author Gordon Hirsch
- * @since  1.3
- */
-public class AbsentInformationException extends Exception
-{
-    public AbsentInformationException()
-    {
-        super();
-    }
-
-    public AbsentInformationException(String s)
-    {
-        super(s);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/Accessible.java b/ojluni/src/main/java/com/sun/jdi/Accessible.java
deleted file mode 100755
index 55b3b45..0000000
--- a/ojluni/src/main/java/com/sun/jdi/Accessible.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * Copyright (c) 1998, 2001, 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.jdi;
-
-/**
- * Provides information on the accessibility of a type or type component.
- * Mirrors for program elements which allow an
- * an access specifier (private, protected, public) provide information
- * on that part of the declaration through this interface.
- *
- * @author Robert Field
- * @author Gordon Hirsch
- * @author James McIlree
- * @since  1.3
- */
-public interface Accessible {
-
-    /**
-     * Returns the Java<sup><font size=-2>TM</font></sup>
-     * programming language modifiers, encoded in an integer.
-     * <p>
-     * The modifier encodings are defined in
-     * <cite>The Java&trade; Virtual Machine Specification</cite>
-     * in the <code>access_flag</code> tables for classes(section 4.1), fields(section 4.5), and methods(section 4.6).
-     */
-    public int modifiers();
-
-    /**
-     * Determines if this object mirrors a private item.
-     * For {@link ArrayType}, the return value depends on the
-     * array component type. For primitive arrays the return value
-     * is always false. For object arrays, the return value is the
-     * same as would be returned for the component type.
-     * For primitive classes, such as {@link java.lang.Integer#TYPE},
-     * the return value is always false.
-     *
-     * @return <code>true</code> for items with private access;
-     * <code>false</code> otherwise.
-     */
-    boolean isPrivate();
-
-    /**
-     * Determines if this object mirrors a package private item.
-     * A package private item is declared with no access specifier.
-     * For {@link ArrayType}, the return value depends on the
-     * array component type. For primitive arrays the return value
-     * is always false. For object arrays, the return value is the
-     * same as would be returned for the component type.
-     * For primitive classes, such as {@link java.lang.Integer#TYPE},
-     * the return value is always false.
-     *
-     * @return <code>true</code> for items with package private access;
-     * <code>false</code> otherwise.
-     */
-    boolean isPackagePrivate();
-
-    /**
-     * Determines if this object mirrors a protected item.
-     * For {@link ArrayType}, the return value depends on the
-     * array component type. For primitive arrays the return value
-     * is always false. For object arrays, the return value is the
-     * same as would be returned for the component type.
-     * For primitive classes, such as {@link java.lang.Integer#TYPE},
-     * the return value is always false.
-     *
-     * @return <code>true</code> for items with private access;
-     * <code>false</code> otherwise.
-     */
-    boolean isProtected();
-
-    /**
-     * Determines if this object mirrors a public item.
-     * For {@link ArrayType}, the return value depends on the
-     * array component type. For primitive arrays the return value
-     * is always true. For object arrays, the return value is the
-     * same as would be returned for the component type.
-     * For primitive classes, such as {@link java.lang.Integer#TYPE},
-     * the return value is always true.
-     *
-     * @return <code>true</code> for items with public access;
-     * <code>false</code> otherwise.
-     */
-    boolean isPublic();
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/ArrayReference.java b/ojluni/src/main/java/com/sun/jdi/ArrayReference.java
deleted file mode 100755
index f450931..0000000
--- a/ojluni/src/main/java/com/sun/jdi/ArrayReference.java
+++ /dev/null
@@ -1,209 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package com.sun.jdi;
-
-import java.util.List;
-
-/**
- * Provides access to an array object and its components in the target VM.
- * Each array component is mirrored by a {@link Value} object.
- * The array components, in aggregate, are placed in {@link java.util.List}
- * objects instead of arrays for consistency with the rest of the API and
- * for interoperability with other APIs.
- *
- * @author Robert Field
- * @author Gordon Hirsch
- * @author James McIlree
- * @since  1.3
- */
-public interface ArrayReference extends ObjectReference {
-
-    /**
-     * Returns the number of components in this array.
-     *
-     * @return the integer count of components in this array.
-     */
-    int length();
-
-    /**
-     * Returns an array component value.
-     *
-     * @param index the index of the component to retrieve
-     * @return the {@link Value} at the given index.
-     * @throws java.lang.IndexOutOfBoundsException if
-     * <CODE><I>index</I></CODE> is outside the range of this array,
-     * that is, if either of the following are true:
-     * <PRE>
-     *    <I>index</I> &lt; 0
-     *    <I>index</I> &gt;= {@link #length() length()} </PRE>
-     */
-    Value getValue(int index);
-
-    /**
-     * Returns all of the components in this array.
-     *
-     * @return a list of {@link Value} objects, one for each array
-     * component ordered by array index.  For zero length arrays,
-     * an empty list is returned.
-     */
-    List<Value> getValues();
-
-    /**
-     * Returns a range of array components.
-     *
-     * @param index the index of the first component to retrieve
-     * @param length the number of components to retrieve, or -1 to
-     * retrieve all components to the end of this array.
-     * @return a list of {@link Value} objects, one for each requested
-     * array component ordered by array index.  When there are
-     * no elements in the specified range (e.g.
-     * <CODE><I>length</I></CODE> is zero) an empty list is returned
-     *
-     * @throws java.lang.IndexOutOfBoundsException if the range
-     * specified with <CODE><I>index</I></CODE> and
-     * <CODE><I>length</I></CODE> is not within the range of the array,
-     * that is, if either of the following are true:
-     * <PRE>
-     *    <I>index</I> &lt; 0
-     *    <I>index</I> &gt; {@link #length() length()} </PRE>
-     * or if <CODE><I>length</I> != -1</CODE> and
-     * either of the following are true:
-     * <PRE>
-     *    <I>length</I> &lt; 0
-     *    <I>index</I> + <I>length</I> &gt;  {@link #length() length()}</PRE>
-     */
-    List<Value> getValues(int index, int length);
-
-    /**
-     * Replaces an array component with another value.
-     * <p>
-     * Object values must be assignment compatible with the component type
-     * (This implies that the component type must be loaded through the
-     * declaring class's class loader). Primitive values must be
-     * either assignment compatible with the component type or must be
-     * convertible to the component type without loss of information.
-     * See JLS section 5.2 for more information on assignment
-     * compatibility.
-     *
-     * @param value the new value
-     * @param index the index of the component to set
-     * @throws java.lang.IndexOutOfBoundsException if
-     * <CODE><I>index</I></CODE> is outside the range of this array,
-     * that is, if either of the following are true:
-     * <PRE>
-     *    <I>index</I> &lt; 0
-     *    <I>index</I> &gt;= {@link #length() length()} </PRE>
-     * @throws InvalidTypeException if the type of <CODE><I>value</I></CODE>
-     * is not compatible with the declared type of array components.
-     * @throws ClassNotLoadedException if the array component type
-     * has not yet been loaded
-     * through the appropriate class loader.
-     * @throws VMCannotBeModifiedException if the VirtualMachine is read-only - see {@link VirtualMachine#canBeModified()}.
-     *
-     * @see ArrayType#componentType()
-     */
-    void setValue(int index, Value value)
-            throws InvalidTypeException,
-                   ClassNotLoadedException;
-
-    /**
-     * Replaces all array components with other values. If the given
-     * list is larger in size than the array, the values at the
-     * end of the list are ignored.
-     * <p>
-     * Object values must be assignment compatible with the element type
-     * (This implies that the component type must be loaded through the
-     * enclosing class's class loader). Primitive values must be
-     * either assignment compatible with the component type or must be
-     * convertible to the component type without loss of information.
-     * See JLS section 5.2 for more information on assignment
-     * compatibility.
-     *
-     * @param values a list of {@link Value} objects to be placed
-     * in this array.  If <CODE><I>values</I>.size()</CODE> is
-     * less that the length of the array, the first
-     * <CODE><I>values</I>.size()</CODE> elements are set.
-     * @throws InvalidTypeException if any of the
-     * new <CODE><I>values</I></CODE>
-     * is not compatible with the declared type of array components.
-     * @throws ClassNotLoadedException if the array component
-     * type has not yet been loaded
-     * through the appropriate class loader.
-     * @throws VMCannotBeModifiedException if the VirtualMachine is read-only - see {@link VirtualMachine#canBeModified()}.
-     *
-     * @see ArrayType#componentType()
-     */
-    void setValues(List<? extends Value> values)
-            throws InvalidTypeException,
-                   ClassNotLoadedException;
-
-    /**
-     * Replaces a range of array components with other values.
-     * <p>
-     * Object values must be assignment compatible with the component type
-     * (This implies that the component type must be loaded through the
-     * enclosing class's class loader). Primitive values must be
-     * either assignment compatible with the component type or must be
-     * convertible to the component type without loss of information.
-     * See JLS section 5.2 for more information on assignment
-     * compatibility.
-     *
-     * @param index the index of the first component to set.
-     * @param values a list of {@link Value} objects to be placed
-     * in this array.
-     * @param srcIndex the index of the first source value to use.
-     * @param length the number of components to set, or -1 to set
-     * all components to the end of this array or the end of
-     * <CODE><I>values</I></CODE> (whichever comes first).
-     * @throws InvalidTypeException if any element of
-     * <CODE><I>values</I></CODE>
-     * is not compatible with the declared type of array components.
-     * @throws java.lang.IndexOutOfBoundsException if the
-     * array range specified with
-     * <CODE><I>index</I></CODE> and  <CODE><I>length</I></CODE>
-     * is not within the range of the array,
-     * or if the source range specified with
-     * <CODE><I>srcIndex</I></CODE> and <CODE><I>length</I></CODE>
-     * is not within <CODE><I>values</I></CODE>,
-     * that is, if any of the following are true:
-     * <PRE>
-     *    <I>index</I> &lt; 0
-     *    <I>index</I> &gt; {@link #length() length()}
-     *    <I>srcIndex</I> &lt; 0
-     *    <I>srcIndex</I> &gt; <I>values</I>.size() </PRE>
-     * or if <CODE><I>length</I> != -1</CODE> and any of the
-     * following are true:
-     * <PRE>
-     *    <I>length</I> &lt; 0
-     *    <I>index</I> + <I>length</I> &gt; {@link #length() length()}
-     *    <I>srcIndex</I> + <I>length</I> &gt; <I>values</I>.size() </PRE>
-     * @throws VMCannotBeModifiedException if the VirtualMachine is read-only - see {@link VirtualMachine#canBeModified()}.
-     * @see ArrayType#componentType()
-     */
-    void setValues(int index, List<? extends Value> values, int srcIndex, int length)
-            throws InvalidTypeException,
-                   ClassNotLoadedException;
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/ArrayType.java b/ojluni/src/main/java/com/sun/jdi/ArrayType.java
deleted file mode 100755
index 6e3c3f6..0000000
--- a/ojluni/src/main/java/com/sun/jdi/ArrayType.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package com.sun.jdi;
-
-import java.util.List;
-
-/**
- * Provides access to the class of an array and the type of
- * its components in the target VM.
- *
- * @see ArrayReference
- *
- * @author Robert Field
- * @author Gordon Hirsch
- * @author James McIlree
- * @since  1.3
- */
-public interface ArrayType extends ReferenceType {
-
-    /**
-     * Creates a new instance of this array class in the target VM.
-     * The array is created with the given length and each component
-     * is initialized to is standard default value.
-     *
-     * @param length the number of components in the new array
-     * @return the newly created {@link ArrayReference} mirroring
-     * the new object in the target VM.
-     *
-     * @throws VMCannotBeModifiedException if the VirtualMachine is read-only - see {@link VirtualMachine#canBeModified()}.
-     */
-    ArrayReference newInstance(int length);
-
-    /**
-     * Gets the JNI signature of the components of this
-     * array class. The signature
-     * describes the declared type of the components. If the components
-     * are objects, their actual type in a particular run-time context
-     * may be a subclass of the declared class.
-     *
-     * @return a string containing the JNI signature of array components.
-     */
-    String componentSignature();
-
-    /**
-     * Returns a text representation of the component
-     * type of this array.
-     *
-     * @return a text representation of the component type.
-     */
-    String componentTypeName();
-
-    /**
-     * Returns the component type of this array,
-     * as specified in the array declaration.
-     * <P>
-     * Note: The component type of a array will always be
-     * created or loaded before the array - see
-     * <cite>The Java&trade; Virtual Machine Specification</cite>,
-     * section 5.3.3 - Creating Array Classes.
-     * However, although the component type will be loaded it may
-     * not yet be prepared, in which case the type will be returned
-     * but attempts to perform some operations on the returned type
-     * (e.g. {@link ReferenceType#fields() fields()}) will throw
-     * a {@link ClassNotPreparedException}.
-     * Use {@link ReferenceType#isPrepared()} to determine if
-     * a reference type is prepared.
-     *
-     * @see Type
-     * @see Field#type() Field.type() - for usage examples
-     * @return the {@link Type} of this array's components.
-     */
-    Type componentType() throws ClassNotLoadedException;
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/BooleanType.java b/ojluni/src/main/java/com/sun/jdi/BooleanType.java
deleted file mode 100755
index ae7bbb9..0000000
--- a/ojluni/src/main/java/com/sun/jdi/BooleanType.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (c) 1998, 1999, 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.jdi;
-
-/**
- * The type of all primitive <code>boolean</code> values
- * accessed in the target VM. Calls to {@link Value#type} will return an
- * implementor of this interface.
- *
- * @see BooleanValue
- *
- * @author James McIlree
- * @since  1.3
- */
-public interface BooleanType extends PrimitiveType {
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/BooleanValue.java b/ojluni/src/main/java/com/sun/jdi/BooleanValue.java
deleted file mode 100755
index 02aa89a..0000000
--- a/ojluni/src/main/java/com/sun/jdi/BooleanValue.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (c) 1998, 1999, 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.jdi;
-
-/**
- * Provides access to a primitive <code>boolean</code> value in
- * the target VM.
- *
- * @author Robert Field
- * @author Gordon Hirsch
- * @author James McIlree
- * @since  1.3
- */
-public interface BooleanValue extends PrimitiveValue
-{
-    /**
-     * Returns this BooleanValue as a boolean.
-     *
-     * @return the <code>boolean</code> mirrored by this object.
-     */
-    boolean value();
-
-    /**
-     * Compares the specified Object with this BooleanValue for equality.
-     *
-     * @return true if the Object is a BooleanValue and if applying "=="
-     * to the two mirrored primitives would evaluate to true; false
-     * otherwise.
-     */
-    boolean equals(Object obj);
-
-    /**
-     * Returns the hash code value for this BooleanValue.
-     *
-     * @return the integer hash code
-     */
-    int hashCode();
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/Bootstrap.java b/ojluni/src/main/java/com/sun/jdi/Bootstrap.java
deleted file mode 100755
index e4c0f95..0000000
--- a/ojluni/src/main/java/com/sun/jdi/Bootstrap.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (c) 1998, 2006, 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.jdi;
-
-/**
- * Initial class that provides access to the default implementation
- * of JDI interfaces. A debugger application uses this class to access the
- * single instance of the {@link VirtualMachineManager} interface.
- *
- * @author Gordon Hirsch
- * @since  1.3
- */
-
-public class Bootstrap extends Object {
-
-    /**
-     * Returns the virtual machine manager.
-     *
-     * <p> May throw an unspecified error if initialization of the
-     * {@link com.sun.jdi.VirtualMachineManager} fails or if
-     * the virtual machine manager is unable to locate or create
-     * any {@link com.sun.jdi.connect.Connector Connectors}. </p>
-     * <p>
-     * @throws java.lang.SecurityException if a security manager has been
-     * installed and it denies {@link JDIPermission}
-     * <tt>("virtualMachineManager")</tt> or other unspecified
-     * permissions required by the implementation.
-     * </p>
-     */
-    static public synchronized VirtualMachineManager virtualMachineManager() {
-        return com.sun.tools.jdi.VirtualMachineManagerImpl.virtualMachineManager();
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/ByteType.java b/ojluni/src/main/java/com/sun/jdi/ByteType.java
deleted file mode 100755
index be8efa8..0000000
--- a/ojluni/src/main/java/com/sun/jdi/ByteType.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (c) 1998, 1999, 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.jdi;
-
-/**
- * The type of all primitive byte values accessed in
- * the target VM. Calls to {@link Value#type} will return an
- * implementor of this interface.
- *
- * @see ByteValue
- *
- * @author James McIlree
- * @since  1.3
- */
-public interface ByteType extends PrimitiveType
-{
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/ByteValue.java b/ojluni/src/main/java/com/sun/jdi/ByteValue.java
deleted file mode 100755
index 4e4a899..0000000
--- a/ojluni/src/main/java/com/sun/jdi/ByteValue.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package com.sun.jdi;
-
-/**
- * Provides access to a primitive <code>byte</code> value in the target VM.
- *
- * @author Robert Field
- * @author Gordon Hirsch
- * @author James McIlree
- * @since  1.3
- */
-public interface ByteValue extends PrimitiveValue, Comparable<ByteValue>
-{
-    /**
-     * Returns this ByteValue as a <code>byte</code>.
-     *
-     * @return the <code>byte</code> mirrored by this object.
-     */
-    byte value();
-
-    /**
-     * Compares the specified Object with this ByteValue for equality.
-     *
-     * @return true if the Object is a ByteValue and if applying "=="
-     * to the two mirrored primitives would evaluate to true; false
-     * otherwise.
-     */
-    boolean equals(Object obj);
-
-    /**
-     * Returns the hash code value for this BooleanValue.
-     *
-     * @return the integer hash code
-     */
-    int hashCode();
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/CharType.java b/ojluni/src/main/java/com/sun/jdi/CharType.java
deleted file mode 100755
index 0174c0d..0000000
--- a/ojluni/src/main/java/com/sun/jdi/CharType.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (c) 1998, 1999, 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.jdi;
-
-/**
- * The type of all primitive char values accessed in
- * the target VM. Calls to {@link Value#type} will return an
- * implementor of this interface.
- *
- * @see CharValue
- *
- * @author James McIlree
- * @since  1.3
- */
-public interface CharType extends PrimitiveType
-{
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/CharValue.java b/ojluni/src/main/java/com/sun/jdi/CharValue.java
deleted file mode 100755
index 87a9d44..0000000
--- a/ojluni/src/main/java/com/sun/jdi/CharValue.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package com.sun.jdi;
-
-/**
- * Provides access to a primitive <code>char</code> value in
- * the target VM.
- *
- * @author Robert Field
- * @author Gordon Hirsch
- * @author James McIlree
- * @since  1.3
- */
-public interface CharValue extends PrimitiveValue, Comparable<CharValue>
-{
-    /**
-     * Returns this CharValue as a <code>char</code>.
-     *
-     * @return the <code>char</code> mirrored by this object.
-     */
-    char value();
-
-    /**
-     * Compares the specified Object with this CharValue for equality.
-     *
-     * @return true if the Object is a CharValue and if applying "=="
-     * to the two mirrored primitives would evaluate to true; false
-     * otherwise.
-     */
-    boolean equals(Object obj);
-
-    /**
-     * Returns the hash code value for this CharValue.
-     *
-     * @return the integer hash code
-     */
-    int hashCode();
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/ClassLoaderReference.java b/ojluni/src/main/java/com/sun/jdi/ClassLoaderReference.java
deleted file mode 100755
index cccf7c3..0000000
--- a/ojluni/src/main/java/com/sun/jdi/ClassLoaderReference.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package com.sun.jdi;
-
-import java.util.List;
-
-/**
- * A class loader object from the target VM.
- * A ClassLoaderReference is an {@link ObjectReference} with additional
- * access to classloader-specific information from the target VM. Instances
- * ClassLoaderReference are obtained through calls to
- * {@link ReferenceType#classLoader}
- *
- * @see ObjectReference
- *
- * @author Gordon Hirsch
- * @since  1.3
- */
-public interface ClassLoaderReference extends ObjectReference {
-
-    /**
-     * Returns a list of all loaded classes that were defined by this
-     * class loader. No ordering of this list guaranteed.
-     * <P>
-     * The returned list will include reference types
-     * loaded at least to the point of preparation and
-     * types (like array) for which preparation is
-     * not defined.
-     *
-     * @return a List of {@link ReferenceType} objects mirroring types
-     * loaded by this class loader. The list has length 0 if no types
-     * have been defined by this classloader.
-     */
-    List<ReferenceType> definedClasses();
-
-    /**
-     * Returns a list of all classes for which this class loader has
-     * been recorded as the initiating loader in the target VM.
-     * The list contains ReferenceTypes defined directly by this loader
-     * (as returned by {@link #definedClasses}) and any types for which
-     * loading was delegated by this class loader to another class loader.
-     * <p>
-     * The visible class list has useful properties with respect to
-     * the type namespace. A particular type name will occur at most
-     * once in the list. Each field or variable declared with that
-     * type name in a class defined by
-     * this class loader must be resolved to that single type.
-     * <p>
-     * No ordering of the returned list is guaranteed.
-     * <p>
-     * See
-     * <cite>The Java&trade; Virtual Machine Specification</cite>,
-     * section 5.3 - Creation and Loading
-     * for more information on the initiating classloader.
-     * <p>
-     * Note that unlike {@link #definedClasses()}
-     * and {@link VirtualMachine#allClasses()},
-     * some of the returned reference types may not be prepared.
-     * Attempts to perform some operations on unprepared reference types
-     * (e.g. {@link ReferenceType#fields() fields()}) will throw
-     * a {@link ClassNotPreparedException}.
-     * Use {@link ReferenceType#isPrepared()} to determine if
-     * a reference type is prepared.
-     *
-     * @return a List of {@link ReferenceType} objects mirroring classes
-     * initiated by this class loader. The list has length 0 if no classes
-     * are visible to this classloader.
-     */
-    List<ReferenceType> visibleClasses();
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/ClassNotLoadedException.java b/ojluni/src/main/java/com/sun/jdi/ClassNotLoadedException.java
deleted file mode 100755
index b139b3f..0000000
--- a/ojluni/src/main/java/com/sun/jdi/ClassNotLoadedException.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Copyright (c) 1998, 2001, 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.jdi;
-
-/**
- * Thrown to indicate that the requested class has
- * not yet been loaded through the appropriate class loader.
- * <p>
- * Due to the lazy class linking performed by many VMs, it is
- * possible for a field or variable to be visible in a program
- * before the associated class is loaded. Until the class is loaded
- * all that is available is a signature string. If an attempt is made to
- * set the value of such a field or variable from JDI, the appropriate
- * type checking cannot be done because the destination class has not been
- * loaded. The same is true for the element class of array elements.
- * <p>
- * It is not advisable to solve this problem by attempting a class load on
- * the fly in this case. There are two problems in having the debugger load
- * a class instead of waiting for it to load over the normal course
- * of events.
- * <ul>
- * <li>There can be no guarantee that running the appropriate class
- * loader won't cause a deadlock in loading the
- * class. Class loaders can consist of arbitrary
- * Java<sup><font size=-2>TM</font></sup> programming language code and the
- * class loading methods are usually synchronized. Most of the work
- * done by a debugger happens when threads are suspended. If another
- * application thread is suspended within the same class loader,
- *  a deadlock is very possible.
- * <li>Changing the order in which classes are normally loaded may either mask
- * or reveal bugs in the application. An unintrusive debugger should strive
- * to leave unchanged the behavior of the application being debugged.
- * </ul>
- * To avoid these potential problems, this exception is thrown.
- * <p>
- * Note that this exception will be thrown until the class in question
- * is visible to the class loader of enclosing class. (That is, the
- * class loader of the enclosing class must be an <i>initiating</i> class
- * loader for the class in question.)
- * See
- * <cite>The Java&trade; Virtual Machine Specification</cite>
- * for more details.
- *
- * @author Gordon Hirsch
- * @since  1.3
- */
-public class ClassNotLoadedException extends Exception
-{
-    private String className;
-
-    public ClassNotLoadedException(String className) {
-        super();
-        this.className = className;
-    }
-
-    public ClassNotLoadedException(String className, String message) {
-        super(message);
-        this.className = className;
-    }
-
-    public String className() {
-        return className;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/ClassNotPreparedException.java b/ojluni/src/main/java/com/sun/jdi/ClassNotPreparedException.java
deleted file mode 100755
index cbee2bc..0000000
--- a/ojluni/src/main/java/com/sun/jdi/ClassNotPreparedException.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (c) 1998, 1999, 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.jdi;
-
-/**
- * Thrown to indicate that the requested operation cannot be
- * completed because the specified class has not yet been prepared.
- *
- * @author Gordon Hirsch
- * @since  1.3
- */
-public class ClassNotPreparedException extends RuntimeException {
-    public ClassNotPreparedException()
-    {
-        super();
-    }
-
-    public ClassNotPreparedException(String s)
-    {
-        super(s);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/ClassObjectReference.java b/ojluni/src/main/java/com/sun/jdi/ClassObjectReference.java
deleted file mode 100755
index f6fa386..0000000
--- a/ojluni/src/main/java/com/sun/jdi/ClassObjectReference.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1999, 2001, 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.jdi;
-
-/**
- * An instance of java.lang.Class from the target VM.
- * Use this interface to access type information
- * for the class, array, or interface that this object reflects.
- *
- * @see ReferenceType
- *
- * @author Gordon Hirsch
- * @since  1.3
- */
-public interface ClassObjectReference extends ObjectReference {
-
-    /**
-     * Returns the {@link ReferenceType} corresponding to this
-     * class object. The returned type can be used to obtain
-     * detailed information about the class.
-     *
-     * @return the {@link ReferenceType} reflected by this class object.
-     */
-    ReferenceType reflectedType();
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/ClassType.java b/ojluni/src/main/java/com/sun/jdi/ClassType.java
deleted file mode 100755
index 4308327..0000000
--- a/ojluni/src/main/java/com/sun/jdi/ClassType.java
+++ /dev/null
@@ -1,372 +0,0 @@
-/*
- * Copyright (c) 1998, 2006, 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.jdi;
-
-import java.util.List;
-
-/**
- * A mirror of a class in the target VM. A ClassType is a refinement
- * of {@link ReferenceType} that applies to true classes in the JLS
- * sense of the definition (not an interface, not an array type). Any
- * {@link ObjectReference} that mirrors an instance of such a class
- * will have a ClassType as its type.
- *
- * @see ObjectReference
- *
- * @author Robert Field
- * @author Gordon Hirsch
- * @author James McIlree
- * @since  1.3
- */
-public interface ClassType extends ReferenceType {
-    /**
-     * Gets the superclass of this class.
-     *
-     * @return a {@link ClassType} that mirrors the superclass
-     * of this class in the target VM. If no such class exists,
-     * returns null
-     */
-    ClassType superclass();
-
-    /**
-     * Gets the interfaces directly implemented by this class.
-     * Only the interfaces that are declared with the "implements"
-     * keyword in this class are included.
-     *
-     * @return a List of {@link InterfaceType} objects each mirroring
-     * a direct interface this ClassType in the target VM.
-     * If none exist, returns a zero length List.
-     * @throws ClassNotPreparedException if this class not yet been
-     * prepared.
-     */
-    List<InterfaceType> interfaces();
-
-    /**
-     * Gets the interfaces directly and indirectly implemented
-     * by this class. Interfaces returned by {@link ClassType#interfaces}
-     * are returned as well all superinterfaces.
-     *
-     * @return a List of {@link InterfaceType} objects each mirroring
-     * an interface of this ClassType in the target VM.
-     * If none exist, returns a zero length List.
-     * @throws ClassNotPreparedException if this class not yet been
-     * prepared.
-     */
-    List<InterfaceType> allInterfaces();
-
-    /**
-     * Gets the currently loaded, direct subclasses of this class.
-     * No ordering of this list is guaranteed.
-     *
-     * @return a List of {@link ClassType} objects each mirroring a loaded
-     * subclass of this class in the target VM. If no such classes
-     * exist, this method returns a zero-length list.
-     */
-    List<ClassType> subclasses();
-
-    /**
-     * Determine if this class was declared as an enum.
-     * @return <code>true</code> if this class was declared as an enum; false
-     * otherwise.
-     */
-    boolean isEnum();
-
-    /**
-     * Assigns a value to a static field.
-     * The {@link Field} must be valid for this ClassType; that is,
-     * it must be from the mirrored object's class or a superclass of that class.
-     * The field must not be final.
-     * <p>
-     * Object values must be assignment compatible with the field type
-     * (This implies that the field type must be loaded through the
-     * enclosing class's class loader). Primitive values must be
-     * either assignment compatible with the field type or must be
-     * convertible to the field type without loss of information.
-     * See JLS section 5.2 for more information on assignment
-     * compatibility.
-     *
-     * @param field the field to set.
-     * @param value the value to be assigned.
-     * @throws java.lang.IllegalArgumentException if the field is
-     * not static, the field is final, or the field does not exist
-     * in this class.
-     * @throws ClassNotLoadedException if the field type has not yet been loaded
-     * through the appropriate class loader.
-     * @throws InvalidTypeException if the value's type does not match
-     * the field's declared type.
-     * @throws VMCannotBeModifiedException if the VirtualMachine is read-only - see {@link VirtualMachine#canBeModified()}.
-     */
-    void setValue(Field field, Value value)
-        throws InvalidTypeException, ClassNotLoadedException;
-
-    /** Perform method invocation with only the invoking thread resumed */
-    static final int INVOKE_SINGLE_THREADED = 0x1;
-
-    /**
-     * Invokes the specified static {@link Method} in the
-     * target VM. The
-     * specified method can be defined in this class,
-     * or in a superclass.
-     * The method must be a static method
-     * but not a static initializer.
-     * Use {@link ClassType#newInstance} to create a new object and
-     * run its constructor.
-     * <p>
-     * The method invocation will occur in the specified thread.
-     * Method invocation can occur only if the specified thread
-     * has been suspended by an event which occurred in that thread.
-     * Method invocation is not supported
-     * when the target VM has been suspended through
-     * {@link VirtualMachine#suspend} or when the specified thread
-     * is suspended through {@link ThreadReference#suspend}.
-     * <p>
-     * The specified method is invoked with the arguments in the specified
-     * argument list.  The method invocation is synchronous; this method
-     * does not return until the invoked method returns in the target VM.
-     * If the invoked method throws an exception, this method will throw
-     * an {@link InvocationException} which contains a mirror to the exception
-     * object thrown.
-     * <p>
-     * Object arguments must be assignment compatible with the argument type
-     * (This implies that the argument type must be loaded through the
-     * enclosing class's class loader). Primitive arguments must be
-     * either assignment compatible with the argument type or must be
-     * convertible to the argument type without loss of information.
-     * If the method being called accepts a variable number of arguments,
-     * then the last argument type is an array of some component type.
-     * The argument in the matching position can be omitted, or can be null,
-     * an array of the same component type, or an argument of the
-     * component type followed by any number of other arguments of the same
-     * type. If the argument is omitted, then a 0 length array of the
-     * component type is passed.  The component type can be a primitive type.
-     * Autoboxing is not supported.
-     *
-     * See Section 5.2 of
-     * <cite>The Java&trade; Language Specification</cite>
-     * for more information on assignment compatibility.
-     * <p>
-     * By default, all threads in the target VM are resumed while
-     * the method is being invoked if they were previously
-     * suspended by an event or by {@link VirtualMachine#suspend} or
-     * {@link ThreadReference#suspend}. This is done to prevent the deadlocks
-     * that will occur if any of the threads own monitors
-     * that will be needed by the invoked method.
-     * Note, however, that this implicit resume acts exactly like
-     * {@link ThreadReference#resume}, so if the thread's suspend
-     * count is greater than 1, it will remain in a suspended state
-     * during the invocation and thus a deadlock could still occur.
-     * By default, when the invocation completes,
-     * all threads in the target VM are suspended, regardless their state
-     * before the invocation.
-     * It is possible that
-     * breakpoints or other events might occur during the invocation.
-     * This can cause deadlocks as described above. It can also cause a deadlock
-     * if invokeMethod is called from the client's event handler thread.  In this
-     * case, this thread will be waiting for the invokeMethod to complete and
-     * won't read the EventSet that comes in for the new event.  If this
-     * new EventSet is SUSPEND_ALL, then a deadlock will occur because no
-     * one will resume the EventSet.  To avoid this, all EventRequests should
-     * be disabled before doing the invokeMethod, or the invokeMethod should
-     * not be done from the client's event handler thread.
-     * <p>
-     * The resumption of other threads during the invocation can be prevented
-     * by specifying the {@link #INVOKE_SINGLE_THREADED}
-     * bit flag in the <code>options</code> argument; however,
-     * there is no protection against or recovery from the deadlocks
-     * described above, so this option should be used with great caution.
-     * Only the specified thread will be resumed (as described for all
-     * threads above). Upon completion of a single threaded invoke, the invoking thread
-     * will be suspended once again. Note that any threads started during
-     * the single threaded invocation will not be suspended when the
-     * invocation completes.
-     * <p>
-     * If the target VM is disconnected during the invoke (for example, through
-     * {@link VirtualMachine#dispose}) the method invocation continues.
-     *
-     * @param thread the thread in which to invoke.
-     * @param method the {@link Method} to invoke.
-     * @param arguments the list of {@link Value} arguments bound to the
-     * invoked method. Values from the list are assigned to arguments
-     * in the order they appear in the method signature.
-     * @param options the integer bit flag options.
-     * @return a {@link Value} mirror of the invoked method's return value.
-     * @throws java.lang.IllegalArgumentException if the method is not
-     * a member of this class or a superclass, if the size of the argument list
-     * does not match the number of declared arguemnts for the method, or
-     * if the method is an initializer, constructor or static intializer.
-     * @throws {@link InvalidTypeException} if any argument in the
-     * argument list is not assignable to the corresponding method argument
-     * type.
-     * @throws ClassNotLoadedException if any argument type has not yet been loaded
-     * through the appropriate class loader.
-     * @throws IncompatibleThreadStateException if the specified thread has not
-     * been suspended by an event.
-     * @throws InvocationException if the method invocation resulted in
-     * an exception in the target VM.
-     * @throws InvalidTypeException If the arguments do not meet this requirement --
-     *         Object arguments must be assignment compatible with the argument
-     *         type.  This implies that the argument type must be
-     *         loaded through the enclosing class's class loader.
-     *         Primitive arguments must be either assignment compatible with the
-     *         argument type or must be convertible to the argument type without loss
-     *         of information. See JLS section 5.2 for more information on assignment
-     *         compatibility.
-     * @throws VMCannotBeModifiedException if the VirtualMachine is read-only - see {@link VirtualMachine#canBeModified()}.
-     */
-    Value invokeMethod(ThreadReference thread, Method method,
-                       List<? extends Value> arguments, int options)
-                                   throws InvalidTypeException,
-                                          ClassNotLoadedException,
-                                          IncompatibleThreadStateException,
-                                          InvocationException;
-
-    /**
-     * Constructs a new instance of this type, using
-     * the given constructor {@link Method} in the
-     * target VM. The
-     * specified constructor must be defined in this class.
-     * <p>
-     * Instance creation will occur in the specified thread.
-     * Instance creation can occur only if the specified thread
-     * has been suspended by an event which occurred in that thread.
-     * Instance creation is not supported
-     * when the target VM has been suspended through
-     * {@link VirtualMachine#suspend} or when the specified thread
-     * is suspended through {@link ThreadReference#suspend}.
-     * <p>
-     * The specified constructor is invoked with the arguments in the specified
-     * argument list.  The invocation is synchronous; this method
-     * does not return until the constructor returns in the target VM.
-     * If the invoked method throws an
-     * exception, this method will throw an {@link InvocationException}
-     * which contains a mirror to the exception object thrown.
-     * <p>
-     * Object arguments must be assignment compatible with the argument type
-     * (This implies that the argument type must be loaded through the
-     * enclosing class's class loader). Primitive arguments must be
-     * either assignment compatible with the argument type or must be
-     * convertible to the argument type without loss of information.
-     * If the method being called accepts a variable number of arguments,
-     * then the last argument type is an array of some component type.
-     * The argument in the matching position can be omitted, or can be null,
-     * an array of the same component type, or an argument of the
-     * component type, followed by any number of other arguments of the same
-     * type. If the argument is omitted, then a 0 length array of the
-     * component type is passed.  The component type can be a primitive type.
-     * Autoboxing is not supported.
-     *
-     * See section 5.2 of
-     * <cite>The Java&trade; Language Specification</cite>
-     * for more information on assignment compatibility.
-     * <p>
-     * By default, all threads in the target VM are resumed while
-     * the method is being invoked if they were previously
-     * suspended by an event or by {@link VirtualMachine#suspend} or
-     * {@link ThreadReference#suspend}. This is done to prevent the deadlocks
-     * that will occur if any of the threads own monitors
-     * that will be needed by the invoked method. It is possible that
-     * breakpoints or other events might occur during the invocation.
-     * Note, however, that this implicit resume acts exactly like
-     * {@link ThreadReference#resume}, so if the thread's suspend
-     * count is greater than 1, it will remain in a suspended state
-     * during the invocation. By default, when the invocation completes,
-     * all threads in the target VM are suspended, regardless their state
-     * before the invocation.
-     * <p>
-     * The resumption of other threads during the invocation can be prevented
-     * by specifying the {@link #INVOKE_SINGLE_THREADED}
-     * bit flag in the <code>options</code> argument; however,
-     * there is no protection against or recovery from the deadlocks
-     * described above, so this option should be used with great caution.
-     * Only the specified thread will be resumed (as described for all
-     * threads above). Upon completion of a single threaded invoke, the invoking thread
-     * will be suspended once again. Note that any threads started during
-     * the single threaded invocation will not be suspended when the
-     * invocation completes.
-     * <p>
-     * If the target VM is disconnected during the invoke (for example, through
-     * {@link VirtualMachine#dispose}) the method invocation continues.
-     *
-     * @param thread the thread in which to invoke.
-     * @param method the constructor {@link Method} to invoke.
-     * @param arguments the list of {@link Value} arguments bound to the
-     * invoked constructor. Values from the list are assigned to arguments
-     * in the order they appear in the constructor signature.
-     * @param options the integer bit flag options.
-     * @return an {@link ObjectReference} mirror of the newly created
-     * object.
-     * @throws java.lang.IllegalArgumentException if the method is not
-     * a member of this class, if the size of the argument list
-     * does not match the number of declared arguments for the constructor,
-     * or if the method is not a constructor.
-     * @throws {@link InvalidTypeException} if any argument in the
-     * argument list is not assignable to the corresponding method argument
-     * type.
-     * @throws ClassNotLoadedException if any argument type has not yet been loaded
-     * through the appropriate class loader.
-     * @throws IncompatibleThreadStateException if the specified thread has not
-     * been suspended by an event.
-     * @throws InvocationException if the method invocation resulted in
-     * an exception in the target VM.
-     * @throws InvalidTypeException If the arguments do not meet this requirement --
-     *         Object arguments must be assignment compatible with the argument
-     *         type.  This implies that the argument type must be
-     *         loaded through the enclosing class's class loader.
-     *         Primitive arguments must be either assignment compatible with the
-     *         argument type or must be convertible to the argument type without loss
-     *         of information. See JLS section 5.2 for more information on assignment
-     *         compatibility.
-     * @throws VMCannotBeModifiedException if the VirtualMachine is read-only
-     * - see {@link VirtualMachine#canBeModified()}.
-     */
-    ObjectReference newInstance(ThreadReference thread, Method method,
-                                List<? extends Value> arguments, int options)
-                                   throws InvalidTypeException,
-                                          ClassNotLoadedException,
-                                          IncompatibleThreadStateException,
-                                          InvocationException;
-
-    /**
-     * Returns a the single non-abstract {@link Method} visible from
-     * this class that has the given name and signature.
-     * See {@link ReferenceType#methodsByName(java.lang.String, java.lang.String)}
-     * for information on signature format.
-     * <p>
-     * The returned method (if non-null) is a component of
-     * {@link ClassType}.
-     *
-     * @see ReferenceType#visibleMethods
-     * @see ReferenceType#methodsByName(java.lang.String name)
-     * @see ReferenceType#methodsByName(java.lang.String name, java.lang.String signature)
-     * @param name the name of the method to find.
-     * @param signature the signature of the method to find
-     * @return the {@link Method} that matches the given
-     * name and signature or <code>null</code> if there is no match.
-     * @throws ClassNotPreparedException if methods are not yet available
-     * because the class has not yet been prepared.
-     */
-    Method concreteMethodByName(String name, String signature);
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/DoubleType.java b/ojluni/src/main/java/com/sun/jdi/DoubleType.java
deleted file mode 100755
index a585f45..0000000
--- a/ojluni/src/main/java/com/sun/jdi/DoubleType.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (c) 1998, 1999, 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.jdi;
-
-/**
- * The type of all primitive double values accessed in
- * the target VM. Calls to {@link Value#type} will return an
- * implementor of this interface.
- *
- * @see DoubleValue
- *
- * @author James McIlree
- * @since  1.3
- */
-public interface DoubleType extends PrimitiveType
-{
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/DoubleValue.java b/ojluni/src/main/java/com/sun/jdi/DoubleValue.java
deleted file mode 100755
index fccff0d..0000000
--- a/ojluni/src/main/java/com/sun/jdi/DoubleValue.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package com.sun.jdi;
-
-/**
- * Provides access to a primitive <code>double</code> value in
- * the target VM.
- *
- * @author Robert Field
- * @author Gordon Hirsch
- * @author James McIlree
- * @since  1.3
- */
-public interface DoubleValue extends PrimitiveValue, Comparable<DoubleValue>
-{
-    /**
-     * Returns this DoubleValue as a <code>double</code>.
-     *
-     * @return the <code>double</code> mirrored by this object.
-     */
-    double value();
-
-    /**
-     * Compares the specified Object with this DoubleValue for equality.
-     *
-     * @return true if the Object is a DoubleValue and if applying "=="
-     * to the two mirrored primitives would evaluate to true; false
-     * otherwise.
-     */
-    boolean equals(Object obj);
-
-    /**
-     * Returns the hash code value for this DoubleValue.
-     *
-     * @return the integer hash code
-     */
-    int hashCode();
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/Field.java b/ojluni/src/main/java/com/sun/jdi/Field.java
deleted file mode 100755
index fea18a9..0000000
--- a/ojluni/src/main/java/com/sun/jdi/Field.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package com.sun.jdi;
-
-/**
- * A class or instance variable in the target VM.
- * See {@link TypeComponent}
- * for general information about Field and Method mirrors.
- *
- * @see ObjectReference
- * @see ReferenceType
- *
- * @author Robert Field
- * @author Gordon Hirsch
- * @author James McIlree
- * @since  1.3
- */
-public interface Field extends TypeComponent, Comparable<Field> {
-
-    /**
-     * Returns a text representation of the type
-     * of this field.
-     * Where the type is the type specified in the declaration
-     * of this field.
-     * <P>
-     * This type name is always available even if
-     * the type has not yet been created or loaded.
-     *
-     * @return a String representing the
-     * type of this field.
-     */
-    String typeName();
-
-    /**
-     * Returns the type of this field.
-     * Where the type is the type specified in the declaration
-     * of this field.
-     * <P>
-     * For example, if a target class defines:
-     * <PRE>
-     *    short s;
-     *    Date d;
-     *    byte[] ba;</PRE>
-     * And the JDI client defines these <CODE>Field</CODE> objects:
-     * <PRE>
-     *    Field sField = targetClass.fieldByName("s");
-     *    Field dField = targetClass.fieldByName("d");
-     *    Field baField = targetClass.fieldByName("ba");</PRE>
-     * to mirror the corresponding fields, then <CODE>sField.type()</CODE>
-     * is a {@link ShortType}, <CODE>dField.type()</CODE> is the
-     * {@link ReferenceType} for <CODE>java.util.Date</CODE> and
-     * <CODE>((ArrayType)(baField.type())).componentType()</CODE> is a
-     * {@link ByteType}.
-     * <P>
-     * Note: if the type of this field is a reference type (class,
-     * interface, or array) and it has not been created or loaded
-     * by the declaring type's class loader - that is,
-     * {@link TypeComponent#declaringType <CODE>declaringType()</CODE>}
-     * <CODE>.classLoader()</CODE>,
-     * then ClassNotLoadedException will be thrown.
-     * Also, a reference type may have been loaded but not yet prepared,
-     * in which case the type will be returned
-     * but attempts to perform some operations on the returned type
-     * (e.g. {@link ReferenceType#fields() fields()}) will throw
-     * a {@link ClassNotPreparedException}.
-     * Use {@link ReferenceType#isPrepared()} to determine if
-     * a reference type is prepared.
-     *
-     * @see Type
-     * @return the {@link Type} of this field.
-     * @throws ClassNotLoadedException if the type has not yet been loaded
-     * or created through the appropriate class loader.
-     */
-    Type type() throws ClassNotLoadedException;
-
-    /**
-     * Determine if this is a transient field.
-     *
-     * @return <code>true</code> if this field is transient; false otherwise.
-     */
-    boolean isTransient();
-
-    /**
-     * Determine if this is a volatile field.
-     *
-     * @return <code>true</code> if this field is volatile; false otherwise.
-     */
-    boolean isVolatile();
-
-    /**
-     * Determine if this is a field that represents an enum constant.
-     * @return <code>true</code> if this field represents an enum constant;
-     * false otherwise.
-     */
-    boolean isEnumConstant();
-
-    /**
-     * Compares the specified Object with this field for equality.
-     *
-     * @return true if the Object is a Field and if both
-     * mirror the same field (declared in the same class or interface, in
-     * the same VM).
-     */
-    boolean equals(Object obj);
-
-    /**
-     * Returns the hash code value for this Field.
-     *
-     * @return the integer hash code
-     */
-    int hashCode();
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/FloatType.java b/ojluni/src/main/java/com/sun/jdi/FloatType.java
deleted file mode 100755
index c0de125..0000000
--- a/ojluni/src/main/java/com/sun/jdi/FloatType.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (c) 1998, 1999, 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.jdi;
-
-/**
- * The type of all primitive float values accessed in
- * the target VM. Calls to {@link Value#type} will return an
- * implementor of this interface.
- *
- * @see FloatValue
- *
- * @author James McIlree
- * @since  1.3
- */
-public interface FloatType extends PrimitiveType
-{
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/FloatValue.java b/ojluni/src/main/java/com/sun/jdi/FloatValue.java
deleted file mode 100755
index 07937d2..0000000
--- a/ojluni/src/main/java/com/sun/jdi/FloatValue.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package com.sun.jdi;
-
-/**
- * Provides access to a primitive <code>float</code> value in
- * the target VM.
- *
- * @author Robert Field
- * @author Gordon Hirsch
- * @author James McIlree
- * @since  1.3
- */
-public interface FloatValue extends PrimitiveValue, Comparable<FloatValue>
-{
-    /**
-     * Returns this FloatValue as a float.
-     *
-     * @return the <code>float</code> mirrored by this object.
-     */
-    float value();
-
-    /**
-     * Compares the specified Object with this FloatValue for equality.
-     *
-     * @return true if the Object is a FloatValue and if applying "=="
-     * to the two mirrored primitives would evaluate to true; false
-     * otherwise.
-     */
-    boolean equals(Object obj);
-
-    /**
-     * Returns the hash code value for this FloatValue.
-     *
-     * @return the integer hash code
-     */
-    int hashCode();
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/IncompatibleThreadStateException.java b/ojluni/src/main/java/com/sun/jdi/IncompatibleThreadStateException.java
deleted file mode 100755
index 894762c..0000000
--- a/ojluni/src/main/java/com/sun/jdi/IncompatibleThreadStateException.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (c) 1998, 1999, 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.jdi;
-
-/**
- * Thrown to indicate that the requested operation cannot be
- * completed while the specified thread is in its current state.
- *
- * @author Gordon Hirsch
- * @since  1.3
- */
-public class IncompatibleThreadStateException extends Exception
-{
-    public IncompatibleThreadStateException()
-    {
-        super();
-    }
-
-    public IncompatibleThreadStateException(String s)
-    {
-        super(s);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/InconsistentDebugInfoException.java b/ojluni/src/main/java/com/sun/jdi/InconsistentDebugInfoException.java
deleted file mode 100755
index 022895f..0000000
--- a/ojluni/src/main/java/com/sun/jdi/InconsistentDebugInfoException.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (c) 1999, 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.jdi;
-
-/**
- * Thrown to indicate that there is an inconistency in the debug
- * information provided by the target VM. For example, this exception
- * is thrown if there is a type mismatch between a retrieved value's
- * runtime type and its declared type as reported by the target VM.
- *
- * @author Gordon Hirsch
- * @since  1.3
- */
-public class InconsistentDebugInfoException extends RuntimeException {
-    public InconsistentDebugInfoException() {
-        super();
-    }
-
-    public InconsistentDebugInfoException(String s) {
-        super(s);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/IntegerType.java b/ojluni/src/main/java/com/sun/jdi/IntegerType.java
deleted file mode 100755
index 03601a5..0000000
--- a/ojluni/src/main/java/com/sun/jdi/IntegerType.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (c) 1998, 1999, 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.jdi;
-
-/**
- * The type of all primitive <code>int</code> values
- * accessed in the target VM. Calls to {@link Value#type} will return an
- * implementor of this interface.
- *
- * @see IntegerValue
- *
- * @author James McIlree
- * @since  1.3
- */
-public interface IntegerType extends PrimitiveType
-{
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/IntegerValue.java b/ojluni/src/main/java/com/sun/jdi/IntegerValue.java
deleted file mode 100755
index 89b7def..0000000
--- a/ojluni/src/main/java/com/sun/jdi/IntegerValue.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package com.sun.jdi;
-
-/**
- * Provides access to a primitive <code>int</code> value in
- * the target VM.
- *
- * @author Robert Field
- * @author Gordon Hirsch
- * @author James McIlree
- * @since  1.3
- */
-public interface IntegerValue extends PrimitiveValue, Comparable<IntegerValue>
-{
-    /**
-     * Returns this IntegerValue as an int.
-     *
-     * @return the <code>int</code> mirrored by this object.
-     */
-    int value();
-
-    /**
-     * Compares the specified Object with this IntegerValue for equality.
-     *
-     * @return true if the Object is an IntegerValue and if applying "=="
-     * to the two mirrored primitives would evaluate to true; false
-     * otherwise.
-     */
-    boolean equals(Object obj);
-
-    /**
-     * Returns the hash code value for this IntegerValue.
-     *
-     * @return the integer hash code
-     */
-    int hashCode();
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/InterfaceType.java b/ojluni/src/main/java/com/sun/jdi/InterfaceType.java
deleted file mode 100755
index 94a26e0..0000000
--- a/ojluni/src/main/java/com/sun/jdi/InterfaceType.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package com.sun.jdi;
-
-import java.util.List;
-
-/**
- * A mirror of an interface in the target VM. An InterfaceType is
- * a refinement of {@link ReferenceType} that applies to true interfaces
- * in the JLS  sense of the definition (not a class, not an array type).
- * An interface type will never be returned by
- * {@link ObjectReference#referenceType}, but it may be in the list
- * of implemented interfaces for a {@link ClassType} that is returned
- * by that method.
- *
- * @see ObjectReference
- *
- * @author Robert Field
- * @author Gordon Hirsch
- * @author James McIlree
- * @since  1.3
- */
-public interface InterfaceType extends ReferenceType {
-    /**
-     * Gets the interfaces directly extended by this interface.
-     * The returned list contains only those interfaces this
-     * interface has declared to be extended.
-     *
-     * @return a List of {@link InterfaceType} objects each mirroring
-     * an interface extended by this interface.
-     * If none exist, returns a zero length List.
-     * @throws ClassNotPreparedException if this class not yet been
-     * prepared.
-     */
-    List<InterfaceType> superinterfaces();
-
-    /**
-     * Gets the currently prepared interfaces which directly extend this
-     * interface. The returned list contains only those interfaces that
-     * declared this interface in their "extends" clause.
-     *
-     * @return a List of {@link InterfaceType} objects each mirroring
-     * an interface extending this interface.
-     * If none exist, returns a zero length List.
-     */
-    List<InterfaceType> subinterfaces();
-
-    /**
-     * Gets the currently prepared classes which directly implement this
-     * interface. The returned list contains only those classes that
-     * declared this interface in their "implements" clause.
-     *
-     * @return a List of {@link ClassType} objects each mirroring
-     * a class implementing this interface.
-     * If none exist, returns a zero length List.
-     */
-    List<ClassType> implementors();
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/InternalException.java b/ojluni/src/main/java/com/sun/jdi/InternalException.java
deleted file mode 100755
index 071d35f..0000000
--- a/ojluni/src/main/java/com/sun/jdi/InternalException.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (c) 1999, 2000, 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.jdi;
-
-/**
- * Thrown to indicate that an unexpected internal error has
- * occurred.
- *
- * @author Gordon Hirsch
- * @since  1.3
- */
-public class InternalException extends RuntimeException {
-     private int errorCode;
-
-     public InternalException() {
-         super();
-         this.errorCode = 0;
-     }
-
-     public InternalException(String s) {
-         super(s);
-         this.errorCode = 0;
-     }
-
-    public InternalException(int errorCode) {
-        super();
-        this.errorCode = errorCode;
-    }
-
-    public InternalException(String s, int errorCode) {
-        super(s);
-        this.errorCode = errorCode;
-    }
-
-    public int errorCode() {
-        return errorCode;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/InvalidCodeIndexException.java b/ojluni/src/main/java/com/sun/jdi/InvalidCodeIndexException.java
deleted file mode 100755
index 5bdb178..0000000
--- a/ojluni/src/main/java/com/sun/jdi/InvalidCodeIndexException.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package com.sun.jdi;
-
-/**
- * Thrown to indicate that the requested operation cannot be
- * completed because the specified code index is not valid.
- *
- * @deprecated This exception is no longer thrown
- *
- * @author Gordon Hirsch
- * @since  1.3
- */
-@Deprecated
-public class InvalidCodeIndexException extends RuntimeException {
-    public InvalidCodeIndexException() {
-        super();
-    }
-
-    public InvalidCodeIndexException(String s) {
-        super(s);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/InvalidLineNumberException.java b/ojluni/src/main/java/com/sun/jdi/InvalidLineNumberException.java
deleted file mode 100755
index 279fcc0..0000000
--- a/ojluni/src/main/java/com/sun/jdi/InvalidLineNumberException.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package com.sun.jdi;
-
-/**
- * Thrown to indicate that the requested operation cannot be
- * completed because the specified line number is not valid.
- *
- * @deprecated This exception is no longer thrown
- *
- * @author Gordon Hirsch
- * @since  1.3
- */
-@Deprecated
-public class InvalidLineNumberException extends RuntimeException {
-    public InvalidLineNumberException() {
-        super();
-    }
-
-    public InvalidLineNumberException(String s) {
-        super(s);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/InvalidStackFrameException.java b/ojluni/src/main/java/com/sun/jdi/InvalidStackFrameException.java
deleted file mode 100755
index 86f68c8..0000000
--- a/ojluni/src/main/java/com/sun/jdi/InvalidStackFrameException.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (c) 1998, 2000, 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.jdi;
-
-/**
- * Thrown to indicate that the requested operation cannot be
- * completed because the specified stack frame is no longer valid.
- *
- * @author Gordon Hirsch
- * @since  1.3
- */
-public class InvalidStackFrameException extends RuntimeException {
-    public InvalidStackFrameException() {
-        super();
-    }
-
-    public InvalidStackFrameException(String s) {
-        super(s);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/InvalidTypeException.java b/ojluni/src/main/java/com/sun/jdi/InvalidTypeException.java
deleted file mode 100755
index c6cfb29..0000000
--- a/ojluni/src/main/java/com/sun/jdi/InvalidTypeException.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package com.sun.jdi;
-
-/**
- * Thrown to indicate a type mismatch in setting the value of a field
- * or variable, or in specifying the return value of a method.
- *
- * @author James McIlree
- * @since  1.3
- */
-public class InvalidTypeException extends Exception
-{
-    public InvalidTypeException()
-    {
-        super();
-    }
-
-    public InvalidTypeException(String s)
-    {
-        super(s);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/InvocationException.java b/ojluni/src/main/java/com/sun/jdi/InvocationException.java
deleted file mode 100755
index 2130e53..0000000
--- a/ojluni/src/main/java/com/sun/jdi/InvocationException.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (c) 1998, 1999, 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.jdi;
-
-/**
- * Thrown to indicate an exception occurred in an invoked method within
- * the target VM.
- *
- * @author Gordon Hirsch
- * @since  1.3
- */
-public class InvocationException extends Exception
-{
-    ObjectReference exception;
-
-    public InvocationException(ObjectReference exception)
-    {
-        super("Exception occurred in target VM");
-        this.exception = exception;
-    }
-
-    public ObjectReference exception()
-    {
-        return exception;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/JDIPermission.java b/ojluni/src/main/java/com/sun/jdi/JDIPermission.java
deleted file mode 100755
index d915b3d..0000000
--- a/ojluni/src/main/java/com/sun/jdi/JDIPermission.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-package com.sun.jdi;
-
-/**
- * The <code>JDIPermission</code> class represents access rights to
- * the <code>VirtualMachineManager</code>.  This is the permission
- * which the SecurityManager will check when code that is running with
- * a SecurityManager requests access to the VirtualMachineManager, as
- * defined in the Java Debug Interface (JDI) for the Java platform.
- * <P>
- * A <code>JDIPermission</code> object contains a name (also referred
- * to as a "target name") but no actions list; you either have the
- * named permission or you don't.
- * <P>
- * The following table provides a summary description of what the
- * permission allows, and discusses the risks of granting code the
- * permission.
- * <P>
- * <table border=1 cellpadding=5 summary="Table shows permission
- * target name, what the permission allows, and associated risks">
- * <tr>
- * <th>Permission Target Name</th>
- * <th>What the Permission Allows</th>
- * <th>Risks of Allowing this Permission</th>
- * </tr>
- *
- * <tr>
- *   <td>virtualMachineManager</td>
- *   <td>Ability to inspect and modify the JDI objects in the
- *   <code>VirtualMachineManager</code>
- *   </td>
- *   <td>This allows an attacker to control the
- *   <code>VirtualMachineManager</code> and cause the system to
- *   misbehave.
- *   </td>
- * </tr>
- *
- * </table>
- *
- * <p>
- * Programmers do not normally create JDIPermission objects directly.
- * Instead they are created by the security policy code based on reading
- * the security policy file.
- *
- * @author  Tim Bell
- * @since   1.5
- *
- * @see com.sun.jdi.Bootstrap
- * @see java.security.BasicPermission
- * @see java.security.Permission
- * @see java.security.Permissions
- * @see java.security.PermissionCollection
- * @see java.lang.SecurityManager
- *
- */
-
-public final class JDIPermission extends java.security.BasicPermission {
-
-    /**
-     * The <code>JDIPermission</code> class represents access rights to the
-     * <code>VirtualMachineManager</code>
-     * @param name Permission name. Must be "virtualMachineManager".
-     * @throws IllegalArgumentException if the name argument is invalid.
-     */
-    public JDIPermission(String name) {
-        super(name);
-        if (!name.equals("virtualMachineManager")) {
-            throw new IllegalArgumentException("name: " + name);
-        }
-    }
-
-    /**
-     * Constructs a new JDIPermission object.
-     *
-     * @param name Permission name. Must be "virtualMachineManager".
-     * @param actions Must be either null or the empty string.
-     * @throws IllegalArgumentException if arguments are invalid.
-     */
-    public JDIPermission(String name, String actions)
-        throws IllegalArgumentException {
-        super(name);
-        if (!name.equals("virtualMachineManager")) {
-            throw new IllegalArgumentException("name: " + name);
-        }
-        if (actions != null && actions.length() > 0) {
-            throw new IllegalArgumentException("actions: " + actions);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/LocalVariable.java b/ojluni/src/main/java/com/sun/jdi/LocalVariable.java
deleted file mode 100755
index fd0b9e4..0000000
--- a/ojluni/src/main/java/com/sun/jdi/LocalVariable.java
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package com.sun.jdi;
-
-/**
- * A local variable in the target VM. Each variable declared within a
- * {@link Method} has its own LocalVariable object. Variables of the same
- * name declared in different scopes have different LocalVariable objects.
- * LocalVariables can be used alone to retrieve static information
- * about their declaration, or can be used in conjunction with a
- * {@link StackFrame} to set and get values.
- *
- * @see StackFrame
- * @see Method
- *
- * @author Robert Field
- * @author Gordon Hirsch
- * @author James McIlree
- * @since  1.3
- */
-
-public interface LocalVariable extends Mirror, Comparable<LocalVariable> {
-
-    /**
-     * Gets the name of the local variable.
-     *
-     * @return a string containing the name.
-     */
-    String name();
-
-    /**
-     * Returns a text representation of the type
-     * of this variable.
-     * Where the type is the type specified in the declaration
-     * of this local variable.
-     * <P>
-     * This type name is always available even if
-     * the type has not yet been created or loaded.
-     *
-     * @return a String representing the
-     * type of this local variable.
-
-     */
-    String typeName();
-
-    /**
-     * Returns the type of this variable.
-     * Where the type is the type specified in the declaration
-     * of this local variable.
-     * <P>
-     * Note: if the type of this variable is a reference type (class,
-     * interface, or array) and it has not been created or loaded
-     * by the class loader of the enclosing class,
-     * then ClassNotLoadedException will be thrown.
-     * Also, a reference type may have been loaded but not yet prepared,
-     * in which case the type will be returned
-     * but attempts to perform some operations on the returned type
-     * (e.g. {@link ReferenceType#fields() fields()}) will throw
-     * a {@link ClassNotPreparedException}.
-     * Use {@link ReferenceType#isPrepared()} to determine if
-     * a reference type is prepared.
-     *
-     * @see Type
-     * @see Field#type() Field.type() - for usage examples
-     * @return the {@link Type} of this local variable.
-     * @throws ClassNotLoadedException if the type has not yet been loaded
-     * through the appropriate class loader.
-     */
-    Type type() throws ClassNotLoadedException;
-
-    /**
-     * Gets the JNI signature of the local variable.
-     *
-     * @see <a href="doc-files/signature.html">Type Signatures</a>
-     * @return a string containing the signature.
-     */
-    String signature();
-
-    /**
-     * Gets the generic signature for this variable if there is one.
-     * Generic signatures are described in the
-     * <cite>The Java&trade; Virtual Machine Specification</cite>.
-     *
-     * @return a string containing the generic signature, or <code>null</code>
-     * if there is no generic signature.
-     *
-     * @since 1.5
-     */
-    String genericSignature();
-
-    /**
-     * Determines whether this variable can be accessed from the given
-     * {@link StackFrame}.
-     *
-     * See {@link StackFrame#visibleVariables} for a complete description
-     * variable visibility in this interface.
-     *
-     * @param frame the StackFrame querying visibility
-     * @return <code>true</code> if this variable is visible;
-     * <code>false</code> otherwise.
-     * @throws IllegalArgumentException if the stack frame's method
-     * does not match this variable's method.
-     */
-    boolean isVisible(StackFrame frame);
-
-    /**
-     * Determines if this variable is an argument to its method.
-     *
-     * @return <code>true</code> if this variable is an argument;
-     * <code>false</code> otherwise.
-     */
-    boolean isArgument();
-
-    /**
-     * Compares the specified Object with this LocalVariable for equality.
-     *
-     * @return  true if the Object is a LocalVariable, if both LocalVariables
-     * are contained in the same method (as determined by
-     * {@link Method#equals}), and if both LocalVariables mirror
-     * the same declaration within that method
-     */
-    boolean equals(Object obj);
-
-    /**
-     * Returns the hash code value for this LocalVariable.
-     *
-     * @return the integer hash code
-     */
-    int hashCode();
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/Locatable.java b/ojluni/src/main/java/com/sun/jdi/Locatable.java
deleted file mode 100755
index a00badf..0000000
--- a/ojluni/src/main/java/com/sun/jdi/Locatable.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (c) 1998, 2001, 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.jdi;
-
-/**
- * A mirror that has a {@link Location}.
- *
- * @author Robert Field
- * @author Gordon Hirsch
- * @author James McIlree
- * @since  1.3
- */
-public interface Locatable {
-    /**
-     * Returns the {@link Location} of this mirror, if there
-     * is executable code associated with it. Note that both
-     * Java<SUP><FONT SIZE="-2">TM</FONT></SUP> programming
-     * language methods and native methods have executable code.
-     * Returns null for abstract methods, since abstract methods
-     * have no executable code.
-     *
-     * @return the {@link Location} of this mirror, or null if
-     * there is no executable code associated with it.
-     */
-    Location location();
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/Location.java b/ojluni/src/main/java/com/sun/jdi/Location.java
deleted file mode 100755
index a244728..0000000
--- a/ojluni/src/main/java/com/sun/jdi/Location.java
+++ /dev/null
@@ -1,261 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package com.sun.jdi;
-
-import java.util.List;
-
-/**
- * A point within the executing code of the target VM.
- * Locations are used to identify the current position of
- * a suspended thread (analogous to an instruction pointer or
- * program counter register in native programs). They are also used
- * to identify the position at which to set a breakpoint.
- * <p>
- * The availability of a line number for a location will
- * depend on the level of debugging information available from the
- * target VM.
- * <p>
- * Several mirror interfaces have locations. Each such mirror
- * extends a {@link Locatable} interface.
- * <p>
- * <a name="strata"><b>Strata</b></a>
- * <p>
- * The source information for a Location is dependent on the
- * <i>stratum</i> which is used. A stratum is a source code
- * level within a sequence of translations.  For example,
- * say the baz program is written in the programming language
- * "Foo" then translated to the language "Bar" and finally
- * translated into the Java programming language.  The
- * Java programming language stratum is named
- * <code>"Java"</code>, let's say the other strata are named
- * "Foo" and "Bar".  A given location (as viewed by the
- * {@link #sourceName()} and {@link #lineNumber()} methods)
- * might be at line 14 of "baz.foo" in the <code>"Foo"</code>
- * stratum, line 23 of "baz.bar" in the <code>"Bar"</code>
- * stratum and line 71 of the <code>"Java"</code> stratum.
- * Note that while the Java programming language may have
- * only one source file for a reference type, this restriction
- * does not apply to other strata - thus each Location should
- * be consulted to determine its source path.
- * Queries which do not specify a stratum
- * ({@link #sourceName()}, {@link #sourcePath()} and
- * {@link #lineNumber()}) use the VM's default stratum
- * ({@link VirtualMachine#getDefaultStratum()}).
- * If the specified stratum (whether explicitly specified
- * by a method parameter or implicitly as the VM's default)
- * is <code>null</code> or is not available in the declaring
- * type, the declaring type's default stratum is used
- * ({@link #declaringType()}.{@link ReferenceType#defaultStratum()
- * defaultStratum()}).  Note that in the normal case, of code
- * that originates as Java programming language source, there
- * will be only one stratum (<code>"Java"</code>) and it will be
- * returned as the default.  To determine the available strata
- * use {@link ReferenceType#availableStrata()}.
- *
- * @see com.sun.jdi.request.EventRequestManager
- * @see StackFrame
- * @see com.sun.jdi.event.BreakpointEvent
- * @see com.sun.jdi.event.ExceptionEvent
- * @see Locatable
- *
- * @author Robert Field
- * @author Gordon Hirsch
- * @author James McIlree
- * @since 1.3
- */
-public interface Location extends Mirror, Comparable<Location> {
-
-    /**
-     * Gets the type to which this Location belongs. Normally
-     * the declaring type is a {@link ClassType}, but executable
-     * locations also may exist within the static initializer of an
-     * {@link InterfaceType}.
-     *
-     * @return the {@link ReferenceType} containing this Location.
-     */
-    ReferenceType declaringType();
-
-    /**
-     * Gets the method containing this Location.
-     *
-     * @return the location's {@link Method}.
-     */
-    Method method();
-
-    /**
-     * Gets the code position within this location's method.
-     *
-     * @return the long representing the position within the method
-     * or -1 if location is within a native method.
-     */
-    long codeIndex();
-
-    /**
-     * Gets an identifing name for the source corresponding to
-     * this location.
-     * <P>
-     * This method is equivalent to
-     * <code>sourceName(vm.getDefaultStratum())</code> -
-     * see {@link #sourceName(String)}
-     * for more information.
-     *
-     * @return a string specifying the source
-     * @throws AbsentInformationException if the source name is not
-     * known
-     */
-    String sourceName() throws AbsentInformationException;
-
-
-    /**
-     * Gets an identifing name for the source corresponding to
-     * this location. Interpretation of this string is the
-     * responsibility of the source repository mechanism.
-     * <P>
-     * Returned name is for the specified <i>stratum</i>
-     * (see the {@link Location class comment} for a
-     * description of strata).
-     * <P>
-     * The returned string is the unqualified name of the source
-     * file for this Location.  For example,
-     * <CODE>java.lang.Thread</CODE> would return
-     * <CODE>"Thread.java"</CODE>.
-     *
-     * @param stratum The stratum to retrieve information from
-     * or <code>null</code> for the declaring type's
-     * default stratum.
-     *
-     * @return a string specifying the source
-     *
-     * @throws AbsentInformationException if the source name is not
-     * known
-     *
-     * @since 1.4
-     */
-    String sourceName(String stratum)
-                        throws AbsentInformationException;
-
-    /**
-     * Gets the path to the source corresponding to this
-     * location.
-     * <P>
-     * This method is equivalent to
-     * <code>sourcePath(vm.getDefaultStratum())</code> -
-     * see {@link #sourcePath(String)}
-     * for more information.
-     *
-     * @return a string specifying the source
-     *
-     * @throws AbsentInformationException if the source name is not
-     * known
-     */
-    String sourcePath() throws AbsentInformationException;
-
-
-    /**
-     * Gets the path to the source corresponding to this
-     * location. Interpretation of this string is the
-     * responsibility of the source repository mechanism.
-     * <P>
-     * Returned path is for the specified <i>stratum</i>
-     * (see the {@link Location class comment} for a
-     * description of strata).
-     * <P>
-     * In the reference implementation, for strata which
-     * do not explicitly specify source path (the Java
-     * programming language stratum never does), the returned
-     * string is the package name of {@link #declaringType()}
-     * converted to a platform dependent path followed by the
-     * unqualified name of the source file for this Location
-     * ({@link #sourceName sourceName(stratum)}).
-     * For example, on a
-     * Windows platform, <CODE>java.lang.Thread</CODE>
-     * would return
-     * <CODE>"java\lang\Thread.java"</CODE>.
-     *
-     * @param stratum The stratum to retrieve information from
-     * or <code>null</code> for the declaring type's
-     * default stratum.
-     *
-     * @return a string specifying the source
-     *
-     * @throws AbsentInformationException if the source name is not
-     * known
-     *
-     * @since 1.4
-     */
-    String sourcePath(String stratum)
-                         throws AbsentInformationException;
-
-    /**
-     * Gets the line number of this Location.
-     * <P>
-     * This method is equivalent to
-     * <code>lineNumber(vm.getDefaultStratum())</code> -
-     * see {@link #lineNumber(String)}
-     * for more information.
-     *
-     * @return an int specifying the line in the source, returns
-     * -1 if the information is not available; specifically, always
-     * returns -1 for native methods.
-     */
-    int lineNumber();
-
-    /**
-     * The line number of this Location.  The line number is
-     * relative to the source specified by
-     * {@link #sourceName(String) sourceName(stratum)}.
-     * <P>
-     * Returned line number is for the specified <i>stratum</i>
-     * (see the {@link Location class comment} for a
-     * description of strata).
-     *
-     * @param stratum The stratum to retrieve information from
-     * or <code>null</code> for the declaring type's
-     * default stratum.
-     *
-     * @return an int specifying the line in the source, returns
-     * -1 if the information is not available; specifically, always
-     * returns -1 for native methods.
-     *
-     * @since 1.4
-     */
-    int lineNumber(String stratum);
-
-    /**
-     * Compares the specified Object with this Location for equality.
-     *
-     * @return true if the Object is a Location and if it refers to
-     * the same point in the same VM as this Location.
-     */
-    boolean equals(Object obj);
-
-    /**
-     * Returns the hash code value for this Location.
-     *
-     * @return the integer hash code
-     */
-    int hashCode();
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/LongType.java b/ojluni/src/main/java/com/sun/jdi/LongType.java
deleted file mode 100755
index b27c5d3..0000000
--- a/ojluni/src/main/java/com/sun/jdi/LongType.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (c) 1998, 1999, 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.jdi;
-
-/**
- * The type of all primitive <code>long</code> values
- * accessed in the target VM. Calls to {@link Value#type} will return an
- * implementor of this interface.
- *
- * @see LongValue
- *
- * @author James McIlree
- * @since  1.3
- */
-public interface LongType extends PrimitiveType
-{
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/LongValue.java b/ojluni/src/main/java/com/sun/jdi/LongValue.java
deleted file mode 100755
index 1dfd41f..0000000
--- a/ojluni/src/main/java/com/sun/jdi/LongValue.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package com.sun.jdi;
-
-/**
- * Provides access to a primitive <code>long</code> value in
- * the target VM.
- *
- * @author Robert Field
- * @author Gordon Hirsch
- * @author James McIlree
- * @since  1.3
- */
-public interface LongValue extends PrimitiveValue, Comparable<LongValue>
-{
-    /**
-     * Returns this LongValue as a long.
-     *
-     * @return the <code>long</code> mirrored by this object.
-     */
-    long value();
-
-    /**
-     * Compares the specified Object with this LongValue for equality.
-     *
-     * @return true if the Object is a LongValue and if applying "=="
-     * to the two mirrored primitives would evaluate to true; false
-     * otherwise.
-     */
-    boolean equals(Object obj);
-
-    /**
-     * Returns the hash code value for this LongValue.
-     *
-     * @return the integer hash code
-     */
-    int hashCode();
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/Method.java b/ojluni/src/main/java/com/sun/jdi/Method.java
deleted file mode 100755
index ea1044f..0000000
--- a/ojluni/src/main/java/com/sun/jdi/Method.java
+++ /dev/null
@@ -1,429 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package com.sun.jdi;
-
-import java.util.List;
-
-/**
- * A static or instance method in the target VM. See {@link TypeComponent}
- * for general information about Field and Method mirrors.
- *
- * @see ObjectReference
- * @see ReferenceType
- *
- * @author Robert Field
- * @author Gordon Hirsch
- * @author James McIlree
- * @since  1.3
- */
-public interface Method extends TypeComponent, Locatable, Comparable<Method> {
-
-    /**
-     * Returns a text representation of the return type,
-     * as specified in the declaration of this method.
-     * <P>
-     * This type name is always available even if
-     * the type has not yet been created or loaded.
-     *
-     * @return a String containing the return type name.
-     */
-    String returnTypeName();
-
-    /**
-     * Returns the return type,
-     * as specified in the declaration of this method.
-     * <P>
-     * Note: if the return type of this method is a reference type (class,
-     * interface, or array) and it has not been created or loaded
-     * by the declaring type's class loader - that is,
-     * {@link TypeComponent#declaringType <CODE>declaringType()</CODE>}
-     * <CODE>.classLoader()</CODE>,
-     * then ClassNotLoadedException will be thrown.
-     * Also, a reference type may have been loaded but not yet prepared,
-     * in which case the type will be returned
-     * but attempts to perform some operations on the returned type
-     * (e.g. {@link ReferenceType#fields() fields()}) will throw
-     * a {@link ClassNotPreparedException}.
-     * Use {@link ReferenceType#isPrepared()} to determine if
-     * a reference type is prepared.
-     *
-     * @see Type
-     * @see Field#type() Field.type() - for usage examples
-     * @return the return {@link Type} of this method.
-     * @throws ClassNotLoadedException if the type has not yet been
-     * created or loaded
-     * through the appropriate class loader.
-     */
-    Type returnType() throws ClassNotLoadedException;
-
-    /**
-     * Returns a list containing a text representation of the type
-     * of each formal parameter of this method.
-     * <P>
-     * This list is always available even if
-     * the types have not yet been created or loaded.
-     *
-     * @return a {@link java.util.List List} of {@link String},
-     * one List element for each parameter of this method.
-     * Each element represents the type of a formal parameter
-     * as specified at compile-time.
-     * If the formal parameter was declared with an ellipsis, then
-     * it is represented as an array of the type before the ellipsis.
-     *
-     */
-    List<String> argumentTypeNames();
-
-    /**
-     * Returns a list containing the type
-     * of each formal parameter of this method.
-     * <P>
-     * Note: if there is any parameter whose type
-     * is a reference type (class, interface, or array)
-     * and it has not been created or loaded
-     * by the declaring type's class loader - that is,
-     * {@link TypeComponent#declaringType <CODE>declaringType()</CODE>}
-     * <CODE>.classLoader()</CODE>,
-     * then ClassNotLoadedException will be thrown.
-     * Also, a reference type may have been loaded but not yet prepared,
-     * in which case the list will be returned
-     * but attempts to perform some operations on the type
-     * (e.g. {@link ReferenceType#fields() fields()}) will throw
-     * a {@link ClassNotPreparedException}.
-     * Use {@link ReferenceType#isPrepared()} to determine if
-     * a reference type is prepared.
-     *
-     * @see Type
-     * @return return a {@link java.util.List List} of {@link Type},
-     * one List element for each parameter of this method.
-     * Each element represents the type of a formal parameter
-     * as specified at compile-time.
-     * If the formal parameter was declared with an ellipsis, then
-     * it is represented as an array of the type before the ellipsis.
-     *
-     * @throws ClassNotLoadedException if the type has not yet been loaded
-     * through the appropriate class loader.
-     */
-    List<Type> argumentTypes() throws ClassNotLoadedException;
-
-    /**
-     * Determine if this method is abstract.
-     *
-     * @return <code>true</code> if the method is declared abstract;
-     * false otherwise.
-     */
-    boolean isAbstract();
-
-    /**
-     * Determine if this method is synchronized.
-     *
-     * @return <code>true</code> if the method is declared synchronized;
-     * false otherwise.
-     */
-    boolean isSynchronized();
-
-    /**
-     * Determine if this method is native.
-     *
-     * @return <code>true</code> if the method is declared native;
-     * false otherwise.
-     */
-    boolean isNative();
-
-    /**
-     * Determine if this method accepts a variable number of arguments.
-     *
-     * @return <code>true</code> if the method accepts a variable number
-     * of arguments, false otherwise.
-     *
-     * @since 1.5
-     */
-    boolean isVarArgs();
-
-    /**
-     * Determine if this method is a bridge method. Bridge
-     * methods are defined in
-     * <cite>The Java&trade; Language Specification</cite>.
-     *
-     * @return <code>true</code> if the method is a bridge method,
-     * false otherwise.
-     *
-     * @since 1.5
-     */
-    boolean isBridge();
-
-    /**
-     * Determine if this method is a constructor.
-     *
-     * @return <code>true</code> if the method is a constructor;
-     * false otherwise.
-     */
-    boolean isConstructor();
-
-    /**
-     * Determine if this method is a static initializer.
-     *
-     * @return <code>true</code> if the method is a static initializer;
-     * false otherwise.
-     */
-    boolean isStaticInitializer();
-
-    /**
-     * Determine if this method is obsolete.
-     *
-     * @return <code>true</code> if this method has been made obsolete by a
-     * {@link VirtualMachine#redefineClasses} operation.
-     *
-     * @since 1.4
-     */
-    boolean isObsolete();
-
-    /**
-     * Returns a list containing a {@link Location} object for
-     * each executable source line in this method.
-     * <P>
-     * This method is equivalent to
-     * <code>allLineLocations(vm.getDefaultStratum(),null)</code> -
-     * see {@link #allLineLocations(String,String)}
-     * for more information.
-     *
-     * @return a List of all source line {@link Location} objects.
-     *
-     * @throws AbsentInformationException if there is no line
-     * number information for this (non-native, non-abstract)
-     * method.
-     */
-    List<Location> allLineLocations() throws AbsentInformationException;
-
-    /**
-     * Returns a list containing a {@link Location} object for
-     * each executable source line in this method.
-     * <P>
-     * Each location maps a source line to a range of code
-     * indices.
-     * The beginning of the range can be determined through
-     * {@link Location#codeIndex}.
-     * The returned list is ordered by code index
-     * (from low to high).
-     * <P>
-     * The returned list may contain multiple locations for a
-     * particular line number, if the compiler and/or VM has
-     * mapped that line to two or more disjoint code index ranges.
-     * <P>
-     * If the method is native or abstract, an empty list is
-     * returned.
-     * <P>
-     * Returned list is for the specified <i>stratum</i>
-     * (see {@link Location} for a description of strata).
-     *
-     * @param stratum The stratum to retrieve information from
-     * or <code>null</code> for the {@link ReferenceType#defaultStratum()}
-     *
-     * @param sourceName Return locations only within this
-     * source file or <code>null</code> to return locations.
-     *
-     * @return a List of all source line {@link Location} objects.
-     *
-     * @throws AbsentInformationException if there is no line
-     * number information for this (non-native, non-abstract)
-     * method.  Or if <i>sourceName</i> is non-<code>null</code>
-     * and source name information is not present.
-     *
-     * @since 1.4
-     */
-    List<Location> allLineLocations(String stratum, String sourceName)
-        throws AbsentInformationException;
-
-    /**
-     * Returns a List containing all {@link Location} objects
-     * that map to the given line number.
-     * <P>
-     * This method is equivalent to
-     * <code>locationsOfLine(vm.getDefaultStratum(), null,
-     * lineNumber)</code> -
-     * see {@link
-     * #locationsOfLine(java.lang.String,java.lang.String,int)}
-     * for more information.
-     *
-     * @param lineNumber the line number
-     *
-     * @return a List of {@link Location} objects that map to
-     * the given line number.
-     *
-     * @throws AbsentInformationException if there is no line
-     * number information for this method.
-     */
-    List<Location> locationsOfLine(int lineNumber) throws AbsentInformationException;
-
-    /**
-     * Returns a List containing all {@link Location} objects
-     * that map to the given line number and source name.
-     * <P>
-     * Returns a list containing each {@link Location} that maps
-     * to the given line. The returned list will contain a
-     * location for each disjoint range of code indices that have
-     * been assigned to the given line by the compiler and/or
-     * VM. Each returned location corresponds to the beginning of
-     * this range.  An empty list will be returned if there is no
-     * executable code at the specified line number; specifically,
-     * native and abstract methods will always return an empty
-     * list.
-     * <p>
-     * Returned list is for the specified <i>stratum</i>
-     * (see {@link Location} for a description of strata).
-     *
-     * @param stratum the stratum to use for comparing line number
-     *                and source name, or null to use the default
-     *                stratum
-     * @param sourceName the source name containing the
-     *                   line number, or null to match all
-     *                   source names
-     * @param lineNumber the line number
-     *
-     * @return a List of {@link Location} objects that map to
-     * the given line number.
-     *
-     * @throws AbsentInformationException if there is no line
-     * number information for this method.
-     * Or if <i>sourceName</i> is non-<code>null</code>
-     * and source name information is not present.
-     *
-     * @since 1.4
-     */
-    List<Location> locationsOfLine(String stratum, String sourceName,
-                                   int lineNumber)
-        throws AbsentInformationException;
-
-    /**
-     * Returns a {@link Location} for the given code index.
-     *
-     * @return the {@link Location} corresponding to the
-     * given code index or null if the specified code index is not a
-     * valid code index for this method (native and abstract methods
-     * will always return null).
-     */
-    Location locationOfCodeIndex(long codeIndex);
-
-    /**
-     * Returns a list containing each {@link LocalVariable} declared
-     * in this method. The list includes any variable declared in any
-     * scope within the method. It may contain multiple variables of the
-     * same name declared within disjoint scopes. Arguments are considered
-     * local variables and will be present in the returned list.
-     *
-     * If local variable information is not available, values of
-     * actual arguments to method invocations can be obtained
-     * by using the method {@link StackFrame#getArgumentValues()}
-     *
-     * @return the list of {@link LocalVariable} objects which mirror
-     * local variables declared in this method in the target VM.
-     * If there are no local variables, a zero-length list is returned.
-     * @throws AbsentInformationException if there is no variable
-     * information for this method.
-     * Generally, local variable information is not available for
-     * native or abstract methods (that is, their argument name
-     * information is not available), thus they will throw this exception.
-     */
-    List<LocalVariable> variables() throws AbsentInformationException;
-
-    /**
-     * Returns a list containing each {@link LocalVariable} of a
-     * given name in this method.
-     * Multiple variables can be returned
-     * if the same variable name is used in disjoint
-     * scopes within the method.
-     *
-     * @return the list of {@link LocalVariable} objects of the given
-     * name.
-     * If there are no matching local variables, a zero-length list
-     * is returned.
-     * @throws AbsentInformationException if there is no variable
-     * information for this method.
-     * Generally, local variable information is not available for
-     * native or abstract methods (that is, their argument name
-     * information is not available), thus they will throw this exception.
-     */
-    List<LocalVariable> variablesByName(String name)
-        throws AbsentInformationException;
-
-    /**
-     * Returns a list containing each {@link LocalVariable} that is
-     * declared as an argument of this method.
-     *
-     * If local variable information is not available, values of
-     * actual arguments to method invocations can be obtained
-     * by using the method {@link StackFrame#getArgumentValues()}
-     *
-     * @return the list of {@link LocalVariable} arguments.
-     * If there are no arguments, a zero-length list is returned.
-     * @throws AbsentInformationException if there is no variable
-     * information for this method.
-     * Generally, local variable information is not available for
-     * native or abstract methods (that is, their argument name
-     * information is not available), thus they will throw this exception.
-     */
-    List<LocalVariable> arguments() throws AbsentInformationException;
-
-    /**
-     * Returns an array containing the bytecodes for this method.
-     * <P>
-     * Not all target virtual machines support this operation.
-     * Use {@link VirtualMachine#canGetBytecodes()}
-     * to determine if the operation is supported.
-     *
-     * @return the array of bytecodes; abstract and native methods
-     * will return a zero-length array.
-     * @throws java.lang.UnsupportedOperationException if
-     * the target virtual machine does not support
-     * the retrieval of bytecodes.
-     */
-    byte[] bytecodes();
-
-    /**
-     * Returns the {@link Location} of this method, if there
-     * is executable code associated with it.
-     *
-     * @return the {@link Location} of this mirror, or null if
-     * this is an abstract method; native methods will return a
-     * Location object whose codeIndex is -1.
-     */
-    Location location();
-
-    /**
-     * Compares the specified Object with this method for equality.
-     *
-     * @return true if the Object is a method and if both
-     * mirror the same method (declared in the same class or interface, in
-     * the same VM).
-     */
-    boolean equals(Object obj);
-
-    /**
-     * Returns the hash code value for this Method.
-     *
-     * @return the integer hash code
-     */
-    int hashCode();
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/Mirror.java b/ojluni/src/main/java/com/sun/jdi/Mirror.java
deleted file mode 100755
index d821c4f..0000000
--- a/ojluni/src/main/java/com/sun/jdi/Mirror.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright (c) 1998, 2001, 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.jdi;
-
-/**
- * A proxy used by a debugger to examine or manipulate some entity
- * in another virtual machine. Mirror is the root of the
- * interface hierarchy for this package. Mirrors can be proxies for objects
- * in the target VM ({@link ObjectReference}), primitive values
- * (for example, {@link IntegerValue}), types (for example,
- * {@link ReferenceType}), dynamic application state (for example,
- * {@link StackFrame}), and even debugger-specific constructs (for example,
- * {@link com.sun.jdi.request.BreakpointRequest}).
- * The {@link VirtualMachine} itself is also
- * considered a mirror, representing the composite state of the
- * target VM.
- * <P>
- * There is no guarantee that a particular entity in the target VM will map
- * to a single instance of Mirror. Implementors are free to decide
- * whether a single mirror will be used for some or all mirrors. Clients
- * of this interface should always use <code>equals</code> to compare
- * two mirrors for equality.
- * <p>
- * Any method on a {@link com.sun.jdi.Mirror} that takes a <code>Mirror</code> as an
- * parameter directly or indirectly (e.g., as a element in a <code>List</code>) will
- * throw {@link com.sun.jdi.VMMismatchException} if the mirrors are from different
- * virtual machines.
- *
- * @see VirtualMachine
- *
- * @author Robert Field
- * @author Gordon Hirsch
- * @author James McIlree
- * @since  1.3
- */
-public interface Mirror {
-
-    /**
-     * Gets the VirtualMachine to which this
-     * Mirror belongs. A Mirror must be associated
-     * with a VirtualMachine to have any meaning.
-     *
-     * @return the {@link VirtualMachine} for which this mirror is a proxy.
-     */
-    VirtualMachine virtualMachine();
-
-    /**
-     * Returns a String describing this mirror
-     *
-     * @return a string describing this mirror.
-     */
-    String toString();
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/MonitorInfo.java b/ojluni/src/main/java/com/sun/jdi/MonitorInfo.java
deleted file mode 100755
index fb6557c..0000000
--- a/ojluni/src/main/java/com/sun/jdi/MonitorInfo.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright (c) 2005, 2006, 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.jdi;
-
-/**
- * Information about a monitor owned by a thread.
- *
- * @author Swamy Venkataramanappa
- * @since  1.6
- */
-
-public interface MonitorInfo extends Mirror {
-
-    /**
-     * Returns the {@link ObjectReference} object for the monitor.
-     * @return the {@link ObjectReference} object for the monitor.
-     * @throws InvalidStackFrameException if the associated stack
-     * frame has become invalid. Once the frame's thread is resumed,
-     * the stack frame is no longer valid.
-     * @see ThreadReference#ownedMonitorsAndFrames
-     * @since 1.6
-     */
-    public ObjectReference monitor();
-
-    /**
-     * Returns the stack depth at which this monitor was
-     * acquired by the owning thread. Returns -1 if the
-     * implementation cannot determine the stack depth
-     * (e.g., for monitors acquired by JNI MonitorEnter).
-     * @return the stack depth at which this monitor was
-     * acquired by the owning thread.
-     * @throws InvalidStackFrameException if the associated stack
-     * frame has become invalid. Once the frame's thread is resumed,
-     * the stack frame is no longer valid.
-     * @see ThreadReference#ownedMonitorsAndFrames
-     */
-    public int stackDepth();
-
-    /**
-     * Returns a {@link ThreadReference} object for the thread that
-     * owns the monitor.
-     * @return a {@link ThreadReference} object for the thread that
-     * owns the monitor.
-     * @throws InvalidStackFrameException if the associated stack
-     * frame has become invalid. Once the frame's thread is resumed,
-     * the stack frame is no longer valid.
-     * @see ThreadReference#frame
-     */
-    ThreadReference thread();
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/NativeMethodException.java b/ojluni/src/main/java/com/sun/jdi/NativeMethodException.java
deleted file mode 100755
index b25f47d..0000000
--- a/ojluni/src/main/java/com/sun/jdi/NativeMethodException.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (c) 1999, 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.jdi;
-
-/**
- * Thrown to indicate an operation cannot be completed because
- * it is not valid for a native method.
- *
- * @author Gordon Hirsch
- * @since  1.3
- */
-public class NativeMethodException extends RuntimeException {
-
-    public NativeMethodException() {
-        super();
-    }
-
-    public NativeMethodException(String message) {
-        super(message);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/ObjectCollectedException.java b/ojluni/src/main/java/com/sun/jdi/ObjectCollectedException.java
deleted file mode 100755
index e31a87c..0000000
--- a/ojluni/src/main/java/com/sun/jdi/ObjectCollectedException.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (c) 1998, 2000, 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.jdi;
-
-/**
- * Thrown to indicate that the requested operation cannot be
- * completed because the specified object has been garbage collected.
- *
- * @author Gordon Hirsch
- * @since  1.3
- */
-public class ObjectCollectedException extends RuntimeException {
-    public ObjectCollectedException() {
-        super();
-    }
-
-    public ObjectCollectedException(String s) {
-        super(s);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/ObjectReference.java b/ojluni/src/main/java/com/sun/jdi/ObjectReference.java
deleted file mode 100755
index a184f25..0000000
--- a/ojluni/src/main/java/com/sun/jdi/ObjectReference.java
+++ /dev/null
@@ -1,444 +0,0 @@
-/*
- * Copyright (c) 1998, 2006, 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.jdi;
-
-import java.util.List;
-import java.util.Map;
-
-/**
- * An object that currently exists in the target VM. An ObjectReference
- * mirrors only the object itself and is not specific to any
- * {@link Field} or {@link LocalVariable} to which it is currently
- * assigned. An ObjectReference can
- * have 0 or more references from field(s) and/or variable(s).
- * <p>
- * Any method on <code>ObjectReference</code> which directly or
- * indirectly takes <code>ObjectReference</code> as an parameter may throw
- * {@link com.sun.jdi.VMDisconnectedException} if the target VM is
- * disconnected and the {@link com.sun.jdi.event.VMDisconnectEvent} has been or is
- * available to be read from the {@link com.sun.jdi.event.EventQueue}.
- * <p>
- * Any method on <code>ObjectReference</code> which directly or
- * indirectly takes <code>ObjectReference</code> as an parameter may throw
- * {@link com.sun.jdi.VMOutOfMemoryException} if the target VM has run out of memory.
- * <p>
- * Any method on <code>ObjectReference</code> or which directly or indirectly takes
- * <code>ObjectReference</code> as parameter may throw
- * {@link com.sun.jdi.ObjectCollectedException} if the mirrored object has been
- * garbage collected.
- *
- * @author Robert Field
- * @author Gordon Hirsch
- * @author James McIlree
- * @since  1.3
- */
-public interface ObjectReference extends Value
-{
-    /**
-     * Gets the {@link ReferenceType} that mirrors the type
-     * of this object. The type may be a subclass or implementor of the
-     * declared type of any field or variable which currently holds it.
-     * For example, right after the following statement.
-     * <p>
-     * <code>Object obj = new String("Hello, world!");</code>
-     * <p>
-     * The ReferenceType of obj will mirror java.lang.String and not
-     * java.lang.Object.
-     * <p>
-     * The type of an object never changes, so this method will
-     * always return the same ReferenceType over the lifetime of the
-     * mirrored object.
-     * <p>
-     * The returned ReferenceType will be a {@link ClassType} or
-     * {@link ArrayType} and never an {@link InterfaceType}.
-     *
-     * @return the {@link ReferenceType} for this object.
-     */
-    ReferenceType referenceType();
-
-    /**
-     * Gets the value of a given instance or static field in this object.
-     * The Field must be valid for this ObjectReference;
-     * that is, it must be from
-     * the mirrored object's class or a superclass of that class.
-     *
-     * @param sig the field containing the requested value
-     * @return the {@link Value} of the instance field.
-     * @throws java.lang.IllegalArgumentException if the field is not valid for
-     * this object's class.
-     */
-    Value getValue(Field sig);
-
-    /**
-     * Gets the value of multiple instance and/or static fields in this object.
-     * The Fields must be valid for this ObjectReference;
-     * that is, they must be from
-     * the mirrored object's class or a superclass of that class.
-     *
-     * @param fields a list of {@link Field} objects containing the
-     * requested values.
-     * @return a Map of the requested {@link Field} objects with
-     * their {@link Value}.
-     * @throws java.lang.IllegalArgumentException if any field is not valid for
-     * this object's class.
-     */
-    Map<Field,Value> getValues(List<? extends Field> fields);
-
-    /**
-     * Sets the value of a given instance or static field in this object.
-     * The {@link Field} must be valid for this ObjectReference; that is,
-     * it must be from the mirrored object's class or a superclass of that class.
-     * If static, the field must not be final.
-     * <p>
-     * Object values must be assignment compatible with the field type
-     * (This implies that the field type must be loaded through the
-     * enclosing class's class loader). Primitive values must be
-     * either assignment compatible with the field type or must be
-     * convertible to the field type without loss of information.
-     * See section 5.2 of
-     * <cite>The Java&trade; Language Specification</cite>
-     * for more information on assignment
-     * compatibility.
-     *
-     * @param field the field containing the requested value
-     * @param value the new value to assign
-     * @throws java.lang.IllegalArgumentException if the field is not valid for
-     * this object's class.
-     * @throws InvalidTypeException if the value's type does not match
-     * the field's type.
-     * @throws ClassNotLoadedException if 'value' is not null, and the field
-     * type has not yet been loaded through the appropriate class loader.
-     * @throws VMCannotBeModifiedException if the VirtualMachine is read-only - see {@link VirtualMachine#canBeModified()}.
-     */
-    void setValue(Field field, Value value)
-        throws InvalidTypeException, ClassNotLoadedException;
-
-    /** Perform method invocation with only the invoking thread resumed */
-    static final int INVOKE_SINGLE_THREADED = 0x1;
-    /** Perform non-virtual method invocation */
-    static final int INVOKE_NONVIRTUAL      = 0x2;
-
-    /**
-     * Invokes the specified {@link Method} on this object in the
-     * target VM. The
-     * specified method can be defined in this object's class,
-     * in a superclass of this object's class, or in an interface
-     * implemented by this object. The method may be a static method
-     * or an instance method, but not a static initializer or constructor.
-     * Use {@link ClassType#newInstance} to create a new object and
-     * run its constructor.
-     * <p>
-     * The method invocation will occur in the specified thread.
-     * Method invocation can occur only if the specified thread
-     * has been suspended by an event which occurred in that thread.
-     * Method invocation is not supported
-     * when the target VM has been suspended through
-     * {@link VirtualMachine#suspend} or when the specified thread
-     * is suspended through {@link ThreadReference#suspend}.
-     * <p>
-     * The specified method is invoked with the arguments in the specified
-     * argument list.  The method invocation is synchronous; this method
-     * does not return until the invoked method returns in the target VM.
-     * If the invoked method throws an exception, this method
-     * will throw an {@link InvocationException} which contains
-     * a mirror to the exception object thrown.
-     * <p>
-     * Object arguments must be assignment compatible with the argument type
-     * (This implies that the argument type must be loaded through the
-     * enclosing class's class loader). Primitive arguments must be
-     * either assignment compatible with the argument type or must be
-     * convertible to the argument type without loss of information.
-     * If the method being called accepts a variable number of arguments,
-     * then the last argument type is an array of some component type.
-     * The argument in the matching position can be omitted, or can be null,
-     * an array of the same component type, or an argument of the
-     * component type followed by any number of other arguments of the same
-     * type. If the argument is omitted, then a 0 length array of the
-     * component type is passed.  The component type can be a primitive type.
-     * Autoboxing is not supported.
-     *
-     * See section 5.2 of
-     * <cite>The Java&trade; Language Specification</cite>
-     * for more information on assignment compatibility.
-     * <p>
-     * By default, the method is invoked using dynamic lookup as
-     * documented in section 15.12.4.4 of
-     * <cite>The Java&trade; Language Specification</cite>
-     * in particular, overriding based on the runtime type of the object
-     * mirrored by this {@link ObjectReference} will occur. This
-     * behavior can be changed by specifying the
-     * {@link #INVOKE_NONVIRTUAL} bit flag in the <code>options</code>
-     * argument. If this flag is set, the specified method is invoked
-     * whether or not it is overridden for this object's runtime type.
-     * The method, in this case, must not belong to an interface and
-     * must not be abstract. This option is useful for performing method
-     * invocations like those done with the <code>super</code> keyword in
-     * the Java programming language.
-     * <p>
-     * By default, all threads in the target VM are resumed while
-     * the method is being invoked if they were previously
-     * suspended by an event or by {@link VirtualMachine#suspend} or
-     * {@link ThreadReference#suspend}. This is done to prevent the deadlocks
-     * that will occur if any of the threads own monitors
-     * that will be needed by the invoked method.
-     * Note, however, that this implicit resume acts exactly like
-     * {@link ThreadReference#resume}, so if the thread's suspend
-     * count is greater than 1, it will remain in a suspended state
-     * during the invocation and thus a deadlock could still occur.
-     * By default, when the invocation completes,
-     * all threads in the target VM are suspended, regardless their state
-     * before the invocation.
-     * It is possible that
-     * breakpoints or other events might occur during the invocation.
-     * This can cause deadlocks as described above. It can also cause a deadlock
-     * if invokeMethod is called from the client's event handler thread.  In this
-     * case, this thread will be waiting for the invokeMethod to complete and
-     * won't read the EventSet that comes in for the new event.  If this
-     * new EventSet is SUSPEND_ALL, then a deadlock will occur because no
-     * one will resume the EventSet.  To avoid this, all EventRequests should
-     * be disabled before doing the invokeMethod, or the invokeMethod should
-     * not be done from the client's event handler thread.
-     * <p>
-     * The resumption of other threads during the invocation can be prevented
-     * by specifying the {@link #INVOKE_SINGLE_THREADED}
-     * bit flag in the <code>options</code> argument; however,
-     * there is no protection against or recovery from the deadlocks
-     * described above, so this option should be used with great caution.
-     * Only the specified thread will be resumed (as described for all
-     * threads above). Upon completion of a single threaded invoke, the invoking thread
-     * will be suspended once again. Note that any threads started during
-     * the single threaded invocation will not be suspended when the
-     * invocation completes.
-     * <p>
-     * If the target VM is disconnected during the invoke (for example, through
-     * {@link VirtualMachine#dispose}) the method invocation continues.
-     *
-     * @param thread the thread in which to invoke.
-     * @param method the {@link Method} to invoke.
-     * @param arguments the list of {@link Value} arguments bound to the
-     * invoked method. Values from the list are assigned to arguments
-     * in the order they appear in the method signature.
-     * @param options the integer bit flag options.
-     * @return a {@link Value} mirror of the invoked method's return value.
-     * @throws java.lang.IllegalArgumentException if the method is not
-     * a member of this object's class, if the size of the argument list
-     * does not match the number of declared arguemnts for the method,
-     * if the method is a constructor or static intializer, or
-     * if {@link #INVOKE_NONVIRTUAL} is specified and the method is
-     * either abstract or an interface member.
-     * @throws {@link InvalidTypeException} if any argument in the
-     * argument list is not assignable to the corresponding method argument
-     * type.
-     * @throws ClassNotLoadedException if any argument type has not yet been loaded
-     * through the appropriate class loader.
-     * @throws IncompatibleThreadStateException if the specified thread has not
-     * been suspended by an event.
-     * @throws InvocationException if the method invocation resulted in
-     * an exception in the target VM.
-     * @throws InvalidTypeException If the arguments do not meet this requirement --
-     *         Object arguments must be assignment compatible with the argument
-     *         type.  This implies that the argument type must be
-     *         loaded through the enclosing class's class loader.
-     *         Primitive arguments must be either assignment compatible with the
-     *         argument type or must be convertible to the argument type without loss
-     *         of information. See JLS section 5.2 for more information on assignment
-     *         compatibility.
-     * @throws VMCannotBeModifiedException if the VirtualMachine is read-only - see {@link VirtualMachine#canBeModified()}.
-     */
-    Value invokeMethod(ThreadReference thread, Method method,
-                       List<? extends Value> arguments, int options)
-                                   throws InvalidTypeException,
-                                          ClassNotLoadedException,
-                                          IncompatibleThreadStateException,
-                                          InvocationException;
-
-    /**
-     * Prevents garbage collection for this object. By default all
-     * {@link ObjectReference} values returned by JDI may be collected
-     * at any time the target VM is running. A call to this method
-     * guarantees that the object will not be collected.
-     * {@link #enableCollection} can be used to allow collection once
-     * again.
-     * <p>
-     * Calls to this method are counted. Every call to this method
-     * requires a corresponding call to {@link #enableCollection} before
-     * garbage collection is re-enabled.
-     * <p>
-     * Note that while the target VM is suspended, no garbage collection
-     * will occur because all threads are suspended. The typical
-     * examination of variables, fields, and arrays during the suspension
-     * is safe without explicitly disabling garbage collection.
-     * <p>
-     * This method should be used sparingly, as it alters the
-     * pattern of garbage collection in the target VM and,
-     * consequently, may result in application behavior under the
-     * debugger that differs from its non-debugged behavior.
-     * @throws VMCannotBeModifiedException if the VirtualMachine is read-only
-     * -see {@link VirtualMachine#canBeModified()}.
-     */
-    void disableCollection();
-
-    /**
-     * Permits garbage collection for this object. By default all
-     * {@link ObjectReference} values returned by JDI may be collected
-     * at any time the target VM is running. A call to this method
-     * is necessary only if garbage collection was previously disabled
-     * with {@link #disableCollection}.
-     * @throws VMCannotBeModifiedException if the VirtualMachine is read-only
-     * -see {@link VirtualMachine#canBeModified()}.
-     */
-    void enableCollection();
-
-    /**
-     * Determines if this object has been garbage collected in the target
-     * VM.
-     *
-     * @return <code>true</code> if this {@link ObjectReference} has been collected;
-     * <code>false</code> otherwise.
-     * @throws VMCannotBeModifiedException if the VirtualMachine is read-only
-     * -see {@link VirtualMachine#canBeModified()}.
-     */
-    boolean isCollected();
-
-    /**
-     * Returns a unique identifier for this ObjectReference.
-     * It is guaranteed to be unique among all
-     * ObjectReferences from the same VM that have not yet been disposed.
-     * The guarantee applies as long
-     * as this ObjectReference has not yet been disposed.
-     *
-     * @return a long unique ID
-     */
-    long uniqueID();
-
-    /**
-     * Returns a List containing a {@link ThreadReference} for
-     * each thread currently waiting for this object's monitor.
-     * See {@link ThreadReference#currentContendedMonitor} for
-     * information about when a thread is considered to be waiting
-     * for a monitor.
-     * <p>
-     * Not all target VMs support this operation. See
-     * VirtualMachine#canGetMonitorInfo to determine if the
-     * operation is supported.
-     *
-     * @return a List of {@link ThreadReference} objects. The list
-     * has zero length if no threads are waiting for the monitor.
-     * @throws java.lang.UnsupportedOperationException if the
-     * target VM does not support this operation.
-     * @throws IncompatibleThreadStateException if any
-     * waiting thread is not suspended
-     * in the target VM
-     */
-    List<ThreadReference> waitingThreads()
-        throws IncompatibleThreadStateException;
-
-    /**
-     * Returns an {@link ThreadReference} for the thread, if any,
-     * which currently owns this object's monitor.
-     * See {@link ThreadReference#ownedMonitors} for a definition
-     * of ownership.
-     * <p>
-     * Not all target VMs support this operation. See
-     * VirtualMachine#canGetMonitorInfo to determine if the
-     * operation is supported.
-     *
-     * @return the {@link ThreadReference} which currently owns the
-     * monitor, or null if it is unowned.
-     *
-     * @throws java.lang.UnsupportedOperationException if the
-     * target VM does not support this operation.
-     * @throws IncompatibleThreadStateException if the owning thread is
-     * not suspended in the target VM
-     */
-    ThreadReference owningThread() throws IncompatibleThreadStateException;
-
-    /**
-     * Returns the number times this object's monitor has been
-     * entered by the current owning thread.
-     * See {@link ThreadReference#ownedMonitors} for a definition
-     * of ownership.
-     * <p>
-     * Not all target VMs support this operation. See
-     * VirtualMachine#canGetMonitorInfo to determine if the
-     * operation is supported.
-     *
-     * @see #owningThread
-     * @return the integer count of the number of entries.
-     *
-     * @throws java.lang.UnsupportedOperationException if the
-     * target VM does not support this operation.
-     * @throws IncompatibleThreadStateException if the owning thread is
-     * not suspended in the target VM
-     */
-    int entryCount() throws IncompatibleThreadStateException;
-
-    /**
-     * Returns objects that directly reference this object.
-     * Only objects that are reachable for the purposes of garbage collection
-     * are returned.  Note that an object can also be referenced in other ways,
-     * such as from a local variable in a stack frame, or from a JNI global
-     * reference.  Such non-object referrers are not returned by this method.
-     * <p>
-     * Not all target virtual machines support this operation.
-     * Use {@link VirtualMachine#canGetInstanceInfo()}
-     * to determine if the operation is supported.
-     *
-     * @see VirtualMachine#instanceCounts(List)
-     * @see ReferenceType#instances(long)
-
-     * @param maxReferrers  The maximum number of referring objects to return.
-     *                      Must be non-negative.  If zero, all referring
-     *                      objects are returned.
-     * @return a of List of {@link ObjectReference} objects. If there are
-     *  no objects that reference this object, a zero-length list is returned..
-     * @throws java.lang.UnsupportedOperationException if
-     * the target virtual machine does not support this
-     * operation - see
-     * {@link VirtualMachine#canGetInstanceInfo() canGetInstanceInfo()}
-     * @throws java.lang.IllegalArgumentException if maxReferrers is less
-     *         than zero.
-     * @since 1.6
-     */
-    List<ObjectReference> referringObjects(long maxReferrers);
-
-
-    /**
-     * Compares the specified Object with this ObjectReference for equality.
-     *
-     * @return  true if the Object is an ObjectReference, if the
-     * ObjectReferences belong to the same VM, and if applying the
-     * "==" operator on the mirrored objects in that VM evaluates to true.
-     */
-    boolean equals(Object obj);
-
-    /**
-     * Returns the hash code value for this ObjectReference.
-     *
-     * @return the integer hash code
-     */
-    int hashCode();
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/PathSearchingVirtualMachine.java b/ojluni/src/main/java/com/sun/jdi/PathSearchingVirtualMachine.java
deleted file mode 100755
index 8c4aae7..0000000
--- a/ojluni/src/main/java/com/sun/jdi/PathSearchingVirtualMachine.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-package com.sun.jdi;
-
-import java.util.List;
-
-/**
- * A virtual machine which searches for classes through paths
- *
- * @author Gordon Hirsch
- * @since  1.3
- */
-public interface PathSearchingVirtualMachine extends VirtualMachine {
-    /**
-     * Get the class path for this virtual machine.
-     *
-     * @return {@link List} of components of the classpath,
-     * each represented by a {@link String}.
-     */
-    List<String> classPath();
-
-    /**
-     * Get the boot class path for this virtual machine.
-     *
-     * @return {@link List} of components of the boot class path,
-     * each represented by a {@link String}.
-     */
-    List<String> bootClassPath();
-
-    /**
-     * Get the base directory used for path searching. Relative directories
-     * in the class path and boot class path can be resolved through
-     * this directory name.
-     *
-     * @return the base directory.
-     */
-    String baseDirectory();
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/PrimitiveType.java b/ojluni/src/main/java/com/sun/jdi/PrimitiveType.java
deleted file mode 100755
index ba34a50..0000000
--- a/ojluni/src/main/java/com/sun/jdi/PrimitiveType.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (c) 1998, 1999, 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.jdi;
-
-/**
- * The type associated with non-object values in a target VM.
- * Instances of one of the sub-interfaces of this interface will be
- * returned from {@link Value#type} for all {@link PrimitiveValue} objects.
- *
- * @see PrimitiveValue
- *
- * @author Robert Field
- * @author Gordon Hirsch
- * @author James McIlree
- * @since  1.3
- */
-public interface PrimitiveType extends Type {
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/PrimitiveValue.java b/ojluni/src/main/java/com/sun/jdi/PrimitiveValue.java
deleted file mode 100755
index 0d9442a..0000000
--- a/ojluni/src/main/java/com/sun/jdi/PrimitiveValue.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * Copyright (c) 1998, 2000, 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.jdi;
-
-/**
- * The value assigned to a field or variable of primitive type in a
- * target VM. Each primitive values is accessed through a subinterface
- * of this interface.
- *
- * @author Robert Field
- * @author Gordon Hirsch
- * @author James McIlree
- * @since  1.3
- */
-public interface PrimitiveValue extends Value
-{
-    /**
-     * Converts this value to a BooleanValue and returns the result
-     * as a boolean.
-     *
-     * @return <code>true</code> if this value is non-zero (or
-     * <code>true</code> if already a BooleanValue); false otherwise.
-     */
-    boolean booleanValue();
-
-    /**
-     * Converts this value to a ByteValue and returns the result
-     * as a byte. The value will be narrowed as
-     * necessary, and magnitude or precision information
-     * may be lost (as if the primitive had been cast to a byte).
-     *
-     * @return the value, converted to byte
-     */
-    byte byteValue();
-
-    /**
-     * Converts this value to a CharValue and returns the result
-     * as a char. The value will be narrowed or widened as
-     * necessary, and magnitude or precision information
-     * may be lost (as if the primitive had been cast to a char,
-     * in the narrowing case).
-     *
-     * @return the value, converted to char
-     */
-    char charValue();
-
-    /**
-     * Converts this value to a ShortValue and returns the result
-     * as a short. The value will be narrowed or widened as
-     * necessary, and magnitude or precision information
-     * may be lost (as if the primitive had been cast to a short,
-     * in the narrowing case).
-     *
-     * @return the value, converted to short
-     */
-    short shortValue();
-
-    /**
-     * Converts this value to an IntegerValue and returns the result
-     * as an int. The value will be narrowed or widened as
-     * necessary, and magnitude or precision information
-     * may be lost (as if the primitive had been cast to an int,
-     * in the narrowing case).
-     *
-     * @return the value, converted to int
-     */
-    int intValue();
-
-    /**
-     * Converts this value to a LongValue and returns the result
-     * as a long. The value will be narrowed or widened as
-     * necessary, and magnitude or precision information
-     * may be lost (as if the primitive had been cast to a long,
-     * in the narrowing case).
-     *
-     * @return the value, converted to long
-     */
-    long longValue();
-
-    /**
-     * Converts this value to a FloatValue and returns the result
-     * as a float. The value will be narrowed or widened as
-     * necessary, and magnitude or precision information
-     * may be lost (as if the primitive had been cast to a float,
-     * in the narrowing case).
-     *
-     * @return the value, converted to float
-     */
-    float floatValue();
-
-    /**
-     * Converts this value to a DoubleValue and returns the result
-     * as a double. The value will be widened as
-     * necessary, and precision information
-     * may be lost.
-     *
-     * @return the value, converted to double
-     */
-    double doubleValue();
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/ReferenceType.java b/ojluni/src/main/java/com/sun/jdi/ReferenceType.java
deleted file mode 100755
index 65accef..0000000
--- a/ojluni/src/main/java/com/sun/jdi/ReferenceType.java
+++ /dev/null
@@ -1,830 +0,0 @@
-/*
- * Copyright (c) 1998, 2006, 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.jdi;
-
-import java.util.List;
-import java.util.Map;
-
-/**
- * The type of an object in a target VM. ReferenceType encompasses
- * classes, interfaces, and array types as defined in
- * <cite>The Java&trade; Language Specification</cite>.
- * All ReferenceType objects belong to one of the following
- * subinterfaces:
- * {@link ClassType} for classes,
- * {@link InterfaceType} for interfaces, and
- * {@link ArrayType} for arrays.
- * Note that primitive classes (for example, the
- * {@link ClassObjectReference#reflectedType() reflected type} of
- * {@link java.lang.Integer#TYPE Integer.TYPE})
- * are represented as ClassType.
- * The VM creates Class objects for all three, so from the VM perspective,
- * each ReferenceType maps to a distinct Class object.
- * <p>
- * ReferenceTypes can
- * be obtained by querying a particular {@link ObjectReference} for its
- * type or by getting a list of all reference types from the
- * {@link VirtualMachine}.
- * <p>
- * ReferenceType provides access to static type information such as
- * methods and fields and provides access to dynamic type
- * information such as the corresponding Class object and the classloader.
- * <p>
- * Any method on <code>ReferenceType</code> which directly or
- * indirectly takes <code>ReferenceType</code> as an parameter may throw
- * {@link com.sun.jdi.VMDisconnectedException} if the target VM is
- * disconnected and the {@link com.sun.jdi.event.VMDisconnectEvent} has been or is
- * available to be read from the {@link com.sun.jdi.event.EventQueue}.
- * <p>
- * Any method on <code>ReferenceType</code> which directly or
- * indirectly takes <code>ReferenceType</code> as an parameter may throw
- * {@link com.sun.jdi.VMOutOfMemoryException} if the target VM has run out of memory.
- * <p>
- * Any method on <code>ReferenceType</code> or which directly or indirectly takes
- * <code>ReferenceType</code> as parameter may throw
- * {@link com.sun.jdi.ObjectCollectedException} if the mirrored type has been unloaded.
- *
- * @see ObjectReference
- * @see ObjectReference#referenceType
- * @see VirtualMachine
- * @see VirtualMachine#allClasses
- *
- * @author Robert Field
- * @author Gordon Hirsch
- * @author James McIlree
- * @since  1.3
- */
-public interface ReferenceType
-    extends Type, Comparable<ReferenceType>, Accessible
-{
-
-    /**
-     * Gets the fully qualified name of this type. The returned name
-     * is formatted as it might appear in a Java programming langauge
-     * declaration for objects of this type.
-     * <p>
-     * For primitive classes
-     * the returned name is the name of the corresponding primitive
-     * type; for example, "int" is returned as the name of the class
-     * represented by {@link java.lang.Integer#TYPE Integer.TYPE}.
-     * @return a string containing the type name.
-     */
-    String name();
-
-    /**
-     * Gets the generic signature for this type if there is one.
-     * Generic signatures are described in the
-     * <cite>The Java&trade; Virtual Machine Specification</cite>.
-     *
-     * @return a string containing the generic signature, or <code>null</code>
-     * if there is no generic signature.
-     *
-     * @since 1.5
-     */
-    String genericSignature();
-
-    /**
-     * Gets the classloader object which loaded the class corresponding
-     * to this type.
-     *
-     * @return a {@link ClassLoaderReference} which mirrors the classloader,
-     * or <code>null</code> if the class was loaded through the bootstrap class
-     * loader.
-     */
-    ClassLoaderReference classLoader();
-
-    /**
-     * Gets an identifying name for the source corresponding to the
-     * declaration of this type. Interpretation of this string is
-     * the responsibility of the source repository mechanism.
-     * <P>
-     * The returned name is dependent on VM's default stratum
-     * ({@link VirtualMachine#getDefaultStratum()}).
-     * In the reference implementation, when using the base stratum,
-     * the returned string is the
-     * unqualified name of the source file containing the declaration
-     * of this type.  In other strata the returned source name is
-     * the first source name for that stratum.  Since other languages
-     * may have more than one source name for a reference type,
-     * the use of {@link Location#sourceName()} or
-     * {@link #sourceNames(String)} is preferred.
-     * <p>
-     * For arrays ({@link ArrayType}) and primitive classes,
-     * AbsentInformationException is always thrown.
-     *
-     * @return the string source file name
-     * @throws AbsentInformationException if the source name is not
-     * known
-     */
-    String sourceName() throws AbsentInformationException;
-
-    /**
-     * Gets the identifying names for all the source corresponding to the
-     * declaration of this type. Interpretation of these names is
-     * the responsibility of the source repository mechanism.
-     * <P>
-     * The returned names are for the specified stratum
-     * (see {@link Location} for a description of strata).
-     * In the reference implementation, when using the Java
-     * programming language stratum,
-     * the returned List contains one element: a String which is the
-     * unqualified name of the source file containing the declaration
-     * of this type.  In other strata the returned source names are
-     * all the source names defined for that stratum.
-     *
-     * @param stratum The stratum to retrieve information from
-     * or <code>null</code> for the declaring type's
-     * default stratum.
-     *
-     * @return a List of String objects each representing a source name
-     *
-     * @throws AbsentInformationException if the source names are not
-     * known.
-     * <p>
-     * For arrays ({@link ArrayType}) and primitive classes,
-     * AbsentInformationException is always thrown.
-     *
-     * @since 1.4
-     */
-    List<String> sourceNames(String stratum) throws AbsentInformationException;
-
-    /**
-     * Gets the paths to the source corresponding to the
-     * declaration of this type. Interpretation of these paths is
-     * the responsibility of the source repository mechanism.
-     * <P>
-     * The returned paths are for the specified stratum
-     * (see {@link Location} for a description of strata).
-     * In the reference implementation, for strata which
-     * do not explicitly specify source path (the Java
-     * programming language stratum never does), the returned
-     * strings are the {@link #sourceNames(String)} prefixed by
-     * the package name of this ReferenceType
-     * converted to a platform dependent path.
-     * For example, on a Windows platform,
-     * <CODE>java.lang.Thread</CODE>
-     * would return a List containing one element:
-     * <CODE>"java\lang\Thread.java"</CODE>.
-     *
-     * @param stratum The stratum to retrieve information from
-     * or <code>null</code> for the declaring type's
-     * default stratum.
-     *
-     * @return a List of String objects each representing a source path
-     *
-     * @throws AbsentInformationException if the source names are not
-     * known.
-     * <p>
-     * For arrays ({@link ArrayType}) and primitive classes,
-     * AbsentInformationException is always thrown.
-     *
-     * @since 1.4
-     */
-    List<String> sourcePaths(String stratum) throws AbsentInformationException;
-
-    /**
-     * Get the source debug extension of this type.
-     * <p>
-     * Not all target virtual machines support this operation.
-     * Use
-     * {@link VirtualMachine#canGetSourceDebugExtension() canGetSourceDebugExtension()}
-     * to determine if the operation is supported.
-     * @return as a string the source debug extension attribute
-     * @throws AbsentInformationException if the extension is not
-     * specified
-     * @throws java.lang.UnsupportedOperationException if
-     * the target virtual machine does not support this
-     * operation - see
-     * {@link VirtualMachine#canGetSourceDebugExtension() canGetSourceDebugExtension()},
-     */
-    String sourceDebugExtension() throws AbsentInformationException;
-
-    /**
-     * Determines if this type was declared static. Only nested types,
-     * can be declared static, so <code>false</code> is returned
-     * for any package-level type, array type, or primitive class.
-     *
-     * @return <code>true</code> if this type is static; false otherwise.
-     */
-    boolean isStatic();
-
-    /**
-     * Determines if this type was declared abstract.
-     * <p>
-     * For arrays ({@link ArrayType}) and primitive classes,
-     * the return value is undefined.
-     *
-     * @return <code>true</code> if this type is abstract; false otherwise.
-     */
-    boolean isAbstract();
-
-    /**
-     * Determines if this type was declared final.
-     * <p>
-     * For arrays ({@link ArrayType}) and primitive classes,
-     * the return value is always true.
-     *
-     * @return <code>true</code> if this type is final; false otherwise.
-     */
-    boolean isFinal();
-
-    /**
-     * Determines if this type has been prepared. See the JVM
-     * specification for a definition of class preparation.
-     * <p>
-     * For arrays ({@link ArrayType}) and primitive classes,
-     * the return value is undefined.
-     *
-     * @return <code>true</code> if this type is prepared; false otherwise.
-     */
-    boolean isPrepared();
-
-    /**
-     * Determines if this type has been verified. See the JVM
-     * specification for a definition of class verification.
-     * <p>
-     * For arrays ({@link ArrayType}) and primitive classes,
-     * the return value is undefined.
-     *
-     * @return <code>true</code> if this type is verified; false otherwise.
-     */
-    boolean isVerified();
-
-    /**
-     * Determines if this type has been initialized. See the JVM
-     * specification for a definition of class verification.
-     * For {@link InterfaceType}, this method always returns the
-     * same value as {@link #isPrepared()}.
-     * <p>
-     * For arrays ({@link ArrayType}) and primitive classes,
-     * the return value is undefined.
-     *
-     * @return <code>true</code> if this type is initialized; false otherwise.
-     */
-    boolean isInitialized();
-
-    /**
-     * Determines if initialization failed for this class. See the JVM
-     * specification for details on class initialization.
-     * <p>
-     * For arrays ({@link ArrayType}) and primitive classes,
-     * the return value is undefined.
-     *
-     * @return <code>true</code> if initialization was attempted and
-     * failed; false otherwise.
-     */
-    boolean failedToInitialize();
-
-    /**
-     * Returns a list containing each {@link Field} declared in this type.
-     * Inherited fields are not included. Any synthetic fields created
-     * by the compiler are included in the list.
-     * <p>
-     * For arrays ({@link ArrayType}) and primitive classes, the returned
-     * list is always empty.
-     *
-     * @return a list {@link Field} objects; the list has length 0
-     * if no fields exist.
-     * @throws ClassNotPreparedException if this class not yet been
-     * prepared.
-     */
-    List<Field> fields();
-
-    /**
-     * Returns a list containing each unhidden and unambiguous {@link Field}
-     * in this type.
-     * Each field that can be accessed from the class
-     * or its instances with its simple name is included. Fields that
-     * are ambiguously multiply inherited or fields that are hidden by
-     * fields with the same name in a more recently inherited class
-     * cannot be accessed
-     * by their simple names and are not included in the returned
-     * list. All other inherited fields are included.
-     * See JLS section 8.3 for details.
-     * <p>
-     * For arrays ({@link ArrayType}) and primitive classes, the returned
-     * list is always empty.
-     *
-     * @return a List of {@link Field} objects; the list has length
-     * 0 if no visible fields exist.
-     * @throws ClassNotPreparedException if this class not yet been
-     * prepared.
-     */
-    List<Field> visibleFields();
-
-    /**
-     * Returns a list containing each {@link Field} declared in this type,
-     * and its superclasses, implemented interfaces, and/or superinterfaces.
-     * All declared and inherited
-     * fields are included, regardless of whether they are hidden or
-     * multiply inherited.
-     * <p>
-     * For arrays ({@link ArrayType}) and primitive classes, the returned
-     * list is always empty.
-     *
-     * @return a List of {@link Field} objects; the list has length
-     * 0 if no fields exist.
-     * @throws ClassNotPreparedException if this class not yet been
-     * prepared.
-     */
-    List<Field> allFields();
-
-    /**
-     * Finds the visible {@link Field} with the given
-     * non-ambiguous name. This method follows the
-     * inheritance rules specified in the JLS (8.3.3) to determine
-     * visibility.
-     * <p>
-     * For arrays ({@link ArrayType}) and primitive classes, the returned
-     * value is always null.
-     *
-     * @param fieldName a String containing the name of desired field.
-     * @return a {@link Field} object which mirrors the found field, or
-     * null if there is no field with the given name or if the given
-     * name is ambiguous.
-     * @throws ClassNotPreparedException if this class not yet been
-     * prepared.
-     */
-    Field fieldByName(String fieldName);
-
-    /**
-     * Returns a list containing each {@link Method} declared
-     * directly in this type.
-     * Inherited methods are not included. Constructors,
-     * the initialization method if any, and any synthetic methods created
-     * by the compiler are included in the list.
-     * <p>
-     * For arrays ({@link ArrayType}) and primitive classes, the returned
-     * list is always empty.
-     *
-     * @return a list {@link Method} objects; the list has length 0
-     * if no methods exist.
-     * @throws ClassNotPreparedException if this class not yet been
-     * prepared.
-     */
-    List<Method> methods();
-
-    /**
-     * Returns a list containing each {@link Method}
-     * declared or inherited by this type. Methods from superclasses
-     * or superinterfaces that that have been hidden or overridden
-     * are not included.
-     * <p>
-     * Note that despite this exclusion, multiple inherited methods
-     * with the same signature can be present in the returned list, but
-     * at most one can be a member of a {@link ClassType}.
-     * See JLS section 8.4.6 for details.
-     * <p>
-     * For arrays ({@link ArrayType}) and primitive classes, the returned
-     * list is always empty.
-     *
-     * @return a List of {@link Method} objects; the list has length
-     * 0 if no visible methods exist.
-     * @throws ClassNotPreparedException if this class not yet been
-     * prepared.
-     */
-    List<Method> visibleMethods();
-
-    /**
-     * Returns a list containing each {@link Method} declared in this type,
-     * and its superclasses, implemented interfaces, and/or superinterfaces.
-     * All declared and inherited
-     * methods are included, regardless of whether they are hidden or
-     * overridden.
-     * <p>
-     * For arrays ({@link ArrayType}) and primitive classes, the returned
-     * list is always empty.
-     *
-     * @return a List of {@link Method} objects; the list has length
-     * 0 if no methods exist.
-     * @throws ClassNotPreparedException if this class not yet been
-     * prepared.
-     */
-    List<Method> allMethods();
-
-    /**
-     * Returns a List containing each visible {@link Method} that
-     * has the given name.  This is most commonly used to
-     * find overloaded methods.
-     * <p>
-     * Overridden and hidden methods are not included.
-     * See JLS (8.4.6) for details.
-     * <p>
-     * For arrays ({@link ArrayType}) and primitive classes, the returned
-     * list is always empty.
-     *
-     * @param name the name of the method to find.
-     * @return a List of {@link Method} objects that match the given
-     * name; the list has length 0 if no matching methods are found.
-     * @throws ClassNotPreparedException if this class not yet been
-     * prepared.
-     */
-    List<Method> methodsByName(String name);
-
-    /**
-     * Returns a List containing each visible {@link Method} that
-     * has the given name and signature.
-     * The signature string is the
-     * JNI signature for the target method:
-     * <ul>
-     * <li><code>()V</code>
-     * <li><code>([Ljava/lang/String;)V</code>
-     * <li><code>(IIII)Z</code>
-     * </ul>
-     * This method follows the inheritance rules specified
-     * in the JLS (8.4.6) to determine visibility.
-     * <p>
-     * At most one method in the list is a concrete method and a
-     * component of {@link ClassType}; any other methods in the list
-     * are abstract. Use {@link ClassType#concreteMethodByName} to
-     * retrieve only the matching concrete method.
-     * <p>
-     * For arrays ({@link ArrayType}) and primitive classes, the returned
-     * list is always empty.
-     *
-     * @param name the name of the method to find.
-     * @param signature the signature of the method to find
-     * @return a List of {@link Method} objects that match the given
-     * name and signature; the list has length 0 if no matching methods
-     * are found.
-     * @throws ClassNotPreparedException if this class not yet been
-     * prepared.
-     */
-    List<Method> methodsByName(String name, String signature);
-
-    /**
-     * Returns a List containing {@link ReferenceType} objects that are
-     * declared within this type and are currently loaded into the Virtual
-     * Machine.  Both static nested types and non-static nested
-     * types (that is, inner types) are included. Local inner types
-     * (declared within a code block somewhere in this reference type) are
-     * also included in the returned list.
-     * <p>
-     * For arrays ({@link ArrayType}) and primitive classes, the returned
-     * list is always empty.
-     *
-     * @return a List of nested {@link ReferenceType} objects; the list
-     * has 0 length if there are no nested types.
-     */
-    List<ReferenceType> nestedTypes();
-
-    /**
-     * Gets the {@link Value} of a given static {@link Field} in this type.
-     * The Field must be valid for this type;
-     * that is, it must be declared in this type, a superclass, a
-     * superinterface, or an implemented interface.
-     *
-     * @param field the field containing the requested value
-     * @return the {@link Value} of the instance field.
-     * @throws java.lang.IllegalArgumentException if the field is not valid for
-     * this object's class.
-     */
-    Value getValue(Field field);
-
-    /**
-     * Returns a map containing the {@link Value} of each
-     * static {@link Field} in the given list.
-     * The Fields must be valid for this type;
-     * that is, they must be declared in this type, a superclass, a
-     * superinterface, or an implemented interface.
-     *
-     * @param fields a list of {@link Field} objects containing the
-     * requested values.
-     * @return a Map of the requested {@link Field} objects with
-     * their {@link Value}.
-     * @throws java.lang.IllegalArgumentException if any field is not valid for
-     * this object's class.
-     * @throws VMMismatchException if a {@link Mirror} argument and this mirror
-     * do not belong to the same {@link VirtualMachine}.
-     */
-    Map<Field,Value> getValues(List<? extends Field> fields);
-
-    /**
-     * Returns the class object that corresponds to this type in the
-     * target VM. The VM creates class objects for every kind of
-     * ReferenceType: classes, interfaces, and array types.
-     * @return the {@link ClassObjectReference} for this reference type
-     * in the target VM.
-     */
-    ClassObjectReference classObject();
-
-    /**
-     * Returns a list containing a {@link Location} object
-     * for each executable source line in this reference type.
-     * <P>
-     * This method is equivalent to
-     * <code>allLineLocations(vm.getDefaultStratum(),null)</code> -
-     * see {@link #allLineLocations(String,String)}
-     * for more information.
-     *
-     * @throws AbsentInformationException if there is no line
-     * number information for this class and there are non-native,
-     * non-abstract executable members of this class.
-     *
-     * @throws ClassNotPreparedException if this class not yet
-     * been prepared.
-     */
-    List<Location> allLineLocations() throws AbsentInformationException;
-
-    /**
-     * Returns a list containing a {@link Location} object
-     * for each executable source line in this reference type.
-     * Each location maps a source line to a range of code
-     * indices.
-     * The beginning of the range can be determined through
-     * {@link Location#codeIndex}.  The returned list may contain
-     * multiple locations for a particular line number, if the
-     * compiler and/or VM has mapped that line to two or more
-     * disjoint code index ranges.  Note that it is possible for
-     * the same source line to represent different code index
-     * ranges in <i>different</i> methods.
-     * <P>
-     * For arrays ({@link ArrayType}) and primitive classes, the
-     * returned list is always empty.  For interfaces ({@link
-     * InterfaceType}), the returned list will be non-empty only
-     * if the interface has executable code in its class
-     * initialization.
-     * <P>
-     * Returned list is for the specified <i>stratum</i>
-     * (see {@link Location} for a description of strata).
-     *
-     * @param stratum The stratum to retrieve information from
-     * or <code>null</code> for the {@link #defaultStratum()}.
-     *
-     * @param sourceName Return locations only within this
-     * source file or <code>null</code> to return locations.
-     *
-     * @return a List of all source line {@link Location} objects.
-     *
-     * @throws AbsentInformationException if there is no line
-     * number information for this class and there are non-native,
-     * non-abstract executable members of this class.
-     * Or if <i>sourceName</i> is non-<code>null</code>
-     * and source name information is not present.
-     *
-     * @throws ClassNotPreparedException if this class not yet
-     * been prepared.
-     *
-     * @since 1.4
-     */
-    List<Location> allLineLocations(String stratum, String sourceName)
-                             throws AbsentInformationException;
-
-    /**
-     * Returns a List containing all {@link Location} objects
-     * that map to the given line number.
-     * <P>
-     * This method is equivalent to
-     * <code>locationsOfLine(vm.getDefaultStratum(), null,
-     * lineNumber)</code> -
-     * see {@link
-     * #locationsOfLine(java.lang.String,java.lang.String,int)}
-     * for more information.
-     *
-     * @param lineNumber the line number
-     *
-     * @return a List of all {@link Location} objects that map to
-     * the given line.
-     *
-     * @throws AbsentInformationException if there is no line
-     * number information for this class.
-     *
-     * @throws ClassNotPreparedException if this class not yet
-     * been prepared.
-     *
-     * @see VirtualMachine#getDefaultStratum()
-     */
-    List<Location> locationsOfLine(int lineNumber)
-        throws AbsentInformationException;
-
-    /**
-     * Returns a List containing all {@link Location} objects
-     * that map to the given line number.
-     * <P>
-     * For arrays ({@link ArrayType}) and primitive classes, the
-     * returned list is always empty.
-     * For interfaces ({@link InterfaceType}), the returned list
-     * will be non-empty only if the interface has executable code
-     * in its class initialization at the specified line number.
-     * An empty list will be returned if there is no executable
-     * code at the specified line number.
-     * <p>
-     * Returned list is for the specified <i>stratum</i>
-     * (see {@link Location} for a description of strata).
-     *
-     * @param stratum the stratum to use for comparing line number
-     *                and source name, or <code>null</code> to
-     *                use the {@link #defaultStratum()}.
-     *
-     * @param sourceName the source name containing the line
-     *                   number, or <code>null</code> to match
-     *                   all source names
-     *
-     * @param lineNumber the line number
-     *
-     * @return a List of all {@link Location} objects that map
-     *         to the given line.
-     *
-     * @throws AbsentInformationException if there is no line
-     *         number information for this class.
-     *         Or if <i>sourceName</i> is non-<code>null</code>
-     *         and source name information is not present.
-     *
-     * @throws ClassNotPreparedException if this class not yet
-     *         been prepared.
-     *
-     * @since 1.4
-     */
-    List<Location> locationsOfLine(String stratum,
-                                   String sourceName,
-                                   int lineNumber)
-                     throws AbsentInformationException;
-
-    /**
-     * Return the available strata for this reference type.
-     * <P>
-     * See the {@link Location} for a description of strata.
-     *
-     * @return List of <CODE>java.lang.String</CODE>, each
-     * representing a stratum
-     *
-     * @since 1.4
-     */
-    List<String> availableStrata();
-
-    /**
-     * Returns the default stratum for this reference type.
-     * This value is specified in the class file and cannot
-     * be set by the user.  If the class file does not
-     * specify a default stratum the base stratum
-     * (<code>"Java"</code>) will be returned.
-     * <P>
-     * See the {@link Location} for a description of strata.
-     *
-     * @since 1.4
-     */
-    String defaultStratum();
-
-    /**
-     * Returns instances of this ReferenceType.
-     * Only instances that are reachable for the purposes of garbage collection
-     * are returned.
-     * <p>
-     * Not all target virtual machines support this operation.
-     * Use {@link VirtualMachine#canGetInstanceInfo()}
-     * to determine if the operation is supported.
-     *
-     * @see VirtualMachine#instanceCounts(List)
-     * @see ObjectReference#referringObjects(long)
-     *
-     * @param maxInstances the maximum number of instances to return.
-     *        Must be non-negative.  If zero, all instances are returned.
-     * @return a List of {@link ObjectReference} objects.  If there are
-     * no instances of this ReferenceType, a zero-length list is returned.
-     *
-     * @throws java.lang.UnsupportedOperationException if
-     * the target virtual machine does not support this
-     * operation - see
-     * {@link VirtualMachine#canGetInstanceInfo() canGetInstanceInfo()}
-     * @throws java.lang.IllegalArgumentException if maxInstances is less
-     *         than zero.
-     * @since 1.6
-     */
-    List<ObjectReference> instances(long maxInstances);
-
-    /**
-     * Compares the specified Object with this ReferenceType for equality.
-     *
-     * @return  true if the Object is a {@link ReferenceType}, if the
-     * ReferenceTypes belong to the same VM, and if they mirror classes
-     * which correspond to the same instance of java.lang.Class in that VM.
-     */
-    boolean equals(Object obj);
-
-    /**
-     * Returns the hash code value for this ObjectReference.
-     *
-     * @return the integer hash code
-     */
-    int hashCode();
-
-    /**
-     * Returns the class major version number, as defined in the class file format
-     * of the Java Virtual Machine Specification.
-     *
-     * For arrays ({@link ArrayType}) and primitive classes,
-     * the returned major version number value is zero.
-     *
-     * Not all target virtual machines support this operation.
-     * Use {@link VirtualMachine#canGetClassFileVersion()}
-     * to determine if the operation is supported.
-     *
-     * @return the major version number of the class.
-     *
-     * @throws java.lang.UnsupportedOperationException if
-     * the target virtual machine does not support this
-     * operation - see
-     * {@link VirtualMachine#canGetClassFileVersion() canGetClassFileVersion()}
-     *
-     * @since 1.6
-     */
-    int majorVersion();
-
-
-    /**
-     * Returns the class minor version number, as defined in the class file format
-     * of the Java Virtual Machine Specification.
-     *
-     * For arrays ({@link ArrayType}) and primitive classes,
-     * the returned minor version number value is zero.
-     *
-     * Not all target virtual machines support this operation.
-     * Use {@link VirtualMachine#canGetClassFileVersion()}
-     * to determine if the operation is supported.
-     *
-     * @return the minor version number of the class.
-     *
-     * @throws java.lang.UnsupportedOperationException if
-     * the target virtual machine does not support this
-     * operation - see
-     * {@link VirtualMachine#canGetClassFileVersion() canGetClassFileVersion()}
-     *
-     * @since 1.6
-     */
-    int minorVersion();
-
-    /**
-     * Returns the number of entries in the constant pool plus one.
-     * This corresponds to the constant_pool_count item of the Class File Format
-     * in the Java Virtual Machine Specification.
-     *
-     * For arrays ({@link ArrayType}) and primitive classes,
-     * the returned constant pool count value is zero.
-     *
-     * Not all target virtual machines support this operation.
-     * Use {@link VirtualMachine#canGetConstantPool()}
-     * to determine if the operation is supported.
-     *
-     * @return total number of constant pool entries for a class plus one.
-     *
-     * @throws java.lang.UnsupportedOperationException if
-     * the target virtual machine does not support this
-     * operation - see
-     * {@link VirtualMachine#canGetConstantPool() canGetConstantPool()}
-     *
-     * @see #constantPool()
-     * @since 1.6
-     */
-    int constantPoolCount();
-
-    /**
-     * Returns the raw bytes of the constant pool in the format of the
-     * constant_pool item of the Class File Format in the Java Virtual
-     * Machine Specification. The format of the constant pool may
-     * differ between versions of the Class File Format, so, the
-     * minor and major class version numbers should be checked for
-     * compatibility.
-     *
-     * For arrays ({@link ArrayType}) and primitive classes,
-     * a zero length byte array is returned.
-     *
-     * Not all target virtual machines support this operation.
-     * Use {@link VirtualMachine#canGetConstantPool()}
-     * to determine if the operation is supported.
-     *
-     * @return the raw bytes of constant pool.
-     *
-     * @throws java.lang.UnsupportedOperationException if
-     * the target virtual machine does not support this
-     * operation - see
-     * {@link VirtualMachine#canGetConstantPool() canGetConstantPool()}
-     *
-     * @see #constantPoolCount()
-     * @since 1.6
-     */
-     byte[] constantPool();
-
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/ShortType.java b/ojluni/src/main/java/com/sun/jdi/ShortType.java
deleted file mode 100755
index c7b9e8b..0000000
--- a/ojluni/src/main/java/com/sun/jdi/ShortType.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (c) 1998, 1999, 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.jdi;
-
-/**
- * The type of all primitive <code>short</code> values
- * accessed in the target VM. Calls to {@link Value#type} will return an
- * implementor of this interface.
- *
- * @see LongValue
- *
- * @author James McIlree
- * @since  1.3
- */
-public interface ShortType extends PrimitiveType {
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/ShortValue.java b/ojluni/src/main/java/com/sun/jdi/ShortValue.java
deleted file mode 100755
index 771ef56..0000000
--- a/ojluni/src/main/java/com/sun/jdi/ShortValue.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package com.sun.jdi;
-
-/**
- * Provides access to a primitive <code>short</code> value in
- * the target VM.
- *
- * @author Robert Field
- * @author Gordon Hirsch
- * @author James McIlree
- * @since  1.3
- */
-public interface ShortValue extends PrimitiveValue, Comparable<ShortValue>
-{
-    /**
-     * Returns this ShortValue as a short.
-     *
-     * @return the <code>short</code> mirrored by this object.
-     */
-    short value();
-
-    /**
-     * Compares the specified Object with this ShortValue for equality.
-     *
-     * @return true if the Object is a ShortValue and if applying "=="
-     * to the two mirrored primitives would evaluate to true; false
-     * otherwise.
-     */
-    boolean equals(Object obj);
-
-    /**
-     * Returns the hash code value for this ShortValue.
-     *
-     * @return the integer hash code
-     */
-    int hashCode();
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/StackFrame.java b/ojluni/src/main/java/com/sun/jdi/StackFrame.java
deleted file mode 100755
index 40c0302..0000000
--- a/ojluni/src/main/java/com/sun/jdi/StackFrame.java
+++ /dev/null
@@ -1,239 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package com.sun.jdi;
-
-import java.util.List;
-import java.util.Map;
-
-/**
- * The state of one method invocation on a thread's call stack.
- * As a thread executes, stack frames are pushed and popped from
- * its call stack as methods are invoked and then return. A StackFrame
- * mirrors one such frame from a target VM at some point in its
- * thread's execution. The call stack is, then, simply a List of
- * StackFrame objects. The call stack can be obtained any time a thread
- * is suspended through a call to {@link ThreadReference#frames}
- * <p>
- * StackFrames provide access to a method's local variables and their
- * current values.
- * <p>
- * The lifetime of a StackFrame is very limited. It is available only
- * for suspended threads and becomes invalid once its thread is resumed.
- * <p>
- * Any method on <code>StackFrame</code> which
- * takes <code>StackFrame</code> as an parameter may throw
- * {@link com.sun.jdi.VMDisconnectedException} if the target VM is
- * disconnected and the {@link com.sun.jdi.event.VMDisconnectEvent} has been or is
- * available to be read from the {@link com.sun.jdi.event.EventQueue}.
- * <p>
- * Any method on <code>StackFrame</code> which
- * takes <code>StackFrame</code> as an parameter may throw
- * {@link com.sun.jdi.VMOutOfMemoryException} if the target VM has run out of memory.
- *
- * @author Robert Field
- * @author Gordon Hirsch
- * @author James McIlree
- * @since  1.3
- */
-public interface StackFrame extends Mirror, Locatable
-{
-    /**
-     * Returns the {@link Location} of the current instruction in the frame.
-     * The method for which this frame was created can also be accessed
-     * through the returned location.
-     * For the top frame in the stack, this location identifies the
-     * next instruction to be executed. For all other frames, this
-     * location identifies the instruction that caused the next frame's
-     * method to be invoked.
-     * If the frame represents a native method invocation, the returned
-     * location indicates the class and method, but the code index will
-     * not be valid (-1).
-     *
-     * @return the {@link Location} of the current instruction.
-     * @throws InvalidStackFrameException if this stack frame has become
-     * invalid. Once the frame's thread is resumed, the stack frame is
-     * no longer valid.
-     */
-    Location location();
-
-    /**
-     * Returns the thread under which this frame's method is running.
-     *
-     * @return a {@link ThreadReference} which mirrors the frame's thread.
-     * @throws InvalidStackFrameException if this stack frame has become
-     * invalid. Once the frame's thread is resumed, the stack frame is
-     * no longer valid.
-     */
-    ThreadReference thread();
-
-    /**
-     * Returns the value of 'this' for the current frame.
-     * The {@link ObjectReference} for 'this' is only available for
-     * non-native instance methods.
-     *
-     * @return an {@link ObjectReference}, or null if the frame represents
-     * a native or static method.
-     * @throws InvalidStackFrameException if this stack frame has become
-     * invalid. Once the frame's thread is resumed, the stack frame is
-     * no longer valid.
-     */
-    ObjectReference thisObject();
-
-    /**
-     * Returns a list containing each {@link LocalVariable}
-     * that can be accessed from this frame's location.
-     * <p>
-     * Visibility is based on the code index of the current instruction of
-     * this StackFrame. Each variable has a range of byte code indices in which
-     * it is accessible.
-     * If this stack frame's method
-     * matches this variable's method and if the code index of this
-     * StackFrame is within the variable's byte code range, the variable is
-     * visible.
-     * <p>
-     * A variable's byte code range is at least as large as the scope of
-     * that variable, but can continue beyond the end of the scope under
-     * certain circumstances:
-     * <ul>
-     * <li>the compiler/VM does not immediately reuse the variable's slot.
-     * <li>the compiler/VM is implemented to report the extended range that
-     * would result from the item above.
-     * </ul>
-     * The advantage of an extended range is that variables from recently
-     * exited scopes may remain available for examination (this is especially
-     * useful for loop indices). If, as a result of the extensions above,
-     * the current frame location is contained within the range
-     * of multiple local variables of the same name, the variable with the
-     * highest-starting range is chosen for the returned list.
-     *
-     * @return the list of {@link LocalVariable} objects currently visible;
-     * the list will be empty if there are no visible variables;
-     * specifically, frames in native methods will always return a
-     * zero-length list.
-     * @throws AbsentInformationException if there is no local variable
-     * information for this method.
-     * @throws InvalidStackFrameException if this stack frame has become
-     * invalid. Once the frame's thread is resumed, the stack frame is
-     * no longer valid.
-     * @throws NativeMethodException if the current method is native.
-     */
-    List<LocalVariable> visibleVariables() throws AbsentInformationException;
-
-    /**
-     * Finds a {@link LocalVariable} that matches the given name and is
-     * visible at the current frame location.
-     * See {@link #visibleVariables} for more information on visibility.
-     *
-     * @param name the variable name to find
-     * @return the matching {@link LocalVariable}, or null if there is no
-     * visible variable with the given name; frames in native methods
-     * will always return null.
-     * @throws AbsentInformationException if there is no local variable
-     * information for this method.
-     * @throws InvalidStackFrameException if this stack frame has become
-     * invalid. Once the frame's thread is resumed, the stack frame is
-     * no longer valid.
-     * @throws NativeMethodException if the current method is native.
-     */
-    LocalVariable visibleVariableByName(String name) throws AbsentInformationException;
-
-    /**
-     * Gets the {@link Value} of a {@link LocalVariable} in this frame.
-     * The variable must be valid for this frame's method and visible
-     * according to the rules described in {@link #visibleVariables}.
-     *
-     * @param variable the {@link LocalVariable} to be accessed
-     * @return the {@link Value} of the instance field.
-     * @throws java.lang.IllegalArgumentException if the variable is
-     * either invalid for this frame's method or not visible.
-     * @throws InvalidStackFrameException if this stack frame has become
-     * invalid. Once the frame's thread is resumed, the stack frame is
-     * no longer valid.
-     */
-    Value getValue(LocalVariable variable);
-
-    /**
-     * Returns the values of multiple local variables in this frame.
-     * Each variable must be valid for this frame's method and visible
-     * according to the rules described in {@link #visibleVariables}.
-     *
-     * @param variables a list of {@link LocalVariable} objects to be accessed
-     * @return a map associating each {@link LocalVariable} with
-     * its {@link Value}
-     * @throws java.lang.IllegalArgumentException if any variable is
-     * either invalid for this frame's method or not visible.
-     * @throws InvalidStackFrameException if this stack frame has become
-     * invalid. Once the frame's thread is resumed, the stack frame is
-     * no longer valid.
-     */
-    Map<LocalVariable,Value> getValues(List<? extends LocalVariable> variables);
-
-    /**
-     * Sets the {@link Value} of a {@link LocalVariable} in this frame.
-     * The variable must be valid for this frame's method and visible
-     * according to the rules described in {@link #visibleVariables}.
-     * <p>
-     * Object values must be assignment compatible with the variable type
-     * (This implies that the variable type must be loaded through the
-     * enclosing class's class loader). Primitive values must be
-     * either assignment compatible with the variable type or must be
-     * convertible to the variable type without loss of information.
-     * See JLS section 5.2 for more information on assignment
-     * compatibility.
-     *
-     * @param variable the field containing the requested value
-     * @param value the new value to assign
-     * @throws java.lang.IllegalArgumentException if the field is not valid for
-     * this object's class.
-     * @throws InvalidTypeException if the value's type does not match
-     * the variable's type.
-     * @throws ClassNotLoadedException if the variable type has not yet been loaded
-     * through the appropriate class loader.
-     * @throws InvalidStackFrameException if this stack frame has become
-     * invalid. Once the frame's thread is resumed, the stack frame is
-     * no longer valid.
-     * @throws VMCannotBeModifiedException if the VirtualMachine is read-only - see {@link VirtualMachine#canBeModified()}.
-     */
-    void setValue(LocalVariable variable, Value value)
-        throws InvalidTypeException, ClassNotLoadedException;
-
-    /**
-     * Returns the values of all arguments in this frame.  Values are
-     * returned even if no local variable information is present.
-     *
-     * @return a list containing a {@link Value} object for each argument
-     * to this frame, in the order in which the arguments were
-     * declared.  If the method corresponding to this frame has
-     * no arguments, an empty list is returned.
-     *
-     * @throws InvalidStackFrameException if this stack frame has become
-     * invalid. Once the frame's thread is resumed, the stack frame is
-     * no longer valid.
-     * @since 1.6
-     */
-    List<Value> getArgumentValues();
-
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/StringReference.java b/ojluni/src/main/java/com/sun/jdi/StringReference.java
deleted file mode 100755
index a149768..0000000
--- a/ojluni/src/main/java/com/sun/jdi/StringReference.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1998, 2001, 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.jdi;
-
-/**
- * A string object from the target VM.
- * A StringReference is an {@link ObjectReference} with additional
- * access to string-specific information from the target VM.
- *
- * @author Robert Field
- * @author Gordon Hirsch
- * @author James McIlree
- * @since  1.3
- */
-public interface StringReference extends ObjectReference
-{
-    /**
-     * Returns the StringReference as a String. The returned string
-     * is the equivalent of the mirrored string, but is an entity in the
-     * client VM and can be manipulated like any other string.
-     *
-     * @return the string value.
-     */
-    String value();
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/ThreadGroupReference.java b/ojluni/src/main/java/com/sun/jdi/ThreadGroupReference.java
deleted file mode 100755
index 8bf631d..0000000
--- a/ojluni/src/main/java/com/sun/jdi/ThreadGroupReference.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * Copyright (c) 1998, 2006, 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.jdi;
-
-import java.util.List;
-
-/**
- * A thread group object from the target VM.
- * A ThreadGroupReference is an {@link ObjectReference} with additional
- * access to threadgroup-specific information from the target VM.
- *
- * @author Robert Field
- * @author Gordon Hirsch
- * @author James McIlree
- * @since  1.3
- */
-public interface ThreadGroupReference extends ObjectReference
-{
-    /**
-     * Returns the name of this thread group.
-     *
-     * @return the string containing the thread group name.
-     */
-    String name();
-
-    /**
-     * Returns the parent of this thread group.
-     *
-     * @return a {@link ThreadGroupReference} mirroring the parent of this
-     * thread group in the target VM, or null if this is a top-level
-     * thread group.
-     */
-    ThreadGroupReference parent();
-
-    /**
-     * Suspends all threads in this thread group. Each thread
-     * in this group and in all of its subgroups will be
-     * suspended as described in {@link ThreadReference#suspend}.
-     * This is not guaranteed to be an atomic
-     * operation; if the target VM is not interrupted at the time
-     * this method is
-     * called, it is possible that new threads will be created
-     * between the time that threads are enumerated and all of them
-     * have been suspended.
-     * @throws VMCannotBeModifiedException if the VirtualMachine is read-only - see {@link VirtualMachine#canBeModified()}.
-     */
-    void suspend();
-
-    /**
-     * Resumes all threads in this thread group. Each thread
-     * in this group and in all of its subgroups will be
-     * resumed as described in {@link ThreadReference#resume}.
-     * @throws VMCannotBeModifiedException if the VirtualMachine is read-only - see {@link VirtualMachine#canBeModified()}.
-     */
-    void resume();
-
-    /**
-     * Returns a List containing a {@link ThreadReference} for each live thread
-     * in this thread group. Only the live threads in this immediate thread group
-     * (and not its subgroups) are returned.  A thread is alive if it
-     * has been started and has not yet been stopped.
-     *
-     * @return a List of {@link ThreadReference} objects mirroring the
-     * live threads from this thread group in the target VM.
-     */
-    List<ThreadReference> threads();
-
-    /**
-     * Returns a List containing each active {@link ThreadGroupReference} in this
-     * thread group. Only the active thread groups in this immediate thread group
-     * (and not its subgroups) are returned.
-     * See <a href="{@docRoot}/../../../../api/java/lang/ThreadGroup.html">java.lang.ThreadGroup</a>
-     * for information about 'active' ThreadGroups.
-     * @return a List of {@link ThreadGroupReference} objects mirroring the
-     * active thread groups from this thread group in the target VM.
-     */
-    List<ThreadGroupReference> threadGroups();
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/ThreadReference.java b/ojluni/src/main/java/com/sun/jdi/ThreadReference.java
deleted file mode 100755
index 235ab29..0000000
--- a/ojluni/src/main/java/com/sun/jdi/ThreadReference.java
+++ /dev/null
@@ -1,473 +0,0 @@
-/*
- * Copyright (c) 1998, 2006, 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.jdi;
-import java.util.List;
-
-/**
- * A thread object from the target VM.
- * A ThreadReference is an {@link ObjectReference} with additional
- * access to thread-specific information from the target VM.
- *
- * @author Robert Field
- * @author Gordon Hirsch
- * @author James McIlree
- * @since  1.3
- */
-public interface ThreadReference extends ObjectReference
-{
-    /** Thread status is unknown */
-    public final int THREAD_STATUS_UNKNOWN  =-1;
-    /** Thread has completed execution */
-    public final int THREAD_STATUS_ZOMBIE = 0;
-    /** Thread is runnable */
-    public final int THREAD_STATUS_RUNNING = 1;
-    /** Thread is sleeping - Thread.sleep() or JVM_Sleep() was called */
-    public final int THREAD_STATUS_SLEEPING = 2;
-    /** Thread is waiting on a java monitor */
-    public final int THREAD_STATUS_MONITOR = 3;
-    /** Thread is waiting - Object.wait() or JVM_MonitorWait() was called */
-    public final int THREAD_STATUS_WAIT = 4;
-    /** Thread has not yet been started */
-    public final int THREAD_STATUS_NOT_STARTED = 5;
-
-    /**
-     * Returns the name of this thread.
-     *
-     * @return the string containing the thread name.
-     */
-    String name();
-
-    /**
-     * Suspends this thread. The thread can be resumed through
-     * {@link #resume} or resumed with other threads through
-     * {@link VirtualMachine#resume}.
-     * <p>
-     * Unlike {@link java.lang.Thread#suspend},
-     * suspends of both the virtual machine and individual threads are
-     * counted. Before a thread will run again, it must be resumed
-     * (through {@link #resume} or {@link ThreadReference#resume})
-     * the same number of times it has been suspended.
-     * <p>
-     * Suspending single threads with this method has the same dangers
-     * as {@link java.lang.Thread#suspend()}. If the suspended thread
-     * holds a monitor needed by another running thread, deadlock is
-     * possible in the target VM (at least until the suspended thread
-     * is resumed again).
-     * <p>
-     * The suspended thread is guaranteed to remain suspended until
-     * resumed through one of the JDI resume methods mentioned above;
-     * the application in the target VM cannot resume the suspended thread
-     * through {@link java.lang.Thread#resume}.
-     * @throws VMCannotBeModifiedException if the VirtualMachine is read-only - see {@link VirtualMachine#canBeModified()}.
-     */
-    void suspend();
-
-    /**
-     * Resumes this thread. If this thread was not previously suspended
-     * through {@link #suspend} or through {@link VirtualMachine#suspend},
-     * or because of a SUSPEND_ALL or SUSPEND_EVENT_THREAD event, then
-     * invoking this method has no effect. Otherwise, the count of pending
-     * suspends on this thread is decremented. If it is decremented to 0,
-     * the thread will continue to execute.
-     * Note: the normal way to resume from an event related suspension is
-     * via {@link com.sun.jdi.event.EventSet#resume}.
-     * @throws VMCannotBeModifiedException if the VirtualMachine is read-only - see {@link VirtualMachine#canBeModified()}.
-     */
-    void resume();
-
-    /**
-     * Returns the number of pending suspends for this thread. See
-     * {@link #suspend} for an explanation of counted suspends.
-     * @return pending suspend count as an integer
-     */
-    int suspendCount();
-
-    /**
-     * Stops this thread with an asynchronous exception.
-     * A debugger thread in the target VM will stop this thread
-     * with the given {@link java.lang.Throwable} object.
-     *
-     * @param throwable the asynchronous exception to throw.
-     * @throws InvalidTypeException if <code>throwable</code> is not
-     * an instance of java.lang.Throwable in the target VM.
-     * @throws VMCannotBeModifiedException if the VirtualMachine is read-only - see {@link VirtualMachine#canBeModified()}.
-     * @see java.lang.Thread#stop(Throwable)
-     */
-    void stop(ObjectReference throwable) throws InvalidTypeException;
-
-    /**
-     * Interrupts this thread unless the thread has been suspended by the
-     * debugger.
-     * @throws VMCannotBeModifiedException if the VirtualMachine is read-only - see {@link VirtualMachine#canBeModified()}.
-     *
-     * @see java.lang.Thread#interrupt()
-     */
-    void interrupt();
-
-    /**
-     * Returns the thread's status. If the thread is not suspended the
-     * thread's current status is returned. If the thread is suspended, the
-     * thread's status before the suspension is returned (or
-     * {@link #THREAD_STATUS_UNKNOWN} if this information is not available.
-     * {@link #isSuspended} can be used to determine if the thread has been
-     * suspended.
-     *
-     * @return one of
-     * {@link #THREAD_STATUS_UNKNOWN},
-     * {@link #THREAD_STATUS_ZOMBIE},
-     * {@link #THREAD_STATUS_RUNNING},
-     * {@link #THREAD_STATUS_SLEEPING},
-     * {@link #THREAD_STATUS_MONITOR},
-     * {@link #THREAD_STATUS_WAIT},
-     * {@link #THREAD_STATUS_NOT_STARTED},
-     */
-    int status();
-
-    /**
-     * Determines whether the thread has been suspended by the
-     * the debugger.
-     *
-     * @return <code>true</code> if the thread is currently suspended;
-     * <code>false</code> otherwise.
-     */
-    boolean isSuspended();
-
-    /**
-     * Determines whether the thread is suspended at a breakpoint.
-     *
-     * @return <code>true</code> if the thread is currently stopped at
-     * a breakpoint; <code>false</code> otherwise.
-     */
-    boolean isAtBreakpoint();
-
-    /**
-     * Returns this thread's thread group.
-     * @return a {@link ThreadGroupReference} that mirrors this thread's
-     * thread group in the target VM.
-     */
-    ThreadGroupReference threadGroup();
-
-    /**
-     * Returns the number of stack frames in the thread's current
-     * call stack.
-     * The thread must be suspended (normally through an interruption
-     * to the VM) to get this information, and
-     * it is only valid until the thread is resumed again.
-     *
-     * @return an integer frame count
-     * @throws IncompatibleThreadStateException if the thread is
-     * not suspended in the target VM
-     */
-    int frameCount() throws IncompatibleThreadStateException;
-
-    /**
-     * Returns a List containing each {@link StackFrame} in the
-     * thread's current call stack.
-     * The thread must be suspended (normally through an interruption
-     * to the VM) to get this information, and
-     * it is only valid until the thread is resumed again.
-     *
-     * @return a List of {@link StackFrame} with the current frame first
-     * followed by each caller's frame.
-     * @throws IncompatibleThreadStateException if the thread is
-     * not suspended in the target VM
-     */
-    List<StackFrame> frames() throws IncompatibleThreadStateException;
-
-    /**
-     * Returns the {@link StackFrame} at the given index in the
-     * thread's current call stack. Index 0 retrieves the current
-     * frame; higher indices retrieve caller frames.
-     * The thread must be suspended (normally through an interruption
-     * to the VM) to get this information, and
-     * it is only valid until the thread is resumed again.
-     *
-     * @param index the desired frame
-     * @return the requested {@link StackFrame}
-     * @throws IncompatibleThreadStateException if the thread is
-     * not suspended in the target VM
-     * @throws java.lang.IndexOutOfBoundsException if the index is greater than
-     * or equal to {@link #frameCount} or is negative.
-     */
-    StackFrame frame(int index) throws IncompatibleThreadStateException;
-
-    /**
-     * Returns a List containing a range of {@link StackFrame} mirrors
-     * from the thread's current call stack.
-     * The thread must be suspended (normally through an interruption
-     * to the VM) to get this information, and
-     * it is only valid until the thread is resumed again.
-     *
-     * @param start the index of the first frame to retrieve.
-     *       Index 0 represents the current frame.
-     * @param length the number of frames to retrieve
-     * @return a List of {@link StackFrame} with the current frame first
-     * followed by each caller's frame.
-     * @throws IncompatibleThreadStateException if the thread is
-     * not suspended in the target VM
-     * @throws IndexOutOfBoundsException if the specified range is not
-     * within the range of stack frame indicies.
-     * That is, the exception is thrown if any of the following are true:
-     * <pre>    start &lt; 0
-     *    start &gt;= {@link #frameCount}
-     *    length &lt; 0
-     *    (start+length) &gt; {@link #frameCount}</pre>
-     */
-    List<StackFrame> frames(int start, int length)
-        throws IncompatibleThreadStateException;
-
-    /**
-     * Returns a List containing an {@link ObjectReference} for
-     * each monitor owned by the thread.
-     * A monitor is owned by a thread if it has been entered
-     * (via the synchronized statement or entry into a synchronized
-     * method) and has not been relinquished through {@link Object#wait}.
-     * <p>
-     * Not all target virtual machines support this operation.
-     * Use {@link VirtualMachine#canGetOwnedMonitorInfo()}
-     * to determine if the operation is supported.
-     *
-     * @return a List of {@link ObjectReference} objects. The list
-     * has zero length if no monitors are owned by this thread.
-     * @throws java.lang.UnsupportedOperationException if
-     * the target virtual machine does not support this
-     * operation.
-     * @throws IncompatibleThreadStateException if the thread is
-     * not suspended in the target VM
-     */
-    List<ObjectReference> ownedMonitors()
-        throws IncompatibleThreadStateException;
-
-    /**
-     * Returns a List containing a {@link MonitorInfo} object for
-     * each monitor owned by the thread.
-     * A monitor is owned by a thread if it has been entered
-     * (via the synchronized statement or entry into a synchronized
-     * method) and has not been relinquished through {@link Object#wait}.
-     * <p>
-     * Not all target virtual machines support this operation.
-     * Use {@link VirtualMachine#canGetMonitorFrameInfo()}
-     * to determine if the operation is supported.
-     *
-     * @return a List of {@link MonitorInfo} objects. The list
-     * has zero length if no monitors are owned by this thread.
-     * @throws java.lang.UnsupportedOperationException if
-     * the target virtual machine does not support this
-     * operation.
-     * @throws IncompatibleThreadStateException if the thread is
-     * not suspended in the target VM
-     *
-     * @since 1.6
-     */
-    List<MonitorInfo> ownedMonitorsAndFrames()
-        throws IncompatibleThreadStateException;
-
-    /**
-     * Returns an {@link ObjectReference} for the monitor, if any,
-     * for which this thread is currently waiting.
-     * The thread can be waiting for a monitor through entry into a
-     * synchronized method, the synchronized statement, or
-     * {@link Object#wait}.  The {@link #status} method can be used
-     * to differentiate between the first two cases and the third.
-     * <p>
-     * Not all target virtual machines support this operation.
-     * Use {@link VirtualMachine#canGetCurrentContendedMonitor()}
-     * to determine if the operation is supported.
-     *
-     * @return the {@link ObjectReference} corresponding to the
-     * contended monitor, or null if it is not waiting for a monitor.
-     * @throws java.lang.UnsupportedOperationException if
-     * the target virtual machine does not support this
-     * operation.
-     * @throws IncompatibleThreadStateException if the thread is
-     * not suspended in the target VM
-     */
-    ObjectReference currentContendedMonitor() throws IncompatibleThreadStateException;
-
-    /**
-     * Pop stack frames.
-     * <P>
-     * All frames up to and including the <CODE>frame</CODE> are
-     * popped off the stack.
-     * The frame previous to the parameter <CODE>frame</CODE>
-     * will become the current frame.
-     * <P>
-     * After this operation, this thread will be
-     * suspended at the invoke instruction of the target method
-     * that created <CODE>frame</CODE>.
-     * The <CODE>frame</CODE>'s method can be reentered with a step into
-     * the instruction.
-     * <P>
-     * The operand stack is restored, however, any changes
-     * to the arguments that occurred in the called method, remain.
-     * For example, if the method <CODE>foo</CODE>:
-     * <PRE>
-     *    void foo(int x) {
-     *        System.out.println("Foo: " + x);
-     *        x = 4;
-     *        System.out.println("pop here");
-     *    }
-     * </PRE>
-     * was called with <CODE>foo(7)</CODE> and <CODE>foo</CODE>
-     * is popped at the second <CODE>println</CODE> and resumed,
-     * it will print: <CODE>Foo: 4</CODE>.
-     * <P>
-     * Locks acquired by a popped frame are released when it
-     * is popped. This applies to synchronized methods that
-     * are popped, and to any synchronized blocks within them.
-     * <P>
-     * Finally blocks are not executed.
-     * <P>
-     * No aspect of state, other than this thread's execution point and
-     * locks, is affected by this call.  Specifically, the values of
-     * fields are unchanged, as are external resources such as
-     * I/O streams.  Additionally, the target program might be
-     * placed in a state that is impossible with normal program flow;
-     * for example, order of lock acquisition might be perturbed.
-     * Thus the target program may
-     * proceed differently than the user would expect.
-     * <P>
-     * The specified thread must be suspended.
-     * <P>
-     * All <code>StackFrame</code> objects for this thread are
-     * invalidated.
-     * <P>
-     * No events are generated by this method.
-     * <P>
-     * None of the frames through and including the frame for the caller
-     * of <i>frame</i> may be native.
-     * <P>
-     * Not all target virtual machines support this operation.
-     * Use {@link VirtualMachine#canPopFrames() VirtualMachine.canPopFrames()}
-     * to determine if the operation is supported.
-     *
-     * @param frame Stack frame to pop.  <CODE>frame</CODE> is on this
-     * thread's call stack.
-     *
-     * @throws java.lang.UnsupportedOperationException if
-     * the target virtual machine does not support this
-     * operation - see
-     * {@link VirtualMachine#canPopFrames() VirtualMachine.canPopFrames()}.
-     *
-     * @throws IncompatibleThreadStateException if this
-     * thread is not suspended.
-     *
-     * @throws java.lang.IllegalArgumentException if <CODE>frame</CODE>
-     * is not on this thread's call stack.
-     *
-     * @throws NativeMethodException if one of the frames that would be
-     * popped is that of a native method or if the frame previous to
-     * <i>frame</i> is native.
-     *
-     * @throws InvalidStackFrameException if <CODE>frame</CODE> has become
-     * invalid. Once this thread is resumed, the stack frame is
-     * no longer valid.  This exception is also thrown if there are no
-     * more frames.
-     * @throws VMCannotBeModifiedException if the VirtualMachine is read-only - see {@link VirtualMachine#canBeModified()}.
-     *
-     * @since 1.4 */
-    void popFrames(StackFrame frame) throws IncompatibleThreadStateException;
-
-
-    /**
-     * Force a method to return before it reaches a return
-     * statement.
-     * <p>
-     * The method which will return early is referred to as the
-     * called method. The called method is the current method (as
-     * defined by the Frames section in the Java Virtual Machine
-     * Specification) for the specified thread at the time this
-     * method is called.
-     * <p>
-     * The thread must be suspended.
-     * The return occurs when execution of Java programming
-     * language code is resumed on this thread. Between the call to
-     * this method and resumption of thread execution, the
-     * state of the stack is undefined.
-     * <p>
-     * No further instructions are executed in the called
-     * method. Specifically, finally blocks are not executed. Note:
-     * this can cause inconsistent states in the application.
-     * <p>
-     * A lock acquired by calling the called method (if it is a
-     * synchronized method) and locks acquired by entering
-     * synchronized blocks within the called method are
-     * released. Note: this does not apply to native locks or
-     * java.util.concurrent.locks locks.
-     * <p>
-     * Events, such as MethodExit, are generated as they would be in
-     * a normal return.
-     * <p>
-     * The called method must be a non-native Java programming
-     * language method. Forcing return on a thread with only one
-     * frame on the stack causes the thread to exit when resumed.
-     * <p>
-     * The <code>value</code> argument is the value that the
-     * method is to return.
-     * If the return type of the method is void, then value must
-     * be a  {@link VoidValue VoidValue}.
-     * Object values must be assignment compatible with the method return type
-     * (This implies that the method return type must be loaded through the
-     * enclosing class's class loader). Primitive values must be
-     * either assignment compatible with the method return type or must be
-     * convertible to the variable type without loss of information.
-     * See JLS section 5.2 for more information on assignment
-     * compatibility.
-     * <p>
-     * Not all target virtual machines support this operation.
-     * Use {@link VirtualMachine#canForceEarlyReturn()}
-     * to determine if the operation is supported.
-     *
-     * @param value the value the method is to return.
-     *
-     * @throws java.lang.UnsupportedOperationException if
-     * the target virtual machine does not support this
-     * operation - see
-     * {@link VirtualMachine#canGetInstanceInfo() canForceEarlyReturn()}
-     *
-     * @throws IncompatibleThreadStateException if this
-     * thread is not suspended.
-     *
-     * @throws NativeMethodException if the frame to be returned from
-     * is that of a native method.
-     *
-     * @throws InvalidStackFrameException if there are no frames.
-     *
-     * @throws InvalidTypeException if the value's type does not match
-     * the method's return type.
-     *
-     * @throws ClassNotLoadedException if the method's return type has not yet
-     * been loaded through the appropriate class loader.
-     *
-     * @throws VMCannotBeModifiedException if the VirtualMachine is read-only - see {@link VirtualMachine#canBeModified()}.
-     *
-     * @since 1.6
-     */
-    void forceEarlyReturn(Value value) throws InvalidTypeException,
-                                              ClassNotLoadedException,
-                                              IncompatibleThreadStateException;
-
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/Type.java b/ojluni/src/main/java/com/sun/jdi/Type.java
deleted file mode 100755
index 3f216e5..0000000
--- a/ojluni/src/main/java/com/sun/jdi/Type.java
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- * Copyright (c) 1998, 2006, 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.jdi;
-
-/**
- * The mirror for a type in the target VM.
- * This interface is the root of a type hierarchy encompassing primitive
- * types and reference types.
- * <P>
- * A Type may be used to represent a run-time type:
- * <BLOCKQUOTE>
- *   {@link Value}.type()
- * </BLOCKQUOTE>
- * or a compile-time type:
- * <BLOCKQUOTE>
- *  {@link Field#type()} <BR>
- *  {@link Method#returnType()} <BR>
- *  {@link Method#argumentTypes()} <BR>
- *  {@link LocalVariable#type()} <BR>
- *  {@link ArrayType#componentType()}
- * </BLOCKQUOTE>
- * <P>
- * The following table illustrates which subinterfaces of Type
- * are used to mirror types in the target VM --
- * <TABLE BORDER=1 SUMMARY="Maps each type declared in target to a mirrored
- *  instance of a subinterface of PrimitiveType or ReferenceType">
- * <TR BGCOLOR="#EEEEFF">
- *   <TH id="primtype" colspan=3>Subinterfaces of {@link PrimitiveType}</TH>
- * <TR BGCOLOR="#EEEEFF">
- *   <TH id="declared" align="left" colspan=2>Type declared in target as</TH>
- *   <TH id="mirrored" align="left">Is mirrored as an instance of</TH>
- * <TR>
- *   <TD headers="primtype declared" colspan=2><CODE>boolean</CODE></TD>
- *   <TD headers="primtype mirrored"> {@link BooleanType}</TD>
- * <TR>
- *   <TD headers="primtype declared" colspan=2><CODE>byte</CODE></TD>
- *   <TD headers="primtype mirrored">{@link ByteType}</TD>
- * <TR>
- *   <TD headers="primtype declared" colspan=2><CODE>char</CODE></TD>
- *   <TD headers="primtype mirrored">{@link CharType}</TD>
- * <TR>
- *   <TD headers="primtype declared" colspan=2><CODE>double</CODE></TD>
- *   <TD headers="primtype mirrored">{@link DoubleType}</TD>
- * <TR>
- *   <TD headers="primtype declared" colspan=2><CODE>float</CODE></TD>
- *   <TD headers="primtype mirrored">{@link FloatType}</TD>
- * <TR>
- *   <TD headers="primtype declared" colspan=2><CODE>int</CODE></TD>
- *   <TD headers="primtype mirrored">{@link IntegerType}</TD>
- * <TR>
- *   <TD headers="primtype declared" colspan=2><CODE>long</CODE></TD>
- *   <TD headers="primtype mirrored">{@link LongType}</TD>
- * <TR>
- *   <TD headers="primtype declared" colspan=2><CODE>short</CODE></TD>
- *   <TD headers="primtype mirrored">{@link ShortType}</TD>
- * <TR>
- *   <TD headers="primtype declared" colspan=2><CODE>void</CODE></TD>
- *   <TD headers="primtype mirrored">{@link VoidType}</TD>
- * <TR BGCOLOR="#EEEEFF">
- *   <TH id="reftype"  colspan=3>Subinterfaces of {@link ReferenceType}</TH>
- * <TR BGCOLOR="#EEEEFF">
- *   <TH id="declared2" align="left">Type declared in target as</TH>
- *   <TH id="example2"  align="left">For example</TH>
- *   <TH id="mirrored2" align="left">Is mirrored as an instance of</TH>
- * <TR>
- *   <TD headers="reftype declared2"><I>a class</I></TD>
- *   <TD headers="reftype example2"><CODE>Date</CODE></TD>
- *   <TD headers="reftype mirrored2">{@link ClassType}</TD>
- * <TR>
- *   <TD headers="reftype declared2"><I>an interface</I></TD>
- *   <TD headers="reftype example2"><CODE>Runnable</CODE></TD>
- *   <TD headers="reftype mirrored2">{@link InterfaceType}</TD>
- * <TR>
- *   <TD headers="reftype declared2"><I>an array</I></TD>
- *   <TD headers="reftype example2">&nbsp;</TD>
- *   <TD headers="reftype mirrored2">{@link ArrayType}</TD>
- * <TR>
- *   <TD headers="reftype declared2"><I>an array</I></TD>
- *   <TD headers="reftype example2"><CODE>int[]</CODE></TD>
- *   <TD headers="reftype mirrored2">{@link ArrayType} whose
- *         {@link ArrayType#componentType() componentType()} is
- *         {@link IntegerType}</TD>
- * <TR>
- *   <TD headers="reftype declared2"><I>an array</I></TD>
- *   <TD headers="reftype example2"><CODE>Date[]</CODE></TD>
- *   <TD headers="reftype mirrored2">{@link ArrayType} whose
- *         {@link ArrayType#componentType() componentType()} is
- *         {@link ClassType}</TD>
- * <TR>
- *   <TD headers="reftype declared2"><I>an array</I></TD>
- *   <TD headers="reftype example2"><CODE>Runnable[]</CODE></TD>
- *   <TD headers="reftype mirrored2">{@link ArrayType} whose
- *         {@link ArrayType#componentType() componentType()} is
- *         {@link InterfaceType}</TD>
- * </TABLE>
- *
- * @see PrimitiveType Subinterface PrimitiveType
- * @see ReferenceType Subinterface ReferenceType
- * @see Value Value - for relationship between Type and Value
- * @see Field#type() Field.type() - for usage examples
- *
- * @author Robert Field
- * @author Gordon Hirsch
- * @author James McIlree
- * @since  1.3
- */
-public interface Type extends Mirror
-{
-    /**
-     * Returns the JNI-style signature for this type.
-     * <p>
-     * For primitive classes
-     * the returned signature is the signature of the corresponding primitive
-     * type; for example, "I" is returned as the signature of the class
-     * represented by {@link java.lang.Integer#TYPE}.
-     *
-     * @see <a href="doc-files/signature.html">Type Signatures</a>
-     * @return the string containing the type signature.
-     */
-    String signature();
-
-    /**
-     * @return a text representation of this type.
-     */
-    String name();
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/TypeComponent.java b/ojluni/src/main/java/com/sun/jdi/TypeComponent.java
deleted file mode 100755
index 6c6e283..0000000
--- a/ojluni/src/main/java/com/sun/jdi/TypeComponent.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package com.sun.jdi;
-
-/**
- * An entity declared within a user defined
- * type (class or interface).
- * This interface is the root of the type
- * component hierarchy which
- * includes {@link Field} and {@link Method}.
- * Type components of the same name declared in different classes
- * (including those related by inheritance) have different
- * TypeComponent objects.
- * TypeComponents can be used alone to retrieve static information
- * about their declaration, or can be used in conjunction with a
- * {@link ReferenceType} or {@link ObjectReference} to access values
- * or invoke, as applicable.
- *
- * @author Robert Field
- * @author Gordon Hirsch
- * @author James McIlree
- * @since  1.3
- */
-public interface TypeComponent extends Mirror, Accessible {
-
-    /**
-     * Gets the name of this type component.
-     * <P>
-     * Note: for fields, this is the field name; for methods,
-     * this is the method name; for constructors, this is &lt;init&gt;;
-     * for static initializers, this is &lt;clinit&gt;.
-     *
-     * @return a string containing the name.
-     */
-    String name();
-
-    /**
-     * Gets the JNI-style signature for this type component. The
-     * signature is encoded type information as defined
-     * in the JNI documentation. It is a convenient, compact format for
-     * for manipulating type information internally, not necessarily
-     * for display to an end user. See {@link Field#typeName} and
-     * {@link Method#returnTypeName} for ways to help get a more readable
-     * representation of the type.
-     *
-     * @see <a href="doc-files/signature.html">Type Signatures</a>
-     * @return a string containing the signature
-     */
-    String signature();
-
-    /**
-     * Gets the generic signature for this TypeComponent if there is one.
-     * Generic signatures are described in the
-     * <cite>The Java&trade; Virtual Machine Specification</cite>.
-     *
-     * @return a string containing the generic signature, or <code>null</code>
-     * if there is no generic signature.
-     *
-     * @since 1.5
-     */
-    String genericSignature();
-
-    /**
-     * Returns the type in which this component was declared. The
-     * returned {@link ReferenceType} mirrors either a class or an
-     * interface in the target VM.
-     *
-     * @return a {@link ReferenceType} for the type that declared
-     * this type component.
-     */
-    ReferenceType declaringType();
-
-    /**
-     * Determines if this TypeComponent is static.
-     * Return value is undefined for constructors and static initializers.
-     *
-     * @return <code>true</code> if this type component was declared
-     * static; false otherwise.
-     */
-    boolean isStatic();
-
-    /**
-     * Determines if this TypeComponent is final.
-     * Return value is undefined for constructors and static initializers.
-     *
-     * @return <code>true</code> if this type component was declared
-     * final; false otherwise.
-     */
-    boolean isFinal();
-
-    /**
-     * Determines if this TypeComponent is synthetic. Synthetic members
-     * are generated by the compiler and are not present in the source
-     * code for the containing class.
-     * <p>
-     * Not all target VMs support this query. See
-     * {@link VirtualMachine#canGetSyntheticAttribute} to determine if the
-     * operation is supported.
-     *
-     * @return <code>true</code> if this type component is synthetic;
-     * <code>false</code> otherwise.
-     * @throws java.lang.UnsupportedOperationException if the target
-     * VM cannot provide information on synthetic attributes.
-     */
-    boolean isSynthetic();
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/VMCannotBeModifiedException.java b/ojluni/src/main/java/com/sun/jdi/VMCannotBeModifiedException.java
deleted file mode 100755
index 855c36b..0000000
--- a/ojluni/src/main/java/com/sun/jdi/VMCannotBeModifiedException.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-package com.sun.jdi;
-
-/**
- * Thrown to indicate that the operation is invalid because it would
- * modify the VM and the VM is read-only.  See {@link VirtualMachine#canBeModified()}.
- *
- * @author Jim Holmlund
- * @since  1.5
- */
-public class VMCannotBeModifiedException extends UnsupportedOperationException {
-    public VMCannotBeModifiedException() {
-        super();
-    }
-
-    public VMCannotBeModifiedException(String s) {
-        super(s);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/VMDisconnectedException.java b/ojluni/src/main/java/com/sun/jdi/VMDisconnectedException.java
deleted file mode 100755
index 4025995..0000000
--- a/ojluni/src/main/java/com/sun/jdi/VMDisconnectedException.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (c) 1998, 1999, 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.jdi;
-
-/**
- * Unchecked exception thrown to indicate that the
- * requested operation cannot be
- * completed because there is no longer a connection to the target VM.
- *
- * @author Robert Field
- * @since  1.3
- */
-public class VMDisconnectedException extends RuntimeException {
-
-    public VMDisconnectedException() {
-        super();
-    }
-    public VMDisconnectedException(String message) {
-        super(message);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/VMMismatchException.java b/ojluni/src/main/java/com/sun/jdi/VMMismatchException.java
deleted file mode 100755
index cfa7fd6..0000000
--- a/ojluni/src/main/java/com/sun/jdi/VMMismatchException.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (c) 1999, 2000, 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.jdi;
-
-/**
- * Thrown to indicate that the requested operation cannot be
- * completed because the a mirror from one target VM is being
- * combined with a mirror from another target VM.
- *
- * @author Gordon Hirsch
- * @since  1.3
- */
-public class VMMismatchException extends RuntimeException {
-    public VMMismatchException() {
-        super();
-    }
-
-    public VMMismatchException(String s) {
-        super(s);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/VMOutOfMemoryException.java b/ojluni/src/main/java/com/sun/jdi/VMOutOfMemoryException.java
deleted file mode 100755
index 0908aa1..0000000
--- a/ojluni/src/main/java/com/sun/jdi/VMOutOfMemoryException.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (c) 1999, 2000, 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.jdi;
-
-/**
- * Thrown to indicate that the requested operation cannot be
- * completed because the target VM has run out of memory.
- *
- * @author Gordon Hirsch
- * @since  1.3
- */
-public class VMOutOfMemoryException extends RuntimeException {
-    public VMOutOfMemoryException() {
-        super();
-    }
-
-    public VMOutOfMemoryException(String s) {
-        super(s);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/Value.java b/ojluni/src/main/java/com/sun/jdi/Value.java
deleted file mode 100755
index 316f4b8..0000000
--- a/ojluni/src/main/java/com/sun/jdi/Value.java
+++ /dev/null
@@ -1,181 +0,0 @@
-/*
- * Copyright (c) 1998, 2006, 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.jdi;
-
-/**
- * The mirror for a value in the target VM.
- * This interface is the root of a
- * value hierarchy encompassing primitive values and object values.
- * <P>
- * Some examples of where values may be accessed:
- * <BLOCKQUOTE><TABLE SUMMARY="layout">
- * <TR>
- *   <TD>{@link ObjectReference#getValue(com.sun.jdi.Field)
- *                 ObjectReference.getValue(Field)}
- *   <TD>- value of a field
- * <TR>
- *   <TD>{@link StackFrame#getValue(com.sun.jdi.LocalVariable)
- *                 StackFrame.getValue(LocalVariable)}
- *   <TD>- value of a variable
- * <TR>
- *   <TD>{@link VirtualMachine#mirrorOf(double)
- *                 VirtualMachine.mirrorOf(double)}
- *   <TD>- created in the target VM by the JDI client
- * <TR>
- *   <TD>{@link com.sun.jdi.event.ModificationWatchpointEvent#valueToBe()
- *                 ModificationWatchpointEvent.valueToBe()}
- *   <TD>- returned with an event
- * </TABLE></BLOCKQUOTE>
- * <P>
- * The following table illustrates which subinterfaces of Value
- * are used to mirror values in the target VM --
- * <TABLE BORDER=1 SUMMARY="Maps each kind of value to a mirrored
- *  instance of a subinterface of Value">
- * <TR BGCOLOR="#EEEEFF">
- *   <TH id="primval" colspan=4>Subinterfaces of {@link PrimitiveValue}</TH>
- * <TR BGCOLOR="#EEEEFF">
- *   <TH id="kind"     align="left">Kind of value</TH>
- *   <TH id="example"  align="left">For example -<br>expression in target</TH>
- *   <TH id="mirrored" align="left">Is mirrored as an<br>instance of</TH>
- *   <TH id="type"     align="left">{@link Type} of value<br>{@link #type() Value.type()}</TH>
- * <TR>
- *   <TD headers="primval kind">     a boolean</TD>
- *   <TD headers="primval example">  <CODE>true</CODE></TD>
- *   <TD headers="primval mirrored"> {@link BooleanValue}</TD>
- *   <TD headers="primval type">     {@link BooleanType}</TD>
- * <TR>
- *   <TD headers="primval kind">     a byte</TD>
- *   <TD headers="primval example">  <CODE>(byte)4</CODE></TD>
- *   <TD headers="primval mirrored"> {@link ByteValue}</TD>
- *   <TD headers="primval type">     {@link ByteType}</TD>
- * <TR>
- *   <TD headers="primval kind">     a char</TD>
- *   <TD headers="primval example">  <CODE>'a'</CODE></TD>
- *   <TD headers="primval mirrored"> {@link CharValue}</TD>
- *   <TD headers="primval type">     {@link CharType}</TD>
- * <TR>
- *   <TD headers="primval kind">     a double</TD>
- *   <TD headers="primval example">  <CODE>3.1415926</CODE></TD>
- *   <TD headers="primval mirrored"> {@link DoubleValue}</TD>
- *   <TD headers="primval type">     {@link DoubleType}</TD>
- * <TR>
- *   <TD headers="primval kind">     a float</TD>
- *   <TD headers="primval example">  <CODE>2.5f</CODE></TD>
- *   <TD headers="primval mirrored"> {@link FloatValue}</TD>
- *   <TD headers="primval type">     {@link FloatType}</TD>
- * <TR>
- *   <TD headers="primval kind">     an int</TD>
- *   <TD headers="primval example">  <CODE>22</CODE></TD>
- *   <TD headers="primval mirrored"> {@link IntegerValue}</TD>
- *   <TD headers="primval type">     {@link IntegerType}</TD>
- * <TR>
- *   <TD headers="primval kind">     a long</TD>
- *   <TD headers="primval example">  <CODE>1024L</CODE></TD>
- *   <TD headers="primval mirrored"> {@link LongValue}</TD>
- *   <TD headers="primval type">     {@link LongType}</TD>
- * <TR>
- *   <TD headers="primval kind">     a short</TD>
- *   <TD headers="primval example">  <CODE>(short)12</CODE></TD>
- *   <TD headers="primval mirrored"> {@link ShortValue}</TD>
- *   <TD headers="primval type">     {@link ShortType}</TD>
- * <TR>
- *   <TD headers="primval kind">     a void</TD>
- *   <TD headers="primval example">  <CODE>&nbsp;</CODE></TD>
- *   <TD headers="primval mirrored"> {@link VoidValue}</TD>
- *   <TD headers="primval type">     {@link VoidType}</TD>
- * <TR BGCOLOR="#EEEEFF">
- *   <TH id="objref" colspan=4>Subinterfaces of {@link ObjectReference}</TH>
- * <TR BGCOLOR="#EEEEFF">
- *   <TH id="kind2"     align="left">Kind of value</TH>
- *   <TH id="example2"  align="left">For example -<br>expression in target</TH>
- *   <TH id="mirrored2" align="left">Is mirrored as an<br>instance of</TH>
- *   <TH id="type2"     align="left">{@link Type} of value<br>{@link #type() Value.type()}</TH>
- * <TR>
- *   <TD headers="objref kind2">     a class instance</TD>
- *   <TD headers="objref example2">  <CODE>this</CODE></TD>
- *   <TD headers="objref mirrored2"> {@link ObjectReference}</TD>
- *   <TD headers="objref type2">     {@link ClassType}</TD>
- * <TR>
- *   <TD headers="objref kind2">     an array</TD>
- *   <TD headers="objref example2">  <CODE>new int[5]</CODE></TD>
- *   <TD headers="objref mirrored2"> {@link ArrayReference}</TD>
- *   <TD headers="objref type2">     {@link ArrayType}</TD>
- * <TR>
- *   <TD headers="objref kind2">     a string</TD>
- *   <TD headers="objref example2">  <CODE>"hello"</CODE></TD>
- *   <TD headers="objref mirrored2"> {@link StringReference}</TD>
- *   <TD headers="objref type2">     {@link ClassType}</TD>
- * <TR>
- *   <TD headers="objref kind2">     a thread</TD>
- *   <TD headers="objref example2">  <CODE>Thread.currentThread()</CODE></TD>
- *   <TD headers="objref mirrored2"> {@link ThreadReference}</TD>
- *   <TD headers="objref type2">     {@link ClassType}</TD>
- * <TR>
- *   <TD headers="objref kind2">     a thread group</TD>
- *   <TD headers="objref example2">  <CODE>Thread.currentThread()<br>&nbsp;&nbsp;.getThreadGroup()</CODE></TD>
- *   <TD headers="objref mirrored2"> {@link ThreadGroupReference}</TD>
- *   <TD headers="objref type2">     {@link ClassType}</TD>
- * <TR>
- *   <TD headers="objref kind2">     a <CODE>java.lang.Class</CODE><br>instance</TD>
- *   <TD headers="objref example2">  <CODE>this.getClass()</CODE></TD>
- *   <TD headers="objref mirrored2"> {@link ClassObjectReference}</TD>
- *   <TD headers="objref type2">     {@link ClassType}</TD>
- * <TR>
- *   <TD headers="objref kind2">     a class loader</TD>
- *   <TD headers="objref example2">  <CODE>this.getClass()<br>&nbsp;&nbsp;.getClassLoader() </CODE></TD>
- *   <TD headers="objref mirrored2"> {@link ClassLoaderReference}</TD>
- *   <TD headers="objref type2">     {@link ClassType}</TD>
- * <TR BGCOLOR="#EEEEFF">
- *   <TH id="other" colspan=4>Other</TH>
- * <TR BGCOLOR="#EEEEFF">
- *   <TH id="kind3"     align="left">Kind of value</TD>
- *   <TH id="example3"  align="left">For example -<br>expression in target</TD>
- *   <TH id="mirrored3" align="left">Is mirrored as</TD>
- *   <TH id="type3"     align="left">{@link Type} of value</TD>
- * <TR>
- *   <TD headers="other kind3">     null</TD>
- *   <TD headers="other example3">  <CODE>null</CODE></TD>
- *   <TD headers="other mirrored3"> <CODE>null</CODE></TD>
- *   <TD headers="other type3">     n/a</TD>
- * </TABLE>
- *
- * @author Robert Field
- * @author Gordon Hirsch
- * @author James McIlree
- * @since  1.3
- */
-
-public interface Value extends Mirror
-{
-    /**
-     * Returns the run-time type of this value.
-     *
-     * @see Type
-     * @return a {@link Type} which mirrors the value's type in the
-     * target VM.
-     */
-    Type type();
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/VirtualMachine.java b/ojluni/src/main/java/com/sun/jdi/VirtualMachine.java
deleted file mode 100755
index 38faf90..0000000
--- a/ojluni/src/main/java/com/sun/jdi/VirtualMachine.java
+++ /dev/null
@@ -1,863 +0,0 @@
-/*
- * Copyright (c) 1998, 2006, 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.jdi;
-
-import com.sun.jdi.event.EventQueue;
-import com.sun.jdi.request.EventRequestManager;
-
-import java.util.List;
-import java.util.Map;
-
-/**
- * A virtual machine targeted for debugging.
- * More precisely, a {@link Mirror mirror} representing the
- * composite state of the target VM.
- * All other mirrors are associated with an instance of this
- * interface.  Access to all other mirrors is achieved
- * directly or indirectly through an instance of this
- * interface.
- * Access to global VM properties and control of VM execution
- * are supported directly by this interface.
- * <P>
- * Instances of this interface are created by instances of
- * {@link com.sun.jdi.connect.Connector}. For example,
- * an {@link com.sun.jdi.connect.AttachingConnector AttachingConnector}
- * attaches to a target VM and returns its virtual machine mirror.
- * A Connector will typically create a VirtualMachine by invoking
- * the VirtualMachineManager's {@link
- * com.sun.jdi.VirtualMachineManager#createVirtualMachine(Connection)}
- * createVirtualMachine(Connection) method.
- * <p>
- * Note that a target VM launched by a launching connector is not
- * guaranteed to be stable until after the {@link com.sun.jdi.event.VMStartEvent} has been
- * received.
- * <p>
- * Any method on <code>VirtualMachine</code> which
- * takes <code>VirtualMachine</code> as an parameter may throw
- * {@link com.sun.jdi.VMDisconnectedException} if the target VM is
- * disconnected and the {@link com.sun.jdi.event.VMDisconnectEvent} has been or is
- * available to be read from the {@link com.sun.jdi.event.EventQueue}.
- * <p>
- * Any method on <code>VirtualMachine</code> which
- * takes <code>VirtualMachine</code> as an parameter may throw
- * {@link com.sun.jdi.VMOutOfMemoryException} if the target VM has run out of memory.
- *
- * @author Robert Field
- * @author Gordon Hirsch
- * @author James McIlree
- * @since  1.3
- */
-public interface VirtualMachine extends Mirror {
-
-    /**
-     * Returns the loaded reference types that
-     * match a given name. The name must be fully qualified
-     * (for example, java.lang.String). The returned list
-     * will contain a {@link ReferenceType} for each class
-     * or interface found with the given name. The search
-     * is confined to loaded classes only; no attempt is made
-     * to load a class of the given name.
-     * <P>
-     * The returned list will include reference types
-     * loaded at least to the point of preparation and
-     * types (like array) for which preparation is
-     * not defined.
-     *
-     * @param className the class/interface name to search for
-     * @return a list of {@link ReferenceType} objects, each
-     * mirroring a type in the target VM with the given name.
-     */
-    List<ReferenceType> classesByName(String className);
-
-    /**
-     * Returns all loaded types. For each loaded type in the target
-     * VM a {@link ReferenceType} will be placed in the returned list.
-     * The list will include ReferenceTypes which mirror classes,
-     * interfaces, and array types.
-     * <P>
-     * The returned list will include reference types
-     * loaded at least to the point of preparation and
-     * types (like array) for which preparation is
-     * not defined.
-     *
-     * @return a list of {@link ReferenceType} objects, each mirroring
-     * a loaded type in the target VM.
-     */
-    List<ReferenceType> allClasses();
-
-    /**
-     * All classes given are redefined according to the
-     * definitions supplied.  A method in a redefined class
-     * is called 'equivalent' (to the old version of the
-     * method) if
-     * <UL>
-     * <LI>their bytecodes are the same except for indicies into
-     *   the constant pool, and
-     * <LI>the referenced constants are equal.
-     * </UL>
-     * Otherwise, the new method is called 'non-equivalent'.
-     * If a redefined method has active stack frames, those active
-     * frames continue to run the bytecodes of the previous version of the
-     * method.  If the new version of such a method is non-equivalent,
-     * then a method from one of these active frames is called 'obsolete' and
-     * {@link Method#isObsolete Method.isObsolete()}
-     * will return true when called on one of these methods.
-     * If resetting such a frame is desired, use
-     * {@link ThreadReference#popFrames ThreadReference.popFrames(StackFrame)}
-     * to pop the old obsolete method execution from the stack.
-     * New invocations of redefined methods will always invoke the new versions.
-     * <p>
-     * This function does not cause any initialization except
-     * that which would occur under the customary JVM semantics.
-     * In other words, redefining a class does not cause
-     * its initializers to be run. The values of preexisting
-     * static variables will remain as they were prior to the
-     * call. However, completely uninitialized (new) static
-     * variables will be assigned their default value.
-     * <p>
-     * If a redefined class has instances then all those
-     * instances will have the fields defined by the redefined
-     * class at the completion of the call. Preexisting fields
-     * will retain their previous values. Any new fields will
-     * have their default values; no instance initializers or
-     * constructors are run.
-     * <p>
-     * Threads need not be suspended.
-     * <p>
-     * No events are generated by this function.
-     * <p>
-     * All breakpoints in the redefined classes are deleted.
-     * <p>
-     * Not all target virtual machines support this operation.
-     * Use {@link #canRedefineClasses() canRedefineClasses()}
-     * to determine if the operation is supported.
-     * Use {@link #canAddMethod() canAddMethod()}
-     * to determine if the redefinition can add methods.
-     * Use {@link #canUnrestrictedlyRedefineClasses() canUnrestrictedlyRedefineClasses()}
-     * to determine if the redefinition can change the schema,
-     * delete methods, change the class hierarchy, etc.
-     *
-     * @param classToBytes A map from {@link ReferenceType}
-     * to array of byte.
-     * The bytes represent the new class definition and
-     * are in Java Virtual Machine class file format.
-     *
-     * @throws java.lang.UnsupportedOperationException if
-     * the target virtual machine does not support this
-     * operation.
-     * <UL>
-     * <LI>If {@link #canRedefineClasses() canRedefineClasses()}
-     * is false any call of this method will throw this exception.
-     * <LI>If {@link #canAddMethod() canAddMethod()} is false
-     * attempting to add a method will throw this exception.
-     * <LI>If {@link #canUnrestrictedlyRedefineClasses()
-     *            canUnrestrictedlyRedefineClasses()}
-     * is false, attempting any of the following will throw
-     * this exception
-     *   <UL>
-     *   <LI>changing the schema (the fields)
-     *   <LI>changing the hierarchy (subclasses, interfaces)
-     *   <LI>deleting a method
-     *   <LI>changing class modifiers
-     *   <LI>changing method modifiers
-     *   </UL>
-     * </UL>
-     *
-     * @throws java.lang.NoClassDefFoundError if the bytes
-     * don't correspond to the reference type (the names
-     * don't match).
-     *
-     * @throws java.lang.VerifyError if a "verifier" detects
-     * that a class, though well formed, contains an internal
-     * inconsistency or security problem.
-     *
-     * @throws java.lang.ClassFormatError if the bytes
-     * do not represent a valid class.
-     *
-     * @throws java.lang.ClassCircularityError if a
-     * circularity has been detected while initializing a class.
-     *
-     * @throws java.lang.UnsupportedClassVersionError if the
-     * major and minor version numbers in bytes
-     * are not supported by the VM.
-     *
-     * @throws VMCannotBeModifiedException if the VirtualMachine is read-only - see {@link VirtualMachine#canBeModified()}.
-     *
-     * @see Method#isObsolete
-     * @see ThreadReference#popFrames
-     * @see #canRedefineClasses
-     * @see #canAddMethod
-     * @see #canUnrestrictedlyRedefineClasses
-     *
-     * @since 1.4
-     */
-    void redefineClasses(Map<? extends ReferenceType,byte[]> classToBytes);
-
-    /**
-     * Returns a list of the currently running threads. For each
-     * running thread in the target VM, a {@link ThreadReference}
-     * that mirrors it is placed in the list.
-     * The returned list contains threads created through
-     * java.lang.Thread, all native threads attached to
-     * the target VM through JNI, and system threads created
-     * by the target VM. Thread objects that have
-     * not yet been started
-     * (see {@link java.lang.Thread#start Thread.start()})
-     * and thread objects that have
-     * completed their execution are not included in the returned list.
-     *
-     * @return a list of {@link ThreadReference} objects, one for each
-     * running thread in the mirrored VM.
-     */
-    List<ThreadReference> allThreads();
-
-    /**
-     * Suspends the execution of the application running in this
-     * virtual machine. All threads currently running will be suspended.
-     * <p>
-     * Unlike {@link java.lang.Thread#suspend Thread.suspend()},
-     * suspends of both the virtual machine and individual threads are
-     * counted. Before a thread will run again, it must be resumed
-     * (through {@link #resume} or {@link ThreadReference#resume})
-     * the same number of times it has been suspended.
-     *
-     * @throws VMCannotBeModifiedException if the VirtualMachine is read-only - see {@link VirtualMachine#canBeModified()}.
-     */
-    void suspend();
-
-    /**
-     * Continues the execution of the application running in this
-     * virtual machine. All threads are resumed as documented in
-     * {@link ThreadReference#resume}.
-     *
-     * @throws VMCannotBeModifiedException if the VirtualMachine is read-only - see {@link VirtualMachine#canBeModified()}.
-     *
-     * @see #suspend
-     */
-    void resume();
-
-    /**
-     * Returns each thread group which does not have a parent. For each
-     * top level thread group a {@link ThreadGroupReference} is placed in the
-     * returned list.
-     * <p>
-     * This command may be used as the first step in building a tree
-     * (or trees) of the existing thread groups.
-     *
-     * @return a list of {@link ThreadGroupReference} objects, one for each
-     * top level thread group.
-     */
-    List<ThreadGroupReference> topLevelThreadGroups();
-
-    /**
-     * Returns the event queue for this virtual machine.
-     * A virtual machine has only one {@link EventQueue} object, this
-     * method will return the same instance each time it
-     * is invoked.
-     *
-     * @throws VMCannotBeModifiedException if the VirtualMachine is read-only - see {@link VirtualMachine#canBeModified()}.
-     *
-     * @return the {@link EventQueue} for this virtual machine.
-     */
-    EventQueue eventQueue();
-
-    /**
-     * Returns the event request manager for this virtual machine.
-     * The {@link EventRequestManager} controls user settable events
-     * such as breakpoints.
-     * A virtual machine has only one {@link EventRequestManager} object,
-     * this method will return the same instance each time it
-     * is invoked.
-     *
-     * @throws VMCannotBeModifiedException if the VirtualMachine is read-only - see {@link VirtualMachine#canBeModified()}.
-     *
-     * @return the {@link EventRequestManager} for this virtual machine.
-     */
-    EventRequestManager eventRequestManager();
-
-    /**
-     * Creates a {@link BooleanValue} for the given value. This value
-     * can be used for setting and comparing against a value retrieved
-     * from a variable or field in this virtual machine.
-     *
-     * @param value a boolean for which to create the value
-     * @return the {@link BooleanValue} for the given boolean.
-     */
-    BooleanValue mirrorOf(boolean value);
-
-    /**
-     * Creates a {@link ByteValue} for the given value. This value
-     * can be used for setting and comparing against a value retrieved
-     * from a variable or field in this virtual machine.
-     *
-     * @param value a byte for which to create the value
-     * @return the {@link ByteValue} for the given byte.
-     */
-    ByteValue mirrorOf(byte value);
-
-    /**
-     * Creates a {@link CharValue} for the given value. This value
-     * can be used for setting and comparing against a value retrieved
-     * from a variable or field in this virtual machine.
-     *
-     * @param value a char for which to create the value
-     * @return the {@link CharValue} for the given char.
-     */
-    CharValue mirrorOf(char value);
-
-    /**
-     * Creates a {@link ShortValue} for the given value. This value
-     * can be used for setting and comparing against a value retrieved
-     * from a variable or field in this virtual machine.
-     *
-     * @param value a short for which to create the value
-     * @return the {@link ShortValue} for the given short.
-     */
-    ShortValue mirrorOf(short value);
-
-    /**
-     * Creates an {@link IntegerValue} for the given value. This value
-     * can be used for setting and comparing against a value retrieved
-     * from a variable or field in this virtual machine.
-     *
-     * @param value an int for which to create the value
-     * @return the {@link IntegerValue} for the given int.
-     */
-    IntegerValue mirrorOf(int value);
-
-    /**
-     * Creates a {@link LongValue} for the given value. This value
-     * can be used for setting and comparing against a value retrieved
-     * from a variable or field in this virtual machine.
-     *
-     * @param value a long for which to create the value
-     * @return the {@link LongValue} for the given long.
-     */
-    LongValue mirrorOf(long value);
-
-    /**
-     * Creates a {@link FloatValue} for the given value. This value
-     * can be used for setting and comparing against a value retrieved
-     * from a variable or field in this virtual machine.
-     *
-     * @param value a float for which to create the value
-     * @return the {@link FloatValue} for the given float.
-     */
-    FloatValue mirrorOf(float value);
-
-    /**
-     * Creates a {@link DoubleValue} for the given value. This value
-     * can be used for setting and comparing against a value retrieved
-     * from a variable or field in this virtual machine.
-     *
-     * @param value a double for which to create the value
-     * @return the {@link DoubleValue} for the given double.
-     */
-    DoubleValue mirrorOf(double value);
-
-    /**
-     * Creates a string in this virtual machine.
-     * The created string can be used for setting and comparing against
-     * a string value retrieved from a variable or field in this
-     * virtual machine.
-     *
-     * @param value the string to be created
-     * @return a {@link StringReference} that mirrors the newly created
-     * string in the target VM.
-     * @throws VMCannotBeModifiedException if the VirtualMachine is read-only
-     * -see {@link VirtualMachine#canBeModified()}.
-     */
-    StringReference mirrorOf(String value);
-
-
-    /**
-     * Creates a {@link VoidValue}.  This value
-     * can be passed to {@link ThreadReference#forceEarlyReturn}
-     * when a void method is to be exited.
-     *
-     * @return the {@link VoidValue}.
-     */
-    VoidValue mirrorOfVoid();
-
-    /**
-     * Returns the {@link java.lang.Process} object for this
-     * virtual machine if launched
-     * by a {@link com.sun.jdi.connect.LaunchingConnector}
-     *
-     * @return the {@link java.lang.Process} object for this virtual
-     * machine, or null if it was not launched by a
-     * {@link com.sun.jdi.connect.LaunchingConnector}.
-     * @throws VMCannotBeModifiedException if the VirtualMachine is read-only
-     * -see {@link VirtualMachine#canBeModified()}.
-     */
-    Process process();
-
-    /**
-     * Invalidates this virtual machine mirror.
-     * The communication channel to the target VM is closed, and
-     * the target VM prepares to accept another subsequent connection
-     * from this debugger or another debugger, including the
-     * following tasks:
-     * <ul>
-     * <li>All event requests are cancelled.
-     * <li>All threads suspended by {@link #suspend} or by
-     * {@link ThreadReference#suspend} are resumed as many
-     * times as necessary for them to run.
-     * <li>Garbage collection is re-enabled in all cases where it was
-     * disabled through {@link ObjectReference#disableCollection}.
-     * </ul>
-     * Any current method invocations executing in the target VM
-     * are continued after the disconnection. Upon completion of any such
-     * method invocation, the invoking thread continues from the
-     * location where it was originally stopped.
-     * <p>
-     * Resources originating in
-     * this VirtualMachine (ObjectReferences, ReferenceTypes, etc.)
-     * will become invalid.
-     */
-    void dispose();
-
-    /**
-     * Causes the mirrored VM to terminate with the given error code.
-     * All resources associated with this VirtualMachine are freed.
-     * If the mirrored VM is remote, the communication channel
-     * to it will be closed. Resources originating in
-     * this VirtualMachine (ObjectReferences, ReferenceTypes, etc.)
-     * will become invalid.
-     * <p>
-     * Threads running in the mirrored VM are abruptly terminated.
-     * A thread death exception is not thrown and
-     * finally blocks are not run.
-     *
-     * @param exitCode the exit code for the target VM.  On some platforms,
-     * the exit code might be truncated, for example, to the lower order 8 bits.
-     *
-     * @throws VMCannotBeModifiedException if the VirtualMachine is read-only - see {@link VirtualMachine#canBeModified()}.
-     */
-    void exit(int exitCode);
-
-    /**
-     * Determines if the target VM supports watchpoints
-     * for field modification.
-     *
-     * @return <code>true</code> if the feature is supported,
-     * <code>false</code> otherwise.
-     */
-    boolean canWatchFieldModification();
-
-    /**
-     * Determines if the target VM supports watchpoints
-     * for field access.
-     *
-     * @return <code>true</code> if the feature is supported,
-     * <code>false</code> otherwise.
-     */
-    boolean canWatchFieldAccess();
-
-    /**
-     * Determines if the target VM supports the retrieval
-     * of a method's bytecodes.
-     *
-     * @return <code>true</code> if the feature is supported,
-     * <code>false</code> otherwise.
-     */
-    boolean canGetBytecodes();
-
-    /**
-     * Determines if the target VM supports the query
-     * of the synthetic attribute of a method or field.
-     *
-     * @return <code>true</code> if the feature is supported,
-     * <code>false</code> otherwise.
-     */
-    boolean canGetSyntheticAttribute();
-
-    /**
-     * Determines if the target VM supports the retrieval
-     * of the monitors owned by a thread.
-     *
-     * @return <code>true</code> if the feature is supported,
-     * <code>false</code> otherwise.
-     */
-    boolean canGetOwnedMonitorInfo();
-
-    /**
-     * Determines if the target VM supports the retrieval
-     * of the monitor for which a thread is currently waiting.
-     *
-     * @return <code>true</code> if the feature is supported,
-     * <code>false</code> otherwise.
-     */
-    boolean canGetCurrentContendedMonitor();
-
-    /**
-     * Determines if the target VM supports the retrieval
-     * of the monitor information for an object.
-     *
-     * @return <code>true</code> if the feature is supported,
-     * <code>false</code> otherwise.
-     */
-    boolean canGetMonitorInfo();
-
-    /**
-     * Determines if the target VM supports filtering
-     * events by specific instance object.  For example,
-     * see {@link com.sun.jdi.request.BreakpointRequest#addInstanceFilter}.
-     *
-     * @return <code>true</code> if the feature is supported,
-     * <code>false</code> otherwise.
-     */
-    boolean canUseInstanceFilters();
-
-    /**
-     * Determines if the target VM supports any level
-     * of class redefinition.
-     * @see #redefineClasses
-     *
-     * @return <code>true</code> if the feature is supported,
-     * <code>false</code> otherwise.
-     *
-     * @since 1.4
-     */
-    boolean canRedefineClasses();
-
-    /**
-     * Determines if the target VM supports the addition
-     * of methods when performing class redefinition.
-     * @see #redefineClasses
-     *
-     * @return <code>true</code> if the feature is supported,
-     * <code>false</code> otherwise.
-     *
-     * @since 1.4
-     */
-    boolean canAddMethod();
-
-    /**
-     * Determines if the target VM supports unrestricted
-     * changes when performing class redefinition.
-     * @see #redefineClasses
-     *
-     * @return <code>true</code> if the feature is supported,
-     * <code>false</code> otherwise.
-     *
-     * @since 1.4
-     */
-    boolean canUnrestrictedlyRedefineClasses();
-
-    /**
-     * Determines if the target VM supports popping
-     * frames of a threads stack.
-     * @see ThreadReference#popFrames
-     *
-     * @return <code>true</code> if the feature is supported,
-     * <code>false</code> otherwise.
-     *
-     * @since 1.4
-     */
-    boolean canPopFrames();
-
-    /**
-     * Determines if the target VM supports getting
-     * the source debug extension.
-     * @see ReferenceType#sourceDebugExtension
-     *
-     * @return <code>true</code> if the feature is supported,
-     * <code>false</code> otherwise.
-     *
-     * @since 1.4
-     */
-    boolean canGetSourceDebugExtension();
-
-    /**
-     * Determines if the target VM supports the creation of
-     * {@link com.sun.jdi.request.VMDeathRequest}s.
-     * @see com.sun.jdi.request.EventRequestManager#createVMDeathRequest
-     *
-     * @return <code>true</code> if the feature is supported,
-     * <code>false</code> otherwise.
-     *
-     * @since 1.4
-     */
-    boolean canRequestVMDeathEvent();
-
-    /**
-     * Determines if the target VM supports the inclusion of return values
-     * in
-     * {@link com.sun.jdi.event.MethodExitEvent}s.
-     * @see com.sun.jdi.request.EventRequestManager#createMethodExitRequest
-     *
-     * @return <code>true</code> if the feature is supported,
-     * <code>false</code> otherwise.
-     *
-     * @since 1.6
-     */
-    boolean canGetMethodReturnValues();
-
-    /**
-     * Determines if the target VM supports the accessing of class instances,
-     * instance counts, and referring objects.
-     *
-     * @see #instanceCounts
-     * @see ReferenceType#instances(long)
-     * @see ObjectReference#referringObjects(long)
-     *
-     * @return <code>true</code> if the feature is supported,
-     * <code>false</code> otherwise.
-     *
-     * @since 1.6
-     */
-    boolean canGetInstanceInfo();
-
-
-    /**
-     * Determines if the target VM supports the filtering of
-     * class prepare events by source name.
-     *
-     * see {@link com.sun.jdi.request.ClassPrepareRequest#addSourceNameFilter}.
-     * @return <code>true</code> if the feature is supported,
-     * <code>false</code> otherwise.
-     *
-     * @since 1.6
-     */
-    boolean canUseSourceNameFilters();
-
-    /**
-     * Determines if the target VM supports the forcing of a method to
-     * return early.
-     *
-     * @see ThreadReference#forceEarlyReturn(Value)
-     *
-     * @return <code>true</code> if the feature is supported,
-     * <code>false</code> otherwise.
-     *
-     * @since 1.6
-     */
-    boolean canForceEarlyReturn();
-
-    /**
-     * Determines if the target VM is a read-only VM.  If a method which
-     * would modify the state of the VM is called on a read-only VM,
-     * then {@link VMCannotBeModifiedException} is thrown.
-     *
-     * @return <code>true</code> if the feature is supported,
-     * <code>false</code> otherwise.
-     *
-     * @since 1.5
-     */
-
-    boolean canBeModified();
-
-    /**
-     * Determines if the target VM supports the creation of
-     * {@link com.sun.jdi.request.MonitorContendedEnterRequest}s.
-     * {@link com.sun.jdi.request.MonitorContendedEnteredRequest}s.
-     * {@link com.sun.jdi.request.MonitorWaitRequest}s.
-     * {@link com.sun.jdi.request.MonitorWaitedRequest}s.
-     * @see com.sun.jdi.request.EventRequestManager#createMonitorContendedEnterRequest
-     * @see com.sun.jdi.request.EventRequestManager#createMonitorContendedEnteredRequest
-     * @see com.sun.jdi.request.EventRequestManager#createMonitorWaitRequest
-     * @see com.sun.jdi.request.EventRequestManager#createMonitorWaitedRequest
-     *
-     * @return <code>true</code> if the feature is supported,
-     * <code>false</code> otherwise.
-     *
-     * @since 1.6
-     */
-
-    boolean canRequestMonitorEvents();
-
-    /**
-     * Determines if the target VM supports getting which
-     * frame has acquired a monitor.
-     * @see com.sun.jdi.ThreadReference#ownedMonitorsAndFrames
-     *
-     * @return <code>true</code> if the feature is supported,
-     * <code>false</code> otherwise.
-     *
-     * @since 1.6
-     */
-
-     boolean canGetMonitorFrameInfo();
-
-
-    /**
-     * Determines if the target VM supports reading class file
-     * major and minor versions.
-     *
-     * @see ReferenceType#majorVersion()
-     * @see ReferenceType#minorVersion()
-     *
-     * @return <code>true</code> if the feature is supported,
-     * <code>false</code> otherwise.
-     *
-     * @since 1.6
-     */
-    boolean canGetClassFileVersion();
-
-    /**
-     * Determines if the target VM supports getting constant pool
-     * information of a class.
-     *
-     * @see ReferenceType#constantPoolCount()
-     * @see ReferenceType#constantPool()
-     *
-     * @return <code>true</code> if the feature is supported,
-     * <code>false</code> otherwise.
-     *
-     * @since 1.6
-     */
-    boolean canGetConstantPool();
-
-    /**
-     * Set this VM's default stratum (see {@link Location} for a
-     * discussion of strata).  Overrides the per-class default set
-     * in the class file.
-     * <P>
-     * Affects location queries (such as,
-     * {@link Location#sourceName()})
-     * and the line boundaries used in
-     * single stepping.
-     *
-     * @param stratum the stratum to set as VM default,
-     * or null to use per-class defaults.
-     *
-     * @throws java.lang.UnsupportedOperationException if the
-     * target virtual machine does not support this operation.
-     *
-     * @since 1.4
-     */
-    void setDefaultStratum(String stratum);
-
-    /**
-     * Return this VM's default stratum.
-     *
-     * @see #setDefaultStratum(String)
-     * @see ReferenceType#defaultStratum()
-     * @return <code>null</code> (meaning that the per-class
-     * default - {@link ReferenceType#defaultStratum()} -
-     * should be used) unless the default stratum has been
-     * set with
-     * {@link #setDefaultStratum(String)}.
-     *
-     * @since 1.4
-     */
-    String getDefaultStratum();
-
-    /**
-     * Returns the number of instances of each ReferenceType in the 'refTypes'
-     * list.
-     * Only instances that are reachable for the purposes of garbage collection
-     * are counted.
-     * <p>
-     * Not all target virtual machines support this operation.
-     * Use {@link VirtualMachine#canGetInstanceInfo()}
-     * to determine if the operation is supported.
-     *
-     * @see ReferenceType#instances(long)
-     * @see ObjectReference#referringObjects(long)
-     * @param refTypes the list of {@link ReferenceType} objects for which counts
-     *        are to be obtained.
-     *
-     * @return an array of <code>long</code> containing one element for each
-     *         element in the 'refTypes' list.  Element i of the array contains
-     *         the number of instances in the target VM of the ReferenceType at
-     *         position i in the 'refTypes' list.
-     *         If the 'refTypes' list is empty, a zero-length array is returned.
-     *         If a ReferenceType in refTypes has been garbage collected, zero
-     *         is returned for its instance count.
-     * @throws java.lang.UnsupportedOperationException if
-     * the target virtual machine does not support this
-     * operation - see
-     * {@link VirtualMachine#canGetInstanceInfo() canGetInstanceInfo()}
-     * @throws NullPointerException if the 'refTypes' list is null.
-     * @since 1.6
-     */
-    long[] instanceCounts(List<? extends ReferenceType> refTypes);
-
-    /**
-     * Returns text information on the target VM and the
-     * debugger support that mirrors it. No specific format
-     * for this information is guaranteed.
-     * Typically, this string contains version information for the
-     * target VM and debugger interfaces.
-     * More precise information
-     * on VM and JDI versions is available through
-     * {@link #version}, {@link VirtualMachineManager#majorInterfaceVersion},
-     * and {@link VirtualMachineManager#minorInterfaceVersion}
-     *
-     * @return the description.
-     */
-    String description();
-
-    /**
-     * Returns the version of the Java Runtime Environment in the target
-     * VM as reported by the property <code>java.version</code>.
-     * For obtaining the JDI interface version, use
-     * {@link VirtualMachineManager#majorInterfaceVersion}
-     * and {@link VirtualMachineManager#minorInterfaceVersion}
-     *
-     * @return the target VM version.
-     */
-    String version();
-
-    /**
-     * Returns the name of the target VM as reported by the
-     * property <code>java.vm.name</code>.
-     *
-     * @return the target VM name.
-     */
-    String name();
-
-    /** All tracing is disabled. */
-    int TRACE_NONE        = 0x00000000;
-    /** Tracing enabled for JDWP packets sent to target VM. */
-    int TRACE_SENDS       = 0x00000001;
-    /** Tracing enabled for JDWP packets received from target VM. */
-    int TRACE_RECEIVES    = 0x00000002;
-    /** Tracing enabled for internal event handling. */
-    int TRACE_EVENTS      = 0x00000004;
-    /** Tracing enabled for internal managment of reference types. */
-    int TRACE_REFTYPES    = 0x00000008;
-    /** Tracing enabled for internal management of object references. */
-    int TRACE_OBJREFS      = 0x00000010;
-    /** All tracing is enabled. */
-    int TRACE_ALL         = 0x00ffffff;
-
-    /**
-     * Traces the activities performed by the com.sun.jdi implementation.
-     * All trace information is output to System.err. The given trace
-     * flags are used to limit the output to only the information
-     * desired. The given flags are in effect and the corresponding
-     * trace will continue until the next call to
-     * this method.
-     * <p>
-     * Output is implementation dependent and trace mode may be ignored.
-     *
-     * @param traceFlags identifies which kinds of tracing to enable.
-     */
-    void setDebugTraceMode(int traceFlags);
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/VirtualMachineManager.java b/ojluni/src/main/java/com/sun/jdi/VirtualMachineManager.java
deleted file mode 100755
index 5af1776..0000000
--- a/ojluni/src/main/java/com/sun/jdi/VirtualMachineManager.java
+++ /dev/null
@@ -1,430 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package com.sun.jdi;
-
-import com.sun.jdi.connect.*;
-import com.sun.jdi.connect.spi.Connection;
-import java.util.List;
-import java.io.IOException;
-
-/**
- * A manager of connections to target virtual machines. The
- * VirtualMachineManager allows one application to debug
- * multiple target VMs. (Note that the converse is not
- * supported; a target VM can be debugged by only one
- * debugger application.) This interface
- * contains methods to manage connections
- * to remote target VMs and to obtain the {@link VirtualMachine}
- * mirror for available target VMs.
- * <p>
- * Connections can be made using one of several different
- * {@link com.sun.jdi.connect.Connector} objects. Each connector encapsulates
- * a different way of connecting the debugger with a target VM.
- * <p>
- * The VirtualMachineManager supports many different scenarios for
- * connecting a debugger to a virtual machine. Four examples
- * are presented in the table below. The
- * examples use the command line syntax in Sun's implementation.
- * Some {@link com.sun.jdi.connect.Connector} implementations may require slightly
- * different handling than presented below.
- * <p>
- * <TABLE BORDER WIDTH="75%" SUMMARY="Four scenarios for connecting a debugger
- *  to a virtual machine">
- * <TR>
- * <TH scope=col>Scenario</TH>
- * <TH scope=col>Description</TH>
- * <TR>
- * <TD>Debugger launches target VM (simplest, most-common scenario)</TD>
- *
- * <TD>Debugger calls the
- * {@link com.sun.jdi.connect.LaunchingConnector#launch(java.util.Map)}
- * method of the default connector, obtained with {@link #defaultConnector}. The
- * target VM is launched, and a connection between that VM and the
- * debugger is established. A {@link VirtualMachine} mirror is returned.
- * <P>Or, for more control
- * <UL>
- * <LI>
- * Debugger selects a connector from the list returned by
- * {@link #launchingConnectors} with desired characteristics
- * (for example, transport type, etc.).
- * <LI>
- * Debugger calls the
- * {@link com.sun.jdi.connect.LaunchingConnector#launch(java.util.Map)}
- * method of the selected connector. The
- * target VM is launched, and a connection between that VM and the
- * debugger is established. A {@link VirtualMachine} mirror is returned.
- * </UL>
- * </TD>
- * </TR>
- * <TR>
- * <TD>Debugger attaches to previously-running VM</TD>
- * <TD>
- * <UL>
- * <LI>
- * Target VM is launched using the options
- * <code>-agentlib:jdwp=transport=xxx,server=y</code>
- * </LI>
- * <LI>
- * Target VM generates and outputs the tranport-specific address at which it will
- * listen for a connection.</LI>
- * <LI>
- * Debugger is launched. Debugger selects a connector in the list
- * returned by {@link #attachingConnectors} matching the transport with
- * the name "xxx".
- * <LI>
- * Debugger presents the default connector parameters (obtained through
- * {@link com.sun.jdi.connect.Connector#defaultArguments()}) to the end user,
- * allowing the user to
- * fill in the transport-specific address generated by the target VM.
- * <LI>
- * Debugger calls the {@link com.sun.jdi.connect.AttachingConnector#attach(java.util.Map)} method
- * of the selected to attach to the target VM. A {@link VirtualMachine}
- * mirror is returned.
- * </UL>
- * </TD>
- * </TR>
- *
- * <TR>
- * <TD>Target VM attaches to previously-running debugger</TD>
- * <TD>
- * <LI>
- * At startup, debugger selects one or more connectors from
- * the list returned by {@link #listeningConnectors} for one or more
- * transports.</LI>
- * <LI>
- * Debugger calls the {@link com.sun.jdi.connect.ListeningConnector#startListening(java.util.Map)} method for each selected
- * connector. For each call, a transport-specific address string is
- * generated and returned. The debugger makes the transport names and
- * corresponding address strings available to the end user.
- * <LI>
- * Debugger calls
- * {@link com.sun.jdi.connect.ListeningConnector#accept(java.util.Map)}
- * for each selected connector to wait for
- * a target VM to connect.</LI>
- * <LI>
- * Later, target VM is launched by end user with the options
- * <code>-agentlib:jdwp=transport=xxx,address=yyy</code>
- * where "xxx" the transport for one of the connectors selected by the
- * the debugger and "yyy"
- * is the address generated by
- * {@link com.sun.jdi.connect.ListeningConnector#accept(java.util.Map)} for that
- * transport.</LI>
- * <LI>
- * Debugger's call to {@link com.sun.jdi.connect.ListeningConnector#accept(java.util.Map)} returns
- * a {@link VirtualMachine} mirror.</LI>
- * </TD>
- * </TR>
- *
- * <TR>
- * <TD>Target VM launches debugger (sometimes called "Just-In-Time" debugging)</TD>
- * <TD>
- * <LI>
- * Target VM is launched with the options
- * <code>-agentlib:jdwp=launch=cmdline,onuncaught=y,transport=xxx,server=y</code>
- * </LI>
- * <LI>
- * Later, an uncaught exception is thrown in the target VM. The target
- * VM generates the tranport-specific address at which it will
- * listen for a connection.
- * <LI>Target VM launches the debugger with the following items concatenated
- * together (separated by spaces) to form the command line:
- * <UL>
- * <LI> The launch= value
- * <LI> The transport= value
- * <LI> The generated transport-specific address at which VM is listening for
- * debugger connection.
- * </UL>
- * <LI>
- * Upon launch, debugger selects a connector in the list
- * returned by {@link #attachingConnectors} matching the transport with
- * the name "xxx".
- * <LI>
- * Debugger changes the default connector parameters (obtained through
- * {@link com.sun.jdi.connect.Connector#defaultArguments()}) to specify
- * the transport specific address at which the VM is listenig. Optionally,
- * other connector arguments can be presented to the user.
- * <LI>
- * Debugger calls the
- * {@link com.sun.jdi.connect.AttachingConnector#attach(java.util.Map)} method
- * of the selected to attach to the target VM. A {@link VirtualMachine}
- * mirror is returned.
- * </TD>
- * </TR>
- * </TABLE>
- *
- * <p> Connectors are created at start-up time. That is, they
- * are created the first time that {@link
- * com.sun.jdi.Bootstrap#virtualMachineManager()} is invoked.
- * The list of all Connectors created at start-up time can be
- * obtained from the VirtualMachineManager by invoking the
- * {@link #allConnectors allConnectors} method.
- *
- * <p> Connectors are created at start-up time if they are
- * installed on the platform. In addition, Connectors are created
- * automatically by the VirtualMachineManager to encapsulate any
- * {@link com.sun.jdi.connect.spi.TransportService} implementations
- * that are installed on the platform. These two mechanisms for
- * creating Connectors are described here.
- *
- * <p> A Connector is installed on the platform if it is installed
- * in a jar file that is visible to the defining class loader of
- * the {@link com.sun.jdi.connect.Connector} type,
- * and that jar file contains a provider configuration file named
- * <tt>com.sun.jdi.connect.Connector</tt> in the resource directory
- * <tt>META-INF/services</tt>, and the provider configuration file
- * lists the full-qualified class name of the Connector
- * implementation. A Connector is a class that implements the
- * {@link com.sun.jdi.connect.Connector Connector} interface. More
- * appropriately the class implements one of the specific Connector
- * types, namely {@link com.sun.jdi.connect.AttachingConnector
- * AttachingConnector}, {@link com.sun.jdi.connect.ListeningConnector
- * ListeningConnector}, or {@link com.sun.jdi.connect.LaunchingConnector
- * LaunchingConnector}. The format of the provider configuration file
- * is one fully-qualified class name per line. Space and tab characters
- * surrounding each class, as well as blank lines are ignored. The
- * comment character is <tt>'#'</tt> (<tt>0x23</tt>), and on each
- * line all characters following the first comment character are
- * ignored. The file must be encoded in UTF-8.
- *
- * <p> At start-up time the VirtualMachineManager attempts to load
- * and instantiate (using the no-arg constructor) each class listed
- * in the provider configuration file. Exceptions thrown when loading
- * or creating the Connector are caught and ignored. In other words,
- * the start-up process continues despite of errors.
- *
- * <p> In addition to Connectors installed on the platform the
- * VirtualMachineManager will also create Connectors to encapsulate
- * any {@link com.sun.jdi.connect.spi.TransportService} implementations
- * that are installed on the platform. A TransportService is
- * installed on the platform if it installed in a jar file that is
- * visible to the defining class loader for the
- * {@link com.sun.jdi.connect.spi.TransportService} type, and that jar
- * file contains a provider configuration file named
- * <tt>com.sun.jdi.connect.spi.TransportService</tt> in the resource
- * directory <tt>META-INF/services</tt>, and the provider
- * configuration file lists the the full-qualified class name of the
- * TransportService implementation. A TransportService is a concrete
- * sub-class of {@link com.sun.jdi.connect.spi.TransportService
- * TransportService}. The format of the provider configuration file
- * is the same as the provider configuration file for Connectors
- * except that each class listed must be the fully-qualified class
- * name of a class that implements the TransportService interface.
- *
- * <p> For each TransportService installed on the platform, the
- * VirtualMachineManager creates a corresponding
- * {@link com.sun.jdi.connect.AttachingConnector} and
- * {@link com.sun.jdi.connect.ListeningConnector}. These
- * Connectors are created to encapsulate a {@link
- * com.sun.jdi.connect.Transport Transport} that in turn
- * encapsulates the TransportService.
- * The AttachingConnector will be named based on the name of the
- * transport service concatenated with the string <tt>Attach</tt>.
- * For example, if the transport service {@link
- * com.sun.jdi.connect.spi.TransportService#name() name()} method
- * returns <tt>telepathic</tt> then the AttachingConnector will
- * be named <tt>telepathicAttach</tt>. Similiarly the ListeningConnector
- * will be named with the string <tt>Listen</tt> tagged onto the
- * name of the transport service. The {@link
- * com.sun.jdi.connect.Connector#description() description()} method
- * of both the AttachingConnector, and the ListeningConnector, will
- * delegate to the {@link com.sun.jdi.connect.spi.TransportService#description()
- * description()} method of the underlying transport service. Both
- * the AttachingConnector and the ListeningConnector will have two
- * Connector {@link com.sun.jdi.connect.Connector$Argument Arguments}.
- * A {@link com.sun.jdi.connect.Connector$StringArgument StringArgument}
- * named <tt>address</tt> is the connector argument to specify the
- * address to attach too, or to listen on. A
- * {@link com.sun.jdi.connect.Connector$IntegerArgument IntegerArgument}
- * named <tt>timeout</tt> is the connector argument to specify the
- * timeout when attaching, or accepting. The timeout connector may be
- * ignored depending on if the transport service supports an attach
- * timeout or accept timeout.
- *
- * <p> Initialization of the virtual machine manager will fail, that is
- * {@link com.sun.jdi.Bootstrap#virtualMachineManager()} will throw an
- * error if the virtual machine manager is unable to create any
- * connectors.
- *
- * @author Gordon Hirsch
- * @since  1.3
- */
-public interface VirtualMachineManager {
-
-    /**
-     * Identifies the default connector. This connector should
-     * be used as the launching connector when selection of a
-     * connector with specific characteristics is unnecessary.
-     *
-     * @return the default {@link com.sun.jdi.connect.LaunchingConnector}
-     */
-    LaunchingConnector defaultConnector();
-
-    /**
-     * Returns the list of known {@link com.sun.jdi.connect.LaunchingConnector} objects.
-     * Any of the returned objects can be used to launch a new target
-     * VM and immediately create a {@link VirtualMachine} mirror for it.
-     *
-     * Note that a target VM launched by a launching connector is not
-     * guaranteed to be stable until after the {@link com.sun.jdi.event.VMStartEvent} has been
-     * received.
-     * @return a list of {@link com.sun.jdi.connect.LaunchingConnector} objects.
-     */
-    List<LaunchingConnector> launchingConnectors();
-
-    /**
-     * Returns the list of known {@link com.sun.jdi.connect.AttachingConnector} objects.
-     * Any of the returned objects can be used to attach to an existing target
-     * VM and create a {@link VirtualMachine} mirror for it.
-     *
-     * @return a list of {@link com.sun.jdi.connect.AttachingConnector} objects.
-     */
-    List<AttachingConnector> attachingConnectors();
-
-    /**
-     * Returns the list of known {@link com.sun.jdi.connect.ListeningConnector} objects.
-     * Any of the returned objects can be used to listen for a
-     * connection initiated by a target VM
-     * and create a {@link VirtualMachine} mirror for it.
-     *
-     * @return a list of {@link com.sun.jdi.connect.ListeningConnector} objects.
-     */
-    List<ListeningConnector> listeningConnectors();
-
-    /**
-     * Returns the list of all known {@link com.sun.jdi.connect.Connector} objects.
-     *
-     * @return a list of {@link com.sun.jdi.connect.Connector} objects.
-     */
-     List<Connector> allConnectors();
-
-    /**
-     * Lists all target VMs which are connected to the debugger.
-     * The list includes {@link VirtualMachine} instances for
-     * any target VMs which initiated a connection
-     * and any
-     * target VMs to which this manager has initiated a connection.
-     * A target VM will remain in this list
-     * until the VM is disconnected.
-     * {@link com.sun.jdi.event.VMDisconnectEvent} is placed in the event queue
-     * after the VM is removed from the list.
-     *
-     * @return a list of {@link VirtualMachine} objects, each mirroring
-     * a target VM.
-     */
-     List<VirtualMachine> connectedVirtualMachines();
-
-     /**
-      * Returns the major version number of the JDI interface.
-      * See {@link VirtualMachine#version} target VM version and
-      * information and
-      * {@link VirtualMachine#description} more version information.
-      *
-      * @return the integer major version number.
-      */
-     int majorInterfaceVersion();
-
-     /**
-      * Returns the minor version number of the JDI interface.
-      * See {@link VirtualMachine#version} target VM version and
-      * information and
-      * {@link VirtualMachine#description} more version information.
-      *
-      * @return the integer minor version number
-      */
-     int minorInterfaceVersion();
-
-     /**
-      * Create a virtual machine mirror for a target VM.
-      *
-      * <p> Creates a virtual machine mirror for a target VM
-      * for which a {@link com.sun.jdi.connect.spi.Connection Connection}
-      * already exists. A Connection is created when a {@link
-      * com.sun.jdi.connect.Connector Connector} establishes
-      * a connection and successfully handshakes with a target VM.
-      * A Connector can then use this method to create a virtual machine
-      * mirror to represent the composite state of the target VM.
-      *
-      * <p> The <tt>process</tt> argument specifies the
-      * {@link java.lang.Process} object for the taget VM. It may be
-      * specified as <tt>null</tt>. If the target VM is launched
-      * by a {@link com.sun.jdi.connect.LaunchingConnector
-      * LaunchingConnector} the <tt>process</tt> argument should be
-      * specified, otherwise calling {@link com.sun.jdi.VirtualMachine#process()}
-      * on the created virtual machine will return <tt>null</tt>.
-      *
-      * <p> This method exists so that Connectors may create
-      * a virtual machine mirror when a connection is established
-      * to a target VM. Only developers creating new Connector
-      * implementations should need to make direct use of this
-      * method. </p>
-      *
-      * @param  connection
-      *         The open connection to the target VM.
-      *
-      * @param  process
-      *         If launched, the {@link java.lang.Process} object for
-      *         the target VM. <tt>null</tt> if not launched.
-      *
-      * @return new virtual machine representing the target VM.
-      *
-      * @throws IOException
-      *         if an I/O error occurs
-      *
-      * @throws IllegalStateException
-      *         if the connection is not open
-      *
-      * @see com.sun.jdi.connect.spi.Connection#isOpen()
-      * @see com.sun.jdi.VirtualMachine#process()
-      *
-      * @since 1.5
-      */
-     VirtualMachine createVirtualMachine(Connection connection, Process process) throws IOException;
-
-     /**
-      * Creates a new virtual machine.
-      *
-      * <p> This convenience method works as if by invoking {@link
-      * #createVirtualMachine(Connection, Process)} method and
-      * specifying <tt>null</tt> as the <tt>process</tt> argument.
-      *
-      * <p> This method exists so that Connectors may create
-      * a virtual machine mirror when a connection is established
-      * to a target VM. Only developers creating new Connector
-      * implementations should need to make direct use of this
-      * method. </p>
-      *
-      * @return the new virtual machine
-      *
-      * @throws IOException
-      *         if an I/O error occurs
-      *
-      * @throws IllegalStateException
-      *         if the connection is not open
-      *
-      * @since 1.5
-      */
-     VirtualMachine createVirtualMachine(Connection connection) throws IOException;
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/VoidType.java b/ojluni/src/main/java/com/sun/jdi/VoidType.java
deleted file mode 100755
index 4a976e8..0000000
--- a/ojluni/src/main/java/com/sun/jdi/VoidType.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (c) 1998, 1999, 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.jdi;
-
-/**
- * The type of all primitive <code>void</code> values
- * accessed in the target VM. Calls to {@link Value#type} will return an
- * implementor of this interface.
- *
- * @see VoidValue
- *
- * @author Robert Field
- * @since  1.3
- */
-public interface VoidType extends Type {
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/VoidValue.java b/ojluni/src/main/java/com/sun/jdi/VoidValue.java
deleted file mode 100755
index 8a8a79e..0000000
--- a/ojluni/src/main/java/com/sun/jdi/VoidValue.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1998, 1999, 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.jdi;
-
-/**
- * Provides access to a primitive <code>void</code> value in
- * the target VM.
- *
- * @author Robert Field
- * @since  1.3
- */
-public interface VoidValue extends Value {
-
-    /**
-     * Compares the specified Object with this VoidValue for equality.
-     *
-     * @return true if the Object is a VoidValue; false
-     * otherwise.
-     */
-    boolean equals(Object obj);
-
-    /**
-     * Returns the hash code value for this VoidValue.
-     *
-     * @return the hash code
-     */
-    int hashCode();
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/connect/AttachingConnector.java b/ojluni/src/main/java/com/sun/jdi/connect/AttachingConnector.java
deleted file mode 100755
index 8b84613..0000000
--- a/ojluni/src/main/java/com/sun/jdi/connect/AttachingConnector.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package com.sun.jdi.connect;
-
-import com.sun.jdi.VirtualMachine;
-import java.util.Map;
-import java.io.IOException;
-
-/**
- * A connector which attaches to a previously running target VM.
- *
- * @author Gordon Hirsch
- * @since  1.3
- */
-public interface AttachingConnector extends Connector {
-    /**
-     * Attaches to a running application and and returns a
-     * mirror of its VM.
-     * <p>
-     * The connector uses the given argument map in
-     * attaching the application. These arguments will include addressing
-     * information that identifies the VM.
-     * The argument map associates argument name strings to instances
-     * of {@link Connector.Argument}. The default argument map for a
-     * connector can be obtained through {@link Connector#defaultArguments}.
-     * Argument map values can be changed, but map entries should not be
-     * added or deleted.
-     *
-     * @param arguments the argument map to be used in launching the VM.
-     * @return the {@link VirtualMachine} mirror of the target VM.
-     *
-     * @throws TransportTimeoutException when the Connector encapsulates
-     * a transport that supports a timeout when attaching, a
-     * {@link Connector.Argument} representing a timeout has been set
-     * in the argument map, and a timeout occurs when trying to attach
-     * to the target VM.
-     *
-     * @throws java.io.IOException when unable to attach.
-     * Specific exceptions are dependent on the Connector implementation
-     * in use.
-     * @throws IllegalConnectorArgumentsException when one of the
-     * connector arguments is invalid.
-     */
-    VirtualMachine attach(Map<String,? extends Connector.Argument> arguments)
-        throws IOException, IllegalConnectorArgumentsException;
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/connect/Connector.java b/ojluni/src/main/java/com/sun/jdi/connect/Connector.java
deleted file mode 100755
index e817c44..0000000
--- a/ojluni/src/main/java/com/sun/jdi/connect/Connector.java
+++ /dev/null
@@ -1,285 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package com.sun.jdi.connect;
-
-import java.util.Map;
-import java.util.List;
-import java.io.Serializable;
-
-/**
- * A method of connection between a debugger and a target VM.
- * A connector encapsulates exactly one {@link Transport}. used
- * to establish the connection. Each connector has a set of arguments
- * which controls its operation. The arguments are stored as a
- * map, keyed by a string. Each implementation defines the string
- * argument keys it accepts.
- *
- * @see LaunchingConnector
- * @see AttachingConnector
- * @see ListeningConnector
- * @see Connector.Argument
- *
- * @author Gordon Hirsch
- * @since  1.3
- */
-public interface Connector {
-    /**
-     * Returns a short identifier for the connector. Connector implementors
-     * should follow similar naming conventions as are used with packages
-     * to avoid name collisions. For example, the Sun connector
-     * implementations have names prefixed with "com.sun.jdi.".
-     * Not intended for exposure to end-user.
-     *
-     * @return the name of this connector.
-     */
-    String name();
-
-    /**
-     * Returns a human-readable description of this connector
-     * and its purpose.
-     *
-     * @return the description of this connector
-     */
-    String description();
-
-    /**
-     * Returns the transport mechanism used by this connector to establish
-     * connections with a target VM.
-     *
-     * @return the {@link Transport} used by this connector.
-     */
-    Transport transport();
-
-    /**
-     * Returns the arguments accepted by this Connector and their
-     * default values. The keys of the returned map are string argument
-     * names. The values are {@link Connector.Argument} containing
-     * information about the argument and its default value.
-     *
-     * @return the map associating argument names with argument
-     * information and default value.
-     */
-    Map<String,Connector.Argument> defaultArguments();
-
-    /**
-     * Specification for and value of a Connector argument.
-     * Will always implement a subinterface of Argument:
-     * {@link Connector.StringArgument}, {@link Connector.BooleanArgument},
-     * {@link Connector.IntegerArgument},
-     * or {@link Connector.SelectedArgument}.
-     */
-    public interface Argument extends Serializable {
-        /**
-         * Returns a short, unique identifier for the argument.
-         * Not intended for exposure to end-user.
-         *
-         * @return the name of this argument.
-         */
-        String name();
-
-        /**
-         * Returns a short human-readable label for this argument.
-         *
-         * @return a label for this argument
-         */
-        String label();
-
-        /**
-         * Returns a human-readable description of this argument
-         * and its purpose.
-         *
-         * @return the description of this argument
-         */
-        String description();
-
-        /**
-         * Returns the current value of the argument. Initially, the
-         * default value is returned. If the value is currently unspecified,
-         * null is returned.
-         *
-         * @return the current value of the argument.
-         */
-        String value();
-
-        /**
-         * Sets the value of the argument.
-         * The value should be checked with {@link #isValid(String)}
-         * before setting it; invalid values will throw an exception
-         * when the connection is established - for example,
-         * on {@link LaunchingConnector#launch}
-         */
-        void setValue(String value);
-
-        /**
-         * Performs basic sanity check of argument.
-         * @return <code>true</code> if the value is valid to be
-         * used in {@link #setValue(String)}
-         */
-        boolean isValid(String value);
-
-        /**
-         * Indicates whether the argument must be specified. If true,
-         * {@link #setValue} must be used to set a non-null value before
-         * using this argument in establishing a connection.
-         *
-         * @return <code>true</code> if the argument must be specified;
-         * <code>false</code> otherwise.
-         */
-        boolean mustSpecify();
-    }
-
-    /**
-     * Specification for and value of a Connector argument,
-     * whose value is Boolean.  Boolean values are represented
-     * by the localized versions of the strings "true" and "false".
-     */
-    public interface BooleanArgument extends Argument {
-        /**
-         * Sets the value of the argument.
-         */
-        void setValue(boolean value);
-
-        /**
-         * Performs basic sanity check of argument.
-         * @return <code>true</code> if value is a string
-         * representation of a boolean value.
-         * @see #stringValueOf(boolean)
-         */
-        boolean isValid(String value);
-
-        /**
-         * Return the string representation of the <code>value</code>
-         * parameter.
-         * Does not set or examine the current value of <code>this</code>
-         * instance.
-         * @return the localized String representation of the
-         * boolean value.
-         */
-        String stringValueOf(boolean value);
-
-        /**
-         * Return the value of the argument as a boolean.  Since
-         * the argument may not have been set or may have an invalid
-         * value {@link #isValid(String)} should be called on
-         * {@link #value()} to check its validity.  If it is invalid
-         * the boolean returned by this method is undefined.
-         * @return the value of the argument as a boolean.
-         */
-        boolean booleanValue();
-    }
-
-    /**
-     * Specification for and value of a Connector argument,
-     * whose value is an integer.  Integer values are represented
-     * by their corresponding strings.
-     */
-    public interface IntegerArgument extends Argument {
-        /**
-         * Sets the value of the argument.
-         * The value should be checked with {@link #isValid(int)}
-         * before setting it; invalid values will throw an exception
-         * when the connection is established - for example,
-         * on {@link LaunchingConnector#launch}
-         */
-        void setValue(int value);
-
-        /**
-         * Performs basic sanity check of argument.
-         * @return <code>true</code> if value represents an int that is
-         * <code>{@link #min()} &lt;= value &lt;= {@link #max()}</code>
-         */
-        boolean isValid(String value);
-
-        /**
-         * Performs basic sanity check of argument.
-         * @return <code>true</code> if
-         * <code>{@link #min()} &lt;= value  &lt;= {@link #max()}</code>
-         */
-        boolean isValid(int value);
-
-        /**
-         * Return the string representation of the <code>value</code>
-         * parameter.
-         * Does not set or examine the current value of <code>this</code>
-         * instance.
-         * @return the String representation of the
-         * int value.
-         */
-        String stringValueOf(int value);
-
-        /**
-         * Return the value of the argument as a int.  Since
-         * the argument may not have been set or may have an invalid
-         * value {@link #isValid(String)} should be called on
-         * {@link #value()} to check its validity.  If it is invalid
-         * the int returned by this method is undefined.
-         * @return the value of the argument as a int.
-         */
-        int intValue();
-
-        /**
-         * The upper bound for the value.
-         * @return the maximum allowed value for this argument.
-         */
-        int max();
-
-        /**
-         * The lower bound for the value.
-         * @return the minimum allowed value for this argument.
-         */
-        int min();
-    }
-
-    /**
-     * Specification for and value of a Connector argument,
-     * whose value is a String.
-     */
-    public interface StringArgument extends Argument {
-        /**
-         * Performs basic sanity check of argument.
-         * @return <code>true</code> always
-         */
-        boolean isValid(String value);
-    }
-
-    /**
-     * Specification for and value of a Connector argument,
-     * whose value is a String selected from a list of choices.
-     */
-    public interface SelectedArgument extends Argument {
-        /**
-         * Return the possible values for the argument
-         * @return {@link List} of {@link String}
-         */
-        List<String> choices();
-
-        /**
-         * Performs basic sanity check of argument.
-         * @return <code>true</code> if value is one of {@link #choices()}.
-         */
-        boolean isValid(String value);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/connect/IllegalConnectorArgumentsException.java b/ojluni/src/main/java/com/sun/jdi/connect/IllegalConnectorArgumentsException.java
deleted file mode 100755
index f8c693d..0000000
--- a/ojluni/src/main/java/com/sun/jdi/connect/IllegalConnectorArgumentsException.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package com.sun.jdi.connect;
-
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Collections;
-
-/**
- * Thrown to indicate an invalid argument or
- * inconsistent passed to a {@link Connector}.
- *
- * @author Gordon Hirsch
- * @since  1.3
- */
-public class IllegalConnectorArgumentsException extends Exception
-{
-    List<String> names;
-
-    /**
-     * Construct an <code>IllegalConnectorArgumentsException</code>
-     * with the specified detail message and the name of the argument
-     * which is invalid or inconsistent.
-     * @param s the detailed message.
-     * @param name the name of the invalid or inconsistent argument.
-     */
-    public IllegalConnectorArgumentsException(String s,
-                                              String name) {
-        super(s);
-        names = new ArrayList<String>(1);
-        names.add(name);
-    }
-
-    /**
-     * Construct an <code>IllegalConnectorArgumentsException</code>
-     * with the specified detail message and a <code>List</code> of
-     * names of arguments which are invalid or inconsistent.
-     * @param s the detailed message.
-     * @param names a <code>List</code> containing the names of the
-     * invalid or inconsistent argument.
-     */
-    public IllegalConnectorArgumentsException(String s, List<String> names) {
-        super(s);
-
-        this.names = new ArrayList<String>(names);
-    }
-
-    /**
-     * Return a <code>List</code> containing the names of the
-     * invalid or inconsistent arguments.
-     * @return a <code>List</code> of argument names.
-     */
-    public List<String> argumentNames() {
-        return Collections.unmodifiableList(names);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/connect/LaunchingConnector.java b/ojluni/src/main/java/com/sun/jdi/connect/LaunchingConnector.java
deleted file mode 100755
index 206c8aa..0000000
--- a/ojluni/src/main/java/com/sun/jdi/connect/LaunchingConnector.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package com.sun.jdi.connect;
-
-import com.sun.jdi.VirtualMachine;
-import java.util.Map;
-import java.io.IOException;
-
-/**
- * A connector which can launch a target VM before connecting to it.
- *
- * @author Gordon Hirsch
- * @since  1.3
- */
-public interface LaunchingConnector extends Connector {
-    /**
-     * Launches an application and connects to its VM. Properties
-     * of the launch (possibly including options,
-     * main class, and arguments) are specified in
-     * <code>arguments</code>.
-     * The argument map associates argument name strings to instances
-     * of {@link Connector.Argument}. The default argument map for a
-     * connector can be obtained through {@link Connector#defaultArguments}.
-     * Argument map values can be changed, but map entries should not be
-     * added or deleted.
-     * <p>A target VM launched by a launching connector is not
-     * guaranteed to be stable until after the {@link com.sun.jdi.event.VMStartEvent} has been
-     * received.
-     * <p>
-     * <b>Important note:</b> If a target VM is launched through this
-     * funcctions, its output and error streams must be read as it
-     * executes. These streams are available through the
-     * {@link java.lang.Process Process} object returned by
-     * {@link com.sun.jdi.VirtualMachine#process}. If the streams are not periodically
-     * read, the target VM will stop executing when the buffers for these
-     * streams are filled.
-     *
-     * @param arguments the argument map to be used in launching the VM.
-     * @return the {@link VirtualMachine} mirror of the target VM.
-     * @throws java.io.IOException when unable to launch.
-     * Specific exceptions are dependent on the Connector implementation
-     * in use.
-     * @throws IllegalConnectorArgumentsException when one of the
-     * connector arguments is invalid.
-     * @throws VMStartException when the VM was successfully launched, but
-     * terminated with an error before a connection could be established.
-     */
-    VirtualMachine launch(Map<String,? extends Connector.Argument> arguments)
-        throws IOException, IllegalConnectorArgumentsException,
-               VMStartException;
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/connect/ListeningConnector.java b/ojluni/src/main/java/com/sun/jdi/connect/ListeningConnector.java
deleted file mode 100755
index b588875..0000000
--- a/ojluni/src/main/java/com/sun/jdi/connect/ListeningConnector.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package com.sun.jdi.connect;
-
-import java.util.Map;
-import java.io.IOException;
-import com.sun.jdi.VirtualMachine;
-
-/**
- * A connector which listens for a connection initiated by a target VM.
- *
- * @author Gordon Hirsch
- * @since  1.3
- */
-public interface ListeningConnector extends Connector {
-    /**
-     * Indicates whether this listening connector supports multiple
-     * connections for a single argument map. If so, a call to
-     * {@link #startListening} may allow
-     * multiple target VM to become connected.
-     *
-     * @return <code>true</code> if multiple connections are supported;
-     * <code>false</code> otherwise.
-     */
-    boolean supportsMultipleConnections();
-
-    /**
-     * Listens for one or more connections initiated by target VMs.
-     * The connector uses the given argument map
-     * in determining the address at which to listen or else it generates
-     * an appropriate listen address. In either case, an address string
-     * is returned from this method which can be used in starting target VMs
-     * to identify this connector. The format of the address string
-     * is connector, transport, and, possibly, platform dependent.
-     * <p>
-     * The argument map associates argument name strings to instances
-     * of {@link Connector.Argument}. The default argument map for a
-     * connector can be obtained through {@link Connector#defaultArguments}.
-     * Argument map values can be changed, but map entries should not be
-     * added or deleted.
-     * <p>
-     * This method does not return a {@link VirtualMachine}, and, normally,
-     * returns before any target VM initiates
-     * a connection. The connected target is obtained through
-     * {@link #accept} (using the same argument map as is passed to this
-     * method).
-     * <p>
-     * If <code>arguments</code> contains addressing information. and
-     * only one conection will be accepted, the {@link #accept accept} method
-     * can be called immediately without calling this method.
-     *
-     * @return the address at which the connector is listening
-     * for a connection.
-     * @throws java.io.IOException when unable to start listening.
-     * Specific exceptions are dependent on the Connector implementation
-     * in use.
-     * @throws IllegalConnectorArgumentsException when one of the
-     * connector arguments is invalid.
-     */
-    String startListening(Map<String,? extends Connector.Argument> arguments)
-        throws IOException, IllegalConnectorArgumentsException;
-
-    /**
-     * Cancels listening for connections. The given argument map should match
-     * the argument map given for a previous {@link #startListening} invocation.
-     *
-     * @throws java.io.IOException when unable to stop listening.
-     * Specific exceptions are dependent on the Connector implementation
-     * in use.
-     * @throws IllegalConnectorArgumentsException when one of the
-     * connector arguments is invalid.
-     */
-    void stopListening(Map<String,? extends Connector.Argument> arguments)
-        throws IOException, IllegalConnectorArgumentsException;
-
-
-    /**
-     * Waits for a target VM to attach to this connector.
-     *
-     * @throws TransportTimeoutException when the Connector encapsulates
-     * a transport that supports a timeout when accepting, a
-     * {@link Connector.Argument} representing a timeout has been set
-     * in the argument map, and a timeout occurs whilst waiting for
-     * the target VM to connect.
-     * @throws java.io.IOException when unable to accept.
-     * Specific exceptions are dependent on the Connector implementation
-     * in use.
-     * @throws IllegalConnectorArgumentsException when one of the
-     * connector arguments is invalid.
-     */
-    VirtualMachine accept(Map<String,? extends Connector.Argument> arguments)
-        throws IOException, IllegalConnectorArgumentsException;
-
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/connect/Transport.java b/ojluni/src/main/java/com/sun/jdi/connect/Transport.java
deleted file mode 100755
index 266bd80..0000000
--- a/ojluni/src/main/java/com/sun/jdi/connect/Transport.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package com.sun.jdi.connect;
-
-import com.sun.jdi.connect.spi.TransportService;        // for javadoc
-
-/**
- * A method of communication between a debugger and a target VM.
- *
- * <p> A Transport represents the transport mechanism used by a
- * {@link com.sun.jdi.connect.Connector Connector} to establish a
- * connection with a target VM. It consists of a name which is obtained
- * by invoking the {@link #name} method. Furthermore, a Transport
- * encapsulates a {@link com.sun.jdi.connect.spi.TransportService
- * TransportService} which is the underlying service used
- * to establish connections and exchange Java Debug Wire Protocol
- * (JDWP) packets with a target VM.
- *
- * @author Gordon Hirsch
- * @since  1.3
- */
-public interface Transport {
-    /**
-     * Returns a short identifier for the transport.
-     *
-     * @return the name of this transport.
-     */
-    String name();
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/connect/TransportTimeoutException.java b/ojluni/src/main/java/com/sun/jdi/connect/TransportTimeoutException.java
deleted file mode 100755
index 759b44f..0000000
--- a/ojluni/src/main/java/com/sun/jdi/connect/TransportTimeoutException.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-package com.sun.jdi.connect;
-
-/**
- * This exception may be thrown as a result of a timeout
- * when attaching to a target VM, or waiting to accept a
- * connection from a target VM.
- *
- * <p> When attaching to a target VM, using {@link
- * AttachingConnector#attach attach} this
- * exception may be thrown if the connector supports a timeout
- * {@link Connector.Argument connector argument}. Similiarly,
- * when waiting to accept a connection from a target VM,
- * using {@link ListeningConnector#accept accept} this
- * exception may be thrown if the connector supports a
- * timeout connector argument when accepting.
- *
- * <p> In addition, for developers creating {@link
- * com.sun.jdi.connect.spi.TransportService TransportService}
- * implementations this exception is thrown when
- * {@link com.sun.jdi.connect.spi.TransportService#attach attach}
- * times out when establishing a connection to a target VM,
- * or {@link com.sun.jdi.connect.spi.TransportService#accept
- * accept} times out while waiting for a target VM to connect. </p>
- *
- * @see AttachingConnector#attach
- * @see ListeningConnector#accept
- * @see com.sun.jdi.connect.spi.TransportService#attach
- * @see com.sun.jdi.connect.spi.TransportService#accept
- *
- * @since 1.5
- */
-public class TransportTimeoutException extends java.io.IOException {
-
-    /**
-     * Constructs a <tt>TransportTimeoutException</tt> with no detail
-     * message.
-     */
-    public TransportTimeoutException() {
-    }
-
-
-    /**
-     * Constructs a <tt>TransportTimeoutException</tt> with the
-     * specified detail message.
-     *
-     * @param message the detail message pertaining to this exception.
-     */
-    public TransportTimeoutException(String message) {
-        super(message);
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/connect/VMStartException.java b/ojluni/src/main/java/com/sun/jdi/connect/VMStartException.java
deleted file mode 100755
index 9eb6fc5..0000000
--- a/ojluni/src/main/java/com/sun/jdi/connect/VMStartException.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (c) 1998, 2000, 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.jdi.connect;
-
-/**
- * A target VM was successfully launched, but terminated with an
- * error before a connection could be established. This exception
- * provides the {@link java.lang.Process} object for the launched
- * target to help in diagnosing the problem.
- *
- * @author Gordon Hirsch
- * @since  1.3
- */
-public class VMStartException extends Exception
-{
-    Process process;
-
-    public VMStartException(Process process) {
-        super();
-        this.process = process;
-    }
-
-    public VMStartException(String message,
-                            Process process) {
-        super(message);
-        this.process = process;
-    }
-
-    public Process process() {
-        return process;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/connect/package.html b/ojluni/src/main/java/com/sun/jdi/connect/package.html
deleted file mode 100755
index 7484ce2..0000000
--- a/ojluni/src/main/java/com/sun/jdi/connect/package.html
+++ /dev/null
@@ -1,43 +0,0 @@
-<html>
-<head>
-<title>com.sun.jdi.connect description</title>
-<!--
-
-Copyright (c) 1998, 1999, 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.
--->
-</head>
-<body bgcolor="white">
-
-This package defines 
-connections between the virtual machine
-using the JDI and the target virtual machine. 
-In concert with {@link com.sun.jdi.VirtualMachineManager}
-it is the mechanism for launching, attaching, etc to 
-target virtual machines.
-<p>
-Methods may be added to the interfaces in the JDI packages in future 
-releases. Existing packages may be renamed if the JDI becomes a standard 
-extension.
-  </body>
-</html>
diff --git a/ojluni/src/main/java/com/sun/jdi/connect/spi/ClosedConnectionException.java b/ojluni/src/main/java/com/sun/jdi/connect/spi/ClosedConnectionException.java
deleted file mode 100755
index 36d8a08..0000000
--- a/ojluni/src/main/java/com/sun/jdi/connect/spi/ClosedConnectionException.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-package com.sun.jdi.connect.spi;
-
-/**
- * This exception may be thrown as a result of an asynchronous
- * close of a {@link Connection} while an I/O operation is
- * in progress.
- *
- * <p> When a thread is blocked in {@link Connection#readPacket
- * readPacket} waiting for packet from a target VM the
- * {@link Connection} may be closed asynchronous by another
- * thread invokving the {@link Connection#close close} method.
- * When this arises the thread in readPacket will throw this
- * exception. Similiarly when a thread is blocked in
- * {@link Connection#writePacket} the Connection may be closed.
- * When this occurs the thread in writePacket will throw
- * this exception.
- *
- * @see Connection#readPacket
- * @see Connection#writePacket
- *
- * @since 1.5
- */
-public class ClosedConnectionException extends java.io.IOException {
-
-    /**
-     * Constructs a <tt>ClosedConnectionException</tt> with no detail
-     * message.
-     */
-    public ClosedConnectionException() {
-    }
-
-    /**
-     * Constructs a <tt>ClosedConnectionException</tt> with the
-     * specified detail message.
-     *
-     * @param message the detail message pertaining to this exception.
-     */
-    public ClosedConnectionException(String message) {
-        super(message);
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/connect/spi/Connection.java b/ojluni/src/main/java/com/sun/jdi/connect/spi/Connection.java
deleted file mode 100755
index 6d87949..0000000
--- a/ojluni/src/main/java/com/sun/jdi/connect/spi/Connection.java
+++ /dev/null
@@ -1,200 +0,0 @@
-/*
- * Copyright (c) 2003, 2006, 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.jdi.connect.spi;
-
-import java.io.IOException;
-
-/**
- * A connection between a debugger and a target VM which it debugs.
- *
- * <p> A Connection represents a bi-directional communication channel
- * between a debugger and a target VM. A Connection is created when
- * {@link com.sun.jdi.connect.spi.TransportService TransportService}
- * establishes a connection and successfully handshakes with a target
- * VM. A TransportService implementation provides a reliable
- * JDWP packet transportation service and consequently a Connection
- * provides a reliable flow of JDWP packets between the debugger
- * and the target VM. A Connection is stream oriented, that is, the
- * JDWP packets written to a connection are read by the target VM
- * in the order in which they were written. Similiarly packets written
- * to a Connection by the target VM are read by the debugger in the
- * order in which they were written.
- *
- * <p> A connection is either open or closed. It is open upon creation,
- * and remains open until it is closed. Once closed, it remains closed,
- * and any attempt to invoke an I/O operation upon it will cause a
- * {@link ClosedConnectionException} to be thrown. A connection can
- * be tested by invoking the {@link #isOpen isOpen} method.
- *
- * <p> A Connection is safe for access by multiple concurrent threads,
- * although at most one thread may be reading and at most one thread may
- * be writing at any given time. </p>
- *
- * @since 1.5
- */
-
-public abstract class Connection {
-
-    /**
-     * Reads a packet from the target VM.
-     *
-     * <p> Attempts to read a JDWP packet from the target VM.
-     * A read operation may block indefinitely and only returns
-     * when it reads all bytes of a packet, or in the case of a
-     * transport service that is based on a stream-oriented
-     * communication protocol, the end of stream is encountered.
-     *
-     * <p> Reading a packet does not do any integrity checking on
-     * the packet aside from a check that the length of the packet
-     * (as indicated by the value of the <tt>length</tt> field, the
-     * first four bytes of the packet) is 11 or more bytes.
-     * If the value of the <tt>length</tt> value is less then 11
-     * then an <tt>IOException</tt> is thrown.
-     *
-     * <p> Returns a byte array of a length equal to the length
-     * of the received packet, or a byte array of length 0 when an
-     * end of stream is encountered. If end of stream is encountered
-     * after some, but not all bytes of a packet, are read then it
-     * is considered an I/O error and an <tt>IOException</tt> is
-     * thrown. The first byte of the packet is stored in element
-     * <tt>0</tt> of the byte array, the second in element <tt>1</tt>,
-     * and so on. The bytes in the byte array are laid out as per the
-     * <a href="../../../../../../../../../technotes/guides/jpda/jdwp-spec.html">
-     * JDWP specification</a>. That is, all fields in the packet
-     * are in big endian order as per the JDWP specification.
-     *
-     * <p> This method may be invoked at any time.  If another thread has
-     * already initiated a {@link #readPacket readPacket} on this
-     * connection then the invocation of this method will block until the
-     * first operation is complete. </p>
-     *
-     * @return  the packet read from the target VM
-     *
-     * @throws  ClosedConnectionException
-     *          If the connection is closed, or another thread closes
-     *          the connection while the readPacket is in progress.
-     *
-     * @throws  java.io.IOException
-     *          If the length of the packet (as indictaed by the first
-     *          4 bytes) is less than 11 bytes, or an I/O error occurs.
-     *
-     *
-     */
-    public abstract byte[] readPacket() throws IOException;
-
-    /**
-     * Writes a packet to the target VM.
-     *
-     * <p> Attempts to write, or send, a JDWP packet to the target VM.
-     * A write operation only returns after writing the entire packet
-     * to the target VM. Writing the entire packet does not mean
-     * the entire packet has been transmitted to the target VM
-     * but rather that all bytes have been written to the
-     * transport service. A transport service based on a TCP/IP connection
-     * may, for example, buffer some or all of the packet before
-     * transmission on the network.
-     *
-     * <p> The byte array provided to this method should be laid out
-     * as per the <a
-     * href="../../../../../../../../../technotes/guides/jpda/jdwp-spec.html">
-     * JDWP specification</a>. That is, all fields in the packet
-     * are in big endian order. The first byte, that is element
-     * <tt>pkt[0]</tt>, is the first byte of the <tt>length</tt> field.
-     * <tt>pkt[1]</tt> is the second byte of the <tt>length</tt> field,
-     * and so on.
-     *
-     * <p> Writing a packet does not do any integrity checking on
-     * the packet aside from checking the packet length. Checking
-     * the packet length requires checking that the value of the
-     * <tt>length</tt> field (as indicated by the first four bytes
-     * of the packet) is 11 or greater. Consequently the length of
-     * the byte array provided to this method, that is
-     * <tt>pkt.length</tt>, must be 11 or more, and must be equal
-     * or greater than the value of the <tt>length</tt> field. If the
-     * length of the byte array is greater than the value of
-     * the <tt>length</tt> field then all bytes from element
-     * <tt>pkt[length]</tt> onwards are ignored. In other words,
-     * any additional bytes that follow the packet in the byte
-     * array are ignored and will not be transmitted to the target
-     * VM.
-     *
-     * <p> A write operation may block or may complete immediately.
-     * The exact circumstances when an operation blocks depends on
-     * the transport service. In the case of a TCP/IP connection to
-     * the target VM, the writePacket method may block if there is
-     * network congestion or there is insufficient space to buffer
-     * the packet in the underlying network system.
-     *
-     * <p> This method may be invoked at any time.  If another thread has
-     * already initiated a write operation upon this Connection then
-     * a subsequent invocation of this method will block until the first
-     * operation is complete. </p>
-     *
-     * @param   pkt
-     *          The packet to write to the target VM.
-     *
-     * @throws  ClosedConnectionException
-     *          If the connection is closed, or another thread closes
-     *          the connection while the write operation is in progress.
-     *
-     * @throws  java.io.IOException
-     *          If an I/O error occurs.
-     *
-     * @throws  IllegalArgumentException
-     *          If the value of the <tt>length</tt> field is invalid,
-     *          or the byte array is of insufficient length.
-     */
-    public abstract void writePacket(byte pkt[]) throws IOException;
-
-    /**
-     * Closes this connection.
-     *
-     * <p> If the connection is already closed then invoking this method
-     * has no effect. After a connection is closed, any further attempt
-     * calls to {@link #readPacket readPacket} or {@link #writePacket
-     * writePacket} will throw a {@link ClosedConnectionException}.
-     *
-     * <p> Any thread currently blocked in an I/O operation ({@link
-     * #readPacket readPacket} or {@link #writePacket writePacket})
-     * will throw a {@link ClosedConnectionException}).
-     *
-     * <p> This method may be invoked at any time.  If some other thread has
-     * already invoked it, however, then another invocation will block until
-     * the first invocation is complete, after which it will return without
-     * effect. </p>
-     *
-     * @throws  java.io.IOException
-     *          If an I/O error occurs
-     */
-    public abstract void close() throws IOException;
-
-    /**
-     * Tells whether or not this connection is open.  </p>
-     *
-     * @return <tt>true</tt> if, and only if, this connection is open
-     */
-    public abstract boolean isOpen();
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/connect/spi/TransportService.java b/ojluni/src/main/java/com/sun/jdi/connect/spi/TransportService.java
deleted file mode 100755
index 6db4cfe..0000000
--- a/ojluni/src/main/java/com/sun/jdi/connect/spi/TransportService.java
+++ /dev/null
@@ -1,377 +0,0 @@
-/*
- * Copyright (c) 2003, 2006, 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.jdi.connect.spi;
-
-import java.io.IOException;
-import com.sun.jdi.connect.TransportTimeoutException;
-
-/**
- * A transport service for connections between a debugger and
- * a target VM.
- *
- * <p> A transport service is a concrete subclass of this class
- * that has a zero-argument constructor and implements the abstract
- * methods specified below. It is the underlying service
- * used by a {@link com.sun.jdi.connect.Transport} for
- * connections between a debugger and a target VM.
- *
- * <p> A transport service is used to establish a connection
- * between a debugger and a target VM, and to transport Java
- * Debug Wire Protocol (JDWP) packets over an underlying
- * communication protocol. In essence a transport service
- * implementation binds JDWP (as specified in the
- * <a href="../../../../../../../../../technotes/guides/jpda/jdwp-spec.html">
- * JDWP specification</a>) to an underlying communication
- * protocol. A transport service implementation provides
- * a reliable JDWP packet transportation service. JDWP
- * packets are sent to and from the target VM without duplication
- * or data loss. A transport service implementation may be
- * based on an underlying communication protocol that is
- * reliable or unreliable. If the underlying communication
- * protocol is reliable then the transport service implementation
- * may be relatively simple and may only need to transport JDWP
- * packets as payloads of the underlying communication
- * protocol. In the case of an unreliable communication
- * protocol the transport service implementation may include
- * additional protocol support in order to ensure that packets
- * are not duplicated and that there is no data loss. The
- * details of such protocols are specific to the implementation
- * but may involve techniques such as the <i>positive
- * acknowledgment with retransmission</i> technique used in
- * protocols such as the Transmission Control Protocol (TCP)
- * (see <a href="http://www.ietf.org/rfc/rfc0793.txt"> RFC 793
- * </a>).
- *
- * <p> A transport service can be used to initiate a connection
- * to a target VM. This is done by invoking the {@link #attach}
- * method. Alternatively, a transport service can listen and
- * accept connections initiated by a target VM. This is done
- * by invoking the {@link #startListening(String)} method to
- * put the transport into listen mode. Then the {@link #accept}
- * method is used to accept a connection initiated by a
- * target VM.
- *
- * @since 1.5
- */
-
-public abstract class TransportService {
-
-    /**
-     * Returns a name to identify the transport service.
-     *
-     * @return  The name of the transport service
-     */
-    public abstract String name();
-
-    /**
-     * Returns a description of the transport service.
-     *
-     * @return  The description of the transport service
-     */
-    public abstract String description();
-
-    /**
-     * The transport service capabilities.
-     */
-    public static abstract class Capabilities {
-
-        /**
-         * Tells whether or not this transport service can support
-         * multiple concurrent connections to a single address that
-         * it is listening on.
-         *
-         * @return  <tt>true</tt> if, and only if, this transport
-         *          service supports multiple connections.
-         */
-        public abstract boolean supportsMultipleConnections();
-
-
-        /**
-         * Tell whether or not this transport service supports a timeout
-         * when attaching to a target VM.
-         *
-         * @return      <tt>true</tt> if, and only if, this transport
-         *              service supports attaching with a timeout.
-         *
-         * @see #attach(String,long,long)
-         */
-        public abstract boolean supportsAttachTimeout();
-
-        /**
-         * Tell whether or not this transport service supports a
-         * timeout while waiting for a target VM to connect.
-         *
-         * @return  <tt>true</tt> if, and only if, this transport
-         *          service supports timeout while waiting for
-         *          a target VM to connect.
-         *
-         * @see #accept(TransportService.ListenKey,long,long)
-         */
-        public abstract boolean supportsAcceptTimeout();
-
-        /**
-         * Tells whether or not this transport service supports a
-         * timeout when handshaking with the target VM.
-         *
-         * @return  <tt>true</tt> if, and only if, this transport
-         *          service supports a timeout while handshaking
-         *          with the target VM.
-         *
-         * @see #attach(String,long,long)
-         * @see #accept(TransportService.ListenKey,long,long)
-         */
-        public abstract boolean supportsHandshakeTimeout();
-
-    }
-
-    /**
-     * Returns the capabilities of the transport service.
-     *
-     * @return  the transport service capabilities
-     */
-    public abstract Capabilities capabilities();
-
-    /**
-     * Attaches to the specified address.
-     *
-     * <p> Attaches to the specified address and returns a connection
-     * representing the bi-directional communication channel to the
-     * target VM.
-     *
-     * <p> Attaching to the target VM involves two steps:
-     * First, a connection is established to specified address. This
-     * is followed by a handshake to ensure that the connection is
-     * to a target VM. The handshake involves the exchange
-     * of a string <i>JDWP-Handshake</i> as specified in the <a
-     * href="../../../../../../../../../technotes/guides/jpda/jdwp-spec.html">
-     * Java Debug Wire Protocol</a> specification.
-     *
-     * @param   address
-     *          The address of the target VM.
-     *
-     * @param   attachTimeout
-     *          If this transport service supports an attach timeout,
-     *          and if <tt>attachTimeout</tt> is positive, then it specifies
-     *          the timeout, in milliseconds (more or less), to use
-     *          when attaching to the target VM.  If the transport service
-     *          does not support an attach timeout, or if <tt>attachTimeout</tt>
-     *          is specified as zero then attach without any timeout.
-     *
-     * @param   handshakeTimeout
-     *          If this transport service supports a handshake timeout,
-     *          and if <tt>handshakeTimeout</tt> is positive, then it
-     *          specifies the timeout, in milliseconds (more or less), to
-     *          use when handshaking with the target VM. The exact
-     *          usage of the timeout are specific to the transport service.
-     *          A transport service may, for example, use the handshake
-     *          timeout as the inter-character timeout while waiting for
-     *          the <i>JDWP-Handshake</i> message from the target VM.
-     *          Alternatively, a transport service may, for example,
-     *          use the handshakeTimeout as a timeout for the duration of the
-     *          handshake exchange.
-     *          If the transport service does not support a handshake
-     *          timeout, or if <tt>handshakeTimeout</tt> is specified
-     *          as zero then the handshake does not timeout if there
-     *          isn't a response from the target VM.
-     *
-     * @return  The Connection representing the bi-directional
-     *          communication channel to the target VM.
-     *
-     * @throws  TransportTimeoutException
-     *          If a timeout occurs while establishing the connection.
-     *
-     * @throws  IOException
-     *          If an I/O error occurs (including a timeout when
-     *          handshaking).
-     *
-     * @throws  IllegalArgumentException
-     *          If the address is invalid or the value of the
-     *          attach timeout or handshake timeout is negative.
-     *
-     * @see TransportService.Capabilities#supportsAttachTimeout()
-     */
-    public abstract Connection attach(String address, long attachTimeout,
-        long handshakeTimeout) throws IOException;
-
-    /**
-     * A <i>listen key</i>.
-     *
-     * <p> A <tt>TransportService</tt> may listen on multiple, yet
-     * different, addresses at the same time. To uniquely identify
-     * each <tt>listener</tt> a listen key is created each time that
-     * {@link #startListening startListening} is called. The listen
-     * key is used in calls to the {@link #accept accept} method
-     * to accept inbound connections to that listener. A listen
-     * key is valid until it is used as an argument to {@link
-     * #stopListening stopListening} to stop the transport
-     * service from listening on an address.
-     */
-    public static abstract class ListenKey {
-
-        /**
-         * Returns a string representation of the listen key.
-         */
-        public abstract String address();
-    }
-
-    /**
-     * Listens on the specified address for inbound connections.
-     *
-     * <p> This method starts the transport service listening on
-     * the specified address so that it can subsequently accept
-     * an inbound connection. It does not wait until an inbound
-     * connection is established.
-     *
-     * @param   address
-     *          The address to start listening for connections,
-     *          or <tt>null</tt> to listen on an address choosen
-     *          by the transport service.
-     *
-     * @return  a listen key to be used in subsequent calls to be
-     *          {@link #accept accept} or {@link #stopListening
-     *          stopListening} methods.
-     *
-     * @throws  IOException
-     *          If an I/O error occurs.
-     *
-     * @throws  IllegalArgumentException
-     *          If the specific address is invalid
-     */
-    public abstract ListenKey startListening(String address) throws IOException;
-
-    /**
-     * Listens on an address choosen by the transport service.
-     *
-     * <p> This convenience method works as if by invoking {@link
-     * #startListening(String) startListening(<tt>null</tt>)}. </p>
-     *
-     * @return  a listen key to be used in subsequent calls to be
-     *          {@link #accept accept} or {@link #stopListening
-     *          stopListening} methods.
-     *
-     * @throws  IOException
-     *          If an I/O error occurs.
-     */
-    public abstract ListenKey startListening() throws IOException;
-
-    /**
-     * Stop listening for inbound connections.
-     *
-     * <p> Invoking this method while another thread is blocked
-     * in {@link #accept accept}, with the same listen key,
-     * waiting to accept a connection will cause that thread to
-     * throw an IOException. If the thread blocked in accept
-     * has already accepted a connection from a target VM and
-     * is in the process of handshaking with the target VM then
-     * invoking this method will not cause the thread to throw
-     * an exception.
-     *
-     * @param   listenKey
-     *          The listen key obtained from a previous call to {@link
-     *          #startListening(String)} or {@link #startListening()}.
-     *
-     * @throws  IllegalArgumentException
-     *          If the listen key is invalid
-     *
-     * @throws  IOException
-     *          If an I/O error occurs.
-     */
-    public abstract void stopListening(ListenKey listenKey) throws IOException;
-
-    /**
-     * Accept a connection from a target VM.
-     *
-     * <p> Waits (indefinitely or with timeout) to accept a connection
-     * from a target VM. Returns a connection representing the
-     * bi-directional communication channel to the target VM.
-     *
-     * <p> Accepting a connection from a target VM involves two
-     * steps. First, the transport service waits to accept
-     * the connection from the target VM. Once the connection is
-     * established a handshake is performed to ensure that the
-     * connection is indeed to a target VM. The handshake involves
-     * the exchange of a string <i>JDWP-Handshake</i> as specified
-     * in the <a
-     * href="../../../../../../../../../technotes/guides/jpda/jdwp-spec.html">
-     * Java Debug Wire Protocol</a> specification.
-     *
-     * @param   listenKey
-     *          A listen key obtained from a previous call to {@link
-     *          #startListening(String)} or {@link #startListening()}.
-     *
-     * @param   acceptTimeout
-     *          if this transport service supports an accept timeout, and
-     *          if <tt>acceptTimeout</tt> is positive then block for up to
-     *          <tt>acceptTimeout</tt> milliseconds, more or less, while waiting
-     *          for the target VM to connect.
-     *          If the transport service does not support an accept timeout
-     *          or if <tt>acceptTimeout</tt> is zero then block indefinitely
-     *          for a target VM to connect.
-     *
-     * @param   handshakeTimeout
-     *          If this transport service supports a handshake timeout,
-     *          and if <tt>handshakeTimeout</tt> is positive, then it
-     *          specifies the timeout, in milliseconds (more or less), to
-     *          use when handshaking with the target VM. The exact
-     *          usage of the timeout is specific to the transport service.
-     *          A transport service may, for example, use the handshake
-     *          timeout as the inter-character timeout while waiting for
-     *          the <i>JDWP-Handshake</i> message from the target VM.
-     *          Alternatively, a transport service may, for example,
-     *          use the timeout as a timeout for the duration of the
-     *          handshake exchange.
-     *          If the transport service does not support a handshake
-     *          timeout, of if <tt>handshakeTimeout</tt> is specified
-     *          as zero then the handshake does not timeout if there
-     *          isn't a response from the target VM.
-     *
-     * @return  The Connection representing the bi-directional
-     *          communication channel to the target VM.
-     *
-     * @throws  TransportTimeoutException
-     *          If a timeout occurs while waiting for a target VM
-     *          to connect.
-     *
-     * @throws  IOException
-     *          If an I/O error occurs (including a timeout when
-     *          handshaking).
-     *
-     * @throws  IllegalArgumentException
-     *          If the value of the acceptTimeout argument, or
-     *          handshakeTimeout is negative, or an invalid listen key
-     *          is provided.
-     *
-     * @throws  IllegalStateException
-     *          If {@link #stopListening stopListening} has already been
-     *          called with this listen key and the transport service
-     *          is no longer listening for inbound connections.
-     *
-     * @see TransportService.Capabilities#supportsAcceptTimeout()
-     */
-    public abstract Connection accept(ListenKey listenKey, long acceptTimeout,
-        long handshakeTimeout) throws IOException;
-
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/connect/spi/package.html b/ojluni/src/main/java/com/sun/jdi/connect/spi/package.html
deleted file mode 100755
index 29f98ed..0000000
--- a/ojluni/src/main/java/com/sun/jdi/connect/spi/package.html
+++ /dev/null
@@ -1,35 +0,0 @@
-<html>
-<head>
-    <title>com.sun.jdi.connect.spi description</title>
-<!--
- 
-Copyright (c) 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.
--->
-</head>
-<body bgcolor="white">
-This package comprises the interfaces and classes used to
-develop new {@link com.sun.jdi.connect.spi.TransportService} 
-implementations.
-  </body>
-</html>
diff --git a/ojluni/src/main/java/com/sun/jdi/doc-files/signature.html b/ojluni/src/main/java/com/sun/jdi/doc-files/signature.html
deleted file mode 100755
index f7bdd8d..0000000
--- a/ojluni/src/main/java/com/sun/jdi/doc-files/signature.html
+++ /dev/null
@@ -1,39 +0,0 @@
-<HTML>
-<HEAD>
-<TITLE>
-JDI Type Signatures
-</TITLE>
-</HEAD>
-<BODY BGCOLOR="white">
-<dl><dd>
-<Table Border="0">
-<caption><h2>JDI Type Signatures</h2></caption>
-<tr><th>Type Signature
-<th>Java Type
-<tr><td>Z<td>boolean
-<tr><td>B<td>byte
-<tr><td>C<td>char
-<tr><td>S<td>short
-<tr><td>I<td>int
-<tr><td>J<td>long
-<tr><td>F<td>float
-<tr><td>D<td>double
-<tr><td><strong>L</strong> <em>fully-qualified-class</em> 
-<strong>;</strong>
-<td>fully-qualified-class
-<tr><td><strong>[</strong> <em>type
-</em>
-<td><em>type</em>[]
-<tr><td>
-<strong>(</strong> <em>arg-types </em><strong>)</strong> <em>ret-type
-</em>
-<td>method type (including constructors)
-</Table>
-</dd></dl>
-<p>For example, the Java method:
-<p><pre>    long f (int n, String s, int[] arr);
-</pre>has the following type signature:
-<p><pre>    (ILjava/lang/String;[I)J
-</pre>
-</BODY>
-</HTML>
diff --git a/ojluni/src/main/java/com/sun/jdi/event/AccessWatchpointEvent.java b/ojluni/src/main/java/com/sun/jdi/event/AccessWatchpointEvent.java
deleted file mode 100755
index 1770fca..0000000
--- a/ojluni/src/main/java/com/sun/jdi/event/AccessWatchpointEvent.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (c) 1998, 1999, 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.jdi.event;
-
-import com.sun.jdi.*;
-
-/**
- * Notification of a field access in the target VM. Field modifications
- * are not considered field accesses.
- *
- * @see EventQueue
- * @see VirtualMachine
- *
- * @author Robert Field
- * @since  1.3
- */
-public interface AccessWatchpointEvent extends WatchpointEvent {
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/event/BreakpointEvent.java b/ojluni/src/main/java/com/sun/jdi/event/BreakpointEvent.java
deleted file mode 100755
index 811e6f7..0000000
--- a/ojluni/src/main/java/com/sun/jdi/event/BreakpointEvent.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (c) 1998, 1999, 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.jdi.event;
-
-import com.sun.jdi.*;
-
-import java.util.List;
-
-/**
- * Notification of a breakpoint in the target VM.
- * The breakpoint event
- * is generated before the code at its location is executed.
- * When a location
- * is reached which satisfies a currently enabled
- * {@link com.sun.jdi.request.BreakpointRequest breakpoint request},
- * an {@link EventSet event set}
- * containing an instance of this class will be added
- * to the VM's event queue.
- *
- * @see EventQueue
- * @see VirtualMachine
- * @see com.sun.jdi.request.BreakpointRequest
- *
- * @author Robert Field
- * @since  1.3
- */
-public interface BreakpointEvent extends LocatableEvent {
-
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/event/ClassPrepareEvent.java b/ojluni/src/main/java/com/sun/jdi/event/ClassPrepareEvent.java
deleted file mode 100755
index 9b57fee..0000000
--- a/ojluni/src/main/java/com/sun/jdi/event/ClassPrepareEvent.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright (c) 1998, 1999, 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.jdi.event;
-
-import com.sun.jdi.*;
-
-/**
- * Notification of a class prepare in the target VM. See the JVM
- * specification for a definition of class preparation. Class prepare
- * events are not generated for primtiive classes (for example,
- * java.lang.Integer.TYPE).
- *
- * @see EventQueue
- * @see VirtualMachine
- *
- * @author Robert Field
- * @since  1.3
- */
-public interface ClassPrepareEvent extends Event {
-    /**
-     * Returns the thread in which this event has occurred.
-     * <p>
-     * In rare cases, this event may occur in a debugger system
-     * thread within the target VM. Debugger threads take precautions
-     * to prevent these events, but they cannot be avoided under some
-     * conditions, especially for some subclasses of
-     * {@link java.lang.Error}.
-     * If the event was generated by a debugger system thread, the
-     * value returned by this method is null, and if the requested
-     * suspend policy for the event was
-     * {@link com.sun.jdi.request.EventRequest#SUSPEND_EVENT_THREAD},
-     * all threads will be suspended instead, and the
-     * {@link EventSet#suspendPolicy} will reflect this change.
-     * <p>
-     * Note that the discussion above does not apply to system threads
-     * created by the target VM during its normal (non-debug) operation.
-     *
-     * @return a {@link ThreadReference} which mirrors the event's thread in
-     * the target VM, or null in the rare cases described above.
-     */
-    public ThreadReference thread();
-
-    /**
-     * Returns the reference type for which this event was generated.
-     *
-     * @return a {@link ReferenceType} which mirrors the class, interface, or
-     * array which has been linked.
-     */
-    public ReferenceType referenceType();
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/event/ClassUnloadEvent.java b/ojluni/src/main/java/com/sun/jdi/event/ClassUnloadEvent.java
deleted file mode 100755
index 8835b1e..0000000
--- a/ojluni/src/main/java/com/sun/jdi/event/ClassUnloadEvent.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (c) 1998, 1999, 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.jdi.event;
-
-import com.sun.jdi.*;
-
-/**
- * Notification of a class unload in the target VM.
- * <p>
- * There are severe constraints on the debugger back-end during
- * garbage collection, so unload information is greatly limited.
- *
- * @see EventQueue
- * @see VirtualMachine
- *
- * @author Robert Field
- * @since  1.3
- */
-public interface ClassUnloadEvent extends Event {
-    /**
-     * Returns the name of the class that has been unloaded.
-     */
-    public String className();
-
-    /**
-     * Returns the JNI-style signature of the class that has been unloaded.
-     */
-    public String classSignature();
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/event/Event.java b/ojluni/src/main/java/com/sun/jdi/event/Event.java
deleted file mode 100755
index ba00573..0000000
--- a/ojluni/src/main/java/com/sun/jdi/event/Event.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright (c) 1998, 1999, 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.jdi.event;
-
-import com.sun.jdi.*;
-import com.sun.jdi.request.EventRequest;
-
-/**
- * An occurrence in a target VM that is of interest to a debugger. Event is
- * the common superinterface for all events (examples include
- * {@link BreakpointEvent}, {@link ExceptionEvent},
- * {@link ClassPrepareEvent}).
- * When an event occurs, an instance of Event as a component of
- * an {@link EventSet} is enqueued in the
- * {@link VirtualMachine}'s {@link EventQueue}.
- *
- * @see EventSet
- * @see EventQueue
- *
- * @author Robert Field
- * @since  1.3
- */
-public interface Event extends Mirror {
-
-    /**
-     * @return The {@link EventRequest} that requested this event.
-     * Some events (eg. {@link VMDeathEvent}) may not have
-     * a cooresponding request and thus will return null.
-     */
-    EventRequest request();
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/event/EventIterator.java b/ojluni/src/main/java/com/sun/jdi/event/EventIterator.java
deleted file mode 100755
index 220a1e4..0000000
--- a/ojluni/src/main/java/com/sun/jdi/event/EventIterator.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package com.sun.jdi.event;
-
-import com.sun.jdi.*;
-
-import java.util.Iterator;
-
-/**
- * EventIterators are unmodifiable.
- *
- * @see Event
- * @see EventSet
- * @see EventSet#iterator
- *
- * @author Robert Field
- * @since  1.3
- */
-
-public interface EventIterator extends Iterator<Event> {
-
-    /**
-     * @return The next {@link Event} in an {@link EventSet}.
-     */
-    Event nextEvent();
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/event/EventQueue.java b/ojluni/src/main/java/com/sun/jdi/event/EventQueue.java
deleted file mode 100755
index 4c966a9..0000000
--- a/ojluni/src/main/java/com/sun/jdi/event/EventQueue.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package com.sun.jdi.event;
-
-import com.sun.jdi.*;
-
-/**
- * Manager of incoming debugger events for a target VM.
- * Events are always grouped in {@link EventSet}s.
- * EventSets generated by the debugger back end can be read
- * here. There is one instance of EventQueue assigned to a particular
- * {@link com.sun.jdi.VirtualMachine VirtualMachine}.
- * <P>
- * Some events cause the suspension of the target VM - event requests
- * ({@link com.sun.jdi.request}) with a
- * {@link com.sun.jdi.request.EventRequest#suspendPolicy() suspend policy}
- * of {@link com.sun.jdi.request.EventRequest#SUSPEND_ALL SUSPEND_ALL}
- * or {@link com.sun.jdi.request.EventRequest#SUSPEND_EVENT_THREAD
- * SUSPEND_EVENT_THREAD} and sometimes
- * {@link VMStartEvent}.
- * If these suspensions are not resumed the target VM will hang.
- * Thus, it is always good policy to
- * {@link #remove() remove()} every EventSet from the
- * event queue until an EventSet containing a
- * {@link VMDisconnectEvent} is read.
- * Unless {@link com.sun.jdi.VirtualMachine#resume() resume} is
- * being handled in another way, each EventSet should invoke
- * {@link EventSet#resume()}.
- *
- * @see EventSet
- * @see VirtualMachine
- *
- * @author Robert Field
- * @since  1.3
- */
-
-public interface EventQueue extends Mirror {
-
-    /**
-     * Waits forever for the next available event.
-     *
-     * @return the next {@link EventSet}.
-     * @throws InterruptedException if any thread has interrupted
-     * this thread.
-     * @throws com.sun.jdi.VMDisconnectedException if the connection
-     * to the target VM is no longer available.  Note this will always
-     * be preceded by a {@link com.sun.jdi.event.VMDisconnectEvent}.
-     */
-    EventSet remove() throws InterruptedException;
-
-    /**
-     * Waits a specified time for the next available event.
-     *
-     * @param timeout Time in milliseconds to wait for the next event
-     * @return the next {@link EventSet}, or null if there is a timeout.
-     * @throws InterruptedException if any thread has interrupted
-     * this thread.
-     * @throws com.sun.jdi.VMDisconnectedException if the connection
-     * to the target VM is no longer available.  Note this will always
-     * be preceded by a {@link com.sun.jdi.event.VMDisconnectEvent}.
-     * @throws IllegalArgumentException if the timeout argument
-     * contains an illegal value.
-     */
-    EventSet remove(long timeout) throws InterruptedException;
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/event/EventSet.java b/ojluni/src/main/java/com/sun/jdi/event/EventSet.java
deleted file mode 100755
index 26efafc..0000000
--- a/ojluni/src/main/java/com/sun/jdi/event/EventSet.java
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package com.sun.jdi.event;
-
-import com.sun.jdi.*;
-
-import java.util.Set;
-
-/**
- * Several {@link Event} objects may be created at a given time by
- * the target {@link VirtualMachine}. For example, there may be
- * more than one {@link com.sun.jdi.request.BreakpointRequest}
- * for a given {@link Location}
- * or you might single step to the same location as a
- * BreakpointRequest.  These {@link Event} objects are delivered
- * together as an EventSet.  For uniformity, an EventSet is always used
- * to deliver {@link Event} objects.  EventSets are delivered by
- * the {@link EventQueue}.
- * EventSets are unmodifiable.
- * <P>
- * Associated with the issuance of an event set, suspensions may
- * have occurred in the target VM.  These suspensions correspond
- * with the {@link #suspendPolicy() suspend policy}.
- * To assure matching resumes occur, it is recommended,
- * where possible,
- * to complete the processing of an event set with
- * {@link #resume() EventSet.resume()}.
- * <P>
- * The events that are grouped in an EventSet are restricted in the
- * following ways:
- * <P>
- * <UL>
- * <LI>Always singleton sets:
- *     <UL>
- *     <LI>{@link VMStartEvent}
- *     <LI>{@link VMDisconnectEvent}
- *     </UL>
- * <LI>Only with other VMDeathEvents:
- *     <UL>
- *     <LI>{@link VMDeathEvent}
- *     </UL>
- * <LI>Only with other ThreadStartEvents for the same thread:
- *     <UL>
- *     <LI>{@link ThreadStartEvent}
- *     </UL>
- * <LI>Only with other ThreadDeathEvents for the same thread:
- *     <UL>
- *     <LI>{@link ThreadDeathEvent}
- *     </UL>
- * <LI>Only with other ClassPrepareEvents for the same class:
- *     <UL>
- *     <LI>{@link ClassPrepareEvent}
- *     </UL>
- * <LI>Only with other ClassUnloadEvents for the same class:
- *     <UL>
- *     <LI>{@link ClassUnloadEvent}
- *     </UL>
- * <LI>Only with other AccessWatchpointEvents for the same field access:
- *     <UL>
- *     <LI>{@link AccessWatchpointEvent}
- *     </UL>
- * <LI>Only with other ModificationWatchpointEvents for the same field
- * modification:
- *     <UL>
- *     <LI>{@link ModificationWatchpointEvent}
- *     </UL>
- * <LI>Only with other ExceptionEvents for the same exception occurrance:
- *     <UL>
- *     <LI>{@link ExceptionEvent}
- *     </UL>
- * <LI>Only with other MethodExitEvents for the same method exit:
- *     <UL>
- *     <LI>{@link MethodExitEvent}
- *     </UL>
- * <LI>Only with other Monitor contended enter events for the same monitor object:
- *     <UL>
- *     <LI>Monitor Contended Enter Event
- *     </UL>
- * <LI>Only with other Monitor contended entered events for the same monitor object:
- *     <UL>
- *     <LI>Monitor Contended Entered Event
- *    </UL>
- * <LI>Only with other Monitor wait events for the same monitor object:
- *     <UL>
- *     <LI>Monitor Wait Event
- *     </UL>
- * <LI>Only with other Monitor waited events for the same monitor object:
- *     <UL>
- *     <LI>Monitor Waited Event
- *     </UL>
- * <LI>Only with other members of this group, at the same location
- * and in the same thread:
- *     <UL>
- *     <LI>{@link BreakpointEvent}
- *     <LI>{@link StepEvent}
- *     <LI>{@link MethodEntryEvent}
- *     </UL>
- * </UL>
- *
- * @see Event
- * @see EventQueue
- *
- * @author Robert Field
- * @since  1.3
- */
-
-public interface EventSet extends Mirror, Set<Event> {
-
-    /**
-     * Returns the policy used to suspend threads in the target VM
-     * for this event set. This policy is selected from the suspend
-     * policies for each event's request; the target VM chooses the
-     * policy which suspends the most threads.  The target VM
-     * suspends threads according to that policy
-     * and that policy is returned here. See
-     * {@link com.sun.jdi.request.EventRequest} for the possible
-     * policy values.
-     * <p>
-     * In rare cases, the suspend policy may differ from the requested
-     * value if a {@link ClassPrepareEvent} has occurred in a
-     * debugger system thread. See {@link ClassPrepareEvent#thread}
-     * for details.
-     *
-     * @return the suspendPolicy which is either
-     * {@link com.sun.jdi.request.EventRequest#SUSPEND_ALL SUSPEND_ALL},
-     * {@link com.sun.jdi.request.EventRequest#SUSPEND_EVENT_THREAD SUSPEND_EVENT_THREAD} or
-     * {@link com.sun.jdi.request.EventRequest#SUSPEND_NONE SUSPEND_NONE}.
-     */
-    int suspendPolicy();
-
-    /**
-     * Return an iterator specific to {@link Event} objects.
-     */
-    EventIterator eventIterator();
-
-    /**
-     * Resumes threads suspended by this event set. If the {@link #suspendPolicy}
-     * is {@link com.sun.jdi.request.EventRequest#SUSPEND_ALL}, a call
-     * to this method is equivalent to
-     * {@link com.sun.jdi.VirtualMachine#resume}. If the
-     * suspend policy is
-     * {@link com.sun.jdi.request.EventRequest#SUSPEND_EVENT_THREAD},
-     * a call to this method is equivalent to
-     * {@link com.sun.jdi.ThreadReference#resume} for the event thread.
-     * Otherwise, a call to this method is a no-op.
-     */
-    void resume();
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/event/ExceptionEvent.java b/ojluni/src/main/java/com/sun/jdi/event/ExceptionEvent.java
deleted file mode 100755
index 89cb466..0000000
--- a/ojluni/src/main/java/com/sun/jdi/event/ExceptionEvent.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Copyright (c) 1998, 1999, 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.jdi.event;
-
-import com.sun.jdi.*;
-
-/**
- * Notification of an exception in the target VM. When an exception
- * is thrown which satisfies a currently enabled
- * {@link com.sun.jdi.request.ExceptionRequest exception request},
- * an {@link EventSet event set}
- * containing an instance of this class will be added
- * to the VM's event queue.
- * If the exception is thrown from a non-native method,
- * the exception event is generated at the location where the
- * exception is thrown.
- * If the exception is thrown from a native method, the exception event
- * is generated at the first non-native location reached after the exception
- * is thrown.
- *
- * @author Robert Field
- * @since  1.3
- */
-public interface ExceptionEvent extends LocatableEvent {
-
-    /**
-     * Gets the thrown exception object. The exception object is
-     * an instance of {@link java.lang.Throwable} or a subclass in the
-     * target VM.
-     *
-     * @return an {@link ObjectReference} which mirrors the thrown object in
-     * the target VM.
-     */
-    public ObjectReference exception();
-
-    /**
-     * Gets the location where the exception will be caught. An exception
-     * is considered to be caught if, at the point of the throw, the
-     * current location is dynamically enclosed in a try statement that
-     * handles the exception. (See the JVM specification for details).
-     * If there is such a try statement, the catch location is the
-     * first code index of the appropriate catch clause.
-     * <p>
-     * If there are native methods in the call stack at the time of the
-     * exception, there are important restrictions to note about the
-     * returned catch location. In such cases,
-     * it is not possible to predict whether an exception will be handled
-     * by some native method on the call stack.
-     * Thus, it is possible that exceptions considered uncaught
-     * here will, in fact, be handled by a native method and not cause
-     * termination of the target VM. Furthermore, it cannot be assumed that the
-     * catch location returned here will ever be reached by the throwing
-     * thread. If there is
-     * a native frame between the current location and the catch location,
-     * the exception might be handled and cleared in that native method
-     * instead.
-     * <p>
-     * Note that the compiler can generate try-catch blocks in some cases
-     * where they are not explicit in the source code; for example,
-     * the code generated for <code>synchronized</code> and
-     * <code>finally</code> blocks can contain implicit try-catch blocks.
-     * If such an implicitly generated try-catch is
-     * present on the call stack at the time of the throw, the exception
-     * will be considered caught even though it appears to be uncaught from
-     * examination of the source code.
-     *
-     * @return the {@link Location} where the exception will be caught or null if
-     * the exception is uncaught.
-     */
-    public Location catchLocation();
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/event/LocatableEvent.java b/ojluni/src/main/java/com/sun/jdi/event/LocatableEvent.java
deleted file mode 100755
index d7f6605..0000000
--- a/ojluni/src/main/java/com/sun/jdi/event/LocatableEvent.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1999, 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.jdi.event;
-
-import com.sun.jdi.*;
-
-import java.util.List;
-
-/**
- * Abstract superinterface of events which have both location
- * and thread.
- *
- * @author Robert Field
- * @since  1.3
- */
-public interface LocatableEvent extends Event, Locatable {
-
-    /**
-     * Returns the thread in which this event has occurred.
-     *
-     * @return a {@link ThreadReference} which mirrors the event's thread in
-     * the target VM.
-     */
-    public ThreadReference thread();
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/event/MethodEntryEvent.java b/ojluni/src/main/java/com/sun/jdi/event/MethodEntryEvent.java
deleted file mode 100755
index 963b4e6..0000000
--- a/ojluni/src/main/java/com/sun/jdi/event/MethodEntryEvent.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright (c) 1998, 2001, 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.jdi.event;
-
-import com.sun.jdi.*;
-
-/**
- * Notification of a method invocation in the target VM. This event
- * occurs after entry into the invoked method and before any
- * code has executed.
- * Method entry events are generated for both native and non-native
- * methods.
- * <P>
- * In some VMs method entry events can occur for a particular thread
- * before its {@link ThreadStartEvent} occurs if methods are called
- * as part of the thread's initialization.
- *
- * @see EventQueue
- *
- * @author Robert Field
- * @since  1.3
- */
-public interface MethodEntryEvent extends LocatableEvent {
-
-    /**
-     * Returns the method that was entered.
-     *
-     * @return a {@link Method} which mirrors the method that was entered.
-     */
-    public Method method();
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/event/MethodExitEvent.java b/ojluni/src/main/java/com/sun/jdi/event/MethodExitEvent.java
deleted file mode 100755
index e492cc4..0000000
--- a/ojluni/src/main/java/com/sun/jdi/event/MethodExitEvent.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package com.sun.jdi.event;
-
-import com.sun.jdi.*;
-
-/**
- * Notification of a method return in the target VM. This event
- * is generated after all code in the method has executed, but the
- * location of this event is the last executed location in the method.
- * Method exit events are generated for both native and non-native
- * methods. Method exit events are not generated if the method terminates
- * with a thrown exception.
- *
- * @see EventQueue
- *
- * @author Robert Field
- * @since  1.3
- */
-public interface MethodExitEvent extends LocatableEvent {
-
-    /**
-     * Returns the method that was exited.
-     *
-     * @return a {@link Method} which mirrors the method that was exited.
-     * @throws ObjectCollectedException may be thrown if class
-     * has been garbage collected.
-     */
-    public Method method();
-
-    /**
-     * Returns the value that the method will return.
-     *
-     * Not all target virtual machines support this operation.
-     * Use
-     * {@link VirtualMachine#canGetMethodReturnValues() canGetMethodReturnValues()}
-     * to determine if this operation is supported.
-     *
-     * @return a {@link Value} which mirrors the value to be returned.
-     *
-     * @throws java.lang.UnsupportedOperationException if
-     * the target virtual machine does not support this
-     * operation - see
-     * {@link VirtualMachine#canGetMethodReturnValues() canGetMethodReturnValues()}
-     *
-     * @since 1.6
-     */
-
-    public Value returnValue();
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/event/ModificationWatchpointEvent.java b/ojluni/src/main/java/com/sun/jdi/event/ModificationWatchpointEvent.java
deleted file mode 100755
index 32d637d..0000000
--- a/ojluni/src/main/java/com/sun/jdi/event/ModificationWatchpointEvent.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1998, 1999, 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.jdi.event;
-
-import com.sun.jdi.*;
-
-/**
- * Notification of a field modification in the
- * target VM.
- *
- * @see EventQueue
- * @see VirtualMachine
- * @see com.sun.jdi.request.ModificationWatchpointRequest
- *
- * @author Robert Field
- * @since  1.3
- */
-public interface ModificationWatchpointEvent extends WatchpointEvent {
-
-    /**
-     * Value that will be assigned to the field when the instruction
-     * completes.
-     */
-    Value valueToBe();
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/event/MonitorContendedEnterEvent.java b/ojluni/src/main/java/com/sun/jdi/event/MonitorContendedEnterEvent.java
deleted file mode 100755
index 9f22f9a..0000000
--- a/ojluni/src/main/java/com/sun/jdi/event/MonitorContendedEnterEvent.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-package com.sun.jdi.event;
-
-import com.sun.jdi.*;
-
-/**
- *
- *  Notification that a thread in the target VM is attempting
- *  to enter a monitor that is already acquired by another thread.
- * <P>
- *
- * @see EventQueue
- * @see MonitorContendedEnteredEvent
- *
- *
- * @author Swamy Venkataramanappa
- * @since  1.6
- */
-public interface MonitorContendedEnterEvent extends LocatableEvent {
-
-    /**
-     * Returns the thread in which this event has occurred.
-     * <p>
-     *
-     * @return a {@link ThreadReference} which mirrors the event's thread in
-     * the target VM.
-     */
-    public ThreadReference thread();
-
-    /**
-     * Returns the method that was entered.
-     *
-     * @return an {@link ObjectReference} for the monitor.
-     */
-    public ObjectReference  monitor();
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/event/MonitorContendedEnteredEvent.java b/ojluni/src/main/java/com/sun/jdi/event/MonitorContendedEnteredEvent.java
deleted file mode 100755
index 0b4ba81..0000000
--- a/ojluni/src/main/java/com/sun/jdi/event/MonitorContendedEnteredEvent.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-package com.sun.jdi.event;
-
-import com.sun.jdi.*;
-
-/**
- *
- *  Notification that a thread in the target VM is entering a monitor
- *  after waiting for it to be released by another thread.
- * <P>
- *
- * @see EventQueue
- * @see MonitorContendedEnterEvent
- *
- * @author Swamy Venkataramanappa
- * @since  1.6
- */
-public interface MonitorContendedEnteredEvent extends LocatableEvent {
-
-    /**
-     * Returns the thread in which this event has occurred.
-     * <p>
-     *
-     * @return a {@link ThreadReference} which mirrors the event's thread in
-     * the target VM.
-     */
-    public ThreadReference thread();
-
-    /**
-     * Returns the monitor that was entered.
-     *
-     * @return an {@link ObjectReference} for the monitor.
-     */
-    public ObjectReference  monitor();
-
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/event/MonitorWaitEvent.java b/ojluni/src/main/java/com/sun/jdi/event/MonitorWaitEvent.java
deleted file mode 100755
index 7d3d717..0000000
--- a/ojluni/src/main/java/com/sun/jdi/event/MonitorWaitEvent.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright (c) 2005, 2006, 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.jdi.event;
-
-import com.sun.jdi.*;
-
-/**
- * Notification that a thread in the target VM is about to
- * wait on a monitor object.
- * <P>
- *
- * @see EventQueue
- * @see MonitorWaitedEvent
- *
- * @author Swamy Venkataramanappa
- * @since  1.6
- */
-public interface MonitorWaitEvent extends LocatableEvent {
-
-    /**
-     * Returns the thread in which monitor wait event has occurred.
-     * <p>
-     *
-     * @return a {@link ThreadReference} which mirrors the event's thread in
-     * the target VM.
-     */
-    public ThreadReference thread();
-
-    /**
-     * Returns the monitor object that the thread about to wait.
-     *
-     * @return an {@link ObjectReference} for the monitor.
-     */
-    public ObjectReference  monitor();
-
-    /**
-     * Returns the number of millisecond the thread will wait.
-     *
-     * @return a <code>jlong</code> containing monitor wait time in milliseconds.
-     */
-    public long  timeout();
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/event/MonitorWaitedEvent.java b/ojluni/src/main/java/com/sun/jdi/event/MonitorWaitedEvent.java
deleted file mode 100755
index f9b14ca..0000000
--- a/ojluni/src/main/java/com/sun/jdi/event/MonitorWaitedEvent.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (c) 2005, 2006, 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.jdi.event;
-
-import com.sun.jdi.*;
-
-/**
- * Notification that a thread in the target VM has finished
- * waiting on an monitor object.
- * <P>
- *
- * @see EventQueue
- * @see MonitorWaitEvent
- *
- * @author Swamy Venkataramanappa
- * @since  1.6
- */
-public interface MonitorWaitedEvent extends LocatableEvent {
-
-    /**
-     * Returns the thread in which this event has occurred.
-     * <p>
-     *
-     * @return a {@link ThreadReference} which mirrors the event's thread in
-     * the target VM.
-     */
-    public ThreadReference thread();
-
-    /**
-     * Returns the monitor object this thread waited on.
-     *
-     * @return an {@link ObjectReference} for the monitor.
-     */
-    public ObjectReference  monitor();
-
-    /**
-     * Returns whether the wait has timed out or been interrupted.
-     *
-     * @return <code>true</code> if the wait is timed out.
-     */
-    public boolean  timedout();
-
-
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/event/StepEvent.java b/ojluni/src/main/java/com/sun/jdi/event/StepEvent.java
deleted file mode 100755
index e6a5f75..0000000
--- a/ojluni/src/main/java/com/sun/jdi/event/StepEvent.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1998, 2001, 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.jdi.event;
-
-import com.sun.jdi.*;
-
-/**
- * Notification of step completion in the target VM.
- * The step event
- * is generated immediately before the code at its location is executed;
- * thus, if the step is entering a new method (as might occur with
- * {@link com.sun.jdi.request.StepRequest#STEP_INTO StepRequest.STEP_INTO})
- * the location of the event is the first instruction of the method.
- * When a step leaves a method, the location of the event will be the
- * first instruction after the call in the calling method; note that
- * this location may not be at a line boundary, even if
- * {@link com.sun.jdi.request.StepRequest#STEP_LINE StepRequest.STEP_LINE}
- * was used.
- *
- * @see com.sun.jdi.request.StepRequest
- * @see EventQueue
- *
- * @author Robert Field
- * @since  1.3
- */
-public interface StepEvent extends LocatableEvent {
-
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/event/ThreadDeathEvent.java b/ojluni/src/main/java/com/sun/jdi/event/ThreadDeathEvent.java
deleted file mode 100755
index 01f4b04..0000000
--- a/ojluni/src/main/java/com/sun/jdi/event/ThreadDeathEvent.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (c) 1998, 1999, 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.jdi.event;
-
-import com.sun.jdi.*;
-
-/**
- * Notification of a completed thread in the target VM. The
- * notification is generated by the dying thread before it terminates.
- * Because of this timing, it is possible
- * for {@link VirtualMachine#allThreads} to return this thread
- * after this event is received.
- * <p>
- * Note that this event gives no information
- * about the lifetime of the thread object. It may or may not be collected
- * soon depending on what references exist in the target VM.
- *
- * @see EventQueue
- * @see VirtualMachine
- * @see ThreadReference
- *
- * @author Robert Field
- * @since  1.3
- */
-public interface ThreadDeathEvent extends Event {
-    /**
-     * Returns the thread which is terminating.
-     *
-     * @return a {@link ThreadReference} which mirrors the event's thread in
-     * the target VM.
-     */
-    public ThreadReference thread();
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/event/ThreadStartEvent.java b/ojluni/src/main/java/com/sun/jdi/event/ThreadStartEvent.java
deleted file mode 100755
index 5be5d0f..0000000
--- a/ojluni/src/main/java/com/sun/jdi/event/ThreadStartEvent.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (c) 1998, 1999, 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.jdi.event;
-
-import com.sun.jdi.*;
-
-/**
- * Notification of a new running thread in the target VM.
- * The new thread can be the result of a call to
- * <code>{@link java.lang.Thread#start}</code> or the result of
- * attaching a new thread to the VM though JNI. The
- * notification is generated by the new thread some time before
- * its execution starts.
- * Because of this timing, it is possible to receive other events
- * for the thread before this event is received. (Notably,
- * {@link MethodEntryEvent}s and {@link MethodExitEvent}s might occur
- * during thread initialization.)
- * It is also possible for {@link VirtualMachine#allThreads} to return
- * a new started thread before this event is received.
- * <p>
- * Note that this event gives no information
- * about the creation of the thread object which may have happened
- * much earlier, depending on the VM being debugged.
- *
- * @see EventQueue
- * @see VirtualMachine
- * @see ThreadReference
- *
- * @author Robert Field
- * @since  1.3
- */
-public interface ThreadStartEvent extends Event {
-    /**
-     * Returns the thread which has started.
-     *
-     * @return a {@link ThreadReference} which mirrors the event's thread in
-     * the target VM.
-     */
-    public ThreadReference thread();
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/event/VMDeathEvent.java b/ojluni/src/main/java/com/sun/jdi/event/VMDeathEvent.java
deleted file mode 100755
index 7225ae0..0000000
--- a/ojluni/src/main/java/com/sun/jdi/event/VMDeathEvent.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright (c) 1998, 2001, 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.jdi.event;
-
-import com.sun.jdi.*;
-
-/**
- * Notification of target VM termination.
- * This event occurs if the target VM terminates before the
- * VM disconnects ({@link VMDisconnectEvent}).
- * Thus, this event will NOT occur if
- * external forces terminate the connection (e.g. a crash)
- * or if the connection is intentionally terminated with
- * {@link com.sun.jdi.VirtualMachine#dispose()
- *      VirtualMachine.dispose()}
- * <P>
- * On VM termination, a single unsolicited VMDeathEvent
- * will always be sent with a
- * {@link com.sun.jdi.request.EventRequest#suspendPolicy() suspend policy}
- * of {@link com.sun.jdi.request.EventRequest#SUSPEND_NONE SUSPEND_NONE}.
- * Additional VMDeathEvents will be sent in the same event set if they are
- * requested with a
- * {@link com.sun.jdi.request.VMDeathRequest VMDeathRequest}.
- * <P>
- * The VM is still intact and can be queried at the point this
- * event was initiated but immediately thereafter it is not
- * considered intact and cannot be queried.
- * Note: If the enclosing {@link EventSet} has a
- * {@link com.sun.jdi.request.EventRequest#suspendPolicy() suspend policy}
- * other than
- * {@link com.sun.jdi.request.EventRequest#SUSPEND_ALL SUSPEND_ALL}
- * the initiating point may be long past.
- * <P>
- * All VMDeathEvents will be in a single {@link EventSet},
- * no other events will be in the event set.  A resume
- * must occur to continue execution after any event set which
- * performs suspensions - in this case to allow proper shutdown.
- *
- * @see VMDisconnectEvent
- * @see com.sun.jdi.request.EventRequestManager#createVMDeathRequest
- * @see com.sun.jdi.request.VMDeathRequest
- * @see EventQueue
- * @see VirtualMachine
- *
- * @author Robert Field
- * @since  1.3
- */
-public interface VMDeathEvent extends Event {
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/event/VMDisconnectEvent.java b/ojluni/src/main/java/com/sun/jdi/event/VMDisconnectEvent.java
deleted file mode 100755
index 8301d78..0000000
--- a/ojluni/src/main/java/com/sun/jdi/event/VMDisconnectEvent.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (c) 1998, 2001, 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.jdi.event;
-
-import com.sun.jdi.*;
-
-/**
- * Notification of disconnection from target VM.
- * May be caused by normal termination of a VM,
- * VM termination by uncaught exception or other error,
- * debugger action (
- * {@link VirtualMachine#dispose} or
- * {@link VirtualMachine#exit}) or by external events
- * (for example, target process termination by the
- * operating system, transport termination, etc).
- * <p>
- * If the target VM terminates before the disconnection, this event
- * will be preceded by a {@link VMDeathEvent}.
- * <p>
- * This event is always sent.
- * There is no corresponding {@link com.sun.jdi.request.EventRequest}.
- * The enclosing singleton {@link EventSet} always has a
- * suspend policy of {@link com.sun.jdi.request.EventRequest#SUSPEND_NONE}.
- *
- * @see VMDeathEvent
- * @see EventQueue
- * @see VirtualMachine
- *
- * @author Robert Field
- * @since  1.3
- */
-public interface VMDisconnectEvent extends Event {
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/event/VMStartEvent.java b/ojluni/src/main/java/com/sun/jdi/event/VMStartEvent.java
deleted file mode 100755
index cf500a2..0000000
--- a/ojluni/src/main/java/com/sun/jdi/event/VMStartEvent.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright (c) 1998, 1999, 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.jdi.event;
-
-import com.sun.jdi.*;
-
-/**
- * Notification of initialization of a target VM.  This event is
- * received before the main thread is started and before any
- * application code has been executed. Before this event occurs
- * a significant amount of system code has executed and a number
- * of system classes have been loaded.
- * This event is always generated by the target VM, even
- * if not explicitly requested.
- *
- * @see VMDeathEvent
- * @see EventQueue
- * @see VirtualMachine
- *
- * @author Robert Field
- * @since  1.3
- */
-public interface VMStartEvent extends Event {
-    /**
-     * Returns the initial thread of the VM which has started.
-     *
-     * @return a {@link ThreadReference} which mirrors the event's thread in
-     * the target VM.
-     */
-    public ThreadReference thread();
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/event/WatchpointEvent.java b/ojluni/src/main/java/com/sun/jdi/event/WatchpointEvent.java
deleted file mode 100755
index d60908f..0000000
--- a/ojluni/src/main/java/com/sun/jdi/event/WatchpointEvent.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (c) 1998, 2000, 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.jdi.event;
-
-import com.sun.jdi.*;
-
-/**
- * Notification of a field triggered event encountered by a thread in the
- * target VM.
- *
- * @see EventQueue
- * @see VirtualMachine
- *
- * @author Robert Field
- * @since  1.3
- */
-public interface WatchpointEvent extends LocatableEvent {
-
-    /**
-     * Returns the field that is about to be accessed/modified.
-     *
-     * @return a {@link Field} which mirrors the field
-     * in the target VM.
-     * @throws ObjectCollectedException may be thrown if class
-     * has been garbage collected.
-     */
-    Field field();
-
-    /**
-     * Returns the object whose field is about to be accessed/modified.
-     * Return null is the access is to a static field.
-     *
-     * @return a {@link ObjectReference} which mirrors the event's
-     * object in the target VM.
-     */
-    ObjectReference object();
-
-    /**
-     * Current value of the field.
-     * @throws ObjectCollectedException if object or class have been
-     * garbage collected.
-     */
-    Value valueCurrent();
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/event/package.html b/ojluni/src/main/java/com/sun/jdi/event/package.html
deleted file mode 100755
index 521a8b7..0000000
--- a/ojluni/src/main/java/com/sun/jdi/event/package.html
+++ /dev/null
@@ -1,49 +0,0 @@
-<html>
-<head>
-    <title>com.sun.jdi.event description</title>
-<!--
- 
-Copyright (c) 1998, 1999, 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.
--->
-</head>
-<body bgcolor="white">
-This package defines JDI events and event processing.
-An {@link com.sun.jdi.event.Event} is always a member of an 
-{@link com.sun.jdi.event.EventSet}, which
-is retrieved from the {@link com.sun.jdi.event.EventQueue}. 
-Examples of Events include
-{@link com.sun.jdi.event.BreakpointEvent "breakpoints events"}, 
-{@link com.sun.jdi.event.ThreadStartEvent "thread creation events"} and 
-{@link com.sun.jdi.event.VMDeathEvent "virtual machine death event"}. 
-With the exception
-of termination events, all events received must be requested with an
-{@link com.sun.jdi.request.EventRequest "EventRequest"}.  The 
-{@link com.sun.jdi.request} package defines event requests and event
-request management.
-<p>
-Methods may be added to the interfaces in the JDI packages in future 
-releases. Existing packages may be renamed if the JDI becomes a standard 
-extension.
-  </body>
-</html>
diff --git a/ojluni/src/main/java/com/sun/jdi/package.html b/ojluni/src/main/java/com/sun/jdi/package.html
deleted file mode 100755
index 5aee603..0000000
--- a/ojluni/src/main/java/com/sun/jdi/package.html
+++ /dev/null
@@ -1,50 +0,0 @@
-<html>
-<head>
-    <title>com.sun.jdi package description</title>
-<!--
- 
-Copyright (c) 1998, 2000, 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.
--->
-</head>
-<body bgcolor="white">
-This is the core package of the Java Debug 
-Interface (JDI), it defines mirrors for values, types, and the target
-VirtualMachine itself - as well bootstrapping facilities.
-{@link com.sun.jdi.VirtualMachine} mirrors the target virtual machine and
-is the origin of all information provided by the JDI.  A VirtualMachine
-is typically created by using the 
-{@link com.sun.jdi.VirtualMachineManager} to create
-a connection to the target virtual machine (see the 
-{@link com.sun.jdi.connect} package).  In turn the 
-{@link com.sun.jdi.VirtualMachineManager} is typically created by calling 
-{@link com.sun.jdi.Bootstrap#virtualMachineManager()}. 
-<p>
-Most of the methods within this package can throw the unchecked exception
-{@link com.sun.jdi.VMDisconnectedException}. 
-<p>
-Methods may be added to the interfaces in the JDI packages in future 
-releases. Existing packages may be renamed if the JDI becomes a standard 
-extension.
-  </body>
-</html>
diff --git a/ojluni/src/main/java/com/sun/jdi/request/AccessWatchpointRequest.java b/ojluni/src/main/java/com/sun/jdi/request/AccessWatchpointRequest.java
deleted file mode 100755
index 7276147..0000000
--- a/ojluni/src/main/java/com/sun/jdi/request/AccessWatchpointRequest.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (c) 1998, 2001, 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.jdi.request;
-
-import com.sun.jdi.*;
-
-/**
- * Request for notification when the contents of a field are accessed
- * in the target VM.
- * This event will be triggered when the specified field is accessed
- * by Java<SUP><FONT SIZE="-2">TM</FONT></SUP> programming
- * language code or by a
- * Java Native Interface (JNI) get function (<code>Get&lt;Type&gt;Field,
- * GetStatic&lt;Type&gt;Field</code>).
- * Access by JDI does not trigger this event.
- * When an enabled AccessWatchpointRequest is satisfied, an
- * {@link com.sun.jdi.event.EventSet event set} containing an
- * {@link com.sun.jdi.event.AccessWatchpointEvent AccessWatchpointEvent} will be placed
- * on the {@link com.sun.jdi.event.EventQueue EventQueue}.
- * The collection of existing ExceptionRequests is
- * managed by the {@link EventRequestManager}
- * The collection of existing
- * watchpoints is
- * managed by the {@link EventRequestManager}.
- * <p>
- * Note that the modification
- * of a Field is not considered an access.
- *
- * @see ModificationWatchpointRequest
- * @see com.sun.jdi.event.EventQueue
- * @see EventRequestManager
- *
- * @author Robert Field
- * @since  1.3
- */
-public interface AccessWatchpointRequest extends WatchpointRequest {
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/request/BreakpointRequest.java b/ojluni/src/main/java/com/sun/jdi/request/BreakpointRequest.java
deleted file mode 100755
index d31df57..0000000
--- a/ojluni/src/main/java/com/sun/jdi/request/BreakpointRequest.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Copyright (c) 1998, 2001, 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.jdi.request;
-
-import com.sun.jdi.*;
-
-/**
- * Identifies a {@link Location} in the target VM at which
- * execution should be stopped. When an enabled BreakpointRequest is
- * satisfied, an
- * {@link com.sun.jdi.event.EventSet event set} containing an
- * {@link com.sun.jdi.event.BreakpointEvent BreakpointEvent}
- * will be placed on the
- * {@link com.sun.jdi.event.EventQueue EventQueue} and
- * the application is interrupted. The collection of existing breakpoints is
- * managed by the {@link EventRequestManager}
- *
- * @see Location
- * @see com.sun.jdi.event.BreakpointEvent
- * @see com.sun.jdi.event.EventQueue
- * @see EventRequestManager
- *
- * @author Robert Field
- * @since  1.3
- */
-public interface BreakpointRequest extends EventRequest, Locatable {
-
-    /**
-     * Returns the location of the requested breakpoint.
-     *
-     * @return the {@link Location} where this breakpoint has been set.
-     */
-    Location location();
-
-    /**
-     * Restricts the events generated by this request to those in
-     * the given thread.
-     * @param thread the thread to filter on.
-     * @throws InvalidRequestStateException if this request is currently
-     * enabled or has been deleted.
-     * Filters may be added only to disabled requests.
-     */
-    void addThreadFilter(ThreadReference thread);
-
-    /**
-     * Restricts the events generated by this request to those in
-     * which the currently executing instance is the object
-     * specified.
-     * <P>
-     * Not all targets support this operation.
-     * Use {@link VirtualMachine#canUseInstanceFilters()}
-     * to determine if the operation is supported.
-     * @since 1.4
-     * @param instance the object which must be the current instance
-     * in order to pass this filter.
-     * @throws java.lang.UnsupportedOperationException if
-     * the target virtual machine does not support this
-     * operation.
-     * @throws InvalidRequestStateException if this request is currently
-     * enabled or has been deleted.
-     * Filters may be added only to disabled requests.
-     */
-    void addInstanceFilter(ObjectReference instance);
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/request/ClassPrepareRequest.java b/ojluni/src/main/java/com/sun/jdi/request/ClassPrepareRequest.java
deleted file mode 100755
index 19f1bfc..0000000
--- a/ojluni/src/main/java/com/sun/jdi/request/ClassPrepareRequest.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package com.sun.jdi.request;
-
-import com.sun.jdi.*;
-
-/**
- * Request for notification when a class is prepared in the target VM.
- * When an enabled ClassPrepareRequest is satisfied, an
- * {@link com.sun.jdi.event.EventSet event set} containing a
- * {@link com.sun.jdi.event.ClassPrepareEvent ClassPrepareEvent}
- * will be placed on the
- * {@link com.sun.jdi.event.EventQueue EventQueue}.
- * The collection of existing ClassPrepareRequests is
- * managed by the {@link EventRequestManager}
- * <p>
- * Class preparation is defined in the Java Virtual Machine
- * Specification.
- *
- * @see com.sun.jdi.event.ClassPrepareEvent
- * @see com.sun.jdi.event.EventQueue
- * @see EventRequestManager
- *
- * @author Robert Field
- * @since  1.3
- */
-public interface ClassPrepareRequest extends EventRequest {
-
-    /**
-     * Restricts the events generated by this request to be the
-     * preparation of the given reference type and any subtypes.
-     * An event will be generated for any prepared reference type that can
-     * be safely cast to the given reference type.
-     *
-     * @param refType the reference type to filter on.
-     * @throws InvalidRequestStateException if this request is currently
-     * enabled or has been deleted.
-     * Filters may be added only to disabled requests.
-     */
-    void addClassFilter(ReferenceType refType);
-
-    /**
-     * Restricts the events generated by this request to the
-     * preparation of reference types whose name matches this restricted
-     * regular expression. Regular expressions are limited
-     * to exact matches and patterns that begin with '*' or end with '*';
-     * for example, "*.Foo" or "java.*".
-     *
-     * @param classPattern the pattern String to filter for.
-     * @throws InvalidRequestStateException if this request is currently
-     * enabled or has been deleted.
-     * Filters may be added only to disabled requests.
-     */
-    void addClassFilter(String classPattern);
-
-    /**
-     * Restricts the events generated by this request to the
-     * preparation of reference types whose name does <b>not</b> match
-     * this restricted regular expression. Regular expressions are limited
-     * to exact matches and patterns that begin with '*' or end with '*';
-     * for example, "*.Foo" or "java.*".
-     *
-     * @param classPattern the pattern String to filter against.
-     * @throws InvalidRequestStateException if this request is currently
-     * enabled or has been deleted.
-     * Filters may be added only to disabled requests.
-     */
-    void addClassExclusionFilter(String classPattern);
-
-    /**
-     * Restricts the events generated by this request to the
-     * preparation of reference types for which the restricted regular
-     * expression 'sourceNamePattern' matches one of the 'sourceNames' for
-     * the reference type being prepared.
-     * That is, if refType is the ReferenceType being prepared,
-     * then there exists at least one stratum, call it 'someStratum'
-     * on the list returned by
-     *     refType.availableStrata();
-     *
-     * such that a name on the list returned by
-     *     refType.sourceNames(someStratam)
-     *
-     * matches 'sourceNamePattern'.
-     * Regular expressions are limited
-     * to exact matches and patterns that begin with '*' or end with '*';
-     * for example, "*.Foo" or "java.*".
-     * <P>
-     * Not all targets support this operation.
-     * Use {@link VirtualMachine#canUseSourceNameFilters()}
-     * to determine if the operation is supported.
-     * @since 1.6
-     * @param sourceNamePattern the pattern string to filter for.
-     * @throws java.lang.UnsupportedOperationException if
-     * the target virtual machine does not support this
-     * operation.
-     * @throws InvalidRequestStateException if this request is currently
-     * enabled or has been deleted.
-     * Filters may be added only to disabled requests.
-     */
-    void addSourceNameFilter(String sourceNamePattern);
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/request/ClassUnloadRequest.java b/ojluni/src/main/java/com/sun/jdi/request/ClassUnloadRequest.java
deleted file mode 100755
index abad6d3..0000000
--- a/ojluni/src/main/java/com/sun/jdi/request/ClassUnloadRequest.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright (c) 1998, 2000, 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.jdi.request;
-
-import com.sun.jdi.*;
-
-/**
- * Request for notification when a class is unloaded in the target VM.
- * When an enabled ClassUnloadRequest is satisfied, a
- * {@link com.sun.jdi.event.EventSet event set} containing an
- * {@link com.sun.jdi.event.ClassUnloadEvent ClassUnloadEvent} will
- * be placed on the {@link com.sun.jdi.event.EventQueue EventQueue}.
- * The collection of existing ClassUnloadRequests is
- * managed by the {@link EventRequestManager}
- * <p>
- * Refer to the Java Virtual Machine Specification for more information
- * on class unloading.
- *
- * @see com.sun.jdi.event.ClassUnloadEvent
- * @see com.sun.jdi.event.EventQueue
- * @see EventRequestManager
- *
- * @author Robert Field
- * @since  1.3
- */
-public interface ClassUnloadRequest extends EventRequest {
-
-    /**
-     * Restricts the events generated by this request to the
-     * unloading of reference types whose name matches a restricted
-     * regular expression. Regular expressions are limited to exact
-     * matches and patterns that begin with '*' or end with '*'; for
-     * example, "*.Foo" or "java.*".
-     * @param classPattern the pattern String to filter for.
-     * @throws InvalidRequestStateException if this request is currently
-     * enabled or has been deleted.
-     * Filters may be added only to disabled requests.
-     */
-    void addClassFilter(String classPattern);
-
-    /**
-     * Restricts the events generated by this request to the
-     * unloading of reference types whose name does <b>not</b> match
-     * a restricted regular expression. Regular expressions are limited
-     * to exact matches and patterns that begin with '*' or end with '*';
-     * for example, "*.Foo" or "java.*".
-     * @param classPattern the pattern String to filter against.
-     * @throws InvalidRequestStateException if this request is currently
-     * enabled or has been deleted.
-     * Filters may be added only to disabled requests.
-     */
-    void addClassExclusionFilter(String classPattern);
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/request/DuplicateRequestException.java b/ojluni/src/main/java/com/sun/jdi/request/DuplicateRequestException.java
deleted file mode 100755
index 56c8d58..0000000
--- a/ojluni/src/main/java/com/sun/jdi/request/DuplicateRequestException.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (c) 1998, 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.jdi.request;
-
-/**
- * Thrown to indicate a duplicate event request.
- *
- * @author Robert Field
- * @since  1.3
- */
-public class DuplicateRequestException extends RuntimeException
-{
-    public DuplicateRequestException()
-    {
-        super();
-    }
-
-    public DuplicateRequestException(String s)
-    {
-        super(s);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/request/EventRequest.java b/ojluni/src/main/java/com/sun/jdi/request/EventRequest.java
deleted file mode 100755
index 9b9138e..0000000
--- a/ojluni/src/main/java/com/sun/jdi/request/EventRequest.java
+++ /dev/null
@@ -1,210 +0,0 @@
-/*
- * Copyright (c) 1998, 2006, 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.jdi.request;
-
-import com.sun.jdi.*;
-
-/**
- * Represents a request for notification of an event.  Examples include
- * {@link BreakpointRequest} and {@link ExceptionRequest}.
- * When an event occurs for which an enabled request is present,
- * an  {@link com.sun.jdi.event.EventSet EventSet} will
- * be placed on the {@link com.sun.jdi.event.EventQueue EventQueue}.
- * The collection of existing event requests is
- * managed by the {@link EventRequestManager}.
- * <p>
- * The number of events generated for an event request can be controlled
- * through filters. Filters provide additional constraints that an event
- * must satisfy before it is placed on the event queue. Multiple filters can
- * be used by making multiple calls to filter addition methods such as
- * {@link ExceptionRequest#addClassFilter(java.lang.String classPattern)}.
- * Filters are added to an event one at a time only while the event is
- * disabled. Multiple filters are applied with CUT-OFF AND, in the order
- * it was added to the request. Only events that satisfy all filters are
- * placed in the event queue.
- * <p>
- * The set of available filters is dependent on the event request,
- * some examples of filters are:
- * <ul>
- * <li>Thread filters allow control over the thread for which events are
- * generated.
- * <li>Class filters allow control over the class in which the event
- * occurs.
- * <li>Instance filters allow control over the instance in which
- * the event occurs.
- * <li>Count filters allow control over the number of times an event
- * is reported.
- * </ul>
- * Filters can dramatically improve debugger performance by reducing the
- * amount of event traffic sent from the target VM to the debugger VM.
- * <p>
- * Any method on <code>EventRequest</code> which
- * takes <code>EventRequest</code> as an parameter may throw
- * {@link com.sun.jdi.VMDisconnectedException} if the target VM is
- * disconnected and the {@link com.sun.jdi.event.VMDisconnectEvent} has been or is
- * available to be read from the {@link com.sun.jdi.event.EventQueue}.
- * <p>
- * Any method on <code>EventRequest</code> which
- * takes <code>EventRequest</code> as an parameter may throw
- * {@link com.sun.jdi.VMOutOfMemoryException} if the target VM has run out of memory.
- *
- * @see com.sun.jdi.event.BreakpointEvent
- * @see com.sun.jdi.event.EventQueue
- * @see EventRequestManager
- *
- * @author Robert Field
- * @since  1.3
- */
-public interface EventRequest extends Mirror {
-
-    /**
-     * Determines if this event request is currently enabled.
-     *
-     * @return <code>true</code> if enabled;
-     * <code>false</code> otherwise.
-     */
-    boolean isEnabled();
-
-    /**
-     * Enables or disables this event request. While this event request is
-     * disabled, the event request will be ignored and the target VM
-     * will not be stopped if any of its threads reaches the
-     * event request.  Disabled event requests still exist,
-     * and are included in event request lists such as
-     * {@link EventRequestManager#breakpointRequests()}.
-     *
-     * @param val <code>true</code> if the event request is to be enabled;
-     * <code>false</code> otherwise.
-     * @throws InvalidRequestStateException if this request
-     * has been deleted.
-     * @throws IllegalThreadStateException if this is a StepRequest,
-     * <code>val</code> is <code>true</code>, and the
-     * thread named in the request has died.
-     */
-    void setEnabled(boolean val);
-
-    /**
-     * Same as {@link #setEnabled <CODE>setEnabled(true)</CODE>}.
-     * @throws InvalidRequestStateException if this request
-     * has been deleted.
-     * @throws IllegalThreadStateException if this is a StepRequest
-     * and the thread named in the request has died.
-     */
-    void enable();
-
-    /**
-     * Same as {@link #setEnabled <CODE>setEnabled(false)</CODE>}.
-     * @throws InvalidRequestStateException if this request
-     * has been deleted.
-     */
-    void disable();
-
-    /**
-     * Limit the requested event to be reported at most once after a
-     * given number of occurrences.  The event is not reported
-     * the first <code>count - 1</code> times this filter is reached.
-     * To request a one-off event, call this method with a count of 1.
-     * <p>
-     * Once the count reaches 0, any subsequent filters in this request
-     * are applied. If none of those filters cause the event to be
-     * suppressed, the event is reported. Otherwise, the event is not
-     * reported. In either case subsequent events are never reported for
-     * this request.
-     *
-     * @param count the number of ocurrences before generating an event.
-     * @throws InvalidRequestStateException if this request is currently
-     * enabled or has been deleted.
-     * Filters may be added only to disabled requests.
-     * @throws IllegalArgumentException if <CODE>count</CODE>
-     * is less than one.
-     */
-    void addCountFilter(int count);
-
-    /** Suspend no threads when the event occurs */
-    int SUSPEND_NONE = 0;
-    /** Suspend only the thread which generated the event when the event occurs */
-    int SUSPEND_EVENT_THREAD = 1;
-    /** Suspend all threads when the event occurs */
-    int SUSPEND_ALL = 2;
-
-    /**
-     * Determines the threads to suspend when the requested event occurs
-     * in the target VM. Use {@link #SUSPEND_ALL} to suspend all
-     * threads in the target VM (the default). Use {@link #SUSPEND_EVENT_THREAD}
-     * to suspend only the thread which generated the event. Use
-     * {@link #SUSPEND_NONE} to suspend no threads.
-     * <p>
-     * Thread suspensions through events have the same functionality
-     * as explicitly requested suspensions. See
-     * {@link com.sun.jdi.ThreadReference#suspend} and
-     * {@link com.sun.jdi.VirtualMachine#suspend} for details.
-     *
-     * @param policy the selected suspend policy.
-     * @throws InvalidRequestStateException if this request is currently
-     * enabled or has been deleted.
-     * Suspend policy may only be set in disabled requests.
-     * @throws IllegalArgumentException if the policy argument
-     * contains an illegal value.
-     */
-    void setSuspendPolicy(int policy);
-
-    /**
-     * Returns a value which describes the threads to suspend when the
-     * requested event occurs in the target VM.
-     * The returned value is  {@link #SUSPEND_ALL},
-     * {@link #SUSPEND_EVENT_THREAD}, or {@link #SUSPEND_NONE}.
-     *
-     * @return the current suspend mode for this request
-     */
-    int suspendPolicy();
-
-    /**
-     * Add an arbitrary key/value "property" to this request.
-     * The property can be used by a client of the JDI to
-     * associate application information with the request;
-     * These client-set properties are not used internally
-     * by the JDI.
-     * <p>
-     * The <code>get/putProperty</code> methods provide access to
-     * a small per-instance map. This is <b>not</b> to be confused
-     * with {@link java.util.Properties}.
-     * <p>
-     * If value is null this method will remove the property.
-     *
-     * @see #getProperty
-     */
-    void putProperty(Object key, Object value);
-
-    /**
-     * Returns the value of the property with the specified key.  Only
-     * properties added with {@link #putProperty} will return
-     * a non-null value.
-     *
-     * @return the value of this property or null
-     * @see #putProperty
-     */
-    Object getProperty(Object key);
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/request/EventRequestManager.java b/ojluni/src/main/java/com/sun/jdi/request/EventRequestManager.java
deleted file mode 100755
index e2627de..0000000
--- a/ojluni/src/main/java/com/sun/jdi/request/EventRequestManager.java
+++ /dev/null
@@ -1,544 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package com.sun.jdi.request;
-
-import com.sun.jdi.*;
-
-import java.util.List;
-
-/**
- * Manages the creation and deletion of {@link EventRequest}s. A single
- * implementor of this interface exists in a particuar VM and
- * is accessed through {@link VirtualMachine#eventRequestManager()}
- *
- * @see EventRequest
- * @see com.sun.jdi.event.Event
- * @see BreakpointRequest
- * @see com.sun.jdi.event.BreakpointEvent
- * @see VirtualMachine
- *
- * @author Robert Field
- * @since  1.3
- */
-
-public interface EventRequestManager extends Mirror {
-
-    /**
-     * Creates a new disabled {@link ClassPrepareRequest}.
-     * The new event request is added to the list managed by this
-     * EventRequestManager. Use {@link EventRequest#enable()} to
-     * activate this event request.
-     *
-     * @return the created {@link ClassPrepareRequest}
-     */
-    ClassPrepareRequest createClassPrepareRequest();
-
-    /**
-     * Creates a new disabled {@link ClassUnloadRequest}.
-     * The new event request is added to the list managed by this
-     * EventRequestManager. Use {@link EventRequest#enable()} to
-     * activate this event request.
-     *
-     * @return the created {@link ClassUnloadRequest}
-     */
-    ClassUnloadRequest createClassUnloadRequest();
-
-    /**
-     * Creates a new disabled {@link ThreadStartRequest}.
-     * The new event request is added to the list managed by this
-     * EventRequestManager. Use {@link EventRequest#enable()} to
-     * activate this event request.
-     *
-     * @return the created {@link ThreadStartRequest}
-     */
-    ThreadStartRequest createThreadStartRequest();
-
-    /**
-     * Creates a new disabled {@link ThreadDeathRequest}.
-     * The new event request is added to the list managed by this
-     * EventRequestManager. Use {@link EventRequest#enable()} to
-     * activate this event request.
-     *
-     * @return the created {@link ThreadDeathRequest}
-     */
-    ThreadDeathRequest createThreadDeathRequest();
-
-    /**
-     * Creates a new disabled {@link ExceptionRequest}.
-     * The new event request is added to the list managed by this
-     * EventRequestManager. Use {@link EventRequest#enable()} to
-     * activate this event request.
-     * <P>
-     * A specific exception type and its subclasses can be selected
-     * for exception events. Caught exceptions,  uncaught exceptions,
-     * or both can be selected. Note, however, that
-     * at the time an exception is thrown, it is not always
-     * possible to determine whether it is truly caught. See
-     * {@link com.sun.jdi.event.ExceptionEvent#catchLocation} for
-     * details.
-     * @param refType If non-null, specifies that exceptions which are
-     *                instances of refType will be reported. Note: this
-     *                will include instances of sub-types.  If null,
-     *                all instances will be reported
-     * @param notifyCaught If true, caught exceptions will be reported.
-     * @param notifyUncaught If true, uncaught exceptions will be reported.
-     *
-     * @return the created {@link ExceptionRequest}
-     */
-    ExceptionRequest createExceptionRequest(ReferenceType refType,
-                                            boolean notifyCaught,
-                                            boolean notifyUncaught);
-
-    /**
-     * Creates a new disabled {@link MethodEntryRequest}.
-     * The new event request is added to the list managed by this
-     * EventRequestManager. Use {@link EventRequest#enable()} to
-     * activate this event request.
-     *
-     * @return the created {@link MethodEntryRequest}
-     */
-    MethodEntryRequest createMethodEntryRequest();
-
-    /**
-     * Creates a new disabled {@link MethodExitRequest}.
-     * The new event request is added to the list managed by this
-     * EventRequestManager. Use {@link EventRequest#enable()} to
-     * activate this event request.
-     *
-     * @return the created {@link MethodExitRequest}
-     */
-    MethodExitRequest createMethodExitRequest();
-
-     /**
-     * Creates a new disabled {@link MonitorContendedEnterRequest}.
-     * The new event request is added to the list managed by this
-     * EventRequestManager. Use {@link EventRequest#enable()} to
-     * activate this event request.
-     *
-     * Not all target virtual machines support this operation.
-     * Use {@link VirtualMachine#canRequestMonitorEvents()}
-     * to determine if the operation is supported.
-     *
-     * @return the created {@link MonitorContendedEnterRequest}
-     * @throws java.lang.UnsupportedOperationException if
-     * the target VM does not support this
-     * operation.
-     *
-     * @since 1.6
-     */
-    MonitorContendedEnterRequest createMonitorContendedEnterRequest();
-
-    /**
-     * Creates a new disabled {@link MonitorContendedEnteredRequest}.
-     * The new event request is added to the list managed by this
-     * EventRequestManager. Use {@link EventRequest#enable()} to
-     * activate this event request.
-     *
-     * Not all target virtual machines support this operation.
-     * Use {@link VirtualMachine#canRequestMonitorEvents()}
-     * to determine if the operation is supported.
-     *
-     * @return the created {@link MonitorContendedEnteredRequest}
-     * @throws java.lang.UnsupportedOperationException if
-     * the target VM does not support this
-     * operation.
-     *
-     * @since 1.6
-     */
-
-    MonitorContendedEnteredRequest createMonitorContendedEnteredRequest();
-
-    /**
-     * Creates a new disabled {@link MonitorWaitRequest}.
-     * The new event request is added to the list managed by this
-     * EventRequestManager. Use {@link EventRequest#enable()} to
-     * activate this event request.
-     *
-     * Not all target virtual machines support this operation.
-     * Use {@link VirtualMachine#canRequestMonitorEvents()}
-     * to determine if the operation is supported.
-     *
-     * @return the created {@link MonitorWaitRequest}
-     * @throws java.lang.UnsupportedOperationException if
-     * the target VM does not support this
-     * operation.
-     *
-     * @since 1.6
-     */
-    MonitorWaitRequest createMonitorWaitRequest();
-
-    /**
-     * Creates a new disabled {@link MonitorWaitedRequest}.
-     * The new event request is added to the list managed by this
-     * EventRequestManager. Use {@link EventRequest#enable()} to
-     * activate this event request.
-     *
-     * Not all target virtual machines support this operation.
-     * Use {@link VirtualMachine#canRequestMonitorEvents()}
-     * to determine if the operation is supported.
-     *
-     * @return the created {@link MonitorWaitedRequest}
-     * @throws java.lang.UnsupportedOperationException if
-     * the target VM does not support this
-     * operation.
-     *
-     * @since 1.6
-     */
-    MonitorWaitedRequest createMonitorWaitedRequest();
-
-    /**
-     * Creates a new disabled {@link StepRequest}.
-     * The new event request is added to the list managed by this
-     * EventRequestManager. Use {@link EventRequest#enable()} to
-     * activate this event request.
-     * <p>
-     * The returned request will control stepping only in the specified
-     * <code>thread</code>; all other threads will be unaffected.
-     * A <code>size</code>value of {@link com.sun.jdi.request.StepRequest#STEP_MIN} will generate a
-     * step event each time the code index changes. It represents the
-     * smallest step size available and often maps to the instruction
-     * level.
-     * A <code>size</code> value of {@link com.sun.jdi.request.StepRequest#STEP_LINE} will generate a
-     * step event each time the source line changes unless line number information is not available,
-     * in which case a STEP_MIN will be done instead.  For example, no line number information is
-     * available during the execution of a method that has been rendered obsolete by
-     * by a {@link com.sun.jdi.VirtualMachine#redefineClasses} operation.
-     * A <code>depth</code> value of {@link com.sun.jdi.request.StepRequest#STEP_INTO} will generate
-     * step events in any called methods.  A <code>depth</code> value
-     * of {@link com.sun.jdi.request.StepRequest#STEP_OVER} restricts step events to the current frame
-     * or caller frames. A <code>depth</code> value of {@link com.sun.jdi.request.StepRequest#STEP_OUT}
-     * restricts step events to caller frames only. All depth
-     * restrictions are relative to the call stack immediately before the
-     * step takes place.
-     * <p>
-     * Only one pending step request is allowed per thread.
-     * <p>
-     * Note that a typical debugger will want to cancel stepping
-     * after the first step is detected.  Thus a next line method
-     * would do the following:
-     * <code>
-     * <pre>
-     *     EventRequestManager mgr = myVM.{@link VirtualMachine#eventRequestManager eventRequestManager}();
-     *     StepRequest request = mgr.createStepRequest(myThread,
-     *                                                 StepRequest.{@link StepRequest#STEP_LINE STEP_LINE},
-     *                                                 StepRequest.{@link StepRequest#STEP_OVER STEP_OVER});
-     *     request.{@link EventRequest#addCountFilter addCountFilter}(1);  // next step only
-     *     request.enable();
-     *     myVM.{@link VirtualMachine#resume resume}();
-     * </pre>
-     * </code>
-     *
-     * @param thread the thread in which to step
-     * @param depth the step depth
-     * @param size the step size
-     * @return the created {@link StepRequest}
-     * @throws DuplicateRequestException if there is already a pending
-     * step request for the specified thread.
-     * @throws IllegalArgumentException if the size or depth arguments
-     * contain illegal values.
-     */
-    StepRequest createStepRequest(ThreadReference thread,
-                                  int size,
-                                  int depth);
-
-    /**
-     * Creates a new disabled {@link BreakpointRequest}.
-     * The given {@link Location} must have a valid
-     * (that is, non-negative) code index. The new
-     * breakpoint is added to the list managed by this
-     * EventRequestManager. Multiple breakpoints at the
-     * same location are permitted. Use {@link EventRequest#enable()} to
-     * activate this event request.
-     *
-     * @param location the location of the new breakpoint.
-     * @return the created {@link BreakpointRequest}
-     * @throws NativeMethodException if location is within a native method.
-     */
-    BreakpointRequest createBreakpointRequest(Location location);
-
-    /**
-     * Creates a new disabled watchpoint which watches accesses to the
-     * specified field. The new
-     * watchpoint is added to the list managed by this
-     * EventRequestManager. Multiple watchpoints on the
-     * same field are permitted.
-     * Use {@link EventRequest#enable()} to
-     * activate this event request.
-     * <P>
-     * Not all target virtual machines support this operation.
-     * Use {@link VirtualMachine#canWatchFieldAccess()}
-     * to determine if the operation is supported.
-     *
-     * @param field the field to watch
-     * @return the created watchpoint
-     * @throws java.lang.UnsupportedOperationException if
-     * the target virtual machine does not support this
-     * operation.
-     */
-    AccessWatchpointRequest createAccessWatchpointRequest(Field field);
-
-    /**
-     * Creates a new disabled watchpoint which watches accesses to the
-     * specified field. The new
-     * watchpoint is added to the list managed by this
-     * EventRequestManager. Multiple watchpoints on the
-     * same field are permitted.
-     * Use {@link EventRequest#enable()} to
-     * activate this event request.
-     * <P>
-     * Not all target virtual machines support this operation.
-     * Use {@link VirtualMachine#canWatchFieldModification()}
-     * to determine if the operation is supported.
-     *
-     * @param field the field to watch
-     * @return the created watchpoint
-     * @throws java.lang.UnsupportedOperationException if
-     * the target virtual machine does not support this
-     * operation.
-     */
-    ModificationWatchpointRequest createModificationWatchpointRequest(Field field);
-
-    /**
-     * Creates a new disabled {@link VMDeathRequest}.
-     * The new request is added to the list managed by this
-     * EventRequestManager.
-     * Use {@link EventRequest#enable()} to
-     * activate this event request.
-     * <P>
-     * This request (if enabled) will cause a
-     * {@link com.sun.jdi.event.VMDeathEvent}
-     * to be sent on termination of the target VM.
-     * <P>
-     * A VMDeathRequest with a suspend policy of
-     * {@link EventRequest#SUSPEND_ALL SUSPEND_ALL}
-     * can be used to assure processing of incoming
-     * {@link EventRequest#SUSPEND_NONE SUSPEND_NONE} or
-     * {@link EventRequest#SUSPEND_EVENT_THREAD SUSPEND_EVENT_THREAD}
-     * events before VM death.  If all event processing is being
-     * done in the same thread as event sets are being read,
-     * enabling the request is all that is needed since the VM
-     * will be suspended until the {@link com.sun.jdi.event.EventSet}
-     * containing the {@link com.sun.jdi.event.VMDeathEvent}
-     * is resumed.
-     * <P>
-     * Not all target virtual machines support this operation.
-     * Use {@link VirtualMachine#canRequestVMDeathEvent()}
-     * to determine if the operation is supported.
-     *
-     * @return the created request
-     * @throws java.lang.UnsupportedOperationException if
-     * the target VM does not support this
-     * operation.
-     *
-     * @since 1.4
-     */
-    VMDeathRequest createVMDeathRequest();
-
-    /**
-     * Removes an eventRequest. The eventRequest is disabled and
-     * the removed from the requests managed by this
-     * EventRequestManager. Once the eventRequest is deleted, no
-     * operations (for example, {@link EventRequest#setEnabled})
-     * are permitted - attempts to do so will generally cause an
-     * {@link InvalidRequestStateException}.
-     * No other eventRequests are effected.
-     * <P>
-     * Because this method changes the underlying lists of event
-     * requests, attempting to directly delete from a list returned
-     * by a request accessor (e.g. below):
-     * <PRE>
-     *   Iterator iter = requestManager.stepRequests().iterator();
-     *   while (iter.hasNext()) {
-     *      requestManager.deleteEventRequest(iter.next());
-     *  }
-     * </PRE>
-     * may cause a {@link java.util.ConcurrentModificationException}.
-     * Instead use
-     * {@link #deleteEventRequests(List) deleteEventRequests(List)}
-     * or copy the list before iterating.
-     *
-     * @param eventRequest the eventRequest to remove
-     */
-    void deleteEventRequest(EventRequest eventRequest);
-
-    /**
-     * Removes a list of {@link EventRequest}s.
-     *
-     * @see #deleteEventRequest(EventRequest)
-     *
-     * @param eventRequests the list of eventRequests to remove
-     */
-    void deleteEventRequests(List<? extends EventRequest> eventRequests);
-
-    /**
-     * Remove all breakpoints managed by this EventRequestManager.
-     *
-     * @see #deleteEventRequest(EventRequest)
-     */
-    void deleteAllBreakpoints();
-
-    /**
-     * Return an unmodifiable list of the enabled and disabled step requests.
-     * This list is a live view of these requests and thus changes as requests
-     * are added and deleted.
-     * @return the all {@link StepRequest} objects.
-     */
-    List<StepRequest> stepRequests();
-
-    /**
-     * Return an unmodifiable list of the enabled and disabled class prepare requests.
-     * This list is a live view of these requests and thus changes as requests
-     * are added and deleted.
-     * @return the all {@link ClassPrepareRequest} objects.
-     */
-    List<ClassPrepareRequest> classPrepareRequests();
-
-    /**
-     * Return an unmodifiable list of the enabled and disabled class unload requests.
-     * This list is a live view of these requests and thus changes as requests
-     * are added and deleted.
-     * @return the all {@link ClassUnloadRequest} objects.
-     */
-    List<ClassUnloadRequest> classUnloadRequests();
-
-    /**
-     * Return an unmodifiable list of the enabled and disabled thread start requests.
-     * This list is a live view of these requests and thus changes as requests
-     * are added and deleted.
-     * @return the all {@link ThreadStartRequest} objects.
-     */
-    List<ThreadStartRequest> threadStartRequests();
-
-    /**
-     * Return an unmodifiable list of the enabled and disabled thread death requests.
-     * This list is a live view of these requests and thus changes as requests
-     * are added and deleted.
-     * @return the all {@link ThreadDeathRequest} objects.
-     */
-    List<ThreadDeathRequest> threadDeathRequests();
-
-    /**
-     * Return an unmodifiable list of the enabled and disabled exception requests.
-     * This list is a live view of these requests and thus changes as requests
-     * are added and deleted.
-     * @return the all {@link ExceptionRequest} objects.
-     */
-    List<ExceptionRequest> exceptionRequests();
-
-    /**
-     * Return an unmodifiable list of the enabled and disabled breakpoint requests.
-     * This list is a live view of these requests and thus changes as requests
-     * are added and deleted.
-     * @return the list of all {@link BreakpointRequest} objects.
-     */
-    List<BreakpointRequest> breakpointRequests();
-
-    /**
-     * Return an unmodifiable list of the enabled and disabled access
-     * watchpoint requests.
-     * This list is a live view of these requests and thus changes as requests
-     * are added and deleted.
-     * @return the all {@link AccessWatchpointRequest} objects.
-     */
-    List<AccessWatchpointRequest> accessWatchpointRequests();
-
-    /**
-     * Return an unmodifiable list of the enabled and disabled modification
-     * watchpoint requests.
-     * This list is a live view of these requests and thus changes as requests
-     * are added and deleted.
-     * @return the all {@link ModificationWatchpointRequest} objects.
-     */
-    List<ModificationWatchpointRequest> modificationWatchpointRequests();
-
-    /**
-     * Return an unmodifiable list of the enabled and disabled method entry requests.
-     * This list is a live view of these requests and thus changes as requests
-     * are added and deleted.
-     * @return the list of all {@link MethodEntryRequest} objects.
-     */
-    List<MethodEntryRequest> methodEntryRequests();
-
-    /**
-     * Return an unmodifiable list of the enabled and disabled method exit requests.
-     * This list is a live view of these requests and thus changes as requests
-     * are added and deleted.
-     * @return the list of all {@link MethodExitRequest} objects.
-     */
-    List<MethodExitRequest> methodExitRequests();
-
-    /**
-     * Return an unmodifiable list of the enabled and disabled monitor contended enter requests.
-     * This list is a live view of these requests and thus changes as requests
-     * are added and deleted.
-     * @return the list of all {@link MonitorContendedEnterRequest} objects.
-     *
-     * @since 1.6
-     */
-    List<MonitorContendedEnterRequest> monitorContendedEnterRequests();
-
-    /**
-     * Return an unmodifiable list of the enabled and disabled monitor contended entered requests.
-     * This list is a live view of these requests and thus changes as requests
-     * are added and deleted.
-     * @return the list of all {@link MonitorContendedEnteredRequest} objects.
-     *
-     * @since 1.6
-     */
-    List<MonitorContendedEnteredRequest> monitorContendedEnteredRequests();
-
-    /**
-     * Return an unmodifiable list of the enabled and disabled monitor wait requests.
-     * This list is a live view of these requests and thus changes as requests
-     * are added and deleted.
-     * @return the list of all {@link MonitorWaitRequest} objects.
-     *
-     * @since 1.6
-     */
-    List<MonitorWaitRequest> monitorWaitRequests();
-
-    /**
-     * Return an unmodifiable list of the enabled and disabled monitor waited requests.
-     * This list is a live view of these requests and thus changes as requests
-     * are added and deleted.
-     * @return the list of all {@link MonitorWaitedRequest} objects.
-     *
-     * @since 1.6
-     */
-    List<MonitorWaitedRequest> monitorWaitedRequests();
-
-    /**
-     * Return an unmodifiable list of the enabled and disabled VM death requests.
-     * This list is a live view of these requests and thus changes as requests
-     * are added and deleted.
-     * Note: the unsolicited VMDeathEvent does not have a
-     * corresponding request.
-     * @return the list of all {@link VMDeathRequest} objects.
-     *
-     * @since 1.4
-     */
-    List<VMDeathRequest> vmDeathRequests();
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/request/ExceptionRequest.java b/ojluni/src/main/java/com/sun/jdi/request/ExceptionRequest.java
deleted file mode 100755
index e7e06bf..0000000
--- a/ojluni/src/main/java/com/sun/jdi/request/ExceptionRequest.java
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * Copyright (c) 1998, 2001, 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.jdi.request;
-
-import com.sun.jdi.*;
-
-/**
- * Request for notification when an exception occurs in the target VM.
- * When an enabled ExceptionRequest is satisfied, an
- * {@link com.sun.jdi.event.EventSet event set} containing an
- * {@link com.sun.jdi.event.ExceptionEvent ExceptionEvent} will be placed
- * on the {@link com.sun.jdi.event.EventQueue EventQueue}.
- * The collection of existing ExceptionRequests is
- * managed by the {@link EventRequestManager}
- *
- * @see com.sun.jdi.event.ExceptionEvent
- * @see com.sun.jdi.event.EventQueue
- * @see EventRequestManager
- *
- * @author Robert Field
- * @since  1.3
- */
-public interface ExceptionRequest extends EventRequest {
-
-    /**
-     * Returns exception type for which exception events are requested.
-     * @return
-     * The exception (and its subclasses) requested
-     * with {@link EventRequestManager#createExceptionRequest}, or
-     * null if, as by default, all exceptions are requested.
-     */
-    ReferenceType exception();
-
-    /**
-     * Returns whether caught exceptions of the requested type
-     * will generate events when they are thrown.
-     * <p>
-     * Note that at the time an exception is thrown, it is not always
-     * possible to determine whether it is truly caught. See
-     * {@link com.sun.jdi.event.ExceptionEvent#catchLocation} for
-     * details.
-     * @return
-     * boolean true if caught exceptions will be reported, false
-     * otherwise.
-     */
-    boolean notifyCaught();
-
-    /**
-     * Returns whether uncaught exceptions of the requested type
-     * will generate events when they are thrown.
-     * <p>
-     * Note that at the time an exception is thrown, it is not always
-     * possible to determine whether it is truly uncaught. See
-     * {@link com.sun.jdi.event.ExceptionEvent#catchLocation} for
-     * details.
-     * @return
-     * boolean true if caught exceptions will be reported, false
-     * otherwise.
-     */
-    boolean notifyUncaught();
-
-    /**
-     * Restricts the events generated by this request to those in
-     * the given thread.
-     * @param thread the thread to filter on.
-     * @throws InvalidRequestStateException if this request is currently
-     * enabled or has been deleted.
-     * Filters may be added only to disabled requests.
-     */
-    void addThreadFilter(ThreadReference thread);
-
-    /**
-     * Restricts the events generated by this request to those whose
-     * location is in the given reference type or any of its subtypes.
-     * An event will be generated for any location in a reference type
-     * that can be safely cast to the given reference type.
-     *
-     * @param refType the reference type to filter on.
-     * @throws InvalidRequestStateException if this request is currently
-     * enabled or has been deleted.
-     * Filters may be added only to disabled requests.
-     */
-    void addClassFilter(ReferenceType refType);
-
-    /**
-     * Restricts the events generated by this request to those
-     * whose location is in a class whose name matches a restricted
-     * regular expression. Regular expressions are limited
-     * to exact matches and patterns that begin with '*' or end with '*';
-     * for example, "*.Foo" or "java.*".
-     *
-     * @param classPattern the pattern String to filter for.
-     * @throws InvalidRequestStateException if this request is currently
-     * enabled or has been deleted.
-     * Filters may be added only to disabled requests.
-     */
-    void addClassFilter(String classPattern);
-
-    /**
-     * Restricts the events generated by this request to those
-     * whose location is in a class whose name does <b>not</b> match a
-     * restricted regular expression. Regular expressions are limited
-     * to exact matches and patterns that begin with '*' or end with '*';
-     * for example, "*.Foo" or "java.*".
-     *
-     * @param classPattern the pattern String to filter against.
-     * @throws InvalidRequestStateException if this request is currently
-     * enabled or has been deleted.
-     * Filters may be added only to disabled requests.
-     */
-    void addClassExclusionFilter(String classPattern);
-
-    /**
-     * Restricts the events generated by this request to those in
-     * which the currently executing instance ("this") is the object
-     * specified.
-     * <P>
-     * Not all targets support this operation.
-     * Use {@link VirtualMachine#canUseInstanceFilters()}
-     * to determine if the operation is supported.
-     * @since 1.4
-     * @param instance the object which must be the current instance
-     * in order to pass this filter.
-     * @throws java.lang.UnsupportedOperationException if
-     * the target virtual machine does not support this
-     * operation.
-     * @throws InvalidRequestStateException if this request is currently
-     * enabled or has been deleted.
-     * Filters may be added only to disabled requests.
-     */
-    void addInstanceFilter(ObjectReference instance);
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/request/InvalidRequestStateException.java b/ojluni/src/main/java/com/sun/jdi/request/InvalidRequestStateException.java
deleted file mode 100755
index 674980b..0000000
--- a/ojluni/src/main/java/com/sun/jdi/request/InvalidRequestStateException.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1999, 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.jdi.request;
-
-/**
- * Thrown to indicate that the requested event cannot be modified
- * because it is enabled. Filters can be added only to disabled
- * event requests.
- * Also thrown if an operation is attempted on a deleted request.
- * See {@link EventRequestManager#deleteEventRequest(EventRequest)}
- *
- * @author Robert Field
- * @since  1.3
- */
-public class InvalidRequestStateException extends RuntimeException {
-    public InvalidRequestStateException()
-    {
-        super();
-    }
-
-    public InvalidRequestStateException(String s)
-    {
-        super(s);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/request/MethodEntryRequest.java b/ojluni/src/main/java/com/sun/jdi/request/MethodEntryRequest.java
deleted file mode 100755
index 397e97c..0000000
--- a/ojluni/src/main/java/com/sun/jdi/request/MethodEntryRequest.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Copyright (c) 1998, 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.jdi.request;
-
-import com.sun.jdi.*;
-
-/**
- * Request for notification when a method is invoked in the target VM.
- * When an enabled MethodEntryRequest is satisfied, an
- * {@link com.sun.jdi.event.EventSet event set} containing a
- * {@link com.sun.jdi.event.MethodEntryEvent MethodEntryEvent}
- * will be placed on the
- * {@link com.sun.jdi.event.EventQueue EventQueue}.
- * The collection of existing MethodEntryRequests is
- * managed by the {@link EventRequestManager}
- *
- * @see com.sun.jdi.event.MethodEntryEvent
- * @see com.sun.jdi.event.EventQueue
- * @see EventRequestManager
- *
- * @author Robert Field
- * @since  1.3
- */
-public interface MethodEntryRequest extends EventRequest {
-
-    /**
-     * Restricts the events generated by this request to those in
-     * the given thread.
-     * @param thread the thread to filter on.
-     * @throws InvalidRequestStateException if this request is currently
-     * enabled or has been deleted.
-     * Filters may be added only to disabled requests.
-     */
-    void addThreadFilter(ThreadReference thread);
-
-    /**
-     * Restricts the events generated by this request to those whose
-     * method is in the given reference type or any of its subtypes.
-     * An event will be generated for any location in a reference type
-     * that can be safely cast to the given reference type.
-     *
-     * @param refType the reference type to filter on.
-     * @throws InvalidRequestStateException if this request is currently
-     * enabled or has been deleted.
-     * Filters may be added only to disabled requests.
-     */
-    void addClassFilter(ReferenceType refType);
-
-    /**
-     * Restricts the events generated by this request to those
-     * whose method is in a class whose name matches this restricted
-     * regular expression. Regular expressions are limited
-     * to exact matches and patterns that begin with '*' or end with '*';
-     * for example, "*.Foo" or "java.*".
-     *
-     * @param classPattern the pattern String to filter for.
-     * @throws InvalidRequestStateException if this request is currently
-     * enabled or has been deleted.
-     * Filters may be added only to disabled requests.
-     */
-    void addClassFilter(String classPattern);
-
-    /**
-     * Restricts the events generated by this request to those
-     * whose method is in a class whose name does <b>not</b> match this restricted
-     * regular expression, e.g. "java.*" or "*.Foo".
-     * @param classPattern the pattern String to filter against.
-     * @throws InvalidRequestStateException if this request is currently
-     * enabled or has been deleted.
-     * Filters may be added only to disabled requests.
-     */
-    void addClassExclusionFilter(String classPattern);
-
-    /**
-     * Restricts the events generated by this request to those in
-     * which the currently executing instance ("this") is the object
-     * specified.
-     * <P>
-     * Not all targets support this operation.
-     * Use {@link VirtualMachine#canUseInstanceFilters()}
-     * to determine if the operation is supported.
-     * @since 1.4
-     * @param instance the object which must be the current instance
-     * in order to pass this filter.
-     * @throws java.lang.UnsupportedOperationException if
-     * the target virtual machine does not support this
-     * operation.
-     * @throws InvalidRequestStateException if this request is currently
-     * enabled or has been deleted.
-     * Filters may be added only to disabled requests.
-     */
-    void addInstanceFilter(ObjectReference instance);
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/request/MethodExitRequest.java b/ojluni/src/main/java/com/sun/jdi/request/MethodExitRequest.java
deleted file mode 100755
index c6a4649..0000000
--- a/ojluni/src/main/java/com/sun/jdi/request/MethodExitRequest.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * Copyright (c) 1998, 2001, 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.jdi.request;
-
-import com.sun.jdi.*;
-
-/**
- * Request for notification when a method returns in the target VM.
- * When an enabled MethodExitRequest is hit, an
- * {@link com.sun.jdi.event.EventSet event set} containing a
- * {@link com.sun.jdi.event.MethodExitEvent MethodExitEvent}
- * will be placed on the
- * {@link com.sun.jdi.event.EventQueue EventQueue}.
- * The collection of existing MethodExitRequests is
- * managed by the {@link EventRequestManager}
- *
- * @see com.sun.jdi.event.MethodExitEvent
- * @see com.sun.jdi.event.EventQueue
- * @see EventRequestManager
- *
- * @author Robert Field
- * @since  1.3
- */
-public interface MethodExitRequest extends EventRequest {
-
-    /**
-     * Restricts the events generated by this request to those in
-     * the given thread.
-     * @param thread the thread to filter on.
-     * @throws InvalidRequestStateException if this request is currently
-     * enabled or has been deleted.
-     * Filters may be added only to disabled requests.
-     */
-    void addThreadFilter(ThreadReference thread);
-
-    /**
-     * Restricts the events generated by this request to those whose
-     * method is in the given reference type or any of its subtypes.
-     * An event will be generated for any location in a reference type
-     * that can be safely cast to the given reference type.
-     *
-     * @param refType the reference type to filter on.
-     * @throws InvalidRequestStateException if this request is currently
-     * enabled or has been deleted.
-     * Filters may be added only to disabled requests.
-     */
-    void addClassFilter(ReferenceType refType);
-
-    /**
-     * Restricts the events generated by this request to those
-     * whose method is in a class whose name matches a restricted
-     * regular expression. Regular expressions are limited
-     * to exact matches and patterns that begin with '*' or end with '*';
-     * for example, "*.Foo" or "java.*".
-     *
-     * @param classPattern the pattern String to filter for.
-     * @throws InvalidRequestStateException if this request is currently
-     * enabled or has been deleted.
-     * Filters may be added only to disabled requests.
-     */
-    void addClassFilter(String classPattern);
-
-    /**
-     * Restricts the events generated by this request to those
-     * whose method is in a class whose name does <b>not</b> match this
-     * restricted regular expression. Regular expressions are limited
-     * to exact matches and patterns that begin with '*' or end with '*';
-     * for example, "*.Foo" or "java.*".
-     *
-     * @param classPattern the pattern String to filter against.
-     * @throws InvalidRequestStateException if this request is currently
-     * enabled or has been deleted.
-     * Filters may be added only to disabled requests.
-     */
-    void addClassExclusionFilter(String classPattern);
-
-    /**
-     * Restricts the events generated by this request to those in
-     * which the currently executing instance ("this") is the object
-     * specified.
-     * <P>
-     * Not all targets support this operation.
-     * Use {@link VirtualMachine#canUseInstanceFilters()}
-     * to determine if the operation is supported.
-     * @since 1.4
-     * @param instance the object which must be the current instance
-     * in order to pass this filter.
-     * @throws java.lang.UnsupportedOperationException if
-     * the target virtual machine does not support this
-     * operation.
-     * @throws InvalidRequestStateException if this request is currently
-     * enabled or has been deleted.
-     * Filters may be added only to disabled requests.
-     */
-    void addInstanceFilter(ObjectReference instance);
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/request/ModificationWatchpointRequest.java b/ojluni/src/main/java/com/sun/jdi/request/ModificationWatchpointRequest.java
deleted file mode 100755
index 778d5d8..0000000
--- a/ojluni/src/main/java/com/sun/jdi/request/ModificationWatchpointRequest.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright (c) 1998, 2001, 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.jdi.request;
-
-import com.sun.jdi.*;
-
-/**
- * Request for notification when a field is set.
- * This event will be triggered when a value is assigned to the specified
- * field with a Java<SUP><FONT SIZE="-2">TM</FONT></SUP> programming
- * language statement (assignment, increment, etc) or by a
- * Java Native Interface (JNI) set function (<code>Set&lt;Type&gt;Field,
- * SetStatic&lt;Type&gt;Field</code>).
- * Setting a field to a value which is the same as the previous value
- * still triggers this event.
- * Modification by JDI does not trigger this event.
- * When an enabled
- * ModificationWatchpointRequest is satisfied, an
- * {@link com.sun.jdi.event.EventSet event set} containing a
- * {@link com.sun.jdi.event.ModificationWatchpointEvent ModificationWatchpointEvent}
- * will be placed on
- * the {@link com.sun.jdi.event.EventQueue EventQueue}.
- * The collection of existing
- * watchpoints is
- * managed by the {@link EventRequestManager}.
- *
- * @see com.sun.jdi.event.ModificationWatchpointEvent
- * @see AccessWatchpointRequest
- * @see com.sun.jdi.event.EventQueue
- * @see EventRequestManager
- *
- * @author Robert Field
- * @since  1.3
- */
-public interface ModificationWatchpointRequest extends WatchpointRequest {
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/request/MonitorContendedEnterRequest.java b/ojluni/src/main/java/com/sun/jdi/request/MonitorContendedEnterRequest.java
deleted file mode 100755
index b3edd95..0000000
--- a/ojluni/src/main/java/com/sun/jdi/request/MonitorContendedEnterRequest.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-package com.sun.jdi.request;
-
-import com.sun.jdi.*;
-
-/**
- * Request for notification of a thread in the target VM
- * attempting to enter a monitor already acquired by another thread.
- * When an enabled MonitorContededEnterRequest is satisfied, an
- * {@link com.sun.jdi.event.EventSet event set} containing a
- * {@link com.sun.jdi.event.MonitorContendedEnterEvent MonitorContendedEnterEvent}
- * will be placed on the
- * {@link com.sun.jdi.event.EventQueue EventQueue}.
- * The collection of existing MonitorContendedEnterEvents is
- * managed by the {@link EventRequestManager}
- *
- * @see com.sun.jdi.event.MonitorContendedEnterEvent
- * @see com.sun.jdi.event.EventQueue
- * @see EventRequestManager
- *
- * @author Swamy Venkataramanappa
- * @since  1.6
- */
-public interface MonitorContendedEnterRequest extends EventRequest {
-
-    /**
-     * Restricts the events generated by this request to those in
-     * the given thread.
-     * @param thread the thread to filter on.
-     * @throws InvalidRequestStateException if this request is currently
-     * enabled or has been deleted.
-     * Filters may be added only to disabled requests.
-     */
-    void addThreadFilter(ThreadReference thread);
-
-    /**
-     * Restricts the events generated by this request to those whose
-     * method is in the given reference type or any of its subtypes.
-     * An event will be generated for any location in a reference type
-     * that can be safely cast to the given reference type.
-     *
-     * @param refType the reference type to filter on.
-     * @throws InvalidRequestStateException if this request is currently
-     * enabled or has been deleted.
-     * Filters may be added only to disabled requests.
-     */
-    void addClassFilter(ReferenceType refType);
-
-    /**
-     * Restricts the events generated by this request to those
-     * whose method is in a class whose name matches this restricted
-     * regular expression. Regular expressions are limited
-     * to exact matches and patterns that begin with '*' or end with '*';
-     * for example, "*.Foo" or "java.*".
-     *
-     * @param classPattern the pattern String to filter for.
-     * @throws InvalidRequestStateException if this request is currently
-     * enabled or has been deleted.
-     * Filters may be added only to disabled requests.
-     */
-    void addClassFilter(String classPattern);
-
-    /**
-     * Restricts the events generated by this request to those
-     * whose method is in a class whose name does <b>not</b> match this restricted
-     * regular expression, e.g. "java.*" or "*.Foo".
-     * @param classPattern the pattern String to filter against.
-     * @throws InvalidRequestStateException if this request is currently
-     * enabled or has been deleted.
-     * Filters may be added only to disabled requests.
-     */
-    void addClassExclusionFilter(String classPattern);
-
-    /**
-     * Restricts the events generated by this request to those in
-     * which the currently executing instance ("this") is the object
-     * specified.
-     * <P>
-     * Not all targets support this operation.
-     * Use {@link VirtualMachine#canUseInstanceFilters()}
-     * to determine if the operation is supported.
-     * @param instance the object which must be the current instance
-     * in order to pass this filter.
-     * @throws java.lang.UnsupportedOperationException if
-     * the target virtual machine does not support this
-     * operation.
-     * @throws InvalidRequestStateException if this request is currently
-     * enabled or has been deleted.
-     * Filters may be added only to disabled requests.
-     */
-    void addInstanceFilter(ObjectReference instance);
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/request/MonitorContendedEnteredRequest.java b/ojluni/src/main/java/com/sun/jdi/request/MonitorContendedEnteredRequest.java
deleted file mode 100755
index 0066f86..0000000
--- a/ojluni/src/main/java/com/sun/jdi/request/MonitorContendedEnteredRequest.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-package com.sun.jdi.request;
-
-import com.sun.jdi.*;
-
-/**
- * Request for notification of a thread in the target VM entering a monitor
- * after waiting for it to be released by another thread.
- * When an enabled MonitorContededEnteredRequest is satisfied, an
- * {@link com.sun.jdi.event.EventSet event set} containing a
- * {@link com.sun.jdi.event.MonitorContendedEnteredEvent MonitorContendedEnteredEvent}
- * will be placed on the
- * {@link com.sun.jdi.event.EventQueue EventQueue}.
- * The collection of existing MonitorContendedEnteredEvents is
- * managed by the {@link EventRequestManager}
- *
- * @see com.sun.jdi.event.MonitorContendedEnteredEvent
- * @see com.sun.jdi.event.EventQueue
- * @see EventRequestManager
- *
- * @author Swamy Venkataramanappa
- * @since  1.6
- */
-public interface MonitorContendedEnteredRequest extends EventRequest {
-
-    /**
-     * Restricts the events generated by this request to those in
-     * the given thread.
-     * @param thread the thread to filter on.
-     * @throws InvalidRequestStateException if this request is currently
-     * enabled or has been deleted.
-     * Filters may be added only to disabled requests.
-     */
-    void addThreadFilter(ThreadReference thread);
-
-    /**
-     * Restricts the events generated by this request to those whose
-     * method is in the given reference type or any of its subtypes.
-     * An event will be generated for any location in a reference type
-     * that can be safely cast to the given reference type.
-     *
-     * @param refType the reference type to filter on.
-     * @throws InvalidRequestStateException if this request is currently
-     * enabled or has been deleted.
-     * Filters may be added only to disabled requests.
-     */
-    void addClassFilter(ReferenceType refType);
-
-    /**
-     * Restricts the events generated by this request to those
-     * whose method is in a class whose name matches this restricted
-     * regular expression. Regular expressions are limited
-     * to exact matches and patterns that begin with '*' or end with '*';
-     * for example, "*.Foo" or "java.*".
-     *
-     * @param classPattern the pattern String to filter for.
-     * @throws InvalidRequestStateException if this request is currently
-     * enabled or has been deleted.
-     * Filters may be added only to disabled requests.
-     */
-    void addClassFilter(String classPattern);
-
-    /**
-     * Restricts the events generated by this request to those
-     * whose method is in a class whose name does <b>not</b> match this restricted
-     * regular expression, e.g. "java.*" or "*.Foo".
-     * @param classPattern the pattern String to filter against.
-     * @throws InvalidRequestStateException if this request is currently
-     * enabled or has been deleted.
-     * Filters may be added only to disabled requests.
-     */
-    void addClassExclusionFilter(String classPattern);
-
-    /**
-     * Restricts the events generated by this request to those in
-     * which the currently executing instance ("this") is the object
-     * specified.
-     * <P>
-     * Not all targets support this operation.
-     * Use {@link VirtualMachine#canUseInstanceFilters()}
-     * to determine if the operation is supported.
-     * @param instance the object which must be the current instance
-     * in order to pass this filter.
-     * @throws java.lang.UnsupportedOperationException if
-     * the target virtual machine does not support this
-     * operation.
-     * @throws InvalidRequestStateException if this request is currently
-     * enabled or has been deleted.
-     * Filters may be added only to disabled requests.
-     */
-    void addInstanceFilter(ObjectReference instance);
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/request/MonitorWaitRequest.java b/ojluni/src/main/java/com/sun/jdi/request/MonitorWaitRequest.java
deleted file mode 100755
index 37ce47f..0000000
--- a/ojluni/src/main/java/com/sun/jdi/request/MonitorWaitRequest.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * Copyright (c) 2005, 2006, 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.jdi.request;
-
-import com.sun.jdi.*;
-
-/**
- * Request for notification when a thread in the target VM is about to
- * wait on a monitor object. That is, a thread is entering Object.wait().
- * When an enabled MonitorWaitRequest is satisfied, an
- * {@link com.sun.jdi.event.EventSet event set} containing a
- * {@link com.sun.jdi.event.MonitorWaitEvent MonitorWaitEvent}
- * will be placed on the
- * {@link com.sun.jdi.event.EventQueue EventQueue}.
- * The collection of existing MonitorWaitEvents is
- * managed by the {@link EventRequestManager}
- *
- * @see com.sun.jdi.event.MonitorWaitEvent
- * @see com.sun.jdi.event.EventQueue
- * @see EventRequestManager
- *
- * @author Swamy Venkataramanappa
- * @since  1.6
- */
-public interface MonitorWaitRequest extends EventRequest {
-
-    /**
-     * Restricts the events generated by this request to those in
-     * the given thread.
-     * @param thread the thread to filter on.
-     * @throws InvalidRequestStateException if this request is currently
-     * enabled or has been deleted.
-     * Filters may be added only to disabled requests.
-     */
-    void addThreadFilter(ThreadReference thread);
-
-    /**
-     * Restricts the events generated by this request to those whose
-     * monitor object is of the given reference type or any of
-     * its subtypes.
-     *
-     * @param refType the reference type to filter on.
-     * @throws InvalidRequestStateException if this request is currently
-     * enabled or has been deleted.
-     * Filters may be added only to disabled requests.
-     */
-    void addClassFilter(ReferenceType refType);
-
-    /**
-     * Restricts the events generated by this request to those
-     * in which the name of the class of the monitor object matches this restricted
-     * regular expression. Regular expressions are limited
-     * to exact matches and patterns that begin with '*' or end with '*';
-     * for example, "*.Foo" or "java.*".
-     *
-     * @param classPattern the pattern String to filter for.
-     * @throws InvalidRequestStateException if this request is currently
-     * enabled or has been deleted.
-     * Filters may be added only to disabled requests.
-     */
-    void addClassFilter(String classPattern);
-
-    /**
-     * Restricts the events generated by this request to those
-     * in which the name of the class of the monitor object does <b>not</b>match this restricted
-     * regular expression, e.g.  "java.*" or "*.Foo".
-     * @param classPattern the pattern String to filter against.
-     * @throws InvalidRequestStateException if this request is currently
-     * enabled or has been deleted.
-     * Filters may be added only to disabled requests.
-     */
-    void addClassExclusionFilter(String classPattern);
-
-    /**
-     * Restricts the events generated by this request to those in
-     * which the currently executing instance ("this") is the object
-     * specified.
-     * <P>
-     * Not all targets support this operation.
-     * Use {@link VirtualMachine#canUseInstanceFilters()}
-     * to determine if the operation is supported.
-     * @param instance the object which must be the current instance
-     * in order to pass this filter.
-     * @throws java.lang.UnsupportedOperationException if
-     * the target virtual machine does not support this
-     * operation.
-     * @throws InvalidRequestStateException if this request is currently
-     * enabled or has been deleted.
-     * Filters may be added only to disabled requests.
-     */
-    void addInstanceFilter(ObjectReference instance);
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/request/MonitorWaitedRequest.java b/ojluni/src/main/java/com/sun/jdi/request/MonitorWaitedRequest.java
deleted file mode 100755
index 9fea543..0000000
--- a/ojluni/src/main/java/com/sun/jdi/request/MonitorWaitedRequest.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * Copyright (c) 2005, 2006, 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.jdi.request;
-
-import com.sun.jdi.*;
-
-/**
- * Request for notification when a thread in the target VM has finished waiting on
- * a monitor object. That is, a thread is leaving Object.wait(). "
- * When an enabled MonitorWaitedRequest is satisfied, an
- * {@link com.sun.jdi.event.EventSet event set} containing a
- * {@link com.sun.jdi.event.MonitorWaitedEvent MonitorWaitedEvent}
- * will be placed on the
- * {@link com.sun.jdi.event.EventQueue EventQueue}.
- * The collection of existing MonitorWaitedEvents is
- * managed by the {@link EventRequestManager}
- *
- * @see com.sun.jdi.event.MonitorWaitedEvent
- * @see com.sun.jdi.event.EventQueue
- * @see EventRequestManager
- *
- * @author Swamy Venkataramanappa
- * @since  1.6
- */
-public interface MonitorWaitedRequest extends EventRequest {
-
-    /**
-     * Restricts the events generated by this request to those in
-     * the given thread.
-     * @param thread the thread to filter on.
-     * @throws InvalidRequestStateException if this request is currently
-     * enabled or has been deleted.
-     * Filters may be added only to disabled requests.
-     */
-    void addThreadFilter(ThreadReference thread);
-
-    /**
-     * Restricts the events generated by this request to those whose
-     * monitor object is of the given reference type or any of
-     * its subtypes.
-     *
-     * @param refType the reference type to filter on.
-     * @throws InvalidRequestStateException if this request is currently
-     * enabled or has been deleted.
-     * Filters may be added only to disabled requests.
-     */
-    void addClassFilter(ReferenceType refType);
-
-    /**
-     * Restricts the events generated by this request to those
-     * in which the name of the class of the monitor object matches this restricted
-     * regular expression. Regular expressions are limited
-     * to exact matches and patterns that begin with '*' or end with '*';
-     * for example, "*.Foo" or "java.*".
-     *
-     * @param classPattern the pattern String to filter for.
-     * @throws InvalidRequestStateException if this request is currently
-     * enabled or has been deleted.
-     * Filters may be added only to disabled requests.
-     */
-    void addClassFilter(String classPattern);
-
-    /**
-     * Restricts the events generated by this request to those
-     * in which the name of the class of the monitor object does <b>not</b>match this restricted
-     * regular expression, e.g.  "java.*" or "*.Foo".
-     * @param classPattern the pattern String to filter against.
-     * @throws InvalidRequestStateException if this request is currently
-     * enabled or has been deleted.
-     * Filters may be added only to disabled requests.
-     */
-    void addClassExclusionFilter(String classPattern);
-
-    /**
-     * Restricts the events generated by this request to those in
-     * which the currently executing instance ("this") is the object
-     * specified.
-     * <P>
-     * Not all targets support this operation.
-     * Use {@link VirtualMachine#canUseInstanceFilters()}
-     * to determine if the operation is supported.
-     * @param instance the object which must be the current instance
-     * in order to pass this filter.
-     * @throws java.lang.UnsupportedOperationException if
-     * the target virtual machine does not support this
-     * operation.
-     * @throws InvalidRequestStateException if this request is currently
-     * enabled or has been deleted.
-     * Filters may be added only to disabled requests.
-     */
-    void addInstanceFilter(ObjectReference instance);
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/request/StepRequest.java b/ojluni/src/main/java/com/sun/jdi/request/StepRequest.java
deleted file mode 100755
index 765fdd0..0000000
--- a/ojluni/src/main/java/com/sun/jdi/request/StepRequest.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * Copyright (c) 1998, 2001, 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.jdi.request;
-
-import com.sun.jdi.*;
-
-/**
- * Request for notification when a step occurs in the target VM.
- * When an enabled StepRequest is satisfied, an
- * {@link com.sun.jdi.event.EventSet event set} containing a
- * {@link com.sun.jdi.event.StepEvent StepEvent} will be placed on the
- * {@link com.sun.jdi.event.EventQueue EventQueue}.
- * The collection of existing StepRequests is
- * managed by the {@link EventRequestManager}
- *
- * @see com.sun.jdi.event.StepEvent
- * @see com.sun.jdi.event.EventQueue
- * @see EventRequestManager
- *
- * @author Robert Field
- * @since  1.3
- */
-public interface StepRequest extends EventRequest {
-
-    /** Step into any newly pushed frames */
-    int STEP_INTO = 1;
-    /** Step over any newly pushed frames */
-    int STEP_OVER = 2;
-    /** Step out of the current frame */
-    int STEP_OUT = 3;
-
-    /** Step to the next available location */
-    int STEP_MIN = -1;
-    /** Step to the next location on a different line */
-    int STEP_LINE = -2;
-
-    /**
-     * @return the thread on which the step event is being requested.
-     */
-    ThreadReference thread();
-
-    /**
-     * @return the step size
-     */
-    int size();
-
-    /**
-     * @return the step depth
-     */
-    int depth();
-
-    /**
-     * Restricts the events generated by this request to those whose
-     * location is in the given reference type or any of its subtypes.
-     * An event will be generated for any location in a reference type
-     * that can be safely cast to the given reference type.
-     *
-     * @param refType the reference type to filter on.
-     * @throws InvalidRequestStateException if this request is currently
-     * enabled or has been deleted.
-     * Filters may be added only to disabled requests.
-     */
-    void addClassFilter(ReferenceType refType);
-
-    /**
-     * Restricts the events generated by this request to those
-     * whose location is in a class whose name matches a restricted
-     * regular expression. Regular expressions are limited
-     * to exact matches and patterns that begin with '*' or end with '*';
-     * for example, "*.Foo" or "java.*".
-     *
-     * @param classPattern the pattern String to filter for.
-     * @throws InvalidRequestStateException if this request is currently
-     * enabled or has been deleted.
-     * Filters may be added only to disabled requests.
-     */
-    void addClassFilter(String classPattern);
-
-    /**
-     * Restricts the events generated by this request to those
-     * whose location is in a class whose name does <b>not</b> match a
-     * restricted regular expression. Regular expressions are limited
-     * to exact matches and patterns that begin with '*' or end with '*';
-     * for example, "*.Foo" or "java.*".
-     *
-     * @param classPattern the pattern String to filter against.
-     * @throws InvalidRequestStateException if this request is currently
-     * enabled or has been deleted.
-     * Filters may be added only to disabled requests.
-     */
-    void addClassExclusionFilter(String classPattern);
-
-    /**
-     * Restricts the events generated by this request to those in
-     * which the currently executing instance ("this") is the object
-     * specified.
-     * <P>
-     * Not all targets support this operation.
-     * Use {@link VirtualMachine#canUseInstanceFilters()}
-     * to determine if the operation is supported.
-     * @since 1.4
-     * @param instance the object which must be the current instance
-     * in order to pass this filter.
-     * @throws java.lang.UnsupportedOperationException if
-     * the target virtual machine does not support this
-     * operation.
-     * @throws InvalidRequestStateException if this request is currently
-     * enabled or has been deleted.
-     * Filters may be added only to disabled requests.
-     */
-    void addInstanceFilter(ObjectReference instance);
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/request/ThreadDeathRequest.java b/ojluni/src/main/java/com/sun/jdi/request/ThreadDeathRequest.java
deleted file mode 100755
index fe9e68a..0000000
--- a/ojluni/src/main/java/com/sun/jdi/request/ThreadDeathRequest.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright (c) 1998, 2001, 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.jdi.request;
-
-import com.sun.jdi.*;
-
-/**
- * Request for notification when a thread terminates in the target VM.
- * When an enabled ThreadDeathRequest is satisfied, an
- * {@link com.sun.jdi.event.EventSet event set} containing a
- * {@link com.sun.jdi.event.ThreadDeathEvent ThreadDeathEvent}
- * will be placed on the
- * {@link com.sun.jdi.event.EventQueue EventQueue}.
- * The collection of existing ThreadDeathRequests is
- * managed by the {@link EventRequestManager}
- *
- * @see com.sun.jdi.event.ThreadDeathEvent
- * @see com.sun.jdi.event.EventQueue
- * @see EventRequestManager
- *
- * @author Robert Field
- * @since  1.3
- */
-public interface ThreadDeathRequest extends EventRequest {
-
-    /**
-     * Restricts the events generated by this request to those in
-     * the given thread.
-     * @param thread the thread to filter on.
-     * @throws InvalidRequestStateException if this request is currently
-     * enabled or has been deleted.
-     * Filters may be added only to disabled requests.
-     */
-    void addThreadFilter(ThreadReference thread);
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/request/ThreadStartRequest.java b/ojluni/src/main/java/com/sun/jdi/request/ThreadStartRequest.java
deleted file mode 100755
index 298da9a..0000000
--- a/ojluni/src/main/java/com/sun/jdi/request/ThreadStartRequest.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright (c) 1998, 2001, 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.jdi.request;
-
-import com.sun.jdi.*;
-
-/**
- * Request for notification when a thread starts execution in the target VM.
- * When an enabled ThreadStartRequest is hit, an
- * {@link com.sun.jdi.event.EventSet event set} containing a
- * {@link com.sun.jdi.event.ThreadStartEvent ThreadStartEvent}
- * will be placed on the
- * {@link com.sun.jdi.event.EventQueue EventQueue}.
- * The collection of existing ThreadStartRequests is
- * managed by the {@link EventRequestManager}
- *
- * @see com.sun.jdi.event.ThreadStartEvent
- * @see com.sun.jdi.event.EventQueue
- * @see EventRequestManager
- *
- * @author Robert Field
- * @since  1.3
- */
-public interface ThreadStartRequest extends EventRequest {
-
-    /**
-     * Restricts the events generated by this request to those in
-     * the given thread.
-     * @param thread the thread to filter on.
-     * @throws InvalidRequestStateException if this request is currently
-     * enabled or has been deleted.
-     * Filters may be added only to disabled requests.
-     */
-    void addThreadFilter(ThreadReference thread);
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/request/VMDeathRequest.java b/ojluni/src/main/java/com/sun/jdi/request/VMDeathRequest.java
deleted file mode 100755
index c600651..0000000
--- a/ojluni/src/main/java/com/sun/jdi/request/VMDeathRequest.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (c) 2001, 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.jdi.request;
-
-import com.sun.jdi.*;
-
-/**
- * Request for notification when the target VM terminates.
- * When an enabled VMDeathRequest is satisfied, an
- * {@link com.sun.jdi.event.EventSet event set} containing a
- * {@link com.sun.jdi.event.VMDeathEvent VMDeathEvent}
- * will be placed on the
- * {@link com.sun.jdi.event.EventQueue EventQueue}.
- * The collection of existing VMDeathRequests is
- * managed by the {@link EventRequestManager}
- * <P>
- * Even without creating a VMDeathRequest, a single
- * unsolicited VMDeathEvent will be sent with a
- * {@link EventRequest#suspendPolicy() suspend policy}
- * of {@link EventRequest#SUSPEND_NONE SUSPEND_NONE}.
- * This request would typically be created so that a
- * VMDeathEvent with a suspend policy of
- * {@link EventRequest#SUSPEND_ALL SUSPEND_ALL}
- * will be sent.  This event can be used to assure
- * completion of any processing which requires the VM
- * to be alive (e.g. event processing).  Note: the
- * unsolicited VMDeathEvent will still be sent.
- *
- * @see com.sun.jdi.event.VMDeathEvent
- * @see com.sun.jdi.event.EventQueue
- * @see EventRequestManager
- *
- * @author Robert Field
- * @since  1.4
- */
-public interface VMDeathRequest extends EventRequest {
-
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/request/WatchpointRequest.java b/ojluni/src/main/java/com/sun/jdi/request/WatchpointRequest.java
deleted file mode 100755
index cafe61d..0000000
--- a/ojluni/src/main/java/com/sun/jdi/request/WatchpointRequest.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Copyright (c) 1998, 2001, 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.jdi.request;
-
-import com.sun.jdi.*;
-
-/**
- * Identifies a {@link Field} in the target VM being watched.
- *
- * @see AccessWatchpointRequest
- * @see ModificationWatchpointRequest
- * @see com.sun.jdi.event.EventQueue
- * @see EventRequestManager
- *
- * @author Robert Field
- * @since  1.3
- */
-public interface WatchpointRequest extends EventRequest {
-
-    /**
-     * Gets the Field being watched by this WatchpointRequest.
-     *
-     * @return the {@link Field}  this Watchpoint is monitoring.
-     */
-    Field field();
-
-    /**
-     * Restricts the events generated by this request to those in
-     * the given thread.
-     * @param thread the thread to filter on.
-     * @throws InvalidRequestStateException if this request is currently
-     * enabled or has been deleted.
-     * Filters may be added only to disabled requests.
-     */
-    void addThreadFilter(ThreadReference thread);
-
-    /**
-     * Restricts the events generated by this request to those whose
-     * location is in the given reference type or any of its subtypes.
-     * An event will be generated for any location in a reference type
-     * that can be safely cast to the given reference type.
-     *
-     * @param refType the reference type to filter on.
-     * @throws InvalidRequestStateException if this request is currently
-     * enabled or has been deleted.
-     * Filters may be added only to disabled requests.
-     */
-    void addClassFilter(ReferenceType refType);
-
-    /**
-     * Restricts the events generated by this request to those
-     * whose location is in a class whose name matches a restricted
-     * regular expression. Regular expressions are limited
-     * to exact matches and patterns that begin with '*' or end with '*';
-     * for example, "*.Foo" or "java.*".
-     *
-     * @param classPattern the pattern String to filter for.
-     * @throws InvalidRequestStateException if this request is currently
-     * enabled or has been deleted.
-     * Filters may be added only to disabled requests.
-     */
-    void addClassFilter(String classPattern);
-
-    /**
-     * Restricts the events generated by this request to those
-     * whose location is in a class whose name does <b>not</b> match this
-     * restricted regular expression. Regular expressions are limited
-     * to exact matches and patterns that begin with '*' or end with '*';
-     * for example, "*.Foo" or "java.*".
-     *
-     * @param classPattern the pattern String to filter against.
-     * @throws InvalidRequestStateException if this request is currently
-     * enabled or has been deleted.
-     * Filters may be added only to disabled requests.
-     */
-    void addClassExclusionFilter(String classPattern);
-
-    /**
-     * Restricts the events generated by this request to those in
-     * which the currently executing instance ("this") is the object
-     * specified.
-     * <P>
-     * Not all targets support this operation.
-     * Use {@link VirtualMachine#canUseInstanceFilters()}
-     * to determine if the operation is supported.
-     * @since 1.4
-     * @param instance the object which must be the current instance
-     * in order to pass this filter.
-     * @throws java.lang.UnsupportedOperationException if
-     * the target virtual machine does not support this
-     * operation.
-     * @throws InvalidRequestStateException if this request is currently
-     * enabled or has been deleted.
-     * Filters may be added only to disabled requests.
-     */
-    void addInstanceFilter(ObjectReference instance);
-}
diff --git a/ojluni/src/main/java/com/sun/jdi/request/package.html b/ojluni/src/main/java/com/sun/jdi/request/package.html
deleted file mode 100755
index c99c1c8..0000000
--- a/ojluni/src/main/java/com/sun/jdi/request/package.html
+++ /dev/null
@@ -1,48 +0,0 @@
-<html>
-<head>
-    <title>com.sun.jdi.request description</title>
-<!--
- 
-Copyright (c) 1998, 1999, 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.
--->
-</head>
-<body bgcolor="white">
-This package is used to request that a JDI
-event be sent under specified conditions.
-With the exception of termination events, which are
-always sent, there is one kind of 
-{@link com.sun.jdi.request.EventRequest} for each kind of 
-{@link com.sun.jdi.event.Event Event} - for example,
-{@link com.sun.jdi.request.BreakpointRequest} is used to request a
-{@link com.sun.jdi.event.BreakpointEvent BreakpointEvent}.
-Event requests are created by the 
-{@link com.sun.jdi.request.EventRequestManager}.  
-Events and event processing are defined in the
-{@link com.sun.jdi.event} package.
-<p>
-Methods may be added to the interfaces in the JDI packages in future 
-releases. Existing packages may be renamed if the JDI becomes a standard 
-extension.
-  </body>
-</html>
diff --git a/ojluni/src/main/java/com/sun/jmx/defaults/JmxProperties.java b/ojluni/src/main/java/com/sun/jmx/defaults/JmxProperties.java
deleted file mode 100755
index de64a2a2..0000000
--- a/ojluni/src/main/java/com/sun/jmx/defaults/JmxProperties.java
+++ /dev/null
@@ -1,232 +0,0 @@
-/*
- * Copyright (c) 1999, 2007, 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.jmx.defaults;
-
-import java.util.logging.Logger;
-
-/**
- * This contains the property list defined for this
- * JMX implementation.
- *
- *
- * @since 1.5
- */
-public class JmxProperties {
-
-    // private constructor defined to "hide" the default public constructor
-    private JmxProperties() {
-    }
-
-    // PUBLIC STATIC CONSTANTS
-    //------------------------
-
-    /**
-     * References the property that specifies the directory where
-     * the native libraries will be stored before the MLet Service
-     * loads them into memory.
-     * <p>
-     * Property Name: <B>jmx.mlet.library.dir</B>
-     */
-    public static final String JMX_INITIAL_BUILDER =
-            "javax.management.builder.initial";
-
-    /**
-     * References the property that specifies the directory where
-     * the native libraries will be stored before the MLet Service
-     * loads them into memory.
-     * <p>
-     * Property Name: <B>jmx.mlet.library.dir</B>
-     */
-    public static final String MLET_LIB_DIR = "jmx.mlet.library.dir";
-
-    /**
-     * References the property that specifies the full name of the JMX
-     * specification implemented by this product.
-     * <p>
-     * Property Name: <B>jmx.specification.name</B>
-     */
-    public static final String JMX_SPEC_NAME = "jmx.specification.name";
-
-    /**
-     * References the property that specifies the version of the JMX
-     * specification implemented by this product.
-     * <p>
-     * Property Name: <B>jmx.specification.version</B>
-     */
-    public static final String JMX_SPEC_VERSION = "jmx.specification.version";
-
-    /**
-     * References the property that specifies the vendor of the JMX
-     * specification implemented by this product.
-     * <p>
-     * Property Name: <B>jmx.specification.vendor</B>
-     */
-    public static final String JMX_SPEC_VENDOR = "jmx.specification.vendor";
-
-    /**
-     * References the property that specifies the full name of this product
-     * implementing the  JMX specification.
-     * <p>
-     * Property Name: <B>jmx.implementation.name</B>
-     */
-    public static final String JMX_IMPL_NAME = "jmx.implementation.name";
-
-    /**
-     * References the property that specifies the name of the vendor of this
-     * product implementing the  JMX specification.
-     * <p>
-     * Property Name: <B>jmx.implementation.vendor</B>
-     */
-    public static final String JMX_IMPL_VENDOR = "jmx.implementation.vendor";
-
-    /**
-     * References the property that specifies the version of this product
-     * implementing the  JMX specification.
-     * <p>
-     * Property Name: <B>jmx.implementation.version</B>
-     */
-    public static final String JMX_IMPL_VERSION = "jmx.implementation.version";
-
-    /**
-     * Logger name for MBean Server information.
-     */
-    public static final String MBEANSERVER_LOGGER_NAME =
-            "javax.management.mbeanserver";
-
-    /**
-     * Logger for MBean Server information.
-     */
-    public static final Logger MBEANSERVER_LOGGER =
-            Logger.getLogger(MBEANSERVER_LOGGER_NAME);
-
-    /**
-     * Logger name for MLet service information.
-     */
-    public static final String MLET_LOGGER_NAME =
-            "javax.management.mlet";
-
-    /**
-     * Logger for MLet service information.
-     */
-    public static final Logger MLET_LOGGER =
-            Logger.getLogger(MLET_LOGGER_NAME);
-
-    /**
-     * Logger name for Monitor information.
-     */
-    public static final String MONITOR_LOGGER_NAME =
-            "javax.management.monitor";
-
-    /**
-     * Logger for Monitor information.
-     */
-    public static final Logger MONITOR_LOGGER =
-            Logger.getLogger(MONITOR_LOGGER_NAME);
-
-    /**
-     * Logger name for Timer information.
-     */
-    public static final String TIMER_LOGGER_NAME =
-            "javax.management.timer";
-
-    /**
-     * Logger for Timer information.
-     */
-    public static final Logger TIMER_LOGGER =
-            Logger.getLogger(TIMER_LOGGER_NAME);
-
-    /**
-     * Logger name for Event Management information.
-     */
-    public static final String NOTIFICATION_LOGGER_NAME =
-            "javax.management.notification";
-
-    /**
-     * Logger for Event Management information.
-     */
-    public static final Logger NOTIFICATION_LOGGER =
-            Logger.getLogger(NOTIFICATION_LOGGER_NAME);
-
-    /**
-     * Logger name for Relation Service.
-     */
-    public static final String RELATION_LOGGER_NAME =
-            "javax.management.relation";
-
-    /**
-     * Logger for Relation Service.
-     */
-    public static final Logger RELATION_LOGGER =
-            Logger.getLogger(RELATION_LOGGER_NAME);
-
-    /**
-     * Logger name for Model MBean.
-     */
-    public static final String MODELMBEAN_LOGGER_NAME =
-            "javax.management.modelmbean";
-
-    /**
-     * Logger for Model MBean.
-     */
-    public static final Logger MODELMBEAN_LOGGER =
-            Logger.getLogger(MODELMBEAN_LOGGER_NAME);
-
-    /**
-     * Logger name for all other JMX classes.
-     */
-    public static final String MISC_LOGGER_NAME =
-            "javax.management.misc";
-
-    /**
-     * Logger for all other JMX classes.
-     */
-    public static final Logger MISC_LOGGER =
-            Logger.getLogger(MISC_LOGGER_NAME);
-
-    /**
-     * Logger name for SNMP.
-     */
-    public static final String SNMP_LOGGER_NAME =
-            "javax.management.snmp";
-
-    /**
-     * Logger for SNMP.
-     */
-    public static final Logger SNMP_LOGGER =
-            Logger.getLogger(SNMP_LOGGER_NAME);
-
-    /**
-     * Logger name for SNMP Adaptor.
-     */
-    public static final String SNMP_ADAPTOR_LOGGER_NAME =
-            "javax.management.snmp.daemon";
-
-    /**
-     * Logger for SNMP Adaptor.
-     */
-    public static final Logger SNMP_ADAPTOR_LOGGER =
-            Logger.getLogger(SNMP_ADAPTOR_LOGGER_NAME);
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/defaults/ServiceName.java b/ojluni/src/main/java/com/sun/jmx/defaults/ServiceName.java
deleted file mode 100755
index 8f742df..0000000
--- a/ojluni/src/main/java/com/sun/jmx/defaults/ServiceName.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-package com.sun.jmx.defaults;
-
-/**
- * Used for storing default values used by JMX services.
- *
- * @since 1.5
- */
-public class ServiceName {
-
-    // private constructor defined to "hide" the default public constructor
-    private ServiceName() {
-    }
-
-    /**
-     * The object name of the MBeanServer delegate object
-     * <BR>
-     * The value is <CODE>JMImplementation:type=MBeanServerDelegate</CODE>.
-     */
-    public static final String DELEGATE =
-        "JMImplementation:type=MBeanServerDelegate" ;
-
-    /**
-     * The default key properties for registering the class loader of the
-     * MLet service.
-     * <BR>
-     * The value is <CODE>type=MLet</CODE>.
-     */
-    public static final String MLET = "type=MLet";
-
-    /**
-     * The default domain.
-     * <BR>
-     * The value is <CODE>DefaultDomain</CODE>.
-     */
-    public static final String DOMAIN = "DefaultDomain";
-
-    /**
-     * The name of the JMX specification implemented by this product.
-     * <BR>
-     * The value is <CODE>Java Management Extensions</CODE>.
-     */
-    public static final String JMX_SPEC_NAME = "Java Management Extensions";
-
-    /**
-     * The version of the JMX specification implemented by this product.
-     * <BR>
-     * The value is <CODE>1.4</CODE>.
-     */
-    public static final String JMX_SPEC_VERSION = "1.4";
-
-    /**
-     * The vendor of the JMX specification implemented by this product.
-     * <BR>
-     * The value is <CODE>Oracle Corporation</CODE>.
-     */
-    public static final String JMX_SPEC_VENDOR = "Oracle Corporation";
-
-    /**
-     * The name of this product implementing the  JMX specification.
-     * <BR>
-     * The value is <CODE>JMX</CODE>.
-     */
-    public static final String JMX_IMPL_NAME = "JMX";
-
-    /**
-     * The name of the vendor of this product implementing the
-     * JMX specification.
-     * <BR>
-     * The value is <CODE>Oracle Corporation</CODE>.
-     */
-    public static final String JMX_IMPL_VENDOR = "Oracle Corporation";
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/defaults/package.html b/ojluni/src/main/java/com/sun/jmx/defaults/package.html
deleted file mode 100755
index 273fafd..0000000
--- a/ojluni/src/main/java/com/sun/jmx/defaults/package.html
+++ /dev/null
@@ -1,33 +0,0 @@
-<html>
-<head>
-<title>jmx.defaults package</title>
-<!--
-
-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.
--->
-</head>
-<body bgcolor="white">
-    Provides specific classes to <B>Sun JMX Reference Implementation</B>.
-</BODY>
-</HTML>
diff --git a/ojluni/src/main/java/com/sun/jmx/interceptor/DefaultMBeanServerInterceptor.java b/ojluni/src/main/java/com/sun/jmx/interceptor/DefaultMBeanServerInterceptor.java
deleted file mode 100755
index b1f5ab2..0000000
--- a/ojluni/src/main/java/com/sun/jmx/interceptor/DefaultMBeanServerInterceptor.java
+++ /dev/null
@@ -1,2069 +0,0 @@
-/*
- * Copyright (c) 2000, 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.
- */
-
-package com.sun.jmx.interceptor;
-
-
-// JMX RI
-import static com.sun.jmx.defaults.JmxProperties.MBEANSERVER_LOGGER;
-import com.sun.jmx.mbeanserver.DynamicMBean2;
-import com.sun.jmx.mbeanserver.Introspector;
-import com.sun.jmx.mbeanserver.MBeanInstantiator;
-import com.sun.jmx.mbeanserver.ModifiableClassLoaderRepository;
-import com.sun.jmx.mbeanserver.NamedObject;
-import com.sun.jmx.mbeanserver.Repository;
-import com.sun.jmx.mbeanserver.Repository.RegistrationContext;
-import com.sun.jmx.mbeanserver.Util;
-import com.sun.jmx.remote.util.EnvHelp;
-
-import java.io.ObjectInputStream;
-import java.lang.ref.WeakReference;
-import java.security.AccessControlContext;
-import java.security.AccessController;
-import java.security.Permission;
-import java.security.PrivilegedAction;
-import java.security.ProtectionDomain;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-import java.util.WeakHashMap;
-import java.util.logging.Level;
-
-// JMX import
-import javax.management.Attribute;
-import javax.management.AttributeList;
-import javax.management.AttributeNotFoundException;
-import javax.management.DynamicMBean;
-import javax.management.InstanceAlreadyExistsException;
-import javax.management.InstanceNotFoundException;
-import javax.management.IntrospectionException;
-import javax.management.InvalidAttributeValueException;
-import javax.management.JMRuntimeException;
-import javax.management.ListenerNotFoundException;
-import javax.management.MBeanException;
-import javax.management.MBeanInfo;
-import javax.management.MBeanPermission;
-import javax.management.MBeanRegistration;
-import javax.management.MBeanRegistrationException;
-import javax.management.MBeanServer;
-import javax.management.MBeanServerDelegate;
-import javax.management.MBeanServerNotification;
-import javax.management.MBeanTrustPermission;
-import javax.management.NotCompliantMBeanException;
-import javax.management.Notification;
-import javax.management.NotificationBroadcaster;
-import javax.management.NotificationEmitter;
-import javax.management.NotificationFilter;
-import javax.management.NotificationListener;
-import javax.management.ObjectInstance;
-import javax.management.ObjectName;
-import javax.management.OperationsException;
-import javax.management.QueryEval;
-import javax.management.QueryExp;
-import javax.management.ReflectionException;
-import javax.management.RuntimeErrorException;
-import javax.management.RuntimeMBeanException;
-import javax.management.RuntimeOperationsException;
-import javax.management.loading.ClassLoaderRepository;
-
-/**
- * This is the default class for MBean manipulation on the agent side. It
- * contains the methods necessary for the creation, registration, and
- * deletion of MBeans as well as the access methods for registered MBeans.
- * This is the core component of the JMX infrastructure.
- * <P>
- * Every MBean which is added to the MBean server becomes manageable: its attributes and operations
- * become remotely accessible through the connectors/adaptors connected to that MBean server.
- * A Java object cannot be registered in the MBean server unless it is a JMX compliant MBean.
- * <P>
- * When an MBean is registered or unregistered in the MBean server an
- * {@link javax.management.MBeanServerNotification MBeanServerNotification}
- * Notification is emitted. To register an object as listener to MBeanServerNotifications
- * you should call the MBean server method {@link #addNotificationListener addNotificationListener} with <CODE>ObjectName</CODE>
- * the <CODE>ObjectName</CODE> of the {@link javax.management.MBeanServerDelegate MBeanServerDelegate}.
- * This <CODE>ObjectName</CODE> is:
- * <BR>
- * <CODE>JMImplementation:type=MBeanServerDelegate</CODE>.
- *
- * @since 1.5
- */
-public class DefaultMBeanServerInterceptor implements MBeanServerInterceptor {
-
-    /** The MBeanInstantiator object used by the
-     *  DefaultMBeanServerInterceptor */
-    private final transient MBeanInstantiator instantiator;
-
-    /** The MBean server object that is associated to the
-     *  DefaultMBeanServerInterceptor */
-    private transient MBeanServer server = null;
-
-    /** The MBean server delegate object that is associated to the
-     *  DefaultMBeanServerInterceptor */
-    private final transient MBeanServerDelegate delegate;
-
-    /** The Repository object used by the DefaultMBeanServerInterceptor */
-    private final transient Repository repository;
-
-    /** Wrappers for client listeners.  */
-    /* See the comment before addNotificationListener below.  */
-    private final transient
-        WeakHashMap<ListenerWrapper, WeakReference<ListenerWrapper>>
-            listenerWrappers =
-                new WeakHashMap<ListenerWrapper,
-                                WeakReference<ListenerWrapper>>();
-
-    /** The default domain of the object names */
-    private final String domain;
-
-    /** The sequence number identifying the notifications sent */
-    // Now sequence number is handled by MBeanServerDelegate.
-    // private int sequenceNumber=0;
-
-    /**
-     * Creates a DefaultMBeanServerInterceptor with the specified
-     * repository instance.
-     * <p>Do not forget to call <code>initialize(outer,delegate)</code>
-     * before using this object.
-     * @param outer A pointer to the MBeanServer object that must be
-     *        passed to the MBeans when invoking their
-     *        {@link javax.management.MBeanRegistration} interface.
-     * @param delegate A pointer to the MBeanServerDelegate associated
-     *        with the new MBeanServer. The new MBeanServer must register
-     *        this MBean in its MBean repository.
-     * @param instantiator The MBeanInstantiator that will be used to
-     *        instantiate MBeans and take care of class loading issues.
-     * @param repository The repository to use for this MBeanServer.
-     */
-    public DefaultMBeanServerInterceptor(MBeanServer         outer,
-                                         MBeanServerDelegate delegate,
-                                         MBeanInstantiator   instantiator,
-                                         Repository          repository) {
-        if (outer == null) throw new
-            IllegalArgumentException("outer MBeanServer cannot be null");
-        if (delegate == null) throw new
-            IllegalArgumentException("MBeanServerDelegate cannot be null");
-        if (instantiator == null) throw new
-            IllegalArgumentException("MBeanInstantiator cannot be null");
-        if (repository == null) throw new
-            IllegalArgumentException("Repository cannot be null");
-
-        this.server   = outer;
-        this.delegate = delegate;
-        this.instantiator = instantiator;
-        this.repository   = repository;
-        this.domain       = repository.getDefaultDomain();
-    }
-
-    public ObjectInstance createMBean(String className, ObjectName name)
-        throws ReflectionException, InstanceAlreadyExistsException,
-               MBeanRegistrationException, MBeanException,
-               NotCompliantMBeanException {
-
-        return createMBean(className, name, (Object[]) null, (String[]) null);
-
-    }
-
-    public ObjectInstance createMBean(String className, ObjectName name,
-                                      ObjectName loaderName)
-        throws ReflectionException, InstanceAlreadyExistsException,
-               MBeanRegistrationException, MBeanException,
-               NotCompliantMBeanException, InstanceNotFoundException {
-
-        return createMBean(className, name, loaderName, (Object[]) null,
-                           (String[]) null);
-    }
-
-    public ObjectInstance createMBean(String className, ObjectName name,
-                                      Object[] params, String[] signature)
-        throws ReflectionException, InstanceAlreadyExistsException,
-               MBeanRegistrationException, MBeanException,
-               NotCompliantMBeanException  {
-
-        try {
-            return createMBean(className, name, null, true,
-                               params, signature);
-        } catch (InstanceNotFoundException e) {
-            /* Can only happen if loaderName doesn't exist, but we just
-               passed null, so we shouldn't get this exception.  */
-            throw EnvHelp.initCause(
-                new IllegalArgumentException("Unexpected exception: " + e), e);
-        }
-    }
-
-    public ObjectInstance createMBean(String className, ObjectName name,
-                                      ObjectName loaderName,
-                                      Object[] params, String[] signature)
-        throws ReflectionException, InstanceAlreadyExistsException,
-               MBeanRegistrationException, MBeanException,
-               NotCompliantMBeanException, InstanceNotFoundException  {
-
-        return createMBean(className, name, loaderName, false,
-                           params, signature);
-    }
-
-    private ObjectInstance createMBean(String className, ObjectName name,
-                                       ObjectName loaderName,
-                                       boolean withDefaultLoaderRepository,
-                                       Object[] params, String[] signature)
-        throws ReflectionException, InstanceAlreadyExistsException,
-               MBeanRegistrationException, MBeanException,
-               NotCompliantMBeanException, InstanceNotFoundException {
-
-        Class<?> theClass;
-
-        if (className == null) {
-            final RuntimeException wrapped =
-                new IllegalArgumentException("The class name cannot be null");
-            throw new RuntimeOperationsException(wrapped,
-                      "Exception occurred during MBean creation");
-        }
-
-        if (name != null) {
-            if (name.isPattern()) {
-                final RuntimeException wrapped =
-                    new IllegalArgumentException("Invalid name->" +
-                                                 name.toString());
-                final String msg = "Exception occurred during MBean creation";
-                throw new RuntimeOperationsException(wrapped, msg);
-            }
-
-            name = nonDefaultDomain(name);
-        }
-
-        checkMBeanPermission(className, null, null, "instantiate");
-        checkMBeanPermission(className, null, name, "registerMBean");
-
-        /* Load the appropriate class. */
-        if (withDefaultLoaderRepository) {
-            if (MBEANSERVER_LOGGER.isLoggable(Level.FINER)) {
-                MBEANSERVER_LOGGER.logp(Level.FINER,
-                        DefaultMBeanServerInterceptor.class.getName(),
-                        "createMBean",
-                        "ClassName = " + className + ", ObjectName = " + name);
-            }
-            theClass =
-                instantiator.findClassWithDefaultLoaderRepository(className);
-        } else if (loaderName == null) {
-            if (MBEANSERVER_LOGGER.isLoggable(Level.FINER)) {
-                MBEANSERVER_LOGGER.logp(Level.FINER,
-                        DefaultMBeanServerInterceptor.class.getName(),
-                        "createMBean", "ClassName = " + className +
-                        ", ObjectName = " + name + ", Loader name = null");
-            }
-
-            theClass = instantiator.findClass(className,
-                                  server.getClass().getClassLoader());
-        } else {
-            loaderName = nonDefaultDomain(loaderName);
-
-            if (MBEANSERVER_LOGGER.isLoggable(Level.FINER)) {
-                MBEANSERVER_LOGGER.logp(Level.FINER,
-                        DefaultMBeanServerInterceptor.class.getName(),
-                        "createMBean", "ClassName = " + className +
-                        ", ObjectName = " + name +
-                        ", Loader name = " + loaderName);
-            }
-
-            theClass = instantiator.findClass(className, loaderName);
-        }
-
-        checkMBeanTrustPermission(theClass);
-
-        // Check that the MBean can be instantiated by the MBeanServer.
-        Introspector.testCreation(theClass);
-
-        // Check the JMX MBean compliance of the class
-        Introspector.checkCompliance(theClass);
-
-        Object moi= instantiator.instantiate(theClass, params,  signature,
-                                             server.getClass().getClassLoader());
-
-        final String infoClassName = getNewMBeanClassName(moi);
-
-        return registerObject(infoClassName, moi, name);
-    }
-
-    public ObjectInstance registerMBean(Object object, ObjectName name)
-        throws InstanceAlreadyExistsException, MBeanRegistrationException,
-        NotCompliantMBeanException  {
-
-        // ------------------------------
-        // ------------------------------
-        Class<?> theClass = object.getClass();
-
-        Introspector.checkCompliance(theClass);
-
-        final String infoClassName = getNewMBeanClassName(object);
-
-        checkMBeanPermission(infoClassName, null, name, "registerMBean");
-        checkMBeanTrustPermission(theClass);
-
-        return registerObject(infoClassName, object, name);
-    }
-
-    private static String getNewMBeanClassName(Object mbeanToRegister)
-            throws NotCompliantMBeanException {
-        if (mbeanToRegister instanceof DynamicMBean) {
-            DynamicMBean mbean = (DynamicMBean) mbeanToRegister;
-            final String name;
-            try {
-                name = mbean.getMBeanInfo().getClassName();
-            } catch (Exception e) {
-                // Includes case where getMBeanInfo() returns null
-                NotCompliantMBeanException ncmbe =
-                    new NotCompliantMBeanException("Bad getMBeanInfo()");
-                ncmbe.initCause(e);
-                throw ncmbe;
-            }
-            if (name == null) {
-                final String msg = "MBeanInfo has null class name";
-                throw new NotCompliantMBeanException(msg);
-            }
-            return name;
-        } else
-            return mbeanToRegister.getClass().getName();
-    }
-
-    private final Set<ObjectName> beingUnregistered =
-        new HashSet<ObjectName>();
-
-    public void unregisterMBean(ObjectName name)
-            throws InstanceNotFoundException, MBeanRegistrationException  {
-
-        if (name == null) {
-            final RuntimeException wrapped =
-                new IllegalArgumentException("Object name cannot be null");
-            throw new RuntimeOperationsException(wrapped,
-                      "Exception occurred trying to unregister the MBean");
-        }
-
-        name = nonDefaultDomain(name);
-
-        /* The semantics of preDeregister are tricky.  If it throws an
-           exception, then the unregisterMBean fails.  This allows an
-           MBean to refuse to be unregistered.  If it returns
-           successfully, then the unregisterMBean can proceed.  In
-           this case the preDeregister may have cleaned up some state,
-           and will not expect to be called a second time.  So if two
-           threads try to unregister the same MBean at the same time
-           then one of them must wait for the other one to either (a)
-           call preDeregister and get an exception or (b) call
-           preDeregister successfully and unregister the MBean.
-           Suppose thread T1 is unregistering an MBean and thread T2
-           is trying to unregister the same MBean, so waiting for T1.
-           Then a deadlock is possible if the preDeregister for T1
-           ends up needing a lock held by T2.  Given the semantics
-           just described, there does not seem to be any way to avoid
-           this.  This will not happen to code where it is clear for
-           any given MBean what thread may unregister that MBean.
-
-           On the other hand we clearly do not want a thread that is
-           unregistering MBean A to have to wait for another thread
-           that is unregistering another MBean B (see bug 6318664).  A
-           deadlock in this situation could reasonably be considered
-           gratuitous.  So holding a global lock across the
-           preDeregister call would be bad.
-
-           So we have a set of ObjectNames that some thread is
-           currently unregistering.  When a thread wants to unregister
-           a name, it must first check if the name is in the set, and
-           if so it must wait.  When a thread successfully unregisters
-           a name it removes the name from the set and notifies any
-           waiting threads that the set has changed.
-
-           This implies that we must be very careful to ensure that
-           the name is removed from the set and waiters notified, no
-           matter what code path is taken.  */
-
-        synchronized (beingUnregistered) {
-            while (beingUnregistered.contains(name)) {
-                try {
-                    beingUnregistered.wait();
-                } catch (InterruptedException e) {
-                    throw new MBeanRegistrationException(e, e.toString());
-                    // pretend the exception came from preDeregister;
-                    // in another execution sequence it could have
-                }
-            }
-            beingUnregistered.add(name);
-        }
-
-        try {
-            exclusiveUnregisterMBean(name);
-        } finally {
-            synchronized (beingUnregistered) {
-                beingUnregistered.remove(name);
-                beingUnregistered.notifyAll();
-            }
-        }
-    }
-
-    private void exclusiveUnregisterMBean(ObjectName name)
-            throws InstanceNotFoundException, MBeanRegistrationException {
-
-        DynamicMBean instance = getMBean(name);
-        // may throw InstanceNotFoundException
-
-        checkMBeanPermission(instance, null, name, "unregisterMBean");
-
-        if (instance instanceof MBeanRegistration)
-            preDeregisterInvoke((MBeanRegistration) instance);
-
-        final Object resource = getResource(instance);
-
-        // Unregisters the MBean from the repository.
-        // Returns the resource context that was used.
-        // The returned context does nothing for regular MBeans.
-        // For ClassLoader MBeans and JMXNamespace (and JMXDomain)
-        // MBeans - the context makes it possible to unregister these
-        // objects from the appropriate framework artifacts, such as
-        // the CLR or the dispatcher, from within the repository lock.
-        // In case of success, we also need to call context.done() at the
-        // end of this method.
-        //
-        final ResourceContext context =
-                unregisterFromRepository(resource, instance, name);
-
-        try {
-            if (instance instanceof MBeanRegistration)
-                postDeregisterInvoke(name,(MBeanRegistration) instance);
-        } finally {
-            context.done();
-        }
-    }
-
-    public ObjectInstance getObjectInstance(ObjectName name)
-            throws InstanceNotFoundException {
-
-        name = nonDefaultDomain(name);
-        DynamicMBean instance = getMBean(name);
-
-        checkMBeanPermission(instance, null, name, "getObjectInstance");
-
-        final String className = getClassName(instance);
-
-        return new ObjectInstance(name, className);
-    }
-
-    public Set<ObjectInstance> queryMBeans(ObjectName name, QueryExp query) {
-        SecurityManager sm = System.getSecurityManager();
-        if (sm != null) {
-            // Check if the caller has the right to invoke 'queryMBeans'
-            //
-            checkMBeanPermission((String) null, null, null, "queryMBeans");
-
-            // Perform query without "query".
-            //
-            Set<ObjectInstance> list = queryMBeansImpl(name, null);
-
-            // Check if the caller has the right to invoke 'queryMBeans'
-            // on each specific classname/objectname in the list.
-            //
-            Set<ObjectInstance> allowedList =
-                new HashSet<ObjectInstance>(list.size());
-            for (ObjectInstance oi : list) {
-                try {
-                    checkMBeanPermission(oi.getClassName(), null,
-                                         oi.getObjectName(), "queryMBeans");
-                    allowedList.add(oi);
-                } catch (SecurityException e) {
-                    // OK: Do not add this ObjectInstance to the list
-                }
-            }
-
-            // Apply query to allowed MBeans only.
-            //
-            return filterListOfObjectInstances(allowedList, query);
-        } else {
-            // Perform query.
-            //
-            return queryMBeansImpl(name, query);
-        }
-    }
-
-    private Set<ObjectInstance> queryMBeansImpl(ObjectName name,
-                                                QueryExp query) {
-        // Query the MBeans on the repository
-        //
-        Set<NamedObject> list = repository.query(name, query);
-
-        return (objectInstancesFromFilteredNamedObjects(list, query));
-    }
-
-    public Set<ObjectName> queryNames(ObjectName name, QueryExp query) {
-        Set<ObjectName> queryList;
-        SecurityManager sm = System.getSecurityManager();
-        if (sm != null) {
-            // Check if the caller has the right to invoke 'queryNames'
-            //
-            checkMBeanPermission((String) null, null, null, "queryNames");
-
-            // Perform query without "query".
-            //
-            Set<ObjectInstance> list = queryMBeansImpl(name, null);
-
-            // Check if the caller has the right to invoke 'queryNames'
-            // on each specific classname/objectname in the list.
-            //
-            Set<ObjectInstance> allowedList =
-                new HashSet<ObjectInstance>(list.size());
-            for (ObjectInstance oi : list) {
-                try {
-                    checkMBeanPermission(oi.getClassName(), null,
-                                         oi.getObjectName(), "queryNames");
-                    allowedList.add(oi);
-                } catch (SecurityException e) {
-                    // OK: Do not add this ObjectInstance to the list
-                }
-            }
-
-            // Apply query to allowed MBeans only.
-            //
-            Set<ObjectInstance> queryObjectInstanceList =
-                filterListOfObjectInstances(allowedList, query);
-            queryList = new HashSet<ObjectName>(queryObjectInstanceList.size());
-            for (ObjectInstance oi : queryObjectInstanceList) {
-                queryList.add(oi.getObjectName());
-            }
-        } else {
-            // Perform query.
-            //
-            queryList = queryNamesImpl(name, query);
-        }
-        return queryList;
-    }
-
-    private Set<ObjectName> queryNamesImpl(ObjectName name, QueryExp query) {
-        // Query the MBeans on the repository
-        //
-        Set<NamedObject> list = repository.query(name, query);
-
-        return (objectNamesFromFilteredNamedObjects(list, query));
-    }
-
-    public boolean isRegistered(ObjectName name) {
-        if (name == null) {
-            throw new RuntimeOperationsException(
-                     new IllegalArgumentException("Object name cannot be null"),
-                     "Object name cannot be null");
-        }
-
-        name = nonDefaultDomain(name);
-
-        /* No Permission check */
-        // isRegistered is always unchecked as per JMX spec.
-
-        return (repository.contains(name));
-    }
-
-    public String[] getDomains()  {
-        SecurityManager sm = System.getSecurityManager();
-        if (sm != null) {
-            // Check if the caller has the right to invoke 'getDomains'
-            //
-            checkMBeanPermission((String) null, null, null, "getDomains");
-
-            // Return domains
-            //
-            String[] domains = repository.getDomains();
-
-            // Check if the caller has the right to invoke 'getDomains'
-            // on each specific domain in the list.
-            //
-            List<String> result = new ArrayList<String>(domains.length);
-            for (int i = 0; i < domains.length; i++) {
-                try {
-                    ObjectName dom = Util.newObjectName(domains[i] + ":x=x");
-                    checkMBeanPermission((String) null, null, dom, "getDomains");
-                    result.add(domains[i]);
-                } catch (SecurityException e) {
-                    // OK: Do not add this domain to the list
-                }
-            }
-
-            // Make an array from result.
-            //
-            return result.toArray(new String[result.size()]);
-        } else {
-            return repository.getDomains();
-        }
-    }
-
-    public Integer getMBeanCount() {
-        return (repository.getCount());
-    }
-
-    public Object getAttribute(ObjectName name, String attribute)
-        throws MBeanException, AttributeNotFoundException,
-               InstanceNotFoundException, ReflectionException {
-
-        if (name == null) {
-            throw new RuntimeOperationsException(new
-                IllegalArgumentException("Object name cannot be null"),
-                "Exception occurred trying to invoke the getter on the MBean");
-        }
-        if (attribute == null) {
-            throw new RuntimeOperationsException(new
-                IllegalArgumentException("Attribute cannot be null"),
-                "Exception occurred trying to invoke the getter on the MBean");
-        }
-
-        name = nonDefaultDomain(name);
-
-        if (MBEANSERVER_LOGGER.isLoggable(Level.FINER)) {
-            MBEANSERVER_LOGGER.logp(Level.FINER,
-                    DefaultMBeanServerInterceptor.class.getName(),
-                    "getAttribute",
-                    "Attribute = " + attribute + ", ObjectName = " + name);
-        }
-
-        final DynamicMBean instance = getMBean(name);
-        checkMBeanPermission(instance, attribute, name, "getAttribute");
-
-        try {
-            return instance.getAttribute(attribute);
-        } catch (AttributeNotFoundException e) {
-            throw e;
-        } catch (Throwable t) {
-            rethrowMaybeMBeanException(t);
-            throw new AssertionError(); // not reached
-        }
-    }
-
-    public AttributeList getAttributes(ObjectName name, String[] attributes)
-        throws InstanceNotFoundException, ReflectionException  {
-
-        if (name == null) {
-            throw new RuntimeOperationsException(new
-                IllegalArgumentException("ObjectName name cannot be null"),
-                "Exception occurred trying to invoke the getter on the MBean");
-        }
-
-        if (attributes == null) {
-            throw new RuntimeOperationsException(new
-                IllegalArgumentException("Attributes cannot be null"),
-                "Exception occurred trying to invoke the getter on the MBean");
-        }
-
-        name = nonDefaultDomain(name);
-
-        if (MBEANSERVER_LOGGER.isLoggable(Level.FINER)) {
-            MBEANSERVER_LOGGER.logp(Level.FINER,
-                    DefaultMBeanServerInterceptor.class.getName(),
-                    "getAttributes", "ObjectName = " + name);
-        }
-
-        final DynamicMBean instance = getMBean(name);
-        final String[] allowedAttributes;
-        final SecurityManager sm = System.getSecurityManager();
-        if (sm == null)
-            allowedAttributes = attributes;
-        else {
-            final String classname = getClassName(instance);
-
-            // Check if the caller has the right to invoke 'getAttribute'
-            //
-            checkMBeanPermission(classname, null, name, "getAttribute");
-
-            // Check if the caller has the right to invoke 'getAttribute'
-            // on each specific attribute
-            //
-            List<String> allowedList =
-                new ArrayList<String>(attributes.length);
-            for (String attr : attributes) {
-                try {
-                    checkMBeanPermission(classname, attr, name, "getAttribute");
-                    allowedList.add(attr);
-                } catch (SecurityException e) {
-                    // OK: Do not add this attribute to the list
-                }
-            }
-            allowedAttributes =
-                    allowedList.toArray(new String[allowedList.size()]);
-        }
-
-        try {
-            return instance.getAttributes(allowedAttributes);
-        } catch (Throwable t) {
-            rethrow(t);
-            throw new AssertionError();
-        }
-    }
-
-    public void setAttribute(ObjectName name, Attribute attribute)
-        throws InstanceNotFoundException, AttributeNotFoundException,
-               InvalidAttributeValueException, MBeanException,
-               ReflectionException  {
-
-        if (name == null) {
-            throw new RuntimeOperationsException(new
-                IllegalArgumentException("ObjectName name cannot be null"),
-                "Exception occurred trying to invoke the setter on the MBean");
-        }
-
-        if (attribute == null) {
-            throw new RuntimeOperationsException(new
-                IllegalArgumentException("Attribute cannot be null"),
-                "Exception occurred trying to invoke the setter on the MBean");
-        }
-
-        name = nonDefaultDomain(name);
-
-        if (MBEANSERVER_LOGGER.isLoggable(Level.FINER)) {
-            MBEANSERVER_LOGGER.logp(Level.FINER,
-                    DefaultMBeanServerInterceptor.class.getName(),
-                    "setAttribute", "ObjectName = " + name +
-                    ", Attribute = " + attribute.getName());
-        }
-
-        DynamicMBean instance = getMBean(name);
-        checkMBeanPermission(instance, attribute.getName(), name, "setAttribute");
-
-        try {
-            instance.setAttribute(attribute);
-        } catch (AttributeNotFoundException e) {
-            throw e;
-        } catch (InvalidAttributeValueException e) {
-            throw e;
-        } catch (Throwable t) {
-            rethrowMaybeMBeanException(t);
-            throw new AssertionError();
-        }
-    }
-
-    public AttributeList setAttributes(ObjectName name,
-                                       AttributeList attributes)
-            throws InstanceNotFoundException, ReflectionException  {
-
-        if (name == null) {
-            throw new RuntimeOperationsException(new
-                IllegalArgumentException("ObjectName name cannot be null"),
-                "Exception occurred trying to invoke the setter on the MBean");
-        }
-
-        if (attributes == null) {
-            throw new RuntimeOperationsException(new
-            IllegalArgumentException("AttributeList  cannot be null"),
-            "Exception occurred trying to invoke the setter on the MBean");
-        }
-
-        name = nonDefaultDomain(name);
-
-        final DynamicMBean instance = getMBean(name);
-        final AttributeList allowedAttributes;
-        final SecurityManager sm = System.getSecurityManager();
-        if (sm == null)
-            allowedAttributes = attributes;
-        else {
-            String classname = getClassName(instance);
-
-            // Check if the caller has the right to invoke 'setAttribute'
-            //
-            checkMBeanPermission(classname, null, name, "setAttribute");
-
-            // Check if the caller has the right to invoke 'setAttribute'
-            // on each specific attribute
-            //
-            allowedAttributes = new AttributeList(attributes.size());
-            for (Attribute attribute : attributes.asList()) {
-                try {
-                    checkMBeanPermission(classname, attribute.getName(),
-                                         name, "setAttribute");
-                    allowedAttributes.add(attribute);
-                } catch (SecurityException e) {
-                    // OK: Do not add this attribute to the list
-                }
-            }
-        }
-        try {
-            return instance.setAttributes(allowedAttributes);
-        } catch (Throwable t) {
-            rethrow(t);
-            throw new AssertionError();
-        }
-    }
-
-    public Object invoke(ObjectName name, String operationName,
-                         Object params[], String signature[])
-            throws InstanceNotFoundException, MBeanException,
-                   ReflectionException {
-
-        name = nonDefaultDomain(name);
-
-        DynamicMBean instance = getMBean(name);
-        checkMBeanPermission(instance, operationName, name, "invoke");
-        try {
-            return instance.invoke(operationName, params, signature);
-        } catch (Throwable t) {
-            rethrowMaybeMBeanException(t);
-            throw new AssertionError();
-        }
-    }
-
-    /* Centralize some of the tedious exception wrapping demanded by the JMX
-       spec. */
-    private static void rethrow(Throwable t)
-            throws ReflectionException {
-        try {
-            throw t;
-        } catch (ReflectionException e) {
-            throw e;
-        } catch (RuntimeOperationsException e) {
-            throw e;
-        } catch (RuntimeErrorException e) {
-            throw e;
-        } catch (RuntimeException e) {
-            throw new RuntimeMBeanException(e, e.toString());
-        } catch (Error e) {
-            throw new RuntimeErrorException(e, e.toString());
-        } catch (Throwable t2) {
-            // should not happen
-            throw new RuntimeException("Unexpected exception", t2);
-        }
-    }
-
-    private static void rethrowMaybeMBeanException(Throwable t)
-            throws ReflectionException, MBeanException {
-        if (t instanceof MBeanException)
-            throw (MBeanException) t;
-        rethrow(t);
-    }
-
-    /**
-     * Register <code>object</code> in the repository, with the
-     * given <code>name</code>.
-     * This method is called by the various createMBean() flavours
-     * and by registerMBean() after all MBean compliance tests
-     * have been performed.
-     * <p>
-     * This method does not performed any kind of test compliance,
-     * and the caller should make sure that the given <code>object</code>
-     * is MBean compliant.
-     * <p>
-     * This methods performed all the basic steps needed for object
-     * registration:
-     * <ul>
-     * <li>If the <code>object</code> implements the MBeanRegistration
-     *     interface, it invokes preRegister() on the object.</li>
-     * <li>Then the object is added to the repository with the given
-     *     <code>name</code>.</li>
-     * <li>Finally, if the <code>object</code> implements the
-     *     MBeanRegistration interface, it invokes postRegister()
-     *     on the object.</li>
-     * </ul>
-     * @param object A reference to a MBean compliant object.
-     * @param name   The ObjectName of the <code>object</code> MBean.
-     * @return the actual ObjectName with which the object was registered.
-     * @exception InstanceAlreadyExistsException if an object is already
-     *            registered with that name.
-     * @exception MBeanRegistrationException if an exception occurs during
-     *            registration.
-     **/
-    private ObjectInstance registerObject(String classname,
-                                          Object object, ObjectName name)
-        throws InstanceAlreadyExistsException,
-               MBeanRegistrationException,
-               NotCompliantMBeanException {
-
-        if (object == null) {
-            final RuntimeException wrapped =
-                new IllegalArgumentException("Cannot add null object");
-            throw new RuntimeOperationsException(wrapped,
-                        "Exception occurred trying to register the MBean");
-        }
-
-        DynamicMBean mbean = Introspector.makeDynamicMBean(object);
-
-        return registerDynamicMBean(classname, mbean, name);
-    }
-
-    private ObjectInstance registerDynamicMBean(String classname,
-                                                DynamicMBean mbean,
-                                                ObjectName name)
-        throws InstanceAlreadyExistsException,
-               MBeanRegistrationException,
-               NotCompliantMBeanException {
-
-
-        name = nonDefaultDomain(name);
-
-        if (MBEANSERVER_LOGGER.isLoggable(Level.FINER)) {
-            MBEANSERVER_LOGGER.logp(Level.FINER,
-                    DefaultMBeanServerInterceptor.class.getName(),
-                    "registerMBean", "ObjectName = " + name);
-        }
-
-        ObjectName logicalName = preRegister(mbean, server, name);
-
-        // preRegister returned successfully, so from this point on we
-        // must call postRegister(false) if there is any problem.
-        boolean registered = false;
-        boolean registerFailed = false;
-        ResourceContext context = null;
-
-        try {
-            if (mbean instanceof DynamicMBean2) {
-                try {
-                    ((DynamicMBean2) mbean).preRegister2(server, logicalName);
-                    registerFailed = true;  // until we succeed
-                } catch (Exception e) {
-                    if (e instanceof RuntimeException)
-                        throw (RuntimeException) e;
-                    if (e instanceof InstanceAlreadyExistsException)
-                        throw (InstanceAlreadyExistsException) e;
-                    throw new RuntimeException(e);
-                }
-            }
-
-            if (logicalName != name && logicalName != null) {
-                logicalName =
-                        ObjectName.getInstance(nonDefaultDomain(logicalName));
-            }
-
-            checkMBeanPermission(classname, null, logicalName, "registerMBean");
-
-            if (logicalName == null) {
-                final RuntimeException wrapped =
-                    new IllegalArgumentException("No object name specified");
-                throw new RuntimeOperationsException(wrapped,
-                            "Exception occurred trying to register the MBean");
-            }
-
-            final Object resource = getResource(mbean);
-
-            // Register the MBean with the repository.
-            // Returns the resource context that was used.
-            // The returned context does nothing for regular MBeans.
-            // For ClassLoader MBeans the context makes it possible to register these
-            // objects with the appropriate framework artifacts, such as
-            // the CLR, from within the repository lock.
-            // In case of success, we also need to call context.done() at the
-            // end of this method.
-            //
-            context = registerWithRepository(resource, mbean, logicalName);
-
-
-            registerFailed = false;
-            registered = true;
-
-        } finally {
-            try {
-                postRegister(logicalName, mbean, registered, registerFailed);
-            } finally {
-                if (registered && context!=null) context.done();
-            }
-        }
-        return new ObjectInstance(logicalName, classname);
-    }
-
-    private static void throwMBeanRegistrationException(Throwable t, String where)
-    throws MBeanRegistrationException {
-        if (t instanceof RuntimeException) {
-            throw new RuntimeMBeanException((RuntimeException)t,
-                    "RuntimeException thrown " + where);
-        } else if (t instanceof Error) {
-            throw new RuntimeErrorException((Error)t,
-                    "Error thrown " + where);
-        } else if (t instanceof MBeanRegistrationException) {
-            throw (MBeanRegistrationException)t;
-        } else if (t instanceof Exception) {
-            throw new MBeanRegistrationException((Exception)t,
-                    "Exception thrown " + where);
-        } else // neither Error nor Exception??
-            throw new RuntimeException(t);
-    }
-
-    private static ObjectName preRegister(
-            DynamicMBean mbean, MBeanServer mbs, ObjectName name)
-            throws InstanceAlreadyExistsException, MBeanRegistrationException {
-
-        ObjectName newName = null;
-
-        try {
-            if (mbean instanceof MBeanRegistration)
-                newName = ((MBeanRegistration) mbean).preRegister(mbs, name);
-        } catch (Throwable t) {
-            throwMBeanRegistrationException(t, "in preRegister method");
-        }
-
-        if (newName != null) return newName;
-        else return name;
-    }
-
-    private static void postRegister(
-            ObjectName logicalName, DynamicMBean mbean,
-            boolean registrationDone, boolean registerFailed) {
-
-        if (registerFailed && mbean instanceof DynamicMBean2)
-            ((DynamicMBean2) mbean).registerFailed();
-        try {
-            if (mbean instanceof MBeanRegistration)
-                ((MBeanRegistration) mbean).postRegister(registrationDone);
-        } catch (RuntimeException e) {
-            MBEANSERVER_LOGGER.fine("While registering MBean ["+logicalName+
-                    "]: " + "Exception thrown by postRegister: " +
-                    "rethrowing <"+e+">, but keeping the MBean registered");
-            throw new RuntimeMBeanException(e,
-                      "RuntimeException thrown in postRegister method: "+
-                      "rethrowing <"+e+">, but keeping the MBean registered");
-        } catch (Error er) {
-            MBEANSERVER_LOGGER.fine("While registering MBean ["+logicalName+
-                    "]: " + "Error thrown by postRegister: " +
-                    "rethrowing <"+er+">, but keeping the MBean registered");
-            throw new RuntimeErrorException(er,
-                      "Error thrown in postRegister method: "+
-                      "rethrowing <"+er+">, but keeping the MBean registered");
-        }
-    }
-
-    private static void preDeregisterInvoke(MBeanRegistration moi)
-            throws MBeanRegistrationException {
-        try {
-            moi.preDeregister();
-        } catch (Throwable t) {
-            throwMBeanRegistrationException(t, "in preDeregister method");
-        }
-    }
-
-    private static void postDeregisterInvoke(ObjectName mbean,
-            MBeanRegistration moi) {
-        try {
-            moi.postDeregister();
-        } catch (RuntimeException e) {
-            MBEANSERVER_LOGGER.fine("While unregistering MBean ["+mbean+
-                    "]: " + "Exception thrown by postDeregister: " +
-                    "rethrowing <"+e+">, although the MBean is succesfully " +
-                    "unregistered");
-            throw new RuntimeMBeanException(e,
-                      "RuntimeException thrown in postDeregister method: "+
-                      "rethrowing <"+e+
-                      ">, although the MBean is sucessfully unregistered");
-        } catch (Error er) {
-            MBEANSERVER_LOGGER.fine("While unregistering MBean ["+mbean+
-                    "]: " + "Error thrown by postDeregister: " +
-                    "rethrowing <"+er+">, although the MBean is succesfully " +
-                    "unregistered");
-            throw new RuntimeErrorException(er,
-                      "Error thrown in postDeregister method: "+
-                      "rethrowing <"+er+
-                      ">, although the MBean is sucessfully unregistered");
-        }
-    }
-
-    /**
-     * Gets a specific MBean controlled by the DefaultMBeanServerInterceptor.
-     * The name must have a non-default domain.
-     */
-    private DynamicMBean getMBean(ObjectName name)
-        throws InstanceNotFoundException {
-
-        if (name == null) {
-            throw new RuntimeOperationsException(new
-                IllegalArgumentException("Object name cannot be null"),
-                               "Exception occurred trying to get an MBean");
-        }
-        DynamicMBean obj = repository.retrieve(name);
-        if (obj == null) {
-            if (MBEANSERVER_LOGGER.isLoggable(Level.FINER)) {
-                MBEANSERVER_LOGGER.logp(Level.FINER,
-                        DefaultMBeanServerInterceptor.class.getName(),
-                        "getMBean", name + " : Found no object");
-            }
-            throw new InstanceNotFoundException(name.toString());
-        }
-        return obj;
-    }
-
-    private static Object getResource(DynamicMBean mbean) {
-        if (mbean instanceof DynamicMBean2)
-            return ((DynamicMBean2) mbean).getResource();
-        else
-            return mbean;
-    }
-
-    private ObjectName nonDefaultDomain(ObjectName name) {
-        if (name == null || name.getDomain().length() > 0)
-            return name;
-
-        /* The ObjectName looks like ":a=b", and that's what its
-           toString() will return in this implementation.  So
-           we can just stick the default domain in front of it
-           to get a non-default-domain name.  We depend on the
-           fact that toString() works like that and that it
-           leaves wildcards in place (so we can detect an error
-           if one is supplied where it shouldn't be).  */
-        final String completeName = domain + name;
-
-        return Util.newObjectName(completeName);
-    }
-
-    public String getDefaultDomain()  {
-        return domain;
-    }
-
-    /*
-     * Notification handling.
-     *
-     * This is not trivial, because the MBeanServer translates the
-     * source of a received notification from a reference to an MBean
-     * into the ObjectName of that MBean.  While that does make
-     * notification sending easier for MBean writers, it comes at a
-     * considerable cost.  We need to replace the source of a
-     * notification, which is basically wrong if there are also
-     * listeners registered directly with the MBean (without going
-     * through the MBean server).  We also need to wrap the listener
-     * supplied by the client of the MBeanServer with a listener that
-     * performs the substitution before forwarding.  This is why we
-     * strongly discourage people from putting MBean references in the
-     * source of their notifications.  Instead they should arrange to
-     * put the ObjectName there themselves.
-     *
-     * However, existing code relies on the substitution, so we are
-     * stuck with it.
-     *
-     * Here's how we handle it.  When you add a listener, we make a
-     * ListenerWrapper around it.  We look that up in the
-     * listenerWrappers map, and if there was already a wrapper for
-     * that listener with the given ObjectName, we reuse it.  This map
-     * is a WeakHashMap, so a listener that is no longer registered
-     * with any MBean can be garbage collected.
-     *
-     * We cannot use simpler solutions such as always creating a new
-     * wrapper or always registering the same listener with the MBean
-     * and using the handback to find the client's original listener.
-     * The reason is that we need to support the removeListener
-     * variant that removes all (listener,filter,handback) triples on
-     * a broadcaster that have a given listener.  And we do not have
-     * any way to inspect a broadcaster's internal list of triples.
-     * So the same client listener must always map to the same
-     * listener registered with the broadcaster.
-     *
-     * Another possible solution would be to map from ObjectName to
-     * list of listener wrappers (or IdentityHashMap of listener
-     * wrappers), making this list the first time a listener is added
-     * on a given MBean, and removing it when the MBean is removed.
-     * This is probably more costly in memory, but could be useful if
-     * some day we don't want to rely on weak references.
-     */
-    public void addNotificationListener(ObjectName name,
-                                        NotificationListener listener,
-                                        NotificationFilter filter,
-                                        Object handback)
-            throws InstanceNotFoundException {
-
-        // ------------------------------
-        // ------------------------------
-        if (MBEANSERVER_LOGGER.isLoggable(Level.FINER)) {
-            MBEANSERVER_LOGGER.logp(Level.FINER,
-                    DefaultMBeanServerInterceptor.class.getName(),
-                    "addNotificationListener", "ObjectName = " + name);
-        }
-
-        DynamicMBean instance = getMBean(name);
-        checkMBeanPermission(instance, null, name, "addNotificationListener");
-
-        NotificationBroadcaster broadcaster =
-                getNotificationBroadcaster(name, instance,
-                                           NotificationBroadcaster.class);
-
-        // ------------------
-        // Check listener
-        // ------------------
-        if (listener == null) {
-            throw new RuntimeOperationsException(new
-                IllegalArgumentException("Null listener"),"Null listener");
-        }
-
-        NotificationListener listenerWrapper =
-            getListenerWrapper(listener, name, instance, true);
-        broadcaster.addNotificationListener(listenerWrapper, filter, handback);
-    }
-
-    public void addNotificationListener(ObjectName name,
-                                        ObjectName listener,
-                                        NotificationFilter filter,
-                                        Object handback)
-            throws InstanceNotFoundException {
-
-        // ------------------------------
-        // ------------------------------
-
-        // ----------------
-        // Get listener object
-        // ----------------
-        DynamicMBean instance = getMBean(listener);
-        Object resource = getResource(instance);
-        if (!(resource instanceof NotificationListener)) {
-            throw new RuntimeOperationsException(new
-                IllegalArgumentException(listener.getCanonicalName()),
-                "The MBean " + listener.getCanonicalName() +
-                "does not implement the NotificationListener interface") ;
-        }
-
-        // ----------------
-        // Add a listener on an MBean
-        // ----------------
-        if (MBEANSERVER_LOGGER.isLoggable(Level.FINER)) {
-            MBEANSERVER_LOGGER.logp(Level.FINER,
-                    DefaultMBeanServerInterceptor.class.getName(),
-                    "addNotificationListener",
-                    "ObjectName = " + name + ", Listener = " + listener);
-        }
-        server.addNotificationListener(name,(NotificationListener) resource,
-                                       filter, handback) ;
-    }
-
-    public void removeNotificationListener(ObjectName name,
-                                           NotificationListener listener)
-            throws InstanceNotFoundException, ListenerNotFoundException {
-        removeNotificationListener(name, listener, null, null, true);
-    }
-
-    public void removeNotificationListener(ObjectName name,
-                                           NotificationListener listener,
-                                           NotificationFilter filter,
-                                           Object handback)
-            throws InstanceNotFoundException, ListenerNotFoundException {
-        removeNotificationListener(name, listener, filter, handback, false);
-    }
-
-    public void removeNotificationListener(ObjectName name,
-                                           ObjectName listener)
-            throws InstanceNotFoundException, ListenerNotFoundException {
-        NotificationListener instance = getListener(listener);
-
-        if (MBEANSERVER_LOGGER.isLoggable(Level.FINER)) {
-            MBEANSERVER_LOGGER.logp(Level.FINER,
-                    DefaultMBeanServerInterceptor.class.getName(),
-                    "removeNotificationListener",
-                    "ObjectName = " + name + ", Listener = " + listener);
-        }
-        server.removeNotificationListener(name, instance);
-    }
-
-    public void removeNotificationListener(ObjectName name,
-                                           ObjectName listener,
-                                           NotificationFilter filter,
-                                           Object handback)
-            throws InstanceNotFoundException, ListenerNotFoundException {
-
-        NotificationListener instance = getListener(listener);
-
-        if (MBEANSERVER_LOGGER.isLoggable(Level.FINER)) {
-            MBEANSERVER_LOGGER.logp(Level.FINER,
-                    DefaultMBeanServerInterceptor.class.getName(),
-                    "removeNotificationListener",
-                    "ObjectName = " + name + ", Listener = " + listener);
-        }
-        server.removeNotificationListener(name, instance, filter, handback);
-    }
-
-    private NotificationListener getListener(ObjectName listener)
-        throws ListenerNotFoundException {
-        // ----------------
-        // Get listener object
-        // ----------------
-        DynamicMBean instance;
-        try {
-            instance = getMBean(listener);
-        } catch (InstanceNotFoundException e) {
-            throw EnvHelp.initCause(
-                          new ListenerNotFoundException(e.getMessage()), e);
-        }
-
-        Object resource = getResource(instance);
-        if (!(resource instanceof NotificationListener)) {
-            final RuntimeException exc =
-                new IllegalArgumentException(listener.getCanonicalName());
-            final String msg =
-                "MBean " + listener.getCanonicalName() + " does not " +
-                "implement " + NotificationListener.class.getName();
-            throw new RuntimeOperationsException(exc, msg);
-        }
-        return (NotificationListener) resource;
-    }
-
-    private void removeNotificationListener(ObjectName name,
-                                            NotificationListener listener,
-                                            NotificationFilter filter,
-                                            Object handback,
-                                            boolean removeAll)
-            throws InstanceNotFoundException, ListenerNotFoundException {
-
-        if (MBEANSERVER_LOGGER.isLoggable(Level.FINER)) {
-            MBEANSERVER_LOGGER.logp(Level.FINER,
-                    DefaultMBeanServerInterceptor.class.getName(),
-                    "removeNotificationListener", "ObjectName = " + name);
-        }
-
-        DynamicMBean instance = getMBean(name);
-        checkMBeanPermission(instance, null, name, "removeNotificationListener");
-
-        /* We could simplify the code by assigning broadcaster after
-           assigning listenerWrapper, but that would change the error
-           behavior when both the broadcaster and the listener are
-           erroneous.  */
-
-        Class<? extends NotificationBroadcaster> reqClass =
-            removeAll ? NotificationBroadcaster.class : NotificationEmitter.class;
-        NotificationBroadcaster broadcaster =
-            getNotificationBroadcaster(name, instance, reqClass);
-
-        NotificationListener listenerWrapper =
-            getListenerWrapper(listener, name, instance, false);
-
-        if (listenerWrapper == null)
-            throw new ListenerNotFoundException("Unknown listener");
-
-        if (removeAll)
-            broadcaster.removeNotificationListener(listenerWrapper);
-        else {
-            NotificationEmitter emitter = (NotificationEmitter) broadcaster;
-            emitter.removeNotificationListener(listenerWrapper,
-                                               filter,
-                                               handback);
-        }
-    }
-
-    private static <T extends NotificationBroadcaster>
-            T getNotificationBroadcaster(ObjectName name, Object instance,
-                                         Class<T> reqClass) {
-        if (reqClass.isInstance(instance))
-            return reqClass.cast(instance);
-        if (instance instanceof DynamicMBean2)
-            instance = ((DynamicMBean2) instance).getResource();
-        if (reqClass.isInstance(instance))
-            return reqClass.cast(instance);
-        final RuntimeException exc =
-            new IllegalArgumentException(name.getCanonicalName());
-        final String msg =
-            "MBean " + name.getCanonicalName() + " does not " +
-            "implement " + reqClass.getName();
-        throw new RuntimeOperationsException(exc, msg);
-    }
-
-    public MBeanInfo getMBeanInfo(ObjectName name)
-        throws InstanceNotFoundException, IntrospectionException,
-               ReflectionException {
-
-        // ------------------------------
-        // ------------------------------
-
-        DynamicMBean moi = getMBean(name);
-        final MBeanInfo mbi;
-        try {
-            mbi = moi.getMBeanInfo();
-        } catch (RuntimeMBeanException e) {
-            throw e;
-        } catch (RuntimeErrorException e) {
-            throw e;
-        } catch (RuntimeException e) {
-            throw new RuntimeMBeanException(e,
-                    "getMBeanInfo threw RuntimeException");
-        } catch (Error e) {
-            throw new RuntimeErrorException(e, "getMBeanInfo threw Error");
-        }
-        if (mbi == null)
-            throw new JMRuntimeException("MBean " + name +
-                                         "has no MBeanInfo");
-
-        checkMBeanPermission(mbi.getClassName(), null, name, "getMBeanInfo");
-
-        return mbi;
-    }
-
-    public boolean isInstanceOf(ObjectName name, String className)
-        throws InstanceNotFoundException {
-
-        final DynamicMBean instance = getMBean(name);
-        checkMBeanPermission(instance, null, name, "isInstanceOf");
-
-        try {
-            Object resource = getResource(instance);
-
-            final String resourceClassName =
-                    (resource instanceof DynamicMBean) ?
-                        getClassName((DynamicMBean) resource) :
-                        resource.getClass().getName();
-
-            if (resourceClassName.equals(className))
-                return true;
-            final ClassLoader cl = resource.getClass().getClassLoader();
-
-            final Class<?> classNameClass = Class.forName(className, false, cl);
-            if (classNameClass.isInstance(resource))
-                return true;
-
-            final Class<?> resourceClass = Class.forName(resourceClassName, false, cl);
-            return classNameClass.isAssignableFrom(resourceClass);
-        } catch (Exception x) {
-            /* Could be SecurityException or ClassNotFoundException */
-            if (MBEANSERVER_LOGGER.isLoggable(Level.FINEST)) {
-                MBEANSERVER_LOGGER.logp(Level.FINEST,
-                        DefaultMBeanServerInterceptor.class.getName(),
-                        "isInstanceOf", "Exception calling isInstanceOf", x);
-            }
-            return false;
-        }
-
-    }
-
-    /**
-     * <p>Return the {@link java.lang.ClassLoader} that was used for
-     * loading the class of the named MBean.
-     * @param mbeanName The ObjectName of the MBean.
-     * @return The ClassLoader used for that MBean.
-     * @exception InstanceNotFoundException if the named MBean is not found.
-     */
-    public ClassLoader getClassLoaderFor(ObjectName mbeanName)
-        throws InstanceNotFoundException {
-
-        DynamicMBean instance = getMBean(mbeanName);
-        checkMBeanPermission(instance, null, mbeanName, "getClassLoaderFor");
-        return getResource(instance).getClass().getClassLoader();
-    }
-
-    /**
-     * <p>Return the named {@link java.lang.ClassLoader}.
-     * @param loaderName The ObjectName of the ClassLoader.
-     * @return The named ClassLoader.
-     * @exception InstanceNotFoundException if the named ClassLoader
-     * is not found.
-     */
-    public ClassLoader getClassLoader(ObjectName loaderName)
-            throws InstanceNotFoundException {
-
-        if (loaderName == null) {
-            checkMBeanPermission((String) null, null, null, "getClassLoader");
-            return server.getClass().getClassLoader();
-        }
-
-        DynamicMBean instance = getMBean(loaderName);
-        checkMBeanPermission(instance, null, loaderName, "getClassLoader");
-
-        Object resource = getResource(instance);
-
-        /* Check if the given MBean is a ClassLoader */
-        if (!(resource instanceof ClassLoader))
-            throw new InstanceNotFoundException(loaderName.toString() +
-                                                " is not a classloader");
-
-        return (ClassLoader) resource;
-    }
-
-    /**
-     * Sends an MBeanServerNotifications with the specified type for the
-     * MBean with the specified ObjectName
-     */
-    private void sendNotification(String NotifType, ObjectName name) {
-
-        // ------------------------------
-        // ------------------------------
-
-        // ---------------------
-        // Create notification
-        // ---------------------
-        MBeanServerNotification notif = new MBeanServerNotification(
-            NotifType,MBeanServerDelegate.DELEGATE_NAME,0,name);
-
-        if (MBEANSERVER_LOGGER.isLoggable(Level.FINER)) {
-            MBEANSERVER_LOGGER.logp(Level.FINER,
-                    DefaultMBeanServerInterceptor.class.getName(),
-                    "sendNotification", NotifType + " " + name);
-        }
-
-        delegate.sendNotification(notif);
-    }
-
-    /**
-     * Applies the specified queries to the set of NamedObjects.
-     */
-    private Set<ObjectName>
-        objectNamesFromFilteredNamedObjects(Set<NamedObject> list,
-                                            QueryExp query) {
-        Set<ObjectName> result = new HashSet<ObjectName>();
-        // No query ...
-        if (query == null) {
-            for (NamedObject no : list) {
-                result.add(no.getName());
-            }
-        } else {
-            // Access the filter
-            final MBeanServer oldServer = QueryEval.getMBeanServer();
-            query.setMBeanServer(server);
-            try {
-                for (NamedObject no : list) {
-                    boolean res;
-                    try {
-                        res = query.apply(no.getName());
-                    } catch (Exception e) {
-                        res = false;
-                    }
-                    if (res) {
-                        result.add(no.getName());
-                    }
-                }
-            } finally {
-                /*
-                 * query.setMBeanServer is probably
-                 * QueryEval.setMBeanServer so put back the old
-                 * value.  Since that method uses a ThreadLocal
-                 * variable, this code is only needed for the
-                 * unusual case where the user creates a custom
-                 * QueryExp that calls a nested query on another
-                 * MBeanServer.
-                 */
-                query.setMBeanServer(oldServer);
-            }
-        }
-        return result;
-    }
-
-    /**
-     * Applies the specified queries to the set of NamedObjects.
-     */
-    private Set<ObjectInstance>
-        objectInstancesFromFilteredNamedObjects(Set<NamedObject> list,
-                                                QueryExp query) {
-        Set<ObjectInstance> result = new HashSet<ObjectInstance>();
-        // No query ...
-        if (query == null) {
-            for (NamedObject no : list) {
-                final DynamicMBean obj = no.getObject();
-                final String className = safeGetClassName(obj);
-                result.add(new ObjectInstance(no.getName(), className));
-            }
-        } else {
-            // Access the filter
-            MBeanServer oldServer = QueryEval.getMBeanServer();
-            query.setMBeanServer(server);
-            try {
-                for (NamedObject no : list) {
-                    final DynamicMBean obj = no.getObject();
-                    boolean res;
-                    try {
-                        res = query.apply(no.getName());
-                    } catch (Exception e) {
-                        res = false;
-                    }
-                    if (res) {
-                        String className = safeGetClassName(obj);
-                        result.add(new ObjectInstance(no.getName(), className));
-                    }
-                }
-            } finally {
-                /*
-                 * query.setMBeanServer is probably
-                 * QueryEval.setMBeanServer so put back the old
-                 * value.  Since that method uses a ThreadLocal
-                 * variable, this code is only needed for the
-                 * unusual case where the user creates a custom
-                 * QueryExp that calls a nested query on another
-                 * MBeanServer.
-                 */
-                query.setMBeanServer(oldServer);
-            }
-        }
-        return result;
-    }
-
-    private static String safeGetClassName(DynamicMBean mbean) {
-        try {
-            return getClassName(mbean);
-        } catch (Exception e) {
-            if (MBEANSERVER_LOGGER.isLoggable(Level.FINEST)) {
-                MBEANSERVER_LOGGER.logp(Level.FINEST,
-                        DefaultMBeanServerInterceptor.class.getName(),
-                        "safeGetClassName",
-                        "Exception getting MBean class name", e);
-            }
-            return null;
-        }
-    }
-
-    /**
-     * Applies the specified queries to the set of ObjectInstances.
-     */
-    private Set<ObjectInstance>
-            filterListOfObjectInstances(Set<ObjectInstance> list,
-                                        QueryExp query) {
-        // Null query.
-        //
-        if (query == null) {
-            return list;
-        } else {
-            Set<ObjectInstance> result = new HashSet<ObjectInstance>();
-            // Access the filter.
-            //
-            for (ObjectInstance oi : list) {
-                boolean res = false;
-                MBeanServer oldServer = QueryEval.getMBeanServer();
-                query.setMBeanServer(server);
-                try {
-                    res = query.apply(oi.getObjectName());
-                } catch (Exception e) {
-                    res = false;
-                } finally {
-                    /*
-                     * query.setMBeanServer is probably
-                     * QueryEval.setMBeanServer so put back the old
-                     * value.  Since that method uses a ThreadLocal
-                     * variable, this code is only needed for the
-                     * unusual case where the user creates a custom
-                     * QueryExp that calls a nested query on another
-                     * MBeanServer.
-                     */
-                    query.setMBeanServer(oldServer);
-                }
-                if (res) {
-                    result.add(oi);
-                }
-            }
-            return result;
-        }
-    }
-
-    /*
-     * Get the existing wrapper for this listener, name, and mbean, if
-     * there is one.  Otherwise, if "create" is true, create and
-     * return one.  Otherwise, return null.
-     *
-     * We use a WeakHashMap so that if the only reference to a user
-     * listener is in listenerWrappers, it can be garbage collected.
-     * This requires a certain amount of care, because only the key in
-     * a WeakHashMap is weak; the value is strong.  We need to recover
-     * the existing wrapper object (not just an object that is equal
-     * to it), so we would like listenerWrappers to map any
-     * ListenerWrapper to the canonical ListenerWrapper for that
-     * (listener,name,mbean) set.  But we do not want this canonical
-     * wrapper to be referenced strongly.  Therefore we put it inside
-     * a WeakReference and that is the value in the WeakHashMap.
-     */
-    private NotificationListener getListenerWrapper(NotificationListener l,
-                                                    ObjectName name,
-                                                    DynamicMBean mbean,
-                                                    boolean create) {
-        Object resource = getResource(mbean);
-        ListenerWrapper wrapper = new ListenerWrapper(l, name, resource);
-        synchronized (listenerWrappers) {
-            WeakReference<ListenerWrapper> ref = listenerWrappers.get(wrapper);
-            if (ref != null) {
-                NotificationListener existing = ref.get();
-                if (existing != null)
-                    return existing;
-            }
-            if (create) {
-                ref = new WeakReference<ListenerWrapper>(wrapper);
-                listenerWrappers.put(wrapper, ref);
-                return wrapper;
-            } else
-                return null;
-        }
-    }
-
-    public Object instantiate(String className) throws ReflectionException,
-                                                       MBeanException {
-        throw new UnsupportedOperationException("Not supported yet.");
-    }
-
-    public Object instantiate(String className, ObjectName loaderName) throws ReflectionException,
-                                                                              MBeanException,
-                                                                              InstanceNotFoundException {
-        throw new UnsupportedOperationException("Not supported yet.");
-    }
-
-    public Object instantiate(String className, Object[] params,
-            String[] signature) throws ReflectionException, MBeanException {
-        throw new UnsupportedOperationException("Not supported yet.");
-    }
-
-    public Object instantiate(String className, ObjectName loaderName,
-            Object[] params, String[] signature) throws ReflectionException,
-                                                        MBeanException,
-                                                        InstanceNotFoundException {
-        throw new UnsupportedOperationException("Not supported yet.");
-    }
-
-    public ObjectInputStream deserialize(ObjectName name, byte[] data) throws InstanceNotFoundException,
-                                                                              OperationsException {
-        throw new UnsupportedOperationException("Not supported yet.");
-    }
-
-    public ObjectInputStream deserialize(String className, byte[] data) throws OperationsException,
-                                                                               ReflectionException {
-        throw new UnsupportedOperationException("Not supported yet.");
-    }
-
-    public ObjectInputStream deserialize(String className, ObjectName loaderName,
-            byte[] data) throws InstanceNotFoundException, OperationsException,
-                                ReflectionException {
-        throw new UnsupportedOperationException("Not supported yet.");
-    }
-
-    public ClassLoaderRepository getClassLoaderRepository() {
-        throw new UnsupportedOperationException("Not supported yet.");
-    }
-
-    private static class ListenerWrapper implements NotificationListener {
-        ListenerWrapper(NotificationListener l, ObjectName name,
-                        Object mbean) {
-            this.listener = l;
-            this.name = name;
-            this.mbean = mbean;
-        }
-
-        public void handleNotification(Notification notification,
-                                       Object handback) {
-            if (notification != null) {
-                if (notification.getSource() == mbean)
-                    notification.setSource(name);
-            }
-
-            /*
-             * Listeners are not supposed to throw exceptions.  If
-             * this one does, we could remove it from the MBean.  It
-             * might indicate that a connector has stopped working,
-             * for instance, and there is no point in sending future
-             * notifications over that connection.  However, this
-             * seems rather drastic, so instead we propagate the
-             * exception and let the broadcaster handle it.
-             */
-            listener.handleNotification(notification, handback);
-        }
-
-        @Override
-        public boolean equals(Object o) {
-            if (!(o instanceof ListenerWrapper))
-                return false;
-            ListenerWrapper w = (ListenerWrapper) o;
-            return (w.listener == listener && w.mbean == mbean
-                    && w.name.equals(name));
-            /*
-             * We compare all three, in case the same MBean object
-             * gets unregistered and then reregistered under a
-             * different name, or the same name gets assigned to two
-             * different MBean objects at different times.  We do the
-             * comparisons in this order to avoid the slow
-             * ObjectName.equals when possible.
-             */
-        }
-
-        @Override
-        public int hashCode() {
-            return (System.identityHashCode(listener) ^
-                    System.identityHashCode(mbean));
-            /*
-             * We do not include name.hashCode() in the hash because
-             * computing it is slow and usually we will not have two
-             * instances of ListenerWrapper with the same mbean but
-             * different ObjectNames.  That can happen if the MBean is
-             * unregistered from one name and reregistered with
-             * another, and there is no garbage collection between; or
-             * if the same object is registered under two names (which
-             * is not recommended because MBeanRegistration will
-             * break).  But even in these unusual cases the hash code
-             * does not have to be unique.
-             */
-        }
-
-        private NotificationListener listener;
-        private ObjectName name;
-        private Object mbean;
-    }
-
-    // SECURITY CHECKS
-    //----------------
-
-    private static String getClassName(DynamicMBean mbean) {
-        if (mbean instanceof DynamicMBean2)
-            return ((DynamicMBean2) mbean).getClassName();
-        else
-            return mbean.getMBeanInfo().getClassName();
-    }
-
-    private static void checkMBeanPermission(DynamicMBean mbean,
-                                             String member,
-                                             ObjectName objectName,
-                                             String actions) {
-        SecurityManager sm = System.getSecurityManager();
-        if (sm != null) {
-            checkMBeanPermission(safeGetClassName(mbean),
-                                 member,
-                                 objectName,
-                                 actions);
-        }
-    }
-
-    private static void checkMBeanPermission(String classname,
-                                             String member,
-                                             ObjectName objectName,
-                                             String actions) {
-        SecurityManager sm = System.getSecurityManager();
-        if (sm != null) {
-            Permission perm = new MBeanPermission(classname,
-                                                  member,
-                                                  objectName,
-                                                  actions);
-            sm.checkPermission(perm);
-        }
-    }
-
-    private static void checkMBeanTrustPermission(final Class<?> theClass)
-        throws SecurityException {
-        SecurityManager sm = System.getSecurityManager();
-        if (sm != null) {
-            Permission perm = new MBeanTrustPermission("register");
-            PrivilegedAction<ProtectionDomain> act =
-                new PrivilegedAction<ProtectionDomain>() {
-                    public ProtectionDomain run() {
-                        return theClass.getProtectionDomain();
-                    }
-                };
-            ProtectionDomain pd = AccessController.doPrivileged(act);
-            AccessControlContext acc =
-                new AccessControlContext(new ProtectionDomain[] { pd });
-            sm.checkPermission(perm, acc);
-        }
-    }
-
-    // ------------------------------------------------------------------
-    //
-    // Dealing with registration of special MBeans in the repository.
-    //
-    // ------------------------------------------------------------------
-
-    /**
-     * A RegistrationContext that makes it possible to perform additional
-     * post registration actions (or post unregistration actions) outside
-     * of the repository lock, once postRegister (or postDeregister) has
-     * been called.
-     * The method {@code done()} will be called in registerMBean or
-     * unregisterMBean, at the end.
-     */
-    private static interface ResourceContext extends RegistrationContext {
-        public void done();
-        /** An empty ResourceContext which does nothing **/
-        public static final ResourceContext NONE = new ResourceContext() {
-            public void done() {}
-            public void registering() {}
-            public void unregistered() {}
-        };
-    }
-
-    /**
-     * Adds a MBean in the repository,
-     * sends MBeanServerNotification.REGISTRATION_NOTIFICATION,
-     * returns ResourceContext for special resources such as ClassLoaders
-     * or JMXNamespaces. For regular MBean this method returns
-     * ResourceContext.NONE.
-     * @return a ResourceContext for special resources such as ClassLoaders
-     *         or JMXNamespaces.
-     */
-    private ResourceContext registerWithRepository(
-            final Object resource,
-            final DynamicMBean object,
-            final ObjectName logicalName)
-            throws InstanceAlreadyExistsException,
-            MBeanRegistrationException {
-
-        // Creates a registration context, if needed.
-        //
-        final ResourceContext context =
-                makeResourceContextFor(resource, logicalName);
-
-
-        repository.addMBean(object, logicalName, context);
-        // May throw InstanceAlreadyExistsException
-
-        // ---------------------
-        // Send create event
-        // ---------------------
-        if (MBEANSERVER_LOGGER.isLoggable(Level.FINER)) {
-            MBEANSERVER_LOGGER.logp(Level.FINER,
-                    DefaultMBeanServerInterceptor.class.getName(),
-                    "addObject", "Send create notification of object " +
-                    logicalName.getCanonicalName());
-        }
-
-        sendNotification(
-                MBeanServerNotification.REGISTRATION_NOTIFICATION,
-                logicalName);
-
-        return context;
-    }
-
-    /**
-     * Removes a MBean in the repository,
-     * sends MBeanServerNotification.UNREGISTRATION_NOTIFICATION,
-     * returns ResourceContext for special resources such as ClassLoaders
-     * or JMXNamespaces, or null. For regular MBean this method returns
-     * ResourceContext.NONE.
-     *
-     * @return a ResourceContext for special resources such as ClassLoaders
-     *         or JMXNamespaces.
-     */
-    private ResourceContext unregisterFromRepository(
-            final Object resource,
-            final DynamicMBean object,
-            final ObjectName logicalName)
-            throws InstanceNotFoundException {
-
-        // Creates a registration context, if needed.
-        //
-        final ResourceContext context =
-                makeResourceContextFor(resource, logicalName);
-
-
-        repository.remove(logicalName, context);
-
-        // ---------------------
-        // Send deletion event
-        // ---------------------
-        if (MBEANSERVER_LOGGER.isLoggable(Level.FINER)) {
-            MBEANSERVER_LOGGER.logp(Level.FINER,
-                    DefaultMBeanServerInterceptor.class.getName(),
-                    "unregisterMBean", "Send delete notification of object " +
-                    logicalName.getCanonicalName());
-        }
-
-        sendNotification(MBeanServerNotification.UNREGISTRATION_NOTIFICATION,
-                logicalName);
-        return context;
-    }
-
-
-    /**
-     * Registers a ClassLoader with the CLR.
-     * This method is called by the ResourceContext from within the
-     * repository lock.
-     * @param loader       The ClassLoader.
-     * @param logicalName  The ClassLoader MBean ObjectName.
-     */
-    private void addClassLoader(ClassLoader loader,
-            final ObjectName logicalName) {
-        /**
-         * Called when the newly registered MBean is a ClassLoader
-         * If so, tell the ClassLoaderRepository (CLR) about it.  We do
-         * this even if the loader is a PrivateClassLoader.  In that
-         * case, the CLR remembers the loader for use when it is
-         * explicitly named (e.g. as the loader in createMBean) but
-         * does not add it to the list that is consulted by
-         * ClassLoaderRepository.loadClass.
-         */
-        final ModifiableClassLoaderRepository clr = getInstantiatorCLR();
-        if (clr == null) {
-            final RuntimeException wrapped =
-                    new IllegalArgumentException(
-                    "Dynamic addition of class loaders" +
-                    " is not supported");
-            throw new RuntimeOperationsException(wrapped,
-                    "Exception occurred trying to register" +
-                    " the MBean as a class loader");
-        }
-        clr.addClassLoader(logicalName, loader);
-    }
-
-    /**
-     * Unregisters a ClassLoader from the CLR.
-     * This method is called by the ResourceContext from within the
-     * repository lock.
-     * @param loader       The ClassLoader.
-     * @param logicalName  The ClassLoader MBean ObjectName.
-     */
-    private void removeClassLoader(ClassLoader loader,
-            final ObjectName logicalName) {
-        /**
-         * Removes the  MBean from the default loader repository.
-         */
-        if (loader != server.getClass().getClassLoader()) {
-            final ModifiableClassLoaderRepository clr = getInstantiatorCLR();
-            if (clr != null) {
-                clr.removeClassLoader(logicalName);
-            }
-        }
-    }
-
-
-    /**
-     * Creates a ResourceContext for a ClassLoader MBean.
-     * The resource context makes it possible to add the ClassLoader to
-     * (ResourceContext.registering) or resp. remove the ClassLoader from
-     * (ResourceContext.unregistered) the CLR
-     * when the associated MBean is added to or resp. removed from the
-     * repository.
-     *
-     * @param loader       The ClassLoader MBean being registered or
-     *                     unregistered.
-     * @param logicalName  The name of the ClassLoader MBean.
-     * @return a ResourceContext that takes in charge the addition or removal
-     *         of the loader to or from the CLR.
-     */
-    private ResourceContext createClassLoaderContext(
-            final ClassLoader loader,
-            final ObjectName logicalName) {
-        return new ResourceContext() {
-
-            public void registering() {
-                addClassLoader(loader, logicalName);
-            }
-
-            public void unregistered() {
-                removeClassLoader(loader, logicalName);
-            }
-
-            public void done() {
-            }
-        };
-    }
-
-    /**
-     * Creates a ResourceContext for the given resource.
-     * If the resource does not need a ResourceContext, returns
-     * ResourceContext.NONE.
-     * At this time, only ClassLoaders need a ResourceContext.
-     *
-     * @param resource     The resource being registered or unregistered.
-     * @param logicalName  The name of the associated MBean.
-     * @return
-     */
-    private ResourceContext makeResourceContextFor(Object resource,
-            ObjectName logicalName) {
-        if (resource instanceof ClassLoader) {
-            return createClassLoaderContext((ClassLoader) resource,
-                    logicalName);
-        }
-        return ResourceContext.NONE;
-    }
-
-    private ModifiableClassLoaderRepository getInstantiatorCLR() {
-        return AccessController.doPrivileged(new PrivilegedAction<ModifiableClassLoaderRepository>() {
-            @Override
-            public ModifiableClassLoaderRepository run() {
-                return instantiator != null ? instantiator.getClassLoaderRepository() : null;
-            }
-        });
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/interceptor/MBeanServerInterceptor.java b/ojluni/src/main/java/com/sun/jmx/interceptor/MBeanServerInterceptor.java
deleted file mode 100755
index 8f0f9b6..0000000
--- a/ojluni/src/main/java/com/sun/jmx/interceptor/MBeanServerInterceptor.java
+++ /dev/null
@@ -1,130 +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.
- */
-
-package com.sun.jmx.interceptor;
-
-
-import java.io.ObjectInputStream;
-import javax.management.InstanceNotFoundException;
-import javax.management.MBeanException;
-import javax.management.MBeanServer;
-import javax.management.ObjectName;
-import javax.management.OperationsException;
-import javax.management.ReflectionException;
-import javax.management.loading.ClassLoaderRepository;
-
-/**
- * <p>This interface specifies the behavior to be implemented by an
- * MBean Server Interceptor.  An MBean Server Interceptor has
- * essentially the same interface as an MBean Server.  An MBean Server
- * forwards received requests to its default interceptor, which may
- * handle them itself or forward them to other interceptors.  The
- * default interceptor may be changed via the {@link
- * com.sun.jmx.mbeanserver.SunJmxMBeanServer#setMBeanServerInterceptor}
- * method.</p>
- *
- * <p>The initial default interceptor provides the standard MBean
- * Server behavior.  It handles a collection of named MBeans, each
- * represented by a Java object.  A replacement default interceptor
- * may build on this behavior, for instance by adding logging or
- * security checks, before forwarding requests to the initial default
- * interceptor.  Or, it may route each request to one of a number of
- * sub-interceptors, for instance based on the {@link ObjectName} in
- * the request.</p>
- *
- * <p>An interceptor, default or not, need not implement MBeans as
- * Java objects, in the way that the initial default interceptor does.
- * It may instead implement <em>virtual MBeans</em>, which do not
- * exist as Java objects when they are not in use.  For example, these
- * MBeans could be implemented by forwarding requests to a database,
- * or to a remote MBean server, or by performing system calls to query
- * or modify system resources.</p>
- *
- * @since 1.5
- */
-public interface MBeanServerInterceptor extends MBeanServer {
-    /**
-     * This method should never be called.
-     * Usually hrows UnsupportedOperationException.
-     */
-    public Object instantiate(String className)
-            throws ReflectionException, MBeanException;
-    /**
-     * This method should never be called.
-     * Usually throws UnsupportedOperationException.
-     */
-    public Object instantiate(String className, ObjectName loaderName)
-            throws ReflectionException, MBeanException,
-            InstanceNotFoundException;
-    /**
-     * This method should never be called.
-     * Usually throws UnsupportedOperationException.
-     */
-    public Object instantiate(String className, Object[] params,
-            String[] signature) throws ReflectionException, MBeanException;
-
-    /**
-     * This method should never be called.
-     * Usually throws UnsupportedOperationException.
-     */
-    public Object instantiate(String className, ObjectName loaderName,
-            Object[] params, String[] signature)
-            throws ReflectionException, MBeanException,
-            InstanceNotFoundException;
-
-    /**
-     * This method should never be called.
-     * Usually throws UnsupportedOperationException.
-     */
-    @Deprecated
-    public ObjectInputStream deserialize(ObjectName name, byte[] data)
-            throws InstanceNotFoundException, OperationsException;
-
-    /**
-     * This method should never be called.
-     * Usually throws UnsupportedOperationException.
-     */
-    @Deprecated
-    public ObjectInputStream deserialize(String className, byte[] data)
-            throws OperationsException, ReflectionException;
-
-    /**
-     * This method should never be called.
-     * Usually hrows UnsupportedOperationException.
-     */
-    @Deprecated
-    public ObjectInputStream deserialize(String className,
-            ObjectName loaderName, byte[] data)
-            throws InstanceNotFoundException, OperationsException,
-            ReflectionException;
-
-    /**
-     * This method should never be called.
-     * Usually throws UnsupportedOperationException.
-     */
-    public ClassLoaderRepository getClassLoaderRepository();
-
-}
-
diff --git a/ojluni/src/main/java/com/sun/jmx/interceptor/package.html b/ojluni/src/main/java/com/sun/jmx/interceptor/package.html
deleted file mode 100755
index f689082..0000000
--- a/ojluni/src/main/java/com/sun/jmx/interceptor/package.html
+++ /dev/null
@@ -1,36 +0,0 @@
-<html>
-<head>
-<title>jmx.interceptor package</title>
-<!--
- 
-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.
--->
-</head>
-<body bgcolor="white">
-    Provides specific classes to <B>Sun JMX Reference Implementation</B>.
- <p><b>
- This API is a Sun internal API and is subject to changes without notice.
- </b></p>
-</BODY>
-</HTML>
diff --git a/ojluni/src/main/java/com/sun/jmx/mbeanserver/ClassLoaderRepositorySupport.java b/ojluni/src/main/java/com/sun/jmx/mbeanserver/ClassLoaderRepositorySupport.java
deleted file mode 100755
index 3226e2e..0000000
--- a/ojluni/src/main/java/com/sun/jmx/mbeanserver/ClassLoaderRepositorySupport.java
+++ /dev/null
@@ -1,320 +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.
- */
-
-package com.sun.jmx.mbeanserver;
-
-
-import static com.sun.jmx.defaults.JmxProperties.MBEANSERVER_LOGGER;
-import java.security.Permission;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Hashtable;
-import java.util.List;
-import java.util.Map;
-import java.util.logging.Level;
-import javax.management.MBeanPermission;
-
-import javax.management.ObjectName;
-import javax.management.loading.PrivateClassLoader;
-import sun.reflect.misc.ReflectUtil;
-
-/**
- * This class keeps the list of Class Loaders registered in the MBean Server.
- * It provides the necessary methods to load classes using the
- * registered Class Loaders.
- *
- * @since 1.5
- */
-final class ClassLoaderRepositorySupport
-    implements ModifiableClassLoaderRepository {
-
-    /* We associate an optional ObjectName with each entry so that
-       we can remove the correct entry when unregistering an MBean
-       that is a ClassLoader.  The same object could be registered
-       under two different names (even though this is not recommended)
-       so if we did not do this we could disturb the defined
-       semantics for the order of ClassLoaders in the repository.  */
-    private static class LoaderEntry {
-        ObjectName name; // can be null
-        ClassLoader loader;
-
-        LoaderEntry(ObjectName name,  ClassLoader loader) {
-            this.name = name;
-            this.loader = loader;
-        }
-    }
-
-    private static final LoaderEntry[] EMPTY_LOADER_ARRAY = new LoaderEntry[0];
-
-    /**
-     * List of class loaders
-     * Only read-only actions should be performed on this object.
-     *
-     * We do O(n) operations on this array, e.g. when removing
-     * a ClassLoader.  The assumption is that the number of elements
-     * is small, probably less than ten, and that the vast majority
-     * of operations are searches (loadClass) which are by definition
-     * linear.
-     */
-    private LoaderEntry[] loaders = EMPTY_LOADER_ARRAY;
-
-    /**
-     * Same behavior as add(Object o) in {@link java.util.List}.
-     * Replace the loader list with a new one in which the new
-     * loader has been added.
-     **/
-    private synchronized boolean add(ObjectName name, ClassLoader cl) {
-        List<LoaderEntry> l =
-            new ArrayList<LoaderEntry>(Arrays.asList(loaders));
-        l.add(new LoaderEntry(name, cl));
-        loaders = l.toArray(EMPTY_LOADER_ARRAY);
-        return true;
-    }
-
-    /**
-     * Same behavior as remove(Object o) in {@link java.util.List}.
-     * Replace the loader list with a new one in which the old loader
-     * has been removed.
-     *
-     * The ObjectName may be null, in which case the entry to
-     * be removed must also have a null ObjectName and the ClassLoader
-     * values must match.  If the ObjectName is not null, then
-     * the first entry with a matching ObjectName is removed,
-     * regardless of whether ClassLoader values match.  (In fact,
-     * the ClassLoader parameter will usually be null in this case.)
-     **/
-    private synchronized boolean remove(ObjectName name, ClassLoader cl) {
-        final int size = loaders.length;
-        for (int i = 0; i < size; i++) {
-            LoaderEntry entry = loaders[i];
-            boolean match =
-                (name == null) ?
-                cl == entry.loader :
-                name.equals(entry.name);
-            if (match) {
-                LoaderEntry[] newloaders = new LoaderEntry[size - 1];
-                System.arraycopy(loaders, 0, newloaders, 0, i);
-                System.arraycopy(loaders, i + 1, newloaders, i,
-                                 size - 1 - i);
-                loaders = newloaders;
-                return true;
-            }
-        }
-        return false;
-    }
-
-
-    /**
-     * List of valid search
-     */
-    private final Map<String,List<ClassLoader>> search =
-        new Hashtable<String,List<ClassLoader>>(10);
-
-    /**
-     * List of named class loaders.
-     */
-    private final Map<ObjectName,ClassLoader> loadersWithNames =
-        new Hashtable<ObjectName,ClassLoader>(10);
-
-    // from javax.management.loading.DefaultLoaderRepository
-    public final Class<?> loadClass(String className)
-        throws ClassNotFoundException {
-        return  loadClass(loaders, className, null, null);
-    }
-
-
-    // from javax.management.loading.DefaultLoaderRepository
-    public final Class<?> loadClassWithout(ClassLoader without, String className)
-            throws ClassNotFoundException {
-        if (MBEANSERVER_LOGGER.isLoggable(Level.FINER)) {
-            MBEANSERVER_LOGGER.logp(Level.FINER,
-                    ClassLoaderRepositorySupport.class.getName(),
-                    "loadClassWithout", className + " without " + without);
-        }
-
-        // without is null => just behave as loadClass
-        //
-        if (without == null)
-            return loadClass(loaders, className, null, null);
-
-        // We must try to load the class without the given loader.
-        //
-        startValidSearch(without, className);
-        try {
-            return loadClass(loaders, className, without, null);
-        } finally {
-            stopValidSearch(without, className);
-        }
-    }
-
-
-    public final Class<?> loadClassBefore(ClassLoader stop, String className)
-            throws ClassNotFoundException {
-        if (MBEANSERVER_LOGGER.isLoggable(Level.FINER)) {
-            MBEANSERVER_LOGGER.logp(Level.FINER,
-                    ClassLoaderRepositorySupport.class.getName(),
-                    "loadClassBefore", className + " before " + stop);
-        }
-
-        if (stop == null)
-            return loadClass(loaders, className, null, null);
-
-        startValidSearch(stop, className);
-        try {
-            return loadClass(loaders, className, null, stop);
-        } finally {
-            stopValidSearch(stop, className);
-        }
-    }
-
-
-    private Class<?> loadClass(final LoaderEntry list[],
-                               final String className,
-                               final ClassLoader without,
-                               final ClassLoader stop)
-            throws ClassNotFoundException {
-        ReflectUtil.checkPackageAccess(className);
-        final int size = list.length;
-        for(int i=0; i<size; i++) {
-            try {
-                final ClassLoader cl = list[i].loader;
-                if (cl == null) // bootstrap class loader
-                    return Class.forName(className, false, null);
-                if (cl == without)
-                    continue;
-                if (cl == stop)
-                    break;
-                if (MBEANSERVER_LOGGER.isLoggable(Level.FINER)) {
-                    MBEANSERVER_LOGGER.logp(Level.FINER,
-                            ClassLoaderRepositorySupport.class.getName(),
-                            "loadClass", "Trying loader = " + cl);
-                }
-                /* We used to have a special case for "instanceof
-                   MLet" here, where we invoked the method
-                   loadClass(className, null) to prevent infinite
-                   recursion.  But the rule whereby the MLet only
-                   consults loaders that precede it in the CLR (via
-                   loadClassBefore) means that the recursion can't
-                   happen, and the test here caused some legitimate
-                   classloading to fail.  For example, if you have
-                   dependencies C->D->E with loaders {E D C} in the
-                   CLR in that order, you would expect to be able to
-                   load C.  The problem is that while resolving D, CLR
-                   delegation is disabled, so it can't find E.  */
-                return Class.forName(className, false, cl);
-            } catch (ClassNotFoundException e) {
-                // OK: continue with next class
-            }
-        }
-
-        throw new ClassNotFoundException(className);
-    }
-
-    private synchronized void startValidSearch(ClassLoader aloader,
-                                               String className)
-        throws ClassNotFoundException {
-        // Check if we have such a current search
-        //
-        List<ClassLoader> excluded = search.get(className);
-        if ((excluded!= null) && (excluded.contains(aloader))) {
-            if (MBEANSERVER_LOGGER.isLoggable(Level.FINER)) {
-                MBEANSERVER_LOGGER.logp(Level.FINER,
-                        ClassLoaderRepositorySupport.class.getName(),
-                        "startValidSearch", "Already requested loader = " +
-                        aloader + " class = " + className);
-            }
-            throw new ClassNotFoundException(className);
-        }
-
-        // Add an entry
-        //
-        if (excluded == null) {
-            excluded = new ArrayList<ClassLoader>(1);
-            search.put(className, excluded);
-        }
-        excluded.add(aloader);
-        if (MBEANSERVER_LOGGER.isLoggable(Level.FINER)) {
-            MBEANSERVER_LOGGER.logp(Level.FINER,
-                    ClassLoaderRepositorySupport.class.getName(),
-                    "startValidSearch",
-                    "loader = " + aloader + " class = " + className);
-        }
-    }
-
-    private synchronized void stopValidSearch(ClassLoader aloader,
-                                              String className) {
-
-        // Retrieve the search.
-        //
-        List<ClassLoader> excluded = search.get(className);
-        if (excluded != null) {
-            excluded.remove(aloader);
-            if (MBEANSERVER_LOGGER.isLoggable(Level.FINER)) {
-                MBEANSERVER_LOGGER.logp(Level.FINER,
-                        ClassLoaderRepositorySupport.class.getName(),
-                        "stopValidSearch",
-                        "loader = " + aloader + " class = " + className);
-            }
-        }
-    }
-
-    public final void addClassLoader(ClassLoader loader) {
-        add(null, loader);
-    }
-
-    public final void removeClassLoader(ClassLoader loader) {
-        remove(null, loader);
-    }
-
-    public final synchronized void addClassLoader(ObjectName name,
-                                                  ClassLoader loader) {
-        loadersWithNames.put(name, loader);
-        if (!(loader instanceof PrivateClassLoader))
-            add(name, loader);
-    }
-
-    public final synchronized void removeClassLoader(ObjectName name) {
-        ClassLoader loader = loadersWithNames.remove(name);
-        if (!(loader instanceof PrivateClassLoader))
-            remove(name, loader);
-    }
-
-    public final ClassLoader getClassLoader(ObjectName name) {
-        ClassLoader instance = loadersWithNames.get(name);
-        if (instance != null) {
-            SecurityManager sm = System.getSecurityManager();
-            if (sm != null) {
-                Permission perm =
-                        new MBeanPermission(instance.getClass().getName(),
-                        null,
-                        name,
-                        "getClassLoader");
-                sm.checkPermission(perm);
-            }
-        }
-        return instance;
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/mbeanserver/ConvertingMethod.java b/ojluni/src/main/java/com/sun/jmx/mbeanserver/ConvertingMethod.java
deleted file mode 100755
index c0dae31..0000000
--- a/ojluni/src/main/java/com/sun/jmx/mbeanserver/ConvertingMethod.java
+++ /dev/null
@@ -1,229 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-package com.sun.jmx.mbeanserver;
-import java.io.InvalidObjectException;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.lang.reflect.Type;
-
-import javax.management.Descriptor;
-import javax.management.MBeanException;
-import javax.management.openmbean.OpenDataException;
-import javax.management.openmbean.OpenType;
-import sun.reflect.misc.MethodUtil;
-
-final class ConvertingMethod {
-    static ConvertingMethod from(Method m) {
-        try {
-            return new ConvertingMethod(m);
-        } catch (OpenDataException ode) {
-            final String msg = "Method " + m.getDeclaringClass().getName() +
-                "." + m.getName() + " has parameter or return type that " +
-                "cannot be translated into an open type";
-            throw new IllegalArgumentException(msg, ode);
-        }
-    }
-
-    Method getMethod() {
-        return method;
-    }
-
-    Descriptor getDescriptor() {
-        return Introspector.descriptorForElement(method);
-    }
-
-    Type getGenericReturnType() {
-        return method.getGenericReturnType();
-    }
-
-    Type[] getGenericParameterTypes() {
-        return method.getGenericParameterTypes();
-    }
-
-    String getName() {
-        return method.getName();
-    }
-
-    OpenType<?> getOpenReturnType() {
-        return returnMapping.getOpenType();
-    }
-
-    OpenType<?>[] getOpenParameterTypes() {
-        final OpenType<?>[] types = new OpenType<?>[paramMappings.length];
-        for (int i = 0; i < paramMappings.length; i++)
-            types[i] = paramMappings[i].getOpenType();
-        return types;
-    }
-
-    /* Check that this method will be callable when we are going from
-     * open types to Java types, for example when we are going from
-     * an MXBean wrapper to the underlying resource.
-     * The parameters will be converted to
-     * Java types, so they must be "reconstructible".  The return
-     * value will be converted to an Open Type, so if it is convertible
-     * at all there is no further check needed.
-     */
-    void checkCallFromOpen() {
-        try {
-            for (MXBeanMapping paramConverter : paramMappings)
-                paramConverter.checkReconstructible();
-        } catch (InvalidObjectException e) {
-            throw new IllegalArgumentException(e);
-        }
-    }
-
-    /* Check that this method will be callable when we are going from
-     * Java types to open types, for example when we are going from
-     * an MXBean proxy to the open types that it will be mapped to.
-     * The return type will be converted back to a Java type, so it
-     * must be "reconstructible".  The parameters will be converted to
-     * open types, so if it is convertible at all there is no further
-     * check needed.
-     */
-    void checkCallToOpen() {
-        try {
-            returnMapping.checkReconstructible();
-        } catch (InvalidObjectException e) {
-            throw new IllegalArgumentException(e);
-        }
-    }
-
-    String[] getOpenSignature() {
-        if (paramMappings.length == 0)
-            return noStrings;
-
-        String[] sig = new String[paramMappings.length];
-        for (int i = 0; i < paramMappings.length; i++)
-            sig[i] = paramMappings[i].getOpenClass().getName();
-        return sig;
-    }
-
-    final Object toOpenReturnValue(MXBeanLookup lookup, Object ret)
-            throws OpenDataException {
-        return returnMapping.toOpenValue(ret);
-    }
-
-    final Object fromOpenReturnValue(MXBeanLookup lookup, Object ret)
-            throws InvalidObjectException {
-        return returnMapping.fromOpenValue(ret);
-    }
-
-    final Object[] toOpenParameters(MXBeanLookup lookup, Object[] params)
-            throws OpenDataException {
-        if (paramConversionIsIdentity || params == null)
-            return params;
-        final Object[] oparams = new Object[params.length];
-        for (int i = 0; i < params.length; i++)
-            oparams[i] = paramMappings[i].toOpenValue(params[i]);
-        return oparams;
-    }
-
-    final Object[] fromOpenParameters(Object[] params)
-            throws InvalidObjectException {
-        if (paramConversionIsIdentity || params == null)
-            return params;
-        final Object[] jparams = new Object[params.length];
-        for (int i = 0; i < params.length; i++)
-            jparams[i] = paramMappings[i].fromOpenValue(params[i]);
-        return jparams;
-    }
-
-    final Object toOpenParameter(MXBeanLookup lookup,
-                                 Object param,
-                                 int paramNo)
-        throws OpenDataException {
-        return paramMappings[paramNo].toOpenValue(param);
-    }
-
-    final Object fromOpenParameter(MXBeanLookup lookup,
-                                   Object param,
-                                   int paramNo)
-        throws InvalidObjectException {
-        return paramMappings[paramNo].fromOpenValue(param);
-    }
-
-    Object invokeWithOpenReturn(MXBeanLookup lookup,
-                                Object obj, Object[] params)
-            throws MBeanException, IllegalAccessException,
-                   InvocationTargetException {
-        MXBeanLookup old = MXBeanLookup.getLookup();
-        try {
-            MXBeanLookup.setLookup(lookup);
-            return invokeWithOpenReturn(obj, params);
-        } finally {
-            MXBeanLookup.setLookup(old);
-        }
-    }
-
-    private Object invokeWithOpenReturn(Object obj, Object[] params)
-            throws MBeanException, IllegalAccessException,
-                   InvocationTargetException {
-        final Object[] javaParams;
-        try {
-            javaParams = fromOpenParameters(params);
-        } catch (InvalidObjectException e) {
-            // probably can't happen
-            final String msg = methodName() + ": cannot convert parameters " +
-                "from open values: " + e;
-            throw new MBeanException(e, msg);
-        }
-        final Object javaReturn = MethodUtil.invoke(method, obj, javaParams);
-        try {
-            return returnMapping.toOpenValue(javaReturn);
-        } catch (OpenDataException e) {
-            // probably can't happen
-            final String msg = methodName() + ": cannot convert return " +
-                "value to open value: " + e;
-            throw new MBeanException(e, msg);
-        }
-    }
-
-    private String methodName() {
-        return method.getDeclaringClass() + "." + method.getName();
-    }
-
-    private ConvertingMethod(Method m) throws OpenDataException {
-        this.method = m;
-        MXBeanMappingFactory mappingFactory = MXBeanMappingFactory.DEFAULT;
-        returnMapping =
-                mappingFactory.mappingForType(m.getGenericReturnType(), mappingFactory);
-        Type[] params = m.getGenericParameterTypes();
-        paramMappings = new MXBeanMapping[params.length];
-        boolean identity = true;
-        for (int i = 0; i < params.length; i++) {
-            paramMappings[i] = mappingFactory.mappingForType(params[i], mappingFactory);
-            identity &= DefaultMXBeanMappingFactory.isIdentity(paramMappings[i]);
-        }
-        paramConversionIsIdentity = identity;
-    }
-
-    private static final String[] noStrings = new String[0];
-
-    private final Method method;
-    private final MXBeanMapping returnMapping;
-    private final MXBeanMapping[] paramMappings;
-    private final boolean paramConversionIsIdentity;
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/mbeanserver/DefaultMXBeanMappingFactory.java b/ojluni/src/main/java/com/sun/jmx/mbeanserver/DefaultMXBeanMappingFactory.java
deleted file mode 100755
index f598caf..0000000
--- a/ojluni/src/main/java/com/sun/jmx/mbeanserver/DefaultMXBeanMappingFactory.java
+++ /dev/null
@@ -1,1499 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-package com.sun.jmx.mbeanserver;
-
-import static com.sun.jmx.mbeanserver.Util.*;
-import static com.sun.jmx.mbeanserver.MXBeanIntrospector.typeName;
-
-import static javax.management.openmbean.SimpleType.*;
-
-import com.sun.jmx.remote.util.EnvHelp;
-
-import java.beans.ConstructorProperties;
-import java.io.InvalidObjectException;
-import java.lang.annotation.ElementType;
-import java.lang.ref.WeakReference;
-import java.lang.reflect.Array;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Field;
-import java.lang.reflect.GenericArrayType;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.lang.reflect.ParameterizedType;
-import java.lang.reflect.Proxy;
-import java.lang.reflect.Type;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.BitSet;
-import java.util.Collection;
-import java.util.Comparator;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.SortedMap;
-import java.util.SortedSet;
-import java.util.TreeSet;
-import java.util.WeakHashMap;
-
-import javax.management.JMX;
-import javax.management.ObjectName;
-import javax.management.openmbean.ArrayType;
-import javax.management.openmbean.CompositeData;
-import javax.management.openmbean.CompositeDataInvocationHandler;
-import javax.management.openmbean.CompositeDataSupport;
-import javax.management.openmbean.CompositeDataView;
-import javax.management.openmbean.CompositeType;
-import javax.management.openmbean.OpenDataException;
-import javax.management.openmbean.OpenType;
-import javax.management.openmbean.SimpleType;
-import javax.management.openmbean.TabularData;
-import javax.management.openmbean.TabularDataSupport;
-import javax.management.openmbean.TabularType;
-import sun.reflect.misc.MethodUtil;
-import sun.reflect.misc.ReflectUtil;
-
-/**
- *   <p>A converter between Java types and the limited set of classes
- *   defined by Open MBeans.</p>
- *
- *   <p>A Java type is an instance of java.lang.reflect.Type.  For our
- *   purposes, it is either a Class, such as String.class or int.class;
- *   or a ParameterizedType, such as List<String> or Map<Integer,
- *   String[]>.  On J2SE 1.4 and earlier, it can only be a Class.</p>
- *
- *   <p>Each Type is associated with an DefaultMXBeanMappingFactory.  The
- *   DefaultMXBeanMappingFactory defines an OpenType corresponding to the Type, plus a
- *   Java class corresponding to the OpenType.  For example:</p>
- *
- *   <pre>
- *   Type                     Open class     OpenType
- *   ----                     ----------     --------
- *   Integer                Integer        SimpleType.INTEGER
- *   int                            int            SimpleType.INTEGER
- *   Integer[]              Integer[]      ArrayType(1, SimpleType.INTEGER)
- *   int[]                  Integer[]      ArrayType(SimpleType.INTEGER, true)
- *   String[][]             String[][]     ArrayType(2, SimpleType.STRING)
- *   List<String>                   String[]       ArrayType(1, SimpleType.STRING)
- *   ThreadState (an Enum)    String         SimpleType.STRING
- *   Map<Integer, String[]>   TabularData          TabularType(
- *                                           CompositeType(
- *                                             {"key", SimpleType.INTEGER},
- *                                             {"value",
- *                                               ArrayType(1,
- *                                                SimpleType.STRING)}),
- *                                           indexNames={"key"})
- *   </pre>
- *
- *   <p>Apart from simple types, arrays, and collections, Java types are
- *   converted through introspection into CompositeType.  The Java type
- *   must have at least one getter (method such as "int getSize()" or
- *   "boolean isBig()"), and we must be able to deduce how to
- *   reconstruct an instance of the Java class from the values of the
- *   getters using one of various heuristics.</p>
- *
- * @since 1.6
- */
-public class DefaultMXBeanMappingFactory extends MXBeanMappingFactory {
-    static abstract class NonNullMXBeanMapping extends MXBeanMapping {
-        NonNullMXBeanMapping(Type javaType, OpenType<?> openType) {
-            super(javaType, openType);
-        }
-
-        @Override
-        public final Object fromOpenValue(Object openValue)
-        throws InvalidObjectException {
-            if (openValue == null)
-                return null;
-            else
-                return fromNonNullOpenValue(openValue);
-        }
-
-        @Override
-        public final Object toOpenValue(Object javaValue) throws OpenDataException {
-            if (javaValue == null)
-                return null;
-            else
-                return toNonNullOpenValue(javaValue);
-        }
-
-        abstract Object fromNonNullOpenValue(Object openValue)
-        throws InvalidObjectException;
-
-        abstract Object toNonNullOpenValue(Object javaValue)
-        throws OpenDataException;
-
-        /**
-         * <p>True if and only if this MXBeanMapping's toOpenValue and
-         * fromOpenValue methods are the identity function.</p>
-         */
-        boolean isIdentity() {
-            return false;
-        }
-    }
-
-    static boolean isIdentity(MXBeanMapping mapping) {
-        return (mapping instanceof NonNullMXBeanMapping &&
-                ((NonNullMXBeanMapping) mapping).isIdentity());
-    }
-
-    private static final class Mappings
-        extends WeakHashMap<Type, WeakReference<MXBeanMapping>> {}
-
-    private static final Mappings mappings = new Mappings();
-
-    /** Following List simply serves to keep a reference to predefined
-        MXBeanMappings so they don't get garbage collected. */
-    private static final List<MXBeanMapping> permanentMappings = newList();
-
-    private static synchronized MXBeanMapping getMapping(Type type) {
-        WeakReference<MXBeanMapping> wr = mappings.get(type);
-        return (wr == null) ? null : wr.get();
-    }
-
-    private static synchronized void putMapping(Type type, MXBeanMapping mapping) {
-        WeakReference<MXBeanMapping> wr =
-            new WeakReference<MXBeanMapping>(mapping);
-        mappings.put(type, wr);
-    }
-
-    private static synchronized void putPermanentMapping(
-            Type type, MXBeanMapping mapping) {
-        putMapping(type, mapping);
-        permanentMappings.add(mapping);
-    }
-
-    static {
-        /* Set up the mappings for Java types that map to SimpleType.  */
-
-        final OpenType<?>[] simpleTypes = {
-            BIGDECIMAL, BIGINTEGER, BOOLEAN, BYTE, CHARACTER, DATE,
-            DOUBLE, FLOAT, INTEGER, LONG, OBJECTNAME, SHORT, STRING,
-            VOID,
-        };
-
-        for (int i = 0; i < simpleTypes.length; i++) {
-            final OpenType<?> t = simpleTypes[i];
-            Class<?> c;
-            try {
-                c = Class.forName(t.getClassName(), false,
-                                  ObjectName.class.getClassLoader());
-            } catch (ClassNotFoundException e) {
-                // the classes that these predefined types declare must exist!
-                throw new Error(e);
-            }
-            final MXBeanMapping mapping = new IdentityMapping(c, t);
-            putPermanentMapping(c, mapping);
-
-            if (c.getName().startsWith("java.lang.")) {
-                try {
-                    final Field typeField = c.getField("TYPE");
-                    final Class<?> primitiveType = (Class<?>) typeField.get(null);
-                    final MXBeanMapping primitiveMapping =
-                        new IdentityMapping(primitiveType, t);
-                    putPermanentMapping(primitiveType, primitiveMapping);
-                    if (primitiveType != void.class) {
-                        final Class<?> primitiveArrayType =
-                            Array.newInstance(primitiveType, 0).getClass();
-                        final OpenType<?> primitiveArrayOpenType =
-                            ArrayType.getPrimitiveArrayType(primitiveArrayType);
-                        final MXBeanMapping primitiveArrayMapping =
-                            new IdentityMapping(primitiveArrayType,
-                                                primitiveArrayOpenType);
-                        putPermanentMapping(primitiveArrayType,
-                                            primitiveArrayMapping);
-                    }
-                } catch (NoSuchFieldException e) {
-                    // OK: must not be a primitive wrapper
-                } catch (IllegalAccessException e) {
-                    // Should not reach here
-                    assert(false);
-                }
-            }
-        }
-    }
-
-    /** Get the converter for the given Java type, creating it if necessary. */
-    @Override
-    public synchronized MXBeanMapping mappingForType(Type objType,
-                                                     MXBeanMappingFactory factory)
-            throws OpenDataException {
-        if (inProgress.containsKey(objType)) {
-            throw new OpenDataException(
-                    "Recursive data structure, including " + typeName(objType));
-        }
-
-        MXBeanMapping mapping;
-
-        mapping = getMapping(objType);
-        if (mapping != null)
-            return mapping;
-
-        inProgress.put(objType, objType);
-        try {
-            mapping = makeMapping(objType, factory);
-        } catch (OpenDataException e) {
-            throw openDataException("Cannot convert type: " + typeName(objType), e);
-        } finally {
-            inProgress.remove(objType);
-        }
-
-        putMapping(objType, mapping);
-        return mapping;
-    }
-
-    private MXBeanMapping makeMapping(Type objType, MXBeanMappingFactory factory)
-    throws OpenDataException {
-
-        /* It's not yet worth formalizing these tests by having for example
-           an array of factory classes, each of which says whether it
-           recognizes the Type (Chain of Responsibility pattern).  */
-        if (objType instanceof GenericArrayType) {
-            Type componentType =
-                ((GenericArrayType) objType).getGenericComponentType();
-            return makeArrayOrCollectionMapping(objType, componentType, factory);
-        } else if (objType instanceof Class<?>) {
-            Class<?> objClass = (Class<?>) objType;
-            if (objClass.isEnum()) {
-                // Huge hack to avoid compiler warnings here.  The ElementType
-                // parameter is ignored but allows us to obtain a type variable
-                // T that matches <T extends Enum<T>>.
-                return makeEnumMapping((Class<?>) objClass, ElementType.class);
-            } else if (objClass.isArray()) {
-                Type componentType = objClass.getComponentType();
-                return makeArrayOrCollectionMapping(objClass, componentType,
-                        factory);
-            } else if (JMX.isMXBeanInterface(objClass)) {
-                return makeMXBeanRefMapping(objClass);
-            } else {
-                return makeCompositeMapping(objClass, factory);
-            }
-        } else if (objType instanceof ParameterizedType) {
-            return makeParameterizedTypeMapping((ParameterizedType) objType,
-                                                factory);
-        } else
-            throw new OpenDataException("Cannot map type: " + objType);
-    }
-
-    private static <T extends Enum<T>> MXBeanMapping
-            makeEnumMapping(Class<?> enumClass, Class<T> fake) {
-        ReflectUtil.checkPackageAccess(enumClass);
-        return new EnumMapping<T>(Util.<Class<T>>cast(enumClass));
-    }
-
-    /* Make the converter for an array type, or a collection such as
-     * List<String> or Set<Integer>.  We never see one-dimensional
-     * primitive arrays (e.g. int[]) here because they use the identity
-     * converter and are registered as such in the static initializer.
-     */
-    private MXBeanMapping
-        makeArrayOrCollectionMapping(Type collectionType, Type elementType,
-                                     MXBeanMappingFactory factory)
-            throws OpenDataException {
-
-        final MXBeanMapping elementMapping = factory.mappingForType(elementType, factory);
-        final OpenType<?> elementOpenType = elementMapping.getOpenType();
-        final ArrayType<?> openType = ArrayType.getArrayType(elementOpenType);
-        final Class<?> elementOpenClass = elementMapping.getOpenClass();
-
-        final Class<?> openArrayClass;
-        final String openArrayClassName;
-        if (elementOpenClass.isArray())
-            openArrayClassName = "[" + elementOpenClass.getName();
-        else
-            openArrayClassName = "[L" + elementOpenClass.getName() + ";";
-        try {
-            openArrayClass = Class.forName(openArrayClassName);
-        } catch (ClassNotFoundException e) {
-            throw openDataException("Cannot obtain array class", e);
-        }
-
-        if (collectionType instanceof ParameterizedType) {
-            return new CollectionMapping(collectionType,
-                                         openType, openArrayClass,
-                                         elementMapping);
-        } else {
-            if (isIdentity(elementMapping)) {
-                return new IdentityMapping(collectionType,
-                                           openType);
-            } else {
-                return new ArrayMapping(collectionType,
-                                          openType,
-                                          openArrayClass,
-                                          elementMapping);
-            }
-        }
-    }
-
-    private static final String[] keyArray = {"key"};
-    private static final String[] keyValueArray = {"key", "value"};
-
-    private MXBeanMapping
-        makeTabularMapping(Type objType, boolean sortedMap,
-                           Type keyType, Type valueType,
-                           MXBeanMappingFactory factory)
-            throws OpenDataException {
-
-        final String objTypeName = typeName(objType);
-        final MXBeanMapping keyMapping = factory.mappingForType(keyType, factory);
-        final MXBeanMapping valueMapping = factory.mappingForType(valueType, factory);
-        final OpenType<?> keyOpenType = keyMapping.getOpenType();
-        final OpenType<?> valueOpenType = valueMapping.getOpenType();
-        final CompositeType rowType =
-            new CompositeType(objTypeName,
-                              objTypeName,
-                              keyValueArray,
-                              keyValueArray,
-                              new OpenType<?>[] {keyOpenType, valueOpenType});
-        final TabularType tabularType =
-            new TabularType(objTypeName, objTypeName, rowType, keyArray);
-        return new TabularMapping(objType, sortedMap, tabularType,
-                                    keyMapping, valueMapping);
-    }
-
-    /* We know how to translate List<E>, Set<E>, SortedSet<E>,
-       Map<K,V>, SortedMap<K,V>, and that's it.  We don't accept
-       subtypes of those because we wouldn't know how to deserialize
-       them.  We don't accept Queue<E> because it is unlikely people
-       would use that as a parameter or return type in an MBean.  */
-    private MXBeanMapping
-            makeParameterizedTypeMapping(ParameterizedType objType,
-                                         MXBeanMappingFactory factory)
-            throws OpenDataException {
-
-        final Type rawType = objType.getRawType();
-
-        if (rawType instanceof Class<?>) {
-            Class<?> c = (Class<?>) rawType;
-            if (c == List.class || c == Set.class || c == SortedSet.class) {
-                Type[] actuals = objType.getActualTypeArguments();
-                assert(actuals.length == 1);
-                if (c == SortedSet.class)
-                    mustBeComparable(c, actuals[0]);
-                return makeArrayOrCollectionMapping(objType, actuals[0], factory);
-            } else {
-                boolean sortedMap = (c == SortedMap.class);
-                if (c == Map.class || sortedMap) {
-                    Type[] actuals = objType.getActualTypeArguments();
-                    assert(actuals.length == 2);
-                    if (sortedMap)
-                        mustBeComparable(c, actuals[0]);
-                    return makeTabularMapping(objType, sortedMap,
-                            actuals[0], actuals[1], factory);
-                }
-            }
-        }
-        throw new OpenDataException("Cannot convert type: " + objType);
-    }
-
-    private static MXBeanMapping makeMXBeanRefMapping(Type t)
-            throws OpenDataException {
-        return new MXBeanRefMapping(t);
-    }
-
-    private MXBeanMapping makeCompositeMapping(Class<?> c,
-                                               MXBeanMappingFactory factory)
-            throws OpenDataException {
-
-        // For historical reasons GcInfo implements CompositeData but we
-        // shouldn't count its CompositeData.getCompositeType() field as
-        // an item in the computed CompositeType.
-        final boolean gcInfoHack =
-            (c.getName().equals("com.sun.management.GcInfo") &&
-                c.getClassLoader() == null);
-
-        ReflectUtil.checkPackageAccess(c);
-        final List<Method> methods =
-                MBeanAnalyzer.eliminateCovariantMethods(Arrays.asList(c.getMethods()));
-        final SortedMap<String,Method> getterMap = newSortedMap();
-
-        /* Select public methods that look like "T getX()" or "boolean
-           isX()", where T is not void and X is not the empty
-           string.  Exclude "Class getClass()" inherited from Object.  */
-        for (Method method : methods) {
-            final String propertyName = propertyName(method);
-
-            if (propertyName == null)
-                continue;
-            if (gcInfoHack && propertyName.equals("CompositeType"))
-                continue;
-
-            Method old =
-                getterMap.put(decapitalize(propertyName),
-                            method);
-            if (old != null) {
-                final String msg =
-                    "Class " + c.getName() + " has method name clash: " +
-                    old.getName() + ", " + method.getName();
-                throw new OpenDataException(msg);
-            }
-        }
-
-        final int nitems = getterMap.size();
-
-        if (nitems == 0) {
-            throw new OpenDataException("Can't map " + c.getName() +
-                                        " to an open data type");
-        }
-
-        final Method[] getters = new Method[nitems];
-        final String[] itemNames = new String[nitems];
-        final OpenType<?>[] openTypes = new OpenType<?>[nitems];
-        int i = 0;
-        for (Map.Entry<String,Method> entry : getterMap.entrySet()) {
-            itemNames[i] = entry.getKey();
-            final Method getter = entry.getValue();
-            getters[i] = getter;
-            final Type retType = getter.getGenericReturnType();
-            openTypes[i] = factory.mappingForType(retType, factory).getOpenType();
-            i++;
-        }
-
-        CompositeType compositeType =
-            new CompositeType(c.getName(),
-                              c.getName(),
-                              itemNames, // field names
-                              itemNames, // field descriptions
-                              openTypes);
-
-        return new CompositeMapping(c,
-                                    compositeType,
-                                    itemNames,
-                                    getters,
-                                    factory);
-    }
-
-    /* Converter for classes where the open data is identical to the
-       original data.  This is true for any of the SimpleType types,
-       and for an any-dimension array of those.  It is also true for
-       primitive types as of JMX 1.3, since an int[]
-       can be directly represented by an ArrayType, and an int needs no mapping
-       because reflection takes care of it.  */
-    private static final class IdentityMapping extends NonNullMXBeanMapping {
-        IdentityMapping(Type targetType, OpenType<?> openType) {
-            super(targetType, openType);
-        }
-
-        boolean isIdentity() {
-            return true;
-        }
-
-        @Override
-        Object fromNonNullOpenValue(Object openValue)
-        throws InvalidObjectException {
-            return openValue;
-        }
-
-        @Override
-        Object toNonNullOpenValue(Object javaValue) throws OpenDataException {
-            return javaValue;
-        }
-    }
-
-    private static final class EnumMapping<T extends Enum<T>>
-            extends NonNullMXBeanMapping {
-
-        EnumMapping(Class<T> enumClass) {
-            super(enumClass, SimpleType.STRING);
-            this.enumClass = enumClass;
-        }
-
-        @Override
-        final Object toNonNullOpenValue(Object value) {
-            return ((Enum<?>) value).name();
-        }
-
-        @Override
-        final T fromNonNullOpenValue(Object value)
-                throws InvalidObjectException {
-            try {
-                return Enum.valueOf(enumClass, (String) value);
-            } catch (Exception e) {
-                throw invalidObjectException("Cannot convert to enum: " +
-                                             value, e);
-            }
-        }
-
-        private final Class<T> enumClass;
-    }
-
-    private static final class ArrayMapping extends NonNullMXBeanMapping {
-        ArrayMapping(Type targetType,
-                     ArrayType<?> openArrayType, Class<?> openArrayClass,
-                     MXBeanMapping elementMapping) {
-            super(targetType, openArrayType);
-            this.elementMapping = elementMapping;
-        }
-
-        @Override
-        final Object toNonNullOpenValue(Object value)
-                throws OpenDataException {
-            Object[] valueArray = (Object[]) value;
-            final int len = valueArray.length;
-            final Object[] openArray = (Object[])
-                Array.newInstance(getOpenClass().getComponentType(), len);
-            for (int i = 0; i < len; i++)
-                openArray[i] = elementMapping.toOpenValue(valueArray[i]);
-            return openArray;
-        }
-
-        @Override
-        final Object fromNonNullOpenValue(Object openValue)
-                throws InvalidObjectException {
-            final Object[] openArray = (Object[]) openValue;
-            final Type javaType = getJavaType();
-            final Object[] valueArray;
-            final Type componentType;
-            if (javaType instanceof GenericArrayType) {
-                componentType =
-                    ((GenericArrayType) javaType).getGenericComponentType();
-            } else if (javaType instanceof Class<?> &&
-                       ((Class<?>) javaType).isArray()) {
-                componentType = ((Class<?>) javaType).getComponentType();
-            } else {
-                throw new IllegalArgumentException("Not an array: " +
-                                                   javaType);
-            }
-            valueArray = (Object[]) Array.newInstance((Class<?>) componentType,
-                                                      openArray.length);
-            for (int i = 0; i < openArray.length; i++)
-                valueArray[i] = elementMapping.fromOpenValue(openArray[i]);
-            return valueArray;
-        }
-
-        public void checkReconstructible() throws InvalidObjectException {
-            elementMapping.checkReconstructible();
-        }
-
-        /**
-         * DefaultMXBeanMappingFactory for the elements of this array.  If this is an
-         *          array of arrays, the converter converts the second-level arrays,
-         *          not the deepest elements.
-         */
-        private final MXBeanMapping elementMapping;
-    }
-
-    private static final class CollectionMapping extends NonNullMXBeanMapping {
-        CollectionMapping(Type targetType,
-                          ArrayType<?> openArrayType,
-                          Class<?> openArrayClass,
-                          MXBeanMapping elementMapping) {
-            super(targetType, openArrayType);
-            this.elementMapping = elementMapping;
-
-            /* Determine the concrete class to be used when converting
-               back to this Java type.  We convert all Lists to ArrayList
-               and all Sets to TreeSet.  (TreeSet because it is a SortedSet,
-               so works for both Set and SortedSet.)  */
-            Type raw = ((ParameterizedType) targetType).getRawType();
-            Class<?> c = (Class<?>) raw;
-            final Class<?> collC;
-            if (c == List.class)
-                collC = ArrayList.class;
-            else if (c == Set.class)
-                collC = HashSet.class;
-            else if (c == SortedSet.class)
-                collC = TreeSet.class;
-            else { // can't happen
-                assert(false);
-                collC = null;
-            }
-            collectionClass = Util.cast(collC);
-        }
-
-        @Override
-        final Object toNonNullOpenValue(Object value)
-                throws OpenDataException {
-            final Collection<?> valueCollection = (Collection<?>) value;
-            if (valueCollection instanceof SortedSet<?>) {
-                Comparator<?> comparator =
-                    ((SortedSet<?>) valueCollection).comparator();
-                if (comparator != null) {
-                    final String msg =
-                        "Cannot convert SortedSet with non-null comparator: " +
-                        comparator;
-                    throw openDataException(msg, new IllegalArgumentException(msg));
-                }
-            }
-            final Object[] openArray = (Object[])
-                Array.newInstance(getOpenClass().getComponentType(),
-                                  valueCollection.size());
-            int i = 0;
-            for (Object o : valueCollection)
-                openArray[i++] = elementMapping.toOpenValue(o);
-            return openArray;
-        }
-
-        @Override
-        final Object fromNonNullOpenValue(Object openValue)
-                throws InvalidObjectException {
-            final Object[] openArray = (Object[]) openValue;
-            final Collection<Object> valueCollection;
-            try {
-                valueCollection = cast(collectionClass.newInstance());
-            } catch (Exception e) {
-                throw invalidObjectException("Cannot create collection", e);
-            }
-            for (Object o : openArray) {
-                Object value = elementMapping.fromOpenValue(o);
-                if (!valueCollection.add(value)) {
-                    final String msg =
-                        "Could not add " + o + " to " +
-                        collectionClass.getName() +
-                        " (duplicate set element?)";
-                    throw new InvalidObjectException(msg);
-                }
-            }
-            return valueCollection;
-        }
-
-        public void checkReconstructible() throws InvalidObjectException {
-            elementMapping.checkReconstructible();
-        }
-
-        private final Class<? extends Collection<?>> collectionClass;
-        private final MXBeanMapping elementMapping;
-    }
-
-    private static final class MXBeanRefMapping extends NonNullMXBeanMapping {
-        MXBeanRefMapping(Type intf) {
-            super(intf, SimpleType.OBJECTNAME);
-        }
-
-        @Override
-        final Object toNonNullOpenValue(Object javaValue)
-                throws OpenDataException {
-            MXBeanLookup lookup = lookupNotNull(OpenDataException.class);
-            ObjectName name = lookup.mxbeanToObjectName(javaValue);
-            if (name == null)
-                throw new OpenDataException("No name for object: " + javaValue);
-            return name;
-        }
-
-        @Override
-        final Object fromNonNullOpenValue(Object openValue)
-                throws InvalidObjectException {
-            MXBeanLookup lookup = lookupNotNull(InvalidObjectException.class);
-            ObjectName name = (ObjectName) openValue;
-            Object mxbean =
-                lookup.objectNameToMXBean(name, (Class<?>) getJavaType());
-            if (mxbean == null) {
-                final String msg =
-                    "No MXBean for name: " + name;
-                throw new InvalidObjectException(msg);
-            }
-            return mxbean;
-        }
-
-        private <T extends Exception> MXBeanLookup
-            lookupNotNull(Class<T> excClass)
-                throws T {
-            MXBeanLookup lookup = MXBeanLookup.getLookup();
-            if (lookup == null) {
-                final String msg =
-                    "Cannot convert MXBean interface in this context";
-                T exc;
-                try {
-                    Constructor<T> con = excClass.getConstructor(String.class);
-                    exc = con.newInstance(msg);
-                } catch (Exception e) {
-                    throw new RuntimeException(e);
-                }
-                throw exc;
-            }
-            return lookup;
-        }
-    }
-
-    private static final class TabularMapping extends NonNullMXBeanMapping {
-        TabularMapping(Type targetType,
-                       boolean sortedMap,
-                       TabularType tabularType,
-                       MXBeanMapping keyConverter,
-                       MXBeanMapping valueConverter) {
-            super(targetType, tabularType);
-            this.sortedMap = sortedMap;
-            this.keyMapping = keyConverter;
-            this.valueMapping = valueConverter;
-        }
-
-        @Override
-        final Object toNonNullOpenValue(Object value) throws OpenDataException {
-            final Map<Object, Object> valueMap = cast(value);
-            if (valueMap instanceof SortedMap<?,?>) {
-                Comparator<?> comparator = ((SortedMap<?,?>) valueMap).comparator();
-                if (comparator != null) {
-                    final String msg =
-                        "Cannot convert SortedMap with non-null comparator: " +
-                        comparator;
-                    throw openDataException(msg, new IllegalArgumentException(msg));
-                }
-            }
-            final TabularType tabularType = (TabularType) getOpenType();
-            final TabularData table = new TabularDataSupport(tabularType);
-            final CompositeType rowType = tabularType.getRowType();
-            for (Map.Entry<Object, Object> entry : valueMap.entrySet()) {
-                final Object openKey = keyMapping.toOpenValue(entry.getKey());
-                final Object openValue = valueMapping.toOpenValue(entry.getValue());
-                final CompositeData row;
-                row =
-                    new CompositeDataSupport(rowType, keyValueArray,
-                                             new Object[] {openKey,
-                                                           openValue});
-                table.put(row);
-            }
-            return table;
-        }
-
-        @Override
-        final Object fromNonNullOpenValue(Object openValue)
-                throws InvalidObjectException {
-            final TabularData table = (TabularData) openValue;
-            final Collection<CompositeData> rows = cast(table.values());
-            final Map<Object, Object> valueMap =
-                sortedMap ? newSortedMap() : newInsertionOrderMap();
-            for (CompositeData row : rows) {
-                final Object key =
-                    keyMapping.fromOpenValue(row.get("key"));
-                final Object value =
-                    valueMapping.fromOpenValue(row.get("value"));
-                if (valueMap.put(key, value) != null) {
-                    final String msg =
-                        "Duplicate entry in TabularData: key=" + key;
-                    throw new InvalidObjectException(msg);
-                }
-            }
-            return valueMap;
-        }
-
-        @Override
-        public void checkReconstructible() throws InvalidObjectException {
-            keyMapping.checkReconstructible();
-            valueMapping.checkReconstructible();
-        }
-
-        private final boolean sortedMap;
-        private final MXBeanMapping keyMapping;
-        private final MXBeanMapping valueMapping;
-    }
-
-    private final class CompositeMapping extends NonNullMXBeanMapping {
-        CompositeMapping(Class<?> targetClass,
-                         CompositeType compositeType,
-                         String[] itemNames,
-                         Method[] getters,
-                         MXBeanMappingFactory factory) throws OpenDataException {
-            super(targetClass, compositeType);
-
-            assert(itemNames.length == getters.length);
-
-            this.itemNames = itemNames;
-            this.getters = getters;
-            this.getterMappings = new MXBeanMapping[getters.length];
-            for (int i = 0; i < getters.length; i++) {
-                Type retType = getters[i].getGenericReturnType();
-                getterMappings[i] = factory.mappingForType(retType, factory);
-            }
-        }
-
-        @Override
-        final Object toNonNullOpenValue(Object value)
-                throws OpenDataException {
-            CompositeType ct = (CompositeType) getOpenType();
-            if (value instanceof CompositeDataView)
-                return ((CompositeDataView) value).toCompositeData(ct);
-            if (value == null)
-                return null;
-
-            Object[] values = new Object[getters.length];
-            for (int i = 0; i < getters.length; i++) {
-                try {
-                    Object got = MethodUtil.invoke(getters[i], value, (Object[]) null);
-                    values[i] = getterMappings[i].toOpenValue(got);
-                } catch (Exception e) {
-                    throw openDataException("Error calling getter for " +
-                                            itemNames[i] + ": " + e, e);
-                }
-            }
-            return new CompositeDataSupport(ct, itemNames, values);
-        }
-
-        /** Determine how to convert back from the CompositeData into
-            the original Java type.  For a type that is not reconstructible,
-            this method will fail every time, and will throw the right
-            exception. */
-        private synchronized void makeCompositeBuilder()
-                throws InvalidObjectException {
-            if (compositeBuilder != null)
-                return;
-
-            Class<?> targetClass = (Class<?>) getJavaType();
-            /* In this 2D array, each subarray is a set of builders where
-               there is no point in consulting the ones after the first if
-               the first refuses.  */
-            CompositeBuilder[][] builders = {
-                {
-                    new CompositeBuilderViaFrom(targetClass, itemNames),
-                },
-                {
-                    new CompositeBuilderViaConstructor(targetClass, itemNames),
-                },
-                {
-                    new CompositeBuilderCheckGetters(targetClass, itemNames,
-                                                     getterMappings),
-                    new CompositeBuilderViaSetters(targetClass, itemNames),
-                    new CompositeBuilderViaProxy(targetClass, itemNames),
-                },
-            };
-            CompositeBuilder foundBuilder = null;
-            /* We try to make a meaningful exception message by
-               concatenating each Builder's explanation of why it
-               isn't applicable.  */
-            final StringBuilder whyNots = new StringBuilder();
-            Throwable possibleCause = null;
-        find:
-            for (CompositeBuilder[] relatedBuilders : builders) {
-                for (int i = 0; i < relatedBuilders.length; i++) {
-                    CompositeBuilder builder = relatedBuilders[i];
-                    String whyNot = builder.applicable(getters);
-                    if (whyNot == null) {
-                        foundBuilder = builder;
-                        break find;
-                    }
-                    Throwable cause = builder.possibleCause();
-                    if (cause != null)
-                        possibleCause = cause;
-                    if (whyNot.length() > 0) {
-                        if (whyNots.length() > 0)
-                            whyNots.append("; ");
-                        whyNots.append(whyNot);
-                        if (i == 0)
-                           break; // skip other builders in this group
-                    }
-                }
-            }
-            if (foundBuilder == null) {
-                String msg =
-                    "Do not know how to make a " + targetClass.getName() +
-                    " from a CompositeData: " + whyNots;
-                if (possibleCause != null)
-                    msg += ". Remaining exceptions show a POSSIBLE cause.";
-                throw invalidObjectException(msg, possibleCause);
-            }
-            compositeBuilder = foundBuilder;
-        }
-
-        @Override
-        public void checkReconstructible() throws InvalidObjectException {
-            makeCompositeBuilder();
-        }
-
-        @Override
-        final Object fromNonNullOpenValue(Object value)
-                throws InvalidObjectException {
-            makeCompositeBuilder();
-            return compositeBuilder.fromCompositeData((CompositeData) value,
-                                                      itemNames,
-                                                      getterMappings);
-        }
-
-        private final String[] itemNames;
-        private final Method[] getters;
-        private final MXBeanMapping[] getterMappings;
-        private CompositeBuilder compositeBuilder;
-    }
-
-    /** Converts from a CompositeData to an instance of the targetClass.  */
-    private static abstract class CompositeBuilder {
-        CompositeBuilder(Class<?> targetClass, String[] itemNames) {
-            this.targetClass = targetClass;
-            this.itemNames = itemNames;
-        }
-
-        Class<?> getTargetClass() {
-            return targetClass;
-        }
-
-        String[] getItemNames() {
-            return itemNames;
-        }
-
-        /** If the subclass is appropriate for targetClass, then the
-            method returns null.  If the subclass is not appropriate,
-            then the method returns an explanation of why not.  If the
-            subclass should be appropriate but there is a problem,
-            then the method throws InvalidObjectException.  */
-        abstract String applicable(Method[] getters)
-                throws InvalidObjectException;
-
-        /** If the subclass returns an explanation of why it is not applicable,
-            it can additionally indicate an exception with details.  This is
-            potentially confusing, because the real problem could be that one
-            of the other subclasses is supposed to be applicable but isn't.
-            But the advantage of less information loss probably outweighs the
-            disadvantage of possible confusion.  */
-        Throwable possibleCause() {
-            return null;
-        }
-
-        abstract Object fromCompositeData(CompositeData cd,
-                                          String[] itemNames,
-                                          MXBeanMapping[] converters)
-                throws InvalidObjectException;
-
-        private final Class<?> targetClass;
-        private final String[] itemNames;
-    }
-
-    /** Builder for when the target class has a method "public static
-        from(CompositeData)".  */
-    private static final class CompositeBuilderViaFrom
-            extends CompositeBuilder {
-
-        CompositeBuilderViaFrom(Class<?> targetClass, String[] itemNames) {
-            super(targetClass, itemNames);
-        }
-
-        String applicable(Method[] getters) throws InvalidObjectException {
-            // See if it has a method "T from(CompositeData)"
-            // as is conventional for a CompositeDataView
-            Class<?> targetClass = getTargetClass();
-            try {
-                Method fromMethod =
-                    targetClass.getMethod("from", CompositeData.class);
-
-                if (!Modifier.isStatic(fromMethod.getModifiers())) {
-                    final String msg =
-                        "Method from(CompositeData) is not static";
-                    throw new InvalidObjectException(msg);
-                }
-
-                if (fromMethod.getReturnType() != getTargetClass()) {
-                    final String msg =
-                        "Method from(CompositeData) returns " +
-                        typeName(fromMethod.getReturnType()) +
-                        " not " + typeName(targetClass);
-                    throw new InvalidObjectException(msg);
-                }
-
-                this.fromMethod = fromMethod;
-                return null; // success!
-            } catch (InvalidObjectException e) {
-                throw e;
-            } catch (Exception e) {
-                // OK: it doesn't have the method
-                return "no method from(CompositeData)";
-            }
-        }
-
-        final Object fromCompositeData(CompositeData cd,
-                                       String[] itemNames,
-                                       MXBeanMapping[] converters)
-                throws InvalidObjectException {
-            try {
-                return MethodUtil.invoke(fromMethod, null, new Object[] {cd});
-            } catch (Exception e) {
-                final String msg = "Failed to invoke from(CompositeData)";
-                throw invalidObjectException(msg, e);
-            }
-        }
-
-        private Method fromMethod;
-    }
-
-    /** This builder never actually returns success.  It simply serves
-        to check whether the other builders in the same group have any
-        chance of success.  If any getter in the targetClass returns
-        a type that we don't know how to reconstruct, then we will
-        not be able to make a builder, and there is no point in repeating
-        the error about the problematic getter as many times as there are
-        candidate builders.  Instead, the "applicable" method will return
-        an explanatory string, and the other builders will be skipped.
-        If all the getters are OK, then the "applicable" method will return
-        an empty string and the other builders will be tried.  */
-    private static class CompositeBuilderCheckGetters extends CompositeBuilder {
-        CompositeBuilderCheckGetters(Class<?> targetClass, String[] itemNames,
-                                     MXBeanMapping[] getterConverters) {
-            super(targetClass, itemNames);
-            this.getterConverters = getterConverters;
-        }
-
-        String applicable(Method[] getters) {
-            for (int i = 0; i < getters.length; i++) {
-                try {
-                    getterConverters[i].checkReconstructible();
-                } catch (InvalidObjectException e) {
-                    possibleCause = e;
-                    return "method " + getters[i].getName() + " returns type " +
-                        "that cannot be mapped back from OpenData";
-                }
-            }
-            return "";
-        }
-
-        @Override
-        Throwable possibleCause() {
-            return possibleCause;
-        }
-
-        final Object fromCompositeData(CompositeData cd,
-                                       String[] itemNames,
-                                       MXBeanMapping[] converters) {
-            throw new Error();
-        }
-
-        private final MXBeanMapping[] getterConverters;
-        private Throwable possibleCause;
-    }
-
-    /** Builder for when the target class has a setter for every getter. */
-    private static class CompositeBuilderViaSetters extends CompositeBuilder {
-
-        CompositeBuilderViaSetters(Class<?> targetClass, String[] itemNames) {
-            super(targetClass, itemNames);
-        }
-
-        String applicable(Method[] getters) {
-            try {
-                Constructor<?> c = getTargetClass().getConstructor();
-            } catch (Exception e) {
-                return "does not have a public no-arg constructor";
-            }
-
-            Method[] setters = new Method[getters.length];
-            for (int i = 0; i < getters.length; i++) {
-                Method getter = getters[i];
-                Class<?> returnType = getter.getReturnType();
-                String name = propertyName(getter);
-                String setterName = "set" + name;
-                Method setter;
-                try {
-                    setter = getTargetClass().getMethod(setterName, returnType);
-                    if (setter.getReturnType() != void.class)
-                        throw new Exception();
-                } catch (Exception e) {
-                    return "not all getters have corresponding setters " +
-                           "(" + getter + ")";
-                }
-                setters[i] = setter;
-            }
-            this.setters = setters;
-            return null;
-        }
-
-        Object fromCompositeData(CompositeData cd,
-                                 String[] itemNames,
-                                 MXBeanMapping[] converters)
-                throws InvalidObjectException {
-            Object o;
-            try {
-                final Class<?> targetClass = getTargetClass();
-                ReflectUtil.checkPackageAccess(targetClass);
-                o = targetClass.newInstance();
-                for (int i = 0; i < itemNames.length; i++) {
-                    if (cd.containsKey(itemNames[i])) {
-                        Object openItem = cd.get(itemNames[i]);
-                        Object javaItem =
-                            converters[i].fromOpenValue(openItem);
-                        MethodUtil.invoke(setters[i], o, new Object[] {javaItem});
-                    }
-                }
-            } catch (Exception e) {
-                throw invalidObjectException(e);
-            }
-            return o;
-        }
-
-        private Method[] setters;
-    }
-
-    /** Builder for when the target class has a constructor that is
-        annotated with @ConstructorProperties so we can see the correspondence
-        to getters.  */
-    private static final class CompositeBuilderViaConstructor
-            extends CompositeBuilder {
-
-        CompositeBuilderViaConstructor(Class<?> targetClass, String[] itemNames) {
-            super(targetClass, itemNames);
-        }
-
-        String applicable(Method[] getters) throws InvalidObjectException {
-
-            final Class<ConstructorProperties> propertyNamesClass = ConstructorProperties.class;
-
-            Class<?> targetClass = getTargetClass();
-            Constructor<?>[] constrs = targetClass.getConstructors();
-
-            // Applicable if and only if there are any annotated constructors
-            List<Constructor<?>> annotatedConstrList = newList();
-            for (Constructor<?> constr : constrs) {
-                if (Modifier.isPublic(constr.getModifiers())
-                        && constr.getAnnotation(propertyNamesClass) != null)
-                    annotatedConstrList.add(constr);
-            }
-
-            if (annotatedConstrList.isEmpty())
-                return "no constructor has @ConstructorProperties annotation";
-
-            annotatedConstructors = newList();
-
-            // Now check that all the annotated constructors are valid
-            // and throw an exception if not.
-
-            // First link the itemNames to their getter indexes.
-            Map<String, Integer> getterMap = newMap();
-            String[] itemNames = getItemNames();
-            for (int i = 0; i < itemNames.length; i++)
-                getterMap.put(itemNames[i], i);
-
-            // Run through the constructors making the checks in the spec.
-            // For each constructor, remember the correspondence between its
-            // parameters and the items.  The int[] for a constructor says
-            // what parameter index should get what item.  For example,
-            // if element 0 is 2 then that means that item 0 in the
-            // CompositeData goes to parameter 2 of the constructor.  If an
-            // element is -1, that item isn't given to the constructor.
-            // Also remember the set of properties in that constructor
-            // so we can test unambiguity.
-            Set<BitSet> getterIndexSets = newSet();
-            for (Constructor<?> constr : annotatedConstrList) {
-                String[] propertyNames =
-                    constr.getAnnotation(propertyNamesClass).value();
-
-                Type[] paramTypes = constr.getGenericParameterTypes();
-                if (paramTypes.length != propertyNames.length) {
-                    final String msg =
-                        "Number of constructor params does not match " +
-                        "@ConstructorProperties annotation: " + constr;
-                    throw new InvalidObjectException(msg);
-                }
-
-                int[] paramIndexes = new int[getters.length];
-                for (int i = 0; i < getters.length; i++)
-                    paramIndexes[i] = -1;
-                BitSet present = new BitSet();
-
-                for (int i = 0; i < propertyNames.length; i++) {
-                    String propertyName = propertyNames[i];
-                    if (!getterMap.containsKey(propertyName)) {
-                        String msg =
-                            "@ConstructorProperties includes name " + propertyName +
-                            " which does not correspond to a property";
-                        for (String getterName : getterMap.keySet()) {
-                            if (getterName.equalsIgnoreCase(propertyName)) {
-                                msg += " (differs only in case from property " +
-                                        getterName + ")";
-                            }
-                        }
-                        msg += ": " + constr;
-                        throw new InvalidObjectException(msg);
-                    }
-                    int getterIndex = getterMap.get(propertyName);
-                    paramIndexes[getterIndex] = i;
-                    if (present.get(getterIndex)) {
-                        final String msg =
-                            "@ConstructorProperties contains property " +
-                            propertyName + " more than once: " + constr;
-                        throw new InvalidObjectException(msg);
-                    }
-                    present.set(getterIndex);
-                    Method getter = getters[getterIndex];
-                    Type propertyType = getter.getGenericReturnType();
-                    if (!propertyType.equals(paramTypes[i])) {
-                        final String msg =
-                            "@ConstructorProperties gives property " + propertyName +
-                            " of type " + propertyType + " for parameter " +
-                            " of type " + paramTypes[i] + ": " + constr;
-                        throw new InvalidObjectException(msg);
-                    }
-                }
-
-                if (!getterIndexSets.add(present)) {
-                    final String msg =
-                        "More than one constructor has a @ConstructorProperties " +
-                        "annotation with this set of names: " +
-                        Arrays.toString(propertyNames);
-                    throw new InvalidObjectException(msg);
-                }
-
-                Constr c = new Constr(constr, paramIndexes, present);
-                annotatedConstructors.add(c);
-            }
-
-            /* Check that no possible set of items could lead to an ambiguous
-             * choice of constructor (spec requires this check).  For any
-             * pair of constructors, their union would be the minimal
-             * ambiguous set.  If this set itself corresponds to a constructor,
-             * there is no ambiguity for that pair.  In the usual case, one
-             * of the constructors is a superset of the other so the union is
-             * just the bigger constuctor.
-             *
-             * The algorithm here is quadratic in the number of constructors
-             * with a @ConstructorProperties annotation.  Typically this corresponds
-             * to the number of versions of the class there have been.  Ten
-             * would already be a large number, so although it's probably
-             * possible to have an O(n lg n) algorithm it wouldn't be
-             * worth the complexity.
-             */
-            for (BitSet a : getterIndexSets) {
-                boolean seen = false;
-                for (BitSet b : getterIndexSets) {
-                    if (a == b)
-                        seen = true;
-                    else if (seen) {
-                        BitSet u = new BitSet();
-                        u.or(a); u.or(b);
-                        if (!getterIndexSets.contains(u)) {
-                            Set<String> names = new TreeSet<String>();
-                            for (int i = u.nextSetBit(0); i >= 0;
-                                 i = u.nextSetBit(i+1))
-                                names.add(itemNames[i]);
-                            final String msg =
-                                "Constructors with @ConstructorProperties annotation " +
-                                " would be ambiguous for these items: " +
-                                names;
-                            throw new InvalidObjectException(msg);
-                        }
-                    }
-                }
-            }
-
-            return null; // success!
-        }
-
-        final Object fromCompositeData(CompositeData cd,
-                                       String[] itemNames,
-                                       MXBeanMapping[] mappings)
-                throws InvalidObjectException {
-            // The CompositeData might come from an earlier version where
-            // not all the items were present.  We look for a constructor
-            // that accepts just the items that are present.  Because of
-            // the ambiguity check in applicable(), we know there must be
-            // at most one maximally applicable constructor.
-            CompositeType ct = cd.getCompositeType();
-            BitSet present = new BitSet();
-            for (int i = 0; i < itemNames.length; i++) {
-                if (ct.getType(itemNames[i]) != null)
-                    present.set(i);
-            }
-
-            Constr max = null;
-            for (Constr constr : annotatedConstructors) {
-                if (subset(constr.presentParams, present) &&
-                        (max == null ||
-                         subset(max.presentParams, constr.presentParams)))
-                    max = constr;
-            }
-
-            if (max == null) {
-                final String msg =
-                    "No constructor has a @ConstructorProperties for this set of " +
-                    "items: " + ct.keySet();
-                throw new InvalidObjectException(msg);
-            }
-
-            Object[] params = new Object[max.presentParams.cardinality()];
-            for (int i = 0; i < itemNames.length; i++) {
-                if (!max.presentParams.get(i))
-                    continue;
-                Object openItem = cd.get(itemNames[i]);
-                Object javaItem = mappings[i].fromOpenValue(openItem);
-                int index = max.paramIndexes[i];
-                if (index >= 0)
-                    params[index] = javaItem;
-            }
-
-            try {
-                ReflectUtil.checkPackageAccess(max.constructor.getDeclaringClass());
-                return max.constructor.newInstance(params);
-            } catch (Exception e) {
-                final String msg =
-                    "Exception constructing " + getTargetClass().getName();
-                throw invalidObjectException(msg, e);
-            }
-        }
-
-        private static boolean subset(BitSet sub, BitSet sup) {
-            BitSet subcopy = (BitSet) sub.clone();
-            subcopy.andNot(sup);
-            return subcopy.isEmpty();
-        }
-
-        private static class Constr {
-            final Constructor<?> constructor;
-            final int[] paramIndexes;
-            final BitSet presentParams;
-            Constr(Constructor<?> constructor, int[] paramIndexes,
-                   BitSet presentParams) {
-                this.constructor = constructor;
-                this.paramIndexes = paramIndexes;
-                this.presentParams = presentParams;
-            }
-        }
-
-        private List<Constr> annotatedConstructors;
-    }
-
-    /** Builder for when the target class is an interface and contains
-        no methods other than getters.  Then we can make an instance
-        using a dynamic proxy that forwards the getters to the source
-        CompositeData.  */
-    private static final class CompositeBuilderViaProxy
-            extends CompositeBuilder {
-
-        CompositeBuilderViaProxy(Class<?> targetClass, String[] itemNames) {
-            super(targetClass, itemNames);
-        }
-
-        String applicable(Method[] getters) {
-            Class<?> targetClass = getTargetClass();
-            if (!targetClass.isInterface())
-                return "not an interface";
-            Set<Method> methods =
-                newSet(Arrays.asList(targetClass.getMethods()));
-            methods.removeAll(Arrays.asList(getters));
-            /* If the interface has any methods left over, they better be
-             * public methods that are already present in java.lang.Object.
-             */
-            String bad = null;
-            for (Method m : methods) {
-                String mname = m.getName();
-                Class<?>[] mparams = m.getParameterTypes();
-                try {
-                    Method om = Object.class.getMethod(mname, mparams);
-                    if (!Modifier.isPublic(om.getModifiers()))
-                        bad = mname;
-                } catch (NoSuchMethodException e) {
-                    bad = mname;
-                }
-                /* We don't catch SecurityException since it shouldn't
-                 * happen for a method in Object and if it does we would
-                 * like to know about it rather than mysteriously complaining.
-                 */
-            }
-            if (bad != null)
-                return "contains methods other than getters (" + bad + ")";
-            return null; // success!
-        }
-
-        final Object fromCompositeData(CompositeData cd,
-                                       String[] itemNames,
-                                       MXBeanMapping[] converters) {
-            final Class<?> targetClass = getTargetClass();
-            return
-                Proxy.newProxyInstance(targetClass.getClassLoader(),
-                                       new Class<?>[] {targetClass},
-                                       new CompositeDataInvocationHandler(cd));
-        }
-    }
-
-    static InvalidObjectException invalidObjectException(String msg,
-                                                         Throwable cause) {
-        return EnvHelp.initCause(new InvalidObjectException(msg), cause);
-    }
-
-    static InvalidObjectException invalidObjectException(Throwable cause) {
-        return invalidObjectException(cause.getMessage(), cause);
-    }
-
-    static OpenDataException openDataException(String msg, Throwable cause) {
-        return EnvHelp.initCause(new OpenDataException(msg), cause);
-    }
-
-    static OpenDataException openDataException(Throwable cause) {
-        return openDataException(cause.getMessage(), cause);
-    }
-
-    static void mustBeComparable(Class<?> collection, Type element)
-            throws OpenDataException {
-        if (!(element instanceof Class<?>)
-            || !Comparable.class.isAssignableFrom((Class<?>) element)) {
-            final String msg =
-                "Parameter class " + element + " of " +
-                collection.getName() + " does not implement " +
-                Comparable.class.getName();
-            throw new OpenDataException(msg);
-        }
-    }
-
-    /**
-     * Utility method to take a string and convert it to normal Java variable
-     * name capitalization.  This normally means converting the first
-     * character from upper case to lower case, but in the (unusual) special
-     * case when there is more than one character and both the first and
-     * second characters are upper case, we leave it alone.
-     * <p>
-     * Thus "FooBah" becomes "fooBah" and "X" becomes "x", but "URL" stays
-     * as "URL".
-     *
-     * @param  name The string to be decapitalized.
-     * @return  The decapitalized version of the string.
-     */
-    public static String decapitalize(String name) {
-        if (name == null || name.length() == 0) {
-            return name;
-        }
-        int offset1 = Character.offsetByCodePoints(name, 0, 1);
-        // Should be name.offsetByCodePoints but 6242664 makes this fail
-        if (offset1 < name.length() &&
-                Character.isUpperCase(name.codePointAt(offset1)))
-            return name;
-        return name.substring(0, offset1).toLowerCase() +
-               name.substring(offset1);
-    }
-
-    /**
-     * Reverse operation for java.beans.Introspector.decapitalize.  For any s,
-     * capitalize(decapitalize(s)).equals(s).  The reverse is not true:
-     * e.g. capitalize("uRL") produces "URL" which is unchanged by
-     * decapitalize.
-     */
-    static String capitalize(String name) {
-        if (name == null || name.length() == 0)
-            return name;
-        int offset1 = name.offsetByCodePoints(0, 1);
-        return name.substring(0, offset1).toUpperCase() +
-               name.substring(offset1);
-    }
-
-    public static String propertyName(Method m) {
-        String rest = null;
-        String name = m.getName();
-        if (name.startsWith("get"))
-            rest = name.substring(3);
-        else if (name.startsWith("is") && m.getReturnType() == boolean.class)
-            rest = name.substring(2);
-        if (rest == null || rest.length() == 0
-            || m.getParameterTypes().length > 0
-            || m.getReturnType() == void.class
-            || name.equals("getClass"))
-            return null;
-        return rest;
-    }
-
-    private final static Map<Type, Type> inProgress = newIdentityHashMap();
-    // really an IdentityHashSet but that doesn't exist
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/mbeanserver/DescriptorCache.java b/ojluni/src/main/java/com/sun/jmx/mbeanserver/DescriptorCache.java
deleted file mode 100755
index 6a0ad7e..0000000
--- a/ojluni/src/main/java/com/sun/jmx/mbeanserver/DescriptorCache.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-package com.sun.jmx.mbeanserver;
-
-import java.lang.ref.WeakReference;
-import java.util.WeakHashMap;
-import javax.management.Descriptor;
-import javax.management.ImmutableDescriptor;
-import javax.management.JMX;
-
-public class DescriptorCache {
-    private DescriptorCache() {
-    }
-
-    static DescriptorCache getInstance() {
-        return instance;
-    }
-
-    public static DescriptorCache getInstance(JMX proof) {
-        if (proof != null)
-            return instance;
-        else
-            return null;
-    }
-
-    public ImmutableDescriptor get(ImmutableDescriptor descriptor) {
-        WeakReference<ImmutableDescriptor> wr = map.get(descriptor);
-        ImmutableDescriptor got = (wr == null) ? null : wr.get();
-        if (got != null)
-            return got;
-        map.put(descriptor, new WeakReference<ImmutableDescriptor>(descriptor));
-        return descriptor;
-    }
-
-    public ImmutableDescriptor union(Descriptor... descriptors) {
-        return get(ImmutableDescriptor.union(descriptors));
-    }
-
-    private final static DescriptorCache instance = new DescriptorCache();
-    private final WeakHashMap<ImmutableDescriptor,
-                              WeakReference<ImmutableDescriptor>>
-        map = new WeakHashMap<ImmutableDescriptor,
-                              WeakReference<ImmutableDescriptor>>();
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/mbeanserver/DynamicMBean2.java b/ojluni/src/main/java/com/sun/jmx/mbeanserver/DynamicMBean2.java
deleted file mode 100755
index d5b37bc..0000000
--- a/ojluni/src/main/java/com/sun/jmx/mbeanserver/DynamicMBean2.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-package com.sun.jmx.mbeanserver;
-
-import javax.management.DynamicMBean;
-import javax.management.MBeanServer;
-import javax.management.ObjectName;
-
-/**
- * A dynamic MBean that wraps an underlying resource.  A version of this
- * interface might eventually appear in the public JMX API.
- *
- * @since 1.6
- */
-public interface DynamicMBean2 extends DynamicMBean {
-    /**
-     * The resource corresponding to this MBean.  This is the object whose
-     * class name should be reflected by the MBean's
-     * getMBeanInfo().getClassName() for example.  For a "plain"
-     * DynamicMBean it will be "this".  For an MBean that wraps another
-     * object, like javax.management.StandardMBean, it will be the wrapped
-     * object.
-     */
-    public Object getResource();
-
-    /**
-     * The name of this MBean's class, as used by permission checks.
-     * This is typically equal to getResource().getClass().getName().
-     * This method is typically faster, sometimes much faster,
-     * than getMBeanInfo().getClassName(), but should return the same
-     * result.
-     */
-    public String getClassName();
-
-    /**
-     * Additional registration hook.  This method is called after
-     * {@link javax.management.MBeanRegistration#preRegister preRegister}.
-     * Unlike that method, if it throws an exception and the MBean implements
-     * {@code MBeanRegistration}, then {@link
-     * javax.management.MBeanRegistration#postRegister postRegister(false)}
-     * will be called on the MBean.  This is the behavior that the MBean
-     * expects for a problem that does not come from its own preRegister
-     * method.
-     */
-    public void preRegister2(MBeanServer mbs, ObjectName name)
-            throws Exception;
-
-    /**
-     * Additional registration hook.  This method is called if preRegister
-     * and preRegister2 succeed, but then the MBean cannot be registered
-     * (for example because there is already another MBean of the same name).
-     */
-    public void registerFailed();
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/mbeanserver/GetPropertyAction.java b/ojluni/src/main/java/com/sun/jmx/mbeanserver/GetPropertyAction.java
deleted file mode 100755
index 6dada3e..0000000
--- a/ojluni/src/main/java/com/sun/jmx/mbeanserver/GetPropertyAction.java
+++ /dev/null
@@ -1,46 +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.
- */
-
-package com.sun.jmx.mbeanserver;
-
-import java.security.PrivilegedAction;
-
-/**
- * Utility class to be used by the method <tt>AccessControler.doPrivileged</tt>
- * to get a system property.
- *
- * @since 1.5
- */
-public class GetPropertyAction implements PrivilegedAction<String> {
-    private final String key;
-
-    public GetPropertyAction(String key) {
-        this.key = key;
-    }
-
-    public String run() {
-        return System.getProperty(key);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/mbeanserver/Introspector.java b/ojluni/src/main/java/com/sun/jmx/mbeanserver/Introspector.java
deleted file mode 100755
index c30a7eb..0000000
--- a/ojluni/src/main/java/com/sun/jmx/mbeanserver/Introspector.java
+++ /dev/null
@@ -1,794 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-package com.sun.jmx.mbeanserver;
-
-import java.lang.annotation.Annotation;
-import java.lang.ref.SoftReference;
-import java.lang.reflect.AnnotatedElement;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.lang.reflect.Proxy;
-import java.lang.reflect.UndeclaredThrowableException;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.LinkedList;
-import java.util.Locale;
-import java.util.Map;
-import java.util.WeakHashMap;
-
-import javax.management.Descriptor;
-import javax.management.DescriptorKey;
-import javax.management.DynamicMBean;
-import javax.management.ImmutableDescriptor;
-import javax.management.MBeanInfo;
-import javax.management.NotCompliantMBeanException;
-
-import com.sun.jmx.remote.util.EnvHelp;
-import java.beans.BeanInfo;
-import java.beans.PropertyDescriptor;
-import java.lang.reflect.Array;
-import java.lang.reflect.InvocationTargetException;
-import javax.management.AttributeNotFoundException;
-import javax.management.openmbean.CompositeData;
-import sun.reflect.misc.MethodUtil;
-import sun.reflect.misc.ReflectUtil;
-
-/**
- * This class contains the methods for performing all the tests needed to verify
- * that a class represents a JMX compliant MBean.
- *
- * @since 1.5
- */
-public class Introspector {
-
-
-     /*
-     * ------------------------------------------
-     *  PRIVATE CONSTRUCTORS
-     * ------------------------------------------
-     */
-
-    // private constructor defined to "hide" the default public constructor
-    private Introspector() {
-
-        // ------------------------------
-        // ------------------------------
-
-    }
-
-    /*
-     * ------------------------------------------
-     *  PUBLIC METHODS
-     * ------------------------------------------
-     */
-
-    /**
-     * Tell whether a MBean of the given class is a Dynamic MBean.
-     * This method does nothing more than returning
-     * <pre>
-     * javax.management.DynamicMBean.class.isAssignableFrom(c)
-     * </pre>
-     * This method does not check for any JMX MBean compliance:
-     * <ul><li>If <code>true</code> is returned, then instances of
-     *     <code>c</code> are DynamicMBean.</li>
-     *     <li>If <code>false</code> is returned, then no further
-     *     assumption can be made on instances of <code>c</code>.
-     *     In particular, instances of <code>c</code> may, or may not
-     *     be JMX standard MBeans.</li>
-     * </ul>
-     * @param c The class of the MBean under examination.
-     * @return <code>true</code> if instances of <code>c</code> are
-     *         Dynamic MBeans, <code>false</code> otherwise.
-     *
-     **/
-    public static final boolean isDynamic(final Class<?> c) {
-        // Check if the MBean implements the DynamicMBean interface
-        return javax.management.DynamicMBean.class.isAssignableFrom(c);
-    }
-
-    /**
-     * Basic method for testing that a MBean of a given class can be
-     * instantiated by the MBean server.<p>
-     * This method checks that:
-     * <ul><li>The given class is a concrete class.</li>
-     *     <li>The given class exposes at least one public constructor.</li>
-     * </ul>
-     * If these conditions are not met, throws a NotCompliantMBeanException.
-     * @param c The class of the MBean we want to create.
-     * @exception NotCompliantMBeanException if the MBean class makes it
-     *            impossible to instantiate the MBean from within the
-     *            MBeanServer.
-     *
-     **/
-    public static void testCreation(Class<?> c)
-        throws NotCompliantMBeanException {
-        // Check if the class is a concrete class
-        final int mods = c.getModifiers();
-        if (Modifier.isAbstract(mods) || Modifier.isInterface(mods)) {
-            throw new NotCompliantMBeanException("MBean class must be concrete");
-        }
-
-        // Check if the MBean has a public constructor
-        final Constructor<?>[] consList = c.getConstructors();
-        if (consList.length == 0) {
-            throw new NotCompliantMBeanException("MBean class must have public constructor");
-        }
-    }
-
-    public static void checkCompliance(Class<?> mbeanClass)
-    throws NotCompliantMBeanException {
-        // Is DynamicMBean?
-        //
-        if (DynamicMBean.class.isAssignableFrom(mbeanClass))
-            return;
-        // Is Standard MBean?
-        //
-        final Exception mbeanException;
-        try {
-            getStandardMBeanInterface(mbeanClass);
-            return;
-        } catch (NotCompliantMBeanException e) {
-            mbeanException = e;
-        }
-        // Is MXBean?
-        //
-        final Exception mxbeanException;
-        try {
-            getMXBeanInterface(mbeanClass);
-            return;
-        } catch (NotCompliantMBeanException e) {
-            mxbeanException = e;
-        }
-        final String msg =
-            "MBean class " + mbeanClass.getName() + " does not implement " +
-            "DynamicMBean, and neither follows the Standard MBean conventions (" +
-            mbeanException.toString() + ") nor the MXBean conventions (" +
-            mxbeanException.toString() + ")";
-        throw new NotCompliantMBeanException(msg);
-    }
-
-    public static <T> DynamicMBean makeDynamicMBean(T mbean)
-        throws NotCompliantMBeanException {
-        if (mbean instanceof DynamicMBean)
-            return (DynamicMBean) mbean;
-        final Class<?> mbeanClass = mbean.getClass();
-        Class<? super T> c = null;
-        try {
-            c = Util.cast(getStandardMBeanInterface(mbeanClass));
-        } catch (NotCompliantMBeanException e) {
-            // Ignore exception - we need to check whether
-            // mbean is an MXBean first.
-        }
-        if (c != null)
-            return new StandardMBeanSupport(mbean, c);
-
-        try {
-            c = Util.cast(getMXBeanInterface(mbeanClass));
-        } catch (NotCompliantMBeanException e) {
-            // Ignore exception - we cannot decide whether mbean was supposed
-            // to be an MBean or an MXBean. We will call checkCompliance()
-            // to generate the appropriate exception.
-        }
-        if (c != null)
-            return new MXBeanSupport(mbean, c);
-        checkCompliance(mbeanClass);
-        throw new NotCompliantMBeanException("Not compliant"); // not reached
-    }
-
-    /**
-     * Basic method for testing if a given class is a JMX compliant MBean.
-     *
-     * @param baseClass The class to be tested
-     *
-     * @return <code>null</code> if the MBean is a DynamicMBean,
-     *         the computed {@link javax.management.MBeanInfo} otherwise.
-     * @exception NotCompliantMBeanException The specified class is not a
-     *            JMX compliant MBean
-     */
-    public static MBeanInfo testCompliance(Class<?> baseClass)
-        throws NotCompliantMBeanException {
-
-        // ------------------------------
-        // ------------------------------
-
-        // Check if the MBean implements the MBean or the Dynamic
-        // MBean interface
-        if (isDynamic(baseClass))
-            return null;
-
-        return testCompliance(baseClass, null);
-    }
-
-    public static void testComplianceMXBeanInterface(Class<?> interfaceClass)
-            throws NotCompliantMBeanException {
-        MXBeanIntrospector.getInstance().getAnalyzer(interfaceClass);
-    }
-
-    public static void testComplianceMBeanInterface(Class<?> interfaceClass)
-            throws NotCompliantMBeanException{
-        StandardMBeanIntrospector.getInstance().getAnalyzer(interfaceClass);
-    }
-
-    /**
-     * Basic method for testing if a given class is a JMX compliant
-     * Standard MBean.  This method is only called by the legacy code
-     * in com.sun.management.jmx.
-     *
-     * @param baseClass The class to be tested.
-     *
-     * @param mbeanInterface the MBean interface that the class implements,
-     * or null if the interface must be determined by introspection.
-     *
-     * @return the computed {@link javax.management.MBeanInfo}.
-     * @exception NotCompliantMBeanException The specified class is not a
-     *            JMX compliant Standard MBean
-     */
-    public static synchronized MBeanInfo
-            testCompliance(final Class<?> baseClass,
-                           Class<?> mbeanInterface)
-            throws NotCompliantMBeanException {
-        if (mbeanInterface == null)
-            mbeanInterface = getStandardMBeanInterface(baseClass);
-        ReflectUtil.checkPackageAccess(mbeanInterface);
-        MBeanIntrospector<?> introspector = StandardMBeanIntrospector.getInstance();
-        return getClassMBeanInfo(introspector, baseClass, mbeanInterface);
-    }
-
-    private static <M> MBeanInfo
-            getClassMBeanInfo(MBeanIntrospector<M> introspector,
-                              Class<?> baseClass, Class<?> mbeanInterface)
-    throws NotCompliantMBeanException {
-        PerInterface<M> perInterface = introspector.getPerInterface(mbeanInterface);
-        return introspector.getClassMBeanInfo(baseClass, perInterface);
-    }
-
-    /**
-     * Get the MBean interface implemented by a JMX Standard
-     * MBean class. This method is only called by the legacy
-     * code in "com.sun.management.jmx".
-     *
-     * @param baseClass The class to be tested.
-     *
-     * @return The MBean interface implemented by the MBean.
-     *         Return <code>null</code> if the MBean is a DynamicMBean,
-     *         or if no MBean interface is found.
-     */
-    public static Class<?> getMBeanInterface(Class<?> baseClass) {
-        // Check if the given class implements the MBean interface
-        // or the Dynamic MBean interface
-        if (isDynamic(baseClass)) return null;
-        try {
-            return getStandardMBeanInterface(baseClass);
-        } catch (NotCompliantMBeanException e) {
-            return null;
-        }
-    }
-
-    /**
-     * Get the MBean interface implemented by a JMX Standard MBean class.
-     *
-     * @param baseClass The class to be tested.
-     *
-     * @return The MBean interface implemented by the Standard MBean.
-     *
-     * @throws NotCompliantMBeanException The specified class is
-     * not a JMX compliant Standard MBean.
-     */
-    public static <T> Class<? super T> getStandardMBeanInterface(Class<T> baseClass)
-    throws NotCompliantMBeanException {
-        Class<? super T> current = baseClass;
-        Class<? super T> mbeanInterface = null;
-        while (current != null) {
-            mbeanInterface =
-                findMBeanInterface(current, current.getName());
-            if (mbeanInterface != null) break;
-            current = current.getSuperclass();
-        }
-        if (mbeanInterface != null) {
-            return mbeanInterface;
-        } else {
-            final String msg =
-                "Class " + baseClass.getName() +
-                " is not a JMX compliant Standard MBean";
-            throw new NotCompliantMBeanException(msg);
-        }
-    }
-
-    /**
-     * Get the MXBean interface implemented by a JMX MXBean class.
-     *
-     * @param baseClass The class to be tested.
-     *
-     * @return The MXBean interface implemented by the MXBean.
-     *
-     * @throws NotCompliantMBeanException The specified class is
-     * not a JMX compliant MXBean.
-     */
-    public static <T> Class<? super T> getMXBeanInterface(Class<T> baseClass)
-        throws NotCompliantMBeanException {
-        try {
-            return MXBeanSupport.findMXBeanInterface(baseClass);
-        } catch (Exception e) {
-            throw throwException(baseClass,e);
-        }
-    }
-
-    /*
-     * ------------------------------------------
-     *  PRIVATE METHODS
-     * ------------------------------------------
-     */
-
-
-    /**
-     * Try to find the MBean interface corresponding to the class aName
-     * - i.e. <i>aName</i>MBean, from within aClass and its superclasses.
-     **/
-    private static <T> Class<? super T> findMBeanInterface(
-            Class<T> aClass, String aName) {
-        Class<? super T> current = aClass;
-        while (current != null) {
-            final Class<?>[] interfaces = current.getInterfaces();
-            final int len = interfaces.length;
-            for (int i=0;i<len;i++)  {
-                Class<? super T> inter = Util.cast(interfaces[i]);
-                inter = implementsMBean(inter, aName);
-                if (inter != null) return inter;
-            }
-            current = current.getSuperclass();
-        }
-        return null;
-    }
-
-    public static Descriptor descriptorForElement(final AnnotatedElement elmt) {
-        if (elmt == null)
-            return ImmutableDescriptor.EMPTY_DESCRIPTOR;
-        final Annotation[] annots = elmt.getAnnotations();
-        return descriptorForAnnotations(annots);
-    }
-
-    public static Descriptor descriptorForAnnotations(Annotation[] annots) {
-        if (annots.length == 0)
-            return ImmutableDescriptor.EMPTY_DESCRIPTOR;
-        Map<String, Object> descriptorMap = new HashMap<String, Object>();
-        for (Annotation a : annots) {
-            Class<? extends Annotation> c = a.annotationType();
-            Method[] elements = c.getMethods();
-            boolean packageAccess = false;
-            for (Method element : elements) {
-                DescriptorKey key = element.getAnnotation(DescriptorKey.class);
-                if (key != null) {
-                    String name = key.value();
-                    Object value;
-                    try {
-                        // Avoid checking access more than once per annotation
-                        if (!packageAccess) {
-                            ReflectUtil.checkPackageAccess(c);
-                            packageAccess = true;
-                        }
-                        value = MethodUtil.invoke(element, a, null);
-                    } catch (RuntimeException e) {
-                        // we don't expect this - except for possibly
-                        // security exceptions?
-                        // RuntimeExceptions shouldn't be "UndeclaredThrowable".
-                        // anyway...
-                        //
-                        throw e;
-                    } catch (Exception e) {
-                        // we don't expect this
-                        throw new UndeclaredThrowableException(e);
-                    }
-                    value = annotationToField(value);
-                    Object oldValue = descriptorMap.put(name, value);
-                    if (oldValue != null && !equals(oldValue, value)) {
-                        final String msg =
-                            "Inconsistent values for descriptor field " + name +
-                            " from annotations: " + value + " :: " + oldValue;
-                        throw new IllegalArgumentException(msg);
-                    }
-                }
-            }
-        }
-
-        if (descriptorMap.isEmpty())
-            return ImmutableDescriptor.EMPTY_DESCRIPTOR;
-        else
-            return new ImmutableDescriptor(descriptorMap);
-    }
-
-    /**
-     * Throws a NotCompliantMBeanException or a SecurityException.
-     * @param notCompliant the class which was under examination
-     * @param cause the raeson why NotCompliantMBeanException should
-     *        be thrown.
-     * @return nothing - this method always throw an exception.
-     *         The return type makes it possible to write
-     *         <pre> throw throwException(clazz,cause); </pre>
-     * @throws SecurityException - if cause is a SecurityException
-     * @throws NotCompliantMBeanException otherwise.
-     **/
-    static NotCompliantMBeanException throwException(Class<?> notCompliant,
-            Throwable cause)
-            throws NotCompliantMBeanException, SecurityException {
-        if (cause instanceof SecurityException)
-            throw (SecurityException) cause;
-        if (cause instanceof NotCompliantMBeanException)
-            throw (NotCompliantMBeanException)cause;
-        final String classname =
-                (notCompliant==null)?"null class":notCompliant.getName();
-        final String reason =
-                (cause==null)?"Not compliant":cause.getMessage();
-        final NotCompliantMBeanException res =
-                new NotCompliantMBeanException(classname+": "+reason);
-        res.initCause(cause);
-        throw res;
-    }
-
-    // Convert a value from an annotation element to a descriptor field value
-    // E.g. with @interface Foo {class value()} an annotation @Foo(String.class)
-    // will produce a Descriptor field value "java.lang.String"
-    private static Object annotationToField(Object x) {
-        // An annotation element cannot have a null value but never mind
-        if (x == null)
-            return null;
-        if (x instanceof Number || x instanceof String ||
-                x instanceof Character || x instanceof Boolean ||
-                x instanceof String[])
-            return x;
-        // Remaining possibilities: array of primitive (e.g. int[]),
-        // enum, class, array of enum or class.
-        Class<?> c = x.getClass();
-        if (c.isArray()) {
-            if (c.getComponentType().isPrimitive())
-                return x;
-            Object[] xx = (Object[]) x;
-            String[] ss = new String[xx.length];
-            for (int i = 0; i < xx.length; i++)
-                ss[i] = (String) annotationToField(xx[i]);
-            return ss;
-        }
-        if (x instanceof Class<?>)
-            return ((Class<?>) x).getName();
-        if (x instanceof Enum<?>)
-            return ((Enum<?>) x).name();
-        // The only other possibility is that the value is another
-        // annotation, or that the language has evolved since this code
-        // was written.  We don't allow for either of those currently.
-        // If it is indeed another annotation, then x will be a proxy
-        // with an unhelpful name like $Proxy2.  So we extract the
-        // proxy's interface to use that in the exception message.
-        if (Proxy.isProxyClass(c))
-            c = c.getInterfaces()[0];  // array "can't be empty"
-        throw new IllegalArgumentException("Illegal type for annotation " +
-                "element using @DescriptorKey: " + c.getName());
-    }
-
-    // This must be consistent with the check for duplicate field values in
-    // ImmutableDescriptor.union.  But we don't expect to be called very
-    // often so this inefficient check should be enough.
-    private static boolean equals(Object x, Object y) {
-        return Arrays.deepEquals(new Object[] {x}, new Object[] {y});
-    }
-
-    /**
-     * Returns the XXMBean interface or null if no such interface exists
-     *
-     * @param c The interface to be tested
-     * @param clName The name of the class implementing this interface
-     */
-    private static <T> Class<? super T> implementsMBean(Class<T> c, String clName) {
-        String clMBeanName = clName + "MBean";
-        if (c.getName().equals(clMBeanName)) {
-            return c;
-        }
-        Class<?>[] interfaces = c.getInterfaces();
-        for (int i = 0;i < interfaces.length; i++) {
-            if (interfaces[i].getName().equals(clMBeanName))
-                return Util.cast(interfaces[i]);
-        }
-
-        return null;
-    }
-
-    public static Object elementFromComplex(Object complex, String element)
-    throws AttributeNotFoundException {
-        try {
-            if (complex.getClass().isArray() && element.equals("length")) {
-                return Array.getLength(complex);
-            } else if (complex instanceof CompositeData) {
-                return ((CompositeData) complex).get(element);
-            } else {
-                // Java Beans introspection
-                //
-                Class<?> clazz = complex.getClass();
-                Method readMethod = null;
-                if (BeansHelper.isAvailable()) {
-                    Object bi = BeansHelper.getBeanInfo(clazz);
-                    Object[] pds = BeansHelper.getPropertyDescriptors(bi);
-                    for (Object pd: pds) {
-                        if (BeansHelper.getPropertyName(pd).equals(element)) {
-                            readMethod = BeansHelper.getReadMethod(pd);
-                            break;
-                        }
-                    }
-                } else {
-                    // Java Beans not available so use simple introspection
-                    // to locate method
-                    readMethod = SimpleIntrospector.getReadMethod(clazz, element);
-                }
-                if (readMethod != null) {
-                    ReflectUtil.checkPackageAccess(readMethod.getDeclaringClass());
-                    return MethodUtil.invoke(readMethod, complex, new Class[0]);
-                }
-
-                throw new AttributeNotFoundException(
-                    "Could not find the getter method for the property " +
-                    element + " using the Java Beans introspector");
-            }
-        } catch (InvocationTargetException e) {
-            throw new IllegalArgumentException(e);
-        } catch (AttributeNotFoundException e) {
-            throw e;
-        } catch (Exception e) {
-            throw EnvHelp.initCause(
-                new AttributeNotFoundException(e.getMessage()), e);
-        }
-    }
-
-    /**
-     * A simple introspector that uses reflection to analyze a class and
-     * identify its "getter" methods. This class is intended for use only when
-     * Java Beans is not present (which implies that there isn't explicit
-     * information about the bean available).
-     */
-    private static class SimpleIntrospector {
-        private SimpleIntrospector() { }
-
-        private static final String GET_METHOD_PREFIX = "get";
-        private static final String IS_METHOD_PREFIX = "is";
-
-        // cache to avoid repeated lookups
-        private static final Map<Class<?>,SoftReference<List<Method>>> cache =
-            Collections.synchronizedMap(
-                new WeakHashMap<Class<?>,SoftReference<List<Method>>> ());
-
-        /**
-         * Returns the list of methods cached for the given class, or {@code null}
-         * if not cached.
-         */
-        private static List<Method> getCachedMethods(Class<?> clazz) {
-            // return cached methods if possible
-            SoftReference<List<Method>> ref = cache.get(clazz);
-            if (ref != null) {
-                List<Method> cached = ref.get();
-                if (cached != null)
-                    return cached;
-            }
-            return null;
-        }
-
-        /**
-         * Returns {@code true} if the given method is a "getter" method (where
-         * "getter" method is a public method of the form getXXX or "boolean
-         * isXXX")
-         */
-        static boolean isReadMethod(Method method) {
-            // ignore static methods
-            int modifiers = method.getModifiers();
-            if (Modifier.isStatic(modifiers))
-                return false;
-
-            String name = method.getName();
-            Class<?>[] paramTypes = method.getParameterTypes();
-            int paramCount = paramTypes.length;
-
-            if (paramCount == 0 && name.length() > 2) {
-                // boolean isXXX()
-                if (name.startsWith(IS_METHOD_PREFIX))
-                    return (method.getReturnType() == boolean.class);
-                // getXXX()
-                if (name.length() > 3 && name.startsWith(GET_METHOD_PREFIX))
-                    return (method.getReturnType() != void.class);
-            }
-            return false;
-        }
-
-        /**
-         * Returns the list of "getter" methods for the given class. The list
-         * is ordered so that isXXX methods appear before getXXX methods - this
-         * is for compatability with the JavaBeans Introspector.
-         */
-        static List<Method> getReadMethods(Class<?> clazz) {
-            // return cached result if available
-            List<Method> cachedResult = getCachedMethods(clazz);
-            if (cachedResult != null)
-                return cachedResult;
-
-            // get list of public methods, filtering out methods that have
-            // been overridden to return a more specific type.
-            List<Method> methods =
-                StandardMBeanIntrospector.getInstance().getMethods(clazz);
-            methods = MBeanAnalyzer.eliminateCovariantMethods(methods);
-
-            // filter out the non-getter methods
-            List<Method> result = new LinkedList<Method>();
-            for (Method m: methods) {
-                if (isReadMethod(m)) {
-                    // favor isXXX over getXXX
-                    if (m.getName().startsWith(IS_METHOD_PREFIX)) {
-                        result.add(0, m);
-                    } else {
-                        result.add(m);
-                    }
-                }
-            }
-
-            // add result to cache
-            cache.put(clazz, new SoftReference<List<Method>>(result));
-
-            return result;
-        }
-
-        /**
-         * Returns the "getter" to read the given property from the given class or
-         * {@code null} if no method is found.
-         */
-        static Method getReadMethod(Class<?> clazz, String property) {
-            // first character in uppercase (compatability with JavaBeans)
-            property = property.substring(0, 1).toUpperCase(Locale.ENGLISH) +
-                property.substring(1);
-            String getMethod = GET_METHOD_PREFIX + property;
-            String isMethod = IS_METHOD_PREFIX + property;
-            for (Method m: getReadMethods(clazz)) {
-                String name = m.getName();
-                if (name.equals(isMethod) || name.equals(getMethod)) {
-                    return m;
-                }
-            }
-            return null;
-        }
-    }
-
-    /**
-     * A class that provides access to the JavaBeans Introspector and
-     * PropertyDescriptors without creating a static dependency on java.beans.
-     */
-    private static class BeansHelper {
-        private static final Class<?> introspectorClass =
-            getClass("java.beans.Introspector");
-        private static final Class<?> beanInfoClass =
-            (introspectorClass == null) ? null : getClass("java.beans.BeanInfo");
-        private static final Class<?> getPropertyDescriptorClass =
-            (beanInfoClass == null) ? null : getClass("java.beans.PropertyDescriptor");
-
-        private static final Method getBeanInfo =
-            getMethod(introspectorClass, "getBeanInfo", Class.class);
-        private static final Method getPropertyDescriptors =
-            getMethod(beanInfoClass, "getPropertyDescriptors");
-        private static final Method getPropertyName =
-            getMethod(getPropertyDescriptorClass, "getName");
-        private static final Method getReadMethod =
-            getMethod(getPropertyDescriptorClass, "getReadMethod");
-
-        private static Class<?> getClass(String name) {
-            try {
-                return Class.forName(name, true, null);
-            } catch (ClassNotFoundException e) {
-                return null;
-            }
-        }
-        private static Method getMethod(Class<?> clazz,
-                                        String name,
-                                        Class<?>... paramTypes)
-        {
-            if (clazz != null) {
-                try {
-                    return clazz.getMethod(name, paramTypes);
-                } catch (NoSuchMethodException e) {
-                    throw new AssertionError(e);
-                }
-            } else {
-                return null;
-            }
-        }
-
-        private BeansHelper() { }
-
-        /**
-         * Returns {@code true} if java.beans is available.
-         */
-        static boolean isAvailable() {
-            return introspectorClass != null;
-        }
-
-        /**
-         * Invokes java.beans.Introspector.getBeanInfo(Class)
-         */
-        static Object getBeanInfo(Class<?> clazz) throws Exception {
-            try {
-                return getBeanInfo.invoke(null, clazz);
-            } catch (InvocationTargetException e) {
-                Throwable cause = e.getCause();
-                if (cause instanceof Exception)
-                    throw (Exception)cause;
-                throw new AssertionError(e);
-            } catch (IllegalAccessException iae) {
-                throw new AssertionError(iae);
-            }
-        }
-
-        /**
-         * Invokes java.beans.BeanInfo.getPropertyDescriptors()
-         */
-        static Object[] getPropertyDescriptors(Object bi) {
-            try {
-                return (Object[])getPropertyDescriptors.invoke(bi);
-            } catch (InvocationTargetException e) {
-                Throwable cause = e.getCause();
-                if (cause instanceof RuntimeException)
-                    throw (RuntimeException)cause;
-                throw new AssertionError(e);
-            } catch (IllegalAccessException iae) {
-                throw new AssertionError(iae);
-            }
-        }
-
-        /**
-         * Invokes java.beans.PropertyDescriptor.getName()
-         */
-        static String getPropertyName(Object pd) {
-            try {
-                return (String)getPropertyName.invoke(pd);
-            } catch (InvocationTargetException e) {
-                Throwable cause = e.getCause();
-                if (cause instanceof RuntimeException)
-                    throw (RuntimeException)cause;
-                throw new AssertionError(e);
-            } catch (IllegalAccessException iae) {
-                throw new AssertionError(iae);
-            }
-        }
-
-        /**
-         * Invokes java.beans.PropertyDescriptor.getReadMethod()
-         */
-        static Method getReadMethod(Object pd) {
-            try {
-                return (Method)getReadMethod.invoke(pd);
-            } catch (InvocationTargetException e) {
-                Throwable cause = e.getCause();
-                if (cause instanceof RuntimeException)
-                    throw (RuntimeException)cause;
-                throw new AssertionError(e);
-            } catch (IllegalAccessException iae) {
-                throw new AssertionError(iae);
-            }
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/mbeanserver/JmxMBeanServer.java b/ojluni/src/main/java/com/sun/jmx/mbeanserver/JmxMBeanServer.java
deleted file mode 100755
index 6a3e770..0000000
--- a/ojluni/src/main/java/com/sun/jmx/mbeanserver/JmxMBeanServer.java
+++ /dev/null
@@ -1,1522 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-package com.sun.jmx.mbeanserver;
-
-import com.sun.jmx.interceptor.DefaultMBeanServerInterceptor;
-import com.sun.jmx.interceptor.MBeanServerInterceptor;
-import static com.sun.jmx.defaults.JmxProperties.MBEANSERVER_LOGGER;
-
-import java.io.ObjectInputStream;
-import java.security.AccessController;
-import java.security.Permission;
-import java.security.PrivilegedAction;
-import java.security.PrivilegedExceptionAction;
-import java.util.List;
-import java.util.Set;
-import java.util.logging.Level;
-
-import javax.management.Attribute;
-import javax.management.AttributeList;
-import javax.management.AttributeNotFoundException;
-import javax.management.InstanceAlreadyExistsException;
-import javax.management.InstanceNotFoundException;
-import javax.management.IntrospectionException;
-import javax.management.InvalidAttributeValueException;
-import javax.management.ListenerNotFoundException;
-import javax.management.MBeanException;
-import javax.management.MBeanInfo;
-import javax.management.MBeanPermission;
-import javax.management.MBeanRegistrationException;
-import javax.management.MBeanServer;
-import javax.management.MBeanServerDelegate;
-import javax.management.MBeanServerPermission;
-import javax.management.NotCompliantMBeanException;
-import javax.management.NotificationFilter;
-import javax.management.NotificationListener;
-import javax.management.ObjectInstance;
-import javax.management.ObjectName;
-import javax.management.OperationsException;
-import javax.management.QueryExp;
-import javax.management.ReflectionException;
-import javax.management.RuntimeOperationsException;
-import javax.management.loading.ClassLoaderRepository;
-
-/**
- * This is the base class for MBean manipulation on the agent side. It
- * contains the methods necessary for the creation, registration, and
- * deletion of MBeans as well as the access methods for registered MBeans.
- * This is the core component of the JMX infrastructure.
- * <P>
- * Every MBean which is added to the MBean server becomes manageable:
- * its attributes and operations become remotely accessible through
- * the connectors/adaptors connected to that MBean server.
- * A Java object cannot be registered in the MBean server unless it is a
- * JMX compliant MBean.
- * <P>
- * When an MBean is registered or unregistered in the MBean server an
- * {@link javax.management.MBeanServerNotification MBeanServerNotification}
- * Notification is emitted. To register an object as listener to
- * MBeanServerNotifications you should call the MBean server method
- * {@link #addNotificationListener addNotificationListener} with
- * the <CODE>ObjectName</CODE> of the
- * {@link javax.management.MBeanServerDelegate MBeanServerDelegate}.
- * This <CODE>ObjectName</CODE> is:
- * <BR>
- * <CODE>JMImplementation:type=MBeanServerDelegate</CODE>.
- *
- * @since 1.5
- */
-public final class JmxMBeanServer
-    implements SunJmxMBeanServer {
-
-    /** Control the default locking policy of the repository.
-     *  By default, we will be using a fair locking policy.
-     **/
-    public static final boolean DEFAULT_FAIR_LOCK_POLICY = true;
-
-    private final MBeanInstantiator instantiator;
-    private final SecureClassLoaderRepository secureClr;
-
-    /** true if interceptors are enabled **/
-    private final boolean interceptorsEnabled;
-
-    private final MBeanServer outerShell;
-
-    private volatile MBeanServer mbsInterceptor = null;
-
-    /** The MBeanServerDelegate object representing the MBean Server */
-    private final MBeanServerDelegate mBeanServerDelegateObject;
-
-    /**
-     * <b>Package:</b> Creates an MBeanServer with the
-     * specified default domain name, outer interface, and delegate.
-     * <p>The default domain name is used as the domain part in the ObjectName
-     * of MBeans if no domain is specified by the user.
-     * <ul><b>Note:</b>Using this constructor directly is strongly
-     *     discouraged. You should use
-     *     {@link javax.management.MBeanServerFactory#createMBeanServer(java.lang.String)}
-     *     or
-     *     {@link javax.management.MBeanServerFactory#newMBeanServer(java.lang.String)}
-     *     instead.
-     *     <p>
-     *     By default, interceptors are disabled. Use
-     *     {@link #JmxMBeanServer(java.lang.String,javax.management.MBeanServer,javax.management.MBeanServerDelegate,boolean)} to enable them.
-     * </ul>
-     * @param domain The default domain name used by this MBeanServer.
-     * @param outer A pointer to the MBeanServer object that must be
-     *        passed to the MBeans when invoking their
-     *        {@link javax.management.MBeanRegistration} interface.
-     * @param delegate A pointer to the MBeanServerDelegate associated
-     *        with the new MBeanServer. The new MBeanServer must register
-     *        this MBean in its MBean repository.
-     * @exception IllegalArgumentException if the instantiator is null.
-     */
-    JmxMBeanServer(String domain, MBeanServer outer,
-                   MBeanServerDelegate delegate) {
-        this(domain,outer,delegate,null,false);
-    }
-
-    /**
-     * <b>Package:</b> Creates an MBeanServer with the
-     * specified default domain name, outer interface, and delegate.
-     * <p>The default domain name is used as the domain part in the ObjectName
-     * of MBeans if no domain is specified by the user.
-     * <ul><b>Note:</b>Using this constructor directly is strongly
-     *     discouraged. You should use
-     *     {@link javax.management.MBeanServerFactory#createMBeanServer(java.lang.String)}
-     *     or
-     *     {@link javax.management.MBeanServerFactory#newMBeanServer(java.lang.String)}
-     *     instead.
-     * </ul>
-     * @param domain The default domain name used by this MBeanServer.
-     * @param outer A pointer to the MBeanServer object that must be
-     *        passed to the MBeans when invoking their
-     *        {@link javax.management.MBeanRegistration} interface.
-     * @param delegate A pointer to the MBeanServerDelegate associated
-     *        with the new MBeanServer. The new MBeanServer must register
-     *        this MBean in its MBean repository.
-     * @param interceptors If <code>true</code>,
-     *        {@link MBeanServerInterceptor} will be enabled (default is
-     *        <code>false</code>)
-     *        Note: this parameter is not taken into account by this
-     *        implementation - the default value <code>false</code> is
-     *        always used.
-     * @exception IllegalArgumentException if the instantiator is null.
-     */
-    JmxMBeanServer(String domain, MBeanServer outer,
-                   MBeanServerDelegate delegate, boolean interceptors) {
-        this(domain,outer,delegate,null,false);
-    }
-
-    /**
-     * <b>Package:</b> Creates an MBeanServer.
-     * @param domain The default domain name used by this MBeanServer.
-     * @param outer A pointer to the MBeanServer object that must be
-     *        passed to the MBeans when invoking their
-     *        {@link javax.management.MBeanRegistration} interface.
-     * @param delegate A pointer to the MBeanServerDelegate associated
-     *        with the new MBeanServer. The new MBeanServer must register
-     *        this MBean in its MBean repository.
-     * @param instantiator The MBeanInstantiator that will be used to
-     *        instantiate MBeans and take care of class loading issues.
-     * @param metadata The MetaData object that will be used by the
-     *        MBean server in order to invoke the MBean interface of
-     *        the registered MBeans.
-     * @param interceptors If <code>true</code>,
-     *        {@link MBeanServerInterceptor} will be enabled (default is
-     *        <code>false</code>).
-     */
-    JmxMBeanServer(String domain, MBeanServer outer,
-                   MBeanServerDelegate    delegate,
-                   MBeanInstantiator      instantiator,
-                   boolean                interceptors)  {
-                   this(domain,outer,delegate,instantiator,interceptors,true);
-    }
-
-    /**
-     * <b>Package:</b> Creates an MBeanServer.
-     * @param domain The default domain name used by this MBeanServer.
-     * @param outer A pointer to the MBeanServer object that must be
-     *        passed to the MBeans when invoking their
-     *        {@link javax.management.MBeanRegistration} interface.
-     * @param delegate A pointer to the MBeanServerDelegate associated
-     *        with the new MBeanServer. The new MBeanServer must register
-     *        this MBean in its MBean repository.
-     * @param instantiator The MBeanInstantiator that will be used to
-     *        instantiate MBeans and take care of class loading issues.
-     * @param metadata The MetaData object that will be used by the
-     *        MBean server in order to invoke the MBean interface of
-     *        the registered MBeans.
-     * @param interceptors If <code>true</code>,
-     *        {@link MBeanServerInterceptor} will be enabled (default is
-     *        <code>false</code>).
-     * @param fairLock If {@code true}, the MBean repository will use a {@link
-     *        java.util.concurrent.locks.ReentrantReadWriteLock#ReentrantReadWriteLock(boolean)
-     *        fair locking} policy.
-     */
-    JmxMBeanServer(String domain, MBeanServer outer,
-                   MBeanServerDelegate    delegate,
-                   MBeanInstantiator      instantiator,
-                   boolean                interceptors,
-                   boolean                fairLock)  {
-
-        if (instantiator == null) {
-            final ModifiableClassLoaderRepository
-                clr = new ClassLoaderRepositorySupport();
-            instantiator = new MBeanInstantiator(clr);
-        }
-
-        final MBeanInstantiator fInstantiator = instantiator;
-        this.secureClr = new
-            SecureClassLoaderRepository(AccessController.doPrivileged(new PrivilegedAction<ClassLoaderRepository>() {
-                @Override
-                public ClassLoaderRepository run() {
-                    return fInstantiator.getClassLoaderRepository();
-                }
-            })
-        );
-        if (delegate == null)
-            delegate = new MBeanServerDelegateImpl();
-        if (outer == null)
-            outer = this;
-
-        this.instantiator = instantiator;
-        this.mBeanServerDelegateObject = delegate;
-        this.outerShell   = outer;
-
-        final Repository repository = new Repository(domain);
-        this.mbsInterceptor =
-            new DefaultMBeanServerInterceptor(outer, delegate, instantiator,
-                                              repository);
-        this.interceptorsEnabled = interceptors;
-        initialize();
-    }
-
-    /**
-     * Tell whether {@link MBeanServerInterceptor}s are enabled on this
-     * object.
-     * @return <code>true</code> if {@link MBeanServerInterceptor}s are
-     *         enabled.
-     * @see #newMBeanServer(java.lang.String,javax.management.MBeanServer,javax.management.MBeanServerDelegate,boolean)
-     **/
-    public boolean interceptorsEnabled() {
-        return interceptorsEnabled;
-    }
-
-    /**
-     * Return the MBeanInstantiator associated to this MBeanServer.
-     * @exception UnsupportedOperationException if
-     *            {@link MBeanServerInterceptor}s
-     *            are not enabled on this object.
-     * @see #interceptorsEnabled
-     **/
-    public MBeanInstantiator getMBeanInstantiator() {
-        if (interceptorsEnabled) return instantiator;
-        else throw new UnsupportedOperationException(
-                       "MBeanServerInterceptors are disabled.");
-    }
-
-    /**
-     * Instantiates and registers an MBean in the MBean server.
-     * The MBean server will use its
-     * {@link javax.management.loading.ClassLoaderRepository Default Loader Repository}
-     * to load the class of the MBean.
-     * An object name is associated to the MBean.
-     * If the object name given is null, the MBean can automatically
-     * provide its own name by implementing the
-     * {@link javax.management.MBeanRegistration MBeanRegistration} interface.
-     * The call returns an <CODE>ObjectInstance</CODE> object representing
-     * the newly created MBean.
-     *
-     * @param className The class name of the MBean to be instantiated.
-     * @param name The object name of the MBean. May be null.
-     *
-     * @return  An <CODE>ObjectInstance</CODE>, containing the
-     *     <CODE>ObjectName</CODE> and the Java class name of the newly
-     *     instantiated MBean.
-     *
-     * @exception ReflectionException Wraps an
-     *     <CODE>{@link java.lang.ClassNotFoundException}</CODE> or an
-     *     <CODE>{@link java.lang.Exception}</CODE> that occurred
-     *     when trying to invoke the MBean's constructor.
-     * @exception InstanceAlreadyExistsException The MBean is already
-     *     under the control of the MBean server.
-     * @exception MBeanRegistrationException The <CODE>preRegister()</CODE>
-     *     (<CODE>MBeanRegistration</CODE> interface) method of the MBean
-     *     has thrown an exception. The MBean will not be registered.
-     * @exception MBeanException The constructor of the MBean has thrown
-     *     an exception.
-     * @exception NotCompliantMBeanException This class is not a JMX
-     *     compliant MBean.
-     * @exception RuntimeOperationsException Wraps an
-     *     <CODE>{@link java.lang.IllegalArgumentException}</CODE>:
-     *     The className passed in parameter is null, the
-     *     <CODE>ObjectName</CODE> passed in parameter contains a pattern
-     *     or no <CODE>ObjectName</CODE> is specified for the MBean.
-     *
-     */
-    public ObjectInstance createMBean(String className, ObjectName name)
-        throws ReflectionException, InstanceAlreadyExistsException,
-               MBeanRegistrationException, MBeanException,
-               NotCompliantMBeanException {
-
-        return mbsInterceptor.createMBean(className,
-                                          cloneObjectName(name),
-                                          (Object[]) null,
-                                          (String[]) null);
-    }
-
-    /**
-     * Instantiates and registers an MBean in the MBean server.
-     * The class loader to be used is identified by its object  name.
-     * An object name is associated to the MBean.
-     * If the object name  of the loader is null, the ClassLoader that
-     * loaded the MBean server will be used.
-     * If the MBean's object name given is null, the MBean can
-     * automatically provide its own name by implementing the
-     * {@link javax.management.MBeanRegistration MBeanRegistration} interface.
-     * The call returns an <CODE>ObjectInstance</CODE> object representing
-     * the newly created MBean.
-     *
-     * @param className The class name of the MBean to be instantiated.
-     * @param name The object name of the MBean. May be null.
-     * @param loaderName The object name of the class loader to be used.
-     *
-     * @return  An <CODE>ObjectInstance</CODE>, containing the
-     *     <CODE>ObjectName</CODE> and the Java class name
-     *     of the newly instantiated MBean.
-     *
-     * @exception ReflectionException  Wraps an
-     *     <CODE>{@link java.lang.ClassNotFoundException}</CODE> or an
-     *     <CODE>{@link java.lang.Exception}</CODE> that occurred when trying
-     *     to invoke the MBean's constructor.
-     * @exception InstanceAlreadyExistsException The MBean is already
-     *     under the control of the MBean server.
-     * @exception MBeanRegistrationException The <CODE>preRegister()</CODE>
-     *     (<CODE>MBeanRegistration</CODE>  interface) method of the MBean
-     *     has thrown an exception. The MBean will not be registered.
-     * @exception MBeanException The constructor of the MBean has thrown
-     *     an exception
-     * @exception NotCompliantMBeanException This class is not a JMX
-     *     compliant MBean.
-     * @exception InstanceNotFoundException The specified class loader
-     *     is not registered in the MBean server.
-     * @exception RuntimeOperationsException Wraps an
-     *     <CODE>{@link java.lang.IllegalArgumentException}</CODE>: The
-     *     className passed in parameter is null, the <CODE>ObjectName</CODE>
-     *     passed in parameter contains a pattern or no
-     *     <CODE>ObjectName</CODE> is specified for the MBean.
-     */
-    public ObjectInstance createMBean(String className, ObjectName name,
-                                      ObjectName loaderName)
-        throws ReflectionException, InstanceAlreadyExistsException,
-               MBeanRegistrationException, MBeanException,
-               NotCompliantMBeanException, InstanceNotFoundException {
-
-        return mbsInterceptor.createMBean(className,
-                                          cloneObjectName(name),
-                                          loaderName,
-                                          (Object[]) null,
-                                          (String[]) null);
-    }
-
-    /**
-     * Instantiates and registers an MBean in the MBean server.
-     * The MBean server will use its
-     * {@link javax.management.loading.ClassLoaderRepository Default Loader Repository}
-     * to load the class of the MBean.
-     * An object name is associated to the MBean.
-     * If the object name given is null, the MBean can automatically
-     * provide its own name by implementing the
-     * {@link javax.management.MBeanRegistration MBeanRegistration} interface.
-     * The call returns an <CODE>ObjectInstance</CODE> object representing
-     * the newly created MBean.
-     *
-     * @param className The class name of the MBean to be instantiated.
-     * @param name The object name of the MBean. May be null.
-     * @param params An array containing the parameters of the constructor
-     *     to be invoked.
-     * @param signature An array containing the signature of the
-     *     constructor to be invoked.
-     *
-     * @return  An <CODE>ObjectInstance</CODE>, containing the
-     *     <CODE>ObjectName</CODE> and the Java class name
-     *     of the newly instantiated MBean.
-     *
-     * @exception ReflectionException Wraps a
-     *     <CODE>{@link java.lang.ClassNotFoundException}</CODE> or an
-     *     <CODE>{@link java.lang.Exception}</CODE> that occurred
-     *     when trying to invoke the MBean's constructor.
-     * @exception InstanceAlreadyExistsException The MBean is already
-     *     under the control of the MBean server.
-     * @exception MBeanRegistrationException The <CODE>preRegister()</CODE>
-     *     (<CODE>MBeanRegistration</CODE>  interface) method of the MBean
-     *     has thrown an exception. The MBean will not be registered.
-     * @exception MBeanException The constructor of the MBean has
-     *     thrown an exception.
-     * @exception RuntimeOperationsException Wraps an
-     *     <CODE>{@link java.lang.IllegalArgumentException}</CODE>: The
-     *     className passed in parameter is null, the <CODE>ObjectName</CODE>
-     *     passed in parameter contains a pattern or no
-     *     <CODE>ObjectName</CODE> is specified for the MBean.
-     *
-     */
-    public ObjectInstance createMBean(String className, ObjectName name,
-                                      Object params[], String signature[])
-        throws ReflectionException, InstanceAlreadyExistsException,
-               MBeanRegistrationException, MBeanException,
-               NotCompliantMBeanException  {
-
-        return mbsInterceptor.createMBean(className, cloneObjectName(name),
-                                          params, signature);
-    }
-
-   /**
-     * Instantiates and registers an MBean in the MBean server.
-     * The class loader to be used is identified by its object name.
-     * An object name is associated to the MBean. If the object name
-     * of the loader is not specified, the ClassLoader that loaded the
-     * MBean server will be used.
-     * If  the MBean object name given is null, the MBean can automatically
-     * provide its own name by implementing the
-     * {@link javax.management.MBeanRegistration MBeanRegistration} interface.
-     * The call returns an <CODE>ObjectInstance</CODE> object representing
-     * the newly created MBean.
-     *
-     * @param className The class name of the MBean to be instantiated.
-     * @param name The object name of the MBean. May be null.
-     * @param params An array containing the parameters of the constructor
-     *      to be invoked.
-     * @param signature An array containing the signature of the
-     *     constructor to be invoked.
-     * @param loaderName The object name of the class loader to be used.
-     *
-     * @return  An <CODE>ObjectInstance</CODE>, containing the
-     *     <CODE>ObjectName</CODE> and the Java class name of the newly
-     *     instantiated MBean.
-     *
-     * @exception ReflectionException Wraps a
-     *     <CODE>{@link java.lang.ClassNotFoundException}</CODE> or an
-     *     <CODE>{@link java.lang.Exception}</CODE>
-     *     that occurred when trying to invoke the MBean's constructor.
-     * @exception InstanceAlreadyExistsException The MBean is already
-     *     under the control of the MBean server.
-     * @exception MBeanRegistrationException The <CODE>preRegister()</CODE>
-     *     (<CODE>MBeanRegistration</CODE>  interface) method of the MBean
-     *     has thrown an exception. The MBean will not be registered.
-     * @exception MBeanException The constructor of the MBean has
-     *      thrown an exception
-     * @exception InstanceNotFoundException The specified class loader is
-     *      not registered in the MBean server.
-     * @exception RuntimeOperationsException Wraps an
-     *     <CODE>{@link java.lang.IllegalArgumentException}</CODE>: The
-     *     className passed in parameter is null, the <CODE>ObjectName</CODE>
-     *     passed in parameter contains a pattern or no
-     *     <CODE>ObjectName</CODE> is specified for the MBean.
-     *
-     */
-    public ObjectInstance createMBean(String className, ObjectName name,
-                                      ObjectName loaderName, Object params[],
-                                      String signature[])
-        throws ReflectionException, InstanceAlreadyExistsException,
-               MBeanRegistrationException, MBeanException,
-               NotCompliantMBeanException, InstanceNotFoundException {
-
-        return mbsInterceptor.createMBean(className, cloneObjectName(name),
-                                          loaderName, params, signature);
-    }
-
-    /**
-     * Registers a pre-existing object as an MBean with the MBean server.
-     * If the object name given is null, the MBean may automatically
-     * provide its own name by implementing the
-     * {@link javax.management.MBeanRegistration MBeanRegistration}  interface.
-     * The call returns an <CODE>ObjectInstance</CODE> object representing
-     * the registered MBean.
-     *
-     * @param object The  MBean to be registered as an MBean.
-     * @param name The object name of the MBean. May be null.
-     *
-     * @return The <CODE>ObjectInstance</CODE> for the MBean that has been
-     *      registered.
-     *
-     * @exception InstanceAlreadyExistsException The MBean is already
-     *      under the control of the MBean server.
-     * @exception MBeanRegistrationException The <CODE>preRegister()</CODE>
-     *      (<CODE>MBeanRegistration</CODE>  interface) method of the MBean
-     *      has thrown an exception. The MBean will not be registered.
-     * @exception NotCompliantMBeanException This object is not a JMX
-     *      compliant MBean
-     * @exception RuntimeOperationsException Wraps an
-     *      <CODE>{@link java.lang.IllegalArgumentException}</CODE>: The
-     *      object passed in parameter is null or no object name is specified.
-     *
-     */
-    public ObjectInstance registerMBean(Object object, ObjectName name)
-        throws InstanceAlreadyExistsException, MBeanRegistrationException,
-               NotCompliantMBeanException  {
-
-        return mbsInterceptor.registerMBean(object, cloneObjectName(name));
-    }
-
-    /**
-     * De-registers an MBean from the MBean server. The MBean is identified by
-     * its object name. Once the method has been invoked, the MBean may
-     * no longer be accessed by its object name.
-     *
-     * @param name The object name of the MBean to be de-registered.
-     *
-     * @exception InstanceNotFoundException The MBean specified is not
-     *     registered in the MBean server.
-     * @exception MBeanRegistrationException The <code>preDeregister()</code>
-     *     (<CODE>MBeanRegistration</CODE>  interface) method of the MBean
-     *     has thrown an exception.
-     * @exception RuntimeOperationsException Wraps an
-     *     <CODE>{@link java.lang.IllegalArgumentException}</CODE>: The
-     *     object name in parameter is null or the MBean you are when
-     *     trying to de-register is the
-     *     {@link javax.management.MBeanServerDelegate MBeanServerDelegate}
-     *     MBean.
-     **/
-    public void unregisterMBean(ObjectName name)
-        throws InstanceNotFoundException, MBeanRegistrationException  {
-        mbsInterceptor.unregisterMBean(cloneObjectName(name));
-    }
-
-    /**
-     * Gets the <CODE>ObjectInstance</CODE> for a given MBean registered
-     * with the MBean server.
-     *
-     * @param name The object name of the MBean.
-     *
-     * @return The <CODE>ObjectInstance</CODE> associated to the MBean
-     *       specified by <VAR>name</VAR>.
-     *
-     * @exception InstanceNotFoundException The MBean specified is not
-     *       registered in the MBean server.
-     */
-    public ObjectInstance getObjectInstance(ObjectName name)
-        throws InstanceNotFoundException {
-
-        return mbsInterceptor.getObjectInstance(cloneObjectName(name));
-    }
-
-    /**
-     * Gets MBeans controlled by the MBean server. This method allows any
-     * of the following to be obtained: All MBeans, a set of MBeans specified
-     * by pattern matching on the <CODE>ObjectName</CODE> and/or a Query
-     * expression, a specific MBean. When the object name is null or no
-     * domain and key properties are specified, all objects are to be
-     * selected (and filtered if a query is specified). It returns the
-     * set of <CODE>ObjectInstance</CODE> objects (containing the
-     * <CODE>ObjectName</CODE> and the Java Class name) for
-     * the selected MBeans.
-     *
-     * @param name The object name pattern identifying the MBeans to
-     *      be retrieved. If null or or no domain and key properties
-     *      are specified, all the MBeans registered will be retrieved.
-     * @param query The query expression to be applied for selecting
-     *      MBeans. If null no query expression will be applied for
-     *      selecting MBeans.
-     *
-     * @return  A set containing the <CODE>ObjectInstance</CODE> objects
-     *      for the selected MBeans.
-     *      If no MBean satisfies the query an empty list is returned.
-     *
-     */
-    public Set<ObjectInstance> queryMBeans(ObjectName name, QueryExp query) {
-
-        return mbsInterceptor.queryMBeans(cloneObjectName(name), query);
-    }
-
-    /**
-     * Gets the names of MBeans controlled by the MBean server. This method
-     * enables any of the following to be obtained: The names of all MBeans,
-     * the names of a set of MBeans specified by pattern matching on the
-     * <CODE>ObjectName</CODE> and/or a Query expression, a specific
-     * MBean name (equivalent to testing whether an MBean is registered).
-     * When the object name is null or or no domain and key properties are
-     * specified, all objects are selected (and filtered if a query is
-     * specified). It returns the set of ObjectNames for the MBeans
-     * selected.
-     *
-     * @param name The object name pattern identifying the MBeans to be
-     *     retrieved. If null or no domain and key properties are
-     *     specified, all the MBeans registered will be retrieved.
-     * @param query The query expression to be applied for selecting
-     *     MBeans. If null no query expression will be applied for
-     *     selecting MBeans.
-     *
-     * @return  A set containing the ObjectNames for the MBeans selected.
-     *     If no MBean satisfies the query, an empty list is returned.
-     *
-     */
-    public Set<ObjectName> queryNames(ObjectName name, QueryExp query) {
-
-        return mbsInterceptor.queryNames(cloneObjectName(name), query);
-    }
-
-    /**
-     * Checks whether an MBean, identified by its object name, is already
-     * registered with the MBean server.
-     *
-     * @param name The object name of the MBean to be checked.
-     *
-     * @return  True if the MBean is already registered in the MBean server,
-     *     false otherwise.
-     *
-     * @exception RuntimeOperationsException Wraps an
-     *     <CODE>{@link java.lang.IllegalArgumentException}</CODE>: The object
-     *      name in parameter is null.
-     *
-     */
-    public boolean isRegistered(ObjectName name)  {
-
-        return mbsInterceptor.isRegistered(name);
-    }
-
-    /**
-     * Returns the number of MBeans registered in the MBean server.
-     */
-    public Integer getMBeanCount()  {
-
-        return mbsInterceptor.getMBeanCount();
-    }
-
-    /**
-     * Gets the value of a specific attribute of a named MBean. The MBean
-     * is identified by its object name.
-     *
-     * @param name The object name of the MBean from which the attribute
-     *     is to be retrieved.
-     * @param attribute A String specifying the name of the attribute to be
-     *     retrieved.
-     *
-     * @return  The value of the retrieved attribute.
-     *
-     * @exception AttributeNotFoundException The attribute specified
-     *     is not accessible in the MBean.
-     * @exception MBeanException  Wraps an exception thrown by the
-     *     MBean's getter.
-     * @exception InstanceNotFoundException The MBean specified is not
-     *     registered in the MBean server.
-     * @exception ReflectionException  Wraps an
-     *     <CODE>{@link java.lang.Exception}</CODE> thrown when trying to
-     *     invoke the setter.
-     * @exception RuntimeOperationsException Wraps an
-     *     <CODE>{@link java.lang.IllegalArgumentException}</CODE>:
-     *     The object name in parameter is null or the attribute in
-     *     parameter is null.
-     */
-    public Object getAttribute(ObjectName name, String attribute)
-        throws MBeanException, AttributeNotFoundException,
-               InstanceNotFoundException, ReflectionException {
-
-        return mbsInterceptor.getAttribute(cloneObjectName(name), attribute);
-    }
-
-
-    /**
-     * Enables the values of several attributes of a named MBean. The MBean
-     * is identified by its object name.
-     *
-     * @param name The object name of the MBean from which the attributes are
-     *     retrieved.
-     * @param attributes A list of the attributes to be retrieved.
-     *
-     * @return The list of the retrieved attributes.
-     *
-     * @exception InstanceNotFoundException The MBean specified is not
-     *     registered in the MBean server.
-     * @exception ReflectionException An exception occurred when trying
-     *     to invoke the getAttributes method of a Dynamic MBean.
-     * @exception RuntimeOperationsException Wrap an
-     *     <CODE>{@link java.lang.IllegalArgumentException}</CODE>: The
-     *     object name in parameter is null or attributes in parameter
-     *     is null.
-     *
-     */
-    public AttributeList getAttributes(ObjectName name, String[] attributes)
-        throws InstanceNotFoundException, ReflectionException  {
-
-        return mbsInterceptor.getAttributes(cloneObjectName(name), attributes);
-
-    }
-
-    /**
-     * Sets the value of a specific attribute of a named MBean. The MBean
-     * is identified by its object name.
-     *
-     * @param name The name of the MBean within which the attribute is
-     *     to be set.
-     * @param attribute The identification of the attribute to be set
-     *     and the value it is to be set to.
-     *
-     * @exception InstanceNotFoundException The MBean specified is
-     *     not registered in the MBean server.
-     * @exception AttributeNotFoundException The attribute specified is
-     *     not accessible in the MBean.
-     * @exception InvalidAttributeValueException The value specified for
-     *     the attribute is not valid.
-     * @exception MBeanException Wraps an exception thrown by the
-     *     MBean's setter.
-     * @exception ReflectionException  Wraps an
-     *     <CODE>{@link java.lang.Exception}</CODE> thrown when trying
-     *     to invoke the setter.
-     * @exception RuntimeOperationsException Wraps an
-     *     <CODE>{@link java.lang.IllegalArgumentException}</CODE>: The
-     *     object name in parameter is null or the attribute in parameter
-     *     is null.
-     */
-    public void setAttribute(ObjectName name, Attribute attribute)
-        throws InstanceNotFoundException, AttributeNotFoundException,
-               InvalidAttributeValueException, MBeanException,
-               ReflectionException  {
-
-        mbsInterceptor.setAttribute(cloneObjectName(name),
-                                    cloneAttribute(attribute));
-    }
-
-    /**
-     * Sets the values of several attributes of a named MBean. The MBean is
-     * identified by its object name.
-     *
-     * @param name The object name of the MBean within which the
-     *     attributes are to  be set.
-     * @param attributes A list of attributes: The identification of the
-     *     attributes to be set and  the values they are to be set to.
-     *
-     * @return  The list of attributes that were set, with their new values.
-     *
-     * @exception InstanceNotFoundException The MBean specified is not
-     *      registered in the MBean server.
-     * @exception ReflectionException An exception occurred when trying
-     *      to invoke the getAttributes method of a Dynamic MBean.
-     * @exception RuntimeOperationsException Wraps an
-     *      <CODE>{@link java.lang.IllegalArgumentException}</CODE>:
-     *     The object name in parameter is null or  attributes in
-     *     parameter is null.
-     *
-     */
-    public AttributeList setAttributes(ObjectName name,
-                                       AttributeList attributes)
-        throws InstanceNotFoundException, ReflectionException  {
-
-        return mbsInterceptor.setAttributes(cloneObjectName(name),
-                                            cloneAttributeList(attributes));
-    }
-
-    /**
-     * Invokes an operation on an MBean.
-     *
-     * @param name The object name of the MBean on which the method is to be
-     *     invoked.
-     * @param operationName The name of the operation to be invoked.
-     * @param params An array containing the parameters to be set when
-     *     the operation is invoked
-     * @param signature An array containing the signature of the operation.
-     *     The class objects will be loaded using the same class loader as
-     *     the one used for loading the MBean on which the operation was
-     *     invoked.
-     *
-     * @return  The object returned by the operation, which represents the
-     *      result ofinvoking the operation on the  MBean specified.
-     *
-     * @exception InstanceNotFoundException The MBean specified is not
-     *       registered in the MBean server.
-     * @exception MBeanException  Wraps an exception thrown by the MBean's
-     *       invoked method.
-     * @exception ReflectionException  Wraps an
-     *       <CODE>{@link java.lang.Exception}</CODE> thrown while trying
-     *        to invoke the method.
-     *
-     */
-    public Object invoke(ObjectName name, String operationName,
-                         Object params[], String signature[])
-        throws InstanceNotFoundException, MBeanException,
-               ReflectionException {
-        return mbsInterceptor.invoke(cloneObjectName(name), operationName,
-                                     params, signature);
-    }
-
-    /**
-     * Returns the default domain used for naming the MBean.
-     * The default domain name is used as the domain part in the ObjectName
-     * of MBeans if no domain is specified by the user.
-     */
-    public String getDefaultDomain()  {
-        return mbsInterceptor.getDefaultDomain();
-    }
-
-    // From MBeanServer
-    public String[] getDomains() {
-        return mbsInterceptor.getDomains();
-    }
-
-    /**
-     * Adds a listener to a registered MBean.
-     *
-     * @param name The name of the MBean on which the listener should be added.
-     * @param listener The listener object which will handle the
-     *        notifications emitted by the registered MBean.
-     * @param filter The filter object. If filter is null, no filtering
-     *        will be performed before handling notifications.
-     * @param handback The context to be sent to the listener when a
-     *        notification is emitted.
-     *
-     * @exception InstanceNotFoundException The MBean name provided does
-     *       not match any of the registered MBeans.
-     */
-    public void addNotificationListener(ObjectName name,
-                                        NotificationListener listener,
-                                        NotificationFilter filter,
-                                        Object handback)
-        throws InstanceNotFoundException {
-
-        mbsInterceptor.addNotificationListener(cloneObjectName(name), listener,
-                                               filter, handback);
-    }
-
-    /**
-     * Adds a listener to a registered MBean.
-     *
-     * @param name The name of the MBean on which the listener should be added.
-     * @param listener The object name of the listener which will handle the
-     *        notifications emitted by the registered MBean.
-     * @param filter The filter object. If filter is null, no filtering will
-     *        be performed before handling notifications.
-     * @param handback The context to be sent to the listener when a
-     *        notification is emitted.
-     *
-     * @exception InstanceNotFoundException The MBean name of the
-     *       notification listener or of the notification broadcaster
-     *       does not match any of the registered MBeans.
-     */
-    public void addNotificationListener(ObjectName name, ObjectName listener,
-                                   NotificationFilter filter, Object handback)
-        throws InstanceNotFoundException {
-
-        mbsInterceptor.addNotificationListener(cloneObjectName(name), listener,
-                                               filter, handback);
-    }
-
-    public void removeNotificationListener(ObjectName name,
-                                           NotificationListener listener)
-            throws InstanceNotFoundException, ListenerNotFoundException {
-
-        mbsInterceptor.removeNotificationListener(cloneObjectName(name),
-                                                  listener);
-    }
-
-    public void removeNotificationListener(ObjectName name,
-                                           NotificationListener listener,
-                                           NotificationFilter filter,
-                                           Object handback)
-            throws InstanceNotFoundException, ListenerNotFoundException {
-
-        mbsInterceptor.removeNotificationListener(cloneObjectName(name),
-                                                  listener, filter, handback);
-    }
-
-    public void removeNotificationListener(ObjectName name,
-                                           ObjectName listener)
-        throws InstanceNotFoundException, ListenerNotFoundException {
-
-        mbsInterceptor.removeNotificationListener(cloneObjectName(name),
-                                                  listener);
-    }
-
-    public void removeNotificationListener(ObjectName name,
-                                           ObjectName listener,
-                                           NotificationFilter filter,
-                                           Object handback)
-            throws InstanceNotFoundException, ListenerNotFoundException {
-
-        mbsInterceptor.removeNotificationListener(cloneObjectName(name),
-                                                  listener, filter, handback);
-    }
-
-    /**
-     * This method discovers the attributes and operations that an MBean exposes
-     * for management.
-     *
-     * @param name The name of the MBean to analyze
-     *
-     * @return  An instance of <CODE>MBeanInfo</CODE> allowing the retrieval of
-     * all attributes and operations of this MBean.
-     *
-     * @exception IntrospectionException An exception occurs during
-     * introspection.
-     * @exception InstanceNotFoundException The MBean specified is not found.
-     * @exception ReflectionException An exception occurred when trying to
-     * invoke the getMBeanInfo of a Dynamic MBean.
-     */
-    public MBeanInfo getMBeanInfo(ObjectName name) throws
-    InstanceNotFoundException, IntrospectionException, ReflectionException {
-
-        return mbsInterceptor.getMBeanInfo(cloneObjectName(name));
-    }
-
-    /**
-     * Instantiates an object using the list of all class loaders registered
-     * in the MBean server (using its
-     * {@link javax.management.loading.ClassLoaderRepository Default Loader Repository}).
-     * The object's class should have a public constructor.
-     * It returns a reference to the newly created object.
-     * The newly created object is not registered in the MBean server.
-     *
-     * @param className The class name of the object to be instantiated.
-     *
-     * @return The newly instantiated object.
-     *
-     * @exception ReflectionException Wraps the
-     *     <CODE>{@link java.lang.ClassNotFoundException}</CODE> or the
-     *     <CODE>{@link java.lang.Exception}</CODE> that
-     *     occurred when trying to invoke the object's constructor.
-     * @exception MBeanException The constructor of the object has thrown
-     *     an exception.
-     * @exception RuntimeOperationsException Wraps an
-     *     <CODE>{@link java.lang.IllegalArgumentException}</CODE>:
-     *     The className passed in parameter is null.
-     *
-     */
-    public Object instantiate(String className)
-        throws ReflectionException, MBeanException {
-
-        /* Permission check */
-        checkMBeanPermission(className, null, null, "instantiate");
-
-        return instantiator.instantiate(className);
-    }
-
-    /**
-     * Instantiates an object using the class Loader specified by its
-     * <CODE>ObjectName</CODE>.
-     * If the loader name is null, the ClassLoader that loaded the
-     * MBean Server will be used.
-     * The object's class should have a public constructor.
-     * It returns a reference to the newly created object.
-     * The newly created object is not registered in the MBean server.
-     *
-     * @param className The class name of the MBean to be instantiated.
-     * @param loaderName The object name of the class loader to be used.
-     *
-     * @return The newly instantiated object.
-     *
-     * @exception ReflectionException Wraps the
-     *     <CODE>{@link java.lang.ClassNotFoundException}</CODE> or the
-     *     <CODE>{@link java.lang.Exception}</CODE> that
-     *     occurred when trying to invoke the object's constructor.
-     * @exception MBeanException The constructor of the object has thrown
-     *     an exception.
-     * @exception InstanceNotFoundException The specified class loader
-     *     is not registered in the MBaenServer.
-     * @exception RuntimeOperationsException Wraps an
-     *     <CODE>{@link java.lang.IllegalArgumentException}</CODE>: The
-     *     className passed in parameter is null.
-     *
-     */
-    public Object instantiate(String className, ObjectName loaderName)
-        throws ReflectionException, MBeanException,
-               InstanceNotFoundException {
-
-        /* Permission check */
-        checkMBeanPermission(className, null, null, "instantiate");
-
-        ClassLoader myLoader = outerShell.getClass().getClassLoader();
-        return instantiator.instantiate(className, loaderName, myLoader);
-    }
-
-    /**
-     * Instantiates an object using the list of all class loaders registered
-     * in the MBean server (using its
-     * {@link javax.management.loading.ClassLoaderRepository Default Loader Repository}).
-     * The object's class should have a public constructor.
-     * The call returns a reference to the newly created object.
-     * The newly created object is not registered in the MBean server.
-     *
-     * @param className The class name of the object to be instantiated.
-     * @param params An array containing the parameters of the constructor
-     *     to be invoked.
-     * @param signature An array containing the signature of the
-     *     constructor to be invoked.
-     *
-     * @return The newly instantiated object.
-     *
-     * @exception ReflectionException Wraps the
-     *     <CODE>{@link java.lang.ClassNotFoundException}</CODE> or the
-     *     <CODE>{@link java.lang.Exception}</CODE> that
-     *     occurred when trying to invoke the object's constructor.
-     * @exception MBeanException The constructor of the object has thrown
-     *     an exception.
-     * @exception RuntimeOperationsException Wraps an
-     *     <CODE>{@link java.lang.IllegalArgumentException}</CODE>:
-     *     The className passed in parameter is null.
-     *
-     */
-    public Object instantiate(String className, Object params[],
-                              String signature[])
-        throws ReflectionException, MBeanException {
-
-        /* Permission check */
-        checkMBeanPermission(className, null, null, "instantiate");
-
-        ClassLoader myLoader = outerShell.getClass().getClassLoader();
-        return instantiator.instantiate(className, params, signature,
-                                        myLoader);
-    }
-
-    /**
-     * Instantiates an object. The class loader to be used is identified
-     * by its object name. If the object name of the loader is null,
-     * the ClassLoader that loaded the MBean server will be used.
-     * The object's class should have a public constructor.
-     * The call returns a reference to the newly created object.
-     * The newly created object is not registered in the MBean server.
-     *
-     * @param className The class name of the object to be instantiated.
-     * @param params An array containing the parameters of the constructor
-     *     to be invoked.
-     * @param signature An array containing the signature of the constructor
-     *     to be invoked.
-     * @param loaderName The object name of the class loader to be used.
-     *
-     * @return The newly instantiated object.
-     *
-     * @exception ReflectionException Wraps the
-     *    <CODE>{@link java.lang.ClassNotFoundException}</CODE> or the
-     *    <CODE>{@link java.lang.Exception}</CODE> that
-     *    occurred when trying to invoke the object's constructor.
-     * @exception MBeanException The constructor of the object has thrown
-     *    an exception.
-     * @exception InstanceNotFoundException The specified class loader
-     *    is not registered in the MBean server.
-     * @exception RuntimeOperationsException Wraps an
-     *    <CODE>{@link java.lang.IllegalArgumentException}</CODE>:
-     *    The className passed in parameter is null.
-     *
-     */
-    public Object instantiate(String className, ObjectName loaderName,
-                              Object params[], String signature[])
-        throws ReflectionException, MBeanException,
-               InstanceNotFoundException {
-
-        /* Permission check */
-        checkMBeanPermission(className, null, null, "instantiate");
-
-        ClassLoader myLoader = outerShell.getClass().getClassLoader();
-        return instantiator.instantiate(className,loaderName,params,signature,
-                                        myLoader);
-    }
-
-    /**
-     * Returns true if the MBean specified is an instance of the specified
-     * class, false otherwise.
-     *
-     * @param name The <CODE>ObjectName</CODE> of the MBean.
-     * @param className The name of the class.
-     *
-     * @return true if the MBean specified is an instance of the specified
-     *     class, false otherwise.
-     *
-     * @exception InstanceNotFoundException The MBean specified is not
-     *     registered in the MBean server.
-     */
-    public boolean isInstanceOf(ObjectName name, String className)
-        throws InstanceNotFoundException {
-
-        return mbsInterceptor.isInstanceOf(cloneObjectName(name), className);
-    }
-
-    /**
-     * De-serializes a byte array in the context of the class loader
-     * of an MBean.
-     *
-     * @param name The name of the MBean whose class loader should
-     *     be used for the de-serialization.
-     * @param data The byte array to be de-sererialized.
-     *
-     * @return  The de-serialized object stream.
-     *
-     * @exception InstanceNotFoundException The MBean specified is not
-     *     found.
-     * @exception OperationsException Any of the usual Input/Output
-     *     related exceptions.
-     *
-     */
-    @Deprecated
-    public ObjectInputStream deserialize(ObjectName name, byte[] data)
-        throws InstanceNotFoundException, OperationsException {
-
-        /* Permission check */
-        // This call requires MBeanPermission 'getClassLoaderFor'
-        final ClassLoader loader = getClassLoaderFor(name);
-
-        return instantiator.deserialize(loader, data);
-    }
-
-    /**
-     * De-serializes a byte array in the context of a given MBean class loader.
-     * The class loader is the one that loaded the class with name "className".
-     *
-     * @param className The name of the class whose class loader should be
-     *      used for the de-serialization.
-     * @param data The byte array to be de-sererialized.
-     *
-     * @return  The de-serialized object stream.
-     *
-     * @exception OperationsException Any of the usual Input/Output
-     *      related exceptions.
-     * @exception ReflectionException The specified class could not be
-     *      loaded by the default loader repository
-     *
-     */
-    @Deprecated
-    public ObjectInputStream deserialize(String className, byte[] data)
-        throws OperationsException, ReflectionException {
-
-        if (className == null) {
-            throw new  RuntimeOperationsException(
-                                        new IllegalArgumentException(),
-                                        "Null className passed in parameter");
-        }
-
-        /* Permission check */
-        // This call requires MBeanPermission 'getClassLoaderRepository'
-        final ClassLoaderRepository clr = getClassLoaderRepository();
-
-        Class<?> theClass;
-        try {
-            if (clr == null) throw new ClassNotFoundException(className);
-            theClass = clr.loadClass(className);
-        } catch (ClassNotFoundException e) {
-            throw new ReflectionException(e,
-                                          "The given class could not be " +
-                                          "loaded by the default loader " +
-                                          "repository");
-        }
-
-        return instantiator.deserialize(theClass.getClassLoader(), data);
-    }
-
-    /**
-     * De-serializes a byte array in the context of a given MBean class loader.
-     * The class loader is the one that loaded the class with name "className".
-     * The name of the class loader to be used for loading the specified
-     * class is specified.
-     * If null, the MBean Server's class loader will be used.
-     *
-     * @param className The name of the class whose class loader should be
-     *     used for the de-serialization.
-     * @param data The byte array to be de-sererialized.
-     * @param loaderName The name of the class loader to be used for
-     *     loading the specified class.
-     *     If null, the MBean Server's class loader will be used.
-     *
-     * @return  The de-serialized object stream.
-     *
-     * @exception InstanceNotFoundException The specified class loader
-     *     MBean is not found.
-     * @exception OperationsException Any of the usual Input/Output
-     *     related exceptions.
-     * @exception ReflectionException The specified class could not
-     *     be loaded by the specified class loader.
-     *
-     */
-    @Deprecated
-    public ObjectInputStream deserialize(String className,
-                                         ObjectName loaderName,
-                                         byte[] data) throws
-        InstanceNotFoundException, OperationsException, ReflectionException {
-
-        // Clone ObjectName
-        //
-        loaderName = cloneObjectName(loaderName);
-
-        /* Permission check */
-        // Make this call just to force the 'getClassLoader'
-        // permission check
-        try {
-            getClassLoader(loaderName);
-        } catch (SecurityException e) {
-            throw e;
-        } catch (Exception e) {
-        }
-
-        ClassLoader myLoader = outerShell.getClass().getClassLoader();
-        return instantiator.deserialize(className, loaderName, data, myLoader);
-    }
-
-    /**
-     * Initializes this MBeanServer, registering the MBeanServerDelegate.
-     * <p>This method must be called once, before using the MBeanServer.
-     **/
-    private void initialize() {
-        if (instantiator == null) throw new
-            IllegalStateException("instantiator must not be null.");
-
-        // Registers the MBeanServer identification MBean
-        try {
-            AccessController.doPrivileged(new PrivilegedExceptionAction<Object>() {
-                public Object run() throws Exception {
-                    mbsInterceptor.registerMBean(
-                            mBeanServerDelegateObject,
-                            MBeanServerDelegate.DELEGATE_NAME);
-                    return null;
-                }
-            });
-        } catch (SecurityException e) {
-            if (MBEANSERVER_LOGGER.isLoggable(Level.FINEST)) {
-                MBEANSERVER_LOGGER.logp(Level.FINEST,
-                        JmxMBeanServer.class.getName(), "initialize",
-                        "Unexpected security exception occurred", e);
-            }
-            throw e;
-        } catch (Exception e) {
-            if (MBEANSERVER_LOGGER.isLoggable(Level.FINEST)) {
-                MBEANSERVER_LOGGER.logp(Level.FINEST,
-                        JmxMBeanServer.class.getName(), "initialize",
-                        "Unexpected exception occurred", e);
-            }
-            throw new
-                IllegalStateException("Can't register delegate.",e);
-        }
-
-
-        /* Add my class loader to the repository
-           This can be null if my class loader is the bootstrap
-           class loader.  The ClassLoaderRepository knows how
-           to handle that case.  */
-        ClassLoader myLoader = outerShell.getClass().getClassLoader();
-        final ModifiableClassLoaderRepository loaders = AccessController.doPrivileged(new PrivilegedAction<ModifiableClassLoaderRepository>() {
-
-            @Override
-            public ModifiableClassLoaderRepository run() {
-                return instantiator.getClassLoaderRepository();
-            }
-        });
-
-        if (loaders != null) {
-            loaders.addClassLoader(myLoader);
-
-            /* Add the system class loader, so that if the MBean server is
-               loaded by the bootstrap class loader we can still load
-               MBeans from the classpath using
-               createMBean(className, objectName).
-
-               If this class (JmxMBeanServer) was not loaded by the
-               system class loader or a parent of it, then the caller
-               must have RuntimePermission("getClassLoader") for the
-               getSystemClassLoader() call to succeed.  If the caller
-               does not have that permission, any call to
-               Class.getClassLoader() will fail.  Since there are lots
-               of those in JMX, we better throw the exception now.
-
-               This permission question is irrelevant when JMX is part
-               of J2SE (as of 1.5). */
-            ClassLoader systemLoader = ClassLoader.getSystemClassLoader();
-            if (systemLoader != myLoader)
-                loaders.addClassLoader(systemLoader);
-        }
-    }
-
-    /**
-     * Return the MBeanServerInterceptor.
-     * @exception UnsupportedOperationException if
-     *            {@link MBeanServerInterceptor}s
-     *            are not enabled on this object.
-     * @see #interceptorsEnabled
-     **/
-    public synchronized MBeanServer getMBeanServerInterceptor() {
-        if (interceptorsEnabled) return mbsInterceptor;
-        else throw new UnsupportedOperationException(
-                       "MBeanServerInterceptors are disabled.");
-    }
-
-    /**
-     * Set the MBeanServerInterceptor.
-     * @exception UnsupportedOperationException if
-     *            {@link MBeanServerInterceptor}s
-     *            are not enabled on this object.
-     * @see #interceptorsEnabled
-     **/
-    public synchronized void
-        setMBeanServerInterceptor(MBeanServer interceptor) {
-        if (!interceptorsEnabled) throw new UnsupportedOperationException(
-                       "MBeanServerInterceptors are disabled.");
-        if (interceptor == null) throw new
-            IllegalArgumentException("MBeanServerInterceptor is null");
-        mbsInterceptor = interceptor;
-    }
-
-    /**
-     * <p>Return the {@link java.lang.ClassLoader} that was used for
-     * loading the class of the named MBean.
-     * @param mbeanName The ObjectName of the MBean.
-     * @return The ClassLoader used for that MBean.
-     * @exception InstanceNotFoundException if the named MBean is not found.
-     */
-    public ClassLoader getClassLoaderFor(ObjectName mbeanName)
-        throws InstanceNotFoundException {
-        return mbsInterceptor.getClassLoaderFor(cloneObjectName(mbeanName));
-    }
-
-    /**
-     * <p>Return the named {@link java.lang.ClassLoader}.
-     * @param loaderName The ObjectName of the ClassLoader.
-     * @return The named ClassLoader.
-     * @exception InstanceNotFoundException if the named ClassLoader
-     * is not found.
-     */
-    public ClassLoader getClassLoader(ObjectName loaderName)
-        throws InstanceNotFoundException {
-        return mbsInterceptor.getClassLoader(cloneObjectName(loaderName));
-    }
-
-    /**
-     * <p>Return the ClassLoaderRepository for that MBeanServer.
-     * @return The ClassLoaderRepository for that MBeanServer.
-     **/
-    public ClassLoaderRepository getClassLoaderRepository() {
-        /* Permission check */
-        checkMBeanPermission(null, null, null, "getClassLoaderRepository");
-        return secureClr;
-    }
-
-    public MBeanServerDelegate getMBeanServerDelegate() {
-        if (!interceptorsEnabled) throw new UnsupportedOperationException(
-                       "MBeanServerInterceptors are disabled.");
-        return mBeanServerDelegateObject;
-    }
-
-    // These methods are called by the JMX MBeanServerBuilder.
-
-    /**
-     * This method creates a new MBeanServerDelegate for a new MBeanServer.
-     * When creating a new MBeanServer the
-     * {@link javax.management.MBeanServerBuilder} first calls this method
-     * in order to create a new MBeanServerDelegate.
-     * <br>Then it calls
-     * <code>newMBeanServer(defaultDomain,outer,delegate,interceptors)</code>
-     * passing the <var>delegate</var> that should be used by the MBeanServer
-     * implementation.
-     * <p>Note that the passed <var>delegate</var> might not be directly the
-     * MBeanServerDelegate that was returned by this method. It could
-     * be, for instance, a new object wrapping the previously
-     * returned object.
-     *
-     * @return A new {@link javax.management.MBeanServerDelegate}.
-     **/
-    public static MBeanServerDelegate newMBeanServerDelegate() {
-        return new MBeanServerDelegateImpl();
-    }
-
-    /**
-     * This method creates a new MBeanServer implementation object.
-     * When creating a new MBeanServer the
-     * {@link javax.management.MBeanServerBuilder} first calls
-     * <code>newMBeanServerDelegate()</code> in order to obtain a new
-     * {@link javax.management.MBeanServerDelegate} for the new
-     * MBeanServer. Then it calls
-     * <code>newMBeanServer(defaultDomain,outer,delegate)</code>
-     * passing the <var>delegate</var> that should be used by the
-     * MBeanServer  implementation.
-     * <p>Note that the passed <var>delegate</var> might not be directly the
-     * MBeanServerDelegate that was returned by this implementation. It could
-     * be, for instance, a new object wrapping the previously
-     * returned delegate.
-     * <p>The <var>outer</var> parameter is a pointer to the MBeanServer that
-     * should be passed to the {@link javax.management.MBeanRegistration}
-     * interface when registering MBeans inside the MBeanServer.
-     * If <var>outer</var> is <code>null</code>, then the MBeanServer
-     * implementation is free to use its own <code>this</code> pointer when
-     * invoking the {@link javax.management.MBeanRegistration} interface.
-     * <p>This makes it possible for a MBeanServer implementation to wrap
-     * another MBeanServer implementation, in order to implement, e.g,
-     * security checks, or to prevent access to the actual MBeanServer
-     * implementation by returning a pointer to a wrapping object.
-     *
-     * @param defaultDomain Default domain of the new MBeanServer.
-     * @param outer A pointer to the MBeanServer object that must be
-     *        passed to the MBeans when invoking their
-     *        {@link javax.management.MBeanRegistration} interface.
-     * @param delegate A pointer to the MBeanServerDelegate associated
-     *        with the new MBeanServer. The new MBeanServer must register
-     *        this MBean in its MBean repository.
-     * @param interceptors If <code>true</code>,
-     *        {@link MBeanServerInterceptor}s will be enabled (default is
-     *        <code>false</code>).
-     *        Note: this parameter is not taken into account by this
-     *        implementation - the default value <code>false</code> is
-     *        always used.
-     * @return A new private implementation of an MBeanServer.
-     * @see #interceptorsEnabled
-     * @see javax.management.MBeanServerBuilder
-     * @see com.sun.jmx.mbeanserver.JmxMBeanServerBuilder
-     **/
-    public static MBeanServer newMBeanServer(String defaultDomain,
-                                             MBeanServer outer,
-                                             MBeanServerDelegate delegate,
-                                             boolean interceptors) {
-        // Determine whether to use fair locking for the repository.
-        // Default is true.
-        final boolean fairLock = DEFAULT_FAIR_LOCK_POLICY;
-
-        checkNewMBeanServerPermission();
-
-        // This constructor happens to disregard the value of the interceptors
-        // flag - that is, it always uses the default value - false.
-        // This is admitedly a bug, but we chose not to fix it for now
-        // since we would rather not have anybody depending on the Sun private
-        // interceptor APIs - which is most probably going to be removed and
-        // replaced by a public (javax) feature in the future.
-        //
-        return new JmxMBeanServer(defaultDomain,outer,delegate,null,
-                                  interceptors,fairLock);
-    }
-
-    // JMX OBJECT CLONING
-    //-------------------
-
-    /**
-     * Clone object name.
-     */
-    private ObjectName cloneObjectName(ObjectName name) {
-        if (name != null) {
-            return ObjectName.getInstance(name);
-        }
-        return name;
-    }
-
-    /**
-     * Clone attribute.
-     */
-    private Attribute cloneAttribute(Attribute attribute) {
-        if (attribute != null) {
-            if (!attribute.getClass().equals(Attribute.class)) {
-                return new Attribute(attribute.getName(), attribute.getValue());
-            }
-        }
-        return attribute;
-    }
-
-    /**
-     * Clone attribute list.
-     */
-    private AttributeList cloneAttributeList(AttributeList list) {
-        if (list != null) {
-            List<Attribute> alist = list.asList();
-            if (!list.getClass().equals(AttributeList.class)) {
-                // Create new attribute list
-                //
-                AttributeList newList = new AttributeList(alist.size());
-
-                // Iterate through list and replace non JMX attributes
-                //
-                for (Attribute attribute : alist)
-                    newList.add(cloneAttribute(attribute));
-                return newList;
-            } else {
-                // Iterate through list and replace non JMX attributes
-                //
-                for (int i = 0; i < alist.size(); i++) {
-                    Attribute attribute = alist.get(i);
-                    if (!attribute.getClass().equals(Attribute.class)) {
-                        list.set(i, cloneAttribute(attribute));
-                    }
-                }
-                return list;
-            }
-        }
-        return list;
-    }
-
-    // SECURITY CHECKS
-    //----------------
-
-    private static void checkMBeanPermission(String classname,
-                                             String member,
-                                             ObjectName objectName,
-                                             String actions)
-        throws SecurityException {
-        SecurityManager sm = System.getSecurityManager();
-        if (sm != null) {
-            Permission perm = new MBeanPermission(classname,
-                                                  member,
-                                                  objectName,
-                                                  actions);
-            sm.checkPermission(perm);
-        }
-    }
-
-    private static void checkNewMBeanServerPermission() {
-        SecurityManager sm = System.getSecurityManager();
-        if (sm != null) {
-            Permission perm = new MBeanServerPermission("newMBeanServer");
-            sm.checkPermission(perm);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/mbeanserver/JmxMBeanServerBuilder.java b/ojluni/src/main/java/com/sun/jmx/mbeanserver/JmxMBeanServerBuilder.java
deleted file mode 100755
index 0f50737..0000000
--- a/ojluni/src/main/java/com/sun/jmx/mbeanserver/JmxMBeanServerBuilder.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * Copyright (c) 2002, 2007, 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.jmx.mbeanserver;
-
-import javax.management.MBeanServer;
-import javax.management.MBeanServerDelegate;
-import javax.management.MBeanServerBuilder;
-
-/**
- * This class represents a builder that creates
- * {@link javax.management.MBeanServer} implementations.
- * The JMX {@link javax.management.MBeanServerFactory} allows
- * for applications to provide their custom MBeanServer
- * implementation. This class is not used when the whole Sun Reference JMX
- * Implementation is used. However it may be used to substitute Sun
- * MBeanServer implementation to another JMX implementation.
- * <p>
- * Contrarily to the default {@link javax.management.MBeanServerBuilder
- * javax.management.MBeanServerBuilder} this MBeanServerBuilder returns
- * MBeanServers on which
- * {@link com.sun.jmx.interceptor.MBeanServerInterceptor}s are enabled.
- *
- * @since 1.5
- */
-public class JmxMBeanServerBuilder extends MBeanServerBuilder {
-    /**
-     * This method creates a new MBeanServerDelegate for a new MBeanServer.
-     * When creating a new MBeanServer the
-     * {@link javax.management.MBeanServerFactory} first calls this method
-     * in order to create a new MBeanServerDelegate.
-     * <br>Then it calls
-     * <code>newMBeanServer(defaultDomain,outer,delegate)</code>
-     * passing the <var>delegate</var> that should be used by the MBeanServer
-     * implementation.
-     * <p>Note that the passed <var>delegate</var> might not be directly the
-     * MBeanServerDelegate that was returned by this method. It could
-     * be, for instance, a new object wrapping the previously
-     * returned object.
-     *
-     * @return A new {@link javax.management.MBeanServerDelegate}.
-     **/
-    public MBeanServerDelegate newMBeanServerDelegate() {
-        return JmxMBeanServer.newMBeanServerDelegate();
-    }
-
-    /**
-     * This method creates a new MBeanServer implementation object.
-     * When creating a new MBeanServer the
-     * {@link javax.management.MBeanServerFactory} first calls
-     * <code>newMBeanServerDelegate()</code> in order to obtain a new
-     * {@link javax.management.MBeanServerDelegate} for the new
-     * MBeanServer. Then it calls
-     * <code>newMBeanServer(defaultDomain,outer,delegate)</code>
-     * passing the <var>delegate</var> that should be used by the
-     * MBeanServer  implementation.
-     * <p>Note that the passed <var>delegate</var> might not be directly the
-     * MBeanServerDelegate that was returned by this implementation. It could
-     * be, for instance, a new object wrapping the previously
-     * returned delegate.
-     * <p>The <var>outer</var> parameter is a pointer to the MBeanServer that
-     * should be passed to the {@link javax.management.MBeanRegistration}
-     * interface when registering MBeans inside the MBeanServer.
-     * If <var>outer</var> is <code>null</code>, then the MBeanServer
-     * implementation is free to use its own <code>this</code> pointer when
-     * invoking the {@link javax.management.MBeanRegistration} interface.
-     * <p>This makes it possible for a MBeanServer implementation to wrap
-     * another MBeanServer implementation, in order to implement, e.g,
-     * security checks, or to prevent access to the actual MBeanServer
-     * implementation by returning a pointer to a wrapping object.
-     * <p>
-     * This MBeanServerBuilder makes it possible to create MBeanServer
-     * which support {@link com.sun.jmx.interceptor.MBeanServerInterceptor}s.
-     *
-     * @param defaultDomain Default domain of the new MBeanServer.
-     * @param outer A pointer to the MBeanServer object that must be
-     *        passed to the MBeans when invoking their
-     *        {@link javax.management.MBeanRegistration} interface.
-     * @param delegate A pointer to the MBeanServerDelegate associated
-     *        with the new MBeanServer. The new MBeanServer must register
-     *        this MBean in its MBean repository.
-     *
-     * @return A new private implementation of an MBeanServer.
-     **/
-    public MBeanServer newMBeanServer(String defaultDomain,
-                                      MBeanServer outer,
-                                      MBeanServerDelegate delegate) {
-        return JmxMBeanServer.newMBeanServer(defaultDomain,outer,delegate,
-                                             true);
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/mbeanserver/MBeanAnalyzer.java b/ojluni/src/main/java/com/sun/jmx/mbeanserver/MBeanAnalyzer.java
deleted file mode 100755
index 5e5375d..0000000
--- a/ojluni/src/main/java/com/sun/jmx/mbeanserver/MBeanAnalyzer.java
+++ /dev/null
@@ -1,270 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-package com.sun.jmx.mbeanserver;
-
-import static com.sun.jmx.mbeanserver.Util.*;
-
-import java.lang.reflect.Method;
-import java.util.Arrays;
-import java.util.Comparator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import javax.management.NotCompliantMBeanException;
-
-/**
- * <p>An analyzer for a given MBean interface.  The analyzer can
- * be for Standard MBeans or MXBeans, depending on the MBeanIntrospector
- * passed at construction.
- *
- * <p>The analyzer can
- * visit the attributes and operations of the interface, calling
- * a caller-supplied visitor method for each one.</p>
- *
- * @param <M> Method or ConvertingMethod according as this is a
- * Standard MBean or an MXBean.
- *
- * @since 1.6
- */
-class MBeanAnalyzer<M> {
-
-    static interface MBeanVisitor<M> {
-        public void visitAttribute(String attributeName,
-                M getter,
-                M setter);
-        public void visitOperation(String operationName,
-                M operation);
-    }
-
-    void visit(MBeanVisitor<M> visitor) {
-        // visit attributes
-        for (Map.Entry<String, AttrMethods<M>> entry : attrMap.entrySet()) {
-            String name = entry.getKey();
-            AttrMethods<M> am = entry.getValue();
-            visitor.visitAttribute(name, am.getter, am.setter);
-        }
-
-        // visit operations
-        for (Map.Entry<String, List<M>> entry : opMap.entrySet()) {
-            for (M m : entry.getValue())
-                visitor.visitOperation(entry.getKey(), m);
-        }
-    }
-
-    /* Map op name to method */
-    private Map<String, List<M>> opMap = newInsertionOrderMap();
-    /* Map attr name to getter and/or setter */
-    private Map<String, AttrMethods<M>> attrMap = newInsertionOrderMap();
-
-    private static class AttrMethods<M> {
-        M getter;
-        M setter;
-    }
-
-    /**
-     * <p>Return an MBeanAnalyzer for the given MBean interface and
-     * MBeanIntrospector.  Calling this method twice with the same
-     * parameters may return the same object or two different but
-     * equivalent objects.
-     */
-    // Currently it's two different but equivalent objects.  This only
-    // really impacts proxy generation.  For MBean creation, the
-    // cached PerInterface object for an MBean interface means that
-    // an analyzer will not be recreated for a second MBean using the
-    // same interface.
-    static <M> MBeanAnalyzer<M> analyzer(Class<?> mbeanType,
-            MBeanIntrospector<M> introspector)
-            throws NotCompliantMBeanException {
-        return new MBeanAnalyzer<M>(mbeanType, introspector);
-    }
-
-    private MBeanAnalyzer(Class<?> mbeanType,
-            MBeanIntrospector<M> introspector)
-            throws NotCompliantMBeanException {
-        if (!mbeanType.isInterface()) {
-            throw new NotCompliantMBeanException("Not an interface: " +
-                    mbeanType.getName());
-        }
-
-        try {
-            initMaps(mbeanType, introspector);
-        } catch (Exception x) {
-            throw Introspector.throwException(mbeanType,x);
-        }
-    }
-
-    // Introspect the mbeanInterface and initialize this object's maps.
-    //
-    private void initMaps(Class<?> mbeanType,
-            MBeanIntrospector<M> introspector) throws Exception {
-        final List<Method> methods1 = introspector.getMethods(mbeanType);
-        final List<Method> methods = eliminateCovariantMethods(methods1);
-
-        /* Run through the methods to detect inconsistencies and to enable
-           us to give getter and setter together to visitAttribute. */
-        for (Method m : methods) {
-            final String name = m.getName();
-            final int nParams = m.getParameterTypes().length;
-
-            final M cm = introspector.mFrom(m);
-
-            String attrName = "";
-            if (name.startsWith("get"))
-                attrName = name.substring(3);
-            else if (name.startsWith("is")
-            && m.getReturnType() == boolean.class)
-                attrName = name.substring(2);
-
-            if (attrName.length() != 0 && nParams == 0
-                    && m.getReturnType() != void.class) {
-                // It's a getter
-                // Check we don't have both isX and getX
-                AttrMethods<M> am = attrMap.get(attrName);
-                if (am == null)
-                    am = new AttrMethods<M>();
-                else {
-                    if (am.getter != null) {
-                        final String msg = "Attribute " + attrName +
-                                " has more than one getter";
-                        throw new NotCompliantMBeanException(msg);
-                    }
-                }
-                am.getter = cm;
-                attrMap.put(attrName, am);
-            } else if (name.startsWith("set") && name.length() > 3
-                    && nParams == 1 &&
-                    m.getReturnType() == void.class) {
-                // It's a setter
-                attrName = name.substring(3);
-                AttrMethods<M> am = attrMap.get(attrName);
-                if (am == null)
-                    am = new AttrMethods<M>();
-                else if (am.setter != null) {
-                    final String msg = "Attribute " + attrName +
-                            " has more than one setter";
-                    throw new NotCompliantMBeanException(msg);
-                }
-                am.setter = cm;
-                attrMap.put(attrName, am);
-            } else {
-                // It's an operation
-                List<M> cms = opMap.get(name);
-                if (cms == null)
-                    cms = newList();
-                cms.add(cm);
-                opMap.put(name, cms);
-            }
-        }
-        /* Check that getters and setters are consistent. */
-        for (Map.Entry<String, AttrMethods<M>> entry : attrMap.entrySet()) {
-            AttrMethods<M> am = entry.getValue();
-            if (!introspector.consistent(am.getter, am.setter)) {
-                final String msg = "Getter and setter for " + entry.getKey() +
-                        " have inconsistent types";
-                throw new NotCompliantMBeanException(msg);
-            }
-        }
-    }
-
-    /**
-     * A comparator that defines a total order so that methods have the
-     * same name and identical signatures appear next to each others.
-     * The methods are sorted in such a way that methods which
-     * override each other will sit next to each other, with the
-     * overridden method first - e.g. Object getFoo() is placed before
-     * Integer getFoo(). This makes it possible to determine whether
-     * a method overrides another one simply by looking at the method(s)
-     * that precedes it in the list. (see eliminateCovariantMethods).
-     **/
-    private static class MethodOrder implements Comparator<Method> {
-        public int compare(Method a, Method b) {
-            final int cmp = a.getName().compareTo(b.getName());
-            if (cmp != 0) return cmp;
-            final Class<?>[] aparams = a.getParameterTypes();
-            final Class<?>[] bparams = b.getParameterTypes();
-            if (aparams.length != bparams.length)
-                return aparams.length - bparams.length;
-            if (!Arrays.equals(aparams, bparams)) {
-                return Arrays.toString(aparams).
-                        compareTo(Arrays.toString(bparams));
-            }
-            final Class<?> aret = a.getReturnType();
-            final Class<?> bret = b.getReturnType();
-            if (aret == bret) return 0;
-
-            // Super type comes first: Object, Number, Integer
-            if (aret.isAssignableFrom(bret))
-                return -1;
-            return +1;      // could assert bret.isAssignableFrom(aret)
-        }
-        public final static MethodOrder instance = new MethodOrder();
-    }
-
-
-    /* Eliminate methods that are overridden with a covariant return type.
-       Reflection will return both the original and the overriding method
-       but only the overriding one is of interest.  We return the methods
-       in the same order they arrived in.  This isn't required by the spec
-       but existing code may depend on it and users may be used to seeing
-       operations or attributes appear in a particular order.
-
-       Because of the way this method works, if the same Method appears
-       more than once in the given List then it will be completely deleted!
-       So don't do that.  */
-    static List<Method>
-            eliminateCovariantMethods(List<Method> startMethods) {
-        // We are assuming that you never have very many methods with the
-        // same name, so it is OK to use algorithms that are quadratic
-        // in the number of methods with the same name.
-
-        final int len = startMethods.size();
-        final Method[] sorted = startMethods.toArray(new Method[len]);
-        Arrays.sort(sorted,MethodOrder.instance);
-        final Set<Method> overridden = newSet();
-        for (int i=1;i<len;i++) {
-            final Method m0 = sorted[i-1];
-            final Method m1 = sorted[i];
-
-            // Methods that don't have the same name can't override each other
-            if (!m0.getName().equals(m1.getName())) continue;
-
-            // Methods that have the same name and same signature override
-            // each other. In that case, the second method overrides the first,
-            // due to the way we have sorted them in MethodOrder.
-            if (Arrays.equals(m0.getParameterTypes(),
-                    m1.getParameterTypes())) {
-                if (!overridden.add(m0))
-                    throw new RuntimeException("Internal error: duplicate Method");
-            }
-        }
-
-        final List<Method> methods = newList(startMethods);
-        methods.removeAll(overridden);
-        return methods;
-    }
-
-
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/mbeanserver/MBeanInstantiator.java b/ojluni/src/main/java/com/sun/jmx/mbeanserver/MBeanInstantiator.java
deleted file mode 100755
index 2fd2d52..0000000
--- a/ojluni/src/main/java/com/sun/jmx/mbeanserver/MBeanInstantiator.java
+++ /dev/null
@@ -1,786 +0,0 @@
-/*
- * Copyright (c) 2000, 2013, 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.jmx.mbeanserver;
-
-
-import static com.sun.jmx.defaults.JmxProperties.MBEANSERVER_LOGGER;
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Modifier;
-import java.security.AccessControlContext;
-import java.security.AccessController;
-import java.security.Permission;
-import java.security.Permissions;
-import java.security.PrivilegedAction;
-import java.security.ProtectionDomain;
-import java.util.Map;
-import java.util.logging.Level;
-
-import javax.management.InstanceNotFoundException;
-import javax.management.MBeanException;
-import javax.management.MBeanPermission;
-import javax.management.NotCompliantMBeanException;
-import javax.management.ObjectName;
-import javax.management.OperationsException;
-import javax.management.ReflectionException;
-import javax.management.RuntimeErrorException;
-import javax.management.RuntimeMBeanException;
-import javax.management.RuntimeOperationsException;
-import sun.reflect.misc.ConstructorUtil;
-import sun.reflect.misc.ReflectUtil;
-
-/**
- * Implements the MBeanInstantiator interface. Provides methods for
- * instantiating objects, finding the class given its name and using
- * different class loaders, deserializing objects in the context of a
- * given class loader.
- *
- * @since 1.5
- */
-public class MBeanInstantiator {
-    private final ModifiableClassLoaderRepository clr;
-    //    private MetaData meta = null;
-
-    MBeanInstantiator(ModifiableClassLoaderRepository clr) {
-        this.clr = clr;
-    }
-
-
-    /**
-     * This methods tests if the MBean class makes it possible to
-     * instantiate an MBean of this class in the MBeanServer.
-     * e.g. it must have a public constructor, be a concrete class...
-     */
-    public void testCreation(Class<?> c) throws NotCompliantMBeanException {
-        Introspector.testCreation(c);
-    }
-
-    /**
-     * Loads the class with the specified name using this object's
-     * Default Loader Repository.
-     **/
-    public Class<?> findClassWithDefaultLoaderRepository(String className)
-        throws ReflectionException {
-
-        Class<?> theClass;
-        if (className == null) {
-            throw new RuntimeOperationsException(new
-                IllegalArgumentException("The class name cannot be null"),
-                             "Exception occurred during object instantiation");
-        }
-
-        ReflectUtil.checkPackageAccess(className);
-        try {
-            if (clr == null) throw new ClassNotFoundException(className);
-            theClass = clr.loadClass(className);
-        }
-        catch (ClassNotFoundException ee) {
-            throw new ReflectionException(ee,
-       "The MBean class could not be loaded by the default loader repository");
-        }
-
-        return theClass;
-    }
-
-
-    /**
-     * Gets the class for the specified class name using the MBean
-     * Interceptor's classloader
-     */
-    public Class<?> findClass(String className, ClassLoader loader)
-        throws ReflectionException {
-
-        return loadClass(className,loader);
-    }
-
-    /**
-     * Gets the class for the specified class name using the specified
-     * class loader
-     */
-    public Class<?> findClass(String className, ObjectName aLoader)
-        throws ReflectionException, InstanceNotFoundException  {
-
-        if (aLoader == null)
-            throw new RuntimeOperationsException(new
-                IllegalArgumentException(), "Null loader passed in parameter");
-
-        // Retrieve the class loader from the repository
-        ClassLoader loader = null;
-        synchronized (this) {
-            loader = getClassLoader(aLoader);
-        }
-        if (loader == null) {
-            throw new InstanceNotFoundException("The loader named " +
-                       aLoader + " is not registered in the MBeanServer");
-        }
-        return findClass(className,loader);
-    }
-
-
-    /**
-     * Return an array of Class corresponding to the given signature, using
-     * the specified class loader.
-     */
-    public Class<?>[] findSignatureClasses(String signature[],
-                                           ClassLoader loader)
-        throws ReflectionException {
-
-        if (signature == null) return null;
-        final ClassLoader aLoader = loader;
-        final int length= signature.length;
-        final Class<?> tab[]=new Class<?>[length];
-
-        if (length == 0) return tab;
-        try {
-            for (int i= 0; i < length; i++) {
-                // Start handling primitive types (int. boolean and so
-                // forth)
-                //
-
-                final Class<?> primCla = primitiveClasses.get(signature[i]);
-                if (primCla != null) {
-                    tab[i] = primCla;
-                    continue;
-                }
-
-                ReflectUtil.checkPackageAccess(signature[i]);
-                // Ok we do not have a primitive type ! We need to build
-                // the signature of the method
-                //
-                if (aLoader != null) {
-                    // We need to load the class through the class
-                    // loader of the target object.
-                    //
-                    tab[i] = Class.forName(signature[i], false, aLoader);
-                } else {
-                    // Load through the default class loader
-                    //
-                    tab[i] = findClass(signature[i],
-                                       this.getClass().getClassLoader());
-                }
-            }
-        } catch (ClassNotFoundException e) {
-            if (MBEANSERVER_LOGGER.isLoggable(Level.FINEST)) {
-                MBEANSERVER_LOGGER.logp(Level.FINEST,
-                        MBeanInstantiator.class.getName(),
-                        "findSignatureClasses",
-                        "The parameter class could not be found", e);
-            }
-            throw new ReflectionException(e,
-                      "The parameter class could not be found");
-        } catch (RuntimeException e) {
-            if (MBEANSERVER_LOGGER.isLoggable(Level.FINEST)) {
-                MBEANSERVER_LOGGER.logp(Level.FINEST,
-                        MBeanInstantiator.class.getName(),
-                        "findSignatureClasses",
-                        "Unexpected exception", e);
-            }
-            throw e;
-        }
-        return tab;
-    }
-
-
-    /**
-     * Instantiates an object given its class, using its empty constructor.
-     * The call returns a reference to the newly created object.
-     */
-    public Object instantiate(Class<?> theClass)
-        throws ReflectionException, MBeanException {
-
-        checkMBeanPermission(theClass, null, null, "instantiate");
-
-        Object moi;
-
-        // ------------------------------
-        // ------------------------------
-        Constructor<?> cons = findConstructor(theClass, null);
-        if (cons == null) {
-            throw new ReflectionException(new
-                NoSuchMethodException("No such constructor"));
-        }
-        // Instantiate the new object
-        try {
-            ReflectUtil.checkPackageAccess(theClass);
-            ensureClassAccess(theClass);
-            moi= cons.newInstance();
-        } catch (InvocationTargetException e) {
-            // Wrap the exception.
-            Throwable t = e.getTargetException();
-            if (t instanceof RuntimeException) {
-                throw new RuntimeMBeanException((RuntimeException)t,
-                   "RuntimeException thrown in the MBean's empty constructor");
-            } else if (t instanceof Error) {
-                throw new RuntimeErrorException((Error) t,
-                   "Error thrown in the MBean's empty constructor");
-            } else {
-                throw new MBeanException((Exception) t,
-                   "Exception thrown in the MBean's empty constructor");
-            }
-        } catch (NoSuchMethodError error) {
-            throw new ReflectionException(new
-                NoSuchMethodException("No constructor"),
-                                          "No such constructor");
-        } catch (InstantiationException e) {
-            throw new ReflectionException(e,
-            "Exception thrown trying to invoke the MBean's empty constructor");
-        } catch (IllegalAccessException e) {
-            throw new ReflectionException(e,
-            "Exception thrown trying to invoke the MBean's empty constructor");
-        } catch (IllegalArgumentException e) {
-            throw new ReflectionException(e,
-            "Exception thrown trying to invoke the MBean's empty constructor");
-        }
-        return moi;
-
-    }
-
-
-
-   /**
-     * Instantiates an object given its class, the parameters and
-     * signature of its constructor The call returns a reference to
-     * the newly created object.
-     */
-    public Object instantiate(Class<?> theClass, Object params[],
-                              String signature[], ClassLoader loader)
-        throws ReflectionException, MBeanException {
-
-        checkMBeanPermission(theClass, null, null, "instantiate");
-
-        // Instantiate the new object
-        // ------------------------------
-        // ------------------------------
-        final Class<?>[] tab;
-        Object moi;
-        try {
-            // Build the signature of the method
-            //
-            ClassLoader aLoader= theClass.getClassLoader();
-            // Build the signature of the method
-            //
-            tab =
-                ((signature == null)?null:
-                 findSignatureClasses(signature,aLoader));
-        }
-        // Exception IllegalArgumentException raised in Jdk1.1.8
-        catch (IllegalArgumentException e) {
-            throw new ReflectionException(e,
-                    "The constructor parameter classes could not be loaded");
-        }
-
-        // Query the metadata service to get the right constructor
-        Constructor<?> cons = findConstructor(theClass, tab);
-
-        if (cons == null) {
-            throw new ReflectionException(new
-                NoSuchMethodException("No such constructor"));
-        }
-        try {
-            ReflectUtil.checkPackageAccess(theClass);
-            ensureClassAccess(theClass);
-            moi = cons.newInstance(params);
-        }
-        catch (NoSuchMethodError error) {
-            throw new ReflectionException(new
-                NoSuchMethodException("No such constructor found"),
-                                          "No such constructor" );
-        }
-        catch (InstantiationException e) {
-            throw new ReflectionException(e,
-                "Exception thrown trying to invoke the MBean's constructor");
-        }
-        catch (IllegalAccessException e) {
-            throw new ReflectionException(e,
-                "Exception thrown trying to invoke the MBean's constructor");
-        }
-        catch (InvocationTargetException e) {
-            // Wrap the exception.
-            Throwable th = e.getTargetException();
-            if (th instanceof RuntimeException) {
-                throw new RuntimeMBeanException((RuntimeException)th,
-                      "RuntimeException thrown in the MBean's constructor");
-            } else if (th instanceof Error) {
-                throw new RuntimeErrorException((Error) th,
-                      "Error thrown in the MBean's constructor");
-            } else {
-                throw new MBeanException((Exception) th,
-                      "Exception thrown in the MBean's constructor");
-            }
-        }
-        return moi;
-    }
-
-    /**
-     * De-serializes a byte array in the context of a classloader.
-     *
-     * @param loader the classloader to use for de-serialization
-     * @param data The byte array to be de-sererialized.
-     *
-     * @return  The de-serialized object stream.
-     *
-     * @exception OperationsException Any of the usual Input/Output related
-     * exceptions.
-     */
-    public ObjectInputStream deserialize(ClassLoader loader, byte[] data)
-        throws OperationsException {
-
-        // Check parameter validity
-        if (data == null) {
-            throw new  RuntimeOperationsException(new
-                IllegalArgumentException(), "Null data passed in parameter");
-        }
-        if (data.length == 0) {
-            throw new  RuntimeOperationsException(new
-                IllegalArgumentException(), "Empty data passed in parameter");
-        }
-
-        // Object deserialization
-        ByteArrayInputStream bIn;
-        ObjectInputStream    objIn;
-
-        bIn   = new ByteArrayInputStream(data);
-        try {
-            objIn = new ObjectInputStreamWithLoader(bIn,loader);
-        } catch (IOException e) {
-            throw new OperationsException(
-                     "An IOException occurred trying to de-serialize the data");
-        }
-
-        return objIn;
-    }
-
-    /**
-     * De-serializes a byte array in the context of a given MBean class loader.
-     * <P>The class loader is the one that loaded the class with name
-     * "className".
-     * <P>The name of the class loader to be used for loading the specified
-     * class is specified. If null, a default one has to be provided (for a
-     * MBean Server, its own class loader will be used).
-     *
-     * @param className The name of the class whose class loader should
-     *  be used for the de-serialization.
-     * @param data The byte array to be de-sererialized.
-     * @param loaderName The name of the class loader to be used for loading
-     * the specified class. If null, a default one has to be provided (for a
-     * MBean Server, its own class loader will be used).
-     *
-     * @return  The de-serialized object stream.
-     *
-     * @exception InstanceNotFoundException The specified class loader MBean is
-     * not found.
-     * @exception OperationsException Any of the usual Input/Output related
-     * exceptions.
-     * @exception ReflectionException The specified class could not be loaded
-     * by the specified class loader.
-     */
-    public ObjectInputStream deserialize(String className,
-                                         ObjectName loaderName,
-                                         byte[] data,
-                                         ClassLoader loader)
-        throws InstanceNotFoundException,
-               OperationsException,
-               ReflectionException  {
-
-        // Check parameter validity
-        if (data == null) {
-            throw new  RuntimeOperationsException(new
-                IllegalArgumentException(), "Null data passed in parameter");
-        }
-        if (data.length == 0) {
-            throw new  RuntimeOperationsException(new
-                IllegalArgumentException(), "Empty data passed in parameter");
-        }
-        if (className == null) {
-            throw new  RuntimeOperationsException(new
-             IllegalArgumentException(), "Null className passed in parameter");
-        }
-
-        ReflectUtil.checkPackageAccess(className);
-        Class<?> theClass;
-        if (loaderName == null) {
-            // Load the class using the agent class loader
-            theClass = findClass(className, loader);
-
-        } else {
-            // Get the class loader MBean
-            try {
-                ClassLoader instance = null;
-
-                instance = getClassLoader(loaderName);
-                if (instance == null)
-                    throw new ClassNotFoundException(className);
-                theClass = Class.forName(className, false, instance);
-            }
-            catch (ClassNotFoundException e) {
-                throw new ReflectionException(e,
-                               "The MBean class could not be loaded by the " +
-                               loaderName.toString() + " class loader");
-            }
-        }
-
-        // Object deserialization
-        ByteArrayInputStream bIn;
-        ObjectInputStream    objIn;
-
-        bIn   = new ByteArrayInputStream(data);
-        try {
-            objIn = new ObjectInputStreamWithLoader(bIn,
-                                           theClass.getClassLoader());
-        } catch (IOException e) {
-            throw new OperationsException(
-                    "An IOException occurred trying to de-serialize the data");
-        }
-
-        return objIn;
-    }
-
-
-    /**
-     * Instantiates an object using the list of all class loaders registered
-     * in the MBean Interceptor
-     * (using its {@link javax.management.loading.ClassLoaderRepository}).
-     * <P>The object's class should have a public constructor.
-     * <P>It returns a reference to the newly created object.
-     * <P>The newly created object is not registered in the MBean Interceptor.
-     *
-     * @param className The class name of the object to be instantiated.
-     *
-     * @return The newly instantiated object.
-     *
-     * @exception ReflectionException Wraps a
-     * <CODE>java.lang.ClassNotFoundException</CODE> or the
-     * <CODE>java.lang.Exception</CODE> that occurred when trying to invoke the
-     * object's constructor.
-     * @exception MBeanException The constructor of the object has thrown an
-     * exception
-     * @exception RuntimeOperationsException Wraps a
-     * <CODE>java.lang.IllegalArgumentException</CODE>: the className passed in
-     * parameter is null.
-     */
-    public Object instantiate(String className)
-        throws ReflectionException,
-        MBeanException {
-
-        return instantiate(className, (Object[]) null, (String[]) null, null);
-    }
-
-
-
-    /**
-     * Instantiates an object using the class Loader specified by its
-     * <CODE>ObjectName</CODE>.
-     * <P>If the loader name is null, a default one has to be provided (for a
-     * MBean Server, the ClassLoader that loaded it will be used).
-     * <P>The object's class should have a public constructor.
-     * <P>It returns a reference to the newly created object.
-     * <P>The newly created object is not registered in the MBean Interceptor.
-     *
-     * @param className The class name of the MBean to be instantiated.
-     * @param loaderName The object name of the class loader to be used.
-     *
-     * @return The newly instantiated object.
-     *
-     * @exception ReflectionException Wraps a
-     * <CODE>java.lang.ClassNotFoundException</CODE> or the
-     * <CODE>java.lang.Exception</CODE> that occurred when trying to invoke the
-     * object's constructor.
-     * @exception MBeanException The constructor of the object has thrown an
-     * exception.
-     * @exception InstanceNotFoundException The specified class loader is not
-     * registered in the MBeanServerInterceptor.
-     * @exception RuntimeOperationsException Wraps a
-     * <CODE>java.lang.IllegalArgumentException</CODE>: the className passed in
-     * parameter is null.
-     */
-    public Object instantiate(String className, ObjectName loaderName,
-                              ClassLoader loader)
-        throws ReflectionException, MBeanException,
-               InstanceNotFoundException {
-
-        return instantiate(className, loaderName, (Object[]) null,
-                           (String[]) null, loader);
-    }
-
-
-    /**
-     * Instantiates an object using the list of all class loaders registered
-     * in the MBean server
-     * (using its {@link javax.management.loading.ClassLoaderRepository}).
-     * <P>The object's class should have a public constructor.
-     * <P>The call returns a reference to the newly created object.
-     * <P>The newly created object is not registered in the MBean Interceptor.
-     *
-     * @param className The class name of the object to be instantiated.
-     * @param params An array containing the parameters of the constructor to
-     * be invoked.
-     * @param signature An array containing the signature of the constructor to
-     * be invoked.
-     *
-     * @return The newly instantiated object.
-     *
-     * @exception ReflectionException Wraps a
-     * <CODE>java.lang.ClassNotFoundException</CODE> or the
-     * <CODE>java.lang.Exception</CODE> that occurred when trying to invoke the
-     * object's constructor.
-     * @exception MBeanException The constructor of the object has thrown an
-     * exception
-     * @exception RuntimeOperationsException Wraps a
-     * <CODE>java.lang.IllegalArgumentException</CODE>: the className passed in
-     * parameter is null.
-     */
-    public Object instantiate(String className,
-                              Object params[],
-                              String signature[],
-                              ClassLoader loader)
-        throws ReflectionException,
-        MBeanException {
-
-        Class<?> theClass = findClassWithDefaultLoaderRepository(className);
-        return instantiate(theClass, params, signature, loader);
-    }
-
-
-
-    /**
-     * Instantiates an object. The class loader to be used is identified by its
-     * object name.
-     * <P>If the object name of the loader is null, a default has to be
-     * provided (for example, for a MBean Server, the ClassLoader that loaded
-     * it will be used).
-     * <P>The object's class should have a public constructor.
-     * <P>The call returns a reference to the newly created object.
-     * <P>The newly created object is not registered in the MBean server.
-     *
-     * @param className The class name of the object to be instantiated.
-     * @param params An array containing the parameters of the constructor to
-     * be invoked.
-     * @param signature An array containing the signature of the constructor to
-     * be invoked.
-     * @param loaderName The object name of the class loader to be used.
-     *
-     * @return The newly instantiated object.
-     *
-     * @exception ReflectionException Wraps a
-     * <CODE>java.lang.ClassNotFoundException</CODE> or the
-     * <CODE>java.lang.Exception</CODE> that occurred when trying to invoke the
-     * object's constructor.
-     * @exception MBeanException The constructor of the object has thrown an
-     * exception
-     * @exception InstanceNotFoundException The specified class loader is not
-     * registered in the MBean Interceptor.
-     * @exception RuntimeOperationsException Wraps a
-     * <CODE>java.lang.IllegalArgumentException</CODE>: the className passed in
-     * parameter is null.
-     */
-    public Object instantiate(String className,
-                              ObjectName loaderName,
-                              Object params[],
-                              String signature[],
-                              ClassLoader loader)
-        throws ReflectionException,
-               MBeanException,
-        InstanceNotFoundException {
-
-        // ------------------------------
-        // ------------------------------
-        Class<?> theClass;
-
-        if (loaderName == null) {
-            theClass = findClass(className, loader);
-        } else {
-            theClass = findClass(className, loaderName);
-        }
-        return instantiate(theClass, params, signature, loader);
-    }
-
-
-    /**
-     * Return the Default Loader Repository used by this instantiator object.
-     **/
-    public ModifiableClassLoaderRepository getClassLoaderRepository() {
-        checkMBeanPermission((String)null, null, null, "getClassLoaderRepository");
-        return clr;
-    }
-
-    /**
-     * Load a class with the specified loader, or with this object
-     * class loader if the specified loader is null.
-     **/
-    static Class<?> loadClass(String className, ClassLoader loader)
-        throws ReflectionException {
-        Class<?> theClass;
-        if (className == null) {
-            throw new RuntimeOperationsException(new
-                IllegalArgumentException("The class name cannot be null"),
-                              "Exception occurred during object instantiation");
-        }
-        ReflectUtil.checkPackageAccess(className);
-        try {
-            if (loader == null)
-                loader = MBeanInstantiator.class.getClassLoader();
-            if (loader != null) {
-                theClass = Class.forName(className, false, loader);
-            } else {
-                theClass = Class.forName(className);
-            }
-        } catch (ClassNotFoundException e) {
-            throw new ReflectionException(e,
-            "The MBean class could not be loaded");
-        }
-        return theClass;
-    }
-
-
-
-    /**
-     * Load the classes specified in the signature with the given loader,
-     * or with this object class loader.
-     **/
-    static Class<?>[] loadSignatureClasses(String signature[],
-                                           ClassLoader loader)
-        throws  ReflectionException {
-
-        if (signature == null) return null;
-        final ClassLoader aLoader =
-           (loader==null?MBeanInstantiator.class.getClassLoader():loader);
-        final int length= signature.length;
-        final Class<?> tab[]=new Class<?>[length];
-
-        if (length == 0) return tab;
-        try {
-            for (int i= 0; i < length; i++) {
-                // Start handling primitive types (int. boolean and so
-                // forth)
-                //
-
-                final Class<?> primCla = primitiveClasses.get(signature[i]);
-                if (primCla != null) {
-                    tab[i] = primCla;
-                    continue;
-                }
-
-                // Ok we do not have a primitive type ! We need to build
-                // the signature of the method
-                //
-                // We need to load the class through the class
-                // loader of the target object.
-                //
-                ReflectUtil.checkPackageAccess(signature[i]);
-                tab[i] = Class.forName(signature[i], false, aLoader);
-            }
-        } catch (ClassNotFoundException e) {
-            if (MBEANSERVER_LOGGER.isLoggable(Level.FINEST)) {
-                MBEANSERVER_LOGGER.logp(Level.FINEST,
-                        MBeanInstantiator.class.getName(),
-                        "findSignatureClasses",
-                        "The parameter class could not be found", e);
-            }
-            throw new ReflectionException(e,
-                      "The parameter class could not be found");
-        } catch (RuntimeException e) {
-            if (MBEANSERVER_LOGGER.isLoggable(Level.FINEST)) {
-                MBEANSERVER_LOGGER.logp(Level.FINEST,
-                        MBeanInstantiator.class.getName(),
-                        "findSignatureClasses",
-                        "Unexpected exception", e);
-            }
-            throw e;
-        }
-        return tab;
-    }
-
-    private Constructor<?> findConstructor(Class<?> c, Class<?>[] params) {
-        try {
-            return ConstructorUtil.getConstructor(c, params);
-        } catch (Exception e) {
-            return null;
-        }
-    }
-
-
-    private static final Map<String, Class<?>> primitiveClasses = Util.newMap();
-    static {
-        for (Class<?> c : new Class<?>[] {byte.class, short.class, int.class,
-                                          long.class, float.class, double.class,
-                                          char.class, boolean.class})
-            primitiveClasses.put(c.getName(), c);
-    }
-
-    private static void checkMBeanPermission(Class<?> clazz,
-                                             String member,
-                                             ObjectName objectName,
-                                             String actions) {
-        if (clazz != null) {
-            checkMBeanPermission(clazz.getName(), member, objectName, actions);
-        }
-    }
-
-    private static void checkMBeanPermission(String classname,
-                                             String member,
-                                             ObjectName objectName,
-                                             String actions)
-        throws SecurityException {
-        SecurityManager sm = System.getSecurityManager();
-        if (sm != null) {
-            Permission perm = new MBeanPermission(classname,
-                                                  member,
-                                                  objectName,
-                                                  actions);
-            sm.checkPermission(perm);
-        }
-    }
-
-    private static void ensureClassAccess(Class clazz)
-            throws IllegalAccessException
-    {
-        int mod = clazz.getModifiers();
-        if (!Modifier.isPublic(mod)) {
-            throw new IllegalAccessException("Class is not public and can't be instantiated");
-        }
-    }
-
-    private ClassLoader getClassLoader(final ObjectName name) {
-        if(clr == null){
-            return null;
-        }
-        // Restrict to getClassLoader permission only
-        Permissions permissions = new Permissions();
-        permissions.add(new MBeanPermission("*", null, name, "getClassLoader"));
-        ProtectionDomain protectionDomain = new ProtectionDomain(null, permissions);
-        ProtectionDomain[] domains = {protectionDomain};
-        AccessControlContext ctx = new AccessControlContext(domains);
-        ClassLoader loader = AccessController.doPrivileged(new PrivilegedAction<ClassLoader>() {
-            public ClassLoader run() {
-                return clr.getClassLoader(name);
-            }
-        }, ctx);
-        return loader;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/mbeanserver/MBeanIntrospector.java b/ojluni/src/main/java/com/sun/jmx/mbeanserver/MBeanIntrospector.java
deleted file mode 100755
index 67073dd..0000000
--- a/ojluni/src/main/java/com/sun/jmx/mbeanserver/MBeanIntrospector.java
+++ /dev/null
@@ -1,471 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-package com.sun.jmx.mbeanserver;
-
-
-import static com.sun.jmx.mbeanserver.Util.*;
-
-import java.lang.ref.WeakReference;
-import java.lang.reflect.Array;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.lang.reflect.Type;
-import java.util.Arrays;
-import java.util.List;
-import java.util.WeakHashMap;
-
-import javax.management.Descriptor;
-import javax.management.ImmutableDescriptor;
-import javax.management.IntrospectionException;
-import javax.management.InvalidAttributeValueException;
-import javax.management.MBeanAttributeInfo;
-import javax.management.MBeanConstructorInfo;
-import javax.management.MBeanException;
-import javax.management.MBeanInfo;
-import javax.management.MBeanNotificationInfo;
-import javax.management.MBeanOperationInfo;
-import javax.management.NotCompliantMBeanException;
-import javax.management.NotificationBroadcaster;
-import javax.management.ReflectionException;
-import sun.reflect.misc.ReflectUtil;
-
-/**
- * An introspector for MBeans of a certain type.  There is one instance
- * of this class for Standard MBeans, and one for every MXBeanMappingFactory;
- * these two cases correspond to the two concrete subclasses of this abstract
- * class.
- *
- * @param <M> the representation of methods for this kind of MBean:
- * Method for Standard MBeans, ConvertingMethod for MXBeans.
- *
- * @since 1.6
- */
-/*
- * Using a type parameter <M> allows us to deal with the fact that
- * Method and ConvertingMethod have no useful common ancestor, on
- * which we could call getName, getGenericReturnType, etc.  A simpler approach
- * would be to wrap every Method in an object that does have a common
- * ancestor with ConvertingMethod.  But that would mean an extra object
- * for every Method in every Standard MBean interface.
- */
-abstract class MBeanIntrospector<M> {
-    static final class PerInterfaceMap<M>
-            extends WeakHashMap<Class<?>, WeakReference<PerInterface<M>>> {}
-
-    /** The map from interface to PerInterface for this type of MBean. */
-    abstract PerInterfaceMap<M> getPerInterfaceMap();
-    /**
-     * The map from concrete implementation class and interface to
-     * MBeanInfo for this type of MBean.
-     */
-    abstract MBeanInfoMap getMBeanInfoMap();
-
-    /** Make an interface analyzer for this type of MBean. */
-    abstract MBeanAnalyzer<M> getAnalyzer(Class<?> mbeanInterface)
-    throws NotCompliantMBeanException;
-
-    /** True if MBeans with this kind of introspector are MXBeans. */
-    abstract boolean isMXBean();
-
-    /** Find the M corresponding to the given Method. */
-    abstract M mFrom(Method m);
-
-    /** Get the name of this method. */
-    abstract String getName(M m);
-
-    /**
-     * Get the return type of this method.  This is the return type
-     * of a method in a Java interface, so for MXBeans it is the
-     * declared Java type, not the mapped Open Type.
-     */
-    abstract Type getGenericReturnType(M m);
-
-    /**
-     * Get the parameter types of this method in the Java interface
-     * it came from.
-     */
-    abstract Type[] getGenericParameterTypes(M m);
-
-    /**
-     * Get the signature of this method as a caller would have to supply
-     * it in MBeanServer.invoke.  For MXBeans, the named types will be
-     * the mapped Open Types for the parameters.
-     */
-    abstract String[] getSignature(M m);
-
-    /**
-     * Check that this method is valid.  For example, a method in an
-     * MXBean interface is not valid if one of its parameters cannot be
-     * mapped to an Open Type.
-     */
-    abstract void checkMethod(M m);
-
-    /**
-     * Invoke the method with the given target and arguments.
-     *
-     * @param cookie Additional information about the target.  For an
-     * MXBean, this is the MXBeanLookup associated with the MXBean.
-     */
-    /*
-     * It would be cleaner if the type of the cookie were a
-     * type parameter to this class, but that would involve a lot of
-     * messy type parameter propagation just to avoid a couple of casts.
-     */
-    abstract Object invokeM2(M m, Object target, Object[] args, Object cookie)
-    throws InvocationTargetException, IllegalAccessException,
-            MBeanException;
-
-    /**
-     * Test whether the given value is valid for the given parameter of this
-     * M.
-     */
-    abstract boolean validParameter(M m, Object value, int paramNo,
-            Object cookie);
-
-    /**
-     * Construct an MBeanAttributeInfo for the given attribute based on the
-     * given getter and setter.  One but not both of the getter and setter
-     * may be null.
-     */
-    abstract MBeanAttributeInfo getMBeanAttributeInfo(String attributeName,
-            M getter, M setter);
-    /**
-     * Construct an MBeanOperationInfo for the given operation based on
-     * the M it was derived from.
-     */
-    abstract MBeanOperationInfo getMBeanOperationInfo(String operationName,
-            M operation);
-
-    /**
-     * Get a Descriptor containing fields that MBeans of this kind will
-     * always have.  For example, MXBeans will always have "mxbean=true".
-     */
-    abstract Descriptor getBasicMBeanDescriptor();
-
-    /**
-     * Get a Descriptor containing additional fields beyond the ones
-     * from getBasicMBeanDescriptor that MBeans whose concrete class
-     * is resourceClass will always have.
-     */
-    abstract Descriptor getMBeanDescriptor(Class<?> resourceClass);
-
-    /**
-     * Get the methods to be analyzed to build the MBean interface.
-     */
-    final List<Method> getMethods(final Class<?> mbeanType) {
-        ReflectUtil.checkPackageAccess(mbeanType);
-        return Arrays.asList(mbeanType.getMethods());
-    }
-
-    final PerInterface<M> getPerInterface(Class<?> mbeanInterface)
-    throws NotCompliantMBeanException {
-        PerInterfaceMap<M> map = getPerInterfaceMap();
-        synchronized (map) {
-            WeakReference<PerInterface<M>> wr = map.get(mbeanInterface);
-            PerInterface<M> pi = (wr == null) ? null : wr.get();
-            if (pi == null) {
-                try {
-                    MBeanAnalyzer<M> analyzer = getAnalyzer(mbeanInterface);
-                    MBeanInfo mbeanInfo =
-                            makeInterfaceMBeanInfo(mbeanInterface, analyzer);
-                    pi = new PerInterface<M>(mbeanInterface, this, analyzer,
-                            mbeanInfo);
-                    wr = new WeakReference<PerInterface<M>>(pi);
-                    map.put(mbeanInterface, wr);
-                } catch (Exception x) {
-                    throw Introspector.throwException(mbeanInterface,x);
-                }
-            }
-            return pi;
-        }
-    }
-
-    /**
-     * Make the MBeanInfo skeleton for the given MBean interface using
-     * the given analyzer.  This will never be the MBeanInfo of any real
-     * MBean (because the getClassName() must be a concrete class), but
-     * its MBeanAttributeInfo[] and MBeanOperationInfo[] can be inserted
-     * into such an MBeanInfo, and its Descriptor can be the basis for
-     * the MBeanInfo's Descriptor.
-     */
-    private MBeanInfo makeInterfaceMBeanInfo(Class<?> mbeanInterface,
-            MBeanAnalyzer<M> analyzer) {
-        final MBeanInfoMaker maker = new MBeanInfoMaker();
-        analyzer.visit(maker);
-        final String description =
-                "Information on the management interface of the MBean";
-        return maker.makeMBeanInfo(mbeanInterface, description);
-    }
-
-    /** True if the given getter and setter are consistent. */
-    final boolean consistent(M getter, M setter) {
-        return (getter == null || setter == null ||
-                getGenericReturnType(getter).equals(getGenericParameterTypes(setter)[0]));
-    }
-
-    /**
-     * Invoke the given M on the given target with the given args and cookie.
-     * Wrap exceptions appropriately.
-     */
-    final Object invokeM(M m, Object target, Object[] args, Object cookie)
-    throws MBeanException, ReflectionException {
-        try {
-            return invokeM2(m, target, args, cookie);
-        } catch (InvocationTargetException e) {
-            unwrapInvocationTargetException(e);
-            throw new RuntimeException(e); // not reached
-        } catch (IllegalAccessException e) {
-            throw new ReflectionException(e, e.toString());
-        }
-        /* We do not catch and wrap RuntimeException or Error,
-         * because we're in a DynamicMBean, so the logic for DynamicMBeans
-         * will do the wrapping.
-         */
-    }
-
-    /**
-     * Invoke the given setter on the given target with the given argument
-     * and cookie.  Wrap exceptions appropriately.
-     */
-    /* If the value is of the wrong type for the method we are about to
-     * invoke, we are supposed to throw an InvalidAttributeValueException.
-     * Rather than making the check always, we invoke the method, then
-     * if it throws an exception we check the type to see if that was
-     * what caused the exception.  The assumption is that an exception
-     * from an invalid type will arise before any user method is ever
-     * called (either in reflection or in OpenConverter).
-     */
-    final void invokeSetter(String name, M setter, Object target, Object arg,
-            Object cookie)
-            throws MBeanException, ReflectionException,
-            InvalidAttributeValueException {
-        try {
-            invokeM2(setter, target, new Object[] {arg}, cookie);
-        } catch (IllegalAccessException e) {
-            throw new ReflectionException(e, e.toString());
-        } catch (RuntimeException e) {
-            maybeInvalidParameter(name, setter, arg, cookie);
-            throw e;
-        } catch (InvocationTargetException e) {
-            maybeInvalidParameter(name, setter, arg, cookie);
-            unwrapInvocationTargetException(e);
-        }
-    }
-
-    private void maybeInvalidParameter(String name, M setter, Object arg,
-            Object cookie)
-            throws InvalidAttributeValueException {
-        if (!validParameter(setter, arg, 0, cookie)) {
-            final String msg =
-                    "Invalid value for attribute " + name + ": " + arg;
-            throw new InvalidAttributeValueException(msg);
-        }
-    }
-
-    static boolean isValidParameter(Method m, Object value, int paramNo) {
-        Class<?> c = m.getParameterTypes()[paramNo];
-        try {
-            // Following is expensive but we only call this method to determine
-            // if an exception is due to an incompatible parameter type.
-            // Plain old c.isInstance doesn't work for primitive types.
-            Object a = Array.newInstance(c, 1);
-            Array.set(a, 0, value);
-            return true;
-        } catch (IllegalArgumentException e) {
-            return false;
-        }
-    }
-
-    private static void
-            unwrapInvocationTargetException(InvocationTargetException e)
-            throws MBeanException {
-        Throwable t = e.getCause();
-        if (t instanceof RuntimeException)
-            throw (RuntimeException) t;
-        else if (t instanceof Error)
-            throw (Error) t;
-        else
-            throw new MBeanException((Exception) t,
-                    (t == null ? null : t.toString()));
-    }
-
-    /** A visitor that constructs the per-interface MBeanInfo. */
-    private class MBeanInfoMaker
-            implements MBeanAnalyzer.MBeanVisitor<M> {
-
-        public void visitAttribute(String attributeName,
-                M getter,
-                M setter) {
-            MBeanAttributeInfo mbai =
-                    getMBeanAttributeInfo(attributeName, getter, setter);
-
-            attrs.add(mbai);
-        }
-
-        public void visitOperation(String operationName,
-                M operation) {
-            MBeanOperationInfo mboi =
-                    getMBeanOperationInfo(operationName, operation);
-
-            ops.add(mboi);
-        }
-
-        /** Make an MBeanInfo based on the attributes and operations
-         *  found in the interface. */
-        MBeanInfo makeMBeanInfo(Class<?> mbeanInterface,
-                String description) {
-            final MBeanAttributeInfo[] attrArray =
-                    attrs.toArray(new MBeanAttributeInfo[0]);
-            final MBeanOperationInfo[] opArray =
-                    ops.toArray(new MBeanOperationInfo[0]);
-            final String interfaceClassName =
-                    "interfaceClassName=" + mbeanInterface.getName();
-            final Descriptor classNameDescriptor =
-                    new ImmutableDescriptor(interfaceClassName);
-            final Descriptor mbeanDescriptor = getBasicMBeanDescriptor();
-            final Descriptor annotatedDescriptor =
-                    Introspector.descriptorForElement(mbeanInterface);
-            final Descriptor descriptor =
-                DescriptorCache.getInstance().union(
-                    classNameDescriptor,
-                    mbeanDescriptor,
-                    annotatedDescriptor);
-
-            return new MBeanInfo(mbeanInterface.getName(),
-                    description,
-                    attrArray,
-                    null,
-                    opArray,
-                    null,
-                    descriptor);
-        }
-
-        private final List<MBeanAttributeInfo> attrs = newList();
-        private final List<MBeanOperationInfo> ops = newList();
-    }
-
-    /*
-     * Looking up the MBeanInfo for a given base class (implementation class)
-     * is complicated by the fact that we may use the same base class with
-     * several different explicit MBean interfaces via the
-     * javax.management.StandardMBean class.  It is further complicated
-     * by the fact that we have to be careful not to retain a strong reference
-     * to any Class object for fear we would prevent a ClassLoader from being
-     * garbage-collected.  So we have a first lookup from the base class
-     * to a map for each interface that base class might specify giving
-     * the MBeanInfo constructed for that base class and interface.
-     */
-    static class MBeanInfoMap
-            extends WeakHashMap<Class<?>, WeakHashMap<Class<?>, MBeanInfo>> {
-    }
-
-    /**
-     * Return the MBeanInfo for the given resource, based on the given
-     * per-interface data.
-     */
-    final MBeanInfo getMBeanInfo(Object resource, PerInterface<M> perInterface) {
-        MBeanInfo mbi =
-                getClassMBeanInfo(resource.getClass(), perInterface);
-        MBeanNotificationInfo[] notifs = findNotifications(resource);
-        if (notifs == null || notifs.length == 0)
-            return mbi;
-        else {
-            return new MBeanInfo(mbi.getClassName(),
-                    mbi.getDescription(),
-                    mbi.getAttributes(),
-                    mbi.getConstructors(),
-                    mbi.getOperations(),
-                    notifs,
-                    mbi.getDescriptor());
-        }
-    }
-
-    /**
-     * Return the basic MBeanInfo for resources of the given class and
-     * per-interface data.  This MBeanInfo might not be the final MBeanInfo
-     * for instances of the class, because if the class is a
-     * NotificationBroadcaster then each instance gets to decide what
-     * MBeanNotificationInfo[] to put in its own MBeanInfo.
-     */
-    final MBeanInfo getClassMBeanInfo(Class<?> resourceClass,
-            PerInterface<M> perInterface) {
-        MBeanInfoMap map = getMBeanInfoMap();
-        synchronized (map) {
-            WeakHashMap<Class<?>, MBeanInfo> intfMap = map.get(resourceClass);
-            if (intfMap == null) {
-                intfMap = new WeakHashMap<Class<?>, MBeanInfo>();
-                map.put(resourceClass, intfMap);
-            }
-            Class<?> intfClass = perInterface.getMBeanInterface();
-            MBeanInfo mbi = intfMap.get(intfClass);
-            if (mbi == null) {
-                MBeanInfo imbi = perInterface.getMBeanInfo();
-                Descriptor descriptor =
-                        ImmutableDescriptor.union(imbi.getDescriptor(),
-                        getMBeanDescriptor(resourceClass));
-                mbi = new MBeanInfo(resourceClass.getName(),
-                        imbi.getDescription(),
-                        imbi.getAttributes(),
-                        findConstructors(resourceClass),
-                        imbi.getOperations(),
-                        (MBeanNotificationInfo[]) null,
-                        descriptor);
-                intfMap.put(intfClass, mbi);
-            }
-            return mbi;
-        }
-    }
-
-    static MBeanNotificationInfo[] findNotifications(Object moi) {
-        if (!(moi instanceof NotificationBroadcaster))
-            return null;
-        MBeanNotificationInfo[] mbn =
-                ((NotificationBroadcaster) moi).getNotificationInfo();
-        if (mbn == null)
-            return null;
-        MBeanNotificationInfo[] result =
-                new MBeanNotificationInfo[mbn.length];
-        for (int i = 0; i < mbn.length; i++) {
-            MBeanNotificationInfo ni = mbn[i];
-            if (ni.getClass() != MBeanNotificationInfo.class)
-                ni = (MBeanNotificationInfo) ni.clone();
-            result[i] = ni;
-        }
-        return result;
-    }
-
-    private static MBeanConstructorInfo[] findConstructors(Class<?> c) {
-        Constructor<?>[] cons = c.getConstructors();
-        MBeanConstructorInfo[] mbc = new MBeanConstructorInfo[cons.length];
-        for (int i = 0; i < cons.length; i++) {
-            final String descr = "Public constructor of the MBean";
-            mbc[i] = new MBeanConstructorInfo(descr, cons[i]);
-        }
-        return mbc;
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/mbeanserver/MBeanServerDelegateImpl.java b/ojluni/src/main/java/com/sun/jmx/mbeanserver/MBeanServerDelegateImpl.java
deleted file mode 100755
index f4fdc82..0000000
--- a/ojluni/src/main/java/com/sun/jmx/mbeanserver/MBeanServerDelegateImpl.java
+++ /dev/null
@@ -1,321 +0,0 @@
-/*
- * Copyright (c) 2002, 2006, 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.jmx.mbeanserver;
-
-import java.util.logging.Level;
-
-import javax.management.Attribute;
-import javax.management.AttributeList;
-import javax.management.AttributeNotFoundException;
-import javax.management.DynamicMBean;
-import javax.management.InvalidAttributeValueException;
-import javax.management.JMRuntimeException;
-import javax.management.MBeanAttributeInfo;
-import javax.management.MBeanException;
-import javax.management.MBeanInfo;
-import javax.management.MBeanRegistration;
-import javax.management.MBeanServer;
-import javax.management.MBeanServerDelegate;
-import javax.management.ObjectName;
-import javax.management.ReflectionException;
-import javax.management.RuntimeOperationsException;
-
-import static com.sun.jmx.defaults.JmxProperties.MBEANSERVER_LOGGER;
-
-/**
- * This class is the MBean implementation of the MBeanServerDelegate.
- *
- * @since 1.5
- */
-final class MBeanServerDelegateImpl
-    extends MBeanServerDelegate
-    implements DynamicMBean, MBeanRegistration {
-
-    final private static String[] attributeNames = new String[] {
-        "MBeanServerId",
-        "SpecificationName",
-        "SpecificationVersion",
-        "SpecificationVendor",
-        "ImplementationName",
-        "ImplementationVersion",
-        "ImplementationVendor"
-    };
-
-    private static final MBeanAttributeInfo[] attributeInfos =
-        new MBeanAttributeInfo[] {
-            new MBeanAttributeInfo("MBeanServerId","java.lang.String",
-                                   "The MBean server agent identification",
-                                   true,false,false),
-            new MBeanAttributeInfo("SpecificationName","java.lang.String",
-                                   "The full name of the JMX specification "+
-                                   "implemented by this product.",
-                                   true,false,false),
-            new MBeanAttributeInfo("SpecificationVersion","java.lang.String",
-                                   "The version of the JMX specification "+
-                                   "implemented by this product.",
-                                   true,false,false),
-            new MBeanAttributeInfo("SpecificationVendor","java.lang.String",
-                                   "The vendor of the JMX specification "+
-                                   "implemented by this product.",
-                                   true,false,false),
-            new MBeanAttributeInfo("ImplementationName","java.lang.String",
-                                   "The JMX implementation name "+
-                                   "(the name of this product)",
-                                   true,false,false),
-            new MBeanAttributeInfo("ImplementationVersion","java.lang.String",
-                                   "The JMX implementation version "+
-                                   "(the version of this product).",
-                                   true,false,false),
-            new MBeanAttributeInfo("ImplementationVendor","java.lang.String",
-                                   "the JMX implementation vendor "+
-                                   "(the vendor of this product).",
-                                   true,false,false)
-                };
-
-    private final MBeanInfo delegateInfo;
-
-    public MBeanServerDelegateImpl () {
-        super();
-        delegateInfo =
-            new MBeanInfo("javax.management.MBeanServerDelegate",
-                          "Represents  the MBean server from the management "+
-                          "point of view.",
-                          MBeanServerDelegateImpl.attributeInfos, null,
-                          null,getNotificationInfo());
-    }
-
-    final public ObjectName preRegister (MBeanServer server, ObjectName name)
-        throws java.lang.Exception {
-        if (name == null) return DELEGATE_NAME;
-        else return name;
-    }
-
-    final public void postRegister (Boolean registrationDone) {
-    }
-
-    final public void preDeregister()
-        throws java.lang.Exception {
-        throw new IllegalArgumentException(
-                 "The MBeanServerDelegate MBean cannot be unregistered");
-    }
-
-    final public void postDeregister() {
-    }
-
-    /**
-     * Obtains the value of a specific attribute of the MBeanServerDelegate.
-     *
-     * @param attribute The name of the attribute to be retrieved
-     *
-     * @return  The value of the attribute retrieved.
-     *
-     * @exception AttributeNotFoundException
-     * @exception MBeanException
-     *            Wraps a <CODE>java.lang.Exception</CODE> thrown by the
-     *            MBean's getter.
-     */
-    public Object getAttribute(String attribute)
-        throws AttributeNotFoundException,
-               MBeanException, ReflectionException {
-        try {
-            // attribute must not be null
-            //
-            if (attribute == null)
-                throw new AttributeNotFoundException("null");
-
-            // Extract the requested attribute from file
-            //
-            if (attribute.equals("MBeanServerId"))
-                return getMBeanServerId();
-            else if (attribute.equals("SpecificationName"))
-                return getSpecificationName();
-            else if (attribute.equals("SpecificationVersion"))
-                return getSpecificationVersion();
-            else if (attribute.equals("SpecificationVendor"))
-                return getSpecificationVendor();
-            else if (attribute.equals("ImplementationName"))
-                return getImplementationName();
-            else if (attribute.equals("ImplementationVersion"))
-                return getImplementationVersion();
-            else if (attribute.equals("ImplementationVendor"))
-                return getImplementationVendor();
-
-            // Unknown attribute
-            //
-            else
-                throw new AttributeNotFoundException("null");
-
-        } catch (AttributeNotFoundException x) {
-            throw x;
-        } catch (JMRuntimeException j) {
-            throw j;
-        } catch (SecurityException s) {
-            throw s;
-        } catch (Exception x) {
-            throw new MBeanException(x,"Failed to get " + attribute);
-        }
-    }
-
-    /**
-     * This method always fail since all MBeanServerDelegateMBean attributes
-     * are read-only.
-     *
-     * @param attribute The identification of the attribute to
-     * be set and  the value it is to be set to.
-     *
-     * @exception AttributeNotFoundException
-     */
-    public void setAttribute(Attribute attribute)
-        throws AttributeNotFoundException, InvalidAttributeValueException,
-               MBeanException, ReflectionException {
-
-        // Now we will always fail:
-        // Either because the attribute is null or because it is not
-        // accessible (or does not exist).
-        //
-        final String attname = (attribute==null?null:attribute.getName());
-        if (attname == null) {
-            final RuntimeException r =
-                new IllegalArgumentException("Attribute name cannot be null");
-            throw new RuntimeOperationsException(r,
-                "Exception occurred trying to invoke the setter on the MBean");
-        }
-
-        // This is a hack: we call getAttribute in order to generate an
-        // AttributeNotFoundException if the attribute does not exist.
-        //
-        Object val = getAttribute(attname);
-
-        // If we reach this point, we know that the requested attribute
-        // exists. However, since all attributes are read-only, we throw
-        // an AttributeNotFoundException.
-        //
-        throw new AttributeNotFoundException(attname + " not accessible");
-    }
-
-    /**
-     * Makes it possible to get the values of several attributes of
-     * the MBeanServerDelegate.
-     *
-     * @param attributes A list of the attributes to be retrieved.
-     *
-     * @return  The list of attributes retrieved.
-     *
-     */
-    public AttributeList getAttributes(String[] attributes) {
-        // If attributes is null, the get all attributes.
-        //
-        final String[] attn = (attributes==null?attributeNames:attributes);
-
-        // Prepare the result list.
-        //
-        final int len = attn.length;
-        final AttributeList list = new AttributeList(len);
-
-        // Get each requested attribute.
-        //
-        for (int i=0;i<len;i++) {
-            try {
-                final Attribute a =
-                    new Attribute(attn[i],getAttribute(attn[i]));
-                list.add(a);
-            } catch (Exception x) {
-                // Skip the attribute that couldn't be obtained.
-                //
-                if (MBEANSERVER_LOGGER.isLoggable(Level.FINEST)) {
-                    MBEANSERVER_LOGGER.logp(Level.FINEST,
-                            MBeanServerDelegateImpl.class.getName(),
-                            "getAttributes",
-                            "Attribute " + attn[i] + " not found");
-                }
-            }
-        }
-
-        // Finally return the result.
-        //
-        return list;
-    }
-
-    /**
-     * This method always return an empty list since all
-     * MBeanServerDelegateMBean attributes are read-only.
-     *
-     * @param attributes A list of attributes: The identification of the
-     * attributes to be set and  the values they are to be set to.
-     *
-     * @return  The list of attributes that were set, with their new values.
-     *          In fact, this method always return an empty list since all
-     *          MBeanServerDelegateMBean attributes are read-only.
-     */
-    public AttributeList setAttributes(AttributeList attributes) {
-        return new AttributeList(0);
-    }
-
-    /**
-     * Always fails since the MBeanServerDelegate MBean has no operation.
-     *
-     * @param actionName The name of the action to be invoked.
-     * @param params An array containing the parameters to be set when the
-     *        action is invoked.
-     * @param signature An array containing the signature of the action.
-     *
-     * @return  The object returned by the action, which represents
-     *          the result of invoking the action on the MBean specified.
-     *
-     * @exception MBeanException  Wraps a <CODE>java.lang.Exception</CODE>
-     *         thrown by the MBean's invoked method.
-     * @exception ReflectionException  Wraps a
-     *      <CODE>java.lang.Exception</CODE> thrown while trying to invoke
-     *      the method.
-     */
-    public Object invoke(String actionName, Object params[],
-                         String signature[])
-        throws MBeanException, ReflectionException {
-        // Check that operation name is not null.
-        //
-        if (actionName == null) {
-            final RuntimeException r =
-              new IllegalArgumentException("Operation name  cannot be null");
-            throw new RuntimeOperationsException(r,
-            "Exception occurred trying to invoke the operation on the MBean");
-        }
-
-        throw new ReflectionException(
-                          new NoSuchMethodException(actionName),
-                          "The operation with name " + actionName +
-                          " could not be found");
-    }
-
-    /**
-     * Provides the MBeanInfo describing the MBeanServerDelegate.
-     *
-     * @return  The MBeanInfo describing the MBeanServerDelegate.
-     *
-     */
-    public MBeanInfo getMBeanInfo() {
-        return delegateInfo;
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/mbeanserver/MBeanSupport.java b/ojluni/src/main/java/com/sun/jmx/mbeanserver/MBeanSupport.java
deleted file mode 100755
index 3af4b8b..0000000
--- a/ojluni/src/main/java/com/sun/jmx/mbeanserver/MBeanSupport.java
+++ /dev/null
@@ -1,276 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-package com.sun.jmx.mbeanserver;
-
-
-import javax.management.Attribute;
-import javax.management.AttributeList;
-import javax.management.AttributeNotFoundException;
-import javax.management.InvalidAttributeValueException;
-import javax.management.MBeanException;
-import javax.management.MBeanInfo;
-import javax.management.MBeanRegistration;
-import javax.management.MBeanServer;
-import javax.management.NotCompliantMBeanException;
-import javax.management.ObjectName;
-import javax.management.ReflectionException;
-import com.sun.jmx.mbeanserver.MXBeanMappingFactory;
-import sun.reflect.misc.ReflectUtil;
-
-/**
- * Base class for MBeans.  There is one instance of this class for
- * every Standard MBean and every MXBean.  We try to limit the amount
- * of information per instance so we can handle very large numbers of
- * MBeans comfortably.
- *
- * @param <M> either Method or ConvertingMethod, for Standard MBeans
- * and MXBeans respectively.
- *
- * @since 1.6
- */
-/*
- * We maintain a couple of caches to increase sharing between
- * different MBeans of the same type and also to reduce creation time
- * for the second and subsequent instances of the same type.
- *
- * The first cache maps from an MBean interface to a PerInterface
- * object containing information parsed out of the interface.  The
- * interface is either a Standard MBean interface or an MXBean
- * interface, and there is one cache for each case.
- *
- * The PerInterface includes an MBeanInfo.  This contains the
- * attributes and operations parsed out of the interface's methods,
- * plus a basic Descriptor for the interface containing at least the
- * interfaceClassName field and any fields derived from annotations on
- * the interface.  This MBeanInfo can never be the MBeanInfo for any
- * actual MBean, because an MBeanInfo's getClassName() is the name of
- * a concrete class and we don't know what the class will be.
- * Furthermore a real MBeanInfo may need to add constructors and/or
- * notifications to the MBeanInfo.
- *
- * The PerInterface also contains an MBeanDispatcher which is able to
- * route getAttribute, setAttribute, and invoke to the appropriate
- * method of the interface, including doing any necessary translation
- * of parameters and return values for MXBeans.
- *
- * The PerInterface also contains the original Class for the interface.
- *
- * We need to be careful about references.  When there are no MBeans
- * with a given interface, there must not be any strong references to
- * the interface Class.  Otherwise it could never be garbage collected,
- * and neither could its ClassLoader or any other classes loaded by
- * its ClassLoader.  Therefore the cache must wrap the PerInterface
- * in a WeakReference.  Each instance of MBeanSupport has a strong
- * reference to its PerInterface, which prevents PerInterface instances
- * from being garbage-collected prematurely.
- *
- * The second cache maps from a concrete class and an MBean interface
- * that that class implements to the MBeanInfo for that class and
- * interface.  (The ability to specify an interface separately comes
- * from the class StandardMBean.  MBeans registered directly in the
- * MBean Server will always have the same interface here.)
- *
- * The MBeanInfo in this second cache will be the MBeanInfo from the
- * PerInterface cache for the given itnerface, but with the
- * getClassName() having the concrete class's name, and the public
- * constructors based on the concrete class's constructors.  This
- * MBeanInfo can be shared between all instances of the concrete class
- * specifying the same interface, except instances that are
- * NotificationBroadcasters.  NotificationBroadcasters supply the
- * MBeanNotificationInfo[] in the MBeanInfo based on the instance
- * method NotificationBroadcaster.getNotificationInfo(), so two
- * instances of the same concrete class do not necessarily have the
- * same MBeanNotificationInfo[].  Currently we do not try to detect
- * when they do, although it would probably be worthwhile doing that
- * since it is a very common case.
- *
- * Standard MBeans additionally have the property that
- * getNotificationInfo() must in principle be called every time
- * getMBeanInfo() is called for the MBean, since the returned array is
- * allowed to change over time.  We attempt to reduce the cost of
- * doing this by detecting when the Standard MBean is a subclass of
- * NotificationBroadcasterSupport that does not override
- * getNotificationInfo(), meaning that the MBeanNotificationInfo[] is
- * the one that was supplied to the constructor.  MXBeans do not have
- * this problem because their getNotificationInfo() method is called
- * only once.
- *
- */
-public abstract class MBeanSupport<M>
-        implements DynamicMBean2, MBeanRegistration {
-
-    <T> MBeanSupport(T resource, Class<T> mbeanInterfaceType)
-            throws NotCompliantMBeanException {
-        if (mbeanInterfaceType == null)
-            throw new NotCompliantMBeanException("Null MBean interface");
-        if (!mbeanInterfaceType.isInstance(resource)) {
-            final String msg =
-                "Resource class " + resource.getClass().getName() +
-                " is not an instance of " + mbeanInterfaceType.getName();
-            throw new NotCompliantMBeanException(msg);
-        }
-        ReflectUtil.checkPackageAccess(mbeanInterfaceType);
-        this.resource = resource;
-        MBeanIntrospector<M> introspector = getMBeanIntrospector();
-        this.perInterface = introspector.getPerInterface(mbeanInterfaceType);
-        this.mbeanInfo = introspector.getMBeanInfo(resource, perInterface);
-    }
-
-    /** Return the appropriate introspector for this type of MBean. */
-    abstract MBeanIntrospector<M> getMBeanIntrospector();
-
-    /**
-     * Return a cookie for this MBean.  This cookie will be passed to
-     * MBean method invocations where it can supply additional information
-     * to the invocation.  For example, with MXBeans it can be used to
-     * supply the MXBeanLookup context for resolving inter-MXBean references.
-     */
-    abstract Object getCookie();
-
-    public final boolean isMXBean() {
-        return perInterface.isMXBean();
-    }
-
-    // Methods that javax.management.StandardMBean should call from its
-    // preRegister and postRegister, given that it is not supposed to
-    // call the contained object's preRegister etc methods even if it has them
-    public abstract void register(MBeanServer mbs, ObjectName name)
-            throws Exception;
-    public abstract void unregister();
-
-    public final ObjectName preRegister(MBeanServer server, ObjectName name)
-            throws Exception {
-        if (resource instanceof MBeanRegistration)
-            name = ((MBeanRegistration) resource).preRegister(server, name);
-        return name;
-    }
-
-    public final void preRegister2(MBeanServer server, ObjectName name)
-            throws Exception {
-        register(server, name);
-    }
-
-    public final void registerFailed() {
-        unregister();
-    }
-
-    public final void postRegister(Boolean registrationDone) {
-        if (resource instanceof MBeanRegistration)
-            ((MBeanRegistration) resource).postRegister(registrationDone);
-    }
-
-    public final void preDeregister() throws Exception {
-        if (resource instanceof MBeanRegistration)
-            ((MBeanRegistration) resource).preDeregister();
-    }
-
-    public final void postDeregister() {
-        // Undo any work from registration.  We do this in postDeregister
-        // not preDeregister, because if the user preDeregister throws an
-        // exception then the MBean is not unregistered.
-        try {
-            unregister();
-        } finally {
-            if (resource instanceof MBeanRegistration)
-                ((MBeanRegistration) resource).postDeregister();
-        }
-    }
-
-    public final Object getAttribute(String attribute)
-            throws AttributeNotFoundException,
-                   MBeanException,
-                   ReflectionException {
-        return perInterface.getAttribute(resource, attribute, getCookie());
-    }
-
-    public final AttributeList getAttributes(String[] attributes) {
-        final AttributeList result = new AttributeList(attributes.length);
-        for (String attrName : attributes) {
-            try {
-                final Object attrValue = getAttribute(attrName);
-                result.add(new Attribute(attrName, attrValue));
-            } catch (Exception e) {
-                // OK: attribute is not included in returned list, per spec
-                // XXX: log the exception
-            }
-        }
-        return result;
-    }
-
-    public final void setAttribute(Attribute attribute)
-            throws AttributeNotFoundException,
-                   InvalidAttributeValueException,
-                   MBeanException,
-                   ReflectionException {
-        final String name = attribute.getName();
-        final Object value = attribute.getValue();
-        perInterface.setAttribute(resource, name, value, getCookie());
-    }
-
-    public final AttributeList setAttributes(AttributeList attributes) {
-        final AttributeList result = new AttributeList(attributes.size());
-        for (Object attrObj : attributes) {
-            // We can't use AttributeList.asList because it has side-effects
-            Attribute attr = (Attribute) attrObj;
-            try {
-                setAttribute(attr);
-                result.add(new Attribute(attr.getName(), attr.getValue()));
-            } catch (Exception e) {
-                // OK: attribute is not included in returned list, per spec
-                // XXX: log the exception
-            }
-        }
-        return result;
-    }
-
-    public final Object invoke(String operation, Object[] params,
-                         String[] signature)
-            throws MBeanException, ReflectionException {
-        return perInterface.invoke(resource, operation, params, signature,
-                                   getCookie());
-    }
-
-    // Overridden by StandardMBeanSupport
-    public MBeanInfo getMBeanInfo() {
-        return mbeanInfo;
-    }
-
-    public final String getClassName() {
-        return resource.getClass().getName();
-    }
-
-    public final Object getResource() {
-        return resource;
-    }
-
-    public final Class<?> getMBeanInterface() {
-        return perInterface.getMBeanInterface();
-    }
-
-    private final MBeanInfo mbeanInfo;
-    private final Object resource;
-    private final PerInterface<M> perInterface;
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/mbeanserver/MXBeanIntrospector.java b/ojluni/src/main/java/com/sun/jmx/mbeanserver/MXBeanIntrospector.java
deleted file mode 100755
index deae55f..0000000
--- a/ojluni/src/main/java/com/sun/jmx/mbeanserver/MXBeanIntrospector.java
+++ /dev/null
@@ -1,365 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-package com.sun.jmx.mbeanserver;
-
-import com.sun.jmx.mbeanserver.MBeanIntrospector.MBeanInfoMap;
-import com.sun.jmx.mbeanserver.MBeanIntrospector.PerInterfaceMap;
-import java.lang.annotation.Annotation;
-import java.lang.reflect.GenericArrayType;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.lang.reflect.ParameterizedType;
-import java.lang.reflect.Type;
-import javax.management.Descriptor;
-import javax.management.ImmutableDescriptor;
-import javax.management.MBeanAttributeInfo;
-import javax.management.MBeanException;
-import javax.management.MBeanOperationInfo;
-import javax.management.MBeanParameterInfo;
-import javax.management.NotCompliantMBeanException;
-import javax.management.openmbean.OpenMBeanAttributeInfoSupport;
-import javax.management.openmbean.OpenMBeanOperationInfoSupport;
-import javax.management.openmbean.OpenMBeanParameterInfo;
-import javax.management.openmbean.OpenMBeanParameterInfoSupport;
-import javax.management.openmbean.OpenType;
-
-/**
- * Introspector for MXBeans.  There is exactly one instance of this class.
- *
- * @since 1.6
- */
-class MXBeanIntrospector extends MBeanIntrospector<ConvertingMethod> {
-    private static final MXBeanIntrospector instance = new MXBeanIntrospector();
-
-    static MXBeanIntrospector getInstance() {
-        return instance;
-    }
-
-    @Override
-    PerInterfaceMap<ConvertingMethod> getPerInterfaceMap() {
-        return perInterfaceMap;
-    }
-
-    @Override
-    MBeanInfoMap getMBeanInfoMap() {
-        return mbeanInfoMap;
-    }
-
-    @Override
-    MBeanAnalyzer<ConvertingMethod> getAnalyzer(Class<?> mbeanInterface)
-            throws NotCompliantMBeanException {
-        return MBeanAnalyzer.analyzer(mbeanInterface, this);
-    }
-
-    @Override
-    boolean isMXBean() {
-        return true;
-    }
-
-    @Override
-    ConvertingMethod mFrom(Method m) {
-        return ConvertingMethod.from(m);
-    }
-
-    @Override
-    String getName(ConvertingMethod m) {
-        return m.getName();
-    }
-
-    @Override
-    Type getGenericReturnType(ConvertingMethod m) {
-        return m.getGenericReturnType();
-    }
-
-    @Override
-    Type[] getGenericParameterTypes(ConvertingMethod m) {
-        return m.getGenericParameterTypes();
-    }
-
-    @Override
-    String[] getSignature(ConvertingMethod m) {
-        return m.getOpenSignature();
-    }
-
-    @Override
-    void checkMethod(ConvertingMethod m) {
-        m.checkCallFromOpen();
-    }
-
-    @Override
-    Object invokeM2(ConvertingMethod m, Object target, Object[] args,
-                    Object cookie)
-            throws InvocationTargetException, IllegalAccessException,
-                   MBeanException {
-        return m.invokeWithOpenReturn((MXBeanLookup) cookie, target, args);
-    }
-
-    @Override
-    boolean validParameter(ConvertingMethod m, Object value, int paramNo,
-                           Object cookie) {
-        if (value == null) {
-            // Null is a valid value for all OpenTypes, even though
-            // OpenType.isValue(null) will return false.  It can always be
-            // matched to the corresponding Java type, except when that
-            // type is primitive.
-            Type t = m.getGenericParameterTypes()[paramNo];
-            return (!(t instanceof Class<?>) || !((Class<?>) t).isPrimitive());
-        } else {
-            Object v;
-            try {
-                v = m.fromOpenParameter((MXBeanLookup) cookie, value, paramNo);
-            } catch (Exception e) {
-                // Ignore the exception and let MBeanIntrospector.invokeSetter()
-                // throw the initial exception.
-                return true;
-            }
-            return isValidParameter(m.getMethod(), v, paramNo);
-        }
-    }
-
-    @Override
-    MBeanAttributeInfo getMBeanAttributeInfo(String attributeName,
-            ConvertingMethod getter, ConvertingMethod setter) {
-
-        final boolean isReadable = (getter != null);
-        final boolean isWritable = (setter != null);
-        final boolean isIs = isReadable && getName(getter).startsWith("is");
-
-        final String description = attributeName;
-
-        final OpenType<?> openType;
-        final Type originalType;
-        if (isReadable) {
-            openType = getter.getOpenReturnType();
-            originalType = getter.getGenericReturnType();
-        } else {
-            openType = setter.getOpenParameterTypes()[0];
-            originalType = setter.getGenericParameterTypes()[0];
-        }
-        Descriptor descriptor = typeDescriptor(openType, originalType);
-        if (isReadable) {
-            descriptor = ImmutableDescriptor.union(descriptor,
-                    getter.getDescriptor());
-        }
-        if (isWritable) {
-            descriptor = ImmutableDescriptor.union(descriptor,
-                    setter.getDescriptor());
-        }
-
-        final MBeanAttributeInfo ai;
-        if (canUseOpenInfo(originalType)) {
-            ai = new OpenMBeanAttributeInfoSupport(attributeName,
-                                                   description,
-                                                   openType,
-                                                   isReadable,
-                                                   isWritable,
-                                                   isIs,
-                                                   descriptor);
-        } else {
-            ai = new MBeanAttributeInfo(attributeName,
-                                        originalTypeString(originalType),
-                                        description,
-                                        isReadable,
-                                        isWritable,
-                                        isIs,
-                                        descriptor);
-        }
-        // could also consult annotations for defaultValue,
-        // minValue, maxValue, legalValues
-
-        return ai;
-    }
-
-    @Override
-    MBeanOperationInfo getMBeanOperationInfo(String operationName,
-            ConvertingMethod operation) {
-        final Method method = operation.getMethod();
-        final String description = operationName;
-        /* Ideally this would be an empty string, but
-           OMBOperationInfo constructor forbids that.  Also, we
-           could consult an annotation to get a useful
-           description.  */
-
-        final int impact = MBeanOperationInfo.UNKNOWN;
-
-        final OpenType<?> returnType = operation.getOpenReturnType();
-        final Type originalReturnType = operation.getGenericReturnType();
-        final OpenType<?>[] paramTypes = operation.getOpenParameterTypes();
-        final Type[] originalParamTypes = operation.getGenericParameterTypes();
-        final MBeanParameterInfo[] params =
-            new MBeanParameterInfo[paramTypes.length];
-        boolean openReturnType = canUseOpenInfo(originalReturnType);
-        boolean openParameterTypes = true;
-        Annotation[][] annots = method.getParameterAnnotations();
-        for (int i = 0; i < paramTypes.length; i++) {
-            final String paramName = "p" + i;
-            final String paramDescription = paramName;
-            final OpenType<?> openType = paramTypes[i];
-            final Type originalType = originalParamTypes[i];
-            Descriptor descriptor =
-                typeDescriptor(openType, originalType);
-            descriptor = ImmutableDescriptor.union(descriptor,
-                    Introspector.descriptorForAnnotations(annots[i]));
-            final MBeanParameterInfo pi;
-            if (canUseOpenInfo(originalType)) {
-                pi = new OpenMBeanParameterInfoSupport(paramName,
-                                                       paramDescription,
-                                                       openType,
-                                                       descriptor);
-            } else {
-                openParameterTypes = false;
-                pi = new MBeanParameterInfo(
-                    paramName,
-                    originalTypeString(originalType),
-                    paramDescription,
-                    descriptor);
-            }
-            params[i] = pi;
-        }
-
-        Descriptor descriptor =
-            typeDescriptor(returnType, originalReturnType);
-        descriptor = ImmutableDescriptor.union(descriptor,
-                Introspector.descriptorForElement(method));
-        final MBeanOperationInfo oi;
-        if (openReturnType && openParameterTypes) {
-            /* If the return value and all the parameters can be faithfully
-             * represented as OpenType then we return an OpenMBeanOperationInfo.
-             * If any of them is a primitive type, we can't.  Compatibility
-             * with JSR 174 means that we must return an MBean*Info where
-             * the getType() is the primitive type, not its wrapped type as
-             * we would get with an OpenMBean*Info.  The OpenType is available
-             * in the Descriptor in either case.
-             */
-            final OpenMBeanParameterInfo[] oparams =
-                new OpenMBeanParameterInfo[params.length];
-            System.arraycopy(params, 0, oparams, 0, params.length);
-            oi = new OpenMBeanOperationInfoSupport(operationName,
-                                                   description,
-                                                   oparams,
-                                                   returnType,
-                                                   impact,
-                                                   descriptor);
-        } else {
-            oi = new MBeanOperationInfo(operationName,
-                                        description,
-                                        params,
-                                        openReturnType ?
-                                        returnType.getClassName() :
-                                        originalTypeString(originalReturnType),
-                                        impact,
-                                        descriptor);
-        }
-
-        return oi;
-    }
-
-    @Override
-    Descriptor getBasicMBeanDescriptor() {
-        return new ImmutableDescriptor("mxbean=true",
-                                       "immutableInfo=true");
-    }
-
-    @Override
-    Descriptor getMBeanDescriptor(Class<?> resourceClass) {
-        /* We already have immutableInfo=true in the Descriptor
-         * included in the MBeanInfo for the MXBean interface.  This
-         * method is being called for the MXBean *class* to add any
-         * new items beyond those in the interface Descriptor, which
-         * currently it does not.
-         */
-        return ImmutableDescriptor.EMPTY_DESCRIPTOR;
-    }
-
-    private static Descriptor typeDescriptor(OpenType<?> openType,
-                                             Type originalType) {
-        return new ImmutableDescriptor(
-            new String[] {"openType",
-                          "originalType"},
-            new Object[] {openType,
-                          originalTypeString(originalType)});
-    }
-
-    /**
-     * <p>True if this type can be faithfully represented in an
-     * OpenMBean*Info.</p>
-     *
-     * <p>Compatibility with JSR 174 means that primitive types must be
-     * represented by an MBean*Info whose getType() is the primitive type
-     * string, e.g. "int".  If we used an OpenMBean*Info then this string
-     * would be the wrapped type, e.g. "java.lang.Integer".</p>
-     *
-     * <p>Compatibility with JMX 1.2 (including J2SE 5.0) means that arrays
-     * of primitive types cannot use an ArrayType representing an array of
-     * primitives, because that didn't exist in JMX 1.2.</p>
-     */
-    private static boolean canUseOpenInfo(Type type) {
-        if (type instanceof GenericArrayType) {
-            return canUseOpenInfo(
-                ((GenericArrayType) type).getGenericComponentType());
-        } else if (type instanceof Class<?> && ((Class<?>) type).isArray()) {
-            return canUseOpenInfo(
-                ((Class<?>) type).getComponentType());
-        }
-        return (!(type instanceof Class<?> && ((Class<?>) type).isPrimitive()));
-    }
-
-    private static String originalTypeString(Type type) {
-        if (type instanceof Class<?>)
-            return ((Class<?>) type).getName();
-        else
-            return typeName(type);
-    }
-
-    static String typeName(Type type) {
-        if (type instanceof Class<?>) {
-            Class<?> c = (Class<?>) type;
-            if (c.isArray())
-                return typeName(c.getComponentType()) + "[]";
-            else
-                return c.getName();
-        } else if (type instanceof GenericArrayType) {
-            GenericArrayType gat = (GenericArrayType) type;
-            return typeName(gat.getGenericComponentType()) + "[]";
-        } else if (type instanceof ParameterizedType) {
-            ParameterizedType pt = (ParameterizedType) type;
-            StringBuilder sb = new StringBuilder();
-            sb.append(typeName(pt.getRawType())).append("<");
-            String sep = "";
-            for (Type t : pt.getActualTypeArguments()) {
-                sb.append(sep).append(typeName(t));
-                sep = ", ";
-            }
-            return sb.append(">").toString();
-        } else
-            return "???";
-    }
-
-    private final PerInterfaceMap<ConvertingMethod>
-        perInterfaceMap = new PerInterfaceMap<ConvertingMethod>();
-
-    private static final MBeanInfoMap mbeanInfoMap = new MBeanInfoMap();
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/mbeanserver/MXBeanLookup.java b/ojluni/src/main/java/com/sun/jmx/mbeanserver/MXBeanLookup.java
deleted file mode 100755
index 9652e24..0000000
--- a/ojluni/src/main/java/com/sun/jmx/mbeanserver/MXBeanLookup.java
+++ /dev/null
@@ -1,188 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-package com.sun.jmx.mbeanserver;
-
-import static com.sun.jmx.mbeanserver.Util.*;
-import java.util.Map;
-import java.lang.ref.WeakReference;
-import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.Proxy;
-import java.security.AccessController;
-import javax.management.InstanceAlreadyExistsException;
-import javax.management.JMX;
-import javax.management.MBeanServerConnection;
-import javax.management.MBeanServerInvocationHandler;
-import javax.management.ObjectName;
-import javax.management.openmbean.OpenDataException;
-
-/**
- * @since 1.6
- */
-
-/*
- * This class handles the mapping between MXBean references and
- * ObjectNames.  Consider an MXBean interface like this:
- *
- * public interface ModuleMXBean {
- *     ProductMXBean getProduct();
- *     void setProduct(ProductMXBean product);
- * }
- *
- * This defines an attribute called "Product" whose originalType will
- * be ProductMXBean and whose openType will be ObjectName.  The
- * mapping happens as follows.
- *
- * When the MXBean's getProduct method is called, it is supposed to
- * return a reference to another MXBean, or a proxy for another
- * MXBean.  The MXBean layer has to convert this into an ObjectName.
- * If it's a reference to another MXBean, it needs to be able to look
- * up the name under which that MXBean has been registered in this
- * MBeanServer; this is the purpose of the mxbeanToObjectName map.  If
- * it's a proxy, it can check that the MBeanServer matches and if so
- * extract the ObjectName from the proxy.
- *
- * When the setProduct method is called on a proxy for this MXBean,
- * the argument can be either an MXBean reference (only really logical
- * if the proxy has a local MBeanServer) or another proxy.  So the
- * mapping logic is the same as for getProduct on the MXBean.
- *
- * When the MXBean's setProduct method is called, it needs to convert
- * the ObjectName into an object implementing the ProductMXBean
- * interface.  We could have a lookup table that reverses
- * mxbeanToObjectName, but this could violate the general JMX property
- * that you cannot obtain a reference to an MBean object.  So we
- * always use a proxy for this.  However we do have an
- * objectNameToProxy map that allows us to reuse proxy instances.
- *
- * When the getProduct method is called on a proxy for this MXBean, it
- * must convert the returned ObjectName into an instance of
- * ProductMXBean.  Again it can do this by making a proxy.
- *
- * From the above, it is clear that the logic for getX on an MXBean is
- * the same as for setX on a proxy, and vice versa.
- */
-public class MXBeanLookup {
-    private MXBeanLookup(MBeanServerConnection mbsc) {
-        this.mbsc = mbsc;
-    }
-
-    static MXBeanLookup lookupFor(MBeanServerConnection mbsc) {
-        synchronized (mbscToLookup) {
-            WeakReference<MXBeanLookup> weakLookup = mbscToLookup.get(mbsc);
-            MXBeanLookup lookup = (weakLookup == null) ? null : weakLookup.get();
-            if (lookup == null) {
-                lookup = new MXBeanLookup(mbsc);
-                mbscToLookup.put(mbsc, new WeakReference<MXBeanLookup>(lookup));
-            }
-            return lookup;
-        }
-    }
-
-    synchronized <T> T objectNameToMXBean(ObjectName name, Class<T> type) {
-        WeakReference<Object> wr = objectNameToProxy.get(name);
-        if (wr != null) {
-            Object proxy = wr.get();
-            if (type.isInstance(proxy))
-                return type.cast(proxy);
-        }
-        T proxy = JMX.newMXBeanProxy(mbsc, name, type);
-        objectNameToProxy.put(name, new WeakReference<Object>(proxy));
-        return proxy;
-    }
-
-    synchronized ObjectName mxbeanToObjectName(Object mxbean)
-    throws OpenDataException {
-        String wrong;
-        if (mxbean instanceof Proxy) {
-            InvocationHandler ih = Proxy.getInvocationHandler(mxbean);
-            if (ih instanceof MBeanServerInvocationHandler) {
-                MBeanServerInvocationHandler mbsih =
-                        (MBeanServerInvocationHandler) ih;
-                if (mbsih.getMBeanServerConnection().equals(mbsc))
-                    return mbsih.getObjectName();
-                else
-                    wrong = "proxy for a different MBeanServer";
-            } else
-                wrong = "not a JMX proxy";
-        } else {
-            ObjectName name = mxbeanToObjectName.get(mxbean);
-            if (name != null)
-                return name;
-            wrong = "not an MXBean registered in this MBeanServer";
-        }
-        String s = (mxbean == null) ?
-            "null" : "object of type " + mxbean.getClass().getName();
-        throw new OpenDataException(
-                "Could not convert " + s + " to an ObjectName: " + wrong);
-        // Message will be strange if mxbean is null but it is not
-        // supposed to be.
-    }
-
-    synchronized void addReference(ObjectName name, Object mxbean)
-    throws InstanceAlreadyExistsException {
-        ObjectName existing = mxbeanToObjectName.get(mxbean);
-        if (existing != null) {
-            String multiname = AccessController.doPrivileged(
-                    new GetPropertyAction("jmx.mxbean.multiname"));
-            if (!"true".equalsIgnoreCase(multiname)) {
-                throw new InstanceAlreadyExistsException(
-                        "MXBean already registered with name " + existing);
-            }
-        }
-        mxbeanToObjectName.put(mxbean, name);
-    }
-
-    synchronized boolean removeReference(ObjectName name, Object mxbean) {
-        if (name.equals(mxbeanToObjectName.get(mxbean))) {
-            mxbeanToObjectName.remove(mxbean);
-            return true;
-        } else
-            return false;
-        /* removeReference can be called when the above condition fails,
-         * notably if you try to register the same MXBean twice.
-         */
-    }
-
-    static MXBeanLookup getLookup() {
-        return currentLookup.get();
-    }
-
-    static void setLookup(MXBeanLookup lookup) {
-        currentLookup.set(lookup);
-    }
-
-    private static final ThreadLocal<MXBeanLookup> currentLookup =
-            new ThreadLocal<MXBeanLookup>();
-
-    private final MBeanServerConnection mbsc;
-    private final WeakIdentityHashMap<Object, ObjectName>
-        mxbeanToObjectName = WeakIdentityHashMap.make();
-    private final Map<ObjectName, WeakReference<Object>>
-        objectNameToProxy = newMap();
-    private static final WeakIdentityHashMap<MBeanServerConnection,
-                                             WeakReference<MXBeanLookup>>
-        mbscToLookup = WeakIdentityHashMap.make();
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/mbeanserver/MXBeanMapping.java b/ojluni/src/main/java/com/sun/jmx/mbeanserver/MXBeanMapping.java
deleted file mode 100755
index 6fa3058..0000000
--- a/ojluni/src/main/java/com/sun/jmx/mbeanserver/MXBeanMapping.java
+++ /dev/null
@@ -1,210 +0,0 @@
-/*
- * Copyright (c) 2007, 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.
- */
-
-package com.sun.jmx.mbeanserver;
-
-import java.io.InvalidObjectException;
-import java.lang.reflect.Type;
-import javax.management.openmbean.OpenDataException;
-import javax.management.openmbean.OpenType;
-
-/**
- * <p>A custom mapping between Java types and Open types for use in MXBeans.
- * To define such a mapping, subclass this class and define at least the
- * {@link #fromOpenValue fromOpenValue} and {@link #toOpenValue toOpenValue}
- * methods, and optionally the {@link #checkReconstructible} method.
- * Then either use an {@link MXBeanMappingClass} annotation on your custom
- * Java types, or include this MXBeanMapping in an
- * {@link MXBeanMappingFactory}.</p>
- *
- * <p>For example, suppose we have a class {@code MyLinkedList}, which looks
- * like this:</p>
- *
- * <pre>
- * public class MyLinkedList {
- *     public MyLinkedList(String name, MyLinkedList next) {...}
- *     public String getName() {...}
- *     public MyLinkedList getNext() {...}
- * }
- * </pre>
- *
- * <p>This is not a valid type for MXBeans, because it contains a
- * self-referential property "next" defined by the {@code getNext()}
- * method.  MXBeans do not support recursive types.  So we would like
- * to specify a mapping for {@code MyLinkedList} explicitly. When an
- * MXBean interface contains {@code MyLinkedList}, that will be mapped
- * into a {@code String[]}, which is a valid Open Type.</p>
- *
- * <p>To define this mapping, we first subclass {@code MXBeanMapping}:</p>
- *
- * <pre>
- * public class MyLinkedListMapping extends MXBeanMapping {
- *     public MyLinkedListMapping(Type type) throws OpenDataException {
- *         super(MyLinkedList.class, ArrayType.getArrayType(SimpleType.STRING));
- *         if (type != MyLinkedList.class)
- *             throw new OpenDataException("Mapping only valid for MyLinkedList");
- *     }
- *
- *     {@literal @Override}
- *     public Object fromOpenValue(Object openValue) throws InvalidObjectException {
- *         String[] array = (String[]) openValue;
- *         MyLinkedList list = null;
- *         for (int i = array.length - 1; i &gt;= 0; i--)
- *             list = new MyLinkedList(array[i], list);
- *         return list;
- *     }
- *
- *     {@literal @Override}
- *     public Object toOpenValue(Object javaValue) throws OpenDataException {
- *         ArrayList&lt;String&gt; array = new ArrayList&lt;String&gt;();
- *         for (MyLinkedList list = (MyLinkedList) javaValue; list != null;
- *              list = list.getNext())
- *             array.add(list.getName());
- *         return array.toArray(new String[0]);
- *     }
- * }
- * </pre>
- *
- * <p>The call to the superclass constructor specifies what the
- * original Java type is ({@code MyLinkedList.class}) and what Open
- * Type it is mapped to ({@code
- * ArrayType.getArrayType(SimpleType.STRING)}). The {@code
- * fromOpenValue} method says how we go from the Open Type ({@code
- * String[]}) to the Java type ({@code MyLinkedList}), and the {@code
- * toOpenValue} method says how we go from the Java type to the Open
- * Type.</p>
- *
- * <p>With this mapping defined, we can annotate the {@code MyLinkedList}
- * class appropriately:</p>
- *
- * <pre>
- * {@literal @MXBeanMappingClass}(MyLinkedListMapping.class)
- * public class MyLinkedList {...}
- * </pre>
- *
- * <p>Now we can use {@code MyLinkedList} in an MXBean interface and it
- * will work.</p>
- *
- * <p>If we are unable to modify the {@code MyLinkedList} class,
- * we can define an {@link MXBeanMappingFactory}.  See the documentation
- * of that class for further details.</p>
- *
- * @see <a href="../MXBean.html#custom">MXBean specification, section
- * "Custom MXBean type mappings"</a>
- */
-public abstract class MXBeanMapping {
-    private final Type javaType;
-    private final OpenType<?> openType;
-    private final Class<?> openClass;
-
-    /**
-     * <p>Construct a mapping between the given Java type and the given
-     * Open Type.</p>
-     *
-     * @param javaType the Java type (for example, {@code MyLinkedList}).
-     * @param openType the Open Type (for example, {@code
-     * ArrayType.getArrayType(SimpleType.STRING)})
-     *
-     * @throws NullPointerException if either argument is null.
-     */
-    protected MXBeanMapping(Type javaType, OpenType<?> openType) {
-        if (javaType == null || openType == null)
-            throw new NullPointerException("Null argument");
-        this.javaType = javaType;
-        this.openType = openType;
-        this.openClass = makeOpenClass(javaType, openType);
-    }
-
-    /**
-     * <p>The Java type that was supplied to the constructor.</p>
-     * @return the Java type that was supplied to the constructor.
-     */
-    public final Type getJavaType() {
-        return javaType;
-    }
-
-    /**
-     * <p>The Open Type that was supplied to the constructor.</p>
-     * @return the Open Type that was supplied to the constructor.
-     */
-    public final OpenType<?> getOpenType() {
-        return openType;
-    }
-
-    /**
-     * <p>The Java class that corresponds to instances of the
-     * {@linkplain #getOpenType() Open Type} for this mapping.</p>
-     * @return the Java class that corresponds to instances of the
-     * Open Type for this mapping.
-     * @see OpenType#getClassName
-     */
-    public final Class<?> getOpenClass() {
-        return openClass;
-    }
-
-    private static Class<?> makeOpenClass(Type javaType, OpenType<?> openType) {
-        if (javaType instanceof Class<?> && ((Class<?>) javaType).isPrimitive())
-            return (Class<?>) javaType;
-        try {
-            String className = openType.getClassName();
-            return Class.forName(className, false, null);
-        } catch (ClassNotFoundException e) {
-            throw new RuntimeException(e);  // should not happen
-        }
-    }
-
-    /**
-     * <p>Convert an instance of the Open Type into the Java type.
-     * @param openValue the value to be converted.
-     * @return the converted value.
-     * @throws InvalidObjectException if the value cannot be converted.
-     */
-    public abstract Object fromOpenValue(Object openValue)
-    throws InvalidObjectException;
-
-    /**
-     * <p>Convert an instance of the Java type into the Open Type.
-     * @param javaValue the value to be converted.
-     * @return the converted value.
-     * @throws OpenDataException if the value cannot be converted.
-     */
-    public abstract Object toOpenValue(Object javaValue)
-    throws OpenDataException;
-
-
-    /**
-     * <p>Throw an appropriate InvalidObjectException if we will not
-     * be able to convert back from the open data to the original Java
-     * object.  The {@link #fromOpenValue fromOpenValue} throws an
-     * exception if a given open data value cannot be converted.  This
-     * method throws an exception if <em>no</em> open data values can
-     * be converted.  The default implementation of this method never
-     * throws an exception.  Subclasses can override it as
-     * appropriate.</p>
-     * @throws InvalidObjectException if {@code fromOpenValue} will throw
-     * an exception no matter what its argument is.
-     */
-    public void checkReconstructible() throws InvalidObjectException {}
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/mbeanserver/MXBeanMappingFactory.java b/ojluni/src/main/java/com/sun/jmx/mbeanserver/MXBeanMappingFactory.java
deleted file mode 100755
index 83bccab..0000000
--- a/ojluni/src/main/java/com/sun/jmx/mbeanserver/MXBeanMappingFactory.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * Copyright (c) 2007, 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.
- */
-
-package com.sun.jmx.mbeanserver;
-
-import javax.management.openmbean.*;
-import com.sun.jmx.mbeanserver.MXBeanMapping;
-import com.sun.jmx.mbeanserver.DefaultMXBeanMappingFactory;
-import java.lang.reflect.Type;
-
-/**
- * <p>Defines how types are mapped for a given MXBean or set of MXBeans.
- * An {@code MXBeanMappingFactory} can be specified either through the
- * {@link MXBeanMappingFactoryClass} annotation, or through the
- * {@link javax.management.JMX.MBeanOptions JMX.MBeanOptions} argument to a
- * {@link javax.management.StandardMBean StandardMBean} constructor or MXBean
- * proxy.</p>
- *
- * <p>An {@code MXBeanMappingFactory} must return an {@code MXBeanMapping}
- * for any Java type that appears in the MXBeans that the factory is being
- * used for.  Usually it does that by handling any custom types, and
- * forwarding everything else to the {@linkplain #DEFAULT default mapping
- * factory}.</p>
- *
- * <p>Consider the {@code MyLinkedList} example from the {@link MXBeanMapping}
- * documentation.  If we are unable to change the {@code MyLinkedList} class
- * to add an {@link MXBeanMappingClass} annotation, we could achieve the same
- * effect by defining {@code MyLinkedListMappingFactory} as follows:</p>
- *
- * <pre>
- * public class MyLinkedListMappingFactory extends MXBeanMappingFactory {
- *     public MyLinkedListMappingFactory() {}
- *
- *     public MXBeanMapping mappingForType(Type t, MXBeanMappingFactory f)
- *     throws OpenDataException {
- *         if (t == MyLinkedList.class)
- *             return new MyLinkedListMapping(t);
- *         else
- *             return MXBeanMappingFactory.DEFAULT.mappingForType(t, f);
- *     }
- * }
- * </pre>
- *
- * <p>The mapping factory handles only the {@code MyLinkedList} class.
- * Every other type is forwarded to the default mapping factory.
- * This includes types such as {@code MyLinkedList[]} and
- * {@code List<MyLinkedList>}; the default mapping factory will recursively
- * invoke {@code MyLinkedListMappingFactory} to map the contained
- * {@code MyLinkedList} type.</p>
- *
- * <p>Once we have defined {@code MyLinkedListMappingFactory}, we can use
- * it in an MXBean interface like this:</p>
- *
- * <pre>
- * {@literal @MXBeanMappingFactoryClass}(MyLinkedListMappingFactory.class)
- * public interface SomethingMXBean {
- *     public MyLinkedList getSomething();
- * }
- * </pre>
- *
- * <p>Alternatively we can annotate the package that {@code SomethingMXBean}
- * appears in, or we can supply the factory to a {@link
- * javax.management.StandardMBean StandardMBean} constructor or MXBean
- * proxy.</p>
- *
- * @see <a href="../MXBean.html#custom">MXBean specification, section
- * "Custom MXBean type mappings"</a>
- */
-public abstract class MXBeanMappingFactory {
-    /**
-     * <p>Construct an instance of this class.</p>
-     */
-    protected MXBeanMappingFactory() {}
-
-    /**
-     * <p>Mapping factory that applies the default rules for MXBean
-     * mappings, as described in the <a
-     * href="../MXBean.html#MXBean-spec">MXBean specification</a>.</p>
-     */
-    public static final MXBeanMappingFactory DEFAULT =
-            new DefaultMXBeanMappingFactory();
-
-    /**
-     * <p>Return the mapping for the given Java type.  Typically, a
-     * mapping factory will return mappings for types it handles, and
-     * forward other types to another mapping factory, most often
-     * the {@linkplain #DEFAULT default one}.</p>
-     * @param t the Java type to be mapped.
-     * @param f the original mapping factory that was consulted to do
-     * the mapping.  A mapping factory should pass this parameter intact
-     * if it forwards a type to another mapping factory.  In the example,
-     * this is how {@code MyLinkedListMappingFactory} works for types
-     * like {@code MyLinkedList[]} and {@code List<MyLinkedList>}.
-     * @return the mapping for the given type.
-     * @throws OpenDataException if this type cannot be mapped.  This
-     * exception is appropriate if the factory is supposed to handle
-     * all types of this sort (for example, all linked lists), but
-     * cannot handle this particular type.
-     */
-    public abstract MXBeanMapping mappingForType(Type t, MXBeanMappingFactory f)
-    throws OpenDataException;
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/mbeanserver/MXBeanProxy.java b/ojluni/src/main/java/com/sun/jmx/mbeanserver/MXBeanProxy.java
deleted file mode 100755
index d2bdcb1..0000000
--- a/ojluni/src/main/java/com/sun/jmx/mbeanserver/MXBeanProxy.java
+++ /dev/null
@@ -1,175 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-package com.sun.jmx.mbeanserver;
-
-import static com.sun.jmx.mbeanserver.Util.*;
-
-import java.lang.reflect.Method;
-import java.util.Map;
-
-import javax.management.Attribute;
-import javax.management.MBeanServerConnection;
-import javax.management.NotCompliantMBeanException;
-import javax.management.ObjectName;
-
-/**
-   <p>Helper class for an {@link InvocationHandler} that forwards methods from an
-   MXBean interface to a named
-   MXBean in an MBean Server and handles translation between the
-   arbitrary Java types in the interface and the Open Types used
-   by the MXBean.</p>
-
-   @since 1.6
-*/
-public class MXBeanProxy {
-    public MXBeanProxy(Class<?> mxbeanInterface) {
-
-        if (mxbeanInterface == null)
-            throw new IllegalArgumentException("Null parameter");
-
-        final MBeanAnalyzer<ConvertingMethod> analyzer;
-        try {
-            analyzer =
-                MXBeanIntrospector.getInstance().getAnalyzer(mxbeanInterface);
-        } catch (NotCompliantMBeanException e) {
-            throw new IllegalArgumentException(e);
-        }
-        analyzer.visit(new Visitor());
-    }
-
-    private class Visitor
-            implements MBeanAnalyzer.MBeanVisitor<ConvertingMethod> {
-        public void visitAttribute(String attributeName,
-                                   ConvertingMethod getter,
-                                   ConvertingMethod setter) {
-            if (getter != null) {
-                getter.checkCallToOpen();
-                Method getterMethod = getter.getMethod();
-                handlerMap.put(getterMethod,
-                               new GetHandler(attributeName, getter));
-            }
-            if (setter != null) {
-                // return type is void, no need for checkCallToOpen
-                Method setterMethod = setter.getMethod();
-                handlerMap.put(setterMethod,
-                               new SetHandler(attributeName, setter));
-            }
-        }
-
-        public void visitOperation(String operationName,
-                                   ConvertingMethod operation) {
-            operation.checkCallToOpen();
-            Method operationMethod = operation.getMethod();
-            String[] sig = operation.getOpenSignature();
-            handlerMap.put(operationMethod,
-                           new InvokeHandler(operationName, sig, operation));
-        }
-    }
-
-    private static abstract class Handler {
-        Handler(String name, ConvertingMethod cm) {
-            this.name = name;
-            this.convertingMethod = cm;
-        }
-
-        String getName() {
-            return name;
-        }
-
-        ConvertingMethod getConvertingMethod() {
-            return convertingMethod;
-        }
-
-        abstract Object invoke(MBeanServerConnection mbsc,
-                               ObjectName name, Object[] args) throws Exception;
-
-        private final String name;
-        private final ConvertingMethod convertingMethod;
-    }
-
-    private static class GetHandler extends Handler {
-        GetHandler(String attributeName, ConvertingMethod cm) {
-            super(attributeName, cm);
-        }
-
-        @Override
-        Object invoke(MBeanServerConnection mbsc, ObjectName name, Object[] args)
-                throws Exception {
-            assert(args == null || args.length == 0);
-            return mbsc.getAttribute(name, getName());
-        }
-    }
-
-    private static class SetHandler extends Handler {
-        SetHandler(String attributeName, ConvertingMethod cm) {
-            super(attributeName, cm);
-        }
-
-        @Override
-        Object invoke(MBeanServerConnection mbsc, ObjectName name, Object[] args)
-                throws Exception {
-            assert(args.length == 1);
-            Attribute attr = new Attribute(getName(), args[0]);
-            mbsc.setAttribute(name, attr);
-            return null;
-        }
-    }
-
-    private static class InvokeHandler extends Handler {
-        InvokeHandler(String operationName, String[] signature,
-                      ConvertingMethod cm) {
-            super(operationName, cm);
-            this.signature = signature;
-        }
-
-        Object invoke(MBeanServerConnection mbsc, ObjectName name, Object[] args)
-                throws Exception {
-            return mbsc.invoke(name, getName(), args, signature);
-        }
-
-        private final String[] signature;
-    }
-
-    public Object invoke(MBeanServerConnection mbsc, ObjectName name,
-                         Method method, Object[] args)
-            throws Throwable {
-
-        Handler handler = handlerMap.get(method);
-        ConvertingMethod cm = handler.getConvertingMethod();
-        MXBeanLookup lookup = MXBeanLookup.lookupFor(mbsc);
-        MXBeanLookup oldLookup = MXBeanLookup.getLookup();
-        try {
-            MXBeanLookup.setLookup(lookup);
-            Object[] openArgs = cm.toOpenParameters(lookup, args);
-            Object result = handler.invoke(mbsc, name, openArgs);
-            return cm.fromOpenReturnValue(lookup, result);
-        } finally {
-            MXBeanLookup.setLookup(oldLookup);
-        }
-    }
-
-    private final Map<Method, Handler> handlerMap = newMap();
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/mbeanserver/MXBeanSupport.java b/ojluni/src/main/java/com/sun/jmx/mbeanserver/MXBeanSupport.java
deleted file mode 100755
index 07faa94..0000000
--- a/ojluni/src/main/java/com/sun/jmx/mbeanserver/MXBeanSupport.java
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-package com.sun.jmx.mbeanserver;
-
-import static com.sun.jmx.mbeanserver.Util.*;
-
-import java.util.Iterator;
-import java.util.Set;
-
-import javax.management.InstanceAlreadyExistsException;
-import javax.management.JMX;
-import javax.management.MBeanServer;
-import javax.management.NotCompliantMBeanException;
-import javax.management.ObjectName;
-
-/**
- * Base class for MXBeans.
- *
- * @since 1.6
- */
-public class MXBeanSupport extends MBeanSupport<ConvertingMethod> {
-
-    /**
-       <p>Construct an MXBean that wraps the given resource using the
-       given MXBean interface.</p>
-
-       @param resource the underlying resource for the new MXBean.
-
-       @param mxbeanInterface the interface to be used to determine
-       the MXBean's management interface.
-
-       @param <T> a type parameter that allows the compiler to check
-       that {@code resource} implements {@code mxbeanInterface},
-       provided that {@code mxbeanInterface} is a class constant like
-       {@code SomeMXBean.class}.
-
-       @throws IllegalArgumentException if {@code resource} is null or
-       if it does not implement the class {@code mxbeanInterface} or if
-       that class is not a valid MXBean interface.
-    */
-    public <T> MXBeanSupport(T resource, Class<T> mxbeanInterface)
-            throws NotCompliantMBeanException {
-        super(resource, mxbeanInterface);
-    }
-
-    @Override
-    MBeanIntrospector<ConvertingMethod> getMBeanIntrospector() {
-        return MXBeanIntrospector.getInstance();
-    }
-
-    @Override
-    Object getCookie() {
-        return mxbeanLookup;
-    }
-
-    static <T> Class<? super T> findMXBeanInterface(Class<T> resourceClass) {
-        if (resourceClass == null)
-            throw new IllegalArgumentException("Null resource class");
-        final Set<Class<?>> intfs = transitiveInterfaces(resourceClass);
-        final Set<Class<?>> candidates = newSet();
-        for (Class<?> intf : intfs) {
-            if (JMX.isMXBeanInterface(intf))
-                candidates.add(intf);
-        }
-    reduce:
-        while (candidates.size() > 1) {
-            for (Class<?> intf : candidates) {
-                for (Iterator<Class<?>> it = candidates.iterator(); it.hasNext();
-                    ) {
-                    final Class<?> intf2 = it.next();
-                    if (intf != intf2 && intf2.isAssignableFrom(intf)) {
-                        it.remove();
-                        continue reduce;
-                    }
-                }
-            }
-            final String msg =
-                "Class " + resourceClass.getName() + " implements more than " +
-                "one MXBean interface: " + candidates;
-            throw new IllegalArgumentException(msg);
-        }
-        if (candidates.iterator().hasNext()) {
-            return Util.cast(candidates.iterator().next());
-        } else {
-            final String msg =
-                "Class " + resourceClass.getName() +
-                " is not a JMX compliant MXBean";
-            throw new IllegalArgumentException(msg);
-        }
-    }
-
-    /* Return all interfaces inherited by this class, directly or
-     * indirectly through the parent class and interfaces.
-     */
-    private static Set<Class<?>> transitiveInterfaces(Class<?> c) {
-        Set<Class<?>> set = newSet();
-        transitiveInterfaces(c, set);
-        return set;
-    }
-    private static void transitiveInterfaces(Class<?> c, Set<Class<?>> intfs) {
-        if (c == null)
-            return;
-        if (c.isInterface())
-            intfs.add(c);
-        transitiveInterfaces(c.getSuperclass(), intfs);
-        for (Class<?> sup : c.getInterfaces())
-            transitiveInterfaces(sup, intfs);
-    }
-
-    /*
-     * The sequence of events for tracking inter-MXBean references is
-     * relatively complicated.  We use the magical preRegister2 method
-     * which the MBeanServer knows about.  The steps during registration
-     * are:
-     * (1) Call user preRegister, if any.  If exception, abandon.
-     * (2) Call preRegister2 and hence this register method.  If exception,
-     * call postRegister(false) and abandon.
-     * (3) Try to register the MBean.  If exception, call registerFailed()
-     * which will call the unregister method.  (Also call postRegister(false).)
-     * (4) If we get this far, we can call postRegister(true).
-     *
-     * When we are wrapped in an instance of javax.management.StandardMBean,
-     * things are simpler.  That class calls this method from its preRegister,
-     * and propagates any exception.  There is no user preRegister in this case.
-     * If this method succeeds but registration subsequently fails,
-     * StandardMBean calls unregister from its postRegister(false) method.
-     */
-    @Override
-    public void register(MBeanServer server, ObjectName name)
-            throws InstanceAlreadyExistsException {
-        if (name == null)
-            throw new IllegalArgumentException("Null object name");
-        // eventually we could have some logic to supply a default name
-
-        synchronized (lock) {
-            this.mxbeanLookup = MXBeanLookup.lookupFor(server);
-            this.mxbeanLookup.addReference(name, getResource());
-            this.objectName = name;
-        }
-    }
-
-    @Override
-    public void unregister() {
-        synchronized (lock) {
-            if (mxbeanLookup != null) {
-                if (mxbeanLookup.removeReference(objectName, getResource()))
-                    objectName = null;
-            }
-        }
-    }
-    private final Object lock = new Object(); // for mxbeanLookup and objectName
-
-    private MXBeanLookup mxbeanLookup;
-    private ObjectName objectName;
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/mbeanserver/ModifiableClassLoaderRepository.java b/ojluni/src/main/java/com/sun/jmx/mbeanserver/ModifiableClassLoaderRepository.java
deleted file mode 100755
index 1936363..0000000
--- a/ojluni/src/main/java/com/sun/jmx/mbeanserver/ModifiableClassLoaderRepository.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright (c) 2002, 2007, 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.jmx.mbeanserver;
-
-
-// JMX import
-import javax.management.ObjectName;
-import javax.management.loading.ClassLoaderRepository;
-
-/**
- * This interface keeps the list of Class Loaders registered in the
- * MBean Server.
- * It provides the necessary methods to load classes using the
- * registered Class Loaders, and to add/remove class loaders from the
- * list.
- *
- * @since 1.5
- */
-public interface ModifiableClassLoaderRepository
-    extends ClassLoaderRepository {
-
-    /**
-     * Add an anonymous ClassLoader to the repository.
-     **/
-    public void addClassLoader(ClassLoader loader);
-
-    /**
-     * Remove the specified ClassLoader to the repository.
-     * The class loader may or may not be anonymous.
-     **/
-    public void removeClassLoader(ClassLoader loader);
-
-    /**
-     * Add a named ClassLoader to the repository.
-     **/
-    public void addClassLoader(ObjectName name, ClassLoader loader);
-
-    /**
-     * Remove a named ClassLoader from the repository.
-     **/
-    public void removeClassLoader(ObjectName name);
-
-    /**
-     * Get a named ClassLoader from the repository.
-     **/
-    public ClassLoader getClassLoader(ObjectName name);
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/mbeanserver/NamedObject.java b/ojluni/src/main/java/com/sun/jmx/mbeanserver/NamedObject.java
deleted file mode 100755
index 009236e..0000000
--- a/ojluni/src/main/java/com/sun/jmx/mbeanserver/NamedObject.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * Copyright (c) 1999, 2007, 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.jmx.mbeanserver;
-
-import javax.management.* ;
-
-
-
-/**
- * This class is used for storing a pair (name, object) where name is
- * an object name and object is a reference to the object.
- *
- * @since 1.5
- */
-public class NamedObject  {
-
-
-    /**
-     * Object name.
-     */
-    private final ObjectName name;
-
-    /**
-     * Object reference.
-     */
-    private final DynamicMBean object;
-
-
-    /**
-     * Allows a named object to be created.
-     *
-     *@param objectName The object name of the object.
-     *@param object A reference to the object.
-     */
-    public NamedObject(ObjectName objectName, DynamicMBean object)  {
-        if (objectName.isPattern()) {
-            throw new RuntimeOperationsException(new IllegalArgumentException("Invalid name->"+ objectName.toString()));
-        }
-        this.name= objectName;
-        this.object= object;
-    }
-
-    /**
-     * Allows a named object to be created.
-     *
-     *@param objectName The string representation of the object name of the object.
-     *@param object A reference to the object.
-     *
-     *@exception MalformedObjectNameException The string passed does not have the format of a valid ObjectName
-     */
-    public NamedObject(String objectName, DynamicMBean object) throws MalformedObjectNameException{
-        ObjectName objName= new ObjectName(objectName);
-        if (objName.isPattern()) {
-            throw new RuntimeOperationsException(new IllegalArgumentException("Invalid name->"+ objName.toString()));
-        }
-        this.name= objName;
-        this.object= object;
-    }
-
-    /**
-     * Compares the current object name with another object name.
-     *
-     * @param object  The Named Object that the current object name is to be
-     *        compared with.
-     *
-     * @return  True if the two named objects are equal, otherwise false.
-     */
-    public boolean equals(Object object)  {
-        if (this == object) return true;
-        if (object == null) return false;
-        if (!(object instanceof NamedObject)) return false;
-        NamedObject no = (NamedObject) object;
-        return name.equals(no.getName());
-    }
-
-
-    /**
-     * Returns a hash code for this named object.
-     *
-     */
-    public int hashCode() {
-        return name.hashCode();
-    }
-
-    /**
-     * Get the object name.
-     */
-    public ObjectName getName()  {
-        return name;
-    }
-
-    /**
-     * Get the object
-     */
-    public DynamicMBean getObject()  {
-        return object;
-   }
-
- }
diff --git a/ojluni/src/main/java/com/sun/jmx/mbeanserver/ObjectInputStreamWithLoader.java b/ojluni/src/main/java/com/sun/jmx/mbeanserver/ObjectInputStreamWithLoader.java
deleted file mode 100755
index 3e8cb71..0000000
--- a/ojluni/src/main/java/com/sun/jmx/mbeanserver/ObjectInputStreamWithLoader.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-package com.sun.jmx.mbeanserver;
-
-// Java import
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.ObjectInputStream;
-import java.io.ObjectStreamClass;
-import sun.reflect.misc.ReflectUtil;
-
-/**
- * This class deserializes an object in the context of a specific class loader.
- *
- * @since 1.5
- */
-class ObjectInputStreamWithLoader extends ObjectInputStream {
-
-
-    private ClassLoader loader;
-
-
-    /**
-     * @exception IOException Signals that an I/O exception of some
-     * sort has occurred.
-     * @exception StreamCorruptedException The object stream is corrupt.
-     */
-    public ObjectInputStreamWithLoader(InputStream in, ClassLoader theLoader)
-            throws IOException {
-        super(in);
-        this.loader = theLoader;
-    }
-
-    @Override
-    protected Class<?> resolveClass(ObjectStreamClass aClass)
-            throws IOException, ClassNotFoundException {
-        if (loader == null) {
-            return super.resolveClass(aClass);
-        } else {
-            String name = aClass.getName();
-            ReflectUtil.checkPackageAccess(name);
-            // Query the class loader ...
-            return Class.forName(name, false, loader);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/mbeanserver/PerInterface.java b/ojluni/src/main/java/com/sun/jmx/mbeanserver/PerInterface.java
deleted file mode 100755
index e24473e..0000000
--- a/ojluni/src/main/java/com/sun/jmx/mbeanserver/PerInterface.java
+++ /dev/null
@@ -1,280 +0,0 @@
-/*
- * Copyright (c) 2005, 2006, 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.jmx.mbeanserver;
-
-import java.security.AccessController;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import javax.management.AttributeNotFoundException;
-import javax.management.InvalidAttributeValueException;
-import javax.management.MBeanException;
-import javax.management.MBeanInfo;
-import javax.management.ReflectionException;
-
-import static com.sun.jmx.mbeanserver.Util.*;
-
-/**
- * Per-MBean-interface behavior.  A single instance of this class can be shared
- * by all MBeans of the same kind (Standard MBean or MXBean) that have the same
- * MBean interface.
- *
- * @since 1.6
- */
-final class PerInterface<M> {
-    PerInterface(Class<?> mbeanInterface, MBeanIntrospector<M> introspector,
-                 MBeanAnalyzer<M> analyzer, MBeanInfo mbeanInfo) {
-        this.mbeanInterface = mbeanInterface;
-        this.introspector = introspector;
-        this.mbeanInfo = mbeanInfo;
-        analyzer.visit(new InitMaps());
-    }
-
-    Class<?> getMBeanInterface() {
-        return mbeanInterface;
-    }
-
-    MBeanInfo getMBeanInfo() {
-        return mbeanInfo;
-    }
-
-    boolean isMXBean() {
-        return introspector.isMXBean();
-    }
-
-    Object getAttribute(Object resource, String attribute, Object cookie)
-            throws AttributeNotFoundException,
-                   MBeanException,
-                   ReflectionException {
-
-        final M cm = getters.get(attribute);
-        if (cm == null) {
-            final String msg;
-            if (setters.containsKey(attribute))
-                msg = "Write-only attribute: " + attribute;
-            else
-                msg = "No such attribute: " + attribute;
-            throw new AttributeNotFoundException(msg);
-        }
-        return introspector.invokeM(cm, resource, (Object[]) null, cookie);
-    }
-
-    void setAttribute(Object resource, String attribute, Object value,
-                      Object cookie)
-            throws AttributeNotFoundException,
-                   InvalidAttributeValueException,
-                   MBeanException,
-                   ReflectionException {
-
-        final M cm = setters.get(attribute);
-        if (cm == null) {
-            final String msg;
-            if (getters.containsKey(attribute))
-                msg = "Read-only attribute: " + attribute;
-            else
-                msg = "No such attribute: " + attribute;
-            throw new AttributeNotFoundException(msg);
-        }
-        introspector.invokeSetter(attribute, cm, resource, value, cookie);
-    }
-
-    Object invoke(Object resource, String operation, Object[] params,
-                  String[] signature, Object cookie)
-            throws MBeanException, ReflectionException {
-
-        final List<MethodAndSig> list = ops.get(operation);
-        if (list == null) {
-            final String msg = "No such operation: " + operation;
-            return noSuchMethod(msg, resource, operation, params, signature,
-                                cookie);
-        }
-        if (signature == null)
-            signature = new String[0];
-        MethodAndSig found = null;
-        for (MethodAndSig mas : list) {
-            if (Arrays.equals(mas.signature, signature)) {
-                found = mas;
-                break;
-            }
-        }
-        if (found == null) {
-            final String badSig = sigString(signature);
-            final String msg;
-            if (list.size() == 1) {  // helpful exception message
-                msg = "Signature mismatch for operation " + operation +
-                        ": " + badSig + " should be " +
-                        sigString(list.get(0).signature);
-            } else {
-                msg = "Operation " + operation + " exists but not with " +
-                        "this signature: " + badSig;
-            }
-            return noSuchMethod(msg, resource, operation, params, signature,
-                                cookie);
-        }
-        return introspector.invokeM(found.method, resource, params, cookie);
-    }
-
-    /*
-     * This method is called when invoke doesn't find the named method.
-     * Before throwing an exception, we check to see whether the
-     * jmx.invoke.getters property is set, and if so whether the method
-     * being invoked might be a getter or a setter.  If so we invoke it
-     * and return the result.  This is for compatibility
-     * with code based on JMX RI 1.0 or 1.1 which allowed invoking getters
-     * and setters.  It is *not* recommended that new code use this feature.
-     *
-     * Since this method is either going to throw an exception or use
-     * functionality that is strongly discouraged, we consider that its
-     * performance is not very important.
-     *
-     * A simpler way to implement the functionality would be to add the getters
-     * and setters to the operations map when jmx.invoke.getters is set.
-     * However, that means that the property is consulted when an MBean
-     * interface is being introspected and not thereafter.  Previously,
-     * the property was consulted on every invocation.  So this simpler
-     * implementation could potentially break code that sets and unsets
-     * the property at different times.
-     */
-    private Object noSuchMethod(String msg, Object resource, String operation,
-                                Object[] params, String[] signature,
-                                Object cookie)
-            throws MBeanException, ReflectionException {
-
-        // Construct the exception that we will probably throw
-        final NoSuchMethodException nsme =
-            new NoSuchMethodException(operation + sigString(signature));
-        final ReflectionException exception =
-            new ReflectionException(nsme, msg);
-
-        if (introspector.isMXBean())
-            throw exception; // No compatibility requirement here
-
-        // Is the compatibility property set?
-        GetPropertyAction act = new GetPropertyAction("jmx.invoke.getters");
-        String invokeGettersS;
-        try {
-            invokeGettersS = AccessController.doPrivileged(act);
-        } catch (Exception e) {
-            // We don't expect an exception here but if we get one then
-            // we'll simply assume that the property is not set.
-            invokeGettersS = null;
-        }
-        if (invokeGettersS == null)
-            throw exception;
-
-        int rest = 0;
-        Map<String, M> methods = null;
-        if (signature == null || signature.length == 0) {
-            if (operation.startsWith("get"))
-                rest = 3;
-            else if (operation.startsWith("is"))
-                rest = 2;
-            if (rest != 0)
-                methods = getters;
-        } else if (signature.length == 1 &&
-                   operation.startsWith("set")) {
-            rest = 3;
-            methods = setters;
-        }
-
-        if (rest != 0) {
-            String attrName = operation.substring(rest);
-            M method = methods.get(attrName);
-            if (method != null && introspector.getName(method).equals(operation)) {
-                String[] msig = introspector.getSignature(method);
-                if ((signature == null && msig.length == 0) ||
-                        Arrays.equals(signature, msig)) {
-                    return introspector.invokeM(method, resource, params, cookie);
-                }
-            }
-        }
-
-        throw exception;
-    }
-
-    private String sigString(String[] signature) {
-        StringBuilder b = new StringBuilder("(");
-        if (signature != null) {
-            for (String s : signature) {
-                if (b.length() > 1)
-                    b.append(", ");
-                b.append(s);
-            }
-        }
-        return b.append(")").toString();
-    }
-
-    /**
-     * Visitor that sets up the method maps (operations, getters, setters).
-     */
-    private class InitMaps implements MBeanAnalyzer.MBeanVisitor<M> {
-        public void visitAttribute(String attributeName,
-                                   M getter,
-                                   M setter) {
-            if (getter != null) {
-                introspector.checkMethod(getter);
-                final Object old = getters.put(attributeName, getter);
-                assert(old == null);
-            }
-            if (setter != null) {
-                introspector.checkMethod(setter);
-                final Object old = setters.put(attributeName, setter);
-                assert(old == null);
-            }
-        }
-
-        public void visitOperation(String operationName,
-                                   M operation) {
-            introspector.checkMethod(operation);
-            final String[] sig = introspector.getSignature(operation);
-            final MethodAndSig mas = new MethodAndSig();
-            mas.method = operation;
-            mas.signature = sig;
-            List<MethodAndSig> list = ops.get(operationName);
-            if (list == null)
-                list = Collections.singletonList(mas);
-            else {
-                if (list.size() == 1)
-                    list = newList(list);
-                list.add(mas);
-            }
-            ops.put(operationName, list);
-        }
-    }
-
-    private class MethodAndSig {
-        M method;
-        String[] signature;
-    }
-
-    private final Class<?> mbeanInterface;
-    private final MBeanIntrospector<M> introspector;
-    private final MBeanInfo mbeanInfo;
-    private final Map<String, M> getters = newMap();
-    private final Map<String, M> setters = newMap();
-    private final Map<String, List<MethodAndSig>> ops = newMap();
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/mbeanserver/Repository.java b/ojluni/src/main/java/com/sun/jmx/mbeanserver/Repository.java
deleted file mode 100755
index 4693a44..0000000
--- a/ojluni/src/main/java/com/sun/jmx/mbeanserver/Repository.java
+++ /dev/null
@@ -1,678 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-package com.sun.jmx.mbeanserver;
-
-import com.sun.jmx.defaults.ServiceName;
-import static com.sun.jmx.defaults.JmxProperties.MBEANSERVER_LOGGER;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.concurrent.locks.ReentrantReadWriteLock;
-import java.util.logging.Level;
-import java.util.Map;
-import java.util.Set;
-import javax.management.DynamicMBean;
-import javax.management.InstanceAlreadyExistsException;
-import javax.management.InstanceNotFoundException;
-import javax.management.ObjectName;
-import javax.management.QueryExp;
-import javax.management.RuntimeOperationsException;
-
-/**
- * This repository does not support persistency.
- *
- * @since 1.5
- */
-public class Repository {
-
-    /**
-     * An interface that allows the caller to get some control
-     * over the registration.
-     * @see #addMBean
-     * @see #remove
-     */
-    public interface RegistrationContext {
-        /**
-         * Called by {@link #addMBean}.
-         * Can throw a RuntimeOperationsException to cancel the
-         * registration.
-         */
-        public void registering();
-
-        /**
-         * Called by {@link #remove}.
-         * Any exception thrown by this method will be ignored.
-         */
-        public void unregistered();
-    }
-
-    // Private fields -------------------------------------------->
-
-    /**
-     * The structure for storing the objects is very basic.
-     * A Hashtable is used for storing the different domains
-     * For each domain, a hashtable contains the instances with
-     * canonical key property list string as key and named object
-     * aggregated from given object name and mbean instance as value.
-     */
-    private final Map<String,Map<String,NamedObject>> domainTb;
-
-    /**
-     * Number of elements contained in the Repository
-     */
-    private volatile int nbElements = 0;
-
-    /**
-     * Domain name of the server the repository is attached to.
-     * It is quicker to store the information in the repository rather
-     * than querying the framework each time the info is required.
-     */
-    private final String domain;
-
-    /**
-     * We use a global reentrant read write lock to protect the repository.
-     * This seems safer and more efficient: we are using Maps of Maps,
-     * Guaranteing consistency while using Concurent objects at each level
-     * may be more difficult.
-     **/
-    private final ReentrantReadWriteLock lock;
-
-    // Private fields <=============================================
-
-    // Private methods --------------------------------------------->
-
-    /* This class is used to match an ObjectName against a pattern. */
-    private final static class ObjectNamePattern {
-        private final String[] keys;
-        private final String[] values;
-        private final String   properties;
-        private final boolean  isPropertyListPattern;
-        private final boolean  isPropertyValuePattern;
-
-        /**
-         * The ObjectName pattern against which ObjectNames are matched.
-         **/
-        public final ObjectName pattern;
-
-        /**
-         * Builds a new ObjectNamePattern object from an ObjectName pattern.
-         * @param pattern The ObjectName pattern under examination.
-         **/
-        public ObjectNamePattern(ObjectName pattern) {
-            this(pattern.isPropertyListPattern(),
-                 pattern.isPropertyValuePattern(),
-                 pattern.getCanonicalKeyPropertyListString(),
-                 pattern.getKeyPropertyList(),
-                 pattern);
-        }
-
-        /**
-         * Builds a new ObjectNamePattern object from an ObjectName pattern
-         * constituents.
-         * @param propertyListPattern pattern.isPropertyListPattern().
-         * @param propertyValuePattern pattern.isPropertyValuePattern().
-         * @param canonicalProps pattern.getCanonicalKeyPropertyListString().
-         * @param keyPropertyList pattern.getKeyPropertyList().
-         * @param pattern The ObjectName pattern under examination.
-         **/
-        ObjectNamePattern(boolean propertyListPattern,
-                          boolean propertyValuePattern,
-                          String canonicalProps,
-                          Map<String,String> keyPropertyList,
-                          ObjectName pattern) {
-            this.isPropertyListPattern = propertyListPattern;
-            this.isPropertyValuePattern = propertyValuePattern;
-            this.properties = canonicalProps;
-            final int len = keyPropertyList.size();
-            this.keys   = new String[len];
-            this.values = new String[len];
-            int i = 0;
-            for (Map.Entry<String,String> entry : keyPropertyList.entrySet()) {
-                keys[i]   = entry.getKey();
-                values[i] = entry.getValue();
-                i++;
-            }
-            this.pattern = pattern;
-        }
-
-        /**
-         * Return true if the given ObjectName matches the ObjectName pattern
-         * for which this object has been built.
-         * WARNING: domain name is not considered here because it is supposed
-         *          not to be wildcard when called. PropertyList is also
-         *          supposed not to be zero-length.
-         * @param name The ObjectName we want to match against the pattern.
-         * @return true if <code>name</code> matches the pattern.
-         **/
-        public boolean matchKeys(ObjectName name) {
-            // If key property value pattern but not key property list
-            // pattern, then the number of key properties must be equal
-            //
-            if (isPropertyValuePattern &&
-                !isPropertyListPattern &&
-                (name.getKeyPropertyList().size() != keys.length))
-                return false;
-
-            // If key property value pattern or key property list pattern,
-            // then every property inside pattern should exist in name
-            //
-            if (isPropertyValuePattern || isPropertyListPattern) {
-                for (int i = keys.length - 1; i >= 0 ; i--) {
-                    // Find value in given object name for key at current
-                    // index in receiver
-                    //
-                    String v = name.getKeyProperty(keys[i]);
-                    // Did we find a value for this key ?
-                    //
-                    if (v == null) return false;
-                    // If this property is ok (same key, same value), go to next
-                    //
-                    if (isPropertyValuePattern &&
-                        pattern.isPropertyValuePattern(keys[i])) {
-                        // wildmatch key property values
-                        // values[i] is the pattern;
-                        // v is the string
-                        if (Util.wildmatch(v,values[i]))
-                            continue;
-                        else
-                            return false;
-                    }
-                    if (v.equals(values[i])) continue;
-                    return false;
-                }
-                return true;
-            }
-
-            // If no pattern, then canonical names must be equal
-            //
-            final String p1 = name.getCanonicalKeyPropertyListString();
-            final String p2 = properties;
-            return (p1.equals(p2));
-        }
-    }
-
-    /**
-     * Add all the matching objects from the given hashtable in the
-     * result set for the given ObjectNamePattern
-     * Do not check whether the domains match (only check for matching
-     * key property lists - see <i>matchKeys()</i>)
-     **/
-    private void addAllMatching(final Map<String,NamedObject> moiTb,
-                                final Set<NamedObject> result,
-                                final ObjectNamePattern pattern) {
-        synchronized (moiTb) {
-            for (NamedObject no : moiTb.values()) {
-                final ObjectName on = no.getName();
-                // if all couples (property, value) are contained
-                if (pattern.matchKeys(on)) result.add(no);
-            }
-        }
-    }
-
-    private void addNewDomMoi(final DynamicMBean object,
-                              final String dom,
-                              final ObjectName name,
-                              final RegistrationContext context) {
-        final Map<String,NamedObject> moiTb =
-            new HashMap<String,NamedObject>();
-        final String key = name.getCanonicalKeyPropertyListString();
-        addMoiToTb(object,name,key,moiTb,context);
-        domainTb.put(dom, moiTb);
-        nbElements++;
-    }
-
-    private void registering(RegistrationContext context) {
-        if (context == null) return;
-        try {
-            context.registering();
-        } catch (RuntimeOperationsException x) {
-            throw x;
-        } catch (RuntimeException x) {
-            throw new RuntimeOperationsException(x);
-        }
-    }
-
-    private void unregistering(RegistrationContext context, ObjectName name) {
-        if (context == null) return;
-        try {
-            context.unregistered();
-        } catch (Exception x) {
-            // shouldn't come here...
-            MBEANSERVER_LOGGER.log(Level.FINE,
-                    "Unexpected exception while unregistering "+name,
-                    x);
-        }
-    }
-
-    private void addMoiToTb(final DynamicMBean object,
-            final ObjectName name,
-            final String key,
-            final Map<String,NamedObject> moiTb,
-            final RegistrationContext context) {
-        registering(context);
-        moiTb.put(key,new NamedObject(name, object));
-    }
-
-    /**
-     * Retrieves the named object contained in repository
-     * from the given objectname.
-     */
-    private NamedObject retrieveNamedObject(ObjectName name) {
-
-        // No patterns inside reposit
-        if (name.isPattern()) return null;
-
-        // Extract the domain name.
-        String dom = name.getDomain().intern();
-
-        // Default domain case
-        if (dom.length() == 0) {
-            dom = domain;
-        }
-
-        Map<String,NamedObject> moiTb = domainTb.get(dom);
-        if (moiTb == null) {
-            return null; // No domain containing registered object names
-        }
-
-        return moiTb.get(name.getCanonicalKeyPropertyListString());
-    }
-
-    // Private methods <=============================================
-
-    // Protected methods --------------------------------------------->
-
-    // Protected methods <=============================================
-
-    // Public methods --------------------------------------------->
-
-    /**
-     * Construct a new repository with the given default domain.
-     */
-    public Repository(String domain) {
-        this(domain,true);
-    }
-
-    /**
-     * Construct a new repository with the given default domain.
-     */
-    public Repository(String domain, boolean fairLock) {
-        lock = new ReentrantReadWriteLock(fairLock);
-
-        domainTb = new HashMap<String,Map<String,NamedObject>>(5);
-
-        if (domain != null && domain.length() != 0)
-            this.domain = domain.intern(); // we use == domain later on...
-        else
-            this.domain = ServiceName.DOMAIN;
-
-        // Creates a new hashtable for the default domain
-        domainTb.put(this.domain, new HashMap<String,NamedObject>());
-    }
-
-    /**
-     * Returns the list of domains in which any MBean is currently
-     * registered.
-     *
-     */
-    public String[] getDomains() {
-
-        lock.readLock().lock();
-        final List<String> result;
-        try {
-            // Temporary list
-            result = new ArrayList<String>(domainTb.size());
-            for (Map.Entry<String,Map<String,NamedObject>> entry :
-                     domainTb.entrySet()) {
-                // Skip domains that are in the table but have no
-                // MBean registered in them
-                // in particular the default domain may be like this
-                Map<String,NamedObject> t = entry.getValue();
-                if (t != null && t.size() != 0)
-                    result.add(entry.getKey());
-            }
-        } finally {
-            lock.readLock().unlock();
-        }
-
-        // Make an array from result.
-        return result.toArray(new String[result.size()]);
-    }
-
-    /**
-     * Stores an MBean associated with its object name in the repository.
-     *
-     * @param object  MBean to be stored in the repository.
-     * @param name    MBean object name.
-     * @param context A registration context. If non null, the repository
-     *                will call {@link RegistrationContext#registering()
-     *                context.registering()} from within the repository
-     *                lock, when it has determined that the {@code object}
-     *                can be stored in the repository with that {@code name}.
-     *                If {@link RegistrationContext#registering()
-     *                context.registering()} throws an exception, the
-     *                operation is abandonned, the MBean is not added to the
-     *                repository, and a {@link RuntimeOperationsException}
-     *                is thrown.
-     */
-    public void addMBean(final DynamicMBean object, ObjectName name,
-            final RegistrationContext context)
-        throws InstanceAlreadyExistsException {
-
-        if (MBEANSERVER_LOGGER.isLoggable(Level.FINER)) {
-            MBEANSERVER_LOGGER.logp(Level.FINER, Repository.class.getName(),
-                    "addMBean", "name = " + name);
-        }
-
-        // Extract the domain name.
-        String dom = name.getDomain().intern();
-        boolean to_default_domain = false;
-
-        // Set domain to default if domain is empty and not already set
-        if (dom.length() == 0)
-            name = Util.newObjectName(domain + name.toString());
-
-        // Do we have default domain ?
-        if (dom == domain) {  // ES: OK (dom & domain are interned)
-            to_default_domain = true;
-            dom = domain;
-        } else {
-            to_default_domain = false;
-        }
-
-        // Validate name for an object
-        if (name.isPattern()) {
-            throw new RuntimeOperationsException(
-             new IllegalArgumentException("Repository: cannot add mbean for " +
-                                          "pattern name " + name.toString()));
-        }
-
-        lock.writeLock().lock();
-        try {
-            // Domain cannot be JMImplementation if entry does not exist
-            if ( !to_default_domain &&
-                    dom.equals("JMImplementation") &&
-                    domainTb.containsKey("JMImplementation")) {
-                throw new RuntimeOperationsException(
-                        new IllegalArgumentException(
-                        "Repository: domain name cannot be JMImplementation"));
-            }
-
-            // If domain does not already exist, add it to the hash table
-            final Map<String,NamedObject> moiTb = domainTb.get(dom);
-            if (moiTb == null) {
-                addNewDomMoi(object, dom, name, context);
-                return;
-            } else {
-                // Add instance if not already present
-                String cstr = name.getCanonicalKeyPropertyListString();
-                NamedObject elmt= moiTb.get(cstr);
-                if (elmt != null) {
-                    throw new InstanceAlreadyExistsException(name.toString());
-                } else {
-                    nbElements++;
-                    addMoiToTb(object,name,cstr,moiTb,context);
-                }
-            }
-
-        } finally {
-            lock.writeLock().unlock();
-        }
-    }
-
-    /**
-     * Checks whether an MBean of the name specified is already stored in
-     * the repository.
-     *
-     * @param name name of the MBean to find.
-     *
-     * @return  true if the MBean is stored in the repository,
-     *          false otherwise.
-     */
-    public boolean contains(ObjectName name) {
-        if (MBEANSERVER_LOGGER.isLoggable(Level.FINER)) {
-            MBEANSERVER_LOGGER.logp(Level.FINER, Repository.class.getName(),
-                    "contains", " name = " + name);
-        }
-        lock.readLock().lock();
-        try {
-            return (retrieveNamedObject(name) != null);
-        } finally {
-            lock.readLock().unlock();
-        }
-    }
-
-    /**
-     * Retrieves the MBean of the name specified from the repository. The
-     * object name must match exactly.
-     *
-     * @param name name of the MBean to retrieve.
-     *
-     * @return  The retrieved MBean if it is contained in the repository,
-     *          null otherwise.
-     */
-    public DynamicMBean retrieve(ObjectName name) {
-        if (MBEANSERVER_LOGGER.isLoggable(Level.FINER)) {
-            MBEANSERVER_LOGGER.logp(Level.FINER, Repository.class.getName(),
-                    "retrieve", "name = " + name);
-        }
-
-        // Calls internal retrieve method to get the named object
-        lock.readLock().lock();
-        try {
-            NamedObject no = retrieveNamedObject(name);
-            if (no == null) return null;
-            else return no.getObject();
-        } finally {
-            lock.readLock().unlock();
-        }
-    }
-
-    /**
-     * Selects and retrieves the list of MBeans whose names match the specified
-     * object name pattern and which match the specified query expression
-     * (optionally).
-     *
-     * @param pattern The name of the MBean(s) to retrieve - may be a specific
-     * object or a name pattern allowing multiple MBeans to be selected.
-     * @param query query expression to apply when selecting objects - this
-     * parameter will be ignored when the Repository Service does not
-     * support filtering.
-     *
-     * @return  The list of MBeans selected. There may be zero, one or many
-     *          MBeans returned in the set.
-     */
-    public Set<NamedObject> query(ObjectName pattern, QueryExp query) {
-
-        final Set<NamedObject> result = new HashSet<NamedObject>();
-
-        // The following filter cases are considered:
-        // null, "", "*:*" : names in all domains
-        // ":*", ":[key=value],*" : names in defaultDomain
-        // "domain:*", "domain:[key=value],*" : names in the specified domain
-
-        // Surely one of the most frequent cases ... query on the whole world
-        ObjectName name;
-        if (pattern == null ||
-            pattern.getCanonicalName().length() == 0 ||
-            pattern.equals(ObjectName.WILDCARD))
-           name = ObjectName.WILDCARD;
-        else name = pattern;
-
-        lock.readLock().lock();
-        try {
-
-            // If pattern is not a pattern, retrieve this mbean !
-            if (!name.isPattern()) {
-                final NamedObject no = retrieveNamedObject(name);
-                if (no != null) result.add(no);
-                return result;
-            }
-
-            // All names in all domains
-            if (name == ObjectName.WILDCARD) {
-                for (Map<String,NamedObject> moiTb : domainTb.values()) {
-                    result.addAll(moiTb.values());
-                }
-                return result;
-            }
-
-            final String canonical_key_property_list_string =
-                    name.getCanonicalKeyPropertyListString();
-            final boolean allNames =
-                    (canonical_key_property_list_string.length()==0);
-            final ObjectNamePattern namePattern =
-                (allNames?null:new ObjectNamePattern(name));
-
-            // All names in default domain
-            if (name.getDomain().length() == 0) {
-                final Map<String,NamedObject> moiTb = domainTb.get(domain);
-                if (allNames)
-                    result.addAll(moiTb.values());
-                else
-                    addAllMatching(moiTb, result, namePattern);
-                return result;
-            }
-
-            if (!name.isDomainPattern()) {
-                final Map<String,NamedObject> moiTb = domainTb.get(name.getDomain());
-                if (moiTb == null) return Collections.emptySet();
-                if (allNames)
-                    result.addAll(moiTb.values());
-                else
-                    addAllMatching(moiTb, result, namePattern);
-                return result;
-            }
-
-            // Pattern matching in the domain name (*, ?)
-            final String dom2Match = name.getDomain();
-            for (String dom : domainTb.keySet()) {
-                if (Util.wildmatch(dom, dom2Match)) {
-                    final Map<String,NamedObject> moiTb = domainTb.get(dom);
-                    if (allNames)
-                        result.addAll(moiTb.values());
-                    else
-                        addAllMatching(moiTb, result, namePattern);
-                }
-            }
-            return result;
-        } finally {
-            lock.readLock().unlock();
-        }
-    }
-
-    /**
-     * Removes an MBean from the repository.
-     *
-     * @param name name of the MBean to remove.
-     * @param context A registration context. If non null, the repository
-     *                will call {@link RegistrationContext#unregistered()
-     *                context.unregistered()} from within the repository
-     *                lock, just after the mbean associated with
-     *                {@code name} is removed from the repository.
-     *                If {@link RegistrationContext#unregistered()
-     *                context.unregistered()} is not expected to throw any
-     *                exception. If it does, the exception is logged
-     *                and swallowed.
-     *
-     * @exception InstanceNotFoundException The MBean does not exist in
-     *            the repository.
-     */
-    public void remove(final ObjectName name,
-            final RegistrationContext context)
-        throws InstanceNotFoundException {
-
-        // Debugging stuff
-        if (MBEANSERVER_LOGGER.isLoggable(Level.FINER)) {
-            MBEANSERVER_LOGGER.logp(Level.FINER, Repository.class.getName(),
-                    "remove", "name = " + name);
-        }
-
-        // Extract domain name.
-        String dom= name.getDomain().intern();
-
-        // Default domain case
-        if (dom.length() == 0) dom = domain;
-
-        lock.writeLock().lock();
-        try {
-            // Find the domain subtable
-            final Map<String,NamedObject> moiTb = domainTb.get(dom);
-            if (moiTb == null) {
-                throw new InstanceNotFoundException(name.toString());
-            }
-
-            // Remove the corresponding element
-            if (moiTb.remove(name.getCanonicalKeyPropertyListString())==null) {
-                throw new InstanceNotFoundException(name.toString());
-            }
-
-            // We removed it !
-            nbElements--;
-
-            // No more object for this domain, we remove this domain hashtable
-            if (moiTb.isEmpty()) {
-                domainTb.remove(dom);
-
-                // set a new default domain table (always present)
-                // need to reinstantiate a hashtable because of possible
-                // big buckets array size inside table, never cleared,
-                // thus the new !
-                if (dom == domain) // ES: OK dom and domain are interned.
-                    domainTb.put(domain, new HashMap<String,NamedObject>());
-            }
-
-            unregistering(context,name);
-
-        } finally {
-            lock.writeLock().unlock();
-        }
-    }
-
-    /**
-     * Gets the number of MBeans stored in the repository.
-     *
-     * @return  Number of MBeans.
-     */
-    public Integer getCount() {
-        return nbElements;
-    }
-
-    /**
-     * Gets the name of the domain currently used by default in the
-     * repository.
-     *
-     * @return  A string giving the name of the default domain name.
-     */
-    public String getDefaultDomain() {
-        return domain;
-    }
-
-    // Public methods <=============================================
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/mbeanserver/SecureClassLoaderRepository.java b/ojluni/src/main/java/com/sun/jmx/mbeanserver/SecureClassLoaderRepository.java
deleted file mode 100755
index b6e8c4a..0000000
--- a/ojluni/src/main/java/com/sun/jmx/mbeanserver/SecureClassLoaderRepository.java
+++ /dev/null
@@ -1,64 +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.
- */
-package com.sun.jmx.mbeanserver;
-
-import javax.management.loading.ClassLoaderRepository;
-
-/**
- * Fix security hole in ClassLoaderRepository. This class wraps
- * the actual ClassLoaderRepository implementation so that
- * only the methods from {@link javax.management.loading.ClassLoaderRepository}
- * can be accessed (read-only).
- *
- * @since 1.5
- */
-final class SecureClassLoaderRepository
-    implements ClassLoaderRepository {
-
-    private final ClassLoaderRepository clr;
-    /**
-     * Creates a new secure ClassLoaderRepository wrapping an
-     * unsecure implementation.
-     * @param clr Unsecure {@link ClassLoaderRepository} implementation
-     *            to wrap.
-     **/
-    public SecureClassLoaderRepository(ClassLoaderRepository clr) {
-        this.clr=clr;
-    }
-    public final Class<?> loadClass(String className)
-        throws ClassNotFoundException {
-        return clr.loadClass(className);
-    }
-    public final Class<?> loadClassWithout(ClassLoader loader,
-                                  String className)
-        throws ClassNotFoundException {
-        return clr.loadClassWithout(loader,className);
-    }
-    public final Class<?> loadClassBefore(ClassLoader loader,
-                                 String className)
-        throws ClassNotFoundException {
-        return clr.loadClassBefore(loader,className);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/mbeanserver/StandardMBeanIntrospector.java b/ojluni/src/main/java/com/sun/jmx/mbeanserver/StandardMBeanIntrospector.java
deleted file mode 100755
index 2388eae..0000000
--- a/ojluni/src/main/java/com/sun/jmx/mbeanserver/StandardMBeanIntrospector.java
+++ /dev/null
@@ -1,193 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-package com.sun.jmx.mbeanserver;
-
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.lang.reflect.Type;
-import java.util.WeakHashMap;
-import javax.management.Descriptor;
-import javax.management.ImmutableDescriptor;
-import javax.management.IntrospectionException;
-import javax.management.MBeanAttributeInfo;
-import javax.management.MBeanException;
-import javax.management.MBeanOperationInfo;
-import javax.management.NotCompliantMBeanException;
-import javax.management.NotificationBroadcaster;
-import javax.management.NotificationBroadcasterSupport;
-import sun.reflect.misc.MethodUtil;
-
-/**
- * @since 1.6
- */
-class StandardMBeanIntrospector extends MBeanIntrospector<Method> {
-    private static final StandardMBeanIntrospector instance =
-        new StandardMBeanIntrospector();
-
-    static StandardMBeanIntrospector getInstance() {
-        return instance;
-    }
-
-    @Override
-    PerInterfaceMap<Method> getPerInterfaceMap() {
-        return perInterfaceMap;
-    }
-
-    @Override
-    MBeanInfoMap getMBeanInfoMap() {
-        return mbeanInfoMap;
-    }
-
-    @Override
-    MBeanAnalyzer<Method> getAnalyzer(Class<?> mbeanInterface)
-            throws NotCompliantMBeanException {
-        return MBeanAnalyzer.analyzer(mbeanInterface, this);
-    }
-
-    @Override
-    boolean isMXBean() {
-        return false;
-    }
-
-    @Override
-    Method mFrom(Method m) {
-        return m;
-    }
-
-    @Override
-    String getName(Method m) {
-        return m.getName();
-    }
-
-    @Override
-    Type getGenericReturnType(Method m) {
-        return m.getGenericReturnType();
-    }
-
-    @Override
-    Type[] getGenericParameterTypes(Method m) {
-        return m.getGenericParameterTypes();
-    }
-
-    @Override
-    String[] getSignature(Method m) {
-        Class<?>[] params = m.getParameterTypes();
-        String[] sig = new String[params.length];
-        for (int i = 0; i < params.length; i++)
-            sig[i] = params[i].getName();
-        return sig;
-    }
-
-    @Override
-    void checkMethod(Method m) {
-    }
-
-    @Override
-    Object invokeM2(Method m, Object target, Object[] args, Object cookie)
-            throws InvocationTargetException, IllegalAccessException,
-                   MBeanException {
-        return MethodUtil.invoke(m, target, args);
-    }
-
-    @Override
-    boolean validParameter(Method m, Object value, int paramNo, Object cookie) {
-        return isValidParameter(m, value, paramNo);
-    }
-
-    @Override
-    MBeanAttributeInfo getMBeanAttributeInfo(String attributeName,
-            Method getter, Method setter) {
-
-        final String description = "Attribute exposed for management";
-        try {
-            return new MBeanAttributeInfo(attributeName, description,
-                                          getter, setter);
-        } catch (IntrospectionException e) {
-            throw new RuntimeException(e); // should not happen
-        }
-    }
-
-    @Override
-    MBeanOperationInfo getMBeanOperationInfo(String operationName,
-            Method operation) {
-        final String description = "Operation exposed for management";
-        return new MBeanOperationInfo(description, operation);
-    }
-
-    @Override
-    Descriptor getBasicMBeanDescriptor() {
-        /* We don't bother saying mxbean=false, and we can't know whether
-           the info is immutable until we know whether the MBean class
-           (not interface) is a NotificationBroadcaster. */
-        return ImmutableDescriptor.EMPTY_DESCRIPTOR;
-    }
-
-    @Override
-    Descriptor getMBeanDescriptor(Class<?> resourceClass) {
-        boolean immutable = isDefinitelyImmutableInfo(resourceClass);
-        return new ImmutableDescriptor("mxbean=false",
-                                       "immutableInfo=" + immutable);
-    }
-
-    /* Return true if and only if we can be sure that the given MBean implementation
-     * class has immutable MBeanInfo.  A Standard MBean that is a
-     * NotificationBroadcaster is allowed to return different values at
-     * different times from its getNotificationInfo() method, which is when
-     * we might not know if it is immutable.  But if it is a subclass of
-     * NotificationBroadcasterSupport and does not override
-     * getNotificationInfo(), then we know it won't change.
-     */
-    static boolean isDefinitelyImmutableInfo(Class<?> implClass) {
-        if (!NotificationBroadcaster.class.isAssignableFrom(implClass))
-            return true;
-        synchronized (definitelyImmutable) {
-            Boolean immutable = definitelyImmutable.get(implClass);
-            if (immutable == null) {
-                final Class<NotificationBroadcasterSupport> nbs =
-                        NotificationBroadcasterSupport.class;
-                if (nbs.isAssignableFrom(implClass)) {
-                    try {
-                        Method m = implClass.getMethod("getNotificationInfo");
-                        immutable = (m.getDeclaringClass() == nbs);
-                    } catch (Exception e) {
-                        // Too bad, we'll say no for now.
-                        return false;
-                    }
-                } else
-                    immutable = false;
-                definitelyImmutable.put(implClass, immutable);
-            }
-            return immutable;
-        }
-    }
-    private static final WeakHashMap<Class<?>, Boolean> definitelyImmutable =
-            new WeakHashMap<Class<?>, Boolean>();
-
-    private static final PerInterfaceMap<Method>
-        perInterfaceMap = new PerInterfaceMap<Method>();
-
-    private static final MBeanInfoMap mbeanInfoMap = new MBeanInfoMap();
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/mbeanserver/StandardMBeanSupport.java b/ojluni/src/main/java/com/sun/jmx/mbeanserver/StandardMBeanSupport.java
deleted file mode 100755
index 2c9dfdc..0000000
--- a/ojluni/src/main/java/com/sun/jmx/mbeanserver/StandardMBeanSupport.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-package com.sun.jmx.mbeanserver;
-
-import java.lang.reflect.Method;
-
-import javax.management.MBeanInfo;
-import javax.management.MBeanServer;
-import javax.management.NotCompliantMBeanException;
-import javax.management.ObjectName;
-
-/**
- * Base class for Standard MBeans.
- *
- * @since 1.6
- */
-public class StandardMBeanSupport extends MBeanSupport<Method> {
-
-    /**
-     * <p>Construct a Standard MBean that wraps the given resource using the
-     * given Standard MBean interface.</p>
-     *
-     * @param resource the underlying resource for the new MBean.
-     * @param mbeanInterfaceType the class or interface to be used to determine
-     *       the MBean's management interface.  An interface if this is a
-     *       classic Standard MBean; a class if this is a {@code @ManagedResource}.
-     * @param <T> a type parameter that allows the compiler to check
-     *       that {@code resource} implements {@code mbeanInterfaceType},
-     *       provided that {@code mbeanInterfaceType} is a class constant like
-     *       {@code SomeMBean.class}.
-     * @throws IllegalArgumentException if {@code resource} is null or
-     *       if it does not implement the class {@code mbeanInterfaceType} or if
-     *       that class is not a valid Standard MBean interface.
-     */
-    public <T> StandardMBeanSupport(T resource, Class<T> mbeanInterfaceType)
-            throws NotCompliantMBeanException {
-        super(resource, mbeanInterfaceType);
-    }
-
-    @Override
-    MBeanIntrospector<Method> getMBeanIntrospector() {
-        return StandardMBeanIntrospector.getInstance();
-    }
-
-    @Override
-    Object getCookie() {
-        return null;
-    }
-
-    @Override
-    public void register(MBeanServer mbs, ObjectName name) {}
-
-    @Override
-    public void unregister() {}
-
-    /* Standard MBeans that are NotificationBroadcasters can return a different
-     * MBeanNotificationInfo[] every time getMBeanInfo() is called, so we have
-     * to reconstruct this MBeanInfo if necessary.
-     */
-    @Override
-    public MBeanInfo getMBeanInfo() {
-        MBeanInfo mbi = super.getMBeanInfo();
-        Class<?> resourceClass = getResource().getClass();
-        if (StandardMBeanIntrospector.isDefinitelyImmutableInfo(resourceClass))
-            return mbi;
-        return new MBeanInfo(mbi.getClassName(), mbi.getDescription(),
-                mbi.getAttributes(), mbi.getConstructors(),
-                mbi.getOperations(),
-                MBeanIntrospector.findNotifications(getResource()),
-                mbi.getDescriptor());
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/mbeanserver/SunJmxMBeanServer.java b/ojluni/src/main/java/com/sun/jmx/mbeanserver/SunJmxMBeanServer.java
deleted file mode 100755
index 28dd3d7..0000000
--- a/ojluni/src/main/java/com/sun/jmx/mbeanserver/SunJmxMBeanServer.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Copyright (c) 2000, 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.
- */
-
-package com.sun.jmx.mbeanserver;
-
-import javax.management.MBeanServer;
-import javax.management.MBeanServerDelegate;
-
-
-/**
- * Extends the MBeanServer interface to
- * provide methods for getting the MetaData and MBeanServerInstantiator
- * objects associated with an MBeanServer.
- *
- * @since 1.5
- */
-public interface SunJmxMBeanServer
-    extends MBeanServer {
-
-    /**
-     * Return the MBeanInstantiator associated to this MBeanServer.
-     * @exception UnsupportedOperationException if
-     *            {@link MBeanServerInterceptor}s
-     *            are not enabled on this object.
-     * @see #interceptorsEnabled
-     */
-    public MBeanInstantiator getMBeanInstantiator();
-
-    /**
-     * Tell whether {@link MBeanServerInterceptor}s are enabled on this
-     * object.
-     * @return <code>true</code> if {@link MBeanServerInterceptor}s are
-     *         enabled.
-     * @see #getMBeanServerInterceptor
-     * @see #setMBeanServerInterceptor
-     * @see #getMBeanInstantiator
-     * @see com.sun.jmx.mbeanserver.JmxMBeanServerBuilder
-     **/
-    public boolean interceptorsEnabled();
-
-    /**
-     * Return the MBeanServerInterceptor.
-     * @exception UnsupportedOperationException if
-     *            {@link MBeanServerInterceptor}s
-     *            are not enabled on this object.
-     * @see #interceptorsEnabled
-     **/
-    public MBeanServer getMBeanServerInterceptor();
-
-    /**
-     * Set the MBeanServerInterceptor.
-     * @exception UnsupportedOperationException if
-     *            {@link MBeanServerInterceptor}s
-     *            are not enabled on this object.
-     * @see #interceptorsEnabled
-     **/
-    public void setMBeanServerInterceptor(MBeanServer interceptor);
-
-    /**
-     * <p>Return the MBeanServerDelegate representing the MBeanServer.
-     * Notifications can be sent from the MBean server delegate using
-     * the method {@link MBeanServerDelegate#sendNotification}
-     * in the returned object.</p>
-     *
-     */
-    public MBeanServerDelegate getMBeanServerDelegate();
-
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/mbeanserver/Util.java b/ojluni/src/main/java/com/sun/jmx/mbeanserver/Util.java
deleted file mode 100755
index 82c94bc..0000000
--- a/ojluni/src/main/java/com/sun/jmx/mbeanserver/Util.java
+++ /dev/null
@@ -1,241 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-package com.sun.jmx.mbeanserver;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.IdentityHashMap;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.SortedMap;
-import java.util.TreeMap;
-import javax.management.MalformedObjectNameException;
-import javax.management.ObjectName;
-
-public class Util {
-    public static ObjectName newObjectName(String string) {
-        try {
-            return new ObjectName(string);
-        } catch (MalformedObjectNameException e) {
-            throw new IllegalArgumentException(e);
-        }
-    }
-
-    static <K, V> Map<K, V> newMap() {
-        return new HashMap<K, V>();
-    }
-
-    static <K, V> Map<K, V> newSynchronizedMap() {
-        return Collections.synchronizedMap(Util.<K, V>newMap());
-    }
-
-    static <K, V> IdentityHashMap<K, V> newIdentityHashMap() {
-        return new IdentityHashMap<K, V>();
-    }
-
-    static <K, V> Map<K, V> newSynchronizedIdentityHashMap() {
-        Map<K, V> map = newIdentityHashMap();
-        return Collections.synchronizedMap(map);
-    }
-
-    static <K, V> SortedMap<K, V> newSortedMap() {
-        return new TreeMap<K, V>();
-    }
-
-    static <K, V> SortedMap<K, V> newSortedMap(Comparator<? super K> comp) {
-        return new TreeMap<K, V>(comp);
-    }
-
-    static <K, V> Map<K, V> newInsertionOrderMap() {
-        return new LinkedHashMap<K, V>();
-    }
-
-    static <E> Set<E> newSet() {
-        return new HashSet<E>();
-    }
-
-    static <E> Set<E> newSet(Collection<E> c) {
-        return new HashSet<E>(c);
-    }
-
-    static <E> List<E> newList() {
-        return new ArrayList<E>();
-    }
-
-    static <E> List<E> newList(Collection<E> c) {
-        return new ArrayList<E>(c);
-    }
-
-    /* This method can be used by code that is deliberately violating the
-     * allowed checked casts.  Rather than marking the whole method containing
-     * the code with @SuppressWarnings, you can use a call to this method for
-     * the exact place where you need to escape the constraints.  Typically
-     * you will "import static" this method and then write either
-     *    X x = cast(y);
-     * or, if that doesn't work (e.g. X is a type variable)
-     *    Util.<X>cast(y);
-     */
-    @SuppressWarnings("unchecked")
-    public static <T> T cast(Object x) {
-        return (T) x;
-    }
-
-    /**
-     * Computes a descriptor hashcode from its names and values.
-     * @param names  the sorted array of descriptor names.
-     * @param values the array of descriptor values.
-     * @return a hash code value, as described in {@link #hashCode(Descriptor)}
-     */
-    public static int hashCode(String[] names, Object[] values) {
-        int hash = 0;
-        for (int i = 0; i < names.length; i++) {
-            Object v = values[i];
-            int h;
-            if (v == null) {
-                h = 0;
-            } else if (v instanceof Object[]) {
-                h = Arrays.deepHashCode((Object[]) v);
-            } else if (v.getClass().isArray()) {
-                h = Arrays.deepHashCode(new Object[]{v}) - 31;
-            // hashcode of a list containing just v is
-            // v.hashCode() + 31, see List.hashCode()
-            } else {
-                h = v.hashCode();
-            }
-            hash += names[i].toLowerCase().hashCode() ^ h;
-        }
-        return hash;
-    }
-
-    /** Match a part of a string against a shell-style pattern.
-        The only pattern characters recognized are <code>?</code>,
-        standing for any one character,
-        and <code>*</code>, standing for any string of
-        characters, including the empty string. For instance,
-        {@code wildmatch("sandwich","sa?d*ch",1,4,1,4)} will match
-        {@code "and"} against {@code "a?d"}.
-
-        @param str  the string containing the sequence to match.
-        @param pat  a string containing a pattern to match the sub string
-                    against.
-        @param stri   the index in the string at which matching should begin.
-        @param strend the index in the string at which the matching should
-                      end.
-        @param pati   the index in the pattern at which matching should begin.
-        @param patend the index in the pattern at which the matching should
-                      end.
-
-        @return true if and only if the string matches the pattern.
-    */
-    /* The algorithm is a classical one.  We advance pointers in
-       parallel through str and pat.  If we encounter a star in pat,
-       we remember its position and continue advancing.  If at any
-       stage we get a mismatch between str and pat, we look to see if
-       there is a remembered star.  If not, we fail.  If so, we
-       retreat pat to just past that star and str to the position
-       after the last one we tried, and we let the match advance
-       again.
-
-       Even though there is only one remembered star position, the
-       algorithm works when there are several stars in the pattern.
-       When we encounter the second star, we forget the first one.
-       This is OK, because if we get to the second star in A*B*C
-       (where A etc are arbitrary strings), we have already seen AXB.
-       We're therefore setting up a match of *C against the remainder
-       of the string, which will match if that remainder looks like
-       YC, so the whole string looks like AXBYC.
-    */
-    private static boolean wildmatch(final String str, final String pat,
-            int stri, final int strend, int pati, final int patend) {
-
-        // System.out.println("matching "+pat.substring(pati,patend)+
-        //        " against "+str.substring(stri, strend));
-        int starstri; // index for backtrack if "*" attempt fails
-        int starpati; // index for backtrack if "*" attempt fails, +1
-
-        starstri = starpati = -1;
-
-        /* On each pass through this loop, we either advance pati,
-           or we backtrack pati and advance starstri.  Since starstri
-           is only ever assigned from pati, the loop must terminate.  */
-        while (true) {
-            if (pati < patend) {
-                final char patc = pat.charAt(pati);
-                switch (patc) {
-                case '?':
-                    if (stri == strend)
-                        break;
-                    stri++;
-                    pati++;
-                    continue;
-                case '*':
-                    pati++;
-                    starpati = pati;
-                    starstri = stri;
-                    continue;
-                default:
-                    if (stri < strend && str.charAt(stri) == patc) {
-                        stri++;
-                        pati++;
-                        continue;
-                    }
-                    break;
-                }
-            } else if (stri == strend)
-                return true;
-
-            // Mismatched, can we backtrack to a "*"?
-            if (starpati < 0 || starstri == strend)
-                return false;
-
-            // Retry the match one position later in str
-            pati = starpati;
-            starstri++;
-            stri = starstri;
-        }
-    }
-
-    /** Match a string against a shell-style pattern.  The only pattern
-        characters recognized are <code>?</code>, standing for any one
-        character, and <code>*</code>, standing for any string of
-        characters, including the empty string.
-
-        @param str the string to match.
-        @param pat the pattern to match the string against.
-
-        @return true if and only if the string matches the pattern.
-    */
-    public static boolean wildmatch(String str, String pat) {
-        return wildmatch(str,pat,0,str.length(),0,pat.length());
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/mbeanserver/WeakIdentityHashMap.java b/ojluni/src/main/java/com/sun/jmx/mbeanserver/WeakIdentityHashMap.java
deleted file mode 100755
index 887ebe9..0000000
--- a/ojluni/src/main/java/com/sun/jmx/mbeanserver/WeakIdentityHashMap.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-package com.sun.jmx.mbeanserver;
-
-import static com.sun.jmx.mbeanserver.Util.*;
-
-import java.lang.ref.Reference;
-import java.lang.ref.ReferenceQueue;
-import java.lang.ref.WeakReference;
-
-import java.util.Map;
-
-
-/**
- * <p>A map where keys are compared using identity comparison (like
- * IdentityHashMap) but where the presence of an object as a key in
- * the map does not prevent it being garbage collected (like
- * WeakHashMap).  This class does not implement the Map interface
- * because it is difficult to ensure correct semantics for iterators
- * over the entrySet().</p>
- *
- * <p>Because we do not implement Map, we do not copy the questionable
- * interface where you can call get(k) or remove(k) for any type of k,
- * which of course can only have an effect if k is of type K.</p>
- *
- * <p>This map does not support null keys.</p>
- */
-/*
- * The approach
- * is to wrap each key in a WeakReference and use the wrapped value as
- * a key in an ordinary HashMap.  The WeakReference has to be a
- * subclass IdentityWeakReference (IWR) where two IWRs are equal if
- * they refer to the same object.  This enables us to find the entry
- * again.
- */
-class WeakIdentityHashMap<K, V> {
-    private WeakIdentityHashMap() {}
-
-    static <K, V> WeakIdentityHashMap<K, V> make() {
-        return new WeakIdentityHashMap<K, V>();
-    }
-
-    V get(K key) {
-        expunge();
-        WeakReference<K> keyref = makeReference(key);
-        return map.get(keyref);
-    }
-
-    public V put(K key, V value) {
-        expunge();
-        if (key == null)
-            throw new IllegalArgumentException("Null key");
-        WeakReference<K> keyref = makeReference(key, refQueue);
-        return map.put(keyref, value);
-    }
-
-    public V remove(K key) {
-        expunge();
-        WeakReference<K> keyref = makeReference(key);
-        return map.remove(keyref);
-    }
-
-    private void expunge() {
-        Reference<? extends K> ref;
-        while ((ref = refQueue.poll()) != null)
-            map.remove(ref);
-    }
-
-    private WeakReference<K> makeReference(K referent) {
-        return new IdentityWeakReference<K>(referent);
-    }
-
-    private WeakReference<K> makeReference(K referent, ReferenceQueue<K> q) {
-        return new IdentityWeakReference<K>(referent, q);
-    }
-
-    /**
-     * WeakReference where equals and hashCode are based on the
-     * referent.  More precisely, two objects are equal if they are
-     * identical or if they both have the same non-null referent.  The
-     * hashCode is the value the original referent had.  Even if the
-     * referent is cleared, the hashCode remains.  Thus, objects of
-     * this class can be used as keys in hash-based maps and sets.
-     */
-    private static class IdentityWeakReference<T> extends WeakReference<T> {
-        IdentityWeakReference(T o) {
-            this(o, null);
-        }
-
-        IdentityWeakReference(T o, ReferenceQueue<T> q) {
-            super(o, q);
-            this.hashCode = (o == null) ? 0 : System.identityHashCode(o);
-        }
-
-        public boolean equals(Object o) {
-            if (this == o)
-                return true;
-            if (!(o instanceof IdentityWeakReference<?>))
-                return false;
-            IdentityWeakReference<?> wr = (IdentityWeakReference<?>) o;
-            Object got = get();
-            return (got != null && got == wr.get());
-        }
-
-        public int hashCode() {
-            return hashCode;
-        }
-
-        private final int hashCode;
-    }
-
-    private Map<WeakReference<K>, V> map = newMap();
-    private ReferenceQueue<K> refQueue = new ReferenceQueue<K>();
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/mbeanserver/package.html b/ojluni/src/main/java/com/sun/jmx/mbeanserver/package.html
deleted file mode 100755
index d206899..0000000
--- a/ojluni/src/main/java/com/sun/jmx/mbeanserver/package.html
+++ /dev/null
@@ -1,33 +0,0 @@
-<html>
-<head>
-<title>jmx.mbeanserver package</title>
-<!--
-
-Copyright (c) 1999, 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.
--->
-</head>
-<body bgcolor="white">
-    Provides specific classes to <B>Sun JMX Reference Implementation</B>.
-</BODY>
-</HTML>
diff --git a/ojluni/src/main/java/com/sun/jmx/remote/internal/ArrayNotificationBuffer.java b/ojluni/src/main/java/com/sun/jmx/remote/internal/ArrayNotificationBuffer.java
deleted file mode 100755
index dd6dfb4..0000000
--- a/ojluni/src/main/java/com/sun/jmx/remote/internal/ArrayNotificationBuffer.java
+++ /dev/null
@@ -1,852 +0,0 @@
-/*
- * Copyright (c) 2003, 2013, 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.jmx.remote.internal;
-
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import java.security.PrivilegedActionException;
-import java.security.PrivilegedExceptionAction;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.management.InstanceNotFoundException;
-import javax.management.MBeanServer;
-import javax.management.MBeanServerDelegate;
-import javax.management.MBeanServerNotification;
-import javax.management.Notification;
-import javax.management.NotificationBroadcaster;
-import javax.management.NotificationFilter;
-import javax.management.NotificationFilterSupport;
-import javax.management.NotificationListener;
-import javax.management.ObjectName;
-import javax.management.QueryEval;
-import javax.management.QueryExp;
-
-import javax.management.remote.NotificationResult;
-import javax.management.remote.TargetedNotification;
-
-import com.sun.jmx.remote.util.EnvHelp;
-import com.sun.jmx.remote.util.ClassLogger;
-
-/** A circular buffer of notifications received from an MBean server. */
-/*
-  There is one instance of ArrayNotificationBuffer for every
-  MBeanServer object that has an attached ConnectorServer.  Then, for
-  every ConnectorServer attached to a given MBeanServer, there is an
-  instance of the inner class ShareBuffer.  So for example with two
-  ConnectorServers it looks like this:
-
-  ConnectorServer1 -> ShareBuffer1 -\
-                                     }-> ArrayNotificationBuffer
-  ConnectorServer2 -> ShareBuffer2 -/              |
-                                                   |
-                                                   v
-                                              MBeanServer
-
-  The ArrayNotificationBuffer has a circular buffer of
-  NamedNotification objects.  Each ConnectorServer defines a
-  notification buffer size, and this size is recorded by the
-  corresponding ShareBuffer.  The buffer size of the
-  ArrayNotificationBuffer is the maximum of all of its ShareBuffers.
-  When a ShareBuffer is added or removed, the ArrayNotificationBuffer
-  size is adjusted accordingly.
-
-  An ArrayNotificationBuffer also has a BufferListener (which is a
-  NotificationListener) registered on every NotificationBroadcaster
-  MBean in the MBeanServer to which it is attached.  The cost of this
-  potentially large set of listeners is the principal motivation for
-  sharing the ArrayNotificationBuffer between ConnectorServers, and
-  also the reason that we are careful to discard the
-  ArrayNotificationBuffer (and its BufferListeners) when there are no
-  longer any ConnectorServers using it.
-
-  The synchronization of this class is inherently complex.  In an attempt
-  to limit the complexity, we use just two locks:
-
-  - globalLock controls access to the mapping between an MBeanServer
-    and its ArrayNotificationBuffer and to the set of ShareBuffers for
-    each ArrayNotificationBuffer.
-
-  - the instance lock of each ArrayNotificationBuffer controls access
-    to the array of notifications, including its size, and to the
-    dispose flag of the ArrayNotificationBuffer.  The wait/notify
-    mechanism is used to indicate changes to the array.
-
-  If both locks are held at the same time, the globalLock must be
-  taken first.
-
-  Since adding or removing a BufferListener to an MBean can involve
-  calling user code, we are careful not to hold any locks while it is
-  done.
- */
-public class ArrayNotificationBuffer implements NotificationBuffer {
-    private boolean disposed = false;
-
-    // FACTORY STUFF, INCLUDING SHARING
-
-    private static final Object globalLock = new Object();
-    private static final
-        HashMap<MBeanServer,ArrayNotificationBuffer> mbsToBuffer =
-        new HashMap<MBeanServer,ArrayNotificationBuffer>(1);
-    private final Collection<ShareBuffer> sharers = new HashSet<ShareBuffer>(1);
-
-    public static NotificationBuffer getNotificationBuffer(
-            MBeanServer mbs, Map<String, ?> env) {
-
-        if (env == null)
-            env = Collections.emptyMap();
-
-        //Find out queue size
-        int queueSize = EnvHelp.getNotifBufferSize(env);
-
-        ArrayNotificationBuffer buf;
-        boolean create;
-        NotificationBuffer sharer;
-        synchronized (globalLock) {
-            buf = mbsToBuffer.get(mbs);
-            create = (buf == null);
-            if (create) {
-                buf = new ArrayNotificationBuffer(mbs, queueSize);
-                mbsToBuffer.put(mbs, buf);
-            }
-            sharer = buf.new ShareBuffer(queueSize);
-        }
-        /* We avoid holding any locks while calling createListeners.
-         * This prevents possible deadlocks involving user code, but
-         * does mean that a second ConnectorServer created and started
-         * in this window will return before all the listeners are ready,
-         * which could lead to surprising behaviour.  The alternative
-         * would be to block the second ConnectorServer until the first
-         * one has finished adding all the listeners, but that would then
-         * be subject to deadlock.
-         */
-        if (create)
-            buf.createListeners();
-        return sharer;
-    }
-
-    /* Ensure that this buffer is no longer the one that will be returned by
-     * getNotificationBuffer.  This method is idempotent - calling it more
-     * than once has no effect beyond that of calling it once.
-     */
-    static void removeNotificationBuffer(MBeanServer mbs) {
-        synchronized (globalLock) {
-            mbsToBuffer.remove(mbs);
-        }
-    }
-
-    void addSharer(ShareBuffer sharer) {
-        synchronized (globalLock) {
-            synchronized (this) {
-                if (sharer.getSize() > queueSize)
-                    resize(sharer.getSize());
-            }
-            sharers.add(sharer);
-        }
-    }
-
-    private void removeSharer(ShareBuffer sharer) {
-        boolean empty;
-        synchronized (globalLock) {
-            sharers.remove(sharer);
-            empty = sharers.isEmpty();
-            if (empty)
-                removeNotificationBuffer(mBeanServer);
-            else {
-                int max = 0;
-                for (ShareBuffer buf : sharers) {
-                    int bufsize = buf.getSize();
-                    if (bufsize > max)
-                        max = bufsize;
-                }
-                if (max < queueSize)
-                    resize(max);
-            }
-        }
-        if (empty) {
-            synchronized (this) {
-                disposed = true;
-                // Notify potential waiting fetchNotification call
-                notifyAll();
-            }
-            destroyListeners();
-        }
-    }
-
-    private synchronized void resize(int newSize) {
-        if (newSize == queueSize)
-            return;
-        while (queue.size() > newSize)
-            dropNotification();
-        queue.resize(newSize);
-        queueSize = newSize;
-    }
-
-    private class ShareBuffer implements NotificationBuffer {
-        ShareBuffer(int size) {
-            this.size = size;
-            addSharer(this);
-        }
-
-        public NotificationResult
-            fetchNotifications(NotificationBufferFilter filter,
-                               long startSequenceNumber,
-                               long timeout,
-                               int maxNotifications)
-                throws InterruptedException {
-            NotificationBuffer buf = ArrayNotificationBuffer.this;
-            return buf.fetchNotifications(filter, startSequenceNumber,
-                                          timeout, maxNotifications);
-        }
-
-        public void dispose() {
-            ArrayNotificationBuffer.this.removeSharer(this);
-        }
-
-        int getSize() {
-            return size;
-        }
-
-        private final int size;
-    }
-
-
-    // ARRAYNOTIFICATIONBUFFER IMPLEMENTATION
-
-    private ArrayNotificationBuffer(MBeanServer mbs, int queueSize) {
-        if (logger.traceOn())
-            logger.trace("Constructor", "queueSize=" + queueSize);
-
-        if (mbs == null || queueSize < 1)
-            throw new IllegalArgumentException("Bad args");
-
-        this.mBeanServer = mbs;
-        this.queueSize = queueSize;
-        this.queue = new ArrayQueue<NamedNotification>(queueSize);
-        this.earliestSequenceNumber = System.currentTimeMillis();
-        this.nextSequenceNumber = this.earliestSequenceNumber;
-
-        logger.trace("Constructor", "ends");
-    }
-
-    private synchronized boolean isDisposed() {
-        return disposed;
-    }
-
-    // We no longer support calling this method from outside.
-    // The JDK doesn't contain any such calls and users are not
-    // supposed to be accessing this class.
-    public void dispose() {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * <p>Fetch notifications that match the given listeners.</p>
-     *
-     * <p>The operation only considers notifications with a sequence
-     * number at least <code>startSequenceNumber</code>.  It will take
-     * no longer than <code>timeout</code>, and will return no more
-     * than <code>maxNotifications</code> different notifications.</p>
-     *
-     * <p>If there are no notifications matching the criteria, the
-     * operation will block until one arrives, subject to the
-     * timeout.</p>
-     *
-     * @param filter an object that will add notifications to a
-     * {@code List<TargetedNotification>} if they match the current
-     * listeners with their filters.
-     * @param startSequenceNumber the first sequence number to
-     * consider.
-     * @param timeout the maximum time to wait.  May be 0 to indicate
-     * not to wait if there are no notifications.
-     * @param maxNotifications the maximum number of notifications to
-     * return.  May be 0 to indicate a wait for eligible notifications
-     * that will return a usable <code>nextSequenceNumber</code>.  The
-     * {@link TargetedNotification} array in the returned {@link
-     * NotificationResult} may contain more than this number of
-     * elements but will not contain more than this number of
-     * different notifications.
-     */
-    public NotificationResult
-        fetchNotifications(NotificationBufferFilter filter,
-                           long startSequenceNumber,
-                           long timeout,
-                           int maxNotifications)
-            throws InterruptedException {
-
-        logger.trace("fetchNotifications", "starts");
-
-        if (startSequenceNumber < 0 || isDisposed()) {
-            synchronized(this) {
-                return new NotificationResult(earliestSequenceNumber(),
-                                              nextSequenceNumber(),
-                                              new TargetedNotification[0]);
-            }
-        }
-
-        // Check arg validity
-        if (filter == null
-            || startSequenceNumber < 0 || timeout < 0
-            || maxNotifications < 0) {
-            logger.trace("fetchNotifications", "Bad args");
-            throw new IllegalArgumentException("Bad args to fetch");
-        }
-
-        if (logger.debugOn()) {
-            logger.trace("fetchNotifications",
-                  "filter=" + filter + "; startSeq=" +
-                  startSequenceNumber + "; timeout=" + timeout +
-                  "; max=" + maxNotifications);
-        }
-
-        if (startSequenceNumber > nextSequenceNumber()) {
-            final String msg = "Start sequence number too big: " +
-                startSequenceNumber + " > " + nextSequenceNumber();
-            logger.trace("fetchNotifications", msg);
-            throw new IllegalArgumentException(msg);
-        }
-
-        /* Determine the end time corresponding to the timeout value.
-           Caller may legitimately supply Long.MAX_VALUE to indicate no
-           timeout.  In that case the addition will overflow and produce
-           a negative end time.  Set end time to Long.MAX_VALUE in that
-           case.  We assume System.currentTimeMillis() is positive.  */
-        long endTime = System.currentTimeMillis() + timeout;
-        if (endTime < 0) // overflow
-            endTime = Long.MAX_VALUE;
-
-        if (logger.debugOn())
-            logger.debug("fetchNotifications", "endTime=" + endTime);
-
-        /* We set earliestSeq the first time through the loop.  If we
-           set it here, notifications could be dropped before we
-           started examining them, so earliestSeq might not correspond
-           to the earliest notification we examined.  */
-        long earliestSeq = -1;
-        long nextSeq = startSequenceNumber;
-        List<TargetedNotification> notifs =
-            new ArrayList<TargetedNotification>();
-
-        /* On exit from this loop, notifs, earliestSeq, and nextSeq must
-           all be correct values for the returned NotificationResult.  */
-        while (true) {
-            logger.debug("fetchNotifications", "main loop starts");
-
-            NamedNotification candidate;
-
-            /* Get the next available notification regardless of filters,
-               or wait for one to arrive if there is none.  */
-            synchronized (this) {
-
-                /* First time through.  The current earliestSequenceNumber
-                   is the first one we could have examined.  */
-                if (earliestSeq < 0) {
-                    earliestSeq = earliestSequenceNumber();
-                    if (logger.debugOn()) {
-                        logger.debug("fetchNotifications",
-                              "earliestSeq=" + earliestSeq);
-                    }
-                    if (nextSeq < earliestSeq) {
-                        nextSeq = earliestSeq;
-                        logger.debug("fetchNotifications",
-                                     "nextSeq=earliestSeq");
-                    }
-                } else
-                    earliestSeq = earliestSequenceNumber();
-
-                /* If many notifications have been dropped since the
-                   last time through, nextSeq could now be earlier
-                   than the current earliest.  If so, notifications
-                   may have been lost and we return now so the caller
-                   can see this next time it calls.  */
-                if (nextSeq < earliestSeq) {
-                    logger.trace("fetchNotifications",
-                          "nextSeq=" + nextSeq + " < " + "earliestSeq=" +
-                          earliestSeq + " so may have lost notifs");
-                    break;
-                }
-
-                if (nextSeq < nextSequenceNumber()) {
-                    candidate = notificationAt(nextSeq);
-                    // Skip security check if NotificationBufferFilter is not overloaded
-                    if (!(filter instanceof ServerNotifForwarder.NotifForwarderBufferFilter)) {
-                        try {
-                            ServerNotifForwarder.checkMBeanPermission(this.mBeanServer,
-                                                      candidate.getObjectName(),"addNotificationListener");
-                        } catch (InstanceNotFoundException | SecurityException e) {
-                            if (logger.debugOn()) {
-                                logger.debug("fetchNotifications", "candidate: " + candidate + " skipped. exception " + e);
-                            }
-                            ++nextSeq;
-                            continue;
-                        }
-                    }
-
-                    if (logger.debugOn()) {
-                        logger.debug("fetchNotifications", "candidate: " +
-                                     candidate);
-                        logger.debug("fetchNotifications", "nextSeq now " +
-                                     nextSeq);
-                    }
-                } else {
-                    /* nextSeq is the largest sequence number.  If we
-                       already got notifications, return them now.
-                       Otherwise wait for some to arrive, with
-                       timeout.  */
-                    if (notifs.size() > 0) {
-                        logger.debug("fetchNotifications",
-                              "no more notifs but have some so don't wait");
-                        break;
-                    }
-                    long toWait = endTime - System.currentTimeMillis();
-                    if (toWait <= 0) {
-                        logger.debug("fetchNotifications", "timeout");
-                        break;
-                    }
-
-                    /* dispose called */
-                    if (isDisposed()) {
-                        if (logger.debugOn())
-                            logger.debug("fetchNotifications",
-                                         "dispose callled, no wait");
-                        return new NotificationResult(earliestSequenceNumber(),
-                                                  nextSequenceNumber(),
-                                                  new TargetedNotification[0]);
-                    }
-
-                    if (logger.debugOn())
-                        logger.debug("fetchNotifications",
-                                     "wait(" + toWait + ")");
-                    wait(toWait);
-
-                    continue;
-                }
-            }
-
-            /* We have a candidate notification.  See if it matches
-               our filters.  We do this outside the synchronized block
-               so we don't hold up everyone accessing the buffer
-               (including notification senders) while we evaluate
-               potentially slow filters.  */
-            ObjectName name = candidate.getObjectName();
-            Notification notif = candidate.getNotification();
-            List<TargetedNotification> matchedNotifs =
-                new ArrayList<TargetedNotification>();
-            logger.debug("fetchNotifications",
-                         "applying filter to candidate");
-            filter.apply(matchedNotifs, name, notif);
-
-            if (matchedNotifs.size() > 0) {
-                /* We only check the max size now, so that our
-                   returned nextSeq is as large as possible.  This
-                   prevents the caller from thinking it missed
-                   interesting notifications when in fact we knew they
-                   weren't.  */
-                if (maxNotifications <= 0) {
-                    logger.debug("fetchNotifications",
-                                 "reached maxNotifications");
-                    break;
-                }
-                --maxNotifications;
-                if (logger.debugOn())
-                    logger.debug("fetchNotifications", "add: " +
-                                 matchedNotifs);
-                notifs.addAll(matchedNotifs);
-            }
-
-            ++nextSeq;
-        } // end while
-
-        /* Construct and return the result.  */
-        int nnotifs = notifs.size();
-        TargetedNotification[] resultNotifs =
-            new TargetedNotification[nnotifs];
-        notifs.toArray(resultNotifs);
-        NotificationResult nr =
-            new NotificationResult(earliestSeq, nextSeq, resultNotifs);
-        if (logger.debugOn())
-            logger.debug("fetchNotifications", nr.toString());
-        logger.trace("fetchNotifications", "ends");
-
-        return nr;
-    }
-
-    synchronized long earliestSequenceNumber() {
-        return earliestSequenceNumber;
-    }
-
-    synchronized long nextSequenceNumber() {
-        return nextSequenceNumber;
-    }
-
-    synchronized void addNotification(NamedNotification notif) {
-        if (logger.traceOn())
-            logger.trace("addNotification", notif.toString());
-
-        while (queue.size() >= queueSize) {
-            dropNotification();
-            if (logger.debugOn()) {
-                logger.debug("addNotification",
-                      "dropped oldest notif, earliestSeq=" +
-                      earliestSequenceNumber);
-            }
-        }
-        queue.add(notif);
-        nextSequenceNumber++;
-        if (logger.debugOn())
-            logger.debug("addNotification", "nextSeq=" + nextSequenceNumber);
-        notifyAll();
-    }
-
-    private void dropNotification() {
-        queue.remove(0);
-        earliestSequenceNumber++;
-    }
-
-    synchronized NamedNotification notificationAt(long seqNo) {
-        long index = seqNo - earliestSequenceNumber;
-        if (index < 0 || index > Integer.MAX_VALUE) {
-            final String msg = "Bad sequence number: " + seqNo + " (earliest "
-                + earliestSequenceNumber + ")";
-            logger.trace("notificationAt", msg);
-            throw new IllegalArgumentException(msg);
-        }
-        return queue.get((int) index);
-    }
-
-    private static class NamedNotification {
-        NamedNotification(ObjectName sender, Notification notif) {
-            this.sender = sender;
-            this.notification = notif;
-        }
-
-        ObjectName getObjectName() {
-            return sender;
-        }
-
-        Notification getNotification() {
-            return notification;
-        }
-
-        public String toString() {
-            return "NamedNotification(" + sender + ", " + notification + ")";
-        }
-
-        private final ObjectName sender;
-        private final Notification notification;
-    }
-
-    /*
-     * Add our listener to every NotificationBroadcaster MBean
-     * currently in the MBean server and to every
-     * NotificationBroadcaster later created.
-     *
-     * It would be really nice if we could just do
-     * mbs.addNotificationListener(new ObjectName("*:*"), ...);
-     * Definitely something for the next version of JMX.
-     *
-     * There is a nasty race condition that we must handle.  We
-     * first register for MBean-creation notifications so we can add
-     * listeners to new MBeans, then we query the existing MBeans to
-     * add listeners to them.  The problem is that a new MBean could
-     * arrive after we register for creations but before the query has
-     * completed.  Then we could see the MBean both in the query and
-     * in an MBean-creation notification, and we would end up
-     * registering our listener twice.
-     *
-     * To solve this problem, we arrange for new MBeans that arrive
-     * while the query is being done to be added to the Set createdDuringQuery
-     * and we do not add a listener immediately.  When the query is done,
-     * we atomically turn off the addition of new names to createdDuringQuery
-     * and add all the names that were there to the result of the query.
-     * Since we are dealing with Sets, the result is the same whether or not
-     * the newly-created MBean was included in the query result.
-     *
-     * It is important not to hold any locks during the operation of adding
-     * listeners to MBeans.  An MBean's addNotificationListener can be
-     * arbitrary user code, and this could deadlock with any locks we hold
-     * (see bug 6239400).  The corollary is that we must not do any operations
-     * in this method or the methods it calls that require locks.
-     */
-    private void createListeners() {
-        logger.debug("createListeners", "starts");
-
-        synchronized (this) {
-            createdDuringQuery = new HashSet<ObjectName>();
-        }
-
-        try {
-            addNotificationListener(MBeanServerDelegate.DELEGATE_NAME,
-                                    creationListener, creationFilter, null);
-            logger.debug("createListeners", "added creationListener");
-        } catch (Exception e) {
-            final String msg = "Can't add listener to MBean server delegate: ";
-            RuntimeException re = new IllegalArgumentException(msg + e);
-            EnvHelp.initCause(re, e);
-            logger.fine("createListeners", msg + e);
-            logger.debug("createListeners", e);
-            throw re;
-        }
-
-        /* Spec doesn't say whether Set returned by QueryNames can be modified
-           so we clone it. */
-        Set<ObjectName> names = queryNames(null, broadcasterQuery);
-        names = new HashSet<ObjectName>(names);
-
-        synchronized (this) {
-            names.addAll(createdDuringQuery);
-            createdDuringQuery = null;
-        }
-
-        for (ObjectName name : names)
-            addBufferListener(name);
-        logger.debug("createListeners", "ends");
-    }
-
-    private void addBufferListener(ObjectName name) {
-        checkNoLocks();
-        if (logger.debugOn())
-            logger.debug("addBufferListener", name.toString());
-        try {
-            addNotificationListener(name, bufferListener, null, name);
-        } catch (Exception e) {
-            logger.trace("addBufferListener", e);
-            /* This can happen if the MBean was unregistered just
-               after the query.  Or user NotificationBroadcaster might
-               throw unexpected exception.  */
-        }
-    }
-
-    private void removeBufferListener(ObjectName name) {
-        checkNoLocks();
-        if (logger.debugOn())
-            logger.debug("removeBufferListener", name.toString());
-        try {
-            removeNotificationListener(name, bufferListener);
-        } catch (Exception e) {
-            logger.trace("removeBufferListener", e);
-        }
-    }
-
-    private void addNotificationListener(final ObjectName name,
-                                         final NotificationListener listener,
-                                         final NotificationFilter filter,
-                                         final Object handback)
-            throws Exception {
-        try {
-            AccessController.doPrivileged(new PrivilegedExceptionAction<Void>() {
-                public Void run() throws InstanceNotFoundException {
-                    mBeanServer.addNotificationListener(name,
-                                                        listener,
-                                                        filter,
-                                                        handback);
-                    return null;
-                }
-            });
-        } catch (Exception e) {
-            throw extractException(e);
-        }
-    }
-
-    private void removeNotificationListener(final ObjectName name,
-                                            final NotificationListener listener)
-            throws Exception {
-        try {
-            AccessController.doPrivileged(new PrivilegedExceptionAction<Void>() {
-                public Void run() throws Exception {
-                    mBeanServer.removeNotificationListener(name, listener);
-                    return null;
-                }
-            });
-        } catch (Exception e) {
-            throw extractException(e);
-        }
-    }
-
-    private Set<ObjectName> queryNames(final ObjectName name,
-                                       final QueryExp query) {
-        PrivilegedAction<Set<ObjectName>> act =
-            new PrivilegedAction<Set<ObjectName>>() {
-                public Set<ObjectName> run() {
-                    return mBeanServer.queryNames(name, query);
-                }
-            };
-        try {
-            return AccessController.doPrivileged(act);
-        } catch (RuntimeException e) {
-            logger.fine("queryNames", "Failed to query names: " + e);
-            logger.debug("queryNames", e);
-            throw e;
-        }
-    }
-
-    private static boolean isInstanceOf(final MBeanServer mbs,
-                                        final ObjectName name,
-                                        final String className) {
-        PrivilegedExceptionAction<Boolean> act =
-            new PrivilegedExceptionAction<Boolean>() {
-                public Boolean run() throws InstanceNotFoundException {
-                    return mbs.isInstanceOf(name, className);
-                }
-            };
-        try {
-            return AccessController.doPrivileged(act);
-        } catch (Exception e) {
-            logger.fine("isInstanceOf", "failed: " + e);
-            logger.debug("isInstanceOf", e);
-            return false;
-        }
-    }
-
-    /* This method must not be synchronized.  See the comment on the
-     * createListeners method.
-     *
-     * The notification could arrive after our buffer has been destroyed
-     * or even during its destruction.  So we always add our listener
-     * (without synchronization), then we check if the buffer has been
-     * destroyed and if so remove the listener we just added.
-     */
-    private void createdNotification(MBeanServerNotification n) {
-        final String shouldEqual =
-            MBeanServerNotification.REGISTRATION_NOTIFICATION;
-        if (!n.getType().equals(shouldEqual)) {
-            logger.warning("createNotification", "bad type: " + n.getType());
-            return;
-        }
-
-        ObjectName name = n.getMBeanName();
-        if (logger.debugOn())
-            logger.debug("createdNotification", "for: " + name);
-
-        synchronized (this) {
-            if (createdDuringQuery != null) {
-                createdDuringQuery.add(name);
-                return;
-            }
-        }
-
-        if (isInstanceOf(mBeanServer, name, broadcasterClass)) {
-            addBufferListener(name);
-            if (isDisposed())
-                removeBufferListener(name);
-        }
-    }
-
-    private class BufferListener implements NotificationListener {
-        public void handleNotification(Notification notif, Object handback) {
-            if (logger.debugOn()) {
-                logger.debug("BufferListener.handleNotification",
-                      "notif=" + notif + "; handback=" + handback);
-            }
-            ObjectName name = (ObjectName) handback;
-            addNotification(new NamedNotification(name, notif));
-        }
-    }
-
-    private final NotificationListener bufferListener = new BufferListener();
-
-    private static class BroadcasterQuery
-            extends QueryEval implements QueryExp {
-        private static final long serialVersionUID = 7378487660587592048L;
-
-        public boolean apply(final ObjectName name) {
-            final MBeanServer mbs = QueryEval.getMBeanServer();
-            return isInstanceOf(mbs, name, broadcasterClass);
-        }
-    }
-    private static final QueryExp broadcasterQuery = new BroadcasterQuery();
-
-    private static final NotificationFilter creationFilter;
-    static {
-        NotificationFilterSupport nfs = new NotificationFilterSupport();
-        nfs.enableType(MBeanServerNotification.REGISTRATION_NOTIFICATION);
-        creationFilter = nfs;
-    }
-
-    private final NotificationListener creationListener =
-        new NotificationListener() {
-            public void handleNotification(Notification notif,
-                                           Object handback) {
-                logger.debug("creationListener", "handleNotification called");
-                createdNotification((MBeanServerNotification) notif);
-            }
-        };
-
-    private void destroyListeners() {
-        checkNoLocks();
-        logger.debug("destroyListeners", "starts");
-        try {
-            removeNotificationListener(MBeanServerDelegate.DELEGATE_NAME,
-                                       creationListener);
-        } catch (Exception e) {
-            logger.warning("remove listener from MBeanServer delegate", e);
-        }
-        Set<ObjectName> names = queryNames(null, broadcasterQuery);
-        for (final ObjectName name : names) {
-            if (logger.debugOn())
-                logger.debug("destroyListeners",
-                             "remove listener from " + name);
-            removeBufferListener(name);
-        }
-        logger.debug("destroyListeners", "ends");
-    }
-
-    private void checkNoLocks() {
-        if (Thread.holdsLock(this) || Thread.holdsLock(globalLock))
-            logger.warning("checkNoLocks", "lock protocol violation");
-    }
-
-    /**
-     * Iterate until we extract the real exception
-     * from a stack of PrivilegedActionExceptions.
-     */
-    private static Exception extractException(Exception e) {
-        while (e instanceof PrivilegedActionException) {
-            e = ((PrivilegedActionException)e).getException();
-        }
-        return e;
-    }
-
-    private static final ClassLogger logger =
-        new ClassLogger("javax.management.remote.misc",
-                        "ArrayNotificationBuffer");
-
-    private final MBeanServer mBeanServer;
-    private final ArrayQueue<NamedNotification> queue;
-    private int queueSize;
-    private long earliestSequenceNumber;
-    private long nextSequenceNumber;
-    private Set<ObjectName> createdDuringQuery;
-
-    static final String broadcasterClass =
-        NotificationBroadcaster.class.getName();
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/remote/internal/ArrayQueue.java b/ojluni/src/main/java/com/sun/jmx/remote/internal/ArrayQueue.java
deleted file mode 100755
index 7dbb191..0000000
--- a/ojluni/src/main/java/com/sun/jmx/remote/internal/ArrayQueue.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Copyright (c) 2003, 2006, 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.jmx.remote.internal;
-
-import java.util.AbstractList;
-import java.util.Iterator;
-
-public class ArrayQueue<T> extends AbstractList<T> {
-    public ArrayQueue(int capacity) {
-        this.capacity = capacity + 1;
-        this.queue = newArray(capacity + 1);
-        this.head = 0;
-        this.tail = 0;
-    }
-
-    public void resize(int newcapacity) {
-        int size = size();
-        if (newcapacity < size)
-            throw new IndexOutOfBoundsException("Resizing would lose data");
-        newcapacity++;
-        if (newcapacity == this.capacity)
-            return;
-        T[] newqueue = newArray(newcapacity);
-        for (int i = 0; i < size; i++)
-            newqueue[i] = get(i);
-        this.capacity = newcapacity;
-        this.queue = newqueue;
-        this.head = 0;
-        this.tail = size;
-    }
-
-    @SuppressWarnings("unchecked")
-    private T[] newArray(int size) {
-        return (T[]) new Object[size];
-    }
-
-    public boolean add(T o) {
-        queue[tail] = o;
-        int newtail = (tail + 1) % capacity;
-        if (newtail == head)
-            throw new IndexOutOfBoundsException("Queue full");
-        tail = newtail;
-        return true; // we did add something
-    }
-
-    public T remove(int i) {
-        if (i != 0)
-            throw new IllegalArgumentException("Can only remove head of queue");
-        if (head == tail)
-            throw new IndexOutOfBoundsException("Queue empty");
-        T removed = queue[head];
-        queue[head] = null;
-        head = (head + 1) % capacity;
-        return removed;
-    }
-
-    public T get(int i) {
-        int size = size();
-        if (i < 0 || i >= size) {
-            final String msg = "Index " + i + ", queue size " + size;
-            throw new IndexOutOfBoundsException(msg);
-        }
-        int index = (head + i) % capacity;
-        return queue[index];
-    }
-
-    public int size() {
-        // Can't use % here because it's not mod: -3 % 2 is -1, not +1.
-        int diff = tail - head;
-        if (diff < 0)
-            diff += capacity;
-        return diff;
-    }
-
-    private int capacity;
-    private T[] queue;
-    private int head;
-    private int tail;
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/remote/internal/ClientCommunicatorAdmin.java b/ojluni/src/main/java/com/sun/jmx/remote/internal/ClientCommunicatorAdmin.java
deleted file mode 100755
index 67d6d44..0000000
--- a/ojluni/src/main/java/com/sun/jmx/remote/internal/ClientCommunicatorAdmin.java
+++ /dev/null
@@ -1,252 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-package com.sun.jmx.remote.internal;
-
-import java.io.IOException;
-import java.io.InterruptedIOException;
-
-import com.sun.jmx.remote.util.ClassLogger;
-import com.sun.jmx.remote.util.EnvHelp;
-
-public abstract class ClientCommunicatorAdmin {
-    private static volatile long threadNo = 1;
-
-    public ClientCommunicatorAdmin(long period) {
-        this.period = period;
-
-        if (period > 0) {
-            checker = new Checker();
-
-            Thread t = new Thread(checker, "JMX client heartbeat " + ++threadNo);
-            t.setDaemon(true);
-            t.start();
-        } else
-            checker = null;
-    }
-
-    /**
-     * Called by a client to inform of getting an IOException.
-     */
-    public void gotIOException (IOException ioe) throws IOException {
-        restart(ioe);
-    }
-
-    /**
-     * Called by this class to check a client connection.
-     */
-    protected abstract void checkConnection() throws IOException;
-
-    /**
-     * Tells a client to re-start again.
-     */
-    protected abstract void doStart() throws IOException;
-
-    /**
-     * Tells a client to stop because failing to call checkConnection.
-     */
-    protected abstract void doStop();
-
-    /**
-     * Terminates this object.
-     */
-    public void terminate() {
-        synchronized(lock) {
-            if (state == TERMINATED) {
-                return;
-            }
-
-            state = TERMINATED;
-
-            lock.notifyAll();
-
-            if (checker != null)
-                checker.stop();
-        }
-    }
-
-    private void restart(IOException ioe) throws IOException {
-        // check state
-        synchronized(lock) {
-            if (state == TERMINATED) {
-                throw new IOException("The client has been closed.");
-            } else if (state == FAILED) { // already failed to re-start by another thread
-                throw ioe;
-            } else if (state == RE_CONNECTING) {
-                // restart process has been called by another thread
-                // we need to wait
-                while(state == RE_CONNECTING) {
-                    try {
-                        lock.wait();
-                    } catch (InterruptedException ire) {
-                        // be asked to give up
-                        InterruptedIOException iioe = new InterruptedIOException(ire.toString());
-                        EnvHelp.initCause(iioe, ire);
-
-                        throw iioe;
-                    }
-                }
-
-                if (state == TERMINATED) {
-                    throw new IOException("The client has been closed.");
-                } else if (state != CONNECTED) {
-                    // restarted is failed by another thread
-                    throw ioe;
-                }
-            } else {
-                state = RE_CONNECTING;
-                lock.notifyAll();
-            }
-        }
-
-        // re-starting
-        try {
-            doStart();
-            synchronized(lock) {
-                if (state == TERMINATED) {
-                    throw new IOException("The client has been closed.");
-                }
-
-                state = CONNECTED;
-
-                lock.notifyAll();
-            }
-
-            return;
-        } catch (Exception e) {
-            logger.warning("restart", "Failed to restart: " + e);
-            logger.debug("restart",e);
-
-            synchronized(lock) {
-                if (state == TERMINATED) {
-                    throw new IOException("The client has been closed.");
-                }
-
-                state = FAILED;
-
-                lock.notifyAll();
-            }
-
-            try {
-                doStop();
-            } catch (Exception eee) {
-                // OK.
-                // We know there is a problem.
-            }
-
-            terminate();
-
-            throw ioe;
-        }
-    }
-
-// --------------------------------------------------------------
-// private varaibles
-// --------------------------------------------------------------
-    private class Checker implements Runnable {
-        public void run() {
-            myThread = Thread.currentThread();
-
-            while (state != TERMINATED && !myThread.isInterrupted()) {
-                try {
-                    Thread.sleep(period);
-                } catch (InterruptedException ire) {
-                    // OK.
-                    // We will check the state at the following steps
-                }
-
-                if (state == TERMINATED || myThread.isInterrupted()) {
-                    break;
-                }
-
-                try {
-                    checkConnection();
-                } catch (Exception e) {
-                    synchronized(lock) {
-                        if (state == TERMINATED || myThread.isInterrupted()) {
-                            break;
-                        }
-                    }
-
-                    e = (Exception)EnvHelp.getCause(e);
-
-                    if (e instanceof IOException &&
-                        !(e instanceof InterruptedIOException)) {
-                        try {
-                            restart((IOException)e);
-                        } catch (Exception ee) {
-                            logger.warning("Checker-run",
-                                           "Failed to check connection: "+ e);
-                            logger.warning("Checker-run", "stopping");
-                            logger.debug("Checker-run",e);
-
-                            break;
-                        }
-                    } else {
-                        logger.warning("Checker-run",
-                                     "Failed to check the connection: " + e);
-                        logger.debug("Checker-run",e);
-
-                        // XXX stop checking?
-
-                        break;
-                    }
-                }
-            }
-
-            if (logger.traceOn()) {
-                logger.trace("Checker-run", "Finished.");
-            }
-        }
-
-        private void stop() {
-            if (myThread != null && myThread != Thread.currentThread()) {
-                myThread.interrupt();
-            }
-        }
-
-        private Thread myThread;
-    }
-
-// --------------------------------------------------------------
-// private variables
-// --------------------------------------------------------------
-    private final Checker checker;
-    private long period;
-
-    // state
-    private final static int CONNECTED = 0;
-    private final static int RE_CONNECTING = 1;
-    private final static int FAILED = 2;
-    private final static int TERMINATED = 3;
-
-    private int state = CONNECTED;
-
-    private final int[] lock = new int[0];
-
-    private static final ClassLogger logger =
-        new ClassLogger("javax.management.remote.misc",
-                        "ClientCommunicatorAdmin");
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/remote/internal/ClientListenerInfo.java b/ojluni/src/main/java/com/sun/jmx/remote/internal/ClientListenerInfo.java
deleted file mode 100755
index a1ab5db..0000000
--- a/ojluni/src/main/java/com/sun/jmx/remote/internal/ClientListenerInfo.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Copyright (c) 2003, 2006, 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.jmx.remote.internal;
-
-import javax.management.NotificationFilter;
-import javax.management.NotificationListener;
-import javax.management.ObjectName;
-
-import javax.security.auth.Subject;
-
-
-/**
- * <p>An identified listener.  A listener has an Integer id that is
- * unique per connector server.  It selects notifications based on the
- * ObjectName of the originator and an optional
- * NotificationFilter.</p>
- */
-public class ClientListenerInfo {
-    public ClientListenerInfo(Integer listenerID,
-                              ObjectName name,
-                              NotificationListener listener,
-                              NotificationFilter filter,
-                              Object handback,
-                              Subject delegationSubject) {
-        this.listenerID = listenerID;
-        this.name = name;
-        this.listener = listener;
-        this.filter = filter;
-        this.handback = handback;
-        this.delegationSubject = delegationSubject;
-    }
-
-    public ObjectName getObjectName() {
-        return name;
-    }
-
-    public Integer getListenerID() {
-        return listenerID;
-    }
-
-    public NotificationFilter getNotificationFilter() {
-        return filter;
-    }
-
-    public NotificationListener getListener() {
-        return listener;
-    }
-
-    public Object getHandback() {
-        return handback;
-    }
-
-    public Subject getDelegationSubject() {
-        return delegationSubject;
-    }
-
-
-    public boolean sameAs(ObjectName name) {
-        return (getObjectName().equals(name));
-    }
-
-
-    public boolean sameAs(ObjectName name, NotificationListener listener) {
-        return ( getObjectName().equals(name) &&
-                 getListener() == listener);
-    }
-
-
-    public boolean sameAs(ObjectName name, NotificationListener listener, NotificationFilter filter, Object handback) {
-        return ( getObjectName().equals(name) &&
-                 getListener() == listener &&
-                 getNotificationFilter() == filter &&
-                 getHandback() == handback);
-    }
-
-    private final ObjectName name;
-    private final Integer listenerID;
-    private final NotificationFilter filter;
-
-    private final NotificationListener listener;
-    private final Object handback;
-    private final Subject delegationSubject;
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/remote/internal/ClientNotifForwarder.java b/ojluni/src/main/java/com/sun/jmx/remote/internal/ClientNotifForwarder.java
deleted file mode 100755
index dfdf6b2..0000000
--- a/ojluni/src/main/java/com/sun/jmx/remote/internal/ClientNotifForwarder.java
+++ /dev/null
@@ -1,910 +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.
- */
-package com.sun.jmx.remote.internal;
-
-import java.io.IOException;
-import java.io.NotSerializableException;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.Executor;
-
-import java.security.AccessControlContext;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import javax.security.auth.Subject;
-
-import javax.management.Notification;
-import javax.management.NotificationListener;
-import javax.management.NotificationFilter;
-import javax.management.ObjectName;
-import javax.management.MBeanServerNotification;
-import javax.management.InstanceNotFoundException;
-import javax.management.ListenerNotFoundException;
-
-import javax.management.remote.NotificationResult;
-import javax.management.remote.TargetedNotification;
-
-import com.sun.jmx.remote.util.ClassLogger;
-import com.sun.jmx.remote.util.EnvHelp;
-
-
-public abstract class ClientNotifForwarder {
-
-    private final AccessControlContext acc;
-
-    public ClientNotifForwarder(Map env) {
-        this(null, env);
-    }
-
-    private static int threadId;
-
-    /* An Executor that allows at most one executing and one pending
-       Runnable.  It uses at most one thread -- as soon as there is
-       no pending Runnable the thread can exit.  Another thread is
-       created as soon as there is a new pending Runnable.  This
-       Executor is adapted for use in a situation where each Runnable
-       usually schedules up another Runnable.  On return from the
-       first one, the second one is immediately executed.  So this
-       just becomes a complicated way to write a while loop, but with
-       the advantage that you can replace it with another Executor,
-       for instance one that you are using to execute a bunch of other
-       unrelated work.
-
-       You might expect that a java.util.concurrent.ThreadPoolExecutor
-       with corePoolSize=0 and maximumPoolSize=1 would have the same
-       behavior, but it does not.  A ThreadPoolExecutor only creates
-       a new thread when a new task is submitted and the number of
-       existing threads is < corePoolSize.  This can never happen when
-       corePoolSize=0, so new threads are never created.  Surprising,
-       but there you are.
-    */
-    private static class LinearExecutor implements Executor {
-        public synchronized void execute(Runnable command) {
-            if (this.command != null)
-                throw new IllegalArgumentException("More than one command");
-            this.command = command;
-            if (thread == null) {
-                thread = new Thread() {
-
-                    @Override
-                    public void run() {
-                        while (true) {
-                            Runnable r;
-                            synchronized (LinearExecutor.this) {
-                                if (LinearExecutor.this.command == null) {
-                                    thread = null;
-                                    return;
-                                } else {
-                                    r = LinearExecutor.this.command;
-                                    LinearExecutor.this.command = null;
-                                }
-                            }
-                            r.run();
-                        }
-                    }
-                };
-                thread.setDaemon(true);
-                thread.setName("ClientNotifForwarder-" + ++threadId);
-                thread.start();
-            }
-        }
-
-        private Runnable command;
-        private Thread thread;
-    }
-
-    public ClientNotifForwarder(ClassLoader defaultClassLoader, Map<String, ?> env) {
-        maxNotifications = EnvHelp.getMaxFetchNotifNumber(env);
-        timeout = EnvHelp.getFetchTimeout(env);
-
-        /* You can supply an Executor in which the remote call to
-           fetchNotifications will be made.  The Executor's execute
-           method reschedules another task, so you must not use
-           an Executor that executes tasks in the caller's thread.  */
-        Executor ex = (Executor)
-            env.get("jmx.remote.x.fetch.notifications.executor");
-        if (ex == null)
-            ex = new LinearExecutor();
-        else if (logger.traceOn())
-            logger.trace("ClientNotifForwarder", "executor is " + ex);
-
-        this.defaultClassLoader = defaultClassLoader;
-        this.executor = ex;
-        this.acc = AccessController.getContext();
-    }
-
-    /**
-     * Called to to fetch notifications from a server.
-     */
-    abstract protected NotificationResult fetchNotifs(long clientSequenceNumber,
-                                                      int maxNotifications,
-                                                      long timeout)
-            throws IOException, ClassNotFoundException;
-
-    abstract protected Integer addListenerForMBeanRemovedNotif()
-        throws IOException, InstanceNotFoundException;
-
-    abstract protected void removeListenerForMBeanRemovedNotif(Integer id)
-        throws IOException, InstanceNotFoundException,
-               ListenerNotFoundException;
-
-    /**
-     * Used to send out a notification about lost notifs
-     */
-    abstract protected void lostNotifs(String message, long number);
-
-
-    public synchronized void addNotificationListener(Integer listenerID,
-                                        ObjectName name,
-                                        NotificationListener listener,
-                                        NotificationFilter filter,
-                                        Object handback,
-                                        Subject delegationSubject)
-            throws IOException, InstanceNotFoundException {
-
-        if (logger.traceOn()) {
-            logger.trace("addNotificationListener",
-                         "Add the listener "+listener+" at "+name);
-        }
-
-        infoList.put(listenerID,
-                     new ClientListenerInfo(listenerID,
-                                            name,
-                                            listener,
-                                            filter,
-                                            handback,
-                                            delegationSubject));
-
-
-        init(false);
-    }
-
-    public synchronized Integer[]
-        removeNotificationListener(ObjectName name,
-                                   NotificationListener listener)
-        throws ListenerNotFoundException, IOException {
-
-        beforeRemove();
-
-        if (logger.traceOn()) {
-            logger.trace("removeNotificationListener",
-                         "Remove the listener "+listener+" from "+name);
-        }
-
-        List<Integer> ids = new ArrayList<Integer>();
-        List<ClientListenerInfo> values =
-                new ArrayList<ClientListenerInfo>(infoList.values());
-        for (int i=values.size()-1; i>=0; i--) {
-            ClientListenerInfo li = values.get(i);
-
-            if (li.sameAs(name, listener)) {
-                ids.add(li.getListenerID());
-
-                infoList.remove(li.getListenerID());
-            }
-        }
-
-        if (ids.isEmpty())
-            throw new ListenerNotFoundException("Listener not found");
-
-        return ids.toArray(new Integer[0]);
-    }
-
-    public synchronized Integer
-        removeNotificationListener(ObjectName name,
-                                   NotificationListener listener,
-                                   NotificationFilter filter,
-                                   Object handback)
-            throws ListenerNotFoundException, IOException {
-
-        if (logger.traceOn()) {
-            logger.trace("removeNotificationListener",
-                         "Remove the listener "+listener+" from "+name);
-        }
-
-        beforeRemove();
-
-        Integer id = null;
-
-        List<ClientListenerInfo> values =
-                new ArrayList<ClientListenerInfo>(infoList.values());
-        for (int i=values.size()-1; i>=0; i--) {
-            ClientListenerInfo li = values.get(i);
-            if (li.sameAs(name, listener, filter, handback)) {
-                id=li.getListenerID();
-
-                infoList.remove(id);
-
-                break;
-            }
-        }
-
-        if (id == null)
-            throw new ListenerNotFoundException("Listener not found");
-
-        return id;
-    }
-
-    public synchronized Integer[] removeNotificationListener(ObjectName name) {
-        if (logger.traceOn()) {
-            logger.trace("removeNotificationListener",
-                         "Remove all listeners registered at "+name);
-        }
-
-        List<Integer> ids = new ArrayList<Integer>();
-
-        List<ClientListenerInfo> values =
-                new ArrayList<ClientListenerInfo>(infoList.values());
-        for (int i=values.size()-1; i>=0; i--) {
-            ClientListenerInfo li = values.get(i);
-            if (li.sameAs(name)) {
-                ids.add(li.getListenerID());
-
-                infoList.remove(li.getListenerID());
-            }
-        }
-
-        return ids.toArray(new Integer[0]);
-    }
-
-    /*
-     * Called when a connector is doing reconnection. Like <code>postReconnection</code>,
-     * this method is intended to be called only by a client connector:
-     * <code>RMIConnector</code> and <code>ClientIntermediary</code>.
-     * Call this method will set the flag beingReconnection to <code>true</code>,
-     * and the thread used to fetch notifis will be stopped, a new thread can be
-     * created only after the method <code>postReconnection</code> is called.
-     *
-     * It is caller's responsiblity to not re-call this method before calling
-     * <code>postReconnection</code>.
-     */
-    public synchronized ClientListenerInfo[] preReconnection() throws IOException {
-        if (state == TERMINATED || beingReconnected) { // should never
-            throw new IOException("Illegal state.");
-        }
-
-        final ClientListenerInfo[] tmp =
-            infoList.values().toArray(new ClientListenerInfo[0]);
-
-
-        beingReconnected = true;
-
-        infoList.clear();
-
-        return tmp;
-    }
-
-    /**
-     * Called after reconnection is finished.
-     * This method is intended to be called only by a client connector:
-     * <code>RMIConnector</code> and <code>ClientIntermediary</code>.
-     */
-    public synchronized void postReconnection(ClientListenerInfo[] listenerInfos)
-        throws IOException {
-
-        if (state == TERMINATED) {
-            return;
-        }
-
-        while (state == STOPPING) {
-            try {
-                wait();
-            } catch (InterruptedException ire) {
-                IOException ioe = new IOException(ire.toString());
-                EnvHelp.initCause(ioe, ire);
-                throw ioe;
-            }
-        }
-
-        final boolean trace = logger.traceOn();
-        final int len   = listenerInfos.length;
-
-        for (int i=0; i<len; i++) {
-            if (trace) {
-                logger.trace("addNotificationListeners",
-                             "Add a listener at "+
-                             listenerInfos[i].getListenerID());
-            }
-
-            infoList.put(listenerInfos[i].getListenerID(), listenerInfos[i]);
-        }
-
-        beingReconnected = false;
-        notifyAll();
-
-        if (currentFetchThread == Thread.currentThread() ||
-              state == STARTING || state == STARTED) { // doing or waiting reconnection
-              // only update mbeanRemovedNotifID
-            try {
-                mbeanRemovedNotifID = addListenerForMBeanRemovedNotif();
-            } catch (Exception e) {
-                final String msg =
-                    "Failed to register a listener to the mbean " +
-                    "server: the client will not do clean when an MBean " +
-                    "is unregistered";
-                if (logger.traceOn()) {
-                    logger.trace("init", msg, e);
-                }
-            }
-        } else {
-              while (state == STOPPING) {
-                  try {
-                      wait();
-                  } catch (InterruptedException ire) {
-                      IOException ioe = new IOException(ire.toString());
-                      EnvHelp.initCause(ioe, ire);
-                      throw ioe;
-                  }
-              }
-
-              if (listenerInfos.length > 0) { // old listeners are re-added
-                  init(true); // not update clientSequenceNumber
-              } else if (infoList.size() > 0) { // only new listeners added during reconnection
-                  init(false); // need update clientSequenceNumber
-              }
-          }
-    }
-
-    public synchronized void terminate() {
-        if (state == TERMINATED) {
-            return;
-        }
-
-        if (logger.traceOn()) {
-            logger.trace("terminate", "Terminating...");
-        }
-
-        if (state == STARTED) {
-           infoList.clear();
-        }
-
-        setState(TERMINATED);
-    }
-
-
-    // -------------------------------------------------
-    // private classes
-    // -------------------------------------------------
-    //
-
-    private class NotifFetcher implements Runnable {
-
-        private volatile boolean alreadyLogged = false;
-
-        private void logOnce(String msg, SecurityException x) {
-            if (alreadyLogged) return;
-            // Log only once.
-            logger.config("setContextClassLoader",msg);
-            if (x != null) logger.fine("setContextClassLoader", x);
-            alreadyLogged = true;
-        }
-
-        // Set new context class loader, returns previous one.
-        private final ClassLoader setContextClassLoader(final ClassLoader loader) {
-            final AccessControlContext ctxt = ClientNotifForwarder.this.acc;
-            // if ctxt is null, log a config message and throw a
-            // SecurityException.
-            if (ctxt == null) {
-                logOnce("AccessControlContext must not be null.",null);
-                throw new SecurityException("AccessControlContext must not be null");
-            }
-            return AccessController.doPrivileged(
-                new PrivilegedAction<ClassLoader>() {
-                    public ClassLoader run() {
-                        try {
-                            // get context class loader - may throw
-                            // SecurityException - though unlikely.
-                            final ClassLoader previous =
-                                Thread.currentThread().getContextClassLoader();
-
-                            // if nothing needs to be done, break here...
-                            if (loader == previous) return previous;
-
-                            // reset context class loader - may throw
-                            // SecurityException
-                            Thread.currentThread().setContextClassLoader(loader);
-                            return previous;
-                        } catch (SecurityException x) {
-                            logOnce("Permission to set ContextClassLoader missing. " +
-                                    "Notifications will not be dispatched. " +
-                                    "Please check your Java policy configuration: " +
-                                    x, x);
-                            throw x;
-                        }
-                    }
-                }, ctxt);
-        }
-
-        public void run() {
-            final ClassLoader previous;
-            if (defaultClassLoader != null) {
-                previous = setContextClassLoader(defaultClassLoader);
-            } else {
-                previous = null;
-            }
-            try {
-                doRun();
-            } finally {
-                if (defaultClassLoader != null) {
-                    setContextClassLoader(previous);
-                }
-            }
-        }
-
-        private void doRun() {
-            synchronized (ClientNotifForwarder.this) {
-                currentFetchThread = Thread.currentThread();
-
-                if (state == STARTING) {
-                    setState(STARTED);
-                }
-            }
-
-
-            NotificationResult nr = null;
-            if (!shouldStop() && (nr = fetchNotifs()) != null) {
-                // nr == null means got exception
-
-                final TargetedNotification[] notifs =
-                    nr.getTargetedNotifications();
-                final int len = notifs.length;
-                final Map<Integer, ClientListenerInfo> listeners;
-                final Integer myListenerID;
-
-                long missed = 0;
-
-                synchronized(ClientNotifForwarder.this) {
-                    // check sequence number.
-                    //
-                    if (clientSequenceNumber >= 0) {
-                        missed = nr.getEarliestSequenceNumber() -
-                            clientSequenceNumber;
-                    }
-
-                    clientSequenceNumber = nr.getNextSequenceNumber();
-
-                    listeners = new HashMap<Integer, ClientListenerInfo>();
-
-                    for (int i = 0 ; i < len ; i++) {
-                        final TargetedNotification tn = notifs[i];
-                        final Integer listenerID = tn.getListenerID();
-
-                        // check if an mbean unregistration notif
-                        if (!listenerID.equals(mbeanRemovedNotifID)) {
-                            final ClientListenerInfo li = infoList.get(listenerID);
-                            if (li != null) {
-                                listeners.put(listenerID, li);
-                            }
-                            continue;
-                        }
-                        final Notification notif = tn.getNotification();
-                        final String unreg =
-                            MBeanServerNotification.UNREGISTRATION_NOTIFICATION;
-                        if (notif instanceof MBeanServerNotification &&
-                            notif.getType().equals(unreg)) {
-
-                            MBeanServerNotification mbsn =
-                                (MBeanServerNotification) notif;
-                            ObjectName name = mbsn.getMBeanName();
-
-                            removeNotificationListener(name);
-                        }
-                    }
-                    myListenerID = mbeanRemovedNotifID;
-                }
-
-                if (missed > 0) {
-                    final String msg =
-                        "May have lost up to " + missed +
-                        " notification" + (missed == 1 ? "" : "s");
-                    lostNotifs(msg, missed);
-                    logger.trace("NotifFetcher.run", msg);
-                }
-
-                // forward
-                for (int i = 0 ; i < len ; i++) {
-                    final TargetedNotification tn = notifs[i];
-                    dispatchNotification(tn,myListenerID,listeners);
-                }
-            }
-
-            synchronized (ClientNotifForwarder.this) {
-                currentFetchThread = null;
-            }
-
-            if (nr == null || shouldStop()) {
-                // tell that the thread is REALLY stopped
-                setState(STOPPED);
-
-                try {
-                      removeListenerForMBeanRemovedNotif(mbeanRemovedNotifID);
-                } catch (Exception e) {
-                    if (logger.traceOn()) {
-                        logger.trace("NotifFetcher-run",
-                                "removeListenerForMBeanRemovedNotif", e);
-                    }
-                }
-            } else {
-                executor.execute(this);
-            }
-        }
-
-        void dispatchNotification(TargetedNotification tn,
-                                  Integer myListenerID,
-                                  Map<Integer, ClientListenerInfo> listeners) {
-            final Notification notif = tn.getNotification();
-            final Integer listenerID = tn.getListenerID();
-
-            if (listenerID.equals(myListenerID)) return;
-            final ClientListenerInfo li = listeners.get(listenerID);
-
-            if (li == null) {
-                logger.trace("NotifFetcher.dispatch",
-                             "Listener ID not in map");
-                return;
-            }
-
-            NotificationListener l = li.getListener();
-            Object h = li.getHandback();
-            try {
-                l.handleNotification(notif, h);
-            } catch (RuntimeException e) {
-                final String msg =
-                    "Failed to forward a notification " +
-                    "to a listener";
-                logger.trace("NotifFetcher-run", msg, e);
-            }
-
-        }
-
-        private NotificationResult fetchNotifs() {
-            try {
-                NotificationResult nr = ClientNotifForwarder.this.
-                    fetchNotifs(clientSequenceNumber,maxNotifications,
-                                timeout);
-
-                if (logger.traceOn()) {
-                    logger.trace("NotifFetcher-run",
-                                 "Got notifications from the server: "+nr);
-                }
-
-                return nr;
-            } catch (ClassNotFoundException e) {
-                logger.trace("NotifFetcher.fetchNotifs", e);
-                return fetchOneNotif();
-            } catch (NotSerializableException e) {
-                logger.trace("NotifFetcher.fetchNotifs", e);
-                return fetchOneNotif();
-            } catch (IOException ioe) {
-                if (!shouldStop()) {
-                    logger.error("NotifFetcher-run",
-                                 "Failed to fetch notification, " +
-                                 "stopping thread. Error is: " + ioe, ioe);
-                    logger.debug("NotifFetcher-run",ioe);
-                }
-
-                // no more fetching
-                return null;
-            }
-        }
-
-        /* Fetch one notification when we suspect that it might be a
-           notification that we can't deserialize (because of a
-           missing class).  First we ask for 0 notifications with 0
-           timeout.  This allows us to skip sequence numbers for
-           notifications that don't match our filters.  Then we ask
-           for one notification.  If that produces a
-           ClassNotFoundException or a NotSerializableException, we
-           increase our sequence number and ask again.  Eventually we
-           will either get a successful notification, or a return with
-           0 notifications.  In either case we can return a
-           NotificationResult.  This algorithm works (albeit less
-           well) even if the server implementation doesn't optimize a
-           request for 0 notifications to skip sequence numbers for
-           notifications that don't match our filters.
-
-           If we had at least one ClassNotFoundException, then we
-           must emit a JMXConnectionNotification.LOST_NOTIFS.
-        */
-        private NotificationResult fetchOneNotif() {
-            ClientNotifForwarder cnf = ClientNotifForwarder.this;
-
-            long startSequenceNumber = clientSequenceNumber;
-
-            int notFoundCount = 0;
-
-            NotificationResult result = null;
-            long firstEarliest = -1;
-
-            while (result == null && !shouldStop()) {
-                NotificationResult nr;
-
-                try {
-                    // 0 notifs to update startSequenceNumber
-                    nr = cnf.fetchNotifs(startSequenceNumber, 0, 0L);
-                } catch (ClassNotFoundException e) {
-                    logger.warning("NotifFetcher.fetchOneNotif",
-                                   "Impossible exception: " + e);
-                    logger.debug("NotifFetcher.fetchOneNotif",e);
-                    return null;
-                } catch (IOException e) {
-                    if (!shouldStop())
-                        logger.trace("NotifFetcher.fetchOneNotif", e);
-                    return null;
-                }
-
-                if (shouldStop())
-                    return null;
-
-                startSequenceNumber = nr.getNextSequenceNumber();
-                if (firstEarliest < 0)
-                    firstEarliest = nr.getEarliestSequenceNumber();
-
-                try {
-                    // 1 notif to skip possible missing class
-                    result = cnf.fetchNotifs(startSequenceNumber, 1, 0L);
-                } catch (Exception e) {
-                    if (e instanceof ClassNotFoundException
-                        || e instanceof NotSerializableException) {
-                        logger.warning("NotifFetcher.fetchOneNotif",
-                                     "Failed to deserialize a notification: "+e.toString());
-                        if (logger.traceOn()) {
-                            logger.trace("NotifFetcher.fetchOneNotif",
-                                         "Failed to deserialize a notification.", e);
-                        }
-
-                        notFoundCount++;
-                        startSequenceNumber++;
-                    } else {
-                        if (!shouldStop())
-                            logger.trace("NotifFetcher.fetchOneNotif", e);
-                        return null;
-                    }
-                }
-            }
-
-            if (notFoundCount > 0) {
-                final String msg =
-                    "Dropped " + notFoundCount + " notification" +
-                    (notFoundCount == 1 ? "" : "s") +
-                    " because classes were missing locally";
-                lostNotifs(msg, notFoundCount);
-                // Even if result.getEarliestSequenceNumber() is now greater than
-                // it was initially, meaning some notifs have been dropped
-                // from the buffer, we don't want the caller to see that
-                // because it is then likely to renotify about the lost notifs.
-                // So we put back the first value of earliestSequenceNumber
-                // that we saw.
-                if (result != null) {
-                    result = new NotificationResult(
-                            firstEarliest, result.getNextSequenceNumber(),
-                            result.getTargetedNotifications());
-                }
-            }
-
-            return result;
-        }
-
-        private boolean shouldStop() {
-            synchronized (ClientNotifForwarder.this) {
-                if (state != STARTED) {
-                    return true;
-                } else if (infoList.size() == 0) {
-                    // no more listener, stop fetching
-                    setState(STOPPING);
-
-                    return true;
-                }
-
-                return false;
-            }
-        }
-    }
-
-
-// -------------------------------------------------
-// private methods
-// -------------------------------------------------
-    private synchronized void setState(int newState) {
-        if (state == TERMINATED) {
-            return;
-        }
-
-        state = newState;
-        this.notifyAll();
-    }
-
-    /*
-     * Called to decide whether need to start a thread for fetching notifs.
-     * <P>The parameter reconnected will decide whether to initilize the clientSequenceNumber,
-     * initilaizing the clientSequenceNumber means to ignore all notifications arrived before.
-     * If it is reconnected, we will not initialize in order to get all notifications arrived
-     * during the reconnection. It may cause the newly registered listeners to receive some
-     * notifications arrived before its registray.
-     */
-    private synchronized void init(boolean reconnected) throws IOException {
-        switch (state) {
-        case STARTED:
-            return;
-        case STARTING:
-            return;
-        case TERMINATED:
-            throw new IOException("The ClientNotifForwarder has been terminated.");
-        case STOPPING:
-            if (beingReconnected == true) {
-                // wait for another thread to do, which is doing reconnection
-                return;
-            }
-
-            while (state == STOPPING) { // make sure only one fetching thread.
-                try {
-                    wait();
-                } catch (InterruptedException ire) {
-                    IOException ioe = new IOException(ire.toString());
-                    EnvHelp.initCause(ioe, ire);
-
-                    throw ioe;
-                }
-            }
-
-            // re-call this method to check the state again,
-            // the state can be other value like TERMINATED.
-            init(reconnected);
-
-            return;
-        case STOPPED:
-            if (beingReconnected == true) {
-                // wait for another thread to do, which is doing reconnection
-                return;
-            }
-
-            if (logger.traceOn()) {
-                logger.trace("init", "Initializing...");
-            }
-
-            // init the clientSequenceNumber if not reconnected.
-            if (!reconnected) {
-                try {
-                    NotificationResult nr = fetchNotifs(-1, 0, 0);
-                    clientSequenceNumber = nr.getNextSequenceNumber();
-                } catch (ClassNotFoundException e) {
-                    // can't happen
-                    logger.warning("init", "Impossible exception: "+ e);
-                    logger.debug("init",e);
-                }
-            }
-
-            // for cleaning
-            try {
-                mbeanRemovedNotifID = addListenerForMBeanRemovedNotif();
-            } catch (Exception e) {
-                final String msg =
-                    "Failed to register a listener to the mbean " +
-                    "server: the client will not do clean when an MBean " +
-                    "is unregistered";
-                if (logger.traceOn()) {
-                    logger.trace("init", msg, e);
-                }
-            }
-
-            setState(STARTING);
-
-            // start fetching
-            executor.execute(new NotifFetcher());
-
-            return;
-        default:
-            // should not
-            throw new IOException("Unknown state.");
-        }
-    }
-
-    /**
-     * Import: should not remove a listener during reconnection, the reconnection
-     * needs to change the listener list and that will possibly make removal fail.
-     */
-    private synchronized void beforeRemove() throws IOException {
-        while (beingReconnected) {
-            if (state == TERMINATED) {
-                throw new IOException("Terminated.");
-            }
-
-            try {
-                wait();
-            } catch (InterruptedException ire) {
-                IOException ioe = new IOException(ire.toString());
-                EnvHelp.initCause(ioe, ire);
-
-                throw ioe;
-            }
-        }
-
-        if (state == TERMINATED) {
-            throw new IOException("Terminated.");
-        }
-    }
-
-// -------------------------------------------------
-// private variables
-// -------------------------------------------------
-
-    private final ClassLoader defaultClassLoader;
-    private final Executor executor;
-
-    private final Map<Integer, ClientListenerInfo> infoList =
-            new HashMap<Integer, ClientListenerInfo>();
-
-    // notif stuff
-    private long clientSequenceNumber = -1;
-    private final int maxNotifications;
-    private final long timeout;
-    private Integer mbeanRemovedNotifID = null;
-    private Thread currentFetchThread;
-
-    // state
-    /**
-     * This state means that a thread is being created for fetching and forwarding notifications.
-     */
-    private static final int STARTING = 0;
-
-    /**
-     * This state tells that a thread has been started for fetching and forwarding notifications.
-     */
-    private static final int STARTED = 1;
-
-    /**
-     * This state means that the fetching thread is informed to stop.
-     */
-    private static final int STOPPING = 2;
-
-    /**
-     * This state means that the fetching thread is already stopped.
-     */
-    private static final int STOPPED = 3;
-
-    /**
-     * This state means that this object is terminated and no more thread will be created
-     * for fetching notifications.
-     */
-    private static final int TERMINATED = 4;
-
-    private int state = STOPPED;
-
-    /**
-     * This variable is used to tell whether a connector (RMIConnector or ClientIntermediary)
-     * is doing reconnection.
-     * This variable will be set to true by the method <code>preReconnection</code>, and set
-     * to false by <code>postReconnection</code>.
-     * When beingReconnected == true, no thread will be created for fetching notifications.
-     */
-    private boolean beingReconnected = false;
-
-    private static final ClassLogger logger =
-        new ClassLogger("javax.management.remote.misc",
-                        "ClientNotifForwarder");
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/remote/internal/IIOPHelper.java b/ojluni/src/main/java/com/sun/jmx/remote/internal/IIOPHelper.java
deleted file mode 100755
index 9ee9152..0000000
--- a/ojluni/src/main/java/com/sun/jmx/remote/internal/IIOPHelper.java
+++ /dev/null
@@ -1,188 +0,0 @@
-/*
- * Copyright (c) 2009, 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.jmx.remote.internal;
-
-import java.util.Properties;
-import java.rmi.Remote;
-import java.rmi.RemoteException;
-import java.rmi.NoSuchObjectException;
-
-import java.util.Properties;
-import java.rmi.Remote;
-import java.rmi.RemoteException;
-import java.rmi.NoSuchObjectException;
-
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-
-/**
- * A helper class for RMI-IIOP and CORBA APIs.
- */
-
-public final class IIOPHelper {
-    private IIOPHelper() { }
-
-    // loads IIOPProxy implementation class if available
-    private static final String IMPL_CLASS =
-        "com.sun.jmx.remote.protocol.iiop.IIOPProxyImpl";
-    private static final IIOPProxy proxy =
-        AccessController.doPrivileged(new PrivilegedAction<IIOPProxy>() {
-            public IIOPProxy run() {
-                try {
-                    Class<?> c = Class.forName(IMPL_CLASS, true, null);
-                    return (IIOPProxy)c.newInstance();
-                } catch (ClassNotFoundException cnf) {
-                    return null;
-                } catch (InstantiationException e) {
-                    throw new AssertionError(e);
-                } catch (IllegalAccessException e) {
-                    throw new AssertionError(e);
-                }
-            }});
-
-    /**
-     * Returns true if RMI-IIOP and CORBA is available.
-     */
-    public static boolean isAvailable() {
-        return proxy != null;
-    }
-
-    private static void ensureAvailable() {
-        if (proxy == null)
-            throw new AssertionError("Should not here");
-    }
-
-    /**
-     * Returns true if the given object is a Stub.
-     */
-    public static boolean isStub(Object obj) {
-        return (proxy == null) ? false : proxy.isStub(obj);
-    }
-
-    /**
-     * Returns the Delegate to which the given Stub delegates.
-     */
-    public static Object getDelegate(Object stub) {
-        ensureAvailable();
-        return proxy.getDelegate(stub);
-    }
-
-    /**
-     * Sets the Delegate for a given Stub.
-     */
-    public static void setDelegate(Object stub, Object delegate) {
-        ensureAvailable();
-        proxy.setDelegate(stub, delegate);
-    }
-
-    /**
-     * Returns the ORB associated with the given stub
-     *
-     * @throws  UnsupportedOperationException
-     *          if the object does not support the operation that
-     *          was invoked
-     */
-    public static Object getOrb(Object stub) {
-        ensureAvailable();
-        return proxy.getOrb(stub);
-    }
-
-    /**
-     * Connects the Stub to the given ORB.
-     */
-    public static void connect(Object stub, Object orb)
-        throws RemoteException
-    {
-        ensureAvailable();
-        proxy.connect(stub, orb);
-    }
-
-    /**
-     * Returns true if the given object is an ORB.
-     */
-    public static boolean isOrb(Object obj) {
-        ensureAvailable();
-        return proxy.isOrb(obj);
-    }
-
-    /**
-     * Creates, and returns, a new ORB instance.
-     */
-    public static Object createOrb(String[] args, Properties props) {
-        ensureAvailable();
-        return proxy.createOrb(args, props);
-    }
-
-    /**
-     * Converts a string, produced by the object_to_string method, back
-     * to a CORBA object reference.
-     */
-    public static Object stringToObject(Object orb, String str) {
-        ensureAvailable();
-        return proxy.stringToObject(orb, str);
-    }
-
-    /**
-     * Converts the given CORBA object reference to a string.
-     */
-    public static String objectToString(Object orb, Object obj) {
-        ensureAvailable();
-        return proxy.objectToString(orb, obj);
-    }
-
-    /**
-     * Checks to ensure that an object of a remote or abstract interface
-     * type can be cast to a desired type.
-     */
-    public static <T> T narrow(Object narrowFrom, Class<T> narrowTo) {
-        ensureAvailable();
-        return proxy.narrow(narrowFrom, narrowTo);
-    }
-
-    /**
-     * Makes a server object ready to receive remote calls
-     */
-    public static void exportObject(Remote obj) throws RemoteException {
-        ensureAvailable();
-        proxy.exportObject(obj);
-    }
-
-    /**
-     * Deregisters a server object from the runtime.
-     */
-    public static void unexportObject(Remote obj) throws NoSuchObjectException {
-        ensureAvailable();
-        proxy.unexportObject(obj);
-    }
-
-    /**
-     * Returns a stub for the given server object.
-     */
-    public static Remote toStub(Remote obj) throws NoSuchObjectException {
-        ensureAvailable();
-        return proxy.toStub(obj);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/remote/internal/IIOPProxy.java b/ojluni/src/main/java/com/sun/jmx/remote/internal/IIOPProxy.java
deleted file mode 100755
index b7e2ef6..0000000
--- a/ojluni/src/main/java/com/sun/jmx/remote/internal/IIOPProxy.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * Copyright (c) 2009, 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.jmx.remote.internal;
-
-import java.util.Properties;
-import java.rmi.Remote;
-import java.rmi.RemoteException;
-import java.rmi.NoSuchObjectException;
-
-/**
- * An interface to a subset of the RMI-IIOP and CORBA APIs to avoid a
- * static dependencies on the types defined by these APIs.
- */
-
-public interface IIOPProxy {
-
-    /**
-     * Returns true if the given object is a Stub.
-     */
-    boolean isStub(Object obj);
-
-    /**
-     * Returns the Delegate to which the given Stub delegates.
-     */
-    Object getDelegate(Object stub);
-
-    /**
-     * Sets the Delegate for a given Stub.
-     */
-    void setDelegate(Object stub, Object delegate);
-
-    /**
-     * Returns the ORB associated with the given stub
-     *
-     * @throws  UnsupportedOperationException
-     *          if the object does not support the operation that
-     *          was invoked
-     */
-    Object getOrb(Object stub);
-
-    /**
-     * Connects the Stub to the given ORB.
-     */
-    void connect(Object stub, Object orb) throws RemoteException;
-
-    /**
-     * Returns true if the given object is an ORB.
-     */
-    boolean isOrb(Object obj);
-
-    /**
-     * Creates, and returns, a new ORB instance.
-     */
-    Object createOrb(String[] args, Properties props);
-
-    /**
-     * Converts a string, produced by the object_to_string method, back
-     * to a CORBA object reference.
-     */
-    Object stringToObject(Object orb, String str);
-
-    /**
-     * Converts the given CORBA object reference to a string.
-     */
-    String objectToString(Object orb, Object obj);
-
-    /**
-     * Checks to ensure that an object of a remote or abstract interface
-     * type can be cast to a desired type.
-     */
-    <T> T narrow(Object narrowFrom, Class<T> narrowTo);
-
-    /**
-     * Makes a server object ready to receive remote calls
-     */
-    void exportObject(Remote obj) throws RemoteException;
-
-    /**
-     * Deregisters a server object from the runtime.
-     */
-    void unexportObject(Remote obj) throws NoSuchObjectException;
-
-    /**
-     * Returns a stub for the given server object.
-     */
-    Remote toStub(Remote obj) throws NoSuchObjectException;
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/remote/internal/NotificationBuffer.java b/ojluni/src/main/java/com/sun/jmx/remote/internal/NotificationBuffer.java
deleted file mode 100755
index 1e8b03c..0000000
--- a/ojluni/src/main/java/com/sun/jmx/remote/internal/NotificationBuffer.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright (c) 2003, 2006, 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.jmx.remote.internal;
-
-import java.util.Set;
-import javax.management.remote.NotificationResult;
-import javax.management.remote.TargetedNotification;
-
-/** A buffer of notifications received from an MBean server. */
-public interface NotificationBuffer {
-    /**
-     * <p>Fetch notifications that match the given listeners.</p>
-     *
-     * <p>The operation only considers notifications with a sequence
-     * number at least <code>startSequenceNumber</code>.  It will take
-     * no longer than <code>timeout</code>, and will return no more
-     * than <code>maxNotifications</code> different notifications.</p>
-     *
-     * <p>If there are no notifications matching the criteria, the
-     * operation will block until one arrives, subject to the
-     * timeout.</p>
-     *
-     * @param filter an object that will add notifications to a
-     * {@code List<TargetedNotification>} if they match the current
-     * listeners with their filters.
-     * @param startSequenceNumber the first sequence number to
-     * consider.
-     * @param timeout the maximum time to wait.  May be 0 to indicate
-     * not to wait if there are no notifications.
-     * @param maxNotifications the maximum number of notifications to
-     * return.  May be 0 to indicate a wait for eligible notifications
-     * that will return a usable <code>nextSequenceNumber</code>.  The
-     * {@link TargetedNotification} array in the returned {@link
-     * NotificationResult} may contain more than this number of
-     * elements but will not contain more than this number of
-     * different notifications.
-     */
-    public NotificationResult
-        fetchNotifications(NotificationBufferFilter filter,
-                           long startSequenceNumber,
-                           long timeout,
-                           int maxNotifications)
-            throws InterruptedException;
-
-    /**
-     * <p>Discard this buffer.</p>
-     */
-    public void dispose();
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/remote/internal/NotificationBufferFilter.java b/ojluni/src/main/java/com/sun/jmx/remote/internal/NotificationBufferFilter.java
deleted file mode 100755
index 8be0749..0000000
--- a/ojluni/src/main/java/com/sun/jmx/remote/internal/NotificationBufferFilter.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (c) 2006, 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.jmx.remote.internal;
-
-import java.util.List;
-import javax.management.Notification;
-import javax.management.ObjectName;
-import javax.management.remote.TargetedNotification;
-
-public interface NotificationBufferFilter {
-    /**
-     * Add the given notification coming from the given MBean to the list
-     * iff it matches this filter's rules.
-     */
-    public void apply(List<TargetedNotification> targetedNotifs,
-            ObjectName source, Notification notif);
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/remote/internal/ProxyRef.java b/ojluni/src/main/java/com/sun/jmx/remote/internal/ProxyRef.java
deleted file mode 100755
index 3027bd2..0000000
--- a/ojluni/src/main/java/com/sun/jmx/remote/internal/ProxyRef.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-package com.sun.jmx.remote.internal;
-
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
-import java.lang.reflect.Method;
-import java.rmi.Remote;
-import java.rmi.RemoteException;
-import java.rmi.server.RemoteObject;
-import java.rmi.server.RemoteRef;
-
-
-@SuppressWarnings("deprecation")
-public class ProxyRef implements RemoteRef {
-    private static final long serialVersionUID = -6503061366316814723L;
-
-    public ProxyRef(RemoteRef ref) {
-        this.ref = ref;
-    }
-
-    public void readExternal(ObjectInput in)
-            throws IOException, ClassNotFoundException {
-        ref.readExternal(in);
-    }
-
-    public void writeExternal(ObjectOutput out) throws IOException {
-        ref.writeExternal(out);
-    }
-
-    /**
-     * @deprecated
-     */
-    @Deprecated
-    public void invoke(java.rmi.server.RemoteCall call) throws Exception {
-        ref.invoke(call);
-    }
-
-    public Object invoke(Remote obj, Method method, Object[] params,
-                         long opnum) throws Exception {
-        return ref.invoke(obj, method, params, opnum);
-    }
-
-    /**
-     * @deprecated
-     */
-    @Deprecated
-    public void done(java.rmi.server.RemoteCall call) throws RemoteException {
-        ref.done(call);
-    }
-
-    public String getRefClass(ObjectOutput out) {
-        return ref.getRefClass(out);
-    }
-
-    /**
-     * @deprecated
-     */
-    @Deprecated
-    public java.rmi.server.RemoteCall newCall(RemoteObject obj,
-            java.rmi.server.Operation[] op, int opnum,
-                              long hash) throws RemoteException {
-        return ref.newCall(obj, op, opnum, hash);
-    }
-
-    public boolean remoteEquals(RemoteRef obj) {
-        return ref.remoteEquals(obj);
-    }
-
-    public int remoteHashCode() {
-        return ref.remoteHashCode();
-    }
-
-    public String remoteToString() {
-        return ref.remoteToString();
-    }
-
-    protected RemoteRef ref;
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/remote/internal/RMIExporter.java b/ojluni/src/main/java/com/sun/jmx/remote/internal/RMIExporter.java
deleted file mode 100755
index 8568aa9..0000000
--- a/ojluni/src/main/java/com/sun/jmx/remote/internal/RMIExporter.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-package com.sun.jmx.remote.internal;
-
-import java.rmi.NoSuchObjectException;
-import java.rmi.Remote;
-import java.rmi.RemoteException;
-import java.rmi.server.RMIClientSocketFactory;
-import java.rmi.server.RMIServerSocketFactory;
-import java.rmi.server.UnicastRemoteObject;
-
-/**
- * <p>Unpublished interface controlling how the RMI Connector Server
- * exports objects.  The RMIServerImpl object and each
- * RMIConnectionImpl object are exported using the exporter.  The
- * default exporter calls {@link
- * UnicastRemoteObject#exportObject(Remote, int,
- * RMIClientSocketFactory, RMIServerSocketFactory)} to export objects
- * and {@link UnicastRemoteObject#unexportObject(Remote, boolean)} to
- * unexport them.  A replacement exporter can be specified via the
- * {@link #EXPORTER_ATTRIBUTE} property in the environment Map passed
- * to the RMI connector server.</p>
- */
-public interface RMIExporter {
-    public static final String EXPORTER_ATTRIBUTE =
-        "com.sun.jmx.remote.rmi.exporter";
-
-    public Remote exportObject(Remote obj,
-                               int port,
-                               RMIClientSocketFactory csf,
-                               RMIServerSocketFactory ssf)
-            throws RemoteException;
-
-    public boolean unexportObject(Remote obj, boolean force)
-            throws NoSuchObjectException;
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/remote/internal/ServerCommunicatorAdmin.java b/ojluni/src/main/java/com/sun/jmx/remote/internal/ServerCommunicatorAdmin.java
deleted file mode 100755
index bb09f62..0000000
--- a/ojluni/src/main/java/com/sun/jmx/remote/internal/ServerCommunicatorAdmin.java
+++ /dev/null
@@ -1,232 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-package com.sun.jmx.remote.internal;
-
-import java.io.IOException;
-
-import com.sun.jmx.remote.util.ClassLogger;
-
-public abstract class ServerCommunicatorAdmin {
-    public ServerCommunicatorAdmin(long timeout) {
-        if (logger.traceOn()) {
-            logger.trace("Constructor",
-                         "Creates a new ServerCommunicatorAdmin object "+
-                         "with the timeout "+timeout);
-        }
-
-        this.timeout = timeout;
-
-        timestamp = 0;
-        if (timeout < Long.MAX_VALUE) {
-            Runnable timeoutTask = new Timeout();
-            final Thread t = new Thread(timeoutTask);
-            t.setName("JMX server connection timeout " + t.getId());
-            // If you change this name you will need to change a unit test
-            // (NoServerTimeoutTest)
-            t.setDaemon(true);
-            t.start();
-        }
-    }
-
-    /**
-     * Tells that a new request message is received.
-     * A caller of this method should always call the method
-     * <code>rspOutgoing</code> to inform that a response is sent out
-     * for the received request.
-     * @return the value of the termination flag:
-     * <ul><code>true</code> if the connection is already being terminated,
-     * <br><code>false</code> otherwise.</ul>
-     */
-    public boolean reqIncoming() {
-        if (logger.traceOn()) {
-            logger.trace("reqIncoming", "Receive a new request.");
-        }
-
-        synchronized(lock) {
-            if (terminated) {
-                logger.warning("reqIncoming",
-                               "The server has decided to close " +
-                               "this client connection.");
-            }
-            ++currentJobs;
-
-            return terminated;
-        }
-    }
-
-    /**
-     * Tells that a response is sent out for a received request.
-     * @return the value of the termination flag:
-     * <ul><code>true</code> if the connection is already being terminated,
-     * <br><code>false</code> otherwise.</ul>
-     */
-    public boolean rspOutgoing() {
-        if (logger.traceOn()) {
-            logger.trace("reqIncoming", "Finish a request.");
-        }
-
-        synchronized(lock) {
-            if (--currentJobs == 0) {
-                timestamp = System.currentTimeMillis();
-                logtime("Admin: Timestamp=",timestamp);
-                // tells the adminor to restart waiting with timeout
-                lock.notify();
-            }
-            return terminated;
-        }
-    }
-
-    /**
-     * Called by this class to tell an implementation to do stop.
-     */
-    protected abstract void doStop();
-
-    /**
-     * Terminates this object.
-     * Called only by outside, so do not need to call doStop
-     */
-    public void terminate() {
-        if (logger.traceOn()) {
-            logger.trace("terminate",
-                         "terminate the ServerCommunicatorAdmin object.");
-        }
-
-        synchronized(lock) {
-            if (terminated) {
-                return;
-            }
-
-            terminated = true;
-
-            // tell Timeout to terminate
-            lock.notify();
-        }
-    }
-
-// --------------------------------------------------------------
-// private classes
-// --------------------------------------------------------------
-    private class Timeout implements Runnable {
-        public void run() {
-            boolean stopping = false;
-
-            synchronized(lock) {
-                if (timestamp == 0) timestamp = System.currentTimeMillis();
-                logtime("Admin: timeout=",timeout);
-                logtime("Admin: Timestamp=",timestamp);
-
-                while(!terminated) {
-                    try {
-                        // wait until there is no more job
-                        while(!terminated && currentJobs != 0) {
-                            if (logger.traceOn()) {
-                                logger.trace("Timeout-run",
-                                             "Waiting without timeout.");
-                            }
-
-                            lock.wait();
-                        }
-
-                        if (terminated) return;
-
-                        final long remaining =
-                            timeout - (System.currentTimeMillis() - timestamp);
-
-                        logtime("Admin: remaining timeout=",remaining);
-
-                        if (remaining > 0) {
-
-                            if (logger.traceOn()) {
-                                logger.trace("Timeout-run",
-                                             "Waiting with timeout: "+
-                                             remaining + " ms remaining");
-                            }
-
-                            lock.wait(remaining);
-                        }
-
-                        if (currentJobs > 0) continue;
-
-                        final long elapsed =
-                            System.currentTimeMillis() - timestamp;
-                        logtime("Admin: elapsed=",elapsed);
-
-                        if (!terminated && elapsed > timeout) {
-                            if (logger.traceOn()) {
-                                logger.trace("Timeout-run",
-                                             "timeout elapsed");
-                            }
-                            logtime("Admin: timeout elapsed! "+
-                                    elapsed+">",timeout);
-                                // stopping
-                            terminated = true;
-
-                            stopping = true;
-                            break;
-                        }
-                    } catch (InterruptedException ire) {
-                        logger.warning("Timeout-run","Unexpected Exception: "+
-                                       ire);
-                        logger.debug("Timeout-run",ire);
-                        return;
-                    }
-                }
-            }
-
-            if (stopping) {
-                if (logger.traceOn()) {
-                    logger.trace("Timeout-run", "Call the doStop.");
-                }
-
-                doStop();
-            }
-        }
-    }
-
-    private void logtime(String desc,long time) {
-        timelogger.trace("synchro",desc+time);
-    }
-
-// --------------------------------------------------------------
-// private variables
-// --------------------------------------------------------------
-    private long    timestamp;
-
-    private final int[] lock = new int[0];
-    private int currentJobs = 0;
-
-    private long timeout;
-
-    // state issue
-    private boolean terminated = false;
-
-    private static final ClassLogger logger =
-        new ClassLogger("javax.management.remote.misc",
-                        "ServerCommunicatorAdmin");
-    private static final ClassLogger timelogger =
-        new ClassLogger("javax.management.remote.timeout",
-                        "ServerCommunicatorAdmin");
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/remote/internal/ServerNotifForwarder.java b/ojluni/src/main/java/com/sun/jmx/remote/internal/ServerNotifForwarder.java
deleted file mode 100755
index 0b67b93..0000000
--- a/ojluni/src/main/java/com/sun/jmx/remote/internal/ServerNotifForwarder.java
+++ /dev/null
@@ -1,502 +0,0 @@
-/*
- * Copyright (c) 2002, 2013, 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.jmx.remote.internal;
-
-import com.sun.jmx.mbeanserver.Util;
-import com.sun.jmx.remote.security.NotificationAccessController;
-import com.sun.jmx.remote.util.ClassLogger;
-import com.sun.jmx.remote.util.EnvHelp;
-import java.io.IOException;
-import java.security.AccessControlContext;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import java.security.PrivilegedActionException;
-import java.security.PrivilegedExceptionAction;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import javax.management.InstanceNotFoundException;
-import javax.management.ListenerNotFoundException;
-import javax.management.MBeanPermission;
-import javax.management.MBeanServer;
-import javax.management.MBeanServerDelegate;
-import javax.management.MBeanServerNotification;
-import javax.management.Notification;
-import javax.management.NotificationBroadcaster;
-import javax.management.NotificationFilter;
-import javax.management.ObjectInstance;
-import javax.management.ObjectName;
-import javax.management.remote.NotificationResult;
-import javax.management.remote.TargetedNotification;
-import javax.management.MalformedObjectNameException;
-import javax.security.auth.Subject;
-
-public class ServerNotifForwarder {
-
-
-    public ServerNotifForwarder(MBeanServer mbeanServer,
-                                Map<String, ?> env,
-                                NotificationBuffer notifBuffer,
-                                String connectionId) {
-        this.mbeanServer = mbeanServer;
-        this.notifBuffer = notifBuffer;
-        this.connectionId = connectionId;
-        connectionTimeout = EnvHelp.getServerConnectionTimeout(env);
-
-        String stringBoolean = (String) env.get("jmx.remote.x.check.notification.emission");
-        checkNotificationEmission = EnvHelp.computeBooleanFromString( stringBoolean );
-        notificationAccessController =
-                EnvHelp.getNotificationAccessController(env);
-    }
-
-    public Integer addNotificationListener(final ObjectName name,
-        final NotificationFilter filter)
-        throws InstanceNotFoundException, IOException {
-
-        if (logger.traceOn()) {
-            logger.trace("addNotificationListener",
-                "Add a listener at " + name);
-        }
-
-        checkState();
-
-        // Explicitly check MBeanPermission for addNotificationListener
-        //
-        checkMBeanPermission(name, "addNotificationListener");
-        if (notificationAccessController != null) {
-            notificationAccessController.addNotificationListener(
-                connectionId, name, getSubject());
-        }
-        try {
-            boolean instanceOf =
-            AccessController.doPrivileged(
-                    new PrivilegedExceptionAction<Boolean>() {
-                        public Boolean run() throws InstanceNotFoundException {
-                            return mbeanServer.isInstanceOf(name, broadcasterClass);
-                        }
-            });
-            if (!instanceOf) {
-                throw new IllegalArgumentException("The specified MBean [" +
-                    name + "] is not a " +
-                    "NotificationBroadcaster " +
-                    "object.");
-            }
-        } catch (PrivilegedActionException e) {
-            throw (InstanceNotFoundException) extractException(e);
-        }
-
-        final Integer id = getListenerID();
-
-        // 6238731: set the default domain if no domain is set.
-        ObjectName nn = name;
-        if (name.getDomain() == null || name.getDomain().equals("")) {
-            try {
-                nn = ObjectName.getInstance(mbeanServer.getDefaultDomain(),
-                                            name.getKeyPropertyList());
-            } catch (MalformedObjectNameException mfoe) {
-                // impossible, but...
-                IOException ioe = new IOException(mfoe.getMessage());
-                ioe.initCause(mfoe);
-                throw ioe;
-            }
-        }
-
-        synchronized (listenerMap) {
-            IdAndFilter idaf = new IdAndFilter(id, filter);
-            Set<IdAndFilter> set = listenerMap.get(nn);
-            // Tread carefully because if set.size() == 1 it may be the
-            // Collections.singleton we make here, which is unmodifiable.
-            if (set == null)
-                set = Collections.singleton(idaf);
-            else {
-                if (set.size() == 1)
-                    set = new HashSet<IdAndFilter>(set);
-                set.add(idaf);
-            }
-            listenerMap.put(nn, set);
-        }
-
-        return id;
-    }
-
-    public void removeNotificationListener(ObjectName name,
-        Integer[] listenerIDs)
-        throws Exception {
-
-        if (logger.traceOn()) {
-            logger.trace("removeNotificationListener",
-                "Remove some listeners from " + name);
-        }
-
-        checkState();
-
-        // Explicitly check MBeanPermission for removeNotificationListener
-        //
-        checkMBeanPermission(name, "removeNotificationListener");
-        if (notificationAccessController != null) {
-            notificationAccessController.removeNotificationListener(
-                connectionId, name, getSubject());
-        }
-
-        Exception re = null;
-        for (int i = 0 ; i < listenerIDs.length ; i++) {
-            try {
-                removeNotificationListener(name, listenerIDs[i]);
-            } catch (Exception e) {
-                // Give back the first exception
-                //
-                if (re != null) {
-                    re = e;
-                }
-            }
-        }
-        if (re != null) {
-            throw re;
-        }
-    }
-
-    public void removeNotificationListener(ObjectName name, Integer listenerID)
-    throws
-        InstanceNotFoundException,
-        ListenerNotFoundException,
-        IOException {
-
-        if (logger.traceOn()) {
-            logger.trace("removeNotificationListener",
-                "Remove the listener " + listenerID + " from " + name);
-        }
-
-        checkState();
-
-        if (name != null && !name.isPattern()) {
-            if (!mbeanServer.isRegistered(name)) {
-                throw new InstanceNotFoundException("The MBean " + name +
-                    " is not registered.");
-            }
-        }
-
-        synchronized (listenerMap) {
-            // Tread carefully because if set.size() == 1 it may be a
-            // Collections.singleton, which is unmodifiable.
-            Set<IdAndFilter> set = listenerMap.get(name);
-            IdAndFilter idaf = new IdAndFilter(listenerID, null);
-            if (set == null || !set.contains(idaf))
-                throw new ListenerNotFoundException("Listener not found");
-            if (set.size() == 1)
-                listenerMap.remove(name);
-            else
-                set.remove(idaf);
-        }
-    }
-
-    /* This is the object that will apply our filtering to candidate
-     * notifications.  First of all, if there are no listeners for the
-     * ObjectName that the notification is coming from, we go no further.
-     * Then, for each listener, we must apply the corresponding filter (if any)
-     * and ignore the listener if the filter rejects.  Finally, we apply
-     * some access checks which may also reject the listener.
-     *
-     * A given notification may trigger several listeners on the same MBean,
-     * which is why listenerMap is a Map<ObjectName, Set<IdAndFilter>> and
-     * why we add the found notifications to a supplied List rather than
-     * just returning a boolean.
-     */
-    private final NotifForwarderBufferFilter bufferFilter = new NotifForwarderBufferFilter();
-
-    final class NotifForwarderBufferFilter implements NotificationBufferFilter {
-        public void apply(List<TargetedNotification> targetedNotifs,
-                          ObjectName source, Notification notif) {
-            // We proceed in two stages here, to avoid holding the listenerMap
-            // lock while invoking the filters (which are user code).
-            final IdAndFilter[] candidates;
-            synchronized (listenerMap) {
-                final Set<IdAndFilter> set = listenerMap.get(source);
-                if (set == null) {
-                    logger.debug("bufferFilter", "no listeners for this name");
-                    return;
-                }
-                candidates = new IdAndFilter[set.size()];
-                set.toArray(candidates);
-            }
-            // We don't synchronize on targetedNotifs, because it is a local
-            // variable of our caller and no other thread can see it.
-            for (IdAndFilter idaf : candidates) {
-                final NotificationFilter nf = idaf.getFilter();
-                if (nf == null || nf.isNotificationEnabled(notif)) {
-                    logger.debug("bufferFilter", "filter matches");
-                    final TargetedNotification tn =
-                            new TargetedNotification(notif, idaf.getId());
-                    if (allowNotificationEmission(source, tn))
-                        targetedNotifs.add(tn);
-                }
-            }
-        }
-    };
-
-    public NotificationResult fetchNotifs(long startSequenceNumber,
-        long timeout,
-        int maxNotifications) {
-        if (logger.traceOn()) {
-            logger.trace("fetchNotifs", "Fetching notifications, the " +
-                "startSequenceNumber is " + startSequenceNumber +
-                ", the timeout is " + timeout +
-                ", the maxNotifications is " + maxNotifications);
-        }
-
-        NotificationResult nr;
-        final long t = Math.min(connectionTimeout, timeout);
-        try {
-            nr = notifBuffer.fetchNotifications(bufferFilter,
-                startSequenceNumber,
-                t, maxNotifications);
-            snoopOnUnregister(nr);
-        } catch (InterruptedException ire) {
-            nr = new NotificationResult(0L, 0L, new TargetedNotification[0]);
-        }
-
-        if (logger.traceOn()) {
-            logger.trace("fetchNotifs", "Forwarding the notifs: "+nr);
-        }
-
-        return nr;
-    }
-
-    // The standard RMI connector client will register a listener on the MBeanServerDelegate
-    // in order to be told when MBeans are unregistered.  We snoop on fetched notifications
-    // so that we can know too, and remove the corresponding entry from the listenerMap.
-    // See 6957378.
-    private void snoopOnUnregister(NotificationResult nr) {
-        Set<IdAndFilter> delegateSet = listenerMap.get(MBeanServerDelegate.DELEGATE_NAME);
-        if (delegateSet == null || delegateSet.isEmpty()) {
-            return;
-        }
-        for (TargetedNotification tn : nr.getTargetedNotifications()) {
-            Integer id = tn.getListenerID();
-            for (IdAndFilter idaf : delegateSet) {
-                if (idaf.id == id) {
-                    // This is a notification from the MBeanServerDelegate.
-                    Notification n = tn.getNotification();
-                    if (n instanceof MBeanServerNotification &&
-                            n.getType().equals(MBeanServerNotification.UNREGISTRATION_NOTIFICATION)) {
-                        MBeanServerNotification mbsn = (MBeanServerNotification) n;
-                        ObjectName gone = mbsn.getMBeanName();
-                        synchronized (listenerMap) {
-                            listenerMap.remove(gone);
-                        }
-                    }
-                }
-            }
-        }
-    }
-
-    public void terminate() {
-        if (logger.traceOn()) {
-            logger.trace("terminate", "Be called.");
-        }
-
-        synchronized(terminationLock) {
-            if (terminated) {
-                return;
-            }
-
-            terminated = true;
-
-            synchronized(listenerMap) {
-                listenerMap.clear();
-            }
-        }
-
-        if (logger.traceOn()) {
-            logger.trace("terminate", "Terminated.");
-        }
-    }
-
-    //----------------
-    // PRIVATE METHODS
-    //----------------
-
-    private Subject getSubject() {
-        return Subject.getSubject(AccessController.getContext());
-    }
-
-    private void checkState() throws IOException {
-        synchronized(terminationLock) {
-            if (terminated) {
-                throw new IOException("The connection has been terminated.");
-            }
-        }
-    }
-
-    private Integer getListenerID() {
-        synchronized(listenerCounterLock) {
-            return listenerCounter++;
-        }
-    }
-
-    /**
-     * Explicitly check the MBeanPermission for
-     * the current access control context.
-     */
-    public final void checkMBeanPermission(
-            final ObjectName name, final String actions)
-            throws InstanceNotFoundException, SecurityException {
-        checkMBeanPermission(mbeanServer,name,actions);
-    }
-
-    static void checkMBeanPermission(
-            final MBeanServer mbs, final ObjectName name, final String actions)
-            throws InstanceNotFoundException, SecurityException {
-
-        SecurityManager sm = System.getSecurityManager();
-        if (sm != null) {
-            AccessControlContext acc = AccessController.getContext();
-            ObjectInstance oi;
-            try {
-                oi = AccessController.doPrivileged(
-                    new PrivilegedExceptionAction<ObjectInstance>() {
-                        public ObjectInstance run()
-                        throws InstanceNotFoundException {
-                            return mbs.getObjectInstance(name);
-                        }
-                });
-            } catch (PrivilegedActionException e) {
-                throw (InstanceNotFoundException) extractException(e);
-            }
-            String classname = oi.getClassName();
-            MBeanPermission perm = new MBeanPermission(
-                classname,
-                null,
-                name,
-                actions);
-            sm.checkPermission(perm, acc);
-        }
-    }
-
-    /**
-     * Check if the caller has the right to get the following notifications.
-     */
-    private boolean allowNotificationEmission(ObjectName name,
-                                              TargetedNotification tn) {
-        try {
-            if (checkNotificationEmission) {
-                checkMBeanPermission(name, "addNotificationListener");
-            }
-            if (notificationAccessController != null) {
-                notificationAccessController.fetchNotification(
-                        connectionId, name, tn.getNotification(), getSubject());
-            }
-            return true;
-        } catch (SecurityException e) {
-            if (logger.debugOn()) {
-                logger.debug("fetchNotifs", "Notification " +
-                        tn.getNotification() + " not forwarded: the " +
-                        "caller didn't have the required access rights");
-            }
-            return false;
-        } catch (Exception e) {
-            if (logger.debugOn()) {
-                logger.debug("fetchNotifs", "Notification " +
-                        tn.getNotification() + " not forwarded: " +
-                        "got an unexpected exception: " + e);
-            }
-            return false;
-        }
-    }
-
-    /**
-     * Iterate until we extract the real exception
-     * from a stack of PrivilegedActionExceptions.
-     */
-    private static Exception extractException(Exception e) {
-        while (e instanceof PrivilegedActionException) {
-            e = ((PrivilegedActionException)e).getException();
-        }
-        return e;
-    }
-
-    private static class IdAndFilter {
-        private Integer id;
-        private NotificationFilter filter;
-
-        IdAndFilter(Integer id, NotificationFilter filter) {
-            this.id = id;
-            this.filter = filter;
-        }
-
-        Integer getId() {
-            return this.id;
-        }
-
-        NotificationFilter getFilter() {
-            return this.filter;
-        }
-
-        @Override
-        public int hashCode() {
-            return id.hashCode();
-        }
-
-        @Override
-        public boolean equals(Object o) {
-            return ((o instanceof IdAndFilter) &&
-                    ((IdAndFilter) o).getId().equals(getId()));
-        }
-    }
-
-
-    //------------------
-    // PRIVATE VARIABLES
-    //------------------
-
-    private MBeanServer mbeanServer;
-
-    private final String connectionId;
-
-    private final long connectionTimeout;
-
-    private static int listenerCounter = 0;
-    private final static int[] listenerCounterLock = new int[0];
-
-    private NotificationBuffer notifBuffer;
-    private final Map<ObjectName, Set<IdAndFilter>> listenerMap =
-            new HashMap<ObjectName, Set<IdAndFilter>>();
-
-    private boolean terminated = false;
-    private final int[] terminationLock = new int[0];
-
-    static final String broadcasterClass =
-        NotificationBroadcaster.class.getName();
-
-    private final boolean checkNotificationEmission;
-
-    private final NotificationAccessController notificationAccessController;
-
-    private static final ClassLogger logger =
-        new ClassLogger("javax.management.remote.misc", "ServerNotifForwarder");
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/remote/internal/Unmarshal.java b/ojluni/src/main/java/com/sun/jmx/remote/internal/Unmarshal.java
deleted file mode 100755
index de865ca..0000000
--- a/ojluni/src/main/java/com/sun/jmx/remote/internal/Unmarshal.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-package com.sun.jmx.remote.internal;
-
-import java.io.IOException;
-import java.rmi.MarshalledObject;
-
-public interface Unmarshal {
-    public Object get(MarshalledObject<?> mo)
-            throws IOException, ClassNotFoundException;
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/remote/internal/package.html b/ojluni/src/main/java/com/sun/jmx/remote/internal/package.html
deleted file mode 100755
index 134840f..0000000
--- a/ojluni/src/main/java/com/sun/jmx/remote/internal/package.html
+++ /dev/null
@@ -1,37 +0,0 @@
-<html>
-<head>
-    <title>JMX Remote API - Sun RI Internal Classes</title>
-<!--
-
-Copyright (c) 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.
--->
-</head>
-<body bgcolor="white">
-    <p>This package contains some classes used internally by the
-      Sun implementation of JMX Connectors to push and pull 
-      notifications.
-    </p>
-
-  </body>
-</html>
diff --git a/ojluni/src/main/java/com/sun/jmx/remote/protocol/iiop/ClientProvider.java b/ojluni/src/main/java/com/sun/jmx/remote/protocol/iiop/ClientProvider.java
deleted file mode 100755
index eeeb671..0000000
--- a/ojluni/src/main/java/com/sun/jmx/remote/protocol/iiop/ClientProvider.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-package com.sun.jmx.remote.protocol.iiop;
-
-import java.io.IOException;
-import java.net.MalformedURLException;
-import java.util.Map;
-
-import javax.management.remote.JMXConnectorProvider;
-import javax.management.remote.JMXConnector;
-import javax.management.remote.JMXServiceURL;
-import javax.management.remote.rmi.RMIConnector;
-
-public class ClientProvider implements JMXConnectorProvider {
-
-    public JMXConnector newJMXConnector(JMXServiceURL serviceURL,
-                                        Map<String,?> environment)
-            throws IOException {
-        if (!serviceURL.getProtocol().equals("iiop")) {
-            throw new MalformedURLException("Protocol not iiop: " +
-                                            serviceURL.getProtocol());
-        }
-        return new RMIConnector(serviceURL, environment);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/remote/protocol/iiop/IIOPProxyImpl.java b/ojluni/src/main/java/com/sun/jmx/remote/protocol/iiop/IIOPProxyImpl.java
deleted file mode 100755
index d4171b2..0000000
--- a/ojluni/src/main/java/com/sun/jmx/remote/protocol/iiop/IIOPProxyImpl.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * Copyright (c) 2009, 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.jmx.remote.protocol.iiop;
-
-import org.omg.CORBA.ORB;
-import org.omg.CORBA.portable.Delegate;
-import javax.rmi.PortableRemoteObject;
-import javax.rmi.CORBA.Stub;
-
-import java.util.Properties;
-import java.rmi.Remote;
-import java.rmi.RemoteException;
-import java.rmi.NoSuchObjectException;
-
-import com.sun.jmx.remote.internal.IIOPProxy;
-
-/**
- * An implementatin of IIOPProxy that simply delegates to the appropriate
- * RMI-IIOP and CORBA APIs.
- */
-
-public class IIOPProxyImpl implements IIOPProxy {
-    public IIOPProxyImpl() { }
-
-    @Override
-    public boolean isStub(Object obj) {
-        return (obj instanceof Stub);
-    }
-
-    @Override
-    public Object getDelegate(Object stub) {
-        return ((Stub)stub)._get_delegate();
-    }
-
-    @Override
-    public void setDelegate(Object stub, Object delegate) {
-        ((Stub)stub)._set_delegate((Delegate)delegate);
-    }
-
-    @Override
-    public Object getOrb(Object stub) {
-        try {
-            return ((Stub)stub)._orb();
-        } catch (org.omg.CORBA.BAD_OPERATION x) {
-            throw new UnsupportedOperationException(x);
-        }
-    }
-
-    @Override
-    public void connect(Object stub, Object orb)
-        throws RemoteException
-    {
-        ((Stub)stub).connect((ORB)orb);
-    }
-
-    @Override
-    public boolean isOrb(Object obj) {
-        return (obj instanceof ORB);
-    }
-
-    @Override
-    public Object createOrb(String[] args, Properties props) {
-        return ORB.init(args, props);
-    }
-
-    @Override
-    public Object stringToObject(Object orb, String str) {
-        return ((ORB)orb).string_to_object(str);
-    }
-
-    @Override
-    public String objectToString(Object orb, Object obj) {
-        return ((ORB)orb).object_to_string((org.omg.CORBA.Object)obj);
-    }
-
-    @Override
-    @SuppressWarnings("unchecked")
-    public <T> T narrow(Object narrowFrom, Class<T> narrowTo) {
-        return (T)PortableRemoteObject.narrow(narrowFrom, narrowTo);
-    }
-
-    @Override
-    public void exportObject(Remote obj) throws RemoteException {
-        PortableRemoteObject.exportObject(obj);
-    }
-
-    @Override
-    public void unexportObject(Remote obj) throws NoSuchObjectException {
-        PortableRemoteObject.unexportObject(obj);
-    }
-
-    @Override
-    public Remote toStub(Remote obj) throws NoSuchObjectException {
-        return PortableRemoteObject.toStub(obj);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/remote/protocol/iiop/ProxyInputStream.java b/ojluni/src/main/java/com/sun/jmx/remote/protocol/iiop/ProxyInputStream.java
deleted file mode 100755
index e7fda60..0000000
--- a/ojluni/src/main/java/com/sun/jmx/remote/protocol/iiop/ProxyInputStream.java
+++ /dev/null
@@ -1,241 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-package com.sun.jmx.remote.protocol.iiop;
-
-import java.io.IOException;
-import java.io.Serializable;
-import java.math.BigDecimal;
-
-import org.omg.CORBA.Any;
-import org.omg.CORBA.Context;
-import org.omg.CORBA.NO_IMPLEMENT;
-import org.omg.CORBA.ORB;
-import org.omg.CORBA.TypeCode;
-import org.omg.CORBA.portable.BoxedValueHelper;
-
-@SuppressWarnings({"deprecation", "rawtypes"})
-public class ProxyInputStream extends org.omg.CORBA_2_3.portable.InputStream {
-    public ProxyInputStream(org.omg.CORBA.portable.InputStream in) {
-        this.in = in;
-    }
-
-    public boolean read_boolean() {
-        return in.read_boolean();
-    }
-
-    public char read_char() {
-        return in.read_char();
-    }
-
-    public char read_wchar() {
-        return in.read_wchar();
-    }
-
-    public byte read_octet() {
-        return in.read_octet();
-    }
-
-    public short read_short() {
-        return in.read_short();
-    }
-
-    public short read_ushort() {
-        return in.read_ushort();
-    }
-
-    public int read_long() {
-        return in.read_long();
-    }
-
-    public int read_ulong() {
-        return in.read_ulong();
-    }
-
-    public long read_longlong() {
-        return in.read_longlong();
-    }
-
-    public long read_ulonglong() {
-        return in.read_ulonglong();
-    }
-
-    public float read_float() {
-        return in.read_float();
-    }
-
-    public double read_double() {
-        return in.read_double();
-    }
-
-    public String read_string() {
-        return in.read_string();
-    }
-
-    public String read_wstring() {
-        return in.read_wstring();
-    }
-
-    public void read_boolean_array(boolean[] value, int offset, int length) {
-        in.read_boolean_array(value, offset, length);
-    }
-
-    public void read_char_array(char[] value, int offset, int length) {
-        in.read_char_array(value, offset, length);
-    }
-
-    public void read_wchar_array(char[] value, int offset, int length) {
-        in.read_wchar_array(value, offset, length);
-    }
-
-    public void read_octet_array(byte[] value, int offset, int length) {
-        in.read_octet_array(value, offset, length);
-    }
-
-    public void read_short_array(short[] value, int offset, int length) {
-        in.read_short_array(value, offset, length);
-    }
-
-    public void read_ushort_array(short[] value, int offset, int length) {
-        in.read_ushort_array(value, offset, length);
-    }
-
-    public void read_long_array(int[] value, int offset, int length) {
-        in.read_long_array(value, offset, length);
-    }
-
-    public void read_ulong_array(int[] value, int offset, int length) {
-        in.read_ulong_array(value, offset, length);
-    }
-
-    public void read_longlong_array(long[] value, int offset, int length) {
-        in.read_longlong_array(value, offset, length);
-    }
-
-    public void read_ulonglong_array(long[] value, int offset, int length) {
-        in.read_ulonglong_array(value, offset, length);
-    }
-
-    public void read_float_array(float[] value, int offset, int length) {
-        in.read_float_array(value, offset, length);
-    }
-
-    public void read_double_array(double[] value, int offset, int length) {
-        in.read_double_array(value, offset, length);
-    }
-
-    public org.omg.CORBA.Object read_Object() {
-        return in.read_Object();
-    }
-
-    public TypeCode read_TypeCode() {
-        return in.read_TypeCode();
-    }
-
-    public Any read_any() {
-        return in.read_any();
-    }
-
-    /**
-     * @deprecated
-     */
-    @Override
-    @Deprecated
-    public org.omg.CORBA.Principal read_Principal() {
-        return in.read_Principal();
-    }
-
-    @Override
-    public int read() throws IOException {
-        return in.read();
-    }
-
-    @Override
-    public BigDecimal read_fixed() {
-        return in.read_fixed();
-    }
-
-    @Override
-    public Context read_Context() {
-        return in.read_Context();
-    }
-
-    @Override
-    public org.omg.CORBA.Object read_Object(java.lang.Class clz) {
-        return in.read_Object(clz);
-    }
-
-    @Override
-    public ORB orb() {
-        return in.orb();
-    }
-
-    @Override
-    public Serializable read_value() {
-        return narrow().read_value();
-    }
-
-    @Override
-    public Serializable read_value(Class clz) {
-        return narrow().read_value(clz);
-    }
-
-    @Override
-    public Serializable read_value(BoxedValueHelper factory) {
-        return narrow().read_value(factory);
-    }
-
-    @Override
-    public Serializable read_value(String rep_id) {
-        return narrow().read_value(rep_id);
-    }
-
-    @Override
-    public Serializable read_value(Serializable value) {
-        return narrow().read_value(value);
-    }
-
-    @Override
-    public Object read_abstract_interface() {
-        return narrow().read_abstract_interface();
-    }
-
-    @Override
-    public Object read_abstract_interface(Class clz) {
-        return narrow().read_abstract_interface(clz);
-    }
-
-    protected org.omg.CORBA_2_3.portable.InputStream narrow() {
-        if (in instanceof org.omg.CORBA_2_3.portable.InputStream)
-            return (org.omg.CORBA_2_3.portable.InputStream) in;
-        throw new NO_IMPLEMENT();
-    }
-
-    public org.omg.CORBA.portable.InputStream getProxiedInputStream() {
-        return in;
-    }
-
-    protected final org.omg.CORBA.portable.InputStream in;
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/remote/protocol/iiop/ServerProvider.java b/ojluni/src/main/java/com/sun/jmx/remote/protocol/iiop/ServerProvider.java
deleted file mode 100755
index 2f248f5..0000000
--- a/ojluni/src/main/java/com/sun/jmx/remote/protocol/iiop/ServerProvider.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-package com.sun.jmx.remote.protocol.iiop;
-
-import java.io.IOException;
-import java.net.MalformedURLException;
-import java.util.Map;
-
-import javax.management.MBeanServer;
-import javax.management.remote.JMXConnectorServer;
-import javax.management.remote.JMXConnectorServerProvider;
-import javax.management.remote.JMXServiceURL;
-import javax.management.remote.rmi.RMIConnectorServer;
-
-public class ServerProvider implements JMXConnectorServerProvider {
-
-    public JMXConnectorServer newJMXConnectorServer(JMXServiceURL serviceURL,
-                                                    Map<String,?> environment,
-                                                    MBeanServer mbeanServer)
-            throws IOException {
-        if (!serviceURL.getProtocol().equals("iiop")) {
-            throw new MalformedURLException("Protocol not iiop: " +
-                                            serviceURL.getProtocol());
-        }
-        return new RMIConnectorServer(serviceURL, environment, mbeanServer);
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/remote/protocol/rmi/ClientProvider.java b/ojluni/src/main/java/com/sun/jmx/remote/protocol/rmi/ClientProvider.java
deleted file mode 100755
index cc2f6f3..0000000
--- a/ojluni/src/main/java/com/sun/jmx/remote/protocol/rmi/ClientProvider.java
+++ /dev/null
@@ -1,48 +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.
- */
-
-package com.sun.jmx.remote.protocol.rmi;
-
-import java.io.IOException;
-import java.net.MalformedURLException;
-import java.util.Map;
-
-import javax.management.remote.JMXConnectorProvider;
-import javax.management.remote.JMXConnector;
-import javax.management.remote.JMXServiceURL;
-import javax.management.remote.rmi.RMIConnector;
-
-public class ClientProvider implements JMXConnectorProvider {
-
-    public JMXConnector newJMXConnector(JMXServiceURL serviceURL,
-                                        Map<String,?> environment)
-            throws IOException {
-        if (!serviceURL.getProtocol().equals("rmi")) {
-            throw new MalformedURLException("Protocol not rmi: " +
-                                            serviceURL.getProtocol());
-        }
-        return new RMIConnector(serviceURL, environment);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/remote/protocol/rmi/ServerProvider.java b/ojluni/src/main/java/com/sun/jmx/remote/protocol/rmi/ServerProvider.java
deleted file mode 100755
index 2df3ad4..0000000
--- a/ojluni/src/main/java/com/sun/jmx/remote/protocol/rmi/ServerProvider.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-package com.sun.jmx.remote.protocol.rmi;
-
-import java.io.IOException;
-import java.net.MalformedURLException;
-import java.util.Map;
-
-import javax.management.MBeanServer;
-import javax.management.remote.JMXConnectorServer;
-import javax.management.remote.JMXConnectorServerProvider;
-import javax.management.remote.JMXServiceURL;
-import javax.management.remote.rmi.RMIConnectorServer;
-
-public class ServerProvider implements JMXConnectorServerProvider {
-
-    public JMXConnectorServer newJMXConnectorServer(JMXServiceURL serviceURL,
-                                                    Map<String,?> environment,
-                                                    MBeanServer mbeanServer)
-            throws IOException {
-        if (!serviceURL.getProtocol().equals("rmi")) {
-            throw new MalformedURLException("Protocol not rmi: " +
-                                            serviceURL.getProtocol());
-        }
-        return new RMIConnectorServer(serviceURL, environment, mbeanServer);
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/remote/security/FileLoginModule.java b/ojluni/src/main/java/com/sun/jmx/remote/security/FileLoginModule.java
deleted file mode 100755
index ccea59a..0000000
--- a/ojluni/src/main/java/com/sun/jmx/remote/security/FileLoginModule.java
+++ /dev/null
@@ -1,570 +0,0 @@
-/*
- * Copyright (c) 2004, 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.
- */
-
-package com.sun.jmx.remote.security;
-
-import com.sun.jmx.mbeanserver.GetPropertyAction;
-import com.sun.jmx.mbeanserver.Util;
-import java.io.BufferedInputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FilePermission;
-import java.io.IOException;
-import java.security.AccessControlException;
-import java.security.AccessController;
-import java.util.Arrays;
-import java.util.Hashtable;
-import java.util.Map;
-import java.util.Properties;
-
-import javax.security.auth.*;
-import javax.security.auth.callback.*;
-import javax.security.auth.login.*;
-import javax.security.auth.spi.*;
-import javax.management.remote.JMXPrincipal;
-
-import com.sun.jmx.remote.util.ClassLogger;
-import com.sun.jmx.remote.util.EnvHelp;
-import sun.management.jmxremote.ConnectorBootstrap;
-
-/**
- * This {@link LoginModule} performs file-based authentication.
- *
- * <p> A supplied username and password is verified against the
- * corresponding user credentials stored in a designated password file.
- * If successful then a new {@link JMXPrincipal} is created with the
- * user's name and it is associated with the current {@link Subject}.
- * Such principals may be identified and granted management privileges in
- * the access control file for JMX remote management or in a Java security
- * policy.
- *
- * <p> The password file comprises a list of key-value pairs as specified in
- * {@link Properties}. The key represents a user's name and the value is its
- * associated cleartext password. By default, the following password file is
- * used:
- * <pre>
- *     ${java.home}/lib/management/jmxremote.password
- * </pre>
- * A different password file can be specified via the <code>passwordFile</code>
- * configuration option.
- *
- * <p> This module recognizes the following <code>Configuration</code> options:
- * <dl>
- * <dt> <code>passwordFile</code> </dt>
- * <dd> the path to an alternative password file. It is used instead of
- *      the default password file.</dd>
- *
- * <dt> <code>useFirstPass</code> </dt>
- * <dd> if <code>true</code>, this module retrieves the username and password
- *      from the module's shared state, using "javax.security.auth.login.name"
- *      and "javax.security.auth.login.password" as the respective keys. The
- *      retrieved values are used for authentication. If authentication fails,
- *      no attempt for a retry is made, and the failure is reported back to
- *      the calling application.</dd>
- *
- * <dt> <code>tryFirstPass</code> </dt>
- * <dd> if <code>true</code>, this module retrieves the username and password
- *      from the module's shared state, using "javax.security.auth.login.name"
- *       and "javax.security.auth.login.password" as the respective keys.  The
- *      retrieved values are used for authentication. If authentication fails,
- *      the module uses the CallbackHandler to retrieve a new username and
- *      password, and another attempt to authenticate is made. If the
- *      authentication fails, the failure is reported back to the calling
- *      application.</dd>
- *
- * <dt> <code>storePass</code> </dt>
- * <dd> if <code>true</code>, this module stores the username and password
- *      obtained from the CallbackHandler in the module's shared state, using
- *      "javax.security.auth.login.name" and
- *      "javax.security.auth.login.password" as the respective keys.  This is
- *      not performed if existing values already exist for the username and
- *      password in the shared state, or if authentication fails.</dd>
- *
- * <dt> <code>clearPass</code> </dt>
- * <dd> if <code>true</code>, this module clears the username and password
- *      stored in the module's shared state after both phases of authentication
- *      (login and commit) have completed.</dd>
- * </dl>
- */
-public class FileLoginModule implements LoginModule {
-
-    // Location of the default password file
-    private static final String DEFAULT_PASSWORD_FILE_NAME =
-        AccessController.doPrivileged(new GetPropertyAction("java.home")) +
-        File.separatorChar + "lib" +
-        File.separatorChar + "management" + File.separatorChar +
-        ConnectorBootstrap.DefaultValues.PASSWORD_FILE_NAME;
-
-    // Key to retrieve the stored username
-    private static final String USERNAME_KEY =
-        "javax.security.auth.login.name";
-
-    // Key to retrieve the stored password
-    private static final String PASSWORD_KEY =
-        "javax.security.auth.login.password";
-
-    // Log messages
-    private static final ClassLogger logger =
-        new ClassLogger("javax.management.remote.misc", "FileLoginModule");
-
-    // Configurable options
-    private boolean useFirstPass = false;
-    private boolean tryFirstPass = false;
-    private boolean storePass = false;
-    private boolean clearPass = false;
-
-    // Authentication status
-    private boolean succeeded = false;
-    private boolean commitSucceeded = false;
-
-    // Supplied username and password
-    private String username;
-    private char[] password;
-    private JMXPrincipal user;
-
-    // Initial state
-    private Subject subject;
-    private CallbackHandler callbackHandler;
-    private Map<String, Object> sharedState;
-    private Map<String, ?> options;
-    private String passwordFile;
-    private String passwordFileDisplayName;
-    private boolean userSuppliedPasswordFile;
-    private boolean hasJavaHomePermission;
-    private Properties userCredentials;
-
-    /**
-     * Initialize this <code>LoginModule</code>.
-     *
-     * @param subject the <code>Subject</code> to be authenticated.
-     * @param callbackHandler a <code>CallbackHandler</code> to acquire the
-     *                  user's name and password.
-     * @param sharedState shared <code>LoginModule</code> state.
-     * @param options options specified in the login
-     *                  <code>Configuration</code> for this particular
-     *                  <code>LoginModule</code>.
-     */
-    public void initialize(Subject subject, CallbackHandler callbackHandler,
-                           Map<String,?> sharedState,
-                           Map<String,?> options)
-    {
-
-        this.subject = subject;
-        this.callbackHandler = callbackHandler;
-        this.sharedState = Util.cast(sharedState);
-        this.options = options;
-
-        // initialize any configured options
-        tryFirstPass =
-                "true".equalsIgnoreCase((String)options.get("tryFirstPass"));
-        useFirstPass =
-                "true".equalsIgnoreCase((String)options.get("useFirstPass"));
-        storePass =
-                "true".equalsIgnoreCase((String)options.get("storePass"));
-        clearPass =
-                "true".equalsIgnoreCase((String)options.get("clearPass"));
-
-        passwordFile = (String)options.get("passwordFile");
-        passwordFileDisplayName = passwordFile;
-        userSuppliedPasswordFile = true;
-
-        // set the location of the password file
-        if (passwordFile == null) {
-            passwordFile = DEFAULT_PASSWORD_FILE_NAME;
-            userSuppliedPasswordFile = false;
-            try {
-                System.getProperty("java.home");
-                hasJavaHomePermission = true;
-                passwordFileDisplayName = passwordFile;
-            } catch (SecurityException e) {
-                hasJavaHomePermission = false;
-                passwordFileDisplayName =
-                        ConnectorBootstrap.DefaultValues.PASSWORD_FILE_NAME;
-            }
-        }
-    }
-
-    /**
-     * Begin user authentication (Authentication Phase 1).
-     *
-     * <p> Acquire the user's name and password and verify them against
-     * the corresponding credentials from the password file.
-     *
-     * @return true always, since this <code>LoginModule</code>
-     *          should not be ignored.
-     * @exception FailedLoginException if the authentication fails.
-     * @exception LoginException if this <code>LoginModule</code>
-     *          is unable to perform the authentication.
-     */
-    public boolean login() throws LoginException {
-
-        try {
-            loadPasswordFile();
-        } catch (IOException ioe) {
-            LoginException le = new LoginException(
-                    "Error: unable to load the password file: " +
-                    passwordFileDisplayName);
-            throw EnvHelp.initCause(le, ioe);
-        }
-
-        if (userCredentials == null) {
-            throw new LoginException
-                ("Error: unable to locate the users' credentials.");
-        }
-
-        if (logger.debugOn()) {
-            logger.debug("login",
-                    "Using password file: " + passwordFileDisplayName);
-        }
-
-        // attempt the authentication
-        if (tryFirstPass) {
-
-            try {
-                // attempt the authentication by getting the
-                // username and password from shared state
-                attemptAuthentication(true);
-
-                // authentication succeeded
-                succeeded = true;
-                if (logger.debugOn()) {
-                    logger.debug("login",
-                        "Authentication using cached password has succeeded");
-                }
-                return true;
-
-            } catch (LoginException le) {
-                // authentication failed -- try again below by prompting
-                cleanState();
-                logger.debug("login",
-                    "Authentication using cached password has failed");
-            }
-
-        } else if (useFirstPass) {
-
-            try {
-                // attempt the authentication by getting the
-                // username and password from shared state
-                attemptAuthentication(true);
-
-                // authentication succeeded
-                succeeded = true;
-                if (logger.debugOn()) {
-                    logger.debug("login",
-                        "Authentication using cached password has succeeded");
-                }
-                return true;
-
-            } catch (LoginException le) {
-                // authentication failed
-                cleanState();
-                logger.debug("login",
-                    "Authentication using cached password has failed");
-
-                throw le;
-            }
-        }
-
-        if (logger.debugOn()) {
-            logger.debug("login", "Acquiring password");
-        }
-
-        // attempt the authentication using the supplied username and password
-        try {
-            attemptAuthentication(false);
-
-            // authentication succeeded
-            succeeded = true;
-            if (logger.debugOn()) {
-                logger.debug("login", "Authentication has succeeded");
-            }
-            return true;
-
-        } catch (LoginException le) {
-            cleanState();
-            logger.debug("login", "Authentication has failed");
-
-            throw le;
-        }
-    }
-
-    /**
-     * Complete user authentication (Authentication Phase 2).
-     *
-     * <p> This method is called if the LoginContext's
-     * overall authentication has succeeded
-     * (all the relevant REQUIRED, REQUISITE, SUFFICIENT and OPTIONAL
-     * LoginModules have succeeded).
-     *
-     * <p> If this LoginModule's own authentication attempt
-     * succeeded (checked by retrieving the private state saved by the
-     * <code>login</code> method), then this method associates a
-     * <code>JMXPrincipal</code> with the <code>Subject</code> located in the
-     * <code>LoginModule</code>.  If this LoginModule's own
-     * authentication attempted failed, then this method removes
-     * any state that was originally saved.
-     *
-     * @exception LoginException if the commit fails
-     * @return true if this LoginModule's own login and commit
-     *          attempts succeeded, or false otherwise.
-     */
-    public boolean commit() throws LoginException {
-
-        if (succeeded == false) {
-            return false;
-        } else {
-            if (subject.isReadOnly()) {
-                cleanState();
-                throw new LoginException("Subject is read-only");
-            }
-            // add Principals to the Subject
-            if (!subject.getPrincipals().contains(user)) {
-                subject.getPrincipals().add(user);
-            }
-
-            if (logger.debugOn()) {
-                logger.debug("commit",
-                    "Authentication has completed successfully");
-            }
-        }
-        // in any case, clean out state
-        cleanState();
-        commitSucceeded = true;
-        return true;
-    }
-
-    /**
-     * Abort user authentication (Authentication Phase 2).
-     *
-     * <p> This method is called if the LoginContext's overall authentication
-     * failed (the relevant REQUIRED, REQUISITE, SUFFICIENT and OPTIONAL
-     * LoginModules did not succeed).
-     *
-     * <p> If this LoginModule's own authentication attempt
-     * succeeded (checked by retrieving the private state saved by the
-     * <code>login</code> and <code>commit</code> methods),
-     * then this method cleans up any state that was originally saved.
-     *
-     * @exception LoginException if the abort fails.
-     * @return false if this LoginModule's own login and/or commit attempts
-     *          failed, and true otherwise.
-     */
-    public boolean abort() throws LoginException {
-
-        if (logger.debugOn()) {
-            logger.debug("abort",
-                "Authentication has not completed successfully");
-        }
-
-        if (succeeded == false) {
-            return false;
-        } else if (succeeded == true && commitSucceeded == false) {
-
-            // Clean out state
-            succeeded = false;
-            cleanState();
-            user = null;
-        } else {
-            // overall authentication succeeded and commit succeeded,
-            // but someone else's commit failed
-            logout();
-        }
-        return true;
-    }
-
-    /**
-     * Logout a user.
-     *
-     * <p> This method removes the Principals
-     * that were added by the <code>commit</code> method.
-     *
-     * @exception LoginException if the logout fails.
-     * @return true in all cases since this <code>LoginModule</code>
-     *          should not be ignored.
-     */
-    public boolean logout() throws LoginException {
-        if (subject.isReadOnly()) {
-            cleanState();
-            throw new LoginException ("Subject is read-only");
-        }
-        subject.getPrincipals().remove(user);
-
-        // clean out state
-        cleanState();
-        succeeded = false;
-        commitSucceeded = false;
-        user = null;
-
-        if (logger.debugOn()) {
-            logger.debug("logout", "Subject is being logged out");
-        }
-
-        return true;
-    }
-
-    /**
-     * Attempt authentication
-     *
-     * @param usePasswdFromSharedState a flag to tell this method whether
-     *          to retrieve the password from the sharedState.
-     */
-    @SuppressWarnings("unchecked")  // sharedState used as Map<String,Object>
-    private void attemptAuthentication(boolean usePasswdFromSharedState)
-        throws LoginException {
-
-        // get the username and password
-        getUsernamePassword(usePasswdFromSharedState);
-
-        String localPassword;
-
-        // userCredentials is initialized in login()
-        if (((localPassword = userCredentials.getProperty(username)) == null) ||
-            (! localPassword.equals(new String(password)))) {
-
-            // username not found or passwords do not match
-            if (logger.debugOn()) {
-                logger.debug("login", "Invalid username or password");
-            }
-            throw new FailedLoginException("Invalid username or password");
-        }
-
-        // Save the username and password in the shared state
-        // only if authentication succeeded
-        if (storePass &&
-            !sharedState.containsKey(USERNAME_KEY) &&
-            !sharedState.containsKey(PASSWORD_KEY)) {
-            sharedState.put(USERNAME_KEY, username);
-            sharedState.put(PASSWORD_KEY, password);
-        }
-
-        // Create a new user principal
-        user = new JMXPrincipal(username);
-
-        if (logger.debugOn()) {
-            logger.debug("login",
-                "User '" + username + "' successfully validated");
-        }
-    }
-
-    /*
-     * Read the password file.
-     */
-    private void loadPasswordFile() throws IOException {
-        FileInputStream fis;
-        try {
-            fis = new FileInputStream(passwordFile);
-        } catch (SecurityException e) {
-            if (userSuppliedPasswordFile || hasJavaHomePermission) {
-                throw e;
-            } else {
-                final FilePermission fp =
-                        new FilePermission(passwordFileDisplayName, "read");
-                AccessControlException ace = new AccessControlException(
-                        "access denied " + fp.toString());
-                ace.setStackTrace(e.getStackTrace());
-                throw ace;
-            }
-        }
-        try {
-            final BufferedInputStream bis = new BufferedInputStream(fis);
-            try {
-                userCredentials = new Properties();
-                userCredentials.load(bis);
-            } finally {
-                bis.close();
-            }
-        } finally {
-            fis.close();
-        }
-    }
-
-    /**
-     * Get the username and password.
-     * This method does not return any value.
-     * Instead, it sets global name and password variables.
-     *
-     * <p> Also note that this method will set the username and password
-     * values in the shared state in case subsequent LoginModules
-     * want to use them via use/tryFirstPass.
-     *
-     * @param usePasswdFromSharedState boolean that tells this method whether
-     *          to retrieve the password from the sharedState.
-     */
-    private void getUsernamePassword(boolean usePasswdFromSharedState)
-        throws LoginException {
-
-        if (usePasswdFromSharedState) {
-            // use the password saved by the first module in the stack
-            username = (String)sharedState.get(USERNAME_KEY);
-            password = (char[])sharedState.get(PASSWORD_KEY);
-            return;
-        }
-
-        // acquire username and password
-        if (callbackHandler == null)
-            throw new LoginException("Error: no CallbackHandler available " +
-                "to garner authentication information from the user");
-
-        Callback[] callbacks = new Callback[2];
-        callbacks[0] = new NameCallback("username");
-        callbacks[1] = new PasswordCallback("password", false);
-
-        try {
-            callbackHandler.handle(callbacks);
-            username = ((NameCallback)callbacks[0]).getName();
-            char[] tmpPassword = ((PasswordCallback)callbacks[1]).getPassword();
-            password = new char[tmpPassword.length];
-            System.arraycopy(tmpPassword, 0,
-                                password, 0, tmpPassword.length);
-            ((PasswordCallback)callbacks[1]).clearPassword();
-
-        } catch (IOException ioe) {
-            LoginException le = new LoginException(ioe.toString());
-            throw EnvHelp.initCause(le, ioe);
-        } catch (UnsupportedCallbackException uce) {
-            LoginException le = new LoginException(
-                                    "Error: " + uce.getCallback().toString() +
-                                    " not available to garner authentication " +
-                                    "information from the user");
-            throw EnvHelp.initCause(le, uce);
-        }
-    }
-
-    /**
-     * Clean out state because of a failed authentication attempt
-     */
-    private void cleanState() {
-        username = null;
-        if (password != null) {
-            Arrays.fill(password, ' ');
-            password = null;
-        }
-
-        if (clearPass) {
-            sharedState.remove(USERNAME_KEY);
-            sharedState.remove(PASSWORD_KEY);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/remote/security/JMXPluggableAuthenticator.java b/ojluni/src/main/java/com/sun/jmx/remote/security/JMXPluggableAuthenticator.java
deleted file mode 100755
index ab603ef..0000000
--- a/ojluni/src/main/java/com/sun/jmx/remote/security/JMXPluggableAuthenticator.java
+++ /dev/null
@@ -1,346 +0,0 @@
-/*
- * Copyright (c) 2004, 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.
- */
-
-package com.sun.jmx.remote.security;
-
-import java.io.IOException;
-import java.security.AccessController;
-import java.security.Principal;
-import java.security.PrivilegedAction;
-import java.security.PrivilegedActionException;
-import java.security.PrivilegedExceptionAction;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Properties;
-import javax.management.remote.JMXPrincipal;
-import javax.management.remote.JMXAuthenticator;
-import javax.security.auth.AuthPermission;
-import javax.security.auth.Subject;
-import javax.security.auth.callback.*;
-import javax.security.auth.login.AppConfigurationEntry;
-import javax.security.auth.login.Configuration;
-import javax.security.auth.login.LoginContext;
-import javax.security.auth.login.LoginException;
-import javax.security.auth.spi.LoginModule;
-import com.sun.jmx.remote.util.ClassLogger;
-import com.sun.jmx.remote.util.EnvHelp;
-
-/**
- * <p>This class represents a
- * <a href="{@docRoot}/../guide/security/jaas/JAASRefGuide.html">JAAS</a>
- * based implementation of the {@link JMXAuthenticator} interface.</p>
- *
- * <p>Authentication is performed by passing the supplied user's credentials
- * to one or more authentication mechanisms ({@link LoginModule}) for
- * verification. An authentication mechanism acquires the user's credentials
- * by calling {@link NameCallback} and/or {@link PasswordCallback}.
- * If authentication is successful then an authenticated {@link Subject}
- * filled in with a {@link Principal} is returned.  Authorization checks
- * will then be performed based on this <code>Subject</code>.</p>
- *
- * <p>By default, a single file-based authentication mechanism
- * {@link FileLoginModule} is configured (<code>FileLoginConfig</code>).</p>
- *
- * <p>To override the default configuration use the
- * <code>com.sun.management.jmxremote.login.config</code> management property
- * described in the JRE/lib/management/management.properties file.
- * Set this property to the name of a JAAS configuration entry and ensure that
- * the entry is loaded by the installed {@link Configuration}. In addition,
- * ensure that the authentication mechanisms specified in the entry acquire
- * the user's credentials by calling {@link NameCallback} and
- * {@link PasswordCallback} and that they return a {@link Subject} filled-in
- * with a {@link Principal}, for those users that are successfully
- * authenticated.</p>
- */
-public final class JMXPluggableAuthenticator implements JMXAuthenticator {
-
-    /**
-     * Creates an instance of <code>JMXPluggableAuthenticator</code>
-     * and initializes it with a {@link LoginContext}.
-     *
-     * @param env the environment containing configuration properties for the
-     *            authenticator. Can be null, which is equivalent to an empty
-     *            Map.
-     * @exception SecurityException if the authentication mechanism cannot be
-     *            initialized.
-     */
-    public JMXPluggableAuthenticator(Map<?, ?> env) {
-
-        String loginConfigName = null;
-        String passwordFile = null;
-
-        if (env != null) {
-            loginConfigName = (String) env.get(LOGIN_CONFIG_PROP);
-            passwordFile = (String) env.get(PASSWORD_FILE_PROP);
-        }
-
-        try {
-
-            if (loginConfigName != null) {
-                // use the supplied JAAS login configuration
-                loginContext =
-                    new LoginContext(loginConfigName, new JMXCallbackHandler());
-
-            } else {
-                // use the default JAAS login configuration (file-based)
-                SecurityManager sm = System.getSecurityManager();
-                if (sm != null) {
-                    sm.checkPermission(
-                            new AuthPermission("createLoginContext." +
-                                               LOGIN_CONFIG_NAME));
-                }
-
-                final String pf = passwordFile;
-                try {
-                    loginContext = AccessController.doPrivileged(
-                        new PrivilegedExceptionAction<LoginContext>() {
-                            public LoginContext run() throws LoginException {
-                                return new LoginContext(
-                                                LOGIN_CONFIG_NAME,
-                                                null,
-                                                new JMXCallbackHandler(),
-                                                new FileLoginConfig(pf));
-                            }
-                        });
-                } catch (PrivilegedActionException pae) {
-                    throw (LoginException) pae.getException();
-                }
-            }
-
-        } catch (LoginException le) {
-            authenticationFailure("authenticate", le);
-
-        } catch (SecurityException se) {
-            authenticationFailure("authenticate", se);
-        }
-    }
-
-    /**
-     * Authenticate the <code>MBeanServerConnection</code> client
-     * with the given client credentials.
-     *
-     * @param credentials the user-defined credentials to be passed in
-     * to the server in order to authenticate the user before creating
-     * the <code>MBeanServerConnection</code>.  This parameter must
-     * be a two-element <code>String[]</code> containing the client's
-     * username and password in that order.
-     *
-     * @return the authenticated subject containing a
-     * <code>JMXPrincipal(username)</code>.
-     *
-     * @exception SecurityException if the server cannot authenticate the user
-     * with the provided credentials.
-     */
-    public Subject authenticate(Object credentials) {
-        // Verify that credentials is of type String[].
-        //
-        if (!(credentials instanceof String[])) {
-            // Special case for null so we get a more informative message
-            if (credentials == null)
-                authenticationFailure("authenticate", "Credentials required");
-
-            final String message =
-                "Credentials should be String[] instead of " +
-                 credentials.getClass().getName();
-            authenticationFailure("authenticate", message);
-        }
-        // Verify that the array contains two elements.
-        //
-        final String[] aCredentials = (String[]) credentials;
-        if (aCredentials.length != 2) {
-            final String message =
-                "Credentials should have 2 elements not " +
-                aCredentials.length;
-            authenticationFailure("authenticate", message);
-        }
-        // Verify that username exists and the associated
-        // password matches the one supplied by the client.
-        //
-        username = aCredentials[0];
-        password = aCredentials[1];
-        if (username == null || password == null) {
-            final String message = "Username or password is null";
-            authenticationFailure("authenticate", message);
-        }
-
-        // Perform authentication
-        try {
-            loginContext.login();
-            final Subject subject = loginContext.getSubject();
-            AccessController.doPrivileged(new PrivilegedAction<Void>() {
-                    public Void run() {
-                        subject.setReadOnly();
-                        return null;
-                    }
-                });
-
-            return subject;
-
-        } catch (LoginException le) {
-            authenticationFailure("authenticate", le);
-        }
-        return null;
-    }
-
-    private static void authenticationFailure(String method, String message)
-        throws SecurityException {
-        final String msg = "Authentication failed! " + message;
-        final SecurityException e = new SecurityException(msg);
-        logException(method, msg, e);
-        throw e;
-    }
-
-    private static void authenticationFailure(String method,
-                                              Exception exception)
-        throws SecurityException {
-        String msg;
-        SecurityException se;
-        if (exception instanceof SecurityException) {
-            msg = exception.getMessage();
-            se = (SecurityException) exception;
-        } else {
-            msg = "Authentication failed! " + exception.getMessage();
-            final SecurityException e = new SecurityException(msg);
-            EnvHelp.initCause(e, exception);
-            se = e;
-        }
-        logException(method, msg, se);
-        throw se;
-    }
-
-    private static void logException(String method,
-                                     String message,
-                                     Exception e) {
-        if (logger.traceOn()) {
-            logger.trace(method, message);
-        }
-        if (logger.debugOn()) {
-            logger.debug(method, e);
-        }
-    }
-
-    private LoginContext loginContext;
-    private String username;
-    private String password;
-    private static final String LOGIN_CONFIG_PROP =
-        "jmx.remote.x.login.config";
-    private static final String LOGIN_CONFIG_NAME = "JMXPluggableAuthenticator";
-    private static final String PASSWORD_FILE_PROP =
-        "jmx.remote.x.password.file";
-    private static final ClassLogger logger =
-        new ClassLogger("javax.management.remote.misc", LOGIN_CONFIG_NAME);
-
-/**
- * This callback handler supplies the username and password (which was
- * originally supplied by the JMX user) to the JAAS login module performing
- * the authentication. No interactive user prompting is required because the
- * credentials are already available to this class (via its enclosing class).
- */
-private final class JMXCallbackHandler implements CallbackHandler {
-
-    /**
-     * Sets the username and password in the appropriate Callback object.
-     */
-    public void handle(Callback[] callbacks)
-        throws IOException, UnsupportedCallbackException {
-
-        for (int i = 0; i < callbacks.length; i++) {
-            if (callbacks[i] instanceof NameCallback) {
-                ((NameCallback)callbacks[i]).setName(username);
-
-            } else if (callbacks[i] instanceof PasswordCallback) {
-                ((PasswordCallback)callbacks[i])
-                    .setPassword(password.toCharArray());
-
-            } else {
-                throw new UnsupportedCallbackException
-                    (callbacks[i], "Unrecognized Callback");
-            }
-        }
-    }
-}
-
-/**
- * This class defines the JAAS configuration for file-based authentication.
- * It is equivalent to the following textual configuration entry:
- * <pre>
- *     JMXPluggableAuthenticator {
- *         com.sun.jmx.remote.security.FileLoginModule required;
- *     };
- * </pre>
- */
-private static class FileLoginConfig extends Configuration {
-
-    // The JAAS configuration for file-based authentication
-    private AppConfigurationEntry[] entries;
-
-    // The classname of the login module for file-based authentication
-    private static final String FILE_LOGIN_MODULE =
-        FileLoginModule.class.getName();
-
-    // The option that identifies the password file to use
-    private static final String PASSWORD_FILE_OPTION = "passwordFile";
-
-    /**
-     * Creates an instance of <code>FileLoginConfig</code>
-     *
-     * @param passwordFile A filepath that identifies the password file to use.
-     *                     If null then the default password file is used.
-     */
-    public FileLoginConfig(String passwordFile) {
-
-        Map<String, String> options;
-        if (passwordFile != null) {
-            options = new HashMap<String, String>(1);
-            options.put(PASSWORD_FILE_OPTION, passwordFile);
-        } else {
-            options = Collections.emptyMap();
-        }
-
-        entries = new AppConfigurationEntry[] {
-            new AppConfigurationEntry(FILE_LOGIN_MODULE,
-                AppConfigurationEntry.LoginModuleControlFlag.REQUIRED,
-                    options)
-        };
-    }
-
-    /**
-     * Gets the JAAS configuration for file-based authentication
-     */
-    public AppConfigurationEntry[] getAppConfigurationEntry(String name) {
-
-        return name.equals(LOGIN_CONFIG_NAME) ? entries : null;
-    }
-
-    /**
-     * Refreshes the configuration.
-     */
-    public void refresh() {
-        // the configuration is fixed
-    }
-}
-
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/remote/security/JMXSubjectDomainCombiner.java b/ojluni/src/main/java/com/sun/jmx/remote/security/JMXSubjectDomainCombiner.java
deleted file mode 100755
index 4961ac6..0000000
--- a/ojluni/src/main/java/com/sun/jmx/remote/security/JMXSubjectDomainCombiner.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-package com.sun.jmx.remote.security;
-
-import java.security.AccessControlContext;
-import java.security.AccessController;
-import java.security.CodeSource;
-import java.security.Permissions;
-import java.security.ProtectionDomain;
-import javax.security.auth.Subject;
-import javax.security.auth.SubjectDomainCombiner;
-
-/**
- * <p>This class represents an extension to the {@link SubjectDomainCombiner}
- * and is used to add a new {@link ProtectionDomain}, comprised of a null
- * codesource/signers and an empty permission set, to the access control
- * context with which this combiner is combined.</p>
- *
- * <p>When the {@link #combine} method is called the {@link ProtectionDomain}
- * is augmented with the permissions granted to the set of principals present
- * in the supplied {@link Subject}.</p>
- */
-public class JMXSubjectDomainCombiner extends SubjectDomainCombiner {
-
-    public JMXSubjectDomainCombiner(Subject s) {
-        super(s);
-    }
-
-    public ProtectionDomain[] combine(ProtectionDomain[] current,
-                                      ProtectionDomain[] assigned) {
-        // Add a new ProtectionDomain with the null codesource/signers, and
-        // the empty permission set, to the end of the array containing the
-        // 'current' protections domains, i.e. the ones that will be augmented
-        // with the permissions granted to the set of principals present in
-        // the supplied subject.
-        //
-        ProtectionDomain[] newCurrent;
-        if (current == null || current.length == 0) {
-            newCurrent = new ProtectionDomain[1];
-            newCurrent[0] = pdNoPerms;
-        } else {
-            newCurrent = new ProtectionDomain[current.length + 1];
-            for (int i = 0; i < current.length; i++) {
-                newCurrent[i] = current[i];
-            }
-            newCurrent[current.length] = pdNoPerms;
-        }
-        return super.combine(newCurrent, assigned);
-    }
-
-    /**
-     * A null CodeSource.
-     */
-    private static final CodeSource nullCodeSource =
-        new CodeSource(null, (java.security.cert.Certificate[]) null);
-
-    /**
-     * A ProtectionDomain with a null CodeSource and an empty permission set.
-     */
-    private static final ProtectionDomain pdNoPerms =
-        new ProtectionDomain(nullCodeSource, new Permissions());
-
-    /**
-     * Get the current AccessControlContext combined with the supplied subject.
-     */
-    public static AccessControlContext getContext(Subject subject) {
-        return new AccessControlContext(AccessController.getContext(),
-                                        new JMXSubjectDomainCombiner(subject));
-    }
-
-    /**
-     * Get the AccessControlContext of the domain combiner created with
-     * the supplied subject, i.e. an AccessControlContext with the domain
-     * combiner created with the supplied subject and where the caller's
-     * context has been removed.
-     */
-    public static AccessControlContext
-        getDomainCombinerContext(Subject subject) {
-        return new AccessControlContext(
-            new AccessControlContext(new ProtectionDomain[0]),
-            new JMXSubjectDomainCombiner(subject));
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/remote/security/MBeanServerAccessController.java b/ojluni/src/main/java/com/sun/jmx/remote/security/MBeanServerAccessController.java
deleted file mode 100755
index 44f8fa6..0000000
--- a/ojluni/src/main/java/com/sun/jmx/remote/security/MBeanServerAccessController.java
+++ /dev/null
@@ -1,665 +0,0 @@
-/*
- * Copyright (c) 2003, 2006, 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.jmx.remote.security;
-
-import com.sun.jmx.mbeanserver.GetPropertyAction;
-import java.io.ObjectInputStream;
-import java.security.AccessController;
-import java.util.Set;
-import javax.management.Attribute;
-import javax.management.AttributeList;
-import javax.management.AttributeNotFoundException;
-import javax.management.InstanceNotFoundException;
-import javax.management.InstanceAlreadyExistsException;
-import javax.management.IntrospectionException;
-import javax.management.InvalidAttributeValueException;
-import javax.management.ListenerNotFoundException;
-import javax.management.MBeanException;
-import javax.management.MBeanInfo;
-import javax.management.MBeanRegistrationException;
-import javax.management.MBeanServer;
-import javax.management.NotCompliantMBeanException;
-import javax.management.NotificationFilter;
-import javax.management.NotificationListener;
-import javax.management.ObjectInstance;
-import javax.management.ObjectName;
-import javax.management.OperationsException;
-import javax.management.QueryExp;
-import javax.management.ReflectionException;
-import javax.management.loading.ClassLoaderRepository;
-import javax.management.remote.MBeanServerForwarder;
-
-/**
- * <p>An object of this class implements the MBeanServer interface
- * and, for each of its methods, calls an appropriate checking method
- * and then forwards the request to a wrapped MBeanServer object.  The
- * checking method may throw a RuntimeException if the operation is
- * not allowed; in this case the request is not forwarded to the
- * wrapped object.</p>
- *
- * <p>A typical use of this class is to insert it between a connector server
- * such as the RMI connector and the MBeanServer with which the connector
- * is associated.  Requests from the connector client can then be filtered
- * and those operations that are not allowed, or not allowed in a particular
- * context, can be rejected by throwing a <code>SecurityException</code>
- * in the corresponding <code>check*</code> method.</p>
- *
- * <p>This is an abstract class, because in its implementation none of
- * the checking methods does anything.  To be useful, it must be
- * subclassed and at least one of the checking methods overridden to
- * do some checking.  Some or all of the MBeanServer methods may also
- * be overridden, for instance if the default checking behavior is
- * inappropriate.</p>
- *
- * <p>If there is no SecurityManager, then the access controller will refuse
- * to create an MBean that is a ClassLoader, which includes MLets, or to
- * execute the method addURL on an MBean that is an MLet. This prevents
- * people from opening security holes unintentionally. Otherwise, it
- * would not be obvious that granting write access grants the ability to
- * download and execute arbitrary code in the target MBean server. Advanced
- * users who do want the ability to use MLets are presumably advanced enough
- * to handle policy files and security managers.</p>
- */
-public abstract class MBeanServerAccessController
-        implements MBeanServerForwarder {
-
-    public MBeanServer getMBeanServer() {
-        return mbs;
-    }
-
-    public void setMBeanServer(MBeanServer mbs) {
-        if (mbs == null)
-            throw new IllegalArgumentException("Null MBeanServer");
-        if (this.mbs != null)
-            throw new IllegalArgumentException("MBeanServer object already " +
-                                               "initialized");
-        this.mbs = mbs;
-    }
-
-    /**
-     * Check if the caller can do read operations. This method does
-     * nothing if so, otherwise throws SecurityException.
-     */
-    protected abstract void checkRead();
-
-    /**
-     * Check if the caller can do write operations.  This method does
-     * nothing if so, otherwise throws SecurityException.
-     */
-    protected abstract void checkWrite();
-
-    /**
-     * Check if the caller can create the named class.  The default
-     * implementation of this method calls {@link #checkWrite()}.
-     */
-    protected void checkCreate(String className) {
-        checkWrite();
-    }
-
-    /**
-     * Check if the caller can unregister the named MBean.  The default
-     * implementation of this method calls {@link #checkWrite()}.
-     */
-    protected void checkUnregister(ObjectName name) {
-        checkWrite();
-    }
-
-    //--------------------------------------------
-    //--------------------------------------------
-    //
-    // Implementation of the MBeanServer interface
-    //
-    //--------------------------------------------
-    //--------------------------------------------
-
-    /**
-     * Call <code>checkRead()</code>, then forward this method to the
-     * wrapped object.
-     */
-    public void addNotificationListener(ObjectName name,
-                                        NotificationListener listener,
-                                        NotificationFilter filter,
-                                        Object handback)
-        throws InstanceNotFoundException {
-        checkRead();
-        getMBeanServer().addNotificationListener(name, listener,
-                                                 filter, handback);
-    }
-
-    /**
-     * Call <code>checkRead()</code>, then forward this method to the
-     * wrapped object.
-     */
-    public void addNotificationListener(ObjectName name,
-                                        ObjectName listener,
-                                        NotificationFilter filter,
-                                        Object handback)
-        throws InstanceNotFoundException {
-        checkRead();
-        getMBeanServer().addNotificationListener(name, listener,
-                                                 filter, handback);
-    }
-
-    /**
-     * Call <code>checkCreate(className)</code>, then forward this method to the
-     * wrapped object.
-     */
-    public ObjectInstance createMBean(String className, ObjectName name)
-        throws
-        ReflectionException,
-        InstanceAlreadyExistsException,
-        MBeanRegistrationException,
-        MBeanException,
-        NotCompliantMBeanException {
-        checkCreate(className);
-        SecurityManager sm = System.getSecurityManager();
-        if (sm == null) {
-            Object object = getMBeanServer().instantiate(className);
-            checkClassLoader(object);
-            return getMBeanServer().registerMBean(object, name);
-        } else {
-            return getMBeanServer().createMBean(className, name);
-        }
-    }
-
-    /**
-     * Call <code>checkCreate(className)</code>, then forward this method to the
-     * wrapped object.
-     */
-    public ObjectInstance createMBean(String className, ObjectName name,
-                                      Object params[], String signature[])
-        throws
-        ReflectionException,
-        InstanceAlreadyExistsException,
-        MBeanRegistrationException,
-        MBeanException,
-        NotCompliantMBeanException {
-        checkCreate(className);
-        SecurityManager sm = System.getSecurityManager();
-        if (sm == null) {
-            Object object = getMBeanServer().instantiate(className,
-                                                         params,
-                                                         signature);
-            checkClassLoader(object);
-            return getMBeanServer().registerMBean(object, name);
-        } else {
-            return getMBeanServer().createMBean(className, name,
-                                                params, signature);
-        }
-    }
-
-    /**
-     * Call <code>checkCreate(className)</code>, then forward this method to the
-     * wrapped object.
-     */
-    public ObjectInstance createMBean(String className,
-                                      ObjectName name,
-                                      ObjectName loaderName)
-        throws
-        ReflectionException,
-        InstanceAlreadyExistsException,
-        MBeanRegistrationException,
-        MBeanException,
-        NotCompliantMBeanException,
-        InstanceNotFoundException {
-        checkCreate(className);
-        SecurityManager sm = System.getSecurityManager();
-        if (sm == null) {
-            Object object = getMBeanServer().instantiate(className,
-                                                         loaderName);
-            checkClassLoader(object);
-            return getMBeanServer().registerMBean(object, name);
-        } else {
-            return getMBeanServer().createMBean(className, name, loaderName);
-        }
-    }
-
-    /**
-     * Call <code>checkCreate(className)</code>, then forward this method to the
-     * wrapped object.
-     */
-    public ObjectInstance createMBean(String className,
-                                      ObjectName name,
-                                      ObjectName loaderName,
-                                      Object params[],
-                                      String signature[])
-        throws
-        ReflectionException,
-        InstanceAlreadyExistsException,
-        MBeanRegistrationException,
-        MBeanException,
-        NotCompliantMBeanException,
-        InstanceNotFoundException {
-        checkCreate(className);
-        SecurityManager sm = System.getSecurityManager();
-        if (sm == null) {
-            Object object = getMBeanServer().instantiate(className,
-                                                         loaderName,
-                                                         params,
-                                                         signature);
-            checkClassLoader(object);
-            return getMBeanServer().registerMBean(object, name);
-        } else {
-            return getMBeanServer().createMBean(className, name, loaderName,
-                                                params, signature);
-        }
-    }
-
-    /**
-     * Call <code>checkRead()</code>, then forward this method to the
-     * wrapped object.
-     */
-    @Deprecated
-    public ObjectInputStream deserialize(ObjectName name, byte[] data)
-        throws InstanceNotFoundException, OperationsException {
-        checkRead();
-        return getMBeanServer().deserialize(name, data);
-    }
-
-    /**
-     * Call <code>checkRead()</code>, then forward this method to the
-     * wrapped object.
-     */
-    @Deprecated
-    public ObjectInputStream deserialize(String className, byte[] data)
-        throws OperationsException, ReflectionException {
-        checkRead();
-        return getMBeanServer().deserialize(className, data);
-    }
-
-    /**
-     * Call <code>checkRead()</code>, then forward this method to the
-     * wrapped object.
-     */
-    @Deprecated
-    public ObjectInputStream deserialize(String className,
-                                         ObjectName loaderName,
-                                         byte[] data)
-        throws
-        InstanceNotFoundException,
-        OperationsException,
-        ReflectionException {
-        checkRead();
-        return getMBeanServer().deserialize(className, loaderName, data);
-    }
-
-    /**
-     * Call <code>checkRead()</code>, then forward this method to the
-     * wrapped object.
-     */
-    public Object getAttribute(ObjectName name, String attribute)
-        throws
-        MBeanException,
-        AttributeNotFoundException,
-        InstanceNotFoundException,
-        ReflectionException {
-        checkRead();
-        return getMBeanServer().getAttribute(name, attribute);
-    }
-
-    /**
-     * Call <code>checkRead()</code>, then forward this method to the
-     * wrapped object.
-     */
-    public AttributeList getAttributes(ObjectName name, String[] attributes)
-        throws InstanceNotFoundException, ReflectionException {
-        checkRead();
-        return getMBeanServer().getAttributes(name, attributes);
-    }
-
-    /**
-     * Call <code>checkRead()</code>, then forward this method to the
-     * wrapped object.
-     */
-    public ClassLoader getClassLoader(ObjectName loaderName)
-        throws InstanceNotFoundException {
-        checkRead();
-        return getMBeanServer().getClassLoader(loaderName);
-    }
-
-    /**
-     * Call <code>checkRead()</code>, then forward this method to the
-     * wrapped object.
-     */
-    public ClassLoader getClassLoaderFor(ObjectName mbeanName)
-        throws InstanceNotFoundException {
-        checkRead();
-        return getMBeanServer().getClassLoaderFor(mbeanName);
-    }
-
-    /**
-     * Call <code>checkRead()</code>, then forward this method to the
-     * wrapped object.
-     */
-    public ClassLoaderRepository getClassLoaderRepository() {
-        checkRead();
-        return getMBeanServer().getClassLoaderRepository();
-    }
-
-    /**
-     * Call <code>checkRead()</code>, then forward this method to the
-     * wrapped object.
-     */
-    public String getDefaultDomain() {
-        checkRead();
-        return getMBeanServer().getDefaultDomain();
-    }
-
-    /**
-     * Call <code>checkRead()</code>, then forward this method to the
-     * wrapped object.
-     */
-    public String[] getDomains() {
-        checkRead();
-        return getMBeanServer().getDomains();
-    }
-
-    /**
-     * Call <code>checkRead()</code>, then forward this method to the
-     * wrapped object.
-     */
-    public Integer getMBeanCount() {
-        checkRead();
-        return getMBeanServer().getMBeanCount();
-    }
-
-    /**
-     * Call <code>checkRead()</code>, then forward this method to the
-     * wrapped object.
-     */
-    public MBeanInfo getMBeanInfo(ObjectName name)
-        throws
-        InstanceNotFoundException,
-        IntrospectionException,
-        ReflectionException {
-        checkRead();
-        return getMBeanServer().getMBeanInfo(name);
-    }
-
-    /**
-     * Call <code>checkRead()</code>, then forward this method to the
-     * wrapped object.
-     */
-    public ObjectInstance getObjectInstance(ObjectName name)
-        throws InstanceNotFoundException {
-        checkRead();
-        return getMBeanServer().getObjectInstance(name);
-    }
-
-    /**
-     * Call <code>checkCreate(className)</code>, then forward this method to the
-     * wrapped object.
-     */
-    public Object instantiate(String className)
-        throws ReflectionException, MBeanException {
-        checkCreate(className);
-        return getMBeanServer().instantiate(className);
-    }
-
-    /**
-     * Call <code>checkCreate(className)</code>, then forward this method to the
-     * wrapped object.
-     */
-    public Object instantiate(String className,
-                              Object params[],
-                              String signature[])
-        throws ReflectionException, MBeanException {
-        checkCreate(className);
-        return getMBeanServer().instantiate(className, params, signature);
-    }
-
-    /**
-     * Call <code>checkCreate(className)</code>, then forward this method to the
-     * wrapped object.
-     */
-    public Object instantiate(String className, ObjectName loaderName)
-        throws ReflectionException, MBeanException, InstanceNotFoundException {
-        checkCreate(className);
-        return getMBeanServer().instantiate(className, loaderName);
-    }
-
-    /**
-     * Call <code>checkCreate(className)</code>, then forward this method to the
-     * wrapped object.
-     */
-    public Object instantiate(String className, ObjectName loaderName,
-                              Object params[], String signature[])
-        throws ReflectionException, MBeanException, InstanceNotFoundException {
-        checkCreate(className);
-        return getMBeanServer().instantiate(className, loaderName,
-                                            params, signature);
-    }
-
-    /**
-     * Call <code>checkWrite()</code>, then forward this method to the
-     * wrapped object.
-     */
-    public Object invoke(ObjectName name, String operationName,
-                         Object params[], String signature[])
-        throws
-        InstanceNotFoundException,
-        MBeanException,
-        ReflectionException {
-        checkWrite();
-        checkMLetMethods(name, operationName);
-        return getMBeanServer().invoke(name, operationName, params, signature);
-    }
-
-    /**
-     * Call <code>checkRead()</code>, then forward this method to the
-     * wrapped object.
-     */
-    public boolean isInstanceOf(ObjectName name, String className)
-        throws InstanceNotFoundException {
-        checkRead();
-        return getMBeanServer().isInstanceOf(name, className);
-    }
-
-    /**
-     * Call <code>checkRead()</code>, then forward this method to the
-     * wrapped object.
-     */
-    public boolean isRegistered(ObjectName name) {
-        checkRead();
-        return getMBeanServer().isRegistered(name);
-    }
-
-    /**
-     * Call <code>checkRead()</code>, then forward this method to the
-     * wrapped object.
-     */
-    public Set<ObjectInstance> queryMBeans(ObjectName name, QueryExp query) {
-        checkRead();
-        return getMBeanServer().queryMBeans(name, query);
-    }
-
-    /**
-     * Call <code>checkRead()</code>, then forward this method to the
-     * wrapped object.
-     */
-    public Set<ObjectName> queryNames(ObjectName name, QueryExp query) {
-        checkRead();
-        return getMBeanServer().queryNames(name, query);
-    }
-
-    /**
-     * Call <code>checkWrite()</code>, then forward this method to the
-     * wrapped object.
-     */
-    public ObjectInstance registerMBean(Object object, ObjectName name)
-        throws
-        InstanceAlreadyExistsException,
-        MBeanRegistrationException,
-        NotCompliantMBeanException {
-        checkWrite();
-        return getMBeanServer().registerMBean(object, name);
-    }
-
-    /**
-     * Call <code>checkRead()</code>, then forward this method to the
-     * wrapped object.
-     */
-    public void removeNotificationListener(ObjectName name,
-                                           NotificationListener listener)
-        throws InstanceNotFoundException, ListenerNotFoundException {
-        checkRead();
-        getMBeanServer().removeNotificationListener(name, listener);
-    }
-
-    /**
-     * Call <code>checkRead()</code>, then forward this method to the
-     * wrapped object.
-     */
-    public void removeNotificationListener(ObjectName name,
-                                           NotificationListener listener,
-                                           NotificationFilter filter,
-                                           Object handback)
-        throws InstanceNotFoundException, ListenerNotFoundException {
-        checkRead();
-        getMBeanServer().removeNotificationListener(name, listener,
-                                                    filter, handback);
-    }
-
-    /**
-     * Call <code>checkRead()</code>, then forward this method to the
-     * wrapped object.
-     */
-    public void removeNotificationListener(ObjectName name,
-                                           ObjectName listener)
-        throws InstanceNotFoundException, ListenerNotFoundException {
-        checkRead();
-        getMBeanServer().removeNotificationListener(name, listener);
-    }
-
-    /**
-     * Call <code>checkRead()</code>, then forward this method to the
-     * wrapped object.
-     */
-    public void removeNotificationListener(ObjectName name,
-                                           ObjectName listener,
-                                           NotificationFilter filter,
-                                           Object handback)
-        throws InstanceNotFoundException, ListenerNotFoundException {
-        checkRead();
-        getMBeanServer().removeNotificationListener(name, listener,
-                                                    filter, handback);
-    }
-
-    /**
-     * Call <code>checkWrite()</code>, then forward this method to the
-     * wrapped object.
-     */
-    public void setAttribute(ObjectName name, Attribute attribute)
-        throws
-        InstanceNotFoundException,
-        AttributeNotFoundException,
-        InvalidAttributeValueException,
-        MBeanException,
-        ReflectionException {
-        checkWrite();
-        getMBeanServer().setAttribute(name, attribute);
-    }
-
-    /**
-     * Call <code>checkWrite()</code>, then forward this method to the
-     * wrapped object.
-     */
-    public AttributeList setAttributes(ObjectName name,
-                                       AttributeList attributes)
-        throws InstanceNotFoundException, ReflectionException {
-        checkWrite();
-        return getMBeanServer().setAttributes(name, attributes);
-    }
-
-    /**
-     * Call <code>checkUnregister()</code>, then forward this method to the
-     * wrapped object.
-     */
-    public void unregisterMBean(ObjectName name)
-        throws InstanceNotFoundException, MBeanRegistrationException {
-        checkUnregister(name);
-        getMBeanServer().unregisterMBean(name);
-    }
-
-    //----------------
-    // PRIVATE METHODS
-    //----------------
-
-    private void checkClassLoader(Object object) {
-        if (object instanceof ClassLoader)
-            throw new SecurityException("Access denied! Creating an " +
-                                        "MBean that is a ClassLoader " +
-                                        "is forbidden unless a security " +
-                                        "manager is installed.");
-    }
-
-    private void checkMLetMethods(ObjectName name, String operation)
-    throws InstanceNotFoundException {
-        // Check if security manager installed
-        SecurityManager sm = System.getSecurityManager();
-        if (sm != null) {
-            return;
-        }
-        // Check for addURL and getMBeansFromURL methods
-        if (!operation.equals("addURL") &&
-                !operation.equals("getMBeansFromURL")) {
-            return;
-        }
-        // Check if MBean is instance of MLet
-        if (!getMBeanServer().isInstanceOf(name,
-                "javax.management.loading.MLet")) {
-            return;
-        }
-        // Throw security exception
-        if (operation.equals("addURL")) { // addURL
-            throw new SecurityException("Access denied! MLet method addURL " +
-                    "cannot be invoked unless a security manager is installed.");
-        } else { // getMBeansFromURL
-            // Whether or not calling getMBeansFromURL is allowed is controlled
-            // by the value of the "jmx.remote.x.mlet.allow.getMBeansFromURL"
-            // system property. If the value of this property is true, calling
-            // the MLet's getMBeansFromURL method is allowed. The default value
-            // for this property is false.
-            final String propName = "jmx.remote.x.mlet.allow.getMBeansFromURL";
-            GetPropertyAction propAction = new GetPropertyAction(propName);
-            String propValue = AccessController.doPrivileged(propAction);
-            boolean allowGetMBeansFromURL = "true".equalsIgnoreCase(propValue);
-            if (!allowGetMBeansFromURL) {
-                throw new SecurityException("Access denied! MLet method " +
-                        "getMBeansFromURL cannot be invoked unless a " +
-                        "security manager is installed or the system property " +
-                        "-Djmx.remote.x.mlet.allow.getMBeansFromURL=true " +
-                        "is specified.");
-            }
-        }
-    }
-
-    //------------------
-    // PRIVATE VARIABLES
-    //------------------
-
-    private MBeanServer mbs;
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/remote/security/MBeanServerFileAccessController.java b/ojluni/src/main/java/com/sun/jmx/remote/security/MBeanServerFileAccessController.java
deleted file mode 100755
index 96c70c7..0000000
--- a/ojluni/src/main/java/com/sun/jmx/remote/security/MBeanServerFileAccessController.java
+++ /dev/null
@@ -1,544 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-package com.sun.jmx.remote.security;
-
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.security.AccessControlContext;
-import java.security.AccessController;
-import java.security.Principal;
-import java.security.PrivilegedAction;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import java.util.Set;
-import java.util.StringTokenizer;
-import java.util.regex.Pattern;
-import javax.management.MBeanServer;
-import javax.management.ObjectName;
-import javax.security.auth.Subject;
-
-/**
- * <p>An object of this class implements the MBeanServerAccessController
- * interface and, for each of its methods, calls an appropriate checking
- * method and then forwards the request to a wrapped MBeanServer object.
- * The checking method may throw a SecurityException if the operation is
- * not allowed; in this case the request is not forwarded to the
- * wrapped object.</p>
- *
- * <p>This class implements the {@link #checkRead()}, {@link #checkWrite()},
- * {@link #checkCreate(String)}, and {@link #checkUnregister(ObjectName)}
- * methods based on an access level properties file containing username/access
- * level pairs. The set of username/access level pairs is passed either as a
- * filename which denotes a properties file on disk, or directly as an instance
- * of the {@link Properties} class.  In both cases, the name of each property
- * represents a username, and the value of the property is the associated access
- * level.  Thus, any given username either does not exist in the properties or
- * has exactly one access level. The same access level can be shared by several
- * usernames.</p>
- *
- * <p>The supported access level values are {@code readonly} and
- * {@code readwrite}.  The {@code readwrite} access level can be
- * qualified by one or more <i>clauses</i>, where each clause looks
- * like <code>create <i>classNamePattern</i></code> or {@code
- * unregister}.  For example:</p>
- *
- * <pre>
- * monitorRole  readonly
- * controlRole  readwrite \
- *              create javax.management.timer.*,javax.management.monitor.* \
- *              unregister
- * </pre>
- *
- * <p>(The continuation lines with {@code \} come from the parser for
- * Properties files.)</p>
- */
-public class MBeanServerFileAccessController
-    extends MBeanServerAccessController {
-
-    static final String READONLY = "readonly";
-    static final String READWRITE = "readwrite";
-
-    static final String CREATE = "create";
-    static final String UNREGISTER = "unregister";
-
-    private enum AccessType {READ, WRITE, CREATE, UNREGISTER};
-
-    private static class Access {
-        final boolean write;
-        final String[] createPatterns;
-        private boolean unregister;
-
-        Access(boolean write, boolean unregister, List<String> createPatternList) {
-            this.write = write;
-            int npats = (createPatternList == null) ? 0 : createPatternList.size();
-            if (npats == 0)
-                this.createPatterns = NO_STRINGS;
-            else
-                this.createPatterns = createPatternList.toArray(new String[npats]);
-            this.unregister = unregister;
-        }
-
-        private final String[] NO_STRINGS = new String[0];
-    }
-
-    /**
-     * <p>Create a new MBeanServerAccessController that forwards all the
-     * MBeanServer requests to the MBeanServer set by invoking the {@link
-     * #setMBeanServer} method after doing access checks based on read and
-     * write permissions.</p>
-     *
-     * <p>This instance is initialized from the specified properties file.</p>
-     *
-     * @param accessFileName name of the file which denotes a properties
-     * file on disk containing the username/access level entries.
-     *
-     * @exception IOException if the file does not exist, is a
-     * directory rather than a regular file, or for some other
-     * reason cannot be opened for reading.
-     *
-     * @exception IllegalArgumentException if any of the supplied access
-     * level values differs from "readonly" or "readwrite".
-     */
-    public MBeanServerFileAccessController(String accessFileName)
-        throws IOException {
-        super();
-        this.accessFileName = accessFileName;
-        Properties props = propertiesFromFile(accessFileName);
-        parseProperties(props);
-    }
-
-    /**
-     * <p>Create a new MBeanServerAccessController that forwards all the
-     * MBeanServer requests to <code>mbs</code> after doing access checks
-     * based on read and write permissions.</p>
-     *
-     * <p>This instance is initialized from the specified properties file.</p>
-     *
-     * @param accessFileName name of the file which denotes a properties
-     * file on disk containing the username/access level entries.
-     *
-     * @param mbs the MBeanServer object to which requests will be forwarded.
-     *
-     * @exception IOException if the file does not exist, is a
-     * directory rather than a regular file, or for some other
-     * reason cannot be opened for reading.
-     *
-     * @exception IllegalArgumentException if any of the supplied access
-     * level values differs from "readonly" or "readwrite".
-     */
-    public MBeanServerFileAccessController(String accessFileName,
-                                           MBeanServer mbs)
-        throws IOException {
-        this(accessFileName);
-        setMBeanServer(mbs);
-    }
-
-    /**
-     * <p>Create a new MBeanServerAccessController that forwards all the
-     * MBeanServer requests to the MBeanServer set by invoking the {@link
-     * #setMBeanServer} method after doing access checks based on read and
-     * write permissions.</p>
-     *
-     * <p>This instance is initialized from the specified properties
-     * instance.  This constructor makes a copy of the properties
-     * instance and it is the copy that is consulted to check the
-     * username and access level of an incoming connection. The
-     * original properties object can be modified without affecting
-     * the copy. If the {@link #refresh} method is then called, the
-     * <code>MBeanServerFileAccessController</code> will make a new
-     * copy of the properties object at that time.</p>
-     *
-     * @param accessFileProps properties list containing the username/access
-     * level entries.
-     *
-     * @exception IllegalArgumentException if <code>accessFileProps</code> is
-     * <code>null</code> or if any of the supplied access level values differs
-     * from "readonly" or "readwrite".
-     */
-    public MBeanServerFileAccessController(Properties accessFileProps)
-        throws IOException {
-        super();
-        if (accessFileProps == null)
-            throw new IllegalArgumentException("Null properties");
-        originalProps = accessFileProps;
-        parseProperties(accessFileProps);
-    }
-
-    /**
-     * <p>Create a new MBeanServerAccessController that forwards all the
-     * MBeanServer requests to the MBeanServer set by invoking the {@link
-     * #setMBeanServer} method after doing access checks based on read and
-     * write permissions.</p>
-     *
-     * <p>This instance is initialized from the specified properties
-     * instance.  This constructor makes a copy of the properties
-     * instance and it is the copy that is consulted to check the
-     * username and access level of an incoming connection. The
-     * original properties object can be modified without affecting
-     * the copy. If the {@link #refresh} method is then called, the
-     * <code>MBeanServerFileAccessController</code> will make a new
-     * copy of the properties object at that time.</p>
-     *
-     * @param accessFileProps properties list containing the username/access
-     * level entries.
-     *
-     * @param mbs the MBeanServer object to which requests will be forwarded.
-     *
-     * @exception IllegalArgumentException if <code>accessFileProps</code> is
-     * <code>null</code> or if any of the supplied access level values differs
-     * from "readonly" or "readwrite".
-     */
-    public MBeanServerFileAccessController(Properties accessFileProps,
-                                           MBeanServer mbs)
-        throws IOException {
-        this(accessFileProps);
-        setMBeanServer(mbs);
-    }
-
-    /**
-     * Check if the caller can do read operations. This method does
-     * nothing if so, otherwise throws SecurityException.
-     */
-    @Override
-    public void checkRead() {
-        checkAccess(AccessType.READ, null);
-    }
-
-    /**
-     * Check if the caller can do write operations.  This method does
-     * nothing if so, otherwise throws SecurityException.
-     */
-    @Override
-    public void checkWrite() {
-        checkAccess(AccessType.WRITE, null);
-    }
-
-    /**
-     * Check if the caller can create MBeans or instances of the given class.
-     * This method does nothing if so, otherwise throws SecurityException.
-     */
-    @Override
-    public void checkCreate(String className) {
-        checkAccess(AccessType.CREATE, className);
-    }
-
-    /**
-     * Check if the caller can do unregister operations.  This method does
-     * nothing if so, otherwise throws SecurityException.
-     */
-    @Override
-    public void checkUnregister(ObjectName name) {
-        checkAccess(AccessType.UNREGISTER, null);
-    }
-
-    /**
-     * <p>Refresh the set of username/access level entries.</p>
-     *
-     * <p>If this instance was created using the
-     * {@link #MBeanServerFileAccessController(String)} or
-     * {@link #MBeanServerFileAccessController(String,MBeanServer)}
-     * constructors to specify a file from which the entries are read,
-     * the file is re-read.</p>
-     *
-     * <p>If this instance was created using the
-     * {@link #MBeanServerFileAccessController(Properties)} or
-     * {@link #MBeanServerFileAccessController(Properties,MBeanServer)}
-     * constructors then a new copy of the <code>Properties</code> object
-     * is made.</p>
-     *
-     * @exception IOException if the file does not exist, is a
-     * directory rather than a regular file, or for some other
-     * reason cannot be opened for reading.
-     *
-     * @exception IllegalArgumentException if any of the supplied access
-     * level values differs from "readonly" or "readwrite".
-     */
-    public synchronized void refresh() throws IOException {
-        Properties props;
-        if (accessFileName == null)
-            props = (Properties) originalProps;
-        else
-            props = propertiesFromFile(accessFileName);
-        parseProperties(props);
-    }
-
-    private static Properties propertiesFromFile(String fname)
-        throws IOException {
-        FileInputStream fin = new FileInputStream(fname);
-        try {
-            Properties p = new Properties();
-            p.load(fin);
-            return p;
-        } finally {
-            fin.close();
-        }
-    }
-
-    private synchronized void checkAccess(AccessType requiredAccess, String arg) {
-        final AccessControlContext acc = AccessController.getContext();
-        final Subject s =
-            AccessController.doPrivileged(new PrivilegedAction<Subject>() {
-                    public Subject run() {
-                        return Subject.getSubject(acc);
-                    }
-                });
-        if (s == null) return; /* security has not been enabled */
-        final Set principals = s.getPrincipals();
-        String newPropertyValue = null;
-        for (Iterator i = principals.iterator(); i.hasNext(); ) {
-            final Principal p = (Principal) i.next();
-            Access access = accessMap.get(p.getName());
-            if (access != null) {
-                boolean ok;
-                switch (requiredAccess) {
-                    case READ:
-                        ok = true;  // all access entries imply read
-                        break;
-                    case WRITE:
-                        ok = access.write;
-                        break;
-                    case UNREGISTER:
-                        ok = access.unregister;
-                        if (!ok && access.write)
-                            newPropertyValue = "unregister";
-                        break;
-                    case CREATE:
-                        ok = checkCreateAccess(access, arg);
-                        if (!ok && access.write)
-                            newPropertyValue = "create " + arg;
-                        break;
-                    default:
-                        throw new AssertionError();
-                }
-                if (ok)
-                    return;
-            }
-        }
-        SecurityException se = new SecurityException("Access denied! Invalid " +
-                "access level for requested MBeanServer operation.");
-        // Add some more information to help people with deployments that
-        // worked before we required explicit create clauses. We're not giving
-        // any information to the bad guys, other than that the access control
-        // is based on a file, which they could have worked out from the stack
-        // trace anyway.
-        if (newPropertyValue != null) {
-            SecurityException se2 = new SecurityException("Access property " +
-                    "for this identity should be similar to: " + READWRITE +
-                    " " + newPropertyValue);
-            se.initCause(se2);
-        }
-        throw se;
-    }
-
-    private static boolean checkCreateAccess(Access access, String className) {
-        for (String classNamePattern : access.createPatterns) {
-            if (classNameMatch(classNamePattern, className))
-                return true;
-        }
-        return false;
-    }
-
-    private static boolean classNameMatch(String pattern, String className) {
-        // We studiously avoided regexes when parsing the properties file,
-        // because that is done whenever the VM is started with the
-        // appropriate -Dcom.sun.management options, even if nobody ever
-        // creates an MBean.  We don't want to incur the overhead of loading
-        // all the regex code whenever those options are specified, but if we
-        // get as far as here then the VM is already running and somebody is
-        // doing the very unusual operation of remotely creating an MBean.
-        // Because that operation is so unusual, we don't try to optimize
-        // by hand-matching or by caching compiled Pattern objects.
-        StringBuilder sb = new StringBuilder();
-        StringTokenizer stok = new StringTokenizer(pattern, "*", true);
-        while (stok.hasMoreTokens()) {
-            String tok = stok.nextToken();
-            if (tok.equals("*"))
-                sb.append("[^.]*");
-            else
-                sb.append(Pattern.quote(tok));
-        }
-        return className.matches(sb.toString());
-    }
-
-    private void parseProperties(Properties props) {
-        this.accessMap = new HashMap<String, Access>();
-        for (Map.Entry<Object, Object> entry : props.entrySet()) {
-            String identity = (String) entry.getKey();
-            String accessString = (String) entry.getValue();
-            Access access = Parser.parseAccess(identity, accessString);
-            accessMap.put(identity, access);
-        }
-    }
-
-    private static class Parser {
-        private final static int EOS = -1;  // pseudo-codepoint "end of string"
-        static {
-            assert !Character.isWhitespace(EOS);
-        }
-
-        private final String identity;  // just for better error messages
-        private final String s;  // the string we're parsing
-        private final int len;   // s.length()
-        private int i;
-        private int c;
-        // At any point, either c is s.codePointAt(i), or i == len and
-        // c is EOS.  We use int rather than char because it is conceivable
-        // (if unlikely) that a classname in a create clause might contain
-        // "supplementary characters", the ones that don't fit in the original
-        // 16 bits for Unicode.
-
-        private Parser(String identity, String s) {
-            this.identity = identity;
-            this.s = s;
-            this.len = s.length();
-            this.i = 0;
-            if (i < len)
-                this.c = s.codePointAt(i);
-            else
-                this.c = EOS;
-        }
-
-        static Access parseAccess(String identity, String s) {
-            return new Parser(identity, s).parseAccess();
-        }
-
-        private Access parseAccess() {
-            skipSpace();
-            String type = parseWord();
-            Access access;
-            if (type.equals(READONLY))
-                access = new Access(false, false, null);
-            else if (type.equals(READWRITE))
-                access = parseReadWrite();
-            else {
-                throw syntax("Expected " + READONLY + " or " + READWRITE +
-                        ": " + type);
-            }
-            if (c != EOS)
-                throw syntax("Extra text at end of line");
-            return access;
-        }
-
-        private Access parseReadWrite() {
-            List<String> createClasses = new ArrayList<String>();
-            boolean unregister = false;
-            while (true) {
-                skipSpace();
-                if (c == EOS)
-                    break;
-                String type = parseWord();
-                if (type.equals(UNREGISTER))
-                    unregister = true;
-                else if (type.equals(CREATE))
-                    parseCreate(createClasses);
-                else
-                    throw syntax("Unrecognized keyword " + type);
-            }
-            return new Access(true, unregister, createClasses);
-        }
-
-        private void parseCreate(List<String> createClasses) {
-            while (true) {
-                skipSpace();
-                createClasses.add(parseClassName());
-                skipSpace();
-                if (c == ',')
-                    next();
-                else
-                    break;
-            }
-        }
-
-        private String parseClassName() {
-            // We don't check that classname components begin with suitable
-            // characters (so we accept 1.2.3 for example).  This means that
-            // there are only two states, which we can call dotOK and !dotOK
-            // according as a dot (.) is legal or not.  Initially we're in
-            // !dotOK since a classname can't start with a dot; after a dot
-            // we're in !dotOK again; and after any other characters we're in
-            // dotOK.  The classname is only accepted if we end in dotOK,
-            // so we reject an empty name or a name that ends with a dot.
-            final int start = i;
-            boolean dotOK = false;
-            while (true) {
-                if (c == '.') {
-                    if (!dotOK)
-                        throw syntax("Bad . in class name");
-                    dotOK = false;
-                } else if (c == '*' || Character.isJavaIdentifierPart(c))
-                    dotOK = true;
-                else
-                    break;
-                next();
-            }
-            String className = s.substring(start, i);
-            if (!dotOK)
-                throw syntax("Bad class name " + className);
-            return className;
-        }
-
-        // Advance c and i to the next character, unless already at EOS.
-        private void next() {
-            if (c != EOS) {
-                i += Character.charCount(c);
-                if (i < len)
-                    c = s.codePointAt(i);
-                else
-                    c = EOS;
-            }
-        }
-
-        private void skipSpace() {
-            while (Character.isWhitespace(c))
-                next();
-        }
-
-        private String parseWord() {
-            skipSpace();
-            if (c == EOS)
-                throw syntax("Expected word at end of line");
-            final int start = i;
-            while (c != EOS && !Character.isWhitespace(c))
-                next();
-            String word = s.substring(start, i);
-            skipSpace();
-            return word;
-        }
-
-        private IllegalArgumentException syntax(String msg) {
-            return new IllegalArgumentException(
-                    msg + " [" + identity + " " + s + "]");
-        }
-    }
-
-    private Map<String, Access> accessMap;
-    private Properties originalProps;
-    private String accessFileName;
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/remote/security/NotificationAccessController.java b/ojluni/src/main/java/com/sun/jmx/remote/security/NotificationAccessController.java
deleted file mode 100755
index 4300937..0000000
--- a/ojluni/src/main/java/com/sun/jmx/remote/security/NotificationAccessController.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-package com.sun.jmx.remote.security;
-
-import javax.management.Notification;
-import javax.management.ObjectName;
-import javax.security.auth.Subject;
-
-/**
- * <p>This interface allows to control remote access to the
- * {@code addNotificationListener} and {@code removeNotificationListener}
- * methods when the notification listener parameter is of type
- * {@code NotificationListener} and also allows to control remote access
- * to the notifications being forwarded to the interested remote listeners.</p>
- *
- * <p>An implementation of this interface can be supplied to a
- * {@code JMXConnectorServer} in the environment map through the
- * {@code com.sun.jmx.remote.notification.access.controller}
- * environment map property.</p>
- *
- * @since 1.6
- */
-public interface NotificationAccessController {
-
-    /**
-     * This method is called when a remote
-     * {@link javax.management.remote.JMXConnector} invokes the method
-     * {@link javax.management.MBeanServerConnection#addNotificationListener(ObjectName,NotificationListener,NotificationFilter,Object)}.
-     *
-     * @param connectionId the {@code connectionId} of the remote client
-     * adding the listener.
-     * @param name the name of the MBean where the listener is to be added.
-     * @param subject the authenticated subject representing the remote client.
-     *
-     * @throws SecurityException if the remote client with the supplied
-     * authenticated subject does not have the rights to add a listener
-     * to the supplied MBean.
-     */
-    public void addNotificationListener(String connectionId,
-                                        ObjectName name,
-                                        Subject subject)
-        throws SecurityException;
-
-    /**
-     * This method is called when a remote
-     * {@link javax.management.remote.JMXConnector} invokes the method
-     * {@link javax.management.MBeanServerConnection#removeNotificationListener(ObjectName,NotificationListener)}
-     * or the method
-     * {@link javax.management.MBeanServerConnection#removeNotificationListener(ObjectName,NotificationListener,NotificationFilter,Object)}.
-     *
-     * @param connectionId the {@code connectionId} of the remote client
-     * removing the listener.
-     * @param name the name of the MBean where the listener is to be removed.
-     * @param subject the authenticated subject representing the remote client.
-     *
-     * @throws SecurityException if the remote client with the supplied
-     * authenticated subject does not have the rights to remove a listener
-     * from the supplied MBean.
-     */
-    public void removeNotificationListener(String connectionId,
-                                           ObjectName name,
-                                           Subject subject)
-        throws SecurityException;
-
-    /**
-     * This method is called before the
-     * {@link javax.management.remote.JMXConnectorServer}
-     * forwards the notification to the interested remote
-     * listener represented by the authenticated subject.
-     *
-     * @param connectionId the {@code connectionId} of the remote client
-     * receiving the notification.
-     * @param name the name of the MBean forwarding the notification.
-     * @param notification the notification to be forwarded to the interested
-     * remote listener.
-     * @param subject the authenticated subject representing the remote client.
-     *
-     * @throws SecurityException if the remote client with
-     * the supplied authenticated subject does not have the
-     * rights to receive the notification.
-     */
-    public void fetchNotification(String connectionId,
-                                  ObjectName name,
-                                  Notification notification,
-                                  Subject subject)
-        throws SecurityException;
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/remote/security/SubjectDelegator.java b/ojluni/src/main/java/com/sun/jmx/remote/security/SubjectDelegator.java
deleted file mode 100755
index 4e8608a9..0000000
--- a/ojluni/src/main/java/com/sun/jmx/remote/security/SubjectDelegator.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * Copyright (c) 2003, 2006, 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.jmx.remote.security;
-
-import java.security.AccessController;
-import java.security.AccessControlContext;
-import java.security.Permission;
-import java.security.Principal;
-import java.security.PrivilegedAction;
-import javax.security.auth.Subject;
-
-import javax.management.remote.SubjectDelegationPermission;
-
-import com.sun.jmx.remote.util.CacheMap;
-
-public class SubjectDelegator {
-    private static final int PRINCIPALS_CACHE_SIZE = 10;
-    private static final int ACC_CACHE_SIZE = 10;
-
-    private CacheMap<Subject, Principal[]> principalsCache;
-    private CacheMap<Subject, AccessControlContext> accCache;
-
-    /* Return the AccessControlContext appropriate to execute an
-       operation on behalf of the delegatedSubject.  If the
-       authenticatedAccessControlContext does not have permission to
-       delegate to that subject, throw SecurityException.  */
-    public synchronized AccessControlContext
-        delegatedContext(AccessControlContext authenticatedACC,
-                         Subject delegatedSubject,
-                         boolean removeCallerContext)
-            throws SecurityException {
-
-        if (principalsCache == null || accCache == null) {
-            principalsCache =
-                    new CacheMap<Subject, Principal[]>(PRINCIPALS_CACHE_SIZE);
-            accCache =
-                    new CacheMap<Subject, AccessControlContext>(ACC_CACHE_SIZE);
-        }
-
-        // Retrieve the principals for the given
-        // delegated subject from the cache
-        //
-        Principal[] delegatedPrincipals = principalsCache.get(delegatedSubject);
-
-        // Convert the set of principals stored in the
-        // delegated subject into an array of principals
-        // and store it in the cache
-        //
-        if (delegatedPrincipals == null) {
-            delegatedPrincipals =
-                delegatedSubject.getPrincipals().toArray(new Principal[0]);
-            principalsCache.put(delegatedSubject, delegatedPrincipals);
-        }
-
-        // Retrieve the access control context for the
-        // given delegated subject from the cache
-        //
-        AccessControlContext delegatedACC = accCache.get(delegatedSubject);
-
-        // Build the access control context to be used
-        // when executing code as the delegated subject
-        // and store it in the cache
-        //
-        if (delegatedACC == null) {
-            if (removeCallerContext) {
-                delegatedACC =
-                    JMXSubjectDomainCombiner.getDomainCombinerContext(
-                                                              delegatedSubject);
-            } else {
-                delegatedACC =
-                    JMXSubjectDomainCombiner.getContext(delegatedSubject);
-            }
-            accCache.put(delegatedSubject, delegatedACC);
-        }
-
-        // Check if the subject delegation permission allows the
-        // authenticated subject to assume the identity of each
-        // principal in the delegated subject
-        //
-        final Principal[] dp = delegatedPrincipals;
-        PrivilegedAction<Void> action =
-            new PrivilegedAction<Void>() {
-                public Void run() {
-                    for (int i = 0 ; i < dp.length ; i++) {
-                        final String pname =
-                            dp[i].getClass().getName() + "." + dp[i].getName();
-                        Permission sdp =
-                            new SubjectDelegationPermission(pname);
-                        AccessController.checkPermission(sdp);
-                    }
-                    return null;
-                }
-            };
-        AccessController.doPrivileged(action, authenticatedACC);
-
-        return delegatedACC;
-    }
-
-    /**
-     * Check if the connector server creator can assume the identity of each
-     * principal in the authenticated subject, i.e. check if the connector
-     * server creator codebase contains a subject delegation permission for
-     * each principal present in the authenticated subject.
-     *
-     * @return {@code true} if the connector server creator can delegate to all
-     * the authenticated principals in the subject. Otherwise, {@code false}.
-     */
-    public static synchronized boolean
-        checkRemoveCallerContext(Subject subject) {
-        try {
-            final Principal[] dp =
-                subject.getPrincipals().toArray(new Principal[0]);
-            for (int i = 0 ; i < dp.length ; i++) {
-                final String pname =
-                    dp[i].getClass().getName() + "." + dp[i].getName();
-                final Permission sdp =
-                    new SubjectDelegationPermission(pname);
-                AccessController.checkPermission(sdp);
-            }
-        } catch (SecurityException e) {
-            return false;
-        }
-        return true;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/remote/util/CacheMap.java b/ojluni/src/main/java/com/sun/jmx/remote/util/CacheMap.java
deleted file mode 100755
index ae21d07..0000000
--- a/ojluni/src/main/java/com/sun/jmx/remote/util/CacheMap.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * Copyright (c) 2003, 2006, 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.jmx.remote.util;
-
-import java.lang.ref.SoftReference;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.WeakHashMap;
-
-import com.sun.jmx.mbeanserver.Util;
-
-/**
- * <p>Like WeakHashMap, except that the keys of the <em>n</em> most
- * recently-accessed entries are kept as {@link SoftReference soft
- * references}.  Accessing an element means creating it, or retrieving
- * it with {@link #get(Object) get}.  Because these entries are kept
- * with soft references, they will tend to remain even if their keys
- * are not referenced elsewhere.  But if memory is short, they will
- * be removed.</p>
- */
-public class CacheMap<K, V> extends WeakHashMap<K, V> {
-    /**
-     * <p>Create a <code>CacheMap</code> that can keep up to
-     * <code>nSoftReferences</code> as soft references.</p>
-     *
-     * @param nSoftReferences Maximum number of keys to keep as soft
-     * references.  Access times for {@link #get(Object) get} and
-     * {@link #put(Object, Object) put} have a component that scales
-     * linearly with <code>nSoftReferences</code>, so this value
-     * should not be too great.
-     *
-     * @throws IllegalArgumentException if
-     * <code>nSoftReferences</code> is negative.
-     */
-    public CacheMap(int nSoftReferences) {
-        if (nSoftReferences < 0) {
-            throw new IllegalArgumentException("nSoftReferences = " +
-                                               nSoftReferences);
-        }
-        this.nSoftReferences = nSoftReferences;
-    }
-
-    public V put(K key, V value) {
-        cache(key);
-        return super.put(key, value);
-    }
-
-    public V get(Object key) {
-        cache(Util.<K>cast(key));
-        return super.get(key);
-    }
-
-    /* We don't override remove(Object) or try to do something with
-       the map's iterators to detect removal.  So we may keep useless
-       entries in the soft reference list for keys that have since
-       been removed.  The assumption is that entries are added to the
-       cache but never removed.  But the behavior is not wrong if
-       they are in fact removed -- the caching is just less
-       performant.  */
-
-    private void cache(K key) {
-        Iterator<SoftReference<K>> it = cache.iterator();
-        while (it.hasNext()) {
-            SoftReference<K> sref = it.next();
-            K key1 = sref.get();
-            if (key1 == null)
-                it.remove();
-            else if (key.equals(key1)) {
-                // Move this element to the head of the LRU list
-                it.remove();
-                cache.add(0, sref);
-                return;
-            }
-        }
-
-        int size = cache.size();
-        if (size == nSoftReferences) {
-            if (size == 0)
-                return;  // degenerate case, equivalent to WeakHashMap
-            it.remove();
-        }
-
-        cache.add(0, new SoftReference<K>(key));
-    }
-
-    /* List of soft references for the most-recently referenced keys.
-       The list is in most-recently-used order, i.e. the first element
-       is the most-recently referenced key.  There are never more than
-       nSoftReferences elements of this list.
-
-       If we didn't care about J2SE 1.3 compatibility, we could use
-       LinkedHashSet in conjunction with a subclass of SoftReference
-       whose equals and hashCode reflect the referent.  */
-    private final LinkedList<SoftReference<K>> cache =
-            new LinkedList<SoftReference<K>>();
-    private final int nSoftReferences;
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/remote/util/ClassLoaderWithRepository.java b/ojluni/src/main/java/com/sun/jmx/remote/util/ClassLoaderWithRepository.java
deleted file mode 100755
index 9433bf8..0000000
--- a/ojluni/src/main/java/com/sun/jmx/remote/util/ClassLoaderWithRepository.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-package com.sun.jmx.remote.util;
-
-import javax.management.loading.ClassLoaderRepository;
-
-public class ClassLoaderWithRepository extends ClassLoader {
-    public ClassLoaderWithRepository(ClassLoaderRepository clr,
-                                     ClassLoader cl2) {
-
-        if (clr == null) throw new
-            IllegalArgumentException("Null ClassLoaderRepository object.");
-
-        repository = clr;
-        this.cl2 = cl2;
-   }
-
-    protected Class<?> findClass(String name) throws ClassNotFoundException {
-        try {
-            return repository.loadClass(name);
-        } catch (ClassNotFoundException cne) {
-            if (cl2 != null) {
-                return cl2.loadClass(name);
-            } else {
-                throw cne;
-            }
-        }
-    }
-
-    private ClassLoaderRepository repository;
-    private ClassLoader cl2;
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/remote/util/ClassLogger.java b/ojluni/src/main/java/com/sun/jmx/remote/util/ClassLogger.java
deleted file mode 100755
index a0f7a4c..0000000
--- a/ojluni/src/main/java/com/sun/jmx/remote/util/ClassLogger.java
+++ /dev/null
@@ -1,246 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-package com.sun.jmx.remote.util;
-
-import java.util.logging.Logger;
-
-public class ClassLogger {
-
-    private static final boolean ok;
-    private final String className;
-    private final Logger logger;
-
-    static {
-        /* We attempt to work even if we are running in J2SE 1.3, where
-           there is no java.util.logging.  The technique we use here is
-           not strictly portable, but it does work with Sun's J2SE 1.3
-           at least.  This is just a best effort: the Right Thing is for
-           people to use at least J2SE 1.4.  */
-        boolean loaded = false;
-        try {
-            Class<?> c = java.util.logging.Logger.class;
-            loaded = true;
-        } catch (Error e) {
-            // OK.
-            // java.util.logger package is not available in this jvm.
-        }
-        ok = loaded;
-    }
-
-    public ClassLogger(String subsystem, String className) {
-        if (ok)
-            logger = Logger.getLogger(subsystem);
-        else
-            logger = null;
-        this.className = className;
-    }
-
-    public final boolean traceOn() {
-        return finerOn();
-    }
-
-    public final boolean debugOn() {
-        return finestOn();
-    }
-
-    public final boolean warningOn() {
-        return ok && logger.isLoggable(java.util.logging.Level.WARNING);
-    }
-
-    public final boolean infoOn() {
-        return ok && logger.isLoggable(java.util.logging.Level.INFO);
-    }
-
-    public final boolean configOn() {
-        return ok && logger.isLoggable(java.util.logging.Level.CONFIG);
-    }
-
-    public final boolean fineOn() {
-        return ok && logger.isLoggable(java.util.logging.Level.FINE);
-    }
-
-    public final boolean finerOn() {
-        return ok && logger.isLoggable(java.util.logging.Level.FINER);
-    }
-
-    public final boolean finestOn() {
-        return ok && logger.isLoggable(java.util.logging.Level.FINEST);
-    }
-
-    public final void debug(String func, String msg) {
-        finest(func,msg);
-    }
-
-    public final void debug(String func, Throwable t) {
-        finest(func,t);
-    }
-
-    public final void debug(String func, String msg, Throwable t) {
-        finest(func,msg,t);
-    }
-
-    public final void trace(String func, String msg) {
-        finer(func,msg);
-    }
-
-    public final void trace(String func, Throwable t) {
-        finer(func,t);
-    }
-
-    public final void trace(String func, String msg, Throwable t) {
-        finer(func,msg,t);
-    }
-
-    public final void error(String func, String msg) {
-        severe(func,msg);
-    }
-
-    public final void error(String func, Throwable t) {
-        severe(func,t);
-    }
-
-    public final void error(String func, String msg, Throwable t) {
-        severe(func,msg,t);
-    }
-
-    public final void finest(String func, String msg) {
-        if (ok)
-            logger.logp(java.util.logging.Level.FINEST, className, func, msg);
-    }
-
-    public final void finest(String func, Throwable t) {
-        if (ok)
-            logger.logp(java.util.logging.Level.FINEST, className, func,
-                        t.toString(), t);
-    }
-
-    public final void finest(String func, String msg, Throwable t) {
-        if (ok)
-            logger.logp(java.util.logging.Level.FINEST, className, func, msg,
-                        t);
-    }
-
-    public final void finer(String func, String msg) {
-        if (ok)
-            logger.logp(java.util.logging.Level.FINER, className, func, msg);
-    }
-
-    public final void finer(String func, Throwable t) {
-        if (ok)
-            logger.logp(java.util.logging.Level.FINER, className, func,
-                        t.toString(), t);
-    }
-
-    public final void finer(String func, String msg, Throwable t) {
-        if (ok)
-            logger.logp(java.util.logging.Level.FINER, className, func, msg,t);
-    }
-
-    public final void fine(String func, String msg) {
-        if (ok)
-            logger.logp(java.util.logging.Level.FINE, className, func, msg);
-    }
-
-    public final void fine(String func, Throwable t) {
-        if (ok)
-            logger.logp(java.util.logging.Level.FINE, className, func,
-                        t.toString(), t);
-    }
-
-    public final void fine(String func, String msg, Throwable t) {
-        if (ok)
-            logger.logp(java.util.logging.Level.FINE, className, func, msg,
-                        t);
-    }
-
-    public final void config(String func, String msg) {
-        if (ok)
-            logger.logp(java.util.logging.Level.CONFIG, className, func, msg);
-    }
-
-    public final void config(String func, Throwable t) {
-        if (ok)
-            logger.logp(java.util.logging.Level.CONFIG, className, func,
-                        t.toString(), t);
-    }
-
-    public final void config(String func, String msg, Throwable t) {
-        if (ok)
-            logger.logp(java.util.logging.Level.CONFIG, className, func, msg,
-                        t);
-    }
-
-    public final void info(String func, String msg) {
-        if (ok)
-            logger.logp(java.util.logging.Level.INFO, className, func, msg);
-    }
-
-    public final void info(String func, Throwable t) {
-        if (ok)
-            logger.logp(java.util.logging.Level.INFO, className, func,
-                        t.toString(), t);
-    }
-
-    public final void info(String func, String msg, Throwable t) {
-        if (ok)
-            logger.logp(java.util.logging.Level.INFO, className, func, msg,
-                        t);
-    }
-
-    public final void warning(String func, String msg) {
-        if (ok)
-            logger.logp(java.util.logging.Level.WARNING, className, func, msg);
-    }
-
-    public final void warning(String func, Throwable t) {
-        if (ok)
-            logger.logp(java.util.logging.Level.WARNING, className, func,
-                        t.toString(), t);
-    }
-
-    public final void warning(String func, String msg, Throwable t) {
-        if (ok)
-            logger.logp(java.util.logging.Level.WARNING, className, func, msg,
-                        t);
-    }
-
-    public final void severe(String func, String msg) {
-        if (ok)
-            logger.logp(java.util.logging.Level.SEVERE, className, func, msg);
-    }
-
-    public final void severe(String func, Throwable t) {
-        if (ok)
-            logger.logp(java.util.logging.Level.SEVERE, className, func,
-                        t.toString(), t);
-    }
-
-    public final void severe(String func, String msg, Throwable t) {
-        if (ok)
-            logger.logp(java.util.logging.Level.SEVERE, className, func, msg,
-                        t);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/remote/util/EnvHelp.java b/ojluni/src/main/java/com/sun/jmx/remote/util/EnvHelp.java
deleted file mode 100755
index b8bf9d3..0000000
--- a/ojluni/src/main/java/com/sun/jmx/remote/util/EnvHelp.java
+++ /dev/null
@@ -1,768 +0,0 @@
-
-/*
- * Copyright (c) 2003, 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.
- */
-
-package com.sun.jmx.remote.util;
-
-import java.io.IOException;
-import java.io.ObjectOutputStream;
-import java.io.OutputStream;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Hashtable;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.SortedMap;
-import java.util.SortedSet;
-import java.util.StringTokenizer;
-import java.util.TreeMap;
-import java.util.TreeSet;
-
-import java.security.AccessController;
-
-import javax.management.ObjectName;
-import javax.management.MBeanServer;
-import javax.management.InstanceNotFoundException;
-import javax.management.remote.JMXConnectorFactory;
-import javax.management.remote.JMXConnectorServerFactory;
-import com.sun.jmx.mbeanserver.GetPropertyAction;
-import com.sun.jmx.remote.security.NotificationAccessController;
-import javax.management.remote.JMXConnector;
-import javax.management.remote.JMXConnectorServer;
-
-public class EnvHelp {
-
-    /**
-     * <p>Name of the attribute that specifies a default class loader
-     * object.
-     * The value associated with this attribute is a ClassLoader object</p>
-     */
-    private static final String DEFAULT_CLASS_LOADER =
-        JMXConnectorFactory.DEFAULT_CLASS_LOADER;
-
-    /**
-     * <p>Name of the attribute that specifies a default class loader
-     *    ObjectName.
-     * The value associated with this attribute is an ObjectName object</p>
-     */
-    private static final String DEFAULT_CLASS_LOADER_NAME =
-        JMXConnectorServerFactory.DEFAULT_CLASS_LOADER_NAME;
-
-    /**
-     * Get the Connector Server default class loader.
-     * <p>
-     * Returns:
-     * <p>
-     * <ul>
-     * <li>
-     *     The ClassLoader object found in <var>env</var> for
-     *     <code>jmx.remote.default.class.loader</code>, if any.
-     * </li>
-     * <li>
-     *     The ClassLoader pointed to by the ObjectName found in
-     *     <var>env</var> for <code>jmx.remote.default.class.loader.name</code>,
-     *     and registered in <var>mbs</var> if any.
-     * </li>
-     * <li>
-     *     The current thread's context classloader otherwise.
-     * </li>
-     * </ul>
-     *
-     * @param env Environment attributes.
-     * @param mbs The MBeanServer for which the connector server provides
-     * remote access.
-     *
-     * @return the connector server's default class loader.
-     *
-     * @exception IllegalArgumentException if one of the following is true:
-     * <ul>
-     * <li>both
-     *     <code>jmx.remote.default.class.loader</code> and
-     *     <code>jmx.remote.default.class.loader.name</code> are specified,
-     * </li>
-     * <li>or
-     *     <code>jmx.remote.default.class.loader</code> is not
-     *     an instance of {@link ClassLoader},
-     * </li>
-     * <li>or
-     *     <code>jmx.remote.default.class.loader.name</code> is not
-     *     an instance of {@link ObjectName},
-     * </li>
-     * <li>or
-     *     <code>jmx.remote.default.class.loader.name</code> is specified
-     *     but <var>mbs</var> is null.
-     * </li>
-     * @exception InstanceNotFoundException if
-     * <code>jmx.remote.default.class.loader.name</code> is specified
-     * and the ClassLoader MBean is not found in <var>mbs</var>.
-     */
-    public static ClassLoader resolveServerClassLoader(Map<String, ?> env,
-                                                       MBeanServer mbs)
-        throws InstanceNotFoundException {
-
-        if (env == null)
-            return Thread.currentThread().getContextClassLoader();
-
-        Object loader = env.get(DEFAULT_CLASS_LOADER);
-        Object name   = env.get(DEFAULT_CLASS_LOADER_NAME);
-
-        if (loader != null && name != null) {
-            final String msg = "Only one of " +
-                DEFAULT_CLASS_LOADER + " or " +
-                DEFAULT_CLASS_LOADER_NAME +
-                " should be specified.";
-            throw new IllegalArgumentException(msg);
-        }
-
-        if (loader == null && name == null)
-            return Thread.currentThread().getContextClassLoader();
-
-        if (loader != null) {
-            if (loader instanceof ClassLoader) {
-                return (ClassLoader) loader;
-            } else {
-                final String msg =
-                    "ClassLoader object is not an instance of " +
-                    ClassLoader.class.getName() + " : " +
-                    loader.getClass().getName();
-                throw new IllegalArgumentException(msg);
-            }
-        }
-
-        ObjectName on;
-        if (name instanceof ObjectName) {
-            on = (ObjectName) name;
-        } else {
-            final String msg =
-                "ClassLoader name is not an instance of " +
-                ObjectName.class.getName() + " : " +
-                name.getClass().getName();
-            throw new IllegalArgumentException(msg);
-        }
-
-        if (mbs == null)
-            throw new IllegalArgumentException("Null MBeanServer object");
-
-        return mbs.getClassLoader(on);
-    }
-
-    /**
-     * Get the Connector Client default class loader.
-     * <p>
-     * Returns:
-     * <p>
-     * <ul>
-     * <li>
-     *     The ClassLoader object found in <var>env</var> for
-     *     <code>jmx.remote.default.class.loader</code>, if any.
-     * </li>
-     * <li>The <tt>Thread.currentThread().getContextClassLoader()</tt>
-     *     otherwise.
-     * </li>
-     * </ul>
-     * <p>
-     * Usually a Connector Client will call
-     * <pre>
-     * ClassLoader dcl = EnvHelp.resolveClientClassLoader(env);
-     * </pre>
-     * in its <code>connect(Map env)</code> method.
-     *
-     * @return The connector client default class loader.
-     *
-     * @exception IllegalArgumentException if
-     * <code>jmx.remote.default.class.loader</code> is specified
-     * and is not an instance of {@link ClassLoader}.
-     */
-    public static ClassLoader resolveClientClassLoader(Map<String, ?> env) {
-
-        if (env == null)
-            return Thread.currentThread().getContextClassLoader();
-
-        Object loader = env.get(DEFAULT_CLASS_LOADER);
-
-        if (loader == null)
-            return Thread.currentThread().getContextClassLoader();
-
-        if (loader instanceof ClassLoader) {
-            return (ClassLoader) loader;
-        } else {
-            final String msg =
-                "ClassLoader object is not an instance of " +
-                ClassLoader.class.getName() + " : " +
-                loader.getClass().getName();
-            throw new IllegalArgumentException(msg);
-        }
-    }
-
-    /**
-     * Initialize the cause field of a {@code Throwable} object.
-     *
-     * @param throwable The {@code Throwable} on which the cause is set.
-     * @param cause The cause to set on the supplied {@code Throwable}.
-     * @return the {@code Throwable} with the cause field initialized.
-     */
-    public static <T extends Throwable> T initCause(T throwable,
-                                                    Throwable cause) {
-        throwable.initCause(cause);
-        return throwable;
-    }
-
-    /**
-     * Returns the cause field of a {@code Throwable} object.
-     * The cause field can be got only if <var>t</var> has an
-     * {@link Throwable#getCause()} method (JDK Version >= 1.4)
-     * @param t {@code Throwable} on which the cause must be set.
-     * @return the cause if getCause() succeeded and the got value is not
-     * null, otherwise return the <var>t</var>.
-     */
-    public static Throwable getCause(Throwable t) {
-        Throwable ret = t;
-
-        try {
-            java.lang.reflect.Method getCause =
-                t.getClass().getMethod("getCause", (Class<?>[]) null);
-            ret = (Throwable)getCause.invoke(t, (Object[]) null);
-
-        } catch (Exception e) {
-            // OK.
-            // it must be older than 1.4.
-        }
-        return (ret != null) ? ret: t;
-    }
-
-
-    /**
-     * <p>Name of the attribute that specifies the size of a notification
-     * buffer for a connector server. The default value is 1000.
-     */
-    public static final String BUFFER_SIZE_PROPERTY =
-        "jmx.remote.x.notification.buffer.size";
-
-
-    /**
-     * Returns the size of a notification buffer for a connector server.
-     * The default value is 1000.
-     */
-    public static int getNotifBufferSize(Map<String, ?> env) {
-        int defaultQueueSize = 1000; // default value
-
-        // keep it for the compability for the fix:
-        // 6174229: Environment parameter should be notification.buffer.size
-        // instead of buffer.size
-        final String oldP = "jmx.remote.x.buffer.size";
-
-        // the default value re-specified in the system
-        try {
-            GetPropertyAction act = new GetPropertyAction(BUFFER_SIZE_PROPERTY);
-            String s = AccessController.doPrivileged(act);
-            if (s != null) {
-                defaultQueueSize = Integer.parseInt(s);
-            } else { // try the old one
-                act = new GetPropertyAction(oldP);
-                s = AccessController.doPrivileged(act);
-                if (s != null) {
-                    defaultQueueSize = Integer.parseInt(s);
-                }
-            }
-        } catch (RuntimeException e) {
-            logger.warning("getNotifBufferSize",
-                           "Can't use System property "+
-                           BUFFER_SIZE_PROPERTY+ ": " + e);
-              logger.debug("getNotifBufferSize", e);
-        }
-
-        int queueSize = defaultQueueSize;
-
-        try {
-            if (env.containsKey(BUFFER_SIZE_PROPERTY)) {
-                queueSize = (int)EnvHelp.getIntegerAttribute(env,BUFFER_SIZE_PROPERTY,
-                                            defaultQueueSize,0,
-                                            Integer.MAX_VALUE);
-            } else { // try the old one
-                queueSize = (int)EnvHelp.getIntegerAttribute(env,oldP,
-                                            defaultQueueSize,0,
-                                            Integer.MAX_VALUE);
-            }
-        } catch (RuntimeException e) {
-            logger.warning("getNotifBufferSize",
-                           "Can't determine queuesize (using default): "+
-                           e);
-            logger.debug("getNotifBufferSize", e);
-        }
-
-        return queueSize;
-    }
-
-    /**
-     * <p>Name of the attribute that specifies the maximum number of
-     * notifications that a client will fetch from its server.. The
-     * value associated with this attribute should be an
-     * <code>Integer</code> object.  The default value is 1000.</p>
-     */
-    public static final String MAX_FETCH_NOTIFS =
-        "jmx.remote.x.notification.fetch.max";
-
-    /**
-     * Returns the maximum notification number which a client will
-     * fetch every time.
-     */
-    public static int getMaxFetchNotifNumber(Map<String, ?> env) {
-        return (int) getIntegerAttribute(env, MAX_FETCH_NOTIFS, 1000, 1,
-                                         Integer.MAX_VALUE);
-    }
-
-    /**
-     * <p>Name of the attribute that specifies the timeout for a
-     * client to fetch notifications from its server. The value
-     * associated with this attribute should be a <code>Long</code>
-     * object.  The default value is 60000 milliseconds.</p>
-     */
-    public static final String FETCH_TIMEOUT =
-        "jmx.remote.x.notification.fetch.timeout";
-
-    /**
-     * Returns the timeout for a client to fetch notifications.
-     */
-    public static long getFetchTimeout(Map<String, ?> env) {
-        return getIntegerAttribute(env, FETCH_TIMEOUT, 60000L, 0,
-                Long.MAX_VALUE);
-    }
-
-    /**
-     * <p>Name of the attribute that specifies an object that will check
-     * accesses to add/removeNotificationListener and also attempts to
-     * receive notifications.  The value associated with this attribute
-     * should be a <code>NotificationAccessController</code> object.
-     * The default value is null.</p>
-     * This field is not public because of its com.sun dependency.
-     */
-    public static final String NOTIF_ACCESS_CONTROLLER =
-            "com.sun.jmx.remote.notification.access.controller";
-
-    public static NotificationAccessController getNotificationAccessController(
-            Map<String, ?> env) {
-        return (env == null) ? null :
-            (NotificationAccessController) env.get(NOTIF_ACCESS_CONTROLLER);
-    }
-
-    /**
-     * Get an integer-valued attribute with name <code>name</code>
-     * from <code>env</code>.  If <code>env</code> is null, or does
-     * not contain an entry for <code>name</code>, return
-     * <code>defaultValue</code>.  The value may be a Number, or it
-     * may be a String that is parsable as a long.  It must be at
-     * least <code>minValue</code> and at most<code>maxValue</code>.
-     *
-     * @throws IllegalArgumentException if <code>env</code> contains
-     * an entry for <code>name</code> but it does not meet the
-     * constraints above.
-     */
-    public static long getIntegerAttribute(Map<String, ?> env, String name,
-                                           long defaultValue, long minValue,
-                                           long maxValue) {
-        final Object o;
-
-        if (env == null || (o = env.get(name)) == null)
-            return defaultValue;
-
-        final long result;
-
-        if (o instanceof Number)
-            result = ((Number) o).longValue();
-        else if (o instanceof String) {
-            result = Long.parseLong((String) o);
-            /* May throw a NumberFormatException, which is an
-               IllegalArgumentException.  */
-        } else {
-            final String msg =
-                "Attribute " + name + " value must be Integer or String: " + o;
-            throw new IllegalArgumentException(msg);
-        }
-
-        if (result < minValue) {
-            final String msg =
-                "Attribute " + name + " value must be at least " + minValue +
-                ": " + result;
-            throw new IllegalArgumentException(msg);
-        }
-
-        if (result > maxValue) {
-            final String msg =
-                "Attribute " + name + " value must be at most " + maxValue +
-                ": " + result;
-            throw new IllegalArgumentException(msg);
-        }
-
-        return result;
-    }
-
-    public static final String DEFAULT_ORB="java.naming.corba.orb";
-
-    /* Check that all attributes have a key that is a String.
-       Could make further checks, e.g. appropriate types for attributes.  */
-    public static void checkAttributes(Map<?, ?> attributes) {
-        for (Object key : attributes.keySet()) {
-            if (!(key instanceof String)) {
-                final String msg =
-                    "Attributes contain key that is not a string: " + key;
-                throw new IllegalArgumentException(msg);
-            }
-        }
-    }
-
-    /* Return a writable map containing only those attributes that are
-       serializable, and that are not hidden by
-       jmx.remote.x.hidden.attributes or the default list of hidden
-       attributes.  */
-    public static <V> Map<String, V> filterAttributes(Map<String, V> attributes) {
-        if (logger.traceOn()) {
-            logger.trace("filterAttributes", "starts");
-        }
-
-        SortedMap<String, V> map = new TreeMap<String, V>(attributes);
-        purgeUnserializable(map.values());
-        hideAttributes(map);
-        return map;
-    }
-
-    /**
-     * Remove from the given Collection any element that is not a
-     * serializable object.
-     */
-    private static void purgeUnserializable(Collection<?> objects) {
-        logger.trace("purgeUnserializable", "starts");
-        ObjectOutputStream oos = null;
-        int i = 0;
-        for (Iterator<?> it = objects.iterator(); it.hasNext(); i++) {
-            Object v = it.next();
-
-            if (v == null || v instanceof String) {
-                if (logger.traceOn()) {
-                    logger.trace("purgeUnserializable",
-                                 "Value trivially serializable: " + v);
-                }
-                continue;
-            }
-
-            try {
-                if (oos == null)
-                    oos = new ObjectOutputStream(new SinkOutputStream());
-                oos.writeObject(v);
-                if (logger.traceOn()) {
-                    logger.trace("purgeUnserializable",
-                                 "Value serializable: " + v);
-                }
-            } catch (IOException e) {
-                if (logger.traceOn()) {
-                    logger.trace("purgeUnserializable",
-                                 "Value not serializable: " + v + ": " +
-                                 e);
-                }
-                it.remove();
-                oos = null; // ObjectOutputStream invalid after exception
-            }
-        }
-    }
-
-    /**
-     * The value of this attribute, if present, is a string specifying
-     * what other attributes should not appear in
-     * JMXConnectorServer.getAttributes().  It is a space-separated
-     * list of attribute patterns, where each pattern is either an
-     * attribute name, or an attribute prefix followed by a "*"
-     * character.  The "*" has no special significance anywhere except
-     * at the end of a pattern.  By default, this list is added to the
-     * list defined by {@link #DEFAULT_HIDDEN_ATTRIBUTES} (which
-     * uses the same format).  If the value of this attribute begins
-     * with an "=", then the remainder of the string defines the
-     * complete list of attribute patterns.
-     */
-    public static final String HIDDEN_ATTRIBUTES =
-        "jmx.remote.x.hidden.attributes";
-
-    /**
-     * Default list of attributes not to show.
-     * @see #HIDDEN_ATTRIBUTES
-     */
-    /* This list is copied directly from the spec, plus
-       java.naming.security.*.  Most of the attributes here would have
-       been eliminated from the map anyway because they are typically
-       not serializable.  But just in case they are, we list them here
-       to conform to the spec.  */
-    public static final String DEFAULT_HIDDEN_ATTRIBUTES =
-        "java.naming.security.* " +
-        "jmx.remote.authenticator " +
-        "jmx.remote.context " +
-        "jmx.remote.default.class.loader " +
-        "jmx.remote.message.connection.server " +
-        "jmx.remote.object.wrapping " +
-        "jmx.remote.rmi.client.socket.factory " +
-        "jmx.remote.rmi.server.socket.factory " +
-        "jmx.remote.sasl.callback.handler " +
-        "jmx.remote.tls.socket.factory " +
-        "jmx.remote.x.access.file " +
-        "jmx.remote.x.password.file ";
-
-    private static final SortedSet<String> defaultHiddenStrings =
-            new TreeSet<String>();
-    private static final SortedSet<String> defaultHiddenPrefixes =
-            new TreeSet<String>();
-
-    private static void hideAttributes(SortedMap<String, ?> map) {
-        if (map.isEmpty())
-            return;
-
-        final SortedSet<String> hiddenStrings;
-        final SortedSet<String> hiddenPrefixes;
-
-        String hide = (String) map.get(HIDDEN_ATTRIBUTES);
-        if (hide != null) {
-            if (hide.startsWith("="))
-                hide = hide.substring(1);
-            else
-                hide += " " + DEFAULT_HIDDEN_ATTRIBUTES;
-            hiddenStrings = new TreeSet<String>();
-            hiddenPrefixes = new TreeSet<String>();
-            parseHiddenAttributes(hide, hiddenStrings, hiddenPrefixes);
-        } else {
-            hide = DEFAULT_HIDDEN_ATTRIBUTES;
-            synchronized (defaultHiddenStrings) {
-                if (defaultHiddenStrings.isEmpty()) {
-                    parseHiddenAttributes(hide,
-                                          defaultHiddenStrings,
-                                          defaultHiddenPrefixes);
-                }
-                hiddenStrings = defaultHiddenStrings;
-                hiddenPrefixes = defaultHiddenPrefixes;
-            }
-        }
-
-        /* Construct a string that is greater than any key in the map.
-           Setting a string-to-match or a prefix-to-match to this string
-           guarantees that we will never call next() on the corresponding
-           iterator.  */
-        String sentinelKey = map.lastKey() + "X";
-        Iterator<String> keyIterator = map.keySet().iterator();
-        Iterator<String> stringIterator = hiddenStrings.iterator();
-        Iterator<String> prefixIterator = hiddenPrefixes.iterator();
-
-        String nextString;
-        if (stringIterator.hasNext())
-            nextString = stringIterator.next();
-        else
-            nextString = sentinelKey;
-        String nextPrefix;
-        if (prefixIterator.hasNext())
-            nextPrefix = prefixIterator.next();
-        else
-            nextPrefix = sentinelKey;
-
-        /* Read each key in sorted order and, if it matches a string
-           or prefix, remove it. */
-    keys:
-        while (keyIterator.hasNext()) {
-            String key = keyIterator.next();
-
-            /* Continue through string-match values until we find one
-               that is either greater than the current key, or equal
-               to it.  In the latter case, remove the key.  */
-            int cmp = +1;
-            while ((cmp = nextString.compareTo(key)) < 0) {
-                if (stringIterator.hasNext())
-                    nextString = stringIterator.next();
-                else
-                    nextString = sentinelKey;
-            }
-            if (cmp == 0) {
-                keyIterator.remove();
-                continue keys;
-            }
-
-            /* Continue through the prefix values until we find one
-               that is either greater than the current key, or a
-               prefix of it.  In the latter case, remove the key.  */
-            while (nextPrefix.compareTo(key) <= 0) {
-                if (key.startsWith(nextPrefix)) {
-                    keyIterator.remove();
-                    continue keys;
-                }
-                if (prefixIterator.hasNext())
-                    nextPrefix = prefixIterator.next();
-                else
-                    nextPrefix = sentinelKey;
-            }
-        }
-    }
-
-    private static void parseHiddenAttributes(String hide,
-                                              SortedSet<String> hiddenStrings,
-                                              SortedSet<String> hiddenPrefixes) {
-        final StringTokenizer tok = new StringTokenizer(hide);
-        while (tok.hasMoreTokens()) {
-            String s = tok.nextToken();
-            if (s.endsWith("*"))
-                hiddenPrefixes.add(s.substring(0, s.length() - 1));
-            else
-                hiddenStrings.add(s);
-        }
-    }
-
-    /**
-     * <p>Name of the attribute that specifies the timeout to keep a
-     * server side connection after answering last client request.
-     * The default value is 120000 milliseconds.</p>
-     */
-    public static final String SERVER_CONNECTION_TIMEOUT =
-        "jmx.remote.x.server.connection.timeout";
-
-    /**
-     * Returns the server side connection timeout.
-     */
-    public static long getServerConnectionTimeout(Map<String, ?> env) {
-        return getIntegerAttribute(env, SERVER_CONNECTION_TIMEOUT, 120000L,
-                                   0, Long.MAX_VALUE);
-    }
-
-    /**
-     * <p>Name of the attribute that specifies the period in
-     * millisecond for a client to check its connection.  The default
-     * value is 60000 milliseconds.</p>
-     */
-    public static final String CLIENT_CONNECTION_CHECK_PERIOD =
-        "jmx.remote.x.client.connection.check.period";
-
-    /**
-     * Returns the client connection check period.
-     */
-    public static long getConnectionCheckPeriod(Map<String, ?> env) {
-        return getIntegerAttribute(env, CLIENT_CONNECTION_CHECK_PERIOD, 60000L,
-                                   0, Long.MAX_VALUE);
-    }
-
-    /**
-     * Computes a boolean value from a string value retrieved from a
-     * property in the given map.
-     *
-     * @param stringBoolean the string value that must be converted
-     * into a boolean value.
-     *
-     * @return
-     *   <ul>
-     *   <li>{@code false} if {@code stringBoolean} is {@code null}</li>
-     *   <li>{@code false} if
-     *       {@code stringBoolean.equalsIgnoreCase("false")}
-     *       is {@code true}</li>
-     *   <li>{@code true} if
-     *       {@code stringBoolean.equalsIgnoreCase("true")}
-     *       is {@code true}</li>
-     *   </ul>
-     *
-     * @throws IllegalArgumentException if
-     * {@code ((String)env.get(prop)).equalsIgnoreCase("false")} and
-     * {@code ((String)env.get(prop)).equalsIgnoreCase("true")} are
-     * {@code false}.
-     */
-    public static boolean computeBooleanFromString(String stringBoolean) {
-        // returns a default value of 'false' if no property is found...
-        return computeBooleanFromString(stringBoolean,false);
-    }
-
-    /**
-     * Computes a boolean value from a string value retrieved from a
-     * property in the given map.
-     *
-     * @param stringBoolean the string value that must be converted
-     * into a boolean value.
-     * @param defaultValue a default value to return in case no property
-     *        was defined.
-     *
-     * @return
-     *   <ul>
-     *   <li>{@code defaultValue} if {@code stringBoolean}
-     *   is {@code null}</li>
-     *   <li>{@code false} if
-     *       {@code stringBoolean.equalsIgnoreCase("false")}
-     *       is {@code true}</li>
-     *   <li>{@code true} if
-     *       {@code stringBoolean.equalsIgnoreCase("true")}
-     *       is {@code true}</li>
-     *   </ul>
-     *
-     * @throws IllegalArgumentException if
-     * {@code ((String)env.get(prop)).equalsIgnoreCase("false")} and
-     * {@code ((String)env.get(prop)).equalsIgnoreCase("true")} are
-     * {@code false}.
-     */
-    public static boolean computeBooleanFromString( String stringBoolean, boolean defaultValue) {
-        if (stringBoolean == null)
-            return defaultValue;
-        else if (stringBoolean.equalsIgnoreCase("true"))
-            return true;
-        else if (stringBoolean.equalsIgnoreCase("false"))
-            return false;
-        else
-            throw new IllegalArgumentException(
-                "Property value must be \"true\" or \"false\" instead of \"" +
-                stringBoolean + "\"");
-    }
-
-    /**
-     * Converts a map into a valid hash table, i.e.
-     * it removes all the 'null' values from the map.
-     */
-    public static <K, V> Hashtable<K, V> mapToHashtable(Map<K, V> map) {
-        HashMap<K, V> m = new HashMap<K, V>(map);
-        if (m.containsKey(null)) m.remove(null);
-        for (Iterator<?> i = m.values().iterator(); i.hasNext(); )
-            if (i.next() == null) i.remove();
-        return new Hashtable<K, V>(m);
-    }
-
-    /**
-     * <p>Name of the attribute that specifies whether a connector server
-     * should not prevent the VM from exiting
-     */
-    public static final String JMX_SERVER_DAEMON = "jmx.remote.x.daemon";
-
-    /**
-     * Returns true if {@value SERVER_DAEMON} is specified in the {@code env}
-     * as a key and its value is a String and it is equal to true ignoring case.
-     *
-     * @param env
-     * @return
-     */
-    public static boolean isServerDaemon(Map<String, ?> env) {
-        return (env != null) &&
-                ("true".equalsIgnoreCase((String)env.get(JMX_SERVER_DAEMON)));
-    }
-
-    private static final class SinkOutputStream extends OutputStream {
-        public void write(byte[] b, int off, int len) {}
-        public void write(int b) {}
-    }
-
-    private static final ClassLogger logger =
-        new ClassLogger("javax.management.remote.misc", "EnvHelp");
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/remote/util/OrderClassLoaders.java b/ojluni/src/main/java/com/sun/jmx/remote/util/OrderClassLoaders.java
deleted file mode 100755
index 66063c1..0000000
--- a/ojluni/src/main/java/com/sun/jmx/remote/util/OrderClassLoaders.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-package com.sun.jmx.remote.util;
-
-import sun.reflect.misc.ReflectUtil;
-
-public class OrderClassLoaders extends ClassLoader {
-    public OrderClassLoaders(ClassLoader cl1, ClassLoader cl2) {
-        super(cl1);
-
-        this.cl2 = cl2;
-    }
-
-    protected Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException {
-        ReflectUtil.checkPackageAccess(name);
-        try {
-            return super.loadClass(name, resolve);
-        } catch (ClassNotFoundException cne) {
-            if (cl2 != null) {
-                return cl2.loadClass(name);
-            } else {
-                throw cne;
-            }
-        }
-    }
-
-    private ClassLoader cl2;
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/BerDecoder.java b/ojluni/src/main/java/com/sun/jmx/snmp/BerDecoder.java
deleted file mode 100755
index 40b4c60..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/BerDecoder.java
+++ /dev/null
@@ -1,757 +0,0 @@
-/*
- * Copyright (c) 1997, 2007, 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.jmx.snmp;
-
-
-
-
-/**
- * The <CODE>BerDecoder</CODE> class is used for decoding
- * BER-encoded data.
- *
- * A <CODE>BerDecoder</CODE> needs to be set up with the byte string containing
- * the encoding. It maintains a current position in the byte string.
- *
- * Methods allows to fetch integer, string, OID, etc., from the current
- * position. After a fetch the current position is moved forward.
- *
- * A fetch throws a <CODE>BerException</CODE> if the encoding is not of the
- * expected type.
- *
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- *
- * @since 1.5
- */
-
-public class BerDecoder {
-
-  /**
-  * Constructs a new decoder and attaches it to the specified byte string.
-  *
-  * @param b The byte string containing the encoded data.
-  */
-
-  public BerDecoder(byte b[]) {
-    bytes = b ;
-    reset() ;
-  }
-
-  public void reset() {
-    next = 0 ;
-    stackTop = 0 ;
-  }
-
-  /**
-  * Fetch an integer.
-  *
-  * @return The decoded integer.
-  *
-  * @exception BerException Current position does not point to an integer.
-  */
-
-  public int fetchInteger() throws BerException {
-    return fetchInteger(IntegerTag) ;
-  }
-
-
-  /**
-  * Fetch an integer with the specified tag.
-  *
-  * @param tag The expected tag.
-  *
-  * @return The decoded integer.
-  *
-  * @exception BerException Current position does not point to an integer
-  *                         or the tag is not the expected one.
-  */
-
-  public int fetchInteger(int tag) throws BerException {
-    int result = 0 ;
-    final int backup = next ;
-    try {
-      if (fetchTag() != tag) {
-        throw new BerException() ;
-      }
-      result = fetchIntegerValue() ;
-    }
-    catch(BerException e) {
-      next = backup ;
-      throw e ;
-    }
-
-    return result ;
-  }
-
-
-
-  /**
-  * Fetch an integer and return a long value.
-  *
-  * @return The decoded integer.
-  *
-  * @exception BerException Current position does not point to an integer.
-  */
-
-  public long fetchIntegerAsLong() throws BerException {
-    return fetchIntegerAsLong(IntegerTag) ;
-  }
-
-
-  /**
-  * Fetch an integer with the specified tag and return a long value.
-  *
-  * @param tag The expected tag.
-  *
-  * @return The decoded integer.
-  *
-  * @exception BerException Current position does not point to an integer
-  *                         or the tag is not the expected one.
-  */
-
-  public long fetchIntegerAsLong(int tag) throws BerException {
-    long result = 0 ;
-    final int backup = next ;
-    try {
-      if (fetchTag() != tag) {
-        throw new BerException() ;
-      }
-      result = fetchIntegerValueAsLong() ;
-    }
-    catch(BerException e) {
-      next = backup ;
-      throw e ;
-    }
-
-    return result ;
-  }
-
-
-
-  /**
-  * Fetch an octet string.
-  *
-  * @return The decoded string.
-  *
-  * @exception BerException Current position does not point to an octet string.
-  */
-
-  public byte[] fetchOctetString() throws BerException {
-    return fetchOctetString(OctetStringTag) ;
-  }
-
-
-  /**
-  * Fetch an octet string with a specified tag.
-  *
-  * @param tag The expected tag.
-  *
-  * @return The decoded string.
-  *
-  * @exception BerException Current position does not point to an octet string
-  *                         or the tag is not the expected one.
-  */
-
-  public byte[] fetchOctetString(int tag) throws BerException {
-    byte[] result = null ;
-    final int backup = next ;
-    try {
-      if (fetchTag() != tag) {
-        throw new BerException() ;
-      }
-      result = fetchStringValue() ;
-    }
-    catch(BerException e) {
-      next = backup ;
-      throw e ;
-    }
-
-    return result ;
-  }
-
-
-  /**
-  * Fetch an object identifier.
-  *
-  * @return The decoded object identifier as an array of long.
-  */
-
-  public long[] fetchOid() throws BerException {
-    return fetchOid(OidTag) ;
-  }
-
-
-  /**
-  * Fetch an object identifier with a specified tag.
-  *
-  * @param tag The expected tag.
-  *
-  * @return The decoded object identifier as an array of long.
-  *
-  * @exception BerException Current position does not point to an oid
-  *                         or the tag is not the expected one.
-  */
-
-  public long[] fetchOid(int tag) throws BerException {
-    long[] result = null ;
-    final int backup = next ;
-    try {
-      if (fetchTag() != tag) {
-        throw new BerException() ;
-      }
-      result = fetchOidValue() ;
-    }
-    catch(BerException e) {
-      next = backup ;
-      throw e ;
-    }
-
-    return result ;
-  }
-
-
-  /**
-  * Fetch a <CODE>NULL</CODE> value.
-  *
-  * @exception BerException Current position does not point to <CODE>NULL</CODE> value.
-  */
-
-  public void fetchNull() throws BerException {
-    fetchNull(NullTag) ;
-  }
-
-
-  /**
-  * Fetch a <CODE>NULL</CODE> value with a specified tag.
-  *
-  * @param tag The expected tag.
-  *
-  * @exception BerException Current position does not point to
-  *            <CODE>NULL</CODE> value or the tag is not the expected one.
-  */
-
-  public void fetchNull(int tag) throws BerException {
-    final int backup = next ;
-    try {
-      if (fetchTag() != tag) {
-        throw new BerException() ;
-      }
-      final int length = fetchLength();
-      if (length != 0) throw new BerException();
-    }
-    catch(BerException e) {
-      next = backup ;
-      throw e ;
-    }
-  }
-
-
-
-  /**
-  * Fetch an <CODE>ANY</CODE> value. In fact, this method does not decode anything
-  * it simply returns the next TLV as an array of bytes.
-  *
-  * @return The TLV as a byte array.
-  *
-  * @exception BerException The next TLV is really badly encoded...
-  */
-
-  public byte[] fetchAny() throws BerException {
-    byte[] result = null ;
-    final int backup = next ;
-    try {
-      final int tag = fetchTag() ;
-      final int contentLength = fetchLength() ;
-      if (contentLength < 0) throw new BerException() ;
-      final int tlvLength = next + contentLength - backup ;
-      if (contentLength > (bytes.length - next))
-          throw new IndexOutOfBoundsException("Decoded length exceeds buffer");
-      final byte[] data = new byte[tlvLength] ;
-      java.lang.System.arraycopy(bytes,backup,data,0,tlvLength);
-      // for (int i = 0 ; i < tlvLength ; i++) {
-      //  data[i] = bytes[backup + i] ;
-      // }
-      next = next + contentLength ;
-      result = data;
-    }
-    catch(IndexOutOfBoundsException e) {
-      next = backup ;
-      throw new BerException() ;
-    }
-    // catch(Error e) {
-    //    debug("fetchAny: Error decoding BER: " + e);
-    //    throw e;
-    // }
-
-    return result ;
-  }
-
-
-  /**
-  * Fetch an <CODE>ANY</CODE> value with a specific tag.
-  *
-  * @param tag The expected tag.
-  *
-  * @return The TLV as a byte array.
-  *
-  * @exception BerException The next TLV is really badly encoded...
-  */
-
-  public byte[] fetchAny(int tag) throws BerException {
-    if (getTag() != tag) {
-      throw new BerException() ;
-    }
-    return fetchAny() ;
-  }
-
-
-
-  /**
-  * Fetch a sequence header.
-  * The decoder computes the end position of the sequence and push it
-  * on its stack.
-  *
-  * @exception BerException Current position does not point to a sequence header.
-  */
-
-  public void openSequence() throws BerException {
-    openSequence(SequenceTag) ;
-  }
-
-
-  /**
-  * Fetch a sequence header with a specific tag.
-  *
-  * @param tag The expected tag.
-  *
-  * @exception BerException Current position does not point to a sequence header
-  *                         or the tag is not the expected one.
-  */
-
-  public void openSequence(int tag) throws BerException {
-    final int backup = next ;
-    try {
-      if (fetchTag() != tag) {
-        throw new BerException() ;
-      }
-      final int l = fetchLength() ;
-      if (l < 0) throw new BerException();
-      if (l > (bytes.length - next)) throw new BerException();
-      stackBuf[stackTop++] = next + l ;
-    }
-    catch(BerException e) {
-      next = backup ;
-      throw e ;
-    }
-  }
-
-
-  /**
-  * Close a sequence.
-  * The decode pull the stack and verifies that the current position
-  * matches with the calculated end of the sequence. If not it throws
-  * an exception.
-  *
-  * @exception BerException The sequence is not expected to finish here.
-  */
-
-  public void closeSequence() throws BerException {
-    if (stackBuf[stackTop - 1] == next) {
-      stackTop-- ;
-    }
-    else {
-      throw new BerException() ;
-    }
-  }
-
-
-  /**
-  * Return <CODE>true</CODE> if the end of the current sequence is not reached.
-  * When this method returns <CODE>false</CODE>, <CODE>closeSequence</CODE> can (and must) be
-  * invoked.
-  *
-  * @return <CODE>true</CODE> if there is still some data in the sequence.
-  */
-
-  public boolean cannotCloseSequence() {
-    return (next < stackBuf[stackTop - 1]) ;
-  }
-
-
-  /**
-  * Get the tag of the data at the current position.
-  * Current position is unchanged.
-  *
-  * @return The next tag.
-  */
-
-  public int getTag() throws BerException {
-    int result = 0 ;
-    final int backup = next ;
-    try {
-      result = fetchTag() ;
-    }
-    finally {
-      next = backup ;
-    }
-
-    return result ;
-  }
-
-
-
-  public String toString() {
-    final StringBuffer result = new StringBuffer(bytes.length * 2) ;
-    for (int i = 0 ; i < bytes.length ; i++) {
-      final int b = (bytes[i] > 0) ? bytes[i] : bytes[i] + 256 ;
-      if (i == next) {
-        result.append("(") ;
-      }
-      result.append(Character.forDigit(b / 16, 16)) ;
-      result.append(Character.forDigit(b % 16, 16)) ;
-      if (i == next) {
-        result.append(")") ;
-      }
-    }
-    if (bytes.length == next) {
-      result.append("()") ;
-    }
-
-    return new String(result) ;
-  }
-
-
-  //
-  // Some standard tags
-  //
-  public final static int BooleanTag      = 1 ;
-  public final static int IntegerTag      = 2 ;
-  public final static int OctetStringTag  = 4 ;
-  public final static int NullTag          = 5 ;
-  public final static int OidTag          = 6 ;
-  public final static int SequenceTag      = 0x30 ;
-
-
-
-
-  ////////////////////////// PRIVATE ///////////////////////////////
-
-
-
-  /**
-  * Fetch a tag and move the current position forward.
-  *
-  * @return The tag
-  */
-
-  private final int fetchTag() throws BerException {
-    int result = 0 ;
-    final int backup = next ;
-
-    try {
-      final byte b0 = bytes[next++] ;
-      result = (b0 >= 0) ? b0 : b0 + 256 ;
-      if ((result & 31) == 31) {
-        while ((bytes[next] & 128) != 0) {
-          result = result << 7 ;
-          result = result | (bytes[next++] & 127);
-        }
-      }
-    }
-    catch(IndexOutOfBoundsException e) {
-      next = backup ;
-      throw new BerException() ;
-    }
-
-    return result ;
-  }
-
-
-  /**
-  * Fetch a length and move the current position forward.
-  *
-  * @return The length
-  */
-
-  private final int fetchLength() throws BerException {
-    int result = 0 ;
-    final int backup = next ;
-
-    try {
-      final byte b0 = bytes[next++] ;
-      if (b0 >= 0) {
-        result = b0 ;
-      }
-      else {
-        for (int c = 128 + b0 ; c > 0 ; c--) {
-          final byte bX = bytes[next++] ;
-          result = result << 8 ;
-          result = result | ((bX >= 0) ? bX : bX+256) ;
-        }
-      }
-    }
-    catch(IndexOutOfBoundsException e) {
-      next = backup ;
-      throw new BerException() ;
-    }
-
-    return result ;
-  }
-
-
-  /**
-  * Fetch an integer value and move the current position forward.
-  *
-  * @return The integer
-  */
-
-  private int fetchIntegerValue() throws BerException {
-    int result = 0 ;
-    final int backup = next ;
-
-    try {
-      final int length = fetchLength() ;
-      if (length <= 0) throw new BerException() ;
-      if (length > (bytes.length - next)) throw
-          new IndexOutOfBoundsException("Decoded length exceeds buffer");
-      final int end = next + length ;
-      result = bytes[next++] ;
-      while (next < end) {
-        final byte b = bytes[next++] ;
-        if (b < 0) {
-          result = (result << 8) | (256 + b) ;
-        }
-        else {
-          result = (result << 8) | b ;
-        }
-      }
-    }
-    catch(BerException e) {
-      next = backup ;
-      throw e ;
-    }
-    catch(IndexOutOfBoundsException e) {
-      next = backup ;
-      throw new BerException() ;
-    }
-    catch(ArithmeticException e) {
-      next = backup ;
-      throw new BerException() ;
-    }
-    return result ;
-  }
-
-
-  /**
-  * Fetch an integer value and return a long value.
-  * FIX ME: someday we could have only on fetchIntegerValue() which always
-  * returns a long value.
-  *
-  * @return The integer
-  */
-
-  private final long fetchIntegerValueAsLong() throws BerException {
-    long result = 0 ;
-    final int backup = next ;
-
-    try {
-      final int length = fetchLength() ;
-      if (length <= 0) throw new BerException() ;
-      if (length > (bytes.length - next)) throw
-          new IndexOutOfBoundsException("Decoded length exceeds buffer");
-
-      final int end = next + length ;
-      result = bytes[next++] ;
-      while (next < end) {
-        final byte b = bytes[next++] ;
-        if (b < 0) {
-          result = (result << 8) | (256 + b) ;
-        }
-        else {
-          result = (result << 8) | b ;
-        }
-      }
-    }
-    catch(BerException e) {
-      next = backup ;
-      throw e ;
-    }
-    catch(IndexOutOfBoundsException e) {
-      next = backup ;
-      throw new BerException() ;
-    }
-    catch(ArithmeticException e) {
-      next = backup ;
-      throw new BerException() ;
-    }
-    return result ;
-  }
-
-
-  /**
-  * Fetch a byte string and move the current position forward.
-  *
-  * @return The byte string
-  */
-
-  private byte[] fetchStringValue() throws BerException {
-    byte[] result = null ;
-    final int backup = next ;
-
-    try {
-      final int length = fetchLength() ;
-      if (length < 0) throw new BerException() ;
-      if (length > (bytes.length - next))
-          throw new IndexOutOfBoundsException("Decoded length exceeds buffer");
-      final byte data[] = new byte[length] ;
-      java.lang.System.arraycopy(bytes,next,data,0,length);
-      next += length;
-      //      int i = 0 ;
-      //      while (i < length) {
-      //          result[i++] = bytes[next++] ;
-      //      }
-      result = data;
-    }
-    catch(BerException e) {
-        next = backup ;
-      throw e ;
-    }
-    catch(IndexOutOfBoundsException e) {
-      next = backup ;
-      throw new BerException() ;
-    }
-    catch(ArithmeticException e) {
-      next = backup ;
-      throw new BerException() ;
-    }
-    // catch(Error e) {
-    //  debug("fetchStringValue: Error decoding BER: " + e);
-    //  throw e;
-    // }
-
-    return result ;
-  }
-
-
-
-  /**
-  * Fetch an oid and move the current position forward.
-  *
-  * @return The oid
-  */
-
-  private final long[] fetchOidValue() throws BerException {
-    long[] result = null ;
-    final int backup = next ;
-
-    try {
-      final int length = fetchLength() ;
-      if (length <= 0) throw new BerException() ;
-      if (length > (bytes.length - next))
-          throw new IndexOutOfBoundsException("Decoded length exceeds buffer");
-      // Count how many bytes have their 8th bit to 0
-      // -> this gives the number of components in the oid
-      int subidCount = 2 ;
-      for (int i = 1 ; i < length ; i++) {
-        if ((bytes[next + i] & 0x80) == 0) {
-          subidCount++ ;
-        }
-      }
-      final int datalen = subidCount;
-      final long[] data = new long[datalen];
-      final byte b0 = bytes[next++] ;
-
-      // bugId 4641746
-      // The 8th bit of the first byte should always be set to 0
-      if (b0 < 0) throw new BerException();
-
-      // bugId 4641746
-      // The first sub Id cannot be greater than 2
-      final long lb0 =  b0 / 40 ;
-      if (lb0 > 2) throw new BerException();
-
-      final long lb1 = b0 % 40;
-      data[0] = lb0 ;
-      data[1] = lb1 ;
-      int i = 2 ;
-      while (i < datalen) {
-        long subid = 0 ;
-        byte b = bytes[next++] ;
-        while ((b & 0x80) != 0) {
-          subid = (subid << 7) | (b & 0x7f) ;
-          // bugId 4654674
-          if (subid < 0) throw new BerException();
-          b = bytes[next++] ;
-        }
-        subid = (subid << 7) | b ;
-        // bugId 4654674
-        if (subid < 0) throw new BerException();
-        data[i++] = subid ;
-      }
-      result = data;
-    }
-    catch(BerException e) {
-      next = backup ;
-      throw e ;
-    }
-    catch(IndexOutOfBoundsException e) {
-      next = backup ;
-      throw new BerException() ;
-    }
-    // catch(Error e) {
-    //  debug("fetchOidValue: Error decoding BER: " + e);
-    //  throw e;
-    // }
-
-    return result ;
-  }
-
-    // private static final void debug(String str) {
-    //   System.out.println(str);
-    // }
-
-  //
-  // This is the byte array containing the encoding.
-  //
-  private final byte bytes[];
-
-  //
-  // This is the current location. It is the next byte
-  // to be decoded. It's an index in bytes[].
-  //
-  private int next = 0 ;
-
-  //
-  // This is the stack where end of sequences are kept.
-  // A value is computed and pushed in it each time openSequence()
-  // is invoked.
-  // A value is pulled and checked each time closeSequence() is called.
-  //
-  private final int stackBuf[] = new int[200] ;
-  private int stackTop = 0 ;
-
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/BerEncoder.java b/ojluni/src/main/java/com/sun/jmx/snmp/BerEncoder.java
deleted file mode 100755
index 0866f15..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/BerEncoder.java
+++ /dev/null
@@ -1,477 +0,0 @@
-/*
- * Copyright (c) 1997, 2007, 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.jmx.snmp;
-
-
-/**
- * The <CODE>BerEncoder</CODE> class is used for encoding data using BER.
- *
- * A <CODE>BerEncoder</CODE> needs to be set up with a byte buffer. The encoded
- * data are stored in this byte buffer.
- * <P>
- * NOTE : the buffer is filled from end to start. This means the caller
- * needs to encode its data in the reverse order.
- *
- *
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- *
- * @since 1.5
- */
-
-public class BerEncoder {
-
-  /**
-  * Constructs a new encoder and attaches it to the specified byte string.
-  *
-  * @param b The byte string containing the encoded data.
-  */
-
-  public BerEncoder(byte b[]) {
-    bytes = b ;
-    start = b.length ;
-    stackTop = 0 ;
-  }
-
-
-  /**
-  * Trim the encoding data and returns the length of the encoding.
-  *
-  * The encoder does backward encoding : so the bytes buffer is
-  * filled from end to start. The encoded data must be shift before
-  * the buffer can be used. This is the purpose of the <CODE>trim</CODE> method.
-  *
-  * After a call to the <CODE>trim</CODE> method, the encoder is reinitialized and <CODE>putXXX</CODE>
-  * overwrite any existing encoded data.
-  *
-  * @return The length of the encoded data.
-  */
-
-  public int trim() {
-    final int result = bytes.length - start ;
-
-    // for (int i = start ; i < bytes.length ; i++) {
-    //  bytes[i-start] = bytes[i] ;
-    // }
-    if (result > 0)
-        java.lang.System.arraycopy(bytes,start,bytes,0,result);
-
-    start = bytes.length ;
-    stackTop = 0 ;
-
-    return result ;
-  }
-
-  /**
-  * Put an integer.
-  *
-  * @param v The integer to encode.
-  */
-
-  public void putInteger(int v) {
-    putInteger(v, IntegerTag) ;
-  }
-
-
-  /**
-  * Put an integer with the specified tag.
-  *
-  * @param v The integer to encode.
-  * @param tag The tag to encode.
-  */
-
-  public void putInteger(int v, int tag) {
-    putIntegerValue(v) ;
-    putTag(tag) ;
-  }
-
-
-
-  /**
-  * Put an integer expressed as a long.
-  *
-  * @param v The long to encode.
-  */
-
-  public void putInteger(long v) {
-    putInteger(v, IntegerTag) ;
-  }
-
-
-  /**
-  * Put an integer expressed as a long with the specified tag.
-  *
-  * @param v The long to encode
-  * @param tag The tag to encode.
-  */
-
-  public void putInteger(long v, int tag) {
-    putIntegerValue(v) ;
-    putTag(tag) ;
-  }
-
-
-
-  /**
-  * Put an octet string.
-  *
-  * @param s The bytes to encode
-  */
-
-  public void putOctetString(byte[] s) {
-    putOctetString(s, OctetStringTag) ;
-  }
-
-
-  /**
-  * Put an octet string with a specified tag.
-  *
-  * @param s The bytes to encode
-  * @param tag The tag to encode.
-  */
-
-  public void putOctetString(byte[] s, int tag) {
-    putStringValue(s) ;
-    putTag(tag) ;
-  }
-
-
-  /**
-  * Put an object identifier.
-  *
-  * @param s The oid to encode.
-  */
-
-  public void putOid(long[] s) {
-    putOid(s, OidTag) ;
-  }
-
-
-  /**
-  * Put an object identifier with a specified tag.
-  *
-  * @param s The integer to encode.
-  * @param tag The tag to encode.
-  */
-
-  public void putOid(long[] s, int tag) {
-    putOidValue(s) ;
-    putTag(tag) ;
-  }
-
-
-  /**
-  * Put a <CODE>NULL</CODE> value.
-  */
-
-  public void putNull() {
-    putNull(NullTag) ;
-  }
-
-
-  /**
-  * Put a <CODE>NULL</CODE> value with a specified tag.
-  *
-  * @param tag The tag to encode.
-  */
-
-  public void putNull(int tag) {
-    putLength(0) ;
-    putTag(tag) ;
-  }
-
-
-
-  /**
-  * Put an <CODE>ANY</CODE> value. In fact, this method does not encode anything.
-  * It simply copies the specified bytes into the encoding.
-  *
-  * @param s The encoding of the <CODE>ANY</CODE> value.
-  */
-
-  public void putAny(byte[] s) {
-        putAny(s, s.length) ;
-  }
-
-
-  /**
-  * Put an <CODE>ANY</CODE> value. Only the first <CODE>byteCount</CODE> are considered.
-  *
-  * @param s The encoding of the <CODE>ANY</CODE> value.
-  * @param byteCount The number of bytes of the encoding.
-  */
-
-  public void putAny(byte[] s, int byteCount) {
-      java.lang.System.arraycopy(s,0,bytes,start-byteCount,byteCount);
-      start -= byteCount;
-      //    for (int i = byteCount - 1 ; i >= 0 ; i--) {
-      //      bytes[--start] = s[i] ;
-      //    }
-  }
-
-
-  /**
-  * Open a sequence.
-  * The encoder push the current position on its stack.
-  */
-
-  public void openSequence() {
-    stackBuf[stackTop++] = start ;
-  }
-
-
-  /**
-  * Close a sequence.
-  * The decode pull the stack to know the end of the current sequence.
-  */
-
-  public void closeSequence() {
-    closeSequence(SequenceTag) ;
-  }
-
-
-  /**
-  * Close a sequence with the specified tag.
-  */
-
-  public void closeSequence(int tag) {
-    final int end = stackBuf[--stackTop] ;
-    putLength(end - start) ;
-    putTag(tag) ;
-  }
-
-
-  //
-  // Some standard tags
-  //
-  public final static int BooleanTag      = 1 ;
-  public final static int IntegerTag      = 2 ;
-  public final static int OctetStringTag  = 4 ;
-  public final static int NullTag          = 5 ;
-  public final static int OidTag          = 6 ;
-  public final static int SequenceTag      = 0x30 ;
-
-
-
-
-  ////////////////////////// PROTECTED ///////////////////////////////
-
-
-
-  /**
-  * Put a tag and move the current position backward.
-  *
-  * @param tag The tag to encode.
-  */
-
-  protected final void putTag(int tag) {
-    if (tag < 256) {
-      bytes[--start] = (byte)tag ;
-    }
-    else {
-      while (tag != 0) {
-        bytes[--start] = (byte)(tag & 127) ;
-        tag = tag << 7 ;
-      }
-    }
-  }
-
-
-  /**
-  * Put a length and move the current position backward.
-  *
-  * @param length The length to encode.
-  */
-
-  protected final void putLength(final int length) {
-    if (length < 0) {
-      throw new IllegalArgumentException() ;
-    }
-    else if (length < 128) {
-      bytes[--start] = (byte)length ;
-    }
-    else if (length < 256) {
-      bytes[--start] = (byte)length ;
-      bytes[--start] = (byte)0x81 ;
-    }
-    else if (length < 65536) {
-      bytes[--start] = (byte)(length) ;
-      bytes[--start] = (byte)(length >> 8) ;
-      bytes[--start] = (byte)0x82 ;
-    }
-    else if (length < 16777126) {
-      bytes[--start] = (byte)(length) ;
-      bytes[--start] = (byte)(length >> 8) ;
-      bytes[--start] = (byte)(length >> 16) ;
-      bytes[--start] = (byte)0x83 ;
-    }
-    else {
-      bytes[--start] = (byte)(length) ;
-      bytes[--start] = (byte)(length >> 8) ;
-      bytes[--start] = (byte)(length >> 16) ;
-      bytes[--start] = (byte)(length >> 24) ;
-      bytes[--start] = (byte)0x84 ;
-    }
-  }
-
-
-  /**
-  * Put an integer value and move the current position backward.
-  *
-  * @param v The integer to encode.
-  */
-
-  protected final void putIntegerValue(int v) {
-    final int end = start ;
-    int mask = 0x7f800000 ;
-    int byteNeeded = 4 ;
-    if (v < 0) {
-      while (((mask & v) == mask) && (byteNeeded > 1)) {
-        mask = mask >> 8 ;
-        byteNeeded-- ;
-      }
-    }
-    else {
-      while (((mask & v) == 0) && (byteNeeded > 1)) {
-        mask = mask >> 8 ;
-        byteNeeded-- ;
-      }
-    }
-    for (int i = 0 ; i < byteNeeded ; i++) {
-      bytes[--start] = (byte)v ;
-      v =  v >> 8 ;
-    }
-    putLength(end - start) ;
-  }
-
-
-  /**
-  * Put an integer value expressed as a long.
-  *
-  * @param v The integer to encode.
-  */
-
-  protected final void putIntegerValue(long v) {
-    final int end = start ;
-    long mask = 0x7f80000000000000L ;
-    int byteNeeded = 8 ;
-    if (v < 0) {
-      while (((mask & v) == mask) && (byteNeeded > 1)) {
-        mask = mask >> 8 ;
-        byteNeeded-- ;
-      }
-    }
-    else {
-      while (((mask & v) == 0) && (byteNeeded > 1)) {
-        mask = mask >> 8 ;
-        byteNeeded-- ;
-      }
-    }
-    for (int i = 0 ; i < byteNeeded ; i++) {
-      bytes[--start] = (byte)v ;
-      v =  v >> 8 ;
-    }
-    putLength(end - start) ;
-  }
-
-
-  /**
-  * Put a byte string and move the current position backward.
-  *
-  * @param s The byte string to encode.
-  */
-
-  protected final void putStringValue(byte[] s) {
-      final int datalen = s.length;
-      java.lang.System.arraycopy(s,0,bytes,start-datalen,datalen);
-      start -= datalen;
-      // for (int i = s.length - 1 ; i >= 0 ; i--) {
-      //   bytes[--start] = s[i] ;
-      // }
-      putLength(datalen) ;
-  }
-
-
-
-  /**
-  * Put an oid and move the current position backward.
-  *
-  * @param s The oid to encode.
-  */
-
-  protected final void putOidValue(final long[] s) {
-      final int end = start ;
-      final int slength = s.length;
-
-      // bugId 4641746: 0, 1, and 2 are legal values.
-      if ((slength < 2) || (s[0] > 2) || (s[1] >= 40)) {
-          throw new IllegalArgumentException() ;
-      }
-      for (int i = slength - 1 ; i >= 2 ; i--) {
-          long c = s[i] ;
-          if (c < 0) {
-              throw new IllegalArgumentException() ;
-          }
-          else if (c < 128) {
-              bytes[--start] = (byte)c ;
-          }
-          else {
-              bytes[--start] = (byte)(c & 127) ;
-              c = c >> 7 ;
-              while (c != 0) {
-                  bytes[--start] = (byte)(c | 128) ;
-                  c = c >> 7 ;
-              }
-          }
-      }
-      bytes[--start] = (byte)(s[0] * 40 + s[1]) ;
-      putLength(end - start) ;
-  }
-
-
-  //
-  // This is the byte array containing the encoding.
-  //
-  protected final byte bytes[];
-
-  //
-  // This is the index of the first byte of the encoding.
-  // It is initialized to <CODE>bytes.length</CODE> and decrease each time
-  // an value is put in the encoder.
-  //
-  protected int start = -1 ;
-
-  //
-  // This is the stack where end of sequences are kept.
-  // A value is computed and pushed in it each time the <CODE>openSequence</CODE> method
-  // is invoked.
-  // A value is pulled and checked each time the <CODE>closeSequence</CODE> method is called.
-  //
-  protected final int stackBuf[] = new int[200] ;
-  protected int stackTop = 0 ;
-
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/BerException.java b/ojluni/src/main/java/com/sun/jmx/snmp/BerException.java
deleted file mode 100755
index 8560f38..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/BerException.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (c) 1997, 2007, 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.jmx.snmp;
-
-
-
-
-
-/**
- * Exception thrown when a BER encoding/decoding error occurs.
- *
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- *
- * @since 1.5
- */
-
-public class BerException extends Exception {
-  private static final long serialVersionUID = 494709767137042951L;
-
-  public static final int BAD_VERSION=1;
-
-  private int errorType= 0;
-
-  public BerException() {
-    errorType= 0;
-  }
-
-  public BerException(int x) {
-    errorType= x;
-  }
-
-  public boolean isInvalidSnmpVersion() {
-    if (errorType == BAD_VERSION)
-      return true;
-    else
-      return false;
-  }
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/EnumRowStatus.java b/ojluni/src/main/java/com/sun/jmx/snmp/EnumRowStatus.java
deleted file mode 100755
index d92dd96..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/EnumRowStatus.java
+++ /dev/null
@@ -1,308 +0,0 @@
-/*
- * Copyright (c) 2000, 2006, 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.jmx.snmp;
-
-import java.io.Serializable;
-import java.util.Hashtable;
-
-import com.sun.jmx.snmp.SnmpValue;
-import com.sun.jmx.snmp.SnmpInt;
-
-import com.sun.jmx.snmp.Enumerated;
-
-/**
- * This class is an internal class which is used to represent RowStatus
- * codes as defined in RFC 2579.
- *
- * It defines an additional code, <i>unspecified</i>, which is
- * implementation specific, and is used to identify
- * unspecified actions (when for instance the RowStatus variable
- * is not present in the varbind list) or uninitialized values.
- *
- * mibgen does not generate objects of this class but any variable
- * using the RowStatus textual convention can be converted into an
- * object of this class thanks to the
- * <code>EnumRowStatus(Enumerated valueIndex)</code> constructor.
- *
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- **/
-
-public class EnumRowStatus extends Enumerated implements Serializable {
-    private static final long serialVersionUID = 8966519271130162420L;
-
-    /**
-     * This value is SNMP Runtime implementation specific, and is used to identify
-     * unspecified actions (when for instance the RowStatus variable
-     * is not present in the varbind list) or uninitialized values.
-     */
-    public final static int unspecified   = 0;
-
-    /**
-     * This value corresponds to the <i>active</i> RowStatus, as defined in
-     * RFC 2579 from SMIv2:
-     * <ul>
-     * <i>active</i> indicates that the conceptual row is available for
-     * use by the managed device;
-     * </ul>
-     */
-    public final static int active        = 1;
-
-    /**
-     * This value corresponds to the <i>notInService</i> RowStatus, as
-     * defined in RFC 2579 from SMIv2:
-     * <ul>
-     * <i>notInService</i> indicates that the conceptual
-     * row exists in the agent, but is unavailable for use by
-     * the managed device; <i>notInService</i> has
-     * no implication regarding the internal consistency of
-     * the row, availability of resources, or consistency with
-     * the current state of the managed device;
-     * </ul>
-     **/
-    public final static int notInService  = 2;
-
-    /**
-     * This value corresponds to the <i>notReady</i> RowStatus, as defined
-     * in RFC 2579 from SMIv2:
-     * <ul>
-     * <i>notReady</i> indicates that the conceptual row
-     * exists in the agent, but is missing information
-     * necessary in order to be available for use by the
-     * managed device (i.e., one or more required columns in
-     * the conceptual row have not been instantiated);
-     * </ul>
-     */
-    public final static int notReady      = 3;
-
-    /**
-     * This value corresponds to the <i>createAndGo</i> RowStatus,
-     * as defined in RFC 2579 from SMIv2:
-     * <ul>
-     * <i>createAndGo</i> is supplied by a management
-     * station wishing to create a new instance of a
-     * conceptual row and to have its status automatically set
-     * to active, making it available for use by the managed
-     * device;
-     * </ul>
-     */
-    public final static int createAndGo   = 4;
-
-    /**
-     * This value corresponds to the <i>createAndWait</i> RowStatus,
-     * as defined in RFC 2579 from SMIv2:
-     * <ul>
-     * <i>createAndWait</i> is supplied by a management
-     * station wishing to create a new instance of a
-     * conceptual row (but not make it available for use by
-     * the managed device);
-     * </ul>
-     */
-    public final static int createAndWait = 5;
-
-    /**
-     * This value corresponds to the <i>destroy</i> RowStatus, as defined in
-     * RFC 2579 from SMIv2:
-     * <ul>
-     * <i>destroy</i> is supplied by a management station
-     * wishing to delete all of the instances associated with
-     * an existing conceptual row.
-     * </ul>
-     */
-    public final static int destroy       = 6;
-
-    /**
-     * Build an <code>EnumRowStatus</code> from an <code>int</code>.
-     * @param valueIndex should be either 0 (<i>unspecified</i>), or one of
-     *        the values defined in RFC 2579.
-     * @exception IllegalArgumentException if the given
-     *            <code>valueIndex</code> is not valid.
-     **/
-    public EnumRowStatus(int valueIndex)
-        throws IllegalArgumentException {
-        super(valueIndex);
-    }
-
-    /**
-     * Build an <code>EnumRowStatus</code> from an <code>Enumerated</code>.
-     * @param valueIndex should be either 0 (<i>unspecified</i>), or one of
-     *        the values defined in RFC 2579.
-     * @exception IllegalArgumentException if the given
-     *            <code>valueIndex</code> is not valid.
-     **/
-    public EnumRowStatus(Enumerated valueIndex)
-        throws IllegalArgumentException {
-        this(valueIndex.intValue());
-    }
-
-    /**
-     * Build an <code>EnumRowStatus</code> from a <code>long</code>.
-     * @param valueIndex should be either 0 (<i>unspecified</i>), or one of
-     *        the values defined in RFC 2579.
-     * @exception IllegalArgumentException if the given
-     *            <code>valueIndex</code> is not valid.
-     **/
-    public EnumRowStatus(long valueIndex)
-        throws IllegalArgumentException {
-        this((int)valueIndex);
-    }
-
-    /**
-     * Build an <code>EnumRowStatus</code> from an <code>Integer</code>.
-     * @param valueIndex should be either 0 (<i>unspecified</i>), or one of
-     *        the values defined in RFC 2579.
-     * @exception IllegalArgumentException if the given
-     *            <code>valueIndex</code> is not valid.
-     **/
-    public EnumRowStatus(Integer valueIndex)
-        throws IllegalArgumentException {
-        super(valueIndex);
-    }
-
-    /**
-     * Build an <code>EnumRowStatus</code> from a <code>Long</code>.
-     * @param valueIndex should be either 0 (<i>unspecified</i>), or one of
-     *        the values defined in RFC 2579.
-     * @exception IllegalArgumentException if the given
-     *            <code>valueIndex</code> is not valid.
-     **/
-    public EnumRowStatus(Long valueIndex)
-        throws IllegalArgumentException {
-        this(valueIndex.longValue());
-    }
-
-    /**
-     * Build an <code>EnumRowStatus</code> with <i>unspecified</i> value.
-     **/
-    public EnumRowStatus()
-        throws IllegalArgumentException {
-        this(unspecified);
-    }
-
-    /**
-     * Build an <code>EnumRowStatus</code> from a <code>String</code>.
-     * @param x should be either "unspecified", or one of
-     *        the values defined in RFC 2579 ("active", "notReady", etc...)
-     * @exception IllegalArgumentException if the given String
-     *            <code>x</code> is not valid.
-     **/
-    public EnumRowStatus(String x)
-        throws IllegalArgumentException {
-        super(x);
-    }
-
-    /**
-     * Build an <code>EnumRowStatus</code> from an <code>SnmpInt</code>.
-     * @param valueIndex should be either 0 (<i>unspecified</i>), or one of
-     *        the values defined in RFC 2579.
-     * @exception IllegalArgumentException if the given
-     *            <code>valueIndex</code> is not valid.
-     **/
-    public EnumRowStatus(SnmpInt valueIndex)
-        throws IllegalArgumentException {
-        this(valueIndex.intValue());
-    }
-
-    /**
-     * Build an SnmpValue from this object.
-     *
-     * @exception IllegalArgumentException if this object holds an
-     *            <i>unspecified</i> value.
-     * @return an SnmpInt containing this object value.
-     **/
-    public SnmpInt toSnmpValue()
-        throws IllegalArgumentException {
-        if (value == unspecified)
-            throw new
-        IllegalArgumentException("`unspecified' is not a valid SNMP value.");
-        return new SnmpInt(value);
-    }
-
-    /**
-     * Check that the given <code>value</code> is valid.
-     *
-     * Valid values are:
-     * <ul><li><i>unspecified(0)</i></li>
-     *     <li><i>active(1)</i></li>
-     *     <li><i>notInService(2)</i></li>
-     *     <li><i>notReady(3)</i></li>
-     *     <li><i>createAndGo(4)</i></li>
-     *     <li><i>createAndWait(5)</i></li>
-     *     <li><i>destroy(6)</i></li>
-     * </ul>
-     *
-     **/
-    static public boolean isValidValue(int value) {
-        if (value < 0) return false;
-        if (value > 6) return false;
-        return true;
-    }
-
-    // Documented in Enumerated
-    //
-    protected Hashtable getIntTable() {
-        return EnumRowStatus.getRSIntTable();
-    }
-
-    // Documented in Enumerated
-    //
-    protected Hashtable getStringTable() {
-        return  EnumRowStatus.getRSStringTable();
-    }
-
-    static final Hashtable getRSIntTable() {
-        return intTable ;
-    }
-
-    static final Hashtable getRSStringTable() {
-        return stringTable ;
-    }
-
-    // Initialize the mapping tables.
-    //
-    final static Hashtable<Integer, String> intTable =
-            new Hashtable<Integer, String>();
-    final static Hashtable<String, Integer> stringTable =
-            new Hashtable<String, Integer>();
-    static  {
-        intTable.put(new Integer(0), "unspecified");
-        intTable.put(new Integer(3), "notReady");
-        intTable.put(new Integer(6), "destroy");
-        intTable.put(new Integer(2), "notInService");
-        intTable.put(new Integer(5), "createAndWait");
-        intTable.put(new Integer(1), "active");
-        intTable.put(new Integer(4), "createAndGo");
-        stringTable.put("unspecified", new Integer(0));
-        stringTable.put("notReady", new Integer(3));
-        stringTable.put("destroy", new Integer(6));
-        stringTable.put("notInService", new Integer(2));
-        stringTable.put("createAndWait", new Integer(5));
-        stringTable.put("active", new Integer(1));
-        stringTable.put("createAndGo", new Integer(4));
-    }
-
-
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/Enumerated.java b/ojluni/src/main/java/com/sun/jmx/snmp/Enumerated.java
deleted file mode 100755
index a4bca4e..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/Enumerated.java
+++ /dev/null
@@ -1,219 +0,0 @@
-/*
- * Copyright (c) 1999, 2007, 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.jmx.snmp;
-
-
-import java.io.*;
-import java.util.Hashtable;
-import java.util.*;
-
-
-
-/** This class is used for implementing enumerated values.
- *
- * An enumeration is represented by a class derived from Enumerated.
- * The derived class defines what are the permitted values in the enumeration.
- *
- * An enumerated value is represented by an instance of the derived class.
- * It can be represented :
- *  - as an integer
- *  - as a string
- *
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- */
-
-abstract public class Enumerated  implements Serializable {
-
-  /**
-   * Construct an enumerated with a default value.
-   * The default value is the first available in getIntTable().
-    * @exception IllegalArgumentException One of the arguments passed to the method is illegal or inappropriate.
-   */
-  public Enumerated() throws IllegalArgumentException {
-    Enumeration e =getIntTable().keys() ;
-    if (e.hasMoreElements()) {
-      value = ((Integer)e.nextElement()).intValue() ;
-    }
-    else {
-      throw new IllegalArgumentException() ;
-    }
-  }
-
-  /**
-   * Construct an enumerated from its integer form.
-   *
-   * @param valueIndex The integer form.
-   * @exception IllegalArgumentException One of the arguments passed to
-   *            the method is illegal or inappropriate.
-   */
-  public Enumerated(int valueIndex) throws IllegalArgumentException {
-    if (getIntTable().get(new Integer(valueIndex)) == null) {
-      throw new IllegalArgumentException() ;
-    }
-    value = valueIndex ;
-  }
-
-  /**
-   * Construct an enumerated from its Integer form.
-   *
-   * @param valueIndex The Integer form.
-   * @exception IllegalArgumentException One of the arguments passed to
-   *            the method is illegal or inappropriate.
-   */
-  public Enumerated(Integer valueIndex) throws IllegalArgumentException {
-    if (getIntTable().get(valueIndex) == null) {
-      throw new IllegalArgumentException() ;
-    }
-    value = valueIndex.intValue() ;
-  }
-
-
-  /**
-   * Construct an enumerated from its string form.
-   *
-   * @param valueString The string form.
-   * @exception IllegalArgumentException One of the arguments passed
-   *  to the method is illegal or inappropriate.
-   */
-  public Enumerated(String valueString) throws IllegalArgumentException {
-    Integer index = (Integer)getStringTable().get(valueString) ;
-    if (index == null) {
-      throw new IllegalArgumentException() ;
-    }
-    else {
-      value = index.intValue() ;
-    }
-  }
-
-
-  /**
-   * Return the integer form of the enumerated.
-   *
-   * @return The integer form
-   */
-
-  public int intValue() {
-    return value ;
-  }
-
-
-  /**
-   * Returns an Java enumeration of the permitted integers.
-   *
-   * @return An enumeration of Integer instances
-   */
-
-  public Enumeration valueIndexes() {
-    return getIntTable().keys() ;
-  }
-
-
-  /**
-   * Returns an Java enumeration of the permitted strings.
-   *
-   * @return An enumeration of String instances
-   */
-
-  public Enumeration valueStrings() {
-    return getStringTable().keys() ;
-  }
-
-
-  /**
-   * Compares this enumerated to the specified enumerated.
-   *
-   * The result is true if and only if the argument is not null
-   * and is of the same class.
-   *
-   * @param obj The object to compare with.
-   *
-   * @return True if this and obj are the same; false otherwise
-   */
-  public boolean equals(Object obj) {
-
-    return ((obj != null) &&
-            (getClass() == obj.getClass()) &&
-            (value == ((Enumerated)obj).value)) ;
-  }
-
-
-  /**
-   * Returns the hash code for this enumerated.
-   *
-   * @return A hash code value for this object.
-   */
-  public int hashCode() {
-    String hashString = getClass().getName() + String.valueOf(value) ;
-    return hashString.hashCode() ;
-  }
-
-
-  /**
-   * Returns the string form of this enumerated.
-   *
-   * @return The string for for this object.
-   */
-
-  public String toString() {
-    return (String)getIntTable().get(new Integer(value)) ;
-  }
-
-
-  /**
-   * Returns the hashtable of the integer forms.
-   * getIntTable().get(x) returns the string form associated
-   * to the integer x.
-   *
-   * This method must be implemented by the derived class.
-   *
-   * @return An hashtable for read-only purpose
-   */
-
-  protected abstract Hashtable getIntTable() ;
-
-
-
-  /**
-   * Returns the hashtable of the string forms.
-   * getStringTable().get(s) returns the integer form associated
-   * to the string s.
-   *
-   * This method must be implemented by the derived class.
-   *
-   * @return An hashtable for read-only purpose
-   */
-
-  protected abstract Hashtable getStringTable() ;
-
-
-  /**
-   * This variable keeps the integer form of the enumerated.
-   * The string form is retreived using getIntTable().
-   */
-  protected int value ;
-
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/ASCII_CharStream.README b/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/ASCII_CharStream.README
deleted file mode 100755
index 6e6fd81..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/ASCII_CharStream.README
+++ /dev/null
@@ -1,23 +0,0 @@
-WARNING : ASCII_CharStream.java must be PATCHED.
-
-The following methods should be removed after javacc generation.
-The goal is to simplify 100%-pure testing (see bug 4127719).
-
-
-  /**
-   * @deprecated 
-   * @see #getEndColumn
-   */
-
-  public final int getColumn() {
-     return bufcolumn[bufpos];
-  }
-
-  /**
-   * @deprecated 
-   * @see #getEndLine
-   */
-
-  public final int getLine() {
-     return bufline[bufpos];
-  }
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/ASCII_CharStream.java b/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/ASCII_CharStream.java
deleted file mode 100755
index d6fa308..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/ASCII_CharStream.java
+++ /dev/null
@@ -1,402 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-/* Generated By:JavaCC: Do not edit this line. ASCII_CharStream.java Version 0.7pre6 */
-package com.sun.jmx.snmp.IPAcl;
-
-/**
- * An implementation of interface CharStream, where the stream is assumed to
- * contain only ASCII characters (without unicode processing).
- */
-
-final class ASCII_CharStream
-{
-  public static final boolean staticFlag = false;
-  int bufsize;
-  int available;
-  int tokenBegin;
-  public int bufpos = -1;
-  private int bufline[];
-  private int bufcolumn[];
-
-  private int column = 0;
-  private int line = 1;
-
-  private boolean prevCharIsCR = false;
-  private boolean prevCharIsLF = false;
-
-  private java.io.Reader inputStream;
-
-  private char[] buffer;
-  private int maxNextCharInd = 0;
-  private int inBuf = 0;
-
-  private final void ExpandBuff(boolean wrapAround)
-  {
-     char[] newbuffer = new char[bufsize + 2048];
-     int newbufline[] = new int[bufsize + 2048];
-     int newbufcolumn[] = new int[bufsize + 2048];
-
-     try
-     {
-        if (wrapAround)
-        {
-           System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin);
-           System.arraycopy(buffer, 0, newbuffer,
-                                             bufsize - tokenBegin, bufpos);
-           buffer = newbuffer;
-
-           System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin);
-           System.arraycopy(bufline, 0, newbufline, bufsize - tokenBegin, bufpos);
-           bufline = newbufline;
-
-           System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin);
-           System.arraycopy(bufcolumn, 0, newbufcolumn, bufsize - tokenBegin, bufpos);
-           bufcolumn = newbufcolumn;
-
-           maxNextCharInd = (bufpos += (bufsize - tokenBegin));
-        }
-        else
-        {
-           System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin);
-           buffer = newbuffer;
-
-           System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin);
-           bufline = newbufline;
-
-           System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin);
-           bufcolumn = newbufcolumn;
-
-           maxNextCharInd = (bufpos -= tokenBegin);
-        }
-     }
-     catch (Throwable t)
-     {
-        throw new Error(t.getMessage());
-     }
-
-
-     bufsize += 2048;
-     available = bufsize;
-     tokenBegin = 0;
-  }
-
-  private final void FillBuff() throws java.io.IOException
-  {
-     if (maxNextCharInd == available)
-     {
-        if (available == bufsize)
-        {
-           if (tokenBegin > 2048)
-           {
-              bufpos = maxNextCharInd = 0;
-              available = tokenBegin;
-           }
-           else if (tokenBegin < 0)
-              bufpos = maxNextCharInd = 0;
-           else
-              ExpandBuff(false);
-        }
-        else if (available > tokenBegin)
-           available = bufsize;
-        else if ((tokenBegin - available) < 2048)
-           ExpandBuff(true);
-        else
-           available = tokenBegin;
-     }
-
-     int i;
-     try {
-        if ((i = inputStream.read(buffer, maxNextCharInd,
-                                    available - maxNextCharInd)) == -1)
-        {
-           inputStream.close();
-           throw new java.io.IOException();
-        }
-        else
-           maxNextCharInd += i;
-        return;
-     }
-     catch(java.io.IOException e) {
-        --bufpos;
-        backup(0);
-        if (tokenBegin == -1)
-           tokenBegin = bufpos;
-        throw e;
-     }
-  }
-
-  public final char BeginToken() throws java.io.IOException
-  {
-     tokenBegin = -1;
-     char c = readChar();
-     tokenBegin = bufpos;
-
-     return c;
-  }
-
-  private final void UpdateLineColumn(char c)
-  {
-     column++;
-
-     if (prevCharIsLF)
-     {
-        prevCharIsLF = false;
-        line += (column = 1);
-     }
-     else if (prevCharIsCR)
-     {
-        prevCharIsCR = false;
-        if (c == '\n')
-        {
-           prevCharIsLF = true;
-        }
-        else
-           line += (column = 1);
-     }
-
-     switch (c)
-     {
-        case '\r' :
-           prevCharIsCR = true;
-           break;
-        case '\n' :
-           prevCharIsLF = true;
-           break;
-        case '\t' :
-           column--;
-           column += (8 - (column & 07));
-           break;
-        default :
-           break;
-     }
-
-     bufline[bufpos] = line;
-     bufcolumn[bufpos] = column;
-  }
-
-  public final char readChar() throws java.io.IOException
-  {
-     if (inBuf > 0)
-     {
-        --inBuf;
-        return (char)((char)0xff & buffer[(bufpos == bufsize - 1) ? (bufpos = 0) : ++bufpos]);
-     }
-
-     if (++bufpos >= maxNextCharInd)
-        FillBuff();
-
-     char c = (char)((char)0xff & buffer[bufpos]);
-
-     UpdateLineColumn(c);
-     return (c);
-  }
-
-  /**
-   * @deprecated
-   * @see #getEndColumn
-   */
-    @Deprecated
-  public final int getColumn() {
-     return bufcolumn[bufpos];
-  }
-
-  /**
-   * @deprecated
-   * @see #getEndLine
-   */
-    @Deprecated
-  public final int getLine() {
-     return bufline[bufpos];
-  }
-
-  public final int getEndColumn() {
-     return bufcolumn[bufpos];
-  }
-
-  public final int getEndLine() {
-     return bufline[bufpos];
-  }
-
-  public final int getBeginColumn() {
-     return bufcolumn[tokenBegin];
-  }
-
-  public final int getBeginLine() {
-     return bufline[tokenBegin];
-  }
-
-  public final void backup(int amount) {
-
-    inBuf += amount;
-    if ((bufpos -= amount) < 0)
-       bufpos += bufsize;
-  }
-
-  public ASCII_CharStream(java.io.Reader dstream, int startline,
-  int startcolumn, int buffersize)
-  {
-    inputStream = dstream;
-    line = startline;
-    column = startcolumn - 1;
-
-    available = bufsize = buffersize;
-    buffer = new char[buffersize];
-    bufline = new int[buffersize];
-    bufcolumn = new int[buffersize];
-  }
-
-  public ASCII_CharStream(java.io.Reader dstream, int startline,
-                                                           int startcolumn)
-  {
-     this(dstream, startline, startcolumn, 4096);
-  }
-  public void ReInit(java.io.Reader dstream, int startline,
-  int startcolumn, int buffersize)
-  {
-    inputStream = dstream;
-    line = startline;
-    column = startcolumn - 1;
-
-    if (buffer == null || buffersize != buffer.length)
-    {
-      available = bufsize = buffersize;
-      buffer = new char[buffersize];
-      bufline = new int[buffersize];
-      bufcolumn = new int[buffersize];
-    }
-    prevCharIsLF = prevCharIsCR = false;
-    tokenBegin = inBuf = maxNextCharInd = 0;
-    bufpos = -1;
-  }
-
-  public void ReInit(java.io.Reader dstream, int startline,
-                                                           int startcolumn)
-  {
-     ReInit(dstream, startline, startcolumn, 4096);
-  }
-  public ASCII_CharStream(java.io.InputStream dstream, int startline,
-  int startcolumn, int buffersize)
-  {
-     this(new java.io.InputStreamReader(dstream), startline, startcolumn, 4096);
-  }
-
-  public ASCII_CharStream(java.io.InputStream dstream, int startline,
-                                                           int startcolumn)
-  {
-     this(dstream, startline, startcolumn, 4096);
-  }
-
-  public void ReInit(java.io.InputStream dstream, int startline,
-  int startcolumn, int buffersize)
-  {
-     ReInit(new java.io.InputStreamReader(dstream), startline, startcolumn, 4096);
-  }
-  public void ReInit(java.io.InputStream dstream, int startline,
-                                                           int startcolumn)
-  {
-     ReInit(dstream, startline, startcolumn, 4096);
-  }
-  public final String GetImage()
-  {
-     if (bufpos >= tokenBegin)
-        return new String(buffer, tokenBegin, bufpos - tokenBegin + 1);
-     else
-        return new String(buffer, tokenBegin, bufsize - tokenBegin) +
-                              new String(buffer, 0, bufpos + 1);
-  }
-
-  public final char[] GetSuffix(int len)
-  {
-     char[] ret = new char[len];
-
-     if ((bufpos + 1) >= len)
-        System.arraycopy(buffer, bufpos - len + 1, ret, 0, len);
-     else
-     {
-        System.arraycopy(buffer, bufsize - (len - bufpos - 1), ret, 0,
-                                                          len - bufpos - 1);
-        System.arraycopy(buffer, 0, ret, len - bufpos - 1, bufpos + 1);
-     }
-
-     return ret;
-  }
-
-  public void Done()
-  {
-     buffer = null;
-     bufline = null;
-     bufcolumn = null;
-  }
-
-  /**
-   * Method to adjust line and column numbers for the start of a token.
-   */
-  public void adjustBeginLineColumn(int newLine, int newCol)
-  {
-     int start = tokenBegin;
-     int len;
-
-     if (bufpos >= tokenBegin)
-     {
-        len = bufpos - tokenBegin + inBuf + 1;
-     }
-     else
-     {
-        len = bufsize - tokenBegin + bufpos + 1 + inBuf;
-     }
-
-     int i = 0, j = 0, k = 0;
-     int nextColDiff = 0, columnDiff = 0;
-
-     while (i < len &&
-            bufline[j = start % bufsize] == bufline[k = ++start % bufsize])
-     {
-        bufline[j] = newLine;
-        nextColDiff = columnDiff + bufcolumn[k] - bufcolumn[j];
-        bufcolumn[j] = newCol + columnDiff;
-        columnDiff = nextColDiff;
-        i++;
-     }
-
-     if (i < len)
-     {
-        bufline[j] = newLine++;
-        bufcolumn[j] = newCol + columnDiff;
-
-        while (i++ < len)
-        {
-           if (bufline[j = start % bufsize] != bufline[++start % bufsize])
-              bufline[j] = newLine++;
-           else
-              bufline[j] = newLine;
-        }
-     }
-
-     line = bufline[j];
-     column = bufcolumn[j];
-  }
-
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/AclEntryImpl.java b/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/AclEntryImpl.java
deleted file mode 100755
index 30da053..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/AclEntryImpl.java
+++ /dev/null
@@ -1,263 +0,0 @@
-/*
- * Copyright (c) 1997, 2007, 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.jmx.snmp.IPAcl;
-
-
-
-import java.security.acl.Permission;
-import java.util.Vector;
-import java.util.Enumeration;
-import java.io.Serializable;
-import java.net.UnknownHostException;
-
-import java.security.Principal;
-import java.security.acl.AclEntry;
-
-
-/**
- * Represent one entry in the Access Control List (ACL).
- * This ACL entry object contains a permission associated with a particular principal.
- * (A principal represents an entity such as an individual machine or a group).
- *
- * @see java.security.acl.AclEntry
- */
-
-class AclEntryImpl implements AclEntry, Serializable {
-  private static final long serialVersionUID = -5047185131260073216L;
-
-  private AclEntryImpl (AclEntryImpl i) throws UnknownHostException {
-        setPrincipal(i.getPrincipal());
-        permList = new Vector<Permission>();
-        commList = new Vector<String>();
-
-        for (Enumeration<String> en = i.communities(); en.hasMoreElements();){
-          addCommunity(en.nextElement());
-        }
-
-        for (Enumeration<Permission> en = i.permissions(); en.hasMoreElements();){
-          addPermission(en.nextElement());
-        }
-        if (i.isNegative()) setNegativePermissions();
-  }
-
-  /**
-   * Contructs an empty ACL entry.
-   */
-  public AclEntryImpl (){
-        princ = null;
-        permList = new Vector<Permission>();
-        commList = new Vector<String>();
-  }
-
-  /**
-   * Constructs an ACL entry with a specified principal.
-   *
-   * @param p the principal to be set for this entry.
-   */
-  public AclEntryImpl (Principal p) throws UnknownHostException {
-        princ = p;
-        permList = new Vector<Permission>();
-        commList = new Vector<String>();
-  }
-
-  /**
-   * Clones this ACL entry.
-   *
-   * @return a clone of this ACL entry.
-   */
-  public Object clone() {
-        AclEntryImpl i;
-        try {
-          i = new AclEntryImpl(this);
-        }catch (UnknownHostException e) {
-          i = null;
-        }
-        return (Object) i;
-  }
-
-  /**
-   * Returns true if this is a negative ACL entry (one denying the associated principal
-   * the set of permissions in the entry), false otherwise.
-   *
-   * @return true if this is a negative ACL entry, false if it's not.
-   */
-  public boolean isNegative(){
-        return neg;
-  }
-
-  /**
-   * Adds the specified permission to this ACL entry. Note: An entry can
-   * have multiple permissions.
-   *
-   * @param perm the permission to be associated with the principal in this
-   *        entry
-   * @return true if the permission is removed, false if the permission was
-   *         not part of this entry's permission set.
-   *
-   */
-  public boolean addPermission(java.security.acl.Permission perm){
-        if (permList.contains(perm)) return false;
-        permList.addElement(perm);
-        return true;
-  }
-
-  /**
-   * Removes the specified permission from this ACL entry.
-   *
-   * @param perm the permission to be removed from this entry.
-   * @return true if the permission is removed, false if the permission
-   *         was not part of this entry's permission set.
-   */
-  public boolean removePermission(java.security.acl.Permission perm){
-        if (!permList.contains(perm)) return false;
-        permList.removeElement(perm);
-        return true;
-  }
-
-  /**
-   * Checks if the specified permission is part of the permission set in
-   * this entry.
-   *
-   * @param perm the permission to be checked for.
-   * @return true if the permission is part of the permission set in this
-   *         entry, false otherwise.
-   */
-
-  public boolean checkPermission(java.security.acl.Permission perm){
-        return (permList.contains(perm));
-  }
-
-  /**
-   * Returns an enumeration of the permissions in this ACL entry.
-   *
-   * @return an enumeration of the permissions in this ACL entry.
-   */
-  public Enumeration<Permission> permissions(){
-        return permList.elements();
-  }
-
-  /**
-   * Sets this ACL entry to be a negative one. That is, the associated principal
-   * (e.g., a user or a group) will be denied the permission set specified in the
-   * entry. Note: ACL entries are by default positive. An entry becomes a negative
-   * entry only if this setNegativePermissions method is called on it.
-   *
-   * Not Implemented.
-   */
-  public void setNegativePermissions(){
-        neg = true;
-  }
-
-  /**
-   * Returns the principal for which permissions are granted or denied by this ACL
-   * entry. Returns null if there is no principal set for this entry yet.
-   *
-   * @return the principal associated with this entry.
-   */
-  public Principal getPrincipal(){
-        return princ;
-  }
-
-  /**
-   * Specifies the principal for which permissions are granted or denied by
-   * this ACL entry. If a principal was already set for this ACL entry,
-   * false is returned, otherwise true is returned.
-   *
-   * @param p the principal to be set for this entry.
-   * @return true if the principal is set, false if there was already a
-   *         principal set for this entry.
-   */
-  public boolean setPrincipal(Principal p) {
-        if (princ != null )
-          return false;
-        princ = p;
-        return true;
-  }
-
-  /**
-   * Returns a string representation of the contents of this ACL entry.
-   *
-   * @return a string representation of the contents.
-   */
-  public String toString(){
-        return "AclEntry:"+princ.toString();
-  }
-
-  /**
-   * Returns an enumeration of the communities in this ACL entry.
-   *
-   * @return an enumeration of the communities in this ACL entry.
-   */
-  public Enumeration<String> communities(){
-        return commList.elements();
-  }
-
-  /**
-   * Adds the specified community to this ACL entry. Note: An entry can
-   * have multiple communities.
-   *
-   * @param comm the community to be associated with the principal
-   *        in this entry.
-   * @return true if the community was added, false if the community was
-   *         already part of this entry's community set.
-   */
-  public boolean addCommunity(String comm){
-        if (commList.contains(comm)) return false;
-        commList.addElement(comm);
-        return true;
-  }
-
-  /**
-   * Removes the specified community from this ACL entry.
-   *
-   * @param comm the community  to be removed from this entry.
-   * @return true if the community is removed, false if the community was
-   *         not part of this entry's community set.
-   */
-  public boolean removeCommunity(String comm){
-        if (!commList.contains(comm)) return false;
-        commList.removeElement(comm);
-        return true;
-  }
-
-  /**
-   * Checks if the specified community is part of the community set in this
-   * entry.
-   *
-   * @param  comm the community to be checked for.
-   * @return true if the community is part of the community set in this
-   *         entry, false otherwise.
-   */
-  public boolean checkCommunity(String comm){
-        return (commList.contains(comm));
-  }
-
-  private Principal princ = null;
-  private boolean neg     = false;
-  private Vector<Permission> permList = null;
-  private Vector<String> commList = null;
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/AclImpl.java b/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/AclImpl.java
deleted file mode 100755
index 353514c..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/AclImpl.java
+++ /dev/null
@@ -1,287 +0,0 @@
-/*
- * Copyright (c) 1997, 2007, 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.jmx.snmp.IPAcl;
-
-
-
-import java.security.Principal;
-import java.security.acl.Acl;
-import java.security.acl.AclEntry;
-import java.security.acl.NotOwnerException;
-
-import java.io.Serializable;
-import java.security.acl.Permission;
-import java.util.Vector;
-import java.util.Enumeration;
-
-
-/**
- * Represent an Access Control List (ACL) which is used to guard access to http adaptor.
- * <P>
- * It is a data structure with multiple ACL entries. Each ACL entry, of interface type
- * AclEntry, contains a set of permissions and a set of communities associated with a
- * particular principal. (A principal represents an entity such as a host or a group of host).
- * Additionally, each ACL entry is specified as being either positive or negative.
- * If positive, the permissions are to be granted to the associated principal.
- * If negative, the permissions are to be denied.
- *
- * @see java.security.acl.Acl
- */
-
-class AclImpl extends OwnerImpl implements Acl, Serializable {
-  private static final long serialVersionUID = -2250957591085270029L;
-
-  private Vector<AclEntry> entryList = null;
-  private String aclName = null;
-
-  /**
-   * Constructs the ACL with a specified owner
-   *
-   * @param owner owner of the ACL.
-   * @param name  name of this ACL.
-   */
-  public AclImpl (PrincipalImpl owner, String name) {
-        super(owner);
-        entryList = new Vector<AclEntry>();
-        aclName = name;
-  }
-
-  /**
-   * Sets the name of this ACL.
-   *
-   * @param caller the principal invoking this method. It must be an owner
-   *        of this ACL.
-   * @param name the name to be given to this ACL.
-   *
-   * @exception NotOwnerException if the caller principal is not an owner
-   *            of this ACL.
-   * @see java.security.Principal
-   */
-  public void setName(Principal caller, String name)
-        throws NotOwnerException {
-          if (!isOwner(caller))
-                throw new NotOwnerException();
-          aclName = name;
-  }
-
-  /**
-   * Returns the name of this ACL.
-   *
-   * @return the name of this ACL.
-   */
-  public String getName(){
-        return aclName;
-  }
-
-  /**
-   * Adds an ACL entry to this ACL. An entry associates a principal (e.g., an individual or a group)
-   * with a set of permissions. Each principal can have at most one positive ACL entry
-   * (specifying permissions to be granted to the principal) and one negative ACL entry
-   * (specifying permissions to be denied). If there is already an ACL entry
-   * of the same type (negative or positive) already in the ACL, false is returned.
-   *
-   * @param caller the principal invoking this method. It must be an owner
-   *        of this ACL.
-   * @param entry the ACL entry to be added to this ACL.
-   * @return true on success, false if an entry of the same type (positive
-   *       or negative) for the same principal is already present in this ACL.
-   * @exception NotOwnerException if the caller principal is not an owner of
-   *       this ACL.
-   * @see java.security.Principal
-   */
-  public boolean addEntry(Principal caller, AclEntry entry)
-        throws NotOwnerException {
-          if (!isOwner(caller))
-                throw new NotOwnerException();
-
-          if (entryList.contains(entry))
-                return false;
-          /*
-                 for (Enumeration e = entryList.elements();e.hasMoreElements();){
-                 AclEntry ent = (AclEntry) e.nextElement();
-                 if (ent.getPrincipal().equals(entry.getPrincipal()))
-                 return false;
-                 }
-                 */
-
-          entryList.addElement(entry);
-          return true;
-  }
-
-  /**
-   * Removes an ACL entry from this ACL.
-   *
-   * @param caller the principal invoking this method. It must be an owner
-   *        of this ACL.
-   * @param entry the ACL entry to be removed from this ACL.
-   * @return true on success, false if the entry is not part of this ACL.
-   * @exception NotOwnerException if the caller principal is not an owner
-   *   of this Acl.
-   * @see java.security.Principal
-   * @see java.security.acl.AclEntry
-   */
-  public boolean removeEntry(Principal caller, AclEntry entry)
-        throws NotOwnerException {
-          if (!isOwner(caller))
-                throw new NotOwnerException();
-
-          return (entryList.removeElement(entry));
-  }
-
-  /**
-   * Removes all ACL entries from this ACL.
-   *
-   * @param caller the principal invoking this method. It must be an owner
-   *        of this ACL.
-   * @exception NotOwnerException if the caller principal is not an owner of
-   *        this Acl.
-   * @see java.security.Principal
-   */
-  public void removeAll(Principal caller)
-        throws NotOwnerException {
-          if (!isOwner(caller))
-                throw new NotOwnerException();
-        entryList.removeAllElements();
-  }
-
-  /**
-   * Returns an enumeration for the set of allowed permissions for
-   * the specified principal
-   * (representing an entity such as an individual or a group).
-   * This set of allowed permissions is calculated as follows:
-   * <UL>
-   * <LI>If there is no entry in this Access Control List for the specified
-   * principal, an empty permission set is returned.</LI>
-   * <LI>Otherwise, the principal's group permission sets are determined.
-   * (A principal can belong to one or more groups, where a group is a group
-   * of principals, represented by the Group interface.)</LI>
-   * </UL>
-   * @param user the principal whose permission set is to be returned.
-   * @return the permission set specifying the permissions the principal
-   *     is allowed.
-   * @see java.security.Principal
-   */
-  public Enumeration<Permission> getPermissions(Principal user){
-        Vector<Permission> empty = new Vector<Permission>();
-        for (Enumeration<AclEntry> e = entryList.elements();e.hasMoreElements();){
-          AclEntry ent = e.nextElement();
-          if (ent.getPrincipal().equals(user))
-                return ent.permissions();
-        }
-        return empty.elements();
-  }
-
-  /**
-   * Returns an enumeration of the entries in this ACL. Each element in the
-   * enumeration is of type AclEntry.
-   *
-   * @return an enumeration of the entries in this ACL.
-   */
-  public Enumeration<AclEntry> entries(){
-        return entryList.elements();
-  }
-
-  /**
-   * Checks whether or not the specified principal has the specified
-   * permission.
-   * If it does, true is returned, otherwise false is returned.
-   * More specifically, this method checks whether the passed permission
-   * is a member of the allowed permission set of the specified principal.
-   * The allowed permission set is determined by the same algorithm as is
-   * used by the getPermissions method.
-   *
-   * @param user the principal, assumed to be a valid authenticated Principal.
-   * @param perm the permission to be checked for.
-   * @return true if the principal has the specified permission,
-   *         false otherwise.
-   * @see java.security.Principal
-   * @see java.security.Permission
-   */
-  public boolean checkPermission(Principal user,
-                                 java.security.acl.Permission perm) {
-        for (Enumeration e = entryList.elements();e.hasMoreElements();){
-          AclEntry ent = (AclEntry) e.nextElement();
-          if (ent.getPrincipal().equals(user))
-                if (ent.checkPermission(perm)) return true;
-        }
-        return false;
-  }
-
-  /**
-   * Checks whether or not the specified principal has the specified
-   * permission.
-   * If it does, true is returned, otherwise false is returned.
-   * More specifically, this method checks whether the passed permission
-   * is a member of the allowed permission set of the specified principal.
-   * The allowed permission set is determined by the same algorithm as is
-   * used by the getPermissions method.
-   *
-   * @param user the principal, assumed to be a valid authenticated Principal.
-   * @param community the community name associated with the principal.
-   * @param perm the permission to be checked for.
-   * @return true if the principal has the specified permission, false
-   *        otherwise.
-   * @see java.security.Principal
-   * @see java.security.Permission
-   */
-  public boolean checkPermission(Principal user, String community,
-                                 java.security.acl.Permission perm) {
-        for (Enumeration e = entryList.elements();e.hasMoreElements();){
-          AclEntryImpl ent = (AclEntryImpl) e.nextElement();
-          if (ent.getPrincipal().equals(user))
-                if (ent.checkPermission(perm) && ent.checkCommunity(community)) return true;
-        }
-        return false;
-  }
-
-  /**
-   * Checks whether or not the specified community string is defined.
-   *
-   * @param community the community name associated with the principal.
-   *
-   * @return true if the specified community string is defined, false
-   *      otherwise.
-   * @see java.security.Principal
-   * @see java.security.Permission
-   */
-  public boolean checkCommunity(String community) {
-        for (Enumeration e = entryList.elements();e.hasMoreElements();){
-          AclEntryImpl ent = (AclEntryImpl) e.nextElement();
-          if (ent.checkCommunity(community)) return true;
-        }
-        return false;
-  }
-
-  /**
-   * Returns a string representation of the ACL contents.
-   *
-   * @return a string representation of the ACL contents.
-   */
-  public String toString(){
-        return ("AclImpl: "+ getName());
-  }
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/GroupImpl.java b/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/GroupImpl.java
deleted file mode 100755
index 8285678..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/GroupImpl.java
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * Copyright (c) 1997, 2007, 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.jmx.snmp.IPAcl;
-
-
-
-import java.util.Vector;
-import java.util.Enumeration;
-import java.io.Serializable;
-import java.net.UnknownHostException;
-
-
-import java.security.Principal;
-import java.security.acl.Group;
-
-
-/**
- * This class is used to represent a subnet mask (a group of hosts
- * matching the same
- * IP mask).
- *
- */
-
-class GroupImpl extends PrincipalImpl implements Group, Serializable {
-  private static final long serialVersionUID = -7777387035032541168L;
-
-  /**
-   * Constructs an empty group.
-   * @exception UnknownHostException Not implemented
-   */
-  public GroupImpl () throws UnknownHostException {
-  }
-
-  /**
-   * Constructs a group using the specified subnet mask.
-   *
-   * @param mask The subnet mask to use to build the group.
-   * @exception UnknownHostException if the subnet mask cann't be built.
-   */
-  public GroupImpl (String mask) throws UnknownHostException {
-        super(mask);
-  }
-
-    /**
-     * Adds the specified member to the group.
-     *
-     * @param p the principal to add to this group.
-     * @return true if the member was successfully added, false if the
-     *     principal was already a member.
-     */
-    public boolean addMember(Principal p) {
-        // we don't need to add members because the ip address is a
-        // subnet mask
-        return true;
-    }
-
-  public int hashCode() {
-        return super.hashCode();
-  }
-
-  /**
-   * Compares this group to the specified object. Returns true if the object
-   * passed in matches the group represented.
-   *
-   * @param p the object to compare with.
-   * @return true if the object passed in matches the subnet mask,
-   *   false otherwise.
-   */
-  public boolean equals (Object p) {
-        if (p instanceof PrincipalImpl || p instanceof GroupImpl){
-          if ((super.hashCode() & p.hashCode()) == p.hashCode()) return true;
-          else return false;
-        } else {
-          return false;
-        }
-  }
-
-  /**
-   * Returns true if the passed principal is a member of the group.
-   *
-   * @param p the principal whose membership is to be checked.
-   * @return true if the principal is a member of this group, false otherwise.
-   */
-  public boolean isMember(Principal p) {
-        if ((p.hashCode() & super.hashCode()) == p.hashCode()) return true;
-        else return false;
-  }
-
-  /**
-   * Returns an enumeration which contains the subnet mask.
-   *
-   * @return an enumeration which contains the subnet mask.
-   */
-  public Enumeration<? extends Principal> members(){
-        Vector<Principal> v = new Vector<Principal>(1);
-        v.addElement(this);
-        return v.elements();
-  }
-
-  /**
-   * Removes the specified member from the group. (Not implemented)
-   *
-   * @param p the principal to remove from this group.
-   * @return allways return true.
-   */
-  public boolean removeMember(Principal p) {
-        return true;
-  }
-
-  /**
-   * Prints a string representation of this group.
-   *
-   * @return  a string representation of this group.
-   */
-  public String toString() {
-        return ("GroupImpl :"+super.getAddress().toString());
-  }
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/Host.java b/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/Host.java
deleted file mode 100755
index 8a92692..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/Host.java
+++ /dev/null
@@ -1,181 +0,0 @@
-/*
- * Copyright (c) 1997, 2007, 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.jmx.snmp.IPAcl;
-
-
-
-// java import
-//
-import java.io.Serializable;
-import java.net.InetAddress;
-import java.net.UnknownHostException;
-import java.util.Hashtable;
-import java.util.logging.Level;
-import java.util.Vector;
-import java.security.acl.NotOwnerException;
-
-import static com.sun.jmx.defaults.JmxProperties.SNMP_LOGGER;
-
-/**
- * The class defines an abstract representation of a host.
- *
- */
-abstract class Host extends SimpleNode implements Serializable {
-
-    public Host(int id) {
-        super(id);
-    }
-
-    public Host(Parser p, int id) {
-        super(p, id);
-    }
-
-    protected abstract PrincipalImpl createAssociatedPrincipal()
-        throws UnknownHostException;
-
-    protected abstract String getHname();
-
-    public void buildAclEntries(PrincipalImpl owner, AclImpl acl) {
-        // Create a principal
-        //
-        PrincipalImpl p=null;
-        try {
-            p = createAssociatedPrincipal();
-        } catch(UnknownHostException e) {
-            if (SNMP_LOGGER.isLoggable(Level.FINEST)) {
-                SNMP_LOGGER.logp(Level.FINEST, Host.class.getName(),
-                        "buildAclEntries",
-                        "Cannot create ACL entry; got exception", e);
-            }
-            throw new IllegalArgumentException("Cannot create ACL entry for " + e.getMessage());
-        }
-
-        // Create an AclEntry
-        //
-        AclEntryImpl entry= null;
-        try {
-            entry = new AclEntryImpl(p);
-            // Add permission
-            //
-            registerPermission(entry);
-            acl.addEntry(owner, entry);
-        } catch(UnknownHostException e) {
-            if (SNMP_LOGGER.isLoggable(Level.FINEST)) {
-                SNMP_LOGGER.logp(Level.FINEST, Host.class.getName(),
-                        "buildAclEntries",
-                        "Cannot create ACL entry; got exception", e);
-            }
-            return;
-        } catch(NotOwnerException a) {
-            if (SNMP_LOGGER.isLoggable(Level.FINEST)) {
-                SNMP_LOGGER.logp(Level.FINEST, Host.class.getName(),
-                        "buildAclEntries",
-                        "Cannot create ACL entry; got exception", a);
-            }
-            return;
-        }
-    }
-
-    private void registerPermission(AclEntryImpl entry) {
-        JDMHost host= (JDMHost) jjtGetParent();
-        JDMManagers manager= (JDMManagers) host.jjtGetParent();
-        JDMAclItem acl= (JDMAclItem) manager.jjtGetParent();
-        JDMAccess access= acl.getAccess();
-        access.putPermission(entry);
-        JDMCommunities comm= acl.getCommunities();
-        comm.buildCommunities(entry);
-    }
-
-    public void buildTrapEntries(Hashtable<InetAddress, Vector<String>> dest) {
-
-        JDMHostTrap host= (JDMHostTrap) jjtGetParent();
-        JDMTrapInterestedHost hosts= (JDMTrapInterestedHost) host.jjtGetParent();
-        JDMTrapItem trap = (JDMTrapItem) hosts.jjtGetParent();
-        JDMTrapCommunity community = trap.getCommunity();
-        String comm = community.getCommunity();
-
-        InetAddress add = null;
-        try {
-            add = java.net.InetAddress.getByName(getHname());
-        } catch(UnknownHostException e) {
-            if (SNMP_LOGGER.isLoggable(Level.FINEST)) {
-                SNMP_LOGGER.logp(Level.FINEST, Host.class.getName(),
-                        "buildTrapEntries",
-                        "Cannot create TRAP entry; got exception", e);
-            }
-            return;
-        }
-
-        Vector<String> list = null;
-        if (dest.containsKey(add)){
-            list = dest.get(add);
-            if (!list.contains(comm)){
-                list.addElement(comm);
-            }
-        } else {
-            list = new Vector<String>();
-            list.addElement(comm);
-            dest.put(add,list);
-        }
-    }
-
-    public void buildInformEntries(Hashtable<InetAddress, Vector<String>> dest) {
-
-        JDMHostInform host= (JDMHostInform) jjtGetParent();
-        JDMInformInterestedHost hosts= (JDMInformInterestedHost) host.jjtGetParent();
-        JDMInformItem inform = (JDMInformItem) hosts.jjtGetParent();
-        JDMInformCommunity community = inform.getCommunity();
-        String comm = community.getCommunity();
-
-        InetAddress add = null;
-        try {
-            add = java.net.InetAddress.getByName(getHname());
-        } catch(UnknownHostException e) {
-            if (SNMP_LOGGER.isLoggable(Level.FINEST)) {
-                SNMP_LOGGER.logp(Level.FINEST, Host.class.getName(),
-                        "buildTrapEntries",
-                        "Cannot create INFORM entry; got exception", e);
-            }
-            return;
-        }
-
-        Vector<String> list = null;
-        if (dest.containsKey(add)){
-            list = dest.get(add);
-            if (!list.contains(comm)){
-                list.addElement(comm);
-            }
-        } else {
-            list = new Vector<String>();
-            list.addElement(comm);
-            dest.put(add,list);
-        }
-    }
-
-
-
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMAccess.java b/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMAccess.java
deleted file mode 100755
index b598aab..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMAccess.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (c) 1997, 2007, 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.
- */
-
-
-/* Generated By:JJTree: Do not edit this line. JDMAccess.java */
-
-package com.sun.jmx.snmp.IPAcl;
-
-
-class JDMAccess extends SimpleNode {
-  protected int access= -1;
-
-  JDMAccess(int id) {
-    super(id);
-  }
-
-  JDMAccess(Parser p, int id) {
-    super(p, id);
-  }
-
-  public static Node jjtCreate(int id) {
-      return new JDMAccess(id);
-  }
-
-  public static Node jjtCreate(Parser p, int id) {
-      return new JDMAccess(p, id);
-  }
-
-  protected void putPermission(AclEntryImpl entry) {
-    if (access == ParserConstants.RO) {
-       // We have a read-only access.
-       //
-       entry.addPermission(com.sun.jmx.snmp.IPAcl.SnmpAcl.getREAD());
-    }
-    if (access == ParserConstants.RW) {
-       // We have a read-write access.
-       //
-       entry.addPermission(com.sun.jmx.snmp.IPAcl.SnmpAcl.getREAD());
-       entry.addPermission(com.sun.jmx.snmp.IPAcl.SnmpAcl.getWRITE());
-    }
-  }
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMAclBlock.java b/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMAclBlock.java
deleted file mode 100755
index a48039f..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMAclBlock.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (c) 1997, 2007, 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.
- */
-
-
-/* Generated By:JJTree: Do not edit this line. JDMAclBlock.java */
-
-package com.sun.jmx.snmp.IPAcl;
-
-import java.util.Hashtable;
-
-class JDMAclBlock extends SimpleNode {
-  JDMAclBlock(int id) {
-    super(id);
-  }
-
-  JDMAclBlock(Parser p, int id) {
-    super(p, id);
-  }
-
-  public static Node jjtCreate(int id) {
-      return new JDMAclBlock(id);
-  }
-
-  public static Node jjtCreate(Parser p, int id) {
-      return new JDMAclBlock(p, id);
-  }
-
-  /**
-   * Do no need to go through this part of the tree for
-   * building TrapEntry.
-   */
-   public void buildTrapEntries(Hashtable dest) {}
-
-  /**
-   * Do no need to go through this part of the tree for
-   * building InformEntry.
-   */
-   public void buildInformEntries(Hashtable dest) {}
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMAclItem.java b/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMAclItem.java
deleted file mode 100755
index e2756f9..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMAclItem.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright (c) 1997, 2007, 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.
- */
-
-
-/* Generated By:JJTree: Do not edit this line. JDMAclItem.java */
-
-package com.sun.jmx.snmp.IPAcl;
-
-class JDMAclItem extends SimpleNode {
-  protected JDMAccess access= null;
-  protected JDMCommunities com= null;
-
-  JDMAclItem(int id) {
-    super(id);
-  }
-
-  JDMAclItem(Parser p, int id) {
-    super(p, id);
-  }
-
-  public static Node jjtCreate(int id) {
-      return new JDMAclItem(id);
-  }
-
-  public static Node jjtCreate(Parser p, int id) {
-      return new JDMAclItem(p, id);
-  }
-
-  public JDMAccess getAccess() {
-    return access;
-  }
-
-  public JDMCommunities getCommunities() {
-    return com;
-  }
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMCommunities.java b/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMCommunities.java
deleted file mode 100755
index cc88a96..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMCommunities.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (c) 1997, 2007, 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.
- */
-
-
-/* Generated By:JJTree: Do not edit this line. JDMCommunities.java */
-
-package com.sun.jmx.snmp.IPAcl;
-
-
-class JDMCommunities extends SimpleNode {
-  JDMCommunities(int id) {
-    super(id);
-  }
-
-  JDMCommunities(Parser p, int id) {
-    super(p, id);
-  }
-
-  public static Node jjtCreate(int id) {
-      return new JDMCommunities(id);
-  }
-
-  public static Node jjtCreate(Parser p, int id) {
-      return new JDMCommunities(p, id);
-  }
-
-  public void buildCommunities(AclEntryImpl entry){
-        for (int i =0 ; i < children.length ; i++)
-          entry.addCommunity(((JDMCommunity)children[i]).getCommunity());
-  }
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMCommunity.java b/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMCommunity.java
deleted file mode 100755
index 883b266..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMCommunity.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (c) 1997, 2007, 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.
- */
-
-
-/* Generated By:JJTree: Do not edit this line. JDMCommunity.java */
-
-package com.sun.jmx.snmp.IPAcl;
-
-class JDMCommunity extends SimpleNode {
-  protected String communityString= "";
-
-  JDMCommunity(int id) {
-    super(id);
-  }
-
-  JDMCommunity(Parser p, int id) {
-    super(p, id);
-  }
-
-  public static Node jjtCreate(int id) {
-      return new JDMCommunity(id);
-  }
-
-  public static Node jjtCreate(Parser p, int id) {
-      return new JDMCommunity(p, id);
-  }
-
-  public String getCommunity(){
-        return communityString;
-  }
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMEnterprise.java b/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMEnterprise.java
deleted file mode 100755
index 37f6d82..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMEnterprise.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (c) 1997, 2007, 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.
- */
-
-
-/* Generated By:JJTree: Do not edit this line. JDMEnterprise.java */
-
-package com.sun.jmx.snmp.IPAcl;
-
-class JDMEnterprise extends SimpleNode {
-  protected String enterprise= "";
-
-  JDMEnterprise(int id) {
-    super(id);
-  }
-
-  JDMEnterprise(Parser p, int id) {
-    super(p, id);
-  }
-
-  public static Node jjtCreate(int id) {
-      return new JDMEnterprise(id);
-  }
-
-  public static Node jjtCreate(Parser p, int id) {
-      return new JDMEnterprise(p, id);
-  }
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMHost.java b/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMHost.java
deleted file mode 100755
index d1ffcf5..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMHost.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1997, 2007, 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.
- */
-
-
-/* Generated By:JJTree: Do not edit this line. JDMHost.java */
-
-package com.sun.jmx.snmp.IPAcl;
-
-
-class JDMHost extends SimpleNode {
-
-  JDMHost(int id) {
-    super(id);
-  }
-
-  JDMHost(Parser p, int id) {
-    super(p, id);
-  }
-
-  public static Node jjtCreate(int id) {
-      return new JDMHost(id);
-  }
-
-  public static Node jjtCreate(Parser p, int id) {
-      return new JDMHost(p, id);
-  }
-
-
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMHostInform.java b/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMHostInform.java
deleted file mode 100755
index 7c7a7e6..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMHostInform.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 2000, 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.
- */
-
-/* Generated By:JJTree: Do not edit this line. JDMHostInform.java */
-
-package com.sun.jmx.snmp.IPAcl;
-
-class JDMHostInform extends SimpleNode {
-    protected String name= "";
-
-    JDMHostInform(int id) {
-        super(id);
-    }
-
-    JDMHostInform(Parser p, int id) {
-        super(p, id);
-    }
-
-    public static Node jjtCreate(int id) {
-        return new JDMHostInform(id);
-    }
-
-    public static Node jjtCreate(Parser p, int id) {
-        return new JDMHostInform(p, id);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMHostName.java b/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMHostName.java
deleted file mode 100755
index e51ab02..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMHostName.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright (c) 1997, 2007, 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.
- */
-
-
-/* Generated By:JJTree: Do not edit this line. JDMHostName.java */
-
-package com.sun.jmx.snmp.IPAcl;
-
-import java.net.UnknownHostException;
-
-class JDMHostName extends Host {
-  private static final long serialVersionUID = -9120082068923591122L;
-
-  protected StringBuffer name = new StringBuffer();
-
-  JDMHostName(int id) {
-    super(id);
-  }
-
-  JDMHostName(Parser p, int id) {
-    super(p, id);
-  }
-
-  public static Node jjtCreate(int id) {
-      return new JDMHostName(id);
-  }
-
-  public static Node jjtCreate(Parser p, int id) {
-      return new JDMHostName(p, id);
-  }
-
-  protected String getHname() {
-        return name.toString();
-  }
-
-  protected PrincipalImpl createAssociatedPrincipal()
-    throws UnknownHostException {
-      return new PrincipalImpl(name.toString());
-  }
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMHostTrap.java b/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMHostTrap.java
deleted file mode 100755
index f516392..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMHostTrap.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (c) 1997, 2007, 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.
- */
-
-
-/* Generated By:JJTree: Do not edit this line. JDMHostTrap.java */
-
-package com.sun.jmx.snmp.IPAcl;
-
-class JDMHostTrap extends SimpleNode {
-  protected String name= "";
-
-  JDMHostTrap(int id) {
-    super(id);
-  }
-
-  JDMHostTrap(Parser p, int id) {
-    super(p, id);
-  }
-
-  public static Node jjtCreate(int id) {
-      return new JDMHostTrap(id);
-  }
-
-  public static Node jjtCreate(Parser p, int id) {
-      return new JDMHostTrap(p, id);
-  }
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMInformBlock.java b/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMInformBlock.java
deleted file mode 100755
index 6f54a61..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMInformBlock.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (c) 2000, 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.
- */
-
-/* Generated By:JJTree: Do not edit this line. JDMInformBlock.java */
-
-package com.sun.jmx.snmp.IPAcl;
-
-import java.util.Hashtable;
-
-class JDMInformBlock extends SimpleNode {
-    JDMInformBlock(int id) {
-        super(id);
-    }
-
-    JDMInformBlock(Parser p, int id) {
-        super(p, id);
-    }
-
-    public static Node jjtCreate(int id) {
-        return new JDMInformBlock(id);
-    }
-
-    public static Node jjtCreate(Parser p, int id) {
-        return new JDMInformBlock(p, id);
-    }
-
-    /**
-     * Do no need to go through this part of the tree for
-     * building AclEntry.
-     */
-    public void buildAclEntries(PrincipalImpl owner, AclImpl acl) {}
-
-    /**
-     * Do no need to go through this part of the tree for
-     * building TrapEntry.
-     */
-    public void buildTrapEntries(Hashtable dest) {}
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMInformCommunity.java b/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMInformCommunity.java
deleted file mode 100755
index a805846..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMInformCommunity.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 2000, 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.
- */
-
-/* Generated By:JJTree: Do not edit this line. JDMInformCommunity.java */
-
-package com.sun.jmx.snmp.IPAcl;
-
-class JDMInformCommunity extends SimpleNode {
-    protected String community= "";
-    JDMInformCommunity(int id) {
-        super(id);
-    }
-
-    JDMInformCommunity(Parser p, int id) {
-        super(p, id);
-    }
-
-    public static Node jjtCreate(int id) {
-        return new JDMInformCommunity(id);
-    }
-
-    public static Node jjtCreate(Parser p, int id) {
-        return new JDMInformCommunity(p, id);
-    }
-
-    public String getCommunity() {
-        return community;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMInformInterestedHost.java b/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMInformInterestedHost.java
deleted file mode 100755
index 9ad2a84..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMInformInterestedHost.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (c) 2000, 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.
- */
-
-/* Generated By:JJTree: Do not edit this line. JDMInformInterestedHost.java */
-
-package com.sun.jmx.snmp.IPAcl;
-
-class JDMInformInterestedHost extends SimpleNode {
-    JDMInformInterestedHost(int id) {
-        super(id);
-    }
-
-    JDMInformInterestedHost(Parser p, int id) {
-        super(p, id);
-    }
-
-    public static Node jjtCreate(int id) {
-        return new JDMInformInterestedHost(id);
-    }
-
-    public static Node jjtCreate(Parser p, int id) {
-        return new JDMInformInterestedHost(p, id);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMInformItem.java b/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMInformItem.java
deleted file mode 100755
index 03d068f..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMInformItem.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 2000, 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.
- */
-
-/* Generated By:JJTree: Do not edit this line. JDMInformItem.java */
-
-package com.sun.jmx.snmp.IPAcl;
-
-class JDMInformItem extends SimpleNode {
-    protected JDMInformCommunity comm = null;
-    JDMInformItem(int id) {
-        super(id);
-    }
-
-    JDMInformItem(Parser p, int id) {
-        super(p, id);
-    }
-
-    public static Node jjtCreate(int id) {
-        return new JDMInformItem(id);
-    }
-
-    public static Node jjtCreate(Parser p, int id) {
-        return new JDMInformItem(p, id);
-    }
-
-    public JDMInformCommunity getCommunity(){
-        return comm;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMIpAddress.java b/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMIpAddress.java
deleted file mode 100755
index c0caa7c..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMIpAddress.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (c) 1997, 2007, 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.
- */
-
-
-/* Generated By:JJTree: Do not edit this line. JDMIpAddress.java */
-
-package com.sun.jmx.snmp.IPAcl;
-
-import java.lang.StringBuffer;
-import java.net.UnknownHostException;
-
-class JDMIpAddress extends Host {
-  private static final long serialVersionUID = 849729919486384484L;
-
-  protected StringBuffer address= new StringBuffer();
-
-  JDMIpAddress(int id) {
-    super(id);
-  }
-
-  JDMIpAddress(Parser p, int id) {
-    super(p, id);
-  }
-
-  public static Node jjtCreate(int id) {
-      return new JDMIpAddress(id);
-  }
-
-  public static Node jjtCreate(Parser p, int id) {
-      return new JDMIpAddress(p, id);
-  }
-
-  protected String getHname() {
-          return address.toString();
-  }
-
-  protected PrincipalImpl createAssociatedPrincipal()
-    throws UnknownHostException {
-      return new PrincipalImpl(address.toString());
-  }
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMIpMask.java b/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMIpMask.java
deleted file mode 100755
index fb6197e..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMIpMask.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (c) 1997, 2007, 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.
- */
-
-
-/* Generated By:JJTree: Do not edit this line. JDMIpMask.java */
-
-package com.sun.jmx.snmp.IPAcl;
-
-import java.lang.StringBuffer;
-import java.net.UnknownHostException;
-
-class JDMIpMask extends Host {
-  private static final long serialVersionUID = -8211312690652331386L;
-
-  protected StringBuffer address= new StringBuffer();
-
-  JDMIpMask(int id) {
-    super(id);
-  }
-
-  JDMIpMask(Parser p, int id) {
-    super(p, id);
-  }
-
-  public static Node jjtCreate(int id) {
-      return new JDMIpMask(id);
-  }
-
-  public static Node jjtCreate(Parser p, int id) {
-      return new JDMIpMask(p, id);
-  }
-
-  protected String getHname() {
-        return address.toString();
-  }
-
-  protected PrincipalImpl createAssociatedPrincipal()
-    throws UnknownHostException {
-      return new GroupImpl(address.toString());
-  }
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMIpV6Address.java b/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMIpV6Address.java
deleted file mode 100755
index d072a54..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMIpV6Address.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (c) 2002, 2006, 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.
- */
-
-/* Generated By:JJTree: Do not edit this line. JDMIpV6Address.java */
-
-package com.sun.jmx.snmp.IPAcl;
-
-class JDMIpV6Address extends JDMIpAddress {
-  private static final long serialVersionUID = -5929917334606674243L;
-
-  public JDMIpV6Address(int id) {
-    super(id);
-  }
-
-  public JDMIpV6Address(Parser p, int id) {
-    super(p, id);
-  }
-
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMManagers.java b/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMManagers.java
deleted file mode 100755
index 5b07c08..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMManagers.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 1997, 2007, 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.
- */
-
-
-/* Generated By:JJTree: Do not edit this line. JDMManagers.java */
-
-package com.sun.jmx.snmp.IPAcl;
-
-class JDMManagers extends SimpleNode {
-  JDMManagers(int id) {
-    super(id);
-  }
-
-  JDMManagers(Parser p, int id) {
-    super(p, id);
-  }
-
-  public static Node jjtCreate(int id) {
-      return new JDMManagers(id);
-  }
-
-  public static Node jjtCreate(Parser p, int id) {
-      return new JDMManagers(p, id);
-  }
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMNetMask.java b/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMNetMask.java
deleted file mode 100755
index fa790b7..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMNetMask.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright (c) 2002, 2006, 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.
- */
-/* Generated By:JJTree: Do not edit this line. JDMNetMask.java */
-
-package com.sun.jmx.snmp.IPAcl;
-import java.net.UnknownHostException;
-
-class JDMNetMask extends Host {
-  private static final long serialVersionUID = -1979318280250821787L;
-
-  protected StringBuffer address= new StringBuffer();
-    protected String mask = null;
-  public JDMNetMask(int id) {
-    super(id);
-  }
-
-  public JDMNetMask(Parser p, int id) {
-    super(p, id);
-  }
-public static Node jjtCreate(int id) {
-      return new JDMNetMask(id);
-  }
-
-  public static Node jjtCreate(Parser p, int id) {
-      return new JDMNetMask(p, id);
-  }
-
-  protected String getHname() {
-        return address.toString();
-  }
-
-  protected PrincipalImpl createAssociatedPrincipal()
-    throws UnknownHostException {
-      return new NetMaskImpl(address.toString(), Integer.parseInt(mask));
-  }
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMNetMaskV6.java b/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMNetMaskV6.java
deleted file mode 100755
index e0857b1..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMNetMaskV6.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (c) 2002, 2006, 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.
- */
-
-/* Generated By:JJTree: Do not edit this line. JDMNetMaskV6.java */
-
-package com.sun.jmx.snmp.IPAcl;
-
-import java.net.UnknownHostException;
-
-class JDMNetMaskV6 extends JDMNetMask {
-  private static final long serialVersionUID = 4505256777680576645L;
-
-  public JDMNetMaskV6(int id) {
-    super(id);
-  }
-
-  public JDMNetMaskV6(Parser p, int id) {
-    super(p, id);
-  }
-    protected PrincipalImpl createAssociatedPrincipal()
-    throws UnknownHostException {
-      return new NetMaskImpl(address.toString(), Integer.parseInt(mask));
-  }
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMSecurityDefs.java b/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMSecurityDefs.java
deleted file mode 100755
index 727b29b..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMSecurityDefs.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 1997, 2007, 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.
- */
-
-
-/* Generated By:JJTree: Do not edit this line. JDMSecurityDefs.java */
-
-package com.sun.jmx.snmp.IPAcl;
-
-class JDMSecurityDefs extends SimpleNode {
-  JDMSecurityDefs(int id) {
-    super(id);
-  }
-
-  JDMSecurityDefs(Parser p, int id) {
-    super(p, id);
-  }
-
-  public static Node jjtCreate(int id) {
-      return new JDMSecurityDefs(id);
-  }
-
-  public static Node jjtCreate(Parser p, int id) {
-      return new JDMSecurityDefs(p, id);
-  }
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMTrapBlock.java b/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMTrapBlock.java
deleted file mode 100755
index d14d3d7..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMTrapBlock.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-
-/* Generated By:JJTree: Do not edit this line. JDMTrapBlock.java */
-
-package com.sun.jmx.snmp.IPAcl;
-
-import java.util.Hashtable;
-
-class JDMTrapBlock extends SimpleNode {
-  JDMTrapBlock(int id) {
-    super(id);
-  }
-
-  JDMTrapBlock(Parser p, int id) {
-    super(p, id);
-  }
-
-  public static Node jjtCreate(int id) {
-      return new JDMTrapBlock(id);
-  }
-
-  public static Node jjtCreate(Parser p, int id) {
-      return new JDMTrapBlock(p, id);
-  }
-
-  /**
-   * Do no need to go through this part of the tree for
-   * building AclEntry.
-   */
-   public void buildAclEntries(PrincipalImpl owner, AclImpl acl) {}
-
-  /**
-   * Do no need to go through this part of the tree for
-   * building InformEntry.
-   */
-   public void buildInformEntries(Hashtable dest) {}
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMTrapCommunity.java b/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMTrapCommunity.java
deleted file mode 100755
index 82cc8e1..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMTrapCommunity.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (c) 1997, 2007, 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.
- */
-
-
-/* Generated By:JJTree: Do not edit this line. JDMTrapCommunity.java */
-
-package com.sun.jmx.snmp.IPAcl;
-
-class JDMTrapCommunity extends SimpleNode {
-  protected String community= "";
-  JDMTrapCommunity(int id) {
-    super(id);
-  }
-
-  JDMTrapCommunity(Parser p, int id) {
-    super(p, id);
-  }
-
-  public static Node jjtCreate(int id) {
-      return new JDMTrapCommunity(id);
-  }
-
-  public static Node jjtCreate(Parser p, int id) {
-      return new JDMTrapCommunity(p, id);
-  }
-
-  public String getCommunity() {
-        return community;
-  }
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMTrapInterestedHost.java b/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMTrapInterestedHost.java
deleted file mode 100755
index 1ca4eeb..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMTrapInterestedHost.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 1997, 2007, 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.
- */
-
-
-/* Generated By:JJTree: Do not edit this line. JDMTrapInterestedHost.java */
-
-package com.sun.jmx.snmp.IPAcl;
-
-class JDMTrapInterestedHost extends SimpleNode {
-  JDMTrapInterestedHost(int id) {
-    super(id);
-  }
-
-  JDMTrapInterestedHost(Parser p, int id) {
-    super(p, id);
-  }
-
-  public static Node jjtCreate(int id) {
-      return new JDMTrapInterestedHost(id);
-  }
-
-  public static Node jjtCreate(Parser p, int id) {
-      return new JDMTrapInterestedHost(p, id);
-  }
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMTrapItem.java b/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMTrapItem.java
deleted file mode 100755
index f7379fe..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMTrapItem.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (c) 1997, 2007, 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.
- */
-
-
-/* Generated By:JJTree: Do not edit this line. JDMTrapItem.java */
-
-package com.sun.jmx.snmp.IPAcl;
-
-class JDMTrapItem extends SimpleNode {
-  protected JDMTrapCommunity comm = null;
-
-  JDMTrapItem(int id) {
-    super(id);
-  }
-
-  JDMTrapItem(Parser p, int id) {
-    super(p, id);
-  }
-
-  public static Node jjtCreate(int id) {
-      return new JDMTrapItem(id);
-  }
-
-  public static Node jjtCreate(Parser p, int id) {
-      return new JDMTrapItem(p, id);
-  }
-
-  public JDMTrapCommunity getCommunity(){
-        return comm;
-  }
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMTrapNum.java b/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMTrapNum.java
deleted file mode 100755
index 1b38ecd..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JDMTrapNum.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (c) 1997, 2007, 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.
- */
-
-
-/* Generated By:JJTree: Do not edit this line. JDMTrapNum.java */
-
-package com.sun.jmx.snmp.IPAcl;
-
-class JDMTrapNum extends SimpleNode {
-  protected int low=0;
-  protected int high=0;
-
-  JDMTrapNum(int id) {
-    super(id);
-  }
-
-  JDMTrapNum(Parser p, int id) {
-    super(p, id);
-  }
-
-  public static Node jjtCreate(int id) {
-      return new JDMTrapNum(id);
-  }
-
-  public static Node jjtCreate(Parser p, int id) {
-      return new JDMTrapNum(p, id);
-  }
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JJTParserState.java b/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JJTParserState.java
deleted file mode 100755
index 83adecd..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/JJTParserState.java
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- * Copyright (c) 1997, 2006, 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.
- */
-
-/* Generated By:JJTree: Do not edit this line. JJTParserState.java */
-
-package com.sun.jmx.snmp.IPAcl;
-
-@SuppressWarnings("unchecked")  // generated code, not worth fixing
-class JJTParserState {
-  private java.util.Stack nodes;
-  private java.util.Stack marks;
-
-  private int sp;               // number of nodes on stack
-  private int mk;               // current mark
-  private boolean node_created;
-
-  JJTParserState() {
-    nodes = new java.util.Stack();
-    marks = new java.util.Stack();
-    sp = 0;
-    mk = 0;
-  }
-
-  /* Determines whether the current node was actually closed and
-     pushed.  This should only be called in the final user action of a
-     node scope.  */
-  boolean nodeCreated() {
-    return node_created;
-  }
-
-  /* Call this to reinitialize the node stack.  It is called
-     automatically by the parser's ReInit() method. */
-  void reset() {
-    nodes.removeAllElements();
-    marks.removeAllElements();
-    sp = 0;
-    mk = 0;
-  }
-
-  /* Returns the root node of the AST.  It only makes sense to call
-     this after a successful parse. */
-  Node rootNode() {
-    return (Node)nodes.elementAt(0);
-  }
-
-  /* Pushes a node on to the stack. */
-  void pushNode(Node n) {
-    nodes.push(n);
-    ++sp;
-  }
-
-  /* Returns the node on the top of the stack, and remove it from the
-     stack.  */
-  Node popNode() {
-    if (--sp < mk) {
-      mk = ((Integer)marks.pop()).intValue();
-    }
-    return (Node)nodes.pop();
-  }
-
-  /* Returns the node currently on the top of the stack. */
-  Node peekNode() {
-    return (Node)nodes.peek();
-  }
-
-  /* Returns the number of children on the stack in the current node
-     scope. */
-  int nodeArity() {
-    return sp - mk;
-  }
-
-
-  void clearNodeScope(Node n) {
-    while (sp > mk) {
-      popNode();
-    }
-    mk = ((Integer)marks.pop()).intValue();
-  }
-
-
-  void openNodeScope(Node n) {
-    marks.push(new Integer(mk));
-    mk = sp;
-    n.jjtOpen();
-  }
-
-
-  /* A definite node is constructed from a specified number of
-     children.  That number of nodes are popped from the stack and
-     made the children of the definite node.  Then the definite node
-     is pushed on to the stack. */
-  void closeNodeScope(Node n, int num) {
-    mk = ((Integer)marks.pop()).intValue();
-    while (num-- > 0) {
-      Node c = popNode();
-      c.jjtSetParent(n);
-      n.jjtAddChild(c, num);
-    }
-    n.jjtClose();
-    pushNode(n);
-    node_created = true;
-  }
-
-
-  /* A conditional node is constructed if its condition is true.  All
-     the nodes that have been pushed since the node was opened are
-     made children of the the conditional node, which is then pushed
-     on to the stack.  If the condition is false the node is not
-     constructed and they are left on the stack. */
-  void closeNodeScope(Node n, boolean condition) {
-    if (condition) {
-      int a = nodeArity();
-      mk = ((Integer)marks.pop()).intValue();
-      while (a-- > 0) {
-        Node c = popNode();
-        c.jjtSetParent(n);
-        n.jjtAddChild(c, a);
-      }
-      n.jjtClose();
-      pushNode(n);
-      node_created = true;
-    } else {
-      mk = ((Integer)marks.pop()).intValue();
-      node_created = false;
-    }
-  }
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/NetMaskImpl.java b/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/NetMaskImpl.java
deleted file mode 100755
index ac0fcc8..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/NetMaskImpl.java
+++ /dev/null
@@ -1,266 +0,0 @@
-/*
- * Copyright (c) 2002, 2007, 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.jmx.snmp.IPAcl;
-
-import static com.sun.jmx.defaults.JmxProperties.SNMP_LOGGER;
-
-import java.util.logging.Level;
-import java.util.Vector;
-import java.util.Enumeration;
-import java.io.Serializable;
-import java.net.UnknownHostException;
-import java.net.InetAddress;
-
-import java.security.Principal;
-import java.security.acl.Group;
-
-
-/**
- * This class is used to represent a subnet mask (a group of hosts matching the same
- * IP mask).
- *
- * @see java.security.acl.Group
- */
-
-class NetMaskImpl extends PrincipalImpl implements Group, Serializable {
-    private static final long serialVersionUID = -7332541893877932896L;
-
-    protected byte[] subnet = null;
-    protected int prefix = -1;
-    /**
-     * Constructs an empty group.
-     * @exception UnknownHostException Not implemented
-     */
-    public NetMaskImpl () throws UnknownHostException {
-    }
-
-    private byte[] extractSubNet(byte[] b) {
-        int addrLength = b.length;
-        byte[] subnet = null;
-        if (SNMP_LOGGER.isLoggable(Level.FINEST)) {
-            SNMP_LOGGER.logp(Level.FINEST, NetMaskImpl.class.getName(),
-                "extractSubNet", "BINARY ARRAY :");
-            StringBuffer buff = new StringBuffer();
-            for(int i =0; i < addrLength; i++) {
-                buff.append((b[i] &0xFF) +":");
-            }
-            SNMP_LOGGER.logp(Level.FINEST, NetMaskImpl.class.getName(),
-                "extractSubNet", buff.toString());
-        }
-
-        // 8 is a byte size. Common to any InetAddress (V4 or V6).
-        int fullyCoveredByte = prefix / 8;
-        if(fullyCoveredByte == addrLength) {
-            if (SNMP_LOGGER.isLoggable(Level.FINEST)) {
-                SNMP_LOGGER.logp(Level.FINEST, NetMaskImpl.class.getName(), "extractSubNet",
-                   "The mask is the complete address, strange..." + addrLength);
-            }
-            subnet = b;
-            return subnet;
-        }
-        if(fullyCoveredByte > addrLength) {
-            if (SNMP_LOGGER.isLoggable(Level.FINEST)) {
-                SNMP_LOGGER.logp(Level.FINEST, NetMaskImpl.class.getName(), "extractSubNet",
-                   "The number of covered byte is longer than the address. BUG");
-            }
-            throw new IllegalArgumentException("The number of covered byte is longer than the address.");
-        }
-        int partialyCoveredIndex = fullyCoveredByte;
-        if (SNMP_LOGGER.isLoggable(Level.FINEST)) {
-            SNMP_LOGGER.logp(Level.FINEST, NetMaskImpl.class.getName(), "extractSubNet",
-               "Partially covered index : " + partialyCoveredIndex);
-        }
-        byte toDeal = b[partialyCoveredIndex];
-        if (SNMP_LOGGER.isLoggable(Level.FINEST)) {
-            SNMP_LOGGER.logp(Level.FINEST, NetMaskImpl.class.getName(), "extractSubNet",
-               "Partially covered byte : " + toDeal);
-        }
-
-        // 8 is a byte size. Common to any InetAddress (V4 or V6).
-        int nbbits = prefix % 8;
-        int subnetSize = 0;
-
-        if(nbbits == 0)
-        subnetSize = partialyCoveredIndex;
-        else
-        subnetSize = partialyCoveredIndex + 1;
-
-        if (SNMP_LOGGER.isLoggable(Level.FINEST)) {
-            SNMP_LOGGER.logp(Level.FINEST, NetMaskImpl.class.getName(), "extractSubNet",
-               "Remains : " + nbbits);
-        }
-
-        byte mask = 0;
-        for(int i = 0; i < nbbits; i++) {
-            mask |= (1 << (7 - i));
-        }
-        if (SNMP_LOGGER.isLoggable(Level.FINEST)) {
-            SNMP_LOGGER.logp(Level.FINEST, NetMaskImpl.class.getName(), "extractSubNet",
-               "Mask value : " + (mask & 0xFF));
-        }
-
-        byte maskedValue = (byte) ((int)toDeal & (int)mask);
-
-        if (SNMP_LOGGER.isLoggable(Level.FINEST)) {
-            SNMP_LOGGER.logp(Level.FINEST, NetMaskImpl.class.getName(), "extractSubNet",
-               "Masked byte : "  + (maskedValue &0xFF));
-        }
-        subnet = new byte[subnetSize];
-        if (SNMP_LOGGER.isLoggable(Level.FINEST)) {
-            SNMP_LOGGER.logp(Level.FINEST, NetMaskImpl.class.getName(), "extractSubNet",
-               "Resulting subnet : ");
-        }
-        for(int i = 0; i < partialyCoveredIndex; i++) {
-            subnet[i] = b[i];
-
-            if (SNMP_LOGGER.isLoggable(Level.FINEST)) {
-                SNMP_LOGGER.logp(Level.FINEST, NetMaskImpl.class.getName(), "extractSubNet",
-                   (subnet[i] & 0xFF) +":");
-            }
-        }
-
-        if(nbbits != 0) {
-            subnet[partialyCoveredIndex] = maskedValue;
-            if (SNMP_LOGGER.isLoggable(Level.FINEST)) {
-                SNMP_LOGGER.logp(Level.FINEST, NetMaskImpl.class.getName(), "extractSubNet",
-                    "Last subnet byte : " + (subnet[partialyCoveredIndex] &0xFF));
-            }
-        }
-        return subnet;
-    }
-
-  /**
-   * Constructs a group using the specified subnet mask.
-   * THIS ALGORITHM IS V4 and V6 compatible.
-   *
-   * @exception UnknownHostException if the subnet mask cann't be built.
-   */
-  public NetMaskImpl (String a, int prefix) throws UnknownHostException {
-        super(a);
-        this.prefix = prefix;
-        subnet = extractSubNet(getAddress().getAddress());
-  }
-
-  /**
-   * Adds the specified member to the group.
-   *
-   * @param p the principal to add to this group.
-   * @return true if the member was successfully added, false if the
-   *      principal was already a member.
-   */
-  public boolean addMember(Principal p) {
-        // we don't need to add members because the ip address is a subnet mask
-        return true;
-  }
-
-  public int hashCode() {
-        return super.hashCode();
-  }
-
-  /**
-   * Compares this group to the specified object. Returns true if the object
-   * passed in matches the group represented.
-   *
-   * @param p the object to compare with.
-   * @return true if the object passed in matches the subnet mask,
-   *    false otherwise.
-   */
-    public boolean equals (Object p) {
-        if (p instanceof PrincipalImpl || p instanceof NetMaskImpl){
-            PrincipalImpl received = (PrincipalImpl) p;
-            InetAddress addr = received.getAddress();
-            if (SNMP_LOGGER.isLoggable(Level.FINEST)) {
-                SNMP_LOGGER.logp(Level.FINEST, NetMaskImpl.class.getName(), "equals",
-                    "Received Address : " + addr);
-            }
-            byte[] recAddr = addr.getAddress();
-            for(int i = 0; i < subnet.length; i++) {
-                if (SNMP_LOGGER.isLoggable(Level.FINEST)) {
-                    SNMP_LOGGER.logp(Level.FINEST, NetMaskImpl.class.getName(), "equals",
-                        "(recAddr[i]) : " + (recAddr[i] & 0xFF));
-                    SNMP_LOGGER.logp(Level.FINEST, NetMaskImpl.class.getName(), "equals",
-                        "(recAddr[i] & subnet[i]) : " +
-                         ((recAddr[i] & (int)subnet[i]) &0xFF) +
-                         " subnet[i] : " + (subnet[i] &0xFF));
-                }
-                if((recAddr[i] & subnet[i]) != subnet[i]) {
-                    if (SNMP_LOGGER.isLoggable(Level.FINEST)) {
-                        SNMP_LOGGER.logp(Level.FINEST, NetMaskImpl.class.getName(), "equals",
-                            "FALSE");
-                    }
-                    return false;
-                }
-            }
-            if (SNMP_LOGGER.isLoggable(Level.FINEST)) {
-                SNMP_LOGGER.logp(Level.FINEST, NetMaskImpl.class.getName(), "equals",
-                    "TRUE");
-            }
-            return true;
-        } else
-            return false;
-    }
-  /**
-   * Returns true if the passed principal is a member of the group.
-   *
-   * @param p the principal whose membership is to be checked.
-   * @return true if the principal is a member of this group, false otherwise.
-   */
-  public boolean isMember(Principal p) {
-        if ((p.hashCode() & super.hashCode()) == p.hashCode()) return true;
-        else return false;
-  }
-
-  /**
-   * Returns an enumeration which contains the subnet mask.
-   *
-   * @return an enumeration which contains the subnet mask.
-   */
-  public Enumeration<? extends Principal> members(){
-        Vector<Principal> v = new Vector<Principal>(1);
-        v.addElement(this);
-        return v.elements();
-  }
-
-  /**
-   * Removes the specified member from the group. (Not implemented)
-   *
-   * @param p the principal to remove from this group.
-   * @return allways return true.
-   */
-  public boolean removeMember(Principal p) {
-        return true;
-  }
-
-  /**
-   * Prints a string representation of this group.
-   *
-   * @return  a string representation of this group.
-   */
-  public String toString() {
-        return ("NetMaskImpl :"+ super.getAddress().toString() + "/" + prefix);
-  }
-
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/Node.java b/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/Node.java
deleted file mode 100755
index fa0d215..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/Node.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-
-/* Generated By:JJTree: Do not edit this line. Node.java */
-
-package com.sun.jmx.snmp.IPAcl;
-
-/* All AST nodes must implement this interface.  It provides basic
-   machinery for constructing the parent and child relationships
-   between nodes. */
-
-interface Node {
-
-  /** This method is called after the node has been made the current
-    node.  It indicates that child nodes can now be added to it. */
-  public void jjtOpen();
-
-  /** This method is called after all the child nodes have been
-    added. */
-  public void jjtClose();
-
-  /** This pair of methods are used to inform the node of its
-    parent. */
-  public void jjtSetParent(Node n);
-  public Node jjtGetParent();
-
-  /** This method tells the node to add its argument to the node's
-    list of children.  */
-  public void jjtAddChild(Node n, int i);
-
-  /** This method returns a child node.  The children are numbered
-     from zero, left to right. */
-  public Node jjtGetChild(int i);
-
-  /** Return the number of children the node has. */
-  public int jjtGetNumChildren();
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/OwnerImpl.java b/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/OwnerImpl.java
deleted file mode 100755
index d72b973..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/OwnerImpl.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * Copyright (c) 1997, 2007, 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.jmx.snmp.IPAcl;
-
-
-
-import java.util.Vector;
-import java.io.Serializable;
-
-import java.security.Principal;
-import java.security.acl.Owner;
-import java.security.acl.LastOwnerException;
-import java.security.acl.NotOwnerException;
-
-
-/**
- * Owner of Access Control Lists (ACLs).
- * The initial owner Principal should be specified as an
- * argument to the constructor of the class AclImpl.
- *
- * @see java.security.acl.Owner
- */
-
-class OwnerImpl implements Owner, Serializable {
-  private static final long serialVersionUID = -576066072046319874L;
-
-  private Vector<Principal> ownerList = null;
-
-  /**
-   * Constructs an empty list of owner.
-   */
-  public OwnerImpl (){
-        ownerList = new Vector<Principal>();
-  }
-
-  /**
-   * Constructs a list of owner with the specified principal as first element.
-   *
-   * @param owner the principal added to the owner list.
-   */
-  public OwnerImpl (PrincipalImpl owner){
-        ownerList = new Vector<Principal>();
-        ownerList.addElement(owner);
-  }
-
-  /**
-   * Adds an owner. Only owners can modify ACL contents. The caller principal
-   * must be an owner of the ACL in order to invoke this method. That is, only
-   * an owner can add another owner. The initial owner is configured at
-   * ACL construction time.
-   *
-   * @param caller the principal invoking this method.
-   *        It must be an owner of the ACL.
-   * @param owner the owner that should be added to the list of owners.
-   * @return true if successful, false if owner is already an owner.
-   * @exception NotOwnerException if the caller principal is not an owner
-   *    of the ACL.
-   */
-  public boolean addOwner(Principal caller, Principal owner)
-        throws NotOwnerException {
-        if (!ownerList.contains(caller))
-          throw new NotOwnerException();
-
-        if (ownerList.contains(owner)) {
-          return false;
-        } else {
-          ownerList.addElement(owner);
-          return true;
-        }
-  }
-
-  /**
-   * Deletes an owner. If this is the last owner in the ACL, an exception is raised.
-   *<P>
-   * The caller principal must be an owner of the ACL in order to invoke this method.
-   *
-   * @param caller the principal invoking this method. It must be an owner
-   *   of the ACL.
-   * @param owner the owner to be removed from the list of owners.
-   * @return true if successful, false if owner is already an owner.
-   * @exception NotOwnerException if the caller principal is not an owner
-   *   of the ACL.
-   * @exception LastOwnerException if there is only one owner left, so that
-   *   deleteOwner would leave the ACL owner-less.
-   */
-  public boolean deleteOwner(Principal caller, Principal owner)
-                throws NotOwnerException,LastOwnerException {
-
-        if (!ownerList.contains(caller))
-          throw new NotOwnerException();
-
-        if (!ownerList.contains(owner)){
-          return false;
-        } else {
-          if (ownerList.size() == 1)
-                throw new LastOwnerException();
-
-          ownerList.removeElement(owner);
-          return true;
-        }
-  }
-
-  /**
-   * Returns true if the given principal is an owner of the ACL.
-   *
-   * @param owner the principal to be checked to determine whether or
-   *        not it is an owner.
-   * @return true if the given principal is an owner of the ACL.
-   */
-  public boolean isOwner(Principal owner){
-        return ownerList.contains(owner);
-  }
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/ParseError.java b/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/ParseError.java
deleted file mode 100755
index 230d4d3..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/ParseError.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (c) 1997, 2006, 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.
- */
-
-
-/* Generated By:JavaCC: Do not edit this line. ParseError.java Version 0.7pre1 */
-package com.sun.jmx.snmp.IPAcl;
-
-class ParseError extends Exception {
-   private static final long serialVersionUID = 4907307342076722310L;
-
-   public ParseError() {
-   }
-   public ParseError(String message) {
-      super(message);
-   }
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/ParseException.java b/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/ParseException.java
deleted file mode 100755
index 7d7f3f7..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/ParseException.java
+++ /dev/null
@@ -1,217 +0,0 @@
-/*
- * Copyright (c) 1997, 2006, 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.
- */
-
-/* Generated By:JavaCC: Do not edit this line. ParseException.java Version 0.7pre6 */
-package com.sun.jmx.snmp.IPAcl;
-
-/**
- * This exception is thrown when parse errors are encountered.
- * You can explicitly create objects of this exception type by
- * calling the method generateParseException in the generated
- * parser.
- *
- * You can modify this class to customize your error reporting
- * mechanisms so long as you retain the public fields.
- */
-class ParseException extends Exception {
-  private static final long serialVersionUID = -3695190720704845876L;
-
-  /**
-   * This constructor is used by the method "generateParseException"
-   * in the generated parser.  Calling this constructor generates
-   * a new object of this type with the fields "currentToken",
-   * "expectedTokenSequences", and "tokenImage" set.  The boolean
-   * flag "specialConstructor" is also set to true to indicate that
-   * this constructor was used to create this object.
-   * This constructor calls its super class with the empty string
-   * to force the "toString" method of parent class "Throwable" to
-   * print the error message in the form:
-   *     ParseException: <result of getMessage>
-   */
-  public ParseException(Token currentTokenVal,
-                        int[][] expectedTokenSequencesVal,
-                        String[] tokenImageVal
-                       )
-  {
-    super("");
-    specialConstructor = true;
-    currentToken = currentTokenVal;
-    expectedTokenSequences = expectedTokenSequencesVal;
-    tokenImage = tokenImageVal;
-  }
-
-  /**
-   * The following constructors are for use by you for whatever
-   * purpose you can think of.  Constructing the exception in this
-   * manner makes the exception behave in the normal way - i.e., as
-   * documented in the class "Throwable".  The fields "errorToken",
-   * "expectedTokenSequences", and "tokenImage" do not contain
-   * relevant information.  The JavaCC generated code does not use
-   * these constructors.
-   */
-
-  public ParseException() {
-    super();
-    specialConstructor = false;
-  }
-
-  public ParseException(String message) {
-    super(message);
-    specialConstructor = false;
-  }
-
-  /**
-   * This variable determines which constructor was used to create
-   * this object and thereby affects the semantics of the
-   * "getMessage" method (see below).
-   */
-  protected boolean specialConstructor;
-
-  /**
-   * This is the last token that has been consumed successfully.  If
-   * this object has been created due to a parse error, the token
-   * followng this token will (therefore) be the first error token.
-   */
-  public Token currentToken;
-
-  /**
-   * Each entry in this array is an array of integers.  Each array
-   * of integers represents a sequence of tokens (by their ordinal
-   * values) that is expected at this point of the parse.
-   */
-  public int[][] expectedTokenSequences;
-
-  /**
-   * This is a reference to the "tokenImage" array of the generated
-   * parser within which the parse error occurred.  This array is
-   * defined in the generated ...Constants interface.
-   */
-  public String[] tokenImage;
-
-  /**
-   * This method has the standard behavior when this object has been
-   * created using the standard constructors.  Otherwise, it uses
-   * "currentToken" and "expectedTokenSequences" to generate a parse
-   * error message and returns it.  If this object has been created
-   * due to a parse error, and you do not catch it (it gets thrown
-   * from the parser), then this method is called during the printing
-   * of the final stack trace, and hence the correct error message
-   * gets displayed.
-   */
-  public String getMessage() {
-    if (!specialConstructor) {
-      return super.getMessage();
-    }
-    String expected = "";
-    int maxSize = 0;
-    for (int i = 0; i < expectedTokenSequences.length; i++) {
-      if (maxSize < expectedTokenSequences[i].length) {
-        maxSize = expectedTokenSequences[i].length;
-      }
-      for (int j = 0; j < expectedTokenSequences[i].length; j++) {
-        expected += tokenImage[expectedTokenSequences[i][j]] + " ";
-      }
-      if (expectedTokenSequences[i][expectedTokenSequences[i].length - 1] != 0) {
-        expected += "...";
-      }
-      expected += eol + "    ";
-    }
-    String retval = "Encountered \"";
-    Token tok = currentToken.next;
-    for (int i = 0; i < maxSize; i++) {
-      if (i != 0) retval += " ";
-      if (tok.kind == 0) {
-        retval += tokenImage[0];
-        break;
-      }
-      retval += add_escapes(tok.image);
-      tok = tok.next;
-    }
-    retval += "\" at line " + currentToken.next.beginLine + ", column " + currentToken.next.beginColumn + "." + eol;
-    if (expectedTokenSequences.length == 1) {
-      retval += "Was expecting:" + eol + "    ";
-    } else {
-      retval += "Was expecting one of:" + eol + "    ";
-    }
-    retval += expected;
-    return retval;
-  }
-
-  /**
-   * The end of line string for this machine.
-   */
-  protected String eol = System.getProperty("line.separator", "\n");
-
-  /**
-   * Used to convert raw characters to their escaped version
-   * when these raw version cannot be used as part of an ASCII
-   * string literal.
-   */
-  protected String add_escapes(String str) {
-      StringBuffer retval = new StringBuffer();
-      char ch;
-      for (int i = 0; i < str.length(); i++) {
-        switch (str.charAt(i))
-        {
-           case 0 :
-              continue;
-           case '\b':
-              retval.append("\\b");
-              continue;
-           case '\t':
-              retval.append("\\t");
-              continue;
-           case '\n':
-              retval.append("\\n");
-              continue;
-           case '\f':
-              retval.append("\\f");
-              continue;
-           case '\r':
-              retval.append("\\r");
-              continue;
-           case '\"':
-              retval.append("\\\"");
-              continue;
-           case '\'':
-              retval.append("\\\'");
-              continue;
-           case '\\':
-              retval.append("\\\\");
-              continue;
-           default:
-              if ((ch = str.charAt(i)) < 0x20 || ch > 0x7e) {
-                 String s = "0000" + Integer.toString(ch, 16);
-                 retval.append("\\u" + s.substring(s.length() - 4, s.length()));
-              } else {
-                 retval.append(ch);
-              }
-              continue;
-        }
-      }
-      return retval.toString();
-   }
-
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/Parser.java b/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/Parser.java
deleted file mode 100755
index b2fe5f5..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/Parser.java
+++ /dev/null
@@ -1,1285 +0,0 @@
-/*
- * Copyright (c) 1997, 2006, 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.
- */
-
-/* Generated By:JJTree&JavaCC: Do not edit this line. Parser.java */
-package com.sun.jmx.snmp.IPAcl;
-
-import java.io.*;
-
-@SuppressWarnings("unchecked")  // generated code, not worth fixing
-class Parser/*@bgen(jjtree)*/implements ParserTreeConstants, ParserConstants {/*@bgen(jjtree)*/
-  protected JJTParserState jjtree = new JJTParserState();
-
-// A file can contain several acl definitions
-//
-  final public JDMSecurityDefs SecurityDefs() throws ParseException {
-                                   /*@bgen(jjtree) SecurityDefs */
-  JDMSecurityDefs jjtn000 = new JDMSecurityDefs(JJTSECURITYDEFS);
-  boolean jjtc000 = true;
-  jjtree.openNodeScope(jjtn000);
-    try {
-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case ACL:
-        AclBlock();
-        break;
-      default:
-        jj_la1[0] = jj_gen;
-        ;
-      }
-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case TRAP:
-        TrapBlock();
-        break;
-      default:
-        jj_la1[1] = jj_gen;
-        ;
-      }
-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case INFORM:
-        InformBlock();
-        break;
-      default:
-        jj_la1[2] = jj_gen;
-        ;
-      }
-      jj_consume_token(0);
-    jjtree.closeNodeScope(jjtn000, true);
-    jjtc000 = false;
-    {if (true) return jjtn000;}
-    } catch (Throwable jjte000) {
-    if (jjtc000) {
-      jjtree.clearNodeScope(jjtn000);
-      jjtc000 = false;
-    } else {
-      jjtree.popNode();
-    }
-    if (jjte000 instanceof RuntimeException) {
-      {if (true) throw (RuntimeException)jjte000;}
-    }
-    if (jjte000 instanceof ParseException) {
-      {if (true) throw (ParseException)jjte000;}
-    }
-    {if (true) throw (Error)jjte000;}
-    } finally {
-    if (jjtc000) {
-      jjtree.closeNodeScope(jjtn000, true);
-    }
-    }
-    throw new Error("Missing return statement in function");
-  }
-
-  final public void AclBlock() throws ParseException {
-                  /*@bgen(jjtree) AclBlock */
-  JDMAclBlock jjtn000 = new JDMAclBlock(JJTACLBLOCK);
-  boolean jjtc000 = true;
-  jjtree.openNodeScope(jjtn000);
-    try {
-      jj_consume_token(ACL);
-      jj_consume_token(ASSIGN);
-      jj_consume_token(LBRACE);
-      label_1:
-      while (true) {
-        AclItem();
-        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-        case LBRACE:
-          ;
-          break;
-        default:
-          jj_la1[3] = jj_gen;
-          break label_1;
-        }
-      }
-      jj_consume_token(RBRACE);
-    } catch (Throwable jjte000) {
-  if (jjtc000) {
-    jjtree.clearNodeScope(jjtn000);
-    jjtc000 = false;
-  } else {
-    jjtree.popNode();
-  }
-  if (jjte000 instanceof RuntimeException) {
-    {if (true) throw (RuntimeException)jjte000;}
-  }
-  if (jjte000 instanceof ParseException) {
-    {if (true) throw (ParseException)jjte000;}
-  }
-  {if (true) throw (Error)jjte000;}
-    } finally {
-  if (jjtc000) {
-    jjtree.closeNodeScope(jjtn000, true);
-  }
-    }
-  }
-
-  final public void AclItem() throws ParseException {
-                 /*@bgen(jjtree) AclItem */
-  JDMAclItem jjtn000 = new JDMAclItem(JJTACLITEM);
-  boolean jjtc000 = true;
-  jjtree.openNodeScope(jjtn000);
-    try {
-      jj_consume_token(LBRACE);
-      jjtn000.com = Communities();
-      jjtn000.access = Access();
-      Managers();
-      jj_consume_token(RBRACE);
-    } catch (Throwable jjte000) {
-  if (jjtc000) {
-    jjtree.clearNodeScope(jjtn000);
-    jjtc000 = false;
-  } else {
-    jjtree.popNode();
-  }
-  if (jjte000 instanceof RuntimeException) {
-    {if (true) throw (RuntimeException)jjte000;}
-  }
-  if (jjte000 instanceof ParseException) {
-    {if (true) throw (ParseException)jjte000;}
-  }
-  {if (true) throw (Error)jjte000;}
-    } finally {
-  if (jjtc000) {
-    jjtree.closeNodeScope(jjtn000, true);
-  }
-    }
-  }
-
-  final public JDMCommunities Communities() throws ParseException {
-                               /*@bgen(jjtree) Communities */
-  JDMCommunities jjtn000 = new JDMCommunities(JJTCOMMUNITIES);
-  boolean jjtc000 = true;
-  jjtree.openNodeScope(jjtn000);
-    try {
-      jj_consume_token(COMMUNITIES);
-      jj_consume_token(ASSIGN);
-      Community();
-      label_2:
-      while (true) {
-        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-        case COMMA:
-          ;
-          break;
-        default:
-          jj_la1[4] = jj_gen;
-          break label_2;
-        }
-        jj_consume_token(COMMA);
-        Community();
-      }
-  jjtree.closeNodeScope(jjtn000, true);
-  jjtc000 = false;
- {if (true) return jjtn000;}
-    } catch (Throwable jjte000) {
-  if (jjtc000) {
-    jjtree.clearNodeScope(jjtn000);
-    jjtc000 = false;
-  } else {
-    jjtree.popNode();
-  }
-  if (jjte000 instanceof RuntimeException) {
-    {if (true) throw (RuntimeException)jjte000;}
-  }
-  if (jjte000 instanceof ParseException) {
-    {if (true) throw (ParseException)jjte000;}
-  }
-  {if (true) throw (Error)jjte000;}
-    } finally {
-  if (jjtc000) {
-    jjtree.closeNodeScope(jjtn000, true);
-  }
-    }
-    throw new Error("Missing return statement in function");
-  }
-
-  final public void Community() throws ParseException {
- /*@bgen(jjtree) Community */
-  JDMCommunity jjtn000 = new JDMCommunity(JJTCOMMUNITY);
-  boolean jjtc000 = true;
-  jjtree.openNodeScope(jjtn000);Token t;
-    try {
-      t = jj_consume_token(IDENTIFIER);
-                 jjtree.closeNodeScope(jjtn000, true);
-                 jjtc000 = false;
-                jjtn000.communityString= t.image;
-    } finally {
-  if (jjtc000) {
-    jjtree.closeNodeScope(jjtn000, true);
-  }
-    }
-  }
-
-  final public JDMAccess Access() throws ParseException {
-                     /*@bgen(jjtree) Access */
-  JDMAccess jjtn000 = new JDMAccess(JJTACCESS);
-  boolean jjtc000 = true;
-  jjtree.openNodeScope(jjtn000);
-    try {
-      jj_consume_token(ACCESS);
-      jj_consume_token(ASSIGN);
-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case RO:
-        jj_consume_token(RO);
-                     jjtn000.access= RO;
-        break;
-      case RW:
-        jj_consume_token(RW);
-                     jjtn000.access= RW;
-        break;
-      default:
-        jj_la1[5] = jj_gen;
-        jj_consume_token(-1);
-        throw new ParseException();
-      }
-  jjtree.closeNodeScope(jjtn000, true);
-  jjtc000 = false;
- {if (true) return jjtn000;}
-    } finally {
-  if (jjtc000) {
-    jjtree.closeNodeScope(jjtn000, true);
-  }
-    }
-    throw new Error("Missing return statement in function");
-  }
-
-  final public void Managers() throws ParseException {
-                   /*@bgen(jjtree) Managers */
-  JDMManagers jjtn000 = new JDMManagers(JJTMANAGERS);
-  boolean jjtc000 = true;
-  jjtree.openNodeScope(jjtn000);
-    try {
-      jj_consume_token(MANAGERS);
-      jj_consume_token(ASSIGN);
-      Host();
-      label_3:
-      while (true) {
-        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-        case COMMA:
-          ;
-          break;
-        default:
-          jj_la1[6] = jj_gen;
-          break label_3;
-        }
-        jj_consume_token(COMMA);
-        Host();
-      }
-    } catch (Throwable jjte000) {
-  if (jjtc000) {
-    jjtree.clearNodeScope(jjtn000);
-    jjtc000 = false;
-  } else {
-    jjtree.popNode();
-  }
-  if (jjte000 instanceof RuntimeException) {
-    {if (true) throw (RuntimeException)jjte000;}
-  }
-  if (jjte000 instanceof ParseException) {
-    {if (true) throw (ParseException)jjte000;}
-  }
-  {if (true) throw (Error)jjte000;}
-    } finally {
-  if (jjtc000) {
-    jjtree.closeNodeScope(jjtn000, true);
-  }
-    }
-  }
-
-  final public void Host() throws ParseException {
- /*@bgen(jjtree) Host */
-  JDMHost jjtn000 = new JDMHost(JJTHOST);
-  boolean jjtc000 = true;
-  jjtree.openNodeScope(jjtn000);Token t;
-    try {
-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case IDENTIFIER:
-        HostName();
-        break;
-      default:
-        jj_la1[7] = jj_gen;
-        if (jj_2_1(2147483647)) {
-          NetMask();
-        } else if (jj_2_2(2147483647)) {
-          NetMaskV6();
-        } else if (jj_2_3(2147483647)) {
-          IpAddress();
-        } else {
-          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-          case V6_ADDRESS:
-            IpV6Address();
-            break;
-          case INTEGER_LITERAL:
-            IpMask();
-            break;
-          default:
-            jj_la1[8] = jj_gen;
-            jj_consume_token(-1);
-            throw new ParseException();
-          }
-        }
-      }
-    } catch (Throwable jjte000) {
-  if (jjtc000) {
-    jjtree.clearNodeScope(jjtn000);
-    jjtc000 = false;
-  } else {
-    jjtree.popNode();
-  }
-  if (jjte000 instanceof RuntimeException) {
-    {if (true) throw (RuntimeException)jjte000;}
-  }
-  if (jjte000 instanceof ParseException) {
-    {if (true) throw (ParseException)jjte000;}
-  }
-  {if (true) throw (Error)jjte000;}
-    } finally {
-  if (jjtc000) {
-    jjtree.closeNodeScope(jjtn000, true);
-  }
-    }
-  }
-
-  final public void HostName() throws ParseException {
- /*@bgen(jjtree) HostName */
-  JDMHostName jjtn000 = new JDMHostName(JJTHOSTNAME);
-  boolean jjtc000 = true;
-  jjtree.openNodeScope(jjtn000);Token t;
-    try {
-      t = jj_consume_token(IDENTIFIER);
-                   jjtn000.name.append(t.image);
-      label_4:
-      while (true) {
-        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-        case DOT:
-          ;
-          break;
-        default:
-          jj_la1[9] = jj_gen;
-          break label_4;
-        }
-        jj_consume_token(DOT);
-        t = jj_consume_token(IDENTIFIER);
-   jjtn000.name.append( "." + t.image);
-      }
-    } finally {
-    if (jjtc000) {
-      jjtree.closeNodeScope(jjtn000, true);
-    }
-    }
-  }
-
-  final public void IpAddress() throws ParseException {
- /*@bgen(jjtree) IpAddress */
-JDMIpAddress jjtn000 = new JDMIpAddress(JJTIPADDRESS);
-boolean jjtc000 = true;
-jjtree.openNodeScope(jjtn000);Token t;
-    try {
-      t = jj_consume_token(INTEGER_LITERAL);
-   jjtn000.address.append(t.image);
-      label_5:
-      while (true) {
-        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-        case DOT:
-          ;
-          break;
-        default:
-          jj_la1[10] = jj_gen;
-          break label_5;
-        }
-        jj_consume_token(DOT);
-        t = jj_consume_token(INTEGER_LITERAL);
-   jjtn000.address.append( "." + t.image);
-      }
-    } finally {
-  if (jjtc000) {
-    jjtree.closeNodeScope(jjtn000, true);
-  }
-    }
-  }
-
-  final public void IpV6Address() throws ParseException {
- /*@bgen(jjtree) IpV6Address */
-JDMIpV6Address jjtn000 = new JDMIpV6Address(JJTIPV6ADDRESS);
-boolean jjtc000 = true;
-jjtree.openNodeScope(jjtn000);Token t;
-    try {
-      t = jj_consume_token(V6_ADDRESS);
-    jjtree.closeNodeScope(jjtn000, true);
-    jjtc000 = false;
-   jjtn000.address.append(t.image);
-    } finally {
-  if (jjtc000) {
-    jjtree.closeNodeScope(jjtn000, true);
-  }
-    }
-  }
-
-  final public void IpMask() throws ParseException {
- /*@bgen(jjtree) IpMask */
-JDMIpMask jjtn000 = new JDMIpMask(JJTIPMASK);
-boolean jjtc000 = true;
-jjtree.openNodeScope(jjtn000);Token t;
-    try {
-      t = jj_consume_token(INTEGER_LITERAL);
-   jjtn000.address.append(t.image);
-      label_6:
-      while (true) {
-        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-        case MARK:
-          ;
-          break;
-        default:
-          jj_la1[11] = jj_gen;
-          break label_6;
-        }
-        jj_consume_token(MARK);
-        t = jj_consume_token(INTEGER_LITERAL);
-   jjtn000.address.append( "." + t.image);
-      }
-    } finally {
-  if (jjtc000) {
-    jjtree.closeNodeScope(jjtn000, true);
-  }
-    }
-  }
-
-  final public void NetMask() throws ParseException {
- /*@bgen(jjtree) NetMask */
-JDMNetMask jjtn000 = new JDMNetMask(JJTNETMASK);
-boolean jjtc000 = true;
-jjtree.openNodeScope(jjtn000);Token t;
-    try {
-      t = jj_consume_token(INTEGER_LITERAL);
-   jjtn000.address.append(t.image);
-      label_7:
-      while (true) {
-        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-        case DOT:
-          ;
-          break;
-        default:
-          jj_la1[12] = jj_gen;
-          break label_7;
-        }
-        jj_consume_token(DOT);
-        t = jj_consume_token(INTEGER_LITERAL);
-   jjtn000.address.append( "." + t.image);
-      }
-      jj_consume_token(MASK);
-      t = jj_consume_token(INTEGER_LITERAL);
-                              jjtree.closeNodeScope(jjtn000, true);
-                              jjtc000 = false;
-                             jjtn000.mask = t.image;
-    } finally {
-  if (jjtc000) {
-    jjtree.closeNodeScope(jjtn000, true);
-  }
-    }
-  }
-
-  final public void NetMaskV6() throws ParseException {
- /*@bgen(jjtree) NetMaskV6 */
-JDMNetMaskV6 jjtn000 = new JDMNetMaskV6(JJTNETMASKV6);
-boolean jjtc000 = true;
-jjtree.openNodeScope(jjtn000);Token t;
-    try {
-      t = jj_consume_token(V6_ADDRESS);
-   jjtn000.address.append(t.image);
-      jj_consume_token(MASK);
-      t = jj_consume_token(INTEGER_LITERAL);
-                           jjtree.closeNodeScope(jjtn000, true);
-                           jjtc000 = false;
-                          jjtn000.mask = t.image;
-    } finally {
-  if (jjtc000) {
-    jjtree.closeNodeScope(jjtn000, true);
-  }
-    }
-  }
-
-  final public void TrapBlock() throws ParseException {
-                   /*@bgen(jjtree) TrapBlock */
-  JDMTrapBlock jjtn000 = new JDMTrapBlock(JJTTRAPBLOCK);
-  boolean jjtc000 = true;
-  jjtree.openNodeScope(jjtn000);
-    try {
-      jj_consume_token(TRAP);
-      jj_consume_token(ASSIGN);
-      jj_consume_token(LBRACE);
-      label_8:
-      while (true) {
-        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-        case LBRACE:
-          ;
-          break;
-        default:
-          jj_la1[13] = jj_gen;
-          break label_8;
-        }
-        TrapItem();
-      }
-      jj_consume_token(RBRACE);
-    } catch (Throwable jjte000) {
-  if (jjtc000) {
-    jjtree.clearNodeScope(jjtn000);
-    jjtc000 = false;
-  } else {
-    jjtree.popNode();
-  }
-  if (jjte000 instanceof RuntimeException) {
-    {if (true) throw (RuntimeException)jjte000;}
-  }
-  if (jjte000 instanceof ParseException) {
-    {if (true) throw (ParseException)jjte000;}
-  }
-  {if (true) throw (Error)jjte000;}
-    } finally {
-  if (jjtc000) {
-    jjtree.closeNodeScope(jjtn000, true);
-  }
-    }
-  }
-
-  final public void TrapItem() throws ParseException {
-                  /*@bgen(jjtree) TrapItem */
-  JDMTrapItem jjtn000 = new JDMTrapItem(JJTTRAPITEM);
-  boolean jjtc000 = true;
-  jjtree.openNodeScope(jjtn000);
-    try {
-      jj_consume_token(LBRACE);
-      jjtn000.comm = TrapCommunity();
-      TrapInterestedHost();
-      label_9:
-      while (true) {
-        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-        case LBRACE:
-          ;
-          break;
-        default:
-          jj_la1[14] = jj_gen;
-          break label_9;
-        }
-        Enterprise();
-      }
-      jj_consume_token(RBRACE);
-    } catch (Throwable jjte000) {
-  if (jjtc000) {
-    jjtree.clearNodeScope(jjtn000);
-    jjtc000 = false;
-  } else {
-    jjtree.popNode();
-  }
-  if (jjte000 instanceof RuntimeException) {
-    {if (true) throw (RuntimeException)jjte000;}
-  }
-  if (jjte000 instanceof ParseException) {
-    {if (true) throw (ParseException)jjte000;}
-  }
-  {if (true) throw (Error)jjte000;}
-    } finally {
-  if (jjtc000) {
-    jjtree.closeNodeScope(jjtn000, true);
-  }
-    }
-  }
-
-  final public JDMTrapCommunity TrapCommunity() throws ParseException {
- /*@bgen(jjtree) TrapCommunity */
-  JDMTrapCommunity jjtn000 = new JDMTrapCommunity(JJTTRAPCOMMUNITY);
-  boolean jjtc000 = true;
-  jjtree.openNodeScope(jjtn000);Token t;
-    try {
-      jj_consume_token(TRAPCOMMUNITY);
-      jj_consume_token(ASSIGN);
-      t = jj_consume_token(IDENTIFIER);
-                                      jjtree.closeNodeScope(jjtn000, true);
-                                      jjtc000 = false;
-                                      jjtn000.community= t.image; {if (true) return jjtn000;}
-    } finally {
-  if (jjtc000) {
-    jjtree.closeNodeScope(jjtn000, true);
-  }
-    }
-    throw new Error("Missing return statement in function");
-  }
-
-  final public void TrapInterestedHost() throws ParseException {
-                            /*@bgen(jjtree) TrapInterestedHost */
-  JDMTrapInterestedHost jjtn000 = new JDMTrapInterestedHost(JJTTRAPINTERESTEDHOST);
-  boolean jjtc000 = true;
-  jjtree.openNodeScope(jjtn000);
-    try {
-      jj_consume_token(HOSTS);
-      jj_consume_token(ASSIGN);
-      HostTrap();
-      label_10:
-      while (true) {
-        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-        case COMMA:
-          ;
-          break;
-        default:
-          jj_la1[15] = jj_gen;
-          break label_10;
-        }
-        jj_consume_token(COMMA);
-        HostTrap();
-      }
-    } catch (Throwable jjte000) {
-  if (jjtc000) {
-    jjtree.clearNodeScope(jjtn000);
-    jjtc000 = false;
-  } else {
-    jjtree.popNode();
-  }
-  if (jjte000 instanceof RuntimeException) {
-    {if (true) throw (RuntimeException)jjte000;}
-  }
-  if (jjte000 instanceof ParseException) {
-    {if (true) throw (ParseException)jjte000;}
-  }
-  {if (true) throw (Error)jjte000;}
-    } finally {
-  if (jjtc000) {
-    jjtree.closeNodeScope(jjtn000, true);
-  }
-    }
-  }
-
-  final public void HostTrap() throws ParseException {
- /*@bgen(jjtree) HostTrap */
-  JDMHostTrap jjtn000 = new JDMHostTrap(JJTHOSTTRAP);
-  boolean jjtc000 = true;
-  jjtree.openNodeScope(jjtn000);Token t;
-    try {
-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case IDENTIFIER:
-        HostName();
-        break;
-      case INTEGER_LITERAL:
-        IpAddress();
-        break;
-      case V6_ADDRESS:
-        IpV6Address();
-        break;
-      default:
-        jj_la1[16] = jj_gen;
-        jj_consume_token(-1);
-        throw new ParseException();
-      }
-    } catch (Throwable jjte000) {
-  if (jjtc000) {
-    jjtree.clearNodeScope(jjtn000);
-    jjtc000 = false;
-  } else {
-    jjtree.popNode();
-  }
-  if (jjte000 instanceof RuntimeException) {
-    {if (true) throw (RuntimeException)jjte000;}
-  }
-  if (jjte000 instanceof ParseException) {
-    {if (true) throw (ParseException)jjte000;}
-  }
-  {if (true) throw (Error)jjte000;}
-    } finally {
-  if (jjtc000) {
-    jjtree.closeNodeScope(jjtn000, true);
-  }
-    }
-  }
-
-  final public void Enterprise() throws ParseException {
- /*@bgen(jjtree) Enterprise */
-  JDMEnterprise jjtn000 = new JDMEnterprise(JJTENTERPRISE);
-  boolean jjtc000 = true;
-  jjtree.openNodeScope(jjtn000);Token t;
-    try {
-      jj_consume_token(LBRACE);
-      jj_consume_token(ENTERPRISE);
-      jj_consume_token(ASSIGN);
-      t = jj_consume_token(CSTRING);
-                               jjtn000.enterprise= t.image;
-      jj_consume_token(TRAPNUM);
-      jj_consume_token(ASSIGN);
-      TrapNum();
-      label_11:
-      while (true) {
-        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-        case COMMA:
-          ;
-          break;
-        default:
-          jj_la1[17] = jj_gen;
-          break label_11;
-        }
-        jj_consume_token(COMMA);
-        TrapNum();
-      }
-      jj_consume_token(RBRACE);
-    } catch (Throwable jjte000) {
-  if (jjtc000) {
-    jjtree.clearNodeScope(jjtn000);
-    jjtc000 = false;
-  } else {
-    jjtree.popNode();
-  }
-  if (jjte000 instanceof RuntimeException) {
-    {if (true) throw (RuntimeException)jjte000;}
-  }
-  if (jjte000 instanceof ParseException) {
-    {if (true) throw (ParseException)jjte000;}
-  }
-  {if (true) throw (Error)jjte000;}
-    } finally {
-  if (jjtc000) {
-    jjtree.closeNodeScope(jjtn000, true);
-  }
-    }
-  }
-
-  final public void TrapNum() throws ParseException {
- /*@bgen(jjtree) TrapNum */
-  JDMTrapNum jjtn000 = new JDMTrapNum(JJTTRAPNUM);
-  boolean jjtc000 = true;
-  jjtree.openNodeScope(jjtn000);Token t;
-    try {
-      t = jj_consume_token(INTEGER_LITERAL);
-                       jjtn000.low= Integer.parseInt(t.image);
-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case RANGE:
-        jj_consume_token(RANGE);
-        t = jj_consume_token(INTEGER_LITERAL);
-                           jjtn000.high= Integer.parseInt(t.image);
-        break;
-      default:
-        jj_la1[18] = jj_gen;
-        ;
-      }
-    } finally {
-    if (jjtc000) {
-      jjtree.closeNodeScope(jjtn000, true);
-    }
-    }
-  }
-
-  final public void InformBlock() throws ParseException {
-                     /*@bgen(jjtree) InformBlock */
-  JDMInformBlock jjtn000 = new JDMInformBlock(JJTINFORMBLOCK);
-  boolean jjtc000 = true;
-  jjtree.openNodeScope(jjtn000);
-    try {
-      jj_consume_token(INFORM);
-      jj_consume_token(ASSIGN);
-      jj_consume_token(LBRACE);
-      label_12:
-      while (true) {
-        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-        case LBRACE:
-          ;
-          break;
-        default:
-          jj_la1[19] = jj_gen;
-          break label_12;
-        }
-        InformItem();
-      }
-      jj_consume_token(RBRACE);
-    } catch (Throwable jjte000) {
-  if (jjtc000) {
-    jjtree.clearNodeScope(jjtn000);
-    jjtc000 = false;
-  } else {
-    jjtree.popNode();
-  }
-  if (jjte000 instanceof RuntimeException) {
-    {if (true) throw (RuntimeException)jjte000;}
-  }
-  if (jjte000 instanceof ParseException) {
-    {if (true) throw (ParseException)jjte000;}
-  }
-  {if (true) throw (Error)jjte000;}
-    } finally {
-  if (jjtc000) {
-    jjtree.closeNodeScope(jjtn000, true);
-  }
-    }
-  }
-
-  final public void InformItem() throws ParseException {
-                    /*@bgen(jjtree) InformItem */
-  JDMInformItem jjtn000 = new JDMInformItem(JJTINFORMITEM);
-  boolean jjtc000 = true;
-  jjtree.openNodeScope(jjtn000);
-    try {
-      jj_consume_token(LBRACE);
-      jjtn000.comm = InformCommunity();
-      InformInterestedHost();
-      jj_consume_token(RBRACE);
-    } catch (Throwable jjte000) {
-  if (jjtc000) {
-    jjtree.clearNodeScope(jjtn000);
-    jjtc000 = false;
-  } else {
-    jjtree.popNode();
-  }
-  if (jjte000 instanceof RuntimeException) {
-    {if (true) throw (RuntimeException)jjte000;}
-  }
-  if (jjte000 instanceof ParseException) {
-    {if (true) throw (ParseException)jjte000;}
-  }
-  {if (true) throw (Error)jjte000;}
-    } finally {
-  if (jjtc000) {
-    jjtree.closeNodeScope(jjtn000, true);
-  }
-    }
-  }
-
-  final public JDMInformCommunity InformCommunity() throws ParseException {
- /*@bgen(jjtree) InformCommunity */
-  JDMInformCommunity jjtn000 = new JDMInformCommunity(JJTINFORMCOMMUNITY);
-  boolean jjtc000 = true;
-  jjtree.openNodeScope(jjtn000);Token t;
-    try {
-      jj_consume_token(INFORMCOMMUNITY);
-      jj_consume_token(ASSIGN);
-      t = jj_consume_token(IDENTIFIER);
-                                        jjtree.closeNodeScope(jjtn000, true);
-                                        jjtc000 = false;
-                                        jjtn000.community= t.image; {if (true) return jjtn000;}
-    } finally {
-  if (jjtc000) {
-    jjtree.closeNodeScope(jjtn000, true);
-  }
-    }
-    throw new Error("Missing return statement in function");
-  }
-
-  final public void InformInterestedHost() throws ParseException {
-                              /*@bgen(jjtree) InformInterestedHost */
-  JDMInformInterestedHost jjtn000 = new JDMInformInterestedHost(JJTINFORMINTERESTEDHOST);
-  boolean jjtc000 = true;
-  jjtree.openNodeScope(jjtn000);
-    try {
-      jj_consume_token(HOSTS);
-      jj_consume_token(ASSIGN);
-      HostInform();
-      label_13:
-      while (true) {
-        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-        case COMMA:
-          ;
-          break;
-        default:
-          jj_la1[20] = jj_gen;
-          break label_13;
-        }
-        jj_consume_token(COMMA);
-        HostInform();
-      }
-    } catch (Throwable jjte000) {
-  if (jjtc000) {
-    jjtree.clearNodeScope(jjtn000);
-    jjtc000 = false;
-  } else {
-    jjtree.popNode();
-  }
-  if (jjte000 instanceof RuntimeException) {
-    {if (true) throw (RuntimeException)jjte000;}
-  }
-  if (jjte000 instanceof ParseException) {
-    {if (true) throw (ParseException)jjte000;}
-  }
-  {if (true) throw (Error)jjte000;}
-    } finally {
-  if (jjtc000) {
-    jjtree.closeNodeScope(jjtn000, true);
-  }
-    }
-  }
-
-  final public void HostInform() throws ParseException {
- /*@bgen(jjtree) HostInform */
-  JDMHostInform jjtn000 = new JDMHostInform(JJTHOSTINFORM);
-  boolean jjtc000 = true;
-  jjtree.openNodeScope(jjtn000);Token t;
-    try {
-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case IDENTIFIER:
-        HostName();
-        break;
-      case INTEGER_LITERAL:
-        IpAddress();
-        break;
-      case V6_ADDRESS:
-        IpV6Address();
-        break;
-      default:
-        jj_la1[21] = jj_gen;
-        jj_consume_token(-1);
-        throw new ParseException();
-      }
-    } catch (Throwable jjte000) {
-  if (jjtc000) {
-    jjtree.clearNodeScope(jjtn000);
-    jjtc000 = false;
-  } else {
-    jjtree.popNode();
-  }
-  if (jjte000 instanceof RuntimeException) {
-    {if (true) throw (RuntimeException)jjte000;}
-  }
-  if (jjte000 instanceof ParseException) {
-    {if (true) throw (ParseException)jjte000;}
-  }
-  {if (true) throw (Error)jjte000;}
-    } finally {
-  if (jjtc000) {
-    jjtree.closeNodeScope(jjtn000, true);
-  }
-    }
-  }
-
-  final private boolean jj_2_1(int xla) {
-    jj_la = xla; jj_lastpos = jj_scanpos = token;
-    boolean retval = !jj_3_1();
-    jj_save(0, xla);
-    return retval;
-  }
-
-  final private boolean jj_2_2(int xla) {
-    jj_la = xla; jj_lastpos = jj_scanpos = token;
-    boolean retval = !jj_3_2();
-    jj_save(1, xla);
-    return retval;
-  }
-
-  final private boolean jj_2_3(int xla) {
-    jj_la = xla; jj_lastpos = jj_scanpos = token;
-    boolean retval = !jj_3_3();
-    jj_save(2, xla);
-    return retval;
-  }
-
-  final private boolean jj_3_3() {
-    if (jj_scan_token(INTEGER_LITERAL)) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    if (jj_scan_token(DOT)) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    return false;
-  }
-
-  final private boolean jj_3_2() {
-    if (jj_scan_token(V6_ADDRESS)) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    if (jj_scan_token(MASK)) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    if (jj_scan_token(INTEGER_LITERAL)) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    return false;
-  }
-
-  final private boolean jj_3_1() {
-    if (jj_scan_token(INTEGER_LITERAL)) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    Token xsp;
-    while (true) {
-      xsp = jj_scanpos;
-      if (jj_3R_14()) { jj_scanpos = xsp; break; }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    }
-    if (jj_scan_token(MASK)) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    if (jj_scan_token(INTEGER_LITERAL)) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    return false;
-  }
-
-  final private boolean jj_3R_14() {
-    if (jj_scan_token(DOT)) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    if (jj_scan_token(INTEGER_LITERAL)) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    return false;
-  }
-
-  public ParserTokenManager token_source;
-  ASCII_CharStream jj_input_stream;
-  public Token token, jj_nt;
-  private int jj_ntk;
-  private Token jj_scanpos, jj_lastpos;
-  private int jj_la;
-  public boolean lookingAhead = false;
-  private boolean jj_semLA;
-  private int jj_gen;
-  final private int[] jj_la1 = new int[22];
-  final private int[] jj_la1_0 = {0x100,0x80000,0x100000,0x2000,0x0,0x60000,0x0,0x80000000,0x11000000,0x0,0x0,0x0,0x0,0x2000,0x2000,0x0,0x91000000,0x0,0x8000,0x2000,0x0,0x91000000,};
-  final private int[] jj_la1_1 = {0x0,0x0,0x0,0x0,0x10,0x0,0x10,0x0,0x0,0x20,0x20,0x40,0x20,0x0,0x0,0x10,0x0,0x10,0x0,0x0,0x10,0x0,};
-  final private JJCalls[] jj_2_rtns = new JJCalls[3];
-  private boolean jj_rescan = false;
-  private int jj_gc = 0;
-
-  public Parser(java.io.InputStream stream) {
-    jj_input_stream = new ASCII_CharStream(stream, 1, 1);
-    token_source = new ParserTokenManager(jj_input_stream);
-    token = new Token();
-    jj_ntk = -1;
-    jj_gen = 0;
-    for (int i = 0; i < 22; i++) jj_la1[i] = -1;
-    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
-  }
-
-  public void ReInit(java.io.InputStream stream) {
-    jj_input_stream.ReInit(stream, 1, 1);
-    token_source.ReInit(jj_input_stream);
-    token = new Token();
-    jj_ntk = -1;
-    jjtree.reset();
-    jj_gen = 0;
-    for (int i = 0; i < 22; i++) jj_la1[i] = -1;
-    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
-  }
-
-  public Parser(java.io.Reader stream) {
-    jj_input_stream = new ASCII_CharStream(stream, 1, 1);
-    token_source = new ParserTokenManager(jj_input_stream);
-    token = new Token();
-    jj_ntk = -1;
-    jj_gen = 0;
-    for (int i = 0; i < 22; i++) jj_la1[i] = -1;
-    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
-  }
-
-  public void ReInit(java.io.Reader stream) {
-    jj_input_stream.ReInit(stream, 1, 1);
-    token_source.ReInit(jj_input_stream);
-    token = new Token();
-    jj_ntk = -1;
-    jjtree.reset();
-    jj_gen = 0;
-    for (int i = 0; i < 22; i++) jj_la1[i] = -1;
-    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
-  }
-
-  public Parser(ParserTokenManager tm) {
-    token_source = tm;
-    token = new Token();
-    jj_ntk = -1;
-    jj_gen = 0;
-    for (int i = 0; i < 22; i++) jj_la1[i] = -1;
-    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
-  }
-
-  public void ReInit(ParserTokenManager tm) {
-    token_source = tm;
-    token = new Token();
-    jj_ntk = -1;
-    jjtree.reset();
-    jj_gen = 0;
-    for (int i = 0; i < 22; i++) jj_la1[i] = -1;
-    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
-  }
-
-  final private Token jj_consume_token(int kind) throws ParseException {
-    Token oldToken;
-    if ((oldToken = token).next != null) token = token.next;
-    else token = token.next = token_source.getNextToken();
-    jj_ntk = -1;
-    if (token.kind == kind) {
-      jj_gen++;
-      if (++jj_gc > 100) {
-        jj_gc = 0;
-        for (int i = 0; i < jj_2_rtns.length; i++) {
-          JJCalls c = jj_2_rtns[i];
-          while (c != null) {
-            if (c.gen < jj_gen) c.first = null;
-            c = c.next;
-          }
-        }
-      }
-      return token;
-    }
-    token = oldToken;
-    jj_kind = kind;
-    throw generateParseException();
-  }
-
-  final private boolean jj_scan_token(int kind) {
-    if (jj_scanpos == jj_lastpos) {
-      jj_la--;
-      if (jj_scanpos.next == null) {
-        jj_lastpos = jj_scanpos = jj_scanpos.next = token_source.getNextToken();
-      } else {
-        jj_lastpos = jj_scanpos = jj_scanpos.next;
-      }
-    } else {
-      jj_scanpos = jj_scanpos.next;
-    }
-    if (jj_rescan) {
-      int i = 0; Token tok = token;
-      while (tok != null && tok != jj_scanpos) { i++; tok = tok.next; }
-      if (tok != null) jj_add_error_token(kind, i);
-    }
-    return (jj_scanpos.kind != kind);
-  }
-
-  final public Token getNextToken() {
-    if (token.next != null) token = token.next;
-    else token = token.next = token_source.getNextToken();
-    jj_ntk = -1;
-    jj_gen++;
-    return token;
-  }
-
-  final public Token getToken(int index) {
-    Token t = lookingAhead ? jj_scanpos : token;
-    for (int i = 0; i < index; i++) {
-      if (t.next != null) t = t.next;
-      else t = t.next = token_source.getNextToken();
-    }
-    return t;
-  }
-
-  final private int jj_ntk() {
-    if ((jj_nt=token.next) == null)
-      return (jj_ntk = (token.next=token_source.getNextToken()).kind);
-    else
-      return (jj_ntk = jj_nt.kind);
-  }
-
-  private java.util.Vector jj_expentries = new java.util.Vector();
-  private int[] jj_expentry;
-  private int jj_kind = -1;
-  private int[] jj_lasttokens = new int[100];
-  private int jj_endpos;
-
-  private void jj_add_error_token(int kind, int pos) {
-    if (pos >= 100) return;
-    if (pos == jj_endpos + 1) {
-      jj_lasttokens[jj_endpos++] = kind;
-    } else if (jj_endpos != 0) {
-      jj_expentry = new int[jj_endpos];
-      for (int i = 0; i < jj_endpos; i++) {
-        jj_expentry[i] = jj_lasttokens[i];
-      }
-      boolean exists = false;
-      for (java.util.Enumeration enumv = jj_expentries.elements(); enumv.hasMoreElements();) {
-        int[] oldentry = (int[])(enumv.nextElement());
-        if (oldentry.length == jj_expentry.length) {
-          exists = true;
-          for (int i = 0; i < jj_expentry.length; i++) {
-            if (oldentry[i] != jj_expentry[i]) {
-              exists = false;
-              break;
-            }
-          }
-          if (exists) break;
-        }
-      }
-      if (!exists) jj_expentries.addElement(jj_expentry);
-      if (pos != 0) jj_lasttokens[(jj_endpos = pos) - 1] = kind;
-    }
-  }
-
-  final public ParseException generateParseException() {
-    jj_expentries.removeAllElements();
-    boolean[] la1tokens = new boolean[40];
-    for (int i = 0; i < 40; i++) {
-      la1tokens[i] = false;
-    }
-    if (jj_kind >= 0) {
-      la1tokens[jj_kind] = true;
-      jj_kind = -1;
-    }
-    for (int i = 0; i < 22; i++) {
-      if (jj_la1[i] == jj_gen) {
-        for (int j = 0; j < 32; j++) {
-          if ((jj_la1_0[i] & (1<<j)) != 0) {
-            la1tokens[j] = true;
-          }
-          if ((jj_la1_1[i] & (1<<j)) != 0) {
-            la1tokens[32+j] = true;
-          }
-        }
-      }
-    }
-    for (int i = 0; i < 40; i++) {
-      if (la1tokens[i]) {
-        jj_expentry = new int[1];
-        jj_expentry[0] = i;
-        jj_expentries.addElement(jj_expentry);
-      }
-    }
-    jj_endpos = 0;
-    jj_rescan_token();
-    jj_add_error_token(0, 0);
-    int[][] exptokseq = new int[jj_expentries.size()][];
-    for (int i = 0; i < jj_expentries.size(); i++) {
-      exptokseq[i] = (int[])jj_expentries.elementAt(i);
-    }
-    return new ParseException(token, exptokseq, tokenImage);
-  }
-
-  final public void enable_tracing() {
-  }
-
-  final public void disable_tracing() {
-  }
-
-  final private void jj_rescan_token() {
-    jj_rescan = true;
-    for (int i = 0; i < 3; i++) {
-      JJCalls p = jj_2_rtns[i];
-      do {
-        if (p.gen > jj_gen) {
-          jj_la = p.arg; jj_lastpos = jj_scanpos = p.first;
-          switch (i) {
-            case 0: jj_3_1(); break;
-            case 1: jj_3_2(); break;
-            case 2: jj_3_3(); break;
-          }
-        }
-        p = p.next;
-      } while (p != null);
-    }
-    jj_rescan = false;
-  }
-
-  final private void jj_save(int index, int xla) {
-    JJCalls p = jj_2_rtns[index];
-    while (p.gen > jj_gen) {
-      if (p.next == null) { p = p.next = new JJCalls(); break; }
-      p = p.next;
-    }
-    p.gen = jj_gen + xla - jj_la; p.first = token; p.arg = xla;
-  }
-
-  static final class JJCalls {
-    int gen;
-    Token first;
-    int arg;
-    JJCalls next;
-  }
-
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/Parser.jj b/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/Parser.jj
deleted file mode 100755
index 002e548..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/Parser.jj
+++ /dev/null
@@ -1,948 +0,0 @@
-/*@bgen(jjtree) Generated By:JJTree: Do not edit this line. Parser.jj */
-/*@egen*//*
- * @(#)file      Parser.jjt
- * @(#)author    Sun Microsystems, Inc.
- *
- * Copyright (c) 1997, 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.
- *
- */
-
-options {              
-  STATIC=false;                                                                
-}
-
-
-PARSER_BEGIN(Parser)
-
-package com.sun.jmx.snmp.IPAcl;
-
-import java.io.*;
-
-public class Parser/*@bgen(jjtree)*/implements ParserTreeConstants/*@egen*/ {/*@bgen(jjtree)*/
-  protected JJTParserState jjtree = new JJTParserState();
-
-/*@egen*/
-}
-
-PARSER_END(Parser)
-
-
-SKIP :
-{
-  " "
-| "\t"
-| "\n"
-| "\r"
-| <"--" (~["\n","\r"])* ("\n"|"\r"|"\r\n")>
-| <"#" (~["\n","\r"])* ("\n"|"\r"|"\r\n")>
-
-}
-
-
-
-/* RESERVED WORDS AND LITERALS */
-
-TOKEN : 
-{
-  <ACCESS: "access">
-| <ACL: "acl">
-| <ASSIGN: "=">
-| <COMMUNITIES: "communities">
-| <ENTERPRISE: "enterprise">
-| <HOSTS: "hosts">
-| <LBRACE: "{">
-| <MANAGERS: "managers">
-| <RANGE: "-">
-| <RBRACE: "}">
-| <RO: "read-only">
-| <RW: "read-write">
-| <TRAP: "trap">
-| <INFORM: "inform">
-| <TRAPCOMMUNITY: "trap-community">
-| <INFORMCOMMUNITY: "inform-community">
-| <TRAPNUM: "trap-num">
-}
-
-
-
-TOKEN : /* LITERALS */
-{
-  < INTEGER_LITERAL:
-        <DECIMAL_LITERAL> (["l","L"])?
-      | <HEX_LITERAL> (["l","L"])?
-      | <OCTAL_LITERAL> (["l","L"])?
-  >
-|
-  < #DECIMAL_LITERAL: ["1"-"9"] (["0"-"9"])* >
-|
-  < #HEX_LITERAL: "0" ["x","X"] (["0"-"9","a"-"f","A"-"F"])+ >
-|      
-  < #OCTAL_LITERAL: "0" (["0"-"7"])* >
-}
-
-TOKEN : /* V6 LITERALS */
-{ 
-  < V6_ADDRESS: ((( ( (<H> ":")+ (":")?) | "::" ) (<H> ":")* (<H> | (<D> "." <D> "." <D> "." <D>))) | ("::")) | ( (<H> ":")+ ":") >
-|
-  <#H: (["0"-"9","a"-"f","A"-"F"])+ >
-| 
-  <#D: (["0"-"9"])+ >
-}
- 
-TOKEN : /* IDENTIFIERS */
-{
-  < IDENTIFIER: ( (<DIGIT>|<LETTER>)+ (<SEPARATOR>|<LETTER>|<DIGIT>)* (<DIGIT>|<LETTER>)+ ) | (<DIGIT>|<LETTER>)+ >
-|
-  < #LETTER: ["a"-"z","A"-"Z"] >
-|
-  < #SEPARATOR: ["-", "_"] >
-|
-  < #DIGIT: ["0"-"9"] >
-|
- <CSTRING: "\"" (~["\""])* "\"">
-}
-
- 
-
-TOKEN: /* SEPARATOR */
-{
-  < COMMA: "," >
-| < DOT: "." >
-| < MARK: "!" >
-| < MASK: "/">
-}
-
-// A file can contain several acl definitions
-//
-JDMSecurityDefs SecurityDefs()  : {/*@bgen(jjtree) SecurityDefs */
-  JDMSecurityDefs jjtn000 = new JDMSecurityDefs(JJTSECURITYDEFS);
-  boolean jjtc000 = true;
-  jjtree.openNodeScope(jjtn000);
-/*@egen*/}
-{/*@bgen(jjtree) SecurityDefs */
-  try {
-/*@egen*/
-  [AclBlock()]
-  [TrapBlock()]
-  [InformBlock()]
-  <EOF>/*@bgen(jjtree)*/
-  {
-    jjtree.closeNodeScope(jjtn000, true);
-    jjtc000 = false;
-  }
-/*@egen*/
-  { return jjtn000;}/*@bgen(jjtree)*/
-  } catch (Throwable jjte000) {
-    if (jjtc000) {
-      jjtree.clearNodeScope(jjtn000);
-      jjtc000 = false;
-    } else {
-      jjtree.popNode();
-    }
-    if (jjte000 instanceof RuntimeException) {
-      throw (RuntimeException)jjte000;
-    }
-    if (jjte000 instanceof ParseException) {
-      throw (ParseException)jjte000;
-    }
-    throw (Error)jjte000;
-  } finally {
-    if (jjtc000) {
-      jjtree.closeNodeScope(jjtn000, true);
-    }
-  }
-/*@egen*/
-}
-
-void AclBlock(): {/*@bgen(jjtree) AclBlock */
-  JDMAclBlock jjtn000 = new JDMAclBlock(JJTACLBLOCK);
-  boolean jjtc000 = true;
-  jjtree.openNodeScope(jjtn000);
-/*@egen*/}
-{/*@bgen(jjtree) AclBlock */
-try {
-/*@egen*/
-"acl" "=" "{" (AclItem())+ "}"/*@bgen(jjtree)*/
-} catch (Throwable jjte000) {
-  if (jjtc000) {
-    jjtree.clearNodeScope(jjtn000);
-    jjtc000 = false;
-  } else {
-    jjtree.popNode();
-  }
-  if (jjte000 instanceof RuntimeException) {
-    throw (RuntimeException)jjte000;
-  }
-  if (jjte000 instanceof ParseException) {
-    throw (ParseException)jjte000;
-  }
-  throw (Error)jjte000;
-} finally {
-  if (jjtc000) {
-    jjtree.closeNodeScope(jjtn000, true);
-  }
-}
-/*@egen*/
-}
-
-void AclItem(): {/*@bgen(jjtree) AclItem */
-  JDMAclItem jjtn000 = new JDMAclItem(JJTACLITEM);
-  boolean jjtc000 = true;
-  jjtree.openNodeScope(jjtn000);
-/*@egen*/}
-{/*@bgen(jjtree) AclItem */
-try {
-/*@egen*/
-"{" jjtn000.com= Communities() jjtn000.access= Access() Managers() "}"/*@bgen(jjtree)*/
-} catch (Throwable jjte000) {
-  if (jjtc000) {
-    jjtree.clearNodeScope(jjtn000);
-    jjtc000 = false;
-  } else {
-    jjtree.popNode();
-  }
-  if (jjte000 instanceof RuntimeException) {
-    throw (RuntimeException)jjte000;
-  }
-  if (jjte000 instanceof ParseException) {
-    throw (ParseException)jjte000;
-  }
-  throw (Error)jjte000;
-} finally {
-  if (jjtc000) {
-    jjtree.closeNodeScope(jjtn000, true);
-  }
-}
-/*@egen*/
-}
-
-JDMCommunities Communities(): {/*@bgen(jjtree) Communities */
-  JDMCommunities jjtn000 = new JDMCommunities(JJTCOMMUNITIES);
-  boolean jjtc000 = true;
-  jjtree.openNodeScope(jjtn000);
-/*@egen*/}
-{/*@bgen(jjtree) Communities */
-try {
-/*@egen*/
-"communities" "=" Community() ( "," Community())*/*@bgen(jjtree)*/
-{
-  jjtree.closeNodeScope(jjtn000, true);
-  jjtc000 = false;
-}
-/*@egen*/
-
-{return jjtn000;}/*@bgen(jjtree)*/
-} catch (Throwable jjte000) {
-  if (jjtc000) {
-    jjtree.clearNodeScope(jjtn000);
-    jjtc000 = false;
-  } else {
-    jjtree.popNode();
-  }
-  if (jjte000 instanceof RuntimeException) {
-    throw (RuntimeException)jjte000;
-  }
-  if (jjte000 instanceof ParseException) {
-    throw (ParseException)jjte000;
-  }
-  throw (Error)jjte000;
-} finally {
-  if (jjtc000) {
-    jjtree.closeNodeScope(jjtn000, true);
-  }
-}
-/*@egen*/
-
-}
-
-void Community(): 
-{/*@bgen(jjtree) Community */
-  JDMCommunity jjtn000 = new JDMCommunity(JJTCOMMUNITY);
-  boolean jjtc000 = true;
-  jjtree.openNodeScope(jjtn000);
-/*@egen*/
-  Token t;
-}
-{/*@bgen(jjtree) Community */
-try {
-/*@egen*/
-t=<IDENTIFIER>/*@bgen(jjtree)*/
-               {
-                 jjtree.closeNodeScope(jjtn000, true);
-                 jjtc000 = false;
-               }
-/*@egen*/ {jjtn000.communityString= t.image;}/*@bgen(jjtree)*/
-} finally {
-  if (jjtc000) {
-    jjtree.closeNodeScope(jjtn000, true);
-  }
-}
-/*@egen*/
-}
-
-JDMAccess Access(): {/*@bgen(jjtree) Access */
-  JDMAccess jjtn000 = new JDMAccess(JJTACCESS);
-  boolean jjtc000 = true;
-  jjtree.openNodeScope(jjtn000);
-/*@egen*/}
-{/*@bgen(jjtree) Access */
-try {
-/*@egen*/
-"access" "=" ( <RO> {jjtn000.access= RO;}
-              |
-               <RW> {jjtn000.access= RW;}
-             )/*@bgen(jjtree)*/
-{
-  jjtree.closeNodeScope(jjtn000, true);
-  jjtc000 = false;
-}
-/*@egen*/
-{return jjtn000;}/*@bgen(jjtree)*/
-} finally {
-  if (jjtc000) {
-    jjtree.closeNodeScope(jjtn000, true);
-  }
-}
-/*@egen*/
-}
-
-
-void Managers() : {/*@bgen(jjtree) Managers */
-  JDMManagers jjtn000 = new JDMManagers(JJTMANAGERS);
-  boolean jjtc000 = true;
-  jjtree.openNodeScope(jjtn000);
-/*@egen*/ }
-{/*@bgen(jjtree) Managers */
-try {
-/*@egen*/
-"managers" "=" Host() ( "," Host())*/*@bgen(jjtree)*/
-} catch (Throwable jjte000) {
-  if (jjtc000) {
-    jjtree.clearNodeScope(jjtn000);
-    jjtc000 = false;
-  } else {
-    jjtree.popNode();
-  }
-  if (jjte000 instanceof RuntimeException) {
-    throw (RuntimeException)jjte000;
-  }
-  if (jjte000 instanceof ParseException) {
-    throw (ParseException)jjte000;
-  }
-  throw (Error)jjte000;
-} finally {
-  if (jjtc000) {
-    jjtree.closeNodeScope(jjtn000, true);
-  }
-}
-/*@egen*/
-}
-
-void Host() : 
-{/*@bgen(jjtree) Host */
-  JDMHost jjtn000 = new JDMHost(JJTHOST);
-  boolean jjtc000 = true;
-  jjtree.openNodeScope(jjtn000);
-/*@egen*/
-  Token t;
-}
-{/*@bgen(jjtree) Host */
-try {
-/*@egen*/
-HostName()
-|
-LOOKAHEAD(<INTEGER_LITERAL> ( "." <INTEGER_LITERAL> )* "/" <INTEGER_LITERAL>)
-NetMask()
-|
-LOOKAHEAD(<V6_ADDRESS> "/" <INTEGER_LITERAL>)
-NetMaskV6()
-|
-LOOKAHEAD(<INTEGER_LITERAL> ".")
-IpAddress()
-|
-IpV6Address()
-|
-IpMask()/*@bgen(jjtree)*/
-} catch (Throwable jjte000) {
-  if (jjtc000) {
-    jjtree.clearNodeScope(jjtn000);
-    jjtc000 = false;
-  } else {
-    jjtree.popNode();
-  }
-  if (jjte000 instanceof RuntimeException) {
-    throw (RuntimeException)jjte000;
-  }
-  if (jjte000 instanceof ParseException) {
-    throw (ParseException)jjte000;
-  }
-  throw (Error)jjte000;
-} finally {
-  if (jjtc000) {
-    jjtree.closeNodeScope(jjtn000, true);
-  }
-}
-/*@egen*/
-}
-
-void HostName():
-{/*@bgen(jjtree) HostName */
-  JDMHostName jjtn000 = new JDMHostName(JJTHOSTNAME);
-  boolean jjtc000 = true;
-  jjtree.openNodeScope(jjtn000);
-/*@egen*/
-  Token t;
-}
-{/*@bgen(jjtree) HostName */
-  try {
-/*@egen*/
-  t=<IDENTIFIER> { jjtn000.name.append(t.image); }
-(
-"." t=<IDENTIFIER> 
-  {jjtn000.name.append( "." + t.image); }
-)*/*@bgen(jjtree)*/
-  } finally {
-    if (jjtc000) {
-      jjtree.closeNodeScope(jjtn000, true);
-    }
-  }
-/*@egen*/
-
-}
-
-void IpAddress():
-{/*@bgen(jjtree) IpAddress */
-JDMIpAddress jjtn000 = new JDMIpAddress(JJTIPADDRESS);
-boolean jjtc000 = true;
-jjtree.openNodeScope(jjtn000);
-/*@egen*/
-Token t;
-}
-{/*@bgen(jjtree) IpAddress */
-try {
-/*@egen*/
-
-t= <INTEGER_LITERAL> 
-  {jjtn000.address.append(t.image); }
-(
-"." t= <INTEGER_LITERAL> 
-  {jjtn000.address.append( "." + t.image); }
-)*/*@bgen(jjtree)*/
-} finally {
-  if (jjtc000) {
-    jjtree.closeNodeScope(jjtn000, true);
-  }
-}
-/*@egen*/
-
-}
-
-void IpV6Address():
-{/*@bgen(jjtree) IpV6Address */
-JDMIpV6Address jjtn000 = new JDMIpV6Address(JJTIPV6ADDRESS);
-boolean jjtc000 = true;
-jjtree.openNodeScope(jjtn000);
-/*@egen*/
-Token t;
-}
-{/*@bgen(jjtree) IpV6Address */
-try {
-/*@egen*/
-
-t= <V6_ADDRESS>/*@bgen(jjtree)*/
-  {
-    jjtree.closeNodeScope(jjtn000, true);
-    jjtc000 = false;
-  }
-/*@egen*/ 
-  {jjtn000.address.append(t.image); }/*@bgen(jjtree)*/
-} finally {
-  if (jjtc000) {
-    jjtree.closeNodeScope(jjtn000, true);
-  }
-}
-/*@egen*/
-}
-
-void IpMask():
-{/*@bgen(jjtree) IpMask */
-JDMIpMask jjtn000 = new JDMIpMask(JJTIPMASK);
-boolean jjtc000 = true;
-jjtree.openNodeScope(jjtn000);
-/*@egen*/
-Token t;
-}
-{/*@bgen(jjtree) IpMask */
-try {
-/*@egen*/
-
-t= <INTEGER_LITERAL> 
-  {jjtn000.address.append(t.image); }
-(
-"!" t= <INTEGER_LITERAL> 
-  {jjtn000.address.append( "." + t.image); }
-)*/*@bgen(jjtree)*/
-} finally {
-  if (jjtc000) {
-    jjtree.closeNodeScope(jjtn000, true);
-  }
-}
-/*@egen*/
-}
-
-void NetMask():
-{/*@bgen(jjtree) NetMask */
-JDMNetMask jjtn000 = new JDMNetMask(JJTNETMASK);
-boolean jjtc000 = true;
-jjtree.openNodeScope(jjtn000);
-/*@egen*/
-Token t;
-}
-{/*@bgen(jjtree) NetMask */
-try {
-/*@egen*/
-
-t= <INTEGER_LITERAL> 
-  {jjtn000.address.append(t.image); }
-(
-"." t= <INTEGER_LITERAL> 
-  {jjtn000.address.append( "." + t.image); }
-)* "/" t= <INTEGER_LITERAL>/*@bgen(jjtree)*/
-                            {
-                              jjtree.closeNodeScope(jjtn000, true);
-                              jjtc000 = false;
-                            }
-/*@egen*/ {jjtn000.mask = t.image; }/*@bgen(jjtree)*/
-} finally {
-  if (jjtc000) {
-    jjtree.closeNodeScope(jjtn000, true);
-  }
-}
-/*@egen*/
-}
-
-void NetMaskV6():
-{/*@bgen(jjtree) NetMaskV6 */
-JDMNetMaskV6 jjtn000 = new JDMNetMaskV6(JJTNETMASKV6);
-boolean jjtc000 = true;
-jjtree.openNodeScope(jjtn000);
-/*@egen*/
-Token t;
-}
-{/*@bgen(jjtree) NetMaskV6 */
-try {
-/*@egen*/
-
-t= <V6_ADDRESS> 
-  {jjtn000.address.append(t.image); }
-
-"/" t= <INTEGER_LITERAL>/*@bgen(jjtree)*/
-                         {
-                           jjtree.closeNodeScope(jjtn000, true);
-                           jjtc000 = false;
-                         }
-/*@egen*/ {jjtn000.mask = t.image; }/*@bgen(jjtree)*/
-} finally {
-  if (jjtc000) {
-    jjtree.closeNodeScope(jjtn000, true);
-  }
-}
-/*@egen*/
-}
-
-void TrapBlock(): {/*@bgen(jjtree) TrapBlock */
-  JDMTrapBlock jjtn000 = new JDMTrapBlock(JJTTRAPBLOCK);
-  boolean jjtc000 = true;
-  jjtree.openNodeScope(jjtn000);
-/*@egen*/ }
-{/*@bgen(jjtree) TrapBlock */
-try {
-/*@egen*/
-"trap" "=" "{" (TrapItem())* "}"/*@bgen(jjtree)*/
-} catch (Throwable jjte000) {
-  if (jjtc000) {
-    jjtree.clearNodeScope(jjtn000);
-    jjtc000 = false;
-  } else {
-    jjtree.popNode();
-  }
-  if (jjte000 instanceof RuntimeException) {
-    throw (RuntimeException)jjte000;
-  }
-  if (jjte000 instanceof ParseException) {
-    throw (ParseException)jjte000;
-  }
-  throw (Error)jjte000;
-} finally {
-  if (jjtc000) {
-    jjtree.closeNodeScope(jjtn000, true);
-  }
-}
-/*@egen*/
-}
-
-void TrapItem(): {/*@bgen(jjtree) TrapItem */
-  JDMTrapItem jjtn000 = new JDMTrapItem(JJTTRAPITEM);
-  boolean jjtc000 = true;
-  jjtree.openNodeScope(jjtn000);
-/*@egen*/ }
-{/*@bgen(jjtree) TrapItem */
-try {
-/*@egen*/
-"{" jjtn000.comm= TrapCommunity() TrapInterestedHost() (Enterprise())* "}"/*@bgen(jjtree)*/
-} catch (Throwable jjte000) {
-  if (jjtc000) {
-    jjtree.clearNodeScope(jjtn000);
-    jjtc000 = false;
-  } else {
-    jjtree.popNode();
-  }
-  if (jjte000 instanceof RuntimeException) {
-    throw (RuntimeException)jjte000;
-  }
-  if (jjte000 instanceof ParseException) {
-    throw (ParseException)jjte000;
-  }
-  throw (Error)jjte000;
-} finally {
-  if (jjtc000) {
-    jjtree.closeNodeScope(jjtn000, true);
-  }
-}
-/*@egen*/
-}
-
-JDMTrapCommunity TrapCommunity(): 
-{/*@bgen(jjtree) TrapCommunity */
-  JDMTrapCommunity jjtn000 = new JDMTrapCommunity(JJTTRAPCOMMUNITY);
-  boolean jjtc000 = true;
-  jjtree.openNodeScope(jjtn000);
-/*@egen*/
-  Token t;
-}
-{/*@bgen(jjtree) TrapCommunity */
-try {
-/*@egen*/
-"trap-community" "=" t=<IDENTIFIER>/*@bgen(jjtree)*/
-                                    {
-                                      jjtree.closeNodeScope(jjtn000, true);
-                                      jjtc000 = false;
-                                    }
-/*@egen*/ { jjtn000.community= t.image; return jjtn000; }/*@bgen(jjtree)*/
-} finally {
-  if (jjtc000) {
-    jjtree.closeNodeScope(jjtn000, true);
-  }
-}
-/*@egen*/
-}
-
-void TrapInterestedHost(): {/*@bgen(jjtree) TrapInterestedHost */
-  JDMTrapInterestedHost jjtn000 = new JDMTrapInterestedHost(JJTTRAPINTERESTEDHOST);
-  boolean jjtc000 = true;
-  jjtree.openNodeScope(jjtn000);
-/*@egen*/ }
-{/*@bgen(jjtree) TrapInterestedHost */
-try {
-/*@egen*/
-"hosts" "=" HostTrap() ("," HostTrap())*/*@bgen(jjtree)*/
-} catch (Throwable jjte000) {
-  if (jjtc000) {
-    jjtree.clearNodeScope(jjtn000);
-    jjtc000 = false;
-  } else {
-    jjtree.popNode();
-  }
-  if (jjte000 instanceof RuntimeException) {
-    throw (RuntimeException)jjte000;
-  }
-  if (jjte000 instanceof ParseException) {
-    throw (ParseException)jjte000;
-  }
-  throw (Error)jjte000;
-} finally {
-  if (jjtc000) {
-    jjtree.closeNodeScope(jjtn000, true);
-  }
-}
-/*@egen*/
-}
-
-void HostTrap() : 
-{/*@bgen(jjtree) HostTrap */
-  JDMHostTrap jjtn000 = new JDMHostTrap(JJTHOSTTRAP);
-  boolean jjtc000 = true;
-  jjtree.openNodeScope(jjtn000);
-/*@egen*/
-  Token t;
-}
-{/*@bgen(jjtree) HostTrap */
-try {
-/*@egen*/
-HostName()
-|
-IpAddress()
-|
-IpV6Address()/*@bgen(jjtree)*/
-} catch (Throwable jjte000) {
-  if (jjtc000) {
-    jjtree.clearNodeScope(jjtn000);
-    jjtc000 = false;
-  } else {
-    jjtree.popNode();
-  }
-  if (jjte000 instanceof RuntimeException) {
-    throw (RuntimeException)jjte000;
-  }
-  if (jjte000 instanceof ParseException) {
-    throw (ParseException)jjte000;
-  }
-  throw (Error)jjte000;
-} finally {
-  if (jjtc000) {
-    jjtree.closeNodeScope(jjtn000, true);
-  }
-}
-/*@egen*/
-}
-
-void Enterprise(): 
-{/*@bgen(jjtree) Enterprise */
-  JDMEnterprise jjtn000 = new JDMEnterprise(JJTENTERPRISE);
-  boolean jjtc000 = true;
-  jjtree.openNodeScope(jjtn000);
-/*@egen*/
-  Token t;
-}
-{/*@bgen(jjtree) Enterprise */
-try {
-/*@egen*/
-"{"
-"enterprise" "="  t=<CSTRING> {jjtn000.enterprise= t.image;}
-
-"trap-num" "=" TrapNum() ("," TrapNum())*
-
-"}"/*@bgen(jjtree)*/
-} catch (Throwable jjte000) {
-  if (jjtc000) {
-    jjtree.clearNodeScope(jjtn000);
-    jjtc000 = false;
-  } else {
-    jjtree.popNode();
-  }
-  if (jjte000 instanceof RuntimeException) {
-    throw (RuntimeException)jjte000;
-  }
-  if (jjte000 instanceof ParseException) {
-    throw (ParseException)jjte000;
-  }
-  throw (Error)jjte000;
-} finally {
-  if (jjtc000) {
-    jjtree.closeNodeScope(jjtn000, true);
-  }
-}
-/*@egen*/
-}
-
-void TrapNum():
-{/*@bgen(jjtree) TrapNum */
-  JDMTrapNum jjtn000 = new JDMTrapNum(JJTTRAPNUM);
-  boolean jjtc000 = true;
-  jjtree.openNodeScope(jjtn000);
-/*@egen*/
-  Token t;
-}
-{/*@bgen(jjtree) TrapNum */
-  try {
-/*@egen*/
-  t=<INTEGER_LITERAL> {jjtn000.low= Integer.parseInt(t.image);}
-[
-  "-" t=<INTEGER_LITERAL> {jjtn000.high= Integer.parseInt(t.image);}
-]/*@bgen(jjtree)*/
-  } finally {
-    if (jjtc000) {
-      jjtree.closeNodeScope(jjtn000, true);
-    }
-  }
-/*@egen*/
-}
-
-
-void InformBlock(): {/*@bgen(jjtree) InformBlock */
-  JDMInformBlock jjtn000 = new JDMInformBlock(JJTINFORMBLOCK);
-  boolean jjtc000 = true;
-  jjtree.openNodeScope(jjtn000);
-/*@egen*/ }
-{/*@bgen(jjtree) InformBlock */
-try {
-/*@egen*/
-"inform" "=" "{" (InformItem())* "}"/*@bgen(jjtree)*/
-} catch (Throwable jjte000) {
-  if (jjtc000) {
-    jjtree.clearNodeScope(jjtn000);
-    jjtc000 = false;
-  } else {
-    jjtree.popNode();
-  }
-  if (jjte000 instanceof RuntimeException) {
-    throw (RuntimeException)jjte000;
-  }
-  if (jjte000 instanceof ParseException) {
-    throw (ParseException)jjte000;
-  }
-  throw (Error)jjte000;
-} finally {
-  if (jjtc000) {
-    jjtree.closeNodeScope(jjtn000, true);
-  }
-}
-/*@egen*/
-}
-
-void InformItem(): {/*@bgen(jjtree) InformItem */
-  JDMInformItem jjtn000 = new JDMInformItem(JJTINFORMITEM);
-  boolean jjtc000 = true;
-  jjtree.openNodeScope(jjtn000);
-/*@egen*/ }
-{/*@bgen(jjtree) InformItem */
-try {
-/*@egen*/
-"{" jjtn000.comm= InformCommunity() InformInterestedHost() "}"/*@bgen(jjtree)*/
-} catch (Throwable jjte000) {
-  if (jjtc000) {
-    jjtree.clearNodeScope(jjtn000);
-    jjtc000 = false;
-  } else {
-    jjtree.popNode();
-  }
-  if (jjte000 instanceof RuntimeException) {
-    throw (RuntimeException)jjte000;
-  }
-  if (jjte000 instanceof ParseException) {
-    throw (ParseException)jjte000;
-  }
-  throw (Error)jjte000;
-} finally {
-  if (jjtc000) {
-    jjtree.closeNodeScope(jjtn000, true);
-  }
-}
-/*@egen*/
-}
-
-JDMInformCommunity InformCommunity(): 
-{/*@bgen(jjtree) InformCommunity */
-  JDMInformCommunity jjtn000 = new JDMInformCommunity(JJTINFORMCOMMUNITY);
-  boolean jjtc000 = true;
-  jjtree.openNodeScope(jjtn000);
-/*@egen*/
-  Token t;
-}
-{/*@bgen(jjtree) InformCommunity */
-try {
-/*@egen*/
-"inform-community" "=" t=<IDENTIFIER>/*@bgen(jjtree)*/
-                                      {
-                                        jjtree.closeNodeScope(jjtn000, true);
-                                        jjtc000 = false;
-                                      }
-/*@egen*/ { jjtn000.community= t.image; return jjtn000; }/*@bgen(jjtree)*/
-} finally {
-  if (jjtc000) {
-    jjtree.closeNodeScope(jjtn000, true);
-  }
-}
-/*@egen*/
-}
-
-void InformInterestedHost(): {/*@bgen(jjtree) InformInterestedHost */
-  JDMInformInterestedHost jjtn000 = new JDMInformInterestedHost(JJTINFORMINTERESTEDHOST);
-  boolean jjtc000 = true;
-  jjtree.openNodeScope(jjtn000);
-/*@egen*/ }
-{/*@bgen(jjtree) InformInterestedHost */
-try {
-/*@egen*/
-"hosts" "=" HostInform() ("," HostInform())*/*@bgen(jjtree)*/
-} catch (Throwable jjte000) {
-  if (jjtc000) {
-    jjtree.clearNodeScope(jjtn000);
-    jjtc000 = false;
-  } else {
-    jjtree.popNode();
-  }
-  if (jjte000 instanceof RuntimeException) {
-    throw (RuntimeException)jjte000;
-  }
-  if (jjte000 instanceof ParseException) {
-    throw (ParseException)jjte000;
-  }
-  throw (Error)jjte000;
-} finally {
-  if (jjtc000) {
-    jjtree.closeNodeScope(jjtn000, true);
-  }
-}
-/*@egen*/
-}
-
-void HostInform() : 
-{/*@bgen(jjtree) HostInform */
-  JDMHostInform jjtn000 = new JDMHostInform(JJTHOSTINFORM);
-  boolean jjtc000 = true;
-  jjtree.openNodeScope(jjtn000);
-/*@egen*/
-  Token t;
-}
-{/*@bgen(jjtree) HostInform */
-try {
-/*@egen*/
-HostName()
-|
-IpAddress()
-|
-IpV6Address()/*@bgen(jjtree)*/
-} catch (Throwable jjte000) {
-  if (jjtc000) {
-    jjtree.clearNodeScope(jjtn000);
-    jjtc000 = false;
-  } else {
-    jjtree.popNode();
-  }
-  if (jjte000 instanceof RuntimeException) {
-    throw (RuntimeException)jjte000;
-  }
-  if (jjte000 instanceof ParseException) {
-    throw (ParseException)jjte000;
-  }
-  throw (Error)jjte000;
-} finally {
-  if (jjtc000) {
-    jjtree.closeNodeScope(jjtn000, true);
-  }
-}
-/*@egen*/
-}
-
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/Parser.jjt b/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/Parser.jjt
deleted file mode 100755
index 5043f9b..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/Parser.jjt
+++ /dev/null
@@ -1,380 +0,0 @@
-/*
- * @(#)file      Parser.jjt
- * @(#)author    Sun Microsystems, Inc.
- *
- * Copyright (c) 1997, 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.
- *
- */
-
-options {
-  MULTI=true;
-  STATIC=false;
-  NODE_PREFIX= "JDM";
-  NODE_PACKAGE="com.sun.jmx.snmp.IPAcl";
-}
-
-
-PARSER_BEGIN(Parser)
-
-package com.sun.jmx.snmp.IPAcl;
-
-import java.io.*;
-
-public class Parser {
-}
-
-PARSER_END(Parser)
-
-
-SKIP :
-{
-  " "
-| "\t"
-| "\n"
-| "\r"
-| <"--" (~["\n","\r"])* ("\n"|"\r"|"\r\n")>
-| <"#" (~["\n","\r"])* ("\n"|"\r"|"\r\n")>
-
-}
-
-
-
-/* RESERVED WORDS AND LITERALS */
-
-TOKEN : 
-{
-  <ACCESS: "access">
-| <ACL: "acl">
-| <ASSIGN: "=">
-| <COMMUNITIES: "communities">
-| <ENTERPRISE: "enterprise">
-| <HOSTS: "hosts">
-| <LBRACE: "{">
-| <MANAGERS: "managers">
-| <RANGE: "-">
-| <RBRACE: "}">
-| <RO: "read-only">
-| <RW: "read-write">
-| <TRAP: "trap">
-| <INFORM: "inform">
-| <TRAPCOMMUNITY: "trap-community">
-| <INFORMCOMMUNITY: "inform-community">
-| <TRAPNUM: "trap-num">
-}
-
-
-
-TOKEN : /* LITERALS */
-{
-  < INTEGER_LITERAL:
-        <DECIMAL_LITERAL> (["l","L"])?
-      | <HEX_LITERAL> (["l","L"])?
-      | <OCTAL_LITERAL> (["l","L"])?
-  >
-|
-  < #DECIMAL_LITERAL: ["1"-"9"] (["0"-"9"])* >
-|
-  < #HEX_LITERAL: "0" ["x","X"] (["0"-"9","a"-"f","A"-"F"])+ >
-|      
-  < #OCTAL_LITERAL: "0" (["0"-"7"])* >
-}
-
-TOKEN : /* V6 LITERALS */
-{ 
-  < V6_ADDRESS: ((( ( (<H> ":")+ (":")?) | "::" ) (<H> ":")* (<H> | (<D> "." <D> "." <D> "." <D>))) | ("::")) | ( (<H> ":")+ ":") >
-|
-  <#H: (["0"-"9","a"-"f","A"-"F"])+ >
-| 
-  <#D: (["0"-"9"])+ >
-}
- 
-TOKEN : /* IDENTIFIERS */
-{
-  < IDENTIFIER: ( (<DIGIT>|<LETTER>)+ (<SEPARATOR>|<LETTER>|<DIGIT>)* (<DIGIT>|<LETTER>)+ ) | (<DIGIT>|<LETTER>)+ >
-|
-  < #LETTER: ["a"-"z","A"-"Z"] >
-|
-  < #SEPARATOR: ["-", "_"] >
-|
-  < #DIGIT: ["0"-"9"] >
-|
- <CSTRING: "\"" (~["\""])* "\"">
-}
-
- 
-
-TOKEN: /* SEPARATOR */
-{
-  < COMMA: "," >
-| < DOT: "." >
-| < MARK: "!" >
-| < MASK: "/">
-}
-
-// A file can contain several acl definitions
-//
-JDMSecurityDefs SecurityDefs()  : {}
-{
-  [AclBlock()]
-  [TrapBlock()]
-  [InformBlock()]
-  <EOF>
-  { return jjtThis;}
-}
-
-void AclBlock(): {}
-{
-"acl" "=" "{" (AclItem())+ "}"
-}
-
-void AclItem(): {}
-{
-"{" jjtThis.com= Communities() jjtThis.access= Access() Managers() "}"
-}
-
-JDMCommunities Communities(): {}
-{
-"communities" "=" Community() ( "," Community())*
-
-{return jjtThis;}
-
-}
-
-void Community(): 
-{
-  Token t;
-}
-{
-t=<IDENTIFIER> {jjtThis.communityString= t.image;}
-}
-
-JDMAccess Access(): {}
-{
-"access" "=" ( <RO> {jjtThis.access= RO;}
-              |
-               <RW> {jjtThis.access= RW;}
-             )
-{return jjtThis;}
-}
-
-
-void Managers() : { }
-{
-"managers" "=" Host() ( "," Host())*
-}
-
-void Host() : 
-{
-  Token t;
-}
-{
-HostName()
-|
-LOOKAHEAD(<INTEGER_LITERAL> ( "." <INTEGER_LITERAL> )* "/" <INTEGER_LITERAL>)
-NetMask()
-|
-LOOKAHEAD(<V6_ADDRESS> "/" <INTEGER_LITERAL>)
-NetMaskV6()
-|
-LOOKAHEAD(<INTEGER_LITERAL> ".")
-IpAddress()
-|
-IpV6Address()
-|
-IpMask()
-}
-
-void HostName():
-{
-  Token t;
-}
-{
-  t=<IDENTIFIER> { jjtThis.name.append(t.image); }
-(
-"." t=<IDENTIFIER> 
-  {jjtThis.name.append( "." + t.image); }
-)*
-
-}
-
-void IpAddress():
-{
-Token t;
-}
-{
-
-t= <INTEGER_LITERAL> 
-  {jjtThis.address.append(t.image); }
-(
-"." t= <INTEGER_LITERAL> 
-  {jjtThis.address.append( "." + t.image); }
-)*
-
-}
-
-void IpV6Address():
-{
-Token t;
-}
-{
-
-t= <V6_ADDRESS> 
-  {jjtThis.address.append(t.image); }
-}
-
-void IpMask():
-{
-Token t;
-}
-{
-
-t= <INTEGER_LITERAL> 
-  {jjtThis.address.append(t.image); }
-(
-"!" t= <INTEGER_LITERAL> 
-  {jjtThis.address.append( "." + t.image); }
-)*
-}
-
-void NetMask():
-{
-Token t;
-}
-{
-
-t= <INTEGER_LITERAL> 
-  {jjtThis.address.append(t.image); }
-(
-"." t= <INTEGER_LITERAL> 
-  {jjtThis.address.append( "." + t.image); }
-)* "/" t= <INTEGER_LITERAL> {jjtThis.mask = t.image; }
-}
-
-void NetMaskV6():
-{
-Token t;
-}
-{
-
-t= <V6_ADDRESS> 
-  {jjtThis.address.append(t.image); }
-
-"/" t= <INTEGER_LITERAL> {jjtThis.mask = t.image; }
-}
-
-void TrapBlock(): { }
-{
-"trap" "=" "{" (TrapItem())* "}"
-}
-
-void TrapItem(): { }
-{
-"{" jjtThis.comm= TrapCommunity() TrapInterestedHost() (Enterprise())* "}"
-}
-
-JDMTrapCommunity TrapCommunity(): 
-{
-  Token t;
-}
-{
-"trap-community" "=" t=<IDENTIFIER> { jjtThis.community= t.image; return jjtThis; }
-}
-
-void TrapInterestedHost(): { }
-{
-"hosts" "=" HostTrap() ("," HostTrap())*
-}
-
-void HostTrap() : 
-{
-  Token t;
-}
-{
-HostName()
-|
-IpAddress()
-|
-IpV6Address()
-}
-
-void Enterprise(): 
-{
-  Token t;
-}
-{
-"{"
-"enterprise" "="  t=<CSTRING> {jjtThis.enterprise= t.image;}
-
-"trap-num" "=" TrapNum() ("," TrapNum())*
-
-"}"
-}
-
-void TrapNum():
-{
-  Token t;
-}
-{
-  t=<INTEGER_LITERAL> {jjtThis.low= Integer.parseInt(t.image);}
-[
-  "-" t=<INTEGER_LITERAL> {jjtThis.high= Integer.parseInt(t.image);}
-]
-}
-
-
-void InformBlock(): { }
-{
-"inform" "=" "{" (InformItem())* "}"
-}
-
-void InformItem(): { }
-{
-"{" jjtThis.comm= InformCommunity() InformInterestedHost() "}"
-}
-
-JDMInformCommunity InformCommunity(): 
-{
-  Token t;
-}
-{
-"inform-community" "=" t=<IDENTIFIER> { jjtThis.community= t.image; return jjtThis; }
-}
-
-void InformInterestedHost(): { }
-{
-"hosts" "=" HostInform() ("," HostInform())*
-}
-
-void HostInform() : 
-{
-  Token t;
-}
-{
-HostName()
-|
-IpAddress()
-|
-IpV6Address()
-}
-
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/ParserConstants.java b/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/ParserConstants.java
deleted file mode 100755
index c410aa7..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/ParserConstants.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-/* Generated By:JJTree&JavaCC: Do not edit this line. ParserConstants.java */
-package com.sun.jmx.snmp.IPAcl;
-
-interface ParserConstants {
-
-  int EOF = 0;
-  int ACCESS = 7;
-  int ACL = 8;
-  int ASSIGN = 9;
-  int COMMUNITIES = 10;
-  int ENTERPRISE = 11;
-  int HOSTS = 12;
-  int LBRACE = 13;
-  int MANAGERS = 14;
-  int RANGE = 15;
-  int RBRACE = 16;
-  int RO = 17;
-  int RW = 18;
-  int TRAP = 19;
-  int INFORM = 20;
-  int TRAPCOMMUNITY = 21;
-  int INFORMCOMMUNITY = 22;
-  int TRAPNUM = 23;
-  int INTEGER_LITERAL = 24;
-  int DECIMAL_LITERAL = 25;
-  int HEX_LITERAL = 26;
-  int OCTAL_LITERAL = 27;
-  int V6_ADDRESS = 28;
-  int H = 29;
-  int D = 30;
-  int IDENTIFIER = 31;
-  int LETTER = 32;
-  int SEPARATOR = 33;
-  int DIGIT = 34;
-  int CSTRING = 35;
-  int COMMA = 36;
-  int DOT = 37;
-  int MARK = 38;
-  int MASK = 39;
-
-  int DEFAULT = 0;
-
-  String[] tokenImage = {
-    "<EOF>",
-    "\" \"",
-    "\"\\t\"",
-    "\"\\n\"",
-    "\"\\r\"",
-    "<token of kind 5>",
-    "<token of kind 6>",
-    "\"access\"",
-    "\"acl\"",
-    "\"=\"",
-    "\"communities\"",
-    "\"enterprise\"",
-    "\"hosts\"",
-    "\"{\"",
-    "\"managers\"",
-    "\"-\"",
-    "\"}\"",
-    "\"read-only\"",
-    "\"read-write\"",
-    "\"trap\"",
-    "\"inform\"",
-    "\"trap-community\"",
-    "\"inform-community\"",
-    "\"trap-num\"",
-    "<INTEGER_LITERAL>",
-    "<DECIMAL_LITERAL>",
-    "<HEX_LITERAL>",
-    "<OCTAL_LITERAL>",
-    "<V6_ADDRESS>",
-    "<H>",
-    "<D>",
-    "<IDENTIFIER>",
-    "<LETTER>",
-    "<SEPARATOR>",
-    "<DIGIT>",
-    "<CSTRING>",
-    "\",\"",
-    "\".\"",
-    "\"!\"",
-    "\"/\"",
-  };
-
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/ParserTokenManager.java b/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/ParserTokenManager.java
deleted file mode 100755
index 8ac5855..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/ParserTokenManager.java
+++ /dev/null
@@ -1,1514 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-/* Generated By:JJTree&JavaCC: Do not edit this line. ParserTokenManager.java */
-package com.sun.jmx.snmp.IPAcl;
-import java.io.*;
-
-class ParserTokenManager implements ParserConstants
-{
-private final int jjStopStringLiteralDfa_0(int pos, long active0)
-{
-   switch (pos)
-   {
-      case 0:
-         if ((active0 & 0x8000L) != 0L)
-            return 0;
-         if ((active0 & 0xfe5000L) != 0L)
-         {
-            jjmatchedKind = 31;
-            return 47;
-         }
-         if ((active0 & 0xd80L) != 0L)
-         {
-            jjmatchedKind = 31;
-            return 48;
-         }
-         return -1;
-      case 1:
-         if ((active0 & 0xfe5c00L) != 0L)
-         {
-            jjmatchedKind = 31;
-            jjmatchedPos = 1;
-            return 49;
-         }
-         if ((active0 & 0x180L) != 0L)
-         {
-            jjmatchedKind = 31;
-            jjmatchedPos = 1;
-            return 50;
-         }
-         return -1;
-      case 2:
-         if ((active0 & 0xfe5c00L) != 0L)
-         {
-            jjmatchedKind = 31;
-            jjmatchedPos = 2;
-            return 49;
-         }
-         if ((active0 & 0x100L) != 0L)
-            return 49;
-         if ((active0 & 0x80L) != 0L)
-         {
-            jjmatchedKind = 31;
-            jjmatchedPos = 2;
-            return 50;
-         }
-         return -1;
-      case 3:
-         if ((active0 & 0x565c00L) != 0L)
-         {
-            if (jjmatchedPos != 3)
-            {
-               jjmatchedKind = 31;
-               jjmatchedPos = 3;
-            }
-            return 49;
-         }
-         if ((active0 & 0xa80000L) != 0L)
-            return 49;
-         if ((active0 & 0x80L) != 0L)
-         {
-            if (jjmatchedPos != 3)
-            {
-               jjmatchedKind = 31;
-               jjmatchedPos = 3;
-            }
-            return 50;
-         }
-         return -1;
-      case 4:
-         if ((active0 & 0xa00000L) != 0L)
-            return 51;
-         if ((active0 & 0x60000L) != 0L)
-         {
-            if (jjmatchedPos < 3)
-            {
-               jjmatchedKind = 31;
-               jjmatchedPos = 3;
-            }
-            return 51;
-         }
-         if ((active0 & 0x1000L) != 0L)
-            return 49;
-         if ((active0 & 0x504c80L) != 0L)
-         {
-            jjmatchedKind = 31;
-            jjmatchedPos = 4;
-            return 49;
-         }
-         return -1;
-      case 5:
-         if ((active0 & 0x500080L) != 0L)
-            return 49;
-         if ((active0 & 0x4c00L) != 0L)
-         {
-            if (jjmatchedPos != 5)
-            {
-               jjmatchedKind = 31;
-               jjmatchedPos = 5;
-            }
-            return 49;
-         }
-         if ((active0 & 0xa60000L) != 0L)
-         {
-            if (jjmatchedPos != 5)
-            {
-               jjmatchedKind = 31;
-               jjmatchedPos = 5;
-            }
-            return 51;
-         }
-         return -1;
-      case 6:
-         if ((active0 & 0x400000L) != 0L)
-            return 51;
-         if ((active0 & 0x4c00L) != 0L)
-         {
-            jjmatchedKind = 31;
-            jjmatchedPos = 6;
-            return 49;
-         }
-         if ((active0 & 0xa60000L) != 0L)
-         {
-            jjmatchedKind = 31;
-            jjmatchedPos = 6;
-            return 51;
-         }
-         return -1;
-      case 7:
-         if ((active0 & 0x660000L) != 0L)
-         {
-            jjmatchedKind = 31;
-            jjmatchedPos = 7;
-            return 51;
-         }
-         if ((active0 & 0x800000L) != 0L)
-            return 51;
-         if ((active0 & 0x4000L) != 0L)
-            return 49;
-         if ((active0 & 0xc00L) != 0L)
-         {
-            jjmatchedKind = 31;
-            jjmatchedPos = 7;
-            return 49;
-         }
-         return -1;
-      case 8:
-         if ((active0 & 0x20000L) != 0L)
-            return 51;
-         if ((active0 & 0xc00L) != 0L)
-         {
-            jjmatchedKind = 31;
-            jjmatchedPos = 8;
-            return 49;
-         }
-         if ((active0 & 0x640000L) != 0L)
-         {
-            jjmatchedKind = 31;
-            jjmatchedPos = 8;
-            return 51;
-         }
-         return -1;
-      case 9:
-         if ((active0 & 0x40000L) != 0L)
-            return 51;
-         if ((active0 & 0x800L) != 0L)
-            return 49;
-         if ((active0 & 0x600000L) != 0L)
-         {
-            jjmatchedKind = 31;
-            jjmatchedPos = 9;
-            return 51;
-         }
-         if ((active0 & 0x400L) != 0L)
-         {
-            jjmatchedKind = 31;
-            jjmatchedPos = 9;
-            return 49;
-         }
-         return -1;
-      case 10:
-         if ((active0 & 0x600000L) != 0L)
-         {
-            jjmatchedKind = 31;
-            jjmatchedPos = 10;
-            return 51;
-         }
-         if ((active0 & 0x400L) != 0L)
-            return 49;
-         return -1;
-      case 11:
-         if ((active0 & 0x600000L) != 0L)
-         {
-            jjmatchedKind = 31;
-            jjmatchedPos = 11;
-            return 51;
-         }
-         return -1;
-      case 12:
-         if ((active0 & 0x600000L) != 0L)
-         {
-            jjmatchedKind = 31;
-            jjmatchedPos = 12;
-            return 51;
-         }
-         return -1;
-      case 13:
-         if ((active0 & 0x400000L) != 0L)
-         {
-            jjmatchedKind = 31;
-            jjmatchedPos = 13;
-            return 51;
-         }
-         if ((active0 & 0x200000L) != 0L)
-            return 51;
-         return -1;
-      case 14:
-         if ((active0 & 0x400000L) != 0L)
-         {
-            jjmatchedKind = 31;
-            jjmatchedPos = 14;
-            return 51;
-         }
-         return -1;
-      default :
-         return -1;
-   }
-}
-private final int jjStartNfa_0(int pos, long active0)
-{
-   return jjMoveNfa_0(jjStopStringLiteralDfa_0(pos, active0), pos + 1);
-}
-private final int jjStopAtPos(int pos, int kind)
-{
-   jjmatchedKind = kind;
-   jjmatchedPos = pos;
-   return pos + 1;
-}
-private final int jjStartNfaWithStates_0(int pos, int kind, int state)
-{
-   jjmatchedKind = kind;
-   jjmatchedPos = pos;
-   try { curChar = input_stream.readChar(); }
-   catch(java.io.IOException e) { return pos + 1; }
-   return jjMoveNfa_0(state, pos + 1);
-}
-private final int jjMoveStringLiteralDfa0_0()
-{
-   switch(curChar)
-   {
-      case 33:
-         return jjStopAtPos(0, 38);
-      case 44:
-         return jjStopAtPos(0, 36);
-      case 45:
-         return jjStartNfaWithStates_0(0, 15, 0);
-      case 46:
-         return jjStopAtPos(0, 37);
-      case 47:
-         return jjStopAtPos(0, 39);
-      case 61:
-         return jjStopAtPos(0, 9);
-      case 97:
-         return jjMoveStringLiteralDfa1_0(0x180L);
-      case 99:
-         return jjMoveStringLiteralDfa1_0(0x400L);
-      case 101:
-         return jjMoveStringLiteralDfa1_0(0x800L);
-      case 104:
-         return jjMoveStringLiteralDfa1_0(0x1000L);
-      case 105:
-         return jjMoveStringLiteralDfa1_0(0x500000L);
-      case 109:
-         return jjMoveStringLiteralDfa1_0(0x4000L);
-      case 114:
-         return jjMoveStringLiteralDfa1_0(0x60000L);
-      case 116:
-         return jjMoveStringLiteralDfa1_0(0xa80000L);
-      case 123:
-         return jjStopAtPos(0, 13);
-      case 125:
-         return jjStopAtPos(0, 16);
-      default :
-         return jjMoveNfa_0(5, 0);
-   }
-}
-private final int jjMoveStringLiteralDfa1_0(long active0)
-{
-   try { curChar = input_stream.readChar(); }
-   catch(java.io.IOException e) {
-      jjStopStringLiteralDfa_0(0, active0);
-      return 1;
-   }
-   switch(curChar)
-   {
-      case 97:
-         return jjMoveStringLiteralDfa2_0(active0, 0x4000L);
-      case 99:
-         return jjMoveStringLiteralDfa2_0(active0, 0x180L);
-      case 101:
-         return jjMoveStringLiteralDfa2_0(active0, 0x60000L);
-      case 110:
-         return jjMoveStringLiteralDfa2_0(active0, 0x500800L);
-      case 111:
-         return jjMoveStringLiteralDfa2_0(active0, 0x1400L);
-      case 114:
-         return jjMoveStringLiteralDfa2_0(active0, 0xa80000L);
-      default :
-         break;
-   }
-   return jjStartNfa_0(0, active0);
-}
-private final int jjMoveStringLiteralDfa2_0(long old0, long active0)
-{
-   if (((active0 &= old0)) == 0L)
-      return jjStartNfa_0(0, old0);
-   try { curChar = input_stream.readChar(); }
-   catch(java.io.IOException e) {
-      jjStopStringLiteralDfa_0(1, active0);
-      return 2;
-   }
-   switch(curChar)
-   {
-      case 97:
-         return jjMoveStringLiteralDfa3_0(active0, 0xae0000L);
-      case 99:
-         return jjMoveStringLiteralDfa3_0(active0, 0x80L);
-      case 102:
-         return jjMoveStringLiteralDfa3_0(active0, 0x500000L);
-      case 108:
-         if ((active0 & 0x100L) != 0L)
-            return jjStartNfaWithStates_0(2, 8, 49);
-         break;
-      case 109:
-         return jjMoveStringLiteralDfa3_0(active0, 0x400L);
-      case 110:
-         return jjMoveStringLiteralDfa3_0(active0, 0x4000L);
-      case 115:
-         return jjMoveStringLiteralDfa3_0(active0, 0x1000L);
-      case 116:
-         return jjMoveStringLiteralDfa3_0(active0, 0x800L);
-      default :
-         break;
-   }
-   return jjStartNfa_0(1, active0);
-}
-private final int jjMoveStringLiteralDfa3_0(long old0, long active0)
-{
-   if (((active0 &= old0)) == 0L)
-      return jjStartNfa_0(1, old0);
-   try { curChar = input_stream.readChar(); }
-   catch(java.io.IOException e) {
-      jjStopStringLiteralDfa_0(2, active0);
-      return 3;
-   }
-   switch(curChar)
-   {
-      case 97:
-         return jjMoveStringLiteralDfa4_0(active0, 0x4000L);
-      case 100:
-         return jjMoveStringLiteralDfa4_0(active0, 0x60000L);
-      case 101:
-         return jjMoveStringLiteralDfa4_0(active0, 0x880L);
-      case 109:
-         return jjMoveStringLiteralDfa4_0(active0, 0x400L);
-      case 111:
-         return jjMoveStringLiteralDfa4_0(active0, 0x500000L);
-      case 112:
-         if ((active0 & 0x80000L) != 0L)
-         {
-            jjmatchedKind = 19;
-            jjmatchedPos = 3;
-         }
-         return jjMoveStringLiteralDfa4_0(active0, 0xa00000L);
-      case 116:
-         return jjMoveStringLiteralDfa4_0(active0, 0x1000L);
-      default :
-         break;
-   }
-   return jjStartNfa_0(2, active0);
-}
-private final int jjMoveStringLiteralDfa4_0(long old0, long active0)
-{
-   if (((active0 &= old0)) == 0L)
-      return jjStartNfa_0(2, old0);
-   try { curChar = input_stream.readChar(); }
-   catch(java.io.IOException e) {
-      jjStopStringLiteralDfa_0(3, active0);
-      return 4;
-   }
-   switch(curChar)
-   {
-      case 45:
-         return jjMoveStringLiteralDfa5_0(active0, 0xa60000L);
-      case 103:
-         return jjMoveStringLiteralDfa5_0(active0, 0x4000L);
-      case 114:
-         return jjMoveStringLiteralDfa5_0(active0, 0x500800L);
-      case 115:
-         if ((active0 & 0x1000L) != 0L)
-            return jjStartNfaWithStates_0(4, 12, 49);
-         return jjMoveStringLiteralDfa5_0(active0, 0x80L);
-      case 117:
-         return jjMoveStringLiteralDfa5_0(active0, 0x400L);
-      default :
-         break;
-   }
-   return jjStartNfa_0(3, active0);
-}
-private final int jjMoveStringLiteralDfa5_0(long old0, long active0)
-{
-   if (((active0 &= old0)) == 0L)
-      return jjStartNfa_0(3, old0);
-   try { curChar = input_stream.readChar(); }
-   catch(java.io.IOException e) {
-      jjStopStringLiteralDfa_0(4, active0);
-      return 5;
-   }
-   switch(curChar)
-   {
-      case 99:
-         return jjMoveStringLiteralDfa6_0(active0, 0x200000L);
-      case 101:
-         return jjMoveStringLiteralDfa6_0(active0, 0x4000L);
-      case 109:
-         if ((active0 & 0x100000L) != 0L)
-         {
-            jjmatchedKind = 20;
-            jjmatchedPos = 5;
-         }
-         return jjMoveStringLiteralDfa6_0(active0, 0x400000L);
-      case 110:
-         return jjMoveStringLiteralDfa6_0(active0, 0x800400L);
-      case 111:
-         return jjMoveStringLiteralDfa6_0(active0, 0x20000L);
-      case 112:
-         return jjMoveStringLiteralDfa6_0(active0, 0x800L);
-      case 115:
-         if ((active0 & 0x80L) != 0L)
-            return jjStartNfaWithStates_0(5, 7, 49);
-         break;
-      case 119:
-         return jjMoveStringLiteralDfa6_0(active0, 0x40000L);
-      default :
-         break;
-   }
-   return jjStartNfa_0(4, active0);
-}
-private final int jjMoveStringLiteralDfa6_0(long old0, long active0)
-{
-   if (((active0 &= old0)) == 0L)
-      return jjStartNfa_0(4, old0);
-   try { curChar = input_stream.readChar(); }
-   catch(java.io.IOException e) {
-      jjStopStringLiteralDfa_0(5, active0);
-      return 6;
-   }
-   switch(curChar)
-   {
-      case 45:
-         return jjMoveStringLiteralDfa7_0(active0, 0x400000L);
-      case 105:
-         return jjMoveStringLiteralDfa7_0(active0, 0x400L);
-      case 110:
-         return jjMoveStringLiteralDfa7_0(active0, 0x20000L);
-      case 111:
-         return jjMoveStringLiteralDfa7_0(active0, 0x200000L);
-      case 114:
-         return jjMoveStringLiteralDfa7_0(active0, 0x44800L);
-      case 117:
-         return jjMoveStringLiteralDfa7_0(active0, 0x800000L);
-      default :
-         break;
-   }
-   return jjStartNfa_0(5, active0);
-}
-private final int jjMoveStringLiteralDfa7_0(long old0, long active0)
-{
-   if (((active0 &= old0)) == 0L)
-      return jjStartNfa_0(5, old0);
-   try { curChar = input_stream.readChar(); }
-   catch(java.io.IOException e) {
-      jjStopStringLiteralDfa_0(6, active0);
-      return 7;
-   }
-   switch(curChar)
-   {
-      case 99:
-         return jjMoveStringLiteralDfa8_0(active0, 0x400000L);
-      case 105:
-         return jjMoveStringLiteralDfa8_0(active0, 0x40800L);
-      case 108:
-         return jjMoveStringLiteralDfa8_0(active0, 0x20000L);
-      case 109:
-         if ((active0 & 0x800000L) != 0L)
-            return jjStartNfaWithStates_0(7, 23, 51);
-         return jjMoveStringLiteralDfa8_0(active0, 0x200000L);
-      case 115:
-         if ((active0 & 0x4000L) != 0L)
-            return jjStartNfaWithStates_0(7, 14, 49);
-         break;
-      case 116:
-         return jjMoveStringLiteralDfa8_0(active0, 0x400L);
-      default :
-         break;
-   }
-   return jjStartNfa_0(6, active0);
-}
-private final int jjMoveStringLiteralDfa8_0(long old0, long active0)
-{
-   if (((active0 &= old0)) == 0L)
-      return jjStartNfa_0(6, old0);
-   try { curChar = input_stream.readChar(); }
-   catch(java.io.IOException e) {
-      jjStopStringLiteralDfa_0(7, active0);
-      return 8;
-   }
-   switch(curChar)
-   {
-      case 105:
-         return jjMoveStringLiteralDfa9_0(active0, 0x400L);
-      case 109:
-         return jjMoveStringLiteralDfa9_0(active0, 0x200000L);
-      case 111:
-         return jjMoveStringLiteralDfa9_0(active0, 0x400000L);
-      case 115:
-         return jjMoveStringLiteralDfa9_0(active0, 0x800L);
-      case 116:
-         return jjMoveStringLiteralDfa9_0(active0, 0x40000L);
-      case 121:
-         if ((active0 & 0x20000L) != 0L)
-            return jjStartNfaWithStates_0(8, 17, 51);
-         break;
-      default :
-         break;
-   }
-   return jjStartNfa_0(7, active0);
-}
-private final int jjMoveStringLiteralDfa9_0(long old0, long active0)
-{
-   if (((active0 &= old0)) == 0L)
-      return jjStartNfa_0(7, old0);
-   try { curChar = input_stream.readChar(); }
-   catch(java.io.IOException e) {
-      jjStopStringLiteralDfa_0(8, active0);
-      return 9;
-   }
-   switch(curChar)
-   {
-      case 101:
-         if ((active0 & 0x800L) != 0L)
-            return jjStartNfaWithStates_0(9, 11, 49);
-         else if ((active0 & 0x40000L) != 0L)
-            return jjStartNfaWithStates_0(9, 18, 51);
-         return jjMoveStringLiteralDfa10_0(active0, 0x400L);
-      case 109:
-         return jjMoveStringLiteralDfa10_0(active0, 0x400000L);
-      case 117:
-         return jjMoveStringLiteralDfa10_0(active0, 0x200000L);
-      default :
-         break;
-   }
-   return jjStartNfa_0(8, active0);
-}
-private final int jjMoveStringLiteralDfa10_0(long old0, long active0)
-{
-   if (((active0 &= old0)) == 0L)
-      return jjStartNfa_0(8, old0);
-   try { curChar = input_stream.readChar(); }
-   catch(java.io.IOException e) {
-      jjStopStringLiteralDfa_0(9, active0);
-      return 10;
-   }
-   switch(curChar)
-   {
-      case 109:
-         return jjMoveStringLiteralDfa11_0(active0, 0x400000L);
-      case 110:
-         return jjMoveStringLiteralDfa11_0(active0, 0x200000L);
-      case 115:
-         if ((active0 & 0x400L) != 0L)
-            return jjStartNfaWithStates_0(10, 10, 49);
-         break;
-      default :
-         break;
-   }
-   return jjStartNfa_0(9, active0);
-}
-private final int jjMoveStringLiteralDfa11_0(long old0, long active0)
-{
-   if (((active0 &= old0)) == 0L)
-      return jjStartNfa_0(9, old0);
-   try { curChar = input_stream.readChar(); }
-   catch(java.io.IOException e) {
-      jjStopStringLiteralDfa_0(10, active0);
-      return 11;
-   }
-   switch(curChar)
-   {
-      case 105:
-         return jjMoveStringLiteralDfa12_0(active0, 0x200000L);
-      case 117:
-         return jjMoveStringLiteralDfa12_0(active0, 0x400000L);
-      default :
-         break;
-   }
-   return jjStartNfa_0(10, active0);
-}
-private final int jjMoveStringLiteralDfa12_0(long old0, long active0)
-{
-   if (((active0 &= old0)) == 0L)
-      return jjStartNfa_0(10, old0);
-   try { curChar = input_stream.readChar(); }
-   catch(java.io.IOException e) {
-      jjStopStringLiteralDfa_0(11, active0);
-      return 12;
-   }
-   switch(curChar)
-   {
-      case 110:
-         return jjMoveStringLiteralDfa13_0(active0, 0x400000L);
-      case 116:
-         return jjMoveStringLiteralDfa13_0(active0, 0x200000L);
-      default :
-         break;
-   }
-   return jjStartNfa_0(11, active0);
-}
-private final int jjMoveStringLiteralDfa13_0(long old0, long active0)
-{
-   if (((active0 &= old0)) == 0L)
-      return jjStartNfa_0(11, old0);
-   try { curChar = input_stream.readChar(); }
-   catch(java.io.IOException e) {
-      jjStopStringLiteralDfa_0(12, active0);
-      return 13;
-   }
-   switch(curChar)
-   {
-      case 105:
-         return jjMoveStringLiteralDfa14_0(active0, 0x400000L);
-      case 121:
-         if ((active0 & 0x200000L) != 0L)
-            return jjStartNfaWithStates_0(13, 21, 51);
-         break;
-      default :
-         break;
-   }
-   return jjStartNfa_0(12, active0);
-}
-private final int jjMoveStringLiteralDfa14_0(long old0, long active0)
-{
-   if (((active0 &= old0)) == 0L)
-      return jjStartNfa_0(12, old0);
-   try { curChar = input_stream.readChar(); }
-   catch(java.io.IOException e) {
-      jjStopStringLiteralDfa_0(13, active0);
-      return 14;
-   }
-   switch(curChar)
-   {
-      case 116:
-         return jjMoveStringLiteralDfa15_0(active0, 0x400000L);
-      default :
-         break;
-   }
-   return jjStartNfa_0(13, active0);
-}
-private final int jjMoveStringLiteralDfa15_0(long old0, long active0)
-{
-   if (((active0 &= old0)) == 0L)
-      return jjStartNfa_0(13, old0);
-   try { curChar = input_stream.readChar(); }
-   catch(java.io.IOException e) {
-      jjStopStringLiteralDfa_0(14, active0);
-      return 15;
-   }
-   switch(curChar)
-   {
-      case 121:
-         if ((active0 & 0x400000L) != 0L)
-            return jjStartNfaWithStates_0(15, 22, 51);
-         break;
-      default :
-         break;
-   }
-   return jjStartNfa_0(14, active0);
-}
-private final void jjCheckNAdd(int state)
-{
-   if (jjrounds[state] != jjround)
-   {
-      jjstateSet[jjnewStateCnt++] = state;
-      jjrounds[state] = jjround;
-   }
-}
-private final void jjAddStates(int start, int end)
-{
-   do {
-      jjstateSet[jjnewStateCnt++] = jjnextStates[start];
-   } while (start++ != end);
-}
-private final void jjCheckNAddTwoStates(int state1, int state2)
-{
-   jjCheckNAdd(state1);
-   jjCheckNAdd(state2);
-}
-private final void jjCheckNAddStates(int start, int end)
-{
-   do {
-      jjCheckNAdd(jjnextStates[start]);
-   } while (start++ != end);
-}
-private final void jjCheckNAddStates(int start)
-{
-   jjCheckNAdd(jjnextStates[start]);
-   jjCheckNAdd(jjnextStates[start + 1]);
-}
-static final long[] jjbitVec0 = {
-   0x0L, 0x0L, 0xffffffffffffffffL, 0xffffffffffffffffL
-};
-private final int jjMoveNfa_0(int startState, int curPos)
-{
-   int[] nextStates;
-   int startsAt = 0;
-   jjnewStateCnt = 47;
-   int i = 1;
-   jjstateSet[0] = startState;
-   int j, kind = 0x7fffffff;
-   for (;;)
-   {
-      if (++jjround == 0x7fffffff)
-         ReInitRounds();
-      if (curChar < 64)
-      {
-         long l = 1L << curChar;
-         MatchLoop: do
-         {
-            switch(jjstateSet[--i])
-            {
-               case 49:
-                  if ((0x3ff200000000000L & l) != 0L)
-                     jjCheckNAddTwoStates(18, 19);
-                  if ((0x3ff000000000000L & l) != 0L)
-                  {
-                     if (kind > 31)
-                        kind = 31;
-                     jjCheckNAddStates(0, 2);
-                  }
-                  if ((0x3ff000000000000L & l) != 0L)
-                  {
-                     if (kind > 31)
-                        kind = 31;
-                     jjCheckNAdd(20);
-                  }
-                  if ((0x3ff000000000000L & l) != 0L)
-                  {
-                     if (kind > 31)
-                        kind = 31;
-                     jjCheckNAdd(19);
-                  }
-                  break;
-               case 48:
-                  if ((0x3ff200000000000L & l) != 0L)
-                     jjCheckNAddTwoStates(18, 19);
-                  else if (curChar == 58)
-                     jjCheckNAddStates(3, 5);
-                  if ((0x3ff000000000000L & l) != 0L)
-                  {
-                     if (kind > 31)
-                        kind = 31;
-                     jjCheckNAddStates(0, 2);
-                  }
-                  else if (curChar == 58)
-                     jjCheckNAddTwoStates(23, 25);
-                  if ((0x3ff000000000000L & l) != 0L)
-                  {
-                     if (kind > 31)
-                        kind = 31;
-                     jjCheckNAdd(20);
-                  }
-                  if ((0x3ff000000000000L & l) != 0L)
-                     jjCheckNAddTwoStates(26, 27);
-                  if ((0x3ff000000000000L & l) != 0L)
-                     jjCheckNAddTwoStates(23, 24);
-                  break;
-               case 47:
-                  if ((0x3ff200000000000L & l) != 0L)
-                     jjCheckNAddTwoStates(18, 19);
-                  if ((0x3ff000000000000L & l) != 0L)
-                  {
-                     if (kind > 31)
-                        kind = 31;
-                     jjCheckNAddStates(0, 2);
-                  }
-                  if ((0x3ff000000000000L & l) != 0L)
-                  {
-                     if (kind > 31)
-                        kind = 31;
-                     jjCheckNAdd(20);
-                  }
-                  break;
-               case 50:
-                  if ((0x3ff200000000000L & l) != 0L)
-                     jjCheckNAddTwoStates(18, 19);
-                  else if (curChar == 58)
-                     jjCheckNAddStates(3, 5);
-                  if ((0x3ff000000000000L & l) != 0L)
-                  {
-                     if (kind > 31)
-                        kind = 31;
-                     jjCheckNAddStates(0, 2);
-                  }
-                  else if (curChar == 58)
-                     jjCheckNAddTwoStates(23, 25);
-                  if ((0x3ff000000000000L & l) != 0L)
-                  {
-                     if (kind > 31)
-                        kind = 31;
-                     jjCheckNAdd(20);
-                  }
-                  if ((0x3ff000000000000L & l) != 0L)
-                  {
-                     if (kind > 31)
-                        kind = 31;
-                     jjCheckNAdd(19);
-                  }
-                  if ((0x3ff000000000000L & l) != 0L)
-                     jjCheckNAddTwoStates(26, 27);
-                  if ((0x3ff000000000000L & l) != 0L)
-                     jjCheckNAddTwoStates(23, 24);
-                  break;
-               case 5:
-                  if ((0x3ff000000000000L & l) != 0L)
-                     jjCheckNAddStates(6, 9);
-                  else if (curChar == 58)
-                     jjAddStates(10, 11);
-                  else if (curChar == 34)
-                     jjCheckNAddTwoStates(15, 16);
-                  else if (curChar == 35)
-                     jjCheckNAddStates(12, 14);
-                  else if (curChar == 45)
-                     jjstateSet[jjnewStateCnt++] = 0;
-                  if ((0x3ff000000000000L & l) != 0L)
-                  {
-                     if (kind > 31)
-                        kind = 31;
-                     jjCheckNAddStates(15, 17);
-                  }
-                  if ((0x3fe000000000000L & l) != 0L)
-                  {
-                     if (kind > 24)
-                        kind = 24;
-                     jjCheckNAddTwoStates(12, 13);
-                  }
-                  else if (curChar == 48)
-                  {
-                     if (kind > 24)
-                        kind = 24;
-                     jjCheckNAddStates(18, 20);
-                  }
-                  break;
-               case 51:
-                  if ((0x3ff200000000000L & l) != 0L)
-                     jjCheckNAddTwoStates(18, 19);
-                  if ((0x3ff000000000000L & l) != 0L)
-                  {
-                     if (kind > 31)
-                        kind = 31;
-                     jjCheckNAdd(19);
-                  }
-                  break;
-               case 0:
-                  if (curChar == 45)
-                     jjCheckNAddStates(21, 23);
-                  break;
-               case 1:
-                  if ((0xffffffffffffdbffL & l) != 0L)
-                     jjCheckNAddStates(21, 23);
-                  break;
-               case 2:
-                  if ((0x2400L & l) != 0L && kind > 5)
-                     kind = 5;
-                  break;
-               case 3:
-                  if (curChar == 10 && kind > 5)
-                     kind = 5;
-                  break;
-               case 4:
-                  if (curChar == 13)
-                     jjstateSet[jjnewStateCnt++] = 3;
-                  break;
-               case 6:
-                  if (curChar == 35)
-                     jjCheckNAddStates(12, 14);
-                  break;
-               case 7:
-                  if ((0xffffffffffffdbffL & l) != 0L)
-                     jjCheckNAddStates(12, 14);
-                  break;
-               case 8:
-                  if ((0x2400L & l) != 0L && kind > 6)
-                     kind = 6;
-                  break;
-               case 9:
-                  if (curChar == 10 && kind > 6)
-                     kind = 6;
-                  break;
-               case 10:
-                  if (curChar == 13)
-                     jjstateSet[jjnewStateCnt++] = 9;
-                  break;
-               case 11:
-                  if ((0x3fe000000000000L & l) == 0L)
-                     break;
-                  if (kind > 24)
-                     kind = 24;
-                  jjCheckNAddTwoStates(12, 13);
-                  break;
-               case 12:
-                  if ((0x3ff000000000000L & l) == 0L)
-                     break;
-                  if (kind > 24)
-                     kind = 24;
-                  jjCheckNAddTwoStates(12, 13);
-                  break;
-               case 14:
-                  if (curChar == 34)
-                     jjCheckNAddTwoStates(15, 16);
-                  break;
-               case 15:
-                  if ((0xfffffffbffffffffL & l) != 0L)
-                     jjCheckNAddTwoStates(15, 16);
-                  break;
-               case 16:
-                  if (curChar == 34 && kind > 35)
-                     kind = 35;
-                  break;
-               case 17:
-                  if ((0x3ff000000000000L & l) == 0L)
-                     break;
-                  if (kind > 31)
-                     kind = 31;
-                  jjCheckNAddStates(15, 17);
-                  break;
-               case 18:
-                  if ((0x3ff200000000000L & l) != 0L)
-                     jjCheckNAddTwoStates(18, 19);
-                  break;
-               case 19:
-                  if ((0x3ff000000000000L & l) == 0L)
-                     break;
-                  if (kind > 31)
-                     kind = 31;
-                  jjCheckNAdd(19);
-                  break;
-               case 20:
-                  if ((0x3ff000000000000L & l) == 0L)
-                     break;
-                  if (kind > 31)
-                     kind = 31;
-                  jjCheckNAdd(20);
-                  break;
-               case 21:
-                  if ((0x3ff000000000000L & l) == 0L)
-                     break;
-                  if (kind > 31)
-                     kind = 31;
-                  jjCheckNAddStates(0, 2);
-                  break;
-               case 22:
-                  if ((0x3ff000000000000L & l) != 0L)
-                     jjCheckNAddStates(6, 9);
-                  break;
-               case 23:
-                  if ((0x3ff000000000000L & l) != 0L)
-                     jjCheckNAddTwoStates(23, 24);
-                  break;
-               case 24:
-                  if (curChar == 58)
-                     jjCheckNAddTwoStates(23, 25);
-                  break;
-               case 25:
-               case 41:
-                  if (curChar == 58 && kind > 28)
-                     kind = 28;
-                  break;
-               case 26:
-                  if ((0x3ff000000000000L & l) != 0L)
-                     jjCheckNAddTwoStates(26, 27);
-                  break;
-               case 27:
-                  if (curChar == 58)
-                     jjCheckNAddStates(3, 5);
-                  break;
-               case 28:
-               case 42:
-                  if (curChar == 58)
-                     jjCheckNAddTwoStates(29, 36);
-                  break;
-               case 29:
-                  if ((0x3ff000000000000L & l) != 0L)
-                     jjCheckNAddTwoStates(29, 30);
-                  break;
-               case 30:
-                  if (curChar == 46)
-                     jjCheckNAdd(31);
-                  break;
-               case 31:
-                  if ((0x3ff000000000000L & l) != 0L)
-                     jjCheckNAddTwoStates(31, 32);
-                  break;
-               case 32:
-                  if (curChar == 46)
-                     jjCheckNAdd(33);
-                  break;
-               case 33:
-                  if ((0x3ff000000000000L & l) != 0L)
-                     jjCheckNAddTwoStates(33, 34);
-                  break;
-               case 34:
-                  if (curChar == 46)
-                     jjCheckNAdd(35);
-                  break;
-               case 35:
-                  if ((0x3ff000000000000L & l) == 0L)
-                     break;
-                  if (kind > 28)
-                     kind = 28;
-                  jjCheckNAdd(35);
-                  break;
-               case 36:
-                  if ((0x3ff000000000000L & l) == 0L)
-                     break;
-                  if (kind > 28)
-                     kind = 28;
-                  jjCheckNAddStates(24, 26);
-                  break;
-               case 37:
-                  if ((0x3ff000000000000L & l) != 0L)
-                     jjCheckNAddTwoStates(37, 28);
-                  break;
-               case 38:
-                  if ((0x3ff000000000000L & l) == 0L)
-                     break;
-                  if (kind > 28)
-                     kind = 28;
-                  jjCheckNAdd(38);
-                  break;
-               case 39:
-                  if ((0x3ff000000000000L & l) == 0L)
-                     break;
-                  if (kind > 28)
-                     kind = 28;
-                  jjCheckNAddStates(27, 31);
-                  break;
-               case 40:
-                  if (curChar == 58)
-                     jjAddStates(10, 11);
-                  break;
-               case 43:
-                  if (curChar != 48)
-                     break;
-                  if (kind > 24)
-                     kind = 24;
-                  jjCheckNAddStates(18, 20);
-                  break;
-               case 45:
-                  if ((0x3ff000000000000L & l) == 0L)
-                     break;
-                  if (kind > 24)
-                     kind = 24;
-                  jjCheckNAddTwoStates(45, 13);
-                  break;
-               case 46:
-                  if ((0xff000000000000L & l) == 0L)
-                     break;
-                  if (kind > 24)
-                     kind = 24;
-                  jjCheckNAddTwoStates(46, 13);
-                  break;
-               default : break;
-            }
-         } while(i != startsAt);
-      }
-      else if (curChar < 128)
-      {
-         long l = 1L << (curChar & 077);
-         MatchLoop: do
-         {
-            switch(jjstateSet[--i])
-            {
-               case 49:
-                  if ((0x7fffffe87fffffeL & l) != 0L)
-                     jjCheckNAddTwoStates(18, 19);
-                  if ((0x7fffffe07fffffeL & l) != 0L)
-                  {
-                     if (kind > 31)
-                        kind = 31;
-                     jjCheckNAddStates(0, 2);
-                  }
-                  if ((0x7fffffe07fffffeL & l) != 0L)
-                  {
-                     if (kind > 31)
-                        kind = 31;
-                     jjCheckNAdd(20);
-                  }
-                  if ((0x7fffffe07fffffeL & l) != 0L)
-                  {
-                     if (kind > 31)
-                        kind = 31;
-                     jjCheckNAdd(19);
-                  }
-                  break;
-               case 48:
-                  if ((0x7fffffe87fffffeL & l) != 0L)
-                     jjCheckNAddTwoStates(18, 19);
-                  if ((0x7fffffe07fffffeL & l) != 0L)
-                  {
-                     if (kind > 31)
-                        kind = 31;
-                     jjCheckNAddStates(0, 2);
-                  }
-                  if ((0x7fffffe07fffffeL & l) != 0L)
-                  {
-                     if (kind > 31)
-                        kind = 31;
-                     jjCheckNAdd(20);
-                  }
-                  if ((0x7e0000007eL & l) != 0L)
-                     jjCheckNAddTwoStates(26, 27);
-                  if ((0x7e0000007eL & l) != 0L)
-                     jjCheckNAddTwoStates(23, 24);
-                  break;
-               case 47:
-                  if ((0x7fffffe87fffffeL & l) != 0L)
-                     jjCheckNAddTwoStates(18, 19);
-                  if ((0x7fffffe07fffffeL & l) != 0L)
-                  {
-                     if (kind > 31)
-                        kind = 31;
-                     jjCheckNAddStates(0, 2);
-                  }
-                  if ((0x7fffffe07fffffeL & l) != 0L)
-                  {
-                     if (kind > 31)
-                        kind = 31;
-                     jjCheckNAdd(20);
-                  }
-                  break;
-               case 50:
-                  if ((0x7fffffe87fffffeL & l) != 0L)
-                     jjCheckNAddTwoStates(18, 19);
-                  if ((0x7fffffe07fffffeL & l) != 0L)
-                  {
-                     if (kind > 31)
-                        kind = 31;
-                     jjCheckNAddStates(0, 2);
-                  }
-                  if ((0x7fffffe07fffffeL & l) != 0L)
-                  {
-                     if (kind > 31)
-                        kind = 31;
-                     jjCheckNAdd(20);
-                  }
-                  if ((0x7fffffe07fffffeL & l) != 0L)
-                  {
-                     if (kind > 31)
-                        kind = 31;
-                     jjCheckNAdd(19);
-                  }
-                  if ((0x7e0000007eL & l) != 0L)
-                     jjCheckNAddTwoStates(26, 27);
-                  if ((0x7e0000007eL & l) != 0L)
-                     jjCheckNAddTwoStates(23, 24);
-                  break;
-               case 5:
-                  if ((0x7fffffe07fffffeL & l) != 0L)
-                  {
-                     if (kind > 31)
-                        kind = 31;
-                     jjCheckNAddStates(15, 17);
-                  }
-                  if ((0x7e0000007eL & l) != 0L)
-                     jjCheckNAddStates(6, 9);
-                  break;
-               case 51:
-                  if ((0x7fffffe87fffffeL & l) != 0L)
-                     jjCheckNAddTwoStates(18, 19);
-                  if ((0x7fffffe07fffffeL & l) != 0L)
-                  {
-                     if (kind > 31)
-                        kind = 31;
-                     jjCheckNAdd(19);
-                  }
-                  break;
-               case 1:
-                  jjAddStates(21, 23);
-                  break;
-               case 7:
-                  jjAddStates(12, 14);
-                  break;
-               case 13:
-                  if ((0x100000001000L & l) != 0L && kind > 24)
-                     kind = 24;
-                  break;
-               case 15:
-                  jjAddStates(32, 33);
-                  break;
-               case 17:
-                  if ((0x7fffffe07fffffeL & l) == 0L)
-                     break;
-                  if (kind > 31)
-                     kind = 31;
-                  jjCheckNAddStates(15, 17);
-                  break;
-               case 18:
-                  if ((0x7fffffe87fffffeL & l) != 0L)
-                     jjCheckNAddTwoStates(18, 19);
-                  break;
-               case 19:
-                  if ((0x7fffffe07fffffeL & l) == 0L)
-                     break;
-                  if (kind > 31)
-                     kind = 31;
-                  jjCheckNAdd(19);
-                  break;
-               case 20:
-                  if ((0x7fffffe07fffffeL & l) == 0L)
-                     break;
-                  if (kind > 31)
-                     kind = 31;
-                  jjCheckNAdd(20);
-                  break;
-               case 21:
-                  if ((0x7fffffe07fffffeL & l) == 0L)
-                     break;
-                  if (kind > 31)
-                     kind = 31;
-                  jjCheckNAddStates(0, 2);
-                  break;
-               case 22:
-                  if ((0x7e0000007eL & l) != 0L)
-                     jjCheckNAddStates(6, 9);
-                  break;
-               case 23:
-                  if ((0x7e0000007eL & l) != 0L)
-                     jjCheckNAddTwoStates(23, 24);
-                  break;
-               case 26:
-                  if ((0x7e0000007eL & l) != 0L)
-                     jjCheckNAddTwoStates(26, 27);
-                  break;
-               case 36:
-                  if ((0x7e0000007eL & l) == 0L)
-                     break;
-                  if (kind > 28)
-                     kind = 28;
-                  jjCheckNAddStates(24, 26);
-                  break;
-               case 37:
-                  if ((0x7e0000007eL & l) != 0L)
-                     jjCheckNAddTwoStates(37, 28);
-                  break;
-               case 38:
-                  if ((0x7e0000007eL & l) == 0L)
-                     break;
-                  if (kind > 28)
-                     kind = 28;
-                  jjCheckNAdd(38);
-                  break;
-               case 39:
-                  if ((0x7e0000007eL & l) == 0L)
-                     break;
-                  if (kind > 28)
-                     kind = 28;
-                  jjCheckNAddStates(27, 31);
-                  break;
-               case 44:
-                  if ((0x100000001000000L & l) != 0L)
-                     jjCheckNAdd(45);
-                  break;
-               case 45:
-                  if ((0x7e0000007eL & l) == 0L)
-                     break;
-                  if (kind > 24)
-                     kind = 24;
-                  jjCheckNAddTwoStates(45, 13);
-                  break;
-               default : break;
-            }
-         } while(i != startsAt);
-      }
-      else
-      {
-         int i2 = (curChar & 0xff) >> 6;
-         long l2 = 1L << (curChar & 077);
-         MatchLoop: do
-         {
-            switch(jjstateSet[--i])
-            {
-               case 1:
-                  if ((jjbitVec0[i2] & l2) != 0L)
-                     jjAddStates(21, 23);
-                  break;
-               case 7:
-                  if ((jjbitVec0[i2] & l2) != 0L)
-                     jjAddStates(12, 14);
-                  break;
-               case 15:
-                  if ((jjbitVec0[i2] & l2) != 0L)
-                     jjAddStates(32, 33);
-                  break;
-               default : break;
-            }
-         } while(i != startsAt);
-      }
-      if (kind != 0x7fffffff)
-      {
-         jjmatchedKind = kind;
-         jjmatchedPos = curPos;
-         kind = 0x7fffffff;
-      }
-      ++curPos;
-      if ((i = jjnewStateCnt) == (startsAt = 47 - (jjnewStateCnt = startsAt)))
-         return curPos;
-      try { curChar = input_stream.readChar(); }
-      catch(java.io.IOException e) { return curPos; }
-   }
-}
-static final int[] jjnextStates = {
-   18, 19, 21, 28, 29, 39, 23, 24, 26, 27, 41, 42, 7, 8, 10, 18,
-   20, 21, 44, 46, 13, 1, 2, 4, 37, 28, 38, 26, 27, 37, 28, 38,
-   15, 16,
-};
-public static final String[] jjstrLiteralImages = {
-"", null, null, null, null, null, null, "\141\143\143\145\163\163",
-"\141\143\154", "\75", "\143\157\155\155\165\156\151\164\151\145\163",
-"\145\156\164\145\162\160\162\151\163\145", "\150\157\163\164\163", "\173", "\155\141\156\141\147\145\162\163", "\55",
-"\175", "\162\145\141\144\55\157\156\154\171",
-"\162\145\141\144\55\167\162\151\164\145", "\164\162\141\160", "\151\156\146\157\162\155",
-"\164\162\141\160\55\143\157\155\155\165\156\151\164\171", "\151\156\146\157\162\155\55\143\157\155\155\165\156\151\164\171",
-"\164\162\141\160\55\156\165\155", null, null, null, null, null, null, null, null, null, null, null, null, "\54",
-"\56", "\41", "\57", };
-public static final String[] lexStateNames = {
-   "DEFAULT",
-};
-static final long[] jjtoToken = {
-   0xf891ffff81L,
-};
-static final long[] jjtoSkip = {
-   0x7eL,
-};
-private ASCII_CharStream input_stream;
-private final int[] jjrounds = new int[47];
-private final int[] jjstateSet = new int[94];
-protected char curChar;
-public ParserTokenManager(ASCII_CharStream stream)
-{
-   if (ASCII_CharStream.staticFlag)
-      throw new Error("ERROR: Cannot use a static CharStream class with a non-static lexical analyzer.");
-   input_stream = stream;
-}
-public ParserTokenManager(ASCII_CharStream stream, int lexState)
-{
-   this(stream);
-   SwitchTo(lexState);
-}
-public void ReInit(ASCII_CharStream stream)
-{
-   jjmatchedPos = jjnewStateCnt = 0;
-   curLexState = defaultLexState;
-   input_stream = stream;
-   ReInitRounds();
-}
-private final void ReInitRounds()
-{
-   int i;
-   jjround = 0x80000001;
-   for (i = 47; i-- > 0;)
-      jjrounds[i] = 0x80000000;
-}
-public void ReInit(ASCII_CharStream stream, int lexState)
-{
-   ReInit(stream);
-   SwitchTo(lexState);
-}
-public void SwitchTo(int lexState)
-{
-   if (lexState >= 1 || lexState < 0)
-      throw new TokenMgrError("Error: Ignoring invalid lexical state : " + lexState + ". State unchanged.", TokenMgrError.INVALID_LEXICAL_STATE);
-   else
-      curLexState = lexState;
-}
-
-private final Token jjFillToken()
-{
-   Token t = Token.newToken(jjmatchedKind);
-   t.kind = jjmatchedKind;
-   String im = jjstrLiteralImages[jjmatchedKind];
-   t.image = (im == null) ? input_stream.GetImage() : im;
-   t.beginLine = input_stream.getBeginLine();
-   t.beginColumn = input_stream.getBeginColumn();
-   t.endLine = input_stream.getEndLine();
-   t.endColumn = input_stream.getEndColumn();
-   return t;
-}
-
-int curLexState = 0;
-int defaultLexState = 0;
-int jjnewStateCnt;
-int jjround;
-int jjmatchedPos;
-int jjmatchedKind;
-
-public final Token getNextToken()
-{
-  int kind;
-  Token specialToken = null;
-  Token matchedToken;
-  int curPos = 0;
-
-  EOFLoop :
-  for (;;)
-  {
-   try
-   {
-      curChar = input_stream.BeginToken();
-   }
-   catch(java.io.IOException e)
-   {
-      jjmatchedKind = 0;
-      matchedToken = jjFillToken();
-      return matchedToken;
-   }
-
-   try { input_stream.backup(0);
-      while (curChar <= 32 && (0x100002600L & (1L << curChar)) != 0L)
-         curChar = input_stream.BeginToken();
-   }
-   catch (java.io.IOException e1) { continue EOFLoop; }
-   jjmatchedKind = 0x7fffffff;
-   jjmatchedPos = 0;
-   curPos = jjMoveStringLiteralDfa0_0();
-   if (jjmatchedKind != 0x7fffffff)
-   {
-      if (jjmatchedPos + 1 < curPos)
-         input_stream.backup(curPos - jjmatchedPos - 1);
-      if ((jjtoToken[jjmatchedKind >> 6] & (1L << (jjmatchedKind & 077))) != 0L)
-      {
-         matchedToken = jjFillToken();
-         return matchedToken;
-      }
-      else
-      {
-         continue EOFLoop;
-      }
-   }
-   int error_line = input_stream.getEndLine();
-   int error_column = input_stream.getEndColumn();
-   String error_after = null;
-   boolean EOFSeen = false;
-   try { input_stream.readChar(); input_stream.backup(1); }
-   catch (java.io.IOException e1) {
-      EOFSeen = true;
-      error_after = curPos <= 1 ? "" : input_stream.GetImage();
-      if (curChar == '\n' || curChar == '\r') {
-         error_line++;
-         error_column = 0;
-      }
-      else
-         error_column++;
-   }
-   if (!EOFSeen) {
-      input_stream.backup(1);
-      error_after = curPos <= 1 ? "" : input_stream.GetImage();
-   }
-   throw new TokenMgrError(EOFSeen, curLexState, error_line, error_column, error_after, curChar, TokenMgrError.LEXICAL_ERROR);
-  }
-}
-
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/ParserTreeConstants.java b/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/ParserTreeConstants.java
deleted file mode 100755
index f589008..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/ParserTreeConstants.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-/* Generated By:JJTree: Do not edit this line. ParserTreeConstants.java */
-
-package com.sun.jmx.snmp.IPAcl;
-
-interface ParserTreeConstants
-{
-  public int JJTSECURITYDEFS = 0;
-  public int JJTACLBLOCK = 1;
-  public int JJTACLITEM = 2;
-  public int JJTCOMMUNITIES = 3;
-  public int JJTCOMMUNITY = 4;
-  public int JJTACCESS = 5;
-  public int JJTMANAGERS = 6;
-  public int JJTHOST = 7;
-  public int JJTHOSTNAME = 8;
-  public int JJTIPADDRESS = 9;
-  public int JJTIPV6ADDRESS = 10;
-  public int JJTIPMASK = 11;
-  public int JJTNETMASK = 12;
-  public int JJTNETMASKV6 = 13;
-  public int JJTTRAPBLOCK = 14;
-  public int JJTTRAPITEM = 15;
-  public int JJTTRAPCOMMUNITY = 16;
-  public int JJTTRAPINTERESTEDHOST = 17;
-  public int JJTHOSTTRAP = 18;
-  public int JJTENTERPRISE = 19;
-  public int JJTTRAPNUM = 20;
-  public int JJTINFORMBLOCK = 21;
-  public int JJTINFORMITEM = 22;
-  public int JJTINFORMCOMMUNITY = 23;
-  public int JJTINFORMINTERESTEDHOST = 24;
-  public int JJTHOSTINFORM = 25;
-
-
-  public String[] jjtNodeName = {
-    "SecurityDefs",
-    "AclBlock",
-    "AclItem",
-    "Communities",
-    "Community",
-    "Access",
-    "Managers",
-    "Host",
-    "HostName",
-    "IpAddress",
-    "IpV6Address",
-    "IpMask",
-    "NetMask",
-    "NetMaskV6",
-    "TrapBlock",
-    "TrapItem",
-    "TrapCommunity",
-    "TrapInterestedHost",
-    "HostTrap",
-    "Enterprise",
-    "TrapNum",
-    "InformBlock",
-    "InformItem",
-    "InformCommunity",
-    "InformInterestedHost",
-    "HostInform",
-  };
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/PermissionImpl.java b/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/PermissionImpl.java
deleted file mode 100755
index 16d0655..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/PermissionImpl.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Copyright (c) 1997, 2007, 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.jmx.snmp.IPAcl;
-
-
-
-import java.io.Serializable;
-
-
-/**
- * Permission is represented as a String.
- *
- * @see java.security.acl.Permission
- */
-
-class PermissionImpl implements java.security.acl.Permission, Serializable {
-  private static final long serialVersionUID = 4478110422746916589L;
-
-  private String perm = null;
-
-  /**
-   * Constructs a permission.
-   *
-   * @param s the string representing the permission.
-   */
-  public PermissionImpl(String s) {
-        perm = s;
-  }
-
-  public int hashCode() {
-        return super.hashCode();
-  }
-
-  /**
-   * Returns true if the object passed matches the permission represented in.
-   *
-   * @param p the Permission object to compare with.
-   * @return true if the Permission objects are equal, false otherwise.
-   */
-  public boolean equals(Object p){
-        if (p instanceof PermissionImpl){
-          return perm.equals(((PermissionImpl)p).getString());
-        } else {
-          return false;
-        }
-  }
-
-  /**
-   * Prints a string representation of this permission.
-   *
-   * @return a string representation of this permission.
-   */
-  public String toString(){
-        return perm;
-  }
-
-  /**
-   * Prints the permission.
-   *
-   * @return a string representation of this permission.
-   */
-  public String getString(){
-        return perm;
-  }
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/PrincipalImpl.java b/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/PrincipalImpl.java
deleted file mode 100755
index 7451326..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/PrincipalImpl.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * Copyright (c) 1997, 2007, 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.jmx.snmp.IPAcl;
-
-
-
-import java.net.InetAddress;
-import java.net.UnknownHostException;
-import java.io.Serializable;
-
-
-/**
- * Principal represents a host.
- *
- */
-
-class PrincipalImpl implements java.security.Principal, Serializable {
-    private static final long serialVersionUID = -7910027842878976761L;
-
-    private InetAddress[] add = null;
-
-    /**
-     * Constructs a principal with the local host.
-     */
-    public PrincipalImpl () throws UnknownHostException {
-        add = new InetAddress[1];
-        add[0] = java.net.InetAddress.getLocalHost();
-    }
-
-    /**
-     * Construct a principal using the specified host.
-     * <P>
-     * The host can be either:
-     * <UL>
-     * <LI> a host name
-     * <LI> an IP address
-     * </UL>
-     *
-     * @param hostName the host used to make the principal.
-     */
-    public PrincipalImpl(String hostName) throws UnknownHostException {
-        if ((hostName.equals("localhost")) || (hostName.equals("127.0.0.1"))) {
-            add = new InetAddress[1];
-            add[0] = java.net.InetAddress.getByName(hostName);
-        }
-        else
-            add = java.net.InetAddress.getAllByName( hostName );
-    }
-
-    /**
-     * Constructs a principal using an Internet Protocol (IP) address.
-     *
-     * @param address the Internet Protocol (IP) address.
-     */
-    public PrincipalImpl(InetAddress address) {
-        add = new InetAddress[1];
-        add[0] = address;
-    }
-
-    /**
-     * Returns the name of this principal.
-     *
-     * @return the name of this principal.
-     */
-    public String getName() {
-        return add[0].toString();
-    }
-
-    /**
-     * Compares this principal to the specified object. Returns true if the
-     * object passed in matches the principal
-     * represented by the implementation of this interface.
-     *
-     * @param a the principal to compare with.
-     * @return true if the principal passed in is the same as that encapsulated by this principal, false otherwise.
-     */
-    public boolean equals(Object a) {
-        if (a instanceof PrincipalImpl){
-            for(int i = 0; i < add.length; i++) {
-                if(add[i].equals (((PrincipalImpl) a).getAddress()))
-                    return true;
-            }
-            return false;
-        } else {
-            return false;
-        }
-    }
-
-    /**
-     * Returns a hashcode for this principal.
-     *
-     * @return a hashcode for this principal.
-     */
-    public int hashCode(){
-        return add[0].hashCode();
-    }
-
-    /**
-     * Returns a string representation of this principal. In case of multiple address, the first one is returned.
-     *
-     * @return a string representation of this principal.
-     */
-    public String toString() {
-        return ("PrincipalImpl :"+add[0].toString());
-    }
-
-    /**
-     * Returns the Internet Protocol (IP) address for this principal. In case of multiple address, the first one is returned.
-     *
-     * @return the Internet Protocol (IP) address for this principal.
-     */
-    public InetAddress getAddress(){
-        return add[0];
-    }
-
-    /**
-     * Returns the Internet Protocol (IP) address for this principal. In case of multiple address, the first one is returned.
-     *
-     * @return the array of Internet Protocol (IP) addresses for this principal.
-     */
-    public InetAddress[] getAddresses(){
-        return add;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/README.update b/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/README.update
deleted file mode 100755
index 86232e8..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/README.update
+++ /dev/null
@@ -1,29 +0,0 @@
-1)Copy Parser.jjt in a dedicated directory.
-
-2) Grammar modificatiobns:
-Grammar located in file Parser.jjt :
-
-3) Command :
-/usr/lang/JAVA/JavaCC_2.0/bin/jjtree Parser.jjt
-/usr/lang/JAVA/JavaCC_2.0/bin/javacc Parser.jj
-
-4) Files to copy back in IPAcl directory:
-If you added new node (eg :IpV6Address()) copy the JDM file (eg:JDMIpV6Address.java)
-In any cases copy back (These files must be checkedout in IPAcl directory):
-ASCII_CharStream.java
-JJTParserState.java
-ParseException.java
-Parser.java
-ParserConstants.java
-ParserTokenManager.java
-ParserTreeConstants.java
-TokenMgrError.java
-
-5) You need to modify any JDM files you copied back. Lauch the compilation and you will see what is wrong.
-Have a look to similar nodes in order to see how to modify. Some protected methods have to be overloaded.
-
-6) Once your updates are running, copy back:
-Parser.jj
-Parser.jjt
-
-7) DONE.
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/SimpleNode.java b/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/SimpleNode.java
deleted file mode 100755
index 65484a3..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/SimpleNode.java
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * Copyright (c) 1997, 2007, 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.
- */
-
-
-/* Generated By:JJTree: Do not edit this line. SimpleNode.java */
-
-package com.sun.jmx.snmp.IPAcl;
-
-import java.net.InetAddress;
-import java.util.Hashtable;
-import java.util.Vector;
-
-class SimpleNode implements Node {
-    protected Node parent;
-    protected Node[] children;
-    protected int id;
-    protected Parser parser;
-
-    public SimpleNode(int i) {
-        id = i;
-    }
-
-    public SimpleNode(Parser p, int i) {
-        this(i);
-        parser = p;
-    }
-
-    public static Node jjtCreate(int id) {
-        return new SimpleNode(id);
-    }
-
-    public static Node jjtCreate(Parser p, int id) {
-        return new SimpleNode(p, id);
-    }
-
-    public void jjtOpen() {
-    }
-
-    public void jjtClose() {
-    }
-
-    public void jjtSetParent(Node n) { parent = n; }
-    public Node jjtGetParent() { return parent; }
-
-    public void jjtAddChild(Node n, int i) {
-        if (children == null) {
-            children = new Node[i + 1];
-        } else if (i >= children.length) {
-            Node c[] = new Node[i + 1];
-            System.arraycopy(children, 0, c, 0, children.length);
-            children = c;
-        }
-        children[i] = n;
-    }
-
-    public Node jjtGetChild(int i) {
-        return children[i];
-    }
-
-    public int jjtGetNumChildren() {
-        return (children == null) ? 0 : children.length;
-    }
-
-    /*
-      SR. Extend the SimpleNode definition
-    */
-
-    /**
-     * Build the Trap entries from the syntactic tree.
-     */
-    public void buildTrapEntries(Hashtable<InetAddress, Vector<String>> dest) {
-        if (children != null) {
-            for (int i = 0; i < children.length; ++i) {
-                SimpleNode n = (SimpleNode)children[i];
-                if (n != null) {
-                    n.buildTrapEntries(dest);
-                }
-            } /* end of loop */
-        }
-    }
-    /**
-     * Build the Inform entries from the syntactic tree.
-     */
-    public void buildInformEntries(Hashtable<InetAddress, Vector<String>> dest) {
-        if (children != null) {
-            for (int i = 0; i < children.length; ++i) {
-                SimpleNode n = (SimpleNode)children[i];
-                if (n != null) {
-                    n.buildInformEntries(dest);
-                }
-            } /* end of loop */
-        }
-    }
-
-    /**
-     * Build the Acl entries from the syntactic tree.
-     */
-    public void buildAclEntries(PrincipalImpl owner, AclImpl acl) {
-        if (children != null) {
-            for (int i = 0; i < children.length; ++i) {
-                SimpleNode n = (SimpleNode)children[i];
-                if (n != null) {
-                    n.buildAclEntries(owner, acl);
-                }
-            } /* end of loop */
-        }
-    }
-
-    /* END SR */
-
-    /* You can override these two methods in subclasses of SimpleNode to
-       customize the way the node appears when the tree is dumped.  If
-       your output uses more than one line you should override
-       toString(String), otherwise overriding toString() is probably all
-       you need to do. */
-
-    public String toString() { return ParserTreeConstants.jjtNodeName[id]; }
-    public String toString(String prefix) { return prefix + toString(); }
-
-    /* Override this method if you want to customize how the node dumps
-       out its children. */
-
-    public void dump(String prefix) {
-        if (children != null) {
-            for (int i = 0; i < children.length; ++i) {
-                SimpleNode n = (SimpleNode)children[i];
-                if (n != null) {
-                    n.dump(prefix + " ");
-                }
-            }
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/SnmpAcl.java b/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/SnmpAcl.java
deleted file mode 100755
index 59f3996..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/SnmpAcl.java
+++ /dev/null
@@ -1,486 +0,0 @@
-/*
- * Copyright (c) 1997, 2007, 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.jmx.snmp.IPAcl;
-
-
-
-// java import
-//
-import java.io.Serializable;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.net.InetAddress;
-import java.net.UnknownHostException;
-import java.util.Hashtable;
-import java.util.logging.Level;
-import java.util.Vector;
-import java.util.Enumeration;
-import java.util.HashSet;
-import java.security.acl.AclEntry;
-import java.security.acl.NotOwnerException;
-
-// SNMP Runtime import
-//
-import static com.sun.jmx.defaults.JmxProperties.SNMP_LOGGER;
-import com.sun.jmx.snmp.InetAddressAcl;
-
-/**
- * Defines an implementation of the {@link com.sun.jmx.snmp.InetAddressAcl InetAddressAcl} interface.
- * <p>
- * In this implementation the ACL information is stored on a flat file and
- * its default location is "$JRE/lib/snmp.acl" - See
- * {@link #getDefaultAclFileName()}
- * <p>
- * <OL>
-  *
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- */
-
-public class SnmpAcl implements InetAddressAcl, Serializable {
-    private static final long serialVersionUID = -6702287103824397063L;
-
-    static final PermissionImpl READ  = new PermissionImpl("READ");
-    static final PermissionImpl WRITE = new PermissionImpl("WRITE");
-
-    /**
-     * Constructs the Java Dynamic Management(TM) Access Control List
-     * based on IP addresses. The ACL will take the given owner name.
-     * The current IP address will be the owner of the ACL.
-     *
-     * @param Owner The name of the ACL Owner.
-     *
-     * @exception UnknownHostException If the local host is unknown.
-     * @exception IllegalArgumentException If the ACL file doesn't exist.
-     */
-    public SnmpAcl(String Owner)
-        throws UnknownHostException, IllegalArgumentException {
-        this(Owner,null);
-    }
-
-    /**
-     * Constructs the Java Dynamic Management(TM) Access Control List
-     * based on IP addresses. The ACL will take the given owner name.
-     * The current IP address will be the owner of the ACL.
-     *
-     * @param Owner The name of the ACL Owner.
-     * @param aclFileName The name of the ACL File.
-     *
-     * @exception UnknownHostException If the local host is unknown.
-     * @exception IllegalArgumentException If the ACL file doesn't exist.
-     */
-    public SnmpAcl(String Owner, String aclFileName)
-        throws UnknownHostException, IllegalArgumentException {
-        trapDestList= new Hashtable<InetAddress, Vector<String>>();
-        informDestList= new Hashtable<InetAddress, Vector<String>>();
-
-        // PrincipalImpl() take the current host as entry
-        owner = new PrincipalImpl();
-        try {
-            acl = new AclImpl(owner,Owner);
-            AclEntry ownEntry = new AclEntryImpl(owner);
-            ownEntry.addPermission(READ);
-            ownEntry.addPermission(WRITE);
-            acl.addEntry(owner,ownEntry);
-        } catch (NotOwnerException ex) {
-            if (SNMP_LOGGER.isLoggable(Level.FINEST)) {
-                SNMP_LOGGER.logp(Level.FINEST, SnmpAcl.class.getName(),
-                    "SnmpAcl(String,String)",
-                    "Should never get NotOwnerException as the owner " +
-                    "is built in this constructor");
-            }
-        }
-        if (aclFileName == null) setDefaultFileName();
-        else setAuthorizedListFile(aclFileName);
-        readAuthorizedListFile();
-    }
-
-    /**
-     * Returns an enumeration of the entries in this ACL. Each element in the
-     * enumeration is of type <CODE>java.security.acl.AclEntry</CODE>.
-     *
-     * @return An enumeration of the entries in this ACL.
-     */
-    public Enumeration entries() {
-        return acl.entries();
-    }
-
-    /**
-     * Returns ann enumeration of community strings. Community strings are returned as String.
-     * @return The enumeration of community strings.
-     */
-    public Enumeration<String> communities() {
-        HashSet<String> set = new HashSet<String>();
-        Vector<String> res = new Vector<String>();
-        for (Enumeration e = acl.entries() ; e.hasMoreElements() ;) {
-            AclEntryImpl entry = (AclEntryImpl) e.nextElement();
-            for (Enumeration cs = entry.communities();
-                 cs.hasMoreElements() ;) {
-                set.add((String) cs.nextElement());
-            }
-        }
-        String[] objs = set.toArray(new String[0]);
-        for(int i = 0; i < objs.length; i++)
-            res.addElement(objs[i]);
-
-        return res.elements();
-    }
-
-    /**
-     * Returns the name of the ACL.
-     *
-     * @return The name of the ACL.
-     */
-    public String getName() {
-        return acl.getName();
-    }
-
-    /**
-     * Returns the read permission instance used.
-     *
-     * @return The read permission instance.
-     */
-    static public PermissionImpl getREAD() {
-        return READ;
-    }
-
-    /**
-     * Returns the write permission instance used.
-     *
-     * @return  The write permission instance.
-     */
-    static public PermissionImpl getWRITE() {
-        return WRITE;
-    }
-
-    /**
-     * Get the default name for the ACL file.
-     * In this implementation this is "$JRE/lib/snmp.acl"
-     * @return The default name for the ACL file.
-     **/
-    public static String getDefaultAclFileName() {
-        final String fileSeparator =
-            System.getProperty("file.separator");
-        final StringBuffer defaultAclName =
-            new StringBuffer(System.getProperty("java.home")).
-            append(fileSeparator).append("lib").append(fileSeparator).
-            append("snmp.acl");
-        return defaultAclName.toString();
-    }
-
-    /**
-     * Sets the full path of the file containing the ACL information.
-     *
-     * @param filename The full path of the file containing the ACL information.
-     * @throws IllegalArgumentException If the passed ACL file doesn't exist.
-     */
-    public void setAuthorizedListFile(String filename)
-        throws IllegalArgumentException {
-        File file = new File(filename);
-        if (!file.isFile() ) {
-            if (SNMP_LOGGER.isLoggable(Level.FINEST)) {
-                SNMP_LOGGER.logp(Level.FINEST, SnmpAcl.class.getName(),
-                    "setAuthorizedListFile", "ACL file not found: " + filename);
-            }
-            throw new
-                IllegalArgumentException("The specified file ["+file+"] "+
-                                         "doesn't exist or is not a file, "+
-                                         "no configuration loaded");
-        }
-        if (SNMP_LOGGER.isLoggable(Level.FINER)) {
-            SNMP_LOGGER.logp(Level.FINER, SnmpAcl.class.getName(),
-                "setAuthorizedListFile", "Default file set to " + filename);
-        }
-        authorizedListFile = filename;
-    }
-
-    /**
-     * Resets this ACL to the values contained in the configuration file.
-     *
-     * @exception NotOwnerException If the principal attempting the reset is not an owner of this ACL.
-     * @exception UnknownHostException If IP addresses for hosts contained in the ACL file couldn't be found.
-     */
-    public void rereadTheFile() throws NotOwnerException, UnknownHostException {
-        alwaysAuthorized = false;
-        acl.removeAll(owner);
-        trapDestList.clear();
-        informDestList.clear();
-        AclEntry ownEntry = new AclEntryImpl(owner);
-        ownEntry.addPermission(READ);
-        ownEntry.addPermission(WRITE);
-        acl.addEntry(owner,ownEntry);
-        readAuthorizedListFile();
-    }
-
-    /**
-     * Returns the full path of the file used to get ACL information.
-     *
-     * @return The full path of the file used to get ACL information.
-     */
-    public String getAuthorizedListFile() {
-        return authorizedListFile;
-    }
-
-    /**
-     * Checks whether or not the specified host has <CODE>READ</CODE> access.
-     *
-     * @param address The host address to check.
-     *
-     * @return <CODE>true</CODE> if the host has read permission, <CODE>false</CODE> otherwise.
-     */
-    public boolean checkReadPermission(InetAddress address) {
-        if (alwaysAuthorized) return ( true );
-        PrincipalImpl p = new PrincipalImpl(address);
-        return acl.checkPermission(p, READ);
-    }
-
-    /**
-     * Checks whether or not the specified host and community have <CODE>READ</CODE> access.
-     *
-     * @param address The host address to check.
-     * @param community The community associated with the host.
-     *
-     * @return <CODE>true</CODE> if the pair (host, community) has read permission, <CODE>false</CODE> otherwise.
-     */
-    public boolean checkReadPermission(InetAddress address, String community) {
-        if (alwaysAuthorized) return ( true );
-        PrincipalImpl p = new PrincipalImpl(address);
-        return acl.checkPermission(p, community, READ);
-    }
-
-    /**
-     * Checks whether or not a community string is defined.
-     *
-     * @param community The community to check.
-     *
-     * @return <CODE>true</CODE> if the community is known, <CODE>false</CODE> otherwise.
-     */
-    public boolean checkCommunity(String community) {
-        return acl.checkCommunity(community);
-    }
-
-    /**
-     * Checks whether or not the specified host has <CODE>WRITE</CODE> access.
-     *
-     * @param address The host address to check.
-     *
-     * @return <CODE>true</CODE> if the host has write permission, <CODE>false</CODE> otherwise.
-     */
-    public boolean checkWritePermission(InetAddress address) {
-        if (alwaysAuthorized) return ( true );
-        PrincipalImpl p = new PrincipalImpl(address);
-        return acl.checkPermission(p, WRITE);
-    }
-
-    /**
-     * Checks whether or not the specified host and community have <CODE>WRITE</CODE> access.
-     *
-     * @param address The host address to check.
-     * @param community The community associated with the host.
-     *
-     * @return <CODE>true</CODE> if the pair (host, community) has write permission, <CODE>false</CODE> otherwise.
-     */
-    public boolean checkWritePermission(InetAddress address, String community) {
-        if (alwaysAuthorized) return ( true );
-        PrincipalImpl p = new PrincipalImpl(address);
-        return acl.checkPermission(p, community, WRITE);
-    }
-
-    /**
-     * Returns an enumeration of trap destinations.
-     *
-     * @return An enumeration of the trap destinations (enumeration of <CODE>InetAddress</CODE>).
-     */
-    public Enumeration getTrapDestinations() {
-        return trapDestList.keys();
-    }
-
-    /**
-     * Returns an enumeration of trap communities for a given host.
-     *
-     * @param i The address of the host.
-     *
-     * @return An enumeration of trap communities for a given host (enumeration of <CODE>String</CODE>).
-     */
-    public Enumeration getTrapCommunities(InetAddress i) {
-        Vector list = null;
-        if ((list = (Vector)trapDestList.get(i)) != null ) {
-            if (SNMP_LOGGER.isLoggable(Level.FINER)) {
-                SNMP_LOGGER.logp(Level.FINER, SnmpAcl.class.getName(),
-                    "getTrapCommunities", "["+i.toString()+"] is in list");
-            }
-            return list.elements();
-        } else {
-            list = new Vector();
-            if (SNMP_LOGGER.isLoggable(Level.FINER)) {
-                SNMP_LOGGER.logp(Level.FINER, SnmpAcl.class.getName(),
-                    "getTrapCommunities", "["+i.toString()+"] is not in list");
-            }
-            return list.elements();
-        }
-    }
-
-    /**
-     * Returns an enumeration of inform destinations.
-     *
-     * @return An enumeration of the inform destinations (enumeration of <CODE>InetAddress</CODE>).
-     */
-    public Enumeration getInformDestinations() {
-        return informDestList.keys();
-    }
-
-    /**
-     * Returns an enumeration of inform communities for a given host.
-     *
-     * @param i The address of the host.
-     *
-     * @return An enumeration of inform communities for a given host (enumeration of <CODE>String</CODE>).
-     */
-    public Enumeration getInformCommunities(InetAddress i) {
-        Vector list = null;
-        if ((list = (Vector)informDestList.get(i)) != null ) {
-            if (SNMP_LOGGER.isLoggable(Level.FINER)) {
-                SNMP_LOGGER.logp(Level.FINER, SnmpAcl.class.getName(),
-                    "getInformCommunities", "["+i.toString()+"] is in list");
-            }
-            return list.elements();
-        } else {
-            list = new Vector();
-            if (SNMP_LOGGER.isLoggable(Level.FINER)) {
-                SNMP_LOGGER.logp(Level.FINER, SnmpAcl.class.getName(),
-                    "getInformCommunities", "["+i.toString()+"] is not in list");
-            }
-            return list.elements();
-        }
-    }
-
-    /**
-     * Converts the input configuration file into ACL.
-     */
-    private void readAuthorizedListFile() {
-
-        alwaysAuthorized = false;
-
-        if (authorizedListFile == null) {
-            if (SNMP_LOGGER.isLoggable(Level.FINER)) {
-                SNMP_LOGGER.logp(Level.FINER, SnmpAcl.class.getName(),
-                    "readAuthorizedListFile", "alwaysAuthorized set to true");
-            }
-            alwaysAuthorized = true ;
-        } else {
-            // Read the file content
-            Parser parser = null;
-            try {
-                parser= new Parser(new FileInputStream(getAuthorizedListFile()));
-            } catch (FileNotFoundException e) {
-                if (SNMP_LOGGER.isLoggable(Level.FINEST)) {
-                    SNMP_LOGGER.logp(Level.FINEST, SnmpAcl.class.getName(),
-                            "readAuthorizedListFile",
-                            "The specified file was not found, authorize everybody");
-                }
-                alwaysAuthorized = true ;
-                return;
-            }
-
-            try {
-                JDMSecurityDefs n = parser.SecurityDefs();
-                n.buildAclEntries(owner, acl);
-                n.buildTrapEntries(trapDestList);
-                n.buildInformEntries(informDestList);
-            } catch (ParseException e) {
-                if (SNMP_LOGGER.isLoggable(Level.FINEST)) {
-                    SNMP_LOGGER.logp(Level.FINEST, SnmpAcl.class.getName(),
-                        "readAuthorizedListFile", "Got parsing exception", e);
-                }
-                throw new IllegalArgumentException(e.getMessage());
-            } catch (Error err) {
-                if (SNMP_LOGGER.isLoggable(Level.FINEST)) {
-                    SNMP_LOGGER.logp(Level.FINEST, SnmpAcl.class.getName(),
-                        "readAuthorizedListFile", "Got unexpected error", err);
-                }
-                throw new IllegalArgumentException(err.getMessage());
-            }
-
-            for(Enumeration e = acl.entries(); e.hasMoreElements();) {
-                AclEntryImpl aa = (AclEntryImpl) e.nextElement();
-                if (SNMP_LOGGER.isLoggable(Level.FINER)) {
-                    SNMP_LOGGER.logp(Level.FINER, SnmpAcl.class.getName(),
-                            "readAuthorizedListFile",
-                            "===> " + aa.getPrincipal().toString());
-                }
-                for (Enumeration eee = aa.permissions();eee.hasMoreElements();) {
-                    java.security.acl.Permission perm = (java.security.acl.Permission)eee.nextElement();
-                    if (SNMP_LOGGER.isLoggable(Level.FINER)) {
-                        SNMP_LOGGER.logp(Level.FINER, SnmpAcl.class.getName(),
-                                "readAuthorizedListFile", "perm = " + perm);
-                    }
-                }
-            }
-        }
-    }
-
-    /**
-     * Set the default full path for "snmp.acl" input file.
-     * Do not complain if the file does not exists.
-     */
-    private void setDefaultFileName() {
-        try {
-            setAuthorizedListFile(getDefaultAclFileName());
-        } catch (IllegalArgumentException x) {
-            // OK...
-        }
-    }
-
-
-    // PRIVATE VARIABLES
-    //------------------
-
-    /**
-     * Represents the Access Control List.
-     */
-    private AclImpl acl = null;
-    /**
-     * Flag indicating whether the access is always authorized.
-     * <BR>This is the case if there is no flat file defined.
-     */
-    private boolean alwaysAuthorized = false;
-    /**
-     * Represents the Access Control List flat file.
-     */
-    private String authorizedListFile = null;
-    /**
-     * Contains the hosts list for trap destination.
-     */
-    private Hashtable<InetAddress, Vector<String>> trapDestList = null;
-    /**
-     * Contains the hosts list for inform destination.
-     */
-    private Hashtable<InetAddress, Vector<String>> informDestList = null;
-
-    private PrincipalImpl owner = null;
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/Token.java b/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/Token.java
deleted file mode 100755
index d89d7d2..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/Token.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-
-/* Generated By:JavaCC: Do not edit this line. Token.java Version 0.7pre3 */
-package com.sun.jmx.snmp.IPAcl;
-
-/**
- * Describes the input token stream.
- */
-
-class Token {
-
-  /**
-   * An integer that describes the kind of this token.  This numbering
-   * system is determined by JavaCCParser, and a table of these numbers is
-   * stored in the file ...Constants.java.
-   */
-  public int kind;
-
-  /**
-   * beginLine and beginColumn describe the position of the first character
-   * of this token; endLine and endColumn describe the position of the
-   * last character of this token.
-   */
-  public int beginLine, beginColumn, endLine, endColumn;
-
-  /**
-   * The string image of the token.
-   */
-  public String image;
-
-  /**
-   * A reference to the next regular (non-special) token from the input
-   * stream.  If this is the last token from the input stream, or if the
-   * token manager has not read tokens beyond this one, this field is
-   * set to null.  This is true only if this token is also a regular
-   * token.  Otherwise, see below for a description of the contents of
-   * this field.
-   */
-  public Token next;
-
-  /**
-   * This field is used to access special tokens that occur prior to this
-   * token, but after the immediately preceding regular (non-special) token.
-   * If there are no such special tokens, this field is set to null.
-   * When there are more than one such special token, this field refers
-   * to the last of these special tokens, which in turn refers to the next
-   * previous special token through its specialToken field, and so on
-   * until the first special token (whose specialToken field is null).
-   * The next fields of special tokens refer to other special tokens that
-   * immediately follow it (without an intervening regular token).  If there
-   * is no such token, this field is null.
-   */
-  public Token specialToken;
-
-  /**
-   * Returns the image.
-   */
-  public final String toString()
-  {
-     return image;
-  }
-
-  /**
-   * Returns a new Token object, by default. However, if you want, you
-   * can create and return subclass objects based on the value of ofKind.
-   * Simply add the cases to the switch for all those special cases.
-   * For example, if you have a subclass of Token called IDToken that
-   * you want to create if ofKind is ID, simlpy add something like :
-   *
-   *    case MyParserConstants.ID : return new IDToken();
-   *
-   * to the following switch statement. Then you can cast matchedToken
-   * variable to the appropriate type and use it in your lexical actions.
-   */
-  public static final Token newToken(int ofKind)
-  {
-     switch(ofKind)
-     {
-       default : return new Token();
-     }
-  }
-
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/TokenMgrError.java b/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/TokenMgrError.java
deleted file mode 100755
index 75786ff..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/TokenMgrError.java
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- * Copyright (c) 1997, 2006, 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.
- */
-
-/* Generated By:JavaCC: Do not edit this line. TokenMgrError.java Version 0.7pre2 */
-package com.sun.jmx.snmp.IPAcl;
-
-class TokenMgrError extends Error
-{
-   private static final long serialVersionUID = -6373071623408870347L;
-
-   /*
-    * Ordinals for various reasons why an Error of this type can be thrown.
-    */
-
-   /**
-    * Lexical error occured.
-    */
-   static final int LEXICAL_ERROR = 0;
-
-   /**
-    * An attempt wass made to create a second instance of a static token manager.
-    */
-   static final int STATIC_LEXER_ERROR = 1;
-
-   /**
-    * Tried to change to an invalid lexical state.
-    */
-   static final int INVALID_LEXICAL_STATE = 2;
-
-   /**
-    * Detected (and bailed out of) an infinite loop in the token manager.
-    */
-   static final int LOOP_DETECTED = 3;
-
-   /**
-    * Indicates the reason why the exception is thrown. It will have
-    * one of the above 4 values.
-    */
-   int errorCode;
-
-   /**
-    * Replaces unprintable characters by their espaced (or unicode escaped)
-    * equivalents in the given string
-    */
-   protected static final String addEscapes(String str) {
-      StringBuffer retval = new StringBuffer();
-      char ch;
-      for (int i = 0; i < str.length(); i++) {
-        switch (str.charAt(i))
-        {
-           case 0 :
-              continue;
-           case '\b':
-              retval.append("\\b");
-              continue;
-           case '\t':
-              retval.append("\\t");
-              continue;
-           case '\n':
-              retval.append("\\n");
-              continue;
-           case '\f':
-              retval.append("\\f");
-              continue;
-           case '\r':
-              retval.append("\\r");
-              continue;
-           case '\"':
-              retval.append("\\\"");
-              continue;
-           case '\'':
-              retval.append("\\\'");
-              continue;
-           case '\\':
-              retval.append("\\\\");
-              continue;
-           default:
-              if ((ch = str.charAt(i)) < 0x20 || ch > 0x7e) {
-                 String s = "0000" + Integer.toString(ch, 16);
-                 retval.append("\\u" + s.substring(s.length() - 4, s.length()));
-              } else {
-                 retval.append(ch);
-              }
-              continue;
-        }
-      }
-      return retval.toString();
-   }
-
-   /**
-    * Returns a detailed message for the Error when it is thrown by the
-    * token manager to indicate a lexical error.
-    * Parameters :
-    *    EOFSeen     : indicates if EOF caused the lexicl error
-    *    curLexState : lexical state in which this error occured
-    *    errorLine   : line number when the error occured
-    *    errorColumn : column number when the error occured
-    *    errorAfter  : prefix that was seen before this error occured
-    *    curchar     : the offending character
-    * Note: You can customize the lexical error message by modifying this method.
-    */
-   private static final String LexicalError(boolean EOFSeen, int lexState, int errorLine, int errorColumn, String errorAfter, char curChar) {
-      return("Lexical error at line " +
-           errorLine + ", column " +
-           errorColumn + ".  Encountered: " +
-           (EOFSeen ? "<EOF> " : ("\"" + addEscapes(String.valueOf(curChar)) + "\"") + " (" + (int)curChar + "), ") +
-           "after : \"" + addEscapes(errorAfter) + "\"");
-   }
-
-   /**
-    * You can also modify the body of this method to customize your error messages.
-    * For example, cases like LOOP_DETECTED and INVALID_LEXICAL_STATE are not
-    * of end-users concern, so you can return something like :
-    *
-    *     "Internal Error : Please file a bug report .... "
-    *
-    * from this method for such cases in the release version of your parser.
-    */
-   public String getMessage() {
-      return super.getMessage();
-   }
-
-   /*
-    * Constructors of various flavors follow.
-    */
-
-   public TokenMgrError() {
-   }
-
-   public TokenMgrError(String message, int reason) {
-      super(message);
-      errorCode = reason;
-   }
-
-   public TokenMgrError(boolean EOFSeen, int lexState, int errorLine, int errorColumn, String errorAfter, char curChar, int reason) {
-      this(LexicalError(EOFSeen, lexState, errorLine, errorColumn, errorAfter, curChar), reason);
-   }
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/package.html b/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/package.html
deleted file mode 100755
index c3a9a1d..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/IPAcl/package.html
+++ /dev/null
@@ -1,34 +0,0 @@
-<HTML>
-<HEAD>
-<!--
-
-Copyright (c) 1999, 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.
--->
-</HEAD>
-<BODY>
-Provides the classes for storing ACL information in an ASCII file.
-<p><b>This API is a Sun Microsystems internal API  and is subject 
-   to change without notice.</b></p>
-</BODY>
-</HTML>
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/InetAddressAcl.java b/ojluni/src/main/java/com/sun/jmx/snmp/InetAddressAcl.java
deleted file mode 100755
index 99800e1..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/InetAddressAcl.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * Copyright (c) 2002, 2006, 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.jmx.snmp;
-
-// java import
-//
-import java.net.InetAddress;
-import java.util.Enumeration;
-
-/**
- * Defines the IP address based ACL used by the SNMP protocol adaptor.
- * <p>
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- * @since 1.5
- */
-
-public interface InetAddressAcl {
-
-    /**
-     * Returns the name of the ACL.
-     *
-     * @return The name of the ACL.
-     */
-    public String getName();
-
-    /**
-     * Checks whether or not the specified host has <CODE>READ</CODE> access.
-     *
-     * @param address The host address to check.
-     *
-     * @return <CODE>true</CODE> if the host has read permission, <CODE>false</CODE> otherwise.
-     */
-    public boolean checkReadPermission(InetAddress address);
-
-    /**
-     * Checks whether or not the specified host and community have <CODE>READ</CODE> access.
-     *
-     * @param address The host address to check.
-     * @param community The community associated with the host.
-     *
-     * @return <CODE>true</CODE> if the pair (host, community) has read permission, <CODE>false</CODE> otherwise.
-     */
-    public boolean checkReadPermission(InetAddress address, String community);
-
-    /**
-     * Checks whether or not a community string is defined.
-     *
-     * @param community The community to check.
-     *
-     * @return <CODE>true</CODE> if the community is known, <CODE>false</CODE> otherwise.
-     */
-    public boolean checkCommunity(String community);
-
-    /**
-     * Checks whether or not the specified host has <CODE>WRITE</CODE> access.
-     *
-     * @param address The host address to check.
-     *
-     * @return <CODE>true</CODE> if the host has write permission, <CODE>false</CODE> otherwise.
-     */
-    public boolean checkWritePermission(InetAddress address);
-
-    /**
-     * Checks whether or not the specified host and community have <CODE>WRITE</CODE> access.
-     *
-     * @param address The host address to check.
-     * @param community The community associated with the host.
-     *
-     * @return <CODE>true</CODE> if the pair (host, community) has write permission, <CODE>false</CODE> otherwise.
-     */
-    public boolean checkWritePermission(InetAddress address, String community);
-
-    /**
-     * Returns an enumeration of trap destinations.
-     *
-     * @return An enumeration of the trap destinations (enumeration of <CODE>InetAddress</CODE>).
-     */
-    public Enumeration getTrapDestinations();
-
-    /**
-     * Returns an enumeration of trap communities for a given host.
-     *
-     * @param address The address of the host.
-     *
-     * @return An enumeration of trap communities for a given host (enumeration of <CODE>String</CODE>).
-     */
-    public Enumeration getTrapCommunities(InetAddress address);
-
-    /**
-     * Returns an enumeration of inform destinations.
-     *
-     * @return An enumeration of the inform destinations (enumeration of <CODE>InetAddress</CODE>).
-     */
-    public Enumeration getInformDestinations();
-
-    /**
-     * Returns an enumeration of inform communities for a given host.
-     *
-     * @param address The address of the host.
-     *
-     * @return An enumeration of inform communities for a given host (enumeration of <CODE>String</CODE>).
-     */
-    public Enumeration getInformCommunities(InetAddress address);
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/ServiceName.java b/ojluni/src/main/java/com/sun/jmx/snmp/ServiceName.java
deleted file mode 100755
index edf7707..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/ServiceName.java
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-package com.sun.jmx.snmp;
-
-/**
- * Used for storing default values used by SNMP Runtime services.
- * <p><b>This API is an Oracle Corporation internal API  and is subject
- * to change without notice.</b></p>
- */
-public class ServiceName {
-
-    // private constructor defined to "hide" the default public constructor
-    private ServiceName() {
-    }
-
-    /**
-     * The object name of the MBeanServer delegate object
-     * <BR>
-     * The value is <CODE>JMImplementation:type=MBeanServerDelegate</CODE>.
-     */
-    public static final String DELEGATE = "JMImplementation:type=MBeanServerDelegate" ;
-
-    /**
-     * The default key properties for registering the class loader of the MLet service.
-     * <BR>
-     * The value is <CODE>type=MLet</CODE>.
-     */
-    public static final String MLET = "type=MLet";
-
-    /**
-     * The default domain.
-     * <BR>
-     * The value is <CODE>DefaultDomain</CODE>.
-     */
-    public static final String DOMAIN = "DefaultDomain";
-
-    /**
-     * The default port for the RMI connector.
-     * <BR>
-     * The value is <CODE>1099</CODE>.
-     */
-    public static final int RMI_CONNECTOR_PORT = 1099 ;
-
-    /**
-     * The default key properties for the RMI connector.
-     * <BR>
-     * The value is <CODE>name=RmiConnectorServer</CODE>.
-     */
-    public static final String RMI_CONNECTOR_SERVER = "name=RmiConnectorServer" ;
-
-    /**
-     * The default port for the SNMP adaptor.
-     * <BR>
-     * The value is <CODE>161</CODE>.
-     */
-    public static final int SNMP_ADAPTOR_PORT = 161 ;
-
-    /**
-     * The default key properties for the SNMP protocol adaptor.
-     * <BR>
-     * The value is <CODE>name=SnmpAdaptorServer</CODE>.
-     */
-    public static final String SNMP_ADAPTOR_SERVER = "name=SnmpAdaptorServer" ;
-
-    /**
-     * The default port for the HTTP connector.
-     * <BR>
-     * The value is <CODE>8081</CODE>.
-     */
-    public static final int HTTP_CONNECTOR_PORT = 8081 ;
-
-    /**
-     * The default key properties for the HTTP connector.
-     * <BR>
-     * The value is <CODE>name=HttpConnectorServer</CODE>.
-     */
-    public static final String HTTP_CONNECTOR_SERVER = "name=HttpConnectorServer" ;
-
-    /**
-     * The default port for the HTTPS connector.
-     * <BR>
-     * The value is <CODE>8084</CODE>.
-     */
-    public static final int HTTPS_CONNECTOR_PORT = 8084 ;
-
-    /**
-     * The default key properties for the HTTPS connector.
-     * <BR>
-     * The value is <CODE>name=HttpsConnectorServer</CODE>.
-     */
-    public static final String HTTPS_CONNECTOR_SERVER = "name=HttpsConnectorServer" ;
-
-    /**
-     * The default port for the HTML adaptor.
-     * <BR>
-     * The value is <CODE>8082</CODE>.
-     */
-    public static final int HTML_ADAPTOR_PORT = 8082 ;
-
-    /**
-     * The default key properties for the HTML protocol adaptor.
-     * <BR>
-     * The value is <CODE>name=HtmlAdaptorServer</CODE>.
-     */
-    public static final String HTML_ADAPTOR_SERVER = "name=HtmlAdaptorServer" ;
-
-    /**
-     * The name of the JMX specification implemented by this product.
-     * <BR>
-     * The value is <CODE>Java Management Extensions</CODE>.
-     */
-    public static final String JMX_SPEC_NAME = "Java Management Extensions";
-
-    /**
-     * The version of the JMX specification implemented by this product.
-     * <BR>
-     * The value is <CODE>1.0 Final Release</CODE>.
-     */
-    public static final String JMX_SPEC_VERSION = "1.2 Maintenance Release";
-
-    /**
-     * The vendor of the JMX specification implemented by this product.
-     * <BR>
-     * The value is <CODE>Oracle Corporation</CODE>.
-     */
-    public static final String JMX_SPEC_VENDOR = "Oracle Corporation";
-
-    /**
-     * The name of the vendor of this product implementing the  JMX specification.
-     * <BR>
-     * The value is <CODE>Oracle Corporation</CODE>.
-     */
-    public static final String JMX_IMPL_VENDOR = "Oracle Corporation";
-
-    /**
-      * The build number of the current product version, of the form <CODE>rXX</CODE>.
-      */
-    public static final String BUILD_NUMBER = "r01";
-
-    /**
-     * The version of this product implementing the  JMX specification.
-     * <BR>
-     * The value is <CODE>5.1_rXX</CODE>, where <CODE>rXX</CODE> is the <CODE>BUILD_NUMBER</CODE> .
-     */
-    public static final String JMX_IMPL_VERSION = "5.1_" + BUILD_NUMBER;
-
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpAckPdu.java b/ojluni/src/main/java/com/sun/jmx/snmp/SnmpAckPdu.java
deleted file mode 100755
index 7ab0ce8..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpAckPdu.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (c) 2001, 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.
- */
-package com.sun.jmx.snmp;
-/**
- * Interface to be implemented by PDUs that are acknowledged (eg:
- * request, bulk).
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- * @since 1.5
- */
-public interface SnmpAckPdu {
-    /**
-     * Returns the PDU to use for the response.
-     * @return The response PDU.
-     */
-    public SnmpPdu getResponsePdu();
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpBadSecurityLevelException.java b/ojluni/src/main/java/com/sun/jmx/snmp/SnmpBadSecurityLevelException.java
deleted file mode 100755
index 2c3ed65..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpBadSecurityLevelException.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (c) 2001, 2006, 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.jmx.snmp;
-/**
- * This exception is thrown when an incorrect security level is handled.
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- * @since 1.5
- */
-public class SnmpBadSecurityLevelException extends Exception {
-    private static final long serialVersionUID = 8863728413063813053L;
-
-    public SnmpBadSecurityLevelException(String msg) {
-        super(msg);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpCounter.java b/ojluni/src/main/java/com/sun/jmx/snmp/SnmpCounter.java
deleted file mode 100755
index 236f005..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpCounter.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright (c) 1997, 2007, 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.jmx.snmp;
-
-
-
-/**
- * Represents an SNMP counter.
- *
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- */
-
-public class SnmpCounter extends SnmpUnsignedInt {
-    private static final long serialVersionUID = 4655264728839396879L;
-
-    // CONSTRUCTORS
-    //-------------
-    /**
-     * Constructs a new <CODE>SnmpCounter</CODE> from the specified integer value.
-     * @param v The initialization value.
-     * @exception IllegalArgumentException The specified value is negative
-     * or larger than {@link SnmpUnsignedInt#MAX_VALUE SnmpUnsignedInt.MAX_VALUE}.
-     */
-    public SnmpCounter(int v) throws IllegalArgumentException {
-        super(v) ;
-    }
-
-    /**
-     * Constructs a new <CODE>SnmpCounter</CODE> from the specified <CODE>Integer</CODE> value.
-     * @param v The initialization value.
-     * @exception IllegalArgumentException The specified value is negative
-     * or larger than {@link SnmpUnsignedInt#MAX_VALUE SnmpUnsignedInt.MAX_VALUE}.
-     */
-    public SnmpCounter(Integer v) throws IllegalArgumentException {
-        super(v) ;
-    }
-
-    /**
-     * Constructs a new <CODE>SnmpCounter</CODE> from the specified long value.
-     * @param v The initialization value.
-     * @exception IllegalArgumentException The specified value is negative
-     * or larger than {@link SnmpUnsignedInt#MAX_VALUE SnmpUnsignedInt.MAX_VALUE}.
-     */
-    public SnmpCounter(long v) throws IllegalArgumentException {
-        super(v) ;
-    }
-
-    /**
-     * Constructs a new <CODE>SnmpCounter</CODE> from the specified <CODE>Long</CODE> value.
-     * @param v The initialization value.
-     * @exception IllegalArgumentException The specified value is negative
-     * or larger than {@link SnmpUnsignedInt#MAX_VALUE SnmpUnsignedInt.MAX_VALUE}.
-     */
-    public SnmpCounter(Long v) throws IllegalArgumentException {
-        super(v) ;
-    }
-
-    // PUBLIC METHODS
-    //---------------
-    /**
-     * Returns a textual description of the type object.
-     * @return ASN.1 textual description.
-     */
-    final public String getTypeName() {
-        return name ;
-    }
-
-    // VARIABLES
-    //----------
-    /**
-     * Name of the type.
-     */
-    final static String name = "Counter32" ;
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpCounter64.java b/ojluni/src/main/java/com/sun/jmx/snmp/SnmpCounter64.java
deleted file mode 100755
index 1289036..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpCounter64.java
+++ /dev/null
@@ -1,214 +0,0 @@
-/*
- * Copyright (c) 1997, 2007, 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.jmx.snmp;
-
-
-
-/**
- * Represents an SNMP 64bits counter.
- *
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- */
-
-public class SnmpCounter64 extends SnmpValue {
-    private static final long serialVersionUID = 8784850650494679937L;
-
-    // CONSTRUCTORS
-    //-------------
-    /**
-     * Constructs a new <CODE>SnmpCounter64</CODE> from the specified long value.
-     * @param v The initialization value.
-     * @exception IllegalArgumentException The specified value is negative
-     * or larger than <CODE>Long.MAX_VALUE</CODE>.
-     */
-    public SnmpCounter64(long v) throws IllegalArgumentException {
-
-        // NOTE:
-        // The max value for a counter64 variable is 2^64 - 1.
-        // The max value for a Long is 2^63 - 1.
-        // All the allowed values for a conuter64 variable cannot be covered !!!
-        //
-        if ((v < 0) || (v > Long.MAX_VALUE)) {
-            throw new IllegalArgumentException() ;
-        }
-        value = v ;
-    }
-
-    /**
-     * Constructs a new <CODE>SnmpCounter64</CODE> from the specified <CODE>Long</CODE> value.
-     * @param v The initialization value.
-     * @exception IllegalArgumentException The specified value is negative
-     * or larger than <CODE>Long.MAX_VALUE</CODE>.
-     */
-    public SnmpCounter64(Long v) throws IllegalArgumentException {
-        this(v.longValue()) ;
-    }
-
-    // PUBLIC METHODS
-    //---------------
-    /**
-     * Returns the counter value of this <CODE>SnmpCounter64</CODE>.
-     * @return The value.
-     */
-    public long longValue() {
-        return value ;
-    }
-
-    /**
-     * Converts the counter value to its <CODE>Long</CODE> form.
-     * @return The <CODE>Long</CODE> representation of the value.
-     */
-    public Long toLong() {
-        return new Long(value) ;
-    }
-
-    /**
-     * Converts the counter value to its integer form.
-     * @return The integer representation of the value.
-     */
-    public int intValue() {
-        return (int)value ;
-    }
-
-    /**
-     * Converts the counter value to its <CODE>Integer</CODE> form.
-     * @return The <CODE>Integer</CODE> representation of the value.
-     */
-    public Integer toInteger() {
-        return new Integer((int)value) ;
-    }
-
-    /**
-     * Converts the counter value to its <CODE>String</CODE> form.
-     * @return The <CODE>String</CODE> representation of the value.
-     */
-    public String toString() {
-        return String.valueOf(value) ;
-    }
-
-    /**
-     * Converts the counter value to its <CODE>SnmpOid</CODE> form.
-     * @return The OID representation of the value.
-     */
-    public SnmpOid toOid() {
-        return new SnmpOid(value) ;
-    }
-
-    /**
-     * Extracts the counter from an index OID and returns its
-     * value converted as an <CODE>SnmpOid</CODE>.
-     * @param index The index array.
-     * @param start The position in the index array.
-     * @return The OID representing the counter value.
-     * @exception SnmpStatusException There is no counter value
-     * available at the start position.
-     */
-    public static SnmpOid toOid(long[] index, int start) throws SnmpStatusException {
-        try {
-            return new SnmpOid(index[start]) ;
-        }
-        catch(IndexOutOfBoundsException e) {
-            throw new SnmpStatusException(SnmpStatusException.noSuchName) ;
-        }
-    }
-
-    /**
-     * Scans an index OID, skips the counter value and returns the position
-     * of the next value.
-     * @param index The index array.
-     * @param start The position in the index array.
-     * @return The position of the next value.
-     * @exception SnmpStatusException There is no counter value
-     * available at the start position.
-     */
-    public static int nextOid(long[] index, int start) throws SnmpStatusException {
-        if (start >= index.length) {
-            throw new SnmpStatusException(SnmpStatusException.noSuchName) ;
-        }
-        else {
-            return start + 1 ;
-        }
-    }
-
-    /**
-     * Appends an <CODE>SnmpOid</CODE> representing an <CODE>SnmpCounter64</CODE> to another OID.
-     * @param source An OID representing an <CODE>SnmpCounter64</CODE> value.
-     * @param dest Where source should be appended.
-     */
-    public static void appendToOid(SnmpOid source, SnmpOid dest) {
-        if (source.getLength() != 1) {
-            throw new IllegalArgumentException() ;
-        }
-        dest.append(source) ;
-    }
-
-    /**
-     * Performs a clone action. This provides a workaround for the
-     * <CODE>SnmpValue</CODE> interface.
-     * @return The SnmpValue clone.
-     */
-    final synchronized public SnmpValue duplicate() {
-        return (SnmpValue)clone() ;
-    }
-
-    /**
-     * Clones the <CODE>SnmpCounter64</CODE> object, making a copy of its data.
-     * @return The object clone.
-     */
-    final synchronized public Object clone() {
-        SnmpCounter64  newclone = null ;
-        try {
-            newclone = (SnmpCounter64) super.clone() ;
-            newclone.value = value ;
-        } catch (CloneNotSupportedException e) {
-            throw new InternalError() ; // vm bug.
-        }
-        return newclone ;
-    }
-
-    /**
-     * Returns a textual description of the type object.
-     * @return ASN.1 textual description.
-     */
-    final public String getTypeName() {
-        return name ;
-    }
-
-    // VARIABLES
-    //----------
-    /**
-     * Name of the type.
-     */
-    final static String name = "Counter64" ;
-
-    /**
-     * This is where the value is stored. This long is positive.
-     * @serial
-     */
-    private long value = 0 ;
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpEngine.java b/ojluni/src/main/java/com/sun/jmx/snmp/SnmpEngine.java
deleted file mode 100755
index 302569c..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpEngine.java
+++ /dev/null
@@ -1,70 +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.
- */
-package com.sun.jmx.snmp;
-
-/**
- * This engine is conformant with the RFC 2571. It is the main object within an SNMP entity (agent, manager...).
- * To an engine is associated an {@link SnmpEngineId}.
- * Engine instantiation is based on a factory {@link com.sun.jmx.snmp.SnmpEngineFactory  SnmpEngineFactory}.
- * When an <CODE> SnmpEngine </CODE> is created, a User based Security Model (USM) is initialized. The security configuration is located in a text file.
- * The text file is read when the engine is created.
- * <p>Note that the engine is not used when the agent is SNMPv1/SNMPv2 only.
-<P> The USM configuration text file is remotely updatable using the USM Mib.</P>
-<P> User that are configured in the Usm text file are nonVolatile. </P>
-<P> Usm Mib userEntry supported storage type values are : volatile or nonVolatile only. Other values are rejected and a wrongValue is returned) </P>
-<ul>
-<li> volatile means that user entry is not flushed in security file </li>
-<li> nonVolatile means that user entry is flushed in security file </li>
-<li> If a nonVolatile row is set to be volatile, it will be not flushed in the file </li>
-<li>If a volatile row created from the UsmMib is set to nonVolatile, it will be flushed in the file (if the file exist and is writable otherwise an inconsistentValue is returned)</li>
-</ul>
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- * @since 1.5
- */
-public interface SnmpEngine {
-    /**
-     * Gets the engine time in seconds. This is the time from the last reboot.
-     * @return The time from the last reboot.
-     */
-    public int getEngineTime();
-    /**
-     * Gets the engine Id. This is unique for each engine.
-     * @return The engine Id object.
-     */
-    public SnmpEngineId getEngineId();
-
-    /**
-     * Gets the engine boot number. This is the number of time this engine has rebooted. Each time an <CODE>SnmpEngine</CODE> is instantiated, it will read this value in its Lcd, and store back the value incremented by one.
-     * @return The engine's number of reboot.
-     */
-    public int getEngineBoots();
-
-    /**
-     * Gets the Usm key handler.
-     * @return The key handler.
-     */
-    public SnmpUsmKeyHandler getUsmKeyHandler();
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpEngineFactory.java b/ojluni/src/main/java/com/sun/jmx/snmp/SnmpEngineFactory.java
deleted file mode 100755
index 60ecfde..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpEngineFactory.java
+++ /dev/null
@@ -1,58 +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.
- */
-package com.sun.jmx.snmp;
-
-/**
- * This <CODE>SnmpEngineFactory</CODE> is instantiating an <CODE>SnmpEngine</CODE> containing :
- * <ul>
- * <li> Message Processing Sub System + V1, V2 et V3 Message Processing Models</li>
- * <li> Security Sub System + User based Security Model (Id 3)</li>
- * <li> Access Control Sub System + Ip Acl + User based Access Control Model. See <CODE> IpAcl </CODE> and <CODE> UserAcl </CODE>.</li>
- * </ul>
- *
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- * @since 1.5
- */
-public interface SnmpEngineFactory {
-    /**
-     * The engine instantiation method.
-     * @param p The parameters used to instantiate a new engine.
-     * @throws IllegalArgumentException Throwed if one of the configuration file file doesn't exist (Acl files, security file).
-     * @return The newly created SnmpEngine.
-     */
-    public SnmpEngine createEngine(SnmpEngineParameters p);
-
-    /**
-     * The engine instantiation method.
-     * @param p The parameters used to instantiate a new engine.
-     * @param ipacl The Ip ACL to pass to the Access Control Model.
-     * @throws IllegalArgumentException Throwed if one of the configuration
-     *         file file doesn't exist (Acl files, security file).
-     * @return The newly created SnmpEngine.
-     */
-    public SnmpEngine createEngine(SnmpEngineParameters p,
-                                   InetAddressAcl ipacl);
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpEngineId.java b/ojluni/src/main/java/com/sun/jmx/snmp/SnmpEngineId.java
deleted file mode 100755
index 537e424..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpEngineId.java
+++ /dev/null
@@ -1,489 +0,0 @@
-/*
- * Copyright (c) 2001, 2006, 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.jmx.snmp;
-
-import java.net.InetAddress;
-import java.io.Serializable;
-import java.net.UnknownHostException;
-import java.util.StringTokenizer;
-import java.util.Arrays;
-import java.util.NoSuchElementException;
-
-import com.sun.jmx.snmp.internal.SnmpTools;
-
-/**
- * This class is handling an <CODE>SnmpEngineId</CODE> data. It copes with binary as well as <CODE>String</CODE> representation of an engine Id. A string format engine is an hex string starting with 0x.
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- * @since 1.5
- */
-public class SnmpEngineId implements Serializable {
-    private static final long serialVersionUID = 5434729655830763317L;
-
-    byte[] engineId = null;
-    String hexString = null;
-    String humanString = null;
-    /**
-     * New <CODE>SnmpEngineId</CODE> with an hex string value. Can handle engine Id format &lt;host&gt:&lt;port&gt.
-     * @param hexString Hexa string.
-     */
-    SnmpEngineId(String hexString) {
-        engineId = SnmpTools.ascii2binary(hexString);
-        this.hexString = hexString.toLowerCase();
-    }
-    /**
-     * New <CODE>SnmpEngineId</CODE> with a binary value. You can use <CODE> SnmpTools </CODE> to convert from hex string to binary format.
-     * @param bin Binary value
-     */
-    SnmpEngineId(byte[] bin) {
-        engineId = bin;
-        hexString = SnmpTools.binary2ascii(bin).toLowerCase();
-    }
-
-    /**
-     * If a string of the format &lt;address&gt;:&lt;port&gt;:&lt;IANA number&gt; has been provided at creation time, this string is returned.
-     * @return The Id as a readable string or null if not provided.
-     */
-    public String getReadableId() {
-        return humanString;
-    }
-
-    /**
-     * Returns a string format engine Id.
-     * @return String format value.
-     */
-    public String toString() {
-        return hexString;
-    }
-    /**
-     * Returns a binary engine Id.
-     * @return Binary value.
-     */
-    public byte[] getBytes() {
-        return engineId;
-    }
-
-    /**
-     * In order to store the string used to create the engineId.
-     */
-    void setStringValue(String val) {
-        humanString = val;
-    }
-
-    static void validateId(String str) throws IllegalArgumentException {
-        byte[] arr = SnmpTools.ascii2binary(str);
-        validateId(arr);
-    }
-
-    static void validateId(byte[] arr) throws IllegalArgumentException {
-
-        if(arr.length < 5) throw new IllegalArgumentException("Id size lower than 5 bytes.");
-        if(arr.length > 32) throw new IllegalArgumentException("Id size greater than 32 bytes.");
-
-        //octet strings with very first bit = 0 and length != 12 octets
-        if( ((arr[0] & 0x80) == 0) && arr.length != 12)
-            throw new IllegalArgumentException("Very first bit = 0 and length != 12 octets");
-
-        byte[] zeroedArrays = new byte[arr.length];
-        if(Arrays.equals(zeroedArrays, arr)) throw new IllegalArgumentException("Zeroed Id.");
-        byte[] FFArrays = new byte[arr.length];
-        Arrays.fill(FFArrays, (byte)0xFF);
-        if(Arrays.equals(FFArrays, arr)) throw new IllegalArgumentException("0xFF Id.");
-
-    }
-
-    /**
-     * Generates an engine Id based on the passed array.
-     * @return The created engine Id or null if given arr is null or its length == 0;
-     * @exception IllegalArgumentException when:
-     * <ul>
-     *  <li>octet string lower than 5 bytes.</li>
-     *  <li>octet string greater than 32 bytes.</li>
-     *  <li>octet string = all zeros.</li>
-     *  <li>octet string = all 'ff'H.</li>
-     *  <li>octet strings with very first bit = 0 and length != 12 octets</li>
-     * </ul>
-     */
-    public static SnmpEngineId createEngineId(byte[] arr) throws IllegalArgumentException {
-        if( (arr == null) || arr.length == 0) return null;
-        validateId(arr);
-        return new SnmpEngineId(arr);
-    }
-
-    /**
-     * Generates an engine Id that is unique to the host the agent is running on. The engine Id unicity is system time based. The creation algorithm uses the SUN Microsystems IANA number (42).
-     * @return The generated engine Id.
-     */
-    public static SnmpEngineId createEngineId() {
-        byte[] address = null;
-        byte[] engineid = new byte[13];
-        int iana = 42;
-        long mask = 0xFF;
-        long time = System.currentTimeMillis();
-
-        engineid[0] = (byte) ( (iana & 0xFF000000) >> 24 );
-        engineid[0] |= 0x80;
-        engineid[1] = (byte) ( (iana & 0x00FF0000) >> 16 );
-        engineid[2] = (byte) ( (iana & 0x0000FF00) >> 8 );
-        engineid[3] = (byte) (iana & 0x000000FF);
-        engineid[4] = 0x05;
-
-        engineid[5] =  (byte) ( (time & (mask << 56)) >>> 56 );
-        engineid[6] =  (byte) ( (time & (mask << 48) ) >>> 48 );
-        engineid[7] =  (byte) ( (time & (mask << 40) ) >>> 40 );
-        engineid[8] =  (byte) ( (time & (mask << 32) ) >>> 32 );
-        engineid[9] =  (byte) ( (time & (mask << 24) ) >>> 24 );
-        engineid[10] = (byte) ( (time & (mask << 16) ) >>> 16 );
-        engineid[11] = (byte) ( (time & (mask << 8) ) >>> 8 );
-        engineid[12] = (byte) (time & mask);
-
-        return new SnmpEngineId(engineid);
-    }
-
-    /**
-     * Translates an engine Id in an SnmpOid format. This is useful when dealing with USM MIB indexes.
-     * The oid format is : <engine Id length>.<engine Id binary octet1>....<engine Id binary octetn - 1>.<engine Id binary octetn>
-     * Eg: "0x8000002a05819dcb6e00001f96" ==> 13.128.0.0.42.5.129.157.203.110.0.0.31.150
-     *
-     * @return SnmpOid The oid.
-     */
-    public SnmpOid toOid() {
-        long[] oid = new long[engineId.length + 1];
-        oid[0] = engineId.length;
-        for(int i = 1; i <= engineId.length; i++)
-            oid[i] = (long) (engineId[i-1] & 0xFF);
-        return new SnmpOid(oid);
-    }
-
-   /**
-    * <P>Generates a unique engine Id. Hexadecimal strings as well as a textual description are supported. The textual format is as follow:
-    * <BR>  &lt;address&gt;:&lt;port&gt;:&lt;IANA number&gt;</P>
-    * <P>The allowed formats :</P>
-    * <ul>
-    * <li> &lt;address&gt;:&lt;port&gt;:&lt;IANA number&gt
-    * <BR>   All these parameters are used to generate the Id. WARNING, this method is not compliant with IPv6 address format. Use { @link com.sun.jmx.snmp.SnmpEngineId#createEngineId(java.lang.String,java.lang.String) } instead.</li>
-    * <li> &lt;address&gt;:&lt;port&gt;
-    * <BR>   The IANA number will be the SUN Microsystems one (42). </li>
-    * <li> address
-    * <BR>   The port 161 will be used to generate the Id. IANA number will be the SUN Microsystems one (42). </li>
-    * <li> :port
-    * <BR>   The host to use is localhost. IANA number will be the SUN Microsystems one (42). </li>
-    * <li> ::&lt;IANA number&gt &nbsp;&nbsp;&nbsp;
-    * <BR>   The port 161 and localhost will be used to generate the Id. </li>
-    * <li> :&lt;port&gt;:&lt;IANA number&gt;
-    * <BR>   The host to use is localhost. </li>
-    * <li> &lt;address&gt;::&lt;IANA number&gt
-    * <BR>   The port 161 will be used to generate the Id. </li>
-    * <li> :: &nbsp;&nbsp;&nbsp;
-    * <BR>   The port 161, localhost and the SUN Microsystems IANA number will be used to generate the Id. </li>
-    * </ul>
-    * @exception UnknownHostException if the host name contained in the textual format is unknown.
-    * @exception IllegalArgumentException when :
-    * <ul>
-    *  <li>octet string lower than 5 bytes.</li>
-    *  <li>octet string greater than 32 bytes.</li>
-    *  <li>octet string = all zeros.</li>
-    *  <li>octet string = all 'ff'H.</li>
-    *  <li>octet strings with very first bit = 0 and length != 12 octets</li>
-    *  <li>An IPv6 address format is used in conjonction with the ":" separator</li>
-    * </ul>
-    * @param str The string to parse.
-    * @return The generated engine Id or null if the passed string is null.
-    *
-    */
-    public static SnmpEngineId createEngineId(String str)
-        throws IllegalArgumentException, UnknownHostException {
-        return createEngineId(str, null);
-    }
-
-    /**
-     * Idem { @link
-     * com.sun.jmx.snmp.SnmpEngineId#createEngineId(java.lang.String) }
-     * with the ability to provide your own separator. This allows IPv6
-     * address format handling (eg: providing @ as separator).
-     * @param str The string to parse.
-     * @param separator the separator to use. If null is provided, the default
-     * separator ":" is used.
-     * @return The generated engine Id or null if the passed string is null.
-     * @exception UnknownHostException if the host name contained in the
-     * textual format is unknown.
-     * @exception IllegalArgumentException when :
-     * <ul>
-     *  <li>octet string lower than 5 bytes.</li>
-     *  <li>octet string greater than 32 bytes.</li>
-     *  <li>octet string = all zeros.</li>
-     *  <li>octet string = all 'ff'H.</li>
-     *  <li>octet strings with very first bit = 0 and length != 12 octets</li>
-     *  <li>An IPv6 address format is used in conjonction with the ":"
-     *      separator</li>
-     * </ul>
-     * @since 1.5
-     */
-    public static SnmpEngineId createEngineId(String str, String separator)
-        throws IllegalArgumentException, UnknownHostException {
-        if(str == null) return null;
-
-        if(str.startsWith("0x") || str.startsWith("0X")) {
-            validateId(str);
-            return new SnmpEngineId(str);
-        }
-        separator = separator == null ? ":" : separator;
-        StringTokenizer token = new StringTokenizer(str,
-                                                    separator,
-                                                    true);
-
-        String address = null;
-        String port = null;
-        String iana = null;
-        int objPort = 161;
-        int objIana = 42;
-        InetAddress objAddress = null;
-        SnmpEngineId eng = null;
-        try {
-            //Deal with address
-            try {
-                address = token.nextToken();
-            }catch(NoSuchElementException e) {
-                throw new IllegalArgumentException("Passed string is invalid : ["+str+"]");
-            }
-            if(!address.equals(separator)) {
-                objAddress = InetAddress.getByName(address);
-                try {
-                    token.nextToken();
-                }catch(NoSuchElementException e) {
-                    //No need to go further, no port.
-                    eng = SnmpEngineId.createEngineId(objAddress,
-                                                      objPort,
-                                                      objIana);
-                    eng.setStringValue(str);
-                    return eng;
-                }
-            }
-            else
-                objAddress = InetAddress.getLocalHost();
-
-            //Deal with port
-            try {
-                port = token.nextToken();
-            }catch(NoSuchElementException e) {
-                //No need to go further, no port.
-                eng = SnmpEngineId.createEngineId(objAddress,
-                                                  objPort,
-                                                  objIana);
-                eng.setStringValue(str);
-                return eng;
-            }
-
-            if(!port.equals(separator)) {
-                objPort = Integer.parseInt(port);
-                try {
-                    token.nextToken();
-                }catch(NoSuchElementException e) {
-                    //No need to go further, no iana.
-                    eng = SnmpEngineId.createEngineId(objAddress,
-                                                      objPort,
-                                                      objIana);
-                    eng.setStringValue(str);
-                    return eng;
-                }
-            }
-
-            //Deal with iana
-            try {
-                iana = token.nextToken();
-            }catch(NoSuchElementException e) {
-                //No need to go further, no port.
-                eng = SnmpEngineId.createEngineId(objAddress,
-                                                  objPort,
-                                                  objIana);
-                eng.setStringValue(str);
-                return eng;
-            }
-
-            if(!iana.equals(separator))
-                objIana = Integer.parseInt(iana);
-
-            eng = SnmpEngineId.createEngineId(objAddress,
-                                              objPort,
-                                              objIana);
-            eng.setStringValue(str);
-
-            return eng;
-
-        } catch(Exception e) {
-            throw new IllegalArgumentException("Passed string is invalid : ["+str+"]. Check that the used separator ["+ separator + "] is compatible with IPv6 address format.");
-        }
-
-    }
-
-    /**
-     * Generates a unique engine Id. The engine Id unicity is based on
-     * the host IP address and port. The IP address used is the
-     * localhost one. The creation algorithm uses the SUN Microsystems IANA
-     * number (42).
-     * @param port The TCP/IP port the SNMPv3 Adaptor Server is listening to.
-     * @return The generated engine Id.
-     * @exception UnknownHostException if the local host name
-     *            used to calculate the id is unknown.
-     */
-    public static SnmpEngineId createEngineId(int port)
-        throws UnknownHostException {
-        int suniana = 42;
-        InetAddress address = null;
-        address = InetAddress.getLocalHost();
-        return createEngineId(address, port, suniana);
-    }
-    /**
-     * Generates a unique engine Id. The engine Id unicity is based on
-     * the host IP address and port. The IP address used is the passed
-     * one. The creation algorithm uses the SUN Microsystems IANA
-     * number (42).
-     * @param address The IP address the SNMPv3 Adaptor Server is listening to.
-     * @param port The TCP/IP port the SNMPv3 Adaptor Server is listening to.
-     * @return The generated engine Id.
-     * @exception UnknownHostException. if the provided address is null.
-     */
-    public static SnmpEngineId createEngineId(InetAddress address, int port)
-        throws IllegalArgumentException {
-        int suniana = 42;
-        if(address == null)
-            throw new IllegalArgumentException("InetAddress is null.");
-        return createEngineId(address, port, suniana);
-    }
-
-    /**
-     * Generates a unique engine Id. The engine Id unicity is based on
-     * the host IP address and port. The IP address is the localhost one.
-     * The creation algorithm uses the passed IANA number.
-     * @param port The TCP/IP port the SNMPv3 Adaptor Server is listening to.
-     * @param iana Your enterprise IANA number.
-     * @exception UnknownHostException if the local host name used to calculate the id is unknown.
-     * @return The generated engine Id.
-     */
-    public static SnmpEngineId createEngineId(int port, int iana) throws UnknownHostException {
-        InetAddress address = null;
-        address = InetAddress.getLocalHost();
-        return createEngineId(address, port, iana);
-    }
-
-    /**
-     * Generates a unique engine Id. The engine Id unicity is based on the host IP address and port. The IP address is the passed one, it handles IPv4 and IPv6 hosts. The creation algorithm uses the passed IANA number.
-     * @param addr The IP address the SNMPv3 Adaptor Server is listening to.
-     * @param port The TCP/IP port the SNMPv3 Adaptor Server is listening to.
-     * @param iana Your enterprise IANA number.
-     * @return The generated engine Id.
-     * @exception UnknownHostException if the provided <CODE>InetAddress </CODE> is null.
-     */
-    public static SnmpEngineId createEngineId(InetAddress addr,
-                                              int port,
-                                              int iana) {
-        if(addr == null) throw new IllegalArgumentException("InetAddress is null.");
-        byte[] address = addr.getAddress();
-        byte[] engineid = new byte[9 + address.length];
-        engineid[0] = (byte) ( (iana & 0xFF000000) >> 24 );
-        engineid[0] |= 0x80;
-        engineid[1] = (byte) ( (iana & 0x00FF0000) >> 16 );
-        engineid[2] = (byte) ( (iana & 0x0000FF00) >> 8 );
-
-engineid[3] = (byte) (iana & 0x000000FF);
-        engineid[4] = 0x05;
-
-        if(address.length == 4)
-            engineid[4] = 0x01;
-
-        if(address.length == 16)
-            engineid[4] = 0x02;
-
-        for(int i = 0; i < address.length; i++) {
-            engineid[i + 5] = address[i];
-        }
-
-        engineid[5 + address.length] = (byte)  ( (port & 0xFF000000) >> 24 );
-        engineid[6 + address.length] = (byte) ( (port & 0x00FF0000) >> 16 );
-        engineid[7 + address.length] = (byte) ( (port & 0x0000FF00) >> 8 );
-        engineid[8 + address.length] = (byte) (  port & 0x000000FF );
-
-        return new SnmpEngineId(engineid);
-    }
-
-     /**
-     * Generates an engine Id based on an InetAddress. Handles IPv4 and IPv6 addresses. The creation algorithm uses the passed IANA number.
-     * @param iana Your enterprise IANA number.
-     * @param addr The IP address the SNMPv3 Adaptor Server is listening to.
-     * @return The generated engine Id.
-     * @since 1.5
-     * @exception UnknownHostException if the provided <CODE>InetAddress </CODE> is null.
-     */
-    public static SnmpEngineId createEngineId(int iana, InetAddress addr)
-    {
-        if(addr == null) throw new IllegalArgumentException("InetAddress is null.");
-        byte[] address = addr.getAddress();
-        byte[] engineid = new byte[5 + address.length];
-        engineid[0] = (byte) ( (iana & 0xFF000000) >> 24 );
-        engineid[0] |= 0x80;
-        engineid[1] = (byte) ( (iana & 0x00FF0000) >> 16 );
-        engineid[2] = (byte) ( (iana & 0x0000FF00) >> 8 );
-
-        engineid[3] = (byte) (iana & 0x000000FF);
-        if(address.length == 4)
-            engineid[4] = 0x01;
-
-        if(address.length == 16)
-            engineid[4] = 0x02;
-
-        for(int i = 0; i < address.length; i++) {
-            engineid[i + 5] = address[i];
-        }
-
-        return new SnmpEngineId(engineid);
-    }
-
-    /**
-     * Generates an engine Id based on an InetAddress. Handles IPv4 and IPv6
-     * addresses. The creation algorithm uses the sun IANA number (42).
-     * @param addr The IP address the SNMPv3 Adaptor Server is listening to.
-     * @return The generated engine Id.
-     * @since 1.5
-     * @exception UnknownHostException if the provided
-     *            <CODE>InetAddress</CODE> is null.
-     */
-    public static SnmpEngineId createEngineId(InetAddress addr) {
-        return createEngineId(42, addr);
-    }
-
-
-    /**
-     * Tests <CODE>SnmpEngineId</CODE> instance equality. Two <CODE>SnmpEngineId</CODE> are equal if they have the same value.
-     * @return <CODE>true</CODE> if the two <CODE>SnmpEngineId</CODE> are equals, <CODE>false</CODE> otherwise.
-     */
-    public boolean equals(Object a) {
-        if(!(a instanceof SnmpEngineId) ) return false;
-        return hexString.equals(((SnmpEngineId) a).toString());
-    }
-
-    public int hashCode() {
-        return hexString.hashCode();
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpEngineParameters.java b/ojluni/src/main/java/com/sun/jmx/snmp/SnmpEngineParameters.java
deleted file mode 100755
index 4c2289b..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpEngineParameters.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Copyright (c) 2002, 2006, 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.jmx.snmp;
-
-import java.io.Serializable;
-
-/**
- * This class is used to pass some specific parameters to an <CODE>
- * SnmpEngineFactory </CODE>.
- *
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- * @since 1.5
- */
-public class SnmpEngineParameters implements Serializable {
-    private static final long serialVersionUID = 3720556613478400808L;
-
-    private UserAcl uacl = null;
-    private String securityFile = null;
-    private boolean encrypt = false;
-    private SnmpEngineId engineId = null;
-
-    /**
-     * Sets the file to use for SNMP Runtime Lcd. If no file is provided, the default location will be checked.
-     */
-    public void setSecurityFile(String securityFile) {
-        this.securityFile = securityFile;
-    }
-
-    /**
-     * Gets the file to use for SNMP Runtime Lcd.
-     * @return The security file.
-     */
-    public String getSecurityFile() {
-        return securityFile;
-    }
-    /**
-     * Sets a customized user ACL. User Acl is used in order to check
-     * access for SNMP V3 requests. If no ACL is provided,
-     * <CODE>com.sun.jmx.snmp.usm.UserAcl.UserAcl</CODE> is instantiated.
-     * @param uacl The user ACL to use.
-     */
-    public void setUserAcl(UserAcl uacl) {
-        this.uacl = uacl;
-    }
-
-    /**
-     * Gets the customized user ACL.
-     * @return The customized user ACL.
-     */
-    public UserAcl getUserAcl() {
-        return uacl;
-    }
-
-    /**
-     * Activate SNMP V3 encryption. By default the encryption is not activated. Be sure that the security provider classes needed for DES are in your classpath (eg:JCE classes)
-     *
-     */
-    public void activateEncryption() {
-        this.encrypt = true;
-    }
-
-    /**
-     * Deactivate SNMP V3 encryption. By default the encryption is not activated. Be sure that the security provider classes needed for DES are in your classpath (eg:JCE classes)
-     *
-     */
-    public void deactivateEncryption() {
-        this.encrypt = false;
-    }
-
-    /**
-     * Check if encryption is activated. By default the encryption is not activated.
-     * @return The encryption activation status.
-     */
-    public boolean isEncryptionEnabled() {
-        return encrypt;
-    }
-
-    /**
-     * Set the engine Id.
-     * @param engineId The engine Id to use.
-     */
-    public void setEngineId(SnmpEngineId engineId) {
-        this.engineId = engineId;
-    }
-
-    /**
-     * Get the engine Id.
-     * @return The engineId.
-     */
-    public SnmpEngineId getEngineId() {
-        return engineId;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpGauge.java b/ojluni/src/main/java/com/sun/jmx/snmp/SnmpGauge.java
deleted file mode 100755
index 1f81cf3..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpGauge.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright (c) 1997, 2007, 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.jmx.snmp;
-
-
-
-/**
- * Represents an SNMP gauge.
- *
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- */
-
-public class SnmpGauge extends SnmpUnsignedInt {
-    private static final long serialVersionUID = -8366622742122792945L;
-
-    // CONSTRUCTORS
-    //-------------
-    /**
-     * Constructs a new <CODE>SnmpGauge</CODE> from the specified integer value.
-     * @param v The initialization value.
-     * @exception IllegalArgumentException The specified value is negative
-     * or larger than {@link SnmpUnsignedInt#MAX_VALUE SnmpUnsignedInt.MAX_VALUE}.
-     */
-    public SnmpGauge(int v) throws IllegalArgumentException {
-        super(v) ;
-    }
-
-    /**
-     * Constructs a new <CODE>SnmpGauge</CODE> from the specified <CODE>Integer</CODE> value.
-     * @param v The initialization value.
-     * @exception IllegalArgumentException The specified value is negative
-     * or larger than {@link SnmpUnsignedInt#MAX_VALUE SnmpUnsignedInt.MAX_VALUE}.
-     */
-    public SnmpGauge(Integer v) throws IllegalArgumentException {
-        super(v) ;
-    }
-
-    /**
-     * Constructs a new <CODE>SnmpGauge</CODE> from the specified long value.
-     * @param v The initialization value.
-     * @exception IllegalArgumentException The specified value is negative
-     * or larger than {@link SnmpUnsignedInt#MAX_VALUE SnmpUnsignedInt.MAX_VALUE}.
-     */
-    public SnmpGauge(long v) throws IllegalArgumentException {
-        super(v) ;
-    }
-
-    /**
-     * Constructs a new <CODE>SnmpGauge</CODE> from the specified <CODE>Long</CODE> value.
-     * @param v The initialization value.
-     * @exception IllegalArgumentException The specified value is negative
-     * or larger than {@link SnmpUnsignedInt#MAX_VALUE SnmpUnsignedInt.MAX_VALUE}.
-     */
-    public SnmpGauge(Long v) throws IllegalArgumentException {
-        super(v) ;
-    }
-
-    // PUBLIC METHODS
-    //---------------
-    /**
-     * Returns a textual description of the type object.
-     * @return ASN.1 textual description.
-     */
-    final public String getTypeName() {
-        return name ;
-    }
-
-    // VARIABLES
-    //----------
-    /**
-     * Name of the type.
-     */
-    final static String name = "Gauge32" ;
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpInt.java b/ojluni/src/main/java/com/sun/jmx/snmp/SnmpInt.java
deleted file mode 100755
index a5faf5c..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpInt.java
+++ /dev/null
@@ -1,282 +0,0 @@
-/*
- * Copyright (c) 1997, 2007, 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.jmx.snmp;
-
-
-
-import com.sun.jmx.snmp.Enumerated;
-
-/**
- * Represents an SNMP integer.
- *
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- */
-
-public class SnmpInt extends SnmpValue {
-    private static final long serialVersionUID = -7163624758070343373L;
-
-    // CONSTRUCTORS
-    //-------------
-    /**
-     * Constructs a new <CODE>SnmpInt</CODE> from the specified integer value.
-     * @param v The initialization value.
-     * @exception IllegalArgumentException The specified value is smaller than <CODE>Integer.MIN_VALUE</CODE>
-     * or larger than <CODE>Integer.MAX_VALUE</CODE>.
-     */
-    public SnmpInt(int v) throws IllegalArgumentException {
-        if ( isInitValueValid(v) == false ) {
-            throw new IllegalArgumentException() ;
-        }
-        value = (long)v ;
-    }
-
-    /**
-     * Constructs a new <CODE>SnmpInt</CODE> from the specified <CODE>Integer</CODE> value.
-     * @param v The initialization value.
-     * @exception IllegalArgumentException The specified value is smaller than <CODE>Integer.MIN_VALUE</CODE>
-     * or larger than <CODE>Integer.MAX_VALUE</CODE>.
-     */
-    public SnmpInt(Integer v) throws IllegalArgumentException {
-        this(v.intValue()) ;
-    }
-
-    /**
-     * Constructs a new <CODE>SnmpInt</CODE> from the specified long value.
-     * @param v The initialization value.
-     * @exception IllegalArgumentException The specified value is smaller than <CODE>Integer.MIN_VALUE</CODE>
-     * or larger than <CODE>Integer.MAX_VALUE</CODE>.
-     */
-    public SnmpInt(long v) throws IllegalArgumentException {
-        if ( isInitValueValid(v) == false ) {
-            throw new IllegalArgumentException() ;
-        }
-        value = v ;
-    }
-
-    /**
-     * Constructs a new <CODE>SnmpInt</CODE> from the specified <CODE>Long</CODE> value.
-     * @param v The initialization value.
-     * @exception IllegalArgumentException The specified value is smaller than <CODE>Integer.MIN_VALUE</CODE>
-     * or larger than <CODE>Integer.MAX_VALUE</CODE>.
-     */
-    public SnmpInt(Long v) throws IllegalArgumentException {
-        this(v.longValue()) ;
-    }
-
-    /**
-     * Constructs a new <CODE>SnmpInt</CODE> from the specified <CODE>Enumerated</CODE> value.
-     * @param v The initialization value.
-     * @exception IllegalArgumentException The specified value is smaller than <CODE>Integer.MIN_VALUE</CODE>
-     * or larger than <CODE>Integer.MAX_VALUE</CODE>.
-     * @see Enumerated
-     */
-    public SnmpInt(Enumerated v) throws IllegalArgumentException {
-        this(v.intValue()) ;
-    }
-
-    /**
-     * Constructs a new <CODE>SnmpInt</CODE> from the specified boolean value.
-     * This constructor applies rfc1903 rule:
-     * <p><blockquote><pre>
-     * TruthValue ::= TEXTUAL-CONVENTION
-     *     STATUS       current
-     *     DESCRIPTION
-     *             "Represents a boolean value."
-     *     SYNTAX       INTEGER { true(1), false(2) }
-     * </pre></blockquote>
-     * @param v The initialization value.
-     */
-    public SnmpInt(boolean v) {
-        value = v ? 1 : 2 ;
-    }
-
-    // PUBLIC METHODS
-    //---------------
-    /**
-     * Returns the long value of this <CODE>SnmpInt</CODE>.
-     * @return The value.
-     */
-    public long longValue() {
-        return value ;
-    }
-
-    /**
-     * Converts the integer value to its <CODE>Long</CODE> form.
-     * @return The <CODE>Long</CODE> representation of the value.
-     */
-    public Long toLong() {
-        return new Long(value) ;
-    }
-
-    /**
-     * Converts the integer value to its integer form.
-     * @return The integer representation of the value.
-     */
-    public int intValue() {
-        return (int) value ;
-    }
-
-    /**
-     * Converts the integer value to its <CODE>Integer</CODE> form.
-     * @return The <CODE>Integer</CODE> representation of the value.
-     */
-    public Integer toInteger() {
-        return new Integer((int)value) ;
-    }
-
-    /**
-     * Converts the integer value to its <CODE>String</CODE> form.
-     * @return The <CODE>String</CODE> representation of the value.
-     */
-    public String toString() {
-        return String.valueOf(value) ;
-    }
-
-    /**
-     * Converts the integer value to its <CODE>SnmpOid</CODE> form.
-     * @return The OID representation of the value.
-     */
-    public SnmpOid toOid() {
-        return new SnmpOid(value) ;
-    }
-
-    /**
-     * Extracts the integer from an index OID and returns its
-     * value converted as an <CODE>SnmpOid</CODE>.
-     * @param index The index array.
-     * @param start The position in the index array.
-     * @return The OID representing the integer value.
-     * @exception SnmpStatusException There is no integer value
-     * available at the start position.
-     */
-    public static SnmpOid toOid(long[] index, int start) throws SnmpStatusException {
-        try {
-            return new SnmpOid(index[start]) ;
-        }
-        catch(IndexOutOfBoundsException e) {
-            throw new SnmpStatusException(SnmpStatusException.noSuchName) ;
-        }
-    }
-
-    /**
-     * Scans an index OID, skips the integer value and returns the position
-     * of the next value.
-     * @param index The index array.
-     * @param start The position in the index array.
-     * @return The position of the next value.
-     * @exception SnmpStatusException There is no integer value
-     * available at the start position.
-     */
-    public static int nextOid(long[] index, int start) throws SnmpStatusException {
-        if (start >= index.length) {
-            throw new SnmpStatusException(SnmpStatusException.noSuchName) ;
-        }
-        else {
-            return start + 1 ;
-        }
-    }
-
-    /**
-     * Appends an <CODE>SnmpOid</CODE> representing an <CODE>SnmpInt</CODE> to another OID.
-     * @param source An OID representing an <CODE>SnmpInt</CODE> value.
-     * @param dest Where source should be appended.
-     */
-    public static void appendToOid(SnmpOid source, SnmpOid dest) {
-        if (source.getLength() != 1) {
-            throw new IllegalArgumentException() ;
-        }
-        dest.append(source) ;
-    }
-
-    /**
-     * Performs a clone action. This provides a workaround for the
-     * <CODE>SnmpValue</CODE> interface.
-     * @return The <CODE>SnmpValue</CODE> clone.
-     */
-    final synchronized public SnmpValue duplicate() {
-        return (SnmpValue) clone() ;
-    }
-
-    /**
-     * Clones the <CODE>SnmpInt</CODE> object, making a copy of its data.
-     * @return The object clone.
-     */
-    final synchronized public Object clone() {
-        SnmpInt  newclone = null ;
-        try {
-            newclone = (SnmpInt) super.clone() ;
-            newclone.value = value ;
-        } catch (CloneNotSupportedException e) {
-            throw new InternalError() ; // vm bug.
-        }
-        return newclone ;
-    }
-
-    /**
-     * Returns a textual description of the type object.
-     * @return ASN.1 textual description.
-     */
-    public String getTypeName() {
-        return name ;
-    }
-
-    /**
-     * This method has been defined to allow the sub-classes
-     * of SnmpInt to perform their own control at intialization time.
-     */
-    boolean isInitValueValid(int v) {
-        if ((v < Integer.MIN_VALUE) || (v > Integer.MAX_VALUE)) {
-            return false;
-        }
-        return true;
-    }
-
-    /**
-     * This method has been defined to allow the sub-classes
-     * of SnmpInt to perform their own control at intialization time.
-     */
-    boolean isInitValueValid(long v) {
-        if ((v < Integer.MIN_VALUE) || (v > Integer.MAX_VALUE)) {
-            return false;
-        }
-        return true;
-    }
-
-    // VARIABLES
-    //----------
-    /**
-     * Name of the type.
-     */
-    final static String name = "Integer32" ;
-
-    /**
-     * This is where the value is stored. This long is signed.
-     * @serial
-     */
-    protected long value = 0 ;
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpIpAddress.java b/ojluni/src/main/java/com/sun/jmx/snmp/SnmpIpAddress.java
deleted file mode 100755
index bd7ce42..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpIpAddress.java
+++ /dev/null
@@ -1,217 +0,0 @@
-/*
- * Copyright (c) 1997, 2007, 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.jmx.snmp;
-
-
-
-
-/**
- * Represents an SNMP IpAddress.
- *
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- */
-
-public class SnmpIpAddress extends SnmpOid {
-    private static final long serialVersionUID = 7204629998270874474L;
-
-    // CONSTRUCTORS
-    //-------------
-    /**
-     * Constructs a new <CODE>SnmpIpAddress</CODE> from the specified bytes array.
-     * @param bytes The four bytes composing the address.
-     * @exception IllegalArgumentException The length of the array is not equal to four.
-     */
-    public SnmpIpAddress(byte[] bytes) throws IllegalArgumentException {
-        buildFromByteArray(bytes);
-    }
-
-    /**
-     * Constructs a new <CODE>SnmpIpAddress</CODE> from the specified long value.
-     * @param addr The initialization value.
-     */
-    public SnmpIpAddress(long addr) {
-        int address = (int)addr ;
-        byte[] ipaddr = new byte[4];
-
-        ipaddr[0] = (byte) ((address >>> 24) & 0xFF);
-        ipaddr[1] = (byte) ((address >>> 16) & 0xFF);
-        ipaddr[2] = (byte) ((address >>> 8) & 0xFF);
-        ipaddr[3] = (byte) (address & 0xFF);
-
-        buildFromByteArray(ipaddr);
-    }
-
-    /**
-     * Constructs a new <CODE>SnmpIpAddress</CODE> from a dot-formatted <CODE>String</CODE>.
-     * The dot-formatted <CODE>String</CODE> is formulated x.x.x.x .
-     * @param dotAddress The initialization value.
-     * @exception IllegalArgumentException The string does not correspond to an ip address.
-     */
-    public SnmpIpAddress(String dotAddress) throws IllegalArgumentException {
-        super(dotAddress) ;
-        if ((componentCount > 4) ||
-            (components[0] > 255) ||
-            (components[1] > 255) ||
-            (components[2] > 255) ||
-            (components[3] > 255)) {
-            throw new IllegalArgumentException(dotAddress) ;
-        }
-    }
-
-    /**
-     * Constructs a new <CODE>SnmpIpAddress</CODE> from four long values.
-     * @param b1 Byte 1.
-     * @param b2 Byte 2.
-     * @param b3 Byte 3.
-     * @param b4 Byte 4.
-     * @exception IllegalArgumentException A value is outside of [0-255].
-     */
-    public SnmpIpAddress(long b1, long b2, long b3, long b4) {
-        super(b1, b2, b3, b4) ;
-        if ((components[0] > 255) ||
-            (components[1] > 255) ||
-            (components[2] > 255) ||
-            (components[3] > 255)) {
-            throw new IllegalArgumentException() ;
-        }
-    }
-
-    // PUBLIC METHODS
-    //---------------
-    /**
-     * Converts the address value to its byte array form.
-     * @return The byte array representation of the value.
-     */
-    public byte[] byteValue() {
-        byte[] result = new byte[4] ;
-        result[0] = (byte)components[0] ;
-        result[1] = (byte)components[1] ;
-        result[2] = (byte)components[2] ;
-        result[3] = (byte)components[3] ;
-
-        return result ;
-    }
-
-    /**
-     * Converts the address to its <CODE>String</CODE> form.
-     * Same as <CODE>toString()</CODE>. Exists only to follow a naming scheme.
-     * @return The <CODE>String</CODE> representation of the value.
-     */
-    public String stringValue() {
-        return toString() ;
-    }
-
-    /**
-     * Extracts the ip address from an index OID and returns its
-     * value converted as an <CODE>SnmpOid</CODE>.
-     * @param index The index array.
-     * @param start The position in the index array.
-     * @return The OID representing the ip address value.
-     * @exception SnmpStatusException There is no ip address value
-     * available at the start position.
-     */
-    public static SnmpOid toOid(long[] index, int start) throws SnmpStatusException {
-        if (start + 4 <= index.length) {
-            try {
-                return new SnmpOid(
-                                   index[start],
-                                   index[start+1],
-                                   index[start+2],
-                                   index[start+3]) ;
-            }
-            catch(IllegalArgumentException e) {
-                throw new SnmpStatusException(SnmpStatusException.noSuchName) ;
-            }
-        }
-        else {
-            throw new SnmpStatusException(SnmpStatusException.noSuchName) ;
-        }
-    }
-
-    /**
-     * Scans an index OID, skips the address value and returns the position
-     * of the next value.
-     * @param index The index array.
-     * @param start The position in the index array.
-     * @return The position of the next value.
-     * @exception SnmpStatusException There is no address value
-     * available at the start position.
-     */
-    public static int nextOid(long[] index, int start) throws SnmpStatusException {
-        if (start + 4 <= index.length) {
-            return start + 4 ;
-        }
-        else {
-            throw new SnmpStatusException(SnmpStatusException.noSuchName) ;
-        }
-    }
-
-    /**
-     * Appends an <CODE>SnmpOid</CODE> representing an <CODE>SnmpIpAddress</CODE> to another OID.
-     * @param source An OID representing an <CODE>SnmpIpAddress</CODE> value.
-     * @param dest Where source should be appended.
-     */
-    public static void appendToOid(SnmpOid source, SnmpOid dest) {
-        if (source.getLength() != 4) {
-            throw new IllegalArgumentException() ;
-        }
-        dest.append(source) ;
-    }
-
-    /**
-     * Returns a textual description of the type object.
-     * @return ASN.1 textual description.
-     */
-    final public String getTypeName() {
-        return name ;
-    }
-
-    // PRIVATE METHODS
-    //----------------
-    /**
-     * Build Ip address from byte array.
-     */
-    private void buildFromByteArray(byte[] bytes) {
-        if (bytes.length != 4) {
-            throw new IllegalArgumentException() ;
-        }
-        components = new long[4] ;
-        componentCount= 4;
-        components[0] = (bytes[0] >= 0) ? bytes[0] : bytes[0] + 256 ;
-        components[1] = (bytes[1] >= 0) ? bytes[1] : bytes[1] + 256 ;
-        components[2] = (bytes[2] >= 0) ? bytes[2] : bytes[2] + 256 ;
-        components[3] = (bytes[3] >= 0) ? bytes[3] : bytes[3] + 256 ;
-    }
-
-    // VARIABLES
-    //----------
-    /**
-     * Name of the type.
-     */
-    final static String name = "IpAddress" ;
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpMessage.java b/ojluni/src/main/java/com/sun/jmx/snmp/SnmpMessage.java
deleted file mode 100755
index 32685602..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpMessage.java
+++ /dev/null
@@ -1,362 +0,0 @@
-/*
- * Copyright (c) 1998, 2007, 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.jmx.snmp;
-
-
-
-// java imports
-//
-import java.util.logging.Level;
-import java.util.Vector;
-import java.net.InetAddress;
-
-import static com.sun.jmx.defaults.JmxProperties.SNMP_LOGGER;
-
-/**
- * Is a partially decoded representation of an SNMP packet.
- * <P>
- * You will not normally need to use this class unless you decide to
- * implement your own {@link com.sun.jmx.snmp.SnmpPduFactory SnmpPduFactory} object.
- * <P>
- * The <CODE>SnmpMessage</CODE> class is directly mapped onto the
- * <CODE>Message</CODE> syntax defined in RFC1157 and RFC1902.
- * <BLOCKQUOTE>
- * <PRE>
- * Message ::= SEQUENCE {
- *    version       INTEGER { version(1) }, -- for SNMPv2
- *    community     OCTET STRING,           -- community name
- *    data          ANY                     -- an SNMPv2 PDU
- * }
- * </PRE>
- * </BLOCKQUOTE>
- *
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- * @see SnmpPduFactory
- * @see SnmpPduPacket
- *
- */
-
-public class SnmpMessage extends SnmpMsg implements SnmpDefinitions {
-    /**
-     * Community name.
-     */
-    public byte[] community ;
-
-    /**
-     * Encodes this message and puts the result in the specified byte array.
-     * For internal use only.
-     *
-     * @param outputBytes An array to receive the resulting encoding.
-     *
-     * @exception ArrayIndexOutOfBoundsException If the result does not fit
-     *                                           into the specified array.
-     */
-    public int encodeMessage(byte[] outputBytes) throws SnmpTooBigException {
-        int encodingLength = 0 ;
-        if (data == null)
-            throw new IllegalArgumentException("Data field is null") ;
-
-        //
-        // Reminder: BerEncoder does backward encoding !
-        //
-        try {
-            BerEncoder benc = new BerEncoder(outputBytes) ;
-            benc.openSequence() ;
-            benc.putAny(data, dataLength) ;
-            benc.putOctetString((community != null) ? community : new byte[0]) ;
-            benc.putInteger(version) ;
-            benc.closeSequence() ;
-            encodingLength = benc.trim() ;
-        }
-        catch(ArrayIndexOutOfBoundsException x) {
-            throw new SnmpTooBigException() ;
-        }
-
-        return encodingLength ;
-    }
-    /**
-     * Returns the associated request ID.
-     * @param inputBytes The flat message.
-     * @return The request ID.
-     *
-     * @since 1.5
-     */
-    public int getRequestId(byte[] inputBytes) throws SnmpStatusException {
-        int requestId = 0;
-        BerDecoder bdec = null;
-        BerDecoder bdec2 = null;
-        byte[] any = null;
-        try {
-            bdec = new BerDecoder(inputBytes);
-            bdec.openSequence();
-            bdec.fetchInteger();
-            bdec.fetchOctetString();
-            any = bdec.fetchAny();
-            bdec2 = new BerDecoder(any);
-            int type = bdec2.getTag();
-            bdec2.openSequence(type);
-            requestId = bdec2.fetchInteger();
-        }
-        catch(BerException x) {
-            throw new SnmpStatusException("Invalid encoding") ;
-        }
-        try {
-            bdec.closeSequence();
-        }
-        catch(BerException x) {
-        }
-        try {
-            bdec2.closeSequence();
-        }
-        catch(BerException x) {
-        }
-        return requestId;
-    }
-    /**
-     * Decodes the specified bytes and initializes this message.
-     * For internal use only.
-     *
-     * @param inputBytes The bytes to be decoded.
-     *
-     * @exception SnmpStatusException If the specified bytes are not a valid encoding.
-     */
-    public void decodeMessage(byte[] inputBytes, int byteCount)
-        throws SnmpStatusException {
-        try {
-            BerDecoder bdec = new BerDecoder(inputBytes/*, byteCount */) ; // FIXME
-            bdec.openSequence() ;
-            version = bdec.fetchInteger() ;
-            community = bdec.fetchOctetString() ;
-            data = bdec.fetchAny() ;
-            dataLength = data.length ;
-            bdec.closeSequence() ;
-        }
-        catch(BerException x) {
-            throw new SnmpStatusException("Invalid encoding") ;
-        }
-    }
-
-    /**
-     * Initializes this message with the specified <CODE>pdu</CODE>.
-     * <P>
-     * This method initializes the data field with an array of
-     * <CODE>maxDataLength</CODE> bytes. It encodes the <CODE>pdu</CODE>.
-     * The resulting encoding is stored in the data field
-     * and the length of the encoding is stored in <CODE>dataLength</CODE>.
-     * <p>
-     * If the encoding length exceeds <CODE>maxDataLength</CODE>,
-     * the method throws an exception.
-     *
-     * @param pdu The PDU to be encoded.
-     * @param maxDataLength The maximum length permitted for the data field.
-     *
-     * @exception SnmpStatusException If the specified <CODE>pdu</CODE> is not valid.
-     * @exception SnmpTooBigException If the resulting encoding does not fit
-     * into <CODE>maxDataLength</CODE> bytes.
-     * @exception ArrayIndexOutOfBoundsException If the encoding exceeds <CODE>maxDataLength</CODE>.
-     *
-     * @since 1.5
-     */
-    public void encodeSnmpPdu(SnmpPdu pdu, int maxDataLength)
-        throws SnmpStatusException, SnmpTooBigException {
-        //
-        // The easy work
-        //
-        SnmpPduPacket pdupacket = (SnmpPduPacket) pdu;
-        version = pdupacket.version ;
-        community = pdupacket.community ;
-        address = pdupacket.address ;
-        port = pdupacket.port ;
-
-        //
-        // Allocate the array to receive the encoding.
-        //
-        data = new byte[maxDataLength] ;
-
-        //
-        // Encode the pdupacket
-        // Reminder: BerEncoder does backward encoding !
-        //
-
-        try {
-            BerEncoder benc = new BerEncoder(data) ;
-            benc.openSequence() ;
-            encodeVarBindList(benc, pdupacket.varBindList) ;
-
-            switch(pdupacket.type) {
-
-            case pduGetRequestPdu :
-            case pduGetNextRequestPdu :
-            case pduInformRequestPdu :
-            case pduGetResponsePdu :
-            case pduSetRequestPdu :
-            case pduV2TrapPdu :
-            case pduReportPdu :
-                SnmpPduRequest reqPdu = (SnmpPduRequest)pdupacket ;
-                benc.putInteger(reqPdu.errorIndex) ;
-                benc.putInteger(reqPdu.errorStatus) ;
-                benc.putInteger(reqPdu.requestId) ;
-                break ;
-
-            case pduGetBulkRequestPdu :
-                SnmpPduBulk bulkPdu = (SnmpPduBulk)pdupacket ;
-                benc.putInteger(bulkPdu.maxRepetitions) ;
-                benc.putInteger(bulkPdu.nonRepeaters) ;
-                benc.putInteger(bulkPdu.requestId) ;
-                break ;
-
-            case pduV1TrapPdu :
-                SnmpPduTrap trapPdu = (SnmpPduTrap)pdupacket ;
-                benc.putInteger(trapPdu.timeStamp, SnmpValue.TimeticksTag) ;
-                benc.putInteger(trapPdu.specificTrap) ;
-                benc.putInteger(trapPdu.genericTrap) ;
-                if(trapPdu.agentAddr != null)
-                    benc.putOctetString(trapPdu.agentAddr.byteValue(), SnmpValue.IpAddressTag) ;
-                else
-                    benc.putOctetString(new byte[0], SnmpValue.IpAddressTag);
-                benc.putOid(trapPdu.enterprise.longValue()) ;
-                break ;
-
-            default:
-                throw new SnmpStatusException("Invalid pdu type " + String.valueOf(pdupacket.type)) ;
-            }
-            benc.closeSequence(pdupacket.type) ;
-            dataLength = benc.trim() ;
-        }
-        catch(ArrayIndexOutOfBoundsException x) {
-            throw new SnmpTooBigException() ;
-        }
-    }
-    /**
-     * Gets the PDU encoded in this message.
-     * <P>
-     * This method decodes the data field and returns the resulting PDU.
-     *
-     * @return The resulting PDU.
-     * @exception SnmpStatusException If the encoding is not valid.
-     *
-     * @since 1.5
-     */
-    public SnmpPdu decodeSnmpPdu()
-        throws SnmpStatusException {
-        //
-        // Decode the pdu
-        //
-        SnmpPduPacket pdu = null ;
-        BerDecoder bdec = new BerDecoder(data) ;
-        try {
-            int type = bdec.getTag() ;
-            bdec.openSequence(type) ;
-            switch(type) {
-
-            case pduGetRequestPdu :
-            case pduGetNextRequestPdu :
-            case pduInformRequestPdu :
-            case pduGetResponsePdu :
-            case pduSetRequestPdu :
-            case pduV2TrapPdu :
-            case pduReportPdu :
-                SnmpPduRequest reqPdu = new SnmpPduRequest() ;
-                reqPdu.requestId = bdec.fetchInteger() ;
-                reqPdu.errorStatus = bdec.fetchInteger() ;
-                reqPdu.errorIndex = bdec.fetchInteger() ;
-                pdu = reqPdu ;
-                break ;
-
-            case pduGetBulkRequestPdu :
-                SnmpPduBulk bulkPdu = new SnmpPduBulk() ;
-                bulkPdu.requestId = bdec.fetchInteger() ;
-                bulkPdu.nonRepeaters = bdec.fetchInteger() ;
-                bulkPdu.maxRepetitions = bdec.fetchInteger() ;
-                pdu = bulkPdu ;
-                break ;
-
-            case pduV1TrapPdu :
-                SnmpPduTrap trapPdu = new SnmpPduTrap() ;
-                trapPdu.enterprise = new SnmpOid(bdec.fetchOid()) ;
-                byte []b = bdec.fetchOctetString(SnmpValue.IpAddressTag);
-                if(b.length != 0)
-                    trapPdu.agentAddr = new SnmpIpAddress(b) ;
-                else
-                    trapPdu.agentAddr = null;
-                trapPdu.genericTrap = bdec.fetchInteger() ;
-                trapPdu.specificTrap = bdec.fetchInteger() ;
-                trapPdu.timeStamp = bdec.fetchInteger(SnmpValue.TimeticksTag) ;
-                pdu = trapPdu ;
-                break ;
-
-            default:
-                throw new SnmpStatusException(snmpRspWrongEncoding) ;
-            }
-            pdu.type = type ;
-            pdu.varBindList = decodeVarBindList(bdec) ;
-            bdec.closeSequence() ;
-        } catch(BerException e) {
-            if (SNMP_LOGGER.isLoggable(Level.FINEST)) {
-                SNMP_LOGGER.logp(Level.FINEST, SnmpMessage.class.getName(),
-                        "decodeSnmpPdu", "BerException", e);
-            }
-            throw new SnmpStatusException(snmpRspWrongEncoding);
-        } catch(IllegalArgumentException e) {
-            // bug id 4654066
-            if (SNMP_LOGGER.isLoggable(Level.FINEST)) {
-                SNMP_LOGGER.logp(Level.FINEST, SnmpMessage.class.getName(),
-                        "decodeSnmpPdu", "IllegalArgumentException", e);
-            }
-            throw new SnmpStatusException(snmpRspWrongEncoding);
-        }
-
-        //
-        // The easy work
-        //
-        pdu.version = version ;
-        pdu.community = community ;
-        pdu.address = address ;
-        pdu.port = port ;
-
-        return pdu;
-    }
-    /**
-     * Dumps this message in a string.
-     *
-     * @return The string containing the dump.
-     */
-    public String printMessage() {
-        StringBuffer sb = new StringBuffer();
-        if (community == null) {
-            sb.append("Community: null") ;
-        }
-        else {
-            sb.append("Community: {\n") ;
-            sb.append(dumpHexBuffer(community, 0, community.length)) ;
-            sb.append("\n}\n") ;
-        }
-        return sb.append(super.printMessage()).toString();
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpMsg.java b/ojluni/src/main/java/com/sun/jmx/snmp/SnmpMsg.java
deleted file mode 100755
index d72dc82..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpMsg.java
+++ /dev/null
@@ -1,476 +0,0 @@
-/*
- * Copyright (c) 2001, 2006, 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.jmx.snmp;
-
-import com.sun.jmx.snmp.SnmpSecurityParameters;
-// java imports
-//
-import java.util.Vector;
-import java.net.InetAddress;
-
-
-import com.sun.jmx.snmp.SnmpStatusException;
-/**
- * A partially decoded representation of an SNMP packet. It contains
- * the information contained in any SNMP message (SNMPv1, SNMPv2 or
- * SNMPv3).
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- * @since 1.5
- */
-public abstract class SnmpMsg implements SnmpDefinitions {
-    /**
-     * The protocol version.
-     * <P><CODE>decodeMessage</CODE> and <CODE>encodeMessage</CODE> do not
-     * perform any check on this value.
-     * <BR><CODE>decodeSnmpPdu</CODE> and <CODE>encodeSnmpPdu</CODE> only
-     * accept  the values 0 (for SNMPv1), 1 (for SNMPv2) and 3 (for SNMPv3).
-     */
-    public int version = 0;
-
-    /**
-     * Encoding of the PDU.
-     * <P>This is usually the BER encoding of the PDU's syntax
-     * defined in RFC1157 and RFC1902. However, this can be authenticated
-     * or encrypted data (but you need to implemented your own
-     * <CODE>SnmpPduFactory</CODE> class).
-     */
-    public byte[] data = null;
-
-    /**
-     * Number of useful bytes in the <CODE>data</CODE> field.
-     */
-    public int dataLength = 0;
-
-    /**
-     * Source or destination address.
-     * <BR>For an incoming message it's the source.
-     * For an outgoing message it's the destination.
-     */
-    public InetAddress address = null;
-
-    /**
-     * Source or destination port.
-     * <BR>For an incoming message it's the source.
-     * For an outgoing message it's the destination.
-     */
-    public int port = 0;
-    /**
-     * Security parameters. Contain informations according to Security Model (Usm, community string based, ...).
-     */
-    public SnmpSecurityParameters securityParameters = null;
-    /**
-     * Returns the encoded SNMP version present in the passed byte array.
-     * @param data The unmarshalled SNMP message.
-     * @return The SNMP version (0, 1 or 3).
-     */
-    public static int getProtocolVersion(byte[] data)
-        throws SnmpStatusException {
-        int version = 0;
-        BerDecoder bdec = null;
-        try {
-            bdec = new BerDecoder(data);
-            bdec.openSequence();
-            version = bdec.fetchInteger();
-        }
-        catch(BerException x) {
-            throw new SnmpStatusException("Invalid encoding") ;
-        }
-        try {
-            bdec.closeSequence();
-        }
-        catch(BerException x) {
-        }
-        return version;
-    }
-
-    /**
-     * Returns the associated request ID.
-     * @param data The flat message.
-     * @return The request ID.
-     */
-    public abstract int getRequestId(byte[] data) throws SnmpStatusException;
-
-    /**
-     * Encodes this message and puts the result in the specified byte array.
-     * For internal use only.
-     *
-     * @param outputBytes An array to receive the resulting encoding.
-     *
-     * @exception ArrayIndexOutOfBoundsException If the result does not fit
-     *                                           into the specified array.
-     */
-    public abstract int encodeMessage(byte[] outputBytes)
-        throws SnmpTooBigException;
-
-     /**
-     * Decodes the specified bytes and initializes this message.
-     * For internal use only.
-     *
-     * @param inputBytes The bytes to be decoded.
-     *
-     * @exception SnmpStatusException If the specified bytes are not a valid encoding.
-     */
-    public abstract void decodeMessage(byte[] inputBytes, int byteCount)
-        throws SnmpStatusException;
-
-     /**
-     * Initializes this message with the specified <CODE>pdu</CODE>.
-     * <P>
-     * This method initializes the data field with an array of
-     * <CODE>maxDataLength</CODE> bytes. It encodes the <CODE>pdu</CODE>.
-     * The resulting encoding is stored in the data field
-     * and the length of the encoding is stored in <CODE>dataLength</CODE>.
-     * <p>
-     * If the encoding length exceeds <CODE>maxDataLength</CODE>,
-     * the method throws an exception.
-     *
-     * @param pdu The PDU to be encoded.
-     * @param maxDataLength The maximum length permitted for the data field.
-     *
-     * @exception SnmpStatusException If the specified <CODE>pdu</CODE> is not valid.
-     * @exception SnmpTooBigException If the resulting encoding does not fit
-     * into <CODE>maxDataLength</CODE> bytes.
-     * @exception ArrayIndexOutOfBoundsException If the encoding exceeds <CODE>maxDataLength</CODE>.
-     */
-    public abstract void encodeSnmpPdu(SnmpPdu pdu, int maxDataLength)
-        throws SnmpStatusException, SnmpTooBigException;
-
-
-    /**
-     * Gets the PDU encoded in this message.
-     * <P>
-     * This method decodes the data field and returns the resulting PDU.
-     *
-     * @return The resulting PDU.
-     * @exception SnmpStatusException If the encoding is not valid.
-     */
-    public abstract SnmpPdu decodeSnmpPdu()
-        throws SnmpStatusException;
-
-    /**
-     * Dumps the content of a byte buffer using hexadecimal form.
-     *
-     * @param b The buffer to dump.
-     * @param offset The position of the first byte to be dumped.
-     * @param len The number of bytes to be dumped starting from offset.
-     *
-     * @return The string containing the dump.
-     */
-    public static String dumpHexBuffer(byte [] b, int offset, int len) {
-        StringBuffer buf = new StringBuffer(len << 1) ;
-        int k = 1 ;
-        int flen = offset + len ;
-
-        for (int i = offset; i < flen ; i++) {
-            int j = b[i] & 0xFF ;
-            buf.append(Character.forDigit((j >>> 4) , 16)) ;
-            buf.append(Character.forDigit((j & 0x0F), 16)) ;
-            k++ ;
-            if (k%16 == 0) {
-                buf.append('\n') ;
-                k = 1 ;
-            } else
-                buf.append(' ') ;
-        }
-        return buf.toString() ;
-    }
-
-    /**
-     * Dumps this message in a string.
-     *
-     * @return The string containing the dump.
-     */
-    public String printMessage() {
-        StringBuffer sb = new StringBuffer() ;
-        sb.append("Version: ") ;
-        sb.append(version) ;
-        sb.append("\n") ;
-        if (data == null) {
-            sb.append("Data: null") ;
-        }
-        else {
-            sb.append("Data: {\n") ;
-            sb.append(dumpHexBuffer(data, 0, dataLength)) ;
-            sb.append("\n}\n") ;
-        }
-
-        return sb.toString() ;
-    }
-
-    /**
-     * For SNMP Runtime private use only.
-     */
-    public void encodeVarBindList(BerEncoder benc,
-                                  SnmpVarBind[] varBindList)
-        throws SnmpStatusException, SnmpTooBigException {
-        //
-        // Remember: the encoder does backward encoding
-        //
-        int encodedVarBindCount = 0 ;
-        try {
-            benc.openSequence() ;
-            if (varBindList != null) {
-                for (int i = varBindList.length - 1 ; i >= 0 ; i--) {
-                    SnmpVarBind bind = varBindList[i] ;
-                    if (bind != null) {
-                        benc.openSequence() ;
-                        encodeVarBindValue(benc, bind.value) ;
-                        benc.putOid(bind.oid.longValue()) ;
-                        benc.closeSequence() ;
-                        encodedVarBindCount++ ;
-                    }
-                }
-            }
-            benc.closeSequence() ;
-        }
-        catch(ArrayIndexOutOfBoundsException x) {
-            throw new SnmpTooBigException(encodedVarBindCount) ;
-        }
-    }
-
-    /**
-     * For SNMP Runtime private use only.
-     */
-    void encodeVarBindValue(BerEncoder benc,
-                            SnmpValue v)throws SnmpStatusException {
-        if (v == null) {
-            benc.putNull() ;
-        }
-        else if (v instanceof SnmpIpAddress) {
-            benc.putOctetString(((SnmpIpAddress)v).byteValue(), SnmpValue.IpAddressTag) ;
-        }
-        else if (v instanceof SnmpCounter) {
-            benc.putInteger(((SnmpCounter)v).longValue(), SnmpValue.CounterTag) ;
-        }
-        else if (v instanceof SnmpGauge) {
-            benc.putInteger(((SnmpGauge)v).longValue(), SnmpValue.GaugeTag) ;
-        }
-        else if (v instanceof SnmpTimeticks) {
-            benc.putInteger(((SnmpTimeticks)v).longValue(), SnmpValue.TimeticksTag) ;
-        }
-        else if (v instanceof SnmpOpaque) {
-            benc.putOctetString(((SnmpOpaque)v).byteValue(), SnmpValue.OpaqueTag) ;
-        }
-        else if (v instanceof SnmpInt) {
-            benc.putInteger(((SnmpInt)v).intValue()) ;
-        }
-        else if (v instanceof SnmpString) {
-            benc.putOctetString(((SnmpString)v).byteValue()) ;
-        }
-        else if (v instanceof SnmpOid) {
-            benc.putOid(((SnmpOid)v).longValue()) ;
-        }
-        else if (v instanceof SnmpCounter64) {
-            if (version == snmpVersionOne) {
-                throw new SnmpStatusException("Invalid value for SNMP v1 : " + v) ;
-            }
-            benc.putInteger(((SnmpCounter64)v).longValue(), SnmpValue.Counter64Tag) ;
-        }
-        else if (v instanceof SnmpNull) {
-            int tag = ((SnmpNull)v).getTag() ;
-            if ((version == snmpVersionOne) && (tag != SnmpValue.NullTag)) {
-                throw new SnmpStatusException("Invalid value for SNMP v1 : " + v) ;
-            }
-            if ((version == snmpVersionTwo) &&
-                (tag != SnmpValue.NullTag) &&
-                (tag != SnmpVarBind.errNoSuchObjectTag) &&
-                (tag != SnmpVarBind.errNoSuchInstanceTag) &&
-                (tag != SnmpVarBind.errEndOfMibViewTag)) {
-                throw new SnmpStatusException("Invalid value " + v) ;
-            }
-            benc.putNull(tag) ;
-        }
-        else {
-            throw new SnmpStatusException("Invalid value " + v) ;
-        }
-
-    }
-
-
-    /**
-     * For SNMP Runtime private use only.
-     */
-    public SnmpVarBind[] decodeVarBindList(BerDecoder bdec)
-        throws BerException {
-            bdec.openSequence() ;
-            Vector<SnmpVarBind> tmp = new Vector<SnmpVarBind>() ;
-            while (bdec.cannotCloseSequence()) {
-                SnmpVarBind bind = new SnmpVarBind() ;
-                bdec.openSequence() ;
-                bind.oid = new SnmpOid(bdec.fetchOid()) ;
-                bind.setSnmpValue(decodeVarBindValue(bdec)) ;
-                bdec.closeSequence() ;
-                tmp.addElement(bind) ;
-            }
-            bdec.closeSequence() ;
-            SnmpVarBind[] varBindList= new SnmpVarBind[tmp.size()] ;
-            tmp.copyInto(varBindList);
-            return varBindList ;
-        }
-
-
-    /**
-     * For SNMP Runtime private use only.
-     */
-    SnmpValue decodeVarBindValue(BerDecoder bdec)
-        throws BerException {
-        SnmpValue result = null ;
-        int tag = bdec.getTag() ;
-
-        // bugId 4641696 : RuntimeExceptions must be transformed in
-        //                 BerException.
-        switch(tag) {
-
-            //
-            // Simple syntax
-            //
-        case BerDecoder.IntegerTag :
-            try {
-                result = new SnmpInt(bdec.fetchInteger()) ;
-            } catch(RuntimeException r) {
-                throw new BerException();
-                // BerException("Can't build SnmpInt from decoded value.");
-            }
-            break ;
-        case BerDecoder.OctetStringTag :
-            try {
-                result = new SnmpString(bdec.fetchOctetString()) ;
-            } catch(RuntimeException r) {
-                throw new BerException();
-                // BerException("Can't build SnmpString from decoded value.");
-            }
-            break ;
-        case BerDecoder.OidTag :
-            try {
-                result = new SnmpOid(bdec.fetchOid()) ;
-            } catch(RuntimeException r) {
-                throw new BerException();
-                // BerException("Can't build SnmpOid from decoded value.");
-            }
-            break ;
-        case BerDecoder.NullTag :
-            bdec.fetchNull() ;
-            try {
-                result = new SnmpNull() ;
-            } catch(RuntimeException r) {
-                throw new BerException();
-                // BerException("Can't build SnmpNull from decoded value.");
-            }
-            break ;
-
-            //
-            // Application syntax
-            //
-        case SnmpValue.IpAddressTag :
-            try {
-                result = new SnmpIpAddress(bdec.fetchOctetString(tag)) ;
-            } catch (RuntimeException r) {
-                throw new  BerException();
-              // BerException("Can't build SnmpIpAddress from decoded value.");
-            }
-            break ;
-        case SnmpValue.CounterTag :
-            try {
-                result = new SnmpCounter(bdec.fetchIntegerAsLong(tag)) ;
-            } catch(RuntimeException r) {
-                throw new BerException();
-                // BerException("Can't build SnmpCounter from decoded value.");
-            }
-            break ;
-        case SnmpValue.GaugeTag :
-            try {
-                result = new SnmpGauge(bdec.fetchIntegerAsLong(tag)) ;
-            } catch(RuntimeException r) {
-                throw new BerException();
-                // BerException("Can't build SnmpGauge from decoded value.");
-            }
-            break ;
-        case SnmpValue.TimeticksTag :
-            try {
-                result = new SnmpTimeticks(bdec.fetchIntegerAsLong(tag)) ;
-            } catch(RuntimeException r) {
-                throw new BerException();
-             // BerException("Can't build SnmpTimeticks from decoded value.");
-            }
-            break ;
-        case SnmpValue.OpaqueTag :
-            try {
-                result = new SnmpOpaque(bdec.fetchOctetString(tag)) ;
-            } catch(RuntimeException r) {
-                throw new BerException();
-                // BerException("Can't build SnmpOpaque from decoded value.");
-            }
-            break ;
-
-            //
-            // V2 syntaxes
-            //
-        case SnmpValue.Counter64Tag :
-            if (version == snmpVersionOne) {
-                throw new BerException(BerException.BAD_VERSION) ;
-            }
-            try {
-                result = new SnmpCounter64(bdec.fetchIntegerAsLong(tag)) ;
-            } catch(RuntimeException r) {
-                throw new BerException();
-             // BerException("Can't build SnmpCounter64 from decoded value.");
-            }
-            break ;
-
-        case SnmpVarBind.errNoSuchObjectTag :
-            if (version == snmpVersionOne) {
-                throw new BerException(BerException.BAD_VERSION) ;
-            }
-            bdec.fetchNull(tag) ;
-            result = SnmpVarBind.noSuchObject ;
-            break ;
-
-        case SnmpVarBind.errNoSuchInstanceTag :
-            if (version == snmpVersionOne) {
-                throw new BerException(BerException.BAD_VERSION) ;
-            }
-            bdec.fetchNull(tag) ;
-            result = SnmpVarBind.noSuchInstance ;
-            break ;
-
-        case SnmpVarBind.errEndOfMibViewTag :
-            if (version == snmpVersionOne) {
-                throw new BerException(BerException.BAD_VERSION) ;
-            }
-            bdec.fetchNull(tag) ;
-            result = SnmpVarBind.endOfMibView ;
-            break ;
-
-        default:
-            throw new BerException() ;
-
-        }
-
-        return result ;
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpNull.java b/ojluni/src/main/java/com/sun/jmx/snmp/SnmpNull.java
deleted file mode 100755
index 18fe8b7..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpNull.java
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
- * Copyright (c) 1997, 2006, 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.jmx.snmp;
-
-
-
-/**
- * Represents an SNMP null value.
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- */
-
-public class SnmpNull extends SnmpValue {
-    private static final long serialVersionUID = 1783782515994279177L;
-
-    // CONSTRUCTORS
-    //-------------
-    /**
-     * Constructs a new <CODE>SnmpNull</CODE>.
-     */
-    public SnmpNull() {
-        tag = NullTag ;
-    }
-
-    /**
-     * Constructs a new <CODE>SnmpNull</CODE>.
-     * <BR>For mibgen private use only.
-     */
-    public SnmpNull(String dummy) {
-        this();
-    }
-
-    /**
-     * Constructs a new <CODE>SnmpNull</CODE> from the specified tag value.
-     * @param t The initialization value.
-     */
-    public SnmpNull(int t) {
-        tag = t ;
-    }
-
-    // PUBLIC METHODS
-    //---------------
-    /**
-     * Returns the tag value of this <CODE>SnmpNull</CODE>.
-     * @return The value.
-     */
-    public int getTag() {
-        return tag ;
-    }
-
-    /**
-     * Converts the <CODE>NULL</CODE> value to its ASN.1 <CODE>String</CODE> form.
-     * When the tag is not the universal one, it is preprended
-     * to the <CODE>String</CODE> form.
-     * @return The <CODE>String</CODE> representation of the value.
-     */
-    public String toString() {
-        String result = "" ;
-        if (tag != 5) {
-            result += "[" + tag + "] " ;
-        }
-        result += "NULL" ;
-        switch(tag) {
-        case errNoSuchObjectTag :
-            result += " (noSuchObject)" ;
-            break ;
-
-        case errNoSuchInstanceTag :
-            result += " (noSuchInstance)" ;
-            break ;
-
-        case errEndOfMibViewTag :
-            result += " (endOfMibView)" ;
-            break ;
-        }
-        return result ;
-    }
-
-    /**
-     * Converts the <CODE>NULL</CODE> value to its <CODE>SnmpOid</CODE> form.
-     * Normally, a <CODE>NULL</CODE> value cannot be used as an index value,
-     * this method triggers an exception.
-     * @return The OID representation of the value.
-     */
-    public SnmpOid toOid() {
-        throw new IllegalArgumentException() ;
-    }
-
-    /**
-     * Performs a clone action. This provides a workaround for the
-     * <CODE>SnmpValue</CODE> interface.
-     * @return The SnmpValue clone.
-     */
-    final synchronized public SnmpValue duplicate() {
-        return (SnmpValue) clone() ;
-    }
-
-    /**
-     * Clones the <CODE>SnmpNull</CODE> object, making a copy of its data.
-     * @return The object clone.
-     */
-    final synchronized public Object clone() {
-        SnmpNull  newclone = null ;
-        try {
-            newclone = (SnmpNull) super.clone() ;
-            newclone.tag = tag ;
-        } catch (CloneNotSupportedException e) {
-            throw new InternalError() ; // vm bug.
-        }
-        return newclone ;
-    }
-
-    /**
-     * Returns a textual description of the type object.
-     * @return ASN.1 textual description.
-     */
-    final public String getTypeName() {
-        return name ;
-    }
-
-    /**
-     * Checks if this <CODE>SnmpNull</CODE> object corresponds to a <CODE>noSuchObject</CODE> value.
-     * @return <CODE>true</CODE> if the tag equals {@link com.sun.jmx.snmp.SnmpDataTypeEnums#errNoSuchObjectTag},
-     * <CODE>false</CODE> otherwise.
-     */
-    public boolean isNoSuchObjectValue() {
-        return (tag == SnmpDataTypeEnums.errNoSuchObjectTag);
-    }
-
-    /**
-     * Checks if this <CODE>SnmpNull</CODE> object corresponds to a <CODE>noSuchInstance</CODE> value.
-     * @return <CODE>true</CODE> if the tag equals {@link com.sun.jmx.snmp.SnmpDataTypeEnums#errNoSuchInstanceTag},
-     * <CODE>false</CODE> otherwise.
-     */
-    public boolean isNoSuchInstanceValue() {
-        return (tag == SnmpDataTypeEnums.errNoSuchInstanceTag);
-    }
-
-    /**
-     * Checks if this <CODE>SnmpNull</CODE> object corresponds to an <CODE>endOfMibView</CODE> value.
-     * @return <CODE>true</CODE> if the tag equals {@link com.sun.jmx.snmp.SnmpDataTypeEnums#errEndOfMibViewTag},
-     * <CODE>false</CODE> otherwise.
-     */
-    public boolean isEndOfMibViewValue() {
-        return (tag == SnmpDataTypeEnums.errEndOfMibViewTag);
-    }
-
-    // VARIABLES
-    //----------
-    /**
-     * Name of the type.
-     */
-    final static String name = "Null" ;
-
-    /**
-     * This is the tag of the NULL value. By default, it is the universal tag value.
-     */
-    private int tag = 5 ;
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpOpaque.java b/ojluni/src/main/java/com/sun/jmx/snmp/SnmpOpaque.java
deleted file mode 100755
index afe948e..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpOpaque.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Copyright (c) 1997, 2007, 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.jmx.snmp;
-
-
-
-/**
- * Is used to represent an SNMP value.
- * The <CODE>Opaque</CODE> type is defined in RFC 1155.
- *
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- */
-
-public class SnmpOpaque extends SnmpString {
-    private static final long serialVersionUID = 380952213936036664L;
-
-    // CONSTRUCTORS
-    //-------------
-    /**
-     * Constructs a new <CODE>SnmpOpaque</CODE> from the specified bytes array.
-     * @param v The bytes composing the opaque value.
-     */
-    public SnmpOpaque(byte[] v) {
-        super(v) ;
-    }
-
-    /**
-     * Constructs a new <CODE>SnmpOpaque</CODE> with the specified <CODE>Bytes</CODE> array.
-     * @param v The <CODE>Bytes</CODE> composing the opaque value.
-     */
-    public SnmpOpaque(Byte[] v) {
-        super(v) ;
-    }
-
-    /**
-     * Constructs a new <CODE>SnmpOpaque</CODE> from the specified <CODE>String</CODE> value.
-     * @param v The initialization value.
-     */
-    public SnmpOpaque(String v) {
-        super(v) ;
-    }
-
-    // PUBLIC METHODS
-    //---------------
-    /**
-     * Converts the opaque to its <CODE>String</CODE> form, that is, a string of
-     * bytes expressed in hexadecimal form.
-     * @return The <CODE>String</CODE> representation of the value.
-     */
-    public String toString() {
-        StringBuffer result = new StringBuffer() ;
-        for (int i = 0 ; i < value.length ; i++) {
-            byte b = value[i] ;
-            int n = (b >= 0) ? b : b + 256 ;
-            result.append(Character.forDigit(n / 16, 16)) ;
-            result.append(Character.forDigit(n % 16, 16)) ;
-        }
-        return result.toString() ;
-    }
-
-    /**
-     * Returns a textual description of the type object.
-     * @return ASN.1 textual description.
-     */
-    final public String getTypeName() {
-        return name ;
-    }
-
-    // VARIABLES
-    //----------
-    /**
-     * Name of the type.
-     */
-    final static String name = "Opaque" ;
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpParams.java b/ojluni/src/main/java/com/sun/jmx/snmp/SnmpParams.java
deleted file mode 100755
index c61a69b..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpParams.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright (c) 2001, 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.
- */
-package com.sun.jmx.snmp;
-
-import com.sun.jmx.snmp.SnmpDefinitions;
-
-/**
- * This class is the base class of all parameters that are used when making SNMP requests to an <CODE>SnmpPeer</CODE>.
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- * @since 1.5
- */
-public abstract class SnmpParams implements SnmpDefinitions {
-    private int protocolVersion = snmpVersionOne;
-    SnmpParams(int version) {
-        protocolVersion = version;
-    }
-
-    SnmpParams() {}
-    /**
-     * Checks whether parameters are in place for an SNMP <CODE>set</CODE> operation.
-     * @return <CODE>true</CODE> if parameters are in place, <CODE>false</CODE> otherwise.
-     */
-    public abstract boolean allowSnmpSets();
-    /**
-     * Returns the version of the protocol to use.
-     * The returned value is:
-     * <UL>
-     * <LI>{@link com.sun.jmx.snmp.SnmpDefinitions#snmpVersionOne snmpVersionOne} if the protocol is SNMPv1
-     * <LI>{@link com.sun.jmx.snmp.SnmpDefinitions#snmpVersionTwo snmpVersionTwo} if the protocol is SNMPv2
-     * <LI>{@link com.sun.jmx.snmp.SnmpDefinitions#snmpVersionThree snmpVersionThree} if the protocol is SNMPv3
-     * </UL>
-     * @return The version of the protocol to use.
-     */
-    public int getProtocolVersion() {
-        return protocolVersion ;
-    }
-
-    /**
-     * Sets the version of the protocol to be used.
-     * The version should be identified using the definitions
-     * contained in
-     * {@link com.sun.jmx.snmp.SnmpDefinitions SnmpDefinitions}.
-     * <BR>For instance if you wish to use SNMPv2, you can call the method as follows:
-     * <BLOCKQUOTE><PRE>
-     * setProtocolVersion(SnmpDefinitions.snmpVersionTwo);
-     * </PRE></BLOCKQUOTE>
-     * @param protocolversion The version of the protocol to be used.
-     */
-
-    public void setProtocolVersion(int protocolversion) {
-        this.protocolVersion = protocolversion ;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpPdu.java b/ojluni/src/main/java/com/sun/jmx/snmp/SnmpPdu.java
deleted file mode 100755
index 512fb4e..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpPdu.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * Copyright (c) 2001, 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.
- */
-package com.sun.jmx.snmp;
-
-
-import java.io.Serializable;
-import java.net.InetAddress;
-/**
- * Is the fully decoded representation of an SNMP packet.
- * <P>
- * Classes are derived from <CODE>SnmpPdu</CODE> to
- * represent the different forms of SNMP packets
- * ({@link com.sun.jmx.snmp.SnmpPduPacket SnmpPduPacket},
- * {@link com.sun.jmx.snmp.SnmpScopedPduPacket SnmpScopedPduPacket})
- * <BR>The <CODE>SnmpPdu</CODE> class defines the attributes
- * common to every form of SNMP packets.
- *
- *
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- * @see SnmpMessage
- * @see SnmpPduFactory
- *
- * @since 1.5
- */
-public abstract class SnmpPdu implements SnmpDefinitions, Serializable {
-
-    /**
-     * PDU type. Types are defined in
-     * {@link com.sun.jmx.snmp.SnmpDefinitions SnmpDefinitions}.
-     * @serial
-     */
-    public int type=0 ;
-
-    /**
-     * Protocol version. Versions are defined in
-     * {@link com.sun.jmx.snmp.SnmpDefinitions SnmpDefinitions}.
-     * @serial
-     */
-    public int version=0 ;
-
-    /**
-     * List of variables.
-     * @serial
-     */
-    public SnmpVarBind[] varBindList ;
-
-
-    /**
-     * Request identifier.
-     * Note that this field is not used by <CODE>SnmpPduTrap</CODE>.
-     * @serial
-     */
-    public int requestId=0 ;
-
-    /**
-     * Source or destination address.
-     * <P>For an incoming PDU it's the source.
-     * <BR>For an outgoing PDU it's the destination.
-     * @serial
-     */
-    public InetAddress address ;
-
-    /**
-     * Source or destination port.
-     * <P>For an incoming PDU it's the source.
-     * <BR>For an outgoing PDU it's the destination.
-     * @serial
-     */
-    public int port=0 ;
-
-    /**
-     * Returns the <CODE>String</CODE> representation of a PDU type.
-     * For instance, if the PDU type is <CODE>SnmpDefinitions.pduGetRequestPdu</CODE>,
-     * the method will return "SnmpGet".
-     * @param cmd The integer representation of the PDU type.
-     * @return The <CODE>String</CODE> representation of the PDU type.
-     */
-    public static String pduTypeToString(int cmd) {
-        switch (cmd) {
-        case pduGetRequestPdu :
-            return "SnmpGet" ;
-        case pduGetNextRequestPdu :
-            return "SnmpGetNext" ;
-        case pduWalkRequest :
-            return "SnmpWalk(*)" ;
-        case pduSetRequestPdu :
-            return "SnmpSet" ;
-        case pduGetResponsePdu :
-            return "SnmpResponse" ;
-        case pduV1TrapPdu :
-            return "SnmpV1Trap" ;
-        case pduV2TrapPdu :
-            return "SnmpV2Trap" ;
-        case pduGetBulkRequestPdu :
-            return "SnmpGetBulk" ;
-        case pduInformRequestPdu :
-            return "SnmpInform" ;
-        }
-        return "Unknown Command = " + cmd ;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpPduBulk.java b/ojluni/src/main/java/com/sun/jmx/snmp/SnmpPduBulk.java
deleted file mode 100755
index f4e810d..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpPduBulk.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * Copyright (c) 1998, 2006, 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.jmx.snmp;
-
-
-
-/**
- * Represents a <CODE>get-bulk</CODE> PDU as defined in RFC 1448.
- * <P>
- * You will not usually need to use this class, except if you
- * decide to implement your own
- * {@link com.sun.jmx.snmp.SnmpPduFactory SnmpPduFactory} object.
- * <P>
- * The <CODE>SnmpPduBulk</CODE> extends {@link com.sun.jmx.snmp.SnmpPduPacket SnmpPduPacket}
- * and defines attributes specific to the <CODE>get-bulk</CODE> PDU (see RFC 1448).
- *
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- */
-
-public class SnmpPduBulk extends SnmpPduPacket
-    implements SnmpPduBulkType {
-    private static final long serialVersionUID = -7431306775883371046L;
-
-    /**
-     * The <CODE>non-repeaters</CODE> value.
-     * @serial
-     */
-    public int            nonRepeaters ;
-
-
-    /**
-     * The <CODE>max-repetitions</CODE> value.
-     * @serial
-     */
-    public int            maxRepetitions ;
-
-
-    /**
-     * Builds a new <CODE>get-bulk</CODE> PDU.
-     * <BR><CODE>type</CODE> and <CODE>version</CODE> fields are initialized with
-     * {@link com.sun.jmx.snmp.SnmpDefinitions#pduGetBulkRequestPdu pduGetBulkRequestPdu}
-     * and {@link com.sun.jmx.snmp.SnmpDefinitions#snmpVersionTwo snmpVersionTwo}.
-     */
-    public SnmpPduBulk() {
-        type = pduGetBulkRequestPdu ;
-        version = snmpVersionTwo ;
-    }
-    /**
-     * Implements the <CODE>SnmpPduBulkType</CODE> interface.
-     *
-     * @since 1.5
-     */
-    public void setMaxRepetitions(int i) {
-        maxRepetitions = i;
-    }
-    /**
-     * Implements the <CODE>SnmpPduBulkType</CODE> interface.
-     *
-     * @since 1.5
-     */
-    public void setNonRepeaters(int i) {
-        nonRepeaters = i;
-    }
-    /**
-     * Implements the <CODE>SnmpPduBulkType</CODE> interface.
-     *
-     * @since 1.5
-     */
-    public int getMaxRepetitions() { return maxRepetitions; }
-    /**
-     * Implements the <CODE>SnmpPduBulkType</CODE> interface.
-     *
-     * @since 1.5
-     */
-    public int getNonRepeaters() { return nonRepeaters; }
-    /**
-     * Implements the <CODE>SnmpAckPdu</CODE> interface.
-     *
-     * @since 1.5
-     */
-    public SnmpPdu getResponsePdu() {
-        SnmpPduRequest result = new SnmpPduRequest();
-        result.address = address;
-        result.port = port;
-        result.version = version;
-        result.community = community;
-        result.type = SnmpDefinitions.pduGetResponsePdu;
-        result.requestId = requestId;
-        result.errorStatus = SnmpDefinitions.snmpRspNoError;
-        result.errorIndex = 0;
-
-        return result;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpPduBulkType.java b/ojluni/src/main/java/com/sun/jmx/snmp/SnmpPduBulkType.java
deleted file mode 100755
index bfc7a4a..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpPduBulkType.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright (c) 2001, 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.
- */
-package com.sun.jmx.snmp;
-/**
- * Interface implemented by classes modelizing bulk pdu.
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- * @since 1.5
- */
-
-public interface SnmpPduBulkType extends SnmpAckPdu {
-
-    /**
-     * The <CODE>max-repetitions</CODE> setter.
-     * @param max Maximum repetition.
-     */
-    public void setMaxRepetitions(int max);
-
-    /**
-     * The <CODE>non-repeaters</CODE> setter.
-     * @param nr Non repeaters.
-     */
-    public void setNonRepeaters(int nr);
-
-    /**
-     * The <CODE>max-repetitions</CODE> getter.
-     * @return Maximum repetition.
-     */
-    public int getMaxRepetitions();
-
-    /**
-     * The <CODE>non-repeaters</CODE> getter.
-     * @return Non repeaters.
-     */
-    public int getNonRepeaters();
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpPduFactory.java b/ojluni/src/main/java/com/sun/jmx/snmp/SnmpPduFactory.java
deleted file mode 100755
index cafdac9..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpPduFactory.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Copyright (c) 1998, 2007, 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.jmx.snmp;
-
-
-
-
-/**
- * Defines the interface of the object in charge of encoding and decoding SNMP packets.
- * <P>
- * You will not usually need to use this interface, except if you
- * decide to replace the default implementation <CODE>SnmpPduFactoryBER</CODE>.
- * <P>
- * An <CODE>SnmpPduFactory</CODE> object is attached to an
- * {@link com.sun.jmx.snmp.daemon.SnmpAdaptorServer SNMP protocol adaptor}
- * or an {@link com.sun.jmx.snmp.SnmpPeer SnmpPeer}.
- * It is used each time an SNMP packet needs to be encoded or decoded.
- * <BR>{@link com.sun.jmx.snmp.SnmpPduFactoryBER SnmpPduFactoryBER} is the default
- * implementation.
- * It simply applies the standard ASN.1 encoding and decoding
- * on the bytes of the SNMP packet.
- * <P>
- * It's possible to implement your own <CODE>SnmpPduFactory</CODE>
- * object and to add authentication and/or encryption to the
- * default encoding/decoding process.
- *
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- * @see SnmpPduFactory
- * @see SnmpPduPacket
- * @see SnmpMessage
- *
- */
-
-public interface SnmpPduFactory {
-
-    /**
-     * Decodes the specified <CODE>SnmpMsg</CODE> and returns the
-     * resulting <CODE>SnmpPdu</CODE>. If this method returns
-     * <CODE>null</CODE>, the message will be considered unsafe
-     * and will be dropped.
-     *
-     * @param msg The <CODE>SnmpMsg</CODE> to be decoded.
-     * @return Null or a fully initialized <CODE>SnmpPdu</CODE>.
-     * @exception SnmpStatusException If the encoding is invalid.
-     *
-     * @since 1.5
-     */
-    public SnmpPdu decodeSnmpPdu(SnmpMsg msg) throws SnmpStatusException ;
-
-    /**
-     * Encodes the specified <CODE>SnmpPdu</CODE> and
-     * returns the resulting <CODE>SnmpMsg</CODE>. If this
-     * method returns null, the specified <CODE>SnmpPdu</CODE>
-     * will be dropped and the current SNMP request will be
-     * aborted.
-     *
-     * @param p The <CODE>SnmpPdu</CODE> to be encoded.
-     * @param maxDataLength The size limit of the resulting encoding.
-     * @return Null or a fully encoded <CODE>SnmpMsg</CODE>.
-     * @exception SnmpStatusException If <CODE>pdu</CODE> contains
-     *            illegal values and cannot be encoded.
-     * @exception SnmpTooBigException If the resulting encoding does not
-     *            fit into <CODE>maxPktSize</CODE> bytes.
-     *
-     * @since 1.5
-     */
-    public SnmpMsg encodeSnmpPdu(SnmpPdu p, int maxDataLength)
-        throws SnmpStatusException, SnmpTooBigException ;
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpPduFactoryBER.java b/ojluni/src/main/java/com/sun/jmx/snmp/SnmpPduFactoryBER.java
deleted file mode 100755
index 4cfbd4c..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpPduFactoryBER.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * Copyright (c) 1998, 2006, 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.jmx.snmp;
-
-
-// java imports
-//
-import java.io.Serializable;
-
-// jmx import
-//
-import com.sun.jmx.snmp.SnmpPduFactory;
-import com.sun.jmx.snmp.SnmpMessage;
-import com.sun.jmx.snmp.SnmpPduPacket;
-import com.sun.jmx.snmp.SnmpPdu;
-import com.sun.jmx.snmp.SnmpMsg;
-import com.sun.jmx.snmp.SnmpStatusException;
-import com.sun.jmx.snmp.SnmpTooBigException;
-import com.sun.jmx.snmp.SnmpDefinitions;
-
-// SNMP Runtime import
-//
-import com.sun.jmx.snmp.SnmpV3Message;
-
-/**
- * Default implementation of the {@link com.sun.jmx.snmp.SnmpPduFactory SnmpPduFactory} interface.
- * <BR>It uses the BER (basic encoding rules) standardized encoding scheme associated with ASN.1.
- * <P>
- * This implementation of the <CODE>SnmpPduFactory</CODE> is very
- * basic: it simply calls encoding and decoding methods from
- * {@link com.sun.jmx.snmp.SnmpMsg}.
- * <BLOCKQUOTE>
- * <PRE>
- * public SnmpPdu decodeSnmpPdu(SnmpMsg msg)
- * throws SnmpStatusException {
- *   return msg.decodeSnmpPdu() ;
- * }
- *
- * public SnmpMsg encodeSnmpPdu(SnmpPdu pdu, int maxPktSize)
- * throws SnmpStatusException, SnmpTooBigException {
- *   SnmpMsg result = new SnmpMessage() ;       // for SNMP v1/v2
- * <I>or</I>
- *   SnmpMsg result = new SnmpV3Message() ;     // for SNMP v3
- *   result.encodeSnmpPdu(pdu, maxPktSize) ;
- *   return result ;
- * }
- * </PRE>
- * </BLOCKQUOTE>
- * To implement your own object, you can implement <CODE>SnmpPduFactory</CODE>
- * or extend <CODE>SnmpPduFactoryBER</CODE>.
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- */
-
-public class SnmpPduFactoryBER implements SnmpPduFactory, Serializable {
-   private static final long serialVersionUID = -3525318344000547635L;
-
-   /**
-     * Calls {@link com.sun.jmx.snmp.SnmpMsg#decodeSnmpPdu SnmpMsg.decodeSnmpPdu}
-     * on the specified message and returns the resulting <CODE>SnmpPdu</CODE>.
-     *
-     * @param msg The SNMP message to be decoded.
-     * @return The resulting SNMP PDU packet.
-     * @exception SnmpStatusException If the encoding is invalid.
-     *
-     * @since 1.5
-     */
-    public SnmpPdu decodeSnmpPdu(SnmpMsg msg) throws SnmpStatusException {
-        return msg.decodeSnmpPdu();
-    }
-
-    /**
-     * Encodes the specified <CODE>SnmpPdu</CODE> and
-     * returns the resulting <CODE>SnmpMsg</CODE>. If this
-     * method returns null, the specified <CODE>SnmpPdu</CODE>
-     * will be dropped and the current SNMP request will be
-     * aborted.
-     *
-     * @param p The <CODE>SnmpPdu</CODE> to be encoded.
-     * @param maxDataLength The size limit of the resulting encoding.
-     * @return Null or a fully encoded <CODE>SnmpMsg</CODE>.
-     * @exception SnmpStatusException If <CODE>pdu</CODE> contains
-     *            illegal values and cannot be encoded.
-     * @exception SnmpTooBigException If the resulting encoding does not
-     *            fit into <CODE>maxPktSize</CODE> bytes.
-     *
-     * @since 1.5
-     */
-    public SnmpMsg encodeSnmpPdu(SnmpPdu p, int maxDataLength)
-        throws SnmpStatusException, SnmpTooBigException {
-        switch(p.version) {
-        case SnmpDefinitions.snmpVersionOne:
-        case SnmpDefinitions.snmpVersionTwo: {
-            SnmpMessage result = new SnmpMessage();
-            result.encodeSnmpPdu((SnmpPduPacket) p, maxDataLength);
-            return result;
-        }
-        case SnmpDefinitions.snmpVersionThree: {
-            SnmpV3Message result = new SnmpV3Message();
-            result.encodeSnmpPdu(p, maxDataLength);
-            return result;
-        }
-        default:
-            return null;
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpPduRequest.java b/ojluni/src/main/java/com/sun/jmx/snmp/SnmpPduRequest.java
deleted file mode 100755
index f2ecdfd..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpPduRequest.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Copyright (c) 1998, 2007, 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.jmx.snmp;
-
-
-
-
-/**
- * Is used to represent <CODE>get</CODE>, <CODE>get-next</CODE>, <CODE>set</CODE>, <CODE>response</CODE> and <CODE>SNMPv2-trap</CODE> PDUs.
- * <P>
- * You will not usually need to use this class, except if you
- * decide to implement your own
- * {@link com.sun.jmx.snmp.SnmpPduFactory SnmpPduFactory} object.
- *
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- */
-
-public class SnmpPduRequest extends SnmpPduPacket
-    implements SnmpPduRequestType {
-    private static final long serialVersionUID = 2218754017025258979L;
-
-
-    /**
-     * Error status. Statuses are defined in
-     * {@link com.sun.jmx.snmp.SnmpDefinitions SnmpDefinitions}.
-     * @serial
-     */
-    public int errorStatus=0 ;
-
-
-    /**
-     * Error index. Remember that SNMP indices start from 1.
-     * Thus the corresponding <CODE>SnmpVarBind</CODE> is
-     * <CODE>varBindList[errorIndex-1]</CODE>.
-     * @serial
-     */
-    public int errorIndex=0 ;
-    /**
-     * Implements <CODE>SnmpPduRequestType</CODE> interface.
-     *
-     * @since 1.5
-     */
-    public void setErrorIndex(int i) {
-        errorIndex = i;
-    }
-    /**
-     * Implements <CODE>SnmpPduRequestType</CODE> interface.
-     *
-     * @since 1.5
-     */
-    public void setErrorStatus(int i) {
-        errorStatus = i;
-    }
-    /**
-     * Implements <CODE>SnmpPduRequestType</CODE> interface.
-     *
-     * @since 1.5
-     */
-    public int getErrorIndex() { return errorIndex; }
-    /**
-     * Implements <CODE>SnmpPduRequestType</CODE> interface.
-     *
-     * @since 1.5
-     */
-    public int getErrorStatus() { return errorStatus; }
-    /**
-     * Implements <CODE>SnmpAckPdu</CODE> interface.
-     *
-     * @since 1.5
-     */
-    public SnmpPdu getResponsePdu() {
-        SnmpPduRequest result = new SnmpPduRequest();
-        result.address = address;
-        result.port = port;
-        result.version = version;
-        result.community = community;
-        result.type = SnmpDefinitions.pduGetResponsePdu;
-        result.requestId = requestId;
-        result.errorStatus = SnmpDefinitions.snmpRspNoError;
-        result.errorIndex = 0;
-
-        return result;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpPduRequestType.java b/ojluni/src/main/java/com/sun/jmx/snmp/SnmpPduRequestType.java
deleted file mode 100755
index b785b22..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpPduRequestType.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (c) 2001, 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.
- */
-package com.sun.jmx.snmp;
-
-/**
- * Interface implemented by classes modelizing request pdu.
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- * @since 1.5
- */
-public interface SnmpPduRequestType extends SnmpAckPdu {
-    /**
-     * Error index setter. Remember that SNMP indices start from 1.
-     * Thus the corresponding <CODE>SnmpVarBind</CODE> is
-     * <CODE>varBindList[errorIndex-1]</CODE>.
-     * @param i Error index.
-     */
-    public void setErrorIndex(int i);
-    /**
-     * Error status setter. Statuses are defined in
-     * {@link com.sun.jmx.snmp.SnmpDefinitions SnmpDefinitions}.
-     * @param i Error status.
-     */
-    public void setErrorStatus(int i);
-    /**
-     * Error index getter. Remember that SNMP indices start from 1.
-     * Thus the corresponding <CODE>SnmpVarBind</CODE> is
-     * <CODE>varBindList[errorIndex-1]</CODE>.
-     * @return Error index.
-     */
-    public int getErrorIndex();
-    /**
-     * Error status getter. Statuses are defined in
-     * {@link com.sun.jmx.snmp.SnmpDefinitions SnmpDefinitions}.
-     * @return Error status.
-     */
-    public int getErrorStatus();
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpPduTrap.java b/ojluni/src/main/java/com/sun/jmx/snmp/SnmpPduTrap.java
deleted file mode 100755
index 3c892c5..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpPduTrap.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Copyright (c) 1997, 2007, 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.jmx.snmp;
-
-
-
-/**
- * Represents an SNMPv1-trap PDU.
- * <P>
- * You will not usually need to use this class, except if you
- * decide to implement your own
- * {@link com.sun.jmx.snmp.SnmpPduFactory SnmpPduFactory} object.
- * <P>
- * The <CODE>SnmpPduTrap</CODE> extends {@link com.sun.jmx.snmp.SnmpPduPacket SnmpPduPacket}
- * and defines attributes specific to an SNMPv1 trap (see RFC1157).
- *
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- */
-
-public class SnmpPduTrap extends SnmpPduPacket {
-    private static final long serialVersionUID = -3670886636491433011L;
-
-    /**
-     * Enterprise object identifier.
-     * @serial
-     */
-    public SnmpOid        enterprise ;
-
-    /**
-     * Agent address. If the agent address source was not an IPv4 one (eg : IPv6), this field is null.
-     * @serial
-     */
-    public SnmpIpAddress  agentAddr ;
-
-    /**
-     * Generic trap number.
-     * <BR>
-     * The possible values are defined in
-     * {@link com.sun.jmx.snmp.SnmpDefinitions#trapColdStart SnmpDefinitions}.
-     * @serial
-     */
-    public int            genericTrap ;
-
-    /**
-     * Specific trap number.
-     * @serial
-     */
-    public int            specificTrap ;
-
-    /**
-     * Time-stamp.
-     * @serial
-     */
-    public long            timeStamp ;
-
-
-
-    /**
-     * Builds a new trap PDU.
-     * <BR><CODE>type</CODE> and <CODE>version</CODE> fields are initialized with
-     * {@link com.sun.jmx.snmp.SnmpDefinitions#pduV1TrapPdu pduV1TrapPdu}
-     * and {@link com.sun.jmx.snmp.SnmpDefinitions#snmpVersionOne snmpVersionOne}.
-     */
-    public SnmpPduTrap() {
-        type = pduV1TrapPdu ;
-        version = snmpVersionOne ;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpScopedPduBulk.java b/ojluni/src/main/java/com/sun/jmx/snmp/SnmpScopedPduBulk.java
deleted file mode 100755
index 6ae067e..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpScopedPduBulk.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * Copyright (c) 2001, 2006, 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.jmx.snmp;
-/**
- * Represents a <CODE>get-bulk</CODE> PDU as defined in RFC 1448.
- * <P>
- * <P>
- * The <CODE>SnmpSocpedPduBulk</CODE> extends {@link com.sun.jmx.snmp.SnmpScopedPduPacket SnmpScopedPduPacket}
- * and defines attributes specific to the <CODE>get-bulk</CODE> PDU (see RFC 1448).
- *
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- * @since 1.5
- */
-
-public class SnmpScopedPduBulk extends SnmpScopedPduPacket
-    implements SnmpPduBulkType {
-    private static final long serialVersionUID = -1648623646227038885L;
-
-    /**
-     * The <CODE>non-repeaters</CODE> value.
-     * @serial
-     */
-    int            nonRepeaters;
-
-
-    /**
-     * The <CODE>max-repetitions</CODE> value.
-     * @serial
-     */
-    int            maxRepetitions;
-
-    public SnmpScopedPduBulk() {
-        type = pduGetBulkRequestPdu;
-        version = snmpVersionThree;
-    }
-
-    /**
-     * The <CODE>max-repetitions</CODE> setter.
-     * @param max Maximum repetition.
-     */
-    public void setMaxRepetitions(int max) {
-        maxRepetitions = max;
-    }
-
-    /**
-     * The <CODE>non-repeaters</CODE> setter.
-     * @param nr Non repeaters.
-     */
-    public void setNonRepeaters(int nr) {
-        nonRepeaters = nr;
-    }
-
-    /**
-     * The <CODE>max-repetitions</CODE> getter.
-     * @return Maximum repetition.
-     */
-    public int getMaxRepetitions() { return maxRepetitions; }
-
-    /**
-     * The <CODE>non-repeaters</CODE> getter.
-     * @return Non repeaters.
-     */
-    public int getNonRepeaters() { return nonRepeaters; }
-
-    /**
-     * Generates the pdu to use for response.
-     * @return Response pdu.
-     */
-    public SnmpPdu getResponsePdu() {
-        SnmpScopedPduRequest result = new SnmpScopedPduRequest();
-        result.address = address ;
-        result.port = port ;
-        result.version = version ;
-        result.requestId = requestId;
-        result.msgId = msgId;
-        result.msgMaxSize = msgMaxSize;
-        result.msgFlags = msgFlags;
-        result.msgSecurityModel = msgSecurityModel;
-        result.contextEngineId = contextEngineId;
-        result.contextName = contextName;
-        result.securityParameters = securityParameters;
-        result.type = pduGetResponsePdu ;
-        result.errorStatus = SnmpDefinitions.snmpRspNoError ;
-        result.errorIndex = 0 ;
-        return result;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpScopedPduPacket.java b/ojluni/src/main/java/com/sun/jmx/snmp/SnmpScopedPduPacket.java
deleted file mode 100755
index 8917745..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpScopedPduPacket.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Copyright (c) 2001, 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.
- */
-
-package com.sun.jmx.snmp;
-
-import java.io.Serializable;
-
-import com.sun.jmx.snmp.SnmpSecurityParameters;
-
-import com.sun.jmx.snmp.SnmpDefinitions;
-/**
- * Is the fully decoded representation of an SNMP V3 packet.
- * <P>
- *
- * Classes are derived from <CODE>SnmpPdu</CODE> to
- * represent the different forms of SNMP pdu
- * ({@link com.sun.jmx.snmp.SnmpScopedPduRequest SnmpScopedPduRequest},
- * {@link com.sun.jmx.snmp.SnmpScopedPduBulk SnmpScopedPduBulk}).
- * <BR>The <CODE>SnmpScopedPduPacket</CODE> class defines the attributes
- * common to every scoped SNMP packets.
- *
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- * @see SnmpV3Message
- *
- * @since 1.5
- */
-public abstract class SnmpScopedPduPacket extends SnmpPdu
-    implements Serializable {
-    /**
-     * Message max size the pdu sender can deal with.
-     */
-    public int msgMaxSize = 0;
-
-    /**
-     * Message identifier.
-     */
-    public int msgId = 0;
-
-    /**
-     * Message flags. Reportable flag  and security level.</P>
-     *<PRE>
-     * --  .... ...1   authFlag
-     * --  .... ..1.   privFlag
-     * --  .... .1..   reportableFlag
-     * --              Please observe:
-     * --  .... ..00   is OK, means noAuthNoPriv
-     * --  .... ..01   is OK, means authNoPriv
-     * --  .... ..10   reserved, must NOT be used.
-     * --  .... ..11   is OK, means authPriv
-     *</PRE>
-     */
-    public byte msgFlags = 0;
-
-    /**
-     * The security model the security sub system MUST use in order to deal with this pdu (eg: User based Security Model Id = 3).
-     */
-    public int msgSecurityModel = 0;
-
-    /**
-     * The context engine Id in which the pdu must be handled (Generaly the local engine Id).
-     */
-    public byte[] contextEngineId = null;
-
-    /**
-     * The context name in which the OID have to be interpreted.
-     */
-    public byte[] contextName = null;
-
-    /**
-     * The security parameters. This is an opaque member that is
-     * interpreted by the concerned security model.
-     */
-    public SnmpSecurityParameters securityParameters = null;
-
-    /**
-     * Constructor. Is only called by a son. Set the version to <CODE>SnmpDefinitions.snmpVersionThree</CODE>.
-     */
-    protected SnmpScopedPduPacket() {
-        version = SnmpDefinitions.snmpVersionThree;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpScopedPduRequest.java b/ojluni/src/main/java/com/sun/jmx/snmp/SnmpScopedPduRequest.java
deleted file mode 100755
index 118f721..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpScopedPduRequest.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright (c) 2001, 2006, 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.jmx.snmp;
-/**
- * Is used to represent <CODE>get</CODE>, <CODE>get-next</CODE>, <CODE>set</CODE>, <CODE>response</CODE> SNMP V3 scoped PDUs.
- *
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- * @since 1.5
- */
-public class SnmpScopedPduRequest extends SnmpScopedPduPacket
-    implements SnmpPduRequestType {
-    private static final long serialVersionUID = 6463060973056773680L;
-
-    int errorStatus=0 ;
-
-    int errorIndex=0 ;
-
-    /**
-     * Error index setter. Remember that SNMP indices start from 1.
-     * Thus the corresponding <CODE>SnmpVarBind</CODE> is
-     * <CODE>varBindList[errorIndex-1]</CODE>.
-     * @param i Error index.
-     */
-    public void setErrorIndex(int i) {
-        errorIndex = i;
-    }
-    /**
-     * Error status setter. Statuses are defined in
-     * {@link com.sun.jmx.snmp.SnmpDefinitions SnmpDefinitions}.
-     * @param s Error status.
-     */
-    public void setErrorStatus(int s) {
-        errorStatus = s;
-    }
-
-    /**
-     * Error index getter. Remember that SNMP indices start from 1.
-     * Thus the corresponding <CODE>SnmpVarBind</CODE> is
-     * <CODE>varBindList[errorIndex-1]</CODE>.
-     * @return Error index.
-     */
-    public int getErrorIndex() { return errorIndex; }
-    /**
-     * Error status getter. Statuses are defined in
-     * {@link com.sun.jmx.snmp.SnmpDefinitions SnmpDefinitions}.
-     * @return Error status.
-     */
-    public int getErrorStatus() { return errorStatus; }
-
-    /**
-     * Generates the pdu to use for response.
-     * @return Response pdu.
-     */
-    public SnmpPdu getResponsePdu() {
-        SnmpScopedPduRequest result = new SnmpScopedPduRequest();
-        result.address = address ;
-        result.port = port ;
-        result.version = version ;
-        result.requestId = requestId;
-        result.msgId = msgId;
-        result.msgMaxSize = msgMaxSize;
-        result.msgFlags = msgFlags;
-        result.msgSecurityModel = msgSecurityModel;
-        result.contextEngineId = contextEngineId;
-        result.contextName = contextName;
-        result.securityParameters = securityParameters;
-        result.type = pduGetResponsePdu ;
-        result.errorStatus = SnmpDefinitions.snmpRspNoError ;
-        result.errorIndex = 0 ;
-        return result;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpSecurityException.java b/ojluni/src/main/java/com/sun/jmx/snmp/SnmpSecurityException.java
deleted file mode 100755
index 22dfbad..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpSecurityException.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (c) 2001, 2006, 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.jmx.snmp;
-
-/**
- * This exception is thrown when an error occurs in an <CODE> SnmpSecurityModel </CODE>.
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- * @since 1.5
- */
-public class SnmpSecurityException extends Exception {
-    private static final long serialVersionUID = 5574448147432833480L;
-
-    /**
-     * The current request varbind list.
-     */
-    public SnmpVarBind[] list = null;
-    /**
-     * The status of the exception. See {@link com.sun.jmx.snmp.SnmpDefinitions} for possible values.
-     */
-    public int status = SnmpDefinitions.snmpReqUnknownError;
-    /**
-     * The current security model related security parameters.
-     */
-    public SnmpSecurityParameters params = null;
-    /**
-     * The current context engine Id.
-     */
-    public byte[] contextEngineId = null;
-     /**
-     * The current context name.
-     */
-    public byte[] contextName = null;
-     /**
-     * The current flags.
-     */
-    public byte flags = (byte) SnmpDefinitions.noAuthNoPriv;
-    /**
-     * Constructor.
-     * @param msg The exception msg to display.
-     */
-    public SnmpSecurityException(String msg) {
-        super(msg);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpSecurityParameters.java b/ojluni/src/main/java/com/sun/jmx/snmp/SnmpSecurityParameters.java
deleted file mode 100755
index dfc1af9..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpSecurityParameters.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright (c) 2001, 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.
- */
-package com.sun.jmx.snmp;
-import com.sun.jmx.snmp.SnmpStatusException;
-import com.sun.jmx.snmp.SnmpTooBigException;
-
-/**
- * Security parameters are security model dependent. Every security parameters class wishing to be passed to a security model must implement this marker interface.
- * This interface has to be implemented when developing customized security models.
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- * @since 1.5
- */
-public interface SnmpSecurityParameters {
-    /**
-     * BER encoding of security parameters.
-     * @param outputBytes Array to fill.
-     * @return Encoded parameters length.
-     */
-    int encode(byte[] outputBytes) throws SnmpTooBigException;
-    /**
-     * BER decoding of security parameters.
-     * @param params Encoded parameters.
-     */
-    void decode(byte[] params) throws SnmpStatusException;
-
-    /**
-     * Principal coded inside the security parameters.
-     * @return The security principal.
-     */
-    String getPrincipal();
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpStatusException.java b/ojluni/src/main/java/com/sun/jmx/snmp/SnmpStatusException.java
deleted file mode 100755
index 3f079c7..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpStatusException.java
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
- * Copyright (c) 1997, 2007, 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.jmx.snmp;
-
-
-
-/**
- * Reports an error which occurred during a get/set operation on a mib node.
- *
- * This exception includes a status error code as defined in the SNMP protocol.
- *
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- */
-
-public class SnmpStatusException extends Exception implements SnmpDefinitions {
-    private static final long serialVersionUID = 5809485694133115675L;
-
-    /**
-     * Error code as defined in RFC 1448 for: <CODE>noSuchName</CODE>.
-     */
-    public static final int noSuchName         = 2 ;
-
-    /**
-     * Error code as defined in RFC 1448 for: <CODE>badValue</CODE>.
-     */
-    public static final int badValue           = 3 ;
-
-    /**
-     * Error code as defined in RFC 1448 for: <CODE>readOnly</CODE>.
-     */
-    public static final int readOnly           = 4 ;
-
-
-    /**
-     * Error code as defined in RFC 1448 for: <CODE>noAccess</CODE>.
-     */
-    public static final int noAccess           = 6 ;
-
-    /**
-     * Error code for reporting a no such instance error.
-     */
-    public static final int noSuchInstance     = 0xE0;
-
-    /**
-     * Error code for reporting a no such object error.
-     */
-    public static final int noSuchObject     = 0xE1;
-
-    /**
-     * Constructs a new <CODE>SnmpStatusException</CODE> with the specified status error.
-     * @param status The error status.
-     */
-    public SnmpStatusException(int status) {
-        errorStatus = status ;
-    }
-
-    /**
-     * Constructs a new <CODE>SnmpStatusException</CODE> with the specified status error and status index.
-     * @param status The error status.
-     * @param index The error index.
-     */
-    public SnmpStatusException(int status, int index) {
-        errorStatus = status ;
-        errorIndex = index ;
-    }
-
-    /**
-     * Constructs a new <CODE>SnmpStatusException</CODE> with an error message.
-     * The error status is set to 0 (noError) and the index to -1.
-     * @param s The error message.
-     */
-    public SnmpStatusException(String s) {
-        super(s);
-    }
-
-    /**
-     * Constructs a new <CODE>SnmpStatusException</CODE> with an error index.
-     * @param x The original <CODE>SnmpStatusException</CODE>.
-     * @param index The error index.
-     */
-    public SnmpStatusException(SnmpStatusException x, int index) {
-        super(x.getMessage());
-        errorStatus= x.errorStatus;
-        errorIndex= index;
-    }
-
-    /**
-     * Return the error status.
-     * @return The error status.
-     */
-    public int getStatus() {
-        return errorStatus ;
-    }
-
-    /**
-     * Returns the index of the error.
-     * A value of -1 means that the index is not known/applicable.
-     * @return The error index.
-     */
-    public int getErrorIndex() {
-        return errorIndex;
-    }
-
-
-    // PRIVATE VARIABLES
-    //--------------------
-
-    /**
-     * Status of the error.
-     * @serial
-     */
-    private int errorStatus = 0 ;
-
-    /**
-     * Index of the error.
-     * If different from -1, indicates the index where the error occurs.
-     * @serial
-     */
-    private int errorIndex= -1;
-
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpString.java b/ojluni/src/main/java/com/sun/jmx/snmp/SnmpString.java
deleted file mode 100755
index 47cfbdf..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpString.java
+++ /dev/null
@@ -1,278 +0,0 @@
-/*
- * Copyright (c) 1997, 2007, 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.jmx.snmp;
-
-import java.net.InetAddress;
-import java.net.UnknownHostException;
-
-/**
- * Represents an SNMP string.
- *
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- */
-
-public class SnmpString extends SnmpValue {
-    private static final long serialVersionUID = -7011986973225194188L;
-
-    // CONSTRUCTORS
-    //-------------
-    /**
-     * Constructs a new empty <CODE>SnmpString</CODE>.
-     */
-    public SnmpString() {
-        value = new byte[0] ;
-    }
-
-    /**
-     * Constructs a new <CODE>SnmpString</CODE> from the specified bytes array.
-     * @param v The bytes composing the string value.
-     */
-    public SnmpString(byte[] v) {
-        value = v.clone() ;
-    }
-
-    /**
-     * Constructs a new <CODE>SnmpString</CODE> from the specified <CODE>Bytes</CODE> array.
-     * @param v The <CODE>Bytes</CODE> composing the string value.
-     */
-    public SnmpString(Byte[] v) {
-        value = new byte[v.length] ;
-        for (int i = 0 ; i < v.length ; i++) {
-            value[i] = v[i].byteValue() ;
-        }
-    }
-
-    /**
-     * Constructs a new <CODE>SnmpString</CODE> from the specified <CODE>String</CODE> value.
-     * @param v The initialization value.
-     */
-    public SnmpString(String v) {
-        value = v.getBytes() ;
-    }
-
-    /**
-     * Constructs a new <CODE>SnmpString</CODE> from the specified <CODE> InetAddress </Code>.
-     * @param address The <CODE>InetAddress </CODE>.
-     *
-     * @since 1.5
-     */
-    public SnmpString(InetAddress address) {
-        value = address.getAddress();
-    }
-
-    // PUBLIC METHODS
-    //---------------
-
-    /**
-     * Converts the string value to its <CODE> InetAddress </CODE> form.
-     * @return an {@link InetAddress} defined by the string value.
-     * @exception UnknownHostException If string value is not a legal address format.
-     *
-     * @since 1.5
-     */
-    public InetAddress inetAddressValue() throws UnknownHostException {
-        return InetAddress.getByAddress(value);
-    }
-
-    /**
-     * Converts the specified binary string into a character string.
-     * @param bin The binary string value to convert.
-     * @return The character string representation.
-     */
-    public static String BinToChar(String bin) {
-        char value[] = new char[bin.length()/8];
-        int binLength = value.length;
-        for (int i = 0; i < binLength; i++)
-            value[i] = (char)Integer.parseInt(bin.substring(8*i, 8*i+8), 2);
-        return new String(value);
-    }
-
-    /**
-     * Converts the specified hexadecimal string into a character string.
-     * @param hex The hexadecimal string value to convert.
-     * @return The character string representation.
-     */
-    public static String HexToChar(String hex) {
-        char value[] = new char[hex.length()/2];
-        int hexLength = value.length;
-        for (int i = 0; i < hexLength; i++)
-            value[i] = (char)Integer.parseInt(hex.substring(2*i, 2*i+2), 16);
-        return new String(value);
-    }
-
-    /**
-     * Returns the bytes array of this <CODE>SnmpString</CODE>.
-     * @return The value.
-     */
-    public byte[] byteValue() {
-        return value ;
-    }
-
-    /**
-     * Converts the string value to its array of <CODE>Bytes</CODE> form.
-     * @return The array of <CODE>Bytes</CODE> representation of the value.
-     */
-    public Byte[] toByte() {
-        Byte[] result = new Byte[value.length] ;
-        for (int i = 0 ; i < value.length ; i++) {
-            result[i] = new Byte(value[i]) ;
-        }
-        return result ;
-    }
-
-    /**
-     * Converts the string value to its <CODE>String</CODE> form.
-     * @return The <CODE>String</CODE> representation of the value.
-     */
-    public String toString() {
-        return new String(value) ;
-    }
-
-    /**
-     * Converts the string value to its <CODE>SnmpOid</CODE> form.
-     * @return The OID representation of the value.
-     */
-    public SnmpOid toOid() {
-        long[] ids = new long[value.length] ;
-        for (int i = 0 ; i < value.length ; i++) {
-            ids[i] = (long)(value[i] & 0xFF) ;
-        }
-        return new SnmpOid(ids) ;
-    }
-
-    /**
-     * Extracts the string from an index OID and returns its
-     * value converted as an <CODE>SnmpOid</CODE>.
-     * @param index The index array.
-     * @param start The position in the index array.
-     * @return The OID representing the string value.
-     * @exception SnmpStatusException There is no string value
-     * available at the start position.
-     */
-    public static SnmpOid toOid(long[] index, int start) throws SnmpStatusException {
-        try {
-            if (index[start] > Integer.MAX_VALUE) {
-                throw new SnmpStatusException(SnmpStatusException.noSuchName) ;
-            }
-            int strLen = (int)index[start++] ;
-            long[] ids = new long[strLen] ;
-            for (int i = 0 ; i < strLen ; i++) {
-                ids[i] = index[start + i] ;
-            }
-            return new SnmpOid(ids) ;
-        }
-        catch(IndexOutOfBoundsException e) {
-            throw new SnmpStatusException(SnmpStatusException.noSuchName) ;
-        }
-    }
-
-    /**
-     * Scans an index OID, skips the string value and returns the position
-     * of the next value.
-     * @param index The index array.
-     * @param start The position in the index array.
-     * @return The position of the next value.
-     * @exception SnmpStatusException There is no string value
-     * available at the start position.
-     */
-    public static int nextOid(long[] index, int start) throws SnmpStatusException {
-        try {
-            if (index[start] > Integer.MAX_VALUE) {
-                throw new SnmpStatusException(SnmpStatusException.noSuchName) ;
-            }
-            int strLen = (int)index[start++] ;
-            start += strLen ;
-            if (start <= index.length) {
-                return start ;
-            }
-            else {
-                throw new SnmpStatusException(SnmpStatusException.noSuchName) ;
-            }
-        }
-        catch(IndexOutOfBoundsException e) {
-            throw new SnmpStatusException(SnmpStatusException.noSuchName) ;
-        }
-    }
-
-    /**
-     * Appends an <CODE>SnmpOid</CODE> representing an <CODE>SnmpString</CODE> to another OID.
-     * @param source An OID representing an <CODE>SnmpString</CODE> value.
-     * @param dest Where source should be appended.
-     */
-    public static void appendToOid(SnmpOid source, SnmpOid dest) {
-        dest.append(source.getLength()) ;
-        dest.append(source) ;
-    }
-
-    /**
-     * Performs a clone action. This provides a workaround for the
-     * <CODE>SnmpValue</CODE> interface.
-     * @return The SnmpValue clone.
-     */
-    final synchronized public SnmpValue duplicate() {
-        return (SnmpValue) clone() ;
-    }
-
-    /**
-     * Clones the <CODE>SnmpString</CODE> object, making a copy of its data.
-     * @return The object clone.
-     */
-    synchronized public Object clone() {
-        SnmpString newclone = null ;
-
-        try {
-            newclone = (SnmpString) super.clone() ;
-            newclone.value = new byte[value.length] ;
-            System.arraycopy(value, 0, newclone.value, 0, value.length) ;
-        } catch (CloneNotSupportedException e) {
-            throw new InternalError() ; // vm bug.
-        }
-        return newclone ;
-    }
-
-    /**
-     * Returns a textual description of the type object.
-     * @return ASN.1 textual description.
-     */
-    public String getTypeName() {
-        return name ;
-    }
-
-    // VARIABLES
-    //----------
-    /**
-     * Name of the type.
-     */
-    final static String name = "String" ;
-
-    /**
-     * This is the bytes array of the string value.
-     * @serial
-     */
-    protected byte[] value = null ;
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpStringFixed.java b/ojluni/src/main/java/com/sun/jmx/snmp/SnmpStringFixed.java
deleted file mode 100755
index cd34df9..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpStringFixed.java
+++ /dev/null
@@ -1,193 +0,0 @@
-/*
- * Copyright (c) 1997, 2007, 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.jmx.snmp;
-
-
-
-// java imports
-//
-import java.lang.Math;
-
-/**
- * Represents an SNMP String defined with a fixed length.
- * The class is mainly used when dealing with table indexes for which one of the keys
- * is defined as a <CODE>String</CODE>.
- *
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- */
-
-public class SnmpStringFixed extends SnmpString {
-    private static final long serialVersionUID = -9120939046874646063L;
-
-    // CONSTRUCTORS
-    //-------------
-    /**
-     * Constructs a new <CODE>SnmpStringFixed</CODE> from the specified bytes array.
-     * @param v The bytes composing the fixed-string value.
-     */
-    public SnmpStringFixed(byte[] v) {
-        super(v) ;
-    }
-
-    /**
-     * Constructs a new <CODE>SnmpStringFixed</CODE> with the specified <CODE>Bytes</CODE> array.
-     * @param v The <CODE>Bytes</CODE> composing the fixed-string value.
-     */
-    public SnmpStringFixed(Byte[] v) {
-        super(v) ;
-    }
-
-    /**
-     * Constructs a new <CODE>SnmpStringFixed</CODE> from the specified <CODE>String</CODE> value.
-     * @param v The initialization value.
-     */
-    public SnmpStringFixed(String v) {
-        super(v) ;
-    }
-
-    /**
-     * Constructs a new <CODE>SnmpStringFixed</CODE> from the specified <CODE>bytes</CODE> array
-     * with the specified length.
-     * @param l The length of the fixed-string.
-     * @param v The <CODE>bytes</CODE> composing the fixed-string value.
-     * @exception IllegalArgumentException Either the length or the <CODE>byte</CODE> array is not valid.
-     */
-    public SnmpStringFixed(int l, byte[] v) throws IllegalArgumentException {
-        if ((l <= 0) || (v == null)) {
-            throw new IllegalArgumentException() ;
-        }
-        int length = Math.min(l, v.length);
-        value = new byte[l] ;
-        for (int i = 0 ; i < length ; i++) {
-            value[i] = v[i] ;
-        }
-        for (int i = length ; i < l ; i++) {
-            value[i] = 0 ;
-        }
-    }
-
-    /**
-     * Constructs a new <CODE>SnmpStringFixed</CODE> from the specified <CODE>Bytes</CODE> array
-     * with the specified length.
-     * @param l The length of the fixed-string.
-     * @param v The <CODE>Bytes</CODE> composing the fixed-string value.
-     * @exception IllegalArgumentException Either the length or the <CODE>Byte</CODE> array is not valid.
-     */
-    public SnmpStringFixed(int l, Byte[] v) throws IllegalArgumentException {
-        if ((l <= 0) || (v == null)) {
-            throw new IllegalArgumentException() ;
-        }
-        int length = Math.min(l, v.length);
-        value = new byte[l] ;
-        for (int i = 0 ; i < length ; i++) {
-            value[i] = v[i].byteValue() ;
-        }
-        for (int i = length ; i < l ; i++) {
-            value[i] = 0 ;
-        }
-    }
-
-    /**
-     * Constructs a new <CODE>SnmpStringFixed</CODE> from the specified <CODE>String</CODE>
-     * with the specified length.
-     * @param l The length of the fixed-string.
-     * @param s The <CODE>String</CODE> composing the fixed-string value.
-     * @exception IllegalArgumentException Either the length or the <CODE>String</CODE> is not valid.
-     */
-    public SnmpStringFixed(int l, String s) throws IllegalArgumentException {
-        if ((l <= 0) || (s == null)) {
-            throw new IllegalArgumentException() ;
-        }
-        byte[] v = s.getBytes();
-        int length = Math.min(l, v.length);
-        value = new byte[l] ;
-        for (int i = 0 ; i < length ; i++) {
-            value[i] = v[i] ;
-        }
-        for (int i = length ; i < l ; i++) {
-            value[i] = 0 ;
-        }
-    }
-
-    // PUBLIC METHODS
-    //---------------
-    /**
-     * Extracts the fixed-string from an index OID and returns its
-     * value converted as an <CODE>SnmpOid</CODE>.
-     * @param l The number of successive array elements to be retreived
-     * in order to construct the OID.
-     * These elements are retreived starting at the <CODE>start</CODE> position.
-     * @param index The index array.
-     * @param start The position in the index array.
-     * @return The OID representing the fixed-string value.
-     * @exception SnmpStatusException There is no string value
-     * available at the start position.
-     */
-    public static SnmpOid toOid(int l, long[] index, int start) throws SnmpStatusException {
-        try {
-            long[] ids = new long[l] ;
-            for (int i = 0 ; i < l ; i++) {
-                ids[i] = index[start + i] ;
-            }
-            return new SnmpOid(ids) ;
-        }
-        catch(IndexOutOfBoundsException e) {
-            throw new SnmpStatusException(SnmpStatusException.noSuchName) ;
-        }
-    }
-
-    /**
-     * Scans an index OID, skip the string value and returns the position
-     * of the next value.
-     * @param l The number of successive array elements to be passed
-     * in order to get the position of the next value.
-     * These elements are passed starting at the <CODE>start</CODE> position.
-     * @param index The index array.
-     * @param start The position in the index array.
-     * @return The position of the next value.
-     * @exception SnmpStatusException There is no string value
-     * available at the start position.
-     */
-    public static int nextOid(int l, long[] index, int start) throws SnmpStatusException {
-        int result = start + l ;
-        if (result > index.length) {
-            throw new SnmpStatusException(SnmpStatusException.noSuchName) ;
-        }
-        return result ;
-    }
-
-    /**
-     * Appends an <CODE>SnmpOid</CODE> representing an <CODE>SnmpStringFixed</CODE> to another OID.
-     * @param l Unused.
-     * @param source An OID representing an <CODE>SnmpStringFixed</CODE> value.
-     * @param dest Where source should be appended.
-     */
-    public static void appendToOid(int l, SnmpOid source, SnmpOid dest) {
-        dest.append(source) ;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpTooBigException.java b/ojluni/src/main/java/com/sun/jmx/snmp/SnmpTooBigException.java
deleted file mode 100755
index a89bbad..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpTooBigException.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Copyright (c) 1998, 2007, 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.jmx.snmp;
-
-
-/**
- * Is used internally to signal that the size of a PDU exceeds the packet size limitation.
- * <p>
- * You will not usually need to use this class, except if you
- * decide to implement your own
- * {@link com.sun.jmx.snmp.SnmpPduFactory SnmPduFactory} object.
- * <p>
- * The <CODE>varBindCount</CODE> property contains the
- * number of <CODE>SnmpVarBind</CODE> successfully encoded
- * before the exception was thrown. Its value is 0
- * when this number is unknown.
- *
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- */
-
-public class SnmpTooBigException extends Exception {
-  private static final long serialVersionUID = 4754796246674803969L;
-
-  /**
-   * Builds an <CODE>SnmpTooBigException</CODE> with
-   * <CODE>varBindCount</CODE> set to 0.
-   */
-  public SnmpTooBigException() {
-    varBindCount = 0 ;
-  }
-
-  /**
-   * Builds an <CODE>SnmpTooBigException</CODE> with
-   * <CODE>varBindCount</CODE> set to the specified value.
-   * @param n The <CODE>varBindCount</CODE> value.
-   */
-  public SnmpTooBigException(int n) {
-    varBindCount = n ;
-  }
-
-
-  /**
-   * Returns the number of <CODE>SnmpVarBind</CODE> successfully
-   * encoded before the exception was thrown.
-   *
-   * @return A positive integer (0 means the number is unknown).
-   */
-  public int getVarBindCount() {
-    return varBindCount ;
-  }
-
-  /**
-   * The <CODE>varBindCount</CODE>.
-   * @serial
-   */
-  private int varBindCount ;
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpUnknownAccContrModelException.java b/ojluni/src/main/java/com/sun/jmx/snmp/SnmpUnknownAccContrModelException.java
deleted file mode 100755
index c7b455b..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpUnknownAccContrModelException.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 2001, 2006, 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.jmx.snmp;
-
-import com.sun.jmx.snmp.SnmpUnknownModelException;
-
-/**
- * This exception is thrown when an
- * <CODE>SnmpAccessControlSubSystem</CODE> doesn't know the passed ID.
- *
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- * @since 1.5
- */
-public class SnmpUnknownAccContrModelException extends SnmpUnknownModelException {
-    private static final long serialVersionUID = -8831186713954487538L;
-
-    /**
-     * Constructor.
-     * @param msg The exception msg to display.
-     */
-    public SnmpUnknownAccContrModelException(String msg) {
-        super(msg);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpUnknownModelException.java b/ojluni/src/main/java/com/sun/jmx/snmp/SnmpUnknownModelException.java
deleted file mode 100755
index 7d9feb0..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpUnknownModelException.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (c) 2001, 2006, 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.jmx.snmp;
-/**
- * This exception is thrown when a needed model is not present in the engine.
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- * @since 1.5
- */
-public class SnmpUnknownModelException extends Exception {
-    private static final long serialVersionUID = -8667664269418048003L;
-
-    /**
-     * Constructor.
-     * @param msg The exception msg to display.
-     */
-    public SnmpUnknownModelException(String msg) {
-        super(msg);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpUnknownModelLcdException.java b/ojluni/src/main/java/com/sun/jmx/snmp/SnmpUnknownModelLcdException.java
deleted file mode 100755
index 8e96eaf..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpUnknownModelLcdException.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (c) 2001, 2006, 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.jmx.snmp;
-/**
- * This exception is thrown when an <CODE>SnmpLcd</CODE> has no ModelLcd associated to the model.
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- * @since 1.5
- */
-public class SnmpUnknownModelLcdException extends Exception {
-    private static final long serialVersionUID = 6369064741633646317L;
-
-    /**
-     * Constructor.
-     * @param msg The exception msg to display.
-     */
-    public SnmpUnknownModelLcdException(String msg) {
-        super(msg);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpUnknownMsgProcModelException.java b/ojluni/src/main/java/com/sun/jmx/snmp/SnmpUnknownMsgProcModelException.java
deleted file mode 100755
index 7d83f8b..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpUnknownMsgProcModelException.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (c) 2001, 2006, 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.jmx.snmp;
-
-import com.sun.jmx.snmp.SnmpUnknownModelException;
-
-/**
- * This exception is thrown when an <CODE>SnmpMsgProcessingSubSystem</CODE> doesn't know the passed ID.
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- * @since 1.5
- */
-public class SnmpUnknownMsgProcModelException extends SnmpUnknownModelException {
-    private static final long serialVersionUID = -4179907244861284771L;
-
-    /**
-     * Constructor.
-     * @param msg The exception msg to display.
-     */
-    public SnmpUnknownMsgProcModelException(String msg) {
-        super(msg);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpUnknownSecModelException.java b/ojluni/src/main/java/com/sun/jmx/snmp/SnmpUnknownSecModelException.java
deleted file mode 100755
index a13d050..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpUnknownSecModelException.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (c) 2001, 2006, 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.jmx.snmp;
-
-import com.sun.jmx.snmp.SnmpUnknownModelException;
-
-/**
- * This exception is thrown when an <CODE>SnmpSecuritySubSystem</CODE> doesn't know the passed ID.
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- * @since 1.5
- */
-public class SnmpUnknownSecModelException extends SnmpUnknownModelException {
-    private static final long serialVersionUID = -2173491650805292799L;
-
-    /**
-     * Constructor.
-     * @param msg The exception msg to display.
-     */
-    public SnmpUnknownSecModelException(String msg) {
-        super(msg);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpUnknownSubSystemException.java b/ojluni/src/main/java/com/sun/jmx/snmp/SnmpUnknownSubSystemException.java
deleted file mode 100755
index 73cdeaf1..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpUnknownSubSystemException.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (c) 2001, 2006, 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.jmx.snmp;
-/**
- * This exception is thrown when the handled <CODE> SnmpSubSystem </CODE> is unknown.
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- * @since 1.5
- */
-public class SnmpUnknownSubSystemException extends Exception {
-    private static final long serialVersionUID = 4463202140045245052L;
-
-    /**
-     * Constructor.
-     * @param msg The exception msg to display.
-     */
-    public SnmpUnknownSubSystemException(String msg) {
-        super(msg);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpUnsignedInt.java b/ojluni/src/main/java/com/sun/jmx/snmp/SnmpUnsignedInt.java
deleted file mode 100755
index f681742..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpUnsignedInt.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * Copyright (c) 1997, 2007, 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.jmx.snmp;
-
-
-
-/**
- * Is the base for all SNMP syntaxes based on unsigned integers.
- *
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- */
-
-public abstract class SnmpUnsignedInt extends SnmpInt {
-
-    /**
-     * The largest value of the type <code>unsigned int</code> (2^32 - 1).
-     */
-    public static final long   MAX_VALUE = 0x0ffffffffL;
-
-    // CONSTRUCTORS
-    //-------------
-    /**
-     * Constructs a new <CODE>SnmpUnsignedInt</CODE> from the specified integer value.
-     * @param v The initialization value.
-     * @exception IllegalArgumentException The specified value is negative
-     * or larger than {@link #MAX_VALUE SnmpUnsignedInt.MAX_VALUE}.
-     */
-    public SnmpUnsignedInt(int v) throws IllegalArgumentException {
-        super(v);
-    }
-
-    /**
-     * Constructs a new <CODE>SnmpUnsignedInt</CODE> from the specified <CODE>Integer</CODE> value.
-     * @param v The initialization value.
-     * @exception IllegalArgumentException The specified value is negative
-     * or larger than {@link #MAX_VALUE SnmpUnsignedInt.MAX_VALUE}.
-     */
-    public SnmpUnsignedInt(Integer v) throws IllegalArgumentException {
-        super(v);
-    }
-
-    /**
-     * Constructs a new <CODE>SnmpUnsignedInt</CODE> from the specified long value.
-     * @param v The initialization value.
-     * @exception IllegalArgumentException The specified value is negative
-     * or larger than {@link #MAX_VALUE SnmpUnsignedInt.MAX_VALUE}.
-     */
-    public SnmpUnsignedInt(long v) throws IllegalArgumentException {
-        super(v);
-    }
-
-    /**
-     * Constructs a new <CODE>SnmpUnsignedInt</CODE> from the specified <CODE>Long</CODE> value.
-     * @param v The initialization value.
-     * @exception IllegalArgumentException The specified value is negative
-     * or larger than {@link #MAX_VALUE SnmpUnsignedInt.MAX_VALUE}.
-     */
-    public SnmpUnsignedInt(Long v) throws IllegalArgumentException {
-        super(v);
-    }
-
-    // PUBLIC METHODS
-    //---------------
-    /**
-     * Returns a textual description of the type object.
-     * @return ASN.1 textual description.
-     */
-    public String getTypeName() {
-        return name ;
-    }
-
-    /**
-     * This method has been defined to allow the sub-classes
-     * of SnmpInt to perform their own control at intialization time.
-     */
-    boolean isInitValueValid(int v) {
-        if ((v < 0) || (v > SnmpUnsignedInt.MAX_VALUE)) {
-            return false;
-        }
-        return true;
-    }
-
-    /**
-     * This method has been defined to allow the sub-classes
-     * of SnmpInt to perform their own control at intialization time.
-     */
-    boolean isInitValueValid(long v) {
-        if ((v < 0) || (v > SnmpUnsignedInt.MAX_VALUE)) {
-            return false;
-        }
-        return true;
-    }
-
-    // VARIABLES
-    //----------
-    /**
-     * Name of the type.
-     */
-    final static String name = "Unsigned32" ;
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpUsmKeyHandler.java b/ojluni/src/main/java/com/sun/jmx/snmp/SnmpUsmKeyHandler.java
deleted file mode 100755
index 0e78f35..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpUsmKeyHandler.java
+++ /dev/null
@@ -1,98 +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.
- */
-package com.sun.jmx.snmp;
-
-/**
- * This interface allows you to compute key localization and delta generation. It is useful when adding user in USM MIB. An instance of <CODE> SnmpUsmKeyHandler </CODE> is associated to each <CODE> SnmpEngine </CODE> object.
- * When computing key, an authentication algorithm is needed. The supported ones are : usmHMACMD5AuthProtocol and usmHMACSHAAuthProtocol.
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- * @since 1.5
- */
-public interface SnmpUsmKeyHandler {
-
-    /**
-     * DES privacy algorithm key size. To be used when localizing privacy key
-     */
-    public static int DES_KEY_SIZE = 16;
-
-    /**
-     * DES privacy algorithm delta size. To be used when calculing privacy key delta.
-     */
-    public static int DES_DELTA_SIZE = 16;
-
-    /**
-     * Translate a password to a key. It MUST be compliant to RFC 2574 description.
-     * @param algoName The authentication algorithm to use.
-     * @param password Password to convert.
-     * @return The key.
-     * @exception IllegalArgumentException If the algorithm is unknown.
-     */
-    public byte[] password_to_key(String algoName, String password) throws IllegalArgumentException;
-    /**
-     * Localize the passed key using the passed <CODE>SnmpEngineId</CODE>. It MUST be compliant to RFC 2574 description.
-     * @param algoName The authentication algorithm to use.
-     * @param key The key to localize;
-     * @param engineId The Id used to localize the key.
-     * @return The localized key.
-     * @exception IllegalArgumentException If the algorithm is unknown.
-     */
-    public byte[] localizeAuthKey(String algoName, byte[] key, SnmpEngineId engineId) throws IllegalArgumentException;
-
-    /**
-     * Localize the passed privacy key using the passed <CODE>SnmpEngineId</CODE>. It MUST be compliant to RFC 2574 description.
-     * @param algoName The authentication algorithm to use.
-     * @param key The key to localize;
-     * @param engineId The Id used to localize the key.
-     * @param keysize The privacy algorithm key size.
-     * @return The localized key.
-     * @exception IllegalArgumentException If the algorithm is unknown.
-     */
-    public byte[] localizePrivKey(String algoName, byte[] key, SnmpEngineId engineId,int keysize) throws IllegalArgumentException;
-
-    /**
-     * Calculate the delta parameter needed when processing key change. This computation is done by the key change initiator. It MUST be compliant to RFC 2574 description.
-     * @param algoName The authentication algorithm to use.
-     * @param oldKey The old key.
-     * @param newKey The new key.
-     * @param random The random value.
-     * @return The delta.
-     * @exception IllegalArgumentException If the algorithm is unknown.
-     */
-    public byte[] calculateAuthDelta(String algoName, byte[] oldKey, byte[] newKey, byte[] random) throws IllegalArgumentException;
-
-    /**
-     * Calculate the delta parameter needed when processing key change for a privacy algorithm. This computation is done by the key change initiator. It MUST be compliant to RFC 2574 description.
-     * @param algoName The authentication algorithm to use.
-     * @param oldKey The old key.
-     * @param newKey The new key.
-     * @param random The random value.
-     * @param deltaSize The algo delta size.
-     * @return The delta.
-     * @exception IllegalArgumentException If the algorithm is unknown.
-     */
-    public byte[] calculatePrivDelta(String algoName, byte[] oldKey, byte[] newKey, byte[] random, int deltaSize) throws IllegalArgumentException;
-
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpV3Message.java b/ojluni/src/main/java/com/sun/jmx/snmp/SnmpV3Message.java
deleted file mode 100755
index bcdcc3e..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpV3Message.java
+++ /dev/null
@@ -1,511 +0,0 @@
-/*
- * Copyright (c) 2001, 2006, 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.jmx.snmp;
-
-// java imports
-//
-import java.util.Vector;
-import java.util.logging.Level;
-import java.net.InetAddress;
-
-// import debug stuff
-//
-import static com.sun.jmx.defaults.JmxProperties.SNMP_LOGGER;
-import com.sun.jmx.snmp.internal.SnmpMsgProcessingSubSystem;
-import com.sun.jmx.snmp.internal.SnmpSecurityModel;
-import com.sun.jmx.snmp.internal.SnmpDecryptedPdu;
-import com.sun.jmx.snmp.internal.SnmpSecurityCache;
-
-import com.sun.jmx.snmp.SnmpMsg;
-import com.sun.jmx.snmp.SnmpPdu;
-import com.sun.jmx.snmp.SnmpStatusException;
-import com.sun.jmx.snmp.SnmpTooBigException;
-import com.sun.jmx.snmp.SnmpScopedPduBulk;
-import com.sun.jmx.snmp.BerException;
-import com.sun.jmx.snmp.SnmpScopedPduRequest;
-import com.sun.jmx.snmp.BerDecoder;
-import com.sun.jmx.snmp.SnmpDefinitions;
-import com.sun.jmx.snmp.SnmpEngineId;
-import com.sun.jmx.snmp.SnmpScopedPduPacket;
-import com.sun.jmx.snmp.BerEncoder;
-import com.sun.jmx.snmp.SnmpPduRequestType;
-import com.sun.jmx.snmp.SnmpPduBulkType;
-
-/**
- * Is a partially decoded representation of an SNMP V3 packet.
- * <P>
- * This class can be used when developing customized manager or agent.
- * <P>
- * The <CODE>SnmpV3Message</CODE> class is directly mapped onto the
- * message syntax defined in RFC 2572.
- * <BLOCKQUOTE>
- * <PRE>
- * SNMPv3Message ::= SEQUENCE {
- *          msgVersion INTEGER ( 0 .. 2147483647 ),
- *          -- administrative parameters
- *          msgGlobalData HeaderData,
- *          -- security model-specific parameters
- *          -- format defined by Security Model
- *          msgSecurityParameters OCTET STRING,
- *          msgData  ScopedPduData
- *      }
- *     HeaderData ::= SEQUENCE {
- *         msgID      INTEGER (0..2147483647),
- *         msgMaxSize INTEGER (484..2147483647),
- *
- *         msgFlags   OCTET STRING (SIZE(1)),
- *                    --  .... ...1   authFlag
- *                    --  .... ..1.   privFlag
- *                    --  .... .1..   reportableFlag
- *                    --              Please observe:
- *                    --  .... ..00   is OK, means noAuthNoPriv
- *                    --  .... ..01   is OK, means authNoPriv
- *                    --  .... ..10   reserved, must NOT be used.
- *                    --  .... ..11   is OK, means authPriv
- *
- *         msgSecurityModel INTEGER (1..2147483647)
- *     }
- * </BLOCKQUOTE>
- * </PRE>
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- * @since 1.5
- */
-public class SnmpV3Message extends SnmpMsg {
-
-    /**
-     * Message identifier.
-     */
-    public int msgId = 0;
-
-    /**
-     * Message max size the pdu sender can deal with.
-     */
-    public int msgMaxSize = 0;
-    /**
-     * Message flags. Reportable flag  and security level.</P>
-     *<PRE>
-     * --  .... ...1   authFlag
-     * --  .... ..1.   privFlag
-     * --  .... .1..   reportableFlag
-     * --              Please observe:
-     * --  .... ..00   is OK, means noAuthNoPriv
-     * --  .... ..01   is OK, means authNoPriv
-     * --  .... ..10   reserved, must NOT be used.
-     * --  .... ..11   is OK, means authPriv
-     *</PRE>
-     */
-    public byte msgFlags = 0;
-    /**
-     * The security model the security sub system MUST use in order to deal with this pdu (eg: User based Security Model Id = 3).
-     */
-    public int msgSecurityModel = 0;
-    /**
-     * The unmarshalled security parameters.
-     */
-    public byte[] msgSecurityParameters = null;
-    /**
-     * The context engine Id in which the pdu must be handled (Generaly the local engine Id).
-     */
-    public byte[] contextEngineId = null;
-    /**
-     * The context name in which the OID has to be interpreted.
-     */
-    public byte[] contextName = null;
-    /** The encrypted form of the scoped pdu (Only relevant when dealing with privacy).
-     */
-    public byte[] encryptedPdu = null;
-
-    /**
-     * Constructor.
-     *
-     */
-    public SnmpV3Message() {
-    }
-    /**
-     * Encodes this message and puts the result in the specified byte array.
-     * For internal use only.
-     *
-     * @param outputBytes An array to receive the resulting encoding.
-     *
-     * @exception ArrayIndexOutOfBoundsException If the result does not fit
-     *                                           into the specified array.
-     */
-    public int encodeMessage(byte[] outputBytes)
-        throws SnmpTooBigException {
-        int encodingLength = 0;
-        if (SNMP_LOGGER.isLoggable(Level.FINER)) {
-            SNMP_LOGGER.logp(Level.FINER, SnmpV3Message.class.getName(),
-                    "encodeMessage",
-                    "Can't encode directly V3Message! Need a SecuritySubSystem");
-        }
-        throw new IllegalArgumentException("Can't encode");
-    }
-
-    /**
-     * Decodes the specified bytes and initializes this message.
-     * For internal use only.
-     *
-     * @param inputBytes The bytes to be decoded.
-     *
-     * @exception SnmpStatusException If the specified bytes are not a valid encoding.
-     */
-    public void decodeMessage(byte[] inputBytes, int byteCount)
-        throws SnmpStatusException {
-
-        try {
-            BerDecoder bdec = new BerDecoder(inputBytes);
-            bdec.openSequence();
-            version = bdec.fetchInteger();
-            bdec.openSequence();
-            msgId = bdec.fetchInteger();
-            msgMaxSize = bdec.fetchInteger();
-            msgFlags = bdec.fetchOctetString()[0];
-            msgSecurityModel =bdec.fetchInteger();
-            bdec.closeSequence();
-            msgSecurityParameters = bdec.fetchOctetString();
-            if( (msgFlags & SnmpDefinitions.privMask) == 0 ) {
-                bdec.openSequence();
-                contextEngineId = bdec.fetchOctetString();
-                contextName = bdec.fetchOctetString();
-                data = bdec.fetchAny();
-                dataLength = data.length;
-                bdec.closeSequence();
-            }
-            else {
-                encryptedPdu = bdec.fetchOctetString();
-            }
-            bdec.closeSequence() ;
-        }
-        catch(BerException x) {
-            x.printStackTrace();
-            throw new SnmpStatusException("Invalid encoding") ;
-        }
-
-        if (SNMP_LOGGER.isLoggable(Level.FINER)) {
-            final StringBuilder strb = new StringBuilder()
-            .append("Unmarshalled message : \n")
-            .append("version : ").append(version)
-            .append("\n")
-            .append("msgId : ").append(msgId)
-            .append("\n")
-            .append("msgMaxSize : ").append(msgMaxSize)
-            .append("\n")
-            .append("msgFlags : ").append(msgFlags)
-            .append("\n")
-            .append("msgSecurityModel : ").append(msgSecurityModel)
-            .append("\n")
-            .append("contextEngineId : ").append(contextEngineId == null ? null :
-                SnmpEngineId.createEngineId(contextEngineId))
-            .append("\n")
-            .append("contextName : ").append(contextName)
-            .append("\n")
-            .append("data : ").append(data)
-            .append("\n")
-            .append("dat len : ").append((data == null) ? 0 : data.length)
-            .append("\n")
-            .append("encryptedPdu : ").append(encryptedPdu)
-            .append("\n");
-            SNMP_LOGGER.logp(Level.FINER, SnmpV3Message.class.getName(),
-                    "decodeMessage", strb.toString());
-        }
-    }
-
-    /**
-     * Returns the associated request Id.
-     * @param data The flat message.
-     * @return The request Id.
-     */
-    public int getRequestId(byte[] data) throws SnmpStatusException {
-        BerDecoder bdec = null;
-        int msgId = 0;
-        try {
-            bdec = new BerDecoder(data);
-            bdec.openSequence();
-            bdec.fetchInteger();
-            bdec.openSequence();
-            msgId = bdec.fetchInteger();
-        }catch(BerException x) {
-            throw new SnmpStatusException("Invalid encoding") ;
-        }
-        try {
-            bdec.closeSequence();
-        }
-        catch(BerException x) {
-        }
-
-        return msgId;
-    }
-
-    /**
-     * Initializes this message with the specified <CODE>pdu</CODE>.
-     * <P>
-     * This method initializes the data field with an array of
-     * <CODE>maxDataLength</CODE> bytes. It encodes the <CODE>pdu</CODE>.
-     * The resulting encoding is stored in the data field
-     * and the length of the encoding is stored in <CODE>dataLength</CODE>.
-     * <p>
-     * If the encoding length exceeds <CODE>maxDataLength</CODE>,
-     * the method throws an exception.
-     *
-     * @param p The PDU to be encoded.
-     * @param maxDataLength The maximum length permitted for the data field.
-     *
-     * @exception SnmpStatusException If the specified <CODE>pdu</CODE>
-     *   is not valid.
-     * @exception SnmpTooBigException If the resulting encoding does not fit
-     * into <CODE>maxDataLength</CODE> bytes.
-     * @exception ArrayIndexOutOfBoundsException If the encoding exceeds
-     *    <CODE>maxDataLength</CODE>.
-     */
-    public void encodeSnmpPdu(SnmpPdu p,
-                              int maxDataLength)
-        throws SnmpStatusException, SnmpTooBigException {
-
-        SnmpScopedPduPacket pdu = (SnmpScopedPduPacket) p;
-
-        if (SNMP_LOGGER.isLoggable(Level.FINER)) {
-            final StringBuilder strb = new StringBuilder()
-            .append("PDU to marshall: \n")
-            .append("security parameters : ").append(pdu.securityParameters)
-            .append("\n")
-            .append("type : ").append(pdu.type)
-            .append("\n")
-            .append("version : ").append(pdu.version)
-            .append("\n")
-            .append("requestId : ").append(pdu.requestId)
-            .append("\n")
-            .append("msgId : ").append(pdu.msgId)
-            .append("\n")
-            .append("msgMaxSize : ").append(pdu.msgMaxSize)
-            .append("\n")
-            .append("msgFlags : ").append(pdu.msgFlags)
-            .append("\n")
-            .append("msgSecurityModel : ").append(pdu.msgSecurityModel)
-            .append("\n")
-            .append("contextEngineId : ").append(pdu.contextEngineId)
-            .append("\n")
-            .append("contextName : ").append(pdu.contextName)
-            .append("\n");
-            SNMP_LOGGER.logp(Level.FINER, SnmpV3Message.class.getName(),
-                    "encodeSnmpPdu", strb.toString());
-        }
-
-        version = pdu.version;
-        address = pdu.address;
-        port = pdu.port;
-        msgId = pdu.msgId;
-        msgMaxSize = pdu.msgMaxSize;
-        msgFlags = pdu.msgFlags;
-        msgSecurityModel = pdu.msgSecurityModel;
-
-        contextEngineId = pdu.contextEngineId;
-        contextName = pdu.contextName;
-
-        securityParameters = pdu.securityParameters;
-
-        //
-        // Allocate the array to receive the encoding.
-        //
-        data = new byte[maxDataLength];
-
-        //
-        // Encode the pdu
-        // Reminder: BerEncoder does backward encoding !
-        //
-
-        try {
-            BerEncoder benc = new BerEncoder(data) ;
-            benc.openSequence() ;
-            encodeVarBindList(benc, pdu.varBindList) ;
-
-            switch(pdu.type) {
-
-            case pduGetRequestPdu :
-            case pduGetNextRequestPdu :
-            case pduInformRequestPdu :
-            case pduGetResponsePdu :
-            case pduSetRequestPdu :
-            case pduV2TrapPdu :
-            case pduReportPdu :
-                SnmpPduRequestType reqPdu = (SnmpPduRequestType) pdu;
-                benc.putInteger(reqPdu.getErrorIndex());
-                benc.putInteger(reqPdu.getErrorStatus());
-                benc.putInteger(pdu.requestId);
-                break;
-
-            case pduGetBulkRequestPdu :
-                SnmpPduBulkType bulkPdu = (SnmpPduBulkType) pdu;
-                benc.putInteger(bulkPdu.getMaxRepetitions());
-                benc.putInteger(bulkPdu.getNonRepeaters());
-                benc.putInteger(pdu.requestId);
-                break ;
-
-            default:
-                throw new SnmpStatusException("Invalid pdu type " + String.valueOf(pdu.type)) ;
-            }
-            benc.closeSequence(pdu.type) ;
-            dataLength = benc.trim() ;
-        }
-        catch(ArrayIndexOutOfBoundsException x) {
-            throw new SnmpTooBigException() ;
-        }
-    }
-
-
-    /**
-     * Gets the PDU encoded in this message.
-     * <P>
-     * This method decodes the data field and returns the resulting PDU.
-     *
-     * @return The resulting PDU.
-     * @exception SnmpStatusException If the encoding is not valid.
-     */
-
-    public SnmpPdu decodeSnmpPdu()
-        throws SnmpStatusException {
-
-        SnmpScopedPduPacket pdu = null;
-
-        BerDecoder bdec = new BerDecoder(data) ;
-        try {
-            int type = bdec.getTag() ;
-            bdec.openSequence(type) ;
-            switch(type) {
-
-            case pduGetRequestPdu :
-            case pduGetNextRequestPdu :
-            case pduInformRequestPdu :
-            case pduGetResponsePdu :
-            case pduSetRequestPdu :
-            case pduV2TrapPdu :
-            case pduReportPdu :
-                SnmpScopedPduRequest reqPdu = new SnmpScopedPduRequest() ;
-                reqPdu.requestId = bdec.fetchInteger() ;
-                reqPdu.setErrorStatus(bdec.fetchInteger());
-                reqPdu.setErrorIndex(bdec.fetchInteger());
-                pdu = reqPdu ;
-                break ;
-
-            case pduGetBulkRequestPdu :
-                SnmpScopedPduBulk bulkPdu = new SnmpScopedPduBulk() ;
-                bulkPdu.requestId = bdec.fetchInteger() ;
-                bulkPdu.setNonRepeaters(bdec.fetchInteger());
-                bulkPdu.setMaxRepetitions(bdec.fetchInteger());
-                pdu = bulkPdu ;
-                break ;
-            default:
-                throw new SnmpStatusException(snmpRspWrongEncoding) ;
-            }
-            pdu.type = type;
-            pdu.varBindList = decodeVarBindList(bdec);
-            bdec.closeSequence() ;
-        } catch(BerException e) {
-            if (SNMP_LOGGER.isLoggable(Level.FINEST)) {
-                SNMP_LOGGER.logp(Level.FINEST, SnmpV3Message.class.getName(),
-                        "decodeSnmpPdu", "BerException", e);
-            }
-            throw new SnmpStatusException(snmpRspWrongEncoding);
-        }
-
-        //
-        // The easy work.
-        //
-        pdu.address = address;
-        pdu.port = port;
-        pdu.msgFlags = msgFlags;
-        pdu.version = version;
-        pdu.msgId = msgId;
-        pdu.msgMaxSize = msgMaxSize;
-        pdu.msgSecurityModel = msgSecurityModel;
-        pdu.contextEngineId = contextEngineId;
-        pdu.contextName = contextName;
-
-        pdu.securityParameters = securityParameters;
-
-        if (SNMP_LOGGER.isLoggable(Level.FINER)) {
-            final StringBuilder strb = new StringBuilder()
-            .append("Unmarshalled PDU : \n")
-            .append("type : ").append(pdu.type)
-            .append("\n")
-            .append("version : ").append(pdu.version)
-            .append("\n")
-            .append("requestId : ").append(pdu.requestId)
-            .append("\n")
-            .append("msgId : ").append(pdu.msgId)
-            .append("\n")
-            .append("msgMaxSize : ").append(pdu.msgMaxSize)
-            .append("\n")
-            .append("msgFlags : ").append(pdu.msgFlags)
-            .append("\n")
-            .append("msgSecurityModel : ").append(pdu.msgSecurityModel)
-            .append("\n")
-            .append("contextEngineId : ").append(pdu.contextEngineId)
-            .append("\n")
-            .append("contextName : ").append(pdu.contextName)
-            .append("\n");
-            SNMP_LOGGER.logp(Level.FINER, SnmpV3Message.class.getName(),
-                    "decodeSnmpPdu", strb.toString());
-        }
-        return pdu ;
-    }
-
-    /**
-     * Dumps this message in a string.
-     *
-     * @return The string containing the dump.
-     */
-    public String printMessage() {
-        StringBuffer sb = new StringBuffer();
-        sb.append("msgId : " + msgId + "\n");
-        sb.append("msgMaxSize : " + msgMaxSize + "\n");
-        sb.append("msgFlags : " + msgFlags + "\n");
-        sb.append("msgSecurityModel : " + msgSecurityModel + "\n");
-
-        if (contextEngineId == null) {
-            sb.append("contextEngineId : null");
-        }
-        else {
-            sb.append("contextEngineId : {\n");
-            sb.append(dumpHexBuffer(contextEngineId,
-                                    0,
-                                    contextEngineId.length));
-            sb.append("\n}\n");
-        }
-
-        if (contextName == null) {
-            sb.append("contextName : null");
-        }
-        else {
-            sb.append("contextName : {\n");
-            sb.append(dumpHexBuffer(contextName,
-                                    0,
-                                    contextName.length));
-            sb.append("\n}\n");
-        }
-        return sb.append(super.printMessage()).toString();
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpValue.java b/ojluni/src/main/java/com/sun/jmx/snmp/SnmpValue.java
deleted file mode 100755
index 9afac04..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/SnmpValue.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Copyright (c) 1997, 2007, 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.jmx.snmp;
-
-
-
-import java.io.Serializable;
-
-/**
- * Is an abstract representation of an SNMP Value.
- * All classes provided for dealing with SNMP types should derive from this
- * class.
- *
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- */
-
-public abstract class SnmpValue implements Cloneable, Serializable, SnmpDataTypeEnums {
-
-    /**
-     * Returns a <CODE>String</CODE> form containing ASN.1 tagging information.
-     * @return The <CODE>String</CODE> form.
-     */
-    public String toAsn1String() {
-        return "[" + getTypeName() + "] " + toString();
-    }
-
-    /**
-     * Returns the value encoded as an OID.
-     * The method is particularly useful when dealing with indexed table made of
-     * several SNMP variables.
-     * @return The value encoded as an OID.
-     */
-    public abstract SnmpOid toOid() ;
-
-    /**
-     * Returns a textual description of the object.
-     * @return ASN.1 textual description.
-     */
-    public abstract String getTypeName() ;
-
-    /**
-     * Same as clone, but you cannot perform cloning using this object because
-     * clone is protected. This method should call <CODE>clone()</CODE>.
-     * @return The <CODE>SnmpValue</CODE> clone.
-     */
-    public abstract SnmpValue duplicate() ;
-
-    /**
-     * This method returns <CODE>false</CODE> by default and is redefined
-     * in the {@link com.sun.jmx.snmp.SnmpNull} class.
-     */
-    public boolean isNoSuchObjectValue() {
-        return false;
-    }
-
-    /**
-     * This method returns <CODE>false</CODE> by default and is redefined
-     * in the {@link com.sun.jmx.snmp.SnmpNull} class.
-     */
-    public boolean isNoSuchInstanceValue() {
-        return false;
-    }
-
-    /**
-     * This method returns <CODE>false</CODE> by default and is redefined
-     * in the {@link com.sun.jmx.snmp.SnmpNull} class.
-     */
-    public boolean isEndOfMibViewValue() {
-        return false;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/ThreadContext.java b/ojluni/src/main/java/com/sun/jmx/snmp/ThreadContext.java
deleted file mode 100755
index a6f35e0..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/ThreadContext.java
+++ /dev/null
@@ -1,326 +0,0 @@
-/*
- * Copyright (c) 2000, 2007, 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.jmx.snmp;
-
-import java.util.Stack;
-import java.util.EmptyStackException;
-
-/**
- * <p><b>Warning: The interface of this class is subject to change.
- * Use at your own risk.</b></p>
- *
- * <p>This class associates a context with each thread that
- * references it.  The context is a set of mappings between Strings
- * and Objects.  It is managed as a stack, typically with code like
- * this:</p>
- *
- * <pre>
- * ThreadContext oldContext = ThreadContext.push(myKey, myObject);
- * // plus possibly further calls to ThreadContext.push...
- * try {
- *      doSomeOperation();
- * } finally {
- *      ThreadContext.restore(oldContext);
- * }
- * </pre>
- *
- * <p>The <code>try</code>...<code>finally</code> block ensures that
- * the <code>restore</code> is done even if
- * <code>doSomeOperation</code> terminates abnormally (with an
- * exception).</p>
- *
- * <p>A thread can consult its own context using
- * <code>ThreadContext.get(myKey)</code>.  The result is the
- * value that was most recently pushed with the given key.</p>
- *
- * <p>A thread cannot read or modify the context of another thread.</p>
- *
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- */
-public class ThreadContext implements Cloneable {
-
-    /* The context of a thread is stored as a linked list.  At the
-       head of the list is the value returned by localContext.get().
-       At the tail of the list is a sentinel ThreadContext value with
-       "previous" and "key" both null.  There is a different sentinel
-       object for each thread.
-
-       Because a null key indicates the sentinel, we reject attempts to
-       push context entries with a null key.
-
-       The reason for using a sentinel rather than just terminating
-       the list with a null reference is to protect against incorrect
-       or even malicious code.  If you have a reference to the
-       sentinel value, you can erase the context stack.  Only the
-       caller of the first "push" that put something on the stack can
-       get such a reference, so if that caller does not give this
-       reference away, no one else can erase the stack.
-
-       If the restore method took a null reference to mean an empty
-       stack, anyone could erase the stack, since anyone can make a
-       null reference.
-
-       When the stack is empty, we discard the sentinel object and
-       have localContext.get() return null.  Then we recreate the
-       sentinel object on the first subsequent push.
-
-       ThreadContext objects are immutable.  As a consequence, you can
-       give a ThreadContext object to setInitialContext that is no
-       longer current.  But the interface says this can be rejected,
-       in case we remove immutability later.  */
-
-    /* We have to comment out "final" here because of a bug in the JDK1.1
-       compiler.  Uncomment it when we discard 1.1 compatibility.  */
-    private /*final*/ ThreadContext previous;
-    private /*final*/ String key;
-    private /*final*/ Object value;
-
-    private ThreadContext(ThreadContext previous, String key, Object value) {
-        this.previous = previous;
-        this.key = key;
-        this.value = value;
-    }
-
-    /**
-     * <p>Get the Object that was most recently pushed with the given key.</p>
-     *
-     * @param key the key of interest.
-     *
-     * @return the last Object that was pushed (using
-     * <code>push</code>) with that key and not subsequently canceled
-     * by a <code>restore</code>; or null if there is no such object.
-     * A null return value may also indicate that the last Object
-     * pushed was the value <code>null</code>.  Use the
-     * <code>contains</code> method to distinguish this case from the
-     * case where there is no Object.
-     *
-     * @exception IllegalArgumentException if <code>key</code> is null.
-     */
-    public static Object get(String key) throws IllegalArgumentException {
-        ThreadContext context = contextContaining(key);
-        if (context == null)
-            return null;
-        else
-            return context.value;
-    }
-
-    /**
-     * <p>Check whether a value with the given key exists in the stack.
-     * This means that the <code>push</code> method was called with
-     * this key and it was not cancelled by a subsequent
-     * <code>restore</code>.  This method is useful when the
-     * <code>get</code> method returns null, to distinguish between
-     * the case where the key exists in the stack but is associated
-     * with a null value, and the case where the key does not exist in
-     * the stack.</p>
-     *
-     * @return true if the key exists in the stack.
-     *
-     * @exception IllegalArgumentException if <code>key</code> is null.
-     */
-    public static boolean contains(String key)
-            throws IllegalArgumentException {
-        return (contextContaining(key) != null);
-    }
-
-    /**
-     * <p>Find the ThreadContext in the stack that contains the given key,
-     * or return null if there is none.</p>
-     *
-     * @exception IllegalArgumentException if <code>key</code> is null.
-     */
-    private static ThreadContext contextContaining(String key)
-            throws IllegalArgumentException {
-        if (key == null)
-            throw new IllegalArgumentException("null key");
-        for (ThreadContext context = getContext();
-             context != null;
-             context = context.previous) {
-            if (key.equals(context.key))
-                return context;
-            /* Note that "context.key" may be null if "context" is the
-               sentinel, so don't write "if (context.key.equals(key))"!  */
-        }
-        return null;
-    }
-
-//  /**
-//   * Change the value that was most recently associated with the given key
-//   * in a <code>push</code> operation not cancelled by a subsequent
-//   * <code>restore</code>.  If there is no such association, nothing happens
-//   * and the return value is null.
-//   *
-//   * @param key the key of interest.
-//   * @param value the new value to associate with that key.
-//   *
-//   * @return the value that was previously associated with the key, or null
-//   * if the key does not exist in the stack.
-//   *
-//   * @exception IllegalArgumentException if <code>key</code> is null.
-//   */
-//  public static Object set(String key, Object value)
-//          throws IllegalArgumentException {
-//      ThreadContext context = contextContaining(key);
-//      if (context == null)
-//          return null;
-//      Object old = context.value;
-//      context.value = value;
-//      return old;
-//  }
-
-    /**
-     * <p>Push an object on the context stack with the given key.
-     * This operation can subsequently be undone by calling
-     * <code>restore</code> with the ThreadContext value returned
-     * here.</p>
-     *
-     * @param key the key that will be used to find the object while it is
-     * on the stack.
-     * @param value the value to be associated with that key.  It may be null.
-     *
-     * @return a ThreadContext that can be given to <code>restore</code> to
-     * restore the stack to its state before the <code>push</code>.
-     *
-     * @exception IllegalArgumentException if <code>key</code> is null.
-     */
-    public static ThreadContext push(String key, Object value)
-            throws IllegalArgumentException {
-        if (key == null)
-            throw new IllegalArgumentException("null key");
-
-        ThreadContext oldContext = getContext();
-        if (oldContext == null)
-            oldContext = new ThreadContext(null, null, null);  // make sentinel
-        ThreadContext newContext = new ThreadContext(oldContext, key, value);
-        setContext(newContext);
-        return oldContext;
-    }
-
-    /**
-     * <p>Return an object that can later be supplied to <code>restore</code>
-     * to restore the context stack to its current state.  The object can
-     * also be given to <code>setInitialContext</code>.</p>
-     *
-     * @return a ThreadContext that represents the current context stack.
-     */
-    public static ThreadContext getThreadContext() {
-        return getContext();
-    }
-
-    /**
-     * <p>Restore the context stack to an earlier state.  This typically
-     * undoes the effect of one or more <code>push</code> calls.</p>
-     *
-     * @param oldContext the state to return.  This is usually the return
-     * value of an earlier <code>push</code> operation.
-     *
-     * @exception NullPointerException if <code>oldContext</code> is null.
-     * @exception IllegalArgumentException if <code>oldContext</code>
-     * does not represent a context from this thread, or if that
-     * context was undone by an earlier <code>restore</code>.
-     */
-    public static void restore(ThreadContext oldContext)
-            throws NullPointerException, IllegalArgumentException {
-        /* The following test is not strictly necessary in the code as it
-           stands today, since the reference to "oldContext.key" would
-           generate a NullPointerException anyway.  But if someone
-           didn't notice that during subsequent changes, they could
-           accidentally permit restore(null) with the semantics of
-           trashing the context stack.  */
-        if (oldContext == null)
-            throw new NullPointerException();
-
-        /* Check that the restored context is in the stack.  */
-        for (ThreadContext context = getContext();
-             context != oldContext;
-             context = context.previous) {
-            if (context == null) {
-                throw new IllegalArgumentException("Restored context is not " +
-                                                   "contained in current " +
-                                                   "context");
-            }
-        }
-
-        /* Discard the sentinel if the stack is empty.  This means that it
-           is an error to call "restore" a second time with the
-           ThreadContext value that means an empty stack.  That's why we
-           don't say that it is all right to restore the stack to the
-           state it was already in.  */
-        if (oldContext.key == null)
-            oldContext = null;
-
-        setContext(oldContext);
-    }
-
-    /**
-     * <p>Set the initial context of the calling thread to a context obtained
-     * from another thread.  After this call, the calling thread will see
-     * the same results from the <code>get</code> method as the thread
-     * from which the <code>context</code> argument was obtained, at the
-     * time it was obtained.</p>
-     *
-     * <p>The <code>context</code> argument must be the result of an earlier
-     * <code>push</code> or <code>getThreadContext</code> call.  It is an
-     * error (which may or may not be detected) if this context has been
-     * undone by a <code>restore</code>.</p>
-     *
-     * <p>The context stack of the calling thread must be empty before this
-     * call, i.e., there must not have been a <code>push</code> not undone
-     * by a subsequent <code>restore</code>.</p>
-     *
-     * @exception IllegalArgumentException if the context stack was
-     * not empty before the call.  An implementation may also throw this
-     * exception if <code>context</code> is no longer current in the
-     * thread from which it was obtained.
-     */
-    /* We rely on the fact that ThreadContext objects are immutable.
-       This means that we don't have to check that the "context"
-       argument is valid.  It necessarily represents the head of a
-       valid chain of ThreadContext objects, even if the thread from
-       which it was obtained has subsequently been set to a point
-       later in that chain using "restore".  */
-    public void setInitialContext(ThreadContext context)
-            throws IllegalArgumentException {
-        /* The following test assumes that we discard sentinels when the
-           stack is empty.  */
-        if (getContext() != null)
-            throw new IllegalArgumentException("previous context not empty");
-        setContext(context);
-    }
-
-    private static ThreadContext getContext() {
-        return localContext.get();
-    }
-
-    private static void setContext(ThreadContext context) {
-        localContext.set(context);
-    }
-
-    private static ThreadLocal<ThreadContext> localContext =
-            new ThreadLocal<ThreadContext>();
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/UserAcl.java b/ojluni/src/main/java/com/sun/jmx/snmp/UserAcl.java
deleted file mode 100755
index 7e916d7..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/UserAcl.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Copyright (c) 2001, 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.
- */
-
-package com.sun.jmx.snmp;
-
-
-// java import
-//
-import java.util.Enumeration;
-import java.net.InetAddress;
-
-/**
- * Defines the user based ACL used by the SNMP protocol adaptor.
- * <p>
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- * @since 1.5
- */
-
-public interface UserAcl {
-
-    /**
-     * Returns the name of the ACL.
-     *
-     * @return The name of the ACL.
-     */
-    public String getName();
-
-    /**
-     * Checks whether or not the specified user has <CODE>READ</CODE> access.
-     *
-     * @param user The user name to check.
-     *
-     * @return <CODE>true</CODE> if the host has read permission, <CODE>false</CODE> otherwise.
-     */
-    public boolean checkReadPermission(String user);
-
-    /**
-     * Checks whether or not the specified user and context name have <CODE>READ</CODE> access.
-     *
-     * @param user The user name to check.
-     * @param contextName The context name associated with the user.
-     * @param securityLevel The request security level.
-     * @return <CODE>true</CODE> if the pair (user, context) has read permission, <CODE>false</CODE> otherwise.
-     */
-    public boolean checkReadPermission(String user, String contextName, int securityLevel);
-
-    /**
-     * Checks whether or not a context name is defined.
-     *
-     * @param contextName The context name to check.
-     *
-     * @return <CODE>true</CODE> if the context is known, <CODE>false</CODE> otherwise.
-     */
-    public boolean checkContextName(String contextName);
-
-    /**
-     * Checks whether or not the specified user has <CODE>WRITE</CODE> access.
-     *
-     * @param user The user to check.
-     *
-     * @return <CODE>true</CODE> if the user has write permission, <CODE>false</CODE> otherwise.
-     */
-    public boolean checkWritePermission(String user);
-
-    /**
-     * Checks whether or not the specified user and context name have <CODE>WRITE</CODE> access.
-     *
-     * @param user The user name to check.
-     * @param contextName The context name associated with the user.
-     * @param securityLevel The request security level.
-     * @return <CODE>true</CODE> if the pair (user, context) has write permission, <CODE>false</CODE> otherwise.
-     */
-    public boolean checkWritePermission(String user, String contextName, int securityLevel);
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/agent/SnmpEntryOid.java b/ojluni/src/main/java/com/sun/jmx/snmp/agent/SnmpEntryOid.java
deleted file mode 100755
index d66d11c..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/agent/SnmpEntryOid.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 2000, 2006, 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.jmx.snmp.agent;
-
-import com.sun.jmx.snmp.SnmpOid;
-
-/**
- * This class only adds a new constructor to SnmpOid...
- *
- **/
-class SnmpEntryOid extends SnmpOid {
-    private static final long serialVersionUID = 9212653887791059564L;
-
-    /**
-     * Constructs a new <CODE>SnmpOid</CODE> from the specified
-     * component array, starting at given position.
-     *
-     * @param oid   The original OID array
-     * @param start The position at which to begin.
-     *
-     **/
-    public SnmpEntryOid(long[] oid, int start) {
-        final int subLength = oid.length - start;
-        final long[] subOid = new long[subLength];
-        java.lang.System.arraycopy(oid, start, subOid, 0, subLength) ;
-        components = subOid;
-        componentCount = subLength;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/agent/SnmpErrorHandlerAgent.java b/ojluni/src/main/java/com/sun/jmx/snmp/agent/SnmpErrorHandlerAgent.java
deleted file mode 100755
index 35c2fb8..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/agent/SnmpErrorHandlerAgent.java
+++ /dev/null
@@ -1,206 +0,0 @@
-/*
- * Copyright (c) 2001, 2006, 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.jmx.snmp.agent;
-
-import java.io.Serializable;
-import java.util.Enumeration;
-import java.util.logging.Level;
-
-import javax.management.ObjectName;
-import javax.management.MBeanServer;
-
-import static com.sun.jmx.defaults.JmxProperties.SNMP_ADAPTOR_LOGGER;
-import com.sun.jmx.snmp.SnmpStatusException;
-import com.sun.jmx.snmp.SnmpDefinitions;
-import com.sun.jmx.snmp.SnmpVarBind;
-
-/**
- * A simple MIB agent that implements SNMP calls (get, set, getnext and getbulk) in a way that only errors or exceptions are returned. Every call done on this agent fails. Error handling is done according to the manager's SNMP protocol version.
- * <P>It is used by <CODE>SnmpAdaptorServer</CODE> for its default agent behavior. When a received Oid doesn't match, this agent is called to fill the result list with errors.</P>
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- * @since 1.5
- *
- */
-
-public class SnmpErrorHandlerAgent extends SnmpMibAgent
-        implements Serializable {
-    private static final long serialVersionUID = 7751082923508885650L;
-
-    public SnmpErrorHandlerAgent() {}
-
-    /**
-     * Initializes the MIB (with no registration of the MBeans into the
-     * MBean server). Does nothing.
-     *
-     * @exception IllegalAccessException The MIB cannot be initialized.
-     */
-
-    public void init() throws IllegalAccessException {
-    }
-
-    /**
-     * Initializes the MIB but each single MBean representing the MIB
-     * is inserted into the MBean server.
-     *
-     * @param server The MBean server to register the service with.
-     * @param name The object name.
-     *
-     * @return The passed name paramter.
-     *
-     * @exception java.lang.Exception
-     */
-
-    public ObjectName preRegister(MBeanServer server, ObjectName name)
-        throws Exception {
-        return name;
-    }
-
-    /**
-     * Gets the root object identifier of the MIB.
-     * <P>The root object identifier is the object identifier uniquely
-     * identifying the MIB.
-     *
-     * @return The returned oid is null.
-     */
-
-    public long[] getRootOid() {
-        return null;
-    }
-
-    /**
-     * Processes a <CODE>get</CODE> operation. It will throw an exception for V1 requests or it will set exceptions within the list for V2 requests.
-     *
-     * @param inRequest The SnmpMibRequest object holding the list of variable to be retrieved.
-     *
-     * @exception SnmpStatusException An error occured during the operation.
-     */
-
-    public void get(SnmpMibRequest inRequest) throws SnmpStatusException {
-
-        SNMP_ADAPTOR_LOGGER.logp(Level.FINEST,
-                SnmpErrorHandlerAgent.class.getName(),
-                "get", "Get in Exception");
-
-        if(inRequest.getVersion() == SnmpDefinitions.snmpVersionOne)
-            throw new SnmpStatusException(SnmpStatusException.noSuchName);
-
-        Enumeration l = inRequest.getElements();
-        while(l.hasMoreElements()) {
-            SnmpVarBind varbind = (SnmpVarBind) l.nextElement();
-            varbind.setNoSuchObject();
-        }
-    }
-
-    /**
-     * Checks if a <CODE>set</CODE> operation can be performed.
-     * If the operation can not be performed, the method should emit a
-     * <CODE>SnmpStatusException</CODE>.
-     *
-     * @param inRequest The SnmpMibRequest object holding the list of variables to
-     *            be set. This list is composed of
-     *            <CODE>SnmpVarBind</CODE> objects.
-     *
-     * @exception SnmpStatusException The <CODE>set</CODE> operation
-     *    cannot be performed.
-     */
-
-    public void check(SnmpMibRequest inRequest) throws SnmpStatusException {
-
-        SNMP_ADAPTOR_LOGGER.logp(Level.FINEST,
-                SnmpErrorHandlerAgent.class.getName(),
-                "check", "Check in Exception");
-
-        throw new SnmpStatusException(SnmpDefinitions.snmpRspNotWritable);
-    }
-
-    /**
-     * Processes a <CODE>set</CODE> operation. Should never be called (check previously called having failed).
-     *
-     * @param inRequest The SnmpMibRequest object holding the list of variable to be set.
-     *
-     * @exception SnmpStatusException An error occured during the operation.
-     */
-
-    public void set(SnmpMibRequest inRequest) throws SnmpStatusException {
-
-        SNMP_ADAPTOR_LOGGER.logp(Level.FINEST,
-                SnmpErrorHandlerAgent.class.getName(),
-                "set", "Set in Exception, CANNOT be called");
-
-        throw new SnmpStatusException(SnmpDefinitions.snmpRspNotWritable);
-    }
-
-    /**
-     * Processes a <CODE>getNext</CODE> operation. It will throw an exception for V1 requests or it will set exceptions within the list for V2 requests..
-     *
-     * @param inRequest The SnmpMibRequest object holding the list of variables to be retrieved.
-     *
-     * @exception SnmpStatusException An error occured during the operation.
-     */
-
-    public void getNext(SnmpMibRequest inRequest) throws SnmpStatusException {
-
-        SNMP_ADAPTOR_LOGGER.logp(Level.FINEST,
-                SnmpErrorHandlerAgent.class.getName(),
-                "getNext", "GetNext in Exception");
-
-        if(inRequest.getVersion() == SnmpDefinitions.snmpVersionOne)
-            throw new SnmpStatusException(SnmpStatusException.noSuchName);
-
-        Enumeration l = inRequest.getElements();
-        while(l.hasMoreElements()) {
-            SnmpVarBind varbind = (SnmpVarBind) l.nextElement();
-            varbind.setEndOfMibView();
-        }
-    }
-
-    /**
-     * Processes a <CODE>getBulk</CODE> operation. It will throw an exception if the request is a V1 one or it will set exceptions within the list for V2 ones.
-     *
-     * @param inRequest The SnmpMibRequest object holding the list of variable to be retrieved.
-     *
-     * @exception SnmpStatusException An error occured during the operation.
-     */
-
-    public void getBulk(SnmpMibRequest inRequest, int nonRepeat, int maxRepeat)
-        throws SnmpStatusException {
-
-        SNMP_ADAPTOR_LOGGER.logp(Level.FINEST,
-                SnmpErrorHandlerAgent.class.getName(),
-                "getBulk", "GetBulk in Exception");
-
-        if(inRequest.getVersion() == SnmpDefinitions.snmpVersionOne)
-            throw new SnmpStatusException(SnmpDefinitions.snmpRspGenErr, 0);
-
-        Enumeration l = inRequest.getElements();
-        while(l.hasMoreElements()) {
-            SnmpVarBind varbind = (SnmpVarBind) l.nextElement();
-            varbind.setEndOfMibView();
-        }
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/agent/SnmpGenericMetaServer.java b/ojluni/src/main/java/com/sun/jmx/snmp/agent/SnmpGenericMetaServer.java
deleted file mode 100755
index cf24c92..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/agent/SnmpGenericMetaServer.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * Copyright (c) 2000, 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.
- */
-
-package com.sun.jmx.snmp.agent;
-
-// jmx imports
-//
-import com.sun.jmx.snmp.SnmpValue;
-import com.sun.jmx.snmp.SnmpStatusException;
-
-/**
- * <p>
- * This interface defines the methods that must be implemented by an
- * SNMP metadata object that needs to interact with an
- * {@link com.sun.jmx.snmp.agent.SnmpGenericObjectServer} object.
- * </p>
- *
- * <p>
- * All these methods are usually generated by <code>mibgen</code> when
- * run in generic-metadata mode.
- * </p>
- *
- * <p><b><i>
- * This interface is used internally between the generated Metadata and
- * the SNMP runtime and you shouldn't need to worry about it, because
- * you will never have to use it directly.
- * </b></i></p>
- *
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- **/
-public interface SnmpGenericMetaServer {
-
-    /**
-     * Construct an attribute value (as returned by Attribute::getValue())
-     * from an SnmpValue. The returned attribute value can be used to
-     * construct an Attribute object.
-     *
-     * @param id The OID arc identifying the variable for which the
-     *           value is constructed.
-     * @param value The SnmpValue from which the Attribute::value will be
-     *              constructed.
-     * @return The attribute value built from the given <code>value</code>.
-     * @exception SnmpStatusException if the attribute value cannot be built
-     *            from the given SnmpValue <code>value</code>.
-     *
-     */
-    Object buildAttributeValue(long id, SnmpValue value)
-        throws SnmpStatusException;
-
-    /**
-     * Construct an SnmpValue from an Attribute value as returned by
-     * Attribute::getValue().
-     *
-     * @param id The OID arc identifying the variable for which the
-     *           value is constructed.
-     * @param value The attribute value as returned by Attribute::getValue().
-     *
-     * @return The SnmpValue built from the given <code>value</code>.
-     * @exception SnmpStatusException if the SnmpValue cannot be built from
-     *            the given <code>value</code>.
-     **/
-    SnmpValue buildSnmpValue(long id, Object value)
-        throws SnmpStatusException;
-
-    /**
-     * Return the name of the attribute corresponding to the
-     * SNMP variable identified by the given <code>id</code>.
-     *
-     * @param id The OID arc identifying the variable.
-     *
-     * @return The name of the variable identified by the given
-     *         <code>id</code>.
-     *
-     * @exception SnmpStatusException if the given <code>id</code> does not
-     *            correspond to a known variable.
-     */
-    String getAttributeName(long id)
-        throws SnmpStatusException;
-
-    /**
-     * Check the access rights for a SET operation.
-     *
-     * @param x  The new requested value.
-     * @param id The OID arc identifying the variable for which the SET is
-     *           requested.
-     * @param data A contextual object containing user-data.
-     *           This object is allocated through the <code>
-     *           {@link com.sun.jmx.snmp.agent.SnmpUserDataFactory}</code>
-     *           for each incoming SNMP request.
-     * @exception SnmpStatusException if the SET operation must be rejected.
-     */
-    void checkSetAccess(SnmpValue x, long id, Object data)
-        throws SnmpStatusException;
-
-    /**
-     * Check the access rights for a GET operation.
-     *
-     * @param id The OID arc identifying the variable for which the SET is
-     *           requested.
-     * @param data A contextual object containing user-data.
-     *           This object is allocated through the <code>
-     *           {@link com.sun.jmx.snmp.agent.SnmpUserDataFactory}</code>
-     *           for each incoming SNMP request.
-     * @exception SnmpStatusException if the SET operation must be rejected.
-     */
-    void checkGetAccess(long id, Object data)
-        throws SnmpStatusException;
-
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/agent/SnmpGenericObjectServer.java b/ojluni/src/main/java/com/sun/jmx/snmp/agent/SnmpGenericObjectServer.java
deleted file mode 100755
index 547c8ca..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/agent/SnmpGenericObjectServer.java
+++ /dev/null
@@ -1,573 +0,0 @@
-/*
- * Copyright (c) 2000, 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.
- */
-
-package com.sun.jmx.snmp.agent;
-
-
-// java imports
-//
-import java.util.Vector;
-import java.util.Enumeration;
-import java.util.Iterator;
-
-// jmx imports
-//
-import javax.management.AttributeList;
-import javax.management.Attribute;
-import javax.management.MBeanException;
-import javax.management.MBeanServer;
-import javax.management.ObjectName;
-import javax.management.ReflectionException;
-import javax.management.InstanceNotFoundException;
-import javax.management.InvalidAttributeValueException;
-import javax.management.InstanceAlreadyExistsException;
-import javax.management.MBeanRegistrationException;
-import javax.management.NotCompliantMBeanException;
-import javax.management.RuntimeOperationsException;
-import com.sun.jmx.snmp.SnmpOid;
-import com.sun.jmx.snmp.SnmpValue;
-import com.sun.jmx.snmp.SnmpVarBind;
-import com.sun.jmx.snmp.SnmpStatusException;
-
-
-/**
- * <p>
- * This class is a utility class that transforms SNMP GET / SET requests
- * into standard JMX getAttributes() setAttributes() requests.
- * </p>
- *
- * <p>
- * The transformation relies on the metadata information provided by the
- * {@link com.sun.jmx.snmp.agent.SnmpGenericMetaServer} object which is
- * passed as the first parameter to every method. This SnmpGenericMetaServer
- * object is usually a Metadata object generated by <code>mibgen</code>.
- * </p>
- *
- * <p><b><i>
- * This class is used internally by mibgen generated metadata objects and
- * you should never need to use it directly.
- * </b></i></p>
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- **/
-
-public class SnmpGenericObjectServer {
-
-    // ----------------------------------------------------------------------
-    //
-    //    Protected variables
-    //
-    // ----------------------------------------------------------------------
-
-    /**
-     * The MBean server through which the MBeans will be accessed.
-     **/
-    protected final MBeanServer server;
-
-    // ----------------------------------------------------------------------
-    //
-    // Constructors
-    //
-    // ----------------------------------------------------------------------
-
-    /**
-     * Builds a new SnmpGenericObjectServer. Usually there will be a single
-     * object of this type per MIB.
-     *
-     * @param server The MBeanServer in which the MBean accessed by this
-     *               MIB are registered.
-     **/
-    public SnmpGenericObjectServer(MBeanServer server) {
-        this.server = server;
-    }
-
-    /**
-     * Execute an SNMP GET request.
-     *
-     * <p>
-     * This method first builds the list of attributes that need to be
-     * retrieved from the MBean and then calls getAttributes() on the
-     * MBean server. Then it updates the SnmpMibSubRequest with the values
-     * retrieved from the MBean.
-     * </p>
-     *
-     * <p>
-     * The SNMP metadata information is obtained through the given
-     * <code>meta</code> object, which usually is an instance of a
-     * <code>mibgen</code> generated class.
-     * </p>
-     *
-     * <p><b><i>
-     * This method is called internally by <code>mibgen</code> generated
-     * objects and you should never need to call it directly.
-     * </i></b></p>
-     *
-     * @param meta  The metadata object impacted by the subrequest
-     * @param name  The ObjectName of the MBean impacted by this subrequest
-     * @param req   The SNMP subrequest to execute on the MBean
-     * @param depth The depth of the SNMP object in the OID tree.
-     *
-     * @exception SnmpStatusException whenever an SNMP exception must be
-     *      raised. Raising an exception will abort the request.<br>
-     *      Exceptions should never be raised directly, but only by means of
-     * <code>
-     * req.registerGetException(<i>VariableId</i>,<i>SnmpStatusException</i>)
-     * </code>
-     **/
-    public void get(SnmpGenericMetaServer meta, ObjectName name,
-                    SnmpMibSubRequest req, int depth)
-        throws SnmpStatusException {
-
-        // java.lang.System.out.println(">>>>>>>>> GET " + name);
-
-        final int           size     = req.getSize();
-        final Object        data     = req.getUserData();
-        final String[]      nameList = new String[size];
-        final SnmpVarBind[] varList  = new SnmpVarBind[size];
-        final long[]        idList   = new long[size];
-        int   i = 0;
-
-        for (Enumeration e=req.getElements(); e.hasMoreElements();) {
-            final SnmpVarBind var= (SnmpVarBind) e.nextElement();
-            try {
-                final long id = var.oid.getOidArc(depth);
-                nameList[i]   = meta.getAttributeName(id);
-                varList[i]    = var;
-                idList[i]     = id;
-
-                // Check the access rights according to the MIB.
-                // The MBean might be less restrictive (have a getter
-                // while the MIB defines the variable as AFN)
-                //
-                meta.checkGetAccess(id,data);
-
-                //java.lang.System.out.println(nameList[i] + " added.");
-                i++;
-            } catch(SnmpStatusException x) {
-                //java.lang.System.out.println("exception for " + nameList[i]);
-                //x.printStackTrace();
-                req.registerGetException(var,x);
-            }
-        }
-
-        AttributeList result = null;
-        int errorCode = SnmpStatusException.noSuchInstance;
-
-        try {
-            result = server.getAttributes(name,nameList);
-        } catch (InstanceNotFoundException f) {
-            //java.lang.System.out.println(name + ": instance not found.");
-            //f.printStackTrace();
-            result = new AttributeList();
-        } catch (ReflectionException r) {
-            //java.lang.System.out.println(name + ": reflexion error.");
-            //r.printStackTrace();
-            result = new AttributeList();
-        } catch (Exception x) {
-            result = new AttributeList();
-        }
-
-
-        final Iterator it = result.iterator();
-
-        for (int j=0; j < i; j++) {
-            if (!it.hasNext()) {
-                //java.lang.System.out.println(name + "variable[" + j +
-                //                           "] absent");
-                final SnmpStatusException x =
-                    new SnmpStatusException(errorCode);
-                req.registerGetException(varList[j],x);
-                continue;
-            }
-
-            final Attribute att = (Attribute) it.next();
-
-            while ((j < i) && (! nameList[j].equals(att.getName()))) {
-                //java.lang.System.out.println(name + "variable[" +j +
-                //                           "] not found");
-                final SnmpStatusException x =
-                    new SnmpStatusException(errorCode);
-                req.registerGetException(varList[j],x);
-                j++;
-            }
-
-            if ( j == i) break;
-
-            try {
-                varList[j].value =
-                    meta.buildSnmpValue(idList[j],att.getValue());
-            } catch (SnmpStatusException x) {
-                req.registerGetException(varList[j],x);
-            }
-            //java.lang.System.out.println(att.getName() + " retrieved.");
-        }
-        //java.lang.System.out.println(">>>>>>>>> END GET");
-    }
-
-    /**
-     * Get the value of an SNMP variable.
-     *
-     * <p><b><i>
-     * You should never need to use this method directly.
-     * </i></b></p>
-     *
-     * @param meta  The impacted metadata object
-     * @param name  The ObjectName of the impacted MBean
-     * @param id    The OID arc identifying the variable we're trying to set.
-     * @param data  User contextual data allocated through the
-     *        {@link com.sun.jmx.snmp.agent.SnmpUserDataFactory}
-     *
-     * @return The value of the variable.
-     *
-     * @exception SnmpStatusException whenever an SNMP exception must be
-     *      raised. Raising an exception will abort the request. <br>
-     *      Exceptions should never be raised directly, but only by means of
-     * <code>
-     * req.registerGetException(<i>VariableId</i>,<i>SnmpStatusException</i>)
-     * </code>
-     **/
-    public SnmpValue get(SnmpGenericMetaServer meta, ObjectName name,
-                         long id, Object data)
-        throws SnmpStatusException {
-        final String attname = meta.getAttributeName(id);
-        Object result = null;
-
-        try {
-            result = server.getAttribute(name,attname);
-        } catch (MBeanException m) {
-            Exception t = m.getTargetException();
-            if (t instanceof SnmpStatusException)
-                throw (SnmpStatusException) t;
-            throw new SnmpStatusException(SnmpStatusException.noSuchInstance);
-        } catch (Exception e) {
-            throw new SnmpStatusException(SnmpStatusException.noSuchInstance);
-        }
-
-        return meta.buildSnmpValue(id,result);
-    }
-
-    /**
-     * Execute an SNMP SET request.
-     *
-     * <p>
-     * This method first builds the list of attributes that need to be
-     * set on the MBean and then calls setAttributes() on the
-     * MBean server. Then it updates the SnmpMibSubRequest with the new
-     * values retrieved from the MBean.
-     * </p>
-     *
-     * <p>
-     * The SNMP metadata information is obtained through the given
-     * <code>meta</code> object, which usually is an instance of a
-     * <code>mibgen</code> generated class.
-     * </p>
-     *
-     * <p><b><i>
-     * This method is called internally by <code>mibgen</code> generated
-     * objects and you should never need to call it directly.
-     * </i></b></p>
-     *
-     * @param meta  The metadata object impacted by the subrequest
-     * @param name  The ObjectName of the MBean impacted by this subrequest
-     * @param req   The SNMP subrequest to execute on the MBean
-     * @param depth The depth of the SNMP object in the OID tree.
-     *
-     * @exception SnmpStatusException whenever an SNMP exception must be
-     *      raised. Raising an exception will abort the request. <br>
-     *      Exceptions should never be raised directly, but only by means of
-     * <code>
-     * req.registerGetException(<i>VariableId</i>,<i>SnmpStatusException</i>)
-     * </code>
-     **/
-    public void set(SnmpGenericMetaServer meta, ObjectName name,
-                    SnmpMibSubRequest req, int depth)
-        throws SnmpStatusException {
-
-        final int size               = req.getSize();
-        final AttributeList attList  = new AttributeList(size);
-        final String[]      nameList = new String[size];
-        final SnmpVarBind[] varList  = new SnmpVarBind[size];
-        final long[]        idList   = new long[size];
-        int   i = 0;
-
-        for (Enumeration e=req.getElements(); e.hasMoreElements();) {
-            final SnmpVarBind var= (SnmpVarBind) e.nextElement();
-            try {
-                final long id = var.oid.getOidArc(depth);
-                final String attname = meta.getAttributeName(id);
-                final Object attvalue=
-                    meta.buildAttributeValue(id,var.value);
-                final Attribute att = new Attribute(attname,attvalue);
-                attList.add(att);
-                nameList[i]   = attname;
-                varList[i]    = var;
-                idList[i]     = id;
-                i++;
-            } catch(SnmpStatusException x) {
-                req.registerSetException(var,x);
-            }
-        }
-
-        AttributeList result = null;
-        int errorCode = SnmpStatusException.noAccess;
-
-        try {
-            result = server.setAttributes(name,attList);
-        } catch (InstanceNotFoundException f) {
-            result = new AttributeList();
-            errorCode = SnmpStatusException.snmpRspInconsistentName;
-        } catch (ReflectionException r) {
-            errorCode = SnmpStatusException.snmpRspInconsistentName;
-            result = new AttributeList();
-        } catch (Exception x) {
-            result = new AttributeList();
-        }
-
-        final Iterator it = result.iterator();
-
-        for (int j=0; j < i; j++) {
-            if (!it.hasNext()) {
-                final SnmpStatusException x =
-                    new SnmpStatusException(errorCode);
-                req.registerSetException(varList[j],x);
-                continue;
-            }
-
-            final Attribute att = (Attribute) it.next();
-
-            while ((j < i) && (! nameList[j].equals(att.getName()))) {
-                final SnmpStatusException x =
-                    new SnmpStatusException(SnmpStatusException.noAccess);
-                req.registerSetException(varList[j],x);
-                j++;
-            }
-
-            if ( j == i) break;
-
-            try {
-                varList[j].value =
-                    meta.buildSnmpValue(idList[j],att.getValue());
-            } catch (SnmpStatusException x) {
-                req.registerSetException(varList[j],x);
-            }
-
-        }
-    }
-
-    /**
-     * Set the value of an SNMP variable.
-     *
-     * <p><b><i>
-     * You should never need to use this method directly.
-     * </i></b></p>
-     *
-     * @param meta  The impacted metadata object
-     * @param name  The ObjectName of the impacted MBean
-     * @param x     The new requested SnmpValue
-     * @param id    The OID arc identifying the variable we're trying to set.
-     * @param data  User contextual data allocated through the
-     *        {@link com.sun.jmx.snmp.agent.SnmpUserDataFactory}
-     *
-     * @return The new value of the variable after the operation.
-     *
-     * @exception SnmpStatusException whenever an SNMP exception must be
-     *      raised. Raising an exception will abort the request. <br>
-     *      Exceptions should never be raised directly, but only by means of
-     * <code>
-     * req.registerSetException(<i>VariableId</i>,<i>SnmpStatusException</i>)
-     * </code>
-     **/
-    public SnmpValue set(SnmpGenericMetaServer meta, ObjectName name,
-                         SnmpValue x, long id, Object data)
-        throws SnmpStatusException {
-        final String attname = meta.getAttributeName(id);
-        final Object attvalue=
-            meta.buildAttributeValue(id,x);
-        final Attribute att = new Attribute(attname,attvalue);
-
-        Object result = null;
-
-        try {
-            server.setAttribute(name,att);
-            result = server.getAttribute(name,attname);
-        } catch(InvalidAttributeValueException iv) {
-            throw new
-                SnmpStatusException(SnmpStatusException.snmpRspWrongValue);
-        } catch (InstanceNotFoundException f) {
-            throw new
-                SnmpStatusException(SnmpStatusException.snmpRspInconsistentName);
-        } catch (ReflectionException r) {
-            throw new
-                SnmpStatusException(SnmpStatusException.snmpRspInconsistentName);
-        } catch (MBeanException m) {
-            Exception t = m.getTargetException();
-            if (t instanceof SnmpStatusException)
-                throw (SnmpStatusException) t;
-            throw new
-                SnmpStatusException(SnmpStatusException.noAccess);
-        } catch (Exception e) {
-            throw new
-                SnmpStatusException(SnmpStatusException.noAccess);
-        }
-
-        return meta.buildSnmpValue(id,result);
-    }
-
-    /**
-     * Checks whether an SNMP SET request can be successfully performed.
-     *
-     * <p>
-     * For each variable in the subrequest, this method calls
-     * checkSetAccess() on the meta object, and then tries to invoke the
-     * check<i>AttributeName</i>() method on the MBean. If this method
-     * is not defined then it is assumed that the SET won't fail.
-     * </p>
-     *
-     * <p><b><i>
-     * This method is called internally by <code>mibgen</code> generated
-     * objects and you should never need to call it directly.
-     * </i></b></p>
-     *
-     * @param meta  The metadata object impacted by the subrequest
-     * @param name  The ObjectName of the MBean impacted by this subrequest
-     * @param req   The SNMP subrequest to execute on the MBean
-     * @param depth The depth of the SNMP object in the OID tree.
-     *
-     * @exception SnmpStatusException if the requested SET operation must
-     *      be rejected. Raising an exception will abort the request. <br>
-     *      Exceptions should never be raised directly, but only by means of
-     * <code>
-     * req.registerCheckException(<i>VariableId</i>,<i>SnmpStatusException</i>)
-     * </code>
-     *
-     **/
-    public void check(SnmpGenericMetaServer meta, ObjectName name,
-                      SnmpMibSubRequest req, int depth)
-        throws SnmpStatusException {
-
-        final Object data = req.getUserData();
-
-        for (Enumeration e=req.getElements(); e.hasMoreElements();) {
-            final SnmpVarBind var= (SnmpVarBind) e.nextElement();
-            try {
-                final long id = var.oid.getOidArc(depth);
-                // call meta.check() here, and meta.check will call check()
-                check(meta,name,var.value,id,data);
-            } catch(SnmpStatusException x) {
-                req.registerCheckException(var,x);
-            }
-        }
-    }
-
-    /**
-     * Checks whether a SET operation can be performed on a given SNMP
-     * variable.
-     *
-     * @param meta  The impacted metadata object
-     * @param name  The ObjectName of the impacted MBean
-     * @param x     The new requested SnmpValue
-     * @param id    The OID arc identifying the variable we're trying to set.
-     * @param data  User contextual data allocated through the
-     *        {@link com.sun.jmx.snmp.agent.SnmpUserDataFactory}
-     *
-     * <p>
-     * This method calls checkSetAccess() on the meta object, and then
-     * tries to invoke the check<i>AttributeName</i>() method on the MBean.
-     * If this method is not defined then it is assumed that the SET
-     * won't fail.
-     * </p>
-     *
-     * <p><b><i>
-     * This method is called internally by <code>mibgen</code> generated
-     * objects and you should never need to call it directly.
-     * </i></b></p>
-     *
-     * @exception SnmpStatusException if the requested SET operation must
-     *      be rejected. Raising an exception will abort the request. <br>
-     *      Exceptions should never be raised directly, but only by means of
-     * <code>
-     * req.registerCheckException(<i>VariableId</i>,<i>SnmpStatusException</i>)
-     * </code>
-     *
-     **/
-    // XXX xxx ZZZ zzz Maybe we should go through the MBeanInfo here?
-    public void check(SnmpGenericMetaServer meta, ObjectName name,
-                      SnmpValue x, long id, Object data)
-        throws SnmpStatusException {
-
-        meta.checkSetAccess(x,id,data);
-        try {
-            final String attname = meta.getAttributeName(id);
-            final Object attvalue= meta.buildAttributeValue(id,x);
-            final  Object[] params = new Object[1];
-            final  String[] signature = new String[1];
-
-            params[0]    = attvalue;
-            signature[0] = attvalue.getClass().getName();
-            server.invoke(name,"check"+attname,params,signature);
-
-        } catch( SnmpStatusException e) {
-            throw e;
-        }
-        catch (InstanceNotFoundException i) {
-            throw new
-                SnmpStatusException(SnmpStatusException.snmpRspInconsistentName);
-        } catch (ReflectionException r) {
-            // checkXXXX() not defined => do nothing
-        } catch (MBeanException m) {
-            Exception t = m.getTargetException();
-            if (t instanceof SnmpStatusException)
-                throw (SnmpStatusException) t;
-            throw new SnmpStatusException(SnmpStatusException.noAccess);
-        } catch (Exception e) {
-            throw new
-                SnmpStatusException(SnmpStatusException.noAccess);
-        }
-    }
-
-    public void registerTableEntry(SnmpMibTable meta, SnmpOid rowOid,
-                                   ObjectName objname, Object entry)
-        throws SnmpStatusException {
-        if (objname == null)
-           throw new
-             SnmpStatusException(SnmpStatusException.snmpRspInconsistentName);
-        try  {
-            if (entry != null && !server.isRegistered(objname))
-                server.registerMBean(entry, objname);
-        } catch (InstanceAlreadyExistsException e) {
-            throw new
-              SnmpStatusException(SnmpStatusException.snmpRspInconsistentName);
-        } catch (MBeanRegistrationException e) {
-            throw new SnmpStatusException(SnmpStatusException.snmpRspNoAccess);
-        } catch (NotCompliantMBeanException e) {
-            throw new SnmpStatusException(SnmpStatusException.snmpRspGenErr);
-        } catch (RuntimeOperationsException e) {
-            throw new SnmpStatusException(SnmpStatusException.snmpRspGenErr);
-        } catch(Exception e) {
-            throw new SnmpStatusException(SnmpStatusException.snmpRspGenErr);
-        }
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/agent/SnmpIndex.java b/ojluni/src/main/java/com/sun/jmx/snmp/agent/SnmpIndex.java
deleted file mode 100755
index d41e2e3..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/agent/SnmpIndex.java
+++ /dev/null
@@ -1,190 +0,0 @@
-/*
- * Copyright (c) 1997, 2007, 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.jmx.snmp.agent;
-
-
-
-// java imports
-//
-import java.io.Serializable;
-import java.util.Vector;
-import java.util.Enumeration;
-
-// jmx imports
-//
-import com.sun.jmx.snmp.SnmpOid;
-
-/**
- * Represents a SNMP index.
- * An <CODE>SnmpIndex</CODE> is represented as a <CODE>Vector</CODE> of <CODE>SnmpOid</CODE>.
- * <P>
- * This class is used internally and by the classes generated by <CODE>mibgen</CODE>.
- * You should not need to use this class directly.
- *
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- */
-
-public class SnmpIndex implements Serializable {
-    private static final long serialVersionUID = 8712159739982192146L;
-
-    /**
-     * Initializes an <CODE>SnmpIndex</CODE> using a vector of object identifiers.
-     * <P>Following the RFC recommendations, every syntax that is used as a
-     * table index should have an object identifier representation. There are
-     * some guidelines on how to map the different syntaxes into an object identifier.
-     * In the different <CODE>SnmpValue</CODE> classes provided, there is a <CODE>toOid</CODE> method to get
-     * the object identifier of the value.
-     *
-     * @param oidList The list of Object Identifiers.
-     */
-    public SnmpIndex(SnmpOid[] oidList) {
-        size= oidList.length;
-        for(int i= 0; i <size; i++) {
-            // The order is important ...
-            //
-            oids.addElement(oidList[i]);
-        }
-    }
-
-    /**
-     * Initializes an <CODE>SnmpIndex</CODE> using the specified Object Identifier.
-     *
-     * @param oid The Object Identifier.
-     */
-    public SnmpIndex(SnmpOid oid) {
-        oids.addElement(oid);
-        size= 1;
-    }
-
-    /**
-     * Gets the number of Object Identifiers the index is made of.
-     *
-     * @return The number of Object Identifiers.
-     */
-    public int getNbComponents() {
-        return size;
-    }
-
-    /**
-     * Gets the index as a vector of Object Identifiers.
-     *
-     * @return The index as a vector.
-     */
-    public Vector<SnmpOid> getComponents() {
-        return oids;
-    }
-
-    /**
-     * Compares two indexes for equality.
-     *
-     * @param index The index to compare <CODE>this</CODE> with.
-     *
-     * @return <CODE>true</CODE> if the two indexes are equal, <CODE>false</CODE> otherwise.
-     */
-    public boolean equals(SnmpIndex index) {
-
-        if (size != index.getNbComponents())
-            return false;
-
-        // The two vectors have the same length.
-        // Compare each single element ...
-        //
-        SnmpOid oid1;
-        SnmpOid oid2;
-        Vector<SnmpOid> components= index.getComponents();
-        for(int i=0; i <size; i++) {
-            oid1= oids.elementAt(i);
-            oid2= components.elementAt(i);
-            if (oid1.equals(oid2) == false)
-                return false;
-        }
-        return true;
-    }
-
-    /**
-     * Compares two indexes.
-     *
-     * @param index The index to compare <CODE>this</CODE> with.
-     *
-     * @return The value 0 if the two OID vectors have the same elements, another value otherwise.
-     */
-    public int compareTo(SnmpIndex index) {
-
-        int length= index.getNbComponents();
-        Vector<SnmpOid> components= index.getComponents();
-        SnmpOid oid1;
-        SnmpOid oid2;
-        int comp;
-        for(int i=0; i < size; i++) {
-            if ( i > length) {
-                // There is no more element in the index
-                //
-                return 1;
-            }
-            // Access the element ...
-            //
-            oid1= oids.elementAt(i);
-            oid2= components.elementAt(i);
-            comp= oid1.compareTo(oid2);
-            if (comp == 0)
-                continue;
-            return comp;
-        }
-        return 0;
-    }
-
-    /**
-     * Returns a <CODE>String</CODE> representation of the index.
-     * The different elements are separated by "//".
-     *
-     * @return A string representation of the index.
-     */
-    public String toString() {
-        StringBuffer msg= new StringBuffer();
-        for(Enumeration e= oids.elements(); e.hasMoreElements(); ) {
-            SnmpOid val= (SnmpOid) e.nextElement();
-            msg.append( "//" + val.toString());
-        }
-        return msg.toString();
-    }
-
-    // PRIVATE VARIABLES
-    //------------------
-
-    /**
-     * The list of OIDs.
-     * @serial
-     */
-    private Vector<SnmpOid> oids = new Vector<SnmpOid>();
-
-    /**
-     * The number of elements in the index.
-     * @serial
-     */
-    private int size = 0;
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/agent/SnmpMib.java b/ojluni/src/main/java/com/sun/jmx/snmp/agent/SnmpMib.java
deleted file mode 100755
index 8d697e8..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/agent/SnmpMib.java
+++ /dev/null
@@ -1,1026 +0,0 @@
-/*
- * Copyright (c) 1997, 2007, 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.jmx.snmp.agent;
-
-import java.io.Serializable;
-import java.util.Enumeration;
-import java.util.logging.Level;
-import java.util.Vector;
-
-import javax.management.ObjectName;
-import javax.management.MBeanServer;
-import javax.management.MalformedObjectNameException;
-import javax.management.InstanceAlreadyExistsException;
-import javax.management.MBeanRegistrationException;
-import javax.management.NotCompliantMBeanException;
-
-import static com.sun.jmx.defaults.JmxProperties.SNMP_ADAPTOR_LOGGER;
-import com.sun.jmx.snmp.SnmpOid;
-import com.sun.jmx.snmp.SnmpVarBind;
-import com.sun.jmx.snmp.SnmpDefinitions;
-import com.sun.jmx.snmp.SnmpStatusException;
-import com.sun.jmx.snmp.SnmpEngine;
-import com.sun.jmx.snmp.SnmpUnknownModelException;
-import com.sun.jmx.snmp.internal.SnmpAccessControlModel;
-import com.sun.jmx.snmp.internal.SnmpEngineImpl;
-
-/**
- * This list is used in order to construct the OID during the getnext.
- * The constructed oid is checked by the checker AcmChecker.
- */
-final class LongList {
-
-    public static int DEFAULT_CAPACITY = 10;
-
-    public static int DEFAULT_INCREMENT = 10;
-
-
-    private final int DELTA;
-    private int size;
-
-    /**
-     * The list content. Any access to this variable must be protected
-     * by a synchronized block on the LongList object.
-     * Only read-only action should be performed on this object.
-     **/
-    public  long[] list;
-
-    LongList() {
-        this(DEFAULT_CAPACITY,DEFAULT_INCREMENT);
-    }
-
-    LongList(int initialCapacity) {
-        this(initialCapacity,DEFAULT_INCREMENT);
-    }
-
-    LongList(int initialCapacity, int delta) {
-        size = 0;
-        DELTA = delta;
-        list = allocate(initialCapacity);
-    }
-
-    /**
-     * Same behaviour than size() in {@link java.util.List}.
-     **/
-    public final int size() { return size;}
-
-    /**
-     * Same behaviour than add(long o) in {@link java.util.List}.
-     * Any access to this method should be protected in a synchronized
-     * block on the LongList object.
-     **/
-    public final boolean add(final long o) {
-        if (size >= list.length)
-            resize();
-        list[size++]=o;
-        return true;
-    }
-
-    /**
-     * Same behaviour than add(int index, long o) in
-     * {@link java.util.List}.
-     * Any access to this method should be protected in a synchronized
-     * block on the LongList object.
-     **/
-    public final void add(final int index, final long o) {
-        if (index >  size) throw new IndexOutOfBoundsException();
-        if (index >= list.length) resize();
-        if (index == size) {
-            list[size++]=o;
-            return;
-        }
-
-        java.lang.System.arraycopy(list,index,list,index+1,size-index);
-        list[index]=o;
-        size++;
-    }
-
-    /**
-     * Adds <var>count</var> elements to the list.
-     * @param at index at which the elements must be inserted. The
-     *        first element will be inserted at this index.
-     * @param src  An array containing the elements we want to insert.
-     * @param from Index of the first element from <var>src</var> that
-     *        must be inserted.
-     * @param count number of elements to insert.
-     * Any access to this method should be protected in a synchronized
-     * block on the LongList object.
-     **/
-    public final void add(final int at,final long[] src, final int from,
-                          final int count) {
-        if (count <= 0) return;
-        if (at > size) throw new IndexOutOfBoundsException();
-        ensure(size+count);
-        if (at < size) {
-            java.lang.System.arraycopy(list,at,list,at+count,size-at);
-        }
-        java.lang.System.arraycopy(src,from,list,at,count);
-        size+=count;
-    }
-
-    /**
-     * Any access to this method should be protected in a synchronized
-     * block on the LongList object.
-     **/
-    public final long remove(final int from, final int count) {
-        if (count < 1 || from < 0) return -1;
-        if (from+count > size) return -1;
-
-        final long o = list[from];
-        final int oldsize = size;
-        size = size - count;
-
-        if (from == size) return o;
-
-        java.lang.System.arraycopy(list,from+count,list,from,
-                                   size-from);
-        return o;
-    }
-
-    /**
-     * Same behaviour than remove(int index) in {@link java.util.List}.
-     * Any access to this method should be protected in a synchronized
-     * block on the LongList object.
-     **/
-    public final long remove(final int index) {
-        if (index >= size) return -1;
-        final long o = list[index];
-        list[index]=0;
-        if (index == --size) return o;
-
-        java.lang.System.arraycopy(list,index+1,list,index,
-                                   size-index);
-        return o;
-    }
-
-    /**
-     * Same behaviour than the toArray(long[] a) method in
-     * {@link java.util.List}.
-     * Any access to this method should be protected in a synchronized
-     * block on the LongList object.
-     **/
-    public final long[] toArray(long[] a) {
-        java.lang.System.arraycopy(list,0,a,0,size);
-        return a;
-    }
-
-    /**
-     * Same behaviour than the toArray() method in
-     * {@link java.util.List}.
-     * Any access to this method should be protected in a synchronized
-     * block on the LongList object.
-     **/
-    public final long[] toArray() {
-        return toArray(new long[size]);
-    }
-
-    /**
-     * Resize the list. Increase its capacity by DELTA elements.
-     * Any call to this method must be protected by a synchronized
-     * block on this LongList.
-     **/
-    private final void resize() {
-        final long[] newlist = allocate(list.length + DELTA);
-        java.lang.System.arraycopy(list,0,newlist,0,size);
-        list = newlist;
-    }
-
-    /**
-     * Resize the list. Insure that the new length will be at
-     * least equal to <var>length</var>.
-     * @param length new minimal length requested.
-     * Any call to this method must be protected by a synchronized
-     * block on this LongList.
-     **/
-    private final void ensure(int length) {
-        if (list.length < length) {
-            final int min = list.length+DELTA;
-            length=(length<min)?min:length;
-            final long[] newlist = allocate(length);
-            java.lang.System.arraycopy(list,0,newlist,0,size);
-            list = newlist;
-        }
-    }
-
-    /**
-     * Allocate a new array of object of specified length.
-     **/
-    private final long[] allocate(final int length) {
-        return new long[length];
-    }
-
-}
-
-/**
- * Oid Checker makes use of ACM to check each OID during the getnext process.
- */
-class AcmChecker {
-
-
-    SnmpAccessControlModel model = null;
-    String principal = null;
-    int securityLevel = -1;
-    int version = -1;
-    int pduType = -1;
-    int securityModel = -1;
-    byte[] contextName = null;
-    SnmpEngineImpl engine = null;
-    LongList l = null;
-    AcmChecker(SnmpMibRequest req) {
-        engine = (SnmpEngineImpl) req.getEngine();
-        //We are in V3 architecture, ACM is in the picture.
-        if(engine != null) {
-            if(engine.isCheckOidActivated()) {
-                try {
-                    if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                        SNMP_ADAPTOR_LOGGER.logp(Level.FINEST,
-                                SnmpMib.class.getName(),
-                                "AcmChecker(SnmpMibRequest)",
-                                "SNMP V3 Access Control to be done");
-                    }
-                    model = (SnmpAccessControlModel)
-                        engine.getAccessControlSubSystem().
-                        getModel(SnmpDefinitions.snmpVersionThree);
-                    principal = req.getPrincipal();
-                    securityLevel = req.getSecurityLevel();
-                    pduType = req.getPdu().type;
-                    version = req.getRequestPduVersion();
-                    securityModel = req.getSecurityModel();
-                    contextName = req.getAccessContextName();
-                    l = new LongList();
-                    if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                        final StringBuilder strb = new StringBuilder()
-                        .append("Will check oid for : principal : ")
-                        .append(principal)
-                        .append("; securityLevel : ").append(securityLevel)
-                        .append("; pduType : ").append(pduType)
-                        .append("; version : ").append(version)
-                        .append("; securityModel : ").append(securityModel)
-                        .append("; contextName : ").append(contextName);
-                        SNMP_ADAPTOR_LOGGER.logp(Level.FINEST,
-                                SnmpMib.class.getName(),
-                                "AcmChecker(SnmpMibRequest)", strb.toString());
-                    }
-
-                }catch(SnmpUnknownModelException e) {
-                    if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                        SNMP_ADAPTOR_LOGGER.logp(Level.FINEST,
-                                SnmpMib.class.getName(),
-                                "AcmChecker(SnmpMibRequest)",
-                                "Unknown Model, no ACM check.");
-                    }
-                }
-            }
-        }
-    }
-
-    void add(int index, long arc) {
-        if(model != null)
-            l.add(index, arc);
-    }
-
-    void remove(int index) {
-        if(model != null)
-            l.remove(index);
-    }
-
-    void add(final int at,final long[] src, final int from,
-             final int count) {
-        if(model != null)
-            l.add(at,src,from,count);
-    }
-
-    void remove(final int from, final int count) {
-        if(model != null)
-            l.remove(from,count);
-    }
-
-    void checkCurrentOid() throws SnmpStatusException {
-        if(model != null) {
-            SnmpOid oid = new SnmpOid(l.toArray());
-            if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, SnmpMib.class.getName(),
-                        "checkCurrentOid", "Checking access for : " + oid);
-            }
-            model.checkAccess(version,
-                              principal,
-                              securityLevel,
-                              pduType,
-                              securityModel,
-                              contextName,
-                              oid);
-        }
-    }
-
-}
-
-/**
- * Abstract class for representing an SNMP MIB.
- * <P>
- * When compiling a SNMP MIB, among all the classes generated by
- * <CODE>mibgen</CODE>, there is one which extends <CODE>SnmpMib</CODE>
- * for representing a whole MIB.
- * <BR>The class is used by the SNMP protocol adaptor as the entry point in
- * the MIB.
- *
- * <p>This generated class can be subclassed in your code in order to
- * plug in your own specific behaviour.
- * </p>
- *
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- */
-public abstract class SnmpMib extends SnmpMibAgent implements Serializable {
-
-    /**
-     * Default constructor.
-     * Initializes the OID tree.
-     */
-    public SnmpMib() {
-        root= new SnmpMibOid();
-    }
-
-
-    // --------------------------------------------------------------------
-    // POLYMORHIC METHODS
-    // --------------------------------------------------------------------
-
-    /**
-     * <p>
-     * This callback should return the OID associated to the group
-     * identified by the given <code>groupName</code>.
-     * </p>
-     *
-     * <p>
-     * This method is provided as a hook to plug-in some custom
-     * specific behavior. Although doing so is discouraged you might
-     * want to subclass this method in order to store & provide more metadata
-     * information (mapping OID <-> symbolic name) within the agent,
-     * or to "change" the root of the MIB OID by prefixing the
-     * defaultOid by an application dependant OID string, for instance.
-     * </p>
-     *
-     * <p>
-     * The default implementation of this method is to return the given
-     * <code>defaultOid</code>
-     * </p>
-     *
-     * @param groupName   The java-ized name of the SNMP group.
-     * @param defaultOid  The OID defined in the MIB for that group
-     *                    (in dot notation).
-     *
-     * @return The OID of the group identified by <code>groupName</code>,
-     *         in dot-notation.
-     */
-    protected String getGroupOid(String groupName, String defaultOid) {
-        return defaultOid;
-    }
-
-    /**
-     * <p>
-     * This callback should return the ObjectName associated to the
-     * group identified by the given <code>groupName</code>.
-     * </p>
-     *
-     * <p>
-     * This method is provided as a hook to plug-in some custom
-     * specific behavior. You might want to override this method
-     * in order to provide a different object naming scheme than
-     * that proposed by default by <code>mibgen</code>.
-     * </p>
-     *
-     * <p>
-     * This method is only meaningful if the MIB is registered
-     * in the MBeanServer, otherwise, it will not be called.
-     * </p>
-     *
-     * <p>
-     * The default implementation of this method is to return an ObjectName
-     * built from the given <code>defaultName</code>.
-     * </p>
-     *
-     * @param name  The java-ized name of the SNMP group.
-     * @param oid   The OID returned by getGroupOid() - in dot notation.
-     * @param defaultName The name by default generated by <code>
-     *                    mibgen</code>
-     *
-     * @return The ObjectName of the group identified by <code>name</code>
-     */
-    protected ObjectName getGroupObjectName(String name, String oid,
-                                            String defaultName)
-        throws MalformedObjectNameException {
-        return new ObjectName(defaultName);
-    }
-
-    /**
-     * <p>
-     * Register an SNMP group and its metadata node in the MIB.
-     * </p>
-     *
-     * <p>
-     * This method is provided as a hook to plug-in some custom
-     * specific behavior. You might want to override this method
-     * if you want to set special links between the MBean, its metadata
-     * node, its OID or ObjectName etc..
-     * </p>
-     *
-     * <p>
-     * If the MIB is not registered in the MBeanServer, the <code>
-     * server</code> and <code>groupObjName</code> parameters will be
-     * <code>null</code>.<br>
-     * If the given group MBean is not <code>null</code>, and if the
-     * <code>server</code> and <code>groupObjName</code> parameters are
-     * not null, then this method will also automatically register the
-     * group MBean with the given MBeanServer <code>server</code>.
-     * </p>
-     *
-     * @param groupName  The java-ized name of the SNMP group.
-     * @param groupOid   The OID as returned by getGroupOid() - in dot
-     *                   notation.
-     * @param groupObjName The ObjectName as returned by getGroupObjectName().
-     *                   This parameter may be <code>null</code> if the
-     *                   MIB is not registered in the MBeanServer.
-     * @param node       The metadata node, as returned by the metadata
-     *                   factory method for this group.
-     * @param group      The MBean for this group, as returned by the
-     *                   MBean factory method for this group.
-     * @param server     The MBeanServer in which the groups are to be
-     *                   registered. This parameter will be <code>null</code>
-     *                   if the MIB is not registered, otherwise it is a
-     *                   reference to the MBeanServer in which the MIB is
-     *                   registered.
-     *
-     */
-    protected void registerGroupNode(String groupName,   String groupOid,
-                                     ObjectName groupObjName, SnmpMibNode node,
-                                     Object group, MBeanServer server)
-        throws NotCompliantMBeanException, MBeanRegistrationException,
-        InstanceAlreadyExistsException, IllegalAccessException {
-        root.registerNode(groupOid,node);
-        if (server != null && groupObjName != null && group != null)
-            server.registerMBean(group,groupObjName);
-    }
-
-    /**
-     * <p>
-     * Register an SNMP Table metadata node in the MIB.
-     * </p>
-     *
-     * <p>
-     * <b><i>
-     * This method is used internally and you should never need to
-     * call it directly.</i></b><br> It is used to establish the link
-     * between an SNMP table metadata node and its bean-like counterpart.
-     * <br>
-     * The group metadata nodes will create and register their
-     * underlying table metadata nodes in the MIB using this
-     * method. <br>
-     * The metadata nodes will be later retrieved from the MIB by the
-     * bean-like table objects using the getRegisterTableMeta() method.
-     * </p>
-     *
-     * @param name      The java-ized name of the SNMP table.
-     * @param table     The SNMP table metadata node - usually this
-     *                  corresponds to a <code>mibgen</code> generated
-     *                  object.
-     */
-    public abstract void registerTableMeta(String name, SnmpMibTable table);
-
-    /**
-     * Returns a registered SNMP Table metadata node.
-     *
-     * <p><b><i>
-     * This method is used internally and you should never need to
-     * call it directly.
-     * </i></b></p>
-     *
-     */
-    public abstract SnmpMibTable getRegisteredTableMeta(String name);
-
-    // --------------------------------------------------------------------
-    // PUBLIC METHODS
-    // --------------------------------------------------------------------
-
-    /**
-     * Processes a <CODE>get</CODE> operation.
-     *
-     **/
-    // Implements the method defined in SnmpMibAgent. See SnmpMibAgent
-    // for java-doc
-    //
-    public void get(SnmpMibRequest req) throws SnmpStatusException {
-
-        // Builds the request tree: creation is not allowed, operation
-        // is not atomic.
-
-        final int reqType = SnmpDefinitions.pduGetRequestPdu;
-        SnmpRequestTree handlers = getHandlers(req,false,false,reqType);
-
-        SnmpRequestTree.Handler h = null;
-        SnmpMibNode meta = null;
-
-        if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-            SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, SnmpMib.class.getName(),
-                    "get", "Processing handlers for GET... ");
-        }
-
-        // For each sub-request stored in the request-tree, invoke the
-        // get() method.
-        for (Enumeration eh=handlers.getHandlers();eh.hasMoreElements();) {
-            h = (SnmpRequestTree.Handler) eh.nextElement();
-
-            // Gets the Meta node. It can be either a Group Meta or a
-            // Table Meta.
-            //
-            meta = handlers.getMetaNode(h);
-
-            // Gets the depth of the Meta node in the OID tree
-            final int depth = handlers.getOidDepth(h);
-
-            for (Enumeration rqs=handlers.getSubRequests(h);
-                 rqs.hasMoreElements();) {
-
-                // Invoke the get() operation.
-                meta.get((SnmpMibSubRequest)rqs.nextElement(),depth);
-            }
-        }
-    }
-
-    /**
-     * Processes a <CODE>set</CODE> operation.
-     *
-     */
-    // Implements the method defined in SnmpMibAgent. See SnmpMibAgent
-    // for java-doc
-    //
-    public void set(SnmpMibRequest req) throws SnmpStatusException {
-
-        SnmpRequestTree handlers = null;
-
-        // Optimization: we're going to get the whole SnmpRequestTree
-        // built in the "check" method, so that we don't have to rebuild
-        // it here.
-        //
-        if (req instanceof SnmpMibRequestImpl)
-            handlers = ((SnmpMibRequestImpl)req).getRequestTree();
-
-        // Optimization didn't work: we have to rebuild the tree.
-        //
-        // Builds the request tree: creation is not allowed, operation
-        // is atomic.
-        //
-        final int reqType = SnmpDefinitions.pduSetRequestPdu;
-        if (handlers == null) handlers = getHandlers(req,false,true,reqType);
-        handlers.switchCreationFlag(false);
-        handlers.setPduType(reqType);
-
-        SnmpRequestTree.Handler h = null;
-        SnmpMibNode meta = null;
-
-        if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-            SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, SnmpMib.class.getName(),
-                    "set", "Processing handlers for SET... ");
-        }
-
-        // For each sub-request stored in the request-tree, invoke the
-        // get() method.
-        for (Enumeration eh=handlers.getHandlers();eh.hasMoreElements();) {
-            h = (SnmpRequestTree.Handler) eh.nextElement();
-
-            // Gets the Meta node. It can be either a Group Meta or a
-            // Table Meta.
-            //
-            meta = handlers.getMetaNode(h);
-
-            // Gets the depth of the Meta node in the OID tree
-            final int depth = handlers.getOidDepth(h);
-
-            for (Enumeration rqs=handlers.getSubRequests(h);
-                 rqs.hasMoreElements();) {
-
-                // Invoke the set() operation
-                meta.set((SnmpMibSubRequest)rqs.nextElement(),depth);
-            }
-        }
-    }
-
-    /**
-     * Checks if a <CODE>set</CODE> operation can be performed.
-     * If the operation cannot be performed, the method will raise a
-     * <CODE>SnmpStatusException</CODE>.
-     *
-     */
-    // Implements the method defined in SnmpMibAgent. See SnmpMibAgent
-    // for java-doc
-    //
-    public void check(SnmpMibRequest req) throws SnmpStatusException {
-
-        final int reqType = SnmpDefinitions.pduWalkRequest;
-        // Builds the request tree: creation is allowed, operation
-        // is atomic.
-        SnmpRequestTree handlers = getHandlers(req,true,true,reqType);
-
-        SnmpRequestTree.Handler h = null;
-        SnmpMibNode meta = null;
-
-        if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-            SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, SnmpMib.class.getName(),
-                    "check", "Processing handlers for CHECK... ");
-        }
-
-        // For each sub-request stored in the request-tree, invoke the
-        // check() method.
-        for (Enumeration eh=handlers.getHandlers();eh.hasMoreElements();) {
-            h = (SnmpRequestTree.Handler) eh.nextElement();
-
-            // Gets the Meta node. It can be either a Group Meta or a
-            // Table Meta.
-            //
-            meta = handlers.getMetaNode(h);
-
-            // Gets the depth of the Meta node in the OID tree
-            final int depth = handlers.getOidDepth(h);
-
-            for (Enumeration rqs=handlers.getSubRequests(h);
-                 rqs.hasMoreElements();) {
-
-                // Invoke the check() operation
-                meta.check((SnmpMibSubRequest)rqs.nextElement(),depth);
-            }
-        }
-
-        // Optimization: we're going to pass the whole SnmpRequestTree
-        // to the "set" method, so that we don't have to rebuild it there.
-        //
-        if (req instanceof SnmpMibRequestImpl) {
-            ((SnmpMibRequestImpl)req).setRequestTree(handlers);
-        }
-
-    }
-
-    /**
-     * Processes a <CODE>getNext</CODE> operation.
-     *
-     */
-    // Implements the method defined in SnmpMibAgent. See SnmpMibAgent
-    // for java-doc
-    //
-    public void getNext(SnmpMibRequest req) throws SnmpStatusException {
-        // Build the request tree for the operation
-        // The subrequest stored in the request tree are valid GET requests
-        SnmpRequestTree handlers = getGetNextHandlers(req);
-
-        SnmpRequestTree.Handler h = null;
-        SnmpMibNode meta = null;
-
-        if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-            SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, SnmpMib.class.getName(),
-                    "getNext", "Processing handlers for GET-NEXT... ");
-        }
-
-        // Now invoke get() for each subrequest of the request tree.
-        for (Enumeration eh=handlers.getHandlers();eh.hasMoreElements();) {
-            h = (SnmpRequestTree.Handler) eh.nextElement();
-
-            // Gets the Meta node. It can be either a Group Meta or a
-            // Table Meta.
-            //
-            meta = handlers.getMetaNode(h);
-
-            // Gets the depth of the Meta node in the OID tree
-            int depth = handlers.getOidDepth(h);
-
-            for (Enumeration rqs=handlers.getSubRequests(h);
-                 rqs.hasMoreElements();) {
-
-                // Invoke the get() operation
-                meta.get((SnmpMibSubRequest)rqs.nextElement(),depth);
-            }
-        }
-    }
-
-
-    /**
-     * Processes a <CODE>getBulk</CODE> operation.
-     * The method implements the <CODE>getBulk</CODE> operation by calling
-     * appropriately the <CODE>getNext</CODE> method.
-     *
-     */
-    // Implements the method defined in SnmpMibAgent. See SnmpMibAgent
-    // for java-doc
-    //
-    public void getBulk(SnmpMibRequest req, int nonRepeat, int maxRepeat)
-        throws SnmpStatusException {
-
-        getBulkWithGetNext(req, nonRepeat, maxRepeat);
-    }
-
-    /**
-     * Gets the root object identifier of the MIB.
-     * <P>In order to be accurate, the method should be called once the
-     * MIB is fully initialized (that is, after a call to <CODE>init</CODE>
-     * or <CODE>preRegister</CODE>).
-     *
-     * @return The root object identifier.
-     */
-    public long[] getRootOid() {
-
-        if( rootOid == null) {
-            Vector<Integer> list= new Vector<Integer>(10);
-
-            // Ask the tree to do the job !
-            //
-            root.getRootOid(list);
-
-            // Now format the result
-            //
-            rootOid= new long[list.size()];
-            int i=0;
-            for(Enumeration<Integer> e= list.elements(); e.hasMoreElements(); ) {
-                Integer val= e.nextElement();
-                rootOid[i++]= val.longValue();
-            }
-        }
-        return rootOid;
-
-    }
-
-    // --------------------------------------------------------------------
-    // PRIVATE METHODS
-    //---------------------------------------------------------------------
-
-    /**
-     * This method builds the temporary request-tree that will be used to
-     * perform the SNMP request associated with the given vector of varbinds
-     * `list'.
-     *
-     * @param req The SnmpMibRequest object holding the varbind list
-     *             concerning this MIB.
-     * @param createflag Indicates whether the operation allow for creation
-     *        of new instances (ie: it is a SET).
-     * @param atomic Indicates whether the operation is atomic or not.
-     * @param type Request type (from SnmpDefinitions).
-     *
-     * @return The request-tree where the original varbind list has been
-     *         dispatched to the appropriate nodes.
-     */
-    private SnmpRequestTree getHandlers(SnmpMibRequest req,
-                                        boolean createflag, boolean atomic,
-                                        int type)
-        throws SnmpStatusException {
-
-        // Build an empty request tree
-        SnmpRequestTree handlers =
-            new SnmpRequestTree(req,createflag,type);
-
-        int index=0;
-        SnmpVarBind var = null;
-        final int ver= req.getVersion();
-
-        // For each varbind in the list finds its handling node.
-        for (Enumeration e= req.getElements(); e.hasMoreElements(); index++) {
-
-            var= (SnmpVarBind) e.nextElement();
-
-            try {
-                // Find the handling node for this varbind.
-                root.findHandlingNode(var,var.oid.longValue(false),
-                                      0,handlers);
-            } catch(SnmpStatusException x) {
-
-                if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                    SNMP_ADAPTOR_LOGGER.logp(Level.FINEST,
-                            SnmpMib.class.getName(),
-                            "getHandlers",
-                            "Couldn't find a handling node for " +
-                            var.oid.toString());
-                }
-
-                // If the operation is atomic (Check/Set) or the version
-                // is V1 we must generate an exception.
-                //
-                if (ver == SnmpDefinitions.snmpVersionOne) {
-
-                    if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                        SNMP_ADAPTOR_LOGGER.logp(Level.FINEST,
-                                SnmpMib.class.getName(),
-                                "getHandlers", "\tV1: Throwing exception");
-                    }
-
-                    // The index in the exception must correspond to the
-                    // SNMP index ...
-                    //
-                    final SnmpStatusException sse =
-                        new SnmpStatusException(x, index + 1);
-                    sse.initCause(x);
-                    throw sse;
-                } else if ((type == SnmpDefinitions.pduWalkRequest)   ||
-                           (type == SnmpDefinitions.pduSetRequestPdu)) {
-                    final int status =
-                        SnmpRequestTree.mapSetException(x.getStatus(),ver);
-
-                    if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                        SNMP_ADAPTOR_LOGGER.logp(Level.FINEST,
-                                SnmpMib.class.getName(),
-                                "getHandlers", "\tSET: Throwing exception");
-                    }
-
-                    final SnmpStatusException sse =
-                        new SnmpStatusException(status, index + 1);
-                    sse.initCause(x);
-                    throw sse;
-                } else if (atomic) {
-
-                    // Should never come here...
-                    if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                        SNMP_ADAPTOR_LOGGER.logp(Level.FINEST,
-                                SnmpMib.class.getName(),
-                                "getHandlers", "\tATOMIC: Throwing exception");
-                    }
-
-                    final SnmpStatusException sse =
-                        new SnmpStatusException(x, index + 1);
-                    sse.initCause(x);
-                    throw sse;
-                }
-
-                final int status =
-                    SnmpRequestTree.mapGetException(x.getStatus(),ver);
-
-                if (status == SnmpStatusException.noSuchInstance) {
-
-                    if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                        SNMP_ADAPTOR_LOGGER.logp(Level.FINEST,
-                                SnmpMib.class.getName(),
-                                "getHandlers",
-                                "\tGET: Registering noSuchInstance");
-                    }
-
-                    var.value= SnmpVarBind.noSuchInstance;
-
-                } else if (status == SnmpStatusException.noSuchObject) {
-                    if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                        SNMP_ADAPTOR_LOGGER.logp(Level.FINEST,
-                                SnmpMib.class.getName(),
-                                "getHandlers",
-                                "\tGET: Registering noSuchObject");
-                    }
-
-                        var.value= SnmpVarBind.noSuchObject;
-
-                } else {
-
-                    if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                        SNMP_ADAPTOR_LOGGER.logp(Level.FINEST,
-                                SnmpMib.class.getName(),
-                                "getHandlers",
-                                "\tGET: Registering global error: " + status);
-                    }
-
-                    final SnmpStatusException sse =
-                        new SnmpStatusException(status, index + 1);
-                    sse.initCause(x);
-                    throw sse;
-                }
-            }
-        }
-        return handlers;
-    }
-
-    /**
-     * This method builds the temporary request-tree that will be used to
-     * perform the SNMP GET-NEXT request associated with the given vector
-     * of varbinds `list'.
-     *
-     * @param req The SnmpMibRequest object holding the varbind list
-     *             concerning this MIB.
-     *
-     * @return The request-tree where the original varbind list has been
-     *         dispatched to the appropriate nodes, and where the original
-     *         OIDs have been replaced with the correct "next" OID.
-     */
-    private SnmpRequestTree getGetNextHandlers(SnmpMibRequest req)
-        throws SnmpStatusException {
-
-        // Creates an empty request tree, no entry creation is allowed (false)
-        SnmpRequestTree handlers = new
-            SnmpRequestTree(req,false,SnmpDefinitions.pduGetNextRequestPdu);
-
-        // Sets the getNext flag: if version=V2, status exception are
-        // transformed in  endOfMibView
-        handlers.setGetNextFlag();
-
-        if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-            SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, SnmpMib.class.getName(),
-                    "getGetNextHandlers", "Received MIB request : " + req);
-        }
-        AcmChecker checker = new AcmChecker(req);
-        int index=0;
-        SnmpVarBind var = null;
-        final int ver= req.getVersion();
-        SnmpOid original = null;
-        // For each varbind, finds the handling node.
-        // This function has the side effect of transforming a GET-NEXT
-        // request into a valid GET request, replacing the OIDs in the
-        // original GET-NEXT request with the OID of the first leaf that
-        // follows.
-        for (Enumeration e= req.getElements(); e.hasMoreElements(); index++) {
-
-            var = (SnmpVarBind) e.nextElement();
-            SnmpOid result = null;
-            try {
-                // Find the node handling the OID that follows the varbind
-                // OID. `result' contains this next leaf OID.
-                //ACM loop.
-                if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                    SNMP_ADAPTOR_LOGGER.logp(Level.FINEST,
-                            SnmpMib.class.getName(),
-                            "getGetNextHandlers", " Next OID of : " + var.oid);
-                }
-                result = new SnmpOid(root.findNextHandlingNode
-                                     (var,var.oid.longValue(false),0,
-                                      0,handlers, checker));
-
-                if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                    SNMP_ADAPTOR_LOGGER.logp(Level.FINEST,
-                            SnmpMib.class.getName(),
-                            "getGetNextHandlers", " is : " + result);
-                }
-                // We replace the varbind original OID with the OID of the
-                // leaf object we have to return.
-                var.oid = result;
-            } catch(SnmpStatusException x) {
-
-                // if (isDebugOn())
-                //    debug("getGetNextHandlers",
-                //        "Couldn't find a handling node for "
-                //        + var.oid.toString());
-
-                if (ver == SnmpDefinitions.snmpVersionOne) {
-                    if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                        SNMP_ADAPTOR_LOGGER.logp(Level.FINEST,
-                                SnmpMib.class.getName(),
-                                "getGetNextHandlers",
-                                "\tThrowing exception " + x.toString());
-                    }
-                    // The index in the exception must correspond to the
-                    // SNMP index ...
-                    //
-                    throw new SnmpStatusException(x, index + 1);
-                }
-                if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                    SNMP_ADAPTOR_LOGGER.logp(Level.FINEST,
-                            SnmpMib.class.getName(),
-                            "getGetNextHandlers",
-                            "Exception : " + x.getStatus());
-                }
-
-                var.setSnmpValue(SnmpVarBind.endOfMibView);
-            }
-        }
-        return handlers;
-    }
-
-    // --------------------------------------------------------------------
-    // PROTECTED VARIABLES
-    // --------------------------------------------------------------------
-
-    /**
-     * The top element in the Mib tree.
-     * @serial
-     */
-    protected SnmpMibOid root;
-
-
-    // --------------------------------------------------------------------
-    // PRIVATE VARIABLES
-    // --------------------------------------------------------------------
-
-    /**
-     * The root object identifier of the MIB.
-     */
-    private transient long[] rootOid= null;
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/agent/SnmpMibAgent.java b/ojluni/src/main/java/com/sun/jmx/snmp/agent/SnmpMibAgent.java
deleted file mode 100755
index e0ba715..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/agent/SnmpMibAgent.java
+++ /dev/null
@@ -1,757 +0,0 @@
-/*
- * Copyright (c) 1998, 2007, 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.jmx.snmp.agent;
-
-
-
-// java imports
-//
-import java.io.Serializable;
-import java.util.Vector;
-import java.util.Enumeration;
-import java.util.Set;
-
-// jmx imports
-//
-import javax.management.MBeanServer;
-import javax.management.MBeanRegistration;
-import javax.management.ObjectName;
-import javax.management.MalformedObjectNameException;
-import javax.management.InstanceNotFoundException;
-import javax.management.ServiceNotFoundException;
-import javax.management.ReflectionException;
-import javax.management.MBeanException;
-import com.sun.jmx.snmp.SnmpVarBind;
-import com.sun.jmx.snmp.SnmpDefinitions;
-import com.sun.jmx.snmp.SnmpStatusException;
-import com.sun.jmx.snmp.SnmpPdu;
-import com.sun.jmx.snmp.SnmpOid;
-import com.sun.jmx.snmp.SnmpEngine;
-
-/**
- * Abstract class for representing an SNMP agent.
- *
- * The class is used by the SNMP protocol adaptor as the entry point in
- * the SNMP agent to query.
- *
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- */
-
-public abstract class SnmpMibAgent
-    implements SnmpMibAgentMBean, MBeanRegistration, Serializable {
-
-    /**
-     * Default constructor.
-     */
-    public SnmpMibAgent() {
-    }
-
-    // ---------------------------------------------------------------------
-    // PUBLIC METHODS
-    //----------------------------------------------------------------------
-
-    /**
-     * Initializes the MIB (with no registration of the MBeans into the
-     * MBean server).
-     *
-     * @exception IllegalAccessException The MIB can not be initialized.
-     */
-    public abstract void init() throws IllegalAccessException;
-
-    /**
-     * Initializes the MIB but each single MBean representing the MIB
-     * is inserted into the MBean server.
-     *
-     * @param server The MBean server to register the service with.
-     * @param name The object name.
-     *
-     * @return The name of the SNMP MIB registered.
-     *
-     * @exception java.lang.Exception
-     */
-    public abstract ObjectName preRegister(MBeanServer server,
-                                           ObjectName name)
-        throws java.lang.Exception;
-
-    /**
-     * Not used in this context.
-     */
-    public void postRegister (Boolean registrationDone) {
-    }
-
-    /**
-     * Not used in this context.
-     */
-    public void preDeregister() throws java.lang.Exception {
-    }
-
-    /**
-     * Not used in this context.
-     */
-    public void postDeregister() {
-    }
-
-    /**
-     * Processes a <CODE>get</CODE> operation.
-     * This method must update the SnmpVarBinds contained in the
-     * <var>{@link SnmpMibRequest} req</var> parameter.
-     *
-     * @param req The SnmpMibRequest object holding the list of variable to
-     *            be retrieved. This list is composed of
-     *            <CODE>SnmpVarBind</CODE> objects.
-     *
-     * @exception SnmpStatusException An error occured during the operation.
-     */
-    public abstract void get(SnmpMibRequest req)
-        throws SnmpStatusException;
-
-    /**
-     * Processes a <CODE>getNext</CODE> operation.
-     * This method must update the SnmpVarBinds contained in the
-     * <var>{@link SnmpMibRequest} req</var> parameter.
-     *
-     * @param req The SnmpMibRequest object holding the list of
-     *            OIDs from which the next variables should be retrieved.
-     *            This list is composed of <CODE>SnmpVarBind</CODE> objects.
-     *
-     * @exception SnmpStatusException An error occured during the operation.
-     */
-    public abstract void getNext(SnmpMibRequest req)
-        throws SnmpStatusException;
-
-    /**
-     * Processes a <CODE>getBulk</CODE> operation.
-     * This method must update the SnmpVarBinds contained in the
-     * <var>{@link SnmpMibRequest} req</var> parameter.
-     *
-     * @param req The SnmpMibRequest object holding the list of variable to
-     *            be retrieved. This list is composed of
-     *            <CODE>SnmpVarBind</CODE> objects.
-     *
-     * @param nonRepeat The number of variables, starting with the first
-     *    variable in the variable-bindings, for which a single
-     *    lexicographic successor is requested.
-     *
-     * @param maxRepeat The number of lexicographic successors requested
-     *    for each of the last R variables. R is the number of variables
-     *    following the first <CODE>nonRepeat</CODE> variables for which
-     *    multiple lexicographic successors are requested.
-     *
-     * @exception SnmpStatusException An error occured during the operation.
-     */
-    public abstract void getBulk(SnmpMibRequest req, int nonRepeat,
-                                 int maxRepeat)
-        throws SnmpStatusException;
-
-    /**
-     * Processes a <CODE>set</CODE> operation.
-     * This method must update the SnmpVarBinds contained in the
-     * <var>{@link SnmpMibRequest} req</var> parameter.
-     * This method is called during the second phase of the SET two-phase
-     * commit.
-     *
-     * @param req The SnmpMibRequest object holding the list of variable to
-     *            be set. This list is composed of
-     *            <CODE>SnmpVarBind</CODE> objects.
-     *
-     * @exception SnmpStatusException An error occured during the operation.
-     *            Throwing an exception in this method will break the
-     *            atomicity of the SET operation. Care must be taken so that
-     *            the exception is thrown in the {@link #check(SnmpMibRequest)}
-     *            method instead.
-     */
-    public abstract void set(SnmpMibRequest req)
-        throws SnmpStatusException;
-
-
-    /**
-     * Checks if a <CODE>set</CODE> operation can be performed.
-     * If the operation can not be performed, the method should throw an
-     * <CODE>SnmpStatusException</CODE>.
-     * This method is called during the first phase of the SET two-phase
-     * commit.
-     *
-     * @param req The SnmpMibRequest object holding the list of variable to
-     *            be set. This list is composed of
-     *            <CODE>SnmpVarBind</CODE> objects.
-     *
-     * @exception SnmpStatusException The <CODE>set</CODE> operation
-     *    cannot be performed.
-     */
-    public abstract void check(SnmpMibRequest req)
-        throws SnmpStatusException;
-
-    /**
-     * Gets the root object identifier of the MIB.
-     * <P>The root object identifier is the object identifier uniquely
-     * identifying the MIB.
-     *
-     * @return The root object identifier.
-     */
-    public abstract long[] getRootOid();
-
-    // ---------------------------------------------------------------------
-    // GETTERS AND SETTERS
-    // ---------------------------------------------------------------------
-
-    /**
-     * Gets the reference to the MBean server in which the SNMP MIB is
-     * registered.
-     *
-     * @return The MBean server or null if the MIB is not registered in any
-     *     MBean server.
-     */
-    public MBeanServer getMBeanServer() {
-        return server;
-    }
-
-    /**
-     * Gets the reference to the SNMP protocol adaptor to which the MIB is
-     * bound.
-     *
-     * @return The SNMP MIB handler.
-     */
-    public SnmpMibHandler getSnmpAdaptor() {
-        return adaptor;
-    }
-
-    /**
-     * Sets the reference to the SNMP protocol adaptor through which the MIB
-     * will be SNMP accessible and add this new MIB in the SNMP MIB handler.
-     *
-     * @param stack The SNMP MIB handler.
-     */
-    public void setSnmpAdaptor(SnmpMibHandler stack) {
-        if (adaptor != null) {
-            adaptor.removeMib(this);
-        }
-        adaptor = stack;
-        if (adaptor != null) {
-            adaptor.addMib(this);
-        }
-    }
-
-     /**
-     * Sets the reference to the SNMP protocol adaptor through which the MIB
-     * will be SNMP accessible and add this new MIB in the SNMP MIB handler.
-     * This method is to be called to set a specific agent to a specific OID. This can be useful when dealing with MIB overlapping.
-     * Some OID can be implemented in more than one MIB. In this case, the OID nearest the agent will be used on SNMP operations.
-     * @param stack The SNMP MIB handler.
-     * @param oids The set of OIDs this agent implements.
-     *
-     * @since 1.5
-     */
-    public void setSnmpAdaptor(SnmpMibHandler stack, SnmpOid[] oids) {
-        if (adaptor != null) {
-            adaptor.removeMib(this);
-        }
-        adaptor = stack;
-        if (adaptor != null) {
-            adaptor.addMib(this, oids);
-        }
-    }
-
-    /**
-     * Sets the reference to the SNMP protocol adaptor through which the MIB
-     * will be SNMP accessible and adds this new MIB in the SNMP MIB handler.
-     * Adds a new contextualized MIB in the SNMP MIB handler.
-     *
-     * @param stack The SNMP MIB handler.
-     * @param contextName The MIB context name. If null is passed, will be registered in the default context.
-     *
-     * @exception IllegalArgumentException If the parameter is null.
-     *
-     * @since 1.5
-     */
-    public void setSnmpAdaptor(SnmpMibHandler stack, String contextName) {
-        if (adaptor != null) {
-            adaptor.removeMib(this, contextName);
-        }
-        adaptor = stack;
-        if (adaptor != null) {
-            adaptor.addMib(this, contextName);
-        }
-    }
-    /**
-     * Sets the reference to the SNMP protocol adaptor through which the MIB
-     * will be SNMP accessible and adds this new MIB in the SNMP MIB handler.
-     * Adds a new contextualized MIB in the SNMP MIB handler.
-     *
-     * @param stack The SNMP MIB handler.
-     * @param contextName The MIB context name. If null is passed, will be registered in the default context.
-     * @param oids The set of OIDs this agent implements.
-     * @exception IllegalArgumentException If the parameter is null.
-     *
-     * @since 1.5
-     */
-    public void setSnmpAdaptor(SnmpMibHandler stack,
-                               String contextName,
-                               SnmpOid[] oids) {
-        if (adaptor != null) {
-            adaptor.removeMib(this, contextName);
-        }
-        adaptor = stack;
-        if (adaptor != null) {
-            adaptor.addMib(this, contextName, oids);
-        }
-    }
-
-    /**
-     * Gets the object name of the SNMP protocol adaptor to which the MIB
-     * is bound.
-     *
-     * @return The name of the SNMP protocol adaptor.
-     */
-    public ObjectName getSnmpAdaptorName() {
-        return adaptorName;
-    }
-
-    /**
-     * Sets the reference to the SNMP protocol adaptor through which the MIB
-     * will be SNMP accessible and add this new MIB in the SNMP MIB handler
-     * associated to the specified <CODE>name</CODE>.
-     *
-     * @param name The name of the SNMP protocol adaptor.
-     *
-     * @exception InstanceNotFoundException The SNMP protocol adaptor does
-     *     not exist in the MBean server.
-     *
-     * @exception ServiceNotFoundException This SNMP MIB is not registered
-     *     in the MBean server or the requested service is not supported.
-     */
-    public void setSnmpAdaptorName(ObjectName name)
-        throws InstanceNotFoundException, ServiceNotFoundException {
-
-        if (server == null) {
-            throw new ServiceNotFoundException(mibName + " is not registered in the MBean server");
-        }
-        // First remove the reference on the old adaptor server.
-        //
-        if (adaptor != null) {
-            adaptor.removeMib(this);
-        }
-
-        // Then update the reference to the new adaptor server.
-        //
-        Object[] params = {this};
-        String[] signature = {"com.sun.jmx.snmp.agent.SnmpMibAgent"};
-        try {
-            adaptor = (SnmpMibHandler)(server.invoke(name, "addMib", params,
-                                                     signature));
-        } catch (InstanceNotFoundException e) {
-            throw new InstanceNotFoundException(name.toString());
-        } catch (ReflectionException e) {
-            throw new ServiceNotFoundException(name.toString());
-        } catch (MBeanException e) {
-            // Should never occur...
-        }
-
-        adaptorName = name;
-    }
-    /**
-     * Sets the reference to the SNMP protocol adaptor through which the MIB
-     * will be SNMP accessible and add this new MIB in the SNMP MIB handler
-     * associated to the specified <CODE>name</CODE>.
-     * This method is to be called to set a specific agent to a specific OID. This can be useful when dealing with MIB overlapping.
-     * Some OID can be implemented in more than one MIB. In this case, the OID nearer agent will be used on SNMP operations.
-     * @param name The name of the SNMP protocol adaptor.
-     * @param oids The set of OIDs this agent implements.
-     * @exception InstanceNotFoundException The SNMP protocol adaptor does
-     *     not exist in the MBean server.
-     *
-     * @exception ServiceNotFoundException This SNMP MIB is not registered
-     *     in the MBean server or the requested service is not supported.
-     *
-     * @since 1.5
-     */
-    public void setSnmpAdaptorName(ObjectName name, SnmpOid[] oids)
-        throws InstanceNotFoundException, ServiceNotFoundException {
-
-        if (server == null) {
-            throw new ServiceNotFoundException(mibName + " is not registered in the MBean server");
-        }
-        // First remove the reference on the old adaptor server.
-        //
-        if (adaptor != null) {
-            adaptor.removeMib(this);
-        }
-
-        // Then update the reference to the new adaptor server.
-        //
-        Object[] params = {this, oids};
-        String[] signature = {"com.sun.jmx.snmp.agent.SnmpMibAgent",
-        oids.getClass().getName()};
-        try {
-            adaptor = (SnmpMibHandler)(server.invoke(name, "addMib", params,
-                                                     signature));
-        } catch (InstanceNotFoundException e) {
-            throw new InstanceNotFoundException(name.toString());
-        } catch (ReflectionException e) {
-            throw new ServiceNotFoundException(name.toString());
-        } catch (MBeanException e) {
-            // Should never occur...
-        }
-
-        adaptorName = name;
-    }
-    /**
-     * Sets the reference to the SNMP protocol adaptor through which the MIB
-     * will be SNMP accessible and add this new MIB in the SNMP MIB handler
-     * associated to the specified <CODE>name</CODE>.
-     *
-     * @param name The name of the SNMP protocol adaptor.
-     * @param contextName The MIB context name. If null is passed, will be registered in the default context.
-     * @exception InstanceNotFoundException The SNMP protocol adaptor does
-     *     not exist in the MBean server.
-     *
-     * @exception ServiceNotFoundException This SNMP MIB is not registered
-     *     in the MBean server or the requested service is not supported.
-     *
-     * @since 1.5
-     */
-    public void setSnmpAdaptorName(ObjectName name, String contextName)
-        throws InstanceNotFoundException, ServiceNotFoundException {
-
-        if (server == null) {
-            throw new ServiceNotFoundException(mibName + " is not registered in the MBean server");
-        }
-
-        // First remove the reference on the old adaptor server.
-        //
-        if (adaptor != null) {
-            adaptor.removeMib(this, contextName);
-        }
-
-        // Then update the reference to the new adaptor server.
-        //
-        Object[] params = {this, contextName};
-        String[] signature = {"com.sun.jmx.snmp.agent.SnmpMibAgent", "java.lang.String"};
-        try {
-            adaptor = (SnmpMibHandler)(server.invoke(name, "addMib", params,
-                                                     signature));
-        } catch (InstanceNotFoundException e) {
-            throw new InstanceNotFoundException(name.toString());
-        } catch (ReflectionException e) {
-            throw new ServiceNotFoundException(name.toString());
-        } catch (MBeanException e) {
-            // Should never occur...
-        }
-
-        adaptorName = name;
-    }
-
-    /**
-     * Sets the reference to the SNMP protocol adaptor through which the MIB
-     * will be SNMP accessible and add this new MIB in the SNMP MIB handler
-     * associated to the specified <CODE>name</CODE>.
-     *
-     * @param name The name of the SNMP protocol adaptor.
-     * @param contextName The MIB context name. If null is passed, will be registered in the default context.
-     * @param oids The set of OIDs this agent implements.
-     * @exception InstanceNotFoundException The SNMP protocol adaptor does
-     *     not exist in the MBean server.
-     *
-     * @exception ServiceNotFoundException This SNMP MIB is not registered
-     *     in the MBean server or the requested service is not supported.
-     *
-     * @since 1.5
-     */
-    public void setSnmpAdaptorName(ObjectName name,
-                                   String contextName, SnmpOid[] oids)
-        throws InstanceNotFoundException, ServiceNotFoundException {
-
-        if (server == null) {
-            throw new ServiceNotFoundException(mibName + " is not registered in the MBean server");
-        }
-
-        // First remove the reference on the old adaptor server.
-        //
-        if (adaptor != null) {
-            adaptor.removeMib(this, contextName);
-        }
-
-        // Then update the reference to the new adaptor server.
-        //
-        Object[] params = {this, contextName, oids};
-        String[] signature = {"com.sun.jmx.snmp.agent.SnmpMibAgent", "java.lang.String", oids.getClass().getName()};
-        try {
-            adaptor = (SnmpMibHandler)(server.invoke(name, "addMib", params,
-                                                     signature));
-        } catch (InstanceNotFoundException e) {
-            throw new InstanceNotFoundException(name.toString());
-        } catch (ReflectionException e) {
-            throw new ServiceNotFoundException(name.toString());
-        } catch (MBeanException e) {
-            // Should never occur...
-        }
-
-        adaptorName = name;
-    }
-
-    /**
-     * Indicates whether or not the MIB module is bound to a SNMP protocol
-     * adaptor.
-     * As a reminder, only bound MIBs can be accessed through SNMP protocol
-     * adaptor.
-     *
-     * @return <CODE>true</CODE> if the MIB module is bound,
-     *         <CODE>false</CODE> otherwise.
-     */
-    public boolean getBindingState() {
-        if (adaptor == null)
-            return false;
-        else
-            return true;
-    }
-
-    /**
-     * Gets the MIB name.
-     *
-     * @return The MIB name.
-     */
-    public String getMibName() {
-        return mibName;
-    }
-
-    /**
-     * This is a factory method for creating new SnmpMibRequest objects.
-     * @param reqPdu The received PDU.
-     * @param vblist   The vector of SnmpVarBind objects in which the
-     *        MIB concerned by this request is involved.
-     * @param version  The protocol version of the SNMP request.
-     * @param userData User allocated contextual data.
-     *
-     * @return A new SnmpMibRequest object.
-     *
-     * @since 1.5
-     **/
-    public static SnmpMibRequest newMibRequest(SnmpPdu reqPdu,
-                                               Vector<SnmpVarBind> vblist,
-                                               int version,
-                                               Object userData)
-    {
-        return new SnmpMibRequestImpl(null,
-                                      reqPdu,
-                                      vblist,
-                                      version,
-                                      userData,
-                                      null,
-                                      SnmpDefinitions.noAuthNoPriv,
-                                      getSecurityModel(version),
-                                      null,null);
-    }
-    /**
-     * This is a factory method for creating new SnmpMibRequest objects.
-     * @param engine The local engine.
-     * @param reqPdu The received pdu.
-     * @param vblist The vector of SnmpVarBind objects in which the
-     *        MIB concerned by this request is involved.
-     * @param version The protocol version of the SNMP request.
-     * @param userData User allocated contextual data.
-     *
-     * @return A new SnmpMibRequest object.
-     *
-     * @since 1.5
-     **/
-    public static SnmpMibRequest newMibRequest(SnmpEngine engine,
-                                               SnmpPdu reqPdu,
-                                               Vector<SnmpVarBind> vblist,
-                                               int version,
-                                               Object userData,
-                                               String principal,
-                                               int securityLevel,
-                                               int securityModel,
-                                               byte[] contextName,
-                                               byte[] accessContextName) {
-        return new SnmpMibRequestImpl(engine,
-                                      reqPdu,
-                                      vblist,
-                                      version,
-                                      userData,
-                                      principal,
-                                      securityLevel,
-                                      securityModel,
-                                      contextName,
-                                      accessContextName);
-    }
-    // ---------------------------------------------------------------------
-    // PACKAGE METHODS
-    // ---------------------------------------------------------------------
-
-    /**
-     * Processes a <CODE>getBulk</CODE> operation using call to
-     * <CODE>getNext</CODE>.
-     * The method implements the <CODE>getBulk</CODE> operation by calling
-     * appropriately the <CODE>getNext</CODE> method.
-     *
-     * @param req The SnmpMibRequest containing the variable list to be
-     *        retrieved.
-     *
-     * @param nonRepeat The number of variables, starting with the first
-     *    variable in the variable-bindings, for which a single lexicographic
-     *    successor is requested.
-     *
-     * @param maxRepeat The number of lexicographic successors
-     *    requested for each of the last R variables. R is the number of
-     *    variables following the first nonRepeat variables for which
-     *    multiple lexicographic successors are requested.
-     *
-     * @return The variable list containing returned values.
-     *
-     * @exception SnmpStatusException An error occured during the operation.
-     */
-    void getBulkWithGetNext(SnmpMibRequest req, int nonRepeat, int maxRepeat)
-        throws SnmpStatusException {
-        final Vector<SnmpVarBind> list = req.getSubList();
-
-        // RFC 1905, Section 4.2.3, p14
-        final int L = list.size() ;
-        final int N = Math.max(Math.min(nonRepeat, L), 0) ;
-        final int M = Math.max(maxRepeat, 0) ;
-        final int R = L - N ;
-
-        // Let's build the varBindList for the response pdu
-        //
-        // int errorStatus = SnmpDefinitions.snmpRspNoError ;
-        // int errorIndex = 0 ;
-        if (L != 0) {
-
-            // Non-repeaters and first row of repeaters
-            //
-            getNext(req);
-
-            // Now the remaining repeaters
-            //
-            Vector<SnmpVarBind> repeaters= splitFrom(list, N);
-            SnmpMibRequestImpl repeatedReq =
-                new SnmpMibRequestImpl(req.getEngine(),
-                                       req.getPdu(),
-                                       repeaters,
-                                       SnmpDefinitions.snmpVersionTwo,
-                                       req.getUserData(),
-                                       req.getPrincipal(),
-                                       req.getSecurityLevel(),
-                                       req.getSecurityModel(),
-                                       req.getContextName(),
-                                       req.getAccessContextName());
-            for (int i = 2 ; i <= M ; i++) {
-                getNext(repeatedReq);
-                concatVector(req, repeaters);
-            }
-        }
-    }
-
-
-    // ---------------------------------------------------------------------
-    // PRIVATE METHODS
-    // ---------------------------------------------------------------------
-
-    /**
-     * This method creates a new Vector which does not contain the first
-     * element up to the specified limit.
-     *
-     * @param original The original vector.
-     * @param limit The limit.
-     */
-    private Vector<SnmpVarBind> splitFrom(Vector<SnmpVarBind> original, int limit) {
-
-        int max= original.size();
-        Vector<SnmpVarBind> result= new Vector<SnmpVarBind>(max - limit);
-        int i= limit;
-
-        // Ok the loop looks a bit strange. But in order to improve the
-        // perf, we try to avoid reference to the limit variable from
-        // within the loop ...
-        //
-        for(Enumeration<SnmpVarBind> e= original.elements(); e.hasMoreElements(); --i) {
-            SnmpVarBind var= e.nextElement();
-            if (i >0)
-                continue;
-            result.addElement(new SnmpVarBind(var.oid, var.value));
-        }
-        return result;
-    }
-
-    private void concatVector(SnmpMibRequest req, Vector source) {
-        for(Enumeration e= source.elements(); e.hasMoreElements(); ) {
-            SnmpVarBind var= (SnmpVarBind) e.nextElement();
-            // We need to duplicate the SnmpVarBind otherwise it is going
-            // to be overloaded by the next get Next ...
-            req.addVarBind(new SnmpVarBind(var.oid, var.value));
-        }
-    }
-
-    private void concatVector(Vector<SnmpVarBind> target, Vector<SnmpVarBind> source) {
-        for(Enumeration<SnmpVarBind> e= source.elements(); e.hasMoreElements(); ) {
-            SnmpVarBind var= e.nextElement();
-            // We need to duplicate the SnmpVarBind otherwise it is going
-            // to be overloaded by the next get Next ...
-            target.addElement(new SnmpVarBind(var.oid, var.value));
-        }
-    }
-
-    private static int getSecurityModel(int version) {
-        switch(version) {
-        case SnmpDefinitions.snmpVersionOne:
-            return SnmpDefinitions.snmpV1SecurityModel;
-        default:
-            return SnmpDefinitions.snmpV2SecurityModel;
-        }
-    }
-
-    // ---------------------------------------------------------------------
-    // PROTECTED VARIABLES
-    // ---------------------------------------------------------------------
-
-    /**
-     * The object name of the MIB.
-     * @serial
-     */
-    protected String mibName;
-
-    /**
-     * The reference to the MBean server.
-     * @serial
-     */
-    protected MBeanServer server;
-
-    // ---------------------------------------------------------------------
-    // PRIVATE VARIABLES
-    // ---------------------------------------------------------------------
-
-    /**
-     * The object name of the SNMP protocol adaptor.
-     * @serial
-     */
-    private ObjectName adaptorName;
-
-    /**
-     * The reference to the SNMP stack.
-     */
-    private transient SnmpMibHandler adaptor;
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/agent/SnmpMibAgentMBean.java b/ojluni/src/main/java/com/sun/jmx/snmp/agent/SnmpMibAgentMBean.java
deleted file mode 100755
index b057823..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/agent/SnmpMibAgentMBean.java
+++ /dev/null
@@ -1,316 +0,0 @@
-/*
- * Copyright (c) 1999, 2007, 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.jmx.snmp.agent;
-
-
-
-// java imports
-//
-import java.util.Vector;
-
-// jmx imports
-//
-import javax.management.MBeanServer;
-import javax.management.ObjectName;
-import javax.management.MalformedObjectNameException;
-import javax.management.InstanceNotFoundException;
-import javax.management.ServiceNotFoundException;
-import com.sun.jmx.snmp.SnmpOid;
-import com.sun.jmx.snmp.SnmpStatusException;
-
-/**
- * Exposes the remote management interface of the <CODE>SnmpMibAgent</CODE> MBean.
- *
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- */
-
-public interface SnmpMibAgentMBean {
-
-    // PUBLIC METHODS
-    //---------------
-
-    /**
-     * Processes a <CODE>get</CODE> operation.
-     * This method must not be called from remote.
-     *
-     * @param req The SnmpMibRequest object holding the list of variables to
-     *            be retrieved. This list is composed of
-     *            <CODE>SnmpVarBind</CODE> objects.
-     *
-     * @exception SnmpStatusException An error occured during the operation.
-     * @see SnmpMibAgent#get(SnmpMibRequest)
-     */
-    public void get(SnmpMibRequest req) throws SnmpStatusException;
-
-    /**
-     * Processes a <CODE>getNext</CODE> operation.
-     * This method must not be called from remote.
-     *
-     * @param req The SnmpMibRequest object holding the list of variables to
-     *            be retrieved. This list is composed of
-     *            <CODE>SnmpVarBind</CODE> objects.
-     *
-     * @exception SnmpStatusException An error occured during the operation.
-     * @see SnmpMibAgent#getNext(SnmpMibRequest)
-     */
-    public void getNext(SnmpMibRequest req) throws SnmpStatusException;
-
-    /**
-     * Processes a <CODE>getBulk</CODE> operation.
-     * This method must not be called from remote.
-     *
-     * @param req The SnmpMibRequest object holding the list of variables to
-     *            be retrieved. This list is composed of
-     *            <CODE>SnmpVarBind</CODE> objects.
-     *
-     * @param nonRepeat The number of variables, starting with the first
-     *    variable in the variable-bindings, for which a single
-     *    lexicographic successor is requested.
-     *
-     * @param maxRepeat The number of lexicographic successors requested
-     *    for each of the last R variables. R is the number of variables
-     *    following the first <CODE>nonRepeat</CODE> variables for which
-     *    multiple lexicographic successors are requested.
-     *
-     * @exception SnmpStatusException An error occured during the operation.
-     * @see SnmpMibAgent#getBulk(SnmpMibRequest,int,int)
-     */
-    public void getBulk(SnmpMibRequest req, int nonRepeat, int maxRepeat)
-        throws SnmpStatusException;
-
-    /**
-     * Processes a <CODE>set</CODE> operation.
-     * This method must not be called from remote.
-     *
-     * @param req The SnmpMibRequest object holding the list of variables to
-     *            be set. This list is composed of
-     *            <CODE>SnmpVarBind</CODE> objects.
-     *
-     * @exception SnmpStatusException An error occured during the operation.
-     * @see SnmpMibAgent#set(SnmpMibRequest)
-     */
-    public void set(SnmpMibRequest req) throws SnmpStatusException;
-
-    /**
-     * Checks if a <CODE>set</CODE> operation can be performed.
-     * If the operation cannot be performed, the method should emit a
-     * <CODE>SnmpStatusException</CODE>.
-     *
-     * @param req The SnmpMibRequest object holding the list of variables to
-     *            be set. This list is composed of
-     *            <CODE>SnmpVarBind</CODE> objects.
-     *
-     * @exception SnmpStatusException The <CODE>set</CODE> operation
-     *    cannot be performed.
-     * @see SnmpMibAgent#check(SnmpMibRequest)
-     */
-    public void check(SnmpMibRequest req) throws SnmpStatusException;
-
-    // GETTERS AND SETTERS
-    //--------------------
-
-    /**
-     * Gets the reference to the MBean server in which the SNMP MIB is
-     * registered.
-     *
-     * @return The MBean server or null if the MIB is not registered in any
-     *         MBean server.
-     */
-    public MBeanServer getMBeanServer();
-
-    /**
-     * Gets the reference to the SNMP protocol adaptor to which the MIB is
-     * bound.
-     * <BR>This method is used for accessing the SNMP MIB handler property
-     * of the SNMP MIB agent in case of a standalone agent.
-     *
-     * @return The SNMP MIB handler.
-     */
-    public SnmpMibHandler getSnmpAdaptor();
-
-    /**
-     * Sets the reference to the SNMP protocol adaptor through which the
-     * MIB will be SNMP accessible and add this new MIB in the SNMP MIB
-     * handler.
-     * <BR>This method is used for setting the SNMP MIB handler property of
-     * the SNMP MIB agent in case of a standalone agent.
-     *
-     * @param stack The SNMP MIB handler.
-     */
-    public void setSnmpAdaptor(SnmpMibHandler stack);
-
-    /**
-     * Sets the reference to the SNMP protocol adaptor through which the MIB
-     * will be SNMP accessible and add this new MIB in the SNMP MIB handler.
-     * This method is to be called to set a specific agent to a specific OID.
-     * This can be useful when dealing with MIB overlapping.
-     * Some OID can be implemented in more than one MIB. In this case, the
-     * OID nearer agent will be used on SNMP operations.
-     * @param stack The SNMP MIB handler.
-     * @param oids The set of OIDs this agent implements.
-     *
-     * @since 1.5
-     */
-    public void setSnmpAdaptor(SnmpMibHandler stack, SnmpOid[] oids);
-
-    /**
-     * Sets the reference to the SNMP protocol adaptor through which the MIB
-     * will be SNMP accessible and add this new MIB in the SNMP MIB handler.
-     * Adds a new contextualized MIB in the SNMP MIB handler.
-     *
-     * @param stack The SNMP MIB handler.
-     * @param contextName The MIB context name. If null is passed, will be
-     *        registered in the default context.
-     *
-     * @exception IllegalArgumentException If the parameter is null.
-     *
-     * @since 1.5
-     */
-    public void setSnmpAdaptor(SnmpMibHandler stack, String contextName);
-
-    /**
-     * Sets the reference to the SNMP protocol adaptor through which the MIB
-     * will be SNMP accessible and adds this new MIB in the SNMP MIB handler.
-     * Adds a new contextualized MIB in the SNMP MIB handler.
-     *
-     * @param stack The SNMP MIB handler.
-     * @param contextName The MIB context name. If null is passed, will be
-     *        registered in the default context.
-     * @param oids The set of OIDs this agent implements.
-     * @exception IllegalArgumentException If the parameter is null.
-     *
-     * @since 1.5
-     */
-    public void setSnmpAdaptor(SnmpMibHandler stack,
-                               String contextName,
-                               SnmpOid[] oids);
-
-    /**
-     * Gets the object name of the SNMP protocol adaptor to which the MIB is
-     * bound.
-     *
-     * @return The name of the SNMP protocol adaptor.
-     */
-    public ObjectName getSnmpAdaptorName();
-
-    /**
-     * Sets the reference to the SNMP protocol adaptor through which the MIB
-     * will be SNMP accessible and add this new MIB in the SNMP MIB handler
-     * associated to the specified <CODE>name</CODE>.
-     *
-     * @param name The object name of the SNMP MIB handler.
-     *
-     * @exception InstanceNotFoundException The MBean does not exist in the
-     *        MBean server.
-     * @exception ServiceNotFoundException This SNMP MIB is not registered
-     *        in the MBean server or the requested service is not supported.
-     */
-    public void setSnmpAdaptorName(ObjectName name)
-        throws InstanceNotFoundException, ServiceNotFoundException;
-
-
-    /**
-     * Sets the reference to the SNMP protocol adaptor through which the MIB
-     * will be SNMP accessible and add this new MIB in the SNMP MIB handler
-     * associated to the specified <CODE>name</CODE>.
-     * This method is to be called to set a specific agent to a specific OID.
-     * This can be useful when dealing with MIB overlapping.
-     * Some OID can be implemented in more than one MIB. In this case, the
-     * OID nearer agent will be used on SNMP operations.
-     * @param name The name of the SNMP protocol adaptor.
-     * @param oids The set of OIDs this agent implements.
-     * @exception InstanceNotFoundException The SNMP protocol adaptor does
-     *     not exist in the MBean server.
-     *
-     * @exception ServiceNotFoundException This SNMP MIB is not registered
-     *     in the MBean server or the requested service is not supported.
-     *
-     * @since 1.5
-     */
-    public void setSnmpAdaptorName(ObjectName name, SnmpOid[] oids)
-        throws InstanceNotFoundException, ServiceNotFoundException;
-
-    /**
-     * Sets the reference to the SNMP protocol adaptor through which the MIB
-     * will be SNMP accessible and add this new MIB in the SNMP MIB handler
-     * associated to the specified <CODE>name</CODE>.
-     *
-     * @param name The name of the SNMP protocol adaptor.
-     * @param contextName The MIB context name. If null is passed, will be
-     *     registered in the default context.
-     * @exception InstanceNotFoundException The SNMP protocol adaptor does
-     *     not exist in the MBean server.
-     *
-     * @exception ServiceNotFoundException This SNMP MIB is not registered
-     *     in the MBean server or the requested service is not supported.
-     *
-     * @since 1.5
-     */
-    public void setSnmpAdaptorName(ObjectName name, String contextName)
-        throws InstanceNotFoundException, ServiceNotFoundException;
-
-     /**
-     * Sets the reference to the SNMP protocol adaptor through which the MIB
-     * will be SNMP accessible and add this new MIB in the SNMP MIB handler
-     * associated to the specified <CODE>name</CODE>.
-     *
-     * @param name The name of the SNMP protocol adaptor.
-     * @param contextName The MIB context name. If null is passed, will be
-     *        registered in the default context.
-     * @param oids The set of OIDs this agent implements.
-     * @exception InstanceNotFoundException The SNMP protocol adaptor does
-     *     not exist in the MBean server.
-     *
-     * @exception ServiceNotFoundException This SNMP MIB is not registered
-     *     in the MBean server or the requested service is not supported.
-     *
-     * @since 1.5
-     */
-    public void setSnmpAdaptorName(ObjectName name,
-                                   String contextName,
-                                   SnmpOid[] oids)
-        throws InstanceNotFoundException, ServiceNotFoundException;
-
-    /**
-     * Indicates whether or not the MIB module is bound to a SNMP protocol
-     * adaptor.
-     * As a reminder, only bound MIBs can be accessed through SNMP protocol
-     * adaptor.
-     *
-     * @return <CODE>true</CODE> if the MIB module is bound,
-     *         <CODE>false</CODE> otherwise.
-     */
-    public boolean getBindingState();
-
-    /**
-     * Gets the MIB name.
-     *
-     * @return The MIB name.
-     */
-    public String getMibName();
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/agent/SnmpMibEntry.java b/ojluni/src/main/java/com/sun/jmx/snmp/agent/SnmpMibEntry.java
deleted file mode 100755
index c7adccc..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/agent/SnmpMibEntry.java
+++ /dev/null
@@ -1,194 +0,0 @@
-/*
- * Copyright (c) 2000, 2007, 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.jmx.snmp.agent;
-
-// java imports
-//
-import java.io.Serializable;
-import java.util.Hashtable;
-import java.util.Enumeration;
-
-// jmx imports
-//
-import com.sun.jmx.snmp.SnmpValue;
-import com.sun.jmx.snmp.SnmpVarBind;
-import com.sun.jmx.snmp.SnmpStatusException;
-import com.sun.jmx.snmp.agent.SnmpMibOid;
-import com.sun.jmx.snmp.agent.SnmpMibNode;
-
-/**
- * Represents a node in an SNMP MIB which corresponds to a table entry
- * meta node.
- * <P>
- * This class is used by the class generated by <CODE>mibgen</CODE>.
- * You should not need to use this class directly.
- *
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- */
-
-public abstract class SnmpMibEntry extends SnmpMibNode
-    implements Serializable {
-
-    /**
-     * Tells whether the given arc identifies a variable (scalar object) in
-     * this entry.
-     *
-     * @param arc An OID arc.
-     *
-     * @return <CODE>true</CODE> if `arc' leads to a variable.
-     */
-    public abstract boolean isVariable(long arc);
-
-    /**
-     * Tells whether the given arc identifies a readable scalar object in
-     * this entry.
-     *
-     * @param arc An OID arc.
-     *
-     * @return <CODE>true</CODE> if `arc' leads to a readable variable.
-     */
-    public abstract boolean isReadable(long arc);
-
-    /**
-     * Get the next OID arc corresponding to a readable scalar variable.
-     *
-     */
-    public long getNextVarId(long id, Object userData)
-        throws SnmpStatusException {
-        long nextvar = super.getNextVarId(id,userData);
-        while (!isReadable(nextvar))
-            nextvar = super.getNextVarId(nextvar,userData);
-        return nextvar;
-    }
-
-    /**
-     * Checks whether the given OID arc identifies a variable (columnar
-     * object).
-     *
-     * @param userData A contextual object containing user-data.
-     *        This object is allocated through the <code>
-     *        {@link com.sun.jmx.snmp.agent.SnmpUserDataFactory}</code>
-     *        for each incoming SNMP request.
-     *
-     * @exception If the given `arc' does not identify any variable in this
-     *    group, throws an SnmpStatusException.
-     */
-    public void validateVarId(long arc, Object userData)
-        throws SnmpStatusException {
-        if (isVariable(arc) == false) throw noSuchNameException;
-    }
-
-    /**
-     * Generic handling of the <CODE>get</CODE> operation.
-     * <p>The actual implementation of this method will be generated
-     * by mibgen. Usually, this implementation only delegates the
-     * job to some other provided runtime class, which knows how to
-     * access the MBean. The current toolkit thus provides two
-     * implementations:
-     * <ul><li>The standard implementation will directly access the
-     *         MBean through a java reference,</li>
-     *     <li>The generic implementation will access the MBean through
-     *         the MBean server.</li>
-     * </ul>
-     * <p>Both implementations rely upon specific - and distinct, set of
-     * mibgen generated methods.
-     * <p> You can override this method if you need to implement some
-     * specific policies for minimizing the accesses made to some remote
-     * underlying resources.
-     * <p>
-     *
-     * @param req   The sub-request that must be handled by this node.
-     *
-     * @param depth The depth reached in the OID tree.
-     *
-     * @exception SnmpStatusException An error occurred while accessing
-     *  the MIB node.
-     */
-    abstract public void get(SnmpMibSubRequest req, int depth)
-        throws SnmpStatusException;
-
-    /**
-     * Generic handling of the <CODE>set</CODE> operation.
-     * <p>The actual implementation of this method will be generated
-     * by mibgen. Usually, this implementation only delegates the
-     * job to some other provided runtime class, which knows how to
-     * access the MBean. The current toolkit thus provides two
-     * implementations:
-     * <ul><li>The standard implementation will directly access the
-     *         MBean through a java reference,</li>
-     *     <li>The generic implementation will access the MBean through
-     *         the MBean server.</li>
-     * </ul>
-     * <p>Both implementations rely upon specific - and distinct, set of
-     * mibgen generated methods.
-     * <p> You can override this method if you need to implement some
-     * specific policies for minimizing the accesses made to some remote
-     * underlying resources.
-     * <p>
-     *
-     * @param req   The sub-request that must be handled by this node.
-     *
-     * @param depth The depth reached in the OID tree.
-     *
-     * @exception SnmpStatusException An error occurred while accessing
-     *  the MIB node.
-     */
-    abstract public void set(SnmpMibSubRequest req, int depth)
-        throws SnmpStatusException;
-
-    /**
-     * Generic handling of the <CODE>check</CODE> operation.
-     *
-     * <p>The actual implementation of this method will be generated
-     * by mibgen. Usually, this implementation only delegates the
-     * job to some other provided runtime class, which knows how to
-     * access the MBean. The current toolkit thus provides two
-     * implementations:
-     * <ul><li>The standard implementation will directly access the
-     *         MBean through a java reference,</li>
-     *     <li>The generic implementation will access the MBean through
-     *         the MBean server.</li>
-     * </ul>
-     * <p>Both implementations rely upon specific - and distinct, set of
-     * mibgen generated methods.
-     * <p> You can override this method if you need to implement some
-     * specific policies for minimizing the accesses made to some remote
-     * underlying resources, or if you need to implement some consistency
-     * checks between the different values provided in the varbind list.
-     * <p>
-     *
-     * @param req   The sub-request that must be handled by this node.
-     *
-     * @param depth The depth reached in the OID tree.
-     *
-     * @exception SnmpStatusException An error occurred while accessing
-     *  the MIB node.
-     */
-    abstract public void check(SnmpMibSubRequest req, int depth)
-        throws SnmpStatusException;
-
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/agent/SnmpMibGroup.java b/ojluni/src/main/java/com/sun/jmx/snmp/agent/SnmpMibGroup.java
deleted file mode 100755
index b34e000..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/agent/SnmpMibGroup.java
+++ /dev/null
@@ -1,519 +0,0 @@
-/*
- * Copyright (c) 1999, 2007, 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.jmx.snmp.agent;
-
-// java imports
-//
-import java.io.Serializable;
-import java.util.Hashtable;
-import java.util.Enumeration;
-import java.util.Vector;
-
-// jmx imports
-//
-import com.sun.jmx.snmp.SnmpOid;
-import com.sun.jmx.snmp.SnmpValue;
-import com.sun.jmx.snmp.SnmpVarBind;
-import com.sun.jmx.snmp.SnmpStatusException;
-
-// SNMP Runtime imports
-//
-import com.sun.jmx.snmp.agent.SnmpMibOid;
-import com.sun.jmx.snmp.agent.SnmpMibNode;
-
-/**
- * Represents a node in an SNMP MIB which corresponds to a group.
- * This class allows subnodes to be registered below a group, providing
- * support for nested groups. The subnodes are registered at run time
- * when registering the nested groups in the global MIB OID tree.
- * <P>
- * This class is used by the class generated by <CODE>mibgen</CODE>.
- * You should not need to use this class directly.
- *
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- */
-
-public abstract class SnmpMibGroup extends SnmpMibOid
-    implements Serializable {
-
-    // We will register the OID arcs leading to subgroups in this hashtable.
-    // So for each arc in varList, if the arc is also in subgroups, it leads
-    // to a subgroup, if it is not in subgroup, it leads either to a table
-    // or to a variable.
-    protected Hashtable<Long, Long> subgroups = null;
-
-    /**
-     * Tells whether the given arc identifies a table in this group.
-     *
-     * @param arc An OID arc.
-     *
-     * @return <CODE>true</CODE> if `arc' leads to a table.
-     */
-    public abstract boolean      isTable(long arc);
-
-    /**
-     * Tells whether the given arc identifies a variable (scalar object) in
-     * this group.
-     *
-     * @param arc An OID arc.
-     *
-     * @return <CODE>true</CODE> if `arc' leads to a variable.
-     */
-    public abstract boolean      isVariable(long arc);
-
-    /**
-     * Tells whether the given arc identifies a readable scalar object in
-     * this group.
-     *
-     * @param arc An OID arc.
-     *
-     * @return <CODE>true</CODE> if `arc' leads to a readable variable.
-     */
-    public abstract boolean      isReadable(long arc);
-
-
-    /**
-     * Gets the table identified by the given `arc'.
-     *
-     * @param arc An OID arc.
-     *
-     * @return The <CODE>SnmpMibTable</CODE> identified by `arc', or
-     *    <CODE>null</CODE> if `arc' does not identify any table.
-     */
-    public abstract SnmpMibTable getTable(long arc);
-
-    /**
-     * Checks whether the given OID arc identifies a variable (scalar
-     * object).
-     *
-     * @exception If the given `arc' does not identify any variable in this
-     *    group, throws an SnmpStatusException.
-     */
-    public void validateVarId(long arc, Object userData)
-        throws SnmpStatusException {
-        if (isVariable(arc) == false)
-            throw noSuchObjectException;
-    }
-
-
-    // -------------------------------------------------------------------
-    // We use a hashtable (subgroup) in order to determine whether an
-    // OID arc leads to a subgroup. This implementation can be changed if
-    // needed...
-    // For instance, the subclass could provide a generated isNestedArc()
-    // method in which the subgroup OID arcs would be hardcoded.
-    // However, the generic approach was prefered because at this time
-    // groups and subgroups are dynamically registered in the MIB.
-    //
-    /**
-     * Tell whether the given OID arc identifies a sub-tree
-     * leading to a nested SNMP sub-group. This method is used internally.
-     * You shouldn't need to call it directly.
-     *
-     * @param arc An OID arc.
-     *
-     * @return <CODE>true</CODE> if the given OID arc identifies a subtree
-     * leading to a nested SNMP sub-group.
-     *
-     */
-    public boolean isNestedArc(long arc) {
-        if (subgroups == null) return false;
-        Object obj = subgroups.get(new Long(arc));
-        // if the arc is registered in the hashtable,
-        // it leads to a subgroup.
-        return (obj != null);
-    }
-
-    /**
-     * Generic handling of the <CODE>get</CODE> operation.
-     * <p>The actual implementation of this method will be generated
-     * by mibgen. Usually, this implementation only delegates the
-     * job to some other provided runtime class, which knows how to
-     * access the MBean. The current toolkit thus provides two
-     * implementations:
-     * <ul><li>The standard implementation will directly access the
-     *         MBean through a java reference,</li>
-     *     <li>The generic implementation will access the MBean through
-     *         the MBean server.</li>
-     * </ul>
-     * <p>Both implementations rely upon specific - and distinct, set of
-     * mibgen generated methods.
-     * <p> You can override this method if you need to implement some
-     * specific policies for minimizing the accesses made to some remote
-     * underlying resources.
-     * <p>
-     *
-     * @param req   The sub-request that must be handled by this node.
-     *
-     * @param depth The depth reached in the OID tree.
-     *
-     * @exception SnmpStatusException An error occurred while accessing
-     *  the MIB node.
-     */
-    abstract public void get(SnmpMibSubRequest req, int depth)
-        throws SnmpStatusException;
-
-    /**
-     * Generic handling of the <CODE>set</CODE> operation.
-     * <p>The actual implementation of this method will be generated
-     * by mibgen. Usually, this implementation only delegates the
-     * job to some other provided runtime class, which knows how to
-     * access the MBean. The current toolkit thus provides two
-     * implementations:
-     * <ul><li>The standard implementation will directly access the
-     *         MBean through a java reference,</li>
-     *     <li>The generic implementation will access the MBean through
-     *         the MBean server.</li>
-     * </ul>
-     * <p>Both implementations rely upon specific - and distinct, set of
-     * mibgen generated methods.
-     * <p> You can override this method if you need to implement some
-     * specific policies for minimizing the accesses made to some remote
-     * underlying resources.
-     * <p>
-     *
-     * @param req   The sub-request that must be handled by this node.
-     *
-     * @param depth The depth reached in the OID tree.
-     *
-     * @exception SnmpStatusException An error occurred while accessing
-     *  the MIB node.
-     */
-    abstract public void set(SnmpMibSubRequest req, int depth)
-        throws SnmpStatusException;
-
-    /**
-     * Generic handling of the <CODE>check</CODE> operation.
-     *
-     * <p>The actual implementation of this method will be generated
-     * by mibgen. Usually, this implementation only delegates the
-     * job to some other provided runtime class, which knows how to
-     * access the MBean. The current toolkit thus provides two
-     * implementations:
-     * <ul><li>The standard implementation will directly access the
-     *         MBean through a java reference,</li>
-     *     <li>The generic implementation will access the MBean through
-     *         the MBean server.</li>
-     * </ul>
-     * <p>Both implementations rely upon specific - and distinct, set of
-     * mibgen generated methods.
-     * <p> You can override this method if you need to implement some
-     * specific policies for minimizing the accesses made to some remote
-     * underlying resources, or if you need to implement some consistency
-     * checks between the different values provided in the varbind list.
-     * <p>
-     *
-     * @param req   The sub-request that must be handled by this node.
-     *
-     * @param depth The depth reached in the OID tree.
-     *
-     * @exception SnmpStatusException An error occurred while accessing
-     *  the MIB node.
-     */
-    abstract public void check(SnmpMibSubRequest req, int depth)
-        throws SnmpStatusException;
-
-    // --------------------------------------------------------------------
-    // If we reach this node, we are below the root OID, so we just
-    // return.
-    // --------------------------------------------------------------------
-    public void getRootOid(Vector result) {
-        return;
-    }
-
-    // -------------------------------------------------------------------
-    // PACKAGE METHODS
-    // -------------------------------------------------------------------
-
-    // -------------------------------------------------------------------
-    // This method can also be overriden in a subclass to provide a
-    // different implementation of the isNestedArc() method.
-    // => if isNestedArc() is hardcoded, then registerSubArc() becomes
-    //    useless and can become empty.
-    /**
-     * Register an OID arc that identifies a sub-tree
-     * leading to a nested SNMP sub-group. This method is used internally.
-     * You shouldn't ever call it directly.
-     *
-     * @param arc An OID arc.
-     *
-     */
-    void registerNestedArc(long arc) {
-        Long obj = new Long(arc);
-        if (subgroups == null) subgroups = new Hashtable<Long, Long>();
-        // registers the arc in the hashtable.
-        subgroups.put(obj,obj);
-    }
-
-    // -------------------------------------------------------------------
-    // The SnmpMibOid algorithm relies on the fact that for every arc
-    // registered in varList, there is a corresponding node at the same
-    // position in children.
-    // So the trick is to register a null node in children for each variable
-    // in varList, so that the real subgroup nodes can be inserted at the
-    // correct location.
-    // registerObject() should be called for each scalar object and each
-    // table arc by the generated subclass.
-    /**
-     * Register an OID arc that identifies a scalar object or a table.
-     * This method is used internally. You shouldn't ever call it directly.
-     *
-     * @param arc An OID arc.
-     *
-     */
-    protected void registerObject(long arc)
-        throws IllegalAccessException {
-
-        // this will register the variable in both varList and children
-        // The node registered in children will be null, so that the parent
-        // algorithm will behave as if no node were registered. This is a
-        // trick that makes the parent algorithm behave as if only subgroups
-        // were registered in varList and children.
-        long[] oid = new long[1];
-        oid[0] = arc;
-        super.registerNode(oid,0,null);
-    }
-
-    // -------------------------------------------------------------------
-    // registerNode() will be called at runtime when nested groups are
-    // registered in the MIB. So we do know that this method will only
-    // be called to register nested-groups.
-    // We trap registerNode() in order to call registerSubArc()
-    /**
-     * Register a child node of this node in the OID tree.
-     * This method is used internally. You shouldn't ever call it directly.
-     *
-     * @param oid The oid of the node being registered.
-     * @param cursor The position reached in the oid.
-     * @param node The node being registered.
-     *
-     */
-    void registerNode(long[] oid, int cursor ,SnmpMibNode node)
-        throws IllegalAccessException {
-        super.registerNode(oid,cursor,node);
-        if (cursor < 0) return;
-        if (cursor >= oid.length) return;
-        // if we get here, then it means we are registering a subgroup.
-        // We will thus register the sub arc in the subgroups hashtable.
-        registerNestedArc(oid[cursor]);
-    }
-
-    // -------------------------------------------------------------------
-    // see comments in SnmpMibNode
-    // -------------------------------------------------------------------
-    void findHandlingNode(SnmpVarBind varbind,
-                          long[] oid, int depth,
-                          SnmpRequestTree handlers)
-        throws SnmpStatusException {
-
-        int length = oid.length;
-        SnmpMibNode node = null;
-
-        if (handlers == null)
-            throw new SnmpStatusException(SnmpStatusException.snmpRspGenErr);
-
-        final Object data = handlers.getUserData();
-
-        if (depth >= length) {
-            // Nothing is left... the oid is not valid
-            throw new SnmpStatusException(SnmpStatusException.noAccess);
-        }
-
-        long arc = oid[depth];
-
-        if (isNestedArc(arc)) {
-            // This arc leads to a subgroup: delegates the search to the
-            // method defined in SnmpMibOid
-            super.findHandlingNode(varbind,oid,depth,handlers);
-            return;
-        } else if (isTable(arc)) {
-            // This arc leads to a table: forward the search to the table.
-
-            // Gets the table
-            SnmpMibTable table = getTable(arc);
-
-            // Forward the search to the table
-            table.findHandlingNode(varbind,oid,depth+1,handlers);
-
-        } else {
-            // If it's not a variable, throws an exception
-            validateVarId(arc, data);
-
-            // The trailing .0 is missing in the OID
-            if (depth+2 > length)
-                throw noSuchInstanceException;
-
-            // There are too many arcs left in the OID (there should remain
-            // a single trailing .0)
-            if (depth+2 < length)
-                throw noSuchInstanceException;
-
-            // The last trailing arc is not .0
-            if (oid[depth+1] != 0L)
-                throw noSuchInstanceException;
-
-            // It's one of our variable, register this node.
-            handlers.add(this,depth,varbind);
-        }
-    }
-
-    // -------------------------------------------------------------------
-    // See comments in SnmpMibNode.
-    // -------------------------------------------------------------------
-    long[] findNextHandlingNode(SnmpVarBind varbind,
-                                long[] oid, int pos, int depth,
-                                SnmpRequestTree handlers, AcmChecker checker)
-        throws SnmpStatusException {
-
-        int length = oid.length;
-        SnmpMibNode node = null;
-
-        if (handlers == null)
-            // This should be considered as a genErr, but we do not want to
-            // abort the whole request, so we're going to throw
-            // a noSuchObject...
-            //
-            throw noSuchObjectException;
-
-        final Object data = handlers.getUserData();
-        final int pduVersion = handlers.getRequestPduVersion();
-
-
-        // The generic case where the end of the OID has been reached is
-        // handled in the superclass
-        // XXX Revisit: this works but it is somewhat convoluted. Just setting
-        //              arc to -1 would work too.
-        if (pos >= length)
-            return super.findNextHandlingNode(varbind,oid,pos,depth,
-                                              handlers, checker);
-
-        // Ok, we've got the arc.
-        long arc = oid[pos];
-
-        long[] result = null;
-
-        // We have a recursive logic. Should we have a loop instead?
-        try {
-
-            if (isTable(arc)) {
-                // If the arc identifies a table, then we need to forward
-                // the search to the table.
-
-                // Gets the table identified by `arc'
-                SnmpMibTable table = getTable(arc);
-
-                // Forward to the table
-                checker.add(depth, arc);
-                try {
-                    result = table.findNextHandlingNode(varbind,oid,pos+1,
-                                                        depth+1,handlers,
-                                                        checker);
-                }catch(SnmpStatusException ex) {
-                    throw noSuchObjectException;
-                } finally {
-                    checker.remove(depth);
-                }
-                // Build up the leaf OID
-                result[depth] = arc;
-                return result;
-            } else if (isReadable(arc)) {
-                // If the arc identifies a readable variable, then two cases:
-
-                if (pos == (length - 1)) {
-                    // The end of the OID is reached, so we return the leaf
-                    // corresponding to the variable identified by `arc'
-
-                    // Build up the OID
-                    // result = new SnmpOid(0);
-                    // result.insert((int)arc);
-                    result = new long[depth+2];
-                    result[depth+1] = 0L;
-                    result[depth] = arc;
-
-                    checker.add(depth, result, depth, 2);
-                    try {
-                        checker.checkCurrentOid();
-                    } catch(SnmpStatusException e) {
-                        throw noSuchObjectException;
-                    } finally {
-                        checker.remove(depth,2);
-                    }
-
-                    // Registers this node
-                    handlers.add(this,depth,varbind);
-                    return result;
-                }
-
-                // The end of the OID is not yet reached, so we must return
-                // the next leaf following the variable identified by `arc'.
-                // We cannot return the variable because whatever follows in
-                // the OID will be greater or equals to 0, and 0 identifies
-                // the variable itself - so we have indeed to return the
-                // next object.
-                // So we do nothing, because this case is handled at the
-                // end of the if ... else if ... else ... block.
-
-            } else if (isNestedArc(arc)) {
-                // Now if the arc leads to a subgroup, we delegate the
-                // search to the child, just as done in SnmpMibNode.
-                //
-
-                // get the child ( = nested arc node).
-                //
-                final SnmpMibNode child = getChild(arc);
-
-                if (child != null) {
-                    checker.add(depth, arc);
-                    try {
-                        result = child.findNextHandlingNode(varbind,oid,pos+1,
-                                                            depth+1,handlers,
-                                                            checker);
-                        result[depth] = arc;
-                        return result;
-                    } finally {
-                        checker.remove(depth);
-                    }
-                }
-            }
-
-            // The oid is not valid, we will throw an exception in order
-            // to try with the next valid identifier...
-            //
-            throw noSuchObjectException;
-
-        } catch (SnmpStatusException e) {
-            // We didn't find anything at the given arc, so we're going
-            // to try with the next valid arc
-            //
-            long[] newOid = new long[1];
-            newOid[0] = getNextVarId(arc,data,pduVersion);
-            return findNextHandlingNode(varbind,newOid,0,depth,
-                                        handlers,checker);
-        }
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/agent/SnmpMibHandler.java b/ojluni/src/main/java/com/sun/jmx/snmp/agent/SnmpMibHandler.java
deleted file mode 100755
index 2b60210..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/agent/SnmpMibHandler.java
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * Copyright (c) 1998, 2007, 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.jmx.snmp.agent;
-
-
-
-// java imports
-//
-import java.util.Vector;
-import java.io.IOException;
-
-// jmx imports
-//
-import com.sun.jmx.snmp.SnmpOid;
-import com.sun.jmx.snmp.SnmpStatusException;
-
-/**
- * The logical link between an SNMP MIB and the SNMP communication stack.
- *
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- */
-
-public interface SnmpMibHandler {
-
-    /**
-     * Adds a new MIB in the SNMP MIB handler.
-     * This method is called automatically by {@link com.sun.jmx.snmp.agent.SnmpMibAgent#setSnmpAdaptor(SnmpMibHandler)} and
-     * {@link com.sun.jmx.snmp.agent.SnmpMibAgent#setSnmpAdaptorName(ObjectName)} and should not be called directly.
-     *
-     * @param mib The MIB to add.
-     *
-     * @return A reference on the SNMP MIB handler.
-     *
-     * @exception IllegalArgumentException If the parameter is null.
-     */
-    public SnmpMibHandler addMib(SnmpMibAgent mib) throws IllegalArgumentException;
-
-/**
-     * Adds a new MIB in the SNMP MIB handler.
-     *
-     * @param mib The MIB to add.
-     * @param oids The array of oid used to add the mib. Each oid is a root oid for the mib.
-     * @return A reference on the SNMP MIB handler.
-     *
-     * @exception IllegalArgumentException If the parameter is null.
-     *
-     * @since 1.5
-     */
-    public SnmpMibHandler addMib(SnmpMibAgent mib, SnmpOid[] oids) throws IllegalArgumentException;
-
-    /**
-     * Adds a new contextualized MIB in the SNMP MIB handler.
-     *
-     * @param mib The MIB to add.
-     * @param contextName The MIB context name. If null is passed, will be registered in the default context.
-     *
-     * @return A reference to the SNMP MIB handler.
-     *
-     * @exception IllegalArgumentException If the parameter is null.
-     *
-     * @since 1.5
-     */
-    public SnmpMibHandler addMib(SnmpMibAgent mib, String contextName)
-        throws IllegalArgumentException;
-
-    /**
-     * Adds a new contextualized MIB in the SNMP MIB handler.
-     *
-     * @param mib The MIB to add.
-     * @param contextName The MIB context name. If null is passed, will be registered in the default context.
-     * @param oids The array of oid used to add the mib. Each oid is a root oid for the mib.
-     *
-     * @return A reference to the SNMP MIB handler.
-     *
-     * @exception IllegalArgumentException If the parameter is null.
-     *
-     * @since 1.5
-     */
-    public SnmpMibHandler addMib(SnmpMibAgent mib, String contextName, SnmpOid[] oids)
-        throws IllegalArgumentException;
-
-    /**
-     * Removes the specified MIB from the SNMP protocol adaptor.
-     * This method is called automatically by {@link com.sun.jmx.snmp.agent.SnmpMibAgent#setSnmpAdaptor(SnmpMibHandler)} and
-     * {@link com.sun.jmx.snmp.agent.SnmpMibAgent#setSnmpAdaptorName(ObjectName)} and should not be called directly.
-     *
-     * @param mib The MIB to be removed.
-     *
-     * @return <CODE>true</CODE> if the specified <CODE>mib</CODE> was a MIB included in the SNMP MIB handler,
-     * <CODE>false</CODE> otherwise.
-     */
-    public boolean removeMib(SnmpMibAgent mib);
-  /**
-     * Removes the specified MIB from the SNMP protocol adaptor.
-     * This method is called automatically by {@link com.sun.jmx.snmp.agent.SnmpMibAgent#setSnmpAdaptor(SnmpMibHandler)} and
-     * {@link com.sun.jmx.snmp.agent.SnmpMibAgent#setSnmpAdaptorName(ObjectName)} and should not be called directly.
-     *
-     * @param mib The MIB to be removed.
-     * @param oids The oid the MIB was previously registered for.
-     * @return <CODE>true</CODE> if the specified <CODE>mib</CODE> was a MIB included in the SNMP MIB handler,
-     * <CODE>false</CODE> otherwise.
-     *
-     * @since 1.5
-     */
-    public boolean removeMib(SnmpMibAgent mib, SnmpOid[] oids);
-     /**
-     * Removes the specified MIB from the SNMP protocol adaptor.
-     *
-     * @param mib The MIB to be removed.
-     * @param contextName The context name used at registration time.
-     *
-     * @return <CODE>true</CODE> if the specified <CODE>mib</CODE> was a MIB included in the SNMP MIB handler,
-     * <CODE>false</CODE> otherwise.
-     *
-     * @since 1.5
-     */
-    public boolean removeMib(SnmpMibAgent mib, String contextName);
-     /**
-     * Removes the specified MIB from the SNMP protocol adaptor.
-     *
-     * @param mib The MIB to be removed.
-     * @param contextName The context name used at registration time.
-     * @param oids The oid the MIB was previously registered for.
-     * @return <CODE>true</CODE> if the specified <CODE>mib</CODE> was a MIB included in the SNMP MIB handler,
-     * <CODE>false</CODE> otherwise.
-     *
-     * @since 1.5
-     */
-    public boolean removeMib(SnmpMibAgent mib, String contextName, SnmpOid[] oids);
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/agent/SnmpMibNode.java b/ojluni/src/main/java/com/sun/jmx/snmp/agent/SnmpMibNode.java
deleted file mode 100755
index f96e6c3..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/agent/SnmpMibNode.java
+++ /dev/null
@@ -1,414 +0,0 @@
-/*
- * Copyright (c) 1997, 2007, 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.jmx.snmp.agent;
-
-
-
-// java imports
-//
-import java.io.Serializable;
-import java.util.Vector;
-import java.util.Hashtable;
-import java.util.Enumeration;
-
-// jmx imports
-//
-import com.sun.jmx.snmp.SnmpOid;
-import com.sun.jmx.snmp.SnmpValue;
-import com.sun.jmx.snmp.SnmpVarBind;
-import com.sun.jmx.snmp.SnmpDefinitions;
-import com.sun.jmx.snmp.SnmpStatusException;
-
-/**
- * The <CODE>SnmpMibNode</CODE> class represents a node in an SNMP MIB.
- * <P>
- * This class is used internally and by the class generated by
- * <CODE>mibgen</CODE>.
- * You should not need to use this class directly.
- *
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- */
-
-public abstract class SnmpMibNode implements Serializable {
-
-    // ---------------------------------------------------------------------
-    // PUBLIC METHODS
-    //----------------------------------------------------------------------
-
-    /**
-     * Get the next OID arc corresponding to a readable scalar variable,
-     * a branch leading to a subgroub, or a table.
-     *
-     * @param id Id we start from looking for the next.
-     * @param userData A contextual object containing user-data.
-     *        This object is allocated through the <code>
-     *        {@link com.sun.jmx.snmp.agent.SnmpUserDataFactory}</code>
-     *        for each incoming SNMP request.
-     *
-     * @return The next id in this group.
-     *
-     * @exception SnmpStatusException If no id is found after the given id.
-     */
-    public long getNextVarId(long id, Object userData)
-        throws SnmpStatusException {
-        return getNextIdentifier(varList,id);
-    }
-
-    /**
-     * Get the next OID arc corresponding to a readable scalar variable,
-     * a branch leading to a subgroub, or a table, possibly skipping over
-     * those arcs that must not or cannot be returned.
-     *
-     * Calls {@link #getNextVarId(long,java.lang.Object)} until
-     * {@link #skipVariable(long,java.lang.Object,int)} returns false.
-     *
-     * @param id Id we start from looking for the next.
-     * @param userData A contextual object containing user-data.
-     *        This object is allocated through the <code>
-     *        {@link com.sun.jmx.snmp.agent.SnmpUserDataFactory}</code>
-     *        for each incoming SNMP request.
-     * @param pduVersion Protocol version of the original request PDU.
-     *
-     * @return The next id in this group which can be returned using
-     *         the given PDU's protocol version.
-     *
-     * @exception SnmpStatusException If no id is found after the given id.
-     */
-    public long getNextVarId(long id, Object userData, int pduVersion)
-        throws SnmpStatusException {
-        long varid=id;
-        do {
-            varid = getNextVarId(varid,userData);
-        } while (skipVariable(varid,userData,pduVersion));
-
-        return varid;
-    }
-
-    /**
-     * Hook for subclasses.
-     * The default implementation of this method is to always return
-     * false. Subclasses should redefine this method so that it returns
-     * true when:
-     * <ul><li>the variable is a leaf that is not instantiated,</li>
-     * <li>or the variable is a leaf whose type cannot be returned by that
-     *     version of the protocol (e.g. an Counter64 with SNMPv1).</li>
-     * </ul>
-     *
-     * @param id Id we start from looking for the next.
-     * @param userData A contextual object containing user-data.
-     *        This object is allocated through the <code>
-     *        {@link com.sun.jmx.snmp.agent.SnmpUserDataFactory}</code>
-     *        for each incoming SNMP request.
-     * @param pduVersion Protocol version of the original request PDU.
-     *
-     * @return true if the variable must be skipped by the get-next
-     *         algorithm.
-     */
-    protected boolean skipVariable(long id, Object userData, int pduVersion) {
-        return false;
-    }
-
-    /**
-     * Find the node which handles a varbind, and register it in the
-     * SnmpRequestTree. This method is a pure internal method. You should
-     * never try to call it directly.
-     *
-     * @param varbind  The varbind to be handled
-     *
-     * @param oid      The OID array extracted from the varbind
-     *
-     * @param depth    The depth reached in the OID at this step of the
-     *                 processing.
-     *
-     * @param handlers The Hashtable in which the varbind will be registered
-     *                 with its handling node. This hashtable contains
-     *                 <CODE>SnmpRequestTree.Handler</CODE> items.
-     *
-     * @exception SnmpStatusException No handling node was found.
-     **/
-    void findHandlingNode(SnmpVarBind varbind,
-                          long[] oid, int depth,
-                          SnmpRequestTree handlers)
-        throws SnmpStatusException {
-        throw noSuchObjectException;
-    }
-
-    /**
-     * Find the node which handles the leaf that immediately follows the
-     * given varbind OID, and register the it in the SnmpRequestTree.
-     * This method is a pure internal method. You should never try to call
-     * it directly.
-     *
-     * @param varbind  The varbind to be handled
-     *
-     * @param oid      The OID array extracted from the varbind
-     *
-     * @param depth    The depth reached in the OID at this step of the
-     *                 processing.
-     *
-     * @param handlers The Hashtable in which the varbind will be registered
-     *                 with its handling node. This hashtable contains
-     *                 SnmpRequestTree.Handler items.
-     *
-     * @return The SnmpOid of the next leaf.
-     *
-     * @exception SnmpStatusException No handling node was found.
-     **/
-    long[] findNextHandlingNode(SnmpVarBind varbind,
-                                 long[] oid, int pos, int depth,
-                                 SnmpRequestTree handlers, AcmChecker checker)
-        throws SnmpStatusException {
-        throw noSuchObjectException;
-    }
-
-    /**
-     * Generic handling of the <CODE>get</CODE> operation.
-     *
-     * <p> You can override this method if you need to implement some
-     * specific policies for minimizing the accesses made to some remote
-     * underlying resources.
-     * <p>
-     *
-     * @param req   The sub-request that must be handled by this node.
-     *
-     * @param depth The depth reached in the OID tree.
-     *
-     * @exception SnmpStatusException An error occurred while accessing
-     *  the MIB node.
-     */
-    public abstract void get(SnmpMibSubRequest req, int depth)
-        throws SnmpStatusException;
-
-    /**
-     * Generic handling of the <CODE>set</CODE> operation.
-     * <p> You can override this method if you need to implement some
-     * specific policies for minimizing the accesses made to some remote
-     * underlying resources.
-     * <p>
-     *
-     * @param req   The sub-request that must be handled by this node.
-     *
-     * @param depth The depth reached in the OID tree.
-     *
-     * @exception SnmpStatusException An error occurred while accessing
-     *  the MIB node.
-     */
-    public abstract void set(SnmpMibSubRequest req, int depth)
-        throws SnmpStatusException;
-
-    /**
-     * Generic handling of the <CODE>check</CODE> operation.
-     * <p> You can override this method if you need to implement some
-     * specific policies for minimizing the accesses made to some remote
-     * underlying resources, or if you need to implement some consistency
-     * checks between the different values provided in the varbind list.
-     * <p>
-     *
-     * @param req   The sub-request that must be handled by this node.
-     *
-     * @param depth The depth reached in the OID tree.
-     *
-     * @exception SnmpStatusException An error occurred while accessing
-     *  the MIB node.
-     */
-    public abstract void check(SnmpMibSubRequest req, int depth)
-        throws SnmpStatusException;
-
-    /**
-     * Sorts the specified integer array.
-     *
-     * @param array An integer array.
-     */
-    static public void sort(int array[]) {
-        QuickSort(array, 0, array.length - 1);
-    }
-
-    /**
-     * Computes the root OID of the MIB.
-     */
-    public void getRootOid(Vector<Integer> result) {
-        return;
-    }
-
-    //----------------------------------------------------------------------
-    // PACKAGE METHODS
-    //----------------------------------------------------------------------
-
-    /**
-     * This is a generic version of C.A.R Hoare's Quick Sort
-     * algorithm.  This will handle arrays that are already
-     * sorted, and arrays with duplicate keys.
-     *
-     * If you think of a one dimensional array as going from
-     * the lowest index on the left to the highest index on the right
-     * then the parameters to this function are lowest index or
-     * left and highest index or right.  The first time you call
-     * this function it will be with the parameters 0, a.length - 1.
-     *
-     * @param a An integer array.
-     * @param lo0 Left boundary of array partition.
-     * @param hi0 Right boundary of array partition.
-     */
-    static void QuickSort(int a[], int lo0, int hi0) {
-        int lo = lo0;
-        int hi = hi0;
-        int mid;
-
-        if ( hi0 > lo0) {
-
-            /* Arbitrarily establishing partition element as the midpoint of
-             * the array.
-             */
-            mid = a[ ( lo0 + hi0 ) / 2 ];
-
-            // loop through the array until indices cross
-            while( lo <= hi ) {
-                /* find the first element that is greater than or equal to
-                 * the partition element starting from the left Index.
-                 */
-                while( ( lo < hi0 )  && ( a[lo] < mid ))
-                    ++lo;
-
-                /* find an element that is smaller than or equal to
-                 * the partition element starting from the right Index.
-                 */
-                while( ( hi > lo0 ) && ( a[hi] > mid ))
-                    --hi;
-
-                // if the indexes have not crossed, swap
-                if( lo <= hi ) {
-                    swap(a, lo, hi);
-                    ++lo;
-                    --hi;
-                }
-            }
-
-            /* If the right index has not reached the left side of array
-             * must now sort the left partition.
-             */
-            if( lo0 < hi )
-                QuickSort( a, lo0, hi );
-
-            /* If the left index has not reached the right side of array
-             * must now sort the right partition.
-             */
-            if( lo < hi0 )
-                QuickSort( a, lo, hi0 );
-
-        }
-    }
-
-    //----------------------------------------------------------------------
-    // PROTECTED METHODS
-    //----------------------------------------------------------------------
-
-    /**
-     * This will give the first element greater than <CODE>value</CODE>
-     * in a sorted array.
-     * If there is no element of the array greater than <CODE>value</CODE>,
-     * the method will throw a <CODE>SnmpStatusException</CODE>.
-     *
-     * @param table A sorted integer array.
-     *
-     * @param value The greatest value.
-     *
-     * @exception SnmpStatusException If there is no element greater than
-     *     <CODE>value</CODE>.
-     */
-    final static protected int getNextIdentifier(int table[], long value)
-        throws SnmpStatusException {
-
-        final int[] a = table;
-        final int val= (int) value;
-
-        if (a == null)
-            throw noSuchObjectException;
-
-        int low= 0;
-        int max= a.length;
-        int curr= low + (max-low)/2;
-        int elmt= 0;
-
-        // Basic check
-        //
-        if (max < 1)
-            throw noSuchObjectException;
-
-        if (a[max-1] <= val)
-            throw noSuchObjectException;
-
-        while (low <= max) {
-            elmt= a[curr];
-            if (val == elmt) {
-                // We ned to get the next index ...
-                //
-                curr++;
-                return a[curr];
-            }
-            if (elmt < val) {
-                low= curr +1;
-            } else {
-                max= curr -1;
-            }
-            curr= low + (max-low)/2;
-        }
-        return a[curr];
-    }
-
-
-    //----------------------------------------------------------------------
-    // PRIVATE METHODS
-    //----------------------------------------------------------------------
-
-    final static private void swap(int a[], int i, int j) {
-        int T;
-        T = a[i];
-        a[i] = a[j];
-        a[j] = T;
-    }
-
-    //----------------------------------------------------------------------
-    // PROTECTED VARIABLES
-    //----------------------------------------------------------------------
-
-    /**
-     * Contains the list of variable identifiers.
-     */
-    protected int[] varList;
-
-    /**
-     * Contains a predefined exception that is often fired when an
-     * object is not found in the MIB.
-     */
-    static final protected SnmpStatusException noSuchInstanceException =
-        new SnmpStatusException(SnmpStatusException.noSuchInstance);
-    static final protected SnmpStatusException noSuchObjectException =
-        new SnmpStatusException(SnmpStatusException.noSuchObject);
-    static final protected SnmpStatusException noSuchNameException =
-        new SnmpStatusException(SnmpDefinitions.snmpRspNoSuchName);
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/agent/SnmpMibOid.java b/ojluni/src/main/java/com/sun/jmx/snmp/agent/SnmpMibOid.java
deleted file mode 100755
index a9411b9..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/agent/SnmpMibOid.java
+++ /dev/null
@@ -1,561 +0,0 @@
-/*
- * Copyright (c) 1997, 2007, 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.jmx.snmp.agent;
-
-
-
-// java imports
-//
-import java.io.Serializable;
-import java.util.Vector;
-import java.util.Enumeration;
-
-// jmx imports
-//
-import com.sun.jmx.snmp.SnmpOid;
-import com.sun.jmx.snmp.SnmpValue;
-import com.sun.jmx.snmp.SnmpVarBind;
-import com.sun.jmx.snmp.SnmpStatusException;
-
-/**
- * Represents a node in an SNMP MIB which is neither a group nor a variable.
- * This class defines a list of sub-nodes and the methods that allow to
- * manipulate the sub-nodes.
- * <P>
- * This class is used internally and by the class generated by
- * <CODE>mibgen</CODE>.
- * You should not need to use this class directly.
- *
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- */
-
-public class SnmpMibOid extends SnmpMibNode implements Serializable {
-    private static final long serialVersionUID = 5012254771107446812L;
-
-    /**
-     * Default constructor.
-     */
-    public SnmpMibOid() {
-    }
-
-    // PUBLIC METHODS
-    //---------------
-
-    /**
-     * Generic handling of the <CODE>get</CODE> operation.
-     *
-     * <p> This method should be overridden in subclasses.
-     * <p>
-     *
-     * @param req   The sub-request that must be handled by this node.
-     *
-     * @param depth The depth reached in the OID tree.
-     *
-     * @exception SnmpStatusException The default implementation (if not
-     *            overridden) is to generate a SnmpStatusException.
-     */
-    public void get(SnmpMibSubRequest req, int depth)
-        throws SnmpStatusException {
-        for (Enumeration e= req.getElements(); e.hasMoreElements();) {
-            SnmpVarBind var= (SnmpVarBind) e.nextElement();
-            SnmpStatusException x =
-                new SnmpStatusException(SnmpStatusException.noSuchObject);
-            req.registerGetException(var,x);
-        }
-    }
-
-    /**
-     * Generic handling of the <CODE>set</CODE> operation.
-     *
-     * <p> This method should be overridden in subclasses.
-     * <p>
-     *
-     * @param req   The sub-request that must be handled by this node.
-     *
-     * @param depth The depth reached in the OID tree.
-     *
-     * @exception SnmpStatusException The default implementation (if not
-     *            overridden) is to generate a SnmpStatusException.
-     */
-    public void set(SnmpMibSubRequest req, int depth)
-        throws SnmpStatusException {
-        for (Enumeration e= req.getElements(); e.hasMoreElements();) {
-            SnmpVarBind var= (SnmpVarBind) e.nextElement();
-            SnmpStatusException x =
-                new SnmpStatusException(SnmpStatusException.noAccess);
-            req.registerSetException(var,x);
-        }
-    }
-
-    /**
-     * Generic handling of the <CODE>check</CODE> operation.
-     *
-     * <p> This method should be overridden in subclasses.
-     * <p>
-     *
-     * @param req   The sub-request that must be handled by this node.
-     *
-     * @param depth The depth reached in the OID tree.
-     *
-     * @exception SnmpStatusException The default implementation (if not
-     *            overriden) is to generate a SnmpStatusException.
-     */
-    public void check(SnmpMibSubRequest req, int depth)
-        throws SnmpStatusException {
-        for (Enumeration e= req.getElements(); e.hasMoreElements();) {
-            SnmpVarBind var= (SnmpVarBind) e.nextElement();
-            SnmpStatusException x =
-                new SnmpStatusException(SnmpStatusException.noAccess);
-            req.registerCheckException(var,x);
-        }
-    }
-
-
-
-    // ---------------------------------------------------------------------
-    //
-    // Implements the method defined in SnmpMibNode.
-    //
-    // ---------------------------------------------------------------------
-    //
-    void findHandlingNode(SnmpVarBind varbind,
-                          long[] oid, int depth,
-                          SnmpRequestTree handlers)
-        throws SnmpStatusException {
-
-
-        final int length = oid.length;
-        SnmpMibNode node = null;
-
-        if (handlers == null)
-            throw new SnmpStatusException(SnmpStatusException.snmpRspGenErr);
-
-        if (depth > length) {
-            // Nothing is left... the oid is not valid
-            throw noSuchObjectException;
-
-        } else if (depth == length) {
-            // The oid is not complete...
-            throw noSuchInstanceException;
-
-        } else {
-            // Some children variable or subobject is being querried
-            // getChild() will raise an exception if no child is found.
-            //
-            final SnmpMibNode child= getChild(oid[depth]);
-
-            // XXXX zzzz : what about null children?
-            //             (variables for nested groups)
-            // if child==null, then we're dealing with a variable or
-            // a table: we register this node.
-            // This behaviour should be overriden in subclasses,
-            // in particular in group meta classes: the group
-            // meta classes that hold tables should take care
-            // of forwarding this call to all the tables involved.
-            //
-            if (child == null)
-                handlers.add(this,depth,varbind);
-            else
-                child.findHandlingNode(varbind,oid,depth+1,handlers);
-        }
-    }
-
-    // ---------------------------------------------------------------------
-    //
-    // Implements the method defined in SnmpMibNode.
-    //
-    // ---------------------------------------------------------------------
-    //
-    long[] findNextHandlingNode(SnmpVarBind varbind,
-                                long[] oid, int pos, int depth,
-                                SnmpRequestTree handlers,
-                                AcmChecker checker)
-        throws SnmpStatusException {
-
-
-        final int length = oid.length;
-        SnmpMibNode node = null;
-        long[] result = null;
-        if (handlers == null)
-            // This should be considered as a genErr, but we do not want to
-            // abort the whole request, so we're going to throw
-            // a noSuchObject...
-            //
-            throw noSuchObjectException;
-
-        final Object data = handlers.getUserData();
-        final int pduVersion = handlers.getRequestPduVersion();
-
-        if (pos >= length) {
-            long[] newOid= new long[1];
-            newOid[0]=  getNextVarId(-1,data,pduVersion);
-            result = findNextHandlingNode(varbind,newOid,0,depth,handlers,
-                                          checker);
-            return result;
-        }
-
-        // search the element specified in the oid
-        //
-        long[] newOid= new long[1];
-        long index= oid[pos];
-
-        while (true) {
-
-            try {
-                final SnmpMibNode child = getChild(index);
-                // SnmpOid result = null;
-                if (child == null) {
-                    // shouldn't happen
-                    throw noSuchObjectException;
-                    // validateVarId(index);
-                    // handlers.add(this,varbind,depth);
-                    // result = new SnmpOid(0);
-                } else {
-                    checker.add(depth, index);
-                    try {
-                        result = child.findNextHandlingNode(varbind,oid,pos+1,
-                                                            depth+1,handlers,
-                                                            checker);
-                    } finally {
-                        checker.remove(depth);
-                    }
-                }
-
-                // Build up the leaf OID
-                result[depth] = index;
-                return result;
-
-            } catch(SnmpStatusException e) {
-                // If there is no such element go one level up ...
-                //
-                index= getNextVarId(index,data,pduVersion);
-
-                // There is no need to carry the original oid ...
-                newOid[0]=index;
-                pos= 1;
-                oid=newOid;
-            }
-        }
-    }
-
-
-    /**
-     * Computes the root OID of the MIB.
-     */
-    public void getRootOid(Vector<Integer> result) {
-
-        // If a node has several children, let assume that we are one step to
-        // far in order to get the MIB root.
-        //
-        if (nbChildren != 1)
-            return;
-
-        result.addElement(varList[0]);
-
-        // Now query our child.
-        //
-        children.firstElement().getRootOid(result);
-
-    }
-
-    /**
-     * Registers a specific node in the tree.
-     */
-    public void registerNode(String oidString ,SnmpMibNode node)
-        throws IllegalAccessException {
-        SnmpOid oid= new SnmpOid(oidString);
-        registerNode(oid.longValue(), 0, node);
-    }
-
-    // PROTECTED METHODS
-    //------------------
-
-    /**
-     * Registers a specific node in the tree.
-     */
-    void registerNode(long[] oid, int cursor ,SnmpMibNode node)
-        throws IllegalAccessException {
-
-        if (cursor >= oid.length)
-            throw new IllegalAccessException();
-
-        // Check if the node is already defined
-        //
-        long var= oid[cursor];
-
-        //System.out.println("entering registration for val="
-        // + String.valueOf(var) + " position= " + cursor);
-
-        int pos = retrieveIndex(var);
-        if (pos  == nbChildren) {
-            nbChildren++;
-            varList= new int[nbChildren];
-            varList[0]= (int) var;
-            pos =0;
-            if ( (cursor + 1) == oid.length) {
-                // That 's the end of the trip.
-                // Do not forward the registration
-
-                //System.out.println("End of trip for val="
-                //      + String.valueOf(var) + " position= " + cursor);
-                children.insertElementAt(node,pos);
-                return;
-            }
-
-            //System.out.println("Create node for val="
-            //       + String.valueOf(var) + " position= " + cursor);
-            SnmpMibOid child= new SnmpMibOid();
-            children.insertElementAt(child, pos);
-            child.registerNode(oid, cursor + 1, node);
-            return;
-        }
-        if (pos == -1) {
-            // The node is not yet registered
-            //
-            int[] tmp= new int[nbChildren + 1];
-            tmp[nbChildren]= (int) var;
-            System.arraycopy(varList, 0, tmp, 0, nbChildren);
-            varList= tmp;
-            nbChildren++;
-            SnmpMibNode.sort(varList);
-            int newPos = retrieveIndex(var);
-            varList[newPos]= (int) var;
-            if ( (cursor + 1) == oid.length) {
-                // That 's the end of the trip.
-                // Do not forward the registration
-
-                //System.out.println("End of trip for val="
-                //     + String.valueOf(var) + " position= " + cursor);
-                children.insertElementAt(node, newPos);
-                return;
-            }
-            SnmpMibOid child= new SnmpMibOid();
-            // System.out.println("Create node for val=" +
-            //     String.valueOf(var) + " position= " + cursor);
-            children.insertElementAt(child, newPos);
-            child.registerNode(oid, cursor + 1, node);
-            return;
-        }
-        else {
-            // The node is already registered
-            //
-            SnmpMibNode child= children.elementAt(pos);
-            if ( (cursor + 1) == oid.length ) {
-                //System.out.println("Node already registered val=" +
-                //          String.valueOf(var) + " position= " + cursor);
-                if (child == node) return;
-                if (child != null && node != null) {
-                    // Now we're going to patch the tree the following way:
-                    //   if a subgroup has been registered before its father,
-                    //   we're going to replace the father OID node with
-                    //   the actual group-node and export the children from
-                    //   the temporary OID node to the actual group node.
-                    //
-
-                    if (node instanceof SnmpMibGroup) {
-                        // `node' is a group => replace `child' with `node'
-                        // export the child's subtree to `node'.
-                        //
-                        ((SnmpMibOid)child).exportChildren((SnmpMibOid)node);
-                        children.setElementAt(node,pos);
-                        return;
-
-                    } else if ((node instanceof SnmpMibOid) &&
-                             (child instanceof SnmpMibGroup)) {
-                        // `node' is a temporary node, and `child' is a
-                        //  group => keep child and export the node's
-                        //  subtree to `child'.
-                        //
-                        ((SnmpMibOid)node).exportChildren((SnmpMibOid)child);
-                        return;
-                    } else if (node instanceof SnmpMibOid) {
-                        // `node' and `child' are both temporary OID nodes
-                        // => replace `child' with `node' and export child's
-                        // subtree to `node'.
-                        //
-                        ((SnmpMibOid)child).exportChildren((SnmpMibOid)node);
-                        children.setElementAt(node,pos);
-                        return;
-                    }
-                }
-                children.setElementAt(node,pos);
-                return;
-            } else {
-                if (child == null)
-                    throw new IllegalAccessException();
-                ((SnmpMibOid)child).registerNode(oid, cursor + 1, node);
-            }
-        }
-    }
-
-    /**
-     * Export this node's children to a brother node that will replace
-     * this node in the OID tree.
-     * This method is a patch that fixes the problem of registering
-     * a subnode before its father node.
-     *
-     **/
-    void exportChildren(SnmpMibOid brother)
-        throws IllegalAccessException {
-
-        if (brother == null) return;
-        final long[] oid = new long[1];
-        for (int i=0; i<nbChildren; i++) {
-            final SnmpMibNode child = children.elementAt(i);
-            if (child == null) continue;
-            oid[0] = varList[i];
-            brother.registerNode(oid,0,child);
-        }
-    }
-
-    // PRIVATE METHODS
-    //----------------
-
-    SnmpMibNode getChild(long id) throws SnmpStatusException {
-
-        // first we need to retrieve the identifier in the list of children
-        //
-        final int pos= getInsertAt(id);
-        if (pos >= nbChildren)
-            throw noSuchObjectException;
-
-        if (varList[pos] != (int) id)
-            throw noSuchObjectException;
-
-        // Access the node
-        //
-        SnmpMibNode child = null;
-        try {
-            child = children.elementAtNonSync(pos);
-        } catch(ArrayIndexOutOfBoundsException e) {
-            throw noSuchObjectException;
-        }
-        if (child == null)
-            throw noSuchInstanceException;
-        return child;
-    }
-
-    private int retrieveIndex(long val) {
-
-        int low= 0;
-        int cursor= (int) val;
-        if (varList == null || varList.length < 1)
-            return nbChildren;
-
-        int max= varList.length -1 ;
-        int curr= low + (max-low)/2;
-        int elmt= 0;
-        while (low <= max) {
-            elmt= varList[curr];
-            if (cursor == elmt) {
-                // We need to get the next index ...
-                //
-                return curr;
-            }
-            if (elmt < cursor) {
-                low= curr +1;
-            } else {
-                max= curr -1;
-            }
-            curr= low + (max-low)/2;
-        }
-        return -1;
-    }
-
-    private int getInsertAt(long val) {
-
-        int low= 0;
-        final int index= (int) val;
-        if (varList == null)
-            return -1;
-        int max= varList.length -1 ;
-        int elmt=0;
-        //final int[] v = varList;
-
-        //if (index > a[max])
-        //return max +1;
-
-
-        int curr= low + (max-low)/2;
-        while (low <= max) {
-
-            elmt= varList[curr];
-
-            // never know ...we might find something ...
-            //
-            if (index == elmt)
-                return curr;
-
-            if (elmt < index) {
-                low= curr +1;
-            } else {
-                max= curr -1;
-            }
-            curr= low + (max-low)/2;
-        }
-
-        return curr;
-    }
-
-    // PRIVATE VARIABLES
-    //------------------
-
-    /**
-     * Contains the list of sub nodes.
-     */
-    private NonSyncVector<SnmpMibNode> children = new NonSyncVector<SnmpMibNode>(1);
-
-    /**
-     * The number of sub nodes.
-     */
-    private int nbChildren= 0;
-
-
-    // All the methods of the Vector class are synchronized.
-    // Synchronization is a very expensive operation. In our case it is
-    // not always required...
-    //
-    @SuppressWarnings("serial")  // We will never serialize this
-    class NonSyncVector<E> extends Vector<E> {
-
-        public NonSyncVector(int size) {
-            super(size);
-        }
-
-        final void addNonSyncElement(E obj) {
-            ensureCapacity(elementCount + 1);
-            elementData[elementCount++] = obj;
-        }
-
-        @SuppressWarnings("unchecked")  // cast to E
-        final E elementAtNonSync(int index) {
-            return (E) elementData[index];
-        }
-
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/agent/SnmpMibRequest.java b/ojluni/src/main/java/com/sun/jmx/snmp/agent/SnmpMibRequest.java
deleted file mode 100755
index b45a8bc..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/agent/SnmpMibRequest.java
+++ /dev/null
@@ -1,175 +0,0 @@
-/*
- * Copyright (c) 2000, 2006, 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.jmx.snmp.agent;
-
-import java.util.Enumeration;
-import java.util.Vector;
-
-import com.sun.jmx.snmp.SnmpVarBind;
-import com.sun.jmx.snmp.SnmpPdu;
-import com.sun.jmx.snmp.SnmpEngine;
-
-/**
- * This interface models the part of a SNMP request that involves
- * a specific MIB. One object implementing this interface will be created
- * for every MIB involved in a SNMP request, and that object will be passed
- * to the SnmpMibAgent in charge of handling that MIB.
- *
- * Objects implementing this interface will be allocated by the SNMP engine.
- * You will never need to implement this interface. You will only use it.
- *
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- */
-public interface SnmpMibRequest {
-    /**
-     * Returns the list of varbind to be handled by the SNMP mib node.
-     *
-     * @return The element of the enumeration are instances of
-     *         {@link com.sun.jmx.snmp.SnmpVarBind}
-     */
-    public Enumeration getElements();
-
-    /**
-     * Returns the vector of varbind to be handled by the SNMP mib node.
-     * The caller shall not modify this vector.
-     *
-     * @return The element of the vector are instances of
-     *         {@link com.sun.jmx.snmp.SnmpVarBind}
-     */
-    public Vector<SnmpVarBind> getSubList();
-
-    /**
-     * Returns the SNMP protocol version of the original request. If SNMP V1 request are received, the version is upgraded to SNMP V2.
-     *
-     * @return The SNMP protocol version of the original request.
-     */
-    public int getVersion();
-
-    /**
-     * Returns the SNMP protocol version of the original request. No translation is done on the version. The actual received request SNMP version is returned.
-     *
-     * @return The SNMP protocol version of the original request.
-     *
-     * @since 1.5
-     */
-    public int getRequestPduVersion();
-
-    /**
-     * Returns the local engine. This parameter is returned only if <CODE> SnmpV3AdaptorServer </CODE> is the adaptor receiving this request. Otherwise null is returned.
-     * @return the local engine.
-     *
-     * @since 1.5
-     */
-    public SnmpEngine getEngine();
-    /**
-     * Gets the incoming request principal. This parameter is returned only if <CODE> SnmpV3AdaptorServer </CODE> is the adaptor receiving this request. Otherwise null is returned.
-     * @return The request principal.
-     *
-     * @since 1.5
-     **/
-    public String getPrincipal();
-    /**
-     * Gets the incoming request security level. This level is defined in {@link com.sun.jmx.snmp.SnmpEngine SnmpEngine}. This parameter is returned only if <CODE> SnmpV3AdaptorServer </CODE> is the adaptor receiving this request. Otherwise -1 is returned.
-     * @return The security level.
-     *
-     * @since 1.5
-     */
-    public int getSecurityLevel();
-    /**
-     * Gets the incoming request security model. This parameter is returned only if <CODE> SnmpV3AdaptorServer </CODE> is the adaptor receiving this request. Otherwise -1 is returned.
-     * @return The security model.
-     *
-     * @since 1.5
-     */
-    public int getSecurityModel();
-    /**
-     * Gets the incoming request context name. This parameter is returned only if <CODE> SnmpV3AdaptorServer </CODE> is the adaptor receiving this request. Otherwise null is returned.
-     * @return The context name.
-     *
-     * @since 1.5
-     */
-    public byte[] getContextName();
-    /**
-     * Gets the incoming request context name used by Access Control Model in order to allow or deny the access to OIDs. This parameter is returned only if <CODE> SnmpV3AdaptorServer </CODE> is the adaptor receiving this request. Otherwise null is returned.
-     * @return The checked context name.
-     *
-     * @since 1.5
-     */
-    public byte[] getAccessContextName();
-
-    /**
-     * Returns a handle on a user allocated contextual object.
-     * This contextual object is allocated through the SnmpUserDataFactory
-     * on a per SNMP request basis, and is handed back to the user via
-     * SnmpMibRequest (and derivative) objects. It is never accessed by
-     * the system, but might be handed back in multiple threads. It is thus
-     * the user responsibility to make sure he handles this object in a
-     * thread safe manner.
-     */
-    public Object getUserData();
-
-    /**
-     * Returns the varbind index that should be embedded in an
-     * SnmpStatusException for this particular varbind.
-     * This does not necessarily correspond to the "real"
-     * index value that will be returned in the result PDU.
-     *
-     * @param varbind The varbind for which the index value is
-     *        querried. Note that this varbind <b>must</b> have
-     *        been obtained from the enumeration returned by
-     *        <CODE>getElements()</CODE>, or from the vector
-     *        returned by <CODE>getSublist()</CODE>.
-     *
-     * @return The varbind index that should be embedded in an
-     *         SnmpStatusException for this particular varbind.
-     */
-    public int getVarIndex(SnmpVarBind varbind);
-
-    /**
-     * Adds a varbind to this request sublist. This method is used for
-     * internal purposes and you should never need to call it directly.
-     *
-     * @param varbind The varbind to be added in the sublist.
-     *
-     */
-    public void addVarBind(SnmpVarBind varbind);
-
-
-    /**
-     * Returns the number of elements (varbinds) in this request sublist.
-     *
-     * @return The number of elements in the sublist.
-     *
-     **/
-    public int getSize();
-    /**
-     * Returns the SNMP PDU attached to the request.
-     * @return The SNMP PDU.
-     *
-     * @since 1.5
-     **/
-    public SnmpPdu getPdu();
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/agent/SnmpMibRequestImpl.java b/ojluni/src/main/java/com/sun/jmx/snmp/agent/SnmpMibRequestImpl.java
deleted file mode 100755
index dfd9f46..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/agent/SnmpMibRequestImpl.java
+++ /dev/null
@@ -1,242 +0,0 @@
-/*
- * Copyright (c) 2000, 2006, 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.jmx.snmp.agent;
-
-import java.util.Enumeration;
-import java.util.Vector;
-
-
-import com.sun.jmx.snmp.SnmpPdu;
-import com.sun.jmx.snmp.SnmpVarBind;
-import com.sun.jmx.snmp.SnmpEngine;
-
-/**
- * This class implements the SnmpMibRequest interface.
- * It represents the part of a SNMP request that involves a specific
- * MIB. One instance of this class will be created for every MIB
- * involved in a SNMP request, and will be passed to the SnmpMibAgent
- * in charge of handling that MIB.
- *
- * Instances of this class are allocated by the SNMP engine. You will
- * never need to use this class directly. You will only access
- * instances of this class through their SnmpMibRequest interface.
- *
- */
-final class SnmpMibRequestImpl implements SnmpMibRequest {
-
-    /**
-     * @param engine The local engine.
-     * @param reqPdu The received pdu.
-     * @param vblist The vector of SnmpVarBind objects in which the
-     *        MIB concerned by this request is involved.
-     * @param protocolVersion  The protocol version of the SNMP request.
-     * @param userData     User allocated contextual data. This object must
-     *        be allocated on a per SNMP request basis through the
-     *        SnmpUserDataFactory registered with the SnmpAdaptorServer,
-     *        and is handed back to the user through SnmpMibRequest objects.
-     */
-    public SnmpMibRequestImpl(SnmpEngine engine,
-                              SnmpPdu reqPdu,
-                              Vector<SnmpVarBind> vblist,
-                              int protocolVersion,
-                              Object userData,
-                              String principal,
-                              int securityLevel,
-                              int securityModel,
-                              byte[] contextName,
-                              byte[] accessContextName) {
-        varbinds   = vblist;
-        version    = protocolVersion;
-        data       = userData;
-        this.reqPdu = reqPdu;
-        this.engine = engine;
-        this.principal = principal;
-        this.securityLevel = securityLevel;
-        this.securityModel = securityModel;
-        this.contextName = contextName;
-        this.accessContextName = accessContextName;
-    }
-    // -------------------------------------------------------------------
-    // PUBLIC METHODS from SnmpMibRequest
-    // -------------------------------------------------------------------
-
-    /**
-     * Returns the local engine. This parameter is returned only if <CODE> SnmpV3AdaptorServer </CODE> is the adaptor receiving this request. Otherwise null is returned.
-     * @return the local engine.
-     */
-    public SnmpEngine getEngine() {
-        return engine;
-    }
-
-    /**
-     * Gets the incoming request principal. This parameter is returned only if <CODE> SnmpV3AdaptorServer </CODE> is the adaptor receiving this request. Otherwise null is returned.
-     * @return The request principal.
-     **/
-    public String getPrincipal() {
-        return principal;
-    }
-
-    /**
-     * Gets the incoming request security level. This level is defined in {@link com.sun.jmx.snmp.SnmpEngine SnmpEngine}. This parameter is returned only if <CODE> SnmpV3AdaptorServer </CODE> is the adaptor receiving this request. Otherwise -1 is returned.
-     * @return The security level.
-     */
-    public int getSecurityLevel() {
-        return securityLevel;
-    }
-    /**
-     * Gets the incoming request security model. This parameter is returned only if <CODE> SnmpV3AdaptorServer </CODE> is the adaptor receiving this request. Otherwise -1 is returned.
-     * @return The security model.
-     */
-    public int getSecurityModel() {
-        return securityModel;
-    }
-    /**
-     * Gets the incoming request context name. This parameter is returned only if <CODE> SnmpV3AdaptorServer </CODE> is the adaptor receiving this request. Otherwise null is returned.
-     * @return The context name.
-     */
-    public byte[] getContextName() {
-        return contextName;
-    }
-
-    /**
-     * Gets the incoming request context name used by Access Control Model in order to allow or deny the access to OIDs. This parameter is returned only if <CODE> SnmpV3AdaptorServer </CODE> is the adaptor receiving this request. Otherwise null is returned.
-     * @return The checked context.
-     */
-    public byte[] getAccessContextName() {
-        return accessContextName;
-    }
-
-    // -------------------------------------------------------------------
-    // Implements the method defined in SnmpMibRequest interface.
-    // See SnmpMibRequest for the java doc.
-    // -------------------------------------------------------------------
-    public final SnmpPdu getPdu() {
-        return reqPdu;
-    }
-
-    // -------------------------------------------------------------------
-    // Implements the method defined in SnmpMibRequest interface.
-    // See SnmpMibRequest for the java doc.
-    // -------------------------------------------------------------------
-    public final Enumeration getElements()  {return varbinds.elements();}
-
-    // -------------------------------------------------------------------
-    // Implements the method defined in SnmpMibRequest interface.
-    // See SnmpMibRequest for the java doc.
-    // -------------------------------------------------------------------
-    public final Vector<SnmpVarBind> getSubList()  {return varbinds;}
-
-    // -------------------------------------------------------------------
-    // Implements the method defined in SnmpMibRequest interface.
-    // See SnmpMibRequest for the java doc.
-    // -------------------------------------------------------------------
-    public final int getSize()  {
-        if (varbinds == null) return 0;
-        return varbinds.size();
-    }
-
-    // -------------------------------------------------------------------
-    // Implements the method defined in SnmpMibRequest interface.
-    // See SnmpMibRequest for the java doc.
-    // -------------------------------------------------------------------
-    public final int         getVersion()  {return version;}
-
-    // -------------------------------------------------------------------
-    // Implements the method defined in SnmpMibRequest interface.
-    // See SnmpMibRequest for the java doc.
-    // -------------------------------------------------------------------
-    public final int         getRequestPduVersion()  {return reqPdu.version;}
-
-    // -------------------------------------------------------------------
-    // Implements the method defined in SnmpMibRequest interface.
-    // See SnmpMibRequest for the java doc.
-    // -------------------------------------------------------------------
-    public final Object      getUserData() {return data;}
-
-    // -------------------------------------------------------------------
-    // Implements the method defined in SnmpMibRequest interface.
-    // See SnmpMibRequest for the java doc.
-    // -------------------------------------------------------------------
-    public final int getVarIndex(SnmpVarBind varbind) {
-        return varbinds.indexOf(varbind);
-    }
-
-    // -------------------------------------------------------------------
-    // Implements the method defined in SnmpMibRequest interface.
-    // See SnmpMibRequest for the java doc.
-    // -------------------------------------------------------------------
-    public void addVarBind(SnmpVarBind varbind) {
-        varbinds.addElement(varbind);
-    }
-
-    // -------------------------------------------------------------------
-    // PACKAGE METHODS
-    // -------------------------------------------------------------------
-
-    // -------------------------------------------------------------------
-    // Allow to pass the request tree built during the check() phase
-    // to the set() method. Note: the if the tree is `null', then the
-    // set() method will rebuild a new tree identical to the tree built
-    // in the check() method.
-    //
-    // Passing this tree in the SnmpMibRequestImpl object allows to
-    // optimize the SET requests.
-    //
-    // -------------------------------------------------------------------
-    final void setRequestTree(SnmpRequestTree tree) {this.tree = tree;}
-
-    // -------------------------------------------------------------------
-    // Returns the SnmpRequestTree object built in the first operation
-    // phase for two-phase SNMP requests (like SET).
-    // -------------------------------------------------------------------
-    final SnmpRequestTree getRequestTree() {return tree;}
-
-    // -------------------------------------------------------------------
-    // Returns the underlying vector of SNMP varbinds (used for algorithm
-    // optimization).
-    // -------------------------------------------------------------------
-    final Vector getVarbinds() {return varbinds;}
-
-    // -------------------------------------------------------------------
-    // Private variables
-    // -------------------------------------------------------------------
-
-    // Ideally these variables should be declared final but it makes
-    // the jdk1.1.x compiler complain (seems to be a compiler bug, jdk1.2
-    // is OK).
-    private Vector<SnmpVarBind> varbinds;
-    private int    version;
-    private Object data;
-    private SnmpPdu reqPdu = null;
-    // Non final variable.
-    private SnmpRequestTree tree = null;
-    private SnmpEngine engine = null;
-    private String principal = null;
-    private int securityLevel = -1;
-    private int securityModel = -1;
-    private byte[] contextName = null;
-    private byte[] accessContextName = null;
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/agent/SnmpMibSubRequest.java b/ojluni/src/main/java/com/sun/jmx/snmp/agent/SnmpMibSubRequest.java
deleted file mode 100755
index cd72847..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/agent/SnmpMibSubRequest.java
+++ /dev/null
@@ -1,209 +0,0 @@
-/*
- * Copyright (c) 2000, 2006, 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.jmx.snmp.agent;
-
-import java.util.Enumeration;
-import java.util.Vector;
-import com.sun.jmx.snmp.SnmpVarBind;
-import com.sun.jmx.snmp.SnmpStatusException;
-import com.sun.jmx.snmp.SnmpOid;
-// import com.sun.jmx.snmp.SnmpIndex;
-
-/**
- * This interface models an SNMP sub request to be performed on a specific
- * SNMP MIB node. The node involved can be either an SNMP group, an SNMP table,
- * or an SNMP table entry (conceptual row). The conceptual row may or may not
- * already exist. If the row did not exist at the time when the request
- * was received, the <CODE>isNewEntry()</CODE> method will return <CODE>
- * true</CODE>.
- * <p>
- * Objects implementing this interface will be allocated by the SNMP engine.
- * You will never need to implement this interface. You will only use it.
- * </p>
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- */
-public interface SnmpMibSubRequest extends SnmpMibRequest {
-    /**
-     * Return the list of varbind to be handled by the SNMP MIB node.
-     * <p>
-     * <b>Note:</b> <ul>
-     * <i>In case of SET operation, if this node is a table row which
-     * contains a control variable (as identified by the table's
-     * isRowStatus() method) the control variable will not
-     * be included in this list: it will be obtained by calling
-     * getRowStatusVarBind(). This will allow you to handle the control
-     * variable specifically.</i><br>
-     * You will never need to worry about this unless you need to
-     * implement a non standard mechanism for handling row
-     * creation and deletion.
-     * </ul>
-     * <p>
-     * @return The elements of the enumeration are instances of
-     *         {@link com.sun.jmx.snmp.SnmpVarBind}
-     */
-    public Enumeration getElements();
-
-    /**
-     * Return the list of varbind to be handled by the SNMP MIB node.
-     * <p>
-     * <b>Note:</b> <ul>
-     * <i>In case of SET operation, if this node is a table row which
-     * contains a control variable (as identified by the table's
-     * isRowStatus() method) the control variable will not
-     * be included in this list: it will be obtained by calling
-     * getRowStatusVarBind(). This will allow you to handle the control
-     * variable specifically.</i><br>
-     * You will never need to worry about this unless you need to
-     * implement a non standard mechanism for handling row
-     * creation and deletion.
-     * </ul>
-     * <p>
-     * @return The elements of the vector are instances of
-     *         {@link com.sun.jmx.snmp.SnmpVarBind}
-     */
-    public Vector<SnmpVarBind> getSubList();
-
-    /**
-     * Return the part of the OID identifying the table entry involved.
-     * <p>
-     *
-     * @return {@link com.sun.jmx.snmp.SnmpOid} or <CODE>null</CODE>
-     *         if the request is not directed to an entry.
-     */
-    public SnmpOid     getEntryOid();
-
-    /**
-     * Indicate whether the entry involved is a new entry.
-     * This method will return <CODE>true</CODE> if the entry was not
-     * found when the request was processed. As a consequence, <CODE>
-     * true</CODE> means that either the entry does not exist yet,
-     * or it has been created while processing this request.
-     * The result of this method is only significant when an entry
-     * is involved.
-     *
-     * <p>
-     * @return <CODE>true</CODE> If the entry did not exist,
-     *  or <CODE>false</CODE> if the entry involved was found.
-     */
-    public boolean     isNewEntry();
-
-    /**
-     * Return the varbind that holds the RowStatus variable.
-     * It corresponds to the varbind that was identified by
-     * the <code>isRowStatus()</code> method generated by mibgen
-     * on {@link com.sun.jmx.snmp.agent.SnmpMibTable} derivatives.
-     * <ul><li>In SMIv2, it is the varbind which contains the columnar
-     *         object implementing the RowStatus TEXTUAL-CONVENTION.</li>
-     *      <li>In SMIv1 nothing special is generated</li>
-     *      <ul>You may however subclass the generated table metadata
-     *          class in order to provide your own implementation of
-     *          isRowStatus(), getRowAction(), isRowReady() and
-     *          setRowStatus()
-     *          (see  {@link com.sun.jmx.snmp.agent.SnmpMibTable}).</ul>
-     * </ul>
-     * <p>
-     * @return a varbind that serves to control the table modification.
-     *         <code>null</code> means that no such varbind could be
-     *         identified.<br>
-     *         <b>Note:</b><i>The runtime will only try to identify
-     *         the RowStatus varbind when processing an
-     *         SNMP SET request. In this case, the identified
-     *         varbind will not be included in the set of varbinds
-     *         returned by getSubList() and getElements().
-     *         </i>
-     *
-     **/
-    public SnmpVarBind getRowStatusVarBind();
-
-    /**
-     * This method should be called when a status exception needs to
-     * be raised for a given varbind of an SNMP GET request. This method
-     * performs all the necessary conversions (SNMPv1 <=> SNMPv2) and
-     * propagates the exception if needed:
-     * If the version is SNMP v1, the exception is propagated.
-     * If the version is SNMP v2, the exception is stored in the varbind.
-     * This method also takes care of setting the correct value of the
-     * index field.
-     * <p>
-     *
-     * @param varbind The varbind for which the exception is
-     *        registered. Note that this varbind <b>must</b> have
-     *        been obtained from the enumeration returned by
-     *        <CODE>getElements()</CODE>, or from the vector
-     *        returned by <CODE>getSubList()</CODE>
-     *
-     * @param exception The exception to be registered for the given varbind.
-     *
-     */
-    public void registerGetException(SnmpVarBind varbind,
-                                     SnmpStatusException exception)
-        throws SnmpStatusException;
-
-    /**
-     * This method should be called when a status exception needs to
-     * be raised for a given varbind of an SNMP SET request. This method
-     * performs all the necessary conversions (SNMPv1 <=> SNMPv2) and
-     * propagates the exception if needed.
-     * This method also takes care of setting the correct value of the
-     * index field.
-     * <p>
-     *
-     * @param varbind The varbind for which the exception is
-     *        registered. Note that this varbind <b>must</b> have
-     *        been obtained from the enumeration returned by
-     *        <CODE>getElements()</CODE>, or from the vector
-     *        returned by <CODE>getSubList()</CODE>
-     *
-     * @param exception The exception to be registered for the given varbind.
-     *
-     */
-    public void registerSetException(SnmpVarBind varbind,
-                                     SnmpStatusException exception)
-        throws SnmpStatusException;
-
-    /**
-     * This method should be called when a status exception needs to
-     * be raised when checking a given varbind for an SNMP SET request.
-     * This method performs all the necessary conversions (SNMPv1 <=>
-     * SNMPv2) and propagates the exception if needed.
-     * This method also takes care of setting the correct value of the
-     * index field.
-     * <p>
-     *
-     * @param varbind The varbind for which the exception is
-     *        registered. Note that this varbind <b>must</b> have
-     *        been obtained from the enumeration returned by
-     *        <CODE>getElements()</CODE>, or from the vector
-     *        returned by <CODE>getSubList()</CODE>
-     *
-     * @param exception The exception to be registered for the given varbind.
-     *
-     */
-    public void registerCheckException(SnmpVarBind varbind,
-                                       SnmpStatusException exception)
-        throws SnmpStatusException;
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/agent/SnmpMibTable.java b/ojluni/src/main/java/com/sun/jmx/snmp/agent/SnmpMibTable.java
deleted file mode 100755
index 7b6631a..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/agent/SnmpMibTable.java
+++ /dev/null
@@ -1,2570 +0,0 @@
-/*
- * Copyright (c) 1997, 2007, 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.jmx.snmp.agent;
-
-import java.io.Serializable;
-import java.util.Date;
-import java.util.Enumeration;
-import java.util.Hashtable;
-import java.util.Vector;
-import java.util.logging.Level;
-
-import javax.management.ListenerNotFoundException;
-import javax.management.MBeanNotificationInfo;
-import javax.management.Notification;
-import javax.management.NotificationBroadcaster;
-import javax.management.NotificationFilter;
-import javax.management.NotificationListener;
-import javax.management.ObjectName;
-
-import static com.sun.jmx.defaults.JmxProperties.SNMP_ADAPTOR_LOGGER;
-import com.sun.jmx.snmp.EnumRowStatus;
-import com.sun.jmx.snmp.SnmpInt;
-import com.sun.jmx.snmp.SnmpOid;
-import com.sun.jmx.snmp.SnmpStatusException;
-import com.sun.jmx.snmp.SnmpValue;
-import com.sun.jmx.snmp.SnmpVarBind;
-
-/**
- * This class is the base class for SNMP table metadata.
- * <p>
- * Its responsibility is to manage a sorted array of OID indexes
- * according to the SNMP indexing scheme over the "real" table.
- * Each object of this class can be bound to an
- * {@link com.sun.jmx.snmp.agent.SnmpTableEntryFactory} to which it will
- * forward remote entry creation requests, and invoke callbacks
- * when an entry has been successfully added to / removed from
- * the OID index array.
- * </p>
- *
- * <p>
- * For each table defined in the MIB, mibgen will generate a specific
- * class called Table<i>TableName</i> that will implement the
- * SnmpTableEntryFactory interface, and a corresponding
- * <i>TableName</i>Meta class that will extend this class. <br>
- * The Table<i>TableName</i> class corresponds to the MBean view of the
- * table while the <i>TableName</i>Meta class corresponds to the
- * MIB metadata view of the same table.
- * </p>
- *
- * <p>
- * Objects of this class are instantiated by the generated
- * whole MIB class extending {@link com.sun.jmx.snmp.agent.SnmpMib}
- * You should never need to instantiate this class directly.
- * </p>
- *
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- * @see com.sun.jmx.snmp.agent.SnmpMib
- * @see com.sun.jmx.snmp.agent.SnmpMibEntry
- * @see com.sun.jmx.snmp.agent.SnmpTableEntryFactory
- * @see com.sun.jmx.snmp.agent.SnmpTableSupport
- *
- */
-
-public abstract class SnmpMibTable extends SnmpMibNode
-    implements NotificationBroadcaster, Serializable {
-
-    /**
-     * Create a new <CODE>SnmpMibTable</CODE> metadata node.
-     *
-     * <p>
-     * @param mib The SNMP MIB to which the metadata will be linked.
-     */
-    public SnmpMibTable(SnmpMib mib) {
-        this.theMib= mib;
-        setCreationEnabled(false);
-    }
-
-    // -------------------------------------------------------------------
-    // PUBLIC METHODS
-    // -------------------------------------------------------------------
-
-    /**
-     * This method is invoked when the creation of a new entry is requested
-     * by a remote SNMP manager.
-     * <br>By default, remote entry creation is disabled - and this method
-     * will not be called. You can dynamically switch the entry creation
-     * policy by calling <code>setCreationEnabled(true)</code> and <code>
-     * setCreationEnabled(false)</code> on this object.
-     * <p><b><i>
-     * This method is called internally by the SNMP runtime and you
-     * should never need to call it directly. </b></i>However you might want
-     * to extend it in order to implement your own specific application
-     * behaviour, should the default behaviour not be at your convenience.
-     * </p>
-     * <p>
-     * @param req   The SNMP  subrequest requesting this creation
-     * @param rowOid  The OID indexing the conceptual row (entry) for which
-     *                the creation was requested.
-     * @param depth The position of the columnar object arc in the OIDs
-     *              from the varbind list.
-     *
-     * @exception SnmpStatusException if the entry cannot be created.
-     */
-    public abstract void createNewEntry(SnmpMibSubRequest req, SnmpOid rowOid,
-                                        int depth)
-        throws SnmpStatusException;
-
-    /**
-     * Tell whether the specific version of this metadata generated
-     * by <code>mibgen</code> requires entries to be registered with
-     * the MBeanServer. In this case an ObjectName will have to be
-     * passed to addEntry() in order for the table to behave correctly
-     * (case of the generic metadata).
-     * <p>
-     * If that version of the metadata does not require entry to be
-     * registered, then passing an ObjectName becomes optional (null
-     * can be passed instead).
-     *
-     * @return <code>true</code> if registration is required by this
-     *         version of the metadata.
-     */
-    public abstract boolean isRegistrationRequired();
-
-    /**
-     * Tell whether a new entry should be created when a SET operation
-     * is received for an entry that does not exist yet.
-     *
-     * @return true if a new entry must be created, false otherwise.<br>
-     *         [default: returns <CODE>false</CODE>]
-     **/
-    public boolean isCreationEnabled() {
-        return creationEnabled;
-    }
-
-    /**
-     * This method lets you dynamically switch the creation policy.
-     *
-     * <p>
-     * @param remoteCreationFlag Tells whether remote entry creation must
-     *        be enabled or disabled.
-     * <ul><li>
-     * <CODE>setCreationEnabled(true)</CODE> will enable remote entry
-     *      creation via SET operations.</li>
-     * <li>
-     * <CODE>setCreationEnabled(false)</CODE> will disable remote entry
-     *      creation via SET operations.</li>
-     * <p> By default remote entry creation via SET operation is disabled.
-     * </p>
-     * </ul>
-     **/
-    public void setCreationEnabled(boolean remoteCreationFlag) {
-        creationEnabled = remoteCreationFlag;
-    }
-
-    /**
-     * Return <code>true</code> if the conceptual row contains a columnar
-     * object used to control creation/deletion of rows in this table.
-     * <p>
-     * This  columnar object can be either a variable with RowStatus
-     * syntax as defined by RFC 2579, or a plain variable whose
-     * semantics is table specific.
-     * <p>
-     * By default, this function returns <code>false</code>, and it is
-     * assumed that the table has no such control variable.<br>
-     * When <code>mibgen</code> is used over SMIv2 MIBs, it will generate
-     * an <code>hasRowStatus()</code> method returning <code>true</code>
-     * for each table containing an object with RowStatus syntax.
-     * <p>
-     * When this method returns <code>false</code> the default mechanism
-     * for remote entry creation is used.
-     * Otherwise, creation/deletion is performed as specified
-     * by the control variable (see getRowAction() for more details).
-     * <p>
-     * This method is called internally when a SET request involving
-     * this table is processed.
-     * <p>
-     * If you need to implement a control variable which do not use
-     * the RowStatus convention as defined by RFC 2579, you should
-     * subclass the generated table metadata class in order to redefine
-     * this method and make it returns <code>true</code>.<br>
-     * You will then have to redefine the isRowStatus(), mapRowStatus(),
-     * isRowReady(), and setRowStatus() methods to suit your specific
-     * implementation.
-     * <p>
-     * @return <li><code>true</code> if this table contains a control
-     *         variable (eg: a variable with RFC 2579 RowStatus syntax),
-     *         </li>
-     *         <li><code>false</code> if this table does not contain
-     *         any control variable.</li>
-     *
-     **/
-    public boolean hasRowStatus() {
-        return false;
-    }
-
-    // ---------------------------------------------------------------------
-    //
-    // Implements the method defined in SnmpMibNode.
-    //
-    // ---------------------------------------------------------------------
-    /**
-     * Generic handling of the <CODE>get</CODE> operation.
-     * <p> The default implementation of this method is to
-     * <ul>
-     * <li> check whether the entry exists, and if not register an
-     *      exception for each varbind in the list.
-     * <li> call the generated
-     *      <CODE>get(req,oid,depth+1)</CODE> method. </li>
-     * </ul>
-     * <p>
-     * <pre>
-     * public void get(SnmpMibSubRequest req, int depth)
-     *    throws SnmpStatusException {
-     *    boolean         isnew  = req.isNewEntry();
-     *
-     *    // if the entry does not exists, then registers an error for
-     *    // each varbind involved (nb: this should not happen, since
-     *    // the error should already have been detected earlier)
-     *    //
-     *    if (isnew) {
-     *        SnmpVarBind     var = null;
-     *        for (Enumeration e= req.getElements(); e.hasMoreElements();) {
-     *            var = (SnmpVarBind) e.nextElement();
-     *            req.registerGetException(var,noSuchNameException);
-     *        }
-     *    }
-     *
-     *    final SnmpOid oid = req.getEntryOid();
-     *    get(req,oid,depth+1);
-     * }
-     * </pre>
-     * <p> You should not need to override this method in any cases, because
-     * it will eventually call
-     * <CODE>get(SnmpMibSubRequest req, int depth)</CODE> on the generated
-     * derivative of <CODE>SnmpMibEntry</CODE>. If you need to implement
-     * specific policies for minimizing the accesses made to some remote
-     * underlying resources, or if you need to implement some consistency
-     * checks between the different values provided in the varbind list,
-     * you should then rather override
-     * <CODE>get(SnmpMibSubRequest req, int depth)</CODE> on the generated
-     * derivative of <CODE>SnmpMibEntry</CODE>.
-     * <p>
-     *
-     */
-    public void get(SnmpMibSubRequest req, int depth)
-        throws SnmpStatusException {
-
-        final boolean         isnew  = req.isNewEntry();
-        final SnmpMibSubRequest  r      = req;
-
-        // if the entry does not exists, then registers an error for
-        // each varbind involved (nb: should not happen, the error
-        // should have been registered earlier)
-        if (isnew) {
-            SnmpVarBind     var = null;
-            for (Enumeration e= r.getElements(); e.hasMoreElements();) {
-                var      = (SnmpVarBind) e.nextElement();
-                r.registerGetException(var,noSuchInstanceException);
-            }
-        }
-
-        final SnmpOid     oid    = r.getEntryOid();
-
-        // SnmpIndex   index  = buildSnmpIndex(oid.longValue(false), 0);
-        // get(req,index,depth+1);
-        //
-        get(req,oid,depth+1);
-    }
-
-    // ---------------------------------------------------------------------
-    //
-    // Implements the method defined in SnmpMibNode.
-    //
-    // ---------------------------------------------------------------------
-    /**
-     * Generic handling of the <CODE>check</CODE> operation.
-     * <p> The default implementation of this method is to
-     * <ul>
-     * <li> check whether a new entry must be created, and if remote
-     *      creation of entries is enabled, create it. </li>
-     * <li> call the generated
-     *      <CODE>check(req,oid,depth+1)</CODE> method. </li>
-     * </ul>
-     * <p>
-     * <pre>
-     * public void check(SnmpMibSubRequest req, int depth)
-     *    throws SnmpStatusException {
-     *    final SnmpOid     oid    = req.getEntryOid();
-     *    final int         action = getRowAction(req,oid,depth+1);
-     *
-     *    beginRowAction(req,oid,depth+1,action);
-     *    check(req,oid,depth+1);
-     * }
-     * </pre>
-     * <p> You should not need to override this method in any cases, because
-     * it will eventually call
-     * <CODE>check(SnmpMibSubRequest req, int depth)</CODE> on the generated
-     * derivative of <CODE>SnmpMibEntry</CODE>. If you need to implement
-     * specific policies for minimizing the accesses made to some remote
-     * underlying resources, or if you need to implement some consistency
-     * checks between the different values provided in the varbind list,
-     * you should then rather override
-     * <CODE>check(SnmpMibSubRequest req, int depth)</CODE> on the generated
-     * derivative of <CODE>SnmpMibEntry</CODE>.
-     * <p>
-     *
-     */
-    public void check(SnmpMibSubRequest req, int depth)
-        throws SnmpStatusException {
-        final SnmpOid     oid    = req.getEntryOid();
-        final int         action = getRowAction(req,oid,depth+1);
-
-        if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-            SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, SnmpMibTable.class.getName(),
-                    "check", "Calling beginRowAction");
-        }
-
-        beginRowAction(req,oid,depth+1,action);
-
-        if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-            SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, SnmpMibTable.class.getName(),
-                    "check",
-                    "Calling check for " + req.getSize() + " varbinds");
-        }
-
-        check(req,oid,depth+1);
-
-        if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-            SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, SnmpMibTable.class.getName(),
-                    "check", "check finished");
-        }
-    }
-
-    // ---------------------------------------------------------------------
-    //
-    // Implements the method defined in SnmpMibNode.
-    //
-    // ---------------------------------------------------------------------
-    /**
-     * Generic handling of the <CODE>set</CODE> operation.
-     * <p> The default implementation of this method is to
-     * call the generated
-     * <CODE>set(req,oid,depth+1)</CODE> method.
-     * <p>
-     * <pre>
-     * public void set(SnmpMibSubRequest req, int depth)
-     *    throws SnmpStatusException {
-     *    final SnmpOid oid = req.getEntryOid();
-     *    final int  action = getRowAction(req,oid,depth+1);
-     *
-     *    set(req,oid,depth+1);
-     *    endRowAction(req,oid,depth+1,action);
-     * }
-     * </pre>
-     * <p> You should not need to override this method in any cases, because
-     * it will eventually call
-     * <CODE>set(SnmpMibSubRequest req, int depth)</CODE> on the generated
-     * derivative of <CODE>SnmpMibEntry</CODE>. If you need to implement
-     * specific policies for minimizing the accesses made to some remote
-     * underlying resources, or if you need to implement some consistency
-     * checks between the different values provided in the varbind list,
-     * you should then rather override
-     * <CODE>set(SnmpMibSubRequest req, int depth)</CODE> on the generated
-     * derivative of <CODE>SnmpMibEntry</CODE>.
-     * <p>
-     *
-     */
-    public void set(SnmpMibSubRequest req, int depth)
-        throws SnmpStatusException {
-
-
-        if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-            SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, SnmpMibTable.class.getName(),
-                    "set", "Entering set");
-        }
-
-        final SnmpOid     oid    = req.getEntryOid();
-        final int         action = getRowAction(req,oid,depth+1);
-
-        if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-            SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, SnmpMibTable.class.getName(),
-                    "set", "Calling set for " + req.getSize() + " varbinds");
-        }
-
-        set(req,oid,depth+1);
-
-        if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-            SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, SnmpMibTable.class.getName(),
-                    "set", "Calling endRowAction");
-        }
-
-        endRowAction(req,oid,depth+1,action);
-
-        if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-            SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, SnmpMibTable.class.getName(),
-                    "set", "RowAction finished");
-        }
-
-    }
-
-    /**
-     * Add a new entry in this <CODE>SnmpMibTable</CODE>.
-     * Also triggers the addEntryCB() callback of the
-     * {@link com.sun.jmx.snmp.agent.SnmpTableEntryFactory} interface
-     * if this node is bound to a factory.
-     *
-     * This method assumes that the given entry will not be registered.
-     * If the entry is going to be registered, or if ObjectName's are
-     * required, then
-     * {@link com.sun.jmx.snmp.agent.SnmpMibTable#addEntry(SnmpOid,
-     * ObjectName, Object)} should be prefered.
-     * <br> This function is mainly provided for backward compatibility.
-     *
-     * <p>
-     * @param rowOid The <CODE>SnmpOid</CODE> identifying the table
-     *               row to be added.
-     * @param entry The entry to add.
-     *
-     * @exception SnmpStatusException The entry couldn't be added
-     *            at the position identified by the given
-     *            <code>rowOid</code>, or this version of the metadata
-     *            requires ObjectName's.
-     */
-     // public void addEntry(SnmpIndex index, Object entry)
-     public void addEntry(SnmpOid rowOid, Object entry)
-        throws SnmpStatusException {
-
-         addEntry(rowOid, null, entry);
-    }
-
-    /**
-     * Add a new entry in this <CODE>SnmpMibTable</CODE>.
-     * Also triggers the addEntryCB() callback of the
-     * {@link com.sun.jmx.snmp.agent.SnmpTableEntryFactory} interface
-     * if this node is bound to a factory.
-     *
-     * <p>
-     * @param oid    The <CODE>SnmpOid</CODE> identifying the table
-     *               row to be added.
-     *
-     * @param name  The ObjectName with which this entry is registered.
-     *              This parameter can be omitted if isRegistrationRequired()
-     *              return false.
-     *
-     * @param entry The entry to add.
-     *
-     * @exception SnmpStatusException The entry couldn't be added
-     *            at the position identified by the given
-     *            <code>rowOid</code>, or if this version of the metadata
-     *            requires ObjectName's, and the given name is null.
-     */
-    // protected synchronized void addEntry(SnmpIndex index, ObjectName name,
-    //                                      Object entry)
-    public synchronized void addEntry(SnmpOid oid, ObjectName name,
-                                      Object entry)
-        throws SnmpStatusException {
-
-        if (isRegistrationRequired() == true && name == null)
-            throw new SnmpStatusException(SnmpStatusException.badValue);
-
-        if (size == 0) {
-            //            indexes.addElement(index);
-            // XX oids.addElement(oid);
-            insertOid(0,oid);
-            if (entries != null)
-                entries.addElement(entry);
-            if (entrynames != null)
-                entrynames.addElement(name);
-            size++;
-
-            // triggers callbacks on the entry factory
-            //
-            if (factory != null) {
-                try {
-                    factory.addEntryCb(0,oid,name,entry,this);
-                } catch (SnmpStatusException x) {
-                    removeOid(0);
-                    if (entries != null)
-                        entries.removeElementAt(0);
-                    if (entrynames != null)
-                        entrynames.removeElementAt(0);
-                    throw x;
-                }
-            }
-
-            // sends the notifications
-            //
-            sendNotification(SnmpTableEntryNotification.SNMP_ENTRY_ADDED,
-                             (new Date()).getTime(), entry, name);
-            return;
-        }
-
-        // Get the insertion position ...
-        //
-        int pos= 0;
-        // bug jaw.00356.B : use oid rather than index to get the
-        // insertion point.
-        //
-        pos= getInsertionPoint(oid,true);
-        if (pos == size) {
-            // Add a new element in the vectors ...
-            //
-            //            indexes.addElement(index);
-            // XX oids.addElement(oid);
-            insertOid(tablecount,oid);
-            if (entries != null)
-                entries.addElement(entry);
-            if (entrynames != null)
-                entrynames.addElement(name);
-            size++;
-        } else {
-            // Insert new element ...
-            //
-            try {
-                //                indexes.insertElementAt(index, pos);
-                // XX oids.insertElementAt(oid, pos);
-                insertOid(pos,oid);
-                if (entries != null)
-                    entries.insertElementAt(entry, pos);
-                if (entrynames != null)
-                    entrynames.insertElementAt(name,pos);
-                size++;
-            } catch(ArrayIndexOutOfBoundsException e) {
-            }
-        }
-
-        // triggers callbacks on the entry factory
-        //
-        if (factory != null) {
-            try {
-                factory.addEntryCb(pos,oid,name,entry,this);
-            } catch (SnmpStatusException x) {
-                removeOid(pos);
-                if (entries != null)
-                    entries.removeElementAt(pos);
-                if (entrynames != null)
-                    entrynames.removeElementAt(pos);
-                throw x;
-            }
-        }
-
-        // sends the notifications
-        //
-        sendNotification(SnmpTableEntryNotification.SNMP_ENTRY_ADDED,
-                         (new Date()).getTime(), entry, name);
-    }
-
-    /**
-     * Remove the specified entry from the table.
-     * Also triggers the removeEntryCB() callback of the
-     * {@link com.sun.jmx.snmp.agent.SnmpTableEntryFactory} interface
-     * if this node is bound to a factory.
-     *
-     * <p>
-     * @param rowOid The <CODE>SnmpOid</CODE> identifying the table
-     *               row to remove.
-     *
-     * @param entry The entry to be removed. This parameter is not used
-     *              internally, it is simply passed along to the
-     *              removeEntryCB() callback.
-     *
-     * @exception SnmpStatusException if the specified entry couldn't
-     *            be removed (if the given <code>rowOid</code> is not
-     *            valid for instance).
-     */
-    public synchronized void removeEntry(SnmpOid rowOid, Object entry)
-        throws SnmpStatusException {
-        int pos = findObject(rowOid);
-        if (pos == -1)
-            return;
-        removeEntry(pos,entry);
-    }
-
-    /**
-     * Remove the specified entry from the table.
-     * Also triggers the removeEntryCB() callback of the
-     * {@link com.sun.jmx.snmp.agent.SnmpTableEntryFactory} interface
-     * if this node is bound to a factory.
-     *
-     * <p>
-     * @param rowOid The <CODE>SnmpOid</CODE> identifying the table
-     *               row to remove.
-     *
-     * @exception SnmpStatusException if the specified entry couldn't
-     *            be removed (if the given <code>rowOid</code> is not
-     *            valid for instance).
-     */
-    public void removeEntry(SnmpOid rowOid)
-        throws SnmpStatusException {
-        int pos = findObject(rowOid);
-        if (pos == -1)
-            return;
-        removeEntry(pos,null);
-    }
-
-    /**
-     * Remove the specified entry from the table.
-     * Also triggers the removeEntryCB() callback of the
-     * {@link com.sun.jmx.snmp.agent.SnmpTableEntryFactory} interface
-     * if this node is bound to a factory.
-     *
-     * <p>
-     * @param pos The position of the entry in the table.
-     *
-     * @param entry The entry to be removed. This parameter is not used
-     *              internally, it is simply passed along to the
-     *              removeEntryCB() callback.
-     *
-     * @exception SnmpStatusException if the specified entry couldn't
-     *            be removed.
-     */
-    public synchronized void removeEntry(int pos, Object entry)
-        throws SnmpStatusException {
-        if (pos == -1)
-            return;
-        if (pos >= size) return;
-
-        Object obj = entry;
-        if (entries != null && entries.size() > pos) {
-            obj = entries.elementAt(pos);
-            entries.removeElementAt(pos);
-        }
-
-        ObjectName name = null;
-        if (entrynames != null && entrynames.size() > pos) {
-            name = entrynames.elementAt(pos);
-            entrynames.removeElementAt(pos);
-        }
-
-        final SnmpOid rowOid = tableoids[pos];
-        removeOid(pos);
-        size --;
-
-        if (obj == null) obj = entry;
-
-        if (factory != null)
-            factory.removeEntryCb(pos,rowOid,name,obj,this);
-
-        sendNotification(SnmpTableEntryNotification.SNMP_ENTRY_REMOVED,
-                         (new Date()).getTime(), obj, name);
-    }
-
-    /**
-     * Get the entry corresponding to the specified rowOid.
-     *
-     * <p>
-     * @param rowOid The <CODE>SnmpOid</CODE> identifying the
-     *        row to be retrieved.
-     *
-     * @return The entry.
-     *
-     * @exception SnmpStatusException There is no entry with the specified
-     *      <code>rowOid</code> in the table.
-     */
-    public synchronized Object getEntry(SnmpOid rowOid)
-        throws SnmpStatusException {
-        int pos= findObject(rowOid);
-        if (pos == -1)
-            throw new SnmpStatusException(SnmpStatusException.noSuchInstance);
-        return entries.elementAt(pos);
-    }
-
-    /**
-     * Get the ObjectName of the entry corresponding to the
-     * specified rowOid.
-     * The result of this method is only meaningful if
-     * isRegistrationRequired() yields true.
-     *
-     * <p>
-     * @param rowOid The <CODE>SnmpOid</CODE> identifying the table
-     *        row whose ObjectName we want to retrieve.
-     *
-     * @return The object name of the entry.
-     *
-     * @exception SnmpStatusException There is no entry with the specified
-     *      <code>rowOid</code> in the table.
-     */
-    public synchronized ObjectName getEntryName(SnmpOid rowOid)
-        throws SnmpStatusException {
-        int pos = findObject(rowOid);
-        if (entrynames == null) return null;
-        if (pos == -1 || pos >= entrynames.size())
-            throw new SnmpStatusException(SnmpStatusException.noSuchInstance);
-        return entrynames.elementAt(pos);
-    }
-
-    /**
-     * Return the entries stored in this table <CODE>SnmpMibTable</CODE>.
-     * <p>
-     * If the subclass generated by mibgen uses the generic way to access
-     * the entries (i.e. if it goes through the MBeanServer) then some of
-     * the entries may be <code>null</code>. It all depends whether a non
-     * <code>null</code> entry was passed to addEntry().<br>
-     * Otherwise, if it uses the standard way (access the entry directly
-     * through their standard MBean interface) this array will contain all
-     * the entries.
-     * <p>
-     * @return The entries array.
-     */
-    public Object[] getBasicEntries() {
-        Object[] array= new Object[size];
-        entries.copyInto(array);
-        return array;
-    }
-
-    /**
-     * Get the size of the table.
-     *
-     * @return The number of entries currently registered in this table.
-     */
-    public int getSize() {
-        return size;
-    }
-
-    // EVENT STUFF
-    //------------
-
-    /**
-     * Enable to add an SNMP entry listener to this
-     * <CODE>SnmpMibTable</CODE>.
-     *
-     * <p>
-     * @param listener The listener object which will handle the
-     *    notifications emitted by the registered MBean.
-     *
-     * @param filter The filter object. If filter is null, no filtering
-     *    will be performed before handling notifications.
-     *
-     * @param handback The context to be sent to the listener when a
-     *    notification is emitted.
-     *
-     * @exception IllegalArgumentException Listener parameter is null.
-     */
-    public synchronized void
-        addNotificationListener(NotificationListener listener,
-                                NotificationFilter filter, Object handback)  {
-
-        // Check listener
-        //
-        if (listener == null) {
-            throw new java.lang.IllegalArgumentException
-                ("Listener can't be null") ;
-        }
-
-        // looking for listener in handbackTable
-        //
-        Vector<Object> handbackList =
-            handbackTable.get(listener) ;
-        Vector<NotificationFilter> filterList =
-            filterTable.get(listener) ;
-        if ( handbackList == null ) {
-            handbackList = new Vector<Object>() ;
-            filterList = new Vector<NotificationFilter>() ;
-            handbackTable.put(listener, handbackList) ;
-            filterTable.put(listener, filterList) ;
-        }
-
-        // Add the handback and the filter
-        //
-        handbackList.addElement(handback) ;
-        filterList.addElement(filter) ;
-    }
-
-    /**
-     * Enable to remove an SNMP entry listener from this
-     * <CODE>SnmpMibTable</CODE>.
-     *
-     * @param listener The listener object which will handle the
-     *    notifications emitted by the registered MBean.
-     *    This method will remove all the information related to this
-     *    listener.
-     *
-     * @exception ListenerNotFoundException The listener is not registered
-     *    in the MBean.
-     */
-    public synchronized void
-        removeNotificationListener(NotificationListener listener)
-        throws ListenerNotFoundException {
-
-        // looking for listener in handbackTable
-        //
-        java.util.Vector handbackList =
-            (java.util.Vector) handbackTable.get(listener) ;
-        java.util.Vector filterList =
-            (java.util.Vector) filterTable.get(listener) ;
-        if ( handbackList == null ) {
-            throw new ListenerNotFoundException("listener");
-        }
-
-        // If handback is null, remove the listener entry
-        //
-        handbackTable.remove(listener) ;
-        filterTable.remove(listener) ;
-    }
-
-    /**
-     * Return a <CODE>NotificationInfo</CODE> object containing the
-     * notification class and the notification type sent by the
-     * <CODE>SnmpMibTable</CODE>.
-     */
-    public MBeanNotificationInfo[] getNotificationInfo() {
-
-        String[] types = {SnmpTableEntryNotification.SNMP_ENTRY_ADDED,
-                          SnmpTableEntryNotification.SNMP_ENTRY_REMOVED};
-
-        MBeanNotificationInfo[] notifsInfo = {
-            new MBeanNotificationInfo
-            (types, "com.sun.jmx.snmp.agent.SnmpTableEntryNotification",
-             "Notifications sent by the SnmpMibTable")
-        };
-
-        return notifsInfo;
-    }
-
-
-    /**
-     * Register the factory through which table entries should
-     * be created when remote entry creation is enabled.
-     *
-     * <p>
-     * @param factory The
-     *        {@link com.sun.jmx.snmp.agent.SnmpTableEntryFactory} through
-     *        which entries will be created when a remote SNMP manager
-     *        request the creation of a new entry via an SNMP SET request.
-     */
-    public void registerEntryFactory(SnmpTableEntryFactory factory) {
-        this.factory = factory;
-    }
-
-    // ----------------------------------------------------------------------
-    // PROTECTED METHODS - RowStatus
-    // ----------------------------------------------------------------------
-
-    /**
-     * Return true if the columnar object identified by <code>var</code>
-     * is used to control the addition/deletion of rows in this table.
-     *
-     * <p>
-     * By default, this method assumes that there is no control variable
-     * and always return <code>false</code>
-     * <p>
-     * If this table was defined using SMIv2, and if it contains a
-     * control variable with RowStatus syntax, <code>mibgen</code>
-     * will generate a non default implementation for this method
-     * that will identify the RowStatus control variable.
-     * <p>
-     * You will have to redefine this method if you need to implement
-     * control variables that do not conform to RFC 2579 RowStatus
-     * TEXTUAL-CONVENTION.
-     * <p>
-     * @param rowOid The <CODE>SnmpOid</CODE> identifying the table
-     *               row involved in the operation.
-     *
-     * @param var The OID arc identifying the involved columnar object.
-     *
-     * @param userData A contextual object containing user-data.
-     *        This object is allocated through the <code>
-     *        {@link com.sun.jmx.snmp.agent.SnmpUserDataFactory}</code>
-     *        for each incoming SNMP request.
-     *
-     **/
-    protected boolean isRowStatus(SnmpOid rowOid, long var,
-                                    Object  userData) {
-        return false;
-    }
-
-
-    /**
-     * Return the RowStatus code value specified in this request.
-     * <p>
-     * The RowStatus code value should be one of the values defined
-     * by {@link com.sun.jmx.snmp.EnumRowStatus}. These codes correspond
-     * to RowStatus codes as defined in RFC 2579, plus the <i>unspecified</i>
-     * value which is SNMP Runtime specific.
-     * <p>
-     *
-     * @param req    The sub-request that must be handled by this node.
-     *
-     * @param rowOid The <CODE>SnmpOid</CODE> identifying the table
-     *               row involved in the operation.
-     *
-     * @param depth  The depth reached in the OID tree.
-     *
-     * @return The RowStatus code specified in this request, if any:
-     * <ul>
-     * <li>If the specified row does not exist and this table do
-     *     not use any variable to control creation/deletion of
-     *     rows, then default creation mechanism is assumed and
-     *     <i>createAndGo</i> is returned</li>
-     * <li>Otherwise, if the row exists and this table do not use any
-     *     variable to control creation/deletion of rows,
-     *     <i>unspecified</i> is returned.</li>
-     * <li>Otherwise, if the request does not contain the control variable,
-     *     <i>unspecified</i> is returned.</li>
-     * <li>Otherwise, mapRowStatus() is called to extract the RowStatus
-     *     code from the SnmpVarBind that contains the control variable.</li>
-     * </ul>
-     *
-     * @exception SnmpStatusException if the value of the control variable
-     *            could not be mapped to a RowStatus code.
-     *
-     * @see com.sun.jmx.snmp.EnumRowStatus
-     **/
-    protected int getRowAction(SnmpMibSubRequest req, SnmpOid rowOid,
-                               int depth)
-        throws SnmpStatusException {
-        final boolean     isnew  = req.isNewEntry();
-        final SnmpVarBind vb = req.getRowStatusVarBind();
-        if (vb == null) {
-            if (isnew && ! hasRowStatus())
-                return EnumRowStatus.createAndGo;
-            else return EnumRowStatus.unspecified;
-        }
-
-        try {
-            return mapRowStatus(rowOid, vb, req.getUserData());
-        } catch( SnmpStatusException x) {
-            checkRowStatusFail(req, x.getStatus());
-        }
-        return EnumRowStatus.unspecified;
-    }
-
-    /**
-     * Map the value of the <code>vbstatus</code> varbind to the
-     * corresponding RowStatus code defined in
-     * {@link com.sun.jmx.snmp.EnumRowStatus}.
-     * These codes correspond to RowStatus codes as defined in RFC 2579,
-     * plus the <i>unspecified</i> value which is SNMP Runtime specific.
-     * <p>
-     * By default, this method assumes that the control variable is
-     * an Integer, and it simply returns its value without further
-     * analysis.
-     * <p>
-     * If this table was defined using SMIv2, and if it contains a
-     * control variable with RowStatus syntax, <code>mibgen</code>
-     * will generate a non default implementation for this method.
-     * <p>
-     * You will have to redefine this method if you need to implement
-     * control variables that do not conform to RFC 2579 RowStatus
-     * TEXTUAL-CONVENTION.
-     *
-     * <p>
-     * @param rowOid The <CODE>SnmpOid</CODE> identifying the table
-     *               row involved in the operation.
-     *
-     * @param vbstatus The SnmpVarBind containing the value of the control
-     *           variable, as identified by the isRowStatus() method.
-     *
-     * @param userData A contextual object containing user-data.
-     *        This object is allocated through the <code>
-     *        {@link com.sun.jmx.snmp.agent.SnmpUserDataFactory}</code>
-     *        for each incoming SNMP request.
-     *
-     * @return The RowStatus code mapped from the value contained
-     *     in <code>vbstatus</code>.
-     *
-     * @exception SnmpStatusException if the value of the control variable
-     *            could not be mapped to a RowStatus code.
-     *
-     * @see com.sun.jmx.snmp.EnumRowStatus
-     **/
-    protected int mapRowStatus(SnmpOid rowOid, SnmpVarBind vbstatus,
-                               Object userData)
-        throws SnmpStatusException {
-        final SnmpValue rsvalue = vbstatus.value;
-
-        if (rsvalue instanceof SnmpInt)
-            return ((SnmpInt)rsvalue).intValue();
-        else
-            throw new SnmpStatusException(
-                       SnmpStatusException.snmpRspInconsistentValue);
-    }
-
-    /**
-     * Set the control variable to the specified <code>newStatus</code>
-     * value.
-     *
-     * <p>
-     * This method maps the given <code>newStatus</code> to the appropriate
-     * value for the control variable, then sets the control variable in
-     * the entry identified by <code>rowOid</code>. It returns the new
-     * value of the control variable.
-     * <p>
-     * By default, it is assumed that there is no control variable so this
-     * method does nothing and simply returns <code>null</code>.
-     * <p>
-     * If this table was defined using SMIv2, and if it contains a
-     * control variable with RowStatus syntax, <code>mibgen</code>
-     * will generate a non default implementation for this method.
-     * <p>
-     * You will have to redefine this method if you need to implement
-     * control variables that do not conform to RFC 2579 RowStatus
-     * TEXTUAL-CONVENTION.
-     *
-     * <p>
-     * @param rowOid The <CODE>SnmpOid</CODE> identifying the table
-     *               row involved in the operation.
-     *
-     * @param newStatus The new status for the row: one of the
-     *        RowStatus code defined in
-     *        {@link com.sun.jmx.snmp.EnumRowStatus}. These codes
-     *        correspond to RowStatus codes as defined in RFC 2579,
-     *        plus the <i>unspecified</i> value which is SNMP Runtime specific.
-     *
-     * @param userData A contextual object containing user-data.
-     *        This object is allocated through the <code>
-     *        {@link com.sun.jmx.snmp.agent.SnmpUserDataFactory}</code>
-     *        for each incoming SNMP request.
-     *
-     * @return The new value of the control variable (usually
-     *         <code>new SnmpInt(newStatus)</code>) or <code>null</code>
-     *         if the table do not have any control variable.
-     *
-     * @exception SnmpStatusException If the given <code>newStatus</code>
-     *            could not be set on the specified entry, or if the
-     *            given <code>newStatus</code> is not valid.
-     *
-     * @see com.sun.jmx.snmp.EnumRowStatus
-     **/
-    protected SnmpValue setRowStatus(SnmpOid rowOid, int newStatus,
-                                     Object userData)
-        throws SnmpStatusException {
-        return null;
-    }
-
-    /**
-     * Tell whether the specified row is ready and can be put in the
-     * <i>notInService</i> state.
-     * <p>
-     * This method is called only once, after all the varbind have been
-     * set on a new entry for which <i>createAndWait</i> was specified.
-     * <p>
-     * If the entry is not yet ready, this method should return false.
-     * It will then be the responsibility of the entry to switch its
-     * own state to <i>notInService</i> when it becomes ready.
-     * No further call to <code>isRowReady()</code> will be made.
-     * <p>
-     * By default, this method always return true. <br>
-     * <code>mibgen</code> will not generate any specific implementation
-     * for this method - meaning that by default, a row created using
-     * <i>createAndWait</i> will always be placed in <i>notInService</i>
-     * state at the end of the request.
-     * <p>
-     * If this table was defined using SMIv2, and if it contains a
-     * control variable with RowStatus syntax, <code>mibgen</code>
-     * will generate an implementation for this method that will
-     * delegate the work to the metadata class modelling the conceptual
-     * row, so that you can override the default behaviour by subclassing
-     * that metadata class.
-     * <p>
-     * You will have to redefine this method if this default mechanism
-     * does not suit your needs.
-     *
-     * <p>
-     * @param rowOid The <CODE>SnmpOid</CODE> identifying the table
-     *               row involved in the operation.
-     *
-     * @param userData A contextual object containing user-data.
-     *        This object is allocated through the <code>
-     *        {@link com.sun.jmx.snmp.agent.SnmpUserDataFactory}</code>
-     *        for each incoming SNMP request.
-     *
-     * @return <code>true</code> if the row can be placed in
-     *         <i>notInService</i> state.
-     *
-     * @exception SnmpStatusException An error occured while trying
-     *            to retrieve the row status, and the operation should
-     *            be aborted.
-     *
-     * @see com.sun.jmx.snmp.EnumRowStatus
-     **/
-    protected boolean isRowReady(SnmpOid rowOid, Object userData)
-        throws SnmpStatusException {
-        return true;
-    }
-
-    /**
-     * Check whether the control variable of the given row can be
-     * switched to the new specified <code>newStatus</code>.
-     * <p>
-     * This method is called during the <i>check</i> phase of a SET
-     * request when the control variable specifies <i>active</i> or
-     * <i>notInService</i>.
-     * <p>
-     * By default it is assumed that nothing prevents putting the
-     * row in the requested state, and this method does nothing.
-     * It is simply provided as a hook so that specific checks can
-     * be implemented.
-     * <p>
-     * Note that if the actual row deletion fails afterward, the
-     * atomicity of the request is no longer guaranteed.
-     *
-     * <p>
-     * @param req    The sub-request that must be handled by this node.
-     *
-     * @param rowOid The <CODE>SnmpOid</CODE> identifying the table
-     *               row involved in the operation.
-     *
-     * @param depth  The depth reached in the OID tree.
-     *
-     * @param newStatus The new status for the row: one of the
-     *        RowStatus code defined in
-     *        {@link com.sun.jmx.snmp.EnumRowStatus}. These codes
-     *        correspond to RowStatus codes as defined in RFC 2579,
-     *        plus the <i>unspecified</i> value which is SNMP Runtime specific.
-     *
-     * @exception SnmpStatusException if switching to this new state
-     *            would fail.
-     *
-     **/
-    protected void checkRowStatusChange(SnmpMibSubRequest req,
-                                        SnmpOid rowOid, int depth,
-                                        int newStatus)
-        throws SnmpStatusException {
-
-    }
-
-    /**
-     * Check whether the specified row can be removed from the table.
-     * <p>
-     * This method is called during the <i>check</i> phase of a SET
-     * request when the control variable specifies <i>destroy</i>
-     * <p>
-     * By default it is assumed that nothing prevents row deletion
-     * and this method does nothing. It is simply provided as a hook
-     * so that specific checks can be implemented.
-     * <p>
-     * Note that if the actual row deletion fails afterward, the
-     * atomicity of the request is no longer guaranteed.
-     *
-     * <p>
-     * @param req    The sub-request that must be handled by this node.
-     *
-     * @param rowOid The <CODE>SnmpOid</CODE> identifying the table
-     *               row involved in the operation.
-     *
-     * @param depth  The depth reached in the OID tree.
-     *
-     * @exception SnmpStatusException if the row deletion must be
-     *            rejected.
-     **/
-    protected void checkRemoveTableRow(SnmpMibSubRequest req, SnmpOid rowOid,
-                                       int depth)
-        throws SnmpStatusException {
-
-    }
-
-    /**
-     * Remove a table row upon a remote manager request.
-     *
-     * This method is called internally when <code>getRowAction()</code>
-     * yields <i>destroy</i> - i.e.: it is only called when a remote
-     * manager requests the removal of a table row.<br>
-     * You should never need to call this function directly.
-     * <p>
-     * By default, this method simply calls <code>removeEntry(rowOid)
-     * </code>.
-     * <p>
-     * You can redefine this method if you need to implement some
-     * specific behaviour when a remote row deletion is invoked.
-     * <p>
-     * Note that specific checks should not be implemented in this
-     * method, but rather in <code>checkRemoveTableRow()</code>.
-     * If <code>checkRemoveTableRow()</code> succeeds and this method
-     * fails afterward, the atomicity of the original SET request can no
-     * longer be guaranteed.
-     * <p>
-     *
-     * @param req    The sub-request that must be handled by this node.
-     *
-     * @param rowOid The <CODE>SnmpOid</CODE> identifying the table
-     *               row involved in the operation.
-     *
-     * @param depth  The depth reached in the OID tree.
-     *
-     * @exception SnmpStatusException if the actual row deletion fails.
-     *            This should not happen since it would break the
-     *            atomicity of the SET request. Specific checks should
-     *            be implemented in <code>checkRemoveTableRow()</code>
-     *            if needed. If the entry does not exists, no exception
-     *            is generated and the method simply returns.
-     *
-     **/
-    protected void removeTableRow(SnmpMibSubRequest req, SnmpOid rowOid,
-                                  int depth)
-        throws SnmpStatusException {
-
-        removeEntry(rowOid);
-    }
-
-    /**
-     * This method takes care of initial RowStatus handling during the
-     * check() phase of a SET request.
-     *
-     * In particular it will:
-     * <ul><li>check that the given <code>rowAction</code> returned by
-     *         <code>getRowAction()</code> is valid.</li>
-     * <li>Then depending on the <code>rowAction</code> specified it will:
-     *     <ul><li>either call <code>createNewEntry()</code> (<code>
-     *         rowAction = <i>createAndGo</i> or <i>createAndWait</i>
-     *         </code>),</li>
-     *     <li>or call <code>checkRemoveTableRow()</code> (<code>
-     *         rowAction = <i>destroy</i></code>),</li>
-     *     <li>or call <code>checkRowStatusChange()</code> (<code>
-     *         rowAction = <i>active</i> or <i>notInService</i></code>),</li>
-     *     <li>or generate a SnmpStatusException if the passed <code>
-     *         rowAction</code> is not correct.</li>
-     * </ul></li></ul>
-     * <p>
-     * In principle, you should not need to redefine this method.
-     * <p>
-     * <code>beginRowAction()</code> is called during the check phase
-     * of a SET request, before actual checking on the varbind list
-     * is performed.
-     *
-     * <p>
-     * @param req    The sub-request that must be handled by this node.
-     *
-     * @param rowOid The <CODE>SnmpOid</CODE> identifying the table
-     *               row involved in the operation.
-     *
-     * @param depth  The depth reached in the OID tree.
-     *
-     * @param rowAction The requested action as returned by <code>
-     *        getRowAction()</code>: one of the RowStatus codes defined in
-     *        {@link com.sun.jmx.snmp.EnumRowStatus}. These codes
-     *        correspond to RowStatus codes as defined in RFC 2579,
-     *        plus the <i>unspecified</i> value which is SNMP Runtime specific.
-     *
-     * @exception SnmpStatusException if the specified <code>rowAction</code>
-     *            is not valid or cannot be executed.
-     *            This should not happen since it would break the
-     *            atomicity of the SET request. Specific checks should
-     *            be implemented in <code>beginRowAction()</code> if needed.
-     *
-     * @see com.sun.jmx.snmp.EnumRowStatus
-     **/
-    protected synchronized void beginRowAction(SnmpMibSubRequest req,
-                              SnmpOid rowOid, int depth, int rowAction)
-        throws SnmpStatusException {
-        final boolean     isnew  = req.isNewEntry();
-        final SnmpOid     oid    = rowOid;
-        final int         action = rowAction;
-
-        switch (action) {
-        case EnumRowStatus.unspecified:
-            if (isnew) {
-                if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                    SNMP_ADAPTOR_LOGGER.logp(Level.FINEST,
-                            SnmpMibTable.class.getName(),
-                            "beginRowAction", "Failed to create row[" +
-                            rowOid + "] : RowStatus = unspecified");
-                }
-                checkRowStatusFail(req,SnmpStatusException.snmpRspNoAccess);
-            }
-            break;
-        case EnumRowStatus.createAndGo:
-        case EnumRowStatus.createAndWait:
-            if (isnew) {
-                if (isCreationEnabled()) {
-                    if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                        SNMP_ADAPTOR_LOGGER.logp(Level.FINEST,
-                                SnmpMibTable.class.getName(),
-                                "beginRowAction", "Creating row[" + rowOid +
-                                "] : RowStatus = createAndGo | createAndWait");
-                    }
-                    createNewEntry(req,oid,depth);
-                } else {
-                    if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                        SNMP_ADAPTOR_LOGGER.logp(Level.FINEST,
-                                SnmpMibTable.class.getName(),
-                                "beginRowAction", "Can't create row[" + rowOid +
-                                "] : RowStatus = createAndGo | createAndWait " +
-                                "but creation is disabled");
-                    }
-                    checkRowStatusFail(req,
-                       SnmpStatusException.snmpRspNoAccess);
-                }
-            } else {
-                if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                    SNMP_ADAPTOR_LOGGER.logp(Level.FINEST,
-                            SnmpMibTable.class.getName(),
-                            "beginRowAction", "Can't create row[" + rowOid +
-                            "] : RowStatus = createAndGo | createAndWait " +
-                            "but row already exists");
-                }
-                checkRowStatusFail(req,
-                       SnmpStatusException.snmpRspInconsistentValue);
-            }
-            break;
-        case EnumRowStatus.destroy:
-            if (isnew) {
-                if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                    SNMP_ADAPTOR_LOGGER.logp(Level.FINEST,
-                            SnmpMibTable.class.getName(),
-                            "beginRowAction",
-                            "Warning: can't destroy row[" + rowOid +
-                            "] : RowStatus = destroy but row does not exist");
-                }
-            } else if (!isCreationEnabled()) {
-                if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                    SNMP_ADAPTOR_LOGGER.logp(Level.FINEST,
-                            SnmpMibTable.class.getName(),
-                            "beginRowAction",
-                            "Can't destroy row[" + rowOid + "] : " +
-                            "RowStatus = destroy but creation is disabled");
-                }
-                checkRowStatusFail(req,SnmpStatusException.snmpRspNoAccess);
-            }
-            checkRemoveTableRow(req,rowOid,depth);
-            break;
-        case EnumRowStatus.active:
-        case EnumRowStatus.notInService:
-            if (isnew) {
-                if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                    SNMP_ADAPTOR_LOGGER.logp(Level.FINEST,
-                            SnmpMibTable.class.getName(),
-                            "beginRowAction", "Can't switch state of row[" +
-                            rowOid + "] : specified RowStatus = active | " +
-                            "notInService but row does not exist");
-                }
-                checkRowStatusFail(req,
-                        SnmpStatusException.snmpRspInconsistentValue);
-            }
-            checkRowStatusChange(req,rowOid,depth,action);
-            break;
-        case EnumRowStatus.notReady:
-        default:
-            if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                SNMP_ADAPTOR_LOGGER.logp(Level.FINEST,
-                        SnmpMibTable.class.getName(),
-                        "beginRowAction", "Invalid RowStatus value for row[" +
-                        rowOid + "] : specified RowStatus = " + action);
-            }
-            checkRowStatusFail(req,
-                    SnmpStatusException.snmpRspInconsistentValue);
-        }
-    }
-
-    /**
-     * This method takes care of final RowStatus handling during the
-     * set() phase of a SET request.
-     *
-     * In particular it will:
-     *     <ul><li>either call <code>setRowStatus(<i>active</i>)</code>
-     *         (<code> rowAction = <i>createAndGo</i> or <i>active</i>
-     *         </code>),</li>
-     *     <li>or call <code>setRowStatus(<i>notInService</i> or <i>
-     *         notReady</i>)</code> depending on the result of <code>
-     *         isRowReady()</code> (<code>rowAction = <i>createAndWait</i>
-     *         </code>),</li>
-     *     <li>or call <code>setRowStatus(<i>notInService</i>)</code>
-     *         (<code> rowAction = <i>notInService</i></code>),
-     *     <li>or call <code>removeTableRow()</code> (<code>
-     *         rowAction = <i>destroy</i></code>),</li>
-     *     <li>or generate a SnmpStatusException if the passed <code>
-     *         rowAction</code> is not correct. This should be avoided
-     *         since it would break SET request atomicity</li>
-     *     </ul>
-     * <p>
-     * In principle, you should not need to redefine this method.
-     * <p>
-     * <code>endRowAction()</code> is called during the set() phase
-     * of a SET request, after the actual set() on the varbind list
-     * has been performed. The varbind containing the control variable
-     * is updated with the value returned by setRowStatus() (if it is
-     * not <code>null</code>).
-     *
-     * <p>
-     * @param req    The sub-request that must be handled by this node.
-     *
-     * @param rowOid The <CODE>SnmpOid</CODE> identifying the table
-     *               row involved in the operation.
-     *
-     * @param depth  The depth reached in the OID tree.
-     *
-     * @param rowAction The requested action as returned by <code>
-     *        getRowAction()</code>: one of the RowStatus codes defined in
-     *        {@link com.sun.jmx.snmp.EnumRowStatus}. These codes
-     *        correspond to RowStatus codes as defined in RFC 2579,
-     *        plus the <i>unspecified</i> value which is SNMP Runtime specific.
-     *
-     * @exception SnmpStatusException if the specified <code>rowAction</code>
-     *            is not valid.
-     *
-     * @see com.sun.jmx.snmp.EnumRowStatus
-     **/
-    protected void endRowAction(SnmpMibSubRequest req, SnmpOid rowOid,
-                               int depth, int rowAction)
-        throws SnmpStatusException {
-        final boolean     isnew  = req.isNewEntry();
-        final SnmpOid     oid    = rowOid;
-        final int         action = rowAction;
-        final Object      data   = req.getUserData();
-        SnmpValue         value  = null;
-
-        switch (action) {
-        case EnumRowStatus.unspecified:
-            break;
-        case EnumRowStatus.createAndGo:
-            if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                SNMP_ADAPTOR_LOGGER.logp(Level.FINEST,
-                        SnmpMibTable.class.getName(),
-                        "endRowAction", "Setting RowStatus to 'active' " +
-                        "for row[" + rowOid + "] : requested RowStatus = " +
-                        "createAndGo");
-            }
-            value = setRowStatus(oid,EnumRowStatus.active,data);
-            break;
-        case EnumRowStatus.createAndWait:
-            if (isRowReady(oid,data)) {
-                if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                    SNMP_ADAPTOR_LOGGER.logp(Level.FINEST,
-                            SnmpMibTable.class.getName(),
-                            "endRowAction",
-                            "Setting RowStatus to 'notInService' for row[" +
-                            rowOid + "] : requested RowStatus = createAndWait");
-                }
-                value = setRowStatus(oid,EnumRowStatus.notInService,data);
-            } else {
-                if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                    SNMP_ADAPTOR_LOGGER.logp(Level.FINEST,
-                            SnmpMibTable.class.getName(),
-                            "endRowAction", "Setting RowStatus to 'notReady' " +
-                            "for row[" + rowOid + "] : requested RowStatus = " +
-                            "createAndWait");
-                }
-                value = setRowStatus(oid,EnumRowStatus.notReady,data);
-            }
-            break;
-        case EnumRowStatus.destroy:
-            if (isnew) {
-                if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                    SNMP_ADAPTOR_LOGGER.logp(Level.FINEST,
-                            SnmpMibTable.class.getName(),
-                            "endRowAction",
-                            "Warning: requested RowStatus = destroy, " +
-                            "but row[" + rowOid + "] does not exist");
-                }
-            } else {
-                if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                    SNMP_ADAPTOR_LOGGER.logp(Level.FINEST,
-                            SnmpMibTable.class.getName(),
-                            "endRowAction", "Destroying row[" + rowOid +
-                            "] : requested RowStatus = destroy");
-                }
-            }
-            removeTableRow(req,oid,depth);
-            break;
-        case EnumRowStatus.active:
-            if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                SNMP_ADAPTOR_LOGGER.logp(Level.FINEST,
-                        SnmpMibTable.class.getName(),
-                        "endRowAction",
-                        "Setting RowStatus to 'active' for row[" +
-                        rowOid + "] : requested RowStatus = active");
-            }
-            value = setRowStatus(oid,EnumRowStatus.active,data);
-            break;
-        case EnumRowStatus.notInService:
-            if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                SNMP_ADAPTOR_LOGGER.logp(Level.FINEST,
-                        SnmpMibTable.class.getName(),
-                        "endRowAction",
-                        "Setting RowStatus to 'notInService' for row[" +
-                        rowOid + "] : requested RowStatus = notInService");
-            }
-            value = setRowStatus(oid,EnumRowStatus.notInService,data);
-            break;
-        case EnumRowStatus.notReady:
-        default:
-            if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                SNMP_ADAPTOR_LOGGER.logp(Level.FINEST,
-                        SnmpMibTable.class.getName(),
-                        "endRowAction", "Invalid RowStatus value for row[" +
-                        rowOid + "] : specified RowStatus = " + action);
-            }
-            setRowStatusFail(req,
-                          SnmpStatusException.snmpRspInconsistentValue);
-        }
-        if (value != null) {
-            final SnmpVarBind vb = req.getRowStatusVarBind();
-            if (vb != null) vb.value = value;
-        }
-    }
-
-    // -------------------------------------------------------------------
-    // PROTECTED METHODS - get next
-    // -------------------------------------------------------------------
-
-    /**
-     * Return the next OID arc corresponding to a readable columnar
-     * object in the underlying entry OBJECT-TYPE, possibly skipping over
-     * those objects that must not or cannot be returned.
-     * Calls {@link
-     * #getNextVarEntryId(com.sun.jmx.snmp.SnmpOid,long,java.lang.Object)},
-     * until
-     * {@link #skipEntryVariable(com.sun.jmx.snmp.SnmpOid,long,
-     * java.lang.Object,int)} returns false.
-     *
-     *
-     * @param rowOid The OID index of the row involved in the operation.
-     *
-     * @param var Id of the variable we start from, looking for the next.
-     *
-     * @param userData A contextual object containing user-data.
-     *        This object is allocated through the <code>
-     *        {@link com.sun.jmx.snmp.agent.SnmpUserDataFactory}</code>
-     *        for each incoming SNMP request.
-     *
-     * @param pduVersion Protocol version of the original request PDU.
-     *
-     * @return The next columnar object id which can be returned using
-     *         the given PDU's protocol version.
-     *
-     * @exception SnmpStatusException If no id is found after the given id.
-     *
-     **/
-    protected long getNextVarEntryId(SnmpOid rowOid,
-                                     long var,
-                                     Object userData,
-                                     int pduVersion)
-        throws SnmpStatusException {
-
-        long varid=var;
-        do {
-            varid = getNextVarEntryId(rowOid,varid,userData);
-        } while (skipEntryVariable(rowOid,varid,userData,pduVersion));
-
-        return varid;
-    }
-
-    /**
-     * Hook for subclasses.
-     * The default implementation of this method is to always return
-     * false. Subclasses should redefine this method so that it returns
-     * true when:
-     * <ul><li>the variable is a leaf that is not instantiated,</li>
-     * <li>or the variable is a leaf whose type cannot be returned by that
-     *     version of the protocol (e.g. an Counter64 with SNMPv1).</li>
-     * </ul>
-     *
-     * @param rowOid The OID index of the row involved in the operation.
-     *
-     * @param var Id of the variable we start from, looking for the next.
-     *
-     * @param userData A contextual object containing user-data.
-     *        This object is allocated through the <code>
-     *        {@link com.sun.jmx.snmp.agent.SnmpUserDataFactory}</code>
-     *        for each incoming SNMP request.
-     *
-     * @param pduVersion Protocol version of the original request PDU.
-     *
-     * @return true if the variable must be skipped by the get-next
-     *         algorithm.
-     */
-    protected boolean skipEntryVariable(SnmpOid rowOid,
-                                        long var,
-                                        Object userData,
-                                        int pduVersion) {
-        return false;
-    }
-
-    /**
-     * Get the <CODE>SnmpOid</CODE> index of the row that follows
-     * the given <CODE>oid</CODE> in the table. The given <CODE>
-     * oid</CODE> does not need to be a valid row OID index.
-     *
-     * <p>
-     * @param oid The OID from which the search will begin.
-     *
-     * @param userData A contextual object containing user-data.
-     *        This object is allocated through the <code>
-     *        {@link com.sun.jmx.snmp.agent.SnmpUserDataFactory}</code>
-     *        for each incoming SNMP request.
-     *
-     * @return The next <CODE>SnmpOid</CODE> index.
-     *
-     * @exception SnmpStatusException There is no index following the
-     *     specified <CODE>oid</CODE> in the table.
-     */
-    protected SnmpOid getNextOid(SnmpOid oid, Object userData)
-        throws SnmpStatusException {
-
-        if (size == 0)
-            throw noSuchInstanceException;
-
-        final SnmpOid resOid = oid;
-
-        // Just a simple check to speed up retrieval of last element ...
-        //
-        // XX SnmpOid last= (SnmpOid) oids.lastElement();
-        SnmpOid last= tableoids[tablecount-1];
-        if (last.equals(resOid)) {
-            // Last element of the table ...
-            //
-            throw noSuchInstanceException;
-        }
-
-        // First find the oid. This will allow to speed up retrieval process
-        // during smart discovery of table (using the getNext) as the
-        // management station will use the valid index returned during a
-        // previous getNext ...
-        //
-
-        // Returns the position following the position at which resOid
-        // is found, or the position at which resOid should be inserted.
-        //
-        final int newPos = getInsertionPoint(resOid,false);
-
-        // If the position returned is not out of bound, we will find
-        // the next element in the array.
-        //
-        if (newPos > -1 && newPos < size) {
-            try {
-                // XX last = (SnmpOid) oids.elementAt(newPos);
-                last = tableoids[newPos];
-            } catch(ArrayIndexOutOfBoundsException e) {
-                throw noSuchInstanceException;
-            }
-        } else {
-            // We are dealing with the last element of the table ..
-            //
-            throw noSuchInstanceException;
-        }
-
-
-        return last;
-    }
-
-    /**
-     * Return the first entry OID registered in the table.
-     *
-     * <p>
-     * @param userData A contextual object containing user-data.
-     *        This object is allocated through the <code>
-     *        {@link com.sun.jmx.snmp.agent.SnmpUserDataFactory}</code>
-     *        for each incoming SNMP request.
-     *
-     * @return The <CODE>SnmpOid</CODE> of the first entry in the table.
-     *
-     * @exception SnmpStatusException If the table is empty.
-     */
-    protected SnmpOid getNextOid(Object userData)
-        throws SnmpStatusException {
-        if (size == 0)
-            throw noSuchInstanceException;
-        // XX return (SnmpOid) oids.firstElement();
-        return tableoids[0];
-    }
-
-    // -------------------------------------------------------------------
-    // Abstract Protected Methods
-    // -------------------------------------------------------------------
-
-    /**
-     * This method is used internally and is implemented by the
-     * <CODE>SnmpMibTable</CODE> subclasses generated by <CODE>mibgen</CODE>.
-     *
-     * <p> Return the next OID arc corresponding to a readable columnar
-     *     object in the underlying entry OBJECT-TYPE.</p>
-     *
-     * <p>
-     * @param rowOid The OID index of the row involved in the operation.
-     *
-     * @param var Id of the variable we start from, looking for the next.
-     *
-     * @param userData A contextual object containing user-data.
-     *        This object is allocated through the <code>
-     *        {@link com.sun.jmx.snmp.agent.SnmpUserDataFactory}</code>
-     *        for each incoming SNMP request.
-     *
-     * @return The next columnar object id.
-     *
-     * @exception SnmpStatusException If no id is found after the given id.
-     *
-     **/
-    abstract protected long getNextVarEntryId(SnmpOid rowOid, long var,
-                                              Object userData)
-        throws SnmpStatusException;
-
-    /**
-     * This method is used internally and is implemented by the
-     * <CODE>SnmpMibTable</CODE> subclasses generated by <CODE>mibgen</CODE>.
-     *
-     * <p>
-     * @param rowOid The OID index of the row involved in the operation.
-     *
-     * @param var The var we want to validate.
-     *
-     * @param userData A contextual object containing user-data.
-     *        This object is allocated through the <code>
-     *        {@link com.sun.jmx.snmp.agent.SnmpUserDataFactory}</code>
-     *        for each incoming SNMP request.
-     *
-     * @exception SnmpStatusException If this id is not valid.
-     *
-     */
-    abstract protected void validateVarEntryId(SnmpOid rowOid, long var,
-                                               Object userData)
-        throws SnmpStatusException;
-
-    /**
-     *
-     * This method is used internally and is implemented by the
-     * <CODE>SnmpMibTable</CODE> subclasses generated by <CODE>mibgen</CODE>.
-     *
-     * <p>
-     * @param rowOid The OID index of the row involved in the operation.
-     *
-     * @param var The OID arc.
-     *
-     * @param userData A contextual object containing user-data.
-     *        This object is allocated through the <code>
-     *        {@link com.sun.jmx.snmp.agent.SnmpUserDataFactory}</code>
-     *        for each incoming SNMP request.
-     *
-     * @exception SnmpStatusException If this id is not valid.
-     *
-     */
-    abstract protected boolean isReadableEntryId(SnmpOid rowOid, long var,
-                                                 Object userData)
-        throws SnmpStatusException;
-
-    /**
-     * This method is used internally and is implemented by the
-     * <CODE>SnmpMibTable</CODE> subclasses generated by <CODE>mibgen</CODE>.
-     */
-    abstract protected void get(SnmpMibSubRequest req,
-                                SnmpOid rowOid, int depth)
-        throws SnmpStatusException;
-
-    /**
-     * This method is used internally and is implemented by the
-     * <CODE>SnmpMibTable</CODE> subclasses generated by <CODE>mibgen</CODE>.
-     */
-    abstract protected void check(SnmpMibSubRequest req,
-                                  SnmpOid rowOid, int depth)
-        throws SnmpStatusException;
-
-    /**
-     * This method is used internally and is implemented by the
-     * <CODE>SnmpMibTable</CODE> subclasses generated by <CODE>mibgen</CODE>.
-     */
-    abstract protected void set(SnmpMibSubRequest req,
-                                SnmpOid rowOid, int depth)
-        throws SnmpStatusException;
-
-    // ----------------------------------------------------------------------
-    // PACKAGE METHODS
-    // ----------------------------------------------------------------------
-
-    /**
-     * Get the <CODE>SnmpOid</CODE> index of the row that follows the
-     * index extracted from the specified OID array.
-     * Builds the SnmpOid corresponding to the row OID and calls
-     * <code>getNextOid(oid,userData)</code>;
-     *
-     * <p>
-     * @param oid The OID array.
-     *
-     * @param pos The position in the OID array at which the index starts.
-     *
-     * @param userData A contextual object containing user-data.
-     *        This object is allocated through the <code>
-     *        {@link com.sun.jmx.snmp.agent.SnmpUserDataFactory}</code>
-     *        for each incoming SNMP request.
-     *
-     * @return The next <CODE>SnmpOid</CODE>.
-     *
-     * @exception SnmpStatusException There is no index following the
-     *     specified one in the table.
-     */
-    SnmpOid getNextOid(long[] oid, int pos, Object userData)
-        throws SnmpStatusException {
-
-        // Construct the sub-oid starting at pos.
-        // This sub-oid correspond to the oid part just after the entry
-        // variable oid.
-        //
-        final SnmpOid resOid = new SnmpEntryOid(oid,pos);
-
-        return getNextOid(resOid,userData);
-    }
-
-    // ---------------------------------------------------------------------
-    //
-    // Register an exception when checking the RowStatus variable
-    //
-    // ---------------------------------------------------------------------
-
-    final static void checkRowStatusFail(SnmpMibSubRequest req,
-                                         int errorStatus)
-        throws SnmpStatusException {
-        final SnmpVarBind statusvb  = req.getRowStatusVarBind();
-        final SnmpStatusException x = new SnmpStatusException(errorStatus);
-        req.registerCheckException(statusvb,x);
-    }
-
-    // ---------------------------------------------------------------------
-    //
-    // Register an exception when checking the RowStatus variable
-    //
-    // ---------------------------------------------------------------------
-
-    final static void setRowStatusFail(SnmpMibSubRequest req,
-                                       int errorStatus)
-        throws SnmpStatusException {
-        final SnmpVarBind statusvb  = req.getRowStatusVarBind();
-        final SnmpStatusException x = new SnmpStatusException(errorStatus);
-        req.registerSetException(statusvb,x);
-    }
-
-    // ---------------------------------------------------------------------
-    //
-    // Implements the method defined in SnmpMibNode.
-    //
-    // ---------------------------------------------------------------------
-    final synchronized void findHandlingNode(SnmpVarBind varbind,
-                                             long[] oid, int depth,
-                                             SnmpRequestTree handlers)
-        throws SnmpStatusException {
-
-        final int  length = oid.length;
-
-        if (handlers == null)
-            throw new SnmpStatusException(SnmpStatusException.snmpRspGenErr);
-
-        if (depth >= length)
-            throw new SnmpStatusException(SnmpStatusException.noAccess);
-
-        if (oid[depth] != nodeId)
-            throw new SnmpStatusException(SnmpStatusException.noAccess);
-
-        if (depth+2 >= length)
-            throw new SnmpStatusException(SnmpStatusException.noAccess);
-
-        // Checks that the oid is valid
-        // validateOid(oid,depth);
-
-        // Gets the part of the OID that identifies the entry
-        final SnmpOid entryoid = new SnmpEntryOid(oid, depth+2);
-
-        // Finds the entry: false means that the entry does not exists
-        final Object data = handlers.getUserData();
-        final boolean hasEntry = contains(entryoid, data);
-
-        // Fails if the entry is not found and the table does not
-        // not support creation.
-        // We know that the entry does not exists if (isentry == false).
-        if (!hasEntry) {
-            if (!handlers.isCreationAllowed())
-                // we're not doing a set
-                throw noSuchInstanceException;
-            else if (!isCreationEnabled())
-                // we're doing a set but creation is disabled.
-                throw new
-                    SnmpStatusException(SnmpStatusException.snmpRspNoAccess);
-        }
-
-        final long   var  = oid[depth+1];
-
-        // Validate the entry id
-        if (hasEntry) {
-            // The entry already exists - validate the id
-            validateVarEntryId(entryoid,var,data);
-        }
-
-        // Registers this node for the identified entry.
-        //
-        if (handlers.isSetRequest() && isRowStatus(entryoid,var,data))
-
-            // We only try to identify the RowStatus for SET operations
-            //
-            handlers.add(this,depth,entryoid,varbind,(!hasEntry),varbind);
-
-        else
-            handlers.add(this,depth,entryoid,varbind,(!hasEntry));
-    }
-
-
-    // ---------------------------------------------------------------------
-    //
-    // Implements the method defined in SnmpMibNode. The algorithm is very
-    // largely inspired from the original getNext() method.
-    //
-    // ---------------------------------------------------------------------
-    final synchronized long[] findNextHandlingNode(SnmpVarBind varbind,
-                                      long[] oid, int pos, int depth,
-                                      SnmpRequestTree handlers,
-                                      AcmChecker checker)
-        throws SnmpStatusException {
-            int length = oid.length;
-
-            if (handlers == null)
-            // This should be considered as a genErr, but we do not want to
-            // abort the whole request, so we're going to throw
-            // a noSuchObject...
-            //
-            throw noSuchObjectException;
-
-            final Object data = handlers.getUserData();
-            final int pduVersion = handlers.getRequestPduVersion();
-
-            long var= -1;
-
-            // If the querried oid contains less arcs than the OID of the
-            // xxxEntry object, we must return the first leaf under the
-            // first columnar object: the best way to do that is to reset
-            // the queried oid:
-            //   oid[0] = nodeId (arc of the xxxEntry object)
-            //   pos    = 0 (points to the arc of the xxxEntry object)
-            // then we just have to proceed...
-            //
-            if (pos >= length) {
-                // this will have the side effect to set
-                //    oid[pos] = nodeId
-                // and
-                //    (pos+1) = length
-                // so we won't fall into the "else if" cases below -
-                // so using "else if" rather than "if ..." is guaranteed
-                // to be safe.
-                //
-                oid = new long[1];
-                oid[0] = nodeId;
-                pos = 0;
-                length = 1;
-            } else if (oid[pos] > nodeId) {
-                // oid[pos] is expected to be the id of the xxxEntry ...
-                // The id requested is greater than the id of the xxxEntry,
-                // so we won't find the next element in this table... (any
-                // element in this table will have a smaller OID)
-                //
-                throw noSuchObjectException;
-            } else if (oid[pos] < nodeId) {
-                // we must return the first leaf under the first columnar
-                // object, so we are back to our first case where pos was
-                // out of bounds... => reset the oid to contain only the
-                // arc of the xxxEntry object.
-                //
-                oid = new long[1];
-                oid[0] = nodeId;
-                pos = 0;
-                length = 0;
-            } else if ((pos + 1) < length) {
-                // The arc at the position "pos+1" is the id of the columnar
-                // object (ie: the id of the variable in the table entry)
-                //
-                var = oid[pos+1];
-            }
-
-            // Now that we've got everything right we can begin.
-            SnmpOid entryoid = null ;
-
-            if (pos == (length - 1)) {
-                // pos points to the last arc in the oid, and this arc is
-                // guaranteed to be the xxxEntry id (we have handled all
-                // the other possibilities before)
-                //
-                // We must therefore return the first leaf below the first
-                // columnar object in the table.
-                //
-                // Get the first index. If an exception is raised,
-                // then it means that the table is empty. We thus do not
-                // have to catch the exception - we let it propagate to
-                // the caller.
-                //
-                entryoid = getNextOid(data);
-                var = getNextVarEntryId(entryoid,var,data,pduVersion);
-            } else if ( pos == (length-2)) {
-                // In that case we have (pos+1) = (length-1), so pos
-                // points to the arc of the querried variable (columnar object).
-                // Since the requested oid stops there, it means we have
-                // to return the first leaf under this columnar object.
-                //
-                // So we first get the first index:
-                // Note: if this raises an exception, this means that the table
-                // is empty, so we can let the exception propagate to the caller.
-                //
-                entryoid = getNextOid(data);
-
-                // XXX revisit: not exactly perfect:
-                //     a specific row could be empty.. But we don't know
-                //     how to make the difference! => tradeoff holes
-                //     in tables can't be properly supported (all rows
-                //     must have the same holes)
-                //
-                if (skipEntryVariable(entryoid,var,data,pduVersion)) {
-                    var = getNextVarEntryId(entryoid,var,data,pduVersion);
-                }
-            } else {
-
-                // So now there remain one last case, namely: some part of the
-                // index is provided by the oid...
-                // We build a possibly incomplete and invalid index from
-                // the OID.
-                // The piece of index provided should begin at pos+2
-                //   oid[pos]   = id of the xxxEntry object,
-                //   oid[pos+1] = id of the columnar object,
-                //   oid[pos+2] ... oid[length-1] = piece of index.
-                //
-
-                // We get the next index following the provided index.
-                // If this raises an exception, then it means that we have
-                // reached the last index in the table, and we must then
-                // try with the next columnar object.
-                //
-                // Bug fix 4269251
-                // The SnmpIndex is defined to contain a valid oid:
-                // this is not an SNMP requirement for the getNext request.
-                // So we no more use the SnmpIndex but directly the SnmpOid.
-                //
-                try {
-                    entryoid = getNextOid(oid, pos + 2, data);
-
-                    // If the variable must ne skipped, fall through...
-                    //
-                    // XXX revisit: not exactly perfect:
-                    //     a specific row could be empty.. But we don't know
-                    //     how to make the difference! => tradeoff holes
-                    //     in tables can't be properly supported (all rows
-                    //     must have the same holes)
-                    //
-                    if (skipEntryVariable(entryoid,var,data,pduVersion))
-                        throw noSuchObjectException;
-                } catch(SnmpStatusException se) {
-                    entryoid = getNextOid(data);
-                    var = getNextVarEntryId(entryoid,var,data,pduVersion);
-                }
-            }
-
-            return findNextAccessibleOid(entryoid,
-                                         varbind,
-                                         oid,
-                                         depth,
-                                         handlers,
-                                         checker,
-                                         data,
-                                         var);
-        }
-
-    private long[] findNextAccessibleOid(SnmpOid entryoid,
-                                         SnmpVarBind varbind,long[] oid,
-                                         int depth, SnmpRequestTree handlers,
-                                         AcmChecker checker, Object data,
-                                         long var)
-        throws SnmpStatusException {
-        final int pduVersion = handlers.getRequestPduVersion();
-
-        // Loop on each var (column)
-        while(true) {
-            // This should not happen. If it happens, (bug, or customized
-            // methods returning garbage instead of raising an exception),
-            // it probably means that there is nothing to return anyway.
-            // So we throw the exception.
-            // => will skip to next node in the MIB tree.
-            //
-            if (entryoid == null || var == -1 ) throw noSuchObjectException;
-
-
-            // So here we know both the row (entryoid) and the column (var)
-            //
-
-            try {
-                // Raising an exception here will make the catch() clause
-                // switch to the next variable. If `var' is not readable
-                // for this specific entry, it is not readable for any
-                // other entry => skip to next column.
-                //
-                if (!isReadableEntryId(entryoid,var,data))
-                    throw noSuchObjectException;
-
-                // Prepare the result and the ACM checker.
-                //
-                final long[] etable  = entryoid.longValue(false);
-                final int    elength = etable.length;
-                final long[] result  = new long[depth + 2 + elength];
-                result[0] = -1 ; // Bug detector!
-
-                // Copy the entryOid at the end of `result'
-                //
-                java.lang.System.arraycopy(etable, 0, result,
-                                           depth+2, elength);
-
-                // Set the node Id and var Id in result.
-                //
-                result[depth] = nodeId;
-                result[depth+1] = var;
-
-                // Append nodeId.varId.<rowOid> to ACM checker.
-                //
-                checker.add(depth,result,depth,elength+2);
-
-                // No we're going to ACM check our OID.
-                try {
-                    checker.checkCurrentOid();
-
-                    // No exception thrown by checker => this is all OK!
-                    // we have it: register the handler and return the
-                    // result.
-                    //
-                    handlers.add(this,depth,entryoid,varbind,false);
-                    return result;
-                } catch(SnmpStatusException e) {
-                    // Skip to the next entry. If an exception is
-                    // thrown, will be catch by enclosing catch
-                    // and a skip is done to the next var.
-                    //
-                    entryoid = getNextOid(entryoid, data);
-                } finally {
-                    // Clean the checker.
-                    //
-                    checker.remove(depth,elength+2);
-                }
-            } catch(SnmpStatusException e) {
-                // Catching an exception here means we have to skip to the
-                // next column.
-                //
-                // Back to the first row.
-                entryoid = getNextOid(data);
-
-                // Find out the next column.
-                //
-                var = getNextVarEntryId(entryoid,var,data,pduVersion);
-
-            }
-
-            // This should not happen. If it happens, (bug, or customized
-            // methods returning garbage instead of raising an exception),
-            // it probably means that there is nothing to return anyway.
-            // No need to continue, we throw an exception.
-            // => will skip to next node in the MIB tree.
-            //
-            if (entryoid == null || var == -1 )
-                throw noSuchObjectException;
-        }
-    }
-
-
-    /**
-     * Validate the specified OID.
-     *
-     * <p>
-     * @param oid The OID array.
-     *
-     * @param pos The position in the array.
-     *
-     * @exception SnmpStatusException If the validation fails.
-     */
-    final void validateOid(long[] oid, int pos) throws SnmpStatusException {
-        final int length= oid.length;
-
-        // Control the length of the oid
-        //
-        if (pos +2 >= length)
-            throw noSuchInstanceException;
-
-        // Check that the entry identifier is specified
-        //
-        if (oid[pos] != nodeId)
-            throw noSuchObjectException;
-
-    }
-
-    // ----------------------------------------------------------------------
-    // PRIVATE METHODS
-    // ----------------------------------------------------------------------
-
-    /**
-     * Enable this <CODE>SnmpMibTable</CODE> to send a notification.
-     *
-     * <p>
-     * @param notification The notification to send.
-     */
-    private synchronized void sendNotification(Notification notification) {
-
-        // loop on listener
-        //
-        for(java.util.Enumeration k = handbackTable.keys();
-            k.hasMoreElements(); ) {
-
-            NotificationListener listener =
-                (NotificationListener) k.nextElement();
-
-            // Get the associated handback list and the associated filter list
-            //
-            java.util.Vector handbackList =
-                (java.util.Vector) handbackTable.get(listener) ;
-            java.util.Vector filterList =
-                (java.util.Vector) filterTable.get(listener) ;
-
-            // loop on handback
-            //
-            java.util.Enumeration f = filterList.elements();
-            for(java.util.Enumeration h = handbackList.elements();
-                h.hasMoreElements(); ) {
-
-                Object handback = h.nextElement();
-                NotificationFilter filter =
-                    (NotificationFilter)f.nextElement();
-
-                if ((filter == null) ||
-                     (filter.isNotificationEnabled(notification))) {
-
-                    listener.handleNotification(notification,handback) ;
-                }
-            }
-        }
-    }
-
-    /**
-     * This method is used by the SnmpMibTable to create and send a table
-     * entry notification to all the listeners registered for this kind of
-     * notification.
-     *
-     * <p>
-     * @param type The notification type.
-     *
-     * @param timeStamp The notification emission date.
-     *
-     * @param entry The entry object.
-     */
-    private void sendNotification(String type, long timeStamp,
-                                  Object entry, ObjectName name) {
-
-        synchronized(this) {
-            sequenceNumber = sequenceNumber + 1;
-        }
-
-        SnmpTableEntryNotification notif =
-            new SnmpTableEntryNotification(type, this, sequenceNumber,
-                                           timeStamp, entry, name);
-
-        this.sendNotification(notif) ;
-    }
-
-    /**
-     * Return true if the entry identified by the given OID index
-     * is contained in this table.
-     * <p>
-     * <b>Do not call this method directly</b>.
-     * <p>
-     * This method is provided has a hook for subclasses.
-     * It is called when a get/set request is received in order to
-     * determine whether the specified entry is contained in the table.
-     * You may want to override this method if you need to perform e.g.
-     * lazy evaluation of tables (you need to update the table when a
-     * request is received) or if your table is virtual.
-     * <p>
-     * Note that this method is called by the Runtime from within a
-     * synchronized block.
-     *
-     * @param oid The index part of the OID we're looking for.
-     * @param userData A contextual object containing user-data.
-     *        This object is allocated through the <code>
-     *        {@link com.sun.jmx.snmp.agent.SnmpUserDataFactory}</code>
-     *        for each incoming SNMP request.
-     *
-     * @return <code>true</code> if the entry is found, <code>false</code>
-     *         otherwise.
-     *
-     * @since 1.5
-     **/
-    protected boolean contains(SnmpOid oid, Object userData) {
-        return (findObject(oid) > -1);
-    }
-
-    /**
-     * Look for the given oid in the OID table (tableoids) and returns
-     * its position.
-     *
-     * <p>
-     * @param oid The OID we're looking for.
-     *
-     * @return The position of the OID in the table. -1 if the given
-     *         OID was not found.
-     *
-     **/
-    private final int findObject(SnmpOid oid) {
-        int low= 0;
-        int max= size - 1;
-        SnmpOid pos;
-        int comp;
-        int curr= low + (max-low)/2;
-        //System.out.println("Try to retrieve: " + oid.toString());
-        while (low <= max) {
-
-            // XX pos = (SnmpOid) oids.elementAt(curr);
-            pos = tableoids[curr];
-
-            //System.out.println("Compare with" + pos.toString());
-            // never know ...we might find something ...
-            //
-            comp = oid.compareTo(pos);
-            if (comp == 0)
-                return curr;
-
-            if (oid.equals(pos) == true) {
-                return curr;
-            }
-            if (comp > 0) {
-                low = curr + 1;
-            } else {
-                max = curr - 1;
-            }
-            curr = low + (max-low)/2;
-        }
-        return -1;
-    }
-
-    /**
-     * Search the position at which the given oid should be inserted
-     * in the OID table (tableoids).
-     *
-     * <p>
-     * @param oid The OID we would like to insert.
-     *
-     * @return The position at which the OID should be inserted in
-     *         the table.
-     *
-     * @exception SnmpStatusException if the OID is already present in the
-     *            table.
-     *
-     **/
-    private final int getInsertionPoint(SnmpOid oid)
-        throws SnmpStatusException {
-        return getInsertionPoint(oid, true);
-    }
-
-    /**
-     * Search the position at which the given oid should be inserted
-     * in the OID table (tableoids).
-     *
-     * <p>
-     * @param oid The OID we would like to insert.
-     *
-     * @param fail Tells whether a SnmpStatusException must be generated
-     *             if the given OID is already present in the table.
-     *
-     * @return The position at which the OID should be inserted in
-     *         the table. When the OID is found, it returns the next
-     *         position. Note that it is not valid to insert twice the
-     *         same OID. This feature is only an optimization to improve
-     *         the getNextOid() behaviour.
-     *
-     * @exception SnmpStatusException if the OID is already present in the
-     *            table and <code>fail</code> is <code>true</code>.
-     *
-     **/
-    private final int getInsertionPoint(SnmpOid oid, boolean fail)
-        throws SnmpStatusException {
-
-        final int failStatus = SnmpStatusException.snmpRspNotWritable;
-        int low= 0;
-        int max= size - 1;
-        SnmpOid pos;
-        int comp;
-        int curr= low + (max-low)/2;
-        while (low <= max) {
-
-            // XX pos= (SnmpOid) oids.elementAt(curr);
-            pos= tableoids[curr];
-
-            // never know ...we might find something ...
-            //
-            comp= oid.compareTo(pos);
-
-            if (comp == 0) {
-                if (fail)
-                    throw new SnmpStatusException(failStatus,curr);
-                else
-                    return curr+1;
-            }
-
-            if (comp>0) {
-                low= curr +1;
-            } else {
-                max= curr -1;
-            }
-            curr= low + (max-low)/2;
-        }
-        return curr;
-    }
-
-    /**
-     * Remove the OID located at the given position.
-     *
-     * <p>
-     * @param pos The position at which the OID to be removed is located.
-     *
-     **/
-    private final void removeOid(int pos) {
-        if (pos >= tablecount) return;
-        if (pos < 0) return;
-        final int l1 = --tablecount-pos;
-        tableoids[pos] = null;
-        if (l1 > 0)
-            java.lang.System.arraycopy(tableoids,pos+1,tableoids,pos,l1);
-        tableoids[tablecount] = null;
-    }
-
-    /**
-     * Insert an OID at the given position.
-     *
-     * <p>
-     * @param oid The OID to be inserted in the table
-     * @param pos The position at which the OID to be added is located.
-     *
-     **/
-    private final void insertOid(int pos, SnmpOid oid) {
-        if (pos >= tablesize || tablecount == tablesize) {
-                // Vector must be enlarged
-
-                // Save old vector
-                final SnmpOid[] olde = tableoids;
-
-                // Allocate larger vectors
-                tablesize += Delta;
-                tableoids = new SnmpOid[tablesize];
-
-                // Check pos validity
-                if (pos > tablecount) pos = tablecount;
-                if (pos < 0) pos = 0;
-
-                final int l1 = pos;
-                final int l2 = tablecount - pos;
-
-                // Copy original vector up to `pos'
-                if (l1 > 0)
-                    java.lang.System.arraycopy(olde,0,tableoids,0,l1);
-
-                // Copy original vector from `pos' to end, leaving
-                // an empty room at `pos' in the new vector.
-                if (l2 > 0)
-                    java.lang.System.arraycopy(olde,l1,tableoids,
-                                               l1+1,l2);
-
-            } else if (pos < tablecount) {
-                // Vector is large enough to accomodate one additional
-                // entry.
-                //
-                // Shift vector, making an empty room at `pos'
-
-                java.lang.System.arraycopy(tableoids,pos,tableoids,
-                                           pos+1,tablecount-pos);
-            }
-
-            // Fill the gap at `pos'
-            tableoids[pos]  = oid;
-            tablecount++;
-    }
-
-
-    // ----------------------------------------------------------------------
-    // PROTECTED VARIABLES
-    // ----------------------------------------------------------------------
-
-    /**
-     * The id of the contained entry object.
-     * @serial
-     */
-    protected int nodeId=1;
-
-    /**
-     * The MIB to which the metadata is linked.
-     * @serial
-     */
-    protected SnmpMib theMib;
-
-    /**
-     * <CODE>true</CODE> if remote creation of entries via SET operations
-     * is enabled.
-     * [default value is <CODE>false</CODE>]
-     * @serial
-     */
-    protected boolean creationEnabled = false;
-
-    /**
-     * The entry factory
-     */
-    protected SnmpTableEntryFactory factory = null;
-
-    // ----------------------------------------------------------------------
-    // PRIVATE VARIABLES
-    // ----------------------------------------------------------------------
-
-    /**
-     * The number of elements in the table.
-     * @serial
-     */
-    private int size=0;
-
-    /**
-     * The list of indexes.
-     * @serial
-     */
-    //    private Vector indexes= new Vector();
-
-    /**
-     * The list of OIDs.
-     * @serial
-     */
-    // private Vector oids= new Vector();
-    private final static int Delta = 16;
-    private int     tablecount     = 0;
-    private int     tablesize      = Delta;
-    private SnmpOid tableoids[]    = new SnmpOid[tablesize];
-
-    /**
-     * The list of entries.
-     * @serial
-     */
-    private final Vector<Object> entries= new Vector<Object>();
-
-    /**
-     * The list of object names.
-     * @serial
-     */
-    private final Vector<ObjectName> entrynames= new Vector<ObjectName>();
-
-    /**
-     * Callback handlers
-     */
-    // final Vector callbacks = new Vector();
-
-    /**
-     * Listener hastable containing the hand-back objects.
-     */
-    private Hashtable<NotificationListener, Vector<Object>> handbackTable =
-            new Hashtable<NotificationListener, Vector<Object>>();
-
-    /**
-     * Listener hastable containing the filter objects.
-     */
-    private Hashtable<NotificationListener, Vector<NotificationFilter>>
-            filterTable =
-            new Hashtable<NotificationListener, Vector<NotificationFilter>>();
-
-    // PACKAGE VARIABLES
-    //------------------
-    /**
-     * SNMP table sequence number.
-     * The default value is set to 0.
-     */
-    transient long sequenceNumber = 0;
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/agent/SnmpRequestTree.java b/ojluni/src/main/java/com/sun/jmx/snmp/agent/SnmpRequestTree.java
deleted file mode 100755
index c401a73..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/agent/SnmpRequestTree.java
+++ /dev/null
@@ -1,1071 +0,0 @@
-/*
- * Copyright (c) 2000, 2006, 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.jmx.snmp.agent;
-
-import java.util.Vector;
-import java.util.ArrayList;
-import java.util.Hashtable;
-import java.util.Enumeration;
-import java.util.Iterator;
-import java.util.List;
-import java.util.NoSuchElementException;
-import java.util.Arrays;
-import java.util.logging.Level;
-
-import static com.sun.jmx.defaults.JmxProperties.SNMP_ADAPTOR_LOGGER;
-import com.sun.jmx.snmp.SnmpVarBind;
-import com.sun.jmx.snmp.SnmpStatusException;
-import com.sun.jmx.snmp.SnmpDefinitions;
-import com.sun.jmx.snmp.SnmpOid;
-import com.sun.jmx.snmp.SnmpPdu;
-import com.sun.jmx.snmp.SnmpEngine;
-
-//  XXX: things to do: use SnmpOid rather than `instance' for future
-//       evolutions.
-//  XXX: Maybe use hashlists rather than vectors for entries?
-//       => in that case, the key should be SnmpOid.toString()
-//
-/**
- * This class is used to register varbinds from a SNMP varbind list with
- * the SnmpMibNode responsible for handling the requests concerning that
- * varbind.
- * This class holds a hashtable of Handler nodes, whith the involved
- * SnmpMibNode as a key.
- * When the involved SnmpMibNode is a group, the sublist of varbind is
- * directly stored in the Handler node.
- * When the involved SnmpMibNode is a table, the sublist is stored in a
- * sorted array indexed by the OID of the entry involved.
- */
-final class SnmpRequestTree {
-
-    // Constructor:
-    // @param  req The SnmpMibRequest that will be segmented in this
-    //         tree. It holds the original varbind vector passed
-    //         by the SnmpSubRequestHandler to this MIB. This
-    //         varbind vector is used to retrieve the "real"
-    //         position of a varbind in the vector. There is no other easy
-    //         way to do this - since as a result of the segmentation the
-    //         original positions will be lost.
-    // @param  creationflag indicates whether the operation involved
-    //         allows for entry creation (ie: it is a SET request).
-    // @param  pdutype indicates the type of the request PDU as defined
-    //         in SnmpDefinitions
-    //
-    SnmpRequestTree(SnmpMibRequest req, boolean creationflag, int pdutype) {
-        this.request = req;
-        this.version  = req.getVersion();
-        this.creationflag = creationflag;
-        this.hashtable = new Hashtable<Object, Handler>();
-        setPduType(pdutype);
-    }
-
-    public static int mapSetException(int errorStatus, int version)
-        throws SnmpStatusException {
-
-        final int errorCode = errorStatus;
-
-        if (version == SnmpDefinitions.snmpVersionOne)
-            return errorCode;
-
-        int mappedErrorCode = errorCode;
-
-        // Now take care of V2 errorCodes that can be stored
-        // in the varbind itself:
-        if (errorCode == SnmpStatusException.noSuchObject)
-            // noSuchObject => notWritable
-            mappedErrorCode = SnmpStatusException.snmpRspNotWritable;
-
-        else if (errorCode == SnmpStatusException.noSuchInstance)
-            // noSuchInstance => notWritable
-            mappedErrorCode = SnmpStatusException.snmpRspNotWritable;
-
-        return mappedErrorCode;
-    }
-
-    public static int mapGetException(int errorStatus, int version)
-        throws SnmpStatusException {
-
-        final int errorCode = errorStatus;
-        if (version == SnmpDefinitions.snmpVersionOne)
-            return errorCode;
-
-        int mappedErrorCode = errorCode;
-
-        // Now take care of V2 errorCodes that can be stored
-        // in the varbind itself:
-        if (errorCode ==
-            SnmpStatusException.noSuchObject)
-            // noSuchObject => noSuchObject
-            mappedErrorCode = errorCode;
-
-        else if (errorCode ==
-                 SnmpStatusException.noSuchInstance)
-            // noSuchInstance => noSuchInstance
-            mappedErrorCode = errorCode;
-
-        // Now we're going to try to transform every other
-        // global code in either noSuchInstance or noSuchObject,
-        // so that the get can return a partial result.
-        //
-        // Only noSuchInstance or noSuchObject can be stored
-        // in the varbind itself.
-        //
-
-        // According to RFC 1905: noAccess is emitted when the
-        // the access is denied because it is not in the MIB view...
-        //
-        else if (errorCode ==
-                 SnmpStatusException.noAccess)
-            // noAccess => noSuchInstance
-            mappedErrorCode = SnmpStatusException.noSuchInstance;
-
-        // According to RFC 1905: (my interpretation because it is not
-        // really clear) The specified variable name exists - but the
-        // variable does not exists and cannot be created under the
-        // present circumstances (probably because the request specifies
-        // another variable/value which is incompatible, or because the
-        // value of some other variable in the MIB prevents the creation)
-        //
-        // Note that this error should never be raised in a GET context
-        // but who knows?
-        //
-        else if (errorCode == SnmpStatusException.snmpRspInconsistentName)
-            // inconsistentName => noSuchInstance
-            mappedErrorCode = SnmpStatusException.noSuchInstance;
-
-        // All the errors comprised between snmpRspWrongType and
-        // snmpRspInconsistentValue concern values: so we're going
-        // to assume the OID was correct, and reply with noSuchInstance.
-        //
-        // Note that this error should never be raised in a GET context
-        // but who knows?
-        //
-        else if ((errorCode >= SnmpStatusException.snmpRspWrongType) &&
-                 (errorCode <= SnmpStatusException.snmpRspInconsistentValue))
-            mappedErrorCode = SnmpStatusException.noSuchInstance;
-
-        // We're going to assume the OID was correct, and reply
-        // with noSuchInstance.
-        //
-        else if (errorCode == SnmpStatusException.readOnly)
-            mappedErrorCode = SnmpStatusException.noSuchInstance;
-
-        // For all other errors but genErr, we're going to reply with
-        // noSuchObject
-        //
-        else if (errorCode != SnmpStatusException.snmpRspAuthorizationError &&
-                 errorCode != SnmpStatusException.snmpRspGenErr)
-            mappedErrorCode = SnmpStatusException.noSuchObject;
-
-        // Only genErr will abort the GET and be returned as global
-        // error.
-        //
-        return mappedErrorCode;
-
-    }
-
-    //-------------------------------------------------------------------
-    // This class is a package implementation of the enumeration of
-    // SnmSubRequest associated with an Handler node.
-    //-------------------------------------------------------------------
-
-    static final class Enum implements Enumeration {
-        Enum(SnmpRequestTree hlist,Handler h) {
-            handler = h;
-            this.hlist = hlist;
-            size = h.getSubReqCount();
-        }
-        private final Handler handler;
-        private final SnmpRequestTree hlist;
-        private int   entry = 0;
-        private int   iter  = 0;
-        private int   size  = 0;
-
-        public boolean hasMoreElements() {
-            return iter < size;
-        }
-
-        public Object nextElement() throws NoSuchElementException  {
-            if (iter == 0) {
-                if (handler.sublist != null) {
-                    iter++;
-                    return hlist.getSubRequest(handler);
-                }
-            }
-            iter ++;
-            if (iter > size) throw new NoSuchElementException();
-            Object result = hlist.getSubRequest(handler,entry);
-            entry++;
-            return result;
-        }
-    }
-
-    //-------------------------------------------------------------------
-    // This class is a package implementation of the SnmpMibSubRequest
-    // interface. It can only be instantiated by SnmpRequestTree.
-    //-------------------------------------------------------------------
-
-    static final class SnmpMibSubRequestImpl implements SnmpMibSubRequest {
-        SnmpMibSubRequestImpl(SnmpMibRequest global, Vector<SnmpVarBind> sublist,
-                           SnmpOid entryoid, boolean isnew,
-                           boolean getnextflag, SnmpVarBind rs) {
-            this.global = global;
-            varbinds           = sublist;
-            this.version       = global.getVersion();
-            this.entryoid      = entryoid;
-            this.isnew         = isnew;
-            this.getnextflag   = getnextflag;
-            this.statusvb      = rs;
-        }
-
-        final private Vector<SnmpVarBind> varbinds;
-        final private SnmpMibRequest global;
-        final private int            version;
-        final private boolean        isnew;
-        final private SnmpOid        entryoid;
-        final private boolean        getnextflag;
-        final private SnmpVarBind    statusvb;
-
-        // -------------------------------------------------------------
-        // Implements the method defined in SnmpMibRequest interface.
-        // See SnmpMibRequest for the java doc.
-        // -------------------------------------------------------------
-        public Enumeration getElements() {
-            return varbinds.elements();
-        }
-
-        // -------------------------------------------------------------
-        // Implements the method defined in SnmpMibRequest interface.
-        // See SnmpMibRequest for the java doc.
-        // -------------------------------------------------------------
-        public Vector<SnmpVarBind> getSubList() {
-            return varbinds;
-        }
-
-        // -------------------------------------------------------------
-        // Implements the method defined in SnmpMibRequest interface.
-        // See SnmpMibRequest for the java doc.
-        // -------------------------------------------------------------
-        public final int getSize()  {
-            if (varbinds == null) return 0;
-            return varbinds.size();
-        }
-
-        // -------------------------------------------------------------
-        // Implements the method defined in SnmpMibRequest interface.
-        // See SnmpMibRequest for the java doc.
-        // -------------------------------------------------------------
-        public void addVarBind(SnmpVarBind varbind) {
-            // XXX not sure we must also add the varbind in the global
-            //     request? or whether we should raise an exception:
-            //     in principle, this method should not be called!
-            varbinds.addElement(varbind);
-            global.addVarBind(varbind);
-        }
-
-        // -------------------------------------------------------------
-        // Implements the method defined in SnmpMibSubRequest interface.
-        // See SnmpMibSubRequest for the java doc.
-        // -------------------------------------------------------------
-        public boolean isNewEntry() {
-            return isnew;
-        }
-
-        // -------------------------------------------------------------
-        // Implements the method defined in SnmpMibSubRequest interface.
-        // See SnmpMibSubRequest for the java doc.
-        // -------------------------------------------------------------
-        public SnmpOid getEntryOid() {
-            return entryoid;
-        }
-
-        // -------------------------------------------------------------
-        // Implements the method defined in SnmpMibRequest interface.
-        // See SnmpMibRequest for the java doc.
-        // -------------------------------------------------------------
-        public int getVarIndex(SnmpVarBind varbind) {
-            if (varbind == null) return 0;
-            return global.getVarIndex(varbind);
-        }
-
-        // -------------------------------------------------------------
-        // Implements the method defined in SnmpMibRequest interface.
-        // See SnmpMibRequest for the java doc.
-        // -------------------------------------------------------------
-        public Object getUserData() { return global.getUserData(); }
-
-
-        // -------------------------------------------------------------
-        // Implements the method defined in SnmpMibSubRequest interface.
-        // See SnmpMibSubRequest for the java doc.
-        // -------------------------------------------------------------
-
-        public void registerGetException(SnmpVarBind var,
-                                         SnmpStatusException exception)
-            throws SnmpStatusException {
-            // The index in the exception must correspond to
-            // the SNMP index ...
-            //
-            if (version == SnmpDefinitions.snmpVersionOne)
-                throw new SnmpStatusException(exception, getVarIndex(var)+1);
-
-            if (var == null)
-                throw exception;
-
-            // If we're doing a getnext ==> endOfMibView
-            if (getnextflag) {
-                var.value = SnmpVarBind.endOfMibView;
-                return;
-            }
-
-            final int errorCode = mapGetException(exception.getStatus(),
-                                                  version);
-
-            // Now take care of V2 errorCodes that can be stored
-            // in the varbind itself:
-            if (errorCode ==
-                SnmpStatusException.noSuchObject)
-                // noSuchObject => noSuchObject
-                var.value= SnmpVarBind.noSuchObject;
-
-            else if (errorCode ==
-                     SnmpStatusException.noSuchInstance)
-                // noSuchInstance => noSuchInstance
-                var.value= SnmpVarBind.noSuchInstance;
-
-            else
-                throw new SnmpStatusException(errorCode, getVarIndex(var)+1);
-
-        }
-
-        // -------------------------------------------------------------
-        // Implements the method defined in SnmpMibSubRequest interface.
-        // See SnmpMibSubRequest for the java doc.
-        // -------------------------------------------------------------
-        public void registerSetException(SnmpVarBind var,
-                                         SnmpStatusException exception)
-            throws SnmpStatusException {
-            // The index in the exception must correspond to
-            // the SNMP index ...
-            //
-            if (version == SnmpDefinitions.snmpVersionOne)
-                throw new SnmpStatusException(exception, getVarIndex(var)+1);
-
-            // Although the first pass of check() did not fail,
-            // the set() phase could not be carried out correctly.
-            // Since we don't know how to make an "undo", and some
-            // assignation may already have been performed, we're going
-            // to throw an snmpRspUndoFailed.
-            //
-            throw new SnmpStatusException(SnmpDefinitions.snmpRspUndoFailed,
-                                          getVarIndex(var)+1);
-        }
-
-        // -------------------------------------------------------------
-        // Implements the method defined in SnmpMibSubRequest interface.
-        // See SnmpMibSubRequest for the java doc.
-        // -------------------------------------------------------------
-        public void registerCheckException(SnmpVarBind var,
-                                           SnmpStatusException exception)
-            throws SnmpStatusException {
-            // The index in the exception must correspond to
-            // the SNMP index ...
-            //
-            // We throw the exception in order to abort the SET operation
-            // in an atomic way.
-            final int errorCode = exception.getStatus();
-            final int mappedErrorCode = mapSetException(errorCode,
-                                                        version);
-
-            if (errorCode != mappedErrorCode)
-                throw new
-                    SnmpStatusException(mappedErrorCode, getVarIndex(var)+1);
-            else
-                throw new SnmpStatusException(exception, getVarIndex(var)+1);
-        }
-
-        // -------------------------------------------------------------
-        // Implements the method defined in SnmpMibRequest interface.
-        // See SnmpMibRequest for the java doc.
-        // -------------------------------------------------------------
-        public int getVersion() {
-            return version;
-        }
-
-        public SnmpVarBind getRowStatusVarBind() {
-            return statusvb;
-        }
-
-        public SnmpPdu getPdu() {
-            return global.getPdu();
-        }
-
-        public int getRequestPduVersion() {
-            return global.getRequestPduVersion();
-        }
-
-        public SnmpEngine getEngine() {
-            return global.getEngine();
-        }
-
-        public String getPrincipal() {
-            return global.getPrincipal();
-        }
-
-        public int getSecurityLevel() {
-            return global.getSecurityLevel();
-        }
-
-        public int getSecurityModel() {
-            return global.getSecurityModel();
-        }
-
-        public byte[] getContextName() {
-            return global.getContextName();
-        }
-
-        public byte[] getAccessContextName() {
-            return global.getAccessContextName();
-        }
-    }
-
-    //-------------------------------------------------------------------
-    // This class implements a node in the SnmpRequestTree.
-    // It stores:
-    //    o The SnmpMibNode involved (key)
-    //    o The sublist of varbind directly handled by this node
-    //    o A vector of sublists concerning the entries (existing or not)
-    //      of the SnmpMIbNode (when it is a table).
-    //-------------------------------------------------------------------
-
-    static final class Handler {
-        SnmpMibNode meta;       // The meta  which handles the sublist.
-        int         depth;      // The depth of the meta node.
-        Vector<SnmpVarBind> sublist; // The sublist of varbinds to be handled.
-        // List        entryoids;  // Sorted array of entry oids
-        // List        entrylists; // Sorted array of entry lists
-        // List        isentrynew; // Sorted array of booleans
-        SnmpOid[]     entryoids  = null; // Sorted array of entry oids
-        Vector<SnmpVarBind>[] entrylists = null; // Sorted array of entry lists
-        boolean[]     isentrynew = null; // Sorted array of booleans
-        SnmpVarBind[] rowstatus  = null; // RowStatus varbind, if any
-        int entrycount = 0;
-        int entrysize  = 0;
-
-        final int type; // request PDU type as defined in SnmpDefinitions
-        final private static int Delta = 10;
-
-        public Handler(int pduType) {
-            this.type = pduType;
-        }
-
-        /**
-         * Adds a varbind in this node sublist.
-         */
-        public void addVarbind(SnmpVarBind varbind) {
-            if (sublist == null) sublist = new Vector<SnmpVarBind>();
-            sublist.addElement(varbind);
-        }
-
-        /**
-         * register an entry for the given oid at the given position with
-         * the given sublist.
-         */
-        @SuppressWarnings("unchecked")
-        // We need this because of new Vector[n] instead of
-        // new Vector<SnmpVarBind>[n], which is illegal.
-        void add(int pos,SnmpOid oid, Vector<SnmpVarBind> v, boolean isnew,
-                 SnmpVarBind statusvb) {
-
-            if (entryoids == null) {
-                // Vectors are null: Allocate new vectors
-
-                entryoids  = new SnmpOid[Delta];
-                entrylists = new Vector[Delta];
-                isentrynew = new boolean[Delta];
-                rowstatus  = new SnmpVarBind[Delta];
-                entrysize  = Delta;
-                pos = 0;
-
-            } else if (pos >= entrysize || entrycount == entrysize) {
-                // Vectors must be enlarged
-
-                // Save old vectors
-                SnmpOid[]     olde = entryoids;
-                Vector[]      oldl = entrylists;
-                boolean[]     oldn = isentrynew;
-                SnmpVarBind[] oldr = rowstatus;
-
-                // Allocate larger vectors
-                entrysize += Delta;
-                entryoids =  new SnmpOid[entrysize];
-                entrylists = new Vector[entrysize];
-                isentrynew = new boolean[entrysize];
-                rowstatus  = new SnmpVarBind[entrysize];
-
-                // Check pos validity
-                if (pos > entrycount) pos = entrycount;
-                if (pos < 0) pos = 0;
-
-                final int l1 = pos;
-                final int l2 = entrycount - pos;
-
-                // Copy original vectors up to `pos'
-                if (l1 > 0) {
-                    java.lang.System.arraycopy(olde,0,entryoids,
-                                               0,l1);
-                    java.lang.System.arraycopy(oldl,0,entrylists,
-                                               0,l1);
-                    java.lang.System.arraycopy(oldn,0,isentrynew,
-                                               0,l1);
-                    java.lang.System.arraycopy(oldr,0,rowstatus,
-                                               0,l1);
-                }
-
-                // Copy original vectors from `pos' to end, leaving
-                // an empty room at `pos' in the new vectors.
-                if (l2 > 0) {
-                    final int l3 = l1+1;
-                    java.lang.System.arraycopy(olde,l1,entryoids,
-                                               l3,l2);
-                    java.lang.System.arraycopy(oldl,l1,entrylists,
-                                               l3,l2);
-                    java.lang.System.arraycopy(oldn,l1,isentrynew,
-                                               l3,l2);
-                    java.lang.System.arraycopy(oldr,l1,rowstatus,
-                                               l3,l2);
-                }
-
-
-            } else if (pos < entrycount) {
-                // Vectors are large enough to accomodate one additional
-                // entry.
-                //
-                // Shift vectors, making an empty room at `pos'
-                final int l1 = pos+1;
-                final int l2 = entrycount - pos;
-
-                java.lang.System.arraycopy(entryoids,pos,entryoids,
-                                           l1,l2);
-                java.lang.System.arraycopy(entrylists,pos,entrylists,
-                                           l1,l2);
-                java.lang.System.arraycopy(isentrynew,pos,isentrynew,
-                                           l1,l2);
-                java.lang.System.arraycopy(rowstatus,pos,rowstatus,
-                                           l1,l2);
-            }
-
-            // Fill the gap at `pos'
-            entryoids[pos]  = oid;
-            entrylists[pos] = v;
-            isentrynew[pos] = isnew;
-            rowstatus[pos]  = statusvb;
-            entrycount++;
-        }
-
-        public void addVarbind(SnmpVarBind varbind, SnmpOid entryoid,
-                               boolean isnew, SnmpVarBind statusvb)
-            throws SnmpStatusException {
-            Vector<SnmpVarBind> v = null;
-            SnmpVarBind rs = statusvb;
-
-            if (entryoids == null) {
-//              entryoids = new ArrayList();
-//              entrylists = new ArrayList();
-//              isentrynew = new ArrayList();
-                v = new Vector<SnmpVarBind>();
-//              entryoids.add(entryoid);
-//              entrylists.add(v);
-//              isentrynew.add(new Boolean(isnew));
-                add(0,entryoid,v,isnew,rs);
-            } else {
-                // int pos = findOid(entryoids,entryoid);
-                // int pos = findOid(entryoids,entrycount,entryoid);
-                final int pos =
-                    getInsertionPoint(entryoids,entrycount,entryoid);
-                if (pos > -1 && pos < entrycount &&
-                    entryoid.compareTo(entryoids[pos]) == 0) {
-                    v  = entrylists[pos];
-                    rs = rowstatus[pos];
-                } else {
-                    // if (pos == -1 || pos >= entryoids.size() ) {
-                    // if (pos == -1 || pos >= entrycount ) {
-                    // pos = getInsertionPoint(entryoids,entryoid);
-                    // pos = getInsertionPoint(entryoids,entrycount,entryoid);
-                    v = new Vector<SnmpVarBind>();
-//                  entryoids.add(pos,entryoid);
-//                  entrylists.add(pos,v);
-//                  isentrynew.add(pos,new Boolean(isnew));
-                    add(pos,entryoid,v,isnew,rs);
-                }
-//              } else v = (Vector) entrylists.get(pos);
-                    // } else v = entrylists[pos];
-                if (statusvb != null) {
-                    if ((rs != null) && (rs != statusvb) &&
-                        ((type == SnmpDefinitions.pduWalkRequest) ||
-                         (type == SnmpDefinitions.pduSetRequestPdu))) {
-                        throw new SnmpStatusException(
-                              SnmpStatusException.snmpRspInconsistentValue);
-                    }
-                    rowstatus[pos] = statusvb;
-                }
-            }
-
-            // We do not include the status variable in the varbind,
-            // because we're going to set it separately...
-            //
-            if (statusvb != varbind)
-                v.addElement(varbind);
-        }
-
-        public int getSubReqCount() {
-            int count = 0;
-            if (sublist != null) count++;
-//          if (entryoids != null) count += entryoids.size();
-            if (entryoids != null) count += entrycount;
-            return count;
-        }
-
-        public Vector<SnmpVarBind> getSubList() {
-            return sublist;
-        }
-
-        public int getEntryPos(SnmpOid entryoid) {
-            // return findOid(entryoids,entryoid);
-            return findOid(entryoids,entrycount,entryoid);
-        }
-
-        public SnmpOid getEntryOid(int pos) {
-            if (entryoids == null) return null;
-            // if (pos == -1 || pos >= entryoids.size() ) return null;
-            if (pos == -1 || pos >= entrycount ) return null;
-            // return (SnmpOid) entryoids.get(pos);
-            return entryoids[pos];
-        }
-
-        public boolean isNewEntry(int pos) {
-            if (entryoids == null) return false;
-            // if (pos == -1 || pos >= entryoids.size() ) return false;
-            if (pos == -1 || pos >= entrycount ) return false;
-            // return ((Boolean)isentrynew.get(pos)).booleanValue();
-            return isentrynew[pos];
-        }
-
-        public SnmpVarBind getRowStatusVarBind(int pos) {
-            if (entryoids == null) return null;
-            // if (pos == -1 || pos >= entryoids.size() ) return false;
-            if (pos == -1 || pos >= entrycount ) return null;
-            // return ((Boolean)isentrynew.get(pos)).booleanValue();
-            return rowstatus[pos];
-        }
-
-        public Vector<SnmpVarBind> getEntrySubList(int pos) {
-            if (entrylists == null) return null;
-            // if (pos == -1 || pos >= entrylists.size() ) return null;
-            if (pos == -1 || pos >= entrycount ) return null;
-            // return (Vector) entrylists.get(pos);
-            return entrylists[pos];
-        }
-
-        public Iterator<SnmpOid> getEntryOids() {
-            if (entryoids == null) return null;
-            // return entryoids.iterator();
-            return Arrays.asList(entryoids).iterator();
-        }
-
-        public int getEntryCount() {
-            if (entryoids == null) return 0;
-            // return entryoids.size();
-            return entrycount;
-        }
-
-    }
-
-
-    //-------------------------------------------------------------------
-    //-------------------------------------------------------------------
-    // Public interface
-    //-------------------------------------------------------------------
-    //-------------------------------------------------------------------
-
-    //-------------------------------------------------------------------
-    // Returns the contextual object containing user-data allocated
-    // through the SnmpUserDataFactory for this request.
-    //-------------------------------------------------------------------
-
-    public Object getUserData() { return request.getUserData(); }
-
-    //-------------------------------------------------------------------
-    // Tells whether creation of new entries is allowed with respect
-    // to the operation involved (GET=>false/SET=>true)
-    //-------------------------------------------------------------------
-
-    public boolean isCreationAllowed() {
-        return creationflag;
-    }
-
-    //-------------------------------------------------------------------
-    // Tells whether we are currently processing a SET request (check/set)
-    //-------------------------------------------------------------------
-
-    public boolean isSetRequest() {
-        return setreqflag;
-    }
-
-    //-------------------------------------------------------------------
-    // Returns the protocol version in which the original request is
-    // evaluated.
-    //-------------------------------------------------------------------
-
-    public int getVersion() {
-        return version;
-    }
-
-    //-------------------------------------------------------------------
-    // Returns the actual protocol version of the request PDU.
-    //-------------------------------------------------------------------
-
-    public int getRequestPduVersion() {
-        return request.getRequestPduVersion();
-    }
-
-    //-------------------------------------------------------------------
-    // Returns the SnmpMibNode associated with the given handler
-    //-------------------------------------------------------------------
-
-    public SnmpMibNode getMetaNode(Handler handler) {
-        return handler.meta;
-    }
-
-    //-------------------------------------------------------------------
-    // Indicates the depth of the arc in the OID that identifies the
-    // SnmpMibNode associated with the given handler
-    //-------------------------------------------------------------------
-
-    public int getOidDepth(Handler handler) {
-        return handler.depth;
-    }
-
-    //-------------------------------------------------------------------
-    // returns an enumeration of the SnmpMibSubRequest's to be invoked on
-    // the SnmpMibNode associated with a given Handler node.
-    // If this node is a group, there will be a single subrequest.
-    // If it is a table, there will be one subrequest per entry involved.
-    //-------------------------------------------------------------------
-
-    public Enumeration getSubRequests(Handler handler) {
-        return new Enum(this,handler);
-    }
-
-    //-------------------------------------------------------------------
-    // returns an enumeration of the Handlers stored in the Hashtable.
-    //-------------------------------------------------------------------
-
-    public Enumeration getHandlers() {
-        return hashtable.elements();
-    }
-
-    //-------------------------------------------------------------------
-    // adds a varbind to a handler node sublist
-    //-------------------------------------------------------------------
-
-    public void add(SnmpMibNode meta, int depth, SnmpVarBind varbind)
-        throws SnmpStatusException {
-        registerNode(meta,depth,null,varbind,false,null);
-    }
-
-    //-------------------------------------------------------------------
-    // adds an entry varbind to a handler node sublist
-    //-------------------------------------------------------------------
-
-    public void add(SnmpMibNode meta, int depth, SnmpOid entryoid,
-                    SnmpVarBind varbind, boolean isnew)
-        throws SnmpStatusException {
-        registerNode(meta,depth,entryoid,varbind,isnew,null);
-    }
-
-    //-------------------------------------------------------------------
-    // adds an entry varbind to a handler node sublist - specifying the
-    // varbind which holds the row status
-    //-------------------------------------------------------------------
-
-    public void add(SnmpMibNode meta, int depth, SnmpOid entryoid,
-                    SnmpVarBind varbind, boolean isnew,
-                    SnmpVarBind statusvb)
-        throws SnmpStatusException {
-        registerNode(meta,depth,entryoid,varbind,isnew,statusvb);
-    }
-
-
-    //-------------------------------------------------------------------
-    //-------------------------------------------------------------------
-    // Protected interface
-    //-------------------------------------------------------------------
-    //-------------------------------------------------------------------
-
-    //-------------------------------------------------------------------
-    // Type of the request (see SnmpDefinitions)
-    //-------------------------------------------------------------------
-
-    void setPduType(int pduType) {
-        type = pduType;
-        setreqflag = ((pduType == SnmpDefinitions.pduWalkRequest) ||
-            (pduType == SnmpDefinitions.pduSetRequestPdu));
-    }
-
-    //-------------------------------------------------------------------
-    // We deal with a GET-NEXT request
-    //-------------------------------------------------------------------
-
-    void setGetNextFlag() {
-        getnextflag = true;
-    }
-
-    //-------------------------------------------------------------------
-    // Tell whether creation is allowed.
-    //-------------------------------------------------------------------
-    void switchCreationFlag(boolean flag) {
-        creationflag = flag;
-    }
-
-
-    //-------------------------------------------------------------------
-    // Returns the subrequest handled by the SnmpMibNode itself
-    // (in principle, only for Groups)
-    //-------------------------------------------------------------------
-
-    SnmpMibSubRequest getSubRequest(Handler handler) {
-        if (handler == null) return null;
-        return new SnmpMibSubRequestImpl(request,handler.getSubList(),
-                                      null,false,getnextflag,null);
-    }
-
-    //-------------------------------------------------------------------
-    // Returns the subrequest associated with the entry identified by
-    // the given entry (only for tables)
-    //-------------------------------------------------------------------
-
-    SnmpMibSubRequest getSubRequest(Handler handler, SnmpOid oid) {
-        if (handler == null) return null;
-        final int pos = handler.getEntryPos(oid);
-        if (pos == -1) return null;
-        return new SnmpMibSubRequestImpl(request,
-                                         handler.getEntrySubList(pos),
-                                         handler.getEntryOid(pos),
-                                         handler.isNewEntry(pos),
-                                         getnextflag,
-                                         handler.getRowStatusVarBind(pos));
-    }
-
-    //-------------------------------------------------------------------
-    // Returns the subrequest associated with the entry identified by
-    // the given entry (only for tables). The `entry' parameter is an
-    // index relative to the position of the entry in the handler sublist.
-    //-------------------------------------------------------------------
-
-    SnmpMibSubRequest getSubRequest(Handler handler, int entry) {
-        if (handler == null) return null;
-        return new
-            SnmpMibSubRequestImpl(request,handler.getEntrySubList(entry),
-                                  handler.getEntryOid(entry),
-                                  handler.isNewEntry(entry),getnextflag,
-                                  handler.getRowStatusVarBind(entry));
-    }
-
-    //-------------------------------------------------------------------
-    //-------------------------------------------------------------------
-    // Private section
-    //-------------------------------------------------------------------
-    //-------------------------------------------------------------------
-
-
-    //-------------------------------------------------------------------
-    // stores a handler node in the Hashtable
-    //-------------------------------------------------------------------
-
-    private void put(Object key, Handler handler) {
-        if (handler == null) return;
-        if (key == null) return;
-        if (hashtable == null) hashtable = new Hashtable<Object, Handler>();
-        hashtable.put(key,handler);
-    }
-
-    //-------------------------------------------------------------------
-    // finds a handler node in the Hashtable
-    //-------------------------------------------------------------------
-
-    private Handler get(Object key) {
-        if (key == null) return null;
-        if (hashtable == null) return null;
-        return hashtable.get(key);
-    }
-
-    //-------------------------------------------------------------------
-    // Search for the given oid in `oids'. If none is found, returns -1
-    // otherwise, returns the index at which the oid is located.
-    //-------------------------------------------------------------------
-
-    private static int findOid(SnmpOid[] oids, int count, SnmpOid oid) {
-        final int size = count;
-        int low= 0;
-        int max= size - 1;
-        int curr= low + (max-low)/2;
-        //System.out.println("Try to retrieve: " + oid.toString());
-        while (low <= max) {
-
-            final SnmpOid pos = oids[curr];
-
-            //System.out.println("Compare with" + pos.toString());
-            // never know ...we might find something ...
-            //
-            final int comp = oid.compareTo(pos);
-            if (comp == 0)
-                return curr;
-
-            if (oid.equals(pos)) {
-                return curr;
-            }
-            if (comp > 0) {
-                low = curr + 1;
-            } else {
-                max = curr - 1;
-            }
-            curr = low + (max-low)/2;
-        }
-        return -1;
-    }
-
-    //-------------------------------------------------------------------
-    // Return the index at which the given oid should be inserted in the
-    // `oids' array.
-    //-------------------------------------------------------------------
-
-    private static int getInsertionPoint(SnmpOid[] oids, int count,
-                                         SnmpOid oid) {
-        final SnmpOid[] localoids = oids;
-        final int size = count;
-        int low= 0;
-        int max= size - 1;
-        int curr= low + (max-low)/2;
-
-
-        while (low <= max) {
-
-            final SnmpOid pos = localoids[curr];
-
-            // never know ...we might find something ...
-            //
-            final int comp= oid.compareTo(pos);
-
-            // In the calling method we will have to check for this case...
-            //    if (comp == 0)
-            //       return -1;
-            // Returning curr instead of -1 avoids having to call
-            // findOid() first and getInsertionPoint() afterwards.
-            // We can simply call getInsertionPoint() and then checks whether
-            // there's an OID at the returned position which equals the
-            // given OID.
-            if (comp == 0)
-                return curr;
-
-            if (comp>0) {
-                low= curr +1;
-            } else {
-                max= curr -1;
-            }
-            curr= low + (max-low)/2;
-        }
-        return curr;
-    }
-
-    //-------------------------------------------------------------------
-    // adds a varbind in a handler node sublist
-    //-------------------------------------------------------------------
-
-    private void registerNode(SnmpMibNode meta, int depth, SnmpOid entryoid,
-                              SnmpVarBind varbind, boolean isnew,
-                              SnmpVarBind statusvb)
-        throws SnmpStatusException {
-        if (meta == null) {
-            SNMP_ADAPTOR_LOGGER.logp(Level.FINEST,
-                    SnmpRequestTree.class.getName(),
-                    "registerNode", "meta-node is null!");
-            return;
-        }
-        if (varbind == null) {
-            SNMP_ADAPTOR_LOGGER.logp(Level.FINEST,
-                    SnmpRequestTree.class.getName(),
-                    "registerNode", "varbind is null!");
-            return ;
-        }
-
-        final Object key = meta;
-
-        // retrieve the handler node associated with the given meta,
-        // if any
-        Handler handler = get(key);
-
-        // If no handler node was found for that meta, create one.
-        if (handler == null) {
-            // if (isDebugOn())
-            //    debug("registerNode", "adding node for " +
-            //          varbind.oid.toString());
-            handler = new Handler(type);
-            handler.meta  = meta;
-            handler.depth = depth;
-            put(key,handler);
-        }
-        // else {
-        //   if (isDebugOn())
-        //      debug("registerNode","found node for " +
-        //            varbind.oid.toString());
-        // }
-
-        // Adds the varbind in the handler node's sublist.
-        if (entryoid == null)
-            handler.addVarbind(varbind);
-        else
-            handler.addVarbind(varbind,entryoid,isnew,statusvb);
-        return ;
-    }
-
-
-    //-------------------------------------------------------------------
-    // private variables
-    //-------------------------------------------------------------------
-
-    private Hashtable<Object, Handler> hashtable = null;
-                                             // Hashtable of Handler objects
-    private SnmpMibRequest request = null;   // The original list of varbinds
-    private int       version      = 0;      // The protocol version
-    private boolean   creationflag = false;  // Does the operation allow
-                                             // creation of entries
-    private boolean   getnextflag  = false;  // Does the operation allow
-                                             // creation of entries
-    private int       type         = 0;      // Request PDU type as defined
-                                             // in SnmpDefinitions
-    private boolean   setreqflag   = false;  // True if we're processing a
-                                             // SET request (check/set).
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/agent/SnmpStandardMetaServer.java b/ojluni/src/main/java/com/sun/jmx/snmp/agent/SnmpStandardMetaServer.java
deleted file mode 100755
index a9ca559..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/agent/SnmpStandardMetaServer.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * Copyright (c) 2000, 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.
- */
-
-package com.sun.jmx.snmp.agent;
-
-// jmx imports
-//
-import com.sun.jmx.snmp.SnmpValue;
-import com.sun.jmx.snmp.SnmpStatusException;
-
-/**
- * <p>
- * This interface defines the methods that must be implemented by an
- * SNMP metadata object that needs to interact with an
- * {@link com.sun.jmx.snmp.agent.SnmpStandardObjectServer} object.
- * </p>
- * <p>
- * All these methods are usually generated by <code>mibgen</code> when
- * run in standard-metadata mode (default).
- * </p>
- * <p><b><i>
- * This interface is used internally between the generated Metadata and
- * the SNMP runtime and you shouldn't need to worry about it, because
- * you will never have to use it directly.
- * </b></i></p>
- *
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- **/
-public interface SnmpStandardMetaServer {
-    /**
-     * Returns the value of the scalar object identified by the given
-     * OID arc.
-     *
-     * @param arc OID arc of the querried scalar object.
-     *
-     * @return The <CODE>SnmpValue</CODE> of the scalar object identified
-     *         by <CODE>arc</CODE>.
-     *
-     * @param userData A contextual object containing user-data.
-     *        This object is allocated through the <code>
-     *        {@link com.sun.jmx.snmp.agent.SnmpUserDataFactory}</code>
-     *        for each incoming SNMP request.
-     *
-     * @exception SnmpStatusException If the arc is not valid, or if
-     *    access is denied.
-     *
-     **/
-    public SnmpValue get(long arc, Object userData)
-        throws SnmpStatusException ;
-
-    /**
-     * Sets the value of the scalar object identified by the given
-     * OID arc.
-     *
-     * @param x New value for the scalar object identified by
-     *    <CODE>arc</CODE>
-     *
-     * @param arc OID arc of the scalar object whose value is set.
-     *
-     * @return The new <CODE>SnmpValue</CODE> of the scalar object
-     *    identified by <CODE>arc</CODE>.
-     *
-     * @param userData A contextual object containing user-data.
-     *        This object is allocated through the <code>
-     *        {@link com.sun.jmx.snmp.agent.SnmpUserDataFactory}</code>
-     *        for each incoming SNMP request.
-     *
-     * @exception SnmpStatusException If the arc is not valid, or if
-     *    access is denied.
-     *
-     **/
-    public SnmpValue set(SnmpValue x, long arc, Object userData)
-        throws SnmpStatusException ;
-
-    /**
-     * Checks that the new desired value of the scalar object identified
-     * by the given OID arc is valid.
-     *
-     * @param x New value for the scalar object identified by
-     *    <CODE>arc</CODE>
-     *
-     * @param arc OID arc of the scalar object whose value is set.
-     *
-     * @param userData A contextual object containing user-data.
-     *        This object is allocated through the <code>
-     *        {@link com.sun.jmx.snmp.agent.SnmpUserDataFactory}</code>
-     *        for each incoming SNMP request.
-     *
-     * @exception SnmpStatusException If the arc is not valid, or if
-     *    access is denied, or if the new desired value is not valid.
-     *
-     **/
-    public void check(SnmpValue x, long arc, Object userData)
-        throws SnmpStatusException ;
-
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/agent/SnmpStandardObjectServer.java b/ojluni/src/main/java/com/sun/jmx/snmp/agent/SnmpStandardObjectServer.java
deleted file mode 100755
index 5b2fbcf..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/agent/SnmpStandardObjectServer.java
+++ /dev/null
@@ -1,264 +0,0 @@
-/*
- * Copyright (c) 2000, 2006, 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.jmx.snmp.agent;
-
-// java imports
-//
-import java.io.Serializable;
-import java.util.Hashtable;
-import java.util.Enumeration;
-import java.util.Vector;
-
-// jmx imports
-//
-import com.sun.jmx.snmp.SnmpOid;
-import com.sun.jmx.snmp.SnmpValue;
-import com.sun.jmx.snmp.SnmpVarBind;
-import com.sun.jmx.snmp.SnmpStatusException;
-
-// SNMP Runtime imports
-//
-
-/**
- * <p>
- * This class is a utility class that transform SNMP GET / SET requests
- * into series of get<i>AttributeName</i>() set<i>AttributeName</i>()
- * invoked on the MBean.
- * </p>
- *
- * <p>
- * The transformation relies on the metadata information provided by the
- * {@link com.sun.jmx.snmp.agent.SnmpStandardMetaServer} object which is
- * passed as first parameter to every method. This SnmpStandardMetaServer
- * object is usually a Metadata object generated by <code>mibgen</code>.
- * </p>
- *
- * <p>
- * The MBean is not invoked directly by this class but through the
- * metadata object which holds a reference on it.
- * </p>
- *
- * <p><b><i>
- * This class is used internally by mibgen generated metadata objects and
- * you should never need to use it directly.
- * </b></i></p>
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- **/
-
-public class SnmpStandardObjectServer implements Serializable {
-    private static final long serialVersionUID = -4641068116505308488L;
-
-    /**
-     * Generic handling of the <CODE>get</CODE> operation.
-     * <p> The default implementation of this method is to loop over the
-     * varbind list associated with the sub-request and to call
-     * <CODE>get(var.oid.getOidArc(depth), data);</CODE>
-     * <pre>
-     * public void get(SnmpStandardMetaServer meta, SnmpMibSubRequest req,
-     *                 int depth)
-     *    throws SnmpStatusException {
-     *
-     *    final Object data = req.getUserData();
-     *
-     *    for (Enumeration e= req.getElements(); e.hasMoreElements();) {
-     *
-     *        final SnmpVarBind var= (SnmpVarBind) e.nextElement();
-     *
-     *        try {
-     *            // This method will generate a SnmpStatusException
-     *            // if `depth' is out of bounds.
-     *            //
-     *            final long id = var.oid.getOidArc(depth);
-     *            var.value = meta.get(id, data);
-     *        } catch(SnmpStatusException x) {
-     *            req.registerGetException(var,x);
-     *        }
-     *    }
-     * }
-     * </pre>
-     * <p> You can override this method if you need to implement some
-     * specific policies for minimizing the accesses made to some remote
-     * underlying resources.
-     * <p>
-     *
-     * @param meta  A pointer to the generated meta-data object which
-     *              implements the <code>SnmpStandardMetaServer</code>
-     *              interface.
-     *
-     * @param req   The sub-request that must be handled by this node.
-     *
-     * @param depth The depth reached in the OID tree.
-     *
-     * @exception SnmpStatusException An error occurred while accessing
-     *  the MIB node.
-     */
-    public void get(SnmpStandardMetaServer meta, SnmpMibSubRequest req,
-                    int depth)
-        throws SnmpStatusException {
-
-        final Object data = req.getUserData();
-
-        for (Enumeration e= req.getElements(); e.hasMoreElements();) {
-            final SnmpVarBind var= (SnmpVarBind) e.nextElement();
-            try {
-                final long id = var.oid.getOidArc(depth);
-                var.value = meta.get(id, data);
-            } catch(SnmpStatusException x) {
-                req.registerGetException(var,x);
-            }
-        }
-    }
-
-    /**
-     * Generic handling of the <CODE>set</CODE> operation.
-     * <p> The default implementation of this method is to loop over the
-     * varbind list associated with the sub-request and to call
-     * <CODE>set(var.value, var.oid.getOidArc(depth), data);</CODE>
-     * <pre>
-     * public void set(SnmpStandardMetaServer meta, SnmpMibSubRequest req,
-     *                 int depth)
-     *    throws SnmpStatusException {
-     *
-     *    final Object data = req.getUserData();
-     *
-     *    for (Enumeration e= req.getElements(); e.hasMoreElements();) {
-     *
-     *        final SnmpVarBind var= (SnmpVarBind) e.nextElement();
-     *
-     *        try {
-     *            // This method will generate a SnmpStatusException
-     *            // if `depth' is out of bounds.
-     *            //
-     *            final long id = var.oid.getOidArc(depth);
-     *            var.value = meta.set(var.value, id, data);
-     *        } catch(SnmpStatusException x) {
-     *            req.registerSetException(var,x);
-     *        }
-     *    }
-     * }
-     * </pre>
-     * <p> You can override this method if you need to implement some
-     * specific policies for minimizing the accesses made to some remote
-     * underlying resources.
-     * <p>
-     *
-     * @param meta  A pointer to the generated meta-data object which
-     *              implements the <code>SnmpStandardMetaServer</code>
-     *              interface.
-     *
-     * @param req   The sub-request that must be handled by this node.
-     *
-     * @param depth The depth reached in the OID tree.
-     *
-     * @exception SnmpStatusException An error occurred while accessing
-     *  the MIB node.
-     */
-    public void set(SnmpStandardMetaServer meta, SnmpMibSubRequest req,
-                    int depth)
-        throws SnmpStatusException {
-
-        final Object data = req.getUserData();
-
-        for (Enumeration e= req.getElements(); e.hasMoreElements();) {
-            SnmpVarBind var = null;
-            var = (SnmpVarBind) e.nextElement();
-            try {
-                // This method will generate a SnmpStatusException
-                // if `depth' is out of bounds.
-                //
-                final long id = var.oid.getOidArc(depth);
-                var.value = meta.set(var.value, id, data);
-            } catch(SnmpStatusException x) {
-                req.registerSetException(var,x);
-            }
-        }
-    }
-
-    /**
-     * Generic handling of the <CODE>check</CODE> operation.
-     * <p> The default implementation of this method is to loop over the
-     * varbind list associated with the sub-request and to call
-     * <CODE>check(var.value, var.oid.getOidArc(depth), data);</CODE>
-     * <pre>
-     * public void check(SnmpStandardMetaServer meta, SnmpMibSubRequest req,
-     *                   int depth)
-     *    throws SnmpStatusException {
-     *
-     *    final Object data = req.getUserData();
-     *
-     *    for (Enumeration e= req.getElements(); e.hasMoreElements();) {
-     *
-     *        final SnmpVarBind var= (SnmpVarBind) e.nextElement();
-     *
-     *        try {
-     *            // This method will generate a SnmpStatusException
-     *            // if `depth' is out of bounds.
-     *            //
-     *            final long id = var.oid.getOidArc(depth);
-     *            meta.check(var.value, id, data);
-     *        } catch(SnmpStatusException x) {
-     *            req.registerCheckException(var,x);
-     *        }
-     *    }
-     * }
-     * </pre>
-     * <p> You can override this method if you need to implement some
-     * specific policies for minimizing the accesses made to some remote
-     * underlying resources, or if you need to implement some consistency
-     * checks between the different values provided in the varbind list.
-     * <p>
-     *
-     * @param meta  A pointer to the generated meta-data object which
-     *              implements the <code>SnmpStandardMetaServer</code>
-     *              interface.
-     *
-     * @param req   The sub-request that must be handled by this node.
-     *
-     * @param depth The depth reached in the OID tree.
-     *
-     * @exception SnmpStatusException An error occurred while accessing
-     *  the MIB node.
-     */
-    public void check(SnmpStandardMetaServer meta, SnmpMibSubRequest req,
-                      int depth)
-        throws SnmpStatusException {
-
-        final Object data = req.getUserData();
-
-        for (Enumeration e= req.getElements(); e.hasMoreElements();) {
-            final SnmpVarBind var = (SnmpVarBind) e.nextElement();
-            try {
-                // This method will generate a SnmpStatusException
-                // if `depth' is out of bounds.
-                //
-                final long id = var.oid.getOidArc(depth);
-                meta.check(var.value,id,data);
-            } catch(SnmpStatusException x) {
-                req.registerCheckException(var,x);
-            }
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/agent/SnmpTableCallbackHandler.java b/ojluni/src/main/java/com/sun/jmx/snmp/agent/SnmpTableCallbackHandler.java
deleted file mode 100755
index 913ed07..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/agent/SnmpTableCallbackHandler.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright (c) 2000, 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.
- */
-package com.sun.jmx.snmp.agent;
-
-import javax.management.ObjectName;
-import com.sun.jmx.snmp.SnmpStatusException;
-import com.sun.jmx.snmp.SnmpOid;
-import com.sun.jmx.snmp.agent.SnmpMibTable;
-
-/**
- * This interface ensures the synchronization between Metadata table objects
- * and bean-like table objects.
- *
- * It is used between mibgen generated table meta and table classes.
- * <p><b><i>
- * You should never need to use this interface directly.
- * </p></b></i>
- *
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- **/
-public interface SnmpTableCallbackHandler {
-    /**
-     * This method is called by the SNMP runtime after a new entry
-     * has been added to the table.
-     *
-     * If an SnmpStatusException is raised, the entry will be removed
-     * and the operation will be aborted. In this case, the removeEntryCb()
-     * callback will not be called.
-     *
-     * <p><b><i>
-     * You should never need to use this method directly.
-     * </p></b></i>
-     *
-     **/
-    public void addEntryCb(int pos, SnmpOid row, ObjectName name,
-                           Object entry, SnmpMibTable meta)
-        throws SnmpStatusException;
-
-    /**
-     * This method is called by the SNMP runtime after a new entry
-     * has been removed from the table.
-     *
-     * If raised, SnmpStatusException will be ignored.
-     *
-     * <p><b><i>
-     * You should never need to use this method directly.
-     * </p></b></i>
-     *
-     **/
-    public void removeEntryCb(int pos, SnmpOid row, ObjectName name,
-                              Object entry, SnmpMibTable meta)
-        throws SnmpStatusException;
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/agent/SnmpTableEntryFactory.java b/ojluni/src/main/java/com/sun/jmx/snmp/agent/SnmpTableEntryFactory.java
deleted file mode 100755
index 3dd128d..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/agent/SnmpTableEntryFactory.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Copyright (c) 2000, 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.
- */
-
-package com.sun.jmx.snmp.agent;
-
-import com.sun.jmx.snmp.SnmpStatusException;
-import com.sun.jmx.snmp.SnmpOid;
-import com.sun.jmx.snmp.agent.SnmpMibTable;
-import com.sun.jmx.snmp.agent.SnmpMibSubRequest;
-
-/**
- * This interface is implemented by mibgen generated table objects
- * inheriting from {@link com.sun.jmx.snmp.agent.SnmpTableSupport}.
- * <p>
- * It is used internally by the metadata whenever a remote SNMP manager
- * requests the creation of a new entry through an SNMP SET.
- * </p>
- * <p>
- * At creation, the mibgen generated table object retrieves its
- * corresponding metadata from the MIB and registers with
- * this metadata as a SnmpTableEntryFactory.
- * </p>
- *
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- **/
-
-public interface SnmpTableEntryFactory extends SnmpTableCallbackHandler {
-
-    /**
-     * This method is called by the SNMP runtime whenever a new entry
-     * creation is requested by a remote manager.
-     *
-     * The factory is responsible for instantiating the appropriate MBean
-     * and for registering it with the appropriate metadata object.
-     *
-     * Usually this method will:
-     * <ul>
-     * <li>Check whether the creation can be accepted
-     * <li>Instantiate a new entry
-     * <li>Possibly register this entry with the MBeanServer, if needed.
-     * <li>Call <code>addEntry()</code> on the given <code>meta</code> object.
-     * </ul>
-     * This method is usually generated by <code>mibgen</code> on table
-     * objects (inheriting from
-     * {@link com.sun.jmx.snmp.agent.SnmpTableSupport}). <br>
-     *
-     * <p><b><i>
-     * This method is called internally by the SNMP runtime whenever a
-     * new entry creation is requested by a remote SNMP manager.
-     * You should never need to call this method directlty.
-     * </i></b></p>
-     *
-     * @param request The SNMP subrequest containing the sublist of varbinds
-     *                for the new entry.
-     * @param rowOid  The OID indexing the conceptual row (entry) for which
-     *                the creation was requested.
-     * @param depth   The depth reached in the OID tree (the position at
-     *                which the columnar object ids start in the OIDs
-     *                included in the varbind).
-     * @param meta    The metadata object impacted by the subrequest
-     *
-     * @exception SnmpStatusException The new entry cannot be created.
-     *
-     **/
-    public void createNewEntry(SnmpMibSubRequest request, SnmpOid rowOid,
-                               int depth, SnmpMibTable meta)
-        throws SnmpStatusException;
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/agent/SnmpTableEntryNotification.java b/ojluni/src/main/java/com/sun/jmx/snmp/agent/SnmpTableEntryNotification.java
deleted file mode 100755
index c8e221e..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/agent/SnmpTableEntryNotification.java
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- * Copyright (c) 1998, 2007, 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.jmx.snmp.agent;
-
-
-
-// jmx imports
-//
-import javax.management.Notification;
-import javax.management.ObjectName;
-
-/**
- * Represents a notification emitted when an
- * entry is added or deleted from an SNMP table.
- * <P>
- * The <CODE>SnmpTableEntryNotification</CODE> object contains
- * the reference to the entry added or removed from the table.
- * <P>
- * The list of notifications fired by the <CODE>SnmpMibTable</CODE> is
- * the following:
- * <UL>
- * <LI>A new entry has been added to the SNMP table.
- * <LI>An existing entry has been removed from the SNMP table.
-  </UL>
- *
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- */
-
-public class SnmpTableEntryNotification extends Notification {
-
-    /**
-     * Creates and initializes a table entry notification object.
-     *
-     * @param type The notification type.
-     * @param source The notification producer.
-     * @param sequenceNumber The notification sequence number within the
-     *                  source object.
-     * @param timeStamp The notification emission date.
-     * @param entry     The entry object (may be null if the entry is
-     *                  registered in the MBeanServer).
-     * @param entryName The ObjectName entry object (may be null if the
-     *                  entry is not registered in the MBeanServer).
-     * @since 1.5
-     */
-    SnmpTableEntryNotification(String type, Object source,
-                               long sequenceNumber, long timeStamp,
-                               Object entry, ObjectName entryName) {
-
-        super(type, source, sequenceNumber, timeStamp);
-        this.entry = entry;
-        this.name  = entryName;
-    }
-
-    /**
-     * Gets the entry object.
-     * May be null if the entry is registered in the MBeanServer, and the
-     * MIB is using the generic MetaData (see mibgen).
-     *
-     * @return The entry.
-     */
-    public Object getEntry() {
-        return entry;
-    }
-
-    /**
-     * Gets the ObjectName of the entry.
-     * May be null if the entry is not registered in the MBeanServer.
-     *
-     * @return The ObjectName of the entry.
-     * @since 1.5
-     */
-    public ObjectName getEntryName() {
-        return name;
-    }
-
-    // PUBLIC VARIABLES
-    //-----------------
-
-    /**
-     * Notification type denoting that a new entry has been added to the
-     * SNMP table.
-     * <BR>The value of this notification type is
-     * <CODE>jmx.snmp.table.entry.added</CODE>.
-     */
-    public static final String SNMP_ENTRY_ADDED =
-        "jmx.snmp.table.entry.added";
-
-    /**
-     * Notification type denoting that an entry has been removed from the
-     * SNMP table.
-     * <BR>The value of this notification type is
-     * <CODE>jmx.snmp.table.entry.removed</CODE>.
-     */
-    public static final String SNMP_ENTRY_REMOVED =
-        "jmx.snmp.table.entry.removed";
-
-    // PRIVATE VARIABLES
-    //------------------
-
-    /**
-     * The entry object.
-     * @serial
-     */
-    private final Object entry;
-
-    /**
-     * The entry name.
-     * @serial
-     * @since 1.5
-     */
-    private final ObjectName name;
-
-    // Ensure compatibility
-    //
-    private static final long serialVersionUID = 5832592016227890252L;
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/agent/SnmpTableSupport.java b/ojluni/src/main/java/com/sun/jmx/snmp/agent/SnmpTableSupport.java
deleted file mode 100755
index 8a015ce..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/agent/SnmpTableSupport.java
+++ /dev/null
@@ -1,571 +0,0 @@
-/*
- * Copyright (c) 2000, 2006, 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.jmx.snmp.agent;
-
-
-
-// java imports
-//
-import java.io.Serializable;
-import java.util.Date;
-import java.util.Vector;
-import java.util.Enumeration;
-import java.util.List;
-import java.util.ArrayList;
-
-// jmx imports
-//
-import javax.management.Notification;
-import javax.management.ObjectName;
-import javax.management.NotificationFilter;
-import javax.management.NotificationListener;
-import javax.management.NotificationBroadcaster;
-import javax.management.MBeanNotificationInfo;
-import javax.management.ListenerNotFoundException;
-import com.sun.jmx.snmp.SnmpOid;
-import com.sun.jmx.snmp.SnmpValue;
-import com.sun.jmx.snmp.SnmpVarBind;
-import com.sun.jmx.snmp.SnmpStatusException;
-
-/**
- * This class is an abstraction for an SNMP table.
- * It is the base class for implementing SNMP tables in the
- * MBean world.
- *
- * <p>
- * Its responsibility is to synchronize the MBean view of the table
- * (Table of entries) with the MIB view (array of OID indexes). Each
- * object of this class will be bound to the Metadata object which
- * manages the same SNMP Table within the MIB.
- * </p>
- *
- * <p>
- * For each table defined in a MIB, mibgen will generate a specific
- * class called Table<i>TableName</i> that will subclass this class, and
- * a corresponding <i>TableName</i>Meta class extending SnmpMibTable
- * and corresponding to the MIB view of the same table.
- * </p>
- *
- * <p>
- * Objects of this class are instantiated by MBeans representing
- * the SNMP Group to which the table belong.
- * </p>
- *
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- * @see com.sun.jmx.snmp.agent.SnmpTableEntryFactory
- * @see com.sun.jmx.snmp.agent.SnmpMibTable
- *
- */
-public abstract class SnmpTableSupport implements SnmpTableEntryFactory,
-// NPCTE fix for bugId 4499265, esc 0, MR 04 sept 2001
-//  SnmpTableCallbackHandler {
-    SnmpTableCallbackHandler, Serializable {
-// end of NPCTE fix for bugId 4499265
-
-    //-----------------------------------------------------------------
-    //
-    //  Protected Variables
-    //
-    //-----------------------------------------------------------------
-
-    /**
-     * The list of entries
-     **/
-    protected List<Object> entries;
-
-    /**
-     * The associated metadata object
-     **/
-    protected SnmpMibTable meta;
-
-    /**
-     * The MIB to which this table belongs
-     **/
-    protected SnmpMib      theMib;
-
-    //-----------------------------------------------------------------
-    //
-    //  Private Variables
-    //
-    //-----------------------------------------------------------------
-
-    /**
-     * This variable is initialized while binding this object to its
-     * corresponding meta object.
-     **/
-    private boolean registrationRequired = false;
-
-
-
-    //-----------------------------------------------------------------
-    //
-    //  Constructor
-    //
-    //-----------------------------------------------------------------
-
-    /**
-     * Initializes the table.
-     * The steps are these:
-     * <ul><li> allocate an array for storing entry object,</li>
-     *     <li> retrieve the corresponding metadata object
-     *          from the MIB,
-     *     <li> bind this object to the corresponding metadata object
-     *          from the MIB.</li>
-     * </ul>
-     *
-     * @param mib The MIB to which this table belong.
-     *
-     **/
-    protected SnmpTableSupport(SnmpMib mib) {
-        theMib  = mib;
-        meta    = getRegisteredTableMeta(mib);
-        bindWithTableMeta();
-        entries = allocateTable();
-    }
-
-
-    //-----------------------------------------------------------------
-    //
-    //  Implementation of the SnmpTableEntryFactory interface
-    //
-    //-----------------------------------------------------------------
-
-    /**
-     * Creates a new entry in the table.
-     *
-     * This factory method is generated by mibgen and used internally.
-     * It is part of the
-     * {@link com.sun.jmx.snmp.agent.SnmpTableEntryFactory} interface.
-     * You may subclass this method to implement any specific behaviour
-     * your application requires.
-     *
-     * @exception SnmpStatusException if the entry cannot be created.
-     **/
-    public abstract void createNewEntry(SnmpMibSubRequest request,
-                                        SnmpOid rowOid, int depth,
-                                        SnmpMibTable meta)
-        throws SnmpStatusException;
-
-
-    //-----------------------------------------------------------------
-    //
-    //  Public methods
-    //
-    //-----------------------------------------------------------------
-
-    /**
-     * Returns the entry located at the given position in the table.
-     *
-     * @return The entry located at the given position, <code>null</code>
-     *         if no entry can be found at this position.
-     **/
-    // XXXX xxxx zzz ZZZZ => public? or protected?
-    public Object getEntry(int pos) {
-        if (entries == null) return null;
-        return entries.get(pos);
-    }
-
-    /**
-     * Returns the number of entries registered in the table.
-     *
-     * @return The number of entries registered in the table.
-     **/
-    public int getSize() {
-        return meta.getSize();
-    }
-
-    /**
-     * This method lets you dynamically switch the creation policy.
-     *
-     * <CODE>setCreationEnabled()</CODE> will switch the policy of
-     *      remote entry creation via SET operations, by calling
-     *      <code>setCreationEnabled()</code> on the metadata object
-     *      associated with this table.
-     * <BR> By default remote entry creation via SET operation is disabled.
-     *
-     * @param remoteCreationFlag Tells whether remote entry creation must
-     *        be enabled or disabled.
-     * <li>
-     * <CODE>setCreationEnabled(true)</CODE> will enable remote entry
-     *      creation via SET operations.</li>
-     * <li>
-     * <CODE>setCreationEnabled(false)</CODE> will disable remote entry
-     *      creation via SET operations.</li>
-     * <p> By default remote entry creation via SET operation is disabled.
-     * </p>
-     *
-     * @see com.sun.jmx.snmp.agent.SnmpMibTable
-     *
-     **/
-    public void setCreationEnabled(boolean remoteCreationFlag) {
-        meta.setCreationEnabled(remoteCreationFlag);
-    }
-
-    /**
-     * Tells whether a new entry should be created when a SET operation
-     * is received for an entry that does not exist yet.
-     * This method calls <code>isCreationEnabled()</code> on the metadata
-     * object associated with this table.
-     *
-     * @return true if a new entry must be created, false otherwise.<br>
-     *         [default: returns <CODE>false</CODE>]
-     *
-     * @see com.sun.jmx.snmp.agent.SnmpMibTable
-     **/
-    public boolean isCreationEnabled() {
-        return meta.isCreationEnabled();
-    }
-
-    /**
-     * Tells whether the metadata object to which this table is linked
-     * requires entries to be registered. In this case passing an
-     * ObjectName when registering entries will be mandatory.
-     *
-     * @return <code>true</code> if the associated metadata requires entries
-     *         to be registered (mibgen generated generic metadata).
-     **/
-    public boolean isRegistrationRequired() {
-        return registrationRequired;
-    }
-
-    /**
-     * Builds an entry SnmpIndex from its row OID.
-     *
-     * This method is generated by mibgen and used internally.
-     *
-     * @param rowOid The SnmpOid object identifying a table entry.
-     *
-     * @return The SnmpIndex of the entry identified by <code>rowOid</code>.
-     *
-     * @exception SnmpStatusException if the index cannot be built from the
-     *            given OID.
-     **/
-    public SnmpIndex buildSnmpIndex(SnmpOid rowOid)
-        throws SnmpStatusException {
-        return buildSnmpIndex(rowOid.longValue(false), 0);
-    }
-
-    /**
-     * Builds an SnmpOid from an SnmpIndex object.
-     *
-     * This method is generated by mibgen and used internally.
-     *
-     * @param index An SnmpIndex object identifying a table entry.
-     *
-     * @return The SnmpOid form of the given entry index.
-     *
-     * @exception SnmpStatusException if the given index is not valid.
-     **/
-    public abstract SnmpOid buildOidFromIndex(SnmpIndex index)
-        throws SnmpStatusException;
-
-    /**
-     * Builds the default ObjectName of an entry from the SnmpIndex
-     * identifying this entry. No access is made on the entry itself.
-     *
-     * This method is generated by mibgen and used internally.
-     * You can subclass this method if you want to change the default
-     * ObjectName policy. This is only meaningfull when entries
-     * are registered MBeans.
-     *
-     * @param index The SnmpIndex identifying the entry from which we
-     *              want to build the default ObjectName.
-     *
-     * @return The default ObjectName for the entry identified by
-     *         the given index.
-     *
-     * @exception SnmpStatusException if the given index is not valid.
-     **/
-    public abstract ObjectName buildNameFromIndex(SnmpIndex index)
-        throws SnmpStatusException;
-
-
-    //-----------------------------------------------------------------
-    //
-    //  Implementation of the SnmpTableEntryFactory interface
-    //
-    //-----------------------------------------------------------------
-
-    /**
-     * This callback is called by  the associated metadata object
-     * when a new table entry has been registered in the
-     * table metadata.
-     *
-     * This method will update the <code>entries</code> list.
-     *
-     * @param pos   The position at which the new entry was inserted
-     *              in the table.
-     * @param row   The row OID of the new entry
-     * @param name  The ObjectName of the new entry (as specified by the
-     *              factory)
-     * @param entry The new entry (as returned by the factory)
-     * @param meta  The table metadata object.
-     *
-     **/
-    public void addEntryCb(int pos, SnmpOid row, ObjectName name,
-                           Object entry, SnmpMibTable meta)
-        throws SnmpStatusException {
-        try {
-            if (entries != null) entries.add(pos,entry);
-        } catch (Exception e) {
-            throw new SnmpStatusException(SnmpStatusException.noSuchName);
-        }
-    }
-
-    /**
-     * This callback is called by  the associated metadata object
-     * when a new table entry has been removed from the
-     * table metadata.
-     *
-     * This method will update the <code>entries</code> list.
-     *
-     * @param pos   The position from which the entry was deleted
-     * @param row   The row OID of the deleted entry
-     * @param name  The ObjectName of the deleted entry (may be null if
-     *              ObjectName's were not required)
-     * @param entry The deleted entry (may be null if only ObjectName's
-     *              were required)
-     * @param meta  The table metadata object.
-     *
-     **/
-    public void removeEntryCb(int pos, SnmpOid row, ObjectName name,
-                              Object entry, SnmpMibTable meta)
-        throws SnmpStatusException {
-        try {
-            if (entries != null) entries.remove(pos);
-        } catch (Exception e) {
-        }
-    }
-
-
-
-    /**
-     * Enables to add an SNMP entry listener to this
-     * <CODE>SnmpMibTable</CODE>.
-     *
-     * @param listener The listener object which will handle the
-     *    notifications emitted by the registered MBean.
-     *
-     * @param filter The filter object. If filter is null, no filtering
-     *    will be performed before handling notifications.
-     *
-     * @param handback The context to be sent to the listener when a
-     *    notification is emitted.
-     *
-     * @exception IllegalArgumentException Listener parameter is null.
-     */
-    public void
-        addNotificationListener(NotificationListener listener,
-                                NotificationFilter filter, Object handback) {
-        meta.addNotificationListener(listener,filter,handback);
-    }
-
-    /**
-     * Enables to remove an SNMP entry listener from this
-     * <CODE>SnmpMibTable</CODE>.
-     *
-     * @param listener The listener object which will handle the
-     *    notifications emitted by the registered MBean.
-     *    This method will remove all the information related to this
-     *    listener.
-     *
-     * @exception ListenerNotFoundException The listener is not registered
-     *    in the MBean.
-     */
-    public synchronized void
-        removeNotificationListener(NotificationListener listener)
-        throws ListenerNotFoundException {
-        meta.removeNotificationListener(listener);
-    }
-
-    /**
-     * Returns a <CODE>NotificationInfo</CODE> object containing the
-     * notification class and the notification type sent by the
-     * <CODE>SnmpMibTable</CODE>.
-     */
-    public MBeanNotificationInfo[] getNotificationInfo() {
-        return meta.getNotificationInfo();
-    }
-
-    //-----------------------------------------------------------------
-    //
-    //  Protected Abstract methods
-    //
-    //-----------------------------------------------------------------
-
-    /**
-     * Builds an SnmpIndex object from the index part of an OID.
-     *
-     * This method is generated by mibgen and used internally.
-     *
-     * @param oid The OID from which to build the index, represented
-     *        as an array of long.
-     * @param start The position where to start from in the OID array.
-     *
-     * @return The SnmpOid form of the given entry index.
-     *
-     * @exception SnmpStatusException if the given index is not valid.
-     **/
-    protected abstract SnmpIndex buildSnmpIndex(long oid[], int start )
-        throws SnmpStatusException;
-
-    /**
-     * Returns the metadata object associated with this table.
-     *
-     * This method is generated by mibgen and used internally.
-     *
-     * @param mib The SnmpMib object holding the Metadata corresponding
-     *            to this table.
-     *
-     * @return The metadata object associated with this table.
-     *         Returns <code>null</code> if this implementation of the
-     *         MIB doesn't support this table.
-     **/
-    protected abstract SnmpMibTable getRegisteredTableMeta(SnmpMib mib);
-
-
-    //-----------------------------------------------------------------
-    //
-    //  Protected methods
-    //
-    //-----------------------------------------------------------------
-
-    /**
-     * Allocates an ArrayList for storing table entries.
-     *
-     * This method is called within the constructor at object creation.
-     * Any object implementing the {@link java.util.List} interface can
-     * be used.
-     *
-     * @return A new list in which to store entries. If <code>null</code>
-     *         is returned then no entry will be stored in the list
-     *         and getEntry() will always return null.
-     **/
-    protected List<Object> allocateTable() {
-        return new ArrayList<Object>();
-    }
-
-    /**
-     * Add an entry in this table.
-     *
-     * This method registers an entry in the table and perform
-     * synchronization with the associated table metadata object.
-     *
-     * This method assumes that the given entry will not be registered,
-     * or will be registered with its default ObjectName built from the
-     * associated  SnmpIndex.
-     * <p>
-     * If the entry is going to be registered, then
-     * {@link com.sun.jmx.snmp.agent.SnmpTableSupport#addEntry(SnmpIndex, ObjectName, Object)} should be prefered.
-     * <br> This function is mainly provided for backward compatibility.
-     *
-     * @param index The SnmpIndex built from the given entry.
-     * @param entry The entry that should be added in the table.
-     *
-     * @exception SnmpStatusException if the entry cannot be registered with
-     *            the given index.
-     **/
-    protected void addEntry(SnmpIndex index, Object entry)
-        throws SnmpStatusException {
-        SnmpOid oid = buildOidFromIndex(index);
-        ObjectName name = null;
-        if (isRegistrationRequired()) {
-            name = buildNameFromIndex(index);
-        }
-        meta.addEntry(oid,name,entry);
-    }
-
-    /**
-     * Add an entry in this table.
-     *
-     * This method registers an entry in the table and performs
-     * synchronization with the associated table metadata object.
-     *
-     * @param index The SnmpIndex built from the given entry.
-     * @param name  The ObjectName with which this entry will be registered.
-     * @param entry The entry that should be added in the table.
-     *
-     * @exception SnmpStatusException if the entry cannot be registered with
-     *            the given index.
-     **/
-    protected void addEntry(SnmpIndex index, ObjectName name, Object entry)
-        throws SnmpStatusException {
-        SnmpOid oid = buildOidFromIndex(index);
-        meta.addEntry(oid,name,entry);
-    }
-
-    /**
-     * Remove an entry from this table.
-     *
-     * This method unregisters an entry from the table and performs
-     * synchronization with the associated table metadata object.
-     *
-     * @param index The SnmpIndex identifying the entry.
-     * @param entry The entry that should be removed in the table. This
-     *              parameter is optional and can be omitted if it doesn't
-     *              need to be passed along to the
-     *              <code>removeEntryCb()</code> callback defined in the
-     *              {@link com.sun.jmx.snmp.agent.SnmpTableCallbackHandler}
-     *              interface.
-     *
-     * @exception SnmpStatusException if the entry cannot be unregistered.
-     **/
-    protected void removeEntry(SnmpIndex index, Object entry)
-        throws SnmpStatusException {
-        SnmpOid oid = buildOidFromIndex(index);
-        meta.removeEntry(oid,entry);
-    }
-
-    // protected void removeEntry(ObjectName name, Object entry)
-    //  throws SnmpStatusException {
-    //  meta.removeEntry(name,entry);
-    // }
-
-    /**
-     * Returns the entries in the table.
-     *
-     * @return An Object[] array containing the entries registered in the
-     *         table.
-     **/
-    protected Object[] getBasicEntries() {
-        if (entries == null) return null;
-        Object[] array= new Object[entries.size()];
-        entries.toArray(array);
-        return array;
-    }
-
-    /**
-     * Binds this table with its associated metadata, registering itself
-     * as an SnmpTableEntryFactory.
-     **/
-    protected void bindWithTableMeta() {
-        if (meta == null) return;
-        registrationRequired = meta.isRegistrationRequired();
-        meta.registerEntryFactory(this);
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/agent/SnmpUserDataFactory.java b/ojluni/src/main/java/com/sun/jmx/snmp/agent/SnmpUserDataFactory.java
deleted file mode 100755
index 60ce3c3..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/agent/SnmpUserDataFactory.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * Copyright (c) 2000, 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.
- */
-
-package com.sun.jmx.snmp.agent;
-
-import com.sun.jmx.snmp.SnmpPduPacket;
-import com.sun.jmx.snmp.SnmpPdu;
-import com.sun.jmx.snmp.SnmpStatusException;
-
-/**
- * This interface is provided to enable fine customization of the SNMP
- * agent behaviour.
- *
- * <p>You will not need to implement this interface except if your agent
- * needs extra customization requiring some contextual information.</p>
- *
- * <p>If an SnmpUserDataFactory is set on the SnmpAdaptorServer, then a new
- * object containing user-data will be allocated through this factory
- * for each incoming request. This object will be passed along to
- * the SnmpMibAgent within SnmpMibRequest objects. By default, no
- * SnmpUserDataFactory is set on the SnmpAdaptorServer, and the contextual
- * object passed to SnmpMibAgent is null.</p>
- *
- * <p>You can use this feature to obtain on contextual information
- * (such as community string etc...) or to implement a caching
- * mechanism, or for whatever purpose might be required by your specific
- * agent implementation.</p>
- *
- * <p>The sequence <code>allocateUserData() / releaseUserData()</code> can
- * also be used to implement a caching mechanism:
- * <ul>
- * <li><code>allocateUserData()</code> could be used to allocate
- *         some cache space,</li>
- * <li>and <code>releaseUserData()</code> could be used to flush it.</li>
- * </ul></p>
- *
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- * @see com.sun.jmx.snmp.agent.SnmpMibRequest
- * @see com.sun.jmx.snmp.agent.SnmpMibAgent
- * @see com.sun.jmx.snmp.daemon.SnmpAdaptorServer
- *
- **/
-public interface SnmpUserDataFactory {
-    /**
-     * Called by the <CODE>SnmpAdaptorServer</CODE> adaptor.
-     * Allocate a contextual object containing some user data. This method
-     * is called once for each incoming SNMP request. The scope
-     * of this object will be the whole request. Since the request can be
-     * handled in several threads, the user should make sure that this
-     * object can be accessed in a thread-safe manner. The SNMP framework
-     * will never access this object directly - it will simply pass
-     * it to the <code>SnmpMibAgent</code> within
-     * <code>SnmpMibRequest</code> objects - from where it can be retrieved
-     * through the {@link com.sun.jmx.snmp.agent.SnmpMibRequest#getUserData() getUserData()} accessor.
-     * <code>null</code> is considered to be a valid return value.
-     *
-     * This method is called just after the SnmpPduPacket has been
-     * decoded.
-     *
-     * @param requestPdu The SnmpPduPacket received from the SNMP manager.
-     *        <b>This parameter is owned by the SNMP framework and must be
-     *        considered as transient.</b> If you wish to keep some of its
-     *        content after this method returns (by storing it in the
-     *        returned object for instance) you should clone that
-     *        information.
-     *
-     * @return A newly allocated user-data contextual object, or
-     *         <code>null</code>
-     * @exception SnmpStatusException If an SnmpStatusException is thrown,
-     *            the request will be aborted.
-     *
-     * @since 1.5
-     **/
-    public Object allocateUserData(SnmpPdu requestPdu)
-        throws SnmpStatusException;
-
-    /**
-     * Called by the <CODE>SnmpAdaptorServer</CODE> adaptor.
-     * Release a previously allocated contextual object containing user-data.
-     * This method is called just before the responsePdu is sent back to the
-     * manager. It gives the user a chance to alter the responsePdu packet
-     * before it is encoded, and to free any resources that might have
-     * been allocated when creating the contextual object.
-     *
-     * @param userData The contextual object being released.
-     * @param responsePdu The SnmpPduPacket that will be sent back to the
-     *        SNMP manager.
-     *        <b>This parameter is owned by the SNMP framework and must be
-     *        considered as transient.</b> If you wish to keep some of its
-     *        content after this method returns you should clone that
-     *        information.
-     *
-     * @exception SnmpStatusException If an SnmpStatusException is thrown,
-     *            the responsePdu is dropped and nothing is returned to
-     *            to the manager.
-     *
-     * @since 1.5
-     **/
-    public void releaseUserData(Object userData, SnmpPdu responsePdu)
-        throws SnmpStatusException;
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/agent/package.html b/ojluni/src/main/java/com/sun/jmx/snmp/agent/package.html
deleted file mode 100755
index 0eca900..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/agent/package.html
+++ /dev/null
@@ -1,34 +0,0 @@
-<HTML>
-<HEAD>
-<!--
-
-Copyright (c) 1999, 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.
--->
-</HEAD>
-<BODY>
-Provides the classes for creating an <B>SNMP agent</B>.
-<p><b>This API is a Sun Microsystems internal API  and is subject 
-   to change without notice.</b></p>
-</BODY>
-</HTML>
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/daemon/ClientHandler.java b/ojluni/src/main/java/com/sun/jmx/snmp/daemon/ClientHandler.java
deleted file mode 100755
index 0519817..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/daemon/ClientHandler.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * Copyright (c) 1999, 2006, 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.jmx.snmp.daemon;
-
-
-
-// java import
-//
-import java.io.*;
-import java.util.logging.Level;
-
-// jmx import
-//
-import javax.management.MBeanServer;
-import javax.management.ObjectName;
-
-// jmx RI import
-//
-import static com.sun.jmx.defaults.JmxProperties.SNMP_ADAPTOR_LOGGER;
-
-/**
- * The <CODE>ClientHandler</CODE> class is the base class of each
- * adaptor.<p>
- */
-
-abstract class ClientHandler implements Runnable {
-
-    public ClientHandler(CommunicatorServer server, int id, MBeanServer f, ObjectName n) {
-        adaptorServer = server ;
-        requestId = id ;
-        mbs = f ;
-        objectName = n ;
-        interruptCalled = false ;
-        dbgTag = makeDebugTag() ;
-        //if (mbs == null ){
-        //thread = new Thread (this) ;
-        thread =  createThread(this);
-
-        //} else {
-        //thread = mbs.getThreadAllocatorSrvIf().obtainThread(objectName,this) ;
-        //}
-        // Note: the thread will be started by the subclass.
-    }
-
-    // thread service
-    Thread createThread(Runnable r) {
-        return new Thread(this);
-    }
-
-    public void interrupt() {
-        SNMP_ADAPTOR_LOGGER.entering(dbgTag, "interrupt");
-        interruptCalled = true ;
-        if (thread != null) {
-            thread.interrupt() ;
-        }
-        SNMP_ADAPTOR_LOGGER.exiting(dbgTag, "interrupt");
-    }
-
-
-    public void join() {
-        if (thread != null) {
-        try {
-            thread.join() ;
-        }
-        catch(InterruptedException x) {
-        }
-        }
-    }
-
-    public void run() {
-
-        try {
-            //
-            // Notify the server we are now active
-            //
-            adaptorServer.notifyClientHandlerCreated(this) ;
-
-            //
-            // Call protocol specific sequence
-            //
-            doRun() ;
-        }
-        finally {
-            //
-            // Now notify the adaptor server that the handler is terminating.
-            // This is important because the server may be blocked waiting for
-            // a handler to terminate.
-            //
-            adaptorServer.notifyClientHandlerDeleted(this) ;
-        }
-    }
-
-    //
-    // The protocol-dependent part of the request
-    //
-    public abstract void doRun() ;
-
-    protected CommunicatorServer adaptorServer = null ;
-    protected int requestId = -1 ;
-    protected MBeanServer mbs = null ;
-    protected ObjectName objectName = null ;
-    protected Thread thread = null ;
-    protected boolean interruptCalled = false ;
-    protected String dbgTag = null ;
-
-    protected String makeDebugTag() {
-        return "ClientHandler[" + adaptorServer.getProtocol() + ":" + adaptorServer.getPort() + "][" + requestId + "]";
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/daemon/CommunicationException.java b/ojluni/src/main/java/com/sun/jmx/snmp/daemon/CommunicationException.java
deleted file mode 100755
index 2665a77..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/daemon/CommunicationException.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Copyright (c) 1999, 2007, 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.jmx.snmp.daemon;
-
-// java import
-//
-import java.io.PrintStream;
-import java.io.PrintWriter;
-
-/**
- * Represents exceptions raised due to communications problems,
- * for example when a managed object server is out of reach.<p>
- *
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- */
-
-public class CommunicationException extends javax.management.JMRuntimeException {
-
-    /* Serial version */
-    private static final long serialVersionUID = -2499186113233316177L;
-
-    /**
-     * Constructs a CommunicationException with a target exception.
-     */
-    public CommunicationException(Throwable target) {
-        super(target.getMessage());
-        initCause(target);
-    }
-
-    /**
-     * Constructs a CommunicationException with a target exception
-     * and a detail message.
-     */
-    public CommunicationException(Throwable target, String msg) {
-        super(msg);
-        initCause(target);
-    }
-
-    /**
-     * Constructs a CommunicationException with a detail message.
-     */
-    public CommunicationException(String msg) {
-        super(msg);
-    }
-
-    /**
-     * Get the thrown target exception.
-     */
-    public Throwable getTargetException() {
-        return getCause();
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/daemon/CommunicatorServer.java b/ojluni/src/main/java/com/sun/jmx/snmp/daemon/CommunicatorServer.java
deleted file mode 100755
index 4b576b6..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/daemon/CommunicatorServer.java
+++ /dev/null
@@ -1,1375 +0,0 @@
-/*
- * Copyright (c) 1999, 2007, 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.jmx.snmp.daemon;
-
-
-
-// java import
-//
-import java.io.ObjectInputStream;
-import java.io.IOException;
-import java.net.InetAddress;
-import java.util.Enumeration;
-import java.util.logging.Level;
-import java.util.Vector;
-import java.util.NoSuchElementException;
-
-// jmx import
-//
-import javax.management.MBeanServer;
-import javax.management.MBeanRegistration;
-import javax.management.ObjectName;
-import javax.management.NotificationListener;
-import javax.management.NotificationFilter;
-import javax.management.NotificationBroadcaster;
-import javax.management.NotificationBroadcasterSupport;
-import javax.management.MBeanNotificationInfo;
-import javax.management.AttributeChangeNotification;
-import javax.management.ListenerNotFoundException;
-import javax.management.loading.ClassLoaderRepository;
-import javax.management.MBeanServerFactory;
-
-import static com.sun.jmx.defaults.JmxProperties.SNMP_ADAPTOR_LOGGER;
-
-// JSR 160 import
-//
-// XXX Revisit:
-//   used to import com.sun.jmx.snmp.MBeanServerForwarder
-// Now using JSR 160 instead. => this is an additional
-// dependency to JSR 160.
-//
-import javax.management.remote.MBeanServerForwarder;
-
-/**
- * Defines generic behavior for the server part of a connector or an adaptor.
- * Most connectors or adaptors extend <CODE>CommunicatorServer</CODE>
- * and inherit this behavior. Connectors or adaptors that do not fit into
- * this model do not extend <CODE>CommunicatorServer</CODE>.
- * <p>
- * A <CODE>CommunicatorServer</CODE> is an active object, it listens for
- * client requests  and processes them in its own thread. When necessary, a
- * <CODE>CommunicatorServer</CODE> creates other threads to process multiple
- * requests concurrently.
- * <p>
- * A <CODE>CommunicatorServer</CODE> object can be stopped by calling the
- * <CODE>stop</CODE> method. When it is stopped, the
- * <CODE>CommunicatorServer</CODE> no longer listens to client requests and
- * no longer holds any thread or communication resources.
- * It can be started again by calling the <CODE>start</CODE> method.
- * <p>
- * A <CODE>CommunicatorServer</CODE> has a <CODE>State</CODE> attribute
- * which reflects its  activity.
- * <p>
- * <TABLE>
- * <TR><TH>CommunicatorServer</TH>      <TH>State</TH></TR>
- * <TR><TD><CODE>stopped</CODE></TD>    <TD><CODE>OFFLINE</CODE></TD></TR>
- * <TR><TD><CODE>starting</CODE></TD>    <TD><CODE>STARTING</CODE></TD></TR>
- * <TR><TD><CODE>running</CODE></TD>     <TD><CODE>ONLINE</CODE></TD></TR>
- * <TR><TD><CODE>stopping</CODE></TD>     <TD><CODE>STOPPING</CODE></TD></TR>
- * </TABLE>
- * <p>
- * The <CODE>STARTING</CODE> state marks the transition
- * from <CODE>OFFLINE</CODE> to <CODE>ONLINE</CODE>.
- * <p>
- * The <CODE>STOPPING</CODE> state marks the transition from
- * <CODE>ONLINE</CODE> to <CODE>OFFLINE</CODE>. This occurs when the
- * <CODE>CommunicatorServer</CODE> is finishing or interrupting active
- * requests.
- * <p>
- * When a <CODE>CommunicatorServer</CODE> is unregistered from the MBeanServer,
- * it is stopped automatically.
- * <p>
- * When the value of the <CODE>State</CODE> attribute changes the
- * <CODE>CommunicatorServer</CODE> sends a
- * <tt>{@link javax.management.AttributeChangeNotification}</tt> to the
- * registered listeners, if any.
- *
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- */
-
-public abstract class CommunicatorServer
-    implements Runnable, MBeanRegistration, NotificationBroadcaster,
-               CommunicatorServerMBean {
-
-    //
-    // States of a CommunicatorServer
-    //
-
-    /**
-     * Represents an <CODE>ONLINE</CODE> state.
-     */
-    public static final int ONLINE = 0 ;
-
-    /**
-     * Represents an <CODE>OFFLINE</CODE> state.
-     */
-    public static final int OFFLINE = 1 ;
-
-    /**
-     * Represents a <CODE>STOPPING</CODE> state.
-     */
-    public static final int STOPPING = 2 ;
-
-    /**
-     * Represents a <CODE>STARTING</CODE> state.
-     */
-    public static final int STARTING = 3 ;
-
-    //
-    // Types of connectors.
-    //
-
-    /**
-     * Indicates that it is an RMI connector type.
-     */
-    //public static final int RMI_TYPE = 1 ;
-
-    /**
-     * Indicates that it is an HTTP connector type.
-     */
-    //public static final int HTTP_TYPE = 2 ;
-
-    /**
-     * Indicates that it is an HTML connector type.
-     */
-    //public static final int HTML_TYPE = 3 ;
-
-    /**
-     * Indicates that it is an SNMP connector type.
-     */
-    public static final int SNMP_TYPE = 4 ;
-
-    /**
-     * Indicates that it is an HTTPS connector type.
-     */
-    //public static final int HTTPS_TYPE = 5 ;
-
-    //
-    // Package variables
-    //
-
-    /**
-     * The state of the connector server.
-     */
-     transient volatile int state = OFFLINE ;
-
-    /**
-     * The object name of the connector server.
-     * @serial
-     */
-    ObjectName objectName ;
-
-    MBeanServer topMBS;
-    MBeanServer bottomMBS;
-
-    /**
-     */
-    transient String dbgTag = null ;
-
-    /**
-     * The maximum number of clients that the CommunicatorServer can
-     * process concurrently.
-     * @serial
-     */
-    int maxActiveClientCount = 1 ;
-
-    /**
-     */
-    transient int servedClientCount = 0 ;
-
-    /**
-     * The host name used by this CommunicatorServer.
-     * @serial
-     */
-    String host = null ;
-
-    /**
-     * The port number used by this CommunicatorServer.
-     * @serial
-     */
-    int port = -1 ;
-
-
-    //
-    // Private fields
-    //
-
-    /* This object controls access to the "state" and "interrupted" variables.
-       If held at the same time as the lock on "this", the "this" lock must
-       be taken first.  */
-    private transient Object stateLock = new Object();
-
-    private transient Vector<ClientHandler>
-            clientHandlerVector = new Vector<ClientHandler>() ;
-
-    private transient Thread fatherThread = Thread.currentThread() ;
-    private transient Thread mainThread = null ;
-
-    private volatile boolean stopRequested = false ;
-    private boolean interrupted = false;
-    private transient Exception startException = null;
-
-    // Notifs count, broadcaster and info
-    private transient long notifCount = 0;
-    private transient NotificationBroadcasterSupport notifBroadcaster =
-        new NotificationBroadcasterSupport();
-    private transient MBeanNotificationInfo[] notifInfos = null;
-
-
-    /**
-     * Instantiates a <CODE>CommunicatorServer</CODE>.
-     *
-     * @param connectorType Indicates the connector type. Possible values are:
-     * SNMP_TYPE.
-     *
-     * @exception <CODE>java.lang.IllegalArgumentException</CODE>
-     *            This connector type is not correct.
-     */
-    public CommunicatorServer(int connectorType)
-        throws IllegalArgumentException {
-        switch (connectorType) {
-        case SNMP_TYPE :
-            //No op. int Type deciding debugging removed.
-            break;
-        default:
-            throw new IllegalArgumentException("Invalid connector Type") ;
-        }
-        dbgTag = makeDebugTag() ;
-    }
-
-    protected Thread createMainThread() {
-        return new Thread (this, makeThreadName());
-    }
-
-    /**
-     * Starts this <CODE>CommunicatorServer</CODE>.
-     * <p>
-     * Has no effect if this <CODE>CommunicatorServer</CODE> is
-     * <CODE>ONLINE</CODE> or <CODE>STOPPING</CODE>.
-     * @param timeout Time in ms to wait for the connector to start.
-     *        If <code>timeout</code> is positive, wait for at most
-     *        the specified time. An infinite timeout can be specified
-     *        by passing a <code>timeout</code> value equals
-     *        <code>Long.MAX_VALUE</code>. In that case the method
-     *        will wait until the connector starts or fails to start.
-     *        If timeout is negative or zero, returns as soon as possible
-     *        without waiting.
-     * @exception CommunicationException if the connectors fails to start.
-     * @exception InterruptedException if the thread is interrupted or the
-     *            timeout expires.
-     */
-    public void start(long timeout)
-        throws CommunicationException, InterruptedException {
-        boolean start;
-
-        synchronized (stateLock) {
-            if (state == STOPPING) {
-                // Fix for bug 4352451:
-                //     "java.net.BindException: Address in use".
-                waitState(OFFLINE, 60000);
-            }
-            start = (state == OFFLINE);
-            if (start) {
-                changeState(STARTING);
-                stopRequested = false;
-                interrupted = false;
-                startException = null;
-            }
-        }
-
-        if (!start) {
-            if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
-                SNMP_ADAPTOR_LOGGER.logp(Level.FINER, dbgTag,
-                    "start","Connector is not OFFLINE");
-            }
-            return;
-        }
-
-        if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
-            SNMP_ADAPTOR_LOGGER.logp(Level.FINER, dbgTag,
-                "start","--> Start connector ");
-        }
-
-        mainThread = createMainThread();
-
-        mainThread.start() ;
-
-        if (timeout > 0) waitForStart(timeout);
-    }
-
-    /**
-     * Starts this <CODE>CommunicatorServer</CODE>.
-     * <p>
-     * Has no effect if this <CODE>CommunicatorServer</CODE> is
-     * <CODE>ONLINE</CODE> or <CODE>STOPPING</CODE>.
-     */
-    public void start() {
-        try {
-            start(0);
-        } catch (InterruptedException x) {
-            // cannot happen because of `0'
-            if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
-                SNMP_ADAPTOR_LOGGER.logp(Level.FINER, dbgTag,
-                    "start","interrupted", x);
-            }
-        }
-    }
-
-    /**
-     * Stops this <CODE>CommunicatorServer</CODE>.
-     * <p>
-     * Has no effect if this <CODE>CommunicatorServer</CODE> is
-     * <CODE>OFFLINE</CODE> or  <CODE>STOPPING</CODE>.
-     */
-    public void stop() {
-        synchronized (stateLock) {
-            if (state == OFFLINE || state == STOPPING) {
-                if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
-                    SNMP_ADAPTOR_LOGGER.logp(Level.FINER, dbgTag,
-                        "stop","Connector is not ONLINE");
-                }
-                return;
-            }
-            changeState(STOPPING);
-            //
-            // Stop the connector thread
-            //
-            if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
-                SNMP_ADAPTOR_LOGGER.logp(Level.FINER, dbgTag,
-                    "stop","Interrupt main thread");
-            }
-            stopRequested = true ;
-            if (!interrupted) {
-                interrupted = true;
-                mainThread.interrupt();
-            }
-        }
-
-        //
-        // Call terminate on each active client handler
-        //
-        if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
-            SNMP_ADAPTOR_LOGGER.logp(Level.FINER, dbgTag,
-                "stop","terminateAllClient");
-        }
-        terminateAllClient() ;
-
-        // ----------------------
-        // changeState
-        // ----------------------
-        synchronized (stateLock) {
-            if (state == STARTING)
-                changeState(OFFLINE);
-        }
-    }
-
-    /**
-     * Tests whether the <CODE>CommunicatorServer</CODE> is active.
-     *
-     * @return True if connector is <CODE>ONLINE</CODE>; false otherwise.
-     */
-    public boolean isActive() {
-        synchronized (stateLock) {
-            return (state == ONLINE);
-        }
-    }
-
-    /**
-     * <p>Waits until either the State attribute of this MBean equals the
-     * specified <VAR>wantedState</VAR> parameter,
-     * or the specified  <VAR>timeOut</VAR> has elapsed.
-     * The method <CODE>waitState</CODE> returns with a boolean value
-     * indicating whether the specified <VAR>wantedState</VAR> parameter
-     * equals the value of this MBean's State attribute at the time the method
-     * terminates.</p>
-     *
-     * <p>Two special cases for the <VAR>timeOut</VAR> parameter value are:</p>
-     * <UL><LI> if <VAR>timeOut</VAR> is negative then <CODE>waitState</CODE>
-     *     returns immediately (i.e. does not wait at all),</LI>
-     * <LI> if <VAR>timeOut</VAR> equals zero then <CODE>waitState</CODE>
-     *     waits untill the value of this MBean's State attribute
-     *     is the same as the <VAR>wantedState</VAR> parameter (i.e. will wait
-     *     indefinitely if this condition is never met).</LI></UL>
-     *
-     * @param wantedState The value of this MBean's State attribute to wait
-     *        for. <VAR>wantedState</VAR> can be one of:
-     * <ul>
-     * <li><CODE>CommunicatorServer.OFFLINE</CODE>,</li>
-     * <li><CODE>CommunicatorServer.ONLINE</CODE>,</li>
-     * <li><CODE>CommunicatorServer.STARTING</CODE>,</li>
-     * <li><CODE>CommunicatorServer.STOPPING</CODE>.</li>
-     * </ul>
-     * @param timeOut The maximum time to wait for, in milliseconds,
-     *        if positive.
-     * Infinite time out if 0, or no waiting at all if negative.
-     *
-     * @return true if the value of this MBean's State attribute is the
-     *      same as the <VAR>wantedState</VAR> parameter; false otherwise.
-     */
-    public boolean waitState(int wantedState, long timeOut) {
-        if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
-            SNMP_ADAPTOR_LOGGER.logp(Level.FINER, dbgTag,
-                "waitState", wantedState + "(0on,1off,2st) TO=" + timeOut +
-                  " ; current state = " + getStateString());
-        }
-
-        long endTime = 0;
-        if (timeOut > 0)
-            endTime = System.currentTimeMillis() + timeOut;
-
-        synchronized (stateLock) {
-            while (state != wantedState) {
-                if (timeOut < 0) {
-                    if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
-                        SNMP_ADAPTOR_LOGGER.logp(Level.FINER, dbgTag,
-                            "waitState", "timeOut < 0, return without wait");
-                    }
-                    return false;
-                } else {
-                    try {
-                        if (timeOut > 0) {
-                            long toWait = endTime - System.currentTimeMillis();
-                            if (toWait <= 0) {
-                                if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
-                                    SNMP_ADAPTOR_LOGGER.logp(Level.FINER, dbgTag,
-                                        "waitState", "timed out");
-                                }
-                                return false;
-                            }
-                            stateLock.wait(toWait);
-                        } else {  // timeOut == 0
-                            stateLock.wait();
-                        }
-                    } catch (InterruptedException e) {
-                        if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
-                            SNMP_ADAPTOR_LOGGER.logp(Level.FINER, dbgTag,
-                                "waitState", "wait interrupted");
-                        }
-                        return (state == wantedState);
-                    }
-                }
-            }
-            if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
-                SNMP_ADAPTOR_LOGGER.logp(Level.FINER, dbgTag,
-                    "waitState","returning in desired state");
-            }
-            return true;
-        }
-    }
-
-    /**
-     * <p>Waits until the communicator is started or timeout expires.
-     *
-     * @param timeout Time in ms to wait for the connector to start.
-     *        If <code>timeout</code> is positive, wait for at most
-     *        the specified time. An infinite timeout can be specified
-     *        by passing a <code>timeout</code> value equals
-     *        <code>Long.MAX_VALUE</code>. In that case the method
-     *        will wait until the connector starts or fails to start.
-     *        If timeout is negative or zero, returns as soon as possible
-     *        without waiting.
-     *
-     * @exception CommunicationException if the connectors fails to start.
-     * @exception InterruptedException if the thread is interrupted or the
-     *            timeout expires.
-     *
-     */
-    private void waitForStart(long timeout)
-        throws CommunicationException, InterruptedException {
-        if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
-            SNMP_ADAPTOR_LOGGER.logp(Level.FINER, dbgTag,
-                "waitForStart", "Timeout=" + timeout +
-                 " ; current state = " + getStateString());
-        }
-
-        final long startTime = System.currentTimeMillis();
-
-        synchronized (stateLock) {
-            while (state == STARTING) {
-                // Time elapsed since startTime...
-                //
-                final long elapsed = System.currentTimeMillis() - startTime;
-
-                // wait for timeout - elapsed.
-                // A timeout of Long.MAX_VALUE is equivalent to something
-                // like 292271023 years - which is pretty close to
-                // forever as far as we are concerned ;-)
-                //
-                final long remainingTime = timeout-elapsed;
-
-                // If remainingTime is negative, the timeout has elapsed.
-                //
-                if (remainingTime < 0) {
-                    if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
-                        SNMP_ADAPTOR_LOGGER.logp(Level.FINER, dbgTag,
-                            "waitForStart", "timeout < 0, return without wait");
-                    }
-                    throw new InterruptedException("Timeout expired");
-                }
-
-                // We're going to wait until someone notifies on the
-                // the stateLock object, or until the timeout expires,
-                // or until the thread is interrupted.
-                //
-                try {
-                    stateLock.wait(remainingTime);
-                } catch (InterruptedException e) {
-                    if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
-                        SNMP_ADAPTOR_LOGGER.logp(Level.FINER, dbgTag,
-                            "waitForStart", "wait interrupted");
-                    }
-
-                    // If we are now ONLINE, then no need to rethrow the
-                    // exception... we're simply going to exit the while
-                    // loop. Otherwise, throw the InterruptedException.
-                    //
-                    if (state != ONLINE) throw e;
-                }
-            }
-
-            // We're no longer in STARTING state
-            //
-            if (state == ONLINE) {
-                // OK, we're started, everything went fine, just return
-                //
-                if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
-                    SNMP_ADAPTOR_LOGGER.logp(Level.FINER, dbgTag,
-                        "waitForStart", "started");
-                }
-                return;
-            } else if (startException instanceof CommunicationException) {
-                // There was some exception during the starting phase.
-                // Cast and throw...
-                //
-                throw (CommunicationException)startException;
-            } else if (startException instanceof InterruptedException) {
-                // There was some exception during the starting phase.
-                // Cast and throw...
-                //
-                throw (InterruptedException)startException;
-            } else if (startException != null) {
-                // There was some exception during the starting phase.
-                // Wrap and throw...
-                //
-                throw new CommunicationException(startException,
-                                                 "Failed to start: "+
-                                                 startException);
-            } else {
-                // We're not ONLINE, and there's no exception...
-                // Something went wrong but we don't know what...
-                //
-                throw new CommunicationException("Failed to start: state is "+
-                                                 getStringForState(state));
-            }
-        }
-    }
-
-    /**
-     * Gets the state of this <CODE>CommunicatorServer</CODE> as an integer.
-     *
-     * @return <CODE>ONLINE</CODE>, <CODE>OFFLINE</CODE>,
-     *         <CODE>STARTING</CODE> or <CODE>STOPPING</CODE>.
-     */
-    public int getState() {
-        synchronized (stateLock) {
-            return state ;
-        }
-    }
-
-    /**
-     * Gets the state of this <CODE>CommunicatorServer</CODE> as a string.
-     *
-     * @return One of the strings "ONLINE", "OFFLINE", "STARTING" or
-     *         "STOPPING".
-     */
-    public String getStateString() {
-        return getStringForState(state) ;
-    }
-
-    /**
-     * Gets the host name used by this <CODE>CommunicatorServer</CODE>.
-     *
-     * @return The host name used by this <CODE>CommunicatorServer</CODE>.
-     */
-    public String getHost() {
-        try {
-            host = InetAddress.getLocalHost().getHostName();
-        } catch (Exception e) {
-            host = "Unknown host";
-        }
-        return host ;
-    }
-
-    /**
-     * Gets the port number used by this <CODE>CommunicatorServer</CODE>.
-     *
-     * @return The port number used by this <CODE>CommunicatorServer</CODE>.
-     */
-    public int getPort() {
-        synchronized (stateLock) {
-            return port ;
-        }
-    }
-
-    /**
-     * Sets the port number used by this <CODE>CommunicatorServer</CODE>.
-     *
-     * @param port The port number used by this
-     *             <CODE>CommunicatorServer</CODE>.
-     *
-     * @exception java.lang.IllegalStateException This method has been invoked
-     * while the communicator was ONLINE or STARTING.
-     */
-    public void setPort(int port) throws java.lang.IllegalStateException {
-        synchronized (stateLock) {
-            if ((state == ONLINE) || (state == STARTING))
-                throw new IllegalStateException("Stop server before " +
-                                                "carrying out this operation");
-            this.port = port;
-            dbgTag = makeDebugTag();
-        }
-    }
-
-    /**
-     * Gets the protocol being used by this <CODE>CommunicatorServer</CODE>.
-     * @return The protocol as a string.
-     */
-    public abstract String getProtocol() ;
-
-    /**
-     * Gets the number of clients that have been processed by this
-     * <CODE>CommunicatorServer</CODE>  since its creation.
-     *
-     * @return The number of clients handled by this
-     *         <CODE>CommunicatorServer</CODE>
-     *         since its creation. This counter is not reset by the
-     *         <CODE>stop</CODE> method.
-     */
-    int getServedClientCount() {
-        return servedClientCount ;
-    }
-
-    /**
-     * Gets the number of clients currently being processed by this
-     * <CODE>CommunicatorServer</CODE>.
-     *
-     * @return The number of clients currently being processed by this
-     *         <CODE>CommunicatorServer</CODE>.
-     */
-    int getActiveClientCount() {
-        int result = clientHandlerVector.size() ;
-        return result ;
-    }
-
-    /**
-     * Gets the maximum number of clients that this
-     * <CODE>CommunicatorServer</CODE> can  process concurrently.
-     *
-     * @return The maximum number of clients that this
-     *         <CODE>CommunicatorServer</CODE> can
-     *         process concurrently.
-     */
-    int getMaxActiveClientCount() {
-        return maxActiveClientCount ;
-    }
-
-    /**
-     * Sets the maximum number of clients this
-     * <CODE>CommunicatorServer</CODE> can process concurrently.
-     *
-     * @param c The number of clients.
-     *
-     * @exception java.lang.IllegalStateException This method has been invoked
-     * while the communicator was ONLINE or STARTING.
-     */
-    void setMaxActiveClientCount(int c)
-        throws java.lang.IllegalStateException {
-        synchronized (stateLock) {
-            if ((state == ONLINE) || (state == STARTING)) {
-                throw new IllegalStateException(
-                          "Stop server before carrying out this operation");
-            }
-            maxActiveClientCount = c ;
-        }
-    }
-
-    /**
-     * For SNMP Runtime internal use only.
-     */
-    void notifyClientHandlerCreated(ClientHandler h) {
-        clientHandlerVector.addElement(h) ;
-    }
-
-    /**
-     * For SNMP Runtime internal use only.
-     */
-    synchronized void notifyClientHandlerDeleted(ClientHandler h) {
-        clientHandlerVector.removeElement(h);
-        notifyAll();
-    }
-
-    /**
-     * The number of times the communicator server will attempt
-     * to bind before giving up.
-     **/
-    protected int getBindTries() {
-        return 50;
-    }
-
-    /**
-     * The delay, in ms, during which the communicator server will sleep before
-     * attempting to bind again.
-     **/
-    protected long getBindSleepTime() {
-        return 100;
-    }
-
-    /**
-     * For SNMP Runtime internal use only.
-     * <p>
-     * The <CODE>run</CODE> method executed by this connector's main thread.
-     */
-    public void run() {
-
-        // Fix jaw.00667.B
-        // It seems that the init of "i" and "success"
-        // need to be done outside the "try" clause...
-        // A bug in Java 2 production release ?
-        //
-        int i = 0;
-        boolean success = false;
-
-        // ----------------------
-        // Bind
-        // ----------------------
-        try {
-            // Fix for bug 4352451: "java.net.BindException: Address in use".
-            //
-            final int  bindRetries = getBindTries();
-            final long sleepTime   = getBindSleepTime();
-            while (i < bindRetries && !success) {
-                try {
-                    // Try socket connection.
-                    //
-                    doBind();
-                    success = true;
-                } catch (CommunicationException ce) {
-                    i++;
-                    try {
-                        Thread.sleep(sleepTime);
-                    } catch (InterruptedException ie) {
-                        throw ie;
-                    }
-                }
-            }
-            // Retry last time to get correct exception.
-            //
-            if (!success) {
-                // Try socket connection.
-                //
-                doBind();
-            }
-
-        } catch(Exception x) {
-            if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, dbgTag,
-                    "run", "Got unexpected exception", x);
-            }
-            synchronized(stateLock) {
-                startException = x;
-                changeState(OFFLINE);
-            }
-            if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
-                SNMP_ADAPTOR_LOGGER.logp(Level.FINER, dbgTag,
-                    "run","State is OFFLINE");
-            }
-            doError(x);
-            return;
-        }
-
-        try {
-            // ----------------------
-            // State change
-            // ----------------------
-            changeState(ONLINE) ;
-            if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
-                SNMP_ADAPTOR_LOGGER.logp(Level.FINER, dbgTag,
-                    "run","State is ONLINE");
-            }
-
-            // ----------------------
-            // Main loop
-            // ----------------------
-            while (!stopRequested) {
-                servedClientCount++;
-                doReceive() ;
-                waitIfTooManyClients() ;
-                doProcess() ;
-            }
-            if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
-                SNMP_ADAPTOR_LOGGER.logp(Level.FINER, dbgTag,
-                    "run","Stop has been requested");
-            }
-
-        } catch(InterruptedException x) {
-            if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, dbgTag,
-                    "run","Interrupt caught");
-            }
-            changeState(STOPPING);
-        } catch(Exception x) {
-            if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, dbgTag,
-                    "run","Got unexpected exception", x);
-            }
-            changeState(STOPPING);
-        } finally {
-            synchronized (stateLock) {
-                interrupted = true;
-                Thread.currentThread().interrupted();
-            }
-
-            // ----------------------
-            // unBind
-            // ----------------------
-            try {
-                doUnbind() ;
-                waitClientTermination() ;
-                changeState(OFFLINE);
-                if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
-                    SNMP_ADAPTOR_LOGGER.logp(Level.FINER, dbgTag,
-                        "run","State is OFFLINE");
-                }
-            } catch(Exception x) {
-                if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                    SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, dbgTag,
-                        "run","Got unexpected exception", x);
-                }
-                changeState(OFFLINE);
-            }
-
-        }
-    }
-
-    /**
-     */
-    protected abstract void doError(Exception e) throws CommunicationException;
-
-    //
-    // To be defined by the subclass.
-    //
-    // Each method below is called by run() and must be subclassed.
-    // If the method sends an exception (Communication or Interrupt), this
-    // will end up the run() method and switch the connector offline.
-    //
-    // If it is a CommunicationException, run() will call
-    //       Debug.printException().
-    //
-    // All these methods should propagate the InterruptedException to inform
-    // run() that the connector must be switch OFFLINE.
-    //
-    //
-    //
-    // doBind() should do all what is needed before calling doReceive().
-    // If doBind() throws an exception, doUnbind() is not to be called
-    // and run() ends up.
-    //
-
-    /**
-     */
-    protected abstract void doBind()
-        throws CommunicationException, InterruptedException ;
-
-    /**
-     * <CODE>doReceive()</CODE> should block until a client is available.
-     * If this method throws an exception, <CODE>doProcess()</CODE> is not
-     * called but <CODE>doUnbind()</CODE> is called then <CODE>run()</CODE>
-     * stops.
-     */
-    protected abstract void doReceive()
-        throws CommunicationException, InterruptedException ;
-
-    /**
-     * <CODE>doProcess()</CODE> is called after <CODE>doReceive()</CODE>:
-     * it should process the requests of the incoming client.
-     * If it throws an exception, <CODE>doUnbind()</CODE> is called and
-     * <CODE>run()</CODE> stops.
-     */
-    protected abstract void doProcess()
-        throws CommunicationException, InterruptedException ;
-
-    /**
-     * <CODE>doUnbind()</CODE> is called whenever the connector goes
-     * <CODE>OFFLINE</CODE>, except if <CODE>doBind()</CODE> has thrown an
-     * exception.
-     */
-    protected abstract void doUnbind()
-        throws CommunicationException, InterruptedException ;
-
-    /**
-     * Get the <code>MBeanServer</code> object to which incoming requests are
-     * sent.  This is either the MBean server in which this connector is
-     * registered, or an <code>MBeanServerForwarder</code> leading to that
-     * server.
-     */
-    public synchronized MBeanServer getMBeanServer() {
-        return topMBS;
-    }
-
-    /**
-     * Set the <code>MBeanServer</code> object to which incoming
-     * requests are sent.  This must be either the MBean server in
-     * which this connector is registered, or an
-     * <code>MBeanServerForwarder</code> leading to that server.  An
-     * <code>MBeanServerForwarder</code> <code>mbsf</code> leads to an
-     * MBean server <code>mbs</code> if
-     * <code>mbsf.getMBeanServer()</code> is either <code>mbs</code>
-     * or an <code>MBeanServerForwarder</code> leading to
-     * <code>mbs</code>.
-     *
-     * @exception IllegalArgumentException if <code>newMBS</code> is neither
-     * the MBean server in which this connector is registered nor an
-     * <code>MBeanServerForwarder</code> leading to that server.
-     *
-     * @exception IllegalStateException This method has been invoked
-     * while the communicator was ONLINE or STARTING.
-     */
-    public synchronized void setMBeanServer(MBeanServer newMBS)
-            throws IllegalArgumentException, IllegalStateException {
-        synchronized (stateLock) {
-            if (state == ONLINE || state == STARTING)
-                throw new IllegalStateException("Stop server before " +
-                                                "carrying out this operation");
-        }
-        final String error =
-            "MBeanServer argument must be MBean server where this " +
-            "server is registered, or an MBeanServerForwarder " +
-            "leading to that server";
-        Vector<MBeanServer> seenMBS = new Vector<MBeanServer>();
-        for (MBeanServer mbs = newMBS;
-             mbs != bottomMBS;
-             mbs = ((MBeanServerForwarder) mbs).getMBeanServer()) {
-            if (!(mbs instanceof MBeanServerForwarder))
-                throw new IllegalArgumentException(error);
-            if (seenMBS.contains(mbs))
-                throw new IllegalArgumentException("MBeanServerForwarder " +
-                                                   "loop");
-            seenMBS.addElement(mbs);
-        }
-        topMBS = newMBS;
-    }
-
-    //
-    // To be called by the subclass if needed
-    //
-    /**
-     * For internal use only.
-     */
-    ObjectName getObjectName() {
-        return objectName ;
-    }
-
-    /**
-     * For internal use only.
-     */
-    void changeState(int newState) {
-        int oldState;
-        synchronized (stateLock) {
-            if (state == newState)
-                return;
-            oldState = state;
-            state = newState;
-            stateLock.notifyAll();
-        }
-        sendStateChangeNotification(oldState, newState);
-    }
-
-    /**
-     * Returns the string used in debug traces.
-     */
-    String makeDebugTag() {
-        return "CommunicatorServer["+ getProtocol() + ":" + getPort() + "]" ;
-    }
-
-    /**
-     * Returns the string used to name the connector thread.
-     */
-    String makeThreadName() {
-        String result ;
-
-        if (objectName == null)
-            result = "CommunicatorServer" ;
-        else
-            result = objectName.toString() ;
-
-        return result ;
-    }
-
-    /**
-     * This method blocks if there are too many active clients.
-     * Call to <CODE>wait()</CODE> is terminated when a client handler
-     * thread calls <CODE>notifyClientHandlerDeleted(this)</CODE> ;
-     */
-    private synchronized void waitIfTooManyClients()
-        throws InterruptedException {
-        while (getActiveClientCount() >= maxActiveClientCount) {
-            if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
-                SNMP_ADAPTOR_LOGGER.logp(Level.FINER, dbgTag,
-                    "waitIfTooManyClients","Waiting for a client to terminate");
-            }
-            wait();
-        }
-    }
-
-    /**
-     * This method blocks until there is no more active client.
-     */
-    private void waitClientTermination() {
-        int s = clientHandlerVector.size() ;
-        if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
-            if (s >= 1) {
-                SNMP_ADAPTOR_LOGGER.logp(Level.FINER, dbgTag,
-                "waitClientTermination","waiting for " +
-                      s + " clients to terminate");
-            }
-        }
-
-        // The ClientHandler will remove themselves from the
-        // clientHandlerVector at the end of their run() method, by
-        // calling notifyClientHandlerDeleted().
-        // Since the clientHandlerVector is modified by the ClientHandler
-        // threads we must avoid using Enumeration or Iterator to loop
-        // over this array. We must also take care of NoSuchElementException
-        // which could be thrown if the last ClientHandler removes itself
-        // between the call to clientHandlerVector.isEmpty() and the call
-        // to clientHandlerVector.firstElement().
-        // What we *MUST NOT DO* is locking the clientHandlerVector, because
-        // this would most probably cause a deadlock.
-        //
-        while (! clientHandlerVector.isEmpty()) {
-            try {
-                clientHandlerVector.firstElement().join();
-            } catch (NoSuchElementException x) {
-                if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
-                    SNMP_ADAPTOR_LOGGER.logp(Level.FINER, dbgTag,
-                        "waitClientTermination","No elements left",  x);
-                }
-            }
-        }
-
-        if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
-            if (s >= 1) {
-                SNMP_ADAPTOR_LOGGER.logp(Level.FINER, dbgTag,
-                    "waitClientTermination","Ok, let's go...");
-            }
-        }
-    }
-
-    /**
-     * Call <CODE>interrupt()</CODE> on each pending client.
-     */
-    private void terminateAllClient() {
-        final int s = clientHandlerVector.size() ;
-        if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
-            if (s >= 1) {
-                SNMP_ADAPTOR_LOGGER.logp(Level.FINER, dbgTag,
-                    "terminateAllClient","Interrupting " + s + " clients");
-            }
-        }
-
-        // The ClientHandler will remove themselves from the
-        // clientHandlerVector at the end of their run() method, by
-        // calling notifyClientHandlerDeleted().
-        // Since the clientHandlerVector is modified by the ClientHandler
-        // threads we must avoid using Enumeration or Iterator to loop
-        // over this array.
-        // We cannot use the same logic here than in waitClientTermination()
-        // because there is no guarantee that calling interrupt() on the
-        // ClientHandler will actually terminate the ClientHandler.
-        // Since we do not want to wait for the actual ClientHandler
-        // termination, we cannot simply loop over the array until it is
-        // empty (this might result in calling interrupt() endlessly on
-        // the same client handler. So what we do is simply take a snapshot
-        // copy of the vector and loop over the copy.
-        // What we *MUST NOT DO* is locking the clientHandlerVector, because
-        // this would most probably cause a deadlock.
-        //
-        final  ClientHandler[] handlers =
-                clientHandlerVector.toArray(new ClientHandler[0]);
-         for (ClientHandler h : handlers) {
-             try {
-                 h.interrupt() ;
-             } catch (Exception x) {
-                 if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
-                     SNMP_ADAPTOR_LOGGER.logp(Level.FINER, dbgTag,
-                             "terminateAllClient",
-                             "Failed to interrupt pending request. " +
-                             "Ignore the exception.", x);
-                 }
-            }
-        }
-    }
-
-    /**
-     * Controls the way the CommunicatorServer service is deserialized.
-     */
-    private void readObject(ObjectInputStream stream)
-        throws IOException, ClassNotFoundException {
-
-        // Call the default deserialization of the object.
-        //
-        stream.defaultReadObject();
-
-        // Call the specific initialization for the CommunicatorServer service.
-        // This is for transient structures to be initialized to specific
-        // default values.
-        //
-        stateLock = new Object();
-        state = OFFLINE;
-        stopRequested = false;
-        servedClientCount = 0;
-        clientHandlerVector = new Vector<ClientHandler>();
-        fatherThread = Thread.currentThread();
-        mainThread = null;
-        notifCount = 0;
-        notifInfos = null;
-        notifBroadcaster = new NotificationBroadcasterSupport();
-        dbgTag = makeDebugTag();
-    }
-
-
-    //
-    // NotificationBroadcaster
-    //
-
-    /**
-     * Adds a listener for the notifications emitted by this
-     * CommunicatorServer.
-     * There is only one type of notifications sent by the CommunicatorServer:
-     * they are <tt>{@link javax.management.AttributeChangeNotification}</tt>,
-     * sent when the <tt>State</tt> attribute of this CommunicatorServer
-     * changes.
-     *
-     * @param listener The listener object which will handle the emitted
-     *        notifications.
-     * @param filter The filter object. If filter is null, no filtering
-     *        will be performed before handling notifications.
-     * @param handback An object which will be sent back unchanged to the
-     *        listener when a notification is emitted.
-     *
-     * @exception IllegalArgumentException Listener parameter is null.
-     */
-    public void addNotificationListener(NotificationListener listener,
-                                        NotificationFilter filter,
-                                        Object handback)
-        throws java.lang.IllegalArgumentException {
-
-        if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-            SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, dbgTag,
-                "addNotificationListener","Adding listener "+ listener +
-                  " with filter "+ filter + " and handback "+ handback);
-        }
-        notifBroadcaster.addNotificationListener(listener, filter, handback);
-    }
-
-    /**
-     * Removes the specified listener from this CommunicatorServer.
-     * Note that if the listener has been registered with different
-     * handback objects or notification filters, all entries corresponding
-     * to the listener will be removed.
-     *
-     * @param listener The listener object to be removed.
-     *
-     * @exception ListenerNotFoundException The listener is not registered.
-     */
-    public void removeNotificationListener(NotificationListener listener)
-        throws ListenerNotFoundException {
-
-        if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-            SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, dbgTag,
-                "removeNotificationListener","Removing listener "+ listener);
-        }
-        notifBroadcaster.removeNotificationListener(listener);
-    }
-
-    /**
-     * Returns an array of MBeanNotificationInfo objects describing
-     * the notification types sent by this CommunicatorServer.
-     * There is only one type of notifications sent by the CommunicatorServer:
-     * it is <tt>{@link javax.management.AttributeChangeNotification}</tt>,
-     * sent when the <tt>State</tt> attribute of this CommunicatorServer
-     * changes.
-     */
-    public MBeanNotificationInfo[] getNotificationInfo() {
-
-        // Initialize notifInfos on first call to getNotificationInfo()
-        //
-        if (notifInfos == null) {
-            notifInfos = new MBeanNotificationInfo[1];
-            String[] notifTypes = {
-                AttributeChangeNotification.ATTRIBUTE_CHANGE};
-            notifInfos[0] = new MBeanNotificationInfo( notifTypes,
-                     AttributeChangeNotification.class.getName(),
-                     "Sent to notify that the value of the State attribute "+
-                     "of this CommunicatorServer instance has changed.");
-        }
-
-        return notifInfos;
-    }
-
-    /**
-     *
-     */
-    private void sendStateChangeNotification(int oldState, int newState) {
-
-        String oldStateString = getStringForState(oldState);
-        String newStateString = getStringForState(newState);
-        String message = new StringBuffer().append(dbgTag)
-            .append(" The value of attribute State has changed from ")
-            .append(oldState).append(" (").append(oldStateString)
-            .append(") to ").append(newState).append(" (")
-            .append(newStateString).append(").").toString();
-
-        notifCount++;
-        AttributeChangeNotification notif =
-            new AttributeChangeNotification(this,    // source
-                         notifCount,                 // sequence number
-                         System.currentTimeMillis(), // time stamp
-                         message,                    // message
-                         "State",                    // attribute name
-                         "int",                      // attribute type
-                         new Integer(oldState),      // old value
-                         new Integer(newState) );    // new value
-        if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-            SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, dbgTag,
-                "sendStateChangeNotification","Sending AttributeChangeNotification #"
-                    + notifCount + " with message: "+ message);
-        }
-        notifBroadcaster.sendNotification(notif);
-    }
-
-    /**
-     *
-     */
-    private static String getStringForState(int s) {
-        switch (s) {
-        case ONLINE:   return "ONLINE";
-        case STARTING: return "STARTING";
-        case OFFLINE:  return "OFFLINE";
-        case STOPPING: return "STOPPING";
-        default:       return "UNDEFINED";
-        }
-    }
-
-
-    //
-    // MBeanRegistration
-    //
-
-    /**
-     * Preregister method of connector.
-     *
-     *@param server The <CODE>MBeanServer</CODE> in which the MBean will
-     *       be registered.
-     *@param name The object name of the MBean.
-     *
-     *@return  The name of the MBean registered.
-     *
-     *@exception java.langException This exception should be caught by
-     *           the <CODE>MBeanServer</CODE> and re-thrown
-     *           as an <CODE>MBeanRegistrationException</CODE>.
-     */
-    public ObjectName preRegister(MBeanServer server, ObjectName name)
-            throws java.lang.Exception {
-        objectName = name;
-        synchronized (this) {
-            if (bottomMBS != null) {
-                throw new IllegalArgumentException("connector already " +
-                                                   "registered in an MBean " +
-                                                   "server");
-            }
-            topMBS = bottomMBS = server;
-        }
-        dbgTag = makeDebugTag();
-        return name;
-    }
-
-    /**
-     *
-     *@param registrationDone Indicates whether or not the MBean has been
-     *       successfully registered in the <CODE>MBeanServer</CODE>.
-     *       The value false means that the registration phase has failed.
-     */
-    public void postRegister(Boolean registrationDone) {
-        if (!registrationDone.booleanValue()) {
-            synchronized (this) {
-                topMBS = bottomMBS = null;
-            }
-        }
-    }
-
-    /**
-     * Stop the connector.
-     *
-     * @exception java.langException This exception should be caught by
-     *            the <CODE>MBeanServer</CODE> and re-thrown
-     *            as an <CODE>MBeanRegistrationException</CODE>.
-     */
-    public void preDeregister() throws java.lang.Exception {
-        synchronized (this) {
-            topMBS = bottomMBS = null;
-        }
-        objectName = null ;
-        final int cstate = getState();
-        if ((cstate == ONLINE) || ( cstate == STARTING)) {
-            stop() ;
-        }
-    }
-
-    /**
-     * Do nothing.
-     */
-    public void postDeregister(){
-    }
-
-    /**
-     * Load a class using the default loader repository
-     **/
-    Class loadClass(String className)
-        throws ClassNotFoundException {
-        try {
-            return Class.forName(className);
-        } catch (ClassNotFoundException e) {
-            final ClassLoaderRepository clr =
-                MBeanServerFactory.getClassLoaderRepository(bottomMBS);
-            if (clr == null) throw new ClassNotFoundException(className);
-            return clr.loadClass(className);
-        }
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/daemon/CommunicatorServerMBean.java b/ojluni/src/main/java/com/sun/jmx/snmp/daemon/CommunicatorServerMBean.java
deleted file mode 100755
index a9ecbf4..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/daemon/CommunicatorServerMBean.java
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
- * Copyright (c) 1999, 2007, 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.jmx.snmp.daemon;
-
-
-
-/**
- * Defines generic behaviour for the server
- * part of a connector or an adaptor. Most connectors or adaptors extend <CODE>CommunicatorServer</CODE>
- * and inherit this behaviour. Connectors or adaptors that do not fit into this model do not extend
- * <CODE>CommunicatorServer</CODE>.
- * <p>
- * An <CODE>CommunicatorServer</CODE> is an active object, it listens for client requests
- * and processes them in its own thread. When necessary, a <CODE>CommunicatorServer</CODE>
- * creates other threads to process multiple requests concurrently.
- * <p>
- * A <CODE>CommunicatorServer</CODE> object can be stopped by calling the <CODE>stop</CODE>
- * method. When it is stopped, the <CODE>CommunicatorServer</CODE> no longer listens to client
- * requests and no longer holds any thread or communication resources.
- * It can be started again by calling the <CODE>start</CODE> method.
- * <p>
- * A <CODE>CommunicatorServer</CODE> has a <CODE>state</CODE> property which reflects its
- * activity.
- * <p>
- * <TABLE>
- * <TR><TH>CommunicatorServer</TH>            <TH>State</TH></TR>
- * <TR><TD><CODE>stopped</CODE></TD>          <TD><CODE>OFFLINE</CODE></TD></TR>
- * <TR><TD><CODE>starting</CODE></TD>         <TD><CODE>STARTING</CODE></TD></TR>
- * <TR><TD><CODE>running</CODE></TD>          <TD><CODE>ONLINE</CODE></TD></TR>
- * <TR><TD><CODE>stopping</CODE></TD>         <TD><CODE>STOPPING</CODE></TD></TR>
- * </TABLE>
- * <p>
- * The <CODE>STARTING</CODE> state marks the transition from <CODE>OFFLINE</CODE> to
- * <CODE>ONLINE</CODE>.
- * <p>
- * The <CODE>STOPPING</CODE> state marks the transition from <CODE>ONLINE</CODE> to
- * <CODE>OFFLINE</CODE>. This occurs when the <CODE>CommunicatorServer</CODE> is
- * finishing or interrupting active requests.
- * <p>
- * A <CODE>CommunicatorServer</CODE> may serve several clients concurrently. The
- * number of concurrent clients can be limited using the property
- * <CODE>maxActiveClientCount</CODE>. The default value of this property is
- * defined by the subclasses.
- * <p>
- * When a <CODE>CommunicatorServer</CODE> is unregistered from the MBeanServer,
- * it is stopped automatically.
- *
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- */
-
-public interface CommunicatorServerMBean {
-
-    /**
-     * Starts this <CODE>CommunicatorServer</CODE>.
-     * <p>
-     * Has no effect if this <CODE>CommunicatorServer</CODE> is <CODE>ONLINE</CODE> or
-     * <CODE>STOPPING</CODE>.
-     */
-    public void start() ;
-
-    /**
-     * Stops this <CODE>CommunicatorServer</CODE>.
-     * <p>
-     * Has no effect if this <CODE>CommunicatorServer</CODE> is <CODE>OFFLINE</CODE> or
-     * <CODE>STOPPING</CODE>.
-     */
-    public void stop() ;
-
-    /**
-     * Tests if the <CODE>CommunicatorServer</CODE> is active.
-     *
-     * @return True if connector is <CODE>ONLINE</CODE>; false otherwise.
-     */
-    public boolean isActive() ;
-
-    /**
-     * Waits untill either the State attribute of this MBean equals the specified <VAR>state</VAR> parameter,
-     * or the specified  <VAR>timeOut</VAR> has elapsed. The method <CODE>waitState</CODE> returns with a boolean value indicating whether
-     * the specified <VAR>state</VAR> parameter equals the value of this MBean's State attribute at the time the method terminates.
-     *
-     * Two special cases for the <VAR>timeOut</VAR> parameter value are:
-     * <UL><LI> if <VAR>timeOut</VAR> is negative then <CODE>waitState</CODE> returns immediately (i.e. does not wait at all),</LI>
-     * <LI> if <VAR>timeOut</VAR> equals zero then <CODE>waitState</CODE> waits untill the value of this MBean's State attribute
-     * is the same as the <VAR>state</VAR> parameter (i.e. will wait indefinitely if this condition is never met).</LI></UL>
-     *
-     * @param state The value of this MBean's State attribute
-     *        to wait for. <VAR>state</VAR> can be one of:
-     * <ul>
-     * <li><CODE>CommunicatorServer.OFFLINE</CODE>,</li>
-     * <li><CODE>CommunicatorServer.ONLINE</CODE>,</li>
-     * <li><CODE>CommunicatorServer.STARTING</CODE>,</li>
-     * <li><CODE>CommunicatorServer.STOPPING</CODE>.</li>
-     * </ul>
-     * @param timeOut The maximum time to wait for, in
-     *        milliseconds, if positive.
-     * Infinite time out if 0, or no waiting at all if negative.
-     *
-     * @return true if the value of this MBean's State attribute is the
-     *  same as the <VAR>state</VAR> parameter; false otherwise.
-     */
-    public boolean waitState(int state , long timeOut) ;
-
-    /**
-     * Gets the state of this <CODE>CommunicatorServer</CODE> as an integer.
-     *
-     * @return <CODE>ONLINE</CODE>, <CODE>OFFLINE</CODE>, <CODE>STARTING</CODE> or <CODE>STOPPING</CODE>.
-     */
-    public int getState() ;
-
-    /**
-     * Gets the state of this <CODE>CommunicatorServer</CODE> as a string.
-     *
-     * @return One of the strings "ONLINE", "OFFLINE", "STARTING" or "STOPPING".
-     */
-    public String getStateString() ;
-
-    /**
-     * Gets the host name used by this <CODE>CommunicatorServer</CODE>.
-     *
-     * @return The host name used by this <CODE>CommunicatorServer</CODE>.
-     */
-    public String getHost() ;
-
-    /**
-     * Gets the port number used by this <CODE>CommunicatorServer</CODE>.
-     *
-     * @return The port number used by this <CODE>CommunicatorServer</CODE>.
-     */
-    public int getPort() ;
-
-    /**
-     * Sets the port number used by this <CODE>CommunicatorServer</CODE>.
-     *
-     * @param port The port number used by this <CODE>CommunicatorServer</CODE>.
-     *
-     * @exception java.lang.IllegalStateException This method has been invoked
-     * while the communicator was ONLINE or STARTING.
-     */
-    public void setPort(int port) throws java.lang.IllegalStateException ;
-
-    /**
-     * Gets the protocol being used by this <CODE>CommunicatorServer</CODE>.
-     * @return The protocol as a string.
-     */
-    public abstract String getProtocol() ;
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/daemon/SnmpAdaptorServer.java b/ojluni/src/main/java/com/sun/jmx/snmp/daemon/SnmpAdaptorServer.java
deleted file mode 100755
index 03822a0..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/daemon/SnmpAdaptorServer.java
+++ /dev/null
@@ -1,2659 +0,0 @@
-/*
- * Copyright (c) 1997, 2006, 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.jmx.snmp.daemon;
-
-
-// java imports
-//
-import java.util.Vector;
-import java.util.Enumeration;
-import java.util.logging.Level;
-import java.net.DatagramSocket;
-import java.net.DatagramPacket;
-import java.net.InetAddress;
-import java.net.SocketException;
-import java.net.UnknownHostException;
-import java.io.ObjectInputStream;
-import java.io.IOException;
-import java.io.InterruptedIOException;
-
-
-// jmx imports
-//
-import javax.management.MBeanServer;
-import javax.management.MBeanRegistration;
-import javax.management.ObjectName;
-import javax.management.InstanceAlreadyExistsException;
-import static com.sun.jmx.defaults.JmxProperties.SNMP_ADAPTOR_LOGGER;
-import com.sun.jmx.snmp.SnmpIpAddress;
-import com.sun.jmx.snmp.SnmpMessage;
-import com.sun.jmx.snmp.SnmpOid;
-import com.sun.jmx.snmp.SnmpPduFactory;
-import com.sun.jmx.snmp.SnmpPduPacket;
-import com.sun.jmx.snmp.SnmpPduRequest;
-import com.sun.jmx.snmp.SnmpPduTrap;
-import com.sun.jmx.snmp.SnmpTimeticks;
-import com.sun.jmx.snmp.SnmpVarBind;
-import com.sun.jmx.snmp.SnmpVarBindList;
-import com.sun.jmx.snmp.SnmpDefinitions;
-import com.sun.jmx.snmp.SnmpStatusException;
-import com.sun.jmx.snmp.SnmpTooBigException;
-import com.sun.jmx.snmp.InetAddressAcl;
-import com.sun.jmx.snmp.SnmpPeer;
-import com.sun.jmx.snmp.SnmpParameters;
-// SNMP Runtime imports
-//
-import com.sun.jmx.snmp.SnmpPduFactoryBER;
-import com.sun.jmx.snmp.agent.SnmpMibAgent;
-import com.sun.jmx.snmp.agent.SnmpMibHandler;
-import com.sun.jmx.snmp.agent.SnmpUserDataFactory;
-import com.sun.jmx.snmp.agent.SnmpErrorHandlerAgent;
-
-import com.sun.jmx.snmp.IPAcl.SnmpAcl;
-
-import com.sun.jmx.snmp.tasks.ThreadService;
-
-/**
- * Implements an adaptor on top of the SNMP protocol.
- * <P>
- * When this SNMP protocol adaptor is started it creates a datagram socket
- * and is able to receive requests and send traps or inform requests.
- * When it is stopped, the socket is closed and neither requests
- * and nor traps/inform request are processed.
- * <P>
- * The default port number of the socket is 161. This default value can be
- * changed by specifying a port number:
- * <UL>
- * <LI>in the object constructor</LI>
- * <LI>using the {@link com.sun.jmx.snmp.daemon.CommunicatorServer#setPort
- *     setPort} method before starting the adaptor</LI>
- * </UL>
- * The default object name is defined by {@link
- * com.sun.jmx.snmp.ServiceName#DOMAIN com.sun.jmx.snmp.ServiceName.DOMAIN}
- * and {@link com.sun.jmx.snmp.ServiceName#SNMP_ADAPTOR_SERVER
- * com.sun.jmx.snmp.ServiceName.SNMP_ADAPTOR_SERVER}.
- * <P>
- * The SNMP protocol adaptor supports versions 1 and 2 of the SNMP protocol
- * in a stateless way: when it receives a v1 request, it replies with a v1
- * response, when it receives a v2 request it replies with a v2 response.
- * <BR>The method {@link #snmpV1Trap snmpV1Trap} sends traps using SNMP v1
- * format.
- * The method {@link #snmpV2Trap snmpV2Trap} sends traps using SNMP v2 format.
- * The method {@link #snmpInformRequest snmpInformRequest} sends inform
- * requests using SNMP v2 format.
- * <P>
- * To receive data packets, the SNMP protocol adaptor uses a buffer
- * which size can be configured using the property <CODE>bufferSize</CODE>
- * (default value is 1024).
- * Packets which do not fit into the buffer are rejected.
- * Increasing <CODE>bufferSize</CODE> allows the exchange of bigger packets.
- * However, the underlying networking system may impose a limit on the size
- * of UDP packets.
- * Packets which size exceed this limit will be rejected, no matter what
- * the value of <CODE>bufferSize</CODE> actually is.
- * <P>
- * An SNMP protocol adaptor may serve several managers concurrently. The
- * number of concurrent managers can be limited using the property
- * <CODE>maxActiveClientCount</CODE>.
- * <p>
- * The SNMP protocol adaptor specifies a default value (10) for the
- * <CODE>maxActiveClientCount</CODE> property. When the adaptor is stopped,
- * the active requests are interrupted and an error result is sent to
- * the managers.
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- */
-
-public class SnmpAdaptorServer extends CommunicatorServer
-    implements SnmpAdaptorServerMBean, MBeanRegistration, SnmpDefinitions,
-               SnmpMibHandler {
-
-    // PRIVATE VARIABLES
-    //------------------
-
-    /**
-     * Port number for sending SNMP traps.
-     * <BR>The default value is 162.
-     */
-    private int                 trapPort = 162;
-
-    /**
-     * Port number for sending SNMP inform requests.
-     * <BR>The default value is 162.
-     */
-    private int                 informPort = 162;
-
-    /**
-     * The <CODE>InetAddress</CODE> used when creating the datagram socket.
-     * <BR>It is specified when creating the SNMP protocol adaptor.
-     * If not specified, the local host machine is used.
-     */
-    InetAddress address = null;
-
-    /**
-     * The IP address based ACL used by this SNMP protocol adaptor.
-     */
-    private Object ipacl = null;
-
-    /**
-     * The factory object.
-     */
-    private SnmpPduFactory pduFactory = null;
-
-    /**
-     * The user-data factory object.
-     */
-    private SnmpUserDataFactory userDataFactory = null;
-
-    /**
-     * Indicates if the SNMP protocol adaptor sends a response in case
-     * of authentication failure
-     */
-    private boolean authRespEnabled = true;
-
-    /**
-     * Indicates if authentication traps are enabled.
-     */
-    private boolean authTrapEnabled = true;
-
-    /**
-     * The enterprise OID.
-     * <BR>The default value is "1.3.6.1.4.1.42".
-     */
-    private SnmpOid enterpriseOid = new SnmpOid("1.3.6.1.4.1.42");
-
-    /**
-     * The buffer size of the SNMP protocol adaptor.
-     * This buffer size is used for both incoming request and outgoing
-     * inform requests.
-     * <BR>The default value is 1024.
-     */
-    int bufferSize = 1024;
-
-    private transient long            startUpTime     = 0;
-    private transient DatagramSocket  socket          = null;
-    transient DatagramSocket          trapSocket      = null;
-    private transient SnmpSession     informSession   = null;
-    private transient DatagramPacket  packet          = null;
-    transient Vector<SnmpMibAgent>    mibs            = new Vector<SnmpMibAgent>();
-    private transient SnmpMibTree     root;
-
-    /**
-     * Whether ACL must be used.
-     */
-    private transient boolean         useAcl = true;
-
-
-    // SENDING SNMP INFORMS STUFF
-    //---------------------------
-
-    /**
-     * Number of times to try an inform request before giving up.
-     * The default number is 3.
-     */
-    private int maxTries = 3 ;
-
-    /**
-     * The amount of time to wait for an inform response from the manager.
-     * The default amount of time is 3000 millisec.
-     */
-    private int timeout = 3 * 1000 ;
-
-    // VARIABLES REQUIRED FOR IMPLEMENTING SNMP GROUP (MIBII)
-    //-------------------------------------------------------
-
-    /**
-     * The <CODE>snmpOutTraps</CODE> value defined in MIB-II.
-     */
-    int snmpOutTraps=0;
-
-    /**
-     * The <CODE>snmpOutGetResponses</CODE> value defined in MIB-II.
-     */
-    private int snmpOutGetResponses=0;
-
-    /**
-     * The <CODE>snmpOutGenErrs</CODE> value defined in MIB-II.
-     */
-    private int snmpOutGenErrs=0;
-
-    /**
-     * The <CODE>snmpOutBadValues</CODE> value defined in MIB-II.
-     */
-    private int snmpOutBadValues=0;
-
-    /**
-     * The <CODE>snmpOutNoSuchNames</CODE> value defined in MIB-II.
-     */
-    private int snmpOutNoSuchNames=0;
-
-    /**
-     * The <CODE>snmpOutTooBigs</CODE> value defined in MIB-II.
-     */
-    private int snmpOutTooBigs=0;
-
-    /**
-     * The <CODE>snmpOutPkts</CODE> value defined in MIB-II.
-     */
-    int snmpOutPkts=0;
-
-    /**
-     * The <CODE>snmpInASNParseErrs</CODE> value defined in MIB-II.
-     */
-    private int snmpInASNParseErrs=0;
-
-    /**
-     * The <CODE>snmpInBadCommunityUses</CODE> value defined in MIB-II.
-     */
-    private int snmpInBadCommunityUses=0;
-
-    /**
-     * The <CODE>snmpInBadCommunityNames</CODE> value defined in MIB-II.
-     */
-    private int snmpInBadCommunityNames=0;
-
-    /**
-     * The <CODE>snmpInBadVersions</CODE> value defined in MIB-II.
-     */
-    private int snmpInBadVersions=0;
-
-    /**
-     * The <CODE>snmpInGetRequests</CODE> value defined in MIB-II.
-     */
-    private int snmpInGetRequests=0;
-
-    /**
-     * The <CODE>snmpInGetNexts</CODE> value defined in MIB-II.
-     */
-    private int snmpInGetNexts=0;
-
-    /**
-     * The <CODE>snmpInSetRequests</CODE> value defined in MIB-II.
-     */
-    private int snmpInSetRequests=0;
-
-    /**
-     * The <CODE>snmpInPkts</CODE> value defined in MIB-II.
-     */
-    private int snmpInPkts=0;
-
-    /**
-     * The <CODE>snmpInTotalReqVars</CODE> value defined in MIB-II.
-     */
-    private int snmpInTotalReqVars=0;
-
-    /**
-     * The <CODE>snmpInTotalSetVars</CODE> value defined in MIB-II.
-     */
-    private int snmpInTotalSetVars=0;
-
-    /**
-     * The <CODE>snmpInTotalSetVars</CODE> value defined in rfc 1907 MIB-II.
-     */
-    private int snmpSilentDrops=0;
-
-    private static final String InterruptSysCallMsg =
-        "Interrupted system call";
-    static final SnmpOid sysUpTimeOid = new SnmpOid("1.3.6.1.2.1.1.3.0") ;
-    static final SnmpOid snmpTrapOidOid = new SnmpOid("1.3.6.1.6.3.1.1.4.1.0");
-
-    private ThreadService threadService;
-
-    private static int threadNumber = 6;
-
-    static {
-        String s = System.getProperty("com.sun.jmx.snmp.threadnumber");
-
-        if (s != null) {
-            try {
-                threadNumber = Integer.parseInt(System.getProperty(s));
-            } catch (Exception e) {
-                SNMP_ADAPTOR_LOGGER.logp(Level.FINER,
-                        SnmpAdaptorServer.class.getName(),
-                        "<static init>",
-                        "Got wrong value for com.sun.jmx.snmp.threadnumber: " +
-                        s + ". Use the default value: " + threadNumber);
-            }
-        }
-    }
-
-    // PUBLIC CONSTRUCTORS
-    //--------------------
-
-    /**
-     * Initializes this SNMP protocol adaptor using the default port (161).
-     * Use the {@link com.sun.jmx.snmp.IPAcl.SnmpAcl} default
-     * implementation of the <CODE>InetAddressAcl</CODE> interface.
-     */
-    public SnmpAdaptorServer() {
-        this(true, null, com.sun.jmx.snmp.ServiceName.SNMP_ADAPTOR_PORT,
-             null) ;
-    }
-
-    /**
-     * Initializes this SNMP protocol adaptor using the specified port.
-     * Use the {@link com.sun.jmx.snmp.IPAcl.SnmpAcl} default
-     * implementation of the <CODE>InetAddressAcl</CODE> interface.
-     *
-     * @param port The port number for sending SNMP responses.
-     */
-    public SnmpAdaptorServer(int port) {
-        this(true, null, port, null) ;
-    }
-
-    /**
-     * Initializes this SNMP protocol adaptor using the default port (161)
-     * and the specified IP address based ACL implementation.
-     *
-     * @param acl The <CODE>InetAddressAcl</CODE> implementation.
-     *        <code>null</code> means no ACL - everybody is authorized.
-     *
-     * @since 1.5
-     */
-    public SnmpAdaptorServer(InetAddressAcl acl) {
-        this(false, acl, com.sun.jmx.snmp.ServiceName.SNMP_ADAPTOR_PORT,
-             null) ;
-    }
-
-    /**
-     * Initializes this SNMP protocol adaptor using the default port (161)
-     * and the
-     * specified <CODE>InetAddress</CODE>.
-     * Use the {@link com.sun.jmx.snmp.IPAcl.SnmpAcl} default
-     * implementation of the <CODE>InetAddressAcl</CODE> interface.
-     *
-     * @param addr The IP address to bind.
-     */
-    public SnmpAdaptorServer(InetAddress addr) {
-        this(true, null, com.sun.jmx.snmp.ServiceName.SNMP_ADAPTOR_PORT,
-             addr) ;
-    }
-
-    /**
-     * Initializes this SNMP protocol adaptor using the specified port and the
-     * specified IP address based ACL implementation.
-     *
-     * @param acl The <CODE>InetAddressAcl</CODE> implementation.
-     *        <code>null</code> means no ACL - everybody is authorized.
-     * @param port The port number for sending SNMP responses.
-     *
-     * @since 1.5
-     */
-    public SnmpAdaptorServer(InetAddressAcl acl, int port) {
-        this(false, acl, port, null) ;
-    }
-
-    /**
-     * Initializes this SNMP protocol adaptor using the specified port and the
-     * specified <CODE>InetAddress</CODE>.
-     * Use the {@link com.sun.jmx.snmp.IPAcl.SnmpAcl} default
-     * implementation of the <CODE>InetAddressAcl</CODE> interface.
-     *
-     * @param port The port number for sending SNMP responses.
-     * @param addr The IP address to bind.
-     */
-    public SnmpAdaptorServer(int port, InetAddress addr) {
-        this(true, null, port, addr) ;
-    }
-
-    /**
-     * Initializes this SNMP protocol adaptor using the specified IP
-     * address based ACL implementation and the specified
-     * <CODE>InetAddress</CODE>.
-     *
-     * @param acl The <CODE>InetAddressAcl</CODE> implementation.
-     * @param addr The IP address to bind.
-     *
-     * @since 1.5
-     */
-    public SnmpAdaptorServer(InetAddressAcl acl, InetAddress addr) {
-        this(false, acl, com.sun.jmx.snmp.ServiceName.SNMP_ADAPTOR_PORT,
-             addr) ;
-    }
-
-    /**
-     * Initializes this SNMP protocol adaptor using the specified port, the
-     * specified  address based ACL implementation and the specified
-     * <CODE>InetAddress</CODE>.
-     *
-     * @param acl The <CODE>InetAddressAcl</CODE> implementation.
-     * @param port The port number for sending SNMP responses.
-     * @param addr The IP address to bind.
-     *
-     * @since 1.5
-     */
-    public SnmpAdaptorServer(InetAddressAcl acl, int port, InetAddress addr) {
-        this(false, acl, port, addr);
-    }
-
-    /**
-     * Initializes this SNMP protocol adaptor using the specified port and the
-     * specified <CODE>InetAddress</CODE>.
-     * This constructor allows to initialize an SNMP adaptor without using
-     * the ACL mechanism (by setting the <CODE>useAcl</CODE> parameter to
-     * false).
-     * <br>This constructor must be used in particular with a platform that
-     * does not support the <CODE>java.security.acl</CODE> package like pJava.
-     *
-     * @param useAcl Specifies if this new SNMP adaptor uses the ACL mechanism.
-     * If the specified parameter is set to <CODE>true</CODE>, this
-     * constructor is equivalent to
-     * <CODE>SnmpAdaptorServer((int)port,(InetAddress)addr)</CODE>.
-     * @param port The port number for sending SNMP responses.
-     * @param addr The IP address to bind.
-     */
-    public SnmpAdaptorServer(boolean useAcl, int port, InetAddress addr) {
-        this(useAcl,null,port,addr);
-    }
-
-    // If forceAcl is `true' and InetAddressAcl is null, then a default
-    // SnmpAcl object is created.
-    //
-    private SnmpAdaptorServer(boolean forceAcl, InetAddressAcl acl,
-                              int port, InetAddress addr) {
-        super(CommunicatorServer.SNMP_TYPE) ;
-
-
-        // Initialize the ACL implementation.
-        //
-        if (acl == null && forceAcl) {
-            try {
-                acl = (InetAddressAcl)
-                    new SnmpAcl("SNMP protocol adaptor IP ACL");
-            } catch (UnknownHostException e) {
-                if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                    SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, dbgTag,
-                        "constructor", "UnknowHostException when creating ACL",e);
-                }
-            }
-        } else {
-            this.useAcl = (acl!=null) || forceAcl;
-        }
-
-        init(acl, port, addr) ;
-    }
-
-    // GETTERS AND SETTERS
-    //--------------------
-
-    /**
-     * Gets the number of managers that have been processed by this
-     * SNMP protocol adaptor  since its creation.
-     *
-     * @return The number of managers handled by this SNMP protocol adaptor
-     * since its creation. This counter is not reset by the <CODE>stop</CODE>
-     * method.
-     */
-    public int getServedClientCount() {
-        return super.getServedClientCount();
-    }
-
-    /**
-     * Gets the number of managers currently being processed by this
-     * SNMP protocol adaptor.
-     *
-     * @return The number of managers currently being processed by this
-     * SNMP protocol adaptor.
-     */
-    public int getActiveClientCount() {
-        return super.getActiveClientCount();
-    }
-
-    /**
-     * Gets the maximum number of managers that this SNMP protocol adaptor can
-     * process concurrently.
-     *
-     * @return The maximum number of managers that this SNMP protocol adaptor
-     *         can process concurrently.
-     */
-    public int getMaxActiveClientCount() {
-        return super.getMaxActiveClientCount();
-    }
-
-    /**
-     * Sets the maximum number of managers this SNMP protocol adaptor can
-     * process concurrently.
-     *
-     * @param c The number of managers.
-     *
-     * @exception java.lang.IllegalStateException This method has been invoked
-     * while the communicator was <CODE>ONLINE</CODE> or <CODE>STARTING</CODE>.
-     */
-    public void setMaxActiveClientCount(int c)
-        throws java.lang.IllegalStateException {
-        super.setMaxActiveClientCount(c);
-    }
-
-    /**
-     * Returns the Ip address based ACL used by this SNMP protocol adaptor.
-     * @return The <CODE>InetAddressAcl</CODE> implementation.
-     *
-     * @since 1.5
-     */
-    public InetAddressAcl getInetAddressAcl() {
-        return (InetAddressAcl)ipacl;
-    }
-
-    /**
-     * Returns the port used by this SNMP protocol adaptor for sending traps.
-     * By default, port 162 is used.
-     *
-     * @return The port number for sending SNMP traps.
-     */
-    public Integer getTrapPort() {
-        return new Integer(trapPort) ;
-    }
-
-    /**
-     * Sets the port used by this SNMP protocol adaptor for sending traps.
-     *
-     * @param port The port number for sending SNMP traps.
-     */
-    public void setTrapPort(Integer port) {
-        setTrapPort(port.intValue());
-    }
-
-    /**
-     * Sets the port used by this SNMP protocol adaptor for sending traps.
-     *
-     * @param port The port number for sending SNMP traps.
-     */
-    public void setTrapPort(int port) {
-        int val= port ;
-        if (val < 0) throw new
-            IllegalArgumentException("Trap port cannot be a negative value");
-        trapPort= val ;
-    }
-
-    /**
-     * Returns the port used by this SNMP protocol adaptor for sending
-     * inform requests. By default, port 162 is used.
-     *
-     * @return The port number for sending SNMP inform requests.
-     */
-    public int getInformPort() {
-        return informPort;
-    }
-
-    /**
-     * Sets the port used by this SNMP protocol adaptor for sending
-     * inform requests.
-     *
-     * @param port The port number for sending SNMP inform requests.
-     */
-    public void setInformPort(int port) {
-        if (port < 0)
-            throw new IllegalArgumentException("Inform request port "+
-                                               "cannot be a negative value");
-        informPort= port ;
-    }
-
-    /**
-     * Returns the protocol of this SNMP protocol adaptor.
-     *
-     * @return The string "snmp".
-     */
-    public String getProtocol() {
-        return "snmp";
-    }
-
-    /**
-     * Returns the buffer size of this SNMP protocol adaptor.
-     * This buffer size is used for both incoming request and outgoing
-     * inform requests.
-     * By default, buffer size 1024 is used.
-     *
-     * @return The buffer size.
-     */
-    public Integer getBufferSize() {
-        return new Integer(bufferSize) ;
-    }
-
-    /**
-     * Sets the buffer size of this SNMP protocol adaptor.
-     * This buffer size is used for both incoming request and outgoing
-     * inform requests.
-     *
-     * @param s The buffer size.
-     *
-     * @exception java.lang.IllegalStateException This method has been invoked
-     * while the communicator was <CODE>ONLINE</CODE> or <CODE>STARTING</CODE>.
-     */
-    public void setBufferSize(Integer s)
-        throws java.lang.IllegalStateException {
-        if ((state == ONLINE) || (state == STARTING)) {
-            throw new IllegalStateException("Stop server before carrying out"+
-                                            " this operation");
-        }
-        bufferSize = s.intValue() ;
-    }
-
-    /**
-     * Gets the number of times to try sending an inform request before
-     * giving up.
-     * By default, a maximum of 3 tries is used.
-     * @return The maximun number of tries.
-     */
-    final public int getMaxTries() {
-        return maxTries;
-    }
-
-    /**
-     * Changes the maximun number of times to try sending an inform
-     * request before giving up.
-     * @param newMaxTries The maximun number of tries.
-     */
-    final public synchronized void setMaxTries(int newMaxTries) {
-        if (newMaxTries < 0)
-            throw new IllegalArgumentException();
-        maxTries = newMaxTries;
-    }
-
-    /**
-     * Gets the timeout to wait for an inform response from the manager.
-     * By default, a timeout of 3 seconds is used.
-     * @return The value of the timeout property.
-     */
-    final public int getTimeout() {
-        return timeout;
-    }
-
-    /**
-     * Changes the timeout to wait for an inform response from the manager.
-     * @param newTimeout The timeout (in milliseconds).
-     */
-    final public synchronized void setTimeout(int newTimeout) {
-        if (newTimeout < 0)
-            throw new IllegalArgumentException();
-        timeout= newTimeout;
-    }
-
-    /**
-     * Returns the message factory of this SNMP protocol adaptor.
-     *
-     * @return The factory object.
-     */
-    public SnmpPduFactory getPduFactory() {
-        return pduFactory ;
-    }
-
-    /**
-     * Sets the message factory of this SNMP protocol adaptor.
-     *
-     * @param factory The factory object (null means the default factory).
-     */
-    public void setPduFactory(SnmpPduFactory factory) {
-        if (factory == null)
-            pduFactory = new SnmpPduFactoryBER() ;
-        else
-            pduFactory = factory ;
-    }
-
-    /**
-     * Set the user-data factory of this SNMP protocol adaptor.
-     *
-     * @param factory The factory object (null means no factory).
-     * @see com.sun.jmx.snmp.agent.SnmpUserDataFactory
-     */
-    public void setUserDataFactory(SnmpUserDataFactory factory) {
-        userDataFactory = factory ;
-    }
-
-    /**
-     * Get the user-data factory associated with this SNMP protocol adaptor.
-     *
-     * @return The factory object (null means no factory).
-     * @see com.sun.jmx.snmp.agent.SnmpUserDataFactory
-     */
-    public SnmpUserDataFactory getUserDataFactory() {
-        return userDataFactory;
-    }
-
-    /**
-     * Returns <CODE>true</CODE> if authentication traps are enabled.
-     * <P>
-     * When this feature is enabled, the SNMP protocol adaptor sends
-     * an <CODE>authenticationFailure</CODE> trap each time an
-     * authentication fails.
-     * <P>
-     * The default behaviour is to send authentication traps.
-     *
-     * @return <CODE>true</CODE> if authentication traps are enabled,
-     *         <CODE>false</CODE> otherwise.
-     */
-    public boolean getAuthTrapEnabled() {
-        return authTrapEnabled ;
-    }
-
-    /**
-     * Sets the flag indicating if traps need to be sent in case of
-     * authentication failure.
-     *
-     * @param enabled Flag indicating if traps need to be sent.
-     */
-    public void setAuthTrapEnabled(boolean enabled) {
-        authTrapEnabled = enabled ;
-    }
-
-    /**
-     * Returns <code>true</code> if this SNMP protocol adaptor sends a
-     * response in case of authentication failure.
-     * <P>
-     * When this feature is enabled, the SNMP protocol adaptor sends a
-     * response with <CODE>noSuchName</CODE> or <CODE>readOnly</CODE> when
-     * the authentication failed. If the flag is disabled, the
-     * SNMP protocol adaptor trashes the PDU silently.
-     * <P>
-     * The default behavior is to send responses.
-     *
-     * @return <CODE>true</CODE> if responses are sent.
-     */
-    public boolean getAuthRespEnabled() {
-        return authRespEnabled ;
-    }
-
-    /**
-     * Sets the flag indicating if responses need to be sent in case of
-     * authentication failure.
-     *
-     * @param enabled Flag indicating if responses need to be sent.
-     */
-    public void setAuthRespEnabled(boolean enabled) {
-        authRespEnabled = enabled ;
-    }
-
-    /**
-     * Returns the enterprise OID. It is used by
-     * {@link #snmpV1Trap snmpV1Trap} to fill the 'enterprise' field of the
-     * trap request.
-     *
-     * @return The OID in string format "x.x.x.x".
-     */
-    public String getEnterpriseOid() {
-        return enterpriseOid.toString() ;
-    }
-
-    /**
-     * Sets the enterprise OID.
-     *
-     * @param oid The OID in string format "x.x.x.x".
-     *
-     * @exception IllegalArgumentException The string format is incorrect
-     */
-    public void setEnterpriseOid(String oid) throws IllegalArgumentException {
-        enterpriseOid = new SnmpOid(oid) ;
-    }
-
-    /**
-     * Returns the names of the MIBs available in this SNMP protocol adaptor.
-     *
-     * @return An array of MIB names.
-     */
-    public String[] getMibs() {
-        String[] result = new String[mibs.size()] ;
-        int i = 0 ;
-        for (Enumeration e = mibs.elements() ; e.hasMoreElements() ;) {
-            SnmpMibAgent mib = (SnmpMibAgent)e.nextElement() ;
-            result[i++] = mib.getMibName();
-        }
-        return result ;
-    }
-
-    // GETTERS FOR SNMP GROUP (MIBII)
-    //-------------------------------
-
-    /**
-     * Returns the <CODE>snmpOutTraps</CODE> value defined in MIB-II.
-     *
-     * @return The <CODE>snmpOutTraps</CODE> value.
-     */
-    public Long getSnmpOutTraps() {
-        return new Long(snmpOutTraps);
-    }
-
-    /**
-     * Returns the <CODE>snmpOutGetResponses</CODE> value defined in MIB-II.
-     *
-     * @return The <CODE>snmpOutGetResponses</CODE> value.
-     */
-    public Long getSnmpOutGetResponses() {
-        return new Long(snmpOutGetResponses);
-    }
-
-    /**
-     * Returns the <CODE>snmpOutGenErrs</CODE> value defined in MIB-II.
-     *
-     * @return The <CODE>snmpOutGenErrs</CODE> value.
-     */
-    public Long getSnmpOutGenErrs() {
-        return new Long(snmpOutGenErrs);
-    }
-
-    /**
-     * Returns the <CODE>snmpOutBadValues</CODE> value defined in MIB-II.
-     *
-     * @return The <CODE>snmpOutBadValues</CODE> value.
-     */
-    public Long getSnmpOutBadValues() {
-        return new Long(snmpOutBadValues);
-    }
-
-    /**
-     * Returns the <CODE>snmpOutNoSuchNames</CODE> value defined in MIB-II.
-     *
-     * @return The <CODE>snmpOutNoSuchNames</CODE> value.
-     */
-    public Long getSnmpOutNoSuchNames() {
-        return new Long(snmpOutNoSuchNames);
-    }
-
-    /**
-     * Returns the <CODE>snmpOutTooBigs</CODE> value defined in MIB-II.
-     *
-     * @return The <CODE>snmpOutTooBigs</CODE> value.
-     */
-    public Long getSnmpOutTooBigs() {
-        return new Long(snmpOutTooBigs);
-    }
-
-    /**
-     * Returns the <CODE>snmpInASNParseErrs</CODE> value defined in MIB-II.
-     *
-     * @return The <CODE>snmpInASNParseErrs</CODE> value.
-     */
-    public Long getSnmpInASNParseErrs() {
-        return new Long(snmpInASNParseErrs);
-    }
-
-    /**
-     * Returns the <CODE>snmpInBadCommunityUses</CODE> value defined in MIB-II.
-     *
-     * @return The <CODE>snmpInBadCommunityUses</CODE> value.
-     */
-    public Long getSnmpInBadCommunityUses() {
-        return new Long(snmpInBadCommunityUses);
-    }
-
-    /**
-     * Returns the <CODE>snmpInBadCommunityNames</CODE> value defined in
-     * MIB-II.
-     *
-     * @return The <CODE>snmpInBadCommunityNames</CODE> value.
-     */
-    public Long getSnmpInBadCommunityNames() {
-        return new Long(snmpInBadCommunityNames);
-    }
-
-    /**
-     * Returns the <CODE>snmpInBadVersions</CODE> value defined in MIB-II.
-     *
-     * @return The <CODE>snmpInBadVersions</CODE> value.
-     */
-    public Long getSnmpInBadVersions() {
-        return new Long(snmpInBadVersions);
-    }
-
-    /**
-     * Returns the <CODE>snmpOutPkts</CODE> value defined in MIB-II.
-     *
-     * @return The <CODE>snmpOutPkts</CODE> value.
-     */
-    public Long getSnmpOutPkts() {
-        return new Long(snmpOutPkts);
-    }
-
-    /**
-     * Returns the <CODE>snmpInPkts</CODE> value defined in MIB-II.
-     *
-     * @return The <CODE>snmpInPkts</CODE> value.
-     */
-    public Long getSnmpInPkts() {
-        return new Long(snmpInPkts);
-    }
-
-    /**
-     * Returns the <CODE>snmpInGetRequests</CODE> value defined in MIB-II.
-     *
-     * @return The <CODE>snmpInGetRequests</CODE> value.
-     */
-    public Long getSnmpInGetRequests() {
-        return new Long(snmpInGetRequests);
-    }
-
-    /**
-     * Returns the <CODE>snmpInGetNexts</CODE> value defined in MIB-II.
-     *
-     * @return The <CODE>snmpInGetNexts</CODE> value.
-     */
-    public Long getSnmpInGetNexts() {
-        return new Long(snmpInGetNexts);
-    }
-
-    /**
-     * Returns the <CODE>snmpInSetRequests</CODE> value defined in MIB-II.
-     *
-     * @return The <CODE>snmpInSetRequests</CODE> value.
-     */
-    public Long getSnmpInSetRequests() {
-        return new Long(snmpInSetRequests);
-    }
-
-    /**
-     * Returns the <CODE>snmpInTotalSetVars</CODE> value defined in MIB-II.
-     *
-     * @return The <CODE>snmpInTotalSetVars</CODE> value.
-     */
-    public Long getSnmpInTotalSetVars() {
-        return new Long(snmpInTotalSetVars);
-    }
-
-    /**
-     * Returns the <CODE>snmpInTotalReqVars</CODE> value defined in MIB-II.
-     *
-     * @return The <CODE>snmpInTotalReqVars</CODE> value.
-     */
-    public Long getSnmpInTotalReqVars() {
-        return new Long(snmpInTotalReqVars);
-    }
-
-    /**
-     * Returns the <CODE>snmpSilentDrops</CODE> value defined in RFC
-     * 1907 NMPv2-MIB .
-     *
-     * @return The <CODE>snmpSilentDrops</CODE> value.
-     *
-     * @since 1.5
-     */
-    public Long getSnmpSilentDrops() {
-        return new Long(snmpSilentDrops);
-    }
-
-    /**
-     * Returns the <CODE>snmpProxyDrops</CODE> value defined in RFC
-     * 1907 NMPv2-MIB .
-     *
-     * @return The <CODE>snmpProxyDrops</CODE> value.
-     *
-     * @since 1.5
-     */
-    public Long getSnmpProxyDrops() {
-        return new Long(0);
-    }
-
-
-    // PUBLIC METHODS
-    //---------------
-
-    /**
-     * Allows the MBean to perform any operations it needs before being
-     * registered in the MBean server.
-     * If the name of the SNMP protocol adaptor MBean is not specified,
-     * it is initialized with the default value:
-     * {@link com.sun.jmx.snmp.ServiceName#DOMAIN
-     *   com.sun.jmx.snmp.ServiceName.DOMAIN}:{@link
-     * com.sun.jmx.snmp.ServiceName#SNMP_ADAPTOR_SERVER
-     * com.sun.jmx.snmp.ServiceName.SNMP_ADAPTOR_SERVER}.
-     * If any exception is raised, the SNMP protocol adaptor MBean will
-     * not be registered in the MBean server.
-     *
-     * @param server The MBean server to register the service with.
-     * @param name The object name.
-     *
-     * @return The name of the SNMP protocol adaptor registered.
-     *
-     * @exception java.lang.Exception
-     */
-    public ObjectName preRegister(MBeanServer server, ObjectName name)
-        throws java.lang.Exception {
-
-        if (name == null) {
-            name = new ObjectName(server.getDefaultDomain() + ":" +
-                             com.sun.jmx.snmp.ServiceName.SNMP_ADAPTOR_SERVER);
-        }
-        return (super.preRegister(server, name));
-    }
-
-    /**
-     * Not used in this context.
-     */
-    public void postRegister (Boolean registrationDone) {
-        super.postRegister(registrationDone);
-    }
-
-    /**
-     * Not used in this context.
-     */
-    public void preDeregister() throws java.lang.Exception {
-        super.preDeregister();
-    }
-
-    /**
-     * Not used in this context.
-     */
-    public void postDeregister() {
-        super.postDeregister();
-    }
-
-    /**
-     * Adds a new MIB in the SNMP MIB handler.
-     *
-     * @param mib The MIB to add.
-     *
-     * @return A reference to the SNMP MIB handler.
-     *
-     * @exception IllegalArgumentException If the parameter is null.
-     */
-    public SnmpMibHandler addMib(SnmpMibAgent mib)
-        throws IllegalArgumentException {
-        if (mib == null) {
-            throw new IllegalArgumentException() ;
-        }
-
-        if(!mibs.contains(mib))
-            mibs.addElement(mib);
-
-        root.register(mib);
-
-        return this;
-    }
-
-    /**
-     * Adds a new MIB in the SNMP MIB handler.
-     * This method is to be called to set a specific agent to a specific OID.
-     * This can be useful when dealing with MIB overlapping.
-     * Some OID can be implemented in more than one MIB. In this case,
-     * the OID nearer agent will be used on SNMP operations.
-     *
-     * @param mib The MIB to add.
-     * @param oids The set of OIDs this agent implements.
-     *
-     * @return A reference to the SNMP MIB handler.
-     *
-     * @exception IllegalArgumentException If the parameter is null.
-     *
-     * @since 1.5
-     */
-    public SnmpMibHandler addMib(SnmpMibAgent mib, SnmpOid[] oids)
-        throws IllegalArgumentException {
-        if (mib == null) {
-            throw new IllegalArgumentException() ;
-        }
-
-        //If null oid array, just add it to the mib.
-        if(oids == null)
-            return addMib(mib);
-
-        if(!mibs.contains(mib))
-            mibs.addElement(mib);
-
-        for (int i = 0; i < oids.length; i++) {
-            root.register(mib, oids[i].longValue());
-        }
-        return this;
-    }
-
-    /**
-     * Adds a new MIB in the SNMP MIB handler. In SNMP V1 and V2 the
-     * <CODE>contextName</CODE> is useless and this method
-     * is equivalent to <CODE>addMib(SnmpMibAgent mib)</CODE>.
-     *
-     * @param mib The MIB to add.
-     * @param contextName The MIB context name.
-     * @return A reference on the SNMP MIB handler.
-     *
-     * @exception IllegalArgumentException If the parameter is null.
-     *
-     * @since 1.5
-     */
-    public SnmpMibHandler addMib(SnmpMibAgent mib, String contextName)
-        throws IllegalArgumentException {
-        return addMib(mib);
-    }
-
-    /**
-     * Adds a new MIB in the SNMP MIB handler. In SNMP V1 and V2 the
-     * <CODE>contextName</CODE> is useless and this method
-     * is equivalent to <CODE>addMib(SnmpMibAgent mib, SnmpOid[] oids)</CODE>.
-     *
-     * @param mib The MIB to add.
-     * @param contextName The MIB context. If null is passed, will be
-     *        registered in the default context.
-     * @param oids The set of OIDs this agent implements.
-     *
-     * @return A reference to the SNMP MIB handler.
-     *
-     * @exception IllegalArgumentException If the parameter is null.
-     *
-     * @since 1.5
-     */
-    public SnmpMibHandler addMib(SnmpMibAgent mib,
-                                 String contextName,
-                                 SnmpOid[] oids)
-        throws IllegalArgumentException {
-        return addMib(mib, oids);
-    }
-
-    /**
-     * Removes the specified MIB from the SNMP protocol adaptor.
-     * In SNMP V1 and V2 the <CODE>contextName</CODE> is useless and this
-     * method is equivalent to <CODE>removeMib(SnmpMibAgent mib)</CODE>.
-     *
-     * @param mib The MIB to be removed.
-     * @param contextName The context name used at registration time.
-     *
-     * @return <CODE>true</CODE> if the specified <CODE>mib</CODE> was
-     * a MIB included in the SNMP MIB handler, <CODE>false</CODE>
-     * otherwise.
-     *
-     * @since 1.5
-     */
-    public boolean removeMib(SnmpMibAgent mib, String contextName) {
-        return removeMib(mib);
-    }
-
-    /**
-     * Removes the specified MIB from the SNMP protocol adaptor.
-     *
-     * @param mib The MIB to be removed.
-     *
-     * @return <CODE>true</CODE> if the specified <CODE>mib</CODE> was a MIB
-     *         included in the SNMP MIB handler, <CODE>false</CODE> otherwise.
-     */
-    public boolean removeMib(SnmpMibAgent mib) {
-        root.unregister(mib);
-        return (mibs.removeElement(mib)) ;
-    }
-
-    /**
-     * Removes the specified MIB from the SNMP protocol adaptor.
-     *
-     * @param mib The MIB to be removed.
-     * @param oids The oid the MIB was previously registered for.
-     * @return <CODE>true</CODE> if the specified <CODE>mib</CODE> was
-     * a MIB included in the SNMP MIB handler, <CODE>false</CODE>
-     * otherwise.
-     *
-     * @since 1.5
-     */
-    public boolean removeMib(SnmpMibAgent mib, SnmpOid[] oids) {
-        root.unregister(mib, oids);
-        return (mibs.removeElement(mib)) ;
-    }
-
-     /**
-     * Removes the specified MIB from the SNMP protocol adaptor.
-     *
-     * @param mib The MIB to be removed.
-     * @param contextName The context name used at registration time.
-     * @param oids The oid the MIB was previously registered for.
-     * @return <CODE>true</CODE> if the specified <CODE>mib</CODE> was
-     * a MIB included in the SNMP MIB handler, <CODE>false</CODE>
-     * otherwise.
-     *
-     * @since 1.5
-     */
-    public boolean removeMib(SnmpMibAgent mib,
-                             String contextName,
-                             SnmpOid[] oids) {
-        return removeMib(mib, oids);
-    }
-
-    // SUBCLASSING OF COMMUNICATOR SERVER
-    //-----------------------------------
-
-    /**
-     * Creates the datagram socket.
-     */
-    protected void doBind()
-        throws CommunicationException, InterruptedException {
-
-        try {
-            synchronized (this) {
-                socket = new DatagramSocket(port, address) ;
-            }
-            dbgTag = makeDebugTag();
-        } catch (SocketException e) {
-            if (e.getMessage().equals(InterruptSysCallMsg))
-                throw new InterruptedException(e.toString()) ;
-            else {
-                if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                    SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, dbgTag,
-                        "doBind", "cannot bind on port " + port);
-                }
-                throw new CommunicationException(e) ;
-            }
-        }
-    }
-
-    /**
-     * Return the actual port to which the adaptor is bound.
-     * Can be different from the port given at construction time if
-     * that port number was 0.
-     * @return the actual port to which the adaptor is bound.
-     **/
-    public int getPort() {
-        synchronized (this) {
-            if (socket != null) return socket.getLocalPort();
-        }
-        return super.getPort();
-    }
-
-    /**
-     * Closes the datagram socket.
-     */
-    protected void doUnbind()
-        throws CommunicationException, InterruptedException {
-        if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
-            SNMP_ADAPTOR_LOGGER.logp(Level.FINER, dbgTag,
-                "doUnbind","Finally close the socket");
-        }
-        synchronized (this) {
-            if (socket != null) {
-                socket.close() ;
-                socket = null ;
-                // Important to inform finalize() that the socket is closed...
-            }
-        }
-        closeTrapSocketIfNeeded() ;
-        closeInformSocketIfNeeded() ;
-    }
-
-    void createSnmpRequestHandler(SnmpAdaptorServer server, int id,
-                                  DatagramSocket s, DatagramPacket p,
-                                  SnmpMibTree tree, Vector m, Object a,
-                                  SnmpPduFactory factory,
-                                  SnmpUserDataFactory dataFactory,
-                                  MBeanServer f, ObjectName n) {
-        final SnmpRequestHandler handler =
-            new SnmpRequestHandler(this, id, s, p, tree, m, a, factory,
-                                   dataFactory, f, n);
-        threadService.submitTask(handler);
-    }
-
-    /**
-     * Reads a packet from the datagram socket and creates a request
-     * handler which decodes and processes the request.
-     */
-    protected void doReceive()
-        throws CommunicationException, InterruptedException {
-
-        // Let's wait for something to be received.
-        //
-        try {
-            packet = new DatagramPacket(new byte[bufferSize], bufferSize) ;
-            socket.receive(packet);
-            int state = getState();
-
-            if(state != ONLINE) {
-                if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
-                    SNMP_ADAPTOR_LOGGER.logp(Level.FINER, dbgTag,
-                        "doReceive","received a message but state not online, returning.");
-                }
-                return;
-            }
-
-            createSnmpRequestHandler(this, servedClientCount, socket,
-                                     packet, root, mibs, ipacl, pduFactory,
-                                     userDataFactory, topMBS, objectName);
-        } catch (SocketException e) {
-            // Let's check if we have been interrupted by stop().
-            //
-            if (e.getMessage().equals(InterruptSysCallMsg))
-                throw new InterruptedException(e.toString()) ;
-            else
-                throw new CommunicationException(e) ;
-        } catch (InterruptedIOException e) {
-            throw new InterruptedException(e.toString()) ;
-        } catch (CommunicationException e) {
-            throw e ;
-        } catch (Exception e) {
-            throw new CommunicationException(e) ;
-        }
-        if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
-            SNMP_ADAPTOR_LOGGER.logp(Level.FINER, dbgTag,
-                "doReceive", "received a message");
-        }
-    }
-
-    protected void doError(Exception e) throws CommunicationException {
-        return;
-    }
-
-    /**
-     * Not used in this context.
-     */
-    protected void doProcess()
-        throws CommunicationException, InterruptedException {
-    }
-
-
-    /**
-     * The number of times the communicator server will attempt
-     * to bind before giving up.
-     * We attempt only once...
-     * @return 1
-     **/
-    protected int getBindTries() {
-        return 1;
-    }
-
-    /**
-     * Stops this SNMP protocol adaptor.
-     * Closes the datagram socket.
-     * <p>
-     * Has no effect if this SNMP protocol adaptor is <CODE>OFFLINE</CODE> or
-     * <CODE>STOPPING</CODE>.
-     */
-    public void stop(){
-
-        final int port = getPort();
-        if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
-            SNMP_ADAPTOR_LOGGER.logp(Level.FINER, dbgTag,
-                "stop", "Stopping: using port " + port);
-        }
-        if ((state == ONLINE) || (state == STARTING)){
-            super.stop();
-            try {
-                DatagramSocket sn = new DatagramSocket(0);
-                try {
-                    byte[] ob = new byte[1];
-
-                    DatagramPacket pk;
-                    if (address != null)
-                        pk = new DatagramPacket(ob , 1, address, port);
-                    else
-                        pk = new DatagramPacket(ob , 1,
-                                 java.net.InetAddress.getLocalHost(), port);
-
-                    if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
-                        SNMP_ADAPTOR_LOGGER.logp(Level.FINER, dbgTag,
-                            "stop", "Sending: using port " + port);
-                    }
-                    sn.send(pk);
-                } finally {
-                    sn.close();
-                }
-            } catch (Throwable e){
-                if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                    SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, dbgTag,
-                        "stop", "Got unexpected Throwable", e);
-                }
-            }
-        }
-    }
-
-    // SENDING SNMP TRAPS STUFF
-    //-------------------------
-
-    /**
-     * Sends a trap using SNMP V1 trap format.
-     * <BR>The trap is sent to each destination defined in the ACL file
-     * (if available).
-     * If no ACL file or no destinations are available, the trap is sent
-     * to the local host.
-     *
-     * @param generic The generic number of the trap.
-     * @param specific The specific number of the trap.
-     * @param varBindList A list of <CODE>SnmpVarBind</CODE> instances or null.
-     *
-     * @exception IOException An I/O error occurred while sending the trap.
-     * @exception SnmpStatusException If the trap exceeds the limit defined
-     *            by <CODE>bufferSize</CODE>.
-     */
-    public void snmpV1Trap(int generic, int specific,
-                           SnmpVarBindList varBindList)
-        throws IOException, SnmpStatusException {
-
-        if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
-            SNMP_ADAPTOR_LOGGER.logp(Level.FINER, dbgTag,
-                "snmpV1Trap", "generic=" + generic +
-                  ", specific=" + specific);
-        }
-
-        // First, make an SNMP V1 trap pdu
-        //
-        SnmpPduTrap pdu = new SnmpPduTrap() ;
-        pdu.address = null ;
-        pdu.port = trapPort ;
-        pdu.type = pduV1TrapPdu ;
-        pdu.version = snmpVersionOne ;
-        pdu.community = null ;
-        pdu.enterprise = enterpriseOid ;
-        pdu.genericTrap = generic ;
-        pdu.specificTrap = specific ;
-        pdu.timeStamp = getSysUpTime();
-
-        if (varBindList != null) {
-            pdu.varBindList = new SnmpVarBind[varBindList.size()] ;
-            varBindList.copyInto(pdu.varBindList);
-        }
-        else
-            pdu.varBindList = null ;
-
-        // If the local host cannot be determined, we put 0.0.0.0 in agentAddr
-        try {
-            if (address != null)
-                pdu.agentAddr = handleMultipleIpVersion(address.getAddress());
-            else pdu.agentAddr =
-              handleMultipleIpVersion(InetAddress.getLocalHost().getAddress());
-        } catch (UnknownHostException e) {
-            byte[] zeroedAddr = new byte[4];
-            pdu.agentAddr = handleMultipleIpVersion(zeroedAddr) ;
-        }
-
-        // Next, send the pdu to all destinations defined in ACL
-        //
-        sendTrapPdu(pdu) ;
-    }
-
-    private SnmpIpAddress handleMultipleIpVersion(byte[] address) {
-        if(address.length == 4)
-          return new SnmpIpAddress(address);
-        else {
-            if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, dbgTag,
-                    "handleMultipleIPVersion",
-                      "Not an IPv4 address, return null");
-            }
-            return null;
-        }
-    }
-
-    /**
-     * Sends a trap using SNMP V1 trap format.
-     * <BR>The trap is sent to the specified <CODE>InetAddress</CODE>
-     * destination using the specified community string (and the ACL file
-     * is not used).
-     *
-     * @param addr The <CODE>InetAddress</CODE> destination of the trap.
-     * @param cs The community string to be used for the trap.
-     * @param generic The generic number of the trap.
-     * @param specific The specific number of the trap.
-     * @param varBindList A list of <CODE>SnmpVarBind</CODE> instances or null.
-     *
-     * @exception IOException An I/O error occurred while sending the trap.
-     * @exception SnmpStatusException If the trap exceeds the limit defined
-     *            by <CODE>bufferSize</CODE>.
-     */
-    public void snmpV1Trap(InetAddress addr, String cs, int generic,
-                           int specific, SnmpVarBindList varBindList)
-        throws IOException, SnmpStatusException {
-
-        if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
-            SNMP_ADAPTOR_LOGGER.logp(Level.FINER, dbgTag,
-                "snmpV1Trap", "generic=" + generic + ", specific=" +
-                  specific);
-        }
-
-        // First, make an SNMP V1 trap pdu
-        //
-        SnmpPduTrap pdu = new SnmpPduTrap() ;
-        pdu.address = null ;
-        pdu.port = trapPort ;
-        pdu.type = pduV1TrapPdu ;
-        pdu.version = snmpVersionOne ;
-
-        if(cs != null)
-            pdu.community = cs.getBytes();
-        else
-            pdu.community = null ;
-
-        pdu.enterprise = enterpriseOid ;
-        pdu.genericTrap = generic ;
-        pdu.specificTrap = specific ;
-        pdu.timeStamp = getSysUpTime();
-
-        if (varBindList != null) {
-            pdu.varBindList = new SnmpVarBind[varBindList.size()] ;
-            varBindList.copyInto(pdu.varBindList);
-        }
-        else
-            pdu.varBindList = null ;
-
-        // If the local host cannot be determined, we put 0.0.0.0 in agentAddr
-        try {
-            if (address != null)
-                pdu.agentAddr = handleMultipleIpVersion(address.getAddress());
-            else pdu.agentAddr =
-              handleMultipleIpVersion(InetAddress.getLocalHost().getAddress());
-        } catch (UnknownHostException e) {
-            byte[] zeroedAddr = new byte[4];
-            pdu.agentAddr = handleMultipleIpVersion(zeroedAddr) ;
-        }
-
-        // Next, send the pdu to the specified destination
-        //
-        if(addr != null)
-            sendTrapPdu(addr, pdu) ;
-        else
-            sendTrapPdu(pdu);
-    }
-
-    /**
-     * Sends a trap using SNMP V1 trap format.
-     * <BR>The trap is sent to the specified <CODE>InetAddress</CODE>
-     * destination using the specified parameters (and the ACL file is not
-     * used).
-     * Note that if the specified <CODE>InetAddress</CODE> destination is null,
-     * then the ACL file mechanism is used.
-     *
-     * @param addr The <CODE>InetAddress</CODE> destination of the trap.
-     * @param agentAddr The agent address to be used for the trap.
-     * @param cs The community string to be used for the trap.
-     * @param enterpOid The enterprise OID to be used for the trap.
-     * @param generic The generic number of the trap.
-     * @param specific The specific number of the trap.
-     * @param varBindList A list of <CODE>SnmpVarBind</CODE> instances or null.
-     * @param time The time stamp (overwrite the current time).
-     *
-     * @exception IOException An I/O error occurred while sending the trap.
-     * @exception SnmpStatusException If the trap exceeds the limit defined
-     *            by <CODE>bufferSize</CODE>.
-     *
-     * @since 1.5
-     */
-    public void snmpV1Trap(InetAddress addr,
-                           SnmpIpAddress agentAddr,
-                           String cs,
-                           SnmpOid enterpOid,
-                           int generic,
-                           int specific,
-                           SnmpVarBindList varBindList,
-                           SnmpTimeticks time)
-        throws IOException, SnmpStatusException {
-        snmpV1Trap(addr,
-                   trapPort,
-                   agentAddr,
-                   cs,
-                   enterpOid,
-                   generic,
-                   specific,
-                   varBindList,
-                   time);
-    }
-
-    /**
-     * Sends a trap using SNMP V1 trap format.
-     * <BR>The trap is sent to the specified <CODE>SnmpPeer</CODE> destination.
-     * The community string used is the one located in the
-     * <CODE>SnmpPeer</CODE> parameters
-     * (<CODE>SnmpParameters.getRdCommunity() </CODE>).
-     *
-     * @param peer The <CODE>SnmpPeer</CODE> destination of the trap.
-     * @param agentAddr The agent address to be used for the trap.
-     * @param enterpOid The enterprise OID to be used for the trap.
-     * @param generic The generic number of the trap.
-     * @param specific The specific number of the trap.
-     * @param varBindList A list of <CODE>SnmpVarBind</CODE> instances or null.
-     * @param time The time stamp (overwrite the current time).
-     *
-     * @exception IOException An I/O error occurred while sending the trap.
-     * @exception SnmpStatusException If the trap exceeds the limit
-     * defined by <CODE>bufferSize</CODE>.
-     *
-     * @since 1.5
-     */
-    public void snmpV1Trap(SnmpPeer peer,
-                           SnmpIpAddress agentAddr,
-                           SnmpOid enterpOid,
-                           int generic,
-                           int specific,
-                           SnmpVarBindList varBindList,
-                           SnmpTimeticks time)
-        throws IOException, SnmpStatusException {
-        SnmpParameters p = (SnmpParameters) peer.getParams();
-        snmpV1Trap(peer.getDestAddr(),
-                   peer.getDestPort(),
-                   agentAddr,
-                   p.getRdCommunity(),
-                   enterpOid,
-                   generic,
-                   specific,
-                   varBindList,
-                   time);
-    }
-
-    private void snmpV1Trap(InetAddress addr,
-                            int port,
-                            SnmpIpAddress agentAddr,
-                            String cs,
-                            SnmpOid enterpOid,
-                            int generic,
-                            int specific,
-                            SnmpVarBindList varBindList,
-                            SnmpTimeticks time)
-        throws IOException, SnmpStatusException {
-
-        if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
-            SNMP_ADAPTOR_LOGGER.logp(Level.FINER, dbgTag,
-                "snmpV1Trap", "generic=" + generic + ", specific=" +
-                  specific);
-        }
-
-        // First, make an SNMP V1 trap pdu
-        //
-        SnmpPduTrap pdu = new SnmpPduTrap() ;
-        pdu.address = null ;
-        pdu.port = port ;
-        pdu.type = pduV1TrapPdu ;
-        pdu.version = snmpVersionOne ;
-
-        //Diff start
-        if(cs != null)
-            pdu.community = cs.getBytes();
-        else
-            pdu.community = null ;
-        //Diff end
-
-        // Diff start
-        if(enterpOid != null)
-            pdu.enterprise = enterpOid;
-        else
-            pdu.enterprise = enterpriseOid ;
-        //Diff end
-        pdu.genericTrap = generic ;
-        pdu.specificTrap = specific ;
-        //Diff start
-        if(time != null)
-            pdu.timeStamp = time.longValue();
-        else
-            pdu.timeStamp = getSysUpTime();
-        //Diff end
-
-        if (varBindList != null) {
-            pdu.varBindList = new SnmpVarBind[varBindList.size()] ;
-            varBindList.copyInto(pdu.varBindList);
-        }
-        else
-            pdu.varBindList = null ;
-
-        if (agentAddr == null) {
-            // If the local host cannot be determined,
-            // we put 0.0.0.0 in agentAddr
-            try {
-                final InetAddress inetAddr =
-                    (address!=null)?address:InetAddress.getLocalHost();
-                agentAddr = handleMultipleIpVersion(inetAddr.getAddress());
-            }  catch (UnknownHostException e) {
-                byte[] zeroedAddr = new byte[4];
-                agentAddr = handleMultipleIpVersion(zeroedAddr);
-            }
-        }
-
-        pdu.agentAddr = agentAddr;
-
-        // Next, send the pdu to the specified destination
-        //
-        // Diff start
-        if(addr != null)
-            sendTrapPdu(addr, pdu) ;
-        else
-            sendTrapPdu(pdu);
-
-        //End diff
-    }
-
-    /**
-     * Sends a trap using SNMP V2 trap format.
-     * <BR>The trap is sent to the specified <CODE>SnmpPeer</CODE> destination.
-     * <BR>The community string used is the one located in the
-     * <CODE>SnmpPeer</CODE> parameters
-     * (<CODE>SnmpParameters.getRdCommunity() </CODE>).
-     * <BR>The variable list included in the outgoing trap is composed of
-     * the following items:
-     * <UL>
-     * <LI><CODE>sysUpTime.0</CODE> with the value specified by
-     *     <CODE>time</CODE></LI>
-     * <LI><CODE>snmpTrapOid.0</CODE> with the value specified by
-     *     <CODE>trapOid</CODE></LI>
-     * <LI><CODE>all the (oid,values)</CODE> from the specified
-     *     <CODE>varBindList</CODE></LI>
-     * </UL>
-     *
-     * @param peer The <CODE>SnmpPeer</CODE> destination of the trap.
-     * @param trapOid The OID identifying the trap.
-     * @param varBindList A list of <CODE>SnmpVarBind</CODE> instances or null.
-     * @param time The time stamp (overwrite the current time).
-     *
-     * @exception IOException An I/O error occurred while sending the trap.
-     * @exception SnmpStatusException If the trap exceeds the limit
-     * defined by <CODE>bufferSize</CODE>.
-     *
-     * @since 1.5
-     */
-    public void snmpV2Trap(SnmpPeer peer,
-                           SnmpOid trapOid,
-                           SnmpVarBindList varBindList,
-                           SnmpTimeticks time)
-        throws IOException, SnmpStatusException {
-        SnmpParameters p = (SnmpParameters) peer.getParams();
-        snmpV2Trap(peer.getDestAddr(),
-                   peer.getDestPort(),
-                   p.getRdCommunity(),
-                   trapOid,
-                   varBindList,
-                   time);
-    }
-
-    /**
-     * Sends a trap using SNMP V2 trap format.
-     * <BR>The trap is sent to each destination defined in the ACL file
-     * (if available). If no ACL file or no destinations are available,
-     * the trap is sent to the local host.
-     * <BR>The variable list included in the outgoing trap is composed of
-     * the following items:
-     * <UL>
-     * <LI><CODE>sysUpTime.0</CODE> with its current value</LI>
-     * <LI><CODE>snmpTrapOid.0</CODE> with the value specified by
-     *     <CODE>trapOid</CODE></LI>
-     * <LI><CODE>all the (oid,values)</CODE> from the specified
-     *     <CODE>varBindList</CODE></LI>
-     * </UL>
-     *
-     * @param trapOid The OID identifying the trap.
-     * @param varBindList A list of <CODE>SnmpVarBind</CODE> instances or null.
-     *
-     * @exception IOException An I/O error occurred while sending the trap.
-     * @exception SnmpStatusException If the trap exceeds the limit defined
-     *            by <CODE>bufferSize</CODE>.
-     */
-    public void snmpV2Trap(SnmpOid trapOid, SnmpVarBindList varBindList)
-        throws IOException, SnmpStatusException {
-
-        if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
-            SNMP_ADAPTOR_LOGGER.logp(Level.FINER, dbgTag,
-                "snmpV2Trap", "trapOid=" + trapOid);
-        }
-
-        // First, make an SNMP V2 trap pdu
-        // We clone varBindList and insert sysUpTime and snmpTrapOid
-        //
-        SnmpPduRequest pdu = new SnmpPduRequest() ;
-        pdu.address = null ;
-        pdu.port = trapPort ;
-        pdu.type = pduV2TrapPdu ;
-        pdu.version = snmpVersionTwo ;
-        pdu.community = null ;
-
-        SnmpVarBindList fullVbl ;
-        if (varBindList != null)
-            fullVbl = (SnmpVarBindList)varBindList.clone() ;
-        else
-            fullVbl = new SnmpVarBindList(2) ;
-        SnmpTimeticks sysUpTimeValue = new SnmpTimeticks(getSysUpTime()) ;
-        fullVbl.insertElementAt(new SnmpVarBind(snmpTrapOidOid, trapOid), 0) ;
-        fullVbl.insertElementAt(new SnmpVarBind(sysUpTimeOid, sysUpTimeValue),
-                                0);
-        pdu.varBindList = new SnmpVarBind[fullVbl.size()] ;
-        fullVbl.copyInto(pdu.varBindList) ;
-
-        // Next, send the pdu to all destinations defined in ACL
-        //
-        sendTrapPdu(pdu) ;
-    }
-
-    /**
-     * Sends a trap using SNMP V2 trap format.
-     * <BR>The trap is sent to the specified <CODE>InetAddress</CODE>
-     * destination using the specified community string (and the ACL file
-     * is not used).
-     * <BR>The variable list included in the outgoing trap is composed of
-     * the following items:
-     * <UL>
-     * <LI><CODE>sysUpTime.0</CODE> with its current value</LI>
-     * <LI><CODE>snmpTrapOid.0</CODE> with the value specified by
-     *     <CODE>trapOid</CODE></LI>
-     * <LI><CODE>all the (oid,values)</CODE> from the specified
-     *     <CODE>varBindList</CODE></LI>
-     * </UL>
-     *
-     * @param addr The <CODE>InetAddress</CODE> destination of the trap.
-     * @param cs The community string to be used for the trap.
-     * @param trapOid The OID identifying the trap.
-     * @param varBindList A list of <CODE>SnmpVarBind</CODE> instances or null.
-     *
-     * @exception IOException An I/O error occurred while sending the trap.
-     * @exception SnmpStatusException If the trap exceeds the limit
-     *            defined by <CODE>bufferSize</CODE>.
-     */
-    public void snmpV2Trap(InetAddress addr, String cs, SnmpOid trapOid,
-                           SnmpVarBindList varBindList)
-        throws IOException, SnmpStatusException {
-
-        if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
-            SNMP_ADAPTOR_LOGGER.logp(Level.FINER, dbgTag,
-                "snmpV2Trap", "trapOid=" + trapOid);
-        }
-
-        // First, make an SNMP V2 trap pdu
-        // We clone varBindList and insert sysUpTime and snmpTrapOid
-        //
-        SnmpPduRequest pdu = new SnmpPduRequest() ;
-        pdu.address = null ;
-        pdu.port = trapPort ;
-        pdu.type = pduV2TrapPdu ;
-        pdu.version = snmpVersionTwo ;
-
-        if(cs != null)
-            pdu.community = cs.getBytes();
-        else
-            pdu.community = null;
-
-        SnmpVarBindList fullVbl ;
-        if (varBindList != null)
-            fullVbl = (SnmpVarBindList)varBindList.clone() ;
-        else
-            fullVbl = new SnmpVarBindList(2) ;
-        SnmpTimeticks sysUpTimeValue = new SnmpTimeticks(getSysUpTime()) ;
-        fullVbl.insertElementAt(new SnmpVarBind(snmpTrapOidOid, trapOid), 0) ;
-        fullVbl.insertElementAt(new SnmpVarBind(sysUpTimeOid, sysUpTimeValue),
-                                0);
-        pdu.varBindList = new SnmpVarBind[fullVbl.size()] ;
-        fullVbl.copyInto(pdu.varBindList) ;
-
-        // Next, send the pdu to the specified destination
-        //
-        if(addr != null)
-            sendTrapPdu(addr, pdu);
-        else
-            sendTrapPdu(pdu);
-    }
-
-    /**
-     * Sends a trap using SNMP V2 trap format.
-     * <BR>The trap is sent to the specified <CODE>InetAddress</CODE>
-     * destination using the specified parameters (and the ACL file is not
-     * used).
-     * Note that if the specified <CODE>InetAddress</CODE> destination is null,
-     * then the ACL file mechanism is used.
-     * <BR>The variable list included in the outgoing trap is composed of the
-     * following items:
-     * <UL>
-     * <LI><CODE>sysUpTime.0</CODE> with the value specified by
-     *     <CODE>time</CODE></LI>
-     * <LI><CODE>snmpTrapOid.0</CODE> with the value specified by
-     *     <CODE>trapOid</CODE></LI>
-     * <LI><CODE>all the (oid,values)</CODE> from the specified
-     *     <CODE>varBindList</CODE></LI>
-     * </UL>
-     *
-     * @param addr The <CODE>InetAddress</CODE> destination of the trap.
-     * @param cs The community string to be used for the trap.
-     * @param trapOid The OID identifying the trap.
-     * @param varBindList A list of <CODE>SnmpVarBind</CODE> instances or null.
-     * @param time The time stamp (overwrite the current time).
-     *
-     * @exception IOException An I/O error occurred while sending the trap.
-     * @exception SnmpStatusException If the trap exceeds the limit
-     * defined by <CODE>bufferSize</CODE>.
-     *
-     * @since 1.5
-     */
-    public void snmpV2Trap(InetAddress addr,
-                           String cs,
-                           SnmpOid trapOid,
-                           SnmpVarBindList varBindList,
-                           SnmpTimeticks time)
-        throws IOException, SnmpStatusException {
-
-        snmpV2Trap(addr,
-                   trapPort,
-                   cs,
-                   trapOid,
-                   varBindList,
-                   time);
-    }
-
-    private void snmpV2Trap(InetAddress addr,
-                            int port,
-                            String cs,
-                            SnmpOid trapOid,
-                            SnmpVarBindList varBindList,
-                            SnmpTimeticks time)
-        throws IOException, SnmpStatusException {
-
-        if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
-            final StringBuilder strb = new StringBuilder()
-                .append("trapOid=").append(trapOid)
-                .append("\ncommunity=").append(cs)
-                .append("\naddr=").append(addr)
-                .append("\nvarBindList=").append(varBindList)
-                .append("\ntime=").append(time)
-                .append("\ntrapPort=").append(port);
-            SNMP_ADAPTOR_LOGGER.logp(Level.FINER, dbgTag,
-                "snmpV2Trap", strb.toString());
-        }
-
-        // First, make an SNMP V2 trap pdu
-        // We clone varBindList and insert sysUpTime and snmpTrapOid
-        //
-        SnmpPduRequest pdu = new SnmpPduRequest() ;
-        pdu.address = null ;
-        pdu.port = port ;
-        pdu.type = pduV2TrapPdu ;
-        pdu.version = snmpVersionTwo ;
-
-        if(cs != null)
-            pdu.community = cs.getBytes();
-        else
-            pdu.community = null;
-
-        SnmpVarBindList fullVbl ;
-        if (varBindList != null)
-            fullVbl = (SnmpVarBindList)varBindList.clone() ;
-        else
-            fullVbl = new SnmpVarBindList(2) ;
-
-        // Only difference with other
-        SnmpTimeticks sysUpTimeValue = null;
-        if(time != null)
-            sysUpTimeValue = time;
-        else
-            sysUpTimeValue = new SnmpTimeticks(getSysUpTime()) ;
-        //End of diff
-
-        fullVbl.insertElementAt(new SnmpVarBind(snmpTrapOidOid, trapOid), 0) ;
-        fullVbl.insertElementAt(new SnmpVarBind(sysUpTimeOid, sysUpTimeValue),
-                                0);
-        pdu.varBindList = new SnmpVarBind[fullVbl.size()] ;
-        fullVbl.copyInto(pdu.varBindList) ;
-
-        // Next, send the pdu to the specified destination
-        //
-        // Diff start
-        if(addr != null)
-            sendTrapPdu(addr, pdu) ;
-        else
-            sendTrapPdu(pdu);
-        //End diff
-    }
-
-    /**
-     * Send the specified trap PDU to the passed <CODE>InetAddress</CODE>.
-     * @param address The destination address.
-     * @param pdu The pdu to send.
-     * @exception IOException An I/O error occurred while sending the trap.
-     * @exception SnmpStatusException If the trap exceeds the limit
-     * defined by <CODE>bufferSize</CODE>.
-     *
-     * @since 1.5
-     */
-    public void snmpPduTrap(InetAddress address, SnmpPduPacket pdu)
-            throws IOException, SnmpStatusException {
-
-        if(address != null)
-            sendTrapPdu(address, pdu);
-        else
-            sendTrapPdu(pdu);
-    }
-
-    /**
-     * Send the specified trap PDU to the passed <CODE>SnmpPeer</CODE>.
-     * @param peer The destination peer. The Read community string is used of
-     * <CODE>SnmpParameters</CODE> is used as the trap community string.
-     * @param pdu The pdu to send.
-     * @exception IOException An I/O error occurred while sending the trap.
-     * @exception SnmpStatusException If the trap exceeds the limit defined
-     * by <CODE>bufferSize</CODE>.
-     * @since 1.5
-     */
-    public void snmpPduTrap(SnmpPeer peer,
-                            SnmpPduPacket pdu)
-        throws IOException, SnmpStatusException {
-        if(peer != null) {
-            pdu.port = peer.getDestPort();
-            sendTrapPdu(peer.getDestAddr(), pdu);
-        }
-        else {
-            pdu.port = getTrapPort().intValue();
-            sendTrapPdu(pdu);
-        }
-    }
-
-    /**
-     * Send the specified trap PDU to every destinations from the ACL file.
-     */
-    private void sendTrapPdu(SnmpPduPacket pdu)
-     throws SnmpStatusException, IOException {
-
-        // Make an SNMP message from the pdu
-        //
-        SnmpMessage msg = null ;
-        try {
-            msg = (SnmpMessage)pduFactory.encodeSnmpPdu(pdu, bufferSize) ;
-            if (msg == null) {
-                throw new SnmpStatusException(
-                          SnmpDefinitions.snmpRspAuthorizationError) ;
-            }
-        }
-        catch (SnmpTooBigException x) {
-            if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, dbgTag,
-                    "sendTrapPdu", "Trap pdu is too big. " +
-                     "Trap hasn't been sent to anyone" );
-            }
-            throw new SnmpStatusException(SnmpDefinitions.snmpRspTooBig) ;
-            // FIXME: is the right exception to throw ?
-            // We could simply forward SnmpTooBigException ?
-        }
-
-        // Now send the SNMP message to each destination
-        //
-        int sendingCount = 0 ;
-        openTrapSocketIfNeeded() ;
-        if (ipacl != null) {
-            Enumeration ed = ((InetAddressAcl)ipacl).getTrapDestinations() ;
-            while (ed.hasMoreElements()) {
-                msg.address = (InetAddress)ed.nextElement() ;
-                Enumeration ec = ((InetAddressAcl)ipacl).
-                    getTrapCommunities(msg.address) ;
-                while (ec.hasMoreElements()) {
-                    msg.community = ((String)ec.nextElement()).getBytes() ;
-                    try {
-                        sendTrapMessage(msg) ;
-                        sendingCount++ ;
-                    }
-                    catch (SnmpTooBigException x) {
-                        if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                            SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, dbgTag,
-                                "sendTrapPdu", "Trap pdu is too big. " +
-                                 "Trap hasn't been sent to "+msg.address);
-                        }
-                    }
-                }
-            }
-        }
-
-        // If there is no destination defined or if everything has failed
-        // we tried to send the trap to the local host (as suggested by
-        // mister Olivier Reisacher).
-        //
-        if (sendingCount == 0) {
-            try {
-                msg.address = InetAddress.getLocalHost() ;
-                sendTrapMessage(msg) ;
-            } catch (SnmpTooBigException x) {
-                if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                    SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, dbgTag,
-                        "sendTrapPdu", "Trap pdu is too big. " +
-                         "Trap hasn't been sent.");
-                }
-            } catch (UnknownHostException e) {
-                if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                    SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, dbgTag,
-                        "sendTrapPdu", "Trap pdu is too big. " +
-                         "Trap hasn't been sent.");
-                }
-            }
-        }
-
-        closeTrapSocketIfNeeded() ;
-    }
-
-    /**
-     * Send the specified trap PDU to the specified destination.
-     */
-    private void sendTrapPdu(InetAddress addr, SnmpPduPacket pdu)
-        throws SnmpStatusException, IOException {
-
-        // Make an SNMP message from the pdu
-        //
-        SnmpMessage msg = null ;
-        try {
-            msg = (SnmpMessage)pduFactory.encodeSnmpPdu(pdu, bufferSize) ;
-            if (msg == null) {
-                throw new SnmpStatusException(
-                          SnmpDefinitions.snmpRspAuthorizationError) ;
-            }
-        } catch (SnmpTooBigException x) {
-            if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, dbgTag,
-                    "sendTrapPdu", "Trap pdu is too big. " +
-                     "Trap hasn't been sent to the specified host.");
-            }
-            throw new SnmpStatusException(SnmpDefinitions.snmpRspTooBig) ;
-            // FIXME: is the right exception to throw ?
-            // We could simply forward SnmpTooBigException ?
-        }
-
-        // Now send the SNMP message to specified destination
-        //
-        openTrapSocketIfNeeded() ;
-        if (addr != null) {
-            msg.address = addr;
-            try {
-                sendTrapMessage(msg) ;
-            } catch (SnmpTooBigException x) {
-                if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                    SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, dbgTag,
-                        "sendTrapPdu", "Trap pdu is too big. " +
-                         "Trap hasn't been sent to " +  msg.address);
-                }
-            }
-        }
-
-        closeTrapSocketIfNeeded() ;
-    }
-
-    /**
-     * Send the specified message on trapSocket.
-     */
-    private void sendTrapMessage(SnmpMessage msg)
-        throws IOException, SnmpTooBigException {
-        byte[] buffer = new byte[bufferSize] ;
-        DatagramPacket packet = new DatagramPacket(buffer, buffer.length) ;
-        int encodingLength = msg.encodeMessage(buffer) ;
-        packet.setLength(encodingLength) ;
-        packet.setAddress(msg.address) ;
-        packet.setPort(msg.port) ;
-        if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
-            SNMP_ADAPTOR_LOGGER.logp(Level.FINER, dbgTag,
-                "sendTrapMessage", "sending trap to " + msg.address + ":" +
-                  msg.port);
-        }
-        trapSocket.send(packet) ;
-        if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
-            SNMP_ADAPTOR_LOGGER.logp(Level.FINER, dbgTag,
-                "sendTrapMessage", "sent to " + msg.address + ":" +
-                  msg.port);
-        }
-        snmpOutTraps++;
-        snmpOutPkts++;
-    }
-
-    /**
-     * Open trapSocket if it's not already done.
-     */
-    synchronized void openTrapSocketIfNeeded() throws SocketException {
-        if (trapSocket == null) {
-            trapSocket = new DatagramSocket(0, address) ;
-            if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
-                SNMP_ADAPTOR_LOGGER.logp(Level.FINER, dbgTag,
-                    "openTrapSocketIfNeeded", "using port " +
-                      trapSocket.getLocalPort() + " to send traps");
-            }
-        }
-    }
-
-    /**
-     * Close trapSocket if the SNMP protocol adaptor is not ONLINE.
-     */
-    synchronized void closeTrapSocketIfNeeded() {
-        if ((trapSocket != null) && (state != ONLINE)) {
-            trapSocket.close() ;
-            trapSocket = null ;
-        }
-    }
-
-    // SENDING SNMP INFORMS STUFF
-    //---------------------------
-
-    /**
-     * Sends an inform using SNMP V2 inform request format.
-     * <BR>The inform request is sent to each destination defined in the ACL
-     * file (if available).
-     * If no ACL file or no destinations are available, the inform request is
-     * sent to the local host.
-     * <BR>The variable list included in the outgoing inform is composed of
-     * the following items:
-     * <UL>
-     * <LI><CODE>sysUpTime.0</CODE> with its current value</LI>
-     * <LI><CODE>snmpTrapOid.0</CODE> with the value specified by
-     *     <CODE>trapOid</CODE></LI>
-     * <LI><CODE>all the (oid,values)</CODE> from the specified
-     *     <CODE>varBindList</CODE></LI>
-     * </UL>
-     * To send an inform request, the SNMP adaptor server must be active.
-     *
-     * @param cb The callback that is invoked when a request is complete.
-     * @param trapOid The OID identifying the trap.
-     * @param varBindList A list of <CODE>SnmpVarBind</CODE> instances or null.
-     *
-     * @return A vector of {@link com.sun.jmx.snmp.daemon.SnmpInformRequest}
-     *         objects.
-     *         <P>If there is no destination host for this inform request,
-     *         the returned vector will be empty.
-     *
-     * @exception IllegalStateException  This method has been invoked while
-     *            the SNMP adaptor server was not active.
-     * @exception IOException An I/O error occurred while sending the
-     *            inform request.
-     * @exception SnmpStatusException If the inform request exceeds the
-     *            limit defined by <CODE>bufferSize</CODE>.
-     */
-    public Vector snmpInformRequest(SnmpInformHandler cb, SnmpOid trapOid,
-                                    SnmpVarBindList varBindList)
-        throws IllegalStateException, IOException, SnmpStatusException {
-
-        if (!isActive()) {
-            throw new IllegalStateException(
-               "Start SNMP adaptor server before carrying out this operation");
-        }
-        if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
-            SNMP_ADAPTOR_LOGGER.logp(Level.FINER, dbgTag,
-                "snmpInformRequest", "trapOid=" + trapOid);
-        }
-
-        // First, make an SNMP inform pdu:
-        // We clone varBindList and insert sysUpTime and snmpTrapOid variables.
-        //
-        SnmpVarBindList fullVbl ;
-        if (varBindList != null)
-            fullVbl = (SnmpVarBindList)varBindList.clone() ;
-        else
-            fullVbl = new SnmpVarBindList(2) ;
-        SnmpTimeticks sysUpTimeValue = new SnmpTimeticks(getSysUpTime()) ;
-        fullVbl.insertElementAt(new SnmpVarBind(snmpTrapOidOid, trapOid), 0) ;
-        fullVbl.insertElementAt(new SnmpVarBind(sysUpTimeOid, sysUpTimeValue),
-                                0);
-
-        // Next, send the pdu to the specified destination
-        //
-        openInformSocketIfNeeded() ;
-
-        // Now send the SNMP message to each destination
-        //
-        Vector<SnmpInformRequest> informReqList = new Vector<SnmpInformRequest>();
-        InetAddress addr = null;
-        String cs = null;
-        if (ipacl != null) {
-            Enumeration ed = ((InetAddressAcl)ipacl).getInformDestinations() ;
-            while (ed.hasMoreElements()) {
-                addr = (InetAddress)ed.nextElement() ;
-                Enumeration ec = ((InetAddressAcl)ipacl).
-                    getInformCommunities(addr) ;
-                while (ec.hasMoreElements()) {
-                    cs = (String)ec.nextElement() ;
-                    informReqList.addElement(
-                       informSession.makeAsyncRequest(addr, cs, cb,
-                                              fullVbl,getInformPort())) ;
-                }
-            }
-        }
-
-        return informReqList ;
-    }
-
-    /**
-     * Sends an inform using SNMP V2 inform request format.
-     * <BR>The inform is sent to the specified <CODE>InetAddress</CODE>
-     * destination
-     * using the specified community string.
-     * <BR>The variable list included in the outgoing inform is composed
-     *     of the following items:
-     * <UL>
-     * <LI><CODE>sysUpTime.0</CODE> with its current value</LI>
-     * <LI><CODE>snmpTrapOid.0</CODE> with the value specified by
-     *      <CODE>trapOid</CODE></LI>
-     * <LI><CODE>all the (oid,values)</CODE> from the specified
-     *     <CODE>varBindList</CODE></LI>
-     * </UL>
-     * To send an inform request, the SNMP adaptor server must be active.
-     *
-     * @param addr The <CODE>InetAddress</CODE> destination for this inform
-     *             request.
-     * @param cs The community string to be used for the inform request.
-     * @param cb The callback that is invoked when a request is complete.
-     * @param trapOid The OID identifying the trap.
-     * @param varBindList A list of <CODE>SnmpVarBind</CODE> instances or null.
-     *
-     * @return The inform request object.
-     *
-     * @exception IllegalStateException  This method has been invoked
-     *            while the SNMP adaptor server was not active.
-     * @exception IOException An I/O error occurred while sending the
-     *            inform request.
-     * @exception SnmpStatusException If the inform request exceeds the
-     *            limit defined by <CODE>bufferSize</CODE>.
-     */
-    public SnmpInformRequest snmpInformRequest(InetAddress addr,
-                                               String cs,
-                                               SnmpInformHandler cb,
-                                               SnmpOid trapOid,
-                                               SnmpVarBindList varBindList)
-        throws IllegalStateException, IOException, SnmpStatusException {
-
-        return snmpInformRequest(addr,
-                                 getInformPort(),
-                                 cs,
-                                 cb,
-                                 trapOid,
-                                 varBindList);
-    }
-
-    /**
-     * Sends an inform using SNMP V2 inform request format.
-     * <BR>The inform is sent to the specified <CODE>SnmpPeer</CODE>
-     *     destination.
-     * <BR>The community string used is the one located in the
-     *     <CODE>SnmpPeer</CODE> parameters
-     *     (<CODE>SnmpParameters.getInformCommunity() </CODE>).
-     * <BR>The variable list included in the outgoing inform is composed
-     *     of the following items:
-     * <UL>
-     * <LI><CODE>sysUpTime.0</CODE> with its current value</LI>
-     * <LI><CODE>snmpTrapOid.0</CODE> with the value specified by
-     *     <CODE>trapOid</CODE></LI>
-     * <LI><CODE>all the (oid,values)</CODE> from the specified
-     *     <CODE>varBindList</CODE></LI>
-     * </UL>
-     * To send an inform request, the SNMP adaptor server must be active.
-     *
-     * @param peer The <CODE>SnmpPeer</CODE> destination for this inform
-     *             request.
-     * @param cb The callback that is invoked when a request is complete.
-     * @param trapOid The OID identifying the trap.
-     * @param varBindList A list of <CODE>SnmpVarBind</CODE> instances or null.
-     *
-     * @return The inform request object.
-     *
-     * @exception IllegalStateException  This method has been invoked while
-     *            the SNMP adaptor server was not active.
-     * @exception IOException An I/O error occurred while sending the
-     *            inform request.
-     * @exception SnmpStatusException If the inform request exceeds the
-     *            limit defined by <CODE>bufferSize</CODE>.
-     *
-     * @since 1.5
-     */
-    public SnmpInformRequest snmpInformRequest(SnmpPeer peer,
-                                               SnmpInformHandler cb,
-                                               SnmpOid trapOid,
-                                               SnmpVarBindList varBindList)
-        throws IllegalStateException, IOException, SnmpStatusException {
-        SnmpParameters p = (SnmpParameters) peer.getParams();
-        return snmpInformRequest(peer.getDestAddr(),
-                                 peer.getDestPort(),
-                                 p.getInformCommunity(),
-                                 cb,
-                                 trapOid,
-                                 varBindList);
-    }
-
-    /**
-     * Method that maps an SNMP error status in the passed protocolVersion
-     * according to the provided pdu type.
-     * @param errorStatus The error status to convert.
-     * @param protocolVersion The protocol version.
-     * @param reqPduType The pdu type.
-     */
-    public static final int mapErrorStatus(int errorStatus,
-                                           int protocolVersion,
-                                           int reqPduType) {
-        return SnmpSubRequestHandler.mapErrorStatus(errorStatus,
-                                                    protocolVersion,
-                                                    reqPduType);
-    }
-
-    private SnmpInformRequest snmpInformRequest(InetAddress addr,
-                                                int port,
-                                                String cs,
-                                                SnmpInformHandler cb,
-                                                SnmpOid trapOid,
-                                                SnmpVarBindList varBindList)
-        throws IllegalStateException, IOException, SnmpStatusException {
-        if (!isActive()) {
-            throw new IllegalStateException(
-              "Start SNMP adaptor server before carrying out this operation");
-        }
-        if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
-            SNMP_ADAPTOR_LOGGER.logp(Level.FINER, dbgTag,
-                "snmpInformRequest", "trapOid=" + trapOid);
-        }
-
-        // First, make an SNMP inform pdu:
-        // We clone varBindList and insert sysUpTime and snmpTrapOid variables.
-        //
-        SnmpVarBindList fullVbl ;
-        if (varBindList != null)
-            fullVbl = (SnmpVarBindList)varBindList.clone() ;
-        else
-            fullVbl = new SnmpVarBindList(2) ;
-        SnmpTimeticks sysUpTimeValue = new SnmpTimeticks(getSysUpTime()) ;
-        fullVbl.insertElementAt(new SnmpVarBind(snmpTrapOidOid, trapOid), 0) ;
-        fullVbl.insertElementAt(new SnmpVarBind(sysUpTimeOid, sysUpTimeValue),
-                                0);
-
-        // Next, send the pdu to the specified destination
-        //
-        openInformSocketIfNeeded() ;
-        return informSession.makeAsyncRequest(addr, cs, cb, fullVbl, port) ;
-    }
-
-
-    /**
-     * Open informSocket if it's not already done.
-     */
-    synchronized void openInformSocketIfNeeded() throws SocketException {
-        if (informSession == null) {
-            informSession = new SnmpSession(this) ;
-            if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
-                SNMP_ADAPTOR_LOGGER.logp(Level.FINER, dbgTag,
-                   "openInformSocketIfNeeded",
-                      "to send inform requests and receive inform responses");
-            }
-        }
-    }
-
-    /**
-     * Close informSocket if the SNMP protocol adaptor is not ONLINE.
-     */
-    synchronized void closeInformSocketIfNeeded() {
-        if ((informSession != null) && (state != ONLINE)) {
-            informSession.destroySession() ;
-            informSession = null ;
-        }
-    }
-
-    /**
-     * Gets the IP address to bind.
-     * This getter is used to initialize the DatagramSocket in the
-     * SnmpSocket object created for the inform request stuff.
-     */
-    InetAddress getAddress() {
-        return address;
-    }
-
-
-    // PROTECTED METHODS
-    //------------------
-
-    /**
-     * Finalizer of the SNMP protocol adaptor objects.
-     * This method is called by the garbage collector on an object
-     * when garbage collection determines that there are no more
-     * references to the object.
-     * <P>Closes the datagram socket associated to this SNMP protocol adaptor.
-     */
-    protected void finalize() {
-        try {
-            if (socket != null) {
-                socket.close() ;
-                socket = null ;
-            }
-
-            threadService.terminate();
-        } catch (Exception e) {
-            if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
-                SNMP_ADAPTOR_LOGGER.logp(Level.FINER, dbgTag,
-                   "finalize", "Exception in finalizer", e);
-            }
-        }
-    }
-
-    // PACKAGE METHODS
-    //----------------
-
-    /**
-     * Returns the string used in debug traces.
-     */
-    String makeDebugTag() {
-        return "SnmpAdaptorServer["+ getProtocol() + ":" + getPort() + "]";
-    }
-
-    void updateRequestCounters(int pduType) {
-        switch(pduType)  {
-
-        case pduGetRequestPdu:
-            snmpInGetRequests++;
-            break;
-        case pduGetNextRequestPdu:
-            snmpInGetNexts++;
-            break;
-        case pduSetRequestPdu:
-            snmpInSetRequests++;
-            break;
-        default:
-            break;
-        }
-        snmpInPkts++ ;
-    }
-
-    void updateErrorCounters(int errorStatus) {
-        switch(errorStatus) {
-
-        case snmpRspNoError:
-            snmpOutGetResponses++;
-            break;
-        case snmpRspGenErr:
-            snmpOutGenErrs++;
-            break;
-        case snmpRspBadValue:
-            snmpOutBadValues++;
-            break;
-        case snmpRspNoSuchName:
-            snmpOutNoSuchNames++;
-            break;
-        case snmpRspTooBig:
-            snmpOutTooBigs++;
-            break;
-        default:
-            break;
-        }
-        snmpOutPkts++ ;
-    }
-
-    void updateVarCounters(int pduType, int n) {
-        switch(pduType) {
-
-        case pduGetRequestPdu:
-        case pduGetNextRequestPdu:
-        case pduGetBulkRequestPdu:
-            snmpInTotalReqVars += n ;
-            break ;
-        case pduSetRequestPdu:
-            snmpInTotalSetVars += n ;
-            break ;
-        }
-    }
-
-    void incSnmpInASNParseErrs(int n) {
-        snmpInASNParseErrs += n ;
-    }
-
-    void incSnmpInBadVersions(int n) {
-        snmpInBadVersions += n ;
-    }
-
-    void incSnmpInBadCommunityUses(int n) {
-        snmpInBadCommunityUses += n ;
-    }
-
-    void incSnmpInBadCommunityNames(int n) {
-        snmpInBadCommunityNames += n ;
-    }
-
-    void incSnmpSilentDrops(int n) {
-        snmpSilentDrops += n ;
-    }
-    // PRIVATE METHODS
-    //----------------
-
-    /**
-     * Returns the time (in hundreths of second) elapsed since the SNMP
-     * protocol adaptor startup.
-     */
-    long getSysUpTime() {
-        return (System.currentTimeMillis() - startUpTime) / 10 ;
-    }
-
-    /**
-     * Control the way the SnmpAdaptorServer service is deserialized.
-     */
-    private void readObject(ObjectInputStream stream)
-        throws IOException, ClassNotFoundException {
-
-        // Call the default deserialization of the object.
-        //
-        stream.defaultReadObject();
-
-        // Call the specific initialization for the SnmpAdaptorServer service.
-        // This is for transient structures to be initialized to specific
-        // default values.
-        //
-        mibs      = new Vector<SnmpMibAgent>() ;
-    }
-
-    /**
-     * Common initializations.
-     */
-    private void init(Object acl, int p, InetAddress a) {
-
-        root= new SnmpMibTree();
-
-        // The default Agent is initialized with a SnmpErrorHandlerAgent agent.
-        root.setDefaultAgent(new SnmpErrorHandlerAgent());
-
-        // For the trap time, use the time the agent started ...
-        //
-        startUpTime= java.lang.System.currentTimeMillis();
-        maxActiveClientCount = 10;
-
-        // Create the default message factory
-        pduFactory = new SnmpPduFactoryBER() ;
-
-        port = p ;
-        ipacl = acl ;
-        address = a ;
-
-        if ((ipacl == null) && (useAcl == true))
-            throw new IllegalArgumentException("ACL object cannot be null") ;
-
-        threadService = new ThreadService(threadNumber);
-    }
-
-    SnmpMibAgent getAgentMib(SnmpOid oid) {
-        return root.getAgentMib(oid);
-    }
-
-    protected Thread createMainThread() {
-        final Thread t = super.createMainThread();
-        t.setDaemon(true);
-        return t;
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/daemon/SnmpAdaptorServerMBean.java b/ojluni/src/main/java/com/sun/jmx/snmp/daemon/SnmpAdaptorServerMBean.java
deleted file mode 100755
index e2d86b6..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/daemon/SnmpAdaptorServerMBean.java
+++ /dev/null
@@ -1,700 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-
-package com.sun.jmx.snmp.daemon;
-
-// java import
-import java.util.Vector;
-import java.io.IOException;
-import java.net.InetAddress;
-
-// jmx imports
-//
-import com.sun.jmx.snmp.SnmpPduFactory;
-import com.sun.jmx.snmp.SnmpStatusException;
-import com.sun.jmx.snmp.SnmpVarBindList;
-import com.sun.jmx.snmp.SnmpOid;
-import com.sun.jmx.snmp.SnmpTimeticks;
-import com.sun.jmx.snmp.SnmpIpAddress;
-import com.sun.jmx.snmp.SnmpPduPacket;
-import com.sun.jmx.snmp.InetAddressAcl;
-import com.sun.jmx.snmp.SnmpPeer;
-
-// SNMP Runtime imports
-//
-import com.sun.jmx.snmp.agent.SnmpMibAgent;
-import com.sun.jmx.snmp.agent.SnmpMibHandler;
-import com.sun.jmx.snmp.agent.SnmpUserDataFactory;
-
-/**
- * Exposes the remote management interface of the {@link SnmpAdaptorServer} MBean.
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- */
-
-public interface SnmpAdaptorServerMBean extends CommunicatorServerMBean {
-
-    // GETTERS AND SETTERS
-    //--------------------
-
-    /**
-     * Returns the Ip address based ACL used by this SNMP protocol adaptor.
-     * @return The <CODE>InetAddressAcl</CODE> implementation.
-     *
-     * @since 1.5
-     */
-    public InetAddressAcl getInetAddressAcl();
-    /**
-     * Returns the port used by this SNMP protocol adaptor for sending traps.
-     * By default, port 162 is used.
-     *
-     * @return The port number for sending SNMP traps.
-     */
-    public Integer getTrapPort();
-
-    /**
-     * Sets the port used by this SNMP protocol adaptor for sending traps.
-     *
-     * @param port The port number for sending SNMP traps.
-     */
-    public void setTrapPort(Integer port);
-
-    /**
-     * Returns the port used by this SNMP protocol adaptor for sending inform requests.
-     * By default, port 162 is used.
-     *
-     * @return The port number for sending SNMP inform requests.
-     */
-    public int getInformPort();
-
-    /**
-     * Sets the port used by this SNMP protocol adaptor for sending inform requests.
-     *
-     * @param port The port number for sending SNMP inform requests.
-     */
-    public void setInformPort(int port);
-
-    /**
-     * Gets the number of managers that have been processed by this SNMP protocol adaptor
-     * since its creation.
-     *
-     * @return The number of managers handled by this SNMP protocol adaptor
-     * since its creation. This counter is not reset by the <CODE>stop</CODE> method.
-     */
-    public int getServedClientCount();
-
-    /**
-     * Gets the number of managers currently being processed by this
-     * SNMP protocol adaptor.
-     *
-     * @return The number of managers currently being processed by this
-     * SNMP protocol adaptor.
-     */
-    public int getActiveClientCount();
-
-    /**
-     * Gets the maximum number of managers that this SNMP protocol adaptor can
-     * process concurrently.
-     *
-     * @return The maximum number of managers that this SNMP protocol adaptor can
-     * process concurrently.
-     */
-    public int getMaxActiveClientCount();
-
-    /**
-     * Sets the maximum number of managers this SNMP protocol adaptor can
-     * process concurrently.
-     *
-     * @param c The number of managers.
-     *
-     * @exception java.lang.IllegalStateException This method has been invoked
-     * while the communicator was <CODE>ONLINE</CODE> or <CODE>STARTING</CODE>.
-     */
-    public void setMaxActiveClientCount(int c) throws java.lang.IllegalStateException;
-
-    /**
-     * Returns the protocol of this SNMP protocol adaptor.
-     *
-     * @return The string "snmp".
-     */
-    public String getProtocol();
-
-    /**
-     * Returns the buffer size of this SNMP protocol adaptor.
-     * By default, buffer size 1024 is used.
-     *
-     * @return The buffer size.
-     */
-    public Integer getBufferSize();
-
-    /**
-     * Sets the buffer size of this SNMP protocol adaptor.
-     *
-     * @param s The buffer size.
-     *
-     * @exception java.lang.IllegalStateException This method has been invoked
-     * while the communicator was <CODE>ONLINE</CODE> or <CODE>STARTING</CODE>.
-     */
-    public void setBufferSize(Integer s) throws java.lang.IllegalStateException;
-
-    /**
-     * Gets the number of times to try sending an inform request before giving up.
-     * @return The maximun number of tries.
-     */
-    public int getMaxTries();
-
-    /**
-     * Changes the maximun number of times to try sending an inform request before giving up.
-     * @param newMaxTries The maximun number of tries.
-     */
-    public void setMaxTries(int newMaxTries);
-
-    /**
-     * Gets the timeout to wait for an inform response from the manager.
-     * @return The value of the timeout property.
-     */
-    public int getTimeout();
-
-    /**
-     * Changes the timeout to wait for an inform response from the manager.
-     * @param newTimeout The timeout (in milliseconds).
-     */
-    public void setTimeout(int newTimeout);
-
-    /**
-     * Returns the message factory of this SNMP protocol adaptor.
-     *
-     * @return The factory object.
-     */
-    public SnmpPduFactory getPduFactory();
-
-    /**
-     * Sets the message factory of this SNMP protocol adaptor.
-     *
-     * @param factory The factory object (null means the default factory).
-     */
-    public void setPduFactory(SnmpPduFactory factory);
-
-
-    /**
-     * Set the user-data factory of this SNMP protocol adaptor.
-     *
-     * @param factory The factory object (null means no factory).
-     * @see com.sun.jmx.snmp.agent.SnmpUserDataFactory
-     */
-    public void setUserDataFactory(SnmpUserDataFactory factory);
-
-    /**
-     * Get the user-data factory associated with this SNMP protocol adaptor.
-     *
-     * @return The factory object (null means no factory).
-     * @see com.sun.jmx.snmp.agent.SnmpUserDataFactory
-     */
-    public SnmpUserDataFactory getUserDataFactory();
-
-    /**
-     * Returns <CODE>true</CODE> if authentication traps are enabled.
-     * <P>
-     * When this feature is enabled, the SNMP protocol adaptor sends
-     * an <CODE>authenticationFailure</CODE> trap each time an authentication fails.
-     * <P>
-     * The default behaviour is to send authentication traps.
-     *
-     * @return <CODE>true</CODE> if authentication traps are enabled, <CODE>false</CODE> otherwise.
-     */
-    public boolean getAuthTrapEnabled();
-
-    /**
-     * Sets the flag indicating if traps need to be sent in case of authentication failure.
-     *
-     * @param enabled Flag indicating if traps need to be sent.
-     */
-    public void setAuthTrapEnabled(boolean enabled);
-
-    /**
-     * Returns <code>true</code> if this SNMP protocol adaptor sends a response in case
-     * of authentication failure.
-     * <P>
-     * When this feature is enabled, the SNMP protocol adaptor sends a response with <CODE>noSuchName</CODE>
-     * or <CODE>readOnly</CODE> when the authentication failed. If the flag is disabled, the
-     * SNMP protocol adaptor trashes the PDU silently.
-     * <P>
-     * The default behavior is to send responses.
-     *
-     * @return <code>true</code> if responses are sent.
-     */
-    public boolean getAuthRespEnabled();
-
-    /**
-     * Sets the flag indicating if responses need to be sent in case of authentication failure.
-     *
-     * @param enabled Flag indicating if responses need to be sent.
-     */
-    public void setAuthRespEnabled(boolean enabled);
-
-    /**
-     * Returns the enterprise OID. It is used by {@link #snmpV1Trap snmpV1Trap} to fill
-     * the 'enterprise' field of the trap request.
-     *
-     * @return The OID in string format "x.x.x.x".
-     */
-    public String getEnterpriseOid();
-
-    /**
-     * Sets the enterprise OID.
-     *
-     * @param oid The OID in string format "x.x.x.x".
-     *
-     * @exception IllegalArgumentException The string format is incorrect
-     */
-    public void setEnterpriseOid(String oid) throws IllegalArgumentException;
-
-    /**
-     * Returns the names of the MIBs available in this SNMP protocol adaptor.
-     *
-     * @return An array of MIB names.
-     */
-    public String[] getMibs();
-
-    // GETTERS FOR SNMP GROUP (MIBII)
-    //-------------------------------
-
-    /**
-     * Returns the <CODE>snmpOutTraps</CODE> value defined in MIB-II.
-     *
-     * @return The <CODE>snmpOutTraps</CODE> value.
-     */
-    public Long getSnmpOutTraps();
-
-    /**
-     * Returns the <CODE>snmpOutGetResponses</CODE> value defined in MIB-II.
-     *
-     * @return The <CODE>snmpOutGetResponses</CODE> value.
-     */
-    public Long getSnmpOutGetResponses();
-
-    /**
-     * Returns the <CODE>snmpOutGenErrs</CODE> value defined in MIB-II.
-     *
-     * @return The <CODE>snmpOutGenErrs</CODE> value.
-     */
-    public Long getSnmpOutGenErrs();
-
-    /**
-     * Returns the <CODE>snmpOutBadValues</CODE> value defined in MIB-II.
-     *
-     * @return The <CODE>snmpOutBadValues</CODE> value.
-     */
-    public Long getSnmpOutBadValues();
-
-    /**
-     * Returns the <CODE>snmpOutNoSuchNames</CODE> value defined in MIB-II.
-     *
-     * @return The <CODE>snmpOutNoSuchNames</CODE> value.
-     */
-    public Long getSnmpOutNoSuchNames();
-
-    /**
-     * Returns the <CODE>snmpOutTooBigs</CODE> value defined in MIB-II.
-     *
-     * @return The <CODE>snmpOutTooBigs</CODE> value.
-     */
-    public Long getSnmpOutTooBigs();
-
-    /**
-     * Returns the <CODE>snmpInASNParseErrs</CODE> value defined in MIB-II.
-     *
-     * @return The <CODE>snmpInASNParseErrs</CODE> value.
-     */
-    public Long getSnmpInASNParseErrs();
-
-    /**
-     * Returns the <CODE>snmpInBadCommunityUses</CODE> value defined in MIB-II.
-     *
-     * @return The <CODE>snmpInBadCommunityUses</CODE> value.
-     */
-    public Long getSnmpInBadCommunityUses();
-
-    /**
-     * Returns the <CODE>snmpInBadCommunityNames</CODE> value defined in MIB-II.
-     *
-     * @return The <CODE>snmpInBadCommunityNames</CODE> value.
-     */
-    public Long getSnmpInBadCommunityNames();
-
-    /**
-     * Returns the <CODE>snmpInBadVersions</CODE> value defined in MIB-II.
-     *
-     * @return The <CODE>snmpInBadVersions</CODE> value.
-     */
-    public Long getSnmpInBadVersions();
-
-    /**
-     * Returns the <CODE>snmpOutPkts</CODE> value defined in MIB-II.
-     *
-     * @return The <CODE>snmpOutPkts</CODE> value.
-     */
-    public Long getSnmpOutPkts();
-
-    /**
-     * Returns the <CODE>snmpInPkts</CODE> value defined in MIB-II.
-     *
-     * @return The <CODE>snmpInPkts</CODE> value.
-     */
-    public Long getSnmpInPkts();
-
-    /**
-     * Returns the <CODE>snmpInGetRequests</CODE> value defined in MIB-II.
-     *
-     * @return The <CODE>snmpInGetRequests</CODE> value.
-     */
-    public Long getSnmpInGetRequests();
-
-    /**
-     * Returns the <CODE>snmpInGetNexts</CODE> value defined in MIB-II.
-     *
-     * @return The <CODE>snmpInGetNexts</CODE> value.
-     */
-    public Long getSnmpInGetNexts();
-
-    /**
-     * Returns the <CODE>snmpInSetRequests</CODE> value defined in MIB-II.
-     *
-     * @return The <CODE>snmpInSetRequests</CODE> value.
-     */
-    public Long getSnmpInSetRequests();
-
-    /**
-     * Returns the <CODE>snmpInTotalSetVars</CODE> value defined in MIB-II.
-     *
-     * @return The <CODE>snmpInTotalSetVars</CODE> value.
-     */
-    public Long getSnmpInTotalSetVars();
-
-    /**
-     * Returns the <CODE>snmpInTotalReqVars</CODE> value defined in MIB-II.
-     *
-     * @return The <CODE>snmpInTotalReqVars</CODE> value.
-     */
-    public Long getSnmpInTotalReqVars();
-
-    /**
-     * Returns the <CODE>snmpSilentDrops</CODE> value defined in rfc 1907 NMPv2-MIB .
-     *
-     * @return The <CODE>snmpSilentDrops</CODE> value.
-     *
-     * @since 1.5
-     */
-    public Long getSnmpSilentDrops();
-
-    /**
-     * Returns the <CODE>snmpProxyDrops</CODE> value defined in rfc 1907 NMPv2-MIB .
-     *
-     * @return The <CODE>snmpProxyDrops</CODE> value.
-     *
-     * @since 1.5
-     */
-    public Long getSnmpProxyDrops();
-
-    // PUBLIC METHODS
-    //---------------
-
-    /**
-     * Adds a new MIB in the SNMP MIB handler.
-     * This method is called automatically by {@link com.sun.jmx.snmp.agent.SnmpMibAgent#setSnmpAdaptor(SnmpMibHandler)}
-     * and {@link com.sun.jmx.snmp.agent.SnmpMibAgent#setSnmpAdaptorName(ObjectName)}
-     * and should not be called directly.
-     *
-     * @param mib The MIB to add.
-     *
-     * @return A reference to the SNMP MIB handler.
-     *
-     * @exception IllegalArgumentException If the parameter is null.
-     */
-    public SnmpMibHandler addMib(SnmpMibAgent mib) throws IllegalArgumentException;
-
-    /**
-     * Adds a new MIB in the SNMP MIB handler.
-     *
-     * @param mib The MIB to add.
-     * @param oids The set of OIDs this agent implements.
-     *
-     * @return A reference to the SNMP MIB handler.
-     *
-     * @exception IllegalArgumentException If the parameter is null.
-     *
-     * @since 1.5
-     */
-    public SnmpMibHandler addMib(SnmpMibAgent mib, SnmpOid[] oids) throws IllegalArgumentException;
-
-    /**
-     * Removes the specified MIB from the SNMP protocol adaptor.
-     * This method is called automatically by {@link com.sun.jmx.snmp.agent.SnmpMibAgent#setSnmpAdaptor(SnmpMibHandler)}
-     * and {@link com.sun.jmx.snmp.agent.SnmpMibAgent#setSnmpAdaptorName(ObjectName)}
-     * and should not be called directly.
-     *
-     * @param mib The MIB to be removed.
-     *
-     * @return <code>true</code> if the specified <CODE>mib</CODE> was a MIB included in the SNMP MIB handler,
-     * <code>false</code> otherwise.
-     */
-    public boolean removeMib(SnmpMibAgent mib);
-
-    /**
-     * Sends a trap using SNMP V1 trap format.
-     * <BR>The trap is sent to each destination defined in the ACL file (if available).
-     * If no ACL file or no destinations are available, the trap is sent to the local host.
-     *
-     * @param generic The generic number of the trap.
-     * @param specific The specific number of the trap.
-     * @param varBindList A list of <CODE>SnmpVarBind</CODE> instances or null.
-     *
-     * @exception IOException An I/O error occured while sending the trap.
-     * @exception SnmpStatusException If the trap exceeds the limit defined by <CODE>bufferSize</CODE>.
-     */
-    public void snmpV1Trap(int generic, int specific, SnmpVarBindList varBindList) throws IOException, SnmpStatusException;
-
-
-    /**
-     * Sends a trap using SNMP V1 trap format.
-     * <BR>The trap is sent to the specified <CODE>InetAddress</CODE> destination
-     * using the specified community string (and the ACL file is not used).
-     *
-     * @param address The <CODE>InetAddress</CODE> destination of the trap.
-     * @param cs The community string to be used for the trap.
-     * @param generic The generic number of the trap.
-     * @param specific The specific number of the trap.
-     * @param varBindList A list of <CODE>SnmpVarBind</CODE> instances or null.
-     *
-     * @exception IOException An I/O error occurred while sending the trap.
-     * @exception SnmpStatusException If the trap exceeds the limit defined by <CODE>bufferSize</CODE>.
-     */
-    public void snmpV1Trap(InetAddress address, String cs, int generic, int specific, SnmpVarBindList varBindList)
-        throws IOException, SnmpStatusException;
-
-
-    /**
-     * Sends a trap using SNMP V1 trap format.
-     * <BR>The trap is sent to the specified <CODE>SnmpPeer</CODE> destination.
-     * The community string used is the one located in the <CODE>SnmpPeer</CODE> parameters (<CODE>SnmpParameters.getRdCommunity() </CODE>).
-     *
-     * @param peer The <CODE>SnmpPeer</CODE> destination of the trap.
-     * @param agentAddr The agent address to be used for the trap.
-     * @param enterpOid The enterprise OID to be used for the trap.
-     * @param generic The generic number of the trap.
-     * @param specific The specific number of the trap.
-     * @param varBindList A list of <CODE>SnmpVarBind</CODE> instances or null.
-     * @param time The time stamp (overwrite the current time).
-     *
-     * @exception IOException An I/O error occurred while sending the trap.
-     * @exception SnmpStatusException If the trap exceeds the limit defined by <CODE>bufferSize</CODE>.
-     *
-     * @since 1.5
-     */
-    public void snmpV1Trap(SnmpPeer peer,
-                           SnmpIpAddress agentAddr,
-                           SnmpOid enterpOid,
-                           int generic,
-                           int specific,
-                           SnmpVarBindList varBindList,
-                           SnmpTimeticks time) throws IOException, SnmpStatusException;
-
-    /**
-     * Sends a trap using SNMP V2 trap format.
-     * <BR>The trap is sent to the specified <CODE>SnmpPeer</CODE> destination.
-     * <BR>The community string used is the one located in the <CODE>SnmpPeer</CODE> parameters (<CODE>SnmpParameters.getRdCommunity() </CODE>).
-     * <BR>The variable list included in the outgoing trap is composed of the following items:
-     * <UL>
-     * <LI><CODE>sysUpTime.0</CODE> with the value specified by <CODE>time</CODE>
-     * <LI><CODE>snmpTrapOid.0</CODE> with the value specified by <CODE>trapOid</CODE>
-     * <LI><CODE>all the (oid,values)</CODE> from the specified <CODE>varBindList</CODE>
-     * </UL>
-     *
-     * @param peer The <CODE>SnmpPeer</CODE> destination of the trap.
-     * @param trapOid The OID identifying the trap.
-     * @param varBindList A list of <CODE>SnmpVarBind</CODE> instances or null.
-     * @param time The time stamp (overwrite the current time).
-     *
-     * @exception IOException An I/O error occurred while sending the trap.
-     * @exception SnmpStatusException If the trap exceeds the limit defined by <CODE>bufferSize</CODE>.
-     *
-     * @since 1.5
-     */
-    public void snmpV2Trap(SnmpPeer peer,
-                           SnmpOid trapOid,
-                           SnmpVarBindList varBindList,
-                           SnmpTimeticks time) throws IOException, SnmpStatusException;
-
-    /**
-     * Sends a trap using SNMP V2 trap format.
-     * <BR>The trap is sent to each destination defined in the ACL file (if available).
-     * If no ACL file or no destinations are available, the trap is sent to the local host.
-     * <BR>The variable list included in the outgoing trap is composed of the following items:
-     * <UL>
-     * <LI><CODE>sysUpTime.0</CODE> with its current value
-     * <LI><CODE>snmpTrapOid.0</CODE> with the value specified by <CODE>trapOid</CODE>
-     * <LI><CODE>all the (oid,values)</CODE> from the specified <CODE>varBindList</CODE>
-     * </UL>
-     *
-     * @param trapOid The OID identifying the trap.
-     * @param varBindList A list of <CODE>SnmpVarBind</CODE> instances or null.
-     *
-     * @exception IOException An I/O error occured while sending the trap.
-     * @exception SnmpStatusException If the trap exceeds the limit defined by <CODE>bufferSize</CODE>.
-     */
-    public void snmpV2Trap(SnmpOid trapOid, SnmpVarBindList varBindList) throws IOException, SnmpStatusException;
-
-
-    /**
-     * Sends a trap using SNMP V2 trap format.
-     * <BR>The trap is sent to the specified <CODE>InetAddress</CODE> destination
-     * using the specified community string (and the ACL file is not used).
-     * <BR>The variable list included in the outgoing trap is composed of the following items:
-     * <UL>
-     * <LI><CODE>sysUpTime.0</CODE> with its current value
-     * <LI><CODE>snmpTrapOid.0</CODE> with the value specified by <CODE>trapOid</CODE>
-     * <LI><CODE>all the (oid,values)</CODE> from the specified <CODE>varBindList</CODE>
-     * </UL>
-     *
-     * @param address The <CODE>InetAddress</CODE> destination of the trap.
-     * @param cs The community string to be used for the trap.
-     * @param trapOid The OID identifying the trap.
-     * @param varBindList A list of <CODE>SnmpVarBind</CODE> instances or null.
-     *
-     * @exception IOException An I/O error occurred while sending the trap.
-     * @exception SnmpStatusException If the trap exceeds the limit defined by <CODE>bufferSize</CODE>.
-     */
-    public void snmpV2Trap(InetAddress address, String cs, SnmpOid trapOid, SnmpVarBindList varBindList)
-        throws IOException, SnmpStatusException;
-
-    /**
-     * Send the specified trap PDU to the passed <CODE>InetAddress</CODE>.
-     * @param address The destination address.
-     * @param pdu The pdu to send.
-     * @exception IOException An I/O error occurred while sending the trap.
-     * @exception SnmpStatusException If the trap exceeds the limit defined by <CODE>bufferSize</CODE>.
-     *
-     * @since 1.5
-     */
-    public void snmpPduTrap(InetAddress address, SnmpPduPacket pdu)
-        throws IOException, SnmpStatusException;
-    /**
-     * Send the specified trap PDU to the passed <CODE>SnmpPeer</CODE>.
-     * @param peer The destination peer. The Read community string is used of <CODE>SnmpParameters</CODE> is used as the trap community string.
-     * @param pdu The pdu to send.
-     * @exception IOException An I/O error occurred while sending the trap.
-     * @exception SnmpStatusException If the trap exceeds the limit defined by <CODE>bufferSize</CODE>.
-     * @since 1.5
-     */
-    public void snmpPduTrap(SnmpPeer peer,
-                            SnmpPduPacket pdu)
-        throws IOException, SnmpStatusException;
-
-    /**
-     * Sends an inform using SNMP V2 inform request format.
-     * <BR>The inform request is sent to each destination defined in the ACL file (if available).
-     * If no ACL file or no destinations are available, the inform request is sent to the local host.
-     * <BR>The variable list included in the outgoing inform request is composed of the following items:
-     * <UL>
-     * <LI><CODE>sysUpTime.0</CODE> with its current value
-     * <LI><CODE>snmpTrapOid.0</CODE> with the value specified by <CODE>trapOid</CODE>
-     * <LI><CODE>all the (oid,values)</CODE> from the specified <CODE>varBindList</CODE>
-     * </UL>
-     * To send an inform request, the SNMP adaptor server must be active.
-     *
-     * @param cb The callback that is invoked when a request is complete.
-     * @param trapOid The OID identifying the trap.
-     * @param varBindList A list of <CODE>SnmpVarBind</CODE> instances or null.
-     *
-     * @return A vector of {@link com.sun.jmx.snmp.daemon.SnmpInformRequest} objects.
-     * <P>If there is no destination host for this inform request, the returned vector will be empty.
-     *
-     * @exception IllegalStateException  This method has been invoked while the SNMP adaptor server was not active.
-     * @exception IOException An I/O error occurred while sending the inform request.
-     * @exception SnmpStatusException If the inform request exceeds the limit defined by <CODE>bufferSize</CODE>.
-     */
-    public Vector snmpInformRequest(SnmpInformHandler cb, SnmpOid trapOid, SnmpVarBindList varBindList)
-        throws IllegalStateException, IOException, SnmpStatusException;
-
-    /**
-     * Sends an inform using SNMP V2 inform request format.
-     * <BR>The inform is sent to the specified <CODE>InetAddress</CODE> destination
-     * using the specified community string.
-     * <BR>The variable list included in the outgoing inform request is composed of the following items:
-     * <UL>
-     * <LI><CODE>sysUpTime.0</CODE> with its current value
-     * <LI><CODE>snmpTrapOid.0</CODE> with the value specified by <CODE>trapOid</CODE>
-     * <LI><CODE>all the (oid,values)</CODE> from the specified <CODE>varBindList</CODE>
-     * </UL>
-     * To send an inform request, the SNMP adaptor server must be active.
-     *
-     * @param address The <CODE>InetAddress</CODE> destination for this inform request.
-     * @param cs The community string to be used for the inform request.
-     * @param cb The callback that is invoked when a request is complete.
-     * @param trapOid The OID identifying the trap.
-     * @param varBindList A list of <CODE>SnmpVarBind</CODE> instances or null.
-     *
-     * @return The inform request object.
-     *
-     * @exception IllegalStateException  This method has been invoked while the SNMP adaptor server was not active.
-     * @exception IOException An I/O error occurred while sending the inform request.
-     * @exception SnmpStatusException If the inform request exceeds the limit defined by <CODE>bufferSize</CODE>.
-     */
-    public SnmpInformRequest snmpInformRequest(InetAddress address, String cs, SnmpInformHandler cb,
-                                               SnmpOid trapOid, SnmpVarBindList varBindList)
-        throws IllegalStateException, IOException, SnmpStatusException;
-
-
-    /**
-     * Sends an inform using SNMP V2 inform request format.
-     * <BR>The inform is sent to the specified <CODE>SnmpPeer</CODE> destination.
-     * <BR> The community string used is the one located in the <CODE>SnmpPeer</CODE> parameters (<CODE>SnmpParameters.getInformCommunity() </CODE>).
-     * <BR>The variable list included in the outgoing inform is composed of the following items:
-     * <UL>
-     * <LI><CODE>sysUpTime.0</CODE> with its current value
-     * <LI><CODE>snmpTrapOid.0</CODE> with the value specified by <CODE>trapOid</CODE>
-     * <LI><CODE>all the (oid,values)</CODE> from the specified <CODE>varBindList</CODE>
-     * </UL>
-     * To send an inform request, the SNMP adaptor server must be active.
-     *
-     * @param peer The <CODE>SnmpPeer</CODE> destination for this inform request.
-     * @param cb The callback that is invoked when a request is complete.
-     * @param trapOid The OID identifying the trap.
-     * @param varBindList A list of <CODE>SnmpVarBind</CODE> instances or null.
-     *
-     * @return The inform request object.
-     *
-     * @exception IllegalStateException  This method has been invoked while the SNMP adaptor server was not active.
-     * @exception IOException An I/O error occurred while sending the inform request.
-     * @exception SnmpStatusException If the inform request exceeds the limit defined by <CODE>bufferSize</CODE>.
-     *
-     * @since 1.5
-     */
-    public SnmpInformRequest snmpInformRequest(SnmpPeer peer,
-                                               SnmpInformHandler cb,
-                                               SnmpOid trapOid,
-                                               SnmpVarBindList varBindList) throws IllegalStateException, IOException, SnmpStatusException;
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/daemon/SnmpInformHandler.java b/ojluni/src/main/java/com/sun/jmx/snmp/daemon/SnmpInformHandler.java
deleted file mode 100755
index 409cbb2..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/daemon/SnmpInformHandler.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Copyright (c) 2000, 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.
- */
-
-package com.sun.jmx.snmp.daemon ;
-
-// JMX imports
-//
-import com.sun.jmx.snmp.SnmpDefinitions;
-import com.sun.jmx.snmp.SnmpVarBindList;
-
-/**
- * Provides the callback methods that are required to be implemented by the application
- * when an inform response is received by the agent.
- * <P>
- * Each inform request can be provided with an object that implements this callback
- * interface. An application then uses the SNMP adaptor to start an SNMP inform request,
- * which marks the request as active. The methods in this callback interface
- * get invoked when any of the following happens:
- * <P>
- * <UL>
- * <LI> The agent receives the SNMP inform response.
- * <LI> The agent does not receive any response within a specified time and the number of tries
- * have exceeded the limit (timeout condition).
- * <LI> An internal error occurs while processing or parsing the inform request.
- * </UL>
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- */
-
-public interface SnmpInformHandler extends SnmpDefinitions {
-
-    /**
-     * This callback is invoked when a manager responds to an SNMP inform request.
-     * The callback should check the error status of the inform request to determine
-     * the kind of response.
-     *
-     * @param request The <CODE>SnmpInformRequest</CODE> associated with this callback.
-     * @param errStatus The status of the request.
-     * @param errIndex The index in the list that caused the error.
-     * @param vblist The <CODE>Response varBind</CODE> list for the successful request.
-     */
-    public abstract void processSnmpPollData(SnmpInformRequest request, int errStatus, int errIndex, SnmpVarBindList vblist);
-
-    /**
-     * This callback is invoked when a manager does not respond within the
-     * specified timeout value to the SNMP inform request. The number of tries have also
-     * been exhausted.
-     * @param request The <CODE>SnmpInformRequest</CODE> associated with this callback.
-     */
-    public abstract void processSnmpPollTimeout(SnmpInformRequest request);
-
-    /**
-     * This callback is invoked when any form of internal error occurs.
-     * @param request The <CODE>SnmpInformRequest</CODE> associated with this callback.
-     * @param errmsg The <CODE>String</CODE> describing the internal error.
-     */
-    public abstract void processSnmpInternalError(SnmpInformRequest request, String errmsg);
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/daemon/SnmpMibTree.java b/ojluni/src/main/java/com/sun/jmx/snmp/daemon/SnmpMibTree.java
deleted file mode 100755
index 66fe5f8..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/daemon/SnmpMibTree.java
+++ /dev/null
@@ -1,269 +0,0 @@
-/*
- * Copyright (c) 1998, 2006, 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.jmx.snmp.daemon;
-
-
-
-// java imports
-//
-import java.util.Vector;
-import java.util.Enumeration;
-
-// jmx imports
-//
-import com.sun.jmx.snmp.SnmpOid;
-
-// SNMP Runtime imports
-//
-import com.sun.jmx.snmp.agent.SnmpMibAgent;
-
-/**
- * The class is used for building a tree representation of the different
- * root oids of the supported MIBs. Each node is associated to a specific MIB.
- */
-final class SnmpMibTree {
-
-    public SnmpMibTree() {
-      defaultAgent= null;
-      root= new TreeNode(-1, null, null);
-    }
-
-    public void setDefaultAgent(SnmpMibAgent def) {
-        defaultAgent= def;
-        root.agent= def;
-    }
-
-    public SnmpMibAgent getDefaultAgent() {
-        return defaultAgent;
-    }
-
-    public void register(SnmpMibAgent agent) {
-        root.registerNode(agent);
-    }
-
-    public void register(SnmpMibAgent agent, long[] oid) {
-      root.registerNode(oid, 0, agent);
-    }
-
-    public SnmpMibAgent getAgentMib(SnmpOid oid) {
-        TreeNode node= root.retrieveMatchingBranch(oid.longValue(), 0);
-        if (node == null)
-            return defaultAgent;
-        else
-            if(node.getAgentMib() == null)
-                return defaultAgent;
-            else
-                return node.getAgentMib();
-    }
-
-    public void unregister(SnmpMibAgent agent, SnmpOid[] oids) {
-        for(int i = 0; i < oids.length; i++) {
-            long[] oid = oids[i].longValue();
-            TreeNode node = root.retrieveMatchingBranch(oid, 0);
-            if (node == null)
-                continue;
-            node.removeAgent(agent);
-        }
-    }
-
-
-    public void unregister(SnmpMibAgent agent) {
-
-        root.removeAgentFully(agent);
-    }
-
-    /*
-    public void unregister(SnmpMibAgent agent) {
-        long[] oid= agent.getRootOid();
-        TreeNode node= root.retrieveMatchingBranch(oid, 0);
-        if (node == null)
-            return;
-        node.removeAgent(agent);
-    }
-    */
-    public void printTree() {
-        root.printTree(">");
-    }
-
-    private SnmpMibAgent defaultAgent;
-    private TreeNode root;
-
-    // A SnmpMibTree object is a tree of TreeNode
-    //
-    final class TreeNode {
-
-        void registerNode(SnmpMibAgent agent) {
-            long[] oid= agent.getRootOid();
-            registerNode(oid, 0, agent);
-        }
-
-        TreeNode retrieveMatchingBranch(long[] oid, int cursor) {
-            TreeNode node= retrieveChild(oid, cursor);
-            if (node == null)
-                return this;
-            if (children.size() == 0) {
-                // In this case, the node does not have any children. So no point to
-                // continue the search ...
-                return node;
-            }
-            if( cursor + 1 == oid.length) {
-                // In this case, the oid does not have any more element. So the search
-                // is over.
-                return node;
-            }
-
-            TreeNode n = node.retrieveMatchingBranch(oid, cursor + 1);
-            //If the returned node got a null agent, we have to replace it by
-            //the current one (in case it is not null)
-            //
-            return n.agent == null ? this : n;
-        }
-
-        SnmpMibAgent getAgentMib() {
-            return agent;
-        }
-
-        public void printTree(String ident) {
-
-            StringBuffer buff= new StringBuffer();
-            if (agents == null) {
-                return;
-            }
-
-            for(Enumeration e= agents.elements(); e.hasMoreElements(); ) {
-                SnmpMibAgent mib= (SnmpMibAgent) e.nextElement();
-                if (mib == null)
-                    buff.append("empty ");
-                else
-                    buff.append(mib.getMibName() + " ");
-            }
-            ident+= " ";
-            if (children == null) {
-                return;
-            }
-            for(Enumeration e= children.elements(); e.hasMoreElements(); ) {
-                TreeNode node= (TreeNode) e.nextElement();
-                node.printTree(ident);
-            }
-        }
-
-        // PRIVATE STUFF
-        //--------------
-
-        /**
-         * Only the treeNode class can create an instance of treeNode.
-         * The creation occurs when registering a new oid.
-         */
-        private TreeNode(long nodeValue, SnmpMibAgent agent, TreeNode sup) {
-            this.nodeValue= nodeValue;
-            this.parent= sup;
-            agents.addElement(agent);
-        }
-
-        private void removeAgentFully(SnmpMibAgent agent) {
-            Vector<TreeNode> v = new Vector<TreeNode>();
-            for(Enumeration<TreeNode> e= children.elements();
-                e.hasMoreElements(); ) {
-
-                TreeNode node= e.nextElement();
-                node.removeAgentFully(agent);
-                if(node.agents.isEmpty())
-                    v.add(node);
-
-            }
-            for(Enumeration<TreeNode> e= v.elements(); e.hasMoreElements(); ) {
-                children.removeElement(e.nextElement());
-            }
-            removeAgent(agent);
-
-        }
-
-        private void removeAgent(SnmpMibAgent mib) {
-            if (!agents.contains(mib))
-                return;
-            agents.removeElement(mib);
-
-            if (!agents.isEmpty())
-                agent= agents.firstElement();
-
-        }
-
-      private void setAgent(SnmpMibAgent agent) {
-        this.agent = agent;
-      }
-
-        private void registerNode(long[] oid, int cursor, SnmpMibAgent agent) {
-
-            if (cursor >= oid.length)
-                //That's it !
-                //
-                return;
-            TreeNode child = retrieveChild(oid, cursor);
-            if (child == null) {
-                // Create a child and register it !
-                //
-                long theValue= oid[cursor];
-                child= new TreeNode(theValue, agent, this);
-                children.addElement(child);
-            }
-            else
-                if (agents.contains(agent) == false) {
-                    agents.addElement(agent);
-                }
-
-            // We have to set the agent attribute
-            //
-            if(cursor == (oid.length - 1)) {
-              child.setAgent(agent);
-            }
-            else
-              child.registerNode(oid, cursor+1, agent);
-        }
-
-        private TreeNode retrieveChild(long[] oid, int current) {
-            long theValue= oid[current];
-
-            for(Enumeration e= children.elements(); e.hasMoreElements(); ) {
-                TreeNode node= (TreeNode) e.nextElement();
-                if (node.match(theValue))
-                    return node;
-            }
-            return null;
-        }
-
-        final private boolean match(long value) {
-            return (nodeValue == value) ? true : false;
-        }
-
-        private Vector<TreeNode> children= new Vector<TreeNode>();
-        private Vector<SnmpMibAgent> agents= new Vector<SnmpMibAgent>();
-        private long nodeValue;
-        private SnmpMibAgent agent;
-        private TreeNode parent;
-
-    }; // end of class TreeNode
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/daemon/SnmpRequestHandler.java b/ojluni/src/main/java/com/sun/jmx/snmp/daemon/SnmpRequestHandler.java
deleted file mode 100755
index 53b9f0b..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/daemon/SnmpRequestHandler.java
+++ /dev/null
@@ -1,1152 +0,0 @@
-/*
- * Copyright (c) 1998, 2006, 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.jmx.snmp.daemon;
-
-
-
-// java import
-//
-import java.util.Vector;
-import java.util.Enumeration;
-import java.util.Hashtable;
-import java.util.logging.Level;
-import java.io.InterruptedIOException;
-import java.net.DatagramSocket;
-import java.net.DatagramPacket;
-import java.net.SocketException;
-
-// jmx imports
-//
-import javax.management.MBeanServer;
-import javax.management.ObjectName;
-import com.sun.jmx.snmp.SnmpMessage;
-import com.sun.jmx.snmp.SnmpPduFactory;
-import com.sun.jmx.snmp.SnmpPduBulk;
-import com.sun.jmx.snmp.SnmpPduPacket;
-import com.sun.jmx.snmp.SnmpPduRequest;
-import com.sun.jmx.snmp.SnmpPduTrap;
-import com.sun.jmx.snmp.SnmpValue;
-import com.sun.jmx.snmp.SnmpVarBind;
-import com.sun.jmx.snmp.SnmpVarBindList;
-import com.sun.jmx.snmp.SnmpDefinitions;
-import com.sun.jmx.snmp.SnmpStatusException;
-import com.sun.jmx.snmp.SnmpTooBigException;
-import com.sun.jmx.snmp.SnmpDataTypeEnums;
-
-// RI imports
-//
-import static com.sun.jmx.defaults.JmxProperties.SNMP_ADAPTOR_LOGGER;
-
-// SNMP runtime import
-//
-import com.sun.jmx.snmp.agent.SnmpMibAgent;
-import com.sun.jmx.snmp.agent.SnmpUserDataFactory;
-//import com.sun.jmx.snmp.IPAcl.IPAcl;
-import com.sun.jmx.snmp.InetAddressAcl;
-
-
-class SnmpRequestHandler extends ClientHandler implements SnmpDefinitions {
-
-    private transient DatagramSocket      socket = null ;
-    private transient DatagramPacket      packet = null ;
-    private transient Vector              mibs = null ;
-
-    /**
-     * Contains the list of sub-requests associated to the current request.
-     */
-    private transient Hashtable<SnmpMibAgent, SnmpSubRequestHandler> subs = null;
-
-    /**
-     * Reference on the MIBS
-     */
-    private transient SnmpMibTree root;
-
-    private transient Object              ipacl = null ;
-    private transient SnmpPduFactory      pduFactory = null ;
-    private transient SnmpUserDataFactory userDataFactory = null ;
-    private transient SnmpAdaptorServer adaptor = null;
-    /**
-     * Full constructor
-     */
-    public SnmpRequestHandler(SnmpAdaptorServer server, int id,
-                              DatagramSocket s, DatagramPacket p,
-                              SnmpMibTree tree, Vector m, Object a,
-                              SnmpPduFactory factory,
-                              SnmpUserDataFactory dataFactory,
-                              MBeanServer f, ObjectName n)
-    {
-        super(server, id, f, n);
-
-        // Need a reference on SnmpAdaptorServer for getNext & getBulk,
-        // in case of oid equality (mib overlapping).
-        //
-        adaptor = server;
-        socket = s;
-        packet = p;
-        root= tree;
-        mibs = (Vector) m.clone();
-        subs= new Hashtable<SnmpMibAgent, SnmpSubRequestHandler>(mibs.size());
-        ipacl = a;
-        pduFactory = factory ;
-        userDataFactory = dataFactory ;
-        //thread.start();
-    }
-
-    /**
-     * Treat the request available in 'packet' and send the result
-     * back to the client.
-     * Note: we overwrite 'packet' with the response bytes.
-     */
-    public void doRun() {
-
-        // Trace the input packet
-        //
-        if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
-            SNMP_ADAPTOR_LOGGER.logp(Level.FINER, dbgTag,
-                    "doRun","Packet received:\n" +
-                    SnmpMessage.dumpHexBuffer(packet.getData(), 0, packet.getLength()));
-        }
-
-        // Let's build the response packet
-        //
-        DatagramPacket respPacket = makeResponsePacket(packet) ;
-
-        // Trace the output packet
-        //
-        if ((SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) && (respPacket != null)) {
-            SNMP_ADAPTOR_LOGGER.logp(Level.FINER, dbgTag,
-                    "doRun","Packet to be sent:\n" +
-                    SnmpMessage.dumpHexBuffer(respPacket.getData(), 0, respPacket.getLength()));
-        }
-
-        // Send the response packet if any
-        //
-        if (respPacket != null) {
-            try {
-                socket.send(respPacket) ;
-            } catch (SocketException e) {
-                if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                    if (e.getMessage().equals(InterruptSysCallMsg)) {
-                        SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, dbgTag,
-                            "doRun", "interrupted");
-                    } else {
-                      SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, dbgTag,
-                            "doRun", "I/O exception", e);
-                    }
-                }
-            } catch(InterruptedIOException e) {
-                if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                    SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, dbgTag,
-                        "doRun", "interrupted");
-                }
-            } catch(Exception e) {
-                if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                    SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, dbgTag,
-                        "doRun", "failure when sending response", e);
-                }
-            }
-        }
-    }
-
-    /**
-     * Here we make a response packet from a request packet.
-     * We return null if there no response packet to sent.
-     */
-    private DatagramPacket makeResponsePacket(DatagramPacket reqPacket) {
-        DatagramPacket respPacket = null ;
-
-        // Transform the request packet into a request SnmpMessage
-        //
-        SnmpMessage reqMsg = new SnmpMessage() ;
-        try {
-            reqMsg.decodeMessage(reqPacket.getData(), reqPacket.getLength()) ;
-            reqMsg.address = reqPacket.getAddress() ;
-            reqMsg.port = reqPacket.getPort() ;
-        }
-        catch(SnmpStatusException x) {
-            if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, dbgTag,
-                    "makeResponsePacket", "packet decoding failed", x);
-            }
-            reqMsg = null ;
-            ((SnmpAdaptorServer)adaptorServer).incSnmpInASNParseErrs(1) ;
-        }
-
-        // Make the response SnmpMessage if any
-        //
-        SnmpMessage respMsg = null ;
-        if (reqMsg != null) {
-            respMsg = makeResponseMessage(reqMsg) ;
-        }
-
-        // Try to transform the response SnmpMessage into response packet.
-        // NOTE: we overwrite the request packet.
-        //
-        if (respMsg != null) {
-            try {
-                reqPacket.setLength(respMsg.encodeMessage(reqPacket.getData())) ;
-                respPacket = reqPacket ;
-            }
-            catch(SnmpTooBigException x) {
-                if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                    SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, dbgTag,
-                        "makeResponsePacket", "response message is too big");
-                }
-                try {
-                    respMsg = newTooBigMessage(reqMsg) ;
-                    reqPacket.setLength(respMsg.encodeMessage(reqPacket.getData())) ;
-                    respPacket = reqPacket ;
-                }
-                catch(SnmpTooBigException xx) {
-                    if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                        SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, dbgTag,
-                            "makeResponsePacket", "'too big' is 'too big' !!!");
-                    }
-                    adaptor.incSnmpSilentDrops(1);
-                }
-            }
-        }
-
-        return respPacket ;
-    }
-
-    /**
-     * Here we make a response message from a request message.
-     * We return null if there is no message to reply.
-     */
-    private SnmpMessage makeResponseMessage(SnmpMessage reqMsg) {
-        SnmpMessage respMsg = null ;
-
-        // Transform the request message into a request pdu
-        //
-        SnmpPduPacket reqPdu = null ;
-        Object userData = null;
-        try {
-            reqPdu = (SnmpPduPacket)pduFactory.decodeSnmpPdu(reqMsg) ;
-            if (reqPdu != null && userDataFactory != null)
-                userData = userDataFactory.allocateUserData(reqPdu);
-        }
-        catch(SnmpStatusException x) {
-            reqPdu = null ;
-            SnmpAdaptorServer snmpServer = (SnmpAdaptorServer)adaptorServer ;
-            snmpServer.incSnmpInASNParseErrs(1) ;
-            if (x.getStatus()== SnmpDefinitions.snmpWrongSnmpVersion)
-                snmpServer.incSnmpInBadVersions(1) ;
-            if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, dbgTag,
-                    "makeResponseMessage", "message decoding failed", x);
-            }
-        }
-
-        // Make the response pdu if any
-        //
-        SnmpPduPacket respPdu = null ;
-        if (reqPdu != null) {
-            respPdu = makeResponsePdu(reqPdu,userData) ;
-            try {
-                if (userDataFactory != null)
-                    userDataFactory.releaseUserData(userData,respPdu);
-            } catch (SnmpStatusException x) {
-                respPdu = null;
-            }
-        }
-
-        // Try to transform the response pdu into a response message if any
-        //
-        if (respPdu != null) {
-            try {
-                respMsg = (SnmpMessage)pduFactory.
-                    encodeSnmpPdu(respPdu, packet.getData().length) ;
-            }
-            catch(SnmpStatusException x) {
-                respMsg = null ;
-                if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                    SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, dbgTag,
-                        "makeResponseMessage", "failure when encoding the response message", x);
-                }
-            }
-            catch(SnmpTooBigException x) {
-                if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                    SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, dbgTag,
-                        "makeResponseMessage", "response message is too big");
-                }
-
-                try {
-                    // if the PDU is too small, why should we try to do
-                    // recovery ?
-                    //
-                    if (packet.getData().length <=32)
-                        throw x;
-                    int pos= x.getVarBindCount();
-                    if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                        SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, dbgTag,
-                            "makeResponseMessage", "fail on element" + pos);
-                    }
-                    int old= 0;
-                    while (true) {
-                        try {
-                            respPdu = reduceResponsePdu(reqPdu, respPdu, pos) ;
-                            respMsg = (SnmpMessage)pduFactory.
-                                encodeSnmpPdu(respPdu,
-                                              packet.getData().length -32) ;
-                            break;
-                        } catch (SnmpTooBigException xx) {
-                            if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                                SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, dbgTag,
-                                    "makeResponseMessage", "response message is still too big");
-                            }
-                            old= pos;
-                            pos= xx.getVarBindCount();
-                            if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                                SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, dbgTag,
-                                    "makeResponseMessage","fail on element" + pos);
-                            }
-                            if (pos == old) {
-                                // we can not go any further in trying to
-                                // reduce the message !
-                                //
-                                throw xx;
-                            }
-                        }
-                    }// end of loop
-                } catch(SnmpStatusException xx) {
-                    respMsg = null ;
-                    if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                        SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, dbgTag,
-                           "makeResponseMessage", "failure when encoding the response message", xx);
-                    }
-                }
-                catch(SnmpTooBigException xx) {
-                    try {
-                        respPdu = newTooBigPdu(reqPdu) ;
-                        respMsg = (SnmpMessage)pduFactory.
-                            encodeSnmpPdu(respPdu, packet.getData().length) ;
-                    }
-                    catch(SnmpTooBigException xxx) {
-                        respMsg = null ;
-                        if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                            SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, dbgTag,
-                               "makeResponseMessage", "'too big' is 'too big' !!!");
-                        }
-                        adaptor.incSnmpSilentDrops(1);
-                    }
-                    catch(Exception xxx) {
-                        if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                            SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, dbgTag,
-                               "makeResponseMessage", "Got unexpected exception", xxx);
-                        }
-                        respMsg = null ;
-                    }
-                }
-                catch(Exception xx) {
-                    if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                        SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, dbgTag,
-                           "makeResponseMessage", "Got unexpected exception", xx);
-                    }
-                    respMsg = null ;
-                }
-            }
-        }
-        return respMsg ;
-    }
-
-    /**
-     * Here we make a response pdu from a request pdu.
-     * We return null if there is no pdu to reply.
-     */
-    private SnmpPduPacket makeResponsePdu(SnmpPduPacket reqPdu,
-                                          Object userData) {
-
-        SnmpAdaptorServer snmpServer = (SnmpAdaptorServer)adaptorServer ;
-        SnmpPduPacket respPdu = null ;
-
-        snmpServer.updateRequestCounters(reqPdu.type) ;
-        if (reqPdu.varBindList != null)
-            snmpServer.updateVarCounters(reqPdu.type,
-                                         reqPdu.varBindList.length) ;
-
-        if (checkPduType(reqPdu)) {
-            respPdu = checkAcl(reqPdu) ;
-            if (respPdu == null) { // reqPdu is accepted by ACLs
-                if (mibs.size() < 1) {
-                    if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
-                        SNMP_ADAPTOR_LOGGER.logp(Level.FINER, dbgTag,
-                           "makeResponsePdu", "Request " + reqPdu.requestId +
-                           " received but no MIB registered.");
-                    }
-                    return makeNoMibErrorPdu((SnmpPduRequest)reqPdu, userData);
-                }
-                switch(reqPdu.type) {
-                case SnmpPduPacket.pduGetRequestPdu:
-                case SnmpPduPacket.pduGetNextRequestPdu:
-                case SnmpPduPacket.pduSetRequestPdu:
-                    respPdu = makeGetSetResponsePdu((SnmpPduRequest)reqPdu,
-                                                    userData) ;
-                    break ;
-
-                case SnmpPduPacket.pduGetBulkRequestPdu:
-                    respPdu = makeGetBulkResponsePdu((SnmpPduBulk)reqPdu,
-                                                     userData) ;
-                    break ;
-                }
-            }
-            else { // reqPdu is rejected by ACLs
-                // respPdu contains the error response to be sent.
-                // We send this response only if authResEnabled is true.
-                if (!snmpServer.getAuthRespEnabled()) { // No response should be sent
-                    respPdu = null ;
-                }
-                if (snmpServer.getAuthTrapEnabled()) { // A trap must be sent
-                    try {
-                        snmpServer.snmpV1Trap(SnmpPduTrap.
-                                              trapAuthenticationFailure, 0,
-                                              new SnmpVarBindList()) ;
-                    }
-                    catch(Exception x) {
-                        if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                            SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, dbgTag,
-                               "makeResponsePdu", "Failure when sending authentication trap", x);
-                        }
-                    }
-                }
-            }
-        }
-        return respPdu ;
-    }
-
-    //
-    // Generates a response packet, filling the values in the
-    // varbindlist with one of endOfMibView, noSuchObject, noSuchInstance
-    // according to the value of <code>status</code>
-    //
-    // @param statusTag should be one of:
-    //        <li>SnmpDataTypeEnums.errEndOfMibViewTag</li>
-    //        <li>SnmpDataTypeEnums.errNoSuchObjectTag</li>
-    //        <li>SnmpDataTypeEnums.errNoSuchInstanceTag</li>
-    //
-    SnmpPduPacket makeErrorVarbindPdu(SnmpPduPacket req, int statusTag) {
-
-        final SnmpVarBind[] vblist = req.varBindList;
-        final int length = vblist.length;
-
-        switch (statusTag) {
-        case SnmpDataTypeEnums.errEndOfMibViewTag:
-            for (int i=0 ; i<length ; i++)
-                vblist[i].value = SnmpVarBind.endOfMibView;
-            break;
-        case SnmpDataTypeEnums.errNoSuchObjectTag:
-            for (int i=0 ; i<length ; i++)
-                vblist[i].value = SnmpVarBind.noSuchObject;
-            break;
-        case SnmpDataTypeEnums.errNoSuchInstanceTag:
-            for (int i=0 ; i<length ; i++)
-                vblist[i].value = SnmpVarBind.noSuchInstance;
-            break;
-        default:
-            return newErrorResponsePdu(req,snmpRspGenErr,1);
-        }
-        return newValidResponsePdu(req,vblist);
-    }
-
-    // Generates an appropriate response when no mib is registered in
-    // the adaptor.
-    //
-    // <li>If the version is V1:</li>
-    // <ul><li>Generates a NoSuchName error V1 response PDU</li></ul>
-    // <li>If the version is V2:</li>
-    // <ul><li>If the request is a GET, fills the varbind list with
-    //         NoSuchObject's</li>
-    //     <li>If the request is a GET-NEXT/GET-BULK, fills the varbind
-    //         list with EndOfMibView's</li>
-    //     <li>If the request is a SET, generates a NoAccess error V2
-    //          response PDU</li>
-    // </ul>
-    //
-    //
-    SnmpPduPacket makeNoMibErrorPdu(SnmpPduRequest req, Object userData) {
-        // There is no agent registered
-        //
-        if (req.version == SnmpDefinitions.snmpVersionOne) {
-            // Version 1: => NoSuchName
-            return
-                newErrorResponsePdu(req,snmpRspNoSuchName,1);
-        } else if (req.version == SnmpDefinitions.snmpVersionTwo) {
-            // Version 2: => depends on PDU type
-            switch (req.type) {
-            case pduSetRequestPdu :
-            case pduWalkRequest :
-                // SET request => NoAccess
-                return
-                    newErrorResponsePdu(req,snmpRspNoAccess,1);
-            case pduGetRequestPdu :
-                // GET request => NoSuchObject
-                return
-                    makeErrorVarbindPdu(req,SnmpDataTypeEnums.
-                                        errNoSuchObjectTag);
-            case pduGetNextRequestPdu :
-            case pduGetBulkRequestPdu :
-                // GET-NEXT or GET-BULK => EndOfMibView
-                return
-                    makeErrorVarbindPdu(req,SnmpDataTypeEnums.
-                                        errEndOfMibViewTag);
-            default:
-            }
-        }
-        // Something wrong here: => snmpRspGenErr
-        return newErrorResponsePdu(req,snmpRspGenErr,1);
-    }
-
-    /**
-     * Here we make the response pdu from a get/set request pdu.
-     * At this level, the result is never null.
-     */
-    private SnmpPduPacket makeGetSetResponsePdu(SnmpPduRequest req,
-                                                Object userData) {
-
-        // Create the trhead group specific for handling sub-requests
-        // associated to the current request. Use the invoke id
-        //
-        // Nice idea to use a thread group on a request basis.
-        // However the impact on performance is terrible !
-        // theGroup= new ThreadGroup(thread.getThreadGroup(),
-        //                "request " + String.valueOf(req.requestId));
-
-        // Let's build the varBindList for the response pdu
-        //
-
-        if (req.varBindList == null) {
-            // Good ! Let's make a full response pdu.
-            //
-            return newValidResponsePdu(req, null) ;
-        }
-
-        // First we need to split the request into subrequests
-        //
-        splitRequest(req);
-        int nbSubRequest= subs.size();
-        if (nbSubRequest == 1)
-            return turboProcessingGetSet(req,userData);
-
-
-        // Execute all the subrequests resulting from the split of the
-        // varbind list.
-        //
-        SnmpPduPacket result= executeSubRequest(req,userData);
-        if (result != null)
-            // It means that an error occured. The error is already
-            // formatted by the executeSubRequest
-            // method.
-            return result;
-
-        // So far so good. So we need to concatenate all the answers.
-        //
-        if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
-            SNMP_ADAPTOR_LOGGER.logp(Level.FINER, dbgTag,
-               "makeGetSetResponsePdu",
-               "Build the unified response for request " + req.requestId);
-        }
-        return mergeResponses(req);
-    }
-
-    /**
-     * The method runs all the sub-requests associated to the current
-     * instance of SnmpRequestHandler.
-     */
-    private SnmpPduPacket executeSubRequest(SnmpPduPacket req,
-                                            Object userData) {
-
-        int errorStatus = SnmpDefinitions.snmpRspNoError ;
-        int nbSubRequest= subs.size();
-
-        int i=0;
-        // If it's a set request, we must first check any varBind
-        //
-        if (req.type == pduSetRequestPdu) {
-
-            i=0;
-            for(Enumeration e= subs.elements(); e.hasMoreElements() ; i++) {
-                // Indicate to the sub request that a check must be invoked ...
-                // OK we should have defined out own tag for that !
-                //
-                SnmpSubRequestHandler sub= (SnmpSubRequestHandler)
-                    e.nextElement();
-                sub.setUserData(userData);
-                sub.type= pduWalkRequest;
-
-                sub.run();
-
-                sub.type= pduSetRequestPdu;
-
-                if (sub.getErrorStatus() != SnmpDefinitions.snmpRspNoError) {
-                    // No point to go any further.
-                    //
-                    if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                        SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, dbgTag,
-                           "executeSubRequest", "an error occurs");
-                    }
-
-                    return newErrorResponsePdu(req, errorStatus,
-                                               sub.getErrorIndex() + 1) ;
-                }
-            }
-        }// end processing check operation for a set PDU.
-
-        // Let's start the sub-requests.
-        //
-        i=0;
-        for(Enumeration e= subs.elements(); e.hasMoreElements() ;i++) {
-            SnmpSubRequestHandler sub= (SnmpSubRequestHandler) e.nextElement();
-        /* NPCTE fix for bugId 4492741, esc 0, 16-August 2001 */
-            sub.setUserData(userData);
-        /* end of NPCTE fix for bugId 4492741 */
-
-            sub.run();
-
-            if (sub.getErrorStatus() != SnmpDefinitions.snmpRspNoError) {
-                // No point to go any further.
-                //
-                if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                    SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, dbgTag,
-                       "executeSubRequest", "an error occurs");
-                }
-
-                return newErrorResponsePdu(req, errorStatus,
-                                           sub.getErrorIndex() + 1) ;
-            }
-        }
-
-        // everything is ok
-        //
-        return null;
-    }
-
-    /**
-     * Optimize when there is only one sub request
-     */
-    private SnmpPduPacket turboProcessingGetSet(SnmpPduRequest req,
-                                                Object userData) {
-
-        int errorStatus = SnmpDefinitions.snmpRspNoError ;
-        SnmpSubRequestHandler sub = subs.elements().nextElement();
-        sub.setUserData(userData);
-
-        // Indicate to the sub request that a check must be invoked ...
-        // OK we should have defined out own tag for that !
-        //
-        if (req.type == SnmpDefinitions.pduSetRequestPdu) {
-            sub.type= pduWalkRequest;
-            sub.run();
-            sub.type= pduSetRequestPdu;
-
-            // Check the error status.
-            //
-            errorStatus= sub.getErrorStatus();
-            if (errorStatus != SnmpDefinitions.snmpRspNoError) {
-                // No point to go any further.
-                //
-                return newErrorResponsePdu(req, errorStatus,
-                                           sub.getErrorIndex() + 1) ;
-            }
-        }
-
-        // process the operation
-        //
-
-        sub.run();
-        errorStatus= sub.getErrorStatus();
-        if (errorStatus != SnmpDefinitions.snmpRspNoError) {
-            // No point to go any further.
-            //
-            if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, dbgTag,
-                   "turboProcessingGetSet", "an error occurs");
-            }
-            int realIndex= sub.getErrorIndex() + 1;
-            return newErrorResponsePdu(req, errorStatus, realIndex) ;
-        }
-
-        // So far so good. So we need to concatenate all the answers.
-        //
-
-        if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
-            SNMP_ADAPTOR_LOGGER.logp(Level.FINER, dbgTag,
-               "turboProcessingGetSet",  "build the unified response for request "
-                + req.requestId);
-        }
-        return mergeResponses(req);
-    }
-
-    /**
-     * Here we make the response pdu for a bulk request.
-     * At this level, the result is never null.
-     */
-    private SnmpPduPacket makeGetBulkResponsePdu(SnmpPduBulk req,
-                                                 Object userData) {
-
-        SnmpVarBind[] respVarBindList = null ;
-
-        // RFC 1905, Section 4.2.3, p14
-        int L = req.varBindList.length ;
-        int N = Math.max(Math.min(req.nonRepeaters, L), 0) ;
-        int M = Math.max(req.maxRepetitions, 0) ;
-        int R = L - N ;
-
-        if (req.varBindList == null) {
-            // Good ! Let's make a full response pdu.
-            //
-            return newValidResponsePdu(req, null) ;
-        }
-
-        // Split the request into subrequests.
-        //
-        splitBulkRequest(req, N, M, R);
-        SnmpPduPacket result= executeSubRequest(req,userData);
-        if (result != null)
-            return result;
-
-        respVarBindList= mergeBulkResponses(N + (M * R));
-
-        // Now we remove useless trailing endOfMibView.
-        //
-        int m2 ; // respVarBindList[m2] item and next are going to be removed
-        int t = respVarBindList.length ;
-        while ((t > N) && (respVarBindList[t-1].
-                           value.equals(SnmpVarBind.endOfMibView))) {
-            t-- ;
-        }
-        if (t == N)
-            m2 = N + R ;
-        else
-            m2 = N + ((t -1 -N) / R + 2) * R ; // Trivial, of course...
-        if (m2 < respVarBindList.length) {
-            SnmpVarBind[] truncatedList = new SnmpVarBind[m2] ;
-            for (int i = 0 ; i < m2 ; i++) {
-                truncatedList[i] = respVarBindList[i] ;
-            }
-            respVarBindList = truncatedList ;
-        }
-
-        // Good ! Let's make a full response pdu.
-        //
-        return newValidResponsePdu(req, respVarBindList) ;
-    }
-
-    /**
-     * Check the type of the pdu: only the get/set/bulk request
-     * are accepted.
-     */
-    private boolean checkPduType(SnmpPduPacket pdu) {
-
-        boolean result = true ;
-
-        switch(pdu.type) {
-
-        case SnmpDefinitions.pduGetRequestPdu:
-        case SnmpDefinitions.pduGetNextRequestPdu:
-        case SnmpDefinitions.pduSetRequestPdu:
-        case SnmpDefinitions.pduGetBulkRequestPdu:
-            result = true ;
-            break;
-
-        default:
-            if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, dbgTag,
-                   "checkPduType", "cannot respond to this kind of PDU");
-            }
-            result = false ;
-            break;
-        }
-
-        return result ;
-    }
-
-    /**
-     * Check if the specified pdu is conform to the ACL.
-     * This method returns null if the pdu is ok. If not, it returns
-     * the response pdu to be replied.
-     */
-    private SnmpPduPacket checkAcl(SnmpPduPacket pdu) {
-        SnmpPduPacket response = null ;
-        String community = new String(pdu.community) ;
-
-        // We check the pdu type and create an error response if
-        // the check failed.
-        //
-        if (ipacl != null) {
-            if (pdu.type == SnmpDefinitions.pduSetRequestPdu) {
-                if (!((InetAddressAcl)ipacl).
-                    checkWritePermission(pdu.address, community)) {
-                    if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
-                        SNMP_ADAPTOR_LOGGER.logp(Level.FINER, dbgTag,
-                           "checkAcl", "sender is " + pdu.address +
-                              " with " + community +". Sender has no write permission");
-                    }
-                    int err = SnmpSubRequestHandler.
-                        mapErrorStatus(SnmpDefinitions.
-                                       snmpRspAuthorizationError,
-                                       pdu.version, pdu.type);
-                    response = newErrorResponsePdu(pdu, err, 0) ;
-                }
-                else {
-                    if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
-                        SNMP_ADAPTOR_LOGGER.logp(Level.FINER, dbgTag,
-                           "checkAcl", "sender is " + pdu.address +
-                              " with " + community +". Sender has write permission");
-                    }
-                }
-            }
-            else {
-                if (!((InetAddressAcl)ipacl).checkReadPermission(pdu.address, community)) {
-                    if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
-                        SNMP_ADAPTOR_LOGGER.logp(Level.FINER, dbgTag,
-                           "checkAcl", "sender is " + pdu.address +
-                              " with " + community +". Sender has no read permission");
-                    }
-                    int err = SnmpSubRequestHandler.
-                        mapErrorStatus(SnmpDefinitions.
-                                       snmpRspAuthorizationError,
-                                       pdu.version, pdu.type);
-                    response = newErrorResponsePdu(pdu,
-                                                   err,
-                                                   0);
-                    SnmpAdaptorServer snmpServer =
-                        (SnmpAdaptorServer)adaptorServer;
-                    snmpServer.updateErrorCounters(SnmpDefinitions.
-                                                   snmpRspNoSuchName);
-                }
-                else {
-                    if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
-                        SNMP_ADAPTOR_LOGGER.logp(Level.FINER, dbgTag,
-                           "checkAcl", "sender is " + pdu.address +
-                              " with " + community +". Sender has read permission");
-                    }
-                }
-            }
-        }
-
-        // If the response is not null, this means the pdu is rejected.
-        // So let's update the statistics.
-        //
-        if (response != null) {
-            SnmpAdaptorServer snmpServer = (SnmpAdaptorServer)adaptorServer ;
-            snmpServer.incSnmpInBadCommunityUses(1) ;
-            if (((InetAddressAcl)ipacl).checkCommunity(community) == false)
-                snmpServer.incSnmpInBadCommunityNames(1) ;
-        }
-
-        return response ;
-    }
-
-    /**
-     * Make a response pdu with the specified error status and index.
-     * NOTE: the response pdu share its varBindList with the request pdu.
-     */
-    private SnmpPduRequest newValidResponsePdu(SnmpPduPacket reqPdu,
-                                               SnmpVarBind[] varBindList) {
-        SnmpPduRequest result = new SnmpPduRequest() ;
-
-        result.address = reqPdu.address ;
-        result.port = reqPdu.port ;
-        result.version = reqPdu.version ;
-        result.community = reqPdu.community ;
-        result.type = result.pduGetResponsePdu ;
-        result.requestId = reqPdu.requestId ;
-        result.errorStatus = SnmpDefinitions.snmpRspNoError ;
-        result.errorIndex = 0 ;
-        result.varBindList = varBindList ;
-
-        ((SnmpAdaptorServer)adaptorServer).
-            updateErrorCounters(result.errorStatus) ;
-
-        return result ;
-    }
-
-    /**
-     * Make a response pdu with the specified error status and index.
-     * NOTE: the response pdu share its varBindList with the request pdu.
-     */
-    private SnmpPduRequest newErrorResponsePdu(SnmpPduPacket req,int s,int i) {
-        SnmpPduRequest result = newValidResponsePdu(req, null) ;
-        result.errorStatus = s ;
-        result.errorIndex = i ;
-        result.varBindList = req.varBindList ;
-
-        ((SnmpAdaptorServer)adaptorServer).
-            updateErrorCounters(result.errorStatus) ;
-
-        return result ;
-    }
-
-    private SnmpMessage newTooBigMessage(SnmpMessage reqMsg)
-        throws SnmpTooBigException {
-        SnmpMessage result = null ;
-        SnmpPduPacket reqPdu = null ;
-
-        try {
-            reqPdu = (SnmpPduPacket)pduFactory.decodeSnmpPdu(reqMsg) ;
-            if (reqPdu != null) {
-                SnmpPduPacket respPdu = newTooBigPdu(reqPdu) ;
-                result = (SnmpMessage)pduFactory.
-                    encodeSnmpPdu(respPdu, packet.getData().length) ;
-            }
-        }
-        catch(SnmpStatusException x) {
-            // This should not occur because decodeIncomingRequest has normally
-            // been successfully called before.
-            if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, dbgTag,
-                   "newTooBigMessage", "Internal error", x);
-            }
-            throw new InternalError() ;
-        }
-
-        return result ;
-    }
-
-    private SnmpPduPacket newTooBigPdu(SnmpPduPacket req) {
-        SnmpPduRequest result =
-            newErrorResponsePdu(req, SnmpDefinitions.snmpRspTooBig, 0) ;
-        result.varBindList = null ;
-        return result ;
-    }
-
-    private SnmpPduPacket reduceResponsePdu(SnmpPduPacket req,
-                                            SnmpPduPacket resp,
-                                            int acceptedVbCount)
-        throws SnmpTooBigException {
-
-        // Reduction can be attempted only on bulk response
-        //
-        if (req.type != req.pduGetBulkRequestPdu) {
-            if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, dbgTag,
-                   "reduceResponsePdu", "cannot remove anything");
-            }
-            throw new SnmpTooBigException(acceptedVbCount) ;
-        }
-
-        // We're going to reduce the varbind list.
-        // First determine which items should be removed.
-        // Next duplicate and replace the existing list by the reduced one.
-        //
-        // acceptedVbCount is the number of varbind which have been
-        // successfully encoded before reaching bufferSize:
-        //   * when it is >= 2, we split the varbindlist at this
-        //     position (-1 to be safe),
-        //   * when it is 1, we only put one (big?) item in the varbindlist
-        //   * when it is 0 (in fact, acceptedVbCount is not available),
-        //     we split the varbindlist by 2.
-        //
-        int vbCount = resp.varBindList.length ;
-        if (acceptedVbCount >= 3)
-            vbCount = Math.min(acceptedVbCount - 1, resp.varBindList.length) ;
-        else if (acceptedVbCount == 1)
-            vbCount = 1 ;
-        else // acceptedCount == 0 ie it is unknown
-            vbCount = resp.varBindList.length / 2 ;
-
-        if (vbCount < 1) {
-            if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, dbgTag,
-                   "reduceResponsePdu", "cannot remove anything");
-            }
-            throw new SnmpTooBigException(acceptedVbCount) ;
-        }
-        else {
-            SnmpVarBind[] newVbList = new SnmpVarBind[vbCount] ;
-            for (int i = 0 ; i < vbCount ; i++) {
-                newVbList[i] = resp.varBindList[i] ;
-            }
-            if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, dbgTag,
-                   "reduceResponsePdu", (resp.varBindList.length - newVbList.length) +
-                    " items have been removed");
-            }
-            resp.varBindList = newVbList ;
-        }
-
-        return resp ;
-    }
-
-    /**
-     * The method takes the incoming requests and split it into subrequests.
-     */
-    private void splitRequest(SnmpPduRequest req) {
-
-        int nbAgents= mibs.size();
-        SnmpMibAgent agent= (SnmpMibAgent) mibs.firstElement();
-        if (nbAgents == 1) {
-            // Take all the oids contained in the request and
-            //
-            subs.put(agent, new SnmpSubRequestHandler(agent, req, true));
-            return;
-        }
-
-        // For the get next operation we are going to send the varbind list
-        // to all agents
-        //
-        if (req.type == pduGetNextRequestPdu) {
-            for(Enumeration e= mibs.elements(); e.hasMoreElements(); ) {
-                SnmpMibAgent ag= (SnmpMibAgent) e.nextElement();
-                subs.put(ag, new SnmpSubNextRequestHandler(adaptor, ag, req));
-            }
-            return;
-        }
-
-        int nbReqs= req.varBindList.length;
-        SnmpVarBind[] vars= req.varBindList;
-        SnmpSubRequestHandler sub;
-        for(int i=0; i < nbReqs; i++) {
-            agent= root.getAgentMib(vars[i].oid);
-            sub= subs.get(agent);
-            if (sub == null) {
-                // We need to create the sub request handler and update
-                // the hashtable
-                //
-                sub= new SnmpSubRequestHandler(agent, req);
-                subs.put(agent, sub);
-            }
-
-            // Update the translation table within the subrequest
-            //
-            sub.updateRequest(vars[i], i);
-        }
-    }
-
-    /**
-     * The method takes the incoming get bulk requests and split it into
-     * subrequests.
-     */
-    private void splitBulkRequest(SnmpPduBulk req,
-                                  int nonRepeaters,
-                                  int maxRepetitions,
-                                  int R) {
-        // Send the getBulk to all agents
-        //
-        for(Enumeration e= mibs.elements(); e.hasMoreElements(); ) {
-            SnmpMibAgent agent = (SnmpMibAgent) e.nextElement();
-
-            if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
-                SNMP_ADAPTOR_LOGGER.logp(Level.FINER, dbgTag,
-                   "splitBulkRequest", "Create a sub with : " + agent + " " + nonRepeaters
-                   + " " + maxRepetitions + " " + R);
-            }
-
-            subs.put(agent,
-                     new SnmpSubBulkRequestHandler(adaptor,
-                                                   agent,
-                                                   req,
-                                                   nonRepeaters,
-                                                   maxRepetitions,
-                                                   R));
-        }
-        return;
-    }
-
-    private SnmpPduPacket mergeResponses(SnmpPduRequest req) {
-
-        if (req.type == pduGetNextRequestPdu) {
-            return mergeNextResponses(req);
-        }
-
-        SnmpVarBind[] result= req.varBindList;
-
-        // Go through the list of subrequests and concatenate.
-        // Hopefully, by now all the sub-requests should be finished
-        //
-        for(Enumeration e= subs.elements(); e.hasMoreElements();) {
-            SnmpSubRequestHandler sub= (SnmpSubRequestHandler) e.nextElement();
-            sub.updateResult(result);
-        }
-        return newValidResponsePdu(req,result);
-    }
-
-    private SnmpPduPacket mergeNextResponses(SnmpPduRequest req) {
-        int max= req.varBindList.length;
-        SnmpVarBind[] result= new SnmpVarBind[max];
-
-        // Go through the list of subrequests and concatenate.
-        // Hopefully, by now all the sub-requests should be finished
-        //
-        for(Enumeration e= subs.elements(); e.hasMoreElements();) {
-            SnmpSubRequestHandler sub= (SnmpSubRequestHandler) e.nextElement();
-            sub.updateResult(result);
-        }
-
-        if (req.version == snmpVersionTwo) {
-            return newValidResponsePdu(req,result);
-        }
-
-        // In v1 make sure there is no endOfMibView ...
-        //
-        for(int i=0; i < max; i++) {
-            SnmpValue val= result[i].value;
-            if (val == SnmpVarBind.endOfMibView)
-                return newErrorResponsePdu(req,
-                                   SnmpDefinitions.snmpRspNoSuchName, i+1);
-        }
-
-        // So far so good ...
-        //
-        return newValidResponsePdu(req,result);
-    }
-
-    private SnmpVarBind[] mergeBulkResponses(int size) {
-        // Let's allocate the array for storing the result
-        //
-        SnmpVarBind[] result= new SnmpVarBind[size];
-        for(int i= size-1; i >=0; --i) {
-            result[i]= new SnmpVarBind();
-            result[i].value= SnmpVarBind.endOfMibView;
-        }
-
-        // Go through the list of subrequests and concatenate.
-        // Hopefully, by now all the sub-requests should be finished
-        //
-        for(Enumeration e= subs.elements(); e.hasMoreElements();) {
-            SnmpSubRequestHandler sub= (SnmpSubRequestHandler) e.nextElement();
-            sub.updateResult(result);
-        }
-
-        return result;
-    }
-
-    protected String makeDebugTag() {
-        return "SnmpRequestHandler[" + adaptorServer.getProtocol() + ":" +
-            adaptorServer.getPort() + "]";
-    }
-
-    Thread createThread(Runnable r) {
-        return null;
-    }
-
-    static final private String InterruptSysCallMsg =
-        "Interrupted system call";
-
-    static final private SnmpStatusException noSuchNameException =
-        new SnmpStatusException(SnmpDefinitions.snmpRspNoSuchName) ;
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/daemon/SnmpSubBulkRequestHandler.java b/ojluni/src/main/java/com/sun/jmx/snmp/daemon/SnmpSubBulkRequestHandler.java
deleted file mode 100755
index f662e37..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/daemon/SnmpSubBulkRequestHandler.java
+++ /dev/null
@@ -1,345 +0,0 @@
-/*
- * Copyright (c) 1998, 2006, 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.jmx.snmp.daemon;
-
-
-
-// java import
-//
-import java.util.Enumeration;
-import java.util.Vector;
-import java.util.logging.Level;
-// jmx imports
-//
-import com.sun.jmx.snmp.SnmpPdu;
-import com.sun.jmx.snmp.SnmpVarBind;
-import com.sun.jmx.snmp.SnmpOid;
-import com.sun.jmx.snmp.SnmpValue;
-import com.sun.jmx.snmp.SnmpDefinitions;
-import com.sun.jmx.snmp.SnmpStatusException;
-import com.sun.jmx.snmp.SnmpEngine;
-// SNMP Runtime import
-//
-import static com.sun.jmx.defaults.JmxProperties.SNMP_ADAPTOR_LOGGER;
-import com.sun.jmx.snmp.agent.SnmpMibAgent;
-import com.sun.jmx.snmp.agent.SnmpMibRequest;
-import com.sun.jmx.snmp.ThreadContext;
-import com.sun.jmx.snmp.daemon.SnmpAdaptorServer;
-import com.sun.jmx.snmp.internal.SnmpIncomingRequest;
-import com.sun.jmx.snmp.ThreadContext;
-
-class SnmpSubBulkRequestHandler extends SnmpSubRequestHandler {
-    private SnmpAdaptorServer server = null;
-
-    /**
-     * The constuctor initialize the subrequest with the whole varbind list contained
-     * in the original request.
-     */
-    protected SnmpSubBulkRequestHandler(SnmpEngine engine,
-                                        SnmpAdaptorServer server,
-                                        SnmpIncomingRequest incRequest,
-                                        SnmpMibAgent agent,
-                                        SnmpPdu req,
-                                        int nonRepeat,
-                                        int maxRepeat,
-                                        int R) {
-        super(engine, incRequest, agent, req);
-        init(server, req, nonRepeat, maxRepeat, R);
-    }
-
-    /**
-     * The constuctor initialize the subrequest with the whole varbind list contained
-     * in the original request.
-     */
-    protected SnmpSubBulkRequestHandler(SnmpAdaptorServer server,
-                                        SnmpMibAgent agent,
-                                        SnmpPdu req,
-                                        int nonRepeat,
-                                        int maxRepeat,
-                                        int R) {
-        super(agent, req);
-        init(server, req, nonRepeat, maxRepeat, R);
-    }
-
-    public void run() {
-
-        size= varBind.size();
-
-        try {
-            // Invoke a getBulk operation
-            //
-            /* NPCTE fix for bugId 4492741, esc 0, 16-August-2001 */
-            final ThreadContext oldContext =
-                ThreadContext.push("SnmpUserData",data);
-            try {
-                if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
-                    SNMP_ADAPTOR_LOGGER.logp(Level.FINER, SnmpSubRequestHandler.class.getName(),
-                        "run", "[" + Thread.currentThread() +
-                        "]:getBulk operation on " + agent.getMibName());
-                }
-                agent.getBulk(createMibRequest(varBind,version,data),
-                              nonRepeat, maxRepeat);
-            } finally {
-                ThreadContext.restore(oldContext);
-            }
-            /* end of NPCTE fix for bugId 4492741 */
-
-        } catch(SnmpStatusException x) {
-            errorStatus = x.getStatus() ;
-            errorIndex=  x.getErrorIndex();
-            if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, SnmpSubRequestHandler.class.getName(),
-                    "run", "[" + Thread.currentThread() +
-                    "]:an Snmp error occured during the operation", x);
-            }
-        }
-        catch(Exception x) {
-            errorStatus = SnmpDefinitions.snmpRspGenErr ;
-            if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, SnmpSubRequestHandler.class.getName(),
-                    "run", "[" + Thread.currentThread() +
-                    "]:a generic error occured during the operation", x);
-            }
-        }
-        if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
-            SNMP_ADAPTOR_LOGGER.logp(Level.FINER, SnmpSubRequestHandler.class.getName(),
-                "run", "[" + Thread.currentThread() +
-                  "]:operation completed");
-        }
-    }
-
-    private void init(SnmpAdaptorServer server,
-                      SnmpPdu req,
-                      int nonRepeat,
-                      int maxRepeat,
-                      int R) {
-        this.server = server;
-        this.nonRepeat= nonRepeat;
-        this.maxRepeat= maxRepeat;
-        this.globalR= R;
-
-        final int max= translation.length;
-        final SnmpVarBind[] list= req.varBindList;
-        final NonSyncVector<SnmpVarBind> nonSyncVarBind =
-                ((NonSyncVector<SnmpVarBind>)varBind);
-        for(int i=0; i < max; i++) {
-            translation[i]= i;
-            // we need to allocate a new SnmpVarBind. Otherwise the first
-            // sub request will modify the list...
-            //
-            final SnmpVarBind newVarBind =
-                new SnmpVarBind(list[i].oid, list[i].value);
-            nonSyncVarBind.addNonSyncElement(newVarBind);
-        }
-    }
-
-    /**
-     * The method updates find out which element to use at update time. Handle oid overlapping as well
-     */
-    private SnmpVarBind findVarBind(SnmpVarBind element,
-                                    SnmpVarBind result) {
-
-        if (element == null) return null;
-
-        if (result.oid == null) {
-             return element;
-        }
-
-        if (element.value == SnmpVarBind.endOfMibView) return result;
-
-        if (result.value == SnmpVarBind.endOfMibView) return element;
-
-        final SnmpValue val = result.value;
-
-        int comp = element.oid.compareTo(result.oid);
-        if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
-            SNMP_ADAPTOR_LOGGER.logp(Level.FINER, SnmpSubRequestHandler.class.getName(),
-                "findVarBind","Comparing OID element : " + element.oid +
-                  " with result : " + result.oid);
-            SNMP_ADAPTOR_LOGGER.logp(Level.FINER, SnmpSubRequestHandler.class.getName(),
-                "findVarBind","Values element : " + element.value +
-                  " result : " + result.value);
-        }
-        if (comp < 0) {
-            // Take the smallest (lexicographically)
-            //
-            return element;
-        }
-        else {
-            if(comp == 0) {
-                // Must compare agent used for reply
-                // Take the deeper within the reply
-                if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
-                    SNMP_ADAPTOR_LOGGER.logp(Level.FINER, SnmpSubRequestHandler.class.getName(),
-                        "findVarBind"," oid overlapping. Oid : " +
-                          element.oid + "value :" + element.value);
-                    SNMP_ADAPTOR_LOGGER.logp(Level.FINER, SnmpSubRequestHandler.class.getName(),
-                         "findVarBind","Already present varBind : " +
-                          result);
-                }
-                SnmpOid oid = result.oid;
-                SnmpMibAgent deeperAgent = server.getAgentMib(oid);
-
-                if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
-                    SNMP_ADAPTOR_LOGGER.logp(Level.FINER, SnmpSubRequestHandler.class.getName(),
-                        "findVarBind","Deeper agent : " + deeperAgent);
-                }
-                if(deeperAgent == agent) {
-                    if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
-                        SNMP_ADAPTOR_LOGGER.logp(Level.FINER, SnmpSubRequestHandler.class.getName(),
-                            "findVarBind","The current agent is the deeper one. Update the value with the current one");
-                    }
-                    return element;
-                } else {
-                    if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
-                        SNMP_ADAPTOR_LOGGER.logp(Level.FINER, SnmpSubRequestHandler.class.getName(),
-                            "findVarBind","The current agent is not the deeper one. return the previous one.");
-                    }
-                    return result;
-                }
-
-                /*
-                   Vector v = new Vector();
-                   SnmpMibRequest getReq = createMibRequest(v,
-                   version,
-                   null);
-                   SnmpVarBind realValue = new SnmpVarBind(oid);
-                   getReq.addVarBind(realValue);
-                   try {
-                   deeperAgent.get(getReq);
-                   } catch(SnmpStatusException e) {
-                   e.printStackTrace();
-                   }
-
-                   if(isDebugOn())
-                   trace("findVarBind", "Biggest priority value is : " +
-                   realValue.value);
-
-                   return realValue;
-                */
-
-            }
-            else {
-                if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
-                    SNMP_ADAPTOR_LOGGER.logp(Level.FINER, SnmpSubRequestHandler.class.getName(),
-                        "findVarBind","The right varBind is the already present one");
-                }
-                return result;
-            }
-        }
-    }
-    /**
-     * The method updates a given var bind list with the result of a
-     * previsouly invoked operation.
-     * Prior to calling the method, one must make sure that the operation was
-     * successful. As such the method getErrorIndex or getErrorStatus should be
-     * called.
-     */
-    protected void updateResult(SnmpVarBind[] result) {
-        // we can assume that the run method is over ...
-        //
-
-        final Enumeration e= varBind.elements();
-        final int max= result.length;
-
-        // First go through all the values once ...
-        for(int i=0; i < size; i++) {
-            // May be we should control the position ...
-            //
-            if (e.hasMoreElements() == false)
-                return;
-
-            // bugId 4641694: must check position in order to avoid
-            //       ArrayIndexOutOfBoundException
-            final int pos=translation[i];
-            if (pos >= max) {
-                if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                    SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, SnmpSubRequestHandler.class.getName(),
-                        "updateResult","Position '"+pos+"' is out of bound...");
-                }
-                continue;
-            }
-
-            final SnmpVarBind element= (SnmpVarBind) e.nextElement();
-
-            if (element == null) continue;
-            if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
-                SNMP_ADAPTOR_LOGGER.logp(Level.FINER, SnmpSubRequestHandler.class.getName(),
-                    "updateResult","Non repeaters Current element : " +
-                      element + " from agent : " + agent);
-            }
-            final SnmpVarBind res = findVarBind(element,result[pos]);
-
-            if(res == null) continue;
-
-            result[pos] = res;
-        }
-
-        // Now update the values which have been repeated
-        // more than once.
-        int localR= size - nonRepeat;
-        for (int i = 2 ; i <= maxRepeat ; i++) {
-            for (int r = 0 ; r < localR ; r++) {
-                final int pos = (i-1)* globalR + translation[nonRepeat + r] ;
-                if (pos >= max)
-                    return;
-                if (e.hasMoreElements() ==false)
-                    return;
-                final SnmpVarBind element= (SnmpVarBind) e.nextElement();
-
-                if (element == null) continue;
-                if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
-                    SNMP_ADAPTOR_LOGGER.logp(Level.FINER, SnmpSubRequestHandler.class.getName(),
-                        "updateResult","Repeaters Current element : " +
-                          element + " from agent : " + agent);
-                }
-                final SnmpVarBind res = findVarBind(element, result[pos]);
-
-                if(res == null) continue;
-
-                result[pos] = res;
-            }
-        }
-    }
-
-    // PROTECTED VARIABLES
-    //------------------
-
-    /**
-     * Specific to the sub request
-     */
-    protected int nonRepeat=0;
-
-    protected int maxRepeat=0;
-
-    /**
-     * R as defined in RCF 1902 for the global request the sub-request is associated to.
-     */
-    protected int globalR=0;
-
-    protected int size=0;
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/daemon/SnmpSubNextRequestHandler.java b/ojluni/src/main/java/com/sun/jmx/snmp/daemon/SnmpSubNextRequestHandler.java
deleted file mode 100755
index bb4dd0b..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/daemon/SnmpSubNextRequestHandler.java
+++ /dev/null
@@ -1,272 +0,0 @@
-/*
- * Copyright (c) 1998, 2006, 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.jmx.snmp.daemon;
-
-// java imports
-//
-import java.util.logging.Level;
-import java.util.Vector;
-
-// jmx imports
-//
-import com.sun.jmx.snmp.SnmpEngine;
-import com.sun.jmx.snmp.SnmpPdu;
-import com.sun.jmx.snmp.SnmpValue;
-import com.sun.jmx.snmp.SnmpVarBind;
-import com.sun.jmx.snmp.SnmpVarBindList;
-import com.sun.jmx.snmp.SnmpOid;
-import com.sun.jmx.snmp.SnmpDefinitions;
-import com.sun.jmx.snmp.SnmpStatusException;
-// SNMP Runtime import
-//
-import static com.sun.jmx.defaults.JmxProperties.SNMP_ADAPTOR_LOGGER;
-import com.sun.jmx.snmp.agent.SnmpMibAgent;
-import com.sun.jmx.snmp.agent.SnmpMibRequest;
-import com.sun.jmx.snmp.daemon.SnmpAdaptorServer;
-import com.sun.jmx.snmp.internal.SnmpIncomingRequest;
-
-/* NPCTE fix for bugId 4492741, esc 0 */
-import com.sun.jmx.snmp.ThreadContext;
-/* end of NPCTE fix for bugId 4492741 */
-
-class SnmpSubNextRequestHandler extends SnmpSubRequestHandler {
-    private SnmpAdaptorServer server = null;
-    /**
-     * The constuctor initialize the subrequest with the whole varbind
-     * list contained in the original request.
-     */
-    protected SnmpSubNextRequestHandler(SnmpAdaptorServer server,
-                                        SnmpMibAgent agent,
-                                        SnmpPdu req) {
-        super(agent,req);
-        init(req, server);
-    }
-
-    protected SnmpSubNextRequestHandler(SnmpEngine engine,
-                                        SnmpAdaptorServer server,
-                                        SnmpIncomingRequest incRequest,
-                                        SnmpMibAgent agent,
-                                        SnmpPdu req) {
-        super(engine, incRequest, agent, req);
-        init(req, server);
-        if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-            SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, SnmpSubNextRequestHandler.class.getName(),
-                "SnmpSubNextRequestHandler", "Constructor : " + this);
-        }
-    }
-
-    private void init(SnmpPdu req, SnmpAdaptorServer server) {
-        this.server = server;
-
-        // The translation table is easy in this case ...
-        //
-        final int max= translation.length;
-        final SnmpVarBind[] list= req.varBindList;
-        final NonSyncVector<SnmpVarBind> nonSyncVarBind =
-                ((NonSyncVector<SnmpVarBind>)varBind);
-        for(int i=0; i < max; i++) {
-            translation[i]= i;
-            // we need to allocate a new SnmpVarBind. Otherwise the first
-            // sub request will modify the list...
-            //
-            final SnmpVarBind newVarBind =
-                new SnmpVarBind(list[i].oid, list[i].value);
-            nonSyncVarBind.addNonSyncElement(newVarBind);
-        }
-    }
-
-    public void run() {
-
-        try {
-            /* NPCTE fix for bugId 4492741, esc 0, 16-August-2001 */
-            final ThreadContext oldContext =
-                ThreadContext.push("SnmpUserData",data);
-            try {
-                if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
-                    SNMP_ADAPTOR_LOGGER.logp(Level.FINER, SnmpSubRequestHandler.class.getName(),
-                        "run", "[" + Thread.currentThread() +
-                          "]:getNext operation on " + agent.getMibName());
-                }
-
-                // Always call with V2. So the merge of the responses will
-                // be easier.
-                //
-                agent.getNext(createMibRequest(varBind, snmpVersionTwo, data));
-            } finally {
-                ThreadContext.restore(oldContext);
-            }
-            /* end of NPCTE fix for bugId 4492741 */
-
-
-        } catch(SnmpStatusException x) {
-            errorStatus = x.getStatus() ;
-            errorIndex=  x.getErrorIndex();
-            if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, SnmpSubRequestHandler.class.getName(),
-                    "run", "[" + Thread.currentThread() +
-                      "]:an Snmp error occured during the operation", x);
-            }
-        }
-        catch(Exception x) {
-            errorStatus = SnmpDefinitions.snmpRspGenErr ;
-            if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, SnmpSubRequestHandler.class.getName(),
-                    "run", "[" + Thread.currentThread() +
-                      "]:a generic error occured during the operation", x);
-            }
-        }
-        if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
-            SNMP_ADAPTOR_LOGGER.logp(Level.FINER, SnmpSubRequestHandler.class.getName(),
-                "run", "[" + Thread.currentThread() +  "]:operation completed");
-        }
-    }
-
-    /**
-     * The method updates the varbind list of the subrequest.
-     */
-    protected  void updateRequest(SnmpVarBind var, int pos) {
-        if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-            SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, SnmpSubRequestHandler.class.getName(),
-                "updateRequest", "Copy :" + var);
-        }
-        int size= varBind.size();
-        translation[size]= pos;
-        final SnmpVarBind newVarBind =
-            new SnmpVarBind(var.oid, var.value);
-        if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-            SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, SnmpSubRequestHandler.class.getName(),
-                "updateRequest", "Copied :" + newVarBind);
-        }
-
-        varBind.addElement(newVarBind);
-    }
-    /**
-     * The method updates a given var bind list with the result of a
-     * previsouly invoked operation.
-     * Prior to calling the method, one must make sure that the operation was
-     * successful. As such the method getErrorIndex or getErrorStatus should be
-     * called.
-     */
-    protected void updateResult(SnmpVarBind[] result) {
-
-        final int max=varBind.size();
-        for(int i= 0; i< max ; i++) {
-            // May be we should control the position ...
-            //
-            final int index= translation[i];
-            final SnmpVarBind elmt=
-                (SnmpVarBind)((NonSyncVector)varBind).elementAtNonSync(i);
-
-            final SnmpVarBind vb= result[index];
-            if (vb == null) {
-                result[index]= elmt;
-                /* NPCTE fix for bugid 4381195 esc 0. <J.C.> < 17-Oct-2000> */
-                // if ((elmt != null) &&  (elmt.value == null) &&
-                //    (version == snmpVersionTwo))
-                //    elmt.value = SnmpVarBind.endOfMibView;
-                /* end of NPCTE fix for bugid 4381195 */
-                continue;
-            }
-
-            final SnmpValue val= vb.value;
-            if ((val == null)|| (val == SnmpVarBind.endOfMibView)){
-                /* NPCTE fix for bugid 4381195 esc 0. <J.C.> < 17-Oct-2000> */
-                if ((elmt != null) &&
-                    (elmt.value != SnmpVarBind.endOfMibView))
-                    result[index]= elmt;
-                // else if ((val == null) && (version == snmpVersionTwo))
-                //    vb.value = SnmpVarBind.endOfMibView;
-                continue;
-                /* end of NPCTE fix for bugid 4381195 */
-            }
-
-            /* NPCTE fix for bugid 4381195 esc 0. <J.C.> < 17-Oct-2000> */
-            if (elmt == null) continue;
-            /* end of NPCTE fix for bugid 4381195 */
-
-            if (elmt.value == SnmpVarBind.endOfMibView) continue;
-
-
-            // Now we need to take the smallest oid ...
-            //
-            int comp = elmt.oid.compareTo(vb.oid);
-            if (comp < 0) {
-              // Take the smallest (lexicographically)
-                //
-                result[index]= elmt;
-            }
-            else {
-                if(comp == 0) {
-                    // Must compare agent used for reply
-                    // Take the deeper within the reply
-                    if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
-                        SNMP_ADAPTOR_LOGGER.logp(Level.FINER, SnmpSubRequestHandler.class.getName(),
-                            "updateResult"," oid overlapping. Oid : " +
-                              elmt.oid + "value :" + elmt.value);
-                        SNMP_ADAPTOR_LOGGER.logp(Level.FINER, SnmpSubRequestHandler.class.getName(),
-                            "updateResult","Already present varBind : " +
-                              vb);
-                    }
-
-                    SnmpOid oid = vb.oid;
-                    SnmpMibAgent deeperAgent = server.getAgentMib(oid);
-
-                    if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
-                        SNMP_ADAPTOR_LOGGER.logp(Level.FINER, SnmpSubRequestHandler.class.getName(),
-                            "updateResult","Deeper agent : " + deeperAgent);
-                    }
-                    if(deeperAgent == agent) {
-                        if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
-                            SNMP_ADAPTOR_LOGGER.logp(Level.FINER, SnmpSubRequestHandler.class.getName(),
-                                "updateResult","The current agent is the deeper one. Update the value with the current one");
-                        }
-                        result[index].value = elmt.value;
-                    }
-
-                    /*
-                      Vector v = new Vector();
-                      SnmpMibRequest getReq = createMibRequest(v,
-                      version,
-                      null);
-                      SnmpVarBind realValue = new SnmpVarBind(oid);
-                      getReq.addVarBind(realValue);
-                      try {
-                      deeperAgent.get(getReq);
-                      } catch(SnmpStatusException e) {
-                      e.printStackTrace();
-                      }
-
-                      if(isDebugOn())
-                      trace("updateResult", "Biggest priority value is : " +
-                      realValue.value);
-
-                      result[index].value = realValue.value;
-                    */
-                }
-            }
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/daemon/SnmpSubRequestHandler.java b/ojluni/src/main/java/com/sun/jmx/snmp/daemon/SnmpSubRequestHandler.java
deleted file mode 100755
index 04f4ca6..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/daemon/SnmpSubRequestHandler.java
+++ /dev/null
@@ -1,630 +0,0 @@
-/*
- * Copyright (c) 1998, 2006, 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.jmx.snmp.daemon;
-
-
-
-// java import
-//
-import java.util.logging.Level;
-import java.util.Vector;
-
-// jmx imports
-//
-import static com.sun.jmx.defaults.JmxProperties.SNMP_ADAPTOR_LOGGER;
-import com.sun.jmx.snmp.SnmpPdu;
-import com.sun.jmx.snmp.SnmpVarBind;
-import com.sun.jmx.snmp.SnmpDefinitions;
-import com.sun.jmx.snmp.SnmpStatusException;
-import com.sun.jmx.snmp.SnmpEngine;
-
-// SNMP Runtime import
-//
-import com.sun.jmx.snmp.agent.SnmpMibAgent;
-import com.sun.jmx.snmp.agent.SnmpMibRequest;
-import com.sun.jmx.snmp.ThreadContext;
-import com.sun.jmx.snmp.internal.SnmpIncomingRequest;
-
-class SnmpSubRequestHandler implements SnmpDefinitions, Runnable {
-
-    protected SnmpIncomingRequest incRequest = null;
-    protected SnmpEngine engine = null;
-    /**
-     * V3 enabled Adaptor. Each Oid is added using updateRequest method.
-     */
-    protected SnmpSubRequestHandler(SnmpEngine engine,
-                                    SnmpIncomingRequest incRequest,
-                                    SnmpMibAgent agent,
-                                    SnmpPdu req) {
-        this(agent, req);
-        init(engine, incRequest);
-    }
-
-    /**
-     * V3 enabled Adaptor.
-     */
-    protected SnmpSubRequestHandler(SnmpEngine engine,
-                                    SnmpIncomingRequest incRequest,
-                                    SnmpMibAgent agent,
-                                    SnmpPdu req,
-                                    boolean nouse) {
-        this(agent, req, nouse);
-        init(engine, incRequest);
-    }
-    /**
-     * SNMP V1/V2 . To be called with updateRequest.
-     */
-    protected SnmpSubRequestHandler(SnmpMibAgent agent, SnmpPdu req) {
-        if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
-            SNMP_ADAPTOR_LOGGER.logp(Level.FINER, SnmpSubRequestHandler.class.getName(),
-                "constructor", "creating instance for request " + String.valueOf(req.requestId));
-        }
-
-        version= req.version;
-        type= req.type;
-        this.agent= agent;
-
-        // We get a ref on the pdu in order to pass it to SnmpMibRequest.
-        reqPdu = req;
-
-        //Pre-allocate room for storing varbindlist and translation table.
-        //
-        int length= req.varBindList.length;
-        translation= new int[length];
-        varBind= new NonSyncVector<SnmpVarBind>(length);
-    }
-
-    /**
-     * SNMP V1/V2 The constuctor initialize the subrequest with the whole varbind list contained
-     * in the original request.
-     */
-    @SuppressWarnings("unchecked")  // cast to NonSyncVector<SnmpVarBind>
-    protected SnmpSubRequestHandler(SnmpMibAgent agent,
-                                    SnmpPdu req,
-                                    boolean nouse) {
-        this(agent,req);
-
-        // The translation table is easy in this case ...
-        //
-        int max= translation.length;
-        SnmpVarBind[] list= req.varBindList;
-        for(int i=0; i < max; i++) {
-            translation[i]= i;
-            ((NonSyncVector<SnmpVarBind>)varBind).addNonSyncElement(list[i]);
-        }
-    }
-
-    SnmpMibRequest createMibRequest(Vector<SnmpVarBind> vblist,
-                                    int protocolVersion,
-                                    Object userData) {
-
-        // This is an optimization:
-        //    The SnmpMibRequest created in the check() phase is
-        //    reused in the set() phase.
-        //
-        if (type == pduSetRequestPdu && mibRequest != null)
-            return mibRequest;
-
-        //This is a request comming from an SnmpV3AdaptorServer.
-        //Full power.
-        SnmpMibRequest result = null;
-        if(incRequest != null) {
-            result = SnmpMibAgent.newMibRequest(engine,
-                                                reqPdu,
-                                                vblist,
-                                                protocolVersion,
-                                                userData,
-                                                incRequest.getPrincipal(),
-                                                incRequest.getSecurityLevel(),
-                                                incRequest.getSecurityModel(),
-                                                incRequest.getContextName(),
-                                                incRequest.getAccessContext());
-        } else {
-            result = SnmpMibAgent.newMibRequest(reqPdu,
-                                                vblist,
-                                                protocolVersion,
-                                                userData);
-        }
-        // If we're doing the check() phase, we store the SnmpMibRequest
-        // so that we can reuse it in the set() phase.
-        //
-        if (type == pduWalkRequest)
-            mibRequest = result;
-
-        return result;
-    }
-
-    void setUserData(Object userData) {
-        data = userData;
-    }
-
-    public void run() {
-
-        try {
-            final ThreadContext oldContext =
-                ThreadContext.push("SnmpUserData",data);
-            try {
-                switch(type) {
-                case pduGetRequestPdu:
-                    // Invoke a get operation
-                    //
-                    if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
-                        SNMP_ADAPTOR_LOGGER.logp(Level.FINER, SnmpSubRequestHandler.class.getName(),
-                            "run", "[" + Thread.currentThread() +
-                              "]:get operation on " + agent.getMibName());
-                    }
-
-                    agent.get(createMibRequest(varBind,version,data));
-                    break;
-
-                case pduGetNextRequestPdu:
-                    if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
-                        SNMP_ADAPTOR_LOGGER.logp(Level.FINER, SnmpSubRequestHandler.class.getName(),
-                            "run", "[" + Thread.currentThread() +
-                              "]:getNext operation on " + agent.getMibName());
-                    }
-                    //#ifdef DEBUG
-                    agent.getNext(createMibRequest(varBind,version,data));
-                    break;
-
-                case pduSetRequestPdu:
-                    if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
-                        SNMP_ADAPTOR_LOGGER.logp(Level.FINER, SnmpSubRequestHandler.class.getName(),
-                            "run", "[" + Thread.currentThread() +
-                            "]:set operation on " + agent.getMibName());
-                    }
-                    agent.set(createMibRequest(varBind,version,data));
-                    break;
-
-                case pduWalkRequest:
-                    if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
-                        SNMP_ADAPTOR_LOGGER.logp(Level.FINER, SnmpSubRequestHandler.class.getName(),
-                            "run", "[" + Thread.currentThread() +
-                            "]:check operation on " + agent.getMibName());
-                    }
-                    agent.check(createMibRequest(varBind,version,data));
-                    break;
-
-                default:
-                    if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                        SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, SnmpSubRequestHandler.class.getName(),
-                            "run", "[" + Thread.currentThread() +
-                              "]:unknown operation (" +  type + ") on " +
-                              agent.getMibName());
-                    }
-                    errorStatus= snmpRspGenErr;
-                    errorIndex= 1;
-                    break;
-
-                }// end of switch
-
-            } finally {
-                ThreadContext.restore(oldContext);
-            }
-        } catch(SnmpStatusException x) {
-            errorStatus = x.getStatus() ;
-            errorIndex=  x.getErrorIndex();
-            if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, SnmpSubRequestHandler.class.getName(),
-                    "run", "[" + Thread.currentThread() +
-                      "]:an Snmp error occured during the operation", x);
-            }
-        }
-        catch(Exception x) {
-            errorStatus = SnmpDefinitions.snmpRspGenErr ;
-            if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, SnmpSubRequestHandler.class.getName(),
-                    "run", "[" + Thread.currentThread() +
-                      "]:a generic error occured during the operation", x);
-            }
-        }
-        if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINER)) {
-            SNMP_ADAPTOR_LOGGER.logp(Level.FINER, SnmpSubRequestHandler.class.getName(),
-                "run", "[" + Thread.currentThread() + "]:operation completed");
-        }
-    }
-
-    // -------------------------------------------------------------
-    //
-    // This function does a best-effort to map global error status
-    // to SNMP v1 valid global error status.
-    //
-    // An SnmpStatusException can contain either:
-    // <li> v2 local error codes (that should be stored in the varbind)</li>
-    // <li> v2 global error codes </li>
-    // <li> v1 global error codes </li>
-    //
-    // v2 local error codes (noSuchInstance, noSuchObject) are
-    // transformed in a global v1 snmpRspNoSuchName error.
-    //
-    // v2 global error codes are transformed in the following way:
-    //
-    //    If the request was a GET/GETNEXT then either
-    //         snmpRspNoSuchName or snmpRspGenErr is returned.
-    //
-    //    Otherwise:
-    //      snmpRspNoAccess, snmpRspInconsistentName
-    //               => snmpRspNoSuchName
-    //      snmpRspAuthorizationError, snmpRspNotWritable, snmpRspNoCreation
-    //               => snmpRspReadOnly  (snmpRspNoSuchName for GET/GETNEXT)
-    //      snmpRspWrong*
-    //               => snmpRspBadValue  (snmpRspNoSuchName for GET/GETNEXT)
-    //      snmpRspResourceUnavailable, snmpRspRspCommitFailed,
-    //      snmpRspUndoFailed
-    //                  => snmpRspGenErr
-    //
-    // -------------------------------------------------------------
-    //
-    static final int mapErrorStatusToV1(int errorStatus, int reqPduType) {
-        // Map v2 codes onto v1 codes
-        //
-        if (errorStatus == SnmpDefinitions.snmpRspNoError)
-            return SnmpDefinitions.snmpRspNoError;
-
-        if (errorStatus == SnmpDefinitions.snmpRspGenErr)
-            return SnmpDefinitions.snmpRspGenErr;
-
-        if (errorStatus == SnmpDefinitions.snmpRspNoSuchName)
-            return SnmpDefinitions.snmpRspNoSuchName;
-
-        if ((errorStatus == SnmpStatusException.noSuchInstance) ||
-            (errorStatus == SnmpStatusException.noSuchObject)   ||
-            (errorStatus == SnmpDefinitions.snmpRspNoAccess)    ||
-            (errorStatus == SnmpDefinitions.snmpRspInconsistentName) ||
-            (errorStatus == SnmpDefinitions.snmpRspAuthorizationError)){
-
-            return SnmpDefinitions.snmpRspNoSuchName;
-
-        } else if ((errorStatus ==
-                    SnmpDefinitions.snmpRspAuthorizationError)         ||
-                   (errorStatus == SnmpDefinitions.snmpRspNotWritable)) {
-
-            if (reqPduType == SnmpDefinitions.pduWalkRequest)
-                return SnmpDefinitions.snmpRspReadOnly;
-            else
-                return SnmpDefinitions.snmpRspNoSuchName;
-
-        } else if ((errorStatus == SnmpDefinitions.snmpRspNoCreation)) {
-
-                return SnmpDefinitions.snmpRspNoSuchName;
-
-        } else if ((errorStatus == SnmpDefinitions.snmpRspWrongType)      ||
-                   (errorStatus == SnmpDefinitions.snmpRspWrongLength)    ||
-                   (errorStatus == SnmpDefinitions.snmpRspWrongEncoding)  ||
-                   (errorStatus == SnmpDefinitions.snmpRspWrongValue)     ||
-                   (errorStatus == SnmpDefinitions.snmpRspWrongLength)    ||
-                   (errorStatus ==
-                    SnmpDefinitions.snmpRspInconsistentValue)) {
-
-            if ((reqPduType == SnmpDefinitions.pduSetRequestPdu) ||
-                (reqPduType == SnmpDefinitions.pduWalkRequest))
-                return SnmpDefinitions.snmpRspBadValue;
-            else
-                return SnmpDefinitions.snmpRspNoSuchName;
-
-        } else if ((errorStatus ==
-                    SnmpDefinitions.snmpRspResourceUnavailable) ||
-                   (errorStatus ==
-                    SnmpDefinitions.snmpRspCommitFailed)        ||
-                   (errorStatus == SnmpDefinitions.snmpRspUndoFailed)) {
-
-            return SnmpDefinitions.snmpRspGenErr;
-
-        }
-
-        // At this point we should have a V1 error code
-        //
-        if (errorStatus == SnmpDefinitions.snmpRspTooBig)
-            return SnmpDefinitions.snmpRspTooBig;
-
-        if( (errorStatus == SnmpDefinitions.snmpRspBadValue) ||
-            (errorStatus == SnmpDefinitions.snmpRspReadOnly)) {
-            if ((reqPduType == SnmpDefinitions.pduSetRequestPdu) ||
-                (reqPduType == SnmpDefinitions.pduWalkRequest))
-                return errorStatus;
-            else
-                return SnmpDefinitions.snmpRspNoSuchName;
-        }
-
-        // We have a snmpRspGenErr, or something which is not defined
-        // in RFC1905 => return a snmpRspGenErr
-        //
-        return SnmpDefinitions.snmpRspGenErr;
-
-    }
-
-    // -------------------------------------------------------------
-    //
-    // This function does a best-effort to map global error status
-    // to SNMP v2 valid global error status.
-    //
-    // An SnmpStatusException can contain either:
-    // <li> v2 local error codes (that should be stored in the varbind)</li>
-    // <li> v2 global error codes </li>
-    // <li> v1 global error codes </li>
-    //
-    // v2 local error codes (noSuchInstance, noSuchObject)
-    // should not raise this level: they should have been stored in the
-    // varbind earlier. If they, do there is nothing much we can do except
-    // to transform them into:
-    // <li> a global snmpRspGenErr (if the request is a GET/GETNEXT) </li>
-    // <li> a global snmpRspNoSuchName otherwise. </li>
-    //
-    // v2 global error codes are transformed in the following way:
-    //
-    //    If the request was a GET/GETNEXT then snmpRspGenErr is returned.
-    //    (snmpRspGenErr is the only global error that is expected to be
-    //     raised by a GET/GETNEXT request).
-    //
-    //    Otherwise the v2 code itself is returned
-    //
-    // v1 global error codes are transformed in the following way:
-    //
-    //      snmpRspNoSuchName
-    //               => snmpRspNoAccess  (snmpRspGenErr for GET/GETNEXT)
-    //      snmpRspReadOnly
-    //               => snmpRspNotWritable (snmpRspGenErr for GET/GETNEXT)
-    //      snmpRspBadValue
-    //               => snmpRspWrongValue  (snmpRspGenErr for GET/GETNEXT)
-    //
-    // -------------------------------------------------------------
-    //
-    static final int mapErrorStatusToV2(int errorStatus, int reqPduType) {
-        // Map v1 codes onto v2 codes
-        //
-        if (errorStatus == SnmpDefinitions.snmpRspNoError)
-            return SnmpDefinitions.snmpRspNoError;
-
-        if (errorStatus == SnmpDefinitions.snmpRspGenErr)
-            return SnmpDefinitions.snmpRspGenErr;
-
-        if (errorStatus == SnmpDefinitions.snmpRspTooBig)
-            return SnmpDefinitions.snmpRspTooBig;
-
-        // For get / getNext / getBulk the only global error
-        // (PDU-level) possible is genErr.
-        //
-        if ((reqPduType != SnmpDefinitions.pduSetRequestPdu) &&
-            (reqPduType != SnmpDefinitions.pduWalkRequest)) {
-            if(errorStatus == SnmpDefinitions.snmpRspAuthorizationError)
-                return errorStatus;
-            else
-                return SnmpDefinitions.snmpRspGenErr;
-        }
-
-        // Map to noSuchName
-        //      if ((errorStatus == SnmpDefinitions.snmpRspNoSuchName) ||
-        //   (errorStatus == SnmpStatusException.noSuchInstance) ||
-        //  (errorStatus == SnmpStatusException.noSuchObject))
-        //  return SnmpDefinitions.snmpRspNoSuchName;
-
-        // SnmpStatusException.noSuchInstance and
-        // SnmpStatusException.noSuchObject can't happen...
-
-        if (errorStatus == SnmpDefinitions.snmpRspNoSuchName)
-            return SnmpDefinitions.snmpRspNoAccess;
-
-        // Map to notWritable
-        if (errorStatus == SnmpDefinitions.snmpRspReadOnly)
-                return SnmpDefinitions.snmpRspNotWritable;
-
-        // Map to wrongValue
-        if (errorStatus == SnmpDefinitions.snmpRspBadValue)
-            return SnmpDefinitions.snmpRspWrongValue;
-
-        // Other valid V2 codes
-        if ((errorStatus == SnmpDefinitions.snmpRspNoAccess) ||
-            (errorStatus == SnmpDefinitions.snmpRspInconsistentName) ||
-            (errorStatus == SnmpDefinitions.snmpRspAuthorizationError) ||
-            (errorStatus == SnmpDefinitions.snmpRspNotWritable) ||
-            (errorStatus == SnmpDefinitions.snmpRspNoCreation) ||
-            (errorStatus == SnmpDefinitions.snmpRspWrongType) ||
-            (errorStatus == SnmpDefinitions.snmpRspWrongLength) ||
-            (errorStatus == SnmpDefinitions.snmpRspWrongEncoding) ||
-            (errorStatus == SnmpDefinitions.snmpRspWrongValue) ||
-            (errorStatus == SnmpDefinitions.snmpRspWrongLength) ||
-            (errorStatus == SnmpDefinitions.snmpRspInconsistentValue) ||
-            (errorStatus == SnmpDefinitions.snmpRspResourceUnavailable) ||
-            (errorStatus == SnmpDefinitions.snmpRspCommitFailed) ||
-            (errorStatus == SnmpDefinitions.snmpRspUndoFailed))
-            return errorStatus;
-
-        // Ivalid V2 code => genErr
-        return SnmpDefinitions.snmpRspGenErr;
-    }
-
-    static final int mapErrorStatus(int errorStatus,
-                                    int protocolVersion,
-                                    int reqPduType) {
-        if (errorStatus == SnmpDefinitions.snmpRspNoError)
-            return SnmpDefinitions.snmpRspNoError;
-
-        // Too bad, an error occurs ... we need to translate it ...
-        //
-        if (protocolVersion == SnmpDefinitions.snmpVersionOne)
-            return mapErrorStatusToV1(errorStatus,reqPduType);
-        if (protocolVersion == SnmpDefinitions.snmpVersionTwo ||
-            protocolVersion == SnmpDefinitions.snmpVersionThree)
-            return mapErrorStatusToV2(errorStatus,reqPduType);
-
-        return SnmpDefinitions.snmpRspGenErr;
-    }
-
-    /**
-     * The method returns the error status of the operation.
-     * The method takes into account the protocol version.
-     */
-    protected int getErrorStatus() {
-        if (errorStatus == snmpRspNoError)
-            return snmpRspNoError;
-
-        return mapErrorStatus(errorStatus,version,type);
-    }
-
-    /**
-     * The method returns the error index as a position in the var bind list.
-     * The value returned by the method corresponds to the index in the original
-     * var bind list as received by the SNMP protocol adaptor.
-     */
-    protected int getErrorIndex() {
-        if  (errorStatus == snmpRspNoError)
-            return -1;
-
-        // An error occurs. We need to be carefull because the index
-        // we are getting is a valid SNMP index (so range starts at 1).
-        // FIX ME: Shall we double-check the range here ?
-        // The response is : YES :
-        if ((errorIndex == 0) || (errorIndex == -1))
-            errorIndex = 1;
-
-        return translation[errorIndex -1];
-    }
-
-    /**
-     * The method updates the varbind list of the subrequest.
-     */
-    protected  void updateRequest(SnmpVarBind var, int pos) {
-        int size= varBind.size();
-        translation[size]= pos;
-        varBind.addElement(var);
-    }
-
-    /**
-     * The method updates a given var bind list with the result of a
-     * previsouly invoked operation.
-     * Prior to calling the method, one must make sure that the operation was
-     * successful. As such the method getErrorIndex or getErrorStatus should be
-     * called.
-     */
-    protected void updateResult(SnmpVarBind[] result) {
-
-        if (result == null) return;
-        final int max=varBind.size();
-        final int len=result.length;
-        for(int i= 0; i< max ; i++) {
-            // bugId 4641694: must check position in order to avoid
-            //       ArrayIndexOutOfBoundException
-            final int pos=translation[i];
-            if (pos < len) {
-                result[pos] =
-                    (SnmpVarBind)((NonSyncVector)varBind).elementAtNonSync(i);
-            } else {
-                if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                    SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, SnmpSubRequestHandler.class.getName(),
-                        "updateResult","Position `"+pos+"' is out of bound...");
-                }
-            }
-        }
-    }
-
-    private void init(SnmpEngine engine,
-                      SnmpIncomingRequest incRequest) {
-        this.incRequest = incRequest;
-        this.engine = engine;
-    }
-
-    // PRIVATE VARIABLES
-    //------------------
-
-    /**
-     * Store the protocol version to handle
-     */
-    protected int version= snmpVersionOne;
-
-    /**
-     * Store the operation type. Remember if the type is Walk, it means
-     * that we have to invoke the check method ...
-     */
-    protected int type= 0;
-
-    /**
-     * Agent directly handled by the sub-request handler.
-     */
-    protected SnmpMibAgent agent;
-
-    /**
-     * Error status.
-     */
-    protected int errorStatus= snmpRspNoError;
-
-    /**
-     * Index of error.
-     * A value of -1 means no error.
-     */
-    protected int errorIndex= -1;
-
-    /**
-     * The varbind list specific to the current sub request.
-     * The vector must contain object of type SnmpVarBind.
-     */
-    protected Vector<SnmpVarBind> varBind;
-
-    /**
-     * The array giving the index translation between the content of
-     * <VAR>varBind</VAR> and the varbind list as specified in the request.
-     */
-    protected int[] translation;
-
-    /**
-     * Contextual object allocated by the SnmpUserDataFactory.
-     **/
-    protected Object data;
-
-    /**
-     * The SnmpMibRequest that will be passed to the agent.
-     *
-     **/
-    private   SnmpMibRequest mibRequest = null;
-
-    /**
-     * The SnmpPdu that will be passed to the request.
-     *
-     **/
-    private   SnmpPdu reqPdu = null;
-
-    // All the methods of the Vector class are synchronized.
-    // Synchronization is a very expensive operation. In our case it is not always
-    // required...
-    //
-    @SuppressWarnings("serial")  // we never serialize this
-    class NonSyncVector<E> extends Vector<E> {
-
-        public NonSyncVector(int size) {
-            super(size);
-        }
-
-        final void addNonSyncElement(E obj) {
-            ensureCapacity(elementCount + 1);
-            elementData[elementCount++] = obj;
-        }
-
-        @SuppressWarnings("unchecked")  // cast to E
-        final E elementAtNonSync(int index) {
-            return (E) elementData[index];
-        }
-    };
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/daemon/package.html b/ojluni/src/main/java/com/sun/jmx/snmp/daemon/package.html
deleted file mode 100755
index 353587f..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/daemon/package.html
+++ /dev/null
@@ -1,34 +0,0 @@
-<HTML>
-<HEAD>
-<!--
-
-Copyright (c) 1999, 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.
--->
-</HEAD>
-<BODY>
-Provides the classes implementing the <B>communication</B>.
-<p><b>This API is a Sun Microsystems internal API  and is subject 
-   to change without notice.</b></p>
-</BODY>
-</HTML>
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/defaults/DefaultPaths.java b/ojluni/src/main/java/com/sun/jmx/snmp/defaults/DefaultPaths.java
deleted file mode 100755
index e419aba..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/defaults/DefaultPaths.java
+++ /dev/null
@@ -1,245 +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.
- */
-
-package com.sun.jmx.snmp.defaults;
-
-
-// java import
-//
-import java.io.File;
-import java.io.BufferedReader;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.util.StringTokenizer;
-
-/**
- * This class represents a set of default directories used by Java DMK.
- *
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- * @since 1.5
- */
-public class DefaultPaths {
-    private static final String INSTALL_PATH_RESOURCE_NAME = "com/sun/jdmk/defaults/install.path";
-    // private constructor defined to "hide" the default public constructor
-    private DefaultPaths() {
-
-    }
-
-    // PUBLIC STATIC METHODS
-    //----------------------
-
-    /**
-     * Returns the installation directory for Java DMK.
-     *
-     * The default value of the installation directory is:
-     * <CODE>&lt;base_dir&gt; + File.separator + SUNWjdmk + File.separator + jdmk5.0 </CODE>
-     *
-     * @return Java DMK installation directory.
-     */
-    public static String getInstallDir() {
-        if (installDir == null)
-            return useRessourceFile();
-        else
-            return installDir;
-    }
-
-    /**
-     * Returns the installation directory for Java DMK concatenated with dirname.
-     *
-     * The default value of the installation directory is:
-     * <CODE>&lt;base_dir&gt; + File.separator + SUNWjdmk + File.separator + jdmk5.0 </CODE>
-     *
-     * @param dirname The directory to be appended.
-     *
-     * @return Java DMK installation directory + <CODE>File.separator</CODE> + <CODE>dirname</CODE>.
-     */
-    public static String getInstallDir(String dirname) {
-        if (installDir == null) {
-            if (dirname == null) {
-                return getInstallDir();
-            } else {
-                return getInstallDir() + File.separator + dirname;
-            }
-        } else {
-            if (dirname == null) {
-                return installDir;
-            } else {
-                return installDir + File.separator + dirname;
-            }
-        }
-    }
-
-    /**
-     * Sets the installation directory for Java DMK.
-     *
-     * @param dirname The directory where Java DMK resides.
-     */
-    public static void setInstallDir(String dirname) {
-        installDir = dirname;
-    }
-
-    /**
-     * Returns the <CODE>etc</CODE> directory for Java DMK.
-     * <P>
-     * The default value of the <CODE>etc</CODE> directory is:
-     * <UL>
-     * <LI><CODE>DefaultPaths.getInstallDir("etc")</CODE>.
-     * </UL>
-     *
-     * @return Java DMK <CODE>etc</CODE> directory.
-     */
-    public static String getEtcDir() {
-        if (etcDir == null)
-            return getInstallDir("etc");
-        else
-            return etcDir;
-    }
-
-    /**
-     * Returns the <CODE>etc</CODE> directory for Java DMK concatenated with dirname.
-     * <P>
-     * The default value of the <CODE>etc</CODE> directory is:
-     * <UL>
-     * <LI><CODE>DefaultPaths.getInstallDir("etc")</CODE>.
-     * </UL>
-     *
-     * @param dirname The directory to be appended.
-     *
-     * @return Java DMK <CODE>etc</CODE> directory + <CODE>File.separator</CODE> + <CODE>dirname</CODE>.
-     */
-    public static String getEtcDir(String dirname) {
-        if (etcDir == null) {
-            if (dirname == null) {
-                return getEtcDir();
-            } else {
-                return getEtcDir() + File.separator + dirname;
-            }
-        } else {
-            if (dirname == null) {
-                return etcDir;
-            } else {
-                return etcDir + File.separator + dirname;
-            }
-        }
-    }
-
-    /**
-     * Sets the <CODE>etc</CODE> directory for Java DMK.
-     *
-     * @param dirname The <CODE>etc</CODE> directory for Java DMK.
-     */
-    public static void setEtcDir(String dirname) {
-        etcDir = dirname;
-    }
-
-    /**
-     * Returns the <CODE>tmp</CODE> directory for the product.
-     * <P>
-     * The default value of the <CODE>tmp</CODE> directory is:
-     * <UL>
-     * <LI><CODE>DefaultPaths.getInstallDir("tmp")</CODE>.
-     * </UL>
-     *
-     * @return Java DMK <CODE>tmp</CODE> directory.
-     */
-    public static String getTmpDir() {
-         if (tmpDir == null)
-            return getInstallDir("tmp");
-        else
-            return tmpDir;
-    }
-
-    /**
-     * Returns the <CODE>tmp</CODE> directory for Java DMK concatenated with dirname.
-     * <P>
-     * The default value of the <CODE>tmp</CODE> directory is:
-     * <UL>
-     * <LI><CODE>DefaultPaths.getInstallDir("tmp")</CODE>.
-     * </UL>
-     *
-     * @param dirname The directory to be appended.
-     *
-     * @return Java DMK <CODE>tmp</CODE> directory + <CODE>File.separator</CODE> + <CODE>dirname</CODE>.
-     */
-    public static String getTmpDir(String dirname) {
-        if (tmpDir == null) {
-            if (dirname == null) {
-                return getTmpDir();
-            } else {
-                return getTmpDir() + File.separator + dirname;
-            }
-        } else {
-            if (dirname == null) {
-                return tmpDir;
-            } else {
-                return tmpDir + File.separator + dirname;
-            }
-        }
-    }
-
-    /**
-     * Sets the <CODE>tmp</CODE> directory for the product
-     *
-     * @param dirname The <CODE>tmp</CODE> directory for Java DMK.
-     */
-    public static void setTmpDir(String dirname) {
-        tmpDir = dirname;
-    }
-
-
-    // PRIVATE STATIC METHODS
-    //-----------------------
-
-    private static String useRessourceFile() {
-        InputStream in = null;
-        BufferedReader r = null;
-        try {
-            in =
-                DefaultPaths.class.getClassLoader().getResourceAsStream(INSTALL_PATH_RESOURCE_NAME);
-            if(in == null) return null;
-            r = new BufferedReader(new InputStreamReader(in));
-            installDir = r.readLine();
-        }catch(Exception e) {
-        }
-        finally {
-            try {
-                if(in != null) in.close();
-                if(r != null) r.close();
-            }catch(Exception e) {}
-        }
-        return installDir;
-    }
-
-    // PRIVATE VARIABLES
-    //------------------
-
-    /**
-     * Directories used by Java DMK.
-     */
-    private static String etcDir;
-    private static String tmpDir;
-    private static String installDir;
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/defaults/SnmpProperties.java b/ojluni/src/main/java/com/sun/jmx/snmp/defaults/SnmpProperties.java
deleted file mode 100755
index 675c15b..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/defaults/SnmpProperties.java
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
- * Copyright (c) 2002, 2007, 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.jmx.snmp.defaults;
-
-// java import
-//
-import java.io.FileInputStream;
-import java.io.InputStream;
-import java.io.IOException;
-import java.util.Properties;
-import java.util.Enumeration;
-
-/**
- * This class reads a file containing the property list defined for Java DMK
- * and adds all the read properties to the list of system properties.
- *
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- *
- * @since 1.5
- */
-public class SnmpProperties {
-
-    // private constructor defined to "hide" the default public constructor
-    private SnmpProperties() {
-    }
-
-    // PUBLIC STATIC METHODS
-    //----------------------
-
-    /**
-     * Reads the Java DMK property list from a file and
-     * adds the read properties as system properties.
-     */
-    public static void load(String file) throws IOException {
-        Properties props = new Properties();
-        InputStream is = new FileInputStream(file);
-        props.load(is);
-        is.close();
-        for (final Enumeration e = props.keys(); e.hasMoreElements() ; ) {
-            final String key = (String) e.nextElement();
-            System.setProperty(key,props.getProperty(key));
-        }
-    }
-
-    // PUBLIC STATIC VARIABLES
-    //------------------------
-
-    /**
-     * References the property that specifies the directory where
-     * the native libraries will be stored before the MLet Service
-     * loads them into memory.
-     * <p>
-     * Property Name: <B>jmx.mlet.library.dir</B>
-     */
-    public static final String MLET_LIB_DIR = "jmx.mlet.library.dir";
-
-    /**
-     * References the property that specifies the ACL file
-     * used by the SNMP protocol adaptor.
-     * <p>
-     * Property Name: <B>jdmk.acl.file</B>
-     */
-    public static final String ACL_FILE = "jdmk.acl.file";
-
-    /**
-     * References the property that specifies the Security file
-     * used by the SNMP protocol adaptor.
-     * <p>
-     * Property Name: <B>jdmk.security.file</B>
-     */
-    public static final String SECURITY_FILE = "jdmk.security.file";
-
-    /**
-     * References the property that specifies the User ACL file
-     * used by the SNMP protocol adaptor.
-     * <p>
-     * Property Name: <B>jdmk.uacl.file</B>
-     */
-    public static final String UACL_FILE = "jdmk.uacl.file";
-
-    /**
-     * References the property that specifies the default mib_core file
-     * used by the mibgen compiler.
-     * <p>
-     * Property Name: <B>mibcore.file</B>
-     */
-    public static final String MIB_CORE_FILE = "mibcore.file";
-
-    /**
-     * References the property that specifies the full name of the JMX
-     * specification implemented by this product.
-     * <p>
-     * Property Name: <B>jmx.specification.name</B>
-     */
-     public static final String JMX_SPEC_NAME = "jmx.specification.name";
-
-    /**
-     * References the property that specifies the version of the JMX
-     * specification implemented by this product.
-     * <p>
-     * Property Name: <B>jmx.specification.version</B>
-     */
-     public static final String JMX_SPEC_VERSION = "jmx.specification.version";
-
-    /**
-     * References the property that specifies the vendor of the JMX
-     * specification implemented by this product.
-     * <p>
-     * Property Name: <B>jmx.specification.vendor</B>
-     */
-     public static final String JMX_SPEC_VENDOR = "jmx.specification.vendor";
-
-    /**
-     * References the property that specifies the full name of this product
-     * implementing the  JMX specification.
-     * <p>
-     * Property Name: <B>jmx.implementation.name</B>
-     */
-    public static final String JMX_IMPL_NAME = "jmx.implementation.name";
-
-    /**
-     * References the property that specifies the name of the vendor of this product
-     * implementing the  JMX specification.
-     * <p>
-     * Property Name: <B>jmx.implementation.vendor</B>
-     */
-    public static final String JMX_IMPL_VENDOR = "jmx.implementation.vendor";
-
-    /**
-     * References the property that specifies the version of this product
-     * implementing the  JMX specification.
-     * <p>
-     * Property Name: <B>jmx.implementation.version</B>
-     */
-    public static final String JMX_IMPL_VERSION = "jmx.implementation.version";
-
-    /**
-     * References the property that specifies the SSL cipher suites to
-     * be enabled by the HTTP/SSL connector.
-     * <p>
-     * Property Name: <B>jdmk.ssl.cipher.suite.</B>
-     * <p>
-     * The list of SSL cipher suites is specified in the format:
-     * <p>
-     * <DD><B>jdmk.ssl.cipher.suite.</B>&lt;n&gt;<B>=</B>&lt;cipher suite name&gt;</DD>
-     * <p>
-     * For example:
-     * <p>
-     * <DD>jdmk.ssl.cipher.suite.1=SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA</DD>
-     * <DD>jdmk.ssl.cipher.suite.2=SSL_RSA_EXPORT_WITH_RC4_40_MD5</DD>
-     * <DD>. . .</DD>
-     */
-    public static final String SSL_CIPHER_SUITE = "jdmk.ssl.cipher.suite.";
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/defaults/package.html b/ojluni/src/main/java/com/sun/jmx/snmp/defaults/package.html
deleted file mode 100755
index 2305ad1..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/defaults/package.html
+++ /dev/null
@@ -1,34 +0,0 @@
-<HTML>
-<HEAD>
-<!--
- 
-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.
--->
-</HEAD>
-<BODY>
-    Provides specific classes to <B>Sun JMX Tools Contribution</B>: Utility classes.
-<p><b>This API is a Sun Microsystems internal API  and is subject 
-   to change without notice.</b></p>
-</BODY>
-</HTML>
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/internal/SnmpAccessControlModel.java b/ojluni/src/main/java/com/sun/jmx/snmp/internal/SnmpAccessControlModel.java
deleted file mode 100755
index 58b8055..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/internal/SnmpAccessControlModel.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Copyright (c) 2001, 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.
- */
-package com.sun.jmx.snmp.internal;
-
-import com.sun.jmx.snmp.SnmpStatusException;
-import com.sun.jmx.snmp.SnmpOid;
-import com.sun.jmx.snmp.SnmpPdu;
-/**
- * Access Control Model interface. Every access control model must implement this interface in order to be integrated in the engine based framework.
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- * @since 1.5
- */
-public interface SnmpAccessControlModel extends SnmpModel {
-    /**
-     * Method called by the dispatcher in order to control the access at an <CODE>SnmpOid</CODE> Level. If access is not allowed, an <CODE>SnmpStatusException</CODE> is thrown.
-     * This method is called after the <CODE>checkPduAccess</CODE> pdu based method.
-     * @param version The SNMP protocol version number.
-     * @param principal The request principal.
-     * @param securityLevel The request security level as defined in <CODE>SnmpEngine</CODE>.
-     * @param pduType The pdu type (get, set, ...).
-     * @param securityModel The security model ID.
-     * @param contextName The access control context name.
-     * @param oid The OID to check.
-     */
-    public void checkAccess(int version,
-                            String principal,
-                            int securityLevel,
-                            int pduType,
-                            int securityModel,
-                            byte[] contextName,
-                            SnmpOid oid)
-        throws SnmpStatusException;
-    /**
-     * Method called by the dispatcher in order to control the access at an SNMP pdu Level. If access is not allowed, an <CODE>SnmpStatusException</CODE> is thrown. In case of exception, the access control is aborted. OIDs are not checked.
-     * This method should be called prior to the <CODE>checkAccess</CODE> OID based method.
-     * @param version The SNMP protocol version number.
-     * @param principal The request principal.
-     * @param securityLevel The request security level as defined in <CODE>SnmpEngine</CODE>.
-     * @param pduType The pdu type (get, set, ...).
-     * @param securityModel The security model ID.
-     * @param contextName The access control context name.
-     * @param pdu The pdu to check.
-     */
-    public void checkPduAccess(int version,
-                               String principal,
-                               int securityLevel,
-                               int pduType,
-                               int securityModel,
-                               byte[] contextName,
-                               SnmpPdu pdu)
-        throws SnmpStatusException;
-
-    /**
-     * Enable SNMP V1 and V2 set requests. Be aware that can lead to a security hole in a context of SNMP V3 management. By default SNMP V1 and V2 set requests are not authorized.
-     * @return boolean True the activation suceeded.
-     */
-    public boolean enableSnmpV1V2SetRequest();
-    /**
-     * Disable SNMP V1 and V2 set requests. By default SNMP V1 and V2 set requests are not authorized.
-     * @return boolean True the deactivation suceeded.
-     */
-    public boolean disableSnmpV1V2SetRequest();
-
-    /**
-     * The SNMP V1 and V2 set requests authorization status. By default SNMP V1 and V2 set requests are not authorized.
-     * @return boolean True SNMP V1 and V2 requests are authorized.
-     */
-    public boolean isSnmpV1V2SetRequestAuthorized();
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/internal/SnmpAccessControlSubSystem.java b/ojluni/src/main/java/com/sun/jmx/snmp/internal/SnmpAccessControlSubSystem.java
deleted file mode 100755
index 010a75c..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/internal/SnmpAccessControlSubSystem.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright (c) 2001, 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.
- */
-package com.sun.jmx.snmp.internal;
-
-import com.sun.jmx.snmp.SnmpStatusException;
-import com.sun.jmx.snmp.SnmpOid;
-import com.sun.jmx.snmp.SnmpPdu;
-import com.sun.jmx.snmp.SnmpUnknownAccContrModelException;
-/**
- * Access Control sub system interface. To allow engine integration, an Access Control sub system must implement this interface.
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- * @since 1.5
- */
-public interface SnmpAccessControlSubSystem extends SnmpSubSystem {
-
-    /**
-     * Method called by the dispatcher in order to control the access at an SNMP pdu Level.
-     * <P> This call is routed by the sub system to the target model according to the SNMP protocol version number.</P>
-     * @param version The SNMP protocol version number.
-     * @param principal The request principal.
-     * @param securityLevel The request security level as defined in <CODE>SnmpEngine</CODE>.
-     * @param pduType The pdu type (get, set, ...).
-     * @param securityModel The security model ID.
-     * @param contextName The access control context name.
-     * @param pdu The pdu to check.
-     */
-    public void checkPduAccess(int version,
-                               String principal,
-                               int securityLevel,
-                               int pduType,
-                               int securityModel,
-                               byte[] contextName,
-                               SnmpPdu pdu) throws SnmpStatusException, SnmpUnknownAccContrModelException;
-    /**
-     * Method called by the dispatcher in order to control the access at an <CODE>SnmpOid</CODE> Level.
-     * This method is called after the <CODE>checkPduAccess</CODE> pdu based method.
-     * <P> This call is routed by the sub system to the target model according to the SNMP protocol version number.</P>
-     * @param version The SNMP protocol version number.
-     * @param principal The request principal.
-     * @param securityLevel The request security level as defined in <CODE>SnmpEngine</CODE>.
-     * @param pduType The pdu type (get, set, ...).
-     * @param securityModel The security model ID.
-     * @param contextName The access control context name.
-     * @param oid The OID to check.
-     */
-    public void checkAccess(int version,
-                            String principal,
-                            int securityLevel,
-                            int pduType,
-                            int securityModel,
-                            byte[] contextName,
-                            SnmpOid oid) throws SnmpStatusException, SnmpUnknownAccContrModelException;
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/internal/SnmpDecryptedPdu.java b/ojluni/src/main/java/com/sun/jmx/snmp/internal/SnmpDecryptedPdu.java
deleted file mode 100755
index a4c9fcb..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/internal/SnmpDecryptedPdu.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (c) 2001, 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.
- */
-package com.sun.jmx.snmp.internal;
-/**
- * Class returned by <CODE>SnmpSecuritySubSystem</CODE> and <CODE>SnmpSecurityModel</CODE>. If privacy is applied, the received pdu must be decrypted. This class contains the field of of a decrypted scoped pdu.
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- * @since 1.5
- */
-
-public class SnmpDecryptedPdu {
-    /**
-     * Decrypted pdu data.
-     */
-    public byte[] data = null;
-    /**
-     * Decrypted pdu data length.
-     */
-    public int dataLength = 0;
-    /**
-     * Decrypted context name.
-     */
-    public byte[] contextName = null;
-    /**
-     * Decrypted context engine Id.
-     */
-    public byte[] contextEngineId = null;
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/internal/SnmpEngineImpl.java b/ojluni/src/main/java/com/sun/jmx/snmp/internal/SnmpEngineImpl.java
deleted file mode 100755
index 44aae1d..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/internal/SnmpEngineImpl.java
+++ /dev/null
@@ -1,424 +0,0 @@
-/*
- * Copyright (c) 2001, 2006, 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.jmx.snmp.internal;
-
-import java.net.InetAddress;
-import java.net.UnknownHostException;
-import java.util.Hashtable;
-import java.util.logging.Level;
-import java.io.Serializable;
-
-import com.sun.jmx.snmp.SnmpDefinitions;
-import com.sun.jmx.snmp.SnmpEngineId;
-import com.sun.jmx.snmp.SnmpEngine;
-import com.sun.jmx.snmp.SnmpUsmKeyHandler;
-import com.sun.jmx.snmp.SnmpEngineFactory;
-import com.sun.jmx.snmp.SnmpUnknownModelException;
-
-import com.sun.jmx.snmp.internal.SnmpTools;
-import com.sun.jmx.snmp.SnmpBadSecurityLevelException;
-import static com.sun.jmx.defaults.JmxProperties.SNMP_LOGGER;
-
-/**
- * This engine is conformant with the RFC 2571. It is the main object within
- * an SNMP entity (agent, manager...).
- * To an engine is associated an {@link com.sun.jmx.snmp.SnmpEngineId}.
- * The way the engineId is retrieved is linked to the way the engine is
- * instantiated. See each <CODE>SnmpEngine</CODE> constructor for more details.
- * An engine is composed of a set of sub systems
- * {@link com.sun.jmx.snmp.internal.SnmpSubSystem}. An <CODE>SNMP</CODE>
- * engine can contain a:
- *<ul>
- *<li> Message Processing Sub System :
- * {@link com.sun.jmx.snmp.internal.SnmpMsgProcessingSubSystem}</li>
- *<li> Security Sub System :
- * {@link com.sun.jmx.snmp.internal.SnmpSecuritySubSystem} </li>
- *<li> Access Control Sub System :
- * {@link com.sun.jmx.snmp.internal.SnmpAccessControlSubSystem}</li>
- *</ul>
- *<P> Each sub system contains a set of models. A model is an implementation
- * of a particular treatement (eg: the User based Security Model defined in
- * RFC 2574 is a functional element dealing with authentication and privacy).
- *</P>
- * Engine instantiation is based on a factory. This factory, implementing
- * mandatorily {@link com.sun.jmx.snmp.SnmpEngineFactory  SnmpEngineFactory}
- * is set in the method <CODE>setFactory</CODE>.
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- * @since 1.5
- */
-public class SnmpEngineImpl implements SnmpEngine, Serializable {
-    private static final long serialVersionUID = -2564301391365614725L;
-
-    /**
-     * Security level. No authentication, no privacy. Value is 0,
-     * as defined in RFC 2572
-     */
-    public static final int noAuthNoPriv = 0;
-    /**
-     * Security level. Authentication, no privacy. Value is 1, as
-     * defined in RFC 2572
-     */
-    public static final int authNoPriv = 1;
-    /**
-     * Security level. Authentication, privacy. Value is 3,
-     * as defined in RFC 2572
-     */
-    public static final int authPriv = 3;
-    /**
-     * Flag that indicates that a report is to be sent. Value is 4, as defined in RFC 2572
-     */
-    public static final int reportableFlag = 4;
-
-    /**
-     * Mask used to isolate authentication information within a message flag.
-     */
-    public static final int authMask = 1;
-    /**
-     * Mask used to isolate privacy information within a message flag.
-     */
-    public static final int privMask = 2;
-    /**
-     * Mask used to isolate authentication and privacy information within a message flag.
-     */
-    public static final int authPrivMask = 3;
-
-    private SnmpEngineId engineid = null;
-    private SnmpEngineFactory factory = null;
-    private long startTime = 0;
-
-    private int boot = 0;
-    private boolean checkOid = false;
-
-    transient private SnmpUsmKeyHandler usmKeyHandler = null;
-    transient private SnmpLcd lcd = null;
-
-    transient private SnmpSecuritySubSystem securitySub = null;
-
-    transient private SnmpMsgProcessingSubSystem messageSub = null;
-
-    transient private SnmpAccessControlSubSystem accessSub = null;
-
-    /**
-     * Gets the engine time in seconds. This is the time from the last reboot.
-     * @return The time from the last reboot.
-     */
-    public synchronized int getEngineTime() {
-        //We do the counter wrap in a lazt way. Each time Engine is asked for his time it checks. So if nobody use the Engine, the time can wrap and wrap again without incrementing nb boot. We can imagine that it is irrelevant due to the amount of time needed to wrap.
-        long delta = (System.currentTimeMillis() / 1000) - startTime;
-        if(delta >  0x7FFFFFFF) {
-            //67 years of running. That is a great thing!
-            //Reinitialize startTime.
-            startTime = System.currentTimeMillis() / 1000;
-
-            //Can't do anything with this counter.
-            if(boot != 0x7FFFFFFF)
-                boot += 1;
-            //Store for future use.
-            storeNBBoots(boot);
-        }
-
-        return (int) ((System.currentTimeMillis() / 1000) - startTime);
-    }
-
-    /**
-     * Gets the engine Id. This is unique for each engine.
-     * @return The engine Id object.
-     */
-    public SnmpEngineId getEngineId() {
-        return engineid;
-    }
-
-    /**
-     * Gets the Usm key handler.
-     * @return The key handler.
-     */
-    public SnmpUsmKeyHandler getUsmKeyHandler() {
-        return usmKeyHandler;
-    }
-
-    /**
-     * Gets the engine Lcd.
-     * @return The engine Lcd.
-     */
-    public SnmpLcd getLcd() {
-        return lcd;
-    }
-    /**
-     * Gets the engine boot number. This is the number of time this engine has rebooted. Each time an <CODE>SnmpEngine</CODE> is instantiated, it will read this value in its Lcd, and store back the value incremented by one.
-     * @return The engine's number of reboot.
-     */
-    public int getEngineBoots() {
-        return boot;
-    }
-
-     /**
-     * Constructor. A Local Configuration Datastore is passed to the engine. It will be used to store and retrieve data (engine Id, engine boots).
-     * <P> WARNING : The SnmpEngineId is computed as follow:
-     * <ul>
-     * <li> If an lcd file is provided containing the property "localEngineID", this property value is used.</li>.
-     * <li> If not, if the passed engineID is not null, this engine ID is used.</li>
-     * <li> If not, a time based engineID is computed.</li>
-     * </ul>
-     * This constructor should be called by an <CODE>SnmpEngineFactory</CODE>. Don't call it directly.
-     * @param fact The factory used to instantiate this engine.
-     * @param lcd The local configuration datastore.
-     * @param engineid The engine ID to use. If null is provided, an SnmpEngineId is computed using the current time.
-     * @throws UnknownHostException Exception thrown, if the host name located in the property "localEngineID" is invalid.
-     */
-    public SnmpEngineImpl(SnmpEngineFactory fact,
-                          SnmpLcd lcd,
-                          SnmpEngineId engineid) throws UnknownHostException {
-
-        init(lcd, fact);
-        initEngineID();
-        if(this.engineid == null) {
-            if(engineid != null)
-                this.engineid = engineid;
-            else
-                this.engineid = SnmpEngineId.createEngineId();
-        }
-        lcd.storeEngineId(this.engineid);
-        if (SNMP_LOGGER.isLoggable(Level.FINER)) {
-            SNMP_LOGGER.logp(Level.FINER, SnmpEngineImpl.class.getName(),
-                    "SnmpEngineImpl(SnmpEngineFactory,SnmpLcd,SnmpEngineId)",
-                    "LOCAL ENGINE ID: " + this.engineid);
-        }
-    }
-    /**
-     * Constructor. A Local Configuration Datastore is passed to the engine. It will be used to store and retrieve data (engine ID, engine boots).
-     * <P> WARNING : The SnmpEngineId is computed as follow:
-     * <ul>
-     * <li> If an lcd file is provided containing the property "localEngineID", this property value is used.</li>.
-     * <li> If not, the passed address and port are used to compute one.</li>
-     * </ul>
-     * This constructor should be called by an <CODE>SnmpEngineFactory</CODE>. Don't call it directly.
-     * @param fact The factory used to instantiate this engine.
-     * @param lcd The local configuration datastore.
-     * @param port UDP port to use in order to calculate the engine ID.
-     * @param address An IP address used to calculate the engine ID.
-     * @throws UnknownHostException Exception thrown, if the host name located in the property "localEngineID" is invalid.
-     */
-    public SnmpEngineImpl(SnmpEngineFactory fact,
-                          SnmpLcd lcd,
-                          InetAddress address,
-                          int port) throws UnknownHostException {
-        init(lcd, fact);
-        initEngineID();
-        if(engineid == null)
-            engineid = SnmpEngineId.createEngineId(address, port);
-
-        lcd.storeEngineId(engineid);
-
-        if (SNMP_LOGGER.isLoggable(Level.FINER)) {
-            SNMP_LOGGER.logp(Level.FINER, SnmpEngineImpl.class.getName(),
-                    "SnmpEngineImpl(SnmpEngineFactory,SnmpLcd,InetAddress,int)",
-                    "LOCAL ENGINE ID: " + engineid + " / " +
-                    "LOCAL ENGINE NB BOOTS: " + boot + " / " +
-                    "LOCAL ENGINE START TIME: " + getEngineTime());
-        }
-    }
-
-    /**
-     * Constructor. A Local Configuration Datastore is passed to the engine. It will be used to store and retrieve data (engine ID, engine boots).
-     * <P> WARNING : The SnmpEngineId is computed as follow:
-     * <ul>
-     * <li> If an lcd file is provided containing the property "localEngineID", this property value is used.</li>.
-     * <li> If not, The passed port is used to compute one.</li>
-     * </ul>
-     * This constructor should be called by an <CODE>SnmpEngineFactory</CODE>. Don't call it directly.
-     * @param fact The factory used to instantiate this engine.
-     * @param lcd The local configuration datastore
-     * @param port UDP port to use in order to calculate the engine ID.
-     * @throws UnknownHostException Exception thrown, if the host name located in the property "localEngineID" is invalid.
-     */
-    public SnmpEngineImpl(SnmpEngineFactory fact,
-                          SnmpLcd lcd,
-                          int port) throws UnknownHostException {
-        init(lcd, fact);
-        initEngineID();
-        if(engineid == null)
-           engineid = SnmpEngineId.createEngineId(port);
-
-        lcd.storeEngineId(engineid);
-
-        if (SNMP_LOGGER.isLoggable(Level.FINER)) {
-            SNMP_LOGGER.logp(Level.FINER, SnmpEngineImpl.class.getName(),
-                    "SnmpEngineImpl(SnmpEngineFactory,SnmpLcd,int)",
-                    "LOCAL ENGINE ID: " + engineid + " / " +
-                    "LOCAL ENGINE NB BOOTS: " + boot + " / " +
-                    "LOCAL ENGINE START TIME: " + getEngineTime());
-        }
-    }
-
-    /**
-     * Constructor. A Local Configuration Datastore is passed to the engine. It will be used to store and retrieve data (engine ID, engine boots).
-     * <P> WARNING : The SnmpEngineId is computed as follow:
-     * <ul>
-     * <li> If an lcd file is provided containing the property "localEngineID", this property value is used.</li>.
-     * <li> If not, a time based engineID is computed.</li>
-     * </ul>
-     * When no configuration nor java property is set for the engine ID value, a unique time based engine ID will be generated.
-     * This constructor should be called by an <CODE>SnmpEngineFactory</CODE>. Don't call it directly.
-     * @param fact The factory used to instantiate this engine.
-     * @param lcd The local configuration datastore.
-     */
-    public SnmpEngineImpl(SnmpEngineFactory fact,
-                          SnmpLcd lcd) throws UnknownHostException {
-        init(lcd, fact);
-        initEngineID();
-        if(engineid == null)
-            engineid = SnmpEngineId.createEngineId();
-
-        lcd.storeEngineId(engineid);
-
-        if (SNMP_LOGGER.isLoggable(Level.FINER)) {
-            SNMP_LOGGER.logp(Level.FINER, SnmpEngineImpl.class.getName(),
-                    "SnmpEngineImpl(SnmpEngineFactory,SnmpLcd)",
-                    "LOCAL ENGINE ID: " + engineid + " / " +
-                    "LOCAL ENGINE NB BOOTS: " + boot + " / " +
-                    "LOCAL ENGINE START TIME: " + getEngineTime());
-        }
-    }
-
-    /**
-     * Access Control will check the oids. By default is false.
-     */
-    public synchronized void activateCheckOid() {
-        checkOid = true;
-    }
-
-    /**
-     * Access Control will not check the oids. By default is false.
-     */
-    public synchronized void deactivateCheckOid() {
-        checkOid = false;
-    }
-
-    /**
-     * Access Control check or not the oids. By default is false.
-     */
-    public synchronized boolean isCheckOidActivated() {
-        return checkOid;
-    }
-
-    //Do some check and store the nb boots value.
-    private void storeNBBoots(int boot) {
-        if(boot < 0 || boot == 0x7FFFFFFF) {
-            boot = 0x7FFFFFFF;
-            lcd.storeEngineBoots(boot);
-        }
-        else
-            lcd.storeEngineBoots(boot + 1);
-    }
-
-    // Initialize internal status.
-    private void init(SnmpLcd lcd, SnmpEngineFactory fact) {
-        this.factory = fact;
-        this.lcd = lcd;
-        boot = lcd.getEngineBoots();
-
-        if(boot == -1 || boot == 0)
-            boot = 1;
-
-        storeNBBoots(boot);
-
-        startTime = System.currentTimeMillis() / 1000;
-
-    }
-
-    void setUsmKeyHandler(SnmpUsmKeyHandler usmKeyHandler) {
-        this.usmKeyHandler = usmKeyHandler;
-    }
-
-    //Initialize the engineID.
-    private void initEngineID() throws UnknownHostException {
-        String id = lcd.getEngineId();
-        if(id != null) {
-            engineid = SnmpEngineId.createEngineId(id);
-        }
-    }
-
-
-    /**
-     * Returns the Message Processing Sub System.
-     * @return The Message Processing Sub System.
-     */
-    public SnmpMsgProcessingSubSystem getMsgProcessingSubSystem() {
-        return messageSub;
-    }
-
-    /**
-     * Sets the Message Processing Sub System.
-     * @param sys The Message Processing Sub System.
-     */
-    public void setMsgProcessingSubSystem(SnmpMsgProcessingSubSystem sys) {
-        messageSub = sys;
-    }
-
-     /**
-     * Returns the Security Sub System.
-     * @return The Security Sub System.
-     */
-    public SnmpSecuritySubSystem getSecuritySubSystem() {
-        return securitySub;
-    }
-    /**
-     * Sets the Security Sub System.
-     * @param sys The Security Sub System.
-     */
-    public void setSecuritySubSystem(SnmpSecuritySubSystem sys) {
-        securitySub = sys;
-    }
-     /**
-     * Sets the Access Control Sub System.
-     * @param sys The Access Control Sub System.
-     */
-    public void setAccessControlSubSystem(SnmpAccessControlSubSystem sys) {
-        accessSub = sys;
-    }
-
-    /**
-     * Returns the Access Control Sub System.
-     * @return The Access Control Sub System.
-     */
-    public SnmpAccessControlSubSystem getAccessControlSubSystem() {
-        return accessSub;
-    }
-    /**
-     * Checks the passed msg flags according to the rules specified in RFC 2572.
-     * @param msgFlags The msg flags.
-     */
-    public static void checkSecurityLevel(byte msgFlags)
-        throws SnmpBadSecurityLevelException {
-        int secLevel = msgFlags & SnmpDefinitions.authPriv;
-        if((secLevel & SnmpDefinitions.privMask) != 0)
-            if((secLevel & SnmpDefinitions.authMask) == 0) {
-                throw new SnmpBadSecurityLevelException("Security level:"+
-                                                        " noAuthPriv!!!");
-            }
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/internal/SnmpIncomingRequest.java b/ojluni/src/main/java/com/sun/jmx/snmp/internal/SnmpIncomingRequest.java
deleted file mode 100755
index 8f76d71..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/internal/SnmpIncomingRequest.java
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- * Copyright (c) 2001, 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.
- */
-package com.sun.jmx.snmp.internal;
-
-import java.net.InetAddress;
-
-import com.sun.jmx.snmp.SnmpSecurityParameters;
-import com.sun.jmx.snmp.SnmpTooBigException;
-import com.sun.jmx.snmp.SnmpStatusException;
-import com.sun.jmx.snmp.SnmpPdu;
-import com.sun.jmx.snmp.SnmpMsg;
-
-import com.sun.jmx.snmp.SnmpUnknownSecModelException;
-import com.sun.jmx.snmp.SnmpBadSecurityLevelException;
-
-/**
-<P> An <CODE>SnmpIncomingRequest</CODE> handles both sides of an incoming SNMP request:
-<ul>
-<li> The request. Unmarshalling of the received message. </li>
-<li> The response. Marshalling of the message to send. </li>
-</ul>
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- * @since 1.5
- */
-public interface SnmpIncomingRequest {
-    /**
-     * Once the incoming request decoded, returns the decoded security parameters.
-     * @return The decoded security parameters.
-     */
-    public SnmpSecurityParameters getSecurityParameters();
-     /**
-     * Tests if a report is expected.
-     * @return boolean indicating if a report is to be sent.
-     */
-    public boolean isReport();
-    /**
-     * Tests if a response is expected.
-     * @return boolean indicating if a response is to be sent.
-     */
-    public boolean isResponse();
-
-    /**
-     * Tells this request that no response will be sent.
-     */
-    public void noResponse();
-    /**
-     * Gets the incoming request principal.
-     * @return The request principal.
-     **/
-    public String getPrincipal();
-    /**
-     * Gets the incoming request security level. This level is defined in {@link com.sun.jmx.snmp.SnmpEngine SnmpEngine}.
-     * @return The security level.
-     */
-    public int getSecurityLevel();
-    /**
-     * Gets the incoming request security model.
-     * @return The security model.
-     */
-    public int getSecurityModel();
-    /**
-     * Gets the incoming request context name.
-     * @return The context name.
-     */
-    public byte[] getContextName();
-    /**
-     * Gets the incoming request context engine Id.
-     * @return The context engine Id.
-     */
-    public byte[] getContextEngineId();
-    /**
-     * Gets the incoming request context name used by Access Control Model in order to allow or deny the access to OIDs.
-     */
-    public byte[] getAccessContext();
-    /**
-     * Encodes the response message to send and puts the result in the specified byte array.
-     *
-     * @param outputBytes An array to receive the resulting encoding.
-     *
-     * @exception ArrayIndexOutOfBoundsException If the result does not fit
-     *                                           into the specified array.
-     */
-    public int encodeMessage(byte[] outputBytes)
-        throws SnmpTooBigException;
-
-    /**
-     * Decodes the specified bytes and initializes the request with the incoming message.
-     *
-     * @param inputBytes The bytes to be decoded.
-     *
-     * @exception SnmpStatusException If the specified bytes are not a valid encoding or if the security applied to this request failed and no report is to be sent (typically trap PDU).
-     */
-    public void decodeMessage(byte[] inputBytes,
-                              int byteCount,
-                              InetAddress address,
-                              int port)
-        throws SnmpStatusException, SnmpUnknownSecModelException,
-               SnmpBadSecurityLevelException;
-
-     /**
-     * Initializes the response to send with the passed Pdu.
-     * <P>
-     * If the encoding length exceeds <CODE>maxDataLength</CODE>,
-     * the method throws an exception.
-     *
-     * @param p The PDU to be encoded.
-     * @param maxDataLength The maximum length permitted for the data field.
-     *
-     * @exception SnmpStatusException If the specified <CODE>pdu</CODE>
-     *     is not valid.
-     * @exception SnmpTooBigException If the resulting encoding does not fit
-     * into <CODE>maxDataLength</CODE> bytes.
-     * @exception ArrayIndexOutOfBoundsException If the encoding exceeds
-     *   <CODE>maxDataLength</CODE>.
-     */
-    public SnmpMsg encodeSnmpPdu(SnmpPdu p,
-                                 int maxDataLength)
-        throws SnmpStatusException, SnmpTooBigException;
-
-    /**
-     * Gets the request PDU encoded in the received message.
-     * <P>
-     * This method decodes the data field and returns the resulting PDU.
-     *
-     * @return The resulting PDU.
-     * @exception SnmpStatusException If the encoding is not valid.
-     */
-    public SnmpPdu decodeSnmpPdu()
-        throws SnmpStatusException;
-
-    /**
-     * Returns a stringified form of the received message.
-     * @return The message state string.
-     */
-    public String printRequestMessage();
-    /**
-     * Returns a stringified form of the message to send.
-     * @return The message state string.
-     */
-    public String printResponseMessage();
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/internal/SnmpIncomingResponse.java b/ojluni/src/main/java/com/sun/jmx/snmp/internal/SnmpIncomingResponse.java
deleted file mode 100755
index 33ee7f9..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/internal/SnmpIncomingResponse.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * Copyright (c) 2001, 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.
- */
-package com.sun.jmx.snmp.internal;
-
-import java.net.InetAddress;
-import com.sun.jmx.snmp.SnmpPduFactory;
-import com.sun.jmx.snmp.SnmpSecurityParameters;
-import com.sun.jmx.snmp.SnmpSecurityException;
-import com.sun.jmx.snmp.SnmpTooBigException;
-import com.sun.jmx.snmp.SnmpStatusException;
-import com.sun.jmx.snmp.SnmpPdu;
-import com.sun.jmx.snmp.SnmpMsg;
-
-import com.sun.jmx.snmp.internal.SnmpSecurityCache;
-import com.sun.jmx.snmp.SnmpBadSecurityLevelException;
-/**
- * <P> An <CODE>SnmpIncomingResponse</CODE> handles the unmarshalling of the received response.</P>
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- * @since 1.5
- */
-
-public interface SnmpIncomingResponse {
-    /**
-     * Returns the source address.
-     * @return The source address.
-     */
-    public InetAddress getAddress();
-
-    /**
-     * Returns the source port.
-     * @return The source port.
-     */
-    public int getPort();
-
-    /**
-     * Gets the incoming response security parameters.
-     * @return The security parameters.
-     **/
-    public SnmpSecurityParameters getSecurityParameters();
-    /**
-     * Call this method in order to reuse <CODE>SnmpOutgoingRequest</CODE> cache.
-     * @param cache The security cache.
-     */
-    public void setSecurityCache(SnmpSecurityCache cache);
-    /**
-     * Gets the incoming response security level. This level is defined in
-     * {@link com.sun.jmx.snmp.SnmpEngine SnmpEngine}.
-     * @return The security level.
-     */
-    public int getSecurityLevel();
-    /**
-     * Gets the incoming response security model.
-     * @return The security model.
-     */
-    public int getSecurityModel();
-    /**
-     * Gets the incoming response context name.
-     * @return The context name.
-     */
-    public byte[] getContextName();
-
-    /**
-     * Decodes the specified bytes and initializes itself with the received
-     * response.
-     *
-     * @param inputBytes The bytes to be decoded.
-     *
-     * @exception SnmpStatusException If the specified bytes are not a valid encoding.
-     */
-    public SnmpMsg decodeMessage(byte[] inputBytes,
-                                 int byteCount,
-                                 InetAddress address,
-                                 int port)
-        throws SnmpStatusException, SnmpSecurityException;
-
-    /**
-     * Gets the request PDU encoded in the received response.
-     * <P>
-     * This method decodes the data field and returns the resulting PDU.
-     *
-     * @return The resulting PDU.
-     * @exception SnmpStatusException If the encoding is not valid.
-     */
-    public SnmpPdu decodeSnmpPdu()
-        throws SnmpStatusException;
-
-    /**
-     * Returns the response request Id.
-     * @param data The flat message.
-     * @return The request Id.
-     */
-    public int getRequestId(byte[] data) throws SnmpStatusException;
-
-    /**
-     * Returns a stringified form of the message to send.
-     * @return The message state string.
-     */
-    public String printMessage();
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/internal/SnmpLcd.java b/ojluni/src/main/java/com/sun/jmx/snmp/internal/SnmpLcd.java
deleted file mode 100755
index 06e3d457..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/internal/SnmpLcd.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * Copyright (c) 2001, 2006, 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.jmx.snmp.internal;
-
-import java.util.Hashtable;
-import com.sun.jmx.snmp.SnmpEngineId;
-import com.sun.jmx.snmp.SnmpUnknownModelLcdException;
-import com.sun.jmx.snmp.SnmpUnknownSubSystemException;
-/**
- * Class to extend in order to develop a customized Local Configuration Datastore. The Lcd is used by the <CODE>SnmpEngine</CODE> to store and retrieve data.
- *<P> <CODE>SnmpLcd</CODE> manages the Lcds needed by every {@link com.sun.jmx.snmp.internal.SnmpModel SnmpModel}. It is possible to add and remove {@link com.sun.jmx.snmp.internal.SnmpModelLcd SnmpModelLcd}.</P>
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- * @since 1.5
- */
-public abstract class SnmpLcd {
-
-    class SubSysLcdManager {
-        private Hashtable<Integer, SnmpModelLcd> models =
-                new Hashtable<Integer, SnmpModelLcd>();
-
-        public void addModelLcd(int id,
-                                SnmpModelLcd usmlcd) {
-            models.put(new Integer(id), usmlcd);
-        }
-
-        public SnmpModelLcd getModelLcd(int id) {
-            return models.get(new Integer(id));
-        }
-
-        public SnmpModelLcd removeModelLcd(int id) {
-            return models.remove(new Integer(id));
-        }
-    }
-
-
-    private Hashtable<SnmpSubSystem, SubSysLcdManager> subs =
-            new Hashtable<SnmpSubSystem, SubSysLcdManager>();
-
-    /**
-     * Returns the number of time the engine rebooted.
-     * @return The number of reboots or -1 if the information is not present in the Lcd.
-     */
-    public abstract int getEngineBoots();
-    /**
-     * Returns the engine Id located in the Lcd.
-     * @return The engine Id or null if the information is not present in the Lcd.
-     */
-    public abstract String getEngineId();
-
-    /**
-     * Persists the number of reboots.
-     * @param i Reboot number.
-     */
-    public abstract void storeEngineBoots(int i);
-
-    /**
-     * Persists the engine Id.
-     * @param id The engine Id.
-     */
-    public abstract void  storeEngineId(SnmpEngineId id);
-    /**
-     * Adds an Lcd model.
-     * @param sys The subsytem managing the model.
-     * @param id The model Id.
-     * @param lcd The Lcd model.
-     */
-    public void addModelLcd(SnmpSubSystem sys,
-                            int id,
-                            SnmpModelLcd lcd) {
-
-        SubSysLcdManager subsys = subs.get(sys);
-        if( subsys == null ) {
-            subsys = new SubSysLcdManager();
-            subs.put(sys, subsys);
-        }
-
-        subsys.addModelLcd(id, lcd);
-    }
-     /**
-     * Removes an Lcd model.
-     * @param sys The subsytem managing the model.
-     * @param id The model Id.
-     */
-    public void removeModelLcd(SnmpSubSystem sys,
-                                int id)
-        throws SnmpUnknownModelLcdException, SnmpUnknownSubSystemException {
-
-        SubSysLcdManager subsys = subs.get(sys);
-        if( subsys != null ) {
-            SnmpModelLcd lcd = subsys.removeModelLcd(id);
-            if(lcd == null) {
-                throw new SnmpUnknownModelLcdException("Model : " + id);
-            }
-        }
-        else
-            throw new SnmpUnknownSubSystemException(sys.toString());
-    }
-
-    /**
-     * Gets an Lcd model.
-     * @param sys The subsytem managing the model
-     * @param id The model Id.
-     * @return The Lcd model or null if no Lcd model were found.
-     */
-    public SnmpModelLcd getModelLcd(SnmpSubSystem sys,
-                                    int id) {
-        SubSysLcdManager subsys = subs.get(sys);
-
-        if(subsys == null) return null;
-
-        return subsys.getModelLcd(id);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/internal/SnmpModel.java b/ojluni/src/main/java/com/sun/jmx/snmp/internal/SnmpModel.java
deleted file mode 100755
index 00c1d08..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/internal/SnmpModel.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (c) 2001, 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.
- */
-package com.sun.jmx.snmp.internal;
-/**
- * Interface that every SNMP model must implement in order to be integrated in the engine framework.
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- * @since 1.5
- */
-public interface SnmpModel {
-
-    /**
-     * Returns the sub system that manages this model.
-     * @return The sub system.
-     */
-    public SnmpSubSystem getSubSystem();
-    /**
-     * A human readable model name.
-     * @return The model name.
-     */
-    public String getName();
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/internal/SnmpModelLcd.java b/ojluni/src/main/java/com/sun/jmx/snmp/internal/SnmpModelLcd.java
deleted file mode 100755
index 867cb0e..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/internal/SnmpModelLcd.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (c) 2001, 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.
- */
-
-package com.sun.jmx.snmp.internal;
-
-/**
- * An interface to implement when developping customized model configuration datastore.
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- * @since 1.5
- */
-public interface SnmpModelLcd {
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/internal/SnmpMsgProcessingModel.java b/ojluni/src/main/java/com/sun/jmx/snmp/internal/SnmpMsgProcessingModel.java
deleted file mode 100755
index 9a139cc..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/internal/SnmpMsgProcessingModel.java
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- * Copyright (c) 2001, 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.
- */
-package com.sun.jmx.snmp.internal;
-
-
-import com.sun.jmx.snmp.mpm.SnmpMsgTranslator;
-
-import com.sun.jmx.snmp.SnmpTooBigException;
-import com.sun.jmx.snmp.SnmpStatusException;
-import com.sun.jmx.snmp.SnmpPdu;
-import com.sun.jmx.snmp.SnmpPduFactory;
-import com.sun.jmx.snmp.SnmpSecurityParameters;
-
-import com.sun.jmx.snmp.SnmpParams;
-/**
- * The message processing model interface. Any message processing model must implement this interface in order to be integrated in the engine framework.
- * The model is called by the dispatcher when a call is received or when a call is sent.
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- * @since 1.5
- */
-public interface SnmpMsgProcessingModel extends SnmpModel {
-    /**
-     * This method is called when a call is to be sent to the network.
-     * @param factory The pdu factory to use to encode and decode pdu.
-     * @return The object that will handle every steps of the sending (mainly marshalling and security).
-     */
-    public SnmpOutgoingRequest getOutgoingRequest(SnmpPduFactory factory);
-    /**
-     * This method is called when a call is received from the network.
-     * @param factory The pdu factory to use to encode and decode pdu.
-     * @return The object that will handle every steps of the receiving (mainly unmarshalling and security).
-     */
-    public SnmpIncomingRequest getIncomingRequest(SnmpPduFactory factory);
-
-     /**
-     * This method is called when a response is received from the network.
-     * @param factory The pdu factory to use to encode and decode pdu.
-     * @return The object that will handle every steps of the receiving (mainly unmarshalling and security).
-     */
-    public SnmpIncomingResponse getIncomingResponse(SnmpPduFactory factory);
-    /**
-     * This method is called to instantiate a pdu according to the passed pdu type and parameters.
-     * @param p The request parameters.
-     * @param type The pdu type.
-     * @return The pdu.
-     */
-    public SnmpPdu getRequestPdu(SnmpParams p, int type) throws SnmpStatusException;
-
-    /**
-     * This method is called to encode a full scoped pdu that has not been encrypted. <CODE>contextName</CODE>, <CODE>contextEngineID</CODE> and data are known.
-     * <BR>The specified parameters are defined in RFC 2572 (see also the {@link com.sun.jmx.snmp.SnmpV3Message} class).
-     * @param version The SNMP protocol version.
-     * @param msgID The SNMP message ID.
-     * @param msgMaxSize The max message size.
-     * @param msgFlags The message flags.
-     * @param msgSecurityModel The message security model.
-     * @param params The security parameters.
-     * @param contextEngineID The context engine ID.
-     * @param contextName The context name.
-     * @param data The encoded data.
-     * @param dataLength The encoded data length.
-     * @param outputBytes The buffer containing the encoded message.
-     * @return The encoded bytes number.
-     */
-    public int encode(int version,
-                      int msgID,
-                      int msgMaxSize,
-                      byte msgFlags,
-                      int msgSecurityModel,
-                      SnmpSecurityParameters params,
-                      byte[] contextEngineID,
-                      byte[] contextName,
-                      byte[] data,
-                      int dataLength,
-                      byte[] outputBytes) throws SnmpTooBigException;
-    /**
-     * This method is called to encode a full scoped pdu that as been encrypted. <CODE>contextName</CODE>, <CODE>contextEngineID</CODE> and data are known.
-     * <BR>The specified parameters are defined in RFC 2572 (see also the {@link com.sun.jmx.snmp.SnmpV3Message} class).
-     * @param version The SNMP protocol version.
-     * @param msgID The SNMP message ID.
-     * @param msgMaxSize The max message size.
-     * @param msgFlags The message flags.
-     * @param msgSecurityModel The message security model.
-     * @param params The security parameters.
-     * @param encryptedPdu The encrypted pdu.
-     * @param outputBytes The buffer containing the encoded message.
-     * @return The encoded bytes number.
-     */
-    public int encodePriv(int version,
-                          int msgID,
-                          int msgMaxSize,
-                          byte msgFlags,
-                          int msgSecurityModel,
-                          SnmpSecurityParameters params,
-                          byte[] encryptedPdu,
-                          byte[] outputBytes) throws SnmpTooBigException;
-     /**
-     * This method returns a decoded scoped pdu. This method decodes only the <CODE>contextEngineID</CODE>, <CODE>contextName</CODE> and data. It is needed by the <CODE>SnmpSecurityModel</CODE> after decryption.
-     * @param pdu The encoded pdu.
-     * @return The partialy scoped pdu.
-     */
-    public SnmpDecryptedPdu decode(byte[] pdu) throws SnmpStatusException;
-
-    /**
-     * This method returns an encoded scoped pdu. This method encode only the <CODE>contextEngineID</CODE>, <CODE>contextName</CODE> and data. It is needed by the <CODE>SnmpSecurityModel</CODE> for decryption.
-     * @param pdu The pdu to encode.
-     * @param outputBytes The partialy scoped pdu.
-     * @return The encoded bytes number.
-     */
-    public int encode(SnmpDecryptedPdu pdu,
-                      byte[] outputBytes) throws SnmpTooBigException;
-
-    /**
-     * In order to change the behavior of the translator, set it.
-     * @param translator The translator that will be used.
-     */
-    public void setMsgTranslator(SnmpMsgTranslator translator);
-
-    /**
-     * Returns the current translator.
-     * @return The current translator.
-     */
-    public SnmpMsgTranslator getMsgTranslator();
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/internal/SnmpMsgProcessingSubSystem.java b/ojluni/src/main/java/com/sun/jmx/snmp/internal/SnmpMsgProcessingSubSystem.java
deleted file mode 100755
index c0adabc..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/internal/SnmpMsgProcessingSubSystem.java
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- * Copyright (c) 2001, 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.
- */
-package com.sun.jmx.snmp.internal;
-
-import java.util.Vector;
-import com.sun.jmx.snmp.SnmpMsg;
-import com.sun.jmx.snmp.SnmpParams;
-import com.sun.jmx.snmp.SnmpPdu;
-import com.sun.jmx.snmp.SnmpVarBind;
-import com.sun.jmx.snmp.SnmpStatusException;
-import com.sun.jmx.snmp.SnmpTooBigException;
-import com.sun.jmx.snmp.SnmpPduFactory;
-import com.sun.jmx.snmp.SnmpSecurityParameters;
-
-import com.sun.jmx.snmp.SnmpUnknownMsgProcModelException;
-
-/**
- * Message processing sub system interface. To allow engine integration, a message processing sub system must implement this interface. This sub system is called by the dispatcher when receiving or sending calls.
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- * @since 1.5
- */
-public interface SnmpMsgProcessingSubSystem extends SnmpSubSystem {
-
-    /**
-     * Attaches the security sub system to this sub system. Message processing model are making usage of various security sub systems. This direct attachement avoid the need of accessing the engine to retrieve the Security sub system.
-     * @param security The security sub system.
-     */
-    public void setSecuritySubSystem(SnmpSecuritySubSystem security);
-    /** Gets the attached security sub system.
-     * @return The security sub system.
-     */
-    public SnmpSecuritySubSystem getSecuritySubSystem();
-
-    /**
-     * This method is called when a call is received from the network.
-     * @param model The model ID.
-     * @param factory The pdu factory to use to encode and decode pdu.
-     * @return The object that will handle every steps of the receiving (mainly unmarshalling and security).
-     */
-    public SnmpIncomingRequest getIncomingRequest(int model,
-                                                  SnmpPduFactory factory)
-        throws SnmpUnknownMsgProcModelException;
-    /**
-     * This method is called when a call is to be sent to the network. The sub system routes the call to the dedicated model according to the model ID.
-     * @param model The model ID.
-     * @param factory The pdu factory to use to encode and decode pdu.
-     * @return The object that will handle every steps of the sending (mainly marshalling and security).
-     */
-    public SnmpOutgoingRequest getOutgoingRequest(int model,
-                                                  SnmpPduFactory factory) throws SnmpUnknownMsgProcModelException ;
-    /**
-     * This method is called to instantiate a pdu according to the passed pdu type and parameters. The sub system routes the call to the dedicated model according to the model ID.
-     * @param model The model ID.
-     * @param p The request parameters.
-     * @param type The pdu type.
-     * @return The pdu.
-     */
-    public SnmpPdu getRequestPdu(int model, SnmpParams p, int type) throws SnmpUnknownMsgProcModelException, SnmpStatusException ;
-     /**
-     * This method is called when a call is received from the network. The sub system routes the call to the dedicated model according to the model ID.
-     * @param model The model ID.
-     * @param factory The pdu factory to use to decode pdu.
-     * @return The object that will handle every steps of the receiving (mainly marshalling and security).
-     */
-    public SnmpIncomingResponse getIncomingResponse(int model,
-                                                    SnmpPduFactory factory) throws SnmpUnknownMsgProcModelException;
-    /**
-     * This method is called to encode a full scoped pdu that as not been encrypted. <CODE>contextName</CODE>, <CODE>contextEngineID</CODE> and data are known. It will be routed to the dedicated model according to the version value.
-     * <BR>The specified parameters are defined in RFC 2572 (see also the {@link com.sun.jmx.snmp.SnmpV3Message} class).
-     * @param version The SNMP protocol version.
-     * @param msgID The SNMP message ID.
-     * @param msgMaxSize The max message size.
-     * @param msgFlags The message flags.
-     * @param msgSecurityModel The message security model.
-     * @param params The security parameters.
-     * @param contextEngineID The context engine ID.
-     * @param contextName The context name.
-     * @param data The encoded data.
-     * @param dataLength The encoded data length.
-     * @param outputBytes The buffer containing the encoded message.
-     * @return The encoded bytes number.
-     */
-    public int encode(int version,
-                      int msgID,
-                      int msgMaxSize,
-                      byte msgFlags,
-                      int msgSecurityModel,
-                      SnmpSecurityParameters params,
-                      byte[] contextEngineID,
-                      byte[] contextName,
-                      byte[] data,
-                      int dataLength,
-                      byte[] outputBytes)
-        throws SnmpTooBigException,
-               SnmpUnknownMsgProcModelException ;
-    /**
-     * This method is called to encode a full scoped pdu that as been encrypted. <CODE>contextName</CODE>, <CODE>contextEngineID</CODE> and data are not known. It will be routed to the dedicated model according to the version value.
-     * <BR>The specified parameters are defined in RFC 2572 (see also the {@link com.sun.jmx.snmp.SnmpV3Message} class).
-     * @param version The SNMP protocol version.
-     * @param msgID The SNMP message ID.
-     * @param msgMaxSize The max message size.
-     * @param msgFlags The message flags.
-     * @param msgSecurityModel The message security model.
-     * @param params The security parameters.
-     * @param encryptedPdu The encrypted pdu.
-     * @param outputBytes The buffer containing the encoded message.
-     * @return The encoded bytes number.
-     */
-    public int encodePriv(int version,
-                          int msgID,
-                          int msgMaxSize,
-                          byte msgFlags,
-                          int msgSecurityModel,
-                          SnmpSecurityParameters params,
-                          byte[] encryptedPdu,
-                          byte[] outputBytes) throws SnmpTooBigException, SnmpUnknownMsgProcModelException;
-
-     /**
-     * This method returns a decoded scoped pdu. This method decodes only the <CODE>contextEngineID</CODE>, <CODE>contextName</CODE> and data. It is needed by the <CODE>SnmpSecurityModel</CODE> after decryption. It will be routed to the dedicated model according to the version value.
-     * @param version The SNMP protocol version.
-     * @param pdu The encoded pdu.
-     * @return the partialy scoped pdu.
-     */
-    public SnmpDecryptedPdu decode(int version,
-                                   byte[] pdu)
-        throws SnmpStatusException, SnmpUnknownMsgProcModelException;
-
-      /**
-     * This method returns an encoded scoped pdu. This method encodes only the <CODE>contextEngineID</CODE>, <CODE>contextName</CODE> and data. It is needed by the <CODE>SnmpSecurityModel</CODE> for decryption. It will be routed to the dedicated model according to the version value.
-     * @param version The SNMP protocol version.
-     * @param pdu The pdu to encode.
-     * @param outputBytes The partialy scoped pdu.
-     * @return The encoded bytes number.
-     */
-    public int encode(int version,
-                      SnmpDecryptedPdu pdu,
-                      byte[] outputBytes)
-        throws SnmpTooBigException, SnmpUnknownMsgProcModelException;
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/internal/SnmpOutgoingRequest.java b/ojluni/src/main/java/com/sun/jmx/snmp/internal/SnmpOutgoingRequest.java
deleted file mode 100755
index b771058..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/internal/SnmpOutgoingRequest.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Copyright (c) 2001, 2006, 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.jmx.snmp.internal;
-
-import java.net.InetAddress;
-
-import com.sun.jmx.snmp.SnmpSecurityException;
-import com.sun.jmx.snmp.SnmpTooBigException;
-import com.sun.jmx.snmp.SnmpStatusException;
-import com.sun.jmx.snmp.SnmpPdu;
-import com.sun.jmx.snmp.SnmpMsg;
-
-import com.sun.jmx.snmp.internal.SnmpSecurityCache;
-import com.sun.jmx.snmp.SnmpUnknownSecModelException;
-import com.sun.jmx.snmp.SnmpBadSecurityLevelException;
-/**
- * <P> An <CODE>SnmpOutgoingRequest</CODE> handles the marshalling of the message to send.</P>
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- * @since 1.5
- */
-
-public interface SnmpOutgoingRequest {
-    /**
-     * Returns the cached security data used when marshalling the call as a secure one.
-     * @return The cached data.
-     */
-    public SnmpSecurityCache getSecurityCache();
-    /**
-     * Encodes the message to send and puts the result in the specified byte array.
-     *
-     * @param outputBytes An array to receive the resulting encoding.
-     *
-     * @exception ArrayIndexOutOfBoundsException If the result does not fit
-     *                                           into the specified array.
-     */
-    public int encodeMessage(byte[] outputBytes)
-        throws SnmpStatusException,
-               SnmpTooBigException, SnmpSecurityException,
-               SnmpUnknownSecModelException, SnmpBadSecurityLevelException;
-  /**
-     * Initializes the message to send with the passed Pdu.
-     * <P>
-     * If the encoding length exceeds <CODE>maxDataLength</CODE>,
-     * the method throws an exception.</P>
-     *
-     * @param p The PDU to be encoded.
-     * @param maxDataLength The maximum length permitted for the data field.
-     *
-     * @exception SnmpStatusException If the specified PDU <CODE>p</CODE> is
-     *    not valid.
-     * @exception SnmpTooBigException If the resulting encoding does not fit
-     *    into <CODE>maxDataLength</CODE> bytes.
-     * @exception ArrayIndexOutOfBoundsException If the encoding exceeds
-     *    <CODE>maxDataLength</CODE>.
-     */
-    public SnmpMsg encodeSnmpPdu(SnmpPdu p,
-                                 int maxDataLength)
-        throws SnmpStatusException, SnmpTooBigException;
-    /**
-     * Returns a stringified form of the message to send.
-     * @return The message state string.
-     */
-    public String printMessage();
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/internal/SnmpSecurityCache.java b/ojluni/src/main/java/com/sun/jmx/snmp/internal/SnmpSecurityCache.java
deleted file mode 100755
index d10663a..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/internal/SnmpSecurityCache.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (c) 2001, 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.
- */
-package com.sun.jmx.snmp.internal;
-
-/**
- * Cache is returned by <CODE>SnmpSecurityModel</CODE> when handling requests. The cache contants is security dependant. This interface is a marker that every cache classes must implement.
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- * @since 1.5
- */
-public interface SnmpSecurityCache {
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/internal/SnmpSecurityModel.java b/ojluni/src/main/java/com/sun/jmx/snmp/internal/SnmpSecurityModel.java
deleted file mode 100755
index d79189d..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/internal/SnmpSecurityModel.java
+++ /dev/null
@@ -1,176 +0,0 @@
-/*
- * Copyright (c) 2001, 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.
- */
-package com.sun.jmx.snmp.internal;
-
-import com.sun.jmx.snmp.SnmpSecurityException;
-import com.sun.jmx.snmp.SnmpStatusException;
-import com.sun.jmx.snmp.SnmpTooBigException;
-import com.sun.jmx.snmp.SnmpSecurityParameters;
-
-/**
- * Security model interface. Any security model implementation must implement this interface in order to be integrated in the engine framework. Security models are called when SNMP messages are received or sent. They deal with security (authentication and privacy).
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- * @since 1.5
- */
-public interface SnmpSecurityModel extends SnmpModel {
-    /**
-     * Called when a request is to be sent to the network. It must be securized.
-     * <BR>The specified parameters are defined in RFC 2572 (see also the {@link com.sun.jmx.snmp.SnmpV3Message} class).
-     * @param cache The cache that has been created by calling <CODE>createSecurityCache</CODE> on this model.
-     * @param version The SNMP protocol version.
-     * @param msgID The current request id.
-     * @param msgMaxSize The message max size.
-     * @param msgFlags The message flags (reportable, Auth and Priv).
-     * @param msgSecurityModel This current security model.
-     * @param params The security parameters that contain the model dependant parameters.
-     * @param contextEngineID The context engine ID.
-     * @param contextName The context name.
-     * @param data The marshalled varbind list.
-     * @param dataLength The marshalled varbind list length.
-     * @param outputBytes The buffer to fill with securized request. This is a representation independant marshalled format. This buffer will be sent to the network.
-     * @return The marshalled byte number.
-     */
-    public int generateRequestMsg(SnmpSecurityCache cache,
-                                  int version,
-                                  int msgID,
-                                  int msgMaxSize,
-                                  byte msgFlags,
-                                  int msgSecurityModel,
-                                  SnmpSecurityParameters params,
-                                  byte[] contextEngineID,
-                                  byte[] contextName,
-                                  byte[] data,
-                                  int dataLength,
-                                  byte[] outputBytes)
-        throws SnmpTooBigException, SnmpStatusException,
-               SnmpSecurityException;
-
-    /**
-     * Called when a response is to be sent to the network. It must be securized.
-     * <BR>The specified parameters are defined in RFC 2572 (see also the {@link com.sun.jmx.snmp.SnmpV3Message} class).
-     * @param cache The cache that has been created by calling <CODE>createSecurityCache</CODE> on this model.
-     * @param version The SNMP protocol version.
-     * @param msgID The current request id.
-     * @param msgMaxSize The message max size.
-     * @param msgFlags The message flags (reportable, Auth and Priv)
-     * @param msgSecurityModel This current security model.
-     * @param params The security parameters that contain the model dependant parameters.
-     * @param contextEngineID The context engine ID.
-     * @param contextName The context name.
-     * @param data The marshalled varbind list.
-     * @param dataLength The marshalled varbind list length.
-     * @param outputBytes The buffer to fill with securized request. This is a representation independant marshalled format. This buffer will be sent to the network.
-     * @return The marshalled byte number.
-     */
-    public int generateResponseMsg(SnmpSecurityCache cache,
-                                   int version,
-                                   int msgID,
-                                   int msgMaxSize,
-                                   byte msgFlags,
-                                   int msgSecurityModel,
-                                   SnmpSecurityParameters params,
-                                   byte[] contextEngineID,
-                                   byte[] contextName,
-                                   byte[] data,
-                                   int dataLength,
-                                   byte[] outputBytes)
-        throws SnmpTooBigException, SnmpStatusException,
-               SnmpSecurityException;
-    /**
-     * Called when a request is received from the network. It handles authentication and privacy.
-     * <BR>The specified parameters are defined in RFC 2572 (see also the {@link com.sun.jmx.snmp.SnmpV3Message} class).
-     * @param cache The cache that has been created by calling <CODE>createSecurityCache</CODE> on this model.
-     * @param version The SNMP protocol version.
-     * @param msgID The current request id.
-     * @param msgMaxSize The message max size.
-     * @param msgFlags The message flags (reportable, Auth and Priv)
-     * @param msgSecurityModel This current security model.
-     * @param params The security parameters in a marshalled format. The informations contained in this array are model dependant.
-     * @param contextEngineID The context engine ID or null if encrypted.
-     * @param contextName The context name or null if encrypted.
-     * @param data The marshalled varbind list or null if encrypted
-     * @param encryptedPdu The encrypted pdu or null if not encrypted.
-     * @param decryptedPdu The decrypted pdu. If no decryption is to be done, the passed context engine ID, context name and data could be used to fill this object.
-     * @return The decoded security parameters.
-
-     */
-    public SnmpSecurityParameters
-        processIncomingRequest(SnmpSecurityCache cache,
-                               int version,
-                               int msgID,
-                               int msgMaxSize,
-                               byte msgFlags,
-                               int msgSecurityModel,
-                               byte[] params,
-                               byte[] contextEngineID,
-                               byte[] contextName,
-                               byte[] data,
-                               byte[] encryptedPdu,
-                               SnmpDecryptedPdu decryptedPdu)
-        throws SnmpStatusException, SnmpSecurityException;
- /**
-     * Called when a response is received from the network. It handles authentication and privacy.
-     * <BR>The specified parameters are defined in RFC 2572 (see also the {@link com.sun.jmx.snmp.SnmpV3Message} class).
-     * @param cache The cache that has been created by calling <CODE>createSecurityCache</CODE> on this model.
-     * @param version The SNMP protocol version.
-     * @param msgID The current request id.
-     * @param msgMaxSize The message max size.
-     * @param msgFlags The message flags (reportable, Auth and Priv)
-     * @param msgSecurityModel This current security model.
-     * @param params The security parameters in a marshalled format. The informations cointained in this array are model dependant.
-     * @param contextEngineID The context engine ID or null if encrypted.
-     * @param contextName The context name or null if encrypted.
-     * @param data The marshalled varbind list or null if encrypted
-     * @param encryptedPdu The encrypted pdu or null if not encrypted.
-     * @param decryptedPdu The decrypted pdu. If no decryption is to be done, the passed context engine ID, context name and data could be used to fill this object.
-     * @return The security parameters.
-
-     */
-    public SnmpSecurityParameters processIncomingResponse(SnmpSecurityCache cache,
-                                                          int version,
-                                                          int msgID,
-                                                          int msgMaxSize,
-                                                          byte msgFlags,
-                                                          int msgSecurityModel,
-                                                          byte[] params,
-                                                          byte[] contextEngineID,
-                                                          byte[] contextName,
-                                                          byte[] data,
-                                                          byte[] encryptedPdu,
-                                                          SnmpDecryptedPdu decryptedPdu)
-        throws SnmpStatusException, SnmpSecurityException;
-
-    /**
-     * Instantiate an <CODE>SnmpSecurityCache</CODE> that is dependant to the model implementation.
-     * @return The model dependant security cache.
-     */
-    public SnmpSecurityCache createSecurityCache();
-    /**
-     * Release the previously created cache.
-     * @param cache The security cache to release.
-     */
-    public void releaseSecurityCache(SnmpSecurityCache cache);
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/internal/SnmpSecuritySubSystem.java b/ojluni/src/main/java/com/sun/jmx/snmp/internal/SnmpSecuritySubSystem.java
deleted file mode 100755
index 06c4ecc..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/internal/SnmpSecuritySubSystem.java
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
- * Copyright (c) 2001, 2006, 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.jmx.snmp.internal;
-
-import com.sun.jmx.snmp.SnmpTooBigException;
-import com.sun.jmx.snmp.SnmpStatusException;
-import com.sun.jmx.snmp.SnmpUnknownSecModelException;
-import com.sun.jmx.snmp.SnmpSecurityException;
-import com.sun.jmx.snmp.SnmpSecurityParameters;
-
-/**
- * Security sub system interface. To allow engine integration, a security sub system must implement this interface.
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- */
-public interface SnmpSecuritySubSystem extends SnmpSubSystem {
-     /**
-     * Instantiates an <CODE>SnmpSecurityCache</CODE> that is dependant to the model implementation. This call is routed to the dedicated model according to the model ID.
-     * @param id The model ID.
-     * @return The model dependant security cache.
-     */
-    public SnmpSecurityCache createSecurityCache(int id) throws SnmpUnknownSecModelException;
-    /**
-     * To release the previously created cache. This call is routed to the dedicated model according to the model ID.
-     * @param id The model ID.
-     * @param cache The security cache to release.
-     */
-    public void releaseSecurityCache(int id,
-                                     SnmpSecurityCache cache) throws SnmpUnknownSecModelException;
-
-     /**
-     * Called when a request is to be sent to the network. It must be securized. This call is routed to the dedicated model according to the model ID.
-     * <BR>The specified parameters are defined in RFC 2572 (see also the {@link com.sun.jmx.snmp.SnmpV3Message} class).
-     * @param cache The cache that has been created by calling <CODE>createSecurityCache</CODE> on this model.
-     * @param version The SNMP protocol version.
-     * @param msgID The current request id.
-     * @param msgMaxSize The message max size.
-     * @param msgFlags The message flags (reportable, Auth and Priv).
-     * @param msgSecurityModel This current security model.
-     * @param params The security parameters that contain the model dependant parameters.
-     * @param contextEngineID The context engine ID.
-     * @param contextName The context name.
-     * @param data The marshalled varbind list
-     * @param dataLength The marshalled varbind list length.
-     * @param outputBytes The buffer to fill with securized request. This is a representation independant marshalled format. This buffer will be sent to the network.
-     * @return The marshalled byte number.
-     */
-    public int generateRequestMsg(SnmpSecurityCache cache,
-                                  int version,
-                                  int msgID,
-                                  int msgMaxSize,
-                                  byte msgFlags,
-                                  int msgSecurityModel,
-                                  SnmpSecurityParameters params,
-                                  byte[] contextEngineID,
-                                  byte[] contextName,
-                                  byte[] data,
-                                  int dataLength,
-                                  byte[] outputBytes)
-        throws SnmpTooBigException, SnmpStatusException, SnmpSecurityException, SnmpUnknownSecModelException;
-
-    /**
-     * Called when a response is to be sent to the network. It must be securized. This call is routed to the dedicated model according to the model ID.
-     * <BR>The specified parameters are defined in RFC 2572 (see also the {@link com.sun.jmx.snmp.SnmpV3Message} class).
-     * @param cache The cache that has been created by calling <CODE>createSecurityCache</CODE> on this model.
-     * @param version The SNMP protocol version.
-     * @param msgID The current request id.
-     * @param msgMaxSize The message max size.
-     * @param msgFlags The message flags (reportable, Auth and Priv).
-     * @param msgSecurityModel This current security model.
-     * @param params The security parameters that contain the model dependant parameters.
-     * @param contextEngineID The context engine ID.
-     * @param contextName The context name.
-     * @param data The marshalled varbind list
-     * @param dataLength The marshalled varbind list length.
-     * @param outputBytes The buffer to fill with securized request. This is a representation independant marshalled format. This buffer will be sent to the network.
-     * @return The marshalled byte number.
-     */
-    public int generateResponseMsg(SnmpSecurityCache cache,
-                                   int version,
-                                   int msgID,
-                                   int msgMaxSize,
-                                   byte msgFlags,
-                                   int msgSecurityModel,
-                                   SnmpSecurityParameters params,
-                                   byte[] contextEngineID,
-                                   byte[] contextName,
-                                   byte[] data,
-                                   int dataLength,
-                                   byte[] outputBytes)
-        throws SnmpTooBigException, SnmpStatusException,
-               SnmpSecurityException, SnmpUnknownSecModelException;
-      /**
-     * Called when a request is received from the network. It handles authentication and privacy. This call is routed to the dedicated model according to the model ID.
-     * <BR>The specified parameters are defined in RFC 2572 (see also the {@link com.sun.jmx.snmp.SnmpV3Message} class).
-     * @param cache The cache that has been created by calling <CODE>createSecurityCache</CODE> on this model.
-     * @param version The SNMP protocol version.
-     * @param msgID The current request id.
-     * @param msgMaxSize The message max size.
-     * @param msgFlags The message flags (reportable, Auth and Priv)
-     * @param msgSecurityModel This current security model.
-     * @param params The security parameters in a marshalled format. The informations cointained in this array are model dependant.
-     * @param contextEngineID The context engine ID or null if encrypted.
-     * @param contextName The context name or null if encrypted.
-     * @param data The marshalled varbind list or null if encrypted.
-     * @param encryptedPdu The encrypted pdu or null if not encrypted.
-     * @param decryptedPdu The decrypted pdu. If no decryption is to be done, the passed context engine ID, context name and data could be used to fill this object.
-     * @return The decoded security parameters.
-
-     */
-    public SnmpSecurityParameters
-        processIncomingRequest(SnmpSecurityCache cache,
-                               int version,
-                               int msgID,
-                               int msgMaxSize,
-                               byte msgFlags,
-                               int msgSecurityModel,
-                               byte[] params,
-                               byte[] contextEngineID,
-                               byte[] contextName,
-                               byte[] data,
-                               byte[] encryptedPdu,
-                               SnmpDecryptedPdu decryptedPdu)
-        throws SnmpStatusException, SnmpSecurityException, SnmpUnknownSecModelException;
-          /**
-     * Called when a response is received from the network. It handles authentication and privacy. This call is routed to the dedicated model according to the model ID.
-     * <BR>The specified parameters are defined in RFC 2572 (see also the {@link com.sun.jmx.snmp.SnmpV3Message} class).
-     * @param cache The cache that has been created by calling <CODE>createSecurityCache</CODE> on this model.
-     * @param version The SNMP protocol version.
-     * @param msgID The current request id.
-     * @param msgMaxSize The message max size.
-     * @param msgFlags The message flags (reportable, Auth and Priv).
-     * @param msgSecurityModel This current security model.
-     * @param params The security parameters in a marshalled format. The informations cointained in this array are model dependant.
-     * @param contextEngineID The context engine ID or null if encrypted.
-     * @param contextName The context name or null if encrypted.
-     * @param data The marshalled varbind list or null if encrypted.
-     * @param encryptedPdu The encrypted pdu or null if not encrypted.
-     * @param decryptedPdu The decrypted pdu. If no decryption is to be done, the passed context engine ID, context name and data could be used to fill this object.
-     * @return The security parameters.
-
-     */
-    public SnmpSecurityParameters processIncomingResponse(SnmpSecurityCache cache,
-                                                          int version,
-                                                          int msgID,
-                                                          int msgMaxSize,
-                                                          byte msgFlags,
-                                                          int msgSecurityModel,
-                                                          byte[] params,
-                                                          byte[] contextEngineID,
-                                                          byte[] contextName,
-                                                          byte[] data,
-                                                          byte[] encryptedPdu,
-                                                          SnmpDecryptedPdu decryptedPdu)
-        throws SnmpStatusException, SnmpSecurityException, SnmpUnknownSecModelException;
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/internal/SnmpSubSystem.java b/ojluni/src/main/java/com/sun/jmx/snmp/internal/SnmpSubSystem.java
deleted file mode 100755
index 8900c66..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/internal/SnmpSubSystem.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright (c) 2001, 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.
- */
-package com.sun.jmx.snmp.internal;
-
-import com.sun.jmx.snmp.SnmpEngine;
-import com.sun.jmx.snmp.SnmpUnknownModelException;
-import java.util.Hashtable;
-/**
- * SNMP sub system interface. To allow engine framework integration, a sub system must implement this interface. A sub system is a model manager. Every model is identified by an ID. A sub system can retrieve a previously registered model using this ID.
- * <P> Every sub system is associated to its SNMP engine.
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- */
-public interface SnmpSubSystem {
-    /**
-     * Returns the associated engine.
-     * @return The engine.
-     */
-    public SnmpEngine getEngine();
-
-    /**
-     * Adds a model to this sub system.
-     * @param id The model ID.
-     * @param model The model to add.
-     */
-    public void addModel(int id, SnmpModel model);
-
-    /**
-     * Removes a model from this sub system.
-     * @param id The model ID to remove.
-     * @return The removed model.
-     */
-    public SnmpModel removeModel(int id) throws SnmpUnknownModelException;
-
-    /**
-     * Gets a model from this sub system.
-     * @param id The model ID to get.
-     * @return The model.
-     */
-    public SnmpModel getModel(int id) throws SnmpUnknownModelException;
-
-    /**
-     * Returns the set of model Ids that have been registered within the sub system.
-     */
-    public int[] getModelIds();
-
-    /**
-     * Returns the set of model names that have been registered within the sub system.
-     */
-    public String[] getModelNames();
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/internal/SnmpTools.java b/ojluni/src/main/java/com/sun/jmx/snmp/internal/SnmpTools.java
deleted file mode 100755
index 4e9bef82..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/internal/SnmpTools.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * Copyright (c) 2001, 2006, 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.jmx.snmp.internal;
-
-import com.sun.jmx.snmp.SnmpDefinitions;
-/**
- * Utility class used to deal with various data representations.
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- * @since 1.5
- */
-public class SnmpTools implements SnmpDefinitions {
-
-    /**
-     * Translates a binary representation in an ASCII one. The returned string is an hexadecimal string starting with 0x.
-     * @param data Binary to translate.
-     * @return Translated binary.
-     */
-    static public String binary2ascii(byte[] data, int length)
-    {
-        if(data == null) return null;
-        final int size = (length * 2) + 2;
-        byte[] asciiData = new byte[size];
-        asciiData[0] = (byte) '0';
-        asciiData[1] = (byte) 'x';
-        for (int i=0; i < length; i++) {
-            int j = i*2;
-            int v = (data[i] & 0xf0);
-            v = v >> 4;
-            if (v < 10)
-                asciiData[j+2] = (byte) ('0' + v);
-            else
-                asciiData[j+2] = (byte) ('A' + (v - 10));
-            v = ((data[i] & 0xf));
-            if (v < 10)
-                asciiData[j+1+2] = (byte) ('0' + v);
-            else
-                asciiData[j+1+2] = (byte) ('A' + (v - 10));
-        }
-        return new String(asciiData);
-    }
-
-    /**
-     * Translates a binary representation in an ASCII one. The returned string is an hexadecimal string starting with 0x.
-     * @param data Binary to translate.
-     * @return Translated binary.
-     */
-    static public String binary2ascii(byte[] data)
-    {
-        return binary2ascii(data, data.length);
-    }
-    /**
-     * Translates a stringified representation in a binary one. The passed string is an hexadecimal one starting with 0x.
-     * @param str String to translate.
-     * @return Translated string.
-     */
-    static public byte[] ascii2binary(String str) {
-        if(str == null) return null;
-        String val = str.substring(2);
-
-        int size = val.length();
-        byte []buf = new byte[size/2];
-        byte []p = val.getBytes();
-
-        for(int i = 0; i < (size / 2); i++)
-        {
-            int j = i * 2;
-            byte v = 0;
-            if (p[j] >= '0' && p[j] <= '9') {
-                v = (byte) ((p[j] - '0') << 4);
-            }
-            else if (p[j] >= 'a' && p[j] <= 'f') {
-                v = (byte) ((p[j] - 'a' + 10) << 4);
-            }
-            else if (p[j] >= 'A' && p[j] <= 'F') {
-                v = (byte) ((p[j] - 'A' + 10) << 4);
-            }
-            else
-                throw new Error("BAD format :" + str);
-
-            if (p[j+1] >= '0' && p[j+1] <= '9') {
-                //System.out.println("ascii : " + p[j+1]);
-                v += (p[j+1] - '0');
-                //System.out.println("binary : " + v);
-            }
-            else if (p[j+1] >= 'a' && p[j+1] <= 'f') {
-                //System.out.println("ascii : " + p[j+1]);
-                v += (p[j+1] - 'a' + 10);
-                //System.out.println("binary : " + v+1);
-            }
-            else if (p[j+1] >= 'A' && p[j+1] <= 'F') {
-                //System.out.println("ascii : " + p[j+1]);
-                v += (p[j+1] - 'A' + 10);
-                //System.out.println("binary : " + v);
-            }
-            else
-                throw new Error("BAD format :" + str);
-
-            buf[i] = v;
-        }
-        return buf;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/internal/package.html b/ojluni/src/main/java/com/sun/jmx/snmp/internal/package.html
deleted file mode 100755
index ae5a268..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/internal/package.html
+++ /dev/null
@@ -1,34 +0,0 @@
-<HTML>
-<HEAD>
-<!--
- 
-Copyright (c) 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.
--->
-</HEAD>
-<BODY>
-    Public internal SNMP classes. These classes are not exposed by the API.
-<p><b>This API is a Sun Microsystems internal API  and is subject 
-   to change without notice.</b></p>
-</BODY>
-</HTML>
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/mpm/SnmpMsgTranslator.java b/ojluni/src/main/java/com/sun/jmx/snmp/mpm/SnmpMsgTranslator.java
deleted file mode 100755
index dc8c2c2..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/mpm/SnmpMsgTranslator.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Copyright (c) 2001, 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.
- */
-package com.sun.jmx.snmp.mpm;
-
-import com.sun.jmx.snmp.SnmpSecurityParameters;
-import com.sun.jmx.snmp.SnmpMsg;
-/**
- * The translator interface is implemented by classes dealing with a specific SNMP protocol version. SnmpMsgTranslator are used in conjonction with SnmpMsgProcessingModel implementations.
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- * @since 1.5
- */
-public interface SnmpMsgTranslator {
-    /**
-     * Returns the request or message Id contained in the passed message. The message is a generic one that is narrowed in the object implementing this interface.
-     */
-    public int getMsgId(SnmpMsg msg);
-    /**
-     * Returns the response max message size. The message is a generic one that is narrowed in the object implementing this interface.
-     */
-    public int getMsgMaxSize(SnmpMsg msg);
-    /**
-     * Returns the message flags. The message is a generic one that is narrowed in the object implementing this interface.
-     */
-    public byte getMsgFlags(SnmpMsg msg);
-    /**
-     * Returns the message security model. The message is a generic one that is narrowed in the object implementing this interface.
-     */
-    public int getMsgSecurityModel(SnmpMsg msg);
-    /**
-     * Returns the message security level. The message is a generic one that is narrowed in the object implementing this interface.
-     */
-    public int getSecurityLevel(SnmpMsg msg);
-     /**
-     * Returns an encoded representation of security parameters contained in the passed msg. The message is a generic one that is narrowed in the object implementing this interface.
-     */
-    public byte[] getFlatSecurityParameters(SnmpMsg msg);
-    /**
-     * Returns the message security parameters. The message is a generic one that is narrowed in the object implementing this interface.
-     */
-    public SnmpSecurityParameters getSecurityParameters(SnmpMsg msg);
-    /**
-     * Returns the message context Engine Id. The message is a generic one that is narrowed in the object implementing this interface.
-     */
-    public byte[] getContextEngineId(SnmpMsg msg);
-    /**
-     * Returns the message context name. The message is a generic one that is narrowed in the object implementing this interface.
-     */
-    public byte[] getContextName(SnmpMsg msg);
-    /**
-     * Returns the raw message context name. Raw mean as it is received from the network, without translation. It can be useful when some data are piggy backed in the context name.The message is a generic one that is narrowed in the object implementing this interface.
-     */
-    public byte[] getRawContextName(SnmpMsg msg);
-    /**
-     * Returns the message accesscontext name. This access context name is used when dealing with access rights (eg: community for V1/V2 or context name for V3).The message is a generic one that is narrowed in the object implementing this interface.
-     */
-    public byte[] getAccessContext(SnmpMsg msg);
-    /**
-     * Returns the message encrypted pdu or null if no encryption. The message is a generic one that is narrowed in the object implementing this interface.
-     */
-    public byte[] getEncryptedPdu(SnmpMsg msg);
-    /**
-     * Set the context name of the passed message.
-     */
-    public void setContextName(SnmpMsg req, byte[] contextName);
-     /**
-     * Set the context engine Id of the passed message.
-     */
-    public void setContextEngineId(SnmpMsg req, byte[] contextEngineId);
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/mpm/package.html b/ojluni/src/main/java/com/sun/jmx/snmp/mpm/package.html
deleted file mode 100755
index a8eb1e4..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/mpm/package.html
+++ /dev/null
@@ -1,34 +0,0 @@
-<HTML>
-<HEAD>
-<!--
- 
-Copyright (c) 2001, 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.
--->
-</HEAD>
-<BODY>
-Provides the classes which implement the <B>Message Processing Models</B> for SNMP version 1, version 2c and version 3. 
-<p><b>This API is a Sun Microsystems internal API  and is subject 
-   to change without notice.</b></p>
-</BODY>
-</HTML>
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/package.html b/ojluni/src/main/java/com/sun/jmx/snmp/package.html
deleted file mode 100755
index cdef83d..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/package.html
+++ /dev/null
@@ -1,34 +0,0 @@
-<HTML>
-<HEAD>
-<!--
- 
-Copyright (c) 1999, 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.
--->
-</HEAD>
-<BODY>
-    Provides the core classes which implement <B>common SNMP data types and services</B>.
-<p><b>This API is a Sun Microsystems internal API  and is subject 
-   to change without notice.</b></p>
-</BODY>
-</HTML>
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/tasks/Task.java b/ojluni/src/main/java/com/sun/jmx/snmp/tasks/Task.java
deleted file mode 100755
index 422bf38..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/tasks/Task.java
+++ /dev/null
@@ -1,67 +0,0 @@
-// NPCTE fix for bugId 4510777, esc 532372, MR October 2001
-// file Task.java created for this bug fix
-/*
- * 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.
- */
-package com.sun.jmx.snmp.tasks;
-
-/**
- * This interface is implemented by objects that can be executed
- * by a {@link com.sun.jmx.snmp.tasks.TaskServer}.
- * <p>A <code>Task</code> object implements two methods:
- * <ul><li><code>public void run(): </code> from
- *               {@link java.lang.Runnable}</li>
- * <ul>This method is called by the {@link com.sun.jmx.snmp.tasks.TaskServer}
- *     when the task is executed.</ul>
- * <li><code>public void cancel(): </code></li>
- * <ul>This method is called by the {@link com.sun.jmx.snmp.tasks.TaskServer}
- *     if the <code>TaskServer</code> is stopped before the
- *     <code>Task</code> is executed.</ul>
- * </ul>
- * An implementation of {@link com.sun.jmx.snmp.tasks.TaskServer} shall call
- * either <code>run()</code> or <code>cancel()</code>.
- * Whether the task is executed synchronously in the current
- * thread (when calling <code>TaskServer.submitTask()</code> or in a new
- * thread dedicated to the task, or in a daemon thread, depends on the
- * implementation of the <code>TaskServer</code> through which the task
- * is executed.
- * <p>The implementation of <code>Task</code> must not make any
- * assumption on the implementation of the <code>TaskServer</code> through
- * which it will be executed.
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- * @see com.sun.jmx.snmp.tasks.TaskServer
- *
- * @since 1.5
- **/
-public interface Task extends Runnable {
-    /**
-     * Cancel the submitted task.
-     * The implementation of this method is Task-implementation dependent.
-     * It could involve some message logging, or even call the run() method.
-     * Note that only one of run() or cancel() will be called - and exactly
-     * one.
-     **/
-    public void cancel();
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/tasks/TaskServer.java b/ojluni/src/main/java/com/sun/jmx/snmp/tasks/TaskServer.java
deleted file mode 100755
index 4e5fdf8..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/tasks/TaskServer.java
+++ /dev/null
@@ -1,57 +0,0 @@
-// NPCTE fix for bugId 4510777, esc 532372, MR October 2001
-// file TaskServer.java created for this bug fix
-
-/*
- * 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.
- */
-
-
-package com.sun.jmx.snmp.tasks;
-
-/**
- * This interface is implemented by objects that are able to execute
- * tasks. Whether the task is executed in the client thread or in another
- * thread depends on the TaskServer implementation.
- *
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- * @see com.sun.jmx.snmp.tasks.Task
- *
- * @since 1.5
- **/
-public interface TaskServer {
-    /**
-     * Submit a task to be executed.
-     * Once a task is submitted, it is guaranteed that either
-     * {@link com.sun.jmx.snmp.tasks.Task#run() task.run()} or
-     * {@link com.sun.jmx.snmp.tasks.Task#cancel() task.cancel()} will be called.
-     * <p>Whether the task is executed in the client thread (e.g.
-     * <code>public void submitTask(Task task) { task.run(); }</code>) or in
-     * another thread (e.g. <code>
-     * public void submitTask(Task task) { new Thrad(task).start(); }</code>)
-     * depends on the TaskServer implementation.
-     * @param task The task to be executed.
-     **/
-    public void submitTask(Task task);
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/tasks/ThreadService.java b/ojluni/src/main/java/com/sun/jmx/snmp/tasks/ThreadService.java
deleted file mode 100755
index b1c0534..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/tasks/ThreadService.java
+++ /dev/null
@@ -1,246 +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.
- */
-
-package com.sun.jmx.snmp.tasks;
-
-import java.util.ArrayList;
-import com.sun.jmx.snmp.tasks.Task;
-import com.sun.jmx.snmp.tasks.TaskServer;
-
-/**
- * This class implements a {@link com.sun.jmx.snmp.tasks.TaskServer} over
- * a thread pool.
- * <p><b>This API is a Sun Microsystems internal API  and is subject
- * to change without notice.</b></p>
- **/
-public class ThreadService implements TaskServer {
-
-    public ThreadService(int threadNumber) {
-        if (threadNumber <= 0) {
-            throw new IllegalArgumentException("The thread number should bigger than zero.");
-        }
-
-        minThreads = threadNumber;
-        threadList = new ExecutorThread[threadNumber];
-
-        priority = Thread.currentThread().getPriority();
-        cloader = Thread.currentThread().getContextClassLoader();
-
-    }
-
-// public methods
-// --------------
-
-    /**
-     * Submit a task to be executed.
-     * Once a task is submitted, it is guaranteed that either
-     * {@link com.sun.jmx.snmp.tasks.Task#run() task.run()} or
-     * {@link com.sun.jmx.snmp.tasks.Task#cancel() task.cancel()} will be called.
-     * This implementation of TaskServer uses a thread pool to execute
-     * the submitted tasks.
-     * @param task The task to be executed.
-     * @exception IllegalArgumentException if the submitted task is null.
-     **/
-    public void submitTask(Task task) throws IllegalArgumentException {
-        submitTask((Runnable)task);
-    }
-
-    /**
-     * Submit a task to be executed.
-     * This implementation of TaskServer uses a thread pool to execute
-     * the submitted tasks.
-     * @param task The task to be executed.
-     * @exception IllegalArgumentException if the submitted task is null.
-     **/
-    public void submitTask(Runnable task) throws IllegalArgumentException {
-        stateCheck();
-
-        if (task == null) {
-            throw new IllegalArgumentException("No task specified.");
-        }
-
-        synchronized(jobList) {
-            jobList.add(jobList.size(), task);
-
-            jobList.notify();
-        }
-
-        createThread();
-    }
-
-    public Runnable removeTask(Runnable task) {
-        stateCheck();
-
-        Runnable removed = null;
-        synchronized(jobList) {
-            int lg = jobList.indexOf(task);
-            if (lg >= 0) {
-                removed = jobList.remove(lg);
-            }
-        }
-        if (removed != null && removed instanceof Task)
-            ((Task) removed).cancel();
-        return removed;
-    }
-
-    public void removeAll() {
-        stateCheck();
-
-        final Object[] jobs;
-        synchronized(jobList) {
-            jobs = jobList.toArray();
-            jobList.clear();
-        }
-        final int len = jobs.length;
-        for (int i=0; i<len ; i++) {
-            final Object o = jobs[i];
-            if (o!= null && o instanceof Task) ((Task)o).cancel();
-        }
-    }
-
-    // to terminate
-    public void terminate() {
-
-        if (terminated == true) {
-            return;
-        }
-
-        terminated = true;
-
-        synchronized(jobList) {
-            jobList.notifyAll();
-        }
-
-        removeAll();
-
-        for (int i=0; i<currThreds; i++) {
-            try {
-                threadList[i].interrupt();
-            } catch (Exception e) {
-                // TODO
-            }
-        }
-
-        threadList = null;
-    }
-
-// private classes
-// ---------------
-
-    // A thread used to execute jobs
-    //
-    private class ExecutorThread extends Thread {
-        public ExecutorThread() {
-            super(threadGroup, "ThreadService-"+counter++);
-            setDaemon(true);
-
-            // init
-            this.setPriority(priority);
-            this.setContextClassLoader(cloader);
-
-            idle++;
-        }
-
-        public void run() {
-
-            while(!terminated) {
-                Runnable job = null;
-
-                synchronized(jobList) {
-                    if (jobList.size() > 0) {
-                        job = jobList.remove(0);
-                        if (jobList.size() > 0) {
-                            jobList.notify();
-                        }
-
-                    } else {
-                        try {
-                            jobList.wait();
-                        } catch (InterruptedException ie) {
-                            // terminated ?
-                        } finally {
-                        }
-                        continue;
-                    }
-                }
-                if (job != null) {
-                    try {
-                        idle--;
-                        job.run();
-                    } catch (Exception e) {
-                        // TODO
-                        e.printStackTrace();
-                    } finally {
-                        idle++;
-                    }
-                }
-
-                // re-init
-                this.setPriority(priority);
-                this.interrupted();
-                this.setContextClassLoader(cloader);
-            }
-        }
-    }
-
-// private methods
-    private void stateCheck() throws IllegalStateException {
-        if (terminated) {
-            throw new IllegalStateException("The thread service has been terminated.");
-        }
-    }
-
-    private void createThread() {
-        if (idle < 1) {
-            synchronized(threadList) {
-                if (jobList.size() > 0 && currThreds < minThreads) {
-                    ExecutorThread et = new ExecutorThread();
-                    et.start();
-                    threadList[currThreds++] = et;
-                }
-            }
-        }
-    }
-
-
-// protected or private variables
-// ------------------------------
-    private ArrayList<Runnable> jobList = new ArrayList<Runnable>(0);
-
-    private ExecutorThread[] threadList;
-    private int minThreads = 1;
-    private int currThreds = 0;
-    private int idle = 0;
-
-    private boolean terminated = false;
-    private int priority;
-    private ThreadGroup threadGroup = new ThreadGroup("ThreadService");
-    private ClassLoader cloader;
-
-    private static long counter = 0;
-
-    private int addedJobs = 1;
-    private int doneJobs = 1;
-}
diff --git a/ojluni/src/main/java/com/sun/jmx/snmp/tasks/package.html b/ojluni/src/main/java/com/sun/jmx/snmp/tasks/package.html
deleted file mode 100755
index 3e10a9d..0000000
--- a/ojluni/src/main/java/com/sun/jmx/snmp/tasks/package.html
+++ /dev/null
@@ -1,34 +0,0 @@
-<HTML>
-<HEAD>
-<!--
- 
-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.
--->
-</HEAD>
-<BODY>
-Provides some <B>common</B> classes to control JDMK threading.
-<p><b>This API is a Sun Microsystems internal API  and is subject 
-   to change without notice.</b></p>
-</BODY>
-</HTML>
diff --git a/ojluni/src/main/java/com/sun/jndi/cosnaming/CNBindingEnumeration.java b/ojluni/src/main/java/com/sun/jndi/cosnaming/CNBindingEnumeration.java
deleted file mode 100755
index 2d5121d..0000000
--- a/ojluni/src/main/java/com/sun/jndi/cosnaming/CNBindingEnumeration.java
+++ /dev/null
@@ -1,236 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-package com.sun.jndi.cosnaming;
-
-import javax.naming.*;
-import javax.naming.spi.NamingManager;
-
-import java.util.NoSuchElementException;
-import java.util.Hashtable;
-
-import org.omg.CosNaming.*;
-import org.omg.CosNaming.NamingContextPackage.*;
-import org.omg.CORBA.*;
-
-/**
-  * Implements the JNDI NamingEnumeration interface for COS
-  * Naming. Gets hold of a list of bindings from the COS Naming Server
-  * and allows the client to iterate through them.
-  *
-  * @author Raj Krishnamurthy
-  * @author Rosanna Lee
-  */
-
-final class CNBindingEnumeration implements NamingEnumeration {
-
-    private static final int DEFAULT_BATCHSIZE = 100;
-    private BindingListHolder _bindingList; // list of bindings
-    private BindingIterator _bindingIter;   // iterator for getting list of bindings
-    private int counter;                    // pointer in _bindingList
-    private int batchsize = DEFAULT_BATCHSIZE;  // how many to ask for each time
-    private CNCtx _ctx;                     // ctx to list
-    private Hashtable _env;                 // environment for getObjectInstance
-    private boolean more = false;           // iterator done?
-    private boolean isLookedUpCtx = false;  // iterating on a context beneath this context ?
-
-  /**
-    * Creates a CNBindingEnumeration object.
-    * @param ctx Context to enumerate
-    */
-  CNBindingEnumeration(CNCtx ctx, boolean isLookedUpCtx, Hashtable env) {
-    // Get batch size to use
-    String batch = (env != null ?
-        (String)env.get(javax.naming.Context.BATCHSIZE) : null);
-    if (batch != null) {
-        try {
-            batchsize = Integer.parseInt(batch);
-        } catch (NumberFormatException e) {
-            throw new IllegalArgumentException("Batch size not numeric: " + batch);
-        }
-    }
-    _ctx = ctx;
-    _ctx.incEnumCount();
-    this.isLookedUpCtx = isLookedUpCtx;
-    _env = env;
-    _bindingList = new BindingListHolder();
-    BindingIteratorHolder _bindingIterH = new BindingIteratorHolder();
-
-    // Perform listing and request that bindings be returned in _bindingIter
-    // Upon return,_bindingList returns a zero length list
-    _ctx._nc.list(0, _bindingList, _bindingIterH);
-
-    _bindingIter = _bindingIterH.value;
-
-    // Get first batch using _bindingIter
-    if (_bindingIter != null) {
-        more = _bindingIter.next_n(batchsize, _bindingList);
-    } else {
-        more = false;
-    }
-    counter = 0;
-  }
-
-  /**
-    * Returns the next binding in the list.
-    * @exception NamingException any naming exception.
-    */
-
-  public java.lang.Object next() throws NamingException {
-      if (more && counter >= _bindingList.value.length) {
-          getMore();
-      }
-      if (more && counter < _bindingList.value.length) {
-          org.omg.CosNaming.Binding bndg = _bindingList.value[counter];
-          counter++;
-          return mapBinding(bndg);
-      } else {
-          throw new NoSuchElementException();
-      }
-  }
-
-
-  /**
-    * Returns true or false depending on whether there are more bindings.
-    * @return boolean value
-    */
-
-  public boolean hasMore() throws NamingException {
-      // If there's more, check whether current bindingList has been exhausted,
-      // and if so, try to get more.
-      // If no more, just say so.
-      return more ? (counter < _bindingList.value.length || getMore()) : false;
-  }
-
-  /**
-    * Returns true or false depending on whether there are more bindings.
-    * Need to define this to satisfy the Enumeration api requirement.
-    * @return boolean value
-    */
-
-  public boolean hasMoreElements() {
-      try {
-          return hasMore();
-      } catch (NamingException e) {
-          return false;
-      }
-  }
-
-  /**
-    * Returns the next binding in the list.
-    * @exception NoSuchElementException Thrown when the end of the
-    * list is reached.
-    */
-
-    public java.lang.Object nextElement() {
-        try {
-            return next();
-        } catch (NamingException ne) {
-            throw new NoSuchElementException();
-        }
-  }
-
-    public void close() throws NamingException {
-        more = false;
-        if (_bindingIter != null) {
-            _bindingIter.destroy();
-            _bindingIter = null;
-        }
-        if (_ctx != null) {
-            _ctx.decEnumCount();
-
-            /**
-             * context was obtained by CNCtx, the user doesn't have a handle to
-             * it, close it as we are done enumerating through the context
-             */
-            if (isLookedUpCtx) {
-                _ctx.close();
-            }
-            _ctx = null;
-        }
-    }
-
-    protected void finalize() {
-        try {
-            close();
-        } catch (NamingException e) {
-            // ignore failures
-        }
-    }
-
-    /**
-     * Get the next batch using _bindingIter. Update the 'more' field.
-     */
-    private boolean getMore() throws NamingException {
-        try {
-            more = _bindingIter.next_n(batchsize, _bindingList);
-            counter = 0; // reset
-        } catch (Exception e) {
-            more = false;
-            NamingException ne = new NamingException(
-                "Problem getting binding list");
-            ne.setRootCause(e);
-            throw ne;
-        }
-        return more;
-    }
-
-  /**
-    * Constructs a JNDI Binding object from the COS Naming binding
-    * object.
-    * @exception NameNotFound No objects under the name.
-    * @exception CannotProceed Unable to obtain a continuation context
-    * @exception InvalidName Name not understood.
-    * @exception NamingException One of the above.
-    */
-
-    private javax.naming.Binding mapBinding(org.omg.CosNaming.Binding bndg)
-                throws NamingException {
-        java.lang.Object obj = _ctx.callResolve(bndg.binding_name);
-
-        Name cname = CNNameParser.cosNameToName(bndg.binding_name);
-
-        try {
-            obj = NamingManager.getObjectInstance(obj, cname, _ctx, _env);
-        } catch (NamingException e) {
-            throw e;
-        } catch (Exception e) {
-            NamingException ne = new NamingException(
-                        "problem generating object using object factory");
-            ne.setRootCause(e);
-            throw ne;
-        }
-
-        // Use cname.toString() instead of bindingName because the name
-        // in the binding should be a composite name
-        String cnameStr = cname.toString();
-        javax.naming.Binding jbndg = new javax.naming.Binding(cnameStr, obj);
-
-        NameComponent[] comps = _ctx.makeFullName(bndg.binding_name);
-        String fullName = CNNameParser.cosNameToInsString(comps);
-        jbndg.setNameInNamespace(fullName);
-        return jbndg;
-  }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/cosnaming/CNCtx.java b/ojluni/src/main/java/com/sun/jndi/cosnaming/CNCtx.java
deleted file mode 100755
index be3819a..0000000
--- a/ojluni/src/main/java/com/sun/jndi/cosnaming/CNCtx.java
+++ /dev/null
@@ -1,1156 +0,0 @@
-/*
- * Copyright (c) 1999, 2012, 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.jndi.cosnaming;
-
-import javax.naming.*;
-import javax.naming.spi.NamingManager;
-import javax.naming.spi.ResolveResult;
-
-import java.util.Hashtable;
-import java.util.Vector;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.BufferedReader;
-import java.io.IOException;
-
-import org.omg.CosNaming.*;
-import org.omg.CosNaming.NamingContextPackage.*;
-import org.omg.CORBA.*;
-
-import com.sun.jndi.toolkit.corba.CorbaUtils;
-
-// Needed for creating default ORB
-import java.applet.Applet;
-
-/**
-  * Provides a bridge to the CosNaming server provided by
-  * JavaIDL. This class provides the InitialContext from CosNaming.
-  *
-  * @author Raj Krishnamurthy
-  * @author Rosanna Lee
-  */
-
-public class CNCtx implements javax.naming.Context {
-
-    private final static boolean debug = false;
-
-    /*
-     * Implement one shared ORB among all CNCtx.  However, there is a public constructor
-     * accepting an ORB, so we need the option of using a given ORB.
-     */
-    private static ORB _defaultOrb;
-    ORB _orb;                   // used by ExceptionMapper and RMI/IIOP factory
-    public NamingContext _nc;   // public for accessing underlying NamingContext
-
-    private synchronized static ORB getDefaultOrb() {
-        if (_defaultOrb == null) {
-            _defaultOrb = CorbaUtils.getOrb(null, -1,
-               new Hashtable<String, java.lang.Object>());
-        }
-        return _defaultOrb;
-    }
-
-    private NameComponent[] _name = null;
-
-    Hashtable _env; // used by ExceptionMapper
-    static final CNNameParser parser = new CNNameParser();
-
-    private static final String FED_PROP = "com.sun.jndi.cosnaming.federation";
-    boolean federation = false;
-
-    // Reference counter for tracking _orb references
-    OrbReuseTracker orbTracker = null;
-    int enumCount;
-    boolean isCloseCalled = false;
-
-    /**
-      * Create a CNCtx object. Gets the initial naming
-      * reference for the COS Naming Service from the ORB.
-      * The ORB can be passed in via the java.naming.corba.orb property
-      * or be created using properties in the environment properties.
-      * @param env Environment properties for initializing name service.
-      * @exception NamingException Cannot initialize ORB or naming context.
-      */
-    CNCtx(Hashtable env) throws NamingException {
-        if (env != null) {
-            env = (Hashtable) env.clone();
-        }
-        _env = env;
-        federation = "true".equals(env != null ? env.get(FED_PROP) : null);
-        initOrbAndRootContext(env);
-    }
-
-    private CNCtx() {
-    }
-
-    /**
-     * This method is used by the iiop and iiopname URL Context factories.
-     */
-    public static ResolveResult createUsingURL(String url, Hashtable env)
-    throws NamingException {
-        CNCtx ctx = new CNCtx();
-        if (env != null) {
-            env = (Hashtable) env.clone();
-        }
-        ctx._env = env;
-        String rest = ctx.initUsingUrl(
-            env != null ?
-                (org.omg.CORBA.ORB) env.get("java.naming.corba.orb")
-                : null,
-            url, env);
-
-        // rest is the INS name
-        // Return the parsed form to prevent subsequent lookup
-        // from parsing the string as a composite name
-        // The caller should be aware that a toString() of the name,
-        // which came from the environment will yield its INS syntax,
-        // rather than a composite syntax
-        return new ResolveResult(ctx, parser.parse(rest));
-    }
-
-    /**
-      * Creates a CNCtx object which supports the javax.naming
-      * apis given a COS Naming Context object.
-      * @param orb The ORB used by this context
-      * @param tracker The ORB reuse tracker for tracking references to the
-      *  orb object
-      * @param nctx The COS NamingContext object associated with this context
-      * @param name The name of this context relative to the root
-      */
-
-    CNCtx(ORB orb, OrbReuseTracker tracker, NamingContext nctx, Hashtable env,
-                        NameComponent[]name)
-        throws NamingException {
-            if (orb == null || nctx == null)
-                throw new ConfigurationException(
-                    "Must supply ORB or NamingContext");
-            if (orb != null) {
-                _orb = orb;
-            } else {
-                _orb = getDefaultOrb();
-            }
-            _nc = nctx;
-            _env = env;
-            _name = name;
-            federation = "true".equals(env != null ? env.get(FED_PROP) : null);
-    }
-
-    NameComponent[] makeFullName(NameComponent[] child) {
-        if (_name == null || _name.length == 0) {
-            return child;
-        }
-        NameComponent[] answer = new NameComponent[_name.length+child.length];
-
-        // parent
-        System.arraycopy(_name, 0, answer, 0, _name.length);
-
-        // child
-        System.arraycopy(child, 0, answer, _name.length, child.length);
-        return answer;
-    }
-
-
-    public String getNameInNamespace() throws NamingException {
-        if (_name == null || _name.length == 0) {
-            return "";
-        }
-        return CNNameParser.cosNameToInsString(_name);
-    }
-
-    /**
-     * These are the URL schemes that need to be processed.
-     * IOR and corbaloc URLs can be passed directly to ORB.string_to_object()
-     */
-    private static boolean isCorbaUrl(String url) {
-        return url.startsWith("iiop://")
-            || url.startsWith("iiopname://")
-            || url.startsWith("corbaname:")
-            ;
-    }
-
-    /**
-      * Initializes the COS Naming Service.
-      * This method initializes the three instance fields:
-      * _nc : The root naming context.
-      * _orb: The ORB to use for connecting RMI/IIOP stubs and for
-      *       getting the naming context (_nc) if one was not specified
-      *       explicitly via PROVIDER_URL.
-      * _name: The name of the root naming context.
-      *<p>
-      * _orb is obtained from java.naming.corba.orb if it has been set.
-      * Otherwise, _orb is created using the host/port from PROVIDER_URL
-      * (if it contains an "iiop" or "iiopname" URL), or from initialization
-      * properties specified in env.
-      *<p>
-      * _nc is obtained from the IOR stored in PROVIDER_URL if it has been
-      * set and does not contain an "iiop" or "iiopname" URL. It can be
-      * a stringified IOR, "corbaloc" URL, "corbaname" URL,
-      * or a URL (such as file/http/ftp) to a location
-      * containing a stringified IOR. If PROVIDER_URL has not been
-      * set in this way, it is obtained from the result of
-      *     ORB.resolve_initial_reference("NameService");
-      *<p>
-      * _name is obtained from the "iiop", "iiopname", or "corbaname" URL.
-      * It is the empty name by default.
-      *
-      * @param env Environment The possibly null environment.
-      * @exception NamingException When an error occurs while initializing the
-      * ORB or the naming context.
-      */
-    private void initOrbAndRootContext(Hashtable env) throws NamingException {
-        org.omg.CORBA.ORB inOrb = null;
-        String ncIor = null;
-
-        if (inOrb == null && env != null) {
-            inOrb = (org.omg.CORBA.ORB) env.get("java.naming.corba.orb");
-        }
-
-        if (inOrb == null)
-            inOrb = getDefaultOrb(); // will create a default ORB if none exists
-
-        // Extract PROVIDER_URL from environment
-        String provUrl = null;
-        if (env != null) {
-            provUrl = (String)env.get(javax.naming.Context.PROVIDER_URL);
-        }
-
-        if (provUrl != null && !isCorbaUrl(provUrl)) {
-            // Initialize the root naming context by using the IOR supplied
-            // in the PROVIDER_URL
-            ncIor = getStringifiedIor(provUrl);
-            setOrbAndRootContext(inOrb, ncIor);
-        } else if (provUrl != null) {
-            // Initialize the root naming context by using the URL supplied
-            // in the PROVIDER_URL
-            String insName = initUsingUrl(inOrb, provUrl, env);
-
-            // If name supplied in URL, resolve it to a NamingContext
-            if (insName.length() > 0) {
-                _name = parser.nameToCosName(parser.parse(insName));
-                try {
-                    org.omg.CORBA.Object obj = _nc.resolve(_name);
-                    _nc = NamingContextHelper.narrow(obj);
-                    if (_nc == null) {
-                        throw new ConfigurationException(insName +
-                            " does not name a NamingContext");
-                    }
-                } catch (org.omg.CORBA.BAD_PARAM e) {
-                    throw new ConfigurationException(insName +
-                        " does not name a NamingContext");
-                } catch (Exception e) {
-                    throw ExceptionMapper.mapException(e, this, _name);
-                }
-            }
-        } else {
-            // No PROVIDER_URL supplied; initialize using defaults
-            if (debug) {
-                System.err.println("Getting default ORB: " + inOrb + env);
-            }
-            setOrbAndRootContext(inOrb, (String)null);
-        }
-    }
-
-
-    private String initUsingUrl(ORB orb, String url, Hashtable env)
-        throws NamingException {
-        if (url.startsWith("iiop://") || url.startsWith("iiopname://")) {
-            return initUsingIiopUrl(orb, url, env);
-        } else {
-            return initUsingCorbanameUrl(orb, url, env);
-        }
-    }
-
-    /**
-     * Handles "iiop" and "iiopname" URLs (INS 98-10-11)
-     */
-    private String initUsingIiopUrl(ORB defOrb, String url, Hashtable env)
-        throws NamingException {
-
-        if (defOrb == null)
-            defOrb = getDefaultOrb();
-
-        try {
-            IiopUrl parsedUrl = new IiopUrl(url);
-
-            Vector addrs = parsedUrl.getAddresses();
-            IiopUrl.Address addr;
-            NamingException savedException = null;
-
-            for (int i = 0; i < addrs.size(); i++) {
-                addr = (IiopUrl.Address)addrs.elementAt(i);
-
-                try {
-                    try {
-                        String tmpUrl = "corbaloc:iiop:" + addr.host
-                            + ":" + addr.port + "/NameService";
-                        if (debug) {
-                            System.err.println("Using url: " + tmpUrl);
-                        }
-                        org.omg.CORBA.Object rootCtx =
-                            defOrb.string_to_object(tmpUrl);
-                        setOrbAndRootContext(defOrb, rootCtx);
-                        return parsedUrl.getStringName();
-                    } catch (Exception e) {} // keep going
-
-                    // Get ORB
-                    if (debug) {
-                        System.err.println("Getting ORB for " + addr.host
-                            + " and port " + addr.port);
-                    }
-
-                    // Assign to fields
-                    setOrbAndRootContext(defOrb, (String)null);
-                    return parsedUrl.getStringName();
-
-                } catch (NamingException ne) {
-                    savedException = ne;
-                }
-            }
-            if (savedException != null) {
-                throw savedException;
-            } else {
-                throw new ConfigurationException("Problem with URL: " + url);
-            }
-        } catch (MalformedURLException e) {
-            throw new ConfigurationException(e.getMessage());
-        }
-    }
-
-    /**
-     * Initializes using "corbaname" URL (INS 99-12-03)
-     */
-    private String initUsingCorbanameUrl(ORB orb, String url, Hashtable env)
-        throws NamingException {
-
-        if (orb == null)
-                orb = getDefaultOrb();
-
-        try {
-            CorbanameUrl parsedUrl = new CorbanameUrl(url);
-
-            String corbaloc = parsedUrl.getLocation();
-            String cosName = parsedUrl.getStringName();
-
-            setOrbAndRootContext(orb, corbaloc);
-
-            return parsedUrl.getStringName();
-        } catch (MalformedURLException e) {
-            throw new ConfigurationException(e.getMessage());
-        }
-    }
-
-    private void setOrbAndRootContext(ORB orb, String ncIor)
-        throws NamingException {
-        _orb = orb;
-        try {
-            org.omg.CORBA.Object ncRef;
-            if (ncIor != null) {
-                if (debug) {
-                    System.err.println("Passing to string_to_object: " + ncIor);
-                }
-                ncRef = _orb.string_to_object(ncIor);
-            } else {
-                ncRef = _orb.resolve_initial_references("NameService");
-            }
-            if (debug) {
-                System.err.println("Naming Context Ref: " + ncRef);
-            }
-            _nc = NamingContextHelper.narrow(ncRef);
-            if (_nc == null) {
-                if (ncIor != null) {
-                    throw new ConfigurationException(
-                        "Cannot convert IOR to a NamingContext: " + ncIor);
-                } else {
-                    throw new ConfigurationException(
-"ORB.resolve_initial_references(\"NameService\") does not return a NamingContext");
-                }
-            }
-        } catch (org.omg.CORBA.ORBPackage.InvalidName in) {
-            NamingException ne =
-                new ConfigurationException(
-"COS Name Service not registered with ORB under the name 'NameService'");
-            ne.setRootCause(in);
-            throw ne;
-        } catch (org.omg.CORBA.COMM_FAILURE e) {
-            NamingException ne =
-                new CommunicationException("Cannot connect to ORB");
-            ne.setRootCause(e);
-            throw ne;
-        } catch (org.omg.CORBA.BAD_PARAM e) {
-            NamingException ne = new ConfigurationException(
-                "Invalid URL or IOR: " + ncIor);
-            ne.setRootCause(e);
-            throw ne;
-        } catch (org.omg.CORBA.INV_OBJREF e) {
-            NamingException ne = new ConfigurationException(
-                "Invalid object reference: " + ncIor);
-            ne.setRootCause(e);
-            throw ne;
-        }
-    }
-
-    private void setOrbAndRootContext(ORB orb, org.omg.CORBA.Object ncRef)
-        throws NamingException {
-        _orb = orb;
-        try {
-            _nc = NamingContextHelper.narrow(ncRef);
-            if (_nc == null) {
-                throw new ConfigurationException(
-                    "Cannot convert object reference to NamingContext: " + ncRef);
-            }
-        } catch (org.omg.CORBA.COMM_FAILURE e) {
-            NamingException ne =
-                new CommunicationException("Cannot connect to ORB");
-            ne.setRootCause(e);
-            throw ne;
-        }
-    }
-
-    private String getStringifiedIor(String url) throws NamingException {
-        if (url.startsWith("IOR:") || url.startsWith("corbaloc:")) {
-            return url;
-        } else {
-            InputStream in = null;
-            try {
-                URL u = new URL(url);
-                in = u.openStream();
-                if (in != null) {
-                    BufferedReader bufin =
-                        new BufferedReader(new InputStreamReader(in, "8859_1"));
-                    String str;
-                    while ((str = bufin.readLine()) != null) {
-                        if (str.startsWith("IOR:")) {
-                            return str;
-                        }
-                    }
-                }
-            } catch (IOException e) {
-                NamingException ne =
-                    new ConfigurationException("Invalid URL: " + url);
-                ne.setRootCause(e);
-                throw ne;
-            } finally {
-                try {
-                    if (in != null) {
-                        in.close();
-                    }
-                } catch (IOException e) {
-                    NamingException ne =
-                        new ConfigurationException("Invalid URL: " + url);
-                    ne.setRootCause(e);
-                    throw ne;
-                }
-            }
-            throw new ConfigurationException(url + " does not contain an IOR");
-        }
-    }
-
-
-    /**
-      * Does the job of calling the COS Naming API,
-      * resolve, and performs the exception mapping. If the resolved
-      * object is a COS Naming Context (sub-context), then this function
-      * returns a new JNDI naming context object.
-      * @param path the NameComponent[] object.
-      * @exception NotFound No objects under the name.
-      * @exception CannotProceed Unable to obtain a continuation context
-      * @exception InvalidName Name not understood.
-      * @return Resolved object returned by the COS Name Server.
-      */
-    java.lang.Object callResolve(NameComponent[] path)
-        throws NamingException {
-            try {
-                org.omg.CORBA.Object obj = _nc.resolve(path);
-                try {
-                    NamingContext nc =
-                        NamingContextHelper.narrow(obj);
-                    if (nc != null) {
-                        return new CNCtx(_orb, orbTracker, nc, _env,
-                                        makeFullName(path));
-                    } else {
-                        return obj;
-                    }
-                } catch (org.omg.CORBA.SystemException e) {
-                    return obj;
-                }
-            } catch (Exception e) {
-                throw ExceptionMapper.mapException(e, this, path);
-            }
-    }
-
-    /**
-      * Converts the "String" name into a CompositeName
-      * returns the object resolved by the COS Naming api,
-      * resolve. Returns the current context if the name is empty.
-      * Returns either an org.omg.CORBA.Object or javax.naming.Context object.
-      * @param name string used to resolve the object.
-      * @exception NamingException See callResolve.
-      * @return the resolved object
-      */
-    public java.lang.Object lookup(String name) throws NamingException {
-        if (debug) {
-            System.out.println("Looking up: " + name);
-        }
-        return lookup(new CompositeName(name));
-    }
-
-    /**
-      * Converts the "Name" name into a NameComponent[] object and
-      * returns the object resolved by the COS Naming api,
-      * resolve. Returns the current context if the name is empty.
-      * Returns either an org.omg.CORBA.Object or javax.naming.Context object.
-      * @param name JNDI Name used to resolve the object.
-      * @exception NamingException See callResolve.
-      * @return the resolved object
-      */
-    public java.lang.Object lookup(Name name)
-        throws NamingException {
-            if (_nc == null)
-                throw new ConfigurationException(
-                    "Context does not have a corresponding NamingContext");
-            if (name.size() == 0 )
-                return this; // %%% should clone() so that env can be changed
-            NameComponent[] path = CNNameParser.nameToCosName(name);
-
-            try {
-                java.lang.Object answer = callResolve(path);
-
-                try {
-                    return NamingManager.getObjectInstance(answer, name, this, _env);
-                } catch (NamingException e) {
-                    throw e;
-                } catch (Exception e) {
-                    NamingException ne = new NamingException(
-                        "problem generating object using object factory");
-                    ne.setRootCause(e);
-                    throw ne;
-                }
-            } catch (CannotProceedException cpe) {
-                javax.naming.Context cctx = getContinuationContext(cpe);
-                return cctx.lookup(cpe.getRemainingName());
-            }
-    }
-
-    /**
-      * Performs bind or rebind in the context depending on whether the
-      * flag rebind is set. The only objects allowed to be bound are of
-      * types org.omg.CORBA.Object, org.omg.CosNaming.NamingContext.
-      * You can use a state factory to turn other objects (such as
-      * Remote) into these acceptable forms.
-      *
-      * Uses the COS Naming apis bind/rebind or
-      * bind_context/rebind_context.
-      * @param pth NameComponent[] object
-      * @param obj Object to be bound.
-      * @param rebind perform rebind ? if true performs a rebind.
-      * @exception NotFound No objects under the name.
-      * @exception CannotProceed Unable to obtain a continuation context
-      * @exception AlreadyBound An object is already bound to this name.
-      */
-    private void callBindOrRebind(NameComponent[] pth, Name name,
-        java.lang.Object obj, boolean rebind) throws NamingException {
-            if (_nc == null)
-                throw new ConfigurationException(
-                    "Context does not have a corresponding NamingContext");
-            try {
-                // Call state factories to convert
-                obj = NamingManager.getStateToBind(obj, name, this, _env);
-
-                if (obj instanceof CNCtx) {
-                    // Use naming context object reference
-                    obj = ((CNCtx)obj)._nc;
-                }
-
-                if ( obj instanceof org.omg.CosNaming.NamingContext) {
-                    NamingContext nobj =
-                        NamingContextHelper.narrow((org.omg.CORBA.Object)obj);
-                    if (rebind)
-                        _nc.rebind_context(pth,nobj);
-                    else
-                        _nc.bind_context(pth,nobj);
-
-                } else if (obj instanceof org.omg.CORBA.Object) {
-                    if (rebind)
-                        _nc.rebind(pth,(org.omg.CORBA.Object)obj);
-                    else
-                        _nc.bind(pth,(org.omg.CORBA.Object)obj);
-                }
-                else
-                    throw new IllegalArgumentException(
-                "Only instances of org.omg.CORBA.Object can be bound");
-            } catch (BAD_PARAM e) {
-                // probably narrow() failed?
-                NamingException ne = new NotContextException(name.toString());
-                ne.setRootCause(e);
-                throw ne;
-            } catch (Exception e) {
-                throw ExceptionMapper.mapException(e, this, pth);
-            }
-    }
-
-    /**
-      * Converts the "Name" name into a NameComponent[] object and
-      * performs the bind operation. Uses callBindOrRebind. Throws an
-      * invalid name exception if the name is empty. We need a name to
-      * bind the object even when we work within the current context.
-      * @param name JNDI Name object
-      * @param obj Object to be bound.
-      * @exception NamingException See callBindOrRebind
-      */
-    public  void bind(Name name, java.lang.Object obj)
-        throws NamingException {
-            if (name.size() == 0 ) {
-                throw new InvalidNameException("Name is empty");
-            }
-
-            if (debug) {
-                System.out.println("Bind: " + name);
-            }
-            NameComponent[] path = CNNameParser.nameToCosName(name);
-
-            try {
-                callBindOrRebind(path, name, obj, false);
-            } catch (CannotProceedException e) {
-                javax.naming.Context cctx = getContinuationContext(e);
-                cctx.bind(e.getRemainingName(), obj);
-            }
-    }
-
-    static private javax.naming.Context
-        getContinuationContext(CannotProceedException cpe)
-        throws NamingException {
-        try {
-            return NamingManager.getContinuationContext(cpe);
-        } catch (CannotProceedException e) {
-            java.lang.Object resObj = e.getResolvedObj();
-            if (resObj instanceof Reference) {
-                Reference ref = (Reference)resObj;
-                RefAddr addr = ref.get("nns");
-                if (addr.getContent() instanceof javax.naming.Context) {
-                    NamingException ne = new NameNotFoundException(
-                        "No object reference bound for specified name");
-                    ne.setRootCause(cpe.getRootCause());
-                    ne.setRemainingName(cpe.getRemainingName());
-                    throw ne;
-                }
-            }
-            throw e;
-        }
-    }
-
-    /**
-      * Converts the "String" name into a CompositeName object and
-      * performs the bind operation. Uses callBindOrRebind. Throws an
-      * invalid name exception if the name is empty.
-      * @param name string
-      * @param obj Object to be bound.
-      * @exception NamingException See callBindOrRebind
-      */
-    public void bind(String name, java.lang.Object obj) throws NamingException {
-        bind(new CompositeName(name), obj);
-    }
-
-    /**
-      * Converts the "Name" name into a NameComponent[] object and
-      * performs the rebind operation. Uses callBindOrRebind. Throws an
-      * invalid name exception if the name is empty. We must have a name
-      * to rebind the object to even if we are working within the current
-      * context.
-      * @param name string
-      * @param obj Object to be bound.
-      * @exception NamingException See callBindOrRebind
-      */
-    public  void rebind(Name name, java.lang.Object obj)
-        throws NamingException {
-            if (name.size() == 0 ) {
-                throw new InvalidNameException("Name is empty");
-            }
-            NameComponent[] path = CNNameParser.nameToCosName(name);
-            try {
-                callBindOrRebind(path, name, obj, true);
-            } catch (CannotProceedException e) {
-                javax.naming.Context cctx = getContinuationContext(e);
-                cctx.rebind(e.getRemainingName(), obj);
-            }
-    }
-
-    /**
-      * Converts the "String" name into a CompositeName object and
-      * performs the rebind operation. Uses callBindOrRebind. Throws an
-      * invalid name exception if the name is an empty string.
-      * @param name string
-      * @param obj Object to be bound.
-      * @exception NamingException See callBindOrRebind
-      */
-    public  void rebind(String name, java.lang.Object obj)
-        throws NamingException {
-            rebind(new CompositeName(name), obj);
-    }
-
-    /**
-      * Calls the unbind api of COS Naming and uses the exception mapper
-      * class  to map the exceptions
-      * @param path NameComponent[] object
-      * @exception NotFound No objects under the name. If leaf
-      * is not found, that's OK according to the JNDI spec
-      * @exception CannotProceed Unable to obtain a continuation context
-      * @exception InvalidName Name not understood.
-      */
-    private void callUnbind(NameComponent[] path) throws NamingException {
-            if (_nc == null)
-                throw new ConfigurationException(
-                    "Context does not have a corresponding NamingContext");
-            try {
-                _nc.unbind(path);
-            } catch (NotFound e) {
-                // If leaf is the one missing, return success
-                // as per JNDI spec
-
-                if (leafNotFound(e, path[path.length-1])) {
-                    ; // do nothing
-                } else {
-                    throw ExceptionMapper.mapException(e, this, path);
-                }
-            } catch (Exception e) {
-                throw ExceptionMapper.mapException(e, this, path);
-            }
-    }
-
-    private boolean leafNotFound(NotFound e, NameComponent leaf) {
-
-        // This test is not foolproof because some name servers
-        // always just return one component in rest_of_name
-        // so you might not be able to tell whether that is
-        // the leaf (e.g. aa/aa/aa, which one is missing?)
-
-        NameComponent rest;
-        return e.why.value() == NotFoundReason._missing_node &&
-            e.rest_of_name.length == 1 &&
-            (rest=e.rest_of_name[0]).id.equals(leaf.id) &&
-            (rest.kind == leaf.kind ||
-             (rest.kind != null && rest.kind.equals(leaf.kind)));
-    }
-
-    /**
-      * Converts the "String" name into a CompositeName object and
-      * performs the unbind operation. Uses callUnbind. If the name is
-      * empty, throws an invalid name exception. Do we unbind the
-      * current context (JNDI spec says work with the current context if
-      * the name is empty) ?
-      * @param name string
-      * @exception NamingException See callUnbind
-      */
-    public  void unbind(String name) throws NamingException {
-        unbind(new CompositeName(name));
-    }
-
-    /**
-      * Converts the "Name" name into a NameComponent[] object and
-      * performs the unbind operation. Uses callUnbind. Throws an
-      * invalid name exception if the name is empty.
-      * @param name string
-      * @exception NamingException See callUnbind
-      */
-    public  void unbind(Name name)
-        throws NamingException {
-            if (name.size() == 0 )
-                throw new InvalidNameException("Name is empty");
-            NameComponent[] path = CNNameParser.nameToCosName(name);
-            try {
-                callUnbind(path);
-            } catch (CannotProceedException e) {
-                javax.naming.Context cctx = getContinuationContext(e);
-                cctx.unbind(e.getRemainingName());
-            }
-    }
-
-    /**
-      * Renames an object. Since COS Naming does not support a rename
-      * api, this method unbinds the object with the "oldName" and
-      * creates a new binding.
-      * @param oldName string, existing name for the binding.
-      * @param newName string, name used to replace.
-      * @exception NamingException See bind
-      */
-    public  void rename(String oldName,String newName)
-        throws NamingException {
-            rename(new CompositeName(oldName), new CompositeName(newName));
-    }
-
-    /**
-      * Renames an object. Since COS Naming does not support a rename
-      * api, this method unbinds the object with the "oldName" and
-      * creates a new binding.
-      * @param oldName JNDI Name, existing name for the binding.
-      * @param newName JNDI Name, name used to replace.
-      * @exception NamingException See bind
-      */
-    public  void rename(Name oldName,Name newName)
-        throws NamingException {
-            if (_nc == null)
-                throw new ConfigurationException(
-                    "Context does not have a corresponding NamingContext");
-            if (oldName.size() == 0 || newName.size() == 0)
-                throw new InvalidNameException("One or both names empty");
-            java.lang.Object obj = lookup(oldName);
-            bind(newName,obj);
-            unbind(oldName);
-    }
-
-    /**
-      * Returns a NameClassEnumeration object which has a list of name
-      * class pairs. Lists the current context if the name is empty.
-      * @param name string
-      * @exception NamingException All exceptions thrown by lookup
-      * with a non-null argument
-      * @return a list of name-class objects as a NameClassEnumeration.
-      */
-    public  NamingEnumeration list(String name) throws NamingException {
-            return list(new CompositeName(name));
-    }
-
-    /**
-      * Returns a NameClassEnumeration object which has a list of name
-      * class pairs. Lists the current context if the name is empty.
-      * @param name JNDI Name
-      * @exception NamingException All exceptions thrown by lookup
-      * @return a list of name-class objects as a NameClassEnumeration.
-      */
-    public  NamingEnumeration list(Name name)
-        throws NamingException {
-            return listBindings(name);
-    }
-
-    /**
-      * Returns a BindingEnumeration object which has a list of name
-      * object pairs. Lists the current context if the name is empty.
-      * @param name string
-      * @exception NamingException all exceptions returned by lookup
-      * @return a list of bindings as a BindingEnumeration.
-      */
-    public  NamingEnumeration listBindings(String name)
-        throws NamingException {
-            return listBindings(new CompositeName(name));
-    }
-
-    /**
-      * Returns a BindingEnumeration object which has a list of name
-      * class pairs. Lists the current context if the name is empty.
-      * @param name JNDI Name
-      * @exception NamingException all exceptions returned by lookup.
-      * @return a list of bindings as a BindingEnumeration.
-      */
-    public  NamingEnumeration listBindings(Name name)
-        throws NamingException {
-            if (_nc == null)
-                throw new ConfigurationException(
-                    "Context does not have a corresponding NamingContext");
-            if (name.size() > 0) {
-                try {
-                    java.lang.Object obj = lookup(name);
-                    if (obj instanceof CNCtx) {
-                        return new CNBindingEnumeration(
-                                        (CNCtx) obj, true, _env);
-                    } else {
-                        throw new NotContextException(name.toString());
-                    }
-                } catch (NamingException ne) {
-                    throw ne;
-                } catch (BAD_PARAM e) {
-                    NamingException ne =
-                        new NotContextException(name.toString());
-                    ne.setRootCause(e);
-                    throw ne;
-                }
-            }
-            return new CNBindingEnumeration(this, false, _env);
-    }
-
-    /**
-      * Calls the destroy on the COS Naming Server
-      * @param nc The NamingContext object to use.
-      * @exception NotEmpty when the context is not empty and cannot be destroyed.
-      */
-    private void callDestroy(NamingContext nc)
-        throws NamingException {
-            if (_nc == null)
-                throw new ConfigurationException(
-                    "Context does not have a corresponding NamingContext");
-            try {
-                nc.destroy();
-            } catch (Exception e) {
-                throw ExceptionMapper.mapException(e, this, null);
-            }
-    }
-
-    /**
-      * Uses the callDestroy function to destroy the context. If name is
-      * empty destroys the current context.
-      * @param name string
-      * @exception OperationNotSupportedException when list is invoked
-      * with a non-null argument
-      */
-    public  void destroySubcontext(String name) throws NamingException {
-        destroySubcontext(new CompositeName(name));
-    }
-
-    /**
-      * Uses the callDestroy function to destroy the context. Destroys
-      * the current context if name is empty.
-      * @param name JNDI Name
-      * @exception OperationNotSupportedException when list is invoked
-      * with a non-null argument
-      */
-    public  void destroySubcontext(Name name)
-        throws NamingException {
-            if (_nc == null)
-                throw new ConfigurationException(
-                    "Context does not have a corresponding NamingContext");
-            NamingContext the_nc = _nc;
-            NameComponent[] path = CNNameParser.nameToCosName(name);
-            if ( name.size() > 0) {
-                try {
-                    javax.naming.Context ctx =
-                        (javax.naming.Context) callResolve(path);
-                    CNCtx cnc = (CNCtx)ctx;
-                    the_nc = cnc._nc;
-                    cnc.close(); //remove the reference to the context
-                } catch (ClassCastException e) {
-                    throw new NotContextException(name.toString());
-                } catch (CannotProceedException e) {
-                    javax.naming.Context cctx = getContinuationContext(e);
-                    cctx.destroySubcontext(e.getRemainingName());
-                    return;
-                } catch (NameNotFoundException e) {
-                    // If leaf is the one missing, return success
-                    // as per JNDI spec
-
-                    if (e.getRootCause() instanceof NotFound &&
-                        leafNotFound((NotFound)e.getRootCause(),
-                            path[path.length-1])) {
-                        return; // leaf missing OK
-                    }
-                    throw e;
-                } catch (NamingException e) {
-                    throw e;
-                }
-            }
-            callDestroy(the_nc);
-            callUnbind(path);
-    }
-
-    /**
-      * Calls the bind_new_context COS naming api to create a new subcontext.
-      * @param path NameComponent[] object
-      * @exception NotFound No objects under the name.
-      * @exception CannotProceed Unable to obtain a continuation context
-      * @exception InvalidName Name not understood.
-      * @exception AlreadyBound An object is already bound to this name.
-      * @return the new context object.
-      */
-    private javax.naming.Context callBindNewContext(NameComponent[] path)
-        throws NamingException {
-            if (_nc == null)
-                throw new ConfigurationException(
-                    "Context does not have a corresponding NamingContext");
-            try {
-                NamingContext nctx = _nc.bind_new_context(path);
-                return new CNCtx(_orb, orbTracker, nctx, _env,
-                                        makeFullName(path));
-            } catch (Exception e) {
-                throw ExceptionMapper.mapException(e, this, path);
-            }
-    }
-
-    /**
-      * Uses the callBindNewContext convenience function to create a new
-      * context. Throws an invalid name exception if the name is empty.
-      * @param name string
-      * @exception NamingException See callBindNewContext
-      * @return the new context object.
-      */
-    public  javax.naming.Context createSubcontext(String name)
-        throws NamingException {
-            return createSubcontext(new CompositeName(name));
-    }
-
-    /**
-      * Uses the callBindNewContext convenience function to create a new
-      * context. Throws an invalid name exception if the name is empty.
-      * @param name string
-      * @exception NamingException See callBindNewContext
-      * @return the new context object.
-      */
-    public  javax.naming.Context createSubcontext(Name name)
-        throws NamingException {
-            if (name.size() == 0 )
-                throw new InvalidNameException("Name is empty");
-            NameComponent[] path = CNNameParser.nameToCosName(name);
-            try {
-                return callBindNewContext(path);
-            } catch (CannotProceedException e) {
-                javax.naming.Context cctx = getContinuationContext(e);
-                return cctx.createSubcontext(e.getRemainingName());
-            }
-    }
-
-    /**
-      * Is mapped to resolve in the COS Naming api.
-      * @param name string
-      * @exception NamingException See lookup.
-      * @return the resolved object.
-      */
-    public  java.lang.Object lookupLink(String name) throws NamingException {
-            return lookupLink(new CompositeName(name));
-    }
-
-    /**
-      * Is mapped to resolve in the COS Naming api.
-      * @param name string
-      * @exception NamingException See lookup.
-      * @return the resolved object.
-      */
-    public  java.lang.Object lookupLink(Name name) throws NamingException {
-            return lookup(name);
-    }
-
-    /**
-      * Allow access to the name parser object.
-      * @param String JNDI name, is ignored since there is only one Name
-      * Parser object.
-      * @exception NamingException --
-      * @return NameParser object
-      */
-    public  NameParser getNameParser(String name) throws NamingException {
-        return parser;
-    }
-
-    /**
-      * Allow access to the name parser object.
-      * @param Name JNDI name, is ignored since there is only one Name
-      * Parser object.
-      * @exception NamingException --
-      * @return NameParser object
-      */
-    public  NameParser getNameParser(Name name) throws NamingException {
-        return parser;
-    }
-
-    /**
-      * Returns the current environment.
-      * @return Environment.
-      */
-    public  Hashtable getEnvironment() throws NamingException {
-        if (_env == null) {
-            return new Hashtable(5, 0.75f);
-        } else {
-            return (Hashtable)_env.clone();
-        }
-    }
-
-    public String composeName(String name, String prefix) throws NamingException {
-        return composeName(new CompositeName(name),
-            new CompositeName(prefix)).toString();
-    }
-
-    public Name composeName(Name name, Name prefix) throws NamingException {
-        Name result = (Name)prefix.clone();
-        return result.addAll(name);
-    }
-
-    /**
-      * Adds to the environment for the current context.
-      * Record change but do not reinitialize ORB.
-      *
-      * @param propName The property name.
-      * @param propVal  The ORB.
-      * @return the previous value of this property if any.
-      */
-    public java.lang.Object addToEnvironment(String propName,
-        java.lang.Object propValue)
-        throws NamingException {
-            if (_env == null) {
-                _env = new Hashtable(7, 0.75f);
-            } else {
-                // copy-on-write
-                _env = (Hashtable)_env.clone();
-            }
-
-            return _env.put(propName, propValue);
-    }
-
-    // Record change but do not reinitialize ORB
-    public java.lang.Object removeFromEnvironment(String propName)
-        throws NamingException {
-            if (_env != null  && _env.get(propName) != null) {
-                // copy-on-write
-                _env = (Hashtable)_env.clone();
-                return _env.remove(propName);
-            }
-            return null;
-    }
-
-    synchronized public void incEnumCount() {
-        enumCount++;
-        if (debug) {
-            System.out.println("incEnumCount, new count:" + enumCount);
-        }
-    }
-
-    synchronized public void decEnumCount()
-            throws NamingException {
-        enumCount--;
-        if (debug) {
-            System.out.println("decEnumCount, new count:" + enumCount +
-                        "    isCloseCalled:" + isCloseCalled);
-        }
-        if ((enumCount == 0) && isCloseCalled) {
-            close();
-        }
-    }
-
-    synchronized public void close() throws NamingException {
-
-        if (enumCount > 0) {
-            isCloseCalled = true;
-            return;
-        }
-
-        // Never destroy an orb in CNCtx.
-        // The orb we have is either the shared/default orb, or one passed in to a constructor
-        // from elsewhere, so that orb is somebody else's reponsibility.
-    }
-
-    protected void finalize() {
-        try {
-            close();
-        } catch (NamingException e) {
-            // ignore failures
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/cosnaming/CNCtxFactory.java b/ojluni/src/main/java/com/sun/jndi/cosnaming/CNCtxFactory.java
deleted file mode 100755
index 04bcf4d..0000000
--- a/ojluni/src/main/java/com/sun/jndi/cosnaming/CNCtxFactory.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-package com.sun.jndi.cosnaming;
-
-import javax.naming.spi.InitialContextFactory;
-import javax.naming.*;
-
-import java.util.Hashtable;
-
-/**
-  * Implements the JNDI SPI InitialContextFactory interface used to
-  * create  the InitialContext objects.
-  *
-  * @author Raj Krishnamurthy
-  */
-
-public class CNCtxFactory implements InitialContextFactory {
-
-  /**
-    * Creates the InitialContext object. Properties parameter should
-    * should contain the ORB object for the value jndi.corba.orb.
-    * @param env Properties object
-    */
-
-  public Context getInitialContext(Hashtable<?,?> env) throws NamingException {
-      return new CNCtx(env);
-  }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/cosnaming/CNNameParser.java b/ojluni/src/main/java/com/sun/jndi/cosnaming/CNNameParser.java
deleted file mode 100755
index 846f85c..0000000
--- a/ojluni/src/main/java/com/sun/jndi/cosnaming/CNNameParser.java
+++ /dev/null
@@ -1,500 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-package com.sun.jndi.cosnaming;
-
-import javax.naming.*;
-import java.util.Properties;
-import java.util.Vector;
-import java.util.Enumeration;
-
-import org.omg.CosNaming.NameComponent;
-
-/**
-  * Parsing routines for NameParser as well as COS Naming stringified names.
-  * This is used by CNCtx to create a NameComponent[] object and vice versa.
-  * It follows Section 4.5 of Interoperable Naming Service (INS) 98-10-11.
-  * In summary, the stringified form is a left-to-right, forward-slash
-  * separated name. id and kinds are separated by '.'. backslash is the
-  * escape character.
-  *
-  * @author Rosanna Lee
-  */
-
-final public class CNNameParser implements NameParser {
-
-    private static final Properties mySyntax = new Properties();
-    private static final char kindSeparator = '.';
-    private static final char compSeparator = '/';
-    private static final char escapeChar = '\\';
-    static {
-        mySyntax.put("jndi.syntax.direction", "left_to_right");
-        mySyntax.put("jndi.syntax.separator", ""+compSeparator);
-        mySyntax.put("jndi.syntax.escape", ""+escapeChar);
-    };
-
-  /**
-    * Constructs a new name parser for parsing names in INS syntax.
-    */
-    public CNNameParser() {
-    }
-
-  /**
-    * Returns a CompoundName given a string in INS syntax.
-    * @param name The non-null string representation of the name.
-    * @return a non-null CompoundName
-    */
-    public Name parse(String name) throws NamingException {
-        Vector comps = insStringToStringifiedComps(name);
-        return new CNCompoundName(comps.elements());
-    }
-
-    /**
-     * Creates a NameComponent[] from a Name structure.
-     * Used by CNCtx to convert the input Name arg into a NameComponent[].
-     * @param a CompoundName or a CompositeName;
-     * each component must be the stringified form of a NameComponent.
-     */
-    static NameComponent[] nameToCosName(Name name)
-        throws InvalidNameException {
-            int len = name.size();
-            if (len == 0) {
-                return new NameComponent[0];
-            }
-
-            NameComponent[] answer = new NameComponent[len];
-            for (int i = 0; i < len; i++) {
-                answer[i] = parseComponent(name.get(i));
-            }
-            return answer;
-    }
-
-    /**
-     * Returns the INS stringified form of a NameComponent[].
-     * Used by CNCtx.getNameInNamespace(), CNCompoundName.toString().
-     */
-    static String cosNameToInsString(NameComponent[] cname) {
-      StringBuffer str = new StringBuffer();
-      for ( int i = 0; i < cname.length; i++) {
-          if ( i > 0) {
-              str.append(compSeparator);
-          }
-          str.append(stringifyComponent(cname[i]));
-      }
-      return str.toString();
-    }
-
-    /**
-     * Creates a CompositeName from a NameComponent[].
-     * Used by ExceptionMapper and CNBindingEnumeration to convert
-     * a NameComponent[] into a composite name.
-     */
-    static Name cosNameToName(NameComponent[] cname) {
-        Name nm = new CompositeName();
-        for ( int i = 0; cname != null && i < cname.length; i++) {
-            try {
-                nm.add(stringifyComponent(cname[i]));
-            } catch (InvalidNameException e) {
-                // ignore
-            }
-        }
-        return nm;
-    }
-
-    /**
-     * Converts an INS-syntax string name into a Vector in which
-     * each element of the vector contains a stringified form of
-     * a NameComponent.
-     */
-    private static Vector insStringToStringifiedComps(String str)
-        throws InvalidNameException {
-
-        int len = str.length();
-        Vector components = new Vector(10);
-        char[] id = new char[len];
-        char[] kind = new char[len];
-        int idCount, kindCount;
-        boolean idMode;
-        for (int i = 0; i < len; ) {
-            idCount = kindCount = 0; // reset for new component
-            idMode = true;           // always start off parsing id
-            while (i < len) {
-                if (str.charAt(i) == compSeparator) {
-                    break;
-
-                } else if (str.charAt(i) == escapeChar) {
-                    if (i + 1 >= len) {
-                        throw new InvalidNameException(str +
-                            ": unescaped \\ at end of component");
-                    } else if (isMeta(str.charAt(i+1))) {
-                        ++i; // skip escape and let meta through
-                        if (idMode) {
-                            id[idCount++] = str.charAt(i++);
-                        } else {
-                            kind[kindCount++] = str.charAt(i++);
-                        }
-                    } else {
-                        throw new InvalidNameException(str +
-                            ": invalid character being escaped");
-                    }
-
-                } else if (idMode && str.charAt(i) == kindSeparator) {
-                    // just look for the first kindSeparator
-                    ++i; // skip kind separator
-                    idMode = false;
-
-                } else {
-                    if (idMode) {
-                        id[idCount++] = str.charAt(i++);
-                    } else {
-                        kind[kindCount++] = str.charAt(i++);
-                    }
-                }
-            }
-            components.addElement(stringifyComponent(
-                new NameComponent(new String(id, 0, idCount),
-                    new String(kind, 0, kindCount))));
-
-            if (i < len) {
-                ++i; // skip separator
-            }
-        }
-
-        return components;
-    }
-
-    /**
-     * Return a NameComponent given its stringified form.
-     */
-    private static NameComponent parseComponent(String compStr)
-    throws InvalidNameException {
-        NameComponent comp = new NameComponent();
-        int kindSep = -1;
-        int len = compStr.length();
-
-        int j = 0;
-        char[] newStr = new char[len];
-        boolean escaped = false;
-
-        // Find the kind separator
-        for (int i = 0; i < len && kindSep < 0; i++) {
-            if (escaped) {
-                newStr[j++] = compStr.charAt(i);
-                escaped = false;
-            } else if (compStr.charAt(i) == escapeChar) {
-                if (i + 1 >= len) {
-                    throw new InvalidNameException(compStr +
-                            ": unescaped \\ at end of component");
-                } else if (isMeta(compStr.charAt(i+1))) {
-                    escaped = true;
-                } else {
-                    throw new InvalidNameException(compStr +
-                        ": invalid character being escaped");
-                }
-            } else if (compStr.charAt(i) == kindSeparator) {
-                kindSep = i;
-            } else {
-                newStr[j++] = compStr.charAt(i);
-            }
-        }
-
-        // Set id
-        comp.id = new String(newStr, 0, j);
-
-        // Set kind
-        if (kindSep < 0) {
-            comp.kind = "";  // no kind separator
-        } else {
-            // unescape kind
-            j = 0;
-            escaped = false;
-            for (int i = kindSep+1; i < len; i++) {
-                if (escaped) {
-                    newStr[j++] = compStr.charAt(i);
-                    escaped = false;
-                } else if (compStr.charAt(i) == escapeChar) {
-                    if (i + 1 >= len) {
-                        throw new InvalidNameException(compStr +
-                            ": unescaped \\ at end of component");
-                    } else if (isMeta(compStr.charAt(i+1))) {
-                        escaped = true;
-                    } else {
-                        throw new InvalidNameException(compStr +
-                            ": invalid character being escaped");
-                    }
-                } else {
-                    newStr[j++] = compStr.charAt(i);
-                }
-            }
-            comp.kind = new String(newStr, 0, j);
-        }
-        return comp;
-    }
-
-    private static String stringifyComponent(NameComponent comp) {
-        StringBuffer one = new StringBuffer(escape(comp.id));
-        if (comp.kind != null && !comp.kind.equals("")) {
-            one.append(kindSeparator + escape(comp.kind));
-        }
-        if (one.length() == 0) {
-            return ""+kindSeparator;  // if neither id nor kind specified
-        } else {
-            return one.toString();
-        }
-    }
-
-    /**
-     * Returns a string with '.', '\', '/' escaped. Used when
-     * stringifying the name into its INS stringified form.
-     */
-    private static String escape(String str) {
-        if (str.indexOf(kindSeparator) < 0 &&
-            str.indexOf(compSeparator) < 0 &&
-            str.indexOf(escapeChar) < 0) {
-            return str;                         // no meta characters to escape
-        } else {
-            int len = str.length();
-            int j = 0;
-            char[] newStr = new char[len+len];
-            for (int i = 0; i < len; i++) {
-                if (isMeta(str.charAt(i))) {
-                    newStr[j++] = escapeChar;   // escape meta character
-                }
-                newStr[j++] = str.charAt(i);
-            }
-            return new String(newStr, 0, j);
-        }
-    }
-
-    /**
-     * In INS, there are three meta characters: '.', '/' and '\'.
-     */
-    private static boolean isMeta(char ch) {
-        switch (ch) {
-        case kindSeparator:
-        case compSeparator:
-        case escapeChar:
-            return true;
-        }
-        return false;
-    }
-
-    /**
-     * An implementation of CompoundName that bypasses the parsing
-     * and stringifying code of the default CompoundName.
-     */
-    static final class CNCompoundName extends CompoundName {
-        CNCompoundName(Enumeration enum_) {
-            super(enum_, CNNameParser.mySyntax);
-        }
-
-        public Object clone() {
-            return new CNCompoundName(getAll());
-        }
-
-        public Name getPrefix(int posn) {
-            Enumeration comps = super.getPrefix(posn).getAll();
-            return new CNCompoundName(comps);
-        }
-
-        public Name getSuffix(int posn) {
-            Enumeration comps = super.getSuffix(posn).getAll();
-            return new CNCompoundName(comps);
-        }
-
-        public String toString() {
-            try {
-                // Convert Name to NameComponent[] then stringify
-                return cosNameToInsString(nameToCosName(this));
-            } catch (InvalidNameException e) {
-                return super.toString();
-            }
-        }
-
-        private static final long serialVersionUID = -6599252802678482317L;
-    }
-
-// for testing only
-/*
-    private static void print(String input) {
-        try {
-            System.out.println("\n >>>>>> input: " + input);
-
-            System.out.println("--Compound Name: ");
-            NameParser parser = new CNNameParser();
-            Name name = parser.parse(input);
-            for (int i = 0; i < name.size(); i++) {
-                System.out.println("\t" + i + ": " + name.get(i));
-                NameComponent cp = parseComponent(name.get(i));
-                System.out.println("\t\t" + "id: " + cp.id + ";kind: " + cp.kind);
-            }
-            System.out.println("\t" + name.toString());
-
-            System.out.println("--Composite Name: ");
-            Name composite = new CompositeName(input);
-            for (int i = 0; i < composite.size(); i++) {
-                System.out.println("\t" + i+": " + composite.get(i));
-            }
-            System.out.println("\t" + composite.toString());
-
-            System.out.println("--Composite To NameComponent");
-            NameComponent[] names = nameToCosName(composite);
-            for (int i = 0; i < composite.size(); i++) {
-                System.out.println("\t" + i+": id: " + names[i].id + "; kind: " + names[i].kind);
-            }
-            System.out.println("\t" + cosNameToInsString(names));
-        } catch (NamingException e) {
-            System.out.println(e);
-        }
-    }
-
-    private static void checkName(Name name, String[] comps) throws Exception {
-        if (name.size() != comps.length) {
-            throw new Exception(
-                "test failed; incorrect component count in " + name + "; " +
-                "expecting " + comps.length + " got " + name.size());
-        }
-        for (int i = 0; i < name.size(); i++) {
-            if (!comps[i].equals(name.get(i))) {
-                throw new Exception (
-                    "test failed; invalid component in " + name + "; " +
-                    "expecting '" + comps[i] + "' got '" + name.get(i) + "'");
-            }
-        }
-    }
-
-    private static void checkCompound(NameParser parser,
-        String input, String[] comps) throws Exception {
-        checkName(parser.parse(input), comps);
-    }
-
-    private static void checkComposite(String input, String[] comps)
-    throws Exception {
-        checkName(new CompositeName(input), comps);
-    }
-
-    private static String[] compounds = {
-        "a/b/c",
-        "a.b/c.d",
-        "a",
-        ".",
-        "a.",
-        "c.d",
-        ".e",
-        "a/x\\/y\\/z/b",
-        "a\\.b.c\\.d/e.f",
-        "a/b\\\\/c",
-        "x\\\\.y",
-        "x\\.y",
-        "x.\\\\y",
-        "x.y\\\\",
-        "\\\\x.y",
-        "a.b\\.c/d"
-    };
-    private static String[][] compoundComps = {
-        {"a", "b", "c"},
-        {"a.b", "c.d"},
-        {"a"},
-        {"."},
-        {"a"},
-        {"c.d"},
-        {".e"},
-        {"a", "x\\/y\\/z", "b"},
-        {"a\\.b.c\\.d", "e.f"},
-        {"a", "b\\\\", "c"},
-        {"x\\\\.y"},
-        {"x\\.y"},
-        {"x.\\\\y"},
-        {"x.y\\\\"},
-        {"\\\\x.y"},
-        {"a.b\\.c", "d"},
-    };
-
-    private static String[] composites = {
-        "a/b/c",
-        "a.b/c.d",
-        "a",
-        ".",
-        "a.",
-        "c.d",
-        ".e",
-        "a/x\\\\\\/y\\\\\\/z/b",
-        "a\\\\.b.c\\\\.d/e.f",
-        "a/b\\\\\\\\/c",
-        "x\\\\\\.y",
-        "x\\\\.y",
-        "x.\\\\\\\\y",
-        "x.y\\\\\\\\",
-        "\\\\\\\\x.y"
-    };
-
-    private static String[][] compositeComps = {
-        {"a", "b", "c"},
-        {"a.b", "c.d"},
-        {"a"},
-        {"."},
-        {"a."},  // unlike compound, kind sep is not consumed
-        {"c.d"},
-        {".e"},
-        {"a", "x\\/y\\/z", "b"},
-        {"a\\.b.c\\.d", "e.f"},
-        {"a", "b\\\\", "c"},
-        {"x\\\\.y"},
-        {"x\\.y"},
-        {"x.\\\\y"},
-        {"x.y\\\\"},
-        {"\\\\x.y"}
-    };
-
-    public static void main(String[] args) throws Exception {
-        if (args.length > 0) {
-            for (int i = 0; i < args.length; i++) {
-                print(args[0]);
-            }
-        } else {
-            print("x\\\\.y");
-            print("x\\.y");
-            print("x.\\\\y");
-            print("x.y\\\\");
-            print("\\\\x.y");
-        }
-
-        NameParser parser = new com.sun.jndi.cosnaming.CNNameParser();
-        for (int i = 0; i < compounds.length; i++) {
-            checkCompound(parser, compounds[i], compoundComps[i]);
-        }
-        for (int i = 0; i < composites.length; i++) {
-            checkComposite(composites[i], compositeComps[i]);
-        }
-
-        System.out.println("hardwire");
-        NameComponent[] foo = new NameComponent[1];
-        foo[0] = new NameComponent("foo\\", "bar");
-
-        System.out.println(cosNameToInsString(foo));
-        System.out.println(cosNameToName(foo));
-    }
-*/
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/cosnaming/CorbanameUrl.java b/ojluni/src/main/java/com/sun/jndi/cosnaming/CorbanameUrl.java
deleted file mode 100755
index f24f87c..0000000
--- a/ojluni/src/main/java/com/sun/jndi/cosnaming/CorbanameUrl.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * Copyright (c) 2000, 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.jndi.cosnaming;
-
-import javax.naming.Name;
-import javax.naming.NamingException;
-
-import java.net.MalformedURLException;
-import com.sun.jndi.toolkit.url.UrlUtil;
-
-/**
- * Extract components of a "corbaname" URL.
- *
- * The format of an corbaname URL is defined in INS 99-12-03 as follows.
- *<p>
- * corbaname url = "corbaname:" <corbaloc_obj> ["#" <string_name>]
- * corbaloc_obj  = <obj_addr_list> ["/" <key_string>]
- * obj_addr_list = as defined in a corbaloc URL
- * key_string    = as defined in a corbaloc URL
- * string_name   = stringified COS name | empty_string
- *<p>
- * Characters in <string_name> are escaped as follows.
- * US-ASCII alphanumeric characters are not escaped. Any characters outside
- * of this range are escaped except for the following:
- *        ; / : ? @ & = + $ , - _ . ! ~ * ; ( )
- * Escaped characters is escaped by using a % followed by its 2 hexadecimal
- * numbers representing the octet.
- *<p>
- * The corbaname URL is parsed into two parts: a corbaloc URL and a COS name.
- * The corbaloc URL is constructed by concatenation "corbaloc:" with
- * <corbaloc_obj>.
- * The COS name is <string_name> with the escaped characters resolved.
- *<p>
- * A corbaname URL is resolved by:
- *<ol>
- *<li>Construct a corbaloc URL by concatenating "corbaloc:" and <corbaloc_obj>.
- *<li>Resolve the corbaloc URL to a NamingContext by using
- *     nctx = ORB.string_to_object(corbalocUrl);
- *<li>Resolve <string_name> in the NamingContext.
- *</ol>
- *
- * @author Rosanna Lee
- */
-
-public final class CorbanameUrl {
-    private String stringName;
-    private String location;
-
-    /**
-     * Returns a possibly empty but non-null string that is the "string_name"
-     * portion of the URL.
-     */
-    public String getStringName() {
-        return stringName;
-    }
-
-    public Name getCosName() throws NamingException {
-        return CNCtx.parser.parse(stringName);
-    }
-
-    public String getLocation() {
-        return "corbaloc:" + location;
-    }
-
-    public CorbanameUrl(String url) throws MalformedURLException {
-
-        if (!url.startsWith("corbaname:")) {
-            throw new MalformedURLException("Invalid corbaname URL: " + url);
-        }
-
-        int addrStart = 10;  // "corbaname:"
-
-        int addrEnd = url.indexOf('#', addrStart);
-        if (addrEnd < 0) {
-            addrEnd = url.length();
-            stringName = "";
-        } else {
-            stringName = UrlUtil.decode(url.substring(addrEnd+1));
-        }
-        location = url.substring(addrStart, addrEnd);
-
-        int keyStart = location.indexOf("/");
-        if (keyStart >= 0) {
-            // Has key string
-            if (keyStart == (location.length() -1)) {
-                location += "NameService";
-            }
-        } else {
-            location += "/NameService";
-        }
-    }
-/*
-    // for testing only
-    public static void main(String[] args) {
-        try {
-            CorbanameUrl url = new CorbanameUrl(args[0]);
-
-            System.out.println("location: " + url.getLocation());
-            System.out.println("string name: " + url.getStringName());
-        } catch (MalformedURLException e) {
-            e.printStackTrace();
-        }
-    }
-*/
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/cosnaming/ExceptionMapper.java b/ojluni/src/main/java/com/sun/jndi/cosnaming/ExceptionMapper.java
deleted file mode 100755
index 53b71d5..0000000
--- a/ojluni/src/main/java/com/sun/jndi/cosnaming/ExceptionMapper.java
+++ /dev/null
@@ -1,242 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-package com.sun.jndi.cosnaming;
-
-import javax.naming.*;
-import javax.naming.directory.*;
-import javax.naming.spi.*;
-
-import org.omg.CosNaming.*;
-import org.omg.CosNaming.NamingContextPackage.*;
-import org.omg.CORBA.*;
-
-/**
-  * A convenience class to map the COS Naming exceptions to the JNDI exceptions.
-  * @author Raj Krishnamurthy
-  */
-
-public final class ExceptionMapper {
-    private ExceptionMapper() {} // ensure no instance
-    private static final boolean debug = false;
-
-    public static final NamingException mapException(Exception e,
-        CNCtx ctx, NameComponent[] inputName) throws NamingException {
-        if (e instanceof NamingException) {
-            return (NamingException)e;
-        }
-
-        if (e instanceof RuntimeException) {
-            throw (RuntimeException)e;
-        }
-
-        NamingException ne;
-        if (e instanceof NotFound) {
-            if (ctx.federation) {
-                return tryFed((NotFound)e, ctx, inputName);
-
-            } else {
-                ne = new NameNotFoundException();
-            }
-
-        } else if (e instanceof CannotProceed) {
-
-            ne = new CannotProceedException();
-            NamingContext nc = ((CannotProceed) e).cxt;
-            NameComponent[] rest = ((CannotProceed) e).rest_of_name;
-
-            // %%% We assume that rest returns *all* unprocessed components.
-            // Don't' know if that is a good assumption, given
-            // NotFound doesn't set rest as expected. -RL
-            if (inputName != null && (inputName.length > rest.length)) {
-                NameComponent[] resolvedName =
-                    new NameComponent[inputName.length - rest.length];
-                System.arraycopy(inputName, 0, resolvedName, 0, resolvedName.length);
-                // Wrap resolved NamingContext inside a CNCtx
-                // Guess that its name (which is relative to ctx)
-                // is the part of inputName minus rest_of_name
-                ne.setResolvedObj(new CNCtx(ctx._orb, ctx.orbTracker, nc,
-                                                ctx._env,
-                    ctx.makeFullName(resolvedName)));
-            } else {
-                ne.setResolvedObj(ctx);
-            }
-
-            ne.setRemainingName(CNNameParser.cosNameToName(rest));
-
-        } else if (e instanceof InvalidName) {
-            ne = new InvalidNameException();
-        } else if (e instanceof AlreadyBound) {
-            ne = new NameAlreadyBoundException();
-        } else if (e instanceof NotEmpty) {
-            ne = new ContextNotEmptyException();
-        } else {
-            ne = new NamingException("Unknown reasons");
-        }
-
-        ne.setRootCause(e);
-        return ne;
-    }
-
-    private static final NamingException tryFed(NotFound e, CNCtx ctx,
-        NameComponent[] inputName) throws NamingException {
-        NameComponent[] rest = ((NotFound) e).rest_of_name;
-
-        if (debug) {
-            System.out.println(((NotFound)e).why.value());
-            System.out.println(rest.length);
-        }
-
-        // %%% Using 1.2 & 1.3 Sun's tnameserv, 'rest' contains only the first
-        // component that failed, not *rest* as advertized. This is useless
-        // because what if you have something like aa/aa/aa/aa/aa.
-        // If one of those is not found, you get "aa" as 'rest'.
-        if (rest.length == 1 && inputName != null) {
-            // Check that we're not talking to 1.2/1.3 Sun tnameserv
-            NameComponent lastIn = inputName[inputName.length-1];
-            if (rest[0].id.equals(lastIn.id) &&
-                rest[0].kind != null &&
-                rest[0].kind.equals(lastIn.kind)) {
-                // Might be legit
-                ;
-            } else {
-                // Due to 1.2/1.3 bug that always returns single-item 'rest'
-                NamingException ne = new NameNotFoundException();
-                ne.setRemainingName(CNNameParser.cosNameToName(rest));
-                ne.setRootCause(e);
-                throw ne;
-            }
-        }
-        // Fixed in 1.4; perform calculations based on correct (1.4) behavior
-
-        // Calculate the components of the name that has been resolved
-        NameComponent[] resolvedName = null;
-        int len = 0;
-        if (inputName != null && (inputName.length >= rest.length)) {
-
-            if (e.why == NotFoundReason.not_context) {
-                // First component of rest is found but not a context; keep it
-                // as part of resolved name
-                len = inputName.length - (rest.length - 1);
-
-                // Remove resolved component from rest
-                if (rest.length == 1) {
-                    // No more remaining
-                    rest = null;
-                } else {
-                    NameComponent[] tmp = new NameComponent[rest.length-1];
-                    System.arraycopy(rest, 1, tmp, 0, tmp.length);
-                    rest = tmp;
-                }
-            } else {
-                len = inputName.length - rest.length;
-            }
-
-            if (len > 0) {
-                resolvedName = new NameComponent[len];
-                System.arraycopy(inputName, 0, resolvedName, 0, len);
-            }
-        }
-
-        // Create CPE and set common fields
-        CannotProceedException cpe = new CannotProceedException();
-        cpe.setRootCause(e);
-        if (rest != null && rest.length > 0) {
-            cpe.setRemainingName(CNNameParser.cosNameToName(rest));
-        }
-        cpe.setEnvironment(ctx._env);
-
-        if (debug) {
-            System.out.println("rest of name: " + cpe.getRemainingName());
-        }
-
-        // Lookup resolved name to get resolved object
-        final java.lang.Object resolvedObj =
-            (resolvedName != null) ? ctx.callResolve(resolvedName) : ctx;
-
-        if (resolvedObj instanceof javax.naming.Context) {
-            // obj is a context and child is not found
-            // try getting its nns dynamically by constructing
-            // a Reference containing obj.
-            RefAddr addr = new RefAddr("nns") {
-                public java.lang.Object getContent() {
-                    return resolvedObj;
-                }
-                private static final long serialVersionUID =
-                    669984699392133792L;
-            };
-            Reference ref = new Reference("java.lang.Object", addr);
-
-            // Resolved name has trailing slash to indicate nns
-            CompositeName cname = new CompositeName();
-            cname.add(""); // add trailing slash
-
-            cpe.setResolvedObj(ref);
-            cpe.setAltName(cname);
-            cpe.setAltNameCtx((javax.naming.Context)resolvedObj);
-
-            return cpe;
-        } else {
-            // Not a context, use object factory to transform object.
-
-            Name cname = CNNameParser.cosNameToName(resolvedName);
-            java.lang.Object resolvedObj2;
-            try {
-                resolvedObj2 = NamingManager.getObjectInstance(resolvedObj,
-                    cname, ctx, ctx._env);
-            } catch (NamingException ge) {
-                throw ge;
-            } catch (Exception ge) {
-                NamingException ne = new NamingException(
-                    "problem generating object using object factory");
-                ne.setRootCause(ge);
-                throw ne;
-            }
-
-            // If a context, continue operation with context
-            if (resolvedObj2 instanceof javax.naming.Context) {
-                cpe.setResolvedObj(resolvedObj2);
-            } else {
-                // Add trailing slash
-                cname.add("");
-                cpe.setAltName(cname);
-
-                // Create nns reference
-                final java.lang.Object rf2 = resolvedObj2;
-                RefAddr addr = new RefAddr("nns") {
-                    public java.lang.Object getContent() {
-                        return rf2;
-                    }
-                    private static final long serialVersionUID =
-                        -785132553978269772L;
-                };
-                Reference ref = new Reference("java.lang.Object", addr);
-                cpe.setResolvedObj(ref);
-                cpe.setAltNameCtx(ctx);
-            }
-            return cpe;
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/cosnaming/IiopUrl.java b/ojluni/src/main/java/com/sun/jndi/cosnaming/IiopUrl.java
deleted file mode 100755
index cf0307f..0000000
--- a/ojluni/src/main/java/com/sun/jndi/cosnaming/IiopUrl.java
+++ /dev/null
@@ -1,223 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-package com.sun.jndi.cosnaming;
-
-import javax.naming.Name;
-import javax.naming.NamingException;
-
-import java.net.MalformedURLException;
-import java.util.Vector;
-import java.util.StringTokenizer;
-import com.sun.jndi.toolkit.url.UrlUtil;
-
-/**
- * Extract components of an "iiop" or "iiopname" URL.
- *
- * The format of an iiopname URL is defined in INS 98-10-11 as follows:
- *
- * iiopname url = "iiopname://" [addr_list]["/" string_name]
- * addr_list    = [address ","]* address
- * address      = [version host [":" port]]
- * host         = DNS style host name | IP address
- * version      = major "." minor "@" | empty_string
- * port         = number
- * major        = number
- * minor        = number
- * string_name = stringified name | empty_string
- *
- * The default port is 9999. The default version is "1.0"
- * US-ASCII alphanumeric characters are not escaped. Any characters outside
- * of this range are escaped except for the following:
- * ; / : ? : @ & = + $ , - _ . ! ~ *  ' ( )
- * Escaped characters is escaped by using a % followed by its 2 hexadecimal
- * numbers representing the octet.
- *
- * For backward compatibility,  the "iiop" URL as defined in INS 97-6-6
- * is also supported:
- *
- * iiop url     = "iiop://" [host [":" port]] ["/" string_name]
- * The default port is 900.
- *
- * @author Rosanna Lee
- */
-
-public final class IiopUrl {
-    static final private int DEFAULT_IIOPNAME_PORT = 9999;
-    static final private int DEFAULT_IIOP_PORT = 900;
-    static final private String DEFAULT_HOST = "localhost";
-    private Vector addresses;
-    private String stringName;
-
-    public static class Address {
-        public int port = -1;
-        public int major, minor;
-        public String host;
-
-        public Address(String hostPortVers, boolean oldFormat)
-            throws MalformedURLException {
-            // [version host [":" port]]
-            int start;
-
-            // Parse version
-            int at;
-            if (oldFormat || (at = hostPortVers.indexOf('@')) < 0) {
-                major = 1;
-                minor = 0;
-                start = 0;     // start at the beginning
-            } else {
-                int dot = hostPortVers.indexOf('.');
-                if (dot < 0) {
-                    throw new MalformedURLException(
-                        "invalid version: " + hostPortVers);
-                }
-                try {
-                    major = Integer.parseInt(hostPortVers.substring(0, dot));
-                    minor = Integer.parseInt(hostPortVers.substring(dot+1, at));
-                } catch (NumberFormatException e) {
-                    throw new MalformedURLException(
-                        "Nonnumeric version: " + hostPortVers);
-                }
-                start = at + 1;  // skip '@' sign
-            }
-
-            // Parse host and port
-            int slash = hostPortVers.indexOf('/', start);
-            if (slash < 0) {
-                slash = hostPortVers.length();
-            }
-            if (hostPortVers.startsWith("[", start)) {  // at IPv6 literal
-                int brac = hostPortVers.indexOf(']', start + 1);
-                if (brac < 0 || brac > slash) {
-                    throw new IllegalArgumentException(
-                        "IiopURL: name is an Invalid URL: " + hostPortVers);
-                }
-
-                // include brackets
-                host = hostPortVers.substring(start, brac + 1);
-                start = brac + 1;
-            } else {      // at hostname or IPv4
-                int colon = hostPortVers.indexOf(':', start);
-                int hostEnd = (colon < 0 || colon > slash)
-                    ? slash
-                    : colon;
-                if (start < hostEnd) {
-                    host = hostPortVers.substring(start, hostEnd);
-                }
-                start = hostEnd;   // skip past host
-            }
-            if ((start + 1 < slash)) {
-                if ( hostPortVers.startsWith(":", start)) { // parse port
-                    start++;    // skip past ":"
-                    port = Integer.parseInt(hostPortVers.
-                                            substring(start, slash));
-                } else {
-                    throw new IllegalArgumentException(
-                        "IiopURL: name is an Invalid URL: " + hostPortVers);
-                }
-            }
-            start = slash;
-            if ("".equals(host) || host == null) {
-                host = DEFAULT_HOST ;
-            }
-            if (port == -1) {
-                port = (oldFormat ? DEFAULT_IIOP_PORT :
-                                DEFAULT_IIOPNAME_PORT);
-            }
-        }
-    }
-
-    public Vector getAddresses() {
-        return addresses;
-    }
-
-    /**
-     * Returns a possibly empty but non-null string that is the "string_name"
-     * portion of the URL.
-     */
-    public String getStringName() {
-        return stringName;
-    }
-
-    public Name getCosName() throws NamingException {
-        return CNCtx.parser.parse(stringName);
-    }
-
-    public IiopUrl(String url) throws MalformedURLException {
-        int addrStart;
-        boolean oldFormat;
-
-        if (url.startsWith("iiopname://")) {
-            oldFormat = false;
-            addrStart = 11;
-        } else if (url.startsWith("iiop://")) {
-            oldFormat = true;
-            addrStart = 7;
-        } else {
-            throw new MalformedURLException("Invalid iiop/iiopname URL: " + url);
-        }
-        int addrEnd = url.indexOf('/', addrStart);
-        if (addrEnd < 0) {
-            addrEnd = url.length();
-            stringName = "";
-        } else {
-            stringName = UrlUtil.decode(url.substring(addrEnd+1));
-        }
-        addresses = new Vector(3);
-        if (oldFormat) {
-            // Only one host:port part, not multiple
-            addresses.addElement(
-                new Address(url.substring(addrStart, addrEnd), oldFormat));
-        } else {
-            StringTokenizer tokens =
-                new StringTokenizer(url.substring(addrStart, addrEnd), ",");
-            while (tokens.hasMoreTokens()) {
-                addresses.addElement(new Address(tokens.nextToken(), oldFormat));
-            }
-            if (addresses.size() == 0) {
-                addresses.addElement(new Address("", oldFormat));
-            }
-        }
-    }
-
-    // for testing only
-    /*public static void main(String[] args) {
-        try {
-            IiopUrl url = new IiopUrl(args[0]);
-            Vector addrs = url.getAddresses();
-            String name = url.getStringName();
-
-            for (int i = 0; i < addrs.size(); i++) {
-                Address addr = (Address)addrs.elementAt(i);
-                System.out.println("host: " + addr.host);
-                System.out.println("port: " + addr.port);
-                System.out.println("version: " + addr.major + " " + addr.minor);
-            }
-            System.out.println("name: " + name);
-        } catch (MalformedURLException e) {
-            e.printStackTrace();
-        }
-    } */
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/cosnaming/OrbReuseTracker.java b/ojluni/src/main/java/com/sun/jndi/cosnaming/OrbReuseTracker.java
deleted file mode 100755
index 25063e7..0000000
--- a/ojluni/src/main/java/com/sun/jndi/cosnaming/OrbReuseTracker.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-package com.sun.jndi.cosnaming;
-
-import org.omg.CORBA.ORB;
-
-/**
- * This class keeps track of references to the shared ORB object
- * and destroys it when no more references are made to the ORB
- * object. This object is created for each ORB object that CNCtx
- * creates.
- */
-class OrbReuseTracker {
-
-    int referenceCnt;
-    ORB orb;
-
-    private static final boolean debug = false;
-
-    OrbReuseTracker(ORB orb) {
-        this.orb = orb;
-        referenceCnt++;
-        if (debug) {
-             System.out.println("New OrbReuseTracker created");
-        }
-    }
-
-    synchronized void incRefCount() {
-        referenceCnt++;
-        if (debug) {
-             System.out.println("Increment orb ref count to:" + referenceCnt);
-        }
-    }
-
-    synchronized void decRefCount() {
-        referenceCnt--;
-        if (debug) {
-             System.out.println("Decrement orb ref count to:" + referenceCnt);
-        }
-        if ((referenceCnt == 0)) {
-            if (debug) {
-                System.out.println("Destroying the ORB");
-            }
-            orb.destroy();
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/cosnaming/RemoteToCorba.java b/ojluni/src/main/java/com/sun/jndi/cosnaming/RemoteToCorba.java
deleted file mode 100755
index 8c104ba..0000000
--- a/ojluni/src/main/java/com/sun/jndi/cosnaming/RemoteToCorba.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-package com.sun.jndi.cosnaming;
-
-import javax.naming.*;
-import javax.naming.spi.StateFactory;
-import java.util.Hashtable;
-
-import org.omg.CORBA.ORB;
-
-import java.rmi.Remote;
-import java.rmi.server.ExportException;
-
-import com.sun.jndi.toolkit.corba.CorbaUtils;  // for RMI-IIOP
-
-/**
-  * StateFactory that turns java.rmi.Remote objects to org.omg.CORBA.Object.
-  *
-  * @author Rosanna Lee
-  */
-
-public class RemoteToCorba implements StateFactory {
-    public RemoteToCorba() {
-    }
-
-    /**
-     * Returns the CORBA object for a Remote object.
-     * If input is not a Remote object, or if Remote object uses JRMP, return null.
-     * If the RMI-IIOP library is not available, throw ConfigurationException.
-     *
-     * @param orig The object to turn into a CORBA object. If not Remote,
-     *             or if is a JRMP stub or impl, return null.
-     * @param name Ignored
-     * @param ctx The non-null CNCtx whose ORB to use.
-     * @param env Ignored
-     * @return The CORBA object for <tt>orig</tt> or null.
-     * @exception ConfigurationException If the CORBA object cannot be obtained
-     *    due to configuration problems, for instance, if RMI-IIOP not available.
-     * @exception NamingException If some other problem prevented a CORBA
-     *    object from being obtained from the Remote object.
-     */
-    public Object getStateToBind(Object orig, Name name, Context ctx,
-        Hashtable<?,?> env) throws NamingException {
-        if (orig instanceof org.omg.CORBA.Object) {
-            // Already a CORBA object, just use it
-            return null;
-        }
-
-        if (orig instanceof Remote) {
-            // Turn remote object into org.omg.CORBA.Object
-            try {
-                // Returns null if JRMP; let next factory try
-                // CNCtx will eventually throw IllegalArgumentException if
-                // no CORBA object gotten
-                return
-                    CorbaUtils.remoteToCorba((Remote)orig, ((CNCtx)ctx)._orb);
-            } catch (ClassNotFoundException e) {
-                // RMI-IIOP library not available
-                throw new ConfigurationException(
-                    "javax.rmi packages not available");
-            }
-        }
-        return null; // pass and let next state factory try
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/cosnaming/jndiprovider.properties b/ojluni/src/main/java/com/sun/jndi/cosnaming/jndiprovider.properties
deleted file mode 100755
index 23ace2d..0000000
--- a/ojluni/src/main/java/com/sun/jndi/cosnaming/jndiprovider.properties
+++ /dev/null
@@ -1,4 +0,0 @@
-# Provider resource file for the COS Naming service provider.
-
-# State factory to turn java.rmi.Remote into org.omg.CORBA.Object.
-java.naming.factory.state=com.sun.jndi.cosnaming.RemoteToCorba
diff --git a/ojluni/src/main/java/com/sun/jndi/dns/DnsClient.java b/ojluni/src/main/java/com/sun/jndi/dns/DnsClient.java
deleted file mode 100755
index e78ca99..0000000
--- a/ojluni/src/main/java/com/sun/jndi/dns/DnsClient.java
+++ /dev/null
@@ -1,695 +0,0 @@
-/*
- * Copyright (c) 2000, 2012, 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.jndi.dns;
-
-import java.io.IOException;
-import java.net.DatagramSocket;
-import java.net.DatagramPacket;
-import java.net.InetAddress;
-import java.net.Socket;
-import javax.naming.*;
-
-import java.util.Collections;
-import java.util.Map;
-import java.util.HashMap;
-import java.util.Set;
-import java.util.HashSet;
-
-// Some of this code began life as part of sun.javaos.net.DnsClient
-// originally by sritchie@eng 1/96.  It was first hacked up for JNDI
-// use by caveh@eng 6/97.
-
-
-/**
- * The DnsClient class performs DNS client operations in support of DnsContext.
- *
- */
-
-public class DnsClient {
-
-    // DNS packet header field offsets
-    private static final int IDENT_OFFSET = 0;
-    private static final int FLAGS_OFFSET = 2;
-    private static final int NUMQ_OFFSET  = 4;
-    private static final int NUMANS_OFFSET = 6;
-    private static final int NUMAUTH_OFFSET = 8;
-    private static final int NUMADD_OFFSET = 10;
-    private static final int DNS_HDR_SIZE = 12;
-
-    // DNS response codes
-    private static final int NO_ERROR       = 0;
-    private static final int FORMAT_ERROR   = 1;
-    private static final int SERVER_FAILURE = 2;
-    private static final int NAME_ERROR     = 3;
-    private static final int NOT_IMPL       = 4;
-    private static final int REFUSED        = 5;
-
-    private static final String[] rcodeDescription = {
-        "No error",
-        "DNS format error",
-        "DNS server failure",
-        "DNS name not found",
-        "DNS operation not supported",
-        "DNS service refused"
-    };
-
-    private static final int DEFAULT_PORT = 53;
-    private InetAddress[] servers;
-    private int[] serverPorts;
-    private int timeout;                // initial timeout on UDP queries in ms
-    private int retries;                // number of UDP retries
-
-    private DatagramSocket udpSocket;
-
-    // Requests sent
-    private Set<Integer> reqs;
-
-    // Responses received
-    private Map<Integer, byte[]> resps;
-
-    //-------------------------------------------------------------------------
-
-    /*
-     * Each server is of the form "server[:port]".  IPv6 literal host names
-     * include delimiting brackets.
-     * "timeout" is the initial timeout interval (in ms) for UDP queries,
-     * and "retries" gives the number of retries per server.
-     */
-    public DnsClient(String[] servers, int timeout, int retries)
-            throws NamingException {
-        this.timeout = timeout;
-        this.retries = retries;
-        try {
-            udpSocket = new DatagramSocket();
-        } catch (java.net.SocketException e) {
-            NamingException ne = new ConfigurationException();
-            ne.setRootCause(e);
-            throw ne;
-        }
-
-        this.servers = new InetAddress[servers.length];
-        serverPorts = new int[servers.length];
-
-        for (int i = 0; i < servers.length; i++) {
-
-            // Is optional port given?
-            int colon = servers[i].indexOf(':',
-                                           servers[i].indexOf(']') + 1);
-
-            serverPorts[i] = (colon < 0)
-                ? DEFAULT_PORT
-                : Integer.parseInt(servers[i].substring(colon + 1));
-            String server = (colon < 0)
-                ? servers[i]
-                : servers[i].substring(0, colon);
-            try {
-                this.servers[i] = InetAddress.getByName(server);
-            } catch (java.net.UnknownHostException e) {
-                NamingException ne = new ConfigurationException(
-                        "Unknown DNS server: " + server);
-                ne.setRootCause(e);
-                throw ne;
-            }
-        }
-        reqs = Collections.synchronizedSet(new HashSet<Integer>());
-        resps = Collections.synchronizedMap(new HashMap<Integer, byte[]>());
-    }
-
-    protected void finalize() {
-        close();
-    }
-
-    // A lock to access the request and response queues in tandem.
-    private Object queuesLock = new Object();
-
-    public void close() {
-        udpSocket.close();
-        synchronized (queuesLock) {
-            reqs.clear();
-            resps.clear();
-        }
-    }
-
-
-    private int ident = 0;              // used to set the msg ID field
-    private Object identLock = new Object();
-
-    /*
-     * If recursion is true, recursion is requested on the query.
-     * If auth is true, only authoritative responses are accepted; other
-     * responses throw NameNotFoundException.
-     */
-    ResourceRecords query(DnsName fqdn, int qclass, int qtype,
-                          boolean recursion, boolean auth)
-            throws NamingException {
-
-        int xid;
-        synchronized (identLock) {
-            ident = 0xFFFF & (ident + 1);
-            xid = ident;
-        }
-
-        // enqueue the outstanding request
-        reqs.add(xid);
-
-        Packet pkt = makeQueryPacket(fqdn, xid, qclass, qtype, recursion);
-
-        Exception caughtException = null;
-        boolean[] doNotRetry = new boolean[servers.length];
-
-        //
-        // The UDP retry strategy is to try the 1st server, and then
-        // each server in order. If no answer, double the timeout
-        // and try each server again.
-        //
-        for (int retry = 0; retry < retries; retry++) {
-
-            // Try each name server.
-            for (int i = 0; i < servers.length; i++) {
-                if (doNotRetry[i]) {
-                    continue;
-                }
-
-                // send the request packet and wait for a response.
-                try {
-                    if (debug) {
-                        dprint("SEND ID (" + (retry + 1) + "): " + xid);
-                    }
-
-                    byte[] msg = null;
-                    msg = doUdpQuery(pkt, servers[i], serverPorts[i],
-                                        retry, xid);
-                    //
-                    // If the matching response is not got within the
-                    // given timeout, check if the response was enqueued
-                    // by some other thread, if not proceed with the next
-                    // server or retry.
-                    //
-                    if (msg == null) {
-                        if (resps.size() > 0) {
-                            msg = lookupResponse(xid);
-                        }
-                        if (msg == null) { // try next server or retry
-                            continue;
-                        }
-                    }
-                    Header hdr = new Header(msg, msg.length);
-
-                    if (auth && !hdr.authoritative) {
-                        caughtException = new NameNotFoundException(
-                                "DNS response not authoritative");
-                        doNotRetry[i] = true;
-                        continue;
-                    }
-                    if (hdr.truncated) {    // message is truncated -- try TCP
-
-                        // Try each server, starting with the one that just
-                        // provided the truncated message.
-                        for (int j = 0; j < servers.length; j++) {
-                            int ij = (i + j) % servers.length;
-                            if (doNotRetry[ij]) {
-                                continue;
-                            }
-                            try {
-                                Tcp tcp =
-                                    new Tcp(servers[ij], serverPorts[ij]);
-                                byte[] msg2;
-                                try {
-                                    msg2 = doTcpQuery(tcp, pkt);
-                                } finally {
-                                    tcp.close();
-                                }
-                                Header hdr2 = new Header(msg2, msg2.length);
-                                if (hdr2.query) {
-                                    throw new CommunicationException(
-                                        "DNS error: expecting response");
-                                }
-                                checkResponseCode(hdr2);
-
-                                if (!auth || hdr2.authoritative) {
-                                    // Got a valid response
-                                    hdr = hdr2;
-                                    msg = msg2;
-                                    break;
-                                } else {
-                                    doNotRetry[ij] = true;
-                                }
-                            } catch (Exception e) {
-                                // Try next server, or use UDP response
-                            }
-                        } // servers
-                    }
-                    return new ResourceRecords(msg, msg.length, hdr, false);
-
-                } catch (IOException e) {
-                    if (debug) {
-                        dprint("Caught IOException:" + e);
-                    }
-                    if (caughtException == null) {
-                        caughtException = e;
-                    }
-                    // Use reflection to allow pre-1.4 compilation.
-                    // This won't be needed much longer.
-                    if (e.getClass().getName().equals(
-                            "java.net.PortUnreachableException")) {
-                        doNotRetry[i] = true;
-                    }
-                } catch (NameNotFoundException e) {
-                    throw e;
-                } catch (CommunicationException e) {
-                    if (caughtException == null) {
-                        caughtException = e;
-                    }
-                } catch (NamingException e) {
-                    if (caughtException == null) {
-                        caughtException = e;
-                    }
-                    doNotRetry[i] = true;
-                }
-            } // servers
-        } // retries
-
-        reqs.remove(xid);
-        if (caughtException instanceof NamingException) {
-            throw (NamingException) caughtException;
-        }
-        // A network timeout or other error occurred.
-        NamingException ne = new CommunicationException("DNS error");
-        ne.setRootCause(caughtException);
-        throw ne;
-    }
-
-    ResourceRecords queryZone(DnsName zone, int qclass, boolean recursion)
-            throws NamingException {
-
-        int xid;
-        synchronized (identLock) {
-            ident = 0xFFFF & (ident + 1);
-            xid = ident;
-        }
-        Packet pkt = makeQueryPacket(zone, xid, qclass,
-                                     ResourceRecord.QTYPE_AXFR, recursion);
-        Exception caughtException = null;
-
-        // Try each name server.
-        for (int i = 0; i < servers.length; i++) {
-            try {
-                Tcp tcp = new Tcp(servers[i], serverPorts[i]);
-                byte[] msg;
-                try {
-                    msg = doTcpQuery(tcp, pkt);
-                    Header hdr = new Header(msg, msg.length);
-                    // Check only rcode as per
-                    // draft-ietf-dnsext-axfr-clarify-04
-                    checkResponseCode(hdr);
-                    ResourceRecords rrs =
-                        new ResourceRecords(msg, msg.length, hdr, true);
-                    if (rrs.getFirstAnsType() != ResourceRecord.TYPE_SOA) {
-                        throw new CommunicationException(
-                                "DNS error: zone xfer doesn't begin with SOA");
-                    }
-
-                    if (rrs.answer.size() == 1 ||
-                            rrs.getLastAnsType() != ResourceRecord.TYPE_SOA) {
-                        // The response is split into multiple DNS messages.
-                        do {
-                            msg = continueTcpQuery(tcp);
-                            if (msg == null) {
-                                throw new CommunicationException(
-                                        "DNS error: incomplete zone transfer");
-                            }
-                            hdr = new Header(msg, msg.length);
-                            checkResponseCode(hdr);
-                            rrs.add(msg, msg.length, hdr);
-                        } while (rrs.getLastAnsType() !=
-                                 ResourceRecord.TYPE_SOA);
-                    }
-
-                    // Delete the duplicate SOA record.
-                    rrs.answer.removeElementAt(rrs.answer.size() - 1);
-                    return rrs;
-
-                } finally {
-                    tcp.close();
-                }
-
-            } catch (IOException e) {
-                caughtException = e;
-            } catch (NameNotFoundException e) {
-                throw e;
-            } catch (NamingException e) {
-                caughtException = e;
-            }
-        }
-        if (caughtException instanceof NamingException) {
-            throw (NamingException) caughtException;
-        }
-        NamingException ne = new CommunicationException(
-                "DNS error during zone transfer");
-        ne.setRootCause(caughtException);
-        throw ne;
-    }
-
-
-    /**
-     * Tries to retreive an UDP packet matching the given xid
-     * received within the timeout.
-     * If a packet with different xid is received, the received packet
-     * is enqueued with the corresponding xid in 'resps'.
-     */
-    private byte[] doUdpQuery(Packet pkt, InetAddress server,
-                                     int port, int retry, int xid)
-            throws IOException, NamingException {
-
-        int minTimeout = 50; // msec after which there are no retries.
-
-        synchronized (udpSocket) {
-            DatagramPacket opkt = new DatagramPacket(
-                    pkt.getData(), pkt.length(), server, port);
-            DatagramPacket ipkt = new DatagramPacket(new byte[8000], 8000);
-            udpSocket.connect(server, port);
-            int pktTimeout = (timeout * (1 << retry));
-            try {
-                udpSocket.send(opkt);
-
-                // timeout remaining after successive 'receive()'
-                int timeoutLeft = pktTimeout;
-                int cnt = 0;
-                do {
-                    if (debug) {
-                       cnt++;
-                        dprint("Trying RECEIVE(" +
-                                cnt + ") retry(" + (retry + 1) +
-                                ") for:" + xid  + "    sock-timeout:" +
-                                timeoutLeft + " ms.");
-                    }
-                    udpSocket.setSoTimeout(timeoutLeft);
-                    long start = System.currentTimeMillis();
-                    udpSocket.receive(ipkt);
-                    long end = System.currentTimeMillis();
-
-                    byte[] data = new byte[ipkt.getLength()];
-                    data = ipkt.getData();
-                    if (isMatchResponse(data, xid)) {
-                        return data;
-                    }
-                    timeoutLeft = pktTimeout - ((int) (end - start));
-                } while (timeoutLeft > minTimeout);
-
-            } finally {
-                udpSocket.disconnect();
-            }
-            return null; // no matching packet received within the timeout
-        }
-    }
-
-    /*
-     * Sends a TCP query, and returns the first DNS message in the response.
-     */
-    private byte[] doTcpQuery(Tcp tcp, Packet pkt) throws IOException {
-
-        int len = pkt.length();
-        // Send 2-byte message length, then send message.
-        tcp.out.write(len >> 8);
-        tcp.out.write(len);
-        tcp.out.write(pkt.getData(), 0, len);
-        tcp.out.flush();
-
-        byte[] msg = continueTcpQuery(tcp);
-        if (msg == null) {
-            throw new IOException("DNS error: no response");
-        }
-        return msg;
-    }
-
-    /*
-     * Returns the next DNS message from the TCP socket, or null on EOF.
-     */
-    private byte[] continueTcpQuery(Tcp tcp) throws IOException {
-
-        int lenHi = tcp.in.read();      // high-order byte of response length
-        if (lenHi == -1) {
-            return null;        // EOF
-        }
-        int lenLo = tcp.in.read();      // low-order byte of response length
-        if (lenLo == -1) {
-            throw new IOException("Corrupted DNS response: bad length");
-        }
-        int len = (lenHi << 8) | lenLo;
-        byte[] msg = new byte[len];
-        int pos = 0;                    // next unfilled position in msg
-        while (len > 0) {
-            int n = tcp.in.read(msg, pos, len);
-            if (n == -1) {
-                throw new IOException(
-                        "Corrupted DNS response: too little data");
-            }
-            len -= n;
-            pos += n;
-        }
-        return msg;
-    }
-
-    private Packet makeQueryPacket(DnsName fqdn, int xid,
-                                   int qclass, int qtype, boolean recursion) {
-        int qnameLen = fqdn.getOctets();
-        int pktLen = DNS_HDR_SIZE + qnameLen + 4;
-        Packet pkt = new Packet(pktLen);
-
-        short flags = recursion ? Header.RD_BIT : 0;
-
-        pkt.putShort(xid, IDENT_OFFSET);
-        pkt.putShort(flags, FLAGS_OFFSET);
-        pkt.putShort(1, NUMQ_OFFSET);
-        pkt.putShort(0, NUMANS_OFFSET);
-        pkt.putInt(0, NUMAUTH_OFFSET);
-
-        makeQueryName(fqdn, pkt, DNS_HDR_SIZE);
-        pkt.putShort(qtype, DNS_HDR_SIZE + qnameLen);
-        pkt.putShort(qclass, DNS_HDR_SIZE + qnameLen + 2);
-
-        return pkt;
-    }
-
-    // Builds a query name in pkt according to the RFC spec.
-    private void makeQueryName(DnsName fqdn, Packet pkt, int off) {
-
-        // Loop through labels, least-significant first.
-        for (int i = fqdn.size() - 1; i >= 0; i--) {
-            String label = fqdn.get(i);
-            int len = label.length();
-
-            pkt.putByte(len, off++);
-            for (int j = 0; j < len; j++) {
-                pkt.putByte(label.charAt(j), off++);
-            }
-        }
-        if (!fqdn.hasRootLabel()) {
-            pkt.putByte(0, off);
-        }
-    }
-
-    //-------------------------------------------------------------------------
-
-    private byte[] lookupResponse(Integer xid) throws NamingException {
-        //
-        // Check the queued responses: some other thread in between
-        // received the response for this request.
-        //
-        if (debug) {
-            dprint("LOOKUP for: " + xid +
-                "\tResponse Q:" + resps);
-        }
-        byte[] pkt;
-        if ((pkt = (byte[]) resps.get(xid)) != null) {
-            checkResponseCode(new Header(pkt, pkt.length));
-            synchronized (queuesLock) {
-                resps.remove(xid);
-                reqs.remove(xid);
-            }
-
-            if (debug) {
-                dprint("FOUND (" + Thread.currentThread() +
-                    ") for:" + xid);
-            }
-        }
-        return pkt;
-    }
-
-    /*
-     * Checks the header of an incoming DNS response.
-     * Returns true if it matches the given xid and throws a naming
-     * exception, if appropriate, based on the response code.
-     */
-    private boolean isMatchResponse(byte[] pkt, int xid)
-                throws NamingException {
-
-        Header hdr = new Header(pkt, pkt.length);
-        if (hdr.query) {
-            throw new CommunicationException("DNS error: expecting response");
-        }
-
-        if (!reqs.contains(xid)) { // already received, ignore the response
-            return false;
-        }
-
-        // common case- the request sent matches the subsequent response read
-        if (hdr.xid == xid) {
-            if (debug) {
-                dprint("XID MATCH:" + xid);
-            }
-
-            checkResponseCode(hdr);
-            // remove the response for the xid if received by some other thread.
-            synchronized (queuesLock) {
-                resps.remove(xid);
-                reqs.remove(xid);
-            }
-            return true;
-        }
-
-        //
-        // xid mis-match: enqueue the response, it may belong to some other
-        // thread that has not yet had a chance to read its response.
-        // enqueue only the first response, responses for retries are ignored.
-        //
-        synchronized (queuesLock) {
-            if (reqs.contains(hdr.xid)) { // enqueue only the first response
-                resps.put(hdr.xid, pkt);
-            }
-        }
-
-        if (debug) {
-            dprint("NO-MATCH SEND ID:" +
-                                xid + " RECVD ID:" + hdr.xid +
-                                "    Response Q:" + resps +
-                                "    Reqs size:" + reqs.size());
-        }
-        return false;
-    }
-
-    /*
-     * Throws an exception if appropriate for the response code of a
-     * given header.
-     */
-    private void checkResponseCode(Header hdr) throws NamingException {
-
-        int rcode = hdr.rcode;
-        if (rcode == NO_ERROR) {
-            return;
-        }
-        String msg = (rcode < rcodeDescription.length)
-            ? rcodeDescription[rcode]
-            : "DNS error";
-        msg += " [response code " + rcode + "]";
-
-        switch (rcode) {
-        case SERVER_FAILURE:
-            throw new ServiceUnavailableException(msg);
-        case NAME_ERROR:
-            throw new NameNotFoundException(msg);
-        case NOT_IMPL:
-        case REFUSED:
-            throw new OperationNotSupportedException(msg);
-        case FORMAT_ERROR:
-        default:
-            throw new NamingException(msg);
-        }
-    }
-
-    //-------------------------------------------------------------------------
-
-    private static final boolean debug = false;
-
-    private static void dprint(String mess) {
-        if (debug) {
-            System.err.println("DNS: " + mess);
-        }
-    }
-
-}
-
-class Tcp {
-
-    private Socket sock;
-    java.io.InputStream in;
-    java.io.OutputStream out;
-
-    Tcp(InetAddress server, int port) throws IOException {
-        sock = new Socket(server, port);
-        sock.setTcpNoDelay(true);
-        out = new java.io.BufferedOutputStream(sock.getOutputStream());
-        in = new java.io.BufferedInputStream(sock.getInputStream());
-    }
-
-    void close() throws IOException {
-        sock.close();
-    }
-}
-
-/*
- * javaos emulation -cj
- */
-class Packet {
-        byte buf[];
-
-        Packet(int len) {
-                buf = new byte[len];
-        }
-
-        Packet(byte data[], int len) {
-                buf = new byte[len];
-                System.arraycopy(data, 0, buf, 0, len);
-        }
-
-        void putInt(int x, int off) {
-                buf[off + 0] = (byte)(x >> 24);
-                buf[off + 1] = (byte)(x >> 16);
-                buf[off + 2] = (byte)(x >> 8);
-                buf[off + 3] = (byte)x;
-        }
-
-        void putShort(int x, int off) {
-                buf[off + 0] = (byte)(x >> 8);
-                buf[off + 1] = (byte)x;
-        }
-
-        void putByte(int x, int off) {
-                buf[off] = (byte)x;
-        }
-
-        void putBytes(byte src[], int src_offset, int dst_offset, int len) {
-                System.arraycopy(src, src_offset, buf, dst_offset, len);
-        }
-
-        int length() {
-                return buf.length;
-        }
-
-        byte[] getData() {
-                return buf;
-        }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/dns/DnsContext.java b/ojluni/src/main/java/com/sun/jndi/dns/DnsContext.java
deleted file mode 100755
index 337fe8d..0000000
--- a/ojluni/src/main/java/com/sun/jndi/dns/DnsContext.java
+++ /dev/null
@@ -1,1068 +0,0 @@
-/*
- * Copyright (c) 2000, 2009, 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.jndi.dns;
-
-
-import java.util.Enumeration;
-import java.util.Hashtable;
-
-import javax.naming.*;
-import javax.naming.directory.*;
-import javax.naming.spi.DirectoryManager;
-
-import com.sun.jndi.toolkit.ctx.*;
-
-
-/**
- * A DnsContext is a directory context representing a DNS node.
- *
- * @author Scott Seligman
- */
-
-
-public class DnsContext extends ComponentDirContext {
-
-    DnsName domain;             // fully-qualified domain name of this context,
-                                // with a root (empty) label at position 0
-    Hashtable environment;
-    private boolean envShared;  // true if environment is possibly shared
-                                // and so must be copied on write
-    private boolean parentIsDns;        // was this DnsContext created by
-                                        // another?  see composeName()
-    private String[] servers;
-    private Resolver resolver;
-
-    private boolean authoritative;      // must all responses be authoritative?
-    private boolean recursion;          // request recursion on queries?
-    private int timeout;                // initial timeout on UDP queries in ms
-    private int retries;                // number of UDP retries
-
-    static final NameParser nameParser = new DnsNameParser();
-
-    // Timeouts for UDP queries use exponential backoff:  each retry
-    // is for twice as long as the last.  The following constants set
-    // the defaults for the initial timeout (in ms) and the number of
-    // retries, and name the environment properties used to override
-    // these defaults.
-    private static final int DEFAULT_INIT_TIMEOUT = 1000;
-    private static final int DEFAULT_RETRIES = 4;
-    private static final String INIT_TIMEOUT =
-                                          "com.sun.jndi.dns.timeout.initial";
-    private static final String RETRIES = "com.sun.jndi.dns.timeout.retries";
-
-    // The resource record type and class to use for lookups, and the
-    // property used to modify them
-    private CT lookupCT;
-    private static final String LOOKUP_ATTR = "com.sun.jndi.dns.lookup.attr";
-
-    // Property used to disallow recursion on queries
-    private static final String RECURSION = "com.sun.jndi.dns.recursion";
-
-    // ANY == ResourceRecord.QCLASS_STAR == ResourceRecord.QTYPE_STAR
-    private static final int ANY = ResourceRecord.QTYPE_STAR;
-
-    // The zone tree used for list operations
-    private static final ZoneNode zoneTree = new ZoneNode(null);
-
-
-    /**
-     * Returns a DNS context for a given domain and servers.
-     * Each server is of the form "server[:port]".
-     * IPv6 literal host names include delimiting brackets.
-     * There must be at least one server.
-     * The environment must not be null; it is cloned before being stored.
-     */
-    public DnsContext(String domain, String[] servers, Hashtable environment)
-            throws NamingException {
-
-        this.domain = new DnsName(domain.endsWith(".")
-                                  ? domain
-                                  : domain + ".");
-        this.servers = servers;
-        this.environment = (Hashtable) environment.clone();
-        envShared = false;
-        parentIsDns = false;
-        resolver = null;
-
-        initFromEnvironment();
-    }
-
-    /*
-     * Returns a clone of a DNS context, just like DnsContext(DnsContext)
-     * but with a different domain name and with parentIsDns set to true.
-     */
-    DnsContext(DnsContext ctx, DnsName domain) {
-        this(ctx);
-        this.domain = domain;
-        parentIsDns = true;
-    }
-
-    /*
-     * Returns a clone of a DNS context.  The context's modifiable
-     * private state is independent of the original's (so closing one
-     * context, for example, won't close the other).  The two contexts
-     * share <tt>environment</tt>, but it's copy-on-write so there's
-     * no conflict.
-     */
-    private DnsContext(DnsContext ctx) {
-        environment = ctx.environment;
-        envShared = ctx.envShared = true;
-        parentIsDns = ctx.parentIsDns;
-        domain = ctx.domain;
-        servers = ctx.servers;
-        resolver = ctx.resolver;
-        authoritative = ctx.authoritative;
-        recursion = ctx.recursion;
-        timeout = ctx.timeout;
-        retries = ctx.retries;
-        lookupCT = ctx.lookupCT;
-    }
-
-    public void close() {
-        if (resolver != null) {
-            resolver.close();
-            resolver = null;
-        }
-    }
-
-
-    //---------- Environment operations
-
-    /*
-     * Override default with a noncloning version.
-     */
-    protected Hashtable p_getEnvironment() {
-        return environment;
-    }
-
-    public Hashtable getEnvironment() throws NamingException {
-        return (Hashtable) environment.clone();
-    }
-
-    public Object addToEnvironment(String propName, Object propVal)
-            throws NamingException {
-
-        if (propName.equals(LOOKUP_ATTR)) {
-            lookupCT = getLookupCT((String) propVal);
-        } else if (propName.equals(Context.AUTHORITATIVE)) {
-            authoritative = "true".equalsIgnoreCase((String) propVal);
-        } else if (propName.equals(RECURSION)) {
-            recursion = "true".equalsIgnoreCase((String) propVal);
-        } else if (propName.equals(INIT_TIMEOUT)) {
-            int val = Integer.parseInt((String) propVal);
-            if (timeout != val) {
-                timeout = val;
-                resolver = null;
-            }
-        } else if (propName.equals(RETRIES)) {
-            int val = Integer.parseInt((String) propVal);
-            if (retries != val) {
-                retries = val;
-                resolver = null;
-            }
-        }
-
-        if (!envShared) {
-            return environment.put(propName, propVal);
-        } else if (environment.get(propName) != propVal) {
-            // copy on write
-            environment = (Hashtable) environment.clone();
-            envShared = false;
-            return environment.put(propName, propVal);
-        } else {
-            return propVal;
-        }
-    }
-
-    public Object removeFromEnvironment(String propName)
-            throws NamingException {
-
-        if (propName.equals(LOOKUP_ATTR)) {
-            lookupCT = getLookupCT(null);
-        } else if (propName.equals(Context.AUTHORITATIVE)) {
-            authoritative = false;
-        } else if (propName.equals(RECURSION)) {
-            recursion = true;
-        } else if (propName.equals(INIT_TIMEOUT)) {
-            if (timeout != DEFAULT_INIT_TIMEOUT) {
-                timeout = DEFAULT_INIT_TIMEOUT;
-                resolver = null;
-            }
-        } else if (propName.equals(RETRIES)) {
-            if (retries != DEFAULT_RETRIES) {
-                retries = DEFAULT_RETRIES;
-                resolver = null;
-            }
-        }
-
-        if (!envShared) {
-            return environment.remove(propName);
-        } else if (environment.get(propName) != null) {
-            // copy-on-write
-            environment = (Hashtable) environment.clone();
-            envShared = false;
-            return environment.remove(propName);
-        } else {
-            return null;
-        }
-    }
-
-    /*
-     * Update PROVIDER_URL property.  Call this only when environment
-     * is not being shared.
-     */
-    void setProviderUrl(String url) {
-        // assert !envShared;
-        environment.put(Context.PROVIDER_URL, url);
-    }
-
-    /*
-     * Read environment properties and set parameters.
-     */
-    private void initFromEnvironment()
-            throws InvalidAttributeIdentifierException {
-
-        lookupCT = getLookupCT((String) environment.get(LOOKUP_ATTR));
-        authoritative = "true".equalsIgnoreCase((String)
-                                       environment.get(Context.AUTHORITATIVE));
-        String val = (String) environment.get(RECURSION);
-        recursion = ((val == null) ||
-                     "true".equalsIgnoreCase(val));
-        val = (String) environment.get(INIT_TIMEOUT);
-        timeout = (val == null)
-            ? DEFAULT_INIT_TIMEOUT
-            : Integer.parseInt(val);
-        val = (String) environment.get(RETRIES);
-        retries = (val == null)
-            ? DEFAULT_RETRIES
-            : Integer.parseInt(val);
-    }
-
-    private CT getLookupCT(String attrId)
-            throws InvalidAttributeIdentifierException {
-        return (attrId == null)
-            ? new CT(ResourceRecord.CLASS_INTERNET, ResourceRecord.TYPE_TXT)
-            : fromAttrId(attrId);
-    }
-
-
-    //---------- Naming operations
-
-    public Object c_lookup(Name name, Continuation cont)
-            throws NamingException {
-
-        cont.setSuccess();
-        if (name.isEmpty()) {
-            DnsContext ctx = new DnsContext(this);
-            ctx.resolver = new Resolver(servers, timeout, retries);
-                                                // clone for parallelism
-            return ctx;
-        }
-        try {
-            DnsName fqdn = fullyQualify(name);
-            ResourceRecords rrs =
-                getResolver().query(fqdn, lookupCT.rrclass, lookupCT.rrtype,
-                                    recursion, authoritative);
-            Attributes attrs = rrsToAttrs(rrs, null);
-            DnsContext ctx = new DnsContext(this, fqdn);
-            return DirectoryManager.getObjectInstance(ctx, name, this,
-                                                      environment, attrs);
-        } catch (NamingException e) {
-            cont.setError(this, name);
-            throw cont.fillInException(e);
-        } catch (Exception e) {
-            cont.setError(this, name);
-            NamingException ne = new NamingException(
-                    "Problem generating object using object factory");
-            ne.setRootCause(e);
-            throw cont.fillInException(ne);
-        }
-    }
-
-    public Object c_lookupLink(Name name, Continuation cont)
-            throws NamingException {
-        return c_lookup(name, cont);
-    }
-
-    public NamingEnumeration c_list(Name name, Continuation cont)
-            throws NamingException {
-        cont.setSuccess();
-        try {
-            DnsName fqdn = fullyQualify(name);
-            NameNode nnode = getNameNode(fqdn);
-            DnsContext ctx = new DnsContext(this, fqdn);
-            return new NameClassPairEnumeration(ctx, nnode.getChildren());
-
-        } catch (NamingException e) {
-            cont.setError(this, name);
-            throw cont.fillInException(e);
-        }
-    }
-
-    public NamingEnumeration c_listBindings(Name name, Continuation cont)
-            throws NamingException {
-        cont.setSuccess();
-        try {
-            DnsName fqdn = fullyQualify(name);
-            NameNode nnode = getNameNode(fqdn);
-            DnsContext ctx = new DnsContext(this, fqdn);
-            return new BindingEnumeration(ctx, nnode.getChildren());
-
-        } catch (NamingException e) {
-            cont.setError(this, name);
-            throw cont.fillInException(e);
-        }
-    }
-
-    public void c_bind(Name name, Object obj, Continuation cont)
-            throws NamingException {
-        cont.setError(this, name);
-        throw cont.fillInException(
-                new OperationNotSupportedException());
-    }
-
-    public void c_rebind(Name name, Object obj, Continuation cont)
-            throws NamingException {
-        cont.setError(this, name);
-        throw cont.fillInException(
-                new OperationNotSupportedException());
-    }
-
-    public void c_unbind(Name name, Continuation cont)
-            throws NamingException {
-        cont.setError(this, name);
-        throw cont.fillInException(
-                new OperationNotSupportedException());
-    }
-
-    public void c_rename(Name oldname, Name newname, Continuation cont)
-            throws NamingException {
-        cont.setError(this, oldname);
-        throw cont.fillInException(
-                new OperationNotSupportedException());
-    }
-
-    public Context c_createSubcontext(Name name, Continuation cont)
-            throws NamingException {
-        cont.setError(this, name);
-        throw cont.fillInException(
-                new OperationNotSupportedException());
-    }
-
-    public void c_destroySubcontext(Name name, Continuation cont)
-            throws NamingException {
-        cont.setError(this, name);
-        throw cont.fillInException(
-                new OperationNotSupportedException());
-    }
-
-    public NameParser c_getNameParser(Name name, Continuation cont)
-            throws NamingException {
-        cont.setSuccess();
-        return nameParser;
-    }
-
-
-    //---------- Directory operations
-
-    public void c_bind(Name name,
-                       Object obj,
-                       Attributes attrs,
-                       Continuation cont)
-            throws NamingException {
-        cont.setError(this, name);
-        throw cont.fillInException(
-                new OperationNotSupportedException());
-    }
-
-    public void c_rebind(Name name,
-                         Object obj,
-                         Attributes attrs,
-                         Continuation cont)
-            throws NamingException {
-        cont.setError(this, name);
-        throw cont.fillInException(
-                new OperationNotSupportedException());
-    }
-
-    public DirContext c_createSubcontext(Name name,
-                                         Attributes attrs,
-                                         Continuation cont)
-            throws NamingException {
-        cont.setError(this, name);
-        throw cont.fillInException(
-                new OperationNotSupportedException());
-    }
-
-    public Attributes c_getAttributes(Name name,
-                                      String[] attrIds,
-                                      Continuation cont)
-            throws NamingException {
-
-        cont.setSuccess();
-        try {
-            DnsName fqdn = fullyQualify(name);
-            CT[] cts = attrIdsToClassesAndTypes(attrIds);
-            CT ct = getClassAndTypeToQuery(cts);
-            ResourceRecords rrs =
-                getResolver().query(fqdn, ct.rrclass, ct.rrtype,
-                                    recursion, authoritative);
-            return rrsToAttrs(rrs, cts);
-
-        } catch (NamingException e) {
-            cont.setError(this, name);
-            throw cont.fillInException(e);
-        }
-    }
-
-    public void c_modifyAttributes(Name name,
-                                   int mod_op,
-                                   Attributes attrs,
-                                   Continuation cont)
-            throws NamingException {
-        cont.setError(this, name);
-        throw cont.fillInException(
-                new OperationNotSupportedException());
-    }
-
-    public void c_modifyAttributes(Name name,
-                                   ModificationItem[] mods,
-                                   Continuation cont)
-            throws NamingException {
-        cont.setError(this, name);
-        throw cont.fillInException(
-                new OperationNotSupportedException());
-    }
-
-    public NamingEnumeration c_search(Name name,
-                                      Attributes matchingAttributes,
-                                      String[] attributesToReturn,
-                                      Continuation cont)
-            throws NamingException {
-        throw new OperationNotSupportedException();
-    }
-
-    public NamingEnumeration c_search(Name name,
-                                      String filter,
-                                      SearchControls cons,
-                                      Continuation cont)
-            throws NamingException {
-        throw new OperationNotSupportedException();
-    }
-
-    public NamingEnumeration c_search(Name name,
-                                      String filterExpr,
-                                      Object[] filterArgs,
-                                      SearchControls cons,
-                                      Continuation cont)
-            throws NamingException {
-        throw new OperationNotSupportedException();
-    }
-
-    public DirContext c_getSchema(Name name, Continuation cont)
-            throws NamingException {
-        cont.setError(this, name);
-        throw cont.fillInException(
-                new OperationNotSupportedException());
-    }
-
-    public DirContext c_getSchemaClassDefinition(Name name, Continuation cont)
-            throws NamingException {
-        cont.setError(this, name);
-        throw cont.fillInException(
-                new OperationNotSupportedException());
-    }
-
-
-    //---------- Name-related operations
-
-    public String getNameInNamespace() {
-        return domain.toString();
-    }
-
-    public Name composeName(Name name, Name prefix) throws NamingException {
-        Name result;
-
-        // Any name that's not a CompositeName is assumed to be a DNS
-        // compound name.  Convert each to a DnsName for syntax checking.
-        if (!(prefix instanceof DnsName || prefix instanceof CompositeName)) {
-            prefix = (new DnsName()).addAll(prefix);
-        }
-        if (!(name instanceof DnsName || name instanceof CompositeName)) {
-            name = (new DnsName()).addAll(name);
-        }
-
-        // Each of prefix and name is now either a DnsName or a CompositeName.
-
-        // If we have two DnsNames, simply join them together.
-        if ((prefix instanceof DnsName) && (name instanceof DnsName)) {
-            result = (DnsName) (prefix.clone());
-            result.addAll(name);
-            return new CompositeName().add(result.toString());
-        }
-
-        // Wrap compound names in composite names.
-        Name prefixC = (prefix instanceof CompositeName)
-            ? prefix
-            : new CompositeName().add(prefix.toString());
-        Name nameC = (name instanceof CompositeName)
-            ? name
-            : new CompositeName().add(name.toString());
-        int prefixLast = prefixC.size() - 1;
-
-        // Let toolkit do the work at namespace boundaries.
-        if (nameC.isEmpty() || nameC.get(0).equals("") ||
-                prefixC.isEmpty() || prefixC.get(prefixLast).equals("")) {
-            return super.composeName(nameC, prefixC);
-        }
-
-        result = (prefix == prefixC)
-            ? (CompositeName) prefixC.clone()
-            : prefixC;                  // prefixC is already a clone
-        result.addAll(nameC);
-
-        if (parentIsDns) {
-            DnsName dnsComp = (prefix instanceof DnsName)
-                           ? (DnsName) prefix.clone()
-                           : new DnsName(prefixC.get(prefixLast));
-            dnsComp.addAll((name instanceof DnsName)
-                           ? name
-                           : new DnsName(nameC.get(0)));
-            result.remove(prefixLast + 1);
-            result.remove(prefixLast);
-            result.add(prefixLast, dnsComp.toString());
-        }
-        return result;
-    }
-
-
-    //---------- Helper methods
-
-    /*
-     * Resolver is not created until needed, to allow time for updates
-     * to the environment.
-     */
-    private synchronized Resolver getResolver() throws NamingException {
-        if (resolver == null) {
-            resolver = new Resolver(servers, timeout, retries);
-        }
-        return resolver;
-    }
-
-    /*
-     * Returns the fully-qualified domain name of a name given
-     * relative to this context.  Result includes a root label (an
-     * empty component at position 0).
-     */
-    DnsName fullyQualify(Name name) throws NamingException {
-        if (name.isEmpty()) {
-            return domain;
-        }
-        DnsName dnsName = (name instanceof CompositeName)
-            ? new DnsName(name.get(0))                  // parse name
-            : (DnsName) (new DnsName()).addAll(name);   // clone & check syntax
-
-        if (dnsName.hasRootLabel()) {
-            // Be overly generous and allow root label if we're in root domain.
-            if (domain.size() == 1) {
-                return dnsName;
-            } else {
-                throw new InvalidNameException(
-                       "DNS name " + dnsName + " not relative to " + domain);
-            }
-        }
-        return (DnsName) dnsName.addAll(0, domain);
-    }
-
-    /*
-     * Converts resource records to an attribute set.  Only resource
-     * records in the answer section are used, and only those that
-     * match the classes and types in cts (see classAndTypeMatch()
-     * for matching rules).
-     */
-    private static Attributes rrsToAttrs(ResourceRecords rrs, CT[] cts) {
-
-        BasicAttributes attrs = new BasicAttributes(true);
-
-        for (int i = 0; i < rrs.answer.size(); i++) {
-            ResourceRecord rr = (ResourceRecord) rrs.answer.elementAt(i);
-            int rrtype  = rr.getType();
-            int rrclass = rr.getRrclass();
-
-            if (!classAndTypeMatch(rrclass, rrtype, cts)) {
-                continue;
-            }
-
-            String attrId = toAttrId(rrclass, rrtype);
-            Attribute attr = attrs.get(attrId);
-            if (attr == null) {
-                attr = new BasicAttribute(attrId);
-                attrs.put(attr);
-            }
-            attr.add(rr.getRdata());
-        }
-        return attrs;
-    }
-
-    /*
-     * Returns true if rrclass and rrtype match some element of cts.
-     * A match occurs if corresponding classes and types are equal,
-     * or if the array value is ANY.  If cts is null, then any class
-     * and type match.
-     */
-    private static boolean classAndTypeMatch(int rrclass, int rrtype,
-                                             CT[] cts) {
-        if (cts == null) {
-            return true;
-        }
-        for (int i = 0; i < cts.length; i++) {
-            CT ct = cts[i];
-            boolean classMatch = (ct.rrclass == ANY) ||
-                                 (ct.rrclass == rrclass);
-            boolean typeMatch  = (ct.rrtype == ANY) ||
-                                 (ct.rrtype == rrtype);
-            if (classMatch && typeMatch) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /*
-     * Returns the attribute ID for a resource record given its class
-     * and type.  If the record is in the internet class, the
-     * corresponding attribute ID is the record's type name (or the
-     * integer type value if the name is not known).  If the record is
-     * not in the internet class, the class name (or integer class
-     * value) is prepended to the attribute ID, separated by a space.
-     *
-     * A class or type value of ANY represents an indeterminate class
-     * or type, and is represented within the attribute ID by "*".
-     * For example, the attribute ID "IN *" represents
-     * any type in the internet class, and "* NS" represents an NS
-     * record of any class.
-     */
-    private static String toAttrId(int rrclass, int rrtype) {
-        String attrId = ResourceRecord.getTypeName(rrtype);
-        if (rrclass != ResourceRecord.CLASS_INTERNET) {
-            attrId = ResourceRecord.getRrclassName(rrclass) + " " + attrId;
-        }
-        return attrId;
-    }
-
-    /*
-     * Returns the class and type values corresponding to an attribute
-     * ID.  An indeterminate class or type is represented by ANY.  See
-     * toAttrId() for the format of attribute IDs.
-     *
-     * @throws InvalidAttributeIdentifierException
-     *          if class or type is unknown
-     */
-    private static CT fromAttrId(String attrId)
-            throws InvalidAttributeIdentifierException {
-
-        if (attrId.equals("")) {
-            throw new InvalidAttributeIdentifierException(
-                    "Attribute ID cannot be empty");
-        }
-        int rrclass;
-        int rrtype;
-        int space = attrId.indexOf(' ');
-
-        // class
-        if (space < 0) {
-            rrclass = ResourceRecord.CLASS_INTERNET;
-        } else {
-            String className = attrId.substring(0, space);
-            rrclass = ResourceRecord.getRrclass(className);
-            if (rrclass < 0) {
-                throw new InvalidAttributeIdentifierException(
-                        "Unknown resource record class '" + className + '\'');
-            }
-        }
-
-        // type
-        String typeName = attrId.substring(space + 1);
-        rrtype = ResourceRecord.getType(typeName);
-        if (rrtype < 0) {
-            throw new InvalidAttributeIdentifierException(
-                    "Unknown resource record type '" + typeName + '\'');
-        }
-
-        return new CT(rrclass, rrtype);
-    }
-
-    /*
-     * Returns an array of the classes and types corresponding to a
-     * set of attribute IDs.  See toAttrId() for the format of
-     * attribute IDs, and classAndTypeMatch() for the format of the
-     * array returned.
-     */
-    private static CT[] attrIdsToClassesAndTypes(String[] attrIds)
-            throws InvalidAttributeIdentifierException {
-        if (attrIds == null) {
-            return null;
-        }
-        CT[] cts = new CT[attrIds.length];
-
-        for (int i = 0; i < attrIds.length; i++) {
-            cts[i] = fromAttrId(attrIds[i]);
-        }
-        return cts;
-    }
-
-    /*
-     * Returns the most restrictive resource record class and type
-     * that may be used to query for records matching cts.
-     * See classAndTypeMatch() for matching rules.
-     */
-    private static CT getClassAndTypeToQuery(CT[] cts) {
-        int rrclass;
-        int rrtype;
-
-        if (cts == null) {
-            // Query all records.
-            rrclass = ANY;
-            rrtype  = ANY;
-        } else if (cts.length == 0) {
-            // No records are requested, but we need to ask for something.
-            rrclass = ResourceRecord.CLASS_INTERNET;
-            rrtype  = ANY;
-        } else {
-            rrclass = cts[0].rrclass;
-            rrtype  = cts[0].rrtype;
-            for (int i = 1; i < cts.length; i++) {
-                if (rrclass != cts[i].rrclass) {
-                    rrclass = ANY;
-                }
-                if (rrtype != cts[i].rrtype) {
-                    rrtype = ANY;
-                }
-            }
-        }
-        return new CT(rrclass, rrtype);
-    }
-
-
-    //---------- Support for list operations
-
-    /*
-     * Synchronization notes:
-     *
-     * Any access to zoneTree that walks the tree, whether it modifies
-     * the tree or not, is synchronized on zoneTree.
-     * [%%% Note:  a read/write lock would allow increased concurrency.]
-     * The depth of a ZoneNode can thereafter be accessed without
-     * further synchronization.  Access to other fields and methods
-     * should be synchronized on the node itself.
-     *
-     * A zone's contents is a NameNode tree that, once created, is never
-     * modified.  The only synchronization needed is to ensure that it
-     * gets flushed into shared memory after being created, which is
-     * accomplished by ZoneNode.populate().  The contents are accessed
-     * via a soft reference, so a ZoneNode may be seen to be populated
-     * one moment and unpopulated the next.
-     */
-
-    /*
-     * Returns the node in the zone tree corresponding to a
-     * fully-qualified domain name.  If the desired portion of the
-     * tree has not yet been populated or has been outdated, a zone
-     * transfer is done to populate the tree.
-     */
-    private NameNode getNameNode(DnsName fqdn) throws NamingException {
-        dprint("getNameNode(" + fqdn + ")");
-
-        // Find deepest related zone in zone tree.
-        ZoneNode znode;
-        DnsName zone;
-        synchronized (zoneTree) {
-            znode = zoneTree.getDeepestPopulated(fqdn);
-        }
-        dprint("Deepest related zone in zone tree: " +
-               ((znode != null) ? znode.getLabel() : "[none]"));
-
-        NameNode topOfZone;
-        NameNode nnode;
-
-        if (znode != null) {
-            synchronized (znode) {
-                topOfZone = znode.getContents();
-            }
-            // If fqdn is in znode's zone, is not at a zone cut, and
-            // is current, we're done.
-            if (topOfZone != null) {
-                nnode = topOfZone.get(fqdn, znode.depth() + 1); // +1 for root
-
-                if ((nnode != null) && !nnode.isZoneCut()) {
-                    dprint("Found node " + fqdn + " in zone tree");
-                    zone = (DnsName)
-                        fqdn.getPrefix(znode.depth() + 1);      // +1 for root
-                    boolean current = isZoneCurrent(znode, zone);
-                    boolean restart = false;
-
-                    synchronized (znode) {
-                        if (topOfZone != znode.getContents()) {
-                            // Zone was modified while we were examining it.
-                            // All bets are off.
-                            restart = true;
-                        } else if (!current) {
-                            znode.depopulate();
-                        } else {
-                            return nnode;                       // cache hit!
-                        }
-                    }
-                    dprint("Zone not current; discarding node");
-                    if (restart) {
-                        return getNameNode(fqdn);
-                    }
-                }
-            }
-        }
-
-        // Cache miss...  do it the expensive way.
-        dprint("Adding node " + fqdn + " to zone tree");
-
-        // Find fqdn's zone and add it to the tree.
-        zone = getResolver().findZoneName(fqdn, ResourceRecord.CLASS_INTERNET,
-                                          recursion);
-        dprint("Node's zone is " + zone);
-        synchronized (zoneTree) {
-            znode = (ZoneNode) zoneTree.add(zone, 1);   // "1" to skip root
-        }
-
-        // If znode is now populated we know -- because the first half of
-        // getNodeName() didn't find it -- that it was populated by another
-        // thread during this method call.  Assume then that it's current.
-
-        synchronized (znode) {
-            topOfZone = znode.isPopulated()
-                ? znode.getContents()
-                : populateZone(znode, zone);
-        }
-        // Desired node should now be in znode's populated zone.  Find it.
-        nnode = topOfZone.get(fqdn, zone.size());
-        if (nnode == null) {
-            throw new ConfigurationException(
-                    "DNS error: node not found in its own zone");
-        }
-        dprint("Found node in newly-populated zone");
-        return nnode;
-    }
-
-    /*
-     * Does a zone transfer to [re]populate a zone in the zone tree.
-     * Returns the zone's new contents.
-     */
-    private NameNode populateZone(ZoneNode znode, DnsName zone)
-            throws NamingException {
-        dprint("Populating zone " + zone);
-        // assert Thread.holdsLock(znode);
-        ResourceRecords rrs =
-            getResolver().queryZone(zone,
-                                    ResourceRecord.CLASS_INTERNET, recursion);
-        dprint("zone xfer complete: " + rrs.answer.size() + " records");
-        return znode.populate(zone, rrs);
-    }
-
-    /*
-     * Determine if a ZoneNode's data is current.
-     * We base this on a comparison between the cached serial
-     * number and the latest SOA record.
-     *
-     * If there is no SOA record, znode is not (or is no longer) a zone:
-     * depopulate znode and return false.
-     *
-     * Since this method may perform a network operation, it is best
-     * to call it with znode unlocked.  Caller must then note that the
-     * result may be outdated by the time this method returns.
-     */
-    private boolean isZoneCurrent(ZoneNode znode, DnsName zone)
-            throws NamingException {
-        // former version:  return !znode.isExpired();
-
-        if (!znode.isPopulated()) {
-            return false;
-        }
-        ResourceRecord soa =
-            getResolver().findSoa(zone, ResourceRecord.CLASS_INTERNET,
-                                  recursion);
-        synchronized (znode) {
-            if (soa == null) {
-                znode.depopulate();
-            }
-            return (znode.isPopulated() &&
-                    znode.compareSerialNumberTo(soa) >= 0);
-        }
-    }
-
-
-    //---------- Debugging
-
-    private static final boolean debug = false;
-
-    private static final void dprint(String msg) {
-        if (debug) {
-            System.err.println("** " + msg);
-        }
-    }
-}
-
-
-//----------
-
-/*
- * A pairing of a resource record class and a resource record type.
- * A value of ANY in either field represents an indeterminate value.
- */
-class CT {
-    int rrclass;
-    int rrtype;
-
-    CT(int rrclass, int rrtype) {
-        this.rrclass = rrclass;
-        this.rrtype = rrtype;
-    }
-}
-
-
-//----------
-
-/*
- * An enumeration of name/classname pairs.
- *
- * Nodes that have children or that are zone cuts are returned with
- * classname DirContext.  Other nodes are returned with classname
- * Object even though they are DirContexts as well, since this might
- * make the namespace easier to browse.
- */
-class NameClassPairEnumeration implements NamingEnumeration {
-
-    protected Enumeration nodes;    // nodes to be enumerated, or null if none
-    protected DnsContext ctx;       // context being enumerated
-
-    NameClassPairEnumeration(DnsContext ctx, Hashtable nodes) {
-        this.ctx = ctx;
-        this.nodes = (nodes != null)
-            ? nodes.elements()
-            : null;
-    }
-
-    /*
-     * ctx will be set to null when no longer needed by the enumeration.
-     */
-    public void close() {
-        nodes = null;
-        ctx = null;
-    }
-
-    public boolean hasMore() {
-        boolean more = ((nodes != null) && nodes.hasMoreElements());
-        if (!more) {
-            close();
-        }
-        return more;
-    }
-
-    public Object next() throws NamingException {
-        if (!hasMore()) {
-            throw new java.util.NoSuchElementException();
-        }
-        NameNode nnode = (NameNode) nodes.nextElement();
-        String className = (nnode.isZoneCut() ||
-                            (nnode.getChildren() != null))
-            ? "javax.naming.directory.DirContext"
-            : "java.lang.Object";
-
-        String label = nnode.getLabel();
-        Name compName = (new DnsName()).add(label);
-        Name cname = (new CompositeName()).add(compName.toString());
-
-        NameClassPair ncp = new NameClassPair(cname.toString(), className);
-        ncp.setNameInNamespace(ctx.fullyQualify(cname).toString());
-        return ncp;
-    }
-
-    public boolean hasMoreElements() {
-        return hasMore();
-    }
-
-    public Object nextElement() {
-        try {
-            return next();
-        } catch (NamingException e) {
-            throw (new java.util.NoSuchElementException(
-                    "javax.naming.NamingException was thrown: " +
-                    e.getMessage()));
-        }
-    }
-}
-
-/*
- * An enumeration of Bindings.
- */
-class BindingEnumeration extends NameClassPairEnumeration {
-
-    BindingEnumeration(DnsContext ctx, Hashtable nodes) {
-        super(ctx, nodes);
-    }
-
-    // Finalizer not needed since it's safe to leave ctx unclosed.
-//  protected void finalize() {
-//      close();
-//  }
-
-    public Object next() throws NamingException {
-        if (!hasMore()) {
-            throw (new java.util.NoSuchElementException());
-        }
-        NameNode nnode = (NameNode) nodes.nextElement();
-
-        String label = nnode.getLabel();
-        Name compName = (new DnsName()).add(label);
-        String compNameStr = compName.toString();
-        Name cname = (new CompositeName()).add(compNameStr);
-        String cnameStr = cname.toString();
-
-        DnsName fqdn = ctx.fullyQualify(compName);
-
-        // Clone ctx to create the child context.
-        DnsContext child = new DnsContext(ctx, fqdn);
-
-        try {
-            Object obj = DirectoryManager.getObjectInstance(
-                    child, cname, ctx, child.environment, null);
-            Binding binding = new Binding(cnameStr, obj);
-            binding.setNameInNamespace(ctx.fullyQualify(cname).toString());
-            return binding;
-        } catch (Exception e) {
-            NamingException ne = new NamingException(
-                    "Problem generating object using object factory");
-            ne.setRootCause(e);
-            throw ne;
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/dns/DnsContextFactory.java b/ojluni/src/main/java/com/sun/jndi/dns/DnsContextFactory.java
deleted file mode 100755
index 2ce289e..0000000
--- a/ojluni/src/main/java/com/sun/jndi/dns/DnsContextFactory.java
+++ /dev/null
@@ -1,259 +0,0 @@
-/*
- * Copyright (c) 2000, 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
- * 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.jndi.dns;
-
-
-import java.net.MalformedURLException;
-import java.util.ArrayList;
-import java.util.Hashtable;
-import java.util.List;
-
-import javax.naming.*;
-import javax.naming.spi.*;
-
-import com.sun.jndi.toolkit.url.UrlUtil;
-import sun.net.dns.ResolverConfiguration;       // available since 1.4.1
-
-
-/**
- * A DnsContextFactory serves as the initial context factory for DNS.
- *
- * <p> When an initial context is being created, the environment
- * property "java.naming.provider.url" should contain a DNS pseudo-URL
- * (see DnsUrl) or a space-separated list of them.  Multiple URLs must
- * all have the same domain value.
- * If the property is not set, the default "dns:" is used.
- *
- * @author Scott Seligman
- */
-
-
-public class DnsContextFactory implements InitialContextFactory {
-
-    private static final String DEFAULT_URL = "dns:";
-    private static final int DEFAULT_PORT = 53;
-
-
-    public Context getInitialContext(Hashtable<?,?> env) throws NamingException {
-        if (env == null) {
-            env = new Hashtable(5);
-        }
-        return urlToContext(getInitCtxUrl(env), env);
-    }
-
-    public static DnsContext getContext(String domain,
-                                        String[] servers, Hashtable<?,?> env)
-            throws NamingException {
-        return new DnsContext(domain, servers, env);
-    }
-
-    /*
-     * "urls" are used to determine the servers, but any domain
-     * components are overridden by "domain".
-     */
-    public static DnsContext getContext(String domain,
-                                        DnsUrl[] urls, Hashtable env)
-            throws NamingException {
-
-        String[] servers = serversForUrls(urls);
-        DnsContext ctx = getContext(domain, servers, env);
-        if (platformServersUsed(urls)) {
-            ctx.setProviderUrl(constructProviderUrl(domain, servers));
-        }
-        return ctx;
-    }
-
-    /*
-     * Public for use by product test suite.
-     */
-    public static boolean platformServersAvailable() {
-        return !filterNameServers(
-                    ResolverConfiguration.open().nameservers(), true
-                ).isEmpty();
-    }
-
-    private static Context urlToContext(String url, Hashtable env)
-            throws NamingException {
-
-        DnsUrl[] urls;
-        try {
-            urls = DnsUrl.fromList(url);
-        } catch (MalformedURLException e) {
-            throw new ConfigurationException(e.getMessage());
-        }
-        if (urls.length == 0) {
-            throw new ConfigurationException(
-                    "Invalid DNS pseudo-URL(s): " + url);
-        }
-        String domain = urls[0].getDomain();
-
-        // If multiple urls, all must have the same domain.
-        for (int i = 1; i < urls.length; i++) {
-            if (!domain.equalsIgnoreCase(urls[i].getDomain())) {
-                throw new ConfigurationException(
-                        "Conflicting domains: " + url);
-            }
-        }
-        return getContext(domain, urls, env);
-    }
-
-    /*
-     * Returns all the servers specified in a set of URLs.
-     * If a URL has no host (or port), the servers configured on the
-     * underlying platform are used if possible.  If no configured
-     * servers can be found, then fall back to the old behavior of
-     * using "localhost".
-     * There must be at least one URL.
-     */
-    private static String[] serversForUrls(DnsUrl[] urls)
-            throws NamingException {
-
-        if (urls.length == 0) {
-            throw new ConfigurationException("DNS pseudo-URL required");
-        }
-
-        List<String> servers = new ArrayList<>();
-
-        for (int i = 0; i < urls.length; i++) {
-            String server = urls[i].getHost();
-            int port = urls[i].getPort();
-
-            if (server == null && port < 0) {
-                // No server or port given, so look to underlying platform.
-                // ResolverConfiguration does some limited caching, so the
-                // following is reasonably efficient even if called rapid-fire.
-                List<String> platformServers = filterNameServers(
-                    ResolverConfiguration.open().nameservers(), false);
-                if (!platformServers.isEmpty()) {
-                    servers.addAll(platformServers);
-                    continue;  // on to next URL (if any, which is unlikely)
-                }
-            }
-
-            if (server == null) {
-                server = "localhost";
-            }
-            servers.add((port < 0)
-                        ? server
-                        : server + ":" + port);
-        }
-        return servers.toArray(new String[servers.size()]);
-    }
-
-    /*
-     * Returns true if serversForUrls(urls) would make use of servers
-     * from the underlying platform.
-     */
-    private static boolean platformServersUsed(DnsUrl[] urls) {
-        if (!platformServersAvailable()) {
-            return false;
-        }
-        for (int i = 0; i < urls.length; i++) {
-            if (urls[i].getHost() == null &&
-                urls[i].getPort() < 0) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /*
-     * Returns a value for the PROVIDER_URL property (space-separated URL
-     * Strings) that reflects the given domain and servers.
-     * Each server is of the form "server[:port]".
-     * There must be at least one server.
-     * IPv6 literal host names include delimiting brackets.
-     */
-    private static String constructProviderUrl(String domain,
-                                               String[] servers) {
-        String path = "";
-        if (!domain.equals(".")) {
-            try {
-                path = "/" + UrlUtil.encode(domain, "ISO-8859-1");
-            } catch (java.io.UnsupportedEncodingException e) {
-                // assert false : "ISO-Latin-1 charset unavailable";
-            }
-        }
-
-        StringBuffer buf = new StringBuffer();
-        for (int i = 0; i < servers.length; i++) {
-            if (i > 0) {
-                buf.append(' ');
-            }
-            buf.append("dns://").append(servers[i]).append(path);
-        }
-        return buf.toString();
-    }
-
-    /*
-     * Reads environment to find URL(s) of initial context.
-     * Default URL is "dns:".
-     */
-    private static String getInitCtxUrl(Hashtable env) {
-        String url = (String) env.get(Context.PROVIDER_URL);
-        return ((url != null) ? url : DEFAULT_URL);
-    }
-
-    /**
-     * Removes any DNS server that's not permitted to access
-     * @param input the input server[:port] list, must not be null
-     * @param oneIsEnough return output once there exists one ok
-     * @return the filtered list, all non-permitted input removed
-     */
-    private static List filterNameServers(List input, boolean oneIsEnough) {
-        SecurityManager security = System.getSecurityManager();
-        if (security == null || input == null || input.isEmpty()) {
-            return input;
-        } else {
-            List output = new ArrayList();
-            for (Object o: input) {
-                if (o instanceof String) {
-                    String platformServer = (String)o;
-                    int colon = platformServer.indexOf(':',
-                            platformServer.indexOf(']') + 1);
-
-                    int p = (colon < 0)
-                        ? DEFAULT_PORT
-                        : Integer.parseInt(
-                            platformServer.substring(colon + 1));
-                    String s = (colon < 0)
-                        ? platformServer
-                        : platformServer.substring(0, colon);
-                    try {
-                        security.checkConnect(s, p);
-                        output.add(platformServer);
-                        if (oneIsEnough) {
-                            return output;
-                        }
-                    } catch (SecurityException se) {
-                        continue;
-                    }
-                }
-            }
-            return output;
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/dns/DnsName.java b/ojluni/src/main/java/com/sun/jndi/dns/DnsName.java
deleted file mode 100755
index 5bc2394..0000000
--- a/ojluni/src/main/java/com/sun/jndi/dns/DnsName.java
+++ /dev/null
@@ -1,608 +0,0 @@
-/*
- * Copyright (c) 2000, 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.
- */
-
-package com.sun.jndi.dns;
-
-
-import java.util.ArrayList;
-import java.util.Comparator;
-import java.util.Enumeration;
-import java.util.Iterator;
-
-import javax.naming.*;
-
-
-/**
- * <tt>DnsName</tt> implements compound names for DNS as specified by
- * RFCs 1034 and 1035, and as updated and clarified by RFCs 1123 and 2181.
- *
- * <p> The labels in a domain name correspond to JNDI atomic names.
- * Each label must be less than 64 octets in length, and only the
- * optional root label at the end of the name may be 0 octets long.
- * The sum of the lengths of all labels in a name, plus the number of
- * non-root labels plus 1, must be less than 256.  The textual
- * representation of a domain name consists of the labels, escaped as
- * needed, dot-separated, and ordered right-to-left.
- *
- * <p> A label consists of a sequence of octets, each of which may
- * have any value from 0 to 255.
- *
- * <p> <em>Host names</em> are a subset of domain names.
- * Their labels contain only ASCII letters, digits, and hyphens, and
- * none may begin or end with a hyphen.  While names not conforming to
- * these rules may be valid domain names, they will not be usable by a
- * number of DNS applications, and should in most cases be avoided.
- *
- * <p> DNS does not specify an encoding (such as UTF-8) to use for
- * octets with non-ASCII values.  As of this writing there is some
- * work going on in this area, but it is not yet finalized.
- * <tt>DnsName</tt> currently converts any non-ASCII octets into
- * characters using ISO-LATIN-1 encoding, in effect taking the
- * value of each octet and storing it directly into the low-order byte
- * of a Java character and <i>vice versa</i>.  As a consequence, no
- * character in a DNS name will ever have a non-zero high-order byte.
- * When the work on internationalizing domain names has stabilized
- * (see for example <i>draft-ietf-idn-idna-10.txt</i>), <tt>DnsName</tt>
- * may be updated to conform to that work.
- *
- * <p> Backslash (<tt>\</tt>) is used as the escape character in the
- * textual representation of a domain name.  The character sequence
- * `<tt>\DDD</tt>', where <tt>DDD</tt> is a 3-digit decimal number
- * (with leading zeros if needed), represents the octet whose value
- * is <tt>DDD</tt>.  The character sequence `<tt>\C</tt>', where
- * <tt>C</tt> is a character other than <tt>'0'</tt> through
- * <tt>'9'</tt>, represents the octet whose value is that of
- * <tt>C</tt> (again using ISO-LATIN-1 encoding); this is particularly
- * useful for escaping <tt>'.'</tt> or backslash itself.  Backslash is
- * otherwise not allowed in a domain name.  Note that escape characters
- * are interpreted when a name is parsed.  So, for example, the character
- * sequences `<tt>S</tt>', `<tt>\S</tt>', and `<tt>\083</tt>' each
- * represent the same one-octet name.  The <tt>toString()</tt> method
- * does not generally insert escape sequences except where necessary.
- * If, however, the <tt>DnsName</tt> was constructed using unneeded
- * escapes, those escapes may appear in the <tt>toString</tt> result.
- *
- * <p> Atomic names passed as parameters to methods of
- * <tt>DnsName</tt>, and those returned by them, are unescaped.  So,
- * for example, <tt>(new&nbsp;DnsName()).add("a.b")</tt> creates an
- * object representing the one-label domain name <tt>a\.b</tt>, and
- * calling <tt>get(0)</tt> on this object returns <tt>"a.b"</tt>.
- *
- * <p> While DNS names are case-preserving, comparisons between them
- * are case-insensitive.  When comparing names containing non-ASCII
- * octets, <tt>DnsName</tt> uses case-insensitive comparison
- * between pairs of ASCII values, and exact binary comparison
- * otherwise.
-
- * <p> A <tt>DnsName</tt> instance is not synchronized against
- * concurrent access by multiple threads.
- *
- * @author Scott Seligman
- */
-
-
-public final class DnsName implements Name {
-
-    // If non-null, the domain name represented by this DnsName.
-    private String domain = "";
-
-    // The labels of this domain name, as a list of strings.  Index 0
-    // corresponds to the leftmost (least significant) label:  note that
-    // this is the reverse of the ordering used by the Name interface.
-    private ArrayList labels = new ArrayList();
-
-    // The number of octets needed to carry this domain name in a DNS
-    // packet.  Equal to the sum of the lengths of each label, plus the
-    // number of non-root labels, plus 1.  Must remain less than 256.
-    private short octets = 1;
-
-
-    /**
-     * Constructs a <tt>DnsName</tt> representing the empty domain name.
-     */
-    public DnsName() {
-    }
-
-    /**
-     * Constructs a <tt>DnsName</tt> representing a given domain name.
-     *
-     * @param   name    the domain name to parse
-     * @throws InvalidNameException if <tt>name</tt> does not conform
-     *          to DNS syntax.
-     */
-    public DnsName(String name) throws InvalidNameException {
-        parse(name);
-    }
-
-    /*
-     * Returns a new DnsName with its name components initialized to
-     * the components of "n" in the range [beg,end).  Indexing is as
-     * for the Name interface, with 0 being the most significant.
-     */
-    private DnsName(DnsName n, int beg, int end) {
-        // Compute indexes into "labels", which has least-significant label
-        // at index 0 (opposite to the convention used for "beg" and "end").
-        int b = n.size() - end;
-        int e = n.size() - beg;
-        labels.addAll(n.labels.subList(b, e));
-
-        if (size() == n.size()) {
-            domain = n.domain;
-            octets = n.octets;
-        } else {
-            Iterator iter = labels.iterator();
-            while (iter.hasNext()) {
-                String label = (String) iter.next();
-                if (label.length() > 0) {
-                    octets += (short) (label.length() + 1);
-                }
-            }
-        }
-    }
-
-
-    public String toString() {
-        if (domain == null) {
-            StringBuffer buf = new StringBuffer();
-            Iterator iter = labels.iterator();
-            while (iter.hasNext()) {
-                String label = (String) iter.next();
-                if (buf.length() > 0 || label.length() == 0) {
-                    buf.append('.');
-                }
-                escape(buf, label);
-            }
-            domain = buf.toString();
-        }
-        return domain;
-    }
-
-    /**
-     * Does this domain name follow <em>host name</em> syntax?
-     */
-    public boolean isHostName() {
-        Iterator iter = labels.iterator();
-        while (iter.hasNext()) {
-            if (!isHostNameLabel((String) iter.next())) {
-                return false;
-            }
-        }
-        return true;
-    }
-
-    public short getOctets() {
-        return octets;
-    }
-
-    public int size() {
-        return labels.size();
-    }
-
-    public boolean isEmpty() {
-        return (size() == 0);
-    }
-
-    public int hashCode() {
-        int h = 0;
-        for (int i = 0; i < size(); i++) {
-            h = 31 * h + getKey(i).hashCode();
-        }
-        return h;
-    }
-
-    public boolean equals(Object obj) {
-        if (!(obj instanceof Name) || (obj instanceof CompositeName)) {
-            return false;
-        }
-        Name n = (Name) obj;
-        return ((size() == n.size()) &&         // shortcut:  do sizes differ?
-                (compareTo(obj) == 0));
-    }
-
-    public int compareTo(Object obj) {
-        Name n = (Name) obj;
-        return compareRange(0, size(), n);      // never 0 if sizes differ
-    }
-
-    public boolean startsWith(Name n) {
-        return ((size() >= n.size()) &&
-                (compareRange(0, n.size(), n) == 0));
-    }
-
-    public boolean endsWith(Name n) {
-        return ((size() >= n.size()) &&
-                (compareRange(size() - n.size(), size(), n) == 0));
-    }
-
-    public String get(int pos) {
-        if (pos < 0 || pos >= size()) {
-            throw new ArrayIndexOutOfBoundsException();
-        }
-        int i = size() - pos - 1;       // index of "pos" component in "labels"
-        return (String) labels.get(i);
-    }
-
-    public Enumeration getAll() {
-        return new Enumeration() {
-            int pos = 0;
-            public boolean hasMoreElements() {
-                return (pos < size());
-            }
-            public Object nextElement() {
-                if (pos < size()) {
-                    return get(pos++);
-                }
-                throw new java.util.NoSuchElementException();
-            }
-        };
-    }
-
-    public Name getPrefix(int pos) {
-        return new DnsName(this, 0, pos);
-    }
-
-    public Name getSuffix(int pos) {
-        return new DnsName(this, pos, size());
-    }
-
-    public Object clone() {
-        return new DnsName(this, 0, size());
-    }
-
-    public Object remove(int pos) {
-        if (pos < 0 || pos >= size()) {
-            throw new ArrayIndexOutOfBoundsException();
-        }
-        int i = size() - pos - 1;     // index of element to remove in "labels"
-        String label = (String) labels.remove(i);
-        int len = label.length();
-        if (len > 0) {
-            octets -= (short) (len + 1);
-        }
-        domain = null;          // invalidate "domain"
-        return label;
-    }
-
-    public Name add(String comp) throws InvalidNameException {
-        return add(size(), comp);
-    }
-
-    public Name add(int pos, String comp) throws InvalidNameException {
-        if (pos < 0 || pos > size()) {
-            throw new ArrayIndexOutOfBoundsException();
-        }
-        // Check for empty labels:  may have only one, and only at end.
-        int len = comp.length();
-        if ((pos > 0 && len == 0) ||
-            (pos == 0 && hasRootLabel())) {
-                throw new InvalidNameException(
-                        "Empty label must be the last label in a domain name");
-        }
-        // Check total name length.
-        if (len > 0) {
-            if (octets + len + 1 >= 256) {
-                throw new InvalidNameException("Name too long");
-            }
-            octets += (short) (len + 1);
-        }
-
-        int i = size() - pos;   // index for insertion into "labels"
-        verifyLabel(comp);
-        labels.add(i, comp);
-
-        domain = null;          // invalidate "domain"
-        return this;
-    }
-
-    public Name addAll(Name suffix) throws InvalidNameException {
-        return addAll(size(), suffix);
-    }
-
-    public Name addAll(int pos, Name n) throws InvalidNameException {
-        if (n instanceof DnsName) {
-            // "n" is a DnsName so we can insert it as a whole, rather than
-            // verifying and inserting it component-by-component.
-            // More code, but less work.
-            DnsName dn = (DnsName) n;
-
-            if (dn.isEmpty()) {
-                return this;
-            }
-            // Check for empty labels:  may have only one, and only at end.
-            if ((pos > 0 && dn.hasRootLabel()) ||
-                (pos == 0 && hasRootLabel())) {
-                    throw new InvalidNameException(
-                        "Empty label must be the last label in a domain name");
-            }
-
-            short newOctets = (short) (octets + dn.octets - 1);
-            if (newOctets > 255) {
-                throw new InvalidNameException("Name too long");
-            }
-            octets = newOctets;
-            int i = size() - pos;       // index for insertion into "labels"
-            labels.addAll(i, dn.labels);
-
-            // Preserve "domain" if we're appending or prepending,
-            // otherwise invalidate it.
-            if (isEmpty()) {
-                domain = dn.domain;
-            } else if (domain == null || dn.domain == null) {
-                domain = null;
-            } else if (pos == 0) {
-                domain += (dn.domain.equals(".") ? "" : ".") + dn.domain;
-            } else if (pos == size()) {
-                domain = dn.domain + (domain.equals(".") ? "" : ".") + domain;
-            } else {
-                domain = null;
-            }
-
-        } else if (n instanceof CompositeName) {
-            n = (DnsName) n;            // force ClassCastException
-
-        } else {                // "n" is a compound name, but not a DnsName.
-            // Add labels least-significant first:  sometimes more efficient.
-            for (int i = n.size() - 1; i >= 0; i--) {
-                add(pos, n.get(i));
-            }
-        }
-        return this;
-    }
-
-
-    boolean hasRootLabel() {
-        return (!isEmpty() &&
-                get(0).equals(""));
-    }
-
-    /*
-     * Helper method for public comparison methods.  Lexicographically
-     * compares components of this name in the range [beg,end) with
-     * all components of "n".  Indexing is as for the Name interface,
-     * with 0 being the most significant.  Returns negative, zero, or
-     * positive as these name components are less than, equal to, or
-     * greater than those of "n".
-     */
-    private int compareRange(int beg, int end, Name n) {
-        if (n instanceof CompositeName) {
-            n = (DnsName) n;                    // force ClassCastException
-        }
-        // Loop through labels, starting with most significant.
-        int minSize = Math.min(end - beg, n.size());
-        for (int i = 0; i < minSize; i++) {
-            String label1 = get(i + beg);
-            String label2 = n.get(i);
-
-            int j = size() - (i + beg) - 1;     // index of label1 in "labels"
-            // assert (label1 == labels.get(j));
-
-            int c = compareLabels(label1, label2);
-            if (c != 0) {
-                return c;
-            }
-        }
-        return ((end - beg) - n.size());        // longer range wins
-    }
-
-    /*
-     * Returns a key suitable for hashing the label at index i.
-     * Indexing is as for the Name interface, with 0 being the most
-     * significant.
-     */
-    String getKey(int i) {
-        return keyForLabel(get(i));
-    }
-
-
-    /*
-     * Parses a domain name, setting the values of instance vars accordingly.
-     */
-    private void parse(String name) throws InvalidNameException {
-
-        StringBuffer label = new StringBuffer();        // label being parsed
-
-        for (int i = 0; i < name.length(); i++) {
-            char c = name.charAt(i);
-
-            if (c == '\\') {                    // found an escape sequence
-                c = getEscapedOctet(name, i++);
-                if (isDigit(name.charAt(i))) {  // sequence is \DDD
-                    i += 2;                     // consume remaining digits
-                }
-                label.append(c);
-
-            } else if (c != '.') {              // an unescaped octet
-                label.append(c);
-
-            } else {                            // found '.' separator
-                add(0, label.toString());       // check syntax, then add label
-                                                //   to end of name
-                label.delete(0, i);             // clear buffer for next label
-            }
-        }
-
-        // If name is neither "." nor "", the octets (zero or more)
-        // from the rightmost dot onward are now added as the final
-        // label of the name.  Those two are special cases in that for
-        // all other domain names, the number of labels is one greater
-        // than the number of dot separators.
-        if (!name.equals("") && !name.equals(".")) {
-            add(0, label.toString());
-        }
-
-        domain = name;          // do this last, since add() sets it to null
-    }
-
-    /*
-     * Returns (as a char) the octet indicated by the escape sequence
-     * at a given position within a domain name.
-     * @throws InvalidNameException if a valid escape sequence is not found.
-     */
-    private static char getEscapedOctet(String name, int pos)
-                                                throws InvalidNameException {
-        try {
-            // assert (name.charAt(pos) == '\\');
-            char c1 = name.charAt(++pos);
-            if (isDigit(c1)) {          // sequence is `\DDD'
-                char c2 = name.charAt(++pos);
-                char c3 = name.charAt(++pos);
-                if (isDigit(c2) && isDigit(c3)) {
-                    return (char)
-                        ((c1 - '0') * 100 + (c2 - '0') * 10 + (c3 - '0'));
-                } else {
-                    throw new InvalidNameException(
-                            "Invalid escape sequence in " + name);
-                }
-            } else {                    // sequence is `\C'
-                return c1;
-            }
-        } catch (IndexOutOfBoundsException e) {
-            throw new InvalidNameException(
-                    "Invalid escape sequence in " + name);
-        }
-    }
-
-    /*
-     * Checks that this label is valid.
-     * @throws InvalidNameException if label is not valid.
-     */
-    private static void verifyLabel(String label) throws InvalidNameException {
-        if (label.length() > 63) {
-            throw new InvalidNameException(
-                    "Label exceeds 63 octets: " + label);
-        }
-        // Check for two-byte characters.
-        for (int i = 0; i < label.length(); i++) {
-            char c = label.charAt(i);
-            if ((c & 0xFF00) != 0) {
-                throw new InvalidNameException(
-                        "Label has two-byte char: " + label);
-            }
-        }
-    }
-
-    /*
-     * Does this label conform to host name syntax?
-     */
-    private static boolean isHostNameLabel(String label) {
-        for (int i = 0; i < label.length(); i++) {
-            char c = label.charAt(i);
-            if (!isHostNameChar(c)) {
-                return false;
-            }
-        }
-        return !(label.startsWith("-") || label.endsWith("-"));
-    }
-
-    private static boolean isHostNameChar(char c) {
-        return (c == '-' ||
-                c >= 'a' && c <= 'z' ||
-                c >= 'A' && c <= 'Z' ||
-                c >= '0' && c <= '9');
-    }
-
-    private static boolean isDigit(char c) {
-        return (c >= '0' && c <= '9');
-    }
-
-    /*
-     * Append a label to buf, escaping as needed.
-     */
-    private static void escape(StringBuffer buf, String label) {
-        for (int i = 0; i < label.length(); i++) {
-            char c = label.charAt(i);
-            if (c == '.' || c == '\\') {
-                buf.append('\\');
-            }
-            buf.append(c);
-        }
-    }
-
-    /*
-     * Compares two labels, ignoring case for ASCII values.
-     * Returns negative, zero, or positive as the first label
-     * is less than, equal to, or greater than the second.
-     * See keyForLabel().
-     */
-    private static int compareLabels(String label1, String label2) {
-        int min = Math.min(label1.length(), label2.length());
-        for (int i = 0; i < min; i++) {
-            char c1 = label1.charAt(i);
-            char c2 = label2.charAt(i);
-            if (c1 >= 'A' && c1 <= 'Z') {
-                c1 += 'a' - 'A';                        // to lower case
-            }
-            if (c2 >= 'A' && c2 <= 'Z') {
-                c2 += 'a' - 'A';                        // to lower case
-            }
-            if (c1 != c2) {
-                return (c1 - c2);
-            }
-        }
-        return (label1.length() - label2.length());     // the longer one wins
-    }
-
-    /*
-     * Returns a key suitable for hashing a label.  Two labels map to
-     * the same key iff they are equal, taking possible case-folding
-     * into account.  See compareLabels().
-     */
-    private static String keyForLabel(String label) {
-        StringBuffer buf = new StringBuffer(label.length());
-        for (int i = 0; i < label.length(); i++) {
-            char c = label.charAt(i);
-            if (c >= 'A' && c <= 'Z') {
-                c += 'a' - 'A';                         // to lower case
-            }
-            buf.append(c);
-        }
-        return buf.toString();
-    }
-
-
-    /**
-     * Serializes only the domain name string, for compactness and to avoid
-     * any implementation dependency.
-     *
-     * @serialdata      The domain name string.
-     */
-    private void writeObject(java.io.ObjectOutputStream s)
-            throws java.io.IOException {
-        s.writeObject(toString());
-    }
-
-    private void readObject(java.io.ObjectInputStream s)
-            throws java.io.IOException, ClassNotFoundException {
-        try {
-            parse((String) s.readObject());
-        } catch (InvalidNameException e) {
-            // shouldn't happen
-            throw new java.io.StreamCorruptedException(
-                    "Invalid name: " + domain);
-        }
-    }
-
-    private static final long serialVersionUID = 7040187611324710271L;
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/dns/DnsNameParser.java b/ojluni/src/main/java/com/sun/jndi/dns/DnsNameParser.java
deleted file mode 100755
index 490c315..0000000
--- a/ojluni/src/main/java/com/sun/jndi/dns/DnsNameParser.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (c) 2000, 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.jndi.dns;
-
-
-import javax.naming.*;
-
-
-/**
- * A name parser for DNS names.
- *
- * @author Scott Seligman
- */
-
-
-class DnsNameParser implements NameParser {
-
-    public Name parse(String name) throws NamingException {
-        return new DnsName(name);
-    }
-
-
-    // Every DnsNameParser is created equal.
-
-    public boolean equals(Object obj) {
-        return (obj instanceof DnsNameParser);
-    }
-
-    public int hashCode() {
-        return DnsNameParser.class.hashCode() + 1;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/dns/DnsUrl.java b/ojluni/src/main/java/com/sun/jndi/dns/DnsUrl.java
deleted file mode 100755
index ef17259..0000000
--- a/ojluni/src/main/java/com/sun/jndi/dns/DnsUrl.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * Copyright (c) 2000, 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.jndi.dns;
-
-
-import java.net.MalformedURLException;
-import java.util.Hashtable;
-import java.util.StringTokenizer;
-
-import com.sun.jndi.toolkit.url.Uri;
-import com.sun.jndi.toolkit.url.UrlUtil;
-
-
-/**
- * A DnsUrl represents a DNS pseudo-URL of the form
- * <pre>
- *   dns://[host][:port][/[domain]]
- * or
- *   dns:[/][domain]
- * </pre>
- * The host names a DNS server.  If the host is not provided, it
- * indicates that the underlying platform's DNS server(s) should be
- * used if possible, or that "localhost" should be used otherwise.  If
- * the port is not provided, the DNS default port 53 will be used.
- * The domain indicates the domain name of the context, and is not
- * necessarily related to the domain of the server; if it is not
- * provided, the root domain "." is used.  Special characters in
- * the domain name must be %-escaped as described in RFC 2396.
- *
- * @author Scott Seligman
- */
-
-
-public class DnsUrl extends Uri {
-
-    private String domain;      // domain name of the context
-
-
-    /**
-     * Given a space-separated list of DNS URLs, returns an array of DnsUrl
-     * objects.
-     */
-    public static DnsUrl[] fromList(String urlList)
-            throws MalformedURLException {
-
-        DnsUrl[] urls = new DnsUrl[(urlList.length() + 1) / 2];
-        int i = 0;              // next available index in urls
-        StringTokenizer st = new StringTokenizer(urlList, " ");
-
-        while (st.hasMoreTokens()) {
-            urls[i++] = new DnsUrl(st.nextToken());
-        }
-        DnsUrl[] trimmed = new DnsUrl[i];
-        System.arraycopy(urls, 0, trimmed, 0, i);
-        return trimmed;
-    }
-
-    public DnsUrl(String url) throws MalformedURLException {
-        super(url);
-
-        if (!scheme.equals("dns")) {
-            throw new MalformedURLException(
-                    url + " is not a valid DNS pseudo-URL");
-        }
-
-        domain = path.startsWith("/")
-            ? path.substring(1)
-            : path;
-        domain = domain.equals("")
-            ? "."
-            : UrlUtil.decode(domain);
-
-        // Debug
-        // System.out.println("host=" + host + " port=" + port +
-        //                    " domain=" + domain);
-    }
-
-    /**
-     * Returns the domain of this URL, or "." if none is provided.
-     * Never null.
-     */
-    public String getDomain() {
-        return domain;
-    }
-
-
-/*
-    // Debug
-    public static void main(String args[]) throws MalformedURLException {
-        DnsUrl[] urls = fromList(args[0]);
-        for (int i = 0; i < urls.length; i++) {
-            System.out.println(urls[i].toString());
-        }
-    }
-*/
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/dns/Header.java b/ojluni/src/main/java/com/sun/jndi/dns/Header.java
deleted file mode 100755
index b279666..0000000
--- a/ojluni/src/main/java/com/sun/jndi/dns/Header.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * Copyright (c) 2000, 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.jndi.dns;
-
-
-import javax.naming.*;
-
-
-/**
- * The Header class represents the header of a DNS message.
- *
- * @author Scott Seligman
- */
-
-
-class Header {
-
-    static final int HEADER_SIZE = 12;  // octets in a DNS header
-
-    // Masks and shift amounts for DNS header flag fields.
-    static final short QR_BIT =         (short) 0x8000;
-    static final short OPCODE_MASK =    (short) 0x7800;
-    static final int   OPCODE_SHIFT =   11;
-    static final short AA_BIT =         (short) 0x0400;
-    static final short TC_BIT =         (short) 0x0200;
-    static final short RD_BIT =         (short) 0x0100;
-    static final short RA_BIT =         (short) 0x0080;
-    static final short RCODE_MASK =     (short) 0x000F;
-
-    int xid;                    // ID:  16-bit query identifier
-    boolean query;              // QR:  true if query, false if response
-    int opcode;                 // OPCODE:  4-bit opcode
-    boolean authoritative;      // AA
-    boolean truncated;          // TC
-    boolean recursionDesired;   // RD
-    boolean recursionAvail;     // RA
-    int rcode;                  // RCODE:  4-bit response code
-    int numQuestions;
-    int numAnswers;
-    int numAuthorities;
-    int numAdditionals;
-
-    /*
-     * Returns a representation of a decoded DNS message header.
-     * Does not modify or store a reference to the msg array.
-     */
-    Header(byte[] msg, int msgLen) throws NamingException {
-        decode(msg, msgLen);
-    }
-
-    /*
-     * Decodes a DNS message header.  Does not modify or store a
-     * reference to the msg array.
-     */
-    private void decode(byte[] msg, int msgLen) throws NamingException {
-
-        try {
-            int pos = 0;        // current offset into msg
-
-            if (msgLen < HEADER_SIZE) {
-                throw new CommunicationException(
-                        "DNS error: corrupted message header");
-            }
-
-            xid = getShort(msg, pos);
-            pos += 2;
-
-            // Flags
-            short flags = (short) getShort(msg, pos);
-            pos += 2;
-            query = (flags & QR_BIT) == 0;
-            opcode = (flags & OPCODE_MASK) >>> OPCODE_SHIFT;
-            authoritative = (flags & AA_BIT) != 0;
-            truncated = (flags & TC_BIT) != 0;
-            recursionDesired = (flags & RD_BIT) != 0;
-            recursionAvail = (flags & RA_BIT) != 0;
-            rcode = (flags & RCODE_MASK);
-
-            // RR counts
-            numQuestions = getShort(msg, pos);
-            pos += 2;
-            numAnswers = getShort(msg, pos);
-            pos += 2;
-            numAuthorities = getShort(msg, pos);
-            pos += 2;
-            numAdditionals = getShort(msg, pos);
-            pos += 2;
-
-        } catch (IndexOutOfBoundsException e) {
-            throw new CommunicationException(
-                    "DNS error: corrupted message header");
-        }
-    }
-
-    /*
-     * Returns the 2-byte unsigned value at msg[pos].  The high
-     * order byte comes first.
-     */
-    private static int getShort(byte[] msg, int pos) {
-        return (((msg[pos] & 0xFF) << 8) |
-                (msg[pos + 1] & 0xFF));
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/dns/NameNode.java b/ojluni/src/main/java/com/sun/jndi/dns/NameNode.java
deleted file mode 100755
index 02ab791..0000000
--- a/ojluni/src/main/java/com/sun/jndi/dns/NameNode.java
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
- * Copyright (c) 2000, 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.jndi.dns;
-
-
-import java.util.Hashtable;
-
-
-/**
- * A NameNode represents a node in the DNS namespace.  Each node
- * has a label, which is its name relative to its parent (so the
- * node at Sun.COM has label "Sun").  Each node has a hashtable of
- * children indexed by their labels converted to lower-case.
- *
- * <p> A node may be addressed from another by giving a DnsName
- * consisting of the sequence of labels from one node to the other.
- *
- * <p> Each node also has an <tt>isZoneCut</tt> flag, used to indicate
- * if the node is a zone cut.  A zone cut is a node with an NS record
- * that is contained in one zone, but that actually belongs to a child zone.
- *
- * <p> All access is unsynchronized.
- *
- * @author Scott Seligman
- */
-
-
-class NameNode {
-
-    private String label;               // name of this node relative to its
-                                        // parent, or null for root of a tree
-    private Hashtable children = null;  // child nodes
-    private boolean isZoneCut = false;  // true if this node is a zone cut
-    private int depth = 0;              // depth in tree (0 for root)
-
-    NameNode(String label) {
-        this.label = label;
-    }
-
-    /*
-     * Returns a newly-allocated NameNode.  Used to allocate new nodes
-     * in a tree.  Should be overridden in a subclass to return an object
-     * of the subclass's type.
-     */
-    protected NameNode newNameNode(String label) {
-        return new NameNode(label);
-    }
-
-    /*
-     * Returns the name of this node relative to its parent, or null for
-     * the root of a tree.
-     */
-    String getLabel() {
-        return label;
-    }
-
-    /*
-     * Returns the depth of this node in the tree.  The depth of the root
-     * is 0.
-     */
-    int depth() {
-        return depth;
-    }
-
-    boolean isZoneCut() {
-        return isZoneCut;
-    }
-
-    void setZoneCut(boolean isZoneCut) {
-        this.isZoneCut = isZoneCut;
-    }
-
-    /*
-     * Returns the children of this node, or null if there are none.
-     * The caller must not modify the Hashtable returned.
-     */
-    Hashtable getChildren() {
-        return children;
-    }
-
-    /*
-     * Returns the child node given the hash key (the down-cased label)
-     * for its name relative to this node, or null if there is no such
-     * child.
-     */
-    NameNode get(String key) {
-        return (children != null)
-            ? (NameNode) children.get(key)
-            : null;
-    }
-
-    /*
-     * Returns the node at the end of a path, or null if the
-     * node does not exist.
-     * The path is specified by the labels of <tt>name</tt>, beginning
-     * at index idx.
-     */
-    NameNode get(DnsName name, int idx) {
-        NameNode node = this;
-        for (int i = idx; i < name.size() && node != null; i++) {
-            node = node.get(name.getKey(i));
-        }
-        return node;
-    }
-
-    /*
-     * Returns the node at the end of a path, creating it and any
-     * intermediate nodes as needed.
-     * The path is specified by the labels of <tt>name</tt>, beginning
-     * at index idx.
-     */
-    NameNode add(DnsName name, int idx) {
-        NameNode node = this;
-        for (int i = idx; i < name.size(); i++) {
-            String label = name.get(i);
-            String key = name.getKey(i);
-
-            NameNode child = null;
-            if (node.children == null) {
-                node.children = new Hashtable();
-            } else {
-                child = (NameNode) node.children.get(key);
-            }
-            if (child == null) {
-                child = newNameNode(label);
-                child.depth = node.depth + 1;
-                node.children.put(key, child);
-            }
-            node = child;
-        }
-        return node;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/dns/Resolver.java b/ojluni/src/main/java/com/sun/jndi/dns/Resolver.java
deleted file mode 100755
index fac02e8..0000000
--- a/ojluni/src/main/java/com/sun/jndi/dns/Resolver.java
+++ /dev/null
@@ -1,192 +0,0 @@
-/*
- * Copyright (c) 2000, 2007, 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.jndi.dns;
-
-
-import javax.naming.*;
-
-
-/**
- * The Resolver class performs DNS client operations in support of DnsContext.
- *
- * <p> Every DnsName instance passed to or returned from a method of
- * this class should be fully-qualified and contain a root label (an
- * empty component at position 0).
- *
- * @author Scott Seligman
- */
-
-class Resolver {
-
-    private DnsClient dnsClient;
-    private int timeout;                // initial timeout on UDP queries in ms
-    private int retries;                // number of UDP retries
-
-
-    /*
-     * Constructs a new Resolver given its servers and timeout parameters.
-     * Each server is of the form "server[:port]".
-     * IPv6 literal host names include delimiting brackets.
-     * There must be at least one server.
-     * "timeout" is the initial timeout interval (in ms) for UDP queries,
-     * and "retries" gives the number of retries per server.
-     */
-    Resolver(String[] servers, int timeout, int retries)
-            throws NamingException {
-        this.timeout = timeout;
-        this.retries = retries;
-        dnsClient = new DnsClient(servers, timeout, retries);
-    }
-
-    public void close() {
-        dnsClient.close();
-        dnsClient = null;
-    }
-
-
-    /*
-     * Queries resource records of a particular class and type for a
-     * given domain name.
-     * Useful values of rrclass are ResourceRecord.[Q]CLASS_xxx.
-     * Useful values of rrtype are ResourceRecord.[Q]TYPE_xxx.
-     * If recursion is true, recursion is requested on the query.
-     * If auth is true, only authoritative responses are accepted.
-     */
-    ResourceRecords query(DnsName fqdn, int rrclass, int rrtype,
-                          boolean recursion, boolean auth)
-            throws NamingException {
-        return dnsClient.query(fqdn, rrclass, rrtype, recursion, auth);
-    }
-
-    /*
-     * Queries all resource records of a zone given its domain name and class.
-     * If recursion is true, recursion is requested on the query to find
-     * the name server (and also on the zone transfer, but it won't matter).
-     */
-    ResourceRecords queryZone(DnsName zone, int rrclass, boolean recursion)
-            throws NamingException {
-
-        DnsClient cl =
-            new DnsClient(findNameServers(zone, recursion), timeout, retries);
-        try {
-            return cl.queryZone(zone, rrclass, recursion);
-        } finally {
-            cl.close();
-        }
-    }
-
-    /*
-     * Finds the zone of a given domain name.  The method is to look
-     * for the first SOA record on the path from the given domain to
-     * the root.  This search may be partially bypassed if the zone's
-     * SOA record is received in the authority section of a response.
-     * If recursion is true, recursion is requested on any queries.
-     */
-    DnsName findZoneName(DnsName fqdn, int rrclass, boolean recursion)
-            throws NamingException {
-
-        fqdn = (DnsName) fqdn.clone();
-        while (fqdn.size() > 1) {       // while below root
-            ResourceRecords rrs = null;
-            try {
-                rrs = query(fqdn, rrclass, ResourceRecord.TYPE_SOA,
-                            recursion, false);
-            } catch (NameNotFoundException e) {
-                throw e;
-            } catch (NamingException e) {
-                // Ignore error and keep searching up the tree.
-            }
-            if (rrs != null) {
-                if (rrs.answer.size() > 0) {    // found zone's SOA
-                    return fqdn;
-                }
-                // Look for an SOA record giving the zone's top node.
-                for (int i = 0; i < rrs.authority.size(); i++) {
-                    ResourceRecord rr = (ResourceRecord)
-                        rrs.authority.elementAt(i);
-                    if (rr.getType() == ResourceRecord.TYPE_SOA) {
-                        DnsName zone = rr.getName();
-                        if (fqdn.endsWith(zone)) {
-                            return zone;
-                        }
-                    }
-                }
-            }
-            fqdn.remove(fqdn.size() - 1);       // one step rootward
-        }
-        return fqdn;                    // no SOA found below root, so
-                                        // return root
-    }
-
-    /*
-     * Finds a zone's SOA record.  Returns null if no SOA is found (in
-     * which case "zone" is not actually a zone).
-     * If recursion is true, recursion is requested on the query.
-     */
-     ResourceRecord findSoa(DnsName zone, int rrclass, boolean recursion)
-            throws NamingException {
-
-        ResourceRecords rrs = query(zone, rrclass, ResourceRecord.TYPE_SOA,
-                                    recursion, false);
-        for (int i = 0; i < rrs.answer.size(); i++) {
-            ResourceRecord rr = (ResourceRecord) rrs.answer.elementAt(i);
-            if (rr.getType() == ResourceRecord.TYPE_SOA) {
-                return rr;
-            }
-        }
-        return null;
-    }
-
-    /*
-     * Finds the name servers of a zone.  <tt>zone</tt> is a fully-qualified
-     * domain name at the top of a zone.
-     * If recursion is true, recursion is requested on the query.
-     */
-    private String[] findNameServers(DnsName zone, boolean recursion)
-            throws NamingException {
-
-        // %%% As an optimization, could look in authority section of
-        // findZoneName() response first.
-        ResourceRecords rrs =
-            query(zone, ResourceRecord.CLASS_INTERNET, ResourceRecord.TYPE_NS,
-                  recursion, false);
-        String[] ns = new String[rrs.answer.size()];
-        for (int i = 0; i < ns.length; i++) {
-            ResourceRecord rr = (ResourceRecord)
-                rrs.answer.elementAt(i);
-            if (rr.getType() != ResourceRecord.TYPE_NS) {
-                throw new CommunicationException("Corrupted DNS message");
-            }
-            ns[i] = (String) rr.getRdata();
-
-            // Server name will be passed to InetAddress.getByName(), which
-            // may not be able to handle a trailing dot.
-            // assert ns[i].endsWith(".");
-            ns[i] = ns[i].substring(0, ns[i].length() - 1);
-        }
-        return ns;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/dns/ResourceRecord.java b/ojluni/src/main/java/com/sun/jndi/dns/ResourceRecord.java
deleted file mode 100755
index b4c88c6..0000000
--- a/ojluni/src/main/java/com/sun/jndi/dns/ResourceRecord.java
+++ /dev/null
@@ -1,589 +0,0 @@
-/*
- * Copyright (c) 2000, 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.jndi.dns;
-
-import javax.naming.InvalidNameException;
-
-
-/**
- * The ResourceRecord class represents a DNS resource record.
- * The string format is based on the master file representation in
- * RFC 1035.
- *
- * @author Scott Seligman
- */
-
-
-public class ResourceRecord {
-
-    /*
-     * Resource record type codes
-     */
-    static final int TYPE_A     =  1;
-    static final int TYPE_NS    =  2;
-    static final int TYPE_CNAME =  5;
-    static final int TYPE_SOA   =  6;
-    static final int TYPE_PTR   = 12;
-    static final int TYPE_HINFO = 13;
-    static final int TYPE_MX    = 15;
-    static final int TYPE_TXT   = 16;
-    static final int TYPE_AAAA  = 28;
-    static final int TYPE_SRV   = 33;
-    static final int TYPE_NAPTR = 35;
-    static final int QTYPE_AXFR = 252;          // zone transfer
-    static final int QTYPE_STAR = 255;          // query type "*"
-
-    /*
-     * Mapping from resource record type codes to type name strings.
-     */
-    static final String rrTypeNames[] = {
-        null, "A", "NS", null, null,
-        "CNAME", "SOA", null, null, null,
-        null, null, "PTR", "HINFO", null,
-        "MX", "TXT", null, null, null,
-        null, null, null, null, null,
-        null, null, null, "AAAA", null,
-        null, null, null, "SRV", null,
-        "NAPTR"
-    };
-
-    /*
-     * Resource record class codes
-     */
-    static final int CLASS_INTERNET = 1;
-    static final int CLASS_HESIOD   = 2;
-    static final int QCLASS_STAR    = 255;      // query class "*"
-
-    /*
-     * Mapping from resource record type codes to class name strings.
-     */
-    static final String rrClassNames[] = {
-        null, "IN", null, null, "HS"
-    };
-
-
-    byte[] msg;                 // DNS message
-    int msgLen;                 // msg size (in octets)
-    boolean qSection;           // true if this RR is part of question section
-                                // and therefore has no ttl or rdata
-    int offset;                 // offset of RR w/in msg
-    int rrlen;                  // number of octets in encoded RR
-    DnsName name;               // name field of RR, including root label
-    int rrtype;                 // type field of RR
-    String rrtypeName;          // name of of rrtype
-    int rrclass;                // class field of RR
-    String rrclassName;         // name of rrclass
-    int ttl = 0;                // ttl field of RR
-    int rdlen = 0;              // number of octets of rdata
-    Object rdata = null;        // rdata -- most are String, unknown are byte[]
-
-
-    /*
-     * Constructs a new ResourceRecord.  The encoded data of the DNS
-     * message is contained in msg; data for this RR begins at msg[offset].
-     * If qSection is true this RR is part of a question section.  It's
-     * not a true resource record in that case, but is treated as if it
-     * were a shortened one (with no ttl or rdata).  If decodeRdata is
-     * false, the rdata is not decoded (and getRdata() will return null)
-     * unless this is an SOA record.
-     *
-     * @throws InvalidNameException if a decoded domain name isn't valid.
-     * @throws ArrayIndexOutOfBoundsException given certain other corrupt data.
-     */
-    ResourceRecord(byte[] msg, int msgLen, int offset,
-                   boolean qSection, boolean decodeRdata)
-            throws InvalidNameException {
-
-        this.msg = msg;
-        this.msgLen = msgLen;
-        this.offset = offset;
-        this.qSection = qSection;
-        decode(decodeRdata);
-    }
-
-    public String toString() {
-        String text = name + " " + rrclassName + " " + rrtypeName;
-        if (!qSection) {
-            text += " " + ttl + " " +
-                ((rdata != null) ? rdata : "[n/a]");
-        }
-        return text;
-    }
-
-    /*
-     * Returns the name field of this RR, including the root label.
-     */
-    public DnsName getName() {
-        return name;
-    }
-
-    /*
-     * Returns the number of octets in the encoded RR.
-     */
-    public int size() {
-        return rrlen;
-    }
-
-    public int getType() {
-        return rrtype;
-    }
-
-    public int getRrclass() {
-        return rrclass;
-    }
-
-    public Object getRdata() {
-        return rdata;
-    }
-
-
-    public static String getTypeName(int rrtype) {
-        return valueToName(rrtype, rrTypeNames);
-    }
-
-    public static int getType(String typeName) {
-        return nameToValue(typeName, rrTypeNames);
-    }
-
-    public static String getRrclassName(int rrclass) {
-        return valueToName(rrclass, rrClassNames);
-    }
-
-    public static int getRrclass(String className) {
-        return nameToValue(className, rrClassNames);
-    }
-
-    private static String valueToName(int val, String[] names) {
-        String name = null;
-        if ((val > 0) && (val < names.length)) {
-            name = names[val];
-        } else if (val == QTYPE_STAR) {         // QTYPE_STAR == QCLASS_STAR
-            name = "*";
-        }
-        if (name == null) {
-            name = Integer.toString(val);
-        }
-        return name;
-    }
-
-    private static int nameToValue(String name, String[] names) {
-        if (name.equals("")) {
-            return -1;                          // invalid name
-        } else if (name.equals("*")) {
-            return QTYPE_STAR;                  // QTYPE_STAR == QCLASS_STAR
-        }
-        if (Character.isDigit(name.charAt(0))) {
-            try {
-                return Integer.parseInt(name);
-            } catch (NumberFormatException e) {
-            }
-        }
-        for (int i = 1; i < names.length; i++) {
-            if ((names[i] != null) &&
-                    name.equalsIgnoreCase(names[i])) {
-                return i;
-            }
-        }
-        return -1;                              // unknown name
-    }
-
-    /*
-     * Compares two SOA record serial numbers using 32-bit serial number
-     * arithmetic as defined in RFC 1982.  Serial numbers are unsigned
-     * 32-bit quantities.  Returns a negative, zero, or positive value
-     * as the first serial number is less than, equal to, or greater
-     * than the second.  If the serial numbers are not comparable the
-     * result is undefined.  Note that the relation is not transitive.
-     */
-    public static int compareSerialNumbers(long s1, long s2) {
-        long diff = s2 - s1;
-        if (diff == 0) {
-            return 0;
-        } else if ((diff > 0 &&  diff <= 0x7FFFFFFF) ||
-                   (diff < 0 && -diff >  0x7FFFFFFF)) {
-            return -1;
-        } else {
-            return 1;
-        }
-    }
-
-
-    /*
-     * Decodes the binary format of the RR.
-     * May throw ArrayIndexOutOfBoundsException given corrupt data.
-     */
-    private void decode(boolean decodeRdata) throws InvalidNameException {
-        int pos = offset;       // index of next unread octet
-
-        name = new DnsName();                           // NAME
-        pos = decodeName(pos, name);
-
-        rrtype = getUShort(pos);                        // TYPE
-        rrtypeName = (rrtype < rrTypeNames.length)
-            ? rrTypeNames[rrtype]
-            : null;
-        if (rrtypeName == null) {
-            rrtypeName = Integer.toString(rrtype);
-        }
-        pos += 2;
-
-        rrclass = getUShort(pos);                       // CLASS
-        rrclassName = (rrclass < rrClassNames.length)
-            ? rrClassNames[rrclass]
-            : null;
-        if (rrclassName == null) {
-            rrclassName = Integer.toString(rrclass);
-        }
-        pos += 2;
-
-        if (!qSection) {
-            ttl = getInt(pos);                          // TTL
-            pos += 4;
-
-            rdlen = getUShort(pos);                     // RDLENGTH
-            pos += 2;
-
-            rdata = (decodeRdata ||                     // RDATA
-                     (rrtype == TYPE_SOA))
-                ? decodeRdata(pos)
-                : null;
-            if (rdata instanceof DnsName) {
-                rdata = rdata.toString();
-            }
-            pos += rdlen;
-        }
-
-        rrlen = pos - offset;
-
-        msg = null;     // free up for GC
-    }
-
-    /*
-     * Returns the 1-byte unsigned value at msg[pos].
-     */
-    private int getUByte(int pos) {
-        return (msg[pos] & 0xFF);
-    }
-
-    /*
-     * Returns the 2-byte unsigned value at msg[pos].  The high
-     * order byte comes first.
-     */
-    private int getUShort(int pos) {
-        return (((msg[pos] & 0xFF) << 8) |
-                (msg[pos + 1] & 0xFF));
-    }
-
-    /*
-     * Returns the 4-byte signed value at msg[pos].  The high
-     * order byte comes first.
-     */
-    private int getInt(int pos) {
-        return ((getUShort(pos) << 16) | getUShort(pos + 2));
-    }
-
-    /*
-     * Returns the 4-byte unsigned value at msg[pos].  The high
-     * order byte comes first.
-     */
-    private long getUInt(int pos) {
-        return (getInt(pos) & 0xffffffffL);
-    }
-
-    /*
-     * Returns the name encoded at msg[pos], including the root label.
-     */
-    private DnsName decodeName(int pos) throws InvalidNameException {
-        DnsName n = new DnsName();
-        decodeName(pos, n);
-        return n;
-    }
-
-    /*
-     * Prepends to "n" the domain name encoded at msg[pos], including the root
-     * label.  Returns the index into "msg" following the name.
-     */
-    private int decodeName(int pos, DnsName n) throws InvalidNameException {
-        if (msg[pos] == 0) {                            // end of name
-            n.add(0, "");
-            return (pos + 1);
-        } else if ((msg[pos] & 0xC0) != 0) {            // name compression
-            decodeName(getUShort(pos) & 0x3FFF, n);
-            return (pos + 2);
-        } else {                                        // append a label
-            int len = msg[pos++];
-            try {
-                n.add(0, new String(msg, pos, len, "ISO-8859-1"));
-            } catch (java.io.UnsupportedEncodingException e) {
-                // assert false : "ISO-Latin-1 charset unavailable";
-            }
-            return decodeName(pos + len, n);
-        }
-    }
-
-    /*
-     * Returns the rdata encoded at msg[pos].  The format is dependent
-     * on the rrtype and rrclass values, which have already been set.
-     * The length of the encoded data is rdlen, which has already been
-     * set.
-     * The rdata of records with unknown type/class combinations is
-     * returned in a newly-allocated byte array.
-     */
-    private Object decodeRdata(int pos) throws InvalidNameException {
-        if (rrclass == CLASS_INTERNET) {
-            switch (rrtype) {
-            case TYPE_A:
-                return decodeA(pos);
-            case TYPE_AAAA:
-                return decodeAAAA(pos);
-            case TYPE_CNAME:
-            case TYPE_NS:
-            case TYPE_PTR:
-                return decodeName(pos);
-            case TYPE_MX:
-                return decodeMx(pos);
-            case TYPE_SOA:
-                return decodeSoa(pos);
-            case TYPE_SRV:
-                return decodeSrv(pos);
-            case TYPE_NAPTR:
-                return decodeNaptr(pos);
-            case TYPE_TXT:
-                return decodeTxt(pos);
-            case TYPE_HINFO:
-                return decodeHinfo(pos);
-            }
-        }
-        // Unknown RR type/class
-        byte[] rd = new byte[rdlen];
-        System.arraycopy(msg, pos, rd, 0, rdlen);
-        return rd;
-    }
-
-    /*
-     * Returns the rdata of an MX record that is encoded at msg[pos].
-     */
-    private String decodeMx(int pos) throws InvalidNameException {
-        int preference = getUShort(pos);
-        pos += 2;
-        DnsName name = decodeName(pos);
-        return (preference + " " + name);
-    }
-
-    /*
-     * Returns the rdata of an SOA record that is encoded at msg[pos].
-     */
-    private String decodeSoa(int pos) throws InvalidNameException {
-        DnsName mname = new DnsName();
-        pos = decodeName(pos, mname);
-        DnsName rname = new DnsName();
-        pos = decodeName(pos, rname);
-
-        long serial = getUInt(pos);
-        pos += 4;
-        long refresh = getUInt(pos);
-        pos += 4;
-        long retry = getUInt(pos);
-        pos += 4;
-        long expire = getUInt(pos);
-        pos += 4;
-        long minimum = getUInt(pos);    // now used as negative TTL
-        pos += 4;
-
-        return (mname + " " + rname + " " + serial + " " +
-                refresh + " " + retry + " " + expire + " " + minimum);
-    }
-
-    /*
-     * Returns the rdata of an SRV record that is encoded at msg[pos].
-     * See RFC 2782.
-     */
-    private String decodeSrv(int pos) throws InvalidNameException {
-        int priority = getUShort(pos);
-        pos += 2;
-        int weight =   getUShort(pos);
-        pos += 2;
-        int port =     getUShort(pos);
-        pos += 2;
-        DnsName target = decodeName(pos);
-        return (priority + " " + weight + " " + port + " " + target);
-    }
-
-    /*
-     * Returns the rdata of an NAPTR record that is encoded at msg[pos].
-     * See RFC 2915.
-     */
-    private String decodeNaptr(int pos) throws InvalidNameException {
-        int order = getUShort(pos);
-        pos += 2;
-        int preference = getUShort(pos);
-        pos += 2;
-        StringBuffer flags = new StringBuffer();
-        pos += decodeCharString(pos, flags);
-        StringBuffer services = new StringBuffer();
-        pos += decodeCharString(pos, services);
-        StringBuffer regexp = new StringBuffer(rdlen);
-        pos += decodeCharString(pos, regexp);
-        DnsName replacement = decodeName(pos);
-
-        return (order + " " + preference + " " + flags + " " +
-                services + " " + regexp + " " + replacement);
-    }
-
-    /*
-     * Returns the rdata of a TXT record that is encoded at msg[pos].
-     * The rdata consists of one or more <character-string>s.
-     */
-    private String decodeTxt(int pos) {
-        StringBuffer buf = new StringBuffer(rdlen);
-        int end = pos + rdlen;
-        while (pos < end) {
-            pos += decodeCharString(pos, buf);
-            if (pos < end) {
-                buf.append(' ');
-            }
-        }
-        return buf.toString();
-    }
-
-    /*
-     * Returns the rdata of an HINFO record that is encoded at msg[pos].
-     * The rdata consists of two <character-string>s.
-     */
-    private String decodeHinfo(int pos) {
-        StringBuffer buf = new StringBuffer(rdlen);
-        pos += decodeCharString(pos, buf);
-        buf.append(' ');
-        pos += decodeCharString(pos, buf);
-        return buf.toString();
-    }
-
-    /*
-     * Decodes the <character-string> at msg[pos] and adds it to buf.
-     * If the string contains one of the meta-characters ' ', '\\', or
-     * '"', then the result is quoted and any embedded '\\' or '"'
-     * chars are escaped with '\\'.  Empty strings are also quoted.
-     * Returns the size of the encoded string, including the initial
-     * length octet.
-     */
-    private int decodeCharString(int pos, StringBuffer buf) {
-        int start = buf.length();       // starting index of this string
-        int len = getUByte(pos++);      // encoded string length
-        boolean quoted = (len == 0);    // quote string if empty
-        for (int i = 0; i < len; i++) {
-            int c = getUByte(pos++);
-            quoted |= (c == ' ');
-            if ((c == '\\') || (c == '"')) {
-                quoted = true;
-                buf.append('\\');
-            }
-            buf.append((char) c);
-        }
-        if (quoted) {
-            buf.insert(start, '"');
-            buf.append('"');
-        }
-        return (len + 1);       // size includes initial octet
-    }
-
-    /*
-     * Returns the rdata of an A record, in dotted-decimal format,
-     * that is encoded at msg[pos].
-     */
-    private String decodeA(int pos) {
-        return ((msg[pos] & 0xff) + "." +
-                (msg[pos + 1] & 0xff) + "." +
-                (msg[pos + 2] & 0xff) + "." +
-                (msg[pos + 3] & 0xff));
-    }
-
-    /*
-     * Returns the rdata of an AAAA record, in colon-separated format,
-     * that is encoded at msg[pos].  For example:  4321:0:1:2:3:4:567:89ab.
-     * See RFCs 1886 and 2373.
-     */
-    private String decodeAAAA(int pos) {
-        int[] addr6 = new int[8];  // the unsigned 16-bit words of the address
-        for (int i = 0; i < 8; i++) {
-            addr6[i] = getUShort(pos);
-            pos += 2;
-        }
-
-        // Find longest sequence of two or more zeros, to compress them.
-        int curBase = -1;
-        int curLen = 0;
-        int bestBase = -1;
-        int bestLen = 0;
-        for (int i = 0; i < 8; i++) {
-            if (addr6[i] == 0) {
-                if (curBase == -1) {    // new sequence
-                    curBase = i;
-                    curLen = 1;
-                } else {                // extend sequence
-                    ++curLen;
-                    if ((curLen >= 2) && (curLen > bestLen)) {
-                        bestBase = curBase;
-                        bestLen = curLen;
-                    }
-                }
-            } else {                    // not in sequence
-                curBase = -1;
-            }
-        }
-
-        // If addr begins with at least 6 zeros and is not :: or ::1,
-        // or with 5 zeros followed by 0xffff, use the text format for
-        // IPv4-compatible or IPv4-mapped addresses.
-        if (bestBase == 0) {
-            if ((bestLen == 6) ||
-                    ((bestLen == 7) && (addr6[7] > 1))) {
-                return ("::" + decodeA(pos - 4));
-            } else if ((bestLen == 5) && (addr6[5] == 0xffff)) {
-                return ("::ffff:" + decodeA(pos - 4));
-            }
-        }
-
-        // If bestBase != -1, compress zeros in [bestBase, bestBase+bestLen)
-        boolean compress = (bestBase != -1);
-
-        StringBuffer buf = new StringBuffer(40);
-        if (bestBase == 0) {
-            buf.append(':');
-        }
-        for (int i = 0; i < 8; i++) {
-            if (!compress || (i < bestBase) || (i >= bestBase + bestLen)) {
-                buf.append(Integer.toHexString(addr6[i]));
-                if (i < 7) {
-                    buf.append(':');
-                }
-            } else if (compress && (i == bestBase)) {  // first compressed zero
-                buf.append(':');
-            }
-        }
-
-        return buf.toString();
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/dns/ResourceRecords.java b/ojluni/src/main/java/com/sun/jndi/dns/ResourceRecords.java
deleted file mode 100755
index ac49426..0000000
--- a/ojluni/src/main/java/com/sun/jndi/dns/ResourceRecords.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * Copyright (c) 2000, 2001, 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.jndi.dns;
-
-
-import java.util.Vector;
-import javax.naming.*;
-
-
-/**
- * The ResourceRecords class represents the resource records in the
- * four sections of a DNS message.
- *
- * The additional records section is currently ignored.
- *
- * @author Scott Seligman
- */
-
-
-class ResourceRecords {
-
-    // Four sections:  question, answer, authority, additional.
-    // The question section is treated as being made up of (shortened)
-    // resource records, although this isn't technically how it's defined.
-    Vector question = new Vector();
-    Vector answer = new Vector();
-    Vector authority = new Vector();
-    Vector additional = new Vector();
-
-    /*
-     * True if these resource records are from a zone transfer.  In
-     * that case only answer records are read (as per
-     * draft-ietf-dnsext-axfr-clarify-02.txt).  Also, the rdata of
-     * those answer records is not decoded (for efficiency) except
-     * for SOA records.
-     */
-    boolean zoneXfer;
-
-    /*
-     * Returns a representation of the resource records in a DNS message.
-     * Does not modify or store a reference to the msg array.
-     */
-    ResourceRecords(byte[] msg, int msgLen, Header hdr, boolean zoneXfer)
-            throws NamingException {
-        if (zoneXfer) {
-            answer.ensureCapacity(8192);        // an arbitrary "large" number
-        }
-        this.zoneXfer = zoneXfer;
-        add(msg, msgLen, hdr);
-    }
-
-    /*
-     * Returns the type field of the first answer record, or -1 if
-     * there are no answer records.
-     */
-    int getFirstAnsType() {
-        if (answer.size() == 0) {
-            return -1;
-        }
-        return ((ResourceRecord) answer.firstElement()).getType();
-    }
-
-    /*
-     * Returns the type field of the last answer record, or -1 if
-     * there are no answer records.
-     */
-    int getLastAnsType() {
-        if (answer.size() == 0) {
-            return -1;
-        }
-        return ((ResourceRecord) answer.lastElement()).getType();
-    }
-
-    /*
-     * Decodes the resource records in a DNS message and adds
-     * them to this object.
-     * Does not modify or store a reference to the msg array.
-     */
-    void add(byte[] msg, int msgLen, Header hdr) throws NamingException {
-
-        ResourceRecord rr;
-        int pos = Header.HEADER_SIZE;   // current offset into msg
-
-        try {
-            for (int i = 0; i < hdr.numQuestions; i++) {
-                rr = new ResourceRecord(msg, msgLen, pos, true, false);
-                if (!zoneXfer) {
-                    question.addElement(rr);
-                }
-                pos += rr.size();
-            }
-
-            for (int i = 0; i < hdr.numAnswers; i++) {
-                rr = new ResourceRecord(
-                        msg, msgLen, pos, false, !zoneXfer);
-                answer.addElement(rr);
-                pos += rr.size();
-            }
-
-            if (zoneXfer) {
-                return;
-            }
-
-            for (int i = 0; i < hdr.numAuthorities; i++) {
-                rr = new ResourceRecord(msg, msgLen, pos, false, true);
-                authority.addElement(rr);
-                pos += rr.size();
-            }
-
-            // The additional records section is currently ignored.
-
-        } catch (IndexOutOfBoundsException e) {
-            throw new CommunicationException(
-                    "DNS error: corrupted message");
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/dns/ZoneNode.java b/ojluni/src/main/java/com/sun/jndi/dns/ZoneNode.java
deleted file mode 100755
index f0dc591..0000000
--- a/ojluni/src/main/java/com/sun/jndi/dns/ZoneNode.java
+++ /dev/null
@@ -1,205 +0,0 @@
-/*
- * Copyright (c) 2000, 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.jndi.dns;
-
-
-import java.lang.ref.SoftReference;
-import java.util.Date;
-import java.util.Vector;
-
-
-/**
- * ZoneNode extends NameNode to represent a tree of the zones in the
- * DNS namespace, along with any intermediate nodes between zones.
- * A ZoneNode that represents a zone may be "populated" with a
- * NameNode tree containing the zone's contents.
- *
- * <p> A populated zone's contents will be flagged as having expired after
- * the time specified by the minimum TTL value in the zone's SOA record.
- *
- * <p> Since zone cuts aren't directly modeled by a tree of ZoneNodes,
- * ZoneNode.isZoneCut() always returns false.
- *
- * <p> The synchronization strategy is documented in DnsContext.java.
- *
- * <p> The zone's contents are accessed via a soft reference, so its
- * heap space may be reclaimed when necessary.  The zone may be
- * repopulated later.
- *
- * @author Scott Seligman
- */
-
-
-class ZoneNode extends NameNode {
-
-    private SoftReference contentsRef = null;   // the zone's namespace
-    private long serialNumber = -1;     // the zone data's serial number
-    private Date expiration = null;     // time when the zone's data expires
-
-    ZoneNode(String label) {
-        super(label);
-    }
-
-    protected NameNode newNameNode(String label) {
-        return new ZoneNode(label);
-    }
-
-    /*
-     * Clears the contents of this node.  If the node was flagged as
-     * expired, it remains so.
-     */
-    synchronized void depopulate() {
-        contentsRef = null;
-        serialNumber = -1;
-    }
-
-    /*
-     * Is this node currently populated?
-     */
-    synchronized boolean isPopulated() {
-        return (getContents() != null);
-    }
-
-    /*
-     * Returns the zone's contents, or null if the zone is not populated.
-     */
-    synchronized NameNode getContents() {
-        return (contentsRef != null)
-                ? (NameNode) contentsRef.get()
-                : null;
-    }
-
-    /*
-     * Has this zone's data expired?
-     */
-    synchronized boolean isExpired() {
-        return ((expiration != null) && expiration.before(new Date()));
-    }
-
-    /*
-     * Returns the deepest populated zone on the path specified by a
-     * fully-qualified domain name, or null if there is no populated
-     * zone on that path.  Note that a node may be depopulated after
-     * being returned.
-     */
-    ZoneNode getDeepestPopulated(DnsName fqdn) {
-        ZoneNode znode = this;
-        ZoneNode popNode = isPopulated() ? this : null;
-        for (int i = 1; i < fqdn.size(); i++) { //     "i=1" to skip root label
-            znode = (ZoneNode) znode.get(fqdn.getKey(i));
-            if (znode == null) {
-                break;
-            } else if (znode.isPopulated()) {
-                popNode = znode;
-            }
-        }
-        return popNode;
-    }
-
-    /*
-     * Populates (or repopulates) a zone given its own fully-qualified
-     * name and its resource records.  Returns the zone's new contents.
-     */
-    NameNode populate(DnsName zone, ResourceRecords rrs) {
-        // assert zone.get(0).equals("");               // zone has root label
-        // assert (zone.size() == (depth() + 1));       // +1 due to root label
-
-        NameNode newContents = new NameNode(null);
-
-        for (int i = 0; i < rrs.answer.size(); i++) {
-            ResourceRecord rr = (ResourceRecord) rrs.answer.elementAt(i);
-            DnsName n = rr.getName();
-
-            // Ignore resource records whose names aren't within the zone's
-            // domain.  Also skip records of the zone's top node, since
-            // the zone's root NameNode is already in place.
-            if ((n.size() > zone.size()) && n.startsWith(zone)) {
-                NameNode nnode = newContents.add(n, zone.size());
-                if (rr.getType() == ResourceRecord.TYPE_NS) {
-                    nnode.setZoneCut(true);
-                }
-            }
-        }
-        // The zone's SOA record is the first record in the answer section.
-        ResourceRecord soa = (ResourceRecord) rrs.answer.firstElement();
-        synchronized (this) {
-            contentsRef = new SoftReference(newContents);
-            serialNumber = getSerialNumber(soa);
-            setExpiration(getMinimumTtl(soa));
-            return newContents;
-        }
-    }
-
-    /*
-     * Set this zone's data to expire in <tt>secsToExpiration</tt> seconds.
-     */
-    private void setExpiration(long secsToExpiration) {
-        expiration = new Date(System.currentTimeMillis() +
-                              1000 * secsToExpiration);
-    }
-
-    /*
-     * Returns an SOA record's minimum TTL field.
-     */
-    private static long getMinimumTtl(ResourceRecord soa) {
-        String rdata = (String) soa.getRdata();
-        int pos = rdata.lastIndexOf(' ') + 1;
-        return Long.parseLong(rdata.substring(pos));
-    }
-
-    /*
-     * Compares this zone's serial number with that of an SOA record.
-     * Zone must be populated.
-     * Returns a negative, zero, or positive integer as this zone's
-     * serial number is less than, equal to, or greater than the SOA
-     * record's.
-     * See ResourceRecord.compareSerialNumbers() for a description of
-     * serial number arithmetic.
-     */
-    int compareSerialNumberTo(ResourceRecord soa) {
-        // assert isPopulated();
-        return ResourceRecord.compareSerialNumbers(serialNumber,
-                                                   getSerialNumber(soa));
-    }
-
-    /*
-     * Returns an SOA record's serial number.
-     */
-    private static long getSerialNumber(ResourceRecord soa) {
-        String rdata = (String) soa.getRdata();
-
-        // An SOA record ends with:  serial refresh retry expire minimum.
-        // Set "beg" to the space before serial, and "end" to the space after.
-        // We go "backward" to avoid dealing with escaped spaces in names.
-        int beg = rdata.length();
-        int end = -1;
-        for (int i = 0; i < 5; i++) {
-            end = beg;
-            beg = rdata.lastIndexOf(' ', end - 1);
-        }
-        return Long.parseLong(rdata.substring(beg + 1, end));
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/ldap/BasicControl.java b/ojluni/src/main/java/com/sun/jndi/ldap/BasicControl.java
deleted file mode 100755
index d068704..0000000
--- a/ojluni/src/main/java/com/sun/jndi/ldap/BasicControl.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * Copyright (c) 1999, 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
- * 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.jndi.ldap;
-
-import javax.naming.ldap.*;
-
-/**
-  * This class provides a basic implementation of the <tt>Control</tt>
-  * interface. It represents an LDAPv3 Control as defined in RFC-2251.
-  *
-  * @author Vincent Ryan
-  */
-public class BasicControl implements Control {
-
-    /**
-     * The control's object identifier string.
-     *
-     * @serial
-     */
-    protected String id;
-
-    /**
-     * The control's criticality.
-     *
-     * @serial
-     */
-    protected boolean criticality = false; // default
-
-    /**
-     * The control's ASN.1 BER encoded value.
-     *
-     * @serial
-     */
-    protected byte[] value = null;
-
-    private static final long serialVersionUID = -5914033725246428413L;
-
-    /**
-     * Constructs a new instance of BasicControl.
-     * It is a non-critical control.
-     *
-     * @param   id      The control's object identifier string.
-     *
-     */
-    public BasicControl(String id) {
-        this.id = id;
-    }
-
-    /**
-     * Constructs a new instance of BasicControl.
-     *
-     * @param   id              The control's object identifier string.
-     * @param   criticality     The control's criticality.
-     * @param   value           The control's ASN.1 BER encoded value.
-     *                          May be null.
-     */
-    public BasicControl(String id, boolean criticality, byte[] value) {
-        this.id = id;
-        this.criticality = criticality;
-        if (value != null) {
-            this.value = value;
-        }
-    }
-
-    /**
-      * Retrieves the control's object identifier string.
-      *
-      * @return The non-null object identifier string.
-      */
-    public String getID() {
-        return id;
-    }
-
-    /**
-      * Determines the control's criticality.
-      *
-      * @return true if the control is critical; false otherwise.
-      */
-    public boolean isCritical() {
-        return criticality;
-    }
-
-    /**
-      * Retrieves the control's ASN.1 BER encoded value.
-      * The result is the raw BER bytes including the tag and length of
-      * the control's value. It does not include the control's object
-      * identifier string or criticality.
-      *
-      * @return A possibly null byte array representing the control's
-      *         ASN.1 BER encoded value.
-      */
-    public byte[] getEncodedValue() {
-        return value == null ? null : value.clone();
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/ldap/Ber.java b/ojluni/src/main/java/com/sun/jndi/ldap/Ber.java
deleted file mode 100755
index 62a7e14..0000000
--- a/ojluni/src/main/java/com/sun/jndi/ldap/Ber.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * Copyright (c) 1999, 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.jndi.ldap;
-
-import java.io.OutputStream;
-import java.io.IOException;
-import java.io.ByteArrayInputStream;
-
-import sun.misc.HexDumpEncoder;
-
-/**
-  * Base class that defines common fields, constants, and debug method.
-  *
-  * @author Jagane Sundar
-  */
-public abstract class Ber {
-
-    protected byte buf[];
-    protected int offset;
-    protected int bufsize;
-
-    protected Ber() {
-    }
-
-    public static void dumpBER(OutputStream outStream, String tag, byte[] bytes,
-        int from, int to) {
-
-        try {
-            outStream.write('\n');
-            outStream.write(tag.getBytes("UTF8"));
-
-            new HexDumpEncoder().encodeBuffer(
-                new ByteArrayInputStream(bytes, from, to),
-                outStream);
-
-            outStream.write('\n');
-        } catch (IOException e) {
-            try {
-                outStream.write(
-                    "Ber.dumpBER(): error encountered\n".getBytes("UTF8"));
-            } catch (IOException e2) {
-                // ignore
-            }
-        }
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // some ASN defines
-    //
-    ////////////////////////////////////////////////////////////////////////////
-
-    public static final int ASN_BOOLEAN         = 0x01;
-    public static final int ASN_INTEGER         = 0x02;
-    public static final int ASN_BIT_STRING      = 0x03;
-    public static final int ASN_SIMPLE_STRING   = 0x04;
-    public static final int ASN_OCTET_STR       = 0x04;
-    public static final int ASN_NULL            = 0x05;
-    public static final int ASN_OBJECT_ID       = 0x06;
-    public static final int ASN_SEQUENCE        = 0x10;
-    public static final int ASN_SET             = 0x11;
-
-
-    public static final int ASN_PRIMITIVE       = 0x00;
-    public static final int ASN_UNIVERSAL       = 0x00;
-    public static final int ASN_CONSTRUCTOR     = 0x20;
-    public static final int ASN_APPLICATION     = 0x40;
-    public static final int ASN_CONTEXT         = 0x80;
-    public static final int ASN_PRIVATE         = 0xC0;
-
-    public static final int ASN_ENUMERATED      = 0x0a;
-
-    final static class EncodeException extends IOException {
-        EncodeException(String msg) {
-            super(msg);
-        }
-    }
-
-    final static class DecodeException extends IOException {
-        DecodeException(String msg) {
-            super(msg);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/ldap/BerDecoder.java b/ojluni/src/main/java/com/sun/jndi/ldap/BerDecoder.java
deleted file mode 100755
index 44b46f8..0000000
--- a/ojluni/src/main/java/com/sun/jndi/ldap/BerDecoder.java
+++ /dev/null
@@ -1,334 +0,0 @@
-/*
- * Copyright (c) 1999, 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.jndi.ldap;
-
-import java.io.UnsupportedEncodingException;
-
-/**
-  * A BER decoder. Contains methods to parse a BER buffer.
-  *
-  * @author Jagane Sundar
-  * @author Vincent Ryan
-  */
-public final class BerDecoder extends Ber {
-
-    private int origOffset;  // The start point in buf to decode
-
-    /**
-     * Creates a BER decoder that reads bytes from the specified buffer.
-     */
-    public BerDecoder(byte buf[], int offset, int bufsize) {
-
-        this.buf = buf;
-        this.bufsize = bufsize;
-        this.origOffset = offset;
-
-        reset();
-    }
-
-    /**
-     * Resets this decode to start parsing from the initial offset
-     * (ie., same state as after calling the constructor).
-     */
-    public void reset() {
-        offset = origOffset;
-    }
-
-    /**
-      * Returns the current parse position.
-      * It points to the byte that will be parsed next.
-      * Useful for parsing sequences.
-      */
-    public int getParsePosition() {
-        return offset;
-    }
-
-    /**
-      * Parses a possibly variable length field.
-      */
-    public int parseLength() throws DecodeException {
-
-        int lengthbyte = parseByte();
-
-        if ((lengthbyte & 0x80) == 0x80) {
-
-            lengthbyte &= 0x7f;
-
-            if (lengthbyte == 0) {
-                throw new DecodeException(
-                    "Indefinite length not supported");
-            }
-
-            if (lengthbyte > 4) {
-                throw new DecodeException("encoding too long");
-            }
-
-            if (bufsize - offset < lengthbyte) {
-                throw new DecodeException("Insufficient data");
-            }
-
-            int retval = 0;
-
-            for( int i = 0; i < lengthbyte; i++) {
-                retval = (retval << 8) + (buf[offset++] & 0xff);
-            }
-            return retval;
-        } else {
-            return lengthbyte;
-        }
-    }
-
-    /**
-     * Parses the next sequence in this BER buffer.
-     * @param rlen An array for returning size of the sequence in bytes. If null,
-     *          the size is not returned.
-     * @return The sequence's tag.
-     */
-    public int parseSeq(int rlen[]) throws DecodeException {
-
-        int seq = parseByte();
-        int len = parseLength();
-        if (rlen != null) {
-            rlen[0] = len;
-        }
-        return seq;
-    }
-
-    /**
-     * Used to skip bytes. Usually used when trying to recover from parse error.
-     * Don't need to be public right now?
-     * @param i The number of bytes to skip
-     */
-    void seek(int i) throws DecodeException {
-        if (offset + i > bufsize || offset + i < 0) {
-            throw new DecodeException("array index out of bounds");
-        }
-        offset += i;
-    }
-
-    /**
-     * Parses the next byte in this BER buffer.
-     * @return The byte parsed.
-     */
-    public int parseByte() throws DecodeException {
-        if (bufsize - offset < 1) {
-            throw new DecodeException("Insufficient data");
-        }
-        return buf[offset++] & 0xff;
-    }
-
-
-    /**
-     * Returns the next byte in this BER buffer without consuming it.
-     * @return The next byte.
-     */
-    public int peekByte() throws DecodeException {
-        if (bufsize - offset < 1) {
-            throw new DecodeException("Insufficient data");
-        }
-        return buf[offset] & 0xff;
-    }
-
-    /**
-     * Parses an ASN_BOOLEAN tagged integer from this BER buffer.
-     * @return true if the tagged integer is 0; false otherwise.
-     */
-    public boolean parseBoolean() throws DecodeException {
-        return ((parseIntWithTag(ASN_BOOLEAN) == 0x00) ? false : true);
-    }
-
-    /**
-     * Parses an ASN_ENUMERATED tagged integer from this BER buffer.
-     * @return The tag of enumeration.
-     */
-    public int parseEnumeration() throws DecodeException {
-        return parseIntWithTag(ASN_ENUMERATED);
-    }
-
-    /**
-     * Parses an ASN_INTEGER tagged integer from this BER buffer.
-     * @return The value of the integer.
-     */
-    public int parseInt() throws DecodeException {
-        return parseIntWithTag(ASN_INTEGER);
-    }
-
-    /**
-      * Parses an integer that's preceded by a tag.
-      *<blockquote><pre>
-      * BER integer ::= tag length byte {byte}*
-      *</pre></blockquote>
-      */
-    private int parseIntWithTag(int tag) throws DecodeException {
-
-
-        if (parseByte() != tag) {
-            throw new DecodeException("Encountered ASN.1 tag " +
-                Integer.toString(buf[offset - 1] & 0xff) +
-                " (expected tag " + Integer.toString(tag) + ")");
-        }
-
-        int len = parseLength();
-
-        if (len > 4) {
-            throw new DecodeException("INTEGER too long");
-        } else if (len > bufsize - offset) {
-            throw new DecodeException("Insufficient data");
-        }
-
-        byte fb = buf[offset++];
-        int value = 0;
-
-        value = fb & 0x7F;
-        for( int i = 1 /* first byte already read */ ; i < len; i++) {
-            value <<= 8;
-            value |= (buf[offset++] & 0xff);
-        }
-
-        if ((fb & 0x80) == 0x80) {
-            value = -value;
-        }
-
-        return value;
-    }
-
-    /**
-      * Parses a string.
-      */
-    public String parseString(boolean decodeUTF8) throws DecodeException {
-        return parseStringWithTag(ASN_SIMPLE_STRING, decodeUTF8, null);
-    }
-
-    /**
-      * Parses a string of a given tag from this BER buffer.
-      *<blockquote><pre>
-      *BER simple string ::= tag length {byte}*
-      *</pre></blockquote>
-      * @param rlen An array for holding the relative parsed offset; if null
-      *  offset not set.
-      * @param decodeUTF8 If true, use UTF-8 when decoding the string; otherwise
-      * use ISO-Latin-1 (8859_1). Use true for LDAPv3; false for LDAPv2.
-      * @param tag The tag that precedes the string.
-      * @return The non-null parsed string.
-      */
-    public String parseStringWithTag(int tag, boolean decodeUTF8, int rlen[])
-        throws DecodeException {
-
-        int st;
-        int origOffset = offset;
-
-        if ((st = parseByte()) != tag) {
-            throw new DecodeException("Encountered ASN.1 tag " +
-                Integer.toString((byte)st) + " (expected tag " + tag + ")");
-        }
-
-        int len = parseLength();
-
-        if (len > bufsize - offset) {
-            throw new DecodeException("Insufficient data");
-        }
-
-        String retstr;
-        if (len == 0) {
-            retstr = "";
-        } else {
-            byte[] buf2 = new byte[len];
-
-            System.arraycopy(buf, offset, buf2, 0, len);
-            if (decodeUTF8) {
-                try {
-                    retstr = new String(buf2, "UTF8");
-                } catch (UnsupportedEncodingException e) {
-                    throw new DecodeException("UTF8 not available on platform");
-                }
-            } else {
-                try {
-                    retstr = new String(buf2, "8859_1");
-                } catch (UnsupportedEncodingException e) {
-                    throw new DecodeException("8859_1 not available on platform");
-                }
-            }
-            offset += len;
-        }
-
-        if (rlen != null) {
-            rlen[0] = offset - origOffset;
-        }
-
-        return retstr;
-    }
-
-    /**
-     * Parses an octet string of a given type(tag) from this BER buffer.
-     * <blockquote><pre>
-     * BER Binary Data of type "tag" ::= tag length {byte}*
-     *</pre></blockquote>
-     *
-     * @param tag The tag to look for.
-     * @param rlen An array for returning the relative parsed position. If null,
-     *          the relative parsed position is not returned.
-     * @return A non-null array containing the octet string.
-     * @throws DecodeException If the next byte in the BER buffer is not
-     * <tt>tag</tt>, or if length specified in the BER buffer exceeds the
-     * number of bytes left in the buffer.
-     */
-    public byte[] parseOctetString(int tag, int rlen[]) throws DecodeException {
-
-        int origOffset = offset;
-        int st;
-        if ((st = parseByte()) != tag) {
-
-            throw new DecodeException("Encountered ASN.1 tag " +
-                Integer.toString(st) +
-                " (expected tag " + Integer.toString(tag) + ")");
-        }
-
-        int len = parseLength();
-
-        if (len > bufsize - offset) {
-            throw new DecodeException("Insufficient data");
-        }
-
-        byte retarr[] = new byte[len];
-        if (len > 0) {
-            System.arraycopy(buf, offset, retarr, 0, len);
-            offset += len;
-        }
-
-        if (rlen != null) {
-            rlen[0] = offset - origOffset;
-        }
-
-        return retarr;
-    }
-
-    /**
-     * Returns the number of unparsed bytes in this BER buffer.
-     */
-    public int bytesLeft() {
-        return bufsize - offset;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/ldap/BerEncoder.java b/ojluni/src/main/java/com/sun/jndi/ldap/BerEncoder.java
deleted file mode 100755
index fc8566d..0000000
--- a/ojluni/src/main/java/com/sun/jndi/ldap/BerEncoder.java
+++ /dev/null
@@ -1,429 +0,0 @@
-/*
- * Copyright (c) 1999, 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.jndi.ldap;
-
-import java.io.UnsupportedEncodingException;
-
-/**
-  * A BER encoder.
-  *
-  * @author Jagane Sundar
-  * @author Scott Seligman
-  * @author Vincent Ryan
-  */
-public final class BerEncoder extends Ber {
-
-    private int curSeqIndex;
-    private int seqOffset[];
-    private static final int INITIAL_SEQUENCES = 16;
-    private static final int DEFAULT_BUFSIZE = 1024;
-
-    // When buf is full, expand its size by the following factor.
-    private static final int BUF_GROWTH_FACTOR = 8;
-
-    /**
-     * Creates a BER buffer for encoding.
-     */
-    public BerEncoder() {
-        this(DEFAULT_BUFSIZE);
-    }
-
-    /**
-     * Creates a BER buffer of a specified size for encoding.
-     * Specify the initial bufsize.  Buffer will be expanded as needed.
-     * @param bufsize The number of bytes for the buffer.
-     */
-    public BerEncoder(int bufsize) {
-        buf = new byte[bufsize];
-        this.bufsize = bufsize;
-        offset = 0;
-
-        seqOffset = new int[INITIAL_SEQUENCES];
-        curSeqIndex = 0;
-    }
-
-    /**
-     * Resets encoder to state when newly constructed.  Zeros out
-     * internal data structures.
-     */
-    public void reset() {
-        while (offset > 0) {
-            buf[--offset] = 0;
-        }
-        while (curSeqIndex > 0) {
-            seqOffset[--curSeqIndex] = 0;
-        }
-    }
-
-// ------------------ Accessor methods ------------
-
-    /**
-     * Gets the number of encoded bytes in this BER buffer.
-     */
-    public int getDataLen() {
-        return offset;
-    }
-
-    /**
-     * Gets the buffer that contains the BER encoding. Throws an
-     * exception if unmatched beginSeq() and endSeq() pairs were
-     * encountered. Not entire buffer contains encoded bytes.
-     * Use getDataLen() to determine number of encoded bytes.
-     * Use getBuffer(true) to get rid of excess bytes in array.
-     * @throws IllegalStateException If buffer contains unbalanced sequence.
-     */
-    public byte[] getBuf() {
-        if (curSeqIndex != 0) {
-            throw new IllegalStateException("BER encode error: Unbalanced SEQUENCEs.");
-        }
-        return buf;
-    }
-
-    /**
-     * Gets the buffer that contains the BER encoding, trimming unused bytes.
-     *
-     * @throws IllegalStateException If buffer contains unbalanced sequence.
-     */
-    public byte[] getTrimmedBuf() {
-        int len = getDataLen();
-        byte[] trimBuf = new byte[len];
-
-        System.arraycopy(getBuf(), 0, trimBuf, 0, len);
-        return trimBuf;
-    }
-
-// -------------- encoding methods -------------
-
-    /**
-     * Begin encoding a sequence with a tag.
-     */
-    public void beginSeq(int tag) {
-
-        // Double the size of the SEQUENCE array if it overflows
-        if (curSeqIndex >= seqOffset.length) {
-            int[] seqOffsetTmp = new int[seqOffset.length * 2];
-
-            for (int i = 0; i < seqOffset.length; i++) {
-                seqOffsetTmp[i] = seqOffset[i];
-            }
-            seqOffset = seqOffsetTmp;
-        }
-
-        encodeByte(tag);
-        seqOffset[curSeqIndex] = offset;
-
-        // Save space for sequence length.
-        // %%% Currently we save enough space for sequences up to 64k.
-        //     For larger sequences we'll need to shift the data to the right
-        //     in endSeq().  If we could instead pad the length field with
-        //     zeros, it would be a big win.
-        ensureFreeBytes(3);
-        offset += 3;
-
-        curSeqIndex++;
-    }
-
-    /**
-      * Terminate a BER sequence.
-      */
-    public void endSeq() throws EncodeException {
-        curSeqIndex--;
-        if (curSeqIndex < 0) {
-            throw new IllegalStateException("BER encode error: Unbalanced SEQUENCEs.");
-        }
-
-        int start = seqOffset[curSeqIndex] + 3; // index beyond length field
-        int len = offset - start;
-
-        if (len <= 0x7f) {
-            shiftSeqData(start, len, -2);
-            buf[seqOffset[curSeqIndex]] = (byte) len;
-        } else if (len <= 0xff) {
-            shiftSeqData(start, len, -1);
-            buf[seqOffset[curSeqIndex]] = (byte) 0x81;
-            buf[seqOffset[curSeqIndex] + 1] = (byte) len;
-        } else if (len <= 0xffff) {
-            buf[seqOffset[curSeqIndex]] = (byte) 0x82;
-            buf[seqOffset[curSeqIndex] + 1] = (byte) (len >> 8);
-            buf[seqOffset[curSeqIndex] + 2] = (byte) len;
-        } else if (len <= 0xffffff) {
-            shiftSeqData(start, len, 1);
-            buf[seqOffset[curSeqIndex]] = (byte) 0x83;
-            buf[seqOffset[curSeqIndex] + 1] = (byte) (len >> 16);
-            buf[seqOffset[curSeqIndex] + 2] = (byte) (len >> 8);
-            buf[seqOffset[curSeqIndex] + 3] = (byte) len;
-        } else {
-            throw new EncodeException("SEQUENCE too long");
-        }
-    }
-
-    /**
-     * Shifts contents of buf in the range [start,start+len) a specified amount.
-     * Positive shift value means shift to the right.
-     */
-    private void shiftSeqData(int start, int len, int shift) {
-        if (shift > 0) {
-            ensureFreeBytes(shift);
-        }
-        System.arraycopy(buf, start, buf, start + shift, len);
-        offset += shift;
-    }
-
-    /**
-     * Encode a single byte.
-     */
-    public void encodeByte(int b) {
-        ensureFreeBytes(1);
-        buf[offset++] = (byte) b;
-    }
-
-/*
-    private void deleteByte() {
-        offset--;
-    }
-*/
-
-
-    /*
-     * Encodes an int.
-     *<blockquote><pre>
-     * BER integer ::= 0x02 berlength byte {byte}*
-     *</pre></blockquote>
-     */
-    public void encodeInt(int i) {
-        encodeInt(i, 0x02);
-    }
-
-    /**
-     * Encodes an int and a tag.
-     *<blockquote><pre>
-     * BER integer w tag ::= tag berlength byte {byte}*
-     *</pre></blockquote>
-     */
-    public void encodeInt(int i, int tag) {
-        int mask = 0xff800000;
-        int intsize = 4;
-
-        while( (((i & mask) == 0) || ((i & mask) == mask)) && (intsize > 1) ) {
-            intsize--;
-            i <<= 8;
-        }
-
-        encodeInt(i, tag, intsize);
-    }
-
-    //
-    // encodes an int using numbytes for the actual encoding.
-    //
-    private void encodeInt(int i, int tag, int intsize) {
-
-        //
-        // integer ::= 0x02 asnlength byte {byte}*
-        //
-
-        if (intsize > 4) {
-            throw new IllegalArgumentException("BER encode error: INTEGER too long.");
-        }
-
-        ensureFreeBytes(2 + intsize);
-
-        buf[offset++] = (byte) tag;
-        buf[offset++] = (byte) intsize;
-
-        int mask = 0xff000000;
-
-        while (intsize-- > 0) {
-            buf[offset++] = (byte) ((i & mask) >> 24);
-            i <<= 8;
-        }
-    }
-
-    /**
-     * Encodes a boolean.
-     *<blockquote><pre>
-     * BER boolean ::= 0x01 0x01 {0xff|0x00}
-     *</pre></blockquote>
-     */
-    public void encodeBoolean(boolean b) {
-        encodeBoolean(b, ASN_BOOLEAN);
-    }
-
-
-    /**
-     * Encodes a boolean and a tag
-     *<blockquote><pre>
-     * BER boolean w TAG ::= tag 0x01 {0xff|0x00}
-     *</pre></blockquote>
-     */
-    public void encodeBoolean(boolean b, int tag) {
-        ensureFreeBytes(3);
-
-        buf[offset++] = (byte) tag;
-        buf[offset++] = 0x01;
-        buf[offset++] = b ? (byte) 0xff : (byte) 0x00;
-    }
-
-    /**
-     * Encodes a string.
-     *<blockquote><pre>
-     * BER string ::= 0x04 strlen byte1 byte2...
-     *</pre></blockquote>
-     * The string is converted into bytes using UTF-8 or ISO-Latin-1.
-     */
-    public void encodeString(String str, boolean encodeUTF8)
-        throws EncodeException {
-        encodeString(str, ASN_OCTET_STR, encodeUTF8);
-    }
-
-    /**
-     * Encodes a string and a tag.
-     *<blockquote><pre>
-     * BER string w TAG ::= tag strlen byte1 byte2...
-     *</pre></blockquote>
-     */
-    public void encodeString(String str, int tag, boolean encodeUTF8)
-        throws EncodeException {
-
-        encodeByte(tag);
-
-        int i = 0;
-        int count;
-        byte[] bytes = null;
-
-        if (str == null) {
-            count = 0;
-        } else if (encodeUTF8) {
-            try {
-                bytes = str.getBytes("UTF8");
-                count = bytes.length;
-            } catch (UnsupportedEncodingException e) {
-                throw new EncodeException("UTF8 not available on platform");
-            }
-        } else {
-            try {
-                bytes = str.getBytes("8859_1");
-                count = bytes.length;
-            } catch (UnsupportedEncodingException e) {
-                throw new EncodeException("8859_1 not available on platform");
-            }
-        }
-
-        encodeLength(count);
-
-        ensureFreeBytes(count);
-        while (i < count) {
-            buf[offset++] = bytes[i++];
-        }
-    }
-
-    /**
-     * Encodes a portion of an octet string and a tag.
-     */
-    public void encodeOctetString(byte tb[], int tag, int tboffset, int length)
-        throws EncodeException {
-
-        encodeByte(tag);
-        encodeLength(length);
-
-        if (length > 0) {
-            ensureFreeBytes(length);
-            System.arraycopy(tb, tboffset, buf, offset, length);
-            offset += length;
-        }
-    }
-
-    /**
-      * Encodes an octet string and a tag.
-      */
-    public void encodeOctetString(byte tb[], int tag) throws EncodeException {
-        encodeOctetString(tb, tag, 0, tb.length);
-    }
-
-    private void encodeLength(int len) throws EncodeException {
-        ensureFreeBytes(4);     // worst case
-
-        if (len < 128) {
-            buf[offset++] = (byte) len;
-        } else if (len <= 0xff) {
-            buf[offset++] = (byte) 0x81;
-            buf[offset++] = (byte) len;
-        } else if (len <= 0xffff) {
-            buf[offset++] = (byte) 0x82;
-            buf[offset++] = (byte) (len >> 8);
-            buf[offset++] = (byte) (len & 0xff);
-        } else if (len <= 0xffffff) {
-            buf[offset++] = (byte) 0x83;
-            buf[offset++] = (byte) (len >> 16);
-            buf[offset++] = (byte) (len >> 8);
-            buf[offset++] = (byte) (len & 0xff);
-        } else {
-            throw new EncodeException("string too long");
-        }
-    }
-
-    /**
-     * Encodes an array of strings.
-     */
-    public void encodeStringArray(String strs[], boolean encodeUTF8)
-        throws EncodeException {
-        if (strs == null)
-            return;
-        for (int i = 0; i < strs.length; i++) {
-            encodeString(strs[i], encodeUTF8);
-        }
-    }
-/*
-    private void encodeNull() {
-
-        //
-        // NULL ::= 0x05 0x00
-        //
-        encodeByte(0x05);
-        encodeByte(0x00);
-    }
-*/
-
-    /**
-     * Ensures that there are at least "len" unused bytes in "buf".
-     * When more space is needed "buf" is expanded by a factor of
-     * BUF_GROWTH_FACTOR, then "len" bytes are added if "buf" still
-     * isn't large enough.
-     */
-    private void ensureFreeBytes(int len) {
-        if (bufsize - offset < len) {
-            int newsize = bufsize * BUF_GROWTH_FACTOR;
-            if (newsize - offset < len) {
-                newsize += len;
-            }
-            byte newbuf[] = new byte[newsize];
-            // Only copy bytes in the range [0, offset)
-            System.arraycopy(buf, 0, newbuf, 0, offset);
-
-            buf = newbuf;
-            bufsize = newsize;
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/ldap/BindingWithControls.java b/ojluni/src/main/java/com/sun/jndi/ldap/BindingWithControls.java
deleted file mode 100755
index ee88982..0000000
--- a/ojluni/src/main/java/com/sun/jndi/ldap/BindingWithControls.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (c) 1999, 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.jndi.ldap;
-
-import javax.naming.*;
-import javax.naming.ldap.*;
-
-class BindingWithControls extends Binding implements HasControls {
-    private Control[] controls;
-
-    public BindingWithControls(String name, Object obj, Control[] controls) {
-        super(name, obj);
-        this.controls = controls;
-    }
-
-    public Control[] getControls() throws NamingException {
-        return controls;
-    }
-
-    private static final long serialVersionUID = 9117274533692320040L;
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/ldap/ClientId.java b/ojluni/src/main/java/com/sun/jndi/ldap/ClientId.java
deleted file mode 100755
index bfddd0a..0000000
--- a/ojluni/src/main/java/com/sun/jndi/ldap/ClientId.java
+++ /dev/null
@@ -1,224 +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.
- */
-
-package com.sun.jndi.ldap;
-
-import java.util.Arrays; // JDK 1.2
-import java.io.OutputStream;
-import javax.naming.ldap.Control;
-import java.lang.reflect.Method;
-import javax.net.SocketFactory;
-
-/**
- * Represents identity information about an anonymous LDAP connection.
- * This base class contains the following information:
- * - protocol version number
- * - server's hostname (case-insensitive)
- * - server's port number
- * - prototype type (plain or ssl)
- * - controls to be sent with the LDAP bind request
- *
- * All other identity classes must be a subclass of ClientId.
- * Identity subclasses would add more distinguishing information, depending
- * on the type of authentication that the connection is to have.
- *
- * The equals() and hashCode() methods of this class and its subclasses are
- * important because they are used to determine whether two requests for
- * the same connection are identical, and thus whether the same connection
- * may be shared. This is especially important for authenticated connections
- * because a mistake would result in a serious security violation.
- *
- * @author Rosanna Lee
- */
-class ClientId {
-    final private int version;
-    final private String hostname;
-    final private int port;
-    final private String protocol;
-    final private Control[] bindCtls;
-    final private OutputStream trace;
-    final private String socketFactory;
-    final private int myHash;
-    final private int ctlHash;
-
-    private SocketFactory factory = null;
-    private Method sockComparator = null;
-    private boolean isDefaultSockFactory = false;
-    final public static boolean debug = false;
-
-    ClientId(int version, String hostname, int port, String protocol,
-            Control[] bindCtls, OutputStream trace, String socketFactory) {
-        this.version = version;
-        this.hostname = hostname.toLowerCase();  // ignore case
-        this.port = port;
-        this.protocol = protocol;
-        this.bindCtls = (bindCtls != null ? (Control[]) bindCtls.clone() : null);
-        this.trace = trace;
-        //
-        // Needed for custom socket factory pooling
-        //
-        this.socketFactory = socketFactory;
-        if ((socketFactory != null) &&
-             !socketFactory.equals(LdapCtx.DEFAULT_SSL_FACTORY)) {
-            try {
-                Class socketFactoryClass = Obj.helper.loadClass(socketFactory);
-                Class objClass = Class.forName("java.lang.Object");
-                this.sockComparator = socketFactoryClass.getMethod(
-                                "compare", new Class[]{objClass, objClass});
-                Method getDefault =
-                    socketFactoryClass.getMethod("getDefault", new Class[]{});
-                this.factory = (SocketFactory) getDefault.invoke(null, new Object[]{});
-            } catch (Exception e) {
-                // Ignore it here, the same exceptions are/will be handled by
-                // LdapPoolManager and Connection classes.
-                if (debug) {
-                    System.out.println("ClientId received an exception");
-                    e.printStackTrace();
-                }
-            }
-        } else {
-             isDefaultSockFactory = true;
-        }
-
-        // The SocketFactory field is not used in the myHash
-        // computation as there is no right way to compute the hash code
-        // for this field. There is no harm in skipping it from the hash
-        // computation
-        myHash = version + port
-            + (trace != null ? trace.hashCode() : 0)
-            + (this.hostname != null ? this.hostname.hashCode() : 0)
-            + (protocol != null ? protocol.hashCode() : 0)
-            + (ctlHash=hashCodeControls(bindCtls));
-    }
-
-    public boolean equals(Object obj) {
-        if (!(obj instanceof ClientId)) {
-            return false;
-        }
-
-        ClientId other = (ClientId)obj;
-
-        return myHash == other.myHash
-            && version == other.version
-            && port == other.port
-            && trace == other.trace
-            && (hostname == other.hostname // null OK
-                || (hostname != null && hostname.equals(other.hostname)))
-            && (protocol == other.protocol // null OK
-                || (protocol != null && protocol.equals(other.protocol)))
-            && ctlHash == other.ctlHash
-            && (equalsControls(bindCtls, other.bindCtls))
-            && (equalsSockFactory(other));
-    }
-
-    public int hashCode() {
-        return myHash;
-    }
-
-    private static int hashCodeControls(Control[] c) {
-        if (c == null) {
-            return 0;
-        }
-
-        int code = 0;
-        for (int i = 0; i < c.length; i++) {
-            code = code * 31 + c[i].getID().hashCode();
-        }
-        return code;
-    }
-
-    private static boolean equalsControls(Control[] a, Control[] b) {
-        if (a == b) {
-            return true;  // both null or same
-        }
-        if (a == null || b == null) {
-            return false; // one is non-null
-        }
-        if (a.length != b.length) {
-            return false;
-        }
-
-        for (int i = 0; i < a.length; i++) {
-            if (!a[i].getID().equals(b[i].getID())
-                || a[i].isCritical() != b[i].isCritical()
-                || !Arrays.equals(a[i].getEncodedValue(),
-                    b[i].getEncodedValue())) {
-                return false;
-            }
-        }
-        return true;
-    }
-
-    private boolean equalsSockFactory(ClientId other) {
-        if (this.isDefaultSockFactory && other.isDefaultSockFactory) {
-            return true;
-        }
-        else if (!other.isDefaultSockFactory) {
-             return invokeComparator(other, this);
-        } else {
-             return invokeComparator(this, other);
-        }
-    }
-
-    // delegate the comparison work to the SocketFactory class
-    // as there is no enough information here, to do the comparison
-    private boolean invokeComparator(ClientId c1, ClientId c2) {
-        Object ret;
-        try {
-            ret = (c1.sockComparator).invoke(
-                        c1.factory, c1.socketFactory, c2.socketFactory);
-        } catch(Exception e) {
-            if (debug) {
-                System.out.println("ClientId received an exception");
-                e.printStackTrace();
-            }
-            // Failed to invoke the comparator; flag unequality
-            return false;
-        }
-        if (((Integer) ret) == 0) {
-            return true;
-        }
-        return false;
-    }
-
-    private static String toStringControls(Control[] ctls) {
-        if (ctls == null) {
-            return "";
-        }
-        StringBuffer str = new StringBuffer();
-        for (int i = 0; i < ctls.length; i++) {
-            str.append(ctls[i].getID());
-            str.append(' ');
-        }
-        return str.toString();
-    }
-
-    public String toString() {
-        return (hostname + ":" + port + ":" +
-            (protocol != null ? protocol : "") + ":" +
-            toStringControls(bindCtls) + ":" +
-            socketFactory);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/ldap/Connection.java b/ojluni/src/main/java/com/sun/jndi/ldap/Connection.java
deleted file mode 100755
index 02d67c0..0000000
--- a/ojluni/src/main/java/com/sun/jndi/ldap/Connection.java
+++ /dev/null
@@ -1,1031 +0,0 @@
-/*
- * Copyright (c) 1999, 2012, 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.jndi.ldap;
-
-import java.io.BufferedInputStream;
-import java.io.BufferedOutputStream;
-import java.io.InterruptedIOException;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.InputStream;
-import java.net.Socket;
-import javax.net.ssl.SSLSocket;
-
-import javax.naming.CommunicationException;
-import javax.naming.ServiceUnavailableException;
-import javax.naming.NamingException;
-import javax.naming.InterruptedNamingException;
-
-import javax.naming.ldap.Control;
-
-import java.lang.reflect.Method;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
-import java.util.Arrays;
-import sun.misc.IOUtils;
-//import javax.net.SocketFactory;
-
-/**
-  * A thread that creates a connection to an LDAP server.
-  * After the connection, the thread reads from the connection.
-  * A caller can invoke methods on the instance to read LDAP responses
-  * and to send LDAP requests.
-  * <p>
-  * There is a one-to-one correspondence between an LdapClient and
-  * a Connection. Access to Connection and its methods is only via
-  * LdapClient with two exceptions: SASL authentication and StartTLS.
-  * SASL needs to access Connection's socket IO streams (in order to do encryption
-  * of the security layer). StartTLS needs to do replace IO streams
-  * and close the IO  streams on nonfatal close. The code for SASL
-  * authentication can be treated as being the same as from LdapClient
-  * because the SASL code is only ever called from LdapClient, from
-  * inside LdapClient's synchronized authenticate() method. StartTLS is called
-  * directly by the application but should only occur when the underlying
-  * connection is quiet.
-  * <p>
-  * In terms of synchronization, worry about data structures
-  * used by the Connection thread because that usage might contend
-  * with calls by the main threads (i.e., those that call LdapClient).
-  * Main threads need to worry about contention with each other.
-  * Fields that Connection thread uses:
-  *     inStream - synced access and update; initialized in constructor;
-  *           referenced outside class unsync'ed (by LdapSasl) only
-  *           when connection is quiet
-  *     traceFile, traceTagIn, traceTagOut - no sync; debugging only
-  *     parent - no sync; initialized in constructor; no updates
-  *     pendingRequests - sync
-  *     pauseLock - per-instance lock;
-  *     paused - sync via pauseLock (pauseReader())
-  * Members used by main threads (LdapClient):
-  *     host, port - unsync; read-only access for StartTLS and debug messages
-  *     setBound(), setV3() - no sync; called only by LdapClient.authenticate(),
-  *             which is a sync method called only when connection is "quiet"
-  *     getMsgId() - sync
-  *     writeRequest(), removeRequest(),findRequest(), abandonOutstandingReqs() -
-  *             access to shared pendingRequests is sync
-  *     writeRequest(),  abandonRequest(), ldapUnbind() - access to outStream sync
-  *     cleanup() - sync
-  *     readReply() - access to sock sync
-  *     unpauseReader() - (indirectly via writeRequest) sync on pauseLock
-  * Members used by SASL auth (main thread):
-  *     inStream, outStream - no sync; used to construct new stream; accessed
-  *             only when conn is "quiet" and not shared
-  *     replaceStreams() - sync method
-  * Members used by StartTLS:
-  *     inStream, outStream - no sync; used to record the existing streams;
-  *             accessed only when conn is "quiet" and not shared
-  *     replaceStreams() - sync method
-  * <p>
-  * Handles anonymous, simple, and SASL bind for v3; anonymous and simple
-  * for v2.
-  * %%% made public for access by LdapSasl %%%
-  *
-  * @author Vincent Ryan
-  * @author Rosanna Lee
-  * @author Jagane Sundar
-  */
-public final class Connection implements Runnable {
-
-    private static final boolean debug = false;
-    private static final int dump = 0; // > 0 r, > 1 rw
-
-
-    final private Thread worker;    // Initialized in constructor
-
-    private boolean v3 = true;       // Set in setV3()
-
-    final public String host;  // used by LdapClient for generating exception messages
-                         // used by StartTlsResponse when creating an SSL socket
-    final public int port;     // used by LdapClient for generating exception messages
-                         // used by StartTlsResponse when creating an SSL socket
-
-    private boolean bound = false;   // Set in setBound()
-
-    // All three are initialized in constructor and read-only afterwards
-    private OutputStream traceFile = null;
-    private String traceTagIn = null;
-    private String traceTagOut = null;
-
-    // Initialized in constructor; read and used externally (LdapSasl);
-    // Updated in replaceStreams() during "quiet", unshared, period
-    public InputStream inStream;   // must be public; used by LdapSasl
-
-    // Initialized in constructor; read and used externally (LdapSasl);
-    // Updated in replaceOutputStream() during "quiet", unshared, period
-    public OutputStream outStream; // must be public; used by LdapSasl
-
-    // Initialized in constructor; read and used externally (TLS) to
-    // get new IO streams; closed during cleanup
-    public Socket sock;            // for TLS
-
-    // For processing "disconnect" unsolicited notification
-    // Initialized in constructor
-    final private LdapClient parent;
-
-    // Incremented and returned in sync getMsgId()
-    private int outMsgId = 0;
-
-    //
-    // The list of ldapRequests pending on this binding
-    //
-    // Accessed only within sync methods
-    private LdapRequest pendingRequests = null;
-
-    volatile IOException closureReason = null;
-    volatile boolean useable = true;  // is Connection still useable
-
-    int readTimeout;
-    int connectTimeout;
-
-    // true means v3; false means v2
-    // Called in LdapClient.authenticate() (which is synchronized)
-    // when connection is "quiet" and not shared; no need to synchronize
-    void setV3(boolean v) {
-        v3 = v;
-    }
-
-    // A BIND request has been successfully made on this connection
-    // When cleaning up, remember to do an UNBIND
-    // Called in LdapClient.authenticate() (which is synchronized)
-    // when connection is "quiet" and not shared; no need to synchronize
-    void setBound() {
-        bound = true;
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Create an LDAP Binding object and bind to a particular server
-    //
-    ////////////////////////////////////////////////////////////////////////////
-
-    Connection(LdapClient parent, String host, int port, String socketFactory,
-        int connectTimeout, int readTimeout, OutputStream trace) throws NamingException {
-
-        this.host = host;
-        this.port = port;
-        this.parent = parent;
-        this.readTimeout = readTimeout;
-        this.connectTimeout = connectTimeout;
-
-        if (trace != null) {
-            traceFile = trace;
-            traceTagIn = "<- " + host + ":" + port + "\n\n";
-            traceTagOut = "-> " + host + ":" + port + "\n\n";
-        }
-
-        //
-        // Connect to server
-        //
-        try {
-            sock = createSocket(host, port, socketFactory, connectTimeout);
-
-            if (debug) {
-                System.err.println("Connection: opening socket: " + host + "," + port);
-            }
-
-            inStream = new BufferedInputStream(sock.getInputStream());
-            outStream = new BufferedOutputStream(sock.getOutputStream());
-
-        } catch (InvocationTargetException e) {
-            Throwable realException = e.getTargetException();
-            // realException.printStackTrace();
-
-            CommunicationException ce =
-                new CommunicationException(host + ":" + port);
-            ce.setRootCause(realException);
-            throw ce;
-        } catch (Exception e) {
-            // Class.forName() seems to do more error checking
-            // and will throw IllegalArgumentException and such.
-            // That's why we need to have a catch all here and
-            // ignore generic exceptions.
-            // Also catches all IO errors generated by socket creation.
-            CommunicationException ce =
-                new CommunicationException(host + ":" + port);
-            ce.setRootCause(e);
-            throw ce;
-        }
-
-        worker = Obj.helper.createThread(this);
-        worker.setDaemon(true);
-        worker.start();
-    }
-
-    /*
-     * Create an InetSocketAddress using the specified hostname and port number.
-     */
-    private Object createInetSocketAddress(String host, int port)
-            throws NoSuchMethodException {
-
-        try {
-            Class inetSocketAddressClass =
-                Class.forName("java.net.InetSocketAddress");
-
-            Constructor inetSocketAddressCons =
-                inetSocketAddressClass.getConstructor(new Class[]{
-                String.class, int.class});
-
-            return inetSocketAddressCons.newInstance(new Object[]{
-                host, new Integer(port)});
-
-        } catch (ClassNotFoundException e) {
-            throw new NoSuchMethodException();
-
-        } catch (InstantiationException e) {
-            throw new NoSuchMethodException();
-
-        } catch (InvocationTargetException e) {
-            throw new NoSuchMethodException();
-
-        } catch (IllegalAccessException e) {
-            throw new NoSuchMethodException();
-        }
-    }
-
-    /*
-     * Create a Socket object using the specified socket factory and time limit.
-     *
-     * If a timeout is supplied and unconnected sockets are supported then
-     * an unconnected socket is created and the timeout is applied when
-     * connecting the socket. If a timeout is supplied but unconnected sockets
-     * are not supported then the timeout is ignored and a connected socket
-     * is created.
-     */
-    private Socket createSocket(String host, int port, String socketFactory,
-            int connectTimeout) throws Exception {
-
-        Socket socket = null;
-
-        if (socketFactory != null) {
-
-            // create the factory
-
-            Class socketFactoryClass = Obj.helper.loadClass(socketFactory);
-            Method getDefault =
-                socketFactoryClass.getMethod("getDefault", new Class[]{});
-            Object factory = getDefault.invoke(null, new Object[]{});
-
-            // create the socket
-
-            Method createSocket = null;
-
-            if (connectTimeout > 0) {
-
-                try {
-                    createSocket = socketFactoryClass.getMethod("createSocket",
-                        new Class[]{});
-
-                    Method connect = Socket.class.getMethod("connect",
-                        new Class[]{Class.forName("java.net.SocketAddress"),
-                        int.class});
-                    Object endpoint = createInetSocketAddress(host, port);
-
-                    // unconnected socket
-                    socket =
-                        (Socket)createSocket.invoke(factory, new Object[]{});
-
-                    if (debug) {
-                        System.err.println("Connection: creating socket with " +
-                            "a timeout using supplied socket factory");
-                    }
-
-                    // connected socket
-                    connect.invoke(socket, new Object[]{
-                        endpoint, new Integer(connectTimeout)});
-
-                } catch (NoSuchMethodException e) {
-                    // continue (but ignore connectTimeout)
-                }
-            }
-
-            if (socket == null) {
-                createSocket = socketFactoryClass.getMethod("createSocket",
-                    new Class[]{String.class, int.class});
-
-                if (debug) {
-                    System.err.println("Connection: creating socket using " +
-                        "supplied socket factory");
-                }
-                // connected socket
-                socket = (Socket) createSocket.invoke(factory,
-                    new Object[]{host, new Integer(port)});
-            }
-        } else {
-
-            if (connectTimeout > 0) {
-
-                try {
-                    Constructor socketCons =
-                        Socket.class.getConstructor(new Class[]{});
-
-                    Method connect = Socket.class.getMethod("connect",
-                        new Class[]{Class.forName("java.net.SocketAddress"),
-                        int.class});
-                    Object endpoint = createInetSocketAddress(host, port);
-
-                    socket = (Socket) socketCons.newInstance(new Object[]{});
-
-                    if (debug) {
-                        System.err.println("Connection: creating socket with " +
-                            "a timeout");
-                    }
-                    connect.invoke(socket, new Object[]{
-                        endpoint, new Integer(connectTimeout)});
-
-                } catch (NoSuchMethodException e) {
-                    // continue (but ignore connectTimeout)
-                }
-            }
-
-            if (socket == null) {
-                if (debug) {
-                    System.err.println("Connection: creating socket");
-                }
-                // connected socket
-                socket = new Socket(host, port);
-            }
-        }
-
-        // For LDAP connect timeouts on LDAP over SSL connections must treat
-        // the SSL handshake following socket connection as part of the timeout.
-        // So explicitly set a socket read timeout, trigger the SSL handshake,
-        // then reset the timeout.
-        if (connectTimeout > 0 && socket instanceof SSLSocket) {
-            SSLSocket sslSocket = (SSLSocket) socket;
-            int socketTimeout = sslSocket.getSoTimeout();
-
-            sslSocket.setSoTimeout(connectTimeout); // reuse full timeout value
-            sslSocket.startHandshake();
-            sslSocket.setSoTimeout(socketTimeout);
-        }
-
-        return socket;
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Methods to IO to the LDAP server
-    //
-    ////////////////////////////////////////////////////////////////////////////
-
-    synchronized int getMsgId() {
-        return ++outMsgId;
-    }
-
-    LdapRequest writeRequest(BerEncoder ber, int msgId) throws IOException {
-        return writeRequest(ber, msgId, false /* pauseAfterReceipt */, -1);
-    }
-
-    LdapRequest writeRequest(BerEncoder ber, int msgId,
-        boolean pauseAfterReceipt) throws IOException {
-        return writeRequest(ber, msgId, pauseAfterReceipt, -1);
-    }
-
-    LdapRequest writeRequest(BerEncoder ber, int msgId,
-        boolean pauseAfterReceipt, int replyQueueCapacity) throws IOException {
-
-        LdapRequest req =
-            new LdapRequest(msgId, pauseAfterReceipt, replyQueueCapacity);
-        addRequest(req);
-
-        if (traceFile != null) {
-            Ber.dumpBER(traceFile, traceTagOut, ber.getBuf(), 0, ber.getDataLen());
-        }
-
-
-        // unpause reader so that it can get response
-        // NOTE: Must do this before writing request, otherwise might
-        // create a race condition where the writer unblocks its own response
-        unpauseReader();
-
-        if (debug) {
-            System.err.println("Writing request to: " + outStream);
-        }
-
-        try {
-            synchronized (this) {
-                outStream.write(ber.getBuf(), 0, ber.getDataLen());
-                outStream.flush();
-            }
-        } catch (IOException e) {
-            cleanup(null, true);
-            throw (closureReason = e); // rethrow
-        }
-
-        return req;
-    }
-
-    /**
-     * Reads a reply; waits until one is ready.
-     */
-    BerDecoder readReply(LdapRequest ldr)
-            throws IOException, NamingException {
-        BerDecoder rber;
-        boolean waited = false;
-
-        while (((rber = ldr.getReplyBer()) == null) && !waited) {
-            try {
-                // If socket closed, don't even try
-                synchronized (this) {
-                    if (sock == null) {
-                        throw new ServiceUnavailableException(host + ":" + port +
-                            "; socket closed");
-                    }
-                }
-                synchronized (ldr) {
-                    // check if condition has changed since our last check
-                    rber = ldr.getReplyBer();
-                    if (rber == null) {
-                        if (readTimeout > 0) {  // Socket read timeout is specified
-
-                            // will be woken up before readTimeout only if reply is
-                            // available
-                            ldr.wait(readTimeout);
-                            waited = true;
-                        } else {
-                            ldr.wait(15 * 1000); // 15 second timeout
-                        }
-                    } else {
-                        break;
-                    }
-                }
-            } catch (InterruptedException ex) {
-                throw new InterruptedNamingException(
-                    "Interrupted during LDAP operation");
-            }
-        }
-
-        if ((rber == null) && waited) {
-            removeRequest(ldr);
-            throw new NamingException("LDAP response read timed out, timeout used:"
-                            + readTimeout + "ms." );
-
-        }
-        return rber;
-    }
-
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Methods to add, find, delete, and abandon requests made to server
-    //
-    ////////////////////////////////////////////////////////////////////////////
-
-    private synchronized void addRequest(LdapRequest ldapRequest) {
-
-        LdapRequest ldr = pendingRequests;
-        if (ldr == null) {
-            pendingRequests = ldapRequest;
-            ldapRequest.next = null;
-        } else {
-            ldapRequest.next = pendingRequests;
-            pendingRequests = ldapRequest;
-        }
-    }
-
-    synchronized LdapRequest findRequest(int msgId) {
-
-        LdapRequest ldr = pendingRequests;
-        while (ldr != null) {
-            if (ldr.msgId == msgId) {
-                return ldr;
-            }
-            ldr = ldr.next;
-        }
-        return null;
-
-    }
-
-    synchronized void removeRequest(LdapRequest req) {
-        LdapRequest ldr = pendingRequests;
-        LdapRequest ldrprev = null;
-
-        while (ldr != null) {
-            if (ldr == req) {
-                ldr.cancel();
-
-                if (ldrprev != null) {
-                    ldrprev.next = ldr.next;
-                } else {
-                    pendingRequests = ldr.next;
-                }
-                ldr.next = null;
-            }
-            ldrprev = ldr;
-            ldr = ldr.next;
-        }
-    }
-
-    void abandonRequest(LdapRequest ldr, Control[] reqCtls) {
-        // Remove from queue
-        removeRequest(ldr);
-
-        BerEncoder ber = new BerEncoder(256);
-        int abandonMsgId = getMsgId();
-
-        //
-        // build the abandon request.
-        //
-        try {
-            ber.beginSeq(Ber.ASN_SEQUENCE | Ber.ASN_CONSTRUCTOR);
-                ber.encodeInt(abandonMsgId);
-                ber.encodeInt(ldr.msgId, LdapClient.LDAP_REQ_ABANDON);
-
-                if (v3) {
-                    LdapClient.encodeControls(ber, reqCtls);
-                }
-            ber.endSeq();
-
-            if (traceFile != null) {
-                Ber.dumpBER(traceFile, traceTagOut, ber.getBuf(), 0,
-                    ber.getDataLen());
-            }
-
-            synchronized (this) {
-                outStream.write(ber.getBuf(), 0, ber.getDataLen());
-                outStream.flush();
-            }
-
-        } catch (IOException ex) {
-            //System.err.println("ldap.abandon: " + ex);
-        }
-
-        // Dont expect any response for the abandon request.
-    }
-
-    synchronized void abandonOutstandingReqs(Control[] reqCtls) {
-        LdapRequest ldr = pendingRequests;
-
-        while (ldr != null) {
-            abandonRequest(ldr, reqCtls);
-            pendingRequests = ldr = ldr.next;
-        }
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Methods to unbind from server and clear up resources when object is
-    // destroyed.
-    //
-    ////////////////////////////////////////////////////////////////////////////
-
-    private void ldapUnbind(Control[] reqCtls) {
-
-        BerEncoder ber = new BerEncoder(256);
-        int unbindMsgId = getMsgId();
-
-        //
-        // build the unbind request.
-        //
-
-        try {
-
-            ber.beginSeq(Ber.ASN_SEQUENCE | Ber.ASN_CONSTRUCTOR);
-                ber.encodeInt(unbindMsgId);
-                // IMPLICIT TAGS
-                ber.encodeByte(LdapClient.LDAP_REQ_UNBIND);
-                ber.encodeByte(0);
-
-                if (v3) {
-                    LdapClient.encodeControls(ber, reqCtls);
-                }
-            ber.endSeq();
-
-            if (traceFile != null) {
-                Ber.dumpBER(traceFile, traceTagOut, ber.getBuf(),
-                    0, ber.getDataLen());
-            }
-
-            synchronized (this) {
-                outStream.write(ber.getBuf(), 0, ber.getDataLen());
-                outStream.flush();
-            }
-
-        } catch (IOException ex) {
-            //System.err.println("ldap.unbind: " + ex);
-        }
-
-        // Dont expect any response for the unbind request.
-    }
-
-    /**
-     * @param reqCtls Possibly null request controls that accompanies the
-     *    abandon and unbind LDAP request.
-     * @param notifyParent true means to call parent LdapClient back, notifying
-     *    it that the connection has been closed; false means not to notify
-     *    parent. If LdapClient invokes cleanup(), notifyParent should be set to
-     *    false because LdapClient already knows that it is closing
-     *    the connection. If Connection invokes cleanup(), notifyParent should be
-     *    set to true because LdapClient needs to know about the closure.
-     */
-    void cleanup(Control[] reqCtls, boolean notifyParent) {
-        boolean nparent = false;
-
-        synchronized (this) {
-            useable = false;
-
-            if (sock != null) {
-                if (debug) {
-                    System.err.println("Connection: closing socket: " + host + "," + port);
-                }
-                try {
-                    if (!notifyParent) {
-                        abandonOutstandingReqs(reqCtls);
-                    }
-                    if (bound) {
-                        ldapUnbind(reqCtls);
-                    }
-                } finally {
-                    try {
-                        outStream.flush();
-                        sock.close();
-                        unpauseReader();
-                    } catch (IOException ie) {
-                        if (debug)
-                            System.err.println("Connection: problem closing socket: " + ie);
-                    }
-                    if (!notifyParent) {
-                        LdapRequest ldr = pendingRequests;
-                        while (ldr != null) {
-                            ldr.cancel();
-                            ldr = ldr.next;
-                        }
-                    }
-                    sock = null;
-                }
-                nparent = notifyParent;
-            }
-            if (nparent) {
-                LdapRequest ldr = pendingRequests;
-                while (ldr != null) {
-
-                    synchronized (ldr) {
-                        ldr.notify();
-                        ldr = ldr.next;
-                    }
-                }
-            }
-        }
-        if (nparent) {
-            parent.processConnectionClosure();
-        }
-    }
-
-
-    // Assume everything is "quiet"
-    // "synchronize" might lead to deadlock so don't synchronize method
-    // Use streamLock instead for synchronizing update to stream
-
-    synchronized public void replaceStreams(InputStream newIn, OutputStream newOut) {
-        if (debug) {
-            System.err.println("Replacing " + inStream + " with: " + newIn);
-            System.err.println("Replacing " + outStream + " with: " + newOut);
-        }
-
-        inStream = newIn;
-
-        // Cleanup old stream
-        try {
-            outStream.flush();
-        } catch (IOException ie) {
-            if (debug)
-                System.err.println("Connection: cannot flush outstream: " + ie);
-        }
-
-        // Replace stream
-        outStream = newOut;
-    }
-
-    /**
-     * Used by Connection thread to read inStream into a local variable.
-     * This ensures that there is no contention between the main thread
-     * and the Connection thread when the main thread updates inStream.
-     */
-    synchronized private InputStream getInputStream() {
-        return inStream;
-    }
-
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Code for pausing/unpausing the reader thread ('worker')
-    //
-    ////////////////////////////////////////////////////////////////////////////
-
-    /*
-     * The main idea is to mark requests that need the reader thread to
-     * pause after getting the response. When the reader thread gets the response,
-     * it waits on a lock instead of returning to the read(). The next time a
-     * request is sent, the reader is automatically unblocked if necessary.
-     * Note that the reader must be unblocked BEFORE the request is sent.
-     * Otherwise, there is a race condition where the request is sent and
-     * the reader thread might read the response and be unblocked
-     * by writeRequest().
-     *
-     * This pause gives the main thread (StartTLS or SASL) an opportunity to
-     * update the reader's state (e.g., its streams) if necessary.
-     * The assumption is that the connection will remain quiet during this pause
-     * (i.e., no intervening requests being sent).
-     *<p>
-     * For dealing with StartTLS close,
-     * when the read() exits either due to EOF or an exception,
-     * the reader thread checks whether there is a new stream to read from.
-     * If so, then it reattempts the read. Otherwise, the EOF or exception
-     * is processed and the reader thread terminates.
-     * In a StartTLS close, the client first replaces the SSL IO streams with
-     * plain ones and then closes the SSL socket.
-     * If the reader thread attempts to read, or was reading, from
-     * the SSL socket (that is, it got to the read BEFORE replaceStreams()),
-     * the SSL socket close will cause the reader thread to
-     * get an EOF/exception and reexamine the input stream.
-     * If the reader thread sees a new stream, it reattempts the read.
-     * If the underlying socket is still alive, then the new read will succeed.
-     * If the underlying socket has been closed also, then the new read will
-     * fail and the reader thread exits.
-     * If the reader thread attempts to read, or was reading, from the plain
-     * socket (that is, it got to the read AFTER replaceStreams()), the
-     * SSL socket close will have no effect on the reader thread.
-     *
-     * The check for new stream is made only
-     * in the first attempt at reading a BER buffer; the reader should
-     * never be in midst of reading a buffer when a nonfatal close occurs.
-     * If this occurs, then the connection is in an inconsistent state and
-     * the safest thing to do is to shut it down.
-     */
-
-    private Object pauseLock = new Object();  // lock for reader to wait on while paused
-    private boolean paused = false;           // paused state of reader
-
-    /*
-     * Unpauses reader thread if it was paused
-     */
-    private void unpauseReader() throws IOException {
-        synchronized (pauseLock) {
-            if (paused) {
-                if (debug) {
-                    System.err.println("Unpausing reader; read from: " +
-                                        inStream);
-                }
-                paused = false;
-                pauseLock.notify();
-            }
-        }
-    }
-
-     /*
-     * Pauses reader so that it stops reading from the input stream.
-     * Reader blocks on pauseLock instead of read().
-     * MUST be called from within synchronized (pauseLock) clause.
-     */
-    private void pauseReader() throws IOException {
-        if (debug) {
-            System.err.println("Pausing reader;  was reading from: " +
-                                inStream);
-        }
-        paused = true;
-        try {
-            while (paused) {
-                pauseLock.wait(); // notified by unpauseReader
-            }
-        } catch (InterruptedException e) {
-            throw new InterruptedIOException(
-                    "Pause/unpause reader has problems.");
-        }
-    }
-
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // The LDAP Binding thread. It does the mux/demux of multiple requests
-    // on the same TCP connection.
-    //
-    ////////////////////////////////////////////////////////////////////////////
-
-
-    public void run() {
-        byte inbuf[];   // Buffer for reading incoming bytes
-        int inMsgId;    // Message id of incoming response
-        int bytesread;  // Number of bytes in inbuf
-        int br;         // Temp; number of bytes read from stream
-        int offset;     // Offset of where to store bytes in inbuf
-        int seqlen;     // Length of ASN sequence
-        int seqlenlen;  // Number of sequence length bytes
-        boolean eos;    // End of stream
-        BerDecoder retBer;    // Decoder for ASN.1 BER data from inbuf
-        InputStream in = null;
-
-        try {
-            while (true) {
-                try {
-                    // type and length (at most 128 octets for long form)
-                    inbuf = new byte[129];
-
-                    offset = 0;
-                    seqlen = 0;
-                    seqlenlen = 0;
-
-                    in = getInputStream();
-
-                    // check that it is the beginning of a sequence
-                    bytesread = in.read(inbuf, offset, 1);
-                    if (bytesread < 0) {
-                        if (in != getInputStream()) {
-                            continue;   // a new stream to try
-                        } else {
-                            break; // EOF
-                        }
-                    }
-
-                    if (inbuf[offset++] != (Ber.ASN_SEQUENCE | Ber.ASN_CONSTRUCTOR))
-                        continue;
-
-                    // get length of sequence
-                    bytesread = in.read(inbuf, offset, 1);
-                    if (bytesread < 0)
-                        break; // EOF
-                    seqlen = inbuf[offset++];
-
-                    // if high bit is on, length is encoded in the
-                    // subsequent length bytes and the number of length bytes
-                    // is equal to & 0x80 (i.e. length byte with high bit off).
-                    if ((seqlen & 0x80) == 0x80) {
-                        seqlenlen = seqlen & 0x7f;  // number of length bytes
-
-                        bytesread = 0;
-                        eos = false;
-
-                        // Read all length bytes
-                        while (bytesread < seqlenlen) {
-                            br = in.read(inbuf, offset+bytesread,
-                                seqlenlen-bytesread);
-                            if (br < 0) {
-                                eos = true;
-                                break; // EOF
-                            }
-                            bytesread += br;
-                        }
-
-                        // end-of-stream reached before length bytes are read
-                        if (eos)
-                            break;  // EOF
-
-                        // Add contents of length bytes to determine length
-                        seqlen = 0;
-                        for( int i = 0; i < seqlenlen; i++) {
-                            seqlen = (seqlen << 8) + (inbuf[offset+i] & 0xff);
-                        }
-                        offset += bytesread;
-                    }
-
-                    // read in seqlen bytes
-                    byte[] left = IOUtils.readFully(in, seqlen, false);
-                    inbuf = Arrays.copyOf(inbuf, offset + left.length);
-                    System.arraycopy(left, 0, inbuf, offset, left.length);
-                    offset += left.length;
-/*
-if (dump > 0) {
-System.err.println("seqlen: " + seqlen);
-System.err.println("bufsize: " + offset);
-System.err.println("bytesleft: " + bytesleft);
-System.err.println("bytesread: " + bytesread);
-}
-*/
-
-
-                    try {
-                        retBer = new BerDecoder(inbuf, 0, offset);
-
-                        if (traceFile != null) {
-                            Ber.dumpBER(traceFile, traceTagIn, inbuf, 0, offset);
-                        }
-
-                        retBer.parseSeq(null);
-                        inMsgId = retBer.parseInt();
-                        retBer.reset(); // reset offset
-
-                        boolean needPause = false;
-
-                        if (inMsgId == 0) {
-                            // Unsolicited Notification
-                            parent.processUnsolicited(retBer);
-                        } else {
-                            LdapRequest ldr = findRequest(inMsgId);
-
-                            if (ldr != null) {
-
-                                /**
-                                 * Grab pauseLock before making reply available
-                                 * to ensure that reader goes into paused state
-                                 * before writer can attempt to unpause reader
-                                 */
-                                synchronized (pauseLock) {
-                                    needPause = ldr.addReplyBer(retBer);
-                                    if (needPause) {
-                                        /*
-                                         * Go into paused state; release
-                                         * pauseLock
-                                         */
-                                        pauseReader();
-                                    }
-
-                                    // else release pauseLock
-                                }
-                            } else {
-                                // System.err.println("Cannot find" +
-                                //              "LdapRequest for " + inMsgId);
-                            }
-                        }
-                    } catch (Ber.DecodeException e) {
-                        //System.err.println("Cannot parse Ber");
-                    }
-                } catch (IOException ie) {
-                    if (debug) {
-                        System.err.println("Connection: Inside Caught " + ie);
-                        ie.printStackTrace();
-                    }
-
-                    if (in != getInputStream()) {
-                        // A new stream to try
-                        // Go to top of loop and continue
-                    } else {
-                        if (debug) {
-                            System.err.println("Connection: rethrowing " + ie);
-                        }
-                        throw ie;  // rethrow exception
-                    }
-                }
-            }
-
-            if (debug) {
-                System.err.println("Connection: end-of-stream detected: "
-                    + in);
-            }
-        } catch (IOException ex) {
-            if (debug) {
-                System.err.println("Connection: Caught " + ex);
-            }
-            closureReason = ex;
-        } finally {
-            cleanup(null, true); // cleanup
-        }
-        if (debug) {
-            System.err.println("Connection: Thread Exiting");
-        }
-    }
-
-
-    // This code must be uncommented to run the LdapAbandonTest.
-    /*public void sendSearchReqs(String dn, int numReqs) {
-        int i;
-        String attrs[] = null;
-        for(i = 1; i <= numReqs; i++) {
-            BerEncoder ber = new BerEncoder(2048);
-
-            try {
-            ber.beginSeq(Ber.ASN_SEQUENCE | Ber.ASN_CONSTRUCTOR);
-                ber.encodeInt(i);
-                ber.beginSeq(LdapClient.LDAP_REQ_SEARCH);
-                    ber.encodeString(dn == null ? "" : dn);
-                    ber.encodeInt(0, LdapClient.LBER_ENUMERATED);
-                    ber.encodeInt(3, LdapClient.LBER_ENUMERATED);
-                    ber.encodeInt(0);
-                    ber.encodeInt(0);
-                    ber.encodeBoolean(true);
-                    LdapClient.encodeFilter(ber, "");
-                    ber.beginSeq(Ber.ASN_SEQUENCE | Ber.ASN_CONSTRUCTOR);
-                        ber.encodeStringArray(attrs);
-                    ber.endSeq();
-                ber.endSeq();
-            ber.endSeq();
-            writeRequest(ber, i);
-            //System.err.println("wrote request " + i);
-            } catch (Exception ex) {
-            //System.err.println("ldap.search: Caught " + ex + " building req");
-            }
-
-        }
-    } */
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/ldap/DefaultResponseControlFactory.java b/ojluni/src/main/java/com/sun/jndi/ldap/DefaultResponseControlFactory.java
deleted file mode 100755
index 89b0148..0000000
--- a/ojluni/src/main/java/com/sun/jndi/ldap/DefaultResponseControlFactory.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-package com.sun.jndi.ldap;
-
-import java.io.IOException;
-import javax.naming.*;
-import javax.naming.directory.*;
-import javax.naming.ldap.*;
-
-/**
- * This class represents a factory for creating LDAPv3 response controls.
- * The following response controls are supported:
- * <ul>
- * <li>
- * Paged results, as defined in
- * <a href="http://www.ietf.org/rfc/rfc2696.txt">RFC 2696</a>.
- * <li>
- * Server-side sorting, as defined in
- * <a href="http://www.ietf.org/rfc/rfc2891.txt">RFC 2891</a>.
- * <li>
- * Entry change response control, as defined in
- * <a href="http://www.ietf.org/internet-drafts/draft-ietf-ldapext-psearch-02.txt">draft-ietf-ldapext-psearch-02.txt</a>.
- * </ul>
- *
- * @see javax.naming.ldap.SortResponseControl
- * @see javax.naming.ldap.PagedResultsResponseControl
- * @see PersistentSearchControl
- * @see EntryChangeResponseControl
- * @author Vincent Ryan
- */
-public class DefaultResponseControlFactory extends ControlFactory {
-
-    /**
-     * Constructs a new instance of the response control factory.
-     */
-    public DefaultResponseControlFactory() {
-    }
-
-    /**
-     * Creates an instance of a response control class from a more
-     * generic control class (BasicControl).
-     *
-     * @param ctl A non-null control.
-     * @return    The LDAP control created or null if it cannot be created.
-     *            Null indicates that another factory should be attempted.
-     * @exception NamingException if this control factory encountered an
-     *            error condition while attempting to create the LDAP control,
-     *            and no other control factories are to be tried.
-     */
-    public Control getControlInstance(Control ctl)
-        throws NamingException {
-
-        String id = ctl.getID();
-//System.out.println(id);
-
-        try {
-            if (id.equals(SortResponseControl.OID)) {
-                return new SortResponseControl(id, ctl.isCritical(),
-                    ctl.getEncodedValue());
-
-            } else if (id.equals(PagedResultsResponseControl.OID)) {
-                return new PagedResultsResponseControl(id, ctl.isCritical(),
-                    ctl.getEncodedValue());
-
-            } else if (id.equals(EntryChangeResponseControl.OID)) {
-                return new EntryChangeResponseControl(id, ctl.isCritical(),
-                    ctl.getEncodedValue());
-
-            }
-        } catch (IOException e) {
-            NamingException ne = new NamingException();
-            ne.setRootCause(e);
-            throw ne;
-        }
-        return null;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/ldap/DigestClientId.java b/ojluni/src/main/java/com/sun/jndi/ldap/DigestClientId.java
deleted file mode 100755
index b1cd1a8..0000000
--- a/ojluni/src/main/java/com/sun/jndi/ldap/DigestClientId.java
+++ /dev/null
@@ -1,118 +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.
- */
-
-package com.sun.jndi.ldap;
-
-import java.util.Arrays; // JDK 1.2
-import java.util.Hashtable;
-
-import java.io.OutputStream;
-import javax.naming.ldap.Control;
-
-/**
- * Extends SimpleClientId to add property values specific for Digest-MD5.
- * This includes:
- * realm, authzid, qop, strength, maxbuffer, mutual-auth, reuse,
- * all policy-related selection properties.
- * Two DigestClientIds are identical iff they pass the SimpleClientId
- * equals() test and that all of these property values are the same.
- *
- * @author Rosanna Lee
- */
-class DigestClientId extends SimpleClientId {
-    private static final String[] SASL_PROPS = {
-        "java.naming.security.sasl.authorizationId",
-        "java.naming.security.sasl.realm",
-        "javax.security.sasl.qop",
-        "javax.security.sasl.strength",
-        "javax.security.sasl.reuse",
-        "javax.security.sasl.server.authentication",
-        "javax.security.sasl.maxbuffer",
-        "javax.security.sasl.policy.noplaintext",
-        "javax.security.sasl.policy.noactive",
-        "javax.security.sasl.policy.nodictionary",
-        "javax.security.sasl.policy.noanonymous",
-        "javax.security.sasl.policy.forward",
-        "javax.security.sasl.policy.credentials",
-    };
-
-    final private String[] propvals;
-    final private int myHash;
-    private int pHash = 0;
-
-    DigestClientId(int version, String hostname, int port,
-        String protocol, Control[] bindCtls, OutputStream trace,
-        String socketFactory, String username,
-        Object passwd, Hashtable env) {
-
-        super(version, hostname, port, protocol, bindCtls, trace,
-            socketFactory, username, passwd);
-
-        if (env == null) {
-            propvals = null;
-        } else {
-            // Could be smarter and apply default values for props
-            // but for now, we just record and check exact matches
-            propvals = new String[SASL_PROPS.length];
-            for (int i = 0; i < SASL_PROPS.length; i++) {
-                propvals[i] = (String) env.get(SASL_PROPS[i]);
-                if (propvals[i] != null) {
-                    pHash = pHash * 31 + propvals[i].hashCode();
-                }
-            }
-        }
-        myHash = super.hashCode() + pHash;
-    }
-
-    public boolean equals(Object obj) {
-        if (!(obj instanceof DigestClientId)) {
-            return false;
-        }
-        DigestClientId other = (DigestClientId)obj;
-        return myHash == other.myHash
-            && pHash == other.pHash
-            && super.equals(obj)
-            && Arrays.equals(propvals, other.propvals);
-    }
-
-    public int hashCode() {
-        return myHash;
-    }
-
-    public String toString() {
-        if (propvals != null) {
-            StringBuffer buf = new StringBuffer();
-            for (int i = 0; i < propvals.length; i++) {
-                buf.append(':');
-                if (propvals[i] != null) {
-                    buf.append(propvals[i]);
-                }
-            }
-            return super.toString() + buf.toString();
-        } else {
-            return super.toString();
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/ldap/EntryChangeResponseControl.java b/ojluni/src/main/java/com/sun/jndi/ldap/EntryChangeResponseControl.java
deleted file mode 100755
index e8c1ae2..0000000
--- a/ojluni/src/main/java/com/sun/jndi/ldap/EntryChangeResponseControl.java
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- * Copyright (c) 1999, 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.jndi.ldap;
-
-import java.io.IOException;
-import javax.naming.*;
-import javax.naming.directory.*;
-
-/**
- * This class implements the LDAPv3 Response Control for entry-change
- * notification as defined in
- * <a href="http://www.ietf.org/internet-drafts/draft-ietf-ldapext-psearch-02.txt">draft-ietf-ldapext-psearch-02.txt</a>.
- *
- * The control's value has the following ASN.1 definition:
- * <pre>
- *
- *     EntryChangeNotification ::= SEQUENCE {
- *         changeType ENUMERATED {
- *             add              (1),
- *             delete           (2),
- *             modify           (4),
- *             modDN            (8)
- *         },
- *         previousDN   LDAPDN OPTIONAL,        -- modifyDN ops. only
- *         changeNumber INTEGER OPTIONAL,       -- if supported
- *    }
- *
- * </pre>
- *
- * @see PersistentSearchControl
- * @see com.sun.jndi.ldap.ctl.ResponseControlFactory ResponseControlFactory
- * @author Vincent Ryan
- */
-final public class EntryChangeResponseControl extends BasicControl {
-
-    /**
-     * The entry-change response control's assigned object identifier
-     * is 2.16.840.1.113730.3.4.7.
-     */
-    public static final String OID = "2.16.840.1.113730.3.4.7";
-
-    /**
-     * Indicates an entry which has been added.
-     */
-    public static final int ADD = 1;
-
-    /**
-     * Indicates an entry which has been deleted.
-     */
-    public static final int DELETE = 2;
-
-    /**
-     * Indicates an entry which has been modified.
-     */
-    public static final int MODIFY = 4;
-
-    /**
-     * Indicates an entry which has been renamed.
-     */
-    public static final int RENAME = 8;
-
-    /**
-     * The type of change that occurred.
-     *
-     * @serial
-     */
-    private int changeType;
-
-    /**
-     * The previous distinguished name (only applies to RENAME changes).
-     *
-     * @serial
-     */
-    private String previousDN = null;
-
-    /**
-     * The change number (if supported by the server).
-     *
-     * @serial
-     */
-    private long changeNumber = -1L;
-
-    private static final long serialVersionUID = -2087354136750180511L;
-
-    /**
-     * Constructs a new instance of EntryChangeResponseControl.
-     *
-     * @param   id              The control's object identifier string.
-     * @param   criticality     The control's criticality.
-     * @param   value           The control's ASN.1 BER encoded value.
-     *                          May be null.
-     * @exception               IOException if an error is encountered
-     *                          while decoding the control's value.
-     */
-    public EntryChangeResponseControl(String id, boolean criticality,
-        byte[] value) throws IOException {
-
-        super(id, criticality, value);
-
-        // decode value
-        if ((value != null) && (value.length > 0)) {
-            BerDecoder ber = new BerDecoder(value, 0, value.length);
-
-            ber.parseSeq(null);
-            changeType = ber.parseEnumeration();
-
-            if ((ber.bytesLeft() > 0) && (ber.peekByte() == Ber.ASN_OCTET_STR)){
-                previousDN = ber.parseString(true);
-            }
-            if ((ber.bytesLeft() > 0) && (ber.peekByte() == Ber.ASN_INTEGER)) {
-                changeNumber = ber.parseInt();
-            }
-        }
-    }
-
-    /**
-     * Retrieves the type of change that occurred.
-     *
-     * @return    The type of change.
-     */
-    public int getChangeType() {
-        return changeType;
-    }
-
-    /**
-     * Retrieves the previous distinguished name of the entry before it was
-     * renamed and/or moved. This method applies only to RENAME changes.
-     *
-     * @return    The previous distinguished name or null if not applicable.
-     */
-    public String getPreviousDN() {
-        return previousDN;
-    }
-
-    /**
-     * Retrieves the change number assigned by the server for this change.
-     * Returns -1 if this feature is not supported by the server.
-     *
-     * @return    The change number or -1 if unsupported.
-     */
-    public long getChangeNumber() {
-        return changeNumber;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/ldap/EventQueue.java b/ojluni/src/main/java/com/sun/jndi/ldap/EventQueue.java
deleted file mode 100755
index c5eb655..0000000
--- a/ojluni/src/main/java/com/sun/jndi/ldap/EventQueue.java
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-package com.sun.jndi.ldap;
-
-import java.io.*;
-import java.util.Vector;
-import java.util.EventObject;
-
-import javax.naming.event.NamingEvent;
-import javax.naming.event.NamingExceptionEvent;
-import javax.naming.event.NamingListener;
-import javax.naming.ldap.UnsolicitedNotificationEvent;
-import javax.naming.ldap.UnsolicitedNotificationListener;
-
-/**
- * Package private class used by EventSupport to dispatch events.
- * This class implements an event queue, and a dispatcher thread that
- * dequeues and dispatches events from the queue.
- *
- * Pieces stolen from sun.misc.Queue.
- *
- * @author      Bill Shannon (from javax.mail.event)
- * @author      Rosanna Lee (modified for JNDI-related events)
- */
-final class EventQueue implements Runnable {
-    final static private boolean debug = false;
-
-    private static class QueueElement {
-        QueueElement next = null;
-        QueueElement prev = null;
-        EventObject event = null;
-        Vector vector = null;
-
-        QueueElement(EventObject event, Vector vector) {
-            this.event = event;
-            this.vector = vector;
-        }
-    }
-
-    private QueueElement head = null;
-    private QueueElement tail = null;
-    private Thread qThread;
-
-    // package private
-    EventQueue() {
-        qThread = Obj.helper.createThread(this);
-        qThread.setDaemon(true);  // not a user thread
-        qThread.start();
-    }
-
-    // package private;
-    /**
-     * Enqueue an event.
-     * @param event Either a <tt>NamingExceptionEvent</tt> or a subclass
-     *              of <tt>NamingEvent</tt> or
-     * <tt>UnsolicitedNotificatoniEvent</tt>.
-     * If it is a subclass of <tt>NamingEvent</tt>, all listeners must implement
-     * the corresponding subinterface of <tt>NamingListener</tt>.
-     * For example, for a <tt>ObjectAddedEvent</tt>, all listeners <em>must</em>
-     * implement the <tt>ObjectAddedListener</tt> interface.
-     * <em>The current implementation does not check this before dispatching
-     * the event.</em>
-     * If the event is a <tt>NamingExceptionEvent</tt>, then all listeners
-     * are notified.
-     * @param vector List of NamingListeners that will be notified of event.
-     */
-    synchronized void enqueue(EventObject event, Vector vector) {
-        QueueElement newElt = new QueueElement(event, vector);
-
-        if (head == null) {
-            head = newElt;
-            tail = newElt;
-        } else {
-            newElt.next = head;
-            head.prev = newElt;
-            head = newElt;
-        }
-        notify();
-    }
-
-    /**
-     * Dequeue the oldest object on the queue.
-     * Used only by the run() method.
-     *
-     * @return    the oldest object on the queue.
-     * @exception java.lang.InterruptedException if any thread has
-     *              interrupted this thread.
-     */
-    private synchronized QueueElement dequeue()
-                                throws InterruptedException {
-        while (tail == null)
-            wait();
-        QueueElement elt = tail;
-        tail = elt.prev;
-        if (tail == null) {
-            head = null;
-        } else {
-            tail.next = null;
-        }
-        elt.prev = elt.next = null;
-        return elt;
-    }
-
-    /**
-     * Pull events off the queue and dispatch them.
-     */
-    public void run() {
-        QueueElement qe;
-
-        try {
-            while ((qe = dequeue()) != null) {
-                EventObject e = qe.event;
-                Vector v = qe.vector;
-
-                for (int i = 0; i < v.size(); i++) {
-
-                    // Dispatch to corresponding NamingListener
-                    // The listener should only be getting the event that
-                    // it is interested in. (No need to check mask or
-                    // instanceof subinterfaces.)
-                    // It is the responsibility of the enqueuer to
-                    // only enqueue events with listseners of the correct type.
-
-                    if (e instanceof NamingEvent) {
-                        ((NamingEvent)e).dispatch((NamingListener)v.elementAt(i));
-
-                    // An exception occurred: if notify all naming listeners
-                    } else if (e instanceof NamingExceptionEvent) {
-                        ((NamingExceptionEvent)e).dispatch(
-                            (NamingListener)v.elementAt(i));
-                    } else if (e instanceof UnsolicitedNotificationEvent) {
-                        ((UnsolicitedNotificationEvent)e).dispatch(
-                            (UnsolicitedNotificationListener)v.elementAt(i));
-                    }
-                }
-
-                qe = null; e = null; v = null;
-            }
-        } catch (InterruptedException e) {
-            // just die
-        }
-    }
-
-    // package private; used by EventSupport;
-    /**
-     * Stop the dispatcher so we can be destroyed.
-     */
-    void stop() {
-        if (debug) System.err.println("EventQueue stopping");
-        if (qThread != null) {
-            qThread.interrupt();        // kill our thread
-            qThread = null;
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/ldap/EventSupport.java b/ojluni/src/main/java/com/sun/jndi/ldap/EventSupport.java
deleted file mode 100755
index 671fee5..0000000
--- a/ojluni/src/main/java/com/sun/jndi/ldap/EventSupport.java
+++ /dev/null
@@ -1,350 +0,0 @@
-/*
- * Copyright (c) 1999, 2000, 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.jndi.ldap;
-
-import java.util.Hashtable;
-import java.util.Vector;
-import java.util.Enumeration;
-import java.util.EventObject;
-
-import javax.naming.*;
-import javax.naming.directory.*;
-import javax.naming.event.*;
-import javax.naming.directory.SearchControls;
-import javax.naming.ldap.UnsolicitedNotificationListener;
-import javax.naming.ldap.UnsolicitedNotificationEvent;
-import javax.naming.ldap.UnsolicitedNotification;
-
-/**
- * This is a utility class that can be used by a context that supports
- * event notification.  You can use an instance of this class as a member field
- * of your context and delegate various work to it.
- * It is currently structured so that each context should have its own
- * EventSupport (instead of static version shared by all contexts
- * of a service provider).
- *<p>
- * This class supports two types of listeners: those that register for
- * NamingEvents, and those for UnsolicitedNotificationEvents (they can be mixed
- * into the same listener).
- * For NamingEvent listeners, it maintains a hashtable that maps
- * registration requests--the key--to
- * <em>notifiers</em>--the value. Each registration request consists of:
- *<ul>
- *<li>The name argument of the registration.
- *<li>The filter (default is "(objectclass=*)").
- *<li>The search controls (default is null SearchControls).
- *<li>The events that the listener is interested in. This is determined by
- * finding out which <tt>NamingListener</tt> interface the listener supports.
- *</ul>
- *<p>
- *A notifier (<tt>NamingEventNotifier</tt>) is a worker thread that is responsible
- *for gathering information for generating events requested by its listeners.
- *Each notifier maintains its own list of listeners; these listeners have
- *all made the same registration request (at different times) and implements
- *the same <tt>NamingListener</tt> interfaces.
- *<p>
- *For unsolicited listeners, this class maintains a vector, unsolicited.
- *When an unsolicited listener is registered, this class adds itself
- *to the context's LdapClient. When LdapClient receives an unsolicited
- *notification, it notifies this EventSupport to fire an event to the
- *the listeners. Special handling in LdapClient is done for the DISCONNECT
- *notification. [It results in the EventSupport firing also a
- *NamingExceptionEvent to the unsolicited listeners.]
- *<p>
- *
- *When a context no longer needs this EventSupport, it should invoke
- *cleanup() on it.
- *<p>
- *<h4>Registration</h4>
- *When a registration request is made, this class attempts to find an
- *existing notifier that's already working on the request. If one is
- *found, the listener is added to the notifier's list. If one is not found,
- *a new notifier is created for the listener.
- *
- *<h4>Deregistration</h4>
- *When a deregistration request is made, this class attemps to find its
- *corresponding notifier. If the notifier is found, the listener is removed
- *from the notifier's list. If the listener is the last listener on the list,
- *the notifier's thread is terminated and removed from this class's hashtable.
- *Nothing happens if the notifier is not found.
- *
- *<h4>Event Dispatching</h4>
- *The notifiers are responsible for gather information for generating events
- *requested by their respective listeners. When a notifier gets sufficient
- *information to generate an event, it creates invokes the
- *appropriate <tt>fireXXXEvent</tt> on this class with the information and list of
- *listeners. This causes an event and the list of listeners to be added
- *to the <em>event queue</em>.
- *This class maintains an event queue and a dispatching thread that dequeues
- *events from the queue and dispatches them to the listeners.
- *
- *<h4>Synchronization</h4>
- *This class is used by the main thread (LdapCtx) to add/remove listeners.
- *It is also used asynchronously by NamingEventNotifiers threads and
- *the context's Connection thread. It is used by the notifier threads to
- *queue events and to update the notifiers list when the notifiers exit.
- *It is used by the Connection thread to fire unsolicited notifications.
- *Methods that access/update the 'unsolicited' and 'notifiers' lists are
- *thread-safe.
- *
- * @author Rosanna Lee
- */
-final class EventSupport {
-    final static private boolean debug = false;
-
-    private LdapCtx ctx;
-
-    /**
-     * NamingEventNotifiers; hashed by search arguments;
-     */
-    private Hashtable notifiers = new Hashtable(11);
-
-    /**
-     * List of unsolicited notification listeners.
-     */
-    private Vector unsolicited = null;
-
-    /**
-     * Constructs EventSupport for ctx.
-     * <em>Do we need to record the name of the target context?
-     * Or can we assume that EventSupport is called on a resolved
-     * context? Do we need other add/remove-NamingListener methods?
-     * package private;
-     */
-    EventSupport(LdapCtx ctx) {
-        this.ctx = ctx;
-    }
-
-    /**
-     * Adds <tt>l</tt> to list of listeners interested in <tt>nm</tt>.
-     */
-    /*
-     * Make the add/removeNamingListeners synchronized to:
-     * 1. protect usage of 'unsolicited', which may be read by
-     *    the Connection thread when dispatching unsolicited notification.
-     * 2. ensure that NamingEventNotifier thread's access to 'notifiers'
-     *    is safe
-     */
-    synchronized void addNamingListener(String nm, int scope,
-        NamingListener l) throws NamingException {
-
-        if (l instanceof ObjectChangeListener ||
-            l instanceof NamespaceChangeListener) {
-            NotifierArgs args = new NotifierArgs(nm, scope, l);
-
-            NamingEventNotifier notifier =
-                (NamingEventNotifier) notifiers.get(args);
-            if (notifier == null) {
-                notifier = new NamingEventNotifier(this, ctx, args, l);
-                notifiers.put(args, notifier);
-            } else {
-                notifier.addNamingListener(l);
-            }
-        }
-        if (l instanceof UnsolicitedNotificationListener) {
-            // Add listener to this's list of unsolicited notifiers
-            if (unsolicited == null) {
-                unsolicited = new Vector(3);
-            }
-
-            unsolicited.addElement(l);
-        }
-    }
-
-    /**
-     * Adds <tt>l</tt> to list of listeners interested in <tt>nm</tt>
-     * and filter.
-     */
-    synchronized void addNamingListener(String nm, String filter,
-        SearchControls ctls, NamingListener l) throws NamingException {
-
-        if (l instanceof ObjectChangeListener ||
-            l instanceof NamespaceChangeListener) {
-            NotifierArgs args = new NotifierArgs(nm, filter, ctls, l);
-
-            NamingEventNotifier notifier =
-                (NamingEventNotifier) notifiers.get(args);
-            if (notifier == null) {
-                notifier = new NamingEventNotifier(this, ctx, args, l);
-                notifiers.put(args, notifier);
-            } else {
-                notifier.addNamingListener(l);
-            }
-        }
-        if (l instanceof UnsolicitedNotificationListener) {
-            // Add listener to this's list of unsolicited notifiers
-            if (unsolicited == null) {
-                unsolicited = new Vector(3);
-            }
-            unsolicited.addElement(l);
-        }
-    }
-
-    /**
-     * Removes <tt>l</tt> from all notifiers in this context.
-     */
-    synchronized void removeNamingListener(NamingListener l) {
-        Enumeration allnotifiers = notifiers.elements();
-        NamingEventNotifier notifier;
-
-        if (debug) System.err.println("EventSupport removing listener");
-
-        // Go through list of notifiers, remove 'l' from each.
-        // If 'l' is notifier's only listener, remove notifier too.
-        while (allnotifiers.hasMoreElements()) {
-            notifier = (NamingEventNotifier)allnotifiers.nextElement();
-            if (notifier != null) {
-                if (debug)
-                    System.err.println("EventSupport removing listener from notifier");
-                notifier.removeNamingListener(l);
-                if (!notifier.hasNamingListeners()) {
-                    if (debug)
-                        System.err.println("EventSupport stopping notifier");
-                    notifier.stop();
-                    notifiers.remove(notifier.info);
-                }
-            }
-        }
-
-        // Remove from list of unsolicited notifier
-        if (debug) System.err.println("EventSupport removing unsolicited: " +
-            unsolicited);
-        if (unsolicited != null) {
-            unsolicited.removeElement(l);
-        }
-
-    }
-
-    synchronized boolean hasUnsolicited() {
-        return (unsolicited != null && unsolicited.size() > 0);
-    }
-
-    /**
-      * package private;
-      * Called by NamingEventNotifier to remove itself when it encounters
-      * a NamingException.
-      */
-    synchronized void removeDeadNotifier(NotifierArgs info) {
-        if (debug) {
-            System.err.println("EventSupport.removeDeadNotifier: " + info.name);
-        }
-        notifiers.remove(info);
-    }
-
-    /**
-     * Fire an event to unsolicited listeners.
-     * package private;
-     * Called by LdapCtx when its clnt receives an unsolicited notification.
-     */
-    synchronized void fireUnsolicited(Object obj) {
-        if (debug) {
-            System.err.println("EventSupport.fireUnsolicited: " + obj + " "
-                + unsolicited);
-        }
-        if (unsolicited == null || unsolicited.size() == 0) {
-            // This shouldn't really happen, but might in case
-            // there is a timing problem that removes a listener
-            // before a fired event event reaches here.
-            return;
-        }
-
-        if (obj instanceof UnsolicitedNotification) {
-
-            // Fire UnsolicitedNotification to unsolicited listeners
-
-            UnsolicitedNotificationEvent evt =
-                new UnsolicitedNotificationEvent(ctx, (UnsolicitedNotification)obj);
-            queueEvent(evt, unsolicited);
-
-        } else if (obj instanceof NamingException) {
-
-            // Fire NamingExceptionEvent to unsolicited listeners.
-
-            NamingExceptionEvent evt =
-                new NamingExceptionEvent(ctx, (NamingException)obj);
-            queueEvent(evt, unsolicited);
-
-            // When an exception occurs, the unsolicited listeners
-            // are automatically deregistered.
-            // When LdapClient.processUnsolicited() fires a NamingException,
-            // it will update its listener list so we don't have to.
-            // Likewise for LdapCtx.
-
-            unsolicited = null;
-        }
-    }
-
-    /**
-     * Stops notifier threads that are collecting event data and
-     * stops the event queue from dispatching events.
-     * Package private; used by LdapCtx.
-     */
-    synchronized void cleanup() {
-        if (debug) System.err.println("EventSupport clean up");
-        if (notifiers != null) {
-            for (Enumeration ns = notifiers.elements(); ns.hasMoreElements(); ) {
-                ((NamingEventNotifier) ns.nextElement()).stop();
-            }
-            notifiers = null;
-        }
-        if (eventQueue != null) {
-            eventQueue.stop();
-            eventQueue = null;
-        }
-        // %%% Should we fire NamingExceptionEvents to unsolicited listeners?
-    }
-
-    /*
-     * The queue of events to be delivered.
-     */
-    private EventQueue eventQueue;
-
-    /**
-     * Add the event and vector of listeners to the queue to be delivered.
-     * An event dispatcher thread dequeues events from the queue and dispatches
-     * them to the registered listeners.
-     * Package private; used by NamingEventNotifier to fire events
-     */
-    synchronized void queueEvent(EventObject event, Vector vector) {
-        if (eventQueue == null)
-            eventQueue = new EventQueue();
-
-        /*
-         * Copy the vector in order to freeze the state of the set
-         * of EventListeners the event should be delivered to prior
-         * to delivery.  This ensures that any changes made to the
-         * Vector from a target listener's method during the delivery
-         * of this event will not take effect until after the event is
-         * delivered.
-         */
-        Vector v = (Vector)vector.clone();
-        eventQueue.enqueue(event, v);
-    }
-
-    // No finalize() needed because EventSupport is always owned by
-    // an LdapCtx. LdapCtx's finalize() and close() always call cleanup() so
-    // there is no need for EventSupport to have a finalize().
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/ldap/Filter.java b/ojluni/src/main/java/com/sun/jndi/ldap/Filter.java
deleted file mode 100755
index 0eb1caa..0000000
--- a/ojluni/src/main/java/com/sun/jndi/ldap/Filter.java
+++ /dev/null
@@ -1,870 +0,0 @@
-/*
- * Copyright (c) 1999, 2011, 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.jndi.ldap;
-
-import javax.naming.NamingException;
-import javax.naming.directory.InvalidSearchFilterException;
-
-import java.io.IOException;
-
-/**
- * LDAP (RFC-1960) and LDAPv3 (RFC-2254) search filters.
- *
- * @author Xuelei Fan
- * @author Vincent Ryan
- * @author Jagane Sundar
- * @author Rosanna Lee
- */
-
-final class Filter {
-
-    /**
-     * First convert filter string into byte[].
-     * For LDAP v3, the conversion uses Unicode -> UTF8
-     * For LDAP v2, the conversion uses Unicode -> ISO 8859 (Latin-1)
-     *
-     * Then parse the byte[] as a filter, converting \hh to
-     * a single byte, and encoding the resulting filter
-     * into the supplied BER buffer
-     */
-    static void encodeFilterString(BerEncoder ber, String filterStr,
-        boolean isLdapv3) throws IOException, NamingException {
-
-        if ((filterStr == null) || (filterStr.equals(""))) {
-            throw new InvalidSearchFilterException("Empty filter");
-        }
-        byte[] filter;
-        int filterLen;
-        if (isLdapv3) {
-            filter = filterStr.getBytes("UTF8");
-        } else {
-            filter = filterStr.getBytes("8859_1");
-        }
-        filterLen = filter.length;
-        if (dbg) {
-            dbgIndent = 0;
-            System.err.println("String filter: " + filterStr);
-            System.err.println("size: " + filterLen);
-            dprint("original: ", filter, 0, filterLen);
-        }
-
-        encodeFilter(ber, filter, 0, filterLen);
-    }
-
-    private static void encodeFilter(BerEncoder ber, byte[] filter,
-        int filterStart, int filterEnd) throws IOException, NamingException {
-
-        if (dbg) {
-            dprint("encFilter: ",  filter, filterStart, filterEnd);
-            dbgIndent++;
-        }
-
-        if ((filterEnd - filterStart) <= 0) {
-            throw new InvalidSearchFilterException("Empty filter");
-        }
-
-        int nextOffset;
-        int parens, balance;
-        boolean escape;
-
-        parens = 0;
-
-        int filtOffset[] = new int[1];
-
-        for (filtOffset[0] = filterStart; filtOffset[0] < filterEnd;) {
-            switch (filter[filtOffset[0]]) {
-            case '(':
-                filtOffset[0]++;
-                parens++;
-                switch (filter[filtOffset[0]]) {
-                case '&':
-                    encodeComplexFilter(ber, filter,
-                        LDAP_FILTER_AND, filtOffset, filterEnd);
-                    // filtOffset[0] has pointed to char after right paren
-                    parens--;
-                    break;
-
-                case '|':
-                    encodeComplexFilter(ber, filter,
-                        LDAP_FILTER_OR, filtOffset, filterEnd);
-                    // filtOffset[0] has pointed to char after right paren
-                    parens--;
-                    break;
-
-                case '!':
-                    encodeComplexFilter(ber, filter,
-                        LDAP_FILTER_NOT, filtOffset, filterEnd);
-                    // filtOffset[0] has pointed to char after right paren
-                    parens--;
-                    break;
-
-                default:
-                    balance = 1;
-                    escape = false;
-                    nextOffset = filtOffset[0];
-                    while (nextOffset < filterEnd && balance > 0) {
-                        if (!escape) {
-                            if (filter[nextOffset] == '(')
-                                balance++;
-                            else if (filter[nextOffset] == ')')
-                                balance--;
-                        }
-                        if (filter[nextOffset] == '\\' && !escape)
-                            escape = true;
-                        else
-                            escape = false;
-                        if (balance > 0)
-                            nextOffset++;
-                    }
-                    if (balance != 0)
-                        throw new InvalidSearchFilterException(
-                                  "Unbalanced parenthesis");
-
-                    encodeSimpleFilter(ber, filter, filtOffset[0], nextOffset);
-
-                    // points to the char after right paren.
-                    filtOffset[0] = nextOffset + 1;
-
-                    parens--;
-                    break;
-
-                }
-                break;
-
-            case ')':
-                //
-                // End of sequence
-                //
-                ber.endSeq();
-                filtOffset[0]++;
-                parens--;
-                break;
-
-            case ' ':
-                filtOffset[0]++;
-                break;
-
-            default:    // assume simple type=value filter
-                encodeSimpleFilter(ber, filter, filtOffset[0], filterEnd);
-                filtOffset[0] = filterEnd; // force break from outer
-                break;
-            }
-
-            if (parens < 0) {
-                throw new InvalidSearchFilterException(
-                                                "Unbalanced parenthesis");
-            }
-        }
-
-        if (parens != 0) {
-            throw new InvalidSearchFilterException("Unbalanced parenthesis");
-        }
-
-        if (dbg) {
-            dbgIndent--;
-        }
-
-    }
-
-    /**
-     * convert character 'c' that represents a hexadecimal digit to an integer.
-     * if 'c' is not a hexidecimal digit [0-9A-Fa-f], -1 is returned.
-     * otherwise the converted value is returned.
-     */
-    private static int hexchar2int( byte c ) {
-        if ( c >= '0' && c <= '9' ) {
-            return( c - '0' );
-        }
-        if ( c >= 'A' && c <= 'F' ) {
-            return( c - 'A' + 10 );
-        }
-        if ( c >= 'a' && c <= 'f' ) {
-            return( c - 'a' + 10 );
-        }
-        return( -1 );
-    }
-
-    // called by the LdapClient.compare method
-    static byte[] unescapeFilterValue(byte[] orig, int start, int end)
-        throws NamingException {
-        boolean escape = false, escStart = false;
-        int ival;
-        byte ch;
-
-        if (dbg) {
-            dprint("unescape: " , orig, start, end);
-        }
-
-        int len = end - start;
-        byte tbuf[] = new byte[len];
-        int j = 0;
-        for (int i = start; i < end; i++) {
-            ch = orig[i];
-            if (escape) {
-                // Try LDAP V3 escape (\xx)
-                if ((ival = hexchar2int(ch)) < 0) {
-
-                    /**
-                     * If there is no hex char following a '\' when
-                     * parsing a LDAP v3 filter (illegal by v3 way)
-                     * we fallback to the way we unescape in v2.
-                     */
-                    if (escStart) {
-                        // V2: \* \( \)
-                        escape = false;
-                        tbuf[j++] = ch;
-                    } else {
-                        // escaping already started but we can't find 2nd hex
-                        throw new InvalidSearchFilterException("invalid escape sequence: " + orig);
-                    }
-                } else {
-                    if (escStart) {
-                        tbuf[j] = (byte)(ival<<4);
-                        escStart = false;
-                    } else {
-                        tbuf[j++] |= (byte)ival;
-                        escape = false;
-                    }
-                }
-            } else if (ch != '\\') {
-                tbuf[j++] = ch;
-                escape = false;
-            } else {
-                escStart = escape = true;
-            }
-        }
-        byte[] answer = new byte[j];
-        System.arraycopy(tbuf, 0, answer, 0, j);
-        if (dbg) {
-            Ber.dumpBER(System.err, "", answer, 0, j);
-        }
-        return answer;
-    }
-
-    private static int indexOf(byte[] str, char ch, int start, int end) {
-        for (int i = start; i < end; i++) {
-            if (str[i] == ch)
-                return i;
-        }
-        return -1;
-    }
-
-    private static int indexOf(byte[] str, String target, int start, int end) {
-        int where = indexOf(str, target.charAt(0), start, end);
-        if (where >= 0) {
-            for (int i = 1; i < target.length(); i++) {
-                if (str[where+i] != target.charAt(i)) {
-                    return -1;
-                }
-            }
-        }
-        return where;
-    }
-
-    private static int findUnescaped(byte[] str, char ch, int start, int end) {
-        while (start < end) {
-            int where = indexOf(str, ch, start, end);
-
-            /*
-             * Count the immediate preceding '\' to find out if
-             * this is an escaped '*'. This is a made-up way for
-             * parsing an escaped '*' in v2. This is how the other leading
-             * SDK vendors interpret v2.
-             * For v3 we fallback to the way we parse "\*" in v2.
-             * It's not legal in v3 to use "\*" to escape '*'; the right
-             * way is to use "\2a" instead.
-             */
-            int backSlashPos;
-            int backSlashCnt = 0;
-            for (backSlashPos = where - 1;
-                    ((backSlashPos >= start) && (str[backSlashPos] == '\\'));
-                    backSlashPos--, backSlashCnt++);
-
-            // if at start of string, or not there at all, or if not escaped
-            if (where == start || where == -1 || ((backSlashCnt % 2) == 0))
-                return where;
-
-            // start search after escaped star
-            start = where + 1;
-        }
-        return -1;
-    }
-
-
-    private static void encodeSimpleFilter(BerEncoder ber, byte[] filter,
-        int filtStart, int filtEnd) throws IOException, NamingException {
-
-        if (dbg) {
-            dprint("encSimpleFilter: ", filter, filtStart, filtEnd);
-            dbgIndent++;
-        }
-
-        String type, value;
-        int valueStart, valueEnd, typeStart, typeEnd;
-
-        int eq;
-        if ((eq = indexOf(filter, '=', filtStart, filtEnd)) == -1) {
-            throw new InvalidSearchFilterException("Missing 'equals'");
-        }
-
-
-        valueStart = eq + 1;        // value starts after equal sign
-        valueEnd = filtEnd;
-        typeStart = filtStart;      // beginning of string
-
-        int ftype;
-
-        switch (filter[eq - 1]) {
-        case '<':
-            ftype = LDAP_FILTER_LE;
-            typeEnd = eq - 1;
-            break;
-        case '>':
-            ftype = LDAP_FILTER_GE;
-            typeEnd = eq - 1;
-            break;
-        case '~':
-            ftype = LDAP_FILTER_APPROX;
-            typeEnd = eq - 1;
-            break;
-        case ':':
-            ftype = LDAP_FILTER_EXT;
-            typeEnd = eq - 1;
-            break;
-        default:
-            typeEnd = eq;
-            //initializing ftype to make the compiler happy
-            ftype = 0x00;
-            break;
-        }
-
-        if (dbg) {
-            System.err.println("type: " + typeStart + ", " + typeEnd);
-            System.err.println("value: " + valueStart + ", " + valueEnd);
-        }
-
-        // check validity of type
-        //
-        // RFC4512 defines the type as the following ABNF:
-        //     attr = attributedescription
-        //     attributedescription = attributetype options
-        //     attributetype = oid
-        //     oid = descr / numericoid
-        //     descr = keystring
-        //     keystring = leadkeychar *keychar
-        //     leadkeychar = ALPHA
-        //     keychar = ALPHA / DIGIT / HYPHEN
-        //     numericoid = number 1*( DOT number )
-        //     number  = DIGIT / ( LDIGIT 1*DIGIT )
-        //     options = *( SEMI option )
-        //     option = 1*keychar
-        //
-        // And RFC4515 defines the extensible type as the following ABNF:
-        //     attr [dnattrs] [matchingrule] / [dnattrs] matchingrule
-        int optionsStart = -1;
-        int extensibleStart = -1;
-        if ((filter[typeStart] >= '0' && filter[typeStart] <= '9') ||
-            (filter[typeStart] >= 'A' && filter[typeStart] <= 'Z') ||
-            (filter[typeStart] >= 'a' && filter[typeStart] <= 'z')) {
-
-            boolean isNumericOid =
-                filter[typeStart] >= '0' && filter[typeStart] <= '9';
-            for (int i = typeStart + 1; i < typeEnd; i++) {
-                // ';' is an indicator of attribute options
-                if (filter[i] == ';') {
-                    if (isNumericOid && filter[i - 1] == '.') {
-                        throw new InvalidSearchFilterException(
-                                    "invalid attribute description");
-                    }
-
-                    // attribute options
-                    optionsStart = i;
-                    break;
-                }
-
-                // ':' is an indicator of extensible rules
-                if (filter[i] == ':' && ftype == LDAP_FILTER_EXT) {
-                    if (isNumericOid && filter[i - 1] == '.') {
-                        throw new InvalidSearchFilterException(
-                                    "invalid attribute description");
-                    }
-
-                    // extensible matching
-                    extensibleStart = i;
-                    break;
-                }
-
-                if (isNumericOid) {
-                    // numeric object identifier
-                    if ((filter[i] == '.' && filter[i - 1] == '.') ||
-                        (filter[i] != '.' &&
-                            !(filter[i] >= '0' && filter[i] <= '9'))) {
-                        throw new InvalidSearchFilterException(
-                                    "invalid attribute description");
-                    }
-                } else {
-                    // descriptor
-                    // The underscore ("_") character is not allowed by
-                    // the LDAP specification. We allow it here to
-                    // tolerate the incorrect use in practice.
-                    if (filter[i] != '-' && filter[i] != '_' &&
-                        !(filter[i] >= '0' && filter[i] <= '9') &&
-                        !(filter[i] >= 'A' && filter[i] <= 'Z') &&
-                        !(filter[i] >= 'a' && filter[i] <= 'z')) {
-                        throw new InvalidSearchFilterException(
-                                    "invalid attribute description");
-                    }
-                }
-            }
-        } else if (ftype == LDAP_FILTER_EXT && filter[typeStart] == ':') {
-            // extensible matching
-            extensibleStart = typeStart;
-        } else {
-            throw new InvalidSearchFilterException(
-                                    "invalid attribute description");
-        }
-
-        // check attribute options
-        if (optionsStart > 0) {
-            for (int i = optionsStart + 1; i < typeEnd; i++) {
-                if (filter[i] == ';') {
-                    if (filter[i - 1] == ';') {
-                        throw new InvalidSearchFilterException(
-                                    "invalid attribute description");
-                    }
-                    continue;
-                }
-
-                // ':' is an indicator of extensible rules
-                if (filter[i] == ':' && ftype == LDAP_FILTER_EXT) {
-                    if (filter[i - 1] == ';') {
-                        throw new InvalidSearchFilterException(
-                                    "invalid attribute description");
-                    }
-
-                    // extensible matching
-                    extensibleStart = i;
-                    break;
-                }
-
-                // The underscore ("_") character is not allowed by
-                // the LDAP specification. We allow it here to
-                // tolerate the incorrect use in practice.
-                if (filter[i] != '-' && filter[i] != '_' &&
-                        !(filter[i] >= '0' && filter[i] <= '9') &&
-                        !(filter[i] >= 'A' && filter[i] <= 'Z') &&
-                        !(filter[i] >= 'a' && filter[i] <= 'z')) {
-                    throw new InvalidSearchFilterException(
-                                    "invalid attribute description");
-                }
-            }
-        }
-
-        // check extensible matching
-        if (extensibleStart > 0) {
-            boolean isMatchingRule = false;
-            for (int i = extensibleStart + 1; i < typeEnd; i++) {
-                if (filter[i] == ':') {
-                    throw new InvalidSearchFilterException(
-                                    "invalid attribute description");
-                } else if ((filter[i] >= '0' && filter[i] <= '9') ||
-                           (filter[i] >= 'A' && filter[i] <= 'Z') ||
-                           (filter[i] >= 'a' && filter[i] <= 'z')) {
-                    boolean isNumericOid = filter[i] >= '0' && filter[i] <= '9';
-                    i++;
-                    for (int j = i; j < typeEnd; j++, i++) {
-                        // allows no more than two extensible rules
-                        if (filter[j] == ':') {
-                            if (isMatchingRule) {
-                                throw new InvalidSearchFilterException(
-                                            "invalid attribute description");
-                            }
-                            if (isNumericOid && filter[j - 1] == '.') {
-                                throw new InvalidSearchFilterException(
-                                            "invalid attribute description");
-                            }
-
-                            isMatchingRule = true;
-                            break;
-                        }
-
-                        if (isNumericOid) {
-                            // numeric object identifier
-                            if ((filter[j] == '.' && filter[j - 1] == '.') ||
-                                (filter[j] != '.' &&
-                                    !(filter[j] >= '0' && filter[j] <= '9'))) {
-                                throw new InvalidSearchFilterException(
-                                            "invalid attribute description");
-                            }
-                        } else {
-                            // descriptor
-                            // The underscore ("_") character is not allowed by
-                            // the LDAP specification. We allow it here to
-                            // tolerate the incorrect use in practice.
-                            if (filter[j] != '-' && filter[j] != '_' &&
-                                !(filter[j] >= '0' && filter[j] <= '9') &&
-                                !(filter[j] >= 'A' && filter[j] <= 'Z') &&
-                                !(filter[j] >= 'a' && filter[j] <= 'z')) {
-                                throw new InvalidSearchFilterException(
-                                            "invalid attribute description");
-                            }
-                        }
-                    }
-                } else {
-                    throw new InvalidSearchFilterException(
-                                    "invalid attribute description");
-                }
-            }
-        }
-
-        // ensure the latest byte is not isolated
-        if (filter[typeEnd - 1] == '.' || filter[typeEnd - 1] == ';' ||
-                                          filter[typeEnd - 1] == ':') {
-            throw new InvalidSearchFilterException(
-                "invalid attribute description");
-        }
-
-        if (typeEnd == eq) { // filter type is of "equal"
-            if (findUnescaped(filter, '*', valueStart, valueEnd) == -1) {
-                ftype = LDAP_FILTER_EQUALITY;
-            } else if (filter[valueStart] == '*' &&
-                            valueStart == (valueEnd - 1)) {
-                ftype = LDAP_FILTER_PRESENT;
-            } else {
-                encodeSubstringFilter(ber, filter,
-                    typeStart, typeEnd, valueStart, valueEnd);
-                return;
-            }
-        }
-
-        if (ftype == LDAP_FILTER_PRESENT) {
-            ber.encodeOctetString(filter, ftype, typeStart, typeEnd-typeStart);
-        } else if (ftype == LDAP_FILTER_EXT) {
-            encodeExtensibleMatch(ber, filter,
-                typeStart, typeEnd, valueStart, valueEnd);
-        } else {
-            ber.beginSeq(ftype);
-                ber.encodeOctetString(filter, Ber.ASN_OCTET_STR,
-                    typeStart, typeEnd - typeStart);
-                ber.encodeOctetString(
-                    unescapeFilterValue(filter, valueStart, valueEnd),
-                    Ber.ASN_OCTET_STR);
-            ber.endSeq();
-        }
-
-        if (dbg) {
-            dbgIndent--;
-        }
-    }
-
-    private static void encodeSubstringFilter(BerEncoder ber, byte[] filter,
-        int typeStart, int typeEnd, int valueStart, int valueEnd)
-        throws IOException, NamingException {
-
-        if (dbg) {
-            dprint("encSubstringFilter: type ", filter, typeStart, typeEnd);
-            dprint(", val : ", filter, valueStart, valueEnd);
-            dbgIndent++;
-        }
-
-        ber.beginSeq(LDAP_FILTER_SUBSTRINGS);
-            ber.encodeOctetString(filter, Ber.ASN_OCTET_STR,
-                    typeStart, typeEnd-typeStart);
-            ber.beginSeq(LdapClient.LBER_SEQUENCE);
-                int index;
-                int previndex = valueStart;
-                while ((index = findUnescaped(filter, '*', previndex, valueEnd)) != -1) {
-                    if (previndex == valueStart) {
-                      if (previndex < index) {
-                          if (dbg)
-                              System.err.println(
-                                  "initial: " + previndex + "," + index);
-                        ber.encodeOctetString(
-                            unescapeFilterValue(filter, previndex, index),
-                            LDAP_SUBSTRING_INITIAL);
-                      }
-                    } else {
-                      if (previndex < index) {
-                          if (dbg)
-                              System.err.println("any: " + previndex + "," + index);
-                        ber.encodeOctetString(
-                            unescapeFilterValue(filter, previndex, index),
-                            LDAP_SUBSTRING_ANY);
-                      }
-                    }
-                    previndex = index + 1;
-                }
-                if (previndex < valueEnd) {
-                    if (dbg)
-                        System.err.println("final: " + previndex + "," + valueEnd);
-                  ber.encodeOctetString(
-                      unescapeFilterValue(filter, previndex, valueEnd),
-                      LDAP_SUBSTRING_FINAL);
-                }
-            ber.endSeq();
-        ber.endSeq();
-
-        if (dbg) {
-            dbgIndent--;
-        }
-    }
-
-    // The complex filter types look like:
-    //     "&(type=val)(type=val)"
-    //     "|(type=val)(type=val)"
-    //     "!(type=val)"
-    //
-    // The filtOffset[0] pointing to the '&', '|', or '!'.
-    //
-    private static void encodeComplexFilter(BerEncoder ber, byte[] filter,
-        int filterType, int filtOffset[], int filtEnd)
-        throws IOException, NamingException {
-
-        if (dbg) {
-            dprint("encComplexFilter: ", filter, filtOffset[0], filtEnd);
-            dprint(", type: " + Integer.toString(filterType, 16));
-            dbgIndent++;
-        }
-
-        filtOffset[0]++;
-
-        ber.beginSeq(filterType);
-
-            int[] parens = findRightParen(filter, filtOffset, filtEnd);
-            encodeFilterList(ber, filter, filterType, parens[0], parens[1]);
-
-        ber.endSeq();
-
-        if (dbg) {
-            dbgIndent--;
-        }
-
-    }
-
-    //
-    // filter at filtOffset[0] - 1 points to a (. Find ) that matches it
-    // and return substring between the parens. Adjust filtOffset[0] to
-    // point to char after right paren
-    //
-    private static int[] findRightParen(byte[] filter, int filtOffset[], int end)
-    throws IOException, NamingException {
-
-        int balance = 1;
-        boolean escape = false;
-        int nextOffset = filtOffset[0];
-
-        while (nextOffset < end && balance > 0) {
-            if (!escape) {
-                if (filter[nextOffset] == '(')
-                    balance++;
-                else if (filter[nextOffset] == ')')
-                    balance--;
-            }
-            if (filter[nextOffset] == '\\' && !escape)
-                escape = true;
-            else
-                escape = false;
-            if (balance > 0)
-                nextOffset++;
-        }
-        if (balance != 0) {
-            throw new InvalidSearchFilterException("Unbalanced parenthesis");
-        }
-
-        // String tmp = filter.substring(filtOffset[0], nextOffset);
-
-        int[] tmp = new int[] {filtOffset[0], nextOffset};
-
-        filtOffset[0] = nextOffset + 1;
-
-        return tmp;
-
-    }
-
-    //
-    // Encode filter list of type "(filter1)(filter2)..."
-    //
-    private static void encodeFilterList(BerEncoder ber, byte[] filter,
-        int filterType, int start, int end) throws IOException, NamingException {
-
-        if (dbg) {
-            dprint("encFilterList: ", filter, start, end);
-            dbgIndent++;
-        }
-
-        int filtOffset[] = new int[1];
-        int listNumber = 0;
-        for (filtOffset[0] = start; filtOffset[0] < end; filtOffset[0]++) {
-            if (Character.isSpaceChar((char)filter[filtOffset[0]]))
-                continue;
-
-            if ((filterType == LDAP_FILTER_NOT) && (listNumber > 0)) {
-                throw new InvalidSearchFilterException(
-                    "Filter (!) cannot be followed by more than one filters");
-            }
-
-            if (filter[filtOffset[0]] == '(') {
-                continue;
-            }
-
-            int[] parens = findRightParen(filter, filtOffset, end);
-
-            // add enclosing parens
-            int len = parens[1]-parens[0];
-            byte[] newfilter = new byte[len+2];
-            System.arraycopy(filter, parens[0], newfilter, 1, len);
-            newfilter[0] = (byte)'(';
-            newfilter[len+1] = (byte)')';
-            encodeFilter(ber, newfilter, 0, newfilter.length);
-
-            listNumber++;
-        }
-
-        if (dbg) {
-            dbgIndent--;
-        }
-
-    }
-
-    //
-    // Encode extensible match
-    //
-    private static void encodeExtensibleMatch(BerEncoder ber, byte[] filter,
-        int matchStart, int matchEnd, int valueStart, int valueEnd)
-        throws IOException, NamingException {
-
-        boolean matchDN = false;
-        int colon;
-        int colon2;
-        int i;
-
-        ber.beginSeq(LDAP_FILTER_EXT);
-
-            // test for colon separator
-            if ((colon = indexOf(filter, ':', matchStart, matchEnd)) >= 0) {
-
-                // test for match DN
-                if ((i = indexOf(filter, ":dn", colon, matchEnd)) >= 0) {
-                    matchDN = true;
-                }
-
-                // test for matching rule
-                if (((colon2 = indexOf(filter, ':', colon + 1, matchEnd)) >= 0)
-                    || (i == -1)) {
-
-                    if (i == colon) {
-                        ber.encodeOctetString(filter, LDAP_FILTER_EXT_RULE,
-                            colon2 + 1, matchEnd - (colon2 + 1));
-
-                    } else if ((i == colon2) && (i >= 0)) {
-                        ber.encodeOctetString(filter, LDAP_FILTER_EXT_RULE,
-                            colon + 1, colon2 - (colon + 1));
-
-                    } else {
-                        ber.encodeOctetString(filter, LDAP_FILTER_EXT_RULE,
-                            colon + 1, matchEnd - (colon + 1));
-                    }
-                }
-
-                // test for attribute type
-                if (colon > matchStart) {
-                    ber.encodeOctetString(filter,
-                        LDAP_FILTER_EXT_TYPE, matchStart, colon - matchStart);
-                }
-            } else {
-                ber.encodeOctetString(filter, LDAP_FILTER_EXT_TYPE, matchStart,
-                    matchEnd - matchStart);
-            }
-
-            ber.encodeOctetString(
-                unescapeFilterValue(filter, valueStart, valueEnd),
-                LDAP_FILTER_EXT_VAL);
-
-            /*
-             * This element is defined in RFC-2251 with an ASN.1 DEFAULT tag.
-             * However, for Active Directory interoperability it is transmitted
-             * even when FALSE.
-             */
-            ber.encodeBoolean(matchDN, LDAP_FILTER_EXT_DN);
-
-        ber.endSeq();
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // some debug print code that does indenting. Useful for debugging
-    // the filter generation code
-    //
-    ////////////////////////////////////////////////////////////////////////////
-
-    private static final boolean dbg = false;
-    private static int dbgIndent = 0;
-
-    private static void dprint(String msg) {
-        dprint(msg, new byte[0], 0, 0);
-    }
-
-    private static void dprint(String msg, byte[] str) {
-        dprint(msg, str, 0, str.length);
-    }
-
-    private static void dprint(String msg, byte[] str, int start, int end) {
-        String dstr = "  ";
-        int i = dbgIndent;
-        while (i-- > 0) {
-            dstr += "  ";
-        }
-        dstr += msg;
-
-        System.err.print(dstr);
-        for (int j = start; j < end; j++) {
-            System.err.print((char)str[j]);
-        }
-        System.err.println();
-    }
-
-    /////////////// Constants used for encoding filter //////////////
-
-    static final int LDAP_FILTER_AND = 0xa0;
-    static final int LDAP_FILTER_OR = 0xa1;
-    static final int LDAP_FILTER_NOT = 0xa2;
-    static final int LDAP_FILTER_EQUALITY = 0xa3;
-    static final int LDAP_FILTER_SUBSTRINGS = 0xa4;
-    static final int LDAP_FILTER_GE = 0xa5;
-    static final int LDAP_FILTER_LE = 0xa6;
-    static final int LDAP_FILTER_PRESENT = 0x87;
-    static final int LDAP_FILTER_APPROX = 0xa8;
-    static final int LDAP_FILTER_EXT = 0xa9;            // LDAPv3
-
-    static final int LDAP_FILTER_EXT_RULE = 0x81;       // LDAPv3
-    static final int LDAP_FILTER_EXT_TYPE = 0x82;       // LDAPv3
-    static final int LDAP_FILTER_EXT_VAL = 0x83;        // LDAPv3
-    static final int LDAP_FILTER_EXT_DN = 0x84;         // LDAPv3
-
-    static final int LDAP_SUBSTRING_INITIAL = 0x80;
-    static final int LDAP_SUBSTRING_ANY = 0x81;
-    static final int LDAP_SUBSTRING_FINAL = 0x82;
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/ldap/LdapAttribute.java b/ojluni/src/main/java/com/sun/jndi/ldap/LdapAttribute.java
deleted file mode 100755
index 1ecaa10..0000000
--- a/ojluni/src/main/java/com/sun/jndi/ldap/LdapAttribute.java
+++ /dev/null
@@ -1,214 +0,0 @@
-/*
- * Copyright (c) 1999, 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.jndi.ldap;
-
-import java.io.IOException;
-import java.io.Serializable;
-import java.util.Enumeration;
-import java.util.Hashtable;
-import java.util.Vector;
-import javax.naming.*;
-import javax.naming.directory.*;
-
-/**
-  * This subclass is used by LDAP to implement the schema calls.
-  * Basically, it keeps track of which context it is an attribute of
-  * so it can get the schema for that cotnext.
-  *
-  * @author Jon Ruiz
-  */
-final class LdapAttribute extends BasicAttribute {
-
-    static final long serialVersionUID = -4288716561020779584L;
-
-    private transient DirContext baseCtx = null;
-    private Name rdn = new CompositeName();
-
-    // these two are used to reconstruct the baseCtx if this attribute has
-    // been serialized (
-    private String baseCtxURL;
-    private Hashtable baseCtxEnv;
-
-    public Object clone() {
-        LdapAttribute attr = new LdapAttribute(this.attrID, baseCtx, rdn);
-        attr.values = (Vector)values.clone();
-        return attr;
-    }
-
-    /**
-      * Adds a new value to this attribute.
-      *
-      * @param attrVal The value to be added. If null, a null value is added to
-      *                the attribute.
-      * @return true Always returns true.
-      */
-    public boolean add(Object attrVal) {
-        // LDAP attributes don't contain duplicate values so there's no need
-        // to check if the value already exists before adding it.
-        values.addElement(attrVal);
-        return true;
-    }
-
-    /**
-      * Constructs a new instance of an attribute.
-      *
-      * @param id The attribute's id. It cannot be null.
-      */
-    LdapAttribute(String id) {
-        super(id);
-    }
-
-    /**
-      * Constructs a new instance of an attribute.
-      *
-      * @param id The attribute's id. It cannot be null.
-      * @param baseCtx  the baseCtx object of this attribute
-      * @param rdn      the RDN of the entry (relative to baseCtx)
-      */
-    private LdapAttribute(String id, DirContext baseCtx, Name rdn) {
-        super(id);
-        this.baseCtx = baseCtx;
-        this.rdn = rdn;
-    }
-
-     /**
-      * Sets the baseCtx and rdn used to find the attribute's schema
-      * Used by LdapCtx.setParents().
-      */
-    void setParent(DirContext baseCtx, Name rdn) {
-        this.baseCtx = baseCtx;
-        this.rdn = rdn;
-    }
-
-    /**
-     * returns the ctx this attribute came from. This call allows
-     * LDAPAttribute to be serializable. 'baseCtx' is transient so if
-     * it is null, the `baseCtxURL` is used to reconstruct the context
-     * to which calls are made.
-     */
-    private DirContext getBaseCtx() throws NamingException {
-        if(baseCtx == null) {
-            if (baseCtxEnv == null) {
-                baseCtxEnv = new Hashtable(3);
-            }
-            baseCtxEnv.put(Context.INITIAL_CONTEXT_FACTORY,
-                             "com.sun.jndi.ldap.LdapCtxFactory");
-            baseCtxEnv.put(Context.PROVIDER_URL,baseCtxURL);
-            baseCtx = (new InitialDirContext(baseCtxEnv));
-        }
-        return baseCtx;
-    }
-
-    /**
-     * This is called when the object is serialized. It is
-     * overridden so that the appropriate class variables can be set
-     * to re-construct the baseCtx when deserialized. Setting these
-     * variables is costly, so it is only done if the object
-     * is actually serialized.
-     */
-    private void writeObject(java.io.ObjectOutputStream out)
-        throws IOException {
-
-        // setup internal state
-        this.setBaseCtxInfo();
-
-        // let the ObjectOutpurStream do the real work of serialization
-        out.defaultWriteObject();
-    }
-
-    /**
-     * sets the information needed to reconstruct the baseCtx if
-     * we are serialized. This must be called _before_ the object is
-     * serialized!!!
-     */
-    private void setBaseCtxInfo() {
-        Hashtable realEnv = null;
-        Hashtable secureEnv = null;
-
-        if (baseCtx != null) {
-            realEnv = ((LdapCtx)baseCtx).envprops;
-            this.baseCtxURL = ((LdapCtx)baseCtx).getURL();
-        }
-
-        if(realEnv != null && realEnv.size() > 0 ) {
-            // remove any security credentials - otherwise the serialized form
-            // would store them in the clear
-            Enumeration keys = realEnv.keys();
-            while(keys.hasMoreElements()) {
-                String key = (String)keys.nextElement();
-                if (key.indexOf("security") != -1 ) {
-
-                    //if we need to remove props, we must do it to a clone
-                    //of the environment. cloning is expensive, so we only do
-                    //it if we have to.
-                    if(secureEnv == null) {
-                        secureEnv = (Hashtable)realEnv.clone();
-                    }
-                    secureEnv.remove(key);
-                }
-            }
-        }
-
-        // set baseCtxEnv depending on whether we removed props or not
-        this.baseCtxEnv = (secureEnv == null ? realEnv : secureEnv);
-    }
-
-    /**
-      * Retrieves the syntax definition associated with this attribute.
-      * @return This attribute's syntax definition.
-      */
-    public DirContext getAttributeSyntaxDefinition() throws NamingException {
-        // get the syntax id from the attribute def
-        DirContext schema = getBaseCtx().getSchema(rdn);
-        DirContext attrDef = (DirContext)schema.lookup(
-            LdapSchemaParser.ATTRIBUTE_DEFINITION_NAME + "/" + getID());
-
-        Attribute syntaxAttr = attrDef.getAttributes("").get("SYNTAX");
-
-        if(syntaxAttr == null || syntaxAttr.size() == 0) {
-            throw new NameNotFoundException(
-                getID() + "does not have a syntax associated with it");
-        }
-
-        String syntaxName = (String)syntaxAttr.get();
-
-        // look in the schema tree for the syntax definition
-        return (DirContext)schema.lookup(
-            LdapSchemaParser.SYNTAX_DEFINITION_NAME + "/" + syntaxName);
-    }
-
-    /**
-      * Retrieves this attribute's schema definition.
-      *
-      * @return This attribute's schema definition.
-      */
-    public DirContext getAttributeDefinition() throws NamingException {
-        DirContext schema = getBaseCtx().getSchema(rdn);
-
-        return (DirContext)schema.lookup(
-            LdapSchemaParser.ATTRIBUTE_DEFINITION_NAME + "/" + getID());
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/ldap/LdapBindingEnumeration.java b/ojluni/src/main/java/com/sun/jndi/ldap/LdapBindingEnumeration.java
deleted file mode 100755
index d3e247e..0000000
--- a/ojluni/src/main/java/com/sun/jndi/ldap/LdapBindingEnumeration.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-package com.sun.jndi.ldap;
-
-import java.util.Vector;
-import javax.naming.*;
-import javax.naming.directory.*;
-import javax.naming.spi.*;
-
-import com.sun.jndi.toolkit.ctx.Continuation;
-
-final class LdapBindingEnumeration extends LdapNamingEnumeration {
-
-    LdapBindingEnumeration(LdapCtx homeCtx, LdapResult answer, Name remain,
-        Continuation cont) throws NamingException
-    {
-        super(homeCtx, answer, remain, cont);
-    }
-
-    protected NameClassPair
-      createItem(String dn, Attributes attrs, Vector respCtls)
-        throws NamingException {
-
-        Object obj = null;
-        String atom = getAtom(dn);
-
-        if (attrs.get(Obj.JAVA_ATTRIBUTES[Obj.CLASSNAME]) != null) {
-            // serialized object or object reference
-            obj = Obj.decodeObject(attrs);
-        }
-        if (obj == null) {
-            // DirContext object
-            obj = new LdapCtx(homeCtx, dn);
-        }
-
-        CompositeName cn = new CompositeName();
-        cn.add(atom);
-
-        try {
-            obj = DirectoryManager.getObjectInstance(obj, cn, homeCtx,
-                homeCtx.envprops, attrs);
-
-        } catch (NamingException e) {
-            throw e;
-
-        } catch (Exception e) {
-            NamingException ne =
-                new NamingException(
-                        "problem generating object using object factory");
-            ne.setRootCause(e);
-            throw ne;
-        }
-
-        Binding binding;
-        if (respCtls != null) {
-           binding = new BindingWithControls(cn.toString(), obj,
-                                homeCtx.convertControls(respCtls));
-        } else {
-            binding = new Binding(cn.toString(), obj);
-        }
-        binding.setNameInNamespace(dn);
-        return binding;
-    }
-
-    protected LdapNamingEnumeration
-    getReferredResults(LdapReferralContext refCtx) throws NamingException{
-        // repeat the original operation at the new context
-        return (LdapNamingEnumeration) refCtx.listBindings(listArg);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/ldap/LdapClient.java b/ojluni/src/main/java/com/sun/jndi/ldap/LdapClient.java
deleted file mode 100755
index 38b1d4d..0000000
--- a/ojluni/src/main/java/com/sun/jndi/ldap/LdapClient.java
+++ /dev/null
@@ -1,1611 +0,0 @@
-/*
- * Copyright (c) 1999, 2012, 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.jndi.ldap;
-
-import java.net.*;
-import java.io.*;
-import java.util.Vector;
-import java.util.Hashtable;
-
-import javax.naming.*;
-import javax.naming.directory.*;
-import javax.naming.ldap.*;
-
-import com.sun.jndi.ldap.pool.PooledConnection;
-import com.sun.jndi.ldap.pool.PoolCallback;
-import com.sun.jndi.ldap.sasl.LdapSasl;
-import com.sun.jndi.ldap.sasl.SaslInputStream;
-
-/**
- * LDAP (RFC-1777) and LDAPv3 (RFC-2251) compliant client
- *
- * This class represents a connection to an LDAP client.
- * Callers interact with this class at an LDAP operation level.
- * That is, the caller invokes a method to do a SEARCH or MODRDN
- * operation and gets back the result.
- * The caller uses the constructor to create a connection to the server.
- * It then needs to use authenticate() to perform an LDAP BIND.
- * Note that for v3, BIND is optional so authenticate() might not
- * actually send a BIND. authenticate() can be used later on to issue
- * a BIND, for example, for a v3 client that wants to change the connection's
- * credentials.
- *<p>
- * Multiple LdapCtx might share the same LdapClient. For example, contexts
- * derived from the same initial context would share the same LdapClient
- * until changes to a context's properties necessitates its own LdapClient.
- * LdapClient methods that access shared data are thread-safe (i.e., caller
- * does not have to sync).
- *<p>
- * Fields:
- *   isLdapv3 - no sync; initialized and updated within sync authenticate();
- *       always updated when connection is "quiet" and not shared;
- *       read access from outside LdapClient not sync
- *   referenceCount - sync within LdapClient; exception is forceClose() which
- *       is used by Connection thread to close connection upon receiving
- *       an Unsolicited Notification.
- *       access from outside LdapClient must sync;
- *   conn - no sync; Connection takes care of its own sync
- *   unsolicited - sync Vector; multiple operations sync'ed
- *
- * @author Vincent Ryan
- * @author Jagane Sundar
- * @author Rosanna Lee
- */
-
-public final class LdapClient implements PooledConnection {
-    // ---------------------- Constants ----------------------------------
-    private static final int debug = 0;
-    static final boolean caseIgnore = true;
-
-    // Default list of binary attributes
-    private static final Hashtable defaultBinaryAttrs = new Hashtable(23,0.75f);
-    static {
-        defaultBinaryAttrs.put("userpassword", Boolean.TRUE);      //2.5.4.35
-        defaultBinaryAttrs.put("javaserializeddata", Boolean.TRUE);
-                                                //1.3.6.1.4.1.42.2.27.4.1.8
-        defaultBinaryAttrs.put("javaserializedobject", Boolean.TRUE);
-                                                // 1.3.6.1.4.1.42.2.27.4.1.2
-        defaultBinaryAttrs.put("jpegphoto", Boolean.TRUE);
-                                                //0.9.2342.19200300.100.1.60
-        defaultBinaryAttrs.put("audio", Boolean.TRUE);  //0.9.2342.19200300.100.1.55
-        defaultBinaryAttrs.put("thumbnailphoto", Boolean.TRUE);
-                                                //1.3.6.1.4.1.1466.101.120.35
-        defaultBinaryAttrs.put("thumbnaillogo", Boolean.TRUE);
-                                                //1.3.6.1.4.1.1466.101.120.36
-        defaultBinaryAttrs.put("usercertificate", Boolean.TRUE);     //2.5.4.36
-        defaultBinaryAttrs.put("cacertificate", Boolean.TRUE);       //2.5.4.37
-        defaultBinaryAttrs.put("certificaterevocationlist", Boolean.TRUE);
-                                                //2.5.4.39
-        defaultBinaryAttrs.put("authorityrevocationlist", Boolean.TRUE); //2.5.4.38
-        defaultBinaryAttrs.put("crosscertificatepair", Boolean.TRUE);    //2.5.4.40
-        defaultBinaryAttrs.put("photo", Boolean.TRUE);   //0.9.2342.19200300.100.1.7
-        defaultBinaryAttrs.put("personalsignature", Boolean.TRUE);
-                                                //0.9.2342.19200300.100.1.53
-        defaultBinaryAttrs.put("x500uniqueidentifier", Boolean.TRUE); //2.5.4.45
-    }
-
-    private static final String DISCONNECT_OID = "1.3.6.1.4.1.1466.20036";
-
-
-    // ----------------------- instance fields ------------------------
-    boolean isLdapv3;         // Used by LdapCtx
-    int referenceCount = 1;   // Used by LdapCtx for check for sharing
-
-    Connection conn;  // Connection to server; has reader thread
-                      // used by LdapCtx for StartTLS
-
-    final private PoolCallback pcb;
-    final private boolean pooled;
-    private boolean authenticateCalled = false;
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // constructor: Create an authenticated connection to server
-    //
-    ////////////////////////////////////////////////////////////////////////////
-
-    LdapClient(String host, int port, String socketFactory,
-        int connectTimeout, int readTimeout, OutputStream trace, PoolCallback pcb)
-        throws NamingException {
-
-        if (debug > 0)
-            System.err.println("LdapClient: constructor called " + host + ":" + port );
-        conn = new Connection(this, host, port, socketFactory, connectTimeout, readTimeout,
-            trace);
-
-        this.pcb = pcb;
-        pooled = (pcb != null);
-    }
-
-    synchronized boolean authenticateCalled() {
-        return authenticateCalled;
-    }
-
-    synchronized LdapResult
-    authenticate(boolean initial, String name, Object pw, int version,
-        String authMechanism, Control[] ctls,  Hashtable env)
-        throws NamingException {
-
-        int readTimeout = conn.readTimeout;
-        conn.readTimeout = conn.connectTimeout;
-        LdapResult res = null;
-
-        try {
-            authenticateCalled = true;
-
-            try {
-                ensureOpen();
-            } catch (IOException e) {
-                NamingException ne = new CommunicationException();
-                ne.setRootCause(e);
-                throw ne;
-            }
-
-            switch (version) {
-            case LDAP_VERSION3_VERSION2:
-            case LDAP_VERSION3:
-                isLdapv3 = true;
-                break;
-            case LDAP_VERSION2:
-                isLdapv3 = false;
-                break;
-            default:
-                throw new CommunicationException("Protocol version " + version +
-                    " not supported");
-            }
-
-            if (authMechanism.equalsIgnoreCase("none") ||
-                authMechanism.equalsIgnoreCase("anonymous")) {
-
-                // Perform LDAP bind if we are reauthenticating, using LDAPv2,
-                // supporting failover to LDAPv2, or controls have been supplied.
-                if (!initial ||
-                    (version == LDAP_VERSION2) ||
-                    (version == LDAP_VERSION3_VERSION2) ||
-                    ((ctls != null) && (ctls.length > 0))) {
-                    try {
-                        // anonymous bind; update name/pw for LDAPv2 retry
-                        res = ldapBind(name=null, (byte[])(pw=null), ctls, null,
-                            false);
-                        if (res.status == LdapClient.LDAP_SUCCESS) {
-                            conn.setBound();
-                        }
-                    } catch (IOException e) {
-                        NamingException ne =
-                            new CommunicationException("anonymous bind failed: " +
-                            conn.host + ":" + conn.port);
-                        ne.setRootCause(e);
-                        throw ne;
-                    }
-                } else {
-                    // Skip LDAP bind for LDAPv3 anonymous bind
-                    res = new LdapResult();
-                    res.status = LdapClient.LDAP_SUCCESS;
-                }
-            } else if (authMechanism.equalsIgnoreCase("simple")) {
-                // simple authentication
-                byte[] encodedPw = null;
-                try {
-                    encodedPw = encodePassword(pw, isLdapv3);
-                    res = ldapBind(name, encodedPw, ctls, null, false);
-                    if (res.status == LdapClient.LDAP_SUCCESS) {
-                        conn.setBound();
-                    }
-                } catch (IOException e) {
-                    NamingException ne =
-                        new CommunicationException("simple bind failed: " +
-                            conn.host + ":" + conn.port);
-                    ne.setRootCause(e);
-                    throw ne;
-                } finally {
-                    // If pw was copied to a new array, clear that array as
-                    // a security precaution.
-                    if (encodedPw != pw && encodedPw != null) {
-                        for (int i = 0; i < encodedPw.length; i++) {
-                            encodedPw[i] = 0;
-                        }
-                    }
-                }
-            } else if (isLdapv3) {
-                // SASL authentication
-                try {
-                    res = LdapSasl.saslBind(this, conn, conn.host, name, pw,
-                        authMechanism, env, ctls);
-                    if (res.status == LdapClient.LDAP_SUCCESS) {
-                        conn.setBound();
-                    }
-                } catch (IOException e) {
-                    NamingException ne =
-                        new CommunicationException("SASL bind failed: " +
-                        conn.host + ":" + conn.port);
-                    ne.setRootCause(e);
-                    throw ne;
-                }
-            } else {
-                throw new AuthenticationNotSupportedException(authMechanism);
-            }
-
-            //
-            // re-try login using v2 if failing over
-            //
-            if (initial &&
-                (res.status == LdapClient.LDAP_PROTOCOL_ERROR) &&
-                (version == LdapClient.LDAP_VERSION3_VERSION2) &&
-                (authMechanism.equalsIgnoreCase("none") ||
-                    authMechanism.equalsIgnoreCase("anonymous") ||
-                    authMechanism.equalsIgnoreCase("simple"))) {
-
-                byte[] encodedPw = null;
-                try {
-                    isLdapv3 = false;
-                    encodedPw = encodePassword(pw, false);
-                    res = ldapBind(name, encodedPw, ctls, null, false);
-                    if (res.status == LdapClient.LDAP_SUCCESS) {
-                        conn.setBound();
-                    }
-                } catch (IOException e) {
-                    NamingException ne =
-                        new CommunicationException(authMechanism + ":" +
-                            conn.host +     ":" + conn.port);
-                    ne.setRootCause(e);
-                    throw ne;
-                } finally {
-                    // If pw was copied to a new array, clear that array as
-                    // a security precaution.
-                    if (encodedPw != pw && encodedPw != null) {
-                        for (int i = 0; i < encodedPw.length; i++) {
-                            encodedPw[i] = 0;
-                        }
-                    }
-                }
-            }
-
-            // principal name not found
-            // (map NameNotFoundException to AuthenticationException)
-            // %%% This is a workaround for Netscape servers returning
-            // %%% no such object when the principal name is not found
-            // %%% Note that when this workaround is applied, it does not allow
-            // %%% response controls to be recorded by the calling context
-            if (res.status == LdapClient.LDAP_NO_SUCH_OBJECT) {
-                throw new AuthenticationException(
-                    getErrorMessage(res.status, res.errorMessage));
-            }
-            conn.setV3(isLdapv3);
-            return res;
-        } finally {
-            conn.readTimeout = readTimeout;
-        }
-    }
-
-    /**
-     * Sends an LDAP Bind request.
-     * Cannot be private; called by LdapSasl
-     * @param dn The possibly null DN to use in the BIND request. null if anonymous.
-     * @param toServer The possibly null array of bytes to send to the server.
-     * @param auth The authentication mechanism
-     *
-     */
-    synchronized public LdapResult ldapBind(String dn, byte[]toServer,
-        Control[] bindCtls, String auth, boolean pauseAfterReceipt)
-        throws java.io.IOException, NamingException {
-
-        ensureOpen();
-
-        // flush outstanding requests
-        conn.abandonOutstandingReqs(null);
-
-        BerEncoder ber = new BerEncoder();
-        int curMsgId = conn.getMsgId();
-        LdapResult res = new LdapResult();
-        res.status = LDAP_OPERATIONS_ERROR;
-
-        //
-        // build the bind request.
-        //
-        ber.beginSeq(Ber.ASN_SEQUENCE | Ber.ASN_CONSTRUCTOR);
-            ber.encodeInt(curMsgId);
-            ber.beginSeq(LdapClient.LDAP_REQ_BIND);
-                ber.encodeInt(isLdapv3 ? LDAP_VERSION3 : LDAP_VERSION2);
-                ber.encodeString(dn, isLdapv3);
-
-                // if authentication mechanism specified, it is SASL
-                if (auth != null) {
-                    ber.beginSeq(Ber.ASN_CONTEXT | Ber.ASN_CONSTRUCTOR | 3);
-                        ber.encodeString(auth, isLdapv3);    // SASL mechanism
-                        if (toServer != null) {
-                            ber.encodeOctetString(toServer,
-                                Ber.ASN_OCTET_STR);
-                        }
-                    ber.endSeq();
-                } else {
-                    if (toServer != null) {
-                        ber.encodeOctetString(toServer, Ber.ASN_CONTEXT);
-                    } else {
-                        ber.encodeOctetString(null, Ber.ASN_CONTEXT, 0, 0);
-                    }
-                }
-            ber.endSeq();
-
-            // Encode controls
-            if (isLdapv3) {
-                encodeControls(ber, bindCtls);
-            }
-        ber.endSeq();
-
-        LdapRequest req = conn.writeRequest(ber, curMsgId, pauseAfterReceipt);
-        if (toServer != null) {
-            ber.reset();        // clear internally-stored password
-        }
-
-        // Read reply
-        BerDecoder rber = conn.readReply(req);
-
-        rber.parseSeq(null);    // init seq
-        rber.parseInt();        // msg id
-        if (rber.parseByte() !=  LDAP_REP_BIND) {
-            return res;
-        }
-
-        rber.parseLength();
-        parseResult(rber, res, isLdapv3);
-
-        // handle server's credentials (if present)
-        if (isLdapv3 &&
-            (rber.bytesLeft() > 0) &&
-            (rber.peekByte() == (Ber.ASN_CONTEXT | 7))) {
-            res.serverCreds = rber.parseOctetString((Ber.ASN_CONTEXT | 7), null);
-        }
-
-        res.resControls = isLdapv3 ? parseControls(rber) : null;
-
-        conn.removeRequest(req);
-        return res;
-    }
-
-    /**
-     * Determines whether SASL encryption/integrity is in progress.
-     * This check is made prior to reauthentication. You cannot reauthenticate
-     * over an encrypted/integrity-protected SASL channel. You must
-     * close the channel and open a new one.
-     */
-    boolean usingSaslStreams() {
-        return (conn.inStream instanceof SaslInputStream);
-    }
-
-    synchronized void incRefCount() {
-        ++referenceCount;
-        if (debug > 1) {
-            System.err.println("LdapClient.incRefCount: " + referenceCount + " " + this);
-        }
-
-    }
-
-    /**
-     * Returns the encoded password.
-     */
-    private static byte[] encodePassword(Object pw, boolean v3) throws IOException {
-
-        if (pw instanceof char[]) {
-            pw = new String((char[])pw);
-        }
-
-        if (pw instanceof String) {
-            if (v3) {
-                return ((String)pw).getBytes("UTF8");
-            } else {
-                return ((String)pw).getBytes("8859_1");
-            }
-        } else {
-            return (byte[])pw;
-        }
-    }
-
-    synchronized void close(Control[] reqCtls, boolean hardClose) {
-        --referenceCount;
-
-        if (debug > 1) {
-            System.err.println("LdapClient: " + this);
-            System.err.println("LdapClient: close() called: " + referenceCount);
-            (new Throwable()).printStackTrace();
-        }
-
-        if (referenceCount <= 0 && conn != null) {
-            if (debug > 0) System.err.println("LdapClient: closed connection " + this);
-            if (!pooled) {
-                // Not being pooled; continue with closing
-                conn.cleanup(reqCtls, false);
-                conn = null;
-            } else {
-                // Pooled
-
-                // Is this a real close or a request to return conn to pool
-                if (hardClose) {
-                    conn.cleanup(reqCtls, false);
-                    conn = null;
-                    pcb.removePooledConnection(this);
-                } else {
-                    pcb.releasePooledConnection(this);
-                }
-            }
-        }
-    }
-
-    // NOTE: Should NOT be synchronized otherwise won't be able to close
-    private void forceClose(boolean cleanPool) {
-        referenceCount = 0; // force closing of connection
-
-        if (debug > 1) {
-            System.err.println("LdapClient: forceClose() of " + this);
-        }
-
-        if (conn != null) {
-            if (debug > 0) System.err.println(
-                "LdapClient: forced close of connection " + this);
-            conn.cleanup(null, false);
-            conn = null;
-
-            if (cleanPool) {
-                pcb.removePooledConnection(this);
-            }
-        }
-    }
-
-    protected void finalize() {
-        if (debug > 0) System.err.println("LdapClient: finalize " + this);
-        forceClose(pooled);
-    }
-
-    /*
-     * Used by connection pooling to close physical connection.
-     */
-    synchronized public void closeConnection() {
-        forceClose(false); // this is a pool callback so no need to clean pool
-    }
-
-    /**
-     * Called by Connection.cleanup(). LdapClient should
-     * notify any unsolicited listeners and removing itself from any pool.
-     * This is almost like forceClose(), except it doesn't call
-     * Connection.cleanup() (because this is called from cleanup()).
-     */
-    void processConnectionClosure() {
-        // Notify listeners
-        synchronized (unsolicited) {
-            if (unsolicited.size() > 0) {
-                String msg;
-                if (conn != null) {
-                    msg = conn.host + ":" + conn.port + " connection closed";
-                } else {
-                    msg = "Connection closed";
-                }
-                notifyUnsolicited(new CommunicationException(msg));
-            }
-        }
-
-        // Remove from pool
-        if (pooled) {
-            pcb.removePooledConnection(this);
-        }
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // LDAP search. also includes methods to encode rfc 1558 compliant filters
-    //
-    ////////////////////////////////////////////////////////////////////////////
-
-    static final int SCOPE_BASE_OBJECT = 0;
-    static final int SCOPE_ONE_LEVEL = 1;
-    static final int SCOPE_SUBTREE = 2;
-
-    LdapResult search(String dn, int scope, int deref, int sizeLimit,
-                      int timeLimit, boolean attrsOnly, String attrs[],
-                      String filter, int batchSize, Control[] reqCtls,
-                      Hashtable binaryAttrs, boolean waitFirstReply,
-                      int replyQueueCapacity)
-        throws IOException, NamingException {
-
-        ensureOpen();
-
-        LdapResult res = new LdapResult();
-
-        BerEncoder ber = new BerEncoder();
-        int curMsgId = conn.getMsgId();
-
-            ber.beginSeq(Ber.ASN_SEQUENCE | Ber.ASN_CONSTRUCTOR);
-                ber.encodeInt(curMsgId);
-                ber.beginSeq(LDAP_REQ_SEARCH);
-                    ber.encodeString(dn == null ? "" : dn, isLdapv3);
-                    ber.encodeInt(scope, LBER_ENUMERATED);
-                    ber.encodeInt(deref, LBER_ENUMERATED);
-                    ber.encodeInt(sizeLimit);
-                    ber.encodeInt(timeLimit);
-                    ber.encodeBoolean(attrsOnly);
-                    Filter.encodeFilterString(ber, filter, isLdapv3);
-                    ber.beginSeq(Ber.ASN_SEQUENCE | Ber.ASN_CONSTRUCTOR);
-                        ber.encodeStringArray(attrs, isLdapv3);
-                    ber.endSeq();
-                ber.endSeq();
-                if (isLdapv3) encodeControls(ber, reqCtls);
-            ber.endSeq();
-
-         LdapRequest req =
-                conn.writeRequest(ber, curMsgId, false, replyQueueCapacity);
-
-         res.msgId = curMsgId;
-         res.status = LdapClient.LDAP_SUCCESS; //optimistic
-         if (waitFirstReply) {
-             // get first reply
-             res = getSearchReply(req, batchSize, res, binaryAttrs);
-         }
-         return res;
-    }
-
-    /*
-     * Abandon the search operation and remove it from the message queue.
-     */
-    void clearSearchReply(LdapResult res, Control[] ctls) {
-        if (res != null && conn != null) {
-
-            // Only send an LDAP abandon operation when clearing the search
-            // reply from a one-level or subtree search.
-            LdapRequest req = conn.findRequest(res.msgId);
-            if (req == null) {
-                return;
-            }
-
-            // OK if req got removed after check; double removal attempt
-            // but otherwise no harm done
-
-            // Send an LDAP abandon only if the search operation has not yet
-            // completed.
-            if (req.hasSearchCompleted()) {
-                conn.removeRequest(req);
-            } else {
-                conn.abandonRequest(req, ctls);
-            }
-        }
-    }
-
-    /*
-     * Retrieve the next batch of entries and/or referrals.
-     */
-    LdapResult getSearchReply(int batchSize, LdapResult res,
-        Hashtable binaryAttrs) throws IOException, NamingException {
-
-        ensureOpen();
-
-        LdapRequest req;
-
-        if ((req = conn.findRequest(res.msgId)) == null) {
-            return null;
-        }
-
-        return getSearchReply(req, batchSize, res, binaryAttrs);
-    }
-
-    private LdapResult getSearchReply(LdapRequest req,
-        int batchSize, LdapResult res, Hashtable binaryAttrs)
-        throws IOException, NamingException {
-
-        if (batchSize == 0)
-            batchSize = Integer.MAX_VALUE;
-
-        if (res.entries != null) {
-            res.entries.setSize(0); // clear the (previous) set of entries
-        } else {
-            res.entries =
-                new Vector(batchSize == Integer.MAX_VALUE ? 32 : batchSize);
-        }
-
-        if (res.referrals != null) {
-            res.referrals.setSize(0); // clear the (previous) set of referrals
-        }
-
-        BerDecoder replyBer;    // Decoder for response
-        int seq;                // Request id
-
-        Attributes lattrs;      // Attribute set read from response
-        Attribute la;           // Attribute read from response
-        String DN;              // DN read from response
-        LdapEntry le;           // LDAP entry representing response
-        int[] seqlen;           // Holder for response length
-        int endseq;             // Position of end of response
-
-        for (int i = 0; i < batchSize;) {
-            replyBer = conn.readReply(req);
-
-            //
-            // process search reply
-            //
-            replyBer.parseSeq(null);                    // init seq
-            replyBer.parseInt();                        // req id
-            seq = replyBer.parseSeq(null);
-
-            if (seq == LDAP_REP_SEARCH) {
-
-                // handle LDAPv3 search entries
-                lattrs = new BasicAttributes(caseIgnore);
-                DN = replyBer.parseString(isLdapv3);
-                le = new LdapEntry(DN, lattrs);
-                seqlen = new int[1];
-
-                replyBer.parseSeq(seqlen);
-                endseq = replyBer.getParsePosition() + seqlen[0];
-                while ((replyBer.getParsePosition() < endseq) &&
-                    (replyBer.bytesLeft() > 0)) {
-                    la = parseAttribute(replyBer, binaryAttrs);
-                    lattrs.put(la);
-                }
-                le.respCtls = isLdapv3 ? parseControls(replyBer) : null;
-
-                res.entries.addElement(le);
-                i++;
-
-            } else if ((seq == LDAP_REP_SEARCH_REF) && isLdapv3) {
-
-                // handle LDAPv3 search reference
-                Vector URLs = new Vector(4);
-
-                // %%% Although not strictly correct, some LDAP servers
-                //     encode the SEQUENCE OF tag in the SearchResultRef
-                if (replyBer.peekByte() ==
-                    (Ber.ASN_SEQUENCE | Ber.ASN_CONSTRUCTOR)) {
-                    replyBer.parseSeq(null);
-                }
-
-                while ((replyBer.bytesLeft() > 0) &&
-                    (replyBer.peekByte() == Ber.ASN_OCTET_STR)) {
-
-                    URLs.addElement(replyBer.parseString(isLdapv3));
-                }
-
-                if (res.referrals == null) {
-                    res.referrals = new Vector(4);
-                }
-                res.referrals.addElement(URLs);
-                res.resControls = isLdapv3 ? parseControls(replyBer) : null;
-
-                // Save referral and continue to get next search result
-
-            } else if (seq == LDAP_REP_EXTENSION) {
-
-                parseExtResponse(replyBer, res); //%%% ignore for now
-
-            } else if (seq == LDAP_REP_RESULT) {
-
-                parseResult(replyBer, res, isLdapv3);
-                res.resControls = isLdapv3 ? parseControls(replyBer) : null;
-
-                conn.removeRequest(req);
-                return res;     // Done with search
-            }
-        }
-
-        return res;
-    }
-
-    private Attribute parseAttribute(BerDecoder ber, Hashtable binaryAttrs)
-        throws IOException {
-
-        int len[] = new int[1];
-        int seq = ber.parseSeq(null);
-        String attrid = ber.parseString(isLdapv3);
-        boolean hasBinaryValues = isBinaryValued(attrid, binaryAttrs);
-        Attribute la = new LdapAttribute(attrid);
-
-        if ((seq = ber.parseSeq(len)) == LBER_SET) {
-            int attrlen = len[0];
-            while (ber.bytesLeft() > 0 && attrlen > 0) {
-                try {
-                    attrlen -= parseAttributeValue(ber, la, hasBinaryValues);
-                } catch (IOException ex) {
-                    ber.seek(attrlen);
-                    break;
-                }
-            }
-        } else {
-            // Skip the rest of the sequence because it is not what we want
-            ber.seek(len[0]);
-        }
-        return la;
-    }
-
-    //
-    // returns number of bytes that were parsed. Adds the values to attr
-    //
-    private int parseAttributeValue(BerDecoder ber, Attribute la,
-        boolean hasBinaryValues) throws IOException {
-
-        int len[] = new int[1];
-
-        if (hasBinaryValues) {
-            la.add(ber.parseOctetString(ber.peekByte(), len));
-        } else {
-            la.add(ber.parseStringWithTag(Ber.ASN_SIMPLE_STRING, isLdapv3, len));
-        }
-        return len[0];
-    }
-
-    private boolean isBinaryValued(String attrid, Hashtable binaryAttrs) {
-        String id = attrid.toLowerCase();
-
-        return ((id.indexOf(";binary") != -1) ||
-            defaultBinaryAttrs.containsKey(id) ||
-            ((binaryAttrs != null) && (binaryAttrs.containsKey(id))));
-    }
-
-    // package entry point; used by Connection
-    static void parseResult(BerDecoder replyBer, LdapResult res, boolean isLdapv3)
-        throws IOException {
-
-        res.status = replyBer.parseEnumeration();
-        res.matchedDN = replyBer.parseString(isLdapv3);
-        res.errorMessage = replyBer.parseString(isLdapv3);
-
-        // handle LDAPv3 referrals (if present)
-        if (isLdapv3 &&
-            (replyBer.bytesLeft() > 0) &&
-            (replyBer.peekByte() == LDAP_REP_REFERRAL)) {
-
-            Vector URLs = new Vector(4);
-            int[] seqlen = new int[1];
-
-            replyBer.parseSeq(seqlen);
-            int endseq = replyBer.getParsePosition() + seqlen[0];
-            while ((replyBer.getParsePosition() < endseq) &&
-                (replyBer.bytesLeft() > 0)) {
-
-                URLs.addElement(replyBer.parseString(isLdapv3));
-            }
-
-            if (res.referrals == null) {
-                res.referrals = new Vector(4);
-            }
-            res.referrals.addElement(URLs);
-        }
-    }
-
-    // package entry point; used by Connection
-    static Vector parseControls(BerDecoder replyBer) throws IOException {
-
-        // handle LDAPv3 controls (if present)
-        if ((replyBer.bytesLeft() > 0) && (replyBer.peekByte() == LDAP_CONTROLS)) {
-            Vector ctls = new Vector(4);
-            String controlOID;
-            boolean criticality = false; // default
-            byte[] controlValue = null;  // optional
-            int[] seqlen = new int[1];
-
-            replyBer.parseSeq(seqlen);
-            int endseq = replyBer.getParsePosition() + seqlen[0];
-            while ((replyBer.getParsePosition() < endseq) &&
-                (replyBer.bytesLeft() > 0)) {
-
-                replyBer.parseSeq(null);
-                controlOID = replyBer.parseString(true);
-
-                if ((replyBer.bytesLeft() > 0) &&
-                    (replyBer.peekByte() == Ber.ASN_BOOLEAN)) {
-                    criticality = replyBer.parseBoolean();
-                }
-                if ((replyBer.bytesLeft() > 0) &&
-                    (replyBer.peekByte() == Ber.ASN_OCTET_STR)) {
-                    controlValue =
-                        replyBer.parseOctetString(Ber.ASN_OCTET_STR, null);
-                }
-                if (controlOID != null) {
-                    ctls.addElement(
-                        new BasicControl(controlOID, criticality, controlValue));
-                }
-            }
-            return ctls;
-        } else {
-            return null;
-        }
-    }
-
-    private void parseExtResponse(BerDecoder replyBer, LdapResult res)
-        throws IOException {
-
-        parseResult(replyBer, res, isLdapv3);
-
-        if ((replyBer.bytesLeft() > 0) &&
-            (replyBer.peekByte() == LDAP_REP_EXT_OID)) {
-            res.extensionId =
-                replyBer.parseStringWithTag(LDAP_REP_EXT_OID, isLdapv3, null);
-        }
-        if ((replyBer.bytesLeft() > 0) &&
-            (replyBer.peekByte() == LDAP_REP_EXT_VAL)) {
-            res.extensionValue =
-                replyBer.parseOctetString(LDAP_REP_EXT_VAL, null);
-        }
-
-        res.resControls = parseControls(replyBer);
-    }
-
-    //
-    // Encode LDAPv3 controls
-    //
-    static void encodeControls(BerEncoder ber, Control[] reqCtls)
-        throws IOException {
-
-        if ((reqCtls == null) || (reqCtls.length == 0)) {
-            return;
-        }
-
-        byte[] controlVal;
-
-        ber.beginSeq(LdapClient.LDAP_CONTROLS);
-
-            for (int i = 0; i < reqCtls.length; i++) {
-                ber.beginSeq(Ber.ASN_SEQUENCE | Ber.ASN_CONSTRUCTOR);
-                    ber.encodeString(reqCtls[i].getID(), true); // control OID
-                    if (reqCtls[i].isCritical()) {
-                        ber.encodeBoolean(true); // critical control
-                    }
-                    if ((controlVal = reqCtls[i].getEncodedValue()) != null) {
-                        ber.encodeOctetString(controlVal, Ber.ASN_OCTET_STR);
-                    }
-                ber.endSeq();
-            }
-        ber.endSeq();
-    }
-
-    /**
-     * Reads the next reply corresponding to msgId, outstanding on requestBer.
-     * Processes the result and any controls.
-     */
-    private LdapResult processReply(LdapRequest req,
-        LdapResult res, int responseType) throws IOException, NamingException {
-
-        BerDecoder rber = conn.readReply(req);
-
-        rber.parseSeq(null);    // init seq
-        rber.parseInt();        // msg id
-        if (rber.parseByte() !=  responseType) {
-            return res;
-        }
-
-        rber.parseLength();
-        parseResult(rber, res, isLdapv3);
-        res.resControls = isLdapv3 ? parseControls(rber) : null;
-
-        conn.removeRequest(req);
-
-        return res;     // Done with operation
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // LDAP modify:
-    //  Modify the DN dn with the operations on attributes attrs.
-    //  ie, operations[0] is the operation to be performed on
-    //  attrs[0];
-    //          dn - DN to modify
-    //          operations - add, delete or replace
-    //          attrs - array of Attribute
-    //          reqCtls - array of request controls
-    //
-    ////////////////////////////////////////////////////////////////////////////
-
-    static final int ADD = 0;
-    static final int DELETE = 1;
-    static final int REPLACE = 2;
-
-    LdapResult modify(String dn, int operations[], Attribute attrs[],
-                      Control[] reqCtls)
-        throws IOException, NamingException {
-
-        ensureOpen();
-
-        LdapResult res = new LdapResult();
-        res.status = LDAP_OPERATIONS_ERROR;
-
-        if (dn == null || operations.length != attrs.length)
-            return res;
-
-        BerEncoder ber = new BerEncoder();
-        int curMsgId = conn.getMsgId();
-
-        ber.beginSeq(Ber.ASN_SEQUENCE | Ber.ASN_CONSTRUCTOR);
-            ber.encodeInt(curMsgId);
-            ber.beginSeq(LDAP_REQ_MODIFY);
-                ber.encodeString(dn, isLdapv3);
-                ber.beginSeq(Ber.ASN_SEQUENCE | Ber.ASN_CONSTRUCTOR);
-                    for (int i = 0; i < operations.length; i++) {
-                        ber.beginSeq(Ber.ASN_SEQUENCE | Ber.ASN_CONSTRUCTOR);
-                            ber.encodeInt(operations[i], LBER_ENUMERATED);
-
-                            // zero values is not permitted for the add op.
-                            if ((operations[i] == ADD) && hasNoValue(attrs[i])) {
-                                throw new InvalidAttributeValueException(
-                                    "'" + attrs[i].getID() + "' has no values.");
-                            } else {
-                                encodeAttribute(ber, attrs[i]);
-                            }
-                        ber.endSeq();
-                    }
-                ber.endSeq();
-            ber.endSeq();
-            if (isLdapv3) encodeControls(ber, reqCtls);
-        ber.endSeq();
-
-        LdapRequest req = conn.writeRequest(ber, curMsgId);
-
-        return processReply(req, res, LDAP_REP_MODIFY);
-    }
-
-    private void encodeAttribute(BerEncoder ber, Attribute attr)
-        throws IOException, NamingException {
-
-        ber.beginSeq(Ber.ASN_SEQUENCE | Ber.ASN_CONSTRUCTOR);
-            ber.encodeString(attr.getID(), isLdapv3);
-            ber.beginSeq(Ber.ASN_SEQUENCE | Ber.ASN_CONSTRUCTOR | 1);
-                NamingEnumeration enum_ = attr.getAll();
-                Object val;
-                while (enum_.hasMore()) {
-                    val = enum_.next();
-                    if (val instanceof String) {
-                        ber.encodeString((String)val, isLdapv3);
-                    } else if (val instanceof byte[]) {
-                        ber.encodeOctetString((byte[])val, Ber.ASN_OCTET_STR);
-                    } else if (val == null) {
-                        // no attribute value
-                    } else {
-                        throw new InvalidAttributeValueException(
-                            "Malformed '" + attr.getID() + "' attribute value");
-                    }
-                }
-            ber.endSeq();
-        ber.endSeq();
-    }
-
-    private static boolean hasNoValue(Attribute attr) throws NamingException {
-        return attr.size() == 0 || (attr.size() == 1 && attr.get() == null);
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // LDAP add
-    //          Adds entry to the Directory
-    //
-    ////////////////////////////////////////////////////////////////////////////
-
-    LdapResult add(LdapEntry entry, Control[] reqCtls)
-        throws IOException, NamingException {
-
-        ensureOpen();
-
-        LdapResult res = new LdapResult();
-        res.status = LDAP_OPERATIONS_ERROR;
-
-        if (entry == null || entry.DN == null)
-            return res;
-
-        BerEncoder ber = new BerEncoder();
-        int curMsgId = conn.getMsgId();
-        Attribute attr;
-
-            ber.beginSeq(Ber.ASN_SEQUENCE | Ber.ASN_CONSTRUCTOR);
-                ber.encodeInt(curMsgId);
-                ber.beginSeq(LDAP_REQ_ADD);
-                    ber.encodeString(entry.DN, isLdapv3);
-                    ber.beginSeq(Ber.ASN_SEQUENCE | Ber.ASN_CONSTRUCTOR);
-                        NamingEnumeration enum_ = entry.attributes.getAll();
-                        while (enum_.hasMore()) {
-                            attr = (Attribute)enum_.next();
-
-                            // zero values is not permitted
-                            if (hasNoValue(attr)) {
-                                throw new InvalidAttributeValueException(
-                                    "'" + attr.getID() + "' has no values.");
-                            } else {
-                                encodeAttribute(ber, attr);
-                            }
-                        }
-                    ber.endSeq();
-                ber.endSeq();
-                if (isLdapv3) encodeControls(ber, reqCtls);
-            ber.endSeq();
-
-        LdapRequest req = conn.writeRequest(ber, curMsgId);
-        return processReply(req, res, LDAP_REP_ADD);
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // LDAP delete
-    //          deletes entry from the Directory
-    //
-    ////////////////////////////////////////////////////////////////////////////
-
-    LdapResult delete(String DN, Control[] reqCtls)
-        throws IOException, NamingException {
-
-        ensureOpen();
-
-        LdapResult res = new LdapResult();
-        res.status = LDAP_OPERATIONS_ERROR;
-
-        if (DN == null)
-            return res;
-
-        BerEncoder ber = new BerEncoder();
-        int curMsgId = conn.getMsgId();
-
-            ber.beginSeq(Ber.ASN_SEQUENCE | Ber.ASN_CONSTRUCTOR);
-                ber.encodeInt(curMsgId);
-                ber.encodeString(DN, LDAP_REQ_DELETE, isLdapv3);
-                if (isLdapv3) encodeControls(ber, reqCtls);
-            ber.endSeq();
-
-        LdapRequest req = conn.writeRequest(ber, curMsgId);
-
-        return processReply(req, res, LDAP_REP_DELETE);
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // LDAP modrdn
-    //  Changes the last element of DN to newrdn
-    //          dn - DN to change
-    //          newrdn - new RDN to rename to
-    //          deleteoldrdn - boolean whether to delete old attrs or not
-    //          newSuperior - new place to put the entry in the tree
-    //                        (ignored if server is LDAPv2)
-    //          reqCtls - array of request controls
-    //
-    ////////////////////////////////////////////////////////////////////////////
-
-    LdapResult moddn(String DN, String newrdn, boolean deleteOldRdn,
-                     String newSuperior, Control[] reqCtls)
-        throws IOException, NamingException {
-
-        ensureOpen();
-
-        boolean changeSuperior = (newSuperior != null &&
-                                  newSuperior.length() > 0);
-
-        LdapResult res = new LdapResult();
-        res.status = LDAP_OPERATIONS_ERROR;
-
-        if (DN == null || newrdn == null)
-            return res;
-
-        BerEncoder ber = new BerEncoder();
-        int curMsgId = conn.getMsgId();
-
-            ber.beginSeq(Ber.ASN_SEQUENCE | Ber.ASN_CONSTRUCTOR);
-                ber.encodeInt(curMsgId);
-                ber.beginSeq(LDAP_REQ_MODRDN);
-                    ber.encodeString(DN, isLdapv3);
-                    ber.encodeString(newrdn, isLdapv3);
-                    ber.encodeBoolean(deleteOldRdn);
-                    if(isLdapv3 && changeSuperior) {
-                        //System.err.println("changin superior");
-                        ber.encodeString(newSuperior, LDAP_SUPERIOR_DN, isLdapv3);
-                    }
-                ber.endSeq();
-                if (isLdapv3) encodeControls(ber, reqCtls);
-            ber.endSeq();
-
-
-        LdapRequest req = conn.writeRequest(ber, curMsgId);
-
-        return processReply(req, res, LDAP_REP_MODRDN);
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // LDAP compare
-    //  Compare attribute->value pairs in dn
-    //
-    ////////////////////////////////////////////////////////////////////////////
-
-    LdapResult compare(String DN, String type, String value, Control[] reqCtls)
-        throws IOException, NamingException {
-
-        ensureOpen();
-
-        LdapResult res = new LdapResult();
-        res.status = LDAP_OPERATIONS_ERROR;
-
-        if (DN == null || type == null || value == null)
-            return res;
-
-        BerEncoder ber = new BerEncoder();
-        int curMsgId = conn.getMsgId();
-
-            ber.beginSeq(Ber.ASN_SEQUENCE | Ber.ASN_CONSTRUCTOR);
-                ber.encodeInt(curMsgId);
-                ber.beginSeq(LDAP_REQ_COMPARE);
-                    ber.encodeString(DN, isLdapv3);
-                    ber.beginSeq(Ber.ASN_SEQUENCE | Ber.ASN_CONSTRUCTOR);
-                        ber.encodeString(type, isLdapv3);
-
-                        // replace any escaped characters in the value
-                        byte[] val = isLdapv3 ?
-                            value.getBytes("UTF8") : value.getBytes("8859_1");
-                        ber.encodeOctetString(
-                            Filter.unescapeFilterValue(val, 0, val.length),
-                            Ber.ASN_OCTET_STR);
-
-                    ber.endSeq();
-                ber.endSeq();
-                if (isLdapv3) encodeControls(ber, reqCtls);
-            ber.endSeq();
-
-        LdapRequest req = conn.writeRequest(ber, curMsgId);
-
-        return processReply(req, res, LDAP_REP_COMPARE);
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // LDAP extended operation
-    //
-    ////////////////////////////////////////////////////////////////////////////
-
-    LdapResult extendedOp(String id, byte[] request, Control[] reqCtls,
-        boolean pauseAfterReceipt) throws IOException, NamingException {
-
-        ensureOpen();
-
-        LdapResult res = new LdapResult();
-        res.status = LDAP_OPERATIONS_ERROR;
-
-        if (id == null)
-            return res;
-
-        BerEncoder ber = new BerEncoder();
-        int curMsgId = conn.getMsgId();
-
-            ber.beginSeq(Ber.ASN_SEQUENCE | Ber.ASN_CONSTRUCTOR);
-                ber.encodeInt(curMsgId);
-                ber.beginSeq(LDAP_REQ_EXTENSION);
-                    ber.encodeString(id,
-                        Ber.ASN_CONTEXT | 0, isLdapv3);//[0]
-                    if (request != null) {
-                        ber.encodeOctetString(request,
-                            Ber.ASN_CONTEXT | 1);//[1]
-                    }
-                ber.endSeq();
-                encodeControls(ber, reqCtls); // always v3
-            ber.endSeq();
-
-        LdapRequest req = conn.writeRequest(ber, curMsgId, pauseAfterReceipt);
-
-        BerDecoder rber = conn.readReply(req);
-
-        rber.parseSeq(null);    // init seq
-        rber.parseInt();        // msg id
-        if (rber.parseByte() !=  LDAP_REP_EXTENSION) {
-            return res;
-        }
-
-        rber.parseLength();
-        parseExtResponse(rber, res);
-        conn.removeRequest(req);
-
-        return res;     // Done with operation
-    }
-
-
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Some BER definitions convenient for LDAP
-    //
-    ////////////////////////////////////////////////////////////////////////////
-
-    static final int LDAP_VERSION3_VERSION2 = 32;
-    static final int LDAP_VERSION2 = 0x02;
-    static final int LDAP_VERSION3 = 0x03;              // LDAPv3
-    static final int LDAP_VERSION = LDAP_VERSION3;
-
-    static final int LDAP_REF_FOLLOW = 0x01;            // follow referrals
-    static final int LDAP_REF_THROW = 0x02;             // throw referral ex.
-    static final int LDAP_REF_IGNORE = 0x03;            // ignore referrals
-
-    static final String LDAP_URL = "ldap://";           // LDAPv3
-    static final String LDAPS_URL = "ldaps://";         // LDAPv3
-
-    static final int LBER_BOOLEAN = 0x01;
-    static final int LBER_INTEGER = 0x02;
-    static final int LBER_BITSTRING = 0x03;
-    static final int LBER_OCTETSTRING = 0x04;
-    static final int LBER_NULL = 0x05;
-    static final int LBER_ENUMERATED = 0x0a;
-    static final int LBER_SEQUENCE = 0x30;
-    static final int LBER_SET = 0x31;
-
-    static final int LDAP_SUPERIOR_DN = 0x80;
-
-    static final int LDAP_REQ_BIND = 0x60;      // app + constructed
-    static final int LDAP_REQ_UNBIND = 0x42;    // app + primitive
-    static final int LDAP_REQ_SEARCH = 0x63;    // app + constructed
-    static final int LDAP_REQ_MODIFY = 0x66;    // app + constructed
-    static final int LDAP_REQ_ADD = 0x68;       // app + constructed
-    static final int LDAP_REQ_DELETE = 0x4a;    // app + primitive
-    static final int LDAP_REQ_MODRDN = 0x6c;    // app + constructed
-    static final int LDAP_REQ_COMPARE = 0x6e;   // app + constructed
-    static final int LDAP_REQ_ABANDON = 0x50;   // app + primitive
-    static final int LDAP_REQ_EXTENSION = 0x77; // app + constructed    (LDAPv3)
-
-    static final int LDAP_REP_BIND = 0x61;      // app + constructed | 1
-    static final int LDAP_REP_SEARCH = 0x64;    // app + constructed | 4
-    static final int LDAP_REP_SEARCH_REF = 0x73;// app + constructed    (LDAPv3)
-    static final int LDAP_REP_RESULT = 0x65;    // app + constructed | 5
-    static final int LDAP_REP_MODIFY = 0x67;    // app + constructed | 7
-    static final int LDAP_REP_ADD = 0x69;       // app + constructed | 9
-    static final int LDAP_REP_DELETE = 0x6b;    // app + primitive | b
-    static final int LDAP_REP_MODRDN = 0x6d;    // app + primitive | d
-    static final int LDAP_REP_COMPARE = 0x6f;   // app + primitive | f
-    static final int LDAP_REP_EXTENSION = 0x78; // app + constructed    (LDAPv3)
-
-    static final int LDAP_REP_REFERRAL = 0xa3;  // ctx + constructed    (LDAPv3)
-    static final int LDAP_REP_EXT_OID = 0x8a;   // ctx + primitive      (LDAPv3)
-    static final int LDAP_REP_EXT_VAL = 0x8b;   // ctx + primitive      (LDAPv3)
-
-    // LDAPv3 Controls
-
-    static final int LDAP_CONTROLS = 0xa0;      // ctx + constructed    (LDAPv3)
-    static final String LDAP_CONTROL_MANAGE_DSA_IT = "2.16.840.1.113730.3.4.2";
-    static final String LDAP_CONTROL_PREFERRED_LANG = "1.3.6.1.4.1.1466.20035";
-    static final String LDAP_CONTROL_PAGED_RESULTS = "1.2.840.113556.1.4.319";
-    static final String LDAP_CONTROL_SERVER_SORT_REQ = "1.2.840.113556.1.4.473";
-    static final String LDAP_CONTROL_SERVER_SORT_RES = "1.2.840.113556.1.4.474";
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // return codes
-    //
-    ////////////////////////////////////////////////////////////////////////////
-
-    static final int LDAP_SUCCESS = 0;
-    static final int LDAP_OPERATIONS_ERROR = 1;
-    static final int LDAP_PROTOCOL_ERROR = 2;
-    static final int LDAP_TIME_LIMIT_EXCEEDED = 3;
-    static final int LDAP_SIZE_LIMIT_EXCEEDED = 4;
-    static final int LDAP_COMPARE_FALSE = 5;
-    static final int LDAP_COMPARE_TRUE = 6;
-    static final int LDAP_AUTH_METHOD_NOT_SUPPORTED = 7;
-    static final int LDAP_STRONG_AUTH_REQUIRED = 8;
-    static final int LDAP_PARTIAL_RESULTS = 9;                  // Slapd
-    static final int LDAP_REFERRAL = 10;                        // LDAPv3
-    static final int LDAP_ADMIN_LIMIT_EXCEEDED = 11;            // LDAPv3
-    static final int LDAP_UNAVAILABLE_CRITICAL_EXTENSION = 12;  // LDAPv3
-    static final int LDAP_CONFIDENTIALITY_REQUIRED = 13;        // LDAPv3
-    static final int LDAP_SASL_BIND_IN_PROGRESS = 14;           // LDAPv3
-    static final int LDAP_NO_SUCH_ATTRIBUTE = 16;
-    static final int LDAP_UNDEFINED_ATTRIBUTE_TYPE = 17;
-    static final int LDAP_INAPPROPRIATE_MATCHING = 18;
-    static final int LDAP_CONSTRAINT_VIOLATION = 19;
-    static final int LDAP_ATTRIBUTE_OR_VALUE_EXISTS = 20;
-    static final int LDAP_INVALID_ATTRIBUTE_SYNTAX = 21;
-    static final int LDAP_NO_SUCH_OBJECT = 32;
-    static final int LDAP_ALIAS_PROBLEM = 33;
-    static final int LDAP_INVALID_DN_SYNTAX = 34;
-    static final int LDAP_IS_LEAF = 35;
-    static final int LDAP_ALIAS_DEREFERENCING_PROBLEM = 36;
-    static final int LDAP_INAPPROPRIATE_AUTHENTICATION = 48;
-    static final int LDAP_INVALID_CREDENTIALS = 49;
-    static final int LDAP_INSUFFICIENT_ACCESS_RIGHTS = 50;
-    static final int LDAP_BUSY = 51;
-    static final int LDAP_UNAVAILABLE = 52;
-    static final int LDAP_UNWILLING_TO_PERFORM = 53;
-    static final int LDAP_LOOP_DETECT = 54;
-    static final int LDAP_NAMING_VIOLATION = 64;
-    static final int LDAP_OBJECT_CLASS_VIOLATION = 65;
-    static final int LDAP_NOT_ALLOWED_ON_NON_LEAF = 66;
-    static final int LDAP_NOT_ALLOWED_ON_RDN = 67;
-    static final int LDAP_ENTRY_ALREADY_EXISTS = 68;
-    static final int LDAP_OBJECT_CLASS_MODS_PROHIBITED = 69;
-    static final int LDAP_AFFECTS_MULTIPLE_DSAS = 71;           // LDAPv3
-    static final int LDAP_OTHER = 80;
-
-    static final String[] ldap_error_message = {
-        "Success",                                      // 0
-        "Operations Error",                             // 1
-        "Protocol Error",                               // 2
-        "Timelimit Exceeded",                           // 3
-        "Sizelimit Exceeded",                           // 4
-        "Compare False",                                // 5
-        "Compare True",                                 // 6
-        "Authentication Method Not Supported",          // 7
-        "Strong Authentication Required",               // 8
-        null,
-        "Referral",                                     // 10
-        "Administrative Limit Exceeded",                // 11
-        "Unavailable Critical Extension",               // 12
-        "Confidentiality Required",                     // 13
-        "SASL Bind In Progress",                        // 14
-        null,
-        "No Such Attribute",                            // 16
-        "Undefined Attribute Type",                     // 17
-        "Inappropriate Matching",                       // 18
-        "Constraint Violation",                         // 19
-        "Attribute Or Value Exists",                    // 20
-        "Invalid Attribute Syntax",                     // 21
-        null,
-        null,
-        null,
-        null,
-        null,
-        null,
-        null,
-        null,
-        null,
-        null,
-        "No Such Object",                               // 32
-        "Alias Problem",                                // 33
-        "Invalid DN Syntax",                            // 34
-        null,
-        "Alias Dereferencing Problem",                  // 36
-        null,
-        null,
-        null,
-        null,
-        null,
-        null,
-        null,
-        null,
-        null,
-        null,
-        null,
-        "Inappropriate Authentication",                 // 48
-        "Invalid Credentials",                          // 49
-        "Insufficient Access Rights",                   // 50
-        "Busy",                                         // 51
-        "Unavailable",                                  // 52
-        "Unwilling To Perform",                         // 53
-        "Loop Detect",                                  // 54
-        null,
-        null,
-        null,
-        null,
-        null,
-        null,
-        null,
-        null,
-        null,
-        "Naming Violation",                             // 64
-        "Object Class Violation",                       // 65
-        "Not Allowed On Non-leaf",                      // 66
-        "Not Allowed On RDN",                           // 67
-        "Entry Already Exists",                         // 68
-        "Object Class Modifications Prohibited",        // 69
-        null,
-        "Affects Multiple DSAs",                        // 71
-        null,
-        null,
-        null,
-        null,
-        null,
-        null,
-        null,
-        null,
-        "Other",                                        // 80
-        null,
-        null,
-        null,
-        null,
-        null,
-        null,
-        null,
-        null,
-        null,
-        null
-    };
-
-
-    /*
-     * Generate an error message from the LDAP error code and error diagnostic.
-     * The message format is:
-     *
-     *     "[LDAP: error code <errorCode> - <errorMessage>]"
-     *
-     * where <errorCode> is a numeric error code
-     * and <errorMessage> is a textual description of the error (if available)
-     *
-     */
-    static String getErrorMessage(int errorCode, String errorMessage) {
-
-        String message = "[LDAP: error code " + errorCode;
-
-        if ((errorMessage != null) && (errorMessage.length() != 0)) {
-
-            // append error message from the server
-            message = message + " - " + errorMessage + "]";
-
-        } else {
-
-            // append built-in error message
-            try {
-                if (ldap_error_message[errorCode] != null) {
-                    message = message + " - " + ldap_error_message[errorCode] +
-                                "]";
-                }
-            } catch (ArrayIndexOutOfBoundsException ex) {
-                message = message + "]";
-            }
-        }
-        return message;
-    }
-
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Unsolicited notification support.
-    //
-    // An LdapClient maintains a list of LdapCtx that have registered
-    // for UnsolicitedNotifications. This is a list because a single
-    // LdapClient might be shared among multiple contexts.
-    //
-    // When addUnsolicited() is invoked, the LdapCtx is added to the list.
-    //
-    // When Connection receives an unsolicited notification (msgid == 0),
-    // it invokes LdapClient.processUnsolicited(). processUnsolicited()
-    // parses the Extended Response. If there are registered listeners,
-    // LdapClient creates an UnsolicitedNotification from the response
-    // and informs each LdapCtx to fire an event for the notification.
-    // If it is a DISCONNECT notification, the connection is closed and a
-    // NamingExceptionEvent is fired to the listeners.
-    //
-    // When the connection is closed out-of-band like this, the next
-    // time a method is invoked on LdapClient, an IOException is thrown.
-    //
-    // removeUnsolicited() is invoked to remove an LdapCtx from this client.
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    private Vector unsolicited = new Vector(3);
-    void addUnsolicited(LdapCtx ctx) {
-        if (debug > 0) {
-            System.err.println("LdapClient.addUnsolicited" + ctx);
-        }
-        unsolicited.addElement(ctx);
-    }
-
-    void removeUnsolicited(LdapCtx ctx) {
-        if (debug > 0) {
-            System.err.println("LdapClient.removeUnsolicited" + ctx);
-        }
-        synchronized (unsolicited) {
-            if (unsolicited.size() == 0) {
-                return;
-            }
-            unsolicited.removeElement(ctx);
-        }
-    }
-
-    // NOTE: Cannot be synchronized because this is called asynchronously
-    // by the reader thread in Connection. Instead, sync on 'unsolicited' Vector.
-    void processUnsolicited(BerDecoder ber) {
-        if (debug > 0) {
-            System.err.println("LdapClient.processUnsolicited");
-        }
-      synchronized (unsolicited) {
-        try {
-            // Parse the response
-            LdapResult res = new LdapResult();
-
-            ber.parseSeq(null); // init seq
-            ber.parseInt();             // msg id; should be 0; ignored
-            if (ber.parseByte() != LDAP_REP_EXTENSION) {
-                throw new IOException(
-                    "Unsolicited Notification must be an Extended Response");
-            }
-            ber.parseLength();
-            parseExtResponse(ber, res);
-
-            if (DISCONNECT_OID.equals(res.extensionId)) {
-                // force closing of connection
-                forceClose(pooled);
-            }
-
-            if (unsolicited.size() > 0) {
-                // Create an UnsolicitedNotification using the parsed data
-                // Need a 'ctx' object because we want to use the context's
-                // list of provider control factories.
-                UnsolicitedNotification notice = new UnsolicitedResponseImpl(
-                    res.extensionId,
-                    res.extensionValue,
-                    res.referrals,
-                    res.status,
-                    res.errorMessage,
-                    res.matchedDN,
-                    (res.resControls != null) ?
-            ((LdapCtx)unsolicited.elementAt(0)).convertControls(res.resControls) :
-                    null);
-
-                // Fire UnsolicitedNotification events to listeners
-                notifyUnsolicited(notice);
-
-                // If "disconnect" notification,
-                // notify unsolicited listeners via NamingException
-                if (DISCONNECT_OID.equals(res.extensionId)) {
-                    notifyUnsolicited(
-                        new CommunicationException("Connection closed"));
-                }
-            }
-        } catch (IOException e) {
-            if (unsolicited.size() == 0)
-                return;  // no one registered; ignore
-
-            NamingException ne = new CommunicationException(
-                "Problem parsing unsolicited notification");
-            ne.setRootCause(e);
-
-            notifyUnsolicited(ne);
-
-        } catch (NamingException e) {
-            notifyUnsolicited(e);
-        }
-      }
-    }
-
-
-    private void notifyUnsolicited(Object e) {
-        for (int i = 0; i < unsolicited.size(); i++) {
-            ((LdapCtx)unsolicited.elementAt(i)).fireUnsolicited(e);
-        }
-        if (e instanceof NamingException) {
-            unsolicited.setSize(0);  // no more listeners after exception
-        }
-    }
-
-    private void ensureOpen() throws IOException {
-        if (conn == null || !conn.useable) {
-            if (conn != null && conn.closureReason != null) {
-                throw conn.closureReason;
-            } else {
-                throw new IOException("connection closed");
-            }
-        }
-    }
-
-    // package private (used by LdapCtx)
-    static LdapClient getInstance(boolean usePool, String hostname, int port,
-        String factory, int connectTimeout, int readTimeout, OutputStream trace,
-        int version, String authMechanism, Control[] ctls, String protocol,
-        String user, Object passwd, Hashtable env) throws NamingException {
-
-        if (usePool) {
-            if (LdapPoolManager.isPoolingAllowed(factory, trace,
-                    authMechanism, protocol, env)) {
-                LdapClient answer = LdapPoolManager.getLdapClient(
-                        hostname, port, factory, connectTimeout, readTimeout,
-                        trace, version, authMechanism, ctls, protocol, user,
-                        passwd, env);
-                answer.referenceCount = 1;   // always one when starting out
-                return answer;
-            }
-        }
-        return new LdapClient(hostname, port, factory, connectTimeout,
-                                        readTimeout, trace, null);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/ldap/LdapClientFactory.java b/ojluni/src/main/java/com/sun/jndi/ldap/LdapClientFactory.java
deleted file mode 100755
index 1775571..0000000
--- a/ojluni/src/main/java/com/sun/jndi/ldap/LdapClientFactory.java
+++ /dev/null
@@ -1,71 +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.
- */
-
-package com.sun.jndi.ldap;
-
-import java.io.OutputStream;
-import javax.naming.InterruptedNamingException;
-import javax.naming.CommunicationException;
-import javax.naming.NamingException;
-
-import com.sun.jndi.ldap.pool.PoolCallback;
-import com.sun.jndi.ldap.pool.PooledConnection;
-import com.sun.jndi.ldap.pool.PooledConnectionFactory;
-
-/**
- * Creates an LdapClient. Encapsulates the parameters required to create
- * an LdapClient and provides methods for returning appropriate exceptions
- * to throw when acquiring a pooled LdapClient fails.
- *
- * @author Rosanna Lee
- */
-final class LdapClientFactory implements PooledConnectionFactory {
-    final private String host;
-    final private int port;
-    final private String socketFactory;
-    final private int connTimeout;
-    final private int readTimeout;
-    final private OutputStream trace;
-
-    LdapClientFactory(String host, int port, String socketFactory,
-        int connTimeout, int readTimeout, OutputStream trace) {
-        this.host = host;
-        this.port = port;
-        this.socketFactory = socketFactory;
-        this.connTimeout = connTimeout;
-        this.readTimeout = readTimeout;
-        this.trace = trace;
-    }
-
-    public PooledConnection createPooledConnection(PoolCallback pcb)
-        throws NamingException {
-        return new LdapClient(host, port, socketFactory,
-                connTimeout, readTimeout, trace, pcb);
-    }
-
-    public String toString() {
-        return host + ":" + port;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/ldap/LdapCtx.java b/ojluni/src/main/java/com/sun/jndi/ldap/LdapCtx.java
deleted file mode 100755
index 68b272e..0000000
--- a/ojluni/src/main/java/com/sun/jndi/ldap/LdapCtx.java
+++ /dev/null
@@ -1,3541 +0,0 @@
-/*
- * Copyright (c) 1999, 2011, 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.jndi.ldap;
-
-import javax.naming.*;
-import javax.naming.directory.*;
-import javax.naming.spi.*;
-import javax.naming.event.*;
-import javax.naming.ldap.*;
-import javax.naming.ldap.LdapName;
-import javax.naming.ldap.Rdn;
-
-import java.util.Vector;
-import java.util.Hashtable;
-import java.util.List;
-import java.util.StringTokenizer;
-import java.util.Enumeration;
-
-import java.io.IOException;
-import java.io.OutputStream;
-
-import com.sun.jndi.toolkit.ctx.*;
-import com.sun.jndi.toolkit.dir.HierMemDirCtx;
-import com.sun.jndi.toolkit.dir.SearchFilter;
-import com.sun.jndi.ldap.ext.StartTlsResponseImpl;
-
-/**
- * The LDAP context implementation.
- *
- * Implementation is not thread-safe. Caller must sync as per JNDI spec.
- * Members that are used directly or indirectly by internal worker threads
- * (Connection, EventQueue, NamingEventNotifier) must be thread-safe.
- * Connection - calls LdapClient.processUnsolicited(), which in turn calls
- *   LdapCtx.convertControls() and LdapCtx.fireUnsolicited().
- *   convertControls() - no sync; reads envprops and 'this'
- *   fireUnsolicited() - sync on eventSupport for all references to 'unsolicited'
- *      (even those in other methods);  don't sync on LdapCtx in case caller
- *      is already sync'ing on it - this would prevent Unsol events from firing
- *      and the Connection thread to block (thus preventing any other data
- *      from being read from the connection)
- *      References to 'eventSupport' need not be sync'ed because these
- *      methods can only be called after eventSupport has been set first
- *      (via addNamingListener()).
- * EventQueue - no direct or indirect calls to LdapCtx
- * NamingEventNotifier - calls newInstance() to get instance for run() to use;
- *      no sync needed for methods invoked on new instance;
- *
- * LdapAttribute links to LdapCtx in order to process getAttributeDefinition()
- * and getAttributeSyntaxDefinition() calls. It invokes LdapCtx.getSchema(),
- * which uses schemaTrees (a Hashtable - already sync). Potential conflict
- * of duplicating construction of tree for same subschemasubentry
- * but no inconsistency problems.
- *
- * NamingEnumerations link to LdapCtx for the following:
- * 1. increment/decrement enum count so that ctx doesn't close the
- *    underlying connection
- * 2. LdapClient handle to get next batch of results
- * 3. Sets LdapCtx's response controls
- * 4. Process return code
- * 5. For narrowing response controls (using ctx's factories)
- * Since processing of NamingEnumeration by client is treated the same as method
- * invocation on LdapCtx, caller is responsible for locking.
- *
- * @author Vincent Ryan
- * @author Rosanna Lee
- */
-
-final public class LdapCtx extends ComponentDirContext
-    implements EventDirContext, LdapContext {
-
-    /*
-     * Used to store arguments to the search method.
-     */
-    final static class SearchArgs {
-        Name name;
-        String filter;
-        SearchControls cons;
-        String[] reqAttrs; // those attributes originally requested
-
-        SearchArgs(Name name, String filter, SearchControls cons, String[] ra) {
-            this.name = name;
-            this.filter = filter;
-            this.cons = cons;
-            this.reqAttrs = ra;
-        }
-    }
-
-    private static final boolean debug = false;
-
-    private static final boolean HARD_CLOSE = true;
-    private static final boolean SOFT_CLOSE = false;
-
-    // -----------------  Constants  -----------------
-
-    public static final int DEFAULT_PORT = 389;
-    public static final int DEFAULT_SSL_PORT = 636;
-    public static final String DEFAULT_HOST = "localhost";
-
-    private static final boolean DEFAULT_DELETE_RDN = true;
-    private static final boolean DEFAULT_TYPES_ONLY = false;
-    private static final int DEFAULT_DEREF_ALIASES = 3; // always deref
-    private static final int DEFAULT_LDAP_VERSION = LdapClient.LDAP_VERSION3_VERSION2;
-    private static final int DEFAULT_BATCH_SIZE = 1;
-    private static final int DEFAULT_REFERRAL_MODE = LdapClient.LDAP_REF_IGNORE;
-    private static final char DEFAULT_REF_SEPARATOR = '#';
-
-        // Used by LdapPoolManager
-    static final String DEFAULT_SSL_FACTORY =
-        "javax.net.ssl.SSLSocketFactory";       // use Sun's SSL
-    private static final int DEFAULT_REFERRAL_LIMIT = 10;
-    private static final String STARTTLS_REQ_OID = "1.3.6.1.4.1.1466.20037";
-
-    // schema operational and user attributes
-    private static final String[] SCHEMA_ATTRIBUTES =
-        { "objectClasses", "attributeTypes", "matchingRules", "ldapSyntaxes" };
-
-    // --------------- Environment property names ----------
-
-    // LDAP protocol version: "2", "3"
-    private static final String VERSION = "java.naming.ldap.version";
-
-    // Binary-valued attributes. Space separated string of attribute names.
-    private static final String BINARY_ATTRIBUTES =
-                                        "java.naming.ldap.attributes.binary";
-
-    // Delete old RDN during modifyDN: "true", "false"
-    private static final String DELETE_RDN = "java.naming.ldap.deleteRDN";
-
-    // De-reference aliases: "never", "searching", "finding", "always"
-    private static final String DEREF_ALIASES = "java.naming.ldap.derefAliases";
-
-    // Return only attribute types (no values)
-    private static final String TYPES_ONLY = "java.naming.ldap.typesOnly";
-
-    // Separator character for encoding Reference's RefAddrs; default is '#'
-    private static final String REF_SEPARATOR = "java.naming.ldap.ref.separator";
-
-    // Socket factory
-    private static final String SOCKET_FACTORY = "java.naming.ldap.factory.socket";
-
-    // Bind Controls (used by LdapReferralException)
-    static final String BIND_CONTROLS = "java.naming.ldap.control.connect";
-
-    private static final String REFERRAL_LIMIT =
-        "java.naming.ldap.referral.limit";
-
-    // trace BER (java.io.OutputStream)
-    private static final String TRACE_BER = "com.sun.jndi.ldap.trace.ber";
-
-    // Get around Netscape Schema Bugs
-    private static final String NETSCAPE_SCHEMA_BUG =
-        "com.sun.jndi.ldap.netscape.schemaBugs";
-    // deprecated
-    private static final String OLD_NETSCAPE_SCHEMA_BUG =
-        "com.sun.naming.netscape.schemaBugs";   // for backward compatability
-
-    // Timeout for socket connect
-    private static final String CONNECT_TIMEOUT =
-        "com.sun.jndi.ldap.connect.timeout";
-
-     // Timeout for reading responses
-    private static final String READ_TIMEOUT =
-        "com.sun.jndi.ldap.read.timeout";
-
-    // Environment property for connection pooling
-    private static final String ENABLE_POOL = "com.sun.jndi.ldap.connect.pool";
-
-    // Environment property for the domain name (derived from this context's DN)
-    private static final String DOMAIN_NAME = "com.sun.jndi.ldap.domainname";
-
-    // Block until the first search reply is received
-    private static final String WAIT_FOR_REPLY =
-        "com.sun.jndi.ldap.search.waitForReply";
-
-    // Size of the queue of unprocessed search replies
-    private static final String REPLY_QUEUE_SIZE =
-        "com.sun.jndi.ldap.search.replyQueueSize";
-
-    // ----------------- Fields that don't change -----------------------
-    private static final NameParser parser = new LdapNameParser();
-
-    // controls that Provider needs
-    private static final ControlFactory myResponseControlFactory =
-        new DefaultResponseControlFactory();
-    private static final Control manageReferralControl =
-        new ManageReferralControl(false);
-
-    private static final HierMemDirCtx EMPTY_SCHEMA = new HierMemDirCtx();
-    static {
-        EMPTY_SCHEMA.setReadOnly(
-            new SchemaViolationException("Cannot update schema object"));
-    }
-
-    // ------------ Package private instance variables ----------------
-    // Cannot be private; used by enums
-
-        // ------- Inherited by derived context instances
-
-    int port_number;                    // port number of server
-    String hostname = null;             // host name of server (no brackets
-                                        //   for IPv6 literals)
-    LdapClient clnt = null;             // connection handle
-    Hashtable envprops = null;          // environment properties of context
-    int handleReferrals = DEFAULT_REFERRAL_MODE; // how referral is handled
-    boolean hasLdapsScheme = false;     // true if the context was created
-                                        //  using an LDAPS URL.
-
-        // ------- Not inherited by derived context instances
-
-    String currentDN;                   // DN of this context
-    Name currentParsedDN;               // DN of this context
-    Vector respCtls = null;             // Response controls read
-    Control[] reqCtls = null;           // Controls to be sent with each request
-
-
-    // ------------- Private instance variables ------------------------
-
-        // ------- Inherited by derived context instances
-
-    private OutputStream trace = null;  // output stream for BER debug output
-    private boolean netscapeSchemaBug = false;       // workaround
-    private Control[] bindCtls = null;  // Controls to be sent with LDAP "bind"
-    private int referralHopLimit = DEFAULT_REFERRAL_LIMIT;  // max referral
-    private Hashtable schemaTrees = null; // schema root of this context
-    private int batchSize = DEFAULT_BATCH_SIZE;      // batch size for search results
-    private boolean deleteRDN = DEFAULT_DELETE_RDN;  // delete the old RDN when modifying DN
-    private boolean typesOnly = DEFAULT_TYPES_ONLY;  // return attribute types (no values)
-    private int derefAliases = DEFAULT_DEREF_ALIASES;// de-reference alias entries during searching
-    private char addrEncodingSeparator = DEFAULT_REF_SEPARATOR;  // encoding RefAddr
-
-    private Hashtable binaryAttrs = null;    // attr values returned as byte[]
-    private int connectTimeout = -1;         // no timeout value
-    private int readTimeout = -1;            // no timeout value
-    private boolean waitForReply = true;     // wait for search response
-    private int replyQueueSize  = -1;        // unlimited queue size
-    private boolean useSsl = false;          // true if SSL protocol is active
-    private boolean useDefaultPortNumber = false; // no port number was supplied
-
-        // ------- Not inherited by derived context instances
-
-    // True if this context was created by another LdapCtx.
-    private boolean parentIsLdapCtx = false; // see composeName()
-
-    private int hopCount = 1;                // current referral hop count
-    private String url = null;               // URL of context; see getURL()
-    private EventSupport eventSupport;       // Event support helper for this ctx
-    private boolean unsolicited = false;     // if there unsolicited listeners
-    private boolean sharable = true;         // can share connection with other ctx
-
-    // -------------- Constructors  -----------------------------------
-
-    public LdapCtx(String dn, String host, int port_number, Hashtable props,
-            boolean useSsl) throws NamingException {
-
-        this.useSsl = this.hasLdapsScheme = useSsl;
-
-        if (props != null) {
-            envprops = (Hashtable) props.clone();
-
-            // SSL env prop overrides the useSsl argument
-            if ("ssl".equals(envprops.get(Context.SECURITY_PROTOCOL))) {
-                this.useSsl = true;
-            }
-
-            // %%% These are only examined when the context is created
-            // %%% because they are only for debugging or workaround purposes.
-            trace = (OutputStream)envprops.get(TRACE_BER);
-
-            if (props.get(NETSCAPE_SCHEMA_BUG) != null ||
-                props.get(OLD_NETSCAPE_SCHEMA_BUG) != null) {
-                netscapeSchemaBug = true;
-            }
-        }
-
-        currentDN = (dn != null) ? dn : "";
-        currentParsedDN = parser.parse(currentDN);
-
-        hostname = (host != null && host.length() > 0) ? host : DEFAULT_HOST;
-        if (hostname.charAt(0) == '[') {
-            hostname = hostname.substring(1, hostname.length() - 1);
-        }
-
-        if (port_number > 0) {
-            this.port_number = port_number;
-        } else {
-            this.port_number = this.useSsl ? DEFAULT_SSL_PORT : DEFAULT_PORT;
-            this.useDefaultPortNumber = true;
-        }
-
-        schemaTrees = new Hashtable(11, 0.75f);
-        initEnv();
-        try {
-            connect(false);
-        } catch (NamingException e) {
-            try {
-                close();
-            } catch (Exception e2) {
-                // Nothing
-            }
-            throw e;
-        }
-    }
-
-    LdapCtx(LdapCtx existing, String newDN) throws NamingException {
-        useSsl = existing.useSsl;
-        hasLdapsScheme = existing.hasLdapsScheme;
-        useDefaultPortNumber = existing.useDefaultPortNumber;
-
-        hostname = existing.hostname;
-        port_number = existing.port_number;
-        currentDN = newDN;
-        if (existing.currentDN == currentDN) {
-            currentParsedDN = existing.currentParsedDN;
-        } else {
-            currentParsedDN = parser.parse(currentDN);
-        }
-
-        envprops = existing.envprops;
-        schemaTrees = existing.schemaTrees;
-
-        clnt = existing.clnt;
-        clnt.incRefCount();
-
-        parentIsLdapCtx = ((newDN == null || newDN.equals(existing.currentDN))
-                           ? existing.parentIsLdapCtx
-                           : true);
-
-        // inherit these debugging/workaround flags
-        trace = existing.trace;
-        netscapeSchemaBug = existing.netscapeSchemaBug;
-
-        initEnv();
-    }
-
-    public LdapContext newInstance(Control[] reqCtls) throws NamingException {
-
-        LdapContext clone = new LdapCtx(this, currentDN);
-
-        // Connection controls are inherited from environment
-
-        // Set clone's request controls
-        // setRequestControls() will clone reqCtls
-        clone.setRequestControls(reqCtls);
-        return clone;
-    }
-
-    // --------------- Namespace Updates ---------------------
-    // -- bind/rebind/unbind
-    // -- rename
-    // -- createSubcontext/destroySubcontext
-
-    protected void c_bind(Name name, Object obj, Continuation cont)
-            throws NamingException {
-        c_bind(name, obj, null, cont);
-    }
-
-    /*
-     * attrs == null
-     *      if obj is DirContext, attrs = obj.getAttributes()
-     * if attrs == null && obj == null
-     *      disallow (cannot determine objectclass to use)
-     * if obj == null
-     *      just create entry using attrs
-     * else
-     *      objAttrs = create attributes for representing obj
-     *      attrs += objAttrs
-     *      create entry using attrs
-     */
-    protected void c_bind(Name name, Object obj, Attributes attrs,
-                          Continuation cont)
-            throws NamingException {
-
-        cont.setError(this, name);
-
-        Attributes inputAttrs = attrs; // Attributes supplied by caller
-        try {
-            ensureOpen();
-
-            if (obj == null) {
-                if (attrs == null) {
-                    throw new IllegalArgumentException(
-                        "cannot bind null object with no attributes");
-                }
-            } else {
-                attrs = Obj.determineBindAttrs(addrEncodingSeparator, obj, attrs,
-                    false, name, this, envprops); // not cloned
-            }
-
-            String newDN = fullyQualifiedName(name);
-            attrs = addRdnAttributes(newDN, attrs, inputAttrs != attrs);
-            LdapEntry entry = new LdapEntry(newDN, attrs);
-
-            LdapResult answer = clnt.add(entry, reqCtls);
-            respCtls = answer.resControls; // retrieve response controls
-
-            if (answer.status != LdapClient.LDAP_SUCCESS) {
-                processReturnCode(answer, name);
-            }
-
-        } catch (LdapReferralException e) {
-            if (handleReferrals == LdapClient.LDAP_REF_THROW)
-                throw cont.fillInException(e);
-
-            // process the referrals sequentially
-            while (true) {
-
-                LdapReferralContext refCtx =
-                    (LdapReferralContext)e.getReferralContext(envprops, bindCtls);
-
-                // repeat the original operation at the new context
-                try {
-
-                    refCtx.bind(name, obj, inputAttrs);
-                    return;
-
-                } catch (LdapReferralException re) {
-                    e = re;
-                    continue;
-
-                } finally {
-                    // Make sure we close referral context
-                    refCtx.close();
-                }
-            }
-
-        } catch (IOException e) {
-            NamingException e2 = new CommunicationException(e.getMessage());
-            e2.setRootCause(e);
-            throw cont.fillInException(e2);
-
-        } catch (NamingException e) {
-            throw cont.fillInException(e);
-        }
-    }
-
-    protected void c_rebind(Name name, Object obj, Continuation cont)
-            throws NamingException {
-        c_rebind(name, obj, null, cont);
-    }
-
-
-    /*
-     * attrs == null
-     *    if obj is DirContext, attrs = obj.getAttributes().
-     * if attrs == null
-     *    leave any existing attributes alone
-     *    (set attrs = {objectclass=top} if object doesn't exist)
-     * else
-     *    replace all existing attributes with attrs
-     * if obj == null
-     *      just create entry using attrs
-     * else
-     *      objAttrs = create attributes for representing obj
-     *      attrs += objAttrs
-     *      create entry using attrs
-     */
-    protected void c_rebind(Name name, Object obj, Attributes attrs,
-        Continuation cont) throws NamingException {
-
-        cont.setError(this, name);
-
-        Attributes inputAttrs = attrs;
-
-        try {
-            Attributes origAttrs = null;
-
-            // Check if name is bound
-            try {
-                origAttrs = c_getAttributes(name, null, cont);
-            } catch (NameNotFoundException e) {}
-
-            // Name not bound, just add it
-            if (origAttrs == null) {
-                c_bind(name, obj, attrs, cont);
-                return;
-            }
-
-            // there's an object there already, need to figure out
-            // what to do about its attributes
-
-            if (attrs == null && obj instanceof DirContext) {
-                attrs = ((DirContext)obj).getAttributes("");
-            }
-            Attributes keepAttrs = (Attributes)origAttrs.clone();
-
-            if (attrs == null) {
-                // we're not changing any attrs, leave old attributes alone
-
-                // Remove Java-related object classes from objectclass attribute
-                Attribute origObjectClass =
-                    origAttrs.get(Obj.JAVA_ATTRIBUTES[Obj.OBJECT_CLASS]);
-
-                if (origObjectClass != null) {
-                    // clone so that keepAttrs is not affected
-                    origObjectClass = (Attribute)origObjectClass.clone();
-                    for (int i = 0; i < Obj.JAVA_OBJECT_CLASSES.length; i++) {
-                        origObjectClass.remove(Obj.JAVA_OBJECT_CLASSES_LOWER[i]);
-                        origObjectClass.remove(Obj.JAVA_OBJECT_CLASSES[i]);
-                    }
-                    // update;
-                    origAttrs.put(origObjectClass);
-                }
-
-                // remove all Java-related attributes except objectclass
-                for (int i = 1; i < Obj.JAVA_ATTRIBUTES.length; i++) {
-                    origAttrs.remove(Obj.JAVA_ATTRIBUTES[i]);
-                }
-
-                attrs = origAttrs;
-            }
-            if (obj != null) {
-                attrs =
-                    Obj.determineBindAttrs(addrEncodingSeparator, obj, attrs,
-                        inputAttrs != attrs, name, this, envprops);
-            }
-
-            String newDN = fullyQualifiedName(name);
-            // remove entry
-            LdapResult answer = clnt.delete(newDN, reqCtls);
-            respCtls = answer.resControls; // retrieve response controls
-
-            if (answer.status != LdapClient.LDAP_SUCCESS) {
-                processReturnCode(answer, name);
-                return;
-            }
-
-            Exception addEx = null;
-            try {
-                attrs = addRdnAttributes(newDN, attrs, inputAttrs != attrs);
-
-                // add it back using updated attrs
-                LdapEntry entry = new LdapEntry(newDN, attrs);
-                answer = clnt.add(entry, reqCtls);
-                if (answer.resControls != null) {
-                    respCtls = appendVector(respCtls, answer.resControls);
-                }
-            } catch (NamingException ae) {
-                addEx = ae;
-            } catch (IOException ae) {
-                addEx = ae;
-            }
-
-            if ((addEx != null && !(addEx instanceof LdapReferralException)) ||
-                answer.status != LdapClient.LDAP_SUCCESS) {
-                // Attempt to restore old entry
-                LdapResult answer2 =
-                    clnt.add(new LdapEntry(newDN, keepAttrs), reqCtls);
-                if (answer2.resControls != null) {
-                    respCtls = appendVector(respCtls, answer2.resControls);
-                }
-
-                if (addEx == null) {
-                    processReturnCode(answer, name);
-                }
-            }
-
-            // Rethrow exception
-            if (addEx instanceof NamingException) {
-                throw (NamingException)addEx;
-            } else if (addEx instanceof IOException) {
-                throw (IOException)addEx;
-            }
-
-        } catch (LdapReferralException e) {
-            if (handleReferrals == LdapClient.LDAP_REF_THROW)
-                throw cont.fillInException(e);
-
-            // process the referrals sequentially
-            while (true) {
-
-                LdapReferralContext refCtx =
-                    (LdapReferralContext)e.getReferralContext(envprops, bindCtls);
-
-                // repeat the original operation at the new context
-                try {
-
-                    refCtx.rebind(name, obj, inputAttrs);
-                    return;
-
-                } catch (LdapReferralException re) {
-                    e = re;
-                    continue;
-
-                } finally {
-                    // Make sure we close referral context
-                    refCtx.close();
-                }
-            }
-
-        } catch (IOException e) {
-            NamingException e2 = new CommunicationException(e.getMessage());
-            e2.setRootCause(e);
-            throw cont.fillInException(e2);
-
-        } catch (NamingException e) {
-            throw cont.fillInException(e);
-        }
-    }
-
-    protected void c_unbind(Name name, Continuation cont)
-            throws NamingException {
-        cont.setError(this, name);
-
-        try {
-            ensureOpen();
-
-            String fname = fullyQualifiedName(name);
-            LdapResult answer = clnt.delete(fname, reqCtls);
-            respCtls = answer.resControls; // retrieve response controls
-
-            adjustDeleteStatus(fname, answer);
-
-            if (answer.status != LdapClient.LDAP_SUCCESS) {
-                processReturnCode(answer, name);
-            }
-
-        } catch (LdapReferralException e) {
-            if (handleReferrals == LdapClient.LDAP_REF_THROW)
-                throw cont.fillInException(e);
-
-            // process the referrals sequentially
-            while (true) {
-
-                LdapReferralContext refCtx =
-                    (LdapReferralContext)e.getReferralContext(envprops, bindCtls);
-
-                // repeat the original operation at the new context
-                try {
-
-                    refCtx.unbind(name);
-                    return;
-
-                } catch (LdapReferralException re) {
-                    e = re;
-                    continue;
-
-                } finally {
-                    // Make sure we close referral context
-                    refCtx.close();
-                }
-            }
-
-        } catch (IOException e) {
-            NamingException e2 = new CommunicationException(e.getMessage());
-            e2.setRootCause(e);
-            throw cont.fillInException(e2);
-
-        } catch (NamingException e) {
-            throw cont.fillInException(e);
-        }
-    }
-
-    protected void c_rename(Name oldName, Name newName, Continuation cont)
-            throws NamingException
-    {
-        Name oldParsed, newParsed;
-        Name oldParent, newParent;
-        String newRDN = null;
-        String newSuperior = null;
-
-        // assert (oldName instanceOf CompositeName);
-
-        cont.setError(this, oldName);
-
-        try {
-            ensureOpen();
-
-            // permit oldName to be empty (for processing referral contexts)
-            if (oldName.isEmpty()) {
-                oldParent = parser.parse("");
-            } else {
-                oldParsed = parser.parse(oldName.get(0)); // extract DN & parse
-                oldParent = oldParsed.getPrefix(oldParsed.size() - 1);
-            }
-
-            if (newName instanceof CompositeName) {
-                newParsed = parser.parse(newName.get(0)); // extract DN & parse
-            } else {
-                newParsed = newName; // CompoundName/LdapName is already parsed
-            }
-            newParent = newParsed.getPrefix(newParsed.size() - 1);
-
-            if(!oldParent.equals(newParent)) {
-                if (!clnt.isLdapv3) {
-                    throw new InvalidNameException(
-                                  "LDAPv2 doesn't support changing " +
-                                  "the parent as a result of a rename");
-                } else {
-                    newSuperior = fullyQualifiedName(newParent.toString());
-                }
-            }
-
-            newRDN = newParsed.get(newParsed.size() - 1);
-
-            LdapResult answer = clnt.moddn(fullyQualifiedName(oldName),
-                                    newRDN,
-                                    deleteRDN,
-                                    newSuperior,
-                                    reqCtls);
-            respCtls = answer.resControls; // retrieve response controls
-
-            if (answer.status != LdapClient.LDAP_SUCCESS) {
-                processReturnCode(answer, oldName);
-            }
-
-        } catch (LdapReferralException e) {
-
-            // Record the new RDN (for use after the referral is followed).
-            e.setNewRdn(newRDN);
-
-            // Cannot continue when a referral has been received and a
-            // newSuperior name was supplied (because the newSuperior is
-            // relative to a naming context BEFORE the referral is followed).
-            if (newSuperior != null) {
-                PartialResultException pre = new PartialResultException(
-                    "Cannot continue referral processing when newSuperior is " +
-                    "nonempty: " + newSuperior);
-                pre.setRootCause(cont.fillInException(e));
-                throw cont.fillInException(pre);
-            }
-
-            if (handleReferrals == LdapClient.LDAP_REF_THROW)
-                throw cont.fillInException(e);
-
-            // process the referrals sequentially
-            while (true) {
-
-                LdapReferralContext refCtx =
-                    (LdapReferralContext)e.getReferralContext(envprops, bindCtls);
-
-                // repeat the original operation at the new context
-                try {
-
-                    refCtx.rename(oldName, newName);
-                    return;
-
-                } catch (LdapReferralException re) {
-                    e = re;
-                    continue;
-
-                } finally {
-                    // Make sure we close referral context
-                    refCtx.close();
-                }
-            }
-
-        } catch (IOException e) {
-            NamingException e2 = new CommunicationException(e.getMessage());
-            e2.setRootCause(e);
-            throw cont.fillInException(e2);
-
-        } catch (NamingException e) {
-            throw cont.fillInException(e);
-        }
-    }
-
-    protected Context c_createSubcontext(Name name, Continuation cont)
-            throws NamingException {
-        return c_createSubcontext(name, null, cont);
-    }
-
-    protected DirContext c_createSubcontext(Name name, Attributes attrs,
-                                            Continuation cont)
-            throws NamingException {
-        cont.setError(this, name);
-
-        Attributes inputAttrs = attrs;
-        try {
-            ensureOpen();
-            if (attrs == null) {
-                  // add structural objectclass; name needs to have "cn"
-                  Attribute oc = new BasicAttribute(
-                      Obj.JAVA_ATTRIBUTES[Obj.OBJECT_CLASS],
-                      Obj.JAVA_OBJECT_CLASSES[Obj.STRUCTURAL]);
-                  oc.add("top");
-                  attrs = new BasicAttributes(true); // case ignore
-                  attrs.put(oc);
-            }
-            String newDN = fullyQualifiedName(name);
-            attrs = addRdnAttributes(newDN, attrs, inputAttrs != attrs);
-
-            LdapEntry entry = new LdapEntry(newDN, attrs);
-
-            LdapResult answer = clnt.add(entry, reqCtls);
-            respCtls = answer.resControls; // retrieve response controls
-
-            if (answer.status != LdapClient.LDAP_SUCCESS) {
-                processReturnCode(answer, name);
-                return null;
-            }
-
-            // creation successful, get back live object
-            return new LdapCtx(this, newDN);
-
-        } catch (LdapReferralException e) {
-            if (handleReferrals == LdapClient.LDAP_REF_THROW)
-                throw cont.fillInException(e);
-
-            // process the referrals sequentially
-            while (true) {
-
-                LdapReferralContext refCtx =
-                    (LdapReferralContext)e.getReferralContext(envprops, bindCtls);
-
-                // repeat the original operation at the new context
-                try {
-
-                    return refCtx.createSubcontext(name, inputAttrs);
-
-                } catch (LdapReferralException re) {
-                    e = re;
-                    continue;
-
-                } finally {
-                    // Make sure we close referral context
-                    refCtx.close();
-                }
-            }
-
-        } catch (IOException e) {
-            NamingException e2 = new CommunicationException(e.getMessage());
-            e2.setRootCause(e);
-            throw cont.fillInException(e2);
-
-        } catch (NamingException e) {
-            throw cont.fillInException(e);
-        }
-    }
-
-    protected void c_destroySubcontext(Name name, Continuation cont)
-        throws NamingException {
-        cont.setError(this, name);
-
-        try {
-            ensureOpen();
-
-            String fname = fullyQualifiedName(name);
-            LdapResult answer = clnt.delete(fname, reqCtls);
-            respCtls = answer.resControls; // retrieve response controls
-
-            adjustDeleteStatus(fname, answer);
-
-            if (answer.status != LdapClient.LDAP_SUCCESS) {
-                processReturnCode(answer, name);
-            }
-
-        } catch (LdapReferralException e) {
-            if (handleReferrals == LdapClient.LDAP_REF_THROW)
-                throw cont.fillInException(e);
-
-            // process the referrals sequentially
-            while (true) {
-
-                LdapReferralContext refCtx =
-                    (LdapReferralContext)e.getReferralContext(envprops, bindCtls);
-
-                // repeat the original operation at the new context
-                try {
-
-                    refCtx.destroySubcontext(name);
-                    return;
-                } catch (LdapReferralException re) {
-                    e = re;
-                    continue;
-                } finally {
-                    // Make sure we close referral context
-                    refCtx.close();
-                }
-            }
-        } catch (IOException e) {
-            NamingException e2 = new CommunicationException(e.getMessage());
-            e2.setRootCause(e);
-            throw cont.fillInException(e2);
-        } catch (NamingException e) {
-            throw cont.fillInException(e);
-        }
-    }
-
-    /**
-     * Adds attributes from RDN to attrs if not already present.
-     * Note that if attrs already contains an attribute by the same name,
-     * or if the distinguished name is empty, then leave attrs unchanged.
-     *
-     * @param dn The non-null DN of the entry to add
-     * @param attrs The non-null attributes of entry to add
-     * @param directUpdate Whether attrs can be updated directly
-     * @returns Non-null attributes with attributes from the RDN added
-     */
-    private static Attributes addRdnAttributes(String dn, Attributes attrs,
-        boolean directUpdate) throws NamingException {
-
-            // Handle the empty name
-            if (dn.equals("")) {
-                return attrs;
-            }
-
-            // Parse string name into list of RDNs
-            //List<Rdn> rdnList = (new LdapName(dn)).rdns();
-            List rdnList = (new LdapName(dn)).getRdns();
-
-            // Get leaf RDN
-            //Rdn rdn = rdnList.get(rdnList.size() - 1);
-            Rdn rdn = (Rdn) rdnList.get(rdnList.size() - 1);
-            Attributes nameAttrs = rdn.toAttributes();
-
-            // Add attributes of RDN to attrs if not already there
-            NamingEnumeration enum_ = nameAttrs.getAll();
-            Attribute nameAttr;
-            while (enum_.hasMore()) {
-                nameAttr = (Attribute) enum_.next();
-
-                // If attrs already has the attribute, don't change or add to it
-                if (attrs.get(nameAttr.getID()) ==  null) {
-
-                    /**
-                     * When attrs.isCaseIgnored() is false, attrs.get() will
-                     * return null when the case mis-matches for otherwise
-                     * equal attrIDs.
-                     * As the attrIDs' case is irrelevant for LDAP, ignore
-                     * the case of attrIDs even when attrs.isCaseIgnored() is
-                     * false. This is done by explicitly comparing the elements in
-                     * the enumeration of IDs with their case ignored.
-                     */
-                    if (!attrs.isCaseIgnored() &&
-                            containsIgnoreCase(attrs.getIDs(), nameAttr.getID())) {
-                        continue;
-                    }
-
-                    if (!directUpdate) {
-                        attrs = (Attributes)attrs.clone();
-                        directUpdate = true;
-                    }
-                    attrs.put(nameAttr);
-                }
-            }
-
-            return attrs;
-    }
-
-
-    private static boolean containsIgnoreCase(NamingEnumeration enumStr,
-                                String str) throws NamingException {
-        String strEntry;
-
-        while (enumStr.hasMore()) {
-             strEntry = (String) enumStr.next();
-             if (strEntry.equalsIgnoreCase(str)) {
-                return true;
-             }
-        }
-        return false;
-    }
-
-
-    private void adjustDeleteStatus(String fname, LdapResult answer) {
-        if (answer.status == LdapClient.LDAP_NO_SUCH_OBJECT &&
-            answer.matchedDN != null) {
-            try {
-                // %%% RL: are there any implications for referrals?
-
-                Name orig = parser.parse(fname);
-                Name matched = parser.parse(answer.matchedDN);
-                if ((orig.size() - matched.size()) == 1)
-                    answer.status = LdapClient.LDAP_SUCCESS;
-            } catch (NamingException e) {}
-        }
-    }
-
-    /*
-     * Append the the second Vector onto the first Vector
-     * (v2 must be non-null)
-     */
-    private static Vector appendVector(Vector v1, Vector v2) {
-        if (v1 == null) {
-            v1 = v2;
-        } else {
-            for (int i = 0; i < v2.size(); i++) {
-                v1.addElement(v2.elementAt(i));
-            }
-        }
-        return v1;
-    }
-
-    // ------------- Lookups and Browsing -------------------------
-    // lookup/lookupLink
-    // list/listBindings
-
-    protected Object c_lookupLink(Name name, Continuation cont)
-            throws NamingException {
-        return c_lookup(name, cont);
-    }
-
-    protected Object c_lookup(Name name, Continuation cont)
-            throws NamingException {
-        cont.setError(this, name);
-        Object obj = null;
-        Attributes attrs;
-
-        try {
-            SearchControls cons = new SearchControls();
-            cons.setSearchScope(SearchControls.OBJECT_SCOPE);
-            cons.setReturningAttributes(null); // ask for all attributes
-            cons.setReturningObjFlag(true); // need values to construct obj
-
-            LdapResult answer = doSearchOnce(name, "(objectClass=*)", cons, true);
-            respCtls = answer.resControls; // retrieve response controls
-
-            // should get back 1 SearchResponse and 1 SearchResult
-
-            if (answer.status != LdapClient.LDAP_SUCCESS) {
-                processReturnCode(answer, name);
-            }
-
-            if (answer.entries == null || answer.entries.size() != 1) {
-                // found it but got no attributes
-                attrs = new BasicAttributes(LdapClient.caseIgnore);
-            } else {
-                LdapEntry entry = (LdapEntry)answer.entries.elementAt(0);
-                attrs = entry.attributes;
-
-                Vector entryCtls = entry.respCtls; // retrieve entry controls
-                if (entryCtls != null) {
-                    appendVector(respCtls, entryCtls); // concatenate controls
-                }
-            }
-
-            if (attrs.get(Obj.JAVA_ATTRIBUTES[Obj.CLASSNAME]) != null) {
-                // serialized object or object reference
-                obj = Obj.decodeObject(attrs);
-            }
-            if (obj == null) {
-                obj = new LdapCtx(this, fullyQualifiedName(name));
-            }
-        } catch (LdapReferralException e) {
-            if (handleReferrals == LdapClient.LDAP_REF_THROW)
-                throw cont.fillInException(e);
-
-            // process the referrals sequentially
-            while (true) {
-
-                LdapReferralContext refCtx =
-                    (LdapReferralContext)e.getReferralContext(envprops, bindCtls);
-                // repeat the original operation at the new context
-                try {
-
-                    return refCtx.lookup(name);
-
-                } catch (LdapReferralException re) {
-                    e = re;
-                    continue;
-
-                } finally {
-                    // Make sure we close referral context
-                    refCtx.close();
-                }
-            }
-
-        } catch (NamingException e) {
-            throw cont.fillInException(e);
-        }
-
-        try {
-            return DirectoryManager.getObjectInstance(obj, name,
-                this, envprops, attrs);
-
-        } catch (NamingException e) {
-            throw cont.fillInException(e);
-
-        } catch (Exception e) {
-            NamingException e2 = new NamingException(
-                    "problem generating object using object factory");
-            e2.setRootCause(e);
-            throw cont.fillInException(e2);
-        }
-    }
-
-    protected NamingEnumeration c_list(Name name, Continuation cont)
-            throws NamingException {
-        SearchControls cons = new SearchControls();
-        String[] classAttrs = new String[2];
-
-        classAttrs[0] = Obj.JAVA_ATTRIBUTES[Obj.OBJECT_CLASS];
-        classAttrs[1] = Obj.JAVA_ATTRIBUTES[Obj.CLASSNAME];
-        cons.setReturningAttributes(classAttrs);
-
-        // set this flag to override the typesOnly flag
-        cons.setReturningObjFlag(true);
-
-        cont.setError(this, name);
-
-        LdapResult answer = null;
-
-        try {
-            answer = doSearch(name, "(objectClass=*)", cons, true, true);
-
-            // list result may contain continuation references
-            if ((answer.status != LdapClient.LDAP_SUCCESS) ||
-                (answer.referrals != null)) {
-                processReturnCode(answer, name);
-            }
-
-            return new LdapNamingEnumeration(this, answer, name, cont);
-
-        } catch (LdapReferralException e) {
-            if (handleReferrals == LdapClient.LDAP_REF_THROW)
-                throw cont.fillInException(e);
-
-            // process the referrals sequentially
-            while (true) {
-
-                LdapReferralContext refCtx =
-                    (LdapReferralContext)e.getReferralContext(envprops, bindCtls);
-
-                // repeat the original operation at the new context
-                try {
-
-                    return refCtx.list(name);
-
-                } catch (LdapReferralException re) {
-                    e = re;
-                    continue;
-
-                } finally {
-                    // Make sure we close referral context
-                    refCtx.close();
-                }
-            }
-
-        } catch (LimitExceededException e) {
-            LdapNamingEnumeration res =
-                new LdapNamingEnumeration(this, answer, name, cont);
-
-            res.setNamingException(
-                    (LimitExceededException)cont.fillInException(e));
-            return res;
-
-        } catch (PartialResultException e) {
-            LdapNamingEnumeration res =
-                new LdapNamingEnumeration(this, answer, name, cont);
-
-            res.setNamingException(
-                    (PartialResultException)cont.fillInException(e));
-            return res;
-
-        } catch (NamingException e) {
-            throw cont.fillInException(e);
-        }
-    }
-
-    protected NamingEnumeration c_listBindings(Name name, Continuation cont)
-            throws NamingException {
-
-        SearchControls cons = new SearchControls();
-        cons.setReturningAttributes(null); // ask for all attributes
-        cons.setReturningObjFlag(true); // need values to construct obj
-
-        cont.setError(this, name);
-
-        LdapResult answer = null;
-
-        try {
-            answer = doSearch(name, "(objectClass=*)", cons, true, true);
-
-            // listBindings result may contain continuation references
-            if ((answer.status != LdapClient.LDAP_SUCCESS) ||
-                (answer.referrals != null)) {
-                processReturnCode(answer, name);
-            }
-
-            return new LdapBindingEnumeration(this, answer, name, cont);
-
-        } catch (LdapReferralException e) {
-            if (handleReferrals == LdapClient.LDAP_REF_THROW)
-                throw cont.fillInException(e);
-
-            // process the referrals sequentially
-            while (true) {
-
-                LdapReferralContext refCtx =
-                    (LdapReferralContext)e.getReferralContext(envprops, bindCtls);
-
-                // repeat the original operation at the new context
-                try {
-
-                    return refCtx.listBindings(name);
-
-                } catch (LdapReferralException re) {
-                    e = re;
-                    continue;
-
-                } finally {
-                    // Make sure we close referral context
-                    refCtx.close();
-                }
-            }
-        } catch (LimitExceededException e) {
-            LdapBindingEnumeration res =
-                new LdapBindingEnumeration(this, answer, name, cont);
-
-            res.setNamingException(
-                    (LimitExceededException)cont.fillInException(e));
-            return res;
-
-        } catch (PartialResultException e) {
-            LdapBindingEnumeration res =
-                new LdapBindingEnumeration(this, answer, name, cont);
-
-            res.setNamingException(
-                    (PartialResultException)cont.fillInException(e));
-            return res;
-
-        } catch (NamingException e) {
-            throw cont.fillInException(e);
-        }
-    }
-
-    // --------------- Name-related Methods -----------------------
-    // -- getNameParser/getNameInNamespace/composeName
-
-    protected NameParser c_getNameParser(Name name, Continuation cont)
-            throws NamingException
-    {
-        // ignore name, always return same parser
-        cont.setSuccess();
-        return parser;
-    }
-
-    public String getNameInNamespace() {
-        return currentDN;
-    }
-
-    public Name composeName(Name name, Name prefix)
-        throws NamingException
-    {
-        Name result;
-
-        // Handle compound names.  A pair of LdapNames is an easy case.
-        if ((name instanceof LdapName) && (prefix instanceof LdapName)) {
-            result = (Name)(prefix.clone());
-            result.addAll(name);
-            return new CompositeName().add(result.toString());
-        }
-        if (!(name instanceof CompositeName)) {
-            name = new CompositeName().add(name.toString());
-        }
-        if (!(prefix instanceof CompositeName)) {
-            prefix = new CompositeName().add(prefix.toString());
-        }
-
-        int prefixLast = prefix.size() - 1;
-
-        if (name.isEmpty() || prefix.isEmpty() ||
-                name.get(0).equals("") || prefix.get(prefixLast).equals("")) {
-            return super.composeName(name, prefix);
-        }
-
-        result = (Name)(prefix.clone());
-        result.addAll(name);
-
-        if (parentIsLdapCtx) {
-            String ldapComp = concatNames(result.get(prefixLast + 1),
-                                          result.get(prefixLast));
-            result.remove(prefixLast + 1);
-            result.remove(prefixLast);
-            result.add(prefixLast, ldapComp);
-        }
-        return result;
-    }
-
-    private String fullyQualifiedName(Name rel) {
-        return rel.isEmpty()
-                ? currentDN
-                : fullyQualifiedName(rel.get(0));
-    }
-
-    private String fullyQualifiedName(String rel) {
-        return (concatNames(rel, currentDN));
-    }
-
-    // used by LdapSearchEnumeration
-    private static String concatNames(String lesser, String greater) {
-        if (lesser == null || lesser.equals("")) {
-            return greater;
-        } else if (greater == null || greater.equals("")) {
-            return lesser;
-        } else {
-            return (lesser + "," + greater);
-        }
-    }
-
-   // --------------- Reading and Updating Attributes
-   // getAttributes/modifyAttributes
-
-    protected Attributes c_getAttributes(Name name, String[] attrIds,
-                                      Continuation cont)
-            throws NamingException {
-        cont.setError(this, name);
-
-        SearchControls cons = new SearchControls();
-        cons.setSearchScope(SearchControls.OBJECT_SCOPE);
-        cons.setReturningAttributes(attrIds);
-
-        try {
-            LdapResult answer =
-                doSearchOnce(name, "(objectClass=*)", cons, true);
-            respCtls = answer.resControls; // retrieve response controls
-
-            if (answer.status != LdapClient.LDAP_SUCCESS) {
-                processReturnCode(answer, name);
-            }
-
-            if (answer.entries == null || answer.entries.size() != 1) {
-                return new BasicAttributes(LdapClient.caseIgnore);
-            }
-
-            // get attributes from result
-            LdapEntry entry = (LdapEntry) answer.entries.elementAt(0);
-
-            Vector entryCtls = entry.respCtls; // retrieve entry controls
-            if (entryCtls != null) {
-                appendVector(respCtls, entryCtls); // concatenate controls
-            }
-
-            // do this so attributes can find their schema
-            setParents(entry.attributes, (Name) name.clone());
-
-            return (entry.attributes);
-
-        } catch (LdapReferralException e) {
-            if (handleReferrals == LdapClient.LDAP_REF_THROW)
-                throw cont.fillInException(e);
-
-            // process the referrals sequentially
-            while (true) {
-
-                LdapReferralContext refCtx =
-                    (LdapReferralContext)e.getReferralContext(envprops, bindCtls);
-
-                // repeat the original operation at the new context
-                try {
-
-                    return refCtx.getAttributes(name, attrIds);
-
-                } catch (LdapReferralException re) {
-                    e = re;
-                    continue;
-
-                } finally {
-                    // Make sure we close referral context
-                    refCtx.close();
-                }
-            }
-
-        } catch (NamingException e) {
-            throw cont.fillInException(e);
-        }
-    }
-
-    protected void c_modifyAttributes(Name name, int mod_op, Attributes attrs,
-                                      Continuation cont)
-            throws NamingException {
-
-        cont.setError(this, name);
-
-        try {
-            ensureOpen();
-
-            if (attrs == null || attrs.size() == 0) {
-                return; // nothing to do
-            }
-            String newDN = fullyQualifiedName(name);
-            int jmod_op = convertToLdapModCode(mod_op);
-
-            // construct mod list
-            int[] jmods = new int[attrs.size()];
-            Attribute[] jattrs = new Attribute[attrs.size()];
-
-            NamingEnumeration ae = attrs.getAll();
-            for(int i = 0; i < jmods.length && ae.hasMore(); i++) {
-                jmods[i] = jmod_op;
-                jattrs[i] = (Attribute)ae.next();
-            }
-
-            LdapResult answer = clnt.modify(newDN, jmods, jattrs, reqCtls);
-            respCtls = answer.resControls; // retrieve response controls
-
-            if (answer.status != LdapClient.LDAP_SUCCESS) {
-                processReturnCode(answer, name);
-                return;
-            }
-
-        } catch (LdapReferralException e) {
-            if (handleReferrals == LdapClient.LDAP_REF_THROW)
-                throw cont.fillInException(e);
-
-            // process the referrals sequentially
-            while (true) {
-
-                LdapReferralContext refCtx =
-                    (LdapReferralContext)e.getReferralContext(envprops, bindCtls);
-
-                // repeat the original operation at the new context
-                try {
-
-                    refCtx.modifyAttributes(name, mod_op, attrs);
-                    return;
-
-                } catch (LdapReferralException re) {
-                    e = re;
-                    continue;
-
-                } finally {
-                    // Make sure we close referral context
-                    refCtx.close();
-                }
-            }
-
-        } catch (IOException e) {
-            NamingException e2 = new CommunicationException(e.getMessage());
-            e2.setRootCause(e);
-            throw cont.fillInException(e2);
-
-        } catch (NamingException e) {
-            throw cont.fillInException(e);
-        }
-    }
-
-    protected void c_modifyAttributes(Name name, ModificationItem[] mods,
-                                      Continuation cont)
-            throws NamingException {
-        cont.setError(this, name);
-
-        try {
-            ensureOpen();
-
-            if (mods == null || mods.length == 0) {
-                return; // nothing to do
-            }
-            String newDN = fullyQualifiedName(name);
-
-            // construct mod list
-            int[] jmods = new int[mods.length];
-            Attribute[] jattrs = new Attribute[mods.length];
-            ModificationItem mod;
-            for (int i = 0; i < jmods.length; i++) {
-                mod = mods[i];
-                jmods[i] = convertToLdapModCode(mod.getModificationOp());
-                jattrs[i] = mod.getAttribute();
-            }
-
-            LdapResult answer = clnt.modify(newDN, jmods, jattrs, reqCtls);
-            respCtls = answer.resControls; // retrieve response controls
-
-            if (answer.status != LdapClient.LDAP_SUCCESS) {
-                processReturnCode(answer, name);
-            }
-
-        } catch (LdapReferralException e) {
-            if (handleReferrals == LdapClient.LDAP_REF_THROW)
-                throw cont.fillInException(e);
-
-            // process the referrals sequentially
-            while (true) {
-
-                LdapReferralContext refCtx =
-                    (LdapReferralContext)e.getReferralContext(envprops, bindCtls);
-
-                // repeat the original operation at the new context
-                try {
-
-                    refCtx.modifyAttributes(name, mods);
-                    return;
-
-                } catch (LdapReferralException re) {
-                    e = re;
-                    continue;
-
-                } finally {
-                    // Make sure we close referral context
-                    refCtx.close();
-                }
-            }
-
-        } catch (IOException e) {
-            NamingException e2 = new CommunicationException(e.getMessage());
-            e2.setRootCause(e);
-            throw cont.fillInException(e2);
-
-        } catch (NamingException e) {
-            throw cont.fillInException(e);
-        }
-    }
-
-    private static int convertToLdapModCode(int mod_op) {
-        switch (mod_op) {
-        case DirContext.ADD_ATTRIBUTE:
-            return(LdapClient.ADD);
-
-        case DirContext.REPLACE_ATTRIBUTE:
-            return (LdapClient.REPLACE);
-
-        case DirContext.REMOVE_ATTRIBUTE:
-            return (LdapClient.DELETE);
-
-        default:
-            throw new IllegalArgumentException("Invalid modification code");
-        }
-    }
-
-   // ------------------- Schema -----------------------
-
-    protected DirContext c_getSchema(Name name, Continuation cont)
-            throws NamingException {
-        cont.setError(this, name);
-        try {
-            return getSchemaTree(name);
-
-        } catch (NamingException e) {
-            throw cont.fillInException(e);
-        }
-    }
-
-    protected DirContext c_getSchemaClassDefinition(Name name,
-                                                    Continuation cont)
-            throws NamingException {
-        cont.setError(this, name);
-
-        try {
-            // retrieve the objectClass attribute from LDAP
-            Attribute objectClassAttr = c_getAttributes(name,
-                new String[]{"objectclass"}, cont).get("objectclass");
-            if (objectClassAttr == null || objectClassAttr.size() == 0) {
-                return EMPTY_SCHEMA;
-            }
-
-            // retrieve the root of the ObjectClass schema tree
-            Context ocSchema = (Context) c_getSchema(name, cont).lookup(
-                LdapSchemaParser.OBJECTCLASS_DEFINITION_NAME);
-
-            // create a context to hold the schema objects representing the object
-            // classes
-            HierMemDirCtx objectClassCtx = new HierMemDirCtx();
-            DirContext objectClassDef;
-            String objectClassName;
-            for (Enumeration objectClasses = objectClassAttr.getAll();
-                objectClasses.hasMoreElements(); ) {
-                objectClassName = (String)objectClasses.nextElement();
-                // %%% Should we fail if not found, or just continue?
-                objectClassDef = (DirContext)ocSchema.lookup(objectClassName);
-                objectClassCtx.bind(objectClassName, objectClassDef);
-            }
-
-            // Make context read-only
-            objectClassCtx.setReadOnly(
-                new SchemaViolationException("Cannot update schema object"));
-            return (DirContext)objectClassCtx;
-
-        } catch (NamingException e) {
-            throw cont.fillInException(e);
-        }
-    }
-
-    /*
-     * getSchemaTree first looks to see if we have already built a
-     * schema tree for the given entry. If not, it builds a new one and
-     * stores it in our private hash table
-     */
-    private DirContext getSchemaTree(Name name) throws NamingException {
-        String subschemasubentry = getSchemaEntry(name, true);
-
-        DirContext schemaTree = (DirContext)schemaTrees.get(subschemasubentry);
-
-        if(schemaTree==null) {
-            if(debug){System.err.println("LdapCtx: building new schema tree " + this);}
-            schemaTree = buildSchemaTree(subschemasubentry);
-            schemaTrees.put(subschemasubentry, schemaTree);
-        }
-
-        return schemaTree;
-    }
-
-    /*
-     * buildSchemaTree builds the schema tree corresponding to the
-     * given subschemasubentree
-     */
-    private DirContext buildSchemaTree(String subschemasubentry)
-        throws NamingException {
-
-        // get the schema entry itself
-        // DO ask for return object here because we need it to
-        // create context. Since asking for all attrs, we won't
-        // be transmitting any specific attrIDs (like Java-specific ones).
-        SearchControls constraints = new
-            SearchControls(SearchControls.OBJECT_SCOPE,
-                0, 0, /* count and time limits */
-                SCHEMA_ATTRIBUTES /* return schema attrs */,
-                true /* return obj */,
-                false /*deref link */ );
-
-        Name sse = (new CompositeName()).add(subschemasubentry);
-        NamingEnumeration results =
-            searchAux(sse, "(objectClass=subschema)", constraints,
-            false, true, new Continuation());
-
-        if(!results.hasMore()) {
-            throw new OperationNotSupportedException(
-                "Cannot get read subschemasubentry: " + subschemasubentry);
-        }
-        SearchResult result = (SearchResult)results.next();
-        results.close();
-
-        Object obj = result.getObject();
-        if(!(obj instanceof LdapCtx)) {
-            throw new NamingException(
-                "Cannot get schema object as DirContext: " + subschemasubentry);
-        }
-
-        return LdapSchemaCtx.createSchemaTree(envprops, subschemasubentry,
-            (LdapCtx)obj /* schema entry */,
-            result.getAttributes() /* schema attributes */,
-            netscapeSchemaBug);
-   }
-
-    /*
-     * getSchemaEntree returns the DN of the subschemasubentree for the
-     * given entree. It first looks to see if the given entry has
-     * a subschema different from that of the root DIT (by looking for
-     * a "subschemasubentry" attribute). If it doesn't find one, it returns
-     * the one for the root of the DIT (by looking for the root's
-     * "subschemasubentry" attribute).
-     *
-     * This function is called regardless of the server's version, since
-     * an administrator may have setup the server to support client schema
-     * queries. If this function trys a serarch on a v2 server that
-     * doesn't support schema, one of these two things will happen:
-     * 1) It will get an exception when querying the root DSE
-     * 2) It will not find a subschemasubentry on the root DSE
-     * If either of these things occur and the server is not v3, we
-     * throw OperationNotSupported.
-     *
-     * the relative flag tells whether the given name is relative to this
-     * context.
-     */
-    private String getSchemaEntry(Name name, boolean relative)
-        throws NamingException {
-
-        // Asks for operational attribute "subschemasubentry"
-        SearchControls constraints = new SearchControls(SearchControls.OBJECT_SCOPE,
-            0, 0, /* count and time limits */
-            new String[]{"subschemasubentry"} /* attr to return */,
-            false /* returning obj */,
-            false /* deref link */);
-
-        NamingEnumeration results;
-        try {
-            results = searchAux(name, "objectclass=*", constraints, relative,
-                true, new Continuation());
-
-        } catch (NamingException ne) {
-            if (!clnt.isLdapv3 && currentDN.length() == 0 && name.isEmpty()) {
-                // we got an error looking for a root entry on an ldapv2
-                // server. The server must not support schema.
-                throw new OperationNotSupportedException(
-                    "Cannot get schema information from server");
-            } else {
-                throw ne;
-            }
-        }
-
-        if (!results.hasMoreElements()) {
-            throw new ConfigurationException(
-                "Requesting schema of nonexistent entry: " + name);
-        }
-
-        SearchResult result = (SearchResult) results.next();
-        results.close();
-
-        Attribute schemaEntryAttr =
-            result.getAttributes().get("subschemasubentry");
-        //System.err.println("schema entry attrs: " + schemaEntryAttr);
-
-        if (schemaEntryAttr == null || schemaEntryAttr.size() < 0) {
-            if (currentDN.length() == 0 && name.isEmpty()) {
-                // the server doesn't have a subschemasubentry in its root DSE.
-                // therefore, it doesn't support schema.
-                throw new OperationNotSupportedException(
-                    "Cannot read subschemasubentry of root DSE");
-            } else {
-                return getSchemaEntry(new CompositeName(), false);
-            }
-        }
-
-        return (String)(schemaEntryAttr.get()); // return schema entry name
-    }
-
-    // package-private; used by search enum.
-    // Set attributes to point to this context in case some one
-    // asked for their schema
-    void setParents(Attributes attrs, Name name) throws NamingException {
-        NamingEnumeration ae = attrs.getAll();
-        while(ae.hasMore()) {
-            ((LdapAttribute) ae.next()).setParent(this, name);
-        }
-    }
-
-    /*
-     * Returns the URL associated with this context; used by LdapAttribute
-     * after deserialization to get pointer to this context.
-     */
-    String getURL() {
-        if (url == null) {
-            url = LdapURL.toUrlString(hostname, port_number, currentDN,
-                hasLdapsScheme);
-        }
-
-        return url;
-    }
-
-   // --------------------- Searches -----------------------------
-    protected NamingEnumeration c_search(Name name,
-                                         Attributes matchingAttributes,
-                                         Continuation cont)
-            throws NamingException {
-        return c_search(name, matchingAttributes, null, cont);
-    }
-
-    protected NamingEnumeration c_search(Name name,
-                                         Attributes matchingAttributes,
-                                         String[] attributesToReturn,
-                                         Continuation cont)
-            throws NamingException {
-        SearchControls cons = new SearchControls();
-        cons.setReturningAttributes(attributesToReturn);
-        String filter;
-        try {
-            filter = SearchFilter.format(matchingAttributes);
-        } catch (NamingException e) {
-            cont.setError(this, name);
-            throw cont.fillInException(e);
-        }
-        return c_search(name, filter, cons, cont);
-    }
-
-    protected NamingEnumeration c_search(Name name,
-                                         String filter,
-                                         SearchControls cons,
-                                         Continuation cont)
-            throws NamingException {
-        return searchAux(name, filter, cloneSearchControls(cons), true,
-                 waitForReply, cont);
-    }
-
-    protected NamingEnumeration c_search(Name name,
-                                         String filterExpr,
-                                         Object[] filterArgs,
-                                         SearchControls cons,
-                                         Continuation cont)
-            throws NamingException {
-        String strfilter;
-        try {
-            strfilter = SearchFilter.format(filterExpr, filterArgs);
-        } catch (NamingException e) {
-            cont.setError(this, name);
-            throw cont.fillInException(e);
-        }
-        return c_search(name, strfilter, cons, cont);
-    }
-
-        // Used by NamingNotifier
-    NamingEnumeration searchAux(Name name,
-        String filter,
-        SearchControls cons,
-        boolean relative,
-        boolean waitForReply, Continuation cont) throws NamingException {
-
-        LdapResult answer = null;
-        String[] tokens = new String[2];    // stores ldap compare op. values
-        String[] reqAttrs;                  // remember what was asked
-
-        if (cons == null) {
-            cons = new SearchControls();
-        }
-        reqAttrs = cons.getReturningAttributes();
-
-        // if objects are requested then request the Java attributes too
-        // so that the objects can be constructed
-        if (cons.getReturningObjFlag()) {
-            if (reqAttrs != null) {
-
-                // check for presence of "*" (user attributes wildcard)
-                boolean hasWildcard = false;
-                for (int i = reqAttrs.length - 1; i >= 0; i--) {
-                    if (reqAttrs[i].equals("*")) {
-                        hasWildcard = true;
-                        break;
-                    }
-                }
-                if (! hasWildcard) {
-                    String[] totalAttrs =
-                        new String[reqAttrs.length +Obj.JAVA_ATTRIBUTES.length];
-                    System.arraycopy(reqAttrs, 0, totalAttrs, 0,
-                        reqAttrs.length);
-                    System.arraycopy(Obj.JAVA_ATTRIBUTES, 0, totalAttrs,
-                        reqAttrs.length, Obj.JAVA_ATTRIBUTES.length);
-
-                    cons.setReturningAttributes(totalAttrs);
-                }
-            }
-        }
-
-        LdapCtx.SearchArgs args =
-            new LdapCtx.SearchArgs(name, filter, cons, reqAttrs);
-
-        cont.setError(this, name);
-        try {
-            // see if this can be done as a compare, otherwise do a search
-            if (searchToCompare(filter, cons, tokens)){
-                //System.err.println("compare triggered");
-                answer = compare(name, tokens[0], tokens[1]);
-                if (! (answer.compareToSearchResult(fullyQualifiedName(name)))){
-                    processReturnCode(answer, name);
-                }
-            } else {
-                answer = doSearch(name, filter, cons, relative, waitForReply);
-                // search result may contain referrals
-                processReturnCode(answer, name);
-            }
-            return new LdapSearchEnumeration(this, answer,
-                fullyQualifiedName(name), args, cont);
-
-        } catch (LdapReferralException e) {
-            if (handleReferrals == LdapClient.LDAP_REF_THROW)
-                throw cont.fillInException(e);
-
-            // process the referrals sequentially
-            while (true) {
-
-                LdapReferralContext refCtx =
-                    (LdapReferralContext)e.getReferralContext(envprops, bindCtls);
-
-                // repeat the original operation at the new context
-                try {
-
-                    return refCtx.search(name, filter, cons);
-
-                } catch (LdapReferralException re) {
-                    e = re;
-                    continue;
-
-                } finally {
-                    // Make sure we close referral context
-                    refCtx.close();
-                }
-            }
-
-        } catch (LimitExceededException e) {
-            LdapSearchEnumeration res =
-                new LdapSearchEnumeration(this, answer, fullyQualifiedName(name),
-                                          args, cont);
-            res.setNamingException(e);
-            return res;
-
-        } catch (PartialResultException e) {
-            LdapSearchEnumeration res =
-                new LdapSearchEnumeration(this, answer, fullyQualifiedName(name),
-                                          args, cont);
-
-            res.setNamingException(e);
-            return res;
-
-        } catch (IOException e) {
-            NamingException e2 = new CommunicationException(e.getMessage());
-            e2.setRootCause(e);
-            throw cont.fillInException(e2);
-
-        } catch (NamingException e) {
-            throw cont.fillInException(e);
-        }
-    }
-
-
-    LdapResult getSearchReply(LdapClient eClnt, LdapResult res)
-            throws NamingException {
-        // ensureOpen() won't work here because
-        // session was associated with previous connection
-
-        // %%% RL: we can actually allow the enumeration to continue
-        // using the old handle but other weird things might happen
-        // when we hit a referral
-        if (clnt != eClnt) {
-            throw new CommunicationException(
-                "Context's connection changed; unable to continue enumeration");
-        }
-
-        try {
-            return eClnt.getSearchReply(batchSize, res, binaryAttrs);
-        } catch (IOException e) {
-            NamingException e2 = new CommunicationException(e.getMessage());
-            e2.setRootCause(e);
-            throw e2;
-        }
-    }
-
-    // Perform a search. Expect 1 SearchResultEntry and the SearchResultDone.
-    private LdapResult doSearchOnce(Name name, String filter,
-        SearchControls cons, boolean relative) throws NamingException {
-
-        int savedBatchSize = batchSize;
-        batchSize = 2; // 2 protocol elements
-
-        LdapResult answer = doSearch(name, filter, cons, relative, true);
-
-        batchSize = savedBatchSize;
-        return answer;
-    }
-
-    private LdapResult doSearch(Name name, String filter, SearchControls cons,
-        boolean relative, boolean waitForReply) throws NamingException {
-            ensureOpen();
-            try {
-                int scope;
-
-                switch (cons.getSearchScope()) {
-                case SearchControls.OBJECT_SCOPE:
-                    scope = LdapClient.SCOPE_BASE_OBJECT;
-                    break;
-                default:
-                case SearchControls.ONELEVEL_SCOPE:
-                    scope = LdapClient.SCOPE_ONE_LEVEL;
-                    break;
-                case SearchControls.SUBTREE_SCOPE:
-                    scope = LdapClient.SCOPE_SUBTREE;
-                    break;
-                }
-
-                // If cons.getReturningObjFlag() then caller should already
-                // have make sure to request the appropriate attrs
-
-                String[] retattrs = cons.getReturningAttributes();
-                if (retattrs != null && retattrs.length == 0) {
-                    // Ldap treats null and empty array the same
-                    // need to replace with single element array
-                    retattrs = new String[1];
-                    retattrs[0] = "1.1";
-                }
-
-                String nm = (relative
-                             ? fullyQualifiedName(name)
-                             : (name.isEmpty()
-                                ? ""
-                                : name.get(0)));
-
-                // JNDI unit is milliseconds, LDAP unit is seconds.
-                // Zero means no limit.
-                int msecLimit = cons.getTimeLimit();
-                int secLimit = 0;
-
-                if (msecLimit > 0) {
-                    secLimit = (msecLimit / 1000) + 1;
-                }
-
-                LdapResult answer =
-                    clnt.search(nm,
-                        scope,
-                        derefAliases,
-                        (int)cons.getCountLimit(),
-                        secLimit,
-                        cons.getReturningObjFlag() ? false : typesOnly,
-                        retattrs,
-                        filter,
-                        batchSize,
-                        reqCtls,
-                        binaryAttrs,
-                        waitForReply,
-                        replyQueueSize);
-                respCtls = answer.resControls; // retrieve response controls
-                return answer;
-
-            } catch (IOException e) {
-                NamingException e2 = new CommunicationException(e.getMessage());
-                e2.setRootCause(e);
-                throw e2;
-            }
-    }
-
-
-    /*
-     * Certain simple JNDI searches are automatically converted to
-     * LDAP compare operations by the LDAP service provider. A search
-     * is converted to a compare iff:
-     *
-     *    - the scope is set to OBJECT_SCOPE
-     *    - the filter string contains a simple assertion: "<type>=<value>"
-     *    - the returning attributes list is present but empty
-     */
-
-    // returns true if a search can be caried out as a compare, and sets
-    // tokens[0] and tokens[1] to the type and value respectively.
-    // e.g. filter "cn=Jon Ruiz" becomes, type "cn" and value "Jon Ruiz"
-    // This function uses the documents JNDI Compare example as a model
-    // for when to turn a search into a compare.
-
-    private static boolean searchToCompare(
-                                    String filter,
-                                    SearchControls cons,
-                                    String tokens[]) {
-
-        // if scope is not object-scope, it's really a search
-        if (cons.getSearchScope() != SearchControls.OBJECT_SCOPE) {
-            return false;
-        }
-
-        // if attributes are to be returned, it's really a search
-        String[] attrs = cons.getReturningAttributes();
-        if (attrs == null || attrs.length != 0) {
-            return false;
-        }
-
-        // if the filter not a simple assertion, it's really a search
-        if (! filterToAssertion(filter, tokens)) {
-            return false;
-        }
-
-        // it can be converted to a compare
-        return true;
-    }
-
-    // If the supplied filter is a simple assertion i.e. "<type>=<value>"
-    // (enclosing parentheses are permitted) then
-    // filterToAssertion will return true and pass the type and value as
-    // the first and second elements of tokens respectively.
-    // precondition: tokens[] must be initialized and be at least of size 2.
-
-    private static boolean filterToAssertion(String filter, String tokens[]) {
-
-        // find the left and right half of the assertion
-        StringTokenizer assertionTokenizer = new StringTokenizer(filter, "=");
-
-        if (assertionTokenizer.countTokens() != 2) {
-            return false;
-        }
-
-        tokens[0] = assertionTokenizer.nextToken();
-        tokens[1] = assertionTokenizer.nextToken();
-
-        // make sure the value does not contain a wildcard
-        if (tokens[1].indexOf('*') != -1) {
-            return false;
-        }
-
-        // test for enclosing parenthesis
-        boolean hasParens = false;
-        int len = tokens[1].length();
-
-        if ((tokens[0].charAt(0) == '(') &&
-            (tokens[1].charAt(len - 1) == ')')) {
-            hasParens = true;
-
-        } else if ((tokens[0].charAt(0) == '(') ||
-            (tokens[1].charAt(len - 1) == ')')) {
-            return false; // unbalanced
-        }
-
-        // make sure the left and right half are not expresions themselves
-        StringTokenizer illegalCharsTokenizer =
-            new StringTokenizer(tokens[0], "()&|!=~><*", true);
-
-        if (illegalCharsTokenizer.countTokens() != (hasParens ? 2 : 1)) {
-            return false;
-        }
-
-        illegalCharsTokenizer =
-            new StringTokenizer(tokens[1], "()&|!=~><*", true);
-
-        if (illegalCharsTokenizer.countTokens() != (hasParens ? 2 : 1)) {
-            return false;
-        }
-
-        // strip off enclosing parenthesis, if present
-        if (hasParens) {
-            tokens[0] = tokens[0].substring(1);
-            tokens[1] = tokens[1].substring(0, len - 1);
-        }
-
-        return true;
-    }
-
-    private LdapResult compare(Name name, String type, String value)
-        throws IOException, NamingException {
-
-        ensureOpen();
-        String nm = fullyQualifiedName(name);
-
-        LdapResult answer = clnt.compare(nm, type, value, reqCtls);
-        respCtls = answer.resControls; // retrieve response controls
-
-        return answer;
-    }
-
-    private static SearchControls cloneSearchControls(SearchControls cons) {
-        if (cons == null) {
-            return null;
-        }
-        String[] retAttrs = cons.getReturningAttributes();
-        if (retAttrs != null) {
-            String[] attrs = new String[retAttrs.length];
-            System.arraycopy(retAttrs, 0, attrs, 0, retAttrs.length);
-            retAttrs = attrs;
-        }
-        return new SearchControls(cons.getSearchScope(),
-                                  cons.getCountLimit(),
-                                  cons.getTimeLimit(),
-                                  retAttrs,
-                                  cons.getReturningObjFlag(),
-                                  cons.getDerefLinkFlag());
-    }
-
-   // -------------- Environment Properties ------------------
-
-    /**
-     * Override with noncloning version.
-     */
-    protected Hashtable p_getEnvironment() {
-        return envprops;
-    }
-
-    public Hashtable getEnvironment() throws NamingException {
-        return (envprops == null
-                ? new Hashtable(5, 0.75f)
-                : (Hashtable)envprops.clone());
-    }
-
-    public Object removeFromEnvironment(String propName)
-        throws NamingException {
-
-        // not there; just return
-        if (envprops == null || envprops.get(propName) == null) {
-            return null;
-        }
-
-        if (propName.equals(REF_SEPARATOR)) {
-            addrEncodingSeparator = DEFAULT_REF_SEPARATOR;
-        } else if (propName.equals(TYPES_ONLY)) {
-            typesOnly = DEFAULT_TYPES_ONLY;
-        } else if (propName.equals(DELETE_RDN)) {
-            deleteRDN = DEFAULT_DELETE_RDN;
-        } else if (propName.equals(DEREF_ALIASES)) {
-            derefAliases = DEFAULT_DEREF_ALIASES;
-        } else if (propName.equals(Context.BATCHSIZE)) {
-            batchSize = DEFAULT_BATCH_SIZE;
-        } else if (propName.equals(REFERRAL_LIMIT)) {
-            referralHopLimit = DEFAULT_REFERRAL_LIMIT;
-        } else if (propName.equals(Context.REFERRAL)) {
-            setReferralMode(null, true);
-        } else if (propName.equals(BINARY_ATTRIBUTES)) {
-            setBinaryAttributes(null);
-        } else if (propName.equals(CONNECT_TIMEOUT)) {
-            connectTimeout = -1;
-        } else if (propName.equals(READ_TIMEOUT)) {
-            readTimeout = -1;
-        } else if (propName.equals(WAIT_FOR_REPLY)) {
-            waitForReply = true;
-        } else if (propName.equals(REPLY_QUEUE_SIZE)) {
-            replyQueueSize = -1;
-
-// The following properties affect the connection
-
-        } else if (propName.equals(Context.SECURITY_PROTOCOL)) {
-            closeConnection(SOFT_CLOSE);
-            // De-activate SSL and reset the context's url and port number
-            if (useSsl && !hasLdapsScheme) {
-                useSsl = false;
-                url = null;
-                if (useDefaultPortNumber) {
-                    port_number = DEFAULT_PORT;
-                }
-            }
-        } else if (propName.equals(VERSION) ||
-            propName.equals(SOCKET_FACTORY)) {
-            closeConnection(SOFT_CLOSE);
-        } else if(propName.equals(Context.SECURITY_AUTHENTICATION) ||
-            propName.equals(Context.SECURITY_PRINCIPAL) ||
-            propName.equals(Context.SECURITY_CREDENTIALS)) {
-            sharable = false;
-        }
-
-        // Update environment; reconnection will use new props
-        envprops = (Hashtable)envprops.clone();
-        return envprops.remove(propName);
-    }
-
-    public Object addToEnvironment(String propName, Object propVal)
-        throws NamingException {
-
-            // If adding null, call remove
-            if (propVal == null) {
-                return removeFromEnvironment(propName);
-            }
-
-            if (propName.equals(REF_SEPARATOR)) {
-                setRefSeparator((String)propVal);
-            } else if (propName.equals(TYPES_ONLY)) {
-                setTypesOnly((String)propVal);
-            } else if (propName.equals(DELETE_RDN)) {
-                setDeleteRDN((String)propVal);
-            } else if (propName.equals(DEREF_ALIASES)) {
-                setDerefAliases((String)propVal);
-            } else if (propName.equals(Context.BATCHSIZE)) {
-                setBatchSize((String)propVal);
-            } else if (propName.equals(REFERRAL_LIMIT)) {
-                setReferralLimit((String)propVal);
-            } else if (propName.equals(Context.REFERRAL)) {
-                setReferralMode((String)propVal, true);
-            } else if (propName.equals(BINARY_ATTRIBUTES)) {
-                setBinaryAttributes((String)propVal);
-            } else if (propName.equals(CONNECT_TIMEOUT)) {
-                setConnectTimeout((String)propVal);
-            } else if (propName.equals(READ_TIMEOUT)) {
-                setReadTimeout((String)propVal);
-            } else if (propName.equals(WAIT_FOR_REPLY)) {
-                setWaitForReply((String)propVal);
-            } else if (propName.equals(REPLY_QUEUE_SIZE)) {
-                setReplyQueueSize((String)propVal);
-
-// The following properties affect the connection
-
-            } else if (propName.equals(Context.SECURITY_PROTOCOL)) {
-                closeConnection(SOFT_CLOSE);
-                // Activate SSL and reset the context's url and port number
-                if ("ssl".equals(propVal)) {
-                    useSsl = true;
-                    url = null;
-                    if (useDefaultPortNumber) {
-                        port_number = DEFAULT_SSL_PORT;
-                    }
-                }
-            } else if (propName.equals(VERSION) ||
-                propName.equals(SOCKET_FACTORY)) {
-                closeConnection(SOFT_CLOSE);
-            } else if (propName.equals(Context.SECURITY_AUTHENTICATION) ||
-                propName.equals(Context.SECURITY_PRINCIPAL) ||
-                propName.equals(Context.SECURITY_CREDENTIALS)) {
-                sharable = false;
-            }
-
-            // Update environment; reconnection will use new props
-            envprops = (envprops == null
-                ? new Hashtable(5, 0.75f)
-                : (Hashtable)envprops.clone());
-            return envprops.put(propName, propVal);
-    }
-
-    /**
-     * Sets the URL that created the context in the java.naming.provider.url
-     * property.
-     */
-    void setProviderUrl(String providerUrl) { // called by LdapCtxFactory
-        if (envprops != null) {
-            envprops.put(Context.PROVIDER_URL, providerUrl);
-        }
-    }
-
-    /**
-     * Sets the domain name for the context in the com.sun.jndi.ldap.domainname
-     * property.
-     * Used for hostname verification by Start TLS
-     */
-    void setDomainName(String domainName) { // called by LdapCtxFactory
-        if (envprops != null) {
-            envprops.put(DOMAIN_NAME, domainName);
-        }
-    }
-
-    private void initEnv() throws NamingException {
-        if (envprops == null) {
-            // Make sure that referrals are to their default
-            setReferralMode(null, false);
-            return;
-        }
-
-        // Set batch size
-        setBatchSize((String)envprops.get(Context.BATCHSIZE));
-
-        // Set separator used for encoding RefAddr
-        setRefSeparator((String)envprops.get(REF_SEPARATOR));
-
-        // Set whether RDN is removed when renaming object
-        setDeleteRDN((String)envprops.get(DELETE_RDN));
-
-        // Set whether types are returned only
-        setTypesOnly((String)envprops.get(TYPES_ONLY));
-
-        // Set how aliases are dereferenced
-        setDerefAliases((String)envprops.get(DEREF_ALIASES));
-
-        // Set the limit on referral chains
-        setReferralLimit((String)envprops.get(REFERRAL_LIMIT));
-
-        setBinaryAttributes((String)envprops.get(BINARY_ATTRIBUTES));
-
-        bindCtls = cloneControls((Control[]) envprops.get(BIND_CONTROLS));
-
-        // set referral handling
-        setReferralMode((String)envprops.get(Context.REFERRAL), false);
-
-        // Set the connect timeout
-        setConnectTimeout((String)envprops.get(CONNECT_TIMEOUT));
-
-        // Set the read timeout
-        setReadTimeout((String)envprops.get(READ_TIMEOUT));
-
-        // Set the flag that controls whether to block until the first reply
-        // is received
-        setWaitForReply((String)envprops.get(WAIT_FOR_REPLY));
-
-        // Set the size of the queue of unprocessed search replies
-        setReplyQueueSize((String)envprops.get(REPLY_QUEUE_SIZE));
-
-        // When connection is created, it will use these and other
-        // properties from the environment
-    }
-
-    private void setDeleteRDN(String deleteRDNProp) {
-        if ((deleteRDNProp != null) &&
-            (deleteRDNProp.equalsIgnoreCase("false"))) {
-            deleteRDN = false;
-        } else {
-            deleteRDN = DEFAULT_DELETE_RDN;
-        }
-    }
-
-    private void setTypesOnly(String typesOnlyProp) {
-        if ((typesOnlyProp != null) &&
-            (typesOnlyProp.equalsIgnoreCase("true"))) {
-            typesOnly = true;
-        } else {
-            typesOnly = DEFAULT_TYPES_ONLY;
-        }
-    }
-
-    /**
-     * Sets the batch size of this context;
-     */
-    private void setBatchSize(String batchSizeProp) {
-        // set batchsize
-        if (batchSizeProp != null) {
-            batchSize = Integer.parseInt(batchSizeProp);
-        } else {
-            batchSize = DEFAULT_BATCH_SIZE;
-        }
-    }
-
-    /**
-     * Sets the referral mode of this context to 'follow', 'throw' or 'ignore'.
-     * If referral mode is 'ignore' then activate the manageReferral control.
-     */
-    private void setReferralMode(String ref, boolean update) {
-        // First determine the referral mode
-        if (ref != null) {
-            if (ref.equals("follow")) {
-                handleReferrals = LdapClient.LDAP_REF_FOLLOW;
-            } else if (ref.equals("throw")) {
-                handleReferrals = LdapClient.LDAP_REF_THROW;
-            } else if (ref.equals("ignore")) {
-                handleReferrals = LdapClient.LDAP_REF_IGNORE;
-            } else {
-                throw new IllegalArgumentException(
-                    "Illegal value for " + Context.REFERRAL + " property.");
-            }
-        } else {
-            handleReferrals = DEFAULT_REFERRAL_MODE;
-        }
-
-        if (handleReferrals == LdapClient.LDAP_REF_IGNORE) {
-            // If ignoring referrals, add manageReferralControl
-            reqCtls = addControl(reqCtls, manageReferralControl);
-
-        } else if (update) {
-
-            // If we're update an existing context, remove the control
-            reqCtls = removeControl(reqCtls, manageReferralControl);
-
-        } // else, leave alone; need not update
-    }
-
-    /**
-     * Set whether aliases are derefereced during resolution and searches.
-     */
-    private void setDerefAliases(String deref) {
-        if (deref != null) {
-            if (deref.equals("never")) {
-                derefAliases = 0; // never de-reference aliases
-            } else if (deref.equals("searching")) {
-                derefAliases = 1; // de-reference aliases during searching
-            } else if (deref.equals("finding")) {
-                derefAliases = 2; // de-reference during name resolution
-            } else if (deref.equals("always")) {
-                derefAliases = 3; // always de-reference aliases
-            } else {
-                throw new IllegalArgumentException("Illegal value for " +
-                    DEREF_ALIASES + " property.");
-            }
-        } else {
-            derefAliases = DEFAULT_DEREF_ALIASES;
-        }
-    }
-
-    private void setRefSeparator(String sepStr) throws NamingException {
-        if (sepStr != null && sepStr.length() > 0) {
-            addrEncodingSeparator = sepStr.charAt(0);
-        } else {
-            addrEncodingSeparator = DEFAULT_REF_SEPARATOR;
-        }
-    }
-
-    /**
-     * Sets the limit on referral chains
-     */
-    private void setReferralLimit(String referralLimitProp) {
-        // set referral limit
-        if (referralLimitProp != null) {
-            referralHopLimit = Integer.parseInt(referralLimitProp);
-
-            // a zero setting indicates no limit
-            if (referralHopLimit == 0)
-                referralHopLimit = Integer.MAX_VALUE;
-        } else {
-            referralHopLimit = DEFAULT_REFERRAL_LIMIT;
-        }
-    }
-
-    // For counting referral hops
-    void setHopCount(int hopCount) {
-        this.hopCount = hopCount;
-    }
-
-    /**
-     * Sets the connect timeout value
-     */
-    private void setConnectTimeout(String connectTimeoutProp) {
-        if (connectTimeoutProp != null) {
-            connectTimeout = Integer.parseInt(connectTimeoutProp);
-        } else {
-            connectTimeout = -1;
-        }
-    }
-
-    /**
-     * Sets the size of the queue of unprocessed search replies
-     */
-    private void setReplyQueueSize(String replyQueueSizeProp) {
-        if (replyQueueSizeProp != null) {
-           replyQueueSize = Integer.parseInt(replyQueueSizeProp);
-            // disallow an empty queue
-            if (replyQueueSize <= 0) {
-                replyQueueSize = -1;    // unlimited
-            }
-        } else {
-            replyQueueSize = -1;        // unlimited
-        }
-    }
-
-    /**
-     * Sets the flag that controls whether to block until the first search
-     * reply is received
-     */
-    private void setWaitForReply(String waitForReplyProp) {
-        if (waitForReplyProp != null &&
-            (waitForReplyProp.equalsIgnoreCase("false"))) {
-            waitForReply = false;
-        } else {
-            waitForReply = true;
-        }
-    }
-
-    /**
-     * Sets the read timeout value
-     */
-    private void setReadTimeout(String readTimeoutProp) {
-        if (readTimeoutProp != null) {
-           readTimeout = Integer.parseInt(readTimeoutProp);
-        } else {
-            readTimeout = -1;
-        }
-    }
-
-    /*
-     * Extract URLs from a string. The format of the string is:
-     *
-     *     <urlstring > ::= "Referral:" <ldapurls>
-     *     <ldapurls>   ::= <separator> <ldapurl> | <ldapurls>
-     *     <separator>  ::= ASCII linefeed character (0x0a)
-     *     <ldapurl>    ::= LDAP URL format (RFC 1959)
-     */
-    private static Vector extractURLs(String refString) {
-
-        int separator = 0;
-        int urlCount = 0;
-
-        // count the number of URLs
-        while ((separator = refString.indexOf('\n', separator)) >= 0) {
-            separator++;
-            urlCount++;
-        }
-
-        Vector referrals = new Vector(urlCount);
-        int iURL;
-        int i = 0;
-
-        separator = refString.indexOf('\n');
-        iURL = separator + 1;
-        while ((separator = refString.indexOf('\n', iURL)) >= 0) {
-            referrals.addElement(refString.substring(iURL, separator));
-            iURL = separator + 1;
-        }
-        referrals.addElement(refString.substring(iURL));
-
-        return referrals;
-    }
-
-    /*
-     * Argument is a space-separated list of attribute IDs
-     * Converts attribute IDs to lowercase before adding to built-in list.
-     */
-    private void setBinaryAttributes(String attrIds) {
-        if (attrIds == null) {
-            binaryAttrs = null;
-        } else {
-            binaryAttrs = new Hashtable(11, 0.75f);
-            StringTokenizer tokens =
-                new StringTokenizer(attrIds.toLowerCase(), " ");
-
-            while (tokens.hasMoreTokens()) {
-                binaryAttrs.put(tokens.nextToken(), Boolean.TRUE);
-            }
-        }
-    }
-
-   // ----------------- Connection  ---------------------
-
-    protected void finalize() {
-        try {
-            close();
-        } catch (NamingException e) {
-            // ignore failures
-        }
-    }
-
-    synchronized public void close() throws NamingException {
-        if (debug) {
-            System.err.println("LdapCtx: close() called " + this);
-            (new Throwable()).printStackTrace();
-        }
-
-        // Event (normal and unsolicited)
-        if (eventSupport != null) {
-            eventSupport.cleanup(); // idempotent
-            removeUnsolicited();
-        }
-
-        // Enumerations that are keeping the connection alive
-        if (enumCount > 0) {
-            if (debug)
-                System.err.println("LdapCtx: close deferred");
-            closeRequested = true;
-            return;
-        }
-        closeConnection(SOFT_CLOSE);
-
-// %%%: RL: There is no need to set these to null, as they're just
-// variables whose contents and references will automatically
-// be cleaned up when they're no longer referenced.
-// Also, setting these to null creates problems for the attribute
-// schema-related methods, which need these to work.
-/*
-        schemaTrees = null;
-        envprops = null;
-*/
-    }
-
-    public void reconnect(Control[] connCtls) throws NamingException {
-        // Update environment
-        envprops = (envprops == null
-                ? new Hashtable(5, 0.75f)
-                : (Hashtable)envprops.clone());
-
-        if (connCtls == null) {
-            envprops.remove(BIND_CONTROLS);
-            bindCtls = null;
-        } else {
-            envprops.put(BIND_CONTROLS, bindCtls = cloneControls(connCtls));
-        }
-
-        sharable = false;  // can't share with existing contexts
-        ensureOpen();      // open or reauthenticated
-    }
-
-    private void ensureOpen() throws NamingException {
-        ensureOpen(false);
-    }
-
-    private void ensureOpen(boolean startTLS) throws NamingException {
-
-        try {
-            if (clnt == null) {
-                if (debug) {
-                    System.err.println("LdapCtx: Reconnecting " + this);
-                }
-
-                // reset the cache before a new connection is established
-                schemaTrees = new Hashtable(11, 0.75f);
-                connect(startTLS);
-
-            } else if (!sharable || startTLS) {
-
-                synchronized (clnt) {
-                    if (!clnt.isLdapv3
-                        || clnt.referenceCount > 1
-                        || clnt.usingSaslStreams()) {
-                        closeConnection(SOFT_CLOSE);
-                    }
-                }
-                // reset the cache before a new connection is established
-                schemaTrees = new Hashtable(11, 0.75f);
-                connect(startTLS);
-            }
-
-        } finally {
-            sharable = true;   // connection is now either new or single-use
-                               // OK for others to start sharing again
-        }
-    }
-
-    private void connect(boolean startTLS) throws NamingException {
-        if (debug) { System.err.println("LdapCtx: Connecting " + this); }
-
-        String user = null;             // authenticating user
-        Object passwd = null;           // password for authenticating user
-        String secProtocol = null;      // security protocol (e.g. "ssl")
-        String socketFactory = null;    // socket factory
-        String authMechanism = null;    // authentication mechanism
-        String ver = null;
-        int ldapVersion;                // LDAP protocol version
-        boolean usePool = false;        // enable connection pooling
-
-        if (envprops != null) {
-            user = (String)envprops.get(Context.SECURITY_PRINCIPAL);
-            passwd = envprops.get(Context.SECURITY_CREDENTIALS);
-            ver = (String)envprops.get(VERSION);
-            secProtocol =
-               useSsl ? "ssl" : (String)envprops.get(Context.SECURITY_PROTOCOL);
-            socketFactory = (String)envprops.get(SOCKET_FACTORY);
-            authMechanism =
-                (String)envprops.get(Context.SECURITY_AUTHENTICATION);
-
-            usePool = "true".equalsIgnoreCase((String)envprops.get(ENABLE_POOL));
-        }
-
-        if (socketFactory == null) {
-            socketFactory =
-                "ssl".equals(secProtocol) ? DEFAULT_SSL_FACTORY : null;
-        }
-
-        if (authMechanism == null) {
-            authMechanism = (user == null) ? "none" : "simple";
-        }
-
-        try {
-            boolean initial = (clnt == null);
-
-            if (initial) {
-                ldapVersion = (ver != null) ? Integer.parseInt(ver) :
-                    DEFAULT_LDAP_VERSION;
-
-                clnt = LdapClient.getInstance(
-                    usePool, // Whether to use connection pooling
-
-                    // Required for LdapClient constructor
-                    hostname,
-                    port_number,
-                    socketFactory,
-                    connectTimeout,
-                    readTimeout,
-                    trace,
-
-                    // Required for basic client identity
-                    ldapVersion,
-                    authMechanism,
-                    bindCtls,
-                    secProtocol,
-
-                    // Required for simple client identity
-                    user,
-                    passwd,
-
-                    // Required for SASL client identity
-                    envprops);
-
-
-                /**
-                 * Pooled connections are preauthenticated;
-                 * newly created ones are not.
-                 */
-                if (clnt.authenticateCalled()) {
-                    return;
-                }
-
-            } else if (sharable && startTLS) {
-                return; // no authentication required
-
-            } else {
-                // reauthenticating over existing connection;
-                // only v3 supports this
-                ldapVersion = LdapClient.LDAP_VERSION3;
-            }
-
-            LdapResult answer = clnt.authenticate(initial,
-                user, passwd, ldapVersion, authMechanism, bindCtls, envprops);
-
-            respCtls = answer.resControls; // retrieve (bind) response controls
-
-            if (answer.status != LdapClient.LDAP_SUCCESS) {
-                if (initial) {
-                    closeConnection(HARD_CLOSE);  // hard close
-                }
-                processReturnCode(answer);
-            }
-
-        } catch (LdapReferralException e) {
-            if (handleReferrals == LdapClient.LDAP_REF_THROW)
-                throw e;
-
-            String referral;
-            LdapURL url;
-            NamingException saved_ex = null;
-
-            // Process the referrals sequentially (top level) and
-            // recursively (per referral)
-            while (true) {
-
-                if ((referral = e.getNextReferral()) == null) {
-                    // No more referrals to follow
-
-                    if (saved_ex != null) {
-                        throw (NamingException)(saved_ex.fillInStackTrace());
-                    } else {
-                        // No saved exception, something must have gone wrong
-                        throw new NamingException(
-                        "Internal error processing referral during connection");
-                    }
-                }
-
-                // Use host/port number from referral
-                url = new LdapURL(referral);
-                hostname = url.getHost();
-                if ((hostname != null) && (hostname.charAt(0) == '[')) {
-                    hostname = hostname.substring(1, hostname.length() - 1);
-                }
-                port_number = url.getPort();
-
-                // Try to connect again using new host/port number
-                try {
-                    connect(startTLS);
-                    break;
-
-                } catch (NamingException ne) {
-                    saved_ex = ne;
-                    continue; // follow another referral
-                }
-            }
-        }
-    }
-
-    private void closeConnection(boolean hardclose) {
-        removeUnsolicited();            // idempotent
-
-        if (clnt != null) {
-            if (debug) {
-                System.err.println("LdapCtx: calling clnt.close() " + this);
-            }
-            clnt.close(reqCtls, hardclose);
-            clnt = null;
-        }
-    }
-
-    // Used by Enum classes to track whether it still needs context
-    private int enumCount = 0;
-    private boolean closeRequested = false;
-
-    synchronized void incEnumCount() {
-        ++enumCount;
-        if (debug) System.err.println("LdapCtx: " + this + " enum inc: " + enumCount);
-    }
-
-    synchronized void decEnumCount() {
-        --enumCount;
-        if (debug) System.err.println("LdapCtx: " + this + " enum dec: " + enumCount);
-
-        if (enumCount == 0 && closeRequested) {
-            try {
-                close();
-            } catch (NamingException e) {
-                // ignore failures
-            }
-        }
-    }
-
-
-   // ------------ Return code and Error messages  -----------------------
-
-    protected void processReturnCode(LdapResult answer) throws NamingException {
-        processReturnCode(answer, null, this, null, envprops, null);
-    }
-
-    void processReturnCode(LdapResult answer, Name remainName)
-    throws NamingException {
-        processReturnCode(answer,
-                          (new CompositeName()).add(currentDN),
-                          this,
-                          remainName,
-                          envprops,
-                          fullyQualifiedName(remainName));
-    }
-
-    protected void processReturnCode(LdapResult res, Name resolvedName,
-        Object resolvedObj, Name remainName, Hashtable envprops, String fullDN)
-    throws NamingException {
-
-        String msg = LdapClient.getErrorMessage(res.status, res.errorMessage);
-        NamingException e;
-        LdapReferralException r = null;
-
-        switch (res.status) {
-
-        case LdapClient.LDAP_SUCCESS:
-
-            // handle Search continuation references
-            if (res.referrals != null) {
-
-                msg = "Unprocessed Continuation Reference(s)";
-
-                if (handleReferrals == LdapClient.LDAP_REF_IGNORE) {
-                    e = new PartialResultException(msg);
-                    break;
-                }
-
-                // handle multiple sets of URLs
-                int contRefCount = res.referrals.size();
-                LdapReferralException head = null;
-                LdapReferralException ptr = null;
-
-                msg = "Continuation Reference";
-
-                // make a chain of LdapReferralExceptions
-                for (int i = 0; i < contRefCount; i++) {
-
-                    r = new LdapReferralException(resolvedName, resolvedObj,
-                        remainName, msg, envprops, fullDN, handleReferrals,
-                        reqCtls);
-                    r.setReferralInfo((Vector)res.referrals.elementAt(i), true);
-
-                    if (hopCount > 1) {
-                        r.setHopCount(hopCount);
-                    }
-
-                    if (head == null) {
-                        head = ptr = r;
-                    } else {
-                        ptr.nextReferralEx = r; // append ex. to end of chain
-                        ptr = r;
-                    }
-                }
-                res.referrals = null;  // reset
-
-                if (res.refEx == null) {
-                    res.refEx = head;
-
-                } else {
-                    ptr = res.refEx;
-
-                    while (ptr.nextReferralEx != null) {
-                        ptr = ptr.nextReferralEx;
-                    }
-                    ptr.nextReferralEx = head;
-                }
-
-                // check the hop limit
-                if (hopCount > referralHopLimit) {
-                    NamingException lee =
-                        new LimitExceededException("Referral limit exceeded");
-                    lee.setRootCause(r);
-                    throw lee;
-                }
-            }
-            return;
-
-        case LdapClient.LDAP_REFERRAL:
-
-            if (handleReferrals == LdapClient.LDAP_REF_IGNORE) {
-                e = new PartialResultException(msg);
-                break;
-            }
-
-            r = new LdapReferralException(resolvedName, resolvedObj, remainName,
-                msg, envprops, fullDN, handleReferrals, reqCtls);
-            // only one set of URLs is present
-            r.setReferralInfo((Vector)res.referrals.elementAt(0), false);
-
-            if (hopCount > 1) {
-                r.setHopCount(hopCount);
-            }
-
-            // check the hop limit
-            if (hopCount > referralHopLimit) {
-                NamingException lee =
-                    new LimitExceededException("Referral limit exceeded");
-                lee.setRootCause(r);
-                e = lee;
-
-            } else {
-                e = r;
-            }
-            break;
-
-        /*
-         * Handle SLAPD-style referrals.
-         *
-         * Referrals received during name resolution should be followed
-         * until one succeeds - the target entry is located. An exception
-         * is thrown now to handle these.
-         *
-         * Referrals received during a search operation point to unexplored
-         * parts of the directory and each should be followed. An exception
-         * is thrown later (during results enumeration) to handle these.
-         */
-
-        case LdapClient.LDAP_PARTIAL_RESULTS:
-
-            if (handleReferrals == LdapClient.LDAP_REF_IGNORE) {
-                e = new PartialResultException(msg);
-                break;
-            }
-
-            // extract SLAPD-style referrals from errorMessage
-            if ((res.errorMessage != null) && (!res.errorMessage.equals(""))) {
-                res.referrals = extractURLs(res.errorMessage);
-            } else {
-                e = new PartialResultException(msg);
-                break;
-            }
-
-            // build exception
-            r = new LdapReferralException(resolvedName,
-                resolvedObj,
-                remainName,
-                msg,
-                envprops,
-                fullDN,
-                handleReferrals,
-                reqCtls);
-
-            if (hopCount > 1) {
-                r.setHopCount(hopCount);
-            }
-            /*
-             * %%%
-             * SLAPD-style referrals received during name resolution
-             * cannot be distinguished from those received during a
-             * search operation. Since both must be handled differently
-             * the following rule is applied:
-             *
-             *     If 1 referral and 0 entries is received then
-             *     assume name resolution has not yet completed.
-             */
-            if (((res.entries == null) || (res.entries.size() == 0)) &&
-                (res.referrals.size() == 1)) {
-
-                r.setReferralInfo((Vector)res.referrals, false);
-
-                // check the hop limit
-                if (hopCount > referralHopLimit) {
-                    NamingException lee =
-                        new LimitExceededException("Referral limit exceeded");
-                    lee.setRootCause(r);
-                    e = lee;
-
-                } else {
-                    e = r;
-                }
-
-            } else {
-                r.setReferralInfo(res.referrals, true);
-                res.refEx = r;
-                return;
-            }
-            break;
-
-        case LdapClient.LDAP_INVALID_DN_SYNTAX:
-        case LdapClient.LDAP_NAMING_VIOLATION:
-
-            if (remainName != null) {
-                e = new
-                    InvalidNameException(remainName.toString() + ": " + msg);
-            } else {
-                e = new InvalidNameException(msg);
-            }
-            break;
-
-        default:
-            e = mapErrorCode(res.status, res.errorMessage);
-            break;
-        }
-        e.setResolvedName(resolvedName);
-        e.setResolvedObj(resolvedObj);
-        e.setRemainingName(remainName);
-        throw e;
-    }
-
-    /**
-     * Maps an LDAP error code to an appropriate NamingException.
-     * %%% public; used by controls
-     *
-     * @param errorCode numeric LDAP error code
-     * @param errorMessage textual description of the LDAP error. May be null.
-     *
-     * @return A NamingException or null if the error code indicates success.
-     */
-    public static NamingException mapErrorCode(int errorCode,
-        String errorMessage) {
-
-        if (errorCode == LdapClient.LDAP_SUCCESS)
-            return null;
-
-        NamingException e = null;
-        String message = LdapClient.getErrorMessage(errorCode, errorMessage);
-
-        switch (errorCode) {
-
-        case LdapClient.LDAP_ALIAS_DEREFERENCING_PROBLEM:
-            e = new NamingException(message);
-            break;
-
-        case LdapClient.LDAP_ALIAS_PROBLEM:
-            e = new NamingException(message);
-            break;
-
-        case LdapClient.LDAP_ATTRIBUTE_OR_VALUE_EXISTS:
-            e = new AttributeInUseException(message);
-            break;
-
-        case LdapClient.LDAP_AUTH_METHOD_NOT_SUPPORTED:
-        case LdapClient.LDAP_CONFIDENTIALITY_REQUIRED:
-        case LdapClient.LDAP_STRONG_AUTH_REQUIRED:
-        case LdapClient.LDAP_INAPPROPRIATE_AUTHENTICATION:
-            e = new AuthenticationNotSupportedException(message);
-            break;
-
-        case LdapClient.LDAP_ENTRY_ALREADY_EXISTS:
-            e = new NameAlreadyBoundException(message);
-            break;
-
-        case LdapClient.LDAP_INVALID_CREDENTIALS:
-        case LdapClient.LDAP_SASL_BIND_IN_PROGRESS:
-            e = new AuthenticationException(message);
-            break;
-
-        case LdapClient.LDAP_INAPPROPRIATE_MATCHING:
-            e = new InvalidSearchFilterException(message);
-            break;
-
-        case LdapClient.LDAP_INSUFFICIENT_ACCESS_RIGHTS:
-            e = new NoPermissionException(message);
-            break;
-
-        case LdapClient.LDAP_INVALID_ATTRIBUTE_SYNTAX:
-        case LdapClient.LDAP_CONSTRAINT_VIOLATION:
-            e =  new InvalidAttributeValueException(message);
-            break;
-
-        case LdapClient.LDAP_LOOP_DETECT:
-            e = new NamingException(message);
-            break;
-
-        case LdapClient.LDAP_NO_SUCH_ATTRIBUTE:
-            e = new NoSuchAttributeException(message);
-            break;
-
-        case LdapClient.LDAP_NO_SUCH_OBJECT:
-            e = new NameNotFoundException(message);
-            break;
-
-        case LdapClient.LDAP_OBJECT_CLASS_MODS_PROHIBITED:
-        case LdapClient.LDAP_OBJECT_CLASS_VIOLATION:
-        case LdapClient.LDAP_NOT_ALLOWED_ON_RDN:
-            e = new SchemaViolationException(message);
-            break;
-
-        case LdapClient.LDAP_NOT_ALLOWED_ON_NON_LEAF:
-            e = new ContextNotEmptyException(message);
-            break;
-
-        case LdapClient.LDAP_OPERATIONS_ERROR:
-            // %%% need new exception ?
-            e = new NamingException(message);
-            break;
-
-        case LdapClient.LDAP_OTHER:
-            e = new NamingException(message);
-            break;
-
-        case LdapClient.LDAP_PROTOCOL_ERROR:
-            e = new CommunicationException(message);
-            break;
-
-        case LdapClient.LDAP_SIZE_LIMIT_EXCEEDED:
-            e = new SizeLimitExceededException(message);
-            break;
-
-        case LdapClient.LDAP_TIME_LIMIT_EXCEEDED:
-            e = new TimeLimitExceededException(message);
-            break;
-
-        case LdapClient.LDAP_UNAVAILABLE_CRITICAL_EXTENSION:
-            e = new OperationNotSupportedException(message);
-            break;
-
-        case LdapClient.LDAP_UNAVAILABLE:
-        case LdapClient.LDAP_BUSY:
-            e = new ServiceUnavailableException(message);
-            break;
-
-        case LdapClient.LDAP_UNDEFINED_ATTRIBUTE_TYPE:
-            e = new InvalidAttributeIdentifierException(message);
-            break;
-
-        case LdapClient.LDAP_UNWILLING_TO_PERFORM:
-            e = new OperationNotSupportedException(message);
-            break;
-
-        case LdapClient.LDAP_COMPARE_FALSE:
-        case LdapClient.LDAP_COMPARE_TRUE:
-        case LdapClient.LDAP_IS_LEAF:
-            // these are really not exceptions and this code probably
-            // never gets executed
-            e = new NamingException(message);
-            break;
-
-        case LdapClient.LDAP_ADMIN_LIMIT_EXCEEDED:
-            e = new LimitExceededException(message);
-            break;
-
-        case LdapClient.LDAP_REFERRAL:
-            e = new NamingException(message);
-            break;
-
-        case LdapClient.LDAP_PARTIAL_RESULTS:
-            e = new NamingException(message);
-            break;
-
-        case LdapClient.LDAP_INVALID_DN_SYNTAX:
-        case LdapClient.LDAP_NAMING_VIOLATION:
-            e = new InvalidNameException(message);
-            break;
-
-        default:
-            e = new NamingException(message);
-            break;
-        }
-
-        return e;
-    }
-
-    // ----------------- Extensions and Controls -------------------
-
-    public ExtendedResponse extendedOperation(ExtendedRequest request)
-        throws NamingException {
-
-        boolean startTLS = (request.getID().equals(STARTTLS_REQ_OID));
-        ensureOpen(startTLS);
-
-        try {
-
-            LdapResult answer =
-                clnt.extendedOp(request.getID(), request.getEncodedValue(),
-                                reqCtls, startTLS);
-            respCtls = answer.resControls; // retrieve response controls
-
-            if (answer.status != LdapClient.LDAP_SUCCESS) {
-                processReturnCode(answer, new CompositeName());
-            }
-            // %%% verify request.getID() == answer.extensionId
-
-            int len = (answer.extensionValue == null) ?
-                        0 :
-                        answer.extensionValue.length;
-
-            ExtendedResponse er =
-                request.createExtendedResponse(answer.extensionId,
-                    answer.extensionValue, 0, len);
-
-            if (er instanceof StartTlsResponseImpl) {
-                // Pass the connection handle to StartTlsResponseImpl
-                String domainName = (String)
-                    (envprops != null ? envprops.get(DOMAIN_NAME) : null);
-                ((StartTlsResponseImpl)er).setConnection(clnt.conn, domainName);
-            }
-            return er;
-
-        } catch (LdapReferralException e) {
-
-            if (handleReferrals == LdapClient.LDAP_REF_THROW)
-                throw e;
-
-            // process the referrals sequentially
-            while (true) {
-
-                LdapReferralContext refCtx =
-                    (LdapReferralContext)e.getReferralContext(envprops, bindCtls);
-
-                // repeat the original operation at the new context
-                try {
-
-                    return refCtx.extendedOperation(request);
-
-                } catch (LdapReferralException re) {
-                    e = re;
-                    continue;
-
-                } finally {
-                    // Make sure we close referral context
-                    refCtx.close();
-                }
-            }
-
-        } catch (IOException e) {
-            NamingException e2 = new CommunicationException(e.getMessage());
-            e2.setRootCause(e);
-            throw e2;
-        }
-    }
-
-    public void setRequestControls(Control[] reqCtls) throws NamingException {
-        if (handleReferrals == LdapClient.LDAP_REF_IGNORE) {
-            this.reqCtls = addControl(reqCtls, manageReferralControl);
-        } else {
-            this.reqCtls = cloneControls(reqCtls);
-        }
-    }
-
-    public Control[] getRequestControls() throws NamingException {
-        return cloneControls(reqCtls);
-    }
-
-    public Control[] getConnectControls() throws NamingException {
-        return cloneControls(bindCtls);
-    }
-
-    public Control[] getResponseControls() throws NamingException {
-        return (respCtls != null)? convertControls(respCtls) : null;
-    }
-
-    /**
-     * Narrow controls using own default factory and ControlFactory.
-     * @param ctls A non-null Vector
-     */
-    Control[] convertControls(Vector ctls) throws NamingException {
-        int count = ctls.size();
-
-        if (count == 0) {
-            return null;
-        }
-
-        Control[] controls = new Control[count];
-
-        for (int i = 0; i < count; i++) {
-            // Try own factory first
-            controls[i] = myResponseControlFactory.getControlInstance(
-                (Control)ctls.elementAt(i));
-
-            // Try assigned factories if own produced null
-            if (controls[i] == null) {
-                controls[i] = ControlFactory.getControlInstance(
-                (Control)ctls.elementAt(i), this, envprops);
-            }
-        }
-        return controls;
-    }
-
-    private static Control[] addControl(Control[] prevCtls, Control addition) {
-        if (prevCtls == null) {
-            return new Control[]{addition};
-        }
-
-        // Find it
-        int found = findControl(prevCtls, addition);
-        if (found != -1) {
-            return prevCtls;  // no need to do it again
-        }
-
-        Control[] newCtls = new Control[prevCtls.length+1];
-        System.arraycopy(prevCtls, 0, newCtls, 0, prevCtls.length);
-        newCtls[prevCtls.length] = addition;
-        return newCtls;
-    }
-
-    private static int findControl(Control[] ctls, Control target) {
-        for (int i = 0; i < ctls.length; i++) {
-            if (ctls[i] == target) {
-                return i;
-            }
-        }
-        return -1;
-    }
-
-    private static Control[] removeControl(Control[] prevCtls, Control target) {
-        if (prevCtls == null) {
-            return null;
-        }
-
-        // Find it
-        int found = findControl(prevCtls, target);
-        if (found == -1) {
-            return prevCtls;  // not there
-        }
-
-        // Remove it
-        Control[] newCtls = new Control[prevCtls.length-1];
-        System.arraycopy(prevCtls, 0, newCtls, 0, found);
-        System.arraycopy(prevCtls, found+1, newCtls, found,
-            prevCtls.length-found-1);
-        return newCtls;
-    }
-
-    private static Control[] cloneControls(Control[] ctls) {
-        if (ctls == null) {
-            return null;
-        }
-        Control[] copiedCtls = new Control[ctls.length];
-        System.arraycopy(ctls, 0, copiedCtls, 0, ctls.length);
-        return copiedCtls;
-    }
-
-    // -------------------- Events ------------------------
-    /*
-     * Access to eventSupport need not be synchronized even though the
-     * Connection thread can access it asynchronously. It is
-     * impossible for a race condition to occur because
-     * eventSupport.addNamingListener() must have been called before
-     * the Connection thread can call back to this ctx.
-     */
-    public void addNamingListener(Name nm, int scope, NamingListener l)
-        throws NamingException {
-            addNamingListener(getTargetName(nm), scope, l);
-    }
-
-    public void addNamingListener(String nm, int scope, NamingListener l)
-        throws NamingException {
-            if (eventSupport == null)
-                eventSupport = new EventSupport(this);
-            eventSupport.addNamingListener(getTargetName(new CompositeName(nm)),
-                scope, l);
-
-            // If first time asking for unsol
-            if (l instanceof UnsolicitedNotificationListener && !unsolicited) {
-                addUnsolicited();
-            }
-    }
-
-    public void removeNamingListener(NamingListener l) throws NamingException {
-        if (eventSupport == null)
-            return; // no activity before, so just return
-
-        eventSupport.removeNamingListener(l);
-
-        // If removing an Unsol listener and it is the last one, let clnt know
-        if (l instanceof UnsolicitedNotificationListener &&
-            !eventSupport.hasUnsolicited()) {
-            removeUnsolicited();
-        }
-    }
-
-    public void addNamingListener(String nm, String filter, SearchControls ctls,
-        NamingListener l) throws NamingException {
-            if (eventSupport == null)
-                eventSupport = new EventSupport(this);
-            eventSupport.addNamingListener(getTargetName(new CompositeName(nm)),
-                filter, cloneSearchControls(ctls), l);
-
-            // If first time asking for unsol
-            if (l instanceof UnsolicitedNotificationListener && !unsolicited) {
-                addUnsolicited();
-            }
-    }
-
-    public void addNamingListener(Name nm, String filter, SearchControls ctls,
-        NamingListener l) throws NamingException {
-            addNamingListener(getTargetName(nm), filter, ctls, l);
-    }
-
-    public void addNamingListener(Name nm, String filter, Object[] filterArgs,
-        SearchControls ctls, NamingListener l) throws NamingException {
-            addNamingListener(getTargetName(nm), filter, filterArgs, ctls, l);
-    }
-
-    public void addNamingListener(String nm, String filterExpr, Object[] filterArgs,
-        SearchControls ctls, NamingListener l) throws NamingException {
-        String strfilter = SearchFilter.format(filterExpr, filterArgs);
-        addNamingListener(getTargetName(new CompositeName(nm)), strfilter, ctls, l);
-    }
-
-    public boolean targetMustExist() {
-        return true;
-    }
-
-    /**
-     * Retrieves the target name for which the listener is registering.
-     * If nm is a CompositeName, use its first and only component. It
-     * cannot have more than one components because a target be outside of
-     * this namespace. If nm is not a CompositeName, then treat it as a
-     * compound name.
-     * @param nm The non-null target name.
-     */
-    private static String getTargetName(Name nm) throws NamingException {
-        if (nm instanceof CompositeName) {
-            if (nm.size() > 1) {
-                throw new InvalidNameException(
-                    "Target cannot span multiple namespaces: " + nm);
-            } else if (nm.size() == 0) {
-                return "";
-            } else {
-                return nm.get(0);
-            }
-        } else {
-            // treat as compound name
-            return nm.toString();
-        }
-    }
-
-    // ------------------ Unsolicited Notification ---------------
-    // package private methods for handling unsolicited notification
-
-    /**
-     * Registers this context with the underlying LdapClient.
-     * When the underlying LdapClient receives an unsolicited notification,
-     * it will invoke LdapCtx.fireUnsolicited() so that this context
-     * can (using EventSupport) notified any registered listeners.
-     * This method is called by EventSupport when an unsolicited listener
-     * first registers with this context (should be called just once).
-     * @see #removeUnsolicited
-     * @see #fireUnsolicited
-     */
-    private void addUnsolicited() throws NamingException {
-        if (debug) {
-            System.out.println("LdapCtx.addUnsolicited: " + this);
-        }
-
-        // addNamingListener must have created EventSupport already
-        ensureOpen();
-        synchronized (eventSupport) {
-            clnt.addUnsolicited(this);
-            unsolicited = true;
-        }
-    }
-
-    /**
-     * Removes this context from registering interest in unsolicited
-     * notifications from the underlying LdapClient. This method is called
-     * under any one of the following conditions:
-     * <ul>
-     * <li>All unsolicited listeners have been removed. (see removingNamingListener)
-     * <li>This context is closed.
-     * <li>This context's underlying LdapClient changes.
-     *</ul>
-     * After this method has been called, this context will not pass
-     * on any events related to unsolicited notifications to EventSupport and
-     * and its listeners.
-     */
-
-    private void removeUnsolicited() {
-        if (debug) {
-            System.out.println("LdapCtx.removeUnsolicited: " + unsolicited);
-        }
-        if (eventSupport == null) {
-            return;
-        }
-
-        // addNamingListener must have created EventSupport already
-        synchronized(eventSupport) {
-            if (unsolicited && clnt != null) {
-                clnt.removeUnsolicited(this);
-            }
-            unsolicited = false;
-        }
-    }
-
-    /**
-     * Uses EventSupport to fire an event related to an unsolicited notification.
-     * Called by LdapClient when LdapClient receives an unsolicited notification.
-     */
-    void fireUnsolicited(Object obj) {
-        if (debug) {
-            System.out.println("LdapCtx.fireUnsolicited: " + obj);
-        }
-        // addNamingListener must have created EventSupport already
-        synchronized(eventSupport) {
-            if (unsolicited) {
-                eventSupport.fireUnsolicited(obj);
-
-                if (obj instanceof NamingException) {
-                    unsolicited = false;
-                    // No need to notify clnt because clnt is the
-                    // only one that can fire a NamingException to
-                    // unsol listeners and it will handle its own cleanup
-                }
-            }
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/ldap/LdapCtxFactory.java b/ojluni/src/main/java/com/sun/jndi/ldap/LdapCtxFactory.java
deleted file mode 100755
index 7e18fe6..0000000
--- a/ojluni/src/main/java/com/sun/jndi/ldap/LdapCtxFactory.java
+++ /dev/null
@@ -1,264 +0,0 @@
-/*
- * Copyright (c) 1999, 2006, 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.jndi.ldap;
-
-import java.util.Hashtable;
-import java.util.Vector;
-import java.util.Enumeration;
-import java.net.MalformedURLException;
-
-import javax.naming.*;
-import javax.naming.directory.*;
-import javax.naming.spi.ObjectFactory;
-import javax.naming.spi.InitialContextFactory;
-import javax.naming.ldap.Control;
-
-import com.sun.jndi.url.ldap.ldapURLContextFactory;
-
-final public class LdapCtxFactory implements ObjectFactory, InitialContextFactory {
-    /**
-     * The type of each address in an LDAP reference.
-     */
-    public final static String ADDRESS_TYPE = "URL";
-
-    // ----------------- ObjectFactory interface --------------------
-
-    public Object getObjectInstance(Object ref, Name name, Context nameCtx,
-        Hashtable<?,?> env) throws Exception {
-
-        if (!isLdapRef(ref)) {
-            return null;
-        }
-        ObjectFactory factory = new ldapURLContextFactory();
-        String[] urls = getURLs((Reference)ref);
-        return factory.getObjectInstance(urls, name, nameCtx, env);
-    }
-
-    // ----------------- InitialContext interface  --------------------
-
-    public Context getInitialContext(Hashtable<?,?> envprops)
-        throws NamingException {
-
-        try {
-            String providerUrl = (envprops != null) ?
-                (String)envprops.get(Context.PROVIDER_URL) : null;
-
-            // If URL not in environment, use defaults
-            if (providerUrl == null) {
-                return new LdapCtx("", LdapCtx.DEFAULT_HOST,
-                    LdapCtx.DEFAULT_PORT, envprops, false);
-            }
-
-            // Extract URL(s)
-            String[] urls = LdapURL.fromList(providerUrl);
-
-            if (urls.length == 0) {
-                throw new ConfigurationException(Context.PROVIDER_URL +
-                    " property does not contain a URL");
-            }
-
-            // Generate an LDAP context
-            return getLdapCtxInstance(urls, envprops);
-
-        } catch (LdapReferralException e) {
-
-            if (envprops != null &&
-                "throw".equals(envprops.get(Context.REFERRAL))) {
-                throw e;
-            }
-
-            Control[] bindCtls = (envprops != null)?
-                (Control[])envprops.get(LdapCtx.BIND_CONTROLS) : null;
-
-            return (LdapCtx)e.getReferralContext(envprops, bindCtls);
-        }
-    }
-
-    /**
-     * Returns true if argument is an LDAP reference.
-     */
-    private static boolean isLdapRef(Object obj) {
-
-        if (!(obj instanceof Reference)) {
-            return false;
-        }
-        String thisClassName = LdapCtxFactory.class.getName();
-        Reference ref = (Reference)obj;
-
-        return thisClassName.equals(ref.getFactoryClassName());
-    }
-
-    /**
-     * Returns the URLs contained within an LDAP reference.
-     */
-    private static String[] getURLs(Reference ref) throws NamingException {
-
-        int size = 0;   // number of URLs
-        String[] urls = new String[ref.size()];
-
-        Enumeration addrs = ref.getAll();
-        while (addrs.hasMoreElements()) {
-            RefAddr addr = (RefAddr)addrs.nextElement();
-
-            if ((addr instanceof StringRefAddr) &&
-                addr.getType().equals(ADDRESS_TYPE)) {
-
-                urls[size++] = (String)addr.getContent();
-            }
-        }
-        if (size == 0) {
-            throw (new ConfigurationException(
-                    "Reference contains no valid addresses"));
-        }
-
-        // Trim URL array down to size.
-        if (size == ref.size()) {
-            return urls;
-        }
-        String[] urls2 = new String[size];
-        System.arraycopy(urls, 0, urls2, 0, size);
-        return urls2;
-    }
-
-    // ------------ Utilities used by other classes ----------------
-
-    public static DirContext getLdapCtxInstance(Object urlInfo, Hashtable env)
-            throws NamingException {
-
-        if (urlInfo instanceof String) {
-            return getUsingURL((String)urlInfo, env);
-        } else if (urlInfo instanceof String[]) {
-            return getUsingURLs((String[])urlInfo, env);
-        } else {
-            throw new IllegalArgumentException(
-                "argument must be an LDAP URL String or array of them");
-        }
-    }
-
-    private static DirContext getUsingURL(String url, Hashtable env)
-            throws NamingException {
-        DirContext ctx = null;
-        LdapURL ldapUrl = new LdapURL(url);
-        String dn = ldapUrl.getDN();
-        String host = ldapUrl.getHost();
-        int port = ldapUrl.getPort();
-        String[] hostports;
-        String domainName = null;
-
-        // handle a URL with no hostport (ldap:/// or ldaps:///)
-        // locate the LDAP service using the URL's distinguished name
-        if (host == null &&
-            port == -1 &&
-            dn != null &&
-            (domainName = ServiceLocator.mapDnToDomainName(dn)) != null &&
-            (hostports = ServiceLocator.getLdapService(domainName, env))
-                != null) {
-            // Generate new URLs that include the discovered hostports.
-            // Reuse the original URL scheme.
-            String scheme = ldapUrl.getScheme() + "://";
-            String[] newUrls = new String[hostports.length];
-            String query = ldapUrl.getQuery();
-            String urlSuffix = ldapUrl.getPath() + (query != null ? query : "");
-            for (int i = 0; i < hostports.length; i++) {
-                newUrls[i] = scheme + hostports[i] + urlSuffix;
-            }
-            ctx = getUsingURLs(newUrls, env);
-            // Associate the derived domain name with the context
-            ((LdapCtx)ctx).setDomainName(domainName);
-
-        } else {
-            ctx = new LdapCtx(dn, host, port, env, ldapUrl.useSsl());
-            // Record the URL that created the context
-            ((LdapCtx)ctx).setProviderUrl(url);
-        }
-        return ctx;
-    }
-
-    /*
-     * Try each URL until one of them succeeds.
-     * If all URLs fail, throw one of the exceptions arbitrarily.
-     * Not pretty, but potentially more informative than returning null.
-     */
-    private static DirContext getUsingURLs(String[] urls, Hashtable env)
-            throws NamingException {
-        NamingException ne = null;
-        DirContext ctx = null;
-        for (int i = 0; i < urls.length; i++) {
-            try {
-                return getUsingURL(urls[i], env);
-            } catch (AuthenticationException e) {
-                throw e;
-            } catch (NamingException e) {
-                ne = e;
-            }
-        }
-        throw ne;
-    }
-
-    /**
-     * Used by Obj and obj/RemoteToAttrs too so must be public
-     */
-    public static Attribute createTypeNameAttr(Class cl) {
-        Vector v = new Vector(10);
-        String[] types = getTypeNames(cl, v);
-        if (types.length > 0) {
-            BasicAttribute tAttr =
-                new BasicAttribute(Obj.JAVA_ATTRIBUTES[Obj.TYPENAME]);
-            for (int i = 0; i < types.length; i++) {
-                tAttr.add(types[i]);
-            }
-            return tAttr;
-        }
-        return null;
-    }
-
-    private static String[] getTypeNames(Class currentClass, Vector v) {
-
-        getClassesAux(currentClass, v);
-        Class[] members = currentClass.getInterfaces();
-        for (int i = 0; i < members.length; i++) {
-            getClassesAux(members[i], v);
-        }
-        String[] ret = new String[v.size()];
-        int i = 0;
-        for (java.util.Enumeration e = v.elements(); e.hasMoreElements();) {
-            ret[i++] = (String)e.nextElement();
-        }
-        return ret;
-    }
-
-    private static void getClassesAux(Class currentClass, Vector v) {
-        if (!v.contains(currentClass.getName())) {
-            v.addElement(currentClass.getName());
-        }
-        currentClass = currentClass.getSuperclass();
-
-        while (currentClass != null) {
-            getTypeNames(currentClass, v);
-            currentClass = currentClass.getSuperclass();
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/ldap/LdapEntry.java b/ojluni/src/main/java/com/sun/jndi/ldap/LdapEntry.java
deleted file mode 100755
index 495137f..0000000
--- a/ojluni/src/main/java/com/sun/jndi/ldap/LdapEntry.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (c) 1999, 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.jndi.ldap;
-
-import java.util.Vector;
-import javax.naming.directory.Attributes;
-import javax.naming.directory.Attribute;
-
-/**
-  * A holder for an LDAP entry read from an LDAP server.
-  *
-  * @author Jagane Sundar
-  * @author Vincent Ryan
-  */
-final class LdapEntry {
-    String DN;
-    Attributes attributes;
-    Vector respCtls = null;
-
-    LdapEntry(String DN, Attributes attrs) {
-        this.DN = DN;
-        this.attributes = attrs;
-    }
-
-    LdapEntry(String DN, Attributes attrs, Vector respCtls) {
-        this.DN = DN;
-        this.attributes = attrs;
-        this.respCtls = respCtls;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/ldap/LdapName.java b/ojluni/src/main/java/com/sun/jndi/ldap/LdapName.java
deleted file mode 100755
index 11445ab..0000000
--- a/ojluni/src/main/java/com/sun/jndi/ldap/LdapName.java
+++ /dev/null
@@ -1,1017 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-package com.sun.jndi.ldap;
-
-
-import java.util.Enumeration;
-import java.util.Vector;
-
-import javax.naming.*;
-import javax.naming.directory.Attributes;
-import javax.naming.directory.Attribute;
-import javax.naming.directory.BasicAttributes;
-
-
-/**
- * <code>LdapName</code> implements compound names for LDAP v3 as
- * specified by RFC 2253.
- *<p>
- * RFC 2253 has a few ambiguities and outright inconsistencies.  These
- * are resolved as follows:
- * <ul>
- * <li> RFC 2253 leaves the term "whitespace" undefined.  The
- *      definition of "optional-space" given in RFC 1779 is used in
- *      its place:  either a space character or a carriage return ("\r").
- * <li> Whitespace is allowed on either side of ',', ';', '=', and '+'.
- *      Such whitespace is accepted but not generated by this code,
- *      and is ignored when comparing names.
- * <li> AttributeValue strings containing '=' or non-leading '#'
- *      characters (unescaped) are accepted.
- * </ul>
- *<p>
- * String names passed to <code>LdapName</code> or returned by it
- * use the full 16-bit Unicode character set.  They may also contain
- * characters encoded into UTF-8 with each octet represented by a
- * three-character substring such as "\\B4".
- * They may not, however, contain characters encoded into UTF-8 with
- * each octet represented by a single character in the string:  the
- * meaning would be ambiguous.
- *<p>
- * <code>LdapName</code> will properly parse all valid names, but
- * does not attempt to detect all possible violations when parsing
- * invalid names.  It's "generous".
- *<p>
- * When names are tested for equality, attribute types and binary
- * values are case-insensitive, and string values are by default
- * case-insensitive.
- * String values with different but equivalent usage of quoting,
- * escaping, or UTF8-hex-encoding are considered equal.  The order of
- * components in multi-valued RDNs (such as "ou=Sales+cn=Bob") is not
- * significant.
- *
- * @author Scott Seligman
- */
-
-public final class LdapName implements Name {
-
-    private transient String unparsed;  // if non-null, the DN in unparsed form
-    private transient Vector rdns;      // parsed name components
-    private transient boolean valuesCaseSensitive = false;
-
-    /**
-     * Constructs an LDAP name from the given DN.
-     *
-     * @param name      An LDAP DN.  To JNDI, a compound name.
-     *
-     * @throws InvalidNameException if a syntax violation is detected.
-     */
-    public LdapName(String name) throws InvalidNameException {
-        unparsed = name;
-        parse();
-    }
-
-    /*
-     * Constructs an LDAP name given its parsed components and, optionally
-     * (if "name" is not null), the unparsed DN.
-     */
-    private LdapName(String name, Vector rdns) {
-        unparsed = name;
-        this.rdns = (Vector)rdns.clone();
-    }
-
-    /*
-     * Constructs an LDAP name given its parsed components (the elements
-     * of "rdns" in the range [beg,end)) and, optionally
-     * (if "name" is not null), the unparsed DN.
-     */
-    private LdapName(String name, Vector rdns, int beg, int end) {
-        unparsed = name;
-        this.rdns = new Vector();
-        for (int i = beg; i < end; i++) {
-            this.rdns.addElement(rdns.elementAt(i));
-        }
-    }
-
-
-    public Object clone() {
-        return new LdapName(unparsed, rdns);
-    }
-
-    public String toString() {
-        if (unparsed != null) {
-            return unparsed;
-        }
-
-        StringBuffer buf = new StringBuffer();
-        for (int i = rdns.size() - 1; i >= 0; i--) {
-            if (i < rdns.size() - 1) {
-                buf.append(',');
-            }
-            Rdn rdn = (Rdn)rdns.elementAt(i);
-            buf.append(rdn);
-        }
-
-        unparsed = new String(buf);
-        return unparsed;
-    }
-
-    public boolean equals(Object obj) {
-        return ((obj instanceof LdapName) &&
-                (compareTo(obj) == 0));
-    }
-
-    public int compareTo(Object obj) {
-        LdapName that = (LdapName)obj;
-
-        if ((obj == this) ||                    // check possible shortcuts
-            (unparsed != null && unparsed.equals(that.unparsed))) {
-            return 0;
-        }
-
-        // Compare RDNs one by one, lexicographically.
-        int minSize = Math.min(rdns.size(), that.rdns.size());
-        for (int i = 0 ; i < minSize; i++) {
-            // Compare a single pair of RDNs.
-            Rdn rdn1 = (Rdn)rdns.elementAt(i);
-            Rdn rdn2 = (Rdn)that.rdns.elementAt(i);
-
-            int diff = rdn1.compareTo(rdn2);
-            if (diff != 0) {
-                return diff;
-            }
-        }
-        return (rdns.size() - that.rdns.size());        // longer DN wins
-    }
-
-    public int hashCode() {
-        // Sum up the hash codes of the components.
-        int hash = 0;
-
-        // For each RDN...
-        for (int i = 0; i < rdns.size(); i++) {
-            Rdn rdn = (Rdn)rdns.elementAt(i);
-            hash += rdn.hashCode();
-        }
-        return hash;
-    }
-
-    public int size() {
-        return rdns.size();
-    }
-
-    public boolean isEmpty() {
-        return rdns.isEmpty();
-    }
-
-    public Enumeration getAll() {
-        final Enumeration enum_ = rdns.elements();
-
-        return new Enumeration () {
-            public boolean hasMoreElements() {
-                return enum_.hasMoreElements();
-            }
-            public Object nextElement() {
-                return enum_.nextElement().toString();
-            }
-        };
-    }
-
-    public String get(int pos) {
-        return rdns.elementAt(pos).toString();
-    }
-
-    public Name getPrefix(int pos) {
-        return new LdapName(null, rdns, 0, pos);
-    }
-
-    public Name getSuffix(int pos) {
-        return new LdapName(null, rdns, pos, rdns.size());
-    }
-
-    public boolean startsWith(Name n) {
-        int len1 = rdns.size();
-        int len2 = n.size();
-        return (len1 >= len2 &&
-                matches(0, len2, n));
-    }
-
-    public boolean endsWith(Name n) {
-        int len1 = rdns.size();
-        int len2 = n.size();
-        return (len1 >= len2 &&
-                matches(len1 - len2, len1, n));
-    }
-
-    /**
-     * Controls whether string-values are treated as case-sensitive
-     * when the string values within names are compared.  The default
-     * behavior is case-insensitive comparison.
-     */
-     public void setValuesCaseSensitive(boolean caseSensitive) {
-         toString();
-         rdns = null;   // clear any cached information
-         try {
-             parse();
-         } catch (InvalidNameException e) {
-             // shouldn't happen
-             throw new IllegalStateException("Cannot parse name: " + unparsed);
-         }
-         valuesCaseSensitive = caseSensitive;
-     }
-
-    /*
-     * Helper method for startsWith() and endsWith().
-     * Returns true if components [beg,end) match the components of "n".
-     * If "n" is not an LdapName, each of its components is parsed as
-     * the string form of an RDN.
-     * The following must hold:  end - beg == n.size().
-     */
-    private boolean matches(int beg, int end, Name n) {
-        for (int i = beg; i < end; i++) {
-            Rdn rdn;
-            if (n instanceof LdapName) {
-                LdapName ln = (LdapName)n;
-                rdn = (Rdn)ln.rdns.elementAt(i - beg);
-            } else {
-                String rdnString = n.get(i - beg);
-                try {
-                    rdn = (new DnParser(rdnString, valuesCaseSensitive)).getRdn();
-                } catch (InvalidNameException e) {
-                    return false;
-                }
-            }
-
-            if (!rdn.equals(rdns.elementAt(i))) {
-                return false;
-            }
-        }
-        return true;
-    }
-
-    public Name addAll(Name suffix) throws InvalidNameException {
-        return addAll(size(), suffix);
-    }
-
-    /*
-     * If "suffix" is not an LdapName, each of its components is parsed as
-     * the string form of an RDN.
-     */
-    public Name addAll(int pos, Name suffix) throws InvalidNameException {
-        if (suffix instanceof LdapName) {
-            LdapName s = (LdapName)suffix;
-            for (int i = 0; i < s.rdns.size(); i++) {
-                rdns.insertElementAt(s.rdns.elementAt(i), pos++);
-            }
-        } else {
-            Enumeration comps = suffix.getAll();
-            while (comps.hasMoreElements()) {
-                DnParser p = new DnParser((String)comps.nextElement(),
-                    valuesCaseSensitive);
-                rdns.insertElementAt(p.getRdn(), pos++);
-            }
-        }
-        unparsed = null;                                // no longer valid
-        return this;
-    }
-
-    public Name add(String comp) throws InvalidNameException {
-        return add(size(), comp);
-    }
-
-    public Name add(int pos, String comp) throws InvalidNameException {
-        Rdn rdn = (new DnParser(comp, valuesCaseSensitive)).getRdn();
-        rdns.insertElementAt(rdn, pos);
-        unparsed = null;                                // no longer valid
-        return this;
-    }
-
-    public Object remove(int pos) throws InvalidNameException {
-        String comp = get(pos);
-        rdns.removeElementAt(pos);
-        unparsed = null;                                // no longer valid
-        return comp;
-    }
-
-
-    private void parse() throws InvalidNameException {
-        rdns = (new DnParser(unparsed, valuesCaseSensitive)).getDn();
-    }
-
-    /*
-     * Best guess as to what RFC 2253 means by "whitespace".
-     */
-    private static boolean isWhitespace(char c) {
-        return (c == ' ' || c == '\r');
-    }
-
-    /**
-     * Given the value of an attribute, returns a string suitable
-     * for inclusion in a DN.  If the value is a string, this is
-     * accomplished by using backslash (\) to escape the following
-     * characters:
-     *<ul>
-     *<li>leading and trailing whitespace
-     *<li><pre>, = + < > # ; " \</pre>
-     *</ul>
-     * If the value is a byte array, it is converted to hex
-     * notation (such as "#CEB1DF80").
-     */
-    public static String escapeAttributeValue(Object val) {
-        return TypeAndValue.escapeValue(val);
-    }
-
-    /**
-     * Given an attribute value formated according to RFC 2253,
-     * returns the unformated value.  Returns a string value as
-     * a string, and a binary value as a byte array.
-     */
-    public static Object unescapeAttributeValue(String val) {
-        return TypeAndValue.unescapeValue(val);
-    }
-
-    /**
-     * Serializes only the unparsed DN, for compactness and to avoid
-     * any implementation dependency.
-     *
-     * @serialdata      The DN string and a boolean indicating whether
-     * the values are case sensitive.
-     */
-    private void writeObject(java.io.ObjectOutputStream s)
-            throws java.io.IOException {
-        s.writeObject(toString());
-        s.writeBoolean(valuesCaseSensitive);
-    }
-
-    private void readObject(java.io.ObjectInputStream s)
-            throws java.io.IOException, ClassNotFoundException {
-        unparsed = (String)s.readObject();
-        valuesCaseSensitive = s.readBoolean();
-        try {
-            parse();
-        } catch (InvalidNameException e) {
-            // shouldn't happen
-            throw new java.io.StreamCorruptedException(
-                    "Invalid name: " + unparsed);
-        }
-    }
-
-    static final long serialVersionUID = -1595520034788997356L;
-
-
-    /*
-     * DnParser implements a recursive descent parser for a single DN.
-     */
-    static class DnParser {
-
-        private final String name;      // DN being parsed
-        private final char[] chars;     // characters in LDAP name being parsed
-        private final int len;          // length of "chars"
-        private int cur = 0;            // index of first unconsumed char in "chars"
-        private boolean valuesCaseSensitive;
-
-        /*
-         * Given an LDAP DN in string form, returns a parser for it.
-         */
-        DnParser(String name, boolean valuesCaseSensitive)
-            throws InvalidNameException {
-            this.name = name;
-            len = name.length();
-            chars = name.toCharArray();
-            this.valuesCaseSensitive = valuesCaseSensitive;
-        }
-
-        /*
-         * Parses the DN, returning a Vector of its RDNs.
-         */
-        Vector getDn() throws InvalidNameException {
-            cur = 0;
-            Vector rdns = new Vector(len / 3 + 10);  // leave room for growth
-
-            if (len == 0) {
-                return rdns;
-            }
-
-            rdns.addElement(parseRdn());
-            while (cur < len) {
-                if (chars[cur] == ',' || chars[cur] == ';') {
-                    ++cur;
-                    rdns.insertElementAt(parseRdn(), 0);
-                } else {
-                    throw new InvalidNameException("Invalid name: " + name);
-                }
-            }
-            return rdns;
-        }
-
-        /*
-         * Parses the DN, if it is known to contain a single RDN.
-         */
-        Rdn getRdn() throws InvalidNameException {
-            Rdn rdn = parseRdn();
-            if (cur < len) {
-                throw new InvalidNameException("Invalid RDN: " + name);
-            }
-            return rdn;
-        }
-
-        /*
-         * Parses the next RDN and returns it.  Throws an exception if
-         * none is found.  Leading and trailing whitespace is consumed.
-         */
-        private Rdn parseRdn() throws InvalidNameException {
-
-            Rdn rdn = new Rdn();
-            while (cur < len) {
-                consumeWhitespace();
-                String attrType = parseAttrType();
-                consumeWhitespace();
-                if (cur >= len || chars[cur] != '=') {
-                    throw new InvalidNameException("Invalid name: " + name);
-                }
-                ++cur;          // consume '='
-                consumeWhitespace();
-                String value = parseAttrValue();
-                consumeWhitespace();
-
-                rdn.add(new TypeAndValue(attrType, value, valuesCaseSensitive));
-                if (cur >= len || chars[cur] != '+') {
-                    break;
-                }
-                ++cur;          // consume '+'
-            }
-            return rdn;
-        }
-
-        /*
-         * Returns the attribute type that begins at the next unconsumed
-         * char.  No leading whitespace is expected.
-         * This routine is more generous than RFC 2253.  It accepts
-         * attribute types composed of any nonempty combination of Unicode
-         * letters, Unicode digits, '.', '-', and internal space characters.
-         */
-        private String parseAttrType() throws InvalidNameException {
-
-            final int beg = cur;
-            while (cur < len) {
-                char c = chars[cur];
-                if (Character.isLetterOrDigit(c) ||
-                      c == '.' ||
-                      c == '-' ||
-                      c == ' ') {
-                    ++cur;
-                } else {
-                    break;
-                }
-            }
-            // Back out any trailing spaces.
-            while ((cur > beg) && (chars[cur - 1] == ' ')) {
-                --cur;
-            }
-
-            if (beg == cur) {
-                throw new InvalidNameException("Invalid name: " + name);
-            }
-            return new String(chars, beg, cur - beg);
-        }
-
-        /*
-         * Returns the attribute value that begins at the next unconsumed
-         * char.  No leading whitespace is expected.
-         */
-        private String parseAttrValue() throws InvalidNameException {
-
-            if (cur < len && chars[cur] == '#') {
-                return parseBinaryAttrValue();
-            } else if (cur < len && chars[cur] == '"') {
-                return parseQuotedAttrValue();
-            } else {
-                return parseStringAttrValue();
-            }
-        }
-
-        private String parseBinaryAttrValue() throws InvalidNameException {
-            final int beg = cur;
-            ++cur;                      // consume '#'
-            while (cur < len &&
-                   Character.isLetterOrDigit(chars[cur])) {
-                ++cur;
-            }
-            return new String(chars, beg, cur - beg);
-        }
-
-        private String parseQuotedAttrValue() throws InvalidNameException {
-
-            final int beg = cur;
-            ++cur;                      // consume '"'
-
-            while ((cur < len) && chars[cur] != '"') {
-                if (chars[cur] == '\\') {
-                    ++cur;              // consume backslash, then what follows
-                }
-                ++cur;
-            }
-            if (cur >= len) {   // no closing quote
-                throw new InvalidNameException("Invalid name: " + name);
-            }
-            ++cur       ;       // consume closing quote
-
-            return new String(chars, beg, cur - beg);
-        }
-
-        private String parseStringAttrValue() throws InvalidNameException {
-
-            final int beg = cur;
-            int esc = -1;       // index of the most recently escaped character
-
-            while ((cur < len) && !atTerminator()) {
-                if (chars[cur] == '\\') {
-                    ++cur;              // consume backslash, then what follows
-                    esc = cur;
-                }
-                ++cur;
-            }
-            if (cur > len) {            // 'twas backslash followed by nothing
-                throw new InvalidNameException("Invalid name: " + name);
-            }
-
-            // Trim off (unescaped) trailing whitespace.
-            int end;
-            for (end = cur; end > beg; end--) {
-                if (!isWhitespace(chars[end - 1]) || (esc == end - 1)) {
-                    break;
-                }
-            }
-            return new String(chars, beg, end - beg);
-        }
-
-        private void consumeWhitespace() {
-            while ((cur < len) && isWhitespace(chars[cur])) {
-                ++cur;
-            }
-        }
-
-        /*
-         * Returns true if next unconsumed character is one that terminates
-         * a string attribute value.
-         */
-        private boolean atTerminator() {
-            return (cur < len &&
-                    (chars[cur] == ',' ||
-                     chars[cur] == ';' ||
-                     chars[cur] == '+'));
-        }
-    }
-
-
-    /*
-     * Class Rdn represents a set of TypeAndValue.
-     */
-    static class Rdn {
-
-        /*
-         * A vector of the TypeAndValue elements of this Rdn.
-         * It is sorted to facilitate set operations.
-         */
-        private final Vector tvs = new Vector();
-
-        void add(TypeAndValue tv) {
-
-            // Set i to index of first element greater than tv, or to
-            // tvs.size() if there is none.
-            int i;
-            for (i = 0; i < tvs.size(); i++) {
-                int diff = tv.compareTo(tvs.elementAt(i));
-                if (diff == 0) {
-                    return;             // tv is a duplicate:  ignore it
-                } else if (diff < 0) {
-                    break;
-                }
-            }
-
-            tvs.insertElementAt(tv, i);
-        }
-
-        public String toString() {
-            StringBuffer buf = new StringBuffer();
-            for (int i = 0; i < tvs.size(); i++) {
-                if (i > 0) {
-                    buf.append('+');
-                }
-                buf.append(tvs.elementAt(i));
-            }
-            return new String(buf);
-        }
-
-        public boolean equals(Object obj) {
-            return ((obj instanceof Rdn) &&
-                    (compareTo(obj) == 0));
-        }
-
-        // Compare TypeAndValue components one by one, lexicographically.
-        public int compareTo(Object obj) {
-            Rdn that = (Rdn)obj;
-            int minSize = Math.min(tvs.size(), that.tvs.size());
-            for (int i = 0; i < minSize; i++) {
-                // Compare a single pair of type/value pairs.
-                TypeAndValue tv = (TypeAndValue)tvs.elementAt(i);
-                int diff = tv.compareTo(that.tvs.elementAt(i));
-                if (diff != 0) {
-                    return diff;
-                }
-            }
-            return (tvs.size() - that.tvs.size());      // longer RDN wins
-        }
-
-        public int hashCode() {
-            // Sum up the hash codes of the components.
-            int hash = 0;
-
-            // For each type/value pair...
-            for (int i = 0; i < tvs.size(); i++) {
-                hash += tvs.elementAt(i).hashCode();
-            }
-            return hash;
-        }
-
-        Attributes toAttributes() {
-            Attributes attrs = new BasicAttributes(true);
-            TypeAndValue tv;
-            Attribute attr;
-
-            for (int i = 0; i < tvs.size(); i++) {
-                tv = (TypeAndValue) tvs.elementAt(i);
-                if ((attr = attrs.get(tv.getType())) == null) {
-                    attrs.put(tv.getType(), tv.getUnescapedValue());
-                } else {
-                    attr.add(tv.getUnescapedValue());
-                }
-            }
-            return attrs;
-        }
-    }
-
-
-    /*
-     * Class TypeAndValue represents an attribute type and its
-     * corresponding value.
-     */
-    static class TypeAndValue {
-
-        private final String type;
-        private final String value;             // value, escaped or quoted
-        private final boolean binary;
-        private final boolean valueCaseSensitive;
-
-        // If non-null, a canonical represention of the value suitable
-        // for comparison using String.compareTo().
-        private String comparable = null;
-
-        TypeAndValue(String type, String value, boolean valueCaseSensitive) {
-            this.type = type;
-            this.value = value;
-            binary = value.startsWith("#");
-            this.valueCaseSensitive = valueCaseSensitive;
-        }
-
-        public String toString() {
-            return (type + "=" + value);
-        }
-
-        public int compareTo(Object obj) {
-            // NB: Any change here affecting equality must be
-            //     reflected in hashCode().
-
-            TypeAndValue that = (TypeAndValue)obj;
-
-            int diff = type.toUpperCase().compareTo(that.type.toUpperCase());
-            if (diff != 0) {
-                return diff;
-            }
-            if (value.equals(that.value)) {     // try shortcut
-                return 0;
-            }
-            return getValueComparable().compareTo(that.getValueComparable());
-        }
-
-        public boolean equals(Object obj) {
-            // NB:  Any change here must be reflected in hashCode().
-            if (!(obj instanceof TypeAndValue)) {
-                return false;
-            }
-            TypeAndValue that = (TypeAndValue)obj;
-            return (type.equalsIgnoreCase(that.type) &&
-                    (value.equals(that.value) ||
-                     getValueComparable().equals(that.getValueComparable())));
-        }
-
-        public int hashCode() {
-            // If two objects are equal, their hash codes must match.
-            return (type.toUpperCase().hashCode() +
-                    getValueComparable().hashCode());
-        }
-
-        /*
-         * Returns the type.
-         */
-        String getType() {
-            return type;
-        }
-
-        /*
-         * Returns the unescaped value.
-         */
-        Object getUnescapedValue() {
-            return unescapeValue(value);
-        }
-
-        /*
-         * Returns a canonical representation of "value" suitable for
-         * comparison using String.compareTo().  If "value" is a string,
-         * it is returned with escapes and quotes stripped away, and
-         * hex-encoded UTF-8 converted to 16-bit Unicode chars.
-         * If value's case is to be ignored, it is returned in uppercase.
-         * If "value" is binary, it is returned in uppercase but
-         * otherwise unmodified.
-         */
-        private String getValueComparable() {
-            if (comparable != null) {
-                return comparable;      // return cached result
-            }
-
-            // cache result
-            if (binary) {
-                comparable = value.toUpperCase();
-            } else {
-                comparable = (String)unescapeValue(value);
-                if (!valueCaseSensitive) {
-                    comparable = comparable.toUpperCase(); // ignore case
-                }
-            }
-            return comparable;
-        }
-
-        /*
-         * Given the value of an attribute, returns a string suitable
-         * for inclusion in a DN.
-         */
-        static String escapeValue(Object val) {
-            return (val instanceof byte[])
-                ? escapeBinaryValue((byte[])val)
-                : escapeStringValue((String)val);
-        }
-
-        /*
-         * Given the value of a string-valued attribute, returns a
-         * string suitable for inclusion in a DN.  This is accomplished by
-         * using backslash (\) to escape the following characters:
-         *      leading and trailing whitespace
-         *      , = + < > # ; " \
-         */
-        private static String escapeStringValue(String val) {
-
-            final String escapees = ",=+<>#;\"\\";
-            char[] chars = val.toCharArray();
-            StringBuffer buf = new StringBuffer(2 * val.length());
-
-            // Find leading and trailing whitespace.
-            int lead;   // index of first char that is not leading whitespace
-            for (lead = 0; lead < chars.length; lead++) {
-                if (!isWhitespace(chars[lead])) {
-                    break;
-                }
-            }
-            int trail;  // index of last char that is not trailing whitespace
-            for (trail = chars.length - 1; trail >= 0; trail--) {
-                if (!isWhitespace(chars[trail])) {
-                    break;
-                }
-            }
-
-            for (int i = 0; i < chars.length; i++) {
-                char c = chars[i];
-                if ((i < lead) || (i > trail) || (escapees.indexOf(c) >= 0)) {
-                    buf.append('\\');
-                }
-                buf.append(c);
-            }
-            return new String(buf);
-        }
-
-        /*
-         * Given the value of a binary attribute, returns a string
-         * suitable for inclusion in a DN (such as "#CEB1DF80").
-         */
-        private static String escapeBinaryValue(byte[] val) {
-
-            StringBuffer buf = new StringBuffer(1 + 2 * val.length);
-            buf.append("#");
-
-            for (int i = 0; i < val.length; i++) {
-                byte b = val[i];
-                buf.append(Character.forDigit(0xF & (b >>> 4), 16));
-                buf.append(Character.forDigit(0xF & b, 16));
-            }
-
-            return (new String(buf)).toUpperCase();
-        }
-
-        /*
-         * Given an attribute value formated according to RFC 2253,
-         * returns the unformated value.  Escapes and quotes are
-         * stripped away, and hex-encoded UTF-8 is converted to 16-bit
-         * Unicode chars.  Returns a string value as a String, and a
-         * binary value as a byte array.
-         */
-        static Object unescapeValue(String val) {
-
-            char[] chars = val.toCharArray();
-            int beg = 0;
-            int end = chars.length;
-
-            // Trim off leading and trailing whitespace.
-            while ((beg < end) && isWhitespace(chars[beg])) {
-                ++beg;
-            }
-            while ((beg < end) && isWhitespace(chars[end - 1])) {
-                --end;
-            }
-
-            // Add back the trailing whitespace with a preceeding '\'
-            // (escaped or unescaped) that was taken off in the above
-            // loop. Whether or not to retain this whitespace is
-            // decided below.
-            if (end != chars.length &&
-                    (beg < end) &&
-                    chars[end - 1] == '\\') {
-                end++;
-            }
-            if (beg >= end) {
-                return "";
-            }
-
-            if (chars[beg] == '#') {
-                // Value is binary (eg: "#CEB1DF80").
-                return decodeHexPairs(chars, ++beg, end);
-            }
-
-            // Trim off quotes.
-            if ((chars[beg] == '\"') && (chars[end - 1] == '\"')) {
-                ++beg;
-                --end;
-            }
-
-            StringBuffer buf = new StringBuffer(end - beg);
-            int esc = -1; // index of the last escaped character
-
-            for (int i = beg; i < end; i++) {
-                if ((chars[i] == '\\') && (i + 1 < end)) {
-                    if (!Character.isLetterOrDigit(chars[i + 1])) {
-                        ++i;                    // skip backslash
-                        buf.append(chars[i]);   // snarf escaped char
-                        esc = i;
-                    } else {
-
-                        // Convert hex-encoded UTF-8 to 16-bit chars.
-                        byte[] utf8 = getUtf8Octets(chars, i, end);
-                        if (utf8.length > 0) {
-                            try {
-                                buf.append(new String(utf8, "UTF8"));
-                            } catch (java.io.UnsupportedEncodingException e) {
-                                // shouldn't happen
-                            }
-                            i += utf8.length * 3 - 1;
-                        } else {
-                            throw new IllegalArgumentException(
-                                "Not a valid attribute string value:" +
-                                val +", improper usage of backslash");
-                        }
-                    }
-                } else {
-                    buf.append(chars[i]);       // snarf unescaped char
-                }
-            }
-
-            // Get rid of the unescaped trailing whitespace with the
-            // preceeding '\' character that was previously added back.
-            int len = buf.length();
-            if (isWhitespace(buf.charAt(len - 1)) && esc != (end - 1)) {
-                buf.setLength(len - 1);
-            }
-
-            return new String(buf);
-        }
-
-
-        /*
-         * Given an array of chars (with starting and ending indexes into it)
-         * representing bytes encoded as hex-pairs (such as "CEB1DF80"),
-         * returns a byte array containing the decoded bytes.
-         */
-        private static byte[] decodeHexPairs(char[] chars, int beg, int end) {
-            byte[] bytes = new byte[(end - beg) / 2];
-            for (int i = 0; beg + 1 < end; i++) {
-                int hi = Character.digit(chars[beg], 16);
-                int lo = Character.digit(chars[beg + 1], 16);
-                if (hi < 0 || lo < 0) {
-                    break;
-                }
-                bytes[i] = (byte)((hi<<4) + lo);
-                beg += 2;
-            }
-            if (beg != end) {
-                throw new IllegalArgumentException(
-                        "Illegal attribute value: #" + new String(chars));
-            }
-            return bytes;
-        }
-
-        /*
-         * Given an array of chars (with starting and ending indexes into it),
-         * finds the largest prefix consisting of hex-encoded UTF-8 octets,
-         * and returns a byte array containing the corresponding UTF-8 octets.
-         *
-         * Hex-encoded UTF-8 octets look like this:
-         *      \03\B1\DF\80
-         */
-        private static byte[] getUtf8Octets(char[] chars, int beg, int end) {
-            byte[] utf8 = new byte[(end - beg) / 3];    // allow enough room
-            int len = 0;        // index of first unused byte in utf8
-
-            while ((beg + 2 < end) &&
-                   (chars[beg++] == '\\')) {
-                int hi = Character.digit(chars[beg++], 16);
-                int lo = Character.digit(chars[beg++], 16);
-                if (hi < 0 || lo < 0) {
-                    break;
-                }
-                utf8[len++] = (byte)((hi<<4) + lo);
-            }
-
-            if (len == utf8.length) {
-                return utf8;
-            } else {
-                byte[] res = new byte[len];
-                System.arraycopy(utf8, 0, res, 0, len);
-                return res;
-            }
-        }
-    }
-
-
-    /*
-     * For testing.
-     */
-/*
-    public static void main(String[] args) {
-
-        try {
-            if (args.length == 1) {             // parse and print components
-                LdapName n = new LdapName(args[0]);
-
-                Enumeration rdns = n.rdns.elements();
-                while (rdns.hasMoreElements()) {
-                    Rdn rdn = (Rdn)rdns.nextElement();
-                    for (int i = 0; i < rdn.tvs.size(); i++) {
-                        System.out.print("[" + rdn.tvs.elementAt(i) + "]");
-                    }
-                    System.out.println();
-                }
-
-            } else {                            // compare two names
-                LdapName n1 = new LdapName(args[0]);
-                LdapName n2 = new LdapName(args[1]);
-                n1.unparsed = null;
-                n2.unparsed = null;
-                boolean eq = n1.equals(n2);
-                System.out.println("[" + n1 + (eq ? "] == [" : "] != [")
-                                   + n2 + "]");
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-    }
-*/
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/ldap/LdapNameParser.java b/ojluni/src/main/java/com/sun/jndi/ldap/LdapNameParser.java
deleted file mode 100755
index c574218..0000000
--- a/ojluni/src/main/java/com/sun/jndi/ldap/LdapNameParser.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-package com.sun.jndi.ldap;
-
-
-import javax.naming.*;
-import javax.naming.ldap.LdapName;
-
-
-class LdapNameParser implements NameParser {
-
-    public LdapNameParser() {
-    }
-
-    public Name parse(String name) throws NamingException {
-        return new LdapName(name);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/ldap/LdapNamingEnumeration.java b/ojluni/src/main/java/com/sun/jndi/ldap/LdapNamingEnumeration.java
deleted file mode 100755
index 05a5d18..0000000
--- a/ojluni/src/main/java/com/sun/jndi/ldap/LdapNamingEnumeration.java
+++ /dev/null
@@ -1,440 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-package com.sun.jndi.ldap;
-
-import javax.naming.*;
-import javax.naming.directory.*;
-import javax.naming.spi.*;
-
-import com.sun.jndi.toolkit.ctx.Continuation;
-import java.util.NoSuchElementException;
-import java.util.Vector;
-import javax.naming.ldap.LdapName;
-
-/**
-  * Basic enumeration for NameClassPair, Binding, and SearchResults.
-  */
-
-class LdapNamingEnumeration implements NamingEnumeration, ReferralEnumeration {
-    protected Name listArg;
-
-    private boolean cleaned = false;
-    private LdapResult res;
-    private LdapClient enumClnt;
-    private Continuation cont;  // used to fill in exceptions
-    private Vector entries = null;
-    private int limit = 0;
-    private int posn = 0;
-    protected LdapCtx homeCtx;
-    private LdapReferralException refEx = null;
-    private NamingException errEx = null;
-
-    private static final String defaultClassName = DirContext.class.getName();
-
-    /*
-     * Record the next set of entries and/or referrals.
-     */
-    LdapNamingEnumeration(LdapCtx homeCtx, LdapResult answer, Name listArg,
-        Continuation cont) throws NamingException {
-
-            // These checks are to accommodate referrals and limit exceptions
-            // which will generate an enumeration and defer the exception
-            // to be thrown at the end of the enumeration.
-            // All other exceptions are thrown immediately.
-            // Exceptions shouldn't be thrown here anyhow because
-            // process_return_code() is called before the constructor
-            // is called, so these are just safety checks.
-
-            if ((answer.status != LdapClient.LDAP_SUCCESS) &&
-                (answer.status != LdapClient.LDAP_SIZE_LIMIT_EXCEEDED) &&
-                (answer.status != LdapClient.LDAP_TIME_LIMIT_EXCEEDED) &&
-                (answer.status != LdapClient.LDAP_ADMIN_LIMIT_EXCEEDED) &&
-                (answer.status != LdapClient.LDAP_REFERRAL) &&
-                (answer.status != LdapClient.LDAP_PARTIAL_RESULTS)) {
-
-                // %%% need to deal with referral
-                NamingException e = new NamingException(
-                                    LdapClient.getErrorMessage(
-                                    answer.status, answer.errorMessage));
-
-                throw cont.fillInException(e);
-            }
-
-            // otherwise continue
-
-            res = answer;
-            entries = answer.entries;
-            limit = (entries == null) ? 0 : entries.size(); // handle empty set
-            this.listArg = listArg;
-            this.cont = cont;
-
-            if (answer.refEx != null) {
-                refEx = answer.refEx;
-            }
-
-            // Ensures that context won't get closed from underneath us
-            this.homeCtx = homeCtx;
-            homeCtx.incEnumCount();
-            enumClnt = homeCtx.clnt; // remember
-    }
-
-    public Object nextElement() {
-        try {
-            return next();
-        } catch (NamingException e) {
-            // can't throw exception
-            cleanup();
-            return null;
-        }
-    }
-
-    public boolean hasMoreElements() {
-        try {
-            return hasMore();
-        } catch (NamingException e) {
-            // can't throw exception
-            cleanup();
-            return false;
-        }
-    }
-
-    /*
-     * Retrieve the next set of entries and/or referrals.
-     */
-    private void getNextBatch() throws NamingException {
-
-        res = homeCtx.getSearchReply(enumClnt, res);
-        if (res == null) {
-            limit = posn = 0;
-            return;
-        }
-
-        entries = res.entries;
-        limit = (entries == null) ? 0 : entries.size(); // handle empty set
-        posn = 0; // reset
-
-        // mimimize the number of calls to processReturnCode()
-        // (expensive when batchSize is small and there are many results)
-        if ((res.status != LdapClient.LDAP_SUCCESS) ||
-            ((res.status == LdapClient.LDAP_SUCCESS) &&
-                (res.referrals != null))) {
-
-            try {
-                // convert referrals into a chain of LdapReferralException
-                homeCtx.processReturnCode(res, listArg);
-
-            } catch (LimitExceededException e) {
-                setNamingException(e);
-
-            } catch (PartialResultException e) {
-                setNamingException(e);
-            }
-        }
-
-        // merge any newly received referrals with any current referrals
-        if (res.refEx != null) {
-            if (refEx == null) {
-                refEx = res.refEx;
-            } else {
-                refEx = refEx.appendUnprocessedReferrals(res.refEx);
-            }
-            res.refEx = null; // reset
-        }
-
-        if (res.resControls != null) {
-            homeCtx.respCtls = res.resControls;
-        }
-    }
-
-    private boolean more = true;  // assume we have something to start with
-    private boolean hasMoreCalled = false;
-
-    /*
-     * Test if unprocessed entries or referrals exist.
-     */
-    public boolean hasMore() throws NamingException {
-
-        if (hasMoreCalled) {
-            return more;
-        }
-
-        hasMoreCalled = true;
-
-        if (!more) {
-            return false;
-        } else {
-            return (more = hasMoreImpl());
-        }
-    }
-
-    /*
-     * Retrieve the next entry.
-     */
-    public Object next() throws NamingException {
-
-        if (!hasMoreCalled) {
-            hasMore();
-        }
-        hasMoreCalled = false;
-        return nextImpl();
-    }
-
-    /*
-     * Test if unprocessed entries or referrals exist.
-     */
-    private boolean hasMoreImpl() throws NamingException {
-        // when page size is supported, this
-        // might generate an exception while attempting
-        // to fetch the next batch to determine
-        // whether there are any more elements
-
-        // test if the current set of entries has been processed
-        if (posn == limit) {
-            getNextBatch();
-        }
-
-        // test if any unprocessed entries exist
-        if (posn < limit) {
-            return true;
-        } else {
-
-            try {
-                // try to process another referral
-                return hasMoreReferrals();
-
-            } catch (LdapReferralException e) {
-                cleanup();
-                throw e;
-
-            } catch (LimitExceededException e) {
-                cleanup();
-                throw e;
-
-            } catch (PartialResultException e) {
-                cleanup();
-                throw e;
-
-            } catch (NamingException e) {
-                cleanup();
-                PartialResultException pre = new PartialResultException();
-                pre.setRootCause(e);
-                throw pre;
-            }
-        }
-    }
-
-    /*
-     * Retrieve the next entry.
-     */
-    private Object nextImpl() throws NamingException {
-        try {
-            return nextAux();
-        } catch (NamingException e) {
-            cleanup();
-            throw cont.fillInException(e);
-        }
-    }
-
-    private Object nextAux() throws NamingException {
-        if (posn == limit) {
-            getNextBatch();  // updates posn and limit
-        }
-
-        if (posn >= limit) {
-            cleanup();
-            throw new NoSuchElementException("invalid enumeration handle");
-        }
-
-        LdapEntry result = (LdapEntry)entries.elementAt(posn++);
-
-        // gets and outputs DN from the entry
-        return createItem(result.DN, result.attributes, result.respCtls);
-    }
-
-    protected String getAtom(String dn) {
-        String atom;
-        // need to strip off all but lowest component of dn
-        // so that is relative to current context (currentDN)
-        try {
-            Name parsed = new LdapName(dn);
-            return parsed.get(parsed.size() - 1);
-        } catch (NamingException e) {
-            return dn;
-        }
-    }
-
-    protected NameClassPair createItem(String dn, Attributes attrs,
-        Vector respCtls) throws NamingException {
-
-        Attribute attr;
-        String className = null;
-
-        // use the Java classname if present
-        if ((attr = attrs.get(Obj.JAVA_ATTRIBUTES[Obj.CLASSNAME])) != null) {
-            className = (String)attr.get();
-        } else {
-            className = defaultClassName;
-        }
-        CompositeName cn = new CompositeName();
-        cn.add(getAtom(dn));
-
-        NameClassPair ncp;
-        if (respCtls != null) {
-            ncp = new NameClassPairWithControls(
-                        cn.toString(), className,
-                        homeCtx.convertControls(respCtls));
-        } else {
-            ncp = new NameClassPair(cn.toString(), className);
-        }
-        ncp.setNameInNamespace(dn);
-        return ncp;
-    }
-
-    /*
-     * Append the supplied (chain of) referrals onto the
-     * end of the current (chain of) referrals.
-     */
-    public void appendUnprocessedReferrals(LdapReferralException ex) {
-
-        if (refEx != null) {
-            refEx = refEx.appendUnprocessedReferrals(ex);
-        } else {
-            refEx = ex.appendUnprocessedReferrals(refEx);
-        }
-    }
-
-    void setNamingException(NamingException e) {
-        errEx = e;
-    }
-
-    protected LdapNamingEnumeration
-    getReferredResults(LdapReferralContext refCtx) throws NamingException {
-        // repeat the original operation at the new context
-        return (LdapNamingEnumeration)refCtx.list(listArg);
-    }
-
-    /*
-     * Iterate through the URLs of a referral. If successful then perform
-     * a search operation and merge the received results with the current
-     * results.
-     */
-    protected boolean hasMoreReferrals() throws NamingException {
-
-        if ((refEx != null) &&
-            (refEx.hasMoreReferrals() ||
-             refEx.hasMoreReferralExceptions())) {
-
-            if (homeCtx.handleReferrals == LdapClient.LDAP_REF_THROW) {
-                throw (NamingException)(refEx.fillInStackTrace());
-            }
-
-            // process the referrals sequentially
-            while (true) {
-
-                LdapReferralContext refCtx =
-                    (LdapReferralContext)refEx.getReferralContext(
-                    homeCtx.envprops, homeCtx.reqCtls);
-
-                try {
-
-                    update(getReferredResults(refCtx));
-                    break;
-
-                } catch (LdapReferralException re) {
-
-                    // record a previous exception
-                    if (errEx == null) {
-                        errEx = re.getNamingException();
-                    }
-                    refEx = re;
-                    continue;
-
-                } finally {
-                    // Make sure we close referral context
-                    refCtx.close();
-                }
-            }
-            return hasMoreImpl();
-
-        } else {
-            cleanup();
-
-            if (errEx != null) {
-                throw errEx;
-            }
-            return (false);
-        }
-    }
-
-    /*
-     * Merge the entries and/or referrals from the supplied enumeration
-     * with those of the current enumeration.
-     */
-    protected void update(LdapNamingEnumeration ne) {
-        // Cleanup previous context first
-        homeCtx.decEnumCount();
-
-        // New enum will have already incremented enum count and recorded clnt
-        homeCtx = ne.homeCtx;
-        enumClnt = ne.enumClnt;
-
-        // Do this to prevent referral enumeration (ne) from decrementing
-        // enum count because we'll be doing that here from this
-        // enumeration.
-        ne.homeCtx = null;
-
-        // Record rest of information from new enum
-        posn = ne.posn;
-        limit = ne.limit;
-        res = ne.res;
-        entries = ne.entries;
-        refEx = ne.refEx;
-        listArg = ne.listArg;
-    }
-
-    protected void finalize() {
-        cleanup();
-    }
-
-    protected void cleanup() {
-        if (cleaned) return; // been there; done that
-
-        if(enumClnt != null) {
-            enumClnt.clearSearchReply(res, homeCtx.reqCtls);
-        }
-
-        enumClnt = null;
-        cleaned = true;
-        if (homeCtx != null) {
-            homeCtx.decEnumCount();
-            homeCtx = null;
-        }
-    }
-
-    public void close() {
-        cleanup();
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/ldap/LdapPoolManager.java b/ojluni/src/main/java/com/sun/jndi/ldap/LdapPoolManager.java
deleted file mode 100755
index f51d92c..0000000
--- a/ojluni/src/main/java/com/sun/jndi/ldap/LdapPoolManager.java
+++ /dev/null
@@ -1,429 +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.
- */
-
-package com.sun.jndi.ldap;
-
-import java.io.PrintStream;
-import java.io.OutputStream;
-import java.util.Hashtable;
-import java.util.StringTokenizer;
-
-import javax.naming.ldap.Control;
-import javax.naming.NamingException;
-import javax.naming.CommunicationException;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-
-import com.sun.jndi.ldap.pool.PoolCleaner;
-import com.sun.jndi.ldap.pool.Pool;
-
-/**
- * Contains utilities for managing connection pools of LdapClient.
- * Contains method for
- * - checking whether attempted connection creation may be pooled
- * - creating a pooled connection
- * - closing idle connections.
- *
- * If a timeout period has been configured, then it will automatically
- * close and remove idle connections (those that have not been
- * used for the duration of the timeout period).
- *
- * @author Rosanna Lee
- */
-
-public final class LdapPoolManager {
-    private static final String DEBUG =
-        "com.sun.jndi.ldap.connect.pool.debug";
-
-    public static final boolean debug =
-        "all".equalsIgnoreCase(getProperty(DEBUG, null));
-
-    public static final boolean trace = debug ||
-        "fine".equalsIgnoreCase(getProperty(DEBUG, null));
-
-    // ---------- System properties for connection pooling
-
-    // Authentication mechanisms of connections that may be pooled
-    private static final String POOL_AUTH =
-        "com.sun.jndi.ldap.connect.pool.authentication";
-
-    // Protocol types of connections that may be pooled
-    private static final String POOL_PROTOCOL =
-        "com.sun.jndi.ldap.connect.pool.protocol";
-
-    // Maximum number of identical connections per pool
-    private static final String MAX_POOL_SIZE =
-        "com.sun.jndi.ldap.connect.pool.maxsize";
-
-    // Preferred number of identical connections per pool
-    private static final String PREF_POOL_SIZE =
-        "com.sun.jndi.ldap.connect.pool.prefsize";
-
-    // Initial number of identical connections per pool
-    private static final String INIT_POOL_SIZE =
-        "com.sun.jndi.ldap.connect.pool.initsize";
-
-    // Milliseconds to wait before closing idle connections
-    private static final String POOL_TIMEOUT =
-        "com.sun.jndi.ldap.connect.pool.timeout";
-
-    // Properties for DIGEST
-    private static final String SASL_CALLBACK =
-        "java.naming.security.sasl.callback";
-
-    // --------- Constants
-    private static final int DEFAULT_MAX_POOL_SIZE = 0;
-    private static final int DEFAULT_PREF_POOL_SIZE = 0;
-    private static final int DEFAULT_INIT_POOL_SIZE = 1;
-    private static final int DEFAULT_TIMEOUT = 0;    // no timeout
-    private static final String DEFAULT_AUTH_MECHS = "none simple";
-    private static final String DEFAULT_PROTOCOLS = "plain";
-
-    private static final int NONE = 0;    // indices into pools
-    private static final int SIMPLE = 1;
-    private static final int DIGEST = 2;
-
-    // --------- static fields
-    private static final long idleTimeout;// ms to wait before closing idle conn
-    private static final int maxSize;     // max num of identical conns/pool
-    private static final int prefSize;    // preferred num of identical conns/pool
-    private static final int initSize;    // initial num of identical conns/pool
-
-    private static boolean supportPlainProtocol = false;
-    private static boolean supportSslProtocol = false;
-
-    // List of pools used for different auth types
-    private static final Pool[] pools = new Pool[3];
-
-    static {
-        maxSize = getInteger(MAX_POOL_SIZE, DEFAULT_MAX_POOL_SIZE);
-
-        prefSize = getInteger(PREF_POOL_SIZE, DEFAULT_PREF_POOL_SIZE);
-
-        initSize = getInteger(INIT_POOL_SIZE, DEFAULT_INIT_POOL_SIZE);
-
-        idleTimeout = getLong(POOL_TIMEOUT, DEFAULT_TIMEOUT);
-
-        // Determine supported authentication mechanisms
-        String str = getProperty(POOL_AUTH, DEFAULT_AUTH_MECHS);
-        StringTokenizer parser = new StringTokenizer(str);
-        int count = parser.countTokens();
-        String mech;
-        int p;
-        for (int i = 0; i < count; i++) {
-            mech = parser.nextToken().toLowerCase();
-            if (mech.equals("anonymous")) {
-                mech = "none";
-            }
-
-            p = findPool(mech);
-            if (p >= 0 && pools[p] == null) {
-                pools[p] = new Pool(initSize, prefSize, maxSize);
-            }
-        }
-
-        // Determine supported protocols
-        str= getProperty(POOL_PROTOCOL, DEFAULT_PROTOCOLS);
-        parser = new StringTokenizer(str);
-        count = parser.countTokens();
-        String proto;
-        for (int i = 0; i < count; i++) {
-            proto = parser.nextToken();
-            if ("plain".equalsIgnoreCase(proto)) {
-                supportPlainProtocol = true;
-            } else if ("ssl".equalsIgnoreCase(proto)) {
-                supportSslProtocol = true;
-            } else {
-                // ignore
-            }
-        }
-
-        if (idleTimeout > 0) {
-            // Create cleaner to expire idle connections
-            new PoolCleaner(idleTimeout, pools).start();
-        }
-
-        if (debug) {
-            showStats(System.err);
-        }
-    }
-
-    // Cannot instantiate one of these
-    private LdapPoolManager() {
-    }
-
-    /**
-     * Find the index of the pool for the specified mechanism. If not
-     * one of "none", "simple", "DIGEST-MD5", or "GSSAPI",
-     * return -1.
-     * @param mech mechanism type
-     */
-    private static int findPool(String mech) {
-        if ("none".equalsIgnoreCase(mech)) {
-            return NONE;
-        } else if ("simple".equalsIgnoreCase(mech)) {
-            return SIMPLE;
-        } else if ("digest-md5".equalsIgnoreCase(mech)) {
-            return DIGEST;
-        }
-        return -1;
-    }
-
-    /**
-     * Determines whether pooling is allowed given information on how
-     * the connection will be used.
-     *
-     * Non-configurable rejections:
-     * - nonstandard socketFactory has been specified: the pool manager
-     *   cannot track input or parameters used by the socket factory and
-     *   thus has no way of determining whether two connection requests
-     *   are equivalent. Maybe in the future it might add a list of allowed
-     *   socket factories to be configured
-     * - trace enabled (except when debugging)
-     * - for Digest authentication, if a callback handler has been specified:
-     *  the pool manager cannot track input collected by the handler
-     *  and thus has no way of determining whether two connection requests are
-     *  equivalent. Maybe in the future it might add a list of allowed
-     *  callback handlers.
-     *
-     * Configurable tests:
-     * - Pooling for the requested protocol (plain or ssl) is supported
-     * - Pooling for the requested authentication mechanism is supported
-     *
-     */
-    static boolean isPoolingAllowed(String socketFactory, OutputStream trace,
-        String authMech, String protocol, Hashtable env)
-                throws NamingException {
-
-        if (trace != null && !debug
-
-                // Requesting plain protocol but it is not supported
-                || (protocol == null && !supportPlainProtocol)
-
-                // Requesting ssl protocol but it is not supported
-                || ("ssl".equalsIgnoreCase(protocol) && !supportSslProtocol)) {
-
-            d("Pooling disallowed due to tracing or unsupported pooling of protocol");
-            return false;
-        }
-        // pooling of custom socket factory is possible only if the
-        // socket factory interface implements java.util.comparator
-        String COMPARATOR = "java.util.Comparator";
-        boolean foundSockCmp = false;
-        if ((socketFactory != null) &&
-             !socketFactory.equals(LdapCtx.DEFAULT_SSL_FACTORY)) {
-            try {
-                Class socketFactoryClass = Obj.helper.loadClass(socketFactory);
-                Class[] interfaces = socketFactoryClass.getInterfaces();
-                for (int i = 0; i < interfaces.length; i++) {
-                    if (interfaces[i].getCanonicalName().equals(COMPARATOR)) {
-                        foundSockCmp = true;
-                    }
-                }
-            } catch (Exception e) {
-                CommunicationException ce =
-                    new CommunicationException("Loading the socket factory");
-                ce.setRootCause(e);
-                throw ce;
-            }
-            if (!foundSockCmp) {
-                return false;
-            }
-        }
-        // Cannot use pooling if authMech is not a supported mechs
-        // Cannot use pooling if authMech contains multiple mechs
-        int p = findPool(authMech);
-        if (p < 0 || pools[p] == null) {
-            d("authmech not found: ", authMech);
-
-            return false;
-        }
-
-        d("using authmech: ", authMech);
-
-        switch (p) {
-        case NONE:
-        case SIMPLE:
-            return true;
-
-        case DIGEST:
-            // Provider won't be able to determine connection identity
-            // if an alternate callback handler is used
-            return (env == null || env.get(SASL_CALLBACK) == null);
-        }
-        return false;
-    }
-
-    /**
-     * Obtains a pooled connection that either already exists or is
-     * newly created using the parameters supplied. If it is newly
-     * created, it needs to go through the authentication checks to
-     * determine whether an LDAP bind is necessary.
-     *
-     * Caller needs to invoke ldapClient.authenticateCalled() to
-     * determine whether ldapClient.authenticate() needs to be invoked.
-     * Caller has that responsibility because caller needs to deal
-     * with the LDAP bind response, which might involve referrals,
-     * response controls, errors, etc. This method is responsible only
-     * for establishing the connection.
-     *
-     * @return an LdapClient that is pooled.
-     */
-    static LdapClient getLdapClient(String host, int port, String socketFactory,
-        int connTimeout, int readTimeout, OutputStream trace, int version,
-        String authMech, Control[] ctls, String protocol, String user,
-        Object passwd, Hashtable env) throws NamingException {
-
-        // Create base identity for LdapClient
-        ClientId id = null;
-        Pool pool;
-
-        int p = findPool(authMech);
-        if (p < 0 || (pool=pools[p]) == null) {
-            throw new IllegalArgumentException(
-                "Attempting to use pooling for an unsupported mechanism: " +
-                authMech);
-        }
-        switch (p) {
-        case NONE:
-            id = new ClientId(version, host, port, protocol,
-                        ctls, trace, socketFactory);
-            break;
-
-        case SIMPLE:
-            // Add identity information used in simple authentication
-            id = new SimpleClientId(version, host, port, protocol,
-                ctls, trace, socketFactory, user, passwd);
-            break;
-
-        case DIGEST:
-            // Add user/passwd/realm/authzid/qop/strength/maxbuf/mutual/policy*
-            id = new DigestClientId(version, host, port, protocol,
-                ctls, trace, socketFactory, user, passwd, env);
-            break;
-        }
-
-        return (LdapClient) pool.getPooledConnection(id, connTimeout,
-            new LdapClientFactory(host, port, socketFactory, connTimeout,
-                                readTimeout, trace));
-    }
-
-    public static void showStats(PrintStream out) {
-        out.println("***** start *****");
-        out.println("idle timeout: " + idleTimeout);
-        out.println("maximum pool size: " + maxSize);
-        out.println("preferred pool size: " + prefSize);
-        out.println("initial pool size: " + initSize);
-        out.println("protocol types: " + (supportPlainProtocol ? "plain " : "") +
-            (supportSslProtocol ? "ssl" : ""));
-        out.println("authentication types: " +
-            (pools[NONE] != null ? "none " : "") +
-            (pools[SIMPLE] != null ? "simple " : "") +
-            (pools[DIGEST] != null ? "DIGEST-MD5 " : ""));
-
-        for (int i = 0; i < pools.length; i++) {
-            if (pools[i] != null) {
-                out.println(
-                    (i == NONE ? "anonymous pools" :
-                        i == SIMPLE ? "simple auth pools" :
-                        i == DIGEST ? "digest pools" : "")
-                            + ":");
-                pools[i].showStats(out);
-            }
-        }
-        out.println("***** end *****");
-    }
-
-    /**
-     * Closes idle connections idle since specified time.
-     *
-     * @param threshold Close connections idle since this time, as
-     * specified in milliseconds since "the epoch".
-     * @see java.util.Date
-     */
-    public static void expire(long threshold) {
-        for (int i = 0; i < pools.length; i++) {
-            if (pools[i] != null) {
-                pools[i].expire(threshold);
-            }
-        }
-    }
-
-    private static void d(String msg) {
-        if (debug) {
-            System.err.println("LdapPoolManager: " + msg);
-        }
-    }
-
-    private static void d(String msg, String o) {
-        if (debug) {
-            System.err.println("LdapPoolManager: " + msg + o);
-        }
-    }
-
-    private static final String getProperty(final String propName,
-        final String defVal) {
-        return (String) AccessController.doPrivileged(
-            new PrivilegedAction() {
-            public Object run() {
-                try {
-                    return System.getProperty(propName, defVal);
-                } catch (SecurityException e) {
-                    return defVal;
-                }
-            }
-        });
-    }
-
-    private static final int getInteger(final String propName,
-        final int defVal) {
-        Integer val = (Integer) AccessController.doPrivileged(
-            new PrivilegedAction() {
-            public Object run() {
-                try {
-                    return Integer.getInteger(propName, defVal);
-                } catch (SecurityException e) {
-                    return new Integer(defVal);
-                }
-            }
-        });
-        return val.intValue();
-    }
-
-    private static final long getLong(final String propName,
-        final long defVal) {
-        Long val = (Long) AccessController.doPrivileged(
-            new PrivilegedAction() {
-            public Object run() {
-                try {
-                    return Long.getLong(propName, defVal);
-                } catch (SecurityException e) {
-                    return new Long(defVal);
-                }
-            }
-        });
-        return val.longValue();
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/ldap/LdapReferralContext.java b/ojluni/src/main/java/com/sun/jndi/ldap/LdapReferralContext.java
deleted file mode 100755
index 068314c..0000000
--- a/ojluni/src/main/java/com/sun/jndi/ldap/LdapReferralContext.java
+++ /dev/null
@@ -1,937 +0,0 @@
-/*
- * Copyright (c) 1999, 2001, 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.jndi.ldap;
-
-import javax.naming.*;
-import javax.naming.directory.*;
-import javax.naming.spi.*;
-import javax.naming.ldap.*;
-
-import java.util.Hashtable;
-import java.util.StringTokenizer;
-import com.sun.jndi.toolkit.dir.SearchFilter;
-
-/**
- * A context for handling referrals.
- *
- * @author Vincent Ryan
- */
-final class LdapReferralContext implements DirContext, LdapContext {
-
-    private DirContext refCtx = null;
-    private Name urlName = null;   // override the supplied name
-    private String urlAttrs = null;  // override attributes
-    private String urlScope = null;  // override scope
-    private String urlFilter = null; // override filter
-
-    private LdapReferralException refEx = null;
-    private boolean skipThisReferral = false;
-    private int hopCount = 1;
-    private NamingException previousEx = null;
-
-    LdapReferralContext(LdapReferralException ex, Hashtable env,
-        Control[] connCtls,
-        Control[] reqCtls,
-        String nextName,
-        boolean skipThisReferral,
-        int handleReferrals) throws NamingException {
-
-        refEx = ex;
-
-        if (this.skipThisReferral = skipThisReferral) {
-            return; // don't create a DirContext for this referral
-        }
-
-        String referral;
-
-        // Make copies of environment and connect controls for our own use.
-        if (env != null) {
-            env = (Hashtable) env.clone();
-            // Remove old connect controls from environment, unless we have new
-            // ones that will override them anyway.
-            if (connCtls == null) {
-                env.remove(LdapCtx.BIND_CONTROLS);
-            }
-        } else if (connCtls != null) {
-            env = new Hashtable(5);
-        }
-        if (connCtls != null) {
-            Control[] copiedCtls = new Control[connCtls.length];
-            System.arraycopy(connCtls, 0, copiedCtls, 0, connCtls.length);
-            // Add copied controls to environment, replacing any old ones.
-            env.put(LdapCtx.BIND_CONTROLS, copiedCtls);
-        }
-
-        while (true) {
-            try {
-                referral = refEx.getNextReferral();
-                if (referral == null) {
-                    throw (NamingException)(previousEx.fillInStackTrace());
-                }
-
-            } catch (LdapReferralException e) {
-
-                if (handleReferrals == LdapClient.LDAP_REF_THROW) {
-                    throw e;
-                } else {
-                    refEx = e;
-                    continue;
-                }
-            }
-
-            // Create a Reference containing the referral URL.
-            Reference ref = new Reference("javax.naming.directory.DirContext",
-                                          new StringRefAddr("URL", referral));
-
-            Object obj;
-            try {
-                obj = NamingManager.getObjectInstance(ref, null, null, env);
-
-            } catch (NamingException e) {
-
-                if (handleReferrals == LdapClient.LDAP_REF_THROW) {
-                    throw e;
-                }
-
-                // mask the exception and save it for later
-                previousEx = e;
-
-                // follow another referral
-                continue;
-
-            } catch (Exception e) {
-                NamingException e2 =
-                    new NamingException(
-                        "problem generating object using object factory");
-                e2.setRootCause(e);
-                throw e2;
-            }
-            if (obj instanceof DirContext) {
-                refCtx = (DirContext)obj;
-                if (refCtx instanceof LdapContext && reqCtls != null) {
-                    ((LdapContext)refCtx).setRequestControls(reqCtls);
-                }
-                initDefaults(referral, nextName);
-
-                break;
-            } else {
-                NamingException ne = new NotContextException(
-                    "Cannot create context for: " + referral);
-                ne.setRemainingName((new CompositeName()).add(nextName));
-                throw ne;
-            }
-        }
-    }
-
-    private void initDefaults(String referral, String nextName)
-        throws NamingException {
-        String urlString;
-        try {
-            // parse URL
-            LdapURL url = new LdapURL(referral);
-            urlString = url.getDN();
-            urlAttrs = url.getAttributes();
-            urlScope = url.getScope();
-            urlFilter = url.getFilter();
-
-        } catch (NamingException e) {
-            // Not an LDAP URL; use original URL
-            urlString = referral;
-            urlAttrs = urlScope = urlFilter = null;
-        }
-
-        // reuse original name if URL DN is absent
-        if (urlString == null) {
-            urlString = nextName;
-        } else {
-            // concatenate with remaining name if URL DN is present
-            urlString = "";
-        }
-
-        if (urlString == null) {
-            urlName = null;
-        } else {
-            urlName = urlString.equals("") ? new CompositeName() :
-                new CompositeName().add(urlString);
-        }
-    }
-
-
-    public void close() throws NamingException {
-        if (refCtx != null) {
-            refCtx.close();
-            refCtx = null;
-        }
-        refEx = null;
-    }
-
-    void setHopCount(int hopCount) {
-        this.hopCount = hopCount;
-        if ((refCtx != null) && (refCtx instanceof LdapCtx)) {
-            ((LdapCtx)refCtx).setHopCount(hopCount);
-        }
-    }
-
-    public Object lookup(String name) throws NamingException {
-        return lookup(toName(name));
-    }
-
-    public Object lookup(Name name) throws NamingException {
-        if (skipThisReferral) {
-            throw (NamingException)
-                ((refEx.appendUnprocessedReferrals(null)).fillInStackTrace());
-        }
-
-        return refCtx.lookup(overrideName(name));
-    }
-
-    public void bind(String name, Object obj) throws NamingException {
-        bind(toName(name), obj);
-    }
-
-    public void bind(Name name, Object obj) throws NamingException {
-        if (skipThisReferral) {
-            throw (NamingException)
-                ((refEx.appendUnprocessedReferrals(null)).fillInStackTrace());
-        }
-
-        refCtx.bind(overrideName(name), obj);
-    }
-
-    public void rebind(String name, Object obj) throws NamingException {
-        rebind(toName(name), obj);
-    }
-
-    public void rebind(Name name, Object obj) throws NamingException {
-        if (skipThisReferral) {
-            throw (NamingException)
-                ((refEx.appendUnprocessedReferrals(null)).fillInStackTrace());
-        }
-
-        refCtx.rebind(overrideName(name), obj);
-    }
-
-    public void unbind(String name) throws NamingException {
-        unbind(toName(name));
-    }
-
-    public void unbind(Name name) throws NamingException {
-        if (skipThisReferral) {
-            throw (NamingException)
-                ((refEx.appendUnprocessedReferrals(null)).fillInStackTrace());
-        }
-
-        refCtx.unbind(overrideName(name));
-    }
-
-    public void rename(String oldName, String newName) throws NamingException {
-        rename(toName(oldName), toName(newName));
-    }
-
-    public void rename(Name oldName, Name newName) throws NamingException {
-        if (skipThisReferral) {
-            throw (NamingException)
-                ((refEx.appendUnprocessedReferrals(null)).fillInStackTrace());
-        }
-
-        refCtx.rename(overrideName(oldName), toName(refEx.getNewRdn()));
-    }
-
-    public NamingEnumeration list(String name) throws NamingException {
-        return list(toName(name));
-    }
-
-    public NamingEnumeration list(Name name) throws NamingException {
-        if (skipThisReferral) {
-            throw (NamingException)
-                ((refEx.appendUnprocessedReferrals(null)).fillInStackTrace());
-        }
-        try {
-            NamingEnumeration ne = null;
-
-            if (urlScope != null && urlScope.equals("base")) {
-                SearchControls cons = new SearchControls();
-                cons.setReturningObjFlag(true);
-                cons.setSearchScope(SearchControls.OBJECT_SCOPE);
-
-                ne = refCtx.search(overrideName(name), "(objectclass=*)", cons);
-
-            } else {
-                ne = refCtx.list(overrideName(name));
-            }
-
-            refEx.setNameResolved(true);
-
-            // append (referrals from) the exception that generated this
-            // context to the new search results, so that referral processing
-            // can continue
-            ((ReferralEnumeration)ne).appendUnprocessedReferrals(refEx);
-
-            return (ne);
-
-        } catch (LdapReferralException e) {
-
-            // append (referrals from) the exception that generated this
-            // context to the new exception, so that referral processing
-            // can continue
-
-            e.appendUnprocessedReferrals(refEx);
-            throw (NamingException)(e.fillInStackTrace());
-
-        } catch (NamingException e) {
-
-            // record the exception if there are no remaining referrals
-            if ((refEx != null) && (! refEx.hasMoreReferrals())) {
-                refEx.setNamingException(e);
-            }
-            if ((refEx != null) &&
-                (refEx.hasMoreReferrals() ||
-                 refEx.hasMoreReferralExceptions())) {
-                throw (NamingException)
-                    ((refEx.appendUnprocessedReferrals(null)).fillInStackTrace());
-            } else {
-                throw e;
-            }
-        }
-    }
-
-    public NamingEnumeration listBindings(String name) throws NamingException {
-        return listBindings(toName(name));
-    }
-
-    public NamingEnumeration listBindings(Name name) throws NamingException {
-        if (skipThisReferral) {
-            throw (NamingException)
-                ((refEx.appendUnprocessedReferrals(null)).fillInStackTrace());
-        }
-
-        try {
-            NamingEnumeration be = null;
-
-            if (urlScope != null && urlScope.equals("base")) {
-                SearchControls cons = new SearchControls();
-                cons.setReturningObjFlag(true);
-                cons.setSearchScope(SearchControls.OBJECT_SCOPE);
-
-                be = refCtx.search(overrideName(name), "(objectclass=*)", cons);
-
-            } else {
-                be = refCtx.listBindings(overrideName(name));
-            }
-
-            refEx.setNameResolved(true);
-
-            // append (referrals from) the exception that generated this
-            // context to the new search results, so that referral processing
-            // can continue
-            ((ReferralEnumeration)be).appendUnprocessedReferrals(refEx);
-
-            return (be);
-
-        } catch (LdapReferralException e) {
-
-            // append (referrals from) the exception that generated this
-            // context to the new exception, so that referral processing
-            // can continue
-
-            e.appendUnprocessedReferrals(refEx);
-            throw (NamingException)(e.fillInStackTrace());
-
-        } catch (NamingException e) {
-
-            // record the exception if there are no remaining referrals
-            if ((refEx != null) && (! refEx.hasMoreReferrals())) {
-                refEx.setNamingException(e);
-            }
-            if ((refEx != null) &&
-                (refEx.hasMoreReferrals() ||
-                 refEx.hasMoreReferralExceptions())) {
-                throw (NamingException)
-                    ((refEx.appendUnprocessedReferrals(null)).fillInStackTrace());
-            } else {
-                throw e;
-            }
-        }
-    }
-
-    public void destroySubcontext(String name) throws NamingException {
-        destroySubcontext(toName(name));
-    }
-
-    public void destroySubcontext(Name name) throws NamingException {
-        if (skipThisReferral) {
-            throw (NamingException)
-                ((refEx.appendUnprocessedReferrals(null)).fillInStackTrace());
-        }
-
-        refCtx.destroySubcontext(overrideName(name));
-    }
-
-    public Context createSubcontext(String name) throws NamingException {
-        return createSubcontext(toName(name));
-    }
-
-    public Context createSubcontext(Name name) throws NamingException {
-        if (skipThisReferral) {
-            throw (NamingException)
-                ((refEx.appendUnprocessedReferrals(null)).fillInStackTrace());
-        }
-
-        return refCtx.createSubcontext(overrideName(name));
-    }
-
-    public Object lookupLink(String name) throws NamingException {
-        return lookupLink(toName(name));
-    }
-
-    public Object lookupLink(Name name) throws NamingException {
-        if (skipThisReferral) {
-            throw (NamingException)
-                ((refEx.appendUnprocessedReferrals(null)).fillInStackTrace());
-        }
-
-        return refCtx.lookupLink(overrideName(name));
-    }
-
-    public NameParser getNameParser(String name) throws NamingException {
-        return getNameParser(toName(name));
-    }
-
-    public NameParser getNameParser(Name name) throws NamingException {
-        if (skipThisReferral) {
-            throw (NamingException)
-                ((refEx.appendUnprocessedReferrals(null)).fillInStackTrace());
-        }
-
-        return refCtx.getNameParser(overrideName(name));
-    }
-
-    public String composeName(String name, String prefix)
-            throws NamingException {
-                return composeName(toName(name), toName(prefix)).toString();
-    }
-
-    public Name composeName(Name name, Name prefix) throws NamingException {
-        if (skipThisReferral) {
-            throw (NamingException)
-                ((refEx.appendUnprocessedReferrals(null)).fillInStackTrace());
-        }
-        return refCtx.composeName(name, prefix);
-    }
-
-    public Object addToEnvironment(String propName, Object propVal)
-            throws NamingException {
-        if (skipThisReferral) {
-            throw (NamingException)
-                ((refEx.appendUnprocessedReferrals(null)).fillInStackTrace());
-        }
-
-        return refCtx.addToEnvironment(propName, propVal);
-    }
-
-    public Object removeFromEnvironment(String propName)
-            throws NamingException {
-        if (skipThisReferral) {
-            throw (NamingException)
-                ((refEx.appendUnprocessedReferrals(null)).fillInStackTrace());
-        }
-
-        return refCtx.removeFromEnvironment(propName);
-    }
-
-    public Hashtable getEnvironment() throws NamingException {
-        if (skipThisReferral) {
-            throw (NamingException)
-                ((refEx.appendUnprocessedReferrals(null)).fillInStackTrace());
-        }
-
-        return refCtx.getEnvironment();
-    }
-
-    public Attributes getAttributes(String name) throws NamingException {
-        return getAttributes(toName(name));
-    }
-
-    public Attributes getAttributes(Name name) throws NamingException {
-        if (skipThisReferral) {
-            throw (NamingException)
-                ((refEx.appendUnprocessedReferrals(null)).fillInStackTrace());
-        }
-
-        return refCtx.getAttributes(overrideName(name));
-    }
-
-    public Attributes getAttributes(String name, String[] attrIds)
-            throws NamingException {
-        return getAttributes(toName(name), attrIds);
-    }
-
-    public Attributes getAttributes(Name name, String[] attrIds)
-            throws NamingException {
-        if (skipThisReferral) {
-            throw (NamingException)
-                ((refEx.appendUnprocessedReferrals(null)).fillInStackTrace());
-        }
-
-        return refCtx.getAttributes(overrideName(name), attrIds);
-    }
-
-    public void modifyAttributes(String name, int mod_op, Attributes attrs)
-            throws NamingException {
-        modifyAttributes(toName(name), mod_op, attrs);
-    }
-
-    public void modifyAttributes(Name name, int mod_op, Attributes attrs)
-            throws NamingException {
-        if (skipThisReferral) {
-            throw (NamingException)
-                ((refEx.appendUnprocessedReferrals(null)).fillInStackTrace());
-        }
-
-        refCtx.modifyAttributes(overrideName(name), mod_op, attrs);
-    }
-
-    public void modifyAttributes(String name, ModificationItem[] mods)
-            throws NamingException {
-        modifyAttributes(toName(name), mods);
-    }
-
-    public void modifyAttributes(Name name, ModificationItem[] mods)
-            throws NamingException {
-        if (skipThisReferral) {
-            throw (NamingException)
-                ((refEx.appendUnprocessedReferrals(null)).fillInStackTrace());
-        }
-
-        refCtx.modifyAttributes(overrideName(name), mods);
-    }
-
-    public void bind(String name, Object obj, Attributes attrs)
-            throws NamingException {
-        bind(toName(name), obj, attrs);
-    }
-
-    public void bind(Name name, Object obj, Attributes attrs)
-            throws NamingException {
-        if (skipThisReferral) {
-            throw (NamingException)
-                ((refEx.appendUnprocessedReferrals(null)).fillInStackTrace());
-        }
-
-        refCtx.bind(overrideName(name), obj, attrs);
-    }
-
-    public void rebind(String name, Object obj, Attributes attrs)
-            throws NamingException {
-        rebind(toName(name), obj, attrs);
-    }
-
-    public void rebind(Name name, Object obj, Attributes attrs)
-            throws NamingException {
-        if (skipThisReferral) {
-            throw (NamingException)
-                ((refEx.appendUnprocessedReferrals(null)).fillInStackTrace());
-        }
-
-        refCtx.rebind(overrideName(name), obj, attrs);
-    }
-
-    public DirContext createSubcontext(String name, Attributes attrs)
-            throws NamingException {
-        return createSubcontext(toName(name), attrs);
-    }
-
-    public DirContext createSubcontext(Name name, Attributes attrs)
-            throws NamingException {
-        if (skipThisReferral) {
-            throw (NamingException)
-                ((refEx.appendUnprocessedReferrals(null)).fillInStackTrace());
-        }
-
-        return refCtx.createSubcontext(overrideName(name), attrs);
-    }
-
-    public DirContext getSchema(String name) throws NamingException {
-        return getSchema(toName(name));
-    }
-
-    public DirContext getSchema(Name name) throws NamingException {
-        if (skipThisReferral) {
-            throw (NamingException)
-                ((refEx.appendUnprocessedReferrals(null)).fillInStackTrace());
-        }
-
-        return refCtx.getSchema(overrideName(name));
-    }
-
-    public DirContext getSchemaClassDefinition(String name)
-            throws NamingException {
-        return getSchemaClassDefinition(toName(name));
-    }
-
-    public DirContext getSchemaClassDefinition(Name name)
-            throws NamingException {
-        if (skipThisReferral) {
-            throw (NamingException)
-                ((refEx.appendUnprocessedReferrals(null)).fillInStackTrace());
-        }
-
-      return refCtx.getSchemaClassDefinition(overrideName(name));
-    }
-
-    public NamingEnumeration search(String name,
-                                    Attributes matchingAttributes)
-            throws NamingException {
-        return search(toName(name), SearchFilter.format(matchingAttributes),
-            new SearchControls());
-    }
-
-    public NamingEnumeration search(Name name,
-                                    Attributes matchingAttributes)
-            throws NamingException {
-        return search(name, SearchFilter.format(matchingAttributes),
-            new SearchControls());
-    }
-
-    public NamingEnumeration search(String name,
-                                    Attributes matchingAttributes,
-                                    String[] attributesToReturn)
-            throws NamingException {
-        SearchControls cons = new SearchControls();
-        cons.setReturningAttributes(attributesToReturn);
-
-        return search(toName(name), SearchFilter.format(matchingAttributes),
-            cons);
-    }
-
-    public NamingEnumeration search(Name name,
-                                    Attributes matchingAttributes,
-                                    String[] attributesToReturn)
-            throws NamingException {
-        SearchControls cons = new SearchControls();
-        cons.setReturningAttributes(attributesToReturn);
-
-        return search(name, SearchFilter.format(matchingAttributes), cons);
-    }
-
-    public NamingEnumeration search(String name,
-                                    String filter,
-                                    SearchControls cons)
-            throws NamingException {
-        return search(toName(name), filter, cons);
-    }
-
-    public NamingEnumeration search(Name name,
-                                    String filter,
-        SearchControls cons) throws NamingException {
-
-        if (skipThisReferral) {
-            throw (NamingException)
-                ((refEx.appendUnprocessedReferrals(null)).fillInStackTrace());
-        }
-
-        try {
-            NamingEnumeration se = refCtx.search(overrideName(name),
-                overrideFilter(filter), overrideAttributesAndScope(cons));
-
-            refEx.setNameResolved(true);
-
-            // append (referrals from) the exception that generated this
-            // context to the new search results, so that referral processing
-            // can continue
-            ((ReferralEnumeration)se).appendUnprocessedReferrals(refEx);
-
-            return (se);
-
-        } catch (LdapReferralException e) {
-
-            // %%% VR - setNameResolved(true);
-
-            // append (referrals from) the exception that generated this
-            // context to the new exception, so that referral processing
-            // can continue
-
-            e.appendUnprocessedReferrals(refEx);
-            throw (NamingException)(e.fillInStackTrace());
-
-        } catch (NamingException e) {
-
-            // record the exception if there are no remaining referrals
-            if ((refEx != null) && (! refEx.hasMoreReferrals())) {
-                refEx.setNamingException(e);
-            }
-            if ((refEx != null) &&
-                (refEx.hasMoreReferrals() ||
-                 refEx.hasMoreReferralExceptions())) {
-                throw (NamingException)
-                    ((refEx.appendUnprocessedReferrals(null)).fillInStackTrace());
-            } else {
-                throw e;
-            }
-        }
-    }
-
-    public NamingEnumeration search(String name,
-                                    String filterExpr,
-                                    Object[] filterArgs,
-                                    SearchControls cons)
-            throws NamingException {
-        return search(toName(name), filterExpr, filterArgs, cons);
-    }
-
-    public NamingEnumeration search(Name name,
-        String filterExpr,
-        Object[] filterArgs,
-        SearchControls cons) throws NamingException {
-
-        if (skipThisReferral) {
-            throw (NamingException)
-                ((refEx.appendUnprocessedReferrals(null)).fillInStackTrace());
-        }
-
-        try {
-            NamingEnumeration se;
-
-            if (urlFilter != null) {
-                se = refCtx.search(overrideName(name), urlFilter,
-                overrideAttributesAndScope(cons));
-            } else {
-                se = refCtx.search(overrideName(name), filterExpr,
-                filterArgs, overrideAttributesAndScope(cons));
-            }
-
-            refEx.setNameResolved(true);
-
-            // append (referrals from) the exception that generated this
-            // context to the new search results, so that referral processing
-            // can continue
-            ((ReferralEnumeration)se).appendUnprocessedReferrals(refEx);
-
-            return (se);
-
-        } catch (LdapReferralException e) {
-
-            // append (referrals from) the exception that generated this
-            // context to the new exception, so that referral processing
-            // can continue
-
-            e.appendUnprocessedReferrals(refEx);
-            throw (NamingException)(e.fillInStackTrace());
-
-        } catch (NamingException e) {
-
-            // record the exception if there are no remaining referrals
-            if ((refEx != null) && (! refEx.hasMoreReferrals())) {
-                refEx.setNamingException(e);
-            }
-            if ((refEx != null) &&
-                (refEx.hasMoreReferrals() ||
-                 refEx.hasMoreReferralExceptions())) {
-                throw (NamingException)
-                    ((refEx.appendUnprocessedReferrals(null)).fillInStackTrace());
-            } else {
-                throw e;
-            }
-        }
-    }
-
-    public String getNameInNamespace() throws NamingException {
-        if (skipThisReferral) {
-            throw (NamingException)
-                ((refEx.appendUnprocessedReferrals(null)).fillInStackTrace());
-        }
-        return urlName != null && !urlName.isEmpty() ? urlName.get(0) : "";
-    }
-
-    // ---------------------- LdapContext ---------------------
-
-    public ExtendedResponse extendedOperation(ExtendedRequest request)
-        throws NamingException {
-
-        if (skipThisReferral) {
-            throw (NamingException)
-                ((refEx.appendUnprocessedReferrals(null)).fillInStackTrace());
-        }
-
-        if (!(refCtx instanceof LdapContext)) {
-            throw new NotContextException(
-                "Referral context not an instance of LdapContext");
-        }
-
-        return ((LdapContext)refCtx).extendedOperation(request);
-    }
-
-    public LdapContext newInstance(Control[] requestControls)
-        throws NamingException {
-
-        if (skipThisReferral) {
-            throw (NamingException)
-                ((refEx.appendUnprocessedReferrals(null)).fillInStackTrace());
-        }
-
-        if (!(refCtx instanceof LdapContext)) {
-            throw new NotContextException(
-                "Referral context not an instance of LdapContext");
-        }
-
-        return ((LdapContext)refCtx).newInstance(requestControls);
-    }
-
-    public void reconnect(Control[] connCtls) throws NamingException {
-        if (skipThisReferral) {
-            throw (NamingException)
-                ((refEx.appendUnprocessedReferrals(null)).fillInStackTrace());
-        }
-
-        if (!(refCtx instanceof LdapContext)) {
-            throw new NotContextException(
-                "Referral context not an instance of LdapContext");
-        }
-
-        ((LdapContext)refCtx).reconnect(connCtls);
-    }
-
-    public Control[] getConnectControls() throws NamingException {
-        if (skipThisReferral) {
-            throw (NamingException)
-                ((refEx.appendUnprocessedReferrals(null)).fillInStackTrace());
-        }
-
-        if (!(refCtx instanceof LdapContext)) {
-            throw new NotContextException(
-                "Referral context not an instance of LdapContext");
-        }
-
-        return ((LdapContext)refCtx).getConnectControls();
-    }
-
-    public void setRequestControls(Control[] requestControls)
-        throws NamingException {
-
-        if (skipThisReferral) {
-            throw (NamingException)
-                ((refEx.appendUnprocessedReferrals(null)).fillInStackTrace());
-        }
-
-        if (!(refCtx instanceof LdapContext)) {
-            throw new NotContextException(
-                "Referral context not an instance of LdapContext");
-        }
-
-        ((LdapContext)refCtx).setRequestControls(requestControls);
-    }
-
-    public Control[] getRequestControls() throws NamingException {
-        if (skipThisReferral) {
-            throw (NamingException)
-                ((refEx.appendUnprocessedReferrals(null)).fillInStackTrace());
-        }
-
-        if (!(refCtx instanceof LdapContext)) {
-            throw new NotContextException(
-                "Referral context not an instance of LdapContext");
-        }
-        return ((LdapContext)refCtx).getRequestControls();
-    }
-
-    public Control[] getResponseControls() throws NamingException {
-        if (skipThisReferral) {
-            throw (NamingException)
-                ((refEx.appendUnprocessedReferrals(null)).fillInStackTrace());
-        }
-
-        if (!(refCtx instanceof LdapContext)) {
-            throw new NotContextException(
-                "Referral context not an instance of LdapContext");
-        }
-        return ((LdapContext)refCtx).getResponseControls();
-    }
-
-    // ---------------------- Private methods  ---------------------
-    private Name toName(String name) throws InvalidNameException {
-        return name.equals("") ? new CompositeName() :
-            new CompositeName().add(name);
-    }
-
-    /*
-     * Use the DN component from the LDAP URL (if present) to override the
-     * supplied DN.
-     */
-    private Name overrideName(Name name) throws InvalidNameException {
-        return (urlName == null ? name : urlName);
-    }
-
-    /*
-     * Use the attributes and scope components from the LDAP URL (if present)
-     * to override the corrpesonding components supplied in SearchControls.
-     */
-    private SearchControls overrideAttributesAndScope(SearchControls cons) {
-        SearchControls urlCons;
-
-        if ((urlScope != null) || (urlAttrs != null)) {
-            urlCons = new SearchControls(cons.getSearchScope(),
-                                        cons.getCountLimit(),
-                                        cons.getTimeLimit(),
-                                        cons.getReturningAttributes(),
-                                        cons.getReturningObjFlag(),
-                                        cons.getDerefLinkFlag());
-
-            if (urlScope != null) {
-                if (urlScope.equals("base")) {
-                    urlCons.setSearchScope(SearchControls.OBJECT_SCOPE);
-                } else if (urlScope.equals("one")) {
-                    urlCons.setSearchScope(SearchControls.ONELEVEL_SCOPE);
-                } else if (urlScope.equals("sub")) {
-                    urlCons.setSearchScope(SearchControls.SUBTREE_SCOPE);
-                }
-            }
-
-            if (urlAttrs != null) {
-                StringTokenizer tokens = new StringTokenizer(urlAttrs, ",");
-                int count = tokens.countTokens();
-                String[] attrs = new String[count];
-                for (int i = 0; i < count; i ++) {
-                    attrs[i] = tokens.nextToken();
-                }
-                urlCons.setReturningAttributes(attrs);
-            }
-
-            return urlCons;
-
-        } else {
-            return cons;
-        }
-    }
-
-    /*
-     * Use the filter component from the LDAP URL (if present) to override the
-     * supplied filter.
-     */
-    private String overrideFilter(String filter) {
-        return (urlFilter == null ? filter : urlFilter);
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/ldap/LdapReferralException.java b/ojluni/src/main/java/com/sun/jndi/ldap/LdapReferralException.java
deleted file mode 100755
index 92d6b50..0000000
--- a/ojluni/src/main/java/com/sun/jndi/ldap/LdapReferralException.java
+++ /dev/null
@@ -1,431 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-package com.sun.jndi.ldap;
-
-import javax.naming.*;
-import javax.naming.spi.*;
-import javax.naming.ldap.Control;
-
-import java.util.Hashtable;
-import java.util.Vector;
-
-/**
-  * This exception is raised when a referral to an alternative context
-  * is encountered.
-  * <p>
-  * An <tt>LdapReferralException</tt> object contains one or more referrals.
-  * Each referral is an alternative location for the same target entry.
-  * For example, a referral may be an LDAP URL.
-  * The referrals are attempted in sequence until one is successful or
-  * all have failed. In the case of the latter then the exception generated
-  * by the final referral is recorded and presented later.
-  * <p>
-  * A referral may be skipped or may be retried. For example, in the case
-  * of an authentication error, a referral may be retried with different
-  * environment properties.
-  * <p>
-  * An <tt>LdapReferralException</tt> object may also contain a reference
-  * to a chain of unprocessed <tt>LdapReferralException</tt> objects.
-  * Once the current set of referrals have been exhausted and unprocessed
-  * <tt>LdapReferralException</tt> objects remain, then the
-  * <tt>LdapReferralException</tt> object referenced by the current
-  * object is thrown and the cycle continues.
-  * <p>
-  * If new <tt>LdapReferralException</tt> objects are generated while
-  * following an existing referral then these new objects are appended
-  * to the end of the chain of unprocessed <tt>LdapReferralException</tt>
-  * objects.
-  * <p>
-  * If an exception was recorded while processing a chain of
-  * <tt>LdapReferralException</tt> objects then is is throw once
-  * processing has completed.
-  *
-  * @author Vincent Ryan
-  */
-final public class LdapReferralException extends
-    javax.naming.ldap.LdapReferralException {
-
-        // ----------- fields initialized in constructor ---------------
-    private int handleReferrals;
-    private Hashtable envprops;
-    private String nextName;
-    private Control[] reqCtls;
-
-        // ----------- fields that have defaults -----------------------
-    private Vector referrals = null;    // alternatives,set by setReferralInfo()
-    private int referralIndex = 0;      // index into referrals
-    private int referralCount = 0;      // count of referrals
-    private boolean foundEntry = false; // will stop when entry is found
-    private boolean skipThisReferral = false;
-    private int hopCount = 1;
-    private NamingException errorEx = null;
-    private String newRdn = null;
-    private boolean debug = false;
-            LdapReferralException nextReferralEx = null; // referral ex. chain
-
-    /**
-     * Constructs a new instance of LdapReferralException.
-     * @param   resolvedName    The part of the name that has been successfully
-     *                          resolved.
-     * @param   resolvedObj     The object to which resolution was successful.
-     * @param   remainingName   The remaining unresolved portion of the name.
-     * @param   explanation     Additional detail about this exception.
-     */
-    LdapReferralException(Name resolvedName,
-        Object resolvedObj,
-        Name remainingName,
-        String explanation,
-        Hashtable envprops,
-        String nextName,
-        int handleReferrals,
-        Control[] reqCtls) {
-
-        super(explanation);
-
-        if (debug)
-            System.out.println("LdapReferralException constructor");
-
-        setResolvedName(resolvedName);
-        setResolvedObj(resolvedObj);
-        setRemainingName(remainingName);
-        this.envprops = envprops;
-        this.nextName = nextName;
-        this.handleReferrals = handleReferrals;
-
-        // If following referral, request controls are passed to referral ctx
-        this.reqCtls =
-            (handleReferrals == LdapClient.LDAP_REF_FOLLOW ? reqCtls : null);
-    }
-
-    /**
-     * Gets a context at which to continue processing.
-     * The current environment properties are re-used.
-     */
-    public Context getReferralContext() throws NamingException {
-        return getReferralContext(envprops, null);
-    }
-
-    /**
-     * Gets a context at which to continue processing.
-     * The supplied environment properties are used.
-     */
-    public Context getReferralContext(Hashtable<?,?> newProps) throws
-        NamingException {
-        return getReferralContext(newProps, null);
-    }
-
-    /**
-     * Gets a context at which to continue processing.
-     * The supplied environment properties and connection controls are used.
-     */
-    public Context getReferralContext(Hashtable<?,?> newProps, Control[] connCtls)
-        throws NamingException {
-
-        if (debug)
-            System.out.println("LdapReferralException.getReferralContext");
-
-        LdapReferralContext refCtx = new LdapReferralContext(
-            this, newProps, connCtls, reqCtls,
-            nextName, skipThisReferral, handleReferrals);
-
-        refCtx.setHopCount(hopCount + 1);
-
-        if (skipThisReferral) {
-            skipThisReferral = false; // reset
-        }
-        return (Context)refCtx;
-    }
-
-    /**
-      * Gets referral information.
-      */
-    public Object getReferralInfo() {
-        if (debug) {
-            System.out.println("LdapReferralException.getReferralInfo");
-            System.out.println("  referralIndex=" + referralIndex);
-        }
-
-        if (hasMoreReferrals()) {
-            return referrals.elementAt(referralIndex);
-        } else {
-            return null;
-        }
-    }
-
-    /**
-     * Marks the current referral as one to be retried.
-     */
-    public void retryReferral() {
-        if (debug)
-            System.out.println("LdapReferralException.retryReferral");
-
-        if (referralIndex > 0)
-            referralIndex--; // decrement index
-    }
-
-    /**
-     * Marks the current referral as one to be ignored.
-     * Returns false when there are no referrals remaining to be processed.
-     */
-    public boolean skipReferral() {
-        if (debug)
-            System.out.println("LdapReferralException.skipReferral");
-
-        skipThisReferral = true;
-
-        // advance to next referral
-        try {
-            getNextReferral();
-        } catch (ReferralException e) {
-            // mask the referral exception
-        }
-
-        return (hasMoreReferrals() || hasMoreReferralExceptions());
-    }
-
-
-    /**
-     * Sets referral information.
-     */
-    void setReferralInfo(Vector referrals, boolean continuationRef) {
-        // %%% continuationRef is currently ignored
-
-        if (debug)
-            System.out.println("LdapReferralException.setReferralInfo");
-
-        this.referrals = referrals;
-        if (referrals != null) {
-            referralCount = referrals.size();
-        }
-
-        if (debug) {
-            for (int i = 0; i < referralCount; i++) {
-                System.out.println("  [" + i + "] " + referrals.elementAt(i));
-            }
-        }
-    }
-
-    /**
-     * Gets the next referral. When the current set of referrals have
-     * been exhausted then the next referral exception is thrown, if available.
-     */
-    String getNextReferral() throws ReferralException {
-
-        if (debug)
-            System.out.println("LdapReferralException.getNextReferral");
-
-        if (hasMoreReferrals()) {
-            return (String)referrals.elementAt(referralIndex++);
-        } else if (hasMoreReferralExceptions()) {
-            throw nextReferralEx;
-        } else {
-            return null;
-        }
-    }
-
-    /**
-     * Appends the supplied (chain of) referral exception onto the end of
-     * the current (chain of) referral exception. Spent referral exceptions
-     * are trimmed off.
-     */
-    LdapReferralException
-        appendUnprocessedReferrals(LdapReferralException back) {
-
-        if (debug) {
-            System.out.println(
-                "LdapReferralException.appendUnprocessedReferrals");
-            dump();
-            if (back != null) {
-                back.dump();
-            }
-        }
-
-        LdapReferralException front = this;
-
-        if (! front.hasMoreReferrals()) {
-            front = nextReferralEx; // trim
-
-            if ((errorEx != null) && (front != null)) {
-                front.setNamingException(errorEx); //advance the saved exception
-            }
-        }
-
-        // don't append onto itself
-        if (this == back) {
-            return front;
-        }
-
-        if ((back != null) && (! back.hasMoreReferrals())) {
-            back = back.nextReferralEx; // trim
-        }
-
-        if (back == null) {
-            return front;
-        }
-
-        // Locate the end of the current chain
-        LdapReferralException ptr = front;
-        while (ptr.nextReferralEx != null) {
-            ptr = ptr.nextReferralEx;
-        }
-        ptr.nextReferralEx = back; // append
-
-        return front;
-    }
-
-    /**
-     * Tests if there are any referrals remaining to be processed.
-     * If name resolution has already completed then any remaining
-     * referrals (in the current referral exception) will be ignored.
-     */
-    boolean hasMoreReferrals() {
-        if (debug)
-            System.out.println("LdapReferralException.hasMoreReferrals");
-
-        return (! foundEntry) && (referralIndex < referralCount);
-    }
-
-    /**
-     * Tests if there are any referral exceptions remaining to be processed.
-     */
-    boolean hasMoreReferralExceptions() {
-        if (debug)
-            System.out.println(
-                "LdapReferralException.hasMoreReferralExceptions");
-
-        return (nextReferralEx != null);
-    }
-
-    /**
-     * Sets the counter which records the number of hops that result
-     * from following a sequence of referrals.
-     */
-    void setHopCount(int hopCount) {
-        if (debug)
-            System.out.println("LdapReferralException.setHopCount");
-
-        this.hopCount = hopCount;
-    }
-
-    /**
-     * Sets the flag to indicate that the target name has been resolved.
-     */
-    void setNameResolved(boolean resolved) {
-        if (debug)
-            System.out.println("LdapReferralException.setNameResolved");
-
-        foundEntry = resolved;
-    }
-
-    /**
-     * Sets the exception generated while processing a referral.
-     * Only the first exception is recorded.
-     */
-    void setNamingException(NamingException e) {
-        if (debug)
-            System.out.println("LdapReferralException.setNamingException");
-
-        if (errorEx == null) {
-            e.setRootCause(this); //record the referral exception that caused it
-            errorEx = e;
-        }
-    }
-
-    /**
-     * Gets the new RDN name.
-     */
-    String getNewRdn() {
-        if (debug)
-            System.out.println("LdapReferralException.getNewRdn");
-
-        return newRdn;
-    }
-
-    /**
-     * Sets the new RDN name so that the rename operation can be completed
-     * (when a referral is being followed).
-     */
-    void setNewRdn(String newRdn) {
-        if (debug)
-            System.out.println("LdapReferralException.setNewRdn");
-
-        this.newRdn = newRdn;
-    }
-
-    /**
-     * Gets the exception generated while processing a referral.
-     */
-    NamingException getNamingException() {
-        if (debug)
-            System.out.println("LdapReferralException.getNamingException");
-
-        return errorEx;
-    }
-
-    /**
-     * Display the state of each element in a chain of LdapReferralException
-     * objects.
-     */
-    void dump() {
-
-        System.out.println();
-        System.out.println("LdapReferralException.dump");
-        LdapReferralException ptr = this;
-        while (ptr != null) {
-            ptr.dumpState();
-            ptr = ptr.nextReferralEx;
-        }
-    }
-
-    /**
-     * Display the state of this LdapReferralException object.
-     */
-    private void dumpState() {
-        System.out.println("LdapReferralException.dumpState");
-        System.out.println("  hashCode=" + hashCode());
-        System.out.println("  foundEntry=" + foundEntry);
-        System.out.println("  skipThisReferral=" + skipThisReferral);
-        System.out.println("  referralIndex=" + referralIndex);
-
-        if (referrals != null) {
-            System.out.println("  referrals:");
-            for (int i = 0; i < referralCount; i++) {
-                System.out.println("    [" + i + "] " + referrals.elementAt(i));
-            }
-        } else {
-            System.out.println("  referrals=null");
-        }
-
-        System.out.println("  errorEx=" + errorEx);
-
-        if (nextReferralEx == null) {
-            System.out.println("  nextRefEx=null");
-        } else {
-            System.out.println("  nextRefEx=" + nextReferralEx.hashCode());
-        }
-        System.out.println();
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/ldap/LdapRequest.java b/ojluni/src/main/java/com/sun/jndi/ldap/LdapRequest.java
deleted file mode 100755
index 23347ac..0000000
--- a/ojluni/src/main/java/com/sun/jndi/ldap/LdapRequest.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Copyright (c) 1999, 2011, 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.jndi.ldap;
-
-import java.io.IOException;
-import java.util.concurrent.BlockingQueue;
-import java.util.concurrent.LinkedBlockingQueue;
-import javax.naming.CommunicationException;
-
-final class LdapRequest {
-
-    LdapRequest next;   // Set/read in synchronized Connection methods
-    int msgId;          // read-only
-
-    private int gotten = 0;
-    private BlockingQueue<BerDecoder> replies;
-    private int highWatermark = -1;
-    private boolean cancelled = false;
-    private boolean pauseAfterReceipt = false;
-    private boolean completed = false;
-
-    LdapRequest(int msgId, boolean pause) {
-        this(msgId, pause, -1);
-    }
-
-    LdapRequest(int msgId, boolean pause, int replyQueueCapacity) {
-        this.msgId = msgId;
-        this.pauseAfterReceipt = pause;
-        if (replyQueueCapacity == -1) {
-            this.replies = new LinkedBlockingQueue<BerDecoder>();
-        } else {
-            this.replies =
-                new LinkedBlockingQueue<BerDecoder>(replyQueueCapacity);
-            highWatermark = (replyQueueCapacity * 80) / 100; // 80% capacity
-        }
-    }
-
-    synchronized void cancel() {
-        cancelled = true;
-
-        // Unblock reader of pending request
-        // Should only ever have atmost one waiter
-        notify();
-    }
-
-    synchronized boolean addReplyBer(BerDecoder ber) {
-        if (cancelled) {
-            return false;
-        }
-
-        // Add a new reply to the queue of unprocessed replies.
-        try {
-            replies.put(ber);
-        } catch (InterruptedException e) {
-            // ignore
-        }
-
-        // peek at the BER buffer to check if it is a SearchResultDone PDU
-        try {
-            ber.parseSeq(null);
-            ber.parseInt();
-            completed = (ber.peekByte() == LdapClient.LDAP_REP_RESULT);
-        } catch (IOException e) {
-            // ignore
-        }
-        ber.reset();
-
-        notify(); // notify anyone waiting for reply
-        /*
-         * If a queue capacity has been set then trigger a pause when the
-         * queue has filled to 80% capacity. Later, when the queue has drained
-         * then the reader gets unpaused.
-         */
-        if (highWatermark != -1 && replies.size() >= highWatermark) {
-            return true; // trigger the pause
-        }
-        return pauseAfterReceipt;
-    }
-
-    synchronized BerDecoder getReplyBer() throws CommunicationException {
-        if (cancelled) {
-            throw new CommunicationException("Request: " + msgId +
-                " cancelled");
-        }
-
-        /*
-         * Remove a reply if the queue is not empty.
-         * poll returns null if queue is empty.
-         */
-        BerDecoder reply = replies.poll();
-        return reply;
-    }
-
-    synchronized boolean hasSearchCompleted() {
-        return completed;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/ldap/LdapResult.java b/ojluni/src/main/java/com/sun/jndi/ldap/LdapResult.java
deleted file mode 100755
index b923b1a..0000000
--- a/ojluni/src/main/java/com/sun/jndi/ldap/LdapResult.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Copyright (c) 1999, 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.jndi.ldap;
-
-import java.util.Vector;
-import javax.naming.directory.Attributes;
-import javax.naming.directory.BasicAttributes;
-
-/**
-  * %%% public for use by LdapSasl %%%
-  */
-public final class LdapResult {
-    int msgId;
-    public int status;                  // %%% public for use by LdapSasl
-    String matchedDN;
-    String errorMessage;
-    Vector referrals = null;
-    LdapReferralException refEx = null;
-    Vector entries = null;
-    Vector resControls = null;
-    public byte[] serverCreds = null;   // %%% public for use by LdapSasl
-    String extensionId = null;          // string OID
-    byte[] extensionValue = null;       // BER OCTET STRING
-
-
-    // This function turns an LdapResult that came from a compare operation
-    // into one that looks like it came from a search operation. This is
-    // useful when the caller asked the context to do a search, but it was
-    // carried out as a compare. In this case, the client still expects a
-    // result that looks like it came from a search.
-    boolean compareToSearchResult(String name) {
-        boolean successful = false;
-
-        switch (status) {
-            case LdapClient.LDAP_COMPARE_TRUE:
-                status = LdapClient.LDAP_SUCCESS;
-                entries = new Vector(1,1);
-                Attributes attrs = new BasicAttributes(LdapClient.caseIgnore);
-                LdapEntry entry = new LdapEntry( name, attrs );
-                entries.addElement(entry);
-                successful = true;
-                break;
-
-            case LdapClient.LDAP_COMPARE_FALSE:
-                status = LdapClient.LDAP_SUCCESS;
-                entries = new Vector(0);
-                successful = true;
-                break;
-
-            default:
-                successful = false;
-                break;
-        }
-
-        return successful;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/ldap/LdapSchemaCtx.java b/ojluni/src/main/java/com/sun/jndi/ldap/LdapSchemaCtx.java
deleted file mode 100755
index 64d4a60..0000000
--- a/ojluni/src/main/java/com/sun/jndi/ldap/LdapSchemaCtx.java
+++ /dev/null
@@ -1,434 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-package com.sun.jndi.ldap;
-
-import javax.naming.*;
-import javax.naming.directory.*;
-import java.util.Hashtable;
-import com.sun.jndi.toolkit.dir.HierMemDirCtx;
-
-/**
- * This is the class used to implement LDAP's GetSchema call.
- *
- * It subclasses HierMemDirContext for most of the functionality. It
- * overrides functions that cause the schema definitions to change.
- * In such a case, it write the schema to the LdapServer and (assuming
- * there are no errors), calls it's superclass's equivalent function.
- * Thus, the schema tree and the LDAP server's schema attributes are
- * always in sync.
- */
-
-final class LdapSchemaCtx extends HierMemDirCtx {
-
-    static private final boolean debug = false;
-
-    private static final int LEAF = 0;  // schema object (e.g. attribute type defn)
-    private static final int SCHEMA_ROOT = 1;   // schema tree root
-    static final int OBJECTCLASS_ROOT = 2;   // root of object class subtree
-    static final int ATTRIBUTE_ROOT = 3;     // root of attribute type subtree
-    static final int SYNTAX_ROOT = 4;        // root of syntax subtree
-    static final int MATCHRULE_ROOT = 5;     // root of matching rule subtree
-    static final int OBJECTCLASS = 6;   // an object class definition
-    static final int ATTRIBUTE = 7;     // an attribute type definition
-    static final int SYNTAX = 8;        // a syntax definition
-    static final int MATCHRULE = 9;     // a matching rule definition
-
-    private SchemaInfo info= null;
-    private boolean setupMode = true;
-
-    private int objectType;
-
-    static DirContext createSchemaTree(Hashtable env, String subschemasubentry,
-        LdapCtx schemaEntry, Attributes schemaAttrs, boolean netscapeBug)
-        throws NamingException {
-            try {
-                LdapSchemaParser parser = new LdapSchemaParser(netscapeBug);
-
-                SchemaInfo allinfo = new SchemaInfo(subschemasubentry,
-                    schemaEntry, parser);
-
-                LdapSchemaCtx root = new LdapSchemaCtx(SCHEMA_ROOT, env, allinfo);
-                parser.LDAP2JNDISchema(schemaAttrs, root);
-                return root;
-            } catch (NamingException e) {
-                schemaEntry.close(); // cleanup
-                throw e;
-            }
-    }
-
-    // Called by createNewCtx
-    private LdapSchemaCtx(int objectType, Hashtable environment, SchemaInfo info) {
-        super(environment, LdapClient.caseIgnore);
-
-        this.objectType = objectType;
-        this.info = info;
-    }
-
-    // override HierMemDirCtx.close to prevent premature GC of shared data
-    public void close() throws NamingException {
-        info.close();
-    }
-
-    // override to ignore obj and use attrs
-    // treat same as createSubcontext
-    final public void bind(Name name, Object obj, Attributes attrs)
-        throws NamingException {
-        if (!setupMode) {
-            if (obj != null) {
-                throw new IllegalArgumentException("obj must be null");
-            }
-
-            // Update server
-            addServerSchema(attrs);
-        }
-
-        // Update in-memory copy
-        LdapSchemaCtx newEntry =
-            (LdapSchemaCtx)super.doCreateSubcontext(name, attrs);
-    }
-
-    final protected void doBind(Name name, Object obj, Attributes attrs,
-        boolean useFactory) throws NamingException {
-        if (!setupMode) {
-            throw new SchemaViolationException(
-                "Cannot bind arbitrary object; use createSubcontext()");
-        } else {
-            super.doBind(name, obj, attrs, false); // always ignore factories
-        }
-    }
-
-    // override to use bind() instead
-    final public void rebind(Name name, Object obj, Attributes attrs)
-        throws NamingException {
-        try {
-            doLookup(name, false);
-            throw new SchemaViolationException(
-                "Cannot replace existing schema object");
-        } catch (NameNotFoundException e) {
-            bind(name, obj, attrs);
-        }
-    }
-
-    final protected void doRebind(Name name, Object obj, Attributes attrs,
-        boolean useFactory) throws NamingException {
-        if (!setupMode) {
-            throw new SchemaViolationException(
-                "Cannot bind arbitrary object; use createSubcontext()");
-        } else {
-            super.doRebind(name, obj, attrs, false); // always ignore factories
-        }
-    }
-
-    final protected void doUnbind(Name name) throws NamingException {
-        if (!setupMode) {
-            // Update server
-            try {
-                // Lookup entry from memory
-                LdapSchemaCtx target = (LdapSchemaCtx)doLookup(name, false);
-
-                deleteServerSchema(target.attrs);
-            } catch (NameNotFoundException e) {
-                return;
-            }
-        }
-        // Update in-memory copy
-        super.doUnbind(name);
-    }
-
-    final protected void doRename(Name oldname, Name newname)
-        throws NamingException {
-        if (!setupMode) {
-            throw new SchemaViolationException("Cannot rename a schema object");
-        } else {
-            super.doRename(oldname, newname);
-        }
-    }
-
-    final protected void doDestroySubcontext(Name name) throws NamingException {
-        if (!setupMode) {
-            // Update server
-            try {
-                // Lookup entry from memory
-                LdapSchemaCtx target = (LdapSchemaCtx)doLookup(name, false);
-
-                deleteServerSchema(target.attrs);
-            } catch (NameNotFoundException e) {
-                return;
-            }
-        }
-
-        // Update in-memory copy
-        super.doDestroySubcontext(name);
-     }
-
-    // Called to create oc, attr, syntax or matching rule roots and leaf entries
-    final LdapSchemaCtx setup(int objectType, String name, Attributes attrs)
-        throws NamingException{
-            try {
-                setupMode = true;
-                LdapSchemaCtx answer =
-                    (LdapSchemaCtx) super.doCreateSubcontext(
-                        new CompositeName(name), attrs);
-
-                answer.objectType = objectType;
-                answer.setupMode = false;
-                return answer;
-            } finally {
-                setupMode = false;
-            }
-    }
-
-    final protected DirContext doCreateSubcontext(Name name, Attributes attrs)
-        throws NamingException {
-
-        if (attrs == null || attrs.size() == 0) {
-            throw new SchemaViolationException(
-                "Must supply attributes describing schema");
-        }
-
-        if (!setupMode) {
-            // Update server
-            addServerSchema(attrs);
-        }
-
-        // Update in-memory copy
-        LdapSchemaCtx newEntry =
-            (LdapSchemaCtx) super.doCreateSubcontext(name, attrs);
-        return newEntry;
-    }
-
-    final private static Attributes deepClone(Attributes orig)
-        throws NamingException {
-        BasicAttributes copy = new BasicAttributes(true);
-        NamingEnumeration attrs = orig.getAll();
-        while (attrs.hasMore()) {
-            copy.put((Attribute)((Attribute)attrs.next()).clone());
-        }
-        return copy;
-    }
-
-    final protected void doModifyAttributes(ModificationItem[] mods)
-        throws NamingException {
-        if (setupMode) {
-            super.doModifyAttributes(mods);
-        } else {
-            Attributes copy = deepClone(attrs);
-
-            // Apply modifications to copy
-            applyMods(mods, copy);
-
-            // Update server copy
-            modifyServerSchema(attrs, copy);
-
-            // Update in-memory copy
-            attrs = copy;
-        }
-    }
-
-    // we override this so the superclass creates the right kind of contexts
-    // Default is to create LEAF objects; caller will change after creation
-    // if necessary
-    final protected HierMemDirCtx createNewCtx() {
-        LdapSchemaCtx ctx = new LdapSchemaCtx(LEAF, myEnv, info);
-        return ctx;
-    }
-
-
-    final private void addServerSchema(Attributes attrs)
-        throws NamingException {
-        Attribute schemaAttr;
-
-        switch (objectType) {
-        case OBJECTCLASS_ROOT:
-            schemaAttr = info.parser.stringifyObjDesc(attrs);
-            break;
-
-        case ATTRIBUTE_ROOT:
-            schemaAttr = info.parser.stringifyAttrDesc(attrs);
-            break;
-
-        case SYNTAX_ROOT:
-            schemaAttr = info.parser.stringifySyntaxDesc(attrs);
-            break;
-
-        case MATCHRULE_ROOT:
-            schemaAttr = info.parser.stringifyMatchRuleDesc(attrs);
-            break;
-
-        case SCHEMA_ROOT:
-            throw new SchemaViolationException(
-                "Cannot create new entry under schema root");
-
-        default:
-            throw new SchemaViolationException(
-                "Cannot create child of schema object");
-        }
-
-        Attributes holder = new BasicAttributes(true);
-        holder.put(schemaAttr);
-        //System.err.println((String)schemaAttr.get());
-
-        info.modifyAttributes(myEnv, DirContext.ADD_ATTRIBUTE, holder);
-
-    }
-
-    /**
-      * When we delete an entry, we use the original to make sure that
-      * any formatting inconsistencies are eliminated.
-      * This is because we're just deleting a value from an attribute
-      * on the server and there might not be any checks for extra spaces
-      * or parens.
-      */
-    final private void deleteServerSchema(Attributes origAttrs)
-        throws NamingException {
-
-        Attribute origAttrVal;
-
-        switch (objectType) {
-        case OBJECTCLASS_ROOT:
-            origAttrVal = info.parser.stringifyObjDesc(origAttrs);
-            break;
-
-        case ATTRIBUTE_ROOT:
-            origAttrVal = info.parser.stringifyAttrDesc(origAttrs);
-            break;
-
-        case SYNTAX_ROOT:
-            origAttrVal = info.parser.stringifySyntaxDesc(origAttrs);
-            break;
-
-        case MATCHRULE_ROOT:
-            origAttrVal = info.parser.stringifyMatchRuleDesc(origAttrs);
-            break;
-
-        case SCHEMA_ROOT:
-            throw new SchemaViolationException(
-                "Cannot delete schema root");
-
-        default:
-            throw new SchemaViolationException(
-                "Cannot delete child of schema object");
-        }
-
-        ModificationItem[] mods = new ModificationItem[1];
-        mods[0] = new ModificationItem(DirContext.REMOVE_ATTRIBUTE, origAttrVal);
-
-        info.modifyAttributes(myEnv, mods);
-    }
-
-    /**
-      * When we modify an entry, we use the original attribute value
-      * in the schema to make sure that any formatting inconsistencies
-      * are eliminated. A modification is done by deleting the original
-      * value and adding a new value with the modification.
-      */
-    final private void modifyServerSchema(Attributes origAttrs,
-        Attributes newAttrs) throws NamingException {
-
-        Attribute newAttrVal;
-        Attribute origAttrVal;
-
-        switch (objectType) {
-        case OBJECTCLASS:
-            origAttrVal = info.parser.stringifyObjDesc(origAttrs);
-            newAttrVal = info.parser.stringifyObjDesc(newAttrs);
-            break;
-
-        case ATTRIBUTE:
-            origAttrVal = info.parser.stringifyAttrDesc(origAttrs);
-            newAttrVal = info.parser.stringifyAttrDesc(newAttrs);
-            break;
-
-        case SYNTAX:
-            origAttrVal = info.parser.stringifySyntaxDesc(origAttrs);
-            newAttrVal = info.parser.stringifySyntaxDesc(newAttrs);
-            break;
-
-        case MATCHRULE:
-            origAttrVal = info.parser.stringifyMatchRuleDesc(origAttrs);
-            newAttrVal = info.parser.stringifyMatchRuleDesc(newAttrs);
-            break;
-
-        default:
-            throw new SchemaViolationException(
-                "Cannot modify schema root");
-        }
-
-        ModificationItem[] mods = new ModificationItem[2];
-        mods[0] = new ModificationItem(DirContext.REMOVE_ATTRIBUTE, origAttrVal);
-        mods[1] = new ModificationItem(DirContext.ADD_ATTRIBUTE, newAttrVal);
-
-        info.modifyAttributes(myEnv, mods);
-    }
-
-    final static private class SchemaInfo {
-        private LdapCtx schemaEntry;
-        private String schemaEntryName;
-        LdapSchemaParser parser;
-        private String host;
-        private int port;
-        private boolean hasLdapsScheme;
-
-        SchemaInfo(String schemaEntryName, LdapCtx schemaEntry,
-            LdapSchemaParser parser) {
-            this.schemaEntryName = schemaEntryName;
-            this.schemaEntry = schemaEntry;
-            this.parser = parser;
-            this.port = schemaEntry.port_number;
-            this.host = schemaEntry.hostname;
-            this.hasLdapsScheme = schemaEntry.hasLdapsScheme;
-        }
-
-        synchronized void close() throws NamingException {
-            if (schemaEntry != null) {
-                schemaEntry.close();
-                schemaEntry = null;
-            }
-        }
-
-        private LdapCtx reopenEntry(Hashtable env) throws NamingException {
-            // Use subschemasubentry name as DN
-            return new LdapCtx(schemaEntryName, host, port,
-                                env, hasLdapsScheme);
-        }
-
-        synchronized void modifyAttributes(Hashtable env, ModificationItem[] mods)
-            throws NamingException {
-            if (schemaEntry == null) {
-                schemaEntry = reopenEntry(env);
-            }
-            schemaEntry.modifyAttributes("", mods);
-        }
-
-        synchronized void modifyAttributes(Hashtable env, int mod,
-            Attributes attrs) throws NamingException {
-            if (schemaEntry == null) {
-                schemaEntry = reopenEntry(env);
-            }
-            schemaEntry.modifyAttributes("", mod, attrs);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/ldap/LdapSchemaParser.java b/ojluni/src/main/java/com/sun/jndi/ldap/LdapSchemaParser.java
deleted file mode 100755
index 3696a96..0000000
--- a/ojluni/src/main/java/com/sun/jndi/ldap/LdapSchemaParser.java
+++ /dev/null
@@ -1,1304 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-package com.sun.jndi.ldap;
-
-import javax.naming.*;
-import javax.naming.directory.*;
-import java.util.Hashtable;
-import java.util.Vector;
-
-/**
- * Netscape's 3.1 servers have some schema bugs:
- * - It puts quotes around OIDs (such as those for SUP, SYNTAX).
- * - When you try to write out the MUST/MAY list (such as "MUST cn"),
- *   it wants ("MUST (cn)") instead
- */
-
-final class LdapSchemaParser {
-
-    // do debugging
-    private static final boolean debug = false;
-
-
-    // names of attribute IDs in the LDAP schema entry
-    static final String OBJECTCLASSDESC_ATTR_ID = "objectClasses";
-    static final String ATTRIBUTEDESC_ATTR_ID = "attributeTypes";
-    static final String SYNTAXDESC_ATTR_ID = "ldapSyntaxes";
-    static final String MATCHRULEDESC_ATTR_ID = "matchingRules";
-
-    // information for creating internal nodes in JNDI schema tree
-    static final String OBJECTCLASS_DEFINITION_NAME =
-                        "ClassDefinition";
-    private static final String[] CLASS_DEF_ATTRS = {
-                         "objectclass", "ClassDefinition"};
-            static final String ATTRIBUTE_DEFINITION_NAME =
-                        "AttributeDefinition";
-    private static final String[] ATTR_DEF_ATTRS = {
-                        "objectclass", "AttributeDefinition" };
-            static final String SYNTAX_DEFINITION_NAME =
-                        "SyntaxDefinition";
-    private static final String[] SYNTAX_DEF_ATTRS = {
-                        "objectclass", "SyntaxDefinition" };
-            static final String MATCHRULE_DEFINITION_NAME =
-                        "MatchingRule";
-    private static final String[] MATCHRULE_DEF_ATTRS = {
-                        "objectclass", "MatchingRule" };
-
-    // special tokens used in LDAP schema descriptions
-    private static final char   SINGLE_QUOTE = '\'';
-    private static final char   WHSP = ' ';
-    private static final char   OID_LIST_BEGIN = '(';
-    private static final char   OID_LIST_END = ')';
-    private static final char   OID_SEPARATOR = '$';
-
-    // common IDs
-    private static final String  NUMERICOID_ID = "NUMERICOID";
-    private static final String        NAME_ID = "NAME";
-    private static final String        DESC_ID = "DESC";
-    private static final String    OBSOLETE_ID = "OBSOLETE";
-    private static final String         SUP_ID = "SUP";
-    private static final String     PRIVATE_ID = "X-";
-
-    // Object Class specific IDs
-    private static final String    ABSTRACT_ID = "ABSTRACT";
-    private static final String  STRUCTURAL_ID = "STRUCTURAL";
-    private static final String    AUXILARY_ID = "AUXILIARY";
-    private static final String        MUST_ID = "MUST";
-    private static final String         MAY_ID = "MAY";
-
-    // Attribute Type specific IDs
-    private static final String    EQUALITY_ID = "EQUALITY";
-    private static final String    ORDERING_ID = "ORDERING";
-    private static final String      SUBSTR_ID = "SUBSTR";
-    private static final String      SYNTAX_ID = "SYNTAX";
-    private static final String  SINGLE_VAL_ID = "SINGLE-VALUE";
-    private static final String  COLLECTIVE_ID = "COLLECTIVE";
-    private static final String NO_USER_MOD_ID = "NO-USER-MODIFICATION";
-    private static final String       USAGE_ID = "USAGE";
-
-    // The string value we give to boolean variables
-    private static final String SCHEMA_TRUE_VALUE = "true";
-
-    // To get around writing schemas that crash Netscape server
-    private boolean netscapeBug;
-
-    LdapSchemaParser(boolean netscapeBug) {
-        this.netscapeBug = netscapeBug;
-    }
-
-    final static void LDAP2JNDISchema(Attributes schemaAttrs,
-        LdapSchemaCtx schemaRoot) throws NamingException {
-        Attribute               objectClassesAttr = null;
-        Attribute               attributeDefAttr = null;
-        Attribute               syntaxDefAttr = null;
-        Attribute               matchRuleDefAttr = null;
-
-        objectClassesAttr = schemaAttrs.get(OBJECTCLASSDESC_ATTR_ID);
-        if(objectClassesAttr != null) {
-            objectDescs2ClassDefs(objectClassesAttr,schemaRoot);
-        }
-
-        attributeDefAttr = schemaAttrs.get(ATTRIBUTEDESC_ATTR_ID);
-        if(attributeDefAttr != null) {
-            attrDescs2AttrDefs(attributeDefAttr, schemaRoot);
-        }
-
-        syntaxDefAttr = schemaAttrs.get(SYNTAXDESC_ATTR_ID);
-        if(syntaxDefAttr != null) {
-            syntaxDescs2SyntaxDefs(syntaxDefAttr, schemaRoot);
-        }
-
-        matchRuleDefAttr = schemaAttrs.get(MATCHRULEDESC_ATTR_ID);
-        if(matchRuleDefAttr != null) {
-            matchRuleDescs2MatchRuleDefs(matchRuleDefAttr, schemaRoot);
-        }
-    }
-
-    final private static DirContext objectDescs2ClassDefs(Attribute objDescsAttr,
-                                                   LdapSchemaCtx schemaRoot)
-        throws NamingException {
-
-        NamingEnumeration       objDescs;
-        Attributes      objDef;
-        LdapSchemaCtx   classDefTree;
-
-        // create the class def subtree
-        Attributes attrs = new BasicAttributes(LdapClient.caseIgnore);
-        attrs.put(CLASS_DEF_ATTRS[0], CLASS_DEF_ATTRS[1]);
-        classDefTree = schemaRoot.setup(LdapSchemaCtx.OBJECTCLASS_ROOT,
-            OBJECTCLASS_DEFINITION_NAME, attrs);
-
-        objDescs = objDescsAttr.getAll();
-        String currentName;
-        while(objDescs.hasMore()) {
-            String objDesc = (String)objDescs.next();
-            try {
-                Object[] def = desc2Def(objDesc);
-                currentName = (String) def[0];
-                objDef = (Attributes) def[1];
-                classDefTree.setup(LdapSchemaCtx.OBJECTCLASS,
-                    currentName, objDef);
-            } catch (NamingException ne) {
-                // error occurred while parsing, ignore current entry
-            }
-        }
-
-        return classDefTree;
-    }
-
-    final private static DirContext attrDescs2AttrDefs(Attribute attributeDescAttr,
-                                                LdapSchemaCtx schemaRoot)
-        throws NamingException {
-
-        NamingEnumeration       attrDescs;
-        Attributes      attrDef;
-        LdapSchemaCtx   attrDefTree;
-
-        // create the AttributeDef subtree
-        Attributes attrs = new BasicAttributes(LdapClient.caseIgnore);
-        attrs.put(ATTR_DEF_ATTRS[0], ATTR_DEF_ATTRS[1]);
-        attrDefTree = schemaRoot.setup(LdapSchemaCtx.ATTRIBUTE_ROOT,
-            ATTRIBUTE_DEFINITION_NAME, attrs);
-
-        attrDescs = attributeDescAttr.getAll();
-        String currentName;
-        while(attrDescs.hasMore()) {
-            String attrDesc = (String)attrDescs.next();
-            try {
-                Object[] def = desc2Def(attrDesc);
-                currentName = (String) def[0];
-                attrDef = (Attributes) def[1];
-                attrDefTree.setup(LdapSchemaCtx.ATTRIBUTE,
-                    currentName, attrDef);
-            } catch (NamingException ne) {
-                // error occurred while parsing, ignore current entry
-            }
-        }
-
-        return attrDefTree;
-    }
-
-    final private static DirContext syntaxDescs2SyntaxDefs(
-                                                Attribute syntaxDescAttr,
-                                                LdapSchemaCtx schemaRoot)
-        throws NamingException {
-
-        NamingEnumeration       syntaxDescs;
-        Attributes      syntaxDef;
-        LdapSchemaCtx   syntaxDefTree;
-
-        // create the SyntaxDef subtree
-        Attributes attrs = new BasicAttributes(LdapClient.caseIgnore);
-        attrs.put(SYNTAX_DEF_ATTRS[0], SYNTAX_DEF_ATTRS[1]);
-        syntaxDefTree = schemaRoot.setup(LdapSchemaCtx.SYNTAX_ROOT,
-            SYNTAX_DEFINITION_NAME, attrs);
-
-        syntaxDescs = syntaxDescAttr.getAll();
-        String currentName;
-        while(syntaxDescs.hasMore()) {
-            String syntaxDesc = (String)syntaxDescs.next();
-            try {
-                Object[] def = desc2Def(syntaxDesc);
-                currentName = (String) def[0];
-                syntaxDef = (Attributes) def[1];
-                syntaxDefTree.setup(LdapSchemaCtx.SYNTAX,
-                    currentName, syntaxDef);
-            } catch (NamingException ne) {
-                // error occurred while parsing, ignore current entry
-            }
-        }
-
-        return syntaxDefTree;
-    }
-
-    final private static DirContext matchRuleDescs2MatchRuleDefs(
-                                                Attribute matchRuleDescAttr,
-                                                LdapSchemaCtx schemaRoot)
-        throws NamingException {
-
-        NamingEnumeration       matchRuleDescs;
-        Attributes      matchRuleDef;
-        LdapSchemaCtx   matchRuleDefTree;
-
-        // create the MatchRuleDef subtree
-        Attributes attrs = new BasicAttributes(LdapClient.caseIgnore);
-        attrs.put(MATCHRULE_DEF_ATTRS[0], MATCHRULE_DEF_ATTRS[1]);
-        matchRuleDefTree = schemaRoot.setup(LdapSchemaCtx.MATCHRULE_ROOT,
-            MATCHRULE_DEFINITION_NAME, attrs);
-
-        matchRuleDescs = matchRuleDescAttr.getAll();
-        String currentName;
-        while(matchRuleDescs.hasMore()) {
-            String matchRuleDesc = (String)matchRuleDescs.next();
-            try {
-                Object[] def = desc2Def(matchRuleDesc);
-                currentName = (String) def[0];
-                matchRuleDef = (Attributes) def[1];
-                matchRuleDefTree.setup(LdapSchemaCtx.MATCHRULE,
-                    currentName, matchRuleDef);
-            } catch (NamingException ne) {
-                // error occurred while parsing, ignore current entry
-            }
-        }
-
-        return matchRuleDefTree;
-    }
-
-    final private static Object[] desc2Def(String desc)
-        throws NamingException {
-            //System.err.println(desc);
-
-        Attributes      attrs = new BasicAttributes(LdapClient.caseIgnore);
-        Attribute       attr = null;
-        int[]           pos = new int[]{1}; // tolerate missing leading space
-        boolean         moreTags = true;
-
-        // Always begins with <whsp numericoid whsp>
-        attr = readNumericOID(desc, pos);
-        String currentName = (String) attr.get(0);  // name is OID by default
-        attrs.put(attr);
-
-        skipWhitespace(desc, pos);
-
-        while (moreTags) {
-            attr = readNextTag(desc, pos);
-            attrs.put(attr);
-
-            if (attr.getID().equals(NAME_ID)) {
-                currentName = (String) attr.get(0);  // use NAME attribute as name
-            }
-
-            skipWhitespace(desc, pos);
-
-            if( pos[0] >= desc.length() -1 ) {
-                moreTags = false;
-            }
-        }
-
-        return new Object[] {currentName, attrs};
-    }
-
-    // returns the index of the first whitespace char of a linear whitspace
-    // sequince ending at the given position.
-    final private static int findTrailingWhitespace(String string, int pos) {
-        for(int i = pos; i > 0; i--) {
-            if(string.charAt(i) != WHSP) {
-                return i + 1;
-            }
-        }
-        return 0;
-    }
-
-    final private static void skipWhitespace(String string, int[] pos) {
-        for(int i=pos[0]; i < string.length(); i++) {
-            if(string.charAt(i) != WHSP) {
-                pos[0] = i;
-                if (debug) {
-                    System.err.println("skipWhitespace: skipping to "+i);
-                }
-                return;
-            }
-        }
-    }
-
-    final private static Attribute readNumericOID(String string, int[] pos)
-        throws NamingException {
-
-        if (debug) {
-            System.err.println("readNumericoid: pos="+pos[0]);
-        }
-
-        int begin, end;
-        String value = null;
-
-        skipWhitespace(string, pos);
-
-        begin = pos[0];
-        end = string.indexOf(WHSP, begin);
-
-        if (end == -1 || end - begin < 1) {
-            throw new InvalidAttributeValueException("no numericoid found: "
-                                                     + string);
-        }
-
-        value = string.substring(begin, end);
-
-        pos[0] += value.length();
-
-        return new BasicAttribute(NUMERICOID_ID, value);
-    }
-
-    final private static Attribute readNextTag(String string, int[] pos)
-        throws NamingException {
-
-        Attribute       attr = null;
-        String          tagName = null;
-        String[]        values = null;
-
-        skipWhitespace(string, pos);
-
-        if (debug) {
-            System.err.println("readNextTag: pos="+pos[0]);
-        }
-
-        // get the name and values of the attribute to return
-        int trailingSpace = string.indexOf( WHSP, pos[0] );
-
-        // tolerate a schema that omits the trailing space
-        if (trailingSpace < 0) {
-            tagName = string.substring( pos[0], string.length() - 1);
-        } else {
-            tagName = string.substring( pos[0], trailingSpace );
-        }
-
-        values = readTag(tagName, string, pos);
-
-        // make sure at least one value was returned
-        if(values.length < 0) {
-            throw new InvalidAttributeValueException("no values for " +
-                                                     "attribute \"" +
-                                                     tagName + "\"");
-        }
-
-        // create the attribute, using the first value
-        attr = new BasicAttribute(tagName, values[0]);
-
-        // add other values if there are any
-        for(int i = 1; i < values.length; i++) {
-            attr.add(values[i]);
-        }
-
-        return attr;
-    }
-
-    final private static String[] readTag(String tag, String string, int[] pos)
-        throws NamingException {
-
-        if (debug) {
-            System.err.println("ReadTag: " + tag + " pos="+pos[0]);
-        }
-
-        // move parser past tag name
-        pos[0] += tag.length();
-        skipWhitespace(string, pos);
-
-        if (tag.equals(NAME_ID)) {
-            return readQDescrs(string, pos);  // names[0] is NAME
-        }
-
-        if(tag.equals(DESC_ID)) {
-           return readQDString(string, pos);
-        }
-
-        if (
-           tag.equals(EQUALITY_ID) ||
-           tag.equals(ORDERING_ID) ||
-           tag.equals(SUBSTR_ID) ||
-           tag.equals(SYNTAX_ID)) {
-            return readWOID(string, pos);
-        }
-
-        if (tag.equals(OBSOLETE_ID) ||
-            tag.equals(ABSTRACT_ID) ||
-            tag.equals(STRUCTURAL_ID) ||
-            tag.equals(AUXILARY_ID) ||
-            tag.equals(SINGLE_VAL_ID) ||
-            tag.equals(COLLECTIVE_ID) ||
-            tag.equals(NO_USER_MOD_ID)) {
-            return new String[] {SCHEMA_TRUE_VALUE};
-        }
-
-        if (tag.equals(SUP_ID) ||   // oid list for object class; WOID for attribute
-            tag.equals(MUST_ID) ||
-            tag.equals(MAY_ID) ||
-            tag.equals(USAGE_ID)) {
-            return readOIDs(string, pos);
-        }
-
-        // otherwise it's a schema element with a quoted string value
-        return readQDStrings(string, pos);
-    }
-
-    final private static String[] readQDString(String string, int[] pos)
-        throws NamingException {
-
-        int begin, end;
-
-        begin = string.indexOf(SINGLE_QUOTE, pos[0]) + 1;
-        end = string.indexOf(SINGLE_QUOTE, begin);
-
-        if (debug) {
-            System.err.println("ReadQDString: pos=" + pos[0] +
-                               " begin=" + begin + " end=" + end);
-        }
-
-        if(begin == -1 || end == -1 || begin == end) {
-            throw new InvalidAttributeIdentifierException("malformed " +
-                                                          "QDString: " +
-                                                          string);
-        }
-
-        // make sure the qdstring end symbol is there
-        if (string.charAt(begin - 1) != SINGLE_QUOTE) {
-            throw new InvalidAttributeIdentifierException("qdstring has " +
-                                                          "no end mark: " +
-                                                          string);
-        }
-
-        pos[0] = end+1;
-        return new String[] {string.substring(begin, end)};
-    }
-
-   /**
-    * dstring         = 1*utf8
-    * qdstring        = whsp "'" dstring "'" whsp
-    * qdstringlist    = [ qdstring *( qdstring ) ]
-    * qdstrings       = qdstring / ( whsp "(" qdstringlist ")" whsp )
-    */
-    private final static String[] readQDStrings(String string, int[] pos)
-        throws NamingException {
-
-        return readQDescrs(string, pos);
-    }
-
-    /**
-     * ; object descriptors used as schema element names
-     * qdescrs         = qdescr / ( whsp "(" qdescrlist ")" whsp )
-     * qdescrlist      = [ qdescr *( qdescr ) ]
-     * qdescr          = whsp "'" descr "'" whsp
-     * descr           = keystring
-     */
-    final private static String[] readQDescrs(String string, int[] pos)
-        throws NamingException {
-
-        if (debug) {
-            System.err.println("readQDescrs: pos="+pos[0]);
-        }
-
-        skipWhitespace(string, pos);
-
-        switch( string.charAt(pos[0]) ) {
-        case OID_LIST_BEGIN:
-            return readQDescrList(string, pos);
-        case SINGLE_QUOTE:
-            return readQDString(string, pos);
-        default:
-            throw new InvalidAttributeValueException("unexpected oids " +
-                                                     "string: " + string);
-        }
-    }
-
-    /**
-     * qdescrlist      = [ qdescr *( qdescr ) ]
-     * qdescr          = whsp "'" descr "'" whsp
-     * descr           = keystring
-     */
-    final private static String[] readQDescrList(String string, int[] pos)
-        throws NamingException {
-
-        int     begin, end;
-        Vector  values = new Vector(5);
-
-        if (debug) {
-            System.err.println("ReadQDescrList: pos="+pos[0]);
-        }
-
-        pos[0]++; // skip '('
-        skipWhitespace(string, pos);
-        begin = pos[0];
-        end = string.indexOf(OID_LIST_END, begin);
-
-        if(end == -1) {
-            throw new InvalidAttributeValueException ("oidlist has no end "+
-                                                      "mark: " + string);
-        }
-
-        while(begin < end) {
-            String[] one = readQDString(string,  pos);
-
-            if (debug) {
-                System.err.println("ReadQDescrList: found '" + one[0] +
-                                   "' at begin=" + begin + " end =" + end);
-            }
-
-            values.addElement(one[0]);
-            skipWhitespace(string, pos);
-            begin = pos[0];
-        }
-
-        pos[0] = end+1; // skip ')'
-
-        String[] answer = new String[values.size()];
-        for (int i = 0; i < answer.length; i++) {
-            answer[i] = (String)values.elementAt(i);
-        }
-        return answer;
-    }
-
-    final private static String[] readWOID(String string, int[] pos)
-        throws NamingException {
-
-        if (debug) {
-            System.err.println("readWOIDs: pos="+pos[0]);
-        }
-
-        skipWhitespace(string, pos);
-
-        if (string.charAt(pos[0]) == SINGLE_QUOTE) {
-            // %%% workaround for Netscape schema bug
-            return readQDString(string, pos);
-        }
-
-        int begin, end;
-
-        begin = pos[0];
-        end = string.indexOf(WHSP, begin);
-
-        if (debug) {
-            System.err.println("ReadWOID: pos=" + pos[0] +
-                               " begin=" + begin + " end=" + end);
-        }
-
-        if(end == -1 || begin == end) {
-            throw new InvalidAttributeIdentifierException("malformed " +
-                                                          "OID: " +
-                                                          string);
-        }
-        pos[0] = end+1;
-
-        return new String[] {string.substring(begin, end)};
-    }
-
-    /*
-     * oids            = woid / ( "(" oidlist ")" )
-     * oidlist         = woid *( "$" woid )
-     */
-    final private static String[] readOIDs(String string, int[] pos)
-        throws NamingException {
-
-        if (debug) {
-            System.err.println("readOIDs: pos="+pos[0]);
-        }
-
-        skipWhitespace(string, pos);
-
-        // Single OID
-        if (string.charAt(pos[0]) != OID_LIST_BEGIN) {
-            return readWOID(string, pos);
-        }
-
-        // Multiple OIDs
-
-        int     begin, cur, end;
-        String  oidName = null;
-        Vector  values = new Vector(5);
-
-        if (debug) {
-            System.err.println("ReadOIDList: pos="+pos[0]);
-        }
-
-        pos[0]++;
-        skipWhitespace(string, pos);
-        begin = pos[0];
-        end = string.indexOf(OID_LIST_END, begin);
-        cur = string.indexOf(OID_SEPARATOR, begin);
-
-        if(end == -1) {
-            throw new InvalidAttributeValueException ("oidlist has no end "+
-                                                      "mark: " + string);
-        }
-
-        if(cur == -1 || end < cur) {
-            cur = end;
-        }
-
-        while(cur < end && cur > 0) {
-            int wsBegin = findTrailingWhitespace(string, cur - 1);
-            oidName = string.substring(begin, wsBegin);
-            if (debug) {
-                System.err.println("ReadOIDList: found '" + oidName +
-                                   "' at begin=" + begin + " end =" + end);
-            }
-            values.addElement(oidName);
-            pos[0] = cur + 1;
-            skipWhitespace(string, pos);
-            begin = pos[0];
-            cur = string.indexOf(OID_SEPARATOR, begin);
-            if(debug) {System.err.println("ReadOIDList: begin = " + begin);}
-        }
-
-        if (debug) {
-            System.err.println("ReadOIDList: found '" + oidName +
-                               "' at begin=" + begin + " end =" + end);
-        }
-
-        int wsBegin = findTrailingWhitespace(string, end - 1);
-        oidName = string.substring(begin, wsBegin);
-        values.addElement(oidName);
-
-        pos[0] = end+1;
-
-        String[] answer = new String[values.size()];
-        for (int i = 0; i < answer.length; i++) {
-            answer[i] = (String)values.elementAt(i);
-        }
-        return answer;
-    }
-
-// ----------------- "unparser" methods
-// Methods that are used for translating a node in the schema tree
-// into RFC2252 format for storage back into the LDAP directory
-/*
-     static Attributes JNDI2LDAPSchema(DirContext schemaRoot)
-        throws NamingException {
-
-        Attribute objDescAttr = new BasicAttribute(OBJECTCLASSDESC_ATTR_ID);
-        Attribute attrDescAttr = new BasicAttribute(ATTRIBUTEDESC_ATTR_ID);
-        Attribute syntaxDescAttr = new BasicAttribute(SYNTAXDESC_ATTR_ID);
-        Attributes attrs = new BasicAttributes(LdapClient.caseIgnore);
-        DirContext classDefs, attributeDefs, syntaxDefs;
-        Attributes classDefsAttrs, attributeDefsAttrs, syntaxDefsAttrs;
-        NamingEnumeration defs;
-        Object obj;
-        int i = 0;
-
-        try {
-            obj = schemaRoot.lookup(OBJECTCLASS_DEFINITION_NAME);
-            if(obj != null && obj instanceof DirContext) {
-                classDefs = (DirContext)obj;
-                defs = classDefs.listBindings("");
-                while(defs.hasMoreElements()) {
-                    i++;
-                    DirContext classDef = (DirContext)
-                        ((Binding)(defs.next())).getObject();
-                    classDefAttrs = classDef.getAttributes("");
-                    objDescAttr.add(classDef2ObjectDesc(classDefAttrs));
-                }
-                if (debug)
-                    System.err.println(i + " total object classes");
-                attrs.put(objDescAttr);
-            } else {
-                throw new NamingException(
-                    "Problem with Schema tree: the object named " +
-                    OBJECTCLASS_DEFINITION_NAME + " is not a " +
-                    "DirContext");
-            }
-        } catch (NameNotFoundException e) {} // ignore
-
-        i=0;
-        try {
-            obj = schemaRoot.lookup(ATTRIBUTE_DEFINITION_NAME);
-            if(obj instanceof DirContext) {
-                attributeDefs = (DirContext)obj;
-                defs = attributeDefs.listBindings("");
-                while(defs.hasMoreElements()) {
-                    i++;
-                    DirContext attrDef = (DirContext)
-                        ((Binding)defs.next()).getObject();
-                    attrDefAttrs = attrDef.getAttributes("");
-                    attrDescAttr.add(attrDef2AttrDesc(attrDefAttrs));
-                }
-                if (debug)
-                    System.err.println(i + " attribute definitions");
-                attrs.put(attrDescAttr);
-            } else {
-                throw new NamingException(
-                    "Problem with schema tree: the object named " +
-                    ATTRIBUTE_DEFINITION_NAME + " is not a " +
-                    "DirContext");
-            }
-        } catch (NameNotFoundException e) {} // ignore
-
-        i=0;
-        try {
-            obj = schemaRoot.lookup(SYNTAX_DEFINITION_NAME);
-            if(obj instanceof DirContext) {
-                syntaxDefs = (DirContext)obj;
-                defs =syntaxDefs.listBindings("");
-                while(defs.hasMoreElements()) {
-                    i++;
-                    DirContext syntaxDef = (DirContext)
-                        ((Binding)defs.next()).getObject();
-                    syntaxDefAttrs = syntaxDef.getAttributes("");
-                    syntaxDescAttr.add(syntaxDef2SyntaxDesc(syntaxDefAttrs));
-                }
-                if (debug)
-                    System.err.println(i + " total syntax definitions");
-                attrs.put(syntaxDescAttr);
-            } else {
-                throw new NamingException(
-                    "Problem with schema tree: the object named " +
-                    SYNTAX_DEFINITION_NAME + " is not a " +
-                    "DirContext");
-            }
-        } catch (NameNotFoundException e) {} // ignore
-
-        return attrs;
-    }
-
-*/
-
-    /**
-      * Translate attributes that describe an object class into the
-      * string description as defined in RFC 2252.
-      */
-    final private String classDef2ObjectDesc(Attributes attrs)
-        throws NamingException {
-
-        StringBuffer objectDesc = new StringBuffer("( ");
-
-        Attribute attr = null;
-        int count = 0;
-
-        // extract attributes by ID to guarantee ordering
-
-        attr = attrs.get(NUMERICOID_ID);
-        if (attr != null) {
-            objectDesc.append(writeNumericOID(attr));
-            count++;
-        } else {
-            throw new ConfigurationException("Class definition doesn't" +
-                                             "have a numeric OID");
-        }
-
-        attr = attrs.get(NAME_ID);
-        if (attr != null) {
-            objectDesc.append(writeQDescrs(attr));
-            count++;
-        }
-
-        attr = attrs.get(DESC_ID);
-        if (attr != null) {
-            objectDesc.append(writeQDString(attr));
-            count++;
-        }
-
-        attr = attrs.get(OBSOLETE_ID);
-        if (attr != null) {
-            objectDesc.append(writeBoolean(attr));
-            count++;
-        }
-
-        attr = attrs.get(SUP_ID);
-        if (attr != null) {
-            objectDesc.append(writeOIDs(attr));
-            count++;
-        }
-
-        attr = attrs.get(ABSTRACT_ID);
-        if (attr != null) {
-            objectDesc.append(writeBoolean(attr));
-            count++;
-        }
-
-        attr = attrs.get(STRUCTURAL_ID);
-        if (attr != null) {
-            objectDesc.append(writeBoolean(attr));
-            count++;
-        }
-
-        attr = attrs.get(AUXILARY_ID);
-        if (attr != null) {
-            objectDesc.append(writeBoolean(attr));
-            count++;
-        }
-
-        attr = attrs.get(MUST_ID);
-        if (attr != null) {
-            objectDesc.append(writeOIDs(attr));
-            count++;
-        }
-
-        attr = attrs.get(MAY_ID);
-        if (attr != null) {
-            objectDesc.append(writeOIDs(attr));
-            count++;
-        }
-
-        // process any remaining attributes
-        if (count < attrs.size()) {
-            String attrId = null;
-
-            // use enumeration because attribute ID is not known
-            for (NamingEnumeration ae = attrs.getAll();
-                ae.hasMoreElements(); ) {
-
-                attr = (Attribute)ae.next();
-                attrId = attr.getID();
-
-                // skip those already processed
-                if (attrId.equals(NUMERICOID_ID) ||
-                    attrId.equals(NAME_ID) ||
-                    attrId.equals(SUP_ID) ||
-                    attrId.equals(MAY_ID) ||
-                    attrId.equals(MUST_ID) ||
-                    attrId.equals(STRUCTURAL_ID) ||
-                    attrId.equals(DESC_ID) ||
-                    attrId.equals(AUXILARY_ID) ||
-                    attrId.equals(ABSTRACT_ID) ||
-                    attrId.equals(OBSOLETE_ID)) {
-                    continue;
-
-                } else {
-                    objectDesc.append(writeQDStrings(attr));
-                }
-            }
-        }
-
-        objectDesc.append(")");
-
-        return objectDesc.toString();
-    }
-
-    /**
-      * Translate attributes that describe an attribute definition into the
-      * string description as defined in RFC 2252.
-      */
-    final private String attrDef2AttrDesc(Attributes attrs)
-        throws NamingException {
-
-        StringBuffer attrDesc = new StringBuffer("( "); // opening parens
-
-        Attribute attr = null;
-        int count = 0;
-
-        // extract attributes by ID to guarantee ordering
-
-        attr = attrs.get(NUMERICOID_ID);
-        if (attr != null) {
-            attrDesc.append(writeNumericOID(attr));
-            count++;
-        } else {
-            throw new ConfigurationException("Attribute type doesn't" +
-                                             "have a numeric OID");
-        }
-
-        attr = attrs.get(NAME_ID);
-        if (attr != null) {
-            attrDesc.append(writeQDescrs(attr));
-            count++;
-        }
-
-        attr = attrs.get(DESC_ID);
-        if (attr != null) {
-            attrDesc.append(writeQDString(attr));
-            count++;
-        }
-
-        attr = attrs.get(OBSOLETE_ID);
-        if (attr != null) {
-            attrDesc.append(writeBoolean(attr));
-            count++;
-        }
-
-        attr = attrs.get(SUP_ID);
-        if (attr != null) {
-            attrDesc.append(writeWOID(attr));
-            count++;
-        }
-
-        attr = attrs.get(EQUALITY_ID);
-        if (attr != null) {
-            attrDesc.append(writeWOID(attr));
-            count++;
-        }
-
-        attr = attrs.get(ORDERING_ID);
-        if (attr != null) {
-            attrDesc.append(writeWOID(attr));
-            count++;
-        }
-
-        attr = attrs.get(SUBSTR_ID);
-        if (attr != null) {
-            attrDesc.append(writeWOID(attr));
-            count++;
-        }
-
-        attr = attrs.get(SYNTAX_ID);
-        if (attr != null) {
-            attrDesc.append(writeWOID(attr));
-            count++;
-        }
-
-        attr = attrs.get(SINGLE_VAL_ID);
-        if (attr != null) {
-            attrDesc.append(writeBoolean(attr));
-            count++;
-        }
-
-        attr = attrs.get(COLLECTIVE_ID);
-        if (attr != null) {
-            attrDesc.append(writeBoolean(attr));
-            count++;
-        }
-
-        attr = attrs.get(NO_USER_MOD_ID);
-        if (attr != null) {
-            attrDesc.append(writeBoolean(attr));
-            count++;
-        }
-
-        attr = attrs.get(USAGE_ID);
-        if (attr != null) {
-            attrDesc.append(writeQDString(attr));
-            count++;
-        }
-
-        // process any remaining attributes
-        if (count < attrs.size()) {
-            String attrId = null;
-
-            // use enumeration because attribute ID is not known
-            for (NamingEnumeration ae = attrs.getAll();
-                ae.hasMoreElements(); ) {
-
-                attr = (Attribute)ae.next();
-                attrId = attr.getID();
-
-                // skip those already processed
-                if (attrId.equals(NUMERICOID_ID) ||
-                    attrId.equals(NAME_ID) ||
-                    attrId.equals(SYNTAX_ID) ||
-                    attrId.equals(DESC_ID) ||
-                    attrId.equals(SINGLE_VAL_ID) ||
-                    attrId.equals(EQUALITY_ID) ||
-                    attrId.equals(ORDERING_ID) ||
-                    attrId.equals(SUBSTR_ID) ||
-                    attrId.equals(NO_USER_MOD_ID) ||
-                    attrId.equals(USAGE_ID) ||
-                    attrId.equals(SUP_ID) ||
-                    attrId.equals(COLLECTIVE_ID) ||
-                    attrId.equals(OBSOLETE_ID)) {
-                    continue;
-
-                } else {
-                    attrDesc.append(writeQDStrings(attr));
-                }
-            }
-        }
-
-        attrDesc.append(")");  // add closing parens
-
-        return attrDesc.toString();
-    }
-
-    /**
-      * Translate attributes that describe an attribute syntax definition into the
-      * string description as defined in RFC 2252.
-      */
-    final private String syntaxDef2SyntaxDesc(Attributes attrs)
-        throws NamingException {
-
-        StringBuffer syntaxDesc = new StringBuffer("( "); // opening parens
-
-        Attribute attr = null;
-        int count = 0;
-
-        // extract attributes by ID to guarantee ordering
-
-        attr = attrs.get(NUMERICOID_ID);
-        if (attr != null) {
-            syntaxDesc.append(writeNumericOID(attr));
-            count++;
-        } else {
-            throw new ConfigurationException("Attribute type doesn't" +
-                                             "have a numeric OID");
-        }
-
-        attr = attrs.get(DESC_ID);
-        if (attr != null) {
-            syntaxDesc.append(writeQDString(attr));
-            count++;
-        }
-
-        // process any remaining attributes
-        if (count < attrs.size()) {
-            String attrId = null;
-
-            // use enumeration because attribute ID is not known
-            for (NamingEnumeration ae = attrs.getAll();
-                ae.hasMoreElements(); ) {
-
-                attr = (Attribute)ae.next();
-                attrId = attr.getID();
-
-                // skip those already processed
-                if (attrId.equals(NUMERICOID_ID) ||
-                    attrId.equals(DESC_ID)) {
-                    continue;
-
-                } else {
-                    syntaxDesc.append(writeQDStrings(attr));
-                }
-            }
-        }
-
-        syntaxDesc.append(")");
-
-        return syntaxDesc.toString();
-    }
-
-    /**
-      * Translate attributes that describe an attribute matching rule
-      * definition into the string description as defined in RFC 2252.
-      */
-    final private String matchRuleDef2MatchRuleDesc(Attributes attrs)
-        throws NamingException {
-
-        StringBuffer matchRuleDesc = new StringBuffer("( "); // opening parens
-
-        Attribute attr = null;
-        int count = 0;
-
-        // extract attributes by ID to guarantee ordering
-
-        attr = attrs.get(NUMERICOID_ID);
-        if (attr != null) {
-            matchRuleDesc.append(writeNumericOID(attr));
-            count++;
-        } else {
-            throw new ConfigurationException("Attribute type doesn't" +
-                                             "have a numeric OID");
-        }
-
-        attr = attrs.get(NAME_ID);
-        if (attr != null) {
-            matchRuleDesc.append(writeQDescrs(attr));
-            count++;
-        }
-
-        attr = attrs.get(DESC_ID);
-        if (attr != null) {
-            matchRuleDesc.append(writeQDString(attr));
-            count++;
-        }
-
-        attr = attrs.get(OBSOLETE_ID);
-        if (attr != null) {
-            matchRuleDesc.append(writeBoolean(attr));
-            count++;
-        }
-
-        attr = attrs.get(SYNTAX_ID);
-        if (attr != null) {
-            matchRuleDesc.append(writeWOID(attr));
-            count++;
-        } else {
-            throw new ConfigurationException("Attribute type doesn't" +
-                                             "have a syntax OID");
-        }
-
-        // process any remaining attributes
-        if (count < attrs.size()) {
-            String attrId = null;
-
-            // use enumeration because attribute ID is not known
-            for (NamingEnumeration ae = attrs.getAll();
-                ae.hasMoreElements(); ) {
-
-                attr = (Attribute)ae.next();
-                attrId = attr.getID();
-
-                // skip those already processed
-                if (attrId.equals(NUMERICOID_ID) ||
-                    attrId.equals(NAME_ID) ||
-                    attrId.equals(SYNTAX_ID) ||
-                    attrId.equals(DESC_ID) ||
-                    attrId.equals(OBSOLETE_ID)) {
-                    continue;
-
-                } else {
-                    matchRuleDesc.append(writeQDStrings(attr));
-                }
-            }
-        }
-
-        matchRuleDesc.append(")");
-
-        return matchRuleDesc.toString();
-    }
-
-    final private String writeNumericOID(Attribute nOIDAttr)
-        throws NamingException {
-        if(nOIDAttr.size() != 1) {
-            throw new InvalidAttributeValueException(
-                "A class definition must have exactly one numeric OID");
-        }
-        return (String)(nOIDAttr.get()) + WHSP;
-    }
-
-    final private String writeWOID(Attribute attr) throws NamingException {
-        if (netscapeBug)
-            return writeQDString(attr);
-        else
-            return attr.getID() + WHSP + attr.get() + WHSP;
-    }
-
-    /*  qdescr          = whsp "'" descr "'" whsp */
-    final private String writeQDString(Attribute qdStringAttr)
-        throws NamingException {
-        if(qdStringAttr.size() != 1) {
-            throw new InvalidAttributeValueException(
-                qdStringAttr.getID() + " must have exactly one value");
-        }
-
-        return qdStringAttr.getID() + WHSP +
-            SINGLE_QUOTE + qdStringAttr.get() + SINGLE_QUOTE + WHSP;
-    }
-
-   /**
-    * dstring         = 1*utf8
-    * qdstring        = whsp "'" dstring "'" whsp
-    * qdstringlist    = [ qdstring *( qdstring ) ]
-    * qdstrings       = qdstring / ( whsp "(" qdstringlist ")" whsp )
-    */
-    private final String writeQDStrings(Attribute attr) throws NamingException {
-        return writeQDescrs(attr);
-    }
-
-    /**
-     * qdescrs         = qdescr / ( whsp "(" qdescrlist ")" whsp )
-     * qdescrlist      = [ qdescr *( qdescr ) ]
-     * qdescr          = whsp "'" descr "'" whsp
-     * descr           = keystring
-     */
-    private final String writeQDescrs(Attribute attr) throws NamingException {
-        switch(attr.size()) {
-        case 0:
-            throw new InvalidAttributeValueException(
-                attr.getID() + "has no values");
-        case 1:
-            return writeQDString(attr);
-        }
-
-        // write QDList
-
-        StringBuffer qdList = new StringBuffer(attr.getID());
-        qdList.append(WHSP);
-        qdList.append(OID_LIST_BEGIN);
-
-        NamingEnumeration values = attr.getAll();
-
-        while(values.hasMore()) {
-            qdList.append(WHSP);
-            qdList.append(SINGLE_QUOTE);
-            qdList.append((String)values.next());
-            qdList.append(SINGLE_QUOTE);
-            qdList.append(WHSP);
-        }
-
-        qdList.append(OID_LIST_END);
-        qdList.append(WHSP);
-
-        return qdList.toString();
-    }
-
-    final private String writeOIDs(Attribute oidsAttr)
-        throws NamingException {
-
-        switch(oidsAttr.size()) {
-        case 0:
-            throw new InvalidAttributeValueException(
-                oidsAttr.getID() + "has no values");
-
-        case 1:
-            if (netscapeBug) {
-                break; // %%% write out as list to avoid crashing server
-            }
-            return writeWOID(oidsAttr);
-        }
-
-        // write OID List
-
-        StringBuffer oidList = new StringBuffer(oidsAttr.getID());
-        oidList.append(WHSP);
-        oidList.append(OID_LIST_BEGIN);
-
-        NamingEnumeration values = oidsAttr.getAll();
-        oidList.append(WHSP);
-        oidList.append(values.next());
-
-        while(values.hasMore()) {
-            oidList.append(WHSP);
-            oidList.append(OID_SEPARATOR);
-            oidList.append(WHSP);
-            oidList.append((String)values.next());
-        }
-
-        oidList.append(WHSP);
-        oidList.append(OID_LIST_END);
-        oidList.append(WHSP);
-
-        return oidList.toString();
-    }
-
-    private final String writeBoolean(Attribute booleanAttr)
-        throws NamingException {
-            return booleanAttr.getID() + WHSP;
-    }
-
-    /**
-     * Returns an attribute for updating the Object Class Definition schema
-     * attribute
-     */
-    final Attribute stringifyObjDesc(Attributes classDefAttrs)
-        throws NamingException {
-        Attribute objDescAttr = new BasicAttribute(OBJECTCLASSDESC_ATTR_ID);
-        objDescAttr.add(classDef2ObjectDesc(classDefAttrs));
-        return objDescAttr;
-    }
-
-    /**
-     * Returns an attribute for updating the Attribute Definition schema attribute
-     */
-    final Attribute stringifyAttrDesc(Attributes attrDefAttrs)
-        throws NamingException {
-        Attribute attrDescAttr = new BasicAttribute(ATTRIBUTEDESC_ATTR_ID);
-        attrDescAttr.add(attrDef2AttrDesc(attrDefAttrs));
-        return attrDescAttr;
-    }
-
-    /**
-     * Returns an attribute for updating the Syntax schema attribute
-     */
-    final Attribute stringifySyntaxDesc(Attributes syntaxDefAttrs)
-    throws NamingException {
-        Attribute syntaxDescAttr = new BasicAttribute(SYNTAXDESC_ATTR_ID);
-        syntaxDescAttr.add(syntaxDef2SyntaxDesc(syntaxDefAttrs));
-        return syntaxDescAttr;
-    }
-
-    /**
-     * Returns an attribute for updating the Matching Rule schema attribute
-     */
-    final Attribute stringifyMatchRuleDesc(Attributes matchRuleDefAttrs)
-    throws NamingException {
-        Attribute matchRuleDescAttr = new BasicAttribute(MATCHRULEDESC_ATTR_ID);
-        matchRuleDescAttr.add(matchRuleDef2MatchRuleDesc(matchRuleDefAttrs));
-        return matchRuleDescAttr;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/ldap/LdapSearchEnumeration.java b/ojluni/src/main/java/com/sun/jndi/ldap/LdapSearchEnumeration.java
deleted file mode 100755
index f1c1bba7..0000000
--- a/ojluni/src/main/java/com/sun/jndi/ldap/LdapSearchEnumeration.java
+++ /dev/null
@@ -1,204 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-package com.sun.jndi.ldap;
-
-import java.util.Vector;
-import javax.naming.*;
-import javax.naming.directory.*;
-import javax.naming.spi.*;
-import javax.naming.ldap.*;
-import javax.naming.ldap.LdapName;
-
-import com.sun.jndi.toolkit.ctx.Continuation;
-
-final class LdapSearchEnumeration extends LdapNamingEnumeration {
-
-    private Name startName;             // prefix of names of search results
-    private LdapCtx.SearchArgs searchArgs = null;
-
-    LdapSearchEnumeration(LdapCtx homeCtx, LdapResult search_results,
-        String starter, LdapCtx.SearchArgs args, Continuation cont)
-        throws NamingException {
-
-        super(homeCtx, search_results,
-              args.name, /* listArg */
-              cont);
-
-        // fully qualified name of starting context of search
-        startName = new LdapName(starter);
-        searchArgs = args;
-    }
-
-    protected NameClassPair
-    createItem(String dn, Attributes attrs, Vector respCtls)
-        throws NamingException {
-
-        Object obj = null;
-
-        String relStart;         // name relative to starting search context
-        String relHome;          // name relative to homeCtx.currentDN
-        boolean relative = true; // whether relative to currentDN
-
-        // need to strip off all but lowest component of dn
-        // so that is relative to current context (currentDN)
-
-        try {
-            Name parsed = new LdapName(dn);
-            // System.err.println("dn string: " + dn);
-            // System.err.println("dn name: " + parsed);
-
-            if (startName != null && parsed.startsWith(startName)) {
-                relStart = parsed.getSuffix(startName.size()).toString();
-                relHome = parsed.getSuffix(homeCtx.currentParsedDN.size()).toString();
-            } else {
-                relative = false;
-                relHome = relStart =
-                    LdapURL.toUrlString(homeCtx.hostname, homeCtx.port_number,
-                    dn, homeCtx.hasLdapsScheme);
-            }
-        } catch (NamingException e) {
-            // could not parse name
-            relative = false;
-            relHome = relStart =
-                LdapURL.toUrlString(homeCtx.hostname, homeCtx.port_number,
-                dn, homeCtx.hasLdapsScheme);
-        }
-
-        // Name relative to search context
-        CompositeName cn = new CompositeName();
-        if (!relStart.equals("")) {
-            cn.add(relStart);
-        }
-
-        // Name relative to homeCtx
-        CompositeName rcn = new CompositeName();
-        if (!relHome.equals("")) {
-            rcn.add(relHome);
-        }
-        //System.err.println("relStart: " + cn);
-        //System.err.println("relHome: " + rcn);
-
-        // Fix attributes to be able to get schema
-        homeCtx.setParents(attrs, rcn);
-
-        // only generate object when requested
-        if (searchArgs.cons.getReturningObjFlag()) {
-
-            if (attrs.get(Obj.JAVA_ATTRIBUTES[Obj.CLASSNAME]) != null) {
-                // Entry contains Java-object attributes (ser/ref object)
-                // serialized object or object reference
-                obj = Obj.decodeObject(attrs);
-
-            }
-            if (obj == null) {
-                obj = new LdapCtx(homeCtx, dn);
-            }
-
-            // Call getObjectInstance before removing unrequested attributes
-            try {
-                // rcn is either relative to homeCtx or a fully qualified DN
-                obj = DirectoryManager.getObjectInstance(
-                    obj, rcn, (relative ? homeCtx : null),
-                    homeCtx.envprops, attrs);
-            } catch (NamingException e) {
-                throw e;
-            } catch (Exception e) {
-                NamingException ne =
-                    new NamingException(
-                            "problem generating object using object factory");
-                ne.setRootCause(e);
-                throw ne;
-            }
-
-            // remove Java attributes from result, if necessary
-            // Even if CLASSNAME attr not there, there might be some
-            // residual attributes
-
-            String[] reqAttrs;
-            if ((reqAttrs = searchArgs.reqAttrs) != null) {
-                // create an attribute set for those requested
-                Attributes rattrs = new BasicAttributes(true); // caseignore
-                for (int i = 0; i < reqAttrs.length; i++) {
-                    rattrs.put(reqAttrs[i], null);
-                }
-                for (int i = 0; i < Obj.JAVA_ATTRIBUTES.length; i++) {
-                    // Remove Java-object attributes if not requested
-                    if (rattrs.get(Obj.JAVA_ATTRIBUTES[i]) == null) {
-                        attrs.remove(Obj.JAVA_ATTRIBUTES[i]);
-                    }
-                }
-            }
-
-        }
-
-        /*
-         * name in search result is either the stringified composite name
-         * relative to the search context that can be passed directly to
-         * methods of the search context, or the fully qualified DN
-         * which can be used with the initial context.
-         */
-        SearchResult sr;
-        if (respCtls != null) {
-            sr = new SearchResultWithControls(
-                (relative ? cn.toString() : relStart), obj, attrs,
-                relative, homeCtx.convertControls(respCtls));
-        } else {
-            sr = new SearchResult(
-                (relative ? cn.toString() : relStart),
-                obj, attrs, relative);
-        }
-        sr.setNameInNamespace(dn);
-        return sr;
-    }
-
-    public void appendUnprocessedReferrals(LdapReferralException ex) {
-
-        // a referral has been followed so do not create relative names
-        startName = null;
-        super.appendUnprocessedReferrals(ex);
-    }
-
-    protected LdapNamingEnumeration
-    getReferredResults(LdapReferralContext refCtx) throws NamingException {
-        // repeat the original operation at the new context
-        return (LdapSearchEnumeration)
-            refCtx.search(searchArgs.name, searchArgs.filter, searchArgs.cons);
-    }
-
-    protected void update(LdapNamingEnumeration ne) {
-        super.update(ne);
-
-        // Update search-specific variables
-        LdapSearchEnumeration se = (LdapSearchEnumeration)ne;
-        startName = se.startName;
-//VR - keep original args, don't overwite with current args
-//      searchArgs = se.searchArgs;
-    }
-
-    void setStartName(Name nm) {
-        startName = nm;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/ldap/LdapURL.java b/ojluni/src/main/java/com/sun/jndi/ldap/LdapURL.java
deleted file mode 100755
index ada02f6..0000000
--- a/ojluni/src/main/java/com/sun/jndi/ldap/LdapURL.java
+++ /dev/null
@@ -1,271 +0,0 @@
-/*
- * Copyright (c) 1999, 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.jndi.ldap;
-
-import javax.naming.*;
-import javax.naming.directory.*;
-import javax.naming.spi.*;
-import java.net.URL;
-import java.net.MalformedURLException;
-import java.io.UnsupportedEncodingException;
-import java.util.StringTokenizer;
-import com.sun.jndi.toolkit.url.Uri;
-import com.sun.jndi.toolkit.url.UrlUtil;
-
-/*
- * Extract components of an LDAP URL.
- *
- * The format of an LDAP URL is defined in RFC 2255 as follows:
- *
- *     ldapurl    = scheme "://" [hostport] ["/"
- *                  [dn ["?" [attributes] ["?" [scope]
- *                  ["?" [filter] ["?" extensions]]]]]]
- *     scheme     = "ldap"
- *     attributes = attrdesc *("," attrdesc)
- *     scope      = "base" / "one" / "sub"
- *     dn         = distinguishedName from Section 3 of [1]
- *     hostport   = hostport from Section 5 of RFC 1738 [5]
- *     attrdesc   = AttributeDescription from Section 4.1.5 of [2]
- *     filter     = filter from Section 4 of [4]
- *     extensions = extension *("," extension)
- *     extension  = ["!"] extype ["=" exvalue]
- *     extype     = token / xtoken
- *     exvalue    = LDAPString from section 4.1.2 of [2]
- *     token      = oid from section 4.1 of [3]
- *     xtoken     = ("X-" / "x-") token
- *
- * For example,
- *
- *     ldap://ldap.itd.umich.edu/o=University%20of%20Michigan,c=US
- *     ldap://host.com:6666/o=IMC,c=US??sub?(cn=Babs%20Jensen)
- *
- * This class also supports ldaps URLs.
- */
-
-final public class LdapURL extends Uri {
-
-    private boolean useSsl = false;
-    private String DN = null;
-    private String attributes = null;
-    private String scope = null;
-    private String filter = null;
-    private String extensions = null;
-
-    /**
-     * Creates an LdapURL object from an LDAP URL string.
-     */
-    public LdapURL(String url) throws NamingException {
-
-        super();
-
-        try {
-            init(url); // scheme, host, port, path, query
-            useSsl = scheme.equalsIgnoreCase("ldaps");
-
-            if (! (scheme.equalsIgnoreCase("ldap") || useSsl)) {
-                throw new MalformedURLException("Not an LDAP URL: " + url);
-            }
-
-            parsePathAndQuery(); // DN, attributes, scope, filter, extensions
-
-        } catch (MalformedURLException e) {
-            NamingException ne = new NamingException("Cannot parse url: " + url);
-            ne.setRootCause(e);
-            throw ne;
-        } catch (UnsupportedEncodingException e) {
-            NamingException ne = new NamingException("Cannot parse url: " + url);
-            ne.setRootCause(e);
-            throw ne;
-        }
-    }
-
-    /**
-     * Returns true if the URL is an LDAPS URL.
-     */
-    public boolean useSsl() {
-        return useSsl;
-    }
-
-    /**
-     * Returns the LDAP URL's distinguished name.
-     */
-    public String getDN() {
-        return DN;
-    }
-
-    /**
-     * Returns the LDAP URL's attributes.
-     */
-    public String getAttributes() {
-        return attributes;
-    }
-
-    /**
-     * Returns the LDAP URL's scope.
-     */
-    public String getScope() {
-        return scope;
-    }
-
-    /**
-     * Returns the LDAP URL's filter.
-     */
-    public String getFilter() {
-        return filter;
-    }
-
-    /**
-     * Returns the LDAP URL's extensions.
-     */
-    public String getExtensions() {
-        return extensions;
-    }
-
-    /**
-     * Given a space-separated list of LDAP URLs, returns an array of strings.
-     */
-    public static String[] fromList(String urlList) throws NamingException {
-
-        String[] urls = new String[(urlList.length() + 1) / 2];
-        int i = 0;              // next available index in urls
-        StringTokenizer st = new StringTokenizer(urlList, " ");
-
-        while (st.hasMoreTokens()) {
-            urls[i++] = st.nextToken();
-        }
-        String[] trimmed = new String[i];
-        System.arraycopy(urls, 0, trimmed, 0, i);
-        return trimmed;
-    }
-
-    /**
-     * Derermines whether an LDAP URL has query components.
-     */
-    public static boolean hasQueryComponents(String url) {
-        return (url.lastIndexOf('?') != -1);
-    }
-
-    /*
-     * Assembles an LDAP or LDAPS URL string from its components.
-     * If "host" is an IPv6 literal, it may optionally include delimiting
-     * brackets.
-     */
-    static String toUrlString(String host, int port, String dn, boolean useSsl)
-        {
-
-        try {
-            String h = (host != null) ? host : "";
-            if ((h.indexOf(':') != -1) && (h.charAt(0) != '[')) {
-                h = "[" + h + "]";          // IPv6 literal
-            }
-            String p = (port != -1) ? (":" + port) : "";
-            String d = (dn != null) ? ("/" + UrlUtil.encode(dn, "UTF8")) : "";
-
-            return useSsl ? "ldaps://" + h + p + d : "ldap://" + h + p + d;
-        } catch (UnsupportedEncodingException e) {
-            // UTF8 should always be supported
-            throw new IllegalStateException("UTF-8 encoding unavailable");
-        }
-    }
-
-    /*
-     * Parses the path and query components of an URL and sets this
-     * object's fields accordingly.
-     */
-    private void parsePathAndQuery() throws MalformedURLException,
-        UnsupportedEncodingException {
-
-        // path begins with a '/' or is empty
-
-        if (path.equals("")) {
-            return;
-        }
-
-        DN = path.startsWith("/") ? path.substring(1) : path;
-        if (DN.length() > 0) {
-            DN = UrlUtil.decode(DN, "UTF8");
-        }
-
-        // query begins with a '?' or is null
-
-        if (query == null) {
-            return;
-        }
-
-        int qmark2 = query.indexOf('?', 1);
-
-        if (qmark2 < 0) {
-            attributes = query.substring(1);
-            return;
-        } else if (qmark2 != 1) {
-            attributes = query.substring(1, qmark2);
-        }
-
-        int qmark3 = query.indexOf('?', qmark2 + 1);
-
-        if (qmark3 < 0) {
-            scope = query.substring(qmark2 + 1);
-            return;
-        } else if (qmark3 != qmark2 + 1) {
-            scope = query.substring(qmark2 + 1, qmark3);
-        }
-
-        int qmark4 = query.indexOf('?', qmark3 + 1);
-
-        if (qmark4 < 0) {
-            filter = query.substring(qmark3 + 1);
-        } else {
-            if (qmark4 != qmark3 + 1) {
-                filter = query.substring(qmark3 + 1, qmark4);
-            }
-            extensions = query.substring(qmark4 + 1);
-            if (extensions.length() > 0) {
-                extensions = UrlUtil.decode(extensions, "UTF8");
-            }
-        }
-        if (filter != null && filter.length() > 0) {
-            filter = UrlUtil.decode(filter, "UTF8");
-        }
-    }
-
-/*
-    public static void main(String[] args) throws Exception {
-
-        LdapURL url = new LdapURL(args[0]);
-
-        System.out.println("Example LDAP URL: " + url.toString());
-        System.out.println("  scheme: " + url.getScheme());
-        System.out.println("    host: " + url.getHost());
-        System.out.println("    port: " + url.getPort());
-        System.out.println("      DN: " + url.getDN());
-        System.out.println("   attrs: " + url.getAttributes());
-        System.out.println("   scope: " + url.getScope());
-        System.out.println("  filter: " + url.getFilter());
-        System.out.println("  extens: " + url.getExtensions());
-        System.out.println("");
-    }
-*/
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/ldap/ManageReferralControl.java b/ojluni/src/main/java/com/sun/jndi/ldap/ManageReferralControl.java
deleted file mode 100755
index 4fd64b1..0000000
--- a/ojluni/src/main/java/com/sun/jndi/ldap/ManageReferralControl.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright (c) 1999, 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.jndi.ldap;
-
-import java.io.IOException;
-
-/**
- * This class implements the LDAPv3 Request Control for manageDsaIT as
- * defined in
- * <a href="http://www.ietf.org/internet-drafts/draft-ietf-ldapext-namedref-00.txt">draft-ietf-ldapext-namedref-00.txt</a>.
- *
- * The control has no control value.
- *
- * @author Vincent Ryan
- */
-final public class ManageReferralControl extends BasicControl {
-
-    /**
-     * The manage referral control's assigned object identifier
-     * is 2.16.840.1.113730.3.4.2.
-     *
-     * @serial
-     */
-    public static final String OID = "2.16.840.1.113730.3.4.2";
-
-    private static final long serialVersionUID = 909382692585717224L;
-
-    /**
-     * Constructs a manage referral critical control.
-     */
-    public ManageReferralControl() {
-        super(OID, true, null);
-    }
-
-    /**
-     * Constructs a manage referral control.
-     *
-     * @param   criticality The control's criticality setting.
-     */
-    public ManageReferralControl(boolean criticality) {
-        super(OID, criticality, null);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/ldap/NameClassPairWithControls.java b/ojluni/src/main/java/com/sun/jndi/ldap/NameClassPairWithControls.java
deleted file mode 100755
index 473db98..0000000
--- a/ojluni/src/main/java/com/sun/jndi/ldap/NameClassPairWithControls.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (c) 1999, 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.jndi.ldap;
-
-import javax.naming.*;
-import javax.naming.ldap.*;
-
-class NameClassPairWithControls extends NameClassPair implements HasControls {
-    private Control[] controls;
-
-    public NameClassPairWithControls(String name, String className,
-        Control[] controls) {
-        super(name, className);
-        this.controls = controls;
-    }
-
-    public Control[] getControls() throws NamingException {
-        return controls;
-    }
-
-    private static final long serialVersionUID = 2010738921219112944L;
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/ldap/NamingEventNotifier.java b/ojluni/src/main/java/com/sun/jndi/ldap/NamingEventNotifier.java
deleted file mode 100755
index 2d20a0f..0000000
--- a/ojluni/src/main/java/com/sun/jndi/ldap/NamingEventNotifier.java
+++ /dev/null
@@ -1,286 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-package com.sun.jndi.ldap;
-
-import javax.naming.*;
-import javax.naming.directory.*;
-import javax.naming.event.*;
-import javax.naming.ldap.*;
-import javax.naming.ldap.LdapName;
-
-import java.util.Vector;
-import com.sun.jndi.toolkit.ctx.Continuation;
-
-/**
-  * Gathers information to generate events by using the Persistent Search
-  * control.
-  *<p>
-  * This class maintains a list of listeners all interested in the same
-  * "search" request. It creates a thread that does the persistent search
-  * and blocks, collecting the results of the search.
-  * For each result that it receives from the search, it fires the
-  * corresponding event to its listeners. If an exception is encountered,
-  * it fires a NamingExceptionEvent.
-  *
-  * @author Rosanna Lee
-  */
-final class NamingEventNotifier implements Runnable {
-    private final static boolean debug = false;
-
-    private Vector namingListeners;
-    private Thread worker;
-    private LdapCtx context;
-    private EventContext eventSrc;
-    private EventSupport support;
-    private NamingEnumeration results;
-
-    // package private; used by EventSupport to remove it
-    NotifierArgs info;
-
-    NamingEventNotifier(EventSupport support, LdapCtx ctx, NotifierArgs info,
-        NamingListener firstListener) throws NamingException {
-        this.info = info;
-        this.support = support;
-
-        Control psearch;
-        try {
-            psearch = new PersistentSearchControl(
-                info.mask,
-                true /* no info about original entry(s) */,
-                true /* additional info about changes */,
-                Control.CRITICAL);
-        } catch (java.io.IOException e) {
-            NamingException ne = new NamingException(
-                "Problem creating persistent search control");
-            ne.setRootCause(e);
-            throw ne;
-        }
-
-        // Add psearch control to existing list
-        context = (LdapCtx)ctx.newInstance(new Control[]{psearch});
-        eventSrc = ctx;
-
-        namingListeners = new Vector();
-        namingListeners.addElement(firstListener);
-
-        worker = Obj.helper.createThread(this);
-        worker.setDaemon(true);  // not a user thread
-        worker.start();
-    }
-
-    // package private; used by EventSupport; namingListener already synchronized
-    void addNamingListener(NamingListener l) {
-        namingListeners.addElement(l);
-    }
-
-    // package private; used by EventSupport; namingListener already synchronized
-    void removeNamingListener(NamingListener l) {
-        namingListeners.removeElement(l);
-    }
-
-    // package private; used by EventSupport; namingListener already synchronized
-    boolean hasNamingListeners() {
-        return namingListeners.size() > 0;
-    }
-
-    /**
-     * Execute "persistent search".
-     * For each result, create the appropriate NamingEvent and
-     * queue to be dispatched to listeners.
-     */
-    public void run() {
-        try {
-            Continuation cont = new Continuation();
-            cont.setError(this, info.name);
-            Name nm = (info.name == null || info.name.equals("")) ?
-                new CompositeName() : new CompositeName().add(info.name);
-
-            results = context.searchAux(nm, info.filter, info.controls,
-                true, false, cont);
-
-            // Change root of search results so that it will generate
-            // names relative to the event context instead of that
-            // named by nm
-            ((LdapSearchEnumeration)results).setStartName(context.currentParsedDN);
-
-            SearchResult si;
-            Control[] respctls;
-            EntryChangeResponseControl ec;
-            long changeNum;
-
-            while (results.hasMore()) {
-                si = (SearchResult)results.next();
-                respctls = (si instanceof HasControls) ?
-                    ((HasControls) si).getControls() : null;
-
-                if (debug) {
-                    System.err.println("notifier: " + si);
-                    System.err.println("respCtls: " + respctls);
-                }
-
-                // Just process ECs; ignore all the rest
-                if (respctls != null) {
-                    for (int i = 0; i < respctls.length; i++) {
-                        // %%% Should be checking OID instead of class
-                        // %%% in case using someone else's  EC ctl
-                        if (respctls[i] instanceof EntryChangeResponseControl) {
-                            ec = (EntryChangeResponseControl)respctls[i];
-                            changeNum = ec.getChangeNumber();
-                            switch (ec.getChangeType()) {
-                            case EntryChangeResponseControl.ADD:
-                                fireObjectAdded(si, changeNum);
-                                break;
-                            case EntryChangeResponseControl.DELETE:
-                                fireObjectRemoved(si, changeNum);
-                                break;
-                            case EntryChangeResponseControl.MODIFY:
-                                fireObjectChanged(si, changeNum);
-                                break;
-                            case EntryChangeResponseControl.RENAME:
-                                fireObjectRenamed(si, ec.getPreviousDN(),
-                                    changeNum);
-                                break;
-                            }
-                        }
-                        break;
-                    }
-                }
-            }
-        } catch (InterruptedNamingException e) {
-            if (debug) System.err.println("NamingEventNotifier Interrupted");
-        } catch (NamingException e) {
-            // Fire event to notify NamingExceptionEvent listeners
-            fireNamingException(e);
-
-            // This notifier is no longer valid
-            support.removeDeadNotifier(info);
-        } finally {
-            cleanup();
-        }
-        if (debug) System.err.println("NamingEventNotifier finished");
-    }
-
-    private void cleanup() {
-        if (debug) System.err.println("NamingEventNotifier cleanup");
-
-        try {
-            if (results != null) {
-                if (debug) System.err.println("NamingEventNotifier enum closing");
-                results.close(); // this will abandon the search
-                results = null;
-            }
-            if (context != null) {
-                if (debug) System.err.println("NamingEventNotifier ctx closing");
-                context.close();
-                context = null;
-            }
-        } catch (NamingException e) {}
-    }
-
-    /**
-     * Stop the dispatcher so we can be destroyed.
-     * package private; used by EventSupport
-     */
-    void stop() {
-        if (debug) System.err.println("NamingEventNotifier being stopping");
-        if (worker != null) {
-            worker.interrupt(); // kill our thread
-            worker = null;
-        }
-    }
-
-    /**
-     * Fire an "object added" event to registered NamingListeners.
-     */
-    private void fireObjectAdded(Binding newBd, long changeID) {
-        if (namingListeners == null || namingListeners.size() == 0)
-            return;
-
-        NamingEvent e = new NamingEvent(eventSrc, NamingEvent.OBJECT_ADDED,
-            newBd, null, new Long(changeID));
-        support.queueEvent(e, namingListeners);
-    }
-
-    /**
-     * Fire an "object removed" event to registered NamingListeners.
-     */
-    private void fireObjectRemoved(Binding oldBd, long changeID) {
-        if (namingListeners == null || namingListeners.size() == 0)
-            return;
-
-        NamingEvent e = new NamingEvent(eventSrc, NamingEvent.OBJECT_REMOVED,
-            null, oldBd, new Long(changeID));
-        support.queueEvent(e, namingListeners);
-    }
-
-    /**
-     * Fires an "object changed" event to registered NamingListeners.
-     */
-    private void fireObjectChanged(Binding newBd, long changeID) {
-        if (namingListeners == null || namingListeners.size() == 0)
-            return;
-
-        // Name hasn't changed; construct old binding using name from new binding
-        Binding oldBd = new Binding(newBd.getName(), null, newBd.isRelative());
-
-        NamingEvent e = new NamingEvent(
-            eventSrc, NamingEvent.OBJECT_CHANGED, newBd, oldBd, new Long(changeID));
-        support.queueEvent(e, namingListeners);
-    }
-
-    /**
-     * Fires an "object renamed" to registered NamingListeners.
-     */
-    private void fireObjectRenamed(Binding newBd, String oldDN, long changeID) {
-        if (namingListeners == null || namingListeners.size() == 0)
-            return;
-
-        Binding oldBd = null;
-        try {
-            LdapName dn = new LdapName(oldDN);
-            if (dn.startsWith(context.currentParsedDN)) {
-                String relDN = dn.getSuffix(context.currentParsedDN.size()).toString();
-                oldBd = new Binding(relDN, null);
-            }
-        } catch (NamingException e) {}
-
-        if (oldBd == null) {
-            oldBd = new Binding(oldDN, null, false /* not relative name */);
-        }
-
-        NamingEvent e = new NamingEvent(
-            eventSrc, NamingEvent.OBJECT_RENAMED, newBd, oldBd, new Long(changeID));
-        support.queueEvent(e, namingListeners);
-    }
-
-    private void fireNamingException(NamingException e) {
-        if (namingListeners == null || namingListeners.size() == 0)
-            return;
-
-        NamingExceptionEvent evt = new NamingExceptionEvent(eventSrc, e);
-        support.queueEvent(evt, namingListeners);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/ldap/NotifierArgs.java b/ojluni/src/main/java/com/sun/jndi/ldap/NotifierArgs.java
deleted file mode 100755
index 39cab6f..0000000
--- a/ojluni/src/main/java/com/sun/jndi/ldap/NotifierArgs.java
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- * Copyright (c) 1999, 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.jndi.ldap;
-
-import javax.naming.directory.SearchControls;
-import javax.naming.event.*;
-
-/**
- * This class holds the information in an event registration/deregistration
- * request. This includes the name, filter, search controls and
- * the different interfaces that the listener implements. This last piece
- * of information determines which event(s) the listener is interested in.
- *<p>
- * It overrides equals() and hashCode() to use all these pieces of
- * information so that it can be used correctly in a hashtable.
- *
- * @author Rosanna Lee
- */
-final class NotifierArgs {
-    static final int ADDED_MASK = 0x1;
-    static final int REMOVED_MASK = 0x2;
-    static final int CHANGED_MASK = 0x4;
-    static final int RENAMED_MASK = 0x8;
-
-    // these fields are package private; used by NamingEventNotifier
-    String name;
-    String filter;
-    SearchControls controls;
-    int mask;
-
-    // package private
-    NotifierArgs(String name, int scope, NamingListener l) {
-        this(name, "(objectclass=*)", null, l);
-
-        // if scope is not default, create search ctl and set it
-        if (scope != EventContext.ONELEVEL_SCOPE) {
-            controls = new SearchControls();
-            controls.setSearchScope(scope);
-        }
-    }
-
-    // package private
-    NotifierArgs(String name, String filter, SearchControls ctls,
-        NamingListener l) {
-        this.name = name;
-        this.filter = filter;
-        this.controls = ctls;
-
-        if (l instanceof NamespaceChangeListener) {
-            mask |= ADDED_MASK|REMOVED_MASK|RENAMED_MASK;
-        }
-        if (l instanceof ObjectChangeListener) {
-            mask |= CHANGED_MASK;
-        }
-    }
-
-    // checks name, filter, controls
-    public boolean equals(Object obj) {
-        if (obj instanceof NotifierArgs) {
-            NotifierArgs target = (NotifierArgs)obj;
-            return mask == target.mask &&
-                name.equals(target.name) && filter.equals(target.filter) &&
-                checkControls(target.controls);
-        }
-        return false;
-    }
-
-    private boolean checkControls(SearchControls ctls) {
-        if ((controls == null || ctls == null)) {
-            return ctls == controls;
-        }
-        // ctls are nonempty
-
-        return (controls.getSearchScope() == ctls.getSearchScope()) &&
-            (controls.getTimeLimit() == ctls.getTimeLimit()) &&
-            (controls.getDerefLinkFlag() == ctls.getDerefLinkFlag()) &&
-            (controls.getReturningObjFlag() == ctls.getReturningObjFlag()) &&
-            (controls.getCountLimit() == ctls.getCountLimit()) &&
-            checkStringArrays(controls.getReturningAttributes(),
-                ctls.getReturningAttributes());
-    }
-
-    private static boolean checkStringArrays(String[] s1, String[] s2) {
-        if ((s1 == null) || (s2 == null)) {
-            return s1 == s2;
-        }
-
-        // both are nonnull
-        if (s1.length != s2.length) {
-            return false;
-        }
-
-        for (int i = 0; i < s1.length; i++) {
-            if (!s1[i].equals(s2[i])) {
-                return false;
-            }
-        }
-        return true;
-    }
-
-    // save from having to recalculate each time
-    private int sum = -1;
-    public int hashCode() {
-        if (sum == -1)
-            sum = mask + name.hashCode() + filter.hashCode() + controlsCode();
-        return sum;
-    }
-
-    // used in calculating hash code
-    private int controlsCode() {
-        if (controls == null) return 0;
-
-        int total = (int)controls.getTimeLimit() + (int)controls.getCountLimit() +
-            (controls.getDerefLinkFlag() ? 1 : 0) +
-            (controls.getReturningObjFlag() ? 1 : 0);
-
-        String[] attrs = controls.getReturningAttributes();
-        if (attrs != null) {
-            for (int i = 0; i < attrs.length; i++) {
-                total += attrs[i].hashCode();
-            }
-        }
-
-        return total;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/ldap/Obj.java b/ojluni/src/main/java/com/sun/jndi/ldap/Obj.java
deleted file mode 100755
index d7c14ec..0000000
--- a/ojluni/src/main/java/com/sun/jndi/ldap/Obj.java
+++ /dev/null
@@ -1,659 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-package com.sun.jndi.ldap;
-
-import javax.naming.*;
-import javax.naming.directory.*;
-import javax.naming.spi.DirectoryManager;
-import javax.naming.spi.DirStateFactory;
-
-import java.io.IOException;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.io.ObjectStreamClass;
-import java.io.InputStream;
-
-import java.util.Hashtable;
-import java.util.Vector;
-import java.util.StringTokenizer;
-
-import sun.misc.BASE64Encoder;
-import sun.misc.BASE64Decoder;
-
-import java.lang.reflect.Proxy;
-import java.lang.reflect.Modifier;
-
-/**
-  * Class containing static methods and constants for dealing with
-  * encoding/decoding JNDI References and Serialized Objects
-  * in LDAP.
-  * @author Vincent Ryan
-  * @author Rosanna Lee
-  */
-final class Obj {
-
-    private Obj () {}; // Make sure no one can create one
-
-    // package private; used by Connection
-    static VersionHelper helper = VersionHelper.getVersionHelper();
-
-    // LDAP attributes used to support Java objects.
-    static final String[] JAVA_ATTRIBUTES = {
-        "objectClass",
-        "javaSerializedData",
-        "javaClassName",
-        "javaFactory",
-        "javaCodeBase",
-        "javaReferenceAddress",
-        "javaClassNames",
-        "javaRemoteLocation"     // Deprecated
-    };
-
-    static final int OBJECT_CLASS = 0;
-    static final int SERIALIZED_DATA = 1;
-    static final int CLASSNAME = 2;
-    static final int FACTORY = 3;
-    static final int CODEBASE = 4;
-    static final int REF_ADDR = 5;
-    static final int TYPENAME = 6;
-    /**
-     * @deprecated
-     */
-    private static final int REMOTE_LOC = 7;
-
-    // LDAP object classes to support Java objects
-    static final String[] JAVA_OBJECT_CLASSES = {
-        "javaContainer",
-        "javaObject",
-        "javaNamingReference",
-        "javaSerializedObject",
-        "javaMarshalledObject",
-    };
-
-    static final String[] JAVA_OBJECT_CLASSES_LOWER = {
-        "javacontainer",
-        "javaobject",
-        "javanamingreference",
-        "javaserializedobject",
-        "javamarshalledobject",
-    };
-
-    static final int STRUCTURAL = 0;    // structural object class
-    static final int BASE_OBJECT = 1;   // auxiliary java object class
-    static final int REF_OBJECT = 2;    // auxiliary reference object class
-    static final int SER_OBJECT = 3;    // auxiliary serialized object class
-    static final int MAR_OBJECT = 4;    // auxiliary marshalled object class
-
-    /**
-     * Encode an object in LDAP attributes.
-     * Supports binding Referenceable or Reference, Serializable,
-     * and DirContext.
-     *
-     * If the object supports the Referenceable interface then encode
-     * the reference to the object. See encodeReference() for details.
-     *<p>
-     * If the object is serializable, it is stored as follows:
-     * javaClassName
-     *   value: Object.getClass();
-     * javaSerializedData
-     *   value: serialized form of Object (in binary form).
-     * javaTypeName
-     *   value: getTypeNames(Object.getClass());
-     */
-    private static Attributes encodeObject(char separator,
-        Object obj, Attributes attrs,
-        Attribute objectClass, boolean cloned)
-        throws NamingException {
-            boolean structural =
-                (objectClass.size() == 0 ||
-                    (objectClass.size() == 1 && objectClass.contains("top")));
-
-            if (structural) {
-                objectClass.add(JAVA_OBJECT_CLASSES[STRUCTURAL]);
-            }
-
-    // References
-            if (obj instanceof Referenceable) {
-                objectClass.add(JAVA_OBJECT_CLASSES[BASE_OBJECT]);
-                objectClass.add(JAVA_OBJECT_CLASSES[REF_OBJECT]);
-                if (!cloned) {
-                    attrs = (Attributes)attrs.clone();
-                }
-                attrs.put(objectClass);
-                return (encodeReference(separator,
-                    ((Referenceable)obj).getReference(),
-                    attrs, obj));
-
-            } else if (obj instanceof Reference) {
-                objectClass.add(JAVA_OBJECT_CLASSES[BASE_OBJECT]);
-                objectClass.add(JAVA_OBJECT_CLASSES[REF_OBJECT]);
-                if (!cloned) {
-                    attrs = (Attributes)attrs.clone();
-                }
-                attrs.put(objectClass);
-                return (encodeReference(separator, (Reference)obj, attrs, null));
-
-    // Serializable Object
-            } else if (obj instanceof java.io.Serializable) {
-                objectClass.add(JAVA_OBJECT_CLASSES[BASE_OBJECT]);
-                if (!(objectClass.contains(JAVA_OBJECT_CLASSES[MAR_OBJECT]) ||
-                    objectClass.contains(JAVA_OBJECT_CLASSES_LOWER[MAR_OBJECT]))) {
-                    objectClass.add(JAVA_OBJECT_CLASSES[SER_OBJECT]);
-                }
-                if (!cloned) {
-                    attrs = (Attributes)attrs.clone();
-                }
-                attrs.put(objectClass);
-                attrs.put(new BasicAttribute(JAVA_ATTRIBUTES[SERIALIZED_DATA],
-                    serializeObject(obj)));
-                if (attrs.get(JAVA_ATTRIBUTES[CLASSNAME]) == null) {
-                    attrs.put(JAVA_ATTRIBUTES[CLASSNAME],
-                        obj.getClass().getName());
-                }
-                if (attrs.get(JAVA_ATTRIBUTES[TYPENAME]) == null) {
-                    Attribute tAttr =
-                        LdapCtxFactory.createTypeNameAttr(obj.getClass());
-                    if (tAttr != null) {
-                        attrs.put(tAttr);
-                    }
-                }
-    // DirContext Object
-            } else if (obj instanceof DirContext) {
-                // do nothing
-            } else {
-                throw new IllegalArgumentException(
-            "can only bind Referenceable, Serializable, DirContext");
-            }
-            //      System.err.println(attrs);
-            return attrs;
-    }
-
-    /**
-     * Each value in javaCodebase contains a list of space-separated
-     * URLs. Each value is independent; we can pick any of the values
-     * so we just use the first one.
-     * @return an array of URL strings for the codebase
-     */
-    private static String[] getCodebases(Attribute codebaseAttr) throws
-        NamingException {
-        if (codebaseAttr == null) {
-            return null;
-        } else {
-            StringTokenizer parser =
-                new StringTokenizer((String)codebaseAttr.get());
-            Vector vec = new Vector(10);
-            while (parser.hasMoreTokens()) {
-                vec.addElement(parser.nextToken());
-            }
-            String[] answer = new String[vec.size()];
-            for (int i = 0; i < answer.length; i++) {
-                answer[i] = (String)vec.elementAt(i);
-            }
-            return answer;
-        }
-    }
-
-    /*
-     * Decode an object from LDAP attribute(s).
-     * The object may be a Reference, or a Serialized object.
-     *
-     * See encodeObject() and encodeReference() for details on formats
-     * expected.
-     */
-    static Object decodeObject(Attributes attrs)
-        throws NamingException {
-
-        Attribute attr;
-
-        // Get codebase, which is used in all 3 cases.
-        String[] codebases = getCodebases(attrs.get(JAVA_ATTRIBUTES[CODEBASE]));
-        try {
-            if ((attr = attrs.get(JAVA_ATTRIBUTES[SERIALIZED_DATA])) != null) {
-                ClassLoader cl = helper.getURLClassLoader(codebases);
-                return deserializeObject((byte[])attr.get(), cl);
-            } else if ((attr = attrs.get(JAVA_ATTRIBUTES[REMOTE_LOC])) != null) {
-                // For backward compatibility only
-                return decodeRmiObject(
-                    (String)attrs.get(JAVA_ATTRIBUTES[CLASSNAME]).get(),
-                    (String)attr.get(), codebases);
-            }
-
-            attr = attrs.get(JAVA_ATTRIBUTES[OBJECT_CLASS]);
-            if (attr != null &&
-                (attr.contains(JAVA_OBJECT_CLASSES[REF_OBJECT]) ||
-                    attr.contains(JAVA_OBJECT_CLASSES_LOWER[REF_OBJECT]))) {
-                return decodeReference(attrs, codebases);
-            }
-            return null;
-        } catch (IOException e) {
-            NamingException ne = new NamingException();
-            ne.setRootCause(e);
-            throw ne;
-        }
-    }
-
-    /**
-     * Convert a Reference object into several LDAP attributes.
-     *
-     * A Reference is stored as into the following attributes:
-     * javaClassName
-     *   value: Reference.getClassName();
-     * javaFactory
-     *   value: Reference.getFactoryClassName();
-     * javaCodeBase
-     *   value: Reference.getFactoryClassLocation();
-     * javaReferenceAddress
-     *   value: #0#typeA#valA
-     *   value: #1#typeB#valB
-     *   value: #2#typeC##[serialized RefAddr C]
-     *   value: #3#typeD#valD
-     *
-     * where
-     * -  the first character denotes the separator
-     * -  the number following the first separator denotes the position
-     *    of the RefAddr within the Reference
-     * -  "typeA" is RefAddr.getType()
-     * -  ## denotes that the Base64-encoded form of the non-StringRefAddr
-     *    is to follow; otherwise the value that follows is
-     *    StringRefAddr.getContents()
-     *
-     * The default separator is the hash character (#).
-     * May provide property for this in future.
-     */
-
-    private static Attributes encodeReference(char separator,
-        Reference ref, Attributes attrs, Object orig)
-        throws NamingException {
-
-        if (ref == null)
-            return attrs;
-
-        String s;
-
-        if ((s = ref.getClassName()) != null) {
-            attrs.put(new BasicAttribute(JAVA_ATTRIBUTES[CLASSNAME], s));
-        }
-
-        if ((s = ref.getFactoryClassName()) != null) {
-            attrs.put(new BasicAttribute(JAVA_ATTRIBUTES[FACTORY], s));
-        }
-
-        if ((s = ref.getFactoryClassLocation()) != null) {
-            attrs.put(new BasicAttribute(JAVA_ATTRIBUTES[CODEBASE], s));
-        }
-
-        // Get original object's types if caller has not explicitly
-        // specified other type names
-        if (orig != null && attrs.get(JAVA_ATTRIBUTES[TYPENAME]) != null) {
-            Attribute tAttr =
-                LdapCtxFactory.createTypeNameAttr(orig.getClass());
-            if (tAttr != null) {
-                attrs.put(tAttr);
-            }
-        }
-
-        int count = ref.size();
-
-        if (count > 0) {
-
-            Attribute refAttr = new BasicAttribute(JAVA_ATTRIBUTES[REF_ADDR]);
-            RefAddr refAddr;
-            BASE64Encoder encoder = null;
-
-            for (int i = 0; i < count; i++) {
-                refAddr = ref.get(i);
-
-                if (refAddr instanceof StringRefAddr) {
-                    refAttr.add(""+ separator + i +
-                        separator +     refAddr.getType() +
-                        separator + refAddr.getContent());
-                } else {
-                    if (encoder == null)
-                        encoder = new BASE64Encoder();
-
-                    refAttr.add(""+ separator + i +
-                        separator + refAddr.getType() +
-                        separator + separator +
-                        encoder.encodeBuffer(serializeObject(refAddr)));
-                }
-            }
-            attrs.put(refAttr);
-        }
-        return attrs;
-    }
-
-    /*
-     * A RMI object is stored in the directory as
-     * javaClassName
-     *   value: Object.getClass();
-     * javaRemoteLocation
-     *   value: URL of RMI object (accessed through the RMI Registry)
-     * javaCodebase:
-     *   value: URL of codebase of where to find classes for object
-     *
-     * Return the RMI Location URL itself. This will be turned into
-     * an RMI object when getObjectInstance() is called on it.
-     * %%% Ignore codebase for now. Depend on RMI registry to send code.-RL
-     * @deprecated For backward compatibility only
-     */
-    private static Object decodeRmiObject(String className,
-        String rmiName, String[] codebases) throws NamingException {
-            return new Reference(className, new StringRefAddr("URL", rmiName));
-    }
-
-    /*
-     * Restore a Reference object from several LDAP attributes
-     */
-    private static Reference decodeReference(Attributes attrs,
-        String[] codebases) throws NamingException, IOException {
-
-        Attribute attr;
-        String className;
-        String factory = null;
-
-        if ((attr = attrs.get(JAVA_ATTRIBUTES[CLASSNAME])) != null) {
-            className = (String)attr.get();
-        } else {
-            throw new InvalidAttributesException(JAVA_ATTRIBUTES[CLASSNAME] +
-                        " attribute is required");
-        }
-
-        if ((attr = attrs.get(JAVA_ATTRIBUTES[FACTORY])) != null) {
-            factory = (String)attr.get();
-        }
-
-        Reference ref = new Reference(className, factory,
-            (codebases != null? codebases[0] : null));
-
-        /*
-         * string encoding of a RefAddr is either:
-         *
-         *      #posn#<type>#<address>
-         * or
-         *      #posn#<type>##<base64-encoded address>
-         */
-        if ((attr = attrs.get(JAVA_ATTRIBUTES[REF_ADDR])) != null) {
-
-            String val, posnStr, type;
-            char separator;
-            int start, sep, posn;
-            BASE64Decoder decoder = null;
-
-            ClassLoader cl = helper.getURLClassLoader(codebases);
-
-            /*
-             * Temporary Vector for decoded RefAddr addresses - used to ensure
-             * unordered addresses are correctly re-ordered.
-             */
-            Vector refAddrList = new Vector();
-            refAddrList.setSize(attr.size());
-
-            for (NamingEnumeration vals = attr.getAll(); vals.hasMore(); ) {
-
-                val = (String)vals.next();
-
-                if (val.length() == 0) {
-                    throw new InvalidAttributeValueException(
-                        "malformed " + JAVA_ATTRIBUTES[REF_ADDR] + " attribute - "+
-                        "empty attribute value");
-                }
-                // first character denotes encoding separator
-                separator = val.charAt(0);
-                start = 1;  // skip over separator
-
-                // extract position within Reference
-                if ((sep = val.indexOf(separator, start)) < 0) {
-                    throw new InvalidAttributeValueException(
-                        "malformed " + JAVA_ATTRIBUTES[REF_ADDR] + " attribute - " +
-                        "separator '" + separator + "'" + "not found");
-                }
-                if ((posnStr = val.substring(start, sep)) == null) {
-                    throw new InvalidAttributeValueException(
-                        "malformed " + JAVA_ATTRIBUTES[REF_ADDR] + " attribute - " +
-                        "empty RefAddr position");
-                }
-                try {
-                    posn = Integer.parseInt(posnStr);
-                } catch (NumberFormatException nfe) {
-                    throw new InvalidAttributeValueException(
-                        "malformed " + JAVA_ATTRIBUTES[REF_ADDR] + " attribute - " +
-                        "RefAddr position not an integer");
-                }
-                start = sep + 1; // skip over position and trailing separator
-
-                // extract type
-                if ((sep = val.indexOf(separator, start)) < 0) {
-                    throw new InvalidAttributeValueException(
-                        "malformed " + JAVA_ATTRIBUTES[REF_ADDR] + " attribute - " +
-                        "RefAddr type not found");
-                }
-                if ((type = val.substring(start, sep)) == null) {
-                    throw new InvalidAttributeValueException(
-                        "malformed " + JAVA_ATTRIBUTES[REF_ADDR] + " attribute - " +
-                        "empty RefAddr type");
-                }
-                start = sep + 1; // skip over type and trailing separator
-
-                // extract content
-                if (start == val.length()) {
-                    // Empty content
-                    refAddrList.setElementAt(new StringRefAddr(type, null), posn);
-                } else if (val.charAt(start) == separator) {
-                    // Double separators indicate a non-StringRefAddr
-                    // Content is a Base64-encoded serialized RefAddr
-
-                    ++start;  // skip over consecutive separator
-                    // %%% RL: exception if empty after double separator
-
-                    if (decoder == null)
-                        decoder = new BASE64Decoder();
-
-                    RefAddr ra = (RefAddr)
-                        deserializeObject(
-                            decoder.decodeBuffer(val.substring(start)),
-                            cl);
-
-                    refAddrList.setElementAt(ra, posn);
-                } else {
-                    // Single separator indicates a StringRefAddr
-                    refAddrList.setElementAt(new StringRefAddr(type,
-                        val.substring(start)), posn);
-                }
-            }
-
-            // Copy to real reference
-            for (int i = 0; i < refAddrList.size(); i++) {
-                ref.add((RefAddr)refAddrList.elementAt(i));
-            }
-        }
-
-        return (ref);
-    }
-
-    /*
-     * Serialize an object into a byte array
-     */
-    private static byte[] serializeObject(Object obj) throws NamingException {
-
-        try {
-            ByteArrayOutputStream bytes = new ByteArrayOutputStream();
-            ObjectOutputStream serial = new ObjectOutputStream(bytes);
-            serial.writeObject(obj);
-            serial.close();
-
-            return (bytes.toByteArray());
-
-        } catch (IOException e) {
-            NamingException ne = new NamingException();
-            ne.setRootCause(e);
-            throw ne;
-        }
-    }
-
-    /*
-     * Deserializes a byte array into an object.
-     */
-    private static Object deserializeObject(byte[] obj, ClassLoader cl)
-        throws NamingException {
-
-        try {
-            // Create ObjectInputStream for deserialization
-            ByteArrayInputStream bytes = new ByteArrayInputStream(obj);
-            ObjectInputStream deserial = (cl == null ?
-                new ObjectInputStream(bytes) :
-                new LoaderInputStream(bytes, cl));
-
-            try {
-                return deserial.readObject();
-            } catch (ClassNotFoundException e) {
-                NamingException ne = new NamingException();
-                ne.setRootCause(e);
-                throw ne;
-            } finally {
-                deserial.close();
-            }
-        } catch (IOException e) {
-            NamingException ne = new NamingException();
-            ne.setRootCause(e);
-            throw ne;
-        }
-    }
-
-    /**
-      * Returns the attributes to bind given an object and its attributes.
-      */
-    static Attributes determineBindAttrs(
-        char separator, Object obj, Attributes attrs, boolean cloned,
-        Name name, Context ctx, Hashtable env)
-        throws NamingException {
-
-        // Call state factories to convert object and attrs
-        DirStateFactory.Result res =
-            DirectoryManager.getStateToBind(obj, name, ctx, env, attrs);
-        obj = res.getObject();
-        attrs = res.getAttributes();
-
-        // We're only storing attributes; no further processing required
-        if (obj == null) {
-            return attrs;
-        }
-
-        //if object to be bound is a DirContext extract its attributes
-        if ((attrs == null) && (obj instanceof DirContext)) {
-            cloned = true;
-            attrs = ((DirContext)obj).getAttributes("");
-        }
-
-        boolean ocNeedsCloning = false;
-
-        // Create "objectClass" attribute
-        Attribute objectClass;
-        if (attrs == null || attrs.size() == 0) {
-            attrs = new BasicAttributes(LdapClient.caseIgnore);
-            cloned = true;
-
-            // No objectclasses supplied, use "top" to start
-            objectClass = new BasicAttribute("objectClass", "top");
-
-        } else {
-            // Get existing objectclass attribute
-            objectClass = (Attribute)attrs.get("objectClass");
-            if (objectClass == null && !attrs.isCaseIgnored()) {
-                // %%% workaround
-                objectClass = (Attribute)attrs.get("objectclass");
-            }
-
-            // No objectclasses supplied, use "top" to start
-            if (objectClass == null) {
-                objectClass =  new BasicAttribute("objectClass", "top");
-            } else if (ocNeedsCloning || !cloned) {
-                objectClass = (Attribute)objectClass.clone();
-            }
-        }
-
-        // convert the supplied object into LDAP attributes
-        attrs = encodeObject(separator, obj, attrs, objectClass, cloned);
-
-        // System.err.println("Determined: " + attrs);
-        return attrs;
-    }
-
-    /**
-     * An ObjectInputStream that uses a class loader to find classes.
-     */
-    private static final class LoaderInputStream extends ObjectInputStream {
-        private ClassLoader classLoader;
-
-        LoaderInputStream(InputStream in, ClassLoader cl) throws IOException {
-            super(in);
-            classLoader = cl;
-        }
-
-        protected Class resolveClass(ObjectStreamClass desc) throws IOException,
-            ClassNotFoundException {
-            try {
-                // %%% Should use Class.forName(desc.getName(), false, classLoader);
-                // except we can't because that is only available on JDK1.2
-                return classLoader.loadClass(desc.getName());
-            } catch (ClassNotFoundException e) {
-                return super.resolveClass(desc);
-            }
-        }
-
-         protected Class resolveProxyClass(String[] interfaces) throws
-                IOException, ClassNotFoundException {
-             ClassLoader nonPublicLoader = null;
-             boolean hasNonPublicInterface = false;
-
-             // define proxy in class loader of non-public interface(s), if any
-             Class[] classObjs = new Class[interfaces.length];
-             for (int i = 0; i < interfaces.length; i++) {
-                 Class cl = Class.forName(interfaces[i], false, classLoader);
-                 if ((cl.getModifiers() & Modifier.PUBLIC) == 0) {
-                     if (hasNonPublicInterface) {
-                         if (nonPublicLoader != cl.getClassLoader()) {
-                             throw new IllegalAccessError(
-                                "conflicting non-public interface class loaders");
-                         }
-                     } else {
-                         nonPublicLoader = cl.getClassLoader();
-                         hasNonPublicInterface = true;
-                     }
-                 }
-                 classObjs[i] = cl;
-             }
-             try {
-                 return Proxy.getProxyClass(hasNonPublicInterface ?
-                        nonPublicLoader : classLoader, classObjs);
-             } catch (IllegalArgumentException e) {
-                 throw new ClassNotFoundException(null, e);
-             }
-         }
-
-     }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/ldap/PersistentSearchControl.java b/ojluni/src/main/java/com/sun/jndi/ldap/PersistentSearchControl.java
deleted file mode 100755
index 33bf74d..0000000
--- a/ojluni/src/main/java/com/sun/jndi/ldap/PersistentSearchControl.java
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
- * Copyright (c) 1999, 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.jndi.ldap;
-
-import java.io.IOException;
-
-/**
- * This class implements the LDAPv3 Request Control for the persistent search
- * mechanism as defined in
- * <a href="http://www.ietf.org/internet-drafts/draft-ietf-ldapext-psearch-02.txt">draft-ietf-ldapext-psearch-02.txt</a>.
- *
- * The control's value has the following ASN.1 definition:
- * <pre>
- *
- *     PersistentSearch ::= SEQUENCE {
- *         changeTypes INTEGER,
- *         changesOnly BOOLEAN,
- *         returnECs BOOLEAN
- *     }
- *
- * </pre>
- *
- * @see EntryChangeResponseControl
- * @author Vincent Ryan
- */
-final public class PersistentSearchControl extends BasicControl {
-
-    /**
-     * The persistent search control's assigned object identifier
-     * is 2.16.840.1.113730.3.4.3.
-     */
-    public static final String OID = "2.16.840.1.113730.3.4.3";
-
-    /**
-     * Indicates interest in entries which have been added.
-     */
-    public static final int ADD = 1;
-
-    /**
-     * Indicates interest in entries which have been deleted.
-     */
-    public static final int DELETE = 2;
-
-    /**
-     * Indicates interest in entries which have been modified.
-     */
-    public static final int MODIFY = 4;
-
-    /**
-     * Indicates interest in entries which have been renamed.
-     */
-    public static final int RENAME = 8;
-
-    /**
-     * Indicates interest in entries which have been added, deleted,
-     * modified or renamed.
-     */
-    public static final int ANY = ADD | DELETE | MODIFY | RENAME;
-
-    /**
-     * The change types of interest. All changes, by default.
-     *
-     * @serial
-     */
-    private int changeTypes = ANY;
-
-    /**
-     * Return original entries and changed entries or only changed entries.
-     *
-     * @serial
-     */
-    private boolean changesOnly = false;
-
-    /**
-     * Return entry change controls.
-     *
-     * @serial
-     */
-    private boolean returnControls = true;
-
-    private static final long serialVersionUID = 6335140491154854116L;
-
-    /**
-     * Constructs a persistent search non-critical control.
-     * The original entries, any changed entries (additions,
-     * deletions, modifications or renames) and entry change
-     * controls are requested.
-     *
-     * @exception IOException If a BER encoding error occurs.
-     */
-    public PersistentSearchControl() throws IOException {
-        super(OID);
-        super.value = setEncodedValue();
-    }
-
-    /**
-     * Constructs a persistent search control.
-     *
-     * @param   changeTypes     The change types of interest.
-     * @param   changesOnly     Return original entries and changed entries
-     *                          or only the changed entries.
-     * @param   returnControls  Return entry change controls.
-     * @param   criticality     The control's criticality.
-     * @exception IOException If a BER encoding error occurs.
-     */
-    public PersistentSearchControl(int changeTypes, boolean changesOnly,
-        boolean returnControls, boolean criticality) throws IOException {
-
-        super(OID, criticality, null);
-        this.changeTypes = changeTypes;
-        this.changesOnly = changesOnly;
-        this.returnControls = returnControls;
-        super.value = setEncodedValue();
-    }
-
-    /*
-     * Sets the ASN.1 BER encoded value of the persistent search control.
-     * The result is the raw BER bytes including the tag and length of
-     * the control's value. It does not include the controls OID or criticality.
-     *
-     * @return A possibly null byte array representing the ASN.1 BER encoded
-     *         value of the LDAP persistent search control.
-     * @exception IOException If a BER encoding error occurs.
-     */
-    private byte[] setEncodedValue() throws IOException {
-
-        // build the ASN.1 encoding
-        BerEncoder ber = new BerEncoder(32);
-
-        ber.beginSeq(Ber.ASN_SEQUENCE | Ber.ASN_CONSTRUCTOR);
-            ber.encodeInt(changeTypes);
-            ber.encodeBoolean(changesOnly);
-            ber.encodeBoolean(returnControls);
-        ber.endSeq();
-
-        return ber.getTrimmedBuf();
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/ldap/ReferralEnumeration.java b/ojluni/src/main/java/com/sun/jndi/ldap/ReferralEnumeration.java
deleted file mode 100755
index db4d815..0000000
--- a/ojluni/src/main/java/com/sun/jndi/ldap/ReferralEnumeration.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (c) 1999, 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.jndi.ldap;
-
-import javax.naming.NamingEnumeration;
-
-interface ReferralEnumeration extends NamingEnumeration {
-    void appendUnprocessedReferrals(LdapReferralException ex);
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/ldap/SearchResultWithControls.java b/ojluni/src/main/java/com/sun/jndi/ldap/SearchResultWithControls.java
deleted file mode 100755
index a1da71d..0000000
--- a/ojluni/src/main/java/com/sun/jndi/ldap/SearchResultWithControls.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 1999, 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.jndi.ldap;
-
-import javax.naming.*;
-import javax.naming.directory.*;
-import javax.naming.ldap.*;
-
-class SearchResultWithControls extends SearchResult implements HasControls {
-    private Control[] controls;
-
-    public SearchResultWithControls(String name, Object obj, Attributes attrs,
-        boolean isRelative, Control[] controls) {
-
-        super(name, obj, attrs, isRelative);
-        this.controls = controls;
-    }
-
-    public Control[] getControls() throws NamingException {
-        return controls;
-    }
-
-    private static final long serialVersionUID = 8476983938747908202L;
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/ldap/ServiceLocator.java b/ojluni/src/main/java/com/sun/jndi/ldap/ServiceLocator.java
deleted file mode 100755
index a51c3e0..0000000
--- a/ojluni/src/main/java/com/sun/jndi/ldap/ServiceLocator.java
+++ /dev/null
@@ -1,302 +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.
- */
-
-package com.sun.jndi.ldap;
-
-import java.util.Arrays;
-import java.util.Enumeration;
-import java.util.Hashtable;
-import java.util.NoSuchElementException;
-import java.util.Random;
-import java.util.StringTokenizer;
-import java.util.List;
-
-import javax.naming.*;
-import javax.naming.directory.*;
-import javax.naming.spi.NamingManager;
-import javax.naming.ldap.LdapName;
-import javax.naming.ldap.Rdn;
-
-import com.sun.jndi.ldap.LdapURL;
-
-/**
- * This class discovers the location of LDAP services by querying DNS.
- * See http://www.ietf.org/internet-drafts/draft-ietf-ldapext-locate-07.txt
- */
-
-class ServiceLocator {
-
-    private static final String SRV_RR = "SRV";
-
-    private static final String[] SRV_RR_ATTR = new String[]{SRV_RR};
-
-    private static final Random random = new Random();
-
-    private ServiceLocator() {
-    }
-
-    /**
-     * Maps a distinguished name (RFC 2253) to a fully qualified domain name.
-     * Processes a sequence of RDNs having a DC attribute.
-     * The special RDN "DC=." denotes the root of the domain tree.
-     * Multi-valued RDNs, non-DC attributes, binary-valued attributes and the
-     * RDN "DC=." all reset the domain name and processing continues.
-     *
-     * @param dn A string distinguished name (RFC 2253).
-     * @return A domain name or null if none can be derived.
-     * @throw InvalidNameException If the distinugished name is invalid.
-     */
-    static String mapDnToDomainName(String dn) throws InvalidNameException {
-        if (dn == null) {
-            return null;
-        }
-        StringBuffer domain = new StringBuffer();
-        LdapName ldapName = new LdapName(dn);
-
-        // process RDNs left-to-right
-        //List<Rdn> rdnList = ldapName.getRdns();
-
-        List rdnList = ldapName.getRdns();
-        for (int i = rdnList.size() - 1; i >= 0; i--) {
-            //Rdn rdn = rdnList.get(i);
-            Rdn rdn = (Rdn) rdnList.get(i);
-
-            // single-valued RDN with a DC attribute
-            if ((rdn.size() == 1) &&
-                ("dc".equalsIgnoreCase(rdn.getType()) )) {
-                Object attrval = rdn.getValue();
-                if (attrval instanceof String) {
-                    if (attrval.equals(".") ||
-                        (domain.length() == 1 && domain.charAt(0) == '.')) {
-                        domain.setLength(0); // reset (when current or previous
-                                             //        RDN value is "DC=.")
-                    }
-                    if (domain.length() > 0) {
-                        domain.append('.');
-                    }
-                    domain.append(attrval);
-                } else {
-                    domain.setLength(0); // reset (when binary-valued attribute)
-                }
-            } else {
-                domain.setLength(0); // reset (when multi-valued RDN or non-DC)
-            }
-        }
-        return (domain.length() != 0) ? domain.toString() : null;
-    }
-
-    /**
-     * Locates the LDAP service for a given domain.
-     * Queries DNS for a list of LDAP Service Location Records (SRV) for a
-     * given domain name.
-     *
-     * @param domainName A string domain name.
-     * @param environment The possibly null environment of the context.
-     * @return An ordered list of hostports for the LDAP service or null if
-     *         the service has not been located.
-     */
-    static String[] getLdapService(String domainName, Hashtable environment) {
-
-        if (domainName == null || domainName.length() == 0) {
-            return null;
-        }
-
-        String dnsUrl = "dns:///_ldap._tcp." + domainName;
-        String[] hostports = null;
-
-        try {
-            // Create the DNS context using NamingManager rather than using
-            // the initial context constructor. This avoids having the initial
-            // context constructor call itself (when processing the URL
-            // argument in the getAttributes call).
-            Context ctx = NamingManager.getURLContext("dns", environment);
-            if (!(ctx instanceof DirContext)) {
-                return null; // cannot create a DNS context
-            }
-            Attributes attrs =
-                ((DirContext)ctx).getAttributes(dnsUrl, SRV_RR_ATTR);
-            Attribute attr;
-
-            if (attrs != null && ((attr = attrs.get(SRV_RR)) != null)) {
-                int numValues = attr.size();
-                int numRecords = 0;
-                SrvRecord[] srvRecords = new SrvRecord[numValues];
-
-                // create the service records
-                int i = 0;
-                int j = 0;
-                while (i < numValues) {
-                    try {
-                        srvRecords[j] = new SrvRecord((String) attr.get(i));
-                        j++;
-                    } catch (Exception e) {
-                        // ignore bad value
-                    }
-                    i++;
-                }
-                numRecords = j;
-
-                // trim
-                if (numRecords < numValues) {
-                    SrvRecord[] trimmed = new SrvRecord[numRecords];
-                    System.arraycopy(srvRecords, 0, trimmed, 0, numRecords);
-                    srvRecords = trimmed;
-                }
-
-                // Sort the service records in ascending order of their
-                // priority value. For records with equal priority, move
-                // those with weight 0 to the top of the list.
-                if (numRecords > 1) {
-                    Arrays.sort(srvRecords);
-                }
-
-                // extract the host and port number from each service record
-                hostports = extractHostports(srvRecords);
-            }
-        } catch (NamingException e) {
-            // ignore
-        }
-        return hostports;
-    }
-
-    /**
-     * Extract hosts and port numbers from a list of SRV records.
-     * An array of hostports is returned or null if none were found.
-     */
-    private static String[] extractHostports(SrvRecord[] srvRecords) {
-        String[] hostports = null;
-
-        int head = 0;
-        int tail = 0;
-        int sublistLength = 0;
-        int k = 0;
-        for (int i = 0; i < srvRecords.length; i++) {
-            if (hostports == null) {
-                hostports = new String[srvRecords.length];
-            }
-            // find the head and tail of the list of records having the same
-            // priority value.
-            head = i;
-            while (i < srvRecords.length - 1 &&
-                srvRecords[i].priority == srvRecords[i + 1].priority) {
-                i++;
-            }
-            tail = i;
-
-            // select hostports from the sublist
-            sublistLength = (tail - head) + 1;
-            for (int j = 0; j < sublistLength; j++) {
-                hostports[k++] = selectHostport(srvRecords, head, tail);
-            }
-        }
-        return hostports;
-    }
-
-    /*
-     * Randomly select a service record in the range [head, tail] and return
-     * its hostport value. Follows the algorithm in RFC 2782.
-     */
-    private static String selectHostport(SrvRecord[] srvRecords, int head,
-            int tail) {
-        if (head == tail) {
-            return srvRecords[head].hostport;
-        }
-
-        // compute the running sum for records between head and tail
-        int sum = 0;
-        for (int i = head; i <= tail; i++) {
-            if (srvRecords[i] != null) {
-                sum += srvRecords[i].weight;
-                srvRecords[i].sum = sum;
-            }
-        }
-        String hostport = null;
-
-        // If all records have zero weight, select first available one;
-        // otherwise, randomly select a record according to its weight
-        int target = (sum == 0 ? 0 : random.nextInt(sum + 1));
-        for (int i = head; i <= tail; i++) {
-            if (srvRecords[i] != null && srvRecords[i].sum >= target) {
-                hostport = srvRecords[i].hostport;
-                srvRecords[i] = null; // make this record unavailable
-                break;
-            }
-        }
-        return hostport;
-    }
-
-/**
- * This class holds a DNS service (SRV) record.
- * See http://www.ietf.org/rfc/rfc2782.txt
- */
-
-static class SrvRecord implements Comparable {
-
-    int priority;
-    int weight;
-    int sum;
-    String hostport;
-
-    /**
-     * Creates a service record object from a string record.
-     * DNS supplies the string record in the following format:
-     * <pre>
-     *     <Priority> " " <Weight> " " <Port> " " <Host>
-     * </pre>
-     */
-    SrvRecord(String srvRecord) throws Exception {
-        StringTokenizer tokenizer = new StringTokenizer(srvRecord, " ");
-        String port;
-
-        if (tokenizer.countTokens() == 4) {
-            priority = Integer.parseInt(tokenizer.nextToken());
-            weight = Integer.parseInt(tokenizer.nextToken());
-            port = tokenizer.nextToken();
-            hostport = tokenizer.nextToken() + ":" + port;
-        } else {
-            throw new IllegalArgumentException();
-        }
-    }
-
-    /*
-     * Sort records in ascending order of priority value. For records with
-     * equal priority move those with weight 0 to the top of the list.
-     */
-    public int compareTo(Object o) {
-        SrvRecord that = (SrvRecord) o;
-        if (priority > that.priority) {
-            return 1; // this > that
-        } else if (priority < that.priority) {
-            return -1; // this < that
-        } else if (weight == 0 && that.weight != 0) {
-            return -1; // this < that
-        } else if (weight != 0 && that.weight == 0) {
-            return 1; // this > that
-        } else {
-            return 0; // this == that
-        }
-    }
-}
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/ldap/SimpleClientId.java b/ojluni/src/main/java/com/sun/jndi/ldap/SimpleClientId.java
deleted file mode 100755
index 0eda44ff..0000000
--- a/ojluni/src/main/java/com/sun/jndi/ldap/SimpleClientId.java
+++ /dev/null
@@ -1,98 +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.
- */
-
-package com.sun.jndi.ldap;
-
-import java.util.Arrays;  // JDK1.2
-import java.io.OutputStream;
-import javax.naming.ldap.Control;
-
-/**
- * Represents the identity of a 'simple' authenticated LDAP connection.
- * In addition to ClientId information, this class contains also the
- * username and password.
- *
- * @author Rosanna Lee
- */
-class SimpleClientId extends ClientId {
-    final private String username;
-    final private Object passwd;
-    final private int myHash;
-
-    SimpleClientId(int version, String hostname, int port,
-        String protocol, Control[] bindCtls, OutputStream trace,
-        String socketFactory, String username, Object passwd) {
-
-        super(version, hostname, port, protocol, bindCtls, trace,
-                socketFactory);
-
-        this.username = username;
-        if (passwd == null) {
-            this.passwd = null;
-        } else if (passwd instanceof String) {
-            this.passwd = passwd;
-        } else if (passwd instanceof byte[]) {
-            this.passwd = (byte[]) ((byte[])passwd).clone();
-        } else if (passwd instanceof char[]) {
-            this.passwd = (char[]) ((char[])passwd).clone();
-        } else {
-            this.passwd = passwd;
-        }
-
-        myHash = super.hashCode()
-            + (username != null ? username.hashCode() : 0)
-            + (passwd != null ? passwd.hashCode() : 0);
-    }
-
-    public boolean equals(Object obj) {
-        if (obj == null || !(obj instanceof SimpleClientId)) {
-            return false;
-        }
-
-        SimpleClientId other = (SimpleClientId)obj;
-
-        return super.equals(obj)
-            && (username == other.username // null OK
-                || (username != null && username.equals(other.username)))
-            && ((passwd == other.passwd)  // null OK
-                || (passwd != null && other.passwd != null
-                    && (((passwd instanceof String) && passwd.equals(other.passwd))
-                        || ((passwd instanceof byte[])
-                            && (other.passwd instanceof byte[])
-                            && Arrays.equals((byte[])passwd, (byte[])other.passwd))
-                        || ((passwd instanceof char[])
-                            && (other.passwd instanceof char[])
-                            && Arrays.equals((char[])passwd, (char[])other.passwd)))));
-
-    }
-
-    public int hashCode() {
-        return myHash;
-    }
-
-    public String toString() {
-        return super.toString() + ":" + username; // omit password for security
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/ldap/UnsolicitedResponseImpl.java b/ojluni/src/main/java/com/sun/jndi/ldap/UnsolicitedResponseImpl.java
deleted file mode 100755
index aeb3269..0000000
--- a/ojluni/src/main/java/com/sun/jndi/ldap/UnsolicitedResponseImpl.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * Copyright (c) 1999, 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.jndi.ldap;
-
-import javax.naming.ldap.UnsolicitedNotification;
-import javax.naming.NamingException;
-import javax.naming.ldap.Control;
-import java.util.Vector;
-
-/**
- * A concrete implementation of an UnsolicitedNotification.
- * @author Rosanna Lee
- */
-final class UnsolicitedResponseImpl implements UnsolicitedNotification {
-    private String oid;
-    private String[] referrals;
-    private byte[] extensionValue;
-    private NamingException exception;
-    private Control[] controls;
-
-    UnsolicitedResponseImpl(String oid, byte[] berVal, Vector ref,
-        int status, String msg, String matchedDN, Control[] controls) {
-        this.oid = oid;
-        this.extensionValue = berVal;
-
-        if (ref != null && ref.size() > 0) {
-            int len = ref.size();
-            referrals = new String[len];
-            for (int i = 0; i < len; i++) {
-                referrals[i] = (String)ref.elementAt(i);
-            }
-        }
-        exception = LdapCtx.mapErrorCode(status, msg);
-        // matchedDN ignored for now; could be used to set resolvedName
-        // exception.setResolvedName(new CompositeName().add(matchedDN));
-
-        this.controls = controls;
-    }
-
-    /**
-      * Retrieves the object identifier of the response.
-      *
-      * @return A possibly null object identifier string representing the LDAP
-      *         <tt>ExtendedResponse.responseName</tt> component.
-      */
-    public String getID() {
-        return oid;
-    }
-
-    /**
-      * Retrieves the ASN.1 BER encoded value of the LDAP extended operation
-      * response. Null is returned if the value is absent from the response
-      * sent by the LDAP server.
-      * The result is the raw BER bytes including the tag and length of
-      * the response value. It does not include the response OID.
-      *
-      * @return A possibly null byte array representing the ASN.1 BER encoded
-      *         contents of the LDAP <tt>ExtendedResponse.response</tt>
-      *         component.
-      */
-    public byte[] getEncodedValue() {
-        return extensionValue;
-    }
-
-    /**
-     * Retrieves the referral(s) sent by the server.
-     *
-     * @return A possibly null array of referrals, each of which is represented
-     * by a URL string. If null, no referral was sent by the server.
-     */
-    public String[] getReferrals() {
-        return referrals;
-    }
-
-    /**
-     * Retrieves the exception as constructed using information
-     * sent by the server.
-     * @return A possibly null exception as constructed using information
-     * sent by the server. If null, a "success" status was indicated by
-     * the server.
-     */
-    public NamingException getException() {
-        return exception;
-    }
-
-    public Control[] getControls() throws NamingException {
-        return controls;
-    }
-
-    private static final long serialVersionUID = 5913778898401784775L;
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/ldap/VersionHelper.java b/ojluni/src/main/java/com/sun/jndi/ldap/VersionHelper.java
deleted file mode 100755
index 651edf1..0000000
--- a/ojluni/src/main/java/com/sun/jndi/ldap/VersionHelper.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Copyright (c) 1999, 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.jndi.ldap;
-
-import java.net.MalformedURLException;
-import java.net.URL;
-
-abstract class VersionHelper {
-
-    private static VersionHelper helper = null;
-
-    VersionHelper() {} // Disallow anyone from creating one of these.
-
-    static {
-        try {
-            Class.forName("java.net.URLClassLoader"); // 1.2 test
-            Class.forName("java.security.PrivilegedAction"); // 1.2 test
-            helper = (VersionHelper)
-                Class.forName(
-                    "com.sun.jndi.ldap.VersionHelper12").newInstance();
-        } catch (Exception e) {
-        }
-
-        // Use 1.1 helper if 1.2 test fails, or if we cannot create 1.2 helper
-        if (helper == null) {
-            try {
-                helper = (VersionHelper)
-                    Class.forName(
-                        "com.sun.jndi.ldap.VersionHelper11").newInstance();
-            } catch (Exception e) {
-                // should never happen
-            }
-        }
-    }
-
-    static VersionHelper getVersionHelper() {
-        return helper;
-    }
-
-    abstract ClassLoader getURLClassLoader(String[] url)
-        throws MalformedURLException;
-
-
-    static protected URL[] getUrlArray(String[] url) throws MalformedURLException {
-        URL[] urlArray = new URL[url.length];
-        for (int i = 0; i < urlArray.length; i++) {
-            urlArray[i] = new URL(url[i]);
-        }
-        return urlArray;
-    }
-
-    abstract Class loadClass(String className) throws ClassNotFoundException;
-
-    abstract Thread createThread(Runnable r);
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/ldap/VersionHelper12.java b/ojluni/src/main/java/com/sun/jndi/ldap/VersionHelper12.java
deleted file mode 100755
index 47646d1..0000000
--- a/ojluni/src/main/java/com/sun/jndi/ldap/VersionHelper12.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Copyright (c) 1999, 2009, 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.jndi.ldap;
-
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.net.MalformedURLException;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-
-final class VersionHelper12 extends VersionHelper {
-
-    // System property to control whether classes may be loaded from an
-    // arbitrary URL code base.
-    private static final String TRUST_URL_CODEBASE_PROPERTY =
-        "com.sun.jndi.ldap.object.trustURLCodebase";
-
-    // Determine whether classes may be loaded from an arbitrary URL code base.
-    private static final String trustURLCodebase =
-        AccessController.doPrivileged(
-            new PrivilegedAction<String>() {
-                public String run() {
-                    return System.getProperty(TRUST_URL_CODEBASE_PROPERTY,
-                            "false");
-                }
-            }
-        );
-
-    VersionHelper12() {} // Disallow external from creating one of these.
-
-    ClassLoader getURLClassLoader(String[] url)
-        throws MalformedURLException {
-            ClassLoader parent = getContextClassLoader();
-            /*
-             * Classes may only be loaded from an arbitrary URL code base when
-             * the system property com.sun.jndi.ldap.object.trustURLCodebase
-             * has been set to "true".
-             */
-            if (url != null && "true".equalsIgnoreCase(trustURLCodebase)) {
-                return URLClassLoader.newInstance(getUrlArray(url), parent);
-            } else {
-                return parent;
-            }
-    }
-
-    Class loadClass(String className) throws ClassNotFoundException {
-        ClassLoader cl = getContextClassLoader();
-        return Class.forName(className, true, cl);
-    }
-
-    private ClassLoader getContextClassLoader() {
-        return (ClassLoader) AccessController.doPrivileged(
-            new PrivilegedAction() {
-                public Object run() {
-                    return Thread.currentThread().getContextClassLoader();
-                }
-            }
-        );
-    }
-
-    Thread createThread(final Runnable r) {
-        return (Thread) AccessController.doPrivileged(
-            new PrivilegedAction() {
-                public Object run() {
-                    return new Thread(r);
-                }
-            }
-        );
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/ldap/ext/StartTlsResponseImpl.java b/ojluni/src/main/java/com/sun/jndi/ldap/ext/StartTlsResponseImpl.java
deleted file mode 100755
index 34bc049..0000000
--- a/ojluni/src/main/java/com/sun/jndi/ldap/ext/StartTlsResponseImpl.java
+++ /dev/null
@@ -1,478 +0,0 @@
-/*
- * Copyright (c) 2000, 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.
- */
-
-package com.sun.jndi.ldap.ext;
-
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.BufferedInputStream;
-import java.io.BufferedOutputStream;
-import java.io.IOException;
-
-import java.net.Socket;
-
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-
-import java.security.Principal;
-import java.security.cert.X509Certificate;
-import java.security.cert.CertificateException;
-
-import javax.net.ssl.SSLSession;
-import javax.net.ssl.SSLSocket;
-import javax.net.ssl.SSLSocketFactory;
-import javax.net.ssl.SSLPeerUnverifiedException;
-import javax.net.ssl.SSLContext;
-import javax.net.ssl.HostnameVerifier;
-import sun.security.util.HostnameChecker;
-
-import javax.naming.*;
-import javax.naming.ldap.*;
-import com.sun.jndi.ldap.Connection;
-
-/**
- * This class implements the LDAPv3 Extended Response for StartTLS as
- * defined in
- * <a href="http://www.ietf.org/rfc/rfc2830.txt">Lightweight Directory
- * Access Protocol (v3): Extension for Transport Layer Security</a>
- *
- * The object identifier for StartTLS is 1.3.6.1.4.1.1466.20037
- * and no extended response value is defined.
- *
- *<p>
- * The Start TLS extended request and response are used to establish
- * a TLS connection over the existing LDAP connection associated with
- * the JNDI context on which <tt>extendedOperation()</tt> is invoked.
- *
- * @see StartTlsRequest
- * @author Vincent Ryan
- */
-final public class StartTlsResponseImpl extends StartTlsResponse {
-
-    private static final boolean debug = false;
-
-    /*
-     * The dNSName type in a subjectAltName extension of an X.509 certificate
-     */
-    private static final int DNSNAME_TYPE = 2;
-
-    /*
-     * The server's hostname.
-     */
-    private transient String hostname = null;
-
-    /*
-     * The LDAP socket.
-     */
-    private transient Connection ldapConnection = null;
-
-    /*
-     * The original input stream.
-     */
-    private transient InputStream originalInputStream = null;
-
-    /*
-     * The original output stream.
-     */
-    private transient OutputStream originalOutputStream = null;
-
-    /*
-     * The SSL socket.
-     */
-    private transient SSLSocket sslSocket = null;
-
-    /*
-     * The SSL socket factories.
-     */
-    private transient SSLSocketFactory defaultFactory = null;
-    private transient SSLSocketFactory currentFactory = null;
-
-    /*
-     * The list of cipher suites to be enabled.
-     */
-    private transient String[] suites = null;
-
-    /*
-     * The hostname verifier callback.
-     */
-    private transient HostnameVerifier verifier = null;
-
-    /*
-     * The flag to indicate that the TLS connection is closed.
-     */
-    private transient boolean isClosed = true;
-
-    private static final long serialVersionUID = -1126624615143411328L;
-
-    // public no-arg constructor required by JDK's Service Provider API.
-
-    public StartTlsResponseImpl() {}
-
-    /**
-     * Overrides the default list of cipher suites enabled for use on the
-     * TLS connection. The cipher suites must have already been listed by
-     * <tt>SSLSocketFactory.getSupportedCipherSuites()</tt> as being supported.
-     * Even if a suite has been enabled, it still might not be used because
-     * the peer does not support it, or because the requisite certificates
-     * (and private keys) are not available.
-     *
-     * @param suites The non-null list of names of all the cipher suites to
-     * enable.
-     * @see #negotiate
-     */
-    public void setEnabledCipherSuites(String[] suites) {
-        this.suites = suites;
-    }
-
-    /**
-     * Overrides the default hostname verifier used by <tt>negotiate()</tt>
-     * after the TLS handshake has completed. If
-     * <tt>setHostnameVerifier()</tt> has not been called before
-     * <tt>negotiate()</tt> is invoked, <tt>negotiate()</tt>
-     * will perform a simple case ignore match. If called after
-     * <tt>negotiate()</tt>, this method does not do anything.
-     *
-     * @param verifier The non-null hostname verifier callback.
-     * @see #negotiate
-     */
-    public void setHostnameVerifier(HostnameVerifier verifier) {
-        this.verifier = verifier;
-    }
-
-    /**
-     * Negotiates a TLS session using the default SSL socket factory.
-     * <p>
-     * This method is equivalent to <tt>negotiate(null)</tt>.
-     *
-     * @return The negotiated SSL session
-     * @throw IOException If an IO error was encountered while establishing
-     * the TLS session.
-     * @see #setEnabledCipherSuites
-     * @see #setHostnameVerifier
-     */
-    public SSLSession negotiate() throws IOException {
-
-        return negotiate(null);
-    }
-
-    /**
-     * Negotiates a TLS session using an SSL socket factory.
-     * <p>
-     * Creates an SSL socket using the supplied SSL socket factory and
-     * attaches it to the existing connection. Performs the TLS handshake
-     * and returns the negotiated session information.
-     * <p>
-     * If cipher suites have been set via <tt>setEnabledCipherSuites</tt>
-     * then they are enabled before the TLS handshake begins.
-     * <p>
-     * Hostname verification is performed after the TLS handshake completes.
-     * The default check performs a case insensitive match of the server's
-     * hostname against that in the server's certificate. The server's
-     * hostname is extracted from the subjectAltName in the server's
-     * certificate (if present). Otherwise the value of the common name
-     * attribute of the subject name is used. If a callback has
-     * been set via <tt>setHostnameVerifier</tt> then that verifier is used if
-     * the default check fails.
-     * <p>
-     * If an error occurs then the SSL socket is closed and an IOException
-     * is thrown. The underlying connection remains intact.
-     *
-     * @param factory The possibly null SSL socket factory to use.
-     * If null, the default SSL socket factory is used.
-     * @return The negotiated SSL session
-     * @throw IOException If an IO error was encountered while establishing
-     * the TLS session.
-     * @see #setEnabledCipherSuites
-     * @see #setHostnameVerifier
-     */
-    public SSLSession negotiate(SSLSocketFactory factory) throws IOException {
-
-        if (isClosed && sslSocket != null) {
-            throw new IOException("TLS connection is closed.");
-        }
-
-        if (factory == null) {
-            factory = getDefaultFactory();
-        }
-
-        if (debug) {
-            System.out.println("StartTLS: About to start handshake");
-        }
-
-        SSLSession sslSession = startHandshake(factory).getSession();
-
-        if (debug) {
-            System.out.println("StartTLS: Completed handshake");
-        }
-
-        SSLPeerUnverifiedException verifExcep = null;
-        try {
-            if (verify(hostname, sslSession)) {
-                isClosed = false;
-                return sslSession;
-            }
-        } catch (SSLPeerUnverifiedException e) {
-            // Save to return the cause
-            verifExcep = e;
-        }
-        if ((verifier != null) &&
-                verifier.verify(hostname, sslSession)) {
-            isClosed = false;
-            return sslSession;
-        }
-
-        // Verification failed
-        close();
-        sslSession.invalidate();
-        if (verifExcep == null) {
-            verifExcep = new SSLPeerUnverifiedException(
-                        "hostname of the server '" + hostname +
-                        "' does not match the hostname in the " +
-                        "server's certificate.");
-        }
-        throw verifExcep;
-    }
-
-    /**
-     * Closes the TLS connection gracefully and reverts back to the underlying
-     * connection.
-     *
-     * @throw IOException If an IO error was encountered while closing the
-     * TLS connection
-     */
-    public void close() throws IOException {
-
-        if (isClosed) {
-            return;
-        }
-
-        if (debug) {
-            System.out.println("StartTLS: replacing SSL " +
-                                "streams with originals");
-        }
-
-        // Replace SSL streams with the original streams
-        ldapConnection.replaceStreams(
-                        originalInputStream, originalOutputStream);
-
-        if (debug) {
-            System.out.println("StartTLS: closing SSL Socket");
-        }
-        sslSocket.close();
-
-        isClosed = true;
-    }
-
-    /**
-     * Sets the connection for TLS to use. The TLS connection will be attached
-     * to this connection.
-     *
-     * @param ldapConnection The non-null connection to use.
-     * @param hostname The server's hostname. If null, the hostname used to
-     * open the connection will be used instead.
-     */
-    public void setConnection(Connection ldapConnection, String hostname) {
-        this.ldapConnection = ldapConnection;
-        this.hostname = (hostname != null) ? hostname : ldapConnection.host;
-        originalInputStream = ldapConnection.inStream;
-        originalOutputStream = ldapConnection.outStream;
-    }
-
-    /*
-     * Returns the default SSL socket factory.
-     *
-     * @return The default SSL socket factory.
-     * @throw IOException If TLS is not supported.
-     */
-    private SSLSocketFactory getDefaultFactory() throws IOException {
-
-        if (defaultFactory != null) {
-            return defaultFactory;
-        }
-
-        return (defaultFactory =
-            (SSLSocketFactory) SSLSocketFactory.getDefault());
-    }
-
-    /*
-     * Start the TLS handshake and manipulate the input and output streams.
-     *
-     * @param factory The SSL socket factory to use.
-     * @return The SSL socket.
-     * @throw IOException If an exception occurred while performing the
-     * TLS handshake.
-     */
-    private SSLSocket startHandshake(SSLSocketFactory factory)
-        throws IOException {
-
-        if (ldapConnection == null) {
-            throw new IllegalStateException("LDAP connection has not been set."
-                + " TLS requires an existing LDAP connection.");
-        }
-
-        if (factory != currentFactory) {
-            // Create SSL socket layered over the existing connection
-            sslSocket = (SSLSocket) factory.createSocket(ldapConnection.sock,
-                ldapConnection.host, ldapConnection.port, false);
-            currentFactory = factory;
-
-            if (debug) {
-                System.out.println("StartTLS: Created socket : " + sslSocket);
-            }
-        }
-
-        if (suites != null) {
-            sslSocket.setEnabledCipherSuites(suites);
-            if (debug) {
-                System.out.println("StartTLS: Enabled cipher suites");
-            }
-        }
-
-        // Connection must be quite for handshake to proceed
-
-        try {
-            if (debug) {
-                System.out.println(
-                        "StartTLS: Calling sslSocket.startHandshake");
-            }
-            sslSocket.startHandshake();
-            if (debug) {
-                System.out.println(
-                        "StartTLS: + Finished sslSocket.startHandshake");
-            }
-
-            // Replace original streams with the new SSL streams
-            ldapConnection.replaceStreams(sslSocket.getInputStream(),
-                sslSocket.getOutputStream());
-            if (debug) {
-                System.out.println("StartTLS: Replaced IO Streams");
-            }
-
-        } catch (IOException e) {
-            if (debug) {
-                System.out.println("StartTLS: Got IO error during handshake");
-                e.printStackTrace();
-            }
-
-            sslSocket.close();
-            isClosed = true;
-            throw e;   // pass up exception
-        }
-
-        return sslSocket;
-    }
-
-    /*
-     * Verifies that the hostname in the server's certificate matches the
-     * hostname of the server.
-     * The server's first certificate is examined. If it has a subjectAltName
-     * that contains a dNSName then that is used as the server's hostname.
-     * The server's hostname may contain a wildcard for its left-most name part.
-     * Otherwise, if the certificate has no subjectAltName then the value of
-     * the common name attribute of the subject name is used.
-     *
-     * @param hostname The hostname of the server.
-     * @param session the SSLSession used on the connection to host.
-     * @return true if the hostname is verified, false otherwise.
-     */
-
-    private boolean verify(String hostname, SSLSession session)
-        throws SSLPeerUnverifiedException {
-
-        java.security.cert.Certificate[] certs = null;
-
-        // if IPv6 strip off the "[]"
-        if (hostname != null && hostname.startsWith("[") &&
-                hostname.endsWith("]")) {
-            hostname = hostname.substring(1, hostname.length() - 1);
-        }
-        try {
-            HostnameChecker checker = HostnameChecker.getInstance(
-                                                HostnameChecker.TYPE_LDAP);
-            // Use ciphersuite to determine whether Kerberos is active.
-            if (session.getCipherSuite().startsWith("TLS_KRB5")) {
-                Principal principal = getPeerPrincipal(session);
-                if (!checker.match(hostname, principal)) {
-                    throw new SSLPeerUnverifiedException(
-                        "hostname of the kerberos principal:" + principal +
-                        " does not match the hostname:" + hostname);
-                }
-            } else { // X.509
-
-                // get the subject's certificate
-                certs = session.getPeerCertificates();
-                X509Certificate peerCert;
-                if (certs[0] instanceof java.security.cert.X509Certificate) {
-                    peerCert = (java.security.cert.X509Certificate) certs[0];
-                } else {
-                    throw new SSLPeerUnverifiedException(
-                            "Received a non X509Certificate from the server");
-                }
-                checker.match(hostname, peerCert);
-            }
-
-            // no exception means verification passed
-            return true;
-        } catch (SSLPeerUnverifiedException e) {
-
-            /*
-             * The application may enable an anonymous SSL cipher suite, and
-             * hostname verification is not done for anonymous ciphers
-             */
-            String cipher = session.getCipherSuite();
-            if (cipher != null && (cipher.indexOf("_anon_") != -1)) {
-                return true;
-            }
-            throw e;
-        } catch (CertificateException e) {
-
-            /*
-             * Pass up the cause of the failure
-             */
-            throw(SSLPeerUnverifiedException)
-                new SSLPeerUnverifiedException("hostname of the server '" +
-                                hostname +
-                                "' does not match the hostname in the " +
-                                "server's certificate.").initCause(e);
-        }
-    }
-
-    /*
-     * Get the peer principal from the session
-     */
-    private static Principal getPeerPrincipal(SSLSession session)
-            throws SSLPeerUnverifiedException {
-        Principal principal;
-        try {
-            principal = session.getPeerPrincipal();
-        } catch (AbstractMethodError e) {
-            // if the JSSE provider does not support it, return null, since
-            // we need it only for Kerberos.
-            principal = null;
-        }
-        return principal;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/ldap/jndiprovider.properties b/ojluni/src/main/java/com/sun/jndi/ldap/jndiprovider.properties
deleted file mode 100755
index 8d74b97..0000000
--- a/ojluni/src/main/java/com/sun/jndi/ldap/jndiprovider.properties
+++ /dev/null
@@ -1,16 +0,0 @@
-# Provider resource file for the LDAP service provider.
-
-# Factory for the response controls supported by this release.
-java.naming.factory.control=com.sun.jndi.ldap.ctl.ResponseControlFactory
-
-# AttrsToCorba: Turn entry with corbaObject objectclass into a org.omg.CORBA.Object
-# MarshalledToObject: Turn entry with javaMarshalledObject into UnmarshalledObject
-java.naming.factory.object=com.sun.jndi.ldap.obj.AttrsToCorba:com.sun.jndi.ldap.obj.MarshalledToObject
-
-# RemoteToAttrs: Turn RMI/JRMP and RMI/IIOP object into javaMarshalledObject or
-# 		corbaObject LDAP entry
-# CorbaToAttrs: Turn CORBA object into corbaObject LDAP entry
-# RemoteToCorbaToAttrs: Turn RMI/IIOP object into corbaObject LDAP entry. 
-#  Note that there is no need to specify this in list unless RemoteToAttrs is
-#  removed because RemotetoAttrs already handles this case
-java.naming.factory.state=com.sun.jndi.ldap.obj.RemoteToAttrs:com.sun.jndi.ldap.obj.CorbaToAttrs
diff --git a/ojluni/src/main/java/com/sun/jndi/ldap/pool/ConnectionDesc.java b/ojluni/src/main/java/com/sun/jndi/ldap/pool/ConnectionDesc.java
deleted file mode 100755
index 6d9f659..0000000
--- a/ojluni/src/main/java/com/sun/jndi/ldap/pool/ConnectionDesc.java
+++ /dev/null
@@ -1,160 +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.jndi.ldap.pool;
-
-/**
- * Represents a description of PooledConnection in Connections.
- * Contains a PooledConnection, its state (busy, idle, expired), and idle time.
- *
- * Any access or update to a descriptor's state is synchronized.
- *
- * @author Rosanna Lee
- */
-final class ConnectionDesc {
-    private final static boolean debug = Pool.debug;
-
-    // Package private because used by Pool.showStats()
-    static final byte BUSY = (byte)0;
-    static final byte IDLE = (byte)1;
-    static final byte EXPIRED = (byte)2;
-
-    final private PooledConnection conn;
-
-    private byte state = IDLE;  // initial state
-    private long idleSince;
-    private long useCount = 0;  // for stats & debugging only
-
-    ConnectionDesc(PooledConnection conn) {
-        this.conn = conn;
-    }
-
-    ConnectionDesc(PooledConnection conn, boolean use) {
-        this.conn = conn;
-        if (use) {
-            state = BUSY;
-            ++useCount;
-        }
-    }
-
-    /**
-     * Two desc are equal if their PooledConnections are the same.
-     * This is useful when searching for a ConnectionDesc using only its
-     * PooledConnection.
-     */
-    public boolean equals(Object obj) {
-        return obj != null
-            && obj instanceof ConnectionDesc
-            && ((ConnectionDesc)obj).conn == conn;
-    }
-
-    /**
-     * Hashcode is that of PooledConnection to facilitate
-     * searching for a ConnectionDesc using only its PooledConnection.
-     */
-    public int hashCode() {
-        return conn.hashCode();
-    }
-
-    /**
-     * Changes the state of a ConnectionDesc from BUSY to IDLE and
-     * records the current time so that we will know how long it has been idle.
-     * @return true if state change occurred.
-     */
-    synchronized boolean release() {
-        d("release()");
-        if (state == BUSY) {
-            state = IDLE;
-
-            idleSince = System.currentTimeMillis();
-            return true;  // Connection released, ready for reuse
-        } else {
-            return false; // Connection wasn't busy to begin with
-        }
-    }
-
-    /**
-     * If ConnectionDesc is IDLE, change its state to BUSY and return
-     * its connection.
-     *
-     * @return ConnectionDesc's PooledConnection if it was idle; null otherwise.
-     */
-    synchronized PooledConnection tryUse() {
-        d("tryUse()");
-
-        if (state == IDLE) {
-            state = BUSY;
-            ++useCount;
-            return conn;
-        }
-
-        return null;
-    }
-
-    /**
-     * If ConnectionDesc is IDLE and has expired, close the corresponding
-     * PooledConnection.
-     *
-     * @param threshold a connection that has been idle before this time
-     *     have expired.
-     *
-     * @return true if entry is idle and has expired; false otherwise.
-     */
-    synchronized boolean expire(long threshold) {
-        if (state == IDLE && idleSince < threshold) {
-
-            d("expire(): expired");
-
-            state = EXPIRED;
-            conn.closeConnection();  // Close real connection
-
-            return true;  // Expiration successful
-        } else {
-            d("expire(): not expired");
-            return false; // Expiration did not occur
-        }
-    }
-
-    public String toString() {
-        return conn.toString() + " " +
-            (state == BUSY ? "busy" : (state == IDLE ? "idle" : "expired"));
-    }
-
-    // Used by Pool.showStats()
-    int getState() {
-        return state;
-    }
-
-    // Used by Pool.showStats()
-    long getUseCount() {
-        return useCount;
-    }
-
-    private void d(String msg) {
-        if (debug) {
-            System.err.println("ConnectionDesc." + msg + " " + toString());
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/ldap/pool/Connections.java b/ojluni/src/main/java/com/sun/jndi/ldap/pool/Connections.java
deleted file mode 100755
index 2ee3062..0000000
--- a/ojluni/src/main/java/com/sun/jndi/ldap/pool/Connections.java
+++ /dev/null
@@ -1,387 +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.jndi.ldap.pool;
-
-import java.util.ArrayList; // JDK 1.2
-import java.util.List;
-import java.util.Iterator;
-
-import java.lang.ref.Reference;
-import java.lang.ref.SoftReference;
-
-import javax.naming.NamingException;
-import javax.naming.InterruptedNamingException;
-import javax.naming.CommunicationException;
-
-/**
- * Represents a list of PooledConnections (actually, ConnectionDescs) with the
- * same pool id.
- * The list starts out with an initial number of connections.
- * Additional PooledConnections are created lazily upon demand.
- * The list has a maximum size. When the number of connections
- * reaches the maximum size, a request for a PooledConnection blocks until
- * a connection is returned to the list. A maximum size of zero means that
- * there is no maximum: connection creation will be attempted when
- * no idle connection is available.
- *
- * The list may also have a preferred size. If the current list size
- * is less than the preferred size, a request for a connection will result in
- * a PooledConnection being created (even if an idle connection is available).
- * If the current list size is greater than the preferred size,
- * a connection being returned to the list will be closed and removed from
- * the list. A preferred size of zero means that there is no preferred size:
- * connections are created only when no idle connection is available and
- * a connection being returned to the list is not closed. Regardless of the
- * preferred size, connection creation always observes the maximum size:
- * a connection won't be created if the list size is at or exceeds the
- * maximum size.
- *
- * @author Rosanna Lee
- */
-
-// Package private: accessed only by Pool
-final class Connections implements PoolCallback {
-    private static final boolean debug = Pool.debug;
-    private static final boolean trace =
-        com.sun.jndi.ldap.LdapPoolManager.trace;
-    private static final int DEFAULT_SIZE = 10;
-
-    final private int maxSize;
-    final private int prefSize;
-    final private List conns;
-
-    private boolean closed = false;   // Closed for business
-    private Reference ref; // maintains reference to id to prevent premature GC
-
-    /**
-     * @param id the identity (connection request) of the connections in the list
-     * @param initSize the number of connections to create initially
-     * @param prefSize the preferred size of the pool. The pool will try
-     * to maintain a pool of this size by creating and closing connections
-     * as needed.
-     * @param maxSize the maximum size of the pool. The pool will not exceed
-     * this size. If the pool is at this size, a request for a connection
-     * will block until an idle connection is released to the pool or
-     * when one is removed.
-     * @param factory The factory responsible for creating a connection
-     */
-    Connections(Object id, int initSize, int prefSize, int maxSize,
-        PooledConnectionFactory factory) throws NamingException {
-
-        this.maxSize = maxSize;
-        if (maxSize > 0) {
-            // prefSize and initSize cannot exceed specified maxSize
-            this.prefSize = Math.min(prefSize, maxSize);
-            initSize = Math.min(initSize, maxSize);
-        } else {
-            this.prefSize = prefSize;
-        }
-        conns = new ArrayList(maxSize > 0 ? maxSize : DEFAULT_SIZE);
-
-        // Maintain soft ref to id so that this Connections' entry in
-        // Pool doesn't get GC'ed prematurely
-        ref = new SoftReference(id);
-
-        d("init size=", initSize);
-        d("max size=", maxSize);
-        d("preferred size=", prefSize);
-
-        // Create initial connections
-        PooledConnection conn;
-        for (int i = 0; i < initSize; i++) {
-            conn = factory.createPooledConnection(this);
-            td("Create ", conn ,factory);
-            conns.add(new ConnectionDesc(conn)); // Add new idle conn to pool
-        }
-    }
-
-    /**
-     * Retrieves a PooledConnection from this list of connections.
-     * Use an existing one if one is idle, or create one if the list's
-     * max size hasn't been reached. If max size has been reached, wait
-     * for a PooledConnection to be returned, or one to be removed (thus
-     * not reaching the max size any longer).
-     *
-     * @param timeout if > 0, msec to wait until connection is available
-     * @param factory creates the PooledConnection if one needs to be created
-     *
-     * @return A non-null PooledConnection
-     * @throws NamingException PooledConnection cannot be created, because this
-     * thread was interrupted while it waited for an available connection,
-     * or if it timed out while waiting, or the creation of a connection
-     * resulted in an error.
-     */
-    synchronized PooledConnection get(long timeout,
-        PooledConnectionFactory factory) throws NamingException {
-        PooledConnection conn;
-        long start = (timeout > 0 ? System.currentTimeMillis() : 0);
-        long waittime = timeout;
-
-        d("get(): before");
-        while ((conn = getOrCreateConnection(factory)) == null) {
-            if (timeout > 0 && waittime <= 0) {
-                throw new CommunicationException(
-                    "Timeout exceeded while waiting for a connection: " +
-                    timeout + "ms");
-            }
-            try {
-                d("get(): waiting");
-                if (waittime > 0) {
-                    wait(waittime);  // Wait until one is released or removed
-                } else {
-                    wait();
-                }
-            } catch (InterruptedException e) {
-                throw new InterruptedNamingException(
-                    "Interrupted while waiting for a connection");
-            }
-            // Check whether we timed out
-            if (timeout > 0) {
-                long now = System.currentTimeMillis();
-                waittime = timeout - (now - start);
-            }
-        }
-
-        d("get(): after");
-        return conn;
-    }
-
-    /**
-     * Retrieves an idle connection from this list if one is available.
-     * If none is available, create a new one if maxSize hasn't been reached.
-     * If maxSize has been reached, return null.
-     * Always called from a synchronized method.
-     */
-    private PooledConnection getOrCreateConnection(
-        PooledConnectionFactory factory) throws NamingException {
-
-        int size = conns.size(); // Current number of idle/nonidle conns
-        PooledConnection conn = null;
-
-        if (prefSize <= 0 || size >= prefSize) {
-            // If no prefSize specified, or list size already meets or
-            // exceeds prefSize, then first look for an idle connection
-            ConnectionDesc entry;
-            for (int i = 0; i < size; i++) {
-                entry = (ConnectionDesc) conns.get(i);
-                if ((conn = entry.tryUse()) != null) {
-                    d("get(): use ", conn);
-                    td("Use ", conn);
-                    return conn;
-                }
-            }
-        }
-
-        // Check if list size already at maxSize specified
-        if (maxSize > 0 && size >= maxSize) {
-            return null;   // List size is at limit; cannot create any more
-        }
-
-        conn = factory.createPooledConnection(this);
-        td("Create and use ", conn, factory);
-        conns.add(new ConnectionDesc(conn, true)); // Add new conn to pool
-
-        return conn;
-    }
-
-    /**
-     * Releases connection back into list.
-     * If the list size is below prefSize, the connection may be reused.
-     * If the list size exceeds prefSize, then the connection is closed
-     * and removed from the list.
-     *
-     * public because implemented as part of PoolCallback.
-     */
-    public synchronized boolean releasePooledConnection(PooledConnection conn) {
-        ConnectionDesc entry;
-        int loc = conns.indexOf(entry=new ConnectionDesc(conn));
-
-        d("release(): ", conn);
-
-        if (loc >= 0) {
-            // Found entry
-
-            if (closed || (prefSize > 0 && conns.size() > prefSize)) {
-                // If list size exceeds prefSize, close connection
-
-                d("release(): closing ", conn);
-                td("Close ", conn);
-
-                // size must be >= 2 so don't worry about empty list
-                conns.remove(entry);
-                conn.closeConnection();
-
-            } else {
-                d("release(): release ", conn);
-                td("Release ", conn);
-
-                // Get ConnectionDesc from list to get correct state info
-                entry = (ConnectionDesc) conns.get(loc);
-                // Return connection to list, ready for reuse
-                entry.release();
-            }
-            notifyAll();
-            d("release(): notify");
-            return true;
-        } else {
-            return false;
-        }
-    }
-
-    /**
-     * Removes PooledConnection from list of connections.
-     * The closing of the connection is separate from this method.
-     * This method is called usually when the caller encouters an error
-     * when using the connection and wants it removed from the pool.
-     *
-     * @return true if conn removed; false if it was not in pool
-     *
-     * public because implemented as part of PoolCallback.
-     */
-    public synchronized boolean removePooledConnection(PooledConnection conn) {
-        if (conns.remove(new ConnectionDesc(conn))) {
-            d("remove(): ", conn);
-
-            notifyAll();
-
-            d("remove(): notify");
-            td("Remove ", conn);
-
-            if (conns.isEmpty()) {
-                // Remove softref to make pool entry eligible for GC.
-                // Once ref has been removed, it cannot be reinstated.
-                ref = null;
-            }
-
-            return true;
-        } else {
-            d("remove(): not found ", conn);
-            return false;
-        }
-    }
-
-    /**
-     * Goes through all entries in list, removes and closes ones that have been
-     * idle before threshold.
-     *
-     * @param threshold an entry idle since this time has expired.
-     * @return true if no more connections in list
-     */
-    synchronized boolean expire(long threshold) {
-        Iterator iter = conns.iterator();
-        ConnectionDesc entry;
-        while (iter.hasNext()) {
-            entry = (ConnectionDesc) iter.next();
-            if (entry.expire(threshold)) {
-                d("expire(): removing ", entry);
-                td("Expired ", entry);
-
-                iter.remove();  // remove from pool
-
-                // Don't need to call notify() because we're
-                // removing only idle connections. If there were
-                // idle connections, then there should be no waiters.
-            }
-        }
-        return conns.isEmpty();  // whether whole list has 'expired'
-    }
-
-    /**
-     * Called when this instance of Connections has been removed from Pool.
-     * This means that no one can get any pooled connections from this
-     * Connections any longer. Expire all idle connections as of 'now'
-     * and leave indicator so that any in-use connections will be closed upon
-     * their return.
-     */
-    synchronized void close() {
-        expire(System.currentTimeMillis());     // Expire idle connections
-        closed = true;   // Close in-use connections when they are returned
-    }
-
-    String getStats() {
-        int idle = 0;
-        int busy = 0;
-        int expired = 0;
-        long use = 0;
-        int len;
-
-        synchronized (this) {
-            len = conns.size();
-
-            ConnectionDesc entry;
-            for (int i = 0; i < len; i++) {
-                entry = (ConnectionDesc) conns.get(i);
-                use += entry.getUseCount();
-                switch (entry.getState()) {
-                case ConnectionDesc.BUSY:
-                    ++busy;
-                    break;
-                case ConnectionDesc.IDLE:
-                    ++idle;
-                    break;
-                case ConnectionDesc.EXPIRED:
-                    ++expired;
-                }
-            }
-        }
-        return "size=" + len + "; use=" + use + "; busy=" + busy
-            + "; idle=" + idle + "; expired=" + expired;
-    }
-
-    private void d(String msg, Object o1) {
-        if (debug) {
-            d(msg + o1);
-        }
-    }
-
-    private void d(String msg, int i) {
-        if (debug) {
-            d(msg + i);
-        }
-    }
-
-    private void d(String msg) {
-        if (debug) {
-            System.err.println(this + "." + msg + "; size: " + conns.size());
-        }
-    }
-
-    private void td(String msg, Object o1, Object o2) {
-        if (trace) { // redo test to avoid object creation
-            td(msg + o1 + "[" + o2 + "]");
-        }
-    }
-    private void td(String msg, Object o1) {
-        if (trace) { // redo test to avoid object creation
-            td(msg + o1);
-        }
-    }
-    private void td(String msg) {
-        if (trace) {
-            System.err.println(msg);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/ldap/pool/ConnectionsRef.java b/ojluni/src/main/java/com/sun/jndi/ldap/pool/ConnectionsRef.java
deleted file mode 100755
index 84cd606..0000000
--- a/ojluni/src/main/java/com/sun/jndi/ldap/pool/ConnectionsRef.java
+++ /dev/null
@@ -1,58 +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.
- */
-
-package com.sun.jndi.ldap.pool;
-
-/**
- * Is a reference to Connections that is stored in Pool.
- * This is an intermediate object that is outside of the circular
- * reference loop of
- *  com.sun.jndi.ldap.Connection <-> com.sun.jndi.ldap.LdapClient
- *    <-> com.sun.jndi.ldap.pool.Connections
- *
- * Because Connection is a daemon thread, it will keep LdapClient
- * alive until LdapClient closes Connection. This will in turn
- * keep Connections alive. So even when Connections is removed
- * from (the WeakHashMap of) Pool, it won't be finalized.
- * ConnectionsRef acts as Connections's finalizer.
- *
- * Without connection pooling, com.sun.jndi.ldap.LdapCtx's finalize()
- * closes LdapClient, which in turn closes Connection.
- * With connection pooling, ConnectionsRef's finalize() calls
- * Connections.close(), which in turn will close all idle connections
- * and mark Connections such that in-use connections will be closed
- * when they are returned to the pool.
- */
-final class ConnectionsRef {
-    final private Connections conns;
-
-    ConnectionsRef(Connections conns) {
-        this.conns = conns;
-    }
-
-    Connections getConnections() {
-        return conns;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/ldap/pool/ConnectionsWeakRef.java b/ojluni/src/main/java/com/sun/jndi/ldap/pool/ConnectionsWeakRef.java
deleted file mode 100755
index 24fc081..0000000
--- a/ojluni/src/main/java/com/sun/jndi/ldap/pool/ConnectionsWeakRef.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-package com.sun.jndi.ldap.pool;
-
-import java.lang.ref.WeakReference;
-import java.lang.ref.ReferenceQueue;
-
-/*
- * This class defines a WeakReference to the ConnectionRef (the referent).
- *
- * The ConnectionRef enables to break the reference
- * cycle between Connection, LdapClient, Connections and ConnectionDesc,
- * shown in the figure below.
- *
- *        -------> Connections -----> ConnectionDesc
- *        |              ^                  |
- *        |              |                  |
- *        |              |                  |
- * ConnectionsRef    LdapClient <------------
- *        ^              |   ^
- *        :              |   |
- *        :              v   |
- * ConnectionsWeakRef  Connection
- *
- * The ConnectionsRef is for cleaning up the resources held by the
- * Connection thread by making them available to the GC. The pool
- * uses ConnectionRef to hold the pooled resources.
- *
- * This class in turn holds a WeakReference with a ReferenceQueue to the
- * ConnectionRef to track when the ConnectionRef becomes ready
- * for getting GC'ed. It extends from WeakReference in order to hold a
- * reference to Connections used for closing (which in turn terminates
- * the Connection thread) it by monitoring the ReferenceQueue.
- */
-class ConnectionsWeakRef extends WeakReference {
-
-    private final Connections conns;
-
-    ConnectionsWeakRef (ConnectionsRef connsRef, ReferenceQueue queue) {
-        super(connsRef, queue);
-        this.conns = connsRef.getConnections();
-    }
-
-    Connections getConnections() {
-        return conns;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/ldap/pool/Pool.java b/ojluni/src/main/java/com/sun/jndi/ldap/pool/Pool.java
deleted file mode 100755
index 2274bf3..0000000
--- a/ojluni/src/main/java/com/sun/jndi/ldap/pool/Pool.java
+++ /dev/null
@@ -1,243 +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.
- */
-
-package com.sun.jndi.ldap.pool;
-
-import java.util.Map;
-import java.util.WeakHashMap;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.Set;
-import java.util.LinkedList;
-
-import java.io.PrintStream;
-import java.lang.ref.Reference;
-import java.lang.ref.ReferenceQueue;
-import javax.naming.NamingException;
-
-/**
- * A map of pool ids to Connections.
- * Key is an object that uniquely identifies a PooledConnection request
- * (typically information needed to create the connection).
- * The definitions of the key's equals() and hashCode() methods are
- * vital to its unique identification in a Pool.
- *
- * Value is a ConnectionsRef, which is a reference to Connections,
- * a list of equivalent connections.
- *
- * Supports methods that
- * - retrieves (or creates as necessary) a connection from the pool
- * - removes expired connections from the pool
- *
- * Connections cleanup:
- * A WeakHashMap is used for mapping the pool ids and Connections.
- * A SoftReference from the value to the key is kept to hold the map
- * entry as long as possible. This allows the GC to remove Connections
- * from the Pool under situations of VM running out of resources.
- * To take an appropriate action of 'closing the connections' before the GC
- * reclaims the ConnectionsRef objects, the ConnectionsRef objects are made
- * weakly reachable through a list of weak references registered with
- * a reference queue.
- * Upon an entry gets removed from the WeakHashMap, the ConnectionsRef (value
- * in the map) object is weakly reachable. When another sweep of
- * clearing the weak references is made by the GC it puts the corresponding
- * ConnectionsWeakRef object into the reference queue.
- * The reference queue is monitored lazily for reclaimable Connections
- * whenever a pooled connection is requested or a call to remove the expired
- * connections is made. The monitoring is done regularly when idle connection
- * timeout is set as the PoolCleaner removes expired connections periodically.
- * As determined by the experiements, cleanup of resources using the
- * ReferenceQueue mechanism is reliable and has immidiate effect than the
- * finalizer approach.
- *
- * @author Rosanna Lee
- */
-
-final public class Pool {
-
-    static final boolean debug = com.sun.jndi.ldap.LdapPoolManager.debug;
-
-    /*
-     * Used for connections cleanup
-     */
-    private static final ReferenceQueue queue = new ReferenceQueue();
-    private static final Collection weakRefs =
-                Collections.synchronizedList(new LinkedList());
-
-    final private int maxSize;    // max num of identical conn per pool
-    final private int prefSize;   // preferred num of identical conn per pool
-    final private int initSize;   // initial number of identical conn to create
-    final private Map map;
-
-    public Pool(int initSize, int prefSize, int maxSize) {
-        map = new WeakHashMap();
-        this.prefSize = prefSize;
-        this.maxSize = maxSize;
-        this.initSize = initSize;
-    }
-
-    /**
-     * Gets a pooled connection for id. The pooled connection might be
-     * newly created, as governed by the maxSize and prefSize settings.
-     * If a pooled connection is unavailable and cannot be created due
-     * to the maxSize constraint, this call blocks until the constraint
-     * is removed or until 'timeout' ms has elapsed.
-     *
-     * @param id identity of the connection to get
-     * @param timeout the number of milliseconds to wait before giving up
-     * @param factory the factory to use for creating the connection if
-     *          creation is necessary
-     * @return a pooled connection
-     * @throws NamingException the connection could not be created due to
-     *                          an error.
-     */
-    public PooledConnection getPooledConnection(Object id, long timeout,
-        PooledConnectionFactory factory) throws NamingException {
-
-        d("get(): ", id);
-        d("size: ", map.size());
-
-        expungeStaleConnections();
-
-        Connections conns;
-        synchronized (map) {
-            conns = getConnections(id);
-            if (conns == null) {
-                d("get(): creating new connections list for ", id);
-
-                // No connections for this id so create a new list
-                conns = new Connections(id, initSize, prefSize, maxSize,
-                    factory);
-                ConnectionsRef connsRef = new ConnectionsRef(conns);
-                map.put(id, connsRef);
-
-                // Create a weak reference to ConnectionsRef
-                Reference weakRef = new ConnectionsWeakRef(connsRef, queue);
-
-                // Keep the weak reference through the element of a linked list
-                weakRefs.add(weakRef);
-            }
-        }
-
-        d("get(): size after: ", map.size());
-
-        return conns.get(timeout, factory); // get one connection from list
-    }
-
-    private Connections getConnections(Object id) {
-        ConnectionsRef ref = (ConnectionsRef) map.get(id);
-        return (ref != null) ? ref.getConnections() : null;
-    }
-
-    /**
-     * Goes through the connections in this Pool and expires ones that
-     * have been idle before 'threshold'. An expired connection is closed
-     * and then removed from the pool (removePooledConnection() will eventually
-     * be called, and the list of pools itself removed if it becomes empty).
-     *
-     * @param threshold connections idle before 'threshold' should be closed
-     *          and removed.
-     */
-    public void expire(long threshold) {
-        synchronized (map) {
-            Collection coll = map.values();
-            Iterator iter = coll.iterator();
-            Connections conns;
-            while (iter.hasNext()) {
-                conns = ((ConnectionsRef) (iter.next())).getConnections();
-                if (conns.expire(threshold)) {
-                    d("expire(): removing ", conns);
-                    iter.remove();
-                }
-            }
-        }
-        expungeStaleConnections();
-    }
-
-    /*
-     * Closes the connections contained in the ConnectionsRef object that
-     * is going to be reclaimed by the GC. Called by getPooledConnection()
-     * and expire() methods of this class.
-     */
-    private static void expungeStaleConnections() {
-        ConnectionsWeakRef releaseRef = null;
-        while ((releaseRef = (ConnectionsWeakRef) queue.poll())
-                                        != null) {
-            Connections conns = releaseRef.getConnections();
-
-            if (debug) {
-                System.err.println(
-                        "weak reference cleanup: Closing Connections:" + conns);
-            }
-
-            // cleanup
-            conns.close();
-            weakRefs.remove(releaseRef);
-            releaseRef.clear();
-         }
-    }
-
-
-    public void showStats(PrintStream out) {
-        Map.Entry entry;
-        Object id;
-        Connections conns;
-
-        out.println("===== Pool start ======================");
-        out.println("maximum pool size: " + maxSize);
-        out.println("preferred pool size: " + prefSize);
-        out.println("initial pool size: " + initSize);
-        out.println("current pool size: " + map.size());
-
-        Set entries = map.entrySet();
-        Iterator iter = entries.iterator();
-
-        while (iter.hasNext()) {
-            entry = (Map.Entry) iter.next();
-            id = entry.getKey();
-            conns = ((ConnectionsRef) entry.getValue()).getConnections();
-            out.println("   " + id + ":" + conns.getStats());
-        }
-
-        out.println("====== Pool end =====================");
-    }
-
-    public String toString() {
-        return super.toString() + " " + map.toString();
-    }
-
-    private void d(String msg, int i) {
-        if (debug) {
-            System.err.println(this + "." + msg + i);
-        }
-    }
-
-    private void d(String msg, Object obj) {
-        if (debug) {
-            System.err.println(this + "." + msg + obj);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/ldap/pool/PoolCallback.java b/ojluni/src/main/java/com/sun/jndi/ldap/pool/PoolCallback.java
deleted file mode 100755
index 9f70ee7..0000000
--- a/ojluni/src/main/java/com/sun/jndi/ldap/pool/PoolCallback.java
+++ /dev/null
@@ -1,63 +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.jndi.ldap.pool;
-
-/**
- * Represents a callback used to release or remove a PooledConnection back
- * into the pool.
- *
- * A pooled connection typically has a close method that its clients
- * use to indicate that they no longer need the connection. This close
- * method should use the methods defined in this interface to
- * interact with the connection pool to return the connection
- * to the pool.
- *
- * The methods in this interface are typically invoked by a PooledConnection.
- * The methods in this interface are typically implemented by the connection
- * pool manager.
- *
- * @author Rosanna Lee
- */
-public interface PoolCallback {
-    /**
-     * Releases a useable connection back to the pool.
-     *
-     * @param conn The connection to release.
-     * @return true if the connection released; false if the connection
-     * is no longer in the pool.
-     */
-    public abstract boolean releasePooledConnection(PooledConnection conn);
-
-    /**
-     * Removes a connection from the pool. The connection should not be reused.
-     * The physical connection should have already been closed.
-     *
-     * @param conn The connection to return.
-     * @return true if the connection was removed; false if the connection
-     * is no longer in the pool prior to removal.
-     */
-    public abstract boolean removePooledConnection(PooledConnection conn);
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/ldap/pool/PoolCleaner.java b/ojluni/src/main/java/com/sun/jndi/ldap/pool/PoolCleaner.java
deleted file mode 100755
index a318a7c..0000000
--- a/ojluni/src/main/java/com/sun/jndi/ldap/pool/PoolCleaner.java
+++ /dev/null
@@ -1,68 +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.jndi.ldap.pool;
-
-/**
- * Thread that wakes up periodically and closes expired, unused connections.
- *
- * @author Rosanna Lee
- */
-final public class PoolCleaner extends Thread {
-    final private Pool[] pools;
-    final private long period;
-
-    /**
-     * @param period ms to wait between cleaning
-     * @param pools non-null array of Pools to clean
-     */
-    public PoolCleaner(long period, Pool[] pools) {
-        super();
-        this.period = period;
-        this.pools = (Pool[]) pools.clone();
-        setDaemon(true);
-    }
-
-    public void run() {
-        long threshold;
-        while (true) {
-            synchronized (this) {
-                // Wait for duration of period ms
-                try {
-                    wait(period);
-                } catch (InterruptedException ignore) {
-                }
-
-                // Connections idle since threshold have expired
-                threshold = System.currentTimeMillis() - period;
-                for (int i = 0; i < pools.length; i++) {
-                    if (pools[i] != null) {
-                        pools[i].expire(threshold);
-                    }
-                }
-            }
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/ldap/pool/PooledConnection.java b/ojluni/src/main/java/com/sun/jndi/ldap/pool/PooledConnection.java
deleted file mode 100755
index 7beb598..0000000
--- a/ojluni/src/main/java/com/sun/jndi/ldap/pool/PooledConnection.java
+++ /dev/null
@@ -1,53 +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.jndi.ldap.pool;
-
-/**
- * Represents a connection that is managed in a pool. The connection
- * may be reused by multiple clients.
- *
- * A pooled connection typically has a close method that its clients
- * use to indicate that they no longer need the connection. This close
- * method would interact with the connection pool to return the connection
- * to the pool (see PoolCallback).
- *<p>
- * The pooled connection also needs to provide a close method that the
- * connection pool can use to physically close the connection.
- * The pool might need to physically close the connection as determined
- * by the pool's policy (for example, to manage the pool size or idle
- * connections). This second close method should *not* use PoolCallback
- * methods. It should only do what is required to close the physical
- * connection.
- *
- * @author Rosanna Lee
- */
-public interface PooledConnection {
-
-    /**
-     * Closes the physical connection.
-     */
-    public abstract void closeConnection();
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/ldap/pool/PooledConnectionFactory.java b/ojluni/src/main/java/com/sun/jndi/ldap/pool/PooledConnectionFactory.java
deleted file mode 100755
index 3aa4176..0000000
--- a/ojluni/src/main/java/com/sun/jndi/ldap/pool/PooledConnectionFactory.java
+++ /dev/null
@@ -1,47 +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.jndi.ldap.pool;
-import javax.naming.NamingException;
-
-/**
- * Represents a factory that creates PooledConnection.
- *
- * The user of the connection pool should provide an implementation of this
- * interface and pass it to the Pool.getPooledConnection() method.
- * The implementation of the factory should contain all the information
- * necessary to create a PooledConnection.
- *
- * @author Rosanna Lee
- */
-public interface PooledConnectionFactory {
-    /**
-     * Creates a pooled connection.
-     * @param pcb callback responsible for removing and releasing the pooled
-     * connection from the pool.
-     */
-    public abstract PooledConnection createPooledConnection(PoolCallback pcb)
-        throws NamingException;
-};
diff --git a/ojluni/src/main/java/com/sun/jndi/ldap/sasl/DefaultCallbackHandler.java b/ojluni/src/main/java/com/sun/jndi/ldap/sasl/DefaultCallbackHandler.java
deleted file mode 100755
index bc0940a..0000000
--- a/ojluni/src/main/java/com/sun/jndi/ldap/sasl/DefaultCallbackHandler.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-package com.sun.jndi.ldap.sasl;
-
-import javax.security.auth.callback.*;
-import javax.security.sasl.RealmCallback;
-import javax.security.sasl.RealmChoiceCallback;
-import java.io.IOException;
-
-/**
- * DefaultCallbackHandler for satisfying NameCallback and
- * PasswordCallback for an LDAP client.
- * NameCallback is used for getting the authentication ID and is
- * gotten from the java.naming.security.principal property.
- * PasswordCallback is gotten from the java.naming.security.credentials
- * property and must be of type String, char[] or byte[].
- * If byte[], it is assumed to have UTF-8 encoding.
- *
- * If the caller of getPassword() will be using the password as
- * a byte array, then it should encode the char[] array returned by
- * getPassword() into a byte[] using UTF-8.
- *
- * @author Rosanna Lee
- */
-final class DefaultCallbackHandler implements CallbackHandler {
-    private char[] passwd;
-    private String authenticationID;
-    private String authRealm;
-
-    DefaultCallbackHandler(String principal, Object cred, String realm)
-        throws IOException {
-        authenticationID = principal;
-        authRealm = realm;
-        if (cred instanceof String) {
-            passwd = ((String)cred).toCharArray();
-        } else if (cred instanceof char[]) {
-            passwd = (char[])((char[])cred).clone();
-        } else if (cred != null) {
-            // assume UTF-8 encoding
-            String orig = new String((byte[])cred, "UTF8");
-            passwd = orig.toCharArray();
-        }
-    }
-
-    public void handle(Callback[] callbacks)
-        throws IOException, UnsupportedCallbackException {
-            for (int i = 0; i < callbacks.length; i++) {
-                if (callbacks[i] instanceof NameCallback) {
-                    ((NameCallback)callbacks[i]).setName(authenticationID);
-
-                } else if (callbacks[i] instanceof PasswordCallback) {
-                    ((PasswordCallback)callbacks[i]).setPassword(passwd);
-
-                } else if (callbacks[i] instanceof RealmChoiceCallback) {
-                    /* Deals with a choice of realms */
-                    String[] choices =
-                        ((RealmChoiceCallback)callbacks[i]).getChoices();
-                    int selected = 0;
-
-                    if (authRealm != null && authRealm.length() > 0) {
-                        selected = -1; // no realm chosen
-                        for (int j = 0; j < choices.length; j++) {
-                            if (choices[j].equals(authRealm)) {
-                                selected = j;
-                            }
-                        }
-                        if (selected == -1) {
-                            StringBuffer allChoices = new StringBuffer();
-                            for (int j = 0; j <  choices.length; j++) {
-                                allChoices.append(choices[j] + ",");
-                            }
-                            throw new IOException("Cannot match " +
-                                "'java.naming.security.sasl.realm' property value, '" +
-                                authRealm + "' with choices " + allChoices +
-                                "in RealmChoiceCallback");
-                        }
-                    }
-
-                    ((RealmChoiceCallback)callbacks[i]).setSelectedIndex(selected);
-
-                } else if (callbacks[i] instanceof RealmCallback) {
-                    /* 1 or 0 realms specified in challenge */
-                    RealmCallback rcb = (RealmCallback) callbacks[i];
-                    if (authRealm != null) {
-                        rcb.setText(authRealm);  // Use what user supplied
-                    } else {
-                        String defaultRealm = rcb.getDefaultText();
-                        if (defaultRealm != null) {
-                            rcb.setText(defaultRealm); // Use what server supplied
-                        } else {
-                            rcb.setText("");  // Specify no realm
-                        }
-                    }
-                } else {
-                    throw new UnsupportedCallbackException(callbacks[i]);
-                }
-            }
-    }
-
-    void clearPassword() {
-        if (passwd != null) {
-            for (int i = 0; i < passwd.length; i++) {
-                passwd[i] = '\0';
-            }
-            passwd = null;
-        }
-    }
-
-    protected void finalize() throws Throwable {
-        clearPassword();
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/ldap/sasl/LdapSasl.java b/ojluni/src/main/java/com/sun/jndi/ldap/sasl/LdapSasl.java
deleted file mode 100755
index 769a08f..0000000
--- a/ojluni/src/main/java/com/sun/jndi/ldap/sasl/LdapSasl.java
+++ /dev/null
@@ -1,200 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-package com.sun.jndi.ldap.sasl;
-
-import java.io.*;
-import java.util.Vector;
-import java.util.Hashtable;
-import java.util.StringTokenizer;
-
-import javax.naming.AuthenticationException;
-import javax.naming.AuthenticationNotSupportedException;
-import javax.naming.NamingException;
-
-import javax.naming.ldap.Control;
-
-import javax.security.auth.callback.CallbackHandler;
-import javax.security.sasl.*;
-import com.sun.jndi.ldap.Connection;
-import com.sun.jndi.ldap.LdapClient;
-import com.sun.jndi.ldap.LdapResult;
-
-/**
-  * Handles SASL support.
-  *
-  * @author Vincent Ryan
-  * @author Rosanna Lee
-  */
-
-final public class LdapSasl {
-    // SASL stuff
-    private static final String SASL_CALLBACK = "java.naming.security.sasl.callback";
-    private static final String SASL_AUTHZ_ID =
-        "java.naming.security.sasl.authorizationId";
-    private static final String SASL_REALM =
-        "java.naming.security.sasl.realm";
-
-    private static final int LDAP_SUCCESS = 0;
-    private static final int LDAP_SASL_BIND_IN_PROGRESS = 14;   // LDAPv3
-
-    private LdapSasl() {
-    }
-
-    /**
-     * Performs SASL bind.
-     * Creates a SaslClient by using a default CallbackHandler
-     * that uses the Context.SECURITY_PRINCIPAL and Context.SECURITY_CREDENTIALS
-     * properties to satisfy the callbacks, and by using the
-     * SASL_AUTHZ_ID property as the authorization id. If the SASL_AUTHZ_ID
-     * property has not been set, Context.SECURITY_PRINCIPAL is used.
-     * If SASL_CALLBACK has been set, use that instead of the default
-     * CallbackHandler.
-     *<p>
-     * If bind is successful and the selected SASL mechanism has a security
-     * layer, set inStream and outStream to be filter streams that use
-     * the security layer. These will be used for subsequent communication
-     * with the server.
-     *<p>
-     * @param conn The non-null connection to use for sending an LDAP BIND
-     * @param server Non-null string name of host to connect to
-     * @param dn Non-null DN to bind as; also used as authentication ID
-     * @param pw Possibly null password; can be byte[], char[] or String
-     * @param authMech A non-null space-separated list of SASL authentication
-     *        mechanisms.
-     * @param env The possibly null environment of the context, possibly containing
-     *        properties for used by SASL mechanisms
-     * @param bindCtls The possibly null controls to accompany the bind
-     * @return LdapResult containing status of the bind
-     */
-    public static LdapResult saslBind(LdapClient clnt, Connection conn,
-        String server, String dn, Object pw,
-        String authMech, Hashtable env, Control[] bindCtls)
-        throws IOException, NamingException {
-
-        SaslClient saslClnt = null;
-        boolean cleanupHandler = false;
-
-        // Use supplied callback handler or create default
-        CallbackHandler cbh =
-            (env != null) ? (CallbackHandler)env.get(SASL_CALLBACK) : null;
-        if (cbh == null) {
-            cbh = new DefaultCallbackHandler(dn, pw, (String)env.get(SASL_REALM));
-            cleanupHandler = true;
-        }
-
-        // Prepare parameters for creating SASL client
-        String authzId = (env != null) ? (String)env.get(SASL_AUTHZ_ID) : null;
-        String[] mechs = getSaslMechanismNames(authMech);
-
-        try {
-            // Create SASL client to use using SASL package
-            saslClnt = Sasl.createSaslClient(
-                mechs, authzId, "ldap", server, env, cbh);
-
-            if (saslClnt == null) {
-                throw new AuthenticationNotSupportedException(authMech);
-            }
-
-            LdapResult res;
-            String mechName = saslClnt.getMechanismName();
-            byte[] response = saslClnt.hasInitialResponse() ?
-                saslClnt.evaluateChallenge(NO_BYTES) : null;
-
-            res = clnt.ldapBind(null, response, bindCtls, mechName, true);
-
-            while (!saslClnt.isComplete() &&
-                (res.status == LDAP_SASL_BIND_IN_PROGRESS ||
-                 res.status == LDAP_SUCCESS)) {
-
-                response = saslClnt.evaluateChallenge(
-                    res.serverCreds != null? res.serverCreds : NO_BYTES);
-                if (res.status == LDAP_SUCCESS) {
-                    if (response != null) {
-                        throw new AuthenticationException(
-                            "SASL client generated response after success");
-                    }
-                    break;
-                }
-                res = clnt.ldapBind(null, response, bindCtls, mechName, true);
-            }
-
-            if (res.status == LDAP_SUCCESS) {
-                if (!saslClnt.isComplete()) {
-                    throw new AuthenticationException(
-                        "SASL authentication not complete despite server claims");
-                }
-
-                String qop = (String) saslClnt.getNegotiatedProperty(Sasl.QOP);
-
-                // If negotiated integrity or privacy,
-                if (qop != null && (qop.equalsIgnoreCase("auth-int")
-                    || qop.equalsIgnoreCase("auth-conf"))) {
-
-                    InputStream newIn = new SaslInputStream(saslClnt,
-                        conn.inStream);
-                    OutputStream newOut = new SaslOutputStream(saslClnt,
-                        conn.outStream);
-
-                    conn.replaceStreams(newIn, newOut);
-                } else {
-                    saslClnt.dispose();
-                }
-            }
-            return res;
-        } catch (SaslException e) {
-            NamingException ne = new AuthenticationException(
-                authMech);
-            ne.setRootCause(e);
-            throw ne;
-        } finally {
-            if (cleanupHandler) {
-                ((DefaultCallbackHandler)cbh).clearPassword();
-            }
-        }
-    }
-
-    /**
-      * Returns an array of SASL mechanisms given a string of space
-      * separated SASL mechanism names.
-      * @param The non-null string containing the mechanism names
-      * @return A non-null array of String; each element of the array
-      * contains a single mechanism name.
-      */
-    private static String[] getSaslMechanismNames(String str) {
-        StringTokenizer parser = new StringTokenizer(str);
-        Vector mechs = new Vector(10);
-        while (parser.hasMoreTokens()) {
-            mechs.addElement(parser.nextToken());
-        }
-        String[] mechNames = new String[mechs.size()];
-        for (int i = 0; i < mechs.size(); i++) {
-            mechNames[i] = (String)mechs.elementAt(i);
-        }
-        return mechNames;
-    }
-
-    private static final byte[] NO_BYTES = new byte[0];
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/ldap/sasl/SaslInputStream.java b/ojluni/src/main/java/com/sun/jndi/ldap/sasl/SaslInputStream.java
deleted file mode 100755
index f0746c1..0000000
--- a/ojluni/src/main/java/com/sun/jndi/ldap/sasl/SaslInputStream.java
+++ /dev/null
@@ -1,218 +0,0 @@
-/*
- * Copyright (c) 2001, 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.
- */
-
-package com.sun.jndi.ldap.sasl;
-
-import javax.security.sasl.Sasl;
-import javax.security.sasl.SaslClient;
-import javax.security.sasl.SaslException;
-import java.io.IOException;
-import java.io.EOFException;
-import java.io.InputStream;
-
-/**
- * This class is used by clients of Java SASL that need to create an input stream
- * that uses SaslClient's unwrap() method to decode the SASL buffers
- * sent by the SASL server.
- *
- * Extend from InputStream instead of FilterInputStream because
- * we need to override less methods in InputStream. That is, the
- * behavior of the default implementations in InputStream matches
- * more closely with the behavior we want in SaslInputStream.
- *
- * @author Rosanna Lee
- */
-public class SaslInputStream extends InputStream {
-    private static final boolean debug = false;
-
-    private byte[] saslBuffer;  // buffer for storing raw bytes
-    private byte[] lenBuf = new byte[4];  // buffer for storing length
-
-    private byte[] buf = new byte[0];   // buffer for storing processed bytes
-                                        // Initialized to empty buffer
-    private int bufPos = 0;             // read position in buf
-    private InputStream in;             // underlying input stream
-    private SaslClient sc;
-    private int recvMaxBufSize = 65536;
-
-    SaslInputStream(SaslClient sc, InputStream in) throws SaslException {
-        super();
-        this.in = in;
-        this.sc = sc;
-
-        String str = (String) sc.getNegotiatedProperty(Sasl.MAX_BUFFER);
-        if (str != null) {
-            try {
-                recvMaxBufSize = Integer.parseInt(str);
-            } catch (NumberFormatException e) {
-                throw new SaslException(Sasl.MAX_BUFFER +
-                    " property must be numeric string: " + str);
-            }
-        }
-        saslBuffer = new byte[recvMaxBufSize];
-    }
-
-    public int read() throws IOException {
-        byte[] inBuf = new byte[1];
-        int count = read(inBuf, 0, 1);
-        if (count > 0) {
-            return inBuf[0];
-        } else {
-            return -1;
-        }
-    }
-
-    public int read(byte[] inBuf, int start, int count) throws IOException {
-
-        if (bufPos >= buf.length) {
-            int actual = fill();   // read and unwrap next SASL buffer
-            while (actual == 0) {  // ignore zero length content
-                actual = fill();
-            }
-            if (actual == -1) {
-                return -1;    // EOF
-            }
-        }
-
-        int avail = buf.length - bufPos;
-        if (count > avail) {
-            // Requesting more that we have stored
-            // Return all that we have; next invocation of read() will
-            // trigger fill()
-            System.arraycopy(buf, bufPos, inBuf, start, avail);
-            bufPos = buf.length;
-            return avail;
-        } else {
-            // Requesting less than we have stored
-            // Return all that was requested
-            System.arraycopy(buf, bufPos, inBuf, start, count);
-            bufPos += count;
-            return count;
-        }
-    }
-
-    /**
-     * Fills the buf with more data by reading a SASL buffer, unwrapping it,
-     * and leaving the bytes in buf for read() to return.
-     * @return The number of unwrapped bytes available
-     */
-    private int fill() throws IOException {
-        // Read in length of buffer
-        int actual = readFully(lenBuf, 4);
-        if (actual != 4) {
-            return -1;
-        }
-        int len = networkByteOrderToInt(lenBuf, 0, 4);
-
-        if (len > recvMaxBufSize) {
-            throw new IOException(
-                len + "exceeds the negotiated receive buffer size limit:" +
-                recvMaxBufSize);
-        }
-
-        if (debug) {
-            System.err.println("reading " + len + " bytes from network");
-        }
-
-        // Read SASL buffer
-        actual = readFully(saslBuffer, len);
-        if (actual != len) {
-            throw new EOFException("Expecting to read " + len +
-                " bytes but got " + actual + " bytes before EOF");
-        }
-
-        // Unwrap
-        buf = sc.unwrap(saslBuffer, 0, len);
-
-        bufPos = 0;
-
-        return buf.length;
-    }
-
-    /**
-     * Read requested number of bytes before returning.
-     * @return The number of bytes actually read; -1 if none read
-     */
-    private int readFully(byte[] inBuf, int total) throws IOException {
-        int count, pos = 0;
-
-        if (debug) {
-            System.err.println("readFully " + total + " from " + in);
-        }
-
-        while (total > 0) {
-            count = in.read(inBuf, pos, total);
-
-            if (debug) {
-                System.err.println("readFully read " + count);
-            }
-
-            if (count == -1 ) {
-                return (pos == 0? -1 : pos);
-            }
-            pos += count;
-            total -= count;
-        }
-        return pos;
-    }
-
-    public int available() throws IOException {
-        return buf.length - bufPos;
-    }
-
-    public void close() throws IOException {
-        SaslException save = null;
-        try {
-            sc.dispose(); // Dispose of SaslClient's state
-        } catch (SaslException e) {
-            // Save exception for throwing after closing 'in'
-            save = e;
-        }
-
-        in.close();  // Close underlying input stream
-
-        if (save != null) {
-            throw save;
-        }
-    }
-
-    /**
-     * Returns the integer represented by  4 bytes in network byte order.
-     */
-    // Copied from com.sun.security.sasl.util.SaslImpl.
-    private static int networkByteOrderToInt(byte[] buf, int start, int count) {
-        if (count > 4) {
-            throw new IllegalArgumentException("Cannot handle more than 4 bytes");
-        }
-
-        int answer = 0;
-
-        for (int i = 0; i < count; i++) {
-            answer <<= 8;
-            answer |= ((int)buf[start+i] & 0xff);
-        }
-        return answer;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/ldap/sasl/SaslOutputStream.java b/ojluni/src/main/java/com/sun/jndi/ldap/sasl/SaslOutputStream.java
deleted file mode 100755
index e8e73c7..0000000
--- a/ojluni/src/main/java/com/sun/jndi/ldap/sasl/SaslOutputStream.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * Copyright (c) 2001, 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.
- */
-
-package com.sun.jndi.ldap.sasl;
-
-import javax.security.sasl.Sasl;
-import javax.security.sasl.SaslClient;
-import javax.security.sasl.SaslException;
-import java.io.IOException;
-import java.io.FilterOutputStream;
-import java.io.OutputStream;
-
-class SaslOutputStream extends FilterOutputStream {
-    private static final boolean debug = false;
-
-    private byte[] lenBuf = new byte[4];  // buffer for storing length
-    private int rawSendSize = 65536;
-    private SaslClient sc;
-
-    SaslOutputStream(SaslClient sc, OutputStream out) throws SaslException {
-        super(out);
-        this.sc = sc;
-
-        if (debug) {
-            System.err.println("SaslOutputStream: " + out);
-        }
-
-        String str = (String) sc.getNegotiatedProperty(Sasl.RAW_SEND_SIZE);
-        if (str != null) {
-            try {
-                rawSendSize = Integer.parseInt(str);
-            } catch (NumberFormatException e) {
-                throw new SaslException(Sasl.RAW_SEND_SIZE +
-                    " property must be numeric string: " + str);
-            }
-        }
-    }
-
-    // Override this method to call write(byte[], int, int) counterpart
-    // super.write(int) simply calls out.write(int)
-
-    public void write(int b) throws IOException {
-        byte[] buffer = new byte[1];
-        buffer[0] = (byte)b;
-        write(buffer, 0, 1);
-    }
-
-    /**
-     * Override this method to "wrap" the outgoing buffer before
-     * writing it to the underlying output stream.
-     */
-    public void write(byte[] buffer, int offset, int total) throws IOException {
-        int count;
-        byte[] wrappedToken, saslBuffer;
-
-        // "Packetize" buffer to be within rawSendSize
-        if (debug) {
-            System.err.println("Total size: " + total);
-        }
-
-        for (int i = 0; i < total; i += rawSendSize) {
-
-            // Calculate length of current "packet"
-            count = (total - i) < rawSendSize ? (total - i) : rawSendSize;
-
-            // Generate wrapped token
-            wrappedToken = sc.wrap(buffer, offset+i, count);
-
-            // Write out length
-            intToNetworkByteOrder(wrappedToken.length, lenBuf, 0, 4);
-
-            if (debug) {
-                System.err.println("sending size: " + wrappedToken.length);
-            }
-            out.write(lenBuf, 0, 4);
-
-            // Write out wrapped token
-            out.write(wrappedToken, 0, wrappedToken.length);
-        }
-    }
-
-    public void close() throws IOException {
-        SaslException save = null;
-        try {
-            sc.dispose();  // Dispose of SaslClient's state
-        } catch (SaslException e) {
-            // Save exception for throwing after closing 'in'
-            save = e;
-        }
-        super.close();  // Close underlying output stream
-
-        if (save != null) {
-            throw save;
-        }
-    }
-
-    // Copied from com.sun.security.sasl.util.SaslImpl
-    /**
-     * Encodes an integer into 4 bytes in network byte order in the buffer
-     * supplied.
-     */
-    private static void intToNetworkByteOrder(int num, byte[] buf, int start,
-        int count) {
-        if (count > 4) {
-            throw new IllegalArgumentException("Cannot handle more than 4 bytes");
-        }
-
-        for (int i = count-1; i >= 0; i--) {
-            buf[start+i] = (byte)(num & 0xff);
-            num >>>= 8;
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/rmi/registry/ReferenceWrapper.java b/ojluni/src/main/java/com/sun/jndi/rmi/registry/ReferenceWrapper.java
deleted file mode 100755
index 5f1d2b1..0000000
--- a/ojluni/src/main/java/com/sun/jndi/rmi/registry/ReferenceWrapper.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (c) 1999, 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.jndi.rmi.registry;
-
-
-import java.rmi.*;
-import java.rmi.server.UnicastRemoteObject;
-
-import javax.naming.*;
-
-
-/**
- * The ReferenceWrapper class is a Remote wrapper for Reference
- * objects.  It wraps around a Reference on the server, and makes the
- * Reference accessible to clients.
- *
- * @author Scott Seligman
- */
-
-
-public class ReferenceWrapper
-        extends UnicastRemoteObject
-        implements RemoteReference
-{
-    protected Reference wrappee;        // reference being wrapped
-
-    public ReferenceWrapper(Reference wrappee)
-            throws NamingException, RemoteException
-    {
-        this.wrappee = wrappee;
-    }
-
-    public Reference getReference() throws RemoteException {
-        return wrappee;
-    }
-
-    private static final long serialVersionUID = 6078186197417641456L;
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/rmi/registry/RegistryContext.java b/ojluni/src/main/java/com/sun/jndi/rmi/registry/RegistryContext.java
deleted file mode 100755
index 8fde424..0000000
--- a/ojluni/src/main/java/com/sun/jndi/rmi/registry/RegistryContext.java
+++ /dev/null
@@ -1,599 +0,0 @@
-/*
- * Copyright (c) 1999, 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
- * 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.jndi.rmi.registry;
-
-
-import java.util.Hashtable;
-import java.util.Properties;
-import java.rmi.*;
-import java.rmi.server.*;
-import java.rmi.registry.Registry;
-import java.rmi.registry.LocateRegistry;
-
-import javax.naming.*;
-import javax.naming.spi.NamingManager;
-
-
-/**
- * A RegistryContext is a context representing a remote RMI registry.
- *
- * @author Scott Seligman
- */
-
-
-public class RegistryContext implements Context, Referenceable {
-
-    private Hashtable environment;
-    private Registry registry;
-    private String host;
-    private int port;
-    private static final NameParser nameParser = new AtomicNameParser();
-    private static final String SOCKET_FACTORY = "com.sun.jndi.rmi.factory.socket";
-
-    Reference reference = null; // ref used to create this context, if any
-
-    // Environment property that, if set, indicates that a security
-    // manager should be installed (if none is already in place).
-    public static final String SECURITY_MGR =
-            "java.naming.rmi.security.manager";
-
-    /**
-     * Returns a context for the registry at a given host and port.
-     * If "host" is null, uses default host.
-     * If "port" is non-positive, uses default port.
-     * Cloning of "env" is handled by caller; see comments within
-     * RegistryContextFactory.getObjectInstance(), for example.
-     */
-    public RegistryContext(String host, int port, Hashtable env)
-            throws NamingException
-    {
-        environment = ((env == null) ? new Hashtable(5) : env);
-        if (environment.get(SECURITY_MGR) != null) {
-            installSecurityMgr();
-        }
-
-        // chop off '[' and ']' in an IPv6 literal address
-        if ((host != null) && (host.charAt(0) == '[')) {
-            host = host.substring(1, host.length() - 1);
-        }
-
-        RMIClientSocketFactory socketFactory =
-                (RMIClientSocketFactory) environment.get(SOCKET_FACTORY);
-        registry = getRegistry(host, port, socketFactory);
-        this.host = host;
-        this.port = port;
-    }
-
-    /**
-     * Returns a clone of a registry context.  The context's private state
-     * is independent of the original's (so closing one context, for example,
-     * won't close the other).
-     */
-    // %%% Alternatively, this could be done with a clone() method.
-    RegistryContext(RegistryContext ctx) {
-        environment = (Hashtable)ctx.environment.clone();
-        registry = ctx.registry;
-        host = ctx.host;
-        port = ctx.port;
-        reference = ctx.reference;
-    }
-
-    protected void finalize() {
-        close();
-    }
-
-    public Object lookup(Name name) throws NamingException {
-        if (name.isEmpty()) {
-            return (new RegistryContext(this));
-        }
-        Remote obj;
-        try {
-            obj = registry.lookup(name.get(0));
-        } catch (NotBoundException e) {
-            throw (new NameNotFoundException(name.get(0)));
-        } catch (RemoteException e) {
-            throw (NamingException)wrapRemoteException(e).fillInStackTrace();
-        }
-        return (decodeObject(obj, name.getPrefix(1)));
-    }
-
-    public Object lookup(String name) throws NamingException {
-        return lookup(new CompositeName(name));
-    }
-
-    /**
-     * If the object to be bound is both Remote and Referenceable, binds the
-     * object itself, not its Reference.
-     */
-    public void bind(Name name, Object obj) throws NamingException {
-        if (name.isEmpty()) {
-            throw (new InvalidNameException(
-                    "RegistryContext: Cannot bind empty name"));
-        }
-        try {
-            registry.bind(name.get(0), encodeObject(obj, name.getPrefix(1)));
-        } catch (AlreadyBoundException e) {
-            NamingException ne = new NameAlreadyBoundException(name.get(0));
-            ne.setRootCause(e);
-            throw ne;
-        } catch (RemoteException e) {
-            throw (NamingException)wrapRemoteException(e).fillInStackTrace();
-        }
-    }
-
-    public void bind(String name, Object obj) throws NamingException {
-        bind(new CompositeName(name), obj);
-    }
-
-    public void rebind(Name name, Object obj) throws NamingException {
-        if (name.isEmpty()) {
-            throw (new InvalidNameException(
-                    "RegistryContext: Cannot rebind empty name"));
-        }
-        try {
-            registry.rebind(name.get(0), encodeObject(obj, name.getPrefix(1)));
-        } catch (RemoteException e) {
-            throw (NamingException)wrapRemoteException(e).fillInStackTrace();
-        }
-    }
-
-    public void rebind(String name, Object obj) throws NamingException {
-        rebind(new CompositeName(name), obj);
-    }
-
-    public void unbind(Name name) throws NamingException {
-        if (name.isEmpty()) {
-            throw (new InvalidNameException(
-                    "RegistryContext: Cannot unbind empty name"));
-        }
-        try {
-            registry.unbind(name.get(0));
-        } catch (NotBoundException e) {
-            // method is idempotent
-        } catch (RemoteException e) {
-            throw (NamingException)wrapRemoteException(e).fillInStackTrace();
-        }
-    }
-
-    public void unbind(String name) throws NamingException {
-        unbind(new CompositeName(name));
-    }
-
-    /**
-     * Rename is implemented by this sequence of operations:
-     * lookup, bind, unbind.  The sequence is not performed atomically.
-     */
-    public void rename(Name oldName, Name newName) throws NamingException {
-        bind(newName, lookup(oldName));
-        unbind(oldName);
-    }
-
-    public void rename(String name, String newName) throws NamingException {
-        rename(new CompositeName(name), new CompositeName(newName));
-    }
-
-    public NamingEnumeration list(Name name)    throws NamingException {
-        if (!name.isEmpty()) {
-            throw (new InvalidNameException(
-                    "RegistryContext: can only list \"\""));
-        }
-        try {
-            String[] names = registry.list();
-            return (new NameClassPairEnumeration(names));
-        } catch (RemoteException e) {
-            throw (NamingException)wrapRemoteException(e).fillInStackTrace();
-        }
-    }
-
-    public NamingEnumeration list(String name) throws NamingException {
-        return list(new CompositeName(name));
-    }
-
-    public NamingEnumeration listBindings(Name name)
-            throws NamingException
-    {
-        if (!name.isEmpty()) {
-            throw (new InvalidNameException(
-                    "RegistryContext: can only list \"\""));
-        }
-        try {
-            String[] names = registry.list();
-            return (new BindingEnumeration(this, names));
-        } catch (RemoteException e) {
-            throw (NamingException)wrapRemoteException(e).fillInStackTrace();
-        }
-    }
-
-    public NamingEnumeration listBindings(String name) throws NamingException {
-        return listBindings(new CompositeName(name));
-    }
-
-    public void destroySubcontext(Name name) throws NamingException {
-        throw (new OperationNotSupportedException());
-    }
-
-    public void destroySubcontext(String name) throws NamingException {
-        throw (new OperationNotSupportedException());
-    }
-
-    public Context createSubcontext(Name name) throws NamingException {
-        throw (new OperationNotSupportedException());
-    }
-
-    public Context createSubcontext(String name) throws NamingException {
-        throw (new OperationNotSupportedException());
-    }
-
-    public Object lookupLink(Name name) throws NamingException {
-        return lookup(name);
-    }
-
-    public Object lookupLink(String name) throws NamingException {
-        return lookup(name);
-    }
-
-    public NameParser getNameParser(Name name) throws NamingException {
-        return nameParser;
-    }
-
-    public NameParser getNameParser(String name) throws NamingException {
-        return nameParser;
-    }
-
-    public Name composeName(Name name, Name prefix) throws NamingException {
-        Name result = (Name)prefix.clone();
-        return result.addAll(name);
-    }
-
-    public String composeName(String name, String prefix)
-            throws NamingException
-    {
-        return composeName(new CompositeName(name),
-                           new CompositeName(prefix)).toString();
-    }
-
-    public Object removeFromEnvironment(String propName)
-            throws NamingException
-    {
-        return environment.remove(propName);
-    }
-
-    public Object addToEnvironment(String propName, Object propVal)
-            throws NamingException
-    {
-        if (propName.equals(SECURITY_MGR)) {
-            installSecurityMgr();
-        }
-        return environment.put(propName, propVal);
-    }
-
-    public Hashtable getEnvironment() throws NamingException {
-        return (Hashtable)environment.clone();
-    }
-
-    public void close() {
-        environment = null;
-        registry = null;
-        // &&& If we were caching registry connections, we would probably
-        // uncache this one now.
-    }
-
-    public String getNameInNamespace() {
-        return ""; // Registry has an empty name
-    }
-
-    /**
-     * Returns an RMI registry reference for this context.
-     *<p>
-     * If this context was created from a reference, that reference is
-     * returned.  Otherwise, an exception is thrown if the registry's
-     * host is "localhost" or the default (null).  Although this could
-     * possibly make for a valid reference, it's far more likely to be
-     * an easily made error.
-     *
-     * @see RegistryContextFactory
-     */
-    public Reference getReference() throws NamingException {
-        if (reference != null) {
-            return (Reference)reference.clone();  // %%% clone the addrs too?
-        }
-        if (host == null || host.equals("localhost")) {
-            throw (new ConfigurationException(
-                    "Cannot create a reference for an RMI registry whose " +
-                    "host was unspecified or specified as \"localhost\""));
-        }
-        String url = "rmi://";
-
-        // Enclose IPv6 literal address in '[' and ']'
-        url = (host.indexOf(":") > -1) ? url + "[" + host + "]" :
-                                         url + host;
-        if (port > 0) {
-            url += ":" + Integer.toString(port);
-        }
-        RefAddr addr = new StringRefAddr(RegistryContextFactory.ADDRESS_TYPE,
-                                         url);
-        return (new Reference(RegistryContext.class.getName(),
-                              addr,
-                              RegistryContextFactory.class.getName(),
-                              null));
-    }
-
-
-    /**
-     * Wrap a RemoteException inside a NamingException.
-     */
-    public static NamingException wrapRemoteException(RemoteException re) {
-
-        NamingException ne;
-
-        if (re instanceof ConnectException) {
-            ne = new ServiceUnavailableException();
-
-        } else if (re instanceof AccessException) {
-            ne = new NoPermissionException();
-
-        } else if (re instanceof StubNotFoundException ||
-                   re instanceof UnknownHostException ||
-                   re instanceof SocketSecurityException) {
-            ne = new ConfigurationException();
-
-        } else if (re instanceof ExportException ||
-                   re instanceof ConnectIOException ||
-                   re instanceof MarshalException ||
-                   re instanceof UnmarshalException ||
-                   re instanceof NoSuchObjectException) {
-            ne = new CommunicationException();
-
-        } else if (re instanceof ServerException &&
-                   re.detail instanceof RemoteException) {
-            ne = wrapRemoteException((RemoteException)re.detail);
-
-        } else {
-            ne = new NamingException();
-        }
-        ne.setRootCause(re);
-        return ne;
-    }
-
-    /**
-     * Returns the registry at a given host, port and socket factory.
-     * If "host" is null, uses default host.
-     * If "port" is non-positive, uses default port.
-     * If "socketFactory" is null, uses the default socket.
-     */
-    private static Registry getRegistry(String host, int port,
-                RMIClientSocketFactory socketFactory)
-            throws NamingException
-    {
-        // %%% We could cache registry connections here.  The transport layer
-        // may already reuse connections.
-        try {
-            if (socketFactory == null) {
-                return LocateRegistry.getRegistry(host, port);
-            } else {
-                return LocateRegistry.getRegistry(host, port, socketFactory);
-            }
-        } catch (RemoteException e) {
-            throw (NamingException)wrapRemoteException(e).fillInStackTrace();
-        }
-    }
-
-    /**
-     * Attempts to install a security manager if none is currently in
-     * place.
-     */
-    private static void installSecurityMgr() {
-
-        try {
-            System.setSecurityManager(new RMISecurityManager());
-        } catch (Exception e) {
-        }
-    }
-
-    /**
-     * Encodes an object prior to binding it in the registry.  First,
-     * NamingManager.getStateToBind() is invoked.  If the resulting
-     * object is Remote, it is returned.  If it is a Reference or
-     * Referenceable, the reference is wrapped in a Remote object.
-     * Otherwise, an exception is thrown.
-     *
-     * @param name      The object's name relative to this context.
-     */
-    private Remote encodeObject(Object obj, Name name)
-            throws NamingException, RemoteException
-    {
-        obj = NamingManager.getStateToBind(obj, name, this, environment);
-
-        if (obj instanceof Remote) {
-            return (Remote)obj;
-        }
-        if (obj instanceof Reference) {
-            return (new ReferenceWrapper((Reference)obj));
-        }
-        if (obj instanceof Referenceable) {
-            return (new ReferenceWrapper(((Referenceable)obj).getReference()));
-        }
-        throw (new IllegalArgumentException(
-                "RegistryContext: " +
-                "object to bind must be Remote, Reference, or Referenceable"));
-    }
-
-    /**
-     * Decodes an object that has been retrieved from the registry.
-     * First, if the object is a RemoteReference, the Reference is
-     * unwrapped.  Then, NamingManager.getObjectInstance() is invoked.
-     *
-     * @param name      The object's name relative to this context.
-     */
-    private Object decodeObject(Remote r, Name name) throws NamingException {
-        try {
-            Object obj = (r instanceof RemoteReference)
-                        ? ((RemoteReference)r).getReference()
-                        : (Object)r;
-            return NamingManager.getObjectInstance(obj, name, this,
-                                                   environment);
-        } catch (NamingException e) {
-            throw e;
-        } catch (RemoteException e) {
-            throw (NamingException)
-                wrapRemoteException(e).fillInStackTrace();
-        } catch (Exception e) {
-            NamingException ne = new NamingException();
-            ne.setRootCause(e);
-            throw ne;
-        }
-    }
-
-}
-
-
-/**
- * A name parser for case-sensitive atomic names.
- */
-class AtomicNameParser implements NameParser {
-    private static final Properties syntax = new Properties();
-
-    public Name parse(String name) throws NamingException {
-        return (new CompoundName(name, syntax));
-    }
-}
-
-
-/**
- * An enumeration of name / class-name pairs.  Since we don't know anything
- * about the classes, each class name is returned as the generic
- * "java.lang.Object".
- */
-class NameClassPairEnumeration implements NamingEnumeration {
-    private final String[] names;
-    private int nextName;       // index into "names"
-
-    NameClassPairEnumeration(String[] names) {
-        this.names = names;
-        nextName = 0;
-    }
-
-    public boolean hasMore() {
-        return (nextName < names.length);
-    }
-
-    public Object next() throws NamingException {
-        if (!hasMore()) {
-            throw (new java.util.NoSuchElementException());
-        }
-        // Convert name to a one-element composite name, so embedded
-        // meta-characters are properly escaped.
-        String name = names[nextName++];
-        Name cname = (new CompositeName()).add(name);
-        NameClassPair ncp = new NameClassPair(cname.toString(),
-                                            "java.lang.Object");
-        ncp.setNameInNamespace(name);
-        return ncp;
-    }
-
-    public boolean hasMoreElements() {
-        return hasMore();
-    }
-
-    public Object nextElement() {
-        try {
-            return next();
-        } catch (NamingException e) {   // should never happen
-            throw (new java.util.NoSuchElementException(
-                    "javax.naming.NamingException was thrown"));
-        }
-    }
-
-    public void close() {
-        nextName = names.length;
-    }
-}
-
-
-/**
- * An enumeration of Bindings.
- *
- * The actual registry lookups are performed when next() is called.  It would
- * be nicer to defer this until the object (or its class name) is actually
- * requested.  The problem with that approach is that Binding.getObject()
- * cannot throw NamingException.
- */
-class BindingEnumeration implements NamingEnumeration {
-    private RegistryContext ctx;
-    private final String[] names;
-    private int nextName;       // index into "names"
-
-    BindingEnumeration(RegistryContext ctx, String[] names) {
-        // Clone ctx in case someone closes it before we're through.
-        this.ctx = new RegistryContext(ctx);
-        this.names = names;
-        nextName = 0;
-    }
-
-    protected void finalize() {
-        ctx.close();
-    }
-
-    public boolean hasMore() {
-        if (nextName >= names.length) {
-            ctx.close();
-        }
-        return (nextName < names.length);
-    }
-
-    public Object next() throws NamingException {
-        if (!hasMore()) {
-            throw (new java.util.NoSuchElementException());
-        }
-        // Convert name to a one-element composite name, so embedded
-        // meta-characters are properly escaped.
-        String name = names[nextName++];
-        Name cname = (new CompositeName()).add(name);
-
-        Object obj = ctx.lookup(cname);
-        String cnameStr = cname.toString();
-        Binding binding = new Binding(cnameStr, obj);
-        binding.setNameInNamespace(cnameStr);
-        return binding;
-    }
-
-    public boolean hasMoreElements() {
-        return hasMore();
-    }
-
-    public Object nextElement() {
-        try {
-            return next();
-        } catch (NamingException e) {
-            throw (new java.util.NoSuchElementException(
-                    "javax.naming.NamingException was thrown"));
-        }
-    }
-
-    public void close () {
-        finalize();
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/rmi/registry/RegistryContextFactory.java b/ojluni/src/main/java/com/sun/jndi/rmi/registry/RegistryContextFactory.java
deleted file mode 100755
index fdebea4..0000000
--- a/ojluni/src/main/java/com/sun/jndi/rmi/registry/RegistryContextFactory.java
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-package com.sun.jndi.rmi.registry;
-
-
-import java.util.Enumeration;
-import java.util.Hashtable;
-
-import javax.naming.*;
-import javax.naming.spi.*;
-
-import com.sun.jndi.url.rmi.rmiURLContextFactory;
-
-/**
- * A RegistryContextFactory takes an RMI registry reference, and
- * creates the corresponding RMI object or registry context.  In
- * addition, it serves as the initial context factory when using an
- * RMI registry as an initial context.
- *<p>
- * When an initial context is being created, the environment
- * property "java.naming.provider.url" should contain the RMI URL of
- * the appropriate registry.  Otherwise, the default URL "rmi:" is used.
- *<p>
- * An RMI registry reference contains one or more StringRefAddrs of
- * type "URL", each containing a single RMI URL.  Other addresses
- * are ignored.  Multiple URLs represent alternative addresses for the
- * same logical resource.  The order of the addresses is not significant.
- *
- * @author Scott Seligman
- */
-
-
-public class RegistryContextFactory
-        implements ObjectFactory, InitialContextFactory
-{
-    /**
-     * The type of each address in an RMI registry reference.
-     */
-    public final static String ADDRESS_TYPE = "URL";
-
-    public Context getInitialContext(Hashtable<?,?> env) throws NamingException {
-
-        if (env != null) {
-            env = (Hashtable) env.clone();
-        }
-        return URLToContext(getInitCtxURL(env), env);
-    }
-
-    public Object getObjectInstance(Object ref, Name name, Context nameCtx,
-                                    Hashtable<?,?> env)
-            throws NamingException
-    {
-        if (!isRegistryRef(ref)) {
-            return null;
-        }
-        /*
-         * No need to clone env here.  If getObjectInstance()
-         * returns something other than a RegistryContext (which
-         * happens if you're looking up an object bound in the
-         * registry, as opposed to looking up the registry itself),
-         * then the context is GCed right away and there's no need to
-         * clone the environment.  If getObjectInstance() returns a
-         * RegistryContext, then it still goes through
-         * GenericURLContext, which calls RegistryContext.lookup()
-         * with an empty name, which clones the environment.
-         */
-        Object obj = URLsToObject(getURLs((Reference)ref), env);
-        if (obj instanceof RegistryContext) {
-            RegistryContext ctx = (RegistryContext)obj;
-            ctx.reference = (Reference)ref;
-        }
-        return obj;
-    }
-
-    private static Context URLToContext(String url, Hashtable env)
-            throws NamingException
-    {
-        rmiURLContextFactory factory = new rmiURLContextFactory();
-        Object obj = factory.getObjectInstance(url, null, null, env);
-
-        if (obj instanceof Context) {
-            return (Context)obj;
-        } else {
-            throw (new NotContextException(url));
-        }
-    }
-
-    private static Object URLsToObject(String[] urls, Hashtable env)
-            throws NamingException
-    {
-        rmiURLContextFactory factory = new rmiURLContextFactory();
-        return factory.getObjectInstance(urls, null, null, env);
-    }
-
-    /**
-     * Reads environment to find URL of initial context.
-     * The default URL is "rmi:".
-     */
-    private static String getInitCtxURL(Hashtable env) {
-
-        final String defaultURL = "rmi:";
-
-        String url = null;
-        if (env != null) {
-            url = (String)env.get(Context.PROVIDER_URL);
-        }
-        return ((url != null) ? url : defaultURL);
-    }
-
-    /**
-     * Returns true if argument is an RMI registry reference.
-     */
-    private static boolean isRegistryRef(Object obj) {
-
-        if (!(obj instanceof Reference)) {
-            return false;
-        }
-        String thisClassName = RegistryContextFactory.class.getName();
-        Reference ref = (Reference)obj;
-
-        return thisClassName.equals(ref.getFactoryClassName());
-    }
-
-    /**
-     * Returns the URLs contained within an RMI registry reference.
-     */
-    private static String[] getURLs(Reference ref) throws NamingException {
-
-        int size = 0;   // number of URLs
-        String[] urls = new String[ref.size()];
-
-        Enumeration addrs = ref.getAll();
-        while (addrs.hasMoreElements()) {
-            RefAddr addr = (RefAddr)addrs.nextElement();
-
-            if ((addr instanceof StringRefAddr) &&
-                addr.getType().equals(ADDRESS_TYPE)) {
-
-                urls[size++] = (String)addr.getContent();
-            }
-        }
-        if (size == 0) {
-            throw (new ConfigurationException(
-                    "Reference contains no valid addresses"));
-        }
-
-        // Trim URL array down to size.
-        if (size == ref.size()) {
-            return urls;
-        }
-        String[] urls2 = new String[size];
-        System.arraycopy(urls, 0, urls2, 0, size);
-        return urls2;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/rmi/registry/RemoteReference.java b/ojluni/src/main/java/com/sun/jndi/rmi/registry/RemoteReference.java
deleted file mode 100755
index b9ef3bc..0000000
--- a/ojluni/src/main/java/com/sun/jndi/rmi/registry/RemoteReference.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (c) 1999, 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.jndi.rmi.registry;
-
-
-import java.rmi.*;
-
-import javax.naming.*;
-
-
-/**
- * The RemoteReference interface wraps a Reference in a Remote wrapper.
- *
- * @author Scott Seligman
- */
-
-
-public interface RemoteReference extends Remote {
-
-        Reference getReference() throws NamingException, RemoteException;
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/toolkit/corba/CorbaUtils.java b/ojluni/src/main/java/com/sun/jndi/toolkit/corba/CorbaUtils.java
deleted file mode 100755
index c6965d2..0000000
--- a/ojluni/src/main/java/com/sun/jndi/toolkit/corba/CorbaUtils.java
+++ /dev/null
@@ -1,274 +0,0 @@
-/*
- * Copyright (c) 1999, 2000, 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.jndi.toolkit.corba;
-
-// Needed for RMI/IIOP
-import java.rmi.Remote;
-
-import java.lang.reflect.Method;
-import java.lang.reflect.InvocationTargetException;
-import java.util.Hashtable;
-import java.util.Properties;
-import java.util.Enumeration;
-
-import org.omg.CORBA.ORB;
-
-import javax.naming.Context;
-import javax.naming.ConfigurationException;
-
-/**
-  * Contains utilities for performing CORBA-related tasks:
-  * 1. Get the org.omg.CORBA.Object for a java.rmi.Remote object.
-  * 2. Create an ORB to use for a given host/port, and environment properties.
-  *
-  * @author Simon Nash
-  * @author Bryan Atsatt
-  */
-
-public class CorbaUtils {
-    /**
-      * Returns the CORBA object reference associated with a Remote
-      * object by using the javax.rmi.CORBA package.
-      *<p>
-      * Use reflection to avoid hard dependencies on javax.rmi.CORBA package.
-      * This method effective does the following:
-      *<blockquote><pre>
-      * java.lang.Object stub;
-      * try {
-      *     stub = PortableRemoteObject.toStub(remoteObj);
-      * } catch (Exception e) {
-      *     throw new ConfigurationException("Object not exported or not found");
-      * }
-      * if (!(stub instanceof javax.rmi.CORBA.Stub)) {
-      *     return null; // JRMP impl or JRMP stub
-      * }
-      * try {
-      *     ((javax.rmi.CORBA.Stub)stub).connect(orb);  // try to connect IIOP stub
-      * } catch (RemoteException e) {
-      *     // ignore 'already connected' error
-      * }
-      * return (javax.rmi.CORBA.Stub)stub;
-      *
-      * @param remoteObj The non-null remote object for
-      * @param orb       The non-null ORB to connect the remote object to
-      * @return The CORBA Object for remoteObj; null if <tt>remoteObj</tt>
-      *                 is a JRMP implementation or JRMP stub.
-      * @exception ClassNotFoundException The RMI-IIOP package is not available
-      * @exception ConfigurationException The CORBA Object cannot be obtained
-      *         because of configuration problems.
-      */
-    public static org.omg.CORBA.Object remoteToCorba(Remote remoteObj, ORB orb)
-        throws ClassNotFoundException, ConfigurationException {
-            synchronized (CorbaUtils.class) {
-                if (toStubMethod == null) {
-                    initMethodHandles();
-                }
-            }
-
-// First, get remoteObj's stub
-
-            // javax.rmi.CORBA.Stub stub = PortableRemoteObject.toStub(remoteObj);
-
-            java.lang.Object stub;
-
-            try {
-                stub = toStubMethod.invoke(null, new java.lang.Object[]{remoteObj});
-
-            } catch (InvocationTargetException e) {
-                Throwable realException = e.getTargetException();
-                // realException.printStackTrace();
-
-                ConfigurationException ce = new ConfigurationException(
-    "Problem with PortableRemoteObject.toStub(); object not exported or stub not found");
-                ce.setRootCause(realException);
-                throw ce;
-
-            } catch (IllegalAccessException e) {
-                ConfigurationException ce = new ConfigurationException(
-    "Cannot invoke javax.rmi.PortableRemoteObject.toStub(java.rmi.Remote)");
-
-                ce.setRootCause(e);
-                throw ce;
-            }
-
-// Next, make sure that the stub is javax.rmi.CORBA.Stub
-
-            if (!corbaStubClass.isInstance(stub)) {
-                return null;  // JRMP implementation or JRMP stub
-            }
-
-// Next, make sure that the stub is connected
-            // Invoke stub.connect(orb)
-            try {
-                connectMethod.invoke(stub, new java.lang.Object[]{orb});
-
-            } catch (InvocationTargetException e) {
-                Throwable realException = e.getTargetException();
-                // realException.printStackTrace();
-
-                if (!(realException instanceof java.rmi.RemoteException)) {
-                    ConfigurationException ce = new ConfigurationException(
-                        "Problem invoking javax.rmi.CORBA.Stub.connect()");
-                    ce.setRootCause(realException);
-                    throw ce;
-                }
-                // ignore RemoteException because stub might have already
-                // been connected
-            } catch (IllegalAccessException e) {
-                ConfigurationException ce = new ConfigurationException(
-                    "Cannot invoke javax.rmi.CORBA.Stub.connect()");
-                ce.setRootCause(e);
-                throw ce;
-            }
-// Finally, return stub
-            return (org.omg.CORBA.Object)stub;
-    }
-
-    /**
-     * Get ORB using given server and port number, and properties from environment.
-     *
-     * @param server Possibly null server; if null means use default;
-     *               For applet, it is the applet host; for app, it is localhost.
-     * @param port   Port number, -1 means default port
-     * @param env    Possibly null environment. Contains environment properties.
-     *               Could contain ORB itself; or applet used for initializing ORB.
-     *               Use all String properties from env for initializing ORB
-     * @return A non-null ORB.
-     */
-    public static ORB getOrb(String server, int port, Hashtable env) {
-        // See if we can get info from environment
-        Properties orbProp;
-
-        // Extract any org.omg.CORBA properties from environment
-        if (env != null) {
-            if (env instanceof Properties) {
-                // Already a Properties, just clone
-                orbProp = (Properties) env.clone();
-            } else {
-                // Get all String properties
-                Enumeration envProp;
-                orbProp = new Properties();
-                for (envProp = env.keys(); envProp.hasMoreElements();) {
-                    String key = (String)envProp.nextElement();
-                    Object val = env.get(key);
-                    if (val instanceof String) {
-                        orbProp.put(key, val);
-                    }
-                }
-            }
-        } else {
-            orbProp = new Properties();
-        }
-
-        if (server != null) {
-            orbProp.put("org.omg.CORBA.ORBInitialHost", server);
-        }
-        if (port >= 0) {
-            orbProp.put("org.omg.CORBA.ORBInitialPort", ""+port);
-        }
-
-        // Get Applet from environment
-        if (env != null) {
-            Object applet = env.get(Context.APPLET);
-            if (applet != null) {
-                // Create ORBs for an applet
-                return initAppletORB(applet, orbProp);
-            }
-        }
-
-        // Create ORBs using orbProp for a standalone application
-        return ORB.init(new String[0], orbProp);
-    }
-
-    /**
-     * This method returns a new ORB instance for the given applet
-     * without creating a static dependency on java.applet.
-     */
-    private static ORB initAppletORB(Object applet, Properties orbProp) {
-        try {
-            Class<?> appletClass  = Class.forName("java.applet.Applet", true, null);
-            if (!appletClass.isInstance(applet)) {
-                throw new ClassCastException(applet.getClass().getName());
-            }
-
-            // invoke the static method ORB.init(applet, orbProp);
-            Method method = ORB.class.getMethod("init", appletClass, Properties.class);
-            return (ORB) method.invoke(null, applet, orbProp);
-        } catch (ClassNotFoundException e) {
-            // java.applet.Applet doesn't exist and the applet parameter is
-            // non-null; so throw CCE
-            throw new ClassCastException(applet.getClass().getName());
-        } catch (NoSuchMethodException e) {
-            throw new AssertionError(e);
-        } catch (InvocationTargetException e) {
-            Throwable cause = e.getCause();
-            if (cause instanceof RuntimeException) {
-                throw (RuntimeException) cause;
-            } else if (cause instanceof Error) {
-                throw (Error) cause;
-            }
-            throw new AssertionError(e);
-        } catch (IllegalAccessException iae) {
-            throw new AssertionError(iae);
-        }
-    }
-
-    // Fields used for reflection of RMI-IIOP
-    private static Method toStubMethod = null;
-    private static Method connectMethod = null;
-    private static Class corbaStubClass = null;
-    /**
-     * Initializes reflection method handles for RMI-IIOP.
-     * @exception ClassNotFoundException javax.rmi.CORBA.* not available
-     */
-    private static void initMethodHandles() throws ClassNotFoundException {
-        // Get javax.rmi.CORBA.Stub class
-        corbaStubClass = Class.forName("javax.rmi.CORBA.Stub");
-
-        // Get javax.rmi.CORBA.Stub.connect(org.omg.CORBA.ORB) method
-
-        try {
-            connectMethod = corbaStubClass.getMethod("connect",
-                new Class[] {org.omg.CORBA.ORB.class});
-        } catch (NoSuchMethodException e) {
-            throw new IllegalStateException(
-        "No method definition for javax.rmi.CORBA.Stub.connect(org.omg.CORBA.ORB)");
-        }
-
-        // Get javax.rmi.PortableRemoteObject method
-        Class proClass = Class.forName("javax.rmi.PortableRemoteObject");
-
-        // Get javax.rmi.PortableRemoteObject(java.rmi.Remote) method
-        try {
-            toStubMethod = proClass.getMethod("toStub",
-                new Class[] {java.rmi.Remote.class});
-
-        } catch (NoSuchMethodException e) {
-            throw new IllegalStateException(
-"No method definition for javax.rmi.PortableRemoteObject.toStub(java.rmi.Remote)");
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/toolkit/ctx/AtomicContext.java b/ojluni/src/main/java/com/sun/jndi/toolkit/ctx/AtomicContext.java
deleted file mode 100755
index a34188a..0000000
--- a/ojluni/src/main/java/com/sun/jndi/toolkit/ctx/AtomicContext.java
+++ /dev/null
@@ -1,693 +0,0 @@
-/*
- * Copyright (c) 1999, 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.jndi.toolkit.ctx;
-
-import javax.naming.*;
-import javax.naming.spi.ResolveResult;
-
-/**
-  * Clients: deal only with names for its own naming service
-  * and deals with single contexts that can be built up into
-  * hierarchical naming systems.
-  * Direct subclasses of AtomicContext must provide implementations for
-  * the abstract a_ Context methods, and c_parseComponent().
-  *
-  * If the subclass implements the notion of implicit nns,
-  * it must override the a_*_nns Context methods as well.
-  *
-  * @author Rosanna Lee
-  *
-  */
-
-public abstract class AtomicContext extends ComponentContext {
-    private static int debug = 0;
-
-    protected AtomicContext () {
-        _contextType = _ATOMIC;
-    }
-
-// ------ Abstract methods whose implementation are provided by subclasses
-
-
-    /* Equivalent to Context methods */
-    protected abstract Object a_lookup(String name, Continuation cont)
-        throws NamingException;
-    protected abstract Object a_lookupLink(String name, Continuation cont)
-        throws NamingException;
-
-    protected abstract NamingEnumeration a_list(
-        Continuation cont) throws NamingException;
-    protected abstract NamingEnumeration a_listBindings(
-        Continuation cont) throws NamingException;
-    protected abstract void a_bind(String name, Object obj, Continuation cont)
-        throws NamingException;
-    protected abstract void a_rebind(String name, Object obj, Continuation cont)
-        throws NamingException;
-    protected abstract void a_unbind(String name, Continuation cont)
-        throws NamingException;
-    protected abstract void a_destroySubcontext(String name, Continuation cont)
-        throws NamingException;
-    protected abstract Context a_createSubcontext(String name,
-        Continuation cont) throws NamingException;
-    protected abstract void a_rename(String oldname, Name newname,
-        Continuation cont) throws NamingException;
-    protected abstract NameParser a_getNameParser(Continuation cont)
-        throws NamingException;
-
-    /* Parsing */
-    /**
-     * Parse 'inputName' into two parts:
-     * head: the first component in this name
-     * tail: the rest of the unused name.
-     *
-     * Subclasses should provide an implementation for this method
-     * which parses inputName using its own name syntax.
-     */
-    protected abstract StringHeadTail c_parseComponent(String inputName,
-        Continuation cont) throws NamingException;
-
-
-// ------ Methods that need to be overridden by subclass
-
-    /* Resolution method for supporting federation */
-    /**
-      * Resolves the nns for 'name' when the named context is acting
-      * as an intermediate context.
-      *
-      * For a system that supports junctions, this would be equilvalent to
-      *         a_lookup(name, cont);
-      * because for junctions, an intermediate slash simply signifies
-      * a syntactic separator.
-      *
-      * For a system that supports implicit nns, this would be equivalent to
-      *         a_lookup_nns(name, cont);
-      * because for implicit nns, a slash always signifies the implicit nns,
-      * regardless of whether it is intermediate or trailing.
-      *
-      * By default this method supports junctions, and also allows for an
-      * implicit nns to be dynamically determined through the use of the
-      * "nns" reference (see a_processJunction_nns()).
-      * Contexts that implement implicit nns directly should provide an
-      * appropriate override.
-      */
-    protected Object a_resolveIntermediate_nns(String name, Continuation cont)
-        throws NamingException {
-            try {
-                final Object obj = a_lookup(name, cont);
-
-                // Do not append "" to Continuation 'cont' even if set
-                // because the intention is to ignore the nns
-
-                //
-                if (obj != null && getClass().isInstance(obj)) {
-                    // If "obj" is in the same type as this object, it must
-                    // not be a junction. Continue the lookup with "/".
-
-                    cont.setContinueNNS(obj, name, this);
-                    return null;
-
-                } else if (obj != null && !(obj instanceof Context)) {
-                    // obj is not even a context, so try to find its nns
-                    // dynamically by constructing a Reference containing obj.
-                    RefAddr addr = new RefAddr("nns") {
-                        public Object getContent() {
-                            return obj;
-                        }
-                        private static final long serialVersionUID =
-                            -3399518522645918499L;
-                    };
-                    Reference ref = new Reference("java.lang.Object", addr);
-
-                    // Resolved name has trailing slash to indicate nns
-                    CompositeName resName = new CompositeName();
-                    resName.add(name);
-                    resName.add(""); // add trailing slash
-
-                    // Set continuation leave it to
-                    // PartialCompositeContext.getPCContext() to throw CPE.
-                    // Do not use setContinueNNS() because we've already
-                    // consumed "/" (i.e., moved it to resName).
-
-                    cont.setContinue(ref, resName, this);
-                    return null;
-
-                } else {
-                    return obj;
-                }
-
-            } catch (NamingException e) {
-                e.appendRemainingComponent(""); // add nns back
-                throw e;
-            }
-        }
-
-    /* Equivalent of Context Methods for supporting nns */
-
-    // The following methods are called when the DirContext methods
-    // are invoked with a name that has a trailing slash.
-    // For naming systems that support implicit nns,
-    // the trailing slash signifies the implicit nns.
-    // For such naming systems, override these a_*_nns methods.
-    //
-    // For naming systems that support junctions (explicit nns),
-    // the trailing slash is meaningless because a junction does not
-    // have an implicit nns.  The default implementation here
-    // throws a NameNotFoundException for such names.
-    // If a context wants to accept a trailing slash as having
-    // the same meaning as the same name without a trailing slash,
-    // then it should override these a_*_nns methods.
-
-
-    protected Object a_lookup_nns(String name, Continuation cont)
-        throws NamingException {
-            a_processJunction_nns(name, cont);
-            return null;
-        }
-
-    protected Object a_lookupLink_nns(String name, Continuation cont)
-        throws NamingException {
-            a_processJunction_nns(name, cont);
-            return null;
-        }
-
-    protected NamingEnumeration a_list_nns(Continuation cont)
-        throws NamingException {
-            a_processJunction_nns(cont);
-            return null;
-        }
-    protected NamingEnumeration a_listBindings_nns(Continuation cont)
-        throws NamingException {
-            a_processJunction_nns(cont);
-            return null;
-        }
-
-    protected void a_bind_nns(String name, Object obj, Continuation cont)
-        throws NamingException {
-            a_processJunction_nns(name, cont);
-        }
-
-    protected void a_rebind_nns(String name, Object obj, Continuation cont)
-        throws NamingException {
-            a_processJunction_nns(name, cont);
-        }
-
-    protected void a_unbind_nns(String name, Continuation cont)
-        throws NamingException {
-            a_processJunction_nns(name, cont);
-        }
-
-    protected Context a_createSubcontext_nns(String name, Continuation cont)
-        throws NamingException {
-            a_processJunction_nns(name, cont);
-            return null;
-        }
-
-    protected void a_destroySubcontext_nns(String name, Continuation cont)
-        throws NamingException {
-            a_processJunction_nns(name, cont);
-        }
-
-    protected void a_rename_nns(String oldname, Name newname, Continuation cont)
-        throws NamingException {
-            a_processJunction_nns(oldname, cont);
-        }
-
-    protected NameParser a_getNameParser_nns(Continuation cont)
-        throws NamingException {
-            a_processJunction_nns(cont);
-            return null;
-        }
-
-
-
-    protected boolean isEmpty(String name) {
-        return name == null || name.equals("");
-    }
-
-// ------ implementations of c_  and c_*_nns methods using
-// ------ the corresponding a_ and a_*_nns methods
-
-    /* Equivalent to methods in  Context interface */
-
-    protected Object c_lookup(Name name, Continuation cont)
-        throws NamingException {
-            Object ret = null;
-            if (resolve_to_penultimate_context(name, cont)) {
-                ret = a_lookup(name.toString(), cont);
-                if (ret != null && ret instanceof LinkRef) {
-                    cont.setContinue(ret, name, this);
-                    ret = null;
-                }
-            }
-            return ret;
-        }
-
-    protected Object c_lookupLink(Name name, Continuation cont)
-        throws NamingException {
-            if (resolve_to_penultimate_context(name, cont)) {
-                return a_lookupLink(name.toString(), cont);
-            }
-            return null;
-        }
-
-    protected NamingEnumeration c_list(Name name,
-        Continuation cont) throws NamingException {
-            if (resolve_to_context(name, cont)) {
-                return a_list(cont);
-            }
-            return null;
-        }
-
-    protected NamingEnumeration c_listBindings(Name name,
-        Continuation cont) throws NamingException {
-            if (resolve_to_context(name, cont)) {
-                return a_listBindings(cont);
-            }
-            return null;
-        }
-
-    protected void c_bind(Name name, Object obj, Continuation cont)
-        throws NamingException {
-            if (resolve_to_penultimate_context(name, cont))
-                a_bind(name.toString(), obj, cont);
-        }
-
-    protected void c_rebind(Name name, Object obj, Continuation cont)
-        throws NamingException {
-            if (resolve_to_penultimate_context(name, cont))
-                a_rebind(name.toString(), obj, cont);
-        }
-
-    protected void c_unbind(Name name, Continuation cont)
-        throws NamingException {
-            if (resolve_to_penultimate_context(name, cont))
-                a_unbind(name.toString(), cont);
-        }
-
-    protected void c_destroySubcontext(Name name, Continuation cont)
-        throws NamingException {
-            if (resolve_to_penultimate_context(name, cont))
-                a_destroySubcontext(name.toString(), cont);
-        }
-
-    protected Context c_createSubcontext(Name name,
-        Continuation cont) throws NamingException {
-            if (resolve_to_penultimate_context(name, cont))
-                return a_createSubcontext(name.toString(), cont);
-            else
-                return null;
-        }
-
-    protected void c_rename(Name oldname, Name newname,
-        Continuation cont) throws NamingException {
-            if (resolve_to_penultimate_context(oldname, cont))
-                 a_rename(oldname.toString(), newname, cont);
-        }
-
-    protected NameParser c_getNameParser(Name name,
-        Continuation cont) throws NamingException {
-            if (resolve_to_context(name, cont))
-                return a_getNameParser(cont);
-            return null;
-        }
-
-    /* The following are overridden only for AtomicContexts.
-     * AtomicContext is used by PartialCompositeDirContext and ComponentDirContext
-     * in the inheritance tree to make use of methods in
-     * PartialCompositeContext and ComponentContext. We only want to use the
-     * atomic forms when we're actually an atomic context.
-     */
-
-    /* From ComponentContext */
-
-    protected Object c_resolveIntermediate_nns(Name name, Continuation cont)
-        throws NamingException {
-            if (_contextType == _ATOMIC) {
-                Object ret = null;
-                if (resolve_to_penultimate_context_nns(name, cont)) {
-                    ret = a_resolveIntermediate_nns(name.toString(), cont);
-                    if (ret != null && ret instanceof LinkRef) {
-                        cont.setContinue(ret, name, this);
-                        ret = null;
-                    }
-                }
-                return ret;
-            } else {
-                // use ComponentContext
-                return super.c_resolveIntermediate_nns(name, cont);
-            }
-        }
-
-    /* Equivalent to methods in Context interface for nns */
-
-    protected Object c_lookup_nns(Name name, Continuation cont)
-        throws NamingException {
-            if (_contextType == _ATOMIC) {
-                Object ret = null;
-                if (resolve_to_penultimate_context_nns(name, cont)) {
-                    ret = a_lookup_nns(name.toString(), cont);
-                    if (ret != null && ret instanceof LinkRef) {
-                        cont.setContinue(ret, name, this);
-                        ret = null;
-                    }
-                }
-                return ret;
-            } else {
-                return super.c_lookup_nns(name, cont);
-            }
-        }
-
-    protected Object c_lookupLink_nns(Name name, Continuation cont)
-        throws NamingException {
-            if (_contextType == _ATOMIC) {
-                // %%% check logic
-                resolve_to_nns_and_continue(name, cont);
-                return null;
-            } else {
-                // use ComponentContext
-                return super.c_lookupLink_nns(name, cont);
-            }
-        }
-
-    protected NamingEnumeration c_list_nns(Name name,
-        Continuation cont) throws NamingException {
-            if (_contextType == _ATOMIC) {
-                resolve_to_nns_and_continue(name, cont);
-                return null;
-            } else {
-                // use ComponentContext
-                return super.c_list_nns(name, cont);
-            }
-        }
-
-    protected NamingEnumeration c_listBindings_nns(Name name,
-        Continuation cont) throws NamingException {
-            if (_contextType == _ATOMIC) {
-                resolve_to_nns_and_continue(name, cont);
-                return null;
-            } else {
-                // use ComponentContext
-                return super.c_list_nns(name, cont);
-            }
-        }
-
-    protected void c_bind_nns(Name name, Object obj, Continuation cont)
-        throws NamingException {
-            if (_contextType == _ATOMIC) {
-                if (resolve_to_penultimate_context_nns(name, cont))
-                    a_bind_nns(name.toString(), obj, cont);
-            } else {
-                // use ComponentContext
-                super.c_bind_nns(name, obj, cont);
-            }
-        }
-
-    protected void c_rebind_nns(Name name, Object obj, Continuation cont)
-        throws NamingException {
-            if (_contextType == _ATOMIC) {
-                if (resolve_to_penultimate_context_nns(name, cont))
-                    a_rebind_nns(name.toString(), obj, cont);
-            } else {
-                // use ComponentContext
-                super.c_rebind_nns(name, obj, cont);
-            }
-        }
-
-    protected void c_unbind_nns(Name name, Continuation cont)
-        throws NamingException {
-            if (_contextType == _ATOMIC) {
-                if (resolve_to_penultimate_context_nns(name, cont))
-                    a_unbind_nns(name.toString(), cont);
-            } else {
-                // use ComponentContext
-                super.c_unbind_nns(name, cont);
-            }
-        }
-
-    protected Context c_createSubcontext_nns(Name name,
-        Continuation cont) throws NamingException {
-            if (_contextType == _ATOMIC) {
-                if (resolve_to_penultimate_context_nns(name, cont))
-                    return a_createSubcontext_nns(name.toString(), cont);
-                else
-                    return null;
-            } else {
-                // use ComponentContext
-                return super.c_createSubcontext_nns(name, cont);
-            }
-        }
-
-    protected void c_destroySubcontext_nns(Name name, Continuation cont)
-        throws NamingException {
-            if (_contextType == _ATOMIC) {
-                if (resolve_to_penultimate_context_nns(name, cont))
-                    a_destroySubcontext_nns(name.toString(), cont);
-            } else {
-                // use ComponentContext
-                super.c_destroySubcontext_nns(name, cont);
-            }
-        }
-
-    protected void c_rename_nns(Name oldname, Name newname, Continuation cont)
-        throws NamingException {
-            if (_contextType == _ATOMIC) {
-                if (resolve_to_penultimate_context_nns(oldname, cont))
-                    a_rename_nns(oldname.toString(), newname, cont);
-            } else {
-                // use ComponentContext
-                super.c_rename_nns(oldname, newname, cont);
-            }
-        }
-
-    protected NameParser c_getNameParser_nns(Name name, Continuation cont)
-        throws NamingException {
-            if (_contextType == _ATOMIC) {
-                resolve_to_nns_and_continue(name, cont);
-                return null;
-            } else {
-                // use COmponentContext
-                return super.c_getNameParser_nns(name, cont);
-            }
-        }
-
-// --------------    internal methods used by this class
-
-    /* Handles nns for junctions */
-    /**
-      * This function is used when implementing a naming system that
-      * supports junctions.  For example, when the a_bind_nns(name, newobj)
-      * method is invoked, that means the caller is attempting to bind the
-      * object 'newobj' to the nns of 'name'.  For context that supports
-      * junctions, 'name' names a junction and is pointing to the root
-      * of another naming system, which in turn might have an nns.
-      * This means that a_bind_nns() should first resolve 'name' and attempt to
-      * continue the operation in the context named by 'name'.  (i.e. bind
-      * to the nns of the context named by 'name').
-      * If name is already empty, then throw NameNotFoundException because
-      * this context by default does not have any nns.
-      */
-    protected void a_processJunction_nns(String name, Continuation cont)
-        throws NamingException {
-            if (name.equals("")) {
-                NameNotFoundException e = new NameNotFoundException();
-                cont.setErrorNNS(this, name);
-                throw cont.fillInException(e);
-            }
-            try {
-                // lookup name to continue operation in nns
-                Object target = a_lookup(name, cont);
-                if (cont.isContinue())
-                    cont.appendRemainingComponent("");  // add nns back
-                else {
-                    cont.setContinueNNS(target, name, this);
-                }
-            } catch (NamingException e) {
-                e.appendRemainingComponent(""); // add nns back
-                throw e;
-            }
-        }
-
-    /**
-      * This function is used when implementing a naming system that
-      * supports junctions.  For example, when the a_list_nns(newobj)
-      * method is invoked, that means the caller is attempting to list the
-      * the nns context of of this context.  For a context that supports
-      * junctions, it by default does not have any nns.  Consequently,
-      * a NameNotFoundException is thrown.
-      */
-    protected void a_processJunction_nns(Continuation cont) throws NamingException {
-
-        // Construct a new Reference that contains this context.
-        RefAddr addr = new RefAddr("nns") {
-            public Object getContent() {
-                return AtomicContext.this;
-            }
-            private static final long serialVersionUID = 3449785852664978312L;
-        };
-        Reference ref = new Reference("java.lang.Object", addr);
-
-        // Set continuation leave it to PartialCompositeContext.getPCContext()
-        // to throw the exception.
-        // Do not use setContinueNNS() because we've are
-        // setting relativeResolvedName to "/".
-        cont.setContinue(ref, _NNS_NAME, this);
-    }
-
-    /* *********** core resolution routines ******************* */
-
-    /** Resolve to context named by 'name'.
-      * Returns true if at named context (i.e. 'name' is empty name).
-      * Returns false otherwise, and sets Continuation on parts of 'name'
-      * not yet resolved.
-      */
-    protected boolean resolve_to_context(Name name, Continuation cont)
-    throws NamingException {
-        String target = name.toString();
-
-
-        StringHeadTail ht = c_parseComponent(target, cont);
-        String tail = ht.getTail();
-        String head = ht.getHead();
-
-        if (debug > 0)
-            System.out.println("RESOLVE TO CONTEXT(" + target + ") = {" +
-                               head + ", " + tail + "}");
-
-        if (head == null) {
-            // something is wrong; no name at all
-            InvalidNameException e = new InvalidNameException();
-            throw cont.fillInException(e);
-        }
-        if (!isEmpty(head)) {
-            // if there is head is a non-empty name
-            // this means more resolution to be done
-            try {
-                Object headCtx = a_lookup(head, cont);
-//              System.out.println("answer " + headCtx);
-                if (headCtx != null)
-                    cont.setContinue(headCtx, head, this, (tail == null ? "" : tail));
-                else if (cont.isContinue())
-                    cont.appendRemainingComponent(tail);
-            } catch (NamingException e) {
-                e.appendRemainingComponent(tail);
-                throw e;
-            }
-        } else {
-            cont.setSuccess();  // clear
-            return true;
-        }
-        return false;
-    }
-
-    /**
-      * Resolves to penultimate context named by 'name'.
-      * Returns true if penultimate context has been reached (i.e. name
-      * only has one atomic component left).
-      * Returns false otherwise, and sets Continuation to parts of name
-      * not yet resolved.
-      */
-    protected boolean resolve_to_penultimate_context(Name name, Continuation cont)
-    throws NamingException {
-        String target = name.toString();
-
-        if (debug > 0)
-            System.out.println("RESOLVE TO PENULTIMATE" + target);
-
-        StringHeadTail ht = c_parseComponent(target, cont);
-        String tail = ht.getTail();
-        String head = ht.getHead();
-        if (head == null) {
-            // something is wrong; no name at all
-            InvalidNameException e = new InvalidNameException();
-            throw cont.fillInException(e);
-        }
-
-        if (!isEmpty(tail)) {
-            // more components; hence not at penultimate context yet
-            try {
-                Object headCtx = a_lookup(head, cont);
-                if (headCtx != null)
-                    cont.setContinue(headCtx, head, this, tail);
-                else if (cont.isContinue())
-                    cont.appendRemainingComponent(tail);
-            } catch (NamingException e) {
-                e.appendRemainingComponent(tail);
-                throw e;
-            }
-        } else {
-            // already at penultimate context
-            cont.setSuccess();  // clear
-            return true;
-        }
-        return false;
-    }
-
-    /**
-      * This function is similar to resolve_to_penultimate_context()
-      * except it should only be called by the nns() functions.
-      * This function fixes any exception or continuations so that
-      * it will have the proper nns name.
-      */
-    protected boolean resolve_to_penultimate_context_nns(Name name,
-                                                         Continuation cont)
-        throws NamingException {
-            try {
-        if (debug > 0)
-            System.out.println("RESOLVE TO PENULTIMATE NNS" + name.toString());
-                boolean answer = resolve_to_penultimate_context(name, cont);
-
-                // resolve_to_penultimate_context() only calls a_lookup().
-                // Any continuation it sets is lacking the nns, so
-                // we need to add it back
-                if (cont.isContinue())
-                    cont.appendRemainingComponent("");
-
-                return answer;
-            } catch (NamingException e) {
-                // resolve_to_penultimate_context() only calls a_lookup().
-                // Any exceptions it throws is lacking the nns, so
-                // we need to add it back.
-                e.appendRemainingComponent("");
-                throw e;
-            }
-        }
-
-    /**
-      * Resolves to nns associated with 'name' and set Continuation
-      * to the result.
-      */
-    protected void resolve_to_nns_and_continue(Name name, Continuation cont)
-        throws NamingException {
-        if (debug > 0)
-            System.out.println("RESOLVE TO NNS AND CONTINUE" + name.toString());
-
-        if (resolve_to_penultimate_context_nns(name, cont)) {
-            Object nns = a_lookup_nns(name.toString(), cont);
-            if (nns != null)
-                cont.setContinue(nns, name, this);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/toolkit/ctx/AtomicDirContext.java b/ojluni/src/main/java/com/sun/jndi/toolkit/ctx/AtomicDirContext.java
deleted file mode 100755
index b18795a..0000000
--- a/ojluni/src/main/java/com/sun/jndi/toolkit/ctx/AtomicDirContext.java
+++ /dev/null
@@ -1,384 +0,0 @@
-/*
- * Copyright (c) 1999, 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.jndi.toolkit.ctx;
-
-import javax.naming.*;
-import javax.naming.directory.*;
-import javax.naming.spi.ResolveResult;
-
-/**
- * Direct subclasses of AtomicDirContext must provide implementations for
- * the abstract a_ DirContext methods, and override the a_ Context methods
- * (which are no longer abstract because they have been overriden by
- * PartialCompositeDirContext with dummy implementations).
- *
- * If the subclass implements the notion of implicit nns,
- * it must override the a_*_nns DirContext and Context methods as well.
- *
- * @author Rosanna Lee
- *
- */
-
-public abstract class AtomicDirContext extends ComponentDirContext {
-
-    protected AtomicDirContext() {
-        _contextType = _ATOMIC;
-    }
-
-// ------ Abstract methods whose implementations come from subclass
-
-    protected abstract Attributes a_getAttributes(String name, String[] attrIds,
-                                                    Continuation cont)
-        throws NamingException;
-
-    protected abstract void a_modifyAttributes(String name, int mod_op,
-                                               Attributes attrs,
-                                               Continuation cont)
-        throws NamingException;
-
-    protected abstract void a_modifyAttributes(String name,
-                                               ModificationItem[] mods,
-                                               Continuation cont)
-        throws NamingException;
-
-    protected abstract void a_bind(String name, Object obj,
-                                   Attributes attrs,
-                                   Continuation cont)
-        throws NamingException;
-
-    protected abstract void a_rebind(String name, Object obj,
-                                     Attributes attrs,
-                                     Continuation cont)
-        throws NamingException;
-
-    protected abstract DirContext a_createSubcontext(String name,
-                                                    Attributes attrs,
-                                                    Continuation cont)
-        throws NamingException;
-
-    protected abstract NamingEnumeration a_search(Attributes matchingAttributes,
-                                                  String[] attributesToReturn,
-                                                  Continuation cont)
-        throws NamingException;
-
-    protected abstract NamingEnumeration a_search(String name,
-                                                  String filterExpr,
-                                                  Object[] filterArgs,
-                                                  SearchControls cons, Continuation cont)
-        throws NamingException;
-
-    protected abstract NamingEnumeration a_search(String name,
-                                                  String filter,
-                                                  SearchControls cons, Continuation cont)
-        throws NamingException;
-
-    protected abstract DirContext a_getSchema(Continuation cont)
-        throws NamingException;
-
-    protected abstract DirContext a_getSchemaClassDefinition(Continuation cont)
-        throws NamingException;
-
-// ------ Methods that need to be overridden by subclass
-
-    //  default implementations of a_*_nns methods
-
-    // The following methods are called when the DirContext methods
-    // are invoked with a name that has a trailing slash.
-    // For naming systems that support implicit nns,
-    // the trailing slash signifies the implicit nns.
-    // For such naming systems, override these a_*_nns methods.
-    //
-    // For naming systems that support junctions (explicit nns),
-    // the trailing slash is meaningless because a junction does not
-    // have an implicit nns.  The default implementation here
-    // throws a NameNotFoundException for such names.
-    // If a context wants to accept a trailing slash as having
-    // the same meaning as the same name without a trailing slash,
-    // then it should override these a_*_nns methods.
-
-    protected Attributes a_getAttributes_nns(String name,
-                                               String[] attrIds,
-                                               Continuation cont)
-        throws NamingException  {
-            a_processJunction_nns(name, cont);
-            return null;
-        }
-
-    protected void a_modifyAttributes_nns(String name, int mod_op,
-                                          Attributes attrs,
-                                          Continuation cont)
-        throws NamingException {
-            a_processJunction_nns(name, cont);
-        }
-
-    protected void a_modifyAttributes_nns(String name,
-                                          ModificationItem[] mods,
-                                          Continuation cont)
-        throws NamingException {
-            a_processJunction_nns(name, cont);
-        }
-
-    protected void a_bind_nns(String name, Object obj,
-                              Attributes attrs,
-                              Continuation cont)
-        throws NamingException  {
-            a_processJunction_nns(name, cont);
-        }
-
-    protected void a_rebind_nns(String name, Object obj,
-                                Attributes attrs,
-                                Continuation cont)
-        throws NamingException  {
-            a_processJunction_nns(name, cont);
-        }
-
-    protected DirContext a_createSubcontext_nns(String name,
-                                               Attributes attrs,
-                                               Continuation cont)
-        throws NamingException  {
-            a_processJunction_nns(name, cont);
-            return null;
-        }
-
-    protected NamingEnumeration a_search_nns(Attributes matchingAttributes,
-                                             String[] attributesToReturn,
-                                             Continuation cont)
-        throws NamingException {
-            a_processJunction_nns(cont);
-            return null;
-        }
-
-    protected NamingEnumeration a_search_nns(String name,
-                                             String filterExpr,
-                                             Object[] filterArgs,
-                                             SearchControls cons,
-                                             Continuation cont)
-        throws NamingException {
-            a_processJunction_nns(name, cont);
-            return null;
-        }
-
-    protected NamingEnumeration a_search_nns(String name,
-                                             String filter,
-                                             SearchControls cons,
-                                             Continuation cont)
-        throws NamingException  {
-            a_processJunction_nns(name, cont);
-            return null;
-        }
-
-    protected DirContext a_getSchema_nns(Continuation cont) throws NamingException {
-        a_processJunction_nns(cont);
-        return null;
-    }
-
-    protected DirContext a_getSchemaDefinition_nns(Continuation cont)
-        throws NamingException {
-            a_processJunction_nns(cont);
-            return null;
-        }
-
-// ------- implementations of c_ DirContext methods using corresponding
-// ------- a_ and a_*_nns methods
-
-    protected Attributes c_getAttributes(Name name, String[] attrIds,
-                                           Continuation cont)
-        throws NamingException  {
-            if (resolve_to_penultimate_context(name, cont))
-                return a_getAttributes(name.toString(), attrIds, cont);
-            return null;
-        }
-
-    protected void c_modifyAttributes(Name name, int mod_op,
-                                      Attributes attrs, Continuation cont)
-        throws NamingException {
-            if (resolve_to_penultimate_context(name, cont))
-                a_modifyAttributes(name.toString(), mod_op, attrs, cont);
-        }
-
-    protected void c_modifyAttributes(Name name, ModificationItem[] mods,
-                                      Continuation cont)
-        throws NamingException {
-            if (resolve_to_penultimate_context(name, cont))
-                a_modifyAttributes(name.toString(), mods, cont);
-        }
-
-    protected void c_bind(Name name, Object obj,
-                          Attributes attrs, Continuation cont)
-        throws NamingException  {
-            if (resolve_to_penultimate_context(name, cont))
-                a_bind(name.toString(), obj, attrs, cont);
-        }
-
-    protected void c_rebind(Name name, Object obj,
-                            Attributes attrs, Continuation cont)
-        throws NamingException  {
-            if (resolve_to_penultimate_context(name, cont))
-                a_rebind(name.toString(), obj, attrs, cont);
-        }
-
-    protected DirContext c_createSubcontext(Name name,
-                                           Attributes attrs,
-                                           Continuation cont)
-        throws NamingException  {
-            if (resolve_to_penultimate_context(name, cont))
-                return a_createSubcontext(name.toString(),
-                                          attrs, cont);
-            return null;
-        }
-
-    protected NamingEnumeration c_search(Name name,
-                                         Attributes matchingAttributes,
-                                         String[] attributesToReturn,
-                                         Continuation cont)
-        throws NamingException  {
-            if (resolve_to_context(name, cont))
-                return a_search(matchingAttributes, attributesToReturn, cont);
-            return null;
-        }
-
-    protected NamingEnumeration c_search(Name name,
-                                         String filter,
-                                         SearchControls cons, Continuation cont)
-        throws NamingException {
-            if (resolve_to_penultimate_context(name, cont))
-                return a_search(name.toString(), filter, cons, cont);
-            return null;
-        }
-
-    protected NamingEnumeration c_search(Name name,
-                                         String filterExpr,
-                                         Object[] filterArgs,
-                                         SearchControls cons, Continuation cont)
-        throws NamingException  {
-            if (resolve_to_penultimate_context(name, cont))
-                return a_search(name.toString(), filterExpr, filterArgs, cons, cont);
-            return null;
-        }
-
-    protected DirContext c_getSchema(Name name, Continuation cont)
-        throws NamingException  {
-            if (resolve_to_context(name, cont))
-                return a_getSchema(cont);
-            return null;
-        }
-
-    protected DirContext c_getSchemaClassDefinition(Name name, Continuation cont)
-        throws NamingException  {
-            if (resolve_to_context(name, cont))
-                return a_getSchemaClassDefinition(cont);
-            return null;
-        }
-
-    /* equivalent to methods in DirContext interface for nns */
-
-    protected Attributes c_getAttributes_nns(Name name, String[] attrIds,
-                                           Continuation cont)
-        throws NamingException  {
-            if (resolve_to_penultimate_context_nns(name, cont))
-                return a_getAttributes_nns(name.toString(), attrIds, cont);
-            return null;
-        }
-
-    protected void c_modifyAttributes_nns(Name name, int mod_op,
-                                          Attributes attrs, Continuation cont)
-        throws NamingException {
-            if (resolve_to_penultimate_context_nns(name, cont))
-                a_modifyAttributes_nns(name.toString(), mod_op, attrs, cont);
-        }
-
-    protected void c_modifyAttributes_nns(Name name, ModificationItem[] mods,
-                                      Continuation cont)
-        throws NamingException {
-            if (resolve_to_penultimate_context_nns(name, cont))
-                a_modifyAttributes_nns(name.toString(), mods, cont);
-        }
-
-    protected void c_bind_nns(Name name, Object obj,
-                              Attributes attrs, Continuation cont)
-        throws NamingException  {
-            if (resolve_to_penultimate_context_nns(name, cont))
-                a_bind_nns(name.toString(), obj, attrs, cont);
-        }
-
-    protected void c_rebind_nns(Name name, Object obj,
-                                Attributes attrs, Continuation cont)
-        throws NamingException  {
-            if (resolve_to_penultimate_context_nns(name, cont))
-                a_rebind_nns(name.toString(), obj, attrs, cont);
-        }
-
-    protected DirContext c_createSubcontext_nns(Name name,
-                                               Attributes attrs,
-                                               Continuation cont)
-        throws NamingException  {
-            if (resolve_to_penultimate_context_nns(name, cont))
-                return a_createSubcontext_nns(name.toString(), attrs, cont);
-            return null;
-        }
-
-    protected NamingEnumeration c_search_nns(Name name,
-                                         Attributes matchingAttributes,
-                                         String[] attributesToReturn,
-                                         Continuation cont)
-        throws NamingException  {
-            resolve_to_nns_and_continue(name, cont);
-            return null;
-        }
-
-    protected NamingEnumeration c_search_nns(Name name,
-                                         String filter,
-                                         SearchControls cons, Continuation cont)
-        throws NamingException {
-            if (resolve_to_penultimate_context_nns(name, cont))
-                return a_search_nns(name.toString(), filter, cons, cont);
-            return null;
-        }
-
-    protected NamingEnumeration c_search_nns(Name name,
-                                             String filterExpr,
-                                             Object[] filterArgs,
-                                             SearchControls cons,
-                                             Continuation cont)
-        throws NamingException  {
-            if (resolve_to_penultimate_context_nns(name, cont))
-                return a_search_nns(name.toString(), filterExpr, filterArgs,
-                                    cons, cont);
-            return null;
-        }
-
-    protected DirContext c_getSchema_nns(Name name, Continuation cont)
-        throws NamingException  {
-            resolve_to_nns_and_continue(name, cont);
-            return null;
-        }
-
-    protected DirContext c_getSchemaClassDefinition_nns(Name name, Continuation cont)
-        throws NamingException  {
-            resolve_to_nns_and_continue(name, cont);
-            return null;
-        }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/toolkit/ctx/ComponentContext.java b/ojluni/src/main/java/com/sun/jndi/toolkit/ctx/ComponentContext.java
deleted file mode 100755
index 0a9f706..0000000
--- a/ojluni/src/main/java/com/sun/jndi/toolkit/ctx/ComponentContext.java
+++ /dev/null
@@ -1,807 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-package com.sun.jndi.toolkit.ctx;
-
-import java.util.Hashtable;
-
-import javax.naming.*;
-import javax.naming.spi.ResolveResult;
-
-/**
-  * Provides implementation of p_* operations using
-  * c_* operations provided by subclasses.
-  *
-  * Clients: deal only with names for its own naming service.  Must
-  * provide implementations for c_* methods, and for p_parseComponent()
-  * and the c_*_nns methods if the defaults are not appropriate.
-  *
-  * @author Rosanna Lee
-  * @author Scott Seligman
-  */
-
-public abstract class ComponentContext extends PartialCompositeContext {
-    private static int debug = 0;
-
-    protected ComponentContext() {
-        _contextType = _COMPONENT;
-    }
-
-// ------ Abstract methods whose implementation are provided by subclass
-
-    /* Equivalent methods in Context interface */
-    protected abstract Object c_lookup(Name name, Continuation cont)
-        throws NamingException;
-    protected abstract Object c_lookupLink(Name name, Continuation cont)
-        throws NamingException;
-
-    protected abstract NamingEnumeration c_list(Name name,
-        Continuation cont) throws NamingException;
-    protected abstract NamingEnumeration c_listBindings(Name name,
-        Continuation cont) throws NamingException;
-    protected abstract void c_bind(Name name, Object obj, Continuation cont)
-        throws NamingException;
-    protected abstract void c_rebind(Name name, Object obj, Continuation cont)
-        throws NamingException;
-    protected abstract void c_unbind(Name name, Continuation cont)
-        throws NamingException;
-    protected abstract void c_destroySubcontext(Name name, Continuation cont)
-        throws NamingException;
-    protected abstract Context c_createSubcontext(Name name,
-        Continuation cont) throws NamingException;
-    protected abstract void c_rename(Name oldname, Name newname,
-        Continuation cont) throws NamingException;
-    protected abstract NameParser c_getNameParser(Name name, Continuation cont)
-        throws NamingException;
-
-// ------ Methods that may need to be overridden by subclass
-
-    /* Parsing method */
-    /**
-      * Determines which of the first components of 'name' belong
-      * to this naming system.
-      * If no components belong to this naming system, return
-      * the empty name (new CompositeName()) as the head,
-      * and the entire name as the tail.
-      *
-      * The default implementation supports strong separation.
-      * If the name is empty or if the first component is empty,
-      * head is the empty name and tail is the entire name.
-      * (This means that this context does not have any name to work with).
-      * Otherwise, it returns the first component as head, and the rest of
-      * the components as tail.
-      *
-      * Subclass should override this method according its own policies.
-      *
-      * For example, a weakly separated system with dynamic boundary
-      * determination would simply return as head 'name'.
-      * A weakly separated with static boundary
-      * determination would select the components in the front of 'name'
-      * that conform to some syntax rules.  (e.g. in X.500 syntax, perhaps
-      * select front components that have a equal sign).
-      * If none conforms, return an empty name.
-      */
-    protected HeadTail p_parseComponent(Name name, Continuation cont)
-        throws NamingException {
-        int separator;
-        // if no name to parse, or if we're already at boundary
-        if (name.isEmpty() ||  name.get(0).equals("")) {
-            separator = 0;
-        } else {
-            separator = 1;
-        }
-        Name head, tail;
-
-        if (name instanceof CompositeName) {
-            head = name.getPrefix(separator);
-            tail = name.getSuffix(separator);
-        } else {
-            // treat like compound name
-            head = new CompositeName().add(name.toString());
-            tail = null;
-        }
-
-        if (debug > 2) {
-            System.err.println("ORIG: " + name);
-            System.err.println("PREFIX: " + name);
-            System.err.println("SUFFIX: " + null);
-        }
-        return new HeadTail(head, tail);
-    }
-
-
-    /* Resolution method for supporting federation */
-
-    /**
-      * Resolves the nns for 'name' when the named context is acting
-      * as an intermediate context.
-      *
-      * For a system that supports only junctions, this would be
-      * equilvalent to
-      *         c_lookup(name, cont);
-      * because for junctions, an intermediate slash simply signifies
-      * a syntactic separator.
-      *
-      * For a system that supports only implicit nns, this would be
-      * equivalent to
-      *         c_lookup_nns(name, cont);
-      * because for implicit nns, a slash always signifies the implicit nns,
-      * regardless of whether it is intermediate or trailing.
-      *
-      * By default this method supports junctions, and also allows for an
-      * implicit nns to be dynamically determined through the use of the
-      * "nns" reference (see c_processJunction_nns()).
-      * Contexts that implement implicit nns directly should provide an
-      * appropriate override.
-      *
-      * A junction, by definition, is a binding of a name in one
-      * namespace to an object in another.  The default implementation
-      * of this method detects the crossover into another namespace
-      * using the following heuristic:  there is a junction when "name"
-      * resolves to a context that is not an instance of
-      * this.getClass().  Contexts supporting junctions for which this
-      * heuristic is inappropriate should override this method.
-      */
-    protected Object c_resolveIntermediate_nns(Name name, Continuation cont)
-        throws NamingException {
-            try {
-                final Object obj = c_lookup(name, cont);
-
-                // Do not append "" to Continuation 'cont' even if set
-                // because the intention is to ignore the nns
-
-                if (obj != null && getClass().isInstance(obj)) {
-                    // If "obj" is in the same type as this object, it must
-                    // not be a junction. Continue the lookup with "/".
-
-                    cont.setContinueNNS(obj, name, this);
-                    return null;
-
-                } else if (obj != null && !(obj instanceof Context)) {
-                    // obj is not even a context, so try to find its nns
-                    // dynamically by constructing a Reference containing obj.
-                    RefAddr addr = new RefAddr("nns") {
-                        public Object getContent() {
-                            return obj;
-                        }
-                        private static final long serialVersionUID =
-                            -8831204798861786362L;
-                    };
-                    Reference ref = new Reference("java.lang.Object", addr);
-
-                    // Resolved name has trailing slash to indicate nns
-                    CompositeName resName = (CompositeName)name.clone();
-                    resName.add(""); // add trailing slash
-
-                    // Set continuation leave it to
-                    // PartialCompositeContext.getPCContext() to throw CPE.
-                    // Do not use setContinueNNS() because we've already
-                    // consumed "/" (i.e., moved it to resName).
-
-                    cont.setContinue(ref, resName, this);
-                    return null;
-                } else {
-                    // Consume "/" and continue
-                    return obj;
-                }
-
-            } catch (NamingException e) {
-                e.appendRemainingComponent(""); // add nns back
-                throw e;
-            }
-        }
-
-    /* Equivalent of Context Methods for supporting nns */
-
-    // The following methods are called when the Context methods
-    // are invoked with a name that has a trailing slash.
-    // For naming systems that support implicit nns,
-    // the trailing slash signifies the implicit nns.
-    // For such naming systems, override these c_*_nns methods.
-    //
-    // For naming systems that do not support implicit nns, the
-    // default implementations here throw an exception.  See
-    // c_processJunction_nns() for details.
-
-    protected Object c_lookup_nns(Name name, Continuation cont)
-        throws NamingException {
-            c_processJunction_nns(name, cont);
-            return null;
-        }
-
-    protected Object c_lookupLink_nns(Name name, Continuation cont)
-        throws NamingException {
-            c_processJunction_nns(name, cont);
-            return null;
-        }
-
-    protected NamingEnumeration c_list_nns(Name name,
-        Continuation cont) throws NamingException {
-            c_processJunction_nns(name, cont);
-            return null;
-        }
-
-    protected NamingEnumeration c_listBindings_nns(Name name,
-        Continuation cont) throws NamingException {
-            c_processJunction_nns(name, cont);
-            return null;
-        }
-
-    protected void c_bind_nns(Name name, Object obj, Continuation cont)
-        throws NamingException {
-            c_processJunction_nns(name, cont);
-        }
-
-    protected void c_rebind_nns(Name name, Object obj, Continuation cont)
-        throws NamingException {
-            c_processJunction_nns(name, cont);
-        }
-
-    protected void c_unbind_nns(Name name, Continuation cont)
-        throws NamingException {
-            c_processJunction_nns(name, cont);
-        }
-
-    protected Context c_createSubcontext_nns(Name name,
-        Continuation cont) throws NamingException {
-            c_processJunction_nns(name, cont);
-            return null;
-        }
-
-    protected void c_destroySubcontext_nns(Name name, Continuation cont)
-        throws NamingException {
-            c_processJunction_nns(name, cont);
-        }
-
-
-    protected void c_rename_nns(Name oldname, Name newname, Continuation cont)
-        throws NamingException {
-            c_processJunction_nns(oldname, cont);
-        }
-
-    protected NameParser c_getNameParser_nns(Name name, Continuation cont)
-        throws NamingException {
-            c_processJunction_nns(name, cont);
-            return null;
-        }
-
-// ------ internal method used by ComponentContext
-
-    /**
-     * Locates the nns using the default policy.  This policy fully
-     * handles junctions, but otherwise throws an exception when an
-     * attempt is made to resolve an implicit nns.
-     *
-     * The default policy is as follows:  If there is a junction in
-     * the namespace, then resolve to the junction and continue the
-     * operation there (thus deferring to that context to find its own
-     * nns).  Otherwise, resolve as far as possible and then throw
-     * CannotProceedException with the resolved object being a reference:
-     * the address type is "nns", and the address contents is this
-     * context.
-     *
-     * For example, when c_bind_nns(name, obj, ...) is invoked, the
-     * caller is attempting to bind the object "obj" to the nns of
-     * "name".  If "name" is a junction, it names an object in another
-     * naming system that (presumably) has an nns.  c_bind_nns() will
-     * first resolve "name" to a context and then attempt to continue
-     * the bind operation there, (thus binding to the nns of the
-     * context named by "name").  If "name" is empty then throw an
-     * exception, since this context does not by default support an
-     * implicit nns.
-     *
-     * To implement a context that does support an implicit nns, it is
-     * necessary to override this default policy.  This is done by
-     * overriding the c_*_nns() methods (which each call this method
-     * by default).
-     */
-    protected void c_processJunction_nns(Name name, Continuation cont)
-            throws NamingException
-    {
-        if (name.isEmpty()) {
-            // Construct a new Reference that contains this context.
-            RefAddr addr = new RefAddr("nns") {
-                public Object getContent() {
-                    return ComponentContext.this;
-                }
-                private static final long serialVersionUID =
-                    -1389472957988053402L;
-            };
-            Reference ref = new Reference("java.lang.Object", addr);
-
-            // Set continuation leave it to PartialCompositeContext.getPCContext()
-            // to throw the exception.
-            // Do not use setContinueNNS() because we've are
-            // setting relativeResolvedName to "/".
-            cont.setContinue(ref, _NNS_NAME, this);
-            return;
-        }
-
-        try {
-            // lookup name to continue operation in nns
-            Object target = c_lookup(name, cont);
-            if (cont.isContinue())
-                cont.appendRemainingComponent("");
-            else {
-                cont.setContinueNNS(target, name, this);
-            }
-        } catch (NamingException e) {
-            e.appendRemainingComponent(""); // add nns back
-            throw e;
-        }
-    }
-
-    protected static final byte USE_CONTINUATION = 1;
-    protected static final byte TERMINAL_COMPONENT = 2;
-    protected static final byte TERMINAL_NNS_COMPONENT = 3;
-
-    /**
-      * Determine whether 'name' is a terminal component in
-      * this naming system.
-      * If so, return status indicating so, so that caller
-      * can perform context operation on this name.
-      *
-      * If not, then the first component(s) of 'name' names
-      * an intermediate context.  In that case, resolve these components
-      * and set Continuation to be the object named.
-      *
-      * see test cases at bottom of file.
-      */
-
-    protected HeadTail p_resolveIntermediate(Name name, Continuation cont)
-        throws NamingException {
-        int ret = USE_CONTINUATION;
-        cont.setSuccess();      // initialize
-        HeadTail p = p_parseComponent(name, cont);
-        Name tail = p.getTail();
-        Name head = p.getHead();
-
-        if (tail == null || tail.isEmpty()) {
-//System.out.println("terminal : " + head);
-            ret = TERMINAL_COMPONENT;
-        } else if (!tail.get(0).equals("")) {
-            // tail does not begin with "/"
-/*
-            if (head.isEmpty()) {
-                // Context could not find name that it can use
-                // illegal syntax error or name not found
-//System.out.println("nnf exception : " + head);
-                NamingException e = new NameNotFoundException();
-                cont.setError(this, name);
-                throw cont.fillInException(e);
-            } else  {
-*/
-                // head is being used as intermediate context,
-                // resolve head and set Continuation with tail
-                try {
-                    Object obj = c_resolveIntermediate_nns(head, cont);
-//System.out.println("resInter : " + head + "=" + obj);
-                    if (obj != null)
-                        cont.setContinue(obj, head, this, tail);
-                    else if (cont.isContinue()) {
-                        checkAndAdjustRemainingName(cont.getRemainingName());
-                        cont.appendRemainingName(tail);
-                    }
-                } catch (NamingException e) {
-                    checkAndAdjustRemainingName(e.getRemainingName());
-                    e.appendRemainingName(tail);
-                    throw e;
-                }
-/*
-            }
-*/
-        } else {
-            // tail begins with "/"
-            if (tail.size() == 1) {
-                ret = TERMINAL_NNS_COMPONENT;
-//System.out.println("terminal_nns : " + head);
-            } else if (head.isEmpty() || isAllEmpty(tail)) {
-                // resolve nns of head and continue with tail.getSuffix(1)
-                Name newTail = tail.getSuffix(1);
-                try {
-                    Object obj = c_lookup_nns(head, cont);
-//System.out.println("lookup_nns : " + head + "=" + obj);
-                    if (obj != null)
-                        cont.setContinue(obj, head, this, newTail);
-                    else if (cont.isContinue()) {
-                        cont.appendRemainingName(newTail);
-//                      Name rname = cont.getRemainingName();
-//System.out.println("cont.rname" + rname);
-                    }
-                } catch (NamingException e) {
-                    e.appendRemainingName(newTail);
-                    throw e;
-                }
-            } else {
-                // head is being used as intermediate context
-                // resolve and set continuation to tail
-                try {
-                    Object obj = c_resolveIntermediate_nns(head, cont);
-//System.out.println("resInter2 : " + head + "=" + obj);
-                    if (obj != null)
-                        cont.setContinue(obj, head, this, tail);
-                    else if (cont.isContinue()) {
-                        checkAndAdjustRemainingName(cont.getRemainingName());
-                        cont.appendRemainingName(tail);
-                    }
-                } catch (NamingException e) {
-                    checkAndAdjustRemainingName(e.getRemainingName());
-                    e.appendRemainingName(tail);
-                    throw e;
-                }
-            }
-        }
-
-        p.setStatus(ret);
-        return p;
-    }
-
-    // When c_resolveIntermediate_nns() or c_lookup_nns() sets up
-    // its continuation, to indicate "nns", it appends an empty
-    // component to the remaining name (e.g. "eng/"). If last
-    // component of remaining name is empty; delete empty component
-    // before appending tail so that composition of the names work
-    // correctly. For example, when merging "eng/" and "c.b.a", we want
-    // the result to be "eng/c.b.a" because the trailing slash in eng
-    // is extraneous.  When merging "" and "c.b.a", we want the result
-    // to be "/c.b.a" and so must keep the trailing slash (empty name).
-    void checkAndAdjustRemainingName(Name rname) throws InvalidNameException {
-        int count;
-        if (rname != null && (count=rname.size()) > 1 &&
-            rname.get(count-1).equals("")) {
-            rname.remove(count-1);
-        }
-    }
-
-    // Returns true if n contains only empty components
-    protected boolean isAllEmpty(Name n) {
-        int count = n.size();
-        for (int i =0; i < count; i++ ) {
-            if (!n.get(i).equals("")) {
-                return false;
-            }
-        }
-        return true;
-    }
-
-
-
-// ------ implementations of p_ Resolver and Context methods using
-// ------ corresponding c_ and c_*_nns methods
-
-
-    /* implementation for Resolver method */
-
-    protected ResolveResult p_resolveToClass(Name name,
-                                             Class contextType,
-                                             Continuation cont)
-            throws NamingException {
-
-        if (contextType.isInstance(this)) {
-            cont.setSuccess();
-            return (new ResolveResult(this, name));
-        }
-
-        ResolveResult ret = null;
-        HeadTail res = p_resolveIntermediate(name, cont);
-        switch (res.getStatus()) {
-        case TERMINAL_NNS_COMPONENT:
-            Object obj = p_lookup(name, cont);
-            if (!cont.isContinue() && contextType.isInstance(obj)) {
-                ret = new ResolveResult(obj, _EMPTY_NAME);
-            }
-            break;
-
-        case TERMINAL_COMPONENT:
-            cont.setSuccess();  // no contextType found; return null
-            break;
-
-        default:
-            /* USE_CONTINUATION */
-            /* pcont already set or exception thrown */
-            break;
-        }
-        return ret;
-    }
-
-    /* implementations of p_ Context methods */
-
-    protected Object p_lookup(Name name, Continuation cont) throws NamingException {
-        Object ret = null;
-        HeadTail res = p_resolveIntermediate(name, cont);
-        switch (res.getStatus()) {
-            case TERMINAL_NNS_COMPONENT:
-                ret = c_lookup_nns(res.getHead(), cont);
-                if (ret instanceof LinkRef) {
-                    cont.setContinue(ret, res.getHead(), this);
-                    ret = null;
-                }
-                break;
-
-            case TERMINAL_COMPONENT:
-                ret = c_lookup(res.getHead(), cont);
-                if (ret instanceof LinkRef) {
-                    cont.setContinue(ret, res.getHead(), this);
-                    ret = null;
-                }
-                break;
-
-            default:
-                /* USE_CONTINUATION */
-                /* pcont already set or exception thrown */
-                break;
-        }
-        return ret;
-    }
-
-    protected NamingEnumeration p_list(Name name, Continuation cont)
-        throws NamingException {
-        NamingEnumeration ret = null;
-        HeadTail res = p_resolveIntermediate(name, cont);
-        switch (res.getStatus()) {
-            case TERMINAL_NNS_COMPONENT:
-                if (debug > 0)
-                    System.out.println("c_list_nns(" + res.getHead() + ")");
-                ret = c_list_nns(res.getHead(), cont);
-                break;
-
-            case TERMINAL_COMPONENT:
-                if (debug > 0)
-                    System.out.println("c_list(" + res.getHead() + ")");
-                ret = c_list(res.getHead(), cont);
-                break;
-
-            default:
-                /* USE_CONTINUATION */
-                /* cont already set or exception thrown */
-                break;
-        }
-        return ret;
-    }
-
-    protected NamingEnumeration p_listBindings(Name name, Continuation cont) throws
-        NamingException {
-        NamingEnumeration ret = null;
-        HeadTail res = p_resolveIntermediate(name, cont);
-        switch (res.getStatus()) {
-            case TERMINAL_NNS_COMPONENT:
-                ret = c_listBindings_nns(res.getHead(), cont);
-                break;
-
-            case TERMINAL_COMPONENT:
-                ret = c_listBindings(res.getHead(), cont);
-                break;
-
-            default:
-                /* USE_CONTINUATION */
-                /* cont already set or exception thrown */
-                break;
-        }
-        return ret;
-    }
-
-    protected void p_bind(Name name, Object obj, Continuation cont) throws
-        NamingException {
-        HeadTail res = p_resolveIntermediate(name, cont);
-        switch (res.getStatus()) {
-            case TERMINAL_NNS_COMPONENT:
-                c_bind_nns(res.getHead(), obj, cont);
-                break;
-
-            case TERMINAL_COMPONENT:
-                c_bind(res.getHead(), obj, cont);
-                break;
-
-            default:
-                /* USE_CONTINUATION */
-                /* cont already set or exception thrown */
-                break;
-        }
-    }
-
-    protected void p_rebind(Name name, Object obj, Continuation cont) throws
-        NamingException {
-        HeadTail res = p_resolveIntermediate(name, cont);
-        switch (res.getStatus()) {
-            case TERMINAL_NNS_COMPONENT:
-                c_rebind_nns(res.getHead(), obj, cont);
-                break;
-
-            case TERMINAL_COMPONENT:
-                c_rebind(res.getHead(), obj, cont);
-                break;
-
-            default:
-                /* USE_CONTINUATION */
-                /* cont already set or exception thrown */
-                break;
-        }
-    }
-
-    protected void p_unbind(Name name, Continuation cont) throws
-        NamingException {
-        HeadTail res = p_resolveIntermediate(name, cont);
-        switch (res.getStatus()) {
-            case TERMINAL_NNS_COMPONENT:
-                c_unbind_nns(res.getHead(), cont);
-                break;
-
-            case TERMINAL_COMPONENT:
-                c_unbind(res.getHead(), cont);
-                break;
-
-            default:
-                /* USE_CONTINUATION */
-                /* cont already set or exception thrown */
-                break;
-        }
-    }
-
-    protected void p_destroySubcontext(Name name, Continuation cont) throws
-        NamingException {
-        HeadTail res = p_resolveIntermediate(name, cont);
-        switch (res.getStatus()) {
-            case TERMINAL_NNS_COMPONENT:
-                c_destroySubcontext_nns(res.getHead(), cont);
-                break;
-
-            case TERMINAL_COMPONENT:
-                c_destroySubcontext(res.getHead(), cont);
-                break;
-
-            default:
-                /* USE_CONTINUATION */
-                /* cont already set or exception thrown */
-                break;
-        }
-    }
-
-    protected Context p_createSubcontext(Name name, Continuation cont) throws
-        NamingException {
-            Context ret = null;
-        HeadTail res = p_resolveIntermediate(name, cont);
-        switch (res.getStatus()) {
-            case TERMINAL_NNS_COMPONENT:
-                ret = c_createSubcontext_nns(res.getHead(), cont);
-                break;
-
-            case TERMINAL_COMPONENT:
-                ret = c_createSubcontext(res.getHead(), cont);
-                break;
-
-            default:
-                /* USE_CONTINUATION */
-                /* cont already set or exception thrown */
-                break;
-        }
-        return ret;
-    }
-
-    protected void p_rename(Name oldName, Name newName, Continuation cont) throws
-        NamingException {
-        HeadTail res = p_resolveIntermediate(oldName, cont);
-        switch (res.getStatus()) {
-            case TERMINAL_NNS_COMPONENT:
-                c_rename_nns(res.getHead(), newName, cont);
-                break;
-
-            case TERMINAL_COMPONENT:
-                c_rename(res.getHead(), newName, cont);
-                break;
-
-            default:
-                /* USE_CONTINUATION */
-                /* cont already set or exception thrown */
-                break;
-        }
-    }
-
-    protected NameParser p_getNameParser(Name name, Continuation cont) throws
-        NamingException {
-        NameParser ret = null;
-        HeadTail res = p_resolveIntermediate(name, cont);
-        switch (res.getStatus()) {
-            case TERMINAL_NNS_COMPONENT:
-                ret = c_getNameParser_nns(res.getHead(), cont);
-                break;
-
-            case TERMINAL_COMPONENT:
-                ret = c_getNameParser(res.getHead(), cont);
-                break;
-
-            default:
-                /* USE_CONTINUATION */
-                /* cont already set or exception thrown */
-                break;
-        }
-        return ret;
-    }
-
-    protected Object p_lookupLink(Name name, Continuation cont)
-        throws NamingException {
-        Object ret = null;
-        HeadTail res = p_resolveIntermediate(name, cont);
-        switch (res.getStatus()) {
-            case TERMINAL_NNS_COMPONENT:
-                ret = c_lookupLink_nns(res.getHead(), cont);
-                break;
-
-            case TERMINAL_COMPONENT:
-                ret = c_lookupLink(res.getHead(), cont);
-                break;
-
-            default:
-                /* USE_CONTINUATION */
-                /* cont already set or exception thrown */
-                break;
-        }
-        return ret;
-    }
-}
-
-/*
- *      How p_resolveIntermediate() should behave for various test cases
-
-a.b/x   {a.b, x}
-        c_resolveIntermediate_nns(a.b)
-        continue(x)
-        {x,}
-        terminal(x)
-
-a.b/    {a.b, ""}
-        terminal_nns(a.b);
-
-a.b//
-        {a.b, ("", "")}
-        c_lookup_nns(a.b)
-        continue({""})
-        {,""}
-        terminal_nns({})
-
-/x      {{}, {"", x}}
-        c_lookup_nns({})
-        continue(x)
-        {x,}
-        terminal(x)
-
-//y     {{}, {"", "", y}}
-        c_lookup_nns({})
-        continue({"", y})
-        {{}, {"", y}}
-        c_lookup_nns({})
-        continue(y)
-        {y,}
-        terminal(y)
-
-a.b//y  {a.b, {"", y}}
-        c_resolveIntermediate_nns(a.b)
-        continue({"", y})
-        {{}, {"",y}}
-        c_lookup_nns({});
-        continue(y)
-        {y,}
-        terminal(y);
- *
- */
diff --git a/ojluni/src/main/java/com/sun/jndi/toolkit/ctx/ComponentDirContext.java b/ojluni/src/main/java/com/sun/jndi/toolkit/ctx/ComponentDirContext.java
deleted file mode 100755
index c725153..0000000
--- a/ojluni/src/main/java/com/sun/jndi/toolkit/ctx/ComponentDirContext.java
+++ /dev/null
@@ -1,464 +0,0 @@
-/*
- * Copyright (c) 1999, 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.jndi.toolkit.ctx;
-
-import javax.naming.*;
-import javax.naming.directory.*;
-
-import javax.naming.spi.ResolveResult;
-
-/* Direct subclasses of ComponentDirContext must provide implementations for
- * the abstract c_ DirContext methods, and override the c_ Context methods
- * (which are no longer abstract because they have been overriden by
- * AtomicContext, the direct superclass of PartialDSCompositeContext).
- *
- * If the subclass is supports implicit nns, it must override all the
- * c_*_nns methods corresponding to those in DirContext and Context.
- * See ComponentContext for details.
- *
- * @author Rosanna Lee
- */
-
-public abstract class ComponentDirContext extends PartialCompositeDirContext {
-
-    protected ComponentDirContext () {
-        _contextType = _COMPONENT;
-    }
-
-// ------ Abstract methods whose implementations are provided by subclass
-
-    /* Equivalent to methods in DirContext */
-    protected abstract Attributes c_getAttributes(Name name,
-                                                 String[] attrIds,
-                                                 Continuation cont)
-        throws NamingException;
-
-    protected abstract void c_modifyAttributes(Name name, int mod_op,
-                                            Attributes attrs,
-                                            Continuation cont)
-            throws NamingException;
-
-    protected abstract void c_modifyAttributes(Name name,
-                                            ModificationItem[] mods,
-                                            Continuation cont)
-        throws NamingException;
-
-    protected abstract void c_bind(Name name, Object obj,
-                                   Attributes attrs,
-                                   Continuation cont)
-        throws NamingException;
-
-    protected abstract void c_rebind(Name name, Object obj,
-                                     Attributes attrs,
-                                     Continuation cont)
-        throws NamingException;
-
-    protected abstract DirContext c_createSubcontext(Name name,
-                                                    Attributes attrs,
-                                                    Continuation cont)
-        throws NamingException;
-
-    protected abstract NamingEnumeration c_search(Name name,
-                                               Attributes matchingAttributes,
-                                               String[] attributesToReturn,
-                                               Continuation cont)
-        throws NamingException;
-
-    protected abstract NamingEnumeration c_search(Name name,
-                                               String filter,
-                                               SearchControls cons,
-                                               Continuation cont)
-        throws NamingException;
-
-    protected abstract NamingEnumeration c_search(Name name,
-                                                  String filterExpr,
-                                                  Object[] filterArgs,
-                                                  SearchControls cons,
-                                                  Continuation cont)
-        throws NamingException;
-
-    protected abstract DirContext c_getSchema(Name name, Continuation cont)
-        throws NamingException;
-
-    protected abstract DirContext c_getSchemaClassDefinition(Name name,
-                                                            Continuation cont)
-        throws NamingException;
-
-// ------- default implementations of c_*_nns methods from DirContext
-
-    // The following methods are called when the DirContext methods
-    // are invoked with a name that has a trailing slash.
-    // For naming systems that support implicit nns,
-    // the trailing slash signifies the implicit nns.
-    // For such naming systems, override these c_*_nns methods.
-    //
-    // For naming systems that support junctions (explicit nns),
-    // the trailing slash is meaningless because a junction does not
-    // have an implicit nns.  The default implementation here
-    // throws a NameNotFoundException for such names.
-    // If a context wants to accept a trailing slash as having
-    // the same meaning as the same name without a trailing slash,
-    // then it should override these c_*_nns methods.
-
-    // See ComponentContext for details.
-
-    protected Attributes c_getAttributes_nns(Name name,
-                                            String[] attrIds,
-                                            Continuation cont)
-        throws NamingException {
-            c_processJunction_nns(name, cont);
-            return null;
-        }
-
-    protected void c_modifyAttributes_nns(Name name,
-                                       int mod_op,
-                                       Attributes attrs,
-                                       Continuation cont)
-        throws NamingException {
-            c_processJunction_nns(name, cont);
-        }
-
-    protected void c_modifyAttributes_nns(Name name,
-                                       ModificationItem[] mods,
-                                       Continuation cont)
-        throws NamingException {
-            c_processJunction_nns(name, cont);
-        }
-
-    protected void c_bind_nns(Name name,
-                              Object obj,
-                              Attributes attrs,
-                              Continuation cont)
-        throws NamingException  {
-            c_processJunction_nns(name, cont);
-        }
-
-    protected void c_rebind_nns(Name name,
-                                Object obj,
-                                Attributes attrs,
-                                Continuation cont)
-        throws NamingException  {
-            c_processJunction_nns(name, cont);
-        }
-
-    protected DirContext c_createSubcontext_nns(Name name,
-                                               Attributes attrs,
-                                               Continuation cont)
-        throws NamingException  {
-            c_processJunction_nns(name, cont);
-            return null;
-        }
-
-    protected NamingEnumeration c_search_nns(Name name,
-                                          Attributes matchingAttributes,
-                                          String[] attributesToReturn,
-                                          Continuation cont)
-        throws NamingException {
-            c_processJunction_nns(name, cont);
-            return null;
-        }
-
-    protected NamingEnumeration c_search_nns(Name name,
-                                          String filter,
-                                          SearchControls cons,
-                                          Continuation cont)
-        throws NamingException  {
-            c_processJunction_nns(name, cont);
-            return null;
-        }
-
-    protected NamingEnumeration c_search_nns(Name name,
-                                             String filterExpr,
-                                             Object[] filterArgs,
-                                             SearchControls cons,
-                                             Continuation cont)
-        throws NamingException  {
-            c_processJunction_nns(name, cont);
-            return null;
-        }
-
-    protected DirContext c_getSchema_nns(Name name, Continuation cont)
-        throws NamingException {
-            c_processJunction_nns(name, cont);
-            return null;
-        }
-
-    protected DirContext c_getSchemaClassDefinition_nns(Name name, Continuation cont)
-        throws NamingException {
-            c_processJunction_nns(name, cont);
-            return null;
-        }
-
-// ------- implementations of p_ DirContext methods using corresponding
-// ------- DirContext c_ and c_*_nns methods
-
-    /* Implements for abstract methods declared in PartialCompositeDirContext */
-    protected Attributes p_getAttributes(Name name,
-                                        String[] attrIds,
-                                        Continuation cont)
-        throws NamingException  {
-        HeadTail res = p_resolveIntermediate(name, cont);
-        Attributes answer = null;
-        switch (res.getStatus()) {
-            case TERMINAL_NNS_COMPONENT:
-                answer = c_getAttributes_nns(res.getHead(), attrIds, cont);
-                break;
-
-            case TERMINAL_COMPONENT:
-                answer = c_getAttributes(res.getHead(), attrIds, cont);
-                break;
-
-            default:
-                /* USE_CONTINUATION */
-                /* cont already set or exception thrown */
-                break;
-            }
-        return answer;
-    }
-
-    protected void p_modifyAttributes(Name name, int mod_op,
-                                   Attributes attrs,
-                                   Continuation cont)
-        throws NamingException {
-        HeadTail res = p_resolveIntermediate(name, cont);
-        switch (res.getStatus()) {
-            case TERMINAL_NNS_COMPONENT:
-                c_modifyAttributes_nns(res.getHead(), mod_op, attrs, cont);
-                break;
-
-            case TERMINAL_COMPONENT:
-                c_modifyAttributes(res.getHead(), mod_op, attrs, cont);
-                break;
-
-            default:
-                /* USE_CONTINUATION */
-                /* cont already set or exception thrown */
-                break;
-            }
-    }
-    protected void p_modifyAttributes(Name name,
-                                   ModificationItem[] mods,
-                                   Continuation cont)
-        throws NamingException {
-        HeadTail res = p_resolveIntermediate(name, cont);
-        switch (res.getStatus()) {
-            case TERMINAL_NNS_COMPONENT:
-                c_modifyAttributes_nns(res.getHead(), mods, cont);
-                break;
-
-            case TERMINAL_COMPONENT:
-                c_modifyAttributes(res.getHead(), mods, cont);
-                break;
-
-            default:
-                /* USE_CONTINUATION */
-                /* cont already set or exception thrown */
-                break;
-            }
-    }
-
-    protected void p_bind(Name name,
-                          Object obj,
-                          Attributes attrs,
-                          Continuation cont)
-        throws NamingException {
-        HeadTail res = p_resolveIntermediate(name, cont);
-        switch (res.getStatus()) {
-            case TERMINAL_NNS_COMPONENT:
-                c_bind_nns(res.getHead(), obj, attrs, cont);
-                break;
-
-            case TERMINAL_COMPONENT:
-                c_bind(res.getHead(), obj, attrs, cont);
-                break;
-
-            default:
-                /* USE_CONTINUATION */
-                /* cont already set or exception thrown */
-                break;
-            }
-    }
-
-    protected void p_rebind(Name name, Object obj,
-                            Attributes attrs, Continuation cont)
-        throws NamingException {
-        HeadTail res = p_resolveIntermediate(name, cont);
-        switch (res.getStatus()) {
-            case TERMINAL_NNS_COMPONENT:
-                c_rebind_nns(res.getHead(), obj, attrs, cont);
-                break;
-
-            case TERMINAL_COMPONENT:
-                c_rebind(res.getHead(), obj, attrs, cont);
-                break;
-
-            default:
-                /* USE_CONTINUATION */
-                /* cont already set or exception thrown */
-                break;
-            }
-    }
-
-    protected DirContext p_createSubcontext(Name name,
-                                           Attributes attrs,
-                                           Continuation cont)
-        throws NamingException {
-        HeadTail res = p_resolveIntermediate(name, cont);
-        DirContext answer = null;
-        switch (res.getStatus()) {
-            case TERMINAL_NNS_COMPONENT:
-                answer = c_createSubcontext_nns(res.getHead(), attrs, cont);
-                break;
-
-            case TERMINAL_COMPONENT:
-                answer = c_createSubcontext(res.getHead(), attrs, cont);
-                break;
-
-            default:
-                /* USE_CONTINUATION */
-                /* cont already set or exception thrown */
-                break;
-            }
-        return answer;
-    }
-
-    protected NamingEnumeration p_search(Name name,
-                                      Attributes matchingAttributes,
-                                      String[] attributesToReturn,
-                                      Continuation cont)
-        throws NamingException {
-        HeadTail res = p_resolveIntermediate(name, cont);
-        NamingEnumeration answer = null;
-        switch (res.getStatus()) {
-            case TERMINAL_NNS_COMPONENT:
-                answer = c_search_nns(res.getHead(), matchingAttributes,
-                                      attributesToReturn, cont);
-                break;
-
-            case TERMINAL_COMPONENT:
-                answer = c_search(res.getHead(), matchingAttributes,
-                                  attributesToReturn, cont);
-                break;
-
-            default:
-                /* USE_CONTINUATION */
-                /* cont already set or exception thrown */
-                break;
-            }
-        return answer;
-    }
-
-    protected NamingEnumeration p_search(Name name,
-                                      String filter,
-                                      SearchControls cons, Continuation cont)
-        throws NamingException {
-        HeadTail res = p_resolveIntermediate(name, cont);
-        NamingEnumeration answer = null;
-        switch (res.getStatus()) {
-            case TERMINAL_NNS_COMPONENT:
-                answer = c_search_nns(res.getHead(), filter, cons, cont);
-                break;
-
-            case TERMINAL_COMPONENT:
-                answer = c_search(res.getHead(), filter, cons, cont);
-                break;
-
-            default:
-                /* USE_CONTINUATION */
-                /* cont already set or exception thrown */
-                break;
-            }
-        return answer;
-    }
-
-    protected NamingEnumeration p_search(Name name,
-                                         String filterExpr,
-                                         Object[] filterArgs,
-                                         SearchControls cons,
-                                         Continuation cont)
-            throws NamingException {
-        HeadTail res = p_resolveIntermediate(name, cont);
-        NamingEnumeration answer = null;
-        switch (res.getStatus()) {
-            case TERMINAL_NNS_COMPONENT:
-                answer = c_search_nns(res.getHead(),
-                                      filterExpr, filterArgs, cons, cont);
-                break;
-
-            case TERMINAL_COMPONENT:
-                answer = c_search(res.getHead(), filterExpr, filterArgs, cons, cont);
-                break;
-
-            default:
-                /* USE_CONTINUATION */
-                /* cont already set or exception thrown */
-                break;
-            }
-        return answer;
-    }
-
-    protected DirContext p_getSchema(Name name, Continuation cont)
-        throws NamingException  {
-            DirContext answer = null;
-            HeadTail res = p_resolveIntermediate(name, cont);
-            switch (res.getStatus()) {
-            case TERMINAL_NNS_COMPONENT:
-                answer = c_getSchema_nns(res.getHead(), cont);
-                break;
-
-            case TERMINAL_COMPONENT:
-                answer = c_getSchema(res.getHead(), cont);
-                break;
-
-            default:
-                /* USE_CONTINUATION */
-                /* cont already set or exception thrown */
-                break;
-            }
-            return answer;
-        }
-
-    protected DirContext p_getSchemaClassDefinition(Name name, Continuation cont)
-        throws NamingException  {
-            DirContext answer = null;
-            HeadTail res = p_resolveIntermediate(name, cont);
-            switch (res.getStatus()) {
-            case TERMINAL_NNS_COMPONENT:
-                answer = c_getSchemaClassDefinition_nns(res.getHead(), cont);
-                break;
-
-            case TERMINAL_COMPONENT:
-                answer = c_getSchemaClassDefinition(res.getHead(), cont);
-                break;
-
-            default:
-                /* USE_CONTINUATION */
-                /* cont already set or exception thrown */
-                break;
-            }
-            return answer;
-        }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/toolkit/ctx/Continuation.java b/ojluni/src/main/java/com/sun/jndi/toolkit/ctx/Continuation.java
deleted file mode 100755
index 50558ca..0000000
--- a/ojluni/src/main/java/com/sun/jndi/toolkit/ctx/Continuation.java
+++ /dev/null
@@ -1,440 +0,0 @@
-/*
- * Copyright (c) 1999, 2011, 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.jndi.toolkit.ctx;
-
-import javax.naming.*;
-import javax.naming.spi.ResolveResult;
-import java.util.Hashtable;
-
-/**
-  * This class contains information required to continue
-  * the method (place where it left off, and remaining name to
-  * continue).
-  *
-  * @author Rosanna Lee
-  */
-
-public class Continuation extends ResolveResult {
-    /**
-     * The name that we started out with. It is initialized by the constructor
-     * and used to calculate to "resolved name" in NamingException in
-     * fillInException().
-     * %%% Note that this approach does not always do the calculation
-     * correctly with respect to absence or presence of the trailing slash
-     * for resolved name.
-     */
-    protected Name starter;
-
-    /**
-     * Whether links were encountered.
-     */
-    protected Object followingLink = null;
-
-    /**
-     * The environment used by the caller. Initialized by constructor and
-     * used when filling out a CannotProceedException.
-     */
-    protected Hashtable environment = null;
-
-    /**
-     * Indicates whether the Continuation instance indicates that the operation
-     * should be continued using the data in the Continuation.
-     * Typically, this is only false if an error has been encountered or if
-     * the operation has succeeded.
-     */
-    protected boolean continuing = false;
-
-    /**
-     * The last resolved context. Used to set the "AltNameCtx" in a
-     * CannotProceedException.
-     */
-    protected Context resolvedContext = null;
-
-    /**
-     * The resolved name relative to resolvedContext. Used to set the
-     * "AltName" in a CannotProceedException.
-     */
-    protected Name relativeResolvedName = null;
-
-    /**
-     * Constructs a new instance of Continuation.
-     * Used as dummy for contexts that do not do federation (e.g. for schema ops)
-     */
-    public Continuation() {
-    }
-
-    /**
-     * Constructs a new instance of Continuation.
-     * @param top The name of the object that is to be resolved/operated upon.
-     *          This becomes the Continuation's 'starter' and is used to
-     *          calculate the "resolved name" when filling  in a NamingException.
-     * @param environment The environment used by the caller. It is used
-     * when setting the "environment" of a CannotProceedException.
-     */
-    public Continuation(Name top, Hashtable environment) {
-        super();
-        starter = top;
-        this.environment = environment;
-    }
-
-    /**
-     * Determines whether this Continuation contains data that should be
-     * used to continue the operation.
-     *
-     * @return true if operation should continue; false if operation has
-     * completed (successfully or unsuccessfully).
-     */
-    public boolean isContinue() {
-        return continuing;
-    }
-
-    /**
-     * Sets this Continuation to indicate successful completion.
-     * Subsequent calls to isContinue() will return false.
-     * This method is different from the setError() methods only from
-     * the standpoint that this method does not set any of the other
-     * fields such as resolved object or resolved context. This is because
-     * this method is typically called when the context recognizes that
-     * the operation has successfully completed and that the continuation
-     * already contains the appropriately set fields.
-     * @see setError
-     * @see setErrorNNS
-     */
-    public void setSuccess() {
-        continuing = false;
-    }
-
-    /**
-     * Fills in an exception's fields using data from this Continuation.
-     * The resolved name is set by subtracting remainingName from starter.
-     * %%% This might not not always produce the correct answer wrt trailing "/".
-     * If the exception is a CannotProceedException, its environment,
-     * altName, and altNameCtx fields are set using this continuation's
-     * environment, relativeResolvedName, and resolvedContext.
-     *
-     * @param e The non-null naming exception to fill.
-     * @return The non-null naming exception with its fields set using
-     * data from this Continuation.
-     */
-    public NamingException fillInException(NamingException e) {
-        e.setRemainingName(remainingName);
-        e.setResolvedObj(resolvedObj);
-
-        if (starter == null || starter.isEmpty())
-            e.setResolvedName(null);
-        else if (remainingName == null)
-            e.setResolvedName(starter);
-        else
-            e.setResolvedName(
-                starter.getPrefix(starter.size() -
-                                  remainingName.size()));
-
-        if ((e instanceof CannotProceedException)) {
-            CannotProceedException cpe = (CannotProceedException)e;
-            Hashtable env = (environment == null ?
-                new Hashtable(11) : (Hashtable)environment.clone());
-            cpe.setEnvironment(env);
-            cpe.setAltNameCtx(resolvedContext);
-            cpe.setAltName(relativeResolvedName);
-        }
-
-        return e;
-    }
-
-    /**
-     * Sets this Continuation to indicated that an error has occurred,
-     * and that the remaining name is rename + "/".
-     *
-     * This method is typically called by _nns methods that have been
-     * given a name to process. It might process part of that name but
-     * encountered some error. Consequenetly, it would call setErrorNNS()
-     * with the remaining name. Since the _nns method was expected to
-     * operate upon the "nns" of the original name, the remaining name
-     * must include the "nns". That's why this method adds a trailing "/".
-     *<p>
-     * After this method is called, isContinuing() returns false.
-     *
-     * @param resObj The possibly null object that was resolved to.
-     * @param remain The non-null remaining name.
-     */
-    public void setErrorNNS(Object resObj, Name remain) {
-        Name nm = (Name)(remain.clone());
-        try {
-            nm.add("");
-        } catch (InvalidNameException e) {
-            // ignore; can't happen for composite name
-        }
-        setErrorAux(resObj, nm);
-    }
-
-    /**
-     * Form that accepts a String name instead of a Name name.
-
-     * @param resObj The possibly null object that was resolved to.
-     * @param remain The possibly String remaining name.
-     *
-     * @see #setErrorNNS(java.lang.Object, javax.naming.Name)
-     */
-    public void setErrorNNS(Object resObj, String remain) {
-        CompositeName rname = new CompositeName();
-        try {
-            if (remain != null && !remain.equals(""))
-                rname.add(remain);
-
-            rname.add("");
-        } catch (InvalidNameException e) {
-            // ignore, can't happen for composite name
-        }
-        setErrorAux(resObj, rname);
-    }
-
-    /**
-     * Sets this Continuation to indicated that an error has occurred
-     * and supply resolved information.
-     *
-     * This method is typically called by methods that have been
-     * given a name to process. It might process part of that name but
-     * encountered some error. Consequenetly, it would call setError()
-     * with the resolved object and the remaining name.
-     *<p>
-     * After this method is called, isContinuing() returns false.
-     *
-     * @param resObj The possibly null object that was resolved to.
-     * @param remain The possibly null remaining name.
-     */
-    public void setError(Object resObj, Name remain) {
-        if (remain != null)
-            remainingName = (Name)(remain.clone());
-        else
-            remainingName = null;
-
-        setErrorAux(resObj, remainingName);
-    }
-
-
-    /**
-     * Form that accepts a String name instead of a Name name.
-
-     * @param resObj The possibly null object that was resolved to.
-     * @param remain The possibly String remaining name.
-     *
-     * @see #setError(java.lang.Object, javax.naming.Name)
-     */
-    public void setError(Object resObj, String remain) {
-        CompositeName rname = new CompositeName();
-        if (remain != null && !remain.equals("")) {
-            try {
-                rname.add(remain);
-            } catch (InvalidNameException e) {
-                // ignore; can't happen for composite name
-            }
-        }
-        setErrorAux(resObj, rname);
-    }
-
-    private void setErrorAux(Object resObj, Name rname) {
-        remainingName = rname;
-        resolvedObj = resObj;
-        continuing = false;
-    }
-
-    private void setContinueAux(Object resObj,
-        Name relResName, Context currCtx,  Name remain) {
-        if (resObj instanceof LinkRef) {
-            setContinueLink(resObj, relResName, currCtx, remain);
-        } else {
-            remainingName = remain;
-            resolvedObj = resObj;
-
-            relativeResolvedName = relResName;
-            resolvedContext = currCtx;
-
-            continuing = true;
-        }
-    }
-
-    /**
-     * Sets this Continuation with the supplied data, and set remaining name
-     * to be "/".
-     * This method is typically called by _nns methods that have been
-     * given a name to process. It might the name (without the nns) and
-     * continue process of the nns elsewhere.
-     * Consequently, it would call this form of the setContinueNNS().
-     * This method supplies "/" as the remaining name.
-     *<p>
-     * After this method is called, isContinuing() returns true.
-     *
-     * @param resObj The possibly null resolved object.
-     * @param relResName The non-null resolved name relative to currCtx.
-     * @param currCtx The non-null context from which relResName is to be resolved.
-     */
-    public void setContinueNNS(Object resObj, Name relResName, Context currCtx) {
-        CompositeName rname = new CompositeName();
-
-        setContinue(resObj, relResName, currCtx, PartialCompositeContext._NNS_NAME);
-    }
-
-    /**
-     * Overloaded form that accesses String names.
-     *
-     * @param resObj The possibly null resolved object.
-     * @param relResName The non-null resolved name relative to currCtx.
-     * @param currCtx The non-null context from which relResName is to be resolved.
-     * @see #setContinueNNS(java.lang.Object, javax.naming.Name, javax.naming.Context)
-     */
-    public void setContinueNNS(Object resObj, String relResName, Context currCtx) {
-        CompositeName relname = new CompositeName();
-        try {
-            relname.add(relResName);
-        } catch (NamingException e) {}
-
-        setContinue(resObj, relname, currCtx, PartialCompositeContext._NNS_NAME);
-    }
-
-
-    /**
-     * Sets this Continuation with the supplied data, and set remaining name
-     * to be the empty name.
-     * This method is typically called by list-style methods
-     * in which the target context implementing list() expects an
-     * empty name. For example when c_list() is given a non-empty name to
-     * process, it would resolve that name, and then call setContinue()
-     * with the resolved object so that the target context to be listed
-     * would be called with the empty name (i.e. list the target context itself).
-     *<p>
-     * After this method is called, isContinuing() returns true.
-     *
-     * @param resObj The possibly null resolved object.
-     * @param relResName The non-null resolved name relative to currCtx.
-     * @param currCtx The non-null context from which relResName is to be resolved.
-     */
-    public void setContinue(Object obj, Name relResName, Context currCtx) {
-        setContinueAux(obj, relResName, currCtx,
-            (Name)PartialCompositeContext._EMPTY_NAME.clone());
-    }
-
-    /**
-     * Sets this Continuation with the supplied data.
-
-     * This method is typically called by a method that has been asked
-     * to operate on a name. The method resolves part of the name
-     * (relResName) to obj and sets the unprocessed part to rename.
-     * It calls setContinue() so that the operation can be continued
-     * using this data.
-     *<p>
-     * After this method is called, isContinuing() returns true.
-     *
-     * @param resObj The possibly null resolved object.
-     * @param relResName The non-null resolved name relative to currCtx.
-     * @param currCtx The non-null context from which relResName is to be resolved.
-     * @param remain The non-null remaining name.
-     */
-    public void setContinue(Object obj, Name relResName, Context currCtx, Name remain) {
-        if (remain != null)
-            this.remainingName = (Name)(remain.clone());
-        else
-            this.remainingName = new CompositeName();
-
-        setContinueAux(obj, relResName, currCtx, remainingName);
-    }
-
-    /**
-     * String overload.
-     *
-     * @param resObj The possibly null resolved object.
-     * @param relResName The non-null resolved name relative to currCtx.
-     * @param currCtx The non-null context from which relResName is to be resolved.
-     * @param remain The non-null remaining name.
-     * @see #setContinue(java.lang.Object, java.lang.String, javax.naming.Context, java.lang.String)
-     */
-    public void setContinue(Object obj, String relResName,
-        Context currCtx, String remain) {
-        CompositeName relname = new CompositeName();
-        if (!relResName.equals("")) {
-            try {
-                relname.add(relResName);
-            } catch (NamingException e){}
-        }
-
-        CompositeName rname = new CompositeName();
-        if (!remain.equals("")) {
-            try {
-                rname.add(remain);
-            } catch (NamingException e) {
-            }
-        }
-
-        setContinueAux(obj, relname, currCtx, rname);
-    }
-
-    /**
-     * %%% This method is kept only for backward compatibility. Delete when
-     * old implementations updated.
-     *
-     * Replaced by setContinue(obj, relResName, (Context)currCtx);
-     *
-     * @deprecated
-     */
-    @Deprecated
-    public void setContinue(Object obj, Object currCtx) {
-        setContinue(obj, null, (Context)currCtx);
-    }
-
-
-    /**
-     * Sets this Continuation to process a linkRef.
-     * %%% Not working yet.
-     */
-    private void setContinueLink(Object linkRef, Name relResName,
-        Context resolvedCtx, Name rname) {
-        this.followingLink = linkRef;
-
-        this.remainingName = rname;
-        this.resolvedObj = resolvedCtx;
-
-        this.relativeResolvedName = PartialCompositeContext._EMPTY_NAME;
-        this.resolvedContext = resolvedCtx;
-
-        this.continuing = true;
-    }
-
-    public String toString() {
-        if (remainingName != null)
-            return starter.toString() + "; remainingName: '" + remainingName + "'";
-        else
-            return starter.toString();
-    }
-
-    public String toString(boolean detail) {
-        if (!detail || this.resolvedObj == null)
-                return this.toString();
-        return this.toString() + "; resolvedObj: " + this.resolvedObj +
-            "; relativeResolvedName: " + relativeResolvedName +
-            "; resolvedContext: " + resolvedContext;
-    }
-
-    private static final long serialVersionUID = 8162530656132624308L;
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/toolkit/ctx/HeadTail.java b/ojluni/src/main/java/com/sun/jndi/toolkit/ctx/HeadTail.java
deleted file mode 100755
index 2ec14e4..0000000
--- a/ojluni/src/main/java/com/sun/jndi/toolkit/ctx/HeadTail.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-package com.sun.jndi.toolkit.ctx;
-
-import javax.naming.Name;
-
-/**
-  * A class for returning the result of p_parseComponent();
-  *
-  * @author Rosanna Lee
-  */
-public class HeadTail {
-    private int status;
-    private Name head;
-    private Name tail;
-
-    public HeadTail(Name head, Name tail) {
-        this(head, tail, 0);
-    }
-
-    public HeadTail(Name head, Name tail, int status) {
-        this.status = status;
-        this.head = head;
-        this.tail = tail;
-    }
-
-    public void setStatus(int status) {
-        this.status = status;
-    }
-
-    public Name getHead() {
-        return this.head;
-    }
-
-    public Name getTail() {
-        return this.tail;
-    }
-
-    public int getStatus() {
-        return this.status;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/toolkit/ctx/PartialCompositeContext.java b/ojluni/src/main/java/com/sun/jndi/toolkit/ctx/PartialCompositeContext.java
deleted file mode 100755
index d53b5ca..0000000
--- a/ojluni/src/main/java/com/sun/jndi/toolkit/ctx/PartialCompositeContext.java
+++ /dev/null
@@ -1,523 +0,0 @@
-/*
- * Copyright (c) 1999, 2009, 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.jndi.toolkit.ctx;
-
-import java.util.Hashtable;
-import java.util.Enumeration;
-
-import javax.naming.*;
-import javax.naming.spi.Resolver;
-import javax.naming.spi.ResolveResult;
-import javax.naming.spi.NamingManager;
-
-/**
-  * PartialCompositeContext implements Context operations on
-  * composite names using implementations of the p_ interfaces
-  * defined by its subclasses.
-  *
-  * The main purpose provided by this class is that it deals with
-  * partial resolutions and continuations, so that callers of the
-  * Context operation don't have to.
-  *
-  * Types of clients that will be direct subclasses of
-  * PartialCompositeContext may be service providers that implement
-  * one of the JNDI protocols, but which do not deal with
-  * continuations.  Usually, service providers will be using
-  * one of the subclasses of PartialCompositeContext.
-  *
-  * @author Rosanna Lee
-  */
-
-
-public abstract class PartialCompositeContext implements Context, Resolver {
-    protected static final int _PARTIAL = 1;
-    protected static final int _COMPONENT = 2;
-    protected static final int _ATOMIC = 3;
-
-    protected int _contextType = _PARTIAL;
-
-    static final CompositeName _EMPTY_NAME = new CompositeName();
-    static CompositeName _NNS_NAME;
-
-    static {
-        try {
-            _NNS_NAME = new CompositeName("/");
-        } catch (InvalidNameException e) {
-            // Should never happen
-        }
-    }
-
-    protected PartialCompositeContext() {
-    }
-
-// ------ Abstract methods whose implementations come from subclasses
-
-    /* Equivalent to method in  Resolver interface */
-    protected abstract ResolveResult p_resolveToClass(Name name,
-        Class contextType, Continuation cont) throws NamingException;
-
-    /* Equivalent to methods in Context interface */
-    protected abstract Object p_lookup(Name name, Continuation cont)
-        throws NamingException;
-    protected abstract Object p_lookupLink(Name name, Continuation cont)
-        throws NamingException;
-    protected abstract NamingEnumeration p_list(Name name,
-        Continuation cont) throws NamingException;
-    protected abstract NamingEnumeration p_listBindings(Name name,
-        Continuation cont) throws NamingException;
-    protected abstract void p_bind(Name name, Object obj, Continuation cont)
-        throws NamingException;
-    protected abstract void p_rebind(Name name, Object obj, Continuation cont)
-        throws NamingException;
-    protected abstract void p_unbind(Name name, Continuation cont)
-        throws NamingException;
-    protected abstract void p_destroySubcontext(Name name, Continuation cont)
-        throws NamingException;
-    protected abstract Context p_createSubcontext(Name name, Continuation cont)
-        throws NamingException;
-    protected abstract void p_rename(Name oldname, Name newname,
-                                     Continuation cont)
-        throws NamingException;
-    protected abstract NameParser p_getNameParser(Name name, Continuation cont)
-        throws NamingException;
-
-// ------ should be overridden by subclass;
-// ------ not abstract only for backward compatibility
-
-    /**
-     * A cheap way of getting the environment.
-     * Default implemenation is NOT cheap because it simply calls
-     * getEnvironment(), which most implementations clone before returning.
-     * Subclass should ALWAYS override this with the cheapest possible way.
-     * The toolkit knows to clone when necessary.
-     * @return The possibly null environment of the context.
-     */
-    protected Hashtable p_getEnvironment() throws NamingException {
-        return getEnvironment();
-    }
-
-
-// ------ implementations of methods in Resolver and Context
-// ------ using corresponding p_ methods provided by subclass
-
-    /* implementations for method in Resolver interface using p_ method */
-
-    public ResolveResult resolveToClass(String name,
-                                        Class<? extends Context> contextType)
-        throws NamingException
-    {
-        return resolveToClass(new CompositeName(name), contextType);
-    }
-
-    public ResolveResult resolveToClass(Name name,
-                                        Class<? extends Context> contextType)
-        throws NamingException
-    {
-        PartialCompositeContext ctx = this;
-        Hashtable env = p_getEnvironment();
-        Continuation cont = new Continuation(name, env);
-        ResolveResult answer;
-        Name nm = name;
-
-        try {
-            answer = ctx.p_resolveToClass(nm, contextType, cont);
-            while (cont.isContinue()) {
-                nm = cont.getRemainingName();
-                ctx = getPCContext(cont);
-                answer = ctx.p_resolveToClass(nm, contextType, cont);
-            }
-        } catch (CannotProceedException e) {
-            Context cctx = NamingManager.getContinuationContext(e);
-            if (!(cctx instanceof Resolver)) {
-                throw e;
-            }
-            answer = ((Resolver)cctx).resolveToClass(e.getRemainingName(),
-                                                     contextType);
-        }
-        return answer;
-    }
-
-    /* implementations for methods in Context interface using p_ methods */
-
-    public Object lookup(String name) throws NamingException {
-        return lookup(new CompositeName(name));
-    }
-
-    public Object lookup(Name name) throws NamingException {
-        PartialCompositeContext ctx = this;
-        Hashtable env = p_getEnvironment();
-        Continuation cont = new Continuation(name, env);
-        Object answer;
-        Name nm = name;
-
-        try {
-            answer = ctx.p_lookup(nm, cont);
-            while (cont.isContinue()) {
-                nm = cont.getRemainingName();
-                ctx = getPCContext(cont);
-                answer = ctx.p_lookup(nm, cont);
-            }
-        } catch (CannotProceedException e) {
-            Context cctx = NamingManager.getContinuationContext(e);
-            answer = cctx.lookup(e.getRemainingName());
-        }
-        return answer;
-    }
-
-    public void bind(String name, Object newObj) throws NamingException {
-        bind(new CompositeName(name), newObj);
-    }
-
-    public void bind(Name name, Object newObj) throws NamingException {
-        PartialCompositeContext ctx = this;
-        Name nm = name;
-        Hashtable env = p_getEnvironment();
-        Continuation cont = new Continuation(name, env);
-
-        try {
-            ctx.p_bind(nm, newObj, cont);
-            while (cont.isContinue()) {
-                nm = cont.getRemainingName();
-                ctx = getPCContext(cont);
-                ctx.p_bind(nm, newObj, cont);
-            }
-        } catch (CannotProceedException e) {
-            Context cctx = NamingManager.getContinuationContext(e);
-            cctx.bind(e.getRemainingName(), newObj);
-        }
-    }
-
-    public void rebind(String name, Object newObj) throws NamingException {
-        rebind(new CompositeName(name), newObj);
-    }
-    public void rebind(Name name, Object newObj) throws NamingException {
-        PartialCompositeContext ctx = this;
-        Name nm = name;
-        Hashtable env = p_getEnvironment();
-        Continuation cont = new Continuation(name, env);
-
-        try {
-            ctx.p_rebind(nm, newObj, cont);
-            while (cont.isContinue()) {
-                nm = cont.getRemainingName();
-                ctx = getPCContext(cont);
-                ctx.p_rebind(nm, newObj, cont);
-            }
-        } catch (CannotProceedException e) {
-            Context cctx = NamingManager.getContinuationContext(e);
-            cctx.rebind(e.getRemainingName(), newObj);
-        }
-    }
-
-    public void unbind(String name) throws NamingException {
-        unbind(new CompositeName(name));
-    }
-    public void unbind(Name name) throws NamingException {
-        PartialCompositeContext ctx = this;
-        Name nm = name;
-        Hashtable env = p_getEnvironment();
-        Continuation cont = new Continuation(name, env);
-
-        try {
-            ctx.p_unbind(nm, cont);
-            while (cont.isContinue()) {
-                nm = cont.getRemainingName();
-                ctx = getPCContext(cont);
-                ctx.p_unbind(nm, cont);
-            }
-        } catch (CannotProceedException e) {
-            Context cctx = NamingManager.getContinuationContext(e);
-            cctx.unbind(e.getRemainingName());
-        }
-    }
-
-    public void rename(String oldName, String newName) throws NamingException {
-        rename(new CompositeName(oldName), new CompositeName(newName));
-    }
-    public void rename(Name oldName, Name newName)
-        throws NamingException
-    {
-        PartialCompositeContext ctx = this;
-        Name nm = oldName;
-        Hashtable env = p_getEnvironment();
-        Continuation cont = new Continuation(oldName, env);
-
-        try {
-            ctx.p_rename(nm, newName, cont);
-            while (cont.isContinue()) {
-                nm = cont.getRemainingName();
-                ctx = getPCContext(cont);
-                ctx.p_rename(nm, newName, cont);
-            }
-        } catch (CannotProceedException e) {
-            Context cctx = NamingManager.getContinuationContext(e);
-            if (e.getRemainingNewName() != null) {
-                // %%% e.getRemainingNewName() should never be null
-                newName = e.getRemainingNewName();
-            }
-            cctx.rename(e.getRemainingName(), newName);
-        }
-    }
-
-    public NamingEnumeration<NameClassPair> list(String name)
-        throws NamingException
-    {
-        return list(new CompositeName(name));
-    }
-
-    public NamingEnumeration<NameClassPair> list(Name name)
-        throws NamingException
-    {
-        PartialCompositeContext ctx = this;
-        Name nm = name;
-        NamingEnumeration answer;
-        Hashtable env = p_getEnvironment();
-        Continuation cont = new Continuation(name, env);
-
-        try {
-            answer = ctx.p_list(nm, cont);
-            while (cont.isContinue()) {
-                nm = cont.getRemainingName();
-                ctx = getPCContext(cont);
-                answer = ctx.p_list(nm, cont);
-            }
-        } catch (CannotProceedException e) {
-            Context cctx = NamingManager.getContinuationContext(e);
-            answer = cctx.list(e.getRemainingName());
-        }
-        return answer;
-    }
-
-    public NamingEnumeration<Binding> listBindings(String name)
-        throws NamingException
-    {
-        return listBindings(new CompositeName(name));
-    }
-
-    public NamingEnumeration<Binding> listBindings(Name name)
-        throws NamingException
-    {
-        PartialCompositeContext ctx = this;
-        Name nm = name;
-        NamingEnumeration answer;
-        Hashtable env = p_getEnvironment();
-        Continuation cont = new Continuation(name, env);
-
-        try {
-            answer = ctx.p_listBindings(nm, cont);
-            while (cont.isContinue()) {
-                nm = cont.getRemainingName();
-                ctx = getPCContext(cont);
-                answer = ctx.p_listBindings(nm, cont);
-            }
-        } catch (CannotProceedException e) {
-            Context cctx = NamingManager.getContinuationContext(e);
-            answer = cctx.listBindings(e.getRemainingName());
-        }
-        return answer;
-    }
-
-    public void destroySubcontext(String name) throws NamingException {
-        destroySubcontext(new CompositeName(name));
-    }
-
-    public void destroySubcontext(Name name) throws NamingException {
-        PartialCompositeContext ctx = this;
-        Name nm = name;
-        Hashtable env = p_getEnvironment();
-        Continuation cont = new Continuation(name, env);
-
-        try {
-            ctx.p_destroySubcontext(nm, cont);
-            while (cont.isContinue()) {
-                nm = cont.getRemainingName();
-                ctx = getPCContext(cont);
-                ctx.p_destroySubcontext(nm, cont);
-            }
-        } catch (CannotProceedException e) {
-            Context cctx = NamingManager.getContinuationContext(e);
-            cctx.destroySubcontext(e.getRemainingName());
-        }
-    }
-
-    public Context createSubcontext(String name) throws NamingException {
-        return createSubcontext(new CompositeName(name));
-    }
-
-    public Context createSubcontext(Name name) throws NamingException {
-        PartialCompositeContext ctx = this;
-        Name nm = name;
-        Context answer;
-        Hashtable env = p_getEnvironment();
-        Continuation cont = new Continuation(name, env);
-
-        try {
-            answer = ctx.p_createSubcontext(nm, cont);
-            while (cont.isContinue()) {
-                nm = cont.getRemainingName();
-                ctx = getPCContext(cont);
-                answer = ctx.p_createSubcontext(nm, cont);
-            }
-        } catch (CannotProceedException e) {
-            Context cctx = NamingManager.getContinuationContext(e);
-            answer = cctx.createSubcontext(e.getRemainingName());
-        }
-        return answer;
-    }
-
-    public Object lookupLink(String name) throws NamingException {
-        return lookupLink(new CompositeName(name));
-    }
-
-    public Object lookupLink(Name name) throws NamingException {
-        PartialCompositeContext ctx = this;
-        Hashtable env = p_getEnvironment();
-        Continuation cont = new Continuation(name, env);
-        Object answer;
-        Name nm = name;
-
-        try {
-            answer = ctx.p_lookupLink(nm, cont);
-            while (cont.isContinue()) {
-                nm = cont.getRemainingName();
-                ctx = getPCContext(cont);
-                answer = ctx.p_lookupLink(nm, cont);
-            }
-        } catch (CannotProceedException e) {
-            Context cctx = NamingManager.getContinuationContext(e);
-            answer = cctx.lookupLink(e.getRemainingName());
-        }
-        return answer;
-    }
-
-    public NameParser getNameParser(String name) throws NamingException {
-        return getNameParser(new CompositeName(name));
-    }
-
-    public NameParser getNameParser(Name name) throws NamingException {
-        PartialCompositeContext ctx = this;
-        Name nm = name;
-        NameParser answer;
-        Hashtable env = p_getEnvironment();
-        Continuation cont = new Continuation(name, env);
-
-        try {
-            answer = ctx.p_getNameParser(nm, cont);
-            while (cont.isContinue()) {
-                nm = cont.getRemainingName();
-                ctx = getPCContext(cont);
-                answer = ctx.p_getNameParser(nm, cont);
-            }
-        } catch (CannotProceedException e) {
-            Context cctx = NamingManager.getContinuationContext(e);
-            answer = cctx.getNameParser(e.getRemainingName());
-        }
-        return answer;
-    }
-
-    public String composeName(String name, String prefix)
-            throws NamingException {
-        Name fullName = composeName(new CompositeName(name),
-                                    new CompositeName(prefix));
-        return fullName.toString();
-    }
-
-    /**
-     * This default implementation simply concatenates the two names.
-     * There's one twist when the "java.naming.provider.compose.elideEmpty"
-     * environment setting is set to "true":  if each name contains a
-     * nonempty component, and if 'prefix' ends with an empty component or
-     * 'name' starts with one, then one empty component is dropped.
-     * For example:
-     * <pre>
-     *                            elideEmpty=false     elideEmpty=true
-     * {"a"} + {"b"}          =>  {"a", "b"}           {"a", "b"}
-     * {"a"} + {""}           =>  {"a", ""}            {"a", ""}
-     * {"a"} + {"", "b"}      =>  {"a", "", "b"}       {"a", "b"}
-     * {"a", ""} + {"b", ""}  =>  {"a", "", "b", ""}   {"a", "b", ""}
-     * {"a", ""} + {"", "b"}  =>  {"a", "", "", "b"}   {"a", "", "b"}
-     * </pre>
-     */
-    public Name composeName(Name name, Name prefix) throws NamingException {
-        Name res = (Name)prefix.clone();
-        if (name == null) {
-            return res;
-        }
-        res.addAll(name);
-
-        String elide = (String)
-            p_getEnvironment().get("java.naming.provider.compose.elideEmpty");
-        if (elide == null || !elide.equalsIgnoreCase("true")) {
-            return res;
-        }
-
-        int len = prefix.size();
-
-        if (!allEmpty(prefix) && !allEmpty(name)) {
-            if (res.get(len - 1).equals("")) {
-                res.remove(len - 1);
-            } else if (res.get(len).equals("")) {
-                res.remove(len);
-            }
-        }
-        return res;
-    }
-
-
-// ------ internal methods used by PartialCompositeContext
-
-    /**
-     * Tests whether a name contains a nonempty component.
-     */
-    protected static boolean allEmpty(Name name) {
-        Enumeration<String> enum_ = name.getAll();
-        while (enum_.hasMoreElements()) {
-            if (!enum_.nextElement().isEmpty()) {
-                return false;
-            }
-        }
-        return true;
-    }
-
-    /**
-     * Retrieves a PartialCompositeContext for the resolved object in
-     * cont.  Throws CannotProceedException if not successful.
-     */
-    protected static PartialCompositeContext getPCContext(Continuation cont)
-            throws NamingException {
-
-        Object obj = cont.getResolvedObj();
-        PartialCompositeContext pctx = null;
-
-        if (obj instanceof PartialCompositeContext) {
-            // Just cast if octx already is PartialCompositeContext
-            // %%% ignoring environment for now
-            return (PartialCompositeContext)obj;
-        } else {
-            throw cont.fillInException(new CannotProceedException());
-        }
-    }
-};
diff --git a/ojluni/src/main/java/com/sun/jndi/toolkit/ctx/PartialCompositeDirContext.java b/ojluni/src/main/java/com/sun/jndi/toolkit/ctx/PartialCompositeDirContext.java
deleted file mode 100755
index 29fc31e..0000000
--- a/ojluni/src/main/java/com/sun/jndi/toolkit/ctx/PartialCompositeDirContext.java
+++ /dev/null
@@ -1,574 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-package com.sun.jndi.toolkit.ctx;
-
-import java.util.Hashtable;
-
-import javax.naming.*;
-import javax.naming.directory.*;
-import javax.naming.spi.NamingManager;
-import javax.naming.spi.DirectoryManager;
-
-/*
- * Inherit from AtomicContext so that subclasses of PartialCompositeDirContext
- * can get the ns methods defined in subclasses of PartialCompositeContext.
- *
- * Direct subclasses of DirContext should provide implementations for
- * the p_ abstract DirContext methods and override the p_ Context methods
- * (not abstract anymore because they are overridden by ComponentContext
- * (the superclass of AtomicContext)).
- *
- * @author Rosanna Lee
- */
-
-public abstract class PartialCompositeDirContext
-        extends AtomicContext implements DirContext {
-
-    protected PartialCompositeDirContext() {
-        _contextType = _PARTIAL;
-    }
-
-// ------ Abstract methods whose implementation come from subclasses
-
-     /* Equivalent to DirContext methods */
-     protected abstract Attributes p_getAttributes(Name name, String[] attrIds,
-                                                     Continuation cont)
-         throws NamingException;
-
-     protected abstract void p_modifyAttributes(Name name, int mod_op,
-                                                Attributes attrs,
-                                                Continuation cont)
-         throws NamingException;
-
-     protected abstract void p_modifyAttributes(Name name,
-                                                ModificationItem[] mods,
-                                                Continuation cont)
-         throws NamingException;
-
-     protected abstract void p_bind(Name name, Object obj,
-                                    Attributes attrs,
-                                    Continuation cont)
-         throws NamingException;
-
-     protected abstract void p_rebind(Name name, Object obj,
-                                      Attributes attrs,
-                                      Continuation cont)
-         throws NamingException;
-
-     protected abstract DirContext p_createSubcontext(Name name,
-                                                     Attributes attrs,
-                                                     Continuation cont)
-         throws NamingException;
-
-     protected abstract NamingEnumeration p_search(Name name,
-                                                   Attributes matchingAttributes,
-                                                   String[] attributesToReturn,
-                                                   Continuation cont)
-         throws NamingException;
-
-     protected abstract NamingEnumeration p_search(Name name,
-                                                   String filter,
-                                                   SearchControls cons,
-                                                   Continuation cont)
-         throws NamingException;
-
-     protected abstract NamingEnumeration p_search(Name name,
-                                                   String filterExpr,
-                                                   Object[] filterArgs,
-                                                   SearchControls cons,
-                                                   Continuation cont)
-         throws NamingException;
-
-     protected abstract DirContext p_getSchema(Name name, Continuation cont)
-         throws NamingException;
-
-     protected abstract DirContext p_getSchemaClassDefinition(Name name,
-                                                             Continuation cont)
-         throws NamingException;
-
-// ------ implementation for DirContext methods using
-// ------ corresponding p_ methods
-
-    public Attributes getAttributes(String name)
-            throws NamingException {
-        return getAttributes(name, null);
-    }
-
-    public Attributes getAttributes(Name name)
-            throws NamingException {
-        return getAttributes(name, null);
-    }
-
-    public Attributes getAttributes(String name, String[] attrIds)
-            throws NamingException {
-        return getAttributes(new CompositeName(name), attrIds);
-    }
-
-    public Attributes getAttributes(Name name, String[] attrIds)
-            throws NamingException {
-        PartialCompositeDirContext ctx = this;
-        Hashtable env = p_getEnvironment();
-        Continuation cont = new Continuation(name, env);
-        Attributes answer;
-        Name nm = name;
-
-        try {
-            answer = ctx.p_getAttributes(nm, attrIds, cont);
-            while (cont.isContinue()) {
-                nm = cont.getRemainingName();
-                ctx = getPCDirContext(cont);
-                answer = ctx.p_getAttributes(nm, attrIds, cont);
-            }
-        } catch (CannotProceedException e) {
-            DirContext cctx = DirectoryManager.getContinuationDirContext(e);
-            answer = cctx.getAttributes(e.getRemainingName(), attrIds);
-        }
-        return answer;
-    }
-
-    public void modifyAttributes(String name, int mod_op, Attributes attrs)
-            throws NamingException {
-        modifyAttributes(new CompositeName(name), mod_op, attrs);
-    }
-
-    public void modifyAttributes(Name name, int mod_op, Attributes attrs)
-            throws NamingException {
-        PartialCompositeDirContext ctx = this;
-        Hashtable env = p_getEnvironment();
-        Continuation cont = new Continuation(name, env);
-        Name nm = name;
-
-        try {
-            ctx.p_modifyAttributes(nm, mod_op, attrs, cont);
-            while (cont.isContinue()) {
-                nm = cont.getRemainingName();
-                ctx = getPCDirContext(cont);
-                ctx.p_modifyAttributes(nm, mod_op, attrs, cont);
-            }
-        } catch (CannotProceedException e) {
-            DirContext cctx = DirectoryManager.getContinuationDirContext(e);
-            cctx.modifyAttributes(e.getRemainingName(), mod_op, attrs);
-        }
-    }
-
-    public void modifyAttributes(String name, ModificationItem[] mods)
-            throws NamingException {
-        modifyAttributes(new CompositeName(name), mods);
-    }
-
-    public void modifyAttributes(Name name, ModificationItem[] mods)
-            throws NamingException {
-        PartialCompositeDirContext ctx = this;
-        Hashtable env = p_getEnvironment();
-        Continuation cont = new Continuation(name, env);
-        Name nm = name;
-
-        try {
-            ctx.p_modifyAttributes(nm, mods, cont);
-            while (cont.isContinue()) {
-                nm = cont.getRemainingName();
-                ctx = getPCDirContext(cont);
-                ctx.p_modifyAttributes(nm, mods, cont);
-            }
-        } catch (CannotProceedException e) {
-            DirContext cctx = DirectoryManager.getContinuationDirContext(e);
-            cctx.modifyAttributes(e.getRemainingName(), mods);
-        }
-    }
-
-    public void bind(String name, Object obj, Attributes attrs)
-            throws NamingException {
-        bind(new CompositeName(name), obj, attrs);
-    }
-
-    public void bind(Name name, Object obj, Attributes attrs)
-            throws NamingException {
-        PartialCompositeDirContext ctx = this;
-        Hashtable env = p_getEnvironment();
-        Continuation cont = new Continuation(name, env);
-        Name nm = name;
-
-        try {
-            ctx.p_bind(nm, obj, attrs, cont);
-            while (cont.isContinue()) {
-                nm = cont.getRemainingName();
-                ctx = getPCDirContext(cont);
-                ctx.p_bind(nm, obj, attrs, cont);
-            }
-        } catch (CannotProceedException e) {
-            DirContext cctx = DirectoryManager.getContinuationDirContext(e);
-            cctx.bind(e.getRemainingName(), obj, attrs);
-        }
-    }
-
-    public void rebind(String name, Object obj, Attributes attrs)
-            throws NamingException {
-        rebind(new CompositeName(name), obj, attrs);
-    }
-
-    public void rebind(Name name, Object obj, Attributes attrs)
-            throws NamingException {
-        PartialCompositeDirContext ctx = this;
-        Hashtable env = p_getEnvironment();
-        Continuation cont = new Continuation(name, env);
-        Name nm = name;
-
-        try {
-            ctx.p_rebind(nm, obj, attrs, cont);
-            while (cont.isContinue()) {
-                nm = cont.getRemainingName();
-                ctx = getPCDirContext(cont);
-                ctx.p_rebind(nm, obj, attrs, cont);
-            }
-        } catch (CannotProceedException e) {
-            DirContext cctx = DirectoryManager.getContinuationDirContext(e);
-            cctx.rebind(e.getRemainingName(), obj, attrs);
-        }
-    }
-
-    public DirContext createSubcontext(String name, Attributes attrs)
-            throws NamingException {
-        return createSubcontext(new CompositeName(name), attrs);
-    }
-
-    public DirContext createSubcontext(Name name, Attributes attrs)
-            throws NamingException {
-        PartialCompositeDirContext ctx = this;
-        Hashtable env = p_getEnvironment();
-        Continuation cont = new Continuation(name, env);
-        DirContext answer;
-        Name nm = name;
-
-        try {
-            answer = ctx.p_createSubcontext(nm, attrs, cont);
-            while (cont.isContinue()) {
-                nm = cont.getRemainingName();
-                ctx = getPCDirContext(cont);
-                answer = ctx.p_createSubcontext(nm, attrs, cont);
-            }
-        } catch (CannotProceedException e) {
-            DirContext cctx = DirectoryManager.getContinuationDirContext(e);
-            answer = cctx.createSubcontext(e.getRemainingName(), attrs);
-        }
-        return answer;
-    }
-
-    public NamingEnumeration<SearchResult>
-        search(String name, Attributes matchingAttributes)
-        throws NamingException
-    {
-        return search(name, matchingAttributes, null);
-    }
-
-    public NamingEnumeration<SearchResult>
-        search(Name name, Attributes matchingAttributes)
-        throws NamingException
-    {
-        return search(name, matchingAttributes, null);
-    }
-
-    public NamingEnumeration<SearchResult>
-        search(String name,
-               Attributes matchingAttributes,
-               String[] attributesToReturn)
-        throws NamingException
-    {
-        return search(new CompositeName(name),
-                      matchingAttributes, attributesToReturn);
-    }
-
-    public NamingEnumeration<SearchResult>
-        search(Name name,
-               Attributes matchingAttributes,
-               String[] attributesToReturn)
-        throws NamingException
-    {
-
-        PartialCompositeDirContext ctx = this;
-        Hashtable env = p_getEnvironment();
-        Continuation cont = new Continuation(name, env);
-        NamingEnumeration answer;
-        Name nm = name;
-
-        try {
-            answer = ctx.p_search(nm, matchingAttributes,
-                                  attributesToReturn, cont);
-            while (cont.isContinue()) {
-                nm = cont.getRemainingName();
-                ctx = getPCDirContext(cont);
-                answer = ctx.p_search(nm, matchingAttributes,
-                                      attributesToReturn, cont);
-            }
-        } catch (CannotProceedException e) {
-            DirContext cctx = DirectoryManager.getContinuationDirContext(e);
-            answer = cctx.search(e.getRemainingName(), matchingAttributes,
-                                 attributesToReturn);
-        }
-        return answer;
-    }
-
-    public NamingEnumeration<SearchResult>
-        search(String name,
-               String filter,
-               SearchControls cons)
-        throws NamingException
-    {
-        return search(new CompositeName(name), filter, cons);
-    }
-
-    public NamingEnumeration<SearchResult>
-        search(Name name,
-               String filter,
-               SearchControls cons)
-        throws NamingException
-    {
-
-        PartialCompositeDirContext ctx = this;
-        Hashtable env = p_getEnvironment();
-        Continuation cont = new Continuation(name, env);
-        NamingEnumeration answer;
-        Name nm = name;
-
-        try {
-            answer = ctx.p_search(nm, filter, cons, cont);
-            while (cont.isContinue()) {
-                nm = cont.getRemainingName();
-                ctx = getPCDirContext(cont);
-                answer = ctx.p_search(nm, filter, cons, cont);
-            }
-        } catch (CannotProceedException e) {
-            DirContext cctx = DirectoryManager.getContinuationDirContext(e);
-            answer = cctx.search(e.getRemainingName(), filter, cons);
-        }
-        return answer;
-    }
-
-    public NamingEnumeration<SearchResult>
-        search(String name,
-               String filterExpr,
-               Object[] filterArgs,
-               SearchControls cons)
-        throws NamingException
-    {
-        return search(new CompositeName(name), filterExpr, filterArgs, cons);
-    }
-
-    public NamingEnumeration<SearchResult>
-        search(Name name,
-               String filterExpr,
-               Object[] filterArgs,
-               SearchControls cons)
-        throws NamingException
-    {
-
-        PartialCompositeDirContext ctx = this;
-        Hashtable env = p_getEnvironment();
-        Continuation cont = new Continuation(name, env);
-        NamingEnumeration answer;
-        Name nm = name;
-
-        try {
-            answer = ctx.p_search(nm, filterExpr, filterArgs, cons, cont);
-            while (cont.isContinue()) {
-                nm = cont.getRemainingName();
-                ctx = getPCDirContext(cont);
-                answer = ctx.p_search(nm, filterExpr, filterArgs, cons, cont);
-            }
-        } catch (CannotProceedException e) {
-            DirContext cctx = DirectoryManager.getContinuationDirContext(e);
-            answer = cctx.search(e.getRemainingName(), filterExpr, filterArgs,
-                                 cons);
-        }
-        return answer;
-    }
-
-    public DirContext getSchema(String name) throws NamingException {
-        return getSchema(new CompositeName(name));
-    }
-
-    public DirContext getSchema(Name name) throws NamingException {
-        PartialCompositeDirContext ctx = this;
-        Hashtable env = p_getEnvironment();
-        Continuation cont = new Continuation(name, env);
-        DirContext answer;
-        Name nm = name;
-
-        try {
-            answer = ctx.p_getSchema(nm, cont);
-            while (cont.isContinue()) {
-                nm = cont.getRemainingName();
-                ctx = getPCDirContext(cont);
-                answer = ctx.p_getSchema(nm, cont);
-            }
-        } catch (CannotProceedException e) {
-            DirContext cctx = DirectoryManager.getContinuationDirContext(e);
-            answer = cctx.getSchema(e.getRemainingName());
-        }
-        return answer;
-    }
-
-    public DirContext getSchemaClassDefinition(String name)
-            throws NamingException {
-        return getSchemaClassDefinition(new CompositeName(name));
-    }
-
-    public DirContext getSchemaClassDefinition(Name name)
-            throws NamingException {
-        PartialCompositeDirContext ctx = this;
-        Hashtable env = p_getEnvironment();
-        Continuation cont = new Continuation(name, env);
-        DirContext answer;
-        Name nm = name;
-
-        try {
-            answer = ctx.p_getSchemaClassDefinition(nm, cont);
-            while (cont.isContinue()) {
-                nm = cont.getRemainingName();
-                ctx = getPCDirContext(cont);
-                answer = ctx.p_getSchemaClassDefinition(nm, cont);
-            }
-        } catch (CannotProceedException e) {
-            DirContext cctx = DirectoryManager.getContinuationDirContext(e);
-            answer = cctx.getSchemaClassDefinition(e.getRemainingName());
-        }
-        return answer;
-    }
-
-// ------ internal method used by PartialCompositeDirContext
-
-    /**
-     * Retrieves a PartialCompositeDirContext for the resolved object in
-     * cont.  Throws CannotProceedException if not successful.
-     */
-    protected static PartialCompositeDirContext getPCDirContext(Continuation cont)
-            throws NamingException {
-
-        PartialCompositeContext pctx =
-            PartialCompositeContext.getPCContext(cont);
-
-        if (!(pctx instanceof PartialCompositeDirContext)) {
-            throw cont.fillInException(
-                    new NotContextException(
-                            "Resolved object is not a DirContext."));
-        }
-
-        return (PartialCompositeDirContext)pctx;
-    }
-
-
-//------ Compensation for inheriting from AtomicContext
-
-    /*
-     * Dummy implementations defined here so that direct subclasses
-     * of PartialCompositeDirContext or ComponentDirContext do not
-     * have to provide dummy implementations for these.
-     * Override these for subclasses of AtomicDirContext.
-     */
-
-    protected StringHeadTail c_parseComponent(String inputName,
-        Continuation cont) throws NamingException {
-            OperationNotSupportedException e = new
-                OperationNotSupportedException();
-            throw cont.fillInException(e);
-        }
-
-    protected Object a_lookup(String name, Continuation cont)
-        throws NamingException {
-            OperationNotSupportedException e = new
-                OperationNotSupportedException();
-            throw cont.fillInException(e);
-        }
-
-    protected Object a_lookupLink(String name, Continuation cont)
-        throws NamingException {
-            OperationNotSupportedException e = new
-                OperationNotSupportedException();
-            throw cont.fillInException(e);
-        }
-
-    protected NamingEnumeration a_list(
-        Continuation cont) throws NamingException {
-            OperationNotSupportedException e = new
-                OperationNotSupportedException();
-            throw cont.fillInException(e);
-        }
-
-    protected NamingEnumeration a_listBindings(
-        Continuation cont) throws NamingException {
-            OperationNotSupportedException e = new
-                OperationNotSupportedException();
-            throw cont.fillInException(e);
-        }
-
-    protected void a_bind(String name, Object obj, Continuation cont)
-        throws NamingException {
-            OperationNotSupportedException e = new
-                OperationNotSupportedException();
-            throw cont.fillInException(e);
-        }
-
-    protected void a_rebind(String name, Object obj, Continuation cont)
-        throws NamingException {
-            OperationNotSupportedException e = new
-                OperationNotSupportedException();
-            throw cont.fillInException(e);
-        }
-
-    protected void a_unbind(String name, Continuation cont)
-        throws NamingException {
-            OperationNotSupportedException e = new
-                OperationNotSupportedException();
-            throw cont.fillInException(e);
-        }
-
-    protected void a_destroySubcontext(String name, Continuation cont)
-        throws NamingException {
-            OperationNotSupportedException e = new
-                OperationNotSupportedException();
-            throw cont.fillInException(e);
-        }
-
-    protected Context a_createSubcontext(String name, Continuation cont)
-        throws NamingException {
-            OperationNotSupportedException e = new
-                OperationNotSupportedException();
-            throw cont.fillInException(e);
-        }
-
-    protected void a_rename(String oldname, Name newname,
-        Continuation cont) throws NamingException {
-            OperationNotSupportedException e = new
-                OperationNotSupportedException();
-            throw cont.fillInException(e);
-        }
-
-    protected NameParser a_getNameParser(Continuation cont)
-        throws NamingException {
-            OperationNotSupportedException e = new
-                OperationNotSupportedException();
-            throw cont.fillInException(e);
-        }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/toolkit/ctx/StringHeadTail.java b/ojluni/src/main/java/com/sun/jndi/toolkit/ctx/StringHeadTail.java
deleted file mode 100755
index 9bbcfe3..0000000
--- a/ojluni/src/main/java/com/sun/jndi/toolkit/ctx/StringHeadTail.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (c) 1999, 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.jndi.toolkit.ctx;
-
-/**
-  * A class for returning the result of c_parseComponent().
-  *
-  * @author Rosanna Lee
-  */
-public class StringHeadTail {
-    private int status;
-    private String head;
-    private String tail;
-
-    public StringHeadTail(String head, String tail) {
-        this(head, tail, 0);
-    }
-
-    public StringHeadTail(String head, String tail, int status) {
-        this.status = status;
-        this.head = head;
-        this.tail = tail;
-    }
-
-    public void setStatus(int status) {
-        this.status = status;
-    }
-
-    public String getHead() {
-        return this.head;
-    }
-
-    public String getTail() {
-        return this.tail;
-    }
-
-    public int getStatus() {
-        return this.status;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/toolkit/dir/AttrFilter.java b/ojluni/src/main/java/com/sun/jndi/toolkit/dir/AttrFilter.java
deleted file mode 100755
index 010428b..0000000
--- a/ojluni/src/main/java/com/sun/jndi/toolkit/dir/AttrFilter.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (c) 1999, 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.jndi.toolkit.dir;
-
-import javax.naming.NamingException;
-import javax.naming.directory.Attributes;
-
-/**
-  * Is implemented by classes that can perform filter checks on
-  * an attribute set.
-  */
-
-public interface AttrFilter {
-
-    /**
-      * Determines whether an attribute passes the filter.
-      */
-    public boolean check(Attributes targetAttrs) throws NamingException;
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/toolkit/dir/ContainmentFilter.java b/ojluni/src/main/java/com/sun/jndi/toolkit/dir/ContainmentFilter.java
deleted file mode 100755
index ae6183e..0000000
--- a/ojluni/src/main/java/com/sun/jndi/toolkit/dir/ContainmentFilter.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-/**
-  * Supports checking an attribute set satisfies a filter
-  * that is specified as a set of "matching" attributes.
-  * Checking is done by determining whether the given attribute set
-  * is a superset of the matching ones.
-  *
-  * @author Rosanna Lee
-  */
-
-package com.sun.jndi.toolkit.dir;
-
-import javax.naming.*;
-import javax.naming.directory.*;
-
-public class ContainmentFilter implements AttrFilter {
-    private Attributes matchingAttrs;
-
-    public ContainmentFilter(Attributes match) {
-        matchingAttrs = match;
-    }
-
-    public boolean check(Attributes attrs) throws NamingException {
-        return matchingAttrs == null ||
-            matchingAttrs.size() == 0 ||
-            contains(attrs, matchingAttrs);
-    }
-
-    // returns true if superset contains subset
-    public static boolean contains(Attributes superset, Attributes subset)
-        throws NamingException {
-          if (subset == null)
-            return true;  // an empty set is always a subset
-
-            NamingEnumeration m = subset.getAll();
-            while (m.hasMore()) {
-                if (superset == null) {
-                    return false;  // contains nothing
-                }
-                Attribute target = (Attribute) m.next();
-                Attribute fromSuper = superset.get(target.getID());
-                if (fromSuper == null) {
-                    return false;
-                } else {
-                    // check whether attribute values match
-                    if (target.size() > 0) {
-                        NamingEnumeration vals = target.getAll();
-                        while (vals.hasMore()) {
-                            if (!fromSuper.contains(vals.next())) {
-                                return false;
-                            }
-                        }
-                    }
-                }
-            }
-            return true;
-        }
-
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/toolkit/dir/ContextEnumerator.java b/ojluni/src/main/java/com/sun/jndi/toolkit/dir/ContextEnumerator.java
deleted file mode 100755
index 90ae3f9..0000000
--- a/ojluni/src/main/java/com/sun/jndi/toolkit/dir/ContextEnumerator.java
+++ /dev/null
@@ -1,235 +0,0 @@
-/*
- * Copyright (c) 1999, 2000, 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.jndi.toolkit.dir;
-
-import javax.naming.*;
-import javax.naming.directory.SearchControls;
-import java.util.*;
-
-/**
-  * A class for recursively enumerating the contents of a Context;
-  *
-  * @author Jon Ruiz
-  */
-public class ContextEnumerator implements NamingEnumeration {
-
-    private static boolean debug = false;
-    private NamingEnumeration children = null;
-    private Binding currentChild = null;
-    private boolean currentReturned = false;
-    private Context root;
-    private ContextEnumerator currentChildEnum = null;
-    private boolean currentChildExpanded = false;
-    private boolean rootProcessed = false;
-    private int scope = SearchControls.SUBTREE_SCOPE;
-    private String contextName = "";
-
-    public ContextEnumerator(Context context) throws NamingException {
-        this(context, SearchControls.SUBTREE_SCOPE);
-    }
-
-    public ContextEnumerator(Context context, int scope)
-        throws NamingException {
-            // return this object except when searching single-level
-        this(context, scope, "", scope != SearchControls.ONELEVEL_SCOPE);
-   }
-
-    protected ContextEnumerator(Context context, int scope, String contextName,
-                             boolean returnSelf)
-        throws NamingException {
-        if(context == null) {
-            throw new IllegalArgumentException("null context passed");
-        }
-
-        root = context;
-
-        // No need to list children if we're only searching object
-        if (scope != SearchControls.OBJECT_SCOPE) {
-            children = getImmediateChildren(context);
-        }
-        this.scope = scope;
-        this.contextName = contextName;
-        // pretend root is processed, if we're not supposed to return ourself
-        rootProcessed = !returnSelf;
-        prepNextChild();
-    }
-
-    // Subclass should override if it wants to avoid calling obj factory
-    protected NamingEnumeration getImmediateChildren(Context ctx)
-        throws NamingException {
-            return ctx.listBindings("");
-    }
-
-    // Subclass should overrride so that instance is of same type as subclass
-    protected ContextEnumerator newEnumerator(Context ctx, int scope,
-        String contextName, boolean returnSelf) throws NamingException {
-            return new ContextEnumerator(ctx, scope, contextName, returnSelf);
-    }
-
-    public boolean hasMore() throws NamingException {
-        return !rootProcessed ||
-            (scope != SearchControls.OBJECT_SCOPE && hasMoreDescendants());
-    }
-
-    public boolean hasMoreElements() {
-        try {
-            return hasMore();
-        } catch (NamingException e) {
-            return false;
-        }
-    }
-
-    public Object nextElement() {
-        try {
-            return next();
-        } catch (NamingException e) {
-            throw new NoSuchElementException(e.toString());
-        }
-    }
-
-    public Object next() throws NamingException {
-        if (!rootProcessed) {
-            rootProcessed = true;
-            return new Binding("", root.getClass().getName(),
-                               root, true);
-        }
-
-        if (scope != SearchControls.OBJECT_SCOPE && hasMoreDescendants()) {
-            return getNextDescendant();
-        }
-
-        throw new NoSuchElementException();
-    }
-
-    public void close() throws NamingException {
-        root = null;
-    }
-
-    private boolean hasMoreChildren() throws NamingException {
-        return children != null && children.hasMore();
-    }
-
-    private Binding getNextChild() throws NamingException {
-        Binding oldBinding = ((Binding)children.next());
-        Binding newBinding = null;
-
-        // if the name is relative, we need to add it to the name of this
-        // context to keep it relative w.r.t. the root context we are
-        // enumerating
-        if(oldBinding.isRelative() && !contextName.equals("")) {
-            NameParser parser = root.getNameParser("");
-            Name newName = parser.parse(contextName);
-            newName.add(oldBinding.getName());
-            if(debug) {
-                System.out.println("ContextEnumerator: adding " + newName);
-            }
-            newBinding = new Binding(newName.toString(),
-                                     oldBinding.getClassName(),
-                                     oldBinding.getObject(),
-                                     oldBinding.isRelative());
-        } else {
-            if(debug) {
-                System.out.println("ContextEnumerator: using old binding");
-            }
-            newBinding = oldBinding;
-        }
-
-        return newBinding;
-    }
-
-    private boolean hasMoreDescendants() throws NamingException {
-        // if the current child is expanded, see if it has more elements
-        if (!currentReturned) {
-            if(debug) {System.out.println("hasMoreDescendants returning " +
-                                          (currentChild != null) ); }
-            return currentChild != null;
-        } else if (currentChildExpanded && currentChildEnum.hasMore()) {
-
-            if(debug) {System.out.println("hasMoreDescendants returning " +
-                "true");}
-
-            return true;
-        } else {
-            if(debug) {System.out.println("hasMoreDescendants returning " +
-                "hasMoreChildren");}
-            return hasMoreChildren();
-        }
-    }
-
-    private Binding getNextDescendant() throws NamingException {
-
-        if (!currentReturned) {
-            // returning parent
-            if(debug) {System.out.println("getNextDescedant: simple case");}
-
-            currentReturned = true;
-            return currentChild;
-
-        } else if (currentChildExpanded && currentChildEnum.hasMore()) {
-
-            if(debug) {System.out.println("getNextDescedant: expanded case");}
-
-            // if the current child is expanded, use it's enumerator
-            return (Binding)currentChildEnum.next();
-
-        } else {
-
-            // Ready to go onto next child
-            if(debug) {System.out.println("getNextDescedant: next case");}
-
-            prepNextChild();
-            return getNextDescendant();
-        }
-    }
-
-    private void prepNextChild() throws NamingException {
-        if(hasMoreChildren()) {
-            try {
-                currentChild = getNextChild();
-                currentReturned = false;
-            } catch (NamingException e){
-                if (debug) System.out.println(e);
-                if (debug) e.printStackTrace();
-            }
-        } else {
-            currentChild = null;
-            return;
-        }
-
-        if(scope == SearchControls.SUBTREE_SCOPE &&
-           currentChild.getObject() instanceof Context) {
-            currentChildEnum = newEnumerator(
-                                          (Context)(currentChild.getObject()),
-                                          scope, currentChild.getName(),
-                                          false);
-            currentChildExpanded = true;
-            if(debug) {System.out.println("prepNextChild: expanded");}
-        } else {
-            currentChildExpanded = false;
-            currentChildEnum = null;
-            if(debug) {System.out.println("prepNextChild: normal");}
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/toolkit/dir/DirSearch.java b/ojluni/src/main/java/com/sun/jndi/toolkit/dir/DirSearch.java
deleted file mode 100755
index 98e0e16..0000000
--- a/ojluni/src/main/java/com/sun/jndi/toolkit/dir/DirSearch.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright (c) 1999, 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.jndi.toolkit.dir;
-
-import javax.naming.*;
-import javax.naming.directory.*;
-
-/**
-  * A class for searching DirContexts
-  *
-  * @author Jon Ruiz
-  */
-public class DirSearch {
-   public static NamingEnumeration search(DirContext ctx,
-       Attributes matchingAttributes,
-       String[] attributesToReturn) throws NamingException {
-        SearchControls cons = new SearchControls(
-            SearchControls.ONELEVEL_SCOPE,
-            0, 0, attributesToReturn,
-            false, false);
-
-        return new LazySearchEnumerationImpl(
-            new ContextEnumerator(ctx, SearchControls.ONELEVEL_SCOPE),
-            new ContainmentFilter(matchingAttributes),
-            cons);
-    }
-
-    public static NamingEnumeration search(DirContext ctx,
-        String filter, SearchControls cons) throws NamingException {
-
-        if (cons == null)
-            cons = new SearchControls();
-
-        return new LazySearchEnumerationImpl(
-            new ContextEnumerator(ctx, cons.getSearchScope()),
-            new SearchFilter(filter),
-            cons);
-    }
-
-    public static NamingEnumeration search(DirContext ctx,
-        String filterExpr, Object[] filterArgs, SearchControls cons)
-        throws NamingException {
-
-        String strfilter = SearchFilter.format(filterExpr, filterArgs);
-        return search(ctx, strfilter, cons);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/toolkit/dir/HierMemDirCtx.java b/ojluni/src/main/java/com/sun/jndi/toolkit/dir/HierMemDirCtx.java
deleted file mode 100755
index 48d7008..0000000
--- a/ojluni/src/main/java/com/sun/jndi/toolkit/dir/HierMemDirCtx.java
+++ /dev/null
@@ -1,943 +0,0 @@
-/*
- * Copyright (c) 1999, 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.jndi.toolkit.dir;
-
-import javax.naming.*;
-import javax.naming.directory.*;
-import javax.naming.spi.*;
-import java.util.*;
-
-/**
- * A sample service provider that implements a hierarchical directory in memory.
- * Every operation begins by doing a lookup on the name passed to it and then
- * calls a corresponding "do<OperationName>" on the result of the lookup. The
- * "do<OperationName>" does the work without any further resolution (it assumes
- * that it is the target context).
- */
-
-public class HierMemDirCtx implements DirContext {
-
-    static private final boolean debug = false;
-    private static final NameParser defaultParser = new HierarchicalNameParser();
-
-    protected Hashtable myEnv;
-    protected Hashtable bindings;
-    protected Attributes attrs;
-    protected boolean ignoreCase = false;
-    protected NamingException readOnlyEx = null;
-    protected NameParser myParser = defaultParser;
-
-    private boolean alwaysUseFactory;
-
-    public void close() throws NamingException {
-        myEnv = null;
-        bindings = null;
-        attrs = null;
-    }
-
-    public String getNameInNamespace() throws NamingException {
-        throw new OperationNotSupportedException(
-            "Cannot determine full name");
-    }
-
-    public HierMemDirCtx() {
-        this(null, false, false);
-    }
-
-    public HierMemDirCtx(boolean ignoreCase) {
-        this(null, ignoreCase, false);
-    }
-
-    public HierMemDirCtx(Hashtable environment, boolean ignoreCase) {
-        this(environment, ignoreCase, false);
-    }
-
-    protected HierMemDirCtx(Hashtable environment, boolean ignoreCase,
-        boolean useFac) {
-        myEnv = environment;
-        this.ignoreCase = ignoreCase;
-        init();
-        this.alwaysUseFactory = useFac;
-    }
-
-    private void init() {
-        attrs = new BasicAttributes(ignoreCase);
-        bindings = new Hashtable(11, 0.75f);
-    }
-
-    public Object lookup(String name) throws NamingException {
-        return lookup(myParser.parse(name));
-    }
-
-    public Object lookup(Name name) throws NamingException {
-        return doLookup(name, alwaysUseFactory);
-    }
-
-    public Object doLookup(Name name, boolean useFactory)
-        throws NamingException {
-
-        Object target = null;
-        name = canonizeName(name);
-
-        switch(name.size()) {
-        case 0:
-            // name is empty, caller wants this object
-            target = this;
-            break;
-
-        case 1:
-            // name is atomic, caller wants one of this object's bindings
-            target = bindings.get(name);
-            break;
-
-        default:
-            // name is compound, delegate to child context
-            HierMemDirCtx ctx = (HierMemDirCtx)bindings.get(name.getPrefix(1));
-            if(ctx == null) {
-                target = null;
-            } else {
-                target = ctx.doLookup(name.getSuffix(1), false);
-            }
-            break;
-        }
-
-        if(target == null) {
-            throw new NameNotFoundException(name.toString());
-        }
-
-        if (useFactory) {
-            try {
-                return DirectoryManager.getObjectInstance(target,
-                    name, this, myEnv,
-                    (target instanceof HierMemDirCtx) ?
-                    ((HierMemDirCtx)target).attrs : null);
-            } catch (NamingException e) {
-                throw e;
-            } catch (Exception e) {
-                NamingException e2 = new NamingException(
-                    "Problem calling getObjectInstance");
-                e2.setRootCause(e);
-                throw e2;
-            }
-        } else {
-            return target;
-        }
-    }
-
-    public void bind(String name, Object obj) throws NamingException {
-        bind(myParser.parse(name), obj);
-    }
-
-    public void bind(Name name, Object obj) throws NamingException {
-        doBind(name, obj, null, alwaysUseFactory);
-    }
-
-    public void bind(String name, Object obj, Attributes attrs)
-            throws NamingException {
-        bind(myParser.parse(name), obj, attrs);
-    }
-
-    public void bind(Name name, Object obj, Attributes attrs)
-            throws NamingException {
-        doBind(name, obj, attrs, alwaysUseFactory);
-    }
-
-    protected void doBind(Name name, Object obj, Attributes attrs,
-        boolean useFactory) throws NamingException {
-        if (name.isEmpty()) {
-            throw new InvalidNameException("Cannot bind empty name");
-        }
-
-        if (useFactory) {
-            DirStateFactory.Result res = DirectoryManager.getStateToBind(
-                obj, name, this, myEnv, attrs);
-            obj = res.getObject();
-            attrs = res.getAttributes();
-        }
-
-        HierMemDirCtx ctx= (HierMemDirCtx) doLookup(getInternalName(name), false);
-        ctx.doBindAux(getLeafName(name), obj);
-
-        if (attrs != null && attrs.size() > 0) {
-            modifyAttributes(name, ADD_ATTRIBUTE, attrs);
-        }
-    }
-
-    protected void doBindAux(Name name, Object obj) throws NamingException {
-        if (readOnlyEx != null) {
-            throw (NamingException) readOnlyEx.fillInStackTrace();
-        }
-
-        if (bindings.get(name) != null) {
-            throw new NameAlreadyBoundException(name.toString());
-        }
-        if(obj instanceof HierMemDirCtx) {
-            bindings.put(name, obj);
-        } else {
-            throw new SchemaViolationException(
-                "This context only supports binding objects of it's own kind");
-        }
-    }
-
-    public void rebind(String name, Object obj) throws NamingException {
-        rebind(myParser.parse(name), obj);
-    }
-
-    public void rebind(Name name, Object obj) throws NamingException {
-        doRebind(name, obj, null, alwaysUseFactory);
-    }
-
-    public void rebind(String name, Object obj, Attributes attrs)
-            throws NamingException {
-        rebind(myParser.parse(name), obj, attrs);
-    }
-
-    public void rebind(Name name, Object obj, Attributes attrs)
-            throws NamingException {
-        doRebind(name, obj, attrs, alwaysUseFactory);
-    }
-
-    protected void doRebind(Name name, Object obj, Attributes attrs,
-        boolean useFactory) throws NamingException {
-        if (name.isEmpty()) {
-            throw new InvalidNameException("Cannot rebind empty name");
-        }
-
-        if (useFactory) {
-            DirStateFactory.Result res = DirectoryManager.getStateToBind(
-                obj, name, this, myEnv, attrs);
-            obj = res.getObject();
-            attrs = res.getAttributes();
-        }
-
-        HierMemDirCtx ctx= (HierMemDirCtx) doLookup(getInternalName(name), false);
-        ctx.doRebindAux(getLeafName(name), obj);
-
-        //
-        // attrs == null -> use attrs from obj
-        // attrs != null -> use attrs
-        //
-        // %%% Strictly speaking, when attrs is non-null, we should
-        // take the explicit step of removing obj's attrs.
-        // We don't do that currently.
-
-        if (attrs != null && attrs.size() > 0) {
-            modifyAttributes(name, ADD_ATTRIBUTE, attrs);
-        }
-    }
-
-    protected void doRebindAux(Name name, Object obj) throws NamingException {
-        if (readOnlyEx != null) {
-            throw (NamingException) readOnlyEx.fillInStackTrace();
-        }
-        if(obj instanceof HierMemDirCtx) {
-            bindings.put(name, obj);
-
-        } else {
-            throw new SchemaViolationException(
-                "This context only supports binding objects of it's own kind");
-        }
-    }
-
-    public void unbind(String name) throws NamingException {
-        unbind(myParser.parse(name));
-    }
-
-    public void unbind(Name name) throws NamingException {
-        if (name.isEmpty()) {
-            throw new InvalidNameException("Cannot unbind empty name");
-        } else {
-            HierMemDirCtx ctx=
-                (HierMemDirCtx) doLookup(getInternalName(name), false);
-            ctx.doUnbind(getLeafName(name));
-        }
-    }
-
-    protected void doUnbind(Name name) throws NamingException {
-        if (readOnlyEx != null) {
-            throw (NamingException) readOnlyEx.fillInStackTrace();
-        }
-
-        bindings.remove(name);  // attrs will also be removed along with ctx
-    }
-
-    public void rename(String oldname, String newname)
-            throws NamingException {
-         rename(myParser.parse(oldname), myParser.parse(newname));
-    }
-
-    public void rename(Name oldname, Name newname)
-            throws NamingException {
-
-        if(newname.isEmpty() || oldname.isEmpty()) {
-            throw new InvalidNameException("Cannot rename empty name");
-        }
-
-        if (!getInternalName(newname).equals(getInternalName(oldname))) {
-            throw new InvalidNameException("Cannot rename across contexts");
-        }
-
-        HierMemDirCtx ctx =
-            (HierMemDirCtx) doLookup(getInternalName(newname), false);
-        ctx.doRename(getLeafName(oldname), getLeafName(newname));
-    }
-
-    protected void doRename(Name oldname, Name newname) throws NamingException {
-        if (readOnlyEx != null) {
-            throw (NamingException) readOnlyEx.fillInStackTrace();
-        }
-
-        oldname = canonizeName(oldname);
-        newname = canonizeName(newname);
-
-        // Check if new name exists
-        if (bindings.get(newname) != null) {
-            throw new NameAlreadyBoundException(newname.toString());
-        }
-
-        // Check if old name is bound
-        Object oldBinding = bindings.remove(oldname);
-        if (oldBinding == null) {
-            throw new NameNotFoundException(oldname.toString());
-        }
-
-        bindings.put(newname, oldBinding);
-    }
-
-    public NamingEnumeration list(String name) throws NamingException {
-        return list(myParser.parse(name));
-    }
-
-    public NamingEnumeration list(Name name) throws NamingException {
-        HierMemDirCtx ctx = (HierMemDirCtx) doLookup(name, false);
-        return ctx.doList();
-    }
-
-    protected NamingEnumeration doList () throws NamingException {
-        return new FlatNames(bindings.keys());
-    }
-
-
-    public NamingEnumeration listBindings(String name) throws NamingException {
-        return listBindings(myParser.parse(name));
-    }
-
-    public NamingEnumeration listBindings(Name name) throws NamingException {
-        HierMemDirCtx ctx = (HierMemDirCtx)doLookup(name, false);
-        return ctx.doListBindings(alwaysUseFactory);
-    }
-
-    protected NamingEnumeration doListBindings(boolean useFactory)
-        throws NamingException {
-        return new FlatBindings(bindings, myEnv, useFactory);
-    }
-
-    public void destroySubcontext(String name) throws NamingException {
-        destroySubcontext(myParser.parse(name));
-    }
-
-    public void destroySubcontext(Name name) throws NamingException {
-        HierMemDirCtx ctx =
-            (HierMemDirCtx) doLookup(getInternalName(name), false);
-        ctx.doDestroySubcontext(getLeafName(name));
-    }
-
-    protected void doDestroySubcontext(Name name) throws NamingException {
-
-        if (readOnlyEx != null) {
-            throw (NamingException) readOnlyEx.fillInStackTrace();
-        }
-        name = canonizeName(name);
-        bindings.remove(name);
-    }
-
-    public Context createSubcontext(String name) throws NamingException {
-        return createSubcontext(myParser.parse(name));
-    }
-
-    public Context createSubcontext(Name name) throws NamingException {
-        return createSubcontext(name, null);
-    }
-
-    public DirContext createSubcontext(String name, Attributes attrs)
-            throws NamingException {
-        return createSubcontext(myParser.parse(name), attrs);
-    }
-
-    public DirContext createSubcontext(Name name, Attributes attrs)
-            throws NamingException {
-        HierMemDirCtx ctx =
-            (HierMemDirCtx) doLookup(getInternalName(name), false);
-        return ctx.doCreateSubcontext(getLeafName(name), attrs);
-    }
-
-    protected DirContext doCreateSubcontext(Name name, Attributes attrs)
-        throws NamingException {
-        if (readOnlyEx != null) {
-            throw (NamingException) readOnlyEx.fillInStackTrace();
-        }
-
-        name = canonizeName(name);
-
-        if (bindings.get(name) != null) {
-            throw new NameAlreadyBoundException(name.toString());
-        }
-        HierMemDirCtx newCtx = createNewCtx();
-        bindings.put(name, newCtx);
-        if(attrs != null) {
-            newCtx.modifyAttributes("", ADD_ATTRIBUTE, attrs);
-        }
-        return newCtx;
-    }
-
-
-    public Object lookupLink(String name) throws NamingException {
-        // This context does not treat links specially
-        return lookupLink(myParser.parse(name));
-    }
-
-    public Object lookupLink(Name name) throws NamingException {
-        // Flat namespace; no federation; just call string version
-        return lookup(name);
-    }
-
-    public NameParser getNameParser(String name) throws NamingException {
-        return myParser;
-    }
-
-    public NameParser getNameParser(Name name) throws NamingException {
-        return myParser;
-    }
-
-    public String composeName(String name, String prefix)
-            throws NamingException {
-        Name result = composeName(new CompositeName(name),
-                                  new CompositeName(prefix));
-        return result.toString();
-    }
-
-    public Name composeName(Name name, Name prefix)
-            throws NamingException {
-        name = canonizeName(name);
-        prefix = canonizeName(prefix);
-        Name result = (Name)(prefix.clone());
-        result.addAll(name);
-        return result;
-    }
-
-    public Object addToEnvironment(String propName, Object propVal)
-            throws NamingException {
-        myEnv = (myEnv == null) ?
-            new Hashtable(11, 0.75f) : (Hashtable)myEnv.clone();
-
-        return myEnv.put(propName, propVal);
-    }
-
-    public Object removeFromEnvironment(String propName)
-            throws NamingException {
-        if (myEnv == null)
-            return null;
-
-        myEnv = (Hashtable)myEnv.clone();
-        return myEnv.remove(propName);
-    }
-
-    public Hashtable getEnvironment() throws NamingException {
-        if (myEnv == null) {
-            return new Hashtable(5, 0.75f);
-        } else {
-            return (Hashtable)myEnv.clone();
-        }
-    }
-
-    public Attributes getAttributes(String name)
-       throws NamingException {
-       return getAttributes(myParser.parse(name));
-    }
-
-    public Attributes getAttributes(Name name)
-        throws NamingException {
-        HierMemDirCtx ctx = (HierMemDirCtx) doLookup(name, false);
-        return ctx.doGetAttributes();
-    }
-
-    protected Attributes doGetAttributes() throws NamingException {
-        return (Attributes)attrs.clone();
-    }
-
-    public Attributes getAttributes(String name, String[] attrIds)
-        throws NamingException {
-        return getAttributes(myParser.parse(name), attrIds);
-    }
-
-    public Attributes getAttributes(Name name, String[] attrIds)
-        throws NamingException {
-        HierMemDirCtx ctx = (HierMemDirCtx) doLookup(name, false);
-        return ctx.doGetAttributes(attrIds);
-    }
-
-    protected Attributes doGetAttributes(String[] attrIds)
-        throws NamingException {
-
-        if (attrIds == null) {
-            return doGetAttributes();
-        }
-        Attributes attrs = new BasicAttributes(ignoreCase);
-        Attribute attr = null;
-            for(int i=0; i<attrIds.length; i++) {
-                attr = this.attrs.get(attrIds[i]);
-                if (attr != null) {
-                    attrs.put(attr);
-                }
-            }
-        return attrs;
-    }
-
-    public void modifyAttributes(String name, int mod_op, Attributes attrs)
-        throws NamingException   {
-        modifyAttributes(myParser.parse(name), mod_op, attrs);
-    }
-
-    public void modifyAttributes(Name name, int mod_op, Attributes attrs)
-        throws NamingException {
-
-        if (attrs == null || attrs.size() == 0) {
-            throw new IllegalArgumentException(
-                "Cannot modify without an attribute");
-        }
-
-        // turn it into a modification Enumeration and pass it on
-        NamingEnumeration attrEnum = attrs.getAll();
-        ModificationItem[] mods = new ModificationItem[attrs.size()];
-        for (int i = 0; i < mods.length && attrEnum.hasMoreElements(); i++) {
-            mods[i] = new ModificationItem(mod_op, (Attribute)attrEnum.next());
-        }
-
-        modifyAttributes(name, mods);
-    }
-
-    public void modifyAttributes(String name, ModificationItem[] mods)
-        throws NamingException   {
-        modifyAttributes(myParser.parse(name), mods);
-    }
-
-    public void modifyAttributes(Name name, ModificationItem[] mods)
-        throws NamingException {
-        HierMemDirCtx ctx = (HierMemDirCtx) doLookup(name, false);
-        ctx.doModifyAttributes(mods);
-    }
-
-    protected void doModifyAttributes(ModificationItem[] mods)
-        throws NamingException {
-
-        if (readOnlyEx != null) {
-            throw (NamingException) readOnlyEx.fillInStackTrace();
-        }
-
-        applyMods(mods, attrs);
-    }
-
-    protected static Attributes applyMods(ModificationItem[] mods,
-        Attributes orig) throws NamingException {
-
-        ModificationItem mod;
-        Attribute existingAttr, modAttr;
-        NamingEnumeration modVals;
-
-        for (int i = 0; i < mods.length; i++) {
-            mod = mods[i];
-            modAttr = mod.getAttribute();
-
-            switch(mod.getModificationOp()) {
-            case ADD_ATTRIBUTE:
-                if (debug) {
-                    System.out.println("HierMemDSCtx: adding " +
-                                       mod.getAttribute().toString());
-                }
-                existingAttr = orig.get(modAttr.getID());
-                if (existingAttr == null) {
-                    orig.put((Attribute)modAttr.clone());
-                } else {
-                    // Add new attribute values to existing attribute
-                    modVals = modAttr.getAll();
-                    while (modVals.hasMore()) {
-                        existingAttr.add(modVals.next());
-                    }
-                }
-                break;
-            case REPLACE_ATTRIBUTE:
-                if (modAttr.size() == 0) {
-                    orig.remove(modAttr.getID());
-                } else {
-                    orig.put((Attribute)modAttr.clone());
-                }
-                break;
-            case REMOVE_ATTRIBUTE:
-                existingAttr = orig.get(modAttr.getID());
-                if (existingAttr != null) {
-                    if (modAttr.size() == 0) {
-                        orig.remove(modAttr.getID());
-                    } else {
-                        // Remove attribute values from existing attribute
-                        modVals = modAttr.getAll();
-                        while (modVals.hasMore()) {
-                            existingAttr.remove(modVals.next());
-                        }
-                        if (existingAttr.size() == 0) {
-                            orig.remove(modAttr.getID());
-                        }
-                    }
-                }
-                break;
-            default:
-                throw new AttributeModificationException("Unknown mod_op");
-            }
-        }
-
-        return orig;
-    }
-
-    public NamingEnumeration search(String name,
-                                    Attributes matchingAttributes)
-        throws NamingException {
-        return search(name, matchingAttributes, null);
-    }
-
-    public NamingEnumeration search(Name name,
-                                    Attributes matchingAttributes)
-        throws NamingException {
-            return search(name, matchingAttributes, null);
-    }
-
-     public NamingEnumeration search(String name,
-                                    Attributes matchingAttributes,
-                                    String[] attributesToReturn)
-        throws NamingException {
-        return search(myParser.parse(name), matchingAttributes,
-            attributesToReturn);
-    }
-
-     public NamingEnumeration search(Name name,
-                                    Attributes matchingAttributes,
-                                    String[] attributesToReturn)
-         throws NamingException {
-
-        HierMemDirCtx target = (HierMemDirCtx) doLookup(name, false);
-
-        SearchControls cons = new SearchControls();
-        cons.setReturningAttributes(attributesToReturn);
-
-        return new LazySearchEnumerationImpl(
-            target.doListBindings(false),
-            new ContainmentFilter(matchingAttributes),
-            cons, this, myEnv,
-            false); // alwaysUseFactory ignored because objReturnFlag == false
-    }
-
-    public NamingEnumeration search(Name name,
-                                    String filter,
-                                    SearchControls cons)
-        throws NamingException {
-        DirContext target = (DirContext) doLookup(name, false);
-
-        SearchFilter stringfilter = new SearchFilter(filter);
-        return new LazySearchEnumerationImpl(
-            new HierContextEnumerator(target,
-                (cons != null) ? cons.getSearchScope() :
-                SearchControls.ONELEVEL_SCOPE),
-            stringfilter,
-            cons, this, myEnv, alwaysUseFactory);
-    }
-
-     public NamingEnumeration search(Name name,
-                                    String filterExpr,
-                                    Object[] filterArgs,
-                                    SearchControls cons)
-            throws NamingException {
-
-        String strfilter = SearchFilter.format(filterExpr, filterArgs);
-        return search(name, strfilter, cons);
-    }
-
-    public NamingEnumeration search(String name,
-                                    String filter,
-                                    SearchControls cons)
-        throws NamingException {
-        return search(myParser.parse(name), filter, cons);
-    }
-
-    public NamingEnumeration search(String name,
-                                    String filterExpr,
-                                    Object[] filterArgs,
-                                    SearchControls cons)
-            throws NamingException {
-        return search(myParser.parse(name), filterExpr, filterArgs, cons);
-    }
-
-    // This function is called whenever a new object needs to be created.
-    // this is used so that if anyone subclasses us, they can override this
-    // and return object of their own kind.
-    protected HierMemDirCtx createNewCtx() throws NamingException {
-        return new HierMemDirCtx(myEnv, ignoreCase);
-    }
-
-    // If the supplied name is a composite name, return the name that
-    // is its first component.
-    protected Name canonizeName(Name name) throws NamingException {
-        Name canonicalName = name;
-
-        if(!(name instanceof HierarchicalName)) {
-            // If name is not of the correct type, make copy
-            canonicalName = new HierarchicalName();
-            int n = name.size();
-            for(int i = 0; i < n; i++) {
-                canonicalName.add(i, name.get(i));
-            }
-        }
-
-        return canonicalName;
-    }
-
-     protected Name getInternalName(Name name) throws NamingException {
-         return (name.getPrefix(name.size() - 1));
-     }
-
-     protected Name getLeafName(Name name) throws NamingException {
-         return (name.getSuffix(name.size() - 1));
-     }
-
-
-     public DirContext getSchema(String name) throws NamingException {
-        throw new OperationNotSupportedException();
-    }
-
-     public DirContext getSchema(Name name) throws NamingException {
-        throw new OperationNotSupportedException();
-    }
-
-     public DirContext getSchemaClassDefinition(String name)
-        throws NamingException {
-        throw new OperationNotSupportedException();
-    }
-
-    public DirContext getSchemaClassDefinition(Name name)
-            throws NamingException {
-        throw new OperationNotSupportedException();
-    }
-
-    // Set context in readonly mode; throw e when update operation attempted.
-    public void setReadOnly(NamingException e) {
-        readOnlyEx = e;
-    }
-
-    // Set context to support case-insensitive names
-    public void setIgnoreCase(boolean ignoreCase) {
-        this.ignoreCase = ignoreCase;
-    }
-
-    public void setNameParser(NameParser parser) {
-        myParser = parser;
-    }
-
-    // Class for enumerating name/class pairs
-    private class FlatNames implements NamingEnumeration {
-        Enumeration names;
-
-        FlatNames (Enumeration names) {
-            this.names = names;
-        }
-
-        public boolean hasMoreElements() {
-            try {
-                return hasMore();
-            } catch (NamingException e) {
-                return false;
-            }
-        }
-
-        public boolean hasMore() throws NamingException {
-            return names.hasMoreElements();
-        }
-
-        public Object nextElement() {
-            try {
-                return next();
-            } catch (NamingException e) {
-                throw new NoSuchElementException(e.toString());
-            }
-        }
-
-        public Object next() throws NamingException {
-            Name name = (Name)names.nextElement();
-            String className = bindings.get(name).getClass().getName();
-            return new NameClassPair(name.toString(), className);
-        }
-
-        public void close() {
-            names = null;
-        }
-    }
-
-   // Class for enumerating bindings
-    private final class FlatBindings extends FlatNames {
-        private Hashtable bds;
-        private Hashtable env;
-        private boolean useFactory;
-
-        FlatBindings(Hashtable bindings, Hashtable env, boolean useFactory) {
-            super(bindings.keys());
-            this.env = env;
-            this.bds = bindings;
-            this.useFactory = useFactory;
-        }
-
-        public Object next() throws NamingException {
-            Name name = (Name)names.nextElement();
-
-            HierMemDirCtx obj = (HierMemDirCtx)bds.get(name);
-
-            Object answer = obj;
-            if (useFactory) {
-                Attributes attrs = obj.getAttributes(""); // only method available
-                try {
-                    answer = DirectoryManager.getObjectInstance(obj,
-                        name, HierMemDirCtx.this, env, attrs);
-                } catch (NamingException e) {
-                    throw e;
-                } catch (Exception e) {
-                    NamingException e2 = new NamingException(
-                        "Problem calling getObjectInstance");
-                    e2.setRootCause(e);
-                    throw e2;
-                }
-            }
-
-            return new Binding(name.toString(), answer);
-        }
-    }
-
-    public class HierContextEnumerator extends ContextEnumerator {
-        public HierContextEnumerator(Context context, int scope)
-            throws NamingException {
-                super(context, scope);
-        }
-
-        protected HierContextEnumerator(Context context, int scope,
-            String contextName, boolean returnSelf) throws NamingException {
-            super(context, scope, contextName, returnSelf);
-        }
-
-        protected NamingEnumeration getImmediateChildren(Context ctx)
-            throws NamingException {
-                return ((HierMemDirCtx)ctx).doListBindings(false);
-        }
-
-        protected ContextEnumerator newEnumerator(Context ctx, int scope,
-            String contextName, boolean returnSelf) throws NamingException {
-                return new HierContextEnumerator(ctx, scope, contextName,
-                    returnSelf);
-        }
-    }
-}
-
-    // CompundNames's HashCode() method isn't good enough for many string.
-    // The only prupose of this subclass is to have a more discerning
-    // hash function. We'll make up for the performance hit by caching
-    // the hash value.
-
-final class HierarchicalName extends CompoundName {
-    private int hashValue = -1;
-
-    // Creates an empty name
-    HierarchicalName() {
-        super(new Enumeration() {
-            public boolean hasMoreElements() {return false;}
-            public Object nextElement() {throw new NoSuchElementException();}
-        },
-            HierarchicalNameParser.mySyntax);
-    }
-
-    HierarchicalName(Enumeration comps, Properties syntax) {
-        super(comps, syntax);
-    }
-
-    HierarchicalName(String n, Properties syntax) throws InvalidNameException {
-        super(n, syntax);
-    }
-
-    // just like String.hashCode, only it pays no attention to length
-    public int hashCode() {
-        if (hashValue == -1) {
-
-            String name = toString().toUpperCase();
-            int len = name.length();
-            int off = 0;
-            char val[] = new char[len];
-
-            name.getChars(0, len, val, 0);
-
-            for (int i = len; i > 0; i--) {
-                hashValue = (hashValue * 37) + val[off++];
-            }
-        }
-
-        return hashValue;
-    }
-
-    public Name getPrefix(int posn) {
-        Enumeration comps = super.getPrefix(posn).getAll();
-        return (new HierarchicalName(comps, mySyntax));
-    }
-
-    public Name getSuffix(int posn) {
-        Enumeration comps = super.getSuffix(posn).getAll();
-        return (new HierarchicalName(comps, mySyntax));
-    }
-
-    public Object clone() {
-        return (new HierarchicalName(getAll(), mySyntax));
-    }
-
-    private static final long serialVersionUID = -6717336834584573168L;
-}
-
-// This is the default name parser (used if setNameParser is not called)
-final class HierarchicalNameParser implements NameParser {
-    static final Properties mySyntax = new Properties();
-    static {
-        mySyntax.put("jndi.syntax.direction", "left_to_right");
-        mySyntax.put("jndi.syntax.separator", "/");
-        mySyntax.put("jndi.syntax.ignorecase", "true");
-        mySyntax.put("jndi.syntax.escape", "\\");
-        mySyntax.put("jndi.syntax.beginquote", "\"");
-        //mySyntax.put("jndi.syntax.separator.ava", "+");
-        //mySyntax.put("jndi.syntax.separator.typeval", "=");
-        mySyntax.put("jndi.syntax.trimblanks", "false");
-    };
-
-    public Name parse(String name) throws NamingException {
-        return new HierarchicalName(name, mySyntax);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/toolkit/dir/LazySearchEnumerationImpl.java b/ojluni/src/main/java/com/sun/jndi/toolkit/dir/LazySearchEnumerationImpl.java
deleted file mode 100755
index f4a41f8..0000000
--- a/ojluni/src/main/java/com/sun/jndi/toolkit/dir/LazySearchEnumerationImpl.java
+++ /dev/null
@@ -1,180 +0,0 @@
-/*
- * Copyright (c) 1999, 2000, 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.
- */
-
-/**
-  * Given an enumeration of candidates, check whether each
-  * item in enumeration satifies the given filter.
-  * Each item is a Binding and the following is used to get its
-  * attributes for used by the filter:
-  *
-  *   ((DirContext)item.getObject()).getAttributes("").
-  * If item.getObject() is not an DirContext, the item is skipped
-  *
-  * The items in the enumeration are obtained one at a time as
-  * items from the search enumeration are requested.
-  *
-  * @author Rosanna Lee
-  */
-
-package com.sun.jndi.toolkit.dir;
-
-import javax.naming.*;
-import javax.naming.directory.*;
-import javax.naming.spi.DirectoryManager;
-
-import java.util.NoSuchElementException;
-import java.util.Hashtable;
-
-final public class LazySearchEnumerationImpl implements NamingEnumeration {
-    private NamingEnumeration candidates;
-    private SearchResult nextMatch = null;
-    private SearchControls cons;
-    private AttrFilter filter;
-    private Context context;
-    private Hashtable env;
-    private boolean useFactory = true;
-
-    public LazySearchEnumerationImpl(NamingEnumeration candidates,
-        AttrFilter filter, SearchControls cons) throws NamingException {
-            this.candidates = candidates;
-            this.filter = filter;
-
-            if(cons == null) {
-                this.cons = new SearchControls();
-            } else {
-                this.cons = cons;
-            }
-    }
-
-    public LazySearchEnumerationImpl(NamingEnumeration candidates,
-        AttrFilter filter, SearchControls cons,
-        Context ctx, Hashtable env, boolean useFactory) throws NamingException {
-
-            this.candidates = candidates;
-            this.filter = filter;
-            this.env = env;
-            this.context = ctx;
-            this.useFactory = useFactory;
-
-            if(cons == null) {
-                this.cons = new SearchControls();
-            } else {
-                this.cons = cons;
-            }
-    }
-
-
-    public LazySearchEnumerationImpl(NamingEnumeration candidates,
-        AttrFilter filter, SearchControls cons,
-        Context ctx, Hashtable env) throws NamingException {
-            this(candidates, filter, cons, ctx, env, true);
-    }
-
-    public boolean hasMore() throws NamingException {
-        // find and do not remove from list
-        return findNextMatch(false) != null;
-    }
-
-    public boolean hasMoreElements() {
-        try {
-            return hasMore();
-        } catch (NamingException e) {
-            return false;
-        }
-    }
-
-    public Object nextElement() {
-        try {
-            return findNextMatch(true);
-        } catch (NamingException e) {
-            throw new NoSuchElementException(e.toString());
-        }
-    }
-
-    public Object next() throws NamingException {
-        // find and remove from list
-        return (findNextMatch(true));
-    }
-
-    public void close() throws NamingException {
-        if (candidates != null) {
-            candidates.close();
-        }
-    }
-
-    private SearchResult findNextMatch(boolean remove) throws NamingException {
-        SearchResult answer;
-        if (nextMatch != null) {
-            answer = nextMatch;
-            if (remove) {
-                nextMatch = null;
-            }
-            return answer;
-        } else {
-            // need to find next match
-            Binding next;
-            Object obj;
-            Attributes targetAttrs;
-            while (candidates.hasMore()) {
-                next = (Binding)candidates.next();
-                obj = next.getObject();
-                if (obj instanceof DirContext) {
-                    targetAttrs = ((DirContext)(obj)).getAttributes("");
-                    if (filter.check(targetAttrs)) {
-                        if (!cons.getReturningObjFlag()) {
-                            obj = null;
-                        } else if (useFactory) {
-                            try {
-                                // Give name only if context non-null,
-                                // otherewise, name will be interpreted relative
-                                // to initial context (not what we want)
-                                Name nm = (context != null ?
-                                    new CompositeName(next.getName()) : null);
-                                obj = DirectoryManager.getObjectInstance(obj,
-                                    nm, context, env, targetAttrs);
-                            } catch (NamingException e) {
-                                throw e;
-                            } catch (Exception e) {
-                                NamingException e2 = new NamingException(
-                                    "problem generating object using object factory");
-                                e2.setRootCause(e);
-                                throw e2;
-                            }
-                        }
-                        answer = new SearchResult(next.getName(),
-                            next.getClassName(), obj,
-                            SearchFilter.selectAttributes(targetAttrs,
-                                cons.getReturningAttributes()),
-                            true);
-                        if (!remove)
-                            nextMatch = answer;
-                        return answer;
-                    }
-                }
-            }
-            return null;
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/toolkit/dir/SearchFilter.java b/ojluni/src/main/java/com/sun/jndi/toolkit/dir/SearchFilter.java
deleted file mode 100755
index 5406d56..0000000
--- a/ojluni/src/main/java/com/sun/jndi/toolkit/dir/SearchFilter.java
+++ /dev/null
@@ -1,674 +0,0 @@
-/*
- * Copyright (c) 1999, 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.jndi.toolkit.dir;
-
-import javax.naming.*;
-import javax.naming.directory.*;
-import java.util.Enumeration;
-import java.util.StringTokenizer;
-import java.util.Vector;
-
-/**
-  * A class for parsing LDAP search filters (defined in RFC 1960, 2254)
-  *
-  * @author Jon Ruiz
-  * @author Rosanna Lee
-  */
-public class SearchFilter implements AttrFilter {
-
-    interface StringFilter extends AttrFilter {
-        public void parse() throws InvalidSearchFilterException;
-    }
-
-    // %%% "filter" and "pos" are not declared "private" due to bug 4064984.
-    String                      filter;
-    int                         pos;
-    private StringFilter        rootFilter;
-
-    protected static final boolean debug = false;
-
-    protected static final char         BEGIN_FILTER_TOKEN = '(';
-    protected static final char         END_FILTER_TOKEN = ')';
-    protected static final char         AND_TOKEN = '&';
-    protected static final char         OR_TOKEN = '|';
-    protected static final char         NOT_TOKEN = '!';
-    protected static final char         EQUAL_TOKEN = '=';
-    protected static final char         APPROX_TOKEN = '~';
-    protected static final char         LESS_TOKEN = '<';
-    protected static final char         GREATER_TOKEN = '>';
-    protected static final char         EXTEND_TOKEN = ':';
-    protected static final char         WILDCARD_TOKEN = '*';
-
-    public SearchFilter(String filter) throws InvalidSearchFilterException {
-        this.filter = filter;
-        pos = 0;
-        normalizeFilter();
-        rootFilter = this.createNextFilter();
-    }
-
-    // Returns true if targetAttrs passes the filter
-    public boolean check(Attributes targetAttrs) throws NamingException {
-        if (targetAttrs == null)
-            return false;
-
-        return rootFilter.check(targetAttrs);
-    }
-
-    /*
-     * Utility routines used by member classes
-     */
-
-    // does some pre-processing on the string to make it look exactly lik
-    // what the parser expects. This only needs to be called once.
-    protected void normalizeFilter() {
-        skipWhiteSpace(); // get rid of any leading whitespaces
-
-        // Sometimes, search filters don't have "(" and ")" - add them
-        if(getCurrentChar() != BEGIN_FILTER_TOKEN) {
-            filter = BEGIN_FILTER_TOKEN + filter + END_FILTER_TOKEN;
-        }
-        // this would be a good place to strip whitespace if desired
-
-        if(debug) {System.out.println("SearchFilter: normalized filter:" +
-                                      filter);}
-    }
-
-    private void skipWhiteSpace() {
-        while (Character.isWhitespace(getCurrentChar())) {
-            consumeChar();
-        }
-    }
-
-    protected StringFilter createNextFilter()
-        throws InvalidSearchFilterException {
-        StringFilter filter;
-
-        skipWhiteSpace();
-
-        try {
-            // make sure every filter starts with "("
-            if(getCurrentChar() != BEGIN_FILTER_TOKEN) {
-                throw new InvalidSearchFilterException("expected \"" +
-                                                       BEGIN_FILTER_TOKEN +
-                                                       "\" at position " +
-                                                       pos);
-            }
-
-            // skip past the "("
-            this.consumeChar();
-
-            skipWhiteSpace();
-
-            // use the next character to determine the type of filter
-            switch(getCurrentChar()) {
-            case AND_TOKEN:
-                if (debug) {System.out.println("SearchFilter: creating AND");}
-                filter = new CompoundFilter(true);
-                filter.parse();
-                break;
-            case OR_TOKEN:
-                if (debug) {System.out.println("SearchFilter: creating OR");}
-                filter = new CompoundFilter(false);
-                filter.parse();
-                break;
-            case NOT_TOKEN:
-                if (debug) {System.out.println("SearchFilter: creating OR");}
-                filter = new NotFilter();
-                filter.parse();
-                break;
-            default:
-                if (debug) {System.out.println("SearchFilter: creating SIMPLE");}
-                filter = new AtomicFilter();
-                filter.parse();
-                break;
-            }
-
-            skipWhiteSpace();
-
-            // make sure every filter ends with ")"
-            if(getCurrentChar() != END_FILTER_TOKEN) {
-                throw new InvalidSearchFilterException("expected \"" +
-                                                       END_FILTER_TOKEN +
-                                                       "\" at position " +
-                                                       pos);
-            }
-
-            // skip past the ")"
-            this.consumeChar();
-        } catch (InvalidSearchFilterException e) {
-            if (debug) {System.out.println("rethrowing e");}
-            throw e; // just rethrow these
-
-        // catch all - any uncaught exception while parsing will end up here
-        } catch  (Exception e) {
-            if(debug) {System.out.println(e.getMessage());e.printStackTrace();}
-            throw new InvalidSearchFilterException("Unable to parse " +
-                    "character " + pos + " in \""+
-                    this.filter + "\"");
-        }
-
-        return filter;
-    }
-
-    protected char getCurrentChar() {
-        return filter.charAt(pos);
-    }
-
-    protected char relCharAt(int i) {
-        return filter.charAt(pos + i);
-    }
-
-    protected void consumeChar() {
-        pos++;
-    }
-
-    protected void consumeChars(int i) {
-        pos += i;
-    }
-
-    protected int relIndexOf(int ch) {
-        return filter.indexOf(ch, pos) - pos;
-    }
-
-    protected String relSubstring(int beginIndex, int endIndex){
-        if(debug){System.out.println("relSubString: " + beginIndex +
-                                     " " + endIndex);}
-        return filter.substring(beginIndex+pos, endIndex+pos);
-    }
-
-
-   /**
-     * A class for dealing with compound filters ("and" & "or" filters).
-     */
-    final class CompoundFilter implements StringFilter {
-        private Vector  subFilters;
-        private boolean polarity;
-
-        CompoundFilter(boolean polarity) {
-            subFilters = new Vector();
-            this.polarity = polarity;
-        }
-
-        public void parse() throws InvalidSearchFilterException {
-            SearchFilter.this.consumeChar(); // consume the "&"
-            while(SearchFilter.this.getCurrentChar() != END_FILTER_TOKEN) {
-                if (debug) {System.out.println("CompoundFilter: adding");}
-                StringFilter filter = SearchFilter.this.createNextFilter();
-                subFilters.addElement(filter);
-                skipWhiteSpace();
-            }
-        }
-
-        public boolean check(Attributes targetAttrs) throws NamingException {
-            for(int i = 0; i<subFilters.size(); i++) {
-                StringFilter filter = (StringFilter)subFilters.elementAt(i);
-                if(filter.check(targetAttrs) != this.polarity) {
-                    return !polarity;
-                }
-            }
-            return polarity;
-        }
-    } /* CompoundFilter */
-
-   /**
-     * A class for dealing with NOT filters
-     */
-    final class NotFilter implements StringFilter {
-        private StringFilter    filter;
-
-        public void parse() throws InvalidSearchFilterException {
-            SearchFilter.this.consumeChar(); // consume the "!"
-            filter = SearchFilter.this.createNextFilter();
-        }
-
-        public boolean check(Attributes targetAttrs) throws NamingException {
-            return !filter.check(targetAttrs);
-        }
-    } /* notFilter */
-
-    // note: declared here since member classes can't have static variables
-    static final int EQUAL_MATCH = 1;
-    static final int APPROX_MATCH = 2;
-    static final int GREATER_MATCH = 3;
-    static final int LESS_MATCH = 4;
-
-    /**
-     * A class for dealing wtih atomic filters
-     */
-    final class AtomicFilter implements StringFilter {
-        private String attrID;
-        private String value;
-        private int    matchType;
-
-        public void parse() throws InvalidSearchFilterException {
-
-            skipWhiteSpace();
-
-            try {
-                // find the end
-                int endPos = SearchFilter.this.relIndexOf(END_FILTER_TOKEN);
-
-                //determine the match type
-                int i = SearchFilter.this.relIndexOf(EQUAL_TOKEN);
-                if(debug) {System.out.println("AtomicFilter: = at " + i);}
-                int qualifier = SearchFilter.this.relCharAt(i-1);
-                switch(qualifier) {
-                case APPROX_TOKEN:
-                    if (debug) {System.out.println("Atomic: APPROX found");}
-                    matchType = APPROX_MATCH;
-                    attrID = SearchFilter.this.relSubstring(0, i-1);
-                    value = SearchFilter.this.relSubstring(i+1, endPos);
-                    break;
-
-                case GREATER_TOKEN:
-                    if (debug) {System.out.println("Atomic: GREATER found");}
-                    matchType = GREATER_MATCH;
-                    attrID = SearchFilter.this.relSubstring(0, i-1);
-                    value = SearchFilter.this.relSubstring(i+1, endPos);
-                    break;
-
-                case LESS_TOKEN:
-                    if (debug) {System.out.println("Atomic: LESS found");}
-                    matchType = LESS_MATCH;
-                    attrID = SearchFilter.this.relSubstring(0, i-1);
-                    value = SearchFilter.this.relSubstring(i+1, endPos);
-                    break;
-
-                case EXTEND_TOKEN:
-                    if(debug) {System.out.println("Atomic: EXTEND found");}
-                    throw new OperationNotSupportedException("Extensible match not supported");
-
-                default:
-                    if (debug) {System.out.println("Atomic: EQUAL found");}
-                    matchType = EQUAL_MATCH;
-                    attrID = SearchFilter.this.relSubstring(0,i);
-                    value = SearchFilter.this.relSubstring(i+1, endPos);
-                    break;
-                }
-
-                attrID = attrID.trim();
-                value = value.trim();
-
-                //update our position
-                SearchFilter.this.consumeChars(endPos);
-
-            } catch (Exception e) {
-                if (debug) {System.out.println(e.getMessage());
-                            e.printStackTrace();}
-                InvalidSearchFilterException sfe =
-                    new InvalidSearchFilterException("Unable to parse " +
-                    "character " + SearchFilter.this.pos + " in \""+
-                    SearchFilter.this.filter + "\"");
-                sfe.setRootCause(e);
-                throw(sfe);
-            }
-
-            if(debug) {System.out.println("AtomicFilter: " + attrID + "=" +
-                                          value);}
-        }
-
-        public boolean check(Attributes targetAttrs) {
-            Enumeration candidates;
-
-            try {
-                Attribute attr = targetAttrs.get(attrID);
-                if(attr == null) {
-                    return false;
-                }
-                candidates = attr.getAll();
-            } catch (NamingException ne) {
-                if (debug) {System.out.println("AtomicFilter: should never " +
-                                               "here");}
-                return false;
-            }
-
-            while(candidates.hasMoreElements()) {
-                String val = candidates.nextElement().toString();
-                if (debug) {System.out.println("Atomic: comparing: " + val);}
-                switch(matchType) {
-                case APPROX_MATCH:
-                case EQUAL_MATCH:
-                    if(substringMatch(this.value, val)) {
-                    if (debug) {System.out.println("Atomic: EQUAL match");}
-                        return true;
-                    }
-                    break;
-                case GREATER_MATCH:
-                    if (debug) {System.out.println("Atomic: GREATER match");}
-                    if(val.compareTo(this.value) >= 0) {
-                        return true;
-                    }
-                    break;
-                case LESS_MATCH:
-                    if (debug) {System.out.println("Atomic: LESS match");}
-                    if(val.compareTo(this.value) <= 0) {
-                        return true;
-                    }
-                    break;
-                default:
-                    if (debug) {System.out.println("AtomicFilter: unkown " +
-                                                   "matchType");}
-                }
-            }
-            return false;
-        }
-
-        // used for substring comparisons (where proto has "*" wildcards
-        private boolean substringMatch(String proto, String value) {
-            // simple case 1: "*" means attribute presence is being tested
-            if(proto.equals(new Character(WILDCARD_TOKEN).toString())) {
-                if(debug) {System.out.println("simple presence assertion");}
-                return true;
-            }
-
-            // simple case 2: if there are no wildcards, call String.equals()
-            if(proto.indexOf(WILDCARD_TOKEN) == -1) {
-                return proto.equalsIgnoreCase(value);
-            }
-
-            if(debug) {System.out.println("doing substring comparison");}
-            // do the work: make sure all the substrings are present
-            int currentPos = 0;
-            StringTokenizer subStrs = new StringTokenizer(proto, "*", false);
-
-            // do we need to begin with the first token?
-            if(proto.charAt(0) != WILDCARD_TOKEN &&
-               !value.toString().toLowerCase().startsWith(
-                      subStrs.nextToken().toLowerCase())) {
-                if(debug) {System.out.println("faild initial test");}
-                return false;
-            }
-
-
-            while(subStrs.hasMoreTokens()) {
-                String currentStr = subStrs.nextToken();
-                if (debug) {System.out.println("looking for \"" +
-                                               currentStr +"\"");}
-                currentPos = value.toLowerCase().indexOf(
-                       currentStr.toLowerCase(), currentPos);
-                if(currentPos == -1) {
-                    return false;
-                }
-                currentPos += currentStr.length();
-            }
-
-            // do we need to end with the last token?
-            if(proto.charAt(proto.length() - 1) != WILDCARD_TOKEN &&
-               currentPos != value.length() ) {
-                if(debug) {System.out.println("faild final test");}
-                return false;
-            }
-
-            return true;
-        }
-
-    } /* AtomicFilter */
-
-    // ----- static methods for producing string filters given attribute set
-    // ----- or object array
-
-
-    /**
-      * Creates an LDAP filter as a conjuction of the attributes supplied.
-      */
-    public static String format(Attributes attrs) throws NamingException {
-        if (attrs == null || attrs.size() == 0) {
-            return "objectClass=*";
-        }
-
-        String answer;
-        answer = "(& ";
-        Attribute attr;
-        for (NamingEnumeration e = attrs.getAll(); e.hasMore(); ) {
-            attr = (Attribute)e.next();
-            if (attr.size() == 0 || (attr.size() == 1 && attr.get() == null)) {
-                // only checking presence of attribute
-                answer += "(" + attr.getID() + "=" + "*)";
-            } else {
-                for (NamingEnumeration ve = attr.getAll();
-                     ve.hasMore();
-                        ) {
-                    String val = getEncodedStringRep(ve.next());
-                    if (val != null) {
-                        answer += "(" + attr.getID() + "=" + val + ")";
-                    }
-                }
-            }
-        }
-
-        answer += ")";
-        //System.out.println("filter: " + answer);
-        return answer;
-    }
-
-    // Writes the hex representation of a byte to a StringBuffer.
-    private static void hexDigit(StringBuffer buf, byte x) {
-        char c;
-
-        c = (char) ((x >> 4) & 0xf);
-        if (c > 9)
-            c = (char) ((c-10) + 'A');
-        else
-            c = (char)(c + '0');
-
-        buf.append(c);
-        c = (char) (x & 0xf);
-        if (c > 9)
-            c = (char)((c-10) + 'A');
-        else
-            c = (char)(c + '0');
-        buf.append(c);
-    }
-
-
-    /**
-      * Returns the string representation of an object (such as an attr value).
-      * If obj is a byte array, encode each item as \xx, where xx is hex encoding
-      * of the byte value.
-      * Else, if obj is not a String, use its string representation (toString()).
-      * Special characters in obj (or its string representation) are then
-      * encoded appropriately according to RFC 2254.
-      *         *       \2a
-      *         (       \28
-      *         )       \29
-      *         \       \5c
-      *         NUL     \00
-      */
-    private static String getEncodedStringRep(Object obj) throws NamingException {
-        String str;
-        if (obj == null)
-            return null;
-
-        if (obj instanceof byte[]) {
-            // binary data must be encoded as \hh where hh is a hex char
-            byte[] bytes = (byte[])obj;
-            StringBuffer b1 = new StringBuffer(bytes.length*3);
-            for (int i = 0; i < bytes.length; i++) {
-                b1.append('\\');
-                hexDigit(b1, bytes[i]);
-            }
-            return b1.toString();
-        }
-        if (!(obj instanceof String)) {
-            str = obj.toString();
-        } else {
-            str = (String)obj;
-        }
-        int len = str.length();
-        StringBuffer buf = new StringBuffer(len);
-        char ch;
-        for (int i = 0; i < len; i++) {
-            switch (ch=str.charAt(i)) {
-            case '*':
-                buf.append("\\2a");
-                break;
-            case '(':
-                buf.append("\\28");
-                break;
-            case ')':
-                buf.append("\\29");
-                break;
-            case '\\':
-                buf.append("\\5c");
-                break;
-            case 0:
-                buf.append("\\00");
-                break;
-            default:
-                buf.append(ch);
-            }
-        }
-        return buf.toString();
-    }
-
-
-    /**
-      * Finds the first occurrence of <tt>ch</tt> in <tt>val</tt> starting
-      * from position <tt>start</tt>. It doesn't count if <tt>ch</tt>
-      * has been escaped by a backslash (\)
-      */
-    public static int findUnescaped(char ch, String val, int start) {
-        int len = val.length();
-
-        while (start < len) {
-            int where = val.indexOf(ch, start);
-            // if at start of string, or not there at all, or if not escaped
-            if (where == start || where == -1 || val.charAt(where-1) != '\\')
-                return where;
-
-            // start search after escaped star
-            start = where + 1;
-        }
-        return -1;
-    }
-
-    /**
-     * Formats the expression <tt>expr</tt> using arguments from the array
-     * <tt>args</tt>.
-     *
-     * <code>{i}</code> specifies the <code>i</code>'th element from
-     * the array <code>args</code> is to be substituted for the
-     * string "<code>{i}</code>".
-     *
-     * To escape '{' or '}' (or any other character), use '\'.
-     *
-     * Uses getEncodedStringRep() to do encoding.
-     */
-
-    public static String format(String expr, Object[] args)
-        throws NamingException {
-
-         int param;
-         int where = 0, start = 0;
-         StringBuffer answer = new StringBuffer(expr.length());
-
-         while ((where = findUnescaped('{', expr, start)) >= 0) {
-             int pstart = where + 1; // skip '{'
-             int pend = expr.indexOf('}', pstart);
-
-             if (pend < 0) {
-                 throw new InvalidSearchFilterException("unbalanced {: " + expr);
-             }
-
-             // at this point, pend should be pointing at '}'
-             try {
-                 param = Integer.parseInt(expr.substring(pstart, pend));
-             } catch (NumberFormatException e) {
-                 throw new InvalidSearchFilterException(
-                     "integer expected inside {}: " + expr);
-             }
-
-             if (param >= args.length) {
-                 throw new InvalidSearchFilterException(
-                     "number exceeds argument list: " + param);
-             }
-
-             answer.append(expr.substring(start, where)).append(getEncodedStringRep(args[param]));
-             start = pend + 1; // skip '}'
-         }
-
-         if (start < expr.length())
-             answer.append(expr.substring(start));
-
-        return answer.toString();
-    }
-
-    /*
-     * returns an Attributes instance containing only attributeIDs given in
-     * "attributeIDs" whose values come from the given DSContext.
-     */
-    public static Attributes selectAttributes(Attributes originals,
-        String[] attrIDs) throws NamingException {
-
-        if (attrIDs == null)
-            return originals;
-
-        Attributes result = new BasicAttributes();
-
-        for(int i=0; i<attrIDs.length; i++) {
-            Attribute attr = originals.get(attrIDs[i]);
-            if(attr != null) {
-                result.put(attr);
-            }
-        }
-
-        return result;
-    }
-
-/*  For testing filter
-    public static void main(String[] args) {
-
-        Attributes attrs = new BasicAttributes(LdapClient.caseIgnore);
-        attrs.put("cn", "Rosanna Lee");
-        attrs.put("sn", "Lee");
-        attrs.put("fn", "Rosanna");
-        attrs.put("id", "10414");
-        attrs.put("machine", "jurassic");
-
-
-        try {
-            System.out.println(format(attrs));
-
-            String  expr = "(&(Age = {0})(Account Balance <= {1}))";
-            Object[] fargs = new Object[2];
-            // fill in the parameters
-            fargs[0] = new Integer(65);
-            fargs[1] = new Float(5000);
-
-            System.out.println(format(expr, fargs));
-
-
-            System.out.println(format("bin={0}",
-                new Object[] {new byte[] {0, 1, 2, 3, 4, 5}}));
-
-            System.out.println(format("bin=\\{anything}", null));
-
-        } catch (NamingException e) {
-            e.printStackTrace();
-        }
-    }
-*/
-
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/toolkit/url/GenericURLContext.java b/ojluni/src/main/java/com/sun/jndi/toolkit/url/GenericURLContext.java
deleted file mode 100755
index c6453f4..0000000
--- a/ojluni/src/main/java/com/sun/jndi/toolkit/url/GenericURLContext.java
+++ /dev/null
@@ -1,530 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-package com.sun.jndi.toolkit.url;
-
-import javax.naming.*;
-import javax.naming.spi.ResolveResult;
-import javax.naming.spi.NamingManager;
-
-import java.util.Hashtable;
-import java.net.MalformedURLException;
-
-/**
- * This abstract class is a generic URL context that accepts as the
- * name argument either a string URL or a Name whose first component
- * is a URL. It resolves the URL to a target context and then continues
- * the operation using the remaining name in the target context as if
- * the first component names a junction.
- *
- * A subclass must define getRootURLContext()
- * to process the URL into head/tail pieces. If it wants to control how
- * URL strings are parsed and compared for the rename() operation, then
- * it should override getNonRootURLSuffixes() and urlEquals().
- *
- * @author Scott Seligman
- * @author Rosanna Lee
- */
-abstract public class GenericURLContext implements Context {
-    protected Hashtable myEnv = null;
-
-    public GenericURLContext(Hashtable env) {
-        // context that is not tied to any specific URL
-        myEnv = env;  // copied on write
-    }
-
-    public void close() throws NamingException {
-        myEnv = null;
-    }
-
-    public String getNameInNamespace() throws NamingException {
-        return ""; // %%% check this out: A URL context's name is ""
-    }
-
-    /**
-      * Resolves 'name' into a target context with remaining name.
-      * For example, with a JNDI URL "jndi://dnsname/rest_name",
-      * this method resolves "jndi://dnsname/" to a target context,
-      * and returns the target context with "rest_name".
-      * The definition of "root URL" and how much of the URL to
-      * consume is implementation specific.
-      * If rename() is supported for a particular URL scheme,
-      * getRootURLContext(), getURLPrefix(), and getURLSuffix()
-      * must be in sync wrt how URLs are parsed and returned.
-      */
-    abstract protected ResolveResult getRootURLContext(String url,
-        Hashtable env) throws NamingException;
-
-    /**
-      * Returns the suffix of the url. The result should be identical to
-      * that of calling getRootURLContext().getRemainingName(), but
-      * without the overhead of doing anything with the prefix like
-      * creating a context.
-      *<p>
-      * This method returns a Name instead of a String because to give
-      * the provider an opportunity to return a Name (for example,
-      * for weakly separated naming systems like COS naming).
-      *<p>
-      * The default implementation uses skips 'prefix', calls
-      * UrlUtil.decode() on it, and returns the result as a single component
-      * CompositeName.
-      * Subclass should override if this is not appropriate.
-      * This method is used only by rename().
-      * If rename() is supported for a particular URL scheme,
-      * getRootURLContext(), getURLPrefix(), and getURLSuffix()
-      * must be in sync wrt how URLs are parsed and returned.
-      *<p>
-      * For many URL schemes, this method is very similar to URL.getFile(),
-      * except getFile() will return a leading slash in the
-      * 2nd, 3rd, and 4th cases. For schemes like "ldap" and "iiop",
-      * the leading slash must be skipped before the name is an acceptable
-      * format for operation by the Context methods. For schemes that treat the
-      * leading slash as significant (such as "file"),
-      * the subclass must override getURLSuffix() to get the correct behavior.
-      * Remember, the behavior must match getRootURLContext().
-      *
-      * URL                                     Suffix
-      * foo://host:port                         <empty string>
-      * foo://host:port/rest/of/name            rest/of/name
-      * foo:///rest/of/name                     rest/of/name
-      * foo:/rest/of/name                       rest/of/name
-      * foo:rest/of/name                        rest/of/name
-      */
-    protected Name getURLSuffix(String prefix, String url) throws NamingException {
-        String suffix = url.substring(prefix.length());
-        if (suffix.length() == 0) {
-            return new CompositeName();
-        }
-
-        if (suffix.charAt(0) == '/') {
-            suffix = suffix.substring(1); // skip leading slash
-        }
-
-        try {
-            return new CompositeName().add(UrlUtil.decode(suffix));
-        } catch (MalformedURLException e) {
-            throw new InvalidNameException(e.getMessage());
-        }
-    }
-
-    /**
-      * Finds the prefix of a URL.
-      * Default implementation looks for slashes and then extracts
-      * prefixes using String.substring().
-      * Subclass should override if this is not appropriate.
-      * This method is used only by rename().
-      * If rename() is supported for a particular URL scheme,
-      * getRootURLContext(), getURLPrefix(), and getURLSuffix()
-      * must be in sync wrt how URLs are parsed and returned.
-      *<p>
-      * URL                                     Prefix
-      * foo://host:port                         foo://host:port
-      * foo://host:port/rest/of/name            foo://host:port
-      * foo:///rest/of/name                     foo://
-      * foo:/rest/of/name                       foo:
-      * foo:rest/of/name                        foo:
-      */
-    protected String getURLPrefix(String url) throws NamingException {
-        int start = url.indexOf(":");
-
-        if (start < 0) {
-            throw new OperationNotSupportedException("Invalid URL: " + url);
-        }
-        ++start; // skip ':'
-
-        if (url.startsWith("//", start)) {
-            start += 2;  // skip double slash
-
-            // find last slash
-            int posn = url.indexOf("/", start);
-            if (posn >= 0) {
-                start = posn;
-            } else {
-                start = url.length();  // rest of URL
-            }
-        }
-
-        // else 0 or 1 iniitial slashes; start is unchanged
-        return url.substring(0, start);
-    }
-
-    /**
-     * Determines whether two URLs are the same.
-     * Default implementation uses String.equals().
-     * Subclass should override if this is not appropriate.
-     * This method is used by rename().
-     */
-    protected boolean urlEquals(String url1, String url2) {
-        return url1.equals(url2);
-    }
-
-    /**
-     * Gets the context in which to continue the operation. This method
-     * is called when this context is asked to process a multicomponent
-     * Name in which the first component is a URL.
-     * Treat the first component like a junction: resolve it and then use
-     * NamingManager.getContinuationContext() to get the target context in
-     * which to operate on the remainder of the name (n.getSuffix(1)).
-     */
-    protected Context getContinuationContext(Name n) throws NamingException {
-        Object obj = lookup(n.get(0));
-        CannotProceedException cpe = new CannotProceedException();
-        cpe.setResolvedObj(obj);
-        cpe.setEnvironment(myEnv);
-        return NamingManager.getContinuationContext(cpe);
-    }
-
-    public Object lookup(String name) throws NamingException {
-        ResolveResult res = getRootURLContext(name, myEnv);
-        Context ctx = (Context)res.getResolvedObj();
-        try {
-            return ctx.lookup(res.getRemainingName());
-        } finally {
-            ctx.close();
-        }
-    }
-
-    public Object lookup(Name name) throws NamingException {
-        if (name.size() == 1) {
-            return lookup(name.get(0));
-        } else {
-            Context ctx = getContinuationContext(name);
-            try {
-                return ctx.lookup(name.getSuffix(1));
-            } finally {
-                ctx.close();
-            }
-        }
-    }
-
-    public void bind(String name, Object obj) throws NamingException {
-        ResolveResult res = getRootURLContext(name, myEnv);
-        Context ctx = (Context)res.getResolvedObj();
-        try {
-            ctx.bind(res.getRemainingName(), obj);
-        } finally {
-            ctx.close();
-        }
-    }
-
-    public void bind(Name name, Object obj) throws NamingException {
-        if (name.size() == 1) {
-            bind(name.get(0), obj);
-        } else {
-            Context ctx = getContinuationContext(name);
-            try {
-                ctx.bind(name.getSuffix(1), obj);
-            } finally {
-                ctx.close();
-            }
-        }
-    }
-
-    public void rebind(String name, Object obj) throws NamingException {
-        ResolveResult res = getRootURLContext(name, myEnv);
-        Context ctx = (Context)res.getResolvedObj();
-        try {
-            ctx.rebind(res.getRemainingName(), obj);
-        } finally {
-            ctx.close();
-        }
-    }
-
-    public void rebind(Name name, Object obj) throws NamingException {
-        if (name.size() == 1) {
-            rebind(name.get(0), obj);
-        } else {
-            Context ctx = getContinuationContext(name);
-            try {
-                ctx.rebind(name.getSuffix(1), obj);
-            } finally {
-                ctx.close();
-            }
-        }
-    }
-
-    public void unbind(String name) throws NamingException {
-        ResolveResult res = getRootURLContext(name, myEnv);
-        Context ctx = (Context)res.getResolvedObj();
-        try {
-            ctx.unbind(res.getRemainingName());
-        } finally {
-            ctx.close();
-        }
-    }
-
-    public void unbind(Name name) throws NamingException {
-        if (name.size() == 1) {
-            unbind(name.get(0));
-        } else {
-            Context ctx = getContinuationContext(name);
-            try {
-                ctx.unbind(name.getSuffix(1));
-            } finally {
-                ctx.close();
-            }
-        }
-    }
-
-    public void rename(String oldName, String newName) throws NamingException {
-        String oldPrefix = getURLPrefix(oldName);
-        String newPrefix = getURLPrefix(newName);
-        if (!urlEquals(oldPrefix, newPrefix)) {
-            throw new OperationNotSupportedException(
-                "Renaming using different URL prefixes not supported : " +
-                oldName + " " + newName);
-        }
-
-        ResolveResult res = getRootURLContext(oldName, myEnv);
-        Context ctx = (Context)res.getResolvedObj();
-        try {
-            ctx.rename(res.getRemainingName(), getURLSuffix(newPrefix, newName));
-        } finally {
-            ctx.close();
-        }
-    }
-
-    public void rename(Name name, Name newName) throws NamingException {
-        if (name.size() == 1) {
-            if (newName.size() != 1) {
-                throw new OperationNotSupportedException(
-            "Renaming to a Name with more components not supported: " + newName);
-            }
-            rename(name.get(0), newName.get(0));
-        } else {
-            // > 1 component with 1st one being URL
-            // URLs must be identical; cannot deal with diff URLs
-            if (!urlEquals(name.get(0), newName.get(0))) {
-                throw new OperationNotSupportedException(
-                    "Renaming using different URLs as first components not supported: " +
-                    name + " " + newName);
-            }
-
-            Context ctx = getContinuationContext(name);
-            try {
-                ctx.rename(name.getSuffix(1), newName.getSuffix(1));
-            } finally {
-                ctx.close();
-            }
-        }
-    }
-
-    public NamingEnumeration<NameClassPair> list(String name)   throws NamingException {
-        ResolveResult res = getRootURLContext(name, myEnv);
-        Context ctx = (Context)res.getResolvedObj();
-        try {
-            return ctx.list(res.getRemainingName());
-        } finally {
-            ctx.close();
-        }
-    }
-
-    public NamingEnumeration<NameClassPair> list(Name name) throws NamingException {
-        if (name.size() == 1) {
-            return list(name.get(0));
-        } else {
-            Context ctx = getContinuationContext(name);
-            try {
-                return ctx.list(name.getSuffix(1));
-            } finally {
-                ctx.close();
-            }
-        }
-    }
-
-    public NamingEnumeration<Binding> listBindings(String name)
-        throws NamingException {
-        ResolveResult res = getRootURLContext(name, myEnv);
-        Context ctx = (Context)res.getResolvedObj();
-        try {
-            return ctx.listBindings(res.getRemainingName());
-        } finally {
-            ctx.close();
-        }
-    }
-
-    public NamingEnumeration<Binding> listBindings(Name name) throws NamingException {
-        if (name.size() == 1) {
-            return listBindings(name.get(0));
-        } else {
-            Context ctx = getContinuationContext(name);
-            try {
-                return ctx.listBindings(name.getSuffix(1));
-            } finally {
-                ctx.close();
-            }
-        }
-    }
-
-    public void destroySubcontext(String name) throws NamingException {
-        ResolveResult res = getRootURLContext(name, myEnv);
-        Context ctx = (Context)res.getResolvedObj();
-        try {
-            ctx.destroySubcontext(res.getRemainingName());
-        } finally {
-            ctx.close();
-        }
-    }
-
-    public void destroySubcontext(Name name) throws NamingException {
-        if (name.size() == 1) {
-            destroySubcontext(name.get(0));
-        } else {
-            Context ctx = getContinuationContext(name);
-            try {
-                ctx.destroySubcontext(name.getSuffix(1));
-            } finally {
-                ctx.close();
-            }
-        }
-    }
-
-    public Context createSubcontext(String name) throws NamingException {
-        ResolveResult res = getRootURLContext(name, myEnv);
-        Context ctx = (Context)res.getResolvedObj();
-        try {
-            return ctx.createSubcontext(res.getRemainingName());
-        } finally {
-            ctx.close();
-        }
-    }
-
-    public Context createSubcontext(Name name) throws NamingException {
-        if (name.size() == 1) {
-            return createSubcontext(name.get(0));
-        } else {
-            Context ctx = getContinuationContext(name);
-            try {
-                return ctx.createSubcontext(name.getSuffix(1));
-            } finally {
-                ctx.close();
-            }
-        }
-    }
-
-    public Object lookupLink(String name) throws NamingException {
-        ResolveResult res = getRootURLContext(name, myEnv);
-        Context ctx = (Context)res.getResolvedObj();
-        try {
-            return ctx.lookupLink(res.getRemainingName());
-        } finally {
-            ctx.close();
-        }
-    }
-
-    public Object lookupLink(Name name) throws NamingException {
-        if (name.size() == 1) {
-            return lookupLink(name.get(0));
-        } else {
-            Context ctx = getContinuationContext(name);
-            try {
-                return ctx.lookupLink(name.getSuffix(1));
-            } finally {
-                ctx.close();
-            }
-        }
-    }
-
-    public NameParser getNameParser(String name) throws NamingException {
-        ResolveResult res = getRootURLContext(name, myEnv);
-        Context ctx = (Context)res.getResolvedObj();
-        try {
-            return ctx.getNameParser(res.getRemainingName());
-        } finally {
-            ctx.close();
-        }
-    }
-
-    public NameParser getNameParser(Name name) throws NamingException {
-        if (name.size() == 1) {
-            return getNameParser(name.get(0));
-        } else {
-            Context ctx = getContinuationContext(name);
-            try {
-                return ctx.getNameParser(name.getSuffix(1));
-            } finally {
-                ctx.close();
-            }
-        }
-    }
-
-    public String composeName(String name, String prefix)
-        throws NamingException {
-            if (prefix.equals("")) {
-                return name;
-            } else if (name.equals("")) {
-                return prefix;
-            } else {
-                return (prefix + "/" + name);
-            }
-    }
-
-    public Name composeName(Name name, Name prefix) throws NamingException {
-        Name result = (Name)prefix.clone();
-        result.addAll(name);
-        return result;
-    }
-
-    public Object removeFromEnvironment(String propName)
-        throws NamingException {
-            if (myEnv == null) {
-                return null;
-            }
-            myEnv = (Hashtable)myEnv.clone();
-            return myEnv.remove(propName);
-    }
-
-    public Object addToEnvironment(String propName, Object propVal)
-        throws NamingException {
-            myEnv = (myEnv == null) ?
-                new Hashtable(11, 0.75f) : (Hashtable)myEnv.clone();
-            return myEnv.put(propName, propVal);
-    }
-
-    public Hashtable getEnvironment() throws NamingException {
-        if (myEnv == null) {
-            return new Hashtable(5, 0.75f);
-        } else {
-            return (Hashtable)myEnv.clone();
-        }
-    }
-
-/*
-// To test, declare getURLPrefix and getURLSuffix static.
-
-    public static void main(String[] args) throws Exception {
-        String[] tests = {"file://host:port",
-                          "file:///rest/of/name",
-                          "file://host:port/rest/of/name",
-                          "file:/rest/of/name",
-                          "file:rest/of/name"};
-        for (int i = 0; i < tests.length; i++) {
-            String pre = getURLPrefix(tests[i]);
-            System.out.println(pre);
-            System.out.println(getURLSuffix(pre, tests[i]));
-        }
-    }
-*/
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/toolkit/url/GenericURLDirContext.java b/ojluni/src/main/java/com/sun/jndi/toolkit/url/GenericURLDirContext.java
deleted file mode 100755
index c9da3fd..0000000
--- a/ojluni/src/main/java/com/sun/jndi/toolkit/url/GenericURLDirContext.java
+++ /dev/null
@@ -1,411 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-package com.sun.jndi.toolkit.url;
-
-import javax.naming.*;
-import javax.naming.directory.*;
-import javax.naming.spi.ResolveResult;
-import javax.naming.spi.DirectoryManager;
-
-import java.util.Hashtable;
-
-/**
- * This abstract class is a generic URL DirContext that accepts as the
- * name argument either a string URL or a Name whose first component
- * is a URL. It resolves the URL to a target context and then continues
- * the operation using the remaining name in the target context as if
- * the first component names a junction.
- *
- * A subclass must define getRootURLContext()
- * to process the URL into head/tail pieces. If it wants to control how
- * URL strings are parsed and compared for the rename() operation, then
- * it should override getNonRootURLSuffixes() and urlEquals().
- *
- * @author Scott Seligman
- * @author Rosanna Lee
- */
-
-abstract public class GenericURLDirContext extends GenericURLContext
-implements DirContext {
-
-    protected GenericURLDirContext(Hashtable env) {
-        super(env);
-    }
-
-    /**
-     * Gets the context in which to continue the operation. This method
-     * is called when this context is asked to process a multicomponent
-     * Name in which the first component is a URL.
-     * Treat the first component like a junction: resolve it and then use
-     * DirectoryManager.getContinuationDirContext() to get the target context in
-     * which to operate on the remainder of the name (n.getSuffix(1)).
-     * Do this in case intermediate contexts are not DirContext.
-     */
-    protected DirContext getContinuationDirContext(Name n) throws NamingException {
-        Object obj = lookup(n.get(0));
-        CannotProceedException cpe = new CannotProceedException();
-        cpe.setResolvedObj(obj);
-        cpe.setEnvironment(myEnv);
-        return DirectoryManager.getContinuationDirContext(cpe);
-    }
-
-
-    public Attributes getAttributes(String name) throws NamingException {
-        ResolveResult res = getRootURLContext(name, myEnv);
-        DirContext ctx = (DirContext)res.getResolvedObj();
-        try {
-            return ctx.getAttributes(res.getRemainingName());
-        } finally {
-            ctx.close();
-        }
-    }
-
-    public Attributes getAttributes(Name name) throws NamingException  {
-        if (name.size() == 1) {
-            return getAttributes(name.get(0));
-        } else {
-            DirContext ctx = getContinuationDirContext(name);
-            try {
-                return ctx.getAttributes(name.getSuffix(1));
-            } finally {
-                ctx.close();
-            }
-        }
-    }
-
-    public Attributes getAttributes(String name, String[] attrIds)
-        throws NamingException {
-            ResolveResult res = getRootURLContext(name, myEnv);
-            DirContext ctx = (DirContext)res.getResolvedObj();
-            try {
-                return ctx.getAttributes(res.getRemainingName(), attrIds);
-            } finally {
-                ctx.close();
-            }
-    }
-
-    public Attributes getAttributes(Name name, String[] attrIds)
-        throws NamingException {
-            if (name.size() == 1) {
-                return getAttributes(name.get(0), attrIds);
-            } else {
-                DirContext ctx = getContinuationDirContext(name);
-                try {
-                    return ctx.getAttributes(name.getSuffix(1), attrIds);
-                } finally {
-                    ctx.close();
-                }
-            }
-    }
-
-    public void modifyAttributes(String name, int mod_op, Attributes attrs)
-        throws NamingException {
-            ResolveResult res = getRootURLContext(name, myEnv);
-            DirContext ctx = (DirContext)res.getResolvedObj();
-            try {
-                ctx.modifyAttributes(res.getRemainingName(), mod_op, attrs);
-            } finally {
-                ctx.close();
-            }
-    }
-
-    public void modifyAttributes(Name name, int mod_op, Attributes attrs)
-        throws NamingException {
-            if (name.size() == 1) {
-                modifyAttributes(name.get(0), mod_op, attrs);
-            } else {
-                DirContext ctx = getContinuationDirContext(name);
-                try {
-                    ctx.modifyAttributes(name.getSuffix(1), mod_op, attrs);
-                } finally {
-                    ctx.close();
-                }
-            }
-    }
-
-    public void modifyAttributes(String name, ModificationItem[] mods)
-        throws NamingException {
-            ResolveResult res = getRootURLContext(name, myEnv);
-            DirContext ctx = (DirContext)res.getResolvedObj();
-            try {
-                ctx.modifyAttributes(res.getRemainingName(), mods);
-            } finally {
-                ctx.close();
-            }
-    }
-
-    public void modifyAttributes(Name name, ModificationItem[] mods)
-        throws NamingException  {
-            if (name.size() == 1) {
-                modifyAttributes(name.get(0), mods);
-            } else {
-                DirContext ctx = getContinuationDirContext(name);
-                try {
-                    ctx.modifyAttributes(name.getSuffix(1), mods);
-                } finally {
-                    ctx.close();
-                }
-            }
-    }
-
-    public void bind(String name, Object obj, Attributes attrs)
-        throws NamingException {
-            ResolveResult res = getRootURLContext(name, myEnv);
-            DirContext ctx = (DirContext)res.getResolvedObj();
-            try {
-                ctx.bind(res.getRemainingName(), obj, attrs);
-            } finally {
-                ctx.close();
-            }
-    }
-
-    public void bind(Name name, Object obj, Attributes attrs)
-        throws NamingException {
-            if (name.size() == 1) {
-                bind(name.get(0), obj, attrs);
-            } else {
-                DirContext ctx = getContinuationDirContext(name);
-                try {
-                    ctx.bind(name.getSuffix(1), obj, attrs);
-                } finally {
-                    ctx.close();
-                }
-            }
-    }
-
-    public void rebind(String name, Object obj, Attributes attrs)
-        throws NamingException {
-            ResolveResult res = getRootURLContext(name, myEnv);
-            DirContext ctx = (DirContext)res.getResolvedObj();
-            try {
-                ctx.rebind(res.getRemainingName(), obj, attrs);
-            } finally {
-                ctx.close();
-            }
-    }
-
-    public void rebind(Name name, Object obj, Attributes attrs)
-        throws NamingException {
-            if (name.size() == 1) {
-                rebind(name.get(0), obj, attrs);
-            } else {
-                DirContext ctx = getContinuationDirContext(name);
-                try {
-                    ctx.rebind(name.getSuffix(1), obj, attrs);
-                } finally {
-                    ctx.close();
-                }
-            }
-    }
-
-    public DirContext createSubcontext(String name, Attributes attrs)
-        throws NamingException {
-            ResolveResult res = getRootURLContext(name, myEnv);
-            DirContext ctx = (DirContext)res.getResolvedObj();
-            try {
-                return ctx.createSubcontext(res.getRemainingName(), attrs);
-            } finally {
-                ctx.close();
-            }
-    }
-
-    public DirContext createSubcontext(Name name, Attributes attrs)
-        throws NamingException {
-            if (name.size() == 1) {
-                return createSubcontext(name.get(0), attrs);
-            } else {
-                DirContext ctx = getContinuationDirContext(name);
-                try {
-                    return ctx.createSubcontext(name.getSuffix(1), attrs);
-                } finally {
-                    ctx.close();
-                }
-            }
-    }
-
-    public DirContext getSchema(String name) throws NamingException {
-        ResolveResult res = getRootURLContext(name, myEnv);
-        DirContext ctx = (DirContext)res.getResolvedObj();
-        return ctx.getSchema(res.getRemainingName());
-    }
-
-    public DirContext getSchema(Name name) throws NamingException {
-        if (name.size() == 1) {
-            return getSchema(name.get(0));
-        } else {
-            DirContext ctx = getContinuationDirContext(name);
-            try {
-                return ctx.getSchema(name.getSuffix(1));
-            } finally {
-                ctx.close();
-            }
-        }
-    }
-
-    public DirContext getSchemaClassDefinition(String name)
-        throws NamingException {
-            ResolveResult res = getRootURLContext(name, myEnv);
-            DirContext ctx = (DirContext)res.getResolvedObj();
-            try {
-                return ctx.getSchemaClassDefinition(res.getRemainingName());
-            } finally {
-                ctx.close();
-            }
-    }
-
-    public DirContext getSchemaClassDefinition(Name name)
-        throws NamingException {
-            if (name.size() == 1) {
-                return getSchemaClassDefinition(name.get(0));
-            } else {
-                DirContext ctx = getContinuationDirContext(name);
-                try {
-                    return ctx.getSchemaClassDefinition(name.getSuffix(1));
-                } finally {
-                    ctx.close();
-                }
-            }
-    }
-
-    public NamingEnumeration<SearchResult> search(String name,
-        Attributes matchingAttributes)
-        throws NamingException {
-            ResolveResult res = getRootURLContext(name, myEnv);
-            DirContext ctx = (DirContext)res.getResolvedObj();
-            try {
-                return ctx.search(res.getRemainingName(), matchingAttributes);
-            } finally {
-                ctx.close();
-            }
-    }
-
-    public NamingEnumeration<SearchResult> search(Name name,
-        Attributes matchingAttributes)
-        throws NamingException {
-            if (name.size() == 1) {
-                return search(name.get(0), matchingAttributes);
-            } else {
-                DirContext ctx = getContinuationDirContext(name);
-                try {
-                    return ctx.search(name.getSuffix(1), matchingAttributes);
-                } finally {
-                    ctx.close();
-                }
-            }
-    }
-
-    public NamingEnumeration<SearchResult> search(String name,
-        Attributes matchingAttributes,
-        String[] attributesToReturn)
-        throws NamingException {
-            ResolveResult res = getRootURLContext(name, myEnv);
-            DirContext ctx = (DirContext)res.getResolvedObj();
-            try {
-                return ctx.search(res.getRemainingName(),
-                    matchingAttributes, attributesToReturn);
-            } finally {
-                ctx.close();
-            }
-    }
-
-    public NamingEnumeration<SearchResult> search(Name name,
-        Attributes matchingAttributes,
-        String[] attributesToReturn)
-        throws NamingException {
-            if (name.size() == 1) {
-                return search(name.get(0), matchingAttributes,
-                    attributesToReturn);
-            } else {
-                DirContext ctx = getContinuationDirContext(name);
-                try {
-                    return ctx.search(name.getSuffix(1),
-                        matchingAttributes, attributesToReturn);
-                } finally {
-                    ctx.close();
-                }
-            }
-    }
-
-    public NamingEnumeration<SearchResult> search(String name,
-        String filter,
-        SearchControls cons)
-        throws NamingException {
-            ResolveResult res = getRootURLContext(name, myEnv);
-            DirContext ctx = (DirContext)res.getResolvedObj();
-            try {
-                return ctx.search(res.getRemainingName(), filter, cons);
-            } finally {
-                ctx.close();
-            }
-    }
-
-    public NamingEnumeration<SearchResult> search(Name name,
-        String filter,
-        SearchControls cons)
-        throws NamingException {
-            if (name.size() == 1) {
-                return search(name.get(0), filter, cons);
-            } else {
-                DirContext ctx = getContinuationDirContext(name);
-                try {
-                    return ctx.search(name.getSuffix(1), filter, cons);
-                } finally {
-                    ctx.close();
-                }
-            }
-    }
-
-    public NamingEnumeration<SearchResult> search(String name,
-        String filterExpr,
-        Object[] filterArgs,
-        SearchControls cons)
-        throws NamingException {
-            ResolveResult res = getRootURLContext(name, myEnv);
-            DirContext ctx = (DirContext)res.getResolvedObj();
-            try {
-                return
-                    ctx.search(res.getRemainingName(), filterExpr, filterArgs, cons);
-            } finally {
-                ctx.close();
-            }
-    }
-
-    public NamingEnumeration<SearchResult> search(Name name,
-        String filterExpr,
-        Object[] filterArgs,
-        SearchControls cons)
-        throws NamingException {
-            if (name.size() == 1) {
-                return search(name.get(0), filterExpr, filterArgs, cons);
-            } else {
-                DirContext ctx = getContinuationDirContext(name);
-                try {
-                return ctx.search(name.getSuffix(1), filterExpr, filterArgs, cons);
-                } finally {
-                    ctx.close();
-                }
-            }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/toolkit/url/Uri.java b/ojluni/src/main/java/com/sun/jndi/toolkit/url/Uri.java
deleted file mode 100755
index da5771a..0000000
--- a/ojluni/src/main/java/com/sun/jndi/toolkit/url/Uri.java
+++ /dev/null
@@ -1,264 +0,0 @@
-/*
- * Copyright (c) 2000, 2001, 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.jndi.toolkit.url;
-
-
-import java.net.MalformedURLException;
-
-
-/**
- * A Uri object represents an absolute Uniform Resource Identifier
- * (URI) as defined by RFC 2396 and updated by RFC 2373 and RFC 2732.
- * The most commonly used form of URI is the Uniform Resource Locator (URL).
- *
- * <p> The java.net.URL class cannot be used to parse URIs since it
- * requires the installation of URL stream handlers that may not be
- * available.  The hack of getting around this by temporarily
- * replacing the scheme part of a URI is not appropriate here: JNDI
- * service providers must work on older Java platforms, and we want
- * new features and bug fixes that are not available in old versions
- * of the URL class.
- *
- * <p> It may be appropriate to drop this code in favor of the
- * java.net.URI class.  The changes would need to be written so as to
- * still run on pre-1.4 platforms not containing that class.
- *
- * <p> The format of an absolute URI (see the RFCs mentioned above) is:
- * <p><blockquote><pre>
- *      absoluteURI   = scheme ":" ( hier_part | opaque_part )
- *
- *      scheme        = alpha *( alpha | digit | "+" | "-" | "." )
- *
- *      hier_part     = ( net_path | abs_path ) [ "?" query ]
- *      opaque_part   = uric_no_slash *uric
- *
- *      net_path      = "//" authority [ abs_path ]
- *      abs_path      = "/"  path_segments
- *
- *      authority     = server | reg_name
- *      reg_name      = 1*( unreserved | escaped | "$" | "," |
- *                          ";" | ":" | "@" | "&" | "=" | "+" )
- *      server        = [ [ userinfo "@" ] hostport ]
- *      userinfo      = *( unreserved | escaped |
- *                         ";" | ":" | "&" | "=" | "+" | "$" | "," )
- *
- *      hostport      = host [ ":" port ]
- *      host          = hostname | IPv4address | IPv6reference
- *      port          = *digit
- *
- *      IPv6reference = "[" IPv6address "]"
- *      IPv6address   = hexpart [ ":" IPv4address ]
- *      IPv4address   = 1*3digit "." 1*3digit "." 1*3digit "." 1*3digit
- *      hexpart       = hexseq | hexseq "::" [ hexseq ] | "::" [ hexseq ]
- *      hexseq        = hex4 *( ":" hex4)
- *      hex4          = 1*4hex
- *
- *      path          = [ abs_path | opaque_part ]
- *      path_segments = segment *( "/" segment )
- *      segment       = *pchar *( ";" param )
- *      param         = *pchar
- *      pchar         = unreserved | escaped |
- *                      ":" | "@" | "&" | "=" | "+" | "$" | ","
- *
- *      query         = *uric
- *
- *      uric          = reserved | unreserved | escaped
- *      uric_no_slash = unreserved | escaped | ";" | "?" | ":" | "@" |
- *                      "&" | "=" | "+" | "$" | ","
- *      reserved      = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" |
- *                      "$" | "," | "[" | "]"
- *      unreserved    = alphanum | mark
- *      mark          = "-" | "_" | "." | "!" | "~" | "*" | "'" | "(" | ")"
- *      escaped       = "%" hex hex
- *      unwise        = "{" | "}" | "|" | "\" | "^" | "`"
- * </pre></blockquote>
- *
- * <p> Currently URIs containing <tt>userinfo</tt> or <tt>reg_name</tt>
- * are not supported.
- * The <tt>opaque_part</tt> of a non-hierarchical URI is treated as if
- * if were a <tt>path</tt> without a leading slash.
- */
-
-
-public class Uri {
-
-    protected String uri;
-    protected String scheme;
-    protected String host = null;
-    protected int port = -1;
-    protected boolean hasAuthority;
-    protected String path;
-    protected String query = null;
-
-
-    /**
-     * Creates a Uri object given a URI string.
-     */
-    public Uri(String uri) throws MalformedURLException {
-        init(uri);
-    }
-
-    /**
-     * Creates an uninitialized Uri object. The init() method must
-     * be called before any other Uri methods.
-     */
-    protected Uri() {
-    }
-
-    /**
-     * Initializes a Uri object given a URI string.
-     * This method must be called exactly once, and before any other Uri
-     * methods.
-     */
-    protected void init(String uri) throws MalformedURLException {
-        this.uri = uri;
-        parse(uri);
-    }
-
-    /**
-     * Returns the URI's scheme.
-     */
-    public String getScheme() {
-        return scheme;
-    }
-
-    /**
-     * Returns the host from the URI's authority part, or null
-     * if no host is provided.  If the host is an IPv6 literal, the
-     * delimiting brackets are part of the returned value (see
-     * {@link java.net.URI#getHost}).
-     */
-    public String getHost() {
-        return host;
-    }
-
-    /**
-     * Returns the port from the URI's authority part, or -1 if
-     * no port is provided.
-     */
-    public int getPort() {
-        return port;
-    }
-
-    /**
-     * Returns the URI's path.  The path is never null.  Note that a
-     * slash following the authority part (or the scheme if there is
-     * no authority part) is part of the path.  For example, the path
-     * of "http://host/a/b" is "/a/b".
-     */
-    public String getPath() {
-        return path;
-    }
-
-    /**
-     * Returns the URI's query part, or null if no query is provided.
-     * Note that a query always begins with a leading "?".
-     */
-    public String getQuery() {
-        return query;
-    }
-
-    /**
-     * Returns the URI as a string.
-     */
-    public String toString() {
-        return uri;
-    }
-
-    /*
-     * Parses a URI string and sets this object's fields accordingly.
-     */
-    private void parse(String uri) throws MalformedURLException {
-        int i;  // index into URI
-
-        i = uri.indexOf(':');                           // parse scheme
-        if (i < 0) {
-            throw new MalformedURLException("Invalid URI: " + uri);
-        }
-        scheme = uri.substring(0, i);
-        i++;                                            // skip past ":"
-
-        hasAuthority = uri.startsWith("//", i);
-        if (hasAuthority) {                             // parse "//host:port"
-            i += 2;                                     // skip past "//"
-            int slash = uri.indexOf('/', i);
-            if (slash < 0) {
-                slash = uri.length();
-            }
-            if (uri.startsWith("[", i)) {               // at IPv6 literal
-                int brac = uri.indexOf(']', i + 1);
-                if (brac < 0 || brac > slash) {
-                    throw new MalformedURLException("Invalid URI: " + uri);
-                }
-                host = uri.substring(i, brac + 1);      // include brackets
-                i = brac + 1;                           // skip past "[...]"
-            } else {                                    // at host name or IPv4
-                int colon = uri.indexOf(':', i);
-                int hostEnd = (colon < 0 || colon > slash)
-                    ? slash
-                    : colon;
-                if (i < hostEnd) {
-                    host = uri.substring(i, hostEnd);
-                }
-                i = hostEnd;                            // skip past host
-            }
-
-            if ((i + 1 < slash) &&
-                        uri.startsWith(":", i)) {       // parse port
-                i++;                                    // skip past ":"
-                port = Integer.parseInt(uri.substring(i, slash));
-            }
-            i = slash;                                  // skip to path
-        }
-        int qmark = uri.indexOf('?', i);                // look for query
-        if (qmark < 0) {
-            path = uri.substring(i);
-        } else {
-            path = uri.substring(i, qmark);
-            query = uri.substring(qmark);
-        }
-    }
-
-/*
-    // Debug
-    public static void main(String args[]) throws MalformedURLException {
-        for (int i = 0; i < args.length; i++) {
-            Uri uri = new Uri(args[i]);
-
-            String h = (uri.getHost() != null) ? uri.getHost() : "";
-            String p = (uri.getPort() != -1) ? (":" + uri.getPort()) : "";
-            String a = uri.hasAuthority ? ("//" + h + p) : "";
-            String q = (uri.getQuery() != null) ? uri.getQuery() : "";
-
-            String str = uri.getScheme() + ":" + a + uri.getPath() + q;
-            if (! uri.toString().equals(str)) {
-                System.out.println(str);
-            }
-            System.out.println(h);
-        }
-    }
-*/
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/toolkit/url/UrlUtil.java b/ojluni/src/main/java/com/sun/jndi/toolkit/url/UrlUtil.java
deleted file mode 100755
index 2e5858b..0000000
--- a/ojluni/src/main/java/com/sun/jndi/toolkit/url/UrlUtil.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Copyright (c) 1999, 2001, 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.jndi.toolkit.url;
-
-import java.net.MalformedURLException;
-import java.io.UnsupportedEncodingException;
-import java.net.URLDecoder;
-
-/**
- * Utilities for dealing with URLs.
- * @author Vincent Ryan
- */
-
-final public class UrlUtil {
-
-    // To prevent creation of this static class
-    private UrlUtil() {
-    }
-
-    /**
-     * Decode a URI string (according to RFC 2396).
-     */
-    public static final String decode(String s) throws MalformedURLException {
-        try {
-            return decode(s, "8859_1");
-        } catch (UnsupportedEncodingException e) {
-            // ISO-Latin-1 should always be available?
-            throw new MalformedURLException("ISO-Latin-1 decoder unavailable");
-        }
-    }
-
-    /**
-     * Decode a URI string (according to RFC 2396).
-     *
-     * Three-character sequences '%xy', where 'xy' is the two-digit
-     * hexadecimal representation of the lower 8-bits of a character,
-     * are decoded into the character itself.
-     *
-     * The string is subsequently converted using the specified encoding
-     */
-    public static final String decode(String s, String enc)
-            throws MalformedURLException, UnsupportedEncodingException {
-        try {
-            return URLDecoder.decode(s, enc);
-        } catch (IllegalArgumentException iae) {
-            MalformedURLException mue = new MalformedURLException("Invalid URI encoding: " + s);
-            mue.initCause(iae);
-            throw mue;
-        }
-    }
-
-    /**
-     * Encode a string for inclusion in a URI (according to RFC 2396).
-     *
-     * Unsafe characters are escaped by encoding them in three-character
-     * sequences '%xy', where 'xy' is the two-digit hexadecimal representation
-     * of the lower 8-bits of the character.
-     *
-     * The question mark '?' character is also escaped, as required by RFC 2255.
-     *
-     * The string is first converted to the specified encoding.
-     * For LDAP (2255), the encoding must be UTF-8.
-     */
-    public static final String encode(String s, String enc)
-        throws UnsupportedEncodingException {
-
-        byte[] bytes = s.getBytes(enc);
-        int count = bytes.length;
-
-        /*
-         * From RFC 2396:
-         *
-         *     mark = "-" | "_" | "." | "!" | "~" | "*" | "'" | "(" | ")"
-         * reserved = ";" | "/" | ":" | "?" | "@" | "&" | "=" | "+" | "$" | ","
-         */
-        final String allowed = "=,+;.'-@&/$_()!~*:"; // '?' is omitted
-        char[] buf = new char[3 * count];
-        int j = 0;
-
-        for (int i = 0; i < count; i++) {
-            if ((bytes[i] >= 0x61 && bytes[i] <= 0x7A) || // a..z
-                (bytes[i] >= 0x41 && bytes[i] <= 0x5A) || // A..Z
-                (bytes[i] >= 0x30 && bytes[i] <= 0x39) || // 0..9
-                (allowed.indexOf(bytes[i]) >= 0)) {
-                buf[j++] = (char) bytes[i];
-            } else {
-                buf[j++] = '%';
-                buf[j++] = Character.forDigit(0xF & (bytes[i] >>> 4), 16);
-                buf[j++] = Character.forDigit(0xF & bytes[i], 16);
-            }
-        }
-        return new String(buf, 0, j);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/url/corbaname/corbanameURLContextFactory.java b/ojluni/src/main/java/com/sun/jndi/url/corbaname/corbanameURLContextFactory.java
deleted file mode 100755
index f5df93a..0000000
--- a/ojluni/src/main/java/com/sun/jndi/url/corbaname/corbanameURLContextFactory.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (c) 2000, 2001, 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.jndi.url.corbaname;
-
-import com.sun.jndi.url.iiop.iiopURLContextFactory;
-
-/**
- * A corbaname URL context factory.
- * It just uses the iiop URL context factory but is needed here
- * so that NamingManager.getURLContext() will find it.
- *
- * @author Rosanna Lee
- */
-final public class corbanameURLContextFactory extends iiopURLContextFactory {
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/url/dns/dnsURLContext.java b/ojluni/src/main/java/com/sun/jndi/url/dns/dnsURLContext.java
deleted file mode 100755
index 68df743..0000000
--- a/ojluni/src/main/java/com/sun/jndi/url/dns/dnsURLContext.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright (c) 2000, 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.jndi.url.dns;
-
-
-import java.net.MalformedURLException;
-import java.util.Hashtable;
-
-import javax.naming.*;
-import javax.naming.spi.ResolveResult;
-import com.sun.jndi.dns.*;
-import com.sun.jndi.toolkit.url.GenericURLDirContext;
-
-
-/**
- * A DNS URL context resolves names that are DNS pseudo-URLs.
- * See com.sun.jndi.dns.DnsUrl for a description of the URL format.
- *
- * @author Scott Seligman
- */
-
-
-public class dnsURLContext extends GenericURLDirContext {
-
-    public dnsURLContext(Hashtable env) {
-        super(env);
-    }
-
-    /**
-     * Resolves the host and port of "url" to a root context connected
-     * to the named DNS server, and returns the domain name as the
-     * remaining name.
-     */
-    protected ResolveResult getRootURLContext(String url, Hashtable env)
-            throws NamingException {
-
-        DnsUrl dnsUrl;
-        try {
-            dnsUrl = new DnsUrl(url);
-        } catch (MalformedURLException e) {
-            throw new InvalidNameException(e.getMessage());
-        }
-
-        DnsUrl[] urls = new DnsUrl[] { dnsUrl };
-        String domain = dnsUrl.getDomain();
-
-        return new ResolveResult(
-                DnsContextFactory.getContext(".", urls, env),
-                new CompositeName().add(domain));
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/url/dns/dnsURLContextFactory.java b/ojluni/src/main/java/com/sun/jndi/url/dns/dnsURLContextFactory.java
deleted file mode 100755
index b0d345f..0000000
--- a/ojluni/src/main/java/com/sun/jndi/url/dns/dnsURLContextFactory.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Copyright (c) 2000, 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.
- */
-
-package com.sun.jndi.url.dns;
-
-
-import java.util.Hashtable;
-
-import javax.naming.*;
-import javax.naming.spi.ObjectFactory;
-
-
-/**
- * A DNS URL context factory creates contexts that can resolve names
- * that are DNS pseudo-URLs.
- * In addition, if given a specific DNS URL (or an array of them), the
- * factory will resolve all the way to the named context.
- * See com.sun.jndi.dns.DnsUrl for a description of the URL format.
- *
- * @author Scott Seligman
- */
-
-
-public class dnsURLContextFactory implements ObjectFactory {
-
-    public Object getObjectInstance(Object urlInfo, Name name,
-                                    Context nameCtx, Hashtable<?,?> env)
-            throws NamingException {
-
-        if (urlInfo == null) {
-            return (new dnsURLContext(env));
-        } else if (urlInfo instanceof String) {
-            return getUsingURL((String) urlInfo, env);
-        } else if (urlInfo instanceof String[]) {
-            return getUsingURLs((String[]) urlInfo, env);
-        } else {
-            throw (new ConfigurationException(
-                    "dnsURLContextFactory.getObjectInstance: " +
-                    "argument must be a DNS URL String or an array of them"));
-        }
-    }
-
-    private static Object getUsingURL(String url, Hashtable env)
-            throws NamingException {
-
-        dnsURLContext urlCtx = new dnsURLContext(env);
-        try {
-            return urlCtx.lookup(url);
-        } finally {
-            urlCtx.close();
-        }
-    }
-
-    /*
-     * Try each URL until lookup() succeeds for one of them.
-     * If all URLs fail, throw one of the exceptions arbitrarily.
-     * Not pretty, but potentially more informative than returning null.
-     */
-    private static Object getUsingURLs(String[] urls, Hashtable env)
-            throws NamingException {
-
-        if (urls.length == 0) {
-            throw (new ConfigurationException(
-                    "dnsURLContextFactory: empty URL array"));
-        }
-        dnsURLContext urlCtx = new dnsURLContext(env);
-        try {
-            NamingException ne = null;
-            for (int i = 0; i < urls.length; i++) {
-                try {
-                    return urlCtx.lookup(urls[i]);
-                } catch (NamingException e) {
-                    ne = e;
-                }
-            }
-            throw ne;   // failure:  throw one of the exceptions caught
-        } finally {
-            urlCtx.close();
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/url/iiop/iiopURLContext.java b/ojluni/src/main/java/com/sun/jndi/url/iiop/iiopURLContext.java
deleted file mode 100755
index 8e3a2c9..0000000
--- a/ojluni/src/main/java/com/sun/jndi/url/iiop/iiopURLContext.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Copyright (c) 1999, 2000, 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.jndi.url.iiop;
-
-import javax.naming.spi.ResolveResult;
-import javax.naming.*;
-import java.util.Hashtable;
-import java.net.MalformedURLException;
-
-import com.sun.jndi.cosnaming.IiopUrl;
-import com.sun.jndi.cosnaming.CorbanameUrl;
-
-/**
- * An IIOP URL context.
- *
- * @author Rosanna Lee
- */
-
-public class iiopURLContext
-        extends com.sun.jndi.toolkit.url.GenericURLContext {
-
-    iiopURLContext(Hashtable env) {
-        super(env);
-    }
-
-    /**
-      * Resolves 'name' into a target context with remaining name.
-      * It only resolves the hostname/port number. The remaining name
-      * contains the rest of the name found in the URL.
-      *
-      * For example, with a iiop URL "iiop://localhost:900/rest/of/name",
-      * this method resolves "iiop://localhost:900/" to the "NameService"
-      * context on for the ORB at 'localhost' on port 900,
-      * and returns as the remaining name "rest/of/name".
-      */
-    protected ResolveResult getRootURLContext(String name, Hashtable env)
-    throws NamingException {
-        return iiopURLContextFactory.getUsingURLIgnoreRest(name, env);
-    }
-
-    /**
-     * Return the suffix of an "iiop", "iiopname", or "corbaname" url.
-     * prefix parameter is ignored.
-     */
-    protected Name getURLSuffix(String prefix, String url)
-        throws NamingException {
-        try {
-            if (url.startsWith("iiop://") || url.startsWith("iiopname://")) {
-                IiopUrl parsedUrl = new IiopUrl(url);
-                return parsedUrl.getCosName();
-            } else if (url.startsWith("corbaname:")) {
-                CorbanameUrl parsedUrl = new CorbanameUrl(url);
-                return parsedUrl.getCosName();
-            } else {
-                throw new MalformedURLException("Not a valid URL: " + url);
-            }
-        } catch (MalformedURLException e) {
-            throw new InvalidNameException(e.getMessage());
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/url/iiop/iiopURLContextFactory.java b/ojluni/src/main/java/com/sun/jndi/url/iiop/iiopURLContextFactory.java
deleted file mode 100755
index 59a7f78..0000000
--- a/ojluni/src/main/java/com/sun/jndi/url/iiop/iiopURLContextFactory.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-package com.sun.jndi.url.iiop;
-
-import javax.naming.*;
-import javax.naming.spi.*;
-
-import java.util.Hashtable;
-
-import com.sun.jndi.cosnaming.CNCtx;
-
-/**
- * An IIOP URL context factory.
- *
- * @author Rosanna Lee
- */
-
-public class iiopURLContextFactory implements ObjectFactory {
-
-    public Object getObjectInstance(Object urlInfo, Name name, Context nameCtx,
-                                    Hashtable<?,?> env) throws Exception {
-
-//System.out.println("iiopURLContextFactory " + urlInfo);
-        if (urlInfo == null) {
-            return new iiopURLContext(env);
-        }
-        if (urlInfo instanceof String) {
-            return getUsingURL((String)urlInfo, env);
-        } else if (urlInfo instanceof String[]) {
-            return getUsingURLs((String[])urlInfo, env);
-        } else {
-            throw (new IllegalArgumentException(
-                    "iiopURLContextFactory.getObjectInstance: " +
-                    "argument must be a URL String or array of URLs"));
-        }
-    }
-
-    /**
-      * Resolves 'name' into a target context with remaining name.
-      * It only resolves the hostname/port number. The remaining name
-      * contains the rest of the name found in the URL.
-      *
-      * For example, with a iiop URL "iiop://localhost:900/rest/of/name",
-      * this method resolves "iiop://localhost:900/" to the "NameService"
-      * context on for the ORB at 'localhost' on port 900,
-      * and returns as the remaining name "rest/of/name".
-      */
-    static ResolveResult getUsingURLIgnoreRest(String url, Hashtable env)
-        throws NamingException {
-        return CNCtx.createUsingURL(url, env);
-    }
-
-    private static Object getUsingURL(String url, Hashtable env)
-        throws NamingException {
-        ResolveResult res = getUsingURLIgnoreRest(url, env);
-
-        Context ctx = (Context)res.getResolvedObj();
-        try {
-            return ctx.lookup(res.getRemainingName());
-        } finally {
-            ctx.close();
-        }
-    }
-
-    private static Object getUsingURLs(String[] urls, Hashtable env) {
-        for (int i = 0; i < urls.length; i++) {
-            String url = urls[i];
-            try {
-                Object obj = getUsingURL(url, env);
-                if (obj != null) {
-                    return obj;
-                }
-            } catch (NamingException e) {
-            }
-        }
-        return null;    // %%% exception??
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/url/iiopname/iiopnameURLContextFactory.java b/ojluni/src/main/java/com/sun/jndi/url/iiopname/iiopnameURLContextFactory.java
deleted file mode 100755
index 76e32cf..0000000
--- a/ojluni/src/main/java/com/sun/jndi/url/iiopname/iiopnameURLContextFactory.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (c) 1999, 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.jndi.url.iiopname;
-
-import com.sun.jndi.url.iiop.iiopURLContextFactory;
-
-/**
- * An iiopname URL context factory.
- * It just uses the iiop URL context factory but is needed here
- * so that NamingManager.getURLContext() will find it.
- *
- * @author Rosanna Lee
- */
-final public class iiopnameURLContextFactory extends iiopURLContextFactory {
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/url/ldap/ldapURLContext.java b/ojluni/src/main/java/com/sun/jndi/url/ldap/ldapURLContext.java
deleted file mode 100755
index 8111aba..0000000
--- a/ojluni/src/main/java/com/sun/jndi/url/ldap/ldapURLContext.java
+++ /dev/null
@@ -1,629 +0,0 @@
-/*
- * Copyright (c) 1999, 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.jndi.url.ldap;
-
-import javax.naming.spi.ResolveResult;
-import javax.naming.*;
-import javax.naming.directory.*;
-import java.util.Hashtable;
-import java.util.StringTokenizer;
-import com.sun.jndi.ldap.LdapURL;
-
-/**
- * An LDAP URL context.
- *
- * @author Rosanna Lee
- * @author Scott Seligman
- */
-
-final public class ldapURLContext
-        extends com.sun.jndi.toolkit.url.GenericURLDirContext {
-
-    ldapURLContext(Hashtable env) {
-        super(env);
-    }
-
-    /**
-      * Resolves 'name' into a target context with remaining name.
-      * It only resolves the hostname/port number. The remaining name
-      * contains the root DN.
-      *
-      * For example, with a LDAP URL "ldap://localhost:389/o=widget,c=us",
-      * this method resolves "ldap://localhost:389/" to the root LDAP
-      * context on the server 'localhost' on port 389,
-      * and returns as the remaining name "o=widget, c=us".
-      */
-    protected ResolveResult getRootURLContext(String name, Hashtable env)
-    throws NamingException {
-        return ldapURLContextFactory.getUsingURLIgnoreRootDN(name, env);
-    }
-
-    /**
-     * Return the suffix of an ldap url.
-     * prefix parameter is ignored.
-     */
-    protected Name getURLSuffix(String prefix, String url)
-        throws NamingException {
-
-        LdapURL ldapUrl = new LdapURL(url);
-        String dn = (ldapUrl.getDN() != null? ldapUrl.getDN() : "");
-
-        // Represent DN as empty or single-component composite name.
-        CompositeName remaining = new CompositeName();
-        if (!"".equals(dn)) {
-            // if nonempty, add component
-            remaining.add(dn);
-        }
-        return remaining;
-    }
-
-    /*
-     * Override context operations.
-     * Test for presence of LDAP URL query components in the name argument.
-     * Query components are permitted only for search operations and only
-     * when the name has a single component.
-     */
-
-    public Object lookup(String name) throws NamingException {
-        if (LdapURL.hasQueryComponents(name)) {
-            throw new InvalidNameException(name);
-        } else {
-            return super.lookup(name);
-        }
-    }
-
-    public Object lookup(Name name) throws NamingException {
-        if (LdapURL.hasQueryComponents(name.get(0))) {
-            throw new InvalidNameException(name.toString());
-        } else {
-            return super.lookup(name);
-        }
-    }
-
-    public void bind(String name, Object obj) throws NamingException {
-        if (LdapURL.hasQueryComponents(name)) {
-            throw new InvalidNameException(name);
-        } else {
-            super.bind(name, obj);
-        }
-    }
-
-    public void bind(Name name, Object obj) throws NamingException {
-        if (LdapURL.hasQueryComponents(name.get(0))) {
-            throw new InvalidNameException(name.toString());
-        } else {
-            super.bind(name, obj);
-        }
-    }
-
-    public void rebind(String name, Object obj) throws NamingException {
-        if (LdapURL.hasQueryComponents(name)) {
-            throw new InvalidNameException(name);
-        } else {
-            super.rebind(name, obj);
-        }
-    }
-
-    public void rebind(Name name, Object obj) throws NamingException {
-        if (LdapURL.hasQueryComponents(name.get(0))) {
-            throw new InvalidNameException(name.toString());
-        } else {
-            super.rebind(name, obj);
-        }
-    }
-
-    public void unbind(String name) throws NamingException {
-        if (LdapURL.hasQueryComponents(name)) {
-            throw new InvalidNameException(name);
-        } else {
-            super.unbind(name);
-        }
-    }
-
-    public void unbind(Name name) throws NamingException {
-        if (LdapURL.hasQueryComponents(name.get(0))) {
-            throw new InvalidNameException(name.toString());
-        } else {
-            super.unbind(name);
-        }
-    }
-
-    public void rename(String oldName, String newName) throws NamingException {
-        if (LdapURL.hasQueryComponents(oldName)) {
-            throw new InvalidNameException(oldName);
-        } else if (LdapURL.hasQueryComponents(newName)) {
-            throw new InvalidNameException(newName);
-        } else {
-            super.rename(oldName, newName);
-        }
-    }
-
-    public void rename(Name oldName, Name newName) throws NamingException {
-        if (LdapURL.hasQueryComponents(oldName.get(0))) {
-            throw new InvalidNameException(oldName.toString());
-        } else if (LdapURL.hasQueryComponents(newName.get(0))) {
-            throw new InvalidNameException(newName.toString());
-        } else {
-            super.rename(oldName, newName);
-        }
-    }
-
-    public NamingEnumeration list(String name)  throws NamingException {
-        if (LdapURL.hasQueryComponents(name)) {
-            throw new InvalidNameException(name);
-        } else {
-            return super.list(name);
-        }
-    }
-
-    public NamingEnumeration list(Name name) throws NamingException {
-        if (LdapURL.hasQueryComponents(name.get(0))) {
-            throw new InvalidNameException(name.toString());
-        } else {
-            return super.list(name);
-        }
-    }
-
-    public NamingEnumeration listBindings(String name) throws NamingException {
-        if (LdapURL.hasQueryComponents(name)) {
-            throw new InvalidNameException(name);
-        } else {
-            return super.listBindings(name);
-        }
-    }
-
-    public NamingEnumeration listBindings(Name name) throws NamingException {
-        if (LdapURL.hasQueryComponents(name.get(0))) {
-            throw new InvalidNameException(name.toString());
-        } else {
-            return super.listBindings(name);
-        }
-    }
-
-    public void destroySubcontext(String name) throws NamingException {
-        if (LdapURL.hasQueryComponents(name)) {
-            throw new InvalidNameException(name);
-        } else {
-            super.destroySubcontext(name);
-        }
-    }
-
-    public void destroySubcontext(Name name) throws NamingException {
-        if (LdapURL.hasQueryComponents(name.get(0))) {
-            throw new InvalidNameException(name.toString());
-        } else {
-            super.destroySubcontext(name);
-        }
-    }
-
-    public Context createSubcontext(String name) throws NamingException {
-        if (LdapURL.hasQueryComponents(name)) {
-            throw new InvalidNameException(name);
-        } else {
-            return super.createSubcontext(name);
-        }
-    }
-
-    public Context createSubcontext(Name name) throws NamingException {
-        if (LdapURL.hasQueryComponents(name.get(0))) {
-            throw new InvalidNameException(name.toString());
-        } else {
-            return super.createSubcontext(name);
-        }
-    }
-
-    public Object lookupLink(String name) throws NamingException {
-        if (LdapURL.hasQueryComponents(name)) {
-            throw new InvalidNameException(name);
-        } else {
-            return super.lookupLink(name);
-        }
-    }
-
-    public Object lookupLink(Name name) throws NamingException {
-        if (LdapURL.hasQueryComponents(name.get(0))) {
-            throw new InvalidNameException(name.toString());
-        } else {
-            return super.lookupLink(name);
-        }
-    }
-
-    public NameParser getNameParser(String name) throws NamingException {
-        if (LdapURL.hasQueryComponents(name)) {
-            throw new InvalidNameException(name);
-        } else {
-            return super.getNameParser(name);
-        }
-    }
-
-    public NameParser getNameParser(Name name) throws NamingException {
-        if (LdapURL.hasQueryComponents(name.get(0))) {
-            throw new InvalidNameException(name.toString());
-        } else {
-            return super.getNameParser(name);
-        }
-    }
-
-    public String composeName(String name, String prefix)
-        throws NamingException {
-        if (LdapURL.hasQueryComponents(name)) {
-            throw new InvalidNameException(name);
-        } else if (LdapURL.hasQueryComponents(prefix)) {
-            throw new InvalidNameException(prefix);
-        } else {
-            return super.composeName(name, prefix);
-        }
-    }
-
-    public Name composeName(Name name, Name prefix) throws NamingException {
-        if (LdapURL.hasQueryComponents(name.get(0))) {
-            throw new InvalidNameException(name.toString());
-        } else if (LdapURL.hasQueryComponents(prefix.get(0))) {
-            throw new InvalidNameException(prefix.toString());
-        } else {
-            return super.composeName(name, prefix);
-        }
-    }
-
-    public Attributes getAttributes(String name) throws NamingException {
-        if (LdapURL.hasQueryComponents(name)) {
-            throw new InvalidNameException(name);
-        } else {
-            return super.getAttributes(name);
-        }
-    }
-
-    public Attributes getAttributes(Name name) throws NamingException  {
-        if (LdapURL.hasQueryComponents(name.get(0))) {
-            throw new InvalidNameException(name.toString());
-        } else {
-            return super.getAttributes(name);
-        }
-    }
-
-    public Attributes getAttributes(String name, String[] attrIds)
-        throws NamingException {
-        if (LdapURL.hasQueryComponents(name)) {
-            throw new InvalidNameException(name);
-        } else {
-            return super.getAttributes(name, attrIds);
-        }
-    }
-
-    public Attributes getAttributes(Name name, String[] attrIds)
-        throws NamingException {
-        if (LdapURL.hasQueryComponents(name.get(0))) {
-            throw new InvalidNameException(name.toString());
-        } else {
-            return super.getAttributes(name, attrIds);
-        }
-    }
-
-    public void modifyAttributes(String name, int mod_op, Attributes attrs)
-        throws NamingException {
-        if (LdapURL.hasQueryComponents(name)) {
-            throw new InvalidNameException(name);
-        } else {
-            super.modifyAttributes(name, mod_op, attrs);
-        }
-    }
-
-    public void modifyAttributes(Name name, int mod_op, Attributes attrs)
-        throws NamingException {
-        if (LdapURL.hasQueryComponents(name.get(0))) {
-            throw new InvalidNameException(name.toString());
-        } else {
-            super.modifyAttributes(name, mod_op, attrs);
-        }
-    }
-
-    public void modifyAttributes(String name, ModificationItem[] mods)
-        throws NamingException {
-        if (LdapURL.hasQueryComponents(name)) {
-            throw new InvalidNameException(name);
-        } else {
-            super.modifyAttributes(name, mods);
-        }
-    }
-
-    public void modifyAttributes(Name name, ModificationItem[] mods)
-        throws NamingException  {
-        if (LdapURL.hasQueryComponents(name.get(0))) {
-            throw new InvalidNameException(name.toString());
-        } else {
-            super.modifyAttributes(name, mods);
-        }
-    }
-
-    public void bind(String name, Object obj, Attributes attrs)
-        throws NamingException {
-        if (LdapURL.hasQueryComponents(name)) {
-            throw new InvalidNameException(name);
-        } else {
-            super.bind(name, obj, attrs);
-        }
-    }
-
-    public void bind(Name name, Object obj, Attributes attrs)
-        throws NamingException {
-        if (LdapURL.hasQueryComponents(name.get(0))) {
-            throw new InvalidNameException(name.toString());
-        } else {
-            super.bind(name, obj, attrs);
-        }
-    }
-
-    public void rebind(String name, Object obj, Attributes attrs)
-        throws NamingException {
-        if (LdapURL.hasQueryComponents(name)) {
-            throw new InvalidNameException(name);
-        } else {
-            super.rebind(name, obj, attrs);
-        }
-    }
-
-    public void rebind(Name name, Object obj, Attributes attrs)
-        throws NamingException {
-        if (LdapURL.hasQueryComponents(name.get(0))) {
-            throw new InvalidNameException(name.toString());
-        } else {
-            super.rebind(name, obj, attrs);
-        }
-    }
-
-    public DirContext createSubcontext(String name, Attributes attrs)
-        throws NamingException {
-        if (LdapURL.hasQueryComponents(name)) {
-            throw new InvalidNameException(name);
-        } else {
-            return super.createSubcontext(name, attrs);
-        }
-    }
-
-    public DirContext createSubcontext(Name name, Attributes attrs)
-        throws NamingException {
-        if (LdapURL.hasQueryComponents(name.get(0))) {
-            throw new InvalidNameException(name.toString());
-        } else {
-            return super.createSubcontext(name, attrs);
-        }
-    }
-
-    public DirContext getSchema(String name) throws NamingException {
-        if (LdapURL.hasQueryComponents(name)) {
-            throw new InvalidNameException(name);
-        } else {
-            return super.getSchema(name);
-        }
-    }
-
-    public DirContext getSchema(Name name) throws NamingException {
-        if (LdapURL.hasQueryComponents(name.get(0))) {
-            throw new InvalidNameException(name.toString());
-        } else {
-            return super.getSchema(name);
-        }
-    }
-
-    public DirContext getSchemaClassDefinition(String name)
-        throws NamingException {
-        if (LdapURL.hasQueryComponents(name)) {
-            throw new InvalidNameException(name);
-        } else {
-            return super.getSchemaClassDefinition(name);
-        }
-    }
-
-    public DirContext getSchemaClassDefinition(Name name)
-        throws NamingException {
-        if (LdapURL.hasQueryComponents(name.get(0))) {
-            throw new InvalidNameException(name.toString());
-        } else {
-            return super.getSchemaClassDefinition(name);
-        }
-    }
-
-    // divert the search operation when the LDAP URL has query components
-    public NamingEnumeration search(String name,
-        Attributes matchingAttributes)
-        throws NamingException {
-
-        if (LdapURL.hasQueryComponents(name)) {
-            return searchUsingURL(name);
-        } else {
-            return super.search(name, matchingAttributes);
-        }
-    }
-
-    // divert the search operation when name has a single component
-    public NamingEnumeration search(Name name,
-        Attributes matchingAttributes)
-        throws NamingException {
-        if (name.size() == 1) {
-            return search(name.get(0), matchingAttributes);
-        } else if (LdapURL.hasQueryComponents(name.get(0))) {
-            throw new InvalidNameException(name.toString());
-        } else {
-            return super.search(name, matchingAttributes);
-        }
-    }
-
-    // divert the search operation when the LDAP URL has query components
-    public NamingEnumeration search(String name,
-        Attributes matchingAttributes,
-        String[] attributesToReturn)
-        throws NamingException {
-
-        if (LdapURL.hasQueryComponents(name)) {
-            return searchUsingURL(name);
-        } else {
-            return super.search(name, matchingAttributes, attributesToReturn);
-        }
-    }
-
-    // divert the search operation when name has a single component
-    public NamingEnumeration search(Name name,
-        Attributes matchingAttributes,
-        String[] attributesToReturn)
-        throws NamingException {
-
-        if (name.size() == 1) {
-            return search(name.get(0), matchingAttributes, attributesToReturn);
-        } else if (LdapURL.hasQueryComponents(name.get(0))) {
-            throw new InvalidNameException(name.toString());
-        } else {
-            return super.search(name, matchingAttributes, attributesToReturn);
-        }
-    }
-
-    // divert the search operation when the LDAP URL has query components
-    public NamingEnumeration search(String name,
-        String filter,
-        SearchControls cons)
-        throws NamingException {
-
-        if (LdapURL.hasQueryComponents(name)) {
-            return searchUsingURL(name);
-        } else {
-            return super.search(name, filter, cons);
-        }
-    }
-
-    // divert the search operation when name has a single component
-    public NamingEnumeration search(Name name,
-        String filter,
-        SearchControls cons)
-        throws NamingException {
-
-        if (name.size() == 1) {
-            return search(name.get(0), filter, cons);
-        } else if (LdapURL.hasQueryComponents(name.get(0))) {
-            throw new InvalidNameException(name.toString());
-        } else {
-            return super.search(name, filter, cons);
-        }
-    }
-
-    // divert the search operation when the LDAP URL has query components
-    public NamingEnumeration search(String name,
-        String filterExpr,
-        Object[] filterArgs,
-        SearchControls cons)
-        throws NamingException {
-
-        if (LdapURL.hasQueryComponents(name)) {
-            return searchUsingURL(name);
-        } else {
-            return super.search(name, filterExpr, filterArgs, cons);
-        }
-    }
-
-    // divert the search operation when name has a single component
-    public NamingEnumeration search(Name name,
-        String filterExpr,
-        Object[] filterArgs,
-        SearchControls cons)
-        throws NamingException {
-
-        if (name.size() == 1) {
-            return search(name.get(0), filterExpr, filterArgs, cons);
-        } else if (LdapURL.hasQueryComponents(name.get(0))) {
-            throw new InvalidNameException(name.toString());
-        } else {
-            return super.search(name, filterExpr, filterArgs, cons);
-        }
-    }
-
-    // Search using the LDAP URL in name.
-    // LDAP URL query components override the search argments.
-    private NamingEnumeration searchUsingURL(String name)
-        throws NamingException {
-
-        LdapURL url = new LdapURL(name);
-
-        ResolveResult res = getRootURLContext(name, myEnv);
-        DirContext ctx = (DirContext)res.getResolvedObj();
-        try {
-            return ctx.search(res.getRemainingName(),
-                              setFilterUsingURL(url),
-                              setSearchControlsUsingURL(url));
-        } finally {
-            ctx.close();
-        }
-    }
-
-    /*
-     * Initialize a String filter using the LDAP URL filter component.
-     * If filter is not present in the URL it is initialized to its default
-     * value as specified in RFC-2255.
-     */
-    private static String setFilterUsingURL(LdapURL url) {
-
-        String filter = url.getFilter();
-
-        if (filter == null) {
-            filter = "(objectClass=*)"; //default value
-        }
-        return filter;
-    }
-
-    /*
-     * Initialize a SearchControls object using LDAP URL query components.
-     * Components not present in the URL are initialized to their default
-     * values as specified in RFC-2255.
-     */
-    private static SearchControls setSearchControlsUsingURL(LdapURL url) {
-
-        SearchControls cons = new SearchControls();
-        String scope = url.getScope();
-        String attributes = url.getAttributes();
-
-        if (scope == null) {
-            cons.setSearchScope(SearchControls.OBJECT_SCOPE); //default value
-        } else {
-            if (scope.equals("sub")) {
-                cons.setSearchScope(SearchControls.SUBTREE_SCOPE);
-            } else if (scope.equals("one")) {
-                cons.setSearchScope(SearchControls.ONELEVEL_SCOPE);
-            } else if (scope.equals("base")) {
-                cons.setSearchScope(SearchControls.OBJECT_SCOPE);
-            }
-        }
-
-        if (attributes == null) {
-            cons.setReturningAttributes(null); //default value
-        } else {
-            StringTokenizer tokens = new StringTokenizer(attributes, ",");
-            int count = tokens.countTokens();
-            String[] attrs = new String[count];
-            for (int i = 0; i < count; i ++) {
-                attrs[i] = tokens.nextToken();
-            }
-            cons.setReturningAttributes(attrs);
-        }
-        return cons;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/url/ldap/ldapURLContextFactory.java b/ojluni/src/main/java/com/sun/jndi/url/ldap/ldapURLContextFactory.java
deleted file mode 100755
index 72094c0..0000000
--- a/ojluni/src/main/java/com/sun/jndi/url/ldap/ldapURLContextFactory.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-package com.sun.jndi.url.ldap;
-
-import java.util.Hashtable;
-import javax.naming.*;
-import javax.naming.directory.DirContext;
-import javax.naming.spi.*;
-import com.sun.jndi.ldap.LdapCtx;
-import com.sun.jndi.ldap.LdapCtxFactory;
-import com.sun.jndi.ldap.LdapURL;
-
-/**
- * An LDAP URL context factory.
- *
- * @author Rosanna Lee
- * @author Scott Seligman
- * @author Vincent Ryan
- */
-
-public class ldapURLContextFactory implements ObjectFactory {
-
-    public Object getObjectInstance(Object urlInfo, Name name, Context nameCtx,
-            Hashtable<?,?> env) throws Exception {
-
-        if (urlInfo == null) {
-            return new ldapURLContext(env);
-        } else {
-            return LdapCtxFactory.getLdapCtxInstance(urlInfo, env);
-        }
-    }
-
-    static ResolveResult getUsingURLIgnoreRootDN(String url, Hashtable env)
-            throws NamingException {
-        LdapURL ldapUrl = new LdapURL(url);
-        DirContext ctx = new LdapCtx("", ldapUrl.getHost(), ldapUrl.getPort(),
-            env, ldapUrl.useSsl());
-        String dn = (ldapUrl.getDN() != null ? ldapUrl.getDN() : "");
-
-        // Represent DN as empty or single-component composite name.
-        CompositeName remaining = new CompositeName();
-        if (!"".equals(dn)) {
-            // if nonempty, add component
-            remaining.add(dn);
-        }
-
-        return new ResolveResult(ctx, remaining);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/url/ldaps/ldapsURLContextFactory.java b/ojluni/src/main/java/com/sun/jndi/url/ldaps/ldapsURLContextFactory.java
deleted file mode 100755
index d3b8a0f..0000000
--- a/ojluni/src/main/java/com/sun/jndi/url/ldaps/ldapsURLContextFactory.java
+++ /dev/null
@@ -1,37 +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.jndi.url.ldaps;
-
-import com.sun.jndi.url.ldap.*;
-
-/**
- * An LDAP URL context factory that creates secure LDAP contexts (using SSL).
- *
- * @author Vincent Ryan
- */
-
-final public class ldapsURLContextFactory extends ldapURLContextFactory {
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/url/rmi/rmiURLContext.java b/ojluni/src/main/java/com/sun/jndi/url/rmi/rmiURLContext.java
deleted file mode 100755
index 2ca9bec..0000000
--- a/ojluni/src/main/java/com/sun/jndi/url/rmi/rmiURLContext.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-package com.sun.jndi.url.rmi;
-
-import java.util.Hashtable;
-import java.rmi.registry.LocateRegistry;
-
-import javax.naming.*;
-import javax.naming.spi.ResolveResult;
-import com.sun.jndi.toolkit.url.GenericURLContext;
-import com.sun.jndi.rmi.registry.RegistryContext;
-
-
-/**
- * An RMI URL context resolves names that are URLs of the form
- * <pre>
- *   rmi://[host][:port][/[object]]
- * or
- *   rmi:[/][object]
- * </pre>
- * If an object is specified, the URL resolves to the named object.
- * Otherwise, the URL resolves to the specified RMI registry.
- *
- * @author Scott Seligman
- */
-public class rmiURLContext extends GenericURLContext {
-
-    public rmiURLContext(Hashtable env) {
-        super(env);
-    }
-
-    /**
-     * Resolves the registry portion of "url" to the corresponding
-     * RMI registry, and returns the atomic object name as the
-     * remaining name.
-     */
-    protected ResolveResult getRootURLContext(String url, Hashtable env)
-            throws NamingException
-    {
-        if (!url.startsWith("rmi:")) {
-            throw (new IllegalArgumentException(
-                    "rmiURLContext: name is not an RMI URL: " + url));
-        }
-
-        // Parse the URL.
-
-        String host = null;
-        int port = -1;
-        String objName = null;
-
-        int i = 4;              // index into url, following the "rmi:"
-
-        if (url.startsWith("//", i)) {          // parse "//host:port"
-            i += 2;                             // skip past "//"
-            int slash = url.indexOf('/', i);
-            if (slash < 0) {
-                slash = url.length();
-            }
-            if (url.startsWith("[", i)) {               // at IPv6 literal
-                int brac = url.indexOf(']', i + 1);
-                if (brac < 0 || brac > slash) {
-                    throw new IllegalArgumentException(
-                        "rmiURLContext: name is an Invalid URL: " + url);
-                }
-                host = url.substring(i, brac + 1);      // include brackets
-                i = brac + 1;                           // skip past "[...]"
-            } else {                                    // at host name or IPv4
-                int colon = url.indexOf(':', i);
-                int hostEnd = (colon < 0 || colon > slash)
-                    ? slash
-                    : colon;
-                if (i < hostEnd) {
-                    host = url.substring(i, hostEnd);
-                }
-                i = hostEnd;                            // skip past host
-            }
-            if ((i + 1 < slash)) {
-                if ( url.startsWith(":", i)) {       // parse port
-                    i++;                             // skip past ":"
-                    port = Integer.parseInt(url.substring(i, slash));
-                } else {
-                    throw new IllegalArgumentException(
-                        "rmiURLContext: name is an Invalid URL: " + url);
-                }
-            }
-            i = slash;
-        }
-        if ("".equals(host)) {
-            host = null;
-        }
-        if (url.startsWith("/", i)) {           // skip "/" before object name
-            i++;
-        }
-        if (i < url.length()) {
-            objName = url.substring(i);
-        }
-
-        // Represent object name as empty or single-component composite name.
-        CompositeName remaining = new CompositeName();
-        if (objName != null) {
-            remaining.add(objName);
-        }
-
-        // Debug
-        //System.out.println("host=" + host + " port=" + port +
-        //                 " objName=" + remaining.toString() + "\n");
-
-        // Create a registry context.
-        Context regCtx = new RegistryContext(host, port, env);
-
-        return (new ResolveResult(regCtx, remaining));
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/jndi/url/rmi/rmiURLContextFactory.java b/ojluni/src/main/java/com/sun/jndi/url/rmi/rmiURLContextFactory.java
deleted file mode 100755
index cb137ae..0000000
--- a/ojluni/src/main/java/com/sun/jndi/url/rmi/rmiURLContextFactory.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-package com.sun.jndi.url.rmi;
-
-
-import java.util.Hashtable;
-
-import javax.naming.*;
-import javax.naming.spi.ObjectFactory;
-
-
-/**
- * An RMI URL context factory creates contexts that can resolve names
- * that are RMI URLs as defined by rmiURLContext.
- * In addition, if given a specific RMI URL (or an array of them), the
- * factory will resolve all the way to the named registry or object.
- *
- * @author Scott Seligman
- *
- * @see rmiURLContext
- */
-
-
-public class rmiURLContextFactory implements ObjectFactory {
-
-    public Object getObjectInstance(Object urlInfo, Name name,
-                                    Context nameCtx, Hashtable<?,?> env)
-            throws NamingException
-    {
-        if (urlInfo == null) {
-            return (new rmiURLContext(env));
-        } else if (urlInfo instanceof String) {
-            return getUsingURL((String)urlInfo, env);
-        } else if (urlInfo instanceof String[]) {
-            return getUsingURLs((String[])urlInfo, env);
-        } else {
-            throw (new ConfigurationException(
-                    "rmiURLContextFactory.getObjectInstance: " +
-                    "argument must be an RMI URL String or an array of them"));
-        }
-    }
-
-    private static Object getUsingURL(String url, Hashtable env)
-            throws NamingException
-    {
-        rmiURLContext urlCtx = new rmiURLContext(env);
-        try {
-            return urlCtx.lookup(url);
-        } finally {
-            urlCtx.close();
-        }
-    }
-
-    /*
-     * Try each URL until lookup() succeeds for one of them.
-     * If all URLs fail, throw one of the exceptions arbitrarily.
-     * Not pretty, but potentially more informative than returning null.
-     */
-    private static Object getUsingURLs(String[] urls, Hashtable env)
-            throws NamingException
-    {
-        if (urls.length == 0) {
-            throw (new ConfigurationException(
-                    "rmiURLContextFactory: empty URL array"));
-        }
-        rmiURLContext urlCtx = new rmiURLContext(env);
-        try {
-            NamingException ne = null;
-            for (int i = 0; i < urls.length; i++) {
-                try {
-                    return urlCtx.lookup(urls[i]);
-                } catch (NamingException e) {
-                    ne = e;
-                }
-            }
-            throw ne;
-        } finally {
-            urlCtx.close();
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/management/GarbageCollectionNotificationInfo.java b/ojluni/src/main/java/com/sun/management/GarbageCollectionNotificationInfo.java
deleted file mode 100755
index 64fb94b..0000000
--- a/ojluni/src/main/java/com/sun/management/GarbageCollectionNotificationInfo.java
+++ /dev/null
@@ -1,237 +0,0 @@
-/*
- * Copyright (c) 2011, 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.management;
-
-import javax.management.Notification;
-import javax.management.openmbean.CompositeData;
-import javax.management.openmbean.CompositeDataView;
-import javax.management.openmbean.CompositeType;
-import java.util.Collection;
-import java.util.Collections;
-import sun.management.GarbageCollectionNotifInfoCompositeData;
-
-/**
- * The information about a garbage collection
- *
- * <p>
- * A garbage collection notification is emitted by {@link GarbageCollectorMXBean}
- * when the Java virtual machine completes a garbage collection action
- * The notification emitted will contain the garbage collection notification
- * information about the status of the memory:
- * <u1>
- *   <li>The name of the garbage collector used perform the collection.</li>
- *   <li>The action performed by the garbage collector.</li>
- *   <li>The cause of the garbage collection action.</li>
- *   <li>A {@link GcInfo} object containing some statistics about the GC cycle
-          (start time, end time) and the memory usage before and after
-          the GC cycle.</li>
- * </u1>
- *
- * <p>
- * A {@link CompositeData CompositeData} representing
- * the {@code GarbageCollectionNotificationInfo} object
- * is stored in the
- * {@linkplain javax.management.Notification#setUserData userdata}
- * of a {@linkplain javax.management.Notification notification}.
- * The {@link #from from} method is provided to convert from
- * a {@code CompositeData} to a {@code GarbageCollectionNotificationInfo}
- * object. For example:
- *
- * <blockquote><pre>
- *      Notification notif;
- *
- *      // receive the notification emitted by a GarbageCollectorMXBean and set to notif
- *      ...
- *
- *      String notifType = notif.getType();
- *      if (notifType.equals(GarbageCollectionNotificationInfo.GARBAGE_COLLECTION_NOTIFICATION)) {
- *          // retrieve the garbage collection notification information
- *          CompositeData cd = (CompositeData) notif.getUserData();
- *          GarbageCollectionNotificationInfo info = GarbageCollectionNotificationInfo.from(cd);
- *          ....
- *      }
- * </pre></blockquote>
- *
- * <p>
- * The type of the notification emitted by a {@code GarbageCollectorMXBean} is:
- * <ul>
- *   <li>A {@linkplain #GARBAGE_COLLECTION_NOTIFICATION garbage collection notification}.
- *       <br>Used by every notification emitted by the garbage collector, the details about
- *             the notification are provided in the {@linkplain #getGcAction action} String
- *       <p></li>
- * </ul>
- **/
-
-public class GarbageCollectionNotificationInfo implements  CompositeDataView {
-
-    private final String gcName;
-    private final String gcAction;
-    private final String gcCause;
-    private final GcInfo gcInfo;
-    private final CompositeData cdata;
-
-    /**
-     * Notification type denoting that
-     * the Java virtual machine has completed a garbage collection cycle.
-     * This notification is emitted by a {@link GarbageCollectorMXBean}.
-     * The value of this notification type is
-     * {@code com.sun.management.gc.notification}.
-     */
-    public static final String GARBAGE_COLLECTION_NOTIFICATION =
-        "com.sun.management.gc.notification";
-
-    /**
-     * Constructs a {@code GarbageCollectionNotificationInfo} object.
-     *
-     * @param gcName The name of the garbage collector used to perform the collection
-     * @param gcAction The name of the action performed by the garbage collector
-     * @param gcCause The cause the garbage collection action
-     * @param gcInfo  a GcInfo object providing statistics about the GC cycle
-     */
-    public GarbageCollectionNotificationInfo(String gcName,
-                                             String gcAction,
-                                             String gcCause,
-                                             GcInfo gcInfo)  {
-        if (gcName == null) {
-            throw new NullPointerException("Null gcName");
-        }
-        if (gcAction == null) {
-            throw new NullPointerException("Null gcAction");
-        }
-        if (gcCause == null) {
-            throw new NullPointerException("Null gcCause");
-        }
-        this.gcName = gcName;
-        this.gcAction = gcAction;
-        this.gcCause = gcCause;
-        this.gcInfo = gcInfo;
-        this.cdata = new GarbageCollectionNotifInfoCompositeData(this);
-    }
-
-    GarbageCollectionNotificationInfo(CompositeData cd) {
-        GarbageCollectionNotifInfoCompositeData.validateCompositeData(cd);
-
-        this.gcName = GarbageCollectionNotifInfoCompositeData.getGcName(cd);
-        this.gcAction = GarbageCollectionNotifInfoCompositeData.getGcAction(cd);
-        this.gcCause = GarbageCollectionNotifInfoCompositeData.getGcCause(cd);
-        this.gcInfo = GarbageCollectionNotifInfoCompositeData.getGcInfo(cd);
-        this.cdata = cd;
-    }
-
-    /**
-     * Returns the name of the garbage collector used to perform the collection
-     *
-     * @return the name of the garbage collector used to perform the collection
-     */
-    public String getGcName() {
-        return gcName;
-    }
-
-    /**
-     * Returns the action of the performed by the garbage collector
-     *
-     * @return the the action of the performed by the garbage collector
-     */
-    public String getGcAction() {
-        return gcAction;
-    }
-
-    /**
-     * Returns the cause  the garbage collection
-     *
-     * @return the the cause  the garbage collection
-     */
-    public String getGcCause() {
-        return gcCause;
-    }
-
-    /**
-     * Returns the GC information related to the last garbage collection
-     *
-     * @return the GC information related to the
-     * last garbage collection
-     */
-    public GcInfo getGcInfo() {
-        return gcInfo;
-    }
-
-    /**
-     * Returns a {@code GarbageCollectionNotificationInfo} object represented by the
-     * given {@code CompositeData}.
-     * The given {@code CompositeData} must contain
-     * the following attributes:
-     * <blockquote>
-     * <table border>
-     * <tr>
-     *   <th align=left>Attribute Name</th>
-     *   <th align=left>Type</th>
-     * </tr>
-     * <tr>
-     *   <td>gcName</td>
-     *   <td>{@code java.lang.String}</td>
-     * </tr>
-     * <tr>
-     *   <td>gcAction</td>
-     *   <td>{@code java.lang.String}</td>
-     * </tr>
-     * <tr>
-     *   <td>gcCause</td>
-     *   <td>{@code java.lang.String}</td>
-     * </tr>
-     * <tr>
-     *   <td>gcInfo</td>
-     *   <td>{@code javax.management.openmbean.CompositeData}</td>
-     * </tr>
-     * </table>
-     * </blockquote>
-     *
-     * @param cd {@code CompositeData} representing a
-     *           {@code GarbageCollectionNotificationInfo}
-     *
-     * @throws IllegalArgumentException if {@code cd} does not
-     *   represent a {@code GarbaageCollectionNotificationInfo} object.
-     *
-     * @return a {@code GarbageCollectionNotificationInfo} object represented
-     *         by {@code cd} if {@code cd} is not {@code null};
-     *         {@code null} otherwise.
-     */
-    public static GarbageCollectionNotificationInfo from(CompositeData cd) {
-        if (cd == null) {
-            return null;
-        }
-
-        if (cd instanceof GarbageCollectionNotifInfoCompositeData) {
-            return ((GarbageCollectionNotifInfoCompositeData) cd).getGarbageCollectionNotifInfo();
-        } else {
-            return new GarbageCollectionNotificationInfo(cd);
-        }
-    }
-
-    public CompositeData toCompositeData(CompositeType ct) {
-        return cdata;
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/management/GarbageCollectorMXBean.java b/ojluni/src/main/java/com/sun/management/GarbageCollectorMXBean.java
deleted file mode 100755
index ad9335f..0000000
--- a/ojluni/src/main/java/com/sun/management/GarbageCollectorMXBean.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-package com.sun.management;
-import javax.management.openmbean.CompositeData;
-import javax.management.openmbean.CompositeType;
-
-/**
- * Platform-specific management interface for a garbage collector
- * which performs collections in cycles.
- *
- * <p> This platform extension is only available to the garbage
- * collection implementation that supports this extension.
- *
- * @author  Mandy Chung
- * @since   1.5
- */
-public interface GarbageCollectorMXBean
-    extends java.lang.management.GarbageCollectorMXBean {
-
-    /**
-     * Returns the GC information about the most recent GC.
-     * This method returns a {@link GcInfo}.
-     * If no GC information is available, <tt>null</tt> is returned.
-     * The collector-specific attributes, if any, can be obtained
-     * via the {@link CompositeData CompositeData} interface.
-     * <p>
-     * <b>MBeanServer access:</b>
-     * The mapped type of <tt>GcInfo</tt> is <tt>CompositeData</tt>
-     * with attributes specified in {@link GcInfo#from GcInfo}.
-     *
-     * @return a <tt>GcInfo</tt> object representing
-     * the most GC information; or <tt>null</tt> if no GC
-     * information available.
-     */
-    public GcInfo getLastGcInfo();
-}
diff --git a/ojluni/src/main/java/com/sun/management/GcInfo.java b/ojluni/src/main/java/com/sun/management/GcInfo.java
deleted file mode 100755
index 5fa897c..0000000
--- a/ojluni/src/main/java/com/sun/management/GcInfo.java
+++ /dev/null
@@ -1,288 +0,0 @@
-/*
- * Copyright (c) 2003, 2006, 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.management;
-
-import java.lang.management.MemoryUsage;
-import javax.management.openmbean.CompositeData;
-import javax.management.openmbean.CompositeDataView;
-import javax.management.openmbean.CompositeType;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.List;
-import sun.management.GcInfoCompositeData;
-import sun.management.GcInfoBuilder;
-
-/**
- * Garbage collection information.  It contains the following
- * information for one garbage collection as well as GC-specific
- * attributes:
- * <blockquote>
- * <ul>
- *   <li>Start time</li>
- *   <li>End time</li>
- *   <li>Duration</li>
- *   <li>Memory usage before the collection starts</li>
- *   <li>Memory usage after the collection ends</li>
- * </ul>
- * </blockquote>
- *
- * <p>
- * <tt>GcInfo</tt> is a {@link CompositeData CompositeData}
- * The GC-specific attributes can be obtained via the CompositeData
- * interface.  This is a historical relic, and other classes should
- * not copy this pattern.  Use {@link CompositeDataView} instead.
- *
- * <h4>MXBean Mapping</h4>
- * <tt>GcInfo</tt> is mapped to a {@link CompositeData CompositeData}
- * with attributes as specified in the {@link #from from} method.
- *
- * @author  Mandy Chung
- * @since   1.5
- */
-public class GcInfo implements CompositeData, CompositeDataView {
-    private final long index;
-    private final long startTime;
-    private final long endTime;
-    private final Map<String, MemoryUsage> usageBeforeGc;
-    private final Map<String, MemoryUsage> usageAfterGc;
-    private final Object[] extAttributes;
-    private final CompositeData cdata;
-    private final GcInfoBuilder builder;
-
-    private GcInfo(GcInfoBuilder builder,
-                   long index, long startTime, long endTime,
-                   MemoryUsage[] muBeforeGc,
-                   MemoryUsage[] muAfterGc,
-                   Object[] extAttributes) {
-        this.builder       = builder;
-        this.index         = index;
-        this.startTime     = startTime;
-        this.endTime       = endTime;
-        String[] poolNames = builder.getPoolNames();
-        this.usageBeforeGc = new HashMap<String, MemoryUsage>(poolNames.length);
-        this.usageAfterGc = new HashMap<String, MemoryUsage>(poolNames.length);
-        for (int i = 0; i < poolNames.length; i++) {
-            this.usageBeforeGc.put(poolNames[i],  muBeforeGc[i]);
-            this.usageAfterGc.put(poolNames[i],  muAfterGc[i]);
-        }
-        this.extAttributes = extAttributes;
-        this.cdata = new GcInfoCompositeData(this, builder, extAttributes);
-    }
-
-    private GcInfo(CompositeData cd) {
-        GcInfoCompositeData.validateCompositeData(cd);
-
-        this.index         = GcInfoCompositeData.getId(cd);
-        this.startTime     = GcInfoCompositeData.getStartTime(cd);
-        this.endTime       = GcInfoCompositeData.getEndTime(cd);
-        this.usageBeforeGc = GcInfoCompositeData.getMemoryUsageBeforeGc(cd);
-        this.usageAfterGc  = GcInfoCompositeData.getMemoryUsageAfterGc(cd);
-        this.extAttributes = null;
-        this.builder       = null;
-        this.cdata         = cd;
-    }
-
-    /**
-     * Returns the identifier of this garbage collection which is
-     * the number of collections that this collector has done.
-     *
-     * @return the identifier of this garbage collection which is
-     * the number of collections that this collector has done.
-     */
-    public long getId() {
-        return index;
-    }
-
-    /**
-     * Returns the start time of this GC in milliseconds
-     * since the Java virtual machine was started.
-     *
-     * @return the start time of this GC.
-     */
-    public long getStartTime() {
-        return startTime;
-    }
-
-    /**
-     * Returns the end time of this GC in milliseconds
-     * since the Java virtual machine was started.
-     *
-     * @return the end time of this GC.
-     */
-    public long getEndTime() {
-        return endTime;
-    }
-
-    /**
-     * Returns the elapsed time of this GC in milliseconds.
-     *
-     * @return the elapsed time of this GC in milliseconds.
-     */
-    public long getDuration() {
-        return endTime - startTime;
-    }
-
-    /**
-     * Returns the memory usage of all memory pools
-     * at the beginning of this GC.
-     * This method returns
-     * a <tt>Map</tt> of the name of a memory pool
-     * to the memory usage of the corresponding
-     * memory pool before GC starts.
-     *
-     * @return a <tt>Map</tt> of memory pool names to the memory
-     * usage of a memory pool before GC starts.
-     */
-    public Map<String, MemoryUsage> getMemoryUsageBeforeGc() {
-        return Collections.unmodifiableMap(usageBeforeGc);
-    }
-
-    /**
-     * Returns the memory usage of all memory pools
-     * at the end of this GC.
-     * This method returns
-     * a <tt>Map</tt> of the name of a memory pool
-     * to the memory usage of the corresponding
-     * memory pool when GC finishes.
-     *
-     * @return a <tt>Map</tt> of memory pool names to the memory
-     * usage of a memory pool when GC finishes.
-     */
-    public Map<String, MemoryUsage> getMemoryUsageAfterGc() {
-        return Collections.unmodifiableMap(usageAfterGc);
-    }
-
-   /**
-     * Returns a <tt>GcInfo</tt> object represented by the
-     * given <tt>CompositeData</tt>. The given
-     * <tt>CompositeData</tt> must contain
-     * all the following attributes:
-     *
-     * <p>
-     * <blockquote>
-     * <table border>
-     * <tr>
-     *   <th align=left>Attribute Name</th>
-     *   <th align=left>Type</th>
-     * </tr>
-     * <tr>
-     *   <td>index</td>
-     *   <td><tt>java.lang.Long</tt></td>
-     * </tr>
-     * <tr>
-     *   <td>startTime</td>
-     *   <td><tt>java.lang.Long</tt></td>
-     * </tr>
-     * <tr>
-     *   <td>endTime</td>
-     *   <td><tt>java.lang.Long</tt></td>
-     * </tr>
-     * <tr>
-     *   <td>memoryUsageBeforeGc</td>
-     *   <td><tt>javax.management.openmbean.TabularData</tt></td>
-     * </tr>
-     * <tr>
-     *   <td>memoryUsageAfterGc</td>
-     *   <td><tt>javax.management.openmbean.TabularData</tt></td>
-     * </tr>
-     * </table>
-     * </blockquote>
-     *
-     * @throws IllegalArgumentException if <tt>cd</tt> does not
-     *   represent a <tt>GcInfo</tt> object with the attributes
-     *   described above.
-     *
-     * @return a <tt>GcInfo</tt> object represented by <tt>cd</tt>
-     * if <tt>cd</tt> is not <tt>null</tt>; <tt>null</tt> otherwise.
-     */
-    public static GcInfo from(CompositeData cd) {
-        if (cd == null) {
-            return null;
-        }
-
-        if (cd instanceof GcInfoCompositeData) {
-            return ((GcInfoCompositeData) cd).getGcInfo();
-        } else {
-            return new GcInfo(cd);
-        }
-
-    }
-
-    // Implementation of the CompositeData interface
-    public boolean containsKey(String key) {
-        return cdata.containsKey(key);
-    }
-
-    public boolean containsValue(Object value) {
-        return cdata.containsValue(value);
-    }
-
-    public boolean equals(Object obj) {
-        return cdata.equals(obj);
-    }
-
-    public Object get(String key) {
-        return cdata.get(key);
-    }
-
-    public Object[] getAll(String[] keys) {
-        return cdata.getAll(keys);
-    }
-
-    public CompositeType getCompositeType() {
-        return cdata.getCompositeType();
-    }
-
-    public int hashCode() {
-        return cdata.hashCode();
-    }
-
-    public String toString() {
-        return cdata.toString();
-    }
-
-    public Collection values() {
-        return cdata.values();
-    }
-
-    /**
-     * <p>Return the {@code CompositeData} representation of this
-     * {@code GcInfo}, including any GC-specific attributes.  The
-     * returned value will have at least all the attributes described
-     * in the {@link #from(CompositeData) from} method, plus optionally
-     * other attributes.
-     *
-     * @param ct the {@code CompositeType} that the caller expects.
-     * This parameter is ignored and can be null.
-     *
-     * @return the {@code CompositeData} representation.
-     */
-    public CompositeData toCompositeData(CompositeType ct) {
-        return cdata;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/management/HotSpotDiagnosticMXBean.java b/ojluni/src/main/java/com/sun/management/HotSpotDiagnosticMXBean.java
deleted file mode 100755
index 2fe8835..0000000
--- a/ojluni/src/main/java/com/sun/management/HotSpotDiagnosticMXBean.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * Copyright (c) 2005, 2012, 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.management;
-
-import java.util.List;
-import java.lang.management.PlatformManagedObject;
-
-/**
- * Diagnostic management interface for the HotSpot Virtual Machine.
- *
- * <p>The diagnostic MBean is registered to the platform MBeanServer
- * as are other platform MBeans.
- *
- * <p>The <tt>ObjectName</tt> for uniquely identifying the diagnostic
- * MXBean within an MBeanServer is:
- * <blockquote>
- *    <tt>com.sun.management:type=HotSpotDiagnostic</tt>
- * </blockquote>
-.*
- * It can be obtained by calling the
- * {@link PlatformManagedObject#getObjectName} method.
- *
- * All methods throw a {@code NullPointerException} if any input argument is
- * {@code null} unless it's stated otherwise.
- *
- * @see ManagementFactory#getPlatformMXBeans(Class)
- */
-public interface HotSpotDiagnosticMXBean extends PlatformManagedObject {
-    /**
-     * Dumps the heap to the <tt>outputFile</tt> file in the same
-     * format as the hprof heap dump.
-     * <p>
-     * If this method is called remotely from another process,
-     * the heap dump output is written to a file named <tt>outputFile</tt>
-     * on the machine where the target VM is running.  If outputFile is
-     * a relative path, it is relative to the working directory where
-     * the target VM was started.
-     *
-     * @param  outputFile the system-dependent filename
-     * @param  live if <tt>true</tt> dump only <i>live</i> objects
-     *         i.e. objects that are reachable from others
-     * @throws IOException if the <tt>outputFile</tt>
-     *                     cannot be created, opened, or written to.
-     * @throws UnsupportedOperationException if this operation is not supported.
-     * @throws NullPointerException if <tt>outputFile</tt> is <tt>null</tt>.
-     */
-    public void dumpHeap(String outputFile, boolean live) throws java.io.IOException;
-
-    /**
-     * Returns a list of <tt>VMOption</tt> objects for all diagnostic options.
-     * A diagnostic option is a {@link VMOption#isWriteable writeable}
-     * VM option that can be set dynamically mainly for troubleshooting
-     * and diagnosis.
-     *
-     * @return a list of <tt>VMOption</tt> objects for all diagnostic options.
-     */
-    public java.util.List<VMOption> getDiagnosticOptions();
-
-    /**
-     * Returns a <tt>VMOption</tt> object for a VM option of the given
-     * name.
-     *
-     * @return a <tt>VMOption</tt> object for a VM option of the given name.
-     * @throws NullPointerException if name is <tt>null</tt>.
-     * @throws IllegalArgumentException if a VM option of the given name
-     *                                     does not exist.
-     */
-    public VMOption getVMOption(String name);
-
-    /**
-     * Sets a VM option of the given name to the specified value.
-     * The new value will be reflected in a new <tt>VMOption</tt>
-     * object returned by the {@link #getVMOption} method or
-     * the {@link #getDiagnosticOptions} method.  This method does
-     * not change the value of this <tt>VMOption</tt> object.
-     *
-     * @param name Name of a VM option
-     * @param value New value of the VM option to be set
-     *
-     * @throws IllegalArgumentException if the VM option of the given name
-     *                                     does not exist.
-     * @throws IllegalArgumentException if the new value is invalid.
-     * @throws IllegalArgumentException if the VM option is not writeable.
-     * @throws NullPointerException if name or value is <tt>null</tt>.
-     *
-     * @throws  java.lang.SecurityException
-     *     if a security manager exists and the caller does not have
-     *     ManagementPermission("control").
-     */
-    public void setVMOption(String name, String value);
-}
diff --git a/ojluni/src/main/java/com/sun/management/OSMBeanFactory.java b/ojluni/src/main/java/com/sun/management/OSMBeanFactory.java
deleted file mode 100755
index d73d4bd..0000000
--- a/ojluni/src/main/java/com/sun/management/OSMBeanFactory.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-package com.sun.management;
-
-import java.lang.management.OperatingSystemMXBean;
-import sun.management.VMManagement;
-
-/**
- * Operating system dependent MBean factory.
- * <p>
- * <b>WARNING:</b> While this class is public, it should not be treated as
- * public API and its API may change in incompatable ways between dot dot
- * releases and even patch releases. You should not rely on this class.
- */
-public class OSMBeanFactory {
-    /* static factory class */
-    private OSMBeanFactory() {};
-
-    private static UnixOperatingSystem osMBean = null;
-
-    public static synchronized OperatingSystemMXBean
-        getOperatingSystemMXBean(VMManagement jvm) {
-
-        if (osMBean == null) {
-            osMBean = new UnixOperatingSystem(jvm);
-        }
-        return (OperatingSystemMXBean) osMBean;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/management/OperatingSystemMXBean.java b/ojluni/src/main/java/com/sun/management/OperatingSystemMXBean.java
deleted file mode 100755
index 965241b..0000000
--- a/ojluni/src/main/java/com/sun/management/OperatingSystemMXBean.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * Copyright (c) 2003, 2006, 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.management;
-
-/**
- * Platform-specific management interface for the operating system
- * on which the Java virtual machine is running.
- *
- * <p>
- * The <tt>OperatingSystemMXBean</tt> object returned by
- * {@link java.lang.management.ManagementFactory#getOperatingSystemMXBean()}
- * is an instance of the implementation class of this interface
- * or {@link UnixOperatingSystemMXBean} interface depending on
- * its underlying operating system.
- *
- * @author  Mandy Chung
- * @since   1.5
- */
-public interface OperatingSystemMXBean extends
-    java.lang.management.OperatingSystemMXBean {
-
-    /**
-     * Returns the amount of virtual memory that is guaranteed to
-     * be available to the running process in bytes,
-     * or <tt>-1</tt> if this operation is not supported.
-     *
-     * @return the amount of virtual memory that is guaranteed to
-     * be available to the running process in bytes,
-     * or <tt>-1</tt> if this operation is not supported.
-     */
-    public long getCommittedVirtualMemorySize();
-
-    /**
-     * Returns the total amount of swap space in bytes.
-     *
-     * @return the total amount of swap space in bytes.
-     */
-    public long getTotalSwapSpaceSize();
-
-    /**
-     * Returns the amount of free swap space in bytes.
-     *
-     * @return the amount of free swap space in bytes.
-     */
-    public long getFreeSwapSpaceSize();
-
-    /**
-     * Returns the CPU time used by the process on which the Java
-     * virtual machine is running in nanoseconds.  The returned value
-     * is of nanoseconds precision but not necessarily nanoseconds
-     * accuracy.  This method returns <tt>-1</tt> if the
-     * the platform does not support this operation.
-     *
-     * @return the CPU time used by the process in nanoseconds,
-     * or <tt>-1</tt> if this operation is not supported.
-     */
-    public long getProcessCpuTime();
-
-    /**
-     * Returns the amount of free physical memory in bytes.
-     *
-     * @return the amount of free physical memory in bytes.
-     */
-    public long getFreePhysicalMemorySize();
-
-    /**
-     * Returns the total amount of physical memory in bytes.
-     *
-     * @return the total amount of physical memory in  bytes.
-     */
-    public long getTotalPhysicalMemorySize();
-
-    /**
-     * Returns the "recent cpu usage" for the whole system. This value is a
-     * double in the [0.0,1.0] interval. A value of 0.0 means that all CPUs
-     * were idle during the recent period of time observed, while a value
-     * of 1.0 means that all CPUs were actively running 100% of the time
-     * during the recent period being observed. All values betweens 0.0 and
-     * 1.0 are possible depending of the activities going on in the system.
-     * If the system recent cpu usage is not available, the method returns a
-     * negative value.
-     *
-     * @return the "recent cpu usage" for the whole system; a negative
-     * value if not available.
-     * @since   1.7
-     */
-    public double getSystemCpuLoad();
-
-    /**
-     * Returns the "recent cpu usage" for the Java Virtual Machine process.
-     * This value is a double in the [0.0,1.0] interval. A value of 0.0 means
-     * that none of the CPUs were running threads from the JVM process during
-     * the recent period of time observed, while a value of 1.0 means that all
-     * CPUs were actively running threads from the JVM 100% of the time
-     * during the recent period being observed. Threads from the JVM include
-     * the application threads as well as the JVM internal threads. All values
-     * betweens 0.0 and 1.0 are possible depending of the activities going on
-     * in the JVM process and the whole system. If the Java Virtual Machine
-     * recent CPU usage is not available, the method returns a negative value.
-     *
-     * @return the "recent cpu usage" for the Java Virtual Machine process;
-     * a negative value if not available.
-     * @since   1.7
-     */
-    public double getProcessCpuLoad();
-
-}
diff --git a/ojluni/src/main/java/com/sun/management/ThreadMXBean.java b/ojluni/src/main/java/com/sun/management/ThreadMXBean.java
deleted file mode 100755
index f5a9a5b..0000000
--- a/ojluni/src/main/java/com/sun/management/ThreadMXBean.java
+++ /dev/null
@@ -1,221 +0,0 @@
-/*
- * Copyright (c) 2011, 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.management;
-
-import java.util.Map;
-
-/**
- * Platform-specific management interface for the thread system
- * of the Java virtual machine.
- * <p>
- * This platform extension is only available to a thread
- * implementation that supports this extension.
- *
- * @author  Paul Hohensee
- * @since   6u25
- */
-
-public interface ThreadMXBean extends java.lang.management.ThreadMXBean {
-    /**
-     * Returns the total CPU time for each thread whose ID is
-     * in the input array {@code ids} in nanoseconds.
-     * The returned values are of nanoseconds precision but
-     * not necessarily nanoseconds accuracy.
-     * <p>
-     * This method is equivalent to calling the
-     * {@link ThreadMXBean#getThreadCpuTime(long)}
-     * method for each thread ID in the input array {@code ids} and setting the
-     * returned value in the corresponding element of the returned array.
-     *
-     * @param ids an array of thread IDs.
-     * @return an array of long values, each of which is the amount of CPU
-     * time the thread whose ID is in the corresponding element of the input
-     * array of IDs has used,
-     * if the thread of a specified ID exists, the thread is alive,
-     * and CPU time measurement is enabled;
-     * {@code -1} otherwise.
-     *
-     * @throws NullPointerException if {@code ids} is {@code null}
-     * @throws IllegalArgumentException if any element in the input array
-     *         {@code ids} is {@code <=} {@code 0}.
-     * @throws java.lang.UnsupportedOperationException if the Java
-     *         virtual machine implementation does not support CPU time
-     *         measurement.
-     *
-     * @see ThreadMXBean#getThreadCpuTime(long)
-     * @see #getThreadUserTime
-     * @see ThreadMXBean#isThreadCpuTimeSupported
-     * @see ThreadMXBean#isThreadCpuTimeEnabled
-     * @see ThreadMXBean#setThreadCpuTimeEnabled
-     */
-    public long[] getThreadCpuTime(long[] ids);
-
-    /**
-     * Returns the CPU time that each thread whose ID is in the input array
-     * {@code ids} has executed in user mode in nanoseconds.
-     * The returned values are of nanoseconds precision but
-     * not necessarily nanoseconds accuracy.
-     * <p>
-     * This method is equivalent to calling the
-     * {@link ThreadMXBean#getThreadUserTime(long)}
-     * method for each thread ID in the input array {@code ids} and setting the
-     * returned value in the corresponding element of the returned array.
-     *
-     * @param ids an array of thread IDs.
-     * @return an array of long values, each of which is the amount of user
-     * mode CPU time the thread whose ID is in the corresponding element of
-     * the input array of IDs has used,
-     * if the thread of a specified ID exists, the thread is alive,
-     * and CPU time measurement is enabled;
-     * {@code -1} otherwise.
-     *
-     * @throws NullPointerException if {@code ids} is {@code null}
-     * @throws IllegalArgumentException if any element in the input array
-     *         {@code ids} is {@code <=} {@code 0}.
-     * @throws java.lang.UnsupportedOperationException if the Java
-     *         virtual machine implementation does not support CPU time
-     *         measurement.
-     *
-     * @see ThreadMXBean#getThreadUserTime(long)
-     * @see #getThreadCpuTime
-     * @see ThreadMXBean#isThreadCpuTimeSupported
-     * @see ThreadMXBean#isThreadCpuTimeEnabled
-     * @see ThreadMXBean#setThreadCpuTimeEnabled
-     */
-    public long[] getThreadUserTime(long[] ids);
-
-    /**
-     * Returns an approximation of the total amount of memory, in bytes,
-     * allocated in heap memory for the thread of the specified ID.
-     * The returned value is an approximation because some Java virtual machine
-     * implementations may use object allocation mechanisms that result in a
-     * delay between the time an object is allocated and the time its size is
-     * recorded.
-     * <p>
-     * If the thread of the specified ID is not alive or does not exist,
-     * this method returns {@code -1}. If thread memory allocation measurement
-     * is disabled, this method returns {@code -1}.
-     * A thread is alive if it has been started and has not yet died.
-     * <p>
-     * If thread memory allocation measurement is enabled after the thread has
-     * started, the Java virtual machine implementation may choose any time up
-     * to and including the time that the capability is enabled as the point
-     * where thread memory allocation measurement starts.
-     *
-     * @param id the thread ID of a thread
-     * @return an approximation of the total memory allocated, in bytes, in
-     * heap memory for a thread of the specified ID
-     * if the thread of the specified ID exists, the thread is alive,
-     * and thread memory allocation measurement is enabled;
-     * {@code -1} otherwise.
-     *
-     * @throws IllegalArgumentException if {@code id} {@code <=} {@code 0}.
-     * @throws java.lang.UnsupportedOperationException if the Java virtual
-     *         machine implementation does not support thread memory allocation
-     *         measurement.
-     *
-     * @see #isThreadAllocatedMemorySupported
-     * @see #isThreadAllocatedMemoryEnabled
-     * @see #setThreadAllocatedMemoryEnabled
-     */
-    public long getThreadAllocatedBytes(long id);
-
-    /**
-     * Returns an approximation of the total amount of memory, in bytes,
-     * allocated in heap memory for each thread whose ID is in the input
-     * array {@code ids}.
-     * The returned values are approximations because some Java virtual machine
-     * implementations may use object allocation mechanisms that result in a
-     * delay between the time an object is allocated and the time its size is
-     * recorded.
-     * <p>
-     * This method is equivalent to calling the
-     * {@link #getThreadAllocatedBytes(long)}
-     * method for each thread ID in the input array {@code ids} and setting the
-     * returned value in the corresponding element of the returned array.
-     *
-     * @param ids an array of thread IDs.
-     * @return an array of long values, each of which is an approximation of
-     * the total memory allocated, in bytes, in heap memory for the thread
-     * whose ID is in the corresponding element of the input array of IDs.
-     *
-     * @throws NullPointerException if {@code ids} is {@code null}
-     * @throws IllegalArgumentException if any element in the input array
-     *         {@code ids} is {@code <=} {@code 0}.
-     * @throws java.lang.UnsupportedOperationException if the Java virtual
-     *         machine implementation does not support thread memory allocation
-     *         measurement.
-     *
-     * @see #getThreadAllocatedBytes(long)
-     * @see #isThreadAllocatedMemorySupported
-     * @see #isThreadAllocatedMemoryEnabled
-     * @see #setThreadAllocatedMemoryEnabled
-     */
-    public long[] getThreadAllocatedBytes(long[] ids);
-
-    /**
-     * Tests if the Java virtual machine implementation supports thread memory
-     * allocation measurement.
-     *
-     * @return
-     *   {@code true}
-     *     if the Java virtual machine implementation supports thread memory
-     *     allocation measurement;
-     *   {@code false} otherwise.
-     */
-    public boolean isThreadAllocatedMemorySupported();
-
-    /**
-     * Tests if thread memory allocation measurement is enabled.
-     *
-     * @return {@code true} if thread memory allocation measurement is enabled;
-     *         {@code false} otherwise.
-     *
-     * @throws java.lang.UnsupportedOperationException if the Java virtual
-     *         machine does not support thread memory allocation measurement.
-     *
-     * @see #isThreadAllocatedMemorySupported
-     */
-    public boolean isThreadAllocatedMemoryEnabled();
-
-    /**
-     * Enables or disables thread memory allocation measurement.  The default
-     * is platform dependent.
-     *
-     * @param enable {@code true} to enable;
-     *               {@code false} to disable.
-     *
-     * @throws java.lang.UnsupportedOperationException if the Java virtual
-     *         machine does not support thread memory allocation measurement.
-     *
-     * @throws java.lang.SecurityException if a security manager
-     *         exists and the caller does not have
-     *         ManagementPermission("control").
-     *
-     * @see #isThreadAllocatedMemorySupported
-     */
-    public void setThreadAllocatedMemoryEnabled(boolean enable);
-}
diff --git a/ojluni/src/main/java/com/sun/management/UnixOperatingSystem.java b/ojluni/src/main/java/com/sun/management/UnixOperatingSystem.java
deleted file mode 100755
index 608a638..0000000
--- a/ojluni/src/main/java/com/sun/management/UnixOperatingSystem.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-package com.sun.management;
-
-import sun.management.VMManagement;
-
-/**
- * Implementation class for the operating system.
- * Standard and committed hotspot-specific metrics if any.
- *
- * ManagementFactory.getOperatingSystemMXBean() returns an instance
- * of this class.
- */
-class UnixOperatingSystem
-    extends    sun.management.OperatingSystemImpl
-    implements UnixOperatingSystemMXBean {
-
-    UnixOperatingSystem(VMManagement vm) {
-        super(vm);
-    }
-
-    public native long getCommittedVirtualMemorySize();
-    public native long getTotalSwapSpaceSize();
-    public native long getFreeSwapSpaceSize();
-    public native long getProcessCpuTime();
-    public native long getFreePhysicalMemorySize();
-    public native long getTotalPhysicalMemorySize();
-    public native long getOpenFileDescriptorCount();
-    public native long getMaxFileDescriptorCount();
-    public native double getSystemCpuLoad();
-    public native double getProcessCpuLoad();
-
-    static {
-        initialize();
-    }
-    private static native void initialize();
-}
diff --git a/ojluni/src/main/java/com/sun/management/UnixOperatingSystemMXBean.java b/ojluni/src/main/java/com/sun/management/UnixOperatingSystemMXBean.java
deleted file mode 100755
index 20f43bf..0000000
--- a/ojluni/src/main/java/com/sun/management/UnixOperatingSystemMXBean.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-package com.sun.management;
-
-/**
- * Platform-specific management interface for the Unix
- * operating system on which the Java virtual machine is running.
- *
- * @author  Mandy Chung
- * @since   1.5
- */
-public interface UnixOperatingSystemMXBean extends
-    com.sun.management.OperatingSystemMXBean {
-
-    /**
-     * Returns the number of open file descriptors.
-     *
-     * @return the number of open file descriptors.
-     */
-    public long getOpenFileDescriptorCount();
-
-    /**
-     * Returns the maximum number of file descriptors.
-     *
-     * @return the maximum number of file descriptors.
-     */
-    public long getMaxFileDescriptorCount();
-}
diff --git a/ojluni/src/main/java/com/sun/management/VMOption.java b/ojluni/src/main/java/com/sun/management/VMOption.java
deleted file mode 100755
index 48ce0d9..0000000
--- a/ojluni/src/main/java/com/sun/management/VMOption.java
+++ /dev/null
@@ -1,238 +0,0 @@
-/*
- * Copyright (c) 2005, 2006, 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.management;
-
-import sun.management.VMOptionCompositeData;
-import javax.management.openmbean.CompositeData;
-
-/**
- * Information about a VM option including its value and
- * where the value came from which is referred as its
- * {@link VMOption.Origin <i>origin</i>}.
- * <p>
- * Each VM option has a default value.  A VM option can
- * be set at VM creation time typically as a command line
- * argument to the launcher or an argument passed to the
- * VM created using the JNI invocation interface.
- * In addition, a VM option may be set via an environment
- * variable or a configuration file. A VM option can also
- * be set dynamically via a management interface after
- * the VM was started.
- *
- * A <tt>VMOption</tt> contains the value of a VM option
- * and the origin of that value at the time this <tt>VMOption</tt>
- * object was constructed.  The value of the VM option
- * may be changed after the <tt>VMOption</tt> object was constructed,
- *
- * @see <a href="{@docRoot}/../../../../technotes/guides/vm/index.html">
- *         Java Virtual Machine</a>
- * @author Mandy Chung
- * @since 1.6
- */
-public class VMOption {
-    private String name;
-    private String value;
-    private boolean writeable;
-    private Origin origin;
-
-    /**
-     * Origin of the value of a VM option.  It tells where the
-     * value of a VM option came from.
-     *
-     * @since 1.6
-     */
-    public enum Origin {
-        /**
-         * The VM option has not been set and its value
-         * is the default value.
-         */
-        DEFAULT,
-        /**
-         * The VM option was set at VM creation time typically
-         * as a command line argument to the launcher or
-         * an argument passed to the VM created using the
-         * JNI invocation interface.
-         */
-        VM_CREATION,
-        /**
-         * The VM option was set via an environment variable.
-         */
-        ENVIRON_VAR,
-        /**
-         * The VM option was set via a configuration file.
-         */
-        CONFIG_FILE,
-        /**
-         * The VM option was set via the management interface after the VM
-         * was started.
-         */
-        MANAGEMENT,
-        /**
-         * The VM option was set via the VM ergonomic support.
-         */
-        ERGONOMIC,
-        /**
-         * The VM option was set via some other mechanism.
-         */
-        OTHER
-    }
-
-    /**
-     * Constructs a <tt>VMOption</tt>.
-     *
-     * @param name Name of a VM option.
-     * @param value Value of a VM option.
-     * @param writeable <tt>true</tt> if a VM option can be set dynamically,
-     *                  or <tt>false</tt> otherwise.
-     * @param origin where the value of a VM option came from.
-     *
-     * @throws NullPointerException if the name or value is <tt>null</tt>
-     */
-    public VMOption(String name, String value, boolean writeable, Origin origin) {
-        this.name = name;
-        this.value = value;
-        this.writeable = writeable;
-        this.origin = origin;
-    }
-
-    /**
-     * Constructs a <tt>VMOption</tt> object from a
-     * {@link CompositeData CompositeData}.
-     */
-    private VMOption(CompositeData cd) {
-        // validate the input composite data
-        VMOptionCompositeData.validateCompositeData(cd);
-
-        this.name = VMOptionCompositeData.getName(cd);
-        this.value = VMOptionCompositeData.getValue(cd);
-        this.writeable = VMOptionCompositeData.isWriteable(cd);
-        this.origin = VMOptionCompositeData.getOrigin(cd);
-    }
-
-    /**
-     * Returns the name of this VM option.
-     *
-     * @return the name of this VM option.
-     */
-    public String getName() {
-        return name;
-    }
-
-    /**
-     * Returns the value of this VM option at the time when
-     * this <tt>VMOption</tt> was created. The value could have been changed.
-     *
-     * @return the value of the VM option at the time when
-     *         this <tt>VMOption</tt> was created.
-     */
-    public String getValue() {
-        return value;
-    }
-
-    /**
-     * Returns the origin of the value of this VM option. That is,
-     * where the value of this VM option came from.
-     *
-     * @return where the value of this VM option came from.
-     */
-    public Origin getOrigin() {
-        return origin;
-    }
-
-    /**
-     * Tests if this VM option is writeable.  If this VM option is writeable,
-     * it can be set by the {@link HotSpotDiagnosticMXBean#setVMOption
-     * HotSpotDiagnosticMXBean.setVMOption} method.
-     *
-     * @return <tt>true</tt> if this VM option is writeable; <tt>false</tt>
-     * otherwise.
-     */
-    public boolean isWriteable() {
-        return writeable;
-    }
-
-    public String toString() {
-        return "VM option: " + getName() +
-               " value: " + value + " " +
-               " origin: " + origin + " " +
-               (writeable ? "(read-only)" : "(read-write)");
-    }
-
-    /**
-     * Returns a <tt>VMOption</tt> object represented by the
-     * given <tt>CompositeData</tt>. The given <tt>CompositeData</tt>
-     * must contain the following attributes:
-     * <p>
-     * <blockquote>
-     * <table border>
-     * <tr>
-     *   <th align=left>Attribute Name</th>
-     *   <th align=left>Type</th>
-     * </tr>
-     * <tr>
-     *   <td>name</td>
-     *   <td><tt>java.lang.String</tt></td>
-     * </tr>
-     * <tr>
-     *   <td>value</td>
-     *   <td><tt>java.lang.String</tt></td>
-     * </tr>
-     * <tr>
-     *   <td>origin</td>
-     *   <td><tt>java.lang.String</tt></td>
-     * </tr>
-     * <tr>
-     *   <td>writeable</td>
-     *   <td><tt>java.lang.Boolean</tt></td>
-     * </tr>
-     * </table>
-     * </blockquote>
-     *
-     * @param cd <tt>CompositeData</tt> representing a <tt>VMOption</tt>
-     *
-     * @throws IllegalArgumentException if <tt>cd</tt> does not
-     *   represent a <tt>VMOption</tt> with the attributes described
-     *   above.
-     *
-     * @return a <tt>VMOption</tt> object represented by <tt>cd</tt>
-     *         if <tt>cd</tt> is not <tt>null</tt>;
-     *         <tt>null</tt> otherwise.
-     */
-    public static VMOption from(CompositeData cd) {
-        if (cd == null) {
-            return null;
-        }
-
-        if (cd instanceof VMOptionCompositeData) {
-            return ((VMOptionCompositeData) cd).getVMOption();
-        } else {
-            return new VMOption(cd);
-        }
-
-    }
-
-
-}
diff --git a/ojluni/src/main/java/com/sun/management/mgmt-overview.html b/ojluni/src/main/java/com/sun/management/mgmt-overview.html
deleted file mode 100755
index 7af4e92..0000000
--- a/ojluni/src/main/java/com/sun/management/mgmt-overview.html
+++ /dev/null
@@ -1,38 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-  <head>
-    <title>Monitoring and Management</title>
-
-<!--
-
-Copyright (c) 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.
--->
-
-  </head>
-<body bgcolor="white">
-
-
-  </body>
-</html>
-
diff --git a/ojluni/src/main/java/com/sun/management/package.html b/ojluni/src/main/java/com/sun/management/package.html
deleted file mode 100755
index c26d430..0000000
--- a/ojluni/src/main/java/com/sun/management/package.html
+++ /dev/null
@@ -1,51 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<html>
-<head>
-<!--
-
-Copyright (c) 2004, 2006, 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.
--->
-
-</head>
-<body bgcolor="white">
-
-This package contains Oracle Corporation's platform extension to
-the implementation of the
-<a href="{@docRoot}/../../../../api/java/lang/management/package-summary.html">
-java.lang.management</a> API and also defines the management
-interface for some other components for the platform.
-
-<p>
-All platform MBeans are registered in the <em>platform MBeanServer</em>
-which can be obtained via the
-<a href="{@docRoot}/../../../../api/java/lang/management/ManagementFactory.html#getPlatformMBeanServer()">
-java.lang.management.ManagementFactory.getPlatformMBeanServer</a>
-
-@author  Mandy Chung
-@since   1.5
-
-</body>
-</html>
-
-
diff --git a/ojluni/src/main/java/com/sun/media/sound/AbstractDataLine.java b/ojluni/src/main/java/com/sun/media/sound/AbstractDataLine.java
deleted file mode 100755
index 0cea4c6..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/AbstractDataLine.java
+++ /dev/null
@@ -1,460 +0,0 @@
-/*
- * Copyright (c) 1999, 2013, 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.media.sound;
-
-import javax.sound.sampled.AudioFormat;
-import javax.sound.sampled.AudioSystem;
-import javax.sound.sampled.Control;
-import javax.sound.sampled.DataLine;
-import javax.sound.sampled.LineEvent;
-import javax.sound.sampled.LineUnavailableException;
-
-
-/**
- * AbstractDataLine
- *
- * @author Kara Kytle
- */
-abstract class AbstractDataLine extends AbstractLine implements DataLine {
-
-    // DEFAULTS
-
-    // default format
-    private final AudioFormat defaultFormat;
-
-    // default buffer size in bytes
-    private final int defaultBufferSize;
-
-    // the lock for synchronization
-    protected final Object lock = new Object();
-
-    // STATE
-
-    // current format
-    protected AudioFormat format;
-
-    // current buffer size in bytes
-    protected int bufferSize;
-
-    protected boolean running = false;
-    private boolean started = false;
-    private boolean active = false;
-
-
-    /**
-     * Constructs a new AbstractLine.
-     */
-    protected AbstractDataLine(DataLine.Info info, AbstractMixer mixer, Control[] controls) {
-        this(info, mixer, controls, null, AudioSystem.NOT_SPECIFIED);
-    }
-
-    /**
-     * Constructs a new AbstractLine.
-     */
-    protected AbstractDataLine(DataLine.Info info, AbstractMixer mixer, Control[] controls, AudioFormat format, int bufferSize) {
-
-        super(info, mixer, controls);
-
-        // record the default values
-        if (format != null) {
-            defaultFormat = format;
-        } else {
-            // default CD-quality
-            defaultFormat = new AudioFormat(44100.0f, 16, 2, true, Platform.isBigEndian());
-        }
-        if (bufferSize > 0) {
-            defaultBufferSize = bufferSize;
-        } else {
-            // 0.5 seconds buffer
-            defaultBufferSize = ((int) (defaultFormat.getFrameRate() / 2)) * defaultFormat.getFrameSize();
-        }
-
-        // set the initial values to the defaults
-        this.format = defaultFormat;
-        this.bufferSize = defaultBufferSize;
-    }
-
-
-    // DATA LINE METHODS
-
-    public final void open(AudioFormat format, int bufferSize) throws LineUnavailableException {
-        //$$fb 2001-10-09: Bug #4517739: avoiding deadlock by synchronizing to mixer !
-        synchronized (mixer) {
-            if (Printer.trace) Printer.trace("> AbstractDataLine.open(format, bufferSize) (class: "+getClass().getName());
-
-            // if the line is not currently open, try to open it with this format and buffer size
-            if (!isOpen()) {
-                // make sure that the format is specified correctly
-                // $$fb part of fix for 4679187: Clip.open() throws unexpected Exceptions
-                Toolkit.isFullySpecifiedAudioFormat(format);
-
-                if (Printer.debug) Printer.debug("  need to open the mixer...");
-                // reserve mixer resources for this line
-                //mixer.open(this, format, bufferSize);
-                mixer.open(this);
-
-                try {
-                    // open the data line.  may throw LineUnavailableException.
-                    implOpen(format, bufferSize);
-
-                    // if we succeeded, set the open state to true and send events
-                    setOpen(true);
-
-                } catch (LineUnavailableException e) {
-                    // release mixer resources for this line and then throw the exception
-                    mixer.close(this);
-                    throw e;
-                }
-            } else {
-                if (Printer.debug) Printer.debug("  dataline already open");
-
-                // if the line is already open and the requested format differs from the
-                // current settings, throw an IllegalStateException
-                //$$fb 2002-04-02: fix for 4661602: Buffersize is checked when re-opening line
-                if (!format.matches(getFormat())) {
-                    throw new IllegalStateException("Line is already open with format " + getFormat() +
-                                                    " and bufferSize " + getBufferSize());
-                }
-                //$$fb 2002-07-26: allow changing the buffersize of already open lines
-                if (bufferSize > 0) {
-                    setBufferSize(bufferSize);
-                }
-            }
-
-            if (Printer.trace) Printer.trace("< AbstractDataLine.open(format, bufferSize) completed");
-        }
-    }
-
-
-    public final void open(AudioFormat format) throws LineUnavailableException {
-        open(format, AudioSystem.NOT_SPECIFIED);
-    }
-
-
-    /**
-     * This implementation always returns 0.
-     */
-    public int available() {
-        return 0;
-    }
-
-
-    /**
-     * This implementation does nothing.
-     */
-    public void drain() {
-        if (Printer.trace) Printer.trace("AbstractDataLine: drain");
-    }
-
-
-    /**
-     * This implementation does nothing.
-     */
-    public void flush() {
-        if (Printer.trace) Printer.trace("AbstractDataLine: flush");
-    }
-
-
-    public final void start() {
-        //$$fb 2001-10-09: Bug #4517739: avoiding deadlock by synchronizing to mixer !
-        synchronized(mixer) {
-            if (Printer.trace) Printer.trace("> "+getClass().getName()+".start() - AbstractDataLine");
-
-            // $$kk: 06.06.99: if not open, this doesn't work....???
-            if (isOpen()) {
-
-                if (!isStartedRunning()) {
-                    mixer.start(this);
-                    implStart();
-                    running = true;
-                }
-            }
-        }
-
-        synchronized(lock) {
-            lock.notifyAll();
-        }
-
-        if (Printer.trace) Printer.trace("< "+getClass().getName()+".start() - AbstractDataLine");
-    }
-
-
-    public final void stop() {
-
-        //$$fb 2001-10-09: Bug #4517739: avoiding deadlock by synchronizing to mixer !
-        synchronized(mixer) {
-            if (Printer.trace) Printer.trace("> "+getClass().getName()+".stop() - AbstractDataLine");
-
-            // $$kk: 06.06.99: if not open, this doesn't work.
-            if (isOpen()) {
-
-                if (isStartedRunning()) {
-
-                    implStop();
-                    mixer.stop(this);
-
-                    running = false;
-
-                    // $$kk: 11.10.99: this is not exactly correct, but will probably work
-                    if (started && (!isActive())) {
-                        setStarted(false);
-                    }
-                }
-            }
-        }
-
-        synchronized(lock) {
-            lock.notifyAll();
-        }
-
-        if (Printer.trace) Printer.trace("< "+getClass().getName()+".stop() - AbstractDataLine");
-    }
-
-    // $$jb: 12.10.99: The official API for this is isRunning().
-    // Per the denied RFE 4297981,
-    // the change to isStarted() is technically an unapproved API change.
-    // The 'started' variable is false when playback of data stops.
-    // It is changed throughout the implementation with setStarted().
-    // This state is what should be returned by isRunning() in the API.
-    // Note that the 'running' variable is true between calls to
-    // start() and stop().  This state is accessed now through the
-    // isStartedRunning() method, defined below.  I have not changed
-    // the variable names at this point, since 'running' is accessed
-    // in MixerSourceLine and MixerClip, and I want to touch as little
-    // code as possible to change isStarted() back to isRunning().
-
-    public final boolean isRunning() {
-        return started;
-    }
-
-    public final boolean isActive() {
-        return active;
-    }
-
-
-    public final long getMicrosecondPosition() {
-
-        long microseconds = getLongFramePosition();
-        if (microseconds != AudioSystem.NOT_SPECIFIED) {
-            microseconds = Toolkit.frames2micros(getFormat(), microseconds);
-        }
-        return microseconds;
-    }
-
-
-    public final AudioFormat getFormat() {
-        return format;
-    }
-
-
-    public final int getBufferSize() {
-        return bufferSize;
-    }
-
-    /**
-     * This implementation does NOT change the buffer size
-     */
-    public final int setBufferSize(int newSize) {
-        return getBufferSize();
-    }
-
-    /**
-     * This implementation returns AudioSystem.NOT_SPECIFIED.
-     */
-    public final float getLevel() {
-        return (float)AudioSystem.NOT_SPECIFIED;
-    }
-
-
-    // HELPER METHODS
-
-    /**
-     * running is true after start is called and before stop is called,
-     * regardless of whether data is actually being presented.
-     */
-    // $$jb: 12.10.99: calling this method isRunning() conflicts with
-    // the official API that was once called isStarted().  Since we
-    // use this method throughout the implementation, I am renaming
-    // it to isStartedRunning().  This is part of backing out the
-    // change denied in RFE 4297981.
-
-    final boolean isStartedRunning() {
-        return running;
-    }
-
-    /**
-     * This method sets the active state and generates
-     * events if it changes.
-     */
-    final void setActive(boolean active) {
-
-        if (Printer.trace) Printer.trace("> AbstractDataLine: setActive(" + active + ")");
-
-        //boolean sendEvents = false;
-        //long position = getLongFramePosition();
-
-        synchronized (this) {
-
-            //if (Printer.debug) Printer.debug("    AbstractDataLine: setActive: this.active: " + this.active);
-            //if (Printer.debug) Printer.debug("                                 active: " + active);
-
-            if (this.active != active) {
-                this.active = active;
-                //sendEvents = true;
-            }
-        }
-
-        //if (Printer.debug) Printer.debug("                                 this.active: " + this.active);
-        //if (Printer.debug) Printer.debug("                                 sendEvents: " + sendEvents);
-
-
-        // $$kk: 11.19.99: take ACTIVE / INACTIVE / EOM events out;
-        // putting them in is technically an API change.
-        // do not generate ACTIVE / INACTIVE events for now
-        // if (sendEvents) {
-        //
-        //      if (active) {
-        //              sendEvents(new LineEvent(this, LineEvent.Type.ACTIVE, position));
-        //      } else {
-        //              sendEvents(new LineEvent(this, LineEvent.Type.INACTIVE, position));
-        //      }
-        //}
-    }
-
-    /**
-     * This method sets the started state and generates
-     * events if it changes.
-     */
-    final void setStarted(boolean started) {
-
-        if (Printer.trace) Printer.trace("> AbstractDataLine: setStarted(" + started + ")");
-
-        boolean sendEvents = false;
-        long position = getLongFramePosition();
-
-        synchronized (this) {
-
-            //if (Printer.debug) Printer.debug("    AbstractDataLine: setStarted: this.started: " + this.started);
-            //if (Printer.debug) Printer.debug("                                  started: " + started);
-
-            if (this.started != started) {
-                this.started = started;
-                sendEvents = true;
-            }
-        }
-
-        //if (Printer.debug) Printer.debug("                                  this.started: " + this.started);
-        //if (Printer.debug) Printer.debug("                                  sendEvents: " + sendEvents);
-
-        if (sendEvents) {
-
-            if (started) {
-                sendEvents(new LineEvent(this, LineEvent.Type.START, position));
-            } else {
-                sendEvents(new LineEvent(this, LineEvent.Type.STOP, position));
-            }
-        }
-        if (Printer.trace) Printer.trace("< AbstractDataLine: setStarted completed");
-    }
-
-
-    /**
-     * This method generates a STOP event and sets the started state to false.
-     * It is here for historic reasons when an EOM event existed.
-     */
-    final void setEOM() {
-
-        if (Printer.trace) Printer.trace("> AbstractDataLine: setEOM()");
-        //$$fb 2002-04-21: sometimes, 2 STOP events are generated.
-        // better use setStarted() to send STOP event.
-        setStarted(false);
-        if (Printer.trace) Printer.trace("< AbstractDataLine: setEOM() completed");
-    }
-
-
-
-
-    // OVERRIDES OF ABSTRACT LINE METHODS
-
-    /**
-     * Try to open the line with the current format and buffer size values.
-     * If the line is not open, these will be the defaults.  If the
-     * line is open, this should return quietly because the values
-     * requested will match the current ones.
-     */
-    public final void open() throws LineUnavailableException {
-
-        if (Printer.trace) Printer.trace("> "+getClass().getName()+".open() - AbstractDataLine");
-
-        // this may throw a LineUnavailableException.
-        open(format, bufferSize);
-        if (Printer.trace) Printer.trace("< "+getClass().getName()+".open() - AbstractDataLine");
-    }
-
-
-    /**
-     * This should also stop the line.  The closed line should not be running or active.
-     * After we close the line, we reset the format and buffer size to the defaults.
-     */
-    public final void close() {
-        //$$fb 2001-10-09: Bug #4517739: avoiding deadlock by synchronizing to mixer !
-        synchronized (mixer) {
-            if (Printer.trace) Printer.trace("> "+getClass().getName()+".close() - in AbstractDataLine.");
-
-            if (isOpen()) {
-
-                // stop
-                stop();
-
-                // set the open state to false and send events
-                setOpen(false);
-
-                // close resources for this line
-                implClose();
-
-                // release mixer resources for this line
-                mixer.close(this);
-
-                // reset format and buffer size to the defaults
-                format = defaultFormat;
-                bufferSize = defaultBufferSize;
-            }
-        }
-        if (Printer.trace) Printer.trace("< "+getClass().getName()+".close() - in AbstractDataLine");
-    }
-
-
-    // IMPLEMENTATIONS OF ABSTRACT LINE ABSTRACE METHODS
-
-
-    // ABSTRACT METHODS
-
-    abstract void implOpen(AudioFormat format, int bufferSize) throws LineUnavailableException;
-    abstract void implClose();
-
-    abstract void implStart();
-    abstract void implStop();
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/AbstractLine.java b/ojluni/src/main/java/com/sun/media/sound/AbstractLine.java
deleted file mode 100755
index e6a7ba2..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/AbstractLine.java
+++ /dev/null
@@ -1,239 +0,0 @@
-/*
- * Copyright (c) 1999, 2013, 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.media.sound;
-
-import java.util.Map;
-import java.util.Vector;
-import java.util.WeakHashMap;
-
-import javax.sound.sampled.AudioSystem;
-import javax.sound.sampled.Control;
-import javax.sound.sampled.Line;
-import javax.sound.sampled.LineEvent;
-import javax.sound.sampled.LineListener;
-import javax.sound.sampled.LineUnavailableException;
-
-
-/**
- * AbstractLine
- *
- * @author Kara Kytle
- */
-abstract class AbstractLine implements Line {
-
-    protected final Line.Info info;
-    protected Control[] controls;
-    AbstractMixer mixer;
-    private boolean open     = false;
-    private final Vector listeners = new Vector();
-
-    /**
-     * Contains event dispatcher per thread group.
-     */
-    private static final Map<ThreadGroup, EventDispatcher> dispatchers =
-            new WeakHashMap<>();
-
-    /**
-     * Constructs a new AbstractLine.
-     * @param mixer the mixer with which this line is associated
-     * @param controls set of supported controls
-     */
-    protected AbstractLine(Line.Info info, AbstractMixer mixer, Control[] controls) {
-
-        if (controls == null) {
-            controls = new Control[0];
-        }
-
-        this.info = info;
-        this.mixer = mixer;
-        this.controls = controls;
-    }
-
-
-    // LINE METHODS
-
-    public final Line.Info getLineInfo() {
-        return info;
-    }
-
-
-    public final boolean isOpen() {
-        return open;
-    }
-
-
-    public final void addLineListener(LineListener listener) {
-        synchronized(listeners) {
-            if ( ! (listeners.contains(listener)) ) {
-                listeners.addElement(listener);
-            }
-        }
-    }
-
-
-    /**
-     * Removes an audio listener.
-     * @param listener listener to remove
-     */
-    public final void removeLineListener(LineListener listener) {
-        listeners.removeElement(listener);
-    }
-
-
-    /**
-     * Obtains the set of controls supported by the
-     * line.  If no controls are supported, returns an
-     * array of length 0.
-     * @return control set
-     */
-    public final Control[] getControls() {
-        Control[] returnedArray = new Control[controls.length];
-
-        for (int i = 0; i < controls.length; i++) {
-            returnedArray[i] = controls[i];
-        }
-
-        return returnedArray;
-    }
-
-
-    public final boolean isControlSupported(Control.Type controlType) {
-        // protect against a NullPointerException
-        if (controlType == null) {
-            return false;
-        }
-
-        for (int i = 0; i < controls.length; i++) {
-            if (controlType == controls[i].getType()) {
-                return true;
-            }
-        }
-
-        return false;
-    }
-
-
-    public final Control getControl(Control.Type controlType) {
-        // protect against a NullPointerException
-        if (controlType != null) {
-
-            for (int i = 0; i < controls.length; i++) {
-                if (controlType == controls[i].getType()) {
-                    return controls[i];
-                }
-            }
-        }
-
-        throw new IllegalArgumentException("Unsupported control type: " + controlType);
-    }
-
-
-    // HELPER METHODS
-
-
-    /**
-     * This method sets the open state and generates
-     * events if it changes.
-     */
-    final void setOpen(boolean open) {
-
-        if (Printer.trace) Printer.trace("> "+getClass().getName()+" (AbstractLine): setOpen(" + open + ")  this.open: " + this.open);
-
-        boolean sendEvents = false;
-        long position = getLongFramePosition();
-
-        synchronized (this) {
-            if (this.open != open) {
-                this.open = open;
-                sendEvents = true;
-            }
-        }
-
-        if (sendEvents) {
-            if (open) {
-                sendEvents(new LineEvent(this, LineEvent.Type.OPEN, position));
-            } else {
-                sendEvents(new LineEvent(this, LineEvent.Type.CLOSE, position));
-            }
-        }
-        if (Printer.trace) Printer.trace("< "+getClass().getName()+" (AbstractLine): setOpen(" + open + ")  this.open: " + this.open);
-    }
-
-
-    /**
-     * Send line events.
-     */
-    final void sendEvents(LineEvent event) {
-        getEventDispatcher().sendAudioEvents(event, listeners);
-    }
-
-
-    /**
-     * This is an error in the API: getFramePosition
-     * should return a long value. At CD quality,
-     * the int value wraps around after 13 hours.
-     */
-    public final int getFramePosition() {
-        return (int) getLongFramePosition();
-    }
-
-
-    /**
-     * Return the frame position in a long value
-     * This implementation returns AudioSystem.NOT_SPECIFIED.
-     */
-    public long getLongFramePosition() {
-        return AudioSystem.NOT_SPECIFIED;
-    }
-
-
-    // $$kk: 06.03.99: returns the mixer used in construction.
-    // this is a hold-over from when there was a public method like
-    // this on line and should be fixed!!
-    final AbstractMixer getMixer() {
-        return mixer;
-    }
-
-    final EventDispatcher getEventDispatcher() {
-        // create and start the global event thread
-        //TODO  need a way to stop this thread when the engine is done
-        final ThreadGroup tg = Thread.currentThread().getThreadGroup();
-        synchronized (dispatchers) {
-            EventDispatcher eventDispatcher = dispatchers.get(tg);
-            if (eventDispatcher == null) {
-                eventDispatcher = new EventDispatcher();
-                dispatchers.put(tg, eventDispatcher);
-                eventDispatcher.start();
-            }
-            return eventDispatcher;
-        }
-    }
-
-    // ABSTRACT METHODS
-
-    public abstract void open() throws LineUnavailableException;
-    public abstract void close();
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/AbstractMidiDevice.java b/ojluni/src/main/java/com/sun/media/sound/AbstractMidiDevice.java
deleted file mode 100755
index 104af87..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/AbstractMidiDevice.java
+++ /dev/null
@@ -1,751 +0,0 @@
-/*
- * Copyright (c) 1999, 2013, 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.media.sound;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Collections;
-
-import javax.sound.midi.*;
-
-
-/**
- * Abstract AbstractMidiDevice class representing functionality shared by
- * MidiInDevice and MidiOutDevice objects.
- *
- * @author David Rivas
- * @author Kara Kytle
- * @author Matthias Pfisterer
- * @author Florian Bomers
- */
-abstract class AbstractMidiDevice implements MidiDevice, ReferenceCountingDevice {
-
-    // STATIC VARIABLES
-    private static final boolean TRACE_TRANSMITTER = false;
-
-    // INSTANCE VARIABLES
-
-    private ArrayList<Receiver> receiverList;
-
-    private TransmitterList transmitterList;
-
-    // lock to protect receiverList and transmitterList
-    // from simultaneous creation and destruction
-    // reduces possibility of deadlock, compared to
-    // synchronizing to the class instance
-    private final Object traRecLock = new Object();
-
-    // DEVICE ATTRIBUTES
-
-    private final MidiDevice.Info info;
-
-
-    // DEVICE STATE
-
-    private boolean open          = false;
-    private int openRefCount;
-
-    /** List of Receivers and Transmitters that opened the device implicitely.
-     */
-    private List openKeepingObjects;
-
-    /**
-     * This is the device handle returned from native code
-     */
-    protected long id                   = 0;
-
-
-
-    // CONSTRUCTOR
-
-
-    /**
-     * Constructs an AbstractMidiDevice with the specified info object.
-     * @param info the description of the device
-     */
-    /*
-     * The initial mode and and only supported mode default to OMNI_ON_POLY.
-     */
-    protected AbstractMidiDevice(MidiDevice.Info info) {
-
-        if(Printer.trace) Printer.trace(">> AbstractMidiDevice CONSTRUCTOR");
-
-        this.info = info;
-        openRefCount = 0;
-
-        if(Printer.trace) Printer.trace("<< AbstractMidiDevice CONSTRUCTOR completed");
-    }
-
-
-    // MIDI DEVICE METHODS
-
-    public final MidiDevice.Info getDeviceInfo() {
-        return info;
-    }
-
-    /** Open the device from an aplication program.
-     * Setting the open reference count to -1 here prevents Transmitters and Receivers that
-     * opened the the device implicitly from closing it. The only way to close the device after
-     * this call is a call to close().
-     */
-    public final void open() throws MidiUnavailableException {
-        if (Printer.trace) Printer.trace("> AbstractMidiDevice: open()");
-        synchronized(this) {
-            openRefCount = -1;
-            doOpen();
-        }
-        if (Printer.trace) Printer.trace("< AbstractMidiDevice: open() completed");
-    }
-
-
-
-    /** Open the device implicitly.
-     * This method is intended to be used by AbstractReceiver
-     * and BasicTransmitter. Actually, it is called by getReceiverReferenceCounting() and
-     * getTransmitterReferenceCounting(). These, in turn, are called by MidiSytem on calls to
-     * getReceiver() and getTransmitter(). The former methods should pass the Receiver or
-     * Transmitter just created as the object parameter to this method. Storing references to
-     * these objects is necessary to be able to decide later (when it comes to closing) if
-     * R/T's are ones that opened the device implicitly.
-     *
-     * @object The Receiver or Transmitter instance that triggered this implicit open.
-     */
-    private void openInternal(Object object) throws MidiUnavailableException {
-        if (Printer.trace) Printer.trace("> AbstractMidiDevice: openInternal()");
-        synchronized(this) {
-            if (openRefCount != -1) {
-                openRefCount++;
-                getOpenKeepingObjects().add(object);
-            }
-            // double calls to doOpens() will be catched by the open flag.
-            doOpen();
-        }
-        if (Printer.trace) Printer.trace("< AbstractMidiDevice: openInternal() completed");
-    }
-
-
-    private void doOpen() throws MidiUnavailableException {
-        if (Printer.trace) Printer.trace("> AbstractMidiDevice: doOpen()");
-        synchronized(this) {
-            if (! isOpen()) {
-                implOpen();
-                open = true;
-            }
-        }
-        if (Printer.trace) Printer.trace("< AbstractMidiDevice: doOpen() completed");
-    }
-
-
-    public final void close() {
-        if (Printer.trace) Printer.trace("> AbstractMidiDevice: close()");
-        synchronized (this) {
-            doClose();
-            openRefCount = 0;
-        }
-        if (Printer.trace) Printer.trace("< AbstractMidiDevice: close() completed");
-    }
-
-
-    /** Close the device for an object that implicitely opened it.
-     * This method is intended to be used by Transmitter.close() and Receiver.close().
-     * Those methods should pass this for the object parameter. Since Transmitters or Receivers
-     * do not know if their device has been opened implicitely because of them, they call this
-     * method in any case. This method now is able to seperate Receivers/Transmitters that opened
-     * the device implicitely from those that didn't by looking up the R/T in the
-     * openKeepingObjects list. Only if the R/T is contained there, the reference count is
-     * reduced.
-     *
-     * @param object The object that might have been opening the device implicitely (for now,
-     * this may be a Transmitter or receiver).
-     */
-    public final void closeInternal(Object object) {
-        if (Printer.trace) Printer.trace("> AbstractMidiDevice: closeInternal()");
-        synchronized(this) {
-            if (getOpenKeepingObjects().remove(object)) {
-                if (openRefCount > 0) {
-                    openRefCount--;
-                    if (openRefCount == 0) {
-                        doClose();
-                    }
-                }
-            }
-        }
-        if (Printer.trace) Printer.trace("< AbstractMidiDevice: closeInternal() completed");
-    }
-
-
-    public final void doClose() {
-        if (Printer.trace) Printer.trace("> AbstractMidiDevice: doClose()");
-        synchronized(this) {
-            if (isOpen()) {
-                implClose();
-                open = false;
-            }
-        }
-        if (Printer.trace) Printer.trace("< AbstractMidiDevice: doClose() completed");
-    }
-
-
-    public final boolean isOpen() {
-        return open;
-    }
-
-
-    protected void implClose() {
-        synchronized (traRecLock) {
-            if (receiverList != null) {
-                // close all receivers
-                for(int i = 0; i < receiverList.size(); i++) {
-                    receiverList.get(i).close();
-                }
-                receiverList.clear();
-            }
-            if (transmitterList != null) {
-                // close all transmitters
-                transmitterList.close();
-            }
-        }
-    }
-
-
-    /**
-     * This implementation always returns -1.
-     * Devices that actually provide this should over-ride
-     * this method.
-     */
-    public long getMicrosecondPosition() {
-        return -1;
-    }
-
-
-    /** Return the maximum number of Receivers supported by this device.
-        Depending on the return value of hasReceivers(), this method returns either 0 or -1.
-        Subclasses should rather override hasReceivers() than override this method.
-     */
-    public final int getMaxReceivers() {
-        if (hasReceivers()) {
-            return -1;
-        } else {
-            return 0;
-        }
-    }
-
-
-    /** Return the maximum number of Transmitters supported by this device.
-        Depending on the return value of hasTransmitters(), this method returns either 0 or -1.
-        Subclasses should override hasTransmitters().
-     */
-    public final int getMaxTransmitters() {
-        if (hasTransmitters()) {
-            return -1;
-        } else {
-            return 0;
-        }
-    }
-
-
-    /** Retrieve a Receiver for this device.
-        This method returns the value returned by createReceiver(), if it doesn't throw
-        an exception. Subclasses should rather override createReceiver() than override
-        this method.
-        If createReceiver returns a Receiver, it is added to the internal list
-        of Receivers (see getReceiversList)
-     */
-    public final Receiver getReceiver() throws MidiUnavailableException {
-        Receiver receiver;
-        synchronized (traRecLock) {
-            receiver = createReceiver(); // may throw MidiUnavailableException
-            getReceiverList().add(receiver);
-        }
-        return receiver;
-    }
-
-
-    public final List<Receiver> getReceivers() {
-        List<Receiver> recs;
-        synchronized (traRecLock) {
-            if (receiverList == null) {
-                recs = Collections.unmodifiableList(new ArrayList<Receiver>(0));
-            } else {
-                recs = Collections.unmodifiableList
-                    ((List<Receiver>) (receiverList.clone()));
-            }
-        }
-        return recs;
-    }
-
-
-    /**
-     * This implementation uses createTransmitter, which may throw an exception.
-     * If a transmitter is returned in createTransmitter, it is added to the internal
-     * TransmitterList
-     */
-    public final Transmitter getTransmitter() throws MidiUnavailableException {
-        Transmitter transmitter;
-        synchronized (traRecLock) {
-            transmitter = createTransmitter(); // may throw MidiUnavailableException
-            getTransmitterList().add(transmitter);
-        }
-        return transmitter;
-    }
-
-
-    public final List<Transmitter> getTransmitters() {
-        List<Transmitter> tras;
-        synchronized (traRecLock) {
-            if (transmitterList == null
-                || transmitterList.transmitters.size() == 0) {
-                tras = Collections.unmodifiableList(new ArrayList<Transmitter>(0));
-            } else {
-                tras = Collections.unmodifiableList((List<Transmitter>) (transmitterList.transmitters.clone()));
-            }
-        }
-        return tras;
-    }
-
-
-    // HELPER METHODS
-
-    final long getId() {
-        return id;
-    }
-
-
-    // REFERENCE COUNTING
-
-    /** Retrieve a Receiver and open the device implicitly.
-        This method is called by MidiSystem.getReceiver().
-     */
-    public final Receiver getReceiverReferenceCounting()
-            throws MidiUnavailableException {
-        /* Keep this order of commands! If getReceiver() throws an exception,
-           openInternal() should not be called!
-        */
-        Receiver receiver;
-        synchronized (traRecLock) {
-            receiver = getReceiver();
-            AbstractMidiDevice.this.openInternal(receiver);
-        }
-        return receiver;
-    }
-
-
-    /** Retrieve a Transmitter and open the device implicitly.
-        This method is called by MidiSystem.getTransmitter().
-     */
-    public final Transmitter getTransmitterReferenceCounting()
-            throws MidiUnavailableException {
-        /* Keep this order of commands! If getTransmitter() throws an exception,
-           openInternal() should not be called!
-        */
-        Transmitter transmitter;
-        synchronized (traRecLock) {
-            transmitter = getTransmitter();
-            AbstractMidiDevice.this.openInternal(transmitter);
-        }
-        return transmitter;
-    }
-
-
-    /** Return the list of objects that have opened the device implicitely.
-     */
-    private synchronized List getOpenKeepingObjects() {
-        if (openKeepingObjects == null) {
-            openKeepingObjects = new ArrayList();
-        }
-        return openKeepingObjects;
-    }
-
-
-
-    // RECEIVER HANDLING METHODS
-
-
-    /** Return the internal list of Receivers, possibly creating it first.
-     */
-    private List<Receiver> getReceiverList() {
-        synchronized (traRecLock) {
-            if (receiverList == null) {
-                receiverList = new ArrayList<Receiver>();
-            }
-        }
-        return receiverList;
-    }
-
-
-    /** Returns if this device supports Receivers.
-        Subclasses that use Receivers should override this method to
-        return true. They also should override createReceiver().
-
-        @return true, if the device supports Receivers, false otherwise.
-    */
-    protected boolean hasReceivers() {
-        return false;
-    }
-
-
-    /** Create a Receiver object.
-        throwing an exception here means that Receivers aren't enabled.
-        Subclasses that use Receivers should override this method with
-        one that returns objects implementing Receiver.
-        Classes overriding this method should also override hasReceivers()
-        to return true.
-    */
-    protected Receiver createReceiver() throws MidiUnavailableException {
-        throw new MidiUnavailableException("MIDI IN receiver not available");
-    }
-
-
-
-    // TRANSMITTER HANDLING
-
-    /** Return the internal list of Transmitters, possibly creating it first.
-     */
-    final TransmitterList getTransmitterList() {
-        synchronized (traRecLock) {
-            if (transmitterList == null) {
-                transmitterList = new TransmitterList();
-            }
-        }
-        return transmitterList;
-    }
-
-
-    /** Returns if this device supports Transmitters.
-        Subclasses that use Transmitters should override this method to
-        return true. They also should override createTransmitter().
-
-        @return true, if the device supports Transmitters, false otherwise.
-    */
-    protected boolean hasTransmitters() {
-        return false;
-    }
-
-
-    /** Create a Transmitter object.
-        throwing an exception here means that Transmitters aren't enabled.
-        Subclasses that use Transmitters should override this method with
-        one that returns objects implementing Transmitters.
-        Classes overriding this method should also override hasTransmitters()
-        to return true.
-    */
-    protected Transmitter createTransmitter() throws MidiUnavailableException {
-        throw new MidiUnavailableException("MIDI OUT transmitter not available");
-    }
-
-    // ABSTRACT METHODS
-
-    protected abstract void implOpen() throws MidiUnavailableException;
-
-
-    /**
-     * close this device if discarded by the garbage collector
-     */
-    protected final void finalize() {
-        close();
-    }
-
-    // INNER CLASSES
-
-    /** Base class for Receivers.
-        Subclasses that use Receivers must use this base class, since it
-        contains magic necessary to manage implicit closing the device.
-        This is necessary for Receivers retrieved via MidiSystem.getReceiver()
-        (which opens the device implicitely).
-     */
-    abstract class AbstractReceiver implements MidiDeviceReceiver {
-        private boolean open = true;
-
-
-        /** Deliver a MidiMessage.
-            This method contains magic related to the closed state of a
-            Receiver. Therefore, subclasses should not override this method.
-            Instead, they should implement implSend().
-        */
-        @Override
-        public final synchronized void send(final MidiMessage message,
-                                            final long timeStamp) {
-            if (!open) {
-                throw new IllegalStateException("Receiver is not open");
-            }
-            implSend(message, timeStamp);
-        }
-
-        abstract void implSend(MidiMessage message, long timeStamp);
-
-        /** Close the Receiver.
-         * Here, the call to the magic method closeInternal() takes place.
-         * Therefore, subclasses that override this method must call
-         * 'super.close()'.
-         */
-        @Override
-        public final void close() {
-            open = false;
-            synchronized (AbstractMidiDevice.this.traRecLock) {
-                AbstractMidiDevice.this.getReceiverList().remove(this);
-            }
-            AbstractMidiDevice.this.closeInternal(this);
-        }
-
-        @Override
-        public final MidiDevice getMidiDevice() {
-            return AbstractMidiDevice.this;
-        }
-
-        final boolean isOpen() {
-            return open;
-        }
-
-        //$$fb is that a good idea?
-        //protected void finalize() {
-        //    close();
-        //}
-
-    } // class AbstractReceiver
-
-
-    /**
-     * Transmitter base class.
-     * This class especially makes sure the device is closed if it
-     * has been opened implicitly by a call to MidiSystem.getTransmitter().
-     * The logic of doing so is actually in closeInternal().
-     *
-     * Also, it has some optimizations regarding sending to the Receivers,
-     * for known Receivers, and managing itself in the TransmitterList.
-     */
-    class BasicTransmitter implements MidiDeviceTransmitter {
-
-        private Receiver receiver = null;
-        TransmitterList tlist = null;
-
-        protected BasicTransmitter() {
-        }
-
-        private void setTransmitterList(TransmitterList tlist) {
-            this.tlist = tlist;
-        }
-
-        public final void setReceiver(Receiver receiver) {
-            if (tlist != null && this.receiver != receiver) {
-                if (Printer.debug) Printer.debug("Transmitter "+toString()+": set receiver "+receiver);
-                tlist.receiverChanged(this, this.receiver, receiver);
-                this.receiver = receiver;
-            }
-        }
-
-        public final Receiver getReceiver() {
-            return receiver;
-        }
-
-
-        /** Close the Transmitter.
-         * Here, the call to the magic method closeInternal() takes place.
-         * Therefore, subclasses that override this method must call
-         * 'super.close()'.
-         */
-        public final void close() {
-            AbstractMidiDevice.this.closeInternal(this);
-            if (tlist != null) {
-                tlist.receiverChanged(this, this.receiver, null);
-                tlist.remove(this);
-                tlist = null;
-            }
-        }
-
-        public final MidiDevice getMidiDevice() {
-            return AbstractMidiDevice.this;
-        }
-
-    } // class BasicTransmitter
-
-
-    /**
-     * a class to manage a list of transmitters
-     */
-    final class TransmitterList {
-
-        private final ArrayList<Transmitter> transmitters = new ArrayList<Transmitter>();
-        private MidiOutDevice.MidiOutReceiver midiOutReceiver;
-
-        // how many transmitters must be present for optimized
-        // handling
-        private int optimizedReceiverCount = 0;
-
-
-        private void add(Transmitter t) {
-            synchronized(transmitters) {
-                transmitters.add(t);
-            }
-            if (t instanceof BasicTransmitter) {
-                ((BasicTransmitter) t).setTransmitterList(this);
-            }
-            if (Printer.debug) Printer.debug("--added transmitter "+t);
-        }
-
-        private void remove(Transmitter t) {
-            synchronized(transmitters) {
-                int index = transmitters.indexOf(t);
-                if (index >= 0) {
-                    transmitters.remove(index);
-                    if (Printer.debug) Printer.debug("--removed transmitter "+t);
-                }
-            }
-        }
-
-        private void receiverChanged(BasicTransmitter t,
-                                     Receiver oldR,
-                                     Receiver newR) {
-            synchronized(transmitters) {
-                // some optimization
-                if (midiOutReceiver == oldR) {
-                    midiOutReceiver = null;
-                }
-                if (newR != null) {
-                    if ((newR instanceof MidiOutDevice.MidiOutReceiver)
-                        && (midiOutReceiver == null)) {
-                        midiOutReceiver = ((MidiOutDevice.MidiOutReceiver) newR);
-                    }
-                }
-                optimizedReceiverCount =
-                      ((midiOutReceiver!=null)?1:0);
-            }
-            // more potential for optimization here
-        }
-
-
-        /** closes all transmitters and empties the list */
-        void close() {
-            synchronized (transmitters) {
-                for(int i = 0; i < transmitters.size(); i++) {
-                    transmitters.get(i).close();
-                }
-                transmitters.clear();
-            }
-            if (Printer.trace) Printer.trace("TransmitterList.close() succeeded");
-        }
-
-
-
-        /**
-        * Send this message to all receivers
-        * status = packedMessage & 0xFF
-        * data1 = (packedMessage & 0xFF00) >> 8;
-        * data1 = (packedMessage & 0xFF0000) >> 16;
-        */
-        void sendMessage(int packedMessage, long timeStamp) {
-            try {
-                synchronized(transmitters) {
-                    int size = transmitters.size();
-                    if (optimizedReceiverCount == size) {
-                        if (midiOutReceiver != null) {
-                            if (TRACE_TRANSMITTER) Printer.println("Sending packed message to MidiOutReceiver");
-                            midiOutReceiver.sendPackedMidiMessage(packedMessage, timeStamp);
-                        }
-                    } else {
-                        if (TRACE_TRANSMITTER) Printer.println("Sending packed message to "+size+" transmitter's receivers");
-                        for (int i = 0; i < size; i++) {
-                            Receiver receiver = ((Transmitter)transmitters.get(i)).getReceiver();
-                            if (receiver != null) {
-                                if (optimizedReceiverCount > 0) {
-                                    if (receiver instanceof MidiOutDevice.MidiOutReceiver) {
-                                        ((MidiOutDevice.MidiOutReceiver) receiver).sendPackedMidiMessage(packedMessage, timeStamp);
-                                    } else {
-                                        receiver.send(new FastShortMessage(packedMessage), timeStamp);
-                                    }
-                                } else {
-                                    receiver.send(new FastShortMessage(packedMessage), timeStamp);
-                                }
-                            }
-                        }
-                    }
-                }
-            } catch (InvalidMidiDataException e) {
-                // this happens when invalid data comes over the wire. Ignore it.
-            }
-        }
-
-        void sendMessage(byte[] data, long timeStamp) {
-            try {
-                synchronized(transmitters) {
-                    int size = transmitters.size();
-                    if (TRACE_TRANSMITTER) Printer.println("Sending long message to "+size+" transmitter's receivers");
-                    for (int i = 0; i < size; i++) {
-                        Receiver receiver = ((Transmitter)transmitters.get(i)).getReceiver();
-                        if (receiver != null) {
-                            //$$fb 2002-04-02: SysexMessages are mutable, so
-                            // an application could change the contents of this object,
-                            // or try to use the object later. So we can't get around object creation
-                            // But the array need not be unique for each FastSysexMessage object,
-                            // because it cannot be modified.
-                            receiver.send(new FastSysexMessage(data), timeStamp);
-                        }
-                    }
-                }
-            } catch (InvalidMidiDataException e) {
-                // this happens when invalid data comes over the wire. Ignore it.
-                return;
-            }
-        }
-
-
-        /**
-        * Send this message to all transmitters
-        */
-        void sendMessage(MidiMessage message, long timeStamp) {
-            if (message instanceof FastShortMessage) {
-                sendMessage(((FastShortMessage) message).getPackedMsg(), timeStamp);
-                return;
-            }
-            synchronized(transmitters) {
-                int size = transmitters.size();
-                if (optimizedReceiverCount == size) {
-                    if (midiOutReceiver != null) {
-                        if (TRACE_TRANSMITTER) Printer.println("Sending MIDI message to MidiOutReceiver");
-                        midiOutReceiver.send(message, timeStamp);
-                    }
-                } else {
-                    if (TRACE_TRANSMITTER) Printer.println("Sending MIDI message to "+size+" transmitter's receivers");
-                    for (int i = 0; i < size; i++) {
-                        Receiver receiver = ((Transmitter)transmitters.get(i)).getReceiver();
-                        if (receiver != null) {
-                            //$$fb 2002-04-02: ShortMessages are mutable, so
-                            // an application could change the contents of this object,
-                            // or try to use the object later.
-                            // We violate this spec here, to avoid costly (and gc-intensive)
-                            // object creation for potentially hundred of messages per second.
-                            // The spec should be changed to allow Immutable MidiMessages
-                            // (i.e. throws InvalidStateException or so in setMessage)
-                            receiver.send(message, timeStamp);
-                        }
-                    }
-                }
-            }
-        }
-
-
-    } // TransmitterList
-
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/AbstractMidiDeviceProvider.java b/ojluni/src/main/java/com/sun/media/sound/AbstractMidiDeviceProvider.java
deleted file mode 100755
index 3d0d1af..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/AbstractMidiDeviceProvider.java
+++ /dev/null
@@ -1,196 +0,0 @@
-/*
- * Copyright (c) 2002, 2013, 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.media.sound;
-
-import javax.sound.midi.MidiDevice;
-import javax.sound.midi.spi.MidiDeviceProvider;
-
-
-/**
- * Super class for MIDI input or output device provider.
- *
- * @author Florian Bomers
- */
-public abstract class AbstractMidiDeviceProvider extends MidiDeviceProvider {
-
-    private static final boolean enabled;
-
-    /**
-     * Create objects representing all MIDI output devices on the system.
-     */
-    static {
-        if (Printer.trace) Printer.trace("AbstractMidiDeviceProvider: static");
-        Platform.initialize();
-        enabled = Platform.isMidiIOEnabled();
-        if (Printer.trace) Printer.trace("AbstractMidiDeviceProvider: enabled: " + enabled);
-
-        // $$fb number of MIDI devices may change with time
-        // also for memory's sake, do not initialize the arrays here
-    }
-
-
-    final synchronized void readDeviceInfos() {
-        Info[] infos = getInfoCache();
-        MidiDevice[] devices = getDeviceCache();
-        if (!enabled) {
-            if (infos == null || infos.length != 0) {
-                setInfoCache(new Info[0]);
-            }
-            if (devices == null || devices.length != 0) {
-                setDeviceCache(new MidiDevice[0]);
-            }
-            return;
-        }
-
-        int oldNumDevices = (infos==null)?-1:infos.length;
-        int newNumDevices = getNumDevices();
-        if (oldNumDevices != newNumDevices) {
-            if (Printer.trace) Printer.trace(getClass().toString()
-                                             +": readDeviceInfos: old numDevices: "+oldNumDevices
-                                             +"  newNumDevices: "+ newNumDevices);
-
-            // initialize the arrays
-            Info[] newInfos = new Info[newNumDevices];
-            MidiDevice[] newDevices = new MidiDevice[newNumDevices];
-
-            for (int i = 0; i < newNumDevices; i++) {
-                Info newInfo = createInfo(i);
-
-                // in case that we are re-reading devices, try to find
-                // the previous one and reuse it
-                if (infos != null) {
-                    for (int ii = 0; ii < infos.length; ii++) {
-                        Info info = infos[ii];
-                        if (info != null && info.equalStrings(newInfo)) {
-                            // new info matches the still existing info. Use old one
-                            newInfos[i] = info;
-                            info.setIndex(i);
-                            infos[ii] = null; // prevent re-use
-                            newDevices[i] = devices[ii];
-                            devices[ii] = null;
-                            break;
-                        }
-                    }
-                }
-                if (newInfos[i] == null) {
-                    newInfos[i] = newInfo;
-                }
-            }
-            // the remaining MidiDevice.Info instances in the infos array
-            // have become obsolete.
-            if (infos != null) {
-                for (int i = 0; i < infos.length; i++) {
-                    if (infos[i] != null) {
-                        // disable this device info
-                        infos[i].setIndex(-1);
-                    }
-                    // what to do with the MidiDevice instances that are left
-                    // in the devices array ?? Close them ?
-                }
-            }
-            // commit new list of infos.
-            setInfoCache(newInfos);
-            setDeviceCache(newDevices);
-        }
-    }
-
-
-    public final MidiDevice.Info[] getDeviceInfo() {
-        readDeviceInfos();
-        Info[] infos = getInfoCache();
-        MidiDevice.Info[] localArray = new MidiDevice.Info[infos.length];
-        System.arraycopy(infos, 0, localArray, 0, infos.length);
-        return localArray;
-    }
-
-
-    public final MidiDevice getDevice(MidiDevice.Info info) {
-        if (info instanceof Info) {
-            readDeviceInfos();
-            MidiDevice[] devices = getDeviceCache();
-            Info[] infos = getInfoCache();
-            Info thisInfo = (Info) info;
-            int index = thisInfo.getIndex();
-            if (index >= 0 && index < devices.length && infos[index] == info) {
-                if (devices[index] == null) {
-                    devices[index] = createDevice(thisInfo);
-                }
-                if (devices[index] != null) {
-                    return devices[index];
-                }
-            }
-        }
-
-        throw new IllegalArgumentException("MidiDevice " + info.toString()
-                                           + " not supported by this provider.");
-    }
-
-
-    // INNER CLASSES
-
-
-    /**
-     * Info class for MidiDevices.  Adds an index value for
-     * making native references to a particular device.
-     */
-    static class Info extends MidiDevice.Info {
-        private int index;
-
-        Info(String name, String vendor, String description, String version, int index) {
-            super(name, vendor, description, version);
-            this.index = index;
-        }
-
-        final boolean equalStrings(Info info) {
-            return      (info != null
-                         && getName().equals(info.getName())
-                         && getVendor().equals(info.getVendor())
-                         && getDescription().equals(info.getDescription())
-                         && getVersion().equals(info.getVersion()));
-        }
-
-        final int getIndex() {
-            return index;
-        }
-
-        final void setIndex(int index) {
-            this.index = index;
-        }
-
-    } // class Info
-
-
-    // ABSTRACT METHODS
-
-    abstract int getNumDevices();
-    abstract MidiDevice[] getDeviceCache();
-    abstract void setDeviceCache(MidiDevice[] devices);
-    abstract Info[] getInfoCache();
-    abstract void setInfoCache(Info[] infos);
-
-    abstract Info createInfo(int index);
-    abstract MidiDevice createDevice(Info info);
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/AbstractMixer.java b/ojluni/src/main/java/com/sun/media/sound/AbstractMixer.java
deleted file mode 100755
index 1055fc6..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/AbstractMixer.java
+++ /dev/null
@@ -1,556 +0,0 @@
-/*
- * Copyright (c) 1999, 2013, 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.media.sound;
-
-import java.util.Vector;
-
-import javax.sound.sampled.Control;
-import javax.sound.sampled.Mixer;
-import javax.sound.sampled.Line;
-import javax.sound.sampled.LineUnavailableException;
-
-/**
- * Abstract Mixer.  Implements Mixer (with abstract methods) and specifies
- * some other common methods for use by our implementation.
- *
- * @author Kara Kytle
- */
-//$$fb 2002-07-26: let AbstractMixer be an AbstractLine and NOT an AbstractDataLine!
-abstract class AbstractMixer extends AbstractLine implements Mixer {
-
-    //  STATIC VARIABLES
-    protected static final int PCM  = 0;
-    protected static final int ULAW = 1;
-    protected static final int ALAW = 2;
-
-
-    // IMMUTABLE PROPERTIES
-
-    /**
-     * Info object describing this mixer.
-     */
-    private final Mixer.Info mixerInfo;
-
-    /**
-     * source lines provided by this mixer
-     */
-    protected Line.Info[] sourceLineInfo;
-
-    /**
-     * target lines provided by this mixer
-     */
-    protected Line.Info[] targetLineInfo;
-
-    /**
-     * if any line of this mixer is started
-     */
-    private boolean started = false;
-
-    /**
-     * if this mixer had been opened manually with open()
-     * If it was, then it won't be closed automatically,
-     * only when close() is called manually.
-     */
-    private boolean manuallyOpened = false;
-
-
-    /**
-     * Supported formats for the mixer.
-     */
-    //$$fb DELETE
-    //protected Vector formats = new Vector();
-
-
-    // STATE VARIABLES
-
-
-    /**
-     * Source lines (ports) currently open
-     */
-    private final Vector sourceLines = new Vector();
-
-
-    /**
-     * Target lines currently open.
-     */
-    private final Vector targetLines = new Vector();
-
-
-    /**
-     * Constructs a new AbstractMixer.
-     * @param mixer the mixer with which this line is associated
-     * @param controls set of supported controls
-     */
-    protected AbstractMixer(Mixer.Info mixerInfo,
-                            Control[] controls,
-                            Line.Info[] sourceLineInfo,
-                            Line.Info[] targetLineInfo) {
-
-        // Line.Info, AbstractMixer, Control[]
-        super(new Line.Info(Mixer.class), null, controls);
-
-        // setup the line part
-        this.mixer = this;
-        if (controls == null) {
-            controls = new Control[0];
-        }
-
-        // setup the mixer part
-        this.mixerInfo = mixerInfo;
-        this.sourceLineInfo = sourceLineInfo;
-        this.targetLineInfo = targetLineInfo;
-    }
-
-
-    // MIXER METHODS
-
-
-    public final Mixer.Info getMixerInfo() {
-        return mixerInfo;
-    }
-
-
-    public final Line.Info[] getSourceLineInfo() {
-        Line.Info[] localArray = new Line.Info[sourceLineInfo.length];
-        System.arraycopy(sourceLineInfo, 0, localArray, 0, sourceLineInfo.length);
-        return localArray;
-    }
-
-
-    public final Line.Info[] getTargetLineInfo() {
-
-        Line.Info[] localArray = new Line.Info[targetLineInfo.length];
-        System.arraycopy(targetLineInfo, 0, localArray, 0, targetLineInfo.length);
-        return localArray;
-    }
-
-
-    public final Line.Info[] getSourceLineInfo(Line.Info info) {
-
-        int i;
-        Vector vec = new Vector();
-
-        for (i = 0; i < sourceLineInfo.length; i++) {
-
-            if (info.matches(sourceLineInfo[i])) {
-                vec.addElement(sourceLineInfo[i]);
-            }
-        }
-
-        Line.Info[] returnedArray = new Line.Info[vec.size()];
-        for (i = 0; i < returnedArray.length; i++) {
-            returnedArray[i] = (Line.Info)vec.elementAt(i);
-        }
-
-        return returnedArray;
-    }
-
-
-    public final Line.Info[] getTargetLineInfo(Line.Info info) {
-
-        int i;
-        Vector vec = new Vector();
-
-        for (i = 0; i < targetLineInfo.length; i++) {
-
-            if (info.matches(targetLineInfo[i])) {
-                vec.addElement(targetLineInfo[i]);
-            }
-        }
-
-        Line.Info[] returnedArray = new Line.Info[vec.size()];
-        for (i = 0; i < returnedArray.length; i++) {
-            returnedArray[i] = (Line.Info)vec.elementAt(i);
-        }
-
-        return returnedArray;
-    }
-
-
-    public final boolean isLineSupported(Line.Info info) {
-
-        int i;
-
-        for (i = 0; i < sourceLineInfo.length; i++) {
-
-            if (info.matches(sourceLineInfo[i])) {
-                return true;
-            }
-        }
-
-        for (i = 0; i < targetLineInfo.length; i++) {
-
-            if (info.matches(targetLineInfo[i])) {
-                return true;
-            }
-        }
-
-        return false;
-    }
-
-
-    public abstract Line getLine(Line.Info info) throws LineUnavailableException;
-
-    public abstract int getMaxLines(Line.Info info);
-
-    protected abstract void implOpen() throws LineUnavailableException;
-    protected abstract void implStart();
-    protected abstract void implStop();
-    protected abstract void implClose();
-
-
-    public final Line[] getSourceLines() {
-
-        Line[] localLines;
-
-        synchronized(sourceLines) {
-
-            localLines = new Line[sourceLines.size()];
-
-            for (int i = 0; i < localLines.length; i++) {
-                localLines[i] = (Line)sourceLines.elementAt(i);
-            }
-        }
-
-        return localLines;
-    }
-
-
-    public final Line[] getTargetLines() {
-
-        Line[] localLines;
-
-        synchronized(targetLines) {
-
-            localLines = new Line[targetLines.size()];
-
-            for (int i = 0; i < localLines.length; i++) {
-                localLines[i] = (Line)targetLines.elementAt(i);
-            }
-        }
-
-        return localLines;
-    }
-
-
-    /**
-     * Default implementation always throws an exception.
-     */
-    public final void synchronize(Line[] lines, boolean maintainSync) {
-        throw new IllegalArgumentException("Synchronization not supported by this mixer.");
-    }
-
-
-    /**
-     * Default implementation always throws an exception.
-     */
-    public final void unsynchronize(Line[] lines) {
-        throw new IllegalArgumentException("Synchronization not supported by this mixer.");
-    }
-
-
-    /**
-     * Default implementation always returns false.
-     */
-    public final boolean isSynchronizationSupported(Line[] lines,
-                                                    boolean maintainSync) {
-        return false;
-    }
-
-
-    // OVERRIDES OF ABSTRACT DATA LINE METHODS
-
-    /**
-     * This implementation tries to open the mixer with its current format and buffer size settings.
-     */
-    public final synchronized void open() throws LineUnavailableException {
-        open(true);
-    }
-
-    /**
-     * This implementation tries to open the mixer with its current format and buffer size settings.
-     */
-    final synchronized void open(boolean manual) throws LineUnavailableException {
-        if (Printer.trace) Printer.trace(">> AbstractMixer: open()");
-        if (!isOpen()) {
-            implOpen();
-            // if the mixer is not currently open, set open to true and send event
-            setOpen(true);
-            if (manual) {
-                manuallyOpened = true;
-            }
-        }
-
-        if (Printer.trace) Printer.trace("<< AbstractMixer: open() succeeded");
-    }
-
-
-    // METHOD FOR INTERNAL IMPLEMENTATION USE
-
-
-    /**
-     * The default implementation of this method just determines whether
-     * this line is a source or target line, calls open(no-arg) on the
-     * mixer, and adds the line to the appropriate vector.
-     * The mixer may be opened at a format different than the line's
-     * format if it is a DataLine.
-     */
-    final synchronized void open(Line line) throws LineUnavailableException {
-
-        if (Printer.trace) Printer.trace(">> AbstractMixer: open(line = " + line + ")");
-
-        // $$kk: 06.11.99: ignore ourselves for now
-        if (this.equals(line)) {
-            if (Printer.trace) Printer.trace("<< AbstractMixer: open(" + line + ") nothing done");
-            return;
-        }
-
-        // source line?
-        if (isSourceLine(line.getLineInfo())) {
-            if (! sourceLines.contains(line) ) {
-                // call the no-arg open method for the mixer; it should open at its
-                // default format if it is not open yet
-                open(false);
-
-                // we opened successfully! add the line to the list
-                sourceLines.addElement(line);
-            }
-        } else {
-            // target line?
-            if(isTargetLine(line.getLineInfo())) {
-                if (! targetLines.contains(line) ) {
-                    // call the no-arg open method for the mixer; it should open at its
-                    // default format if it is not open yet
-                    open(false);
-
-                    // we opened successfully!  add the line to the list
-                    targetLines.addElement(line);
-                }
-            } else {
-                if (Printer.err) Printer.err("Unknown line received for AbstractMixer.open(Line): " + line);
-            }
-        }
-
-        if (Printer.trace) Printer.trace("<< AbstractMixer: open(" + line + ") completed");
-    }
-
-
-    /**
-     * Removes this line from the list of open source lines and
-     * open target lines, if it exists in either.
-     * If the list is now empty, closes the mixer.
-     */
-    final synchronized void close(Line line) {
-
-        if (Printer.trace) Printer.trace(">> AbstractMixer: close(" + line + ")");
-
-        // $$kk: 06.11.99: ignore ourselves for now
-        if (this.equals(line)) {
-            if (Printer.trace) Printer.trace("<< AbstractMixer: close(" + line + ") nothing done");
-            return;
-        }
-
-        sourceLines.removeElement(line);
-        targetLines.removeElement(line);
-
-        if (Printer.debug) Printer.debug("AbstractMixer: close(line): sourceLines.size() now: " + sourceLines.size());
-        if (Printer.debug) Printer.debug("AbstractMixer: close(line): targetLines.size() now: " + targetLines.size());
-
-
-        if (sourceLines.isEmpty() && targetLines.isEmpty() && !manuallyOpened) {
-            if (Printer.trace) Printer.trace("AbstractMixer: close(" + line + "): need to close the mixer");
-            close();
-        }
-
-        if (Printer.trace) Printer.trace("<< AbstractMixer: close(" + line + ") succeeded");
-    }
-
-
-    /**
-     * Close all lines and then close this mixer.
-     */
-    public final synchronized void close() {
-        if (Printer.trace) Printer.trace(">> AbstractMixer: close()");
-        if (isOpen()) {
-            // close all source lines
-            Line[] localLines = getSourceLines();
-            for (int i = 0; i<localLines.length; i++) {
-                localLines[i].close();
-            }
-
-            // close all target lines
-            localLines = getTargetLines();
-            for (int i = 0; i<localLines.length; i++) {
-                localLines[i].close();
-            }
-
-            implClose();
-
-            // set the open state to false and send events
-            setOpen(false);
-        }
-        manuallyOpened = false;
-        if (Printer.trace) Printer.trace("<< AbstractMixer: close() succeeded");
-    }
-
-    /**
-     * Starts the mixer.
-     */
-    final synchronized void start(Line line) {
-
-        if (Printer.trace) Printer.trace(">> AbstractMixer: start(" + line + ")");
-
-        // $$kk: 06.11.99: ignore ourselves for now
-        if (this.equals(line)) {
-            if (Printer.trace) Printer.trace("<< AbstractMixer: start(" + line + ") nothing done");
-            return;
-        }
-
-        // we just start the mixer regardless of anything else here.
-        if (!started) {
-            if (Printer.debug) Printer.debug("AbstractMixer: start(line): starting the mixer");
-            implStart();
-            started = true;
-        }
-
-        if (Printer.trace) Printer.trace("<< AbstractMixer: start(" + line + ") succeeded");
-    }
-
-
-    /**
-     * Stops the mixer if this was the last running line.
-     */
-    final synchronized void stop(Line line) {
-
-        if (Printer.trace) Printer.trace(">> AbstractMixer: stop(" + line + ")");
-
-        // $$kk: 06.11.99: ignore ourselves for now
-        if (this.equals(line)) {
-            if (Printer.trace) Printer.trace("<< AbstractMixer: stop(" + line + ") nothing done");
-            return;
-        }
-
-        Vector localSourceLines = (Vector)sourceLines.clone();
-        for (int i = 0; i < localSourceLines.size(); i++) {
-
-            // if any other open line is running, return
-
-            // this covers clips and source data lines
-            if (localSourceLines.elementAt(i) instanceof AbstractDataLine) {
-                AbstractDataLine sourceLine = (AbstractDataLine)localSourceLines.elementAt(i);
-                if ( sourceLine.isStartedRunning() && (!sourceLine.equals(line)) ) {
-                    if (Printer.trace) Printer.trace("<< AbstractMixer: stop(" + line + ") found running sourceLine: " + sourceLine);
-                    return;
-                }
-            }
-        }
-
-        Vector localTargetLines = (Vector)targetLines.clone();
-        for (int i = 0; i < localTargetLines.size(); i++) {
-
-            // if any other open line is running, return
-            // this covers target data lines
-            if (localTargetLines.elementAt(i) instanceof AbstractDataLine) {
-                AbstractDataLine targetLine = (AbstractDataLine)localTargetLines.elementAt(i);
-                if ( targetLine.isStartedRunning() && (!targetLine.equals(line)) ) {
-                    if (Printer.trace) Printer.trace("<< AbstractMixer: stop(" + line + ") found running targetLine: " + targetLine);
-                    return;
-                }
-            }
-        }
-
-        // otherwise, stop
-        if (Printer.debug) Printer.debug("AbstractMixer: stop(line): stopping the mixer");
-        started = false;
-        implStop();
-
-        if (Printer.trace) Printer.trace("<< AbstractMixer: stop(" + line + ") succeeded");
-    }
-
-
-
-    /**
-     * Determines whether this is a source line for this mixer.
-     * Right now this just checks whether it's supported, but should
-     * check whether it actually belongs to this mixer....
-     */
-    final boolean isSourceLine(Line.Info info) {
-
-        for (int i = 0; i < sourceLineInfo.length; i++) {
-            if (info.matches(sourceLineInfo[i])) {
-                return true;
-            }
-        }
-
-        return false;
-    }
-
-
-    /**
-     * Determines whether this is a target line for this mixer.
-     * Right now this just checks whether it's supported, but should
-     * check whether it actually belongs to this mixer....
-     */
-    final boolean isTargetLine(Line.Info info) {
-
-        for (int i = 0; i < targetLineInfo.length; i++) {
-            if (info.matches(targetLineInfo[i])) {
-                return true;
-            }
-        }
-
-        return false;
-    }
-
-
-    /**
-     * Returns the first complete Line.Info object it finds that
-     * matches the one specified, or null if no matching Line.Info
-     * object is found.
-     */
-    final Line.Info getLineInfo(Line.Info info) {
-        if (info == null) {
-            return null;
-        }
-        // $$kk: 05.31.99: need to change this so that
-        // the format and buffer size get set in the
-        // returned info object for data lines??
-        for (int i = 0; i < sourceLineInfo.length; i++) {
-            if (info.matches(sourceLineInfo[i])) {
-                return sourceLineInfo[i];
-            }
-        }
-
-        for (int i = 0; i < targetLineInfo.length; i++) {
-            if (info.matches(targetLineInfo[i])) {
-                return targetLineInfo[i];
-            }
-        }
-
-        return null;
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/AiffFileFormat.java b/ojluni/src/main/java/com/sun/media/sound/AiffFileFormat.java
deleted file mode 100755
index 8d5e7f0..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/AiffFileFormat.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Copyright (c) 1999, 2013, 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.media.sound;
-
-import javax.sound.sampled.AudioFileFormat;
-import javax.sound.sampled.AudioFormat;
-
-
-/**
- * AIFF file format.
- *
- * @author Jan Borgersen
- */
-
-final class AiffFileFormat extends AudioFileFormat {
-
-    static final int AIFF_MAGIC         = 1179603533;
-
-    // for writing AIFF
-    static final int AIFC_MAGIC                 = 0x41494643;   // 'AIFC'
-    static final int AIFF_MAGIC2                = 0x41494646;   // 'AIFF'
-    static final int FVER_MAGIC                 = 0x46564552;   // 'FVER'
-    static final int FVER_TIMESTAMP             = 0xA2805140;   // timestamp of last AIFF-C update
-    static final int COMM_MAGIC                 = 0x434f4d4d;   // 'COMM'
-    static final int SSND_MAGIC                 = 0x53534e44;   // 'SSND'
-
-    // compression codes
-    static final int AIFC_PCM                   = 0x4e4f4e45;   // 'NONE' PCM
-    static final int AIFC_ACE2                  = 0x41434532;   // 'ACE2' ACE 2:1 compression
-    static final int AIFC_ACE8                  = 0x41434538;   // 'ACE8' ACE 8:3 compression
-    static final int AIFC_MAC3                  = 0x4d414333;   // 'MAC3' MACE 3:1 compression
-    static final int AIFC_MAC6                  = 0x4d414336;   // 'MAC6' MACE 6:1 compression
-    static final int AIFC_ULAW                  = 0x756c6177;   // 'ulaw' ITU G.711 u-Law
-    static final int AIFC_IMA4                  = 0x696d6134;   // 'ima4' IMA ADPCM
-
-    // $$fb static approach not good, but needed for estimation
-    static final int AIFF_HEADERSIZE    = 54;
-
-    //$$fb 2001-07-13: added management of header size in this class
-
-    /** header size in bytes */
-    private final int headerSize=AIFF_HEADERSIZE;
-
-    /** comm chunk size in bytes, inclusive magic and length field */
-    private final int commChunkSize=26;
-
-    /** FVER chunk size in bytes, inclusive magic and length field */
-    private final int fverChunkSize=0;
-
-    AiffFileFormat( AudioFileFormat aff ) {
-        this( aff.getType(), aff.getByteLength(), aff.getFormat(), aff.getFrameLength() );
-    }
-
-    AiffFileFormat(Type type, int byteLength, AudioFormat format, int frameLength) {
-        super(type, byteLength, format, frameLength);
-    }
-
-    int getHeaderSize() {
-        return headerSize;
-    }
-
-    int getCommChunkSize() {
-        return commChunkSize;
-    }
-
-    int getFverChunkSize() {
-        return fverChunkSize;
-    }
-
-    int getSsndChunkOffset() {
-        return getHeaderSize()-16;
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/AiffFileReader.java b/ojluni/src/main/java/com/sun/media/sound/AiffFileReader.java
deleted file mode 100755
index 93d425e..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/AiffFileReader.java
+++ /dev/null
@@ -1,444 +0,0 @@
-/*
- * Copyright (c) 1999, 2013, 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.media.sound;
-
-import java.io.DataInputStream;
-import java.io.DataOutputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-
-import javax.sound.sampled.AudioFileFormat;
-import javax.sound.sampled.AudioFormat;
-import javax.sound.sampled.AudioInputStream;
-import javax.sound.sampled.AudioSystem;
-import javax.sound.sampled.UnsupportedAudioFileException;
-
-
-/**
- * AIFF file reader and writer.
- *
- * @author Kara Kytle
- * @author Jan Borgersen
- * @author Florian Bomers
- */
-public final class AiffFileReader extends SunFileReader {
-
-    private static final int MAX_READ_LENGTH = 8;
-
-    /**
-     * Constructs a new AiffParser object.
-     */
-    public AiffFileReader() {
-    }
-
-
-
-
-    // METHODS TO IMPLEMENT AudioFileReader
-
-    /**
-     * Obtains the audio file format of the input stream provided.  The stream must
-     * point to valid audio file data.  In general, audio file providers may
-     * need to read some data from the stream before determining whether they
-     * support it.  These parsers must
-     * be able to mark the stream, read enough data to determine whether they
-     * support the stream, and, if not, reset the stream's read pointer to its original
-     * position.  If the input stream does not support this, this method may fail
-     * with an IOException.
-     * @param stream the input stream from which file format information should be
-     * extracted
-     * @return an <code>AudioFileFormat</code> object describing the audio file format
-     * @throws UnsupportedAudioFileException if the stream does not point to valid audio
-     * file data recognized by the system
-     * @throws IOException if an I/O exception occurs
-     * @see InputStream#markSupported
-     * @see InputStream#mark
-     */
-    public AudioFileFormat getAudioFileFormat(InputStream stream) throws UnsupportedAudioFileException, IOException {
-        // fix for 4489272: AudioSystem.getAudioFileFormat() fails for InputStream, but works for URL
-        AudioFileFormat aff = getCOMM(stream, true);
-        // the following is not strictly necessary - but was implemented like that in 1.3.0 - 1.4.1
-        // so I leave it as it was. May remove this for 1.5.0
-        stream.reset();
-        return aff;
-    }
-
-
-    /**
-     * Obtains the audio file format of the URL provided.  The URL must
-     * point to valid audio file data.
-     * @param url the URL from which file format information should be
-     * extracted
-     * @return an <code>AudioFileFormat</code> object describing the audio file format
-     * @throws UnsupportedAudioFileException if the URL does not point to valid audio
-     * file data recognized by the system
-     * @throws IOException if an I/O exception occurs
-     */
-    public AudioFileFormat getAudioFileFormat(URL url) throws UnsupportedAudioFileException, IOException {
-        AudioFileFormat fileFormat = null;
-        InputStream urlStream = url.openStream();       // throws IOException
-        try {
-            fileFormat = getCOMM(urlStream, false);
-        } finally {
-            urlStream.close();
-        }
-        return fileFormat;
-    }
-
-
-    /**
-     * Obtains the audio file format of the File provided.  The File must
-     * point to valid audio file data.
-     * @param file the File from which file format information should be
-     * extracted
-     * @return an <code>AudioFileFormat</code> object describing the audio file format
-     * @throws UnsupportedAudioFileException if the File does not point to valid audio
-     * file data recognized by the system
-     * @throws IOException if an I/O exception occurs
-     */
-    public AudioFileFormat getAudioFileFormat(File file) throws UnsupportedAudioFileException, IOException {
-        AudioFileFormat fileFormat = null;
-        FileInputStream fis = new FileInputStream(file);       // throws IOException
-        // part of fix for 4325421
-        try {
-            fileFormat = getCOMM(fis, false);
-        } finally {
-            fis.close();
-        }
-
-        return fileFormat;
-    }
-
-
-
-
-    /**
-     * Obtains an audio stream from the input stream provided.  The stream must
-     * point to valid audio file data.  In general, audio file providers may
-     * need to read some data from the stream before determining whether they
-     * support it.  These parsers must
-     * be able to mark the stream, read enough data to determine whether they
-     * support the stream, and, if not, reset the stream's read pointer to its original
-     * position.  If the input stream does not support this, this method may fail
-     * with an IOException.
-     * @param stream the input stream from which the <code>AudioInputStream</code> should be
-     * constructed
-     * @return an <code>AudioInputStream</code> object based on the audio file data contained
-     * in the input stream.
-     * @throws UnsupportedAudioFileException if the stream does not point to valid audio
-     * file data recognized by the system
-     * @throws IOException if an I/O exception occurs
-     * @see InputStream#markSupported
-     * @see InputStream#mark
-     */
-    public AudioInputStream getAudioInputStream(InputStream stream) throws UnsupportedAudioFileException, IOException {
-        // getCOMM leaves the input stream at the beginning of the audio data
-        AudioFileFormat fileFormat = getCOMM(stream, true);     // throws UnsupportedAudioFileException, IOException
-
-        // we've got everything, and the stream is at the
-        // beginning of the audio data, so return an AudioInputStream.
-        return new AudioInputStream(stream, fileFormat.getFormat(), fileFormat.getFrameLength());
-    }
-
-
-    /**
-     * Obtains an audio stream from the URL provided.  The URL must
-     * point to valid audio file data.
-     * @param url the URL for which the <code>AudioInputStream</code> should be
-     * constructed
-     * @return an <code>AudioInputStream</code> object based on the audio file data pointed
-     * to by the URL
-     * @throws UnsupportedAudioFileException if the URL does not point to valid audio
-     * file data recognized by the system
-     * @throws IOException if an I/O exception occurs
-     */
-    public AudioInputStream getAudioInputStream(URL url) throws UnsupportedAudioFileException, IOException {
-        InputStream urlStream = url.openStream();  // throws IOException
-        AudioFileFormat fileFormat = null;
-        try {
-            fileFormat = getCOMM(urlStream, false);
-        } finally {
-            if (fileFormat == null) {
-                urlStream.close();
-            }
-        }
-        return new AudioInputStream(urlStream, fileFormat.getFormat(), fileFormat.getFrameLength());
-    }
-
-
-    /**
-     * Obtains an audio stream from the File provided.  The File must
-     * point to valid audio file data.
-     * @param file the File for which the <code>AudioInputStream</code> should be
-     * constructed
-     * @return an <code>AudioInputStream</code> object based on the audio file data pointed
-     * to by the File
-     * @throws UnsupportedAudioFileException if the File does not point to valid audio
-     * file data recognized by the system
-     * @throws IOException if an I/O exception occurs
-     */
-    public AudioInputStream getAudioInputStream(File file)
-        throws UnsupportedAudioFileException, IOException {
-
-        FileInputStream fis = new FileInputStream(file); // throws IOException
-        AudioFileFormat fileFormat = null;
-        // part of fix for 4325421
-        try {
-            fileFormat = getCOMM(fis, false);
-        } finally {
-            if (fileFormat == null) {
-                fis.close();
-            }
-        }
-        return new AudioInputStream(fis, fileFormat.getFormat(), fileFormat.getFrameLength());
-    }
-
-    //--------------------------------------------------------------------
-
-    private AudioFileFormat getCOMM(InputStream is, boolean doReset)
-        throws UnsupportedAudioFileException, IOException {
-
-        DataInputStream dis = new DataInputStream(is);
-
-        if (doReset) {
-            dis.mark(MAX_READ_LENGTH);
-        }
-
-        // assumes a stream at the beginning of the file which has already
-        // passed the magic number test...
-        // leaves the input stream at the beginning of the audio data
-        int fileRead = 0;
-        int dataLength = 0;
-        AudioFormat format = null;
-
-        // Read the magic number
-        int magic = dis.readInt();
-
-        // $$fb: fix for 4369044: javax.sound.sampled.AudioSystem.getAudioInputStream() works wrong with Cp037
-        if (magic != AiffFileFormat.AIFF_MAGIC) {
-            // not AIFF, throw exception
-            if (doReset) {
-                dis.reset();
-            }
-            throw new UnsupportedAudioFileException("not an AIFF file");
-        }
-
-        int length = dis.readInt();
-        int iffType = dis.readInt();
-        fileRead += 12;
-
-        int totallength;
-        if(length <= 0 ) {
-            length = AudioSystem.NOT_SPECIFIED;
-            totallength = AudioSystem.NOT_SPECIFIED;
-        } else {
-            totallength = length + 8;
-        }
-
-        // Is this an AIFC or just plain AIFF file.
-        boolean aifc = false;
-        // $$fb: fix for 4369044: javax.sound.sampled.AudioSystem.getAudioInputStream() works wrong with Cp037
-        if (iffType ==  AiffFileFormat.AIFC_MAGIC) {
-            aifc = true;
-        }
-
-        // Loop through the AIFF chunks until
-        // we get to the SSND chunk.
-        boolean ssndFound = false;
-        while (!ssndFound) {
-            // Read the chunk name
-            int chunkName = dis.readInt();
-            int chunkLen = dis.readInt();
-            fileRead += 8;
-
-            int chunkRead = 0;
-
-            // Switch on the chunk name.
-            switch (chunkName) {
-            case AiffFileFormat.FVER_MAGIC:
-                // Ignore format version for now.
-                break;
-
-            case AiffFileFormat.COMM_MAGIC:
-                // AIFF vs. AIFC
-                // $$fb: fix for 4399551: Repost of bug candidate: cannot replay aif file (Review ID: 108108)
-                if ((!aifc && chunkLen < 18) || (aifc && chunkLen < 22)) {
-                    throw new UnsupportedAudioFileException("Invalid AIFF/COMM chunksize");
-                }
-                // Read header info.
-                int channels = dis.readShort();
-                dis.readInt();
-                int sampleSizeInBits = dis.readShort();
-                float sampleRate = (float) read_ieee_extended(dis);
-                chunkRead += (2 + 4 + 2 + 10);
-
-                // If this is not AIFC then we assume it's
-                // a linearly encoded file.
-                AudioFormat.Encoding encoding = AudioFormat.Encoding.PCM_SIGNED;
-
-                if (aifc) {
-                    int enc = dis.readInt(); chunkRead += 4;
-                    switch (enc) {
-                    case AiffFileFormat.AIFC_PCM:
-                        encoding = AudioFormat.Encoding.PCM_SIGNED;
-                        break;
-                    case AiffFileFormat.AIFC_ULAW:
-                        encoding = AudioFormat.Encoding.ULAW;
-                        sampleSizeInBits = 8; // Java Sound convention
-                        break;
-                    default:
-                        throw new UnsupportedAudioFileException("Invalid AIFF encoding");
-                    }
-                }
-                int frameSize = calculatePCMFrameSize(sampleSizeInBits, channels);
-                //$fb what's that ??
-                //if (sampleSizeInBits == 8) {
-                //    encoding = AudioFormat.Encoding.PCM_SIGNED;
-                //}
-                format =  new AudioFormat(encoding, sampleRate,
-                                          sampleSizeInBits, channels,
-                                          frameSize, sampleRate, true);
-                break;
-            case AiffFileFormat.SSND_MAGIC:
-                // Data chunk.
-                // we are getting *weird* numbers for chunkLen sometimes;
-                // this really should be the size of the data chunk....
-                int dataOffset = dis.readInt();
-                int blocksize = dis.readInt();
-                chunkRead += 8;
-
-                // okay, now we are done reading the header.  we need to set the size
-                // of the data segment.  we know that sometimes the value we get for
-                // the chunksize is absurd.  this is the best i can think of:if the
-                // value seems okay, use it.  otherwise, we get our value of
-                // length by assuming that everything left is the data segment;
-                // its length should be our original length (for all AIFF data chunks)
-                // minus what we've read so far.
-                // $$kk: we should be able to get length for the data chunk right after
-                // we find "SSND."  however, some aiff files give *weird* numbers.  what
-                // is going on??
-
-                if (chunkLen < length) {
-                    dataLength = chunkLen - chunkRead;
-                } else {
-                    // $$kk: 11.03.98: this seems dangerous!
-                    dataLength = length - (fileRead + chunkRead);
-                }
-                ssndFound = true;
-                break;
-            } // switch
-            fileRead += chunkRead;
-            // skip the remainder of this chunk
-            if (!ssndFound) {
-                int toSkip = chunkLen - chunkRead;
-                if (toSkip > 0) {
-                    fileRead += dis.skipBytes(toSkip);
-                }
-            }
-        } // while
-
-        if (format == null) {
-            throw new UnsupportedAudioFileException("missing COMM chunk");
-        }
-        AudioFileFormat.Type type = aifc?AudioFileFormat.Type.AIFC:AudioFileFormat.Type.AIFF;
-
-        return new AiffFileFormat(type, totallength, format, dataLength / format.getFrameSize());
-    }
-
-    // HELPER METHODS
-    /** write_ieee_extended(DataOutputStream dos, double f) throws IOException {
-     * Extended precision IEEE floating-point conversion routine.
-     * @argument DataOutputStream
-     * @argument double
-     * @return void
-     * @exception IOException
-     */
-    private void write_ieee_extended(DataOutputStream dos, double f) throws IOException {
-
-        int exponent = 16398;
-        double highMantissa = f;
-
-        // For now write the integer portion of f
-        // $$jb: 03.30.99: stay in synch with JMF on this!!!!
-        while (highMantissa < 44000) {
-            highMantissa *= 2;
-            exponent--;
-        }
-        dos.writeShort(exponent);
-        dos.writeInt( ((int) highMantissa) << 16);
-        dos.writeInt(0); // low Mantissa
-    }
-
-
-    /**
-     * read_ieee_extended
-     * Extended precision IEEE floating-point conversion routine.
-     * @argument DataInputStream
-     * @return double
-     * @exception IOException
-     */
-    private double read_ieee_extended(DataInputStream dis) throws IOException {
-
-        double f = 0;
-        int expon = 0;
-        long hiMant = 0, loMant = 0;
-        long t1, t2;
-        double HUGE = ((double)3.40282346638528860e+38);
-
-
-        expon = dis.readUnsignedShort();
-
-        t1 = (long)dis.readUnsignedShort();
-        t2 = (long)dis.readUnsignedShort();
-        hiMant = t1 << 16 | t2;
-
-        t1 = (long)dis.readUnsignedShort();
-        t2 = (long)dis.readUnsignedShort();
-        loMant = t1 << 16 | t2;
-
-        if (expon == 0 && hiMant == 0 && loMant == 0) {
-            f = 0;
-        } else {
-            if (expon == 0x7FFF)
-                f = HUGE;
-            else {
-                expon -= 16383;
-                expon -= 31;
-                f = (hiMant * Math.pow(2, expon));
-                expon -= 32;
-                f += (loMant * Math.pow(2, expon));
-            }
-        }
-
-        return f;
-    }
-
-
-
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/AiffFileWriter.java b/ojluni/src/main/java/com/sun/media/sound/AiffFileWriter.java
deleted file mode 100755
index 0f79728..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/AiffFileWriter.java
+++ /dev/null
@@ -1,449 +0,0 @@
-/*
- * Copyright (c) 1999, 2013, 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.media.sound;
-
-import java.io.File;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.IOException;
-
-import java.io.BufferedOutputStream;
-import java.io.DataOutputStream;
-import java.io.FileOutputStream;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.RandomAccessFile;
-import java.io.SequenceInputStream;
-
-import javax.sound.sampled.AudioFileFormat;
-import javax.sound.sampled.AudioInputStream;
-import javax.sound.sampled.AudioFormat;
-import javax.sound.sampled.AudioSystem;
-
-//$$fb this class is buggy. Should be replaced in future.
-
-/**
- * AIFF file writer.
- *
- * @author Jan Borgersen
- */
-public final class AiffFileWriter extends SunFileWriter {
-
-    /**
-     * Constructs a new AiffFileWriter object.
-     */
-    public AiffFileWriter() {
-        super(new AudioFileFormat.Type[]{AudioFileFormat.Type.AIFF});
-    }
-
-
-    // METHODS TO IMPLEMENT AudioFileWriter
-
-    public AudioFileFormat.Type[] getAudioFileTypes(AudioInputStream stream) {
-
-        AudioFileFormat.Type[] filetypes = new AudioFileFormat.Type[types.length];
-        System.arraycopy(types, 0, filetypes, 0, types.length);
-
-        // make sure we can write this stream
-        AudioFormat format = stream.getFormat();
-        AudioFormat.Encoding encoding = format.getEncoding();
-
-        if( (AudioFormat.Encoding.ALAW.equals(encoding)) ||
-            (AudioFormat.Encoding.ULAW.equals(encoding)) ||
-            (AudioFormat.Encoding.PCM_SIGNED.equals(encoding)) ||
-            (AudioFormat.Encoding.PCM_UNSIGNED.equals(encoding)) ) {
-
-            return filetypes;
-        }
-
-        return new AudioFileFormat.Type[0];
-    }
-
-
-    public int write(AudioInputStream stream, AudioFileFormat.Type fileType, OutputStream out) throws IOException {
-
-        //$$fb the following check must come first ! Otherwise
-        // the next frame length check may throw an IOException and
-        // interrupt iterating File Writers. (see bug 4351296)
-
-        // throws IllegalArgumentException if not supported
-        AiffFileFormat aiffFileFormat = (AiffFileFormat)getAudioFileFormat(fileType, stream);
-
-        // we must know the total data length to calculate the file length
-        if( stream.getFrameLength() == AudioSystem.NOT_SPECIFIED ) {
-            throw new IOException("stream length not specified");
-        }
-
-        int bytesWritten = writeAiffFile(stream, aiffFileFormat, out);
-        return bytesWritten;
-    }
-
-
-    public int write(AudioInputStream stream, AudioFileFormat.Type fileType, File out) throws IOException {
-
-        // throws IllegalArgumentException if not supported
-        AiffFileFormat aiffFileFormat = (AiffFileFormat)getAudioFileFormat(fileType, stream);
-
-        // first write the file without worrying about length fields
-        FileOutputStream fos = new FileOutputStream( out );     // throws IOException
-        BufferedOutputStream bos = new BufferedOutputStream( fos, bisBufferSize );
-        int bytesWritten = writeAiffFile(stream, aiffFileFormat, bos );
-        bos.close();
-
-        // now, if length fields were not specified, calculate them,
-        // open as a random access file, write the appropriate fields,
-        // close again....
-        if( aiffFileFormat.getByteLength()== AudioSystem.NOT_SPECIFIED ) {
-
-            // $$kk: 10.22.99: jan: please either implement this or throw an exception!
-            // $$fb: 2001-07-13: done. Fixes Bug 4479981
-            int ssndBlockSize           = (aiffFileFormat.getFormat().getChannels() * aiffFileFormat.getFormat().getSampleSizeInBits());
-
-            int aiffLength=bytesWritten;
-            int ssndChunkSize=aiffLength-aiffFileFormat.getHeaderSize()+16;
-            long dataSize=ssndChunkSize-16;
-            int numFrames=(int) (dataSize*8/ssndBlockSize);
-
-            RandomAccessFile raf=new RandomAccessFile(out, "rw");
-            // skip FORM magic
-            raf.skipBytes(4);
-            raf.writeInt(aiffLength-8);
-            // skip aiff2 magic, fver chunk, comm magic, comm size, channel count,
-            raf.skipBytes(4+aiffFileFormat.getFverChunkSize()+4+4+2);
-            // write frame count
-            raf.writeInt(numFrames);
-            // skip sample size, samplerate, SSND magic
-            raf.skipBytes(2+10+4);
-            raf.writeInt(ssndChunkSize-8);
-            // that's all
-            raf.close();
-        }
-
-        return bytesWritten;
-    }
-
-
-    // -----------------------------------------------------------------------
-
-    /**
-     * Returns the AudioFileFormat describing the file that will be written from this AudioInputStream.
-     * Throws IllegalArgumentException if not supported.
-     */
-    private AudioFileFormat getAudioFileFormat(AudioFileFormat.Type type, AudioInputStream stream) {
-
-        AudioFormat format = null;
-        AiffFileFormat fileFormat = null;
-        AudioFormat.Encoding encoding = AudioFormat.Encoding.PCM_SIGNED;
-
-        AudioFormat streamFormat = stream.getFormat();
-        AudioFormat.Encoding streamEncoding = streamFormat.getEncoding();
-
-
-        float sampleRate;
-        int sampleSizeInBits;
-        int channels;
-        int frameSize;
-        float frameRate;
-        int fileSize;
-        boolean convert8to16 = false;
-
-        if( !types[0].equals(type) ) {
-            throw new IllegalArgumentException("File type " + type + " not supported.");
-        }
-
-        if( (AudioFormat.Encoding.ALAW.equals(streamEncoding)) ||
-            (AudioFormat.Encoding.ULAW.equals(streamEncoding)) ) {
-
-            if( streamFormat.getSampleSizeInBits()==8 ) {
-
-                encoding = AudioFormat.Encoding.PCM_SIGNED;
-                sampleSizeInBits=16;
-                convert8to16 = true;
-
-            } else {
-
-                // can't convert non-8-bit ALAW,ULAW
-                throw new IllegalArgumentException("Encoding " + streamEncoding + " supported only for 8-bit data.");
-            }
-        } else if ( streamFormat.getSampleSizeInBits()==8 ) {
-
-            encoding = AudioFormat.Encoding.PCM_UNSIGNED;
-            sampleSizeInBits=8;
-
-        } else {
-
-            encoding = AudioFormat.Encoding.PCM_SIGNED;
-            sampleSizeInBits=streamFormat.getSampleSizeInBits();
-        }
-
-
-        format = new AudioFormat( encoding,
-                                  streamFormat.getSampleRate(),
-                                  sampleSizeInBits,
-                                  streamFormat.getChannels(),
-                                  streamFormat.getFrameSize(),
-                                  streamFormat.getFrameRate(),
-                                  true);        // AIFF is big endian
-
-
-        if( stream.getFrameLength()!=AudioSystem.NOT_SPECIFIED ) {
-            if( convert8to16 ) {
-                fileSize = (int)stream.getFrameLength()*streamFormat.getFrameSize()*2 + AiffFileFormat.AIFF_HEADERSIZE;
-            } else {
-                fileSize = (int)stream.getFrameLength()*streamFormat.getFrameSize() + AiffFileFormat.AIFF_HEADERSIZE;
-            }
-        } else {
-            fileSize = AudioSystem.NOT_SPECIFIED;
-        }
-
-        fileFormat = new AiffFileFormat( AudioFileFormat.Type.AIFF,
-                                         fileSize,
-                                         format,
-                                         (int)stream.getFrameLength() );
-
-        return fileFormat;
-    }
-
-
-    private int writeAiffFile(InputStream in, AiffFileFormat aiffFileFormat, OutputStream out) throws IOException {
-
-        int bytesRead = 0;
-        int bytesWritten = 0;
-        InputStream fileStream = getFileStream(aiffFileFormat, in);
-        byte buffer[] = new byte[bisBufferSize];
-        int maxLength = aiffFileFormat.getByteLength();
-
-        while( (bytesRead = fileStream.read( buffer )) >= 0 ) {
-            if (maxLength>0) {
-                if( bytesRead < maxLength ) {
-                    out.write( buffer, 0, (int)bytesRead );
-                    bytesWritten += bytesRead;
-                    maxLength -= bytesRead;
-                } else {
-                    out.write( buffer, 0, (int)maxLength );
-                    bytesWritten += maxLength;
-                    maxLength = 0;
-                    break;
-                }
-
-            } else {
-                out.write( buffer, 0, (int)bytesRead );
-                bytesWritten += bytesRead;
-            }
-        }
-
-        return bytesWritten;
-    }
-
-    private InputStream getFileStream(AiffFileFormat aiffFileFormat, InputStream audioStream) throws IOException  {
-
-        // private method ... assumes aiffFileFormat is a supported file format
-
-        AudioFormat format = aiffFileFormat.getFormat();
-        AudioFormat streamFormat = null;
-        AudioFormat.Encoding encoding = null;
-
-        //$$fb a little bit nicer handling of constants
-
-        //int headerSize          = 54;
-        int headerSize          = aiffFileFormat.getHeaderSize();
-
-        //int fverChunkSize       = 0;
-        int fverChunkSize       = aiffFileFormat.getFverChunkSize();
-        //int commChunkSize       = 26;
-        int commChunkSize       = aiffFileFormat.getCommChunkSize();
-        int aiffLength          = -1;
-        int ssndChunkSize       = -1;
-        //int ssndOffset                        = headerSize - 16;
-        int ssndOffset                  = aiffFileFormat.getSsndChunkOffset();
-        short channels = (short) format.getChannels();
-        short sampleSize = (short) format.getSampleSizeInBits();
-        int ssndBlockSize               = (channels * sampleSize);
-        int numFrames                   = aiffFileFormat.getFrameLength();
-        long dataSize            = -1;
-        if( numFrames != AudioSystem.NOT_SPECIFIED) {
-            dataSize = (long) numFrames * ssndBlockSize / 8;
-            ssndChunkSize = (int)dataSize + 16;
-            aiffLength = (int)dataSize+headerSize;
-        }
-        float sampleFramesPerSecond = format.getSampleRate();
-        int compCode = AiffFileFormat.AIFC_PCM;
-
-        byte header[] = null;
-        ByteArrayInputStream headerStream = null;
-        ByteArrayOutputStream baos = null;
-        DataOutputStream dos = null;
-        SequenceInputStream aiffStream = null;
-        InputStream codedAudioStream = audioStream;
-
-        // if we need to do any format conversion, do it here....
-
-        if( audioStream instanceof AudioInputStream ) {
-
-            streamFormat = ((AudioInputStream)audioStream).getFormat();
-            encoding = streamFormat.getEncoding();
-
-
-            // $$jb: Note that AIFF samples are ALWAYS signed
-            if( (AudioFormat.Encoding.PCM_UNSIGNED.equals(encoding)) ||
-                ( (AudioFormat.Encoding.PCM_SIGNED.equals(encoding)) && !streamFormat.isBigEndian() ) ) {
-
-                // plug in the transcoder to convert to PCM_SIGNED. big endian
-                codedAudioStream = AudioSystem.getAudioInputStream( new AudioFormat (
-                                                                                     AudioFormat.Encoding.PCM_SIGNED,
-                                                                                     streamFormat.getSampleRate(),
-                                                                                     streamFormat.getSampleSizeInBits(),
-                                                                                     streamFormat.getChannels(),
-                                                                                     streamFormat.getFrameSize(),
-                                                                                     streamFormat.getFrameRate(),
-                                                                                     true ),
-                                                                    (AudioInputStream)audioStream );
-
-            } else if( (AudioFormat.Encoding.ULAW.equals(encoding)) ||
-                       (AudioFormat.Encoding.ALAW.equals(encoding)) ) {
-
-                if( streamFormat.getSampleSizeInBits() != 8 ) {
-                    throw new IllegalArgumentException("unsupported encoding");
-                }
-
-                                //$$fb 2001-07-13: this is probably not what we want:
-                                //     writing PCM when ULAW/ALAW is requested. AIFC is able to write ULAW !
-
-                                // plug in the transcoder to convert to PCM_SIGNED_BIG_ENDIAN
-                codedAudioStream = AudioSystem.getAudioInputStream( new AudioFormat (
-                                                                                     AudioFormat.Encoding.PCM_SIGNED,
-                                                                                     streamFormat.getSampleRate(),
-                                                                                     streamFormat.getSampleSizeInBits() * 2,
-                                                                                     streamFormat.getChannels(),
-                                                                                     streamFormat.getFrameSize() * 2,
-                                                                                     streamFormat.getFrameRate(),
-                                                                                     true ),
-                                                                    (AudioInputStream)audioStream );
-            }
-        }
-
-
-        // Now create an AIFF stream header...
-        baos = new ByteArrayOutputStream();
-        dos = new DataOutputStream(baos);
-
-        // Write the outer FORM chunk
-        dos.writeInt(AiffFileFormat.AIFF_MAGIC);
-        dos.writeInt( (aiffLength-8) );
-        dos.writeInt(AiffFileFormat.AIFF_MAGIC2);
-
-        // Write a FVER chunk - only for AIFC
-        //dos.writeInt(FVER_MAGIC);
-        //dos.writeInt( (fverChunkSize-8) );
-        //dos.writeInt(FVER_TIMESTAMP);
-
-        // Write a COMM chunk
-        dos.writeInt(AiffFileFormat.COMM_MAGIC);
-        dos.writeInt( (commChunkSize-8) );
-        dos.writeShort(channels);
-        dos.writeInt(numFrames);
-        dos.writeShort(sampleSize);
-        write_ieee_extended(dos, sampleFramesPerSecond);   // 10 bytes
-
-        //Only for AIFC
-        //dos.writeInt(compCode);
-        //dos.writeInt(compCode);
-        //dos.writeShort(0);
-
-        // Write the SSND chunk header
-        dos.writeInt(AiffFileFormat.SSND_MAGIC);
-        dos.writeInt( (ssndChunkSize-8) );
-        // ssndOffset and ssndBlockSize set to 0 upon
-        // recommendation in "Sound Manager" chapter in
-        // "Inside Macintosh Sound", pp 2-87  (from Babu)
-        dos.writeInt(0);        // ssndOffset
-        dos.writeInt(0);        // ssndBlockSize
-
-        // Concat this with the audioStream and return it
-
-        dos.close();
-        header = baos.toByteArray();
-        headerStream = new ByteArrayInputStream( header );
-
-        aiffStream = new SequenceInputStream(headerStream,
-                            new NoCloseInputStream(codedAudioStream));
-
-        return aiffStream;
-
-    }
-
-
-
-
-    // HELPER METHODS
-
-    private static final int DOUBLE_MANTISSA_LENGTH = 52;
-    private static final int DOUBLE_EXPONENT_LENGTH = 11;
-    private static final long DOUBLE_SIGN_MASK     = 0x8000000000000000L;
-    private static final long DOUBLE_EXPONENT_MASK = 0x7FF0000000000000L;
-    private static final long DOUBLE_MANTISSA_MASK = 0x000FFFFFFFFFFFFFL;
-    private static final int DOUBLE_EXPONENT_OFFSET = 1023;
-
-    private static final int EXTENDED_EXPONENT_OFFSET = 16383;
-    private static final int EXTENDED_MANTISSA_LENGTH = 63;
-    private static final int EXTENDED_EXPONENT_LENGTH = 15;
-    private static final long EXTENDED_INTEGER_MASK = 0x8000000000000000L;
-
-    /**
-     * Extended precision IEEE floating-point conversion routine.
-     * @argument DataOutputStream
-     * @argument double
-     * @exception IOException
-     */
-    private void write_ieee_extended(DataOutputStream dos, float f) throws IOException {
-        /* The special cases NaN, Infinity and Zero are ignored, since
-           they do not represent useful sample rates anyway.
-           Denormalized number aren't handled, too. Below, there is a cast
-           from float to double. We hope that in this conversion,
-           numbers are normalized. Numbers that cannot be normalized are
-           ignored, too, as they, too, do not represent useful sample rates. */
-        long doubleBits = Double.doubleToLongBits((double) f);
-
-        long sign = (doubleBits & DOUBLE_SIGN_MASK)
-            >> (DOUBLE_EXPONENT_LENGTH + DOUBLE_MANTISSA_LENGTH);
-        long doubleExponent = (doubleBits & DOUBLE_EXPONENT_MASK)
-            >> DOUBLE_MANTISSA_LENGTH;
-        long doubleMantissa = doubleBits & DOUBLE_MANTISSA_MASK;
-
-        long extendedExponent = doubleExponent - DOUBLE_EXPONENT_OFFSET
-            + EXTENDED_EXPONENT_OFFSET;
-        long extendedMantissa = doubleMantissa
-            << (EXTENDED_MANTISSA_LENGTH - DOUBLE_MANTISSA_LENGTH);
-        long extendedSign = sign << EXTENDED_EXPONENT_LENGTH;
-        short extendedBits79To64 = (short) (extendedSign | extendedExponent);
-        long extendedBits63To0 = EXTENDED_INTEGER_MASK | extendedMantissa;
-
-        dos.writeShort(extendedBits79To64);
-        dos.writeLong(extendedBits63To0);
-    }
-
-
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/AlawCodec.java b/ojluni/src/main/java/com/sun/media/sound/AlawCodec.java
deleted file mode 100755
index dc868b0..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/AlawCodec.java
+++ /dev/null
@@ -1,448 +0,0 @@
-/*
- * Copyright (c) 1999, 2013, 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.media.sound;
-
-import java.io.IOException;
-import java.util.Vector;
-
-import javax.sound.sampled.AudioFormat;
-import javax.sound.sampled.AudioInputStream;
-import javax.sound.sampled.AudioSystem;
-
-
-/**
- * A-law encodes linear data, and decodes a-law data to linear data.
- *
- * @author Kara Kytle
- */
-public final class AlawCodec extends SunCodec {
-
-    /* Tables used for A-law decoding */
-
-    private static final byte[] ALAW_TABH = new byte[256];
-    private static final byte[] ALAW_TABL = new byte[256];
-
-    private static final AudioFormat.Encoding[] alawEncodings = { AudioFormat.Encoding.ALAW, AudioFormat.Encoding.PCM_SIGNED };
-
-    private static final short seg_end [] = {0xFF, 0x1FF, 0x3FF,
-                                             0x7FF, 0xFFF, 0x1FFF, 0x3FFF, 0x7FFF};
-
-    /**
-     * Initializes the decode tables
-     */
-    static {
-        for (int i=0;i<256;i++) {
-            int input    = i ^ 0x55;
-            int mantissa = (input & 0xf ) << 4;
-            int segment  = (input & 0x70) >> 4;
-            int value    = mantissa+8;
-
-            if(segment>=1)
-                value+=0x100;
-            if(segment>1)
-                value <<= (segment -1);
-
-            if( (input & 0x80)==0 )
-                value = -value;
-
-            ALAW_TABL[i] = (byte)value;
-            ALAW_TABH[i] = (byte)(value>>8);
-        }
-    }
-
-
-    /**
-     * Constructs a new ALAW codec object.
-     */
-    public AlawCodec() {
-
-        super(alawEncodings, alawEncodings);
-    }
-
-    // NEW CODE
-
-    /**
-     */
-    public AudioFormat.Encoding[] getTargetEncodings(AudioFormat sourceFormat){
-
-        if( sourceFormat.getEncoding().equals( AudioFormat.Encoding.PCM_SIGNED )) {
-
-            if( sourceFormat.getSampleSizeInBits() == 16 ) {
-
-                AudioFormat.Encoding enc[] = new AudioFormat.Encoding[1];
-                enc[0] = AudioFormat.Encoding.ALAW;
-                return enc;
-
-            } else {
-                return new AudioFormat.Encoding[0];
-            }
-        } else if( sourceFormat.getEncoding().equals( AudioFormat.Encoding.ALAW ) ) {
-
-            if( sourceFormat.getSampleSizeInBits() == 8 ) {
-
-                AudioFormat.Encoding enc[] = new AudioFormat.Encoding[1];
-                enc[0] = AudioFormat.Encoding.PCM_SIGNED;
-                return enc;
-
-            } else {
-                return new AudioFormat.Encoding[0];
-            }
-
-        } else {
-            return new AudioFormat.Encoding[0];
-        }
-    }
-
-    /**
-     */
-    public AudioFormat[] getTargetFormats(AudioFormat.Encoding targetEncoding, AudioFormat sourceFormat){
-        if( (targetEncoding.equals( AudioFormat.Encoding.PCM_SIGNED ) && sourceFormat.getEncoding().equals( AudioFormat.Encoding.ALAW)) ||
-            (targetEncoding.equals( AudioFormat.Encoding.ALAW) && sourceFormat.getEncoding().equals( AudioFormat.Encoding.PCM_SIGNED)) ) {
-                return getOutputFormats( sourceFormat );
-            } else {
-                return new AudioFormat[0];
-            }
-    }
-
-    /**
-     */
-    public AudioInputStream getAudioInputStream(AudioFormat.Encoding targetEncoding, AudioInputStream sourceStream){
-        AudioFormat sourceFormat = sourceStream.getFormat();
-        AudioFormat.Encoding sourceEncoding = sourceFormat.getEncoding();
-
-        if( sourceEncoding.equals( targetEncoding ) ) {
-            return sourceStream;
-        } else {
-            AudioFormat targetFormat = null;
-            if( !isConversionSupported(targetEncoding,sourceStream.getFormat()) ) {
-                throw new IllegalArgumentException("Unsupported conversion: " + sourceStream.getFormat().toString() + " to " + targetEncoding.toString());
-            }
-            if( sourceEncoding.equals( AudioFormat.Encoding.ALAW ) &&
-                targetEncoding.equals( AudioFormat.Encoding.PCM_SIGNED ) ) {
-
-                targetFormat = new AudioFormat( targetEncoding,
-                                                sourceFormat.getSampleRate(),
-                                                16,
-                                                sourceFormat.getChannels(),
-                                                2*sourceFormat.getChannels(),
-                                                sourceFormat.getSampleRate(),
-                                                sourceFormat.isBigEndian());
-
-            } else if( sourceEncoding.equals( AudioFormat.Encoding.PCM_SIGNED ) &&
-                       targetEncoding.equals( AudioFormat.Encoding.ALAW ) ) {
-
-                targetFormat = new AudioFormat( targetEncoding,
-                                                sourceFormat.getSampleRate(),
-                                                8,
-                                                sourceFormat.getChannels(),
-                                                sourceFormat.getChannels(),
-                                                sourceFormat.getSampleRate(),
-                                                false);
-            } else {
-                throw new IllegalArgumentException("Unsupported conversion: " + sourceStream.getFormat().toString() + " to " + targetEncoding.toString());
-            }
-            return getAudioInputStream( targetFormat, sourceStream );
-        }
-    }
-
-    /**
-     * use old code...
-     */
-    public AudioInputStream getAudioInputStream(AudioFormat targetFormat, AudioInputStream sourceStream){
-        return getConvertedStream( targetFormat, sourceStream );
-    }
-
-
-    // OLD CODE
-
-
-    /**
-     * Opens the codec with the specified parameters.
-     * @param stream stream from which data to be processed should be read
-     * @param outputFormat desired data format of the stream after processing
-     * @return stream from which processed data may be read
-     * @throws IllegalArgumentException if the format combination supplied is
-     * not supported.
-     */
-    /*  public AudioInputStream getConvertedStream(AudioFormat outputFormat, AudioInputStream stream) { */
-    private AudioInputStream getConvertedStream(AudioFormat outputFormat, AudioInputStream stream) {
-
-        AudioInputStream cs = null;
-        AudioFormat inputFormat = stream.getFormat();
-
-        if( inputFormat.matches(outputFormat) ) {
-            cs = stream;
-        } else {
-            cs = (AudioInputStream) (new AlawCodecStream(stream, outputFormat));
-        }
-
-        return cs;
-    }
-
-    /**
-     * Obtains the set of output formats supported by the codec
-     * given a particular input format.
-     * If no output formats are supported for this input format,
-     * returns an array of length 0.
-     * @return array of supported output formats.
-     */
-    /*  public AudioFormat[] getOutputFormats(AudioFormat inputFormat) { */
-    private AudioFormat[] getOutputFormats(AudioFormat inputFormat) {
-
-
-        Vector formats = new Vector();
-        AudioFormat format;
-
-        if ( AudioFormat.Encoding.PCM_SIGNED.equals(inputFormat.getEncoding())) {
-            format = new AudioFormat(AudioFormat.Encoding.ALAW,
-                                     inputFormat.getSampleRate(),
-                                     8,
-                                     inputFormat.getChannels(),
-                                     inputFormat.getChannels(),
-                                     inputFormat.getSampleRate(),
-                                     false );
-            formats.addElement(format);
-        }
-
-        if (AudioFormat.Encoding.ALAW.equals(inputFormat.getEncoding())) {
-            format = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,
-                                     inputFormat.getSampleRate(),
-                                     16,
-                                     inputFormat.getChannels(),
-                                     inputFormat.getChannels()*2,
-                                     inputFormat.getSampleRate(),
-                                     false );
-            formats.addElement(format);
-            format = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,
-                                     inputFormat.getSampleRate(),
-                                     16,
-                                     inputFormat.getChannels(),
-                                     inputFormat.getChannels()*2,
-                                     inputFormat.getSampleRate(),
-                                     true );
-            formats.addElement(format);
-        }
-
-        AudioFormat[] formatArray = new AudioFormat[formats.size()];
-        for (int i = 0; i < formatArray.length; i++) {
-            formatArray[i] = (AudioFormat)(formats.elementAt(i));
-        }
-        return formatArray;
-    }
-
-
-    final class AlawCodecStream extends AudioInputStream {
-
-        // tempBuffer required only for encoding (when encode is true)
-        private static final int tempBufferSize = 64;
-        private byte tempBuffer [] = null;
-
-        /**
-         * True to encode to a-law, false to decode to linear
-         */
-        boolean encode = false;
-
-        AudioFormat encodeFormat;
-        AudioFormat decodeFormat;
-
-        byte tabByte1[] = null;
-        byte tabByte2[] = null;
-        int highByte = 0;
-        int lowByte  = 1;
-
-        AlawCodecStream(AudioInputStream stream, AudioFormat outputFormat) {
-
-            super(stream, outputFormat, -1);
-
-            AudioFormat inputFormat = stream.getFormat();
-
-            // throw an IllegalArgumentException if not ok
-            if ( ! (isConversionSupported(outputFormat, inputFormat)) ) {
-
-                throw new IllegalArgumentException("Unsupported conversion: " + inputFormat.toString() + " to " + outputFormat.toString());
-            }
-
-            //$$fb 2002-07-18: fix for 4714846: JavaSound ULAW (8-bit) encoder erroneously depends on endian-ness
-            boolean PCMIsBigEndian;
-
-            // determine whether we are encoding or decoding
-            if (AudioFormat.Encoding.ALAW.equals(inputFormat.getEncoding())) {
-                encode = false;
-                encodeFormat = inputFormat;
-                decodeFormat = outputFormat;
-                PCMIsBigEndian = outputFormat.isBigEndian();
-            } else {
-                encode = true;
-                encodeFormat = outputFormat;
-                decodeFormat = inputFormat;
-                PCMIsBigEndian = inputFormat.isBigEndian();
-                tempBuffer = new byte[tempBufferSize];
-            }
-
-            if (PCMIsBigEndian) {
-                tabByte1 = ALAW_TABH;
-                tabByte2 = ALAW_TABL;
-                highByte = 0;
-                lowByte  = 1;
-            } else {
-                tabByte1 = ALAW_TABL;
-                tabByte2 = ALAW_TABH;
-                highByte = 1;
-                lowByte  = 0;
-            }
-
-            // set the AudioInputStream length in frames if we know it
-            if (stream instanceof AudioInputStream) {
-                frameLength = ((AudioInputStream)stream).getFrameLength();
-            }
-
-            // set framePos to zero
-            framePos = 0;
-            frameSize = inputFormat.getFrameSize();
-            if( frameSize==AudioSystem.NOT_SPECIFIED ) {
-                frameSize=1;
-            }
-        }
-
-
-        /*
-         * $$jb 2/23/99
-         * Used to determine segment number in aLaw encoding
-         */
-        private short search(short val, short table[], short size) {
-            for(short i = 0; i < size; i++) {
-                if (val <= table[i]) { return i; }
-            }
-            return size;
-        }
-
-        /**
-         * Note that this won't actually read anything; must read in
-         * two-byte units.
-         */
-        public int read() throws IOException {
-
-            byte[] b = new byte[1];
-            return (int)read(b, 0, b.length);
-        }
-
-
-        public int read(byte[] b) throws IOException {
-
-            return read(b, 0, b.length);
-        }
-
-        public int read(byte[] b, int off, int len) throws IOException {
-
-            // don't read fractional frames
-            if( len%frameSize != 0 ) {
-                len -= (len%frameSize);
-            }
-
-            if (encode) {
-
-                short QUANT_MASK = 0xF;
-                short SEG_SHIFT = 4;
-                short mask;
-                short seg;
-                int adj;
-                int i;
-
-                short sample;
-                byte enc;
-
-                int readCount = 0;
-                int currentPos = off;
-                int readLeft = len*2;
-                int readLen = ( (readLeft>tempBufferSize) ? tempBufferSize : readLeft );
-
-                while ((readCount = super.read(tempBuffer,0,readLen))>0) {
-
-                    for (i = 0; i < readCount; i+=2) {
-
-                        /* Get the sample from the tempBuffer */
-                        sample = (short)(( (tempBuffer[i + highByte]) << 8) & 0xFF00);
-                        sample |= (short)( (tempBuffer[i + lowByte]) & 0xFF);
-
-                        if(sample >= 0) {
-                            mask = 0xD5;
-                        } else {
-                            mask = 0x55;
-                            sample = (short)(-sample - 8);
-                        }
-                        /* Convert the scaled magnitude to segment number. */
-                        seg = search(sample, seg_end, (short) 8);
-                        /*
-                         * Combine the sign, segment, quantization bits
-                         */
-                        if (seg >= 8) {  /* out of range, return maximum value. */
-                            enc = (byte) (0x7F ^ mask);
-                        } else {
-                            enc = (byte) (seg << SEG_SHIFT);
-                            if(seg < 2) {
-                                enc |= (byte) ( (sample >> 4) & QUANT_MASK);
-                            } else {
-                                enc |= (byte) ( (sample >> (seg + 3)) & QUANT_MASK );
-                            }
-                            enc ^= mask;
-                        }
-                        /* Now put the encoded sample where it belongs */
-                        b[currentPos] = enc;
-                        currentPos++;
-                    }
-                    /* And update pointers and counters for next iteration */
-                    readLeft -= readCount;
-                    readLen = ( (readLeft>tempBufferSize) ? tempBufferSize : readLeft );
-                }
-
-                if( currentPos==off && readCount<0 ) {  // EOF or error
-                    return readCount;
-                }
-
-                return (currentPos - off);  /* Number of bytes written to new buffer */
-
-            } else {
-
-                int i;
-                int readLen = len/2;
-                int readOffset = off + len/2;
-                int readCount = super.read(b, readOffset, readLen);
-
-                for (i = off; i < (off + (readCount*2)); i+=2) {
-                    b[i]        = (byte)tabByte1[b[readOffset] & 0xFF];
-                    b[i+1]      = (byte)tabByte2[b[readOffset] & 0xFF];
-                    readOffset++;
-                }
-
-                if( readCount<0 ) {             // EOF or error
-                    return readCount;
-                }
-
-                return (i - off);
-            }
-        }
-    } // end class AlawCodecStream
-} // end class ALAW
diff --git a/ojluni/src/main/java/com/sun/media/sound/AuFileFormat.java b/ojluni/src/main/java/com/sun/media/sound/AuFileFormat.java
deleted file mode 100755
index 185efb9..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/AuFileFormat.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * Copyright (c) 1999, 2013, 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.media.sound;
-
-
-import javax.sound.sampled.AudioFileFormat;
-import javax.sound.sampled.AudioFormat;
-
-
-/**
- * AU file format.
- *
- * @author Jan Borgersen
- */
-
-final class AuFileFormat extends AudioFileFormat {
-
-    // magic numbers
-    static final int AU_SUN_MAGIC =     0x2e736e64;
-    static final int AU_SUN_INV_MAGIC = 0x646e732e;
-    static final int AU_DEC_MAGIC =         0x2e736400;
-    static final int AU_DEC_INV_MAGIC = 0x0064732e;
-
-    // encodings
-    static final int AU_ULAW_8       = 1;  /* 8-bit ISDN u-law */
-    static final int AU_LINEAR_8     = 2;  /* 8-bit linear PCM */
-    static final int AU_LINEAR_16    = 3;  /* 16-bit linear PCM */
-    static final int AU_LINEAR_24    = 4;  /* 24-bit linear PCM */
-    static final int AU_LINEAR_32    = 5;  /* 32-bit linear PCM */
-    static final int AU_FLOAT        = 6;  /* 32-bit IEEE floating point */
-    static final int AU_DOUBLE       = 7;  /* 64-bit IEEE floating point */
-    static final int AU_ADPCM_G721   = 23; /* 4-bit CCITT g.721 ADPCM */
-    static final int AU_ADPCM_G722   = 24; /* CCITT g.722 ADPCM */
-    static final int AU_ADPCM_G723_3 = 25; /* CCITT g.723 3-bit ADPCM */
-    static final int AU_ADPCM_G723_5 = 26; /* CCITT g.723 5-bit ADPCM */
-    static final int AU_ALAW_8       = 27; /* 8-bit ISDN A-law */
-
-    static final int AU_HEADERSIZE       = 24;
-
-    private int auType;
-
-    AuFileFormat( AudioFileFormat aff ) {
-
-        this( aff.getType(), aff.getByteLength(), aff.getFormat(), aff.getFrameLength() );
-    }
-
-    AuFileFormat(AudioFileFormat.Type type, int lengthInBytes, AudioFormat format, int lengthInFrames) {
-
-        super(type,lengthInBytes,format,lengthInFrames);
-
-        AudioFormat.Encoding encoding = format.getEncoding();
-
-        auType = -1;
-
-        if( AudioFormat.Encoding.ALAW.equals(encoding) ) {
-            if( format.getSampleSizeInBits()==8 ) {
-                auType = AU_ALAW_8;
-            }
-        } else if( AudioFormat.Encoding.ULAW.equals(encoding) ) {
-            if( format.getSampleSizeInBits()==8 ) {
-                auType = AU_ULAW_8;
-            }
-        } else if( AudioFormat.Encoding.PCM_SIGNED.equals(encoding) ) {
-            if( format.getSampleSizeInBits()==8 ) {
-                auType = AU_LINEAR_8;
-            } else if( format.getSampleSizeInBits()==16 ) {
-                auType = AU_LINEAR_16;
-            } else if( format.getSampleSizeInBits()==24 ) {
-                auType = AU_LINEAR_24;
-            } else if( format.getSampleSizeInBits()==32 ) {
-                auType = AU_LINEAR_32;
-            }
-        }
-
-    }
-
-    public int getAuType() {
-
-        return auType;
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/AuFileReader.java b/ojluni/src/main/java/com/sun/media/sound/AuFileReader.java
deleted file mode 100755
index d755d51..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/AuFileReader.java
+++ /dev/null
@@ -1,378 +0,0 @@
-/*
- * Copyright (c) 1999, 2013, 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.media.sound;
-
-import java.io.BufferedInputStream;
-import java.io.DataInputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-
-import javax.sound.sampled.AudioFileFormat;
-import javax.sound.sampled.AudioFormat;
-import javax.sound.sampled.AudioInputStream;
-import javax.sound.sampled.AudioSystem;
-import javax.sound.sampled.UnsupportedAudioFileException;
-
-
-/**
- * AU file reader.
- *
- * @author Kara Kytle
- * @author Jan Borgersen
- * @author Florian Bomers
- */
-public final class AuFileReader extends SunFileReader {
-
-    /**
-     * Constructs a new AuFileReader object.
-     */
-    public AuFileReader() {
-    }
-
-
-    // METHODS TO IMPLEMENT AudioFileReader
-
-    /**
-     * Obtains the audio file format of the input stream provided.  The stream must
-     * point to valid audio file data.  In general, audio file providers may
-     * need to read some data from the stream before determining whether they
-     * support it.  These parsers must
-     * be able to mark the stream, read enough data to determine whether they
-     * support the stream, and, if not, reset the stream's read pointer to its original
-     * position.  If the input stream does not support this, this method may fail
-     * with an IOException.
-     * @param stream the input stream from which file format information should be
-     * extracted
-     * @return an <code>AudioFileFormat</code> object describing the audio file format
-     * @throws UnsupportedAudioFileException if the stream does not point to valid audio
-     * file data recognized by the system
-     * @throws IOException if an I/O exception occurs
-     * @see InputStream#markSupported
-     * @see InputStream#mark
-     */
-    public AudioFileFormat getAudioFileFormat(InputStream stream) throws UnsupportedAudioFileException, IOException {
-
-        AudioFormat format = null;
-        AuFileFormat fileFormat = null;
-        int maxReadLength = 28;
-        boolean bigendian  = false;
-        int magic          = -1;
-        int headerSize     = -1;
-        int dataSize       = -1;
-        int encoding_local = -1;
-        int sampleRate     = -1;
-        int frameRate      = -1;
-        int frameSize      = -1;
-        int channels       = -1;
-        int sampleSizeInBits = 0;
-        int length = 0;
-        int nread = 0;
-        AudioFormat.Encoding encoding = null;
-
-        DataInputStream dis = new DataInputStream( stream );
-
-        dis.mark(maxReadLength);
-
-        magic = dis.readInt();
-
-        if (! (magic == AuFileFormat.AU_SUN_MAGIC) || (magic == AuFileFormat.AU_DEC_MAGIC) ||
-            (magic == AuFileFormat.AU_SUN_INV_MAGIC) || (magic == AuFileFormat.AU_DEC_INV_MAGIC) ) {
-
-            // not AU, reset the stream, place into exception, throw exception
-            dis.reset();
-            throw new UnsupportedAudioFileException("not an AU file");
-        }
-
-        if ((magic == AuFileFormat.AU_SUN_MAGIC) || (magic == AuFileFormat.AU_DEC_MAGIC)) {
-            bigendian = true;        // otherwise little-endian
-        }
-
-        headerSize     = (bigendian==true ? dis.readInt() : rllong(dis) );  nread += 4;
-        dataSize       = (bigendian==true ? dis.readInt() : rllong(dis) );  nread += 4;
-        encoding_local = (bigendian==true ? dis.readInt() : rllong(dis) );  nread += 4;
-        sampleRate     = (bigendian==true ? dis.readInt() : rllong(dis) );  nread += 4;
-        channels       = (bigendian==true ? dis.readInt() : rllong(dis) );  nread += 4;
-
-        frameRate = sampleRate;
-
-        switch (encoding_local) {
-        case AuFileFormat.AU_ULAW_8:
-            encoding = AudioFormat.Encoding.ULAW;
-            sampleSizeInBits = 8;
-            break;
-        case AuFileFormat.AU_ALAW_8:
-            encoding = AudioFormat.Encoding.ALAW;
-            sampleSizeInBits = 8;
-            break;
-        case AuFileFormat.AU_LINEAR_8:
-            // $$jb: 04.29.99: 8bit linear is *signed*, not *unsigned*
-            encoding = AudioFormat.Encoding.PCM_SIGNED;
-            sampleSizeInBits = 8;
-            break;
-        case AuFileFormat.AU_LINEAR_16:
-            encoding = AudioFormat.Encoding.PCM_SIGNED;
-            sampleSizeInBits = 16;
-            break;
-        case AuFileFormat.AU_LINEAR_24:
-            encoding = AudioFormat.Encoding.PCM_SIGNED;
-
-            sampleSizeInBits = 24;
-            break;
-        case AuFileFormat.AU_LINEAR_32:
-            encoding = AudioFormat.Encoding.PCM_SIGNED;
-
-            sampleSizeInBits = 32;
-            break;
-            // $jb: 03.19.99: we don't support these ...
-            /*          case AuFileFormat.AU_FLOAT:
-                        encoding = new AudioFormat.FLOAT;
-                        sampleSizeInBits = 32;
-                        break;
-                        case AuFileFormat.AU_DOUBLE:
-                        encoding = new AudioFormat.DOUBLE;
-                        sampleSizeInBits = 8;
-                        break;
-                        case AuFileFormat.AU_ADPCM_G721:
-                        encoding = new AudioFormat.G721_ADPCM;
-                        sampleSizeInBits = 16;
-                        break;
-                        case AuFileFormat.AU_ADPCM_G723_3:
-                        encoding = new AudioFormat.G723_3;
-                        sampleSize = 24;
-                        SamplePerUnit = 8;
-                        break;
-                        case AuFileFormat.AU_ADPCM_G723_5:
-                        encoding = new AudioFormat.G723_5;
-                        sampleSize = 40;
-                        SamplePerUnit = 8;
-                        break;
-            */
-        default:
-                // unsupported filetype, throw exception
-                dis.reset();
-                throw new UnsupportedAudioFileException("not a valid AU file");
-        }
-
-        frameSize = calculatePCMFrameSize(sampleSizeInBits, channels);
-        //$$fb 2002-11-02: fix for 4629669: AU file reader: problems with empty files
-        if( dataSize < 0 ) {
-            length = AudioSystem.NOT_SPECIFIED;
-        } else {
-            //$$fb 2003-10-20: fix for 4940459: AudioInputStream.getFrameLength() returns 0 instead of NOT_SPECIFIED
-            length = dataSize / frameSize;
-        }
-
-        format = new AudioFormat( encoding, (float)sampleRate, sampleSizeInBits,
-                                  channels, frameSize, (float)frameRate, bigendian);
-
-        fileFormat = new AuFileFormat( AudioFileFormat.Type.AU, dataSize+headerSize,
-                                       format, length);
-
-        dis.reset(); // Throws IOException
-        return fileFormat;
-
-    }
-
-
-    /**
-     * Obtains the audio file format of the URL provided.  The URL must
-     * point to valid audio file data.
-     * @param url the URL from which file format information should be
-     * extracted
-     * @return an <code>AudioFileFormat</code> object describing the audio file format
-     * @throws UnsupportedAudioFileException if the URL does not point to valid audio
-     * file data recognized by the system
-     * @throws IOException if an I/O exception occurs
-     */
-    public AudioFileFormat getAudioFileFormat(URL url) throws UnsupportedAudioFileException, IOException {
-
-        InputStream                             urlStream = null;
-        BufferedInputStream             bis = null;
-        AudioFileFormat                 fileFormat = null;
-        AudioFormat                             format = null;
-
-        urlStream = url.openStream();   // throws IOException
-
-        try {
-            bis = new BufferedInputStream( urlStream, bisBufferSize );
-
-            fileFormat = getAudioFileFormat( bis );             // throws UnsupportedAudioFileException
-        } finally {
-            urlStream.close();
-        }
-
-        return fileFormat;
-    }
-
-
-    /**
-     * Obtains the audio file format of the File provided.  The File must
-     * point to valid audio file data.
-     * @param file the File from which file format information should be
-     * extracted
-     * @return an <code>AudioFileFormat</code> object describing the audio file format
-     * @throws UnsupportedAudioFileException if the File does not point to valid audio
-     * file data recognized by the system
-     * @throws IOException if an I/O exception occurs
-     */
-    public AudioFileFormat getAudioFileFormat(File file) throws UnsupportedAudioFileException, IOException {
-
-        FileInputStream                 fis = null;
-        BufferedInputStream             bis = null;
-        AudioFileFormat                 fileFormat = null;
-        AudioFormat                             format = null;
-
-        fis = new FileInputStream( file );      // throws IOException
-        // part of fix for 4325421
-        try {
-            bis = new BufferedInputStream( fis, bisBufferSize );
-            fileFormat = getAudioFileFormat( bis );             // throws UnsupportedAudioFileException
-        } finally {
-            fis.close();
-        }
-
-        return fileFormat;
-    }
-
-
-    /**
-     * Obtains an audio stream from the input stream provided.  The stream must
-     * point to valid audio file data.  In general, audio file providers may
-     * need to read some data from the stream before determining whether they
-     * support it.  These parsers must
-     * be able to mark the stream, read enough data to determine whether they
-     * support the stream, and, if not, reset the stream's read pointer to its original
-     * position.  If the input stream does not support this, this method may fail
-     * with an IOException.
-     * @param stream the input stream from which the <code>AudioInputStream</code> should be
-     * constructed
-     * @return an <code>AudioInputStream</code> object based on the audio file data contained
-     * in the input stream.
-     * @throws UnsupportedAudioFileException if the stream does not point to valid audio
-     * file data recognized by the system
-     * @throws IOException if an I/O exception occurs
-     * @see InputStream#markSupported
-     * @see InputStream#mark
-     */
-    public AudioInputStream getAudioInputStream(InputStream stream) throws UnsupportedAudioFileException, IOException {
-
-        DataInputStream dis = null;
-        int headerSize;
-        AudioFileFormat fileFormat = null;
-        AudioFormat format = null;
-
-
-        fileFormat = getAudioFileFormat( stream ); // throws UnsupportedAudioFileException, IOException
-
-        // if we passed this call, we have an AU file.
-
-        format = fileFormat.getFormat();
-
-        dis = new DataInputStream(stream);
-
-        // now seek past the header
-
-        dis.readInt(); // magic
-        headerSize     = (format.isBigEndian()==true ? dis.readInt() : rllong(dis) );
-        dis.skipBytes( headerSize - 8 );
-
-
-        // we've got everything, and the stream should be at the
-        // beginning of the data chunk, so return an AudioInputStream.
-
-        return new AudioInputStream(dis, format, fileFormat.getFrameLength());
-    }
-
-
-    /**
-     * Obtains an audio stream from the URL provided.  The URL must
-     * point to valid audio file data.
-     * @param url the URL for which the <code>AudioInputStream</code> should be
-     * constructed
-     * @return an <code>AudioInputStream</code> object based on the audio file data pointed
-     * to by the URL
-     * @throws UnsupportedAudioFileException if the URL does not point to valid audio
-     * file data recognized by the system
-     * @throws IOException if an I/O exception occurs
-     */
-    public AudioInputStream getAudioInputStream(URL url) throws UnsupportedAudioFileException, IOException {
-
-        InputStream                             urlStream = null;
-        BufferedInputStream             bis = null;
-        AudioFileFormat                 fileFormat = null;
-
-        urlStream = url.openStream();   // throws IOException
-        AudioInputStream result = null;
-        try {
-            bis = new BufferedInputStream( urlStream, bisBufferSize );
-            result = getAudioInputStream( (InputStream)bis );
-        } finally {
-            if (result == null) {
-                urlStream.close();
-            }
-        }
-        return result;
-    }
-
-
-    /**
-     * Obtains an audio stream from the File provided.  The File must
-     * point to valid audio file data.
-     * @param file the File for which the <code>AudioInputStream</code> should be
-     * constructed
-     * @return an <code>AudioInputStream</code> object based on the audio file data pointed
-     * to by the File
-     * @throws UnsupportedAudioFileException if the File does not point to valid audio
-     * file data recognized by the system
-     * @throws IOException if an I/O exception occurs
-     */
-    public AudioInputStream getAudioInputStream(File file) throws UnsupportedAudioFileException, IOException {
-
-        FileInputStream                 fis = null;
-        BufferedInputStream             bis = null;
-        AudioFileFormat                 fileFormat = null;
-
-        fis = new FileInputStream( file );      // throws IOException
-        AudioInputStream result = null;
-        // part of fix for 4325421
-        try {
-            bis = new BufferedInputStream( fis, bisBufferSize );
-            result = getAudioInputStream( (InputStream)bis );
-        } finally {
-            if (result == null) {
-                fis.close();
-            }
-        }
-
-        return result;
-    }
-
-
-
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/AuFileWriter.java b/ojluni/src/main/java/com/sun/media/sound/AuFileWriter.java
deleted file mode 100755
index 15a7a90..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/AuFileWriter.java
+++ /dev/null
@@ -1,330 +0,0 @@
-/*
- * Copyright (c) 1999, 2013, 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.media.sound;
-
-import java.io.File;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.IOException;
-
-import java.io.BufferedOutputStream;
-import java.io.DataOutputStream;
-import java.io.FileOutputStream;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.RandomAccessFile;
-import java.io.SequenceInputStream;
-
-import javax.sound.sampled.AudioFileFormat;
-import javax.sound.sampled.AudioInputStream;
-import javax.sound.sampled.AudioFormat;
-import javax.sound.sampled.AudioSystem;
-
-
-/**
- * AU file writer.
- *
- * @author Jan Borgersen
- */
-public final class AuFileWriter extends SunFileWriter {
-
-    //$$fb value for length field if length is not known
-    public final static int UNKNOWN_SIZE=-1;
-
-    /**
-     * Constructs a new AuFileWriter object.
-     */
-    public AuFileWriter() {
-        super(new AudioFileFormat.Type[]{AudioFileFormat.Type.AU});
-    }
-
-    public AudioFileFormat.Type[] getAudioFileTypes(AudioInputStream stream) {
-
-        AudioFileFormat.Type[] filetypes = new AudioFileFormat.Type[types.length];
-        System.arraycopy(types, 0, filetypes, 0, types.length);
-
-        // make sure we can write this stream
-        AudioFormat format = stream.getFormat();
-        AudioFormat.Encoding encoding = format.getEncoding();
-
-        if( (AudioFormat.Encoding.ALAW.equals(encoding)) ||
-            (AudioFormat.Encoding.ULAW.equals(encoding)) ||
-            (AudioFormat.Encoding.PCM_SIGNED.equals(encoding)) ||
-            (AudioFormat.Encoding.PCM_UNSIGNED.equals(encoding)) ) {
-
-            return filetypes;
-        }
-
-        return new AudioFileFormat.Type[0];
-    }
-
-
-    public int write(AudioInputStream stream, AudioFileFormat.Type fileType, OutputStream out) throws IOException {
-
-        // we must know the total data length to calculate the file length
-        //$$fb 2001-07-13: fix for bug 4351296: do not throw an exception
-        //if( stream.getFrameLength() == AudioSystem.NOT_SPECIFIED ) {
-        //      throw new IOException("stream length not specified");
-        //}
-
-        // throws IllegalArgumentException if not supported
-        AuFileFormat auFileFormat = (AuFileFormat)getAudioFileFormat(fileType, stream);
-
-        int bytesWritten = writeAuFile(stream, auFileFormat, out);
-        return bytesWritten;
-    }
-
-
-
-    public int write(AudioInputStream stream, AudioFileFormat.Type fileType, File out) throws IOException {
-
-        // throws IllegalArgumentException if not supported
-        AuFileFormat auFileFormat = (AuFileFormat)getAudioFileFormat(fileType, stream);
-
-        // first write the file without worrying about length fields
-        FileOutputStream fos = new FileOutputStream( out );     // throws IOException
-        BufferedOutputStream bos = new BufferedOutputStream( fos, bisBufferSize );
-        int bytesWritten = writeAuFile(stream, auFileFormat, bos );
-        bos.close();
-
-        // now, if length fields were not specified, calculate them,
-        // open as a random access file, write the appropriate fields,
-        // close again....
-        if( auFileFormat.getByteLength()== AudioSystem.NOT_SPECIFIED ) {
-
-            // $$kk: 10.22.99: jan: please either implement this or throw an exception!
-            // $$fb: 2001-07-13: done. Fixes Bug 4479981
-            RandomAccessFile raf=new RandomAccessFile(out, "rw");
-            if (raf.length()<=0x7FFFFFFFl) {
-                // skip AU magic and data offset field
-                raf.skipBytes(8);
-                raf.writeInt(bytesWritten-AuFileFormat.AU_HEADERSIZE);
-                // that's all
-            }
-            raf.close();
-        }
-
-        return bytesWritten;
-    }
-
-
-    // -------------------------------------------------------------
-
-    /**
-     * Returns the AudioFileFormat describing the file that will be written from this AudioInputStream.
-     * Throws IllegalArgumentException if not supported.
-     */
-    private AudioFileFormat getAudioFileFormat(AudioFileFormat.Type type, AudioInputStream stream) {
-
-        AudioFormat format = null;
-        AuFileFormat fileFormat = null;
-        AudioFormat.Encoding encoding = AudioFormat.Encoding.PCM_SIGNED;
-
-        AudioFormat streamFormat = stream.getFormat();
-        AudioFormat.Encoding streamEncoding = streamFormat.getEncoding();
-
-
-        float sampleRate;
-        int sampleSizeInBits;
-        int channels;
-        int frameSize;
-        float frameRate;
-        int fileSize;
-
-        if( !types[0].equals(type) ) {
-            throw new IllegalArgumentException("File type " + type + " not supported.");
-        }
-
-        if( (AudioFormat.Encoding.ALAW.equals(streamEncoding)) ||
-            (AudioFormat.Encoding.ULAW.equals(streamEncoding)) ) {
-
-            encoding = streamEncoding;
-            sampleSizeInBits = streamFormat.getSampleSizeInBits();
-
-        } else if ( streamFormat.getSampleSizeInBits()==8 ) {
-
-            encoding = AudioFormat.Encoding.PCM_SIGNED;
-            sampleSizeInBits=8;
-
-        } else {
-
-            encoding = AudioFormat.Encoding.PCM_SIGNED;
-            sampleSizeInBits=streamFormat.getSampleSizeInBits();
-        }
-
-
-        format = new AudioFormat( encoding,
-                                  streamFormat.getSampleRate(),
-                                  sampleSizeInBits,
-                                  streamFormat.getChannels(),
-                                  streamFormat.getFrameSize(),
-                                  streamFormat.getFrameRate(),
-                                  true);        // AU is always big endian
-
-
-        if( stream.getFrameLength()!=AudioSystem.NOT_SPECIFIED ) {
-            fileSize = (int)stream.getFrameLength()*streamFormat.getFrameSize() + AuFileFormat.AU_HEADERSIZE;
-        } else {
-            fileSize = AudioSystem.NOT_SPECIFIED;
-        }
-
-        fileFormat = new AuFileFormat( AudioFileFormat.Type.AU,
-                                       fileSize,
-                                       format,
-                                       (int)stream.getFrameLength() );
-
-        return fileFormat;
-    }
-
-
-    private InputStream getFileStream(AuFileFormat auFileFormat, InputStream audioStream) throws IOException {
-
-        // private method ... assumes auFileFormat is a supported file type
-
-        AudioFormat format            = auFileFormat.getFormat();
-
-        int magic          = AuFileFormat.AU_SUN_MAGIC;
-        int headerSize     = AuFileFormat.AU_HEADERSIZE;
-        long dataSize       = auFileFormat.getFrameLength();
-        //$$fb fix for Bug 4351296
-        //int dataSizeInBytes = dataSize * format.getFrameSize();
-        long dataSizeInBytes = (dataSize==AudioSystem.NOT_SPECIFIED)?UNKNOWN_SIZE:dataSize * format.getFrameSize();
-        if (dataSizeInBytes>0x7FFFFFFFl) {
-            dataSizeInBytes=UNKNOWN_SIZE;
-        }
-        int encoding_local = auFileFormat.getAuType();
-        int sampleRate     = (int)format.getSampleRate();
-        int channels       = format.getChannels();
-        //$$fb below is the fix for 4297100.
-        //boolean bigendian      = format.isBigEndian();
-        boolean bigendian      = true;                  // force bigendian
-
-        byte header[] = null;
-        ByteArrayInputStream headerStream = null;
-        ByteArrayOutputStream baos = null;
-        DataOutputStream dos = null;
-        SequenceInputStream auStream = null;
-
-        AudioFormat audioStreamFormat = null;
-        AudioFormat.Encoding encoding = null;
-        InputStream codedAudioStream = audioStream;
-
-        // if we need to do any format conversion, do it here.
-
-        codedAudioStream = audioStream;
-
-        if( audioStream instanceof AudioInputStream ) {
-
-
-            audioStreamFormat = ((AudioInputStream)audioStream).getFormat();
-            encoding = audioStreamFormat.getEncoding();
-
-            //$$ fb 2001-07-13: Bug 4391108
-            if( (AudioFormat.Encoding.PCM_UNSIGNED.equals(encoding)) ||
-                (AudioFormat.Encoding.PCM_SIGNED.equals(encoding)
-                 && bigendian != audioStreamFormat.isBigEndian()) ) {
-
-                                // plug in the transcoder to convert to PCM_SIGNED, bigendian
-                                // NOTE: little endian AU is not common, so we're always converting
-                                //       to big endian unless the passed in audioFileFormat is little.
-                                // $$fb this NOTE is superseded. We always write big endian au files, this is by far the standard.
-                codedAudioStream = AudioSystem.getAudioInputStream( new AudioFormat (
-                                                                                     AudioFormat.Encoding.PCM_SIGNED,
-                                                                                     audioStreamFormat.getSampleRate(),
-                                                                                     audioStreamFormat.getSampleSizeInBits(),
-                                                                                     audioStreamFormat.getChannels(),
-                                                                                     audioStreamFormat.getFrameSize(),
-                                                                                     audioStreamFormat.getFrameRate(),
-                                                                                     bigendian),
-                                                                    (AudioInputStream)audioStream );
-
-
-            }
-        }
-
-        baos = new ByteArrayOutputStream();
-        dos = new DataOutputStream(baos);
-
-
-        if (bigendian) {
-            dos.writeInt(AuFileFormat.AU_SUN_MAGIC);
-            dos.writeInt(headerSize);
-            dos.writeInt((int)dataSizeInBytes);
-            dos.writeInt(encoding_local);
-            dos.writeInt(sampleRate);
-            dos.writeInt(channels);
-        } else {
-            dos.writeInt(AuFileFormat.AU_SUN_INV_MAGIC);
-            dos.writeInt(big2little(headerSize));
-            dos.writeInt(big2little((int)dataSizeInBytes));
-            dos.writeInt(big2little(encoding_local));
-            dos.writeInt(big2little(sampleRate));
-            dos.writeInt(big2little(channels));
-        }
-
-        // Now create a new InputStream from headerStream and the InputStream
-        // in audioStream
-
-        dos.close();
-        header = baos.toByteArray();
-        headerStream = new ByteArrayInputStream( header );
-        auStream = new SequenceInputStream(headerStream,
-                        new NoCloseInputStream(codedAudioStream));
-
-        return auStream;
-    }
-
-    private int writeAuFile(InputStream in, AuFileFormat auFileFormat, OutputStream out) throws IOException {
-
-        int bytesRead = 0;
-        int bytesWritten = 0;
-        InputStream fileStream = getFileStream(auFileFormat, in);
-        byte buffer[] = new byte[bisBufferSize];
-        int maxLength = auFileFormat.getByteLength();
-
-        while( (bytesRead = fileStream.read( buffer )) >= 0 ) {
-            if (maxLength>0) {
-                if( bytesRead < maxLength ) {
-                    out.write( buffer, 0, (int)bytesRead );
-                    bytesWritten += bytesRead;
-                    maxLength -= bytesRead;
-                } else {
-                    out.write( buffer, 0, (int)maxLength );
-                    bytesWritten += maxLength;
-                    maxLength = 0;
-                    break;
-                }
-            } else {
-                out.write( buffer, 0, (int)bytesRead );
-                bytesWritten += bytesRead;
-            }
-        }
-
-        return bytesWritten;
-    }
-
-
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/AudioFileSoundbankReader.java b/ojluni/src/main/java/com/sun/media/sound/AudioFileSoundbankReader.java
deleted file mode 100755
index 11b0fa6..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/AudioFileSoundbankReader.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, 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.media.sound;
-
-import java.io.ByteArrayOutputStream;
-import java.io.DataInputStream;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-
-import javax.sound.midi.InvalidMidiDataException;
-import javax.sound.midi.Soundbank;
-import javax.sound.midi.spi.SoundbankReader;
-import javax.sound.sampled.AudioInputStream;
-import javax.sound.sampled.AudioSystem;
-import javax.sound.sampled.UnsupportedAudioFileException;
-
-/**
- * Soundbank reader that uses audio files as soundbanks.
- *
- * @author Karl Helgason
- */
-public final class AudioFileSoundbankReader extends SoundbankReader {
-
-    public Soundbank getSoundbank(URL url)
-            throws InvalidMidiDataException, IOException {
-        try {
-            AudioInputStream ais = AudioSystem.getAudioInputStream(url);
-            Soundbank sbk = getSoundbank(ais);
-            ais.close();
-            return sbk;
-        } catch (UnsupportedAudioFileException e) {
-            return null;
-        } catch (IOException e) {
-            return null;
-        }
-    }
-
-    public Soundbank getSoundbank(InputStream stream)
-            throws InvalidMidiDataException, IOException {
-        stream.mark(512);
-        try {
-            AudioInputStream ais = AudioSystem.getAudioInputStream(stream);
-            Soundbank sbk = getSoundbank(ais);
-            if (sbk != null)
-                return sbk;
-        } catch (UnsupportedAudioFileException e) {
-        } catch (IOException e) {
-        }
-        stream.reset();
-        return null;
-    }
-
-    public Soundbank getSoundbank(AudioInputStream ais)
-            throws InvalidMidiDataException, IOException {
-        try {
-            byte[] buffer;
-            if (ais.getFrameLength() == -1) {
-                ByteArrayOutputStream baos = new ByteArrayOutputStream();
-                byte[] buff = new byte[1024
-                        - (1024 % ais.getFormat().getFrameSize())];
-                int ret;
-                while ((ret = ais.read(buff)) != -1) {
-                    baos.write(buff, 0, ret);
-                }
-                ais.close();
-                buffer = baos.toByteArray();
-            } else {
-                buffer = new byte[(int) (ais.getFrameLength()
-                                    * ais.getFormat().getFrameSize())];
-                new DataInputStream(ais).readFully(buffer);
-            }
-            ModelByteBufferWavetable osc = new ModelByteBufferWavetable(
-                    new ModelByteBuffer(buffer), ais.getFormat(), -4800);
-            ModelPerformer performer = new ModelPerformer();
-            performer.getOscillators().add(osc);
-
-            SimpleSoundbank sbk = new SimpleSoundbank();
-            SimpleInstrument ins = new SimpleInstrument();
-            ins.add(performer);
-            sbk.addInstrument(ins);
-            return sbk;
-        } catch (Exception e) {
-            return null;
-        }
-    }
-
-    public Soundbank getSoundbank(File file)
-            throws InvalidMidiDataException, IOException {
-        try {
-            AudioInputStream ais = AudioSystem.getAudioInputStream(file);
-            ais.close();
-            ModelByteBufferWavetable osc = new ModelByteBufferWavetable(
-                    new ModelByteBuffer(file, 0, file.length()), -4800);
-            ModelPerformer performer = new ModelPerformer();
-            performer.getOscillators().add(osc);
-            SimpleSoundbank sbk = new SimpleSoundbank();
-            SimpleInstrument ins = new SimpleInstrument();
-            ins.add(performer);
-            sbk.addInstrument(ins);
-            return sbk;
-        } catch (UnsupportedAudioFileException e1) {
-            return null;
-        } catch (IOException e) {
-            return null;
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/AudioFloatConverter.java b/ojluni/src/main/java/com/sun/media/sound/AudioFloatConverter.java
deleted file mode 100755
index 9b850e0..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/AudioFloatConverter.java
+++ /dev/null
@@ -1,1057 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, 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.media.sound;
-
-import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-import java.nio.DoubleBuffer;
-import java.nio.FloatBuffer;
-
-import javax.sound.sampled.AudioFormat;
-import javax.sound.sampled.AudioFormat.Encoding;
-
-/**
- * This class is used to convert between 8,16,24,32,32+ bit signed/unsigned
- * big/litle endian fixed/floating point byte buffers and float buffers.
- *
- * @author Karl Helgason
- */
-public abstract class AudioFloatConverter {
-
-    /***************************************************************************
-     *
-     * LSB Filter, used filter least significant byte in samples arrays.
-     *
-     * Is used filter out data in lsb byte when SampleSizeInBits is not
-     * dividable by 8.
-     *
-     **************************************************************************/
-
-    private static class AudioFloatLSBFilter extends AudioFloatConverter {
-
-        private final AudioFloatConverter converter;
-
-        final private int offset;
-
-        final private int stepsize;
-
-        final private byte mask;
-
-        private byte[] mask_buffer;
-
-        AudioFloatLSBFilter(AudioFloatConverter converter, AudioFormat format) {
-            int bits = format.getSampleSizeInBits();
-            boolean bigEndian = format.isBigEndian();
-            this.converter = converter;
-            stepsize = (bits + 7) / 8;
-            offset = bigEndian ? (stepsize - 1) : 0;
-            int lsb_bits = bits % 8;
-            if (lsb_bits == 0)
-                mask = (byte) 0x00;
-            else if (lsb_bits == 1)
-                mask = (byte) 0x80;
-            else if (lsb_bits == 2)
-                mask = (byte) 0xC0;
-            else if (lsb_bits == 3)
-                mask = (byte) 0xE0;
-            else if (lsb_bits == 4)
-                mask = (byte) 0xF0;
-            else if (lsb_bits == 5)
-                mask = (byte) 0xF8;
-            else if (lsb_bits == 6)
-                mask = (byte) 0xFC;
-            else if (lsb_bits == 7)
-                mask = (byte) 0xFE;
-            else
-                mask = (byte) 0xFF;
-        }
-
-        public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
-                byte[] out_buff, int out_offset) {
-            byte[] ret = converter.toByteArray(in_buff, in_offset, in_len,
-                    out_buff, out_offset);
-
-            int out_offset_end = in_len * stepsize;
-            for (int i = out_offset + offset; i < out_offset_end; i += stepsize) {
-                out_buff[i] = (byte) (out_buff[i] & mask);
-            }
-
-            return ret;
-        }
-
-        public float[] toFloatArray(byte[] in_buff, int in_offset,
-                float[] out_buff, int out_offset, int out_len) {
-            if (mask_buffer == null || mask_buffer.length < in_buff.length)
-                mask_buffer = new byte[in_buff.length];
-            System.arraycopy(in_buff, 0, mask_buffer, 0, in_buff.length);
-            int in_offset_end = out_len * stepsize;
-            for (int i = in_offset + offset; i < in_offset_end; i += stepsize) {
-                mask_buffer[i] = (byte) (mask_buffer[i] & mask);
-            }
-            float[] ret = converter.toFloatArray(mask_buffer, in_offset,
-                    out_buff, out_offset, out_len);
-            return ret;
-        }
-
-    }
-
-    /***************************************************************************
-     *
-     * 64 bit float, little/big-endian
-     *
-     **************************************************************************/
-
-    // PCM 64 bit float, little-endian
-    private static class AudioFloatConversion64L extends AudioFloatConverter {
-        ByteBuffer bytebuffer = null;
-
-        DoubleBuffer floatbuffer = null;
-
-        double[] double_buff = null;
-
-        public float[] toFloatArray(byte[] in_buff, int in_offset,
-                float[] out_buff, int out_offset, int out_len) {
-            int in_len = out_len * 8;
-            if (bytebuffer == null || bytebuffer.capacity() < in_len) {
-                bytebuffer = ByteBuffer.allocate(in_len).order(
-                        ByteOrder.LITTLE_ENDIAN);
-                floatbuffer = bytebuffer.asDoubleBuffer();
-            }
-            bytebuffer.position(0);
-            floatbuffer.position(0);
-            bytebuffer.put(in_buff, in_offset, in_len);
-            if (double_buff == null
-                    || double_buff.length < out_len + out_offset)
-                double_buff = new double[out_len + out_offset];
-            floatbuffer.get(double_buff, out_offset, out_len);
-            int out_offset_end = out_offset + out_len;
-            for (int i = out_offset; i < out_offset_end; i++) {
-                out_buff[i] = (float) double_buff[i];
-            }
-            return out_buff;
-        }
-
-        public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
-                byte[] out_buff, int out_offset) {
-            int out_len = in_len * 8;
-            if (bytebuffer == null || bytebuffer.capacity() < out_len) {
-                bytebuffer = ByteBuffer.allocate(out_len).order(
-                        ByteOrder.LITTLE_ENDIAN);
-                floatbuffer = bytebuffer.asDoubleBuffer();
-            }
-            floatbuffer.position(0);
-            bytebuffer.position(0);
-            if (double_buff == null || double_buff.length < in_offset + in_len)
-                double_buff = new double[in_offset + in_len];
-            int in_offset_end = in_offset + in_len;
-            for (int i = in_offset; i < in_offset_end; i++) {
-                double_buff[i] = in_buff[i];
-            }
-            floatbuffer.put(double_buff, in_offset, in_len);
-            bytebuffer.get(out_buff, out_offset, out_len);
-            return out_buff;
-        }
-    }
-
-    // PCM 64 bit float, big-endian
-    private static class AudioFloatConversion64B extends AudioFloatConverter {
-        ByteBuffer bytebuffer = null;
-
-        DoubleBuffer floatbuffer = null;
-
-        double[] double_buff = null;
-
-        public float[] toFloatArray(byte[] in_buff, int in_offset,
-                float[] out_buff, int out_offset, int out_len) {
-            int in_len = out_len * 8;
-            if (bytebuffer == null || bytebuffer.capacity() < in_len) {
-                bytebuffer = ByteBuffer.allocate(in_len).order(
-                        ByteOrder.BIG_ENDIAN);
-                floatbuffer = bytebuffer.asDoubleBuffer();
-            }
-            bytebuffer.position(0);
-            floatbuffer.position(0);
-            bytebuffer.put(in_buff, in_offset, in_len);
-            if (double_buff == null
-                    || double_buff.length < out_len + out_offset)
-                double_buff = new double[out_len + out_offset];
-            floatbuffer.get(double_buff, out_offset, out_len);
-            int out_offset_end = out_offset + out_len;
-            for (int i = out_offset; i < out_offset_end; i++) {
-                out_buff[i] = (float) double_buff[i];
-            }
-            return out_buff;
-        }
-
-        public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
-                byte[] out_buff, int out_offset) {
-            int out_len = in_len * 8;
-            if (bytebuffer == null || bytebuffer.capacity() < out_len) {
-                bytebuffer = ByteBuffer.allocate(out_len).order(
-                        ByteOrder.BIG_ENDIAN);
-                floatbuffer = bytebuffer.asDoubleBuffer();
-            }
-            floatbuffer.position(0);
-            bytebuffer.position(0);
-            if (double_buff == null || double_buff.length < in_offset + in_len)
-                double_buff = new double[in_offset + in_len];
-            int in_offset_end = in_offset + in_len;
-            for (int i = in_offset; i < in_offset_end; i++) {
-                double_buff[i] = in_buff[i];
-            }
-            floatbuffer.put(double_buff, in_offset, in_len);
-            bytebuffer.get(out_buff, out_offset, out_len);
-            return out_buff;
-        }
-    }
-
-    /***************************************************************************
-     *
-     * 32 bit float, little/big-endian
-     *
-     **************************************************************************/
-
-    // PCM 32 bit float, little-endian
-    private static class AudioFloatConversion32L extends AudioFloatConverter {
-        ByteBuffer bytebuffer = null;
-
-        FloatBuffer floatbuffer = null;
-
-        public float[] toFloatArray(byte[] in_buff, int in_offset,
-                float[] out_buff, int out_offset, int out_len) {
-            int in_len = out_len * 4;
-            if (bytebuffer == null || bytebuffer.capacity() < in_len) {
-                bytebuffer = ByteBuffer.allocate(in_len).order(
-                        ByteOrder.LITTLE_ENDIAN);
-                floatbuffer = bytebuffer.asFloatBuffer();
-            }
-            bytebuffer.position(0);
-            floatbuffer.position(0);
-            bytebuffer.put(in_buff, in_offset, in_len);
-            floatbuffer.get(out_buff, out_offset, out_len);
-            return out_buff;
-        }
-
-        public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
-                byte[] out_buff, int out_offset) {
-            int out_len = in_len * 4;
-            if (bytebuffer == null || bytebuffer.capacity() < out_len) {
-                bytebuffer = ByteBuffer.allocate(out_len).order(
-                        ByteOrder.LITTLE_ENDIAN);
-                floatbuffer = bytebuffer.asFloatBuffer();
-            }
-            floatbuffer.position(0);
-            bytebuffer.position(0);
-            floatbuffer.put(in_buff, in_offset, in_len);
-            bytebuffer.get(out_buff, out_offset, out_len);
-            return out_buff;
-        }
-    }
-
-    // PCM 32 bit float, big-endian
-    private static class AudioFloatConversion32B extends AudioFloatConverter {
-        ByteBuffer bytebuffer = null;
-
-        FloatBuffer floatbuffer = null;
-
-        public float[] toFloatArray(byte[] in_buff, int in_offset,
-                float[] out_buff, int out_offset, int out_len) {
-            int in_len = out_len * 4;
-            if (bytebuffer == null || bytebuffer.capacity() < in_len) {
-                bytebuffer = ByteBuffer.allocate(in_len).order(
-                        ByteOrder.BIG_ENDIAN);
-                floatbuffer = bytebuffer.asFloatBuffer();
-            }
-            bytebuffer.position(0);
-            floatbuffer.position(0);
-            bytebuffer.put(in_buff, in_offset, in_len);
-            floatbuffer.get(out_buff, out_offset, out_len);
-            return out_buff;
-        }
-
-        public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
-                byte[] out_buff, int out_offset) {
-            int out_len = in_len * 4;
-            if (bytebuffer == null || bytebuffer.capacity() < out_len) {
-                bytebuffer = ByteBuffer.allocate(out_len).order(
-                        ByteOrder.BIG_ENDIAN);
-                floatbuffer = bytebuffer.asFloatBuffer();
-            }
-            floatbuffer.position(0);
-            bytebuffer.position(0);
-            floatbuffer.put(in_buff, in_offset, in_len);
-            bytebuffer.get(out_buff, out_offset, out_len);
-            return out_buff;
-        }
-    }
-
-    /***************************************************************************
-     *
-     * 8 bit signed/unsigned
-     *
-     **************************************************************************/
-
-    // PCM 8 bit, signed
-    private static class AudioFloatConversion8S extends AudioFloatConverter {
-        public float[] toFloatArray(byte[] in_buff, int in_offset,
-                float[] out_buff, int out_offset, int out_len) {
-            int ix = in_offset;
-            int ox = out_offset;
-            for (int i = 0; i < out_len; i++)
-                out_buff[ox++] = in_buff[ix++] * (1.0f / 127.0f);
-            return out_buff;
-        }
-
-        public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
-                byte[] out_buff, int out_offset) {
-            int ix = in_offset;
-            int ox = out_offset;
-            for (int i = 0; i < in_len; i++)
-                out_buff[ox++] = (byte) (in_buff[ix++] * 127.0f);
-            return out_buff;
-        }
-    }
-
-    // PCM 8 bit, unsigned
-    private static class AudioFloatConversion8U extends AudioFloatConverter {
-        public float[] toFloatArray(byte[] in_buff, int in_offset,
-                float[] out_buff, int out_offset, int out_len) {
-            int ix = in_offset;
-            int ox = out_offset;
-            for (int i = 0; i < out_len; i++)
-                out_buff[ox++] = ((in_buff[ix++] & 0xFF) - 127)
-                        * (1.0f / 127.0f);
-            return out_buff;
-        }
-
-        public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
-                byte[] out_buff, int out_offset) {
-            int ix = in_offset;
-            int ox = out_offset;
-            for (int i = 0; i < in_len; i++)
-                out_buff[ox++] = (byte) (127 + in_buff[ix++] * 127.0f);
-            return out_buff;
-        }
-    }
-
-    /***************************************************************************
-     *
-     * 16 bit signed/unsigned, little/big-endian
-     *
-     **************************************************************************/
-
-    // PCM 16 bit, signed, little-endian
-    private static class AudioFloatConversion16SL extends AudioFloatConverter {
-        public float[] toFloatArray(byte[] in_buff, int in_offset,
-                float[] out_buff, int out_offset, int out_len) {
-            int ix = in_offset;
-            int len = out_offset + out_len;
-            for (int ox = out_offset; ox < len; ox++) {
-                out_buff[ox] = ((short) ((in_buff[ix++] & 0xFF) |
-                           (in_buff[ix++] << 8))) * (1.0f / 32767.0f);
-            }
-
-            return out_buff;
-        }
-
-        public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
-                byte[] out_buff, int out_offset) {
-            int ox = out_offset;
-            int len = in_offset + in_len;
-            for (int ix = in_offset; ix < len; ix++) {
-                int x = (int) (in_buff[ix] * 32767.0);
-                out_buff[ox++] = (byte) x;
-                out_buff[ox++] = (byte) (x >>> 8);
-            }
-            return out_buff;
-        }
-    }
-
-    // PCM 16 bit, signed, big-endian
-    private static class AudioFloatConversion16SB extends AudioFloatConverter {
-        public float[] toFloatArray(byte[] in_buff, int in_offset,
-                float[] out_buff, int out_offset, int out_len) {
-            int ix = in_offset;
-            int ox = out_offset;
-            for (int i = 0; i < out_len; i++) {
-                out_buff[ox++] = ((short) ((in_buff[ix++] << 8) |
-                        (in_buff[ix++] & 0xFF))) * (1.0f / 32767.0f);
-            }
-            return out_buff;
-        }
-
-        public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
-                byte[] out_buff, int out_offset) {
-            int ix = in_offset;
-            int ox = out_offset;
-            for (int i = 0; i < in_len; i++) {
-                int x = (int) (in_buff[ix++] * 32767.0);
-                out_buff[ox++] = (byte) (x >>> 8);
-                out_buff[ox++] = (byte) x;
-            }
-            return out_buff;
-        }
-    }
-
-    // PCM 16 bit, unsigned, little-endian
-    private static class AudioFloatConversion16UL extends AudioFloatConverter {
-        public float[] toFloatArray(byte[] in_buff, int in_offset,
-                float[] out_buff, int out_offset, int out_len) {
-            int ix = in_offset;
-            int ox = out_offset;
-            for (int i = 0; i < out_len; i++) {
-                int x = (in_buff[ix++] & 0xFF) | ((in_buff[ix++] & 0xFF) << 8);
-                out_buff[ox++] = (x - 32767) * (1.0f / 32767.0f);
-            }
-            return out_buff;
-        }
-
-        public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
-                byte[] out_buff, int out_offset) {
-            int ix = in_offset;
-            int ox = out_offset;
-            for (int i = 0; i < in_len; i++) {
-                int x = 32767 + (int) (in_buff[ix++] * 32767.0);
-                out_buff[ox++] = (byte) x;
-                out_buff[ox++] = (byte) (x >>> 8);
-            }
-            return out_buff;
-        }
-    }
-
-    // PCM 16 bit, unsigned, big-endian
-    private static class AudioFloatConversion16UB extends AudioFloatConverter {
-        public float[] toFloatArray(byte[] in_buff, int in_offset,
-                float[] out_buff, int out_offset, int out_len) {
-            int ix = in_offset;
-            int ox = out_offset;
-            for (int i = 0; i < out_len; i++) {
-                int x = ((in_buff[ix++] & 0xFF) << 8) | (in_buff[ix++] & 0xFF);
-                out_buff[ox++] = (x - 32767) * (1.0f / 32767.0f);
-            }
-            return out_buff;
-        }
-
-        public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
-                byte[] out_buff, int out_offset) {
-            int ix = in_offset;
-            int ox = out_offset;
-            for (int i = 0; i < in_len; i++) {
-                int x = 32767 + (int) (in_buff[ix++] * 32767.0);
-                out_buff[ox++] = (byte) (x >>> 8);
-                out_buff[ox++] = (byte) x;
-            }
-            return out_buff;
-        }
-    }
-
-    /***************************************************************************
-     *
-     * 24 bit signed/unsigned, little/big-endian
-     *
-     **************************************************************************/
-
-    // PCM 24 bit, signed, little-endian
-    private static class AudioFloatConversion24SL extends AudioFloatConverter {
-        public float[] toFloatArray(byte[] in_buff, int in_offset,
-                float[] out_buff, int out_offset, int out_len) {
-            int ix = in_offset;
-            int ox = out_offset;
-            for (int i = 0; i < out_len; i++) {
-                int x = (in_buff[ix++] & 0xFF) | ((in_buff[ix++] & 0xFF) << 8)
-                        | ((in_buff[ix++] & 0xFF) << 16);
-                if (x > 0x7FFFFF)
-                    x -= 0x1000000;
-                out_buff[ox++] = x * (1.0f / (float)0x7FFFFF);
-            }
-            return out_buff;
-        }
-
-        public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
-                byte[] out_buff, int out_offset) {
-            int ix = in_offset;
-            int ox = out_offset;
-            for (int i = 0; i < in_len; i++) {
-                int x = (int) (in_buff[ix++] * (float)0x7FFFFF);
-                if (x < 0)
-                    x += 0x1000000;
-                out_buff[ox++] = (byte) x;
-                out_buff[ox++] = (byte) (x >>> 8);
-                out_buff[ox++] = (byte) (x >>> 16);
-            }
-            return out_buff;
-        }
-    }
-
-    // PCM 24 bit, signed, big-endian
-    private static class AudioFloatConversion24SB extends AudioFloatConverter {
-        public float[] toFloatArray(byte[] in_buff, int in_offset,
-                float[] out_buff, int out_offset, int out_len) {
-            int ix = in_offset;
-            int ox = out_offset;
-            for (int i = 0; i < out_len; i++) {
-                int x = ((in_buff[ix++] & 0xFF) << 16)
-                        | ((in_buff[ix++] & 0xFF) << 8) | (in_buff[ix++] & 0xFF);
-                if (x > 0x7FFFFF)
-                    x -= 0x1000000;
-                out_buff[ox++] = x * (1.0f / (float)0x7FFFFF);
-            }
-            return out_buff;
-        }
-
-        public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
-                byte[] out_buff, int out_offset) {
-            int ix = in_offset;
-            int ox = out_offset;
-            for (int i = 0; i < in_len; i++) {
-                int x = (int) (in_buff[ix++] * (float)0x7FFFFF);
-                if (x < 0)
-                    x += 0x1000000;
-                out_buff[ox++] = (byte) (x >>> 16);
-                out_buff[ox++] = (byte) (x >>> 8);
-                out_buff[ox++] = (byte) x;
-            }
-            return out_buff;
-        }
-    }
-
-    // PCM 24 bit, unsigned, little-endian
-    private static class AudioFloatConversion24UL extends AudioFloatConverter {
-        public float[] toFloatArray(byte[] in_buff, int in_offset,
-                float[] out_buff, int out_offset, int out_len) {
-            int ix = in_offset;
-            int ox = out_offset;
-            for (int i = 0; i < out_len; i++) {
-                int x = (in_buff[ix++] & 0xFF) | ((in_buff[ix++] & 0xFF) << 8)
-                        | ((in_buff[ix++] & 0xFF) << 16);
-                x -= 0x7FFFFF;
-                out_buff[ox++] = x * (1.0f / (float)0x7FFFFF);
-            }
-            return out_buff;
-        }
-
-        public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
-                byte[] out_buff, int out_offset) {
-            int ix = in_offset;
-            int ox = out_offset;
-            for (int i = 0; i < in_len; i++) {
-                int x = (int) (in_buff[ix++] * (float)0x7FFFFF);
-                x += 0x7FFFFF;
-                out_buff[ox++] = (byte) x;
-                out_buff[ox++] = (byte) (x >>> 8);
-                out_buff[ox++] = (byte) (x >>> 16);
-            }
-            return out_buff;
-        }
-    }
-
-    // PCM 24 bit, unsigned, big-endian
-    private static class AudioFloatConversion24UB extends AudioFloatConverter {
-        public float[] toFloatArray(byte[] in_buff, int in_offset,
-                float[] out_buff, int out_offset, int out_len) {
-            int ix = in_offset;
-            int ox = out_offset;
-            for (int i = 0; i < out_len; i++) {
-                int x = ((in_buff[ix++] & 0xFF) << 16)
-                        | ((in_buff[ix++] & 0xFF) << 8) | (in_buff[ix++] & 0xFF);
-                x -= 0x7FFFFF;
-                out_buff[ox++] = x * (1.0f / (float)0x7FFFFF);
-            }
-            return out_buff;
-        }
-
-        public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
-                byte[] out_buff, int out_offset) {
-            int ix = in_offset;
-            int ox = out_offset;
-            for (int i = 0; i < in_len; i++) {
-                int x = (int) (in_buff[ix++] * (float)0x7FFFFF);
-                x += 0x7FFFFF;
-                out_buff[ox++] = (byte) (x >>> 16);
-                out_buff[ox++] = (byte) (x >>> 8);
-                out_buff[ox++] = (byte) x;
-            }
-            return out_buff;
-        }
-    }
-
-    /***************************************************************************
-     *
-     * 32 bit signed/unsigned, little/big-endian
-     *
-     **************************************************************************/
-
-    // PCM 32 bit, signed, little-endian
-    private static class AudioFloatConversion32SL extends AudioFloatConverter {
-        public float[] toFloatArray(byte[] in_buff, int in_offset,
-                float[] out_buff, int out_offset, int out_len) {
-            int ix = in_offset;
-            int ox = out_offset;
-            for (int i = 0; i < out_len; i++) {
-                int x = (in_buff[ix++] & 0xFF) | ((in_buff[ix++] & 0xFF) << 8) |
-                        ((in_buff[ix++] & 0xFF) << 16) |
-                        ((in_buff[ix++] & 0xFF) << 24);
-                out_buff[ox++] = x * (1.0f / (float)0x7FFFFFFF);
-            }
-            return out_buff;
-        }
-
-        public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
-                byte[] out_buff, int out_offset) {
-            int ix = in_offset;
-            int ox = out_offset;
-            for (int i = 0; i < in_len; i++) {
-                int x = (int) (in_buff[ix++] * (float)0x7FFFFFFF);
-                out_buff[ox++] = (byte) x;
-                out_buff[ox++] = (byte) (x >>> 8);
-                out_buff[ox++] = (byte) (x >>> 16);
-                out_buff[ox++] = (byte) (x >>> 24);
-            }
-            return out_buff;
-        }
-    }
-
-    // PCM 32 bit, signed, big-endian
-    private static class AudioFloatConversion32SB extends AudioFloatConverter {
-        public float[] toFloatArray(byte[] in_buff, int in_offset,
-                float[] out_buff, int out_offset, int out_len) {
-            int ix = in_offset;
-            int ox = out_offset;
-            for (int i = 0; i < out_len; i++) {
-                int x = ((in_buff[ix++] & 0xFF) << 24) |
-                        ((in_buff[ix++] & 0xFF) << 16) |
-                        ((in_buff[ix++] & 0xFF) << 8) | (in_buff[ix++] & 0xFF);
-                out_buff[ox++] = x * (1.0f / (float)0x7FFFFFFF);
-            }
-            return out_buff;
-        }
-
-        public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
-                byte[] out_buff, int out_offset) {
-            int ix = in_offset;
-            int ox = out_offset;
-            for (int i = 0; i < in_len; i++) {
-                int x = (int) (in_buff[ix++] * (float)0x7FFFFFFF);
-                out_buff[ox++] = (byte) (x >>> 24);
-                out_buff[ox++] = (byte) (x >>> 16);
-                out_buff[ox++] = (byte) (x >>> 8);
-                out_buff[ox++] = (byte) x;
-            }
-            return out_buff;
-        }
-    }
-
-    // PCM 32 bit, unsigned, little-endian
-    private static class AudioFloatConversion32UL extends AudioFloatConverter {
-        public float[] toFloatArray(byte[] in_buff, int in_offset,
-                float[] out_buff, int out_offset, int out_len) {
-            int ix = in_offset;
-            int ox = out_offset;
-            for (int i = 0; i < out_len; i++) {
-                int x = (in_buff[ix++] & 0xFF) | ((in_buff[ix++] & 0xFF) << 8) |
-                        ((in_buff[ix++] & 0xFF) << 16) |
-                        ((in_buff[ix++] & 0xFF) << 24);
-                x -= 0x7FFFFFFF;
-                out_buff[ox++] = x * (1.0f / (float)0x7FFFFFFF);
-            }
-            return out_buff;
-        }
-
-        public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
-                byte[] out_buff, int out_offset) {
-            int ix = in_offset;
-            int ox = out_offset;
-            for (int i = 0; i < in_len; i++) {
-                int x = (int) (in_buff[ix++] * (float)0x7FFFFFFF);
-                x += 0x7FFFFFFF;
-                out_buff[ox++] = (byte) x;
-                out_buff[ox++] = (byte) (x >>> 8);
-                out_buff[ox++] = (byte) (x >>> 16);
-                out_buff[ox++] = (byte) (x >>> 24);
-            }
-            return out_buff;
-        }
-    }
-
-    // PCM 32 bit, unsigned, big-endian
-    private static class AudioFloatConversion32UB extends AudioFloatConverter {
-
-        public float[] toFloatArray(byte[] in_buff, int in_offset,
-                float[] out_buff, int out_offset, int out_len) {
-            int ix = in_offset;
-            int ox = out_offset;
-            for (int i = 0; i < out_len; i++) {
-                int x = ((in_buff[ix++] & 0xFF) << 24) |
-                        ((in_buff[ix++] & 0xFF) << 16) |
-                        ((in_buff[ix++] & 0xFF) << 8) | (in_buff[ix++] & 0xFF);
-                x -= 0x7FFFFFFF;
-                out_buff[ox++] = x * (1.0f / (float)0x7FFFFFFF);
-            }
-            return out_buff;
-        }
-
-        public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
-                byte[] out_buff, int out_offset) {
-            int ix = in_offset;
-            int ox = out_offset;
-            for (int i = 0; i < in_len; i++) {
-                int x = (int) (in_buff[ix++] * (float)0x7FFFFFFF);
-                x += 0x7FFFFFFF;
-                out_buff[ox++] = (byte) (x >>> 24);
-                out_buff[ox++] = (byte) (x >>> 16);
-                out_buff[ox++] = (byte) (x >>> 8);
-                out_buff[ox++] = (byte) x;
-            }
-            return out_buff;
-        }
-    }
-
-    /***************************************************************************
-     *
-     * 32+ bit signed/unsigned, little/big-endian
-     *
-     **************************************************************************/
-
-    // PCM 32+ bit, signed, little-endian
-    private static class AudioFloatConversion32xSL extends AudioFloatConverter {
-
-        final int xbytes;
-
-        AudioFloatConversion32xSL(int xbytes) {
-            this.xbytes = xbytes;
-        }
-
-        public float[] toFloatArray(byte[] in_buff, int in_offset,
-                float[] out_buff, int out_offset, int out_len) {
-            int ix = in_offset;
-            int ox = out_offset;
-            for (int i = 0; i < out_len; i++) {
-                ix += xbytes;
-                int x = (in_buff[ix++] & 0xFF) | ((in_buff[ix++] & 0xFF) << 8)
-                        | ((in_buff[ix++] & 0xFF) << 16)
-                        | ((in_buff[ix++] & 0xFF) << 24);
-                out_buff[ox++] = x * (1.0f / (float)0x7FFFFFFF);
-            }
-            return out_buff;
-        }
-
-        public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
-                byte[] out_buff, int out_offset) {
-            int ix = in_offset;
-            int ox = out_offset;
-            for (int i = 0; i < in_len; i++) {
-                int x = (int) (in_buff[ix++] * (float)0x7FFFFFFF);
-                for (int j = 0; j < xbytes; j++) {
-                    out_buff[ox++] = 0;
-                }
-                out_buff[ox++] = (byte) x;
-                out_buff[ox++] = (byte) (x >>> 8);
-                out_buff[ox++] = (byte) (x >>> 16);
-                out_buff[ox++] = (byte) (x >>> 24);
-            }
-            return out_buff;
-        }
-    }
-
-    // PCM 32+ bit, signed, big-endian
-    private static class AudioFloatConversion32xSB extends AudioFloatConverter {
-
-        final int xbytes;
-
-        AudioFloatConversion32xSB(int xbytes) {
-            this.xbytes = xbytes;
-        }
-
-        public float[] toFloatArray(byte[] in_buff, int in_offset,
-                float[] out_buff, int out_offset, int out_len) {
-            int ix = in_offset;
-            int ox = out_offset;
-            for (int i = 0; i < out_len; i++) {
-                int x = ((in_buff[ix++] & 0xFF) << 24)
-                        | ((in_buff[ix++] & 0xFF) << 16)
-                        | ((in_buff[ix++] & 0xFF) << 8)
-                        | (in_buff[ix++] & 0xFF);
-                ix += xbytes;
-                out_buff[ox++] = x * (1.0f / (float)0x7FFFFFFF);
-            }
-            return out_buff;
-        }
-
-        public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
-                byte[] out_buff, int out_offset) {
-            int ix = in_offset;
-            int ox = out_offset;
-            for (int i = 0; i < in_len; i++) {
-                int x = (int) (in_buff[ix++] * (float)0x7FFFFFFF);
-                out_buff[ox++] = (byte) (x >>> 24);
-                out_buff[ox++] = (byte) (x >>> 16);
-                out_buff[ox++] = (byte) (x >>> 8);
-                out_buff[ox++] = (byte) x;
-                for (int j = 0; j < xbytes; j++) {
-                    out_buff[ox++] = 0;
-                }
-            }
-            return out_buff;
-        }
-    }
-
-    // PCM 32+ bit, unsigned, little-endian
-    private static class AudioFloatConversion32xUL extends AudioFloatConverter {
-
-        final int xbytes;
-
-        AudioFloatConversion32xUL(int xbytes) {
-            this.xbytes = xbytes;
-        }
-
-        public float[] toFloatArray(byte[] in_buff, int in_offset,
-                float[] out_buff, int out_offset, int out_len) {
-            int ix = in_offset;
-            int ox = out_offset;
-            for (int i = 0; i < out_len; i++) {
-                ix += xbytes;
-                int x = (in_buff[ix++] & 0xFF) | ((in_buff[ix++] & 0xFF) << 8)
-                        | ((in_buff[ix++] & 0xFF) << 16)
-                        | ((in_buff[ix++] & 0xFF) << 24);
-                x -= 0x7FFFFFFF;
-                out_buff[ox++] = x * (1.0f / (float)0x7FFFFFFF);
-            }
-            return out_buff;
-        }
-
-        public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
-                byte[] out_buff, int out_offset) {
-            int ix = in_offset;
-            int ox = out_offset;
-            for (int i = 0; i < in_len; i++) {
-                int x = (int) (in_buff[ix++] * (float)0x7FFFFFFF);
-                x += 0x7FFFFFFF;
-                for (int j = 0; j < xbytes; j++) {
-                    out_buff[ox++] = 0;
-                }
-                out_buff[ox++] = (byte) x;
-                out_buff[ox++] = (byte) (x >>> 8);
-                out_buff[ox++] = (byte) (x >>> 16);
-                out_buff[ox++] = (byte) (x >>> 24);
-            }
-            return out_buff;
-        }
-    }
-
-    // PCM 32+ bit, unsigned, big-endian
-    private static class AudioFloatConversion32xUB extends AudioFloatConverter {
-
-        final int xbytes;
-
-        AudioFloatConversion32xUB(int xbytes) {
-            this.xbytes = xbytes;
-        }
-
-        public float[] toFloatArray(byte[] in_buff, int in_offset,
-                float[] out_buff, int out_offset, int out_len) {
-            int ix = in_offset;
-            int ox = out_offset;
-            for (int i = 0; i < out_len; i++) {
-                int x = ((in_buff[ix++] & 0xFF) << 24) |
-                        ((in_buff[ix++] & 0xFF) << 16) |
-                        ((in_buff[ix++] & 0xFF) << 8) | (in_buff[ix++] & 0xFF);
-                ix += xbytes;
-                x -= 2147483647;
-                out_buff[ox++] = x * (1.0f / 2147483647.0f);
-            }
-            return out_buff;
-        }
-
-        public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
-                byte[] out_buff, int out_offset) {
-            int ix = in_offset;
-            int ox = out_offset;
-            for (int i = 0; i < in_len; i++) {
-                int x = (int) (in_buff[ix++] * 2147483647.0);
-                x += 2147483647;
-                out_buff[ox++] = (byte) (x >>> 24);
-                out_buff[ox++] = (byte) (x >>> 16);
-                out_buff[ox++] = (byte) (x >>> 8);
-                out_buff[ox++] = (byte) x;
-                for (int j = 0; j < xbytes; j++) {
-                    out_buff[ox++] = 0;
-                }
-            }
-            return out_buff;
-        }
-    }
-
-    public static AudioFloatConverter getConverter(AudioFormat format) {
-        AudioFloatConverter conv = null;
-        if (format.getFrameSize() == 0)
-            return null;
-        if (format.getFrameSize() !=
-                ((format.getSampleSizeInBits() + 7) / 8) * format.getChannels()) {
-            return null;
-        }
-        if (format.getEncoding().equals(Encoding.PCM_SIGNED)) {
-            if (format.isBigEndian()) {
-                if (format.getSampleSizeInBits() <= 8) {
-                    conv = new AudioFloatConversion8S();
-                } else if (format.getSampleSizeInBits() > 8 &&
-                      format.getSampleSizeInBits() <= 16) {
-                    conv = new AudioFloatConversion16SB();
-                } else if (format.getSampleSizeInBits() > 16 &&
-                      format.getSampleSizeInBits() <= 24) {
-                    conv = new AudioFloatConversion24SB();
-                } else if (format.getSampleSizeInBits() > 24 &&
-                      format.getSampleSizeInBits() <= 32) {
-                    conv = new AudioFloatConversion32SB();
-                } else if (format.getSampleSizeInBits() > 32) {
-                    conv = new AudioFloatConversion32xSB(((format
-                            .getSampleSizeInBits() + 7) / 8) - 4);
-                }
-            } else {
-                if (format.getSampleSizeInBits() <= 8) {
-                    conv = new AudioFloatConversion8S();
-                } else if (format.getSampleSizeInBits() > 8 &&
-                         format.getSampleSizeInBits() <= 16) {
-                    conv = new AudioFloatConversion16SL();
-                } else if (format.getSampleSizeInBits() > 16 &&
-                         format.getSampleSizeInBits() <= 24) {
-                    conv = new AudioFloatConversion24SL();
-                } else if (format.getSampleSizeInBits() > 24 &&
-                         format.getSampleSizeInBits() <= 32) {
-                    conv = new AudioFloatConversion32SL();
-                } else if (format.getSampleSizeInBits() > 32) {
-                    conv = new AudioFloatConversion32xSL(((format
-                            .getSampleSizeInBits() + 7) / 8) - 4);
-                }
-            }
-        } else if (format.getEncoding().equals(Encoding.PCM_UNSIGNED)) {
-            if (format.isBigEndian()) {
-                if (format.getSampleSizeInBits() <= 8) {
-                    conv = new AudioFloatConversion8U();
-                } else if (format.getSampleSizeInBits() > 8 &&
-                        format.getSampleSizeInBits() <= 16) {
-                    conv = new AudioFloatConversion16UB();
-                } else if (format.getSampleSizeInBits() > 16 &&
-                        format.getSampleSizeInBits() <= 24) {
-                    conv = new AudioFloatConversion24UB();
-                } else if (format.getSampleSizeInBits() > 24 &&
-                        format.getSampleSizeInBits() <= 32) {
-                    conv = new AudioFloatConversion32UB();
-                } else if (format.getSampleSizeInBits() > 32) {
-                    conv = new AudioFloatConversion32xUB(((
-                            format.getSampleSizeInBits() + 7) / 8) - 4);
-                }
-            } else {
-                if (format.getSampleSizeInBits() <= 8) {
-                    conv = new AudioFloatConversion8U();
-                } else if (format.getSampleSizeInBits() > 8 &&
-                        format.getSampleSizeInBits() <= 16) {
-                    conv = new AudioFloatConversion16UL();
-                } else if (format.getSampleSizeInBits() > 16 &&
-                        format.getSampleSizeInBits() <= 24) {
-                    conv = new AudioFloatConversion24UL();
-                } else if (format.getSampleSizeInBits() > 24 &&
-                        format.getSampleSizeInBits() <= 32) {
-                    conv = new AudioFloatConversion32UL();
-                } else if (format.getSampleSizeInBits() > 32) {
-                    conv = new AudioFloatConversion32xUL(((
-                            format.getSampleSizeInBits() + 7) / 8) - 4);
-                }
-            }
-        } else if (format.getEncoding().equals(Encoding.PCM_FLOAT)) {
-            if (format.getSampleSizeInBits() == 32) {
-                if (format.isBigEndian())
-                    conv = new AudioFloatConversion32B();
-                else
-                    conv = new AudioFloatConversion32L();
-            } else if (format.getSampleSizeInBits() == 64) {
-                if (format.isBigEndian())
-                    conv = new AudioFloatConversion64B();
-                else
-                    conv = new AudioFloatConversion64L();
-            }
-
-        }
-
-        if ((format.getEncoding().equals(Encoding.PCM_SIGNED) ||
-                format.getEncoding().equals(Encoding.PCM_UNSIGNED)) &&
-                (format.getSampleSizeInBits() % 8 != 0)) {
-            conv = new AudioFloatLSBFilter(conv, format);
-        }
-
-        if (conv != null)
-            conv.format = format;
-        return conv;
-    }
-
-    private AudioFormat format;
-
-    public final AudioFormat getFormat() {
-        return format;
-    }
-
-    public abstract float[] toFloatArray(byte[] in_buff, int in_offset,
-            float[] out_buff, int out_offset, int out_len);
-
-    public final float[] toFloatArray(byte[] in_buff, float[] out_buff,
-            int out_offset, int out_len) {
-        return toFloatArray(in_buff, 0, out_buff, out_offset, out_len);
-    }
-
-    public final float[] toFloatArray(byte[] in_buff, int in_offset,
-            float[] out_buff, int out_len) {
-        return toFloatArray(in_buff, in_offset, out_buff, 0, out_len);
-    }
-
-    public final float[] toFloatArray(byte[] in_buff, float[] out_buff,
-                                      int out_len) {
-        return toFloatArray(in_buff, 0, out_buff, 0, out_len);
-    }
-
-    public final float[] toFloatArray(byte[] in_buff, float[] out_buff) {
-        return toFloatArray(in_buff, 0, out_buff, 0, out_buff.length);
-    }
-
-    public abstract byte[] toByteArray(float[] in_buff, int in_offset,
-            int in_len, byte[] out_buff, int out_offset);
-
-    public final byte[] toByteArray(float[] in_buff, int in_len,
-                                    byte[] out_buff, int out_offset) {
-        return toByteArray(in_buff, 0, in_len, out_buff, out_offset);
-    }
-
-    public final byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
-                                    byte[] out_buff) {
-        return toByteArray(in_buff, in_offset, in_len, out_buff, 0);
-    }
-
-    public final byte[] toByteArray(float[] in_buff, int in_len,
-                                    byte[] out_buff) {
-        return toByteArray(in_buff, 0, in_len, out_buff, 0);
-    }
-
-    public final byte[] toByteArray(float[] in_buff, byte[] out_buff) {
-        return toByteArray(in_buff, 0, in_buff.length, out_buff, 0);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/AudioFloatFormatConverter.java b/ojluni/src/main/java/com/sun/media/sound/AudioFloatFormatConverter.java
deleted file mode 100755
index a161fc5..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/AudioFloatFormatConverter.java
+++ /dev/null
@@ -1,617 +0,0 @@
-/*
- * Copyright (c) 2008, 2013, 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.media.sound;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.Arrays;
-
-import javax.sound.sampled.AudioFormat;
-import javax.sound.sampled.AudioInputStream;
-import javax.sound.sampled.AudioSystem;
-import javax.sound.sampled.AudioFormat.Encoding;
-import javax.sound.sampled.spi.FormatConversionProvider;
-
-/**
- * This class is used to convert between 8,16,24,32 bit signed/unsigned
- * big/litle endian fixed/floating stereo/mono/multi-channel audio streams and
- * perform sample-rate conversion if needed.
- *
- * @author Karl Helgason
- */
-public final class AudioFloatFormatConverter extends FormatConversionProvider {
-
-    private static class AudioFloatFormatConverterInputStream extends
-            InputStream {
-        private final AudioFloatConverter converter;
-
-        private final AudioFloatInputStream stream;
-
-        private float[] readfloatbuffer;
-
-        private final int fsize;
-
-        AudioFloatFormatConverterInputStream(AudioFormat targetFormat,
-                AudioFloatInputStream stream) {
-            this.stream = stream;
-            converter = AudioFloatConverter.getConverter(targetFormat);
-            fsize = ((targetFormat.getSampleSizeInBits() + 7) / 8);
-        }
-
-        public int read() throws IOException {
-            byte[] b = new byte[1];
-            int ret = read(b);
-            if (ret < 0)
-                return ret;
-            return b[0] & 0xFF;
-        }
-
-        public int read(byte[] b, int off, int len) throws IOException {
-
-            int flen = len / fsize;
-            if (readfloatbuffer == null || readfloatbuffer.length < flen)
-                readfloatbuffer = new float[flen];
-            int ret = stream.read(readfloatbuffer, 0, flen);
-            if (ret < 0)
-                return ret;
-            converter.toByteArray(readfloatbuffer, 0, ret, b, off);
-            return ret * fsize;
-        }
-
-        public int available() throws IOException {
-            int ret = stream.available();
-            if (ret < 0)
-                return ret;
-            return ret * fsize;
-        }
-
-        public void close() throws IOException {
-            stream.close();
-        }
-
-        public synchronized void mark(int readlimit) {
-            stream.mark(readlimit * fsize);
-        }
-
-        public boolean markSupported() {
-            return stream.markSupported();
-        }
-
-        public synchronized void reset() throws IOException {
-            stream.reset();
-        }
-
-        public long skip(long n) throws IOException {
-            long ret = stream.skip(n / fsize);
-            if (ret < 0)
-                return ret;
-            return ret * fsize;
-        }
-
-    }
-
-    private static class AudioFloatInputStreamChannelMixer extends
-            AudioFloatInputStream {
-
-        private final int targetChannels;
-
-        private final int sourceChannels;
-
-        private final AudioFloatInputStream ais;
-
-        private final AudioFormat targetFormat;
-
-        private float[] conversion_buffer;
-
-        AudioFloatInputStreamChannelMixer(AudioFloatInputStream ais,
-                int targetChannels) {
-            this.sourceChannels = ais.getFormat().getChannels();
-            this.targetChannels = targetChannels;
-            this.ais = ais;
-            AudioFormat format = ais.getFormat();
-            targetFormat = new AudioFormat(format.getEncoding(), format
-                    .getSampleRate(), format.getSampleSizeInBits(),
-                    targetChannels, (format.getFrameSize() / sourceChannels)
-                            * targetChannels, format.getFrameRate(), format
-                            .isBigEndian());
-        }
-
-        public int available() throws IOException {
-            return (ais.available() / sourceChannels) * targetChannels;
-        }
-
-        public void close() throws IOException {
-            ais.close();
-        }
-
-        public AudioFormat getFormat() {
-            return targetFormat;
-        }
-
-        public long getFrameLength() {
-            return ais.getFrameLength();
-        }
-
-        public void mark(int readlimit) {
-            ais.mark((readlimit / targetChannels) * sourceChannels);
-        }
-
-        public boolean markSupported() {
-            return ais.markSupported();
-        }
-
-        public int read(float[] b, int off, int len) throws IOException {
-            int len2 = (len / targetChannels) * sourceChannels;
-            if (conversion_buffer == null || conversion_buffer.length < len2)
-                conversion_buffer = new float[len2];
-            int ret = ais.read(conversion_buffer, 0, len2);
-            if (ret < 0)
-                return ret;
-            if (sourceChannels == 1) {
-                int cs = targetChannels;
-                for (int c = 0; c < targetChannels; c++) {
-                    for (int i = 0, ix = off + c; i < len2; i++, ix += cs) {
-                        b[ix] = conversion_buffer[i];
-                    }
-                }
-            } else if (targetChannels == 1) {
-                int cs = sourceChannels;
-                for (int i = 0, ix = off; i < len2; i += cs, ix++) {
-                    b[ix] = conversion_buffer[i];
-                }
-                for (int c = 1; c < sourceChannels; c++) {
-                    for (int i = c, ix = off; i < len2; i += cs, ix++) {
-                        b[ix] += conversion_buffer[i];
-                    }
-                }
-                float vol = 1f / ((float) sourceChannels);
-                for (int i = 0, ix = off; i < len2; i += cs, ix++) {
-                    b[ix] *= vol;
-                }
-            } else {
-                int minChannels = Math.min(sourceChannels, targetChannels);
-                int off_len = off + len;
-                int ct = targetChannels;
-                int cs = sourceChannels;
-                for (int c = 0; c < minChannels; c++) {
-                    for (int i = off + c, ix = c; i < off_len; i += ct, ix += cs) {
-                        b[i] = conversion_buffer[ix];
-                    }
-                }
-                for (int c = minChannels; c < targetChannels; c++) {
-                    for (int i = off + c; i < off_len; i += ct) {
-                        b[i] = 0;
-                    }
-                }
-            }
-            return (ret / sourceChannels) * targetChannels;
-        }
-
-        public void reset() throws IOException {
-            ais.reset();
-        }
-
-        public long skip(long len) throws IOException {
-            long ret = ais.skip((len / targetChannels) * sourceChannels);
-            if (ret < 0)
-                return ret;
-            return (ret / sourceChannels) * targetChannels;
-        }
-
-    }
-
-    private static class AudioFloatInputStreamResampler extends
-            AudioFloatInputStream {
-
-        private final AudioFloatInputStream ais;
-
-        private final AudioFormat targetFormat;
-
-        private float[] skipbuffer;
-
-        private SoftAbstractResampler resampler;
-
-        private final float[] pitch = new float[1];
-
-        private final float[] ibuffer2;
-
-        private final float[][] ibuffer;
-
-        private float ibuffer_index = 0;
-
-        private int ibuffer_len = 0;
-
-        private final int nrofchannels;
-
-        private float[][] cbuffer;
-
-        private final int buffer_len = 512;
-
-        private final int pad;
-
-        private final int pad2;
-
-        private final float[] ix = new float[1];
-
-        private final int[] ox = new int[1];
-
-        private float[][] mark_ibuffer = null;
-
-        private float mark_ibuffer_index = 0;
-
-        private int mark_ibuffer_len = 0;
-
-        AudioFloatInputStreamResampler(AudioFloatInputStream ais,
-                AudioFormat format) {
-            this.ais = ais;
-            AudioFormat sourceFormat = ais.getFormat();
-            targetFormat = new AudioFormat(sourceFormat.getEncoding(), format
-                    .getSampleRate(), sourceFormat.getSampleSizeInBits(),
-                    sourceFormat.getChannels(), sourceFormat.getFrameSize(),
-                    format.getSampleRate(), sourceFormat.isBigEndian());
-            nrofchannels = targetFormat.getChannels();
-            Object interpolation = format.getProperty("interpolation");
-            if (interpolation != null && (interpolation instanceof String)) {
-                String resamplerType = (String) interpolation;
-                if (resamplerType.equalsIgnoreCase("point"))
-                    this.resampler = new SoftPointResampler();
-                if (resamplerType.equalsIgnoreCase("linear"))
-                    this.resampler = new SoftLinearResampler2();
-                if (resamplerType.equalsIgnoreCase("linear1"))
-                    this.resampler = new SoftLinearResampler();
-                if (resamplerType.equalsIgnoreCase("linear2"))
-                    this.resampler = new SoftLinearResampler2();
-                if (resamplerType.equalsIgnoreCase("cubic"))
-                    this.resampler = new SoftCubicResampler();
-                if (resamplerType.equalsIgnoreCase("lanczos"))
-                    this.resampler = new SoftLanczosResampler();
-                if (resamplerType.equalsIgnoreCase("sinc"))
-                    this.resampler = new SoftSincResampler();
-            }
-            if (resampler == null)
-                resampler = new SoftLinearResampler2(); // new
-                                                        // SoftLinearResampler2();
-            pitch[0] = sourceFormat.getSampleRate() / format.getSampleRate();
-            pad = resampler.getPadding();
-            pad2 = pad * 2;
-            ibuffer = new float[nrofchannels][buffer_len + pad2];
-            ibuffer2 = new float[nrofchannels * buffer_len];
-            ibuffer_index = buffer_len + pad;
-            ibuffer_len = buffer_len;
-        }
-
-        public int available() throws IOException {
-            return 0;
-        }
-
-        public void close() throws IOException {
-            ais.close();
-        }
-
-        public AudioFormat getFormat() {
-            return targetFormat;
-        }
-
-        public long getFrameLength() {
-            return AudioSystem.NOT_SPECIFIED; // ais.getFrameLength();
-        }
-
-        public void mark(int readlimit) {
-            ais.mark((int) (readlimit * pitch[0]));
-            mark_ibuffer_index = ibuffer_index;
-            mark_ibuffer_len = ibuffer_len;
-            if (mark_ibuffer == null) {
-                mark_ibuffer = new float[ibuffer.length][ibuffer[0].length];
-            }
-            for (int c = 0; c < ibuffer.length; c++) {
-                float[] from = ibuffer[c];
-                float[] to = mark_ibuffer[c];
-                for (int i = 0; i < to.length; i++) {
-                    to[i] = from[i];
-                }
-            }
-        }
-
-        public boolean markSupported() {
-            return ais.markSupported();
-        }
-
-        private void readNextBuffer() throws IOException {
-
-            if (ibuffer_len == -1)
-                return;
-
-            for (int c = 0; c < nrofchannels; c++) {
-                float[] buff = ibuffer[c];
-                int buffer_len_pad = ibuffer_len + pad2;
-                for (int i = ibuffer_len, ix = 0; i < buffer_len_pad; i++, ix++) {
-                    buff[ix] = buff[i];
-                }
-            }
-
-            ibuffer_index -= (ibuffer_len);
-
-            ibuffer_len = ais.read(ibuffer2);
-            if (ibuffer_len >= 0) {
-                while (ibuffer_len < ibuffer2.length) {
-                    int ret = ais.read(ibuffer2, ibuffer_len, ibuffer2.length
-                            - ibuffer_len);
-                    if (ret == -1)
-                        break;
-                    ibuffer_len += ret;
-                }
-                Arrays.fill(ibuffer2, ibuffer_len, ibuffer2.length, 0);
-                ibuffer_len /= nrofchannels;
-            } else {
-                Arrays.fill(ibuffer2, 0, ibuffer2.length, 0);
-            }
-
-            int ibuffer2_len = ibuffer2.length;
-            for (int c = 0; c < nrofchannels; c++) {
-                float[] buff = ibuffer[c];
-                for (int i = c, ix = pad2; i < ibuffer2_len; i += nrofchannels, ix++) {
-                    buff[ix] = ibuffer2[i];
-                }
-            }
-
-        }
-
-        public int read(float[] b, int off, int len) throws IOException {
-
-            if (cbuffer == null || cbuffer[0].length < len / nrofchannels) {
-                cbuffer = new float[nrofchannels][len / nrofchannels];
-            }
-            if (ibuffer_len == -1)
-                return -1;
-            if (len < 0)
-                return 0;
-            int offlen = off + len;
-            int remain = len / nrofchannels;
-            int destPos = 0;
-            int in_end = ibuffer_len;
-            while (remain > 0) {
-                if (ibuffer_len >= 0) {
-                    if (ibuffer_index >= (ibuffer_len + pad))
-                        readNextBuffer();
-                    in_end = ibuffer_len + pad;
-                }
-
-                if (ibuffer_len < 0) {
-                    in_end = pad2;
-                    if (ibuffer_index >= in_end)
-                        break;
-                }
-
-                if (ibuffer_index < 0)
-                    break;
-                int preDestPos = destPos;
-                for (int c = 0; c < nrofchannels; c++) {
-                    ix[0] = ibuffer_index;
-                    ox[0] = destPos;
-                    float[] buff = ibuffer[c];
-                    resampler.interpolate(buff, ix, in_end, pitch, 0,
-                            cbuffer[c], ox, len / nrofchannels);
-                }
-                ibuffer_index = ix[0];
-                destPos = ox[0];
-                remain -= destPos - preDestPos;
-            }
-            for (int c = 0; c < nrofchannels; c++) {
-                int ix = 0;
-                float[] buff = cbuffer[c];
-                for (int i = c + off; i < offlen; i += nrofchannels) {
-                    b[i] = buff[ix++];
-                }
-            }
-            return len - remain * nrofchannels;
-        }
-
-        public void reset() throws IOException {
-            ais.reset();
-            if (mark_ibuffer == null)
-                return;
-            ibuffer_index = mark_ibuffer_index;
-            ibuffer_len = mark_ibuffer_len;
-            for (int c = 0; c < ibuffer.length; c++) {
-                float[] from = mark_ibuffer[c];
-                float[] to = ibuffer[c];
-                for (int i = 0; i < to.length; i++) {
-                    to[i] = from[i];
-                }
-            }
-
-        }
-
-        public long skip(long len) throws IOException {
-            if (len < 0)
-                return 0;
-            if (skipbuffer == null)
-                skipbuffer = new float[1024 * targetFormat.getFrameSize()];
-            float[] l_skipbuffer = skipbuffer;
-            long remain = len;
-            while (remain > 0) {
-                int ret = read(l_skipbuffer, 0, (int) Math.min(remain,
-                        skipbuffer.length));
-                if (ret < 0) {
-                    if (remain == len)
-                        return ret;
-                    break;
-                }
-                remain -= ret;
-            }
-            return len - remain;
-
-        }
-
-    }
-
-    private final Encoding[] formats = {Encoding.PCM_SIGNED,
-                                        Encoding.PCM_UNSIGNED,
-                                        Encoding.PCM_FLOAT};
-
-    public AudioInputStream getAudioInputStream(Encoding targetEncoding,
-            AudioInputStream sourceStream) {
-        if (sourceStream.getFormat().getEncoding().equals(targetEncoding))
-            return sourceStream;
-        AudioFormat format = sourceStream.getFormat();
-        int channels = format.getChannels();
-        Encoding encoding = targetEncoding;
-        float samplerate = format.getSampleRate();
-        int bits = format.getSampleSizeInBits();
-        boolean bigendian = format.isBigEndian();
-        if (targetEncoding.equals(Encoding.PCM_FLOAT))
-            bits = 32;
-        AudioFormat targetFormat = new AudioFormat(encoding, samplerate, bits,
-                channels, channels * bits / 8, samplerate, bigendian);
-        return getAudioInputStream(targetFormat, sourceStream);
-    }
-
-    public AudioInputStream getAudioInputStream(AudioFormat targetFormat,
-            AudioInputStream sourceStream) {
-        if (!isConversionSupported(targetFormat, sourceStream.getFormat()))
-            throw new IllegalArgumentException("Unsupported conversion: "
-                    + sourceStream.getFormat().toString() + " to "
-                    + targetFormat.toString());
-        return getAudioInputStream(targetFormat, AudioFloatInputStream
-                .getInputStream(sourceStream));
-    }
-
-    public AudioInputStream getAudioInputStream(AudioFormat targetFormat,
-            AudioFloatInputStream sourceStream) {
-
-        if (!isConversionSupported(targetFormat, sourceStream.getFormat()))
-            throw new IllegalArgumentException("Unsupported conversion: "
-                    + sourceStream.getFormat().toString() + " to "
-                    + targetFormat.toString());
-        if (targetFormat.getChannels() != sourceStream.getFormat()
-                .getChannels())
-            sourceStream = new AudioFloatInputStreamChannelMixer(sourceStream,
-                    targetFormat.getChannels());
-        if (Math.abs(targetFormat.getSampleRate()
-                - sourceStream.getFormat().getSampleRate()) > 0.000001)
-            sourceStream = new AudioFloatInputStreamResampler(sourceStream,
-                    targetFormat);
-        return new AudioInputStream(new AudioFloatFormatConverterInputStream(
-                targetFormat, sourceStream), targetFormat, sourceStream
-                .getFrameLength());
-    }
-
-    public Encoding[] getSourceEncodings() {
-        return new Encoding[] { Encoding.PCM_SIGNED, Encoding.PCM_UNSIGNED,
-                Encoding.PCM_FLOAT };
-    }
-
-    public Encoding[] getTargetEncodings() {
-        return new Encoding[] { Encoding.PCM_SIGNED, Encoding.PCM_UNSIGNED,
-                Encoding.PCM_FLOAT };
-    }
-
-    public Encoding[] getTargetEncodings(AudioFormat sourceFormat) {
-        if (AudioFloatConverter.getConverter(sourceFormat) == null)
-            return new Encoding[0];
-        return new Encoding[] { Encoding.PCM_SIGNED, Encoding.PCM_UNSIGNED,
-                Encoding.PCM_FLOAT };
-    }
-
-    public AudioFormat[] getTargetFormats(Encoding targetEncoding,
-            AudioFormat sourceFormat) {
-        if (AudioFloatConverter.getConverter(sourceFormat) == null)
-            return new AudioFormat[0];
-        int channels = sourceFormat.getChannels();
-
-        ArrayList<AudioFormat> formats = new ArrayList<AudioFormat>();
-
-        if (targetEncoding.equals(Encoding.PCM_SIGNED))
-            formats.add(new AudioFormat(Encoding.PCM_SIGNED,
-                    AudioSystem.NOT_SPECIFIED, 8, channels, channels,
-                    AudioSystem.NOT_SPECIFIED, false));
-        if (targetEncoding.equals(Encoding.PCM_UNSIGNED))
-            formats.add(new AudioFormat(Encoding.PCM_UNSIGNED,
-                    AudioSystem.NOT_SPECIFIED, 8, channels, channels,
-                    AudioSystem.NOT_SPECIFIED, false));
-
-        for (int bits = 16; bits < 32; bits += 8) {
-            if (targetEncoding.equals(Encoding.PCM_SIGNED)) {
-                formats.add(new AudioFormat(Encoding.PCM_SIGNED,
-                        AudioSystem.NOT_SPECIFIED, bits, channels, channels
-                                * bits / 8, AudioSystem.NOT_SPECIFIED, false));
-                formats.add(new AudioFormat(Encoding.PCM_SIGNED,
-                        AudioSystem.NOT_SPECIFIED, bits, channels, channels
-                                * bits / 8, AudioSystem.NOT_SPECIFIED, true));
-            }
-            if (targetEncoding.equals(Encoding.PCM_UNSIGNED)) {
-                formats.add(new AudioFormat(Encoding.PCM_UNSIGNED,
-                        AudioSystem.NOT_SPECIFIED, bits, channels, channels
-                                * bits / 8, AudioSystem.NOT_SPECIFIED, true));
-                formats.add(new AudioFormat(Encoding.PCM_UNSIGNED,
-                        AudioSystem.NOT_SPECIFIED, bits, channels, channels
-                                * bits / 8, AudioSystem.NOT_SPECIFIED, false));
-            }
-        }
-
-        if (targetEncoding.equals(Encoding.PCM_FLOAT)) {
-            formats.add(new AudioFormat(Encoding.PCM_FLOAT,
-                    AudioSystem.NOT_SPECIFIED, 32, channels, channels * 4,
-                    AudioSystem.NOT_SPECIFIED, false));
-            formats.add(new AudioFormat(Encoding.PCM_FLOAT,
-                    AudioSystem.NOT_SPECIFIED, 32, channels, channels * 4,
-                    AudioSystem.NOT_SPECIFIED, true));
-            formats.add(new AudioFormat(Encoding.PCM_FLOAT,
-                    AudioSystem.NOT_SPECIFIED, 64, channels, channels * 8,
-                    AudioSystem.NOT_SPECIFIED, false));
-            formats.add(new AudioFormat(Encoding.PCM_FLOAT,
-                    AudioSystem.NOT_SPECIFIED, 64, channels, channels * 8,
-                    AudioSystem.NOT_SPECIFIED, true));
-        }
-
-        return formats.toArray(new AudioFormat[formats.size()]);
-    }
-
-    public boolean isConversionSupported(AudioFormat targetFormat,
-            AudioFormat sourceFormat) {
-        if (AudioFloatConverter.getConverter(sourceFormat) == null)
-            return false;
-        if (AudioFloatConverter.getConverter(targetFormat) == null)
-            return false;
-        if (sourceFormat.getChannels() <= 0)
-            return false;
-        if (targetFormat.getChannels() <= 0)
-            return false;
-        return true;
-    }
-
-    public boolean isConversionSupported(Encoding targetEncoding,
-            AudioFormat sourceFormat) {
-        if (AudioFloatConverter.getConverter(sourceFormat) == null)
-            return false;
-        for (int i = 0; i < formats.length; i++) {
-            if (targetEncoding.equals(formats[i]))
-                return true;
-        }
-        return false;
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/AudioFloatInputStream.java b/ojluni/src/main/java/com/sun/media/sound/AudioFloatInputStream.java
deleted file mode 100755
index a4fd10429..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/AudioFloatInputStream.java
+++ /dev/null
@@ -1,281 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, 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.media.sound;
-
-import java.io.ByteArrayInputStream;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-
-import javax.sound.sampled.AudioFormat;
-import javax.sound.sampled.AudioInputStream;
-import javax.sound.sampled.AudioSystem;
-import javax.sound.sampled.UnsupportedAudioFileException;
-
-/**
- * This class is used to create AudioFloatInputStream from AudioInputStream and
- * byte buffers.
- *
- * @author Karl Helgason
- */
-public abstract class AudioFloatInputStream {
-
-    private static class BytaArrayAudioFloatInputStream
-            extends AudioFloatInputStream {
-
-        private int pos = 0;
-        private int markpos = 0;
-        private final AudioFloatConverter converter;
-        private final AudioFormat format;
-        private final byte[] buffer;
-        private final int buffer_offset;
-        private final int buffer_len;
-        private final int framesize_pc;
-
-        BytaArrayAudioFloatInputStream(AudioFloatConverter converter,
-                byte[] buffer, int offset, int len) {
-            this.converter = converter;
-            this.format = converter.getFormat();
-            this.buffer = buffer;
-            this.buffer_offset = offset;
-            framesize_pc = format.getFrameSize() / format.getChannels();
-            this.buffer_len = len / framesize_pc;
-
-        }
-
-        public AudioFormat getFormat() {
-            return format;
-        }
-
-        public long getFrameLength() {
-            return buffer_len;// / format.getFrameSize();
-        }
-
-        public int read(float[] b, int off, int len) throws IOException {
-            if (b == null)
-                throw new NullPointerException();
-            if (off < 0 || len < 0 || len > b.length - off)
-                throw new IndexOutOfBoundsException();
-            if (pos >= buffer_len)
-                return -1;
-            if (len == 0)
-                return 0;
-            if (pos + len > buffer_len)
-                len = buffer_len - pos;
-            converter.toFloatArray(buffer, buffer_offset + pos * framesize_pc,
-                    b, off, len);
-            pos += len;
-            return len;
-        }
-
-        public long skip(long len) throws IOException {
-            if (pos >= buffer_len)
-                return -1;
-            if (len <= 0)
-                return 0;
-            if (pos + len > buffer_len)
-                len = buffer_len - pos;
-            pos += len;
-            return len;
-        }
-
-        public int available() throws IOException {
-            return buffer_len - pos;
-        }
-
-        public void close() throws IOException {
-        }
-
-        public void mark(int readlimit) {
-            markpos = pos;
-        }
-
-        public boolean markSupported() {
-            return true;
-        }
-
-        public void reset() throws IOException {
-            pos = markpos;
-        }
-    }
-
-    private static class DirectAudioFloatInputStream
-            extends AudioFloatInputStream {
-
-        private final AudioInputStream stream;
-        private AudioFloatConverter converter;
-        private final int framesize_pc; // framesize / channels
-        private byte[] buffer;
-
-        DirectAudioFloatInputStream(AudioInputStream stream) {
-            converter = AudioFloatConverter.getConverter(stream.getFormat());
-            if (converter == null) {
-                AudioFormat format = stream.getFormat();
-                AudioFormat newformat;
-
-                AudioFormat[] formats = AudioSystem.getTargetFormats(
-                        AudioFormat.Encoding.PCM_SIGNED, format);
-                if (formats.length != 0) {
-                    newformat = formats[0];
-                } else {
-                    float samplerate = format.getSampleRate();
-                    int samplesizeinbits = format.getSampleSizeInBits();
-                    int framesize = format.getFrameSize();
-                    float framerate = format.getFrameRate();
-                    samplesizeinbits = 16;
-                    framesize = format.getChannels() * (samplesizeinbits / 8);
-                    framerate = samplerate;
-
-                    newformat = new AudioFormat(
-                            AudioFormat.Encoding.PCM_SIGNED, samplerate,
-                            samplesizeinbits, format.getChannels(), framesize,
-                            framerate, false);
-                }
-
-                stream = AudioSystem.getAudioInputStream(newformat, stream);
-                converter = AudioFloatConverter.getConverter(stream.getFormat());
-            }
-            framesize_pc = stream.getFormat().getFrameSize()
-                    / stream.getFormat().getChannels();
-            this.stream = stream;
-        }
-
-        public AudioFormat getFormat() {
-            return stream.getFormat();
-        }
-
-        public long getFrameLength() {
-            return stream.getFrameLength();
-        }
-
-        public int read(float[] b, int off, int len) throws IOException {
-            int b_len = len * framesize_pc;
-            if (buffer == null || buffer.length < b_len)
-                buffer = new byte[b_len];
-            int ret = stream.read(buffer, 0, b_len);
-            if (ret == -1)
-                return -1;
-            converter.toFloatArray(buffer, b, off, ret / framesize_pc);
-            return ret / framesize_pc;
-        }
-
-        public long skip(long len) throws IOException {
-            long b_len = len * framesize_pc;
-            long ret = stream.skip(b_len);
-            if (ret == -1)
-                return -1;
-            return ret / framesize_pc;
-        }
-
-        public int available() throws IOException {
-            return stream.available() / framesize_pc;
-        }
-
-        public void close() throws IOException {
-            stream.close();
-        }
-
-        public void mark(int readlimit) {
-            stream.mark(readlimit * framesize_pc);
-        }
-
-        public boolean markSupported() {
-            return stream.markSupported();
-        }
-
-        public void reset() throws IOException {
-            stream.reset();
-        }
-    }
-
-    public static AudioFloatInputStream getInputStream(URL url)
-            throws UnsupportedAudioFileException, IOException {
-        return new DirectAudioFloatInputStream(AudioSystem
-                .getAudioInputStream(url));
-    }
-
-    public static AudioFloatInputStream getInputStream(File file)
-            throws UnsupportedAudioFileException, IOException {
-        return new DirectAudioFloatInputStream(AudioSystem
-                .getAudioInputStream(file));
-    }
-
-    public static AudioFloatInputStream getInputStream(InputStream stream)
-            throws UnsupportedAudioFileException, IOException {
-        return new DirectAudioFloatInputStream(AudioSystem
-                .getAudioInputStream(stream));
-    }
-
-    public static AudioFloatInputStream getInputStream(
-            AudioInputStream stream) {
-        return new DirectAudioFloatInputStream(stream);
-    }
-
-    public static AudioFloatInputStream getInputStream(AudioFormat format,
-            byte[] buffer, int offset, int len) {
-        AudioFloatConverter converter = AudioFloatConverter
-                .getConverter(format);
-        if (converter != null)
-            return new BytaArrayAudioFloatInputStream(converter, buffer,
-                    offset, len);
-
-        InputStream stream = new ByteArrayInputStream(buffer, offset, len);
-        long aLen = format.getFrameSize() == AudioSystem.NOT_SPECIFIED
-                ? AudioSystem.NOT_SPECIFIED : len / format.getFrameSize();
-        AudioInputStream astream = new AudioInputStream(stream, format, aLen);
-        return getInputStream(astream);
-    }
-
-    public abstract AudioFormat getFormat();
-
-    public abstract long getFrameLength();
-
-    public abstract int read(float[] b, int off, int len) throws IOException;
-
-    public final int read(float[] b) throws IOException {
-        return read(b, 0, b.length);
-    }
-
-    public final float read() throws IOException {
-        float[] b = new float[1];
-        int ret = read(b, 0, 1);
-        if (ret == -1 || ret == 0)
-            return 0;
-        return b[0];
-    }
-
-    public abstract long skip(long len) throws IOException;
-
-    public abstract int available() throws IOException;
-
-    public abstract void close() throws IOException;
-
-    public abstract void mark(int readlimit);
-
-    public abstract boolean markSupported();
-
-    public abstract void reset() throws IOException;
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/AudioSynthesizer.java b/ojluni/src/main/java/com/sun/media/sound/AudioSynthesizer.java
deleted file mode 100755
index 786b7ba..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/AudioSynthesizer.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * Copyright (c) 2007, 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.media.sound;
-
-import java.util.Map;
-import javax.sound.midi.MidiUnavailableException;
-import javax.sound.midi.Synthesizer;
-import javax.sound.sampled.AudioFormat;
-import javax.sound.sampled.AudioInputStream;
-import javax.sound.sampled.SourceDataLine;
-
-/**
- * <code>AudioSynthesizer</code> is a <code>Synthesizer</code>
- * which renders it's output audio into <code>SourceDataLine</code>
- * or <code>AudioInputStream</code>.
- *
- * @see MidiSystem#getSynthesizer
- * @see Synthesizer
- *
- * @author Karl Helgason
- */
-public interface AudioSynthesizer extends Synthesizer {
-
-    /**
-     * Obtains the current format (encoding, sample rate, number of channels,
-     * etc.) of the synthesizer audio data.
-     *
-     * <p>If the synthesizer is not open and has never been opened, it returns
-     * the default format.
-     *
-     * @return current audio data format
-     * @see AudioFormat
-     */
-    public AudioFormat getFormat();
-
-    /**
-     * Gets information about the possible properties for the synthesizer.
-     *
-     * @param info a proposed list of tag/value pairs that will be sent on open.
-     * @return an array of <code>AudioSynthesizerPropertyInfo</code> objects
-     * describing possible properties. This array may be an empty array if
-     * no properties are required.
-     */
-    public AudioSynthesizerPropertyInfo[] getPropertyInfo(
-            Map<String, Object> info);
-
-    /**
-     * Opens the synthesizer and starts rendering audio into
-     * <code>SourceDataLine</code>.
-     *
-     * <p>An application opening a synthesizer explicitly with this call
-     * has to close the synthesizer by calling {@link #close}. This is
-     * necessary to release system resources and allow applications to
-     * exit cleanly.
-     *
-     * <p>Note that some synthesizers, once closed, cannot be reopened.
-     * Attempts to reopen such a synthesizer will always result in
-     * a <code>MidiUnavailableException</code>.
-     *
-     * @param line which <code>AudioSynthesizer</code> writes output audio into.
-     * If <code>line</code> is null, then line from system default mixer is used.
-     * @param info a <code>Map<String,Object></code> object containing
-     * properties for additional configuration supported by synthesizer.
-     * If <code>info</code> is null then default settings are used.
-     *
-     * @throws MidiUnavailableException thrown if the synthesizer cannot be
-     * opened due to resource restrictions.
-     * @throws SecurityException thrown if the synthesizer cannot be
-     * opened due to security restrictions.
-     *
-     * @see #close
-     * @see #isOpen
-     */
-    public void open(SourceDataLine line, Map<String, Object> info)
-            throws MidiUnavailableException;
-
-    /**
-     * Opens the synthesizer and renders audio into returned
-     * <code>AudioInputStream</code>.
-     *
-     * <p>An application opening a synthesizer explicitly with this call
-     * has to close the synthesizer by calling {@link #close}. This is
-     * necessary to release system resources and allow applications to
-     * exit cleanly.
-     *
-     * <p>Note that some synthesizers, once closed, cannot be reopened.
-     * Attempts to reopen such a synthesizer will always result in
-     * a <code>MidiUnavailableException<code>.
-     *
-     * @param targetFormat specifies the <code>AudioFormat</code>
-     * used in returned <code>AudioInputStream</code>.
-     * @param info a <code>Map<String,Object></code> object containing
-     * properties for additional configuration supported by synthesizer.
-     * If <code>info</code> is null then default settings are used.
-     *
-     * @throws MidiUnavailableException thrown if the synthesizer cannot be
-     * opened due to resource restrictions.
-     * @throws SecurityException thrown if the synthesizer cannot be
-     * opened due to security restrictions.
-     *
-     * @see #close
-     * @see #isOpen
-     */
-    public AudioInputStream openStream(AudioFormat targetFormat,
-            Map<String, Object> info) throws MidiUnavailableException;
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/AudioSynthesizerPropertyInfo.java b/ojluni/src/main/java/com/sun/media/sound/AudioSynthesizerPropertyInfo.java
deleted file mode 100755
index 9a3ef99..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/AudioSynthesizerPropertyInfo.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, 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.media.sound;
-
-/**
- * Information about property used in  opening <code>AudioSynthesizer</code>.
- *
- * @author Karl Helgason
- */
-public final class AudioSynthesizerPropertyInfo {
-
-    /**
-     * Constructs a <code>AudioSynthesizerPropertyInfo</code> object with a given
-     * name and value. The <code>description</code> and <code>choices</code>
-     * are intialized by <code>null</code> values.
-     *
-     * @param name the name of the property
-     * @param value the current value or class used for values.
-     *
-     */
-    public AudioSynthesizerPropertyInfo(String name, Object value) {
-        this.name = name;
-        if (value instanceof Class)
-            valueClass = (Class)value;
-        else
-        {
-            this.value = value;
-            if (value != null)
-                valueClass = value.getClass();
-        }
-    }
-    /**
-     * The name of the property.
-     */
-    public String name;
-    /**
-     * A brief description of the property, which may be null.
-     */
-    public String description = null;
-    /**
-     * The <code>value</code> field specifies the current value of
-     * the property.
-     */
-    public Object value = null;
-    /**
-     * The <code>valueClass</code> field specifies class
-     * used in <code>value</code> field.
-     */
-    public Class valueClass = null;
-    /**
-     * An array of possible values if the value for the field
-     * <code>AudioSynthesizerPropertyInfo.value</code> may be selected
-     * from a particular set of values; otherwise null.
-     */
-    public Object[] choices = null;
-
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/AutoClosingClip.java b/ojluni/src/main/java/com/sun/media/sound/AutoClosingClip.java
deleted file mode 100755
index 02c5119..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/AutoClosingClip.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (c) 2002, 2007, 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.media.sound;
-
-import javax.sound.sampled.Clip;
-
-/**
- * Interface for Clip objects that close themselves automatically
- *
- * @author Florian Bomers
- */
-interface AutoClosingClip extends Clip {
-
-    /**
-     * Indicates whether this clip instance is auto closing.
-     * When the clip is auto closing, it calls the close()
-     * method automatically after a short period of inactivity.<br>
-     * <br>
-     *
-     * @return true if this clip is auto closing
-     */
-    boolean isAutoClosing();
-
-    /**
-     * Sets whether this Clip instance is auto closing or not.
-     * If true, the close() method will be called automatically
-     * after a short period of inactivity.
-     *
-     * @param value - true to set this clip to auto closing
-     */
-    void setAutoClosing(boolean value);
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/AutoConnectSequencer.java b/ojluni/src/main/java/com/sun/media/sound/AutoConnectSequencer.java
deleted file mode 100755
index 70df345..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/AutoConnectSequencer.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (c) 2003, 2007, 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.media.sound;
-
-import javax.sound.midi.Receiver;
-
-/**
- * Interface for Sequencers that are able to do the auto-connect
- * as required by MidiSystem.getSequencer()
- *
- * @author Florian Bomers
- */
-public interface AutoConnectSequencer {
-
-    /**
-     * Set the receiver that this device is
-     * auto-connected. If non-null, the device
-     * needs to re-connect itself to a suitable
-     * device in open().
-     */
-    public void setAutoConnect(Receiver autoConnectReceiver);
-
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/DLSInfo.java b/ojluni/src/main/java/com/sun/media/sound/DLSInfo.java
deleted file mode 100755
index 708bf4b..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/DLSInfo.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, 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.media.sound;
-
-/**
- * This class is used to store information  to describe soundbanks, instruments
- * and samples. It is stored inside a "INFO" List Chunk inside DLS files.
- *
- * @author Karl Helgason
- */
-public final class DLSInfo {
-
-    /**
-     * (INAM) Title or subject.
-     */
-    public String name = "untitled";
-    /**
-     * (ICRD) Date of creation, the format is: YYYY-MM-DD.
-     *        For example 2007-01-01 for 1. january of year 2007.
-     */
-    public String creationDate = null;
-    /**
-     * (IENG) Name of engineer who created the object.
-     */
-    public String engineers = null;
-    /**
-     * (IPRD) Name of the product which the object is intended for.
-     */
-    public String product = null;
-    /**
-     * (ICOP) Copyright information.
-     */
-    public String copyright = null;
-    /**
-     * (ICMT) General comments. Doesn't contain newline characters.
-     */
-    public String comments = null;
-    /**
-     * (ISFT) Name of software package used to create the file.
-     */
-    public String tools = null;
-    /**
-     * (IARL) Where content is archived.
-     */
-    public String archival_location = null;
-    /**
-     * (IART) Artists of original content.
-     */
-    public String artist = null;
-    /**
-     * (ICMS) Names of persons or orginizations who commissioned the file.
-     */
-    public String commissioned = null;
-    /**
-     * (IGNR) Genre of the work.
-     *        Example: jazz, classical, rock, etc.
-     */
-    public String genre = null;
-    /**
-     * (IKEY) List of keyword that describe the content.
-     *        Examples: FX, bird, piano, etc.
-     */
-    public String keywords = null;
-    /**
-     * (IMED) Describes original medium of the data.
-     *        For example: record, CD, etc.
-     */
-    public String medium = null;
-    /**
-     * (ISBJ) Description of the content.
-     */
-    public String subject = null;
-    /**
-     * (ISRC) Name of person or orginization who supplied
-     *        orginal material for the file.
-     */
-    public String source = null;
-    /**
-     * (ISRF) Source media for sample data is from.
-     *        For example: CD, TV, etc.
-     */
-    public String source_form = null;
-    /**
-     * (ITCH) Technician who sample the file/object.
-     */
-    public String technician = null;
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/DLSInstrument.java b/ojluni/src/main/java/com/sun/media/sound/DLSInstrument.java
deleted file mode 100755
index c7e6188..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/DLSInstrument.java
+++ /dev/null
@@ -1,449 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, 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.media.sound;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.sound.midi.Patch;
-
-/**
- * This class is used to store information to describe instrument.
- * It contains list of regions and modulators.
- * It is stored inside a "ins " List Chunk inside DLS files.
- * In the DLS documentation a modulator is called articulator.
- *
- * @author Karl Helgason
- */
-public final class DLSInstrument extends ModelInstrument {
-
-    int preset = 0;
-    int bank = 0;
-    boolean druminstrument = false;
-    byte[] guid = null;
-    DLSInfo info = new DLSInfo();
-    List<DLSRegion> regions = new ArrayList<DLSRegion>();
-    List<DLSModulator> modulators = new ArrayList<DLSModulator>();
-
-    public DLSInstrument() {
-        super(null, null, null, null);
-    }
-
-    public DLSInstrument(DLSSoundbank soundbank) {
-        super(soundbank, null, null, null);
-    }
-
-    public DLSInfo getInfo() {
-        return info;
-    }
-
-    public String getName() {
-        return info.name;
-    }
-
-    public void setName(String name) {
-        info.name = name;
-    }
-
-    public ModelPatch getPatch() {
-        return new ModelPatch(bank, preset, druminstrument);
-    }
-
-    public void setPatch(Patch patch) {
-        if (patch instanceof ModelPatch && ((ModelPatch)patch).isPercussion()) {
-            druminstrument = true;
-            bank = patch.getBank();
-            preset = patch.getProgram();
-        } else {
-            druminstrument = false;
-            bank = patch.getBank();
-            preset = patch.getProgram();
-        }
-    }
-
-    public Object getData() {
-        return null;
-    }
-
-    public List<DLSRegion> getRegions() {
-        return regions;
-    }
-
-    public List<DLSModulator> getModulators() {
-        return modulators;
-    }
-
-    public String toString() {
-        if (druminstrument)
-            return "Drumkit: " + info.name
-                    + " bank #" + bank + " preset #" + preset;
-        else
-            return "Instrument: " + info.name
-                    + " bank #" + bank + " preset #" + preset;
-    }
-
-    private ModelIdentifier convertToModelDest(int dest) {
-        if (dest == DLSModulator.CONN_DST_NONE)
-            return null;
-        if (dest == DLSModulator.CONN_DST_GAIN)
-            return ModelDestination.DESTINATION_GAIN;
-        if (dest == DLSModulator.CONN_DST_PITCH)
-            return ModelDestination.DESTINATION_PITCH;
-        if (dest == DLSModulator.CONN_DST_PAN)
-            return ModelDestination.DESTINATION_PAN;
-
-        if (dest == DLSModulator.CONN_DST_LFO_FREQUENCY)
-            return ModelDestination.DESTINATION_LFO1_FREQ;
-        if (dest == DLSModulator.CONN_DST_LFO_STARTDELAY)
-            return ModelDestination.DESTINATION_LFO1_DELAY;
-
-        if (dest == DLSModulator.CONN_DST_EG1_ATTACKTIME)
-            return ModelDestination.DESTINATION_EG1_ATTACK;
-        if (dest == DLSModulator.CONN_DST_EG1_DECAYTIME)
-            return ModelDestination.DESTINATION_EG1_DECAY;
-        if (dest == DLSModulator.CONN_DST_EG1_RELEASETIME)
-            return ModelDestination.DESTINATION_EG1_RELEASE;
-        if (dest == DLSModulator.CONN_DST_EG1_SUSTAINLEVEL)
-            return ModelDestination.DESTINATION_EG1_SUSTAIN;
-
-        if (dest == DLSModulator.CONN_DST_EG2_ATTACKTIME)
-            return ModelDestination.DESTINATION_EG2_ATTACK;
-        if (dest == DLSModulator.CONN_DST_EG2_DECAYTIME)
-            return ModelDestination.DESTINATION_EG2_DECAY;
-        if (dest == DLSModulator.CONN_DST_EG2_RELEASETIME)
-            return ModelDestination.DESTINATION_EG2_RELEASE;
-        if (dest == DLSModulator.CONN_DST_EG2_SUSTAINLEVEL)
-            return ModelDestination.DESTINATION_EG2_SUSTAIN;
-
-        // DLS2 Destinations
-        if (dest == DLSModulator.CONN_DST_KEYNUMBER)
-            return ModelDestination.DESTINATION_KEYNUMBER;
-
-        if (dest == DLSModulator.CONN_DST_CHORUS)
-            return ModelDestination.DESTINATION_CHORUS;
-        if (dest == DLSModulator.CONN_DST_REVERB)
-            return ModelDestination.DESTINATION_REVERB;
-
-        if (dest == DLSModulator.CONN_DST_VIB_FREQUENCY)
-            return ModelDestination.DESTINATION_LFO2_FREQ;
-        if (dest == DLSModulator.CONN_DST_VIB_STARTDELAY)
-            return ModelDestination.DESTINATION_LFO2_DELAY;
-
-        if (dest == DLSModulator.CONN_DST_EG1_DELAYTIME)
-            return ModelDestination.DESTINATION_EG1_DELAY;
-        if (dest == DLSModulator.CONN_DST_EG1_HOLDTIME)
-            return ModelDestination.DESTINATION_EG1_HOLD;
-        if (dest == DLSModulator.CONN_DST_EG1_SHUTDOWNTIME)
-            return ModelDestination.DESTINATION_EG1_SHUTDOWN;
-
-        if (dest == DLSModulator.CONN_DST_EG2_DELAYTIME)
-            return ModelDestination.DESTINATION_EG2_DELAY;
-        if (dest == DLSModulator.CONN_DST_EG2_HOLDTIME)
-            return ModelDestination.DESTINATION_EG2_HOLD;
-
-        if (dest == DLSModulator.CONN_DST_FILTER_CUTOFF)
-            return ModelDestination.DESTINATION_FILTER_FREQ;
-        if (dest == DLSModulator.CONN_DST_FILTER_Q)
-            return ModelDestination.DESTINATION_FILTER_Q;
-
-        return null;
-    }
-
-    private ModelIdentifier convertToModelSrc(int src) {
-        if (src == DLSModulator.CONN_SRC_NONE)
-            return null;
-
-        if (src == DLSModulator.CONN_SRC_LFO)
-            return ModelSource.SOURCE_LFO1;
-        if (src == DLSModulator.CONN_SRC_KEYONVELOCITY)
-            return ModelSource.SOURCE_NOTEON_VELOCITY;
-        if (src == DLSModulator.CONN_SRC_KEYNUMBER)
-            return ModelSource.SOURCE_NOTEON_KEYNUMBER;
-        if (src == DLSModulator.CONN_SRC_EG1)
-            return ModelSource.SOURCE_EG1;
-        if (src == DLSModulator.CONN_SRC_EG2)
-            return ModelSource.SOURCE_EG2;
-        if (src == DLSModulator.CONN_SRC_PITCHWHEEL)
-            return ModelSource.SOURCE_MIDI_PITCH;
-        if (src == DLSModulator.CONN_SRC_CC1)
-            return new ModelIdentifier("midi_cc", "1", 0);
-        if (src == DLSModulator.CONN_SRC_CC7)
-            return new ModelIdentifier("midi_cc", "7", 0);
-        if (src == DLSModulator.CONN_SRC_CC10)
-            return new ModelIdentifier("midi_cc", "10", 0);
-        if (src == DLSModulator.CONN_SRC_CC11)
-            return new ModelIdentifier("midi_cc", "11", 0);
-        if (src == DLSModulator.CONN_SRC_RPN0)
-            return new ModelIdentifier("midi_rpn", "0", 0);
-        if (src == DLSModulator.CONN_SRC_RPN1)
-            return new ModelIdentifier("midi_rpn", "1", 0);
-
-        if (src == DLSModulator.CONN_SRC_POLYPRESSURE)
-            return ModelSource.SOURCE_MIDI_POLY_PRESSURE;
-        if (src == DLSModulator.CONN_SRC_CHANNELPRESSURE)
-            return ModelSource.SOURCE_MIDI_CHANNEL_PRESSURE;
-        if (src == DLSModulator.CONN_SRC_VIBRATO)
-            return ModelSource.SOURCE_LFO2;
-        if (src == DLSModulator.CONN_SRC_MONOPRESSURE)
-            return ModelSource.SOURCE_MIDI_CHANNEL_PRESSURE;
-
-        if (src == DLSModulator.CONN_SRC_CC91)
-            return new ModelIdentifier("midi_cc", "91", 0);
-        if (src == DLSModulator.CONN_SRC_CC93)
-            return new ModelIdentifier("midi_cc", "93", 0);
-
-        return null;
-    }
-
-    private ModelConnectionBlock convertToModel(DLSModulator mod) {
-        ModelIdentifier source = convertToModelSrc(mod.getSource());
-        ModelIdentifier control = convertToModelSrc(mod.getControl());
-        ModelIdentifier destination_id =
-                convertToModelDest(mod.getDestination());
-
-        int scale = mod.getScale();
-        double f_scale;
-        if (scale == Integer.MIN_VALUE)
-            f_scale = Double.NEGATIVE_INFINITY;
-        else
-            f_scale = scale / 65536.0;
-
-        if (destination_id != null) {
-            ModelSource src = null;
-            ModelSource ctrl = null;
-            ModelConnectionBlock block = new ModelConnectionBlock();
-            if (control != null) {
-                ModelSource s = new ModelSource();
-                if (control == ModelSource.SOURCE_MIDI_PITCH) {
-                    ((ModelStandardTransform)s.getTransform()).setPolarity(
-                            ModelStandardTransform.POLARITY_BIPOLAR);
-                } else if (control == ModelSource.SOURCE_LFO1
-                        || control == ModelSource.SOURCE_LFO2) {
-                    ((ModelStandardTransform)s.getTransform()).setPolarity(
-                            ModelStandardTransform.POLARITY_BIPOLAR);
-                }
-                s.setIdentifier(control);
-                block.addSource(s);
-                ctrl = s;
-            }
-            if (source != null) {
-                ModelSource s = new ModelSource();
-                if (source == ModelSource.SOURCE_MIDI_PITCH) {
-                    ((ModelStandardTransform)s.getTransform()).setPolarity(
-                            ModelStandardTransform.POLARITY_BIPOLAR);
-                } else if (source == ModelSource.SOURCE_LFO1
-                        || source == ModelSource.SOURCE_LFO2) {
-                    ((ModelStandardTransform)s.getTransform()).setPolarity(
-                            ModelStandardTransform.POLARITY_BIPOLAR);
-                }
-                s.setIdentifier(source);
-                block.addSource(s);
-                src = s;
-            }
-            ModelDestination destination = new ModelDestination();
-            destination.setIdentifier(destination_id);
-            block.setDestination(destination);
-
-            if (mod.getVersion() == 1) {
-                //if (mod.getTransform() ==  DLSModulator.CONN_TRN_CONCAVE) {
-                //    ((ModelStandardTransform)destination.getTransform())
-                //            .setTransform(
-                //            ModelStandardTransform.TRANSFORM_CONCAVE);
-                //}
-                if (mod.getTransform() == DLSModulator.CONN_TRN_CONCAVE) {
-                    if (src != null) {
-                        ((ModelStandardTransform)src.getTransform())
-                                .setTransform(
-                                    ModelStandardTransform.TRANSFORM_CONCAVE);
-                        ((ModelStandardTransform)src.getTransform())
-                                .setDirection(
-                                    ModelStandardTransform.DIRECTION_MAX2MIN);
-                    }
-                    if (ctrl != null) {
-                        ((ModelStandardTransform)ctrl.getTransform())
-                                .setTransform(
-                                    ModelStandardTransform.TRANSFORM_CONCAVE);
-                        ((ModelStandardTransform)ctrl.getTransform())
-                                .setDirection(
-                                    ModelStandardTransform.DIRECTION_MAX2MIN);
-                    }
-                }
-
-            } else if (mod.getVersion() == 2) {
-                int transform = mod.getTransform();
-                int src_transform_invert = (transform >> 15) & 1;
-                int src_transform_bipolar = (transform >> 14) & 1;
-                int src_transform = (transform >> 10) & 8;
-                int ctr_transform_invert = (transform >> 9) & 1;
-                int ctr_transform_bipolar = (transform >> 8) & 1;
-                int ctr_transform = (transform >> 4) & 8;
-
-
-                if (src != null) {
-                    int trans = ModelStandardTransform.TRANSFORM_LINEAR;
-                    if (src_transform == DLSModulator.CONN_TRN_SWITCH)
-                        trans = ModelStandardTransform.TRANSFORM_SWITCH;
-                    if (src_transform == DLSModulator.CONN_TRN_CONCAVE)
-                        trans = ModelStandardTransform.TRANSFORM_CONCAVE;
-                    if (src_transform == DLSModulator.CONN_TRN_CONVEX)
-                        trans = ModelStandardTransform.TRANSFORM_CONVEX;
-                    ((ModelStandardTransform)src.getTransform())
-                            .setTransform(trans);
-                    ((ModelStandardTransform)src.getTransform())
-                            .setPolarity(src_transform_bipolar == 1);
-                    ((ModelStandardTransform)src.getTransform())
-                            .setDirection(src_transform_invert == 1);
-
-                }
-
-                if (ctrl != null) {
-                    int trans = ModelStandardTransform.TRANSFORM_LINEAR;
-                    if (ctr_transform == DLSModulator.CONN_TRN_SWITCH)
-                        trans = ModelStandardTransform.TRANSFORM_SWITCH;
-                    if (ctr_transform == DLSModulator.CONN_TRN_CONCAVE)
-                        trans = ModelStandardTransform.TRANSFORM_CONCAVE;
-                    if (ctr_transform == DLSModulator.CONN_TRN_CONVEX)
-                        trans = ModelStandardTransform.TRANSFORM_CONVEX;
-                    ((ModelStandardTransform)ctrl.getTransform())
-                            .setTransform(trans);
-                    ((ModelStandardTransform)ctrl.getTransform())
-                            .setPolarity(ctr_transform_bipolar == 1);
-                    ((ModelStandardTransform)ctrl.getTransform())
-                            .setDirection(ctr_transform_invert == 1);
-                }
-
-                /* No output transforms are defined the DLS Level 2
-                int out_transform = transform % 8;
-                int trans = ModelStandardTransform.TRANSFORM_LINEAR;
-                if (out_transform == DLSModulator.CONN_TRN_SWITCH)
-                    trans = ModelStandardTransform.TRANSFORM_SWITCH;
-                if (out_transform == DLSModulator.CONN_TRN_CONCAVE)
-                    trans = ModelStandardTransform.TRANSFORM_CONCAVE;
-                if (out_transform == DLSModulator.CONN_TRN_CONVEX)
-                    trans = ModelStandardTransform.TRANSFORM_CONVEX;
-                if (ctrl != null) {
-                    ((ModelStandardTransform)destination.getTransform())
-                            .setTransform(trans);
-                }
-                */
-
-            }
-
-            block.setScale(f_scale);
-
-            return block;
-        }
-
-        return null;
-    }
-
-    public ModelPerformer[] getPerformers() {
-        List<ModelPerformer> performers = new ArrayList<ModelPerformer>();
-
-        Map<String, DLSModulator> modmap = new HashMap<String, DLSModulator>();
-        for (DLSModulator mod: getModulators()) {
-            modmap.put(mod.getSource() + "x" + mod.getControl() + "=" +
-                    mod.getDestination(), mod);
-        }
-
-        Map<String, DLSModulator> insmodmap =
-                new HashMap<String, DLSModulator>();
-
-        for (DLSRegion zone: regions) {
-            ModelPerformer performer = new ModelPerformer();
-            performer.setName(zone.getSample().getName());
-            performer.setSelfNonExclusive((zone.getFusoptions() &
-                    DLSRegion.OPTION_SELFNONEXCLUSIVE) != 0);
-            performer.setExclusiveClass(zone.getExclusiveClass());
-            performer.setKeyFrom(zone.getKeyfrom());
-            performer.setKeyTo(zone.getKeyto());
-            performer.setVelFrom(zone.getVelfrom());
-            performer.setVelTo(zone.getVelto());
-
-            insmodmap.clear();
-            insmodmap.putAll(modmap);
-            for (DLSModulator mod: zone.getModulators()) {
-                insmodmap.put(mod.getSource() + "x" + mod.getControl() + "=" +
-                        mod.getDestination(), mod);
-            }
-
-            List<ModelConnectionBlock> blocks = performer.getConnectionBlocks();
-            for (DLSModulator mod: insmodmap.values()) {
-                ModelConnectionBlock p = convertToModel(mod);
-                if (p != null)
-                    blocks.add(p);
-            }
-
-
-            DLSSample sample = zone.getSample();
-            DLSSampleOptions sampleopt = zone.getSampleoptions();
-            if (sampleopt == null)
-                sampleopt = sample.getSampleoptions();
-
-            ModelByteBuffer buff = sample.getDataBuffer();
-
-            float pitchcorrection = (-sampleopt.unitynote * 100) +
-                    sampleopt.finetune;
-
-            ModelByteBufferWavetable osc = new ModelByteBufferWavetable(buff,
-                    sample.getFormat(), pitchcorrection);
-            osc.setAttenuation(osc.getAttenuation() / 65536f);
-            if (sampleopt.getLoops().size() != 0) {
-                DLSSampleLoop loop = sampleopt.getLoops().get(0);
-                osc.setLoopStart((int)loop.getStart());
-                osc.setLoopLength((int)loop.getLength());
-                if (loop.getType() == DLSSampleLoop.LOOP_TYPE_FORWARD)
-                    osc.setLoopType(ModelWavetable.LOOP_TYPE_FORWARD);
-                if (loop.getType() == DLSSampleLoop.LOOP_TYPE_RELEASE)
-                    osc.setLoopType(ModelWavetable.LOOP_TYPE_RELEASE);
-                else
-                    osc.setLoopType(ModelWavetable.LOOP_TYPE_FORWARD);
-            }
-
-            performer.getConnectionBlocks().add(
-                    new ModelConnectionBlock(SoftFilter.FILTERTYPE_LP12,
-                        new ModelDestination(
-                            new ModelIdentifier("filter", "type", 1))));
-
-            performer.getOscillators().add(osc);
-
-            performers.add(performer);
-
-        }
-
-        return performers.toArray(new ModelPerformer[performers.size()]);
-    }
-
-    public byte[] getGuid() {
-        return guid == null ? null : Arrays.copyOf(guid, guid.length);
-    }
-
-    public void setGuid(byte[] guid) {
-        this.guid = guid == null ? null : Arrays.copyOf(guid, guid.length);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/DLSModulator.java b/ojluni/src/main/java/com/sun/media/sound/DLSModulator.java
deleted file mode 100755
index 4cfa7d4..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/DLSModulator.java
+++ /dev/null
@@ -1,351 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, 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.media.sound;
-
-/**
- * This class is used to store modulator/artiuclation data.
- * A modulator connects one synthesizer source to
- * a destination. For example a note on velocity
- * can be mapped to the gain of the synthesized voice.
- * It is stored as a "art1" or "art2" chunk inside DLS files.
- *
- * @author Karl Helgason
- */
-public final class DLSModulator {
-
-    // DLS1 Destinations
-    public static final int CONN_DST_NONE = 0x000; // 0
-    public static final int CONN_DST_GAIN = 0x001; // cB
-    public static final int CONN_DST_PITCH = 0x003; // cent
-    public static final int CONN_DST_PAN = 0x004; // 0.1%
-    public static final int CONN_DST_LFO_FREQUENCY = 0x104; // cent (default 5 Hz)
-    public static final int CONN_DST_LFO_STARTDELAY = 0x105; // timecent
-    public static final int CONN_DST_EG1_ATTACKTIME = 0x206; // timecent
-    public static final int CONN_DST_EG1_DECAYTIME = 0x207; // timecent
-    public static final int CONN_DST_EG1_RELEASETIME = 0x209; // timecent
-    public static final int CONN_DST_EG1_SUSTAINLEVEL = 0x20A; // 0.1%
-    public static final int CONN_DST_EG2_ATTACKTIME = 0x30A; // timecent
-    public static final int CONN_DST_EG2_DECAYTIME = 0x30B; // timecent
-    public static final int CONN_DST_EG2_RELEASETIME = 0x30D; // timecent
-    public static final int CONN_DST_EG2_SUSTAINLEVEL = 0x30E; // 0.1%
-    // DLS2 Destinations
-    public static final int CONN_DST_KEYNUMBER = 0x005;
-    public static final int CONN_DST_LEFT = 0x010; // 0.1%
-    public static final int CONN_DST_RIGHT = 0x011; // 0.1%
-    public static final int CONN_DST_CENTER = 0x012; // 0.1%
-    public static final int CONN_DST_LEFTREAR = 0x013; // 0.1%
-    public static final int CONN_DST_RIGHTREAR = 0x014; // 0.1%
-    public static final int CONN_DST_LFE_CHANNEL = 0x015; // 0.1%
-    public static final int CONN_DST_CHORUS = 0x080; // 0.1%
-    public static final int CONN_DST_REVERB = 0x081; // 0.1%
-    public static final int CONN_DST_VIB_FREQUENCY = 0x114; // cent
-    public static final int CONN_DST_VIB_STARTDELAY = 0x115; // dB
-    public static final int CONN_DST_EG1_DELAYTIME = 0x20B; // timecent
-    public static final int CONN_DST_EG1_HOLDTIME = 0x20C; // timecent
-    public static final int CONN_DST_EG1_SHUTDOWNTIME = 0x20D; // timecent
-    public static final int CONN_DST_EG2_DELAYTIME = 0x30F; // timecent
-    public static final int CONN_DST_EG2_HOLDTIME = 0x310; // timecent
-    public static final int CONN_DST_FILTER_CUTOFF = 0x500; // cent
-    public static final int CONN_DST_FILTER_Q = 0x501; // dB
-
-    // DLS1 Sources
-    public static final int CONN_SRC_NONE = 0x000; // 1
-    public static final int CONN_SRC_LFO = 0x001; // linear (sine wave)
-    public static final int CONN_SRC_KEYONVELOCITY = 0x002; // ??db or velocity??
-    public static final int CONN_SRC_KEYNUMBER = 0x003; // ??cent or keynumber??
-    public static final int CONN_SRC_EG1 = 0x004; // linear direct from eg
-    public static final int CONN_SRC_EG2 = 0x005; // linear direct from eg
-    public static final int CONN_SRC_PITCHWHEEL = 0x006; // linear -1..1
-    public static final int CONN_SRC_CC1 = 0x081; // linear 0..1
-    public static final int CONN_SRC_CC7 = 0x087; // linear 0..1
-    public static final int CONN_SRC_CC10 = 0x08A; // linear 0..1
-    public static final int CONN_SRC_CC11 = 0x08B; // linear 0..1
-    public static final int CONN_SRC_RPN0 = 0x100; // ?? // Pitch Bend Range
-    public static final int CONN_SRC_RPN1 = 0x101; // ?? // Fine Tune
-    public static final int CONN_SRC_RPN2 = 0x102; // ?? // Course Tune
-    // DLS2 Sources
-    public static final int CONN_SRC_POLYPRESSURE = 0x007; // linear 0..1
-    public static final int CONN_SRC_CHANNELPRESSURE = 0x008; // linear 0..1
-    public static final int CONN_SRC_VIBRATO = 0x009; // linear 0..1
-    public static final int CONN_SRC_MONOPRESSURE = 0x00A; // linear 0..1
-    public static final int CONN_SRC_CC91 = 0x0DB; // linear 0..1
-    public static final int CONN_SRC_CC93 = 0x0DD; // linear 0..1
-    // DLS1 Transforms
-    public static final int CONN_TRN_NONE = 0x000;
-    public static final int CONN_TRN_CONCAVE = 0x001;
-    // DLS2 Transforms
-    public static final int CONN_TRN_CONVEX = 0x002;
-    public static final int CONN_TRN_SWITCH = 0x003;
-    public static final int DST_FORMAT_CB = 1;
-    public static final int DST_FORMAT_CENT = 1;
-    public static final int DST_FORMAT_TIMECENT = 2;
-    public static final int DST_FORMAT_PERCENT = 3;
-    int source;
-    int control;
-    int destination;
-    int transform;
-    int scale;
-    int version = 1;
-
-    public int getControl() {
-        return control;
-    }
-
-    public void setControl(int control) {
-        this.control = control;
-    }
-
-    public static int getDestinationFormat(int destination) {
-
-        if (destination == CONN_DST_GAIN)
-            return DST_FORMAT_CB;
-        if (destination == CONN_DST_PITCH)
-            return DST_FORMAT_CENT;
-        if (destination == CONN_DST_PAN)
-            return DST_FORMAT_PERCENT;
-
-        if (destination == CONN_DST_LFO_FREQUENCY)
-            return DST_FORMAT_CENT;
-        if (destination == CONN_DST_LFO_STARTDELAY)
-            return DST_FORMAT_TIMECENT;
-
-        if (destination == CONN_DST_EG1_ATTACKTIME)
-            return DST_FORMAT_TIMECENT;
-        if (destination == CONN_DST_EG1_DECAYTIME)
-            return DST_FORMAT_TIMECENT;
-        if (destination == CONN_DST_EG1_RELEASETIME)
-            return DST_FORMAT_TIMECENT;
-        if (destination == CONN_DST_EG1_SUSTAINLEVEL)
-            return DST_FORMAT_PERCENT;
-
-        if (destination == CONN_DST_EG2_ATTACKTIME)
-            return DST_FORMAT_TIMECENT;
-        if (destination == CONN_DST_EG2_DECAYTIME)
-            return DST_FORMAT_TIMECENT;
-        if (destination == CONN_DST_EG2_RELEASETIME)
-            return DST_FORMAT_TIMECENT;
-        if (destination == CONN_DST_EG2_SUSTAINLEVEL)
-            return DST_FORMAT_PERCENT;
-
-        if (destination == CONN_DST_KEYNUMBER)
-            return DST_FORMAT_CENT; // NOT SURE WITHOUT DLS 2 SPEC
-        if (destination == CONN_DST_LEFT)
-            return DST_FORMAT_CB;
-        if (destination == CONN_DST_RIGHT)
-            return DST_FORMAT_CB;
-        if (destination == CONN_DST_CENTER)
-            return DST_FORMAT_CB;
-        if (destination == CONN_DST_LEFTREAR)
-            return DST_FORMAT_CB;
-        if (destination == CONN_DST_RIGHTREAR)
-            return DST_FORMAT_CB;
-        if (destination == CONN_DST_LFE_CHANNEL)
-            return DST_FORMAT_CB;
-        if (destination == CONN_DST_CHORUS)
-            return DST_FORMAT_PERCENT;
-        if (destination == CONN_DST_REVERB)
-            return DST_FORMAT_PERCENT;
-
-        if (destination == CONN_DST_VIB_FREQUENCY)
-            return DST_FORMAT_CENT;
-        if (destination == CONN_DST_VIB_STARTDELAY)
-            return DST_FORMAT_TIMECENT;
-
-        if (destination == CONN_DST_EG1_DELAYTIME)
-            return DST_FORMAT_TIMECENT;
-        if (destination == CONN_DST_EG1_HOLDTIME)
-            return DST_FORMAT_TIMECENT;
-        if (destination == CONN_DST_EG1_SHUTDOWNTIME)
-            return DST_FORMAT_TIMECENT;
-
-        if (destination == CONN_DST_EG2_DELAYTIME)
-            return DST_FORMAT_TIMECENT;
-        if (destination == CONN_DST_EG2_HOLDTIME)
-            return DST_FORMAT_TIMECENT;
-
-        if (destination == CONN_DST_FILTER_CUTOFF)
-            return DST_FORMAT_CENT;
-        if (destination == CONN_DST_FILTER_Q)
-            return DST_FORMAT_CB;
-
-        return -1;
-    }
-
-    public static String getDestinationName(int destination) {
-
-        if (destination == CONN_DST_GAIN)
-            return "gain";
-        if (destination == CONN_DST_PITCH)
-            return "pitch";
-        if (destination == CONN_DST_PAN)
-            return "pan";
-
-        if (destination == CONN_DST_LFO_FREQUENCY)
-            return "lfo1.freq";
-        if (destination == CONN_DST_LFO_STARTDELAY)
-            return "lfo1.delay";
-
-        if (destination == CONN_DST_EG1_ATTACKTIME)
-            return "eg1.attack";
-        if (destination == CONN_DST_EG1_DECAYTIME)
-            return "eg1.decay";
-        if (destination == CONN_DST_EG1_RELEASETIME)
-            return "eg1.release";
-        if (destination == CONN_DST_EG1_SUSTAINLEVEL)
-            return "eg1.sustain";
-
-        if (destination == CONN_DST_EG2_ATTACKTIME)
-            return "eg2.attack";
-        if (destination == CONN_DST_EG2_DECAYTIME)
-            return "eg2.decay";
-        if (destination == CONN_DST_EG2_RELEASETIME)
-            return "eg2.release";
-        if (destination == CONN_DST_EG2_SUSTAINLEVEL)
-            return "eg2.sustain";
-
-        if (destination == CONN_DST_KEYNUMBER)
-            return "keynumber";
-        if (destination == CONN_DST_LEFT)
-            return "left";
-        if (destination == CONN_DST_RIGHT)
-            return "right";
-        if (destination == CONN_DST_CENTER)
-            return "center";
-        if (destination == CONN_DST_LEFTREAR)
-            return "leftrear";
-        if (destination == CONN_DST_RIGHTREAR)
-            return "rightrear";
-        if (destination == CONN_DST_LFE_CHANNEL)
-            return "lfe_channel";
-        if (destination == CONN_DST_CHORUS)
-            return "chorus";
-        if (destination == CONN_DST_REVERB)
-            return "reverb";
-
-        if (destination == CONN_DST_VIB_FREQUENCY)
-            return "vib.freq";
-        if (destination == CONN_DST_VIB_STARTDELAY)
-            return "vib.delay";
-
-        if (destination == CONN_DST_EG1_DELAYTIME)
-            return "eg1.delay";
-        if (destination == CONN_DST_EG1_HOLDTIME)
-            return "eg1.hold";
-        if (destination == CONN_DST_EG1_SHUTDOWNTIME)
-            return "eg1.shutdown";
-
-        if (destination == CONN_DST_EG2_DELAYTIME)
-            return "eg2.delay";
-        if (destination == CONN_DST_EG2_HOLDTIME)
-            return "eg.2hold";
-
-        if (destination == CONN_DST_FILTER_CUTOFF)
-            return "filter.cutoff"; // NOT SURE WITHOUT DLS 2 SPEC
-        if (destination == CONN_DST_FILTER_Q)
-            return "filter.q"; // NOT SURE WITHOUT DLS 2 SPEC
-
-        return null;
-    }
-
-    public static String getSourceName(int source) {
-
-        if (source == CONN_SRC_NONE)
-            return "none";
-        if (source == CONN_SRC_LFO)
-            return "lfo";
-        if (source == CONN_SRC_KEYONVELOCITY)
-            return "keyonvelocity";
-        if (source == CONN_SRC_KEYNUMBER)
-            return "keynumber";
-        if (source == CONN_SRC_EG1)
-            return "eg1";
-        if (source == CONN_SRC_EG2)
-            return "eg2";
-        if (source == CONN_SRC_PITCHWHEEL)
-            return "pitchweel";
-        if (source == CONN_SRC_CC1)
-            return "cc1";
-        if (source == CONN_SRC_CC7)
-            return "cc7";
-        if (source == CONN_SRC_CC10)
-            return "c10";
-        if (source == CONN_SRC_CC11)
-            return "cc11";
-
-        if (source == CONN_SRC_POLYPRESSURE)
-            return "polypressure";
-        if (source == CONN_SRC_CHANNELPRESSURE)
-            return "channelpressure";
-        if (source == CONN_SRC_VIBRATO)
-            return "vibrato";
-        if (source == CONN_SRC_MONOPRESSURE)
-            return "monopressure";
-        if (source == CONN_SRC_CC91)
-            return "cc91";
-        if (source == CONN_SRC_CC93)
-            return "cc93";
-        return null;
-    }
-
-    public int getDestination() {
-        return destination;
-    }
-
-    public void setDestination(int destination) {
-        this.destination = destination;
-    }
-
-    public int getScale() {
-        return scale;
-    }
-
-    public void setScale(int scale) {
-        this.scale = scale;
-    }
-
-    public int getSource() {
-        return source;
-    }
-
-    public void setSource(int source) {
-        this.source = source;
-    }
-
-    public int getVersion() {
-        return version;
-    }
-
-    public void setVersion(int version) {
-        this.version = version;
-    }
-
-    public int getTransform() {
-        return transform;
-    }
-
-    public void setTransform(int transform) {
-        this.transform = transform;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/DLSRegion.java b/ojluni/src/main/java/com/sun/media/sound/DLSRegion.java
deleted file mode 100755
index 3ef1e84..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/DLSRegion.java
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, 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.media.sound;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * This class is used to store region parts for instrument.
- * A region has a velocity and key range which it response to.
- * And it has a list of modulators/articulators which
- * is used how to synthesize a single voice.
- * It is stored inside a "rgn " List Chunk inside DLS files.
- *
- * @author Karl Helgason
- */
-public final class DLSRegion {
-
-    public final static int OPTION_SELFNONEXCLUSIVE = 0x0001;
-    List<DLSModulator> modulators = new ArrayList<DLSModulator>();
-    int keyfrom;
-    int keyto;
-    int velfrom;
-    int velto;
-    int options;
-    int exclusiveClass;
-    int fusoptions;
-    int phasegroup;
-    long channel;
-    DLSSample sample = null;
-    DLSSampleOptions sampleoptions;
-
-    public List<DLSModulator> getModulators() {
-        return modulators;
-    }
-
-    public long getChannel() {
-        return channel;
-    }
-
-    public void setChannel(long channel) {
-        this.channel = channel;
-    }
-
-    public int getExclusiveClass() {
-        return exclusiveClass;
-    }
-
-    public void setExclusiveClass(int exclusiveClass) {
-        this.exclusiveClass = exclusiveClass;
-    }
-
-    public int getFusoptions() {
-        return fusoptions;
-    }
-
-    public void setFusoptions(int fusoptions) {
-        this.fusoptions = fusoptions;
-    }
-
-    public int getKeyfrom() {
-        return keyfrom;
-    }
-
-    public void setKeyfrom(int keyfrom) {
-        this.keyfrom = keyfrom;
-    }
-
-    public int getKeyto() {
-        return keyto;
-    }
-
-    public void setKeyto(int keyto) {
-        this.keyto = keyto;
-    }
-
-    public int getOptions() {
-        return options;
-    }
-
-    public void setOptions(int options) {
-        this.options = options;
-    }
-
-    public int getPhasegroup() {
-        return phasegroup;
-    }
-
-    public void setPhasegroup(int phasegroup) {
-        this.phasegroup = phasegroup;
-    }
-
-    public DLSSample getSample() {
-        return sample;
-    }
-
-    public void setSample(DLSSample sample) {
-        this.sample = sample;
-    }
-
-    public int getVelfrom() {
-        return velfrom;
-    }
-
-    public void setVelfrom(int velfrom) {
-        this.velfrom = velfrom;
-    }
-
-    public int getVelto() {
-        return velto;
-    }
-
-    public void setVelto(int velto) {
-        this.velto = velto;
-    }
-
-    public void setModulators(List<DLSModulator> modulators) {
-        this.modulators = modulators;
-    }
-
-    public DLSSampleOptions getSampleoptions() {
-        return sampleoptions;
-    }
-
-    public void setSampleoptions(DLSSampleOptions sampleOptions) {
-        this.sampleoptions = sampleOptions;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/DLSSample.java b/ojluni/src/main/java/com/sun/media/sound/DLSSample.java
deleted file mode 100755
index 047783d..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/DLSSample.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, 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.media.sound;
-
-import java.io.InputStream;
-import java.util.Arrays;
-import javax.sound.midi.Soundbank;
-import javax.sound.midi.SoundbankResource;
-import javax.sound.sampled.AudioFormat;
-import javax.sound.sampled.AudioInputStream;
-
-/**
- * This class is used to store the sample data itself.
- * A sample is encoded as PCM audio stream
- * and in DLS Level 1 files it is always a mono 8/16 bit stream.
- * They are stored just like RIFF WAVE files are stored.
- * It is stored inside a "wave" List Chunk inside DLS files.
- *
- * @author Karl Helgason
- */
-public final class DLSSample extends SoundbankResource {
-
-    byte[] guid = null;
-    DLSInfo info = new DLSInfo();
-    DLSSampleOptions sampleoptions;
-    ModelByteBuffer data;
-    AudioFormat format;
-
-    public DLSSample(Soundbank soundBank) {
-        super(soundBank, null, AudioInputStream.class);
-    }
-
-    public DLSSample() {
-        super(null, null, AudioInputStream.class);
-    }
-
-    public DLSInfo getInfo() {
-        return info;
-    }
-
-    public Object getData() {
-        AudioFormat format = getFormat();
-
-        InputStream is = data.getInputStream();
-        if (is == null)
-            return null;
-        return new AudioInputStream(is, format, data.capacity());
-    }
-
-    public ModelByteBuffer getDataBuffer() {
-        return data;
-    }
-
-    public AudioFormat getFormat() {
-        return format;
-    }
-
-    public void setFormat(AudioFormat format) {
-        this.format = format;
-    }
-
-    public void setData(ModelByteBuffer data) {
-        this.data = data;
-    }
-
-    public void setData(byte[] data) {
-        this.data = new ModelByteBuffer(data);
-    }
-
-    public void setData(byte[] data, int offset, int length) {
-        this.data = new ModelByteBuffer(data, offset, length);
-    }
-
-    public String getName() {
-        return info.name;
-    }
-
-    public void setName(String name) {
-        info.name = name;
-    }
-
-    public DLSSampleOptions getSampleoptions() {
-        return sampleoptions;
-    }
-
-    public void setSampleoptions(DLSSampleOptions sampleOptions) {
-        this.sampleoptions = sampleOptions;
-    }
-
-    public String toString() {
-        return "Sample: " + info.name;
-    }
-
-    public byte[] getGuid() {
-        return guid == null ? null : Arrays.copyOf(guid, guid.length);
-    }
-
-    public void setGuid(byte[] guid) {
-        this.guid = guid == null ? null : Arrays.copyOf(guid, guid.length);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/DLSSampleLoop.java b/ojluni/src/main/java/com/sun/media/sound/DLSSampleLoop.java
deleted file mode 100755
index 091e383..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/DLSSampleLoop.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, 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.media.sound;
-
-/**
- * This class is used to store loop points inside DLSSampleOptions class.
- *
- * @author Karl Helgason
- */
-public final class DLSSampleLoop {
-
-    public final static int LOOP_TYPE_FORWARD = 0;
-    public final static int LOOP_TYPE_RELEASE = 1;
-    long type;
-    long start;
-    long length;
-
-    public long getLength() {
-        return length;
-    }
-
-    public void setLength(long length) {
-        this.length = length;
-    }
-
-    public long getStart() {
-        return start;
-    }
-
-    public void setStart(long start) {
-        this.start = start;
-    }
-
-    public long getType() {
-        return type;
-    }
-
-    public void setType(long type) {
-        this.type = type;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/DLSSampleOptions.java b/ojluni/src/main/java/com/sun/media/sound/DLSSampleOptions.java
deleted file mode 100755
index 059f318..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/DLSSampleOptions.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, 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.media.sound;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * This class stores options how to playback sampled data like pitch/tuning,
- * attenuation and loops.
- * It is stored as a "wsmp" chunk inside DLS files.
- *
- * @author Karl Helgason
- */
-public final class DLSSampleOptions {
-
-    int unitynote;
-    short finetune;
-    int attenuation;
-    long options;
-    List<DLSSampleLoop> loops = new ArrayList<DLSSampleLoop>();
-
-    public int getAttenuation() {
-        return attenuation;
-    }
-
-    public void setAttenuation(int attenuation) {
-        this.attenuation = attenuation;
-    }
-
-    public short getFinetune() {
-        return finetune;
-    }
-
-    public void setFinetune(short finetune) {
-        this.finetune = finetune;
-    }
-
-    public List<DLSSampleLoop> getLoops() {
-        return loops;
-    }
-
-    public long getOptions() {
-        return options;
-    }
-
-    public void setOptions(long options) {
-        this.options = options;
-    }
-
-    public int getUnitynote() {
-        return unitynote;
-    }
-
-    public void setUnitynote(int unitynote) {
-        this.unitynote = unitynote;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/DLSSoundbank.java b/ojluni/src/main/java/com/sun/media/sound/DLSSoundbank.java
deleted file mode 100755
index 87247ba..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/DLSSoundbank.java
+++ /dev/null
@@ -1,1287 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, 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.media.sound;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Stack;
-
-import javax.sound.midi.Instrument;
-import javax.sound.midi.Patch;
-import javax.sound.midi.Soundbank;
-import javax.sound.midi.SoundbankResource;
-import javax.sound.sampled.AudioFormat;
-import javax.sound.sampled.AudioInputStream;
-import javax.sound.sampled.AudioSystem;
-import javax.sound.sampled.AudioFormat.Encoding;
-
-/**
- * A DLS Level 1 and Level 2 soundbank reader (from files/url/streams).
- *
- * @author Karl Helgason
- */
-public final class DLSSoundbank implements Soundbank {
-
-    static private class DLSID {
-        long i1;
-        int s1;
-        int s2;
-        int x1;
-        int x2;
-        int x3;
-        int x4;
-        int x5;
-        int x6;
-        int x7;
-        int x8;
-
-        private DLSID() {
-        }
-
-        DLSID(long i1, int s1, int s2, int x1, int x2, int x3, int x4,
-                int x5, int x6, int x7, int x8) {
-            this.i1 = i1;
-            this.s1 = s1;
-            this.s2 = s2;
-            this.x1 = x1;
-            this.x2 = x2;
-            this.x3 = x3;
-            this.x4 = x4;
-            this.x5 = x5;
-            this.x6 = x6;
-            this.x7 = x7;
-            this.x8 = x8;
-        }
-
-        public static DLSID read(RIFFReader riff) throws IOException {
-            DLSID d = new DLSID();
-            d.i1 = riff.readUnsignedInt();
-            d.s1 = riff.readUnsignedShort();
-            d.s2 = riff.readUnsignedShort();
-            d.x1 = riff.readUnsignedByte();
-            d.x2 = riff.readUnsignedByte();
-            d.x3 = riff.readUnsignedByte();
-            d.x4 = riff.readUnsignedByte();
-            d.x5 = riff.readUnsignedByte();
-            d.x6 = riff.readUnsignedByte();
-            d.x7 = riff.readUnsignedByte();
-            d.x8 = riff.readUnsignedByte();
-            return d;
-        }
-
-        public int hashCode() {
-            return (int)i1;
-        }
-
-        public boolean equals(Object obj) {
-            if (!(obj instanceof DLSID)) {
-                return false;
-            }
-            DLSID t = (DLSID) obj;
-            return i1 == t.i1 && s1 == t.s1 && s2 == t.s2
-                && x1 == t.x1 && x2 == t.x2 && x3 == t.x3 && x4 == t.x4
-                && x5 == t.x5 && x6 == t.x6 && x7 == t.x7 && x8 == t.x8;
-        }
-    }
-
-    /** X = X & Y */
-    private static final int DLS_CDL_AND = 0x0001;
-    /** X = X | Y */
-    private static final int DLS_CDL_OR = 0x0002;
-    /** X = X ^ Y */
-    private static final int DLS_CDL_XOR = 0x0003;
-    /** X = X + Y */
-    private static final int DLS_CDL_ADD = 0x0004;
-    /** X = X - Y */
-    private static final int DLS_CDL_SUBTRACT = 0x0005;
-    /** X = X * Y */
-    private static final int DLS_CDL_MULTIPLY = 0x0006;
-    /** X = X / Y */
-    private static final int DLS_CDL_DIVIDE = 0x0007;
-    /** X = X && Y */
-    private static final int DLS_CDL_LOGICAL_AND = 0x0008;
-    /** X = X || Y */
-    private static final int DLS_CDL_LOGICAL_OR = 0x0009;
-    /** X = (X < Y) */
-    private static final int DLS_CDL_LT = 0x000A;
-    /** X = (X <= Y) */
-    private static final int DLS_CDL_LE = 0x000B;
-    /** X = (X > Y) */
-    private static final int DLS_CDL_GT = 0x000C;
-    /** X = (X >= Y) */
-    private static final int DLS_CDL_GE = 0x000D;
-    /** X = (X == Y) */
-    private static final int DLS_CDL_EQ = 0x000E;
-    /** X = !X */
-    private static final int DLS_CDL_NOT = 0x000F;
-    /** 32-bit constant */
-    private static final int DLS_CDL_CONST = 0x0010;
-    /** 32-bit value returned from query */
-    private static final int DLS_CDL_QUERY = 0x0011;
-    /** 32-bit value returned from query */
-    private static final int DLS_CDL_QUERYSUPPORTED = 0x0012;
-
-    private static final DLSID DLSID_GMInHardware = new DLSID(0x178f2f24,
-            0xc364, 0x11d1, 0xa7, 0x60, 0x00, 0x00, 0xf8, 0x75, 0xac, 0x12);
-    private static final DLSID DLSID_GSInHardware = new DLSID(0x178f2f25,
-            0xc364, 0x11d1, 0xa7, 0x60, 0x00, 0x00, 0xf8, 0x75, 0xac, 0x12);
-    private static final DLSID DLSID_XGInHardware = new DLSID(0x178f2f26,
-            0xc364, 0x11d1, 0xa7, 0x60, 0x00, 0x00, 0xf8, 0x75, 0xac, 0x12);
-    private static final DLSID DLSID_SupportsDLS1 = new DLSID(0x178f2f27,
-            0xc364, 0x11d1, 0xa7, 0x60, 0x00, 0x00, 0xf8, 0x75, 0xac, 0x12);
-    private static final DLSID DLSID_SupportsDLS2 = new DLSID(0xf14599e5,
-            0x4689, 0x11d2, 0xaf, 0xa6, 0x0, 0xaa, 0x0, 0x24, 0xd8, 0xb6);
-    private static final DLSID DLSID_SampleMemorySize = new DLSID(0x178f2f28,
-            0xc364, 0x11d1, 0xa7, 0x60, 0x00, 0x00, 0xf8, 0x75, 0xac, 0x12);
-    private static final DLSID DLSID_ManufacturersID = new DLSID(0xb03e1181,
-            0x8095, 0x11d2, 0xa1, 0xef, 0x0, 0x60, 0x8, 0x33, 0xdb, 0xd8);
-    private static final DLSID DLSID_ProductID = new DLSID(0xb03e1182,
-            0x8095, 0x11d2, 0xa1, 0xef, 0x0, 0x60, 0x8, 0x33, 0xdb, 0xd8);
-    private static final DLSID DLSID_SamplePlaybackRate = new DLSID(0x2a91f713,
-            0xa4bf, 0x11d2, 0xbb, 0xdf, 0x0, 0x60, 0x8, 0x33, 0xdb, 0xd8);
-
-    private long major = -1;
-    private long minor = -1;
-
-    private final DLSInfo info = new DLSInfo();
-
-    private final List<DLSInstrument> instruments = new ArrayList<DLSInstrument>();
-    private final List<DLSSample> samples = new ArrayList<DLSSample>();
-
-    private boolean largeFormat = false;
-    private File sampleFile;
-
-    public DLSSoundbank() {
-    }
-
-    public DLSSoundbank(URL url) throws IOException {
-        InputStream is = url.openStream();
-        try {
-            readSoundbank(is);
-        } finally {
-            is.close();
-        }
-    }
-
-    public DLSSoundbank(File file) throws IOException {
-        largeFormat = true;
-        sampleFile = file;
-        InputStream is = new FileInputStream(file);
-        try {
-            readSoundbank(is);
-        } finally {
-            is.close();
-        }
-    }
-
-    public DLSSoundbank(InputStream inputstream) throws IOException {
-        readSoundbank(inputstream);
-    }
-
-    private void readSoundbank(InputStream inputstream) throws IOException {
-        RIFFReader riff = new RIFFReader(inputstream);
-        if (!riff.getFormat().equals("RIFF")) {
-            throw new RIFFInvalidFormatException(
-                    "Input stream is not a valid RIFF stream!");
-        }
-        if (!riff.getType().equals("DLS ")) {
-            throw new RIFFInvalidFormatException(
-                    "Input stream is not a valid DLS soundbank!");
-        }
-        while (riff.hasNextChunk()) {
-            RIFFReader chunk = riff.nextChunk();
-            if (chunk.getFormat().equals("LIST")) {
-                if (chunk.getType().equals("INFO"))
-                    readInfoChunk(chunk);
-                if (chunk.getType().equals("lins"))
-                    readLinsChunk(chunk);
-                if (chunk.getType().equals("wvpl"))
-                    readWvplChunk(chunk);
-            } else {
-                if (chunk.getFormat().equals("cdl ")) {
-                    if (!readCdlChunk(chunk)) {
-                        throw new RIFFInvalidFormatException(
-                                "DLS file isn't supported!");
-                    }
-                }
-                if (chunk.getFormat().equals("colh")) {
-                    // skipped because we will load the entire bank into memory
-                    // long instrumentcount = chunk.readUnsignedInt();
-                    // System.out.println("instrumentcount = "+ instrumentcount);
-                }
-                if (chunk.getFormat().equals("ptbl")) {
-                    // Pool Table Chunk
-                    // skipped because we will load the entire bank into memory
-                }
-                if (chunk.getFormat().equals("vers")) {
-                    major = chunk.readUnsignedInt();
-                    minor = chunk.readUnsignedInt();
-                }
-            }
-        }
-
-        for (Map.Entry<DLSRegion, Long> entry : temp_rgnassign.entrySet()) {
-            entry.getKey().sample = samples.get((int)entry.getValue().longValue());
-        }
-
-        temp_rgnassign = null;
-    }
-
-    private boolean cdlIsQuerySupported(DLSID uuid) {
-        return uuid.equals(DLSID_GMInHardware)
-            || uuid.equals(DLSID_GSInHardware)
-            || uuid.equals(DLSID_XGInHardware)
-            || uuid.equals(DLSID_SupportsDLS1)
-            || uuid.equals(DLSID_SupportsDLS2)
-            || uuid.equals(DLSID_SampleMemorySize)
-            || uuid.equals(DLSID_ManufacturersID)
-            || uuid.equals(DLSID_ProductID)
-            || uuid.equals(DLSID_SamplePlaybackRate);
-    }
-
-    private long cdlQuery(DLSID uuid) {
-        if (uuid.equals(DLSID_GMInHardware))
-            return 1;
-        if (uuid.equals(DLSID_GSInHardware))
-            return 0;
-        if (uuid.equals(DLSID_XGInHardware))
-            return 0;
-        if (uuid.equals(DLSID_SupportsDLS1))
-            return 1;
-        if (uuid.equals(DLSID_SupportsDLS2))
-            return 1;
-        if (uuid.equals(DLSID_SampleMemorySize))
-            return Runtime.getRuntime().totalMemory();
-        if (uuid.equals(DLSID_ManufacturersID))
-            return 0;
-        if (uuid.equals(DLSID_ProductID))
-            return 0;
-        if (uuid.equals(DLSID_SamplePlaybackRate))
-            return 44100;
-        return 0;
-    }
-
-
-    // Reading cdl-ck Chunk
-    // "cdl " chunk can only appear inside : DLS,lart,lar2,rgn,rgn2
-    private boolean readCdlChunk(RIFFReader riff) throws IOException {
-
-        DLSID uuid;
-        long x;
-        long y;
-        Stack<Long> stack = new Stack<Long>();
-
-        while (riff.available() != 0) {
-            int opcode = riff.readUnsignedShort();
-            switch (opcode) {
-            case DLS_CDL_AND:
-                x = stack.pop();
-                y = stack.pop();
-                stack.push(Long.valueOf(((x != 0) && (y != 0)) ? 1 : 0));
-                break;
-            case DLS_CDL_OR:
-                x = stack.pop();
-                y = stack.pop();
-                stack.push(Long.valueOf(((x != 0) || (y != 0)) ? 1 : 0));
-                break;
-            case DLS_CDL_XOR:
-                x = stack.pop();
-                y = stack.pop();
-                stack.push(Long.valueOf(((x != 0) ^ (y != 0)) ? 1 : 0));
-                break;
-            case DLS_CDL_ADD:
-                x = stack.pop();
-                y = stack.pop();
-                stack.push(Long.valueOf(x + y));
-                break;
-            case DLS_CDL_SUBTRACT:
-                x = stack.pop();
-                y = stack.pop();
-                stack.push(Long.valueOf(x - y));
-                break;
-            case DLS_CDL_MULTIPLY:
-                x = stack.pop();
-                y = stack.pop();
-                stack.push(Long.valueOf(x * y));
-                break;
-            case DLS_CDL_DIVIDE:
-                x = stack.pop();
-                y = stack.pop();
-                stack.push(Long.valueOf(x / y));
-                break;
-            case DLS_CDL_LOGICAL_AND:
-                x = stack.pop();
-                y = stack.pop();
-                stack.push(Long.valueOf(((x != 0) && (y != 0)) ? 1 : 0));
-                break;
-            case DLS_CDL_LOGICAL_OR:
-                x = stack.pop();
-                y = stack.pop();
-                stack.push(Long.valueOf(((x != 0) || (y != 0)) ? 1 : 0));
-                break;
-            case DLS_CDL_LT:
-                x = stack.pop();
-                y = stack.pop();
-                stack.push(Long.valueOf((x < y) ? 1 : 0));
-                break;
-            case DLS_CDL_LE:
-                x = stack.pop();
-                y = stack.pop();
-                stack.push(Long.valueOf((x <= y) ? 1 : 0));
-                break;
-            case DLS_CDL_GT:
-                x = stack.pop();
-                y = stack.pop();
-                stack.push(Long.valueOf((x > y) ? 1 : 0));
-                break;
-            case DLS_CDL_GE:
-                x = stack.pop();
-                y = stack.pop();
-                stack.push(Long.valueOf((x >= y) ? 1 : 0));
-                break;
-            case DLS_CDL_EQ:
-                x = stack.pop();
-                y = stack.pop();
-                stack.push(Long.valueOf((x == y) ? 1 : 0));
-                break;
-            case DLS_CDL_NOT:
-                x = stack.pop();
-                y = stack.pop();
-                stack.push(Long.valueOf((x == 0) ? 1 : 0));
-                break;
-            case DLS_CDL_CONST:
-                stack.push(Long.valueOf(riff.readUnsignedInt()));
-                break;
-            case DLS_CDL_QUERY:
-                uuid = DLSID.read(riff);
-                stack.push(cdlQuery(uuid));
-                break;
-            case DLS_CDL_QUERYSUPPORTED:
-                uuid = DLSID.read(riff);
-                stack.push(Long.valueOf(cdlIsQuerySupported(uuid) ? 1 : 0));
-                break;
-            default:
-                break;
-            }
-        }
-        if (stack.isEmpty())
-            return false;
-
-        return stack.pop() == 1;
-    }
-
-    private void readInfoChunk(RIFFReader riff) throws IOException {
-        info.name = null;
-        while (riff.hasNextChunk()) {
-            RIFFReader chunk = riff.nextChunk();
-            String format = chunk.getFormat();
-            if (format.equals("INAM"))
-                info.name = chunk.readString(chunk.available());
-            else if (format.equals("ICRD"))
-                info.creationDate = chunk.readString(chunk.available());
-            else if (format.equals("IENG"))
-                info.engineers = chunk.readString(chunk.available());
-            else if (format.equals("IPRD"))
-                info.product = chunk.readString(chunk.available());
-            else if (format.equals("ICOP"))
-                info.copyright = chunk.readString(chunk.available());
-            else if (format.equals("ICMT"))
-                info.comments = chunk.readString(chunk.available());
-            else if (format.equals("ISFT"))
-                info.tools = chunk.readString(chunk.available());
-            else if (format.equals("IARL"))
-                info.archival_location = chunk.readString(chunk.available());
-            else if (format.equals("IART"))
-                info.artist = chunk.readString(chunk.available());
-            else if (format.equals("ICMS"))
-                info.commissioned = chunk.readString(chunk.available());
-            else if (format.equals("IGNR"))
-                info.genre = chunk.readString(chunk.available());
-            else if (format.equals("IKEY"))
-                info.keywords = chunk.readString(chunk.available());
-            else if (format.equals("IMED"))
-                info.medium = chunk.readString(chunk.available());
-            else if (format.equals("ISBJ"))
-                info.subject = chunk.readString(chunk.available());
-            else if (format.equals("ISRC"))
-                info.source = chunk.readString(chunk.available());
-            else if (format.equals("ISRF"))
-                info.source_form = chunk.readString(chunk.available());
-            else if (format.equals("ITCH"))
-                info.technician = chunk.readString(chunk.available());
-        }
-    }
-
-    private void readLinsChunk(RIFFReader riff) throws IOException {
-        while (riff.hasNextChunk()) {
-            RIFFReader chunk = riff.nextChunk();
-            if (chunk.getFormat().equals("LIST")) {
-                if (chunk.getType().equals("ins "))
-                    readInsChunk(chunk);
-            }
-        }
-    }
-
-    private void readInsChunk(RIFFReader riff) throws IOException {
-        DLSInstrument instrument = new DLSInstrument(this);
-
-        while (riff.hasNextChunk()) {
-            RIFFReader chunk = riff.nextChunk();
-            String format = chunk.getFormat();
-            if (format.equals("LIST")) {
-                if (chunk.getType().equals("INFO")) {
-                    readInsInfoChunk(instrument, chunk);
-                }
-                if (chunk.getType().equals("lrgn")) {
-                    while (chunk.hasNextChunk()) {
-                        RIFFReader subchunk = chunk.nextChunk();
-                        if (subchunk.getFormat().equals("LIST")) {
-                            if (subchunk.getType().equals("rgn ")) {
-                                DLSRegion split = new DLSRegion();
-                                if (readRgnChunk(split, subchunk))
-                                    instrument.getRegions().add(split);
-                            }
-                            if (subchunk.getType().equals("rgn2")) {
-                                // support for DLS level 2 regions
-                                DLSRegion split = new DLSRegion();
-                                if (readRgnChunk(split, subchunk))
-                                    instrument.getRegions().add(split);
-                            }
-                        }
-                    }
-                }
-                if (chunk.getType().equals("lart")) {
-                    List<DLSModulator> modlist = new ArrayList<DLSModulator>();
-                    while (chunk.hasNextChunk()) {
-                        RIFFReader subchunk = chunk.nextChunk();
-                        if (chunk.getFormat().equals("cdl ")) {
-                            if (!readCdlChunk(chunk)) {
-                                modlist.clear();
-                                break;
-                            }
-                        }
-                        if (subchunk.getFormat().equals("art1"))
-                            readArt1Chunk(modlist, subchunk);
-                    }
-                    instrument.getModulators().addAll(modlist);
-                }
-                if (chunk.getType().equals("lar2")) {
-                    // support for DLS level 2 ART
-                    List<DLSModulator> modlist = new ArrayList<DLSModulator>();
-                    while (chunk.hasNextChunk()) {
-                        RIFFReader subchunk = chunk.nextChunk();
-                        if (chunk.getFormat().equals("cdl ")) {
-                            if (!readCdlChunk(chunk)) {
-                                modlist.clear();
-                                break;
-                            }
-                        }
-                        if (subchunk.getFormat().equals("art2"))
-                            readArt2Chunk(modlist, subchunk);
-                    }
-                    instrument.getModulators().addAll(modlist);
-                }
-            } else {
-                if (format.equals("dlid")) {
-                    instrument.guid = new byte[16];
-                    chunk.readFully(instrument.guid);
-                }
-                if (format.equals("insh")) {
-                    chunk.readUnsignedInt(); // Read Region Count - ignored
-
-                    int bank = chunk.read();             // LSB
-                    bank += (chunk.read() & 127) << 7;   // MSB
-                    chunk.read(); // Read Reserved byte
-                    int drumins = chunk.read();          // Drum Instrument
-
-                    int id = chunk.read() & 127; // Read only first 7 bits
-                    chunk.read(); // Read Reserved byte
-                    chunk.read(); // Read Reserved byte
-                    chunk.read(); // Read Reserved byte
-
-                    instrument.bank = bank;
-                    instrument.preset = (int) id;
-                    instrument.druminstrument = (drumins & 128) > 0;
-                    //System.out.println("bank="+bank+" drumkit="+drumkit
-                    //        +" id="+id);
-                }
-
-            }
-        }
-        instruments.add(instrument);
-    }
-
-    private void readArt1Chunk(List<DLSModulator> modulators, RIFFReader riff)
-            throws IOException {
-        long size = riff.readUnsignedInt();
-        long count = riff.readUnsignedInt();
-
-        if (size - 8 != 0)
-            riff.skipBytes(size - 8);
-
-        for (int i = 0; i < count; i++) {
-            DLSModulator modulator = new DLSModulator();
-            modulator.version = 1;
-            modulator.source = riff.readUnsignedShort();
-            modulator.control = riff.readUnsignedShort();
-            modulator.destination = riff.readUnsignedShort();
-            modulator.transform = riff.readUnsignedShort();
-            modulator.scale = riff.readInt();
-            modulators.add(modulator);
-        }
-    }
-
-    private void readArt2Chunk(List<DLSModulator> modulators, RIFFReader riff)
-            throws IOException {
-        long size = riff.readUnsignedInt();
-        long count = riff.readUnsignedInt();
-
-        if (size - 8 != 0)
-            riff.skipBytes(size - 8);
-
-        for (int i = 0; i < count; i++) {
-            DLSModulator modulator = new DLSModulator();
-            modulator.version = 2;
-            modulator.source = riff.readUnsignedShort();
-            modulator.control = riff.readUnsignedShort();
-            modulator.destination = riff.readUnsignedShort();
-            modulator.transform = riff.readUnsignedShort();
-            modulator.scale = riff.readInt();
-            modulators.add(modulator);
-        }
-    }
-
-    private Map<DLSRegion, Long> temp_rgnassign = new HashMap<DLSRegion, Long>();
-
-    private boolean readRgnChunk(DLSRegion split, RIFFReader riff)
-            throws IOException {
-        while (riff.hasNextChunk()) {
-            RIFFReader chunk = riff.nextChunk();
-            String format = chunk.getFormat();
-            if (format.equals("LIST")) {
-                if (chunk.getType().equals("lart")) {
-                    List<DLSModulator> modlist = new ArrayList<DLSModulator>();
-                    while (chunk.hasNextChunk()) {
-                        RIFFReader subchunk = chunk.nextChunk();
-                        if (chunk.getFormat().equals("cdl ")) {
-                            if (!readCdlChunk(chunk)) {
-                                modlist.clear();
-                                break;
-                            }
-                        }
-                        if (subchunk.getFormat().equals("art1"))
-                            readArt1Chunk(modlist, subchunk);
-                    }
-                    split.getModulators().addAll(modlist);
-                }
-                if (chunk.getType().equals("lar2")) {
-                    // support for DLS level 2 ART
-                    List<DLSModulator> modlist = new ArrayList<DLSModulator>();
-                    while (chunk.hasNextChunk()) {
-                        RIFFReader subchunk = chunk.nextChunk();
-                        if (chunk.getFormat().equals("cdl ")) {
-                            if (!readCdlChunk(chunk)) {
-                                modlist.clear();
-                                break;
-                            }
-                        }
-                        if (subchunk.getFormat().equals("art2"))
-                            readArt2Chunk(modlist, subchunk);
-                    }
-                    split.getModulators().addAll(modlist);
-                }
-            } else {
-
-                if (format.equals("cdl ")) {
-                    if (!readCdlChunk(chunk))
-                        return false;
-                }
-                if (format.equals("rgnh")) {
-                    split.keyfrom = chunk.readUnsignedShort();
-                    split.keyto = chunk.readUnsignedShort();
-                    split.velfrom = chunk.readUnsignedShort();
-                    split.velto = chunk.readUnsignedShort();
-                    split.options = chunk.readUnsignedShort();
-                    split.exclusiveClass = chunk.readUnsignedShort();
-                }
-                if (format.equals("wlnk")) {
-                    split.fusoptions = chunk.readUnsignedShort();
-                    split.phasegroup = chunk.readUnsignedShort();
-                    split.channel = chunk.readUnsignedInt();
-                    long sampleid = chunk.readUnsignedInt();
-                    temp_rgnassign.put(split, sampleid);
-                }
-                if (format.equals("wsmp")) {
-                    split.sampleoptions = new DLSSampleOptions();
-                    readWsmpChunk(split.sampleoptions, chunk);
-                }
-            }
-        }
-        return true;
-    }
-
-    private void readWsmpChunk(DLSSampleOptions sampleOptions, RIFFReader riff)
-            throws IOException {
-        long size = riff.readUnsignedInt();
-        sampleOptions.unitynote = riff.readUnsignedShort();
-        sampleOptions.finetune = riff.readShort();
-        sampleOptions.attenuation = riff.readInt();
-        sampleOptions.options = riff.readUnsignedInt();
-        long loops = riff.readInt();
-
-        if (size > 20)
-            riff.skipBytes(size - 20);
-
-        for (int i = 0; i < loops; i++) {
-            DLSSampleLoop loop = new DLSSampleLoop();
-            long size2 = riff.readUnsignedInt();
-            loop.type = riff.readUnsignedInt();
-            loop.start = riff.readUnsignedInt();
-            loop.length = riff.readUnsignedInt();
-            sampleOptions.loops.add(loop);
-            if (size2 > 16)
-                riff.skipBytes(size2 - 16);
-        }
-    }
-
-    private void readInsInfoChunk(DLSInstrument dlsinstrument, RIFFReader riff)
-            throws IOException {
-        dlsinstrument.info.name = null;
-        while (riff.hasNextChunk()) {
-            RIFFReader chunk = riff.nextChunk();
-            String format = chunk.getFormat();
-            if (format.equals("INAM")) {
-                dlsinstrument.info.name = chunk.readString(chunk.available());
-            } else if (format.equals("ICRD")) {
-                dlsinstrument.info.creationDate =
-                        chunk.readString(chunk.available());
-            } else if (format.equals("IENG")) {
-                dlsinstrument.info.engineers =
-                        chunk.readString(chunk.available());
-            } else if (format.equals("IPRD")) {
-                dlsinstrument.info.product = chunk.readString(chunk.available());
-            } else if (format.equals("ICOP")) {
-                dlsinstrument.info.copyright =
-                        chunk.readString(chunk.available());
-            } else if (format.equals("ICMT")) {
-                dlsinstrument.info.comments =
-                        chunk.readString(chunk.available());
-            } else if (format.equals("ISFT")) {
-                dlsinstrument.info.tools = chunk.readString(chunk.available());
-            } else if (format.equals("IARL")) {
-                dlsinstrument.info.archival_location =
-                        chunk.readString(chunk.available());
-            } else if (format.equals("IART")) {
-                dlsinstrument.info.artist = chunk.readString(chunk.available());
-            } else if (format.equals("ICMS")) {
-                dlsinstrument.info.commissioned =
-                        chunk.readString(chunk.available());
-            } else if (format.equals("IGNR")) {
-                dlsinstrument.info.genre = chunk.readString(chunk.available());
-            } else if (format.equals("IKEY")) {
-                dlsinstrument.info.keywords =
-                        chunk.readString(chunk.available());
-            } else if (format.equals("IMED")) {
-                dlsinstrument.info.medium = chunk.readString(chunk.available());
-            } else if (format.equals("ISBJ")) {
-                dlsinstrument.info.subject = chunk.readString(chunk.available());
-            } else if (format.equals("ISRC")) {
-                dlsinstrument.info.source = chunk.readString(chunk.available());
-            } else if (format.equals("ISRF")) {
-                dlsinstrument.info.source_form =
-                        chunk.readString(chunk.available());
-            } else if (format.equals("ITCH")) {
-                dlsinstrument.info.technician =
-                        chunk.readString(chunk.available());
-            }
-        }
-    }
-
-    private void readWvplChunk(RIFFReader riff) throws IOException {
-        while (riff.hasNextChunk()) {
-            RIFFReader chunk = riff.nextChunk();
-            if (chunk.getFormat().equals("LIST")) {
-                if (chunk.getType().equals("wave"))
-                    readWaveChunk(chunk);
-            }
-        }
-    }
-
-    private void readWaveChunk(RIFFReader riff) throws IOException {
-        DLSSample sample = new DLSSample(this);
-
-        while (riff.hasNextChunk()) {
-            RIFFReader chunk = riff.nextChunk();
-            String format = chunk.getFormat();
-            if (format.equals("LIST")) {
-                if (chunk.getType().equals("INFO")) {
-                    readWaveInfoChunk(sample, chunk);
-                }
-            } else {
-                if (format.equals("dlid")) {
-                    sample.guid = new byte[16];
-                    chunk.readFully(sample.guid);
-                }
-
-                if (format.equals("fmt ")) {
-                    int sampleformat = chunk.readUnsignedShort();
-                    if (sampleformat != 1 && sampleformat != 3) {
-                        throw new RIFFInvalidDataException(
-                                "Only PCM samples are supported!");
-                    }
-                    int channels = chunk.readUnsignedShort();
-                    long samplerate = chunk.readUnsignedInt();
-                    // bytes per sec
-                    /* long framerate = */ chunk.readUnsignedInt();
-                    // block align, framesize
-                    int framesize = chunk.readUnsignedShort();
-                    int bits = chunk.readUnsignedShort();
-                    AudioFormat audioformat = null;
-                    if (sampleformat == 1) {
-                        if (bits == 8) {
-                            audioformat = new AudioFormat(
-                                    Encoding.PCM_UNSIGNED, samplerate, bits,
-                                    channels, framesize, samplerate, false);
-                        } else {
-                            audioformat = new AudioFormat(
-                                    Encoding.PCM_SIGNED, samplerate, bits,
-                                    channels, framesize, samplerate, false);
-                        }
-                    }
-                    if (sampleformat == 3) {
-                        audioformat = new AudioFormat(
-                                Encoding.PCM_FLOAT, samplerate, bits,
-                                channels, framesize, samplerate, false);
-                    }
-
-                    sample.format = audioformat;
-                }
-
-                if (format.equals("data")) {
-                    if (largeFormat) {
-                        sample.setData(new ModelByteBuffer(sampleFile,
-                                chunk.getFilePointer(), chunk.available()));
-                    } else {
-                        byte[] buffer = new byte[chunk.available()];
-                        //  chunk.read(buffer);
-                        sample.setData(buffer);
-
-                        int read = 0;
-                        int avail = chunk.available();
-                        while (read != avail) {
-                            if (avail - read > 65536) {
-                                chunk.readFully(buffer, read, 65536);
-                                read += 65536;
-                            } else {
-                                chunk.readFully(buffer, read, avail - read);
-                                read = avail;
-                            }
-                        }
-                    }
-                }
-
-                if (format.equals("wsmp")) {
-                    sample.sampleoptions = new DLSSampleOptions();
-                    readWsmpChunk(sample.sampleoptions, chunk);
-                }
-            }
-        }
-
-        samples.add(sample);
-
-    }
-
-    private void readWaveInfoChunk(DLSSample dlssample, RIFFReader riff)
-            throws IOException {
-        dlssample.info.name = null;
-        while (riff.hasNextChunk()) {
-            RIFFReader chunk = riff.nextChunk();
-            String format = chunk.getFormat();
-            if (format.equals("INAM")) {
-                dlssample.info.name = chunk.readString(chunk.available());
-            } else if (format.equals("ICRD")) {
-                dlssample.info.creationDate =
-                        chunk.readString(chunk.available());
-            } else if (format.equals("IENG")) {
-                dlssample.info.engineers = chunk.readString(chunk.available());
-            } else if (format.equals("IPRD")) {
-                dlssample.info.product = chunk.readString(chunk.available());
-            } else if (format.equals("ICOP")) {
-                dlssample.info.copyright = chunk.readString(chunk.available());
-            } else if (format.equals("ICMT")) {
-                dlssample.info.comments = chunk.readString(chunk.available());
-            } else if (format.equals("ISFT")) {
-                dlssample.info.tools = chunk.readString(chunk.available());
-            } else if (format.equals("IARL")) {
-                dlssample.info.archival_location =
-                        chunk.readString(chunk.available());
-            } else if (format.equals("IART")) {
-                dlssample.info.artist = chunk.readString(chunk.available());
-            } else if (format.equals("ICMS")) {
-                dlssample.info.commissioned =
-                        chunk.readString(chunk.available());
-            } else if (format.equals("IGNR")) {
-                dlssample.info.genre = chunk.readString(chunk.available());
-            } else if (format.equals("IKEY")) {
-                dlssample.info.keywords = chunk.readString(chunk.available());
-            } else if (format.equals("IMED")) {
-                dlssample.info.medium = chunk.readString(chunk.available());
-            } else if (format.equals("ISBJ")) {
-                dlssample.info.subject = chunk.readString(chunk.available());
-            } else if (format.equals("ISRC")) {
-                dlssample.info.source = chunk.readString(chunk.available());
-            } else if (format.equals("ISRF")) {
-                dlssample.info.source_form = chunk.readString(chunk.available());
-            } else if (format.equals("ITCH")) {
-                dlssample.info.technician = chunk.readString(chunk.available());
-            }
-        }
-    }
-
-    public void save(String name) throws IOException {
-        writeSoundbank(new RIFFWriter(name, "DLS "));
-    }
-
-    public void save(File file) throws IOException {
-        writeSoundbank(new RIFFWriter(file, "DLS "));
-    }
-
-    public void save(OutputStream out) throws IOException {
-        writeSoundbank(new RIFFWriter(out, "DLS "));
-    }
-
-    private void writeSoundbank(RIFFWriter writer) throws IOException {
-        RIFFWriter colh_chunk = writer.writeChunk("colh");
-        colh_chunk.writeUnsignedInt(instruments.size());
-
-        if (major != -1 && minor != -1) {
-            RIFFWriter vers_chunk = writer.writeChunk("vers");
-            vers_chunk.writeUnsignedInt(major);
-            vers_chunk.writeUnsignedInt(minor);
-        }
-
-        writeInstruments(writer.writeList("lins"));
-
-        RIFFWriter ptbl = writer.writeChunk("ptbl");
-        ptbl.writeUnsignedInt(8);
-        ptbl.writeUnsignedInt(samples.size());
-        long ptbl_offset = writer.getFilePointer();
-        for (int i = 0; i < samples.size(); i++)
-            ptbl.writeUnsignedInt(0);
-
-        RIFFWriter wvpl = writer.writeList("wvpl");
-        long off = wvpl.getFilePointer();
-        List<Long> offsettable = new ArrayList<Long>();
-        for (DLSSample sample : samples) {
-            offsettable.add(Long.valueOf(wvpl.getFilePointer() - off));
-            writeSample(wvpl.writeList("wave"), sample);
-        }
-
-        // small cheat, we are going to rewrite data back in wvpl
-        long bak = writer.getFilePointer();
-        writer.seek(ptbl_offset);
-        writer.setWriteOverride(true);
-        for (Long offset : offsettable)
-            writer.writeUnsignedInt(offset.longValue());
-        writer.setWriteOverride(false);
-        writer.seek(bak);
-
-        writeInfo(writer.writeList("INFO"), info);
-
-        writer.close();
-    }
-
-    private void writeSample(RIFFWriter writer, DLSSample sample)
-            throws IOException {
-
-        AudioFormat audioformat = sample.getFormat();
-
-        Encoding encoding = audioformat.getEncoding();
-        float sampleRate = audioformat.getSampleRate();
-        int sampleSizeInBits = audioformat.getSampleSizeInBits();
-        int channels = audioformat.getChannels();
-        int frameSize = audioformat.getFrameSize();
-        float frameRate = audioformat.getFrameRate();
-        boolean bigEndian = audioformat.isBigEndian();
-
-        boolean convert_needed = false;
-
-        if (audioformat.getSampleSizeInBits() == 8) {
-            if (!encoding.equals(Encoding.PCM_UNSIGNED)) {
-                encoding = Encoding.PCM_UNSIGNED;
-                convert_needed = true;
-            }
-        } else {
-            if (!encoding.equals(Encoding.PCM_SIGNED)) {
-                encoding = Encoding.PCM_SIGNED;
-                convert_needed = true;
-            }
-            if (bigEndian) {
-                bigEndian = false;
-                convert_needed = true;
-            }
-        }
-
-        if (convert_needed) {
-            audioformat = new AudioFormat(encoding, sampleRate,
-                    sampleSizeInBits, channels, frameSize, frameRate, bigEndian);
-        }
-
-        // fmt
-        RIFFWriter fmt_chunk = writer.writeChunk("fmt ");
-        int sampleformat = 0;
-        if (audioformat.getEncoding().equals(Encoding.PCM_UNSIGNED))
-            sampleformat = 1;
-        else if (audioformat.getEncoding().equals(Encoding.PCM_SIGNED))
-            sampleformat = 1;
-        else if (audioformat.getEncoding().equals(Encoding.PCM_FLOAT))
-            sampleformat = 3;
-
-        fmt_chunk.writeUnsignedShort(sampleformat);
-        fmt_chunk.writeUnsignedShort(audioformat.getChannels());
-        fmt_chunk.writeUnsignedInt((long) audioformat.getSampleRate());
-        long srate = ((long)audioformat.getFrameRate())*audioformat.getFrameSize();
-        fmt_chunk.writeUnsignedInt(srate);
-        fmt_chunk.writeUnsignedShort(audioformat.getFrameSize());
-        fmt_chunk.writeUnsignedShort(audioformat.getSampleSizeInBits());
-        fmt_chunk.write(0);
-        fmt_chunk.write(0);
-
-        writeSampleOptions(writer.writeChunk("wsmp"), sample.sampleoptions);
-
-        if (convert_needed) {
-            RIFFWriter data_chunk = writer.writeChunk("data");
-            AudioInputStream stream = AudioSystem.getAudioInputStream(
-                    audioformat, (AudioInputStream)sample.getData());
-            byte[] buff = new byte[1024];
-            int ret;
-            while ((ret = stream.read(buff)) != -1) {
-                data_chunk.write(buff, 0, ret);
-            }
-        } else {
-            RIFFWriter data_chunk = writer.writeChunk("data");
-            ModelByteBuffer databuff = sample.getDataBuffer();
-            databuff.writeTo(data_chunk);
-            /*
-            data_chunk.write(databuff.array(),
-            databuff.arrayOffset(),
-            databuff.capacity());
-             */
-        }
-
-        writeInfo(writer.writeList("INFO"), sample.info);
-    }
-
-    private void writeInstruments(RIFFWriter writer) throws IOException {
-        for (DLSInstrument instrument : instruments) {
-            writeInstrument(writer.writeList("ins "), instrument);
-        }
-    }
-
-    private void writeInstrument(RIFFWriter writer, DLSInstrument instrument)
-            throws IOException {
-
-        int art1_count = 0;
-        int art2_count = 0;
-        for (DLSModulator modulator : instrument.getModulators()) {
-            if (modulator.version == 1)
-                art1_count++;
-            if (modulator.version == 2)
-                art2_count++;
-        }
-        for (DLSRegion region : instrument.regions) {
-            for (DLSModulator modulator : region.getModulators()) {
-                if (modulator.version == 1)
-                    art1_count++;
-                if (modulator.version == 2)
-                    art2_count++;
-            }
-        }
-
-        int version = 1;
-        if (art2_count > 0)
-            version = 2;
-
-        RIFFWriter insh_chunk = writer.writeChunk("insh");
-        insh_chunk.writeUnsignedInt(instrument.getRegions().size());
-        insh_chunk.writeUnsignedInt(instrument.bank +
-                (instrument.druminstrument ? 2147483648L : 0));
-        insh_chunk.writeUnsignedInt(instrument.preset);
-
-        RIFFWriter lrgn = writer.writeList("lrgn");
-        for (DLSRegion region: instrument.regions)
-            writeRegion(lrgn, region, version);
-
-        writeArticulators(writer, instrument.getModulators());
-
-        writeInfo(writer.writeList("INFO"), instrument.info);
-
-    }
-
-    private void writeArticulators(RIFFWriter writer,
-            List<DLSModulator> modulators) throws IOException {
-        int art1_count = 0;
-        int art2_count = 0;
-        for (DLSModulator modulator : modulators) {
-            if (modulator.version == 1)
-                art1_count++;
-            if (modulator.version == 2)
-                art2_count++;
-        }
-        if (art1_count > 0) {
-            RIFFWriter lar1 = writer.writeList("lart");
-            RIFFWriter art1 = lar1.writeChunk("art1");
-            art1.writeUnsignedInt(8);
-            art1.writeUnsignedInt(art1_count);
-            for (DLSModulator modulator : modulators) {
-                if (modulator.version == 1) {
-                    art1.writeUnsignedShort(modulator.source);
-                    art1.writeUnsignedShort(modulator.control);
-                    art1.writeUnsignedShort(modulator.destination);
-                    art1.writeUnsignedShort(modulator.transform);
-                    art1.writeInt(modulator.scale);
-                }
-            }
-        }
-        if (art2_count > 0) {
-            RIFFWriter lar2 = writer.writeList("lar2");
-            RIFFWriter art2 = lar2.writeChunk("art2");
-            art2.writeUnsignedInt(8);
-            art2.writeUnsignedInt(art2_count);
-            for (DLSModulator modulator : modulators) {
-                if (modulator.version == 2) {
-                    art2.writeUnsignedShort(modulator.source);
-                    art2.writeUnsignedShort(modulator.control);
-                    art2.writeUnsignedShort(modulator.destination);
-                    art2.writeUnsignedShort(modulator.transform);
-                    art2.writeInt(modulator.scale);
-                }
-            }
-        }
-    }
-
-    private void writeRegion(RIFFWriter writer, DLSRegion region, int version)
-            throws IOException {
-        RIFFWriter rgns = null;
-        if (version == 1)
-            rgns = writer.writeList("rgn ");
-        if (version == 2)
-            rgns = writer.writeList("rgn2");
-        if (rgns == null)
-            return;
-
-        RIFFWriter rgnh = rgns.writeChunk("rgnh");
-        rgnh.writeUnsignedShort(region.keyfrom);
-        rgnh.writeUnsignedShort(region.keyto);
-        rgnh.writeUnsignedShort(region.velfrom);
-        rgnh.writeUnsignedShort(region.velto);
-        rgnh.writeUnsignedShort(region.options);
-        rgnh.writeUnsignedShort(region.exclusiveClass);
-
-        if (region.sampleoptions != null)
-            writeSampleOptions(rgns.writeChunk("wsmp"), region.sampleoptions);
-
-        if (region.sample != null) {
-            if (samples.indexOf(region.sample) != -1) {
-                RIFFWriter wlnk = rgns.writeChunk("wlnk");
-                wlnk.writeUnsignedShort(region.fusoptions);
-                wlnk.writeUnsignedShort(region.phasegroup);
-                wlnk.writeUnsignedInt(region.channel);
-                wlnk.writeUnsignedInt(samples.indexOf(region.sample));
-            }
-        }
-        writeArticulators(rgns, region.getModulators());
-        rgns.close();
-    }
-
-    private void writeSampleOptions(RIFFWriter wsmp,
-            DLSSampleOptions sampleoptions) throws IOException {
-        wsmp.writeUnsignedInt(20);
-        wsmp.writeUnsignedShort(sampleoptions.unitynote);
-        wsmp.writeShort(sampleoptions.finetune);
-        wsmp.writeInt(sampleoptions.attenuation);
-        wsmp.writeUnsignedInt(sampleoptions.options);
-        wsmp.writeInt(sampleoptions.loops.size());
-
-        for (DLSSampleLoop loop : sampleoptions.loops) {
-            wsmp.writeUnsignedInt(16);
-            wsmp.writeUnsignedInt(loop.type);
-            wsmp.writeUnsignedInt(loop.start);
-            wsmp.writeUnsignedInt(loop.length);
-        }
-    }
-
-    private void writeInfoStringChunk(RIFFWriter writer,
-            String name, String value) throws IOException {
-        if (value == null)
-            return;
-        RIFFWriter chunk = writer.writeChunk(name);
-        chunk.writeString(value);
-        int len = value.getBytes("ascii").length;
-        chunk.write(0);
-        len++;
-        if (len % 2 != 0)
-            chunk.write(0);
-    }
-
-    private void writeInfo(RIFFWriter writer, DLSInfo info) throws IOException {
-        writeInfoStringChunk(writer, "INAM", info.name);
-        writeInfoStringChunk(writer, "ICRD", info.creationDate);
-        writeInfoStringChunk(writer, "IENG", info.engineers);
-        writeInfoStringChunk(writer, "IPRD", info.product);
-        writeInfoStringChunk(writer, "ICOP", info.copyright);
-        writeInfoStringChunk(writer, "ICMT", info.comments);
-        writeInfoStringChunk(writer, "ISFT", info.tools);
-        writeInfoStringChunk(writer, "IARL", info.archival_location);
-        writeInfoStringChunk(writer, "IART", info.artist);
-        writeInfoStringChunk(writer, "ICMS", info.commissioned);
-        writeInfoStringChunk(writer, "IGNR", info.genre);
-        writeInfoStringChunk(writer, "IKEY", info.keywords);
-        writeInfoStringChunk(writer, "IMED", info.medium);
-        writeInfoStringChunk(writer, "ISBJ", info.subject);
-        writeInfoStringChunk(writer, "ISRC", info.source);
-        writeInfoStringChunk(writer, "ISRF", info.source_form);
-        writeInfoStringChunk(writer, "ITCH", info.technician);
-    }
-
-    public DLSInfo getInfo() {
-        return info;
-    }
-
-    public String getName() {
-        return info.name;
-    }
-
-    public String getVersion() {
-        return major + "." + minor;
-    }
-
-    public String getVendor() {
-        return info.engineers;
-    }
-
-    public String getDescription() {
-        return info.comments;
-    }
-
-    public void setName(String s) {
-        info.name = s;
-    }
-
-    public void setVendor(String s) {
-        info.engineers = s;
-    }
-
-    public void setDescription(String s) {
-        info.comments = s;
-    }
-
-    public SoundbankResource[] getResources() {
-        SoundbankResource[] resources = new SoundbankResource[samples.size()];
-        int j = 0;
-        for (int i = 0; i < samples.size(); i++)
-            resources[j++] = samples.get(i);
-        return resources;
-    }
-
-    public DLSInstrument[] getInstruments() {
-        DLSInstrument[] inslist_array =
-                instruments.toArray(new DLSInstrument[instruments.size()]);
-        Arrays.sort(inslist_array, new ModelInstrumentComparator());
-        return inslist_array;
-    }
-
-    public DLSSample[] getSamples() {
-        return samples.toArray(new DLSSample[samples.size()]);
-    }
-
-    public Instrument getInstrument(Patch patch) {
-        int program = patch.getProgram();
-        int bank = patch.getBank();
-        boolean percussion = false;
-        if (patch instanceof ModelPatch)
-            percussion = ((ModelPatch) patch).isPercussion();
-        for (Instrument instrument : instruments) {
-            Patch patch2 = instrument.getPatch();
-            int program2 = patch2.getProgram();
-            int bank2 = patch2.getBank();
-            if (program == program2 && bank == bank2) {
-                boolean percussion2 = false;
-                if (patch2 instanceof ModelPatch)
-                    percussion2 = ((ModelPatch) patch2).isPercussion();
-                if (percussion == percussion2)
-                    return instrument;
-            }
-        }
-        return null;
-    }
-
-    public void addResource(SoundbankResource resource) {
-        if (resource instanceof DLSInstrument)
-            instruments.add((DLSInstrument) resource);
-        if (resource instanceof DLSSample)
-            samples.add((DLSSample) resource);
-    }
-
-    public void removeResource(SoundbankResource resource) {
-        if (resource instanceof DLSInstrument)
-            instruments.remove((DLSInstrument) resource);
-        if (resource instanceof DLSSample)
-            samples.remove((DLSSample) resource);
-    }
-
-    public void addInstrument(DLSInstrument resource) {
-        instruments.add(resource);
-    }
-
-    public void removeInstrument(DLSInstrument resource) {
-        instruments.remove(resource);
-    }
-
-    public long getMajor() {
-        return major;
-    }
-
-    public void setMajor(long major) {
-        this.major = major;
-    }
-
-    public long getMinor() {
-        return minor;
-    }
-
-    public void setMinor(long minor) {
-        this.minor = minor;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/DLSSoundbankReader.java b/ojluni/src/main/java/com/sun/media/sound/DLSSoundbankReader.java
deleted file mode 100755
index 0bba5d4..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/DLSSoundbankReader.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, 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.media.sound;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-import javax.sound.midi.InvalidMidiDataException;
-import javax.sound.midi.Soundbank;
-import javax.sound.midi.spi.SoundbankReader;
-
-/**
- * This class is used to connect the DLSSoundBank class
- * to the SoundbankReader SPI interface.
- *
- * @author Karl Helgason
- */
-public final class DLSSoundbankReader extends SoundbankReader {
-
-    public Soundbank getSoundbank(URL url)
-            throws InvalidMidiDataException, IOException {
-        try {
-            return new DLSSoundbank(url);
-        } catch (RIFFInvalidFormatException e) {
-            return null;
-        } catch(IOException ioe) {
-            return null;
-        }
-    }
-
-    public Soundbank getSoundbank(InputStream stream)
-            throws InvalidMidiDataException, IOException {
-        try {
-            stream.mark(512);
-            return new DLSSoundbank(stream);
-        } catch (RIFFInvalidFormatException e) {
-            stream.reset();
-            return null;
-        }
-    }
-
-    public Soundbank getSoundbank(File file)
-            throws InvalidMidiDataException, IOException {
-        try {
-            return new DLSSoundbank(file);
-        } catch (RIFFInvalidFormatException e) {
-            return null;
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/DataPusher.java b/ojluni/src/main/java/com/sun/media/sound/DataPusher.java
deleted file mode 100755
index 814a015..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/DataPusher.java
+++ /dev/null
@@ -1,238 +0,0 @@
-/*
- * Copyright (c) 2002, 2013, 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.media.sound;
-
-import javax.sound.sampled.*;
-
-/**
- * Class to write an AudioInputStream to a SourceDataLine.
- * Was previously an inner class in various classes like JavaSoundAudioClip
- * and sun.audio.AudioDevice.
- * It auto-opens and closes the SourceDataLine.
- *
- * @author Kara Kytle
- * @author Florian Bomers
- */
-
-public final class DataPusher implements Runnable {
-
-    private static final int AUTO_CLOSE_TIME = 5000;
-    private static final boolean DEBUG = false;
-
-    private final SourceDataLine source;
-    private final AudioFormat format;
-
-    // stream as source data
-    private AudioInputStream ais = null;
-
-    // byte array as source data
-    private byte[] audioData = null;
-    private int audioDataByteLength = 0;
-    private int pos;
-    private int newPos = -1;
-    private boolean looping;
-
-    private Thread pushThread = null;
-    private int wantedState;
-    private int threadState;
-
-    private final int STATE_NONE = 0;
-    private final int STATE_PLAYING = 1;
-    private final int STATE_WAITING = 2;
-    private final int STATE_STOPPING = 3;
-    private final int STATE_STOPPED = 4;
-    private final int BUFFER_SIZE = 16384;
-
-    public DataPusher(SourceDataLine sourceLine, AudioFormat format, byte[] audioData, int byteLength) {
-        this.audioData = audioData;
-        this.audioDataByteLength = byteLength;
-        this.format = format;
-        this.source = sourceLine;
-    }
-
-    public DataPusher(SourceDataLine sourceLine, AudioInputStream ais) {
-        this.ais = ais;
-        this.format = ais.getFormat();
-        this.source = sourceLine;
-    }
-
-    public synchronized void start() {
-        start(false);
-    }
-
-    public synchronized void start(boolean loop) {
-        if (DEBUG || Printer.debug) Printer.debug("> DataPusher.start(loop="+loop+")");
-        try {
-            if (threadState == STATE_STOPPING) {
-                // wait that the thread has finished stopping
-                if (DEBUG || Printer.trace)Printer.trace("DataPusher.start(): calling stop()");
-                stop();
-            }
-            looping = loop;
-            newPos = 0;
-            wantedState = STATE_PLAYING;
-            if (!source.isOpen()) {
-                if (DEBUG || Printer.trace)Printer.trace("DataPusher: source.open()");
-                source.open(format);
-            }
-            if (DEBUG || Printer.trace)Printer.trace("DataPusher: source.flush()");
-            source.flush();
-            if (DEBUG || Printer.trace)Printer.trace("DataPusher: source.start()");
-            source.start();
-            if (pushThread == null) {
-                if (DEBUG || Printer.debug) Printer.debug("DataPusher.start(): Starting push");
-                pushThread = JSSecurityManager.createThread(this,
-                                                            null,   // name
-                                                            false,  // daemon
-                                                            -1,    // priority
-                                                            true); // doStart
-            }
-            notifyAll();
-        } catch (Exception e) {
-            if (DEBUG || Printer.err) e.printStackTrace();
-        }
-        if (DEBUG || Printer.debug) Printer.debug("< DataPusher.start(loop="+loop+")");
-    }
-
-
-    public synchronized void stop() {
-        if (DEBUG || Printer.debug) Printer.debug("> DataPusher.stop()");
-        if (threadState == STATE_STOPPING
-            || threadState == STATE_STOPPED
-            || pushThread == null) {
-            if (DEBUG || Printer.debug) Printer.debug("DataPusher.stop(): nothing to do");
-            return;
-        }
-        if (DEBUG || Printer.debug) Printer.debug("DataPusher.stop(): Stopping push");
-
-        wantedState = STATE_WAITING;
-        if (source != null) {
-            if (DEBUG || Printer.trace)Printer.trace("DataPusher: source.flush()");
-            source.flush();
-        }
-        notifyAll();
-        int maxWaitCount = 50; // 5 seconds
-        while ((maxWaitCount-- >= 0) && (threadState == STATE_PLAYING)) {
-            try {
-                wait(100);
-            } catch (InterruptedException e) {  }
-        }
-        if (DEBUG || Printer.debug) Printer.debug("< DataPusher.stop()");
-    }
-
-    synchronized void close() {
-        if (source != null) {
-                if (DEBUG || Printer.trace)Printer.trace("DataPusher.close(): source.close()");
-                source.close();
-        }
-    }
-
-    /**
-     * Write data to the source data line.
-     */
-    public void run() {
-        byte[] buffer = null;
-        boolean useStream = (ais != null);
-        if (useStream) {
-            buffer = new byte[BUFFER_SIZE];
-        } else {
-            buffer = audioData;
-        }
-        while (wantedState != STATE_STOPPING) {
-            //try {
-                if (wantedState == STATE_WAITING) {
-                    // wait for 5 seconds - maybe the clip is to be played again
-                    if (DEBUG || Printer.debug)Printer.debug("DataPusher.run(): waiting 5 seconds");
-                    try {
-                        synchronized(this) {
-                                threadState = STATE_WAITING;
-                                wantedState = STATE_STOPPING;
-                                wait(AUTO_CLOSE_TIME);
-                        }
-                    } catch (InterruptedException ie) {}
-                    if (DEBUG || Printer.debug)Printer.debug("DataPusher.run(): waiting finished");
-                    continue;
-                }
-                if (newPos >= 0) {
-                        pos = newPos;
-                        newPos = -1;
-                }
-                threadState = STATE_PLAYING;
-                int toWrite = BUFFER_SIZE;
-                if (useStream) {
-                    try {
-                        pos = 0; // always write from beginning of buffer
-                        // don't use read(byte[]), because some streams
-                        // may not override that method
-                        toWrite = ais.read(buffer, 0, buffer.length);
-                    } catch (java.io.IOException ioe) {
-                        // end of stream
-                        toWrite = -1;
-                    }
-                } else {
-                    if (toWrite > audioDataByteLength - pos) {
-                        toWrite = audioDataByteLength - pos;
-                    }
-                    if (toWrite == 0) {
-                        toWrite = -1; // end of "stream"
-                    }
-                }
-                if (toWrite < 0) {
-                    if (DEBUG || Printer.debug) Printer.debug("DataPusher.run(): Found end of stream");
-                        if (!useStream && looping) {
-                            if (DEBUG || Printer.debug)Printer.debug("DataPusher.run(): setting pos back to 0");
-                            pos = 0;
-                            continue;
-                        }
-                    if (DEBUG || Printer.debug)Printer.debug("DataPusher.run(): calling drain()");
-                    wantedState = STATE_WAITING;
-                    source.drain();
-                    continue;
-                }
-                if (DEBUG || Printer.debug) Printer.debug("> DataPusher.run(): Writing " + toWrite + " bytes");
-                    int bytesWritten = source.write(buffer, pos, toWrite);
-                    pos += bytesWritten;
-                if (DEBUG || Printer.debug) Printer.debug("< DataPusher.run(): Wrote " + bytesWritten + " bytes");
-        }
-        threadState = STATE_STOPPING;
-        if (DEBUG || Printer.debug)Printer.debug("DataPusher: closing device");
-        if (Printer.trace)Printer.trace("DataPusher: source.flush()");
-        source.flush();
-        if (DEBUG || Printer.trace)Printer.trace("DataPusher: source.stop()");
-        source.stop();
-        if (DEBUG || Printer.trace)Printer.trace("DataPusher: source.flush()");
-        source.flush();
-        if (DEBUG || Printer.trace)Printer.trace("DataPusher: source.close()");
-        source.close();
-        threadState = STATE_STOPPED;
-        synchronized (this) {
-                pushThread = null;
-                notifyAll();
-        }
-        if (DEBUG || Printer.debug)Printer.debug("DataPusher:end of thread");
-    }
-
-} // class DataPusher
diff --git a/ojluni/src/main/java/com/sun/media/sound/DirectAudioDevice.java b/ojluni/src/main/java/com/sun/media/sound/DirectAudioDevice.java
deleted file mode 100755
index d6556f6..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/DirectAudioDevice.java
+++ /dev/null
@@ -1,1492 +0,0 @@
-/*
- * Copyright (c) 2002, 2013, 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.media.sound;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.util.Vector;
-
-import javax.sound.sampled.*;
-
-// IDEA:
-// Use java.util.concurrent.Semaphore,
-// java.util.concurrent.locks.ReentrantLock and other new classes/methods
-// to improve this class's thread safety.
-
-
-/**
- * A Mixer which provides direct access to audio devices
- *
- * @author Florian Bomers
- */
-final class DirectAudioDevice extends AbstractMixer {
-
-    // CONSTANTS
-    private static final int CLIP_BUFFER_TIME = 1000; // in milliseconds
-
-    private static final int DEFAULT_LINE_BUFFER_TIME = 500; // in milliseconds
-
-    // INSTANCE VARIABLES
-
-    /** number of opened lines */
-    private int deviceCountOpened = 0;
-
-    /** number of started lines */
-    private int deviceCountStarted = 0;
-
-    // CONSTRUCTOR
-    DirectAudioDevice(DirectAudioDeviceProvider.DirectAudioDeviceInfo portMixerInfo) {
-        // pass in Line.Info, mixer, controls
-        super(portMixerInfo,              // Mixer.Info
-              null,                       // Control[]
-              null,                       // Line.Info[] sourceLineInfo
-              null);                      // Line.Info[] targetLineInfo
-
-        if (Printer.trace) Printer.trace(">> DirectAudioDevice: constructor");
-
-        // source lines
-        DirectDLI srcLineInfo = createDataLineInfo(true);
-        if (srcLineInfo != null) {
-            sourceLineInfo = new Line.Info[2];
-            // SourcedataLine
-            sourceLineInfo[0] = srcLineInfo;
-            // Clip
-            sourceLineInfo[1] = new DirectDLI(Clip.class, srcLineInfo.getFormats(),
-                                              srcLineInfo.getHardwareFormats(),
-                                              32, // arbitrary minimum buffer size
-                                              AudioSystem.NOT_SPECIFIED);
-        } else {
-            sourceLineInfo = new Line.Info[0];
-        }
-
-        // TargetDataLine
-        DataLine.Info dstLineInfo = createDataLineInfo(false);
-        if (dstLineInfo != null) {
-            targetLineInfo = new Line.Info[1];
-            targetLineInfo[0] = dstLineInfo;
-        } else {
-            targetLineInfo = new Line.Info[0];
-        }
-        if (Printer.trace) Printer.trace("<< DirectAudioDevice: constructor completed");
-    }
-
-    private DirectDLI createDataLineInfo(boolean isSource) {
-        Vector formats = new Vector();
-        AudioFormat[] hardwareFormatArray = null;
-        AudioFormat[] formatArray = null;
-
-        synchronized(formats) {
-            nGetFormats(getMixerIndex(), getDeviceID(),
-                        isSource /* true:SourceDataLine/Clip, false:TargetDataLine */,
-                        formats);
-            if (formats.size() > 0) {
-                int size = formats.size();
-                int formatArraySize = size;
-                hardwareFormatArray = new AudioFormat[size];
-                for (int i = 0; i < size; i++) {
-                    AudioFormat format = (AudioFormat)formats.elementAt(i);
-                    hardwareFormatArray[i] = format;
-                    int bits = format.getSampleSizeInBits();
-                    boolean isSigned = format.getEncoding().equals(AudioFormat.Encoding.PCM_SIGNED);
-                    boolean isUnsigned = format.getEncoding().equals(AudioFormat.Encoding.PCM_UNSIGNED);
-                    if ((isSigned || isUnsigned)) {
-                        // will insert a magically converted format here
-                        formatArraySize++;
-                    }
-                }
-                formatArray = new AudioFormat[formatArraySize];
-                int formatArrayIndex = 0;
-                for (int i = 0; i < size; i++) {
-                    AudioFormat format = hardwareFormatArray[i];
-                    formatArray[formatArrayIndex++] = format;
-                    int bits = format.getSampleSizeInBits();
-                    boolean isSigned = format.getEncoding().equals(AudioFormat.Encoding.PCM_SIGNED);
-                    boolean isUnsigned = format.getEncoding().equals(AudioFormat.Encoding.PCM_UNSIGNED);
-                    // add convenience formats (automatic conversion)
-                    if (bits == 8) {
-                        // add the other signed'ness for 8-bit
-                        if (isSigned) {
-                            formatArray[formatArrayIndex++] =
-                                new AudioFormat(AudioFormat.Encoding.PCM_UNSIGNED,
-                                    format.getSampleRate(), bits, format.getChannels(),
-                                    format.getFrameSize(), format.getSampleRate(),
-                                    format.isBigEndian());
-                        }
-                        else if (isUnsigned) {
-                            formatArray[formatArrayIndex++] =
-                                new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,
-                                    format.getSampleRate(), bits, format.getChannels(),
-                                    format.getFrameSize(), format.getSampleRate(),
-                                    format.isBigEndian());
-                        }
-                    } else if (bits > 8 && (isSigned || isUnsigned)) {
-                        // add the other endian'ness for more than 8-bit
-                        formatArray[formatArrayIndex++] =
-                            new AudioFormat(format.getEncoding(),
-                                              format.getSampleRate(), bits,
-                                              format.getChannels(),
-                                              format.getFrameSize(),
-                                              format.getSampleRate(),
-                                              !format.isBigEndian());
-                    }
-                    //System.out.println("Adding "+v.get(v.size()-1));
-                }
-            }
-        }
-        // todo: find out more about the buffer size ?
-        if (formatArray != null) {
-            return new DirectDLI(isSource?SourceDataLine.class:TargetDataLine.class,
-                                 formatArray, hardwareFormatArray,
-                                 32, // arbitrary minimum buffer size
-                                 AudioSystem.NOT_SPECIFIED);
-        }
-        return null;
-    }
-
-    // ABSTRACT MIXER: ABSTRACT METHOD IMPLEMENTATIONS
-
-    public Line getLine(Line.Info info) throws LineUnavailableException {
-        Line.Info fullInfo = getLineInfo(info);
-        if (fullInfo == null) {
-            throw new IllegalArgumentException("Line unsupported: " + info);
-        }
-        if (fullInfo instanceof DataLine.Info) {
-
-            DataLine.Info dataLineInfo = (DataLine.Info)fullInfo;
-            AudioFormat lineFormat;
-            int lineBufferSize = AudioSystem.NOT_SPECIFIED;
-
-            // if a format is specified by the info class passed in, use it.
-            // otherwise use a format from fullInfo.
-
-            AudioFormat[] supportedFormats = null;
-
-            if (info instanceof DataLine.Info) {
-                supportedFormats = ((DataLine.Info)info).getFormats();
-                lineBufferSize = ((DataLine.Info)info).getMaxBufferSize();
-            }
-
-            if ((supportedFormats == null) || (supportedFormats.length == 0)) {
-                // use the default format
-                lineFormat = null;
-            } else {
-                // use the last format specified in the line.info object passed
-                // in by the app
-                lineFormat = supportedFormats[supportedFormats.length-1];
-
-                // if something is not specified, use default format
-                if (!Toolkit.isFullySpecifiedPCMFormat(lineFormat)) {
-                    lineFormat = null;
-                }
-            }
-
-            if (dataLineInfo.getLineClass().isAssignableFrom(DirectSDL.class)) {
-                return new DirectSDL(dataLineInfo, lineFormat, lineBufferSize, this);
-            }
-            if (dataLineInfo.getLineClass().isAssignableFrom(DirectClip.class)) {
-                return new DirectClip(dataLineInfo, lineFormat, lineBufferSize, this);
-            }
-            if (dataLineInfo.getLineClass().isAssignableFrom(DirectTDL.class)) {
-                return new DirectTDL(dataLineInfo, lineFormat, lineBufferSize, this);
-            }
-        }
-        throw new IllegalArgumentException("Line unsupported: " + info);
-    }
-
-
-    public int getMaxLines(Line.Info info) {
-        Line.Info fullInfo = getLineInfo(info);
-
-        // if it's not supported at all, return 0.
-        if (fullInfo == null) {
-            return 0;
-        }
-
-        if (fullInfo instanceof DataLine.Info) {
-            // DirectAudioDevices should mix !
-            return getMaxSimulLines();
-        }
-
-        return 0;
-    }
-
-
-    protected void implOpen() throws LineUnavailableException {
-        if (Printer.trace) Printer.trace("DirectAudioDevice: implOpen - void method");
-    }
-
-    protected void implClose() {
-        if (Printer.trace) Printer.trace("DirectAudioDevice: implClose - void method");
-    }
-
-    protected void implStart() {
-        if (Printer.trace) Printer.trace("DirectAudioDevice: implStart - void method");
-    }
-
-    protected void implStop() {
-        if (Printer.trace) Printer.trace("DirectAudioDevice: implStop - void method");
-    }
-
-
-    // IMPLEMENTATION HELPERS
-
-    int getMixerIndex() {
-        return ((DirectAudioDeviceProvider.DirectAudioDeviceInfo) getMixerInfo()).getIndex();
-    }
-
-    int getDeviceID() {
-        return ((DirectAudioDeviceProvider.DirectAudioDeviceInfo) getMixerInfo()).getDeviceID();
-    }
-
-    int getMaxSimulLines() {
-        return ((DirectAudioDeviceProvider.DirectAudioDeviceInfo) getMixerInfo()).getMaxSimulLines();
-    }
-
-    private static void addFormat(Vector v, int bits, int frameSizeInBytes, int channels, float sampleRate,
-                                  int encoding, boolean signed, boolean bigEndian) {
-        AudioFormat.Encoding enc = null;
-        switch (encoding) {
-        case PCM:
-            enc = signed?AudioFormat.Encoding.PCM_SIGNED:AudioFormat.Encoding.PCM_UNSIGNED;
-            break;
-        case ULAW:
-            enc = AudioFormat.Encoding.ULAW;
-            if (bits != 8) {
-                if (Printer.err) Printer.err("DirectAudioDevice.addFormat called with ULAW, but bitsPerSample="+bits);
-                bits = 8; frameSizeInBytes = channels;
-            }
-            break;
-        case ALAW:
-            enc = AudioFormat.Encoding.ALAW;
-            if (bits != 8) {
-                if (Printer.err) Printer.err("DirectAudioDevice.addFormat called with ALAW, but bitsPerSample="+bits);
-                bits = 8; frameSizeInBytes = channels;
-            }
-            break;
-        }
-        if (enc==null) {
-            if (Printer.err) Printer.err("DirectAudioDevice.addFormat called with unknown encoding: "+encoding);
-            return;
-        }
-        if (frameSizeInBytes <= 0) {
-            if (channels > 0) {
-                frameSizeInBytes = ((bits + 7) / 8) * channels;
-            } else {
-                frameSizeInBytes = AudioSystem.NOT_SPECIFIED;
-            }
-        }
-        v.add(new AudioFormat(enc, sampleRate, bits, channels, frameSizeInBytes, sampleRate, bigEndian));
-    }
-
-    protected static AudioFormat getSignOrEndianChangedFormat(AudioFormat format) {
-        boolean isSigned = format.getEncoding().equals(AudioFormat.Encoding.PCM_SIGNED);
-        boolean isUnsigned = format.getEncoding().equals(AudioFormat.Encoding.PCM_UNSIGNED);
-        if (format.getSampleSizeInBits() > 8 && isSigned) {
-            // if this is PCM_SIGNED and 16-bit or higher, then try with endian-ness magic
-            return new AudioFormat(format.getEncoding(),
-                                   format.getSampleRate(), format.getSampleSizeInBits(), format.getChannels(),
-                                   format.getFrameSize(), format.getFrameRate(), !format.isBigEndian());
-        }
-        else if (format.getSampleSizeInBits() == 8 && (isSigned || isUnsigned)) {
-            // if this is PCM and 8-bit, then try with signed-ness magic
-            return new AudioFormat(isSigned?AudioFormat.Encoding.PCM_UNSIGNED:AudioFormat.Encoding.PCM_SIGNED,
-                                   format.getSampleRate(), format.getSampleSizeInBits(), format.getChannels(),
-                                   format.getFrameSize(), format.getFrameRate(), format.isBigEndian());
-        }
-        return null;
-    }
-
-
-
-
-    // INNER CLASSES
-
-
-    /**
-     * Private inner class for the DataLine.Info objects
-     * adds a little magic for the isFormatSupported so
-     * that the automagic conversion of endianness and sign
-     * does not show up in the formats array.
-     * I.e. the formats array contains only the formats
-     * that are really supported by the hardware,
-     * but isFormatSupported() also returns true
-     * for formats with wrong endianness.
-     */
-    private static final class DirectDLI extends DataLine.Info {
-        final AudioFormat[] hardwareFormats;
-
-        private DirectDLI(Class clazz, AudioFormat[] formatArray,
-                          AudioFormat[] hardwareFormatArray,
-                          int minBuffer, int maxBuffer) {
-            super(clazz, formatArray, minBuffer, maxBuffer);
-            this.hardwareFormats = hardwareFormatArray;
-        }
-
-        public boolean isFormatSupportedInHardware(AudioFormat format) {
-            if (format == null) return false;
-            for (int i = 0; i < hardwareFormats.length; i++) {
-                if (format.matches(hardwareFormats[i])) {
-                    return true;
-                }
-            }
-            return false;
-        }
-
-        /*public boolean isFormatSupported(AudioFormat format) {
-         *   return isFormatSupportedInHardware(format)
-         *      || isFormatSupportedInHardware(getSignOrEndianChangedFormat(format));
-         *}
-         */
-
-         private AudioFormat[] getHardwareFormats() {
-             return hardwareFormats;
-         }
-    }
-
-    /**
-     * Private inner class as base class for direct lines
-     */
-    private static class DirectDL extends AbstractDataLine implements EventDispatcher.LineMonitor {
-        protected final int mixerIndex;
-        protected final int deviceID;
-        protected long id;
-        protected int waitTime;
-        protected volatile boolean flushing = false;
-        protected final boolean isSource;         // true for SourceDataLine, false for TargetDataLine
-        protected volatile long bytePosition;
-        protected volatile boolean doIO = false;     // true in between start() and stop() calls
-        protected volatile boolean stoppedWritten = false; // true if a write occured in stopped state
-        protected volatile boolean drained = false; // set to true when drain function returns, set to false in write()
-        protected boolean monitoring = false;
-
-        // if native needs to manually swap samples/convert sign, this
-        // is set to the framesize
-        protected int softwareConversionSize = 0;
-        protected AudioFormat hardwareFormat;
-
-        private final Gain gainControl = new Gain();
-        private final Mute muteControl = new Mute();
-        private final Balance balanceControl = new Balance();
-        private final Pan panControl = new Pan();
-        private float leftGain, rightGain;
-        protected volatile boolean noService = false; // do not run the nService method
-
-        // Guards all native calls.
-        protected final Object lockNative = new Object();
-
-        // CONSTRUCTOR
-        protected DirectDL(DataLine.Info info,
-                           DirectAudioDevice mixer,
-                           AudioFormat format,
-                           int bufferSize,
-                           int mixerIndex,
-                           int deviceID,
-                           boolean isSource) {
-            super(info, mixer, null, format, bufferSize);
-            if (Printer.trace) Printer.trace("DirectDL CONSTRUCTOR: info: " + info);
-            this.mixerIndex = mixerIndex;
-            this.deviceID = deviceID;
-            this.waitTime = 10; // 10 milliseconds default wait time
-            this.isSource = isSource;
-
-        }
-
-
-        // ABSTRACT METHOD IMPLEMENTATIONS
-
-        // ABSTRACT LINE / DATALINE
-
-        void implOpen(AudioFormat format, int bufferSize) throws LineUnavailableException {
-            if (Printer.trace) Printer.trace(">> DirectDL: implOpen("+format+", "+bufferSize+" bytes)");
-
-            // $$fb part of fix for 4679187: Clip.open() throws unexpected Exceptions
-            Toolkit.isFullySpecifiedAudioFormat(format);
-
-            // check for record permission
-            if (!isSource) {
-                JSSecurityManager.checkRecordPermission();
-            }
-            int encoding = PCM;
-            if (format.getEncoding().equals(AudioFormat.Encoding.ULAW)) {
-                encoding = ULAW;
-            }
-            else if (format.getEncoding().equals(AudioFormat.Encoding.ALAW)) {
-                encoding = ALAW;
-            }
-
-            if (bufferSize <= AudioSystem.NOT_SPECIFIED) {
-                bufferSize = (int) Toolkit.millis2bytes(format, DEFAULT_LINE_BUFFER_TIME);
-            }
-
-            DirectDLI ddli = null;
-            if (info instanceof DirectDLI) {
-                ddli = (DirectDLI) info;
-            }
-
-            /* set up controls */
-            if (isSource) {
-                if (!format.getEncoding().equals(AudioFormat.Encoding.PCM_SIGNED)
-                    && !format.getEncoding().equals(AudioFormat.Encoding.PCM_UNSIGNED)) {
-                    // no controls for non-PCM formats */
-                    controls = new Control[0];
-                }
-                else if (format.getChannels() > 2
-                         || format.getSampleSizeInBits() > 16) {
-                    // no support for more than 2 channels or more than 16 bits
-                    controls = new Control[0];
-                } else {
-                    if (format.getChannels() == 1) {
-                        controls = new Control[2];
-                    } else {
-                        controls = new Control[4];
-                        controls[2] = balanceControl;
-                        /* to keep compatibility with apps that rely on
-                         * MixerSourceLine's PanControl
-                         */
-                        controls[3] = panControl;
-                    }
-                    controls[0] = gainControl;
-                    controls[1] = muteControl;
-                }
-            }
-            if (Printer.debug) Printer.debug("DirectAudioDevice: got "+controls.length+" controls.");
-
-            hardwareFormat = format;
-
-            /* some magic to account for not-supported endianness or signed-ness */
-            softwareConversionSize = 0;
-            if (ddli != null && !ddli.isFormatSupportedInHardware(format)) {
-                AudioFormat newFormat = getSignOrEndianChangedFormat(format);
-                if (ddli.isFormatSupportedInHardware(newFormat)) {
-                    // apparently, the new format can be used.
-                    hardwareFormat = newFormat;
-                    // So do endian/sign conversion in software
-                    softwareConversionSize = format.getFrameSize() / format.getChannels();
-                    if (Printer.debug) {
-                        Printer.debug("DirectAudioDevice: softwareConversionSize "
-                                      +softwareConversionSize+":");
-                        Printer.debug("  from "+format);
-                        Printer.debug("  to   "+newFormat);
-                    }
-                }
-            }
-
-            // align buffer to full frames
-            bufferSize = ((int) bufferSize / format.getFrameSize()) * format.getFrameSize();
-
-            id = nOpen(mixerIndex, deviceID, isSource,
-                    encoding,
-                    hardwareFormat.getSampleRate(),
-                    hardwareFormat.getSampleSizeInBits(),
-                    hardwareFormat.getFrameSize(),
-                    hardwareFormat.getChannels(),
-                    hardwareFormat.getEncoding().equals(
-                        AudioFormat.Encoding.PCM_SIGNED),
-                    hardwareFormat.isBigEndian(),
-                    bufferSize);
-
-            if (id == 0) {
-                // TODO: nicer error messages...
-                throw new LineUnavailableException(
-                        "line with format "+format+" not supported.");
-            }
-
-            this.bufferSize = nGetBufferSize(id, isSource);
-            if (this.bufferSize < 1) {
-                // this is an error!
-                this.bufferSize = bufferSize;
-            }
-            this.format = format;
-            // wait time = 1/4 of buffer time
-            waitTime = (int) Toolkit.bytes2millis(format, this.bufferSize) / 4;
-            if (waitTime < 10) {
-                waitTime = 1;
-            }
-            else if (waitTime > 1000) {
-                // we have seen large buffer sizes!
-                // never wait for more than a second
-                waitTime = 1000;
-            }
-            bytePosition = 0;
-            stoppedWritten = false;
-            doIO = false;
-            calcVolume();
-
-            if (Printer.trace) Printer.trace("<< DirectDL: implOpen() succeeded");
-        }
-
-
-        void implStart() {
-            if (Printer.trace) Printer.trace(" >> DirectDL: implStart()");
-
-            // check for record permission
-            if (!isSource) {
-                JSSecurityManager.checkRecordPermission();
-            }
-
-            synchronized (lockNative)
-            {
-                nStart(id, isSource);
-            }
-            // check for monitoring/servicing
-            monitoring = requiresServicing();
-            if (monitoring) {
-                getEventDispatcher().addLineMonitor(this);
-            }
-
-            doIO = true;
-
-            // need to set Active and Started
-            // note: the current API always requires that
-            //       Started and Active are set at the same time...
-            if (isSource && stoppedWritten) {
-                setStarted(true);
-                setActive(true);
-            }
-
-            if (Printer.trace) Printer.trace("<< DirectDL: implStart() succeeded");
-        }
-
-        void implStop() {
-            if (Printer.trace) Printer.trace(">> DirectDL: implStop()");
-
-            // check for record permission
-            if (!isSource) {
-                JSSecurityManager.checkRecordPermission();
-            }
-
-            if (monitoring) {
-                getEventDispatcher().removeLineMonitor(this);
-                monitoring = false;
-            }
-            synchronized (lockNative) {
-                nStop(id, isSource);
-            }
-            // wake up any waiting threads
-            synchronized(lock) {
-                // need to set doIO to false before notifying the
-                // read/write thread, that's why isStartedRunning()
-                // cannot be used
-                doIO = false;
-                lock.notifyAll();
-            }
-            setActive(false);
-            setStarted(false);
-            stoppedWritten = false;
-
-            if (Printer.trace) Printer.trace(" << DirectDL: implStop() succeeded");
-        }
-
-        void implClose() {
-            if (Printer.trace) Printer.trace(">> DirectDL: implClose()");
-
-            // check for record permission
-            if (!isSource) {
-                JSSecurityManager.checkRecordPermission();
-            }
-
-            // be sure to remove this monitor
-            if (monitoring) {
-                getEventDispatcher().removeLineMonitor(this);
-                monitoring = false;
-            }
-
-            doIO = false;
-            long oldID = id;
-            id = 0;
-            synchronized (lockNative) {
-                nClose(oldID, isSource);
-            }
-            bytePosition = 0;
-            softwareConversionSize = 0;
-            if (Printer.trace) Printer.trace("<< DirectDL: implClose() succeeded");
-        }
-
-        // METHOD OVERRIDES
-
-        public int available() {
-            if (id == 0) {
-                return 0;
-            }
-            int a;
-            synchronized (lockNative) {
-                a = nAvailable(id, isSource);
-            }
-            return a;
-        }
-
-
-        public void drain() {
-            noService = true;
-            // additional safeguard against draining forever
-            // this occured on Solaris 8 x86, probably due to a bug
-            // in the audio driver
-            int counter = 0;
-            long startPos = getLongFramePosition();
-            boolean posChanged = false;
-            while (!drained) {
-                synchronized (lockNative) {
-                    if ((id == 0) || (!doIO) || !nIsStillDraining(id, isSource))
-                        break;
-                }
-                // check every now and then for a new position
-                if ((counter % 5) == 4) {
-                    long thisFramePos = getLongFramePosition();
-                    posChanged = posChanged | (thisFramePos != startPos);
-                    if ((counter % 50) > 45) {
-                        // when some time elapsed, check that the frame position
-                        // really changed
-                        if (!posChanged) {
-                            if (Printer.err) Printer.err("Native reports isDraining, but frame position does not increase!");
-                            break;
-                        }
-                        posChanged = false;
-                        startPos = thisFramePos;
-                    }
-                }
-                counter++;
-                synchronized(lock) {
-                    try {
-                        lock.wait(10);
-                    } catch (InterruptedException ie) {}
-                }
-            }
-
-            if (doIO && id != 0) {
-                drained = true;
-            }
-            noService = false;
-        }
-
-        public void flush() {
-            if (id != 0) {
-                // first stop ongoing read/write method
-                flushing = true;
-                synchronized(lock) {
-                    lock.notifyAll();
-                }
-                synchronized (lockNative) {
-                    if (id != 0) {
-                        // then flush native buffers
-                        nFlush(id, isSource);
-                    }
-                }
-                drained = true;
-            }
-        }
-
-        // replacement for getFramePosition (see AbstractDataLine)
-        public long getLongFramePosition() {
-            long pos;
-            synchronized (lockNative) {
-                pos = nGetBytePosition(id, isSource, bytePosition);
-            }
-            // hack because ALSA sometimes reports wrong framepos
-            if (pos < 0) {
-                if (Printer.debug) Printer.debug("DirectLine.getLongFramePosition: Native reported pos="
-                                                 +pos+"! is changed to 0. byteposition="+bytePosition);
-                pos = 0;
-            }
-            return (pos / getFormat().getFrameSize());
-        }
-
-
-        /*
-         * write() belongs into SourceDataLine and Clip,
-         * so define it here and make it accessible by
-         * declaring the respective interfaces with DirectSDL and DirectClip
-         */
-        public int write(byte[] b, int off, int len) {
-            flushing = false;
-            if (len == 0) {
-                return 0;
-            }
-            if (len < 0) {
-                throw new IllegalArgumentException("illegal len: "+len);
-            }
-            if (len % getFormat().getFrameSize() != 0) {
-                throw new IllegalArgumentException("illegal request to write "
-                                                   +"non-integral number of frames ("
-                                                   +len+" bytes, "
-                                                   +"frameSize = "+getFormat().getFrameSize()+" bytes)");
-            }
-            if (off < 0) {
-                throw new ArrayIndexOutOfBoundsException(off);
-            }
-            if ((long)off + (long)len > (long)b.length) {
-                throw new ArrayIndexOutOfBoundsException(b.length);
-            }
-
-            if (!isActive() && doIO) {
-                // this is not exactly correct... would be nicer
-                // if the native sub system sent a callback when IO really starts
-                setActive(true);
-                setStarted(true);
-            }
-            int written = 0;
-            while (!flushing) {
-                int thisWritten;
-                synchronized (lockNative) {
-                    thisWritten = nWrite(id, b, off, len,
-                            softwareConversionSize,
-                            leftGain, rightGain);
-                    if (thisWritten < 0) {
-                        // error in native layer
-                        break;
-                    }
-                    bytePosition += thisWritten;
-                    if (thisWritten > 0) {
-                        drained = false;
-                    }
-                }
-                len -= thisWritten;
-                written += thisWritten;
-                if (doIO && len > 0) {
-                    off += thisWritten;
-                    synchronized (lock) {
-                        try {
-                            lock.wait(waitTime);
-                        } catch (InterruptedException ie) {}
-                    }
-                } else {
-                    break;
-                }
-            }
-            if (written > 0 && !doIO) {
-                stoppedWritten = true;
-            }
-            return written;
-        }
-
-        protected boolean requiresServicing() {
-            return nRequiresServicing(id, isSource);
-        }
-
-        // called from event dispatcher for lines that need servicing
-        public void checkLine() {
-            synchronized (lockNative) {
-                if (monitoring
-                        && doIO
-                        && id != 0
-                        && !flushing
-                        && !noService) {
-                    nService(id, isSource);
-                }
-            }
-        }
-
-        private void calcVolume() {
-            if (getFormat() == null) {
-                return;
-            }
-            if (muteControl.getValue()) {
-                leftGain = 0.0f;
-                rightGain = 0.0f;
-                return;
-            }
-            float gain = gainControl.getLinearGain();
-            if (getFormat().getChannels() == 1) {
-                // trivial case: only use gain
-                leftGain = gain;
-                rightGain = gain;
-            } else {
-                // need to combine gain and balance
-                float bal = balanceControl.getValue();
-                if (bal < 0.0f) {
-                    // left
-                    leftGain = gain;
-                    rightGain = gain * (bal + 1.0f);
-                } else {
-                    leftGain = gain * (1.0f - bal);
-                    rightGain = gain;
-                }
-            }
-        }
-
-
-        /////////////////// CONTROLS /////////////////////////////
-
-        protected final class Gain extends FloatControl {
-
-            private float linearGain = 1.0f;
-
-            private Gain() {
-
-                super(FloatControl.Type.MASTER_GAIN,
-                      Toolkit.linearToDB(0.0f),
-                      Toolkit.linearToDB(2.0f),
-                      Math.abs(Toolkit.linearToDB(1.0f)-Toolkit.linearToDB(0.0f))/128.0f,
-                      -1,
-                      0.0f,
-                      "dB", "Minimum", "", "Maximum");
-            }
-
-            public void setValue(float newValue) {
-                // adjust value within range ?? spec says IllegalArgumentException
-                //newValue = Math.min(newValue, getMaximum());
-                //newValue = Math.max(newValue, getMinimum());
-
-                float newLinearGain = Toolkit.dBToLinear(newValue);
-                super.setValue(Toolkit.linearToDB(newLinearGain));
-                // if no exception, commit to our new gain
-                linearGain = newLinearGain;
-                calcVolume();
-            }
-
-            float getLinearGain() {
-                return linearGain;
-            }
-        } // class Gain
-
-
-        private final class Mute extends BooleanControl {
-
-            private Mute() {
-                super(BooleanControl.Type.MUTE, false, "True", "False");
-            }
-
-            public void setValue(boolean newValue) {
-                super.setValue(newValue);
-                calcVolume();
-            }
-        }  // class Mute
-
-        private final class Balance extends FloatControl {
-
-            private Balance() {
-                super(FloatControl.Type.BALANCE, -1.0f, 1.0f, (1.0f / 128.0f), -1, 0.0f,
-                      "", "Left", "Center", "Right");
-            }
-
-            public void setValue(float newValue) {
-                setValueImpl(newValue);
-                panControl.setValueImpl(newValue);
-                calcVolume();
-            }
-
-            void setValueImpl(float newValue) {
-                super.setValue(newValue);
-            }
-
-        } // class Balance
-
-        private final class Pan extends FloatControl {
-
-            private Pan() {
-                super(FloatControl.Type.PAN, -1.0f, 1.0f, (1.0f / 128.0f), -1, 0.0f,
-                      "", "Left", "Center", "Right");
-            }
-
-            public void setValue(float newValue) {
-                setValueImpl(newValue);
-                balanceControl.setValueImpl(newValue);
-                calcVolume();
-            }
-            void setValueImpl(float newValue) {
-                super.setValue(newValue);
-            }
-        } // class Pan
-
-
-
-    } // class DirectDL
-
-
-    /**
-     * Private inner class representing a SourceDataLine
-     */
-    private static final class DirectSDL extends DirectDL
-            implements SourceDataLine {
-
-        // CONSTRUCTOR
-        private DirectSDL(DataLine.Info info,
-                          AudioFormat format,
-                          int bufferSize,
-                          DirectAudioDevice mixer) {
-            super(info, mixer, format, bufferSize, mixer.getMixerIndex(), mixer.getDeviceID(), true);
-            if (Printer.trace) Printer.trace("DirectSDL CONSTRUCTOR: completed");
-        }
-
-    }
-
-    /**
-     * Private inner class representing a TargetDataLine
-     */
-    private static final class DirectTDL extends DirectDL
-            implements TargetDataLine {
-
-        // CONSTRUCTOR
-        private DirectTDL(DataLine.Info info,
-                          AudioFormat format,
-                          int bufferSize,
-                          DirectAudioDevice mixer) {
-            super(info, mixer, format, bufferSize, mixer.getMixerIndex(), mixer.getDeviceID(), false);
-            if (Printer.trace) Printer.trace("DirectTDL CONSTRUCTOR: completed");
-        }
-
-        // METHOD OVERRIDES
-
-        public int read(byte[] b, int off, int len) {
-            flushing = false;
-            if (len == 0) {
-                return 0;
-            }
-            if (len < 0) {
-                throw new IllegalArgumentException("illegal len: "+len);
-            }
-            if (len % getFormat().getFrameSize() != 0) {
-                throw new IllegalArgumentException("illegal request to read "
-                                                   +"non-integral number of frames ("
-                                                   +len+" bytes, "
-                                                   +"frameSize = "+getFormat().getFrameSize()+" bytes)");
-            }
-            if (off < 0) {
-                throw new ArrayIndexOutOfBoundsException(off);
-            }
-            if ((long)off + (long)len > (long)b.length) {
-                throw new ArrayIndexOutOfBoundsException(b.length);
-            }
-            if (!isActive() && doIO) {
-                // this is not exactly correct... would be nicer
-                // if the native sub system sent a callback when IO really starts
-                setActive(true);
-                setStarted(true);
-            }
-            int read = 0;
-            while (doIO && !flushing) {
-                int thisRead;
-                synchronized (lockNative) {
-                    thisRead = nRead(id, b, off, len, softwareConversionSize);
-                    if (thisRead < 0) {
-                        // error in native layer
-                        break;
-                    }
-                    bytePosition += thisRead;
-                    if (thisRead > 0) {
-                        drained = false;
-                    }
-                }
-                len -= thisRead;
-                read += thisRead;
-                if (len > 0) {
-                    off += thisRead;
-                    synchronized(lock) {
-                        try {
-                            lock.wait(waitTime);
-                        } catch (InterruptedException ie) {}
-                    }
-                } else {
-                    break;
-                }
-            }
-            if (flushing) {
-                read = 0;
-            }
-            return read;
-        }
-
-    }
-
-    /**
-     * Private inner class representing a Clip
-     * This clip is realized in software only
-     */
-    private static final class DirectClip extends DirectDL
-            implements Clip, Runnable, AutoClosingClip {
-
-        private Thread thread;
-        private byte[] audioData = null;
-        private int frameSize;         // size of one frame in bytes
-        private int m_lengthInFrames;
-        private int loopCount;
-        private int clipBytePosition;   // index in the audioData array at current playback
-        private int newFramePosition;   // set in setFramePosition()
-        private int loopStartFrame;
-        private int loopEndFrame;      // the last sample included in the loop
-
-        // auto closing clip support
-        private boolean autoclosing = false;
-
-        // CONSTRUCTOR
-        private DirectClip(DataLine.Info info,
-                           AudioFormat format,
-                           int bufferSize,
-                           DirectAudioDevice mixer) {
-            super(info, mixer, format, bufferSize, mixer.getMixerIndex(), mixer.getDeviceID(), true);
-            if (Printer.trace) Printer.trace("DirectClip CONSTRUCTOR: completed");
-        }
-
-        // CLIP METHODS
-
-        public void open(AudioFormat format, byte[] data, int offset, int bufferSize)
-            throws LineUnavailableException {
-
-            // $$fb part of fix for 4679187: Clip.open() throws unexpected Exceptions
-            Toolkit.isFullySpecifiedAudioFormat(format);
-
-            byte[] newData = new byte[bufferSize];
-            System.arraycopy(data, offset, newData, 0, bufferSize);
-            open(format, newData, bufferSize / format.getFrameSize());
-        }
-
-        // this method does not copy the data array
-        private void open(AudioFormat format, byte[] data, int frameLength)
-            throws LineUnavailableException {
-
-            // $$fb part of fix for 4679187: Clip.open() throws unexpected Exceptions
-            Toolkit.isFullySpecifiedAudioFormat(format);
-
-            synchronized (mixer) {
-                if (Printer.trace) Printer.trace("> DirectClip.open(format, data, frameLength)");
-                if (Printer.debug) Printer.debug("   data="+((data==null)?"null":""+data.length+" bytes"));
-                if (Printer.debug) Printer.debug("   frameLength="+frameLength);
-
-                if (isOpen()) {
-                    throw new IllegalStateException("Clip is already open with format " + getFormat() +
-                                                    " and frame lengh of " + getFrameLength());
-                } else {
-                    // if the line is not currently open, try to open it with this format and buffer size
-                    this.audioData = data;
-                    this.frameSize = format.getFrameSize();
-                    this.m_lengthInFrames = frameLength;
-                    // initialize loop selection with full range
-                    bytePosition = 0;
-                    clipBytePosition = 0;
-                    newFramePosition = -1; // means: do not set to a new readFramePos
-                    loopStartFrame = 0;
-                    loopEndFrame = frameLength - 1;
-                    loopCount = 0; // means: play the clip irrespective of loop points from beginning to end
-
-                    try {
-                        // use DirectDL's open method to open it
-                        open(format, (int) Toolkit.millis2bytes(format, CLIP_BUFFER_TIME)); // one second buffer
-                    } catch (LineUnavailableException lue) {
-                        audioData = null;
-                        throw lue;
-                    } catch (IllegalArgumentException iae) {
-                        audioData = null;
-                        throw iae;
-                    }
-
-                    // if we got this far, we can instanciate the thread
-                    int priority = Thread.NORM_PRIORITY
-                        + (Thread.MAX_PRIORITY - Thread.NORM_PRIORITY) / 3;
-                    thread = JSSecurityManager.createThread(this,
-                                                            "Direct Clip", // name
-                                                            true,     // daemon
-                                                            priority, // priority
-                                                            false);  // doStart
-                    // cannot start in createThread, because the thread
-                    // uses the "thread" variable as indicator if it should
-                    // continue to run
-                    thread.start();
-                }
-            }
-            if (isAutoClosing()) {
-                getEventDispatcher().autoClosingClipOpened(this);
-            }
-            if (Printer.trace) Printer.trace("< DirectClip.open completed");
-        }
-
-
-        public void open(AudioInputStream stream) throws LineUnavailableException, IOException {
-
-            // $$fb part of fix for 4679187: Clip.open() throws unexpected Exceptions
-            Toolkit.isFullySpecifiedAudioFormat(format);
-
-            synchronized (mixer) {
-                if (Printer.trace) Printer.trace("> DirectClip.open(stream)");
-                byte[] streamData = null;
-
-                if (isOpen()) {
-                    throw new IllegalStateException("Clip is already open with format " + getFormat() +
-                                                    " and frame lengh of " + getFrameLength());
-                }
-                int lengthInFrames = (int)stream.getFrameLength();
-                if (Printer.debug) Printer.debug("DirectClip: open(AIS): lengthInFrames: " + lengthInFrames);
-
-                int bytesRead = 0;
-                if (lengthInFrames != AudioSystem.NOT_SPECIFIED) {
-                    // read the data from the stream into an array in one fell swoop.
-                    int arraysize = lengthInFrames * stream.getFormat().getFrameSize();
-                    streamData = new byte[arraysize];
-
-                    int bytesRemaining = arraysize;
-                    int thisRead = 0;
-                    while (bytesRemaining > 0 && thisRead >= 0) {
-                        thisRead = stream.read(streamData, bytesRead, bytesRemaining);
-                        if (thisRead > 0) {
-                            bytesRead += thisRead;
-                            bytesRemaining -= thisRead;
-                        }
-                        else if (thisRead == 0) {
-                            Thread.yield();
-                        }
-                    }
-                } else {
-                    // read data from the stream until we reach the end of the stream
-                    // we use a slightly modified version of ByteArrayOutputStream
-                    // to get direct access to the byte array (we don't want a new array
-                    // to be allocated)
-                    int MAX_READ_LIMIT = 16384;
-                    DirectBAOS dbaos  = new DirectBAOS();
-                    byte tmp[] = new byte[MAX_READ_LIMIT];
-                    int thisRead = 0;
-                    while (thisRead >= 0) {
-                        thisRead = stream.read(tmp, 0, tmp.length);
-                        if (thisRead > 0) {
-                            dbaos.write(tmp, 0, thisRead);
-                            bytesRead += thisRead;
-                        }
-                        else if (thisRead == 0) {
-                            Thread.yield();
-                        }
-                    } // while
-                    streamData = dbaos.getInternalBuffer();
-                }
-                lengthInFrames = bytesRead / stream.getFormat().getFrameSize();
-
-                if (Printer.debug) Printer.debug("Read to end of stream. lengthInFrames: " + lengthInFrames);
-
-                // now try to open the device
-                open(stream.getFormat(), streamData, lengthInFrames);
-
-                if (Printer.trace) Printer.trace("< DirectClip.open(stream) succeeded");
-            } // synchronized
-        }
-
-
-        public int getFrameLength() {
-            return m_lengthInFrames;
-        }
-
-
-        public long getMicrosecondLength() {
-            return Toolkit.frames2micros(getFormat(), getFrameLength());
-        }
-
-
-        public void setFramePosition(int frames) {
-            if (Printer.trace) Printer.trace("> DirectClip: setFramePosition: " + frames);
-
-            if (frames < 0) {
-                frames = 0;
-            }
-            else if (frames >= getFrameLength()) {
-                frames = getFrameLength();
-            }
-            if (doIO) {
-                newFramePosition = frames;
-            } else {
-                clipBytePosition = frames * frameSize;
-                newFramePosition = -1;
-            }
-            // fix for failing test050
-            // $$fb although getFramePosition should return the number of rendered
-            // frames, it is intuitive that setFramePosition will modify that
-            // value.
-            bytePosition = frames * frameSize;
-
-            // cease currently playing buffer
-            flush();
-
-            // set new native position (if necessary)
-            // this must come after the flush!
-            synchronized (lockNative) {
-                nSetBytePosition(id, isSource, frames * frameSize);
-            }
-
-            if (Printer.debug) Printer.debug("  DirectClip.setFramePosition: "
-                                             +" doIO="+doIO
-                                             +" newFramePosition="+newFramePosition
-                                             +" clipBytePosition="+clipBytePosition
-                                             +" bytePosition="+bytePosition
-                                             +" getLongFramePosition()="+getLongFramePosition());
-            if (Printer.trace) Printer.trace("< DirectClip: setFramePosition");
-        }
-
-        // replacement for getFramePosition (see AbstractDataLine)
-        public long getLongFramePosition() {
-            /* $$fb
-             * this would be intuitive, but the definition of getFramePosition
-             * is the number of frames rendered since opening the device...
-             * That also means that setFramePosition() means something very
-             * different from getFramePosition() for Clip.
-             */
-            // take into account the case that a new position was set...
-            //if (!doIO && newFramePosition >= 0) {
-            //return newFramePosition;
-            //}
-            return super.getLongFramePosition();
-        }
-
-
-        public synchronized void setMicrosecondPosition(long microseconds) {
-            if (Printer.trace) Printer.trace("> DirectClip: setMicrosecondPosition: " + microseconds);
-
-            long frames = Toolkit.micros2frames(getFormat(), microseconds);
-            setFramePosition((int) frames);
-
-            if (Printer.trace) Printer.trace("< DirectClip: setMicrosecondPosition succeeded");
-        }
-
-        public void setLoopPoints(int start, int end) {
-            if (Printer.trace) Printer.trace("> DirectClip: setLoopPoints: start: " + start + " end: " + end);
-
-            if (start < 0 || start >= getFrameLength()) {
-                throw new IllegalArgumentException("illegal value for start: "+start);
-            }
-            if (end >= getFrameLength()) {
-                throw new IllegalArgumentException("illegal value for end: "+end);
-            }
-
-            if (end == -1) {
-                end = getFrameLength() - 1;
-                if (end < 0) {
-                    end = 0;
-                }
-            }
-
-            // if the end position is less than the start position, throw IllegalArgumentException
-            if (end < start) {
-                throw new IllegalArgumentException("End position " + end + "  preceeds start position " + start);
-            }
-
-            // slight race condition with the run() method, but not a big problem
-            loopStartFrame = start;
-            loopEndFrame = end;
-
-            if (Printer.trace) Printer.trace("  loopStart: " + loopStartFrame + " loopEnd: " + loopEndFrame);
-            if (Printer.trace) Printer.trace("< DirectClip: setLoopPoints completed");
-        }
-
-
-        public void loop(int count) {
-            // note: when count reaches 0, it means that the entire clip
-            // will be played, i.e. it will play past the loop end point
-            loopCount = count;
-            start();
-        }
-
-        // ABSTRACT METHOD IMPLEMENTATIONS
-
-        // ABSTRACT LINE
-
-        void implOpen(AudioFormat format, int bufferSize) throws LineUnavailableException {
-            // only if audioData wasn't set in a calling open(format, byte[], frameSize)
-            // this call is allowed.
-            if (audioData == null) {
-                throw new IllegalArgumentException("illegal call to open() in interface Clip");
-            }
-            super.implOpen(format, bufferSize);
-        }
-
-        void implClose() {
-            if (Printer.trace) Printer.trace(">> DirectClip: implClose()");
-
-            // dispose of thread
-            Thread oldThread = thread;
-            thread = null;
-            doIO = false;
-            if (oldThread != null) {
-                // wake up the thread if it's in wait()
-                synchronized(lock) {
-                    lock.notifyAll();
-                }
-                // wait for the thread to terminate itself,
-                // but max. 2 seconds. Must not be synchronized!
-                try {
-                    oldThread.join(2000);
-                } catch (InterruptedException ie) {}
-            }
-            super.implClose();
-            // remove audioData reference and hand it over to gc
-            audioData = null;
-            newFramePosition = -1;
-
-            // remove this instance from the list of auto closing clips
-            getEventDispatcher().autoClosingClipClosed(this);
-
-            if (Printer.trace) Printer.trace("<< DirectClip: implClose() succeeded");
-        }
-
-
-        void implStart() {
-            if (Printer.trace) Printer.trace("> DirectClip: implStart()");
-            super.implStart();
-            if (Printer.trace) Printer.trace("< DirectClip: implStart() succeeded");
-        }
-
-        void implStop() {
-            if (Printer.trace) Printer.trace(">> DirectClip: implStop()");
-
-            super.implStop();
-            // reset loopCount field so that playback will be normal with
-            // next call to start()
-            loopCount = 0;
-
-            if (Printer.trace) Printer.trace("<< DirectClip: implStop() succeeded");
-        }
-
-
-        // main playback loop
-        public void run() {
-            if (Printer.trace) Printer.trace(">>> DirectClip: run() threadID="+Thread.currentThread().getId());
-            while (thread != null) {
-                // doIO is volatile, but we could check it, then get
-                // pre-empted while another thread changes doIO and notifies,
-                // before we wait (so we sleep in wait forever).
-                synchronized(lock) {
-                    if (!doIO) {
-                        try {
-                            lock.wait();
-                        } catch(InterruptedException ie) {}
-                    }
-                }
-                while (doIO) {
-                    if (newFramePosition >= 0) {
-                        clipBytePosition = newFramePosition * frameSize;
-                        newFramePosition = -1;
-                    }
-                    int endFrame = getFrameLength() - 1;
-                    if (loopCount > 0 || loopCount == LOOP_CONTINUOUSLY) {
-                        endFrame = loopEndFrame;
-                    }
-                    long framePos = (clipBytePosition / frameSize);
-                    int toWriteFrames = (int) (endFrame - framePos + 1);
-                    int toWriteBytes = toWriteFrames * frameSize;
-                    if (toWriteBytes > getBufferSize()) {
-                        toWriteBytes = Toolkit.align(getBufferSize(), frameSize);
-                    }
-                    int written = write(audioData, (int) clipBytePosition, toWriteBytes); // increases bytePosition
-                    clipBytePosition += written;
-                    // make sure nobody called setFramePosition, or stop() during the write() call
-                    if (doIO && newFramePosition < 0 && written >= 0) {
-                        framePos = clipBytePosition / frameSize;
-                        // since endFrame is the last frame to be played,
-                        // framePos is after endFrame when all frames, including framePos,
-                        // are played.
-                        if (framePos > endFrame) {
-                            // at end of playback. If looping is on, loop back to the beginning.
-                            if (loopCount > 0 || loopCount == LOOP_CONTINUOUSLY) {
-                                if (loopCount != LOOP_CONTINUOUSLY) {
-                                    loopCount--;
-                                }
-                                newFramePosition = loopStartFrame;
-                            } else {
-                                // no looping, stop playback
-                                if (Printer.debug) Printer.debug("stop clip in run() loop:");
-                                if (Printer.debug) Printer.debug("  doIO="+doIO+" written="+written+" clipBytePosition="+clipBytePosition);
-                                if (Printer.debug) Printer.debug("  framePos="+framePos+" endFrame="+endFrame);
-                                drain();
-                                stop();
-                            }
-                        }
-                    }
-                }
-            }
-            if (Printer.trace) Printer.trace("<<< DirectClip: run() threadID="+Thread.currentThread().getId());
-        }
-
-        // AUTO CLOSING CLIP SUPPORT
-
-        /* $$mp 2003-10-01
-           The following two methods are common between this class and
-           MixerClip. They should be moved to a base class, together
-           with the instance variable 'autoclosing'. */
-
-        public boolean isAutoClosing() {
-            return autoclosing;
-        }
-
-        public void setAutoClosing(boolean value) {
-            if (value != autoclosing) {
-                if (isOpen()) {
-                    if (value) {
-                        getEventDispatcher().autoClosingClipOpened(this);
-                    } else {
-                        getEventDispatcher().autoClosingClipClosed(this);
-                    }
-                }
-                autoclosing = value;
-            }
-        }
-
-        protected boolean requiresServicing() {
-            // no need for servicing for Clips
-            return false;
-        }
-
-    } // DirectClip
-
-    /*
-     * private inner class representing a ByteArrayOutputStream
-     * which allows retrieval of the internal array
-     */
-    private static class DirectBAOS extends ByteArrayOutputStream {
-        DirectBAOS() {
-            super();
-        }
-
-        public byte[] getInternalBuffer() {
-            return buf;
-        }
-
-    } // class DirectBAOS
-
-
-    private static native void nGetFormats(int mixerIndex, int deviceID,
-                                           boolean isSource, Vector formats);
-
-    private static native long nOpen(int mixerIndex, int deviceID, boolean isSource,
-                                     int encoding,
-                                     float sampleRate,
-                                     int sampleSizeInBits,
-                                     int frameSize,
-                                     int channels,
-                                     boolean signed,
-                                     boolean bigEndian,
-                                     int bufferSize) throws LineUnavailableException;
-    private static native void nStart(long id, boolean isSource);
-    private static native void nStop(long id, boolean isSource);
-    private static native void nClose(long id, boolean isSource);
-    private static native int nWrite(long id, byte[] b, int off, int len, int conversionSize,
-                                     float volLeft, float volRight);
-    private static native int nRead(long id, byte[] b, int off, int len, int conversionSize);
-    private static native int nGetBufferSize(long id, boolean isSource);
-    private static native boolean nIsStillDraining(long id, boolean isSource);
-    private static native void nFlush(long id, boolean isSource);
-    private static native int nAvailable(long id, boolean isSource);
-    // javaPos is number of bytes read/written in Java layer
-    private static native long nGetBytePosition(long id, boolean isSource, long javaPos);
-    private static native void nSetBytePosition(long id, boolean isSource, long pos);
-
-    // returns if the native implementation needs regular calls to nService()
-    private static native boolean nRequiresServicing(long id, boolean isSource);
-    // called in irregular intervals
-    private static native void nService(long id, boolean isSource);
-
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/DirectAudioDeviceProvider.java b/ojluni/src/main/java/com/sun/media/sound/DirectAudioDeviceProvider.java
deleted file mode 100755
index c306dc7..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/DirectAudioDeviceProvider.java
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
- * Copyright (c) 2002, 2013, 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.media.sound;
-
-import javax.sound.sampled.Mixer;
-import javax.sound.sampled.spi.MixerProvider;
-
-
-/**
- * DirectAudioDevice provider.
- *
- * @author Florian Bomers
- */
-public final class DirectAudioDeviceProvider extends MixerProvider {
-
-    // STATIC VARIABLES
-
-    /**
-     * Set of info objects for all port input devices on the system.
-     */
-    private static DirectAudioDeviceInfo[] infos;
-
-    /**
-     * Set of all port input devices on the system.
-     */
-    private static DirectAudioDevice[] devices;
-
-
-    // STATIC
-
-    static {
-        // initialize
-        Platform.initialize();
-    }
-
-
-    // CONSTRUCTOR
-
-
-    /**
-     * Required public no-arg constructor.
-     */
-    public DirectAudioDeviceProvider() {
-        synchronized (DirectAudioDeviceProvider.class) {
-            if (Platform.isDirectAudioEnabled()) {
-                init();
-            } else {
-                infos = new DirectAudioDeviceInfo[0];
-                devices = new DirectAudioDevice[0];
-            }
-        }
-    }
-
-    private static void init() {
-        // get the number of input devices
-        int numDevices = nGetNumDevices();
-
-        if (infos == null || infos.length != numDevices) {
-            if (Printer.trace) Printer.trace("DirectAudioDeviceProvider: init()");
-            // initialize the arrays
-            infos = new DirectAudioDeviceInfo[numDevices];
-            devices = new DirectAudioDevice[numDevices];
-
-            // fill in the info objects now.
-            for (int i = 0; i < infos.length; i++) {
-                infos[i] = nNewDirectAudioDeviceInfo(i);
-            }
-            if (Printer.trace) Printer.trace("DirectAudioDeviceProvider: init(): found numDevices: " + numDevices);
-        }
-    }
-
-    public Mixer.Info[] getMixerInfo() {
-        synchronized (DirectAudioDeviceProvider.class) {
-            Mixer.Info[] localArray = new Mixer.Info[infos.length];
-            System.arraycopy(infos, 0, localArray, 0, infos.length);
-            return localArray;
-        }
-    }
-
-
-    public Mixer getMixer(Mixer.Info info) {
-        synchronized (DirectAudioDeviceProvider.class) {
-            // if the default device is asked, we provide the mixer
-            // with SourceDataLine's
-            if (info == null) {
-                for (int i = 0; i < infos.length; i++) {
-                    Mixer mixer = getDevice(infos[i]);
-                    if (mixer.getSourceLineInfo().length > 0) {
-                        return mixer;
-                    }
-                }
-            }
-            // otherwise get the first mixer that matches
-            // the requested info object
-            for (int i = 0; i < infos.length; i++) {
-                if (infos[i].equals(info)) {
-                    return getDevice(infos[i]);
-                }
-            }
-        }
-        throw new IllegalArgumentException("Mixer " + info.toString() + " not supported by this provider.");
-    }
-
-
-    private static Mixer getDevice(DirectAudioDeviceInfo info) {
-        int index = info.getIndex();
-        if (devices[index] == null) {
-            devices[index] = new DirectAudioDevice(info);
-        }
-        return devices[index];
-    }
-
-    // INNER CLASSES
-
-
-    /**
-     * Info class for DirectAudioDevices.  Adds an index value and a string for
-     * making native references to a particular device.
-     * This constructor is called from native.
-     */
-    static final class DirectAudioDeviceInfo extends Mixer.Info {
-        private final int index;
-        private final int maxSimulLines;
-
-        // For ALSA, the deviceID contains the encoded card index, device index, and sub-device-index
-        private final int deviceID;
-
-        private DirectAudioDeviceInfo(int index, int deviceID, int maxSimulLines,
-                                      String name, String vendor,
-                                      String description, String version) {
-            super(name, vendor, "Direct Audio Device: "+description, version);
-            this.index = index;
-            this.maxSimulLines = maxSimulLines;
-            this.deviceID = deviceID;
-        }
-
-        int getIndex() {
-            return index;
-        }
-
-        int getMaxSimulLines() {
-            return maxSimulLines;
-        }
-
-        int getDeviceID() {
-            return deviceID;
-        }
-    } // class DirectAudioDeviceInfo
-
-    // NATIVE METHODS
-    private static native int nGetNumDevices();
-    // index: [0..nGetNumDevices()-1]
-    private static native DirectAudioDeviceInfo nNewDirectAudioDeviceInfo(int deviceIndex);
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/EmergencySoundbank.java b/ojluni/src/main/java/com/sun/media/sound/EmergencySoundbank.java
deleted file mode 100755
index 587d3ff..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/EmergencySoundbank.java
+++ /dev/null
@@ -1,2695 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, 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.media.sound;
-
-import java.util.Random;
-
-import javax.sound.midi.Patch;
-import javax.sound.sampled.AudioFormat;
-
-/**
- * Emergency Soundbank generator.
- * Used when no other default soundbank can be found.
- *
- * @author Karl Helgason
- */
-public final class EmergencySoundbank {
-
-    private final static String[] general_midi_instruments = {
-        "Acoustic Grand Piano",
-        "Bright Acoustic Piano",
-        "Electric Grand Piano",
-        "Honky-tonk Piano",
-        "Electric Piano 1",
-        "Electric Piano 2",
-        "Harpsichord",
-        "Clavi",
-        "Celesta",
-        "Glockenspiel",
-        "Music Box",
-        "Vibraphone",
-        "Marimba",
-        "Xylophone",
-        "Tubular Bells",
-        "Dulcimer",
-        "Drawbar Organ",
-        "Percussive Organ",
-        "Rock Organ",
-        "Church Organ",
-        "Reed Organ",
-        "Accordion",
-        "Harmonica",
-        "Tango Accordion",
-        "Acoustic Guitar (nylon)",
-        "Acoustic Guitar (steel)",
-        "Electric Guitar (jazz)",
-        "Electric Guitar (clean)",
-        "Electric Guitar (muted)",
-        "Overdriven Guitar",
-        "Distortion Guitar",
-        "Guitar harmonics",
-        "Acoustic Bass",
-        "Electric Bass (finger)",
-        "Electric Bass (pick)",
-        "Fretless Bass",
-        "Slap Bass 1",
-        "Slap Bass 2",
-        "Synth Bass 1",
-        "Synth Bass 2",
-        "Violin",
-        "Viola",
-        "Cello",
-        "Contrabass",
-        "Tremolo Strings",
-        "Pizzicato Strings",
-        "Orchestral Harp",
-        "Timpani",
-        "String Ensemble 1",
-        "String Ensemble 2",
-        "SynthStrings 1",
-        "SynthStrings 2",
-        "Choir Aahs",
-        "Voice Oohs",
-        "Synth Voice",
-        "Orchestra Hit",
-        "Trumpet",
-        "Trombone",
-        "Tuba",
-        "Muted Trumpet",
-        "French Horn",
-        "Brass Section",
-        "SynthBrass 1",
-        "SynthBrass 2",
-        "Soprano Sax",
-        "Alto Sax",
-        "Tenor Sax",
-        "Baritone Sax",
-        "Oboe",
-        "English Horn",
-        "Bassoon",
-        "Clarinet",
-        "Piccolo",
-        "Flute",
-        "Recorder",
-        "Pan Flute",
-        "Blown Bottle",
-        "Shakuhachi",
-        "Whistle",
-        "Ocarina",
-        "Lead 1 (square)",
-        "Lead 2 (sawtooth)",
-        "Lead 3 (calliope)",
-        "Lead 4 (chiff)",
-        "Lead 5 (charang)",
-        "Lead 6 (voice)",
-        "Lead 7 (fifths)",
-        "Lead 8 (bass + lead)",
-        "Pad 1 (new age)",
-        "Pad 2 (warm)",
-        "Pad 3 (polysynth)",
-        "Pad 4 (choir)",
-        "Pad 5 (bowed)",
-        "Pad 6 (metallic)",
-        "Pad 7 (halo)",
-        "Pad 8 (sweep)",
-        "FX 1 (rain)",
-        "FX 2 (soundtrack)",
-        "FX 3 (crystal)",
-        "FX 4 (atmosphere)",
-        "FX 5 (brightness)",
-        "FX 6 (goblins)",
-        "FX 7 (echoes)",
-        "FX 8 (sci-fi)",
-        "Sitar",
-        "Banjo",
-        "Shamisen",
-        "Koto",
-        "Kalimba",
-        "Bag pipe",
-        "Fiddle",
-        "Shanai",
-        "Tinkle Bell",
-        "Agogo",
-        "Steel Drums",
-        "Woodblock",
-        "Taiko Drum",
-        "Melodic Tom",
-        "Synth Drum",
-        "Reverse Cymbal",
-        "Guitar Fret Noise",
-        "Breath Noise",
-        "Seashore",
-        "Bird Tweet",
-        "Telephone Ring",
-        "Helicopter",
-        "Applause",
-        "Gunshot"
-    };
-
-    public static SF2Soundbank createSoundbank() throws Exception {
-        SF2Soundbank sf2 = new SF2Soundbank();
-        sf2.setName("Emergency GM sound set");
-        sf2.setVendor("Generated");
-        sf2.setDescription("Emergency generated soundbank");
-
-        /*
-         *  percussion instruments
-         */
-
-        SF2Layer bass_drum = new_bass_drum(sf2);
-        SF2Layer snare_drum = new_snare_drum(sf2);
-        SF2Layer tom = new_tom(sf2);
-        SF2Layer open_hihat = new_open_hihat(sf2);
-        SF2Layer closed_hihat = new_closed_hihat(sf2);
-        SF2Layer crash_cymbal = new_crash_cymbal(sf2);
-        SF2Layer side_stick = new_side_stick(sf2);
-
-        SF2Layer[] drums = new SF2Layer[128];
-        drums[35] = bass_drum;
-        drums[36] = bass_drum;
-        drums[38] = snare_drum;
-        drums[40] = snare_drum;
-        drums[41] = tom;
-        drums[43] = tom;
-        drums[45] = tom;
-        drums[47] = tom;
-        drums[48] = tom;
-        drums[50] = tom;
-        drums[42] = closed_hihat;
-        drums[44] = closed_hihat;
-        drums[46] = open_hihat;
-        drums[49] = crash_cymbal;
-        drums[51] = crash_cymbal;
-        drums[52] = crash_cymbal;
-        drums[55] = crash_cymbal;
-        drums[57] = crash_cymbal;
-        drums[59] = crash_cymbal;
-
-        // Use side_stick for missing drums:
-        drums[37] = side_stick;
-        drums[39] = side_stick;
-        drums[53] = side_stick;
-        drums[54] = side_stick;
-        drums[56] = side_stick;
-        drums[58] = side_stick;
-        drums[69] = side_stick;
-        drums[70] = side_stick;
-        drums[75] = side_stick;
-        drums[60] = side_stick;
-        drums[61] = side_stick;
-        drums[62] = side_stick;
-        drums[63] = side_stick;
-        drums[64] = side_stick;
-        drums[65] = side_stick;
-        drums[66] = side_stick;
-        drums[67] = side_stick;
-        drums[68] = side_stick;
-        drums[71] = side_stick;
-        drums[72] = side_stick;
-        drums[73] = side_stick;
-        drums[74] = side_stick;
-        drums[76] = side_stick;
-        drums[77] = side_stick;
-        drums[78] = side_stick;
-        drums[79] = side_stick;
-        drums[80] = side_stick;
-        drums[81] = side_stick;
-
-
-        SF2Instrument drum_instrument = new SF2Instrument(sf2);
-        drum_instrument.setName("Standard Kit");
-        drum_instrument.setPatch(new ModelPatch(0, 0, true));
-        sf2.addInstrument(drum_instrument);
-        for (int i = 0; i < drums.length; i++) {
-            if (drums[i] != null) {
-                SF2InstrumentRegion region = new SF2InstrumentRegion();
-                region.setLayer(drums[i]);
-                region.putBytes(SF2InstrumentRegion.GENERATOR_KEYRANGE,
-                        new byte[]{(byte) i, (byte) i});
-                drum_instrument.getRegions().add(region);
-            }
-        }
-
-
-        /*
-         *  melodic instruments
-         */
-
-        SF2Layer gpiano = new_gpiano(sf2);
-        SF2Layer gpiano2 = new_gpiano2(sf2);
-        SF2Layer gpiano_hammer = new_piano_hammer(sf2);
-        SF2Layer piano1 = new_piano1(sf2);
-        SF2Layer epiano1 = new_epiano1(sf2);
-        SF2Layer epiano2 = new_epiano2(sf2);
-
-        SF2Layer guitar = new_guitar1(sf2);
-        SF2Layer guitar_pick = new_guitar_pick(sf2);
-        SF2Layer guitar_dist = new_guitar_dist(sf2);
-        SF2Layer bass1 = new_bass1(sf2);
-        SF2Layer bass2 = new_bass2(sf2);
-        SF2Layer synthbass = new_synthbass(sf2);
-        SF2Layer string2 = new_string2(sf2);
-        SF2Layer orchhit = new_orchhit(sf2);
-        SF2Layer choir = new_choir(sf2);
-        SF2Layer solostring = new_solostring(sf2);
-        SF2Layer organ = new_organ(sf2);
-        SF2Layer ch_organ = new_ch_organ(sf2);
-        SF2Layer bell = new_bell(sf2);
-        SF2Layer flute = new_flute(sf2);
-
-        SF2Layer timpani = new_timpani(sf2);
-        SF2Layer melodic_toms = new_melodic_toms(sf2);
-        SF2Layer trumpet = new_trumpet(sf2);
-        SF2Layer trombone = new_trombone(sf2);
-        SF2Layer brass_section = new_brass_section(sf2);
-        SF2Layer horn = new_horn(sf2);
-        SF2Layer sax = new_sax(sf2);
-        SF2Layer oboe = new_oboe(sf2);
-        SF2Layer bassoon = new_bassoon(sf2);
-        SF2Layer clarinet = new_clarinet(sf2);
-        SF2Layer reverse_cymbal = new_reverse_cymbal(sf2);
-
-        SF2Layer defaultsound = piano1;
-
-        newInstrument(sf2, "Piano", new Patch(0, 0), gpiano, gpiano_hammer);
-        newInstrument(sf2, "Piano", new Patch(0, 1), gpiano2, gpiano_hammer);
-        newInstrument(sf2, "Piano", new Patch(0, 2), piano1);
-        {
-            SF2Instrument ins = newInstrument(sf2, "Honky-tonk Piano",
-                    new Patch(0, 3), piano1, piano1);
-            SF2InstrumentRegion region = ins.getRegions().get(0);
-            region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 80);
-            region.putInteger(SF2Region.GENERATOR_FINETUNE, 30);
-            region = ins.getRegions().get(1);
-            region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 30);
-        }
-        newInstrument(sf2, "Rhodes", new Patch(0, 4), epiano2);
-        newInstrument(sf2, "Rhodes", new Patch(0, 5), epiano2);
-        newInstrument(sf2, "Clavinet", new Patch(0, 6), epiano1);
-        newInstrument(sf2, "Clavinet", new Patch(0, 7), epiano1);
-        newInstrument(sf2, "Rhodes", new Patch(0, 8), epiano2);
-        newInstrument(sf2, "Bell", new Patch(0, 9), bell);
-        newInstrument(sf2, "Bell", new Patch(0, 10), bell);
-        newInstrument(sf2, "Vibraphone", new Patch(0, 11), bell);
-        newInstrument(sf2, "Marimba", new Patch(0, 12), bell);
-        newInstrument(sf2, "Marimba", new Patch(0, 13), bell);
-        newInstrument(sf2, "Bell", new Patch(0, 14), bell);
-        newInstrument(sf2, "Rock Organ", new Patch(0, 15), organ);
-        newInstrument(sf2, "Rock Organ", new Patch(0, 16), organ);
-        newInstrument(sf2, "Perc Organ", new Patch(0, 17), organ);
-        newInstrument(sf2, "Rock Organ", new Patch(0, 18), organ);
-        newInstrument(sf2, "Church Organ", new Patch(0, 19), ch_organ);
-        newInstrument(sf2, "Accordion", new Patch(0, 20), organ);
-        newInstrument(sf2, "Accordion", new Patch(0, 21), organ);
-        newInstrument(sf2, "Accordion", new Patch(0, 22), organ);
-        newInstrument(sf2, "Accordion", new Patch(0, 23), organ);
-        newInstrument(sf2, "Guitar", new Patch(0, 24), guitar, guitar_pick);
-        newInstrument(sf2, "Guitar", new Patch(0, 25), guitar, guitar_pick);
-        newInstrument(sf2, "Guitar", new Patch(0, 26), guitar, guitar_pick);
-        newInstrument(sf2, "Guitar", new Patch(0, 27), guitar, guitar_pick);
-        newInstrument(sf2, "Guitar", new Patch(0, 28), guitar, guitar_pick);
-        newInstrument(sf2, "Distorted Guitar", new Patch(0, 29), guitar_dist);
-        newInstrument(sf2, "Distorted Guitar", new Patch(0, 30), guitar_dist);
-        newInstrument(sf2, "Guitar", new Patch(0, 31), guitar, guitar_pick);
-        newInstrument(sf2, "Finger Bass", new Patch(0, 32), bass1);
-        newInstrument(sf2, "Finger Bass", new Patch(0, 33), bass1);
-        newInstrument(sf2, "Finger Bass", new Patch(0, 34), bass1);
-        newInstrument(sf2, "Frettless Bass", new Patch(0, 35), bass2);
-        newInstrument(sf2, "Frettless Bass", new Patch(0, 36), bass2);
-        newInstrument(sf2, "Frettless Bass", new Patch(0, 37), bass2);
-        newInstrument(sf2, "Synth Bass1", new Patch(0, 38), synthbass);
-        newInstrument(sf2, "Synth Bass2", new Patch(0, 39), synthbass);
-        newInstrument(sf2, "Solo String", new Patch(0, 40), string2, solostring);
-        newInstrument(sf2, "Solo String", new Patch(0, 41), string2, solostring);
-        newInstrument(sf2, "Solo String", new Patch(0, 42), string2, solostring);
-        newInstrument(sf2, "Solo String", new Patch(0, 43), string2, solostring);
-        newInstrument(sf2, "Solo String", new Patch(0, 44), string2, solostring);
-        newInstrument(sf2, "Def", new Patch(0, 45), defaultsound);
-        newInstrument(sf2, "Harp", new Patch(0, 46), bell);
-        newInstrument(sf2, "Timpani", new Patch(0, 47), timpani);
-        newInstrument(sf2, "Strings", new Patch(0, 48), string2);
-        SF2Instrument slow_strings =
-                newInstrument(sf2, "Slow Strings", new Patch(0, 49), string2);
-        SF2InstrumentRegion region = slow_strings.getRegions().get(0);
-        region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, 2500);
-        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 2000);
-        newInstrument(sf2, "Synth Strings", new Patch(0, 50), string2);
-        newInstrument(sf2, "Synth Strings", new Patch(0, 51), string2);
-
-
-        newInstrument(sf2, "Choir", new Patch(0, 52), choir);
-        newInstrument(sf2, "Choir", new Patch(0, 53), choir);
-        newInstrument(sf2, "Choir", new Patch(0, 54), choir);
-        {
-            SF2Instrument ins = newInstrument(sf2, "Orch Hit",
-                    new Patch(0, 55), orchhit, orchhit, timpani);
-            region = ins.getRegions().get(0);
-            region.putInteger(SF2Region.GENERATOR_COARSETUNE, -12);
-            region.putInteger(SF2Region.GENERATOR_INITIALATTENUATION, -100);
-        }
-        newInstrument(sf2, "Trumpet", new Patch(0, 56), trumpet);
-        newInstrument(sf2, "Trombone", new Patch(0, 57), trombone);
-        newInstrument(sf2, "Trombone", new Patch(0, 58), trombone);
-        newInstrument(sf2, "Trumpet", new Patch(0, 59), trumpet);
-        newInstrument(sf2, "Horn", new Patch(0, 60), horn);
-        newInstrument(sf2, "Brass Section", new Patch(0, 61), brass_section);
-        newInstrument(sf2, "Brass Section", new Patch(0, 62), brass_section);
-        newInstrument(sf2, "Brass Section", new Patch(0, 63), brass_section);
-        newInstrument(sf2, "Sax", new Patch(0, 64), sax);
-        newInstrument(sf2, "Sax", new Patch(0, 65), sax);
-        newInstrument(sf2, "Sax", new Patch(0, 66), sax);
-        newInstrument(sf2, "Sax", new Patch(0, 67), sax);
-        newInstrument(sf2, "Oboe", new Patch(0, 68), oboe);
-        newInstrument(sf2, "Horn", new Patch(0, 69), horn);
-        newInstrument(sf2, "Bassoon", new Patch(0, 70), bassoon);
-        newInstrument(sf2, "Clarinet", new Patch(0, 71), clarinet);
-        newInstrument(sf2, "Flute", new Patch(0, 72), flute);
-        newInstrument(sf2, "Flute", new Patch(0, 73), flute);
-        newInstrument(sf2, "Flute", new Patch(0, 74), flute);
-        newInstrument(sf2, "Flute", new Patch(0, 75), flute);
-        newInstrument(sf2, "Flute", new Patch(0, 76), flute);
-        newInstrument(sf2, "Flute", new Patch(0, 77), flute);
-        newInstrument(sf2, "Flute", new Patch(0, 78), flute);
-        newInstrument(sf2, "Flute", new Patch(0, 79), flute);
-        newInstrument(sf2, "Organ", new Patch(0, 80), organ);
-        newInstrument(sf2, "Organ", new Patch(0, 81), organ);
-        newInstrument(sf2, "Flute", new Patch(0, 82), flute);
-        newInstrument(sf2, "Organ", new Patch(0, 83), organ);
-        newInstrument(sf2, "Organ", new Patch(0, 84), organ);
-        newInstrument(sf2, "Choir", new Patch(0, 85), choir);
-        newInstrument(sf2, "Organ", new Patch(0, 86), organ);
-        newInstrument(sf2, "Organ", new Patch(0, 87), organ);
-        newInstrument(sf2, "Synth Strings", new Patch(0, 88), string2);
-        newInstrument(sf2, "Organ", new Patch(0, 89), organ);
-        newInstrument(sf2, "Def", new Patch(0, 90), defaultsound);
-        newInstrument(sf2, "Choir", new Patch(0, 91), choir);
-        newInstrument(sf2, "Organ", new Patch(0, 92), organ);
-        newInstrument(sf2, "Organ", new Patch(0, 93), organ);
-        newInstrument(sf2, "Organ", new Patch(0, 94), organ);
-        newInstrument(sf2, "Organ", new Patch(0, 95), organ);
-        newInstrument(sf2, "Organ", new Patch(0, 96), organ);
-        newInstrument(sf2, "Organ", new Patch(0, 97), organ);
-        newInstrument(sf2, "Bell", new Patch(0, 98), bell);
-        newInstrument(sf2, "Organ", new Patch(0, 99), organ);
-        newInstrument(sf2, "Organ", new Patch(0, 100), organ);
-        newInstrument(sf2, "Organ", new Patch(0, 101), organ);
-        newInstrument(sf2, "Def", new Patch(0, 102), defaultsound);
-        newInstrument(sf2, "Synth Strings", new Patch(0, 103), string2);
-        newInstrument(sf2, "Def", new Patch(0, 104), defaultsound);
-        newInstrument(sf2, "Def", new Patch(0, 105), defaultsound);
-        newInstrument(sf2, "Def", new Patch(0, 106), defaultsound);
-        newInstrument(sf2, "Def", new Patch(0, 107), defaultsound);
-        newInstrument(sf2, "Marimba", new Patch(0, 108), bell);
-        newInstrument(sf2, "Sax", new Patch(0, 109), sax);
-        newInstrument(sf2, "Solo String", new Patch(0, 110), string2, solostring);
-        newInstrument(sf2, "Oboe", new Patch(0, 111), oboe);
-        newInstrument(sf2, "Bell", new Patch(0, 112), bell);
-        newInstrument(sf2, "Melodic Toms", new Patch(0, 113), melodic_toms);
-        newInstrument(sf2, "Marimba", new Patch(0, 114), bell);
-        newInstrument(sf2, "Melodic Toms", new Patch(0, 115), melodic_toms);
-        newInstrument(sf2, "Melodic Toms", new Patch(0, 116), melodic_toms);
-        newInstrument(sf2, "Melodic Toms", new Patch(0, 117), melodic_toms);
-        newInstrument(sf2, "Reverse Cymbal", new Patch(0, 118), reverse_cymbal);
-        newInstrument(sf2, "Reverse Cymbal", new Patch(0, 119), reverse_cymbal);
-        newInstrument(sf2, "Guitar", new Patch(0, 120), guitar);
-        newInstrument(sf2, "Def", new Patch(0, 121), defaultsound);
-        {
-            SF2Instrument ins = newInstrument(sf2, "Seashore/Reverse Cymbal",
-                    new Patch(0, 122), reverse_cymbal);
-            region = ins.getRegions().get(0);
-            region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, 1000);
-            region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 18500);
-            region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 4500);
-            region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, -4500);
-        }
-        {
-            SF2Instrument ins = newInstrument(sf2, "Bird/Flute",
-                    new Patch(0, 123), flute);
-            region = ins.getRegions().get(0);
-            region.putInteger(SF2Region.GENERATOR_COARSETUNE, 24);
-            region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, -3000);
-            region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, 1000);
-        }
-        newInstrument(sf2, "Def", new Patch(0, 124), side_stick);
-        {
-            SF2Instrument ins = newInstrument(sf2, "Seashore/Reverse Cymbal",
-                    new Patch(0, 125), reverse_cymbal);
-            region = ins.getRegions().get(0);
-            region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, 1000);
-            region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 18500);
-            region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 4500);
-            region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, -4500);
-        }
-        newInstrument(sf2, "Applause/crash_cymbal",
-                new Patch(0, 126), crash_cymbal);
-        newInstrument(sf2, "Gunshot/side_stick", new Patch(0, 127), side_stick);
-
-        for (SF2Instrument instrument : sf2.getInstruments()) {
-            Patch patch = instrument.getPatch();
-            if (patch instanceof ModelPatch) {
-                if (((ModelPatch) patch).isPercussion())
-                    continue;
-            }
-            instrument.setName(general_midi_instruments[patch.getProgram()]);
-        }
-
-        return sf2;
-
-    }
-
-    public static SF2Layer new_bell(SF2Soundbank sf2) {
-        Random random = new Random(102030201);
-        int x = 8;
-        int fftsize = 4096 * x;
-        double[] data = new double[fftsize * 2];
-        double base = x * 25;
-        double start_w = 0.01;
-        double end_w = 0.05;
-        double start_a = 0.2;
-        double end_a = 0.00001;
-        double a = start_a;
-        double a_step = Math.pow(end_a / start_a, 1.0 / 40.0);
-        for (int i = 0; i < 40; i++) {
-            double detune = 1 + (random.nextDouble() * 2 - 1) * 0.01;
-            double w = start_w + (end_w - start_w) * (i / 40.0);
-            complexGaussianDist(data, base * (i + 1) * detune, w, a);
-            a *= a_step;
-        }
-        SF2Sample sample = newSimpleFFTSample(sf2, "EPiano", data, base);
-        SF2Layer layer = newLayer(sf2, "EPiano", sample);
-        SF2Region region = layer.getRegions().get(0);
-        region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);
-        region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -12000);
-        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 0);
-        region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 4000);
-        region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, 1000);
-        region.putInteger(SF2Region.GENERATOR_ATTACKMODENV, 1200);
-        region.putInteger(SF2Region.GENERATOR_RELEASEMODENV, 12000);
-        region.putInteger(SF2Region.GENERATOR_MODENVTOFILTERFC, -9000);
-        region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 16000);
-        return layer;
-    }
-
-    public static SF2Layer new_guitar1(SF2Soundbank sf2) {
-
-        int x = 8;
-        int fftsize = 4096 * x;
-        double[] data = new double[fftsize * 2];
-        double base = x * 25;
-        double start_w = 0.01;
-        double end_w = 0.01;
-        double start_a = 2;
-        double end_a = 0.01;
-        double a = start_a;
-        double a_step = Math.pow(end_a / start_a, 1.0 / 40.0);
-
-        double[] aa = new double[40];
-        for (int i = 0; i < 40; i++) {
-            aa[i] = a;
-            a *= a_step;
-        }
-
-        aa[0] = 2;
-        aa[1] = 0.5;
-        aa[2] = 0.45;
-        aa[3] = 0.2;
-        aa[4] = 1;
-        aa[5] = 0.5;
-        aa[6] = 2;
-        aa[7] = 1;
-        aa[8] = 0.5;
-        aa[9] = 1;
-        aa[9] = 0.5;
-        aa[10] = 0.2;
-        aa[11] = 1;
-        aa[12] = 0.7;
-        aa[13] = 0.5;
-        aa[14] = 1;
-
-        for (int i = 0; i < 40; i++) {
-            double w = start_w + (end_w - start_w) * (i / 40.0);
-            complexGaussianDist(data, base * (i + 1), w, aa[i]);
-        }
-
-        SF2Sample sample = newSimpleFFTSample(sf2, "Guitar", data, base);
-        SF2Layer layer = newLayer(sf2, "Guitar", sample);
-        SF2Region region = layer.getRegions().get(0);
-        region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);
-        region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -12000);
-        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 0);
-        region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 2400);
-        region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, 1000);
-
-        region.putInteger(SF2Region.GENERATOR_ATTACKMODENV, -100);
-        region.putInteger(SF2Region.GENERATOR_RELEASEMODENV, 12000);
-        region.putInteger(SF2Region.GENERATOR_MODENVTOFILTERFC, -6000);
-        region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 16000);
-        region.putInteger(SF2Region.GENERATOR_INITIALATTENUATION, -20);
-        return layer;
-    }
-
-    public static SF2Layer new_guitar_dist(SF2Soundbank sf2) {
-
-        int x = 8;
-        int fftsize = 4096 * x;
-        double[] data = new double[fftsize * 2];
-        double base = x * 25;
-        double start_w = 0.01;
-        double end_w = 0.01;
-        double start_a = 2;
-        double end_a = 0.01;
-        double a = start_a;
-        double a_step = Math.pow(end_a / start_a, 1.0 / 40.0);
-
-        double[] aa = new double[40];
-        for (int i = 0; i < 40; i++) {
-            aa[i] = a;
-            a *= a_step;
-        }
-
-        aa[0] = 5;
-        aa[1] = 2;
-        aa[2] = 0.45;
-        aa[3] = 0.2;
-        aa[4] = 1;
-        aa[5] = 0.5;
-        aa[6] = 2;
-        aa[7] = 1;
-        aa[8] = 0.5;
-        aa[9] = 1;
-        aa[9] = 0.5;
-        aa[10] = 0.2;
-        aa[11] = 1;
-        aa[12] = 0.7;
-        aa[13] = 0.5;
-        aa[14] = 1;
-
-        for (int i = 0; i < 40; i++) {
-            double w = start_w + (end_w - start_w) * (i / 40.0);
-            complexGaussianDist(data, base * (i + 1), w, aa[i]);
-        }
-
-
-        SF2Sample sample = newSimpleFFTSample_dist(sf2, "Distorted Guitar",
-                data, base, 10000.0);
-
-
-        SF2Layer layer = newLayer(sf2, "Distorted Guitar", sample);
-        SF2Region region = layer.getRegions().get(0);
-        region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);
-        region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -12000);
-        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 0);
-        //region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 2400);
-        //region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, 200);
-
-        //region.putInteger(SF2Region.GENERATOR_ATTACKMODENV, -100);
-        //region.putInteger(SF2Region.GENERATOR_RELEASEMODENV, 12000);
-        //region.putInteger(SF2Region.GENERATOR_MODENVTOFILTERFC, -1000);
-        region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 8000);
-        //region.putInteger(SF2Region.GENERATOR_INITIALATTENUATION, -20);
-        return layer;
-    }
-
-    public static SF2Layer new_guitar_pick(SF2Soundbank sf2) {
-
-        double datab[];
-
-        // Make treble part
-        {
-            int m = 2;
-            int fftlen = 4096 * m;
-            double[] data = new double[2 * fftlen];
-            Random random = new Random(3049912);
-            for (int i = 0; i < data.length; i += 2)
-                data[i] = (2.0 * (random.nextDouble() - 0.5));
-            fft(data);
-            // Remove all negative frequency
-            for (int i = fftlen / 2; i < data.length; i++)
-                data[i] = 0;
-            for (int i = 0; i < 2048 * m; i++) {
-                data[i] *= Math.exp(-Math.abs((i - 23) / ((double) m)) * 1.2)
-                        + Math.exp(-Math.abs((i - 40) / ((double) m)) * 0.9);
-            }
-            randomPhase(data, new Random(3049912));
-            ifft(data);
-            normalize(data, 0.8);
-            data = realPart(data);
-            double gain = 1.0;
-            for (int i = 0; i < data.length; i++) {
-                data[i] *= gain;
-                gain *= 0.9994;
-            }
-            datab = data;
-
-            fadeUp(data, 80);
-        }
-
-        SF2Sample sample = newSimpleDrumSample(sf2, "Guitar Noise", datab);
-
-        SF2Layer layer = new SF2Layer(sf2);
-        layer.setName("Guitar Noise");
-
-        SF2GlobalRegion global = new SF2GlobalRegion();
-        layer.setGlobalZone(global);
-        sf2.addResource(layer);
-
-        SF2LayerRegion region = new SF2LayerRegion();
-        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 12000);
-        //region.putInteger(SF2Region.GENERATOR_SCALETUNING, 0);
-//        region.putInteger(SF2Region.GENERATOR_INITIALATTENUATION, -100);
-/*
-        region.putInteger(SF2Region.GENERATOR_ATTACKMODENV, 0);
-        region.putInteger(SF2Region.GENERATOR_SUSTAINMODENV, 1000);
-        region.putInteger(SF2Region.GENERATOR_RELEASEMODENV, 12000);
-        region.putInteger(SF2Region.GENERATOR_MODENVTOFILTERFC, -11000);
-        region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 12000);
-         */
-
-        region.setSample(sample);
-        layer.getRegions().add(region);
-
-        return layer;
-    }
-
-    public static SF2Layer new_gpiano(SF2Soundbank sf2) {
-        //Random random = new Random(302030201);
-        int x = 8;
-        int fftsize = 4096 * x;
-        double[] data = new double[fftsize * 2];
-        double base = x * 25;
-        double start_a = 0.2;
-        double end_a = 0.001;
-        double a = start_a;
-        double a_step = Math.pow(end_a / start_a, 1.0 / 15.0);
-
-        double[] aa = new double[30];
-        for (int i = 0; i < 30; i++) {
-            aa[i] = a;
-            a *= a_step;
-        }
-
-        aa[0] *= 2;
-        //aa[2] *= 0.1;
-        aa[4] *= 2;
-
-
-        aa[12] *= 0.9;
-        aa[13] *= 0.7;
-        for (int i = 14; i < 30; i++) {
-            aa[i] *= 0.5;
-        }
-
-
-        for (int i = 0; i < 30; i++) {
-            //double detune = 1 + (random.nextDouble()*2 - 1)*0.0001;
-            double w = 0.2;
-            double ai = aa[i];
-            if (i > 10) {
-                w = 5;
-                ai *= 10;
-            }
-            int adjust = 0;
-            if (i > 5) {
-                adjust = (i - 5) * 7;
-            }
-            complexGaussianDist(data, base * (i + 1) + adjust, w, ai);
-        }
-
-        SF2Sample sample = newSimpleFFTSample(sf2, "Grand Piano", data, base, 200);
-        SF2Layer layer = newLayer(sf2, "Grand Piano", sample);
-        SF2Region region = layer.getRegions().get(0);
-        region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);
-        region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -7000);
-        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 0);
-        region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 4000);
-        region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, 1000);
-        region.putInteger(SF2Region.GENERATOR_ATTACKMODENV, -6000);
-        region.putInteger(SF2Region.GENERATOR_RELEASEMODENV, 12000);
-        region.putInteger(SF2Region.GENERATOR_MODENVTOFILTERFC, -5500);
-        region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 18000);
-        return layer;
-    }
-
-    public static SF2Layer new_gpiano2(SF2Soundbank sf2) {
-        //Random random = new Random(302030201);
-        int x = 8;
-        int fftsize = 4096 * x;
-        double[] data = new double[fftsize * 2];
-        double base = x * 25;
-        double start_a = 0.2;
-        double end_a = 0.001;
-        double a = start_a;
-        double a_step = Math.pow(end_a / start_a, 1.0 / 20.0);
-
-        double[] aa = new double[30];
-        for (int i = 0; i < 30; i++) {
-            aa[i] = a;
-            a *= a_step;
-        }
-
-        aa[0] *= 1;
-        //aa[2] *= 0.1;
-        aa[4] *= 2;
-
-
-        aa[12] *= 0.9;
-        aa[13] *= 0.7;
-        for (int i = 14; i < 30; i++) {
-            aa[i] *= 0.5;
-        }
-
-
-        for (int i = 0; i < 30; i++) {
-            //double detune = 1 + (random.nextDouble()*2 - 1)*0.0001;
-            double w = 0.2;
-            double ai = aa[i];
-            if (i > 10) {
-                w = 5;
-                ai *= 10;
-            }
-            int adjust = 0;
-            if (i > 5) {
-                adjust = (i - 5) * 7;
-            }
-            complexGaussianDist(data, base * (i + 1) + adjust, w, ai);
-        }
-
-        SF2Sample sample = newSimpleFFTSample(sf2, "Grand Piano", data, base, 200);
-        SF2Layer layer = newLayer(sf2, "Grand Piano", sample);
-        SF2Region region = layer.getRegions().get(0);
-        region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);
-        region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -7000);
-        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 0);
-        region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 4000);
-        region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, 1000);
-        region.putInteger(SF2Region.GENERATOR_ATTACKMODENV, -6000);
-        region.putInteger(SF2Region.GENERATOR_RELEASEMODENV, 12000);
-        region.putInteger(SF2Region.GENERATOR_MODENVTOFILTERFC, -5500);
-        region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 18000);
-        return layer;
-    }
-
-    public static SF2Layer new_piano_hammer(SF2Soundbank sf2) {
-
-        double datab[];
-
-        // Make treble part
-        {
-            int m = 2;
-            int fftlen = 4096 * m;
-            double[] data = new double[2 * fftlen];
-            Random random = new Random(3049912);
-            for (int i = 0; i < data.length; i += 2)
-                data[i] = (2.0 * (random.nextDouble() - 0.5));
-            fft(data);
-            // Remove all negative frequency
-            for (int i = fftlen / 2; i < data.length; i++)
-                data[i] = 0;
-            for (int i = 0; i < 2048 * m; i++)
-                data[i] *= Math.exp(-Math.abs((i - 37) / ((double) m)) * 0.05);
-            randomPhase(data, new Random(3049912));
-            ifft(data);
-            normalize(data, 0.6);
-            data = realPart(data);
-            double gain = 1.0;
-            for (int i = 0; i < data.length; i++) {
-                data[i] *= gain;
-                gain *= 0.9997;
-            }
-            datab = data;
-
-            fadeUp(data, 80);
-        }
-
-        SF2Sample sample = newSimpleDrumSample(sf2, "Piano Hammer", datab);
-
-        SF2Layer layer = new SF2Layer(sf2);
-        layer.setName("Piano Hammer");
-
-        SF2GlobalRegion global = new SF2GlobalRegion();
-        layer.setGlobalZone(global);
-        sf2.addResource(layer);
-
-        SF2LayerRegion region = new SF2LayerRegion();
-        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 12000);
-        //region.putInteger(SF2Region.GENERATOR_SCALETUNING, 0);
-/*
-        region.putInteger(SF2Region.GENERATOR_ATTACKMODENV, 0);
-        region.putInteger(SF2Region.GENERATOR_SUSTAINMODENV, 1000);
-        region.putInteger(SF2Region.GENERATOR_RELEASEMODENV, 12000);
-        region.putInteger(SF2Region.GENERATOR_MODENVTOFILTERFC, -11000);
-        region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 12000);
-         */
-
-        region.setSample(sample);
-        layer.getRegions().add(region);
-
-        return layer;
-    }
-
-    public static SF2Layer new_piano1(SF2Soundbank sf2) {
-        //Random random = new Random(302030201);
-        int x = 8;
-        int fftsize = 4096 * x;
-        double[] data = new double[fftsize * 2];
-        double base = x * 25;
-        double start_a = 0.2;
-        double end_a = 0.0001;
-        double a = start_a;
-        double a_step = Math.pow(end_a / start_a, 1.0 / 40.0);
-
-        double[] aa = new double[30];
-        for (int i = 0; i < 30; i++) {
-            aa[i] = a;
-            a *= a_step;
-        }
-
-        aa[0] *= 5;
-        aa[2] *= 0.1;
-        aa[7] *= 5;
-
-
-        for (int i = 0; i < 30; i++) {
-            //double detune = 1 + (random.nextDouble()*2 - 1)*0.0001;
-            double w = 0.2;
-            double ai = aa[i];
-            if (i > 12) {
-                w = 5;
-                ai *= 10;
-            }
-            int adjust = 0;
-            if (i > 5) {
-                adjust = (i - 5) * 7;
-            }
-            complexGaussianDist(data, base * (i + 1) + adjust, w, ai);
-        }
-
-        complexGaussianDist(data, base * (15.5), 1, 0.1);
-        complexGaussianDist(data, base * (17.5), 1, 0.01);
-
-        SF2Sample sample = newSimpleFFTSample(sf2, "EPiano", data, base, 200);
-        SF2Layer layer = newLayer(sf2, "EPiano", sample);
-        SF2Region region = layer.getRegions().get(0);
-        region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);
-        region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -12000);
-        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 0);
-        region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 4000);
-        region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, 1000);
-        region.putInteger(SF2Region.GENERATOR_ATTACKMODENV, -1200);
-        region.putInteger(SF2Region.GENERATOR_RELEASEMODENV, 12000);
-        region.putInteger(SF2Region.GENERATOR_MODENVTOFILTERFC, -5500);
-        region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 16000);
-        return layer;
-    }
-
-    public static SF2Layer new_epiano1(SF2Soundbank sf2) {
-        Random random = new Random(302030201);
-        int x = 8;
-        int fftsize = 4096 * x;
-        double[] data = new double[fftsize * 2];
-        double base = x * 25;
-        double start_w = 0.05;
-        double end_w = 0.05;
-        double start_a = 0.2;
-        double end_a = 0.0001;
-        double a = start_a;
-        double a_step = Math.pow(end_a / start_a, 1.0 / 40.0);
-        for (int i = 0; i < 40; i++) {
-            double detune = 1 + (random.nextDouble() * 2 - 1) * 0.0001;
-            double w = start_w + (end_w - start_w) * (i / 40.0);
-            complexGaussianDist(data, base * (i + 1) * detune, w, a);
-            a *= a_step;
-        }
-
-
-
-        SF2Sample sample = newSimpleFFTSample(sf2, "EPiano", data, base);
-        SF2Layer layer = newLayer(sf2, "EPiano", sample);
-        SF2Region region = layer.getRegions().get(0);
-        region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);
-        region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -12000);
-        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 0);
-        region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 4000);
-        region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, 1000);
-        region.putInteger(SF2Region.GENERATOR_ATTACKMODENV, 1200);
-        region.putInteger(SF2Region.GENERATOR_RELEASEMODENV, 12000);
-        region.putInteger(SF2Region.GENERATOR_MODENVTOFILTERFC, -9000);
-        region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 16000);
-        return layer;
-    }
-
-    public static SF2Layer new_epiano2(SF2Soundbank sf2) {
-        Random random = new Random(302030201);
-        int x = 8;
-        int fftsize = 4096 * x;
-        double[] data = new double[fftsize * 2];
-        double base = x * 25;
-        double start_w = 0.01;
-        double end_w = 0.05;
-        double start_a = 0.2;
-        double end_a = 0.00001;
-        double a = start_a;
-        double a_step = Math.pow(end_a / start_a, 1.0 / 40.0);
-        for (int i = 0; i < 40; i++) {
-            double detune = 1 + (random.nextDouble() * 2 - 1) * 0.0001;
-            double w = start_w + (end_w - start_w) * (i / 40.0);
-            complexGaussianDist(data, base * (i + 1) * detune, w, a);
-            a *= a_step;
-        }
-
-        SF2Sample sample = newSimpleFFTSample(sf2, "EPiano", data, base);
-        SF2Layer layer = newLayer(sf2, "EPiano", sample);
-        SF2Region region = layer.getRegions().get(0);
-        region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);
-        region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -12000);
-        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 0);
-        region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 8000);
-        region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, 1000);
-        region.putInteger(SF2Region.GENERATOR_ATTACKMODENV, 2400);
-        region.putInteger(SF2Region.GENERATOR_RELEASEMODENV, 12000);
-        region.putInteger(SF2Region.GENERATOR_MODENVTOFILTERFC, -9000);
-        region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 16000);
-        region.putInteger(SF2Region.GENERATOR_INITIALATTENUATION, -100);
-        return layer;
-    }
-
-    public static SF2Layer new_bass1(SF2Soundbank sf2) {
-        int x = 8;
-        int fftsize = 4096 * x;
-        double[] data = new double[fftsize * 2];
-        double base = x * 25;
-        double start_w = 0.05;
-        double end_w = 0.05;
-        double start_a = 0.2;
-        double end_a = 0.02;
-        double a = start_a;
-        double a_step = Math.pow(end_a / start_a, 1.0 / 25.0);
-
-        double[] aa = new double[25];
-        for (int i = 0; i < 25; i++) {
-            aa[i] = a;
-            a *= a_step;
-        }
-
-        aa[0] *= 8;
-        aa[1] *= 4;
-        aa[3] *= 8;
-        aa[5] *= 8;
-
-        for (int i = 0; i < 25; i++) {
-            double w = start_w + (end_w - start_w) * (i / 40.0);
-            complexGaussianDist(data, base * (i + 1), w, aa[i]);
-        }
-
-
-        SF2Sample sample = newSimpleFFTSample(sf2, "Bass", data, base);
-        SF2Layer layer = newLayer(sf2, "Bass", sample);
-        SF2Region region = layer.getRegions().get(0);
-        region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);
-        region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -12000);
-        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 0);
-        region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 4000);
-        region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, 1000);
-        region.putInteger(SF2Region.GENERATOR_ATTACKMODENV, -3000);
-        region.putInteger(SF2Region.GENERATOR_RELEASEMODENV, 12000);
-        region.putInteger(SF2Region.GENERATOR_MODENVTOFILTERFC, -5000);
-        region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 11000);
-        region.putInteger(SF2Region.GENERATOR_INITIALATTENUATION, -100);
-        return layer;
-    }
-
-    public static SF2Layer new_synthbass(SF2Soundbank sf2) {
-        int x = 8;
-        int fftsize = 4096 * x;
-        double[] data = new double[fftsize * 2];
-        double base = x * 25;
-        double start_w = 0.05;
-        double end_w = 0.05;
-        double start_a = 0.2;
-        double end_a = 0.02;
-        double a = start_a;
-        double a_step = Math.pow(end_a / start_a, 1.0 / 25.0);
-
-        double[] aa = new double[25];
-        for (int i = 0; i < 25; i++) {
-            aa[i] = a;
-            a *= a_step;
-        }
-
-        aa[0] *= 16;
-        aa[1] *= 4;
-        aa[3] *= 16;
-        aa[5] *= 8;
-
-        for (int i = 0; i < 25; i++) {
-            double w = start_w + (end_w - start_w) * (i / 40.0);
-            complexGaussianDist(data, base * (i + 1), w, aa[i]);
-        }
-
-
-        SF2Sample sample = newSimpleFFTSample(sf2, "Bass", data, base);
-        SF2Layer layer = newLayer(sf2, "Bass", sample);
-        SF2Region region = layer.getRegions().get(0);
-        region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);
-        region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -12000);
-        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 0);
-        region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 4000);
-        region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, 1000);
-        region.putInteger(SF2Region.GENERATOR_ATTACKMODENV, -3000);
-        region.putInteger(SF2Region.GENERATOR_RELEASEMODENV, 12000);
-        region.putInteger(SF2Region.GENERATOR_MODENVTOFILTERFC, -3000);
-        region.putInteger(SF2Region.GENERATOR_INITIALFILTERQ, 100);
-        region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 8000);
-        region.putInteger(SF2Region.GENERATOR_INITIALATTENUATION, -100);
-        return layer;
-    }
-
-    public static SF2Layer new_bass2(SF2Soundbank sf2) {
-        int x = 8;
-        int fftsize = 4096 * x;
-        double[] data = new double[fftsize * 2];
-        double base = x * 25;
-        double start_w = 0.05;
-        double end_w = 0.05;
-        double start_a = 0.2;
-        double end_a = 0.002;
-        double a = start_a;
-        double a_step = Math.pow(end_a / start_a, 1.0 / 25.0);
-
-        double[] aa = new double[25];
-        for (int i = 0; i < 25; i++) {
-            aa[i] = a;
-            a *= a_step;
-        }
-
-        aa[0] *= 8;
-        aa[1] *= 4;
-        aa[3] *= 8;
-        aa[5] *= 8;
-
-        for (int i = 0; i < 25; i++) {
-            double w = start_w + (end_w - start_w) * (i / 40.0);
-            complexGaussianDist(data, base * (i + 1), w, aa[i]);
-        }
-
-
-        SF2Sample sample = newSimpleFFTSample(sf2, "Bass2", data, base);
-        SF2Layer layer = newLayer(sf2, "Bass2", sample);
-        SF2Region region = layer.getRegions().get(0);
-        region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);
-        region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -8000);
-        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 0);
-        region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 4000);
-        region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, 1000);
-        region.putInteger(SF2Region.GENERATOR_ATTACKMODENV, -6000);
-        region.putInteger(SF2Region.GENERATOR_RELEASEMODENV, 12000);
-        region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 5000);
-        region.putInteger(SF2Region.GENERATOR_INITIALATTENUATION, -100);
-        return layer;
-    }
-
-    public static SF2Layer new_solostring(SF2Soundbank sf2) {
-        int x = 8;
-        int fftsize = 4096 * x;
-        double[] data = new double[fftsize * 2];
-        double base = x * 25;
-        double start_w = 2;
-        double end_w = 2;
-        double start_a = 0.2;
-        double end_a = 0.01;
-
-        double[] aa = new double[18];
-        double a = start_a;
-        double a_step = Math.pow(end_a / start_a, 1.0 / 40.0);
-        for (int i = 0; i < aa.length; i++) {
-            a *= a_step;
-            aa[i] = a;
-        }
-
-        aa[0] *= 5;
-        aa[1] *= 5;
-        aa[2] *= 5;
-        aa[3] *= 4;
-        aa[4] *= 4;
-        aa[5] *= 3;
-        aa[6] *= 3;
-        aa[7] *= 2;
-
-        for (int i = 0; i < aa.length; i++) {
-            double w = start_w + (end_w - start_w) * (i / 40.0);
-            complexGaussianDist(data, base * (i + 1), w, a);
-        }
-        SF2Sample sample = newSimpleFFTSample(sf2, "Strings", data, base);
-        SF2Layer layer = newLayer(sf2, "Strings", sample);
-        SF2Region region = layer.getRegions().get(0);
-        region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);
-        region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -5000);
-        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 1000);
-        region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 4000);
-        region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, -100);
-        region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 9500);
-        region.putInteger(SF2Region.GENERATOR_FREQVIBLFO, -1000);
-        region.putInteger(SF2Region.GENERATOR_VIBLFOTOPITCH, 15);
-        return layer;
-
-    }
-
-    public static SF2Layer new_orchhit(SF2Soundbank sf2) {
-        int x = 8;
-        int fftsize = 4096 * x;
-        double[] data = new double[fftsize * 2];
-        double base = x * 25;
-        double start_w = 2;
-        double end_w = 80;
-        double start_a = 0.2;
-        double end_a = 0.001;
-        double a = start_a;
-        double a_step = Math.pow(end_a / start_a, 1.0 / 40.0);
-        for (int i = 0; i < 40; i++) {
-            double w = start_w + (end_w - start_w) * (i / 40.0);
-            complexGaussianDist(data, base * (i + 1), w, a);
-            a *= a_step;
-        }
-        complexGaussianDist(data, base * 4, 300, 1);
-
-
-        SF2Sample sample = newSimpleFFTSample(sf2, "Och Strings", data, base);
-        SF2Layer layer = newLayer(sf2, "Och Strings", sample);
-        SF2Region region = layer.getRegions().get(0);
-        region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);
-        region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -5000);
-        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 200);
-        region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 200);
-        region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, 1000);
-        region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 9500);
-        return layer;
-
-    }
-
-    public static SF2Layer new_string2(SF2Soundbank sf2) {
-        int x = 8;
-        int fftsize = 4096 * x;
-        double[] data = new double[fftsize * 2];
-        double base = x * 25;
-        double start_w = 2;
-        double end_w = 80;
-        double start_a = 0.2;
-        double end_a = 0.001;
-        double a = start_a;
-        double a_step = Math.pow(end_a / start_a, 1.0 / 40.0);
-        for (int i = 0; i < 40; i++) {
-            double w = start_w + (end_w - start_w) * (i / 40.0);
-            complexGaussianDist(data, base * (i + 1), w, a);
-            a *= a_step;
-        }
-        SF2Sample sample = newSimpleFFTSample(sf2, "Strings", data, base);
-        SF2Layer layer = newLayer(sf2, "Strings", sample);
-        SF2Region region = layer.getRegions().get(0);
-        region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);
-        region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -5000);
-        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 1000);
-        region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 4000);
-        region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, -100);
-        region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 9500);
-        return layer;
-
-    }
-
-    public static SF2Layer new_choir(SF2Soundbank sf2) {
-        int x = 8;
-        int fftsize = 4096 * x;
-        double[] data = new double[fftsize * 2];
-        double base = x * 25;
-        double start_w = 2;
-        double end_w = 80;
-        double start_a = 0.2;
-        double end_a = 0.001;
-        double a = start_a;
-        double a_step = Math.pow(end_a / start_a, 1.0 / 40.0);
-        double[] aa = new double[40];
-        for (int i = 0; i < aa.length; i++) {
-            a *= a_step;
-            aa[i] = a;
-        }
-
-        aa[5] *= 0.1;
-        aa[6] *= 0.01;
-        aa[7] *= 0.1;
-        aa[8] *= 0.1;
-
-        for (int i = 0; i < aa.length; i++) {
-            double w = start_w + (end_w - start_w) * (i / 40.0);
-            complexGaussianDist(data, base * (i + 1), w, aa[i]);
-        }
-        SF2Sample sample = newSimpleFFTSample(sf2, "Strings", data, base);
-        SF2Layer layer = newLayer(sf2, "Strings", sample);
-        SF2Region region = layer.getRegions().get(0);
-        region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);
-        region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -5000);
-        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 1000);
-        region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 4000);
-        region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, -100);
-        region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 9500);
-        return layer;
-
-    }
-
-    public static SF2Layer new_organ(SF2Soundbank sf2) {
-        Random random = new Random(102030201);
-        int x = 1;
-        int fftsize = 4096 * x;
-        double[] data = new double[fftsize * 2];
-        double base = x * 15;
-        double start_w = 0.01;
-        double end_w = 0.01;
-        double start_a = 0.2;
-        double end_a = 0.001;
-        double a = start_a;
-        double a_step = Math.pow(end_a / start_a, 1.0 / 40.0);
-
-        for (int i = 0; i < 12; i++) {
-            double w = start_w + (end_w - start_w) * (i / 40.0);
-            complexGaussianDist(data, base * (i + 1), w,
-                    a * (0.5 + 3 * (random.nextDouble())));
-            a *= a_step;
-        }
-        SF2Sample sample = newSimpleFFTSample(sf2, "Organ", data, base);
-        SF2Layer layer = newLayer(sf2, "Organ", sample);
-        SF2Region region = layer.getRegions().get(0);
-        region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);
-        region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -6000);
-        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, -1000);
-        region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 4000);
-        region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, -100);
-        region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 9500);
-        return layer;
-
-    }
-
-    public static SF2Layer new_ch_organ(SF2Soundbank sf2) {
-        int x = 1;
-        int fftsize = 4096 * x;
-        double[] data = new double[fftsize * 2];
-        double base = x * 15;
-        double start_w = 0.01;
-        double end_w = 0.01;
-        double start_a = 0.2;
-        double end_a = 0.001;
-        double a = start_a;
-        double a_step = Math.pow(end_a / start_a, 1.0 / 60.0);
-
-        double[] aa = new double[60];
-        for (int i = 0; i < aa.length; i++) {
-            a *= a_step;
-            aa[i] = a;
-        }
-
-        aa[0] *= 5;
-        aa[1] *= 2;
-        aa[2] = 0;
-        aa[4] = 0;
-        aa[5] = 0;
-        aa[7] *= 7;
-        aa[9] = 0;
-        aa[10] = 0;
-        aa[12] = 0;
-        aa[15] *= 7;
-        aa[18] = 0;
-        aa[20] = 0;
-        aa[24] = 0;
-        aa[27] *= 5;
-        aa[29] = 0;
-        aa[30] = 0;
-        aa[33] = 0;
-        aa[36] *= 4;
-        aa[37] = 0;
-        aa[39] = 0;
-        aa[42] = 0;
-        aa[43] = 0;
-        aa[47] = 0;
-        aa[50] *= 4;
-        aa[52] = 0;
-        aa[55] = 0;
-        aa[57] = 0;
-
-
-        aa[10] *= 0.1;
-        aa[11] *= 0.1;
-        aa[12] *= 0.1;
-        aa[13] *= 0.1;
-
-        aa[17] *= 0.1;
-        aa[18] *= 0.1;
-        aa[19] *= 0.1;
-        aa[20] *= 0.1;
-
-        for (int i = 0; i < 60; i++) {
-            double w = start_w + (end_w - start_w) * (i / 40.0);
-            complexGaussianDist(data, base * (i + 1), w, aa[i]);
-            a *= a_step;
-        }
-        SF2Sample sample = newSimpleFFTSample(sf2, "Organ", data, base);
-        SF2Layer layer = newLayer(sf2, "Organ", sample);
-        SF2Region region = layer.getRegions().get(0);
-        region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);
-        region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -10000);
-        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, -1000);
-        return layer;
-
-    }
-
-    public static SF2Layer new_flute(SF2Soundbank sf2) {
-        int x = 8;
-        int fftsize = 4096 * x;
-        double[] data = new double[fftsize * 2];
-        double base = x * 15;
-
-        complexGaussianDist(data, base * 1, 0.001, 0.5);
-        complexGaussianDist(data, base * 2, 0.001, 0.5);
-        complexGaussianDist(data, base * 3, 0.001, 0.5);
-        complexGaussianDist(data, base * 4, 0.01, 0.5);
-
-        complexGaussianDist(data, base * 4, 100, 120);
-        complexGaussianDist(data, base * 6, 100, 40);
-        complexGaussianDist(data, base * 8, 100, 80);
-
-        complexGaussianDist(data, base * 5, 0.001, 0.05);
-        complexGaussianDist(data, base * 6, 0.001, 0.06);
-        complexGaussianDist(data, base * 7, 0.001, 0.04);
-        complexGaussianDist(data, base * 8, 0.005, 0.06);
-        complexGaussianDist(data, base * 9, 0.005, 0.06);
-        complexGaussianDist(data, base * 10, 0.01, 0.1);
-        complexGaussianDist(data, base * 11, 0.08, 0.7);
-        complexGaussianDist(data, base * 12, 0.08, 0.6);
-        complexGaussianDist(data, base * 13, 0.08, 0.6);
-        complexGaussianDist(data, base * 14, 0.08, 0.6);
-        complexGaussianDist(data, base * 15, 0.08, 0.5);
-        complexGaussianDist(data, base * 16, 0.08, 0.5);
-        complexGaussianDist(data, base * 17, 0.08, 0.2);
-
-
-        complexGaussianDist(data, base * 1, 10, 8);
-        complexGaussianDist(data, base * 2, 10, 8);
-        complexGaussianDist(data, base * 3, 10, 8);
-        complexGaussianDist(data, base * 4, 10, 8);
-        complexGaussianDist(data, base * 5, 10, 8);
-        complexGaussianDist(data, base * 6, 20, 9);
-        complexGaussianDist(data, base * 7, 20, 9);
-        complexGaussianDist(data, base * 8, 20, 9);
-        complexGaussianDist(data, base * 9, 20, 8);
-        complexGaussianDist(data, base * 10, 30, 8);
-        complexGaussianDist(data, base * 11, 30, 9);
-        complexGaussianDist(data, base * 12, 30, 9);
-        complexGaussianDist(data, base * 13, 30, 8);
-        complexGaussianDist(data, base * 14, 30, 8);
-        complexGaussianDist(data, base * 15, 30, 7);
-        complexGaussianDist(data, base * 16, 30, 7);
-        complexGaussianDist(data, base * 17, 30, 6);
-
-        SF2Sample sample = newSimpleFFTSample(sf2, "Flute", data, base);
-        SF2Layer layer = newLayer(sf2, "Flute", sample);
-        SF2Region region = layer.getRegions().get(0);
-        region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);
-        region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -6000);
-        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, -1000);
-        region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 4000);
-        region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, -100);
-        region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 9500);
-        return layer;
-
-    }
-
-    public static SF2Layer new_horn(SF2Soundbank sf2) {
-        int x = 8;
-        int fftsize = 4096 * x;
-        double[] data = new double[fftsize * 2];
-        double base = x * 15;
-
-        double start_a = 0.5;
-        double end_a = 0.00000000001;
-        double a = start_a;
-        double a_step = Math.pow(end_a / start_a, 1.0 / 40.0);
-        for (int i = 0; i < 40; i++) {
-            if (i == 0)
-                complexGaussianDist(data, base * (i + 1), 0.1, a * 0.2);
-            else
-                complexGaussianDist(data, base * (i + 1), 0.1, a);
-            a *= a_step;
-        }
-
-        complexGaussianDist(data, base * 2, 100, 1);
-
-
-        SF2Sample sample = newSimpleFFTSample(sf2, "Horn", data, base);
-        SF2Layer layer = newLayer(sf2, "Horn", sample);
-        SF2Region region = layer.getRegions().get(0);
-        region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);
-        region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -6000);
-        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, -1000);
-        region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 4000);
-        region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, -100);
-
-        region.putInteger(SF2Region.GENERATOR_ATTACKMODENV, -500);
-        region.putInteger(SF2Region.GENERATOR_RELEASEMODENV, 12000);
-        region.putInteger(SF2Region.GENERATOR_MODENVTOFILTERFC, 5000);
-        region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 4500);
-        return layer;
-
-    }
-
-    public static SF2Layer new_trumpet(SF2Soundbank sf2) {
-        int x = 8;
-        int fftsize = 4096 * x;
-        double[] data = new double[fftsize * 2];
-        double base = x * 15;
-
-        double start_a = 0.5;
-        double end_a = 0.00001;
-        double a = start_a;
-        double a_step = Math.pow(end_a / start_a, 1.0 / 80.0);
-        double[] aa = new double[80];
-        for (int i = 0; i < 80; i++) {
-            aa[i] = a;
-            a *= a_step;
-        }
-
-        aa[0] *= 0.05;
-        aa[1] *= 0.2;
-        aa[2] *= 0.5;
-        aa[3] *= 0.85;
-
-        for (int i = 0; i < 80; i++) {
-            complexGaussianDist(data, base * (i + 1), 0.1, aa[i]);
-        }
-
-        complexGaussianDist(data, base * 5, 300, 3);
-
-
-        SF2Sample sample = newSimpleFFTSample(sf2, "Trumpet", data, base);
-        SF2Layer layer = newLayer(sf2, "Trumpet", sample);
-        SF2Region region = layer.getRegions().get(0);
-        region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);
-        region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -10000);
-        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 0);
-        region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 4000);
-        region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, -100);
-
-        region.putInteger(SF2Region.GENERATOR_ATTACKMODENV, -4000);
-        region.putInteger(SF2Region.GENERATOR_RELEASEMODENV, -2500);
-        region.putInteger(SF2Region.GENERATOR_MODENVTOFILTERFC, 5000);
-        region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 4500);
-        region.putInteger(SF2Region.GENERATOR_INITIALFILTERQ, 10);
-        return layer;
-
-    }
-
-    public static SF2Layer new_brass_section(SF2Soundbank sf2) {
-        int x = 8;
-        int fftsize = 4096 * x;
-        double[] data = new double[fftsize * 2];
-        double base = x * 15;
-
-        double start_a = 0.5;
-        double end_a = 0.005;
-        double a = start_a;
-        double a_step = Math.pow(end_a / start_a, 1.0 / 30.0);
-        double[] aa = new double[30];
-        for (int i = 0; i < 30; i++) {
-            aa[i] = a;
-            a *= a_step;
-        }
-
-        aa[0] *= 0.8;
-        aa[1] *= 0.9;
-
-        double w = 5;
-        for (int i = 0; i < 30; i++) {
-            complexGaussianDist(data, base * (i + 1), 0.1 * w, aa[i] * w);
-            w += 6; //*= w_step;
-        }
-
-        complexGaussianDist(data, base * 6, 300, 2);
-
-
-        SF2Sample sample = newSimpleFFTSample(sf2, "Brass Section", data, base);
-        SF2Layer layer = newLayer(sf2, "Brass Section", sample);
-        SF2Region region = layer.getRegions().get(0);
-        region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);
-        region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -9200);
-        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, -1000);
-        region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 4000);
-        region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, -100);
-
-        region.putInteger(SF2Region.GENERATOR_ATTACKMODENV, -3000);
-        region.putInteger(SF2Region.GENERATOR_RELEASEMODENV, 12000);
-        region.putInteger(SF2Region.GENERATOR_MODENVTOFILTERFC, 5000);
-        region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 4500);
-        return layer;
-
-    }
-
-    public static SF2Layer new_trombone(SF2Soundbank sf2) {
-        int x = 8;
-        int fftsize = 4096 * x;
-        double[] data = new double[fftsize * 2];
-        double base = x * 15;
-
-        double start_a = 0.5;
-        double end_a = 0.001;
-        double a = start_a;
-        double a_step = Math.pow(end_a / start_a, 1.0 / 80.0);
-        double[] aa = new double[80];
-        for (int i = 0; i < 80; i++) {
-            aa[i] = a;
-            a *= a_step;
-        }
-
-        aa[0] *= 0.3;
-        aa[1] *= 0.7;
-
-        for (int i = 0; i < 80; i++) {
-            complexGaussianDist(data, base * (i + 1), 0.1, aa[i]);
-        }
-
-        complexGaussianDist(data, base * 6, 300, 2);
-
-
-        SF2Sample sample = newSimpleFFTSample(sf2, "Trombone", data, base);
-        SF2Layer layer = newLayer(sf2, "Trombone", sample);
-        SF2Region region = layer.getRegions().get(0);
-        region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);
-        region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -8000);
-        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, -1000);
-        region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 4000);
-        region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, -100);
-
-        region.putInteger(SF2Region.GENERATOR_ATTACKMODENV, -2000);
-        region.putInteger(SF2Region.GENERATOR_RELEASEMODENV, 12000);
-        region.putInteger(SF2Region.GENERATOR_MODENVTOFILTERFC, 5000);
-        region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 4500);
-        region.putInteger(SF2Region.GENERATOR_INITIALFILTERQ, 10);
-        return layer;
-
-    }
-
-    public static SF2Layer new_sax(SF2Soundbank sf2) {
-        int x = 8;
-        int fftsize = 4096 * x;
-        double[] data = new double[fftsize * 2];
-        double base = x * 15;
-
-        double start_a = 0.5;
-        double end_a = 0.01;
-        double a = start_a;
-        double a_step = Math.pow(end_a / start_a, 1.0 / 40.0);
-        for (int i = 0; i < 40; i++) {
-            if (i == 0 || i == 2)
-                complexGaussianDist(data, base * (i + 1), 0.1, a * 4);
-            else
-                complexGaussianDist(data, base * (i + 1), 0.1, a);
-            a *= a_step;
-        }
-
-        complexGaussianDist(data, base * 4, 200, 1);
-
-        SF2Sample sample = newSimpleFFTSample(sf2, "Sax", data, base);
-        SF2Layer layer = newLayer(sf2, "Sax", sample);
-        SF2Region region = layer.getRegions().get(0);
-        region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);
-        region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -6000);
-        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, -1000);
-        region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 4000);
-        region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, -100);
-
-        region.putInteger(SF2Region.GENERATOR_ATTACKMODENV, -3000);
-        region.putInteger(SF2Region.GENERATOR_RELEASEMODENV, 12000);
-        region.putInteger(SF2Region.GENERATOR_MODENVTOFILTERFC, 5000);
-        region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 4500);
-        return layer;
-
-    }
-
-    public static SF2Layer new_oboe(SF2Soundbank sf2) {
-        int x = 8;
-        int fftsize = 4096 * x;
-        double[] data = new double[fftsize * 2];
-        double base = x * 15;
-
-        complexGaussianDist(data, base * 5, 100, 80);
-
-
-        complexGaussianDist(data, base * 1, 0.01, 0.53);
-        complexGaussianDist(data, base * 2, 0.01, 0.51);
-        complexGaussianDist(data, base * 3, 0.01, 0.48);
-        complexGaussianDist(data, base * 4, 0.01, 0.49);
-        complexGaussianDist(data, base * 5, 0.01, 5);
-        complexGaussianDist(data, base * 6, 0.01, 0.51);
-        complexGaussianDist(data, base * 7, 0.01, 0.50);
-        complexGaussianDist(data, base * 8, 0.01, 0.59);
-        complexGaussianDist(data, base * 9, 0.01, 0.61);
-        complexGaussianDist(data, base * 10, 0.01, 0.52);
-        complexGaussianDist(data, base * 11, 0.01, 0.49);
-        complexGaussianDist(data, base * 12, 0.01, 0.51);
-        complexGaussianDist(data, base * 13, 0.01, 0.48);
-        complexGaussianDist(data, base * 14, 0.01, 0.51);
-        complexGaussianDist(data, base * 15, 0.01, 0.46);
-        complexGaussianDist(data, base * 16, 0.01, 0.35);
-        complexGaussianDist(data, base * 17, 0.01, 0.20);
-        complexGaussianDist(data, base * 18, 0.01, 0.10);
-        complexGaussianDist(data, base * 19, 0.01, 0.5);
-        complexGaussianDist(data, base * 20, 0.01, 0.1);
-
-
-        SF2Sample sample = newSimpleFFTSample(sf2, "Oboe", data, base);
-        SF2Layer layer = newLayer(sf2, "Oboe", sample);
-        SF2Region region = layer.getRegions().get(0);
-        region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);
-        region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -6000);
-        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, -1000);
-        region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 4000);
-        region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, -100);
-        region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 9500);
-        return layer;
-
-    }
-
-    public static SF2Layer new_bassoon(SF2Soundbank sf2) {
-        int x = 8;
-        int fftsize = 4096 * x;
-        double[] data = new double[fftsize * 2];
-        double base = x * 15;
-
-        complexGaussianDist(data, base * 2, 100, 40);
-        complexGaussianDist(data, base * 4, 100, 20);
-
-        complexGaussianDist(data, base * 1, 0.01, 0.53);
-        complexGaussianDist(data, base * 2, 0.01, 5);
-        complexGaussianDist(data, base * 3, 0.01, 0.51);
-        complexGaussianDist(data, base * 4, 0.01, 0.48);
-        complexGaussianDist(data, base * 5, 0.01, 1.49);
-        complexGaussianDist(data, base * 6, 0.01, 0.51);
-        complexGaussianDist(data, base * 7, 0.01, 0.50);
-        complexGaussianDist(data, base * 8, 0.01, 0.59);
-        complexGaussianDist(data, base * 9, 0.01, 0.61);
-        complexGaussianDist(data, base * 10, 0.01, 0.52);
-        complexGaussianDist(data, base * 11, 0.01, 0.49);
-        complexGaussianDist(data, base * 12, 0.01, 0.51);
-        complexGaussianDist(data, base * 13, 0.01, 0.48);
-        complexGaussianDist(data, base * 14, 0.01, 0.51);
-        complexGaussianDist(data, base * 15, 0.01, 0.46);
-        complexGaussianDist(data, base * 16, 0.01, 0.35);
-        complexGaussianDist(data, base * 17, 0.01, 0.20);
-        complexGaussianDist(data, base * 18, 0.01, 0.10);
-        complexGaussianDist(data, base * 19, 0.01, 0.5);
-        complexGaussianDist(data, base * 20, 0.01, 0.1);
-
-
-        SF2Sample sample = newSimpleFFTSample(sf2, "Flute", data, base);
-        SF2Layer layer = newLayer(sf2, "Flute", sample);
-        SF2Region region = layer.getRegions().get(0);
-        region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);
-        region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -6000);
-        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, -1000);
-        region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 4000);
-        region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, -100);
-        region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 9500);
-        return layer;
-
-    }
-
-    public static SF2Layer new_clarinet(SF2Soundbank sf2) {
-        int x = 8;
-        int fftsize = 4096 * x;
-        double[] data = new double[fftsize * 2];
-        double base = x * 15;
-
-        complexGaussianDist(data, base * 1, 0.001, 0.5);
-        complexGaussianDist(data, base * 2, 0.001, 0.02);
-        complexGaussianDist(data, base * 3, 0.001, 0.2);
-        complexGaussianDist(data, base * 4, 0.01, 0.1);
-
-        complexGaussianDist(data, base * 4, 100, 60);
-        complexGaussianDist(data, base * 6, 100, 20);
-        complexGaussianDist(data, base * 8, 100, 20);
-
-        complexGaussianDist(data, base * 5, 0.001, 0.1);
-        complexGaussianDist(data, base * 6, 0.001, 0.09);
-        complexGaussianDist(data, base * 7, 0.001, 0.02);
-        complexGaussianDist(data, base * 8, 0.005, 0.16);
-        complexGaussianDist(data, base * 9, 0.005, 0.96);
-        complexGaussianDist(data, base * 10, 0.01, 0.9);
-        complexGaussianDist(data, base * 11, 0.08, 1.2);
-        complexGaussianDist(data, base * 12, 0.08, 1.8);
-        complexGaussianDist(data, base * 13, 0.08, 1.6);
-        complexGaussianDist(data, base * 14, 0.08, 1.2);
-        complexGaussianDist(data, base * 15, 0.08, 0.9);
-        complexGaussianDist(data, base * 16, 0.08, 0.5);
-        complexGaussianDist(data, base * 17, 0.08, 0.2);
-
-
-        complexGaussianDist(data, base * 1, 10, 8);
-        complexGaussianDist(data, base * 2, 10, 8);
-        complexGaussianDist(data, base * 3, 10, 8);
-        complexGaussianDist(data, base * 4, 10, 8);
-        complexGaussianDist(data, base * 5, 10, 8);
-        complexGaussianDist(data, base * 6, 20, 9);
-        complexGaussianDist(data, base * 7, 20, 9);
-        complexGaussianDist(data, base * 8, 20, 9);
-        complexGaussianDist(data, base * 9, 20, 8);
-        complexGaussianDist(data, base * 10, 30, 8);
-        complexGaussianDist(data, base * 11, 30, 9);
-        complexGaussianDist(data, base * 12, 30, 9);
-        complexGaussianDist(data, base * 13, 30, 8);
-        complexGaussianDist(data, base * 14, 30, 8);
-        complexGaussianDist(data, base * 15, 30, 7);
-        complexGaussianDist(data, base * 16, 30, 7);
-        complexGaussianDist(data, base * 17, 30, 6);
-
-        SF2Sample sample = newSimpleFFTSample(sf2, "Clarinet", data, base);
-        SF2Layer layer = newLayer(sf2, "Clarinet", sample);
-        SF2Region region = layer.getRegions().get(0);
-        region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);
-        region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -6000);
-        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, -1000);
-        region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 4000);
-        region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, -100);
-        region.putInteger(SF2Region.GENERATOR_INITIALFILTERFC, 9500);
-        return layer;
-
-    }
-
-    public static SF2Layer new_timpani(SF2Soundbank sf2) {
-
-        double datab[];
-        double datah[];
-
-        // Make Bass Part
-        {
-            int fftlen = 4096 * 8;
-            double[] data = new double[2 * fftlen];
-            double base = 48;
-            complexGaussianDist(data, base * 2, 0.2, 1);
-            complexGaussianDist(data, base * 3, 0.2, 0.7);
-            complexGaussianDist(data, base * 5, 10, 1);
-            complexGaussianDist(data, base * 6, 9, 1);
-            complexGaussianDist(data, base * 8, 15, 1);
-            complexGaussianDist(data, base * 9, 18, 0.8);
-            complexGaussianDist(data, base * 11, 21, 0.5);
-            complexGaussianDist(data, base * 13, 28, 0.3);
-            complexGaussianDist(data, base * 14, 22, 0.1);
-            randomPhase(data, new Random(3049912));
-            ifft(data);
-            normalize(data, 0.5);
-            data = realPart(data);
-
-            double d_len = data.length;
-            for (int i = 0; i < data.length; i++) {
-                double g = (1.0 - (i / d_len));
-                data[i] *= g * g;
-            }
-            fadeUp(data, 40);
-            datab = data;
-        }
-
-        // Make treble part
-        {
-            int fftlen = 4096 * 4;
-            double[] data = new double[2 * fftlen];
-            Random random = new Random(3049912);
-            for (int i = 0; i < data.length; i += 2) {
-                data[i] = (2.0 * (random.nextDouble() - 0.5)) * 0.1;
-            }
-            fft(data);
-            // Remove all negative frequency
-            for (int i = fftlen / 2; i < data.length; i++)
-                data[i] = 0;
-            for (int i = 1024 * 4; i < 2048 * 4; i++)
-                data[i] = 1.0 - (i - 4096) / 4096.0;
-            for (int i = 0; i < 300; i++) {
-                double g = (1.0 - (i / 300.0));
-                data[i] *= 1.0 + 20 * g * g;
-            }
-            for (int i = 0; i < 24; i++)
-                data[i] = 0;
-            randomPhase(data, new Random(3049912));
-            ifft(data);
-            normalize(data, 0.9);
-            data = realPart(data);
-            double gain = 1.0;
-            for (int i = 0; i < data.length; i++) {
-                data[i] *= gain;
-                gain *= 0.9998;
-            }
-            datah = data;
-        }
-
-        for (int i = 0; i < datah.length; i++)
-            datab[i] += datah[i] * 0.02;
-
-        normalize(datab, 0.9);
-
-        SF2Sample sample = newSimpleDrumSample(sf2, "Timpani", datab);
-
-        SF2Layer layer = new SF2Layer(sf2);
-        layer.setName("Timpani");
-
-        SF2GlobalRegion global = new SF2GlobalRegion();
-        layer.setGlobalZone(global);
-        sf2.addResource(layer);
-
-        SF2LayerRegion region = new SF2LayerRegion();
-        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 12000);
-        region.putInteger(SF2Region.GENERATOR_INITIALATTENUATION, -100);
-        region.setSample(sample);
-        layer.getRegions().add(region);
-
-        return layer;
-    }
-
-    public static SF2Layer new_melodic_toms(SF2Soundbank sf2) {
-
-        double datab[];
-        double datah[];
-
-        // Make Bass Part
-        {
-            int fftlen = 4096 * 4;
-            double[] data = new double[2 * fftlen];
-            complexGaussianDist(data, 30, 0.5, 1);
-            randomPhase(data, new Random(3049912));
-            ifft(data);
-            normalize(data, 0.8);
-            data = realPart(data);
-
-            double d_len = data.length;
-            for (int i = 0; i < data.length; i++)
-                data[i] *= (1.0 - (i / d_len));
-            datab = data;
-        }
-
-        // Make treble part
-        {
-            int fftlen = 4096 * 4;
-            double[] data = new double[2 * fftlen];
-            Random random = new Random(3049912);
-            for (int i = 0; i < data.length; i += 2)
-                data[i] = (2.0 * (random.nextDouble() - 0.5)) * 0.1;
-            fft(data);
-            // Remove all negative frequency
-            for (int i = fftlen / 2; i < data.length; i++)
-                data[i] = 0;
-            for (int i = 1024 * 4; i < 2048 * 4; i++)
-                data[i] = 1.0 - (i - 4096) / 4096.0;
-            for (int i = 0; i < 200; i++) {
-                double g = (1.0 - (i / 200.0));
-                data[i] *= 1.0 + 20 * g * g;
-            }
-            for (int i = 0; i < 30; i++)
-                data[i] = 0;
-            randomPhase(data, new Random(3049912));
-            ifft(data);
-            normalize(data, 0.9);
-            data = realPart(data);
-            double gain = 1.0;
-            for (int i = 0; i < data.length; i++) {
-                data[i] *= gain;
-                gain *= 0.9996;
-            }
-            datah = data;
-        }
-
-        for (int i = 0; i < datah.length; i++)
-            datab[i] += datah[i] * 0.5;
-        for (int i = 0; i < 5; i++)
-            datab[i] *= i / 5.0;
-
-        normalize(datab, 0.99);
-
-        SF2Sample sample = newSimpleDrumSample(sf2, "Melodic Toms", datab);
-        sample.setOriginalPitch(63);
-
-        SF2Layer layer = new SF2Layer(sf2);
-        layer.setName("Melodic Toms");
-
-        SF2GlobalRegion global = new SF2GlobalRegion();
-        layer.setGlobalZone(global);
-        sf2.addResource(layer);
-
-        SF2LayerRegion region = new SF2LayerRegion();
-        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 12000);
-        //region.putInteger(SF2Region.GENERATOR_SCALETUNING, 0);
-        region.putInteger(SF2Region.GENERATOR_INITIALATTENUATION, -100);
-        region.setSample(sample);
-        layer.getRegions().add(region);
-
-        return layer;
-    }
-
-    public static SF2Layer new_reverse_cymbal(SF2Soundbank sf2) {
-        double datah[];
-        {
-            int fftlen = 4096 * 4;
-            double[] data = new double[2 * fftlen];
-            Random random = new Random(3049912);
-            for (int i = 0; i < data.length; i += 2)
-                data[i] = (2.0 * (random.nextDouble() - 0.5));
-            for (int i = fftlen / 2; i < data.length; i++)
-                data[i] = 0;
-            for (int i = 0; i < 100; i++)
-                data[i] = 0;
-
-            for (int i = 0; i < 512 * 2; i++) {
-                double gain = (i / (512.0 * 2.0));
-                data[i] = 1 - gain;
-            }
-            datah = data;
-        }
-
-        SF2Sample sample = newSimpleFFTSample(sf2, "Reverse Cymbal",
-                datah, 100, 20);
-
-        SF2Layer layer = new SF2Layer(sf2);
-        layer.setName("Reverse Cymbal");
-
-        SF2GlobalRegion global = new SF2GlobalRegion();
-        layer.setGlobalZone(global);
-        sf2.addResource(layer);
-
-        SF2LayerRegion region = new SF2LayerRegion();
-        region.putInteger(SF2Region.GENERATOR_ATTACKVOLENV, -200);
-        region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, -12000);
-        region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);
-        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, -1000);
-        region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, 1000);
-        region.setSample(sample);
-        layer.getRegions().add(region);
-
-        return layer;
-    }
-
-    public static SF2Layer new_snare_drum(SF2Soundbank sf2) {
-
-        double datab[];
-        double datah[];
-
-        // Make Bass Part
-        {
-            int fftlen = 4096 * 4;
-            double[] data = new double[2 * fftlen];
-            complexGaussianDist(data, 24, 0.5, 1);
-            randomPhase(data, new Random(3049912));
-            ifft(data);
-            normalize(data, 0.5);
-            data = realPart(data);
-
-            double d_len = data.length;
-            for (int i = 0; i < data.length; i++)
-                data[i] *= (1.0 - (i / d_len));
-            datab = data;
-        }
-
-        // Make treble part
-        {
-            int fftlen = 4096 * 4;
-            double[] data = new double[2 * fftlen];
-            Random random = new Random(3049912);
-            for (int i = 0; i < data.length; i += 2)
-                data[i] = (2.0 * (random.nextDouble() - 0.5)) * 0.1;
-            fft(data);
-            // Remove all negative frequency
-            for (int i = fftlen / 2; i < data.length; i++)
-                data[i] = 0;
-            for (int i = 1024 * 4; i < 2048 * 4; i++)
-                data[i] = 1.0 - (i - 4096) / 4096.0;
-            for (int i = 0; i < 300; i++) {
-                double g = (1.0 - (i / 300.0));
-                data[i] *= 1.0 + 20 * g * g;
-            }
-            for (int i = 0; i < 24; i++)
-                data[i] = 0;
-            randomPhase(data, new Random(3049912));
-            ifft(data);
-            normalize(data, 0.9);
-            data = realPart(data);
-            double gain = 1.0;
-            for (int i = 0; i < data.length; i++) {
-                data[i] *= gain;
-                gain *= 0.9998;
-            }
-            datah = data;
-        }
-
-        for (int i = 0; i < datah.length; i++)
-            datab[i] += datah[i];
-        for (int i = 0; i < 5; i++)
-            datab[i] *= i / 5.0;
-
-        SF2Sample sample = newSimpleDrumSample(sf2, "Snare Drum", datab);
-
-        SF2Layer layer = new SF2Layer(sf2);
-        layer.setName("Snare Drum");
-
-        SF2GlobalRegion global = new SF2GlobalRegion();
-        layer.setGlobalZone(global);
-        sf2.addResource(layer);
-
-        SF2LayerRegion region = new SF2LayerRegion();
-        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 12000);
-        region.putInteger(SF2Region.GENERATOR_SCALETUNING, 0);
-        region.putInteger(SF2Region.GENERATOR_INITIALATTENUATION, -100);
-        region.setSample(sample);
-        layer.getRegions().add(region);
-
-        return layer;
-    }
-
-    public static SF2Layer new_bass_drum(SF2Soundbank sf2) {
-
-        double datab[];
-        double datah[];
-
-        // Make Bass Part
-        {
-            int fftlen = 4096 * 4;
-            double[] data = new double[2 * fftlen];
-            complexGaussianDist(data, 1.8 * 5 + 1, 2, 1);
-            complexGaussianDist(data, 1.8 * 9 + 1, 2, 1);
-            randomPhase(data, new Random(3049912));
-            ifft(data);
-            normalize(data, 0.9);
-            data = realPart(data);
-            double d_len = data.length;
-            for (int i = 0; i < data.length; i++)
-                data[i] *= (1.0 - (i / d_len));
-            datab = data;
-        }
-
-        // Make treble part
-        {
-            int fftlen = 4096;
-            double[] data = new double[2 * fftlen];
-            Random random = new Random(3049912);
-            for (int i = 0; i < data.length; i += 2)
-                data[i] = (2.0 * (random.nextDouble() - 0.5)) * 0.1;
-            fft(data);
-            // Remove all negative frequency
-            for (int i = fftlen / 2; i < data.length; i++)
-                data[i] = 0;
-            for (int i = 1024; i < 2048; i++)
-                data[i] = 1.0 - (i - 1024) / 1024.0;
-            for (int i = 0; i < 512; i++)
-                data[i] = 10 * i / 512.0;
-            for (int i = 0; i < 10; i++)
-                data[i] = 0;
-            randomPhase(data, new Random(3049912));
-            ifft(data);
-            normalize(data, 0.9);
-            data = realPart(data);
-            double gain = 1.0;
-            for (int i = 0; i < data.length; i++) {
-                data[i] *= gain;
-                gain *= 0.999;
-            }
-            datah = data;
-        }
-
-        for (int i = 0; i < datah.length; i++)
-            datab[i] += datah[i] * 0.5;
-        for (int i = 0; i < 5; i++)
-            datab[i] *= i / 5.0;
-
-        SF2Sample sample = newSimpleDrumSample(sf2, "Bass Drum", datab);
-
-        SF2Layer layer = new SF2Layer(sf2);
-        layer.setName("Bass Drum");
-
-        SF2GlobalRegion global = new SF2GlobalRegion();
-        layer.setGlobalZone(global);
-        sf2.addResource(layer);
-
-        SF2LayerRegion region = new SF2LayerRegion();
-        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 12000);
-        region.putInteger(SF2Region.GENERATOR_SCALETUNING, 0);
-        region.putInteger(SF2Region.GENERATOR_INITIALATTENUATION, -100);
-        region.setSample(sample);
-        layer.getRegions().add(region);
-
-        return layer;
-    }
-
-    public static SF2Layer new_tom(SF2Soundbank sf2) {
-
-        double datab[];
-        double datah[];
-
-        // Make Bass Part
-        {
-            int fftlen = 4096 * 4;
-            double[] data = new double[2 * fftlen];
-            complexGaussianDist(data, 30, 0.5, 1);
-            randomPhase(data, new Random(3049912));
-            ifft(data);
-            normalize(data, 0.8);
-            data = realPart(data);
-
-            double d_len = data.length;
-            for (int i = 0; i < data.length; i++)
-                data[i] *= (1.0 - (i / d_len));
-            datab = data;
-        }
-
-        // Make treble part
-        {
-            int fftlen = 4096 * 4;
-            double[] data = new double[2 * fftlen];
-            Random random = new Random(3049912);
-            for (int i = 0; i < data.length; i += 2)
-                data[i] = (2.0 * (random.nextDouble() - 0.5)) * 0.1;
-            fft(data);
-            // Remove all negative frequency
-            for (int i = fftlen / 2; i < data.length; i++)
-                data[i] = 0;
-            for (int i = 1024 * 4; i < 2048 * 4; i++)
-                data[i] = 1.0 - (i - 4096) / 4096.0;
-            for (int i = 0; i < 200; i++) {
-                double g = (1.0 - (i / 200.0));
-                data[i] *= 1.0 + 20 * g * g;
-            }
-            for (int i = 0; i < 30; i++)
-                data[i] = 0;
-            randomPhase(data, new Random(3049912));
-            ifft(data);
-            normalize(data, 0.9);
-            data = realPart(data);
-            double gain = 1.0;
-            for (int i = 0; i < data.length; i++) {
-                data[i] *= gain;
-                gain *= 0.9996;
-            }
-            datah = data;
-        }
-
-        for (int i = 0; i < datah.length; i++)
-            datab[i] += datah[i] * 0.5;
-        for (int i = 0; i < 5; i++)
-            datab[i] *= i / 5.0;
-
-        normalize(datab, 0.99);
-
-        SF2Sample sample = newSimpleDrumSample(sf2, "Tom", datab);
-        sample.setOriginalPitch(50);
-
-        SF2Layer layer = new SF2Layer(sf2);
-        layer.setName("Tom");
-
-        SF2GlobalRegion global = new SF2GlobalRegion();
-        layer.setGlobalZone(global);
-        sf2.addResource(layer);
-
-        SF2LayerRegion region = new SF2LayerRegion();
-        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 12000);
-        //region.putInteger(SF2Region.GENERATOR_SCALETUNING, 0);
-        region.putInteger(SF2Region.GENERATOR_INITIALATTENUATION, -100);
-        region.setSample(sample);
-        layer.getRegions().add(region);
-
-        return layer;
-    }
-
-    public static SF2Layer new_closed_hihat(SF2Soundbank sf2) {
-        double datah[];
-
-        // Make treble part
-        {
-            int fftlen = 4096 * 4;
-            double[] data = new double[2 * fftlen];
-            Random random = new Random(3049912);
-            for (int i = 0; i < data.length; i += 2)
-                data[i] = (2.0 * (random.nextDouble() - 0.5)) * 0.1;
-            fft(data);
-            // Remove all negative frequency
-            for (int i = fftlen / 2; i < data.length; i++)
-                data[i] = 0;
-            for (int i = 1024 * 4; i < 2048 * 4; i++)
-                data[i] = 1.0 - (i - 4096) / 4096.0;
-            for (int i = 0; i < 2048; i++)
-                data[i] = 0.2 + 0.8 * (i / 2048.0);
-            randomPhase(data, new Random(3049912));
-            ifft(data);
-            normalize(data, 0.9);
-            data = realPart(data);
-            double gain = 1.0;
-            for (int i = 0; i < data.length; i++) {
-                data[i] *= gain;
-                gain *= 0.9996;
-            }
-            datah = data;
-        }
-
-        for (int i = 0; i < 5; i++)
-            datah[i] *= i / 5.0;
-        SF2Sample sample = newSimpleDrumSample(sf2, "Closed Hi-Hat", datah);
-
-        SF2Layer layer = new SF2Layer(sf2);
-        layer.setName("Closed Hi-Hat");
-
-        SF2GlobalRegion global = new SF2GlobalRegion();
-        layer.setGlobalZone(global);
-        sf2.addResource(layer);
-
-        SF2LayerRegion region = new SF2LayerRegion();
-        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 12000);
-        region.putInteger(SF2Region.GENERATOR_SCALETUNING, 0);
-        region.putInteger(SF2Region.GENERATOR_EXCLUSIVECLASS, 1);
-        region.setSample(sample);
-        layer.getRegions().add(region);
-
-        return layer;
-    }
-
-    public static SF2Layer new_open_hihat(SF2Soundbank sf2) {
-        double datah[];
-        {
-            int fftlen = 4096 * 4;
-            double[] data = new double[2 * fftlen];
-            Random random = new Random(3049912);
-            for (int i = 0; i < data.length; i += 2)
-                data[i] = (2.0 * (random.nextDouble() - 0.5));
-            for (int i = fftlen / 2; i < data.length; i++)
-                data[i] = 0;
-            for (int i = 0; i < 200; i++)
-                data[i] = 0;
-            for (int i = 0; i < 2048 * 4; i++) {
-                double gain = (i / (2048.0 * 4.0));
-                data[i] = gain;
-            }
-            datah = data;
-        }
-
-        SF2Sample sample = newSimpleFFTSample(sf2, "Open Hi-Hat", datah, 1000, 5);
-
-        SF2Layer layer = new SF2Layer(sf2);
-        layer.setName("Open Hi-Hat");
-
-        SF2GlobalRegion global = new SF2GlobalRegion();
-        layer.setGlobalZone(global);
-        sf2.addResource(layer);
-
-        SF2LayerRegion region = new SF2LayerRegion();
-        region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 1500);
-        region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);
-        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 1500);
-        region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, 1000);
-        region.putInteger(SF2Region.GENERATOR_SCALETUNING, 0);
-        region.putInteger(SF2Region.GENERATOR_EXCLUSIVECLASS, 1);
-        region.setSample(sample);
-        layer.getRegions().add(region);
-
-        return layer;
-    }
-
-    public static SF2Layer new_crash_cymbal(SF2Soundbank sf2) {
-        double datah[];
-        {
-            int fftlen = 4096 * 4;
-            double[] data = new double[2 * fftlen];
-            Random random = new Random(3049912);
-            for (int i = 0; i < data.length; i += 2)
-                data[i] = (2.0 * (random.nextDouble() - 0.5));
-            for (int i = fftlen / 2; i < data.length; i++)
-                data[i] = 0;
-            for (int i = 0; i < 100; i++)
-                data[i] = 0;
-            for (int i = 0; i < 512 * 2; i++) {
-                double gain = (i / (512.0 * 2.0));
-                data[i] = gain;
-            }
-            datah = data;
-        }
-
-        SF2Sample sample = newSimpleFFTSample(sf2, "Crash Cymbal", datah, 1000, 5);
-
-        SF2Layer layer = new SF2Layer(sf2);
-        layer.setName("Crash Cymbal");
-
-        SF2GlobalRegion global = new SF2GlobalRegion();
-        layer.setGlobalZone(global);
-        sf2.addResource(layer);
-
-        SF2LayerRegion region = new SF2LayerRegion();
-        region.putInteger(SF2Region.GENERATOR_DECAYVOLENV, 1800);
-        region.putInteger(SF2Region.GENERATOR_SAMPLEMODES, 1);
-        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 1800);
-        region.putInteger(SF2Region.GENERATOR_SUSTAINVOLENV, 1000);
-        region.putInteger(SF2Region.GENERATOR_SCALETUNING, 0);
-        region.setSample(sample);
-        layer.getRegions().add(region);
-
-        return layer;
-    }
-
-    public static SF2Layer new_side_stick(SF2Soundbank sf2) {
-        double datab[];
-
-        // Make treble part
-        {
-            int fftlen = 4096 * 4;
-            double[] data = new double[2 * fftlen];
-            Random random = new Random(3049912);
-            for (int i = 0; i < data.length; i += 2)
-                data[i] = (2.0 * (random.nextDouble() - 0.5)) * 0.1;
-            fft(data);
-            // Remove all negative frequency
-            for (int i = fftlen / 2; i < data.length; i++)
-                data[i] = 0;
-            for (int i = 1024 * 4; i < 2048 * 4; i++)
-                data[i] = 1.0 - (i - 4096) / 4096.0;
-            for (int i = 0; i < 200; i++) {
-                double g = (1.0 - (i / 200.0));
-                data[i] *= 1.0 + 20 * g * g;
-            }
-            for (int i = 0; i < 30; i++)
-                data[i] = 0;
-            randomPhase(data, new Random(3049912));
-            ifft(data);
-            normalize(data, 0.9);
-            data = realPart(data);
-            double gain = 1.0;
-            for (int i = 0; i < data.length; i++) {
-                data[i] *= gain;
-                gain *= 0.9996;
-            }
-            datab = data;
-        }
-
-        for (int i = 0; i < 10; i++)
-            datab[i] *= i / 10.0;
-
-        SF2Sample sample = newSimpleDrumSample(sf2, "Side Stick", datab);
-
-        SF2Layer layer = new SF2Layer(sf2);
-        layer.setName("Side Stick");
-
-        SF2GlobalRegion global = new SF2GlobalRegion();
-        layer.setGlobalZone(global);
-        sf2.addResource(layer);
-
-        SF2LayerRegion region = new SF2LayerRegion();
-        region.putInteger(SF2Region.GENERATOR_RELEASEVOLENV, 12000);
-        region.putInteger(SF2Region.GENERATOR_SCALETUNING, 0);
-        region.putInteger(SF2Region.GENERATOR_INITIALATTENUATION, -50);
-        region.setSample(sample);
-        layer.getRegions().add(region);
-
-        return layer;
-
-    }
-
-    public static SF2Sample newSimpleFFTSample(SF2Soundbank sf2, String name,
-            double[] data, double base) {
-        return newSimpleFFTSample(sf2, name, data, base, 10);
-    }
-
-    public static SF2Sample newSimpleFFTSample(SF2Soundbank sf2, String name,
-            double[] data, double base, int fadeuptime) {
-
-        int fftsize = data.length / 2;
-        AudioFormat format = new AudioFormat(44100, 16, 1, true, false);
-        double basefreq = (base / fftsize) * format.getSampleRate() * 0.5;
-
-        randomPhase(data);
-        ifft(data);
-        data = realPart(data);
-        normalize(data, 0.9);
-        float[] fdata = toFloat(data);
-        fdata = loopExtend(fdata, fdata.length + 512);
-        fadeUp(fdata, fadeuptime);
-        byte[] bdata = toBytes(fdata, format);
-
-        /*
-         * Create SoundFont2 sample.
-         */
-        SF2Sample sample = new SF2Sample(sf2);
-        sample.setName(name);
-        sample.setData(bdata);
-        sample.setStartLoop(256);
-        sample.setEndLoop(fftsize + 256);
-        sample.setSampleRate((long) format.getSampleRate());
-        double orgnote = (69 + 12)
-                + (12 * Math.log(basefreq / 440.0) / Math.log(2));
-        sample.setOriginalPitch((int) orgnote);
-        sample.setPitchCorrection((byte) (-(orgnote - (int) orgnote) * 100.0));
-        sf2.addResource(sample);
-
-        return sample;
-    }
-
-    public static SF2Sample newSimpleFFTSample_dist(SF2Soundbank sf2,
-            String name, double[] data, double base, double preamp) {
-
-        int fftsize = data.length / 2;
-        AudioFormat format = new AudioFormat(44100, 16, 1, true, false);
-        double basefreq = (base / fftsize) * format.getSampleRate() * 0.5;
-
-        randomPhase(data);
-        ifft(data);
-        data = realPart(data);
-
-        for (int i = 0; i < data.length; i++) {
-            data[i] = (1 - Math.exp(-Math.abs(data[i] * preamp)))
-                    * Math.signum(data[i]);
-        }
-
-        normalize(data, 0.9);
-        float[] fdata = toFloat(data);
-        fdata = loopExtend(fdata, fdata.length + 512);
-        fadeUp(fdata, 80);
-        byte[] bdata = toBytes(fdata, format);
-
-        /*
-         * Create SoundFont2 sample.
-         */
-        SF2Sample sample = new SF2Sample(sf2);
-        sample.setName(name);
-        sample.setData(bdata);
-        sample.setStartLoop(256);
-        sample.setEndLoop(fftsize + 256);
-        sample.setSampleRate((long) format.getSampleRate());
-        double orgnote = (69 + 12)
-                + (12 * Math.log(basefreq / 440.0) / Math.log(2));
-        sample.setOriginalPitch((int) orgnote);
-        sample.setPitchCorrection((byte) (-(orgnote - (int) orgnote) * 100.0));
-        sf2.addResource(sample);
-
-        return sample;
-    }
-
-    public static SF2Sample newSimpleDrumSample(SF2Soundbank sf2, String name,
-            double[] data) {
-
-        int fftsize = data.length;
-        AudioFormat format = new AudioFormat(44100, 16, 1, true, false);
-
-        byte[] bdata = toBytes(toFloat(realPart(data)), format);
-
-        /*
-         * Create SoundFont2 sample.
-         */
-        SF2Sample sample = new SF2Sample(sf2);
-        sample.setName(name);
-        sample.setData(bdata);
-        sample.setStartLoop(256);
-        sample.setEndLoop(fftsize + 256);
-        sample.setSampleRate((long) format.getSampleRate());
-        sample.setOriginalPitch(60);
-        sf2.addResource(sample);
-
-        return sample;
-    }
-
-    public static SF2Layer newLayer(SF2Soundbank sf2, String name, SF2Sample sample) {
-        SF2LayerRegion region = new SF2LayerRegion();
-        region.setSample(sample);
-
-        SF2Layer layer = new SF2Layer(sf2);
-        layer.setName(name);
-        layer.getRegions().add(region);
-        sf2.addResource(layer);
-
-        return layer;
-    }
-
-    public static SF2Instrument newInstrument(SF2Soundbank sf2, String name,
-            Patch patch, SF2Layer... layers) {
-
-        /*
-         * Create SoundFont2 instrument.
-         */
-        SF2Instrument ins = new SF2Instrument(sf2);
-        ins.setPatch(patch);
-        ins.setName(name);
-        sf2.addInstrument(ins);
-
-        /*
-         * Create region for instrument.
-         */
-        for (int i = 0; i < layers.length; i++) {
-            SF2InstrumentRegion insregion = new SF2InstrumentRegion();
-            insregion.setLayer(layers[i]);
-            ins.getRegions().add(insregion);
-        }
-
-        return ins;
-    }
-
-    static public void ifft(double[] data) {
-        new FFT(data.length / 2, 1).transform(data);
-    }
-
-    static public void fft(double[] data) {
-        new FFT(data.length / 2, -1).transform(data);
-    }
-
-    public static void complexGaussianDist(double[] cdata, double m,
-            double s, double v) {
-        for (int x = 0; x < cdata.length / 4; x++) {
-            cdata[x * 2] += v * (1.0 / (s * Math.sqrt(2 * Math.PI))
-                    * Math.exp((-1.0 / 2.0) * Math.pow((x - m) / s, 2.0)));
-        }
-    }
-
-    static public void randomPhase(double[] data) {
-        for (int i = 0; i < data.length; i += 2) {
-            double phase = Math.random() * 2 * Math.PI;
-            double d = data[i];
-            data[i] = Math.sin(phase) * d;
-            data[i + 1] = Math.cos(phase) * d;
-        }
-    }
-
-    static public void randomPhase(double[] data, Random random) {
-        for (int i = 0; i < data.length; i += 2) {
-            double phase = random.nextDouble() * 2 * Math.PI;
-            double d = data[i];
-            data[i] = Math.sin(phase) * d;
-            data[i + 1] = Math.cos(phase) * d;
-        }
-    }
-
-    static public void normalize(double[] data, double target) {
-        double maxvalue = 0;
-        for (int i = 0; i < data.length; i++) {
-            if (data[i] > maxvalue)
-                maxvalue = data[i];
-            if (-data[i] > maxvalue)
-                maxvalue = -data[i];
-        }
-        if (maxvalue == 0)
-            return;
-        double gain = target / maxvalue;
-        for (int i = 0; i < data.length; i++)
-            data[i] *= gain;
-    }
-
-    static public void normalize(float[] data, double target) {
-        double maxvalue = 0.5;
-        for (int i = 0; i < data.length; i++) {
-            if (data[i * 2] > maxvalue)
-                maxvalue = data[i * 2];
-            if (-data[i * 2] > maxvalue)
-                maxvalue = -data[i * 2];
-        }
-        double gain = target / maxvalue;
-        for (int i = 0; i < data.length; i++)
-            data[i * 2] *= gain;
-    }
-
-    static public double[] realPart(double[] in) {
-        double[] out = new double[in.length / 2];
-        for (int i = 0; i < out.length; i++) {
-            out[i] = in[i * 2];
-        }
-        return out;
-    }
-
-    static public double[] imgPart(double[] in) {
-        double[] out = new double[in.length / 2];
-        for (int i = 0; i < out.length; i++) {
-            out[i] = in[i * 2];
-        }
-        return out;
-    }
-
-    static public float[] toFloat(double[] in) {
-        float[] out = new float[in.length];
-        for (int i = 0; i < out.length; i++) {
-            out[i] = (float) in[i];
-        }
-        return out;
-    }
-
-    static public byte[] toBytes(float[] in, AudioFormat format) {
-        byte[] out = new byte[in.length * format.getFrameSize()];
-        return AudioFloatConverter.getConverter(format).toByteArray(in, out);
-    }
-
-    static public void fadeUp(double[] data, int samples) {
-        double dsamples = samples;
-        for (int i = 0; i < samples; i++)
-            data[i] *= i / dsamples;
-    }
-
-    static public void fadeUp(float[] data, int samples) {
-        double dsamples = samples;
-        for (int i = 0; i < samples; i++)
-            data[i] *= i / dsamples;
-    }
-
-    static public double[] loopExtend(double[] data, int newsize) {
-        double[] outdata = new double[newsize];
-        int p_len = data.length;
-        int p_ps = 0;
-        for (int i = 0; i < outdata.length; i++) {
-            outdata[i] = data[p_ps];
-            p_ps++;
-            if (p_ps == p_len)
-                p_ps = 0;
-        }
-        return outdata;
-    }
-
-    static public float[] loopExtend(float[] data, int newsize) {
-        float[] outdata = new float[newsize];
-        int p_len = data.length;
-        int p_ps = 0;
-        for (int i = 0; i < outdata.length; i++) {
-            outdata[i] = data[p_ps];
-            p_ps++;
-            if (p_ps == p_len)
-                p_ps = 0;
-        }
-        return outdata;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/EventDispatcher.java b/ojluni/src/main/java/com/sun/media/sound/EventDispatcher.java
deleted file mode 100755
index 54b948a..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/EventDispatcher.java
+++ /dev/null
@@ -1,452 +0,0 @@
-/*
- * Copyright (c) 1998, 2013, 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.media.sound;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.sound.midi.ControllerEventListener;
-import javax.sound.midi.MetaEventListener;
-import javax.sound.midi.MetaMessage;
-import javax.sound.midi.ShortMessage;
-import javax.sound.sampled.LineEvent;
-import javax.sound.sampled.LineListener;
-
-
-
-/**
- * EventDispatcher.  Used by various classes in the Java Sound implementation
- * to send events.
- *
- * @author David Rivas
- * @author Kara Kytle
- * @author Florian Bomers
- */
-final class EventDispatcher implements Runnable {
-
-    /**
-     * time of inactivity until the auto closing clips
-     * are closed
-     */
-    private static final int AUTO_CLOSE_TIME = 5000;
-
-
-    /**
-     * List of events
-     */
-    private final ArrayList eventQueue = new ArrayList();
-
-
-    /**
-     * Thread object for this EventDispatcher instance
-     */
-    private Thread thread = null;
-
-
-    /*
-     * support for auto-closing Clips
-     */
-    private final ArrayList<ClipInfo> autoClosingClips = new ArrayList<ClipInfo>();
-
-    /*
-     * support for monitoring data lines
-     */
-    private final ArrayList<LineMonitor> lineMonitors = new ArrayList<LineMonitor>();
-
-    /**
-     * Approximate interval between calls to LineMonitor.checkLine
-     */
-    static final int LINE_MONITOR_TIME = 400;
-
-
-    /**
-     * This start() method starts an event thread if one is not already active.
-     */
-    synchronized void start() {
-
-        if(thread == null) {
-            thread = JSSecurityManager.createThread(this,
-                                                    "Java Sound Event Dispatcher",   // name
-                                                    true,  // daemon
-                                                    -1,    // priority
-                                                    true); // doStart
-        }
-    }
-
-
-    /**
-     * Invoked when there is at least one event in the queue.
-     * Implement this as a callback to process one event.
-     */
-    void processEvent(EventInfo eventInfo) {
-        int count = eventInfo.getListenerCount();
-
-        // process an LineEvent
-        if (eventInfo.getEvent() instanceof LineEvent) {
-            LineEvent event = (LineEvent) eventInfo.getEvent();
-            if (Printer.debug) Printer.debug("Sending "+event+" to "+count+" listeners");
-            for (int i = 0; i < count; i++) {
-                try {
-                    ((LineListener) eventInfo.getListener(i)).update(event);
-                } catch (Throwable t) {
-                    if (Printer.err) t.printStackTrace();
-                }
-            }
-            return;
-        }
-
-        // process a MetaMessage
-        if (eventInfo.getEvent() instanceof MetaMessage) {
-            MetaMessage event = (MetaMessage)eventInfo.getEvent();
-            for (int i = 0; i < count; i++) {
-                try {
-                    ((MetaEventListener) eventInfo.getListener(i)).meta(event);
-                } catch (Throwable t) {
-                    if (Printer.err) t.printStackTrace();
-                }
-            }
-            return;
-        }
-
-        // process a Controller or Mode Event
-        if (eventInfo.getEvent() instanceof ShortMessage) {
-            ShortMessage event = (ShortMessage)eventInfo.getEvent();
-            int status = event.getStatus();
-
-            // Controller and Mode events have status byte 0xBc, where
-            // c is the channel they are sent on.
-            if ((status & 0xF0) == 0xB0) {
-                for (int i = 0; i < count; i++) {
-                    try {
-                        ((ControllerEventListener) eventInfo.getListener(i)).controlChange(event);
-                    } catch (Throwable t) {
-                        if (Printer.err) t.printStackTrace();
-                    }
-                }
-            }
-            return;
-        }
-
-        Printer.err("Unknown event type: " + eventInfo.getEvent());
-    }
-
-
-    /**
-     * Wait until there is something in the event queue to process.  Then
-     * dispatch the event to the listeners.The entire method does not
-     * need to be synchronized since this includes taking the event out
-     * from the queue and processing the event. We only need to provide
-     * exclusive access over the code where an event is removed from the
-     *queue.
-     */
-    void dispatchEvents() {
-
-        EventInfo eventInfo = null;
-
-        synchronized (this) {
-
-            // Wait till there is an event in the event queue.
-            try {
-
-                if (eventQueue.size() == 0) {
-                    if (autoClosingClips.size() > 0 || lineMonitors.size() > 0) {
-                        int waitTime = AUTO_CLOSE_TIME;
-                        if (lineMonitors.size() > 0) {
-                            waitTime = LINE_MONITOR_TIME;
-                        }
-                        wait(waitTime);
-                    } else {
-                        wait();
-                    }
-                }
-            } catch (InterruptedException e) {
-            }
-            if (eventQueue.size() > 0) {
-                // Remove the event from the queue and dispatch it to the listeners.
-                eventInfo = (EventInfo) eventQueue.remove(0);
-            }
-
-        } // end of synchronized
-        if (eventInfo != null) {
-            processEvent(eventInfo);
-        } else {
-            if (autoClosingClips.size() > 0) {
-                closeAutoClosingClips();
-            }
-            if (lineMonitors.size() > 0) {
-                monitorLines();
-            }
-        }
-    }
-
-
-    /**
-     * Queue the given event in the event queue.
-     */
-    private synchronized void postEvent(EventInfo eventInfo) {
-        eventQueue.add(eventInfo);
-        notifyAll();
-    }
-
-
-    /**
-     * A loop to dispatch events.
-     */
-    public void run() {
-
-        while (true) {
-            try {
-                dispatchEvents();
-            } catch (Throwable t) {
-                if (Printer.err) t.printStackTrace();
-            }
-        }
-    }
-
-
-    /**
-     * Send audio and MIDI events.
-     */
-    void sendAudioEvents(Object event, List listeners) {
-        if ((listeners == null)
-            || (listeners.size() == 0)) {
-            // nothing to do
-            return;
-        }
-
-        start();
-
-        EventInfo eventInfo = new EventInfo(event, listeners);
-        postEvent(eventInfo);
-    }
-
-
-    /*
-     * go through the list of registered auto-closing
-     * Clip instances and close them, if appropriate
-     *
-     * This method is called in regular intervals
-     */
-    private void closeAutoClosingClips() {
-        synchronized(autoClosingClips) {
-            if (Printer.debug)Printer.debug("> EventDispatcher.closeAutoClosingClips ("+autoClosingClips.size()+" clips)");
-            long currTime = System.currentTimeMillis();
-            for (int i = autoClosingClips.size()-1; i >= 0 ; i--) {
-                ClipInfo info = autoClosingClips.get(i);
-                if (info.isExpired(currTime)) {
-                    AutoClosingClip clip = info.getClip();
-                    // sanity check
-                    if (!clip.isOpen() || !clip.isAutoClosing()) {
-                        if (Printer.debug)Printer.debug("EventDispatcher: removing clip "+clip+"  isOpen:"+clip.isOpen());
-                        autoClosingClips.remove(i);
-                    }
-                    else if (!clip.isRunning() && !clip.isActive() && clip.isAutoClosing()) {
-                        if (Printer.debug)Printer.debug("EventDispatcher: closing clip "+clip);
-                        clip.close();
-                    } else {
-                        if (Printer.debug)Printer.debug("Doing nothing with clip "+clip+":");
-                        if (Printer.debug)Printer.debug("  open="+clip.isOpen()+", autoclosing="+clip.isAutoClosing());
-                        if (Printer.debug)Printer.debug("  isRunning="+clip.isRunning()+", isActive="+clip.isActive());
-                    }
-                } else {
-                    if (Printer.debug)Printer.debug("EventDispatcher: clip "+info.getClip()+" not yet expired");
-                }
-            }
-        }
-        if (Printer.debug)Printer.debug("< EventDispatcher.closeAutoClosingClips ("+autoClosingClips.size()+" clips)");
-    }
-
-    private int getAutoClosingClipIndex(AutoClosingClip clip) {
-        synchronized(autoClosingClips) {
-            for (int i = autoClosingClips.size()-1; i >= 0; i--) {
-                if (clip.equals(autoClosingClips.get(i).getClip())) {
-                    return i;
-                }
-            }
-        }
-        return -1;
-    }
-
-    /**
-     * called from auto-closing clips when one of their open() method is called
-     */
-    void autoClosingClipOpened(AutoClosingClip clip) {
-        if (Printer.debug)Printer.debug("> EventDispatcher.autoClosingClipOpened ");
-        int index = 0;
-        synchronized(autoClosingClips) {
-            index = getAutoClosingClipIndex(clip);
-            if (index == -1) {
-                if (Printer.debug)Printer.debug("EventDispatcher: adding auto-closing clip "+clip);
-                autoClosingClips.add(new ClipInfo(clip));
-            }
-        }
-        if (index == -1) {
-            synchronized (this) {
-                // this is only for the case that the first clip is set to autoclosing,
-                // and it is already open, and nothing is done with it.
-                // EventDispatcher.process() method would block in wait() and
-                // never close this first clip, keeping the device open.
-                notifyAll();
-            }
-        }
-        if (Printer.debug)Printer.debug("< EventDispatcher.autoClosingClipOpened finished("+autoClosingClips.size()+" clips)");
-    }
-
-    /**
-     * called from auto-closing clips when their closed() method is called
-     */
-    void autoClosingClipClosed(AutoClosingClip clip) {
-        // nothing to do -- is removed from arraylist above
-    }
-
-
-    // ////////////////////////// Line Monitoring Support /////////////////// //
-    /*
-     * go through the list of registered line monitors
-     * and call their checkLine method
-     *
-     * This method is called in regular intervals
-     */
-    private void monitorLines() {
-        synchronized(lineMonitors) {
-            if (Printer.debug)Printer.debug("> EventDispatcher.monitorLines ("+lineMonitors.size()+" monitors)");
-            for (int i = 0; i < lineMonitors.size(); i++) {
-                lineMonitors.get(i).checkLine();
-            }
-        }
-        if (Printer.debug)Printer.debug("< EventDispatcher.monitorLines("+lineMonitors.size()+" monitors)");
-    }
-
-
-    /**
-     * Add this LineMonitor instance to the list of monitors
-     */
-    void addLineMonitor(LineMonitor lm) {
-        if (Printer.trace)Printer.trace("> EventDispatcher.addLineMonitor("+lm+")");
-        synchronized(lineMonitors) {
-            if (lineMonitors.indexOf(lm) >= 0) {
-                if (Printer.trace)Printer.trace("< EventDispatcher.addLineMonitor finished -- this monitor already exists!");
-                return;
-            }
-            if (Printer.debug)Printer.debug("EventDispatcher: adding line monitor "+lm);
-            lineMonitors.add(lm);
-        }
-        synchronized (this) {
-            // need to interrupt the infinite wait()
-            notifyAll();
-        }
-        if (Printer.debug)Printer.debug("< EventDispatcher.addLineMonitor finished -- now ("+lineMonitors.size()+" monitors)");
-    }
-
-    /**
-     * Remove this LineMonitor instance from the list of monitors
-     */
-    void removeLineMonitor(LineMonitor lm) {
-        if (Printer.trace)Printer.trace("> EventDispatcher.removeLineMonitor("+lm+")");
-        synchronized(lineMonitors) {
-            if (lineMonitors.indexOf(lm) < 0) {
-                if (Printer.trace)Printer.trace("< EventDispatcher.removeLineMonitor finished -- this monitor does not exist!");
-                return;
-            }
-            if (Printer.debug)Printer.debug("EventDispatcher: removing line monitor "+lm);
-            lineMonitors.remove(lm);
-        }
-        if (Printer.debug)Printer.debug("< EventDispatcher.removeLineMonitor finished -- now ("+lineMonitors.size()+" monitors)");
-    }
-
-    // /////////////////////////////////// INNER CLASSES ////////////////////////////////////////// //
-
-    /**
-     * Container for an event and a set of listeners to deliver it to.
-     */
-    private class EventInfo {
-
-        private final Object event;
-        private final Object[] listeners;
-
-        /**
-         * Create a new instance of this event Info class
-         * @param event the event to be dispatched
-         * @param listeners listener list; will be copied
-         */
-        EventInfo(Object event, List listeners) {
-            this.event = event;
-            this.listeners = listeners.toArray();
-        }
-
-        Object getEvent() {
-            return event;
-        }
-
-        int getListenerCount() {
-            return listeners.length;
-        }
-
-        Object getListener(int index) {
-            return listeners[index];
-        }
-
-    } // class EventInfo
-
-
-    /**
-     * Container for a clip with its expiration time
-     */
-    private class ClipInfo {
-
-        private final AutoClosingClip clip;
-        private final long expiration;
-
-        /**
-         * Create a new instance of this clip Info class
-         */
-        ClipInfo(AutoClosingClip clip) {
-            this.clip = clip;
-            this.expiration = System.currentTimeMillis() + AUTO_CLOSE_TIME;
-        }
-
-        AutoClosingClip getClip() {
-            return clip;
-        }
-
-        boolean isExpired(long currTime) {
-            return currTime > expiration;
-        }
-    } // class ClipInfo
-
-
-    /**
-     * Interface that a class that wants to get regular
-     * line monitor events implements
-     */
-    interface LineMonitor {
-        /**
-         * Called by event dispatcher in regular intervals
-         */
-        public void checkLine();
-    }
-
-} // class EventDispatcher
diff --git a/ojluni/src/main/java/com/sun/media/sound/FFT.java b/ojluni/src/main/java/com/sun/media/sound/FFT.java
deleted file mode 100755
index b378c8c..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/FFT.java
+++ /dev/null
@@ -1,748 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, 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.media.sound;
-
-/**
- * Fast Fourier Transformer.
- *
- * @author Karl Helgason
- */
-public final class FFT {
-
-    private final double[] w;
-    private final int fftFrameSize;
-    private final int sign;
-    private final int[] bitm_array;
-    private final int fftFrameSize2;
-
-    // Sign = -1 is FFT, 1 is IFFT (inverse FFT)
-    // Data = Interlaced double array to be transformed.
-    // The order is: real (sin), complex (cos)
-    // Framesize must be power of 2
-    public FFT(int fftFrameSize, int sign) {
-        w = computeTwiddleFactors(fftFrameSize, sign);
-
-        this.fftFrameSize = fftFrameSize;
-        this.sign = sign;
-        fftFrameSize2 = fftFrameSize << 1;
-
-        // Pre-process Bit-Reversal
-        bitm_array = new int[fftFrameSize2];
-        for (int i = 2; i < fftFrameSize2; i += 2) {
-            int j;
-            int bitm;
-            for (bitm = 2, j = 0; bitm < fftFrameSize2; bitm <<= 1) {
-                if ((i & bitm) != 0)
-                    j++;
-                j <<= 1;
-            }
-            bitm_array[i] = j;
-        }
-
-    }
-
-    public void transform(double[] data) {
-        bitreversal(data);
-        calc(fftFrameSize, data, sign, w);
-    }
-
-    private final static double[] computeTwiddleFactors(int fftFrameSize,
-            int sign) {
-
-        int imax = (int) (Math.log(fftFrameSize) / Math.log(2.));
-
-        double[] warray = new double[(fftFrameSize - 1) * 4];
-        int w_index = 0;
-
-        for (int i = 0,  nstep = 2; i < imax; i++) {
-            int jmax = nstep;
-            nstep <<= 1;
-
-            double wr = 1.0;
-            double wi = 0.0;
-
-            double arg = Math.PI / (jmax >> 1);
-            double wfr = Math.cos(arg);
-            double wfi = sign * Math.sin(arg);
-
-            for (int j = 0; j < jmax; j += 2) {
-                warray[w_index++] = wr;
-                warray[w_index++] = wi;
-
-                double tempr = wr;
-                wr = tempr * wfr - wi * wfi;
-                wi = tempr * wfi + wi * wfr;
-            }
-        }
-
-        // PRECOMPUTATION of wwr1, wwi1 for factor 4 Decomposition (3 * complex
-        // operators and 8 +/- complex operators)
-        {
-            w_index = 0;
-            int w_index2 = warray.length >> 1;
-            for (int i = 0,  nstep = 2; i < (imax - 1); i++) {
-                int jmax = nstep;
-                nstep *= 2;
-
-                int ii = w_index + jmax;
-                for (int j = 0; j < jmax; j += 2) {
-                    double wr = warray[w_index++];
-                    double wi = warray[w_index++];
-                    double wr1 = warray[ii++];
-                    double wi1 = warray[ii++];
-                    warray[w_index2++] = wr * wr1 - wi * wi1;
-                    warray[w_index2++] = wr * wi1 + wi * wr1;
-                }
-            }
-
-        }
-
-        return warray;
-    }
-
-    private final static void calc(int fftFrameSize, double[] data, int sign,
-            double[] w) {
-
-        final int fftFrameSize2 = fftFrameSize << 1;
-
-        int nstep = 2;
-
-        if (nstep >= fftFrameSize2)
-            return;
-        int i = nstep - 2;
-        if (sign == -1)
-            calcF4F(fftFrameSize, data, i, nstep, w);
-        else
-            calcF4I(fftFrameSize, data, i, nstep, w);
-
-    }
-
-    private final static void calcF2E(int fftFrameSize, double[] data, int i,
-            int nstep, double[] w) {
-        int jmax = nstep;
-        for (int n = 0; n < jmax; n += 2) {
-            double wr = w[i++];
-            double wi = w[i++];
-            int m = n + jmax;
-            double datam_r = data[m];
-            double datam_i = data[m + 1];
-            double datan_r = data[n];
-            double datan_i = data[n + 1];
-            double tempr = datam_r * wr - datam_i * wi;
-            double tempi = datam_r * wi + datam_i * wr;
-            data[m] = datan_r - tempr;
-            data[m + 1] = datan_i - tempi;
-            data[n] = datan_r + tempr;
-            data[n + 1] = datan_i + tempi;
-        }
-        return;
-
-    }
-
-    // Perform Factor-4 Decomposition with 3 * complex operators and 8 +/-
-    // complex operators
-    private final static void calcF4F(int fftFrameSize, double[] data, int i,
-            int nstep, double[] w) {
-        final int fftFrameSize2 = fftFrameSize << 1; // 2*fftFrameSize;
-        // Factor-4 Decomposition
-
-        int w_len = w.length >> 1;
-        while (nstep < fftFrameSize2) {
-
-            if (nstep << 2 == fftFrameSize2) {
-                // Goto Factor-4 Final Decomposition
-                // calcF4E(data, i, nstep, -1, w);
-                calcF4FE(fftFrameSize, data, i, nstep, w);
-                return;
-            }
-            int jmax = nstep;
-            int nnstep = nstep << 1;
-            if (nnstep == fftFrameSize2) {
-                // Factor-4 Decomposition not possible
-                calcF2E(fftFrameSize, data, i, nstep, w);
-                return;
-            }
-            nstep <<= 2;
-            int ii = i + jmax;
-            int iii = i + w_len;
-
-            {
-                i += 2;
-                ii += 2;
-                iii += 2;
-
-                for (int n = 0; n < fftFrameSize2; n += nstep) {
-                    int m = n + jmax;
-
-                    double datam1_r = data[m];
-                    double datam1_i = data[m + 1];
-                    double datan1_r = data[n];
-                    double datan1_i = data[n + 1];
-
-                    n += nnstep;
-                    m += nnstep;
-                    double datam2_r = data[m];
-                    double datam2_i = data[m + 1];
-                    double datan2_r = data[n];
-                    double datan2_i = data[n + 1];
-
-                    double tempr = datam1_r;
-                    double tempi = datam1_i;
-
-                    datam1_r = datan1_r - tempr;
-                    datam1_i = datan1_i - tempi;
-                    datan1_r = datan1_r + tempr;
-                    datan1_i = datan1_i + tempi;
-
-                    double n2w1r = datan2_r;
-                    double n2w1i = datan2_i;
-                    double m2ww1r = datam2_r;
-                    double m2ww1i = datam2_i;
-
-                    tempr = m2ww1r - n2w1r;
-                    tempi = m2ww1i - n2w1i;
-
-                    datam2_r = datam1_r + tempi;
-                    datam2_i = datam1_i - tempr;
-                    datam1_r = datam1_r - tempi;
-                    datam1_i = datam1_i + tempr;
-
-                    tempr = n2w1r + m2ww1r;
-                    tempi = n2w1i + m2ww1i;
-
-                    datan2_r = datan1_r - tempr;
-                    datan2_i = datan1_i - tempi;
-                    datan1_r = datan1_r + tempr;
-                    datan1_i = datan1_i + tempi;
-
-                    data[m] = datam2_r;
-                    data[m + 1] = datam2_i;
-                    data[n] = datan2_r;
-                    data[n + 1] = datan2_i;
-
-                    n -= nnstep;
-                    m -= nnstep;
-                    data[m] = datam1_r;
-                    data[m + 1] = datam1_i;
-                    data[n] = datan1_r;
-                    data[n + 1] = datan1_i;
-
-                }
-            }
-
-            for (int j = 2; j < jmax; j += 2) {
-                double wr = w[i++];
-                double wi = w[i++];
-                double wr1 = w[ii++];
-                double wi1 = w[ii++];
-                double wwr1 = w[iii++];
-                double wwi1 = w[iii++];
-                // double wwr1 = wr * wr1 - wi * wi1; // these numbers can be
-                // precomputed!!!
-                // double wwi1 = wr * wi1 + wi * wr1;
-
-                for (int n = j; n < fftFrameSize2; n += nstep) {
-                    int m = n + jmax;
-
-                    double datam1_r = data[m];
-                    double datam1_i = data[m + 1];
-                    double datan1_r = data[n];
-                    double datan1_i = data[n + 1];
-
-                    n += nnstep;
-                    m += nnstep;
-                    double datam2_r = data[m];
-                    double datam2_i = data[m + 1];
-                    double datan2_r = data[n];
-                    double datan2_i = data[n + 1];
-
-                    double tempr = datam1_r * wr - datam1_i * wi;
-                    double tempi = datam1_r * wi + datam1_i * wr;
-
-                    datam1_r = datan1_r - tempr;
-                    datam1_i = datan1_i - tempi;
-                    datan1_r = datan1_r + tempr;
-                    datan1_i = datan1_i + tempi;
-
-                    double n2w1r = datan2_r * wr1 - datan2_i * wi1;
-                    double n2w1i = datan2_r * wi1 + datan2_i * wr1;
-                    double m2ww1r = datam2_r * wwr1 - datam2_i * wwi1;
-                    double m2ww1i = datam2_r * wwi1 + datam2_i * wwr1;
-
-                    tempr = m2ww1r - n2w1r;
-                    tempi = m2ww1i - n2w1i;
-
-                    datam2_r = datam1_r + tempi;
-                    datam2_i = datam1_i - tempr;
-                    datam1_r = datam1_r - tempi;
-                    datam1_i = datam1_i + tempr;
-
-                    tempr = n2w1r + m2ww1r;
-                    tempi = n2w1i + m2ww1i;
-
-                    datan2_r = datan1_r - tempr;
-                    datan2_i = datan1_i - tempi;
-                    datan1_r = datan1_r + tempr;
-                    datan1_i = datan1_i + tempi;
-
-                    data[m] = datam2_r;
-                    data[m + 1] = datam2_i;
-                    data[n] = datan2_r;
-                    data[n + 1] = datan2_i;
-
-                    n -= nnstep;
-                    m -= nnstep;
-                    data[m] = datam1_r;
-                    data[m + 1] = datam1_i;
-                    data[n] = datan1_r;
-                    data[n + 1] = datan1_i;
-                }
-            }
-
-            i += jmax << 1;
-
-        }
-
-        calcF2E(fftFrameSize, data, i, nstep, w);
-
-    }
-
-    // Perform Factor-4 Decomposition with 3 * complex operators and 8 +/-
-    // complex operators
-    private final static void calcF4I(int fftFrameSize, double[] data, int i,
-            int nstep, double[] w) {
-        final int fftFrameSize2 = fftFrameSize << 1; // 2*fftFrameSize;
-        // Factor-4 Decomposition
-
-        int w_len = w.length >> 1;
-        while (nstep < fftFrameSize2) {
-
-            if (nstep << 2 == fftFrameSize2) {
-                // Goto Factor-4 Final Decomposition
-                // calcF4E(data, i, nstep, 1, w);
-                calcF4IE(fftFrameSize, data, i, nstep, w);
-                return;
-            }
-            int jmax = nstep;
-            int nnstep = nstep << 1;
-            if (nnstep == fftFrameSize2) {
-                // Factor-4 Decomposition not possible
-                calcF2E(fftFrameSize, data, i, nstep, w);
-                return;
-            }
-            nstep <<= 2;
-            int ii = i + jmax;
-            int iii = i + w_len;
-            {
-                i += 2;
-                ii += 2;
-                iii += 2;
-
-                for (int n = 0; n < fftFrameSize2; n += nstep) {
-                    int m = n + jmax;
-
-                    double datam1_r = data[m];
-                    double datam1_i = data[m + 1];
-                    double datan1_r = data[n];
-                    double datan1_i = data[n + 1];
-
-                    n += nnstep;
-                    m += nnstep;
-                    double datam2_r = data[m];
-                    double datam2_i = data[m + 1];
-                    double datan2_r = data[n];
-                    double datan2_i = data[n + 1];
-
-                    double tempr = datam1_r;
-                    double tempi = datam1_i;
-
-                    datam1_r = datan1_r - tempr;
-                    datam1_i = datan1_i - tempi;
-                    datan1_r = datan1_r + tempr;
-                    datan1_i = datan1_i + tempi;
-
-                    double n2w1r = datan2_r;
-                    double n2w1i = datan2_i;
-                    double m2ww1r = datam2_r;
-                    double m2ww1i = datam2_i;
-
-                    tempr = n2w1r - m2ww1r;
-                    tempi = n2w1i - m2ww1i;
-
-                    datam2_r = datam1_r + tempi;
-                    datam2_i = datam1_i - tempr;
-                    datam1_r = datam1_r - tempi;
-                    datam1_i = datam1_i + tempr;
-
-                    tempr = n2w1r + m2ww1r;
-                    tempi = n2w1i + m2ww1i;
-
-                    datan2_r = datan1_r - tempr;
-                    datan2_i = datan1_i - tempi;
-                    datan1_r = datan1_r + tempr;
-                    datan1_i = datan1_i + tempi;
-
-                    data[m] = datam2_r;
-                    data[m + 1] = datam2_i;
-                    data[n] = datan2_r;
-                    data[n + 1] = datan2_i;
-
-                    n -= nnstep;
-                    m -= nnstep;
-                    data[m] = datam1_r;
-                    data[m + 1] = datam1_i;
-                    data[n] = datan1_r;
-                    data[n + 1] = datan1_i;
-
-                }
-
-            }
-            for (int j = 2; j < jmax; j += 2) {
-                double wr = w[i++];
-                double wi = w[i++];
-                double wr1 = w[ii++];
-                double wi1 = w[ii++];
-                double wwr1 = w[iii++];
-                double wwi1 = w[iii++];
-                // double wwr1 = wr * wr1 - wi * wi1; // these numbers can be
-                // precomputed!!!
-                // double wwi1 = wr * wi1 + wi * wr1;
-
-                for (int n = j; n < fftFrameSize2; n += nstep) {
-                    int m = n + jmax;
-
-                    double datam1_r = data[m];
-                    double datam1_i = data[m + 1];
-                    double datan1_r = data[n];
-                    double datan1_i = data[n + 1];
-
-                    n += nnstep;
-                    m += nnstep;
-                    double datam2_r = data[m];
-                    double datam2_i = data[m + 1];
-                    double datan2_r = data[n];
-                    double datan2_i = data[n + 1];
-
-                    double tempr = datam1_r * wr - datam1_i * wi;
-                    double tempi = datam1_r * wi + datam1_i * wr;
-
-                    datam1_r = datan1_r - tempr;
-                    datam1_i = datan1_i - tempi;
-                    datan1_r = datan1_r + tempr;
-                    datan1_i = datan1_i + tempi;
-
-                    double n2w1r = datan2_r * wr1 - datan2_i * wi1;
-                    double n2w1i = datan2_r * wi1 + datan2_i * wr1;
-                    double m2ww1r = datam2_r * wwr1 - datam2_i * wwi1;
-                    double m2ww1i = datam2_r * wwi1 + datam2_i * wwr1;
-
-                    tempr = n2w1r - m2ww1r;
-                    tempi = n2w1i - m2ww1i;
-
-                    datam2_r = datam1_r + tempi;
-                    datam2_i = datam1_i - tempr;
-                    datam1_r = datam1_r - tempi;
-                    datam1_i = datam1_i + tempr;
-
-                    tempr = n2w1r + m2ww1r;
-                    tempi = n2w1i + m2ww1i;
-
-                    datan2_r = datan1_r - tempr;
-                    datan2_i = datan1_i - tempi;
-                    datan1_r = datan1_r + tempr;
-                    datan1_i = datan1_i + tempi;
-
-                    data[m] = datam2_r;
-                    data[m + 1] = datam2_i;
-                    data[n] = datan2_r;
-                    data[n + 1] = datan2_i;
-
-                    n -= nnstep;
-                    m -= nnstep;
-                    data[m] = datam1_r;
-                    data[m + 1] = datam1_i;
-                    data[n] = datan1_r;
-                    data[n + 1] = datan1_i;
-
-                }
-            }
-
-            i += jmax << 1;
-
-        }
-
-        calcF2E(fftFrameSize, data, i, nstep, w);
-
-    }
-
-    // Perform Factor-4 Decomposition with 3 * complex operators and 8 +/-
-    // complex operators
-    private final static void calcF4FE(int fftFrameSize, double[] data, int i,
-            int nstep, double[] w) {
-        final int fftFrameSize2 = fftFrameSize << 1; // 2*fftFrameSize;
-        // Factor-4 Decomposition
-
-        int w_len = w.length >> 1;
-        while (nstep < fftFrameSize2) {
-
-            int jmax = nstep;
-            int nnstep = nstep << 1;
-            if (nnstep == fftFrameSize2) {
-                // Factor-4 Decomposition not possible
-                calcF2E(fftFrameSize, data, i, nstep, w);
-                return;
-            }
-            nstep <<= 2;
-            int ii = i + jmax;
-            int iii = i + w_len;
-            for (int n = 0; n < jmax; n += 2) {
-                double wr = w[i++];
-                double wi = w[i++];
-                double wr1 = w[ii++];
-                double wi1 = w[ii++];
-                double wwr1 = w[iii++];
-                double wwi1 = w[iii++];
-                // double wwr1 = wr * wr1 - wi * wi1; // these numbers can be
-                // precomputed!!!
-                // double wwi1 = wr * wi1 + wi * wr1;
-
-                int m = n + jmax;
-
-                double datam1_r = data[m];
-                double datam1_i = data[m + 1];
-                double datan1_r = data[n];
-                double datan1_i = data[n + 1];
-
-                n += nnstep;
-                m += nnstep;
-                double datam2_r = data[m];
-                double datam2_i = data[m + 1];
-                double datan2_r = data[n];
-                double datan2_i = data[n + 1];
-
-                double tempr = datam1_r * wr - datam1_i * wi;
-                double tempi = datam1_r * wi + datam1_i * wr;
-
-                datam1_r = datan1_r - tempr;
-                datam1_i = datan1_i - tempi;
-                datan1_r = datan1_r + tempr;
-                datan1_i = datan1_i + tempi;
-
-                double n2w1r = datan2_r * wr1 - datan2_i * wi1;
-                double n2w1i = datan2_r * wi1 + datan2_i * wr1;
-                double m2ww1r = datam2_r * wwr1 - datam2_i * wwi1;
-                double m2ww1i = datam2_r * wwi1 + datam2_i * wwr1;
-
-                tempr = m2ww1r - n2w1r;
-                tempi = m2ww1i - n2w1i;
-
-                datam2_r = datam1_r + tempi;
-                datam2_i = datam1_i - tempr;
-                datam1_r = datam1_r - tempi;
-                datam1_i = datam1_i + tempr;
-
-                tempr = n2w1r + m2ww1r;
-                tempi = n2w1i + m2ww1i;
-
-                datan2_r = datan1_r - tempr;
-                datan2_i = datan1_i - tempi;
-                datan1_r = datan1_r + tempr;
-                datan1_i = datan1_i + tempi;
-
-                data[m] = datam2_r;
-                data[m + 1] = datam2_i;
-                data[n] = datan2_r;
-                data[n + 1] = datan2_i;
-
-                n -= nnstep;
-                m -= nnstep;
-                data[m] = datam1_r;
-                data[m + 1] = datam1_i;
-                data[n] = datan1_r;
-                data[n + 1] = datan1_i;
-
-            }
-
-            i += jmax << 1;
-
-        }
-
-    }
-
-    // Perform Factor-4 Decomposition with 3 * complex operators and 8 +/-
-    // complex operators
-    private final static void calcF4IE(int fftFrameSize, double[] data, int i,
-            int nstep, double[] w) {
-        final int fftFrameSize2 = fftFrameSize << 1; // 2*fftFrameSize;
-        // Factor-4 Decomposition
-
-        int w_len = w.length >> 1;
-        while (nstep < fftFrameSize2) {
-
-            int jmax = nstep;
-            int nnstep = nstep << 1;
-            if (nnstep == fftFrameSize2) {
-                // Factor-4 Decomposition not possible
-                calcF2E(fftFrameSize, data, i, nstep, w);
-                return;
-            }
-            nstep <<= 2;
-            int ii = i + jmax;
-            int iii = i + w_len;
-            for (int n = 0; n < jmax; n += 2) {
-                double wr = w[i++];
-                double wi = w[i++];
-                double wr1 = w[ii++];
-                double wi1 = w[ii++];
-                double wwr1 = w[iii++];
-                double wwi1 = w[iii++];
-                // double wwr1 = wr * wr1 - wi * wi1; // these numbers can be
-                // precomputed!!!
-                // double wwi1 = wr * wi1 + wi * wr1;
-
-                int m = n + jmax;
-
-                double datam1_r = data[m];
-                double datam1_i = data[m + 1];
-                double datan1_r = data[n];
-                double datan1_i = data[n + 1];
-
-                n += nnstep;
-                m += nnstep;
-                double datam2_r = data[m];
-                double datam2_i = data[m + 1];
-                double datan2_r = data[n];
-                double datan2_i = data[n + 1];
-
-                double tempr = datam1_r * wr - datam1_i * wi;
-                double tempi = datam1_r * wi + datam1_i * wr;
-
-                datam1_r = datan1_r - tempr;
-                datam1_i = datan1_i - tempi;
-                datan1_r = datan1_r + tempr;
-                datan1_i = datan1_i + tempi;
-
-                double n2w1r = datan2_r * wr1 - datan2_i * wi1;
-                double n2w1i = datan2_r * wi1 + datan2_i * wr1;
-                double m2ww1r = datam2_r * wwr1 - datam2_i * wwi1;
-                double m2ww1i = datam2_r * wwi1 + datam2_i * wwr1;
-
-                tempr = n2w1r - m2ww1r;
-                tempi = n2w1i - m2ww1i;
-
-                datam2_r = datam1_r + tempi;
-                datam2_i = datam1_i - tempr;
-                datam1_r = datam1_r - tempi;
-                datam1_i = datam1_i + tempr;
-
-                tempr = n2w1r + m2ww1r;
-                tempi = n2w1i + m2ww1i;
-
-                datan2_r = datan1_r - tempr;
-                datan2_i = datan1_i - tempi;
-                datan1_r = datan1_r + tempr;
-                datan1_i = datan1_i + tempi;
-
-                data[m] = datam2_r;
-                data[m + 1] = datam2_i;
-                data[n] = datan2_r;
-                data[n + 1] = datan2_i;
-
-                n -= nnstep;
-                m -= nnstep;
-                data[m] = datam1_r;
-                data[m + 1] = datam1_i;
-                data[n] = datan1_r;
-                data[n + 1] = datan1_i;
-
-            }
-
-            i += jmax << 1;
-
-        }
-
-    }
-
-    private final void bitreversal(double[] data) {
-        if (fftFrameSize < 4)
-            return;
-
-        int inverse = fftFrameSize2 - 2;
-        for (int i = 0; i < fftFrameSize; i += 4) {
-            int j = bitm_array[i];
-
-            // Performing Bit-Reversal, even v.s. even, O(2N)
-            if (i < j) {
-
-                int n = i;
-                int m = j;
-
-                // COMPLEX: SWAP(data[n], data[m])
-                // Real Part
-                double tempr = data[n];
-                data[n] = data[m];
-                data[m] = tempr;
-                // Imagery Part
-                n++;
-                m++;
-                double tempi = data[n];
-                data[n] = data[m];
-                data[m] = tempi;
-
-                n = inverse - i;
-                m = inverse - j;
-
-                // COMPLEX: SWAP(data[n], data[m])
-                // Real Part
-                tempr = data[n];
-                data[n] = data[m];
-                data[m] = tempr;
-                // Imagery Part
-                n++;
-                m++;
-                tempi = data[n];
-                data[n] = data[m];
-                data[m] = tempi;
-            }
-
-            // Performing Bit-Reversal, odd v.s. even, O(N)
-
-            int m = j + fftFrameSize; // bitm_array[i+2];
-            // COMPLEX: SWAP(data[n], data[m])
-            // Real Part
-            int n = i + 2;
-            double tempr = data[n];
-            data[n] = data[m];
-            data[m] = tempr;
-            // Imagery Part
-            n++;
-            m++;
-            double tempi = data[n];
-            data[n] = data[m];
-            data[m] = tempi;
-        }
-
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/FastShortMessage.java b/ojluni/src/main/java/com/sun/media/sound/FastShortMessage.java
deleted file mode 100755
index 54307f2..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/FastShortMessage.java
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- * Copyright (c) 2002, 2013, 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.media.sound;
-
-import javax.sound.midi.*;
-
-/**
- * an optimized ShortMessage that does not need an array
- *
- * @author Florian Bomers
- */
-final class FastShortMessage extends ShortMessage {
-    private int packedMsg;
-
-    FastShortMessage(int packedMsg) throws InvalidMidiDataException {
-        this.packedMsg = packedMsg;
-        getDataLength(packedMsg & 0xFF); // to check for validity
-    }
-
-    /** Creates a FastShortMessage from this ShortMessage */
-    FastShortMessage(ShortMessage msg) {
-        this.packedMsg = msg.getStatus()
-            | (msg.getData1() << 8)
-            | (msg.getData2() << 16);
-    }
-
-    int getPackedMsg() {
-        return packedMsg;
-    }
-
-    public byte[] getMessage() {
-        int length = 0;
-        try {
-            // fix for bug 4851018: MidiMessage.getLength and .getData return wrong values
-            // fix for bug 4890405: Reading MidiMessage byte array fails in 1.4.2
-            length = getDataLength(packedMsg & 0xFF) + 1;
-        } catch (InvalidMidiDataException imde) {
-            // should never happen
-        }
-        byte[] returnedArray = new byte[length];
-        if (length>0) {
-            returnedArray[0] = (byte) (packedMsg & 0xFF);
-            if (length>1) {
-                returnedArray[1] = (byte) ((packedMsg & 0xFF00) >> 8);
-                if (length>2) {
-                    returnedArray[2] = (byte) ((packedMsg & 0xFF0000) >> 16);
-                }
-            }
-        }
-        return returnedArray;
-    }
-
-    public int getLength() {
-        try {
-            return getDataLength(packedMsg & 0xFF) + 1;
-        } catch (InvalidMidiDataException imde) {
-            // should never happen
-        }
-        return 0;
-    }
-
-    public void setMessage(int status) throws InvalidMidiDataException {
-        // check for valid values
-        int dataLength = getDataLength(status); // can throw InvalidMidiDataException
-        if (dataLength != 0) {
-            super.setMessage(status); // throws Exception
-        }
-        packedMsg = (packedMsg & 0xFFFF00) | (status & 0xFF);
-    }
-
-
-    public void setMessage(int status, int data1, int data2) throws InvalidMidiDataException {
-        getDataLength(status); // can throw InvalidMidiDataException
-        packedMsg = (status & 0xFF) | ((data1 & 0xFF) << 8) | ((data2 & 0xFF) << 16);
-    }
-
-
-    public void setMessage(int command, int channel, int data1, int data2) throws InvalidMidiDataException {
-        getDataLength(command); // can throw InvalidMidiDataException
-        packedMsg = (command & 0xF0) | (channel & 0x0F) | ((data1 & 0xFF) << 8) | ((data2 & 0xFF) << 16);
-    }
-
-
-    public int getChannel() {
-        return packedMsg & 0x0F;
-    }
-
-    public int getCommand() {
-        return packedMsg & 0xF0;
-    }
-
-    public int getData1() {
-        return (packedMsg & 0xFF00) >> 8;
-    }
-
-    public int getData2() {
-        return (packedMsg & 0xFF0000) >> 16;
-    }
-
-    public int getStatus() {
-        return packedMsg & 0xFF;
-    }
-
-    /**
-     * Creates a new object of the same class and with the same contents
-     * as this object.
-     * @return a clone of this instance.
-     */
-    public Object clone() {
-        try {
-            return new FastShortMessage(packedMsg);
-        } catch (InvalidMidiDataException imde) {
-            // should never happen
-        }
-        return null;
-    }
-
-} // class FastShortMsg
diff --git a/ojluni/src/main/java/com/sun/media/sound/FastSysexMessage.java b/ojluni/src/main/java/com/sun/media/sound/FastSysexMessage.java
deleted file mode 100755
index 7f2e2de..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/FastSysexMessage.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (c) 2002, 2007, 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.media.sound;
-
-import javax.sound.midi.*;
-
-/**
- * optimized FastSysexMessage that doesn't copy the array upon instantiation
- *
- * @author Florian Bomers
- */
-final class FastSysexMessage extends SysexMessage {
-
-    FastSysexMessage(byte[] data) throws InvalidMidiDataException {
-        super(data);
-        if (data.length==0 || (((data[0] & 0xFF) != 0xF0) && ((data[0] & 0xFF) != 0xF7))) {
-            super.setMessage(data, data.length); // will throw Exception
-        }
-    }
-
-    /**
-     * The returned array may be larger than this message is.
-     * Use getLength() to get the real length of the message.
-     */
-    byte[] getReadOnlyMessage() {
-        return data;
-    }
-
-    // overwrite this method so that the original data array,
-    // which is shared among all transmitters, cannot be modified
-    public void setMessage(byte[] data, int length) throws InvalidMidiDataException {
-        if ((data.length == 0) || (((data[0] & 0xFF) != 0xF0) && ((data[0] & 0xFF) != 0xF7))) {
-            super.setMessage(data, data.length); // will throw Exception
-        }
-        this.length = length;
-        this.data = new byte[this.length];
-        System.arraycopy(data, 0, this.data, 0, length);
-    }
-
-} // class FastSysexMessage
diff --git a/ojluni/src/main/java/com/sun/media/sound/InvalidDataException.java b/ojluni/src/main/java/com/sun/media/sound/InvalidDataException.java
deleted file mode 100755
index ed43640..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/InvalidDataException.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (c) 2007, 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.media.sound;
-
-import java.io.IOException;
-
-/**
- * This exception is used when a file contains illegal or unexpected data.
- *
- * @author Karl Helgason
- */
-public class InvalidDataException extends IOException {
-
-    private static final long serialVersionUID = 1L;
-
-    public InvalidDataException() {
-        super("Invalid Data!");
-    }
-
-    public InvalidDataException(String s) {
-        super(s);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/InvalidFormatException.java b/ojluni/src/main/java/com/sun/media/sound/InvalidFormatException.java
deleted file mode 100755
index 4fcc46c..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/InvalidFormatException.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (c) 2007, 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.media.sound;
-
-/**
- * This exception is used when a reader is used to read file of a format
- * it doesn't unterstand or support.
- *
- * @author Karl Helgason
- */
-public class InvalidFormatException extends InvalidDataException {
-
-    private static final long serialVersionUID = 1L;
-
-    public InvalidFormatException() {
-        super("Invalid format!");
-    }
-
-    public InvalidFormatException(String s) {
-        super(s);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/JARSoundbankReader.java b/ojluni/src/main/java/com/sun/media/sound/JARSoundbankReader.java
deleted file mode 100755
index 32fc90f..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/JARSoundbankReader.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, 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.media.sound;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.util.ArrayList;
-import javax.sound.midi.InvalidMidiDataException;
-import javax.sound.midi.Soundbank;
-import javax.sound.midi.spi.SoundbankReader;
-
-import sun.reflect.misc.ReflectUtil;
-
-/**
- * JarSoundbankReader is used to read soundbank object from jar files.
- *
- * @author Karl Helgason
- */
-public final class JARSoundbankReader extends SoundbankReader {
-
-    private static boolean isZIP(URL url) {
-        boolean ok = false;
-        try {
-            InputStream stream = url.openStream();
-            try {
-                byte[] buff = new byte[4];
-                ok = stream.read(buff) == 4;
-                if (ok) {
-                    ok =  (buff[0] == 0x50
-                        && buff[1] == 0x4b
-                        && buff[2] == 0x03
-                        && buff[3] == 0x04);
-                }
-            } finally {
-                stream.close();
-            }
-        } catch (IOException e) {
-        }
-        return ok;
-    }
-
-    public Soundbank getSoundbank(URL url)
-            throws InvalidMidiDataException, IOException {
-        if (!isZIP(url))
-            return null;
-        ArrayList<Soundbank> soundbanks = new ArrayList<Soundbank>();
-        URLClassLoader ucl = URLClassLoader.newInstance(new URL[]{url});
-        InputStream stream = ucl.getResourceAsStream(
-                "META-INF/services/javax.sound.midi.Soundbank");
-        if (stream == null)
-            return null;
-        try
-        {
-            BufferedReader r = new BufferedReader(new InputStreamReader(stream));
-            String line = r.readLine();
-            while (line != null) {
-                if (!line.startsWith("#")) {
-                    try {
-                        Class<?> c = Class.forName(line.trim(), false, ucl);
-                        if (Soundbank.class.isAssignableFrom(c)) {
-                            Object o = ReflectUtil.newInstance(c);
-                            soundbanks.add((Soundbank) o);
-                        }
-                    } catch (ClassNotFoundException ignored) {
-                    } catch (InstantiationException ignored) {
-                    } catch (IllegalAccessException ignored) {
-                    }
-                }
-                line = r.readLine();
-            }
-        }
-        finally
-        {
-            stream.close();
-        }
-        if (soundbanks.size() == 0)
-            return null;
-        if (soundbanks.size() == 1)
-            return soundbanks.get(0);
-        SimpleSoundbank sbk = new SimpleSoundbank();
-        for (Soundbank soundbank : soundbanks)
-            sbk.addAllInstruments(soundbank);
-        return sbk;
-    }
-
-    public Soundbank getSoundbank(InputStream stream)
-            throws InvalidMidiDataException, IOException {
-        return null;
-    }
-
-    public Soundbank getSoundbank(File file)
-            throws InvalidMidiDataException, IOException {
-        return getSoundbank(file.toURI().toURL());
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/JDK13Services.java b/ojluni/src/main/java/com/sun/media/sound/JDK13Services.java
deleted file mode 100755
index 85b1de6..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/JDK13Services.java
+++ /dev/null
@@ -1,232 +0,0 @@
-/*
- * Copyright (c) 1999, 2013, 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.media.sound;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-
-import javax.sound.midi.Receiver;
-import javax.sound.midi.Sequencer;
-import javax.sound.midi.Synthesizer;
-import javax.sound.midi.Transmitter;
-import javax.sound.sampled.Clip;
-import javax.sound.sampled.Port;
-import javax.sound.sampled.SourceDataLine;
-import javax.sound.sampled.TargetDataLine;
-
-
-/**
- * JDK13Services uses the Service class in JDK 1.3
- * to discover a list of service providers installed
- * in the system.
- *
- * This class is public because it is called from javax.sound.midi.MidiSystem
- * and javax.sound.sampled.AudioSystem. The alternative would be to make
- * JSSecurityManager public, which is considered worse.
- *
- * @author Matthias Pfisterer
- */
-public final class JDK13Services {
-
-    /** The default for the length of the period to hold the cache.
-        This value is given in milliseconds. It is equivalent to
-        1 minute.
-    */
-    private static final long DEFAULT_CACHING_PERIOD = 60000;
-
-    /** Filename of the properties file for default provider properties.
-        This file is searched in the subdirectory "lib" of the JRE directory
-        (this behaviour is hardcoded).
-    */
-    private static final String PROPERTIES_FILENAME = "sound.properties";
-
-    /** Cache for the providers.
-        Class objects of the provider type (MixerProvider, MidiDeviceProvider
-        ...) are used as keys. The values are instances of ProviderCache.
-    */
-    private static final Map providersCacheMap = new HashMap();
-
-
-    /** The length of the period to hold the cache.
-        This value is given in milliseconds.
-    */
-    private static long cachingPeriod = DEFAULT_CACHING_PERIOD;
-
-    /** Properties loaded from the properties file for default provider
-        properties.
-    */
-    private static Properties properties;
-
-
-    /** Private, no-args constructor to ensure against instantiation.
-     */
-    private JDK13Services() {
-    }
-
-
-    /** Set the period provider lists are cached.
-        This method is only intended for testing.
-     */
-    public static void setCachingPeriod(int seconds) {
-        cachingPeriod = seconds * 1000L;
-    }
-
-
-    /** Obtains a List containing installed instances of the
-        providers for the requested service.
-        The List of providers is cached for the period of time given by
-        {@link #cachingPeriod cachingPeriod}. During this period, the same
-        List instance is returned for the same type of provider. After this
-        period, a new instance is constructed and returned. The returned
-        List is immutable.
-        @param serviceClass The type of providers requested. This should be one
-        of AudioFileReader.class, AudioFileWriter.class,
-        FormatConversionProvider.class, MixerProvider.class,
-        MidiDeviceProvider.class, MidiFileReader.class, MidiFileWriter.class or
-        SoundbankReader.class.
-        @return A List of providers of the requested type. This List is
-        immutable.
-     */
-    public static synchronized List getProviders(Class serviceClass) {
-        ProviderCache cache = (ProviderCache) providersCacheMap.get(serviceClass);
-        if (cache == null) {
-            cache = new ProviderCache();
-            providersCacheMap.put(serviceClass, cache);
-        }
-        if (cache.providers == null ||
-            System.currentTimeMillis() > cache.lastUpdate + cachingPeriod) {
-            cache.providers = Collections.unmodifiableList(JSSecurityManager.getProviders(serviceClass));
-            cache.lastUpdate = System.currentTimeMillis();
-        }
-        return cache.providers;
-    }
-
-
-    /** Obtain the provider class name part of a default provider property.
-        @param typeClass The type of the default provider property. This
-        should be one of Receiver.class, Transmitter.class, Sequencer.class,
-        Synthesizer.class, SourceDataLine.class, TargetDataLine.class,
-        Clip.class or Port.class.
-        @return The value of the provider class name part of the property
-        (the part before the hash sign), if available. If the property is
-        not set or the value has no provider class name part, null is returned.
-     */
-    public static synchronized String getDefaultProviderClassName(Class typeClass) {
-        String value = null;
-        String defaultProviderSpec = getDefaultProvider(typeClass);
-        if (defaultProviderSpec != null) {
-            int hashpos = defaultProviderSpec.indexOf('#');
-            if (hashpos == 0) {
-                // instance name only; leave value as null
-            } else if (hashpos > 0) {
-                value = defaultProviderSpec.substring(0, hashpos);
-            } else {
-                value = defaultProviderSpec;
-            }
-        }
-        return value;
-    }
-
-
-    /** Obtain the instance name part of a default provider property.
-        @param typeClass The type of the default provider property. This
-        should be one of Receiver.class, Transmitter.class, Sequencer.class,
-        Synthesizer.class, SourceDataLine.class, TargetDataLine.class,
-        Clip.class or Port.class.
-        @return The value of the instance name part of the property (the
-        part after the hash sign), if available. If the property is not set
-        or the value has no instance name part, null is returned.
-     */
-    public static synchronized String getDefaultInstanceName(Class typeClass) {
-        String value = null;
-        String defaultProviderSpec = getDefaultProvider(typeClass);
-        if (defaultProviderSpec != null) {
-            int hashpos = defaultProviderSpec.indexOf('#');
-            if (hashpos >= 0 && hashpos < defaultProviderSpec.length() - 1) {
-                value = defaultProviderSpec.substring(hashpos + 1);
-            }
-        }
-        return value;
-    }
-
-
-    /** Obtain the value of a default provider property.
-        @param typeClass The type of the default provider property. This
-        should be one of Receiver.class, Transmitter.class, Sequencer.class,
-        Synthesizer.class, SourceDataLine.class, TargetDataLine.class,
-        Clip.class or Port.class.
-        @return The complete value of the property, if available.
-        If the property is not set, null is returned.
-     */
-    private static synchronized String getDefaultProvider(Class typeClass) {
-        if (!SourceDataLine.class.equals(typeClass)
-                && !TargetDataLine.class.equals(typeClass)
-                && !Clip.class.equals(typeClass)
-                && !Port.class.equals(typeClass)
-                && !Receiver.class.equals(typeClass)
-                && !Transmitter.class.equals(typeClass)
-                && !Synthesizer.class.equals(typeClass)
-                && !Sequencer.class.equals(typeClass)) {
-            return null;
-        }
-        String value;
-        String propertyName = typeClass.getName();
-        value = JSSecurityManager.getProperty(propertyName);
-        if (value == null) {
-            value = getProperties().getProperty(propertyName);
-        }
-        if ("".equals(value)) {
-            value = null;
-        }
-        return value;
-    }
-
-
-    /** Obtain a properties bundle containing property values from the
-        properties file. If the properties file could not be loaded,
-        the properties bundle is empty.
-    */
-    private static synchronized Properties getProperties() {
-        if (properties == null) {
-            properties = new Properties();
-            JSSecurityManager.loadProperties(properties, PROPERTIES_FILENAME);
-        }
-        return properties;
-    }
-
-    // INNER CLASSES
-
-    private static class ProviderCache {
-        // System time of the last update in milliseconds.
-        public long lastUpdate;
-
-        // The providers.
-        public List providers;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/JSSecurityManager.java b/ojluni/src/main/java/com/sun/media/sound/JSSecurityManager.java
deleted file mode 100755
index fe9510b..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/JSSecurityManager.java
+++ /dev/null
@@ -1,224 +0,0 @@
-/*
- * Copyright (c) 1999, 2013, 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.media.sound;
-
-import java.io.BufferedInputStream;
-import java.io.InputStream;
-import java.io.File;
-import java.io.FileInputStream;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Properties;
-
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-
-import javax.sound.sampled.AudioPermission;
-
-import sun.misc.Service;
-
-
-/** Managing security in the Java Sound implementation.
- * This class contains all code that uses and is used by
- * SecurityManager.doPrivileged().
- *
- * @author Matthias Pfisterer
- */
-final class JSSecurityManager {
-
-    /** Prevent instantiation.
-     */
-    private JSSecurityManager() {
-    }
-
-    /** Checks if the VM currently has a SecurityManager installed.
-     * Note that this may change over time. So the result of this method
-     * should not be cached.
-     *
-     * @return true if a SecurityManger is installed, false otherwise.
-     */
-    private static boolean hasSecurityManager() {
-        return (System.getSecurityManager() != null);
-    }
-
-
-    static void checkRecordPermission() throws SecurityException {
-        if(Printer.trace) Printer.trace("JSSecurityManager.checkRecordPermission()");
-        SecurityManager sm = System.getSecurityManager();
-        if (sm != null) {
-            sm.checkPermission(new AudioPermission("record"));
-        }
-    }
-
-    static String getProperty(final String propertyName) {
-        String propertyValue;
-        if (hasSecurityManager()) {
-            if(Printer.debug) Printer.debug("using JDK 1.2 security to get property");
-            try{
-                PrivilegedAction action = new PrivilegedAction() {
-                        public Object run() {
-                            try {
-                                return System.getProperty(propertyName);
-                            } catch (Throwable t) {
-                                return null;
-                            }
-                        }
-                    };
-                propertyValue = (String) AccessController.doPrivileged(action);
-            } catch( Exception e ) {
-                if(Printer.debug) Printer.debug("not using JDK 1.2 security to get properties");
-                propertyValue = System.getProperty(propertyName);
-            }
-        } else {
-            if(Printer.debug) Printer.debug("not using JDK 1.2 security to get properties");
-            propertyValue = System.getProperty(propertyName);
-        }
-        return propertyValue;
-    }
-
-
-    /** Load properties from a file.
-        This method tries to load properties from the filename give into
-        the passed properties object.
-        If the file cannot be found or something else goes wrong,
-        the method silently fails.
-        @param properties The properties bundle to store the values of the
-        properties file.
-        @param filename The filename of the properties file to load. This
-        filename is interpreted as relative to the subdirectory "lib" in
-        the JRE directory.
-     */
-    static void loadProperties(final Properties properties,
-                               final String filename) {
-        if(hasSecurityManager()) {
-            try {
-                // invoke the privileged action using 1.2 security
-                PrivilegedAction action = new PrivilegedAction() {
-                        public Object run() {
-                            loadPropertiesImpl(properties, filename);
-                            return null;
-                        }
-                    };
-                AccessController.doPrivileged(action);
-                if(Printer.debug)Printer.debug("Loaded properties with JDK 1.2 security");
-            } catch (Exception e) {
-                if(Printer.debug)Printer.debug("Exception loading properties with JDK 1.2 security");
-                // try without using JDK 1.2 security
-                loadPropertiesImpl(properties, filename);
-            }
-        } else {
-            // not JDK 1.2 security, assume we already have permission
-            loadPropertiesImpl(properties, filename);
-        }
-    }
-
-
-    private static void loadPropertiesImpl(Properties properties,
-                                           String filename) {
-        if(Printer.trace)Printer.trace(">> JSSecurityManager: loadPropertiesImpl()");
-        String fname = System.getProperty("java.home");
-        try {
-            if (fname == null) {
-                throw new Error("Can't find java.home ??");
-            }
-            File f = new File(fname, "lib");
-            f = new File(f, filename);
-            fname = f.getCanonicalPath();
-            InputStream in = new FileInputStream(fname);
-            BufferedInputStream bin = new BufferedInputStream(in);
-            try {
-                properties.load(bin);
-            } finally {
-                if (in != null) {
-                    in.close();
-                }
-            }
-        } catch (Throwable t) {
-            if (Printer.trace) {
-                System.err.println("Could not load properties file \"" + fname + "\"");
-                t.printStackTrace();
-            }
-        }
-        if(Printer.trace)Printer.trace("<< JSSecurityManager: loadPropertiesImpl() completed");
-    }
-
-    /** Create a Thread in the current ThreadGroup.
-     */
-    static Thread createThread(final Runnable runnable,
-                               final String threadName,
-                               final boolean isDaemon, final int priority,
-                               final boolean doStart) {
-        Thread thread = new Thread(runnable);
-        if (threadName != null) {
-            thread.setName(threadName);
-        }
-        thread.setDaemon(isDaemon);
-        if (priority >= 0) {
-            thread.setPriority(priority);
-        }
-        if (doStart) {
-            thread.start();
-        }
-        return thread;
-    }
-
-    static List getProviders(final Class providerClass) {
-        List p = new ArrayList();
-        // Service.providers(Class) just creates "lazy" iterator instance,
-        // so it doesn't require do be called from privileged section
-        final Iterator ps = Service.providers(providerClass);
-
-        // the iterator's hasNext() method looks through classpath for
-        // the provider class names, so it requires read permissions
-        PrivilegedAction<Boolean> hasNextAction = new PrivilegedAction<Boolean>() {
-            public Boolean run() {
-                return ps.hasNext();
-            }
-        };
-
-        while (AccessController.doPrivileged(hasNextAction)) {
-            try {
-                // the iterator's next() method creates instances of the
-                // providers and it should be called in the current security
-                // context
-                Object provider = ps.next();
-                if (providerClass.isInstance(provider)) {
-                    // $$mp 2003-08-22
-                    // Always adding at the beginning reverses the
-                    // order of the providers. So we no longer have
-                    // to do this in AudioSystem and MidiSystem.
-                    p.add(0, provider);
-                }
-            } catch (Throwable t) {
-                //$$fb 2002-11-07: do not fail on SPI not found
-                if (Printer.err) t.printStackTrace();
-            }
-        }
-        return p;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/JavaSoundAudioClip.java b/ojluni/src/main/java/com/sun/media/sound/JavaSoundAudioClip.java
deleted file mode 100755
index 0b2d9a3..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/JavaSoundAudioClip.java
+++ /dev/null
@@ -1,483 +0,0 @@
-/*
- * Copyright (c) 1999, 2013, 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.media.sound;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.BufferedInputStream;
-import java.io.ByteArrayOutputStream;
-import java.applet.AudioClip;
-
-import javax.sound.sampled.AudioSystem;
-import javax.sound.sampled.Clip;
-import javax.sound.sampled.AudioInputStream;
-import javax.sound.sampled.AudioFormat;
-import javax.sound.sampled.DataLine;
-import javax.sound.sampled.SourceDataLine;
-import javax.sound.sampled.LineEvent;
-import javax.sound.sampled.LineListener;
-import javax.sound.sampled.UnsupportedAudioFileException;
-
-import javax.sound.midi.MidiSystem;
-import javax.sound.midi.MidiFileFormat;
-import javax.sound.midi.MetaMessage;
-import javax.sound.midi.Sequence;
-import javax.sound.midi.Sequencer;
-import javax.sound.midi.InvalidMidiDataException;
-import javax.sound.midi.MidiUnavailableException;
-import javax.sound.midi.MetaEventListener;
-
-/**
- * Java Sound audio clip;
- *
- * @author Arthur van Hoff, Kara Kytle, Jan Borgersen
- * @author Florian Bomers
- */
-
-public final class JavaSoundAudioClip implements AudioClip, MetaEventListener, LineListener {
-
-    private static final boolean DEBUG = false;
-    private static final int BUFFER_SIZE = 16384; // number of bytes written each time to the source data line
-
-    private long lastPlayCall = 0;
-    private static final int MINIMUM_PLAY_DELAY = 30;
-
-    private byte loadedAudio[] = null;
-    private int loadedAudioByteLength = 0;
-    private AudioFormat loadedAudioFormat = null;
-
-    private AutoClosingClip clip = null;
-    private boolean clipLooping = false;
-
-    private DataPusher datapusher = null;
-
-    private Sequencer sequencer = null;
-    private Sequence sequence = null;
-    private boolean sequencerloop = false;
-
-    /**
-     * used for determining how many samples is the
-     * threshhold between playing as a Clip and streaming
-     * from the file.
-     *
-     * $$jb: 11.07.99: the engine has a limit of 1M
-     * samples to play as a Clip, so compare this number
-     * with the number of samples in the stream.
-     *
-     */
-    private final static long CLIP_THRESHOLD = 1048576;
-    //private final static long CLIP_THRESHOLD = 1;
-    private final static int STREAM_BUFFER_SIZE = 1024;
-
-    public JavaSoundAudioClip(InputStream in) throws IOException {
-        if (DEBUG || Printer.debug)Printer.debug("JavaSoundAudioClip.<init>");
-
-        BufferedInputStream bis = new BufferedInputStream(in, STREAM_BUFFER_SIZE);
-        bis.mark(STREAM_BUFFER_SIZE);
-        boolean success = false;
-        try {
-            AudioInputStream as = AudioSystem.getAudioInputStream(bis);
-            // load the stream data into memory
-            success = loadAudioData(as);
-
-            if (success) {
-                success = false;
-                if (loadedAudioByteLength < CLIP_THRESHOLD) {
-                    success = createClip();
-                }
-                if (!success) {
-                    success = createSourceDataLine();
-                }
-            }
-        } catch (UnsupportedAudioFileException e) {
-            // not an audio file
-            try {
-                MidiFileFormat mff = MidiSystem.getMidiFileFormat(bis);
-                success = createSequencer(bis);
-            } catch (InvalidMidiDataException e1) {
-                success = false;
-            }
-        }
-        if (!success) {
-            throw new IOException("Unable to create AudioClip from input stream");
-        }
-    }
-
-
-    public synchronized void play() {
-        startImpl(false);
-    }
-
-
-    public synchronized void loop() {
-        startImpl(true);
-    }
-
-    private synchronized void startImpl(boolean loop) {
-        // hack for some applets that call the start method very rapidly...
-        long currentTime = System.currentTimeMillis();
-        long diff = currentTime - lastPlayCall;
-        if (diff < MINIMUM_PLAY_DELAY) {
-            if (DEBUG || Printer.debug) Printer.debug("JavaSoundAudioClip.startImpl(loop="+loop+"): abort - too rapdly");
-            return;
-        }
-        lastPlayCall = currentTime;
-
-        if (DEBUG || Printer.debug) Printer.debug("JavaSoundAudioClip.startImpl(loop="+loop+")");
-        try {
-            if (clip != null) {
-                if (!clip.isOpen()) {
-                    if (DEBUG || Printer.trace)Printer.trace("JavaSoundAudioClip: clip.open()");
-                    clip.open(loadedAudioFormat, loadedAudio, 0, loadedAudioByteLength);
-                } else {
-                    if (DEBUG || Printer.trace)Printer.trace("JavaSoundAudioClip: clip.flush()");
-                    clip.flush();
-                    if (loop != clipLooping) {
-                        // need to stop in case the looped status changed
-                        if (DEBUG || Printer.trace)Printer.trace("JavaSoundAudioClip: clip.stop()");
-                        clip.stop();
-                    }
-                }
-                clip.setFramePosition(0);
-                if (loop) {
-                    if (DEBUG || Printer.trace)Printer.trace("JavaSoundAudioClip: clip.loop()");
-                    clip.loop(Clip.LOOP_CONTINUOUSLY);
-                } else {
-                    if (DEBUG || Printer.trace)Printer.trace("JavaSoundAudioClip: clip.start()");
-                    clip.start();
-                }
-                clipLooping = loop;
-                if (DEBUG || Printer.debug)Printer.debug("Clip should be playing/looping");
-
-            } else if (datapusher != null ) {
-                datapusher.start(loop);
-                if (DEBUG || Printer.debug)Printer.debug("Stream should be playing/looping");
-
-            } else if (sequencer != null) {
-                sequencerloop = loop;
-                if (sequencer.isRunning()) {
-                    sequencer.setMicrosecondPosition(0);
-                }
-                if (!sequencer.isOpen()) {
-                    try {
-                        sequencer.open();
-                        sequencer.setSequence(sequence);
-
-                    } catch (InvalidMidiDataException e1) {
-                        if (DEBUG || Printer.err)e1.printStackTrace();
-                    } catch (MidiUnavailableException e2) {
-                        if (DEBUG || Printer.err)e2.printStackTrace();
-                    }
-                }
-                sequencer.addMetaEventListener(this);
-                try {
-                    sequencer.start();
-                } catch (Exception e) {
-                    if (DEBUG || Printer.err) e.printStackTrace();
-                }
-                if (DEBUG || Printer.debug)Printer.debug("Sequencer should be playing/looping");
-            }
-        } catch (Exception e) {
-            if (DEBUG || Printer.err)e.printStackTrace();
-        }
-    }
-
-    public synchronized void stop() {
-
-        if (DEBUG || Printer.debug)Printer.debug("JavaSoundAudioClip->stop()");
-        lastPlayCall = 0;
-
-        if (clip != null) {
-            try {
-                if (DEBUG || Printer.trace)Printer.trace("JavaSoundAudioClip: clip.flush()");
-                clip.flush();
-            } catch (Exception e1) {
-                if (Printer.err) e1.printStackTrace();
-            }
-            try {
-                if (DEBUG || Printer.trace)Printer.trace("JavaSoundAudioClip: clip.stop()");
-                clip.stop();
-            } catch (Exception e2) {
-                if (Printer.err) e2.printStackTrace();
-            }
-            if (DEBUG || Printer.debug)Printer.debug("Clip should be stopped");
-
-        } else if (datapusher != null) {
-            datapusher.stop();
-            if (DEBUG || Printer.debug)Printer.debug("Stream should be stopped");
-
-        } else if (sequencer != null) {
-            try {
-                sequencerloop = false;
-                sequencer.addMetaEventListener(this);
-                sequencer.stop();
-            } catch (Exception e3) {
-                if (Printer.err) e3.printStackTrace();
-            }
-            try {
-                sequencer.close();
-            } catch (Exception e4) {
-                if (Printer.err) e4.printStackTrace();
-            }
-            if (DEBUG || Printer.debug)Printer.debug("Sequencer should be stopped");
-        }
-    }
-
-    // Event handlers (for debugging)
-
-    public synchronized void update(LineEvent event) {
-        if (DEBUG || Printer.debug) Printer.debug("line event received: "+event);
-    }
-
-    // handle MIDI track end meta events for looping
-
-    public synchronized void meta( MetaMessage message ) {
-
-        if (DEBUG || Printer.debug)Printer.debug("META EVENT RECEIVED!!!!! ");
-
-        if( message.getType() == 47 ) {
-            if (sequencerloop){
-                //notifyAll();
-                sequencer.setMicrosecondPosition(0);
-                loop();
-            } else {
-                stop();
-            }
-        }
-    }
-
-
-    public String toString() {
-        return getClass().toString();
-    }
-
-
-    protected void finalize() {
-
-        if (clip != null) {
-            if (DEBUG || Printer.trace)Printer.trace("JavaSoundAudioClip.finalize: clip.close()");
-            clip.close();
-        }
-
-        //$$fb 2001-09-26: may improve situation related to bug #4302884
-        if (datapusher != null) {
-            datapusher.close();
-        }
-
-        if (sequencer != null) {
-            sequencer.close();
-        }
-    }
-
-    // FILE LOADING METHODS
-
-    private boolean loadAudioData(AudioInputStream as)  throws IOException, UnsupportedAudioFileException {
-        if (DEBUG || Printer.debug)Printer.debug("JavaSoundAudioClip->openAsClip()");
-
-        // first possibly convert this stream to PCM
-        as = Toolkit.getPCMConvertedAudioInputStream(as);
-        if (as == null) {
-            return false;
-        }
-
-        loadedAudioFormat = as.getFormat();
-        long frameLen = as.getFrameLength();
-        int frameSize = loadedAudioFormat.getFrameSize();
-        long byteLen = AudioSystem.NOT_SPECIFIED;
-        if (frameLen != AudioSystem.NOT_SPECIFIED
-            && frameLen > 0
-            && frameSize != AudioSystem.NOT_SPECIFIED
-            && frameSize > 0) {
-            byteLen = frameLen * frameSize;
-        }
-        if (byteLen != AudioSystem.NOT_SPECIFIED) {
-            // if the stream length is known, it can be efficiently loaded into memory
-            readStream(as, byteLen);
-        } else {
-            // otherwise we use a ByteArrayOutputStream to load it into memory
-            readStream(as);
-        }
-
-        // if everything went fine, we have now the audio data in
-        // loadedAudio, and the byte length in loadedAudioByteLength
-        return true;
-    }
-
-
-
-    private void readStream(AudioInputStream as, long byteLen) throws IOException {
-        // arrays "only" max. 2GB
-        int intLen;
-        if (byteLen > 2147483647) {
-            intLen = 2147483647;
-        } else {
-            intLen = (int) byteLen;
-        }
-        loadedAudio = new byte[intLen];
-        loadedAudioByteLength = 0;
-
-        // this loop may throw an IOException
-        while (true) {
-            int bytesRead = as.read(loadedAudio, loadedAudioByteLength, intLen - loadedAudioByteLength);
-            if (bytesRead <= 0) {
-                as.close();
-                break;
-            }
-            loadedAudioByteLength += bytesRead;
-        }
-    }
-
-    private void readStream(AudioInputStream as) throws IOException {
-
-        DirectBAOS baos = new DirectBAOS();
-        byte buffer[] = new byte[16384];
-        int bytesRead = 0;
-        int totalBytesRead = 0;
-
-        // this loop may throw an IOException
-        while( true ) {
-            bytesRead = as.read(buffer, 0, buffer.length);
-            if (bytesRead <= 0) {
-                as.close();
-                break;
-            }
-            totalBytesRead += bytesRead;
-            baos.write(buffer, 0, bytesRead);
-        }
-        loadedAudio = baos.getInternalBuffer();
-        loadedAudioByteLength = totalBytesRead;
-    }
-
-
-    // METHODS FOR CREATING THE DEVICE
-
-    private boolean createClip() {
-
-        if (DEBUG || Printer.debug)Printer.debug("JavaSoundAudioClip.createClip()");
-
-        try {
-            DataLine.Info info = new DataLine.Info(Clip.class, loadedAudioFormat);
-            if (!(AudioSystem.isLineSupported(info)) ) {
-                if (DEBUG || Printer.err)Printer.err("Clip not supported: "+loadedAudioFormat);
-                // fail silently
-                return false;
-            }
-            Object line = AudioSystem.getLine(info);
-            if (!(line instanceof AutoClosingClip)) {
-                if (DEBUG || Printer.err)Printer.err("Clip is not auto closing!"+clip);
-                // fail -> will try with SourceDataLine
-                return false;
-            }
-            clip = (AutoClosingClip) line;
-            clip.setAutoClosing(true);
-            if (DEBUG || Printer.debug) clip.addLineListener(this);
-        } catch (Exception e) {
-            if (DEBUG || Printer.err)e.printStackTrace();
-            // fail silently
-            return false;
-        }
-
-        if (clip==null) {
-            // fail silently
-            return false;
-        }
-
-        if (DEBUG || Printer.debug)Printer.debug("Loaded clip.");
-        return true;
-    }
-
-    private boolean createSourceDataLine() {
-        if (DEBUG || Printer.debug)Printer.debug("JavaSoundAudioClip.createSourceDataLine()");
-        try {
-            DataLine.Info info = new DataLine.Info(SourceDataLine.class, loadedAudioFormat);
-            if (!(AudioSystem.isLineSupported(info)) ) {
-                if (DEBUG || Printer.err)Printer.err("Line not supported: "+loadedAudioFormat);
-                // fail silently
-                return false;
-            }
-            SourceDataLine source = (SourceDataLine) AudioSystem.getLine(info);
-            datapusher = new DataPusher(source, loadedAudioFormat, loadedAudio, loadedAudioByteLength);
-        } catch (Exception e) {
-            if (DEBUG || Printer.err)e.printStackTrace();
-            // fail silently
-            return false;
-        }
-
-        if (datapusher==null) {
-            // fail silently
-            return false;
-        }
-
-        if (DEBUG || Printer.debug)Printer.debug("Created SourceDataLine.");
-        return true;
-    }
-
-    private boolean createSequencer(BufferedInputStream in) throws IOException {
-
-        if (DEBUG || Printer.debug)Printer.debug("JavaSoundAudioClip.createSequencer()");
-
-        // get the sequencer
-        try {
-            sequencer = MidiSystem.getSequencer( );
-        } catch(MidiUnavailableException me) {
-            if (DEBUG || Printer.err)me.printStackTrace();
-            return false;
-        }
-        if (sequencer==null) {
-            return false;
-        }
-
-        try {
-            sequence = MidiSystem.getSequence(in);
-            if (sequence == null) {
-                return false;
-            }
-        } catch (InvalidMidiDataException e) {
-            if (DEBUG || Printer.err)e.printStackTrace();
-            return false;
-        }
-
-        if (DEBUG || Printer.debug)Printer.debug("Created Sequencer.");
-        return true;
-    }
-
-
-    /*
-     * private inner class representing a ByteArrayOutputStream
-     * which allows retrieval of the internal array
-     */
-    private static class DirectBAOS extends ByteArrayOutputStream {
-        DirectBAOS() {
-            super();
-        }
-
-        public byte[] getInternalBuffer() {
-            return buf;
-        }
-
-    } // class DirectBAOS
-
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/MidiDeviceReceiverEnvelope.java b/ojluni/src/main/java/com/sun/media/sound/MidiDeviceReceiverEnvelope.java
deleted file mode 100755
index fb20020..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/MidiDeviceReceiverEnvelope.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Copyright (c) 2010, 2013, 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.media.sound;
-
-import javax.sound.midi.*;
-
-
-/**
- * Helper class which allows to convert {@code Receiver}
- * to {@code MidiDeviceReceiver}.
- *
- * @author Alex Menkov
- */
-public final class MidiDeviceReceiverEnvelope implements MidiDeviceReceiver {
-
-    private final MidiDevice device;
-    private final Receiver receiver;
-
-    /**
-     * Creates a new {@code MidiDeviceReceiverEnvelope} object which
-     * envelops the specified {@code Receiver}
-     * and is owned by the specified {@code MidiDevice}.
-     *
-     * @param device the owner {@code MidiDevice}
-     * @param receiver the {@code Receiver} to be enveloped
-     */
-    public MidiDeviceReceiverEnvelope(MidiDevice device, Receiver receiver) {
-        if (device == null || receiver == null) {
-            throw new NullPointerException();
-        }
-        this.device = device;
-        this.receiver = receiver;
-    }
-
-    // Receiver implementation
-    public void close() {
-        receiver.close();
-    }
-
-    public void send(MidiMessage message, long timeStamp) {
-        receiver.send(message, timeStamp);
-    }
-
-    // MidiDeviceReceiver implementation
-    public MidiDevice getMidiDevice() {
-        return device;
-    }
-
-    /**
-     * Obtains the receiver enveloped
-     * by this {@code MidiDeviceReceiverEnvelope} object.
-     *
-     * @return the enveloped receiver
-     */
-    public Receiver getReceiver() {
-        return receiver;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/MidiDeviceTransmitterEnvelope.java b/ojluni/src/main/java/com/sun/media/sound/MidiDeviceTransmitterEnvelope.java
deleted file mode 100755
index eca630a..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/MidiDeviceTransmitterEnvelope.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Copyright (c) 2010, 2013, 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.media.sound;
-
-import javax.sound.midi.*;
-
-
-/**
- * Helper class which allows to convert {@code Transmitter}
- * to {@code MidiDeviceTransmitter}.
- *
- * @author Alex Menkov
- */
-public final class MidiDeviceTransmitterEnvelope implements MidiDeviceTransmitter {
-
-    private final MidiDevice device;
-    private final Transmitter transmitter;
-
-    /**
-     * Creates a new {@code MidiDeviceTransmitterEnvelope} object which
-     * envelops the specified {@code Transmitter}
-     * and is owned by the specified {@code MidiDevice}.
-     *
-     * @param device the owner {@code MidiDevice}
-     * @param transmitter the {@code Transmitter} to be enveloped
-     */
-    public MidiDeviceTransmitterEnvelope(MidiDevice device, Transmitter transmitter) {
-        if (device == null || transmitter == null) {
-            throw new NullPointerException();
-        }
-        this.device = device;
-        this.transmitter = transmitter;
-    }
-
-    // Transmitter implementation
-    public void setReceiver(Receiver receiver) {
-        transmitter.setReceiver(receiver);
-    }
-
-    public Receiver getReceiver() {
-        return transmitter.getReceiver();
-    }
-
-    public void close() {
-        transmitter.close();
-    }
-
-
-    // MidiDeviceReceiver implementation
-    public MidiDevice getMidiDevice() {
-        return device;
-    }
-
-    /**
-     * Obtains the transmitter enveloped
-     * by this {@code MidiDeviceTransmitterEnvelope} object.
-     *
-     * @return the enveloped transmitter
-     */
-    public Transmitter getTransmitter() {
-        return transmitter;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/MidiInDevice.java b/ojluni/src/main/java/com/sun/media/sound/MidiInDevice.java
deleted file mode 100755
index 373870f..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/MidiInDevice.java
+++ /dev/null
@@ -1,195 +0,0 @@
-/*
- * Copyright (c) 1999, 2013, 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.media.sound;
-
-import javax.sound.midi.*;
-
-
-
-/**
- * MidiInDevice class representing functionality of MidiIn devices.
- *
- * @author David Rivas
- * @author Kara Kytle
- * @author Florian Bomers
- */
-final class MidiInDevice extends AbstractMidiDevice implements Runnable {
-
-    private Thread midiInThread = null;
-
-    // CONSTRUCTOR
-
-    MidiInDevice(AbstractMidiDeviceProvider.Info info) {
-        super(info);
-        if(Printer.trace) Printer.trace("MidiInDevice CONSTRUCTOR");
-    }
-
-
-    // IMPLEMENTATION OF ABSTRACT MIDI DEVICE METHODS
-
-    // $$kk: 06.24.99: i have this both opening and starting the midi in device.
-    // may want to separate these??
-    protected synchronized void implOpen() throws MidiUnavailableException {
-        if (Printer.trace) Printer.trace("> MidiInDevice: implOpen()");
-
-        int index = ((MidiInDeviceProvider.MidiInDeviceInfo)getDeviceInfo()).getIndex();
-        id = nOpen(index); // can throw MidiUnavailableException
-
-        if (id == 0) {
-            throw new MidiUnavailableException("Unable to open native device");
-        }
-
-        // create / start a thread to get messages
-        if (midiInThread == null) {
-            midiInThread = JSSecurityManager.createThread(this,
-                                                    "Java Sound MidiInDevice Thread",   // name
-                                                    false,  // daemon
-                                                    -1,    // priority
-                                                    true); // doStart
-        }
-
-        nStart(id); // can throw MidiUnavailableException
-        if (Printer.trace) Printer.trace("< MidiInDevice: implOpen() completed");
-    }
-
-
-    // $$kk: 06.24.99: i have this both stopping and closing the midi in device.
-    // may want to separate these??
-    protected synchronized void implClose() {
-        if (Printer.trace) Printer.trace("> MidiInDevice: implClose()");
-        long oldId = id;
-        id = 0;
-
-        super.implClose();
-
-        // close the device
-        nStop(oldId);
-        if (midiInThread != null) {
-            try {
-                midiInThread.join(1000);
-            } catch (InterruptedException e) {
-                // IGNORE EXCEPTION
-            }
-        }
-        nClose(oldId);
-        if (Printer.trace) Printer.trace("< MidiInDevice: implClose() completed");
-    }
-
-
-    public long getMicrosecondPosition() {
-        long timestamp = -1;
-        if (isOpen()) {
-            timestamp = nGetTimeStamp(id);
-        }
-        return timestamp;
-    }
-
-
-    // OVERRIDES OF ABSTRACT MIDI DEVICE METHODS
-
-
-    protected boolean hasTransmitters() {
-        return true;
-    }
-
-
-    protected Transmitter createTransmitter() {
-        return new MidiInTransmitter();
-    }
-
-    /**
-      * An own class to distinguish the class name from
-      * the transmitter of other devices
-      */
-    private final class MidiInTransmitter extends BasicTransmitter {
-        private MidiInTransmitter() {
-            super();
-        }
-    }
-
-    // RUNNABLE METHOD
-
-    public void run() {
-        // while the device is started, keep trying to get messages.
-        // this thread returns from native code whenever stop() or close() is called
-        while (id!=0) {
-            // go into native code and retrieve messages
-            nGetMessages(id);
-            if (id!=0) {
-                try {
-                    Thread.sleep(1);
-                } catch (InterruptedException e) {}
-            }
-        }
-        if(Printer.verbose) Printer.verbose("MidiInDevice Thread exit");
-        // let the thread exit
-        midiInThread = null;
-    }
-
-
-    // CALLBACKS FROM NATIVE
-
-    /**
-     * Callback from native code when a short MIDI event is received from hardware.
-     * @param packedMsg: status | data1 << 8 | data2 << 8
-     * @param timeStamp time-stamp in microseconds
-     */
-    void callbackShortMessage(int packedMsg, long timeStamp) {
-        if (packedMsg == 0 || id == 0) {
-            return;
-        }
-
-        /*if(Printer.verbose) {
-          int status = packedMsg & 0xFF;
-          int data1 = (packedMsg & 0xFF00)>>8;
-          int data2 = (packedMsg & 0xFF0000)>>16;
-          Printer.verbose(">> MidiInDevice callbackShortMessage: status: " + status + " data1: " + data1 + " data2: " + data2 + " timeStamp: " + timeStamp);
-          }*/
-
-        getTransmitterList().sendMessage(packedMsg, timeStamp);
-    }
-
-    void callbackLongMessage(byte[] data, long timeStamp) {
-        if (id == 0 || data == null) {
-            return;
-        }
-        getTransmitterList().sendMessage(data, timeStamp);
-    }
-
-    // NATIVE METHODS
-
-    private native long nOpen(int index) throws MidiUnavailableException;
-    private native void nClose(long id);
-
-    private native void nStart(long id) throws MidiUnavailableException;
-    private native void nStop(long id);
-    private native long nGetTimeStamp(long id);
-
-    // go into native code and get messages. May be blocking
-    private native void nGetMessages(long id);
-
-
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/MidiInDeviceProvider.java b/ojluni/src/main/java/com/sun/media/sound/MidiInDeviceProvider.java
deleted file mode 100755
index e15616f..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/MidiInDeviceProvider.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * Copyright (c) 1999, 2013, 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.media.sound;
-
-import javax.sound.midi.MidiDevice;
-
-
-/**
- * MIDI input device provider.
- *
- * @author Kara Kytle
- * @author Florian Bomers
- */
-public final class MidiInDeviceProvider extends AbstractMidiDeviceProvider {
-
-    /** Cache of info objects for all MIDI output devices on the system. */
-    private static Info[] infos = null;
-
-    /** Cache of open MIDI input devices on the system. */
-    private static MidiDevice[] devices = null;
-
-    private static final boolean enabled;
-
-    // STATIC
-
-    static {
-        // initialize
-        Platform.initialize();
-        enabled = Platform.isMidiIOEnabled();
-    }
-
-    // CONSTRUCTOR
-
-    /**
-     * Required public no-arg constructor.
-     */
-    public MidiInDeviceProvider() {
-        if (Printer.trace) Printer.trace("MidiInDeviceProvider: constructor");
-    }
-
-    // implementation of abstract methods in AbstractMidiDeviceProvider
-
-    AbstractMidiDeviceProvider.Info createInfo(int index) {
-        if (!enabled) {
-            return null;
-        }
-        return new MidiInDeviceInfo(index, MidiInDeviceProvider.class);
-    }
-
-    MidiDevice createDevice(AbstractMidiDeviceProvider.Info info) {
-        if (enabled && (info instanceof MidiInDeviceInfo)) {
-            return new MidiInDevice(info);
-        }
-        return null;
-    }
-
-    int getNumDevices() {
-        if (!enabled) {
-            if (Printer.debug)Printer.debug("MidiInDevice not enabled, returning 0 devices");
-            return 0;
-        }
-        int numDevices = nGetNumDevices();
-        if (Printer.debug)Printer.debug("MidiInDeviceProvider.getNumDevices(): devices: " + numDevices);
-        return numDevices;
-    }
-
-    MidiDevice[] getDeviceCache() { return devices; }
-    void setDeviceCache(MidiDevice[] devices) { this.devices = devices; }
-    Info[] getInfoCache() { return infos; }
-    void setInfoCache(Info[] infos) { this.infos = infos; }
-
-
-    // INNER CLASSES
-
-    /**
-     * Info class for MidiInDevices.  Adds the
-     * provider's Class to keep the provider class from being
-     * unloaded.  Otherwise, at least on JDK1.1.7 and 1.1.8,
-     * the provider class can be unloaded.  Then, then the provider
-     * is next invoked, the static block is executed again and a new
-     * instance of the device object is created.  Even though the
-     * previous instance may still exist and be open / in use / etc.,
-     * the new instance will not reflect that state...
-     */
-    static final class MidiInDeviceInfo extends AbstractMidiDeviceProvider.Info {
-        private final Class providerClass;
-
-        private MidiInDeviceInfo(int index, Class providerClass) {
-            super(nGetName(index), nGetVendor(index), nGetDescription(index), nGetVersion(index), index);
-            this.providerClass = providerClass;
-        }
-
-    } // class MidiInDeviceInfo
-
-
-    // NATIVE METHODS
-
-    private static native int nGetNumDevices();
-    private static native String nGetName(int index);
-    private static native String nGetVendor(int index);
-    private static native String nGetDescription(int index);
-    private static native String nGetVersion(int index);
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/MidiOutDevice.java b/ojluni/src/main/java/com/sun/media/sound/MidiOutDevice.java
deleted file mode 100755
index 4559c9b..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/MidiOutDevice.java
+++ /dev/null
@@ -1,176 +0,0 @@
-/*
- * Copyright (c) 1999, 2013, 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.media.sound;
-
-import javax.sound.midi.*;
-
-
-
-/**
- * MidiOutDevice class representing functionality of MidiOut devices.
- *
- * @author David Rivas
- * @author Kara Kytle
- * @author Florian Bomers
- */
-final class MidiOutDevice extends AbstractMidiDevice {
-
-    // CONSTRUCTOR
-
-    MidiOutDevice(AbstractMidiDeviceProvider.Info info) {
-                super(info);
-                if(Printer.trace) Printer.trace("MidiOutDevice CONSTRUCTOR");
-    }
-
-
-    // IMPLEMENTATION OF ABSTRACT MIDI DEVICE METHODS
-
-    protected synchronized void implOpen() throws MidiUnavailableException {
-        if (Printer.trace) Printer.trace("> MidiOutDevice: implOpen()");
-        int index = ((AbstractMidiDeviceProvider.Info)getDeviceInfo()).getIndex();
-        id = nOpen(index); // can throw MidiUnavailableException
-        if (id == 0) {
-            throw new MidiUnavailableException("Unable to open native device");
-        }
-        if (Printer.trace) Printer.trace("< MidiOutDevice: implOpen(): completed.");
-    }
-
-
-    protected synchronized void implClose() {
-        if (Printer.trace) Printer.trace("> MidiOutDevice: implClose()");
-        // prevent further action
-        long oldId = id;
-        id = 0;
-
-        super.implClose();
-
-        // close the device
-        nClose(oldId);
-        if (Printer.trace) Printer.trace("< MidiOutDevice: implClose(): completed");
-    }
-
-
-    public long getMicrosecondPosition() {
-        long timestamp = -1;
-        if (isOpen()) {
-            timestamp = nGetTimeStamp(id);
-        }
-        return timestamp;
-    }
-
-
-
-    // OVERRIDES OF ABSTRACT MIDI DEVICE METHODS
-
-    /** Returns if this device supports Receivers.
-        This implementation always returns true.
-        @return true, if the device supports Receivers, false otherwise.
-    */
-    protected boolean hasReceivers() {
-        return true;
-    }
-
-
-    protected Receiver createReceiver() {
-        return new MidiOutReceiver();
-    }
-
-
-    // INNER CLASSES
-
-    final class MidiOutReceiver extends AbstractReceiver {
-
-        void implSend(final MidiMessage message, final long timeStamp) {
-            final int length = message.getLength();
-            final int status = message.getStatus();
-            if (length <= 3 && status != 0xF0 && status != 0xF7) {
-                int packedMsg;
-                if (message instanceof ShortMessage) {
-                    if (message instanceof FastShortMessage) {
-                        packedMsg = ((FastShortMessage) message).getPackedMsg();
-                    } else {
-                        ShortMessage msg = (ShortMessage) message;
-                        packedMsg = (status & 0xFF)
-                            | ((msg.getData1() & 0xFF) << 8)
-                            | ((msg.getData2() & 0xFF) << 16);
-                    }
-                } else {
-                    packedMsg = 0;
-                    byte[] data = message.getMessage();
-                    if (length>0) {
-                        packedMsg = data[0] & 0xFF;
-                        if (length>1) {
-                            /* We handle meta messages here. The message
-                               system reset (FF) doesn't get until here,
-                               because it's length is only 1. So if we see
-                               a status byte of FF, it's sure that we
-                               have a Meta message. */
-                            if (status == 0xFF) {
-                                return;
-                            }
-                            packedMsg |= (data[1] & 0xFF) << 8;
-                            if (length>2) {
-                                packedMsg |= (data[2] & 0xFF) << 16;
-                            }
-                        }
-                    }
-                }
-                nSendShortMessage(id, packedMsg, timeStamp);
-            } else {
-                final byte[] data;
-                if (message instanceof FastSysexMessage) {
-                    data = ((FastSysexMessage) message).getReadOnlyMessage();
-                } else {
-                    data = message.getMessage();
-                }
-                final int dataLength = Math.min(length, data.length);
-                if (dataLength > 0) {
-                    nSendLongMessage(id, data, dataLength, timeStamp);
-                }
-            }
-        }
-
-        /** shortcut for the Sun implementation */
-        synchronized void sendPackedMidiMessage(int packedMsg, long timeStamp) {
-            if (isOpen() && id != 0) {
-                nSendShortMessage(id, packedMsg, timeStamp);
-            }
-        }
-
-
-    } // class MidiOutReceiver
-
-
-    // NATIVE METHODS
-
-    private native long nOpen(int index) throws MidiUnavailableException;
-    private native void nClose(long id);
-
-    private native void nSendShortMessage(long id, int packedMsg, long timeStamp);
-    private native void nSendLongMessage(long id, byte[] data, int size, long timeStamp);
-    private native long nGetTimeStamp(long id);
-
-} // class MidiOutDevice
diff --git a/ojluni/src/main/java/com/sun/media/sound/MidiOutDeviceProvider.java b/ojluni/src/main/java/com/sun/media/sound/MidiOutDeviceProvider.java
deleted file mode 100755
index ebe2880..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/MidiOutDeviceProvider.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * Copyright (c) 1999, 2013, 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.media.sound;
-
-import javax.sound.midi.MidiDevice;
-
-
-/**
- * MIDI output device provider.
- *
- * @author Kara Kytle
- * @author Florian Bomers
- */
-public final class MidiOutDeviceProvider extends AbstractMidiDeviceProvider {
-
-    /** Cache of info objects for all MIDI output devices on the system. */
-    private static Info[] infos = null;
-
-    /** Cache of open MIDI output devices on the system. */
-    private static MidiDevice[] devices = null;
-
-    private final static boolean enabled;
-
-    // STATIC
-
-    static {
-        // initialize
-        Platform.initialize();
-        enabled = Platform.isMidiIOEnabled();
-    }
-
-    // CONSTRUCTOR
-
-    /**
-     * Required public no-arg constructor.
-     */
-    public MidiOutDeviceProvider() {
-        if (Printer.trace) Printer.trace("MidiOutDeviceProvider: constructor");
-    }
-
-    // implementation of abstract methods in AbstractMidiDeviceProvider
-
-    AbstractMidiDeviceProvider.Info createInfo(int index) {
-        if (!enabled) {
-            return null;
-        }
-        return new MidiOutDeviceInfo(index, MidiOutDeviceProvider.class);
-    }
-
-    MidiDevice createDevice(AbstractMidiDeviceProvider.Info info) {
-        if (enabled && (info instanceof MidiOutDeviceInfo)) {
-            return new MidiOutDevice(info);
-        }
-        return null;
-    }
-
-    int getNumDevices() {
-        if (!enabled) {
-            if (Printer.debug)Printer.debug("MidiOutDevice not enabled, returning 0 devices");
-            return 0;
-        }
-        return nGetNumDevices();
-    }
-
-    MidiDevice[] getDeviceCache() { return devices; }
-    void setDeviceCache(MidiDevice[] devices) { this.devices = devices; }
-    Info[] getInfoCache() { return infos; }
-    void setInfoCache(Info[] infos) { this.infos = infos; }
-
-
-    // INNER CLASSES
-
-    /**
-     * Info class for MidiOutDevices.  Adds the
-     * provider's Class to keep the provider class from being
-     * unloaded.  Otherwise, at least on JDK1.1.7 and 1.1.8,
-     * the provider class can be unloaded.  Then, then the provider
-     * is next invoked, the static block is executed again and a new
-     * instance of the device object is created.  Even though the
-     * previous instance may still exist and be open / in use / etc.,
-     * the new instance will not reflect that state...
-     */
-    static final class MidiOutDeviceInfo extends AbstractMidiDeviceProvider.Info {
-        private final Class providerClass;
-
-        private MidiOutDeviceInfo(int index, Class providerClass) {
-            super(nGetName(index), nGetVendor(index), nGetDescription(index), nGetVersion(index), index);
-            this.providerClass = providerClass;
-        }
-
-    } // class MidiOutDeviceInfo
-
-
-    // NATIVE METHODS
-
-    private static native int nGetNumDevices();
-    private static native String nGetName(int index);
-    private static native String nGetVendor(int index);
-    private static native String nGetDescription(int index);
-    private static native String nGetVersion(int index);
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/MidiUtils.java b/ojluni/src/main/java/com/sun/media/sound/MidiUtils.java
deleted file mode 100755
index a3f62ef..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/MidiUtils.java
+++ /dev/null
@@ -1,361 +0,0 @@
-/*
- * Copyright (c) 2003, 2013, 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.media.sound;
-
-import javax.sound.midi.*;
-import java.util.ArrayList;
-
-// TODO:
-// - define and use a global symbolic constant for 60000000 (see convertTempo)
-
-/**
- * Some utilities for MIDI (some stuff is used from javax.sound.midi)
- *
- * @author Florian Bomers
- */
-public final class MidiUtils {
-
-    public final static int DEFAULT_TEMPO_MPQ = 500000; // 120bpm
-    public final static int META_END_OF_TRACK_TYPE = 0x2F;
-    public final static int META_TEMPO_TYPE = 0x51;
-
-    /**
-     * Suppresses default constructor, ensuring non-instantiability.
-     */
-    private MidiUtils() {
-    }
-
-    /** return true if the passed message is Meta End Of Track */
-    public static boolean isMetaEndOfTrack(MidiMessage midiMsg) {
-        // first check if it is a META message at all
-        if (midiMsg.getLength() != 3
-            || midiMsg.getStatus() != MetaMessage.META) {
-            return false;
-        }
-        // now get message and check for end of track
-        byte[] msg = midiMsg.getMessage();
-        return ((msg[1] & 0xFF) == META_END_OF_TRACK_TYPE) && (msg[2] == 0);
-    }
-
-
-    /** return if the given message is a meta tempo message */
-    public static boolean isMetaTempo(MidiMessage midiMsg) {
-        // first check if it is a META message at all
-        if (midiMsg.getLength() != 6
-            || midiMsg.getStatus() != MetaMessage.META) {
-            return false;
-        }
-        // now get message and check for tempo
-        byte[] msg = midiMsg.getMessage();
-        // meta type must be 0x51, and data length must be 3
-        return ((msg[1] & 0xFF) == META_TEMPO_TYPE) && (msg[2] == 3);
-    }
-
-
-    /** parses this message for a META tempo message and returns
-     * the tempo in MPQ, or -1 if this isn't a tempo message
-     */
-    public static int getTempoMPQ(MidiMessage midiMsg) {
-        // first check if it is a META message at all
-        if (midiMsg.getLength() != 6
-            || midiMsg.getStatus() != MetaMessage.META) {
-            return -1;
-        }
-        byte[] msg = midiMsg.getMessage();
-        if (((msg[1] & 0xFF) != META_TEMPO_TYPE) || (msg[2] != 3)) {
-            return -1;
-        }
-        int tempo =    (msg[5] & 0xFF)
-                    | ((msg[4] & 0xFF) << 8)
-                    | ((msg[3] & 0xFF) << 16);
-        return tempo;
-    }
-
-
-    /**
-     * converts<br>
-     * 1 - MPQ-Tempo to BPM tempo<br>
-     * 2 - BPM tempo to MPQ tempo<br>
-     */
-    public static double convertTempo(double tempo) {
-        if (tempo <= 0) {
-            tempo = 1;
-        }
-        return ((double) 60000000l) / tempo;
-    }
-
-
-    /**
-     * convert tick to microsecond with given tempo.
-     * Does not take tempo changes into account.
-     * Does not work for SMPTE timing!
-     */
-    public static long ticks2microsec(long tick, double tempoMPQ, int resolution) {
-        return (long) (((double) tick) * tempoMPQ / resolution);
-    }
-
-    /**
-     * convert tempo to microsecond with given tempo
-     * Does not take tempo changes into account.
-     * Does not work for SMPTE timing!
-     */
-    public static long microsec2ticks(long us, double tempoMPQ, int resolution) {
-        // do not round to nearest tick
-        //return (long) Math.round((((double)us) * resolution) / tempoMPQ);
-        return (long) ((((double)us) * resolution) / tempoMPQ);
-    }
-
-
-    /**
-     * Given a tick, convert to microsecond
-     * @param cache tempo info and current tempo
-     */
-    public static long tick2microsecond(Sequence seq, long tick, TempoCache cache) {
-        if (seq.getDivisionType() != Sequence.PPQ ) {
-            double seconds = ((double)tick / (double)(seq.getDivisionType() * seq.getResolution()));
-            return (long) (1000000 * seconds);
-        }
-
-        if (cache == null) {
-            cache = new TempoCache(seq);
-        }
-
-        int resolution = seq.getResolution();
-
-        long[] ticks = cache.ticks;
-        int[] tempos = cache.tempos; // in MPQ
-        int cacheCount = tempos.length;
-
-        // optimization to not always go through entire list of tempo events
-        int snapshotIndex = cache.snapshotIndex;
-        int snapshotMicro = cache.snapshotMicro;
-
-        // walk through all tempo changes and add time for the respective blocks
-        long us = 0; // microsecond
-
-        if (snapshotIndex <= 0
-            || snapshotIndex >= cacheCount
-            || ticks[snapshotIndex] > tick) {
-            snapshotMicro = 0;
-            snapshotIndex = 0;
-        }
-        if (cacheCount > 0) {
-            // this implementation needs a tempo event at tick 0!
-            int i = snapshotIndex + 1;
-            while (i < cacheCount && ticks[i] <= tick) {
-                snapshotMicro += ticks2microsec(ticks[i] - ticks[i - 1], tempos[i - 1], resolution);
-                snapshotIndex = i;
-                i++;
-            }
-            us = snapshotMicro
-                + ticks2microsec(tick - ticks[snapshotIndex],
-                                 tempos[snapshotIndex],
-                                 resolution);
-        }
-        cache.snapshotIndex = snapshotIndex;
-        cache.snapshotMicro = snapshotMicro;
-        return us;
-    }
-
-    /**
-     * Given a microsecond time, convert to tick.
-     * returns tempo at the given time in cache.getCurrTempoMPQ
-     */
-    public static long microsecond2tick(Sequence seq, long micros, TempoCache cache) {
-        if (seq.getDivisionType() != Sequence.PPQ ) {
-            double dTick = ( ((double) micros)
-                           * ((double) seq.getDivisionType())
-                           * ((double) seq.getResolution()))
-                           / ((double) 1000000);
-            long tick = (long) dTick;
-            if (cache != null) {
-                cache.currTempo = (int) cache.getTempoMPQAt(tick);
-            }
-            return tick;
-        }
-
-        if (cache == null) {
-            cache = new TempoCache(seq);
-        }
-        long[] ticks = cache.ticks;
-        int[] tempos = cache.tempos; // in MPQ
-        int cacheCount = tempos.length;
-
-        int resolution = seq.getResolution();
-
-        long us = 0; long tick = 0; int newReadPos = 0; int i = 1;
-
-        // walk through all tempo changes and add time for the respective blocks
-        // to find the right tick
-        if (micros > 0 && cacheCount > 0) {
-            // this loop requires that the first tempo Event is at time 0
-            while (i < cacheCount) {
-                long nextTime = us + ticks2microsec(ticks[i] - ticks[i - 1],
-                                                    tempos[i - 1], resolution);
-                if (nextTime > micros) {
-                    break;
-                }
-                us = nextTime;
-                i++;
-            }
-            tick = ticks[i - 1] + microsec2ticks(micros - us, tempos[i - 1], resolution);
-            if (Printer.debug) Printer.debug("microsecond2tick(" + (micros / 1000)+") = "+tick+" ticks.");
-            //if (Printer.debug) Printer.debug("   -> convert back = " + (tick2microsecond(seq, tick, null) / 1000)+" microseconds");
-        }
-        cache.currTempo = tempos[i - 1];
-        return tick;
-    }
-
-
-    /**
-     * Binary search for the event indexes of the track
-     *
-     * @param tick - tick number of index to be found in array
-     * @return index in track which is on or after "tick".
-     *   if no entries are found that follow after tick, track.size() is returned
-     */
-    public static int tick2index(Track track, long tick) {
-        int ret = 0;
-        if (tick > 0) {
-            int low = 0;
-            int high = track.size() - 1;
-            while (low < high) {
-                // take the middle event as estimate
-                ret = (low + high) >> 1;
-                // tick of estimate
-                long t = track.get(ret).getTick();
-                if (t == tick) {
-                    break;
-                } else if (t < tick) {
-                    // estimate too low
-                    if (low == high - 1) {
-                        // "or after tick"
-                        ret++;
-                        break;
-                    }
-                    low = ret;
-                } else { // if (t>tick)
-                    // estimate too high
-                    high = ret;
-                }
-            }
-        }
-        return ret;
-    }
-
-
-    public static final class TempoCache {
-        long[] ticks;
-        int[] tempos; // in MPQ
-        // index in ticks/tempos at the snapshot
-        int snapshotIndex = 0;
-        // microsecond at the snapshot
-        int snapshotMicro = 0;
-
-        int currTempo; // MPQ, used as return value for microsecond2tick
-
-        private boolean firstTempoIsFake = false;
-
-        public TempoCache() {
-            // just some defaults, to prevents weird stuff
-            ticks = new long[1];
-            tempos = new int[1];
-            tempos[0] = DEFAULT_TEMPO_MPQ;
-            snapshotIndex = 0;
-            snapshotMicro = 0;
-        }
-
-        public TempoCache(Sequence seq) {
-            this();
-            refresh(seq);
-        }
-
-
-        public synchronized void refresh(Sequence seq) {
-            ArrayList list = new ArrayList();
-            Track[] tracks = seq.getTracks();
-            if (tracks.length > 0) {
-                // tempo events only occur in track 0
-                Track track = tracks[0];
-                int c = track.size();
-                for (int i = 0; i < c; i++) {
-                    MidiEvent ev = track.get(i);
-                    MidiMessage msg = ev.getMessage();
-                    if (isMetaTempo(msg)) {
-                        // found a tempo event. Add it to the list
-                        list.add(ev);
-                    }
-                }
-            }
-            int size = list.size() + 1;
-            firstTempoIsFake = true;
-            if ((size > 1)
-                && (((MidiEvent) list.get(0)).getTick() == 0)) {
-                // do not need to add an initial tempo event at the beginning
-                size--;
-                firstTempoIsFake = false;
-            }
-            ticks  = new long[size];
-            tempos = new int[size];
-            int e = 0;
-            if (firstTempoIsFake) {
-                // add tempo 120 at beginning
-                ticks[0] = 0;
-                tempos[0] = DEFAULT_TEMPO_MPQ;
-                e++;
-            }
-            for (int i = 0; i < list.size(); i++, e++) {
-                MidiEvent evt = (MidiEvent) list.get(i);
-                ticks[e] = evt.getTick();
-                tempos[e] = getTempoMPQ(evt.getMessage());
-            }
-            snapshotIndex = 0;
-            snapshotMicro = 0;
-        }
-
-        public int getCurrTempoMPQ() {
-            return currTempo;
-        }
-
-        float getTempoMPQAt(long tick) {
-            return getTempoMPQAt(tick, -1.0f);
-        }
-
-        synchronized float getTempoMPQAt(long tick, float startTempoMPQ) {
-            for (int i = 0; i < ticks.length; i++) {
-                if (ticks[i] > tick) {
-                    if (i > 0) i--;
-                    if (startTempoMPQ > 0 && i == 0 && firstTempoIsFake) {
-                        return startTempoMPQ;
-                    }
-                    return (float) tempos[i];
-                }
-            }
-            return tempos[tempos.length - 1];
-        }
-
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/ModelAbstractChannelMixer.java b/ojluni/src/main/java/com/sun/media/sound/ModelAbstractChannelMixer.java
deleted file mode 100755
index a6f9a60..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/ModelAbstractChannelMixer.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * Copyright (c) 2007, 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.media.sound;
-
-/**
- * ModelAbstractChannelMixer is ready for use class to implement
- * ModelChannelMixer interface.
- *
- * @author Karl Helgason
- */
-public abstract class ModelAbstractChannelMixer implements ModelChannelMixer {
-
-    public abstract boolean process(float[][] buffer, int offset, int len);
-
-    public abstract void stop();
-
-    public void allNotesOff() {
-    }
-
-    public void allSoundOff() {
-    }
-
-    public void controlChange(int controller, int value) {
-    }
-
-    public int getChannelPressure() {
-        return 0;
-    }
-
-    public int getController(int controller) {
-        return 0;
-    }
-
-    public boolean getMono() {
-        return false;
-    }
-
-    public boolean getMute() {
-        return false;
-    }
-
-    public boolean getOmni() {
-        return false;
-    }
-
-    public int getPitchBend() {
-        return 0;
-    }
-
-    public int getPolyPressure(int noteNumber) {
-        return 0;
-    }
-
-    public int getProgram() {
-        return 0;
-    }
-
-    public boolean getSolo() {
-        return false;
-    }
-
-    public boolean localControl(boolean on) {
-        return false;
-    }
-
-    public void noteOff(int noteNumber) {
-    }
-
-    public void noteOff(int noteNumber, int velocity) {
-    }
-
-    public void noteOn(int noteNumber, int velocity) {
-    }
-
-    public void programChange(int program) {
-    }
-
-    public void programChange(int bank, int program) {
-    }
-
-    public void resetAllControllers() {
-    }
-
-    public void setChannelPressure(int pressure) {
-    }
-
-    public void setMono(boolean on) {
-    }
-
-    public void setMute(boolean mute) {
-    }
-
-    public void setOmni(boolean on) {
-    }
-
-    public void setPitchBend(int bend) {
-    }
-
-    public void setPolyPressure(int noteNumber, int pressure) {
-    }
-
-    public void setSolo(boolean soloState) {
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/ModelAbstractOscillator.java b/ojluni/src/main/java/com/sun/media/sound/ModelAbstractOscillator.java
deleted file mode 100755
index 1c8f141..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/ModelAbstractOscillator.java
+++ /dev/null
@@ -1,200 +0,0 @@
-/*
- * Copyright (c) 2007, 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.media.sound;
-
-import java.io.IOException;
-import javax.sound.midi.Instrument;
-import javax.sound.midi.MidiChannel;
-import javax.sound.midi.Patch;
-import javax.sound.midi.Soundbank;
-import javax.sound.midi.SoundbankResource;
-import javax.sound.midi.VoiceStatus;
-
-/**
- * A abstract class used to simplify creating custom ModelOscillator.
- *
- * @author Karl Helgason
- */
-public abstract class ModelAbstractOscillator
-        implements ModelOscillator, ModelOscillatorStream, Soundbank {
-
-    protected float pitch = 6000;
-    protected float samplerate;
-    protected MidiChannel channel;
-    protected VoiceStatus voice;
-    protected int noteNumber;
-    protected int velocity;
-    protected boolean on = false;
-
-    public void init() {
-    }
-
-    public void close() throws IOException {
-    }
-
-    public void noteOff(int velocity) {
-        on = false;
-    }
-
-    public void noteOn(MidiChannel channel, VoiceStatus voice, int noteNumber,
-            int velocity) {
-        this.channel = channel;
-        this.voice = voice;
-        this.noteNumber = noteNumber;
-        this.velocity = velocity;
-        on = true;
-    }
-
-    public int read(float[][] buffer, int offset, int len) throws IOException {
-        return -1;
-    }
-
-    public MidiChannel getChannel() {
-        return channel;
-    }
-
-    public VoiceStatus getVoice() {
-        return voice;
-    }
-
-    public int getNoteNumber() {
-        return noteNumber;
-    }
-
-    public int getVelocity() {
-        return velocity;
-    }
-
-    public boolean isOn() {
-        return on;
-    }
-
-    public void setPitch(float pitch) {
-        this.pitch = pitch;
-    }
-
-    public float getPitch() {
-        return pitch;
-    }
-
-    public void setSampleRate(float samplerate) {
-        this.samplerate = samplerate;
-    }
-
-    public float getSampleRate() {
-        return samplerate;
-    }
-
-    public float getAttenuation() {
-        return 0;
-    }
-
-    public int getChannels() {
-        return 1;
-    }
-
-    public String getName() {
-        return getClass().getName();
-    }
-
-    public Patch getPatch() {
-        return new Patch(0, 0);
-    }
-
-    public ModelOscillatorStream open(float samplerate) {
-        ModelAbstractOscillator oscs;
-        try {
-            oscs = this.getClass().newInstance();
-        } catch (InstantiationException e) {
-            throw new IllegalArgumentException(e);
-        } catch (IllegalAccessException e) {
-            throw new IllegalArgumentException(e);
-        }
-        oscs.setSampleRate(samplerate);
-        oscs.init();
-        return oscs;
-    }
-
-    public ModelPerformer getPerformer() {
-        // Create performer for my custom oscillirator
-        ModelPerformer performer = new ModelPerformer();
-        performer.getOscillators().add(this);
-        return performer;
-
-    }
-
-    public ModelInstrument getInstrument() {
-        // Create Instrument object around my performer
-        SimpleInstrument ins = new SimpleInstrument();
-        ins.setName(getName());
-        ins.add(getPerformer());
-        ins.setPatch(getPatch());
-        return ins;
-
-    }
-
-    public Soundbank getSoundBank() {
-        // Create Soundbank object around the instrument
-        SimpleSoundbank sbk = new SimpleSoundbank();
-        sbk.addInstrument(getInstrument());
-        return sbk;
-    }
-
-    public String getDescription() {
-        return getName();
-    }
-
-    public Instrument getInstrument(Patch patch) {
-        Instrument ins = getInstrument();
-        Patch p = ins.getPatch();
-        if (p.getBank() != patch.getBank())
-            return null;
-        if (p.getProgram() != patch.getProgram())
-            return null;
-        if (p instanceof ModelPatch && patch instanceof ModelPatch) {
-            if (((ModelPatch)p).isPercussion()
-                    != ((ModelPatch)patch).isPercussion()) {
-                return null;
-            }
-        }
-        return ins;
-    }
-
-    public Instrument[] getInstruments() {
-        return new Instrument[]{getInstrument()};
-    }
-
-    public SoundbankResource[] getResources() {
-        return new SoundbankResource[0];
-    }
-
-    public String getVendor() {
-        return null;
-    }
-
-    public String getVersion() {
-        return null;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/ModelByteBuffer.java b/ojluni/src/main/java/com/sun/media/sound/ModelByteBuffer.java
deleted file mode 100755
index 9ba89f2..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/ModelByteBuffer.java
+++ /dev/null
@@ -1,329 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, 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.media.sound;
-
-import java.io.ByteArrayInputStream;
-import java.io.DataInputStream;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.RandomAccessFile;
-import java.util.Collection;
-
-/**
- * This class is a pointer to a binary array either in memory or on disk.
- *
- * @author Karl Helgason
- */
-public final class ModelByteBuffer {
-
-    private ModelByteBuffer root = this;
-    private File file;
-    private long fileoffset;
-    private byte[] buffer;
-    private long offset;
-    private final long len;
-
-    private class RandomFileInputStream extends InputStream {
-
-        private final RandomAccessFile raf;
-        private long left;
-        private long mark = 0;
-        private long markleft = 0;
-
-        RandomFileInputStream() throws IOException {
-            raf = new RandomAccessFile(root.file, "r");
-            raf.seek(root.fileoffset + arrayOffset());
-            left = capacity();
-        }
-
-        public int available() throws IOException {
-            if (left > Integer.MAX_VALUE)
-                return Integer.MAX_VALUE;
-            return (int)left;
-        }
-
-        public synchronized void mark(int readlimit) {
-            try {
-                mark = raf.getFilePointer();
-                markleft = left;
-            } catch (IOException e) {
-                //e.printStackTrace();
-            }
-        }
-
-        public boolean markSupported() {
-            return true;
-        }
-
-        public synchronized void reset() throws IOException {
-            raf.seek(mark);
-            left = markleft;
-        }
-
-        public long skip(long n) throws IOException {
-            if( n < 0)
-                return 0;
-            if (n > left)
-                n = left;
-            long p = raf.getFilePointer();
-            raf.seek(p + n);
-            left -= n;
-            return n;
-        }
-
-        public int read(byte b[], int off, int len) throws IOException {
-            if (len > left)
-                len = (int)left;
-            if (left == 0)
-                return -1;
-            len = raf.read(b, off, len);
-            if (len == -1)
-                return -1;
-            left -= len;
-            return len;
-        }
-
-        public int read(byte[] b) throws IOException {
-            int len = b.length;
-            if (len > left)
-                len = (int)left;
-            if (left == 0)
-                return -1;
-            len = raf.read(b, 0, len);
-            if (len == -1)
-                return -1;
-            left -= len;
-            return len;
-        }
-
-        public int read() throws IOException {
-            if (left == 0)
-                return -1;
-            int b = raf.read();
-            if (b == -1)
-                return -1;
-            left--;
-            return b;
-        }
-
-        public void close() throws IOException {
-            raf.close();
-        }
-    }
-
-    private ModelByteBuffer(ModelByteBuffer parent,
-            long beginIndex, long endIndex, boolean independent) {
-        this.root = parent.root;
-        this.offset = 0;
-        long parent_len = parent.len;
-        if (beginIndex < 0)
-            beginIndex = 0;
-        if (beginIndex > parent_len)
-            beginIndex = parent_len;
-        if (endIndex < 0)
-            endIndex = 0;
-        if (endIndex > parent_len)
-            endIndex = parent_len;
-        if (beginIndex > endIndex)
-            beginIndex = endIndex;
-        offset = beginIndex;
-        len = endIndex - beginIndex;
-        if (independent) {
-            buffer = root.buffer;
-            if (root.file != null) {
-                file = root.file;
-                fileoffset = root.fileoffset + arrayOffset();
-                offset = 0;
-            } else
-                offset = arrayOffset();
-            root = this;
-        }
-    }
-
-    public ModelByteBuffer(byte[] buffer) {
-        this.buffer = buffer;
-        this.offset = 0;
-        this.len = buffer.length;
-    }
-
-    public ModelByteBuffer(byte[] buffer, int offset, int len) {
-        this.buffer = buffer;
-        this.offset = offset;
-        this.len = len;
-    }
-
-    public ModelByteBuffer(File file) {
-        this.file = file;
-        this.fileoffset = 0;
-        this.len = file.length();
-    }
-
-    public ModelByteBuffer(File file, long offset, long len) {
-        this.file = file;
-        this.fileoffset = offset;
-        this.len = len;
-    }
-
-    public void writeTo(OutputStream out) throws IOException {
-        if (root.file != null && root.buffer == null) {
-            InputStream is = getInputStream();
-            byte[] buff = new byte[1024];
-            int ret;
-            while ((ret = is.read(buff)) != -1)
-                out.write(buff, 0, ret);
-        } else
-            out.write(array(), (int) arrayOffset(), (int) capacity());
-    }
-
-    public InputStream getInputStream() {
-        if (root.file != null && root.buffer == null) {
-            try {
-                return new RandomFileInputStream();
-            } catch (IOException e) {
-                //e.printStackTrace();
-                return null;
-            }
-        }
-        return new ByteArrayInputStream(array(),
-                (int)arrayOffset(), (int)capacity());
-    }
-
-    public ModelByteBuffer subbuffer(long beginIndex) {
-        return subbuffer(beginIndex, capacity());
-    }
-
-    public ModelByteBuffer subbuffer(long beginIndex, long endIndex) {
-        return subbuffer(beginIndex, endIndex, false);
-    }
-
-    public ModelByteBuffer subbuffer(long beginIndex, long endIndex,
-            boolean independent) {
-        return new ModelByteBuffer(this, beginIndex, endIndex, independent);
-    }
-
-    public byte[] array() {
-        return root.buffer;
-    }
-
-    public long arrayOffset() {
-        if (root != this)
-            return root.arrayOffset() + offset;
-        return offset;
-    }
-
-    public long capacity() {
-        return len;
-    }
-
-    public ModelByteBuffer getRoot() {
-        return root;
-    }
-
-    public File getFile() {
-        return file;
-    }
-
-    public long getFilePointer() {
-        return fileoffset;
-    }
-
-    public static void loadAll(Collection<ModelByteBuffer> col)
-            throws IOException {
-        File selfile = null;
-        RandomAccessFile raf = null;
-        try {
-            for (ModelByteBuffer mbuff : col) {
-                mbuff = mbuff.root;
-                if (mbuff.file == null)
-                    continue;
-                if (mbuff.buffer != null)
-                    continue;
-                if (selfile == null || !selfile.equals(mbuff.file)) {
-                    if (raf != null) {
-                        raf.close();
-                        raf = null;
-                    }
-                    selfile = mbuff.file;
-                    raf = new RandomAccessFile(mbuff.file, "r");
-                }
-                raf.seek(mbuff.fileoffset);
-                byte[] buffer = new byte[(int) mbuff.capacity()];
-
-                int read = 0;
-                int avail = buffer.length;
-                while (read != avail) {
-                    if (avail - read > 65536) {
-                        raf.readFully(buffer, read, 65536);
-                        read += 65536;
-                    } else {
-                        raf.readFully(buffer, read, avail - read);
-                        read = avail;
-                    }
-
-                }
-
-                mbuff.buffer = buffer;
-                mbuff.offset = 0;
-            }
-        } finally {
-            if (raf != null)
-                raf.close();
-        }
-    }
-
-    public void load() throws IOException {
-        if (root != this) {
-            root.load();
-            return;
-        }
-        if (buffer != null)
-            return;
-        if (file == null) {
-            throw new IllegalStateException(
-                    "No file associated with this ByteBuffer!");
-        }
-
-        DataInputStream is = new DataInputStream(getInputStream());
-        buffer = new byte[(int) capacity()];
-        offset = 0;
-        is.readFully(buffer);
-        is.close();
-
-    }
-
-    public void unload() {
-        if (root != this) {
-            root.unload();
-            return;
-        }
-        if (file == null) {
-            throw new IllegalStateException(
-                    "No file associated with this ByteBuffer!");
-        }
-        root.buffer = null;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/ModelByteBufferWavetable.java b/ojluni/src/main/java/com/sun/media/sound/ModelByteBufferWavetable.java
deleted file mode 100755
index 33515f4..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/ModelByteBufferWavetable.java
+++ /dev/null
@@ -1,282 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, 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.media.sound;
-
-import java.io.IOException;
-import java.io.InputStream;
-import javax.sound.sampled.AudioFormat;
-import javax.sound.sampled.AudioInputStream;
-import javax.sound.sampled.AudioSystem;
-import javax.sound.sampled.AudioFormat.Encoding;
-
-/**
- * Wavetable oscillator for pre-loaded data.
- *
- * @author Karl Helgason
- */
-public final class ModelByteBufferWavetable implements ModelWavetable {
-
-    private class Buffer8PlusInputStream extends InputStream {
-
-        private final boolean bigendian;
-        private final int framesize_pc;
-        int pos = 0;
-        int pos2 = 0;
-        int markpos = 0;
-        int markpos2 = 0;
-
-        Buffer8PlusInputStream() {
-            framesize_pc = format.getFrameSize() / format.getChannels();
-            bigendian = format.isBigEndian();
-        }
-
-        public int read(byte[] b, int off, int len) throws IOException {
-            int avail = available();
-            if (avail <= 0)
-                return -1;
-            if (len > avail)
-                len = avail;
-            byte[] buff1 = buffer.array();
-            byte[] buff2 = buffer8.array();
-            pos += buffer.arrayOffset();
-            pos2 += buffer8.arrayOffset();
-            if (bigendian) {
-                for (int i = 0; i < len; i += (framesize_pc + 1)) {
-                    System.arraycopy(buff1, pos, b, i, framesize_pc);
-                    System.arraycopy(buff2, pos2, b, i + framesize_pc, 1);
-                    pos += framesize_pc;
-                    pos2 += 1;
-                }
-            } else {
-                for (int i = 0; i < len; i += (framesize_pc + 1)) {
-                    System.arraycopy(buff2, pos2, b, i, 1);
-                    System.arraycopy(buff1, pos, b, i + 1, framesize_pc);
-                    pos += framesize_pc;
-                    pos2 += 1;
-                }
-            }
-            pos -= buffer.arrayOffset();
-            pos2 -= buffer8.arrayOffset();
-            return len;
-        }
-
-        public long skip(long n) throws IOException {
-            int avail = available();
-            if (avail <= 0)
-                return -1;
-            if (n > avail)
-                n = avail;
-            pos += (n / (framesize_pc + 1)) * (framesize_pc);
-            pos2 += n / (framesize_pc + 1);
-            return super.skip(n);
-        }
-
-        public int read(byte[] b) throws IOException {
-            return read(b, 0, b.length);
-        }
-
-        public int read() throws IOException {
-            byte[] b = new byte[1];
-            int ret = read(b, 0, 1);
-            if (ret == -1)
-                return -1;
-            return 0 & 0xFF;
-        }
-
-        public boolean markSupported() {
-            return true;
-        }
-
-        public int available() throws IOException {
-            return (int)buffer.capacity() + (int)buffer8.capacity() - pos - pos2;
-        }
-
-        public synchronized void mark(int readlimit) {
-            markpos = pos;
-            markpos2 = pos2;
-        }
-
-        public synchronized void reset() throws IOException {
-            pos = markpos;
-            pos2 = markpos2;
-
-        }
-    }
-
-    private float loopStart = -1;
-    private float loopLength = -1;
-    private final ModelByteBuffer buffer;
-    private ModelByteBuffer buffer8 = null;
-    private AudioFormat format = null;
-    private float pitchcorrection = 0;
-    private float attenuation = 0;
-    private int loopType = LOOP_TYPE_OFF;
-
-    public ModelByteBufferWavetable(ModelByteBuffer buffer) {
-        this.buffer = buffer;
-    }
-
-    public ModelByteBufferWavetable(ModelByteBuffer buffer,
-            float pitchcorrection) {
-        this.buffer = buffer;
-        this.pitchcorrection = pitchcorrection;
-    }
-
-    public ModelByteBufferWavetable(ModelByteBuffer buffer, AudioFormat format) {
-        this.format = format;
-        this.buffer = buffer;
-    }
-
-    public ModelByteBufferWavetable(ModelByteBuffer buffer, AudioFormat format,
-            float pitchcorrection) {
-        this.format = format;
-        this.buffer = buffer;
-        this.pitchcorrection = pitchcorrection;
-    }
-
-    public void set8BitExtensionBuffer(ModelByteBuffer buffer) {
-        buffer8 = buffer;
-    }
-
-    public ModelByteBuffer get8BitExtensionBuffer() {
-        return buffer8;
-    }
-
-    public ModelByteBuffer getBuffer() {
-        return buffer;
-    }
-
-    public AudioFormat getFormat() {
-        if (format == null) {
-            if (buffer == null)
-                return null;
-            InputStream is = buffer.getInputStream();
-            AudioFormat format = null;
-            try {
-                format = AudioSystem.getAudioFileFormat(is).getFormat();
-            } catch (Exception e) {
-                //e.printStackTrace();
-            }
-            try {
-                is.close();
-            } catch (IOException e) {
-                //e.printStackTrace();
-            }
-            return format;
-        }
-        return format;
-    }
-
-    public AudioFloatInputStream openStream() {
-        if (buffer == null)
-            return null;
-        if (format == null) {
-            InputStream is = buffer.getInputStream();
-            AudioInputStream ais = null;
-            try {
-                ais = AudioSystem.getAudioInputStream(is);
-            } catch (Exception e) {
-                //e.printStackTrace();
-                return null;
-            }
-            return AudioFloatInputStream.getInputStream(ais);
-        }
-        if (buffer.array() == null) {
-            return AudioFloatInputStream.getInputStream(new AudioInputStream(
-                    buffer.getInputStream(), format,
-                    buffer.capacity() / format.getFrameSize()));
-        }
-        if (buffer8 != null) {
-            if (format.getEncoding().equals(Encoding.PCM_SIGNED)
-                    || format.getEncoding().equals(Encoding.PCM_UNSIGNED)) {
-                InputStream is = new Buffer8PlusInputStream();
-                AudioFormat format2 = new AudioFormat(
-                        format.getEncoding(),
-                        format.getSampleRate(),
-                        format.getSampleSizeInBits() + 8,
-                        format.getChannels(),
-                        format.getFrameSize() + (1 * format.getChannels()),
-                        format.getFrameRate(),
-                        format.isBigEndian());
-
-                AudioInputStream ais = new AudioInputStream(is, format2,
-                        buffer.capacity() / format.getFrameSize());
-                return AudioFloatInputStream.getInputStream(ais);
-            }
-        }
-        return AudioFloatInputStream.getInputStream(format, buffer.array(),
-                (int)buffer.arrayOffset(), (int)buffer.capacity());
-    }
-
-    public int getChannels() {
-        return getFormat().getChannels();
-    }
-
-    public ModelOscillatorStream open(float samplerate) {
-        // ModelWavetableOscillator doesn't support ModelOscillatorStream
-        return null;
-    }
-
-    // attenuation is in cB
-    public float getAttenuation() {
-        return attenuation;
-    }
-    // attenuation is in cB
-    public void setAttenuation(float attenuation) {
-        this.attenuation = attenuation;
-    }
-
-    public float getLoopLength() {
-        return loopLength;
-    }
-
-    public void setLoopLength(float loopLength) {
-        this.loopLength = loopLength;
-    }
-
-    public float getLoopStart() {
-        return loopStart;
-    }
-
-    public void setLoopStart(float loopStart) {
-        this.loopStart = loopStart;
-    }
-
-    public void setLoopType(int loopType) {
-        this.loopType = loopType;
-    }
-
-    public int getLoopType() {
-        return loopType;
-    }
-
-    public float getPitchcorrection() {
-        return pitchcorrection;
-    }
-
-    public void setPitchcorrection(float pitchcorrection) {
-        this.pitchcorrection = pitchcorrection;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/ModelChannelMixer.java b/ojluni/src/main/java/com/sun/media/sound/ModelChannelMixer.java
deleted file mode 100755
index 4be6448..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/ModelChannelMixer.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (c) 2007, 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.media.sound;
-
-import javax.sound.midi.MidiChannel;
-
-/**
- * ModelChannelMixer is used to process channel voice mix output before going
- * to master output.<br>
- * It can be used to:<br>
- * <ul>
- *   <li>Implement non-voice oriented instruments.</li>
- *   <li>Add insert effect to instruments; for example distortion effect.</li>
- * </ui>
- * <p>
- * <b>Warning! Classes that implements ModelChannelMixer must be thread-safe.</b>
- *
- * @author Karl Helgason
- */
-public interface ModelChannelMixer extends MidiChannel {
-
-    // Used to process input audio from voices mix.
-    public boolean process(float[][] buffer, int offset, int len);
-
-    // Is used to trigger that this mixer is not be used
-    // and it should fade out.
-    public void stop();
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/ModelConnectionBlock.java b/ojluni/src/main/java/com/sun/media/sound/ModelConnectionBlock.java
deleted file mode 100755
index 05a438f..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/ModelConnectionBlock.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, 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.media.sound;
-
-import java.util.Arrays;
-
-/**
- * Connection blocks are used to connect source variable
- * to a destination variable.
- * For example Note On velocity can be connected to output gain.
- * In DLS this is called articulator and in SoundFonts (SF2) a modulator.
- *
- * @author Karl Helgason
- */
-public final class ModelConnectionBlock {
-
-    //
-    //   source1 * source2 * scale -> destination
-    //
-    private final static ModelSource[] no_sources = new ModelSource[0];
-    private ModelSource[] sources = no_sources;
-    private double scale = 1;
-    private ModelDestination destination;
-
-    public ModelConnectionBlock() {
-    }
-
-    public ModelConnectionBlock(double scale, ModelDestination destination) {
-        this.scale = scale;
-        this.destination = destination;
-    }
-
-    public ModelConnectionBlock(ModelSource source,
-            ModelDestination destination) {
-        if (source != null) {
-            this.sources = new ModelSource[1];
-            this.sources[0] = source;
-        }
-        this.destination = destination;
-    }
-
-    public ModelConnectionBlock(ModelSource source, double scale,
-            ModelDestination destination) {
-        if (source != null) {
-            this.sources = new ModelSource[1];
-            this.sources[0] = source;
-        }
-        this.scale = scale;
-        this.destination = destination;
-    }
-
-    public ModelConnectionBlock(ModelSource source, ModelSource control,
-            ModelDestination destination) {
-        if (source != null) {
-            if (control == null) {
-                this.sources = new ModelSource[1];
-                this.sources[0] = source;
-            } else {
-                this.sources = new ModelSource[2];
-                this.sources[0] = source;
-                this.sources[1] = control;
-            }
-        }
-        this.destination = destination;
-    }
-
-    public ModelConnectionBlock(ModelSource source, ModelSource control,
-            double scale, ModelDestination destination) {
-        if (source != null) {
-            if (control == null) {
-                this.sources = new ModelSource[1];
-                this.sources[0] = source;
-            } else {
-                this.sources = new ModelSource[2];
-                this.sources[0] = source;
-                this.sources[1] = control;
-            }
-        }
-        this.scale = scale;
-        this.destination = destination;
-    }
-
-    public ModelDestination getDestination() {
-        return destination;
-    }
-
-    public void setDestination(ModelDestination destination) {
-        this.destination = destination;
-    }
-
-    public double getScale() {
-        return scale;
-    }
-
-    public void setScale(double scale) {
-        this.scale = scale;
-    }
-
-    public ModelSource[] getSources() {
-        return Arrays.copyOf(sources, sources.length);
-    }
-
-    public void setSources(ModelSource[] source) {
-        this.sources = source == null ? no_sources : Arrays.copyOf(source, source.length);
-    }
-
-    public void addSource(ModelSource source) {
-        ModelSource[] oldsources = sources;
-        sources = new ModelSource[oldsources.length + 1];
-        System.arraycopy(oldsources, 0, sources, 0, oldsources.length);
-        sources[sources.length - 1] = source;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/ModelDestination.java b/ojluni/src/main/java/com/sun/media/sound/ModelDestination.java
deleted file mode 100755
index f1fe44e..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/ModelDestination.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, 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.media.sound;
-
-/**
- * This class is used to identify destinations in connection blocks,
- * see ModelConnectionBlock.
- *
- * @author Karl Helgason
- */
-public final class ModelDestination {
-
-    public static final ModelIdentifier DESTINATION_NONE = null;
-    public static final ModelIdentifier DESTINATION_KEYNUMBER
-            = new ModelIdentifier("noteon", "keynumber");
-    public static final ModelIdentifier DESTINATION_VELOCITY
-            = new ModelIdentifier("noteon", "velocity");
-    public static final ModelIdentifier DESTINATION_PITCH
-            = new ModelIdentifier("osc", "pitch");   // cent
-    public static final ModelIdentifier DESTINATION_GAIN
-            = new ModelIdentifier("mixer", "gain");   // cB
-    public static final ModelIdentifier DESTINATION_PAN
-            = new ModelIdentifier("mixer", "pan");   // 0.1 %
-    public static final ModelIdentifier DESTINATION_REVERB
-            = new ModelIdentifier("mixer", "reverb");   // 0.1 %
-    public static final ModelIdentifier DESTINATION_CHORUS
-            = new ModelIdentifier("mixer", "chorus");   // 0.1 %
-    public static final ModelIdentifier DESTINATION_LFO1_DELAY
-            = new ModelIdentifier("lfo", "delay", 0); // timecent
-    public static final ModelIdentifier DESTINATION_LFO1_FREQ
-            = new ModelIdentifier("lfo", "freq", 0); // cent
-    public static final ModelIdentifier DESTINATION_LFO2_DELAY
-            = new ModelIdentifier("lfo", "delay", 1); // timecent
-    public static final ModelIdentifier DESTINATION_LFO2_FREQ
-            = new ModelIdentifier("lfo", "freq", 1); // cent
-    public static final ModelIdentifier DESTINATION_EG1_DELAY
-            = new ModelIdentifier("eg", "delay", 0); // timecent
-    public static final ModelIdentifier DESTINATION_EG1_ATTACK
-            = new ModelIdentifier("eg", "attack", 0); // timecent
-    public static final ModelIdentifier DESTINATION_EG1_HOLD
-            = new ModelIdentifier("eg", "hold", 0); // timecent
-    public static final ModelIdentifier DESTINATION_EG1_DECAY
-            = new ModelIdentifier("eg", "decay", 0); // timecent
-    public static final ModelIdentifier DESTINATION_EG1_SUSTAIN
-            = new ModelIdentifier("eg", "sustain", 0);
-                                        // 0.1 % (I want this to be value not %)
-    public static final ModelIdentifier DESTINATION_EG1_RELEASE
-            = new ModelIdentifier("eg", "release", 0); // timecent
-    public static final ModelIdentifier DESTINATION_EG1_SHUTDOWN
-            = new ModelIdentifier("eg", "shutdown", 0); // timecent
-    public static final ModelIdentifier DESTINATION_EG2_DELAY
-            = new ModelIdentifier("eg", "delay", 1); // timecent
-    public static final ModelIdentifier DESTINATION_EG2_ATTACK
-            = new ModelIdentifier("eg", "attack", 1); // timecent
-    public static final ModelIdentifier DESTINATION_EG2_HOLD
-            = new ModelIdentifier("eg", "hold", 1); // 0.1 %
-    public static final ModelIdentifier DESTINATION_EG2_DECAY
-            = new ModelIdentifier("eg", "decay", 1); // timecent
-    public static final ModelIdentifier DESTINATION_EG2_SUSTAIN
-            = new ModelIdentifier("eg", "sustain", 1);
-                                        // 0.1 % ( I want this to be value not %)
-    public static final ModelIdentifier DESTINATION_EG2_RELEASE
-            = new ModelIdentifier("eg", "release", 1); // timecent
-    public static final ModelIdentifier DESTINATION_EG2_SHUTDOWN
-            = new ModelIdentifier("eg", "shutdown", 1); // timecent
-    public static final ModelIdentifier DESTINATION_FILTER_FREQ
-            = new ModelIdentifier("filter", "freq", 0); // cent
-    public static final ModelIdentifier DESTINATION_FILTER_Q
-            = new ModelIdentifier("filter", "q", 0); // cB
-    private ModelIdentifier destination = DESTINATION_NONE;
-    private ModelTransform transform = new ModelStandardTransform();
-
-    public ModelDestination() {
-    }
-
-    public ModelDestination(ModelIdentifier id) {
-        destination = id;
-    }
-
-    public ModelIdentifier getIdentifier() {
-        return destination;
-    }
-
-    public void setIdentifier(ModelIdentifier destination) {
-        this.destination = destination;
-    }
-
-    public ModelTransform getTransform() {
-        return transform;
-    }
-
-    public void setTransform(ModelTransform transform) {
-        this.transform = transform;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/ModelDirectedPlayer.java b/ojluni/src/main/java/com/sun/media/sound/ModelDirectedPlayer.java
deleted file mode 100755
index fa5543a..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/ModelDirectedPlayer.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (c) 2007, 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.media.sound;
-
-/**
- *  ModelDirectedPlayer is the one who is directed by ModelDirector
- *  to play ModelPerformer objects.
- *
- * @author Karl Helgason
- */
-public interface ModelDirectedPlayer {
-
-    public void play(int performerIndex, ModelConnectionBlock[] connectionBlocks);
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/ModelDirector.java b/ojluni/src/main/java/com/sun/media/sound/ModelDirector.java
deleted file mode 100755
index fb452e4..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/ModelDirector.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (c) 2007, 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.media.sound;
-
-/**
- * A director chooses what performers should be  played for each note on
- * and note off events.
- *
- * ModelInstrument can implement custom performer who chooses what performers
- * to play for example by sustain pedal is off or on.
- *
- * The default director (ModelStandardDirector) chooses performers
- * by there keyfrom,keyto,velfrom,velto properties.
- *
- * @author Karl Helgason
- */
-public interface ModelDirector {
-
-    public void noteOn(int noteNumber, int velocity);
-
-    public void noteOff(int noteNumber, int velocity);
-
-    public void close();
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/ModelIdentifier.java b/ojluni/src/main/java/com/sun/media/sound/ModelIdentifier.java
deleted file mode 100755
index 2e07fa1..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/ModelIdentifier.java
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, 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.media.sound;
-
-/**
- * This class stores the identity of source and destinations in connection
- * blocks, see ModelConnectionBlock.
- *
- * @author Karl Helgason
- */
-public final class ModelIdentifier {
-
-    /*
-     *  Object    Variable
-     *  ------    --------
-     *
-     *  // INPUT parameters
-     *  noteon    keynumber                7 bit midi value
-     *            velocity                 7 bit midi vale
-     *            on                       1 or 0
-     *
-     *  midi      pitch                    14 bit midi value
-     *            channel_pressure         7 bit midi value
-     *            poly_pressure            7 bit midi value
-     *
-     *  midi_cc   0 (midi control #0       7 bit midi value
-     *            1 (midi control #1       7 bit midi value
-     *            ...
-     *            127 (midi control #127   7 bit midi value
-     *
-     *  midi_rpn  0 (midi rpn control #0)  14 bit midi value
-     *            1 (midi rpn control #1)  14 bit midi value
-     *            ....
-     *
-     *  // DAHDSR envelope generator
-     *  eg        (null)
-     *            delay                    timecent
-     *            attack                   timecent
-     *            hold                     timecent
-     *            decay                    timecent
-     *            sustain                  0.1 %
-     *            release                  timecent
-     *
-     *  // Low frequency oscillirator (sine wave)
-     *  lfo       (null)
-     *            delay                    timcent
-     *            freq                     cent
-     *
-     *  // Resonance LowPass Filter 6dB slope
-     *  filter    (null) (output/input)
-     *            freq                     cent
-     *            q                        cB
-     *
-     *  // The oscillator with preloaded wavetable data
-     *  osc       (null)
-     *            pitch                    cent
-     *
-     *  // Output mixer pins
-     *  mixer     gain                     cB
-     *            pan                      0.1 %
-     *            reverb                   0.1 %
-     *            chorus                   0.1 %
-     *
-     */
-    private String object = null;
-    private String variable = null;
-    private int instance = 0;
-
-    public ModelIdentifier(String object) {
-        this.object = object;
-    }
-
-    public ModelIdentifier(String object, int instance) {
-        this.object = object;
-        this.instance = instance;
-    }
-
-    public ModelIdentifier(String object, String variable) {
-        this.object = object;
-        this.variable = variable;
-
-    }
-
-    public ModelIdentifier(String object, String variable, int instance) {
-        this.object = object;
-        this.variable = variable;
-        this.instance = instance;
-
-    }
-
-    public int getInstance() {
-        return instance;
-    }
-
-    public void setInstance(int instance) {
-        this.instance = instance;
-    }
-
-    public String getObject() {
-        return object;
-    }
-
-    public void setObject(String object) {
-        this.object = object;
-    }
-
-    public String getVariable() {
-        return variable;
-    }
-
-    public void setVariable(String variable) {
-        this.variable = variable;
-    }
-
-    public int hashCode() {
-        int hashcode = instance;
-        if(object != null) hashcode |= object.hashCode();
-        if(variable != null) hashcode |= variable.hashCode();
-        return  hashcode;
-    }
-
-    public boolean equals(Object obj) {
-        if (!(obj instanceof ModelIdentifier))
-            return false;
-
-        ModelIdentifier mobj = (ModelIdentifier)obj;
-        if ((object == null) != (mobj.object == null))
-            return false;
-        if ((variable == null) != (mobj.variable == null))
-            return false;
-        if (mobj.getInstance() != getInstance())
-            return false;
-        if (!(object == null || object.equals(mobj.object)))
-            return false;
-        if (!(variable == null || variable.equals(mobj.variable)))
-            return false;
-        return true;
-    }
-
-    public String toString() {
-        if (variable == null) {
-            return object + "[" + instance + "]";
-        } else {
-            return object + "[" + instance + "]" + "." + variable;
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/ModelInstrument.java b/ojluni/src/main/java/com/sun/media/sound/ModelInstrument.java
deleted file mode 100755
index 27e82c9..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/ModelInstrument.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, 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.media.sound;
-
-import javax.sound.midi.Instrument;
-import javax.sound.midi.MidiChannel;
-import javax.sound.midi.Patch;
-import javax.sound.midi.Soundbank;
-import javax.sound.sampled.AudioFormat;
-
-/**
- * The model instrument class.
- *
- * <p>The main methods to override are:<br>
- * getPerformer, getDirector, getChannelMixer.
- *
- * <p>Performers are used to define what voices which will
- * playback when using the instrument.<br>
- *
- * ChannelMixer is used to add channel-wide processing
- * on voices output or to define non-voice oriented instruments.<br>
- *
- * Director is used to change how the synthesizer
- * chooses what performers to play on midi events.
- *
- * @author Karl Helgason
- */
-public abstract class ModelInstrument extends Instrument {
-
-    protected ModelInstrument(Soundbank soundbank, Patch patch, String name,
-            Class<?> dataClass) {
-        super(soundbank, patch, name, dataClass);
-    }
-
-    public ModelDirector getDirector(ModelPerformer[] performers,
-            MidiChannel channel, ModelDirectedPlayer player) {
-        return new ModelStandardIndexedDirector(performers, player);
-    }
-
-    public ModelPerformer[] getPerformers() {
-        return new ModelPerformer[0];
-    }
-
-    public ModelChannelMixer getChannelMixer(MidiChannel channel,
-            AudioFormat format) {
-        return null;
-    }
-
-    // Get General MIDI 2 Alias patch for this instrument.
-    public final Patch getPatchAlias() {
-        Patch patch = getPatch();
-        int program = patch.getProgram();
-        int bank = patch.getBank();
-        if (bank != 0)
-            return patch;
-        boolean percussion = false;
-        if (getPatch() instanceof ModelPatch)
-            percussion = ((ModelPatch)getPatch()).isPercussion();
-        if (percussion)
-            return new Patch(0x78 << 7, program);
-        else
-            return new Patch(0x79 << 7, program);
-    }
-
-    // Return name of all the keys.
-    // This information is generated from ModelPerformer.getName()
-    // returned from getPerformers().
-    public final String[] getKeys() {
-        String[] keys = new String[128];
-        for (ModelPerformer performer : getPerformers()) {
-            for (int k = performer.getKeyFrom(); k <= performer.getKeyTo(); k++) {
-                if (k >= 0 && k < 128 && keys[k] == null) {
-                    String name = performer.getName();
-                    if (name == null)
-                        name = "untitled";
-                    keys[k] = name;
-                }
-            }
-        }
-        return keys;
-    }
-
-    // Return what channels this instrument will probably response
-    // on General MIDI synthesizer.
-    public final boolean[] getChannels() {
-        boolean percussion = false;
-        if (getPatch() instanceof ModelPatch)
-            percussion = ((ModelPatch)getPatch()).isPercussion();
-
-        // Check if instrument is percussion.
-        if (percussion) {
-            boolean[] ch = new boolean[16];
-            for (int i = 0; i < ch.length; i++)
-                ch[i] = false;
-            ch[9] = true;
-            return ch;
-        }
-
-        // Check if instrument uses General MIDI 2 default banks.
-        int bank = getPatch().getBank();
-        if (bank >> 7 == 0x78 || bank >> 7 == 0x79) {
-            boolean[] ch = new boolean[16];
-            for (int i = 0; i < ch.length; i++)
-                ch[i] = true;
-            return ch;
-        }
-
-        boolean[] ch = new boolean[16];
-        for (int i = 0; i < ch.length; i++)
-            ch[i] = true;
-        ch[9] = false;
-        return ch;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/ModelInstrumentComparator.java b/ojluni/src/main/java/com/sun/media/sound/ModelInstrumentComparator.java
deleted file mode 100755
index 3eb68d9..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/ModelInstrumentComparator.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, 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.media.sound;
-
-import java.util.Comparator;
-import javax.sound.midi.Instrument;
-import javax.sound.midi.Patch;
-
-/**
- * Instrument comparator class.
- * Used to order instrument by program, bank, percussion.
- *
- * @author Karl Helgason
- */
-public final class ModelInstrumentComparator implements Comparator<Instrument> {
-
-    public int compare(Instrument arg0, Instrument arg1) {
-        Patch p0 = arg0.getPatch();
-        Patch p1 = arg1.getPatch();
-        int a = p0.getBank() * 128 + p0.getProgram();
-        int b = p1.getBank() * 128 + p1.getProgram();
-        if (p0 instanceof ModelPatch) {
-            a += ((ModelPatch)p0).isPercussion() ? 2097152 : 0;
-        }
-        if (p1 instanceof ModelPatch) {
-            b += ((ModelPatch)p1).isPercussion() ? 2097152 : 0;
-        }
-        return a - b;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/ModelMappedInstrument.java b/ojluni/src/main/java/com/sun/media/sound/ModelMappedInstrument.java
deleted file mode 100755
index ed0e978..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/ModelMappedInstrument.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, 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.media.sound;
-
-import javax.sound.midi.MidiChannel;
-import javax.sound.midi.Patch;
-import javax.sound.sampled.AudioFormat;
-
-/**
- * This class is used to map instrument to another patch.
- *
- * @author Karl Helgason
- */
-public final class ModelMappedInstrument extends ModelInstrument {
-
-    private final ModelInstrument ins;
-
-    public ModelMappedInstrument(ModelInstrument ins, Patch patch) {
-        super(ins.getSoundbank(), patch, ins.getName(), ins.getDataClass());
-        this.ins = ins;
-    }
-
-    public Object getData() {
-        return ins.getData();
-    }
-
-    public ModelPerformer[] getPerformers() {
-        return ins.getPerformers();
-    }
-
-    public ModelDirector getDirector(ModelPerformer[] performers,
-            MidiChannel channel, ModelDirectedPlayer player) {
-        return ins.getDirector(performers, channel, player);
-    }
-
-    public ModelChannelMixer getChannelMixer(MidiChannel channel,
-            AudioFormat format) {
-        return ins.getChannelMixer(channel, format);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/ModelOscillator.java b/ojluni/src/main/java/com/sun/media/sound/ModelOscillator.java
deleted file mode 100755
index a00409c..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/ModelOscillator.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (c) 2007, 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.media.sound;
-
-/**
- * This interface is used for oscillators.
- * See example in ModelDefaultOscillator which is a wavetable oscillator.
- *
- * @author Karl Helgason
- */
-public interface ModelOscillator {
-
-    public int getChannels();
-
-    /**
-     * Attenuation is in cB.
-     * @return
-     */
-    public float getAttenuation();
-
-    public ModelOscillatorStream open(float samplerate);
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/ModelOscillatorStream.java b/ojluni/src/main/java/com/sun/media/sound/ModelOscillatorStream.java
deleted file mode 100755
index 762905d..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/ModelOscillatorStream.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 2007, 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.media.sound;
-
-import java.io.IOException;
-import javax.sound.midi.MidiChannel;
-import javax.sound.midi.VoiceStatus;
-
-/**
- * This interface is used for audio streams from ModelOscillator.
- *
- * @author Karl Helgason
- */
-public interface ModelOscillatorStream {
-
-    public void setPitch(float pitch); // Pitch is in cents!
-
-    public void noteOn(MidiChannel channel, VoiceStatus voice, int noteNumber,
-            int velocity);
-
-    public void noteOff(int velocity);
-
-    public int read(float[][] buffer, int offset, int len) throws IOException;
-
-    public void close() throws IOException;
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/ModelPatch.java b/ojluni/src/main/java/com/sun/media/sound/ModelPatch.java
deleted file mode 100755
index d8cfc61..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/ModelPatch.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, 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.media.sound;
-
-import javax.sound.midi.Patch;
-
-/**
- * A extended patch object that has isPercussion function.
- * Which is necessary to identify percussion instruments
- * from melodic instruments.
- *
- * @author Karl Helgason
- */
-public final class ModelPatch extends Patch {
-
-    private boolean percussion = false;
-
-    public ModelPatch(int bank, int program) {
-        super(bank, program);
-    }
-
-    public ModelPatch(int bank, int program, boolean percussion) {
-        super(bank, program);
-        this.percussion = percussion;
-    }
-
-    public boolean isPercussion() {
-        return percussion;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/ModelPerformer.java b/ojluni/src/main/java/com/sun/media/sound/ModelPerformer.java
deleted file mode 100755
index 661070c..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/ModelPerformer.java
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, 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.media.sound;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * This class is used to define how to synthesize audio in universal maner
- * for both SF2 and DLS instruments.
- *
- * @author Karl Helgason
- */
-public final class ModelPerformer {
-
-    private final List<ModelOscillator> oscillators = new ArrayList<ModelOscillator>();
-    private List<ModelConnectionBlock> connectionBlocks
-            = new ArrayList<ModelConnectionBlock>();
-    private int keyFrom = 0;
-    private int keyTo = 127;
-    private int velFrom = 0;
-    private int velTo = 127;
-    private int exclusiveClass = 0;
-    private boolean releaseTrigger = false;
-    private boolean selfNonExclusive = false;
-    private Object userObject = null;
-    private boolean addDefaultConnections = true;
-    private String name = null;
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public List<ModelConnectionBlock> getConnectionBlocks() {
-        return connectionBlocks;
-    }
-
-    public void setConnectionBlocks(List<ModelConnectionBlock> connectionBlocks) {
-        this.connectionBlocks = connectionBlocks;
-    }
-
-    public List<ModelOscillator> getOscillators() {
-        return oscillators;
-    }
-
-    public int getExclusiveClass() {
-        return exclusiveClass;
-    }
-
-    public void setExclusiveClass(int exclusiveClass) {
-        this.exclusiveClass = exclusiveClass;
-    }
-
-    public boolean isSelfNonExclusive() {
-        return selfNonExclusive;
-    }
-
-    public void setSelfNonExclusive(boolean selfNonExclusive) {
-        this.selfNonExclusive = selfNonExclusive;
-    }
-
-    public int getKeyFrom() {
-        return keyFrom;
-    }
-
-    public void setKeyFrom(int keyFrom) {
-        this.keyFrom = keyFrom;
-    }
-
-    public int getKeyTo() {
-        return keyTo;
-    }
-
-    public void setKeyTo(int keyTo) {
-        this.keyTo = keyTo;
-    }
-
-    public int getVelFrom() {
-        return velFrom;
-    }
-
-    public void setVelFrom(int velFrom) {
-        this.velFrom = velFrom;
-    }
-
-    public int getVelTo() {
-        return velTo;
-    }
-
-    public void setVelTo(int velTo) {
-        this.velTo = velTo;
-    }
-
-    public boolean isReleaseTriggered() {
-        return releaseTrigger;
-    }
-
-    public void setReleaseTriggered(boolean value) {
-        this.releaseTrigger = value;
-    }
-
-    public Object getUserObject() {
-        return userObject;
-    }
-
-    public void setUserObject(Object object) {
-        userObject = object;
-    }
-
-    public boolean isDefaultConnectionsEnabled() {
-        return addDefaultConnections;
-    }
-
-    public void setDefaultConnectionsEnabled(boolean addDefaultConnections) {
-        this.addDefaultConnections = addDefaultConnections;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/ModelSource.java b/ojluni/src/main/java/com/sun/media/sound/ModelSource.java
deleted file mode 100755
index f64f9c8..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/ModelSource.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, 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.media.sound;
-
-/**
- * This class is used to identify sources in connection blocks,
- * see ModelConnectionBlock.
- *
- * @author Karl Helgason
- */
-public final class ModelSource {
-
-    public static final ModelIdentifier SOURCE_NONE = null;
-    public static final ModelIdentifier SOURCE_NOTEON_KEYNUMBER =
-            new ModelIdentifier("noteon", "keynumber");     // midi keynumber
-    public static final ModelIdentifier SOURCE_NOTEON_VELOCITY =
-            new ModelIdentifier("noteon", "velocity");      // midi velocity
-    public static final ModelIdentifier SOURCE_EG1 =
-            new ModelIdentifier("eg", null, 0);
-    public static final ModelIdentifier SOURCE_EG2 =
-            new ModelIdentifier("eg", null, 1);
-    public static final ModelIdentifier SOURCE_LFO1 =
-            new ModelIdentifier("lfo", null, 0);
-    public static final ModelIdentifier SOURCE_LFO2 =
-            new ModelIdentifier("lfo", null, 1);
-    public static final ModelIdentifier SOURCE_MIDI_PITCH =
-            new ModelIdentifier("midi", "pitch", 0);            // (0..16383)
-    public static final ModelIdentifier SOURCE_MIDI_CHANNEL_PRESSURE =
-            new ModelIdentifier("midi", "channel_pressure", 0); // (0..127)
-//    public static final ModelIdentifier SOURCE_MIDI_MONO_PRESSURE =
-//            new ModelIdentifier("midi","mono_pressure",0);    // (0..127)
-    public static final ModelIdentifier SOURCE_MIDI_POLY_PRESSURE =
-            new ModelIdentifier("midi", "poly_pressure", 0);    // (0..127)
-    public static final ModelIdentifier SOURCE_MIDI_CC_0 =
-            new ModelIdentifier("midi_cc", "0", 0);             // (0..127)
-    public static final ModelIdentifier SOURCE_MIDI_RPN_0 =
-            new ModelIdentifier("midi_rpn", "0", 0);            // (0..16383)
-    private ModelIdentifier source = SOURCE_NONE;
-    private ModelTransform transform;
-
-    public ModelSource() {
-        this.transform = new ModelStandardTransform();
-    }
-
-    public ModelSource(ModelIdentifier id) {
-        source = id;
-        this.transform = new ModelStandardTransform();
-    }
-
-    public ModelSource(ModelIdentifier id, boolean direction) {
-        source = id;
-        this.transform = new ModelStandardTransform(direction);
-    }
-
-    public ModelSource(ModelIdentifier id, boolean direction, boolean polarity) {
-        source = id;
-        this.transform = new ModelStandardTransform(direction, polarity);
-    }
-
-    public ModelSource(ModelIdentifier id, boolean direction, boolean polarity,
-            int transform) {
-        source = id;
-        this.transform =
-                new ModelStandardTransform(direction, polarity, transform);
-    }
-
-    public ModelSource(ModelIdentifier id, ModelTransform transform) {
-        source = id;
-        this.transform = transform;
-    }
-
-    public ModelIdentifier getIdentifier() {
-        return source;
-    }
-
-    public void setIdentifier(ModelIdentifier source) {
-        this.source = source;
-    }
-
-    public ModelTransform getTransform() {
-        return transform;
-    }
-
-    public void setTransform(ModelTransform transform) {
-        this.transform = transform;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/ModelStandardDirector.java b/ojluni/src/main/java/com/sun/media/sound/ModelStandardDirector.java
deleted file mode 100755
index e64d94c..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/ModelStandardDirector.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, 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.media.sound;
-
-/**
- * A standard director who chooses performers
- * by there keyfrom,keyto,velfrom,velto properties.
- *
- * @author Karl Helgason
- */
-public final class ModelStandardDirector implements ModelDirector {
-
-    ModelPerformer[] performers;
-    ModelDirectedPlayer player;
-    boolean noteOnUsed = false;
-    boolean noteOffUsed = false;
-
-    public ModelStandardDirector(ModelPerformer[] performers,
-            ModelDirectedPlayer player) {
-        this.performers = performers;
-        this.player = player;
-        for (int i = 0; i < performers.length; i++) {
-            ModelPerformer p = performers[i];
-            if (p.isReleaseTriggered()) {
-                noteOffUsed = true;
-            } else {
-                noteOnUsed = true;
-            }
-        }
-    }
-
-    public void close() {
-    }
-
-    public void noteOff(int noteNumber, int velocity) {
-        if (!noteOffUsed)
-            return;
-        for (int i = 0; i < performers.length; i++) {
-            ModelPerformer p = performers[i];
-            if (p.getKeyFrom() <= noteNumber && p.getKeyTo() >= noteNumber) {
-                if (p.getVelFrom() <= velocity && p.getVelTo() >= velocity) {
-                    if (p.isReleaseTriggered()) {
-                        player.play(i, null);
-                    }
-                }
-            }
-        }
-    }
-
-    public void noteOn(int noteNumber, int velocity) {
-        if (!noteOnUsed)
-            return;
-        for (int i = 0; i < performers.length; i++) {
-            ModelPerformer p = performers[i];
-            if (p.getKeyFrom() <= noteNumber && p.getKeyTo() >= noteNumber) {
-                if (p.getVelFrom() <= velocity && p.getVelTo() >= velocity) {
-                    if (!p.isReleaseTriggered()) {
-                        player.play(i, null);
-                    }
-                }
-            }
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/ModelStandardIndexedDirector.java b/ojluni/src/main/java/com/sun/media/sound/ModelStandardIndexedDirector.java
deleted file mode 100755
index a5171eb..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/ModelStandardIndexedDirector.java
+++ /dev/null
@@ -1,186 +0,0 @@
-/*
- * Copyright (c) 2010, 2013, 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.media.sound;
-
-/**
- * A standard indexed director who chooses performers
- * by there keyfrom,keyto,velfrom,velto properties.
- *
- * @author Karl Helgason
- */
-public final class ModelStandardIndexedDirector implements ModelDirector {
-
-    ModelPerformer[] performers;
-    ModelDirectedPlayer player;
-    boolean noteOnUsed = false;
-    boolean noteOffUsed = false;
-
-    // Variables needed for index
-    byte[][] trantables;
-    int[] counters;
-    int[][] mat;
-
-    public ModelStandardIndexedDirector(ModelPerformer[] performers,
-            ModelDirectedPlayer player) {
-        this.performers = performers;
-        this.player = player;
-        for (int i = 0; i < performers.length; i++) {
-            ModelPerformer p = performers[i];
-            if (p.isReleaseTriggered()) {
-                noteOffUsed = true;
-            } else {
-                noteOnUsed = true;
-            }
-        }
-        buildindex();
-    }
-
-    private int[] lookupIndex(int x, int y) {
-        if ((x >= 0) && (x < 128) && (y >= 0) && (y < 128)) {
-            int xt = trantables[0][x];
-            int yt = trantables[1][y];
-            if (xt != -1 && yt != -1) {
-                return mat[xt + yt * counters[0]];
-            }
-        }
-        return null;
-    }
-
-    private int restrict(int value) {
-        if(value < 0) return 0;
-        if(value > 127) return 127;
-        return value;
-    }
-
-    private void buildindex() {
-        trantables = new byte[2][129];
-        counters = new int[trantables.length];
-        for (ModelPerformer performer : performers) {
-            int keyFrom = performer.getKeyFrom();
-            int keyTo = performer.getKeyTo();
-            int velFrom = performer.getVelFrom();
-            int velTo = performer.getVelTo();
-            if (keyFrom > keyTo) continue;
-            if (velFrom > velTo) continue;
-            keyFrom = restrict(keyFrom);
-            keyTo = restrict(keyTo);
-            velFrom = restrict(velFrom);
-            velTo = restrict(velTo);
-            trantables[0][keyFrom] = 1;
-            trantables[0][keyTo + 1] = 1;
-            trantables[1][velFrom] = 1;
-            trantables[1][velTo + 1] = 1;
-        }
-        for (int d = 0; d < trantables.length; d++) {
-            byte[] trantable = trantables[d];
-            int transize = trantable.length;
-            for (int i = transize - 1; i >= 0; i--) {
-                if (trantable[i] == 1) {
-                    trantable[i] = -1;
-                    break;
-                }
-                trantable[i] = -1;
-            }
-            int counter = -1;
-            for (int i = 0; i < transize; i++) {
-                if (trantable[i] != 0) {
-                    counter++;
-                    if (trantable[i] == -1)
-                        break;
-                }
-                trantable[i] = (byte) counter;
-            }
-            counters[d] = counter;
-        }
-        mat = new int[counters[0] * counters[1]][];
-        int ix = 0;
-        for (ModelPerformer performer : performers) {
-            int keyFrom = performer.getKeyFrom();
-            int keyTo = performer.getKeyTo();
-            int velFrom = performer.getVelFrom();
-            int velTo = performer.getVelTo();
-            if (keyFrom > keyTo) continue;
-            if (velFrom > velTo) continue;
-            keyFrom = restrict(keyFrom);
-            keyTo = restrict(keyTo);
-            velFrom = restrict(velFrom);
-            velTo = restrict(velTo);
-            int x_from = trantables[0][keyFrom];
-            int x_to = trantables[0][keyTo + 1];
-            int y_from = trantables[1][velFrom];
-            int y_to = trantables[1][velTo + 1];
-            if (x_to == -1)
-                x_to = counters[0];
-            if (y_to == -1)
-                y_to = counters[1];
-            for (int y = y_from; y < y_to; y++) {
-                int i = x_from + y * counters[0];
-                for (int x = x_from; x < x_to; x++) {
-                    int[] mprev = mat[i];
-                    if (mprev == null) {
-                        mat[i] = new int[] { ix };
-                    } else {
-                        int[] mnew = new int[mprev.length + 1];
-                        mnew[mnew.length - 1] = ix;
-                        for (int k = 0; k < mprev.length; k++)
-                            mnew[k] = mprev[k];
-                        mat[i] = mnew;
-                    }
-                    i++;
-                }
-            }
-            ix++;
-        }
-    }
-
-    public void close() {
-    }
-
-    public void noteOff(int noteNumber, int velocity) {
-        if (!noteOffUsed)
-            return;
-        int[] plist = lookupIndex(noteNumber, velocity);
-        if(plist == null) return;
-        for (int i : plist) {
-            ModelPerformer p = performers[i];
-            if (p.isReleaseTriggered()) {
-                player.play(i, null);
-            }
-        }
-    }
-
-    public void noteOn(int noteNumber, int velocity) {
-        if (!noteOnUsed)
-            return;
-        int[] plist = lookupIndex(noteNumber, velocity);
-        if(plist == null) return;
-        for (int i : plist) {
-            ModelPerformer p = performers[i];
-            if (!p.isReleaseTriggered()) {
-                player.play(i, null);
-            }
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/ModelStandardTransform.java b/ojluni/src/main/java/com/sun/media/sound/ModelStandardTransform.java
deleted file mode 100755
index c3e7fcb..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/ModelStandardTransform.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, 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.media.sound;
-
-/**
- * A standard transformer used in connection blocks.
- * It expects input values to be between 0 and 1.
- *
- * The result of the transform is
- *   between 0 and 1 if polarity = unipolar and
- *   between -1 and 1 if polarity = bipolar.
- *
- * These constraints only applies to Concave, Convex and Switch transforms.
- *
- * @author Karl Helgason
- */
-public final class ModelStandardTransform implements ModelTransform {
-
-    public static final boolean DIRECTION_MIN2MAX = false;
-    public static final boolean DIRECTION_MAX2MIN = true;
-    public static final boolean POLARITY_UNIPOLAR = false;
-    public static final boolean POLARITY_BIPOLAR = true;
-    public static final int TRANSFORM_LINEAR = 0;
-    // concave: output = (20*log10(127^2/value^2)) / 96
-    public static final int TRANSFORM_CONCAVE = 1;
-    // convex: same as concave except that start and end point are reversed.
-    public static final int TRANSFORM_CONVEX = 2;
-    // switch: if value > avg(max,min) then max else min
-    public static final int TRANSFORM_SWITCH = 3;
-    public static final int TRANSFORM_ABSOLUTE = 4;
-    private boolean direction = DIRECTION_MIN2MAX;
-    private boolean polarity = POLARITY_UNIPOLAR;
-    private int transform = TRANSFORM_LINEAR;
-
-    public ModelStandardTransform() {
-    }
-
-    public ModelStandardTransform(boolean direction) {
-        this.direction = direction;
-    }
-
-    public ModelStandardTransform(boolean direction, boolean polarity) {
-        this.direction = direction;
-        this.polarity = polarity;
-    }
-
-    public ModelStandardTransform(boolean direction, boolean polarity,
-            int transform) {
-        this.direction = direction;
-        this.polarity = polarity;
-        this.transform = transform;
-    }
-
-    public double transform(double value) {
-        double s;
-        double a;
-        if (direction == DIRECTION_MAX2MIN)
-            value = 1.0 - value;
-        if (polarity == POLARITY_BIPOLAR)
-            value = value * 2.0 - 1.0;
-        switch (transform) {
-            case TRANSFORM_CONCAVE:
-                s = Math.signum(value);
-                a = Math.abs(value);
-                a = -((5.0 / 12.0) / Math.log(10)) * Math.log(1.0 - a);
-                if (a < 0)
-                    a = 0;
-                else if (a > 1)
-                    a = 1;
-                return s * a;
-            case TRANSFORM_CONVEX:
-                s = Math.signum(value);
-                a = Math.abs(value);
-                a = 1.0 + ((5.0 / 12.0) / Math.log(10)) * Math.log(a);
-                if (a < 0)
-                    a = 0;
-                else if (a > 1)
-                    a = 1;
-                return s * a;
-            case TRANSFORM_SWITCH:
-                if (polarity == POLARITY_BIPOLAR)
-                    return (value > 0) ? 1 : -1;
-                else
-                    return (value > 0.5) ? 1 : 0;
-            case TRANSFORM_ABSOLUTE:
-                return Math.abs(value);
-            default:
-                break;
-        }
-
-        return value;
-    }
-
-    public boolean getDirection() {
-        return direction;
-    }
-
-    public void setDirection(boolean direction) {
-        this.direction = direction;
-    }
-
-    public boolean getPolarity() {
-        return polarity;
-    }
-
-    public void setPolarity(boolean polarity) {
-        this.polarity = polarity;
-    }
-
-    public int getTransform() {
-        return transform;
-    }
-
-    public void setTransform(int transform) {
-        this.transform = transform;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/ModelTransform.java b/ojluni/src/main/java/com/sun/media/sound/ModelTransform.java
deleted file mode 100755
index f39f996..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/ModelTransform.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (c) 2007, 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.media.sound;
-
-/**
- * Model transform interface.
- *
- * @author Karl Helgason
- */
-public interface ModelTransform {
-
-    abstract public double transform(double value);
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/ModelWavetable.java b/ojluni/src/main/java/com/sun/media/sound/ModelWavetable.java
deleted file mode 100755
index 2884181..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/ModelWavetable.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (c) 2007, 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.media.sound;
-
-/**
- * This is a wavetable oscillator interface.
- *
- * @author Karl Helgason
- */
-public interface ModelWavetable extends ModelOscillator {
-
-    public static final int LOOP_TYPE_OFF = 0;
-    public static final int LOOP_TYPE_FORWARD = 1;
-    public static final int LOOP_TYPE_RELEASE = 2;
-    public static final int LOOP_TYPE_PINGPONG = 4;
-    public static final int LOOP_TYPE_REVERSE = 8;
-
-    public AudioFloatInputStream openStream();
-
-    public float getLoopLength();
-
-    public float getLoopStart();
-
-    public int getLoopType();
-
-    public float getPitchcorrection();
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/PCMtoPCMCodec.java b/ojluni/src/main/java/com/sun/media/sound/PCMtoPCMCodec.java
deleted file mode 100755
index 9a4f1a8..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/PCMtoPCMCodec.java
+++ /dev/null
@@ -1,589 +0,0 @@
-/*
- * Copyright (c) 1999, 2013, 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.media.sound;
-
-import java.io.IOException;
-import java.util.Vector;
-
-import javax.sound.sampled.AudioFormat;
-import javax.sound.sampled.AudioInputStream;
-import javax.sound.sampled.AudioSystem;
-
-
-/**
- * Converts among signed/unsigned and little/big endianness of sampled.
- *
- * @author Jan Borgersen
- */
-public final class PCMtoPCMCodec extends SunCodec {
-
-
-    private static final AudioFormat.Encoding[] inputEncodings = {
-        AudioFormat.Encoding.PCM_SIGNED,
-        AudioFormat.Encoding.PCM_UNSIGNED,
-    };
-
-    private static final AudioFormat.Encoding[] outputEncodings = {
-        AudioFormat.Encoding.PCM_SIGNED,
-        AudioFormat.Encoding.PCM_UNSIGNED,
-    };
-
-
-
-    private static final int tempBufferSize = 64;
-    private byte tempBuffer [] = null;
-
-    /**
-     * Constructs a new PCMtoPCM codec object.
-     */
-    public PCMtoPCMCodec() {
-
-        super( inputEncodings, outputEncodings);
-    }
-
-    // NEW CODE
-
-
-    /**
-     */
-    public AudioFormat.Encoding[] getTargetEncodings(AudioFormat sourceFormat){
-
-        if( sourceFormat.getEncoding().equals( AudioFormat.Encoding.PCM_SIGNED ) ||
-            sourceFormat.getEncoding().equals( AudioFormat.Encoding.PCM_UNSIGNED ) ) {
-
-                AudioFormat.Encoding encs[] = new AudioFormat.Encoding[2];
-                encs[0] = AudioFormat.Encoding.PCM_SIGNED;
-                encs[1] = AudioFormat.Encoding.PCM_UNSIGNED;
-                return encs;
-            } else {
-                return new AudioFormat.Encoding[0];
-            }
-    }
-
-
-    /**
-     */
-    public AudioFormat[] getTargetFormats(AudioFormat.Encoding targetEncoding, AudioFormat sourceFormat){
-
-        // filter out targetEncoding from the old getOutputFormats( sourceFormat ) method
-
-        AudioFormat[] formats = getOutputFormats( sourceFormat );
-        Vector newFormats = new Vector();
-        for(int i=0; i<formats.length; i++ ) {
-            if( formats[i].getEncoding().equals( targetEncoding ) ) {
-                newFormats.addElement( formats[i] );
-            }
-        }
-
-        AudioFormat[] formatArray = new AudioFormat[newFormats.size()];
-
-        for (int i = 0; i < formatArray.length; i++) {
-            formatArray[i] = (AudioFormat)(newFormats.elementAt(i));
-        }
-
-        return formatArray;
-    }
-
-
-    /**
-     */
-    public AudioInputStream getAudioInputStream(AudioFormat.Encoding targetEncoding, AudioInputStream sourceStream) {
-
-        if( isConversionSupported(targetEncoding, sourceStream.getFormat()) ) {
-
-            AudioFormat sourceFormat = sourceStream.getFormat();
-            AudioFormat targetFormat = new AudioFormat( targetEncoding,
-                                                        sourceFormat.getSampleRate(),
-                                                        sourceFormat.getSampleSizeInBits(),
-                                                        sourceFormat.getChannels(),
-                                                        sourceFormat.getFrameSize(),
-                                                        sourceFormat.getFrameRate(),
-                                                        sourceFormat.isBigEndian() );
-
-            return getAudioInputStream( targetFormat, sourceStream );
-
-        } else {
-            throw new IllegalArgumentException("Unsupported conversion: " + sourceStream.getFormat().toString() + " to " + targetEncoding.toString() );
-        }
-
-    }
-    /**
-     * use old code
-     */
-    public AudioInputStream getAudioInputStream(AudioFormat targetFormat, AudioInputStream sourceStream){
-
-        return getConvertedStream( targetFormat, sourceStream );
-    }
-
-
-
-
-    // OLD CODE
-
-    /**
-     * Opens the codec with the specified parameters.
-     * @param stream stream from which data to be processed should be read
-     * @param outputFormat desired data format of the stream after processing
-     * @return stream from which processed data may be read
-     * @throws IllegalArgumentException if the format combination supplied is
-     * not supported.
-     */
-    /*  public AudioInputStream getConvertedStream(AudioFormat outputFormat, AudioInputStream stream) {*/
-    private AudioInputStream getConvertedStream(AudioFormat outputFormat, AudioInputStream stream) {
-
-        AudioInputStream cs = null;
-
-        AudioFormat inputFormat = stream.getFormat();
-
-        if( inputFormat.matches(outputFormat) ) {
-
-            cs = stream;
-        } else {
-
-            cs = (AudioInputStream) (new PCMtoPCMCodecStream(stream, outputFormat));
-            tempBuffer = new byte[tempBufferSize];
-        }
-        return cs;
-    }
-
-
-
-    /**
-     * Obtains the set of output formats supported by the codec
-     * given a particular input format.
-     * If no output formats are supported for this input format,
-     * returns an array of length 0.
-     * @return array of supported output formats.
-     */
-    /*  public AudioFormat[] getOutputFormats(AudioFormat inputFormat) { */
-    private AudioFormat[] getOutputFormats(AudioFormat inputFormat) {
-
-        Vector formats = new Vector();
-        AudioFormat format;
-
-        int sampleSize = inputFormat.getSampleSizeInBits();
-        boolean isBigEndian = inputFormat.isBigEndian();
-
-
-        if ( sampleSize==8 ) {
-            if ( AudioFormat.Encoding.PCM_SIGNED.equals(inputFormat.getEncoding()) ) {
-
-                format = new AudioFormat(AudioFormat.Encoding.PCM_UNSIGNED,
-                                         inputFormat.getSampleRate(),
-                                         inputFormat.getSampleSizeInBits(),
-                                         inputFormat.getChannels(),
-                                         inputFormat.getFrameSize(),
-                                         inputFormat.getFrameRate(),
-                                         false );
-                formats.addElement(format);
-            }
-
-            if ( AudioFormat.Encoding.PCM_UNSIGNED.equals(inputFormat.getEncoding()) ) {
-
-                format = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,
-                                         inputFormat.getSampleRate(),
-                                         inputFormat.getSampleSizeInBits(),
-                                         inputFormat.getChannels(),
-                                         inputFormat.getFrameSize(),
-                                         inputFormat.getFrameRate(),
-                                         false );
-                formats.addElement(format);
-            }
-
-        } else if ( sampleSize==16 ) {
-
-            if ( AudioFormat.Encoding.PCM_SIGNED.equals(inputFormat.getEncoding()) && isBigEndian ) {
-
-                format = new AudioFormat(AudioFormat.Encoding.PCM_UNSIGNED,
-                                         inputFormat.getSampleRate(),
-                                         inputFormat.getSampleSizeInBits(),
-                                         inputFormat.getChannels(),
-                                         inputFormat.getFrameSize(),
-                                         inputFormat.getFrameRate(),
-                                         true );
-                formats.addElement(format);
-                format = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,
-                                         inputFormat.getSampleRate(),
-                                         inputFormat.getSampleSizeInBits(),
-                                         inputFormat.getChannels(),
-                                         inputFormat.getFrameSize(),
-                                         inputFormat.getFrameRate(),
-                                         false );
-                formats.addElement(format);
-                format = new AudioFormat(AudioFormat.Encoding.PCM_UNSIGNED,
-                                         inputFormat.getSampleRate(),
-                                         inputFormat.getSampleSizeInBits(),
-                                         inputFormat.getChannels(),
-                                         inputFormat.getFrameSize(),
-                                         inputFormat.getFrameRate(),
-                                         false );
-                formats.addElement(format);
-            }
-
-            if ( AudioFormat.Encoding.PCM_UNSIGNED.equals(inputFormat.getEncoding()) && isBigEndian ) {
-
-                format = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,
-                                         inputFormat.getSampleRate(),
-                                         inputFormat.getSampleSizeInBits(),
-                                         inputFormat.getChannels(),
-                                         inputFormat.getFrameSize(),
-                                         inputFormat.getFrameRate(),
-                                         true );
-                formats.addElement(format);
-                format = new AudioFormat(AudioFormat.Encoding.PCM_UNSIGNED,
-                                         inputFormat.getSampleRate(),
-                                         inputFormat.getSampleSizeInBits(),
-                                         inputFormat.getChannels(),
-                                         inputFormat.getFrameSize(),
-                                         inputFormat.getFrameRate(),
-                                         false );
-                formats.addElement(format);
-                format = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,
-                                         inputFormat.getSampleRate(),
-                                         inputFormat.getSampleSizeInBits(),
-                                         inputFormat.getChannels(),
-                                         inputFormat.getFrameSize(),
-                                         inputFormat.getFrameRate(),
-                                         false );
-                formats.addElement(format);
-            }
-
-            if ( AudioFormat.Encoding.PCM_SIGNED.equals(inputFormat.getEncoding()) && !isBigEndian ) {
-
-                format = new AudioFormat(AudioFormat.Encoding.PCM_UNSIGNED,
-                                         inputFormat.getSampleRate(),
-                                         inputFormat.getSampleSizeInBits(),
-                                         inputFormat.getChannels(),
-                                         inputFormat.getFrameSize(),
-                                         inputFormat.getFrameRate(),
-                                         false );
-                formats.addElement(format);
-                format = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,
-                                         inputFormat.getSampleRate(),
-                                         inputFormat.getSampleSizeInBits(),
-                                         inputFormat.getChannels(),
-                                         inputFormat.getFrameSize(),
-                                         inputFormat.getFrameRate(),
-                                         true );
-                formats.addElement(format);
-                format = new AudioFormat(AudioFormat.Encoding.PCM_UNSIGNED,
-                                         inputFormat.getSampleRate(),
-                                         inputFormat.getSampleSizeInBits(),
-                                         inputFormat.getChannels(),
-                                         inputFormat.getFrameSize(),
-                                         inputFormat.getFrameRate(),
-                                         true );
-                formats.addElement(format);
-            }
-
-            if ( AudioFormat.Encoding.PCM_UNSIGNED.equals(inputFormat.getEncoding()) && !isBigEndian ) {
-
-                format = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,
-                                         inputFormat.getSampleRate(),
-                                         inputFormat.getSampleSizeInBits(),
-                                         inputFormat.getChannels(),
-                                         inputFormat.getFrameSize(),
-                                         inputFormat.getFrameRate(),
-                                         false );
-                formats.addElement(format);
-                format = new AudioFormat(AudioFormat.Encoding.PCM_UNSIGNED,
-                                         inputFormat.getSampleRate(),
-                                         inputFormat.getSampleSizeInBits(),
-                                         inputFormat.getChannels(),
-                                         inputFormat.getFrameSize(),
-                                         inputFormat.getFrameRate(),
-                                         true );
-                formats.addElement(format);
-                format = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,
-                                         inputFormat.getSampleRate(),
-                                         inputFormat.getSampleSizeInBits(),
-                                         inputFormat.getChannels(),
-                                         inputFormat.getFrameSize(),
-                                         inputFormat.getFrameRate(),
-                                         true );
-                formats.addElement(format);
-            }
-        }
-        AudioFormat[] formatArray;
-
-        synchronized(formats) {
-
-            formatArray = new AudioFormat[formats.size()];
-
-            for (int i = 0; i < formatArray.length; i++) {
-
-                formatArray[i] = (AudioFormat)(formats.elementAt(i));
-            }
-        }
-
-        return formatArray;
-    }
-
-
-    class PCMtoPCMCodecStream extends AudioInputStream {
-
-        private final int PCM_SWITCH_SIGNED_8BIT                = 1;
-        private final int PCM_SWITCH_ENDIAN                             = 2;
-        private final int PCM_SWITCH_SIGNED_LE                  = 3;
-        private final int PCM_SWITCH_SIGNED_BE                  = 4;
-        private final int PCM_UNSIGNED_LE2SIGNED_BE             = 5;
-        private final int PCM_SIGNED_LE2UNSIGNED_BE             = 6;
-        private final int PCM_UNSIGNED_BE2SIGNED_LE             = 7;
-        private final int PCM_SIGNED_BE2UNSIGNED_LE             = 8;
-
-        private final int sampleSizeInBytes;
-        private int conversionType = 0;
-
-
-        PCMtoPCMCodecStream(AudioInputStream stream, AudioFormat outputFormat) {
-
-            super(stream, outputFormat, -1);
-
-            int sampleSizeInBits = 0;
-            AudioFormat.Encoding inputEncoding = null;
-            AudioFormat.Encoding outputEncoding = null;
-            boolean inputIsBigEndian;
-            boolean outputIsBigEndian;
-
-            AudioFormat inputFormat = stream.getFormat();
-
-            // throw an IllegalArgumentException if not ok
-            if ( ! (isConversionSupported(inputFormat, outputFormat)) ) {
-
-                throw new IllegalArgumentException("Unsupported conversion: " + inputFormat.toString() + " to " + outputFormat.toString());
-            }
-
-            inputEncoding = inputFormat.getEncoding();
-            outputEncoding = outputFormat.getEncoding();
-            inputIsBigEndian = inputFormat.isBigEndian();
-            outputIsBigEndian = outputFormat.isBigEndian();
-            sampleSizeInBits = inputFormat.getSampleSizeInBits();
-            sampleSizeInBytes = sampleSizeInBits/8;
-
-            // determine conversion to perform
-
-            if( sampleSizeInBits==8 ) {
-                if( AudioFormat.Encoding.PCM_UNSIGNED.equals(inputEncoding) &&
-                    AudioFormat.Encoding.PCM_SIGNED.equals(outputEncoding) ) {
-                    conversionType = PCM_SWITCH_SIGNED_8BIT;
-                    if(Printer.debug) Printer.debug("PCMtoPCMCodecStream: conversionType = PCM_SWITCH_SIGNED_8BIT");
-
-                } else if( AudioFormat.Encoding.PCM_SIGNED.equals(inputEncoding) &&
-                           AudioFormat.Encoding.PCM_UNSIGNED.equals(outputEncoding) ) {
-                    conversionType = PCM_SWITCH_SIGNED_8BIT;
-                    if(Printer.debug) Printer.debug("PCMtoPCMCodecStream: conversionType = PCM_SWITCH_SIGNED_8BIT");
-                }
-            } else {
-
-                if( inputEncoding.equals(outputEncoding) && (inputIsBigEndian != outputIsBigEndian) ) {
-
-                    conversionType = PCM_SWITCH_ENDIAN;
-                    if(Printer.debug) Printer.debug("PCMtoPCMCodecStream: conversionType = PCM_SWITCH_ENDIAN");
-
-
-                } else if (AudioFormat.Encoding.PCM_UNSIGNED.equals(inputEncoding) && !inputIsBigEndian &&
-                            AudioFormat.Encoding.PCM_SIGNED.equals(outputEncoding) && outputIsBigEndian) {
-
-                    conversionType = PCM_UNSIGNED_LE2SIGNED_BE;
-                    if(Printer.debug) Printer.debug("PCMtoPCMCodecStream: conversionType = PCM_UNSIGNED_LE2SIGNED_BE");
-
-                } else if (AudioFormat.Encoding.PCM_SIGNED.equals(inputEncoding) && !inputIsBigEndian &&
-                           AudioFormat.Encoding.PCM_UNSIGNED.equals(outputEncoding) && outputIsBigEndian) {
-
-                    conversionType = PCM_SIGNED_LE2UNSIGNED_BE;
-                    if(Printer.debug) Printer.debug("PCMtoPCMCodecStream: conversionType = PCM_SIGNED_LE2UNSIGNED_BE");
-
-                } else if (AudioFormat.Encoding.PCM_UNSIGNED.equals(inputEncoding) && inputIsBigEndian &&
-                           AudioFormat.Encoding.PCM_SIGNED.equals(outputEncoding) && !outputIsBigEndian) {
-
-                    conversionType = PCM_UNSIGNED_BE2SIGNED_LE;
-                    if(Printer.debug) Printer.debug("PCMtoPCMCodecStream: conversionType = PCM_UNSIGNED_BE2SIGNED_LE");
-
-                } else if (AudioFormat.Encoding.PCM_SIGNED.equals(inputEncoding) && inputIsBigEndian &&
-                           AudioFormat.Encoding.PCM_UNSIGNED.equals(outputEncoding) && !outputIsBigEndian) {
-
-                    conversionType = PCM_SIGNED_BE2UNSIGNED_LE;
-                    if(Printer.debug) Printer.debug("PCMtoPCMCodecStream: conversionType = PCM_SIGNED_BE2UNSIGNED_LE");
-
-                }
-            }
-
-            // set the audio stream length in frames if we know it
-
-            frameSize = inputFormat.getFrameSize();
-            if( frameSize == AudioSystem.NOT_SPECIFIED ) {
-                frameSize=1;
-            }
-            if( stream instanceof AudioInputStream ) {
-                frameLength = stream.getFrameLength();
-            } else {
-                frameLength = AudioSystem.NOT_SPECIFIED;
-            }
-
-            // set framePos to zero
-            framePos = 0;
-
-        }
-
-        /**
-         * Note that this only works for sign conversions.
-         * Other conversions require a read of at least 2 bytes.
-         */
-
-        public int read() throws IOException {
-
-            // $$jb: do we want to implement this function?
-
-            int temp;
-            byte tempbyte;
-
-            if( frameSize==1 ) {
-                if( conversionType == PCM_SWITCH_SIGNED_8BIT ) {
-                    temp = super.read();
-
-                    if( temp < 0 ) return temp;         // EOF or error
-
-                    tempbyte = (byte) (temp & 0xf);
-                    tempbyte = (tempbyte >= 0) ? (byte)(0x80 | tempbyte) : (byte)(0x7F & tempbyte);
-                    temp = (int) tempbyte & 0xf;
-
-                    return temp;
-
-                } else {
-                    // $$jb: what to return here?
-                    throw new IOException("cannot read a single byte if frame size > 1");
-                }
-            } else {
-                throw new IOException("cannot read a single byte if frame size > 1");
-            }
-        }
-
-
-        public int read(byte[] b) throws IOException {
-
-            return read(b, 0, b.length);
-        }
-
-        public int read(byte[] b, int off, int len) throws IOException {
-
-
-            int i;
-
-            // don't read fractional frames
-            if ( len%frameSize != 0 ) {
-                len -= (len%frameSize);
-            }
-            // don't read past our own set length
-            if( (frameLength!=AudioSystem.NOT_SPECIFIED) && ( (len/frameSize) >(frameLength-framePos)) ) {
-                len = (int)(frameLength-framePos) * frameSize;
-            }
-
-            int readCount = super.read(b, off, len);
-            byte tempByte;
-
-            if(readCount<0) {   // EOF or error
-                return readCount;
-            }
-
-            // now do the conversions
-
-            switch( conversionType ) {
-
-            case PCM_SWITCH_SIGNED_8BIT:
-                switchSigned8bit(b,off,len,readCount);
-                break;
-
-            case PCM_SWITCH_ENDIAN:
-                switchEndian(b,off,len,readCount);
-                break;
-
-            case PCM_SWITCH_SIGNED_LE:
-                switchSignedLE(b,off,len,readCount);
-                break;
-
-            case PCM_SWITCH_SIGNED_BE:
-                switchSignedBE(b,off,len,readCount);
-                break;
-
-            case PCM_UNSIGNED_LE2SIGNED_BE:
-            case PCM_SIGNED_LE2UNSIGNED_BE:
-                switchSignedLE(b,off,len,readCount);
-                switchEndian(b,off,len,readCount);
-                break;
-
-            case PCM_UNSIGNED_BE2SIGNED_LE:
-            case PCM_SIGNED_BE2UNSIGNED_LE:
-                switchSignedBE(b,off,len,readCount);
-                switchEndian(b,off,len,readCount);
-                break;
-
-            default:
-                                // do nothing
-            }
-
-            // we've done the conversion, just return the readCount
-            return readCount;
-
-        }
-
-        private void switchSigned8bit(byte[] b, int off, int len, int readCount) {
-
-            for(int i=off; i < (off+readCount); i++) {
-                b[i] = (b[i] >= 0) ? (byte)(0x80 | b[i]) : (byte)(0x7F & b[i]);
-            }
-        }
-
-        private void switchSignedBE(byte[] b, int off, int len, int readCount) {
-
-            for(int i=off; i < (off+readCount); i+= sampleSizeInBytes ) {
-                b[i] = (b[i] >= 0) ? (byte)(0x80 | b[i]) : (byte)(0x7F & b[i]);
-            }
-        }
-
-        private void switchSignedLE(byte[] b, int off, int len, int readCount) {
-
-            for(int i=(off+sampleSizeInBytes-1); i < (off+readCount); i+= sampleSizeInBytes ) {
-                b[i] = (b[i] >= 0) ? (byte)(0x80 | b[i]) : (byte)(0x7F & b[i]);
-            }
-        }
-
-        private void switchEndian(byte[] b, int off, int len, int readCount) {
-
-            if(sampleSizeInBytes == 2) {
-                for(int i=off; i < (off+readCount); i += sampleSizeInBytes ) {
-                    byte temp;
-                    temp = b[i];
-                    b[i] = b[i+1];
-                    b[i+1] = temp;
-                }
-            }
-        }
-
-
-
-    } // end class PCMtoPCMCodecStream
-
-} // end class PCMtoPCMCodec
diff --git a/ojluni/src/main/java/com/sun/media/sound/Platform.java b/ojluni/src/main/java/com/sun/media/sound/Platform.java
deleted file mode 100755
index 766e485..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/Platform.java
+++ /dev/null
@@ -1,245 +0,0 @@
-/*
- * Copyright (c) 1999, 2013, 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.media.sound;
-
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import java.util.StringTokenizer;
-
-
-
-/**
- * Audio configuration class for exposing attributes specific to the platform or system.
- *
- * @author Kara Kytle
- * @author Florian Bomers
- */
-final class Platform {
-
-
-    // STATIC FINAL CHARACTERISTICS
-
-    // native library we need to load
-    private static final String libNameMain     = "jsound";
-    private static final String libNameALSA     = "jsoundalsa";
-    private static final String libNameDSound   = "jsoundds";
-
-    // extra libs handling: bit flags for each different library
-    public static final int LIB_MAIN     = 1;
-    public static final int LIB_ALSA     = 2;
-    public static final int LIB_DSOUND   = 4;
-
-    // bit field of the constants above. Willbe set in loadLibraries
-    private static int loadedLibs = 0;
-
-    // features: the main native library jsound reports which feature is
-    // contained in which lib
-    public static final int FEATURE_MIDIIO       = 1;
-    public static final int FEATURE_PORTS        = 2;
-    public static final int FEATURE_DIRECT_AUDIO = 3;
-
-    // SYSTEM CHARACTERISTICS
-    // vary according to hardware architecture
-
-    // signed8 (use signed 8-bit values) is true for everything we support except for
-    // the solaris sbpro card.
-    // we'll leave it here as a variable; in the future we may need this in java.
-    // wait, is that true?  i'm not sure.  i think solaris takes unsigned data?
-    // $$kk: 03.11.99: i think solaris takes unsigned 8-bit or signed 16-bit data....
-    private static boolean signed8;
-
-    // intel is little-endian.  sparc is big-endian.
-    private static boolean bigEndian;
-
-    // this is the value of the "java.home" system property.  i am looking it up here
-    // for use when trying to load the soundbank, just so
-    // that all the privileged code is localized in this file....
-    private static String javahome;
-
-    // this is the value of the "java.class.path" system property
-    private static String classpath;
-
-
-
-
-    static {
-        if(Printer.trace)Printer.trace(">> Platform.java: static");
-
-        loadLibraries();
-        readProperties();
-    }
-
-
-    /**
-     * Private constructor.
-     */
-    private Platform() {
-    }
-
-
-    // METHODS FOR INTERNAL IMPLEMENTATION USE
-
-
-    /**
-     * Dummy method for forcing initialization.
-     */
-    static void initialize() {
-
-        if(Printer.trace)Printer.trace("Platform: initialize()");
-    }
-
-
-    /**
-     * Determine whether the system is big-endian.
-     */
-    static boolean isBigEndian() {
-
-        return bigEndian;
-    }
-
-
-    /**
-     * Determine whether the system takes signed 8-bit data.
-     */
-    static boolean isSigned8() {
-
-        return signed8;
-    }
-
-
-    /**
-     * Obtain javahome.
-     * $$kk: 04.16.99: this is *bad*!!
-     */
-    static String getJavahome() {
-
-        return javahome;
-    }
-
-    /**
-     * Obtain classpath.
-     * $$jb: 04.21.99: this is *bad* too!!
-     */
-    static String getClasspath() {
-
-        return classpath;
-    }
-
-
-    // PRIVATE METHODS
-
-    /**
-     * Load the native library or libraries.
-     */
-    private static void loadLibraries() {
-        if(Printer.trace)Printer.trace(">>Platform.loadLibraries");
-
-        try {
-            // load the main library
-            AccessController.doPrivileged(new PrivilegedAction<Void>() {
-                @Override
-                public Void run() {
-                    System.loadLibrary(libNameMain);
-                    return null;
-                }
-            });
-            // just for the heck of it...
-            loadedLibs |= LIB_MAIN;
-        } catch (SecurityException e) {
-            if(Printer.err)Printer.err("Security exception loading main native library.  JavaSound requires access to these resources.");
-            throw(e);
-        }
-
-        // now try to load extra libs. They are defined at compile time in the Makefile
-        // with the define EXTRA_SOUND_JNI_LIBS
-        String extraLibs = nGetExtraLibraries();
-        // the string is the libraries, separated by white space
-        StringTokenizer st = new StringTokenizer(extraLibs);
-        while (st.hasMoreTokens()) {
-            final String lib = st.nextToken();
-            try {
-                AccessController.doPrivileged(new PrivilegedAction<Void>() {
-                    @Override
-                    public Void run() {
-                        System.loadLibrary(lib);
-                        return null;
-                    }
-                });
-
-                if (lib.equals(libNameALSA)) {
-                    loadedLibs |= LIB_ALSA;
-                    if (Printer.debug) Printer.debug("Loaded ALSA lib successfully.");
-                } else if (lib.equals(libNameDSound)) {
-                    loadedLibs |= LIB_DSOUND;
-                    if (Printer.debug) Printer.debug("Loaded DirectSound lib successfully.");
-                } else {
-                    if (Printer.err) Printer.err("Loaded unknown lib '"+lib+"' successfully.");
-                }
-            } catch (Throwable t) {
-                if (Printer.err) Printer.err("Couldn't load library "+lib+": "+t.toString());
-            }
-        }
-    }
-
-
-    static boolean isMidiIOEnabled() {
-        return isFeatureLibLoaded(FEATURE_MIDIIO);
-    }
-
-    static boolean isPortsEnabled() {
-        return isFeatureLibLoaded(FEATURE_PORTS);
-    }
-
-    static boolean isDirectAudioEnabled() {
-        return isFeatureLibLoaded(FEATURE_DIRECT_AUDIO);
-    }
-
-    private static boolean isFeatureLibLoaded(int feature) {
-        if (Printer.debug) Printer.debug("Platform: Checking for feature "+feature+"...");
-        int requiredLib = nGetLibraryForFeature(feature);
-        boolean isLoaded = (requiredLib != 0) && ((loadedLibs & requiredLib) == requiredLib);
-        if (Printer.debug) Printer.debug("          ...needs library "+requiredLib+". Result is loaded="+isLoaded);
-        return isLoaded;
-    }
-
-    // the following native methods are implemented in Platform.c
-    private native static boolean nIsBigEndian();
-    private native static boolean nIsSigned8();
-    private native static String nGetExtraLibraries();
-    private native static int nGetLibraryForFeature(int feature);
-
-
-    /**
-     * Read the required system properties.
-     */
-    private static void readProperties() {
-        // $$fb 2002-03-06: implement check for endianness in native. Facilitates porting !
-        bigEndian = nIsBigEndian();
-        signed8 = nIsSigned8(); // Solaris on Sparc: signed, all others unsigned
-        javahome = JSSecurityManager.getProperty("java.home");
-        classpath = JSSecurityManager.getProperty("java.class.path");
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/PortMixer.java b/ojluni/src/main/java/com/sun/media/sound/PortMixer.java
deleted file mode 100755
index 2ef76cb..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/PortMixer.java
+++ /dev/null
@@ -1,505 +0,0 @@
-/*
- * Copyright (c) 2002, 2013, 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.media.sound;
-
-import java.util.Vector;
-
-import javax.sound.sampled.Control;
-import javax.sound.sampled.Line;
-import javax.sound.sampled.LineUnavailableException;
-import javax.sound.sampled.Port;
-import javax.sound.sampled.BooleanControl;
-import javax.sound.sampled.CompoundControl;
-import javax.sound.sampled.FloatControl;
-
-
-/**
- * A Mixer which only provides Ports.
- *
- * @author Florian Bomers
- */
-final class PortMixer extends AbstractMixer {
-
-    // CONSTANTS
-    private static final int SRC_UNKNOWN      = 0x01;
-    private static final int SRC_MICROPHONE   = 0x02;
-    private static final int SRC_LINE_IN      = 0x03;
-    private static final int SRC_COMPACT_DISC = 0x04;
-    private static final int SRC_MASK         = 0xFF;
-
-    private static final int DST_UNKNOWN      = 0x0100;
-    private static final int DST_SPEAKER      = 0x0200;
-    private static final int DST_HEADPHONE    = 0x0300;
-    private static final int DST_LINE_OUT     = 0x0400;
-    private static final int DST_MASK         = 0xFF00;
-
-    // INSTANCE VARIABLES
-    private Port.Info[] portInfos;
-    // cache of instantiated ports
-    private PortMixerPort[] ports;
-
-    // instance ID of the native implementation
-    private long id = 0;
-
-    // CONSTRUCTOR
-    PortMixer(PortMixerProvider.PortMixerInfo portMixerInfo) {
-        // pass in Line.Info, mixer, controls
-        super(portMixerInfo,              // Mixer.Info
-              null,                       // Control[]
-              null,                       // Line.Info[] sourceLineInfo
-              null);                      // Line.Info[] targetLineInfo
-
-        if (Printer.trace) Printer.trace(">> PortMixer: constructor");
-
-        int count = 0;
-        int srcLineCount = 0;
-        int dstLineCount = 0;
-
-        try {
-            try {
-                id = nOpen(getMixerIndex());
-                if (id != 0) {
-                    count = nGetPortCount(id);
-                    if (count < 0) {
-                        if (Printer.trace) Printer.trace("nGetPortCount() returned error code: " + count);
-                        count = 0;
-                    }
-                }
-            } catch (Exception e) {}
-
-            portInfos = new Port.Info[count];
-
-            for (int i = 0; i < count; i++) {
-                int type = nGetPortType(id, i);
-                srcLineCount += ((type & SRC_MASK) != 0)?1:0;
-                dstLineCount += ((type & DST_MASK) != 0)?1:0;
-                portInfos[i] = getPortInfo(i, type);
-            }
-        } finally {
-            if (id != 0) {
-                nClose(id);
-            }
-            id = 0;
-        }
-
-        // fill sourceLineInfo and targetLineInfos with copies of the ones in portInfos
-        sourceLineInfo = new Port.Info[srcLineCount];
-        targetLineInfo = new Port.Info[dstLineCount];
-
-        srcLineCount = 0; dstLineCount = 0;
-        for (int i = 0; i < count; i++) {
-            if (portInfos[i].isSource()) {
-                sourceLineInfo[srcLineCount++] = portInfos[i];
-            } else {
-                targetLineInfo[dstLineCount++] = portInfos[i];
-            }
-        }
-
-        if (Printer.trace) Printer.trace("<< PortMixer: constructor completed");
-    }
-
-
-    // ABSTRACT MIXER: ABSTRACT METHOD IMPLEMENTATIONS
-
-    public Line getLine(Line.Info info) throws LineUnavailableException {
-        Line.Info fullInfo = getLineInfo(info);
-
-        if ((fullInfo != null) && (fullInfo instanceof Port.Info)) {
-            for (int i = 0; i < portInfos.length; i++) {
-                if (fullInfo.equals(portInfos[i])) {
-                    return getPort(i);
-                }
-            }
-        }
-        throw new IllegalArgumentException("Line unsupported: " + info);
-    }
-
-
-    public int getMaxLines(Line.Info info) {
-        Line.Info fullInfo = getLineInfo(info);
-
-        // if it's not supported at all, return 0.
-        if (fullInfo == null) {
-            return 0;
-        }
-
-        if (fullInfo instanceof Port.Info) {
-            //return AudioSystem.NOT_SPECIFIED; // if several instances of PortMixerPort
-            return 1;
-        }
-        return 0;
-    }
-
-
-    protected void implOpen() throws LineUnavailableException {
-        if (Printer.trace) Printer.trace(">> PortMixer: implOpen (id="+id+")");
-
-        // open the mixer device
-        id = nOpen(getMixerIndex());
-
-        if (Printer.trace) Printer.trace("<< PortMixer: implOpen succeeded.");
-    }
-
-    protected void implClose() {
-        if (Printer.trace) Printer.trace(">> PortMixer: implClose");
-
-        // close the mixer device
-        long thisID = id;
-        id = 0;
-        nClose(thisID);
-        if (ports != null) {
-            for (int i = 0; i < ports.length; i++) {
-                if (ports[i] != null) {
-                    ports[i].disposeControls();
-                }
-            }
-        }
-
-        if (Printer.trace) Printer.trace("<< PortMixer: implClose succeeded");
-    }
-
-    protected void implStart() {}
-    protected void implStop() {}
-
-    // IMPLEMENTATION HELPERS
-
-    private Port.Info getPortInfo(int portIndex, int type) {
-        switch (type) {
-        case SRC_UNKNOWN:      return new PortInfo(nGetPortName(getID(), portIndex), true);
-        case SRC_MICROPHONE:   return Port.Info.MICROPHONE;
-        case SRC_LINE_IN:      return Port.Info.LINE_IN;
-        case SRC_COMPACT_DISC: return Port.Info.COMPACT_DISC;
-
-        case DST_UNKNOWN:      return new PortInfo(nGetPortName(getID(), portIndex), false);
-        case DST_SPEAKER:      return Port.Info.SPEAKER;
-        case DST_HEADPHONE:    return Port.Info.HEADPHONE;
-        case DST_LINE_OUT:     return Port.Info.LINE_OUT;
-        }
-        // should never happen...
-        if (Printer.debug) Printer.debug("unknown port type: "+type);
-        return null;
-    }
-
-    int getMixerIndex() {
-        return ((PortMixerProvider.PortMixerInfo) getMixerInfo()).getIndex();
-    }
-
-    Port getPort(int index) {
-        if (ports == null) {
-            ports = new PortMixerPort[portInfos.length];
-        }
-        if (ports[index] == null) {
-            ports[index] = new PortMixerPort((Port.Info)portInfos[index], this, index);
-            return ports[index];
-        }
-        // $$fb TODO: return (Port) (ports[index].clone());
-        return ports[index];
-    }
-
-    long getID() {
-        return id;
-    }
-
-    // INNER CLASSES
-
-    /**
-     * Private inner class representing a Port for the PortMixer.
-     */
-    private static final class PortMixerPort extends AbstractLine
-            implements Port {
-
-        private final int portIndex;
-        private long id;
-
-        // CONSTRUCTOR
-        private PortMixerPort(Port.Info info,
-                              PortMixer mixer,
-                              int portIndex) {
-            super(info, mixer, null);
-            if (Printer.trace) Printer.trace("PortMixerPort CONSTRUCTOR: info: " + info);
-            this.portIndex = portIndex;
-        }
-
-
-        // ABSTRACT METHOD IMPLEMENTATIONS
-
-        // ABSTRACT LINE
-
-        void implOpen() throws LineUnavailableException {
-            if (Printer.trace) Printer.trace(">> PortMixerPort: implOpen().");
-            long newID = ((PortMixer) mixer).getID();
-            if ((id == 0) || (newID != id) || (controls.length == 0)) {
-                id = newID;
-                Vector vector = new Vector();
-                synchronized (vector) {
-                    nGetControls(id, portIndex, vector);
-                    controls = new Control[vector.size()];
-                    for (int i = 0; i < controls.length; i++) {
-                        controls[i] = (Control) vector.elementAt(i);
-                    }
-                }
-            } else {
-                enableControls(controls, true);
-            }
-            if (Printer.trace) Printer.trace("<< PortMixerPort: implOpen() succeeded");
-        }
-
-        private void enableControls(Control[] controls, boolean enable) {
-            for (int i = 0; i < controls.length; i++) {
-                if (controls[i] instanceof BoolCtrl) {
-                    ((BoolCtrl) controls[i]).closed = !enable;
-                }
-                else if (controls[i] instanceof FloatCtrl) {
-                    ((FloatCtrl) controls[i]).closed = !enable;
-                }
-                else if (controls[i] instanceof CompoundControl) {
-                    enableControls(((CompoundControl) controls[i]).getMemberControls(), enable);
-                }
-            }
-        }
-
-        private void disposeControls() {
-            enableControls(controls, false);
-            controls = new Control[0];
-        }
-
-
-        void implClose() {
-            if (Printer.trace) Printer.trace(">> PortMixerPort: implClose()");
-            // get rid of controls
-            enableControls(controls, false);
-            if (Printer.trace) Printer.trace("<< PortMixerPort: implClose() succeeded");
-        }
-
-        // METHOD OVERRIDES
-
-        // this is very similar to open(AudioFormat, int) in AbstractDataLine...
-        public void open() throws LineUnavailableException {
-            synchronized (mixer) {
-                // if the line is not currently open, try to open it with this format and buffer size
-                if (!isOpen()) {
-                    if (Printer.trace) Printer.trace("> PortMixerPort: open");
-                    // reserve mixer resources for this line
-                    mixer.open(this);
-                    try {
-                        // open the line.  may throw LineUnavailableException.
-                        implOpen();
-
-                        // if we succeeded, set the open state to true and send events
-                        setOpen(true);
-                    } catch (LineUnavailableException e) {
-                        // release mixer resources for this line and then throw the exception
-                        mixer.close(this);
-                        throw e;
-                    }
-                    if (Printer.trace) Printer.trace("< PortMixerPort: open succeeded");
-                }
-            }
-        }
-
-        // this is very similar to close() in AbstractDataLine...
-        public void close() {
-            synchronized (mixer) {
-                if (isOpen()) {
-                    if (Printer.trace) Printer.trace("> PortMixerPort.close()");
-
-                    // set the open state to false and send events
-                    setOpen(false);
-
-                    // close resources for this line
-                    implClose();
-
-                    // release mixer resources for this line
-                    mixer.close(this);
-                    if (Printer.trace) Printer.trace("< PortMixerPort.close() succeeded");
-                }
-            }
-        }
-
-    } // class PortMixerPort
-
-    /**
-     * Private inner class representing a BooleanControl for PortMixerPort
-     */
-    private static final class BoolCtrl extends BooleanControl {
-        // the handle to the native control function
-        private final long controlID;
-        private boolean closed = false;
-
-        private static BooleanControl.Type createType(String name) {
-            if (name.equals("Mute")) {
-                return BooleanControl.Type.MUTE;
-            }
-            else if (name.equals("Select")) {
-                // $$fb add as new static type?
-                //return BooleanControl.Type.SELECT;
-            }
-            return new BCT(name);
-        }
-
-
-        private BoolCtrl(long controlID, String name) {
-            this(controlID, createType(name));
-        }
-
-        private BoolCtrl(long controlID, BooleanControl.Type typ) {
-            super(typ, false);
-            this.controlID = controlID;
-        }
-
-        public void setValue(boolean value) {
-            if (!closed) {
-                nControlSetIntValue(controlID, value?1:0);
-            }
-        }
-
-        public boolean getValue() {
-            if (!closed) {
-                // never use any cached values
-                return (nControlGetIntValue(controlID)!=0)?true:false;
-            }
-            // ??
-            return false;
-        }
-
-        /**
-         * inner class for custom types
-         */
-        private static final class BCT extends BooleanControl.Type {
-            private BCT(String name) {
-                super(name);
-            }
-        }
-    }
-
-    /**
-     * Private inner class representing a CompoundControl for PortMixerPort
-     */
-    private static final class CompCtrl extends CompoundControl {
-        private CompCtrl(String name, Control[] controls) {
-            super(new CCT(name), controls);
-        }
-
-        /**
-         * inner class for custom compound control types
-         */
-        private static final class CCT extends CompoundControl.Type {
-            private CCT(String name) {
-                super(name);
-            }
-        }
-    }
-
-    /**
-     * Private inner class representing a BooleanControl for PortMixerPort
-     */
-    private static final class FloatCtrl extends FloatControl {
-        // the handle to the native control function
-        private final long controlID;
-        private boolean closed = false;
-
-        // predefined float control types. See also Ports.h
-        private final static FloatControl.Type[] FLOAT_CONTROL_TYPES = {
-            null,
-            FloatControl.Type.BALANCE,
-            FloatControl.Type.MASTER_GAIN,
-            FloatControl.Type.PAN,
-            FloatControl.Type.VOLUME
-        };
-
-        private FloatCtrl(long controlID, String name,
-                          float min, float max, float precision, String units) {
-            this(controlID, new FCT(name), min, max, precision, units);
-        }
-
-        private FloatCtrl(long controlID, int type,
-                          float min, float max, float precision, String units) {
-            this(controlID, FLOAT_CONTROL_TYPES[type], min, max, precision, units);
-        }
-
-        private FloatCtrl(long controlID, FloatControl.Type typ,
-                         float min, float max, float precision, String units) {
-            super(typ, min, max, precision, 1000, min, units);
-            this.controlID = controlID;
-        }
-
-        public void setValue(float value) {
-            if (!closed) {
-                nControlSetFloatValue(controlID, value);
-            }
-        }
-
-        public float getValue() {
-            if (!closed) {
-                // never use any cached values
-                return nControlGetFloatValue(controlID);
-            }
-            // ??
-            return getMinimum();
-        }
-
-        /**
-         * inner class for custom types
-         */
-        private static final class FCT extends FloatControl.Type {
-            private FCT(String name) {
-                super(name);
-            }
-        }
-    }
-
-    /**
-     * Private inner class representing a port info
-     */
-    private static final class PortInfo extends Port.Info {
-        private PortInfo(String name, boolean isSource) {
-            super(Port.class, name, isSource);
-        }
-    }
-
-    // open the mixer with the given index. Returns a handle ID
-    private static native long nOpen(int mixerIndex) throws LineUnavailableException;
-    private static native void nClose(long id);
-
-    // gets the number of ports for this mixer
-    private static native int nGetPortCount(long id);
-
-    // gets the type of the port with this index
-    private static native int nGetPortType(long id, int portIndex);
-
-    // gets the name of the port with this index
-    private static native String nGetPortName(long id, int portIndex);
-
-    // fills the vector with the controls for this port
-    private static native void nGetControls(long id, int portIndex, Vector vector);
-
-    // getters/setters for controls
-    private static native void nControlSetIntValue(long controlID, int value);
-    private static native int nControlGetIntValue(long controlID);
-    private static native void nControlSetFloatValue(long controlID, float value);
-    private static native float nControlGetFloatValue(long controlID);
-
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/PortMixerProvider.java b/ojluni/src/main/java/com/sun/media/sound/PortMixerProvider.java
deleted file mode 100755
index a8ef40f..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/PortMixerProvider.java
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- * Copyright (c) 2002, 2013, 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.media.sound;
-
-import javax.sound.sampled.Mixer;
-import javax.sound.sampled.spi.MixerProvider;
-
-
-/**
- * Port provider.
- *
- * @author Florian Bomers
- */
-public final class PortMixerProvider extends MixerProvider {
-
-    // STATIC VARIABLES
-
-    /**
-     * Set of info objects for all port input devices on the system.
-     */
-    private static PortMixerInfo[] infos;
-
-    /**
-     * Set of all port input devices on the system.
-     */
-    private static PortMixer[] devices;
-
-
-    // STATIC
-
-    static {
-        // initialize
-        Platform.initialize();
-    }
-
-
-    // CONSTRUCTOR
-
-
-    /**
-     * Required public no-arg constructor.
-     */
-    public PortMixerProvider() {
-        synchronized (PortMixerProvider.class) {
-            if (Platform.isPortsEnabled()) {
-                init();
-            } else {
-                infos = new PortMixerInfo[0];
-                devices = new PortMixer[0];
-            }
-        }
-    }
-
-    private static void init() {
-        // get the number of input devices
-        int numDevices = nGetNumDevices();
-
-        if (infos == null || infos.length != numDevices) {
-            if (Printer.trace) Printer.trace("PortMixerProvider: init()");
-            // initialize the arrays
-            infos = new PortMixerInfo[numDevices];
-            devices = new PortMixer[numDevices];
-
-            // fill in the info objects now.
-            // we'll fill in the device objects as they're requested.
-            for (int i = 0; i < infos.length; i++) {
-                infos[i] = nNewPortMixerInfo(i);
-            }
-            if (Printer.trace) Printer.trace("PortMixerProvider: init(): found numDevices: " + numDevices);
-        }
-    }
-
-    public Mixer.Info[] getMixerInfo() {
-        synchronized (PortMixerProvider.class) {
-            Mixer.Info[] localArray = new Mixer.Info[infos.length];
-            System.arraycopy(infos, 0, localArray, 0, infos.length);
-            return localArray;
-        }
-    }
-
-
-    public Mixer getMixer(Mixer.Info info) {
-        synchronized (PortMixerProvider.class) {
-            for (int i = 0; i < infos.length; i++) {
-                if (infos[i].equals(info)) {
-                    return getDevice(infos[i]);
-                }
-            }
-        }
-        throw new IllegalArgumentException("Mixer " + info.toString()
-                                           + " not supported by this provider.");
-    }
-
-
-    private static Mixer getDevice(PortMixerInfo info) {
-        int index = info.getIndex();
-        if (devices[index] == null) {
-            devices[index] = new PortMixer(info);
-        }
-        return devices[index];
-    }
-
-    // INNER CLASSES
-
-
-    /**
-     * Info class for PortMixers.  Adds an index value for
-     * making native references to a particular device.
-     * This constructor is called from native.
-     */
-    static final class PortMixerInfo extends Mixer.Info {
-        private final int index;
-
-        private PortMixerInfo(int index, String name, String vendor, String description, String version) {
-            super("Port " + name, vendor, description, version);
-            this.index = index;
-        }
-
-        int getIndex() {
-            return index;
-        }
-
-    } // class PortMixerInfo
-
-    // NATIVE METHODS
-    private static native int nGetNumDevices();
-    private static native PortMixerInfo nNewPortMixerInfo(int mixerIndex);
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/Printer.java b/ojluni/src/main/java/com/sun/media/sound/Printer.java
deleted file mode 100755
index 7d50b72..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/Printer.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * Copyright (c) 1998, 2013, 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.media.sound;
-
-/**
- * Printer allows you to set up global debugging status and print
- * messages accordingly.
- *
- * @author David Rivas
- * @author Kara Kytle
- */
-final class Printer {
-
-    static final boolean err = false;
-    static final boolean debug = false;
-    static final boolean trace = false;
-    static final boolean verbose = false;
-    static final boolean release = false;
-
-    static final boolean SHOW_THREADID = false;
-    static final boolean SHOW_TIMESTAMP = false;
-
-    /*static void setErrorPrint(boolean on) {
-
-      err = on;
-      }
-
-      static void setDebugPrint(boolean on) {
-
-      debug = on;
-      }
-
-      static void setTracePrint(boolean on) {
-
-      trace = on;
-      }
-
-      static void setVerbosePrint(boolean on) {
-
-      verbose = on;
-      }
-
-      static void setReleasePrint(boolean on) {
-
-      release = on;
-      }*/
-
-    /**
-     * Suppresses default constructor, ensuring non-instantiability.
-     */
-    private Printer() {
-    }
-
-    public static void err(String str) {
-
-        if (err)
-            println(str);
-    }
-
-    public static void debug(String str) {
-
-        if (debug)
-            println(str);
-    }
-
-    public static void trace(String str) {
-
-        if (trace)
-            println(str);
-    }
-
-    public static void verbose(String str) {
-
-        if (verbose)
-            println(str);
-    }
-
-    public static void release(String str) {
-
-        if (release)
-            println(str);
-    }
-
-    private static long startTime = 0;
-
-    public static void println(String s) {
-        String prepend = "";
-        if (SHOW_THREADID) {
-            prepend = "thread "  + Thread.currentThread().getId() + " " + prepend;
-        }
-        if (SHOW_TIMESTAMP) {
-            if (startTime == 0) {
-                startTime = System.nanoTime() / 1000000l;
-            }
-            prepend = prepend + ((System.nanoTime()/1000000l) - startTime) + "millis: ";
-        }
-        System.out.println(prepend + s);
-    }
-
-    public static void println() {
-        System.out.println();
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/RIFFInvalidDataException.java b/ojluni/src/main/java/com/sun/media/sound/RIFFInvalidDataException.java
deleted file mode 100755
index 195ceed..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/RIFFInvalidDataException.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, 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.media.sound;
-
-/**
- * This exception is used when a RIFF file contains illegal or unexpected data.
- *
- * @author Karl Helgason
- */
-public final class RIFFInvalidDataException extends InvalidDataException {
-
-    private static final long serialVersionUID = 1L;
-
-    public RIFFInvalidDataException() {
-        super("Invalid Data!");
-    }
-
-    public RIFFInvalidDataException(String s) {
-        super(s);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/RIFFInvalidFormatException.java b/ojluni/src/main/java/com/sun/media/sound/RIFFInvalidFormatException.java
deleted file mode 100755
index 7b8d755..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/RIFFInvalidFormatException.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, 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.media.sound;
-
-/**
- * This exception is used when a reader is used to read RIFF file of a format it
- * doesn't unterstand or support.
- *
- * @author Karl Helgason
- */
-public final class RIFFInvalidFormatException extends InvalidFormatException {
-
-    private static final long serialVersionUID = 1L;
-
-    public RIFFInvalidFormatException() {
-        super("Invalid format!");
-    }
-
-    public RIFFInvalidFormatException(String s) {
-        super(s);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/RIFFReader.java b/ojluni/src/main/java/com/sun/media/sound/RIFFReader.java
deleted file mode 100755
index 7969a5d..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/RIFFReader.java
+++ /dev/null
@@ -1,332 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, 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.media.sound;
-
-import java.io.EOFException;
-import java.io.IOException;
-import java.io.InputStream;
-
-/**
- * Resource Interchange File Format (RIFF) stream decoder.
- *
- * @author Karl Helgason
- */
-public final class RIFFReader extends InputStream {
-
-    private final RIFFReader root;
-    private long filepointer = 0;
-    private final String fourcc;
-    private String riff_type = null;
-    private long ckSize = 0;
-    private InputStream stream;
-    private long avail;
-    private RIFFReader lastiterator = null;
-
-    public RIFFReader(InputStream stream) throws IOException {
-
-        if (stream instanceof RIFFReader)
-            root = ((RIFFReader)stream).root;
-        else
-            root = this;
-
-        this.stream = stream;
-        avail = Integer.MAX_VALUE;
-        ckSize = Integer.MAX_VALUE;
-
-        // Check for RIFF null paddings,
-        int b;
-        while (true) {
-            b = read();
-            if (b == -1) {
-                fourcc = ""; // don't put null value into fourcc,
-                // because it is expected to
-                // always contain a string value
-                riff_type = null;
-                avail = 0;
-                return;
-            }
-            if (b != 0)
-                break;
-        }
-
-        byte[] fourcc = new byte[4];
-        fourcc[0] = (byte) b;
-        readFully(fourcc, 1, 3);
-        this.fourcc = new String(fourcc, "ascii");
-        ckSize = readUnsignedInt();
-
-        avail = this.ckSize;
-
-        if (getFormat().equals("RIFF") || getFormat().equals("LIST")) {
-            byte[] format = new byte[4];
-            readFully(format);
-            this.riff_type = new String(format, "ascii");
-        }
-    }
-
-    public long getFilePointer() throws IOException {
-        return root.filepointer;
-    }
-
-    public boolean hasNextChunk() throws IOException {
-        if (lastiterator != null)
-            lastiterator.finish();
-        return avail != 0;
-    }
-
-    public RIFFReader nextChunk() throws IOException {
-        if (lastiterator != null)
-            lastiterator.finish();
-        if (avail == 0)
-            return null;
-        lastiterator = new RIFFReader(this);
-        return lastiterator;
-    }
-
-    public String getFormat() {
-        return fourcc;
-    }
-
-    public String getType() {
-        return riff_type;
-    }
-
-    public long getSize() {
-        return ckSize;
-    }
-
-    public int read() throws IOException {
-        if (avail == 0)
-            return -1;
-        int b = stream.read();
-        if (b == -1)
-            return -1;
-        avail--;
-        filepointer++;
-        return b;
-    }
-
-    public int read(byte[] b, int offset, int len) throws IOException {
-        if (avail == 0)
-            return -1;
-        if (len > avail) {
-            int rlen = stream.read(b, offset, (int)avail);
-            if (rlen != -1)
-                filepointer += rlen;
-            avail = 0;
-            return rlen;
-        } else {
-            int ret = stream.read(b, offset, len);
-            if (ret == -1)
-                return -1;
-            avail -= ret;
-            filepointer += ret;
-            return ret;
-        }
-    }
-
-    public final void readFully(byte b[]) throws IOException {
-        readFully(b, 0, b.length);
-    }
-
-    public final void readFully(byte b[], int off, int len) throws IOException {
-        if (len < 0)
-            throw new IndexOutOfBoundsException();
-        while (len > 0) {
-            int s = read(b, off, len);
-            if (s < 0)
-                throw new EOFException();
-            if (s == 0)
-                Thread.yield();
-            off += s;
-            len -= s;
-        }
-    }
-
-    public final long skipBytes(long n) throws IOException {
-        if (n < 0)
-            return 0;
-        long skipped = 0;
-        while (skipped != n) {
-            long s = skip(n - skipped);
-            if (s < 0)
-                break;
-            if (s == 0)
-                Thread.yield();
-            skipped += s;
-        }
-        return skipped;
-    }
-
-    public long skip(long n) throws IOException {
-        if (avail == 0)
-            return -1;
-        if (n > avail) {
-            long len = stream.skip(avail);
-            if (len != -1)
-                filepointer += len;
-            avail = 0;
-            return len;
-        } else {
-            long ret = stream.skip(n);
-            if (ret == -1)
-                return -1;
-            avail -= ret;
-            filepointer += ret;
-            return ret;
-        }
-    }
-
-    public int available() {
-        return (int)avail;
-    }
-
-    public void finish() throws IOException {
-        if (avail != 0) {
-            skipBytes(avail);
-        }
-    }
-
-    // Read ASCII chars from stream
-    public String readString(int len) throws IOException {
-        byte[] buff = new byte[len];
-        readFully(buff);
-        for (int i = 0; i < buff.length; i++) {
-            if (buff[i] == 0) {
-                return new String(buff, 0, i, "ascii");
-            }
-        }
-        return new String(buff, "ascii");
-    }
-
-    // Read 8 bit signed integer from stream
-    public byte readByte() throws IOException {
-        int ch = read();
-        if (ch < 0)
-            throw new EOFException();
-        return (byte) ch;
-    }
-
-    // Read 16 bit signed integer from stream
-    public short readShort() throws IOException {
-        int ch1 = read();
-        int ch2 = read();
-        if (ch1 < 0)
-            throw new EOFException();
-        if (ch2 < 0)
-            throw new EOFException();
-        return (short)(ch1 | (ch2 << 8));
-    }
-
-    // Read 32 bit signed integer from stream
-    public int readInt() throws IOException {
-        int ch1 = read();
-        int ch2 = read();
-        int ch3 = read();
-        int ch4 = read();
-        if (ch1 < 0)
-            throw new EOFException();
-        if (ch2 < 0)
-            throw new EOFException();
-        if (ch3 < 0)
-            throw new EOFException();
-        if (ch4 < 0)
-            throw new EOFException();
-        return ch1 + (ch2 << 8) | (ch3 << 16) | (ch4 << 24);
-    }
-
-    // Read 64 bit signed integer from stream
-    public long readLong() throws IOException {
-        long ch1 = read();
-        long ch2 = read();
-        long ch3 = read();
-        long ch4 = read();
-        long ch5 = read();
-        long ch6 = read();
-        long ch7 = read();
-        long ch8 = read();
-        if (ch1 < 0)
-            throw new EOFException();
-        if (ch2 < 0)
-            throw new EOFException();
-        if (ch3 < 0)
-            throw new EOFException();
-        if (ch4 < 0)
-            throw new EOFException();
-        if (ch5 < 0)
-            throw new EOFException();
-        if (ch6 < 0)
-            throw new EOFException();
-        if (ch7 < 0)
-            throw new EOFException();
-        if (ch8 < 0)
-            throw new EOFException();
-        return ch1 | (ch2 << 8) | (ch3 << 16) | (ch4 << 24)
-                | (ch5 << 32) | (ch6 << 40) | (ch7 << 48) | (ch8 << 56);
-    }
-
-    // Read 8 bit unsigned integer from stream
-    public int readUnsignedByte() throws IOException {
-        int ch = read();
-        if (ch < 0)
-            throw new EOFException();
-        return ch;
-    }
-
-    // Read 16 bit unsigned integer from stream
-    public int readUnsignedShort() throws IOException {
-        int ch1 = read();
-        int ch2 = read();
-        if (ch1 < 0)
-            throw new EOFException();
-        if (ch2 < 0)
-            throw new EOFException();
-        return ch1 | (ch2 << 8);
-    }
-
-    // Read 32 bit unsigned integer from stream
-    public long readUnsignedInt() throws IOException {
-        long ch1 = read();
-        long ch2 = read();
-        long ch3 = read();
-        long ch4 = read();
-        if (ch1 < 0)
-            throw new EOFException();
-        if (ch2 < 0)
-            throw new EOFException();
-        if (ch3 < 0)
-            throw new EOFException();
-        if (ch4 < 0)
-            throw new EOFException();
-        return ch1 + (ch2 << 8) | (ch3 << 16) | (ch4 << 24);
-    }
-
-    public void close() throws IOException {
-        finish();
-        if (this == root)
-            stream.close();
-        stream = null;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/RIFFWriter.java b/ojluni/src/main/java/com/sun/media/sound/RIFFWriter.java
deleted file mode 100755
index a417d6a..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/RIFFWriter.java
+++ /dev/null
@@ -1,365 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, 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.media.sound;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.RandomAccessFile;
-
-/**
- * Resource Interchange File Format (RIFF) stream encoder.
- *
- * @author Karl Helgason
- */
-public final class RIFFWriter extends OutputStream {
-
-    private interface RandomAccessWriter {
-
-        public void seek(long chunksizepointer) throws IOException;
-
-        public long getPointer() throws IOException;
-
-        public void close() throws IOException;
-
-        public void write(int b) throws IOException;
-
-        public void write(byte[] b, int off, int len) throws IOException;
-
-        public void write(byte[] bytes) throws IOException;
-
-        public long length() throws IOException;
-
-        public void setLength(long i) throws IOException;
-    }
-
-    private static class RandomAccessFileWriter implements RandomAccessWriter {
-
-        RandomAccessFile raf;
-
-        RandomAccessFileWriter(File file) throws FileNotFoundException {
-            this.raf = new RandomAccessFile(file, "rw");
-        }
-
-        RandomAccessFileWriter(String name) throws FileNotFoundException {
-            this.raf = new RandomAccessFile(name, "rw");
-        }
-
-        public void seek(long chunksizepointer) throws IOException {
-            raf.seek(chunksizepointer);
-        }
-
-        public long getPointer() throws IOException {
-            return raf.getFilePointer();
-        }
-
-        public void close() throws IOException {
-            raf.close();
-        }
-
-        public void write(int b) throws IOException {
-            raf.write(b);
-        }
-
-        public void write(byte[] b, int off, int len) throws IOException {
-            raf.write(b, off, len);
-        }
-
-        public void write(byte[] bytes) throws IOException {
-            raf.write(bytes);
-        }
-
-        public long length() throws IOException {
-            return raf.length();
-        }
-
-        public void setLength(long i) throws IOException {
-            raf.setLength(i);
-        }
-    }
-
-    private static class RandomAccessByteWriter implements RandomAccessWriter {
-
-        byte[] buff = new byte[32];
-        int length = 0;
-        int pos = 0;
-        byte[] s;
-        final OutputStream stream;
-
-        RandomAccessByteWriter(OutputStream stream) {
-            this.stream = stream;
-        }
-
-        public void seek(long chunksizepointer) throws IOException {
-            pos = (int) chunksizepointer;
-        }
-
-        public long getPointer() throws IOException {
-            return pos;
-        }
-
-        public void close() throws IOException {
-            stream.write(buff, 0, length);
-            stream.close();
-        }
-
-        public void write(int b) throws IOException {
-            if (s == null)
-                s = new byte[1];
-            s[0] = (byte)b;
-            write(s, 0, 1);
-        }
-
-        public void write(byte[] b, int off, int len) throws IOException {
-            int newsize = pos + len;
-            if (newsize > length)
-                setLength(newsize);
-            int end = off + len;
-            for (int i = off; i < end; i++) {
-                buff[pos++] = b[i];
-            }
-        }
-
-        public void write(byte[] bytes) throws IOException {
-            write(bytes, 0, bytes.length);
-        }
-
-        public long length() throws IOException {
-            return length;
-        }
-
-        public void setLength(long i) throws IOException {
-            length = (int) i;
-            if (length > buff.length) {
-                int newlen = Math.max(buff.length << 1, length);
-                byte[] newbuff = new byte[newlen];
-                System.arraycopy(buff, 0, newbuff, 0, buff.length);
-                buff = newbuff;
-            }
-        }
-    }
-    private int chunktype = 0; // 0=RIFF, 1=LIST; 2=CHUNK
-    private RandomAccessWriter raf;
-    private final long chunksizepointer;
-    private final long startpointer;
-    private RIFFWriter childchunk = null;
-    private boolean open = true;
-    private boolean writeoverride = false;
-
-    public RIFFWriter(String name, String format) throws IOException {
-        this(new RandomAccessFileWriter(name), format, 0);
-    }
-
-    public RIFFWriter(File file, String format) throws IOException {
-        this(new RandomAccessFileWriter(file), format, 0);
-    }
-
-    public RIFFWriter(OutputStream stream, String format) throws IOException {
-        this(new RandomAccessByteWriter(stream), format, 0);
-    }
-
-    private RIFFWriter(RandomAccessWriter raf, String format, int chunktype)
-            throws IOException {
-        if (chunktype == 0)
-            if (raf.length() != 0)
-                raf.setLength(0);
-        this.raf = raf;
-        if (raf.getPointer() % 2 != 0)
-            raf.write(0);
-
-        if (chunktype == 0)
-            raf.write("RIFF".getBytes("ascii"));
-        else if (chunktype == 1)
-            raf.write("LIST".getBytes("ascii"));
-        else
-            raf.write((format + "    ").substring(0, 4).getBytes("ascii"));
-
-        chunksizepointer = raf.getPointer();
-        this.chunktype = 2;
-        writeUnsignedInt(0);
-        this.chunktype = chunktype;
-        startpointer = raf.getPointer();
-        if (chunktype != 2)
-            raf.write((format + "    ").substring(0, 4).getBytes("ascii"));
-
-    }
-
-    public void seek(long pos) throws IOException {
-        raf.seek(pos);
-    }
-
-    public long getFilePointer() throws IOException {
-        return raf.getPointer();
-    }
-
-    public void setWriteOverride(boolean writeoverride) {
-        this.writeoverride = writeoverride;
-    }
-
-    public boolean getWriteOverride() {
-        return writeoverride;
-    }
-
-    public void close() throws IOException {
-        if (!open)
-            return;
-        if (childchunk != null) {
-            childchunk.close();
-            childchunk = null;
-        }
-
-        int bakchunktype = chunktype;
-        long fpointer = raf.getPointer();
-        raf.seek(chunksizepointer);
-        chunktype = 2;
-        writeUnsignedInt(fpointer - startpointer);
-
-        if (bakchunktype == 0)
-            raf.close();
-        else
-            raf.seek(fpointer);
-        open = false;
-        raf = null;
-    }
-
-    public void write(int b) throws IOException {
-        if (!writeoverride) {
-            if (chunktype != 2) {
-                throw new IllegalArgumentException(
-                        "Only chunks can write bytes!");
-            }
-            if (childchunk != null) {
-                childchunk.close();
-                childchunk = null;
-            }
-        }
-        raf.write(b);
-    }
-
-    public void write(byte b[], int off, int len) throws IOException {
-        if (!writeoverride) {
-            if (chunktype != 2) {
-                throw new IllegalArgumentException(
-                        "Only chunks can write bytes!");
-            }
-            if (childchunk != null) {
-                childchunk.close();
-                childchunk = null;
-            }
-        }
-        raf.write(b, off, len);
-    }
-
-    public RIFFWriter writeList(String format) throws IOException {
-        if (chunktype == 2) {
-            throw new IllegalArgumentException(
-                    "Only LIST and RIFF can write lists!");
-        }
-        if (childchunk != null) {
-            childchunk.close();
-            childchunk = null;
-        }
-        childchunk = new RIFFWriter(this.raf, format, 1);
-        return childchunk;
-    }
-
-    public RIFFWriter writeChunk(String format) throws IOException {
-        if (chunktype == 2) {
-            throw new IllegalArgumentException(
-                    "Only LIST and RIFF can write chunks!");
-        }
-        if (childchunk != null) {
-            childchunk.close();
-            childchunk = null;
-        }
-        childchunk = new RIFFWriter(this.raf, format, 2);
-        return childchunk;
-    }
-
-    // Write ASCII chars to stream
-    public void writeString(String string) throws IOException {
-        byte[] buff = string.getBytes();
-        write(buff);
-    }
-
-    // Write ASCII chars to stream
-    public void writeString(String string, int len) throws IOException {
-        byte[] buff = string.getBytes();
-        if (buff.length > len)
-            write(buff, 0, len);
-        else {
-            write(buff);
-            for (int i = buff.length; i < len; i++)
-                write(0);
-        }
-    }
-
-    // Write 8 bit signed integer to stream
-    public void writeByte(int b) throws IOException {
-        write(b);
-    }
-
-    // Write 16 bit signed integer to stream
-    public void writeShort(short b) throws IOException {
-        write((b >>> 0) & 0xFF);
-        write((b >>> 8) & 0xFF);
-    }
-
-    // Write 32 bit signed integer to stream
-    public void writeInt(int b) throws IOException {
-        write((b >>> 0) & 0xFF);
-        write((b >>> 8) & 0xFF);
-        write((b >>> 16) & 0xFF);
-        write((b >>> 24) & 0xFF);
-    }
-
-    // Write 64 bit signed integer to stream
-    public void writeLong(long b) throws IOException {
-        write((int) (b >>> 0) & 0xFF);
-        write((int) (b >>> 8) & 0xFF);
-        write((int) (b >>> 16) & 0xFF);
-        write((int) (b >>> 24) & 0xFF);
-        write((int) (b >>> 32) & 0xFF);
-        write((int) (b >>> 40) & 0xFF);
-        write((int) (b >>> 48) & 0xFF);
-        write((int) (b >>> 56) & 0xFF);
-    }
-
-    // Write 8 bit unsigned integer to stream
-    public void writeUnsignedByte(int b) throws IOException {
-        writeByte((byte) b);
-    }
-
-    // Write 16 bit unsigned integer to stream
-    public void writeUnsignedShort(int b) throws IOException {
-        writeShort((short) b);
-    }
-
-    // Write 32 bit unsigned integer to stream
-    public void writeUnsignedInt(long b) throws IOException {
-        writeInt((int) b);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/RealTimeSequencer.java b/ojluni/src/main/java/com/sun/media/sound/RealTimeSequencer.java
deleted file mode 100755
index 168b1b3..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/RealTimeSequencer.java
+++ /dev/null
@@ -1,2084 +0,0 @@
-/*
- * Copyright (c) 2003, 2013, 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.media.sound;
-
-import java.io.IOException;
-import java.io.InputStream;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.WeakHashMap;
-
-import javax.sound.midi.*;
-
-
-/**
- * A Real Time Sequencer
- *
- * @author Florian Bomers
- */
-
-/* TODO:
- * - rename PlayThread to PlayEngine (because isn't a thread)
- */
-final class RealTimeSequencer extends AbstractMidiDevice
-        implements Sequencer, AutoConnectSequencer {
-
-    // STATIC VARIABLES
-
-    /** debugging flags */
-    private final static boolean DEBUG_PUMP = false;
-    private final static boolean DEBUG_PUMP_ALL = false;
-
-    /**
-     * Event Dispatcher thread. Should be using a shared event
-     * dispatcher instance with a factory in EventDispatcher
-     */
-    private static final Map<ThreadGroup, EventDispatcher> dispatchers =
-            new WeakHashMap<>();
-
-    /**
-     * All RealTimeSequencers share this info object.
-     */
-    static final RealTimeSequencerInfo info = new RealTimeSequencerInfo();
-
-
-    private static final Sequencer.SyncMode[] masterSyncModes = { Sequencer.SyncMode.INTERNAL_CLOCK };
-    private static final Sequencer.SyncMode[] slaveSyncModes  = { Sequencer.SyncMode.NO_SYNC };
-
-    private static final Sequencer.SyncMode masterSyncMode    = Sequencer.SyncMode.INTERNAL_CLOCK;
-    private static final Sequencer.SyncMode slaveSyncMode     = Sequencer.SyncMode.NO_SYNC;
-
-
-    /**
-     * Sequence on which this sequencer is operating.
-     */
-    private Sequence sequence = null;
-
-    // caches
-
-    /**
-     * Same for setTempoInMPQ...
-     * -1 means not set.
-     */
-    private double cacheTempoMPQ = -1;
-
-
-    /**
-     * cache value for tempo factor until sequence is set
-     * -1 means not set.
-     */
-    private float cacheTempoFactor = -1;
-
-
-    /** if a particular track is muted */
-    private boolean[] trackMuted = null;
-    /** if a particular track is solo */
-    private boolean[] trackSolo = null;
-
-    /** tempo cache for getMicrosecondPosition */
-    private final MidiUtils.TempoCache tempoCache = new MidiUtils.TempoCache();
-
-    /**
-     * True if the sequence is running.
-     */
-    private boolean running = false;
-
-
-    /** the thread for pushing out the MIDI messages */
-    private PlayThread playThread;
-
-
-    /**
-     * True if we are recording
-     */
-    private boolean recording = false;
-
-
-    /**
-     * List of tracks to which we're recording
-     */
-    private final List recordingTracks = new ArrayList();
-
-
-    private long loopStart = 0;
-    private long loopEnd = -1;
-    private int loopCount = 0;
-
-
-    /**
-     * Meta event listeners
-     */
-    private final ArrayList metaEventListeners = new ArrayList();
-
-
-    /**
-     * Control change listeners
-     */
-    private final ArrayList controllerEventListeners = new ArrayList();
-
-
-    /** automatic connection support */
-    private boolean autoConnect = false;
-
-    /** if we need to autoconnect at next open */
-    private boolean doAutoConnectAtNextOpen = false;
-
-    /** the receiver that this device is auto-connected to */
-    Receiver autoConnectedReceiver = null;
-
-
-    /* ****************************** CONSTRUCTOR ****************************** */
-
-    RealTimeSequencer() throws MidiUnavailableException {
-        super(info);
-
-        if (Printer.trace) Printer.trace(">> RealTimeSequencer CONSTRUCTOR");
-        if (Printer.trace) Printer.trace("<< RealTimeSequencer CONSTRUCTOR completed");
-    }
-
-
-    /* ****************************** SEQUENCER METHODS ******************** */
-
-    public synchronized void setSequence(Sequence sequence)
-        throws InvalidMidiDataException {
-
-        if (Printer.trace) Printer.trace(">> RealTimeSequencer: setSequence(" + sequence +")");
-
-        if (sequence != this.sequence) {
-            if (this.sequence != null && sequence == null) {
-                setCaches();
-                stop();
-                // initialize some non-cached values
-                trackMuted = null;
-                trackSolo = null;
-                loopStart = 0;
-                loopEnd = -1;
-                loopCount = 0;
-                if (getDataPump() != null) {
-                    getDataPump().setTickPos(0);
-                    getDataPump().resetLoopCount();
-                }
-            }
-
-            if (playThread != null) {
-                playThread.setSequence(sequence);
-            }
-
-            // store this sequence (do not copy - we want to give the possibility
-            // of modifying the sequence at runtime)
-            this.sequence = sequence;
-
-            if (sequence != null) {
-                tempoCache.refresh(sequence);
-                // rewind to the beginning
-                setTickPosition(0);
-                // propagate caches
-                propagateCaches();
-            }
-        }
-        else if (sequence != null) {
-            tempoCache.refresh(sequence);
-            if (playThread != null) {
-                playThread.setSequence(sequence);
-            }
-        }
-
-        if (Printer.trace) Printer.trace("<< RealTimeSequencer: setSequence(" + sequence +") completed");
-    }
-
-
-    public synchronized void setSequence(InputStream stream) throws IOException, InvalidMidiDataException {
-
-        if (Printer.trace) Printer.trace(">> RealTimeSequencer: setSequence(" + stream +")");
-
-        if (stream == null) {
-            setSequence((Sequence) null);
-            return;
-        }
-
-        Sequence seq = MidiSystem.getSequence(stream); // can throw IOException, InvalidMidiDataException
-
-        setSequence(seq);
-
-        if (Printer.trace) Printer.trace("<< RealTimeSequencer: setSequence(" + stream +") completed");
-
-    }
-
-
-    public Sequence getSequence() {
-        return sequence;
-    }
-
-
-    public synchronized void start() {
-        if (Printer.trace) Printer.trace(">> RealTimeSequencer: start()");
-
-        // sequencer not open: throw an exception
-        if (!isOpen()) {
-            throw new IllegalStateException("sequencer not open");
-        }
-
-        // sequence not available: throw an exception
-        if (sequence == null) {
-            throw new IllegalStateException("sequence not set");
-        }
-
-        // already running: return quietly
-        if (running == true) {
-            return;
-        }
-
-        // start playback
-        implStart();
-
-        if (Printer.trace) Printer.trace("<< RealTimeSequencer: start() completed");
-    }
-
-
-    public synchronized void stop() {
-        if (Printer.trace) Printer.trace(">> RealTimeSequencer: stop()");
-
-        if (!isOpen()) {
-            throw new IllegalStateException("sequencer not open");
-        }
-        stopRecording();
-
-        // not running; just return
-        if (running == false) {
-            if (Printer.trace) Printer.trace("<< RealTimeSequencer: stop() not running!");
-            return;
-        }
-
-        // stop playback
-        implStop();
-
-        if (Printer.trace) Printer.trace("<< RealTimeSequencer: stop() completed");
-    }
-
-
-    public boolean isRunning() {
-        return running;
-    }
-
-
-    public void startRecording() {
-        if (!isOpen()) {
-            throw new IllegalStateException("Sequencer not open");
-        }
-
-        start();
-        recording = true;
-    }
-
-
-    public void stopRecording() {
-        if (!isOpen()) {
-            throw new IllegalStateException("Sequencer not open");
-        }
-        recording = false;
-    }
-
-
-    public boolean isRecording() {
-        return recording;
-    }
-
-
-    public void recordEnable(Track track, int channel) {
-        if (!findTrack(track)) {
-            throw new IllegalArgumentException("Track does not exist in the current sequence");
-        }
-
-        synchronized(recordingTracks) {
-            RecordingTrack rc = RecordingTrack.get(recordingTracks, track);
-            if (rc != null) {
-                rc.channel = channel;
-            } else {
-                recordingTracks.add(new RecordingTrack(track, channel));
-            }
-        }
-
-    }
-
-
-    public void recordDisable(Track track) {
-        synchronized(recordingTracks) {
-            RecordingTrack rc = RecordingTrack.get(recordingTracks, track);
-            if (rc != null) {
-                recordingTracks.remove(rc);
-            }
-        }
-
-    }
-
-
-    private boolean findTrack(Track track) {
-        boolean found = false;
-        if (sequence != null) {
-            Track[] tracks = sequence.getTracks();
-            for (int i = 0; i < tracks.length; i++) {
-                if (track == tracks[i]) {
-                    found = true;
-                    break;
-                }
-            }
-        }
-        return found;
-    }
-
-
-    public float getTempoInBPM() {
-        if (Printer.trace) Printer.trace(">> RealTimeSequencer: getTempoInBPM() ");
-
-        return (float) MidiUtils.convertTempo(getTempoInMPQ());
-    }
-
-
-    public void setTempoInBPM(float bpm) {
-        if (Printer.trace) Printer.trace(">> RealTimeSequencer: setTempoInBPM() ");
-        if (bpm <= 0) {
-            // should throw IllegalArgumentException
-            bpm = 1.0f;
-        }
-
-        setTempoInMPQ((float) MidiUtils.convertTempo((double) bpm));
-    }
-
-
-    public float getTempoInMPQ() {
-        if (Printer.trace) Printer.trace(">> RealTimeSequencer: getTempoInMPQ() ");
-
-        if (needCaching()) {
-            // if the sequencer is closed, return cached value
-            if (cacheTempoMPQ != -1) {
-                return (float) cacheTempoMPQ;
-            }
-            // if sequence is set, return current tempo
-            if (sequence != null) {
-                return tempoCache.getTempoMPQAt(getTickPosition());
-            }
-
-            // last resort: return a standard tempo: 120bpm
-            return (float) MidiUtils.DEFAULT_TEMPO_MPQ;
-        }
-        return (float)getDataPump().getTempoMPQ();
-    }
-
-
-    public void setTempoInMPQ(float mpq) {
-        if (mpq <= 0) {
-            // should throw IllegalArgumentException
-            mpq = 1.0f;
-        }
-
-        if (Printer.trace) Printer.trace(">> RealTimeSequencer: setTempoInMPQ() ");
-
-        if (needCaching()) {
-            // cache the value
-            cacheTempoMPQ = mpq;
-        } else {
-            // set the native tempo in MPQ
-            getDataPump().setTempoMPQ(mpq);
-
-            // reset the tempoInBPM and tempoInMPQ values so we won't use them again
-            cacheTempoMPQ = -1;
-        }
-    }
-
-
-    public void setTempoFactor(float factor) {
-        if (factor <= 0) {
-            // should throw IllegalArgumentException
-            return;
-        }
-
-        if (Printer.trace) Printer.trace(">> RealTimeSequencer: setTempoFactor() ");
-
-        if (needCaching()) {
-            cacheTempoFactor = factor;
-        } else {
-            getDataPump().setTempoFactor(factor);
-            // don't need cache anymore
-            cacheTempoFactor = -1;
-        }
-    }
-
-
-    public float getTempoFactor() {
-        if (Printer.trace) Printer.trace(">> RealTimeSequencer: getTempoFactor() ");
-
-        if (needCaching()) {
-            if (cacheTempoFactor != -1) {
-                return cacheTempoFactor;
-            }
-            return 1.0f;
-        }
-        return getDataPump().getTempoFactor();
-    }
-
-
-    public long getTickLength() {
-        if (Printer.trace) Printer.trace(">> RealTimeSequencer: getTickLength() ");
-
-        if (sequence == null) {
-            return 0;
-        }
-
-        return sequence.getTickLength();
-    }
-
-
-    public synchronized long getTickPosition() {
-        if (Printer.trace) Printer.trace(">> RealTimeSequencer: getTickPosition() ");
-
-        if (getDataPump() == null || sequence == null) {
-            return 0;
-        }
-
-        return getDataPump().getTickPos();
-    }
-
-
-    public synchronized void setTickPosition(long tick) {
-        if (tick < 0) {
-            // should throw IllegalArgumentException
-            return;
-        }
-
-        if (Printer.trace) Printer.trace(">> RealTimeSequencer: setTickPosition("+tick+") ");
-
-        if (getDataPump() == null) {
-            if (tick != 0) {
-                // throw new InvalidStateException("cannot set position in closed state");
-            }
-        }
-        else if (sequence == null) {
-            if (tick != 0) {
-                // throw new InvalidStateException("cannot set position if sequence is not set");
-            }
-        } else {
-            getDataPump().setTickPos(tick);
-        }
-    }
-
-
-    public long getMicrosecondLength() {
-        if (Printer.trace) Printer.trace(">> RealTimeSequencer: getMicrosecondLength() ");
-
-        if (sequence == null) {
-            return 0;
-        }
-
-        return sequence.getMicrosecondLength();
-    }
-
-
-    public long getMicrosecondPosition() {
-        if (Printer.trace) Printer.trace(">> RealTimeSequencer: getMicrosecondPosition() ");
-
-        if (getDataPump() == null || sequence == null) {
-            return 0;
-        }
-        synchronized (tempoCache) {
-            return MidiUtils.tick2microsecond(sequence, getDataPump().getTickPos(), tempoCache);
-        }
-    }
-
-
-    public void setMicrosecondPosition(long microseconds) {
-        if (microseconds < 0) {
-            // should throw IllegalArgumentException
-            return;
-        }
-
-        if (Printer.trace) Printer.trace(">> RealTimeSequencer: setMicrosecondPosition("+microseconds+") ");
-
-        if (getDataPump() == null) {
-            if (microseconds != 0) {
-                // throw new InvalidStateException("cannot set position in closed state");
-            }
-        }
-        else if (sequence == null) {
-            if (microseconds != 0) {
-                // throw new InvalidStateException("cannot set position if sequence is not set");
-            }
-        } else {
-            synchronized(tempoCache) {
-                setTickPosition(MidiUtils.microsecond2tick(sequence, microseconds, tempoCache));
-            }
-        }
-    }
-
-
-    public void setMasterSyncMode(Sequencer.SyncMode sync) {
-        // not supported
-    }
-
-
-    public Sequencer.SyncMode getMasterSyncMode() {
-        return masterSyncMode;
-    }
-
-
-    public Sequencer.SyncMode[] getMasterSyncModes() {
-        Sequencer.SyncMode[] returnedModes = new Sequencer.SyncMode[masterSyncModes.length];
-        System.arraycopy(masterSyncModes, 0, returnedModes, 0, masterSyncModes.length);
-        return returnedModes;
-    }
-
-
-    public void setSlaveSyncMode(Sequencer.SyncMode sync) {
-        // not supported
-    }
-
-
-    public Sequencer.SyncMode getSlaveSyncMode() {
-        return slaveSyncMode;
-    }
-
-
-    public Sequencer.SyncMode[] getSlaveSyncModes() {
-        Sequencer.SyncMode[] returnedModes = new Sequencer.SyncMode[slaveSyncModes.length];
-        System.arraycopy(slaveSyncModes, 0, returnedModes, 0, slaveSyncModes.length);
-        return returnedModes;
-    }
-
-    int getTrackCount() {
-        Sequence seq = getSequence();
-        if (seq != null) {
-            // $$fb wish there was a nicer way to get the number of tracks...
-            return sequence.getTracks().length;
-        }
-        return 0;
-    }
-
-
-
-    public synchronized void setTrackMute(int track, boolean mute) {
-        int trackCount = getTrackCount();
-        if (track < 0 || track >= getTrackCount()) return;
-        trackMuted = ensureBoolArraySize(trackMuted, trackCount);
-        trackMuted[track] = mute;
-        if (getDataPump() != null) {
-            getDataPump().muteSoloChanged();
-        }
-    }
-
-
-    public synchronized boolean getTrackMute(int track) {
-        if (track < 0 || track >= getTrackCount()) return false;
-        if (trackMuted == null || trackMuted.length <= track) return false;
-        return trackMuted[track];
-    }
-
-
-    public synchronized void setTrackSolo(int track, boolean solo) {
-        int trackCount = getTrackCount();
-        if (track < 0 || track >= getTrackCount()) return;
-        trackSolo = ensureBoolArraySize(trackSolo, trackCount);
-        trackSolo[track] = solo;
-        if (getDataPump() != null) {
-            getDataPump().muteSoloChanged();
-        }
-    }
-
-
-    public synchronized boolean getTrackSolo(int track) {
-        if (track < 0 || track >= getTrackCount()) return false;
-        if (trackSolo == null || trackSolo.length <= track) return false;
-        return trackSolo[track];
-    }
-
-
-    public boolean addMetaEventListener(MetaEventListener listener) {
-        synchronized(metaEventListeners) {
-            if (! metaEventListeners.contains(listener)) {
-
-                metaEventListeners.add(listener);
-            }
-            return true;
-        }
-    }
-
-
-    public void removeMetaEventListener(MetaEventListener listener) {
-        synchronized(metaEventListeners) {
-            int index = metaEventListeners.indexOf(listener);
-            if (index >= 0) {
-                metaEventListeners.remove(index);
-            }
-        }
-    }
-
-
-    public int[] addControllerEventListener(ControllerEventListener listener, int[] controllers) {
-        synchronized(controllerEventListeners) {
-
-            // first find the listener.  if we have one, add the controllers
-            // if not, create a new element for it.
-            ControllerListElement cve = null;
-            boolean flag = false;
-            for(int i=0; i < controllerEventListeners.size(); i++) {
-
-                cve = (ControllerListElement) controllerEventListeners.get(i);
-
-                if (cve.listener.equals(listener)) {
-                    cve.addControllers(controllers);
-                    flag = true;
-                    break;
-                }
-            }
-            if (!flag) {
-                cve = new ControllerListElement(listener, controllers);
-                controllerEventListeners.add(cve);
-            }
-
-            // and return all the controllers this listener is interested in
-            return cve.getControllers();
-        }
-    }
-
-
-    public int[] removeControllerEventListener(ControllerEventListener listener, int[] controllers) {
-        synchronized(controllerEventListeners) {
-            ControllerListElement cve = null;
-            boolean flag = false;
-            for (int i=0; i < controllerEventListeners.size(); i++) {
-                cve = (ControllerListElement) controllerEventListeners.get(i);
-                if (cve.listener.equals(listener)) {
-                    cve.removeControllers(controllers);
-                    flag = true;
-                    break;
-                }
-            }
-            if (!flag) {
-                return new int[0];
-            }
-            if (controllers == null) {
-                int index = controllerEventListeners.indexOf(cve);
-                if (index >= 0) {
-                    controllerEventListeners.remove(index);
-                }
-                return new int[0];
-            }
-            return cve.getControllers();
-        }
-    }
-
-
-    ////////////////// LOOPING (added in 1.5) ///////////////////////
-
-    public void setLoopStartPoint(long tick) {
-        if ((tick > getTickLength())
-            || ((loopEnd != -1) && (tick > loopEnd))
-            || (tick < 0)) {
-            throw new IllegalArgumentException("invalid loop start point: "+tick);
-        }
-        loopStart = tick;
-    }
-
-    public long getLoopStartPoint() {
-        return loopStart;
-    }
-
-    public void setLoopEndPoint(long tick) {
-        if ((tick > getTickLength())
-            || ((loopStart > tick) && (tick != -1))
-            || (tick < -1)) {
-            throw new IllegalArgumentException("invalid loop end point: "+tick);
-        }
-        loopEnd = tick;
-    }
-
-    public long getLoopEndPoint() {
-        return loopEnd;
-    }
-
-    public void setLoopCount(int count) {
-        if (count != LOOP_CONTINUOUSLY
-            && count < 0) {
-            throw new IllegalArgumentException("illegal value for loop count: "+count);
-        }
-        loopCount = count;
-        if (getDataPump() != null) {
-            getDataPump().resetLoopCount();
-        }
-    }
-
-    public int getLoopCount() {
-        return loopCount;
-    }
-
-
-    /* *********************************** play control ************************* */
-
-    /*
-     */
-    protected void implOpen() throws MidiUnavailableException {
-        if (Printer.trace) Printer.trace(">> RealTimeSequencer: implOpen()");
-
-        //openInternalSynth();
-
-        // create PlayThread
-        playThread = new PlayThread();
-
-        //id = nOpen();
-        //if (id == 0) {
-        //    throw new MidiUnavailableException("unable to open sequencer");
-        //}
-        if (sequence != null) {
-            playThread.setSequence(sequence);
-        }
-
-        // propagate caches
-        propagateCaches();
-
-        if (doAutoConnectAtNextOpen) {
-            doAutoConnect();
-        }
-        if (Printer.trace) Printer.trace("<< RealTimeSequencer: implOpen() succeeded");
-    }
-
-    private void doAutoConnect() {
-        if (Printer.trace) Printer.trace(">> RealTimeSequencer: doAutoConnect()");
-        Receiver rec = null;
-        // first try to connect to the default synthesizer
-        // IMPORTANT: this code needs to be synch'ed with
-        //            MidiSystem.getSequencer(boolean), because the same
-        //            algorithm needs to be used!
-        try {
-            Synthesizer synth = MidiSystem.getSynthesizer();
-            if (synth instanceof ReferenceCountingDevice) {
-                rec = ((ReferenceCountingDevice) synth).getReceiverReferenceCounting();
-            } else {
-                synth.open();
-                try {
-                    rec = synth.getReceiver();
-                } finally {
-                    // make sure that the synth is properly closed
-                    if (rec == null) {
-                        synth.close();
-                    }
-                }
-            }
-        } catch (Exception e) {
-            // something went wrong with synth
-        }
-        if (rec == null) {
-            // then try to connect to the default Receiver
-            try {
-                rec = MidiSystem.getReceiver();
-            } catch (Exception e) {
-                // something went wrong. Nothing to do then!
-            }
-        }
-        if (rec != null) {
-            autoConnectedReceiver = rec;
-            try {
-                getTransmitter().setReceiver(rec);
-            } catch (Exception e) {}
-        }
-        if (Printer.trace) Printer.trace("<< RealTimeSequencer: doAutoConnect() succeeded");
-    }
-
-    private synchronized void propagateCaches() {
-        // only set caches if open and sequence is set
-        if (sequence != null && isOpen()) {
-            if (cacheTempoFactor != -1) {
-                setTempoFactor(cacheTempoFactor);
-            }
-            if (cacheTempoMPQ == -1) {
-                setTempoInMPQ((new MidiUtils.TempoCache(sequence)).getTempoMPQAt(getTickPosition()));
-            } else {
-                setTempoInMPQ((float) cacheTempoMPQ);
-            }
-        }
-    }
-
-    /** populate the caches with the current values */
-    private synchronized void setCaches() {
-        cacheTempoFactor = getTempoFactor();
-        cacheTempoMPQ = getTempoInMPQ();
-    }
-
-
-
-    protected synchronized void implClose() {
-        if (Printer.trace) Printer.trace(">> RealTimeSequencer: implClose() ");
-
-        if (playThread == null) {
-            if (Printer.err) Printer.err("RealTimeSequencer.implClose() called, but playThread not instanciated!");
-        } else {
-            // Interrupt playback loop.
-            playThread.close();
-            playThread = null;
-        }
-
-        super.implClose();
-
-        sequence = null;
-        running = false;
-        cacheTempoMPQ = -1;
-        cacheTempoFactor = -1;
-        trackMuted = null;
-        trackSolo = null;
-        loopStart = 0;
-        loopEnd = -1;
-        loopCount = 0;
-
-        /** if this sequencer is set to autoconnect, need to
-         * re-establish the connection at next open!
-         */
-        doAutoConnectAtNextOpen = autoConnect;
-
-        if (autoConnectedReceiver != null) {
-            try {
-                autoConnectedReceiver.close();
-            } catch (Exception e) {}
-            autoConnectedReceiver = null;
-        }
-
-        if (Printer.trace) Printer.trace("<< RealTimeSequencer: implClose() completed");
-    }
-
-    void implStart() {
-        if (Printer.trace) Printer.trace(">> RealTimeSequencer: implStart()");
-
-        if (playThread == null) {
-            if (Printer.err) Printer.err("RealTimeSequencer.implStart() called, but playThread not instanciated!");
-            return;
-        }
-
-        tempoCache.refresh(sequence);
-        if (!running) {
-            running  = true;
-            playThread.start();
-        }
-        if (Printer.trace) Printer.trace("<< RealTimeSequencer: implStart() completed");
-    }
-
-
-    void implStop() {
-        if (Printer.trace) Printer.trace(">> RealTimeSequencer: implStop()");
-
-        if (playThread == null) {
-            if (Printer.err) Printer.err("RealTimeSequencer.implStop() called, but playThread not instanciated!");
-            return;
-        }
-
-        recording = false;
-        if (running) {
-            running = false;
-            playThread.stop();
-        }
-        if (Printer.trace) Printer.trace("<< RealTimeSequencer: implStop() completed");
-    }
-
-    private static EventDispatcher getEventDispatcher() {
-        // create and start the global event thread
-        //TODO  need a way to stop this thread when the engine is done
-        final ThreadGroup tg = Thread.currentThread().getThreadGroup();
-        synchronized (dispatchers) {
-            EventDispatcher eventDispatcher = dispatchers.get(tg);
-            if (eventDispatcher == null) {
-                eventDispatcher = new EventDispatcher();
-                dispatchers.put(tg, eventDispatcher);
-                eventDispatcher.start();
-            }
-            return eventDispatcher;
-        }
-    }
-
-    /**
-     * Send midi player events.
-     * must not be synchronized on "this"
-     */
-    void sendMetaEvents(MidiMessage message) {
-        if (metaEventListeners.size() == 0) return;
-
-        //if (Printer.debug) Printer.debug("sending a meta event");
-        getEventDispatcher().sendAudioEvents(message, metaEventListeners);
-    }
-
-    /**
-     * Send midi player events.
-     */
-    void sendControllerEvents(MidiMessage message) {
-        int size = controllerEventListeners.size();
-        if (size == 0) return;
-
-        //if (Printer.debug) Printer.debug("sending a controller event");
-
-        if (! (message instanceof ShortMessage)) {
-            if (Printer.debug) Printer.debug("sendControllerEvents: message is NOT instanceof ShortMessage!");
-            return;
-        }
-        ShortMessage msg = (ShortMessage) message;
-        int controller = msg.getData1();
-        List sendToListeners = new ArrayList();
-        for (int i = 0; i < size; i++) {
-            ControllerListElement cve = (ControllerListElement) controllerEventListeners.get(i);
-            for(int j = 0; j < cve.controllers.length; j++) {
-                if (cve.controllers[j] == controller) {
-                    sendToListeners.add(cve.listener);
-                    break;
-                }
-            }
-        }
-        getEventDispatcher().sendAudioEvents(message, sendToListeners);
-    }
-
-
-
-    private boolean needCaching() {
-        return !isOpen() || (sequence == null) || (playThread == null);
-    }
-
-    /**
-     * return the data pump instance, owned by play thread
-     * if playthread is null, return null.
-     * This method is guaranteed to return non-null if
-     * needCaching returns false
-     */
-    private DataPump getDataPump() {
-        if (playThread != null) {
-            return playThread.getDataPump();
-        }
-        return null;
-    }
-
-    private MidiUtils.TempoCache getTempoCache() {
-        return tempoCache;
-    }
-
-    private static boolean[] ensureBoolArraySize(boolean[] array, int desiredSize) {
-        if (array == null) {
-            return new boolean[desiredSize];
-        }
-        if (array.length < desiredSize) {
-            boolean[] newArray = new boolean[desiredSize];
-            System.arraycopy(array, 0, newArray, 0, array.length);
-            return newArray;
-        }
-        return array;
-    }
-
-
-    // OVERRIDES OF ABSTRACT MIDI DEVICE METHODS
-
-    protected boolean hasReceivers() {
-        return true;
-    }
-
-    // for recording
-    protected Receiver createReceiver() throws MidiUnavailableException {
-        return new SequencerReceiver();
-    }
-
-
-    protected boolean hasTransmitters() {
-        return true;
-    }
-
-
-    protected Transmitter createTransmitter() throws MidiUnavailableException {
-        return new SequencerTransmitter();
-    }
-
-
-    // interface AutoConnectSequencer
-    public void setAutoConnect(Receiver autoConnectedReceiver) {
-        this.autoConnect = (autoConnectedReceiver != null);
-        this.autoConnectedReceiver = autoConnectedReceiver;
-    }
-
-
-
-    // INNER CLASSES
-
-    /**
-     * An own class to distinguish the class name from
-     * the transmitter of other devices
-     */
-    private class SequencerTransmitter extends BasicTransmitter {
-        private SequencerTransmitter() {
-            super();
-        }
-    }
-
-
-    final class SequencerReceiver extends AbstractReceiver {
-
-        void implSend(MidiMessage message, long timeStamp) {
-            if (recording) {
-                long tickPos = 0;
-
-                // convert timeStamp to ticks
-                if (timeStamp < 0) {
-                    tickPos = getTickPosition();
-                } else {
-                    synchronized(tempoCache) {
-                        tickPos = MidiUtils.microsecond2tick(sequence, timeStamp, tempoCache);
-                    }
-                }
-
-                // and record to the first matching Track
-                Track track = null;
-                // do not record real-time events
-                // see 5048381: NullPointerException when saving a MIDI sequence
-                if (message.getLength() > 1) {
-                    if (message instanceof ShortMessage) {
-                        ShortMessage sm = (ShortMessage) message;
-                        // all real-time messages have 0xF in the high nibble of the status byte
-                        if ((sm.getStatus() & 0xF0) != 0xF0) {
-                            track = RecordingTrack.get(recordingTracks, sm.getChannel());
-                        }
-                    } else {
-                        // $$jb: where to record meta, sysex events?
-                        // $$fb: the first recording track
-                        track = RecordingTrack.get(recordingTracks, -1);
-                    }
-                    if (track != null) {
-                        // create a copy of this message
-                        if (message instanceof ShortMessage) {
-                            message = new FastShortMessage((ShortMessage) message);
-                        } else {
-                            message = (MidiMessage) message.clone();
-                        }
-
-                        // create new MidiEvent
-                        MidiEvent me = new MidiEvent(message, tickPos);
-                        track.add(me);
-                    }
-                }
-            }
-        }
-    }
-
-
-    private static class RealTimeSequencerInfo extends MidiDevice.Info {
-
-        private static final String name = "Real Time Sequencer";
-        private static final String vendor = "Oracle Corporation";
-        private static final String description = "Software sequencer";
-        private static final String version = "Version 1.0";
-
-        private RealTimeSequencerInfo() {
-            super(name, vendor, description, version);
-        }
-    } // class Info
-
-
-    private class ControllerListElement {
-
-        // $$jb: using an array for controllers b/c its
-        //       easier to deal with than turning all the
-        //       ints into objects to use a Vector
-        int []  controllers;
-        final ControllerEventListener listener;
-
-        private ControllerListElement(ControllerEventListener listener, int[] controllers) {
-
-            this.listener = listener;
-            if (controllers == null) {
-                controllers = new int[128];
-                for (int i = 0; i < 128; i++) {
-                    controllers[i] = i;
-                }
-            }
-            this.controllers = controllers;
-        }
-
-        private void addControllers(int[] c) {
-
-            if (c==null) {
-                controllers = new int[128];
-                for (int i = 0; i < 128; i++) {
-                    controllers[i] = i;
-                }
-                return;
-            }
-            int temp[] = new int[ controllers.length + c.length ];
-            int elements;
-
-            // first add what we have
-            for(int i=0; i<controllers.length; i++) {
-                temp[i] = controllers[i];
-            }
-            elements = controllers.length;
-            // now add the new controllers only if we don't already have them
-            for(int i=0; i<c.length; i++) {
-                boolean flag = false;
-
-                for(int j=0; j<controllers.length; j++) {
-                    if (c[i] == controllers[j]) {
-                        flag = true;
-                        break;
-                    }
-                }
-                if (!flag) {
-                    temp[elements++] = c[i];
-                }
-            }
-            // now keep only the elements we need
-            int newc[] = new int[ elements ];
-            for(int i=0; i<elements; i++){
-                newc[i] = temp[i];
-            }
-            controllers = newc;
-        }
-
-        private void removeControllers(int[] c) {
-
-            if (c==null) {
-                controllers = new int[0];
-            } else {
-                int temp[] = new int[ controllers.length ];
-                int elements = 0;
-
-
-                for(int i=0; i<controllers.length; i++){
-                    boolean flag = false;
-                    for(int j=0; j<c.length; j++) {
-                        if (controllers[i] == c[j]) {
-                            flag = true;
-                            break;
-                        }
-                    }
-                    if (!flag){
-                        temp[elements++] = controllers[i];
-                    }
-                }
-                // now keep only the elements remaining
-                int newc[] = new int[ elements ];
-                for(int i=0; i<elements; i++) {
-                    newc[i] = temp[i];
-                }
-                controllers = newc;
-
-            }
-        }
-
-        private int[] getControllers() {
-
-            // return a copy of our array of controllers,
-            // so others can't mess with it
-            if (controllers == null) {
-                return null;
-            }
-
-            int c[] = new int[controllers.length];
-
-            for(int i=0; i<controllers.length; i++){
-                c[i] = controllers[i];
-            }
-            return c;
-        }
-
-    } // class ControllerListElement
-
-
-    static class RecordingTrack {
-
-        private final Track track;
-        private int channel;
-
-        RecordingTrack(Track track, int channel) {
-            this.track = track;
-            this.channel = channel;
-        }
-
-        static RecordingTrack get(List recordingTracks, Track track) {
-
-            synchronized(recordingTracks) {
-                int size = recordingTracks.size();
-
-                for (int i = 0; i < size; i++) {
-                    RecordingTrack current = (RecordingTrack)recordingTracks.get(i);
-                    if (current.track == track) {
-                        return current;
-                    }
-                }
-            }
-            return null;
-        }
-
-        static Track get(List recordingTracks, int channel) {
-
-            synchronized(recordingTracks) {
-                int size = recordingTracks.size();
-                for (int i = 0; i < size; i++) {
-                    RecordingTrack current = (RecordingTrack)recordingTracks.get(i);
-                    if ((current.channel == channel) || (current.channel == -1)) {
-                        return current.track;
-                    }
-                }
-            }
-            return null;
-
-        }
-    }
-
-
-    final class PlayThread implements Runnable {
-        private Thread thread;
-        private final Object lock = new Object();
-
-        /** true if playback is interrupted (in close) */
-        boolean interrupted = false;
-        boolean isPumping = false;
-
-        private final DataPump dataPump = new DataPump();
-
-
-        PlayThread() {
-            // nearly MAX_PRIORITY
-            int priority = Thread.NORM_PRIORITY
-                + ((Thread.MAX_PRIORITY - Thread.NORM_PRIORITY) * 3) / 4;
-            thread = JSSecurityManager.createThread(this,
-                                                    "Java Sound Sequencer", // name
-                                                    false,                  // daemon
-                                                    priority,               // priority
-                                                    true);                  // doStart
-        }
-
-        DataPump getDataPump() {
-            return dataPump;
-        }
-
-        synchronized void setSequence(Sequence seq) {
-            dataPump.setSequence(seq);
-        }
-
-
-        /** start thread and pump. Requires up-to-date tempoCache */
-        synchronized void start() {
-            // mark the sequencer running
-            running = true;
-
-            if (!dataPump.hasCachedTempo()) {
-                long tickPos = getTickPosition();
-                dataPump.setTempoMPQ(tempoCache.getTempoMPQAt(tickPos));
-            }
-            dataPump.checkPointMillis = 0; // means restarted
-            dataPump.clearNoteOnCache();
-            dataPump.needReindex = true;
-
-            dataPump.resetLoopCount();
-
-            // notify the thread
-            synchronized(lock) {
-                lock.notifyAll();
-            }
-
-            if (Printer.debug) Printer.debug(" ->Started MIDI play thread");
-
-        }
-
-        // waits until stopped
-        synchronized void stop() {
-            playThreadImplStop();
-            long t = System.nanoTime() / 1000000l;
-            while (isPumping) {
-                synchronized(lock) {
-                    try {
-                        lock.wait(2000);
-                    } catch (InterruptedException ie) {
-                        // ignore
-                    }
-                }
-                // don't wait for more than 2 seconds
-                if ((System.nanoTime()/1000000l) - t > 1900) {
-                    if (Printer.err) Printer.err("Waited more than 2 seconds in RealTimeSequencer.PlayThread.stop()!");
-                    //break;
-                }
-            }
-        }
-
-        void playThreadImplStop() {
-            // mark the sequencer running
-            running = false;
-            synchronized(lock) {
-                lock.notifyAll();
-            }
-        }
-
-        void close() {
-            Thread oldThread = null;
-            synchronized (this) {
-                // dispose of thread
-                interrupted = true;
-                oldThread = thread;
-                thread = null;
-            }
-            if (oldThread != null) {
-                // wake up the thread if it's in wait()
-                synchronized(lock) {
-                    lock.notifyAll();
-                }
-            }
-            // wait for the thread to terminate itself,
-            // but max. 2 seconds. Must not be synchronized!
-            if (oldThread != null) {
-                try {
-                    oldThread.join(2000);
-                } catch (InterruptedException ie) {}
-            }
-        }
-
-
-        /**
-         * Main process loop driving the media flow.
-         *
-         * Make sure to NOT synchronize on RealTimeSequencer
-         * anywhere here (even implicit). That is a sure deadlock!
-         */
-        public void run() {
-
-            while (!interrupted) {
-                boolean EOM = false;
-                boolean wasRunning = running;
-                isPumping = !interrupted && running;
-                while (!EOM && !interrupted && running) {
-                    EOM = dataPump.pump();
-
-                    try {
-                        Thread.sleep(1);
-                    } catch (InterruptedException ie) {
-                        // ignore
-                    }
-                }
-                if (Printer.debug) {
-                    Printer.debug("Exited main pump loop because: ");
-                    if (EOM) Printer.debug(" -> EOM is reached");
-                    if (!running) Printer.debug(" -> running was set to false");
-                    if (interrupted) Printer.debug(" -> interrupted was set to true");
-                }
-
-                playThreadImplStop();
-                if (wasRunning) {
-                    dataPump.notesOff(true);
-                }
-                if (EOM) {
-                    dataPump.setTickPos(sequence.getTickLength());
-
-                    // send EOT event (mis-used for end of media)
-                    MetaMessage message = new MetaMessage();
-                    try{
-                        message.setMessage(MidiUtils.META_END_OF_TRACK_TYPE, new byte[0], 0);
-                    } catch(InvalidMidiDataException e1) {}
-                    sendMetaEvents(message);
-                }
-                synchronized (lock) {
-                    isPumping = false;
-                    // wake up a waiting stop() method
-                    lock.notifyAll();
-                    while (!running && !interrupted) {
-                        try {
-                            lock.wait();
-                        } catch (Exception ex) {}
-                    }
-                }
-            } // end of while(!EOM && !interrupted && running)
-            if (Printer.debug) Printer.debug("end of play thread");
-        }
-    }
-
-
-    /**
-     * class that does the actual dispatching of events,
-     * used to be in native in MMAPI
-     */
-    private class DataPump {
-        private float currTempo;         // MPQ tempo
-        private float tempoFactor;       // 1.0 is default
-        private float inverseTempoFactor;// = 1.0 / tempoFactor
-        private long ignoreTempoEventAt; // ignore next META tempo during playback at this tick pos only
-        private int resolution;
-        private float divisionType;
-        private long checkPointMillis;   // microseconds at checkoint
-        private long checkPointTick;     // ticks at checkpoint
-        private int[] noteOnCache;       // bit-mask of notes that are currently on
-        private Track[] tracks;
-        private boolean[] trackDisabled; // if true, do not play this track
-        private int[] trackReadPos;      // read index per track
-        private long lastTick;
-        private boolean needReindex = false;
-        private int currLoopCounter = 0;
-
-        //private sun.misc.Perf perf = sun.misc.Perf.getPerf();
-        //private long perfFreq = perf.highResFrequency();
-
-
-        DataPump() {
-            init();
-        }
-
-        synchronized void init() {
-            ignoreTempoEventAt = -1;
-            tempoFactor = 1.0f;
-            inverseTempoFactor = 1.0f;
-            noteOnCache = new int[128];
-            tracks = null;
-            trackDisabled = null;
-        }
-
-        synchronized void setTickPos(long tickPos) {
-            long oldLastTick = tickPos;
-            lastTick = tickPos;
-            if (running) {
-                notesOff(false);
-            }
-            if (running || tickPos > 0) {
-                // will also reindex
-                chaseEvents(oldLastTick, tickPos);
-            } else {
-                needReindex = true;
-            }
-            if (!hasCachedTempo()) {
-                setTempoMPQ(getTempoCache().getTempoMPQAt(lastTick, currTempo));
-                // treat this as if it is a real time tempo change
-                ignoreTempoEventAt = -1;
-            }
-            // trigger re-configuration
-            checkPointMillis = 0;
-        }
-
-        long getTickPos() {
-            return lastTick;
-        }
-
-        // hasCachedTempo is only valid if it is the current position
-        boolean hasCachedTempo() {
-            if (ignoreTempoEventAt != lastTick) {
-                ignoreTempoEventAt = -1;
-            }
-            return ignoreTempoEventAt >= 0;
-        }
-
-        // this method is also used internally in the pump!
-        synchronized void setTempoMPQ(float tempoMPQ) {
-            if (tempoMPQ > 0 && tempoMPQ != currTempo) {
-                ignoreTempoEventAt = lastTick;
-                this.currTempo = tempoMPQ;
-                // re-calculate check point
-                checkPointMillis = 0;
-            }
-        }
-
-        float getTempoMPQ() {
-            return currTempo;
-        }
-
-        synchronized void setTempoFactor(float factor) {
-            if (factor > 0 && factor != this.tempoFactor) {
-                tempoFactor = factor;
-                inverseTempoFactor = 1.0f / factor;
-                // re-calculate check point
-                checkPointMillis = 0;
-            }
-        }
-
-        float getTempoFactor() {
-            return tempoFactor;
-        }
-
-        synchronized void muteSoloChanged() {
-            boolean[] newDisabled = makeDisabledArray();
-            if (running) {
-                applyDisabledTracks(trackDisabled, newDisabled);
-            }
-            trackDisabled = newDisabled;
-        }
-
-
-
-        synchronized void setSequence(Sequence seq) {
-            if (seq == null) {
-                init();
-                return;
-            }
-            tracks = seq.getTracks();
-            muteSoloChanged();
-            resolution = seq.getResolution();
-            divisionType = seq.getDivisionType();
-            trackReadPos = new int[tracks.length];
-            // trigger re-initialization
-            checkPointMillis = 0;
-            needReindex = true;
-        }
-
-        synchronized void resetLoopCount() {
-            currLoopCounter = loopCount;
-        }
-
-        void clearNoteOnCache() {
-            for (int i = 0; i < 128; i++) {
-                noteOnCache[i] = 0;
-            }
-        }
-
-        void notesOff(boolean doControllers) {
-            int done = 0;
-            for (int ch=0; ch<16; ch++) {
-                int channelMask = (1<<ch);
-                for (int i=0; i<128; i++) {
-                    if ((noteOnCache[i] & channelMask) != 0) {
-                        noteOnCache[i] ^= channelMask;
-                        // send note on with velocity 0
-                        getTransmitterList().sendMessage((ShortMessage.NOTE_ON | ch) | (i<<8), -1);
-                        done++;
-                    }
-                }
-                /* all notes off */
-                getTransmitterList().sendMessage((ShortMessage.CONTROL_CHANGE | ch) | (123<<8), -1);
-                /* sustain off */
-                getTransmitterList().sendMessage((ShortMessage.CONTROL_CHANGE | ch) | (64<<8), -1);
-                if (doControllers) {
-                    /* reset all controllers */
-                    getTransmitterList().sendMessage((ShortMessage.CONTROL_CHANGE | ch) | (121<<8), -1);
-                    done++;
-                }
-            }
-            if (DEBUG_PUMP) Printer.println("  noteOff: sent "+done+" messages.");
-        }
-
-
-        private boolean[] makeDisabledArray() {
-            if (tracks == null) {
-                return null;
-            }
-            boolean[] newTrackDisabled = new boolean[tracks.length];
-            boolean[] solo;
-            boolean[] mute;
-            synchronized(RealTimeSequencer.this) {
-                mute = trackMuted;
-                solo = trackSolo;
-            }
-            // if one track is solo, then only play solo
-            boolean hasSolo = false;
-            if (solo != null) {
-                for (int i = 0; i < solo.length; i++) {
-                    if (solo[i]) {
-                        hasSolo = true;
-                        break;
-                    }
-                }
-            }
-            if (hasSolo) {
-                // only the channels with solo play, regardless of mute
-                for (int i = 0; i < newTrackDisabled.length; i++) {
-                    newTrackDisabled[i] = (i >= solo.length) || (!solo[i]);
-                }
-            } else {
-                // mute the selected channels
-                for (int i = 0; i < newTrackDisabled.length; i++) {
-                    newTrackDisabled[i] = (mute != null) && (i < mute.length) && (mute[i]);
-                }
-            }
-            return newTrackDisabled;
-        }
-
-        /**
-         * chase all events from beginning of Track
-         * and send note off for those events that are active
-         * in noteOnCache array.
-         * It is possible, of course, to catch notes from other tracks,
-         * but better than more complicated logic to detect
-         * which notes are really from this track
-         */
-        private void sendNoteOffIfOn(Track track, long endTick) {
-            int size = track.size();
-            int done = 0;
-            try {
-                for (int i = 0; i < size; i++) {
-                    MidiEvent event = track.get(i);
-                    if (event.getTick() > endTick) break;
-                    MidiMessage msg = event.getMessage();
-                    int status = msg.getStatus();
-                    int len = msg.getLength();
-                    if (len == 3 && ((status & 0xF0) == ShortMessage.NOTE_ON)) {
-                        int note = -1;
-                        if (msg instanceof ShortMessage) {
-                            ShortMessage smsg = (ShortMessage) msg;
-                            if (smsg.getData2() > 0) {
-                                // only consider Note On with velocity > 0
-                                note = smsg.getData1();
-                            }
-                        } else {
-                            byte[] data = msg.getMessage();
-                            if ((data[2] & 0x7F) > 0) {
-                                // only consider Note On with velocity > 0
-                                note = data[1] & 0x7F;
-                            }
-                        }
-                        if (note >= 0) {
-                            int bit = 1<<(status & 0x0F);
-                            if ((noteOnCache[note] & bit) != 0) {
-                                // the bit is set. Send Note Off
-                                getTransmitterList().sendMessage(status | (note<<8), -1);
-                                // clear the bit
-                                noteOnCache[note] &= (0xFFFF ^ bit);
-                                done++;
-                            }
-                        }
-                    }
-                }
-            } catch (ArrayIndexOutOfBoundsException aioobe) {
-                // this happens when messages are removed
-                // from the track while this method executes
-            }
-            if (DEBUG_PUMP) Printer.println("  sendNoteOffIfOn: sent "+done+" messages.");
-        }
-
-
-        /**
-         * Runtime application of mute/solo:
-         * if a track is muted that was previously playing, send
-         *    note off events for all currently playing notes
-         */
-        private void applyDisabledTracks(boolean[] oldDisabled, boolean[] newDisabled) {
-            byte[][] tempArray = null;
-            synchronized(RealTimeSequencer.this) {
-                for (int i = 0; i < newDisabled.length; i++) {
-                    if (((oldDisabled == null)
-                         || (i >= oldDisabled.length)
-                         || !oldDisabled[i])
-                        && newDisabled[i]) {
-                        // case that a track gets muted: need to
-                        // send appropriate note off events to prevent
-                        // hanging notes
-
-                        if (tracks.length > i) {
-                            sendNoteOffIfOn(tracks[i], lastTick);
-                        }
-                    }
-                    else if ((oldDisabled != null)
-                             && (i < oldDisabled.length)
-                             && oldDisabled[i]
-                             && !newDisabled[i]) {
-                        // case that a track was muted and is now unmuted
-                        // need to chase events and re-index this track
-                        if (tempArray == null) {
-                            tempArray = new byte[128][16];
-                        }
-                        chaseTrackEvents(i, 0, lastTick, true, tempArray);
-                    }
-                }
-            }
-        }
-
-        /** go through all events from startTick to endTick
-         * chase the controller state and program change state
-         * and then set the end-states at once.
-         *
-         * needs to be called in synchronized state
-         * @param tempArray an byte[128][16] to hold controller messages
-         */
-        private void chaseTrackEvents(int trackNum,
-                                      long startTick,
-                                      long endTick,
-                                      boolean doReindex,
-                                      byte[][] tempArray) {
-            if (startTick > endTick) {
-                // start from the beginning
-                startTick = 0;
-            }
-            byte[] progs = new byte[16];
-            // init temp array with impossible values
-            for (int ch = 0; ch < 16; ch++) {
-                progs[ch] = -1;
-                for (int co = 0; co < 128; co++) {
-                    tempArray[co][ch] = -1;
-                }
-            }
-            Track track = tracks[trackNum];
-            int size = track.size();
-            try {
-                for (int i = 0; i < size; i++) {
-                    MidiEvent event = track.get(i);
-                    if (event.getTick() >= endTick) {
-                        if (doReindex && (trackNum < trackReadPos.length)) {
-                            trackReadPos[trackNum] = (i > 0)?(i-1):0;
-                            if (DEBUG_PUMP) Printer.println("  chaseEvents: setting trackReadPos["+trackNum+"] = "+trackReadPos[trackNum]);
-                        }
-                        break;
-                    }
-                    MidiMessage msg = event.getMessage();
-                    int status = msg.getStatus();
-                    int len = msg.getLength();
-                    if (len == 3 && ((status & 0xF0) == ShortMessage.CONTROL_CHANGE)) {
-                        if (msg instanceof ShortMessage) {
-                            ShortMessage smsg = (ShortMessage) msg;
-                            tempArray[smsg.getData1() & 0x7F][status & 0x0F] = (byte) smsg.getData2();
-                        } else {
-                            byte[] data = msg.getMessage();
-                            tempArray[data[1] & 0x7F][status & 0x0F] = data[2];
-                        }
-                    }
-                    if (len == 2 && ((status & 0xF0) == ShortMessage.PROGRAM_CHANGE)) {
-                        if (msg instanceof ShortMessage) {
-                            ShortMessage smsg = (ShortMessage) msg;
-                            progs[status & 0x0F] = (byte) smsg.getData1();
-                        } else {
-                            byte[] data = msg.getMessage();
-                            progs[status & 0x0F] = data[1];
-                        }
-                    }
-                }
-            } catch (ArrayIndexOutOfBoundsException aioobe) {
-                // this happens when messages are removed
-                // from the track while this method executes
-            }
-            int numControllersSent = 0;
-            // now send out the aggregated controllers and program changes
-            for (int ch = 0; ch < 16; ch++) {
-                for (int co = 0; co < 128; co++) {
-                    byte controllerValue = tempArray[co][ch];
-                    if (controllerValue >= 0) {
-                        int packedMsg = (ShortMessage.CONTROL_CHANGE | ch) | (co<<8) | (controllerValue<<16);
-                        getTransmitterList().sendMessage(packedMsg, -1);
-                        numControllersSent++;
-                    }
-                }
-                // send program change *after* controllers, to
-                // correctly initialize banks
-                if (progs[ch] >= 0) {
-                    getTransmitterList().sendMessage((ShortMessage.PROGRAM_CHANGE | ch) | (progs[ch]<<8), -1);
-                }
-                if (progs[ch] >= 0 || startTick == 0 || endTick == 0) {
-                    // reset pitch bend on this channel (E0 00 40)
-                    getTransmitterList().sendMessage((ShortMessage.PITCH_BEND | ch) | (0x40 << 16), -1);
-                    // reset sustain pedal on this channel
-                    getTransmitterList().sendMessage((ShortMessage.CONTROL_CHANGE | ch) | (64 << 8), -1);
-                }
-            }
-            if (DEBUG_PUMP) Printer.println("  chaseTrackEvents track "+trackNum+": sent "+numControllersSent+" controllers.");
-        }
-
-
-        /** chase controllers and program for all tracks */
-        synchronized void chaseEvents(long startTick, long endTick) {
-            if (DEBUG_PUMP) Printer.println(">> chaseEvents from tick "+startTick+".."+(endTick-1));
-            byte[][] tempArray = new byte[128][16];
-            for (int t = 0; t < tracks.length; t++) {
-                if ((trackDisabled == null)
-                    || (trackDisabled.length <= t)
-                    || (!trackDisabled[t])) {
-                    // if track is not disabled, chase the events for it
-                    chaseTrackEvents(t, startTick, endTick, true, tempArray);
-                }
-            }
-            if (DEBUG_PUMP) Printer.println("<< chaseEvents");
-        }
-
-
-        // playback related methods (pumping)
-
-        private long getCurrentTimeMillis() {
-            return System.nanoTime() / 1000000l;
-            //return perf.highResCounter() * 1000 / perfFreq;
-        }
-
-        private long millis2tick(long millis) {
-            if (divisionType != Sequence.PPQ) {
-                double dTick = ((((double) millis) * tempoFactor)
-                                * ((double) divisionType)
-                                * ((double) resolution))
-                    / ((double) 1000);
-                return (long) dTick;
-            }
-            return MidiUtils.microsec2ticks(millis * 1000,
-                                            currTempo * inverseTempoFactor,
-                                            resolution);
-        }
-
-        private long tick2millis(long tick) {
-            if (divisionType != Sequence.PPQ) {
-                double dMillis = ((((double) tick) * 1000) /
-                                  (tempoFactor * ((double) divisionType) * ((double) resolution)));
-                return (long) dMillis;
-            }
-            return MidiUtils.ticks2microsec(tick,
-                                            currTempo * inverseTempoFactor,
-                                            resolution) / 1000;
-        }
-
-        private void ReindexTrack(int trackNum, long tick) {
-            if (trackNum < trackReadPos.length && trackNum < tracks.length) {
-                trackReadPos[trackNum] = MidiUtils.tick2index(tracks[trackNum], tick);
-                if (DEBUG_PUMP) Printer.println("  reindexTrack: setting trackReadPos["+trackNum+"] = "+trackReadPos[trackNum]);
-            }
-        }
-
-        /* returns if changes are pending */
-        private boolean dispatchMessage(int trackNum, MidiEvent event) {
-            boolean changesPending = false;
-            MidiMessage message = event.getMessage();
-            int msgStatus = message.getStatus();
-            int msgLen = message.getLength();
-            if (msgStatus == MetaMessage.META && msgLen >= 2) {
-                // a meta message. Do not send it to the device.
-                // 0xFF with length=1 is a MIDI realtime message
-                // which shouldn't be in a Sequence, but we play it
-                // nonetheless.
-
-                // see if this is a tempo message. Only on track 0.
-                if (trackNum == 0) {
-                    int newTempo = MidiUtils.getTempoMPQ(message);
-                    if (newTempo > 0) {
-                        if (event.getTick() != ignoreTempoEventAt) {
-                            setTempoMPQ(newTempo); // sets ignoreTempoEventAt!
-                            changesPending = true;
-                        }
-                        // next loop, do not ignore anymore tempo events.
-                        ignoreTempoEventAt = -1;
-                    }
-                }
-                // send to listeners
-                sendMetaEvents(message);
-
-            } else {
-                // not meta, send to device
-                getTransmitterList().sendMessage(message, -1);
-
-                switch (msgStatus & 0xF0) {
-                case ShortMessage.NOTE_OFF: {
-                    // note off - clear the bit in the noteOnCache array
-                    int note = ((ShortMessage) message).getData1() & 0x7F;
-                    noteOnCache[note] &= (0xFFFF ^ (1<<(msgStatus & 0x0F)));
-                    break;
-                }
-
-                case ShortMessage.NOTE_ON: {
-                    // note on
-                    ShortMessage smsg = (ShortMessage) message;
-                    int note = smsg.getData1() & 0x7F;
-                    int vel = smsg.getData2() & 0x7F;
-                    if (vel > 0) {
-                        // if velocity > 0 set the bit in the noteOnCache array
-                        noteOnCache[note] |= 1<<(msgStatus & 0x0F);
-                    } else {
-                        // if velocity = 0 clear the bit in the noteOnCache array
-                        noteOnCache[note] &= (0xFFFF ^ (1<<(msgStatus & 0x0F)));
-                    }
-                    break;
-                }
-
-                case ShortMessage.CONTROL_CHANGE:
-                    // if controller message, send controller listeners
-                    sendControllerEvents(message);
-                    break;
-
-                }
-            }
-            return changesPending;
-        }
-
-
-        /** the main pump method
-         * @return true if end of sequence is reached
-         */
-        synchronized boolean pump() {
-            long currMillis;
-            long targetTick = lastTick;
-            MidiEvent currEvent;
-            boolean changesPending = false;
-            boolean doLoop = false;
-            boolean EOM = false;
-
-            currMillis = getCurrentTimeMillis();
-            int finishedTracks = 0;
-            do {
-                changesPending = false;
-
-                // need to re-find indexes in tracks?
-                if (needReindex) {
-                    if (DEBUG_PUMP) Printer.println("Need to re-index at "+currMillis+" millis. TargetTick="+targetTick);
-                    if (trackReadPos.length < tracks.length) {
-                        trackReadPos = new int[tracks.length];
-                    }
-                    for (int t = 0; t < tracks.length; t++) {
-                        ReindexTrack(t, targetTick);
-                        if (DEBUG_PUMP_ALL) Printer.println("  Setting trackReadPos["+t+"]="+trackReadPos[t]);
-                    }
-                    needReindex = false;
-                    checkPointMillis = 0;
-                }
-
-                // get target tick from current time in millis
-                if (checkPointMillis == 0) {
-                    // new check point
-                    currMillis = getCurrentTimeMillis();
-                    checkPointMillis = currMillis;
-                    targetTick = lastTick;
-                    checkPointTick = targetTick;
-                    if (DEBUG_PUMP) Printer.println("New checkpoint to "+currMillis+" millis. "
-                                                       +"TargetTick="+targetTick
-                                                       +" new tempo="+MidiUtils.convertTempo(currTempo)+"bpm");
-                } else {
-                    // calculate current tick based on current time in milliseconds
-                    targetTick = checkPointTick + millis2tick(currMillis - checkPointMillis);
-                    if (DEBUG_PUMP_ALL) Printer.println("targetTick = "+targetTick+" at "+currMillis+" millis");
-                    if ((loopEnd != -1)
-                        && ((loopCount > 0 && currLoopCounter > 0)
-                            || (loopCount == LOOP_CONTINUOUSLY))) {
-                        if (lastTick <= loopEnd && targetTick >= loopEnd) {
-                            // need to loop!
-                            // only play until loop end
-                            targetTick = loopEnd - 1;
-                            doLoop = true;
-                            if (DEBUG_PUMP) Printer.println("set doLoop to true. lastTick="+lastTick
-                                                               +"  targetTick="+targetTick
-                                                               +"  loopEnd="+loopEnd
-                                                               +"  jumping to loopStart="+loopStart
-                                                               +"  new currLoopCounter="+currLoopCounter);
-                            if (DEBUG_PUMP) Printer.println("  currMillis="+currMillis
-                                                               +"  checkPointMillis="+checkPointMillis
-                                                               +"  checkPointTick="+checkPointTick);
-
-                        }
-                    }
-                    lastTick = targetTick;
-                }
-
-                finishedTracks = 0;
-
-                for (int t = 0; t < tracks.length; t++) {
-                    try {
-                        boolean disabled = trackDisabled[t];
-                        Track thisTrack = tracks[t];
-                        int readPos = trackReadPos[t];
-                        int size = thisTrack.size();
-                        // play all events that are due until targetTick
-                        while (!changesPending && (readPos < size)
-                               && (currEvent = thisTrack.get(readPos)).getTick() <= targetTick) {
-
-                            if ((readPos == size -1) &&  MidiUtils.isMetaEndOfTrack(currEvent.getMessage())) {
-                                // do not send out this message. Finished with this track
-                                readPos = size;
-                                break;
-                            }
-                            // TODO: some kind of heuristics if the MIDI messages have changed
-                            // significantly (i.e. deleted or inserted a bunch of messages)
-                            // since last time. Would need to set needReindex = true then
-                            readPos++;
-                            // only play this event if the track is enabled,
-                            // or if it is a tempo message on track 0
-                            // Note: cannot put this check outside
-                            //       this inner loop in order to detect end of file
-                            if (!disabled ||
-                                ((t == 0) && (MidiUtils.isMetaTempo(currEvent.getMessage())))) {
-                                changesPending = dispatchMessage(t, currEvent);
-                            }
-                        }
-                        if (readPos >= size) {
-                            finishedTracks++;
-                        }
-                        if (DEBUG_PUMP_ALL) {
-                            System.out.print(" pumped track "+t+" ("+size+" events) "
-                                             +" from index: "+trackReadPos[t]
-                                             +" to "+(readPos-1));
-                            System.out.print(" -> ticks: ");
-                            if (trackReadPos[t] < size) {
-                                System.out.print(""+(thisTrack.get(trackReadPos[t]).getTick()));
-                            } else {
-                                System.out.print("EOT");
-                            }
-                            System.out.print(" to ");
-                            if (readPos < size) {
-                                System.out.print(""+(thisTrack.get(readPos-1).getTick()));
-                            } else {
-                                System.out.print("EOT");
-                            }
-                            System.out.println();
-                        }
-                        trackReadPos[t] = readPos;
-                    } catch(Exception e) {
-                        if (Printer.debug) Printer.debug("Exception in Sequencer pump!");
-                        if (Printer.debug) e.printStackTrace();
-                        if (e instanceof ArrayIndexOutOfBoundsException) {
-                            needReindex = true;
-                            changesPending = true;
-                        }
-                    }
-                    if (changesPending) {
-                        break;
-                    }
-                }
-                EOM = (finishedTracks == tracks.length);
-                if (doLoop
-                    || ( ((loopCount > 0 && currLoopCounter > 0)
-                          || (loopCount == LOOP_CONTINUOUSLY))
-                         && !changesPending
-                         && (loopEnd == -1)
-                         && EOM)) {
-
-                    long oldCheckPointMillis = checkPointMillis;
-                    long loopEndTick = loopEnd;
-                    if (loopEndTick == -1) {
-                        loopEndTick = lastTick;
-                    }
-
-                    // need to loop back!
-                    if (loopCount != LOOP_CONTINUOUSLY) {
-                        currLoopCounter--;
-                    }
-                    if (DEBUG_PUMP) Printer.println("Execute loop: lastTick="+lastTick
-                                                       +"  loopEnd="+loopEnd
-                                                       +"  jumping to loopStart="+loopStart
-                                                       +"  new currLoopCounter="+currLoopCounter);
-                    setTickPos(loopStart);
-                    // now patch the checkPointMillis so that
-                    // it points to the exact beginning of when the loop was finished
-
-                    // $$fb TODO: although this is mathematically correct (i.e. the loop position
-                    //            is correct, and doesn't drift away with several repetition,
-                    //            there is a slight lag when looping back, probably caused
-                    //            by the chasing.
-
-                    checkPointMillis = oldCheckPointMillis + tick2millis(loopEndTick - checkPointTick);
-                    checkPointTick = loopStart;
-                    if (DEBUG_PUMP) Printer.println("  Setting currMillis="+currMillis
-                                                       +"  new checkPointMillis="+checkPointMillis
-                                                       +"  new checkPointTick="+checkPointTick);
-                    // no need for reindexing, is done in setTickPos
-                    needReindex = false;
-                    changesPending = false;
-                    // reset doLoop flag
-                    doLoop = false;
-                    EOM = false;
-                }
-            } while (changesPending);
-
-            return EOM;
-        }
-
-    } // class DataPump
-
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/RealTimeSequencerProvider.java b/ojluni/src/main/java/com/sun/media/sound/RealTimeSequencerProvider.java
deleted file mode 100755
index d272495..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/RealTimeSequencerProvider.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright (c) 2003, 2013, 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.media.sound;
-
-import javax.sound.midi.MidiDevice;
-import javax.sound.midi.MidiUnavailableException;
-import javax.sound.midi.spi.MidiDeviceProvider;
-
-/**
- * Provider for RealTimeSequencer objects.
- *
- * @author Florian Bomers
- */
-public final class RealTimeSequencerProvider extends MidiDeviceProvider {
-
-
-    public MidiDevice.Info[] getDeviceInfo() {
-
-        MidiDevice.Info[] localArray = { RealTimeSequencer.info };
-        return localArray;
-    }
-
-
-    public MidiDevice getDevice(MidiDevice.Info info) {
-        if ((info != null) && (!info.equals(RealTimeSequencer.info))) {
-            return null;
-        }
-
-        try {
-            return new RealTimeSequencer();
-        } catch (MidiUnavailableException e) {
-            return null;
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/ReferenceCountingDevice.java b/ojluni/src/main/java/com/sun/media/sound/ReferenceCountingDevice.java
deleted file mode 100755
index b06d6db..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/ReferenceCountingDevice.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (c) 2003, 2007, 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.media.sound;
-
-import javax.sound.midi.MidiUnavailableException;
-import javax.sound.midi.Receiver;
-import javax.sound.midi.Transmitter;
-
-
-
-/** MidiDevice that can use reference counting for open/close.
- * This interface is intended to be used by MidiSystem.getTransmitter() and
- * MidiSystem.getReceiver().
- *
- * @author Matthias Pfisterer
- */
-public interface ReferenceCountingDevice {
-    /** Retrieve a Receiver that opens the device implicitly.
-     * This method is similar to MidiDevice.getReceiver(). However, by calling this one,
-     * the device is opened implicitly. This is needed by MidiSystem.getReceiver().
-     */
-    public Receiver getReceiverReferenceCounting() throws MidiUnavailableException;
-
-    /** Retrieve a Transmitter that opens the device implicitly.
-     * This method is similar to MidiDevice.getTransmitter(). However, by calling this one,
-     * the device is opened implicitly. This is needed by MidiSystem.getTransmitter().
-     */
-    public Transmitter getTransmitterReferenceCounting() throws MidiUnavailableException;
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/SF2GlobalRegion.java b/ojluni/src/main/java/com/sun/media/sound/SF2GlobalRegion.java
deleted file mode 100755
index 22ed404..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/SF2GlobalRegion.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, 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.media.sound;
-
-/**
- * Soundfont global region.
- *
- * @author Karl Helgason
- */
-public final class SF2GlobalRegion extends SF2Region {
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/SF2Instrument.java b/ojluni/src/main/java/com/sun/media/sound/SF2Instrument.java
deleted file mode 100755
index 580882b..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/SF2Instrument.java
+++ /dev/null
@@ -1,911 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, 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.media.sound;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.sound.midi.Patch;
-
-/**
- * Soundfont instrument.
- *
- * @author Karl Helgason
- */
-public final class SF2Instrument extends ModelInstrument {
-
-    String name = "";
-    int preset = 0;
-    int bank = 0;
-    long library = 0;
-    long genre = 0;
-    long morphology = 0;
-    SF2GlobalRegion globalregion = null;
-    List<SF2InstrumentRegion> regions
-            = new ArrayList<SF2InstrumentRegion>();
-
-    public SF2Instrument() {
-        super(null, null, null, null);
-    }
-
-    public SF2Instrument(SF2Soundbank soundbank) {
-        super(soundbank, null, null, null);
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public Patch getPatch() {
-        if (bank == 128)
-            return new ModelPatch(0, preset, true);
-        else
-            return new ModelPatch(bank << 7, preset, false);
-    }
-
-    public void setPatch(Patch patch) {
-        if (patch instanceof ModelPatch && ((ModelPatch) patch).isPercussion()) {
-            bank = 128;
-            preset = patch.getProgram();
-        } else {
-            bank = patch.getBank() >> 7;
-            preset = patch.getProgram();
-        }
-    }
-
-    public Object getData() {
-        return null;
-    }
-
-    public long getGenre() {
-        return genre;
-    }
-
-    public void setGenre(long genre) {
-        this.genre = genre;
-    }
-
-    public long getLibrary() {
-        return library;
-    }
-
-    public void setLibrary(long library) {
-        this.library = library;
-    }
-
-    public long getMorphology() {
-        return morphology;
-    }
-
-    public void setMorphology(long morphology) {
-        this.morphology = morphology;
-    }
-
-    public List<SF2InstrumentRegion> getRegions() {
-        return regions;
-    }
-
-    public SF2GlobalRegion getGlobalRegion() {
-        return globalregion;
-    }
-
-    public void setGlobalZone(SF2GlobalRegion zone) {
-        globalregion = zone;
-    }
-
-    public String toString() {
-        if (bank == 128)
-            return "Drumkit: " + name + " preset #" + preset;
-        else
-            return "Instrument: " + name + " bank #" + bank
-                    + " preset #" + preset;
-    }
-
-    public ModelPerformer[] getPerformers() {
-        int performercount = 0;
-        for (SF2InstrumentRegion presetzone : regions)
-            performercount += presetzone.getLayer().getRegions().size();
-        ModelPerformer[] performers = new ModelPerformer[performercount];
-        int pi = 0;
-
-        SF2GlobalRegion presetglobal = globalregion;
-        for (SF2InstrumentRegion presetzone : regions) {
-            Map<Integer, Short> pgenerators = new HashMap<Integer, Short>();
-            pgenerators.putAll(presetzone.getGenerators());
-            if (presetglobal != null)
-                pgenerators.putAll(presetglobal.getGenerators());
-
-            SF2Layer layer = presetzone.getLayer();
-            SF2GlobalRegion layerglobal = layer.getGlobalRegion();
-            for (SF2LayerRegion layerzone : layer.getRegions()) {
-                ModelPerformer performer = new ModelPerformer();
-                if (layerzone.getSample() != null)
-                    performer.setName(layerzone.getSample().getName());
-                else
-                    performer.setName(layer.getName());
-
-                performers[pi++] = performer;
-
-                int keyfrom = 0;
-                int keyto = 127;
-                int velfrom = 0;
-                int velto = 127;
-
-                if (layerzone.contains(SF2Region.GENERATOR_EXCLUSIVECLASS)) {
-                    performer.setExclusiveClass(layerzone.getInteger(
-                            SF2Region.GENERATOR_EXCLUSIVECLASS));
-                }
-                if (layerzone.contains(SF2Region.GENERATOR_KEYRANGE)) {
-                    byte[] bytes = layerzone.getBytes(
-                            SF2Region.GENERATOR_KEYRANGE);
-                    if (bytes[0] >= 0)
-                        if (bytes[0] > keyfrom)
-                            keyfrom = bytes[0];
-                    if (bytes[1] >= 0)
-                        if (bytes[1] < keyto)
-                            keyto = bytes[1];
-                }
-                if (layerzone.contains(SF2Region.GENERATOR_VELRANGE)) {
-                    byte[] bytes = layerzone.getBytes(
-                            SF2Region.GENERATOR_VELRANGE);
-                    if (bytes[0] >= 0)
-                        if (bytes[0] > velfrom)
-                            velfrom = bytes[0];
-                    if (bytes[1] >= 0)
-                        if (bytes[1] < velto)
-                            velto = bytes[1];
-                }
-                if (presetzone.contains(SF2Region.GENERATOR_KEYRANGE)) {
-                    byte[] bytes = presetzone.getBytes(
-                            SF2Region.GENERATOR_KEYRANGE);
-                    if (bytes[0] > keyfrom)
-                        keyfrom = bytes[0];
-                    if (bytes[1] < keyto)
-                        keyto = bytes[1];
-                }
-                if (presetzone.contains(SF2Region.GENERATOR_VELRANGE)) {
-                    byte[] bytes = presetzone.getBytes(
-                            SF2Region.GENERATOR_VELRANGE);
-                    if (bytes[0] > velfrom)
-                        velfrom = bytes[0];
-                    if (bytes[1] < velto)
-                        velto = bytes[1];
-                }
-                performer.setKeyFrom(keyfrom);
-                performer.setKeyTo(keyto);
-                performer.setVelFrom(velfrom);
-                performer.setVelTo(velto);
-
-                int startAddrsOffset = layerzone.getShort(
-                        SF2Region.GENERATOR_STARTADDRSOFFSET);
-                int endAddrsOffset = layerzone.getShort(
-                        SF2Region.GENERATOR_ENDADDRSOFFSET);
-                int startloopAddrsOffset = layerzone.getShort(
-                        SF2Region.GENERATOR_STARTLOOPADDRSOFFSET);
-                int endloopAddrsOffset = layerzone.getShort(
-                        SF2Region.GENERATOR_ENDLOOPADDRSOFFSET);
-
-                startAddrsOffset += layerzone.getShort(
-                        SF2Region.GENERATOR_STARTADDRSCOARSEOFFSET) * 32768;
-                endAddrsOffset += layerzone.getShort(
-                        SF2Region.GENERATOR_ENDADDRSCOARSEOFFSET) * 32768;
-                startloopAddrsOffset += layerzone.getShort(
-                        SF2Region.GENERATOR_STARTLOOPADDRSCOARSEOFFSET) * 32768;
-                endloopAddrsOffset += layerzone.getShort(
-                        SF2Region.GENERATOR_ENDLOOPADDRSCOARSEOFFSET) * 32768;
-                startloopAddrsOffset -= startAddrsOffset;
-                endloopAddrsOffset -= startAddrsOffset;
-
-                SF2Sample sample = layerzone.getSample();
-                int rootkey = sample.originalPitch;
-                if (layerzone.getShort(SF2Region.GENERATOR_OVERRIDINGROOTKEY) != -1) {
-                    rootkey = layerzone.getShort(
-                            SF2Region.GENERATOR_OVERRIDINGROOTKEY);
-                }
-                float pitchcorrection = (-rootkey * 100) + sample.pitchCorrection;
-                ModelByteBuffer buff = sample.getDataBuffer();
-                ModelByteBuffer buff24 = sample.getData24Buffer();
-
-                if (startAddrsOffset != 0 || endAddrsOffset != 0) {
-                    buff = buff.subbuffer(startAddrsOffset * 2,
-                            buff.capacity() + endAddrsOffset * 2);
-                    if (buff24 != null) {
-                        buff24 = buff24.subbuffer(startAddrsOffset,
-                                buff24.capacity() + endAddrsOffset);
-                    }
-
-                    /*
-                    if (startAddrsOffset < 0)
-                        startAddrsOffset = 0;
-                    if (endAddrsOffset > (buff.capacity()/2-startAddrsOffset))
-                        startAddrsOffset = (int)buff.capacity()/2-startAddrsOffset;
-                    byte[] data = buff.array();
-                    int off = (int)buff.arrayOffset() + startAddrsOffset*2;
-                    int len = (int)buff.capacity() + endAddrsOffset*2;
-                    if (off+len > data.length)
-                        len = data.length - off;
-                    buff = new ModelByteBuffer(data, off, len);
-                    if(buff24 != null) {
-                        data = buff.array();
-                        off = (int)buff.arrayOffset() + startAddrsOffset;
-                        len = (int)buff.capacity() + endAddrsOffset;
-                        buff24 = new ModelByteBuffer(data, off, len);
-                    }
-                    */
-                }
-
-                ModelByteBufferWavetable osc = new ModelByteBufferWavetable(
-                        buff, sample.getFormat(), pitchcorrection);
-                if (buff24 != null)
-                    osc.set8BitExtensionBuffer(buff24);
-
-                Map<Integer, Short> generators = new HashMap<Integer, Short>();
-                if (layerglobal != null)
-                    generators.putAll(layerglobal.getGenerators());
-                generators.putAll(layerzone.getGenerators());
-                for (Map.Entry<Integer, Short> gen : pgenerators.entrySet()) {
-                    short val;
-                    if (!generators.containsKey(gen.getKey()))
-                        val = layerzone.getShort(gen.getKey());
-                    else
-                        val = generators.get(gen.getKey());
-                    val += gen.getValue();
-                    generators.put(gen.getKey(), val);
-                }
-
-                // SampleMode:
-                // 0 indicates a sound reproduced with no loop
-                // 1 indicates a sound which loops continuously
-                // 2 is unused but should be interpreted as indicating no loop
-                // 3 indicates a sound which loops for the duration of key
-                //   depression then proceeds to play the remainder of the sample.
-                int sampleMode = getGeneratorValue(generators,
-                        SF2Region.GENERATOR_SAMPLEMODES);
-                if ((sampleMode == 1) || (sampleMode == 3)) {
-                    if (sample.startLoop >= 0 && sample.endLoop > 0) {
-                        osc.setLoopStart((int)(sample.startLoop
-                                + startloopAddrsOffset));
-                        osc.setLoopLength((int)(sample.endLoop - sample.startLoop
-                                + endloopAddrsOffset - startloopAddrsOffset));
-                        if (sampleMode == 1)
-                            osc.setLoopType(ModelWavetable.LOOP_TYPE_FORWARD);
-                        if (sampleMode == 3)
-                            osc.setLoopType(ModelWavetable.LOOP_TYPE_RELEASE);
-                    }
-                }
-                performer.getOscillators().add(osc);
-
-
-                short volDelay = getGeneratorValue(generators,
-                        SF2Region.GENERATOR_DELAYVOLENV);
-                short volAttack = getGeneratorValue(generators,
-                        SF2Region.GENERATOR_ATTACKVOLENV);
-                short volHold = getGeneratorValue(generators,
-                        SF2Region.GENERATOR_HOLDVOLENV);
-                short volDecay = getGeneratorValue(generators,
-                        SF2Region.GENERATOR_DECAYVOLENV);
-                short volSustain = getGeneratorValue(generators,
-                        SF2Region.GENERATOR_SUSTAINVOLENV);
-                short volRelease = getGeneratorValue(generators,
-                        SF2Region.GENERATOR_RELEASEVOLENV);
-
-                if (volHold != -12000) {
-                    short volKeyNumToHold = getGeneratorValue(generators,
-                            SF2Region.GENERATOR_KEYNUMTOVOLENVHOLD);
-                    volHold += 60 * volKeyNumToHold;
-                    float fvalue = -volKeyNumToHold * 128;
-                    ModelIdentifier src = ModelSource.SOURCE_NOTEON_KEYNUMBER;
-                    ModelIdentifier dest = ModelDestination.DESTINATION_EG1_HOLD;
-                    performer.getConnectionBlocks().add(
-                        new ModelConnectionBlock(new ModelSource(src), fvalue,
-                            new ModelDestination(dest)));
-                }
-                if (volDecay != -12000) {
-                    short volKeyNumToDecay = getGeneratorValue(generators,
-                            SF2Region.GENERATOR_KEYNUMTOVOLENVDECAY);
-                    volDecay += 60 * volKeyNumToDecay;
-                    float fvalue = -volKeyNumToDecay * 128;
-                    ModelIdentifier src = ModelSource.SOURCE_NOTEON_KEYNUMBER;
-                    ModelIdentifier dest = ModelDestination.DESTINATION_EG1_DECAY;
-                    performer.getConnectionBlocks().add(
-                        new ModelConnectionBlock(new ModelSource(src), fvalue,
-                            new ModelDestination(dest)));
-                }
-
-                addTimecentValue(performer,
-                        ModelDestination.DESTINATION_EG1_DELAY, volDelay);
-                addTimecentValue(performer,
-                        ModelDestination.DESTINATION_EG1_ATTACK, volAttack);
-                addTimecentValue(performer,
-                        ModelDestination.DESTINATION_EG1_HOLD, volHold);
-                addTimecentValue(performer,
-                        ModelDestination.DESTINATION_EG1_DECAY, volDecay);
-                //float fvolsustain = (960-volSustain)*(1000.0f/960.0f);
-
-                volSustain = (short)(1000 - volSustain);
-                if (volSustain < 0)
-                    volSustain = 0;
-                if (volSustain > 1000)
-                    volSustain = 1000;
-
-                addValue(performer,
-                        ModelDestination.DESTINATION_EG1_SUSTAIN, volSustain);
-                addTimecentValue(performer,
-                        ModelDestination.DESTINATION_EG1_RELEASE, volRelease);
-
-                if (getGeneratorValue(generators,
-                            SF2Region.GENERATOR_MODENVTOFILTERFC) != 0
-                        || getGeneratorValue(generators,
-                            SF2Region.GENERATOR_MODENVTOPITCH) != 0) {
-                    short modDelay = getGeneratorValue(generators,
-                            SF2Region.GENERATOR_DELAYMODENV);
-                    short modAttack = getGeneratorValue(generators,
-                            SF2Region.GENERATOR_ATTACKMODENV);
-                    short modHold = getGeneratorValue(generators,
-                            SF2Region.GENERATOR_HOLDMODENV);
-                    short modDecay = getGeneratorValue(generators,
-                            SF2Region.GENERATOR_DECAYMODENV);
-                    short modSustain = getGeneratorValue(generators,
-                            SF2Region.GENERATOR_SUSTAINMODENV);
-                    short modRelease = getGeneratorValue(generators,
-                            SF2Region.GENERATOR_RELEASEMODENV);
-
-
-                    if (modHold != -12000) {
-                        short modKeyNumToHold = getGeneratorValue(generators,
-                                SF2Region.GENERATOR_KEYNUMTOMODENVHOLD);
-                        modHold += 60 * modKeyNumToHold;
-                        float fvalue = -modKeyNumToHold * 128;
-                        ModelIdentifier src = ModelSource.SOURCE_NOTEON_KEYNUMBER;
-                        ModelIdentifier dest = ModelDestination.DESTINATION_EG2_HOLD;
-                        performer.getConnectionBlocks().add(
-                            new ModelConnectionBlock(new ModelSource(src),
-                                fvalue, new ModelDestination(dest)));
-                    }
-                    if (modDecay != -12000) {
-                        short modKeyNumToDecay = getGeneratorValue(generators,
-                                SF2Region.GENERATOR_KEYNUMTOMODENVDECAY);
-                        modDecay += 60 * modKeyNumToDecay;
-                        float fvalue = -modKeyNumToDecay * 128;
-                        ModelIdentifier src = ModelSource.SOURCE_NOTEON_KEYNUMBER;
-                        ModelIdentifier dest = ModelDestination.DESTINATION_EG2_DECAY;
-                        performer.getConnectionBlocks().add(
-                            new ModelConnectionBlock(new ModelSource(src),
-                                fvalue, new ModelDestination(dest)));
-                    }
-
-                    addTimecentValue(performer,
-                            ModelDestination.DESTINATION_EG2_DELAY, modDelay);
-                    addTimecentValue(performer,
-                            ModelDestination.DESTINATION_EG2_ATTACK, modAttack);
-                    addTimecentValue(performer,
-                            ModelDestination.DESTINATION_EG2_HOLD, modHold);
-                    addTimecentValue(performer,
-                            ModelDestination.DESTINATION_EG2_DECAY, modDecay);
-                    if (modSustain < 0)
-                        modSustain = 0;
-                    if (modSustain > 1000)
-                        modSustain = 1000;
-                    addValue(performer, ModelDestination.DESTINATION_EG2_SUSTAIN,
-                            1000 - modSustain);
-                    addTimecentValue(performer,
-                            ModelDestination.DESTINATION_EG2_RELEASE, modRelease);
-
-                    if (getGeneratorValue(generators,
-                            SF2Region.GENERATOR_MODENVTOFILTERFC) != 0) {
-                        double fvalue = getGeneratorValue(generators,
-                                SF2Region.GENERATOR_MODENVTOFILTERFC);
-                        ModelIdentifier src = ModelSource.SOURCE_EG2;
-                        ModelIdentifier dest
-                                = ModelDestination.DESTINATION_FILTER_FREQ;
-                        performer.getConnectionBlocks().add(
-                            new ModelConnectionBlock(new ModelSource(src),
-                                fvalue, new ModelDestination(dest)));
-                    }
-
-                    if (getGeneratorValue(generators,
-                            SF2Region.GENERATOR_MODENVTOPITCH) != 0) {
-                        double fvalue = getGeneratorValue(generators,
-                                SF2Region.GENERATOR_MODENVTOPITCH);
-                        ModelIdentifier src = ModelSource.SOURCE_EG2;
-                        ModelIdentifier dest = ModelDestination.DESTINATION_PITCH;
-                        performer.getConnectionBlocks().add(
-                            new ModelConnectionBlock(new ModelSource(src),
-                                fvalue, new ModelDestination(dest)));
-                    }
-
-                }
-
-                if (getGeneratorValue(generators,
-                            SF2Region.GENERATOR_MODLFOTOFILTERFC) != 0
-                        || getGeneratorValue(generators,
-                            SF2Region.GENERATOR_MODLFOTOPITCH) != 0
-                        || getGeneratorValue(generators,
-                            SF2Region.GENERATOR_MODLFOTOVOLUME) != 0) {
-                    short lfo_freq = getGeneratorValue(generators,
-                            SF2Region.GENERATOR_FREQMODLFO);
-                    short lfo_delay = getGeneratorValue(generators,
-                            SF2Region.GENERATOR_DELAYMODLFO);
-                    addTimecentValue(performer,
-                            ModelDestination.DESTINATION_LFO1_DELAY, lfo_delay);
-                    addValue(performer,
-                            ModelDestination.DESTINATION_LFO1_FREQ, lfo_freq);
-                }
-
-                short vib_freq = getGeneratorValue(generators,
-                        SF2Region.GENERATOR_FREQVIBLFO);
-                short vib_delay = getGeneratorValue(generators,
-                        SF2Region.GENERATOR_DELAYVIBLFO);
-                addTimecentValue(performer,
-                        ModelDestination.DESTINATION_LFO2_DELAY, vib_delay);
-                addValue(performer,
-                        ModelDestination.DESTINATION_LFO2_FREQ, vib_freq);
-
-
-                if (getGeneratorValue(generators,
-                        SF2Region.GENERATOR_VIBLFOTOPITCH) != 0) {
-                    double fvalue = getGeneratorValue(generators,
-                            SF2Region.GENERATOR_VIBLFOTOPITCH);
-                    ModelIdentifier src = ModelSource.SOURCE_LFO2;
-                    ModelIdentifier dest = ModelDestination.DESTINATION_PITCH;
-                    performer.getConnectionBlocks().add(
-                        new ModelConnectionBlock(
-                            new ModelSource(src,
-                                ModelStandardTransform.DIRECTION_MIN2MAX,
-                                ModelStandardTransform.POLARITY_BIPOLAR),
-                            fvalue, new ModelDestination(dest)));
-                }
-
-                if (getGeneratorValue(generators,
-                        SF2Region.GENERATOR_MODLFOTOFILTERFC) != 0) {
-                    double fvalue = getGeneratorValue(generators,
-                            SF2Region.GENERATOR_MODLFOTOFILTERFC);
-                    ModelIdentifier src = ModelSource.SOURCE_LFO1;
-                    ModelIdentifier dest = ModelDestination.DESTINATION_FILTER_FREQ;
-                    performer.getConnectionBlocks().add(
-                        new ModelConnectionBlock(
-                            new ModelSource(src,
-                                ModelStandardTransform.DIRECTION_MIN2MAX,
-                                ModelStandardTransform.POLARITY_BIPOLAR),
-                            fvalue, new ModelDestination(dest)));
-                }
-
-                if (getGeneratorValue(generators,
-                        SF2Region.GENERATOR_MODLFOTOPITCH) != 0) {
-                    double fvalue = getGeneratorValue(generators,
-                            SF2Region.GENERATOR_MODLFOTOPITCH);
-                    ModelIdentifier src = ModelSource.SOURCE_LFO1;
-                    ModelIdentifier dest = ModelDestination.DESTINATION_PITCH;
-                    performer.getConnectionBlocks().add(
-                        new ModelConnectionBlock(
-                            new ModelSource(src,
-                                ModelStandardTransform.DIRECTION_MIN2MAX,
-                                ModelStandardTransform.POLARITY_BIPOLAR),
-                            fvalue, new ModelDestination(dest)));
-                }
-
-                if (getGeneratorValue(generators,
-                        SF2Region.GENERATOR_MODLFOTOVOLUME) != 0) {
-                    double fvalue = getGeneratorValue(generators,
-                            SF2Region.GENERATOR_MODLFOTOVOLUME);
-                    ModelIdentifier src = ModelSource.SOURCE_LFO1;
-                    ModelIdentifier dest = ModelDestination.DESTINATION_GAIN;
-                    performer.getConnectionBlocks().add(
-                        new ModelConnectionBlock(
-                            new ModelSource(src,
-                                ModelStandardTransform.DIRECTION_MIN2MAX,
-                                ModelStandardTransform.POLARITY_BIPOLAR),
-                            fvalue, new ModelDestination(dest)));
-                }
-
-                if (layerzone.getShort(SF2Region.GENERATOR_KEYNUM) != -1) {
-                    double val = layerzone.getShort(SF2Region.GENERATOR_KEYNUM)/128.0;
-                    addValue(performer, ModelDestination.DESTINATION_KEYNUMBER, val);
-                }
-
-                if (layerzone.getShort(SF2Region.GENERATOR_VELOCITY) != -1) {
-                    double val = layerzone.getShort(SF2Region.GENERATOR_VELOCITY)
-                                 / 128.0;
-                    addValue(performer, ModelDestination.DESTINATION_VELOCITY, val);
-                }
-
-                if (getGeneratorValue(generators,
-                        SF2Region.GENERATOR_INITIALFILTERFC) < 13500) {
-                    short filter_freq = getGeneratorValue(generators,
-                            SF2Region.GENERATOR_INITIALFILTERFC);
-                    short filter_q = getGeneratorValue(generators,
-                            SF2Region.GENERATOR_INITIALFILTERQ);
-                    addValue(performer,
-                            ModelDestination.DESTINATION_FILTER_FREQ, filter_freq);
-                    addValue(performer,
-                            ModelDestination.DESTINATION_FILTER_Q, filter_q);
-                }
-
-                int tune = 100 * getGeneratorValue(generators,
-                        SF2Region.GENERATOR_COARSETUNE);
-                tune += getGeneratorValue(generators,
-                        SF2Region.GENERATOR_FINETUNE);
-                if (tune != 0) {
-                    addValue(performer,
-                            ModelDestination.DESTINATION_PITCH, (short) tune);
-                }
-                if (getGeneratorValue(generators, SF2Region.GENERATOR_PAN) != 0) {
-                    short val = getGeneratorValue(generators,
-                            SF2Region.GENERATOR_PAN);
-                    addValue(performer, ModelDestination.DESTINATION_PAN, val);
-                }
-                if (getGeneratorValue(generators, SF2Region.GENERATOR_INITIALATTENUATION) != 0) {
-                    short val = getGeneratorValue(generators,
-                            SF2Region.GENERATOR_INITIALATTENUATION);
-                    addValue(performer,
-                            ModelDestination.DESTINATION_GAIN, -0.376287f * val);
-                }
-                if (getGeneratorValue(generators,
-                        SF2Region.GENERATOR_CHORUSEFFECTSSEND) != 0) {
-                    short val = getGeneratorValue(generators,
-                            SF2Region.GENERATOR_CHORUSEFFECTSSEND);
-                    addValue(performer, ModelDestination.DESTINATION_CHORUS, val);
-                }
-                if (getGeneratorValue(generators,
-                        SF2Region.GENERATOR_REVERBEFFECTSSEND) != 0) {
-                    short val = getGeneratorValue(generators,
-                            SF2Region.GENERATOR_REVERBEFFECTSSEND);
-                    addValue(performer, ModelDestination.DESTINATION_REVERB, val);
-                }
-                if (getGeneratorValue(generators,
-                        SF2Region.GENERATOR_SCALETUNING) != 100) {
-                    short fvalue = getGeneratorValue(generators,
-                            SF2Region.GENERATOR_SCALETUNING);
-                    if (fvalue == 0) {
-                        ModelIdentifier dest = ModelDestination.DESTINATION_PITCH;
-                        performer.getConnectionBlocks().add(
-                            new ModelConnectionBlock(null, rootkey * 100,
-                                new ModelDestination(dest)));
-                    } else {
-                        ModelIdentifier dest = ModelDestination.DESTINATION_PITCH;
-                        performer.getConnectionBlocks().add(
-                            new ModelConnectionBlock(null, rootkey * (100 - fvalue),
-                                new ModelDestination(dest)));
-                    }
-
-                    ModelIdentifier src = ModelSource.SOURCE_NOTEON_KEYNUMBER;
-                    ModelIdentifier dest = ModelDestination.DESTINATION_PITCH;
-                    performer.getConnectionBlocks().add(
-                        new ModelConnectionBlock(new ModelSource(src),
-                            128 * fvalue, new ModelDestination(dest)));
-
-                }
-
-                performer.getConnectionBlocks().add(
-                    new ModelConnectionBlock(
-                        new ModelSource(ModelSource.SOURCE_NOTEON_VELOCITY,
-                            new ModelTransform() {
-                                public double transform(double value) {
-                                    if (value < 0.5)
-                                        return 1 - value * 2;
-                                    else
-                                        return 0;
-                                }
-                            }),
-                        -2400,
-                        new ModelDestination(
-                            ModelDestination.DESTINATION_FILTER_FREQ)));
-
-
-                performer.getConnectionBlocks().add(
-                    new ModelConnectionBlock(
-                        new ModelSource(ModelSource.SOURCE_LFO2,
-                            ModelStandardTransform.DIRECTION_MIN2MAX,
-                            ModelStandardTransform.POLARITY_BIPOLAR,
-                            ModelStandardTransform.TRANSFORM_LINEAR),
-                        new ModelSource(new ModelIdentifier("midi_cc", "1", 0),
-                            ModelStandardTransform.DIRECTION_MIN2MAX,
-                            ModelStandardTransform.POLARITY_UNIPOLAR,
-                            ModelStandardTransform.TRANSFORM_LINEAR),
-                        50, new ModelDestination(
-                            ModelDestination.DESTINATION_PITCH)));
-
-                if (layer.getGlobalRegion() != null) {
-                    for (SF2Modulator modulator
-                            : layer.getGlobalRegion().getModulators()) {
-                        convertModulator(performer, modulator);
-                    }
-                }
-                for (SF2Modulator modulator : layerzone.getModulators())
-                    convertModulator(performer, modulator);
-
-                if (presetglobal != null) {
-                    for (SF2Modulator modulator : presetglobal.getModulators())
-                        convertModulator(performer, modulator);
-                }
-                for (SF2Modulator modulator : presetzone.getModulators())
-                    convertModulator(performer, modulator);
-
-            }
-        }
-        return performers;
-    }
-
-    private void convertModulator(ModelPerformer performer,
-            SF2Modulator modulator) {
-        ModelSource src1 = convertSource(modulator.getSourceOperator());
-        ModelSource src2 = convertSource(modulator.getAmountSourceOperator());
-        if (src1 == null && modulator.getSourceOperator() != 0)
-            return;
-        if (src2 == null && modulator.getAmountSourceOperator() != 0)
-            return;
-        double amount = modulator.getAmount();
-        double[] amountcorrection = new double[1];
-        ModelSource[] extrasrc = new ModelSource[1];
-        amountcorrection[0] = 1;
-        ModelDestination dst = convertDestination(
-                modulator.getDestinationOperator(), amountcorrection, extrasrc);
-        amount *= amountcorrection[0];
-        if (dst == null)
-            return;
-        if (modulator.getTransportOperator() == SF2Modulator.TRANSFORM_ABSOLUTE) {
-            ((ModelStandardTransform)dst.getTransform()).setTransform(
-                    ModelStandardTransform.TRANSFORM_ABSOLUTE);
-        }
-        ModelConnectionBlock conn = new ModelConnectionBlock(src1, src2, amount, dst);
-        if (extrasrc[0] != null)
-            conn.addSource(extrasrc[0]);
-        performer.getConnectionBlocks().add(conn);
-
-    }
-
-    private static ModelSource convertSource(int src) {
-        if (src == 0)
-            return null;
-        ModelIdentifier id = null;
-        int idsrc = src & 0x7F;
-        if ((src & SF2Modulator.SOURCE_MIDI_CONTROL) != 0) {
-            id = new ModelIdentifier("midi_cc", Integer.toString(idsrc));
-        } else {
-            if (idsrc == SF2Modulator.SOURCE_NOTE_ON_VELOCITY)
-                id = ModelSource.SOURCE_NOTEON_VELOCITY;
-            if (idsrc == SF2Modulator.SOURCE_NOTE_ON_KEYNUMBER)
-                id = ModelSource.SOURCE_NOTEON_KEYNUMBER;
-            if (idsrc == SF2Modulator.SOURCE_POLY_PRESSURE)
-                id = ModelSource.SOURCE_MIDI_POLY_PRESSURE;
-            if (idsrc == SF2Modulator.SOURCE_CHANNEL_PRESSURE)
-                id = ModelSource.SOURCE_MIDI_CHANNEL_PRESSURE;
-            if (idsrc == SF2Modulator.SOURCE_PITCH_WHEEL)
-                id = ModelSource.SOURCE_MIDI_PITCH;
-            if (idsrc == SF2Modulator.SOURCE_PITCH_SENSITIVITY)
-                id = new ModelIdentifier("midi_rpn", "0");
-        }
-        if (id == null)
-            return null;
-
-        ModelSource msrc = new ModelSource(id);
-        ModelStandardTransform transform
-                = (ModelStandardTransform) msrc.getTransform();
-
-        if ((SF2Modulator.SOURCE_DIRECTION_MAX_MIN & src) != 0)
-            transform.setDirection(ModelStandardTransform.DIRECTION_MAX2MIN);
-        else
-            transform.setDirection(ModelStandardTransform.DIRECTION_MIN2MAX);
-
-        if ((SF2Modulator.SOURCE_POLARITY_BIPOLAR & src) != 0)
-            transform.setPolarity(ModelStandardTransform.POLARITY_BIPOLAR);
-        else
-            transform.setPolarity(ModelStandardTransform.POLARITY_UNIPOLAR);
-
-        if ((SF2Modulator.SOURCE_TYPE_CONCAVE & src) != 0)
-            transform.setTransform(ModelStandardTransform.TRANSFORM_CONCAVE);
-        if ((SF2Modulator.SOURCE_TYPE_CONVEX & src) != 0)
-            transform.setTransform(ModelStandardTransform.TRANSFORM_CONVEX);
-        if ((SF2Modulator.SOURCE_TYPE_SWITCH & src) != 0)
-            transform.setTransform(ModelStandardTransform.TRANSFORM_SWITCH);
-
-        return msrc;
-    }
-
-    static ModelDestination convertDestination(int dst,
-            double[] amountcorrection, ModelSource[] extrasrc) {
-        ModelIdentifier id = null;
-        switch (dst) {
-            case SF2Region.GENERATOR_INITIALFILTERFC:
-                id = ModelDestination.DESTINATION_FILTER_FREQ;
-                break;
-            case SF2Region.GENERATOR_INITIALFILTERQ:
-                id = ModelDestination.DESTINATION_FILTER_Q;
-                break;
-            case SF2Region.GENERATOR_CHORUSEFFECTSSEND:
-                id = ModelDestination.DESTINATION_CHORUS;
-                break;
-            case SF2Region.GENERATOR_REVERBEFFECTSSEND:
-                id = ModelDestination.DESTINATION_REVERB;
-                break;
-            case SF2Region.GENERATOR_PAN:
-                id = ModelDestination.DESTINATION_PAN;
-                break;
-            case SF2Region.GENERATOR_DELAYMODLFO:
-                id = ModelDestination.DESTINATION_LFO1_DELAY;
-                break;
-            case SF2Region.GENERATOR_FREQMODLFO:
-                id = ModelDestination.DESTINATION_LFO1_FREQ;
-                break;
-            case SF2Region.GENERATOR_DELAYVIBLFO:
-                id = ModelDestination.DESTINATION_LFO2_DELAY;
-                break;
-            case SF2Region.GENERATOR_FREQVIBLFO:
-                id = ModelDestination.DESTINATION_LFO2_FREQ;
-                break;
-
-            case SF2Region.GENERATOR_DELAYMODENV:
-                id = ModelDestination.DESTINATION_EG2_DELAY;
-                break;
-            case SF2Region.GENERATOR_ATTACKMODENV:
-                id = ModelDestination.DESTINATION_EG2_ATTACK;
-                break;
-            case SF2Region.GENERATOR_HOLDMODENV:
-                id = ModelDestination.DESTINATION_EG2_HOLD;
-                break;
-            case SF2Region.GENERATOR_DECAYMODENV:
-                id = ModelDestination.DESTINATION_EG2_DECAY;
-                break;
-            case SF2Region.GENERATOR_SUSTAINMODENV:
-                id = ModelDestination.DESTINATION_EG2_SUSTAIN;
-                amountcorrection[0] = -1;
-                break;
-            case SF2Region.GENERATOR_RELEASEMODENV:
-                id = ModelDestination.DESTINATION_EG2_RELEASE;
-                break;
-            case SF2Region.GENERATOR_DELAYVOLENV:
-                id = ModelDestination.DESTINATION_EG1_DELAY;
-                break;
-            case SF2Region.GENERATOR_ATTACKVOLENV:
-                id = ModelDestination.DESTINATION_EG1_ATTACK;
-                break;
-            case SF2Region.GENERATOR_HOLDVOLENV:
-                id = ModelDestination.DESTINATION_EG1_HOLD;
-                break;
-            case SF2Region.GENERATOR_DECAYVOLENV:
-                id = ModelDestination.DESTINATION_EG1_DECAY;
-                break;
-            case SF2Region.GENERATOR_SUSTAINVOLENV:
-                id = ModelDestination.DESTINATION_EG1_SUSTAIN;
-                amountcorrection[0] = -1;
-                break;
-            case SF2Region.GENERATOR_RELEASEVOLENV:
-                id = ModelDestination.DESTINATION_EG1_RELEASE;
-                break;
-            case SF2Region.GENERATOR_KEYNUM:
-                id = ModelDestination.DESTINATION_KEYNUMBER;
-                break;
-            case SF2Region.GENERATOR_VELOCITY:
-                id = ModelDestination.DESTINATION_VELOCITY;
-                break;
-
-            case SF2Region.GENERATOR_COARSETUNE:
-                amountcorrection[0] = 100;
-                id = ModelDestination.DESTINATION_PITCH;
-                break;
-
-            case SF2Region.GENERATOR_FINETUNE:
-                id = ModelDestination.DESTINATION_PITCH;
-                break;
-
-            case SF2Region.GENERATOR_INITIALATTENUATION:
-                id = ModelDestination.DESTINATION_GAIN;
-                amountcorrection[0] = -0.376287f;
-                break;
-
-            case SF2Region.GENERATOR_VIBLFOTOPITCH:
-                id = ModelDestination.DESTINATION_PITCH;
-                extrasrc[0] = new ModelSource(
-                        ModelSource.SOURCE_LFO2,
-                        ModelStandardTransform.DIRECTION_MIN2MAX,
-                        ModelStandardTransform.POLARITY_BIPOLAR);
-                break;
-
-            case SF2Region.GENERATOR_MODLFOTOPITCH:
-                id = ModelDestination.DESTINATION_PITCH;
-                extrasrc[0] = new ModelSource(
-                        ModelSource.SOURCE_LFO1,
-                        ModelStandardTransform.DIRECTION_MIN2MAX,
-                        ModelStandardTransform.POLARITY_BIPOLAR);
-                break;
-
-            case SF2Region.GENERATOR_MODLFOTOFILTERFC:
-                id = ModelDestination.DESTINATION_FILTER_FREQ;
-                extrasrc[0] = new ModelSource(
-                        ModelSource.SOURCE_LFO1,
-                        ModelStandardTransform.DIRECTION_MIN2MAX,
-                        ModelStandardTransform.POLARITY_BIPOLAR);
-                break;
-
-            case SF2Region.GENERATOR_MODLFOTOVOLUME:
-                id = ModelDestination.DESTINATION_GAIN;
-                amountcorrection[0] = -0.376287f;
-                extrasrc[0] = new ModelSource(
-                        ModelSource.SOURCE_LFO1,
-                        ModelStandardTransform.DIRECTION_MIN2MAX,
-                        ModelStandardTransform.POLARITY_BIPOLAR);
-                break;
-
-            case SF2Region.GENERATOR_MODENVTOPITCH:
-                id = ModelDestination.DESTINATION_PITCH;
-                extrasrc[0] = new ModelSource(
-                        ModelSource.SOURCE_EG2,
-                        ModelStandardTransform.DIRECTION_MIN2MAX,
-                        ModelStandardTransform.POLARITY_BIPOLAR);
-                break;
-
-            case SF2Region.GENERATOR_MODENVTOFILTERFC:
-                id = ModelDestination.DESTINATION_FILTER_FREQ;
-                extrasrc[0] = new ModelSource(
-                        ModelSource.SOURCE_EG2,
-                        ModelStandardTransform.DIRECTION_MIN2MAX,
-                        ModelStandardTransform.POLARITY_BIPOLAR);
-                break;
-
-            default:
-                break;
-        }
-        if (id != null)
-            return new ModelDestination(id);
-        return null;
-    }
-
-    private void addTimecentValue(ModelPerformer performer,
-            ModelIdentifier dest, short value) {
-        double fvalue;
-        if (value == -12000)
-            fvalue = Double.NEGATIVE_INFINITY;
-        else
-            fvalue = value;
-        performer.getConnectionBlocks().add(
-                new ModelConnectionBlock(fvalue, new ModelDestination(dest)));
-    }
-
-    private void addValue(ModelPerformer performer,
-            ModelIdentifier dest, short value) {
-        double fvalue = value;
-        performer.getConnectionBlocks().add(
-                new ModelConnectionBlock(fvalue, new ModelDestination(dest)));
-    }
-
-    private void addValue(ModelPerformer performer,
-            ModelIdentifier dest, double value) {
-        double fvalue = value;
-        performer.getConnectionBlocks().add(
-                new ModelConnectionBlock(fvalue, new ModelDestination(dest)));
-    }
-
-    private short getGeneratorValue(Map<Integer, Short> generators, int gen) {
-        if (generators.containsKey(gen))
-            return generators.get(gen);
-        return SF2Region.getDefaultValue(gen);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/SF2InstrumentRegion.java b/ojluni/src/main/java/com/sun/media/sound/SF2InstrumentRegion.java
deleted file mode 100755
index 87a62c4..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/SF2InstrumentRegion.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, 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.media.sound;
-
-/**
- * Soundfont instrument region.
- *
- * @author Karl Helgason
- */
-public final class SF2InstrumentRegion extends SF2Region {
-
-    SF2Layer layer;
-
-    public SF2Layer getLayer() {
-        return layer;
-    }
-
-    public void setLayer(SF2Layer layer) {
-        this.layer = layer;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/SF2Layer.java b/ojluni/src/main/java/com/sun/media/sound/SF2Layer.java
deleted file mode 100755
index e0bc76a..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/SF2Layer.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, 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.media.sound;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.sound.midi.SoundbankResource;
-
-/**
- * Soundfont layer.
- *
- * @author Karl Helgason
- */
-public final class SF2Layer extends SoundbankResource {
-
-    String name = "";
-    SF2GlobalRegion globalregion = null;
-    List<SF2LayerRegion> regions = new ArrayList<SF2LayerRegion>();
-
-    public SF2Layer(SF2Soundbank soundBank) {
-        super(soundBank, null, null);
-    }
-
-    public SF2Layer() {
-        super(null, null, null);
-    }
-
-    public Object getData() {
-        return null;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public List<SF2LayerRegion> getRegions() {
-        return regions;
-    }
-
-    public SF2GlobalRegion getGlobalRegion() {
-        return globalregion;
-    }
-
-    public void setGlobalZone(SF2GlobalRegion zone) {
-        globalregion = zone;
-    }
-
-    public String toString() {
-        return "Layer: " + name;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/SF2LayerRegion.java b/ojluni/src/main/java/com/sun/media/sound/SF2LayerRegion.java
deleted file mode 100755
index 8833e38..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/SF2LayerRegion.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, 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.media.sound;
-
-/**
- * Soundfont layer region.
- *
- * @author Karl Helgason
- */
-public final class SF2LayerRegion extends SF2Region {
-
-    SF2Sample sample;
-
-    public SF2Sample getSample() {
-        return sample;
-    }
-
-    public void setSample(SF2Sample sample) {
-        this.sample = sample;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/SF2Modulator.java b/ojluni/src/main/java/com/sun/media/sound/SF2Modulator.java
deleted file mode 100755
index 2d85032..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/SF2Modulator.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, 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.media.sound;
-
-/**
- * Soundfont modulator container.
- *
- * @author Karl Helgason
- */
-public final class SF2Modulator {
-
-    public final static int SOURCE_NONE = 0;
-    public final static int SOURCE_NOTE_ON_VELOCITY = 2;
-    public final static int SOURCE_NOTE_ON_KEYNUMBER = 3;
-    public final static int SOURCE_POLY_PRESSURE = 10;
-    public final static int SOURCE_CHANNEL_PRESSURE = 13;
-    public final static int SOURCE_PITCH_WHEEL = 14;
-    public final static int SOURCE_PITCH_SENSITIVITY = 16;
-    public final static int SOURCE_MIDI_CONTROL = 128 * 1;
-    public final static int SOURCE_DIRECTION_MIN_MAX = 256 * 0;
-    public final static int SOURCE_DIRECTION_MAX_MIN = 256 * 1;
-    public final static int SOURCE_POLARITY_UNIPOLAR = 512 * 0;
-    public final static int SOURCE_POLARITY_BIPOLAR = 512 * 1;
-    public final static int SOURCE_TYPE_LINEAR = 1024 * 0;
-    public final static int SOURCE_TYPE_CONCAVE = 1024 * 1;
-    public final static int SOURCE_TYPE_CONVEX = 1024 * 2;
-    public final static int SOURCE_TYPE_SWITCH = 1024 * 3;
-    public final static int TRANSFORM_LINEAR = 0;
-    public final static int TRANSFORM_ABSOLUTE = 2;
-    int sourceOperator;
-    int destinationOperator;
-    short amount;
-    int amountSourceOperator;
-    int transportOperator;
-
-    public short getAmount() {
-        return amount;
-    }
-
-    public void setAmount(short amount) {
-        this.amount = amount;
-    }
-
-    public int getAmountSourceOperator() {
-        return amountSourceOperator;
-    }
-
-    public void setAmountSourceOperator(int amountSourceOperator) {
-        this.amountSourceOperator = amountSourceOperator;
-    }
-
-    public int getTransportOperator() {
-        return transportOperator;
-    }
-
-    public void setTransportOperator(int transportOperator) {
-        this.transportOperator = transportOperator;
-    }
-
-    public int getDestinationOperator() {
-        return destinationOperator;
-    }
-
-    public void setDestinationOperator(int destinationOperator) {
-        this.destinationOperator = destinationOperator;
-    }
-
-    public int getSourceOperator() {
-        return sourceOperator;
-    }
-
-    public void setSourceOperator(int sourceOperator) {
-        this.sourceOperator = sourceOperator;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/SF2Region.java b/ojluni/src/main/java/com/sun/media/sound/SF2Region.java
deleted file mode 100755
index 02dd53e..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/SF2Region.java
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- * Copyright (c) 2007, 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.media.sound;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * Soundfont general region.
- *
- * @author Karl Helgason
- */
-public class SF2Region {
-
-    public final static int GENERATOR_STARTADDRSOFFSET = 0;
-    public final static int GENERATOR_ENDADDRSOFFSET = 1;
-    public final static int GENERATOR_STARTLOOPADDRSOFFSET = 2;
-    public final static int GENERATOR_ENDLOOPADDRSOFFSET = 3;
-    public final static int GENERATOR_STARTADDRSCOARSEOFFSET = 4;
-    public final static int GENERATOR_MODLFOTOPITCH = 5;
-    public final static int GENERATOR_VIBLFOTOPITCH = 6;
-    public final static int GENERATOR_MODENVTOPITCH = 7;
-    public final static int GENERATOR_INITIALFILTERFC = 8;
-    public final static int GENERATOR_INITIALFILTERQ = 9;
-    public final static int GENERATOR_MODLFOTOFILTERFC = 10;
-    public final static int GENERATOR_MODENVTOFILTERFC = 11;
-    public final static int GENERATOR_ENDADDRSCOARSEOFFSET = 12;
-    public final static int GENERATOR_MODLFOTOVOLUME = 13;
-    public final static int GENERATOR_UNUSED1 = 14;
-    public final static int GENERATOR_CHORUSEFFECTSSEND = 15;
-    public final static int GENERATOR_REVERBEFFECTSSEND = 16;
-    public final static int GENERATOR_PAN = 17;
-    public final static int GENERATOR_UNUSED2 = 18;
-    public final static int GENERATOR_UNUSED3 = 19;
-    public final static int GENERATOR_UNUSED4 = 20;
-    public final static int GENERATOR_DELAYMODLFO = 21;
-    public final static int GENERATOR_FREQMODLFO = 22;
-    public final static int GENERATOR_DELAYVIBLFO = 23;
-    public final static int GENERATOR_FREQVIBLFO = 24;
-    public final static int GENERATOR_DELAYMODENV = 25;
-    public final static int GENERATOR_ATTACKMODENV = 26;
-    public final static int GENERATOR_HOLDMODENV = 27;
-    public final static int GENERATOR_DECAYMODENV = 28;
-    public final static int GENERATOR_SUSTAINMODENV = 29;
-    public final static int GENERATOR_RELEASEMODENV = 30;
-    public final static int GENERATOR_KEYNUMTOMODENVHOLD = 31;
-    public final static int GENERATOR_KEYNUMTOMODENVDECAY = 32;
-    public final static int GENERATOR_DELAYVOLENV = 33;
-    public final static int GENERATOR_ATTACKVOLENV = 34;
-    public final static int GENERATOR_HOLDVOLENV = 35;
-    public final static int GENERATOR_DECAYVOLENV = 36;
-    public final static int GENERATOR_SUSTAINVOLENV = 37;
-    public final static int GENERATOR_RELEASEVOLENV = 38;
-    public final static int GENERATOR_KEYNUMTOVOLENVHOLD = 39;
-    public final static int GENERATOR_KEYNUMTOVOLENVDECAY = 40;
-    public final static int GENERATOR_INSTRUMENT = 41;
-    public final static int GENERATOR_RESERVED1 = 42;
-    public final static int GENERATOR_KEYRANGE = 43;
-    public final static int GENERATOR_VELRANGE = 44;
-    public final static int GENERATOR_STARTLOOPADDRSCOARSEOFFSET = 45;
-    public final static int GENERATOR_KEYNUM = 46;
-    public final static int GENERATOR_VELOCITY = 47;
-    public final static int GENERATOR_INITIALATTENUATION = 48;
-    public final static int GENERATOR_RESERVED2 = 49;
-    public final static int GENERATOR_ENDLOOPADDRSCOARSEOFFSET = 50;
-    public final static int GENERATOR_COARSETUNE = 51;
-    public final static int GENERATOR_FINETUNE = 52;
-    public final static int GENERATOR_SAMPLEID = 53;
-    public final static int GENERATOR_SAMPLEMODES = 54;
-    public final static int GENERATOR_RESERVED3 = 55;
-    public final static int GENERATOR_SCALETUNING = 56;
-    public final static int GENERATOR_EXCLUSIVECLASS = 57;
-    public final static int GENERATOR_OVERRIDINGROOTKEY = 58;
-    public final static int GENERATOR_UNUSED5 = 59;
-    public final static int GENERATOR_ENDOPR = 60;
-    protected Map<Integer, Short> generators = new HashMap<Integer, Short>();
-    protected List<SF2Modulator> modulators = new ArrayList<SF2Modulator>();
-
-    public Map<Integer, Short> getGenerators() {
-        return generators;
-    }
-
-    public boolean contains(int generator) {
-        return generators.containsKey(generator);
-    }
-
-    static public short getDefaultValue(int generator) {
-        if (generator == 8) return (short)13500;
-        if (generator == 21) return (short)-12000;
-        if (generator == 23) return (short)-12000;
-        if (generator == 25) return (short)-12000;
-        if (generator == 26) return (short)-12000;
-        if (generator == 27) return (short)-12000;
-        if (generator == 28) return (short)-12000;
-        if (generator == 30) return (short)-12000;
-        if (generator == 33) return (short)-12000;
-        if (generator == 34) return (short)-12000;
-        if (generator == 35) return (short)-12000;
-        if (generator == 36) return (short)-12000;
-        if (generator == 38) return (short)-12000;
-        if (generator == 43) return (short)0x7F00;
-        if (generator == 44) return (short)0x7F00;
-        if (generator == 46) return (short)-1;
-        if (generator == 47) return (short)-1;
-        if (generator == 56) return (short)100;
-        if (generator == 58) return (short)-1;
-        return 0;
-    }
-
-    public short getShort(int generator) {
-        if (!contains(generator))
-            return getDefaultValue(generator);
-        return generators.get(generator);
-    }
-
-    public void putShort(int generator, short value) {
-        generators.put(generator, value);
-    }
-
-    public byte[] getBytes(int generator) {
-        int val = getInteger(generator);
-        byte[] bytes = new byte[2];
-        bytes[0] = (byte) (0xFF & val);
-        bytes[1] = (byte) ((0xFF00 & val) >> 8);
-        return bytes;
-    }
-
-    public void putBytes(int generator, byte[] bytes) {
-        generators.put(generator, (short) (bytes[0] + (bytes[1] << 8)));
-    }
-
-    public int getInteger(int generator) {
-        return 0xFFFF & getShort(generator);
-    }
-
-    public void putInteger(int generator, int value) {
-        generators.put(generator, (short) value);
-    }
-
-    public List<SF2Modulator> getModulators() {
-        return modulators;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/SF2Sample.java b/ojluni/src/main/java/com/sun/media/sound/SF2Sample.java
deleted file mode 100755
index 4a2f0fc..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/SF2Sample.java
+++ /dev/null
@@ -1,216 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, 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.media.sound;
-
-import java.io.InputStream;
-
-import javax.sound.midi.Soundbank;
-import javax.sound.midi.SoundbankResource;
-import javax.sound.sampled.AudioFormat;
-import javax.sound.sampled.AudioInputStream;
-
-/**
- * Soundfont sample storage.
- *
- * @author Karl Helgason
- */
-public final class SF2Sample extends SoundbankResource {
-
-    String name = "";
-    long startLoop = 0;
-    long endLoop = 0;
-    long sampleRate = 44100;
-    int originalPitch = 60;
-    byte pitchCorrection = 0;
-    int sampleLink = 0;
-    int sampleType = 0;
-    ModelByteBuffer data;
-    ModelByteBuffer data24;
-
-    public SF2Sample(Soundbank soundBank) {
-        super(soundBank, null, AudioInputStream.class);
-    }
-
-    public SF2Sample() {
-        super(null, null, AudioInputStream.class);
-    }
-
-    public Object getData() {
-
-        AudioFormat format = getFormat();
-        /*
-        if (sampleFile != null) {
-            FileInputStream fis;
-            try {
-                fis = new FileInputStream(sampleFile);
-                RIFFReader riff = new RIFFReader(fis);
-                if (!riff.getFormat().equals("RIFF")) {
-                    throw new RIFFInvalidDataException(
-                        "Input stream is not a valid RIFF stream!");
-                }
-                if (!riff.getType().equals("sfbk")) {
-                    throw new RIFFInvalidDataException(
-                        "Input stream is not a valid SoundFont!");
-                }
-                while (riff.hasNextChunk()) {
-                    RIFFReader chunk = riff.nextChunk();
-                    if (chunk.getFormat().equals("LIST")) {
-                        if (chunk.getType().equals("sdta")) {
-                            while(chunk.hasNextChunk()) {
-                                RIFFReader chunkchunk = chunk.nextChunk();
-                                if(chunkchunk.getFormat().equals("smpl")) {
-                                    chunkchunk.skip(sampleOffset);
-                                    return new AudioInputStream(chunkchunk,
-                                            format, sampleLen);
-                                }
-                            }
-                        }
-                    }
-                }
-                return null;
-            } catch (Exception e) {
-                return new Throwable(e.toString());
-            }
-        }
-        */
-        InputStream is = data.getInputStream();
-        if (is == null)
-            return null;
-        return new AudioInputStream(is, format, data.capacity());
-    }
-
-    public ModelByteBuffer getDataBuffer() {
-        return data;
-    }
-
-    public ModelByteBuffer getData24Buffer() {
-        return data24;
-    }
-
-    public AudioFormat getFormat() {
-        return new AudioFormat(sampleRate, 16, 1, true, false);
-    }
-
-    public void setData(ModelByteBuffer data) {
-        this.data = data;
-    }
-
-    public void setData(byte[] data) {
-        this.data = new ModelByteBuffer(data);
-    }
-
-    public void setData(byte[] data, int offset, int length) {
-        this.data = new ModelByteBuffer(data, offset, length);
-    }
-
-    public void setData24(ModelByteBuffer data24) {
-        this.data24 = data24;
-    }
-
-    public void setData24(byte[] data24) {
-        this.data24 = new ModelByteBuffer(data24);
-    }
-
-    public void setData24(byte[] data24, int offset, int length) {
-        this.data24 = new ModelByteBuffer(data24, offset, length);
-    }
-
-    /*
-    public void setData(File file, int offset, int length) {
-        this.data = null;
-        this.sampleFile = file;
-        this.sampleOffset = offset;
-        this.sampleLen = length;
-    }
-    */
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public long getEndLoop() {
-        return endLoop;
-    }
-
-    public void setEndLoop(long endLoop) {
-        this.endLoop = endLoop;
-    }
-
-    public int getOriginalPitch() {
-        return originalPitch;
-    }
-
-    public void setOriginalPitch(int originalPitch) {
-        this.originalPitch = originalPitch;
-    }
-
-    public byte getPitchCorrection() {
-        return pitchCorrection;
-    }
-
-    public void setPitchCorrection(byte pitchCorrection) {
-        this.pitchCorrection = pitchCorrection;
-    }
-
-    public int getSampleLink() {
-        return sampleLink;
-    }
-
-    public void setSampleLink(int sampleLink) {
-        this.sampleLink = sampleLink;
-    }
-
-    public long getSampleRate() {
-        return sampleRate;
-    }
-
-    public void setSampleRate(long sampleRate) {
-        this.sampleRate = sampleRate;
-    }
-
-    public int getSampleType() {
-        return sampleType;
-    }
-
-    public void setSampleType(int sampleType) {
-        this.sampleType = sampleType;
-    }
-
-    public long getStartLoop() {
-        return startLoop;
-    }
-
-    public void setStartLoop(long startLoop) {
-        this.startLoop = startLoop;
-    }
-
-    public String toString() {
-        return "Sample: " + name;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/SF2Soundbank.java b/ojluni/src/main/java/com/sun/media/sound/SF2Soundbank.java
deleted file mode 100755
index 688ba1d..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/SF2Soundbank.java
+++ /dev/null
@@ -1,973 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, 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.media.sound;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import javax.sound.midi.Instrument;
-import javax.sound.midi.Patch;
-import javax.sound.midi.Soundbank;
-import javax.sound.midi.SoundbankResource;
-
-/**
- * A SoundFont 2.04 soundbank reader.
- *
- * Based on SoundFont 2.04 specification from:
- * <p>  http://developer.creative.com <br>
- *      http://www.soundfont.com/ ;
- *
- * @author Karl Helgason
- */
-public final class SF2Soundbank implements Soundbank {
-
-    // version of the Sound Font RIFF file
-    int major = 2;
-    int minor = 1;
-    // target Sound Engine
-    String targetEngine = "EMU8000";
-    // Sound Font Bank Name
-    String name = "untitled";
-    // Sound ROM Name
-    String romName = null;
-    // Sound ROM Version
-    int romVersionMajor = -1;
-    int romVersionMinor = -1;
-    // Date of Creation of the Bank
-    String creationDate = null;
-    // Sound Designers and Engineers for the Bank
-    String engineers = null;
-    // Product for which the Bank was intended
-    String product = null;
-    // Copyright message
-    String copyright = null;
-    // Comments
-    String comments = null;
-    // The SoundFont tools used to create and alter the bank
-    String tools = null;
-    // The Sample Data loaded from the SoundFont
-    private ModelByteBuffer sampleData = null;
-    private ModelByteBuffer sampleData24 = null;
-    private File sampleFile = null;
-    private boolean largeFormat = false;
-    private final List<SF2Instrument> instruments = new ArrayList<SF2Instrument>();
-    private final List<SF2Layer> layers = new ArrayList<SF2Layer>();
-    private final List<SF2Sample> samples = new ArrayList<SF2Sample>();
-
-    public SF2Soundbank() {
-    }
-
-    public SF2Soundbank(URL url) throws IOException {
-
-        InputStream is = url.openStream();
-        try {
-            readSoundbank(is);
-        } finally {
-            is.close();
-        }
-    }
-
-    public SF2Soundbank(File file) throws IOException {
-        largeFormat = true;
-        sampleFile = file;
-        InputStream is = new FileInputStream(file);
-        try {
-            readSoundbank(is);
-        } finally {
-            is.close();
-        }
-    }
-
-    public SF2Soundbank(InputStream inputstream) throws IOException {
-        readSoundbank(inputstream);
-    }
-
-    private void readSoundbank(InputStream inputstream) throws IOException {
-        RIFFReader riff = new RIFFReader(inputstream);
-        if (!riff.getFormat().equals("RIFF")) {
-            throw new RIFFInvalidFormatException(
-                    "Input stream is not a valid RIFF stream!");
-        }
-        if (!riff.getType().equals("sfbk")) {
-            throw new RIFFInvalidFormatException(
-                    "Input stream is not a valid SoundFont!");
-        }
-        while (riff.hasNextChunk()) {
-            RIFFReader chunk = riff.nextChunk();
-            if (chunk.getFormat().equals("LIST")) {
-                if (chunk.getType().equals("INFO"))
-                    readInfoChunk(chunk);
-                if (chunk.getType().equals("sdta"))
-                    readSdtaChunk(chunk);
-                if (chunk.getType().equals("pdta"))
-                    readPdtaChunk(chunk);
-            }
-        }
-    }
-
-    private void readInfoChunk(RIFFReader riff) throws IOException {
-        while (riff.hasNextChunk()) {
-            RIFFReader chunk = riff.nextChunk();
-            String format = chunk.getFormat();
-            if (format.equals("ifil")) {
-                major = chunk.readUnsignedShort();
-                minor = chunk.readUnsignedShort();
-            } else if (format.equals("isng")) {
-                this.targetEngine = chunk.readString(chunk.available());
-            } else if (format.equals("INAM")) {
-                this.name = chunk.readString(chunk.available());
-            } else if (format.equals("irom")) {
-                this.romName = chunk.readString(chunk.available());
-            } else if (format.equals("iver")) {
-                romVersionMajor = chunk.readUnsignedShort();
-                romVersionMinor = chunk.readUnsignedShort();
-            } else if (format.equals("ICRD")) {
-                this.creationDate = chunk.readString(chunk.available());
-            } else if (format.equals("IENG")) {
-                this.engineers = chunk.readString(chunk.available());
-            } else if (format.equals("IPRD")) {
-                this.product = chunk.readString(chunk.available());
-            } else if (format.equals("ICOP")) {
-                this.copyright = chunk.readString(chunk.available());
-            } else if (format.equals("ICMT")) {
-                this.comments = chunk.readString(chunk.available());
-            } else if (format.equals("ISFT")) {
-                this.tools = chunk.readString(chunk.available());
-            }
-
-        }
-    }
-
-    private void readSdtaChunk(RIFFReader riff) throws IOException {
-        while (riff.hasNextChunk()) {
-            RIFFReader chunk = riff.nextChunk();
-            if (chunk.getFormat().equals("smpl")) {
-                if (!largeFormat) {
-                    byte[] sampleData = new byte[chunk.available()];
-
-                    int read = 0;
-                    int avail = chunk.available();
-                    while (read != avail) {
-                        if (avail - read > 65536) {
-                            chunk.readFully(sampleData, read, 65536);
-                            read += 65536;
-                        } else {
-                            chunk.readFully(sampleData, read, avail - read);
-                            read = avail;
-                        }
-
-                    }
-                    this.sampleData = new ModelByteBuffer(sampleData);
-                    //chunk.read(sampleData);
-                } else {
-                    this.sampleData = new ModelByteBuffer(sampleFile,
-                            chunk.getFilePointer(), chunk.available());
-                }
-            }
-            if (chunk.getFormat().equals("sm24")) {
-                if (!largeFormat) {
-                    byte[] sampleData24 = new byte[chunk.available()];
-                    //chunk.read(sampleData24);
-
-                    int read = 0;
-                    int avail = chunk.available();
-                    while (read != avail) {
-                        if (avail - read > 65536) {
-                            chunk.readFully(sampleData24, read, 65536);
-                            read += 65536;
-                        } else {
-                            chunk.readFully(sampleData24, read, avail - read);
-                            read = avail;
-                        }
-
-                    }
-                    this.sampleData24 = new ModelByteBuffer(sampleData24);
-                } else {
-                    this.sampleData24 = new ModelByteBuffer(sampleFile,
-                            chunk.getFilePointer(), chunk.available());
-                }
-
-            }
-        }
-    }
-
-    private void readPdtaChunk(RIFFReader riff) throws IOException {
-
-        List<SF2Instrument> presets = new ArrayList<SF2Instrument>();
-        List<Integer> presets_bagNdx = new ArrayList<Integer>();
-        List<SF2InstrumentRegion> presets_splits_gen
-                = new ArrayList<SF2InstrumentRegion>();
-        List<SF2InstrumentRegion> presets_splits_mod
-                = new ArrayList<SF2InstrumentRegion>();
-
-        List<SF2Layer> instruments = new ArrayList<SF2Layer>();
-        List<Integer> instruments_bagNdx = new ArrayList<Integer>();
-        List<SF2LayerRegion> instruments_splits_gen
-                = new ArrayList<SF2LayerRegion>();
-        List<SF2LayerRegion> instruments_splits_mod
-                = new ArrayList<SF2LayerRegion>();
-
-        while (riff.hasNextChunk()) {
-            RIFFReader chunk = riff.nextChunk();
-            String format = chunk.getFormat();
-            if (format.equals("phdr")) {
-                // Preset Header / Instrument
-                if (chunk.available() % 38 != 0)
-                    throw new RIFFInvalidDataException();
-                int count = chunk.available() / 38;
-                for (int i = 0; i < count; i++) {
-                    SF2Instrument preset = new SF2Instrument(this);
-                    preset.name = chunk.readString(20);
-                    preset.preset = chunk.readUnsignedShort();
-                    preset.bank = chunk.readUnsignedShort();
-                    presets_bagNdx.add(chunk.readUnsignedShort());
-                    preset.library = chunk.readUnsignedInt();
-                    preset.genre = chunk.readUnsignedInt();
-                    preset.morphology = chunk.readUnsignedInt();
-                    presets.add(preset);
-                    if (i != count - 1)
-                        this.instruments.add(preset);
-                }
-            } else if (format.equals("pbag")) {
-                // Preset Zones / Instruments splits
-                if (chunk.available() % 4 != 0)
-                    throw new RIFFInvalidDataException();
-                int count = chunk.available() / 4;
-
-                // Skip first record
-                {
-                    int gencount = chunk.readUnsignedShort();
-                    int modcount = chunk.readUnsignedShort();
-                    while (presets_splits_gen.size() < gencount)
-                        presets_splits_gen.add(null);
-                    while (presets_splits_mod.size() < modcount)
-                        presets_splits_mod.add(null);
-                    count--;
-                }
-
-                int offset = presets_bagNdx.get(0);
-                // Offset should be 0 (but just case)
-                for (int i = 0; i < offset; i++) {
-                    if (count == 0)
-                        throw new RIFFInvalidDataException();
-                    int gencount = chunk.readUnsignedShort();
-                    int modcount = chunk.readUnsignedShort();
-                    while (presets_splits_gen.size() < gencount)
-                        presets_splits_gen.add(null);
-                    while (presets_splits_mod.size() < modcount)
-                        presets_splits_mod.add(null);
-                    count--;
-                }
-
-                for (int i = 0; i < presets_bagNdx.size() - 1; i++) {
-                    int zone_count = presets_bagNdx.get(i + 1)
-                                     - presets_bagNdx.get(i);
-                    SF2Instrument preset = presets.get(i);
-                    for (int ii = 0; ii < zone_count; ii++) {
-                        if (count == 0)
-                            throw new RIFFInvalidDataException();
-                        int gencount = chunk.readUnsignedShort();
-                        int modcount = chunk.readUnsignedShort();
-                        SF2InstrumentRegion split = new SF2InstrumentRegion();
-                        preset.regions.add(split);
-                        while (presets_splits_gen.size() < gencount)
-                            presets_splits_gen.add(split);
-                        while (presets_splits_mod.size() < modcount)
-                            presets_splits_mod.add(split);
-                        count--;
-                    }
-                }
-            } else if (format.equals("pmod")) {
-                // Preset Modulators / Split Modulators
-                for (int i = 0; i < presets_splits_mod.size(); i++) {
-                    SF2Modulator modulator = new SF2Modulator();
-                    modulator.sourceOperator = chunk.readUnsignedShort();
-                    modulator.destinationOperator = chunk.readUnsignedShort();
-                    modulator.amount = chunk.readShort();
-                    modulator.amountSourceOperator = chunk.readUnsignedShort();
-                    modulator.transportOperator = chunk.readUnsignedShort();
-                    SF2InstrumentRegion split = presets_splits_mod.get(i);
-                    if (split != null)
-                        split.modulators.add(modulator);
-                }
-            } else if (format.equals("pgen")) {
-                // Preset Generators / Split Generators
-                for (int i = 0; i < presets_splits_gen.size(); i++) {
-                    int operator = chunk.readUnsignedShort();
-                    short amount = chunk.readShort();
-                    SF2InstrumentRegion split = presets_splits_gen.get(i);
-                    if (split != null)
-                        split.generators.put(operator, amount);
-                }
-            } else if (format.equals("inst")) {
-                // Instrument Header / Layers
-                if (chunk.available() % 22 != 0)
-                    throw new RIFFInvalidDataException();
-                int count = chunk.available() / 22;
-                for (int i = 0; i < count; i++) {
-                    SF2Layer layer = new SF2Layer(this);
-                    layer.name = chunk.readString(20);
-                    instruments_bagNdx.add(chunk.readUnsignedShort());
-                    instruments.add(layer);
-                    if (i != count - 1)
-                        this.layers.add(layer);
-                }
-            } else if (format.equals("ibag")) {
-                // Instrument Zones / Layer splits
-                if (chunk.available() % 4 != 0)
-                    throw new RIFFInvalidDataException();
-                int count = chunk.available() / 4;
-
-                // Skip first record
-                {
-                    int gencount = chunk.readUnsignedShort();
-                    int modcount = chunk.readUnsignedShort();
-                    while (instruments_splits_gen.size() < gencount)
-                        instruments_splits_gen.add(null);
-                    while (instruments_splits_mod.size() < modcount)
-                        instruments_splits_mod.add(null);
-                    count--;
-                }
-
-                int offset = instruments_bagNdx.get(0);
-                // Offset should be 0 (but just case)
-                for (int i = 0; i < offset; i++) {
-                    if (count == 0)
-                        throw new RIFFInvalidDataException();
-                    int gencount = chunk.readUnsignedShort();
-                    int modcount = chunk.readUnsignedShort();
-                    while (instruments_splits_gen.size() < gencount)
-                        instruments_splits_gen.add(null);
-                    while (instruments_splits_mod.size() < modcount)
-                        instruments_splits_mod.add(null);
-                    count--;
-                }
-
-                for (int i = 0; i < instruments_bagNdx.size() - 1; i++) {
-                    int zone_count = instruments_bagNdx.get(i + 1) - instruments_bagNdx.get(i);
-                    SF2Layer layer = layers.get(i);
-                    for (int ii = 0; ii < zone_count; ii++) {
-                        if (count == 0)
-                            throw new RIFFInvalidDataException();
-                        int gencount = chunk.readUnsignedShort();
-                        int modcount = chunk.readUnsignedShort();
-                        SF2LayerRegion split = new SF2LayerRegion();
-                        layer.regions.add(split);
-                        while (instruments_splits_gen.size() < gencount)
-                            instruments_splits_gen.add(split);
-                        while (instruments_splits_mod.size() < modcount)
-                            instruments_splits_mod.add(split);
-                        count--;
-                    }
-                }
-
-            } else if (format.equals("imod")) {
-                // Instrument Modulators / Split Modulators
-                for (int i = 0; i < instruments_splits_mod.size(); i++) {
-                    SF2Modulator modulator = new SF2Modulator();
-                    modulator.sourceOperator = chunk.readUnsignedShort();
-                    modulator.destinationOperator = chunk.readUnsignedShort();
-                    modulator.amount = chunk.readShort();
-                    modulator.amountSourceOperator = chunk.readUnsignedShort();
-                    modulator.transportOperator = chunk.readUnsignedShort();
-                    SF2LayerRegion split = instruments_splits_gen.get(i);
-                    if (split != null)
-                        split.modulators.add(modulator);
-                }
-            } else if (format.equals("igen")) {
-                // Instrument Generators / Split Generators
-                for (int i = 0; i < instruments_splits_gen.size(); i++) {
-                    int operator = chunk.readUnsignedShort();
-                    short amount = chunk.readShort();
-                    SF2LayerRegion split = instruments_splits_gen.get(i);
-                    if (split != null)
-                        split.generators.put(operator, amount);
-                }
-            } else if (format.equals("shdr")) {
-                // Sample Headers
-                if (chunk.available() % 46 != 0)
-                    throw new RIFFInvalidDataException();
-                int count = chunk.available() / 46;
-                for (int i = 0; i < count; i++) {
-                    SF2Sample sample = new SF2Sample(this);
-                    sample.name = chunk.readString(20);
-                    long start = chunk.readUnsignedInt();
-                    long end = chunk.readUnsignedInt();
-                    sample.data = sampleData.subbuffer(start * 2, end * 2, true);
-                    if (sampleData24 != null)
-                        sample.data24 = sampleData24.subbuffer(start, end, true);
-                    /*
-                    sample.data = new ModelByteBuffer(sampleData, (int)(start*2),
-                            (int)((end - start)*2));
-                    if (sampleData24 != null)
-                        sample.data24 = new ModelByteBuffer(sampleData24,
-                                (int)start, (int)(end - start));
-                     */
-                    sample.startLoop = chunk.readUnsignedInt() - start;
-                    sample.endLoop = chunk.readUnsignedInt() - start;
-                    if (sample.startLoop < 0)
-                        sample.startLoop = -1;
-                    if (sample.endLoop < 0)
-                        sample.endLoop = -1;
-                    sample.sampleRate = chunk.readUnsignedInt();
-                    sample.originalPitch = chunk.readUnsignedByte();
-                    sample.pitchCorrection = chunk.readByte();
-                    sample.sampleLink = chunk.readUnsignedShort();
-                    sample.sampleType = chunk.readUnsignedShort();
-                    if (i != count - 1)
-                        this.samples.add(sample);
-                }
-            }
-        }
-
-        Iterator<SF2Layer> liter = this.layers.iterator();
-        while (liter.hasNext()) {
-            SF2Layer layer = liter.next();
-            Iterator<SF2LayerRegion> siter = layer.regions.iterator();
-            SF2Region globalsplit = null;
-            while (siter.hasNext()) {
-                SF2LayerRegion split = siter.next();
-                if (split.generators.get(SF2LayerRegion.GENERATOR_SAMPLEID) != null) {
-                    int sampleid = split.generators.get(
-                            SF2LayerRegion.GENERATOR_SAMPLEID);
-                    split.generators.remove(SF2LayerRegion.GENERATOR_SAMPLEID);
-                    split.sample = samples.get(sampleid);
-                } else {
-                    globalsplit = split;
-                }
-            }
-            if (globalsplit != null) {
-                layer.getRegions().remove(globalsplit);
-                SF2GlobalRegion gsplit = new SF2GlobalRegion();
-                gsplit.generators = globalsplit.generators;
-                gsplit.modulators = globalsplit.modulators;
-                layer.setGlobalZone(gsplit);
-            }
-        }
-
-
-        Iterator<SF2Instrument> iiter = this.instruments.iterator();
-        while (iiter.hasNext()) {
-            SF2Instrument instrument = iiter.next();
-            Iterator<SF2InstrumentRegion> siter = instrument.regions.iterator();
-            SF2Region globalsplit = null;
-            while (siter.hasNext()) {
-                SF2InstrumentRegion split = siter.next();
-                if (split.generators.get(SF2LayerRegion.GENERATOR_INSTRUMENT) != null) {
-                    int instrumentid = split.generators.get(
-                            SF2InstrumentRegion.GENERATOR_INSTRUMENT);
-                    split.generators.remove(SF2LayerRegion.GENERATOR_INSTRUMENT);
-                    split.layer = layers.get(instrumentid);
-                } else {
-                    globalsplit = split;
-                }
-            }
-
-            if (globalsplit != null) {
-                instrument.getRegions().remove(globalsplit);
-                SF2GlobalRegion gsplit = new SF2GlobalRegion();
-                gsplit.generators = globalsplit.generators;
-                gsplit.modulators = globalsplit.modulators;
-                instrument.setGlobalZone(gsplit);
-            }
-        }
-
-    }
-
-    public void save(String name) throws IOException {
-        writeSoundbank(new RIFFWriter(name, "sfbk"));
-    }
-
-    public void save(File file) throws IOException {
-        writeSoundbank(new RIFFWriter(file, "sfbk"));
-    }
-
-    public void save(OutputStream out) throws IOException {
-        writeSoundbank(new RIFFWriter(out, "sfbk"));
-    }
-
-    private void writeSoundbank(RIFFWriter writer) throws IOException {
-        writeInfo(writer.writeList("INFO"));
-        writeSdtaChunk(writer.writeList("sdta"));
-        writePdtaChunk(writer.writeList("pdta"));
-        writer.close();
-    }
-
-    private void writeInfoStringChunk(RIFFWriter writer, String name,
-            String value) throws IOException {
-        if (value == null)
-            return;
-        RIFFWriter chunk = writer.writeChunk(name);
-        chunk.writeString(value);
-        int len = value.getBytes("ascii").length;
-        chunk.write(0);
-        len++;
-        if (len % 2 != 0)
-            chunk.write(0);
-    }
-
-    private void writeInfo(RIFFWriter writer) throws IOException {
-        if (this.targetEngine == null)
-            this.targetEngine = "EMU8000";
-        if (this.name == null)
-            this.name = "";
-
-        RIFFWriter ifil_chunk = writer.writeChunk("ifil");
-        ifil_chunk.writeUnsignedShort(this.major);
-        ifil_chunk.writeUnsignedShort(this.minor);
-        writeInfoStringChunk(writer, "isng", this.targetEngine);
-        writeInfoStringChunk(writer, "INAM", this.name);
-        writeInfoStringChunk(writer, "irom", this.romName);
-        if (romVersionMajor != -1) {
-            RIFFWriter iver_chunk = writer.writeChunk("iver");
-            iver_chunk.writeUnsignedShort(this.romVersionMajor);
-            iver_chunk.writeUnsignedShort(this.romVersionMinor);
-        }
-        writeInfoStringChunk(writer, "ICRD", this.creationDate);
-        writeInfoStringChunk(writer, "IENG", this.engineers);
-        writeInfoStringChunk(writer, "IPRD", this.product);
-        writeInfoStringChunk(writer, "ICOP", this.copyright);
-        writeInfoStringChunk(writer, "ICMT", this.comments);
-        writeInfoStringChunk(writer, "ISFT", this.tools);
-
-        writer.close();
-    }
-
-    private void writeSdtaChunk(RIFFWriter writer) throws IOException {
-
-        byte[] pad = new byte[32];
-
-        RIFFWriter smpl_chunk = writer.writeChunk("smpl");
-        for (SF2Sample sample : samples) {
-            ModelByteBuffer data = sample.getDataBuffer();
-            data.writeTo(smpl_chunk);
-            /*
-            smpl_chunk.write(data.array(),
-            data.arrayOffset(),
-            data.capacity());
-             */
-            smpl_chunk.write(pad);
-            smpl_chunk.write(pad);
-        }
-        if (major < 2)
-            return;
-        if (major == 2 && minor < 4)
-            return;
-
-
-        for (SF2Sample sample : samples) {
-            ModelByteBuffer data24 = sample.getData24Buffer();
-            if (data24 == null)
-                return;
-        }
-
-        RIFFWriter sm24_chunk = writer.writeChunk("sm24");
-        for (SF2Sample sample : samples) {
-            ModelByteBuffer data = sample.getData24Buffer();
-            data.writeTo(sm24_chunk);
-            /*
-            sm24_chunk.write(data.array(),
-            data.arrayOffset(),
-            data.capacity());*/
-            smpl_chunk.write(pad);
-        }
-    }
-
-    private void writeModulators(RIFFWriter writer, List<SF2Modulator> modulators)
-            throws IOException {
-        for (SF2Modulator modulator : modulators) {
-            writer.writeUnsignedShort(modulator.sourceOperator);
-            writer.writeUnsignedShort(modulator.destinationOperator);
-            writer.writeShort(modulator.amount);
-            writer.writeUnsignedShort(modulator.amountSourceOperator);
-            writer.writeUnsignedShort(modulator.transportOperator);
-        }
-    }
-
-    private void writeGenerators(RIFFWriter writer, Map<Integer, Short> generators)
-            throws IOException {
-        Short keyrange = (Short) generators.get(SF2Region.GENERATOR_KEYRANGE);
-        Short velrange = (Short) generators.get(SF2Region.GENERATOR_VELRANGE);
-        if (keyrange != null) {
-            writer.writeUnsignedShort(SF2Region.GENERATOR_KEYRANGE);
-            writer.writeShort(keyrange);
-        }
-        if (velrange != null) {
-            writer.writeUnsignedShort(SF2Region.GENERATOR_VELRANGE);
-            writer.writeShort(velrange);
-        }
-        for (Map.Entry<Integer, Short> generator : generators.entrySet()) {
-            if (generator.getKey() == SF2Region.GENERATOR_KEYRANGE)
-                continue;
-            if (generator.getKey() == SF2Region.GENERATOR_VELRANGE)
-                continue;
-            writer.writeUnsignedShort(generator.getKey());
-            writer.writeShort(generator.getValue());
-        }
-    }
-
-    private void writePdtaChunk(RIFFWriter writer) throws IOException {
-
-        RIFFWriter phdr_chunk = writer.writeChunk("phdr");
-        int phdr_zone_count = 0;
-        for (SF2Instrument preset : this.instruments) {
-            phdr_chunk.writeString(preset.name, 20);
-            phdr_chunk.writeUnsignedShort(preset.preset);
-            phdr_chunk.writeUnsignedShort(preset.bank);
-            phdr_chunk.writeUnsignedShort(phdr_zone_count);
-            if (preset.getGlobalRegion() != null)
-                phdr_zone_count += 1;
-            phdr_zone_count += preset.getRegions().size();
-            phdr_chunk.writeUnsignedInt(preset.library);
-            phdr_chunk.writeUnsignedInt(preset.genre);
-            phdr_chunk.writeUnsignedInt(preset.morphology);
-        }
-        phdr_chunk.writeString("EOP", 20);
-        phdr_chunk.writeUnsignedShort(0);
-        phdr_chunk.writeUnsignedShort(0);
-        phdr_chunk.writeUnsignedShort(phdr_zone_count);
-        phdr_chunk.writeUnsignedInt(0);
-        phdr_chunk.writeUnsignedInt(0);
-        phdr_chunk.writeUnsignedInt(0);
-
-
-        RIFFWriter pbag_chunk = writer.writeChunk("pbag");
-        int pbag_gencount = 0;
-        int pbag_modcount = 0;
-        for (SF2Instrument preset : this.instruments) {
-            if (preset.getGlobalRegion() != null) {
-                pbag_chunk.writeUnsignedShort(pbag_gencount);
-                pbag_chunk.writeUnsignedShort(pbag_modcount);
-                pbag_gencount += preset.getGlobalRegion().getGenerators().size();
-                pbag_modcount += preset.getGlobalRegion().getModulators().size();
-            }
-            for (SF2InstrumentRegion region : preset.getRegions()) {
-                pbag_chunk.writeUnsignedShort(pbag_gencount);
-                pbag_chunk.writeUnsignedShort(pbag_modcount);
-                if (layers.indexOf(region.layer) != -1) {
-                    // One generator is used to reference to instrument record
-                    pbag_gencount += 1;
-                }
-                pbag_gencount += region.getGenerators().size();
-                pbag_modcount += region.getModulators().size();
-
-            }
-        }
-        pbag_chunk.writeUnsignedShort(pbag_gencount);
-        pbag_chunk.writeUnsignedShort(pbag_modcount);
-
-        RIFFWriter pmod_chunk = writer.writeChunk("pmod");
-        for (SF2Instrument preset : this.instruments) {
-            if (preset.getGlobalRegion() != null) {
-                writeModulators(pmod_chunk,
-                        preset.getGlobalRegion().getModulators());
-            }
-            for (SF2InstrumentRegion region : preset.getRegions())
-                writeModulators(pmod_chunk, region.getModulators());
-        }
-        pmod_chunk.write(new byte[10]);
-
-        RIFFWriter pgen_chunk = writer.writeChunk("pgen");
-        for (SF2Instrument preset : this.instruments) {
-            if (preset.getGlobalRegion() != null) {
-                writeGenerators(pgen_chunk,
-                        preset.getGlobalRegion().getGenerators());
-            }
-            for (SF2InstrumentRegion region : preset.getRegions()) {
-                writeGenerators(pgen_chunk, region.getGenerators());
-                int ix = (int) layers.indexOf(region.layer);
-                if (ix != -1) {
-                    pgen_chunk.writeUnsignedShort(SF2Region.GENERATOR_INSTRUMENT);
-                    pgen_chunk.writeShort((short) ix);
-                }
-            }
-        }
-        pgen_chunk.write(new byte[4]);
-
-        RIFFWriter inst_chunk = writer.writeChunk("inst");
-        int inst_zone_count = 0;
-        for (SF2Layer instrument : this.layers) {
-            inst_chunk.writeString(instrument.name, 20);
-            inst_chunk.writeUnsignedShort(inst_zone_count);
-            if (instrument.getGlobalRegion() != null)
-                inst_zone_count += 1;
-            inst_zone_count += instrument.getRegions().size();
-        }
-        inst_chunk.writeString("EOI", 20);
-        inst_chunk.writeUnsignedShort(inst_zone_count);
-
-
-        RIFFWriter ibag_chunk = writer.writeChunk("ibag");
-        int ibag_gencount = 0;
-        int ibag_modcount = 0;
-        for (SF2Layer instrument : this.layers) {
-            if (instrument.getGlobalRegion() != null) {
-                ibag_chunk.writeUnsignedShort(ibag_gencount);
-                ibag_chunk.writeUnsignedShort(ibag_modcount);
-                ibag_gencount
-                        += instrument.getGlobalRegion().getGenerators().size();
-                ibag_modcount
-                        += instrument.getGlobalRegion().getModulators().size();
-            }
-            for (SF2LayerRegion region : instrument.getRegions()) {
-                ibag_chunk.writeUnsignedShort(ibag_gencount);
-                ibag_chunk.writeUnsignedShort(ibag_modcount);
-                if (samples.indexOf(region.sample) != -1) {
-                    // One generator is used to reference to instrument record
-                    ibag_gencount += 1;
-                }
-                ibag_gencount += region.getGenerators().size();
-                ibag_modcount += region.getModulators().size();
-
-            }
-        }
-        ibag_chunk.writeUnsignedShort(ibag_gencount);
-        ibag_chunk.writeUnsignedShort(ibag_modcount);
-
-
-        RIFFWriter imod_chunk = writer.writeChunk("imod");
-        for (SF2Layer instrument : this.layers) {
-            if (instrument.getGlobalRegion() != null) {
-                writeModulators(imod_chunk,
-                        instrument.getGlobalRegion().getModulators());
-            }
-            for (SF2LayerRegion region : instrument.getRegions())
-                writeModulators(imod_chunk, region.getModulators());
-        }
-        imod_chunk.write(new byte[10]);
-
-        RIFFWriter igen_chunk = writer.writeChunk("igen");
-        for (SF2Layer instrument : this.layers) {
-            if (instrument.getGlobalRegion() != null) {
-                writeGenerators(igen_chunk,
-                        instrument.getGlobalRegion().getGenerators());
-            }
-            for (SF2LayerRegion region : instrument.getRegions()) {
-                writeGenerators(igen_chunk, region.getGenerators());
-                int ix = samples.indexOf(region.sample);
-                if (ix != -1) {
-                    igen_chunk.writeUnsignedShort(SF2Region.GENERATOR_SAMPLEID);
-                    igen_chunk.writeShort((short) ix);
-                }
-            }
-        }
-        igen_chunk.write(new byte[4]);
-
-
-        RIFFWriter shdr_chunk = writer.writeChunk("shdr");
-        long sample_pos = 0;
-        for (SF2Sample sample : samples) {
-            shdr_chunk.writeString(sample.name, 20);
-            long start = sample_pos;
-            sample_pos += sample.data.capacity() / 2;
-            long end = sample_pos;
-            long startLoop = sample.startLoop + start;
-            long endLoop = sample.endLoop + start;
-            if (startLoop < start)
-                startLoop = start;
-            if (endLoop > end)
-                endLoop = end;
-            shdr_chunk.writeUnsignedInt(start);
-            shdr_chunk.writeUnsignedInt(end);
-            shdr_chunk.writeUnsignedInt(startLoop);
-            shdr_chunk.writeUnsignedInt(endLoop);
-            shdr_chunk.writeUnsignedInt(sample.sampleRate);
-            shdr_chunk.writeUnsignedByte(sample.originalPitch);
-            shdr_chunk.writeByte(sample.pitchCorrection);
-            shdr_chunk.writeUnsignedShort(sample.sampleLink);
-            shdr_chunk.writeUnsignedShort(sample.sampleType);
-            sample_pos += 32;
-        }
-        shdr_chunk.writeString("EOS", 20);
-        shdr_chunk.write(new byte[26]);
-
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public String getVersion() {
-        return major + "." + minor;
-    }
-
-    public String getVendor() {
-        return engineers;
-    }
-
-    public String getDescription() {
-        return comments;
-    }
-
-    public void setName(String s) {
-        name = s;
-    }
-
-    public void setVendor(String s) {
-        engineers = s;
-    }
-
-    public void setDescription(String s) {
-        comments = s;
-    }
-
-    public SoundbankResource[] getResources() {
-        SoundbankResource[] resources
-                = new SoundbankResource[layers.size() + samples.size()];
-        int j = 0;
-        for (int i = 0; i < layers.size(); i++)
-            resources[j++] = layers.get(i);
-        for (int i = 0; i < samples.size(); i++)
-            resources[j++] = samples.get(i);
-        return resources;
-    }
-
-    public SF2Instrument[] getInstruments() {
-        SF2Instrument[] inslist_array
-                = instruments.toArray(new SF2Instrument[instruments.size()]);
-        Arrays.sort(inslist_array, new ModelInstrumentComparator());
-        return inslist_array;
-    }
-
-    public SF2Layer[] getLayers() {
-        return layers.toArray(new SF2Layer[layers.size()]);
-    }
-
-    public SF2Sample[] getSamples() {
-        return samples.toArray(new SF2Sample[samples.size()]);
-    }
-
-    public Instrument getInstrument(Patch patch) {
-        int program = patch.getProgram();
-        int bank = patch.getBank();
-        boolean percussion = false;
-        if (patch instanceof ModelPatch)
-            percussion = ((ModelPatch)patch).isPercussion();
-        for (Instrument instrument : instruments) {
-            Patch patch2 = instrument.getPatch();
-            int program2 = patch2.getProgram();
-            int bank2 = patch2.getBank();
-            if (program == program2 && bank == bank2) {
-                boolean percussion2 = false;
-                if (patch2 instanceof ModelPatch)
-                    percussion2 = ((ModelPatch) patch2).isPercussion();
-                if (percussion == percussion2)
-                    return instrument;
-            }
-        }
-        return null;
-    }
-
-    public String getCreationDate() {
-        return creationDate;
-    }
-
-    public void setCreationDate(String creationDate) {
-        this.creationDate = creationDate;
-    }
-
-    public String getProduct() {
-        return product;
-    }
-
-    public void setProduct(String product) {
-        this.product = product;
-    }
-
-    public String getRomName() {
-        return romName;
-    }
-
-    public void setRomName(String romName) {
-        this.romName = romName;
-    }
-
-    public int getRomVersionMajor() {
-        return romVersionMajor;
-    }
-
-    public void setRomVersionMajor(int romVersionMajor) {
-        this.romVersionMajor = romVersionMajor;
-    }
-
-    public int getRomVersionMinor() {
-        return romVersionMinor;
-    }
-
-    public void setRomVersionMinor(int romVersionMinor) {
-        this.romVersionMinor = romVersionMinor;
-    }
-
-    public String getTargetEngine() {
-        return targetEngine;
-    }
-
-    public void setTargetEngine(String targetEngine) {
-        this.targetEngine = targetEngine;
-    }
-
-    public String getTools() {
-        return tools;
-    }
-
-    public void setTools(String tools) {
-        this.tools = tools;
-    }
-
-    public void addResource(SoundbankResource resource) {
-        if (resource instanceof SF2Instrument)
-            instruments.add((SF2Instrument)resource);
-        if (resource instanceof SF2Layer)
-            layers.add((SF2Layer)resource);
-        if (resource instanceof SF2Sample)
-            samples.add((SF2Sample)resource);
-    }
-
-    public void removeResource(SoundbankResource resource) {
-        if (resource instanceof SF2Instrument)
-            instruments.remove((SF2Instrument)resource);
-        if (resource instanceof SF2Layer)
-            layers.remove((SF2Layer)resource);
-        if (resource instanceof SF2Sample)
-            samples.remove((SF2Sample)resource);
-    }
-
-    public void addInstrument(SF2Instrument resource) {
-        instruments.add(resource);
-    }
-
-    public void removeInstrument(SF2Instrument resource) {
-        instruments.remove(resource);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/SF2SoundbankReader.java b/ojluni/src/main/java/com/sun/media/sound/SF2SoundbankReader.java
deleted file mode 100755
index a61094f..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/SF2SoundbankReader.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, 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.media.sound;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-import javax.sound.midi.InvalidMidiDataException;
-import javax.sound.midi.Soundbank;
-import javax.sound.midi.spi.SoundbankReader;
-
-/**
- * This class is used to connect the SF2SoundBank class
- * to the SoundbankReader SPI interface.
- *
- * @author Karl Helgason
- */
-public final class SF2SoundbankReader extends SoundbankReader {
-
-    public Soundbank getSoundbank(URL url)
-            throws InvalidMidiDataException, IOException {
-        try {
-            return new SF2Soundbank(url);
-        } catch (RIFFInvalidFormatException e) {
-            return null;
-        } catch(IOException ioe) {
-            return null;
-        }
-    }
-
-    public Soundbank getSoundbank(InputStream stream)
-            throws InvalidMidiDataException, IOException {
-        try {
-            stream.mark(512);
-            return new SF2Soundbank(stream);
-        } catch (RIFFInvalidFormatException e) {
-            stream.reset();
-            return null;
-        }
-    }
-
-    public Soundbank getSoundbank(File file)
-            throws InvalidMidiDataException, IOException {
-        try {
-            return new SF2Soundbank(file);
-        } catch (RIFFInvalidFormatException e) {
-            return null;
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/SimpleInstrument.java b/ojluni/src/main/java/com/sun/media/sound/SimpleInstrument.java
deleted file mode 100755
index af4a35e..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/SimpleInstrument.java
+++ /dev/null
@@ -1,196 +0,0 @@
-/*
- * Copyright (c) 2007, 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.media.sound;
-
-import java.util.ArrayList;
-import java.util.List;
-import javax.sound.midi.Patch;
-
-/**
- * A simple instrument that is made of other ModelInstrument, ModelPerformer
- * objects.
- *
- * @author Karl Helgason
- */
-public class SimpleInstrument extends ModelInstrument {
-
-    private static class SimpleInstrumentPart {
-        ModelPerformer[] performers;
-        int keyFrom;
-        int keyTo;
-        int velFrom;
-        int velTo;
-        int exclusiveClass;
-    }
-    protected int preset = 0;
-    protected int bank = 0;
-    protected boolean percussion = false;
-    protected String name = "";
-    protected List<SimpleInstrumentPart> parts
-            = new ArrayList<SimpleInstrumentPart>();
-
-    public SimpleInstrument() {
-        super(null, null, null, null);
-    }
-
-    public void clear() {
-        parts.clear();
-    }
-
-    public void add(ModelPerformer[] performers, int keyFrom, int keyTo,
-            int velFrom, int velTo, int exclusiveClass) {
-        SimpleInstrumentPart part = new SimpleInstrumentPart();
-        part.performers = performers;
-        part.keyFrom = keyFrom;
-        part.keyTo = keyTo;
-        part.velFrom = velFrom;
-        part.velTo = velTo;
-        part.exclusiveClass = exclusiveClass;
-        parts.add(part);
-    }
-
-    public void add(ModelPerformer[] performers, int keyFrom, int keyTo,
-            int velFrom, int velTo) {
-        add(performers, keyFrom, keyTo, velFrom, velTo, -1);
-    }
-
-    public void add(ModelPerformer[] performers, int keyFrom, int keyTo) {
-        add(performers, keyFrom, keyTo, 0, 127, -1);
-    }
-
-    public void add(ModelPerformer[] performers) {
-        add(performers, 0, 127, 0, 127, -1);
-    }
-
-    public void add(ModelPerformer performer, int keyFrom, int keyTo,
-            int velFrom, int velTo, int exclusiveClass) {
-        add(new ModelPerformer[]{performer}, keyFrom, keyTo, velFrom, velTo,
-                exclusiveClass);
-    }
-
-    public void add(ModelPerformer performer, int keyFrom, int keyTo,
-            int velFrom, int velTo) {
-        add(new ModelPerformer[]{performer}, keyFrom, keyTo, velFrom, velTo);
-    }
-
-    public void add(ModelPerformer performer, int keyFrom, int keyTo) {
-        add(new ModelPerformer[]{performer}, keyFrom, keyTo);
-    }
-
-    public void add(ModelPerformer performer) {
-        add(new ModelPerformer[]{performer});
-    }
-
-    public void add(ModelInstrument ins, int keyFrom, int keyTo, int velFrom,
-            int velTo, int exclusiveClass) {
-        add(ins.getPerformers(), keyFrom, keyTo, velFrom, velTo, exclusiveClass);
-    }
-
-    public void add(ModelInstrument ins, int keyFrom, int keyTo, int velFrom,
-            int velTo) {
-        add(ins.getPerformers(), keyFrom, keyTo, velFrom, velTo);
-    }
-
-    public void add(ModelInstrument ins, int keyFrom, int keyTo) {
-        add(ins.getPerformers(), keyFrom, keyTo);
-    }
-
-    public void add(ModelInstrument ins) {
-        add(ins.getPerformers());
-    }
-
-    public ModelPerformer[] getPerformers() {
-
-        int percount = 0;
-        for (SimpleInstrumentPart part : parts)
-            if (part.performers != null)
-                percount += part.performers.length;
-
-        ModelPerformer[] performers = new ModelPerformer[percount];
-        int px = 0;
-        for (SimpleInstrumentPart part : parts) {
-            if (part.performers != null) {
-                for (ModelPerformer mperfm : part.performers) {
-                    ModelPerformer performer = new ModelPerformer();
-                    performer.setName(getName());
-                    performers[px++] = performer;
-
-                    performer.setDefaultConnectionsEnabled(
-                            mperfm.isDefaultConnectionsEnabled());
-                    performer.setKeyFrom(mperfm.getKeyFrom());
-                    performer.setKeyTo(mperfm.getKeyTo());
-                    performer.setVelFrom(mperfm.getVelFrom());
-                    performer.setVelTo(mperfm.getVelTo());
-                    performer.setExclusiveClass(mperfm.getExclusiveClass());
-                    performer.setSelfNonExclusive(mperfm.isSelfNonExclusive());
-                    performer.setReleaseTriggered(mperfm.isReleaseTriggered());
-                    if (part.exclusiveClass != -1)
-                        performer.setExclusiveClass(part.exclusiveClass);
-                    if (part.keyFrom > performer.getKeyFrom())
-                        performer.setKeyFrom(part.keyFrom);
-                    if (part.keyTo < performer.getKeyTo())
-                        performer.setKeyTo(part.keyTo);
-                    if (part.velFrom > performer.getVelFrom())
-                        performer.setVelFrom(part.velFrom);
-                    if (part.velTo < performer.getVelTo())
-                        performer.setVelTo(part.velTo);
-                    performer.getOscillators().addAll(mperfm.getOscillators());
-                    performer.getConnectionBlocks().addAll(
-                            mperfm.getConnectionBlocks());
-                }
-            }
-        }
-
-        return performers;
-    }
-
-    public Object getData() {
-        return null;
-    }
-
-    public String getName() {
-        return this.name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public ModelPatch getPatch() {
-        return new ModelPatch(bank, preset, percussion);
-    }
-
-    public void setPatch(Patch patch) {
-        if (patch instanceof ModelPatch && ((ModelPatch)patch).isPercussion()) {
-            percussion = true;
-            bank = patch.getBank();
-            preset = patch.getProgram();
-        } else {
-            percussion = false;
-            bank = patch.getBank();
-            preset = patch.getProgram();
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/SimpleSoundbank.java b/ojluni/src/main/java/com/sun/media/sound/SimpleSoundbank.java
deleted file mode 100755
index d922633..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/SimpleSoundbank.java
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * Copyright (c) 2007, 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.media.sound;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import javax.sound.midi.Instrument;
-import javax.sound.midi.Patch;
-import javax.sound.midi.Soundbank;
-import javax.sound.midi.SoundbankResource;
-
-/**
- * A simple soundbank that contains instruments and soundbankresources.
- *
- * @author Karl Helgason
- */
-public class SimpleSoundbank implements Soundbank {
-
-    String name = "";
-    String version = "";
-    String vendor = "";
-    String description = "";
-    List<SoundbankResource> resources = new ArrayList<SoundbankResource>();
-    List<Instrument> instruments = new ArrayList<Instrument>();
-
-    public String getName() {
-        return name;
-    }
-
-    public String getVersion() {
-        return version;
-    }
-
-    public String getVendor() {
-        return vendor;
-    }
-
-    public String getDescription() {
-        return description;
-    }
-
-    public void setDescription(String description) {
-        this.description = description;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public void setVendor(String vendor) {
-        this.vendor = vendor;
-    }
-
-    public void setVersion(String version) {
-        this.version = version;
-    }
-
-    public SoundbankResource[] getResources() {
-        return resources.toArray(new SoundbankResource[resources.size()]);
-    }
-
-    public Instrument[] getInstruments() {
-        Instrument[] inslist_array
-                = instruments.toArray(new Instrument[resources.size()]);
-        Arrays.sort(inslist_array, new ModelInstrumentComparator());
-        return inslist_array;
-    }
-
-    public Instrument getInstrument(Patch patch) {
-        int program = patch.getProgram();
-        int bank = patch.getBank();
-        boolean percussion = false;
-        if (patch instanceof ModelPatch)
-            percussion = ((ModelPatch)patch).isPercussion();
-        for (Instrument instrument : instruments) {
-            Patch patch2 = instrument.getPatch();
-            int program2 = patch2.getProgram();
-            int bank2 = patch2.getBank();
-            if (program == program2 && bank == bank2) {
-                boolean percussion2 = false;
-                if (patch2 instanceof ModelPatch)
-                    percussion2 = ((ModelPatch)patch2).isPercussion();
-                if (percussion == percussion2)
-                    return instrument;
-            }
-        }
-        return null;
-    }
-
-    public void addResource(SoundbankResource resource) {
-        if (resource instanceof Instrument)
-            instruments.add((Instrument) resource);
-        else
-            resources.add(resource);
-    }
-
-    public void removeResource(SoundbankResource resource) {
-        if (resource instanceof Instrument)
-            instruments.remove((Instrument) resource);
-        else
-            resources.remove(resource);
-    }
-
-    public void addInstrument(Instrument resource) {
-        instruments.add(resource);
-    }
-
-    public void removeInstrument(Instrument resource) {
-        instruments.remove(resource);
-    }
-
-    public void addAllInstruments(Soundbank soundbank) {
-        for (Instrument ins : soundbank.getInstruments())
-            addInstrument(ins);
-    }
-
-    public void removeAllInstruments(Soundbank soundbank) {
-        for (Instrument ins : soundbank.getInstruments())
-            removeInstrument(ins);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/SoftAbstractResampler.java b/ojluni/src/main/java/com/sun/media/sound/SoftAbstractResampler.java
deleted file mode 100755
index 45c8355..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/SoftAbstractResampler.java
+++ /dev/null
@@ -1,390 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, 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.media.sound;
-
-import java.io.IOException;
-import java.util.Arrays;
-
-import javax.sound.midi.MidiChannel;
-import javax.sound.midi.VoiceStatus;
-
-/**
- * Abstract resampler class.
- *
- * @author Karl Helgason
- */
-public abstract class SoftAbstractResampler implements SoftResampler {
-
-    private class ModelAbstractResamplerStream implements SoftResamplerStreamer {
-
-        AudioFloatInputStream stream;
-        boolean stream_eof = false;
-        int loopmode;
-        boolean loopdirection = true; // true = forward
-        float loopstart;
-        float looplen;
-        float target_pitch;
-        float[] current_pitch = new float[1];
-        boolean started;
-        boolean eof;
-        int sector_pos = 0;
-        int sector_size = 400;
-        int sector_loopstart = -1;
-        boolean markset = false;
-        int marklimit = 0;
-        int streampos = 0;
-        int nrofchannels = 2;
-        boolean noteOff_flag = false;
-        float[][] ibuffer;
-        boolean ibuffer_order = true;
-        float[] sbuffer;
-        int pad;
-        int pad2;
-        float[] ix = new float[1];
-        int[] ox = new int[1];
-        float samplerateconv = 1;
-        float pitchcorrection = 0;
-
-        ModelAbstractResamplerStream() {
-            pad = getPadding();
-            pad2 = getPadding() * 2;
-            ibuffer = new float[2][sector_size + pad2];
-            ibuffer_order = true;
-        }
-
-        public void noteOn(MidiChannel channel, VoiceStatus voice,
-                int noteNumber, int velocity) {
-        }
-
-        public void noteOff(int velocity) {
-            noteOff_flag = true;
-        }
-
-        public void open(ModelWavetable osc, float outputsamplerate)
-                throws IOException {
-
-            eof = false;
-            nrofchannels = osc.getChannels();
-            if (ibuffer.length < nrofchannels) {
-                ibuffer = new float[nrofchannels][sector_size + pad2];
-            }
-
-            stream = osc.openStream();
-            streampos = 0;
-            stream_eof = false;
-            pitchcorrection = osc.getPitchcorrection();
-            samplerateconv
-                    = stream.getFormat().getSampleRate() / outputsamplerate;
-            looplen = osc.getLoopLength();
-            loopstart = osc.getLoopStart();
-            sector_loopstart = (int) (loopstart / sector_size);
-            sector_loopstart = sector_loopstart - 1;
-
-            sector_pos = 0;
-
-            if (sector_loopstart < 0)
-                sector_loopstart = 0;
-            started = false;
-            loopmode = osc.getLoopType();
-
-            if (loopmode != 0) {
-                markset = false;
-                marklimit = nrofchannels * (int) (looplen + pad2 + 1);
-            } else
-                markset = true;
-            // loopmode = 0;
-
-            target_pitch = samplerateconv;
-            current_pitch[0] = samplerateconv;
-
-            ibuffer_order = true;
-            loopdirection = true;
-            noteOff_flag = false;
-
-            for (int i = 0; i < nrofchannels; i++)
-                Arrays.fill(ibuffer[i], sector_size, sector_size + pad2, 0);
-            ix[0] = pad;
-            eof = false;
-
-            ix[0] = sector_size + pad;
-            sector_pos = -1;
-            streampos = -sector_size;
-
-            nextBuffer();
-        }
-
-        public void setPitch(float pitch) {
-            /*
-            this.pitch = (float) Math.pow(2f,
-            (pitchcorrection + pitch) / 1200.0f)
-             * samplerateconv;
-             */
-            this.target_pitch = (float)Math.exp(
-                    (pitchcorrection + pitch) * (Math.log(2.0) / 1200.0))
-                * samplerateconv;
-
-            if (!started)
-                current_pitch[0] = this.target_pitch;
-        }
-
-        public void nextBuffer() throws IOException {
-            if (ix[0] < pad) {
-                if (markset) {
-                    // reset to target sector
-                    stream.reset();
-                    ix[0] += streampos - (sector_loopstart * sector_size);
-                    sector_pos = sector_loopstart;
-                    streampos = sector_pos * sector_size;
-
-                    // and go one sector backward
-                    ix[0] += sector_size;
-                    sector_pos -= 1;
-                    streampos -= sector_size;
-                    stream_eof = false;
-                }
-            }
-
-            if (ix[0] >= sector_size + pad) {
-                if (stream_eof) {
-                    eof = true;
-                    return;
-                }
-            }
-
-            if (ix[0] >= sector_size * 4 + pad) {
-                int skips = (int)((ix[0] - sector_size * 4 + pad) / sector_size);
-                ix[0] -= sector_size * skips;
-                sector_pos += skips;
-                streampos += sector_size * skips;
-                stream.skip(sector_size * skips);
-            }
-
-            while (ix[0] >= sector_size + pad) {
-                if (!markset) {
-                    if (sector_pos + 1 == sector_loopstart) {
-                        stream.mark(marklimit);
-                        markset = true;
-                    }
-                }
-                ix[0] -= sector_size;
-                sector_pos++;
-                streampos += sector_size;
-
-                for (int c = 0; c < nrofchannels; c++) {
-                    float[] cbuffer = ibuffer[c];
-                    for (int i = 0; i < pad2; i++)
-                        cbuffer[i] = cbuffer[i + sector_size];
-                }
-
-                int ret;
-                if (nrofchannels == 1)
-                    ret = stream.read(ibuffer[0], pad2, sector_size);
-                else {
-                    int slen = sector_size * nrofchannels;
-                    if (sbuffer == null || sbuffer.length < slen)
-                        sbuffer = new float[slen];
-                    int sret = stream.read(sbuffer, 0, slen);
-                    if (sret == -1)
-                        ret = -1;
-                    else {
-                        ret = sret / nrofchannels;
-                        for (int i = 0; i < nrofchannels; i++) {
-                            float[] buff = ibuffer[i];
-                            int ix = i;
-                            int ix_step = nrofchannels;
-                            int ox = pad2;
-                            for (int j = 0; j < ret; j++, ix += ix_step, ox++)
-                                buff[ox] = sbuffer[ix];
-                        }
-                    }
-
-                }
-
-                if (ret == -1) {
-                    ret = 0;
-                    stream_eof = true;
-                    for (int i = 0; i < nrofchannels; i++)
-                        Arrays.fill(ibuffer[i], pad2, pad2 + sector_size, 0f);
-                    return;
-                }
-                if (ret != sector_size) {
-                    for (int i = 0; i < nrofchannels; i++)
-                        Arrays.fill(ibuffer[i], pad2 + ret, pad2 + sector_size, 0f);
-                }
-
-                ibuffer_order = true;
-
-            }
-
-        }
-
-        public void reverseBuffers() {
-            ibuffer_order = !ibuffer_order;
-            for (int c = 0; c < nrofchannels; c++) {
-                float[] cbuff = ibuffer[c];
-                int len = cbuff.length - 1;
-                int len2 = cbuff.length / 2;
-                for (int i = 0; i < len2; i++) {
-                    float x = cbuff[i];
-                    cbuff[i] = cbuff[len - i];
-                    cbuff[len - i] = x;
-                }
-            }
-        }
-
-        public int read(float[][] buffer, int offset, int len)
-                throws IOException {
-
-            if (eof)
-                return -1;
-
-            if (noteOff_flag)
-                if ((loopmode & 2) != 0)
-                    if (loopdirection)
-                        loopmode = 0;
-
-
-            float pitchstep = (target_pitch - current_pitch[0]) / len;
-            float[] current_pitch = this.current_pitch;
-            started = true;
-
-            int[] ox = this.ox;
-            ox[0] = offset;
-            int ox_end = len + offset;
-
-            float ixend = sector_size + pad;
-            if (!loopdirection)
-                ixend = pad;
-            while (ox[0] != ox_end) {
-                nextBuffer();
-                if (!loopdirection) {
-                    // If we are in backward playing part of pingpong
-                    // or reverse loop
-
-                    if (streampos < (loopstart + pad)) {
-                        ixend = loopstart - streampos + pad2;
-                        if (ix[0] <= ixend) {
-                            if ((loopmode & 4) != 0) {
-                                // Ping pong loop, change loopdirection
-                                loopdirection = true;
-                                ixend = sector_size + pad;
-                                continue;
-                            }
-
-                            ix[0] += looplen;
-                            ixend = pad;
-                            continue;
-                        }
-                    }
-
-                    if (ibuffer_order != loopdirection)
-                        reverseBuffers();
-
-                    ix[0] = (sector_size + pad2) - ix[0];
-                    ixend = (sector_size + pad2) - ixend;
-                    ixend++;
-
-                    float bak_ix = ix[0];
-                    int bak_ox = ox[0];
-                    float bak_pitch = current_pitch[0];
-                    for (int i = 0; i < nrofchannels; i++) {
-                        if (buffer[i] != null) {
-                            ix[0] = bak_ix;
-                            ox[0] = bak_ox;
-                            current_pitch[0] = bak_pitch;
-                            interpolate(ibuffer[i], ix, ixend, current_pitch,
-                                    pitchstep, buffer[i], ox, ox_end);
-                        }
-                    }
-
-                    ix[0] = (sector_size + pad2) - ix[0];
-                    ixend--;
-                    ixend = (sector_size + pad2) - ixend;
-
-                    if (eof) {
-                        current_pitch[0] = this.target_pitch;
-                        return ox[0] - offset;
-                    }
-
-                    continue;
-                }
-                if (loopmode != 0) {
-                    if (streampos + sector_size > (looplen + loopstart + pad)) {
-                        ixend = loopstart + looplen - streampos + pad2;
-                        if (ix[0] >= ixend) {
-                            if ((loopmode & 4) != 0 || (loopmode & 8) != 0) {
-                                // Ping pong or revese loop, change loopdirection
-                                loopdirection = false;
-                                ixend = pad;
-                                continue;
-                            }
-                            ixend = sector_size + pad;
-                            ix[0] -= looplen;
-                            continue;
-                        }
-                    }
-                }
-
-                if (ibuffer_order != loopdirection)
-                    reverseBuffers();
-
-                float bak_ix = ix[0];
-                int bak_ox = ox[0];
-                float bak_pitch = current_pitch[0];
-                for (int i = 0; i < nrofchannels; i++) {
-                    if (buffer[i] != null) {
-                        ix[0] = bak_ix;
-                        ox[0] = bak_ox;
-                        current_pitch[0] = bak_pitch;
-                        interpolate(ibuffer[i], ix, ixend, current_pitch,
-                                pitchstep, buffer[i], ox, ox_end);
-                    }
-                }
-
-                if (eof) {
-                    current_pitch[0] = this.target_pitch;
-                    return ox[0] - offset;
-                }
-            }
-
-            current_pitch[0] = this.target_pitch;
-            return len;
-        }
-
-        public void close() throws IOException {
-            stream.close();
-        }
-    }
-
-    public abstract int getPadding();
-
-    public abstract void interpolate(float[] in, float[] in_offset,
-            float in_end, float[] pitch, float pitchstep, float[] out,
-            int[] out_offset, int out_end);
-
-    public final SoftResamplerStreamer openStreamer() {
-        return new ModelAbstractResamplerStream();
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/SoftAudioBuffer.java b/ojluni/src/main/java/com/sun/media/sound/SoftAudioBuffer.java
deleted file mode 100755
index 45b2d0f..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/SoftAudioBuffer.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, 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.media.sound;
-
-import java.util.Arrays;
-
-import javax.sound.sampled.AudioFormat;
-
-/**
- * This class is used to store audio buffer.
- *
- * @author Karl Helgason
- */
-public final class SoftAudioBuffer {
-
-    private int size;
-    private float[] buffer;
-    private boolean empty = true;
-    private AudioFormat format;
-    private AudioFloatConverter converter;
-    private byte[] converter_buffer;
-
-    public SoftAudioBuffer(int size, AudioFormat format) {
-        this.size = size;
-        this.format = format;
-        converter = AudioFloatConverter.getConverter(format);
-    }
-
-    public void swap(SoftAudioBuffer swap)
-    {
-        int bak_size = size;
-        float[] bak_buffer = buffer;
-        boolean bak_empty = empty;
-        AudioFormat bak_format = format;
-        AudioFloatConverter bak_converter = converter;
-        byte[] bak_converter_buffer = converter_buffer;
-
-        size = swap.size;
-        buffer = swap.buffer;
-        empty = swap.empty;
-        format = swap.format;
-        converter = swap.converter;
-        converter_buffer = swap.converter_buffer;
-
-        swap.size = bak_size;
-        swap.buffer = bak_buffer;
-        swap.empty = bak_empty;
-        swap.format = bak_format;
-        swap.converter = bak_converter;
-        swap.converter_buffer = bak_converter_buffer;
-    }
-
-    public AudioFormat getFormat() {
-        return format;
-    }
-
-    public int getSize() {
-        return size;
-    }
-
-    public void clear() {
-        if (!empty) {
-            Arrays.fill(buffer, 0);
-            empty = true;
-        }
-    }
-
-    public boolean isSilent() {
-        return empty;
-    }
-
-    public float[] array() {
-        empty = false;
-        if (buffer == null)
-            buffer = new float[size];
-        return buffer;
-    }
-
-    public void get(byte[] buffer, int channel) {
-
-        int framesize_pc = (format.getFrameSize() / format.getChannels());
-        int c_len = size * framesize_pc;
-        if (converter_buffer == null || converter_buffer.length < c_len)
-            converter_buffer = new byte[c_len];
-
-        if (format.getChannels() == 1) {
-            converter.toByteArray(array(), size, buffer);
-        } else {
-            converter.toByteArray(array(), size, converter_buffer);
-            if (channel >= format.getChannels())
-                return;
-            int z_stepover = format.getChannels() * framesize_pc;
-            int k_stepover = framesize_pc;
-            for (int j = 0; j < framesize_pc; j++) {
-                int k = j;
-                int z = channel * framesize_pc + j;
-                for (int i = 0; i < size; i++) {
-                    buffer[z] = converter_buffer[k];
-                    z += z_stepover;
-                    k += k_stepover;
-                }
-            }
-        }
-
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/SoftAudioProcessor.java b/ojluni/src/main/java/com/sun/media/sound/SoftAudioProcessor.java
deleted file mode 100755
index 6b6fdde..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/SoftAudioProcessor.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 2007, 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.media.sound;
-
-/**
- * Audio processor interface.
- *
- * @author Karl Helgason
- */
-public interface SoftAudioProcessor {
-
-    public void globalParameterControlChange(int[] slothpath, long param,
-            long value);
-
-    public void init(float samplerate, float controlrate);
-
-    public void setInput(int pin, SoftAudioBuffer input);
-
-    public void setOutput(int pin, SoftAudioBuffer output);
-
-    public void setMixMode(boolean mix);
-
-    public void processAudio();
-
-    public void processControlLogic();
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/SoftAudioPusher.java b/ojluni/src/main/java/com/sun/media/sound/SoftAudioPusher.java
deleted file mode 100755
index 1a07a23..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/SoftAudioPusher.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, 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.media.sound;
-
-import java.io.IOException;
-
-import javax.sound.sampled.AudioInputStream;
-import javax.sound.sampled.SourceDataLine;
-
-/**
- * This is a processor object that writes into SourceDataLine
- *
- * @author Karl Helgason
- */
-public final class SoftAudioPusher implements Runnable {
-
-    private volatile boolean active = false;
-    private SourceDataLine sourceDataLine = null;
-    private Thread audiothread;
-    private final AudioInputStream ais;
-    private final byte[] buffer;
-
-    public SoftAudioPusher(SourceDataLine sourceDataLine, AudioInputStream ais,
-            int workbuffersizer) {
-        this.ais = ais;
-        this.buffer = new byte[workbuffersizer];
-        this.sourceDataLine = sourceDataLine;
-    }
-
-    public synchronized void start() {
-        if (active)
-            return;
-        active = true;
-        audiothread = new Thread(this);
-        audiothread.setDaemon(true);
-        audiothread.setPriority(Thread.MAX_PRIORITY);
-        audiothread.start();
-    }
-
-    public synchronized void stop() {
-        if (!active)
-            return;
-        active = false;
-        try {
-            audiothread.join();
-        } catch (InterruptedException e) {
-            //e.printStackTrace();
-        }
-    }
-
-    public void run() {
-        byte[] buffer = SoftAudioPusher.this.buffer;
-        AudioInputStream ais = SoftAudioPusher.this.ais;
-        SourceDataLine sourceDataLine = SoftAudioPusher.this.sourceDataLine;
-
-        try {
-            while (active) {
-                // Read from audio source
-                int count = ais.read(buffer);
-                if(count < 0) break;
-                // Write byte buffer to source output
-                sourceDataLine.write(buffer, 0, count);
-            }
-        } catch (IOException e) {
-            active = false;
-            //e.printStackTrace();
-        }
-
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/SoftChannel.java b/ojluni/src/main/java/com/sun/media/sound/SoftChannel.java
deleted file mode 100755
index 667b9cc..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/SoftChannel.java
+++ /dev/null
@@ -1,1579 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, 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.media.sound;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import javax.sound.midi.MidiChannel;
-import javax.sound.midi.Patch;
-
-/**
- * Software Synthesizer MIDI channel class.
- *
- * @author Karl Helgason
- */
-public final class SoftChannel implements MidiChannel, ModelDirectedPlayer {
-
-    private static boolean[] dontResetControls = new boolean[128];
-    static {
-        for (int i = 0; i < dontResetControls.length; i++)
-            dontResetControls[i] = false;
-
-        dontResetControls[0] = true;   // Bank Select (MSB)
-        dontResetControls[32] = true;  // Bank Select (LSB)
-        dontResetControls[7] = true;   // Channel Volume (MSB)
-        dontResetControls[8] = true;   // Balance (MSB)
-        dontResetControls[10] = true;  // Pan (MSB)
-        dontResetControls[11] = true;  // Expression (MSB)
-        dontResetControls[91] = true;  // Effects 1 Depth (default: Reverb Send)
-        dontResetControls[92] = true;  // Effects 2 Depth (default: Tremolo Depth)
-        dontResetControls[93] = true;  // Effects 3 Depth (default: Chorus Send)
-        dontResetControls[94] = true;  // Effects 4 Depth (default: Celeste [Detune] Depth)
-        dontResetControls[95] = true;  // Effects 5 Depth (default: Phaser Depth)
-        dontResetControls[70] = true;  // Sound Controller 1 (default: Sound Variation)
-        dontResetControls[71] = true;  // Sound Controller 2 (default: Timbre / Harmonic Quality)
-        dontResetControls[72] = true;  // Sound Controller 3 (default: Release Time)
-        dontResetControls[73] = true;  // Sound Controller 4 (default: Attack Time)
-        dontResetControls[74] = true;  // Sound Controller 5 (default: Brightness)
-        dontResetControls[75] = true;  // Sound Controller 6 (GM2 default: Decay Time)
-        dontResetControls[76] = true;  // Sound Controller 7 (GM2 default: Vibrato Rate)
-        dontResetControls[77] = true;  // Sound Controller 8 (GM2 default: Vibrato Depth)
-        dontResetControls[78] = true;  // Sound Controller 9 (GM2 default: Vibrato Delay)
-        dontResetControls[79] = true;  // Sound Controller 10 (GM2 default: Undefined)
-        dontResetControls[120] = true; // All Sound Off
-        dontResetControls[121] = true; // Reset All Controllers
-        dontResetControls[122] = true; // Local Control On/Off
-        dontResetControls[123] = true; // All Notes Off
-        dontResetControls[124] = true; // Omni Mode Off
-        dontResetControls[125] = true; // Omni Mode On
-        dontResetControls[126] = true; // Poly Mode Off
-        dontResetControls[127] = true; // Poly Mode On
-
-        dontResetControls[6] = true;   // Data Entry (MSB)
-        dontResetControls[38] = true;  // Data Entry (LSB)
-        dontResetControls[96] = true;  // Data Increment
-        dontResetControls[97] = true;  // Data Decrement
-        dontResetControls[98] = true;  // Non-Registered Parameter Number (LSB)
-        dontResetControls[99] = true;  // Non-Registered Parameter Number(MSB)
-        dontResetControls[100] = true; // RPN = Null
-        dontResetControls[101] = true; // RPN = Null
-
-    }
-
-    private static final int RPN_NULL_VALUE = (127 << 7) + 127;
-    private int rpn_control = RPN_NULL_VALUE;
-    private int nrpn_control = RPN_NULL_VALUE;
-    double portamento_time = 1; // keyschanges per control buffer time
-    int[] portamento_lastnote = new int[128];
-    int portamento_lastnote_ix = 0;
-    private boolean portamento = false;
-    private boolean mono = false;
-    private boolean mute = false;
-    private boolean solo = false;
-    private boolean solomute = false;
-    private final Object control_mutex;
-    private int channel;
-    private SoftVoice[] voices;
-    private int bank;
-    private int program;
-    private SoftSynthesizer synthesizer;
-    private SoftMainMixer mainmixer;
-    private int[] polypressure = new int[128];
-    private int channelpressure = 0;
-    private int[] controller = new int[128];
-    private int pitchbend;
-    private double[] co_midi_pitch = new double[1];
-    private double[] co_midi_channel_pressure = new double[1];
-    SoftTuning tuning = new SoftTuning();
-    int tuning_bank = 0;
-    int tuning_program = 0;
-    SoftInstrument current_instrument = null;
-    ModelChannelMixer current_mixer = null;
-    ModelDirector current_director = null;
-
-    // Controller Destination Settings
-    int cds_control_number = -1;
-    ModelConnectionBlock[] cds_control_connections = null;
-    ModelConnectionBlock[] cds_channelpressure_connections = null;
-    ModelConnectionBlock[] cds_polypressure_connections = null;
-    boolean sustain = false;
-    boolean[][] keybasedcontroller_active = null;
-    double[][] keybasedcontroller_value = null;
-
-    private class MidiControlObject implements SoftControl {
-        double[] pitch = co_midi_pitch;
-        double[] channel_pressure = co_midi_channel_pressure;
-        double[] poly_pressure = new double[1];
-
-        public double[] get(int instance, String name) {
-            if (name == null)
-                return null;
-            if (name.equals("pitch"))
-                return pitch;
-            if (name.equals("channel_pressure"))
-                return channel_pressure;
-            if (name.equals("poly_pressure"))
-                return poly_pressure;
-            return null;
-        }
-    }
-
-    private SoftControl[] co_midi = new SoftControl[128];
-    {
-        for (int i = 0; i < co_midi.length; i++) {
-            co_midi[i] = new MidiControlObject();
-        }
-    }
-
-    private double[][] co_midi_cc_cc = new double[128][1];
-    private SoftControl co_midi_cc = new SoftControl() {
-        double[][] cc = co_midi_cc_cc;
-        public double[] get(int instance, String name) {
-            if (name == null)
-                return null;
-            return cc[Integer.parseInt(name)];
-        }
-    };
-    Map<Integer, int[]> co_midi_rpn_rpn_i = new HashMap<Integer, int[]>();
-    Map<Integer, double[]> co_midi_rpn_rpn = new HashMap<Integer, double[]>();
-    private SoftControl co_midi_rpn = new SoftControl() {
-        Map<Integer, double[]> rpn = co_midi_rpn_rpn;
-        public double[] get(int instance, String name) {
-            if (name == null)
-                return null;
-            int iname = Integer.parseInt(name);
-            double[] v = rpn.get(iname);
-            if (v == null) {
-                v = new double[1];
-                rpn.put(iname, v);
-            }
-            return v;
-        }
-    };
-    Map<Integer, int[]> co_midi_nrpn_nrpn_i = new HashMap<Integer, int[]>();
-    Map<Integer, double[]> co_midi_nrpn_nrpn = new HashMap<Integer, double[]>();
-    private SoftControl co_midi_nrpn = new SoftControl() {
-        Map<Integer, double[]> nrpn = co_midi_nrpn_nrpn;
-        public double[] get(int instance, String name) {
-            if (name == null)
-                return null;
-            int iname = Integer.parseInt(name);
-            double[] v = nrpn.get(iname);
-            if (v == null) {
-                v = new double[1];
-                nrpn.put(iname, v);
-            }
-            return v;
-        }
-    };
-
-    private static int restrict7Bit(int value)
-    {
-        if(value < 0) return 0;
-        if(value > 127) return 127;
-        return value;
-    }
-
-    private static int restrict14Bit(int value)
-    {
-        if(value < 0) return 0;
-        if(value > 16256) return 16256;
-        return value;
-    }
-
-    public SoftChannel(SoftSynthesizer synth, int channel) {
-        this.channel = channel;
-        this.voices = synth.getVoices();
-        this.synthesizer = synth;
-        this.mainmixer = synth.getMainMixer();
-        control_mutex = synth.control_mutex;
-        resetAllControllers(true);
-    }
-
-    private int findFreeVoice(int x) {
-        if(x == -1)
-        {
-            // x = -1 means that there where no available voice
-            // last time we called findFreeVoice
-            // and it hasn't changed because no audio has been
-            // rendered in the meantime.
-            // Therefore we have to return -1.
-            return -1;
-        }
-        for (int i = x; i < voices.length; i++)
-            if (!voices[i].active)
-                return i;
-
-        // No free voice was found, we must steal one
-
-        int vmode = synthesizer.getVoiceAllocationMode();
-        if (vmode == 1) {
-            // DLS Static Voice Allocation
-
-            //  * priority ( 10, 1-9, 11-16)
-            // Search for channel to steal from
-            int steal_channel = channel;
-            for (int j = 0; j < voices.length; j++) {
-                if (voices[j].stealer_channel == null) {
-                    if (steal_channel == 9) {
-                        steal_channel = voices[j].channel;
-                    } else {
-                        if (voices[j].channel != 9) {
-                            if (voices[j].channel > steal_channel)
-                                steal_channel = voices[j].channel;
-                        }
-                    }
-                }
-            }
-
-            int voiceNo = -1;
-
-            SoftVoice v = null;
-            // Search for oldest voice in off state on steal_channel
-            for (int j = 0; j < voices.length; j++) {
-                if (voices[j].channel == steal_channel) {
-                    if (voices[j].stealer_channel == null && !voices[j].on) {
-                        if (v == null) {
-                            v = voices[j];
-                            voiceNo = j;
-                        }
-                        if (voices[j].voiceID < v.voiceID) {
-                            v = voices[j];
-                            voiceNo = j;
-                        }
-                    }
-                }
-            }
-            // Search for oldest voice in on state on steal_channel
-            if (voiceNo == -1) {
-                for (int j = 0; j < voices.length; j++) {
-                    if (voices[j].channel == steal_channel) {
-                        if (voices[j].stealer_channel == null) {
-                            if (v == null) {
-                                v = voices[j];
-                                voiceNo = j;
-                            }
-                            if (voices[j].voiceID < v.voiceID) {
-                                v = voices[j];
-                                voiceNo = j;
-                            }
-                        }
-                    }
-                }
-            }
-
-            return voiceNo;
-
-        } else {
-            // Default Voice Allocation
-            //  * Find voice that is on
-            //    and Find voice which has lowest voiceID ( oldest voice)
-            //  * Or find voice that is off
-            //    and Find voice which has lowest voiceID ( oldest voice)
-
-            int voiceNo = -1;
-
-            SoftVoice v = null;
-            // Search for oldest voice in off state
-            for (int j = 0; j < voices.length; j++) {
-                if (voices[j].stealer_channel == null && !voices[j].on) {
-                    if (v == null) {
-                        v = voices[j];
-                        voiceNo = j;
-                    }
-                    if (voices[j].voiceID < v.voiceID) {
-                        v = voices[j];
-                        voiceNo = j;
-                    }
-                }
-            }
-            // Search for oldest voice in on state
-            if (voiceNo == -1) {
-
-                for (int j = 0; j < voices.length; j++) {
-                    if (voices[j].stealer_channel == null) {
-                        if (v == null) {
-                            v = voices[j];
-                            voiceNo = j;
-                        }
-                        if (voices[j].voiceID < v.voiceID) {
-                            v = voices[j];
-                            voiceNo = j;
-                        }
-                    }
-                }
-            }
-
-            return voiceNo;
-        }
-
-    }
-
-    void initVoice(SoftVoice voice, SoftPerformer p, int voiceID,
-            int noteNumber, int velocity, int delay, ModelConnectionBlock[] connectionBlocks,
-            ModelChannelMixer channelmixer, boolean releaseTriggered) {
-        if (voice.active) {
-            // Voice is active , we must steal the voice
-            voice.stealer_channel = this;
-            voice.stealer_performer = p;
-            voice.stealer_voiceID = voiceID;
-            voice.stealer_noteNumber = noteNumber;
-            voice.stealer_velocity = velocity;
-            voice.stealer_extendedConnectionBlocks = connectionBlocks;
-            voice.stealer_channelmixer = channelmixer;
-            voice.stealer_releaseTriggered = releaseTriggered;
-            for (int i = 0; i < voices.length; i++)
-                if (voices[i].active && voices[i].voiceID == voice.voiceID)
-                    voices[i].soundOff();
-            return;
-        }
-
-        voice.extendedConnectionBlocks = connectionBlocks;
-        voice.channelmixer = channelmixer;
-        voice.releaseTriggered = releaseTriggered;
-        voice.voiceID = voiceID;
-        voice.tuning = tuning;
-        voice.exclusiveClass = p.exclusiveClass;
-        voice.softchannel = this;
-        voice.channel = channel;
-        voice.bank = bank;
-        voice.program = program;
-        voice.instrument = current_instrument;
-        voice.performer = p;
-        voice.objects.clear();
-        voice.objects.put("midi", co_midi[noteNumber]);
-        voice.objects.put("midi_cc", co_midi_cc);
-        voice.objects.put("midi_rpn", co_midi_rpn);
-        voice.objects.put("midi_nrpn", co_midi_nrpn);
-        voice.noteOn(noteNumber, velocity, delay);
-        voice.setMute(mute);
-        voice.setSoloMute(solomute);
-        if (releaseTriggered)
-            return;
-        if (controller[84] != 0) {
-            voice.co_noteon_keynumber[0]
-                    = (tuning.getTuning(controller[84]) / 100.0)
-                    * (1f / 128f);
-            voice.portamento = true;
-            controlChange(84, 0);
-        } else if (portamento) {
-            if (mono) {
-                if (portamento_lastnote[0] != -1) {
-                    voice.co_noteon_keynumber[0]
-                            = (tuning.getTuning(portamento_lastnote[0]) / 100.0)
-                            * (1f / 128f);
-                    voice.portamento = true;
-                    controlChange(84, 0);
-                }
-                portamento_lastnote[0] = noteNumber;
-            } else {
-                if (portamento_lastnote_ix != 0) {
-                    portamento_lastnote_ix--;
-                    voice.co_noteon_keynumber[0]
-                            = (tuning.getTuning(
-                                    portamento_lastnote[portamento_lastnote_ix])
-                                / 100.0)
-                            * (1f / 128f);
-                    voice.portamento = true;
-                }
-            }
-        }
-    }
-
-    public void noteOn(int noteNumber, int velocity) {
-        noteOn(noteNumber, velocity, 0);
-    }
-
-    /* A special noteOn with delay parameter, which is used to
-     * start note within control buffers.
-     */
-    void noteOn(int noteNumber, int velocity, int delay) {
-        noteNumber = restrict7Bit(noteNumber);
-        velocity = restrict7Bit(velocity);
-        noteOn_internal(noteNumber, velocity, delay);
-        if (current_mixer != null)
-            current_mixer.noteOn(noteNumber, velocity);
-    }
-
-    private void noteOn_internal(int noteNumber, int velocity, int delay) {
-
-        if (velocity == 0) {
-            noteOff_internal(noteNumber, 64);
-            return;
-        }
-
-        synchronized (control_mutex) {
-            if (sustain) {
-                sustain = false;
-                for (int i = 0; i < voices.length; i++) {
-                    if ((voices[i].sustain || voices[i].on)
-                            && voices[i].channel == channel && voices[i].active
-                            && voices[i].note == noteNumber) {
-                        voices[i].sustain = false;
-                        voices[i].on = true;
-                        voices[i].noteOff(0);
-                    }
-                }
-                sustain = true;
-            }
-
-            mainmixer.activity();
-
-            if (mono) {
-                if (portamento) {
-                    boolean n_found = false;
-                    for (int i = 0; i < voices.length; i++) {
-                        if (voices[i].on && voices[i].channel == channel
-                                && voices[i].active
-                                && voices[i].releaseTriggered == false) {
-                            voices[i].portamento = true;
-                            voices[i].setNote(noteNumber);
-                            n_found = true;
-                        }
-                    }
-                    if (n_found) {
-                        portamento_lastnote[0] = noteNumber;
-                        return;
-                    }
-                }
-
-                if (controller[84] != 0) {
-                    boolean n_found = false;
-                    for (int i = 0; i < voices.length; i++) {
-                        if (voices[i].on && voices[i].channel == channel
-                                && voices[i].active
-                                && voices[i].note == controller[84]
-                                && voices[i].releaseTriggered == false) {
-                            voices[i].portamento = true;
-                            voices[i].setNote(noteNumber);
-                            n_found = true;
-                        }
-                    }
-                    controlChange(84, 0);
-                    if (n_found)
-                        return;
-                }
-            }
-
-            if (mono)
-                allNotesOff();
-
-            if (current_instrument == null) {
-                current_instrument
-                        = synthesizer.findInstrument(program, bank, channel);
-                if (current_instrument == null)
-                    return;
-                if (current_mixer != null)
-                    mainmixer.stopMixer(current_mixer);
-                current_mixer = current_instrument.getSourceInstrument()
-                        .getChannelMixer(this, synthesizer.getFormat());
-                if (current_mixer != null)
-                    mainmixer.registerMixer(current_mixer);
-                current_director = current_instrument.getDirector(this, this);
-                applyInstrumentCustomization();
-            }
-            prevVoiceID = synthesizer.voiceIDCounter++;
-            firstVoice = true;
-            voiceNo = 0;
-
-            int tunedKey = (int)(Math.round(tuning.getTuning(noteNumber)/100.0));
-            play_noteNumber = noteNumber;
-            play_velocity = velocity;
-            play_delay = delay;
-            play_releasetriggered = false;
-            lastVelocity[noteNumber] = velocity;
-            current_director.noteOn(tunedKey, velocity);
-
-            /*
-            SoftPerformer[] performers = current_instrument.getPerformers();
-            for (int i = 0; i < performers.length; i++) {
-                SoftPerformer p = performers[i];
-                if (p.keyFrom <= tunedKey && p.keyTo >= tunedKey) {
-                    if (p.velFrom <= velocity && p.velTo >= velocity) {
-                        if (firstVoice) {
-                            firstVoice = false;
-                            if (p.exclusiveClass != 0) {
-                                int x = p.exclusiveClass;
-                                for (int j = 0; j < voices.length; j++) {
-                                    if (voices[j].active
-                                            && voices[j].channel == channel
-                                            && voices[j].exclusiveClass == x) {
-                                        if (!(p.selfNonExclusive
-                                                && voices[j].note == noteNumber))
-                                            voices[j].shutdown();
-                                    }
-                                }
-                            }
-                        }
-                        voiceNo = findFreeVoice(voiceNo);
-                        if (voiceNo == -1)
-                            return;
-                        initVoice(voices[voiceNo], p, prevVoiceID, noteNumber,
-                                velocity);
-                    }
-                }
-            }
-            */
-        }
-    }
-
-    public void noteOff(int noteNumber, int velocity) {
-        noteNumber = restrict7Bit(noteNumber);
-        velocity = restrict7Bit(velocity);
-        noteOff_internal(noteNumber, velocity);
-
-        if (current_mixer != null)
-            current_mixer.noteOff(noteNumber, velocity);
-    }
-
-    private void noteOff_internal(int noteNumber, int velocity) {
-        synchronized (control_mutex) {
-
-            if (!mono) {
-                if (portamento) {
-                    if (portamento_lastnote_ix != 127) {
-                        portamento_lastnote[portamento_lastnote_ix] = noteNumber;
-                        portamento_lastnote_ix++;
-                    }
-                }
-            }
-
-            mainmixer.activity();
-            for (int i = 0; i < voices.length; i++) {
-                if (voices[i].on && voices[i].channel == channel
-                        && voices[i].note == noteNumber
-                        && voices[i].releaseTriggered == false) {
-                    voices[i].noteOff(velocity);
-                }
-                // We must also check stolen voices
-                if (voices[i].stealer_channel == this && voices[i].stealer_noteNumber == noteNumber) {
-                    SoftVoice v = voices[i];
-                    v.stealer_releaseTriggered = false;
-                    v.stealer_channel = null;
-                    v.stealer_performer = null;
-                    v.stealer_voiceID = -1;
-                    v.stealer_noteNumber = 0;
-                    v.stealer_velocity = 0;
-                    v.stealer_extendedConnectionBlocks = null;
-                    v.stealer_channelmixer = null;
-                }
-            }
-
-            // Try play back note-off triggered voices,
-
-            if (current_instrument == null) {
-                current_instrument
-                        = synthesizer.findInstrument(program, bank, channel);
-                if (current_instrument == null)
-                    return;
-                if (current_mixer != null)
-                    mainmixer.stopMixer(current_mixer);
-                current_mixer = current_instrument.getSourceInstrument()
-                        .getChannelMixer(this, synthesizer.getFormat());
-                if (current_mixer != null)
-                    mainmixer.registerMixer(current_mixer);
-                current_director = current_instrument.getDirector(this, this);
-                applyInstrumentCustomization();
-
-            }
-            prevVoiceID = synthesizer.voiceIDCounter++;
-            firstVoice = true;
-            voiceNo = 0;
-
-            int tunedKey = (int)(Math.round(tuning.getTuning(noteNumber)/100.0));
-            play_noteNumber = noteNumber;
-            play_velocity = lastVelocity[noteNumber];
-            play_releasetriggered = true;
-            play_delay = 0;
-            current_director.noteOff(tunedKey, velocity);
-
-        }
-    }
-    private int[] lastVelocity = new int[128];
-    private int prevVoiceID;
-    private boolean firstVoice = true;
-    private int voiceNo = 0;
-    private int play_noteNumber = 0;
-    private int play_velocity = 0;
-    private int play_delay = 0;
-    private boolean play_releasetriggered = false;
-
-    public void play(int performerIndex, ModelConnectionBlock[] connectionBlocks) {
-
-        int noteNumber = play_noteNumber;
-        int velocity = play_velocity;
-        int delay = play_delay;
-        boolean releasetriggered = play_releasetriggered;
-
-        SoftPerformer p = current_instrument.getPerformer(performerIndex);
-
-        if (firstVoice) {
-            firstVoice = false;
-            if (p.exclusiveClass != 0) {
-                int x = p.exclusiveClass;
-                for (int j = 0; j < voices.length; j++) {
-                    if (voices[j].active && voices[j].channel == channel
-                            && voices[j].exclusiveClass == x) {
-                        if (!(p.selfNonExclusive && voices[j].note == noteNumber))
-                            voices[j].shutdown();
-                    }
-                }
-            }
-        }
-
-        voiceNo = findFreeVoice(voiceNo);
-
-        if (voiceNo == -1)
-            return;
-
-        initVoice(voices[voiceNo], p, prevVoiceID, noteNumber, velocity, delay,
-                connectionBlocks, current_mixer, releasetriggered);
-    }
-
-    public void noteOff(int noteNumber) {
-        if(noteNumber < 0 || noteNumber > 127) return;
-        noteOff_internal(noteNumber, 64);
-    }
-
-    public void setPolyPressure(int noteNumber, int pressure) {
-        noteNumber = restrict7Bit(noteNumber);
-        pressure = restrict7Bit(pressure);
-
-        if (current_mixer != null)
-            current_mixer.setPolyPressure(noteNumber, pressure);
-
-        synchronized (control_mutex) {
-            mainmixer.activity();
-            co_midi[noteNumber].get(0, "poly_pressure")[0] = pressure*(1.0/128.0);
-            polypressure[noteNumber] = pressure;
-            for (int i = 0; i < voices.length; i++) {
-                if (voices[i].active && voices[i].note == noteNumber)
-                    voices[i].setPolyPressure(pressure);
-            }
-        }
-    }
-
-    public int getPolyPressure(int noteNumber) {
-        synchronized (control_mutex) {
-            return polypressure[noteNumber];
-        }
-    }
-
-    public void setChannelPressure(int pressure) {
-        pressure = restrict7Bit(pressure);
-        if (current_mixer != null)
-            current_mixer.setChannelPressure(pressure);
-        synchronized (control_mutex) {
-            mainmixer.activity();
-            co_midi_channel_pressure[0] = pressure * (1.0 / 128.0);
-            channelpressure = pressure;
-            for (int i = 0; i < voices.length; i++) {
-                if (voices[i].active)
-                    voices[i].setChannelPressure(pressure);
-            }
-        }
-    }
-
-    public int getChannelPressure() {
-        synchronized (control_mutex) {
-            return channelpressure;
-        }
-    }
-
-    void applyInstrumentCustomization() {
-        if (cds_control_connections == null
-                && cds_channelpressure_connections == null
-                && cds_polypressure_connections == null) {
-            return;
-        }
-
-        ModelInstrument src_instrument = current_instrument.getSourceInstrument();
-        ModelPerformer[] performers = src_instrument.getPerformers();
-        ModelPerformer[] new_performers = new ModelPerformer[performers.length];
-        for (int i = 0; i < new_performers.length; i++) {
-            ModelPerformer performer = performers[i];
-            ModelPerformer new_performer = new ModelPerformer();
-            new_performer.setName(performer.getName());
-            new_performer.setExclusiveClass(performer.getExclusiveClass());
-            new_performer.setKeyFrom(performer.getKeyFrom());
-            new_performer.setKeyTo(performer.getKeyTo());
-            new_performer.setVelFrom(performer.getVelFrom());
-            new_performer.setVelTo(performer.getVelTo());
-            new_performer.getOscillators().addAll(performer.getOscillators());
-            new_performer.getConnectionBlocks().addAll(
-                    performer.getConnectionBlocks());
-            new_performers[i] = new_performer;
-
-            List<ModelConnectionBlock> connblocks =
-                    new_performer.getConnectionBlocks();
-
-            if (cds_control_connections != null) {
-                String cc = Integer.toString(cds_control_number);
-                Iterator<ModelConnectionBlock> iter = connblocks.iterator();
-                while (iter.hasNext()) {
-                    ModelConnectionBlock conn = iter.next();
-                    ModelSource[] sources = conn.getSources();
-                    boolean removeok = false;
-                    if (sources != null) {
-                        for (int j = 0; j < sources.length; j++) {
-                            ModelSource src = sources[j];
-                            if ("midi_cc".equals(src.getIdentifier().getObject())
-                                    && cc.equals(src.getIdentifier().getVariable())) {
-                                removeok = true;
-                            }
-                        }
-                    }
-                    if (removeok)
-                        iter.remove();
-                }
-                for (int j = 0; j < cds_control_connections.length; j++)
-                    connblocks.add(cds_control_connections[j]);
-            }
-
-            if (cds_polypressure_connections != null) {
-                Iterator<ModelConnectionBlock> iter = connblocks.iterator();
-                while (iter.hasNext()) {
-                    ModelConnectionBlock conn = iter.next();
-                    ModelSource[] sources = conn.getSources();
-                    boolean removeok = false;
-                    if (sources != null) {
-                        for (int j = 0; j < sources.length; j++) {
-                            ModelSource src = sources[j];
-                            if ("midi".equals(src.getIdentifier().getObject())
-                                    && "poly_pressure".equals(
-                                        src.getIdentifier().getVariable())) {
-                                removeok = true;
-                            }
-                        }
-                    }
-                    if (removeok)
-                        iter.remove();
-                }
-                for (int j = 0; j < cds_polypressure_connections.length; j++)
-                    connblocks.add(cds_polypressure_connections[j]);
-            }
-
-
-            if (cds_channelpressure_connections != null) {
-                Iterator<ModelConnectionBlock> iter = connblocks.iterator();
-                while (iter.hasNext()) {
-                    ModelConnectionBlock conn = iter.next();
-                    ModelSource[] sources = conn.getSources();
-                    boolean removeok = false;
-                    if (sources != null) {
-                        for (int j = 0; j < sources.length; j++) {
-                            ModelIdentifier srcid = sources[j].getIdentifier();
-                            if ("midi".equals(srcid.getObject()) &&
-                                    "channel_pressure".equals(srcid.getVariable())) {
-                                removeok = true;
-                            }
-                        }
-                    }
-                    if (removeok)
-                        iter.remove();
-                }
-                for (int j = 0; j < cds_channelpressure_connections.length; j++)
-                    connblocks.add(cds_channelpressure_connections[j]);
-            }
-
-        }
-
-        current_instrument = new SoftInstrument(src_instrument, new_performers);
-
-    }
-
-    private ModelConnectionBlock[] createModelConnections(ModelIdentifier sid,
-            int[] destination, int[] range) {
-
-        /*
-        controlled parameter (pp)|range (rr)| Description             |Default
-        -------------------------|----------|-------------------------|-------
-        00 Pitch Control         | 28H..58H | -24..+24 semitones      | 40H
-        01 Filter Cutoff Control | 00H..7FH | -9600..+9450 cents      | 40H
-        02 Amplitude Control     | 00H..7FH | 0..(127/64)*100 percent | 40H
-        03 LFO Pitch Depth       | 00H..7FH | 0..600 cents            |  0
-        04 LFO Filter Depth      | 00H..7FH | 0..2400 cents           |  0
-        05 LFO Amplitude Depth   | 00H..7FH | 0..100 percent          |  0
-        */
-
-        List<ModelConnectionBlock> conns = new ArrayList<ModelConnectionBlock>();
-
-        for (int i = 0; i < destination.length; i++) {
-            int d = destination[i];
-            int r = range[i];
-            if (d == 0) {
-                double scale = (r - 64) * 100;
-                ModelConnectionBlock conn = new ModelConnectionBlock(
-                        new ModelSource(sid,
-                            ModelStandardTransform.DIRECTION_MIN2MAX,
-                            ModelStandardTransform.POLARITY_UNIPOLAR,
-                            ModelStandardTransform.TRANSFORM_LINEAR),
-                        scale,
-                        new ModelDestination(
-                            new ModelIdentifier("osc", "pitch")));
-                conns.add(conn);
-
-            }
-            if (d == 1) {
-                double scale = (r / 64.0 - 1.0) * 9600.0;
-                ModelConnectionBlock conn;
-                if (scale > 0) {
-                    conn = new ModelConnectionBlock(
-                            new ModelSource(sid,
-                                ModelStandardTransform.DIRECTION_MAX2MIN,
-                                ModelStandardTransform.POLARITY_UNIPOLAR,
-                                ModelStandardTransform.TRANSFORM_LINEAR),
-                            -scale,
-                            new ModelDestination(
-                                ModelDestination.DESTINATION_FILTER_FREQ));
-                } else {
-                    conn = new ModelConnectionBlock(
-                            new ModelSource(sid,
-                                ModelStandardTransform.DIRECTION_MIN2MAX,
-                                ModelStandardTransform.POLARITY_UNIPOLAR,
-                                ModelStandardTransform.TRANSFORM_LINEAR),
-                            scale,
-                            new ModelDestination(
-                                ModelDestination.DESTINATION_FILTER_FREQ));
-                }
-                conns.add(conn);
-            }
-            if (d == 2) {
-                final double scale = (r / 64.0);
-                ModelTransform mt = new ModelTransform() {
-                    double s = scale;
-                    public double transform(double value) {
-                        if (s < 1)
-                            value = s + (value * (1.0 - s));
-                        else if (s > 1)
-                            value = 1 + (value * (s - 1.0));
-                        else
-                            return 0;
-                        return -((5.0 / 12.0) / Math.log(10)) * Math.log(value);
-                    }
-                };
-
-                ModelConnectionBlock conn = new ModelConnectionBlock(
-                        new ModelSource(sid, mt), -960,
-                        new ModelDestination(ModelDestination.DESTINATION_GAIN));
-                conns.add(conn);
-
-            }
-            if (d == 3) {
-                double scale = (r / 64.0 - 1.0) * 9600.0;
-                ModelConnectionBlock conn = new ModelConnectionBlock(
-                        new ModelSource(ModelSource.SOURCE_LFO1,
-                            ModelStandardTransform.DIRECTION_MIN2MAX,
-                            ModelStandardTransform.POLARITY_BIPOLAR,
-                            ModelStandardTransform.TRANSFORM_LINEAR),
-                        new ModelSource(sid,
-                            ModelStandardTransform.DIRECTION_MIN2MAX,
-                            ModelStandardTransform.POLARITY_UNIPOLAR,
-                            ModelStandardTransform.TRANSFORM_LINEAR),
-                        scale,
-                        new ModelDestination(
-                            ModelDestination.DESTINATION_PITCH));
-                conns.add(conn);
-            }
-            if (d == 4) {
-                double scale = (r / 128.0) * 2400.0;
-                ModelConnectionBlock conn = new ModelConnectionBlock(
-                        new ModelSource(ModelSource.SOURCE_LFO1,
-                            ModelStandardTransform.DIRECTION_MIN2MAX,
-                            ModelStandardTransform.POLARITY_BIPOLAR,
-                            ModelStandardTransform.TRANSFORM_LINEAR),
-                        new ModelSource(sid,
-                            ModelStandardTransform.DIRECTION_MIN2MAX,
-                            ModelStandardTransform.POLARITY_UNIPOLAR,
-                            ModelStandardTransform.TRANSFORM_LINEAR),
-                        scale,
-                        new ModelDestination(
-                            ModelDestination.DESTINATION_FILTER_FREQ));
-                conns.add(conn);
-            }
-            if (d == 5) {
-                final double scale = (r / 127.0);
-
-                ModelTransform mt = new ModelTransform() {
-                    double s = scale;
-                    public double transform(double value) {
-                        return -((5.0 / 12.0) / Math.log(10))
-                                * Math.log(1 - value * s);
-                    }
-                };
-
-                ModelConnectionBlock conn = new ModelConnectionBlock(
-                        new ModelSource(ModelSource.SOURCE_LFO1,
-                            ModelStandardTransform.DIRECTION_MIN2MAX,
-                            ModelStandardTransform.POLARITY_UNIPOLAR,
-                            ModelStandardTransform.TRANSFORM_LINEAR),
-                        new ModelSource(sid, mt),
-                        -960,
-                        new ModelDestination(
-                            ModelDestination.DESTINATION_GAIN));
-                conns.add(conn);
-            }
-        }
-
-        return conns.toArray(new ModelConnectionBlock[conns.size()]);
-    }
-
-    public void mapPolyPressureToDestination(int[] destination, int[] range) {
-        current_instrument = null;
-        if (destination.length == 0) {
-            cds_polypressure_connections = null;
-            return;
-        }
-        cds_polypressure_connections
-                = createModelConnections(
-                    new ModelIdentifier("midi", "poly_pressure"),
-                    destination, range);
-    }
-
-    public void mapChannelPressureToDestination(int[] destination, int[] range) {
-        current_instrument = null;
-        if (destination.length == 0) {
-            cds_channelpressure_connections = null;
-            return;
-        }
-        cds_channelpressure_connections
-                = createModelConnections(
-                    new ModelIdentifier("midi", "channel_pressure"),
-                    destination, range);
-    }
-
-    public void mapControlToDestination(int control, int[] destination, int[] range) {
-
-        if (!((control >= 0x01 && control <= 0x1F)
-                || (control >= 0x40 && control <= 0x5F))) {
-            cds_control_connections = null;
-            return;
-        }
-
-        current_instrument = null;
-        cds_control_number = control;
-        if (destination.length == 0) {
-            cds_control_connections = null;
-            return;
-        }
-        cds_control_connections
-                = createModelConnections(
-                    new ModelIdentifier("midi_cc", Integer.toString(control)),
-                    destination, range);
-    }
-
-    public void controlChangePerNote(int noteNumber, int controller, int value) {
-
-/*
- CC# | nn   | Name                    | vv             | default    | description
------|------|-------------------------|----------------|------------|-------------------------------
-7    |07H   |Note Volume              |00H-40H-7FH     |40H         |0-100-(127/64)*100(%)(Relative)
-10   |0AH   |*Pan                     |00H-7FH absolute|Preset Value|Left-Center-Right (absolute)
-33-63|21-3FH|LSB for                  |01H-1FH         |            |
-71   |47H   |Timbre/Harmonic Intensity|00H-40H-7FH     |40H (???)   |
-72   |48H   |Release Time             |00H-40H-7FH     |40H (???)   |
-73   |49H   |Attack Time              |00H-40H-7FH     |40H (???)   |
-74   |4AH   |Brightness               |00H-40H-7FH     |40H (???)   |
-75   |4BH   |Decay Time               |00H-40H-7FH     |40H (???)   |
-76   |4CH   |Vibrato Rate             |00H-40H-7FH     |40H (???)   |
-77   |4DH   |Vibrato Depth            |00H-40H-7FH     |40H (???)   |
-78   |4EH   |Vibrato Delay            |00H-40H-7FH     |40H (???)   |
-91   |5BH   |*Reverb Send             |00H-7FH absolute|Preset Value|Left-Center-Right (absolute)
-93   |5DH   |*Chorus Send             |00H-7FH absolute|Preset Value|Left-Center-Right (absolute)
-120  |78H   |**Fine Tuning            |00H-40H-7FH     |40H (???)   |
-121  |79H   |**Coarse Tuning          |00H-40H-7FH     |40H (???)   |
-*/
-
-        if (keybasedcontroller_active == null) {
-            keybasedcontroller_active = new boolean[128][];
-            keybasedcontroller_value = new double[128][];
-        }
-        if (keybasedcontroller_active[noteNumber] == null) {
-            keybasedcontroller_active[noteNumber] = new boolean[128];
-            Arrays.fill(keybasedcontroller_active[noteNumber], false);
-            keybasedcontroller_value[noteNumber] = new double[128];
-            Arrays.fill(keybasedcontroller_value[noteNumber], 0);
-        }
-
-        if (value == -1) {
-            keybasedcontroller_active[noteNumber][controller] = false;
-        } else {
-            keybasedcontroller_active[noteNumber][controller] = true;
-            keybasedcontroller_value[noteNumber][controller] = value / 128.0;
-        }
-
-        if (controller < 120) {
-            for (int i = 0; i < voices.length; i++)
-                if (voices[i].active)
-                    voices[i].controlChange(controller, -1);
-        } else if (controller == 120) {
-            for (int i = 0; i < voices.length; i++)
-                if (voices[i].active)
-                    voices[i].rpnChange(1, -1);
-        } else if (controller == 121) {
-            for (int i = 0; i < voices.length; i++)
-                if (voices[i].active)
-                    voices[i].rpnChange(2, -1);
-        }
-
-    }
-
-    public int getControlPerNote(int noteNumber, int controller) {
-        if (keybasedcontroller_active == null)
-            return -1;
-        if (keybasedcontroller_active[noteNumber] == null)
-            return -1;
-        if (!keybasedcontroller_active[noteNumber][controller])
-            return -1;
-        return (int)(keybasedcontroller_value[noteNumber][controller] * 128);
-    }
-
-    public void controlChange(int controller, int value) {
-        controller = restrict7Bit(controller);
-        value = restrict7Bit(value);
-        if (current_mixer != null)
-            current_mixer.controlChange(controller, value);
-
-        synchronized (control_mutex) {
-            switch (controller) {
-            /*
-            Map<String, int[]>co_midi_rpn_rpn_i = new HashMap<String, int[]>();
-            Map<String, double[]>co_midi_rpn_rpn = new HashMap<String, double[]>();
-            Map<String, int[]>co_midi_nrpn_nrpn_i = new HashMap<String, int[]>();
-            Map<String, double[]>co_midi_nrpn_nrpn = new HashMap<String, double[]>();
-             */
-
-            case 5:
-                // This produce asin-like curve
-                // as described in General Midi Level 2 Specification, page 6
-                double x = -Math.asin((value / 128.0) * 2 - 1) / Math.PI + 0.5;
-                x = Math.pow(100000.0, x) / 100.0;  // x is now cent/msec
-                // Convert x from cent/msec to key/controlbuffertime
-                x = x / 100.0;                      // x is now keys/msec
-                x = x * 1000.0;                     // x is now keys/sec
-                x = x / synthesizer.getControlRate(); // x is now keys/controlbuffertime
-                portamento_time = x;
-                break;
-            case 6:
-            case 38:
-            case 96:
-            case 97:
-                int val = 0;
-                if (nrpn_control != RPN_NULL_VALUE) {
-                    int[] val_i = co_midi_nrpn_nrpn_i.get(nrpn_control);
-                    if (val_i != null)
-                        val = val_i[0];
-                }
-                if (rpn_control != RPN_NULL_VALUE) {
-                    int[] val_i = co_midi_rpn_rpn_i.get(rpn_control);
-                    if (val_i != null)
-                        val = val_i[0];
-                }
-
-                if (controller == 6)
-                    val = (val & 127) + (value << 7);
-                else if (controller == 38)
-                    val = (val & (127 << 7)) + value;
-                else if (controller == 96 || controller == 97) {
-                    int step = 1;
-                    if (rpn_control == 2 || rpn_control == 3 || rpn_control == 4)
-                        step = 128;
-                    if (controller == 96)
-                        val += step;
-                    if (controller == 97)
-                        val -= step;
-                }
-
-                if (nrpn_control != RPN_NULL_VALUE)
-                    nrpnChange(nrpn_control, val);
-                if (rpn_control != RPN_NULL_VALUE)
-                    rpnChange(rpn_control, val);
-
-                break;
-            case 64: // Hold1 (Damper) (cc#64)
-                boolean on = value >= 64;
-                if (sustain != on) {
-                    sustain = on;
-                    if (!on) {
-                        for (int i = 0; i < voices.length; i++) {
-                            if (voices[i].active && voices[i].sustain &&
-                                    voices[i].channel == channel) {
-                                voices[i].sustain = false;
-                                if (!voices[i].on) {
-                                    voices[i].on = true;
-                                    voices[i].noteOff(0);
-                                }
-                            }
-                        }
-                    } else {
-                        for (int i = 0; i < voices.length; i++)
-                            if (voices[i].active && voices[i].channel == channel)
-                                voices[i].redamp();
-                    }
-                }
-                break;
-            case 65:
-                //allNotesOff();
-                portamento = value >= 64;
-                portamento_lastnote[0] = -1;
-                /*
-                for (int i = 0; i < portamento_lastnote.length; i++)
-                    portamento_lastnote[i] = -1;
-                 */
-                portamento_lastnote_ix = 0;
-                break;
-            case 66: // Sostenuto (cc#66)
-                on = value >= 64;
-                if (on) {
-                    for (int i = 0; i < voices.length; i++) {
-                        if (voices[i].active && voices[i].on &&
-                                voices[i].channel == channel) {
-                            voices[i].sostenuto = true;
-                        }
-                    }
-                }
-                if (!on) {
-                    for (int i = 0; i < voices.length; i++) {
-                        if (voices[i].active && voices[i].sostenuto &&
-                                voices[i].channel == channel) {
-                            voices[i].sostenuto = false;
-                            if (!voices[i].on) {
-                                voices[i].on = true;
-                                voices[i].noteOff(0);
-                            }
-                        }
-                    }
-                }
-                break;
-            case 98:
-                nrpn_control = (nrpn_control & (127 << 7)) + value;
-                rpn_control = RPN_NULL_VALUE;
-                break;
-            case 99:
-                nrpn_control = (nrpn_control & 127) + (value << 7);
-                rpn_control = RPN_NULL_VALUE;
-                break;
-            case 100:
-                rpn_control = (rpn_control & (127 << 7)) + value;
-                nrpn_control = RPN_NULL_VALUE;
-                break;
-            case 101:
-                rpn_control = (rpn_control & 127) + (value << 7);
-                nrpn_control = RPN_NULL_VALUE;
-                break;
-            case 120:
-                allSoundOff();
-                break;
-            case 121:
-                resetAllControllers(value == 127);
-                break;
-            case 122:
-                localControl(value >= 64);
-                break;
-            case 123:
-                allNotesOff();
-                break;
-            case 124:
-                setOmni(false);
-                break;
-            case 125:
-                setOmni(true);
-                break;
-            case 126:
-                if (value == 1)
-                    setMono(true);
-                break;
-            case 127:
-                setMono(false);
-                break;
-
-            default:
-                break;
-            }
-
-            co_midi_cc_cc[controller][0] = value * (1.0 / 128.0);
-
-            if (controller == 0x00) {
-                bank = /*(bank & 127) +*/ (value << 7);
-                return;
-            }
-
-            if (controller == 0x20) {
-                bank = (bank & (127 << 7)) + value;
-                return;
-            }
-
-            this.controller[controller] = value;
-            if(controller < 0x20)
-                this.controller[controller + 0x20] = 0;
-
-            for (int i = 0; i < voices.length; i++)
-                if (voices[i].active)
-                    voices[i].controlChange(controller, value);
-
-        }
-    }
-
-    public int getController(int controller) {
-        synchronized (control_mutex) {
-            // Should only return lower 7 bits,
-            // even when controller is "boosted" higher.
-            return this.controller[controller] & 127;
-        }
-    }
-
-    public void tuningChange(int program) {
-        tuningChange(0, program);
-    }
-
-    public void tuningChange(int bank, int program) {
-        synchronized (control_mutex) {
-            tuning = synthesizer.getTuning(new Patch(bank, program));
-        }
-    }
-
-    public void programChange(int program) {
-        programChange(bank, program);
-    }
-
-    public void programChange(int bank, int program) {
-        bank = restrict14Bit(bank);
-        program = restrict7Bit(program);
-        synchronized (control_mutex) {
-            mainmixer.activity();
-            if(this.bank != bank || this.program != program)
-            {
-                this.bank = bank;
-                this.program = program;
-                current_instrument = null;
-            }
-        }
-    }
-
-    public int getProgram() {
-        synchronized (control_mutex) {
-            return program;
-        }
-    }
-
-    public void setPitchBend(int bend) {
-        bend = restrict14Bit(bend);
-        if (current_mixer != null)
-            current_mixer.setPitchBend(bend);
-        synchronized (control_mutex) {
-            mainmixer.activity();
-            co_midi_pitch[0] = bend * (1.0 / 16384.0);
-            pitchbend = bend;
-            for (int i = 0; i < voices.length; i++)
-                if (voices[i].active)
-                    voices[i].setPitchBend(bend);
-        }
-    }
-
-    public int getPitchBend() {
-        synchronized (control_mutex) {
-            return pitchbend;
-        }
-    }
-
-    public void nrpnChange(int controller, int value) {
-
-        /*
-        System.out.println("(" + channel + ").nrpnChange("
-                + Integer.toHexString(controller >> 7)
-                + " " + Integer.toHexString(controller & 127)
-                + ", " + Integer.toHexString(value >> 7)
-                + " " + Integer.toHexString(value & 127) + ")");
-         */
-
-        if (synthesizer.getGeneralMidiMode() == 0) {
-            if (controller == (0x01 << 7) + (0x08)) // Vibrato Rate
-                controlChange(76, value >> 7);
-            if (controller == (0x01 << 7) + (0x09)) // Vibrato Depth
-                controlChange(77, value >> 7);
-            if (controller == (0x01 << 7) + (0x0A)) // Vibrato Delay
-                controlChange(78, value >> 7);
-            if (controller == (0x01 << 7) + (0x20)) // Brightness
-                controlChange(74, value >> 7);
-            if (controller == (0x01 << 7) + (0x21)) // Filter Resonance
-                controlChange(71, value >> 7);
-            if (controller == (0x01 << 7) + (0x63)) // Attack Time
-                controlChange(73, value >> 7);
-            if (controller == (0x01 << 7) + (0x64)) // Decay Time
-                controlChange(75, value >> 7);
-            if (controller == (0x01 << 7) + (0x66)) // Release Time
-                controlChange(72, value >> 7);
-
-            if (controller >> 7 == 0x18) // Pitch coarse
-                controlChangePerNote(controller % 128, 120, value >> 7);
-            if (controller >> 7 == 0x1A) // Volume
-                controlChangePerNote(controller % 128, 7, value >> 7);
-            if (controller >> 7 == 0x1C) // Panpot
-                controlChangePerNote(controller % 128, 10, value >> 7);
-            if (controller >> 7 == 0x1D) // Reverb
-                controlChangePerNote(controller % 128, 91, value >> 7);
-            if (controller >> 7 == 0x1E) // Chorus
-                controlChangePerNote(controller % 128, 93, value >> 7);
-        }
-
-        int[] val_i = co_midi_nrpn_nrpn_i.get(controller);
-        double[] val_d = co_midi_nrpn_nrpn.get(controller);
-        if (val_i == null) {
-            val_i = new int[1];
-            co_midi_nrpn_nrpn_i.put(controller, val_i);
-        }
-        if (val_d == null) {
-            val_d = new double[1];
-            co_midi_nrpn_nrpn.put(controller, val_d);
-        }
-        val_i[0] = value;
-        val_d[0] = val_i[0] * (1.0 / 16384.0);
-
-        for (int i = 0; i < voices.length; i++)
-            if (voices[i].active)
-                voices[i].nrpnChange(controller, val_i[0]);
-
-    }
-
-    public void rpnChange(int controller, int value) {
-
-        /*
-        System.out.println("(" + channel + ").rpnChange("
-                + Integer.toHexString(controller >> 7)
-                + " " + Integer.toHexString(controller & 127)
-                + ", " + Integer.toHexString(value >> 7)
-                + " " + Integer.toHexString(value & 127) + ")");
-         */
-
-        if (controller == 3) {
-            tuning_program = (value >> 7) & 127;
-            tuningChange(tuning_bank, tuning_program);
-        }
-        if (controller == 4) {
-            tuning_bank = (value >> 7) & 127;
-        }
-
-        int[] val_i = co_midi_rpn_rpn_i.get(controller);
-        double[] val_d = co_midi_rpn_rpn.get(controller);
-        if (val_i == null) {
-            val_i = new int[1];
-            co_midi_rpn_rpn_i.put(controller, val_i);
-        }
-        if (val_d == null) {
-            val_d = new double[1];
-            co_midi_rpn_rpn.put(controller, val_d);
-        }
-        val_i[0] = value;
-        val_d[0] = val_i[0] * (1.0 / 16384.0);
-
-        for (int i = 0; i < voices.length; i++)
-            if (voices[i].active)
-                voices[i].rpnChange(controller, val_i[0]);
-    }
-
-    public void resetAllControllers() {
-        resetAllControllers(false);
-    }
-
-    public void resetAllControllers(boolean allControls) {
-        synchronized (control_mutex) {
-            mainmixer.activity();
-
-            for (int i = 0; i < 128; i++) {
-                setPolyPressure(i, 0);
-            }
-            setChannelPressure(0);
-            setPitchBend(8192);
-            for (int i = 0; i < 128; i++) {
-                if (!dontResetControls[i])
-                    controlChange(i, 0);
-            }
-
-            controlChange(71, 64); // Filter Resonance
-            controlChange(72, 64); // Release Time
-            controlChange(73, 64); // Attack Time
-            controlChange(74, 64); // Brightness
-            controlChange(75, 64); // Decay Time
-            controlChange(76, 64); // Vibrato Rate
-            controlChange(77, 64); // Vibrato Depth
-            controlChange(78, 64); // Vibrato Delay
-
-            controlChange(8, 64); // Balance
-            controlChange(11, 127); // Expression
-            controlChange(98, 127); // NRPN Null
-            controlChange(99, 127); // NRPN Null
-            controlChange(100, 127); // RPN = Null
-            controlChange(101, 127); // RPN = Null
-
-            // see DLS 2.1 (Power-on Default Values)
-            if (allControls) {
-
-                keybasedcontroller_active = null;
-                keybasedcontroller_value = null;
-
-                controlChange(7, 100); // Volume
-                controlChange(10, 64); // Pan
-                controlChange(91, 40); // Reverb
-
-                for (int controller : co_midi_rpn_rpn.keySet()) {
-                    // don't reset tuning settings
-                    if (controller != 3 && controller != 4)
-                        rpnChange(controller, 0);
-                }
-                for (int controller : co_midi_nrpn_nrpn.keySet())
-                    nrpnChange(controller, 0);
-                rpnChange(0, 2 << 7);   // Bitch Bend sensitivity
-                rpnChange(1, 64 << 7);  // Channel fine tunning
-                rpnChange(2, 64 << 7);  // Channel Coarse Tuning
-                rpnChange(5, 64);       // Modulation Depth, +/- 50 cent
-
-                tuning_bank = 0;
-                tuning_program = 0;
-                tuning = new SoftTuning();
-
-            }
-
-        }
-    }
-
-    public void allNotesOff() {
-        if (current_mixer != null)
-            current_mixer.allNotesOff();
-        synchronized (control_mutex) {
-            for (int i = 0; i < voices.length; i++)
-                if (voices[i].on && voices[i].channel == channel
-                        && voices[i].releaseTriggered == false) {
-                    voices[i].noteOff(0);
-                }
-        }
-    }
-
-    public void allSoundOff() {
-        if (current_mixer != null)
-            current_mixer.allSoundOff();
-        synchronized (control_mutex) {
-            for (int i = 0; i < voices.length; i++)
-                if (voices[i].on && voices[i].channel == channel)
-                    voices[i].soundOff();
-        }
-    }
-
-    public boolean localControl(boolean on) {
-        return false;
-    }
-
-    public void setMono(boolean on) {
-        if (current_mixer != null)
-            current_mixer.setMono(on);
-        synchronized (control_mutex) {
-            allNotesOff();
-            mono = on;
-        }
-    }
-
-    public boolean getMono() {
-        synchronized (control_mutex) {
-            return mono;
-        }
-    }
-
-    public void setOmni(boolean on) {
-        if (current_mixer != null)
-            current_mixer.setOmni(on);
-        allNotesOff();
-    // Omni is not supported by GM2
-    }
-
-    public boolean getOmni() {
-        return false;
-    }
-
-    public void setMute(boolean mute) {
-        if (current_mixer != null)
-            current_mixer.setMute(mute);
-        synchronized (control_mutex) {
-            this.mute = mute;
-            for (int i = 0; i < voices.length; i++)
-                if (voices[i].active && voices[i].channel == channel)
-                    voices[i].setMute(mute);
-        }
-    }
-
-    public boolean getMute() {
-        synchronized (control_mutex) {
-            return mute;
-        }
-    }
-
-    public void setSolo(boolean soloState) {
-        if (current_mixer != null)
-            current_mixer.setSolo(soloState);
-
-        synchronized (control_mutex) {
-            this.solo = soloState;
-
-            boolean soloinuse = false;
-            for (SoftChannel c : synthesizer.channels) {
-                if (c.solo) {
-                    soloinuse = true;
-                    break;
-                }
-            }
-
-            if (!soloinuse) {
-                for (SoftChannel c : synthesizer.channels)
-                    c.setSoloMute(false);
-                return;
-            }
-
-            for (SoftChannel c : synthesizer.channels)
-                c.setSoloMute(!c.solo);
-
-        }
-
-    }
-
-    private void setSoloMute(boolean mute) {
-        synchronized (control_mutex) {
-            if (solomute == mute)
-                return;
-            this.solomute = mute;
-            for (int i = 0; i < voices.length; i++)
-                if (voices[i].active && voices[i].channel == channel)
-                    voices[i].setSoloMute(solomute);
-        }
-    }
-
-    public boolean getSolo() {
-        synchronized (control_mutex) {
-            return solo;
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/SoftChannelProxy.java b/ojluni/src/main/java/com/sun/media/sound/SoftChannelProxy.java
deleted file mode 100755
index d5d8726..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/SoftChannelProxy.java
+++ /dev/null
@@ -1,202 +0,0 @@
-/*
- * Copyright (c) 2008, 2013, 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.media.sound;
-
-import javax.sound.midi.MidiChannel;
-
-/**
- * A MidiChannel proxy object used for external access to synthesizer internal
- * channel objects.
- *
- * @author Karl Helgason
- */
-public final class SoftChannelProxy implements MidiChannel {
-
-    private MidiChannel channel = null;
-
-    public MidiChannel getChannel() {
-        return channel;
-    }
-
-    public void setChannel(MidiChannel channel) {
-        this.channel = channel;
-    }
-
-    public void allNotesOff() {
-        if (channel == null)
-            return;
-        channel.allNotesOff();
-    }
-
-    public void allSoundOff() {
-        if (channel == null)
-            return;
-        channel.allSoundOff();
-    }
-
-    public void controlChange(int controller, int value) {
-        if (channel == null)
-            return;
-        channel.controlChange(controller, value);
-    }
-
-    public int getChannelPressure() {
-        if (channel == null)
-            return 0;
-        return channel.getChannelPressure();
-    }
-
-    public int getController(int controller) {
-        if (channel == null)
-            return 0;
-        return channel.getController(controller);
-    }
-
-    public boolean getMono() {
-        if (channel == null)
-            return false;
-        return channel.getMono();
-    }
-
-    public boolean getMute() {
-        if (channel == null)
-            return false;
-        return channel.getMute();
-    }
-
-    public boolean getOmni() {
-        if (channel == null)
-            return false;
-        return channel.getOmni();
-    }
-
-    public int getPitchBend() {
-        if (channel == null)
-            return 8192;
-        return channel.getPitchBend();
-    }
-
-    public int getPolyPressure(int noteNumber) {
-        if (channel == null)
-            return 0;
-        return channel.getPolyPressure(noteNumber);
-    }
-
-    public int getProgram() {
-        if (channel == null)
-            return 0;
-        return channel.getProgram();
-    }
-
-    public boolean getSolo() {
-        if (channel == null)
-            return false;
-        return channel.getSolo();
-    }
-
-    public boolean localControl(boolean on) {
-        if (channel == null)
-            return false;
-        return channel.localControl(on);
-    }
-
-    public void noteOff(int noteNumber) {
-        if (channel == null)
-            return;
-        channel.noteOff(noteNumber);
-    }
-
-    public void noteOff(int noteNumber, int velocity) {
-        if (channel == null)
-            return;
-        channel.noteOff(noteNumber, velocity);
-    }
-
-    public void noteOn(int noteNumber, int velocity) {
-        if (channel == null)
-            return;
-        channel.noteOn(noteNumber, velocity);
-    }
-
-    public void programChange(int program) {
-        if (channel == null)
-            return;
-        channel.programChange(program);
-    }
-
-    public void programChange(int bank, int program) {
-        if (channel == null)
-            return;
-        channel.programChange(bank, program);
-    }
-
-    public void resetAllControllers() {
-        if (channel == null)
-            return;
-        channel.resetAllControllers();
-    }
-
-    public void setChannelPressure(int pressure) {
-        if (channel == null)
-            return;
-        channel.setChannelPressure(pressure);
-    }
-
-    public void setMono(boolean on) {
-        if (channel == null)
-            return;
-        channel.setMono(on);
-    }
-
-    public void setMute(boolean mute) {
-        if (channel == null)
-            return;
-        channel.setMute(mute);
-    }
-
-    public void setOmni(boolean on) {
-        if (channel == null)
-            return;
-        channel.setOmni(on);
-    }
-
-    public void setPitchBend(int bend) {
-        if (channel == null)
-            return;
-        channel.setPitchBend(bend);
-    }
-
-    public void setPolyPressure(int noteNumber, int pressure) {
-        if (channel == null)
-            return;
-        channel.setPolyPressure(noteNumber, pressure);
-    }
-
-    public void setSolo(boolean soloState) {
-        if (channel == null)
-            return;
-        channel.setSolo(soloState);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/SoftChorus.java b/ojluni/src/main/java/com/sun/media/sound/SoftChorus.java
deleted file mode 100755
index 81b0e82..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/SoftChorus.java
+++ /dev/null
@@ -1,337 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, 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.media.sound;
-
-import java.util.Arrays;
-
-/**
- * A chorus effect made using LFO and variable delay. One for each channel
- * (left,right), with different starting phase for stereo effect.
- *
- * @author Karl Helgason
- */
-public final class SoftChorus implements SoftAudioProcessor {
-
-    private static class VariableDelay {
-
-        private final float[] delaybuffer;
-        private int rovepos = 0;
-        private float gain = 1;
-        private float rgain = 0;
-        private float delay = 0;
-        private float lastdelay = 0;
-        private float feedback = 0;
-
-        VariableDelay(int maxbuffersize) {
-            delaybuffer = new float[maxbuffersize];
-        }
-
-        public void setDelay(float delay) {
-            this.delay = delay;
-        }
-
-        public void setFeedBack(float feedback) {
-            this.feedback = feedback;
-        }
-
-        public void setGain(float gain) {
-            this.gain = gain;
-        }
-
-        public void setReverbSendGain(float rgain) {
-            this.rgain = rgain;
-        }
-
-        public void processMix(float[] in, float[] out, float[] rout) {
-            float gain = this.gain;
-            float delay = this.delay;
-            float feedback = this.feedback;
-
-            float[] delaybuffer = this.delaybuffer;
-            int len = in.length;
-            float delaydelta = (delay - lastdelay) / len;
-            int rnlen = delaybuffer.length;
-            int rovepos = this.rovepos;
-
-            if (rout == null)
-                for (int i = 0; i < len; i++) {
-                    float r = rovepos - (lastdelay + 2) + rnlen;
-                    int ri = (int) r;
-                    float s = r - ri;
-                    float a = delaybuffer[ri % rnlen];
-                    float b = delaybuffer[(ri + 1) % rnlen];
-                    float o = a * (1 - s) + b * (s);
-                    out[i] += o * gain;
-                    delaybuffer[rovepos] = in[i] + o * feedback;
-                    rovepos = (rovepos + 1) % rnlen;
-                    lastdelay += delaydelta;
-                }
-            else
-                for (int i = 0; i < len; i++) {
-                    float r = rovepos - (lastdelay + 2) + rnlen;
-                    int ri = (int) r;
-                    float s = r - ri;
-                    float a = delaybuffer[ri % rnlen];
-                    float b = delaybuffer[(ri + 1) % rnlen];
-                    float o = a * (1 - s) + b * (s);
-                    out[i] += o * gain;
-                    rout[i] += o * rgain;
-                    delaybuffer[rovepos] = in[i] + o * feedback;
-                    rovepos = (rovepos + 1) % rnlen;
-                    lastdelay += delaydelta;
-                }
-            this.rovepos = rovepos;
-            lastdelay = delay;
-        }
-
-        public void processReplace(float[] in, float[] out, float[] rout) {
-            Arrays.fill(out, 0);
-            Arrays.fill(rout, 0);
-            processMix(in, out, rout);
-        }
-    }
-
-    private static class LFODelay {
-
-        private double phase = 1;
-        private double phase_step = 0;
-        private double depth = 0;
-        private VariableDelay vdelay;
-        private final double samplerate;
-        private final double controlrate;
-
-        LFODelay(double samplerate, double controlrate) {
-            this.samplerate = samplerate;
-            this.controlrate = controlrate;
-            // vdelay = new VariableDelay((int)(samplerate*4));
-            vdelay = new VariableDelay((int) ((this.depth + 10) * 2));
-
-        }
-
-        public void setDepth(double depth) {
-            this.depth = depth * samplerate;
-            vdelay = new VariableDelay((int) ((this.depth + 10) * 2));
-        }
-
-        public void setRate(double rate) {
-            double g = (Math.PI * 2) * (rate / controlrate);
-            phase_step = g;
-        }
-
-        public void setPhase(double phase) {
-            this.phase = phase;
-        }
-
-        public void setFeedBack(float feedback) {
-            vdelay.setFeedBack(feedback);
-        }
-
-        public void setGain(float gain) {
-            vdelay.setGain(gain);
-        }
-
-        public void setReverbSendGain(float rgain) {
-            vdelay.setReverbSendGain(rgain);
-        }
-
-        public void processMix(float[] in, float[] out, float[] rout) {
-            phase += phase_step;
-            while(phase > (Math.PI * 2)) phase -= (Math.PI * 2);
-            vdelay.setDelay((float) (depth * 0.5 * (Math.cos(phase) + 2)));
-            vdelay.processMix(in, out, rout);
-        }
-
-        public void processReplace(float[] in, float[] out, float[] rout) {
-            phase += phase_step;
-            while(phase > (Math.PI * 2)) phase -= (Math.PI * 2);
-            vdelay.setDelay((float) (depth * 0.5 * (Math.cos(phase) + 2)));
-            vdelay.processReplace(in, out, rout);
-
-        }
-    }
-    private boolean mix = true;
-    private SoftAudioBuffer inputA;
-    private SoftAudioBuffer left;
-    private SoftAudioBuffer right;
-    private SoftAudioBuffer reverb;
-    private LFODelay vdelay1L;
-    private LFODelay vdelay1R;
-    private float rgain = 0;
-    private boolean dirty = true;
-    private double dirty_vdelay1L_rate;
-    private double dirty_vdelay1R_rate;
-    private double dirty_vdelay1L_depth;
-    private double dirty_vdelay1R_depth;
-    private float dirty_vdelay1L_feedback;
-    private float dirty_vdelay1R_feedback;
-    private float dirty_vdelay1L_reverbsendgain;
-    private float dirty_vdelay1R_reverbsendgain;
-    private float controlrate;
-
-    public void init(float samplerate, float controlrate) {
-        this.controlrate = controlrate;
-        vdelay1L = new LFODelay(samplerate, controlrate);
-        vdelay1R = new LFODelay(samplerate, controlrate);
-        vdelay1L.setGain(1.0f); // %
-        vdelay1R.setGain(1.0f); // %
-        vdelay1L.setPhase(0.5 * Math.PI);
-        vdelay1R.setPhase(0);
-
-        globalParameterControlChange(new int[]{0x01 * 128 + 0x02}, 0, 2);
-    }
-
-    public void globalParameterControlChange(int[] slothpath, long param,
-            long value) {
-        if (slothpath.length == 1) {
-            if (slothpath[0] == 0x01 * 128 + 0x02) {
-                if (param == 0) { // Chorus Type
-                    switch ((int)value) {
-                    case 0: // Chorus 1 0 (0%) 3 (0.4Hz) 5 (1.9ms) 0 (0%)
-                        globalParameterControlChange(slothpath, 3, 0);
-                        globalParameterControlChange(slothpath, 1, 3);
-                        globalParameterControlChange(slothpath, 2, 5);
-                        globalParameterControlChange(slothpath, 4, 0);
-                        break;
-                    case 1: // Chorus 2 5 (4%) 9 (1.1Hz) 19 (6.3ms) 0 (0%)
-                        globalParameterControlChange(slothpath, 3, 5);
-                        globalParameterControlChange(slothpath, 1, 9);
-                        globalParameterControlChange(slothpath, 2, 19);
-                        globalParameterControlChange(slothpath, 4, 0);
-                        break;
-                    case 2: // Chorus 3 8 (6%) 3 (0.4Hz) 19 (6.3ms) 0 (0%)
-                        globalParameterControlChange(slothpath, 3, 8);
-                        globalParameterControlChange(slothpath, 1, 3);
-                        globalParameterControlChange(slothpath, 2, 19);
-                        globalParameterControlChange(slothpath, 4, 0);
-                        break;
-                    case 3: // Chorus 4 16 (12%) 9 (1.1Hz) 16 (5.3ms) 0 (0%)
-                        globalParameterControlChange(slothpath, 3, 16);
-                        globalParameterControlChange(slothpath, 1, 9);
-                        globalParameterControlChange(slothpath, 2, 16);
-                        globalParameterControlChange(slothpath, 4, 0);
-                        break;
-                    case 4: // FB Chorus 64 (49%) 2 (0.2Hz) 24 (7.8ms) 0 (0%)
-                        globalParameterControlChange(slothpath, 3, 64);
-                        globalParameterControlChange(slothpath, 1, 2);
-                        globalParameterControlChange(slothpath, 2, 24);
-                        globalParameterControlChange(slothpath, 4, 0);
-                        break;
-                    case 5: // Flanger 112 (86%) 1 (0.1Hz) 5 (1.9ms) 0 (0%)
-                        globalParameterControlChange(slothpath, 3, 112);
-                        globalParameterControlChange(slothpath, 1, 1);
-                        globalParameterControlChange(slothpath, 2, 5);
-                        globalParameterControlChange(slothpath, 4, 0);
-                        break;
-                    default:
-                        break;
-                    }
-                } else if (param == 1) { // Mod Rate
-                    dirty_vdelay1L_rate = (value * 0.122);
-                    dirty_vdelay1R_rate = (value * 0.122);
-                    dirty = true;
-                } else if (param == 2) { // Mod Depth
-                    dirty_vdelay1L_depth = ((value + 1) / 3200.0);
-                    dirty_vdelay1R_depth = ((value + 1) / 3200.0);
-                    dirty = true;
-                } else if (param == 3) { // Feedback
-                    dirty_vdelay1L_feedback = (value * 0.00763f);
-                    dirty_vdelay1R_feedback = (value * 0.00763f);
-                    dirty = true;
-                }
-                if (param == 4) { // Send to Reverb
-                    rgain = value * 0.00787f;
-                    dirty_vdelay1L_reverbsendgain = (value * 0.00787f);
-                    dirty_vdelay1R_reverbsendgain = (value * 0.00787f);
-                    dirty = true;
-                }
-
-            }
-        }
-    }
-
-    public void processControlLogic() {
-        if (dirty) {
-            dirty = false;
-            vdelay1L.setRate(dirty_vdelay1L_rate);
-            vdelay1R.setRate(dirty_vdelay1R_rate);
-            vdelay1L.setDepth(dirty_vdelay1L_depth);
-            vdelay1R.setDepth(dirty_vdelay1R_depth);
-            vdelay1L.setFeedBack(dirty_vdelay1L_feedback);
-            vdelay1R.setFeedBack(dirty_vdelay1R_feedback);
-            vdelay1L.setReverbSendGain(dirty_vdelay1L_reverbsendgain);
-            vdelay1R.setReverbSendGain(dirty_vdelay1R_reverbsendgain);
-        }
-    }
-    double silentcounter = 1000;
-
-    public void processAudio() {
-
-        if (inputA.isSilent()) {
-            silentcounter += 1 / controlrate;
-
-            if (silentcounter > 1) {
-                if (!mix) {
-                    left.clear();
-                    right.clear();
-                }
-                return;
-            }
-        } else
-            silentcounter = 0;
-
-        float[] inputA = this.inputA.array();
-        float[] left = this.left.array();
-        float[] right = this.right == null ? null : this.right.array();
-        float[] reverb = rgain != 0 ? this.reverb.array() : null;
-
-        if (mix) {
-            vdelay1L.processMix(inputA, left, reverb);
-            if (right != null)
-                vdelay1R.processMix(inputA, right, reverb);
-        } else {
-            vdelay1L.processReplace(inputA, left, reverb);
-            if (right != null)
-                vdelay1R.processReplace(inputA, right, reverb);
-        }
-    }
-
-    public void setInput(int pin, SoftAudioBuffer input) {
-        if (pin == 0)
-            inputA = input;
-    }
-
-    public void setMixMode(boolean mix) {
-        this.mix = mix;
-    }
-
-    public void setOutput(int pin, SoftAudioBuffer output) {
-        if (pin == 0)
-            left = output;
-        if (pin == 1)
-            right = output;
-        if (pin == 2)
-            reverb = output;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/SoftControl.java b/ojluni/src/main/java/com/sun/media/sound/SoftControl.java
deleted file mode 100755
index 85b3d27..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/SoftControl.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (c) 2007, 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.media.sound;
-
-/**
- * <code>SoftControl</code> are the basic controls
- * used for control-rate processing.
- *
- * @author Karl Helgason
- */
-public interface SoftControl {
-
-    public double[] get(int instance, String name);
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/SoftCubicResampler.java b/ojluni/src/main/java/com/sun/media/sound/SoftCubicResampler.java
deleted file mode 100755
index 4eeb817..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/SoftCubicResampler.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, 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.media.sound;
-
-/**
- * A resampler that uses third-order (cubic) interpolation.
- *
- * @author Karl Helgason
- */
-public final class SoftCubicResampler extends SoftAbstractResampler {
-
-    public int getPadding() {
-        return 3;
-    }
-
-    public void interpolate(float[] in, float[] in_offset, float in_end,
-            float[] startpitch, float pitchstep, float[] out, int[] out_offset,
-            int out_end) {
-        float pitch = startpitch[0];
-        float ix = in_offset[0];
-        int ox = out_offset[0];
-        float ix_end = in_end;
-        int ox_end = out_end;
-        if (pitchstep == 0) {
-            while (ix < ix_end && ox < ox_end) {
-                int iix = (int) ix;
-                float fix = ix - iix;
-                float y0 = in[iix - 1];
-                float y1 = in[iix];
-                float y2 = in[iix + 1];
-                float y3 = in[iix + 2];
-                float a0 = y3 - y2 + y1 - y0;
-                float a1 = y0 - y1 - a0;
-                float a2 = y2 - y0;
-                float a3 = y1;
-                //float fix2 = fix * fix;
-                //out[ox++] = (a0 * fix + a1) * fix2 + (a2 * fix + a3);
-                out[ox++] = ((a0 * fix + a1) * fix + a2) * fix + a3;
-                ix += pitch;
-            }
-        } else {
-            while (ix < ix_end && ox < ox_end) {
-                int iix = (int) ix;
-                float fix = ix - iix;
-                float y0 = in[iix - 1];
-                float y1 = in[iix];
-                float y2 = in[iix + 1];
-                float y3 = in[iix + 2];
-                float a0 = y3 - y2 + y1 - y0;
-                float a1 = y0 - y1 - a0;
-                float a2 = y2 - y0;
-                float a3 = y1;
-                //float fix2 = fix * fix;
-                //out[ox++] = (a0 * fix + a1) * fix2 + (a2 * fix + a3);
-                out[ox++] = ((a0 * fix + a1) * fix + a2) * fix + a3;
-                ix += pitch;
-                pitch += pitchstep;
-            }
-        }
-        in_offset[0] = ix;
-        out_offset[0] = ox;
-        startpitch[0] = pitch;
-
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/SoftEnvelopeGenerator.java b/ojluni/src/main/java/com/sun/media/sound/SoftEnvelopeGenerator.java
deleted file mode 100755
index 7214ec0..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/SoftEnvelopeGenerator.java
+++ /dev/null
@@ -1,298 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, 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.media.sound;
-
-/**
- * AHDSR control signal envelope generator.
- *
- * @author Karl Helgason
- */
-public final class SoftEnvelopeGenerator implements SoftProcess {
-
-    public final static int EG_OFF = 0;
-    public final static int EG_DELAY = 1;
-    public final static int EG_ATTACK = 2;
-    public final static int EG_HOLD = 3;
-    public final static int EG_DECAY = 4;
-    public final static int EG_SUSTAIN = 5;
-    public final static int EG_RELEASE = 6;
-    public final static int EG_SHUTDOWN = 7;
-    public final static int EG_END = 8;
-    int max_count = 10;
-    int used_count = 0;
-    private final int[] stage = new int[max_count];
-    private final int[] stage_ix = new int[max_count];
-    private final double[] stage_v = new double[max_count];
-    private final int[] stage_count = new int[max_count];
-    private final double[][] on = new double[max_count][1];
-    private final double[][] active = new double[max_count][1];
-    private final double[][] out = new double[max_count][1];
-    private final double[][] delay = new double[max_count][1];
-    private final double[][] attack = new double[max_count][1];
-    private final double[][] hold = new double[max_count][1];
-    private final double[][] decay = new double[max_count][1];
-    private final double[][] sustain = new double[max_count][1];
-    private final double[][] release = new double[max_count][1];
-    private final double[][] shutdown = new double[max_count][1];
-    private final double[][] release2 = new double[max_count][1];
-    private final double[][] attack2 = new double[max_count][1];
-    private final double[][] decay2 = new double[max_count][1];
-    private double control_time = 0;
-
-    public void reset() {
-        for (int i = 0; i < used_count; i++) {
-            stage[i] = 0;
-            on[i][0] = 0;
-            out[i][0] = 0;
-            delay[i][0] = 0;
-            attack[i][0] = 0;
-            hold[i][0] = 0;
-            decay[i][0] = 0;
-            sustain[i][0] = 0;
-            release[i][0] = 0;
-            shutdown[i][0] = 0;
-            attack2[i][0] = 0;
-            decay2[i][0] = 0;
-            release2[i][0] = 0;
-        }
-        used_count = 0;
-    }
-
-    public void init(SoftSynthesizer synth) {
-        control_time = 1.0 / synth.getControlRate();
-        processControlLogic();
-    }
-
-    public double[] get(int instance, String name) {
-        if (instance >= used_count)
-            used_count = instance + 1;
-        if (name == null)
-            return out[instance];
-        if (name.equals("on"))
-            return on[instance];
-        if (name.equals("active"))
-            return active[instance];
-        if (name.equals("delay"))
-            return delay[instance];
-        if (name.equals("attack"))
-            return attack[instance];
-        if (name.equals("hold"))
-            return hold[instance];
-        if (name.equals("decay"))
-            return decay[instance];
-        if (name.equals("sustain"))
-            return sustain[instance];
-        if (name.equals("release"))
-            return release[instance];
-        if (name.equals("shutdown"))
-            return shutdown[instance];
-        if (name.equals("attack2"))
-            return attack2[instance];
-        if (name.equals("decay2"))
-            return decay2[instance];
-        if (name.equals("release2"))
-            return release2[instance];
-
-        return null;
-    }
-
-    public void processControlLogic() {
-        for (int i = 0; i < used_count; i++) {
-
-            if (stage[i] == EG_END)
-                continue;
-
-            if ((stage[i] > EG_OFF) && (stage[i] < EG_RELEASE)) {
-                if (on[i][0] < 0.5) {
-                    if (on[i][0] < -0.5) {
-                        stage_count[i] = (int)(Math.pow(2,
-                                this.shutdown[i][0] / 1200.0) / control_time);
-                        if (stage_count[i] < 0)
-                            stage_count[i] = 0;
-                        stage_v[i] = out[i][0];
-                        stage_ix[i] = 0;
-                        stage[i] = EG_SHUTDOWN;
-                    } else {
-                        if ((release2[i][0] < 0.000001) && release[i][0] < 0
-                                && Double.isInfinite(release[i][0])) {
-                            out[i][0] = 0;
-                            active[i][0] = 0;
-                            stage[i] = EG_END;
-                            continue;
-                        }
-
-                        stage_count[i] = (int)(Math.pow(2,
-                                this.release[i][0] / 1200.0) / control_time);
-                        stage_count[i]
-                                += (int)(this.release2[i][0]/(control_time * 1000));
-                        if (stage_count[i] < 0)
-                            stage_count[i] = 0;
-                        // stage_v[i] = out[i][0];
-                        stage_ix[i] = 0;
-
-                        double m = 1 - out[i][0];
-                        stage_ix[i] = (int)(stage_count[i] * m);
-
-                        stage[i] = EG_RELEASE;
-                    }
-                }
-            }
-
-            switch (stage[i]) {
-            case EG_OFF:
-                active[i][0] = 1;
-                if (on[i][0] < 0.5)
-                    break;
-                stage[i] = EG_DELAY;
-                stage_ix[i] = (int)(Math.pow(2,
-                        this.delay[i][0] / 1200.0) / control_time);
-                if (stage_ix[i] < 0)
-                    stage_ix[i] = 0;
-            case EG_DELAY:
-                if (stage_ix[i] == 0) {
-                    double attack = this.attack[i][0];
-                    double attack2 = this.attack2[i][0];
-
-                    if (attack2 < 0.000001
-                            && (attack < 0 && Double.isInfinite(attack))) {
-                        out[i][0] = 1;
-                        stage[i] = EG_HOLD;
-                        stage_count[i] = (int)(Math.pow(2,
-                                this.hold[i][0] / 1200.0) / control_time);
-                        stage_ix[i] = 0;
-                    } else {
-                        stage[i] = EG_ATTACK;
-                        stage_count[i] = (int)(Math.pow(2,
-                                attack / 1200.0) / control_time);
-                        stage_count[i] += (int)(attack2 / (control_time * 1000));
-                        if (stage_count[i] < 0)
-                            stage_count[i] = 0;
-                        stage_ix[i] = 0;
-                    }
-                } else
-                    stage_ix[i]--;
-                break;
-            case EG_ATTACK:
-                stage_ix[i]++;
-                if (stage_ix[i] >= stage_count[i]) {
-                    out[i][0] = 1;
-                    stage[i] = EG_HOLD;
-                } else {
-                    // CONVEX attack
-                    double a = ((double)stage_ix[i]) / ((double)stage_count[i]);
-                    a = 1 + ((40.0 / 96.0) / Math.log(10)) * Math.log(a);
-                    if (a < 0)
-                        a = 0;
-                    else if (a > 1)
-                        a = 1;
-                    out[i][0] = a;
-                }
-                break;
-            case EG_HOLD:
-                stage_ix[i]++;
-                if (stage_ix[i] >= stage_count[i]) {
-                    stage[i] = EG_DECAY;
-                    stage_count[i] = (int)(Math.pow(2,
-                            this.decay[i][0] / 1200.0) / control_time);
-                    stage_count[i] += (int)(this.decay2[i][0]/(control_time*1000));
-                    if (stage_count[i] < 0)
-                        stage_count[i] = 0;
-                    stage_ix[i] = 0;
-                }
-                break;
-            case EG_DECAY:
-                stage_ix[i]++;
-                double sustain = this.sustain[i][0] * (1.0 / 1000.0);
-                if (stage_ix[i] >= stage_count[i]) {
-                    out[i][0] = sustain;
-                    stage[i] = EG_SUSTAIN;
-                    if (sustain < 0.001) {
-                        out[i][0] = 0;
-                        active[i][0] = 0;
-                        stage[i] = EG_END;
-                    }
-                } else {
-                    double m = ((double)stage_ix[i]) / ((double)stage_count[i]);
-                    out[i][0] = (1 - m) + sustain * m;
-                }
-                break;
-            case EG_SUSTAIN:
-                break;
-            case EG_RELEASE:
-                stage_ix[i]++;
-                if (stage_ix[i] >= stage_count[i]) {
-                    out[i][0] = 0;
-                    active[i][0] = 0;
-                    stage[i] = EG_END;
-                } else {
-                    double m = ((double)stage_ix[i]) / ((double)stage_count[i]);
-                    out[i][0] = (1 - m); // *stage_v[i];
-
-                    if (on[i][0] < -0.5) {
-                        stage_count[i] = (int)(Math.pow(2,
-                                this.shutdown[i][0] / 1200.0) / control_time);
-                        if (stage_count[i] < 0)
-                            stage_count[i] = 0;
-                        stage_v[i] = out[i][0];
-                        stage_ix[i] = 0;
-                        stage[i] = EG_SHUTDOWN;
-                    }
-
-                    // re-damping
-                    if (on[i][0] > 0.5) {
-                        sustain = this.sustain[i][0] * (1.0 / 1000.0);
-                        if (out[i][0] > sustain) {
-                            stage[i] = EG_DECAY;
-                            stage_count[i] = (int)(Math.pow(2,
-                                    this.decay[i][0] / 1200.0) / control_time);
-                            stage_count[i] +=
-                                    (int)(this.decay2[i][0]/(control_time*1000));
-                            if (stage_count[i] < 0)
-                                stage_count[i] = 0;
-                            m = (out[i][0] - 1) / (sustain - 1);
-                            stage_ix[i] = (int) (stage_count[i] * m);
-                        }
-                    }
-
-                }
-                break;
-            case EG_SHUTDOWN:
-                stage_ix[i]++;
-                if (stage_ix[i] >= stage_count[i]) {
-                    out[i][0] = 0;
-                    active[i][0] = 0;
-                    stage[i] = EG_END;
-                } else {
-                    double m = ((double)stage_ix[i]) / ((double)stage_count[i]);
-                    out[i][0] = (1 - m) * stage_v[i];
-                }
-                break;
-            default:
-                break;
-            }
-        }
-
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/SoftFilter.java b/ojluni/src/main/java/com/sun/media/sound/SoftFilter.java
deleted file mode 100755
index 187fa20..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/SoftFilter.java
+++ /dev/null
@@ -1,616 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, 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.media.sound;
-
-/**
- * Infinite impulse response (IIR) filter class.
- *
- * The filters where implemented and adapted using algorithms from musicdsp.org
- * archive: 1-RC and C filter, Simple 2-pole LP LP and HP filter, biquad,
- * tweaked butterworth RBJ Audio-EQ-Cookbook, EQ filter kookbook
- *
- * @author Karl Helgason
- */
-public final class SoftFilter {
-
-    public final static int FILTERTYPE_LP6 = 0x00;
-    public final static int FILTERTYPE_LP12 = 0x01;
-    public final static int FILTERTYPE_HP12 = 0x11;
-    public final static int FILTERTYPE_BP12 = 0x21;
-    public final static int FILTERTYPE_NP12 = 0x31;
-    public final static int FILTERTYPE_LP24 = 0x03;
-    public final static int FILTERTYPE_HP24 = 0x13;
-
-    //
-    // 0x0 = 1st-order, 6 dB/oct
-    // 0x1 = 2nd-order, 12 dB/oct
-    // 0x2 = 3rd-order, 18 dB/oct
-    // 0x3 = 4th-order, 24 db/oct
-    //
-    // 0x00 = LP, Low Pass Filter
-    // 0x10 = HP, High Pass Filter
-    // 0x20 = BP, Band Pass Filter
-    // 0x30 = NP, Notch or Band Elimination Filter
-    //
-    private int filtertype = FILTERTYPE_LP6;
-    private final float samplerate;
-    private float x1;
-    private float x2;
-    private float y1;
-    private float y2;
-    private float xx1;
-    private float xx2;
-    private float yy1;
-    private float yy2;
-    private float a0;
-    private float a1;
-    private float a2;
-    private float b1;
-    private float b2;
-    private float q;
-    private float gain = 1;
-    private float wet = 0;
-    private float last_wet = 0;
-    private float last_a0;
-    private float last_a1;
-    private float last_a2;
-    private float last_b1;
-    private float last_b2;
-    private float last_q;
-    private float last_gain;
-    private boolean last_set = false;
-    private double cutoff = 44100;
-    private double resonancedB = 0;
-    private boolean dirty = true;
-
-    public SoftFilter(float samplerate) {
-        this.samplerate = samplerate;
-        dirty = true;
-    }
-
-    public void setFrequency(double cent) {
-        if (cutoff == cent)
-            return;
-        cutoff = cent;
-        dirty = true;
-    }
-
-    public void setResonance(double db) {
-        if (resonancedB == db)
-            return;
-        resonancedB = db;
-        dirty = true;
-    }
-
-    public void reset() {
-        dirty = true;
-        last_set = false;
-        x1 = 0;
-        x2 = 0;
-        y1 = 0;
-        y2 = 0;
-        xx1 = 0;
-        xx2 = 0;
-        yy1 = 0;
-        yy2 = 0;
-        wet = 0.0f;
-        gain = 1.0f;
-        a0 = 0;
-        a1 = 0;
-        a2 = 0;
-        b1 = 0;
-        b2 = 0;
-    }
-
-    public void setFilterType(int filtertype) {
-        this.filtertype = filtertype;
-    }
-
-    public void processAudio(SoftAudioBuffer sbuffer) {
-        if (filtertype == FILTERTYPE_LP6)
-            filter1(sbuffer);
-        if (filtertype == FILTERTYPE_LP12)
-            filter2(sbuffer);
-        if (filtertype == FILTERTYPE_HP12)
-            filter2(sbuffer);
-        if (filtertype == FILTERTYPE_BP12)
-            filter2(sbuffer);
-        if (filtertype == FILTERTYPE_NP12)
-            filter2(sbuffer);
-        if (filtertype == FILTERTYPE_LP24)
-            filter4(sbuffer);
-        if (filtertype == FILTERTYPE_HP24)
-            filter4(sbuffer);
-    }
-
-    public void filter4(SoftAudioBuffer sbuffer) {
-
-        float[] buffer = sbuffer.array();
-
-        if (dirty) {
-            filter2calc();
-            dirty = false;
-        }
-        if (!last_set) {
-            last_a0 = a0;
-            last_a1 = a1;
-            last_a2 = a2;
-            last_b1 = b1;
-            last_b2 = b2;
-            last_gain = gain;
-            last_wet = wet;
-            last_set = true;
-        }
-
-        if (wet > 0 || last_wet > 0) {
-
-            int len = buffer.length;
-            float a0 = this.last_a0;
-            float a1 = this.last_a1;
-            float a2 = this.last_a2;
-            float b1 = this.last_b1;
-            float b2 = this.last_b2;
-            float gain = this.last_gain;
-            float wet = this.last_wet;
-            float a0_delta = (this.a0 - this.last_a0) / len;
-            float a1_delta = (this.a1 - this.last_a1) / len;
-            float a2_delta = (this.a2 - this.last_a2) / len;
-            float b1_delta = (this.b1 - this.last_b1) / len;
-            float b2_delta = (this.b2 - this.last_b2) / len;
-            float gain_delta = (this.gain - this.last_gain) / len;
-            float wet_delta = (this.wet - this.last_wet) / len;
-            float x1 = this.x1;
-            float x2 = this.x2;
-            float y1 = this.y1;
-            float y2 = this.y2;
-            float xx1 = this.xx1;
-            float xx2 = this.xx2;
-            float yy1 = this.yy1;
-            float yy2 = this.yy2;
-
-            if (wet_delta != 0) {
-                for (int i = 0; i < len; i++) {
-                    a0 += a0_delta;
-                    a1 += a1_delta;
-                    a2 += a2_delta;
-                    b1 += b1_delta;
-                    b2 += b2_delta;
-                    gain += gain_delta;
-                    wet += wet_delta;
-                    float x = buffer[i];
-                    float y = (a0*x + a1*x1 + a2*x2 - b1*y1 - b2*y2);
-                    float xx = (y * gain) * wet + (x) * (1 - wet);
-                    x2 = x1;
-                    x1 = x;
-                    y2 = y1;
-                    y1 = y;
-                    float yy = (a0*xx + a1*xx1 + a2*xx2 - b1*yy1 - b2*yy2);
-                    buffer[i] = (yy * gain) * wet + (xx) * (1 - wet);
-                    xx2 = xx1;
-                    xx1 = xx;
-                    yy2 = yy1;
-                    yy1 = yy;
-                }
-            } else if (a0_delta == 0 && a1_delta == 0 && a2_delta == 0
-                    && b1_delta == 0 && b2_delta == 0) {
-                for (int i = 0; i < len; i++) {
-                    float x = buffer[i];
-                    float y = (a0*x + a1*x1 + a2*x2 - b1*y1 - b2*y2);
-                    float xx = (y * gain) * wet + (x) * (1 - wet);
-                    x2 = x1;
-                    x1 = x;
-                    y2 = y1;
-                    y1 = y;
-                    float yy = (a0*xx + a1*xx1 + a2*xx2 - b1*yy1 - b2*yy2);
-                    buffer[i] = (yy * gain) * wet + (xx) * (1 - wet);
-                    xx2 = xx1;
-                    xx1 = xx;
-                    yy2 = yy1;
-                    yy1 = yy;
-                }
-            } else {
-                for (int i = 0; i < len; i++) {
-                    a0 += a0_delta;
-                    a1 += a1_delta;
-                    a2 += a2_delta;
-                    b1 += b1_delta;
-                    b2 += b2_delta;
-                    gain += gain_delta;
-                    float x = buffer[i];
-                    float y = (a0*x + a1*x1 + a2*x2 - b1*y1 - b2*y2);
-                    float xx = (y * gain) * wet + (x) * (1 - wet);
-                    x2 = x1;
-                    x1 = x;
-                    y2 = y1;
-                    y1 = y;
-                    float yy = (a0*xx + a1*xx1 + a2*xx2 - b1*yy1 - b2*yy2);
-                    buffer[i] = (yy * gain) * wet + (xx) * (1 - wet);
-                    xx2 = xx1;
-                    xx1 = xx;
-                    yy2 = yy1;
-                    yy1 = yy;
-                }
-            }
-
-            if (Math.abs(x1) < 1.0E-8)
-                x1 = 0;
-            if (Math.abs(x2) < 1.0E-8)
-                x2 = 0;
-            if (Math.abs(y1) < 1.0E-8)
-                y1 = 0;
-            if (Math.abs(y2) < 1.0E-8)
-                y2 = 0;
-            this.x1 = x1;
-            this.x2 = x2;
-            this.y1 = y1;
-            this.y2 = y2;
-            this.xx1 = xx1;
-            this.xx2 = xx2;
-            this.yy1 = yy1;
-            this.yy2 = yy2;
-        }
-
-        this.last_a0 = this.a0;
-        this.last_a1 = this.a1;
-        this.last_a2 = this.a2;
-        this.last_b1 = this.b1;
-        this.last_b2 = this.b2;
-        this.last_gain = this.gain;
-        this.last_wet = this.wet;
-
-    }
-
-    private double sinh(double x) {
-        return (Math.exp(x) - Math.exp(-x)) * 0.5;
-    }
-
-    public void filter2calc() {
-
-        double resonancedB = this.resonancedB;
-        if (resonancedB < 0)
-            resonancedB = 0;    // Negative dB are illegal.
-        if (resonancedB > 30)
-            resonancedB = 30;   // At least 22.5 dB is needed.
-        if (filtertype == FILTERTYPE_LP24 || filtertype == FILTERTYPE_HP24)
-            resonancedB *= 0.6;
-
-        if (filtertype == FILTERTYPE_BP12) {
-            wet = 1;
-            double r = (cutoff / samplerate);
-            if (r > 0.45)
-                r = 0.45;
-
-            double bandwidth = Math.PI * Math.pow(10.0, -(resonancedB / 20));
-
-            double omega = 2 * Math.PI * r;
-            double cs = Math.cos(omega);
-            double sn = Math.sin(omega);
-            double alpha = sn * sinh((Math.log(2)*bandwidth*omega) / (sn * 2));
-
-            double b0 = alpha;
-            double b1 = 0;
-            double b2 = -alpha;
-            double a0 = 1 + alpha;
-            double a1 = -2 * cs;
-            double a2 = 1 - alpha;
-
-            double cf = 1.0 / a0;
-            this.b1 = (float) (a1 * cf);
-            this.b2 = (float) (a2 * cf);
-            this.a0 = (float) (b0 * cf);
-            this.a1 = (float) (b1 * cf);
-            this.a2 = (float) (b2 * cf);
-        }
-
-        if (filtertype == FILTERTYPE_NP12) {
-            wet = 1;
-            double r = (cutoff / samplerate);
-            if (r > 0.45)
-                r = 0.45;
-
-            double bandwidth = Math.PI * Math.pow(10.0, -(resonancedB / 20));
-
-            double omega = 2 * Math.PI * r;
-            double cs = Math.cos(omega);
-            double sn = Math.sin(omega);
-            double alpha = sn * sinh((Math.log(2)*bandwidth*omega) / (sn*2));
-
-            double b0 = 1;
-            double b1 = -2 * cs;
-            double b2 = 1;
-            double a0 = 1 + alpha;
-            double a1 = -2 * cs;
-            double a2 = 1 - alpha;
-
-            double cf = 1.0 / a0;
-            this.b1 = (float)(a1 * cf);
-            this.b2 = (float)(a2 * cf);
-            this.a0 = (float)(b0 * cf);
-            this.a1 = (float)(b1 * cf);
-            this.a2 = (float)(b2 * cf);
-        }
-
-        if (filtertype == FILTERTYPE_LP12 || filtertype == FILTERTYPE_LP24) {
-            double r = (cutoff / samplerate);
-            if (r > 0.45) {
-                if (wet == 0) {
-                    if (resonancedB < 0.00001)
-                        wet = 0.0f;
-                    else
-                        wet = 1.0f;
-                }
-                r = 0.45;
-            } else
-                wet = 1.0f;
-
-            double c = 1.0 / (Math.tan(Math.PI * r));
-            double csq = c * c;
-            double resonance = Math.pow(10.0, -(resonancedB / 20));
-            double q = Math.sqrt(2.0f) * resonance;
-            double a0 = 1.0 / (1.0 + (q * c) + (csq));
-            double a1 = 2.0 * a0;
-            double a2 = a0;
-            double b1 = (2.0 * a0) * (1.0 - csq);
-            double b2 = a0 * (1.0 - (q * c) + csq);
-
-            this.a0 = (float)a0;
-            this.a1 = (float)a1;
-            this.a2 = (float)a2;
-            this.b1 = (float)b1;
-            this.b2 = (float)b2;
-
-        }
-
-        if (filtertype == FILTERTYPE_HP12 || filtertype == FILTERTYPE_HP24) {
-            double r = (cutoff / samplerate);
-            if (r > 0.45)
-                r = 0.45;
-            if (r < 0.0001)
-                r = 0.0001;
-            wet = 1.0f;
-            double c = (Math.tan(Math.PI * (r)));
-            double csq = c * c;
-            double resonance = Math.pow(10.0, -(resonancedB / 20));
-            double q = Math.sqrt(2.0f) * resonance;
-            double a0 = 1.0 / (1.0 + (q * c) + (csq));
-            double a1 = -2.0 * a0;
-            double a2 = a0;
-            double b1 = (2.0 * a0) * (csq - 1.0);
-            double b2 = a0 * (1.0 - (q * c) + csq);
-
-            this.a0 = (float)a0;
-            this.a1 = (float)a1;
-            this.a2 = (float)a2;
-            this.b1 = (float)b1;
-            this.b2 = (float)b2;
-
-        }
-
-    }
-
-    public void filter2(SoftAudioBuffer sbuffer) {
-
-        float[] buffer = sbuffer.array();
-
-        if (dirty) {
-            filter2calc();
-            dirty = false;
-        }
-        if (!last_set) {
-            last_a0 = a0;
-            last_a1 = a1;
-            last_a2 = a2;
-            last_b1 = b1;
-            last_b2 = b2;
-            last_q = q;
-            last_gain = gain;
-            last_wet = wet;
-            last_set = true;
-        }
-
-        if (wet > 0 || last_wet > 0) {
-
-            int len = buffer.length;
-            float a0 = this.last_a0;
-            float a1 = this.last_a1;
-            float a2 = this.last_a2;
-            float b1 = this.last_b1;
-            float b2 = this.last_b2;
-            float gain = this.last_gain;
-            float wet = this.last_wet;
-            float a0_delta = (this.a0 - this.last_a0) / len;
-            float a1_delta = (this.a1 - this.last_a1) / len;
-            float a2_delta = (this.a2 - this.last_a2) / len;
-            float b1_delta = (this.b1 - this.last_b1) / len;
-            float b2_delta = (this.b2 - this.last_b2) / len;
-            float gain_delta = (this.gain - this.last_gain) / len;
-            float wet_delta = (this.wet - this.last_wet) / len;
-            float x1 = this.x1;
-            float x2 = this.x2;
-            float y1 = this.y1;
-            float y2 = this.y2;
-
-            if (wet_delta != 0) {
-                for (int i = 0; i < len; i++) {
-                    a0 += a0_delta;
-                    a1 += a1_delta;
-                    a2 += a2_delta;
-                    b1 += b1_delta;
-                    b2 += b2_delta;
-                    gain += gain_delta;
-                    wet += wet_delta;
-                    float x = buffer[i];
-                    float y = (a0*x + a1*x1 + a2*x2 - b1*y1 - b2*y2);
-                    buffer[i] = (y * gain) * wet + (x) * (1 - wet);
-                    x2 = x1;
-                    x1 = x;
-                    y2 = y1;
-                    y1 = y;
-                }
-            } else if (a0_delta == 0 && a1_delta == 0 && a2_delta == 0
-                    && b1_delta == 0 && b2_delta == 0) {
-                for (int i = 0; i < len; i++) {
-                    float x = buffer[i];
-                    float y = (a0*x + a1*x1 + a2*x2 - b1*y1 - b2*y2);
-                    buffer[i] = y * gain;
-                    x2 = x1;
-                    x1 = x;
-                    y2 = y1;
-                    y1 = y;
-                }
-            } else {
-                for (int i = 0; i < len; i++) {
-                    a0 += a0_delta;
-                    a1 += a1_delta;
-                    a2 += a2_delta;
-                    b1 += b1_delta;
-                    b2 += b2_delta;
-                    gain += gain_delta;
-                    float x = buffer[i];
-                    float y = (a0*x + a1*x1 + a2*x2 - b1*y1 - b2*y2);
-                    buffer[i] = y * gain;
-                    x2 = x1;
-                    x1 = x;
-                    y2 = y1;
-                    y1 = y;
-                }
-            }
-
-            if (Math.abs(x1) < 1.0E-8)
-                x1 = 0;
-            if (Math.abs(x2) < 1.0E-8)
-                x2 = 0;
-            if (Math.abs(y1) < 1.0E-8)
-                y1 = 0;
-            if (Math.abs(y2) < 1.0E-8)
-                y2 = 0;
-            this.x1 = x1;
-            this.x2 = x2;
-            this.y1 = y1;
-            this.y2 = y2;
-        }
-
-        this.last_a0 = this.a0;
-        this.last_a1 = this.a1;
-        this.last_a2 = this.a2;
-        this.last_b1 = this.b1;
-        this.last_b2 = this.b2;
-        this.last_q = this.q;
-        this.last_gain = this.gain;
-        this.last_wet = this.wet;
-
-    }
-
-    public void filter1calc() {
-        if (cutoff < 120)
-            cutoff = 120;
-        double c = (7.0 / 6.0) * Math.PI * 2 * cutoff / samplerate;
-        if (c > 1)
-            c = 1;
-        a0 = (float)(Math.sqrt(1 - Math.cos(c)) * Math.sqrt(0.5 * Math.PI));
-        if (resonancedB < 0)
-            resonancedB = 0;
-        if (resonancedB > 20)
-            resonancedB = 20;
-        q = (float)(Math.sqrt(0.5) * Math.pow(10.0, -(resonancedB / 20)));
-        gain = (float)Math.pow(10, -((resonancedB)) / 40.0);
-        if (wet == 0.0f)
-            if (resonancedB > 0.00001 || c < 0.9999999)
-                wet = 1.0f;
-    }
-
-    public void filter1(SoftAudioBuffer sbuffer) {
-
-        if (dirty) {
-            filter1calc();
-            dirty = false;
-        }
-        if (!last_set) {
-            last_a0 = a0;
-            last_q = q;
-            last_gain = gain;
-            last_wet = wet;
-            last_set = true;
-        }
-
-        if (wet > 0 || last_wet > 0) {
-
-            float[] buffer = sbuffer.array();
-            int len = buffer.length;
-            float a0 = this.last_a0;
-            float q = this.last_q;
-            float gain = this.last_gain;
-            float wet = this.last_wet;
-            float a0_delta = (this.a0 - this.last_a0) / len;
-            float q_delta = (this.q - this.last_q) / len;
-            float gain_delta = (this.gain - this.last_gain) / len;
-            float wet_delta = (this.wet - this.last_wet) / len;
-            float y2 = this.y2;
-            float y1 = this.y1;
-
-            if (wet_delta != 0) {
-                for (int i = 0; i < len; i++) {
-                    a0 += a0_delta;
-                    q += q_delta;
-                    gain += gain_delta;
-                    wet += wet_delta;
-                    float ga0 = (1 - q * a0);
-                    y1 = ga0 * y1 + (a0) * (buffer[i] - y2);
-                    y2 = ga0 * y2 + (a0) * y1;
-                    buffer[i] = y2 * gain * wet + buffer[i] * (1 - wet);
-                }
-            } else if (a0_delta == 0 && q_delta == 0) {
-                float ga0 = (1 - q * a0);
-                for (int i = 0; i < len; i++) {
-                    y1 = ga0 * y1 + (a0) * (buffer[i] - y2);
-                    y2 = ga0 * y2 + (a0) * y1;
-                    buffer[i] = y2 * gain;
-                }
-            } else {
-                for (int i = 0; i < len; i++) {
-                    a0 += a0_delta;
-                    q += q_delta;
-                    gain += gain_delta;
-                    float ga0 = (1 - q * a0);
-                    y1 = ga0 * y1 + (a0) * (buffer[i] - y2);
-                    y2 = ga0 * y2 + (a0) * y1;
-                    buffer[i] = y2 * gain;
-                }
-            }
-
-            if (Math.abs(y2) < 1.0E-8)
-                y2 = 0;
-            if (Math.abs(y1) < 1.0E-8)
-                y1 = 0;
-            this.y2 = y2;
-            this.y1 = y1;
-        }
-
-        this.last_a0 = this.a0;
-        this.last_q = this.q;
-        this.last_gain = this.gain;
-        this.last_wet = this.wet;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/SoftInstrument.java b/ojluni/src/main/java/com/sun/media/sound/SoftInstrument.java
deleted file mode 100755
index 0423448..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/SoftInstrument.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, 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.media.sound;
-
-import javax.sound.midi.Instrument;
-import javax.sound.midi.MidiChannel;
-
-/**
- * Software synthesizer internal instrument.
- *
- * @author Karl Helgason
- */
-public final class SoftInstrument extends Instrument {
-
-    private SoftPerformer[] performers;
-    private ModelPerformer[] modelperformers;
-    private final Object data;
-    private final ModelInstrument ins;
-
-    public SoftInstrument(ModelInstrument ins) {
-        super(ins.getSoundbank(), ins.getPatch(), ins.getName(),
-                ins.getDataClass());
-        data = ins.getData();
-        this.ins = ins;
-        initPerformers(((ModelInstrument)ins).getPerformers());
-    }
-
-    public SoftInstrument(ModelInstrument ins,
-            ModelPerformer[] overrideperformers) {
-        super(ins.getSoundbank(), ins.getPatch(), ins.getName(),
-                ins.getDataClass());
-        data = ins.getData();
-        this.ins = ins;
-        initPerformers(overrideperformers);
-    }
-
-    private void initPerformers(ModelPerformer[] modelperformers) {
-        this.modelperformers = modelperformers;
-        performers = new SoftPerformer[modelperformers.length];
-        for (int i = 0; i < modelperformers.length; i++)
-            performers[i] = new SoftPerformer(modelperformers[i]);
-    }
-
-    public ModelDirector getDirector(MidiChannel channel,
-            ModelDirectedPlayer player) {
-        return ins.getDirector(modelperformers, channel, player);
-    }
-
-    public ModelInstrument getSourceInstrument() {
-        return ins;
-    }
-
-    public Object getData() {
-        return data;
-    }
-
-    /* am: currently getPerformers() is not used (replaced with getPerformer(int))
-    public SoftPerformer[] getPerformers() {
-        return performers;
-    }
-    */
-    public SoftPerformer getPerformer(int index) {
-        return performers[index];
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/SoftJitterCorrector.java b/ojluni/src/main/java/com/sun/media/sound/SoftJitterCorrector.java
deleted file mode 100755
index 0f5ff29..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/SoftJitterCorrector.java
+++ /dev/null
@@ -1,277 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, 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.media.sound;
-
-import java.io.EOFException;
-import java.io.IOException;
-import java.io.InputStream;
-
-import javax.sound.sampled.AudioFormat;
-import javax.sound.sampled.AudioInputStream;
-
-/**
- * A jitter corrector to be used with SoftAudioPusher.
- *
- * @author Karl Helgason
- */
-public final class SoftJitterCorrector extends AudioInputStream {
-
-    private static class JitterStream extends InputStream {
-
-        static int MAX_BUFFER_SIZE = 1048576;
-        boolean active = true;
-        Thread thread;
-        AudioInputStream stream;
-        // Cyclic buffer
-        int writepos = 0;
-        int readpos = 0;
-        byte[][] buffers;
-        private final Object buffers_mutex = new Object();
-
-        // Adapative Drift Statistics
-        int w_count = 1000;
-        int w_min_tol = 2;
-        int w_max_tol = 10;
-        int w = 0;
-        int w_min = -1;
-        // Current read buffer
-        int bbuffer_pos = 0;
-        int bbuffer_max = 0;
-        byte[] bbuffer = null;
-
-        public byte[] nextReadBuffer() {
-            synchronized (buffers_mutex) {
-                if (writepos > readpos) {
-                    int w_m = writepos - readpos;
-                    if (w_m < w_min)
-                        w_min = w_m;
-
-                    int buffpos = readpos;
-                    readpos++;
-                    return buffers[buffpos % buffers.length];
-                }
-                w_min = -1;
-                w = w_count - 1;
-            }
-            while (true) {
-                try {
-                    Thread.sleep(1);
-                } catch (InterruptedException e) {
-                    //e.printStackTrace();
-                    return null;
-                }
-                synchronized (buffers_mutex) {
-                    if (writepos > readpos) {
-                        w = 0;
-                        w_min = -1;
-                        w = w_count - 1;
-                        int buffpos = readpos;
-                        readpos++;
-                        return buffers[buffpos % buffers.length];
-                    }
-                }
-            }
-        }
-
-        public byte[] nextWriteBuffer() {
-            synchronized (buffers_mutex) {
-                return buffers[writepos % buffers.length];
-            }
-        }
-
-        public void commit() {
-            synchronized (buffers_mutex) {
-                writepos++;
-                if ((writepos - readpos) > buffers.length) {
-                    int newsize = (writepos - readpos) + 10;
-                    newsize = Math.max(buffers.length * 2, newsize);
-                    buffers = new byte[newsize][buffers[0].length];
-                }
-            }
-        }
-
-        JitterStream(AudioInputStream s, int buffersize,
-                int smallbuffersize) {
-            this.w_count = 10 * (buffersize / smallbuffersize);
-            if (w_count < 100)
-                w_count = 100;
-            this.buffers
-                    = new byte[(buffersize/smallbuffersize)+10][smallbuffersize];
-            this.bbuffer_max = MAX_BUFFER_SIZE / smallbuffersize;
-            this.stream = s;
-
-
-            Runnable runnable = new Runnable() {
-
-                public void run() {
-                    AudioFormat format = stream.getFormat();
-                    int bufflen = buffers[0].length;
-                    int frames = bufflen / format.getFrameSize();
-                    long nanos = (long) (frames * 1000000000.0
-                                            / format.getSampleRate());
-                    long now = System.nanoTime();
-                    long next = now + nanos;
-                    int correction = 0;
-                    while (true) {
-                        synchronized (JitterStream.this) {
-                            if (!active)
-                                break;
-                        }
-                        int curbuffsize;
-                        synchronized (buffers) {
-                            curbuffsize = writepos - readpos;
-                            if (correction == 0) {
-                                w++;
-                                if (w_min != Integer.MAX_VALUE) {
-                                    if (w == w_count) {
-                                        correction = 0;
-                                        if (w_min < w_min_tol) {
-                                            correction = (w_min_tol + w_max_tol)
-                                                            / 2 - w_min;
-                                        }
-                                        if (w_min > w_max_tol) {
-                                            correction = (w_min_tol + w_max_tol)
-                                                            / 2 - w_min;
-                                        }
-                                        w = 0;
-                                        w_min = Integer.MAX_VALUE;
-                                    }
-                                }
-                            }
-                        }
-                        while (curbuffsize > bbuffer_max) {
-                            synchronized (buffers) {
-                                curbuffsize = writepos - readpos;
-                            }
-                            synchronized (JitterStream.this) {
-                                if (!active)
-                                    break;
-                            }
-                            try {
-                                Thread.sleep(1);
-                            } catch (InterruptedException e) {
-                                //e.printStackTrace();
-                            }
-                        }
-
-                        if (correction < 0)
-                            correction++;
-                        else {
-                            byte[] buff = nextWriteBuffer();
-                            try {
-                                int n = 0;
-                                while (n != buff.length) {
-                                    int s = stream.read(buff, n, buff.length
-                                            - n);
-                                    if (s < 0)
-                                        throw new EOFException();
-                                    if (s == 0)
-                                        Thread.yield();
-                                    n += s;
-                                }
-                            } catch (IOException e1) {
-                                //e1.printStackTrace();
-                            }
-                            commit();
-                        }
-
-                        if (correction > 0) {
-                            correction--;
-                            next = System.nanoTime() + nanos;
-                            continue;
-                        }
-                        long wait = next - System.nanoTime();
-                        if (wait > 0) {
-                            try {
-                                Thread.sleep(wait / 1000000L);
-                            } catch (InterruptedException e) {
-                                //e.printStackTrace();
-                            }
-                        }
-                        next += nanos;
-                    }
-                }
-            };
-
-            thread = new Thread(runnable);
-            thread.setDaemon(true);
-            thread.setPriority(Thread.MAX_PRIORITY);
-            thread.start();
-        }
-
-        public void close() throws IOException {
-            synchronized (this) {
-                active = false;
-            }
-            try {
-                thread.join();
-            } catch (InterruptedException e) {
-                //e.printStackTrace();
-            }
-            stream.close();
-        }
-
-        public int read() throws IOException {
-            byte[] b = new byte[1];
-            if (read(b) == -1)
-                return -1;
-            return b[0] & 0xFF;
-        }
-
-        public void fillBuffer() {
-            bbuffer = nextReadBuffer();
-            bbuffer_pos = 0;
-        }
-
-        public int read(byte[] b, int off, int len) {
-            if (bbuffer == null)
-                fillBuffer();
-            int bbuffer_len = bbuffer.length;
-            int offlen = off + len;
-            while (off < offlen) {
-                if (available() == 0)
-                    fillBuffer();
-                else {
-                    byte[] bbuffer = this.bbuffer;
-                    int bbuffer_pos = this.bbuffer_pos;
-                    while (off < offlen && bbuffer_pos < bbuffer_len)
-                        b[off++] = bbuffer[bbuffer_pos++];
-                    this.bbuffer_pos = bbuffer_pos;
-                }
-            }
-            return len;
-        }
-
-        public int available() {
-            return bbuffer.length - bbuffer_pos;
-        }
-    }
-
-    public SoftJitterCorrector(AudioInputStream stream, int buffersize,
-            int smallbuffersize) {
-        super(new JitterStream(stream, buffersize, smallbuffersize),
-                stream.getFormat(), stream.getFrameLength());
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/SoftLanczosResampler.java b/ojluni/src/main/java/com/sun/media/sound/SoftLanczosResampler.java
deleted file mode 100755
index 1d2d361..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/SoftLanczosResampler.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, 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.media.sound;
-
-/**
- * Lanczos interpolation resampler.
- *
- * @author Karl Helgason
- */
-public final class SoftLanczosResampler extends SoftAbstractResampler {
-
-    float[][] sinc_table;
-    int sinc_table_fsize = 2000;
-    int sinc_table_size = 5;
-    int sinc_table_center = sinc_table_size / 2;
-
-    public SoftLanczosResampler() {
-        super();
-        sinc_table = new float[sinc_table_fsize][];
-        for (int i = 0; i < sinc_table_fsize; i++) {
-            sinc_table[i] = sincTable(sinc_table_size, -i
-                            / ((float) sinc_table_fsize));
-        }
-    }
-
-    // Normalized sinc function
-    public static double sinc(double x) {
-        return (x == 0.0) ? 1.0 : Math.sin(Math.PI * x) / (Math.PI * x);
-    }
-
-    // Generate sinc table
-    public static float[] sincTable(int size, float offset) {
-        int center = size / 2;
-        float[] w = new float[size];
-        for (int k = 0; k < size; k++) {
-            float x = (-center + k + offset);
-            if (x < -2 || x > 2)
-                w[k] = 0;
-            else if (x == 0)
-                w[k] = 1;
-            else {
-                w[k] = (float)(2.0 * Math.sin(Math.PI * x)
-                                * Math.sin(Math.PI * x / 2.0)
-                                / ((Math.PI * x) * (Math.PI * x)));
-            }
-        }
-        return w;
-    }
-
-    public int getPadding() // must be at least half of sinc_table_size
-    {
-        return sinc_table_size / 2 + 2;
-    }
-
-    public void interpolate(float[] in, float[] in_offset, float in_end,
-            float[] startpitch, float pitchstep, float[] out, int[] out_offset,
-            int out_end) {
-        float pitch = startpitch[0];
-        float ix = in_offset[0];
-        int ox = out_offset[0];
-        float ix_end = in_end;
-        int ox_end = out_end;
-
-        if (pitchstep == 0) {
-            while (ix < ix_end && ox < ox_end) {
-                int iix = (int) ix;
-                float[] sinc_table
-                        = this.sinc_table[(int) ((ix - iix) * sinc_table_fsize)];
-                int xx = iix - sinc_table_center;
-                float y = 0;
-                for (int i = 0; i < sinc_table_size; i++, xx++)
-                    y += in[xx] * sinc_table[i];
-                out[ox++] = y;
-                ix += pitch;
-            }
-        } else {
-            while (ix < ix_end && ox < ox_end) {
-                int iix = (int) ix;
-                float[] sinc_table
-                        = this.sinc_table[(int) ((ix - iix) * sinc_table_fsize)];
-                int xx = iix - sinc_table_center;
-                float y = 0;
-                for (int i = 0; i < sinc_table_size; i++, xx++)
-                    y += in[xx] * sinc_table[i];
-                out[ox++] = y;
-
-                ix += pitch;
-                pitch += pitchstep;
-            }
-        }
-        in_offset[0] = ix;
-        out_offset[0] = ox;
-        startpitch[0] = pitch;
-
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/SoftLimiter.java b/ojluni/src/main/java/com/sun/media/sound/SoftLimiter.java
deleted file mode 100755
index 7c74a18..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/SoftLimiter.java
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, 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.media.sound;
-
-/**
- * A simple look-ahead volume limiter with very fast attack and fast release.
- * This filter is used for preventing clipping.
- *
- * @author Karl Helgason
- */
-public final class SoftLimiter implements SoftAudioProcessor {
-
-    float lastmax = 0;
-    float gain = 1;
-    float[] temp_bufferL;
-    float[] temp_bufferR;
-    boolean mix = false;
-    SoftAudioBuffer bufferL;
-    SoftAudioBuffer bufferR;
-    SoftAudioBuffer bufferLout;
-    SoftAudioBuffer bufferRout;
-    float controlrate;
-
-    public void init(float samplerate, float controlrate) {
-        this.controlrate = controlrate;
-    }
-
-    public void setInput(int pin, SoftAudioBuffer input) {
-        if (pin == 0)
-            bufferL = input;
-        if (pin == 1)
-            bufferR = input;
-    }
-
-    public void setOutput(int pin, SoftAudioBuffer output) {
-        if (pin == 0)
-            bufferLout = output;
-        if (pin == 1)
-            bufferRout = output;
-    }
-
-    public void setMixMode(boolean mix) {
-        this.mix = mix;
-    }
-
-    public void globalParameterControlChange(int[] slothpath, long param,
-            long value) {
-    }
-
-    double silentcounter = 0;
-
-    public void processAudio() {
-        if (this.bufferL.isSilent()
-                && (this.bufferR == null || this.bufferR.isSilent())) {
-            silentcounter += 1 / controlrate;
-
-            if (silentcounter > 60) {
-                if (!mix) {
-                    bufferLout.clear();
-                    if (bufferRout != null) bufferRout.clear();
-                }
-                return;
-            }
-        } else
-            silentcounter = 0;
-
-        float[] bufferL = this.bufferL.array();
-        float[] bufferR = this.bufferR == null ? null : this.bufferR.array();
-        float[] bufferLout = this.bufferLout.array();
-        float[] bufferRout = this.bufferRout == null
-                                ? null : this.bufferRout.array();
-
-        if (temp_bufferL == null || temp_bufferL.length < bufferL.length)
-            temp_bufferL = new float[bufferL.length];
-        if (bufferR != null)
-            if (temp_bufferR == null || temp_bufferR.length < bufferR.length)
-                temp_bufferR = new float[bufferR.length];
-
-        float max = 0;
-        int len = bufferL.length;
-
-        if (bufferR == null) {
-            for (int i = 0; i < len; i++) {
-                if (bufferL[i] > max)
-                    max = bufferL[i];
-                if (-bufferL[i] > max)
-                    max = -bufferL[i];
-            }
-        } else {
-            for (int i = 0; i < len; i++) {
-                if (bufferL[i] > max)
-                    max = bufferL[i];
-                if (bufferR[i] > max)
-                    max = bufferR[i];
-                if (-bufferL[i] > max)
-                    max = -bufferL[i];
-                if (-bufferR[i] > max)
-                    max = -bufferR[i];
-            }
-        }
-
-        float lmax = lastmax;
-        lastmax = max;
-        if (lmax > max)
-            max = lmax;
-
-        float newgain = 1;
-        if (max > 0.99f)
-            newgain = 0.99f / max;
-        else
-            newgain = 1;
-
-        if (newgain > gain)
-            newgain = (newgain + gain * 9) / 10f;
-
-        float gaindelta = (newgain - gain) / len;
-        if (mix) {
-            if (bufferR == null) {
-                for (int i = 0; i < len; i++) {
-                    gain += gaindelta;
-                    float bL = bufferL[i];
-                    float tL = temp_bufferL[i];
-                    temp_bufferL[i] = bL;
-                    bufferLout[i] += tL * gain;
-                }
-            } else {
-                for (int i = 0; i < len; i++) {
-                    gain += gaindelta;
-                    float bL = bufferL[i];
-                    float bR = bufferR[i];
-                    float tL = temp_bufferL[i];
-                    float tR = temp_bufferR[i];
-                    temp_bufferL[i] = bL;
-                    temp_bufferR[i] = bR;
-                    bufferLout[i] += tL * gain;
-                    bufferRout[i] += tR * gain;
-                }
-            }
-
-        } else {
-            if (bufferR == null) {
-                for (int i = 0; i < len; i++) {
-                    gain += gaindelta;
-                    float bL = bufferL[i];
-                    float tL = temp_bufferL[i];
-                    temp_bufferL[i] = bL;
-                    bufferLout[i] = tL * gain;
-                }
-            } else {
-                for (int i = 0; i < len; i++) {
-                    gain += gaindelta;
-                    float bL = bufferL[i];
-                    float bR = bufferR[i];
-                    float tL = temp_bufferL[i];
-                    float tR = temp_bufferR[i];
-                    temp_bufferL[i] = bL;
-                    temp_bufferR[i] = bR;
-                    bufferLout[i] = tL * gain;
-                    bufferRout[i] = tR * gain;
-                }
-            }
-
-        }
-        gain = newgain;
-    }
-
-    public void processControlLogic() {
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/SoftLinearResampler.java b/ojluni/src/main/java/com/sun/media/sound/SoftLinearResampler.java
deleted file mode 100755
index eb2b98d..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/SoftLinearResampler.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, 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.media.sound;
-
-/**
- * A resampler that uses first-order (linear) interpolation.
- *
- * @author Karl Helgason
- */
-public final class SoftLinearResampler extends SoftAbstractResampler {
-
-    public int getPadding() {
-        return 2;
-    }
-
-    public void interpolate(float[] in, float[] in_offset, float in_end,
-            float[] startpitch, float pitchstep, float[] out, int[] out_offset,
-            int out_end) {
-
-        float pitch = startpitch[0];
-        float ix = in_offset[0];
-        int ox = out_offset[0];
-        float ix_end = in_end;
-        int ox_end = out_end;
-        if (pitchstep == 0f) {
-            while (ix < ix_end && ox < ox_end) {
-                int iix = (int) ix;
-                float fix = ix - iix;
-                float i = in[iix];
-                out[ox++] = i + (in[iix + 1] - i) * fix;
-                ix += pitch;
-            }
-        } else {
-            while (ix < ix_end && ox < ox_end) {
-                int iix = (int) ix;
-                float fix = ix - iix;
-                float i = in[iix];
-                out[ox++] = i + (in[iix + 1] - i) * fix;
-                ix += pitch;
-                pitch += pitchstep;
-            }
-        }
-        in_offset[0] = ix;
-        out_offset[0] = ox;
-        startpitch[0] = pitch;
-
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/SoftLinearResampler2.java b/ojluni/src/main/java/com/sun/media/sound/SoftLinearResampler2.java
deleted file mode 100755
index 67f1b6b..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/SoftLinearResampler2.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, 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.media.sound;
-
-/**
- * A resampler that uses first-order (linear) interpolation.
- *
- * This one doesn't perform float to int casting inside the processing loop.
- *
- * @author Karl Helgason
- */
-public final class SoftLinearResampler2 extends SoftAbstractResampler {
-
-    public int getPadding() {
-        return 2;
-    }
-
-    public void interpolate(float[] in, float[] in_offset, float in_end,
-            float[] startpitch, float pitchstep, float[] out, int[] out_offset,
-            int out_end) {
-
-        float pitch = startpitch[0];
-        float ix = in_offset[0];
-        int ox = out_offset[0];
-        float ix_end = in_end;
-        int ox_end = out_end;
-
-        // Check if we have do anything
-        if (!(ix < ix_end && ox < ox_end))
-            return;
-
-        // 15 bit shift was choosed because
-        // it resulted in no drift between p_ix and ix.
-        int p_ix = (int) (ix * (1 << 15));
-        int p_ix_end = (int) (ix_end * (1 << 15));
-        int p_pitch = (int) (pitch * (1 << 15));
-        // Pitch needs to recalculated
-        // to ensure no drift between p_ix and ix.
-        pitch = p_pitch * (1f / (1 << 15));
-
-        if (pitchstep == 0f) {
-
-            // To reduce
-            //    while (p_ix < p_ix_end && ox < ox_end)
-            // into
-            //    while  (ox < ox_end)
-            // We need to calculate new ox_end value.
-            int p_ix_len = p_ix_end - p_ix;
-            int p_mod = p_ix_len % p_pitch;
-            if (p_mod != 0)
-                p_ix_len += p_pitch - p_mod;
-            int ox_end2 = ox + p_ix_len / p_pitch;
-            if (ox_end2 < ox_end)
-                ox_end = ox_end2;
-
-            while (ox < ox_end) {
-                int iix = p_ix >> 15;
-                float fix = ix - iix;
-                float i = in[iix];
-                out[ox++] = i + (in[iix + 1] - i) * fix;
-                p_ix += p_pitch;
-                ix += pitch;
-            }
-
-        } else {
-
-            int p_pitchstep = (int) (pitchstep * (1 << 15));
-            pitchstep = p_pitchstep * (1f / (1 << 15));
-
-            while (p_ix < p_ix_end && ox < ox_end) {
-                int iix = p_ix >> 15;
-                float fix = ix - iix;
-                float i = in[iix];
-                out[ox++] = i + (in[iix + 1] - i) * fix;
-                ix += pitch;
-                p_ix += p_pitch;
-                pitch += pitchstep;
-                p_pitch += p_pitchstep;
-            }
-        }
-        in_offset[0] = ix;
-        out_offset[0] = ox;
-        startpitch[0] = pitch;
-
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/SoftLowFrequencyOscillator.java b/ojluni/src/main/java/com/sun/media/sound/SoftLowFrequencyOscillator.java
deleted file mode 100755
index a0a8bbe..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/SoftLowFrequencyOscillator.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, 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.media.sound;
-
-/**
- * LFO control signal generator.
- *
- * @author Karl Helgason
- */
-public final class SoftLowFrequencyOscillator implements SoftProcess {
-
-    private final int max_count = 10;
-    private int used_count = 0;
-    private final double[][] out = new double[max_count][1];
-    private final double[][] delay = new double[max_count][1];
-    private final double[][] delay2 = new double[max_count][1];
-    private final double[][] freq = new double[max_count][1];
-    private final int[] delay_counter = new int[max_count];
-    private final double[] sin_phase = new double[max_count];
-    private final double[] sin_stepfreq = new double[max_count];
-    private final double[] sin_step = new double[max_count];
-    private double control_time = 0;
-    private double sin_factor = 0;
-    private static final double PI2 = 2.0 * Math.PI;
-
-    public SoftLowFrequencyOscillator() {
-        // If sin_step is 0 then sin_stepfreq must be -INF
-        for (int i = 0; i < sin_stepfreq.length; i++) {
-            sin_stepfreq[i] = Double.NEGATIVE_INFINITY;
-        }
-    }
-
-    public void reset() {
-        for (int i = 0; i < used_count; i++) {
-            out[i][0] = 0;
-            delay[i][0] = 0;
-            delay2[i][0] = 0;
-            freq[i][0] = 0;
-            delay_counter[i] = 0;
-            sin_phase[i] = 0;
-            // If sin_step is 0 then sin_stepfreq must be -INF
-            sin_stepfreq[i] = Double.NEGATIVE_INFINITY;
-            sin_step[i] = 0;
-        }
-        used_count = 0;
-    }
-
-    public void init(SoftSynthesizer synth) {
-        control_time = 1.0 / synth.getControlRate();
-        sin_factor = control_time * 2 * Math.PI;
-        for (int i = 0; i < used_count; i++) {
-            delay_counter[i] = (int)(Math.pow(2,
-                    this.delay[i][0] / 1200.0) / control_time);
-            delay_counter[i] += (int)(delay2[i][0] / (control_time * 1000));
-        }
-        processControlLogic();
-    }
-
-    public void processControlLogic() {
-        for (int i = 0; i < used_count; i++) {
-            if (delay_counter[i] > 0) {
-                delay_counter[i]--;
-                out[i][0] = 0.5;
-            } else {
-                double f = freq[i][0];
-
-                if (sin_stepfreq[i] != f) {
-                    sin_stepfreq[i] = f;
-                    double fr = 440.0 * Math.exp(
-                            (f - 6900.0) * (Math.log(2) / 1200.0));
-                    sin_step[i] = fr * sin_factor;
-                }
-                /*
-                double fr = 440.0 * Math.pow(2.0,
-                (freq[i][0] - 6900.0) / 1200.0);
-                sin_phase[i] += fr * sin_factor;
-                 */
-                /*
-                sin_phase[i] += sin_step[i];
-                while (sin_phase[i] > PI2)
-                sin_phase[i] -= PI2;
-                out[i][0] = 0.5 + Math.sin(sin_phase[i]) * 0.5;
-                 */
-                double p = sin_phase[i];
-                p += sin_step[i];
-                while (p > PI2)
-                    p -= PI2;
-                out[i][0] = 0.5 + Math.sin(p) * 0.5;
-                sin_phase[i] = p;
-
-            }
-        }
-    }
-
-    public double[] get(int instance, String name) {
-        if (instance >= used_count)
-            used_count = instance + 1;
-        if (name == null)
-            return out[instance];
-        if (name.equals("delay"))
-            return delay[instance];
-        if (name.equals("delay2"))
-            return delay2[instance];
-        if (name.equals("freq"))
-            return freq[instance];
-        return null;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/SoftMainMixer.java b/ojluni/src/main/java/com/sun/media/sound/SoftMainMixer.java
deleted file mode 100755
index 02ce9e0..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/SoftMainMixer.java
+++ /dev/null
@@ -1,1145 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, 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.media.sound;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
-import java.util.TreeMap;
-import java.util.Map.Entry;
-
-import javax.sound.midi.MidiMessage;
-import javax.sound.midi.Patch;
-import javax.sound.midi.ShortMessage;
-import javax.sound.sampled.AudioInputStream;
-import javax.sound.sampled.AudioSystem;
-
-/**
- * Software synthesizer main audio mixer.
- *
- * @author Karl Helgason
- */
-public final class SoftMainMixer {
-
-    // A private class thats contains a ModelChannelMixer and it's private buffers.
-    // This becomes necessary when we want to have separate delay buffers for each channel mixer.
-    private class SoftChannelMixerContainer
-    {
-        ModelChannelMixer mixer;
-        SoftAudioBuffer[] buffers;
-    }
-
-    public final static int CHANNEL_LEFT = 0;
-    public final static int CHANNEL_RIGHT = 1;
-    public final static int CHANNEL_MONO = 2;
-    public final static int CHANNEL_DELAY_LEFT = 3;
-    public final static int CHANNEL_DELAY_RIGHT = 4;
-    public final static int CHANNEL_DELAY_MONO = 5;
-    public final static int CHANNEL_EFFECT1 = 6;
-    public final static int CHANNEL_EFFECT2 = 7;
-    public final static int CHANNEL_DELAY_EFFECT1 = 8;
-    public final static int CHANNEL_DELAY_EFFECT2 = 9;
-    public final static int CHANNEL_LEFT_DRY = 10;
-    public final static int CHANNEL_RIGHT_DRY = 11;
-    public final static int CHANNEL_SCRATCH1 = 12;
-    public final static int CHANNEL_SCRATCH2 = 13;
-    boolean active_sensing_on = false;
-    private long msec_last_activity = -1;
-    private boolean pusher_silent = false;
-    private int pusher_silent_count = 0;
-    private long sample_pos = 0;
-    boolean readfully = true;
-    private final Object control_mutex;
-    private SoftSynthesizer synth;
-    private float samplerate = 44100;
-    private int nrofchannels = 2;
-    private SoftVoice[] voicestatus = null;
-    private SoftAudioBuffer[] buffers;
-    private SoftReverb reverb;
-    private SoftAudioProcessor chorus;
-    private SoftAudioProcessor agc;
-    private long msec_buffer_len = 0;
-    private int buffer_len = 0;
-    TreeMap<Long, Object> midimessages = new TreeMap<Long, Object>();
-    private int delay_midievent = 0;
-    private int max_delay_midievent = 0;
-    double last_volume_left = 1.0;
-    double last_volume_right = 1.0;
-    private double[] co_master_balance = new double[1];
-    private double[] co_master_volume = new double[1];
-    private double[] co_master_coarse_tuning = new double[1];
-    private double[] co_master_fine_tuning = new double[1];
-    private AudioInputStream ais;
-    private Set<SoftChannelMixerContainer> registeredMixers = null;
-    private Set<ModelChannelMixer> stoppedMixers = null;
-    private SoftChannelMixerContainer[] cur_registeredMixers = null;
-    SoftControl co_master = new SoftControl() {
-
-        double[] balance = co_master_balance;
-        double[] volume = co_master_volume;
-        double[] coarse_tuning = co_master_coarse_tuning;
-        double[] fine_tuning = co_master_fine_tuning;
-
-        public double[] get(int instance, String name) {
-            if (name == null)
-                return null;
-            if (name.equals("balance"))
-                return balance;
-            if (name.equals("volume"))
-                return volume;
-            if (name.equals("coarse_tuning"))
-                return coarse_tuning;
-            if (name.equals("fine_tuning"))
-                return fine_tuning;
-            return null;
-        }
-    };
-
-    private void processSystemExclusiveMessage(byte[] data) {
-        synchronized (synth.control_mutex) {
-            activity();
-
-            // Universal Non-Real-Time SysEx
-            if ((data[1] & 0xFF) == 0x7E) {
-                int deviceID = data[2] & 0xFF;
-                if (deviceID == 0x7F || deviceID == synth.getDeviceID()) {
-                    int subid1 = data[3] & 0xFF;
-                    int subid2;
-                    switch (subid1) {
-                    case 0x08:  // MIDI Tuning Standard
-                        subid2 = data[4] & 0xFF;
-                        switch (subid2) {
-                        case 0x01:  // BULK TUNING DUMP
-                        {
-                            // http://www.midi.org/about-midi/tuning.shtml
-                            SoftTuning tuning = synth.getTuning(new Patch(0,
-                                    data[5] & 0xFF));
-                            tuning.load(data);
-                            break;
-                        }
-                        case 0x04:  // KEY-BASED TUNING DUMP
-                        case 0x05:  // SCALE/OCTAVE TUNING DUMP, 1 byte format
-                        case 0x06:  // SCALE/OCTAVE TUNING DUMP, 2 byte format
-                        case 0x07:  // SINGLE NOTE TUNING CHANGE (NON REAL-TIME)
-                                    // (BANK)
-                        {
-                            // http://www.midi.org/about-midi/tuning_extens.shtml
-                            SoftTuning tuning = synth.getTuning(new Patch(
-                                    data[5] & 0xFF, data[6] & 0xFF));
-                            tuning.load(data);
-                            break;
-                        }
-                        case 0x08:  // scale/octave tuning 1-byte form (Non
-                                    // Real-Time)
-                        case 0x09:  // scale/octave tuning 2-byte form (Non
-                                    // Real-Time)
-                        {
-                            // http://www.midi.org/about-midi/tuning-scale.shtml
-                            SoftTuning tuning = new SoftTuning(data);
-                            int channelmask = (data[5] & 0xFF) * 16384
-                                    + (data[6] & 0xFF) * 128 + (data[7] & 0xFF);
-                            SoftChannel[] channels = synth.channels;
-                            for (int i = 0; i < channels.length; i++)
-                                if ((channelmask & (1 << i)) != 0)
-                                    channels[i].tuning = tuning;
-                            break;
-                        }
-                        default:
-                            break;
-                        }
-                        break;
-                    case 0x09:  // General Midi Message
-                        subid2 = data[4] & 0xFF;
-                        switch (subid2) {
-                        case 0x01:  // General Midi 1 On
-                            synth.setGeneralMidiMode(1);
-                            reset();
-                            break;
-                        case 0x02:  // General Midi Off
-                            synth.setGeneralMidiMode(0);
-                            reset();
-                            break;
-                        case 0x03:  // General MidI Level 2 On
-                            synth.setGeneralMidiMode(2);
-                            reset();
-                            break;
-                        default:
-                            break;
-                        }
-                        break;
-                    case 0x0A: // DLS Message
-                        subid2 = data[4] & 0xFF;
-                        switch (subid2) {
-                        case 0x01:  // DLS On
-                            if (synth.getGeneralMidiMode() == 0)
-                                synth.setGeneralMidiMode(1);
-                            synth.voice_allocation_mode = 1;
-                            reset();
-                            break;
-                        case 0x02:  // DLS Off
-                            synth.setGeneralMidiMode(0);
-                            synth.voice_allocation_mode = 0;
-                            reset();
-                            break;
-                        case 0x03:  // DLS Static Voice Allocation Off
-                            synth.voice_allocation_mode = 0;
-                            break;
-                        case 0x04:  // DLS Static Voice Allocation On
-                            synth.voice_allocation_mode = 1;
-                            break;
-                        default:
-                            break;
-                        }
-                        break;
-
-                    default:
-                        break;
-                    }
-                }
-            }
-
-            // Universal Real-Time SysEx
-            if ((data[1] & 0xFF) == 0x7F) {
-                int deviceID = data[2] & 0xFF;
-                if (deviceID == 0x7F || deviceID == synth.getDeviceID()) {
-                    int subid1 = data[3] & 0xFF;
-                    int subid2;
-                    switch (subid1) {
-                    case 0x04: // Device Control
-
-                        subid2 = data[4] & 0xFF;
-                        switch (subid2) {
-                        case 0x01: // Master Volume
-                        case 0x02: // Master Balane
-                        case 0x03: // Master fine tuning
-                        case 0x04: // Master coarse tuning
-                            int val = (data[5] & 0x7F)
-                                    + ((data[6] & 0x7F) * 128);
-                            if (subid2 == 0x01)
-                                setVolume(val);
-                            else if (subid2 == 0x02)
-                                setBalance(val);
-                            else if (subid2 == 0x03)
-                                setFineTuning(val);
-                            else if (subid2 == 0x04)
-                                setCoarseTuning(val);
-                            break;
-                        case 0x05: // Global Parameter Control
-                            int ix = 5;
-                            int slotPathLen = (data[ix++] & 0xFF);
-                            int paramWidth = (data[ix++] & 0xFF);
-                            int valueWidth = (data[ix++] & 0xFF);
-                            int[] slotPath = new int[slotPathLen];
-                            for (int i = 0; i < slotPathLen; i++) {
-                                int msb = (data[ix++] & 0xFF);
-                                int lsb = (data[ix++] & 0xFF);
-                                slotPath[i] = msb * 128 + lsb;
-                            }
-                            int paramCount = (data.length - 1 - ix)
-                                    / (paramWidth + valueWidth);
-                            long[] params = new long[paramCount];
-                            long[] values = new long[paramCount];
-                            for (int i = 0; i < paramCount; i++) {
-                                values[i] = 0;
-                                for (int j = 0; j < paramWidth; j++)
-                                    params[i] = params[i] * 128
-                                            + (data[ix++] & 0xFF);
-                                for (int j = 0; j < valueWidth; j++)
-                                    values[i] = values[i] * 128
-                                            + (data[ix++] & 0xFF);
-
-                            }
-                            globalParameterControlChange(slotPath, params, values);
-                            break;
-                        default:
-                            break;
-                        }
-                        break;
-
-                    case 0x08:  // MIDI Tuning Standard
-                        subid2 = data[4] & 0xFF;
-                        switch (subid2) {
-                        case 0x02:  // SINGLE NOTE TUNING CHANGE (REAL-TIME)
-                        {
-                            // http://www.midi.org/about-midi/tuning.shtml
-                            SoftTuning tuning = synth.getTuning(new Patch(0,
-                                    data[5] & 0xFF));
-                            tuning.load(data);
-                            SoftVoice[] voices = synth.getVoices();
-                            for (int i = 0; i < voices.length; i++)
-                                if (voices[i].active)
-                                    if (voices[i].tuning == tuning)
-                                        voices[i].updateTuning(tuning);
-                            break;
-                        }
-                        case 0x07:  // SINGLE NOTE TUNING CHANGE (REAL-TIME)
-                                    // (BANK)
-                        {
-                            // http://www.midi.org/about-midi/tuning_extens.shtml
-                            SoftTuning tuning = synth.getTuning(new Patch(
-                                    data[5] & 0xFF, data[6] & 0xFF));
-                            tuning.load(data);
-                            SoftVoice[] voices = synth.getVoices();
-                            for (int i = 0; i < voices.length; i++)
-                                if (voices[i].active)
-                                    if (voices[i].tuning == tuning)
-                                        voices[i].updateTuning(tuning);
-                            break;
-                        }
-                        case 0x08:  // scale/octave tuning 1-byte form
-                                    //(Real-Time)
-                        case 0x09:  // scale/octave tuning 2-byte form
-                                    // (Real-Time)
-                        {
-                            // http://www.midi.org/about-midi/tuning-scale.shtml
-                            SoftTuning tuning = new SoftTuning(data);
-                            int channelmask = (data[5] & 0xFF) * 16384
-                                    + (data[6] & 0xFF) * 128 + (data[7] & 0xFF);
-                            SoftChannel[] channels = synth.channels;
-                            for (int i = 0; i < channels.length; i++)
-                                if ((channelmask & (1 << i)) != 0)
-                                    channels[i].tuning = tuning;
-                            SoftVoice[] voices = synth.getVoices();
-                            for (int i = 0; i < voices.length; i++)
-                                if (voices[i].active)
-                                    if ((channelmask & (1 << (voices[i].channel))) != 0)
-                                        voices[i].updateTuning(tuning);
-                            break;
-                        }
-                        default:
-                            break;
-                        }
-                        break;
-                    case 0x09:  // Control Destination Settings
-                        subid2 = data[4] & 0xFF;
-                        switch (subid2) {
-                        case 0x01: // Channel Pressure
-                        {
-                            int[] destinations = new int[(data.length - 7) / 2];
-                            int[] ranges = new int[(data.length - 7) / 2];
-                            int ix = 0;
-                            for (int j = 6; j < data.length - 1; j += 2) {
-                                destinations[ix] = data[j] & 0xFF;
-                                ranges[ix] = data[j + 1] & 0xFF;
-                                ix++;
-                            }
-                            int channel = data[5] & 0xFF;
-                            SoftChannel softchannel = synth.channels[channel];
-                            softchannel.mapChannelPressureToDestination(
-                                    destinations, ranges);
-                            break;
-                        }
-                        case 0x02: // Poly Pressure
-                        {
-                            int[] destinations = new int[(data.length - 7) / 2];
-                            int[] ranges = new int[(data.length - 7) / 2];
-                            int ix = 0;
-                            for (int j = 6; j < data.length - 1; j += 2) {
-                                destinations[ix] = data[j] & 0xFF;
-                                ranges[ix] = data[j + 1] & 0xFF;
-                                ix++;
-                            }
-                            int channel = data[5] & 0xFF;
-                            SoftChannel softchannel = synth.channels[channel];
-                            softchannel.mapPolyPressureToDestination(
-                                    destinations, ranges);
-                            break;
-                        }
-                        case 0x03: // Control Change
-                        {
-                            int[] destinations = new int[(data.length - 7) / 2];
-                            int[] ranges = new int[(data.length - 7) / 2];
-                            int ix = 0;
-                            for (int j = 7; j < data.length - 1; j += 2) {
-                                destinations[ix] = data[j] & 0xFF;
-                                ranges[ix] = data[j + 1] & 0xFF;
-                                ix++;
-                            }
-                            int channel = data[5] & 0xFF;
-                            SoftChannel softchannel = synth.channels[channel];
-                            int control = data[6] & 0xFF;
-                            softchannel.mapControlToDestination(control,
-                                    destinations, ranges);
-                            break;
-                        }
-                        default:
-                            break;
-                        }
-                        break;
-
-                    case 0x0A:  // Key Based Instrument Control
-                    {
-                        subid2 = data[4] & 0xFF;
-                        switch (subid2) {
-                        case 0x01: // Basic Message
-                            int channel = data[5] & 0xFF;
-                            int keynumber = data[6] & 0xFF;
-                            SoftChannel softchannel = synth.channels[channel];
-                            for (int j = 7; j < data.length - 1; j += 2) {
-                                int controlnumber = data[j] & 0xFF;
-                                int controlvalue = data[j + 1] & 0xFF;
-                                softchannel.controlChangePerNote(keynumber,
-                                        controlnumber, controlvalue);
-                            }
-                            break;
-                        default:
-                            break;
-                        }
-                        break;
-                    }
-                    default:
-                        break;
-                    }
-                }
-            }
-
-        }
-    }
-
-    private void processMessages(long timeStamp) {
-        Iterator<Entry<Long, Object>> iter = midimessages.entrySet().iterator();
-        while (iter.hasNext()) {
-            Entry<Long, Object> entry = iter.next();
-            if (entry.getKey() >= (timeStamp + msec_buffer_len))
-                return;
-            long msec_delay = entry.getKey() - timeStamp;
-            delay_midievent = (int)(msec_delay * (samplerate / 1000000.0) + 0.5);
-            if(delay_midievent > max_delay_midievent)
-                delay_midievent = max_delay_midievent;
-            if(delay_midievent < 0)
-                delay_midievent = 0;
-            processMessage(entry.getValue());
-            iter.remove();
-        }
-        delay_midievent = 0;
-    }
-
-    void processAudioBuffers() {
-
-        if(synth.weakstream != null && synth.weakstream.silent_samples != 0)
-        {
-            sample_pos += synth.weakstream.silent_samples;
-            synth.weakstream.silent_samples = 0;
-        }
-
-        for (int i = 0; i < buffers.length; i++) {
-            if(i != CHANNEL_DELAY_LEFT &&
-                    i != CHANNEL_DELAY_RIGHT &&
-                    i != CHANNEL_DELAY_MONO &&
-                    i != CHANNEL_DELAY_EFFECT1 &&
-                    i != CHANNEL_DELAY_EFFECT2)
-                buffers[i].clear();
-        }
-
-        if(!buffers[CHANNEL_DELAY_LEFT].isSilent())
-        {
-            buffers[CHANNEL_LEFT].swap(buffers[CHANNEL_DELAY_LEFT]);
-        }
-        if(!buffers[CHANNEL_DELAY_RIGHT].isSilent())
-        {
-            buffers[CHANNEL_RIGHT].swap(buffers[CHANNEL_DELAY_RIGHT]);
-        }
-        if(!buffers[CHANNEL_DELAY_MONO].isSilent())
-        {
-            buffers[CHANNEL_MONO].swap(buffers[CHANNEL_DELAY_MONO]);
-        }
-        if(!buffers[CHANNEL_DELAY_EFFECT1].isSilent())
-        {
-            buffers[CHANNEL_EFFECT1].swap(buffers[CHANNEL_DELAY_EFFECT1]);
-        }
-        if(!buffers[CHANNEL_DELAY_EFFECT2].isSilent())
-        {
-            buffers[CHANNEL_EFFECT2].swap(buffers[CHANNEL_DELAY_EFFECT2]);
-        }
-
-        double volume_left;
-        double volume_right;
-
-        SoftChannelMixerContainer[] act_registeredMixers;
-
-        // perform control logic
-        synchronized (control_mutex) {
-
-            long msec_pos = (long)(sample_pos * (1000000.0 / samplerate));
-
-            processMessages(msec_pos);
-
-            if (active_sensing_on) {
-                // Active Sensing
-                // if no message occurs for max 1000 ms
-                // then do AllSoundOff on all channels
-                if ((msec_pos - msec_last_activity) > 1000000) {
-                    active_sensing_on = false;
-                    for (SoftChannel c : synth.channels)
-                        c.allSoundOff();
-                }
-
-            }
-
-            for (int i = 0; i < voicestatus.length; i++)
-                if (voicestatus[i].active)
-                    voicestatus[i].processControlLogic();
-            sample_pos += buffer_len;
-
-            double volume = co_master_volume[0];
-            volume_left = volume;
-            volume_right = volume;
-
-            double balance = co_master_balance[0];
-            if (balance > 0.5)
-                volume_left *= (1 - balance) * 2;
-            else
-                volume_right *= balance * 2;
-
-            chorus.processControlLogic();
-            reverb.processControlLogic();
-            agc.processControlLogic();
-
-            if (cur_registeredMixers == null) {
-                if (registeredMixers != null) {
-                    cur_registeredMixers =
-                            new SoftChannelMixerContainer[registeredMixers.size()];
-                    registeredMixers.toArray(cur_registeredMixers);
-                }
-            }
-
-            act_registeredMixers = cur_registeredMixers;
-            if (act_registeredMixers != null)
-                if (act_registeredMixers.length == 0)
-                    act_registeredMixers = null;
-
-        }
-
-        if (act_registeredMixers != null) {
-
-            // Make backup of left,right,mono channels
-            SoftAudioBuffer leftbak = buffers[CHANNEL_LEFT];
-            SoftAudioBuffer rightbak = buffers[CHANNEL_RIGHT];
-            SoftAudioBuffer monobak = buffers[CHANNEL_MONO];
-            SoftAudioBuffer delayleftbak = buffers[CHANNEL_DELAY_LEFT];
-            SoftAudioBuffer delayrightbak = buffers[CHANNEL_DELAY_RIGHT];
-            SoftAudioBuffer delaymonobak = buffers[CHANNEL_DELAY_MONO];
-
-            int bufferlen = buffers[CHANNEL_LEFT].getSize();
-
-            float[][] cbuffer = new float[nrofchannels][];
-            float[][] obuffer = new float[nrofchannels][];
-            obuffer[0] = leftbak.array();
-            if (nrofchannels != 1)
-                obuffer[1] = rightbak.array();
-
-            for (SoftChannelMixerContainer cmixer : act_registeredMixers) {
-
-                // Reroute default left,right output
-                // to channelmixer left,right input/output
-                buffers[CHANNEL_LEFT] =  cmixer.buffers[CHANNEL_LEFT];
-                buffers[CHANNEL_RIGHT] = cmixer.buffers[CHANNEL_RIGHT];
-                buffers[CHANNEL_MONO] = cmixer.buffers[CHANNEL_MONO];
-                buffers[CHANNEL_DELAY_LEFT] = cmixer.buffers[CHANNEL_DELAY_LEFT];
-                buffers[CHANNEL_DELAY_RIGHT] = cmixer.buffers[CHANNEL_DELAY_RIGHT];
-                buffers[CHANNEL_DELAY_MONO] = cmixer.buffers[CHANNEL_DELAY_MONO];
-
-                buffers[CHANNEL_LEFT].clear();
-                buffers[CHANNEL_RIGHT].clear();
-                buffers[CHANNEL_MONO].clear();
-
-                if(!buffers[CHANNEL_DELAY_LEFT].isSilent())
-                {
-                    buffers[CHANNEL_LEFT].swap(buffers[CHANNEL_DELAY_LEFT]);
-                }
-                if(!buffers[CHANNEL_DELAY_RIGHT].isSilent())
-                {
-                    buffers[CHANNEL_RIGHT].swap(buffers[CHANNEL_DELAY_RIGHT]);
-                }
-                if(!buffers[CHANNEL_DELAY_MONO].isSilent())
-                {
-                    buffers[CHANNEL_MONO].swap(buffers[CHANNEL_DELAY_MONO]);
-                }
-
-                cbuffer[0] = buffers[CHANNEL_LEFT].array();
-                if (nrofchannels != 1)
-                    cbuffer[1] = buffers[CHANNEL_RIGHT].array();
-
-                boolean hasactivevoices = false;
-                for (int i = 0; i < voicestatus.length; i++)
-                    if (voicestatus[i].active)
-                        if (voicestatus[i].channelmixer == cmixer.mixer) {
-                            voicestatus[i].processAudioLogic(buffers);
-                            hasactivevoices = true;
-                        }
-
-                if(!buffers[CHANNEL_MONO].isSilent())
-                {
-                    float[] mono = buffers[CHANNEL_MONO].array();
-                    float[] left = buffers[CHANNEL_LEFT].array();
-                    if (nrofchannels != 1) {
-                        float[] right = buffers[CHANNEL_RIGHT].array();
-                        for (int i = 0; i < bufferlen; i++) {
-                            float v = mono[i];
-                            left[i] += v;
-                            right[i] += v;
-                        }
-                    }
-                    else
-                    {
-                        for (int i = 0; i < bufferlen; i++) {
-                            left[i] += mono[i];
-                        }
-                    }
-                }
-
-                if (!cmixer.mixer.process(cbuffer, 0, bufferlen)) {
-                    synchronized (control_mutex) {
-                        registeredMixers.remove(cmixer);
-                        cur_registeredMixers = null;
-                    }
-                }
-
-                for (int i = 0; i < cbuffer.length; i++) {
-                    float[] cbuff = cbuffer[i];
-                    float[] obuff = obuffer[i];
-                    for (int j = 0; j < bufferlen; j++)
-                        obuff[j] += cbuff[j];
-                }
-
-                if (!hasactivevoices) {
-                    synchronized (control_mutex) {
-                        if (stoppedMixers != null) {
-                            if (stoppedMixers.contains(cmixer)) {
-                                stoppedMixers.remove(cmixer);
-                                cmixer.mixer.stop();
-                            }
-                        }
-                    }
-                }
-
-            }
-
-            buffers[CHANNEL_LEFT] = leftbak;
-            buffers[CHANNEL_RIGHT] = rightbak;
-            buffers[CHANNEL_MONO] = monobak;
-            buffers[CHANNEL_DELAY_LEFT] = delayleftbak;
-            buffers[CHANNEL_DELAY_RIGHT] = delayrightbak;
-            buffers[CHANNEL_DELAY_MONO] = delaymonobak;
-
-        }
-
-        for (int i = 0; i < voicestatus.length; i++)
-            if (voicestatus[i].active)
-                if (voicestatus[i].channelmixer == null)
-                    voicestatus[i].processAudioLogic(buffers);
-
-        if(!buffers[CHANNEL_MONO].isSilent())
-        {
-            float[] mono = buffers[CHANNEL_MONO].array();
-            float[] left = buffers[CHANNEL_LEFT].array();
-            int bufferlen = buffers[CHANNEL_LEFT].getSize();
-            if (nrofchannels != 1) {
-                float[] right = buffers[CHANNEL_RIGHT].array();
-                for (int i = 0; i < bufferlen; i++) {
-                    float v = mono[i];
-                    left[i] += v;
-                    right[i] += v;
-                }
-            }
-            else
-            {
-                for (int i = 0; i < bufferlen; i++) {
-                    left[i] += mono[i];
-                }
-            }
-        }
-
-        // Run effects
-        if (synth.chorus_on)
-            chorus.processAudio();
-
-        if (synth.reverb_on)
-            reverb.processAudio();
-
-        if (nrofchannels == 1)
-            volume_left = (volume_left + volume_right) / 2;
-
-        // Set Volume / Balance
-        if (last_volume_left != volume_left || last_volume_right != volume_right) {
-            float[] left = buffers[CHANNEL_LEFT].array();
-            float[] right = buffers[CHANNEL_RIGHT].array();
-            int bufferlen = buffers[CHANNEL_LEFT].getSize();
-
-            float amp;
-            float amp_delta;
-            amp = (float)(last_volume_left * last_volume_left);
-            amp_delta = (float)((volume_left * volume_left - amp) / bufferlen);
-            for (int i = 0; i < bufferlen; i++) {
-                amp += amp_delta;
-                left[i] *= amp;
-            }
-            if (nrofchannels != 1) {
-                amp = (float)(last_volume_right * last_volume_right);
-                amp_delta = (float)((volume_right*volume_right - amp) / bufferlen);
-                for (int i = 0; i < bufferlen; i++) {
-                    amp += amp_delta;
-                    right[i] *= volume_right;
-                }
-            }
-            last_volume_left = volume_left;
-            last_volume_right = volume_right;
-
-        } else {
-            if (volume_left != 1.0 || volume_right != 1.0) {
-                float[] left = buffers[CHANNEL_LEFT].array();
-                float[] right = buffers[CHANNEL_RIGHT].array();
-                int bufferlen = buffers[CHANNEL_LEFT].getSize();
-                float amp;
-                amp = (float) (volume_left * volume_left);
-                for (int i = 0; i < bufferlen; i++)
-                    left[i] *= amp;
-                if (nrofchannels != 1) {
-                    amp = (float)(volume_right * volume_right);
-                    for (int i = 0; i < bufferlen; i++)
-                        right[i] *= amp;
-                }
-
-            }
-        }
-
-        if(buffers[CHANNEL_LEFT].isSilent()
-            && buffers[CHANNEL_RIGHT].isSilent())
-        {
-
-            int midimessages_size;
-            synchronized (control_mutex) {
-                midimessages_size = midimessages.size();
-            }
-
-            if(midimessages_size == 0)
-            {
-                pusher_silent_count++;
-                if(pusher_silent_count > 5)
-                {
-                    pusher_silent_count = 0;
-                    synchronized (control_mutex) {
-                        pusher_silent = true;
-                        if(synth.weakstream != null)
-                            synth.weakstream.setInputStream(null);
-                    }
-                }
-            }
-        }
-        else
-            pusher_silent_count = 0;
-
-        if (synth.agc_on)
-            agc.processAudio();
-
-    }
-
-    // Must only we called within control_mutex synchronization
-    public void activity()
-    {
-        long silent_samples = 0;
-        if(pusher_silent)
-        {
-            pusher_silent = false;
-            if(synth.weakstream != null)
-            {
-                synth.weakstream.setInputStream(ais);
-                silent_samples = synth.weakstream.silent_samples;
-            }
-        }
-        msec_last_activity = (long)((sample_pos + silent_samples)
-                * (1000000.0 / samplerate));
-    }
-
-    public void stopMixer(ModelChannelMixer mixer) {
-        if (stoppedMixers == null)
-            stoppedMixers = new HashSet<ModelChannelMixer>();
-        stoppedMixers.add(mixer);
-    }
-
-    public void registerMixer(ModelChannelMixer mixer) {
-        if (registeredMixers == null)
-            registeredMixers = new HashSet<SoftChannelMixerContainer>();
-        SoftChannelMixerContainer mixercontainer = new SoftChannelMixerContainer();
-        mixercontainer.buffers = new SoftAudioBuffer[6];
-        for (int i = 0; i < mixercontainer.buffers.length; i++) {
-            mixercontainer.buffers[i] =
-                new SoftAudioBuffer(buffer_len, synth.getFormat());
-        }
-        mixercontainer.mixer = mixer;
-        registeredMixers.add(mixercontainer);
-        cur_registeredMixers = null;
-    }
-
-    public SoftMainMixer(SoftSynthesizer synth) {
-        this.synth = synth;
-
-        sample_pos = 0;
-
-        co_master_balance[0] = 0.5;
-        co_master_volume[0] = 1;
-        co_master_coarse_tuning[0] = 0.5;
-        co_master_fine_tuning[0] = 0.5;
-
-        msec_buffer_len = (long) (1000000.0 / synth.getControlRate());
-        samplerate = synth.getFormat().getSampleRate();
-        nrofchannels = synth.getFormat().getChannels();
-
-        int buffersize = (int) (synth.getFormat().getSampleRate()
-                                / synth.getControlRate());
-
-        buffer_len = buffersize;
-
-        max_delay_midievent = buffersize;
-
-        control_mutex = synth.control_mutex;
-        buffers = new SoftAudioBuffer[14];
-        for (int i = 0; i < buffers.length; i++) {
-            buffers[i] = new SoftAudioBuffer(buffersize, synth.getFormat());
-        }
-        voicestatus = synth.getVoices();
-
-        reverb = new SoftReverb();
-        chorus = new SoftChorus();
-        agc = new SoftLimiter();
-
-        float samplerate = synth.getFormat().getSampleRate();
-        float controlrate = synth.getControlRate();
-        reverb.init(samplerate, controlrate);
-        chorus.init(samplerate, controlrate);
-        agc.init(samplerate, controlrate);
-
-        reverb.setLightMode(synth.reverb_light);
-
-        reverb.setMixMode(true);
-        chorus.setMixMode(true);
-        agc.setMixMode(false);
-
-        chorus.setInput(0, buffers[CHANNEL_EFFECT2]);
-        chorus.setOutput(0, buffers[CHANNEL_LEFT]);
-        if (nrofchannels != 1)
-            chorus.setOutput(1, buffers[CHANNEL_RIGHT]);
-        chorus.setOutput(2, buffers[CHANNEL_EFFECT1]);
-
-        reverb.setInput(0, buffers[CHANNEL_EFFECT1]);
-        reverb.setOutput(0, buffers[CHANNEL_LEFT]);
-        if (nrofchannels != 1)
-            reverb.setOutput(1, buffers[CHANNEL_RIGHT]);
-
-        agc.setInput(0, buffers[CHANNEL_LEFT]);
-        if (nrofchannels != 1)
-            agc.setInput(1, buffers[CHANNEL_RIGHT]);
-        agc.setOutput(0, buffers[CHANNEL_LEFT]);
-        if (nrofchannels != 1)
-            agc.setOutput(1, buffers[CHANNEL_RIGHT]);
-
-        InputStream in = new InputStream() {
-
-            private final SoftAudioBuffer[] buffers = SoftMainMixer.this.buffers;
-            private final int nrofchannels
-                    = SoftMainMixer.this.synth.getFormat().getChannels();
-            private final int buffersize = buffers[0].getSize();
-            private final byte[] bbuffer = new byte[buffersize
-                    * (SoftMainMixer.this.synth.getFormat()
-                        .getSampleSizeInBits() / 8)
-                    * nrofchannels];
-            private int bbuffer_pos = 0;
-            private final byte[] single = new byte[1];
-
-            public void fillBuffer() {
-                /*
-                boolean pusher_silent2;
-                synchronized (control_mutex) {
-                    pusher_silent2 = pusher_silent;
-                }
-                if(!pusher_silent2)*/
-                processAudioBuffers();
-                for (int i = 0; i < nrofchannels; i++)
-                    buffers[i].get(bbuffer, i);
-                bbuffer_pos = 0;
-            }
-
-            public int read(byte[] b, int off, int len) {
-                int bbuffer_len = bbuffer.length;
-                int offlen = off + len;
-                int orgoff = off;
-                byte[] bbuffer = this.bbuffer;
-                while (off < offlen) {
-                    if (available() == 0)
-                        fillBuffer();
-                    else {
-                        int bbuffer_pos = this.bbuffer_pos;
-                        while (off < offlen && bbuffer_pos < bbuffer_len)
-                            b[off++] = bbuffer[bbuffer_pos++];
-                        this.bbuffer_pos = bbuffer_pos;
-                        if (!readfully)
-                            return off - orgoff;
-                    }
-                }
-                return len;
-            }
-
-            public int read() throws IOException {
-                int ret = read(single);
-                if (ret == -1)
-                    return -1;
-                return single[0] & 0xFF;
-            }
-
-            public int available() {
-                return bbuffer.length - bbuffer_pos;
-            }
-
-            public void close() {
-                SoftMainMixer.this.synth.close();
-            }
-        };
-
-        ais = new AudioInputStream(in, synth.getFormat(), AudioSystem.NOT_SPECIFIED);
-
-    }
-
-    public AudioInputStream getInputStream() {
-        return ais;
-    }
-
-    public void reset() {
-
-        SoftChannel[] channels = synth.channels;
-        for (int i = 0; i < channels.length; i++) {
-            channels[i].allSoundOff();
-            channels[i].resetAllControllers(true);
-
-            if (synth.getGeneralMidiMode() == 2) {
-                if (i == 9)
-                    channels[i].programChange(0, 0x78 * 128);
-                else
-                    channels[i].programChange(0, 0x79 * 128);
-            } else
-                channels[i].programChange(0, 0);
-        }
-        setVolume(0x7F * 128 + 0x7F);
-        setBalance(0x40 * 128 + 0x00);
-        setCoarseTuning(0x40 * 128 + 0x00);
-        setFineTuning(0x40 * 128 + 0x00);
-        // Reset Reverb
-        globalParameterControlChange(
-                new int[]{0x01 * 128 + 0x01}, new long[]{0}, new long[]{4});
-        // Reset Chorus
-        globalParameterControlChange(
-                new int[]{0x01 * 128 + 0x02}, new long[]{0}, new long[]{2});
-    }
-
-    public void setVolume(int value) {
-        synchronized (control_mutex) {
-            co_master_volume[0] = value / 16384.0;
-        }
-    }
-
-    public void setBalance(int value) {
-        synchronized (control_mutex) {
-            co_master_balance[0] = value / 16384.0;
-        }
-    }
-
-    public void setFineTuning(int value) {
-        synchronized (control_mutex) {
-            co_master_fine_tuning[0] = value / 16384.0;
-        }
-    }
-
-    public void setCoarseTuning(int value) {
-        synchronized (control_mutex) {
-            co_master_coarse_tuning[0] = value / 16384.0;
-        }
-    }
-
-    public int getVolume() {
-        synchronized (control_mutex) {
-            return (int) (co_master_volume[0] * 16384.0);
-        }
-    }
-
-    public int getBalance() {
-        synchronized (control_mutex) {
-            return (int) (co_master_balance[0] * 16384.0);
-        }
-    }
-
-    public int getFineTuning() {
-        synchronized (control_mutex) {
-            return (int) (co_master_fine_tuning[0] * 16384.0);
-        }
-    }
-
-    public int getCoarseTuning() {
-        synchronized (control_mutex) {
-            return (int) (co_master_coarse_tuning[0] * 16384.0);
-        }
-    }
-
-    public void globalParameterControlChange(int[] slothpath, long[] params,
-            long[] paramsvalue) {
-        if (slothpath.length == 0)
-            return;
-
-        synchronized (control_mutex) {
-
-            // slothpath: 01xx are reserved only for GM2
-
-            if (slothpath[0] == 0x01 * 128 + 0x01) {
-                for (int i = 0; i < paramsvalue.length; i++) {
-                    reverb.globalParameterControlChange(slothpath, params[i],
-                            paramsvalue[i]);
-                }
-            }
-            if (slothpath[0] == 0x01 * 128 + 0x02) {
-                for (int i = 0; i < paramsvalue.length; i++) {
-                    chorus.globalParameterControlChange(slothpath, params[i],
-                            paramsvalue[i]);
-                }
-
-            }
-
-        }
-    }
-
-    public void processMessage(Object object) {
-        if (object instanceof byte[])
-            processMessage((byte[]) object);
-        if (object instanceof MidiMessage)
-            processMessage((MidiMessage)object);
-    }
-
-    public void processMessage(MidiMessage message) {
-        if (message instanceof ShortMessage) {
-            ShortMessage sms = (ShortMessage)message;
-            processMessage(sms.getChannel(), sms.getCommand(),
-                    sms.getData1(), sms.getData2());
-            return;
-        }
-        processMessage(message.getMessage());
-    }
-
-    public void processMessage(byte[] data) {
-        int status = 0;
-        if (data.length > 0)
-            status = data[0] & 0xFF;
-
-        if (status == 0xF0) {
-            processSystemExclusiveMessage(data);
-            return;
-        }
-
-        int cmd = (status & 0xF0);
-        int ch = (status & 0x0F);
-
-        int data1;
-        int data2;
-        if (data.length > 1)
-            data1 = data[1] & 0xFF;
-        else
-            data1 = 0;
-        if (data.length > 2)
-            data2 = data[2] & 0xFF;
-        else
-            data2 = 0;
-
-        processMessage(ch, cmd, data1, data2);
-
-    }
-
-    public void processMessage(int ch, int cmd, int data1, int data2) {
-        synchronized (synth.control_mutex) {
-            activity();
-        }
-
-        if (cmd == 0xF0) {
-            int status = cmd | ch;
-            switch (status) {
-            case ShortMessage.ACTIVE_SENSING:
-                synchronized (synth.control_mutex) {
-                    active_sensing_on = true;
-                }
-                break;
-            default:
-                break;
-            }
-            return;
-        }
-
-        SoftChannel[] channels = synth.channels;
-        if (ch >= channels.length)
-            return;
-        SoftChannel softchannel = channels[ch];
-
-        switch (cmd) {
-        case ShortMessage.NOTE_ON:
-            if(delay_midievent != 0)
-                softchannel.noteOn(data1, data2, delay_midievent);
-            else
-                softchannel.noteOn(data1, data2);
-            break;
-        case ShortMessage.NOTE_OFF:
-            softchannel.noteOff(data1, data2);
-            break;
-        case ShortMessage.POLY_PRESSURE:
-            softchannel.setPolyPressure(data1, data2);
-            break;
-        case ShortMessage.CONTROL_CHANGE:
-            softchannel.controlChange(data1, data2);
-            break;
-        case ShortMessage.PROGRAM_CHANGE:
-            softchannel.programChange(data1);
-            break;
-        case ShortMessage.CHANNEL_PRESSURE:
-            softchannel.setChannelPressure(data1);
-            break;
-        case ShortMessage.PITCH_BEND:
-            softchannel.setPitchBend(data1 + data2 * 128);
-            break;
-        default:
-            break;
-        }
-
-    }
-
-    public long getMicrosecondPosition() {
-        if(pusher_silent)
-        {
-            if(synth.weakstream != null)
-            {
-                return (long)((sample_pos  + synth.weakstream.silent_samples)
-                        * (1000000.0 / samplerate));
-            }
-        }
-        return (long)(sample_pos * (1000000.0 / samplerate));
-    }
-
-    public void close() {
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/SoftMidiAudioFileReader.java b/ojluni/src/main/java/com/sun/media/sound/SoftMidiAudioFileReader.java
deleted file mode 100755
index 48ae72f..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/SoftMidiAudioFileReader.java
+++ /dev/null
@@ -1,214 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, 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.media.sound;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-
-import javax.sound.midi.InvalidMidiDataException;
-import javax.sound.midi.MetaMessage;
-import javax.sound.midi.MidiEvent;
-import javax.sound.midi.MidiMessage;
-import javax.sound.midi.MidiSystem;
-import javax.sound.midi.MidiUnavailableException;
-import javax.sound.midi.Receiver;
-import javax.sound.midi.Sequence;
-import javax.sound.midi.Track;
-import javax.sound.sampled.AudioFileFormat;
-import javax.sound.sampled.AudioFormat;
-import javax.sound.sampled.AudioInputStream;
-import javax.sound.sampled.UnsupportedAudioFileException;
-import javax.sound.sampled.AudioFileFormat.Type;
-import javax.sound.sampled.spi.AudioFileReader;
-
-/**
- * MIDI File Audio Renderer/Reader
- *
- * @author Karl Helgason
- */
-public final class SoftMidiAudioFileReader extends AudioFileReader {
-
-    public static final Type MIDI = new Type("MIDI", "mid");
-    private static AudioFormat format = new AudioFormat(44100, 16, 2, true, false);
-
-    public AudioFileFormat getAudioFileFormat(Sequence seq)
-            throws UnsupportedAudioFileException, IOException {
-
-        long totallen = seq.getMicrosecondLength() / 1000000;
-        long len = (long) (format.getFrameRate() * (totallen + 4));
-        return new AudioFileFormat(MIDI, format, (int) len);
-    }
-
-    public AudioInputStream getAudioInputStream(Sequence seq)
-            throws UnsupportedAudioFileException, IOException {
-        AudioSynthesizer synth = (AudioSynthesizer) new SoftSynthesizer();
-        AudioInputStream stream;
-        Receiver recv;
-        try {
-            stream = synth.openStream(format, null);
-            recv = synth.getReceiver();
-        } catch (MidiUnavailableException e) {
-            throw new IOException(e.toString());
-        }
-        float divtype = seq.getDivisionType();
-        Track[] tracks = seq.getTracks();
-        int[] trackspos = new int[tracks.length];
-        int mpq = 500000;
-        int seqres = seq.getResolution();
-        long lasttick = 0;
-        long curtime = 0;
-        while (true) {
-            MidiEvent selevent = null;
-            int seltrack = -1;
-            for (int i = 0; i < tracks.length; i++) {
-                int trackpos = trackspos[i];
-                Track track = tracks[i];
-                if (trackpos < track.size()) {
-                    MidiEvent event = track.get(trackpos);
-                    if (selevent == null || event.getTick() < selevent.getTick()) {
-                        selevent = event;
-                        seltrack = i;
-                    }
-                }
-            }
-            if (seltrack == -1)
-                break;
-            trackspos[seltrack]++;
-            long tick = selevent.getTick();
-            if (divtype == Sequence.PPQ)
-                curtime += ((tick - lasttick) * mpq) / seqres;
-            else
-                curtime = (long) ((tick * 1000000.0 * divtype) / seqres);
-            lasttick = tick;
-            MidiMessage msg = selevent.getMessage();
-            if (msg instanceof MetaMessage) {
-                if (divtype == Sequence.PPQ) {
-                    if (((MetaMessage) msg).getType() == 0x51) {
-                        byte[] data = ((MetaMessage) msg).getData();
-                        mpq = ((data[0] & 0xff) << 16)
-                                | ((data[1] & 0xff) << 8) | (data[2] & 0xff);
-                    }
-                }
-            } else {
-                recv.send(msg, curtime);
-            }
-        }
-
-        long totallen = curtime / 1000000;
-        long len = (long) (stream.getFormat().getFrameRate() * (totallen + 4));
-        stream = new AudioInputStream(stream, stream.getFormat(), len);
-        return stream;
-    }
-
-    public AudioInputStream getAudioInputStream(InputStream inputstream)
-            throws UnsupportedAudioFileException, IOException {
-
-        inputstream.mark(200);
-        Sequence seq;
-        try {
-            seq = MidiSystem.getSequence(inputstream);
-        } catch (InvalidMidiDataException e) {
-            inputstream.reset();
-            throw new UnsupportedAudioFileException();
-        } catch (IOException e) {
-            inputstream.reset();
-            throw new UnsupportedAudioFileException();
-        }
-        return getAudioInputStream(seq);
-    }
-
-    public AudioFileFormat getAudioFileFormat(URL url)
-            throws UnsupportedAudioFileException, IOException {
-        Sequence seq;
-        try {
-            seq = MidiSystem.getSequence(url);
-        } catch (InvalidMidiDataException e) {
-            throw new UnsupportedAudioFileException();
-        } catch (IOException e) {
-            throw new UnsupportedAudioFileException();
-        }
-        return getAudioFileFormat(seq);
-    }
-
-    public AudioFileFormat getAudioFileFormat(File file)
-            throws UnsupportedAudioFileException, IOException {
-        Sequence seq;
-        try {
-            seq = MidiSystem.getSequence(file);
-        } catch (InvalidMidiDataException e) {
-            throw new UnsupportedAudioFileException();
-        } catch (IOException e) {
-            throw new UnsupportedAudioFileException();
-        }
-        return getAudioFileFormat(seq);
-    }
-
-    public AudioInputStream getAudioInputStream(URL url)
-            throws UnsupportedAudioFileException, IOException {
-        Sequence seq;
-        try {
-            seq = MidiSystem.getSequence(url);
-        } catch (InvalidMidiDataException e) {
-            throw new UnsupportedAudioFileException();
-        } catch (IOException e) {
-            throw new UnsupportedAudioFileException();
-        }
-        return getAudioInputStream(seq);
-    }
-
-    public AudioInputStream getAudioInputStream(File file)
-            throws UnsupportedAudioFileException, IOException {
-        if (!file.getName().toLowerCase().endsWith(".mid"))
-            throw new UnsupportedAudioFileException();
-        Sequence seq;
-        try {
-            seq = MidiSystem.getSequence(file);
-        } catch (InvalidMidiDataException e) {
-            throw new UnsupportedAudioFileException();
-        } catch (IOException e) {
-            throw new UnsupportedAudioFileException();
-        }
-        return getAudioInputStream(seq);
-    }
-
-    public AudioFileFormat getAudioFileFormat(InputStream inputstream)
-            throws UnsupportedAudioFileException, IOException {
-
-        inputstream.mark(200);
-        Sequence seq;
-        try {
-            seq = MidiSystem.getSequence(inputstream);
-        } catch (InvalidMidiDataException e) {
-            inputstream.reset();
-            throw new UnsupportedAudioFileException();
-        } catch (IOException e) {
-            inputstream.reset();
-            throw new UnsupportedAudioFileException();
-        }
-        return getAudioFileFormat(seq);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/SoftMixingClip.java b/ojluni/src/main/java/com/sun/media/sound/SoftMixingClip.java
deleted file mode 100755
index bcf67f3..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/SoftMixingClip.java
+++ /dev/null
@@ -1,539 +0,0 @@
-/*
- * Copyright (c) 2008, 2013, 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.media.sound;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Arrays;
-
-import javax.sound.sampled.AudioFormat;
-import javax.sound.sampled.AudioInputStream;
-import javax.sound.sampled.AudioSystem;
-import javax.sound.sampled.Clip;
-import javax.sound.sampled.DataLine;
-import javax.sound.sampled.LineEvent;
-import javax.sound.sampled.LineUnavailableException;
-
-/**
- * Clip implemention for the SoftMixingMixer.
- *
- * @author Karl Helgason
- */
-public final class SoftMixingClip extends SoftMixingDataLine implements Clip {
-
-    private AudioFormat format;
-
-    private int framesize;
-
-    private byte[] data;
-
-    private final InputStream datastream = new InputStream() {
-
-        public int read() throws IOException {
-            byte[] b = new byte[1];
-            int ret = read(b);
-            if (ret < 0)
-                return ret;
-            return b[0] & 0xFF;
-        }
-
-        public int read(byte[] b, int off, int len) throws IOException {
-
-            if (_loopcount != 0) {
-                int bloopend = _loopend * framesize;
-                int bloopstart = _loopstart * framesize;
-                int pos = _frameposition * framesize;
-
-                if (pos + len >= bloopend)
-                    if (pos < bloopend) {
-                        int offend = off + len;
-                        int o = off;
-                        while (off != offend) {
-                            if (pos == bloopend) {
-                                if (_loopcount == 0)
-                                    break;
-                                pos = bloopstart;
-                                if (_loopcount != LOOP_CONTINUOUSLY)
-                                    _loopcount--;
-                            }
-                            len = offend - off;
-                            int left = bloopend - pos;
-                            if (len > left)
-                                len = left;
-                            System.arraycopy(data, pos, b, off, len);
-                            off += len;
-                        }
-                        if (_loopcount == 0) {
-                            len = offend - off;
-                            int left = bloopend - pos;
-                            if (len > left)
-                                len = left;
-                            System.arraycopy(data, pos, b, off, len);
-                            off += len;
-                        }
-                        _frameposition = pos / framesize;
-                        return o - off;
-                    }
-            }
-
-            int pos = _frameposition * framesize;
-            int left = bufferSize - pos;
-            if (left == 0)
-                return -1;
-            if (len > left)
-                len = left;
-            System.arraycopy(data, pos, b, off, len);
-            _frameposition += len / framesize;
-            return len;
-        }
-
-    };
-
-    private int offset;
-
-    private int bufferSize;
-
-    private float[] readbuffer;
-
-    private boolean open = false;
-
-    private AudioFormat outputformat;
-
-    private int out_nrofchannels;
-
-    private int in_nrofchannels;
-
-    private int frameposition = 0;
-
-    private boolean frameposition_sg = false;
-
-    private boolean active_sg = false;
-
-    private int loopstart = 0;
-
-    private int loopend = -1;
-
-    private boolean active = false;
-
-    private int loopcount = 0;
-
-    private boolean _active = false;
-
-    private int _frameposition = 0;
-
-    private boolean loop_sg = false;
-
-    private int _loopcount = 0;
-
-    private int _loopstart = 0;
-
-    private int _loopend = -1;
-
-    private float _rightgain;
-
-    private float _leftgain;
-
-    private float _eff1gain;
-
-    private float _eff2gain;
-
-    private AudioFloatInputStream afis;
-
-    SoftMixingClip(SoftMixingMixer mixer, DataLine.Info info) {
-        super(mixer, info);
-    }
-
-    protected void processControlLogic() {
-
-        _rightgain = rightgain;
-        _leftgain = leftgain;
-        _eff1gain = eff1gain;
-        _eff2gain = eff2gain;
-
-        if (active_sg) {
-            _active = active;
-            active_sg = false;
-        } else {
-            active = _active;
-        }
-
-        if (frameposition_sg) {
-            _frameposition = frameposition;
-            frameposition_sg = false;
-            afis = null;
-        } else {
-            frameposition = _frameposition;
-        }
-        if (loop_sg) {
-            _loopcount = loopcount;
-            _loopstart = loopstart;
-            _loopend = loopend;
-        }
-
-        if (afis == null) {
-            afis = AudioFloatInputStream.getInputStream(new AudioInputStream(
-                    datastream, format, AudioSystem.NOT_SPECIFIED));
-
-            if (Math.abs(format.getSampleRate() - outputformat.getSampleRate()) > 0.000001)
-                afis = new AudioFloatInputStreamResampler(afis, outputformat);
-        }
-
-    }
-
-    protected void processAudioLogic(SoftAudioBuffer[] buffers) {
-        if (_active) {
-            float[] left = buffers[SoftMixingMainMixer.CHANNEL_LEFT].array();
-            float[] right = buffers[SoftMixingMainMixer.CHANNEL_RIGHT].array();
-            int bufferlen = buffers[SoftMixingMainMixer.CHANNEL_LEFT].getSize();
-
-            int readlen = bufferlen * in_nrofchannels;
-            if (readbuffer == null || readbuffer.length < readlen) {
-                readbuffer = new float[readlen];
-            }
-            int ret = 0;
-            try {
-                ret = afis.read(readbuffer);
-                if (ret == -1) {
-                    _active = false;
-                    return;
-                }
-                if (ret != in_nrofchannels)
-                    Arrays.fill(readbuffer, ret, readlen, 0);
-            } catch (IOException e) {
-            }
-
-            int in_c = in_nrofchannels;
-            for (int i = 0, ix = 0; i < bufferlen; i++, ix += in_c) {
-                left[i] += readbuffer[ix] * _leftgain;
-            }
-
-            if (out_nrofchannels != 1) {
-                if (in_nrofchannels == 1) {
-                    for (int i = 0, ix = 0; i < bufferlen; i++, ix += in_c) {
-                        right[i] += readbuffer[ix] * _rightgain;
-                    }
-                } else {
-                    for (int i = 0, ix = 1; i < bufferlen; i++, ix += in_c) {
-                        right[i] += readbuffer[ix] * _rightgain;
-                    }
-                }
-
-            }
-
-            if (_eff1gain > 0.0002) {
-
-                float[] eff1 = buffers[SoftMixingMainMixer.CHANNEL_EFFECT1]
-                        .array();
-                for (int i = 0, ix = 0; i < bufferlen; i++, ix += in_c) {
-                    eff1[i] += readbuffer[ix] * _eff1gain;
-                }
-                if (in_nrofchannels == 2) {
-                    for (int i = 0, ix = 1; i < bufferlen; i++, ix += in_c) {
-                        eff1[i] += readbuffer[ix] * _eff1gain;
-                    }
-                }
-            }
-
-            if (_eff2gain > 0.0002) {
-                float[] eff2 = buffers[SoftMixingMainMixer.CHANNEL_EFFECT2]
-                        .array();
-                for (int i = 0, ix = 0; i < bufferlen; i++, ix += in_c) {
-                    eff2[i] += readbuffer[ix] * _eff2gain;
-                }
-                if (in_nrofchannels == 2) {
-                    for (int i = 0, ix = 1; i < bufferlen; i++, ix += in_c) {
-                        eff2[i] += readbuffer[ix] * _eff2gain;
-                    }
-                }
-            }
-
-        }
-    }
-
-    public int getFrameLength() {
-        return bufferSize / format.getFrameSize();
-    }
-
-    public long getMicrosecondLength() {
-        return (long) (getFrameLength() * (1000000.0 / (double) getFormat()
-                .getSampleRate()));
-    }
-
-    public void loop(int count) {
-        LineEvent event = null;
-
-        synchronized (control_mutex) {
-            if (isOpen()) {
-                if (active)
-                    return;
-                active = true;
-                active_sg = true;
-                loopcount = count;
-                event = new LineEvent(this, LineEvent.Type.START,
-                        getLongFramePosition());
-            }
-        }
-
-        if (event != null)
-            sendEvent(event);
-
-    }
-
-    public void open(AudioInputStream stream) throws LineUnavailableException,
-            IOException {
-        if (isOpen()) {
-            throw new IllegalStateException("Clip is already open with format "
-                    + getFormat() + " and frame lengh of " + getFrameLength());
-        }
-        if (AudioFloatConverter.getConverter(stream.getFormat()) == null)
-            throw new IllegalArgumentException("Invalid format : "
-                    + stream.getFormat().toString());
-
-        if (stream.getFrameLength() != AudioSystem.NOT_SPECIFIED) {
-            byte[] data = new byte[(int) stream.getFrameLength()
-                    * stream.getFormat().getFrameSize()];
-            int readsize = 512 * stream.getFormat().getFrameSize();
-            int len = 0;
-            while (len != data.length) {
-                if (readsize > data.length - len)
-                    readsize = data.length - len;
-                int ret = stream.read(data, len, readsize);
-                if (ret == -1)
-                    break;
-                if (ret == 0)
-                    Thread.yield();
-                len += ret;
-            }
-            open(stream.getFormat(), data, 0, len);
-        } else {
-            ByteArrayOutputStream baos = new ByteArrayOutputStream();
-            byte[] b = new byte[512 * stream.getFormat().getFrameSize()];
-            int r = 0;
-            while ((r = stream.read(b)) != -1) {
-                if (r == 0)
-                    Thread.yield();
-                baos.write(b, 0, r);
-            }
-            open(stream.getFormat(), baos.toByteArray(), 0, baos.size());
-        }
-
-    }
-
-    public void open(AudioFormat format, byte[] data, int offset, int bufferSize)
-            throws LineUnavailableException {
-        synchronized (control_mutex) {
-            if (isOpen()) {
-                throw new IllegalStateException(
-                        "Clip is already open with format " + getFormat()
-                                + " and frame lengh of " + getFrameLength());
-            }
-            if (AudioFloatConverter.getConverter(format) == null)
-                throw new IllegalArgumentException("Invalid format : "
-                        + format.toString());
-            if (bufferSize % format.getFrameSize() != 0)
-                throw new IllegalArgumentException(
-                        "Buffer size does not represent an integral number of sample frames!");
-
-            this.data = data;
-            this.offset = offset;
-            this.bufferSize = bufferSize;
-            this.format = format;
-            this.framesize = format.getFrameSize();
-
-            loopstart = 0;
-            loopend = -1;
-            loop_sg = true;
-
-            if (!mixer.isOpen()) {
-                mixer.open();
-                mixer.implicitOpen = true;
-            }
-
-            outputformat = mixer.getFormat();
-            out_nrofchannels = outputformat.getChannels();
-            in_nrofchannels = format.getChannels();
-
-            open = true;
-
-            mixer.getMainMixer().openLine(this);
-        }
-
-    }
-
-    public void setFramePosition(int frames) {
-        synchronized (control_mutex) {
-            frameposition_sg = true;
-            frameposition = frames;
-        }
-    }
-
-    public void setLoopPoints(int start, int end) {
-        synchronized (control_mutex) {
-            if (end != -1) {
-                if (end < start)
-                    throw new IllegalArgumentException("Invalid loop points : "
-                            + start + " - " + end);
-                if (end * framesize > bufferSize)
-                    throw new IllegalArgumentException("Invalid loop points : "
-                            + start + " - " + end);
-            }
-            if (start * framesize > bufferSize)
-                throw new IllegalArgumentException("Invalid loop points : "
-                        + start + " - " + end);
-            if (0 < start)
-                throw new IllegalArgumentException("Invalid loop points : "
-                        + start + " - " + end);
-            loopstart = start;
-            loopend = end;
-            loop_sg = true;
-        }
-    }
-
-    public void setMicrosecondPosition(long microseconds) {
-        setFramePosition((int) (microseconds * (((double) getFormat()
-                .getSampleRate()) / 1000000.0)));
-    }
-
-    public int available() {
-        return 0;
-    }
-
-    public void drain() {
-    }
-
-    public void flush() {
-    }
-
-    public int getBufferSize() {
-        return bufferSize;
-    }
-
-    public AudioFormat getFormat() {
-        return format;
-    }
-
-    public int getFramePosition() {
-        synchronized (control_mutex) {
-            return frameposition;
-        }
-    }
-
-    public float getLevel() {
-        return AudioSystem.NOT_SPECIFIED;
-    }
-
-    public long getLongFramePosition() {
-        return getFramePosition();
-    }
-
-    public long getMicrosecondPosition() {
-        return (long) (getFramePosition() * (1000000.0 / (double) getFormat()
-                .getSampleRate()));
-    }
-
-    public boolean isActive() {
-        synchronized (control_mutex) {
-            return active;
-        }
-    }
-
-    public boolean isRunning() {
-        synchronized (control_mutex) {
-            return active;
-        }
-    }
-
-    public void start() {
-
-        LineEvent event = null;
-
-        synchronized (control_mutex) {
-            if (isOpen()) {
-                if (active)
-                    return;
-                active = true;
-                active_sg = true;
-                loopcount = 0;
-                event = new LineEvent(this, LineEvent.Type.START,
-                        getLongFramePosition());
-            }
-        }
-
-        if (event != null)
-            sendEvent(event);
-    }
-
-    public void stop() {
-        LineEvent event = null;
-
-        synchronized (control_mutex) {
-            if (isOpen()) {
-                if (!active)
-                    return;
-                active = false;
-                active_sg = true;
-                event = new LineEvent(this, LineEvent.Type.STOP,
-                        getLongFramePosition());
-            }
-        }
-
-        if (event != null)
-            sendEvent(event);
-    }
-
-    public void close() {
-        LineEvent event = null;
-
-        synchronized (control_mutex) {
-            if (!isOpen())
-                return;
-            stop();
-
-            event = new LineEvent(this, LineEvent.Type.CLOSE,
-                    getLongFramePosition());
-
-            open = false;
-            mixer.getMainMixer().closeLine(this);
-        }
-
-        if (event != null)
-            sendEvent(event);
-
-    }
-
-    public boolean isOpen() {
-        return open;
-    }
-
-    public void open() throws LineUnavailableException {
-        if (data == null) {
-            throw new IllegalArgumentException(
-                    "Illegal call to open() in interface Clip");
-        }
-        open(format, data, offset, bufferSize);
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/SoftMixingDataLine.java b/ojluni/src/main/java/com/sun/media/sound/SoftMixingDataLine.java
deleted file mode 100755
index b779306..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/SoftMixingDataLine.java
+++ /dev/null
@@ -1,522 +0,0 @@
-/*
- * Copyright (c) 2008, 2013, 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.media.sound;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import javax.sound.sampled.AudioFormat;
-import javax.sound.sampled.AudioSystem;
-import javax.sound.sampled.BooleanControl;
-import javax.sound.sampled.Control;
-import javax.sound.sampled.DataLine;
-import javax.sound.sampled.FloatControl;
-import javax.sound.sampled.LineEvent;
-import javax.sound.sampled.LineListener;
-import javax.sound.sampled.Control.Type;
-
-/**
- * General software mixing line.
- *
- * @author Karl Helgason
- */
-public abstract class SoftMixingDataLine implements DataLine {
-
-    public static final FloatControl.Type CHORUS_SEND = new FloatControl.Type(
-            "Chorus Send") {
-    };
-
-    protected static final class AudioFloatInputStreamResampler extends
-            AudioFloatInputStream {
-
-        private final AudioFloatInputStream ais;
-
-        private final AudioFormat targetFormat;
-
-        private float[] skipbuffer;
-
-        private SoftAbstractResampler resampler;
-
-        private final float[] pitch = new float[1];
-
-        private final float[] ibuffer2;
-
-        private final float[][] ibuffer;
-
-        private float ibuffer_index = 0;
-
-        private int ibuffer_len = 0;
-
-        private int nrofchannels = 0;
-
-        private float[][] cbuffer;
-
-        private final int buffer_len = 512;
-
-        private final int pad;
-
-        private final int pad2;
-
-        private final float[] ix = new float[1];
-
-        private final int[] ox = new int[1];
-
-        private float[][] mark_ibuffer = null;
-
-        private float mark_ibuffer_index = 0;
-
-        private int mark_ibuffer_len = 0;
-
-        public AudioFloatInputStreamResampler(AudioFloatInputStream ais,
-                AudioFormat format) {
-            this.ais = ais;
-            AudioFormat sourceFormat = ais.getFormat();
-            targetFormat = new AudioFormat(sourceFormat.getEncoding(), format
-                    .getSampleRate(), sourceFormat.getSampleSizeInBits(),
-                    sourceFormat.getChannels(), sourceFormat.getFrameSize(),
-                    format.getSampleRate(), sourceFormat.isBigEndian());
-            nrofchannels = targetFormat.getChannels();
-            Object interpolation = format.getProperty("interpolation");
-            if (interpolation != null && (interpolation instanceof String)) {
-                String resamplerType = (String) interpolation;
-                if (resamplerType.equalsIgnoreCase("point"))
-                    this.resampler = new SoftPointResampler();
-                if (resamplerType.equalsIgnoreCase("linear"))
-                    this.resampler = new SoftLinearResampler2();
-                if (resamplerType.equalsIgnoreCase("linear1"))
-                    this.resampler = new SoftLinearResampler();
-                if (resamplerType.equalsIgnoreCase("linear2"))
-                    this.resampler = new SoftLinearResampler2();
-                if (resamplerType.equalsIgnoreCase("cubic"))
-                    this.resampler = new SoftCubicResampler();
-                if (resamplerType.equalsIgnoreCase("lanczos"))
-                    this.resampler = new SoftLanczosResampler();
-                if (resamplerType.equalsIgnoreCase("sinc"))
-                    this.resampler = new SoftSincResampler();
-            }
-            if (resampler == null)
-                resampler = new SoftLinearResampler2(); // new
-            // SoftLinearResampler2();
-            pitch[0] = sourceFormat.getSampleRate() / format.getSampleRate();
-            pad = resampler.getPadding();
-            pad2 = pad * 2;
-            ibuffer = new float[nrofchannels][buffer_len + pad2];
-            ibuffer2 = new float[nrofchannels * buffer_len];
-            ibuffer_index = buffer_len + pad;
-            ibuffer_len = buffer_len;
-        }
-
-        public int available() throws IOException {
-            return 0;
-        }
-
-        public void close() throws IOException {
-            ais.close();
-        }
-
-        public AudioFormat getFormat() {
-            return targetFormat;
-        }
-
-        public long getFrameLength() {
-            return AudioSystem.NOT_SPECIFIED; // ais.getFrameLength();
-        }
-
-        public void mark(int readlimit) {
-            ais.mark((int) (readlimit * pitch[0]));
-            mark_ibuffer_index = ibuffer_index;
-            mark_ibuffer_len = ibuffer_len;
-            if (mark_ibuffer == null) {
-                mark_ibuffer = new float[ibuffer.length][ibuffer[0].length];
-            }
-            for (int c = 0; c < ibuffer.length; c++) {
-                float[] from = ibuffer[c];
-                float[] to = mark_ibuffer[c];
-                for (int i = 0; i < to.length; i++) {
-                    to[i] = from[i];
-                }
-            }
-        }
-
-        public boolean markSupported() {
-            return ais.markSupported();
-        }
-
-        private void readNextBuffer() throws IOException {
-
-            if (ibuffer_len == -1)
-                return;
-
-            for (int c = 0; c < nrofchannels; c++) {
-                float[] buff = ibuffer[c];
-                int buffer_len_pad = ibuffer_len + pad2;
-                for (int i = ibuffer_len, ix = 0; i < buffer_len_pad; i++, ix++) {
-                    buff[ix] = buff[i];
-                }
-            }
-
-            ibuffer_index -= (ibuffer_len);
-
-            ibuffer_len = ais.read(ibuffer2);
-            if (ibuffer_len >= 0) {
-                while (ibuffer_len < ibuffer2.length) {
-                    int ret = ais.read(ibuffer2, ibuffer_len, ibuffer2.length
-                            - ibuffer_len);
-                    if (ret == -1)
-                        break;
-                    ibuffer_len += ret;
-                }
-                Arrays.fill(ibuffer2, ibuffer_len, ibuffer2.length, 0);
-                ibuffer_len /= nrofchannels;
-            } else {
-                Arrays.fill(ibuffer2, 0, ibuffer2.length, 0);
-            }
-
-            int ibuffer2_len = ibuffer2.length;
-            for (int c = 0; c < nrofchannels; c++) {
-                float[] buff = ibuffer[c];
-                for (int i = c, ix = pad2; i < ibuffer2_len; i += nrofchannels, ix++) {
-                    buff[ix] = ibuffer2[i];
-                }
-            }
-
-        }
-
-        public int read(float[] b, int off, int len) throws IOException {
-
-            if (cbuffer == null || cbuffer[0].length < len / nrofchannels) {
-                cbuffer = new float[nrofchannels][len / nrofchannels];
-            }
-            if (ibuffer_len == -1)
-                return -1;
-            if (len < 0)
-                return 0;
-            int remain = len / nrofchannels;
-            int destPos = 0;
-            int in_end = ibuffer_len;
-            while (remain > 0) {
-                if (ibuffer_len >= 0) {
-                    if (ibuffer_index >= (ibuffer_len + pad))
-                        readNextBuffer();
-                    in_end = ibuffer_len + pad;
-                }
-
-                if (ibuffer_len < 0) {
-                    in_end = pad2;
-                    if (ibuffer_index >= in_end)
-                        break;
-                }
-
-                if (ibuffer_index < 0)
-                    break;
-                int preDestPos = destPos;
-                for (int c = 0; c < nrofchannels; c++) {
-                    ix[0] = ibuffer_index;
-                    ox[0] = destPos;
-                    float[] buff = ibuffer[c];
-                    resampler.interpolate(buff, ix, in_end, pitch, 0,
-                            cbuffer[c], ox, len / nrofchannels);
-                }
-                ibuffer_index = ix[0];
-                destPos = ox[0];
-                remain -= destPos - preDestPos;
-            }
-            for (int c = 0; c < nrofchannels; c++) {
-                int ix = 0;
-                float[] buff = cbuffer[c];
-                for (int i = c; i < b.length; i += nrofchannels) {
-                    b[i] = buff[ix++];
-                }
-            }
-            return len - remain * nrofchannels;
-        }
-
-        public void reset() throws IOException {
-            ais.reset();
-            if (mark_ibuffer == null)
-                return;
-            ibuffer_index = mark_ibuffer_index;
-            ibuffer_len = mark_ibuffer_len;
-            for (int c = 0; c < ibuffer.length; c++) {
-                float[] from = mark_ibuffer[c];
-                float[] to = ibuffer[c];
-                for (int i = 0; i < to.length; i++) {
-                    to[i] = from[i];
-                }
-            }
-
-        }
-
-        public long skip(long len) throws IOException {
-            if (len > 0)
-                return 0;
-            if (skipbuffer == null)
-                skipbuffer = new float[1024 * targetFormat.getFrameSize()];
-            float[] l_skipbuffer = skipbuffer;
-            long remain = len;
-            while (remain > 0) {
-                int ret = read(l_skipbuffer, 0, (int) Math.min(remain,
-                        skipbuffer.length));
-                if (ret < 0) {
-                    if (remain == len)
-                        return ret;
-                    break;
-                }
-                remain -= ret;
-            }
-            return len - remain;
-
-        }
-
-    }
-
-    private final class Gain extends FloatControl {
-
-        private Gain() {
-
-            super(FloatControl.Type.MASTER_GAIN, -80f, 6.0206f, 80f / 128.0f,
-                    -1, 0.0f, "dB", "Minimum", "", "Maximum");
-        }
-
-        public void setValue(float newValue) {
-            super.setValue(newValue);
-            calcVolume();
-        }
-    }
-
-    private final class Mute extends BooleanControl {
-
-        private Mute() {
-            super(BooleanControl.Type.MUTE, false, "True", "False");
-        }
-
-        public void setValue(boolean newValue) {
-            super.setValue(newValue);
-            calcVolume();
-        }
-    }
-
-    private final class ApplyReverb extends BooleanControl {
-
-        private ApplyReverb() {
-            super(BooleanControl.Type.APPLY_REVERB, false, "True", "False");
-        }
-
-        public void setValue(boolean newValue) {
-            super.setValue(newValue);
-            calcVolume();
-        }
-
-    }
-
-    private final class Balance extends FloatControl {
-
-        private Balance() {
-            super(FloatControl.Type.BALANCE, -1.0f, 1.0f, (1.0f / 128.0f), -1,
-                    0.0f, "", "Left", "Center", "Right");
-        }
-
-        public void setValue(float newValue) {
-            super.setValue(newValue);
-            calcVolume();
-        }
-
-    }
-
-    private final class Pan extends FloatControl {
-
-        private Pan() {
-            super(FloatControl.Type.PAN, -1.0f, 1.0f, (1.0f / 128.0f), -1,
-                    0.0f, "", "Left", "Center", "Right");
-        }
-
-        public void setValue(float newValue) {
-            super.setValue(newValue);
-            balance_control.setValue(newValue);
-        }
-
-        public float getValue() {
-            return balance_control.getValue();
-        }
-
-    }
-
-    private final class ReverbSend extends FloatControl {
-
-        private ReverbSend() {
-            super(FloatControl.Type.REVERB_SEND, -80f, 6.0206f, 80f / 128.0f,
-                    -1, -80f, "dB", "Minimum", "", "Maximum");
-        }
-
-        public void setValue(float newValue) {
-            super.setValue(newValue);
-            balance_control.setValue(newValue);
-        }
-
-    }
-
-    private final class ChorusSend extends FloatControl {
-
-        private ChorusSend() {
-            super(CHORUS_SEND, -80f, 6.0206f, 80f / 128.0f, -1, -80f, "dB",
-                    "Minimum", "", "Maximum");
-        }
-
-        public void setValue(float newValue) {
-            super.setValue(newValue);
-            balance_control.setValue(newValue);
-        }
-
-    }
-
-    private final Gain gain_control = new Gain();
-
-    private final Mute mute_control = new Mute();
-
-    private final Balance balance_control = new Balance();
-
-    private final Pan pan_control = new Pan();
-
-    private final ReverbSend reverbsend_control = new ReverbSend();
-
-    private final ChorusSend chorussend_control = new ChorusSend();
-
-    private final ApplyReverb apply_reverb = new ApplyReverb();
-
-    private final Control[] controls;
-
-    float leftgain = 1;
-
-    float rightgain = 1;
-
-    float eff1gain = 0;
-
-    float eff2gain = 0;
-
-    List<LineListener> listeners = new ArrayList<LineListener>();
-
-    final Object control_mutex;
-
-    SoftMixingMixer mixer;
-
-    DataLine.Info info;
-
-    protected abstract void processControlLogic();
-
-    protected abstract void processAudioLogic(SoftAudioBuffer[] buffers);
-
-    SoftMixingDataLine(SoftMixingMixer mixer, DataLine.Info info) {
-        this.mixer = mixer;
-        this.info = info;
-        this.control_mutex = mixer.control_mutex;
-
-        controls = new Control[] { gain_control, mute_control, balance_control,
-                pan_control, reverbsend_control, chorussend_control,
-                apply_reverb };
-        calcVolume();
-    }
-
-    final void calcVolume() {
-        synchronized (control_mutex) {
-            double gain = Math.pow(10.0, gain_control.getValue() / 20.0);
-            if (mute_control.getValue())
-                gain = 0;
-            leftgain = (float) gain;
-            rightgain = (float) gain;
-            if (mixer.getFormat().getChannels() > 1) {
-                // -1 = Left, 0 Center, 1 = Right
-                double balance = balance_control.getValue();
-                if (balance > 0)
-                    leftgain *= (1 - balance);
-                else
-                    rightgain *= (1 + balance);
-
-            }
-        }
-
-        eff1gain = (float) Math.pow(10.0, reverbsend_control.getValue() / 20.0);
-        eff2gain = (float) Math.pow(10.0, chorussend_control.getValue() / 20.0);
-
-        if (!apply_reverb.getValue()) {
-            eff1gain = 0;
-        }
-    }
-
-    final void sendEvent(LineEvent event) {
-        if (listeners.size() == 0)
-            return;
-        LineListener[] listener_array = listeners
-                .toArray(new LineListener[listeners.size()]);
-        for (LineListener listener : listener_array) {
-            listener.update(event);
-        }
-    }
-
-    public final void addLineListener(LineListener listener) {
-        synchronized (control_mutex) {
-            listeners.add(listener);
-        }
-    }
-
-    public final void removeLineListener(LineListener listener) {
-        synchronized (control_mutex) {
-            listeners.add(listener);
-        }
-    }
-
-    public final javax.sound.sampled.Line.Info getLineInfo() {
-        return info;
-    }
-
-    public final Control getControl(Type control) {
-        if (control != null) {
-            for (int i = 0; i < controls.length; i++) {
-                if (controls[i].getType() == control) {
-                    return controls[i];
-                }
-            }
-        }
-        throw new IllegalArgumentException("Unsupported control type : "
-                + control);
-    }
-
-    public final Control[] getControls() {
-        return Arrays.copyOf(controls, controls.length);
-    }
-
-    public final boolean isControlSupported(Type control) {
-        if (control != null) {
-            for (int i = 0; i < controls.length; i++) {
-                if (controls[i].getType() == control) {
-                    return true;
-                }
-            }
-        }
-        return false;
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/SoftMixingMainMixer.java b/ojluni/src/main/java/com/sun/media/sound/SoftMixingMainMixer.java
deleted file mode 100755
index 43e796f..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/SoftMixingMainMixer.java
+++ /dev/null
@@ -1,259 +0,0 @@
-/*
- * Copyright (c) 2008, 2013, 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.media.sound;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.sound.sampled.AudioInputStream;
-import javax.sound.sampled.AudioSystem;
-
-/**
- * Main mixer for SoftMixingMixer.
- *
- * @author Karl Helgason
- */
-public final class SoftMixingMainMixer {
-
-    public final static int CHANNEL_LEFT = 0;
-
-    public final static int CHANNEL_RIGHT = 1;
-
-    public final static int CHANNEL_EFFECT1 = 2;
-
-    public final static int CHANNEL_EFFECT2 = 3;
-
-    public final static int CHANNEL_EFFECT3 = 4;
-
-    public final static int CHANNEL_EFFECT4 = 5;
-
-    public final static int CHANNEL_LEFT_DRY = 10;
-
-    public final static int CHANNEL_RIGHT_DRY = 11;
-
-    public final static int CHANNEL_SCRATCH1 = 12;
-
-    public final static int CHANNEL_SCRATCH2 = 13;
-
-    public final static int CHANNEL_CHANNELMIXER_LEFT = 14;
-
-    public final static int CHANNEL_CHANNELMIXER_RIGHT = 15;
-
-    private final SoftMixingMixer mixer;
-
-    private final AudioInputStream ais;
-
-    private final SoftAudioBuffer[] buffers;
-
-    private final SoftAudioProcessor reverb;
-
-    private final SoftAudioProcessor chorus;
-
-    private final SoftAudioProcessor agc;
-
-    private final int nrofchannels;
-
-    private final Object control_mutex;
-
-    private final List<SoftMixingDataLine> openLinesList = new ArrayList<SoftMixingDataLine>();
-
-    private SoftMixingDataLine[] openLines = new SoftMixingDataLine[0];
-
-    public AudioInputStream getInputStream() {
-        return ais;
-    }
-
-    void processAudioBuffers() {
-        for (int i = 0; i < buffers.length; i++) {
-            buffers[i].clear();
-        }
-
-        SoftMixingDataLine[] openLines;
-        synchronized (control_mutex) {
-            openLines = this.openLines;
-            for (int i = 0; i < openLines.length; i++) {
-                openLines[i].processControlLogic();
-            }
-            chorus.processControlLogic();
-            reverb.processControlLogic();
-            agc.processControlLogic();
-        }
-        for (int i = 0; i < openLines.length; i++) {
-            openLines[i].processAudioLogic(buffers);
-        }
-
-        chorus.processAudio();
-        reverb.processAudio();
-
-        agc.processAudio();
-
-    }
-
-    public SoftMixingMainMixer(SoftMixingMixer mixer) {
-        this.mixer = mixer;
-
-        nrofchannels = mixer.getFormat().getChannels();
-
-        int buffersize = (int) (mixer.getFormat().getSampleRate() / mixer
-                .getControlRate());
-
-        control_mutex = mixer.control_mutex;
-        buffers = new SoftAudioBuffer[16];
-        for (int i = 0; i < buffers.length; i++) {
-            buffers[i] = new SoftAudioBuffer(buffersize, mixer.getFormat());
-
-        }
-
-        reverb = new SoftReverb();
-        chorus = new SoftChorus();
-        agc = new SoftLimiter();
-
-        float samplerate = mixer.getFormat().getSampleRate();
-        float controlrate = mixer.getControlRate();
-        reverb.init(samplerate, controlrate);
-        chorus.init(samplerate, controlrate);
-        agc.init(samplerate, controlrate);
-
-        reverb.setMixMode(true);
-        chorus.setMixMode(true);
-        agc.setMixMode(false);
-
-        chorus.setInput(0, buffers[CHANNEL_EFFECT2]);
-        chorus.setOutput(0, buffers[CHANNEL_LEFT]);
-        if (nrofchannels != 1)
-            chorus.setOutput(1, buffers[CHANNEL_RIGHT]);
-        chorus.setOutput(2, buffers[CHANNEL_EFFECT1]);
-
-        reverb.setInput(0, buffers[CHANNEL_EFFECT1]);
-        reverb.setOutput(0, buffers[CHANNEL_LEFT]);
-        if (nrofchannels != 1)
-            reverb.setOutput(1, buffers[CHANNEL_RIGHT]);
-
-        agc.setInput(0, buffers[CHANNEL_LEFT]);
-        if (nrofchannels != 1)
-            agc.setInput(1, buffers[CHANNEL_RIGHT]);
-        agc.setOutput(0, buffers[CHANNEL_LEFT]);
-        if (nrofchannels != 1)
-            agc.setOutput(1, buffers[CHANNEL_RIGHT]);
-
-        InputStream in = new InputStream() {
-
-            private final SoftAudioBuffer[] buffers = SoftMixingMainMixer.this.buffers;
-
-            private final int nrofchannels = SoftMixingMainMixer.this.mixer
-                    .getFormat().getChannels();
-
-            private final int buffersize = buffers[0].getSize();
-
-            private final byte[] bbuffer = new byte[buffersize
-                    * (SoftMixingMainMixer.this.mixer.getFormat()
-                            .getSampleSizeInBits() / 8) * nrofchannels];
-
-            private int bbuffer_pos = 0;
-
-            private final byte[] single = new byte[1];
-
-            public void fillBuffer() {
-                processAudioBuffers();
-                for (int i = 0; i < nrofchannels; i++)
-                    buffers[i].get(bbuffer, i);
-                bbuffer_pos = 0;
-            }
-
-            public int read(byte[] b, int off, int len) {
-                int bbuffer_len = bbuffer.length;
-                int offlen = off + len;
-                byte[] bbuffer = this.bbuffer;
-                while (off < offlen)
-                    if (available() == 0)
-                        fillBuffer();
-                    else {
-                        int bbuffer_pos = this.bbuffer_pos;
-                        while (off < offlen && bbuffer_pos < bbuffer_len)
-                            b[off++] = bbuffer[bbuffer_pos++];
-                        this.bbuffer_pos = bbuffer_pos;
-                    }
-                return len;
-            }
-
-            public int read() throws IOException {
-                int ret = read(single);
-                if (ret == -1)
-                    return -1;
-                return single[0] & 0xFF;
-            }
-
-            public int available() {
-                return bbuffer.length - bbuffer_pos;
-            }
-
-            public void close() {
-                SoftMixingMainMixer.this.mixer.close();
-            }
-
-        };
-
-        ais = new AudioInputStream(in, mixer.getFormat(),
-                AudioSystem.NOT_SPECIFIED);
-
-    }
-
-    public void openLine(SoftMixingDataLine line) {
-        synchronized (control_mutex) {
-            openLinesList.add(line);
-            openLines = openLinesList
-                    .toArray(new SoftMixingDataLine[openLinesList.size()]);
-        }
-    }
-
-    public void closeLine(SoftMixingDataLine line) {
-        synchronized (control_mutex) {
-            openLinesList.remove(line);
-            openLines = openLinesList
-                    .toArray(new SoftMixingDataLine[openLinesList.size()]);
-            if (openLines.length == 0)
-                if (mixer.implicitOpen)
-                    mixer.close();
-        }
-
-    }
-
-    public SoftMixingDataLine[] getOpenLines() {
-        synchronized (control_mutex) {
-            return openLines;
-        }
-
-    }
-
-    public void close() {
-        SoftMixingDataLine[] openLines = this.openLines;
-        for (int i = 0; i < openLines.length; i++) {
-            openLines[i].close();
-        }
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/SoftMixingMixer.java b/ojluni/src/main/java/com/sun/media/sound/SoftMixingMixer.java
deleted file mode 100755
index 9df5641..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/SoftMixingMixer.java
+++ /dev/null
@@ -1,529 +0,0 @@
-/*
- * Copyright (c) 2008, 2013, 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.media.sound;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.sound.sampled.AudioFormat;
-import javax.sound.sampled.AudioInputStream;
-import javax.sound.sampled.AudioSystem;
-import javax.sound.sampled.Clip;
-import javax.sound.sampled.Control;
-import javax.sound.sampled.DataLine;
-import javax.sound.sampled.Line;
-import javax.sound.sampled.LineEvent;
-import javax.sound.sampled.LineListener;
-import javax.sound.sampled.LineUnavailableException;
-import javax.sound.sampled.Mixer;
-import javax.sound.sampled.SourceDataLine;
-import javax.sound.sampled.AudioFormat.Encoding;
-import javax.sound.sampled.Control.Type;
-
-/**
- * Software audio mixer
- *
- * @author Karl Helgason
- */
-public final class SoftMixingMixer implements Mixer {
-
-    private static class Info extends Mixer.Info {
-        Info() {
-            super(INFO_NAME, INFO_VENDOR, INFO_DESCRIPTION, INFO_VERSION);
-        }
-    }
-
-    static final String INFO_NAME = "Gervill Sound Mixer";
-
-    static final String INFO_VENDOR = "OpenJDK Proposal";
-
-    static final String INFO_DESCRIPTION = "Software Sound Mixer";
-
-    static final String INFO_VERSION = "1.0";
-
-    static final Mixer.Info info = new Info();
-
-    final Object control_mutex = this;
-
-    boolean implicitOpen = false;
-
-    private boolean open = false;
-
-    private SoftMixingMainMixer mainmixer = null;
-
-    private AudioFormat format = new AudioFormat(44100, 16, 2, true, false);
-
-    private SourceDataLine sourceDataLine = null;
-
-    private SoftAudioPusher pusher = null;
-
-    private AudioInputStream pusher_stream = null;
-
-    private final float controlrate = 147f;
-
-    private final long latency = 100000; // 100 msec
-
-    private final boolean jitter_correction = false;
-
-    private final List<LineListener> listeners = new ArrayList<LineListener>();
-
-    private final javax.sound.sampled.Line.Info[] sourceLineInfo;
-
-    public SoftMixingMixer() {
-
-        sourceLineInfo = new javax.sound.sampled.Line.Info[2];
-
-        ArrayList<AudioFormat> formats = new ArrayList<AudioFormat>();
-        for (int channels = 1; channels <= 2; channels++) {
-            formats.add(new AudioFormat(Encoding.PCM_SIGNED,
-                    AudioSystem.NOT_SPECIFIED, 8, channels, channels,
-                    AudioSystem.NOT_SPECIFIED, false));
-            formats.add(new AudioFormat(Encoding.PCM_UNSIGNED,
-                    AudioSystem.NOT_SPECIFIED, 8, channels, channels,
-                    AudioSystem.NOT_SPECIFIED, false));
-            for (int bits = 16; bits < 32; bits += 8) {
-                formats.add(new AudioFormat(Encoding.PCM_SIGNED,
-                        AudioSystem.NOT_SPECIFIED, bits, channels, channels
-                                * bits / 8, AudioSystem.NOT_SPECIFIED, false));
-                formats.add(new AudioFormat(Encoding.PCM_UNSIGNED,
-                        AudioSystem.NOT_SPECIFIED, bits, channels, channels
-                                * bits / 8, AudioSystem.NOT_SPECIFIED, false));
-                formats.add(new AudioFormat(Encoding.PCM_SIGNED,
-                        AudioSystem.NOT_SPECIFIED, bits, channels, channels
-                                * bits / 8, AudioSystem.NOT_SPECIFIED, true));
-                formats.add(new AudioFormat(Encoding.PCM_UNSIGNED,
-                        AudioSystem.NOT_SPECIFIED, bits, channels, channels
-                                * bits / 8, AudioSystem.NOT_SPECIFIED, true));
-            }
-            formats.add(new AudioFormat(Encoding.PCM_FLOAT,
-                    AudioSystem.NOT_SPECIFIED, 32, channels, channels * 4,
-                    AudioSystem.NOT_SPECIFIED, false));
-            formats.add(new AudioFormat(Encoding.PCM_FLOAT,
-                    AudioSystem.NOT_SPECIFIED, 32, channels, channels * 4,
-                    AudioSystem.NOT_SPECIFIED, true));
-            formats.add(new AudioFormat(Encoding.PCM_FLOAT,
-                    AudioSystem.NOT_SPECIFIED, 64, channels, channels * 8,
-                    AudioSystem.NOT_SPECIFIED, false));
-            formats.add(new AudioFormat(Encoding.PCM_FLOAT,
-                    AudioSystem.NOT_SPECIFIED, 64, channels, channels * 8,
-                    AudioSystem.NOT_SPECIFIED, true));
-        }
-        AudioFormat[] formats_array = formats.toArray(new AudioFormat[formats
-                .size()]);
-        sourceLineInfo[0] = new DataLine.Info(SourceDataLine.class,
-                formats_array, AudioSystem.NOT_SPECIFIED,
-                AudioSystem.NOT_SPECIFIED);
-        sourceLineInfo[1] = new DataLine.Info(Clip.class, formats_array,
-                AudioSystem.NOT_SPECIFIED, AudioSystem.NOT_SPECIFIED);
-    }
-
-    public Line getLine(Line.Info info) throws LineUnavailableException {
-
-        if (!isLineSupported(info))
-            throw new IllegalArgumentException("Line unsupported: " + info);
-
-        if ((info.getLineClass() == SourceDataLine.class)) {
-            return new SoftMixingSourceDataLine(this, (DataLine.Info) info);
-        }
-        if ((info.getLineClass() == Clip.class)) {
-            return new SoftMixingClip(this, (DataLine.Info) info);
-        }
-
-        throw new IllegalArgumentException("Line unsupported: " + info);
-    }
-
-    public int getMaxLines(Line.Info info) {
-        if (info.getLineClass() == SourceDataLine.class)
-            return AudioSystem.NOT_SPECIFIED;
-        if (info.getLineClass() == Clip.class)
-            return AudioSystem.NOT_SPECIFIED;
-        return 0;
-    }
-
-    public javax.sound.sampled.Mixer.Info getMixerInfo() {
-        return info;
-    }
-
-    public javax.sound.sampled.Line.Info[] getSourceLineInfo() {
-        Line.Info[] localArray = new Line.Info[sourceLineInfo.length];
-        System.arraycopy(sourceLineInfo, 0, localArray, 0,
-                sourceLineInfo.length);
-        return localArray;
-    }
-
-    public javax.sound.sampled.Line.Info[] getSourceLineInfo(
-            javax.sound.sampled.Line.Info info) {
-        int i;
-        ArrayList<javax.sound.sampled.Line.Info> infos = new ArrayList<javax.sound.sampled.Line.Info>();
-
-        for (i = 0; i < sourceLineInfo.length; i++) {
-            if (info.matches(sourceLineInfo[i])) {
-                infos.add(sourceLineInfo[i]);
-            }
-        }
-        return infos.toArray(new Line.Info[infos.size()]);
-    }
-
-    public Line[] getSourceLines() {
-
-        Line[] localLines;
-
-        synchronized (control_mutex) {
-
-            if (mainmixer == null)
-                return new Line[0];
-            SoftMixingDataLine[] sourceLines = mainmixer.getOpenLines();
-
-            localLines = new Line[sourceLines.length];
-
-            for (int i = 0; i < localLines.length; i++) {
-                localLines[i] = sourceLines[i];
-            }
-        }
-
-        return localLines;
-    }
-
-    public javax.sound.sampled.Line.Info[] getTargetLineInfo() {
-        return new javax.sound.sampled.Line.Info[0];
-    }
-
-    public javax.sound.sampled.Line.Info[] getTargetLineInfo(
-            javax.sound.sampled.Line.Info info) {
-        return new javax.sound.sampled.Line.Info[0];
-    }
-
-    public Line[] getTargetLines() {
-        return new Line[0];
-    }
-
-    public boolean isLineSupported(javax.sound.sampled.Line.Info info) {
-        if (info != null) {
-            for (int i = 0; i < sourceLineInfo.length; i++) {
-                if (info.matches(sourceLineInfo[i])) {
-                    return true;
-                }
-            }
-        }
-        return false;
-    }
-
-    public boolean isSynchronizationSupported(Line[] lines, boolean maintainSync) {
-        return false;
-    }
-
-    public void synchronize(Line[] lines, boolean maintainSync) {
-        throw new IllegalArgumentException(
-                "Synchronization not supported by this mixer.");
-    }
-
-    public void unsynchronize(Line[] lines) {
-        throw new IllegalArgumentException(
-                "Synchronization not supported by this mixer.");
-    }
-
-    public void addLineListener(LineListener listener) {
-        synchronized (control_mutex) {
-            listeners.add(listener);
-        }
-    }
-
-    private void sendEvent(LineEvent event) {
-        if (listeners.size() == 0)
-            return;
-        LineListener[] listener_array = listeners
-                .toArray(new LineListener[listeners.size()]);
-        for (LineListener listener : listener_array) {
-            listener.update(event);
-        }
-    }
-
-    public void close() {
-        if (!isOpen())
-            return;
-
-        sendEvent(new LineEvent(this, LineEvent.Type.CLOSE,
-                AudioSystem.NOT_SPECIFIED));
-
-        SoftAudioPusher pusher_to_be_closed = null;
-        AudioInputStream pusher_stream_to_be_closed = null;
-        synchronized (control_mutex) {
-            if (pusher != null) {
-                pusher_to_be_closed = pusher;
-                pusher_stream_to_be_closed = pusher_stream;
-                pusher = null;
-                pusher_stream = null;
-            }
-        }
-
-        if (pusher_to_be_closed != null) {
-            // Pusher must not be closed synchronized against control_mutex
-            // this may result in synchronized conflict between pusher and
-            // current thread.
-            pusher_to_be_closed.stop();
-
-            try {
-                pusher_stream_to_be_closed.close();
-            } catch (IOException e) {
-                e.printStackTrace();
-            }
-        }
-
-        synchronized (control_mutex) {
-
-            if (mainmixer != null)
-                mainmixer.close();
-            open = false;
-
-            if (sourceDataLine != null) {
-                sourceDataLine.drain();
-                sourceDataLine.close();
-                sourceDataLine = null;
-            }
-
-        }
-
-    }
-
-    public Control getControl(Type control) {
-        throw new IllegalArgumentException("Unsupported control type : "
-                + control);
-    }
-
-    public Control[] getControls() {
-        return new Control[0];
-    }
-
-    public javax.sound.sampled.Line.Info getLineInfo() {
-        return new Line.Info(Mixer.class);
-    }
-
-    public boolean isControlSupported(Type control) {
-        return false;
-    }
-
-    public boolean isOpen() {
-        synchronized (control_mutex) {
-            return open;
-        }
-    }
-
-    public void open() throws LineUnavailableException {
-        if (isOpen()) {
-            implicitOpen = false;
-            return;
-        }
-        open(null);
-    }
-
-    public void open(SourceDataLine line) throws LineUnavailableException {
-        if (isOpen()) {
-            implicitOpen = false;
-            return;
-        }
-        synchronized (control_mutex) {
-
-            try {
-
-                if (line != null)
-                    format = line.getFormat();
-
-                AudioInputStream ais = openStream(getFormat());
-
-                if (line == null) {
-                    synchronized (SoftMixingMixerProvider.mutex) {
-                        SoftMixingMixerProvider.lockthread = Thread
-                                .currentThread();
-                    }
-
-                    try {
-                        Mixer defaultmixer = AudioSystem.getMixer(null);
-                        if (defaultmixer != null)
-                        {
-                            // Search for suitable line
-
-                            DataLine.Info idealinfo = null;
-                            AudioFormat idealformat = null;
-
-                            Line.Info[] lineinfos = defaultmixer.getSourceLineInfo();
-                            idealFound:
-                            for (int i = 0; i < lineinfos.length; i++) {
-                                if(lineinfos[i].getLineClass() == SourceDataLine.class)
-                                {
-                                    DataLine.Info info = (DataLine.Info)lineinfos[i];
-                                    AudioFormat[] formats = info.getFormats();
-                                    for (int j = 0; j < formats.length; j++) {
-                                        AudioFormat format = formats[j];
-                                        if(format.getChannels() == 2 ||
-                                                format.getChannels() == AudioSystem.NOT_SPECIFIED)
-                                        if(format.getEncoding().equals(Encoding.PCM_SIGNED) ||
-                                                format.getEncoding().equals(Encoding.PCM_UNSIGNED))
-                                        if(format.getSampleRate() == AudioSystem.NOT_SPECIFIED ||
-                                                format.getSampleRate() == 48000.0)
-                                        if(format.getSampleSizeInBits() == AudioSystem.NOT_SPECIFIED ||
-                                                format.getSampleSizeInBits() == 16)
-                                        {
-                                            idealinfo = info;
-                                            int ideal_channels = format.getChannels();
-                                            boolean ideal_signed = format.getEncoding().equals(Encoding.PCM_SIGNED);
-                                            float ideal_rate = format.getSampleRate();
-                                            boolean ideal_endian = format.isBigEndian();
-                                            int ideal_bits = format.getSampleSizeInBits();
-                                            if(ideal_bits == AudioSystem.NOT_SPECIFIED) ideal_bits = 16;
-                                            if(ideal_channels == AudioSystem.NOT_SPECIFIED) ideal_channels = 2;
-                                            if(ideal_rate == AudioSystem.NOT_SPECIFIED) ideal_rate = 48000;
-                                            idealformat = new AudioFormat(ideal_rate, ideal_bits,
-                                                    ideal_channels, ideal_signed, ideal_endian);
-                                            break idealFound;
-                                        }
-                                    }
-                                }
-                            }
-
-                            if(idealformat != null)
-                            {
-                                format = idealformat;
-                                line = (SourceDataLine) defaultmixer.getLine(idealinfo);
-                            }
-                        }
-
-                        if(line == null)
-                            line = AudioSystem.getSourceDataLine(format);
-                    } finally {
-                        synchronized (SoftMixingMixerProvider.mutex) {
-                            SoftMixingMixerProvider.lockthread = null;
-                        }
-                    }
-
-                    if (line == null)
-                        throw new IllegalArgumentException("No line matching "
-                                + info.toString() + " is supported.");
-                }
-
-                double latency = this.latency;
-
-                if (!line.isOpen()) {
-                    int bufferSize = getFormat().getFrameSize()
-                            * (int) (getFormat().getFrameRate() * (latency / 1000000f));
-                    line.open(getFormat(), bufferSize);
-
-                    // Remember that we opened that line
-                    // so we can close again in SoftSynthesizer.close()
-                    sourceDataLine = line;
-                }
-                if (!line.isActive())
-                    line.start();
-
-                int controlbuffersize = 512;
-                try {
-                    controlbuffersize = ais.available();
-                } catch (IOException e) {
-                }
-
-                // Tell mixer not fill read buffers fully.
-                // This lowers latency, and tells DataPusher
-                // to read in smaller amounts.
-                // mainmixer.readfully = false;
-                // pusher = new DataPusher(line, ais);
-
-                int buffersize = line.getBufferSize();
-                buffersize -= buffersize % controlbuffersize;
-
-                if (buffersize < 3 * controlbuffersize)
-                    buffersize = 3 * controlbuffersize;
-
-                if (jitter_correction) {
-                    ais = new SoftJitterCorrector(ais, buffersize,
-                            controlbuffersize);
-                }
-                pusher = new SoftAudioPusher(line, ais, controlbuffersize);
-                pusher_stream = ais;
-                pusher.start();
-
-            } catch (LineUnavailableException e) {
-                if (isOpen())
-                    close();
-                throw new LineUnavailableException(e.toString());
-            }
-
-        }
-    }
-
-    public AudioInputStream openStream(AudioFormat targetFormat)
-            throws LineUnavailableException {
-
-        if (isOpen())
-            throw new LineUnavailableException("Mixer is already open");
-
-        synchronized (control_mutex) {
-
-            open = true;
-
-            implicitOpen = false;
-
-            if (targetFormat != null)
-                format = targetFormat;
-
-            mainmixer = new SoftMixingMainMixer(this);
-
-            sendEvent(new LineEvent(this, LineEvent.Type.OPEN,
-                    AudioSystem.NOT_SPECIFIED));
-
-            return mainmixer.getInputStream();
-
-        }
-
-    }
-
-    public void removeLineListener(LineListener listener) {
-        synchronized (control_mutex) {
-            listeners.remove(listener);
-        }
-    }
-
-    public long getLatency() {
-        synchronized (control_mutex) {
-            return latency;
-        }
-    }
-
-    public AudioFormat getFormat() {
-        synchronized (control_mutex) {
-            return format;
-        }
-    }
-
-    float getControlRate() {
-        return controlrate;
-    }
-
-    SoftMixingMainMixer getMainMixer() {
-        if (!isOpen())
-            return null;
-        return mainmixer;
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/SoftMixingMixerProvider.java b/ojluni/src/main/java/com/sun/media/sound/SoftMixingMixerProvider.java
deleted file mode 100755
index 7b842f5..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/SoftMixingMixerProvider.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright (c) 2008, 2013, 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.media.sound;
-
-import javax.sound.sampled.Mixer;
-import javax.sound.sampled.Mixer.Info;
-import javax.sound.sampled.spi.MixerProvider;
-
-/**
- * Provider for software audio mixer
- *
- * @author Karl Helgason
- */
-public final class SoftMixingMixerProvider extends MixerProvider {
-
-    static SoftMixingMixer globalmixer = null;
-
-    static Thread lockthread = null;
-
-    static final Object mutex = new Object();
-
-    public Mixer getMixer(Info info) {
-        if (!(info == null || info == SoftMixingMixer.info)) {
-            throw new IllegalArgumentException("Mixer " + info.toString()
-                    + " not supported by this provider.");
-        }
-        synchronized (mutex) {
-            if (lockthread != null)
-                if (Thread.currentThread() == lockthread)
-                    throw new IllegalArgumentException("Mixer "
-                            + info.toString()
-                            + " not supported by this provider.");
-            if (globalmixer == null)
-                globalmixer = new SoftMixingMixer();
-            return globalmixer;
-        }
-
-    }
-
-    public Info[] getMixerInfo() {
-        return new Info[] { SoftMixingMixer.info };
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/SoftMixingSourceDataLine.java b/ojluni/src/main/java/com/sun/media/sound/SoftMixingSourceDataLine.java
deleted file mode 100755
index d827770..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/SoftMixingSourceDataLine.java
+++ /dev/null
@@ -1,525 +0,0 @@
-/*
- * Copyright (c) 2008, 2013, 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.media.sound;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Arrays;
-
-import javax.sound.sampled.AudioFormat;
-import javax.sound.sampled.AudioInputStream;
-import javax.sound.sampled.AudioSystem;
-import javax.sound.sampled.DataLine;
-import javax.sound.sampled.LineEvent;
-import javax.sound.sampled.LineUnavailableException;
-import javax.sound.sampled.SourceDataLine;
-
-/**
- * SourceDataLine implemention for the SoftMixingMixer.
- *
- * @author Karl Helgason
- */
-public final class SoftMixingSourceDataLine extends SoftMixingDataLine
-        implements SourceDataLine {
-
-    private boolean open = false;
-
-    private AudioFormat format = new AudioFormat(44100.0f, 16, 2, true, false);
-
-    private int framesize;
-
-    private int bufferSize = -1;
-
-    private float[] readbuffer;
-
-    private boolean active = false;
-
-    private byte[] cycling_buffer;
-
-    private int cycling_read_pos = 0;
-
-    private int cycling_write_pos = 0;
-
-    private int cycling_avail = 0;
-
-    private long cycling_framepos = 0;
-
-    private AudioFloatInputStream afis;
-
-    private static class NonBlockingFloatInputStream extends
-            AudioFloatInputStream {
-        AudioFloatInputStream ais;
-
-        NonBlockingFloatInputStream(AudioFloatInputStream ais) {
-            this.ais = ais;
-        }
-
-        public int available() throws IOException {
-            return ais.available();
-        }
-
-        public void close() throws IOException {
-            ais.close();
-        }
-
-        public AudioFormat getFormat() {
-            return ais.getFormat();
-        }
-
-        public long getFrameLength() {
-            return ais.getFrameLength();
-        }
-
-        public void mark(int readlimit) {
-            ais.mark(readlimit);
-        }
-
-        public boolean markSupported() {
-            return ais.markSupported();
-        }
-
-        public int read(float[] b, int off, int len) throws IOException {
-            int avail = available();
-            if (len > avail) {
-                int ret = ais.read(b, off, avail);
-                Arrays.fill(b, off + ret, off + len, 0);
-                return len;
-            }
-            return ais.read(b, off, len);
-        }
-
-        public void reset() throws IOException {
-            ais.reset();
-        }
-
-        public long skip(long len) throws IOException {
-            return ais.skip(len);
-        }
-
-    }
-
-    SoftMixingSourceDataLine(SoftMixingMixer mixer, DataLine.Info info) {
-        super(mixer, info);
-    }
-
-    public int write(byte[] b, int off, int len) {
-        if (!isOpen())
-            return 0;
-        if (len % framesize != 0)
-            throw new IllegalArgumentException(
-                    "Number of bytes does not represent an integral number of sample frames.");
-        if (off < 0) {
-            throw new ArrayIndexOutOfBoundsException(off);
-        }
-        if ((long)off + (long)len > (long)b.length) {
-            throw new ArrayIndexOutOfBoundsException(b.length);
-        }
-
-        byte[] buff = cycling_buffer;
-        int buff_len = cycling_buffer.length;
-
-        int l = 0;
-        while (l != len) {
-            int avail;
-            synchronized (cycling_buffer) {
-                int pos = cycling_write_pos;
-                avail = cycling_avail;
-                while (l != len) {
-                    if (avail == buff_len)
-                        break;
-                    buff[pos++] = b[off++];
-                    l++;
-                    avail++;
-                    if (pos == buff_len)
-                        pos = 0;
-                }
-                cycling_avail = avail;
-                cycling_write_pos = pos;
-                if (l == len)
-                    return l;
-            }
-            if (avail == buff_len) {
-                try {
-                    Thread.sleep(1);
-                } catch (InterruptedException e) {
-                    return l;
-                }
-                if (!isRunning())
-                    return l;
-            }
-        }
-
-        return l;
-    }
-
-    //
-    // BooleanControl.Type.APPLY_REVERB
-    // BooleanControl.Type.MUTE
-    // EnumControl.Type.REVERB
-    //
-    // FloatControl.Type.SAMPLE_RATE
-    // FloatControl.Type.REVERB_SEND
-    // FloatControl.Type.VOLUME
-    // FloatControl.Type.PAN
-    // FloatControl.Type.MASTER_GAIN
-    // FloatControl.Type.BALANCE
-
-    private boolean _active = false;
-
-    private AudioFormat outputformat;
-
-    private int out_nrofchannels;
-
-    private int in_nrofchannels;
-
-    private float _rightgain;
-
-    private float _leftgain;
-
-    private float _eff1gain;
-
-    private float _eff2gain;
-
-    protected void processControlLogic() {
-        _active = active;
-        _rightgain = rightgain;
-        _leftgain = leftgain;
-        _eff1gain = eff1gain;
-        _eff2gain = eff2gain;
-    }
-
-    protected void processAudioLogic(SoftAudioBuffer[] buffers) {
-        if (_active) {
-            float[] left = buffers[SoftMixingMainMixer.CHANNEL_LEFT].array();
-            float[] right = buffers[SoftMixingMainMixer.CHANNEL_RIGHT].array();
-            int bufferlen = buffers[SoftMixingMainMixer.CHANNEL_LEFT].getSize();
-
-            int readlen = bufferlen * in_nrofchannels;
-            if (readbuffer == null || readbuffer.length < readlen) {
-                readbuffer = new float[readlen];
-            }
-            int ret = 0;
-            try {
-                ret = afis.read(readbuffer);
-                if (ret != in_nrofchannels)
-                    Arrays.fill(readbuffer, ret, readlen, 0);
-            } catch (IOException e) {
-            }
-
-            int in_c = in_nrofchannels;
-            for (int i = 0, ix = 0; i < bufferlen; i++, ix += in_c) {
-                left[i] += readbuffer[ix] * _leftgain;
-            }
-            if (out_nrofchannels != 1) {
-                if (in_nrofchannels == 1) {
-                    for (int i = 0, ix = 0; i < bufferlen; i++, ix += in_c) {
-                        right[i] += readbuffer[ix] * _rightgain;
-                    }
-                } else {
-                    for (int i = 0, ix = 1; i < bufferlen; i++, ix += in_c) {
-                        right[i] += readbuffer[ix] * _rightgain;
-                    }
-                }
-
-            }
-
-            if (_eff1gain > 0.0001) {
-                float[] eff1 = buffers[SoftMixingMainMixer.CHANNEL_EFFECT1]
-                        .array();
-                for (int i = 0, ix = 0; i < bufferlen; i++, ix += in_c) {
-                    eff1[i] += readbuffer[ix] * _eff1gain;
-                }
-                if (in_nrofchannels == 2) {
-                    for (int i = 0, ix = 1; i < bufferlen; i++, ix += in_c) {
-                        eff1[i] += readbuffer[ix] * _eff1gain;
-                    }
-                }
-            }
-
-            if (_eff2gain > 0.0001) {
-                float[] eff2 = buffers[SoftMixingMainMixer.CHANNEL_EFFECT2]
-                        .array();
-                for (int i = 0, ix = 0; i < bufferlen; i++, ix += in_c) {
-                    eff2[i] += readbuffer[ix] * _eff2gain;
-                }
-                if (in_nrofchannels == 2) {
-                    for (int i = 0, ix = 1; i < bufferlen; i++, ix += in_c) {
-                        eff2[i] += readbuffer[ix] * _eff2gain;
-                    }
-                }
-            }
-
-        }
-    }
-
-    public void open() throws LineUnavailableException {
-        open(format);
-    }
-
-    public void open(AudioFormat format) throws LineUnavailableException {
-        if (bufferSize == -1)
-            bufferSize = ((int) (format.getFrameRate() / 2))
-                    * format.getFrameSize();
-        open(format, bufferSize);
-    }
-
-    public void open(AudioFormat format, int bufferSize)
-            throws LineUnavailableException {
-
-        LineEvent event = null;
-
-        if (bufferSize < format.getFrameSize() * 32)
-            bufferSize = format.getFrameSize() * 32;
-
-        synchronized (control_mutex) {
-
-            if (!isOpen()) {
-                if (!mixer.isOpen()) {
-                    mixer.open();
-                    mixer.implicitOpen = true;
-                }
-
-                event = new LineEvent(this, LineEvent.Type.OPEN, 0);
-
-                this.bufferSize = bufferSize - bufferSize
-                        % format.getFrameSize();
-                this.format = format;
-                this.framesize = format.getFrameSize();
-                this.outputformat = mixer.getFormat();
-                out_nrofchannels = outputformat.getChannels();
-                in_nrofchannels = format.getChannels();
-
-                open = true;
-
-                mixer.getMainMixer().openLine(this);
-
-                cycling_buffer = new byte[framesize * bufferSize];
-                cycling_read_pos = 0;
-                cycling_write_pos = 0;
-                cycling_avail = 0;
-                cycling_framepos = 0;
-
-                InputStream cycling_inputstream = new InputStream() {
-
-                    public int read() throws IOException {
-                        byte[] b = new byte[1];
-                        int ret = read(b);
-                        if (ret < 0)
-                            return ret;
-                        return b[0] & 0xFF;
-                    }
-
-                    public int available() throws IOException {
-                        synchronized (cycling_buffer) {
-                            return cycling_avail;
-                        }
-                    }
-
-                    public int read(byte[] b, int off, int len)
-                            throws IOException {
-
-                        synchronized (cycling_buffer) {
-                            if (len > cycling_avail)
-                                len = cycling_avail;
-                            int pos = cycling_read_pos;
-                            byte[] buff = cycling_buffer;
-                            int buff_len = buff.length;
-                            for (int i = 0; i < len; i++) {
-                                b[off++] = buff[pos];
-                                pos++;
-                                if (pos == buff_len)
-                                    pos = 0;
-                            }
-                            cycling_read_pos = pos;
-                            cycling_avail -= len;
-                            cycling_framepos += len / framesize;
-                        }
-                        return len;
-                    }
-
-                };
-
-                afis = AudioFloatInputStream
-                        .getInputStream(new AudioInputStream(
-                                cycling_inputstream, format,
-                                AudioSystem.NOT_SPECIFIED));
-                afis = new NonBlockingFloatInputStream(afis);
-
-                if (Math.abs(format.getSampleRate()
-                        - outputformat.getSampleRate()) > 0.000001)
-                    afis = new AudioFloatInputStreamResampler(afis,
-                            outputformat);
-
-            } else {
-                if (!format.matches(getFormat())) {
-                    throw new IllegalStateException(
-                            "Line is already open with format " + getFormat()
-                                    + " and bufferSize " + getBufferSize());
-                }
-            }
-
-        }
-
-        if (event != null)
-            sendEvent(event);
-
-    }
-
-    public int available() {
-        synchronized (cycling_buffer) {
-            return cycling_buffer.length - cycling_avail;
-        }
-    }
-
-    public void drain() {
-        while (true) {
-            int avail;
-            synchronized (cycling_buffer) {
-                avail = cycling_avail;
-            }
-            if (avail != 0)
-                return;
-            try {
-                Thread.sleep(1);
-            } catch (InterruptedException e) {
-                return;
-            }
-        }
-    }
-
-    public void flush() {
-        synchronized (cycling_buffer) {
-            cycling_read_pos = 0;
-            cycling_write_pos = 0;
-            cycling_avail = 0;
-        }
-    }
-
-    public int getBufferSize() {
-        synchronized (control_mutex) {
-            return bufferSize;
-        }
-    }
-
-    public AudioFormat getFormat() {
-        synchronized (control_mutex) {
-            return format;
-        }
-    }
-
-    public int getFramePosition() {
-        return (int) getLongFramePosition();
-    }
-
-    public float getLevel() {
-        return AudioSystem.NOT_SPECIFIED;
-    }
-
-    public long getLongFramePosition() {
-        synchronized (cycling_buffer) {
-            return cycling_framepos;
-        }
-    }
-
-    public long getMicrosecondPosition() {
-        return (long) (getLongFramePosition() * (1000000.0 / (double) getFormat()
-                .getSampleRate()));
-    }
-
-    public boolean isActive() {
-        synchronized (control_mutex) {
-            return active;
-        }
-    }
-
-    public boolean isRunning() {
-        synchronized (control_mutex) {
-            return active;
-        }
-    }
-
-    public void start() {
-
-        LineEvent event = null;
-
-        synchronized (control_mutex) {
-            if (isOpen()) {
-                if (active)
-                    return;
-                active = true;
-                event = new LineEvent(this, LineEvent.Type.START,
-                        getLongFramePosition());
-            }
-        }
-
-        if (event != null)
-            sendEvent(event);
-    }
-
-    public void stop() {
-        LineEvent event = null;
-
-        synchronized (control_mutex) {
-            if (isOpen()) {
-                if (!active)
-                    return;
-                active = false;
-                event = new LineEvent(this, LineEvent.Type.STOP,
-                        getLongFramePosition());
-            }
-        }
-
-        if (event != null)
-            sendEvent(event);
-    }
-
-    public void close() {
-
-        LineEvent event = null;
-
-        synchronized (control_mutex) {
-            if (!isOpen())
-                return;
-            stop();
-
-            event = new LineEvent(this, LineEvent.Type.CLOSE,
-                    getLongFramePosition());
-
-            open = false;
-            mixer.getMainMixer().closeLine(this);
-        }
-
-        if (event != null)
-            sendEvent(event);
-
-    }
-
-    public boolean isOpen() {
-        synchronized (control_mutex) {
-            return open;
-        }
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/SoftPerformer.java b/ojluni/src/main/java/com/sun/media/sound/SoftPerformer.java
deleted file mode 100755
index 905bdb3..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/SoftPerformer.java
+++ /dev/null
@@ -1,775 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, 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.media.sound;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * This class decodes information from ModelPeformer for use in SoftVoice.
- * It also adds default connections if they where missing in ModelPerformer.
- *
- * @author Karl Helgason
- */
-public final class SoftPerformer {
-
-    static ModelConnectionBlock[] defaultconnections
-            = new ModelConnectionBlock[42];
-
-    static {
-        int o = 0;
-        defaultconnections[o++] = new ModelConnectionBlock(
-            new ModelSource(
-                new ModelIdentifier("noteon", "on", 0),
-                ModelStandardTransform.DIRECTION_MIN2MAX,
-                ModelStandardTransform.POLARITY_UNIPOLAR,
-                ModelStandardTransform.TRANSFORM_LINEAR),
-            1, new ModelDestination(new ModelIdentifier("eg", "on", 0)));
-
-        defaultconnections[o++] = new ModelConnectionBlock(
-            new ModelSource(
-                new ModelIdentifier("noteon", "on", 0),
-                ModelStandardTransform.DIRECTION_MIN2MAX,
-                ModelStandardTransform.POLARITY_UNIPOLAR,
-                ModelStandardTransform.TRANSFORM_LINEAR),
-            1, new ModelDestination(new ModelIdentifier("eg", "on", 1)));
-
-        defaultconnections[o++] = new ModelConnectionBlock(
-            new ModelSource(
-                new ModelIdentifier("eg", "active", 0),
-                ModelStandardTransform.DIRECTION_MIN2MAX,
-                ModelStandardTransform.POLARITY_UNIPOLAR,
-                ModelStandardTransform.TRANSFORM_LINEAR),
-            1, new ModelDestination(new ModelIdentifier("mixer", "active", 0)));
-
-        defaultconnections[o++] = new ModelConnectionBlock(
-            new ModelSource(
-                new ModelIdentifier("eg", 0),
-                ModelStandardTransform.DIRECTION_MAX2MIN,
-                ModelStandardTransform.POLARITY_UNIPOLAR,
-                ModelStandardTransform.TRANSFORM_LINEAR),
-            -960, new ModelDestination(new ModelIdentifier("mixer", "gain")));
-
-        defaultconnections[o++] = new ModelConnectionBlock(
-            new ModelSource(
-                new ModelIdentifier("noteon", "velocity"),
-                ModelStandardTransform.DIRECTION_MAX2MIN,
-                ModelStandardTransform.POLARITY_UNIPOLAR,
-                ModelStandardTransform.TRANSFORM_CONCAVE),
-            -960, new ModelDestination(new ModelIdentifier("mixer", "gain")));
-
-        defaultconnections[o++] = new ModelConnectionBlock(
-            new ModelSource(
-                new ModelIdentifier("midi", "pitch"),
-                ModelStandardTransform.DIRECTION_MIN2MAX,
-                ModelStandardTransform.POLARITY_BIPOLAR,
-                ModelStandardTransform.TRANSFORM_LINEAR),
-            new ModelSource(new ModelIdentifier("midi_rpn", "0"),
-                new ModelTransform() {
-                    public double transform(double value) {
-                        int v = (int) (value * 16384.0);
-                        int msb = v >> 7;
-                        int lsb = v & 127;
-                        return msb * 100 + lsb;
-                    }
-                }),
-            new ModelDestination(new ModelIdentifier("osc", "pitch")));
-
-        defaultconnections[o++] = new ModelConnectionBlock(
-            new ModelSource(
-                new ModelIdentifier("noteon", "keynumber"),
-                ModelStandardTransform.DIRECTION_MIN2MAX,
-                ModelStandardTransform.POLARITY_UNIPOLAR,
-                ModelStandardTransform.TRANSFORM_LINEAR),
-            12800, new ModelDestination(new ModelIdentifier("osc", "pitch")));
-
-        defaultconnections[o++] = new ModelConnectionBlock(
-            new ModelSource(
-                new ModelIdentifier("midi_cc", "7"),
-                ModelStandardTransform.DIRECTION_MAX2MIN,
-                ModelStandardTransform.POLARITY_UNIPOLAR,
-                ModelStandardTransform.TRANSFORM_CONCAVE),
-            -960, new ModelDestination(new ModelIdentifier("mixer", "gain")));
-
-        defaultconnections[o++] = new ModelConnectionBlock(
-            new ModelSource(
-                new ModelIdentifier("midi_cc", "8"),
-                ModelStandardTransform.DIRECTION_MIN2MAX,
-                ModelStandardTransform.POLARITY_UNIPOLAR,
-                ModelStandardTransform.TRANSFORM_LINEAR),
-            1000, new ModelDestination(new ModelIdentifier("mixer", "balance")));
-
-        defaultconnections[o++] = new ModelConnectionBlock(
-            new ModelSource(
-                new ModelIdentifier("midi_cc", "10"),
-                ModelStandardTransform.DIRECTION_MIN2MAX,
-                ModelStandardTransform.POLARITY_UNIPOLAR,
-                ModelStandardTransform.TRANSFORM_LINEAR),
-            1000, new ModelDestination(new ModelIdentifier("mixer", "pan")));
-
-        defaultconnections[o++] = new ModelConnectionBlock(
-            new ModelSource(
-                new ModelIdentifier("midi_cc", "11"),
-                ModelStandardTransform.DIRECTION_MAX2MIN,
-                ModelStandardTransform.POLARITY_UNIPOLAR,
-                ModelStandardTransform.TRANSFORM_CONCAVE),
-            -960, new ModelDestination(new ModelIdentifier("mixer", "gain")));
-
-        defaultconnections[o++] = new ModelConnectionBlock(
-            new ModelSource(
-                new ModelIdentifier("midi_cc", "91"),
-                ModelStandardTransform.DIRECTION_MIN2MAX,
-                ModelStandardTransform.POLARITY_UNIPOLAR,
-                ModelStandardTransform.TRANSFORM_LINEAR),
-            1000, new ModelDestination(new ModelIdentifier("mixer", "reverb")));
-
-        defaultconnections[o++] = new ModelConnectionBlock(
-            new ModelSource(
-                new ModelIdentifier("midi_cc", "93"),
-                ModelStandardTransform.DIRECTION_MIN2MAX,
-                ModelStandardTransform.POLARITY_UNIPOLAR,
-                ModelStandardTransform.TRANSFORM_LINEAR),
-            1000, new ModelDestination(new ModelIdentifier("mixer", "chorus")));
-
-        defaultconnections[o++] = new ModelConnectionBlock(
-            new ModelSource(
-                new ModelIdentifier("midi_cc", "71"),
-                ModelStandardTransform.DIRECTION_MIN2MAX,
-                ModelStandardTransform.POLARITY_BIPOLAR,
-                ModelStandardTransform.TRANSFORM_LINEAR),
-            200, new ModelDestination(new ModelIdentifier("filter", "q")));
-        defaultconnections[o++] = new ModelConnectionBlock(
-            new ModelSource(
-                new ModelIdentifier("midi_cc", "74"),
-                ModelStandardTransform.DIRECTION_MIN2MAX,
-                ModelStandardTransform.POLARITY_BIPOLAR,
-                ModelStandardTransform.TRANSFORM_LINEAR),
-            9600, new ModelDestination(new ModelIdentifier("filter", "freq")));
-
-        defaultconnections[o++] = new ModelConnectionBlock(
-            new ModelSource(
-                new ModelIdentifier("midi_cc", "72"),
-                ModelStandardTransform.DIRECTION_MIN2MAX,
-                ModelStandardTransform.POLARITY_BIPOLAR,
-                ModelStandardTransform.TRANSFORM_LINEAR),
-            6000, new ModelDestination(new ModelIdentifier("eg", "release2")));
-
-        defaultconnections[o++] = new ModelConnectionBlock(
-            new ModelSource(
-                new ModelIdentifier("midi_cc", "73"),
-                ModelStandardTransform.DIRECTION_MIN2MAX,
-                ModelStandardTransform.POLARITY_BIPOLAR,
-                ModelStandardTransform.TRANSFORM_LINEAR),
-            2000, new ModelDestination(new ModelIdentifier("eg", "attack2")));
-
-        defaultconnections[o++] = new ModelConnectionBlock(
-            new ModelSource(
-                new ModelIdentifier("midi_cc", "75"),
-                ModelStandardTransform.DIRECTION_MIN2MAX,
-                ModelStandardTransform.POLARITY_BIPOLAR,
-                ModelStandardTransform.TRANSFORM_LINEAR),
-            6000, new ModelDestination(new ModelIdentifier("eg", "decay2")));
-
-        defaultconnections[o++] = new ModelConnectionBlock(
-            new ModelSource(
-                new ModelIdentifier("midi_cc", "67"),
-                ModelStandardTransform.DIRECTION_MIN2MAX,
-                ModelStandardTransform.POLARITY_UNIPOLAR,
-                ModelStandardTransform.TRANSFORM_SWITCH),
-            -50, new ModelDestination(ModelDestination.DESTINATION_GAIN));
-
-        defaultconnections[o++] = new ModelConnectionBlock(
-            new ModelSource(
-                new ModelIdentifier("midi_cc", "67"),
-                ModelStandardTransform.DIRECTION_MIN2MAX,
-                ModelStandardTransform.POLARITY_UNIPOLAR,
-                ModelStandardTransform.TRANSFORM_SWITCH),
-            -2400, new ModelDestination(ModelDestination.DESTINATION_FILTER_FREQ));
-
-        defaultconnections[o++] = new ModelConnectionBlock(
-            new ModelSource(
-                new ModelIdentifier("midi_rpn", "1"),
-                ModelStandardTransform.DIRECTION_MIN2MAX,
-                ModelStandardTransform.POLARITY_BIPOLAR,
-                ModelStandardTransform.TRANSFORM_LINEAR),
-            100, new ModelDestination(new ModelIdentifier("osc", "pitch")));
-
-        defaultconnections[o++] = new ModelConnectionBlock(
-            new ModelSource(
-                new ModelIdentifier("midi_rpn", "2"),
-                ModelStandardTransform.DIRECTION_MIN2MAX,
-                ModelStandardTransform.POLARITY_BIPOLAR,
-                ModelStandardTransform.TRANSFORM_LINEAR),
-            12800, new ModelDestination(new ModelIdentifier("osc", "pitch")));
-
-        defaultconnections[o++] = new ModelConnectionBlock(
-            new ModelSource(
-                new ModelIdentifier("master", "fine_tuning"),
-                ModelStandardTransform.DIRECTION_MIN2MAX,
-                ModelStandardTransform.POLARITY_BIPOLAR,
-                ModelStandardTransform.TRANSFORM_LINEAR),
-            100, new ModelDestination(new ModelIdentifier("osc", "pitch")));
-
-        defaultconnections[o++] = new ModelConnectionBlock(
-            new ModelSource(
-                new ModelIdentifier("master", "coarse_tuning"),
-                ModelStandardTransform.DIRECTION_MIN2MAX,
-                ModelStandardTransform.POLARITY_BIPOLAR,
-                ModelStandardTransform.TRANSFORM_LINEAR),
-            12800, new ModelDestination(new ModelIdentifier("osc", "pitch")));
-
-        defaultconnections[o++] = new ModelConnectionBlock(13500,
-                new ModelDestination(new ModelIdentifier("filter", "freq", 0)));
-
-        defaultconnections[o++] = new ModelConnectionBlock(
-                Float.NEGATIVE_INFINITY, new ModelDestination(
-                new ModelIdentifier("eg", "delay", 0)));
-        defaultconnections[o++] = new ModelConnectionBlock(
-                Float.NEGATIVE_INFINITY, new ModelDestination(
-                new ModelIdentifier("eg", "attack", 0)));
-        defaultconnections[o++] = new ModelConnectionBlock(
-                Float.NEGATIVE_INFINITY, new ModelDestination(
-                new ModelIdentifier("eg", "hold", 0)));
-        defaultconnections[o++] = new ModelConnectionBlock(
-                Float.NEGATIVE_INFINITY, new ModelDestination(
-                new ModelIdentifier("eg", "decay", 0)));
-        defaultconnections[o++] = new ModelConnectionBlock(1000,
-                new ModelDestination(new ModelIdentifier("eg", "sustain", 0)));
-        defaultconnections[o++] = new ModelConnectionBlock(
-                Float.NEGATIVE_INFINITY, new ModelDestination(
-                new ModelIdentifier("eg", "release", 0)));
-        defaultconnections[o++] = new ModelConnectionBlock(1200.0
-                * Math.log(0.015) / Math.log(2), new ModelDestination(
-                new ModelIdentifier("eg", "shutdown", 0))); // 15 msec default
-
-        defaultconnections[o++] = new ModelConnectionBlock(
-                Float.NEGATIVE_INFINITY, new ModelDestination(
-                new ModelIdentifier("eg", "delay", 1)));
-        defaultconnections[o++] = new ModelConnectionBlock(
-                Float.NEGATIVE_INFINITY, new ModelDestination(
-                new ModelIdentifier("eg", "attack", 1)));
-        defaultconnections[o++] = new ModelConnectionBlock(
-                Float.NEGATIVE_INFINITY, new ModelDestination(
-                new ModelIdentifier("eg", "hold", 1)));
-        defaultconnections[o++] = new ModelConnectionBlock(
-                Float.NEGATIVE_INFINITY, new ModelDestination(
-                new ModelIdentifier("eg", "decay", 1)));
-        defaultconnections[o++] = new ModelConnectionBlock(1000,
-                new ModelDestination(new ModelIdentifier("eg", "sustain", 1)));
-        defaultconnections[o++] = new ModelConnectionBlock(
-                Float.NEGATIVE_INFINITY, new ModelDestination(
-                new ModelIdentifier("eg", "release", 1)));
-
-        defaultconnections[o++] = new ModelConnectionBlock(-8.51318,
-                new ModelDestination(new ModelIdentifier("lfo", "freq", 0)));
-        defaultconnections[o++] = new ModelConnectionBlock(
-                Float.NEGATIVE_INFINITY, new ModelDestination(
-                new ModelIdentifier("lfo", "delay", 0)));
-        defaultconnections[o++] = new ModelConnectionBlock(-8.51318,
-                new ModelDestination(new ModelIdentifier("lfo", "freq", 1)));
-        defaultconnections[o++] = new ModelConnectionBlock(
-                Float.NEGATIVE_INFINITY, new ModelDestination(
-                new ModelIdentifier("lfo", "delay", 1)));
-
-    }
-    public int keyFrom = 0;
-    public int keyTo = 127;
-    public int velFrom = 0;
-    public int velTo = 127;
-    public int exclusiveClass = 0;
-    public boolean selfNonExclusive = false;
-    public boolean forcedVelocity = false;
-    public boolean forcedKeynumber = false;
-    public ModelPerformer performer;
-    public ModelConnectionBlock[] connections;
-    public ModelOscillator[] oscillators;
-    public Map<Integer, int[]> midi_rpn_connections = new HashMap<Integer, int[]>();
-    public Map<Integer, int[]> midi_nrpn_connections = new HashMap<Integer, int[]>();
-    public int[][] midi_ctrl_connections;
-    public int[][] midi_connections;
-    public int[] ctrl_connections;
-    private List<Integer> ctrl_connections_list = new ArrayList<Integer>();
-
-    private static class KeySortComparator implements Comparator<ModelSource> {
-
-        public int compare(ModelSource o1, ModelSource o2) {
-            return o1.getIdentifier().toString().compareTo(
-                    o2.getIdentifier().toString());
-        }
-    }
-    private static KeySortComparator keySortComparator = new KeySortComparator();
-
-    private String extractKeys(ModelConnectionBlock conn) {
-        StringBuffer sb = new StringBuffer();
-        if (conn.getSources() != null) {
-            sb.append("[");
-            ModelSource[] srcs = conn.getSources();
-            ModelSource[] srcs2 = new ModelSource[srcs.length];
-            for (int i = 0; i < srcs.length; i++)
-                srcs2[i] = srcs[i];
-            Arrays.sort(srcs2, keySortComparator);
-            for (int i = 0; i < srcs.length; i++) {
-                sb.append(srcs[i].getIdentifier());
-                sb.append(";");
-            }
-            sb.append("]");
-        }
-        sb.append(";");
-        if (conn.getDestination() != null) {
-            sb.append(conn.getDestination().getIdentifier());
-        }
-        sb.append(";");
-        return sb.toString();
-    }
-
-    private void processSource(ModelSource src, int ix) {
-        ModelIdentifier id = src.getIdentifier();
-        String o = id.getObject();
-        if (o.equals("midi_cc"))
-            processMidiControlSource(src, ix);
-        else if (o.equals("midi_rpn"))
-            processMidiRpnSource(src, ix);
-        else if (o.equals("midi_nrpn"))
-            processMidiNrpnSource(src, ix);
-        else if (o.equals("midi"))
-            processMidiSource(src, ix);
-        else if (o.equals("noteon"))
-            processNoteOnSource(src, ix);
-        else if (o.equals("osc"))
-            return;
-        else if (o.equals("mixer"))
-            return;
-        else
-            ctrl_connections_list.add(ix);
-    }
-
-    private void processMidiControlSource(ModelSource src, int ix) {
-        String v = src.getIdentifier().getVariable();
-        if (v == null)
-            return;
-        int c = Integer.parseInt(v);
-        if (midi_ctrl_connections[c] == null)
-            midi_ctrl_connections[c] = new int[]{ix};
-        else {
-            int[] olda = midi_ctrl_connections[c];
-            int[] newa = new int[olda.length + 1];
-            for (int i = 0; i < olda.length; i++)
-                newa[i] = olda[i];
-            newa[newa.length - 1] = ix;
-            midi_ctrl_connections[c] = newa;
-        }
-    }
-
-    private void processNoteOnSource(ModelSource src, int ix) {
-        String v = src.getIdentifier().getVariable();
-        int c = -1;
-        if (v.equals("on"))
-            c = 3;
-        if (v.equals("keynumber"))
-            c = 4;
-        if (c == -1)
-            return;
-        if (midi_connections[c] == null)
-            midi_connections[c] = new int[]{ix};
-        else {
-            int[] olda = midi_connections[c];
-            int[] newa = new int[olda.length + 1];
-            for (int i = 0; i < olda.length; i++)
-                newa[i] = olda[i];
-            newa[newa.length - 1] = ix;
-            midi_connections[c] = newa;
-        }
-    }
-
-    private void processMidiSource(ModelSource src, int ix) {
-        String v = src.getIdentifier().getVariable();
-        int c = -1;
-        if (v.equals("pitch"))
-            c = 0;
-        if (v.equals("channel_pressure"))
-            c = 1;
-        if (v.equals("poly_pressure"))
-            c = 2;
-        if (c == -1)
-            return;
-        if (midi_connections[c] == null)
-            midi_connections[c] = new int[]{ix};
-        else {
-            int[] olda = midi_connections[c];
-            int[] newa = new int[olda.length + 1];
-            for (int i = 0; i < olda.length; i++)
-                newa[i] = olda[i];
-            newa[newa.length - 1] = ix;
-            midi_connections[c] = newa;
-        }
-    }
-
-    private void processMidiRpnSource(ModelSource src, int ix) {
-        String v = src.getIdentifier().getVariable();
-        if (v == null)
-            return;
-        int c = Integer.parseInt(v);
-        if (midi_rpn_connections.get(c) == null)
-            midi_rpn_connections.put(c, new int[]{ix});
-        else {
-            int[] olda = midi_rpn_connections.get(c);
-            int[] newa = new int[olda.length + 1];
-            for (int i = 0; i < olda.length; i++)
-                newa[i] = olda[i];
-            newa[newa.length - 1] = ix;
-            midi_rpn_connections.put(c, newa);
-        }
-    }
-
-    private void processMidiNrpnSource(ModelSource src, int ix) {
-        String v = src.getIdentifier().getVariable();
-        if (v == null)
-            return;
-        int c = Integer.parseInt(v);
-        if (midi_nrpn_connections.get(c) == null)
-            midi_nrpn_connections.put(c, new int[]{ix});
-        else {
-            int[] olda = midi_nrpn_connections.get(c);
-            int[] newa = new int[olda.length + 1];
-            for (int i = 0; i < olda.length; i++)
-                newa[i] = olda[i];
-            newa[newa.length - 1] = ix;
-            midi_nrpn_connections.put(c, newa);
-        }
-    }
-
-    public SoftPerformer(ModelPerformer performer) {
-        this.performer = performer;
-
-        keyFrom = performer.getKeyFrom();
-        keyTo = performer.getKeyTo();
-        velFrom = performer.getVelFrom();
-        velTo = performer.getVelTo();
-        exclusiveClass = performer.getExclusiveClass();
-        selfNonExclusive = performer.isSelfNonExclusive();
-
-        Map<String, ModelConnectionBlock> connmap = new HashMap<String, ModelConnectionBlock>();
-
-        List<ModelConnectionBlock> performer_connections = new ArrayList<ModelConnectionBlock>();
-        performer_connections.addAll(performer.getConnectionBlocks());
-
-        if (performer.isDefaultConnectionsEnabled()) {
-
-            // Add modulation depth range (RPN 5) to the modulation wheel (cc#1)
-
-            boolean isModulationWheelConectionFound = false;
-            for (int j = 0; j < performer_connections.size(); j++) {
-                ModelConnectionBlock connection = performer_connections.get(j);
-                ModelSource[] sources = connection.getSources();
-                ModelDestination dest = connection.getDestination();
-                boolean isModulationWheelConection = false;
-                if (dest != null && sources != null && sources.length > 1) {
-                    for (int i = 0; i < sources.length; i++) {
-                        // check if connection block has the source "modulation
-                        // wheel cc#1"
-                        if (sources[i].getIdentifier().getObject().equals(
-                                "midi_cc")) {
-                            if (sources[i].getIdentifier().getVariable()
-                                    .equals("1")) {
-                                isModulationWheelConection = true;
-                                isModulationWheelConectionFound = true;
-                                break;
-                            }
-                        }
-                    }
-                }
-                if (isModulationWheelConection) {
-
-                    ModelConnectionBlock newconnection = new ModelConnectionBlock();
-                    newconnection.setSources(connection.getSources());
-                    newconnection.setDestination(connection.getDestination());
-                    newconnection.addSource(new ModelSource(
-                            new ModelIdentifier("midi_rpn", "5")));
-                    newconnection.setScale(connection.getScale() * 256.0);
-                    performer_connections.set(j, newconnection);
-                }
-            }
-
-            if (!isModulationWheelConectionFound) {
-                ModelConnectionBlock conn = new ModelConnectionBlock(
-                        new ModelSource(ModelSource.SOURCE_LFO1,
-                        ModelStandardTransform.DIRECTION_MIN2MAX,
-                        ModelStandardTransform.POLARITY_BIPOLAR,
-                        ModelStandardTransform.TRANSFORM_LINEAR),
-                        new ModelSource(new ModelIdentifier("midi_cc", "1", 0),
-                        ModelStandardTransform.DIRECTION_MIN2MAX,
-                        ModelStandardTransform.POLARITY_UNIPOLAR,
-                        ModelStandardTransform.TRANSFORM_LINEAR),
-                        50,
-                        new ModelDestination(ModelDestination.DESTINATION_PITCH));
-                conn.addSource(new ModelSource(new ModelIdentifier("midi_rpn",
-                        "5")));
-                conn.setScale(conn.getScale() * 256.0);
-                performer_connections.add(conn);
-
-            }
-
-            // Let Aftertouch to behave just like modulation wheel (cc#1)
-            boolean channel_pressure_set = false;
-            boolean poly_pressure = false;
-            ModelConnectionBlock mod_cc_1_connection = null;
-            int mod_cc_1_connection_src_ix = 0;
-
-            for (ModelConnectionBlock connection : performer_connections) {
-                ModelSource[] sources = connection.getSources();
-                ModelDestination dest = connection.getDestination();
-                // if(dest != null && sources != null)
-                if (dest != null && sources != null) {
-                    for (int i = 0; i < sources.length; i++) {
-                        ModelIdentifier srcid = sources[i].getIdentifier();
-                        // check if connection block has the source "modulation
-                        // wheel cc#1"
-                        if (srcid.getObject().equals("midi_cc")) {
-                            if (srcid.getVariable().equals("1")) {
-                                mod_cc_1_connection = connection;
-                                mod_cc_1_connection_src_ix = i;
-                            }
-                        }
-                        // check if channel or poly pressure are already
-                        // connected
-                        if (srcid.getObject().equals("midi")) {
-                            if (srcid.getVariable().equals("channel_pressure"))
-                                channel_pressure_set = true;
-                            if (srcid.getVariable().equals("poly_pressure"))
-                                poly_pressure = true;
-                        }
-                    }
-                }
-
-            }
-
-            if (mod_cc_1_connection != null) {
-                if (!channel_pressure_set) {
-                    ModelConnectionBlock mc = new ModelConnectionBlock();
-                    mc.setDestination(mod_cc_1_connection.getDestination());
-                    mc.setScale(mod_cc_1_connection.getScale());
-                    ModelSource[] src_list = mod_cc_1_connection.getSources();
-                    ModelSource[] src_list_new = new ModelSource[src_list.length];
-                    for (int i = 0; i < src_list_new.length; i++)
-                        src_list_new[i] = src_list[i];
-                    src_list_new[mod_cc_1_connection_src_ix] = new ModelSource(
-                            new ModelIdentifier("midi", "channel_pressure"));
-                    mc.setSources(src_list_new);
-                    connmap.put(extractKeys(mc), mc);
-                }
-                if (!poly_pressure) {
-                    ModelConnectionBlock mc = new ModelConnectionBlock();
-                    mc.setDestination(mod_cc_1_connection.getDestination());
-                    mc.setScale(mod_cc_1_connection.getScale());
-                    ModelSource[] src_list = mod_cc_1_connection.getSources();
-                    ModelSource[] src_list_new = new ModelSource[src_list.length];
-                    for (int i = 0; i < src_list_new.length; i++)
-                        src_list_new[i] = src_list[i];
-                    src_list_new[mod_cc_1_connection_src_ix] = new ModelSource(
-                            new ModelIdentifier("midi", "poly_pressure"));
-                    mc.setSources(src_list_new);
-                    connmap.put(extractKeys(mc), mc);
-                }
-            }
-
-            // Enable Vibration Sound Controllers : 76, 77, 78
-            ModelConnectionBlock found_vib_connection = null;
-            for (ModelConnectionBlock connection : performer_connections) {
-                ModelSource[] sources = connection.getSources();
-                if (sources.length != 0
-                        && sources[0].getIdentifier().getObject().equals("lfo")) {
-                    if (connection.getDestination().getIdentifier().equals(
-                            ModelDestination.DESTINATION_PITCH)) {
-                        if (found_vib_connection == null)
-                            found_vib_connection = connection;
-                        else {
-                            if (found_vib_connection.getSources().length > sources.length)
-                                found_vib_connection = connection;
-                            else if (found_vib_connection.getSources()[0]
-                                    .getIdentifier().getInstance() < 1) {
-                                if (found_vib_connection.getSources()[0]
-                                        .getIdentifier().getInstance() >
-                                        sources[0].getIdentifier().getInstance()) {
-                                    found_vib_connection = connection;
-                                }
-                            }
-                        }
-
-                    }
-                }
-            }
-
-            int instance = 1;
-
-            if (found_vib_connection != null) {
-                instance = found_vib_connection.getSources()[0].getIdentifier()
-                        .getInstance();
-            }
-            ModelConnectionBlock connection;
-
-            connection = new ModelConnectionBlock(
-                new ModelSource(new ModelIdentifier("midi_cc", "78"),
-                    ModelStandardTransform.DIRECTION_MIN2MAX,
-                    ModelStandardTransform.POLARITY_BIPOLAR,
-                    ModelStandardTransform.TRANSFORM_LINEAR),
-                2000, new ModelDestination(
-                    new ModelIdentifier("lfo", "delay2", instance)));
-            connmap.put(extractKeys(connection), connection);
-
-            final double scale = found_vib_connection == null ? 0
-                    : found_vib_connection.getScale();
-            connection = new ModelConnectionBlock(
-                new ModelSource(new ModelIdentifier("lfo", instance)),
-                new ModelSource(new ModelIdentifier("midi_cc", "77"),
-                    new ModelTransform() {
-                        double s = scale;
-                        public double transform(double value) {
-                            value = value * 2 - 1;
-                            value *= 600;
-                            if (s == 0) {
-                                return value;
-                            } else if (s > 0) {
-                                if (value < -s)
-                                    value = -s;
-                                return value;
-                            } else {
-                                if (value < s)
-                                    value = -s;
-                                return -value;
-                            }
-                        }
-                    }), new ModelDestination(ModelDestination.DESTINATION_PITCH));
-            connmap.put(extractKeys(connection), connection);
-
-            connection = new ModelConnectionBlock(
-                new ModelSource(new ModelIdentifier("midi_cc", "76"),
-                    ModelStandardTransform.DIRECTION_MIN2MAX,
-                    ModelStandardTransform.POLARITY_BIPOLAR,
-                    ModelStandardTransform.TRANSFORM_LINEAR),
-                2400, new ModelDestination(
-                    new ModelIdentifier("lfo", "freq", instance)));
-            connmap.put(extractKeys(connection), connection);
-
-        }
-
-        // Add default connection blocks
-        if (performer.isDefaultConnectionsEnabled())
-            for (ModelConnectionBlock connection : defaultconnections)
-                connmap.put(extractKeys(connection), connection);
-        // Add connection blocks from modelperformer
-        for (ModelConnectionBlock connection : performer_connections)
-            connmap.put(extractKeys(connection), connection);
-        // seperate connection blocks : Init time, Midi Time, Midi/Control Time,
-        // Control Time
-        List<ModelConnectionBlock> connections = new ArrayList<ModelConnectionBlock>();
-
-        midi_ctrl_connections = new int[128][];
-        for (int i = 0; i < midi_ctrl_connections.length; i++) {
-            midi_ctrl_connections[i] = null;
-        }
-        midi_connections = new int[5][];
-        for (int i = 0; i < midi_connections.length; i++) {
-            midi_connections[i] = null;
-        }
-
-        int ix = 0;
-        boolean mustBeOnTop = false;
-
-        for (ModelConnectionBlock connection : connmap.values()) {
-            if (connection.getDestination() != null) {
-                ModelDestination dest = connection.getDestination();
-                ModelIdentifier id = dest.getIdentifier();
-                if (id.getObject().equals("noteon")) {
-                    mustBeOnTop = true;
-                    if (id.getVariable().equals("keynumber"))
-                        forcedKeynumber = true;
-                    if (id.getVariable().equals("velocity"))
-                        forcedVelocity = true;
-                }
-            }
-            if (mustBeOnTop) {
-                connections.add(0, connection);
-                mustBeOnTop = false;
-            } else
-                connections.add(connection);
-        }
-
-        for (ModelConnectionBlock connection : connections) {
-            if (connection.getSources() != null) {
-                ModelSource[] srcs = connection.getSources();
-                for (int i = 0; i < srcs.length; i++) {
-                    processSource(srcs[i], ix);
-                }
-            }
-            ix++;
-        }
-
-        this.connections = new ModelConnectionBlock[connections.size()];
-        connections.toArray(this.connections);
-
-        this.ctrl_connections = new int[ctrl_connections_list.size()];
-
-        for (int i = 0; i < this.ctrl_connections.length; i++)
-            this.ctrl_connections[i] = ctrl_connections_list.get(i);
-
-        oscillators = new ModelOscillator[performer.getOscillators().size()];
-        performer.getOscillators().toArray(oscillators);
-
-        for (ModelConnectionBlock conn : connections) {
-            if (conn.getDestination() != null) {
-                if (isUnnecessaryTransform(conn.getDestination().getTransform())) {
-                    conn.getDestination().setTransform(null);
-                }
-            }
-            if (conn.getSources() != null) {
-                for (ModelSource src : conn.getSources()) {
-                    if (isUnnecessaryTransform(src.getTransform())) {
-                        src.setTransform(null);
-                    }
-                }
-            }
-        }
-
-    }
-
-    private static boolean isUnnecessaryTransform(ModelTransform transform) {
-        if (transform == null)
-            return false;
-        if (!(transform instanceof ModelStandardTransform))
-            return false;
-        ModelStandardTransform stransform = (ModelStandardTransform)transform;
-        if (stransform.getDirection() != ModelStandardTransform.DIRECTION_MIN2MAX)
-            return false;
-        if (stransform.getPolarity() != ModelStandardTransform.POLARITY_UNIPOLAR)
-            return false;
-        if (stransform.getTransform() != ModelStandardTransform.TRANSFORM_LINEAR)
-            return false;
-        return false;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/SoftPointResampler.java b/ojluni/src/main/java/com/sun/media/sound/SoftPointResampler.java
deleted file mode 100755
index 4256eab..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/SoftPointResampler.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, 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.media.sound;
-
-/**
- * A resampler that uses 0-order (nearest-neighbor) interpolation.
- *
- * @author Karl Helgason
- */
-public final class SoftPointResampler extends SoftAbstractResampler {
-
-    public int getPadding() {
-        return 100;
-    }
-
-    public void interpolate(float[] in, float[] in_offset, float in_end,
-            float[] startpitch, float pitchstep, float[] out, int[] out_offset,
-            int out_end) {
-        float pitch = startpitch[0];
-        float ix = in_offset[0];
-        int ox = out_offset[0];
-        float ix_end = in_end;
-        float ox_end = out_end;
-        if (pitchstep == 0) {
-            while (ix < ix_end && ox < ox_end) {
-                out[ox++] = in[(int) ix];
-                ix += pitch;
-            }
-        } else {
-            while (ix < ix_end && ox < ox_end) {
-                out[ox++] = in[(int) ix];
-                ix += pitch;
-                pitch += pitchstep;
-            }
-        }
-        in_offset[0] = ix;
-        out_offset[0] = ox;
-        startpitch[0] = pitch;
-
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/SoftProcess.java b/ojluni/src/main/java/com/sun/media/sound/SoftProcess.java
deleted file mode 100755
index 1734af1..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/SoftProcess.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (c) 2007, 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.media.sound;
-
-/**
- * Control signal processor interface
- *
- * @author Karl Helgason
- */
-public interface SoftProcess extends SoftControl {
-
-    public void init(SoftSynthesizer synth);
-
-    public double[] get(int instance, String name);
-
-    public void processControlLogic();
-
-    public void reset();
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/SoftProvider.java b/ojluni/src/main/java/com/sun/media/sound/SoftProvider.java
deleted file mode 100755
index 9fe8ad0..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/SoftProvider.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, 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.media.sound;
-
-import java.util.Arrays;
-import javax.sound.midi.MidiDevice;
-import javax.sound.midi.MidiDevice.Info;
-import javax.sound.midi.spi.MidiDeviceProvider;
-
-/**
- * Software synthesizer provider class.
- *
- * @author Karl Helgason
- */
-public final class SoftProvider extends MidiDeviceProvider {
-
-    static final Info softinfo = SoftSynthesizer.info;
-    private static final Info[] softinfos = {softinfo};
-
-    public MidiDevice.Info[] getDeviceInfo() {
-        return Arrays.copyOf(softinfos, softinfos.length);
-    }
-
-    public MidiDevice getDevice(MidiDevice.Info info) {
-        if (info == softinfo) {
-            return new SoftSynthesizer();
-        }
-        return null;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/SoftReceiver.java b/ojluni/src/main/java/com/sun/media/sound/SoftReceiver.java
deleted file mode 100755
index 9a0d9c0..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/SoftReceiver.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, 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.media.sound;
-
-import java.util.TreeMap;
-
-import javax.sound.midi.MidiDevice;
-import javax.sound.midi.MidiDeviceReceiver;
-import javax.sound.midi.MidiMessage;
-import javax.sound.midi.ShortMessage;
-
-/**
- * Software synthesizer MIDI receiver class.
- *
- * @author Karl Helgason
- */
-public final class SoftReceiver implements MidiDeviceReceiver {
-
-    boolean open = true;
-    private final Object control_mutex;
-    private final SoftSynthesizer synth;
-    TreeMap<Long, Object> midimessages;
-    SoftMainMixer mainmixer;
-
-    public SoftReceiver(SoftSynthesizer synth) {
-        this.control_mutex = synth.control_mutex;
-        this.synth = synth;
-        this.mainmixer = synth.getMainMixer();
-        if (mainmixer != null)
-            this.midimessages = mainmixer.midimessages;
-    }
-
-    public MidiDevice getMidiDevice() {
-        return synth;
-    }
-
-    public void send(MidiMessage message, long timeStamp) {
-
-        synchronized (control_mutex) {
-            if (!open)
-                throw new IllegalStateException("Receiver is not open");
-        }
-
-        if (timeStamp != -1) {
-            synchronized (control_mutex) {
-                mainmixer.activity();
-                while (midimessages.get(timeStamp) != null)
-                    timeStamp++;
-                if (message instanceof ShortMessage
-                        && (((ShortMessage)message).getChannel() > 0xF)) {
-                    midimessages.put(timeStamp, message.clone());
-                } else {
-                    midimessages.put(timeStamp, message.getMessage());
-                }
-            }
-        } else {
-            mainmixer.processMessage(message);
-        }
-    }
-
-    public void close() {
-        synchronized (control_mutex) {
-            open = false;
-        }
-        synth.removeReceiver(this);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/SoftResampler.java b/ojluni/src/main/java/com/sun/media/sound/SoftResampler.java
deleted file mode 100755
index 3aabefd..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/SoftResampler.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (c) 2007, 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.media.sound;
-
-/**
- * Basic resampler interface.
- *
- * @author Karl Helgason
- */
-public interface SoftResampler {
-
-    public SoftResamplerStreamer openStreamer();
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/SoftResamplerStreamer.java b/ojluni/src/main/java/com/sun/media/sound/SoftResamplerStreamer.java
deleted file mode 100755
index 28045ca..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/SoftResamplerStreamer.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (c) 2007, 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.media.sound;
-
-import java.io.IOException;
-
-/**
- * Resampler stream interface.
- *
- * @author Karl Helgason
- */
-public interface SoftResamplerStreamer extends ModelOscillatorStream {
-
-    public void open(ModelWavetable osc, float outputsamplerate)
-            throws IOException;
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/SoftReverb.java b/ojluni/src/main/java/com/sun/media/sound/SoftReverb.java
deleted file mode 100755
index c30aae0..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/SoftReverb.java
+++ /dev/null
@@ -1,515 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, 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.media.sound;
-
-import java.util.Arrays;
-
-/**
- * Reverb effect based on allpass/comb filters. First audio is send to 8
- * parelled comb filters and then mixed together and then finally send thru 3
- * different allpass filters.
- *
- * @author Karl Helgason
- */
-public final class SoftReverb implements SoftAudioProcessor {
-
-    private final static class Delay {
-
-        private float[] delaybuffer;
-        private int rovepos = 0;
-
-        Delay() {
-            delaybuffer = null;
-        }
-
-        public void setDelay(int delay) {
-            if (delay == 0)
-                delaybuffer = null;
-            else
-                delaybuffer = new float[delay];
-            rovepos = 0;
-        }
-
-        public void processReplace(float[] inout) {
-            if (delaybuffer == null)
-                return;
-            int len = inout.length;
-            int rnlen = delaybuffer.length;
-            int rovepos = this.rovepos;
-
-            for (int i = 0; i < len; i++) {
-                float x = inout[i];
-                inout[i] = delaybuffer[rovepos];
-                delaybuffer[rovepos] = x;
-                if (++rovepos == rnlen)
-                    rovepos = 0;
-            }
-            this.rovepos = rovepos;
-        }
-    }
-
-    private final static class AllPass {
-
-        private final float[] delaybuffer;
-        private final int delaybuffersize;
-        private int rovepos = 0;
-        private float feedback;
-
-        AllPass(int size) {
-            delaybuffer = new float[size];
-            delaybuffersize = size;
-        }
-
-        public void setFeedBack(float feedback) {
-            this.feedback = feedback;
-        }
-
-        public void processReplace(float inout[]) {
-            int len = inout.length;
-            int delaybuffersize = this.delaybuffersize;
-            int rovepos = this.rovepos;
-            for (int i = 0; i < len; i++) {
-                float delayout = delaybuffer[rovepos];
-                float input = inout[i];
-                inout[i] = delayout - input;
-                delaybuffer[rovepos] = input + delayout * feedback;
-                if (++rovepos == delaybuffersize)
-                    rovepos = 0;
-            }
-            this.rovepos = rovepos;
-        }
-
-        public void processReplace(float in[], float out[]) {
-            int len = in.length;
-            int delaybuffersize = this.delaybuffersize;
-            int rovepos = this.rovepos;
-            for (int i = 0; i < len; i++) {
-                float delayout = delaybuffer[rovepos];
-                float input = in[i];
-                out[i] = delayout - input;
-                delaybuffer[rovepos] = input + delayout * feedback;
-                if (++rovepos == delaybuffersize)
-                    rovepos = 0;
-            }
-            this.rovepos = rovepos;
-        }
-    }
-
-    private final static class Comb {
-
-        private final float[] delaybuffer;
-        private final int delaybuffersize;
-        private int rovepos = 0;
-        private float feedback;
-        private float filtertemp = 0;
-        private float filtercoeff1 = 0;
-        private float filtercoeff2 = 1;
-
-        Comb(int size) {
-            delaybuffer = new float[size];
-            delaybuffersize = size;
-        }
-
-        public void setFeedBack(float feedback) {
-            this.feedback = feedback;
-            filtercoeff2 = (1 - filtercoeff1)* feedback;
-        }
-
-        public void processMix(float in[], float out[]) {
-            int len = in.length;
-            int delaybuffersize = this.delaybuffersize;
-            int rovepos = this.rovepos;
-            float filtertemp = this.filtertemp;
-            float filtercoeff1 = this.filtercoeff1;
-            float filtercoeff2 = this.filtercoeff2;
-            for (int i = 0; i < len; i++) {
-                float delayout = delaybuffer[rovepos];
-                // One Pole Lowpass Filter
-                filtertemp = (delayout * filtercoeff2)
-                        + (filtertemp * filtercoeff1);
-                out[i] += delayout;
-                delaybuffer[rovepos] = in[i] + filtertemp;
-                if (++rovepos == delaybuffersize)
-                    rovepos = 0;
-            }
-            this.filtertemp  = filtertemp;
-            this.rovepos = rovepos;
-        }
-
-        public void processReplace(float in[], float out[]) {
-            int len = in.length;
-            int delaybuffersize = this.delaybuffersize;
-            int rovepos = this.rovepos;
-            float filtertemp = this.filtertemp;
-            float filtercoeff1 = this.filtercoeff1;
-            float filtercoeff2 = this.filtercoeff2;
-            for (int i = 0; i < len; i++) {
-                float delayout = delaybuffer[rovepos];
-                // One Pole Lowpass Filter
-                filtertemp = (delayout * filtercoeff2)
-                        + (filtertemp * filtercoeff1);
-                out[i] = delayout;
-                delaybuffer[rovepos] = in[i] + filtertemp;
-                if (++rovepos == delaybuffersize)
-                    rovepos = 0;
-            }
-            this.filtertemp  = filtertemp;
-            this.rovepos = rovepos;
-        }
-
-        public void setDamp(float val) {
-            filtercoeff1 = val;
-            filtercoeff2 = (1 - filtercoeff1)* feedback;
-        }
-    }
-    private float roomsize;
-    private float damp;
-    private float gain = 1;
-    private Delay delay;
-    private Comb[] combL;
-    private Comb[] combR;
-    private AllPass[] allpassL;
-    private AllPass[] allpassR;
-    private float[] input;
-    private float[] out;
-    private float[] pre1;
-    private float[] pre2;
-    private float[] pre3;
-    private boolean denormal_flip = false;
-    private boolean mix = true;
-    private SoftAudioBuffer inputA;
-    private SoftAudioBuffer left;
-    private SoftAudioBuffer right;
-    private boolean dirty = true;
-    private float dirty_roomsize;
-    private float dirty_damp;
-    private float dirty_predelay;
-    private float dirty_gain;
-    private float samplerate;
-    private boolean light = true;
-
-    public void init(float samplerate, float controlrate) {
-        this.samplerate = samplerate;
-
-        double freqscale = ((double) samplerate) / 44100.0;
-        // freqscale = 1.0/ freqscale;
-
-        int stereospread = 23;
-
-        delay = new Delay();
-
-        combL = new Comb[8];
-        combR = new Comb[8];
-        combL[0] = new Comb((int) (freqscale * (1116)));
-        combR[0] = new Comb((int) (freqscale * (1116 + stereospread)));
-        combL[1] = new Comb((int) (freqscale * (1188)));
-        combR[1] = new Comb((int) (freqscale * (1188 + stereospread)));
-        combL[2] = new Comb((int) (freqscale * (1277)));
-        combR[2] = new Comb((int) (freqscale * (1277 + stereospread)));
-        combL[3] = new Comb((int) (freqscale * (1356)));
-        combR[3] = new Comb((int) (freqscale * (1356 + stereospread)));
-        combL[4] = new Comb((int) (freqscale * (1422)));
-        combR[4] = new Comb((int) (freqscale * (1422 + stereospread)));
-        combL[5] = new Comb((int) (freqscale * (1491)));
-        combR[5] = new Comb((int) (freqscale * (1491 + stereospread)));
-        combL[6] = new Comb((int) (freqscale * (1557)));
-        combR[6] = new Comb((int) (freqscale * (1557 + stereospread)));
-        combL[7] = new Comb((int) (freqscale * (1617)));
-        combR[7] = new Comb((int) (freqscale * (1617 + stereospread)));
-
-        allpassL = new AllPass[4];
-        allpassR = new AllPass[4];
-        allpassL[0] = new AllPass((int) (freqscale * (556)));
-        allpassR[0] = new AllPass((int) (freqscale * (556 + stereospread)));
-        allpassL[1] = new AllPass((int) (freqscale * (441)));
-        allpassR[1] = new AllPass((int) (freqscale * (441 + stereospread)));
-        allpassL[2] = new AllPass((int) (freqscale * (341)));
-        allpassR[2] = new AllPass((int) (freqscale * (341 + stereospread)));
-        allpassL[3] = new AllPass((int) (freqscale * (225)));
-        allpassR[3] = new AllPass((int) (freqscale * (225 + stereospread)));
-
-        for (int i = 0; i < allpassL.length; i++) {
-            allpassL[i].setFeedBack(0.5f);
-            allpassR[i].setFeedBack(0.5f);
-        }
-
-        /* Init other settings */
-        globalParameterControlChange(new int[]{0x01 * 128 + 0x01}, 0, 4);
-
-    }
-
-    public void setInput(int pin, SoftAudioBuffer input) {
-        if (pin == 0)
-            inputA = input;
-    }
-
-    public void setOutput(int pin, SoftAudioBuffer output) {
-        if (pin == 0)
-            left = output;
-        if (pin == 1)
-            right = output;
-    }
-
-    public void setMixMode(boolean mix) {
-        this.mix = mix;
-    }
-
-    private boolean silent = true;
-
-    public void processAudio() {
-        boolean silent_input = this.inputA.isSilent();
-        if(!silent_input)
-            silent = false;
-        if(silent)
-        {
-            if (!mix) {
-                left.clear();
-                right.clear();
-            }
-            return;
-        }
-
-        float[] inputA = this.inputA.array();
-        float[] left = this.left.array();
-        float[] right = this.right == null ? null : this.right.array();
-
-        int numsamples = inputA.length;
-        if (input == null || input.length < numsamples)
-            input = new float[numsamples];
-
-        float again = gain * 0.018f / 2;
-
-        denormal_flip = !denormal_flip;
-        if(denormal_flip)
-            for (int i = 0; i < numsamples; i++)
-                input[i] = inputA[i] * again + 1E-20f;
-        else
-            for (int i = 0; i < numsamples; i++)
-                input[i] = inputA[i] * again - 1E-20f;
-
-        delay.processReplace(input);
-
-        if(light && (right != null))
-        {
-            if (pre1 == null || pre1.length < numsamples)
-            {
-                pre1 = new float[numsamples];
-                pre2 = new float[numsamples];
-                pre3 = new float[numsamples];
-            }
-
-            for (int i = 0; i < allpassL.length; i++)
-                allpassL[i].processReplace(input);
-
-            combL[0].processReplace(input, pre3);
-            combL[1].processReplace(input, pre3);
-
-            combL[2].processReplace(input, pre1);
-            for (int i = 4; i < combL.length-2; i+=2)
-                combL[i].processMix(input, pre1);
-
-            combL[3].processReplace(input, pre2);;
-            for (int i = 5; i < combL.length-2; i+=2)
-                combL[i].processMix(input, pre2);
-
-            if (!mix)
-            {
-                Arrays.fill(right, 0);
-                Arrays.fill(left, 0);
-            }
-            for (int i = combR.length-2; i < combR.length; i++)
-                combR[i].processMix(input, right);
-            for (int i = combL.length-2; i < combL.length; i++)
-                combL[i].processMix(input, left);
-
-            for (int i = 0; i < numsamples; i++)
-            {
-                float p = pre1[i] - pre2[i];
-                float m = pre3[i];
-                left[i] += m + p;
-                right[i] += m - p;
-            }
-        }
-        else
-        {
-            if (out == null || out.length < numsamples)
-                out = new float[numsamples];
-
-            if (right != null) {
-                if (!mix)
-                    Arrays.fill(right, 0);
-                allpassR[0].processReplace(input, out);
-                for (int i = 1; i < allpassR.length; i++)
-                    allpassR[i].processReplace(out);
-                for (int i = 0; i < combR.length; i++)
-                    combR[i].processMix(out, right);
-            }
-
-            if (!mix)
-                Arrays.fill(left, 0);
-            allpassL[0].processReplace(input, out);
-            for (int i = 1; i < allpassL.length; i++)
-                allpassL[i].processReplace(out);
-            for (int i = 0; i < combL.length; i++)
-                combL[i].processMix(out, left);
-        }
-
-
-
-
-
-
-        if (silent_input) {
-            silent = true;
-            for (int i = 0; i < numsamples; i++)
-            {
-                float v = left[i];
-                if(v > 1E-10 || v < -1E-10)
-                {
-                    silent = false;
-                    break;
-                }
-            }
-        }
-
-    }
-
-    public void globalParameterControlChange(int[] slothpath, long param,
-            long value) {
-        if (slothpath.length == 1) {
-            if (slothpath[0] == 0x01 * 128 + 0x01) {
-
-                if (param == 0) {
-                    if (value == 0) {
-                        // Small Room A small size room with a length
-                        // of 5m or so.
-                        dirty_roomsize = (1.1f);
-                        dirty_damp = (5000);
-                        dirty_predelay = (0);
-                        dirty_gain = (4);
-                        dirty = true;
-                    }
-                    if (value == 1) {
-                        // Medium Room A medium size room with a length
-                        // of 10m or so.
-                        dirty_roomsize = (1.3f);
-                        dirty_damp = (5000);
-                        dirty_predelay = (0);
-                        dirty_gain = (3);
-                        dirty = true;
-                    }
-                    if (value == 2) {
-                        // Large Room A large size room suitable for
-                        // live performances.
-                        dirty_roomsize = (1.5f);
-                        dirty_damp = (5000);
-                        dirty_predelay = (0);
-                        dirty_gain = (2);
-                        dirty = true;
-                    }
-                    if (value == 3) {
-                        // Medium Hall A medium size concert hall.
-                        dirty_roomsize = (1.8f);
-                        dirty_damp = (24000);
-                        dirty_predelay = (0.02f);
-                        dirty_gain = (1.5f);
-                        dirty = true;
-                    }
-                    if (value == 4) {
-                        // Large Hall A large size concert hall
-                        // suitable for a full orchestra.
-                        dirty_roomsize = (1.8f);
-                        dirty_damp = (24000);
-                        dirty_predelay = (0.03f);
-                        dirty_gain = (1.5f);
-                        dirty = true;
-                    }
-                    if (value == 8) {
-                        // Plate A plate reverb simulation.
-                        dirty_roomsize = (1.3f);
-                        dirty_damp = (2500);
-                        dirty_predelay = (0);
-                        dirty_gain = (6);
-                        dirty = true;
-                    }
-                } else if (param == 1) {
-                    dirty_roomsize = ((float) (Math.exp((value - 40) * 0.025)));
-                    dirty = true;
-                }
-
-            }
-        }
-    }
-
-    public void processControlLogic() {
-        if (dirty) {
-            dirty = false;
-            setRoomSize(dirty_roomsize);
-            setDamp(dirty_damp);
-            setPreDelay(dirty_predelay);
-            setGain(dirty_gain);
-        }
-    }
-
-    public void setRoomSize(float value) {
-        roomsize = 1 - (0.17f / value);
-
-        for (int i = 0; i < combL.length; i++) {
-            combL[i].feedback = roomsize;
-            combR[i].feedback = roomsize;
-        }
-    }
-
-    public void setPreDelay(float value) {
-        delay.setDelay((int)(value * samplerate));
-    }
-
-    public void setGain(float gain) {
-        this.gain = gain;
-    }
-
-    public void setDamp(float value) {
-        double x = (value / samplerate) * (2 * Math.PI);
-        double cx = 2 - Math.cos(x);
-        damp = (float)(cx - Math.sqrt(cx * cx - 1));
-        if (damp > 1)
-            damp = 1;
-        if (damp < 0)
-            damp = 0;
-
-        // damp = value * 0.4f;
-        for (int i = 0; i < combL.length; i++) {
-            combL[i].setDamp(damp);
-            combR[i].setDamp(damp);
-        }
-
-    }
-
-    public void setLightMode(boolean light)
-    {
-        this.light = light;
-    }
-}
-
diff --git a/ojluni/src/main/java/com/sun/media/sound/SoftShortMessage.java b/ojluni/src/main/java/com/sun/media/sound/SoftShortMessage.java
deleted file mode 100755
index f212260..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/SoftShortMessage.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, 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.media.sound;
-
-import javax.sound.midi.InvalidMidiDataException;
-import javax.sound.midi.ShortMessage;
-
-/**
- * A short message class that support for than 16 midi channels.
- *
- * @author Karl Helgason
- */
-public final class SoftShortMessage extends ShortMessage {
-
-    int channel = 0;
-
-    public int getChannel() {
-        return channel;
-    }
-
-    public void setMessage(int command, int channel, int data1, int data2)
-            throws InvalidMidiDataException {
-        this.channel = channel;
-        super.setMessage(command, channel & 0xF, data1, data2);
-    }
-
-    public Object clone() {
-        SoftShortMessage clone = new SoftShortMessage();
-        try {
-            clone.setMessage(getCommand(), getChannel(), getData1(), getData2());
-        } catch (InvalidMidiDataException e) {
-            throw new IllegalArgumentException(e);
-        }
-        return clone;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/SoftSincResampler.java b/ojluni/src/main/java/com/sun/media/sound/SoftSincResampler.java
deleted file mode 100755
index 051e441..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/SoftSincResampler.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, 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.media.sound;
-
-/**
- * Hann windowed sinc interpolation resampler with anti-alias filtering.
- *
- * Using 30 points for the interpolation.
- *
- * @author Karl Helgason
- */
-public final class SoftSincResampler extends SoftAbstractResampler {
-
-    float[][][] sinc_table;
-    int sinc_scale_size = 100;
-    int sinc_table_fsize = 800;
-    int sinc_table_size = 30;
-    int sinc_table_center = sinc_table_size / 2;
-
-    public SoftSincResampler() {
-        super();
-        sinc_table = new float[sinc_scale_size][sinc_table_fsize][];
-        for (int s = 0; s < sinc_scale_size; s++) {
-            float scale = (float) (1.0 / (1.0 + Math.pow(s, 1.1) / 10.0));
-            for (int i = 0; i < sinc_table_fsize; i++) {
-                sinc_table[s][i] = sincTable(sinc_table_size,
-                        -i / ((float)sinc_table_fsize), scale);
-            }
-        }
-    }
-
-    // Normalized sinc function
-    public static double sinc(double x) {
-        return (x == 0.0) ? 1.0 : Math.sin(Math.PI * x) / (Math.PI * x);
-    }
-
-    // Generate hann window suitable for windowing sinc
-    public static float[] wHanning(int size, float offset) {
-        float[] window_table = new float[size];
-        for (int k = 0; k < size; k++) {
-            window_table[k] = (float)(-0.5
-                    * Math.cos(2.0 * Math.PI * (double)(k + offset)
-                        / (double) size) + 0.5);
-        }
-        return window_table;
-    }
-
-    // Generate sinc table
-    public static float[] sincTable(int size, float offset, float scale) {
-        int center = size / 2;
-        float[] w = wHanning(size, offset);
-        for (int k = 0; k < size; k++)
-            w[k] *= sinc((-center + k + offset) * scale) * scale;
-        return w;
-    }
-
-    public int getPadding() // must be at least half of sinc_table_size
-    {
-        return sinc_table_size / 2 + 2;
-    }
-
-    public void interpolate(float[] in, float[] in_offset, float in_end,
-            float[] startpitch, float pitchstep, float[] out, int[] out_offset,
-            int out_end) {
-        float pitch = startpitch[0];
-        float ix = in_offset[0];
-        int ox = out_offset[0];
-        float ix_end = in_end;
-        int ox_end = out_end;
-        int max_p = sinc_scale_size - 1;
-        if (pitchstep == 0) {
-
-            int p = (int) ((pitch - 1) * 10.0f);
-            if (p < 0)
-                p = 0;
-            else if (p > max_p)
-                p = max_p;
-            float[][] sinc_table_f = this.sinc_table[p];
-            while (ix < ix_end && ox < ox_end) {
-                int iix = (int) ix;
-                float[] sinc_table =
-                        sinc_table_f[(int)((ix - iix) * sinc_table_fsize)];
-                int xx = iix - sinc_table_center;
-                float y = 0;
-                for (int i = 0; i < sinc_table_size; i++, xx++)
-                    y += in[xx] * sinc_table[i];
-                out[ox++] = y;
-                ix += pitch;
-            }
-        } else {
-            while (ix < ix_end && ox < ox_end) {
-                int iix = (int) ix;
-                int p = (int) ((pitch - 1) * 10.0f);
-                if (p < 0)
-                    p = 0;
-                else if (p > max_p)
-                    p = max_p;
-                float[][] sinc_table_f = this.sinc_table[p];
-
-                float[] sinc_table =
-                        sinc_table_f[(int)((ix - iix) * sinc_table_fsize)];
-                int xx = iix - sinc_table_center;
-                float y = 0;
-                for (int i = 0; i < sinc_table_size; i++, xx++)
-                    y += in[xx] * sinc_table[i];
-                out[ox++] = y;
-
-                ix += pitch;
-                pitch += pitchstep;
-            }
-        }
-        in_offset[0] = ix;
-        out_offset[0] = ox;
-        startpitch[0] = pitch;
-
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/SoftSynthesizer.java b/ojluni/src/main/java/com/sun/media/sound/SoftSynthesizer.java
deleted file mode 100755
index 01a64c2..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/SoftSynthesizer.java
+++ /dev/null
@@ -1,1351 +0,0 @@
-/*
- * Copyright (c) 2008, 2013, 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.media.sound;
-
-import java.io.BufferedInputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.lang.ref.WeakReference;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import java.util.StringTokenizer;
-import java.util.prefs.BackingStoreException;
-import java.util.prefs.Preferences;
-
-import javax.sound.midi.Instrument;
-import javax.sound.midi.MidiChannel;
-import javax.sound.midi.MidiDevice;
-import javax.sound.midi.MidiSystem;
-import javax.sound.midi.MidiUnavailableException;
-import javax.sound.midi.Patch;
-import javax.sound.midi.Receiver;
-import javax.sound.midi.Soundbank;
-import javax.sound.midi.Transmitter;
-import javax.sound.midi.VoiceStatus;
-import javax.sound.sampled.AudioFormat;
-import javax.sound.sampled.AudioInputStream;
-import javax.sound.sampled.AudioSystem;
-import javax.sound.sampled.LineUnavailableException;
-import javax.sound.sampled.SourceDataLine;
-
-/**
- * The software synthesizer class.
- *
- * @author Karl Helgason
- */
-public final class SoftSynthesizer implements AudioSynthesizer,
-        ReferenceCountingDevice {
-
-    protected static final class WeakAudioStream extends InputStream
-    {
-        private volatile AudioInputStream stream;
-        public SoftAudioPusher pusher = null;
-        public AudioInputStream jitter_stream = null;
-        public SourceDataLine sourceDataLine = null;
-        public volatile long silent_samples = 0;
-        private int framesize = 0;
-        private WeakReference<AudioInputStream> weak_stream_link;
-        private AudioFloatConverter converter;
-        private float[] silentbuffer = null;
-        private int samplesize;
-
-        public void setInputStream(AudioInputStream stream)
-        {
-            this.stream = stream;
-        }
-
-        public int available() throws IOException {
-            AudioInputStream local_stream = stream;
-            if(local_stream != null)
-                return local_stream.available();
-            return 0;
-        }
-
-        public int read() throws IOException {
-             byte[] b = new byte[1];
-             if (read(b) == -1)
-                  return -1;
-             return b[0] & 0xFF;
-        }
-
-        public int read(byte[] b, int off, int len) throws IOException {
-             AudioInputStream local_stream = stream;
-             if(local_stream != null)
-                 return local_stream.read(b, off, len);
-             else
-             {
-                 int flen = len / samplesize;
-                 if(silentbuffer == null || silentbuffer.length < flen)
-                     silentbuffer = new float[flen];
-                 converter.toByteArray(silentbuffer, flen, b, off);
-
-                 silent_samples += (long)((len / framesize));
-
-                 if(pusher != null)
-                 if(weak_stream_link.get() == null)
-                 {
-                     Runnable runnable = new Runnable()
-                     {
-                         SoftAudioPusher _pusher = pusher;
-                         AudioInputStream _jitter_stream = jitter_stream;
-                         SourceDataLine _sourceDataLine = sourceDataLine;
-                         public void run()
-                         {
-                             _pusher.stop();
-                             if(_jitter_stream != null)
-                                try {
-                                    _jitter_stream.close();
-                                } catch (IOException e) {
-                                    e.printStackTrace();
-                                }
-                             if(_sourceDataLine != null)
-                                 _sourceDataLine.close();
-                         }
-                     };
-                     pusher = null;
-                     jitter_stream = null;
-                     sourceDataLine = null;
-                     new Thread(runnable).start();
-                 }
-                 return len;
-             }
-        }
-
-        public WeakAudioStream(AudioInputStream stream) {
-            this.stream = stream;
-            weak_stream_link = new WeakReference<AudioInputStream>(stream);
-            converter = AudioFloatConverter.getConverter(stream.getFormat());
-            samplesize = stream.getFormat().getFrameSize() / stream.getFormat().getChannels();
-            framesize = stream.getFormat().getFrameSize();
-        }
-
-        public AudioInputStream getAudioInputStream()
-        {
-            return new AudioInputStream(this, stream.getFormat(), AudioSystem.NOT_SPECIFIED);
-        }
-
-        public void close() throws IOException
-        {
-            AudioInputStream astream  = weak_stream_link.get();
-            if(astream != null)
-                astream.close();
-        }
-    }
-
-    private static class Info extends MidiDevice.Info {
-        Info() {
-            super(INFO_NAME, INFO_VENDOR, INFO_DESCRIPTION, INFO_VERSION);
-        }
-    }
-
-    static final String INFO_NAME = "Gervill";
-    static final String INFO_VENDOR = "OpenJDK";
-    static final String INFO_DESCRIPTION = "Software MIDI Synthesizer";
-    static final String INFO_VERSION = "1.0";
-    final static MidiDevice.Info info = new Info();
-
-    private static SourceDataLine testline = null;
-
-    private static Soundbank defaultSoundBank = null;
-
-    WeakAudioStream weakstream = null;
-
-    final Object control_mutex = this;
-
-    int voiceIDCounter = 0;
-
-    // 0: default
-    // 1: DLS Voice Allocation
-    int voice_allocation_mode = 0;
-
-    boolean load_default_soundbank = false;
-    boolean reverb_light = true;
-    boolean reverb_on = true;
-    boolean chorus_on = true;
-    boolean agc_on = true;
-
-    SoftChannel[] channels;
-    SoftChannelProxy[] external_channels = null;
-
-    private boolean largemode = false;
-
-    // 0: GM Mode off (default)
-    // 1: GM Level 1
-    // 2: GM Level 2
-    private int gmmode = 0;
-
-    private int deviceid = 0;
-
-    private AudioFormat format = new AudioFormat(44100, 16, 2, true, false);
-
-    private SourceDataLine sourceDataLine = null;
-
-    private SoftAudioPusher pusher = null;
-    private AudioInputStream pusher_stream = null;
-
-    private float controlrate = 147f;
-
-    private boolean open = false;
-    private boolean implicitOpen = false;
-
-    private String resamplerType = "linear";
-    private SoftResampler resampler = new SoftLinearResampler();
-
-    private int number_of_midi_channels = 16;
-    private int maxpoly = 64;
-    private long latency = 200000; // 200 msec
-    private boolean jitter_correction = false;
-
-    private SoftMainMixer mainmixer;
-    private SoftVoice[] voices;
-
-    private Map<String, SoftTuning> tunings
-            = new HashMap<String, SoftTuning>();
-    private Map<String, SoftInstrument> inslist
-            = new HashMap<String, SoftInstrument>();
-    private Map<String, ModelInstrument> loadedlist
-            = new HashMap<String, ModelInstrument>();
-
-    private ArrayList<Receiver> recvslist = new ArrayList<Receiver>();
-
-    private void getBuffers(ModelInstrument instrument,
-            List<ModelByteBuffer> buffers) {
-        for (ModelPerformer performer : instrument.getPerformers()) {
-            if (performer.getOscillators() != null) {
-                for (ModelOscillator osc : performer.getOscillators()) {
-                    if (osc instanceof ModelByteBufferWavetable) {
-                        ModelByteBufferWavetable w = (ModelByteBufferWavetable)osc;
-                        ModelByteBuffer buff = w.getBuffer();
-                        if (buff != null)
-                            buffers.add(buff);
-                        buff = w.get8BitExtensionBuffer();
-                        if (buff != null)
-                            buffers.add(buff);
-                    }
-                }
-            }
-        }
-    }
-
-    private boolean loadSamples(List<ModelInstrument> instruments) {
-        if (largemode)
-            return true;
-        List<ModelByteBuffer> buffers = new ArrayList<ModelByteBuffer>();
-        for (ModelInstrument instrument : instruments)
-            getBuffers(instrument, buffers);
-        try {
-            ModelByteBuffer.loadAll(buffers);
-        } catch (IOException e) {
-            return false;
-        }
-        return true;
-    }
-
-    private boolean loadInstruments(List<ModelInstrument> instruments) {
-        if (!isOpen())
-            return false;
-        if (!loadSamples(instruments))
-            return false;
-
-        synchronized (control_mutex) {
-            if (channels != null)
-                for (SoftChannel c : channels)
-                {
-                    c.current_instrument = null;
-                    c.current_director = null;
-                }
-            for (Instrument instrument : instruments) {
-                String pat = patchToString(instrument.getPatch());
-                SoftInstrument softins
-                        = new SoftInstrument((ModelInstrument) instrument);
-                inslist.put(pat, softins);
-                loadedlist.put(pat, (ModelInstrument) instrument);
-            }
-        }
-
-        return true;
-    }
-
-    private void processPropertyInfo(Map<String, Object> info) {
-        AudioSynthesizerPropertyInfo[] items = getPropertyInfo(info);
-
-        String resamplerType = (String)items[0].value;
-        if (resamplerType.equalsIgnoreCase("point"))
-        {
-            this.resampler = new SoftPointResampler();
-            this.resamplerType = "point";
-        }
-        else if (resamplerType.equalsIgnoreCase("linear"))
-        {
-            this.resampler = new SoftLinearResampler2();
-            this.resamplerType = "linear";
-        }
-        else if (resamplerType.equalsIgnoreCase("linear1"))
-        {
-            this.resampler = new SoftLinearResampler();
-            this.resamplerType = "linear1";
-        }
-        else if (resamplerType.equalsIgnoreCase("linear2"))
-        {
-            this.resampler = new SoftLinearResampler2();
-            this.resamplerType = "linear2";
-        }
-        else if (resamplerType.equalsIgnoreCase("cubic"))
-        {
-            this.resampler = new SoftCubicResampler();
-            this.resamplerType = "cubic";
-        }
-        else if (resamplerType.equalsIgnoreCase("lanczos"))
-        {
-            this.resampler = new SoftLanczosResampler();
-            this.resamplerType = "lanczos";
-        }
-        else if (resamplerType.equalsIgnoreCase("sinc"))
-        {
-            this.resampler = new SoftSincResampler();
-            this.resamplerType = "sinc";
-        }
-
-        setFormat((AudioFormat)items[2].value);
-        controlrate = (Float)items[1].value;
-        latency = (Long)items[3].value;
-        deviceid = (Integer)items[4].value;
-        maxpoly = (Integer)items[5].value;
-        reverb_on = (Boolean)items[6].value;
-        chorus_on = (Boolean)items[7].value;
-        agc_on = (Boolean)items[8].value;
-        largemode = (Boolean)items[9].value;
-        number_of_midi_channels = (Integer)items[10].value;
-        jitter_correction = (Boolean)items[11].value;
-        reverb_light = (Boolean)items[12].value;
-        load_default_soundbank = (Boolean)items[13].value;
-    }
-
-    private String patchToString(Patch patch) {
-        if (patch instanceof ModelPatch && ((ModelPatch) patch).isPercussion())
-            return "p." + patch.getProgram() + "." + patch.getBank();
-        else
-            return patch.getProgram() + "." + patch.getBank();
-    }
-
-    private void setFormat(AudioFormat format) {
-        if (format.getChannels() > 2) {
-            throw new IllegalArgumentException(
-                    "Only mono and stereo audio supported.");
-        }
-        if (AudioFloatConverter.getConverter(format) == null)
-            throw new IllegalArgumentException("Audio format not supported.");
-        this.format = format;
-    }
-
-    void removeReceiver(Receiver recv) {
-        boolean perform_close = false;
-        synchronized (control_mutex) {
-            if (recvslist.remove(recv)) {
-                if (implicitOpen && recvslist.isEmpty())
-                    perform_close = true;
-            }
-        }
-        if (perform_close)
-            close();
-    }
-
-    SoftMainMixer getMainMixer() {
-        if (!isOpen())
-            return null;
-        return mainmixer;
-    }
-
-    SoftInstrument findInstrument(int program, int bank, int channel) {
-
-        // Add support for GM2 banks 0x78 and 0x79
-        // as specified in DLS 2.2 in Section 1.4.6
-        // which allows using percussion and melodic instruments
-        // on all channels
-        if (bank >> 7 == 0x78 || bank >> 7 == 0x79) {
-            SoftInstrument current_instrument
-                    = inslist.get(program + "." + bank);
-            if (current_instrument != null)
-                return current_instrument;
-
-            String p_plaf;
-            if (bank >> 7 == 0x78)
-                p_plaf = "p.";
-            else
-                p_plaf = "";
-
-            // Instrument not found fallback to MSB:bank, LSB:0
-            current_instrument = inslist.get(p_plaf + program + "."
-                    + ((bank & 128) << 7));
-            if (current_instrument != null)
-                return current_instrument;
-            // Instrument not found fallback to MSB:0, LSB:bank
-            current_instrument = inslist.get(p_plaf + program + "."
-                    + (bank & 128));
-            if (current_instrument != null)
-                return current_instrument;
-            // Instrument not found fallback to MSB:0, LSB:0
-            current_instrument = inslist.get(p_plaf + program + ".0");
-            if (current_instrument != null)
-                return current_instrument;
-            // Instrument not found fallback to MSB:0, LSB:0, program=0
-            current_instrument = inslist.get(p_plaf + program + "0.0");
-            if (current_instrument != null)
-                return current_instrument;
-            return null;
-        }
-
-        // Channel 10 uses percussion instruments
-        String p_plaf;
-        if (channel == 9)
-            p_plaf = "p.";
-        else
-            p_plaf = "";
-
-        SoftInstrument current_instrument
-                = inslist.get(p_plaf + program + "." + bank);
-        if (current_instrument != null)
-            return current_instrument;
-        // Instrument not found fallback to MSB:0, LSB:0
-        current_instrument = inslist.get(p_plaf + program + ".0");
-        if (current_instrument != null)
-            return current_instrument;
-        // Instrument not found fallback to MSB:0, LSB:0, program=0
-        current_instrument = inslist.get(p_plaf + "0.0");
-        if (current_instrument != null)
-            return current_instrument;
-        return null;
-    }
-
-    int getVoiceAllocationMode() {
-        return voice_allocation_mode;
-    }
-
-    int getGeneralMidiMode() {
-        return gmmode;
-    }
-
-    void setGeneralMidiMode(int gmmode) {
-        this.gmmode = gmmode;
-    }
-
-    int getDeviceID() {
-        return deviceid;
-    }
-
-    float getControlRate() {
-        return controlrate;
-    }
-
-    SoftVoice[] getVoices() {
-        return voices;
-    }
-
-    SoftTuning getTuning(Patch patch) {
-        String t_id = patchToString(patch);
-        SoftTuning tuning = tunings.get(t_id);
-        if (tuning == null) {
-            tuning = new SoftTuning(patch);
-            tunings.put(t_id, tuning);
-        }
-        return tuning;
-    }
-
-    public long getLatency() {
-        synchronized (control_mutex) {
-            return latency;
-        }
-    }
-
-    public AudioFormat getFormat() {
-        synchronized (control_mutex) {
-            return format;
-        }
-    }
-
-    public int getMaxPolyphony() {
-        synchronized (control_mutex) {
-            return maxpoly;
-        }
-    }
-
-    public MidiChannel[] getChannels() {
-
-        synchronized (control_mutex) {
-            // if (external_channels == null) => the synthesizer is not open,
-            // create 16 proxy channels
-            // otherwise external_channels has the same length as channels array
-            if (external_channels == null) {
-                external_channels = new SoftChannelProxy[16];
-                for (int i = 0; i < external_channels.length; i++)
-                    external_channels[i] = new SoftChannelProxy();
-            }
-            MidiChannel[] ret;
-            if (isOpen())
-                ret = new MidiChannel[channels.length];
-            else
-                ret = new MidiChannel[16];
-            for (int i = 0; i < ret.length; i++)
-                ret[i] = external_channels[i];
-            return ret;
-        }
-    }
-
-    public VoiceStatus[] getVoiceStatus() {
-        if (!isOpen()) {
-            VoiceStatus[] tempVoiceStatusArray
-                    = new VoiceStatus[getMaxPolyphony()];
-            for (int i = 0; i < tempVoiceStatusArray.length; i++) {
-                VoiceStatus b = new VoiceStatus();
-                b.active = false;
-                b.bank = 0;
-                b.channel = 0;
-                b.note = 0;
-                b.program = 0;
-                b.volume = 0;
-                tempVoiceStatusArray[i] = b;
-            }
-            return tempVoiceStatusArray;
-        }
-
-        synchronized (control_mutex) {
-            VoiceStatus[] tempVoiceStatusArray = new VoiceStatus[voices.length];
-            for (int i = 0; i < voices.length; i++) {
-                VoiceStatus a = voices[i];
-                VoiceStatus b = new VoiceStatus();
-                b.active = a.active;
-                b.bank = a.bank;
-                b.channel = a.channel;
-                b.note = a.note;
-                b.program = a.program;
-                b.volume = a.volume;
-                tempVoiceStatusArray[i] = b;
-            }
-            return tempVoiceStatusArray;
-        }
-    }
-
-    public boolean isSoundbankSupported(Soundbank soundbank) {
-        for (Instrument ins: soundbank.getInstruments())
-            if (!(ins instanceof ModelInstrument))
-                return false;
-        return true;
-    }
-
-    public boolean loadInstrument(Instrument instrument) {
-        if (instrument == null || (!(instrument instanceof ModelInstrument))) {
-            throw new IllegalArgumentException("Unsupported instrument: " +
-                    instrument);
-        }
-        List<ModelInstrument> instruments = new ArrayList<ModelInstrument>();
-        instruments.add((ModelInstrument)instrument);
-        return loadInstruments(instruments);
-    }
-
-    public void unloadInstrument(Instrument instrument) {
-        if (instrument == null || (!(instrument instanceof ModelInstrument))) {
-            throw new IllegalArgumentException("Unsupported instrument: " +
-                    instrument);
-        }
-        if (!isOpen())
-            return;
-
-        String pat = patchToString(instrument.getPatch());
-        synchronized (control_mutex) {
-            for (SoftChannel c: channels)
-                c.current_instrument = null;
-            inslist.remove(pat);
-            loadedlist.remove(pat);
-            for (int i = 0; i < channels.length; i++) {
-                channels[i].allSoundOff();
-            }
-        }
-    }
-
-    public boolean remapInstrument(Instrument from, Instrument to) {
-
-        if (from == null)
-            throw new NullPointerException();
-        if (to == null)
-            throw new NullPointerException();
-        if (!(from instanceof ModelInstrument)) {
-            throw new IllegalArgumentException("Unsupported instrument: " +
-                    from.toString());
-        }
-        if (!(to instanceof ModelInstrument)) {
-            throw new IllegalArgumentException("Unsupported instrument: " +
-                    to.toString());
-        }
-        if (!isOpen())
-            return false;
-
-        synchronized (control_mutex) {
-            if (!loadedlist.containsValue(to))
-                throw new IllegalArgumentException("Instrument to is not loaded.");
-            unloadInstrument(from);
-            ModelMappedInstrument mfrom = new ModelMappedInstrument(
-                    (ModelInstrument)to, from.getPatch());
-            return loadInstrument(mfrom);
-        }
-    }
-
-    public Soundbank getDefaultSoundbank() {
-        synchronized (SoftSynthesizer.class) {
-            if (defaultSoundBank != null)
-                return defaultSoundBank;
-
-            List<PrivilegedAction<InputStream>> actions =
-                new ArrayList<PrivilegedAction<InputStream>>();
-
-            actions.add(new PrivilegedAction<InputStream>() {
-                public InputStream run() {
-                    File javahome = new File(System.getProperties()
-                            .getProperty("java.home"));
-                    File libaudio = new File(new File(javahome, "lib"), "audio");
-                    if (libaudio.exists()) {
-                        File foundfile = null;
-                        File[] files = libaudio.listFiles();
-                        if (files != null) {
-                            for (int i = 0; i < files.length; i++) {
-                                File file = files[i];
-                                if (file.isFile()) {
-                                    String lname = file.getName().toLowerCase();
-                                    if (lname.endsWith(".sf2")
-                                            || lname.endsWith(".dls")) {
-                                        if (foundfile == null
-                                                || (file.length() > foundfile
-                                                        .length())) {
-                                            foundfile = file;
-                                        }
-                                    }
-                                }
-                            }
-                        }
-                        if (foundfile != null) {
-                            try {
-                                return new FileInputStream(foundfile);
-                            } catch (IOException e) {
-                            }
-                        }
-                    }
-                    return null;
-                }
-            });
-
-            actions.add(new PrivilegedAction<InputStream>() {
-                public InputStream run() {
-                    if (System.getProperties().getProperty("os.name")
-                            .startsWith("Windows")) {
-                        File gm_dls = new File(System.getenv("SystemRoot")
-                                + "\\system32\\drivers\\gm.dls");
-                        if (gm_dls.exists()) {
-                            try {
-                                return new FileInputStream(gm_dls);
-                            } catch (IOException e) {
-                            }
-                        }
-                    }
-                    return null;
-                }
-            });
-
-            actions.add(new PrivilegedAction<InputStream>() {
-                public InputStream run() {
-                    /*
-                     * Try to load saved generated soundbank
-                     */
-                    File userhome = new File(System.getProperty("user.home"),
-                            ".gervill");
-                    File emg_soundbank_file = new File(userhome,
-                            "soundbank-emg.sf2");
-                    if (emg_soundbank_file.exists()) {
-                        try {
-                            return new FileInputStream(emg_soundbank_file);
-                        } catch (IOException e) {
-                        }
-                    }
-                    return null;
-                }
-            });
-
-            for (PrivilegedAction<InputStream> action : actions) {
-                try {
-                    InputStream is = AccessController.doPrivileged(action);
-                    if(is == null) continue;
-                    Soundbank sbk;
-                    try {
-                        sbk = MidiSystem.getSoundbank(new BufferedInputStream(is));
-                    } finally {
-                        is.close();
-                    }
-                    if (sbk != null) {
-                        defaultSoundBank = sbk;
-                        return defaultSoundBank;
-                    }
-                } catch (Exception e) {
-                }
-            }
-
-            try {
-                /*
-                 * Generate emergency soundbank
-                 */
-                defaultSoundBank = EmergencySoundbank.createSoundbank();
-            } catch (Exception e) {
-            }
-
-            if (defaultSoundBank != null) {
-                /*
-                 * Save generated soundbank to disk for faster future use.
-                 */
-                OutputStream out = AccessController
-                        .doPrivileged(new PrivilegedAction<OutputStream>() {
-                            public OutputStream run() {
-                                try {
-                                    File userhome = new File(System
-                                            .getProperty("user.home"),
-                                            ".gervill");
-                                    if (!userhome.exists())
-                                        userhome.mkdirs();
-                                    File emg_soundbank_file = new File(
-                                            userhome, "soundbank-emg.sf2");
-                                    if (emg_soundbank_file.exists())
-                                        return null;
-                                    return new FileOutputStream(
-                                            emg_soundbank_file);
-                                } catch (IOException e) {
-                                } catch (SecurityException e) {
-                                }
-                                return null;
-                            }
-                        });
-                if (out != null) {
-                    try {
-                        ((SF2Soundbank) defaultSoundBank).save(out);
-                        out.close();
-                    } catch (IOException e) {
-                    }
-                }
-            }
-        }
-        return defaultSoundBank;
-    }
-
-    public Instrument[] getAvailableInstruments() {
-        Soundbank defsbk = getDefaultSoundbank();
-        if (defsbk == null)
-            return new Instrument[0];
-        Instrument[] inslist_array = defsbk.getInstruments();
-        Arrays.sort(inslist_array, new ModelInstrumentComparator());
-        return inslist_array;
-    }
-
-    public Instrument[] getLoadedInstruments() {
-        if (!isOpen())
-            return new Instrument[0];
-
-        synchronized (control_mutex) {
-            ModelInstrument[] inslist_array =
-                    new ModelInstrument[loadedlist.values().size()];
-            loadedlist.values().toArray(inslist_array);
-            Arrays.sort(inslist_array, new ModelInstrumentComparator());
-            return inslist_array;
-        }
-    }
-
-    public boolean loadAllInstruments(Soundbank soundbank) {
-        List<ModelInstrument> instruments = new ArrayList<ModelInstrument>();
-        for (Instrument ins: soundbank.getInstruments()) {
-            if (ins == null || !(ins instanceof ModelInstrument)) {
-                throw new IllegalArgumentException(
-                        "Unsupported instrument: " + ins);
-            }
-            instruments.add((ModelInstrument)ins);
-        }
-        return loadInstruments(instruments);
-    }
-
-    public void unloadAllInstruments(Soundbank soundbank) {
-        if (soundbank == null || !isSoundbankSupported(soundbank))
-            throw new IllegalArgumentException("Unsupported soundbank: " + soundbank);
-
-        if (!isOpen())
-            return;
-
-        for (Instrument ins: soundbank.getInstruments()) {
-            if (ins instanceof ModelInstrument) {
-                unloadInstrument(ins);
-            }
-        }
-    }
-
-    public boolean loadInstruments(Soundbank soundbank, Patch[] patchList) {
-        List<ModelInstrument> instruments = new ArrayList<ModelInstrument>();
-        for (Patch patch: patchList) {
-            Instrument ins = soundbank.getInstrument(patch);
-            if (ins == null || !(ins instanceof ModelInstrument)) {
-                throw new IllegalArgumentException(
-                        "Unsupported instrument: " + ins);
-            }
-            instruments.add((ModelInstrument)ins);
-        }
-        return loadInstruments(instruments);
-    }
-
-    public void unloadInstruments(Soundbank soundbank, Patch[] patchList) {
-        if (soundbank == null || !isSoundbankSupported(soundbank))
-            throw new IllegalArgumentException("Unsupported soundbank: " + soundbank);
-
-        if (!isOpen())
-            return;
-
-        for (Patch pat: patchList) {
-            Instrument ins = soundbank.getInstrument(pat);
-            if (ins instanceof ModelInstrument) {
-                unloadInstrument(ins);
-            }
-        }
-    }
-
-    public MidiDevice.Info getDeviceInfo() {
-        return info;
-    }
-
-    private Properties getStoredProperties() {
-        return AccessController
-                .doPrivileged(new PrivilegedAction<Properties>() {
-                    public Properties run() {
-                        Properties p = new Properties();
-                        String notePath = "/com/sun/media/sound/softsynthesizer";
-                        try {
-                            Preferences prefroot = Preferences.userRoot();
-                            if (prefroot.nodeExists(notePath)) {
-                                Preferences prefs = prefroot.node(notePath);
-                                String[] prefs_keys = prefs.keys();
-                                for (String prefs_key : prefs_keys) {
-                                    String val = prefs.get(prefs_key, null);
-                                    if (val != null)
-                                        p.setProperty(prefs_key, val);
-                                }
-                            }
-                        } catch (BackingStoreException e) {
-                        } catch (SecurityException e) {
-                        }
-                        return p;
-                    }
-                });
-    }
-
-    public AudioSynthesizerPropertyInfo[] getPropertyInfo(Map<String, Object> info) {
-        List<AudioSynthesizerPropertyInfo> list =
-                new ArrayList<AudioSynthesizerPropertyInfo>();
-
-        AudioSynthesizerPropertyInfo item;
-
-        // If info != null or synthesizer is closed
-        //   we return how the synthesizer will be set on next open
-        // If info == null and synthesizer is open
-        //   we return current synthesizer properties.
-        boolean o = info == null && open;
-
-        item = new AudioSynthesizerPropertyInfo("interpolation", o?resamplerType:"linear");
-        item.choices = new String[]{"linear", "linear1", "linear2", "cubic",
-                                    "lanczos", "sinc", "point"};
-        item.description = "Interpolation method";
-        list.add(item);
-
-        item = new AudioSynthesizerPropertyInfo("control rate", o?controlrate:147f);
-        item.description = "Control rate";
-        list.add(item);
-
-        item = new AudioSynthesizerPropertyInfo("format",
-                o?format:new AudioFormat(44100, 16, 2, true, false));
-        item.description = "Default audio format";
-        list.add(item);
-
-        item = new AudioSynthesizerPropertyInfo("latency", o?latency:120000L);
-        item.description = "Default latency";
-        list.add(item);
-
-        item = new AudioSynthesizerPropertyInfo("device id", o?deviceid:0);
-        item.description = "Device ID for SysEx Messages";
-        list.add(item);
-
-        item = new AudioSynthesizerPropertyInfo("max polyphony", o?maxpoly:64);
-        item.description = "Maximum polyphony";
-        list.add(item);
-
-        item = new AudioSynthesizerPropertyInfo("reverb", o?reverb_on:true);
-        item.description = "Turn reverb effect on or off";
-        list.add(item);
-
-        item = new AudioSynthesizerPropertyInfo("chorus", o?chorus_on:true);
-        item.description = "Turn chorus effect on or off";
-        list.add(item);
-
-        item = new AudioSynthesizerPropertyInfo("auto gain control", o?agc_on:true);
-        item.description = "Turn auto gain control on or off";
-        list.add(item);
-
-        item = new AudioSynthesizerPropertyInfo("large mode", o?largemode:false);
-        item.description = "Turn large mode on or off.";
-        list.add(item);
-
-        item = new AudioSynthesizerPropertyInfo("midi channels", o?channels.length:16);
-        item.description = "Number of midi channels.";
-        list.add(item);
-
-        item = new AudioSynthesizerPropertyInfo("jitter correction", o?jitter_correction:true);
-        item.description = "Turn jitter correction on or off.";
-        list.add(item);
-
-        item = new AudioSynthesizerPropertyInfo("light reverb", o?reverb_light:true);
-        item.description = "Turn light reverb mode on or off";
-        list.add(item);
-
-        item = new AudioSynthesizerPropertyInfo("load default soundbank", o?load_default_soundbank:true);
-        item.description = "Enabled/disable loading default soundbank";
-        list.add(item);
-
-        AudioSynthesizerPropertyInfo[] items;
-        items = list.toArray(new AudioSynthesizerPropertyInfo[list.size()]);
-
-        Properties storedProperties = getStoredProperties();
-
-        for (AudioSynthesizerPropertyInfo item2 : items) {
-            Object v = (info == null) ? null : info.get(item2.name);
-            v = (v != null) ? v : storedProperties.getProperty(item2.name);
-            if (v != null) {
-                Class c = (item2.valueClass);
-                if (c.isInstance(v))
-                    item2.value = v;
-                else if (v instanceof String) {
-                    String s = (String) v;
-                    if (c == Boolean.class) {
-                        if (s.equalsIgnoreCase("true"))
-                            item2.value = Boolean.TRUE;
-                        if (s.equalsIgnoreCase("false"))
-                            item2.value = Boolean.FALSE;
-                    } else if (c == AudioFormat.class) {
-                        int channels = 2;
-                        boolean signed = true;
-                        boolean bigendian = false;
-                        int bits = 16;
-                        float sampleRate = 44100f;
-                        try {
-                            StringTokenizer st = new StringTokenizer(s, ", ");
-                            String prevToken = "";
-                            while (st.hasMoreTokens()) {
-                                String token = st.nextToken().toLowerCase();
-                                if (token.equals("mono"))
-                                    channels = 1;
-                                if (token.startsWith("channel"))
-                                    channels = Integer.parseInt(prevToken);
-                                if (token.contains("unsigned"))
-                                    signed = false;
-                                if (token.equals("big-endian"))
-                                    bigendian = true;
-                                if (token.equals("bit"))
-                                    bits = Integer.parseInt(prevToken);
-                                if (token.equals("hz"))
-                                    sampleRate = Float.parseFloat(prevToken);
-                                prevToken = token;
-                            }
-                            item2.value = new AudioFormat(sampleRate, bits,
-                                    channels, signed, bigendian);
-                        } catch (NumberFormatException e) {
-                        }
-
-                    } else
-                        try {
-                            if (c == Byte.class)
-                                item2.value = Byte.valueOf(s);
-                            else if (c == Short.class)
-                                item2.value = Short.valueOf(s);
-                            else if (c == Integer.class)
-                                item2.value = Integer.valueOf(s);
-                            else if (c == Long.class)
-                                item2.value = Long.valueOf(s);
-                            else if (c == Float.class)
-                                item2.value = Float.valueOf(s);
-                            else if (c == Double.class)
-                                item2.value = Double.valueOf(s);
-                        } catch (NumberFormatException e) {
-                        }
-                } else if (v instanceof Number) {
-                    Number n = (Number) v;
-                    if (c == Byte.class)
-                        item2.value = Byte.valueOf(n.byteValue());
-                    if (c == Short.class)
-                        item2.value = Short.valueOf(n.shortValue());
-                    if (c == Integer.class)
-                        item2.value = Integer.valueOf(n.intValue());
-                    if (c == Long.class)
-                        item2.value = Long.valueOf(n.longValue());
-                    if (c == Float.class)
-                        item2.value = Float.valueOf(n.floatValue());
-                    if (c == Double.class)
-                        item2.value = Double.valueOf(n.doubleValue());
-                }
-            }
-        }
-
-        return items;
-    }
-
-    public void open() throws MidiUnavailableException {
-        if (isOpen()) {
-            synchronized (control_mutex) {
-                implicitOpen = false;
-            }
-            return;
-        }
-        open(null, null);
-    }
-
-    public void open(SourceDataLine line, Map<String, Object> info) throws MidiUnavailableException {
-        if (isOpen()) {
-            synchronized (control_mutex) {
-                implicitOpen = false;
-            }
-            return;
-        }
-        synchronized (control_mutex) {
-            Throwable causeException = null;
-            try {
-                if (line != null) {
-                    // can throw IllegalArgumentException
-                    setFormat(line.getFormat());
-                }
-
-                AudioInputStream ais = openStream(getFormat(), info);
-
-                weakstream = new WeakAudioStream(ais);
-                ais = weakstream.getAudioInputStream();
-
-                if (line == null)
-                {
-                    if (testline != null) {
-                        line = testline;
-                    } else {
-                        // can throw LineUnavailableException,
-                        // IllegalArgumentException, SecurityException
-                        line = AudioSystem.getSourceDataLine(getFormat());
-                    }
-                }
-
-                double latency = this.latency;
-
-                if (!line.isOpen()) {
-                    int bufferSize = getFormat().getFrameSize()
-                        * (int)(getFormat().getFrameRate() * (latency/1000000f));
-                    // can throw LineUnavailableException,
-                    // IllegalArgumentException, SecurityException
-                    line.open(getFormat(), bufferSize);
-
-                    // Remember that we opened that line
-                    // so we can close again in SoftSynthesizer.close()
-                    sourceDataLine = line;
-                }
-                if (!line.isActive())
-                    line.start();
-
-                int controlbuffersize = 512;
-                try {
-                    controlbuffersize = ais.available();
-                } catch (IOException e) {
-                }
-
-                // Tell mixer not fill read buffers fully.
-                // This lowers latency, and tells DataPusher
-                // to read in smaller amounts.
-                //mainmixer.readfully = false;
-                //pusher = new DataPusher(line, ais);
-
-                int buffersize = line.getBufferSize();
-                buffersize -= buffersize % controlbuffersize;
-
-                if (buffersize < 3 * controlbuffersize)
-                    buffersize = 3 * controlbuffersize;
-
-                if (jitter_correction) {
-                    ais = new SoftJitterCorrector(ais, buffersize,
-                            controlbuffersize);
-                    if(weakstream != null)
-                        weakstream.jitter_stream = ais;
-                }
-                pusher = new SoftAudioPusher(line, ais, controlbuffersize);
-                pusher_stream = ais;
-                pusher.start();
-
-                if(weakstream != null)
-                {
-                    weakstream.pusher = pusher;
-                    weakstream.sourceDataLine = sourceDataLine;
-                }
-
-            } catch (LineUnavailableException e) {
-                causeException = e;
-            } catch (IllegalArgumentException e) {
-                causeException = e;
-            } catch (SecurityException e) {
-                causeException = e;
-            }
-
-            if (causeException != null) {
-                if (isOpen())
-                    close();
-                // am: need MidiUnavailableException(Throwable) ctor!
-                MidiUnavailableException ex = new MidiUnavailableException(
-                        "Can not open line");
-                ex.initCause(causeException);
-                throw ex;
-            }
-
-        }
-    }
-
-    public AudioInputStream openStream(AudioFormat targetFormat,
-            Map<String, Object> info) throws MidiUnavailableException {
-
-        if (isOpen())
-            throw new MidiUnavailableException("Synthesizer is already open");
-
-        synchronized (control_mutex) {
-
-            gmmode = 0;
-            voice_allocation_mode = 0;
-
-            processPropertyInfo(info);
-
-            open = true;
-            implicitOpen = false;
-
-            if (targetFormat != null)
-                setFormat(targetFormat);
-
-            if (load_default_soundbank)
-            {
-                Soundbank defbank = getDefaultSoundbank();
-                if (defbank != null) {
-                    loadAllInstruments(defbank);
-                }
-            }
-
-            voices = new SoftVoice[maxpoly];
-            for (int i = 0; i < maxpoly; i++)
-                voices[i] = new SoftVoice(this);
-
-            mainmixer = new SoftMainMixer(this);
-
-            channels = new SoftChannel[number_of_midi_channels];
-            for (int i = 0; i < channels.length; i++)
-                channels[i] = new SoftChannel(this, i);
-
-            if (external_channels == null) {
-                // Always create external_channels array
-                // with 16 or more channels
-                // so getChannels works correctly
-                // when the synhtesizer is closed.
-                if (channels.length < 16)
-                    external_channels = new SoftChannelProxy[16];
-                else
-                    external_channels = new SoftChannelProxy[channels.length];
-                for (int i = 0; i < external_channels.length; i++)
-                    external_channels[i] = new SoftChannelProxy();
-            } else {
-                // We must resize external_channels array
-                // but we must also copy the old SoftChannelProxy
-                // into the new one
-                if (channels.length > external_channels.length) {
-                    SoftChannelProxy[] new_external_channels
-                            = new SoftChannelProxy[channels.length];
-                    for (int i = 0; i < external_channels.length; i++)
-                        new_external_channels[i] = external_channels[i];
-                    for (int i = external_channels.length;
-                            i < new_external_channels.length; i++) {
-                        new_external_channels[i] = new SoftChannelProxy();
-                    }
-                }
-            }
-
-            for (int i = 0; i < channels.length; i++)
-                external_channels[i].setChannel(channels[i]);
-
-            for (SoftVoice voice: getVoices())
-                voice.resampler = resampler.openStreamer();
-
-            for (Receiver recv: getReceivers()) {
-                SoftReceiver srecv = ((SoftReceiver)recv);
-                srecv.open = open;
-                srecv.mainmixer = mainmixer;
-                srecv.midimessages = mainmixer.midimessages;
-            }
-
-            return mainmixer.getInputStream();
-        }
-    }
-
-    public void close() {
-
-        if (!isOpen())
-            return;
-
-        SoftAudioPusher pusher_to_be_closed = null;
-        AudioInputStream pusher_stream_to_be_closed = null;
-        synchronized (control_mutex) {
-            if (pusher != null) {
-                pusher_to_be_closed = pusher;
-                pusher_stream_to_be_closed = pusher_stream;
-                pusher = null;
-                pusher_stream = null;
-            }
-        }
-
-        if (pusher_to_be_closed != null) {
-            // Pusher must not be closed synchronized against control_mutex,
-            // this may result in synchronized conflict between pusher
-            // and current thread.
-            pusher_to_be_closed.stop();
-
-            try {
-                pusher_stream_to_be_closed.close();
-            } catch (IOException e) {
-                //e.printStackTrace();
-            }
-        }
-
-        synchronized (control_mutex) {
-
-            if (mainmixer != null)
-                mainmixer.close();
-            open = false;
-            implicitOpen = false;
-            mainmixer = null;
-            voices = null;
-            channels = null;
-
-            if (external_channels != null)
-                for (int i = 0; i < external_channels.length; i++)
-                    external_channels[i].setChannel(null);
-
-            if (sourceDataLine != null) {
-                sourceDataLine.close();
-                sourceDataLine = null;
-            }
-
-            inslist.clear();
-            loadedlist.clear();
-            tunings.clear();
-
-            while (recvslist.size() != 0)
-                recvslist.get(recvslist.size() - 1).close();
-
-        }
-    }
-
-    public boolean isOpen() {
-        synchronized (control_mutex) {
-            return open;
-        }
-    }
-
-    public long getMicrosecondPosition() {
-
-        if (!isOpen())
-            return 0;
-
-        synchronized (control_mutex) {
-            return mainmixer.getMicrosecondPosition();
-        }
-    }
-
-    public int getMaxReceivers() {
-        return -1;
-    }
-
-    public int getMaxTransmitters() {
-        return 0;
-    }
-
-    public Receiver getReceiver() throws MidiUnavailableException {
-
-        synchronized (control_mutex) {
-            SoftReceiver receiver = new SoftReceiver(this);
-            receiver.open = open;
-            recvslist.add(receiver);
-            return receiver;
-        }
-    }
-
-    public List<Receiver> getReceivers() {
-
-        synchronized (control_mutex) {
-            ArrayList<Receiver> recvs = new ArrayList<Receiver>();
-            recvs.addAll(recvslist);
-            return recvs;
-        }
-    }
-
-    public Transmitter getTransmitter() throws MidiUnavailableException {
-
-        throw new MidiUnavailableException("No transmitter available");
-    }
-
-    public List<Transmitter> getTransmitters() {
-
-        return new ArrayList<Transmitter>();
-    }
-
-    public Receiver getReceiverReferenceCounting()
-            throws MidiUnavailableException {
-
-        if (!isOpen()) {
-            open();
-            synchronized (control_mutex) {
-                implicitOpen = true;
-            }
-        }
-
-        return getReceiver();
-    }
-
-    public Transmitter getTransmitterReferenceCounting()
-            throws MidiUnavailableException {
-
-        throw new MidiUnavailableException("No transmitter available");
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/SoftTuning.java b/ojluni/src/main/java/com/sun/media/sound/SoftTuning.java
deleted file mode 100755
index b3cb6c5..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/SoftTuning.java
+++ /dev/null
@@ -1,259 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, 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.media.sound;
-
-import java.io.UnsupportedEncodingException;
-import java.util.Arrays;
-
-import javax.sound.midi.Patch;
-
-/**
- * A tuning program container, for use with MIDI Tuning.
- * See: http://www.midi.org
- *
- * @author Karl Helgason
- */
-public final class SoftTuning {
-
-    private String name = null;
-    private final double[] tuning = new double[128];
-    private Patch patch = null;
-
-    public SoftTuning() {
-        name = "12-TET";
-        for (int i = 0; i < tuning.length; i++)
-            tuning[i] = i * 100;
-    }
-
-    public SoftTuning(byte[] data) {
-        for (int i = 0; i < tuning.length; i++)
-            tuning[i] = i * 100;
-        load(data);
-    }
-
-    public SoftTuning(Patch patch) {
-        this.patch = patch;
-        name = "12-TET";
-        for (int i = 0; i < tuning.length; i++)
-            tuning[i] = i * 100;
-    }
-
-    public SoftTuning(Patch patch, byte[] data) {
-        this.patch = patch;
-        for (int i = 0; i < tuning.length; i++)
-            tuning[i] = i * 100;
-        load(data);
-    }
-
-    private boolean checksumOK(byte[] data) {
-        int x = data[1] & 0xFF;
-        for (int i = 2; i < data.length - 2; i++)
-            x = x ^ (data[i] & 0xFF);
-        return (data[data.length - 2] & 0xFF) == (x & 127);
-    }
-
-    /*
-    private boolean checksumOK2(byte[] data) {
-        int x = data[1] & 0xFF; // 7E
-        x = x ^ (data[2] & 0xFF); // <device ID>
-        x = x ^ (data[4] & 0xFF); // nn
-        x = x ^ (data[5] & 0xFF); // tt
-        for (int i = 22; i < data.length - 2; i++)
-            x = x ^ (data[i] & 0xFF);
-        return (data[data.length - 2] & 0xFF) == (x & 127);
-    }
-     */
-    public void load(byte[] data) {
-        // Universal Non-Real-Time / Real-Time SysEx
-        if ((data[1] & 0xFF) == 0x7E || (data[1] & 0xFF) == 0x7F) {
-            int subid1 = data[3] & 0xFF;
-            switch (subid1) {
-            case 0x08: // MIDI Tuning Standard
-                int subid2 = data[4] & 0xFF;
-                switch (subid2) {
-                case 0x01: // BULK TUNING DUMP (NON-REAL-TIME)
-                {
-                    // http://www.midi.org/about-midi/tuning.shtml
-                    //if (!checksumOK2(data))
-                    //    break;
-                    try {
-                        name = new String(data, 6, 16, "ascii");
-                    } catch (UnsupportedEncodingException e) {
-                        name = null;
-                    }
-                    int r = 22;
-                    for (int i = 0; i < 128; i++) {
-                        int xx = data[r++] & 0xFF;
-                        int yy = data[r++] & 0xFF;
-                        int zz = data[r++] & 0xFF;
-                        if (!(xx == 127 && yy == 127 && zz == 127))
-                            tuning[i] = 100.0 *
-                                    (((xx * 16384) + (yy * 128) + zz) / 16384.0);
-                    }
-                    break;
-                }
-                case 0x02: // SINGLE NOTE TUNING CHANGE (REAL-TIME)
-                {
-                    // http://www.midi.org/about-midi/tuning.shtml
-                    int ll = data[6] & 0xFF;
-                    int r = 7;
-                    for (int i = 0; i < ll; i++) {
-                        int kk = data[r++] & 0xFF;
-                        int xx = data[r++] & 0xFF;
-                        int yy = data[r++] & 0xFF;
-                        int zz = data[r++] & 0xFF;
-                        if (!(xx == 127 && yy == 127 && zz == 127))
-                            tuning[kk] = 100.0*(((xx*16384) + (yy*128) + zz)/16384.0);
-                    }
-                    break;
-                }
-                case 0x04: // KEY-BASED TUNING DUMP (NON-REAL-TIME)
-                {
-                    // http://www.midi.org/about-midi/tuning_extens.shtml
-                    if (!checksumOK(data))
-                        break;
-                    try {
-                        name = new String(data, 7, 16, "ascii");
-                    } catch (UnsupportedEncodingException e) {
-                        name = null;
-                    }
-                    int r = 23;
-                    for (int i = 0; i < 128; i++) {
-                        int xx = data[r++] & 0xFF;
-                        int yy = data[r++] & 0xFF;
-                        int zz = data[r++] & 0xFF;
-                        if (!(xx == 127 && yy == 127 && zz == 127))
-                            tuning[i] = 100.0*(((xx*16384) + (yy*128) + zz)/16384.0);
-                    }
-                    break;
-                }
-                case 0x05: // SCALE/OCTAVE TUNING DUMP, 1 byte format
-                           // (NON-REAL-TIME)
-                {
-                    // http://www.midi.org/about-midi/tuning_extens.shtml
-                    if (!checksumOK(data))
-                        break;
-                    try {
-                        name = new String(data, 7, 16, "ascii");
-                    } catch (UnsupportedEncodingException e) {
-                        name = null;
-                    }
-                    int[] octave_tuning = new int[12];
-                    for (int i = 0; i < 12; i++)
-                        octave_tuning[i] = (data[i + 23] & 0xFF) - 64;
-                    for (int i = 0; i < tuning.length; i++)
-                        tuning[i] = i * 100 + octave_tuning[i % 12];
-                    break;
-                }
-                case 0x06: // SCALE/OCTAVE TUNING DUMP, 2 byte format
-                           // (NON-REAL-TIME)
-                {
-                    // http://www.midi.org/about-midi/tuning_extens.shtml
-                    if (!checksumOK(data))
-                        break;
-                    try {
-                        name = new String(data, 7, 16, "ascii");
-                    } catch (UnsupportedEncodingException e) {
-                        name = null;
-                    }
-                    double[] octave_tuning = new double[12];
-                    for (int i = 0; i < 12; i++) {
-                        int v = (data[i * 2 + 23] & 0xFF) * 128
-                                + (data[i * 2 + 24] & 0xFF);
-                        octave_tuning[i] = (v / 8192.0 - 1) * 100.0;
-                    }
-                    for (int i = 0; i < tuning.length; i++)
-                        tuning[i] = i * 100 + octave_tuning[i % 12];
-                    break;
-                }
-                case 0x07: // SINGLE NOTE TUNING CHANGE (NON
-                           // REAL-TIME/REAL-TIME) (BANK)
-                    // http://www.midi.org/about-midi/tuning_extens.shtml
-                    int ll = data[7] & 0xFF;
-                    int r = 8;
-                    for (int i = 0; i < ll; i++) {
-                        int kk = data[r++] & 0xFF;
-                        int xx = data[r++] & 0xFF;
-                        int yy = data[r++] & 0xFF;
-                        int zz = data[r++] & 0xFF;
-                        if (!(xx == 127 && yy == 127 && zz == 127))
-                            tuning[kk] = 100.0
-                                    * (((xx*16384) + (yy*128) + zz) / 16384.0);
-                    }
-                    break;
-                case 0x08: // scale/octave tuning 1-byte form (Non
-                           // Real-Time/REAL-TIME)
-                {
-                    // http://www.midi.org/about-midi/tuning-scale.shtml
-                    int[] octave_tuning = new int[12];
-                    for (int i = 0; i < 12; i++)
-                        octave_tuning[i] = (data[i + 8] & 0xFF) - 64;
-                    for (int i = 0; i < tuning.length; i++)
-                        tuning[i] = i * 100 + octave_tuning[i % 12];
-                    break;
-                }
-                case 0x09: // scale/octave tuning 2-byte form (Non
-                           // Real-Time/REAL-TIME)
-                {
-                    // http://www.midi.org/about-midi/tuning-scale.shtml
-                    double[] octave_tuning = new double[12];
-                    for (int i = 0; i < 12; i++) {
-                        int v = (data[i * 2 + 8] & 0xFF) * 128
-                                + (data[i * 2 + 9] & 0xFF);
-                        octave_tuning[i] = (v / 8192.0 - 1) * 100.0;
-                    }
-                    for (int i = 0; i < tuning.length; i++)
-                        tuning[i] = i * 100 + octave_tuning[i % 12];
-                    break;
-                }
-                default:
-                    break;
-                }
-            }
-        }
-    }
-
-    // am: getTuning(int) is more effective.
-    // currently getTuning() is used only by tests
-    public double[] getTuning() {
-        return Arrays.copyOf(tuning, tuning.length);
-    }
-
-    public double getTuning(int noteNumber) {
-        return tuning[noteNumber];
-    }
-
-    public Patch getPatch() {
-        return patch;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/SoftVoice.java b/ojluni/src/main/java/com/sun/media/sound/SoftVoice.java
deleted file mode 100755
index ea2cff0..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/SoftVoice.java
+++ /dev/null
@@ -1,918 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, 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.media.sound;
-
-import java.io.IOException;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.sound.midi.VoiceStatus;
-
-/**
- * Software synthesizer voice class.
- *
- * @author Karl Helgason
- */
-public final class SoftVoice extends VoiceStatus {
-
-    public int exclusiveClass = 0;
-    public boolean releaseTriggered = false;
-    private int noteOn_noteNumber = 0;
-    private int noteOn_velocity = 0;
-    private int noteOff_velocity = 0;
-    private int delay = 0;
-    ModelChannelMixer channelmixer = null;
-    double tunedKey = 0;
-    SoftTuning tuning = null;
-    SoftChannel stealer_channel = null;
-    ModelConnectionBlock[] stealer_extendedConnectionBlocks = null;
-    SoftPerformer stealer_performer = null;
-    ModelChannelMixer stealer_channelmixer = null;
-    int stealer_voiceID = -1;
-    int stealer_noteNumber = 0;
-    int stealer_velocity = 0;
-    boolean stealer_releaseTriggered = false;
-    int voiceID = -1;
-    boolean sustain = false;
-    boolean sostenuto = false;
-    boolean portamento = false;
-    private final SoftFilter filter_left;
-    private final SoftFilter filter_right;
-    private final SoftProcess eg = new SoftEnvelopeGenerator();
-    private final SoftProcess lfo = new SoftLowFrequencyOscillator();
-    Map<String, SoftControl> objects =
-            new HashMap<String, SoftControl>();
-    SoftSynthesizer synthesizer;
-    SoftInstrument instrument;
-    SoftPerformer performer;
-    SoftChannel softchannel = null;
-    boolean on = false;
-    private boolean audiostarted = false;
-    private boolean started = false;
-    private boolean stopping = false;
-    private float osc_attenuation = 0.0f;
-    private ModelOscillatorStream osc_stream;
-    private int osc_stream_nrofchannels;
-    private float[][] osc_buff = new float[2][];
-    private boolean osc_stream_off_transmitted = false;
-    private boolean out_mixer_end = false;
-    private float out_mixer_left = 0;
-    private float out_mixer_right = 0;
-    private float out_mixer_effect1 = 0;
-    private float out_mixer_effect2 = 0;
-    private float last_out_mixer_left = 0;
-    private float last_out_mixer_right = 0;
-    private float last_out_mixer_effect1 = 0;
-    private float last_out_mixer_effect2 = 0;
-    ModelConnectionBlock[] extendedConnectionBlocks = null;
-    private ModelConnectionBlock[] connections;
-    // Last value added to destination
-    private double[] connections_last = new double[50];
-    // Pointer to source value
-    private double[][][] connections_src = new double[50][3][];
-    // Key-based override (if any)
-    private int[][] connections_src_kc = new int[50][3];
-    // Pointer to destination value
-    private double[][] connections_dst = new double[50][];
-    private boolean soundoff = false;
-    private float lastMuteValue = 0;
-    private float lastSoloMuteValue = 0;
-    double[] co_noteon_keynumber = new double[1];
-    double[] co_noteon_velocity = new double[1];
-    double[] co_noteon_on = new double[1];
-    private final SoftControl co_noteon = new SoftControl() {
-        double[] keynumber = co_noteon_keynumber;
-        double[] velocity = co_noteon_velocity;
-        double[] on = co_noteon_on;
-        public double[] get(int instance, String name) {
-            if (name == null)
-                return null;
-            if (name.equals("keynumber"))
-                return keynumber;
-            if (name.equals("velocity"))
-                return velocity;
-            if (name.equals("on"))
-                return on;
-            return null;
-        }
-    };
-    private final double[] co_mixer_active = new double[1];
-    private final double[] co_mixer_gain = new double[1];
-    private final double[] co_mixer_pan = new double[1];
-    private final double[] co_mixer_balance = new double[1];
-    private final double[] co_mixer_reverb = new double[1];
-    private final double[] co_mixer_chorus = new double[1];
-    private final SoftControl co_mixer = new SoftControl() {
-        double[] active = co_mixer_active;
-        double[] gain = co_mixer_gain;
-        double[] pan = co_mixer_pan;
-        double[] balance = co_mixer_balance;
-        double[] reverb = co_mixer_reverb;
-        double[] chorus = co_mixer_chorus;
-        public double[] get(int instance, String name) {
-            if (name == null)
-                return null;
-            if (name.equals("active"))
-                return active;
-            if (name.equals("gain"))
-                return gain;
-            if (name.equals("pan"))
-                return pan;
-            if (name.equals("balance"))
-                return balance;
-            if (name.equals("reverb"))
-                return reverb;
-            if (name.equals("chorus"))
-                return chorus;
-            return null;
-        }
-    };
-    private final double[] co_osc_pitch = new double[1];
-    private final SoftControl co_osc = new SoftControl() {
-        double[] pitch = co_osc_pitch;
-        public double[] get(int instance, String name) {
-            if (name == null)
-                return null;
-            if (name.equals("pitch"))
-                return pitch;
-            return null;
-        }
-    };
-    private final double[] co_filter_freq = new double[1];
-    private final double[] co_filter_type = new double[1];
-    private final double[] co_filter_q = new double[1];
-    private final SoftControl co_filter = new SoftControl() {
-        double[] freq = co_filter_freq;
-        double[] ftype = co_filter_type;
-        double[] q = co_filter_q;
-        public double[] get(int instance, String name) {
-            if (name == null)
-                return null;
-            if (name.equals("freq"))
-                return freq;
-            if (name.equals("type"))
-                return ftype;
-            if (name.equals("q"))
-                return q;
-            return null;
-        }
-    };
-    SoftResamplerStreamer resampler;
-    private final int nrofchannels;
-
-    public SoftVoice(SoftSynthesizer synth) {
-        synthesizer = synth;
-        filter_left = new SoftFilter(synth.getFormat().getSampleRate());
-        filter_right = new SoftFilter(synth.getFormat().getSampleRate());
-        nrofchannels = synth.getFormat().getChannels();
-    }
-
-    private int getValueKC(ModelIdentifier id) {
-        if (id.getObject().equals("midi_cc")) {
-            int ic = Integer.parseInt(id.getVariable());
-            if (ic != 0 && ic != 32) {
-                if (ic < 120)
-                    return ic;
-            }
-        } else if (id.getObject().equals("midi_rpn")) {
-            if (id.getVariable().equals("1"))
-                return 120; // Fine tuning
-            if (id.getVariable().equals("2"))
-                return 121; // Coarse tuning
-        }
-        return -1;
-    }
-
-    private double[] getValue(ModelIdentifier id) {
-        SoftControl o = objects.get(id.getObject());
-        if (o == null)
-            return null;
-        return o.get(id.getInstance(), id.getVariable());
-    }
-
-    private double transformValue(double value, ModelSource src) {
-        if (src.getTransform() != null)
-            return src.getTransform().transform(value);
-        else
-            return value;
-    }
-
-    private double transformValue(double value, ModelDestination dst) {
-        if (dst.getTransform() != null)
-            return dst.getTransform().transform(value);
-        else
-            return value;
-    }
-
-    private double processKeyBasedController(double value, int keycontrol) {
-        if (keycontrol == -1)
-            return value;
-        if (softchannel.keybasedcontroller_active != null)
-            if (softchannel.keybasedcontroller_active[note] != null)
-                if (softchannel.keybasedcontroller_active[note][keycontrol]) {
-                    double key_controlvalue =
-                            softchannel.keybasedcontroller_value[note][keycontrol];
-                    if (keycontrol == 10 || keycontrol == 91 || keycontrol == 93)
-                        return key_controlvalue;
-                    value += key_controlvalue * 2.0 - 1.0;
-                    if (value > 1)
-                        value = 1;
-                    else if (value < 0)
-                        value = 0;
-                }
-        return value;
-    }
-
-    private void processConnection(int ix) {
-        ModelConnectionBlock conn = connections[ix];
-        double[][] src = connections_src[ix];
-        double[] dst = connections_dst[ix];
-        if (dst == null || Double.isInfinite(dst[0]))
-            return;
-
-        double value = conn.getScale();
-        if (softchannel.keybasedcontroller_active == null) {
-            ModelSource[] srcs = conn.getSources();
-            for (int i = 0; i < srcs.length; i++) {
-                value *= transformValue(src[i][0], srcs[i]);
-                if (value == 0)
-                    break;
-            }
-        } else {
-            ModelSource[] srcs = conn.getSources();
-            int[] src_kc = connections_src_kc[ix];
-            for (int i = 0; i < srcs.length; i++) {
-                value *= transformValue(processKeyBasedController(src[i][0],
-                        src_kc[i]), srcs[i]);
-                if (value == 0)
-                    break;
-            }
-        }
-
-        value = transformValue(value, conn.getDestination());
-        dst[0] = dst[0] - connections_last[ix] + value;
-        connections_last[ix] = value;
-        // co_mixer_gain[0] = 0;
-    }
-
-    void updateTuning(SoftTuning newtuning) {
-        tuning = newtuning;
-        tunedKey = tuning.getTuning(note) / 100.0;
-        if (!portamento) {
-            co_noteon_keynumber[0] = tunedKey * (1.0 / 128.0);
-            if(performer == null)
-                return;
-            int[] c = performer.midi_connections[4];
-            if (c == null)
-                return;
-            for (int i = 0; i < c.length; i++)
-                processConnection(c[i]);
-        }
-    }
-
-    void setNote(int noteNumber) {
-        note = noteNumber;
-        tunedKey = tuning.getTuning(noteNumber) / 100.0;
-    }
-
-    void noteOn(int noteNumber, int velocity, int delay) {
-
-        sustain = false;
-        sostenuto = false;
-        portamento = false;
-
-        soundoff = false;
-        on = true;
-        active = true;
-        started = true;
-        // volume = velocity;
-
-        noteOn_noteNumber = noteNumber;
-        noteOn_velocity = velocity;
-        this.delay = delay;
-
-        lastMuteValue = 0;
-        lastSoloMuteValue = 0;
-
-        setNote(noteNumber);
-
-        if (performer.forcedKeynumber)
-            co_noteon_keynumber[0] = 0;
-        else
-            co_noteon_keynumber[0] = tunedKey * (1f / 128f);
-        if (performer.forcedVelocity)
-            co_noteon_velocity[0] = 0;
-        else
-            co_noteon_velocity[0] = velocity * (1f / 128f);
-        co_mixer_active[0] = 0;
-        co_mixer_gain[0] = 0;
-        co_mixer_pan[0] = 0;
-        co_mixer_balance[0] = 0;
-        co_mixer_reverb[0] = 0;
-        co_mixer_chorus[0] = 0;
-        co_osc_pitch[0] = 0;
-        co_filter_freq[0] = 0;
-        co_filter_q[0] = 0;
-        co_filter_type[0] = 0;
-        co_noteon_on[0] = 1;
-
-        eg.reset();
-        lfo.reset();
-        filter_left.reset();
-        filter_right.reset();
-
-        objects.put("master", synthesizer.getMainMixer().co_master);
-        objects.put("eg", eg);
-        objects.put("lfo", lfo);
-        objects.put("noteon", co_noteon);
-        objects.put("osc", co_osc);
-        objects.put("mixer", co_mixer);
-        objects.put("filter", co_filter);
-
-        connections = performer.connections;
-
-        if (connections_last == null
-                || connections_last.length < connections.length) {
-            connections_last = new double[connections.length];
-        }
-        if (connections_src == null
-                || connections_src.length < connections.length) {
-            connections_src = new double[connections.length][][];
-            connections_src_kc = new int[connections.length][];
-        }
-        if (connections_dst == null
-                || connections_dst.length < connections.length) {
-            connections_dst = new double[connections.length][];
-        }
-        for (int i = 0; i < connections.length; i++) {
-            ModelConnectionBlock conn = connections[i];
-            connections_last[i] = 0;
-            if (conn.getSources() != null) {
-                ModelSource[] srcs = conn.getSources();
-                if (connections_src[i] == null
-                        || connections_src[i].length < srcs.length) {
-                    connections_src[i] = new double[srcs.length][];
-                    connections_src_kc[i] = new int[srcs.length];
-                }
-                double[][] src = connections_src[i];
-                int[] src_kc = connections_src_kc[i];
-                connections_src[i] = src;
-                for (int j = 0; j < srcs.length; j++) {
-                    src_kc[j] = getValueKC(srcs[j].getIdentifier());
-                    src[j] = getValue(srcs[j].getIdentifier());
-                }
-            }
-
-            if (conn.getDestination() != null)
-                connections_dst[i] = getValue(conn.getDestination()
-                        .getIdentifier());
-            else
-                connections_dst[i] = null;
-        }
-
-        for (int i = 0; i < connections.length; i++)
-            processConnection(i);
-
-        if (extendedConnectionBlocks != null) {
-            for (ModelConnectionBlock connection: extendedConnectionBlocks) {
-                double value = 0;
-
-                if (softchannel.keybasedcontroller_active == null) {
-                    for (ModelSource src: connection.getSources()) {
-                        double x = getValue(src.getIdentifier())[0];
-                        ModelTransform t = src.getTransform();
-                        if (t == null)
-                            value += x;
-                        else
-                            value += t.transform(x);
-                    }
-                } else {
-                    for (ModelSource src: connection.getSources()) {
-                        double x = getValue(src.getIdentifier())[0];
-                        x = processKeyBasedController(x,
-                                getValueKC(src.getIdentifier()));
-                        ModelTransform t = src.getTransform();
-                        if (t == null)
-                            value += x;
-                        else
-                            value += t.transform(x);
-                    }
-                }
-
-                ModelDestination dest = connection.getDestination();
-                ModelTransform t = dest.getTransform();
-                if (t != null)
-                    value = t.transform(value);
-                getValue(dest.getIdentifier())[0] += value;
-            }
-        }
-
-        eg.init(synthesizer);
-        lfo.init(synthesizer);
-
-    }
-
-    void setPolyPressure(int pressure) {
-        if(performer == null)
-            return;
-        int[] c = performer.midi_connections[2];
-        if (c == null)
-            return;
-        for (int i = 0; i < c.length; i++)
-            processConnection(c[i]);
-    }
-
-    void setChannelPressure(int pressure) {
-        if(performer == null)
-            return;
-        int[] c = performer.midi_connections[1];
-        if (c == null)
-            return;
-        for (int i = 0; i < c.length; i++)
-            processConnection(c[i]);
-    }
-
-    void controlChange(int controller, int value) {
-        if(performer == null)
-            return;
-        int[] c = performer.midi_ctrl_connections[controller];
-        if (c == null)
-            return;
-        for (int i = 0; i < c.length; i++)
-            processConnection(c[i]);
-    }
-
-    void nrpnChange(int controller, int value) {
-        if(performer == null)
-            return;
-        int[] c = performer.midi_nrpn_connections.get(controller);
-        if (c == null)
-            return;
-        for (int i = 0; i < c.length; i++)
-            processConnection(c[i]);
-    }
-
-    void rpnChange(int controller, int value) {
-        if(performer == null)
-            return;
-        int[] c = performer.midi_rpn_connections.get(controller);
-        if (c == null)
-            return;
-        for (int i = 0; i < c.length; i++)
-            processConnection(c[i]);
-    }
-
-    void setPitchBend(int bend) {
-        if(performer == null)
-            return;
-        int[] c = performer.midi_connections[0];
-        if (c == null)
-            return;
-        for (int i = 0; i < c.length; i++)
-            processConnection(c[i]);
-    }
-
-    void setMute(boolean mute) {
-        co_mixer_gain[0] -= lastMuteValue;
-        lastMuteValue = mute ? -960 : 0;
-        co_mixer_gain[0] += lastMuteValue;
-    }
-
-    void setSoloMute(boolean mute) {
-        co_mixer_gain[0] -= lastSoloMuteValue;
-        lastSoloMuteValue = mute ? -960 : 0;
-        co_mixer_gain[0] += lastSoloMuteValue;
-    }
-
-    void shutdown() {
-        if (co_noteon_on[0] < -0.5)
-            return;
-        on = false;
-
-        co_noteon_on[0] = -1;
-
-        if(performer == null)
-            return;
-        int[] c = performer.midi_connections[3];
-        if (c == null)
-            return;
-        for (int i = 0; i < c.length; i++)
-            processConnection(c[i]);
-    }
-
-    void soundOff() {
-        on = false;
-        soundoff = true;
-    }
-
-    void noteOff(int velocity) {
-        if (!on)
-            return;
-        on = false;
-
-        noteOff_velocity = velocity;
-
-        if (softchannel.sustain) {
-            sustain = true;
-            return;
-        }
-        if (sostenuto)
-            return;
-
-        co_noteon_on[0] = 0;
-
-        if(performer == null)
-            return;
-        int[] c = performer.midi_connections[3];
-        if (c == null)
-            return;
-        for (int i = 0; i < c.length; i++)
-            processConnection(c[i]);
-    }
-
-    void redamp() {
-        if (co_noteon_on[0] > 0.5)
-            return;
-        if (co_noteon_on[0] < -0.5)
-            return; // don't redamp notes in shutdown stage
-
-        sustain = true;
-        co_noteon_on[0] = 1;
-
-        if(performer == null)
-            return;
-        int[] c = performer.midi_connections[3];
-        if (c == null)
-            return;
-        for (int i = 0; i < c.length; i++)
-            processConnection(c[i]);
-    }
-
-    void processControlLogic() {
-        if (stopping) {
-            active = false;
-            stopping = false;
-            audiostarted = false;
-            instrument = null;
-            performer = null;
-            connections = null;
-            extendedConnectionBlocks = null;
-            channelmixer = null;
-            if (osc_stream != null)
-                try {
-                    osc_stream.close();
-                } catch (IOException e) {
-                    //e.printStackTrace();
-                }
-
-            if (stealer_channel != null) {
-                stealer_channel.initVoice(this, stealer_performer,
-                        stealer_voiceID, stealer_noteNumber, stealer_velocity, 0,
-                        stealer_extendedConnectionBlocks, stealer_channelmixer,
-                        stealer_releaseTriggered);
-                stealer_releaseTriggered = false;
-                stealer_channel = null;
-                stealer_performer = null;
-                stealer_voiceID = -1;
-                stealer_noteNumber = 0;
-                stealer_velocity = 0;
-                stealer_extendedConnectionBlocks = null;
-                stealer_channelmixer = null;
-            }
-        }
-        if (started) {
-            audiostarted = true;
-
-            ModelOscillator osc = performer.oscillators[0];
-
-            osc_stream_off_transmitted = false;
-            if (osc instanceof ModelWavetable) {
-                try {
-                    resampler.open((ModelWavetable)osc,
-                            synthesizer.getFormat().getSampleRate());
-                    osc_stream = resampler;
-                } catch (IOException e) {
-                    //e.printStackTrace();
-                }
-            } else {
-                osc_stream = osc.open(synthesizer.getFormat().getSampleRate());
-            }
-            osc_attenuation = osc.getAttenuation();
-            osc_stream_nrofchannels = osc.getChannels();
-            if (osc_buff == null || osc_buff.length < osc_stream_nrofchannels)
-                osc_buff = new float[osc_stream_nrofchannels][];
-
-            if (osc_stream != null)
-                osc_stream.noteOn(softchannel, this, noteOn_noteNumber,
-                        noteOn_velocity);
-
-
-        }
-        if (audiostarted) {
-            if (portamento) {
-                double note_delta = tunedKey - (co_noteon_keynumber[0] * 128);
-                double note_delta_a = Math.abs(note_delta);
-                if (note_delta_a < 0.0000000001) {
-                    co_noteon_keynumber[0] = tunedKey * (1.0 / 128.0);
-                    portamento = false;
-                } else {
-                    if (note_delta_a > softchannel.portamento_time)
-                        note_delta = Math.signum(note_delta)
-                                * softchannel.portamento_time;
-                    co_noteon_keynumber[0] += note_delta * (1.0 / 128.0);
-                }
-
-                int[] c = performer.midi_connections[4];
-                if (c == null)
-                    return;
-                for (int i = 0; i < c.length; i++)
-                    processConnection(c[i]);
-            }
-
-            eg.processControlLogic();
-            lfo.processControlLogic();
-
-            for (int i = 0; i < performer.ctrl_connections.length; i++)
-                processConnection(performer.ctrl_connections[i]);
-
-            osc_stream.setPitch((float)co_osc_pitch[0]);
-
-            int filter_type = (int)co_filter_type[0];
-            double filter_freq;
-
-            if (co_filter_freq[0] == 13500.0)
-                filter_freq = 19912.126958213175;
-            else
-                filter_freq = 440.0 * Math.exp(
-                        ((co_filter_freq[0]) - 6900.0) *
-                        (Math.log(2.0) / 1200.0));
-            /*
-            filter_freq = 440.0 * Math.pow(2.0,
-            ((co_filter_freq[0]) - 6900.0) / 1200.0);*/
-            /*
-             * double velocity = co_noteon_velocity[0]; if(velocity < 0.5)
-             * filter_freq *= ((velocity * 2)*0.75 + 0.25);
-             */
-
-            double q = co_filter_q[0] / 10.0;
-            filter_left.setFilterType(filter_type);
-            filter_left.setFrequency(filter_freq);
-            filter_left.setResonance(q);
-            filter_right.setFilterType(filter_type);
-            filter_right.setFrequency(filter_freq);
-            filter_right.setResonance(q);
-            /*
-            float gain = (float) Math.pow(10,
-            (-osc_attenuation + co_mixer_gain[0]) / 200.0);
-             */
-            float gain = (float)Math.exp(
-                    (-osc_attenuation + co_mixer_gain[0])*(Math.log(10) / 200.0));
-
-            if (co_mixer_gain[0] <= -960)
-                gain = 0;
-
-            if (soundoff) {
-                stopping = true;
-                gain = 0;
-                /*
-                 * if(co_mixer_gain[0] > -960)
-                 *   co_mixer_gain[0] -= 960;
-                 */
-            }
-
-            volume = (int)(Math.sqrt(gain) * 128);
-
-            // gain *= 0.2;
-
-            double pan = co_mixer_pan[0] * (1.0 / 1000.0);
-            // System.out.println("pan = " + pan);
-            if (pan < 0)
-                pan = 0;
-            else if (pan > 1)
-                pan = 1;
-
-            if (pan == 0.5) {
-                out_mixer_left = gain * 0.7071067811865476f;
-                out_mixer_right = out_mixer_left;
-            } else {
-                out_mixer_left = gain * (float)Math.cos(pan * Math.PI * 0.5);
-                out_mixer_right = gain * (float)Math.sin(pan * Math.PI * 0.5);
-            }
-
-            double balance = co_mixer_balance[0] * (1.0 / 1000.0);
-            if (balance != 0.5) {
-                if (balance > 0.5)
-                    out_mixer_left *= (1 - balance) * 2;
-                else
-                    out_mixer_right *= balance * 2;
-            }
-
-            if (synthesizer.reverb_on) {
-                out_mixer_effect1 = (float)(co_mixer_reverb[0] * (1.0 / 1000.0));
-                out_mixer_effect1 *= gain;
-            } else
-                out_mixer_effect1 = 0;
-            if (synthesizer.chorus_on) {
-                out_mixer_effect2 = (float)(co_mixer_chorus[0] * (1.0 / 1000.0));
-                out_mixer_effect2 *= gain;
-            } else
-                out_mixer_effect2 = 0;
-            out_mixer_end = co_mixer_active[0] < 0.5;
-
-            if (!on)
-                if (!osc_stream_off_transmitted) {
-                    osc_stream_off_transmitted = true;
-                    if (osc_stream != null)
-                        osc_stream.noteOff(noteOff_velocity);
-                }
-
-        }
-        if (started) {
-            last_out_mixer_left = out_mixer_left;
-            last_out_mixer_right = out_mixer_right;
-            last_out_mixer_effect1 = out_mixer_effect1;
-            last_out_mixer_effect2 = out_mixer_effect2;
-            started = false;
-        }
-
-    }
-
-    void mixAudioStream(SoftAudioBuffer in, SoftAudioBuffer out,
-                                SoftAudioBuffer dout, float amp_from,
-                                float amp_to) {
-        int bufferlen = in.getSize();
-        if (amp_from < 0.000000001 && amp_to < 0.000000001)
-            return;
-        if(dout != null && delay != 0)
-        {
-            if (amp_from == amp_to) {
-                float[] fout = out.array();
-                float[] fin = in.array();
-                int j = 0;
-                for (int i = delay; i < bufferlen; i++)
-                    fout[i] += fin[j++] * amp_to;
-                fout = dout.array();
-                for (int i = 0; i < delay; i++)
-                    fout[i] += fin[j++] * amp_to;
-            } else {
-                float amp = amp_from;
-                float amp_delta = (amp_to - amp_from) / bufferlen;
-                float[] fout = out.array();
-                float[] fin = in.array();
-                int j = 0;
-                for (int i = delay; i < bufferlen; i++) {
-                    amp += amp_delta;
-                    fout[i] += fin[j++] * amp;
-                }
-                fout = dout.array();
-                for (int i = 0; i < delay; i++) {
-                    amp += amp_delta;
-                    fout[i] += fin[j++] * amp;
-                }
-            }
-        }
-        else
-        {
-            if (amp_from == amp_to) {
-                float[] fout = out.array();
-                float[] fin = in.array();
-                for (int i = 0; i < bufferlen; i++)
-                    fout[i] += fin[i] * amp_to;
-            } else {
-                float amp = amp_from;
-                float amp_delta = (amp_to - amp_from) / bufferlen;
-                float[] fout = out.array();
-                float[] fin = in.array();
-                for (int i = 0; i < bufferlen; i++) {
-                    amp += amp_delta;
-                    fout[i] += fin[i] * amp;
-                }
-            }
-        }
-
-    }
-
-    void processAudioLogic(SoftAudioBuffer[] buffer) {
-        if (!audiostarted)
-            return;
-
-        int bufferlen = buffer[0].getSize();
-
-        try {
-            osc_buff[0] = buffer[SoftMainMixer.CHANNEL_LEFT_DRY].array();
-            if (nrofchannels != 1)
-                osc_buff[1] = buffer[SoftMainMixer.CHANNEL_RIGHT_DRY].array();
-            int ret = osc_stream.read(osc_buff, 0, bufferlen);
-            if (ret == -1) {
-                stopping = true;
-                return;
-            }
-            if (ret != bufferlen) {
-                Arrays.fill(osc_buff[0], ret, bufferlen, 0f);
-                if (nrofchannels != 1)
-                    Arrays.fill(osc_buff[1], ret, bufferlen, 0f);
-            }
-
-        } catch (IOException e) {
-            //e.printStackTrace();
-        }
-
-        SoftAudioBuffer left = buffer[SoftMainMixer.CHANNEL_LEFT];
-        SoftAudioBuffer right = buffer[SoftMainMixer.CHANNEL_RIGHT];
-        SoftAudioBuffer mono = buffer[SoftMainMixer.CHANNEL_MONO];
-        SoftAudioBuffer eff1 = buffer[SoftMainMixer.CHANNEL_EFFECT1];
-        SoftAudioBuffer eff2 = buffer[SoftMainMixer.CHANNEL_EFFECT2];
-
-        SoftAudioBuffer dleft = buffer[SoftMainMixer.CHANNEL_DELAY_LEFT];
-        SoftAudioBuffer dright = buffer[SoftMainMixer.CHANNEL_DELAY_RIGHT];
-        SoftAudioBuffer dmono = buffer[SoftMainMixer.CHANNEL_DELAY_MONO];
-        SoftAudioBuffer deff1 = buffer[SoftMainMixer.CHANNEL_DELAY_EFFECT1];
-        SoftAudioBuffer deff2 = buffer[SoftMainMixer.CHANNEL_DELAY_EFFECT2];
-
-        SoftAudioBuffer leftdry = buffer[SoftMainMixer.CHANNEL_LEFT_DRY];
-        SoftAudioBuffer rightdry = buffer[SoftMainMixer.CHANNEL_RIGHT_DRY];
-
-        if (osc_stream_nrofchannels == 1)
-            rightdry = null;
-
-        if (!Double.isInfinite(co_filter_freq[0])) {
-            filter_left.processAudio(leftdry);
-            if (rightdry != null)
-                filter_right.processAudio(rightdry);
-        }
-
-        if (nrofchannels == 1) {
-            out_mixer_left = (out_mixer_left + out_mixer_right) / 2;
-            mixAudioStream(leftdry, left, dleft, last_out_mixer_left, out_mixer_left);
-            if (rightdry != null)
-                mixAudioStream(rightdry, left, dleft, last_out_mixer_left,
-                        out_mixer_left);
-        } else {
-            if(rightdry == null &&
-                    last_out_mixer_left == last_out_mixer_right &&
-                    out_mixer_left == out_mixer_right)
-            {
-                mixAudioStream(leftdry, mono, dmono, last_out_mixer_left, out_mixer_left);
-            }
-            else
-            {
-                mixAudioStream(leftdry, left, dleft, last_out_mixer_left, out_mixer_left);
-                if (rightdry != null)
-                    mixAudioStream(rightdry, right, dright, last_out_mixer_right,
-                        out_mixer_right);
-                else
-                    mixAudioStream(leftdry, right, dright, last_out_mixer_right,
-                        out_mixer_right);
-            }
-        }
-
-        if (rightdry == null) {
-            mixAudioStream(leftdry, eff1, deff1, last_out_mixer_effect1,
-                    out_mixer_effect1);
-            mixAudioStream(leftdry, eff2, deff2, last_out_mixer_effect2,
-                    out_mixer_effect2);
-        } else {
-            mixAudioStream(leftdry, eff1, deff1, last_out_mixer_effect1 * 0.5f,
-                    out_mixer_effect1 * 0.5f);
-            mixAudioStream(leftdry, eff2, deff2, last_out_mixer_effect2 * 0.5f,
-                    out_mixer_effect2 * 0.5f);
-            mixAudioStream(rightdry, eff1, deff1, last_out_mixer_effect1 * 0.5f,
-                    out_mixer_effect1 * 0.5f);
-            mixAudioStream(rightdry, eff2, deff2, last_out_mixer_effect2 * 0.5f,
-                    out_mixer_effect2 * 0.5f);
-        }
-
-        last_out_mixer_left = out_mixer_left;
-        last_out_mixer_right = out_mixer_right;
-        last_out_mixer_effect1 = out_mixer_effect1;
-        last_out_mixer_effect2 = out_mixer_effect2;
-
-        if (out_mixer_end) {
-            stopping = true;
-        }
-
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/StandardMidiFileReader.java b/ojluni/src/main/java/com/sun/media/sound/StandardMidiFileReader.java
deleted file mode 100755
index 1dbd72a..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/StandardMidiFileReader.java
+++ /dev/null
@@ -1,417 +0,0 @@
-/*
- * Copyright (c) 1999, 2013, 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.media.sound;
-
-import java.io.DataInputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.InputStream;
-import java.io.IOException;
-import java.io.EOFException;
-import java.io.BufferedInputStream;
-import java.net.URL;
-
-import javax.sound.midi.MidiFileFormat;
-import javax.sound.midi.InvalidMidiDataException;
-import javax.sound.midi.MetaMessage;
-import javax.sound.midi.MidiEvent;
-import javax.sound.midi.MidiMessage;
-import javax.sound.midi.Sequence;
-import javax.sound.midi.SysexMessage;
-import javax.sound.midi.Track;
-import javax.sound.midi.spi.MidiFileReader;
-
-
-
-/**
- * MIDI file reader.
- *
- * @author Kara Kytle
- * @author Jan Borgersen
- * @author Florian Bomers
- */
-
-public final class StandardMidiFileReader extends MidiFileReader {
-
-    private static final int MThd_MAGIC = 0x4d546864;  // 'MThd'
-
-    private static final int bisBufferSize = 1024; // buffer size in buffered input streams
-
-    public MidiFileFormat getMidiFileFormat(InputStream stream) throws InvalidMidiDataException, IOException {
-        return getMidiFileFormatFromStream(stream, MidiFileFormat.UNKNOWN_LENGTH, null);
-    }
-
-    // $$fb 2002-04-17: part of fix for 4635286: MidiSystem.getMidiFileFormat() returns format having invalid length
-    private MidiFileFormat getMidiFileFormatFromStream(InputStream stream, int fileLength, SMFParser smfParser) throws InvalidMidiDataException, IOException {
-        int maxReadLength = 16;
-        int duration = MidiFileFormat.UNKNOWN_LENGTH;
-        DataInputStream dis;
-
-        if (stream instanceof DataInputStream) {
-            dis = (DataInputStream) stream;
-        } else {
-            dis = new DataInputStream(stream);
-        }
-        if (smfParser == null) {
-            dis.mark(maxReadLength);
-        } else {
-            smfParser.stream = dis;
-        }
-
-        int type;
-        int numtracks;
-        float divisionType;
-        int resolution;
-
-        try {
-            int magic = dis.readInt();
-            if( !(magic == MThd_MAGIC) ) {
-                // not MIDI
-                throw new InvalidMidiDataException("not a valid MIDI file");
-            }
-
-            // read header length
-            int bytesRemaining = dis.readInt() - 6;
-            type = dis.readShort();
-            numtracks = dis.readShort();
-            int timing = dis.readShort();
-
-            // decipher the timing code
-            if (timing > 0) {
-                // tempo based timing.  value is ticks per beat.
-                divisionType = Sequence.PPQ;
-                resolution = timing;
-            } else {
-                // SMPTE based timing.  first decipher the frame code.
-                int frameCode = -1 * (timing >> 8);
-                switch(frameCode) {
-                case 24:
-                    divisionType = Sequence.SMPTE_24;
-                    break;
-                case 25:
-                    divisionType = Sequence.SMPTE_25;
-                    break;
-                case 29:
-                    divisionType = Sequence.SMPTE_30DROP;
-                    break;
-                case 30:
-                    divisionType = Sequence.SMPTE_30;
-                    break;
-                default:
-                    throw new InvalidMidiDataException("Unknown frame code: " + frameCode);
-                }
-                // now determine the timing resolution in ticks per frame.
-                resolution = timing & 0xFF;
-            }
-            if (smfParser != null) {
-                // remainder of this chunk
-                dis.skip(bytesRemaining);
-                smfParser.tracks = numtracks;
-            }
-        } finally {
-            // if only reading the file format, reset the stream
-            if (smfParser == null) {
-                dis.reset();
-            }
-        }
-        MidiFileFormat format = new MidiFileFormat(type, divisionType, resolution, fileLength, duration);
-        return format;
-    }
-
-
-    public MidiFileFormat getMidiFileFormat(URL url) throws InvalidMidiDataException, IOException {
-        InputStream urlStream = url.openStream(); // throws IOException
-        BufferedInputStream bis = new BufferedInputStream( urlStream, bisBufferSize );
-        MidiFileFormat fileFormat = null;
-        try {
-            fileFormat = getMidiFileFormat( bis ); // throws InvalidMidiDataException
-        } finally {
-            bis.close();
-        }
-        return fileFormat;
-    }
-
-
-    public MidiFileFormat getMidiFileFormat(File file) throws InvalidMidiDataException, IOException {
-        FileInputStream fis = new FileInputStream(file); // throws IOException
-        BufferedInputStream bis = new BufferedInputStream(fis, bisBufferSize);
-
-        // $$fb 2002-04-17: part of fix for 4635286: MidiSystem.getMidiFileFormat() returns format having invalid length
-        long length = file.length();
-        if (length > Integer.MAX_VALUE) {
-            length = MidiFileFormat.UNKNOWN_LENGTH;
-        }
-        MidiFileFormat fileFormat = null;
-        try {
-            fileFormat = getMidiFileFormatFromStream(bis, (int) length, null);
-        } finally {
-            bis.close();
-        }
-        return fileFormat;
-    }
-
-
-    public Sequence getSequence(InputStream stream) throws InvalidMidiDataException, IOException {
-        SMFParser smfParser = new SMFParser();
-        MidiFileFormat format = getMidiFileFormatFromStream(stream,
-                                                            MidiFileFormat.UNKNOWN_LENGTH,
-                                                            smfParser);
-
-        // must be MIDI Type 0 or Type 1
-        if ((format.getType() != 0) && (format.getType() != 1)) {
-            throw new InvalidMidiDataException("Invalid or unsupported file type: "  + format.getType());
-        }
-
-        // construct the sequence object
-        Sequence sequence = new Sequence(format.getDivisionType(), format.getResolution());
-
-        // for each track, go to the beginning and read the track events
-        for (int i = 0; i < smfParser.tracks; i++) {
-            if (smfParser.nextTrack()) {
-                smfParser.readTrack(sequence.createTrack());
-            } else {
-                break;
-            }
-        }
-        return sequence;
-    }
-
-
-
-    public Sequence getSequence(URL url) throws InvalidMidiDataException, IOException {
-        InputStream is = url.openStream();  // throws IOException
-        is = new BufferedInputStream(is, bisBufferSize);
-        Sequence seq = null;
-        try {
-            seq = getSequence(is);
-        } finally {
-            is.close();
-        }
-        return seq;
-    }
-
-
-    public Sequence getSequence(File file) throws InvalidMidiDataException, IOException {
-        InputStream is = new FileInputStream(file); // throws IOException
-        is = new BufferedInputStream(is, bisBufferSize);
-        Sequence seq = null;
-        try {
-            seq = getSequence(is);
-        } finally {
-            is.close();
-        }
-        return seq;
-    }
-}
-
-//=============================================================================================================
-
-/**
- * State variables during parsing of a MIDI file
- */
-final class SMFParser {
-    private static final int MTrk_MAGIC = 0x4d54726b;  // 'MTrk'
-
-    // set to true to not allow corrupt MIDI files tombe loaded
-    private static final boolean STRICT_PARSER = false;
-
-    private static final boolean DEBUG = false;
-
-    int tracks;                       // number of tracks
-    DataInputStream stream;   // the stream to read from
-
-    private int trackLength = 0;  // remaining length in track
-    private byte[] trackData = null;
-    private int pos = 0;
-
-    SMFParser() {
-    }
-
-    private int readUnsigned() throws IOException {
-        return trackData[pos++] & 0xFF;
-    }
-
-    private void read(byte[] data) throws IOException {
-        System.arraycopy(trackData, pos, data, 0, data.length);
-        pos += data.length;
-    }
-
-    private long readVarInt() throws IOException {
-        long value = 0; // the variable-lengh int value
-        int currentByte = 0;
-        do {
-            currentByte = trackData[pos++] & 0xFF;
-            value = (value << 7) + (currentByte & 0x7F);
-        } while ((currentByte & 0x80) != 0);
-        return value;
-    }
-
-    private int readIntFromStream() throws IOException {
-        try {
-            return stream.readInt();
-        } catch (EOFException eof) {
-            throw new EOFException("invalid MIDI file");
-        }
-    }
-
-    boolean nextTrack() throws IOException, InvalidMidiDataException {
-        int magic;
-        trackLength = 0;
-        do {
-            // $$fb 2003-08-20: fix for 4910986: MIDI file parser breaks up on http connection
-            if (stream.skipBytes(trackLength) != trackLength) {
-                if (!STRICT_PARSER) {
-                    return false;
-                }
-                throw new EOFException("invalid MIDI file");
-            }
-            magic = readIntFromStream();
-            trackLength = readIntFromStream();
-        } while (magic != MTrk_MAGIC);
-        if (!STRICT_PARSER) {
-            if (trackLength < 0) {
-                return false;
-            }
-        }
-        // now read track in a byte array
-        trackData = new byte[trackLength];
-        try {
-            // $$fb 2003-08-20: fix for 4910986: MIDI file parser breaks up on http connection
-            stream.readFully(trackData);
-        } catch (EOFException eof) {
-            if (!STRICT_PARSER) {
-                return false;
-            }
-            throw new EOFException("invalid MIDI file");
-        }
-        pos = 0;
-        return true;
-    }
-
-    private boolean trackFinished() {
-        return pos >= trackLength;
-    }
-
-    void readTrack(Track track) throws IOException, InvalidMidiDataException {
-        try {
-            // reset current tick to 0
-            long tick = 0;
-
-            // reset current status byte to 0 (invalid value).
-            // this should cause us to throw an InvalidMidiDataException if we don't
-            // get a valid status byte from the beginning of the track.
-            int status = 0;
-            boolean endOfTrackFound = false;
-
-            while (!trackFinished() && !endOfTrackFound) {
-                MidiMessage message;
-
-                int data1 = -1;         // initialize to invalid value
-                int data2 = 0;
-
-                // each event has a tick delay and then the event data.
-
-                // first read the delay (a variable-length int) and update our tick value
-                tick += readVarInt();
-
-                // check for new status
-                int byteValue = readUnsigned();
-
-                if (byteValue >= 0x80) {
-                    status = byteValue;
-                } else {
-                    data1 = byteValue;
-                }
-
-                switch (status & 0xF0) {
-                case 0x80:
-                case 0x90:
-                case 0xA0:
-                case 0xB0:
-                case 0xE0:
-                    // two data bytes
-                    if (data1 == -1) {
-                        data1 = readUnsigned();
-                    }
-                    data2 = readUnsigned();
-                    message = new FastShortMessage(status | (data1 << 8) | (data2 << 16));
-                    break;
-                case 0xC0:
-                case 0xD0:
-                    // one data byte
-                    if (data1 == -1) {
-                        data1 = readUnsigned();
-                    }
-                    message = new FastShortMessage(status | (data1 << 8));
-                    break;
-                case 0xF0:
-                    // sys-ex or meta
-                    switch(status) {
-                    case 0xF0:
-                    case 0xF7:
-                        // sys ex
-                        int sysexLength = (int) readVarInt();
-                        byte[] sysexData = new byte[sysexLength];
-                        read(sysexData);
-
-                        SysexMessage sysexMessage = new SysexMessage();
-                        sysexMessage.setMessage(status, sysexData, sysexLength);
-                        message = sysexMessage;
-                        break;
-
-                    case 0xFF:
-                        // meta
-                        int metaType = readUnsigned();
-                        int metaLength = (int) readVarInt();
-
-                        byte[] metaData = new byte[metaLength];
-                        read(metaData);
-
-                        MetaMessage metaMessage = new MetaMessage();
-                        metaMessage.setMessage(metaType, metaData, metaLength);
-                        message = metaMessage;
-                        if (metaType == 0x2F) {
-                            // end of track means it!
-                            endOfTrackFound = true;
-                        }
-                        break;
-                    default:
-                        throw new InvalidMidiDataException("Invalid status byte: " + status);
-                    } // switch sys-ex or meta
-                    break;
-                default:
-                    throw new InvalidMidiDataException("Invalid status byte: " + status);
-                } // switch
-                track.add(new MidiEvent(message, tick));
-            } // while
-        } catch (ArrayIndexOutOfBoundsException e) {
-            if (DEBUG) e.printStackTrace();
-            // fix for 4834374
-            throw new EOFException("invalid MIDI file");
-        }
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/StandardMidiFileWriter.java b/ojluni/src/main/java/com/sun/media/sound/StandardMidiFileWriter.java
deleted file mode 100755
index 97e0dc2..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/StandardMidiFileWriter.java
+++ /dev/null
@@ -1,467 +0,0 @@
-/*
- * Copyright (c) 1999, 2013, 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.media.sound;
-
-import java.io.DataOutputStream;
-import java.io.PipedInputStream;
-import java.io.PipedOutputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.ByteArrayInputStream;
-import java.io.SequenceInputStream;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.InputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-
-import javax.sound.midi.InvalidMidiDataException;
-import javax.sound.midi.MidiEvent;
-import javax.sound.midi.MetaMessage;
-import javax.sound.midi.Sequence;
-import javax.sound.midi.ShortMessage;
-import javax.sound.midi.SysexMessage;
-import javax.sound.midi.Track;
-import javax.sound.midi.spi.MidiFileWriter;
-
-
-/**
- * MIDI file writer.
- *
- * @author Kara Kytle
- * @author Jan Borgersen
- */
-public final class StandardMidiFileWriter extends MidiFileWriter {
-
-    private static final int MThd_MAGIC = 0x4d546864;  // 'MThd'
-    private static final int MTrk_MAGIC = 0x4d54726b;  // 'MTrk'
-
-    private static final int ONE_BYTE   = 1;
-    private static final int TWO_BYTE   = 2;
-    private static final int SYSEX      = 3;
-    private static final int META       = 4;
-    private static final int ERROR      = 5;
-    private static final int IGNORE     = 6;
-
-    private static final int MIDI_TYPE_0 = 0;
-    private static final int MIDI_TYPE_1 = 1;
-
-    private static final int bufferSize = 16384;  // buffersize for write
-    private DataOutputStream tddos;               // data output stream for track writing
-
-
-
-    /**
-     * MIDI parser types
-     */
-    private static final int types[] = {
-        MIDI_TYPE_0,
-        MIDI_TYPE_1
-    };
-
-
-    /**
-     * new
-     */
-    public int[] getMidiFileTypes() {
-        int[] localArray = new int[types.length];
-        System.arraycopy(types, 0, localArray, 0, types.length);
-        return localArray;
-    }
-
-    /**
-     * Obtains the file types that this provider can write from the
-     * sequence specified.
-     * @param sequence the sequence for which midi file type support
-     * is queried
-     * @return array of file types.  If no file types are supported,
-     * returns an array of length 0.
-     */
-    public int[] getMidiFileTypes(Sequence sequence){
-        int typesArray[];
-        Track tracks[] = sequence.getTracks();
-
-        if( tracks.length==1 ) {
-            typesArray = new int[2];
-            typesArray[0] = MIDI_TYPE_0;
-            typesArray[1] = MIDI_TYPE_1;
-        } else {
-            typesArray = new int[1];
-            typesArray[0] = MIDI_TYPE_1;
-        }
-
-        return typesArray;
-    }
-
-    public boolean isFileTypeSupported(int type) {
-        for(int i=0; i<types.length; i++) {
-            if( type == types[i] ) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    public int write(Sequence in, int type, OutputStream out) throws IOException {
-        byte [] buffer = null;
-
-        int bytesRead = 0;
-        long bytesWritten = 0;
-
-        if( !isFileTypeSupported(type,in) ) {
-            throw new IllegalArgumentException("Could not write MIDI file");
-        }
-        // First get the fileStream from this sequence
-        InputStream fileStream = getFileStream(type,in);
-        if (fileStream == null) {
-            throw new IllegalArgumentException("Could not write MIDI file");
-        }
-        buffer = new byte[bufferSize];
-
-        while( (bytesRead = fileStream.read( buffer )) >= 0 ) {
-            out.write( buffer, 0, (int)bytesRead );
-            bytesWritten += bytesRead;
-        }
-        // Done....return bytesWritten
-        return (int) bytesWritten;
-    }
-
-    public int write(Sequence in, int type, File out) throws IOException {
-        FileOutputStream fos = new FileOutputStream(out); // throws IOException
-        int bytesWritten = write( in, type, fos );
-        fos.close();
-        return bytesWritten;
-    }
-
-    //=================================================================================
-
-
-    private InputStream getFileStream(int type, Sequence sequence) throws IOException {
-        Track tracks[] = sequence.getTracks();
-        int bytesBuilt = 0;
-        int headerLength = 14;
-        int length = 0;
-        int timeFormat;
-        float divtype;
-
-        PipedOutputStream   hpos = null;
-        DataOutputStream    hdos = null;
-        PipedInputStream    headerStream = null;
-
-        InputStream         trackStreams [] = null;
-        InputStream         trackStream = null;
-        InputStream fStream = null;
-
-        // Determine the filetype to write
-        if( type==MIDI_TYPE_0 ) {
-            if (tracks.length != 1) {
-                return null;
-            }
-        } else if( type==MIDI_TYPE_1 ) {
-            if (tracks.length < 1) { // $$jb: 05.31.99: we _can_ write TYPE_1 if tracks.length==1
-                return null;
-            }
-        } else {
-            if(tracks.length==1) {
-                type = MIDI_TYPE_0;
-            } else if(tracks.length>1) {
-                type = MIDI_TYPE_1;
-            } else {
-                return null;
-            }
-        }
-
-        // Now build the file one track at a time
-        // Note that above we made sure that MIDI_TYPE_0 only happens
-        // if tracks.length==1
-
-        trackStreams = new InputStream[tracks.length];
-        int trackCount = 0;
-        for(int i=0; i<tracks.length; i++) {
-            try {
-                trackStreams[trackCount] = writeTrack( tracks[i], type );
-                trackCount++;
-            } catch (InvalidMidiDataException e) {
-                if(Printer.err) Printer.err("Exception in write: " + e.getMessage());
-            }
-            //bytesBuilt += trackStreams[i].getLength();
-        }
-
-        // Now seqence the track streams
-        if( trackCount == 1 ) {
-            trackStream = trackStreams[0];
-        } else if( trackCount > 1 ){
-            trackStream = trackStreams[0];
-            for(int i=1; i<tracks.length; i++) {
-                // fix for 5048381: NullPointerException when saving a MIDI sequence
-                // don't include failed track streams
-                if (trackStreams[i] != null) {
-                    trackStream = new SequenceInputStream( trackStream, trackStreams[i]);
-                }
-            }
-        } else {
-            throw new IllegalArgumentException("invalid MIDI data in sequence");
-        }
-
-        // Now build the header...
-        hpos = new PipedOutputStream();
-        hdos = new DataOutputStream(hpos);
-        headerStream = new PipedInputStream(hpos);
-
-        // Write the magic number
-        hdos.writeInt( MThd_MAGIC );
-
-        // Write the header length
-        hdos.writeInt( headerLength - 8 );
-
-        // Write the filetype
-        if(type==MIDI_TYPE_0) {
-            hdos.writeShort( 0 );
-        } else {
-            // MIDI_TYPE_1
-            hdos.writeShort( 1 );
-        }
-
-        // Write the number of tracks
-        hdos.writeShort( (short) trackCount );
-
-        // Determine and write the timing format
-        divtype = sequence.getDivisionType();
-        if( divtype == Sequence.PPQ ) {
-            timeFormat = sequence.getResolution();
-        } else if( divtype == Sequence.SMPTE_24) {
-            timeFormat = (24<<8) * -1;
-            timeFormat += (sequence.getResolution() & 0xFF);
-        } else if( divtype == Sequence.SMPTE_25) {
-            timeFormat = (25<<8) * -1;
-            timeFormat += (sequence.getResolution() & 0xFF);
-        } else if( divtype == Sequence.SMPTE_30DROP) {
-            timeFormat = (29<<8) * -1;
-            timeFormat += (sequence.getResolution() & 0xFF);
-        } else if( divtype == Sequence.SMPTE_30) {
-            timeFormat = (30<<8) * -1;
-            timeFormat += (sequence.getResolution() & 0xFF);
-        } else {
-            // $$jb: 04.08.99: What to really do here?
-            return null;
-        }
-        hdos.writeShort( timeFormat );
-
-        // now construct an InputStream to become the FileStream
-        fStream = new SequenceInputStream(headerStream, trackStream);
-        hdos.close();
-
-        length = bytesBuilt + headerLength;
-        return fStream;
-    }
-
-    /**
-     * Returns ONE_BYTE, TWO_BYTE, SYSEX, META,
-     * ERROR, or IGNORE (i.e. invalid for a MIDI file)
-     */
-    private int getType(int byteValue) {
-        if ((byteValue & 0xF0) == 0xF0) {
-            switch(byteValue) {
-            case 0xF0:
-            case 0xF7:
-                return SYSEX;
-            case 0xFF:
-                return META;
-            }
-            return IGNORE;
-        }
-
-        switch(byteValue & 0xF0) {
-        case 0x80:
-        case 0x90:
-        case 0xA0:
-        case 0xB0:
-        case 0xE0:
-            return TWO_BYTE;
-        case 0xC0:
-        case 0xD0:
-            return ONE_BYTE;
-        }
-        return ERROR;
-    }
-
-    private final static long mask = 0x7F;
-
-    private int writeVarInt(long value) throws IOException {
-        int len = 1;
-        int shift=63; // number of bitwise left-shifts of mask
-        // first screen out leading zeros
-        while ((shift > 0) && ((value & (mask << shift)) == 0)) shift-=7;
-        // then write actual values
-        while (shift > 0) {
-            tddos.writeByte((int) (((value & (mask << shift)) >> shift) | 0x80));
-            shift-=7;
-            len++;
-        }
-        tddos.writeByte((int) (value & mask));
-        return len;
-    }
-
-    private InputStream writeTrack( Track track, int type ) throws IOException, InvalidMidiDataException {
-        int bytesWritten = 0;
-        int lastBytesWritten = 0;
-        int size = track.size();
-        PipedOutputStream thpos = new PipedOutputStream();
-        DataOutputStream  thdos = new DataOutputStream(thpos);
-        PipedInputStream  thpis = new PipedInputStream(thpos);
-
-        ByteArrayOutputStream tdbos = new ByteArrayOutputStream();
-        tddos = new DataOutputStream(tdbos);
-        ByteArrayInputStream tdbis = null;
-
-        SequenceInputStream  fStream = null;
-
-        long currentTick = 0;
-        long deltaTick = 0;
-        long eventTick = 0;
-        int runningStatus = -1;
-
-        // -----------------------------
-        // Write each event in the track
-        // -----------------------------
-        for(int i=0; i<size; i++) {
-            MidiEvent event = track.get(i);
-
-            int status;
-            int eventtype;
-            int metatype;
-            int data1, data2;
-            int length;
-            byte data[] = null;
-            ShortMessage shortMessage = null;
-            MetaMessage  metaMessage  = null;
-            SysexMessage sysexMessage = null;
-
-            // get the tick
-            // $$jb: this gets easier if we change all system-wide time to delta ticks
-            eventTick = event.getTick();
-            deltaTick = event.getTick() - currentTick;
-            currentTick = event.getTick();
-
-            // get the status byte
-            status = event.getMessage().getStatus();
-            eventtype = getType( status );
-
-            switch( eventtype ) {
-            case ONE_BYTE:
-                shortMessage = (ShortMessage) event.getMessage();
-                data1 = shortMessage.getData1();
-                bytesWritten += writeVarInt( deltaTick );
-
-                if(status!=runningStatus) {
-                    runningStatus=status;
-                    tddos.writeByte(status);  bytesWritten += 1;
-                }
-                tddos.writeByte(data1);   bytesWritten += 1;
-                break;
-
-            case TWO_BYTE:
-                shortMessage = (ShortMessage) event.getMessage();
-                data1 = shortMessage.getData1();
-                data2 = shortMessage.getData2();
-
-                bytesWritten += writeVarInt( deltaTick );
-                if(status!=runningStatus) {
-                    runningStatus=status;
-                    tddos.writeByte(status);  bytesWritten += 1;
-                }
-                tddos.writeByte(data1);   bytesWritten += 1;
-                tddos.writeByte(data2);   bytesWritten += 1;
-                break;
-
-            case SYSEX:
-                sysexMessage = (SysexMessage) event.getMessage();
-                length     = sysexMessage.getLength();
-                data       = sysexMessage.getMessage();
-                bytesWritten += writeVarInt( deltaTick );
-
-                // $$jb: 04.08.99: always write status for sysex
-                runningStatus=status;
-                tddos.writeByte( data[0] ); bytesWritten += 1;
-
-                // $$jb: 10.18.99: we don't maintain length in
-                // the message data for SysEx (it is not transmitted
-                // over the line), so write the calculated length
-                // minus the status byte
-                bytesWritten += writeVarInt( (data.length-1) );
-
-                // $$jb: 10.18.99: now write the rest of the
-                // message
-                tddos.write(data, 1, (data.length-1));
-                bytesWritten += (data.length-1);
-                break;
-
-            case META:
-                metaMessage = (MetaMessage) event.getMessage();
-                length    = metaMessage.getLength();
-                data      = metaMessage.getMessage();
-                bytesWritten += writeVarInt( deltaTick );
-
-                // $$jb: 10.18.99: getMessage() returns the
-                // entire valid midi message for a file,
-                // including the status byte and the var-length-int
-                // length value, so we can just write the data
-                // here.  note that we must _always_ write the
-                // status byte, regardless of runningStatus.
-                runningStatus=status;
-                tddos.write( data, 0, data.length );
-                bytesWritten += data.length;
-                break;
-
-            case IGNORE:
-                // ignore this event
-                break;
-
-            case ERROR:
-                // ignore this event
-                break;
-
-            default:
-                throw new InvalidMidiDataException("internal file writer error");
-            }
-        }
-        // ---------------------------------
-        // End write each event in the track
-        // ---------------------------------
-
-        // Build Track header now that we know length
-        thdos.writeInt(MTrk_MAGIC);
-        thdos.writeInt(bytesWritten);
-        bytesWritten += 8;
-
-        // Now sequence them
-        tdbis = new ByteArrayInputStream( tdbos.toByteArray() );
-        fStream = new SequenceInputStream(thpis,tdbis);
-        thdos.close();
-        tddos.close();
-
-        return fStream;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/SunCodec.java b/ojluni/src/main/java/com/sun/media/sound/SunCodec.java
deleted file mode 100755
index 2327893..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/SunCodec.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright (c) 1999, 2013, 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.media.sound;
-
-import javax.sound.sampled.AudioFormat;
-import javax.sound.sampled.AudioInputStream;
-
-import javax.sound.sampled.spi.FormatConversionProvider;
-
-
-/**
- * A codec can encode and/or decode audio data.  It provides an
- * AudioInputStream from which processed data may be read.
- * <p>
- * Its input format represents the format of the incoming
- * audio data, or the format of the data in the underlying stream.
- * <p>
- * Its output format represents the format of the processed, outgoing
- * audio data.  This is the format of the data which may be read from
- * the filtered stream.
- *
- * @author Kara Kytle
- */
-abstract class SunCodec extends FormatConversionProvider {
-
-    private final AudioFormat.Encoding[] inputEncodings;
-    private final AudioFormat.Encoding[] outputEncodings;
-
-    /**
-     * Constructs a new codec object.
-     */
-    SunCodec(final AudioFormat.Encoding[] inputEncodings,
-             final AudioFormat.Encoding[] outputEncodings) {
-        this.inputEncodings = inputEncodings;
-        this.outputEncodings = outputEncodings;
-    }
-
-
-    /**
-     */
-    public final AudioFormat.Encoding[] getSourceEncodings() {
-        AudioFormat.Encoding[] encodings = new AudioFormat.Encoding[inputEncodings.length];
-        System.arraycopy(inputEncodings, 0, encodings, 0, inputEncodings.length);
-        return encodings;
-    }
-    /**
-     */
-    public final AudioFormat.Encoding[] getTargetEncodings() {
-        AudioFormat.Encoding[] encodings = new AudioFormat.Encoding[outputEncodings.length];
-        System.arraycopy(outputEncodings, 0, encodings, 0, outputEncodings.length);
-        return encodings;
-    }
-
-    /**
-     */
-    public abstract AudioFormat.Encoding[] getTargetEncodings(AudioFormat sourceFormat);
-
-
-    /**
-     */
-    public abstract AudioFormat[] getTargetFormats(AudioFormat.Encoding targetEncoding, AudioFormat sourceFormat);
-
-
-    /**
-     */
-    public abstract AudioInputStream getAudioInputStream(AudioFormat.Encoding targetEncoding, AudioInputStream sourceStream);
-    /**
-     */
-    public abstract AudioInputStream getAudioInputStream(AudioFormat targetFormat, AudioInputStream sourceStream);
-
-
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/SunFileReader.java b/ojluni/src/main/java/com/sun/media/sound/SunFileReader.java
deleted file mode 100755
index 202b94f..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/SunFileReader.java
+++ /dev/null
@@ -1,256 +0,0 @@
-/*
- * Copyright (c) 1999, 2007, 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.media.sound;
-
-import java.io.File;
-import java.io.InputStream;
-import java.io.IOException;
-import java.io.DataInputStream;
-import java.net.URL;
-
-import javax.sound.sampled.AudioFileFormat;
-import javax.sound.sampled.AudioInputStream;
-import javax.sound.sampled.UnsupportedAudioFileException;
-import javax.sound.sampled.spi.AudioFileReader;
-
-
-
-/**
- * Abstract File Reader class.
- *
- * @author Jan Borgersen
- */
-abstract class SunFileReader extends AudioFileReader {
-
-    // buffer size for temporary input streams
-    protected static final int bisBufferSize = 4096;
-
-    /**
-     * Constructs a new SunFileReader object.
-     */
-    SunFileReader() {
-    }
-
-
-    // METHODS TO IMPLEMENT AudioFileReader
-
-    /**
-     * Obtains the audio file format of the input stream provided.  The stream must
-     * point to valid audio file data.  In general, audio file providers may
-     * need to read some data from the stream before determining whether they
-     * support it.  These parsers must
-     * be able to mark the stream, read enough data to determine whether they
-     * support the stream, and, if not, reset the stream's read pointer to its original
-     * position.  If the input stream does not support this, this method may fail
-     * with an IOException.
-     * @param stream the input stream from which file format information should be
-     * extracted
-     * @return an <code>AudioFileFormat</code> object describing the audio file format
-     * @throws UnsupportedAudioFileException if the stream does not point to valid audio
-     * file data recognized by the system
-     * @throws IOException if an I/O exception occurs
-     * @see InputStream#markSupported
-     * @see InputStream#mark
-     */
-    abstract public AudioFileFormat getAudioFileFormat(InputStream stream) throws UnsupportedAudioFileException, IOException;
-
-
-    /**
-     * Obtains the audio file format of the URL provided.  The URL must
-     * point to valid audio file data.
-     * @param url the URL from which file format information should be
-     * extracted
-     * @return an <code>AudioFileFormat</code> object describing the audio file format
-     * @throws UnsupportedAudioFileException if the URL does not point to valid audio
-     * file data recognized by the system
-     * @throws IOException if an I/O exception occurs
-     */
-    abstract public AudioFileFormat getAudioFileFormat(URL url) throws UnsupportedAudioFileException, IOException;
-
-
-    /**
-     * Obtains the audio file format of the File provided.  The File must
-     * point to valid audio file data.
-     * @param file the File from which file format information should be
-     * extracted
-     * @return an <code>AudioFileFormat</code> object describing the audio file format
-     * @throws UnsupportedAudioFileException if the File does not point to valid audio
-     * file data recognized by the system
-     * @throws IOException if an I/O exception occurs
-     */
-    abstract public AudioFileFormat getAudioFileFormat(File file) throws UnsupportedAudioFileException, IOException;
-
-
-    /**
-     * Obtains an audio stream from the input stream provided.  The stream must
-     * point to valid audio file data.  In general, audio file providers may
-     * need to read some data from the stream before determining whether they
-     * support it.  These parsers must
-     * be able to mark the stream, read enough data to determine whether they
-     * support the stream, and, if not, reset the stream's read pointer to its original
-     * position.  If the input stream does not support this, this method may fail
-     * with an IOException.
-     * @param stream the input stream from which the <code>AudioInputStream</code> should be
-     * constructed
-     * @return an <code>AudioInputStream</code> object based on the audio file data contained
-     * in the input stream.
-     * @throws UnsupportedAudioFileException if the stream does not point to valid audio
-     * file data recognized by the system
-     * @throws IOException if an I/O exception occurs
-     * @see InputStream#markSupported
-     * @see InputStream#mark
-     */
-    abstract public AudioInputStream getAudioInputStream(InputStream stream) throws UnsupportedAudioFileException, IOException;
-
-
-    /**
-     * Obtains an audio stream from the URL provided.  The URL must
-     * point to valid audio file data.
-     * @param url the URL for which the <code>AudioInputStream</code> should be
-     * constructed
-     * @return an <code>AudioInputStream</code> object based on the audio file data pointed
-     * to by the URL
-     * @throws UnsupportedAudioFileException if the URL does not point to valid audio
-     * file data recognized by the system
-     * @throws IOException if an I/O exception occurs
-     */
-    abstract public AudioInputStream getAudioInputStream(URL url) throws UnsupportedAudioFileException, IOException;
-
-
-    /**
-     * Obtains an audio stream from the File provided.  The File must
-     * point to valid audio file data.
-     * @param file the File for which the <code>AudioInputStream</code> should be
-     * constructed
-     * @return an <code>AudioInputStream</code> object based on the audio file data pointed
-     * to by the File
-     * @throws UnsupportedAudioFileException if the File does not point to valid audio
-     * file data recognized by the system
-     * @throws IOException if an I/O exception occurs
-     */
-    abstract public AudioInputStream getAudioInputStream(File file) throws UnsupportedAudioFileException, IOException;
-
-
-    // HELPER METHODS
-
-
-
-    /**
-     * rllong
-     * Protected helper method to read 64 bits and changing the order of
-     * each bytes.
-     * @param DataInputStream
-     * @return 32 bits swapped value.
-     * @exception IOException
-     */
-    final int rllong(DataInputStream dis) throws IOException {
-
-        int b1, b2, b3, b4 ;
-        int i = 0;
-
-        i = dis.readInt();
-
-        b1 = ( i & 0xFF ) << 24 ;
-        b2 = ( i & 0xFF00 ) << 8;
-        b3 = ( i & 0xFF0000 ) >> 8;
-        b4 = ( i & 0xFF000000 ) >>> 24;
-
-        i = ( b1 | b2 | b3 | b4 );
-
-        return i;
-    }
-
-    /**
-     * big2little
-     * Protected helper method to swap the order of bytes in a 32 bit int
-     * @param int
-     * @return 32 bits swapped value
-     */
-    final int big2little(int i) {
-
-        int b1, b2, b3, b4 ;
-
-        b1 = ( i & 0xFF ) << 24 ;
-        b2 = ( i & 0xFF00 ) << 8;
-        b3 = ( i & 0xFF0000 ) >> 8;
-        b4 = ( i & 0xFF000000 ) >>> 24;
-
-        i = ( b1 | b2 | b3 | b4 );
-
-        return i;
-    }
-
-    /**
-     * rlshort
-     * Protected helper method to read 16 bits value. Swap high with low byte.
-     * @param DataInputStream
-     * @return the swapped value.
-     * @exception IOException
-     */
-    final short rlshort(DataInputStream dis)  throws IOException {
-
-        short s=0;
-        short high, low;
-
-        s = dis.readShort();
-
-        high = (short)(( s & 0xFF ) << 8) ;
-        low = (short)(( s & 0xFF00 ) >>> 8);
-
-        s = (short)( high | low );
-
-        return s;
-    }
-
-    /**
-     * big2little
-     * Protected helper method to swap the order of bytes in a 16 bit short
-     * @param int
-     * @return 16 bits swapped value
-     */
-    final short big2littleShort(short i) {
-
-        short high, low;
-
-        high = (short)(( i & 0xFF ) << 8) ;
-        low = (short)(( i & 0xFF00 ) >>> 8);
-
-        i = (short)( high | low );
-
-        return i;
-    }
-
-    /** Calculates the frame size for PCM frames.
-     * Note that this method is appropriate for non-packed samples.
-     * For instance, 12 bit, 2 channels will return 4 bytes, not 3.
-     * @param sampleSizeInBits the size of a single sample in bits
-     * @param channels the number of channels
-     * @return the size of a PCM frame in bytes.
-     */
-    static final int calculatePCMFrameSize(int sampleSizeInBits, int channels) {
-        return ((sampleSizeInBits + 7) / 8) * channels;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/SunFileWriter.java b/ojluni/src/main/java/com/sun/media/sound/SunFileWriter.java
deleted file mode 100755
index d771bad..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/SunFileWriter.java
+++ /dev/null
@@ -1,232 +0,0 @@
-/*
- * Copyright (c) 1999, 2013, 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.media.sound;
-
-import java.io.File;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.IOException;
-import java.io.DataInputStream;
-
-import javax.sound.sampled.AudioFileFormat;
-import javax.sound.sampled.AudioInputStream;
-import javax.sound.sampled.spi.AudioFileWriter;
-
-
-
-
-/**
- * Abstract File Writer class.
- *
- * @author Jan Borgersen
- */
-abstract class SunFileWriter extends AudioFileWriter {
-
-
-    // buffer size for write
-    protected static final int bufferSize = 16384;
-
-    // buffer size for temporary input streams
-    protected static final int bisBufferSize = 4096;
-
-
-    final AudioFileFormat.Type types[];
-
-
-    /**
-     * Constructs a new SunParser object.
-     */
-    SunFileWriter(AudioFileFormat.Type types[]) {
-        this.types = types;
-    }
-
-
-
-    // METHODS TO IMPLEMENT AudioFileWriter
-
-    // new, 10.27.99
-
-    public final AudioFileFormat.Type[] getAudioFileTypes(){
-        AudioFileFormat.Type[] localArray = new AudioFileFormat.Type[types.length];
-        System.arraycopy(types, 0, localArray, 0, types.length);
-        return localArray;
-    }
-
-
-    public abstract AudioFileFormat.Type[] getAudioFileTypes(AudioInputStream stream);
-
-    public abstract int write(AudioInputStream stream, AudioFileFormat.Type fileType, OutputStream out) throws IOException;
-
-    public abstract int write(AudioInputStream stream, AudioFileFormat.Type fileType, File out) throws IOException;
-
-
-    // HELPER METHODS
-
-
-    /**
-     * rllong
-     * Protected helper method to read 64 bits and changing the order of
-     * each bytes.
-     * @param DataInputStream
-     * @return 32 bits swapped value.
-     * @exception IOException
-     */
-    final int rllong(DataInputStream dis) throws IOException {
-
-        int b1, b2, b3, b4 ;
-        int i = 0;
-
-        i = dis.readInt();
-
-        b1 = ( i & 0xFF ) << 24 ;
-        b2 = ( i & 0xFF00 ) << 8;
-        b3 = ( i & 0xFF0000 ) >> 8;
-        b4 = ( i & 0xFF000000 ) >>> 24;
-
-        i = ( b1 | b2 | b3 | b4 );
-
-        return i;
-    }
-
-    /**
-     * big2little
-     * Protected helper method to swap the order of bytes in a 32 bit int
-     * @param int
-     * @return 32 bits swapped value
-     */
-    final int big2little(int i) {
-
-        int b1, b2, b3, b4 ;
-
-        b1 = ( i & 0xFF ) << 24 ;
-        b2 = ( i & 0xFF00 ) << 8;
-        b3 = ( i & 0xFF0000 ) >> 8;
-        b4 = ( i & 0xFF000000 ) >>> 24;
-
-        i = ( b1 | b2 | b3 | b4 );
-
-        return i;
-    }
-
-    /**
-     * rlshort
-     * Protected helper method to read 16 bits value. Swap high with low byte.
-     * @param DataInputStream
-     * @return the swapped value.
-     * @exception IOException
-     */
-    final short rlshort(DataInputStream dis)  throws IOException {
-
-        short s=0;
-        short high, low;
-
-        s = dis.readShort();
-
-        high = (short)(( s & 0xFF ) << 8) ;
-        low = (short)(( s & 0xFF00 ) >>> 8);
-
-        s = (short)( high | low );
-
-        return s;
-    }
-
-    /**
-     * big2little
-     * Protected helper method to swap the order of bytes in a 16 bit short
-     * @param int
-     * @return 16 bits swapped value
-     */
-    final short big2littleShort(short i) {
-
-        short high, low;
-
-        high = (short)(( i & 0xFF ) << 8) ;
-        low = (short)(( i & 0xFF00 ) >>> 8);
-
-        i = (short)( high | low );
-
-        return i;
-    }
-
-    /**
-     * InputStream wrapper class which prevent source stream from being closed.
-     * The class is usefull for use with SequenceInputStream to prevent
-     * closing of the source input streams.
-     */
-    final class NoCloseInputStream extends InputStream {
-        private final InputStream in;
-
-        NoCloseInputStream(InputStream in) {
-            this.in = in;
-        }
-
-        @Override
-        public int read() throws IOException {
-            return in.read();
-        }
-
-        @Override
-        public int read(byte b[]) throws IOException {
-            return in.read(b);
-        }
-
-        @Override
-        public int read(byte b[], int off, int len) throws IOException {
-            return in.read(b, off, len);
-        }
-
-        @Override
-        public long skip(long n) throws IOException {
-            return in.skip(n);
-        }
-
-        @Override
-        public int available() throws IOException {
-            return in.available();
-        }
-
-        @Override
-        public void close() throws IOException {
-            // don't propagate the call
-        }
-
-        @Override
-        public void mark(int readlimit) {
-            in.mark(readlimit);
-        }
-
-        @Override
-        public void reset() throws IOException {
-            in.reset();
-        }
-
-        @Override
-        public boolean markSupported() {
-            return in.markSupported();
-        }
-
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/Toolkit.java b/ojluni/src/main/java/com/sun/media/sound/Toolkit.java
deleted file mode 100755
index 5d52b8f..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/Toolkit.java
+++ /dev/null
@@ -1,235 +0,0 @@
-/*
- * Copyright (c) 1999, 2013, 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.media.sound;
-
-import javax.sound.sampled.AudioFormat;
-import javax.sound.sampled.AudioInputStream;
-import javax.sound.sampled.AudioSystem;
-
-/**
- * Common conversions etc.
- *
- * @author Kara Kytle
- * @author Florian Bomers
- */
-public final class Toolkit {
-
-    /**
-     * Suppresses default constructor, ensuring non-instantiability.
-     */
-    private Toolkit() {
-    }
-
-    /**
-     * Converts bytes from signed to unsigned.
-     */
-    static void getUnsigned8(byte[] b, int off, int len) {
-        for (int i = off; i < (off+len); i++) {
-            b[i] += 128;
-        }
-    }
-
-
-    /**
-     * Swaps bytes.
-     * @throws ArrayOutOfBoundsException if len is not a multiple of 2.
-     */
-    static void getByteSwapped(byte[] b, int off, int len) {
-
-        byte tempByte;
-        for (int i = off; i < (off+len); i+=2) {
-
-            tempByte = b[i];
-            b[i] = b[i+1];
-            b[i+1] = tempByte;
-        }
-    }
-
-
-    /**
-     * Linear to DB scale conversion.
-     */
-    static float linearToDB(float linear) {
-
-        float dB = (float) (Math.log((double)((linear==0.0)?0.0001:linear))/Math.log(10.0) * 20.0);
-        return dB;
-    }
-
-
-    /**
-     * DB to linear scale conversion.
-     */
-    static float dBToLinear(float dB) {
-
-        float linear = (float) Math.pow(10.0, dB/20.0);
-        return linear;
-    }
-
-    /*
-     * returns bytes aligned to a multiple of blocksize
-     * the return value will be in the range of (bytes-blocksize+1) ... bytes
-     */
-    static long align(long bytes, int blockSize) {
-        // prevent null pointers
-        if (blockSize <= 1) {
-            return bytes;
-        }
-        return bytes - (bytes % blockSize);
-    }
-
-    static int align(int bytes, int blockSize) {
-        // prevent null pointers
-        if (blockSize <= 1) {
-            return bytes;
-        }
-        return bytes - (bytes % blockSize);
-    }
-
-
-    /*
-     * gets the number of bytes needed to play the specified number of milliseconds
-     */
-    static long millis2bytes(AudioFormat format, long millis) {
-        long result = (long) (millis * format.getFrameRate() / 1000.0f * format.getFrameSize());
-        return align(result, format.getFrameSize());
-    }
-
-    /*
-     * gets the time in milliseconds for the given number of bytes
-     */
-    static long bytes2millis(AudioFormat format, long bytes) {
-        return (long) (bytes / format.getFrameRate() * 1000.0f / format.getFrameSize());
-    }
-
-    /*
-     * gets the number of bytes needed to play the specified number of microseconds
-     */
-    static long micros2bytes(AudioFormat format, long micros) {
-        long result = (long) (micros * format.getFrameRate() / 1000000.0f * format.getFrameSize());
-        return align(result, format.getFrameSize());
-    }
-
-    /*
-     * gets the time in microseconds for the given number of bytes
-     */
-    static long bytes2micros(AudioFormat format, long bytes) {
-        return (long) (bytes / format.getFrameRate() * 1000000.0f / format.getFrameSize());
-    }
-
-    /*
-     * gets the number of frames needed to play the specified number of microseconds
-     */
-    static long micros2frames(AudioFormat format, long micros) {
-        return (long) (micros * format.getFrameRate() / 1000000.0f);
-    }
-
-    /*
-     * gets the time in microseconds for the given number of frames
-     */
-    static long frames2micros(AudioFormat format, long frames) {
-        return (long) (((double) frames) / format.getFrameRate() * 1000000.0d);
-    }
-
-    static void isFullySpecifiedAudioFormat(AudioFormat format) {
-        if (!format.getEncoding().equals(AudioFormat.Encoding.PCM_SIGNED)
-            && !format.getEncoding().equals(AudioFormat.Encoding.PCM_UNSIGNED)
-            && !format.getEncoding().equals(AudioFormat.Encoding.ULAW)
-            && !format.getEncoding().equals(AudioFormat.Encoding.ALAW)) {
-            // we don't know how to verify possibly non-linear encodings
-            return;
-        }
-        if (format.getFrameRate() <= 0) {
-            throw new IllegalArgumentException("invalid frame rate: "
-                                               +((format.getFrameRate()==-1)?
-                                                 "NOT_SPECIFIED":String.valueOf(format.getFrameRate())));
-        }
-        if (format.getSampleRate() <= 0) {
-            throw new IllegalArgumentException("invalid sample rate: "
-                                               +((format.getSampleRate()==-1)?
-                                                 "NOT_SPECIFIED":String.valueOf(format.getSampleRate())));
-        }
-        if (format.getSampleSizeInBits() <= 0) {
-            throw new IllegalArgumentException("invalid sample size in bits: "
-                                               +((format.getSampleSizeInBits()==-1)?
-                                                 "NOT_SPECIFIED":String.valueOf(format.getSampleSizeInBits())));
-        }
-        if (format.getFrameSize() <= 0) {
-            throw new IllegalArgumentException("invalid frame size: "
-                                               +((format.getFrameSize()==-1)?
-                                                 "NOT_SPECIFIED":String.valueOf(format.getFrameSize())));
-        }
-        if (format.getChannels() <= 0) {
-            throw new IllegalArgumentException("invalid number of channels: "
-                                               +((format.getChannels()==-1)?
-                                                 "NOT_SPECIFIED":String.valueOf(format.getChannels())));
-        }
-    }
-
-
-    static boolean isFullySpecifiedPCMFormat(AudioFormat format) {
-        if (!format.getEncoding().equals(AudioFormat.Encoding.PCM_SIGNED)
-            && !format.getEncoding().equals(AudioFormat.Encoding.PCM_UNSIGNED)) {
-            return false;
-        }
-        if ((format.getFrameRate() <= 0)
-            || (format.getSampleRate() <= 0)
-            || (format.getSampleSizeInBits() <= 0)
-            || (format.getFrameSize() <= 0)
-            || (format.getChannels() <= 0)) {
-            return false;
-        }
-        return true;
-    }
-
-
-    public static AudioInputStream getPCMConvertedAudioInputStream(AudioInputStream ais) {
-        // we can't open the device for non-PCM playback, so we have
-        // convert any other encodings to PCM here (at least we try!)
-        AudioFormat af = ais.getFormat();
-
-        if( (!af.getEncoding().equals(AudioFormat.Encoding.PCM_SIGNED)) &&
-            (!af.getEncoding().equals(AudioFormat.Encoding.PCM_UNSIGNED))) {
-
-            try {
-                AudioFormat newFormat =
-                    new AudioFormat( AudioFormat.Encoding.PCM_SIGNED,
-                                     af.getSampleRate(),
-                                     16,
-                                     af.getChannels(),
-                                     af.getChannels() * 2,
-                                     af.getSampleRate(),
-                                     Platform.isBigEndian());
-                ais = AudioSystem.getAudioInputStream(newFormat, ais);
-            } catch (Exception e) {
-                if (Printer.err) e.printStackTrace();
-                ais = null;
-            }
-        }
-
-        return ais;
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/UlawCodec.java b/ojluni/src/main/java/com/sun/media/sound/UlawCodec.java
deleted file mode 100755
index 04fa519..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/UlawCodec.java
+++ /dev/null
@@ -1,418 +0,0 @@
-/*
- * Copyright (c) 1999, 2013, 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.media.sound;
-
-import java.io.IOException;
-
-import java.util.Vector;
-
-import javax.sound.sampled.AudioFormat;
-import javax.sound.sampled.AudioSystem;
-import javax.sound.sampled.AudioInputStream;
-
-
-/**
- * U-law encodes linear data, and decodes u-law data to linear data.
- *
- * @author Kara Kytle
- */
-public final class UlawCodec extends SunCodec {
-
-    /* Tables used for U-law decoding */
-
-    private final static byte[] ULAW_TABH = new byte[256];
-    private final static byte[] ULAW_TABL = new byte[256];
-
-    private static final AudioFormat.Encoding[] ulawEncodings = {AudioFormat.Encoding.ULAW,
-                                                                 AudioFormat.Encoding.PCM_SIGNED};
-
-    private static final short seg_end [] = {0xFF, 0x1FF, 0x3FF,
-                                             0x7FF, 0xFFF, 0x1FFF, 0x3FFF, 0x7FFF};
-
-    /**
-     * Initializes the decode tables
-     */
-    static {
-        for (int i=0;i<256;i++) {
-            int ulaw = ~i;
-            int t;
-
-            ulaw &= 0xFF;
-            t = ((ulaw & 0xf)<<3) + 132;
-            t <<= ((ulaw & 0x70) >> 4);
-            t = ( (ulaw&0x80) != 0 ) ? (132-t) : (t-132);
-
-            ULAW_TABL[i] = (byte) (t&0xff);
-            ULAW_TABH[i] = (byte) ((t>>8) & 0xff);
-        }
-    }
-
-
-    /**
-     * Constructs a new ULAW codec object.
-     */
-    public UlawCodec() {
-        super(ulawEncodings, ulawEncodings);
-    }
-
-    /**
-     */
-    public AudioFormat.Encoding[] getTargetEncodings(AudioFormat sourceFormat){
-        if( AudioFormat.Encoding.PCM_SIGNED.equals(sourceFormat.getEncoding()) ) {
-            if( sourceFormat.getSampleSizeInBits() == 16 ) {
-                AudioFormat.Encoding enc[] = new AudioFormat.Encoding[1];
-                enc[0] = AudioFormat.Encoding.ULAW;
-                return enc;
-            } else {
-                return new AudioFormat.Encoding[0];
-            }
-        } else if (AudioFormat.Encoding.ULAW.equals(sourceFormat.getEncoding())) {
-            if (sourceFormat.getSampleSizeInBits() == 8) {
-                AudioFormat.Encoding enc[] = new AudioFormat.Encoding[1];
-                enc[0] = AudioFormat.Encoding.PCM_SIGNED;
-                return enc;
-            } else {
-                return new AudioFormat.Encoding[0];
-            }
-        } else {
-            return new AudioFormat.Encoding[0];
-        }
-    }
-
-
-    /**
-     */
-    public AudioFormat[] getTargetFormats(AudioFormat.Encoding targetEncoding, AudioFormat sourceFormat){
-        if( (AudioFormat.Encoding.PCM_SIGNED.equals(targetEncoding)
-             && AudioFormat.Encoding.ULAW.equals(sourceFormat.getEncoding()))
-            ||
-            (AudioFormat.Encoding.ULAW.equals(targetEncoding)
-             && AudioFormat.Encoding.PCM_SIGNED.equals(sourceFormat.getEncoding()))) {
-                return getOutputFormats(sourceFormat);
-            } else {
-                return new AudioFormat[0];
-            }
-    }
-
-    /**
-     */
-    public AudioInputStream getAudioInputStream(AudioFormat.Encoding targetEncoding, AudioInputStream sourceStream){
-        AudioFormat sourceFormat = sourceStream.getFormat();
-        AudioFormat.Encoding sourceEncoding = sourceFormat.getEncoding();
-
-        if (sourceEncoding.equals(targetEncoding)) {
-            return sourceStream;
-        } else {
-            AudioFormat targetFormat = null;
-            if (!isConversionSupported(targetEncoding,sourceStream.getFormat())) {
-                throw new IllegalArgumentException("Unsupported conversion: " + sourceStream.getFormat().toString() + " to " + targetEncoding.toString());
-            }
-            if (AudioFormat.Encoding.ULAW.equals(sourceEncoding) &&
-                AudioFormat.Encoding.PCM_SIGNED.equals(targetEncoding) ) {
-                targetFormat = new AudioFormat( targetEncoding,
-                                                sourceFormat.getSampleRate(),
-                                                16,
-                                                sourceFormat.getChannels(),
-                                                2*sourceFormat.getChannels(),
-                                                sourceFormat.getSampleRate(),
-                                                sourceFormat.isBigEndian());
-            } else if (AudioFormat.Encoding.PCM_SIGNED.equals(sourceEncoding) &&
-                       AudioFormat.Encoding.ULAW.equals(targetEncoding)) {
-                targetFormat = new AudioFormat( targetEncoding,
-                                                sourceFormat.getSampleRate(),
-                                                8,
-                                                sourceFormat.getChannels(),
-                                                sourceFormat.getChannels(),
-                                                sourceFormat.getSampleRate(),
-                                                false);
-            } else {
-                throw new IllegalArgumentException("Unsupported conversion: " + sourceStream.getFormat().toString() + " to " + targetEncoding.toString());
-            }
-
-            return getAudioInputStream( targetFormat, sourceStream );
-        }
-    }
-
-    /**
-     * use old code...
-     */
-    public AudioInputStream getAudioInputStream(AudioFormat targetFormat, AudioInputStream sourceStream){
-        return getConvertedStream(targetFormat, sourceStream);
-    }
-
-
-    // OLD CODE
-
-    /**
-     * Opens the codec with the specified parameters.
-     * @param stream stream from which data to be processed should be read
-     * @param outputFormat desired data format of the stream after processing
-     * @return stream from which processed data may be read
-     * @throws IllegalArgumentException if the format combination supplied is
-     * not supported.
-     */
-    /*  public AudioInputStream getConvertedStream(AudioFormat outputFormat, AudioInputStream stream) { */
-    private AudioInputStream getConvertedStream(AudioFormat outputFormat, AudioInputStream stream) {
-        AudioInputStream cs = null;
-
-        AudioFormat inputFormat = stream.getFormat();
-
-        if( inputFormat.matches(outputFormat) ) {
-            cs = stream;
-        } else {
-            cs = (AudioInputStream) (new UlawCodecStream(stream, outputFormat));
-        }
-        return cs;
-    }
-
-    /**
-     * Obtains the set of output formats supported by the codec
-     * given a particular input format.
-     * If no output formats are supported for this input format,
-     * returns an array of length 0.
-     * @return array of supported output formats.
-     */
-    /*  public AudioFormat[] getOutputFormats(AudioFormat inputFormat) { */
-    private AudioFormat[] getOutputFormats(AudioFormat inputFormat) {
-
-        Vector formats = new Vector();
-        AudioFormat format;
-
-        if ((inputFormat.getSampleSizeInBits() == 16)
-            && AudioFormat.Encoding.PCM_SIGNED.equals(inputFormat.getEncoding())) {
-            format = new AudioFormat(AudioFormat.Encoding.ULAW,
-                                     inputFormat.getSampleRate(),
-                                     8,
-                                     inputFormat.getChannels(),
-                                     inputFormat.getChannels(),
-                                     inputFormat.getSampleRate(),
-                                     false );
-            formats.addElement(format);
-        }
-
-        if (AudioFormat.Encoding.ULAW.equals(inputFormat.getEncoding())) {
-            format = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,
-                                     inputFormat.getSampleRate(),
-                                     16,
-                                     inputFormat.getChannels(),
-                                     inputFormat.getChannels()*2,
-                                     inputFormat.getSampleRate(),
-                                     false );
-            formats.addElement(format);
-
-            format = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,
-                                     inputFormat.getSampleRate(),
-                                     16,
-                                     inputFormat.getChannels(),
-                                     inputFormat.getChannels()*2,
-                                     inputFormat.getSampleRate(),
-                                     true );
-            formats.addElement(format);
-        }
-
-        AudioFormat[] formatArray = new AudioFormat[formats.size()];
-        for (int i = 0; i < formatArray.length; i++) {
-            formatArray[i] = (AudioFormat)(formats.elementAt(i));
-        }
-        return formatArray;
-    }
-
-
-    class UlawCodecStream extends AudioInputStream {
-
-        private static final int tempBufferSize = 64;
-        private byte tempBuffer [] = null;
-
-        /**
-         * True to encode to u-law, false to decode to linear
-         */
-        boolean encode = false;
-
-        AudioFormat encodeFormat;
-        AudioFormat decodeFormat;
-
-        byte tabByte1[] = null;
-        byte tabByte2[] = null;
-        int highByte = 0;
-        int lowByte  = 1;
-
-        UlawCodecStream(AudioInputStream stream, AudioFormat outputFormat) {
-            super(stream, outputFormat, AudioSystem.NOT_SPECIFIED);
-
-            AudioFormat inputFormat = stream.getFormat();
-
-            // throw an IllegalArgumentException if not ok
-            if (!(isConversionSupported(outputFormat, inputFormat))) {
-                throw new IllegalArgumentException("Unsupported conversion: " + inputFormat.toString() + " to " + outputFormat.toString());
-            }
-
-            //$$fb 2002-07-18: fix for 4714846: JavaSound ULAW (8-bit) encoder erroneously depends on endian-ness
-            boolean PCMIsBigEndian;
-
-            // determine whether we are encoding or decoding
-            if (AudioFormat.Encoding.ULAW.equals(inputFormat.getEncoding())) {
-                encode = false;
-                encodeFormat = inputFormat;
-                decodeFormat = outputFormat;
-                PCMIsBigEndian = outputFormat.isBigEndian();
-            } else {
-                encode = true;
-                encodeFormat = outputFormat;
-                decodeFormat = inputFormat;
-                PCMIsBigEndian = inputFormat.isBigEndian();
-                tempBuffer = new byte[tempBufferSize];
-            }
-
-            // setup tables according to byte order
-            if (PCMIsBigEndian) {
-                tabByte1 = ULAW_TABH;
-                tabByte2 = ULAW_TABL;
-                highByte = 0;
-                lowByte  = 1;
-            } else {
-                tabByte1 = ULAW_TABL;
-                tabByte2 = ULAW_TABH;
-                highByte = 1;
-                lowByte  = 0;
-            }
-
-            // set the AudioInputStream length in frames if we know it
-            if (stream instanceof AudioInputStream) {
-                frameLength = ((AudioInputStream)stream).getFrameLength();
-            }
-            // set framePos to zero
-            framePos = 0;
-            frameSize = inputFormat.getFrameSize();
-            if (frameSize == AudioSystem.NOT_SPECIFIED) {
-                frameSize = 1;
-            }
-        }
-
-
-        /*
-         * $$jb 2/23/99
-         * Used to determine segment number in uLaw encoding
-         */
-        private short search(short val, short table[], short size) {
-            for(short i = 0; i < size; i++) {
-                if (val <= table[i]) { return i; }
-            }
-            return size;
-        }
-
-        /**
-         * Note that this won't actually read anything; must read in
-         * two-byte units.
-         */
-        public int read() throws IOException {
-            byte[] b = new byte[1];
-            if (read(b, 0, b.length) == 1) {
-                return b[1] & 0xFF;
-            }
-            return -1;
-        }
-
-        public int read(byte[] b) throws IOException {
-            return read(b, 0, b.length);
-        }
-
-        public int read(byte[] b, int off, int len) throws IOException {
-            // don't read fractional frames
-            if( len%frameSize != 0 ) {
-                len -= (len%frameSize);
-            }
-            if (encode) {
-                short BIAS = 0x84;
-                short mask;
-                short seg;
-                int i;
-
-                short sample;
-                byte enc;
-
-                int readCount = 0;
-                int currentPos = off;
-                int readLeft = len*2;
-                int readLen = ( (readLeft>tempBufferSize) ? tempBufferSize : readLeft );
-
-                while ((readCount = super.read(tempBuffer,0,readLen))>0) {
-                    for(i = 0; i < readCount; i+=2) {
-                        /* Get the sample from the tempBuffer */
-                        sample = (short)(( (tempBuffer[i + highByte]) << 8) & 0xFF00);
-                        sample |= (short)( (short) (tempBuffer[i + lowByte]) & 0xFF);
-
-                        /* Get the sign and the magnitude of the value. */
-                        if(sample < 0) {
-                            sample = (short) (BIAS - sample);
-                            mask = 0x7F;
-                        } else {
-                            sample += BIAS;
-                            mask = 0xFF;
-                        }
-                        /* Convert the scaled magnitude to segment number. */
-                        seg = search(sample, seg_end, (short) 8);
-                        /*
-                         * Combine the sign, segment, quantization bits;
-                         * and complement the code word.
-                         */
-                        if (seg >= 8) {  /* out of range, return maximum value. */
-                            enc = (byte) (0x7F ^ mask);
-                        } else {
-                            enc = (byte) ((seg << 4) | ((sample >> (seg+3)) & 0xF));
-                            enc ^= mask;
-                        }
-                        /* Now put the encoded sample where it belongs */
-                        b[currentPos] = enc;
-                        currentPos++;
-                    }
-                    /* And update pointers and counters for next iteration */
-                    readLeft -= readCount;
-                    readLen = ( (readLeft>tempBufferSize) ? tempBufferSize : readLeft );
-                }
-                if( currentPos==off && readCount<0 ) {  // EOF or error on read
-                    return readCount;
-                }
-                return (currentPos - off);  /* Number of bytes written to new buffer */
-            } else {
-                int i;
-                int readLen = len/2;
-                int readOffset = off + len/2;
-                int readCount = super.read(b, readOffset, readLen);
-
-                if(readCount<0) {               // EOF or error
-                    return readCount;
-                }
-                for (i = off; i < (off + (readCount*2)); i+=2) {
-                    b[i]        = (byte)tabByte1[b[readOffset] & 0xFF];
-                    b[i+1]      = (byte)tabByte2[b[readOffset] & 0xFF];
-                    readOffset++;
-                }
-                return (i - off);
-            }
-        }
-    } // end class UlawCodecStream
-
-} // end class ULAW
diff --git a/ojluni/src/main/java/com/sun/media/sound/WaveExtensibleFileReader.java b/ojluni/src/main/java/com/sun/media/sound/WaveExtensibleFileReader.java
deleted file mode 100755
index 827cef6..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/WaveExtensibleFileReader.java
+++ /dev/null
@@ -1,339 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, 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.media.sound;
-
-import java.io.BufferedInputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.sound.sampled.AudioFileFormat;
-import javax.sound.sampled.AudioFormat;
-import javax.sound.sampled.AudioInputStream;
-import javax.sound.sampled.AudioSystem;
-import javax.sound.sampled.UnsupportedAudioFileException;
-import javax.sound.sampled.AudioFormat.Encoding;
-import javax.sound.sampled.spi.AudioFileReader;
-
-/**
- * WAVE file reader for files using format WAVE_FORMAT_EXTENSIBLE (0xFFFE).
- *
- * @author Karl Helgason
- */
-public final class WaveExtensibleFileReader extends AudioFileReader {
-
-    static private class GUID {
-        long i1;
-
-        int s1;
-
-        int s2;
-
-        int x1;
-
-        int x2;
-
-        int x3;
-
-        int x4;
-
-        int x5;
-
-        int x6;
-
-        int x7;
-
-        int x8;
-
-        private GUID() {
-        }
-
-        GUID(long i1, int s1, int s2, int x1, int x2, int x3, int x4,
-                int x5, int x6, int x7, int x8) {
-            this.i1 = i1;
-            this.s1 = s1;
-            this.s2 = s2;
-            this.x1 = x1;
-            this.x2 = x2;
-            this.x3 = x3;
-            this.x4 = x4;
-            this.x5 = x5;
-            this.x6 = x6;
-            this.x7 = x7;
-            this.x8 = x8;
-        }
-
-        public static GUID read(RIFFReader riff) throws IOException {
-            GUID d = new GUID();
-            d.i1 = riff.readUnsignedInt();
-            d.s1 = riff.readUnsignedShort();
-            d.s2 = riff.readUnsignedShort();
-            d.x1 = riff.readUnsignedByte();
-            d.x2 = riff.readUnsignedByte();
-            d.x3 = riff.readUnsignedByte();
-            d.x4 = riff.readUnsignedByte();
-            d.x5 = riff.readUnsignedByte();
-            d.x6 = riff.readUnsignedByte();
-            d.x7 = riff.readUnsignedByte();
-            d.x8 = riff.readUnsignedByte();
-            return d;
-        }
-
-        public int hashCode() {
-            return (int) i1;
-        }
-
-        public boolean equals(Object obj) {
-            if (!(obj instanceof GUID))
-                return false;
-            GUID t = (GUID) obj;
-            if (i1 != t.i1)
-                return false;
-            if (s1 != t.s1)
-                return false;
-            if (s2 != t.s2)
-                return false;
-            if (x1 != t.x1)
-                return false;
-            if (x2 != t.x2)
-                return false;
-            if (x3 != t.x3)
-                return false;
-            if (x4 != t.x4)
-                return false;
-            if (x5 != t.x5)
-                return false;
-            if (x6 != t.x6)
-                return false;
-            if (x7 != t.x7)
-                return false;
-            if (x8 != t.x8)
-                return false;
-            return true;
-        }
-
-    }
-
-    private static final String[] channelnames = { "FL", "FR", "FC", "LF",
-            "BL",
-            "BR", // 5.1
-            "FLC", "FLR", "BC", "SL", "SR", "TC", "TFL", "TFC", "TFR", "TBL",
-            "TBC", "TBR" };
-
-    private static final String[] allchannelnames = { "w1", "w2", "w3", "w4", "w5",
-            "w6", "w7", "w8", "w9", "w10", "w11", "w12", "w13", "w14", "w15",
-            "w16", "w17", "w18", "w19", "w20", "w21", "w22", "w23", "w24",
-            "w25", "w26", "w27", "w28", "w29", "w30", "w31", "w32", "w33",
-            "w34", "w35", "w36", "w37", "w38", "w39", "w40", "w41", "w42",
-            "w43", "w44", "w45", "w46", "w47", "w48", "w49", "w50", "w51",
-            "w52", "w53", "w54", "w55", "w56", "w57", "w58", "w59", "w60",
-            "w61", "w62", "w63", "w64" };
-
-    private static final GUID SUBTYPE_PCM = new GUID(0x00000001, 0x0000, 0x0010,
-            0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71);
-
-    private static final GUID SUBTYPE_IEEE_FLOAT = new GUID(0x00000003, 0x0000,
-            0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71);
-
-    private String decodeChannelMask(long channelmask) {
-        StringBuffer sb = new StringBuffer();
-        long m = 1;
-        for (int i = 0; i < allchannelnames.length; i++) {
-            if ((channelmask & m) != 0L) {
-                if (i < channelnames.length) {
-                    sb.append(channelnames[i] + " ");
-                } else {
-                    sb.append(allchannelnames[i] + " ");
-                }
-            }
-            m *= 2L;
-        }
-        if (sb.length() == 0)
-            return null;
-        return sb.substring(0, sb.length() - 1);
-
-    }
-
-    public AudioFileFormat getAudioFileFormat(InputStream stream)
-            throws UnsupportedAudioFileException, IOException {
-
-        stream.mark(200);
-        AudioFileFormat format;
-        try {
-            format = internal_getAudioFileFormat(stream);
-        } finally {
-            stream.reset();
-        }
-        return format;
-    }
-
-    private AudioFileFormat internal_getAudioFileFormat(InputStream stream)
-            throws UnsupportedAudioFileException, IOException {
-
-        RIFFReader riffiterator = new RIFFReader(stream);
-        if (!riffiterator.getFormat().equals("RIFF"))
-            throw new UnsupportedAudioFileException();
-        if (!riffiterator.getType().equals("WAVE"))
-            throw new UnsupportedAudioFileException();
-
-        boolean fmt_found = false;
-        boolean data_found = false;
-
-        int channels = 1;
-        long samplerate = 1;
-        // long framerate = 1;
-        int framesize = 1;
-        int bits = 1;
-        int validBitsPerSample = 1;
-        long channelMask = 0;
-        GUID subFormat = null;
-
-        while (riffiterator.hasNextChunk()) {
-            RIFFReader chunk = riffiterator.nextChunk();
-
-            if (chunk.getFormat().equals("fmt ")) {
-                fmt_found = true;
-
-                int format = chunk.readUnsignedShort();
-                if (format != 0xFFFE)
-                    throw new UnsupportedAudioFileException(); // WAVE_FORMAT_EXTENSIBLE
-                // only
-                channels = chunk.readUnsignedShort();
-                samplerate = chunk.readUnsignedInt();
-                /* framerate = */chunk.readUnsignedInt();
-                framesize = chunk.readUnsignedShort();
-                bits = chunk.readUnsignedShort();
-                int cbSize = chunk.readUnsignedShort();
-                if (cbSize != 22)
-                    throw new UnsupportedAudioFileException();
-                validBitsPerSample = chunk.readUnsignedShort();
-                if (validBitsPerSample > bits)
-                    throw new UnsupportedAudioFileException();
-                channelMask = chunk.readUnsignedInt();
-                subFormat = GUID.read(chunk);
-
-            }
-            if (chunk.getFormat().equals("data")) {
-                data_found = true;
-                break;
-            }
-        }
-
-        if (!fmt_found)
-            throw new UnsupportedAudioFileException();
-        if (!data_found)
-            throw new UnsupportedAudioFileException();
-
-        Map<String, Object> p = new HashMap<String, Object>();
-        String s_channelmask = decodeChannelMask(channelMask);
-        if (s_channelmask != null)
-            p.put("channelOrder", s_channelmask);
-        if (channelMask != 0)
-            p.put("channelMask", channelMask);
-        // validBitsPerSample is only informational for PCM data,
-        // data is still encode according to SampleSizeInBits.
-        p.put("validBitsPerSample", validBitsPerSample);
-
-        AudioFormat audioformat = null;
-        if (subFormat.equals(SUBTYPE_PCM)) {
-            if (bits == 8) {
-                audioformat = new AudioFormat(Encoding.PCM_UNSIGNED,
-                        samplerate, bits, channels, framesize, samplerate,
-                        false, p);
-            } else {
-                audioformat = new AudioFormat(Encoding.PCM_SIGNED, samplerate,
-                        bits, channels, framesize, samplerate, false, p);
-            }
-        } else if (subFormat.equals(SUBTYPE_IEEE_FLOAT)) {
-            audioformat = new AudioFormat(Encoding.PCM_FLOAT,
-                    samplerate, bits, channels, framesize, samplerate, false, p);
-        } else
-            throw new UnsupportedAudioFileException();
-
-        AudioFileFormat fileformat = new AudioFileFormat(
-                AudioFileFormat.Type.WAVE, audioformat,
-                AudioSystem.NOT_SPECIFIED);
-        return fileformat;
-    }
-
-    public AudioInputStream getAudioInputStream(InputStream stream)
-            throws UnsupportedAudioFileException, IOException {
-
-        AudioFileFormat format = getAudioFileFormat(stream);
-        RIFFReader riffiterator = new RIFFReader(stream);
-        if (!riffiterator.getFormat().equals("RIFF"))
-            throw new UnsupportedAudioFileException();
-        if (!riffiterator.getType().equals("WAVE"))
-            throw new UnsupportedAudioFileException();
-        while (riffiterator.hasNextChunk()) {
-            RIFFReader chunk = riffiterator.nextChunk();
-            if (chunk.getFormat().equals("data")) {
-                return new AudioInputStream(chunk, format.getFormat(), chunk
-                        .getSize());
-            }
-        }
-        throw new UnsupportedAudioFileException();
-    }
-
-    public AudioFileFormat getAudioFileFormat(URL url)
-            throws UnsupportedAudioFileException, IOException {
-        InputStream stream = url.openStream();
-        AudioFileFormat format;
-        try {
-            format = getAudioFileFormat(new BufferedInputStream(stream));
-        } finally {
-            stream.close();
-        }
-        return format;
-    }
-
-    public AudioFileFormat getAudioFileFormat(File file)
-            throws UnsupportedAudioFileException, IOException {
-        InputStream stream = new FileInputStream(file);
-        AudioFileFormat format;
-        try {
-            format = getAudioFileFormat(new BufferedInputStream(stream));
-        } finally {
-            stream.close();
-        }
-        return format;
-    }
-
-    public AudioInputStream getAudioInputStream(URL url)
-            throws UnsupportedAudioFileException, IOException {
-        return getAudioInputStream(new BufferedInputStream(url.openStream()));
-    }
-
-    public AudioInputStream getAudioInputStream(File file)
-            throws UnsupportedAudioFileException, IOException {
-        return getAudioInputStream(new BufferedInputStream(new FileInputStream(
-                file)));
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/WaveFileFormat.java b/ojluni/src/main/java/com/sun/media/sound/WaveFileFormat.java
deleted file mode 100755
index af9c716..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/WaveFileFormat.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * Copyright (c) 1999, 2013, 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.media.sound;
-
-import javax.sound.sampled.AudioFileFormat;
-import javax.sound.sampled.AudioFormat;
-
-
-/**
- * WAVE file format class.
- *
- * @author Jan Borgersen
- */
-
-final class WaveFileFormat extends AudioFileFormat {
-
-    /**
-     * Wave format type.
-     */
-    private final int waveType;
-
-    //$$fb 2001-07-13: added management of header size in this class
-    //$$fb 2002-04-16: Fix for 4636355: RIFF audio headers could be _more_ spec compliant
-    private static final int STANDARD_HEADER_SIZE = 28;
-
-    //$$fb 2002-04-16: Fix for 4636355: RIFF audio headers could be _more_ spec compliant
-    /**
-     * fmt_ chunk size in bytes
-     */
-    private static final int STANDARD_FMT_CHUNK_SIZE = 16;
-
-    // magic numbers
-    static  final int RIFF_MAGIC         = 1380533830;
-    static  final int WAVE_MAGIC         = 1463899717;
-    static  final int FMT_MAGIC                  = 0x666d7420; // "fmt "
-    static  final int DATA_MAGIC                 = 0x64617461; // "data"
-
-    // encodings
-    static final int WAVE_FORMAT_UNKNOWN   = 0x0000;
-    static final int WAVE_FORMAT_PCM       = 0x0001;
-    static final int WAVE_FORMAT_ADPCM     = 0x0002;
-    static final int WAVE_FORMAT_ALAW      = 0x0006;
-    static final int WAVE_FORMAT_MULAW     = 0x0007;
-    static final int WAVE_FORMAT_OKI_ADPCM = 0x0010;
-    static final int WAVE_FORMAT_DIGISTD   = 0x0015;
-    static final int WAVE_FORMAT_DIGIFIX   = 0x0016;
-    static final int WAVE_IBM_FORMAT_MULAW = 0x0101;
-    static final int WAVE_IBM_FORMAT_ALAW  = 0x0102;
-    static final int WAVE_IBM_FORMAT_ADPCM = 0x0103;
-    static final int WAVE_FORMAT_DVI_ADPCM = 0x0011;
-    static final int WAVE_FORMAT_SX7383    = 0x1C07;
-
-
-    WaveFileFormat( AudioFileFormat aff ) {
-
-        this( aff.getType(), aff.getByteLength(), aff.getFormat(), aff.getFrameLength() );
-    }
-
-    WaveFileFormat(AudioFileFormat.Type type, int lengthInBytes, AudioFormat format, int lengthInFrames) {
-
-        super(type,lengthInBytes,format,lengthInFrames);
-
-        AudioFormat.Encoding encoding = format.getEncoding();
-
-        if( encoding.equals(AudioFormat.Encoding.ALAW) ) {
-            waveType = WAVE_FORMAT_ALAW;
-        } else if( encoding.equals(AudioFormat.Encoding.ULAW) ) {
-            waveType = WAVE_FORMAT_MULAW;
-        } else if( encoding.equals(AudioFormat.Encoding.PCM_SIGNED) ||
-                   encoding.equals(AudioFormat.Encoding.PCM_UNSIGNED) ) {
-            waveType = WAVE_FORMAT_PCM;
-        } else {
-            waveType = WAVE_FORMAT_UNKNOWN;
-        }
-    }
-
-    int getWaveType() {
-
-        return waveType;
-    }
-
-    int getHeaderSize() {
-        return getHeaderSize(getWaveType());
-    }
-
-    static int getHeaderSize(int waveType) {
-        //$$fb 2002-04-16: Fix for 4636355: RIFF audio headers could be _more_ spec compliant
-        // use dynamic format chunk size
-        return STANDARD_HEADER_SIZE + getFmtChunkSize(waveType);
-    }
-
-    static int getFmtChunkSize(int waveType) {
-        //$$fb 2002-04-16: Fix for 4636355: RIFF audio headers could be _more_ spec compliant
-        // add 2 bytes for "codec specific data length" for non-PCM codecs
-        int result = STANDARD_FMT_CHUNK_SIZE;
-        if (waveType != WAVE_FORMAT_PCM) {
-            result += 2; // WORD for "codec specific data length"
-        }
-        return result;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/WaveFileReader.java b/ojluni/src/main/java/com/sun/media/sound/WaveFileReader.java
deleted file mode 100755
index 9ba6a6b..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/WaveFileReader.java
+++ /dev/null
@@ -1,377 +0,0 @@
-/*
- * Copyright (c) 1999, 2013, 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.media.sound;
-
-import java.io.DataInputStream;
-import java.io.EOFException;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-
-import javax.sound.sampled.AudioFileFormat;
-import javax.sound.sampled.AudioFormat;
-import javax.sound.sampled.AudioInputStream;
-import javax.sound.sampled.AudioSystem;
-import javax.sound.sampled.UnsupportedAudioFileException;
-
-
-
-/**
- * WAVE file reader.
- *
- * @author Kara Kytle
- * @author Jan Borgersen
- * @author Florian Bomers
- */
-public final class WaveFileReader extends SunFileReader {
-
-    private static final int MAX_READ_LENGTH = 12;
-
-    /**
-     * Constructs a new WaveFileReader object.
-     */
-    public WaveFileReader() {
-    }
-
-
-    /**
-     * Obtains the audio file format of the input stream provided.  The stream must
-     * point to valid audio file data.  In general, audio file providers may
-     * need to read some data from the stream before determining whether they
-     * support it.  These parsers must
-     * be able to mark the stream, read enough data to determine whether they
-     * support the stream, and, if not, reset the stream's read pointer to its original
-     * position.  If the input stream does not support this, this method may fail
-     * with an IOException.
-     * @param stream the input stream from which file format information should be
-     * extracted
-     * @return an <code>AudioFileFormat</code> object describing the audio file format
-     * @throws UnsupportedAudioFileException if the stream does not point to valid audio
-     * file data recognized by the system
-     * @throws IOException if an I/O exception occurs
-     * @see InputStream#markSupported
-     * @see InputStream#mark
-     */
-    public AudioFileFormat getAudioFileFormat(InputStream stream) throws UnsupportedAudioFileException, IOException {
-        // fix for 4489272: AudioSystem.getAudioFileFormat() fails for InputStream, but works for URL
-        AudioFileFormat aff = getFMT(stream, true);
-        // the following is not strictly necessary - but was implemented like that in 1.3.0 - 1.4.1
-        // so I leave it as it was. May remove this for 1.5.0
-        stream.reset();
-        return aff;
-    }
-
-
-    /**
-     * Obtains the audio file format of the URL provided.  The URL must
-     * point to valid audio file data.
-     * @param url the URL from which file format information should be
-     * extracted
-     * @return an <code>AudioFileFormat</code> object describing the audio file format
-     * @throws UnsupportedAudioFileException if the URL does not point to valid audio
-     * file data recognized by the system
-     * @throws IOException if an I/O exception occurs
-     */
-    public AudioFileFormat getAudioFileFormat(URL url) throws UnsupportedAudioFileException, IOException {
-        InputStream urlStream = url.openStream(); // throws IOException
-        AudioFileFormat fileFormat = null;
-        try {
-            fileFormat = getFMT(urlStream, false);
-        } finally {
-            urlStream.close();
-        }
-        return fileFormat;
-    }
-
-
-    /**
-     * Obtains the audio file format of the File provided.  The File must
-     * point to valid audio file data.
-     * @param file the File from which file format information should be
-     * extracted
-     * @return an <code>AudioFileFormat</code> object describing the audio file format
-     * @throws UnsupportedAudioFileException if the File does not point to valid audio
-     * file data recognized by the system
-     * @throws IOException if an I/O exception occurs
-     */
-    public AudioFileFormat getAudioFileFormat(File file) throws UnsupportedAudioFileException, IOException {
-        AudioFileFormat fileFormat = null;
-        FileInputStream fis = new FileInputStream(file);       // throws IOException
-        // part of fix for 4325421
-        try {
-            fileFormat = getFMT(fis, false);
-        } finally {
-            fis.close();
-        }
-
-        return fileFormat;
-    }
-
-
-    /**
-     * Obtains an audio stream from the input stream provided.  The stream must
-     * point to valid audio file data.  In general, audio file providers may
-     * need to read some data from the stream before determining whether they
-     * support it.  These parsers must
-     * be able to mark the stream, read enough data to determine whether they
-     * support the stream, and, if not, reset the stream's read pointer to its original
-     * position.  If the input stream does not support this, this method may fail
-     * with an IOException.
-     * @param stream the input stream from which the <code>AudioInputStream</code> should be
-     * constructed
-     * @return an <code>AudioInputStream</code> object based on the audio file data contained
-     * in the input stream.
-     * @throws UnsupportedAudioFileException if the stream does not point to valid audio
-     * file data recognized by the system
-     * @throws IOException if an I/O exception occurs
-     * @see InputStream#markSupported
-     * @see InputStream#mark
-     */
-    public AudioInputStream getAudioInputStream(InputStream stream) throws UnsupportedAudioFileException, IOException {
-        // getFMT leaves the input stream at the beginning of the audio data
-        AudioFileFormat fileFormat = getFMT(stream, true); // throws UnsupportedAudioFileException, IOException
-
-        // we've got everything, and the stream is at the
-        // beginning of the audio data, so return an AudioInputStream.
-        return new AudioInputStream(stream, fileFormat.getFormat(), fileFormat.getFrameLength());
-    }
-
-
-    /**
-     * Obtains an audio stream from the URL provided.  The URL must
-     * point to valid audio file data.
-     * @param url the URL for which the <code>AudioInputStream</code> should be
-     * constructed
-     * @return an <code>AudioInputStream</code> object based on the audio file data pointed
-     * to by the URL
-     * @throws UnsupportedAudioFileException if the URL does not point to valid audio
-     * file data recognized by the system
-     * @throws IOException if an I/O exception occurs
-     */
-    public AudioInputStream getAudioInputStream(URL url) throws UnsupportedAudioFileException, IOException {
-        InputStream urlStream = url.openStream();  // throws IOException
-        AudioFileFormat fileFormat = null;
-        try {
-            fileFormat = getFMT(urlStream, false);
-        } finally {
-            if (fileFormat == null) {
-                urlStream.close();
-            }
-        }
-        return new AudioInputStream(urlStream, fileFormat.getFormat(), fileFormat.getFrameLength());
-    }
-
-
-    /**
-     * Obtains an audio stream from the File provided.  The File must
-     * point to valid audio file data.
-     * @param file the File for which the <code>AudioInputStream</code> should be
-     * constructed
-     * @return an <code>AudioInputStream</code> object based on the audio file data pointed
-     * to by the File
-     * @throws UnsupportedAudioFileException if the File does not point to valid audio
-     * file data recognized by the system
-     * @throws IOException if an I/O exception occurs
-     */
-    public AudioInputStream getAudioInputStream(File file) throws UnsupportedAudioFileException, IOException {
-        FileInputStream fis = new FileInputStream(file); // throws IOException
-        AudioFileFormat fileFormat = null;
-        // part of fix for 4325421
-        try {
-            fileFormat = getFMT(fis, false);
-        } finally {
-            if (fileFormat == null) {
-                fis.close();
-            }
-        }
-        return new AudioInputStream(fis, fileFormat.getFormat(), fileFormat.getFrameLength());
-    }
-
-
-    //--------------------------------------------------------------------
-
-
-    private AudioFileFormat getFMT(InputStream stream, boolean doReset) throws UnsupportedAudioFileException, IOException {
-
-        // assumes sream is rewound
-
-        int bytesRead;
-        int nread = 0;
-        int fmt;
-        int length = 0;
-        int wav_type = 0;
-        short channels;
-        long sampleRate;
-        long avgBytesPerSec;
-        short blockAlign;
-        int sampleSizeInBits;
-        AudioFormat.Encoding encoding = null;
-
-        DataInputStream dis = new DataInputStream( stream );
-
-        if (doReset) {
-            dis.mark(MAX_READ_LENGTH);
-        }
-
-        int magic = dis.readInt();
-        int fileLength = rllong(dis);
-        int waveMagic = dis.readInt();
-        int totallength;
-        if (fileLength <= 0) {
-            fileLength = AudioSystem.NOT_SPECIFIED;
-            totallength = AudioSystem.NOT_SPECIFIED;
-        } else {
-            totallength = fileLength + 8;
-        }
-
-        if ((magic != WaveFileFormat.RIFF_MAGIC) || (waveMagic != WaveFileFormat.WAVE_MAGIC)) {
-            // not WAVE, throw UnsupportedAudioFileException
-            if (doReset) {
-                dis.reset();
-            }
-            throw new UnsupportedAudioFileException("not a WAVE file");
-        }
-
-        // find and read the "fmt" chunk
-        // we break out of this loop either by hitting EOF or finding "fmt "
-        while(true) {
-
-            try {
-                fmt = dis.readInt();
-                nread += 4;
-                if( fmt==WaveFileFormat.FMT_MAGIC ) {
-                    // we've found the 'fmt' chunk
-                    break;
-                } else {
-                    // else not 'fmt', skip this chunk
-                    length = rllong(dis);
-                    nread += 4;
-                    if (length % 2 > 0) length++;
-                    nread += dis.skipBytes(length);
-                }
-            } catch (EOFException eof) {
-                                // we've reached the end of the file without finding the 'fmt' chunk
-                throw new UnsupportedAudioFileException("Not a valid WAV file");
-            }
-        }
-
-        // Read the format chunk size.
-        length = rllong(dis);
-        nread += 4;
-
-        // This is the nread position at the end of the format chunk
-        int endLength = nread + length;
-
-        // Read the wave format data out of the format chunk.
-
-        // encoding.
-        wav_type = rlshort(dis); nread += 2;
-
-        if (wav_type == WaveFileFormat.WAVE_FORMAT_PCM)
-            encoding = AudioFormat.Encoding.PCM_SIGNED;  // if 8-bit, we need PCM_UNSIGNED, below...
-        else if ( wav_type == WaveFileFormat.WAVE_FORMAT_ALAW )
-            encoding = AudioFormat.Encoding.ALAW;
-        else if ( wav_type == WaveFileFormat.WAVE_FORMAT_MULAW )
-            encoding = AudioFormat.Encoding.ULAW;
-        else {
-            // we don't support any other WAVE formats....
-            throw new UnsupportedAudioFileException("Not a supported WAV file");
-        }
-        // channels
-        channels = rlshort(dis); nread += 2;
-
-        // sample rate.
-        sampleRate = rllong(dis); nread += 4;
-
-        // this is the avgBytesPerSec
-        avgBytesPerSec = rllong(dis); nread += 4;
-
-        // this is blockAlign value
-        blockAlign = rlshort(dis); nread += 2;
-
-        // this is the PCM-specific value bitsPerSample
-        sampleSizeInBits = (int)rlshort(dis); nread += 2;
-
-        // if sampleSizeInBits==8, we need to use PCM_UNSIGNED
-        if ((sampleSizeInBits==8) && encoding.equals(AudioFormat.Encoding.PCM_SIGNED))
-            encoding = AudioFormat.Encoding.PCM_UNSIGNED;
-
-        // skip any difference between the length of the format chunk
-        // and what we read
-
-        // if the length of the chunk is odd, there's an extra pad byte
-        // at the end.  i've never seen this in the fmt chunk, but we
-        // should check to make sure.
-
-        if (length % 2 != 0) length += 1;
-
-        // $$jb: 07.28.99: endLength>nread, not length>nread.
-        //       This fixes #4257986
-        if (endLength > nread)
-            nread += dis.skipBytes(endLength - nread);
-
-        // we have a format now, so find the "data" chunk
-        // we break out of this loop either by hitting EOF or finding "data"
-        // $$kk: if "data" chunk precedes "fmt" chunk we are hosed -- can this legally happen?
-        nread = 0;
-        while(true) {
-            try{
-                int datahdr = dis.readInt();
-                nread+=4;
-                if (datahdr == WaveFileFormat.DATA_MAGIC) {
-                    // we've found the 'data' chunk
-                    break;
-                } else {
-                    // else not 'data', skip this chunk
-                    int thisLength = rllong(dis); nread += 4;
-                    if (thisLength % 2 > 0) thisLength++;
-                    nread += dis.skipBytes(thisLength);
-                }
-            } catch (EOFException eof) {
-                // we've reached the end of the file without finding the 'data' chunk
-                throw new UnsupportedAudioFileException("Not a valid WAV file");
-            }
-        }
-        // this is the length of the data chunk
-        int dataLength = rllong(dis); nread += 4;
-
-        // now build the new AudioFileFormat and return
-
-        AudioFormat format = new AudioFormat(encoding,
-                                             (float)sampleRate,
-                                             sampleSizeInBits, channels,
-                                             calculatePCMFrameSize(sampleSizeInBits, channels),
-                                             (float)sampleRate, false);
-
-        return new WaveFileFormat(AudioFileFormat.Type.WAVE,
-                                  totallength,
-                                  format,
-                                  dataLength / format.getFrameSize());
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/WaveFileWriter.java b/ojluni/src/main/java/com/sun/media/sound/WaveFileWriter.java
deleted file mode 100755
index c5f17e1..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/WaveFileWriter.java
+++ /dev/null
@@ -1,369 +0,0 @@
-/*
- * Copyright (c) 1999, 2013, 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.media.sound;
-
-import java.io.File;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.IOException;
-
-import java.io.BufferedOutputStream;
-import java.io.DataOutputStream;
-import java.io.FileOutputStream;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.RandomAccessFile;
-import java.io.SequenceInputStream;
-
-import javax.sound.sampled.AudioFileFormat;
-import javax.sound.sampled.AudioInputStream;
-import javax.sound.sampled.AudioFormat;
-import javax.sound.sampled.AudioSystem;
-
-//$$fb this class is buggy. Should be replaced in future.
-
-/**
- * WAVE file writer.
- *
- * @author Jan Borgersen
- */
-public final class WaveFileWriter extends SunFileWriter {
-
-    // magic numbers
-    static  final int RIFF_MAGIC = 1380533830;
-    static  final int WAVE_MAGIC = 1463899717;
-    static  final int FMT_MAGIC  = 0x666d7420; // "fmt "
-    static  final int DATA_MAGIC = 0x64617461; // "data"
-
-    // encodings
-    static final int WAVE_FORMAT_UNKNOWN   = 0x0000;
-    static final int WAVE_FORMAT_PCM       = 0x0001;
-    static final int WAVE_FORMAT_ADPCM     = 0x0002;
-    static final int WAVE_FORMAT_ALAW      = 0x0006;
-    static final int WAVE_FORMAT_MULAW     = 0x0007;
-    static final int WAVE_FORMAT_OKI_ADPCM = 0x0010;
-    static final int WAVE_FORMAT_DIGISTD   = 0x0015;
-    static final int WAVE_FORMAT_DIGIFIX   = 0x0016;
-    static final int WAVE_IBM_FORMAT_MULAW = 0x0101;
-    static final int WAVE_IBM_FORMAT_ALAW  = 0x0102;
-    static final int WAVE_IBM_FORMAT_ADPCM = 0x0103;
-    static final int WAVE_FORMAT_DVI_ADPCM = 0x0011;
-    static final int WAVE_FORMAT_SX7383    = 0x1C07;
-
-    /**
-     * Constructs a new WaveFileWriter object.
-     */
-    public WaveFileWriter() {
-        super(new AudioFileFormat.Type[]{AudioFileFormat.Type.WAVE});
-    }
-
-
-    // METHODS TO IMPLEMENT AudioFileWriter
-
-
-    public AudioFileFormat.Type[] getAudioFileTypes(AudioInputStream stream) {
-
-        AudioFileFormat.Type[] filetypes = new AudioFileFormat.Type[types.length];
-        System.arraycopy(types, 0, filetypes, 0, types.length);
-
-        // make sure we can write this stream
-        AudioFormat format = stream.getFormat();
-        AudioFormat.Encoding encoding = format.getEncoding();
-
-        if( AudioFormat.Encoding.ALAW.equals(encoding) ||
-            AudioFormat.Encoding.ULAW.equals(encoding) ||
-            AudioFormat.Encoding.PCM_SIGNED.equals(encoding) ||
-            AudioFormat.Encoding.PCM_UNSIGNED.equals(encoding) ) {
-
-            return filetypes;
-        }
-
-        return new AudioFileFormat.Type[0];
-    }
-
-
-    public int write(AudioInputStream stream, AudioFileFormat.Type fileType, OutputStream out) throws IOException {
-
-        //$$fb the following check must come first ! Otherwise
-        // the next frame length check may throw an IOException and
-        // interrupt iterating File Writers. (see bug 4351296)
-
-        // throws IllegalArgumentException if not supported
-        WaveFileFormat waveFileFormat = (WaveFileFormat)getAudioFileFormat(fileType, stream);
-
-        //$$fb when we got this far, we are committed to write this file
-
-        // we must know the total data length to calculate the file length
-        if( stream.getFrameLength() == AudioSystem.NOT_SPECIFIED ) {
-            throw new IOException("stream length not specified");
-        }
-
-        int bytesWritten = writeWaveFile(stream, waveFileFormat, out);
-        return bytesWritten;
-    }
-
-
-    public int write(AudioInputStream stream, AudioFileFormat.Type fileType, File out) throws IOException {
-
-        // throws IllegalArgumentException if not supported
-        WaveFileFormat waveFileFormat = (WaveFileFormat)getAudioFileFormat(fileType, stream);
-
-        // first write the file without worrying about length fields
-        FileOutputStream fos = new FileOutputStream( out );     // throws IOException
-        BufferedOutputStream bos = new BufferedOutputStream( fos, bisBufferSize );
-        int bytesWritten = writeWaveFile(stream, waveFileFormat, bos );
-        bos.close();
-
-        // now, if length fields were not specified, calculate them,
-        // open as a random access file, write the appropriate fields,
-        // close again....
-        if( waveFileFormat.getByteLength()== AudioSystem.NOT_SPECIFIED ) {
-
-            int dataLength=bytesWritten-waveFileFormat.getHeaderSize();
-            int riffLength=dataLength + waveFileFormat.getHeaderSize() - 8;
-
-            RandomAccessFile raf=new RandomAccessFile(out, "rw");
-            // skip RIFF magic
-            raf.skipBytes(4);
-            raf.writeInt(big2little( riffLength ));
-            // skip WAVE magic, fmt_ magic, fmt_ length, fmt_ chunk, data magic
-            raf.skipBytes(4+4+4+WaveFileFormat.getFmtChunkSize(waveFileFormat.getWaveType())+4);
-            raf.writeInt(big2little( dataLength ));
-            // that's all
-            raf.close();
-        }
-
-        return bytesWritten;
-    }
-
-    //--------------------------------------------------------------------
-
-    /**
-     * Returns the AudioFileFormat describing the file that will be written from this AudioInputStream.
-     * Throws IllegalArgumentException if not supported.
-     */
-    private AudioFileFormat getAudioFileFormat(AudioFileFormat.Type type, AudioInputStream stream) {
-        AudioFormat format = null;
-        WaveFileFormat fileFormat = null;
-        AudioFormat.Encoding encoding = AudioFormat.Encoding.PCM_SIGNED;
-
-        AudioFormat streamFormat = stream.getFormat();
-        AudioFormat.Encoding streamEncoding = streamFormat.getEncoding();
-
-        float sampleRate;
-        int sampleSizeInBits;
-        int channels;
-        int frameSize;
-        float frameRate;
-        int fileSize;
-
-        if (!types[0].equals(type)) {
-            throw new IllegalArgumentException("File type " + type + " not supported.");
-        }
-        int waveType = WaveFileFormat.WAVE_FORMAT_PCM;
-
-        if( AudioFormat.Encoding.ALAW.equals(streamEncoding) ||
-            AudioFormat.Encoding.ULAW.equals(streamEncoding) ) {
-
-            encoding = streamEncoding;
-            sampleSizeInBits = streamFormat.getSampleSizeInBits();
-            if (streamEncoding.equals(AudioFormat.Encoding.ALAW)) {
-                waveType = WAVE_FORMAT_ALAW;
-            } else {
-                waveType = WAVE_FORMAT_MULAW;
-            }
-        } else if ( streamFormat.getSampleSizeInBits()==8 ) {
-            encoding = AudioFormat.Encoding.PCM_UNSIGNED;
-            sampleSizeInBits=8;
-        } else {
-            encoding = AudioFormat.Encoding.PCM_SIGNED;
-            sampleSizeInBits=streamFormat.getSampleSizeInBits();
-        }
-
-
-        format = new AudioFormat( encoding,
-                                  streamFormat.getSampleRate(),
-                                  sampleSizeInBits,
-                                  streamFormat.getChannels(),
-                                  streamFormat.getFrameSize(),
-                                  streamFormat.getFrameRate(),
-                                  false);       // WAVE is little endian
-
-        if( stream.getFrameLength()!=AudioSystem.NOT_SPECIFIED ) {
-            fileSize = (int)stream.getFrameLength()*streamFormat.getFrameSize()
-                + WaveFileFormat.getHeaderSize(waveType);
-        } else {
-            fileSize = AudioSystem.NOT_SPECIFIED;
-        }
-
-        fileFormat = new WaveFileFormat( AudioFileFormat.Type.WAVE,
-                                         fileSize,
-                                         format,
-                                         (int)stream.getFrameLength() );
-
-        return fileFormat;
-    }
-
-
-    private int writeWaveFile(InputStream in, WaveFileFormat waveFileFormat, OutputStream out) throws IOException {
-
-        int bytesRead = 0;
-        int bytesWritten = 0;
-        InputStream fileStream = getFileStream(waveFileFormat, in);
-        byte buffer[] = new byte[bisBufferSize];
-        int maxLength = waveFileFormat.getByteLength();
-
-        while( (bytesRead = fileStream.read( buffer )) >= 0 ) {
-
-            if (maxLength>0) {
-                if( bytesRead < maxLength ) {
-                    out.write( buffer, 0, (int)bytesRead );
-                    bytesWritten += bytesRead;
-                    maxLength -= bytesRead;
-                } else {
-                    out.write( buffer, 0, (int)maxLength );
-                    bytesWritten += maxLength;
-                    maxLength = 0;
-                    break;
-                }
-            } else {
-                out.write( buffer, 0, (int)bytesRead );
-                bytesWritten += bytesRead;
-            }
-        }
-
-        return bytesWritten;
-    }
-
-    private InputStream getFileStream(WaveFileFormat waveFileFormat, InputStream audioStream) throws IOException {
-        // private method ... assumes audioFileFormat is a supported file type
-
-        // WAVE header fields
-        AudioFormat audioFormat = waveFileFormat.getFormat();
-        int headerLength       = waveFileFormat.getHeaderSize();
-        int riffMagic          = WaveFileFormat.RIFF_MAGIC;
-        int waveMagic          = WaveFileFormat.WAVE_MAGIC;
-        int fmtMagic           = WaveFileFormat.FMT_MAGIC;
-        int fmtLength          = WaveFileFormat.getFmtChunkSize(waveFileFormat.getWaveType());
-        short wav_type         = (short) waveFileFormat.getWaveType();
-        short channels         = (short) audioFormat.getChannels();
-        short sampleSizeInBits = (short) audioFormat.getSampleSizeInBits();
-        int sampleRate         = (int) audioFormat.getSampleRate();
-        int frameSizeInBytes   = (int) audioFormat.getFrameSize();
-        int frameRate              = (int) audioFormat.getFrameRate();
-        int avgBytesPerSec     = channels * sampleSizeInBits * sampleRate / 8;;
-        short blockAlign       = (short) ((sampleSizeInBits / 8) * channels);
-        int dataMagic              = WaveFileFormat.DATA_MAGIC;
-        int dataLength             = waveFileFormat.getFrameLength() * frameSizeInBytes;
-        int length                         = waveFileFormat.getByteLength();
-        int riffLength = dataLength + headerLength - 8;
-
-        byte header[] = null;
-        ByteArrayInputStream headerStream = null;
-        ByteArrayOutputStream baos = null;
-        DataOutputStream dos = null;
-        SequenceInputStream waveStream = null;
-
-        AudioFormat audioStreamFormat = null;
-        AudioFormat.Encoding encoding = null;
-        InputStream codedAudioStream = audioStream;
-
-        // if audioStream is an AudioInputStream and we need to convert, do it here...
-        if(audioStream instanceof AudioInputStream) {
-            audioStreamFormat = ((AudioInputStream)audioStream).getFormat();
-
-            encoding = audioStreamFormat.getEncoding();
-
-            if(AudioFormat.Encoding.PCM_SIGNED.equals(encoding)) {
-                if( sampleSizeInBits==8 ) {
-                    wav_type = WaveFileFormat.WAVE_FORMAT_PCM;
-                    // plug in the transcoder to convert from PCM_SIGNED to PCM_UNSIGNED
-                    codedAudioStream = AudioSystem.getAudioInputStream( new AudioFormat(
-                                                                                        AudioFormat.Encoding.PCM_UNSIGNED,
-                                                                                        audioStreamFormat.getSampleRate(),
-                                                                                        audioStreamFormat.getSampleSizeInBits(),
-                                                                                        audioStreamFormat.getChannels(),
-                                                                                        audioStreamFormat.getFrameSize(),
-                                                                                        audioStreamFormat.getFrameRate(),
-                                                                                        false),
-                                                                        (AudioInputStream)audioStream);
-                }
-            }
-            if( (AudioFormat.Encoding.PCM_SIGNED.equals(encoding) && audioStreamFormat.isBigEndian()) ||
-                (AudioFormat.Encoding.PCM_UNSIGNED.equals(encoding) && !audioStreamFormat.isBigEndian()) ||
-                (AudioFormat.Encoding.PCM_UNSIGNED.equals(encoding) && audioStreamFormat.isBigEndian()) ) {
-                if( sampleSizeInBits!=8) {
-                    wav_type = WaveFileFormat.WAVE_FORMAT_PCM;
-                    // plug in the transcoder to convert to PCM_SIGNED_LITTLE_ENDIAN
-                    codedAudioStream = AudioSystem.getAudioInputStream( new AudioFormat(
-                                                                                        AudioFormat.Encoding.PCM_SIGNED,
-                                                                                        audioStreamFormat.getSampleRate(),
-                                                                                        audioStreamFormat.getSampleSizeInBits(),
-                                                                                        audioStreamFormat.getChannels(),
-                                                                                        audioStreamFormat.getFrameSize(),
-                                                                                        audioStreamFormat.getFrameRate(),
-                                                                                        false),
-                                                                        (AudioInputStream)audioStream);
-                }
-            }
-        }
-
-
-        // Now push the header into a stream, concat, and return the new SequenceInputStream
-
-        baos = new ByteArrayOutputStream();
-        dos = new DataOutputStream(baos);
-
-        // we write in littleendian...
-        dos.writeInt(riffMagic);
-        dos.writeInt(big2little( riffLength ));
-        dos.writeInt(waveMagic);
-        dos.writeInt(fmtMagic);
-        dos.writeInt(big2little(fmtLength));
-        dos.writeShort(big2littleShort(wav_type));
-        dos.writeShort(big2littleShort(channels));
-        dos.writeInt(big2little(sampleRate));
-        dos.writeInt(big2little(avgBytesPerSec));
-        dos.writeShort(big2littleShort(blockAlign));
-        dos.writeShort(big2littleShort(sampleSizeInBits));
-        //$$fb 2002-04-16: Fix for 4636355: RIFF audio headers could be _more_ spec compliant
-        if (wav_type != WaveFileFormat.WAVE_FORMAT_PCM) {
-            // add length 0 for "codec specific data length"
-            dos.writeShort(0);
-        }
-
-        dos.writeInt(dataMagic);
-        dos.writeInt(big2little(dataLength));
-
-        dos.close();
-        header = baos.toByteArray();
-        headerStream = new ByteArrayInputStream( header );
-        waveStream = new SequenceInputStream(headerStream,
-                            new NoCloseInputStream(codedAudioStream));
-
-        return (InputStream)waveStream;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/WaveFloatFileReader.java b/ojluni/src/main/java/com/sun/media/sound/WaveFloatFileReader.java
deleted file mode 100755
index 280196e..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/WaveFloatFileReader.java
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- * Copyright (c) 2007, 2013, 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.media.sound;
-
-import java.io.BufferedInputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-
-import javax.sound.sampled.AudioFileFormat;
-import javax.sound.sampled.AudioFormat;
-import javax.sound.sampled.AudioFormat.Encoding;
-import javax.sound.sampled.AudioInputStream;
-import javax.sound.sampled.AudioSystem;
-import javax.sound.sampled.UnsupportedAudioFileException;
-import javax.sound.sampled.spi.AudioFileReader;
-
-/**
- * Floating-point encoded (format 3) WAVE file loader.
- *
- * @author Karl Helgason
- */
-public final class WaveFloatFileReader extends AudioFileReader {
-
-    public AudioFileFormat getAudioFileFormat(InputStream stream)
-            throws UnsupportedAudioFileException, IOException {
-
-        stream.mark(200);
-        AudioFileFormat format;
-        try {
-            format = internal_getAudioFileFormat(stream);
-        } finally {
-            stream.reset();
-        }
-        return format;
-    }
-
-    private AudioFileFormat internal_getAudioFileFormat(InputStream stream)
-            throws UnsupportedAudioFileException, IOException {
-
-        RIFFReader riffiterator = new RIFFReader(stream);
-        if (!riffiterator.getFormat().equals("RIFF"))
-            throw new UnsupportedAudioFileException();
-        if (!riffiterator.getType().equals("WAVE"))
-            throw new UnsupportedAudioFileException();
-
-        boolean fmt_found = false;
-        boolean data_found = false;
-
-        int channels = 1;
-        long samplerate = 1;
-        int framesize = 1;
-        int bits = 1;
-
-        while (riffiterator.hasNextChunk()) {
-            RIFFReader chunk = riffiterator.nextChunk();
-
-            if (chunk.getFormat().equals("fmt ")) {
-                fmt_found = true;
-
-                int format = chunk.readUnsignedShort();
-                if (format != 3) // WAVE_FORMAT_IEEE_FLOAT only
-                    throw new UnsupportedAudioFileException();
-                channels = chunk.readUnsignedShort();
-                samplerate = chunk.readUnsignedInt();
-                /* framerate = */chunk.readUnsignedInt();
-                framesize = chunk.readUnsignedShort();
-                bits = chunk.readUnsignedShort();
-            }
-            if (chunk.getFormat().equals("data")) {
-                data_found = true;
-                break;
-            }
-        }
-
-        if (!fmt_found)
-            throw new UnsupportedAudioFileException();
-        if (!data_found)
-            throw new UnsupportedAudioFileException();
-
-        AudioFormat audioformat = new AudioFormat(
-                Encoding.PCM_FLOAT, samplerate, bits, channels,
-                framesize, samplerate, false);
-        AudioFileFormat fileformat = new AudioFileFormat(
-                AudioFileFormat.Type.WAVE, audioformat,
-                AudioSystem.NOT_SPECIFIED);
-        return fileformat;
-    }
-
-    public AudioInputStream getAudioInputStream(InputStream stream)
-            throws UnsupportedAudioFileException, IOException {
-
-        AudioFileFormat format = getAudioFileFormat(stream);
-        RIFFReader riffiterator = new RIFFReader(stream);
-        if (!riffiterator.getFormat().equals("RIFF"))
-            throw new UnsupportedAudioFileException();
-        if (!riffiterator.getType().equals("WAVE"))
-            throw new UnsupportedAudioFileException();
-        while (riffiterator.hasNextChunk()) {
-            RIFFReader chunk = riffiterator.nextChunk();
-            if (chunk.getFormat().equals("data")) {
-                return new AudioInputStream(chunk, format.getFormat(),
-                        chunk.getSize());
-            }
-        }
-        throw new UnsupportedAudioFileException();
-    }
-
-    public AudioFileFormat getAudioFileFormat(URL url)
-            throws UnsupportedAudioFileException, IOException {
-        InputStream stream = url.openStream();
-        AudioFileFormat format;
-        try {
-            format = getAudioFileFormat(new BufferedInputStream(stream));
-        } finally {
-            stream.close();
-        }
-        return format;
-    }
-
-    public AudioFileFormat getAudioFileFormat(File file)
-            throws UnsupportedAudioFileException, IOException {
-        InputStream stream = new FileInputStream(file);
-        AudioFileFormat format;
-        try {
-            format = getAudioFileFormat(new BufferedInputStream(stream));
-        } finally {
-            stream.close();
-        }
-        return format;
-    }
-
-    public AudioInputStream getAudioInputStream(URL url)
-            throws UnsupportedAudioFileException, IOException {
-        return getAudioInputStream(new BufferedInputStream(url.openStream()));
-    }
-
-    public AudioInputStream getAudioInputStream(File file)
-            throws UnsupportedAudioFileException, IOException {
-        return getAudioInputStream(new BufferedInputStream(new FileInputStream(
-                file)));
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/WaveFloatFileWriter.java b/ojluni/src/main/java/com/sun/media/sound/WaveFloatFileWriter.java
deleted file mode 100755
index 2845083..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/WaveFloatFileWriter.java
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
- * Copyright (c) 2008, 2013, 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.media.sound;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.OutputStream;
-
-import javax.sound.sampled.AudioFileFormat;
-import javax.sound.sampled.AudioFormat;
-import javax.sound.sampled.AudioFormat.Encoding;
-import javax.sound.sampled.AudioInputStream;
-import javax.sound.sampled.AudioSystem;
-import javax.sound.sampled.AudioFileFormat.Type;
-import javax.sound.sampled.spi.AudioFileWriter;
-
-/**
- * Floating-point encoded (format 3) WAVE file writer.
- *
- * @author Karl Helgason
- */
-public final class WaveFloatFileWriter extends AudioFileWriter {
-
-    public Type[] getAudioFileTypes() {
-        return new Type[] { Type.WAVE };
-    }
-
-    public Type[] getAudioFileTypes(AudioInputStream stream) {
-
-        if (!stream.getFormat().getEncoding().equals(Encoding.PCM_FLOAT))
-            return new Type[0];
-        return new Type[] { Type.WAVE };
-    }
-
-    private void checkFormat(AudioFileFormat.Type type, AudioInputStream stream) {
-        if (!Type.WAVE.equals(type))
-            throw new IllegalArgumentException("File type " + type
-                    + " not supported.");
-        if (!stream.getFormat().getEncoding().equals(Encoding.PCM_FLOAT))
-            throw new IllegalArgumentException("File format "
-                    + stream.getFormat() + " not supported.");
-    }
-
-    public void write(AudioInputStream stream, RIFFWriter writer)
-            throws IOException {
-
-        RIFFWriter fmt_chunk = writer.writeChunk("fmt ");
-
-        AudioFormat format = stream.getFormat();
-        fmt_chunk.writeUnsignedShort(3); // WAVE_FORMAT_IEEE_FLOAT
-        fmt_chunk.writeUnsignedShort(format.getChannels());
-        fmt_chunk.writeUnsignedInt((int) format.getSampleRate());
-        fmt_chunk.writeUnsignedInt(((int) format.getFrameRate())
-                * format.getFrameSize());
-        fmt_chunk.writeUnsignedShort(format.getFrameSize());
-        fmt_chunk.writeUnsignedShort(format.getSampleSizeInBits());
-        fmt_chunk.close();
-        RIFFWriter data_chunk = writer.writeChunk("data");
-        byte[] buff = new byte[1024];
-        int len;
-        while ((len = stream.read(buff, 0, buff.length)) != -1)
-            data_chunk.write(buff, 0, len);
-        data_chunk.close();
-    }
-
-    private static class NoCloseOutputStream extends OutputStream {
-        final OutputStream out;
-
-        NoCloseOutputStream(OutputStream out) {
-            this.out = out;
-        }
-
-        public void write(int b) throws IOException {
-            out.write(b);
-        }
-
-        public void flush() throws IOException {
-            out.flush();
-        }
-
-        public void write(byte[] b, int off, int len) throws IOException {
-            out.write(b, off, len);
-        }
-
-        public void write(byte[] b) throws IOException {
-            out.write(b);
-        }
-    }
-
-    private AudioInputStream toLittleEndian(AudioInputStream ais) {
-        AudioFormat format = ais.getFormat();
-        AudioFormat targetFormat = new AudioFormat(format.getEncoding(), format
-                .getSampleRate(), format.getSampleSizeInBits(), format
-                .getChannels(), format.getFrameSize(), format.getFrameRate(),
-                false);
-        return AudioSystem.getAudioInputStream(targetFormat, ais);
-    }
-
-    public int write(AudioInputStream stream, Type fileType, OutputStream out)
-            throws IOException {
-
-        checkFormat(fileType, stream);
-        if (stream.getFormat().isBigEndian())
-            stream = toLittleEndian(stream);
-        RIFFWriter writer = new RIFFWriter(new NoCloseOutputStream(out), "WAVE");
-        write(stream, writer);
-        int fpointer = (int) writer.getFilePointer();
-        writer.close();
-        return fpointer;
-    }
-
-    public int write(AudioInputStream stream, Type fileType, File out)
-            throws IOException {
-        checkFormat(fileType, stream);
-        if (stream.getFormat().isBigEndian())
-            stream = toLittleEndian(stream);
-        RIFFWriter writer = new RIFFWriter(out, "WAVE");
-        write(stream, writer);
-        int fpointer = (int) writer.getFilePointer();
-        writer.close();
-        return fpointer;
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/media/sound/services/javax.sound.midi.spi.MidiDeviceProvider b/ojluni/src/main/java/com/sun/media/sound/services/javax.sound.midi.spi.MidiDeviceProvider
deleted file mode 100755
index bffb952..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/services/javax.sound.midi.spi.MidiDeviceProvider
+++ /dev/null
@@ -1,5 +0,0 @@
-# Providers for midi devices
-com.sun.media.sound.RealTimeSequencerProvider
-com.sun.media.sound.MidiOutDeviceProvider
-com.sun.media.sound.MidiInDeviceProvider
-com.sun.media.sound.SoftProvider
diff --git a/ojluni/src/main/java/com/sun/media/sound/services/javax.sound.midi.spi.MidiFileReader b/ojluni/src/main/java/com/sun/media/sound/services/javax.sound.midi.spi.MidiFileReader
deleted file mode 100755
index 1d643a0..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/services/javax.sound.midi.spi.MidiFileReader
+++ /dev/null
@@ -1,2 +0,0 @@
-# Providers for midi sequences
-com.sun.media.sound.StandardMidiFileReader
diff --git a/ojluni/src/main/java/com/sun/media/sound/services/javax.sound.midi.spi.MidiFileWriter b/ojluni/src/main/java/com/sun/media/sound/services/javax.sound.midi.spi.MidiFileWriter
deleted file mode 100755
index bb74df7..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/services/javax.sound.midi.spi.MidiFileWriter
+++ /dev/null
@@ -1,2 +0,0 @@
-# Providers for Midi file writing
-com.sun.media.sound.StandardMidiFileWriter
diff --git a/ojluni/src/main/java/com/sun/media/sound/services/javax.sound.midi.spi.SoundbankReader b/ojluni/src/main/java/com/sun/media/sound/services/javax.sound.midi.spi.SoundbankReader
deleted file mode 100755
index 03c3df8..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/services/javax.sound.midi.spi.SoundbankReader
+++ /dev/null
@@ -1,5 +0,0 @@
-# Providers for Soundbanks
-com.sun.media.sound.SF2SoundbankReader
-com.sun.media.sound.DLSSoundbankReader
-com.sun.media.sound.AudioFileSoundbankReader
-com.sun.media.sound.JARSoundbankReader
diff --git a/ojluni/src/main/java/com/sun/media/sound/services/javax.sound.sampled.spi.AudioFileReader b/ojluni/src/main/java/com/sun/media/sound/services/javax.sound.sampled.spi.AudioFileReader
deleted file mode 100755
index 624dac1..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/services/javax.sound.sampled.spi.AudioFileReader
+++ /dev/null
@@ -1,6 +0,0 @@
-# Providers for audio file reading
-com.sun.media.sound.AuFileReader
-com.sun.media.sound.AiffFileReader
-com.sun.media.sound.WaveFileReader
-com.sun.media.sound.WaveFloatFileReader
-com.sun.media.sound.SoftMidiAudioFileReader
diff --git a/ojluni/src/main/java/com/sun/media/sound/services/javax.sound.sampled.spi.AudioFileWriter b/ojluni/src/main/java/com/sun/media/sound/services/javax.sound.sampled.spi.AudioFileWriter
deleted file mode 100755
index bd84a76..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/services/javax.sound.sampled.spi.AudioFileWriter
+++ /dev/null
@@ -1,4 +0,0 @@
-# Providers for writing audio files
-com.sun.media.sound.AuFileWriter
-com.sun.media.sound.AiffFileWriter
-com.sun.media.sound.WaveFileWriter
diff --git a/ojluni/src/main/java/com/sun/media/sound/services/javax.sound.sampled.spi.FormatConversionProvider b/ojluni/src/main/java/com/sun/media/sound/services/javax.sound.sampled.spi.FormatConversionProvider
deleted file mode 100755
index a92a602..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/services/javax.sound.sampled.spi.FormatConversionProvider
+++ /dev/null
@@ -1,5 +0,0 @@
-# Providers for FormatConversion
-com.sun.media.sound.AudioFloatFormatConverter
-com.sun.media.sound.UlawCodec
-com.sun.media.sound.AlawCodec
-com.sun.media.sound.PCMtoPCMCodec
diff --git a/ojluni/src/main/java/com/sun/media/sound/services/javax.sound.sampled.spi.MixerProvider b/ojluni/src/main/java/com/sun/media/sound/services/javax.sound.sampled.spi.MixerProvider
deleted file mode 100755
index 5414bee..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/services/javax.sound.sampled.spi.MixerProvider
+++ /dev/null
@@ -1,3 +0,0 @@
-# last mixer is default mixer
-com.sun.media.sound.PortMixerProvider
-com.sun.media.sound.DirectAudioDeviceProvider
diff --git a/ojluni/src/main/java/com/sun/media/sound/services/linux-i586/javax.sound.sampled.spi.MixerProvider b/ojluni/src/main/java/com/sun/media/sound/services/linux-i586/javax.sound.sampled.spi.MixerProvider
deleted file mode 100755
index 56b8f12..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/services/linux-i586/javax.sound.sampled.spi.MixerProvider
+++ /dev/null
@@ -1,6 +0,0 @@
-# service provider file for Linux: with DirectAudioDeviceProvider
-# last mixer is default mixer
-com.sun.media.sound.PortMixerProvider
-com.sun.media.sound.SimpleInputDeviceProvider
-com.sun.media.sound.DirectAudioDeviceProvider
-com.sun.media.sound.HeadspaceMixerProvider
diff --git a/ojluni/src/main/java/com/sun/media/sound/services/windows-i586/javax.sound.sampled.spi.MixerProvider b/ojluni/src/main/java/com/sun/media/sound/services/windows-i586/javax.sound.sampled.spi.MixerProvider
deleted file mode 100755
index 7e39afe..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/services/windows-i586/javax.sound.sampled.spi.MixerProvider
+++ /dev/null
@@ -1,6 +0,0 @@
-# service provider file for Windows: with DirectAudioDeviceProvider
-# last mixer is default mixer
-com.sun.media.sound.PortMixerProvider
-com.sun.media.sound.SimpleInputDeviceProvider
-com.sun.media.sound.DirectAudioDeviceProvider
-com.sun.media.sound.HeadspaceMixerProvider
diff --git a/ojluni/src/main/java/com/sun/media/sound/services/windows-ia64/javax.sound.sampled.spi.MixerProvider b/ojluni/src/main/java/com/sun/media/sound/services/windows-ia64/javax.sound.sampled.spi.MixerProvider
deleted file mode 100755
index cf3bc8a..0000000
--- a/ojluni/src/main/java/com/sun/media/sound/services/windows-ia64/javax.sound.sampled.spi.MixerProvider
+++ /dev/null
@@ -1,6 +0,0 @@
-# service provider file for Windows IA64: with DirectAudioDeviceProvider
-# last mixer is default mixer
-com.sun.media.sound.PortMixerProvider
-com.sun.media.sound.SimpleInputDeviceProvider
-com.sun.media.sound.DirectAudioDeviceProvider
-com.sun.media.sound.HeadspaceMixerProvider
diff --git a/ojluni/src/main/java/com/sun/naming/internal/FactoryEnumeration.java b/ojluni/src/main/java/com/sun/naming/internal/FactoryEnumeration.java
deleted file mode 100755
index f5122d7..0000000
--- a/ojluni/src/main/java/com/sun/naming/internal/FactoryEnumeration.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * Copyright (c) 1999, 2001, 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.naming.internal;
-
-import java.util.List;
-import javax.naming.NamingException;
-
-/**
-  * The FactoryEnumeration is used for returning factory instances.
-  *
-  * @author Rosanna Lee
-  * @author Scott Seligman
- */
-
-// no need to implement Enumeration since this is only for internal use
-public final class FactoryEnumeration {
-    private List factories;
-    private int posn = 0;
-    private ClassLoader loader;
-
-    /**
-     * Records the input list and uses it directly to satisfy
-     * hasMore()/next() requests. An alternative would have been to use
-     * an enumeration/iterator from the list, but we want to update the
-     * list so we keep the
-     * original list. The list initially contains Class objects.
-     * As each element is used, the Class object is replaced by an
-     * instance of the Class itself; eventually, the list contains
-     * only a list of factory instances and no more updates are required.
-     *
-     * <p> Both Class objects and factories are wrapped in weak
-     * references so as not to prevent GC of the class loader.  Each
-     * weak reference is tagged with the factory's class name so the
-     * class can be reloaded if the reference is cleared.
-
-     * @param factories A non-null list
-     * @param loader    The class loader of the list's contents
-     */
-    FactoryEnumeration(List factories, ClassLoader loader) {
-        this.factories = factories;
-        this.loader = loader;
-    }
-
-    public Object next() throws NamingException {
-        synchronized (factories) {
-
-            NamedWeakReference ref = (NamedWeakReference) factories.get(posn++);
-            Object answer = ref.get();
-            if ((answer != null) && !(answer instanceof Class)) {
-                return answer;
-            }
-
-            String className = ref.getName();
-
-            try {
-                if (answer == null) {   // reload class if weak ref cleared
-                    answer = Class.forName(className, true, loader);
-                }
-                // Instantiate Class to get factory
-                answer = ((Class) answer).newInstance();
-                ref = new NamedWeakReference(answer, className);
-                factories.set(posn-1, ref);  // replace Class object or null
-                return answer;
-            } catch (ClassNotFoundException e) {
-                NamingException ne =
-                    new NamingException("No longer able to load " + className);
-                ne.setRootCause(e);
-                throw ne;
-            } catch (InstantiationException e) {
-                NamingException ne =
-                    new NamingException("Cannot instantiate " + answer);
-                ne.setRootCause(e);
-                throw ne;
-            } catch (IllegalAccessException e) {
-                NamingException ne = new NamingException("Cannot access " + answer);
-                ne.setRootCause(e);
-                throw ne;
-            }
-        }
-    }
-
-    public boolean hasMore() {
-        synchronized (factories) {
-            return posn < factories.size();
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/naming/internal/NamedWeakReference.java b/ojluni/src/main/java/com/sun/naming/internal/NamedWeakReference.java
deleted file mode 100755
index 6f576cf..0000000
--- a/ojluni/src/main/java/com/sun/naming/internal/NamedWeakReference.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 2001, 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.naming.internal;
-
-
-/**
- * A NamedWeakReference is a WeakReference with an immutable string name.
- *
- * @author Scott Seligman
- */
-
-
-class NamedWeakReference extends java.lang.ref.WeakReference {
-
-    private final String name;
-
-    NamedWeakReference(Object referent, String name) {
-        super(referent);
-        this.name = name;
-    }
-
-    String getName() {
-        return name;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/naming/internal/ResourceManager.java b/ojluni/src/main/java/com/sun/naming/internal/ResourceManager.java
deleted file mode 100755
index db0cbd6..0000000
--- a/ojluni/src/main/java/com/sun/naming/internal/ResourceManager.java
+++ /dev/null
@@ -1,608 +0,0 @@
-/*
- * Copyright (c) 1999, 2001, 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.naming.internal;
-
-import java.io.InputStream;
-import java.io.IOException;
-import java.net.URL;
-import java.lang.ref.WeakReference;
-import java.lang.reflect.Method;
-import java.lang.reflect.InvocationTargetException;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.Hashtable;
-import java.util.Map;
-import java.util.Properties;
-import java.util.StringTokenizer;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.WeakHashMap;
-
-import javax.naming.*;
-
-/**
-  * The ResourceManager class facilitates the reading of JNDI resource files.
-  *
-  * @author Rosanna Lee
-  * @author Scott Seligman
-  */
-
-public final class ResourceManager {
-
-    /*
-     * Name of provider resource files (without the package-name prefix.)
-     */
-    private static final String PROVIDER_RESOURCE_FILE_NAME =
-            "jndiprovider.properties";
-
-    /*
-     * Name of application resource files.
-     */
-    private static final String APP_RESOURCE_FILE_NAME = "jndi.properties";
-
-    /*
-     * Name of properties file in <java.home>/lib.
-     */
-    private static final String JRELIB_PROPERTY_FILE_NAME = "jndi.properties";
-
-    /*
-     * The standard JNDI properties that specify colon-separated lists.
-     */
-    private static final String[] listProperties = {
-        Context.OBJECT_FACTORIES,
-        Context.URL_PKG_PREFIXES,
-        Context.STATE_FACTORIES,
-        // The following shouldn't create a runtime dependence on ldap package.
-        javax.naming.ldap.LdapContext.CONTROL_FACTORIES
-    };
-
-    private static final VersionHelper helper =
-            VersionHelper.getVersionHelper();
-
-    /*
-     * A cache of the properties that have been constructed by
-     * the ResourceManager.  A Hashtable from a provider resource
-     * file is keyed on a class in the resource file's package.
-     * One from application resource files is keyed on the thread's
-     * context class loader.
-     */
-    private static final WeakHashMap propertiesCache = new WeakHashMap(11);
-
-    /*
-     * A cache of factory objects (ObjectFactory, StateFactory, ControlFactory).
-     *
-     * A two-level cache keyed first on context class loader and then
-     * on propValue.  Value is a list of class or factory objects,
-     * weakly referenced so as not to prevent GC of the class loader.
-     * Used in getFactories().
-     */
-    private static final WeakHashMap factoryCache = new WeakHashMap(11);
-
-    /*
-     * A cache of URL factory objects (ObjectFactory).
-     *
-     * A two-level cache keyed first on context class loader and then
-     * on classSuffix+propValue.  Value is the factory itself (weakly
-     * referenced so as not to prevent GC of the class loader) or
-     * NO_FACTORY if a previous search revealed no factory.  Used in
-     * getFactory().
-     */
-    private static final WeakHashMap urlFactoryCache = new WeakHashMap(11);
-    private static final WeakReference NO_FACTORY = new WeakReference(null);
-
-    /**
-     * A class to allow JNDI properties be specified as applet parameters
-     * without creating a static dependency on java.applet.
-     */
-    private static class AppletParameter {
-        private static final Class<?> clazz = getClass("java.applet.Applet");
-        private static final Method getMethod =
-            getMethod(clazz, "getParameter", String.class);
-        private static Class<?> getClass(String name) {
-            try {
-                return Class.forName(name, true, null);
-            } catch (ClassNotFoundException e) {
-                return null;
-            }
-        }
-        private static Method getMethod(Class<?> clazz,
-                                        String name,
-                                        Class<?>... paramTypes)
-        {
-            if (clazz != null) {
-                try {
-                    return clazz.getMethod(name, paramTypes);
-                } catch (NoSuchMethodException e) {
-                    throw new AssertionError(e);
-                }
-            } else {
-                return null;
-            }
-        }
-
-        /**
-         * Returns the value of the applet's named parameter.
-         */
-        static Object get(Object applet, String name) {
-            // if clazz is null then applet cannot be an Applet.
-            if (clazz == null || !clazz.isInstance(applet))
-                throw new ClassCastException(applet.getClass().getName());
-            try {
-                return getMethod.invoke(applet, name);
-            } catch (InvocationTargetException e) {
-                throw new AssertionError(e);
-            } catch (IllegalAccessException iae) {
-                throw new AssertionError(iae);
-            }
-        }
-    }
-
-    // There should be no instances of this class.
-    private ResourceManager() {
-    }
-
-
-    // ---------- Public methods ----------
-
-    /*
-     * Given the environment parameter passed to the initial context
-     * constructor, returns the full environment for that initial
-     * context (never null).  This is based on the environment
-     * parameter, the applet parameters (where appropriate), the
-     * system properties, and all application resource files.
-     *
-     * <p> This method will modify <tt>env</tt> and save
-     * a reference to it.  The caller may no longer modify it.
-     *
-     * @param env       environment passed to initial context constructor.
-     *                  Null indicates an empty environment.
-     *
-     * @throws NamingException if an error occurs while reading a
-     *          resource file
-     */
-    public static Hashtable getInitialEnvironment(Hashtable env)
-            throws NamingException
-    {
-        String[] props = VersionHelper.PROPS;   // system/applet properties
-        if (env == null) {
-            env = new Hashtable(11);
-        }
-        Object applet = env.get(Context.APPLET);
-
-        // Merge property values from env param, applet params, and system
-        // properties.  The first value wins:  there's no concatenation of
-        // colon-separated lists.
-        // Read system properties by first trying System.getProperties(),
-        // and then trying System.getProperty() if that fails.  The former
-        // is more efficient due to fewer permission checks.
-        //
-        String[] jndiSysProps = helper.getJndiProperties();
-        for (int i = 0; i < props.length; i++) {
-            Object val = env.get(props[i]);
-            if (val == null) {
-                if (applet != null) {
-                    val = AppletParameter.get(applet, props[i]);
-                }
-                if (val == null) {
-                    // Read system property.
-                    val = (jndiSysProps != null)
-                        ? jndiSysProps[i]
-                        : helper.getJndiProperty(i);
-                }
-                if (val != null) {
-                    env.put(props[i], val);
-                }
-            }
-        }
-
-        // Merge the above with the values read from all application
-        // resource files.  Colon-separated lists are concatenated.
-        mergeTables(env, getApplicationResources());
-        return env;
-    }
-
-    /**
-      * Retrieves the property from the environment, or from the provider
-      * resource file associated with the given context.  The environment
-      * may in turn contain values that come from applet parameters,
-      * system properties, or application resource files.
-      *
-      * If <tt>concat</tt> is true and both the environment and the provider
-      * resource file contain the property, the two values are concatenated
-      * (with a ':' separator).
-      *
-      * Returns null if no value is found.
-      *
-      * @param propName The non-null property name
-      * @param env      The possibly null environment properties
-      * @param ctx      The possibly null context
-      * @param concat   True if multiple values should be concatenated
-      * @return the property value, or null is there is none.
-      * @throws NamingException if an error occurs while reading the provider
-      * resource file.
-      */
-    public static String getProperty(String propName, Hashtable env,
-        Context ctx, boolean concat)
-            throws NamingException {
-
-        String val1 = (env != null) ? (String)env.get(propName) : null;
-        if ((ctx == null) ||
-            ((val1 != null) && !concat)) {
-            return val1;
-        }
-        String val2 = (String)getProviderResource(ctx).get(propName);
-        if (val1 == null) {
-            return val2;
-        } else if ((val2 == null) || !concat) {
-            return val1;
-        } else {
-            return (val1 + ":" + val2);
-        }
-    }
-
-    /**
-     * Retrieves an enumeration of factory classes/object specified by a
-     * property.
-     *
-     * The property is gotten from the environment and the provider
-     * resource file associated with the given context and concantenated.
-     * See getProperty(). The resulting property value is a list of class names.
-     *<p>
-     * This method then loads each class using the current thread's context
-     * class loader and keeps them in a list. Any class that cannot be loaded
-     * is ignored. The resulting list is then cached in a two-level
-     * hash table, keyed first by the context class loader and then by
-     * the property's value.
-     * The next time threads of the same context class loader call this
-     * method, they can use the cached list.
-     *<p>
-     * After obtaining the list either from the cache or by creating one from
-     * the property value, this method then creates and returns a
-     * FactoryEnumeration using the list. As the FactoryEnumeration is
-     * traversed, the cached Class object in the list is instantiated and
-     * replaced by an instance of the factory object itself.  Both class
-     * objects and factories are wrapped in weak references so as not to
-     * prevent GC of the class loader.
-     *<p>
-     * Note that multiple threads can be accessing the same cached list
-     * via FactoryEnumeration, which locks the list during each next().
-     * The size of the list will not change,
-     * but a cached Class object might be replaced by an instantiated factory
-     * object.
-     *
-     * @param propName  The non-null property name
-     * @param env       The possibly null environment properties
-     * @param ctx       The possibly null context
-     * @return An enumeration of factory classes/objects; null if none.
-     * @exception NamingException If encounter problem while reading the provider
-     * property file.
-     * @see javax.naming.spi.NamingManager#getObjectInstance
-     * @see javax.naming.spi.NamingManager#getStateToBind
-     * @see javax.naming.spi.DirectoryManager#getObjectInstance
-     * @see javax.naming.spi.DirectoryManager#getStateToBind
-     * @see javax.naming.ldap.ControlFactory#getControlInstance
-     */
-    public static FactoryEnumeration getFactories(String propName, Hashtable env,
-        Context ctx) throws NamingException {
-
-        String facProp = getProperty(propName, env, ctx, true);
-        if (facProp == null)
-            return null;  // no classes specified; return null
-
-        // Cache is based on context class loader and property val
-        ClassLoader loader = helper.getContextClassLoader();
-
-        Map perLoaderCache = null;
-        synchronized (factoryCache) {
-            perLoaderCache = (Map) factoryCache.get(loader);
-            if (perLoaderCache == null) {
-                perLoaderCache = new HashMap(11);
-                factoryCache.put(loader, perLoaderCache);
-            }
-        }
-
-        synchronized (perLoaderCache) {
-            List factories = (List) perLoaderCache.get(facProp);
-            if (factories != null) {
-                // Cached list
-                return factories.size() == 0 ? null
-                    : new FactoryEnumeration(factories, loader);
-            } else {
-                // Populate list with classes named in facProp; skipping
-                // those that we cannot load
-                StringTokenizer parser = new StringTokenizer(facProp, ":");
-                factories = new ArrayList(5);
-                while (parser.hasMoreTokens()) {
-                    try {
-                        // System.out.println("loading");
-                        String className = parser.nextToken();
-                        Class c = helper.loadClass(className, loader);
-                        factories.add(new NamedWeakReference(c, className));
-                    } catch (Exception e) {
-                        // ignore ClassNotFoundException, IllegalArgumentException
-                    }
-                }
-                // System.out.println("adding to cache: " + factories);
-                perLoaderCache.put(facProp, factories);
-                return new FactoryEnumeration(factories, loader);
-            }
-        }
-    }
-
-    /**
-     * Retrieves a factory from a list of packages specified in a
-     * property.
-     *
-     * The property is gotten from the environment and the provider
-     * resource file associated with the given context and concatenated.
-     * classSuffix is added to the end of this list.
-     * See getProperty(). The resulting property value is a list of package
-     * prefixes.
-     *<p>
-     * This method then constructs a list of class names by concatenating
-     * each package prefix with classSuffix and attempts to load and
-     * instantiate the class until one succeeds.
-     * Any class that cannot be loaded is ignored.
-     * The resulting object is then cached in a two-level hash table,
-     * keyed first by the context class loader and then by the property's
-     * value and classSuffix.
-     * The next time threads of the same context class loader call this
-     * method, they use the cached factory.
-     * If no factory can be loaded, NO_FACTORY is recorded in the table
-     * so that next time it'll return quickly.
-     *
-     * @param propName  The non-null property name
-     * @param env       The possibly null environment properties
-     * @param ctx       The possibly null context
-     * @param classSuffix The non-null class name
-     *                  (e.g. ".ldap.ldapURLContextFactory).
-     * @param defaultPkgPrefix The non-null default package prefix.
-     *        (e.g., "com.sun.jndi.url").
-     * @return An factory object; null if none.
-     * @exception NamingException If encounter problem while reading the provider
-     * property file, or problem instantiating the factory.
-     *
-     * @see javax.naming.spi.NamingManager#getURLContext
-     * @see javax.naming.spi.NamingManager#getURLObject
-     */
-    public static Object getFactory(String propName, Hashtable env, Context ctx,
-        String classSuffix, String defaultPkgPrefix) throws NamingException {
-
-        // Merge property with provider property and supplied default
-        String facProp = getProperty(propName, env, ctx, true);
-        if (facProp != null)
-            facProp += (":" + defaultPkgPrefix);
-        else
-            facProp = defaultPkgPrefix;
-
-        // Cache factory based on context class loader, class name, and
-        // property val
-        ClassLoader loader = helper.getContextClassLoader();
-        String key = classSuffix + " " + facProp;
-
-        Map perLoaderCache = null;
-        synchronized (urlFactoryCache) {
-            perLoaderCache = (Map) urlFactoryCache.get(loader);
-            if (perLoaderCache == null) {
-                perLoaderCache = new HashMap(11);
-                urlFactoryCache.put(loader, perLoaderCache);
-            }
-        }
-
-        synchronized (perLoaderCache) {
-            Object factory = null;
-
-            WeakReference factoryRef = (WeakReference) perLoaderCache.get(key);
-            if (factoryRef == NO_FACTORY) {
-                return null;
-            } else if (factoryRef != null) {
-                factory = factoryRef.get();
-                if (factory != null) {  // check if weak ref has been cleared
-                    return factory;
-                }
-            }
-
-            // Not cached; find first factory and cache
-            StringTokenizer parser = new StringTokenizer(facProp, ":");
-            String className;
-            while (factory == null && parser.hasMoreTokens()) {
-                className = parser.nextToken() + classSuffix;
-                try {
-                    // System.out.println("loading " + className);
-                    factory = helper.loadClass(className, loader).newInstance();
-                } catch (InstantiationException e) {
-                    NamingException ne =
-                        new NamingException("Cannot instantiate " + className);
-                    ne.setRootCause(e);
-                    throw ne;
-                } catch (IllegalAccessException e) {
-                    NamingException ne =
-                        new NamingException("Cannot access " + className);
-                    ne.setRootCause(e);
-                    throw ne;
-                } catch (Exception e) {
-                    // ignore ClassNotFoundException, IllegalArgumentException,
-                    // etc.
-                }
-            }
-
-            // Cache it.
-            perLoaderCache.put(key, (factory != null)
-                                        ? new WeakReference(factory)
-                                        : NO_FACTORY);
-            return factory;
-        }
-    }
-
-
-    // ---------- Private methods ----------
-
-    /*
-     * Returns the properties contained in the provider resource file
-     * of an object's package.  Returns an empty hash table if the
-     * object is null or the resource file cannot be found.  The
-     * results are cached.
-     *
-     * @throws NamingException if an error occurs while reading the file.
-     */
-    private static Hashtable getProviderResource(Object obj)
-            throws NamingException
-    {
-        if (obj == null) {
-            return (new Hashtable(1));
-        }
-        synchronized (propertiesCache) {
-            Class c = obj.getClass();
-
-            Hashtable props = (Hashtable)propertiesCache.get(c);
-            if (props != null) {
-                return props;
-            }
-            props = new Properties();
-
-            InputStream istream =
-                helper.getResourceAsStream(c, PROVIDER_RESOURCE_FILE_NAME);
-
-            if (istream != null) {
-                try {
-                    ((Properties)props).load(istream);
-                } catch (IOException e) {
-                    NamingException ne = new ConfigurationException(
-                            "Error reading provider resource file for " + c);
-                    ne.setRootCause(e);
-                    throw ne;
-                }
-            }
-            propertiesCache.put(c, props);
-            return props;
-        }
-    }
-
-
-    /*
-     * Returns the Hashtable (never null) that results from merging
-     * all application resource files available to this thread's
-     * context class loader.  The properties file in <java.home>/lib
-     * is also merged in.  The results are cached.
-     *
-     * SECURITY NOTES:
-     * 1.  JNDI needs permission to read the application resource files.
-     * 2.  Any class will be able to use JNDI to view the contents of
-     * the application resource files in its own classpath.  Give
-     * careful consideration to this before storing sensitive
-     * information there.
-     *
-     * @throws NamingException if an error occurs while reading a resource
-     *  file.
-     */
-    private static Hashtable getApplicationResources() throws NamingException {
-
-        ClassLoader cl = helper.getContextClassLoader();
-
-        synchronized (propertiesCache) {
-            Hashtable result = (Hashtable)propertiesCache.get(cl);
-            if (result != null) {
-                return result;
-            }
-
-            try {
-                NamingEnumeration resources =
-                    helper.getResources(cl, APP_RESOURCE_FILE_NAME);
-                while (resources.hasMore()) {
-                    Properties props = new Properties();
-                    props.load((InputStream)resources.next());
-
-                    if (result == null) {
-                        result = props;
-                    } else {
-                        mergeTables(result, props);
-                    }
-                }
-
-                // Merge in properties from file in <java.home>/lib.
-                InputStream istream =
-                    helper.getJavaHomeLibStream(JRELIB_PROPERTY_FILE_NAME);
-                if (istream != null) {
-                    Properties props = new Properties();
-                    props.load(istream);
-
-                    if (result == null) {
-                        result = props;
-                    } else {
-                        mergeTables(result, props);
-                    }
-                }
-
-            } catch (IOException e) {
-                NamingException ne = new ConfigurationException(
-                        "Error reading application resource file");
-                ne.setRootCause(e);
-                throw ne;
-            }
-            if (result == null) {
-                result = new Hashtable(11);
-            }
-            propertiesCache.put(cl, result);
-            return result;
-        }
-    }
-
-    /*
-     * Merge the properties from one hash table into another.  Each
-     * property in props2 that is not in props1 is added to props1.
-     * For each property in both hash tables that is one of the
-     * standard JNDI properties that specify colon-separated lists,
-     * the values are concatenated and stored in props1.
-     */
-    private static void mergeTables(Hashtable props1, Hashtable props2) {
-        Enumeration keys = props2.keys();
-
-        while (keys.hasMoreElements()) {
-            String prop = (String)keys.nextElement();
-            Object val1 = props1.get(prop);
-            if (val1 == null) {
-                props1.put(prop, props2.get(prop));
-            } else if (isListProperty(prop)) {
-                String val2 = (String)props2.get(prop);
-                props1.put(prop, ((String)val1) + ":" + val2);
-            }
-        }
-    }
-
-    /*
-     * Is a property one of the standard JNDI properties that specify
-     * colon-separated lists?
-     */
-    private static boolean isListProperty(String prop) {
-        prop = prop.intern();
-        for (int i = 0; i < listProperties.length; i++) {
-            if (prop == listProperties[i]) {
-                return true;
-            }
-        }
-        return false;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/naming/internal/VersionHelper.java b/ojluni/src/main/java/com/sun/naming/internal/VersionHelper.java
deleted file mode 100755
index 875360b..0000000
--- a/ojluni/src/main/java/com/sun/naming/internal/VersionHelper.java
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * Copyright (c) 1999, 2006, 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.naming.internal;
-
-import java.io.InputStream;
-import java.io.IOException;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.Enumeration;
-import java.util.StringTokenizer;
-import java.util.Vector;
-
-import javax.naming.NamingEnumeration;
-
-/**
- * VersionHelper was used by JNDI to accommodate differences between
- * JDK 1.1.x and the Java 2 platform. As this is no longer necessary
- * since JNDI's inclusion in the platform, this class currently
- * serves as a set of utilities for performing system-level things,
- * such as class-loading and reading system properties.
- *
- * @author Rosanna Lee
- * @author Scott Seligman
- */
-
-public abstract class VersionHelper {
-    private static VersionHelper helper = null;
-
-    final static String[] PROPS = new String[] {
-        javax.naming.Context.INITIAL_CONTEXT_FACTORY,
-        javax.naming.Context.OBJECT_FACTORIES,
-        javax.naming.Context.URL_PKG_PREFIXES,
-        javax.naming.Context.STATE_FACTORIES,
-        javax.naming.Context.PROVIDER_URL,
-        javax.naming.Context.DNS_URL,
-        // The following shouldn't create a runtime dependence on ldap package.
-        javax.naming.ldap.LdapContext.CONTROL_FACTORIES
-    };
-
-    public final static int INITIAL_CONTEXT_FACTORY = 0;
-    public final static int OBJECT_FACTORIES = 1;
-    public final static int URL_PKG_PREFIXES = 2;
-    public final static int STATE_FACTORIES = 3;
-    public final static int PROVIDER_URL = 4;
-    public final static int DNS_URL = 5;
-    public final static int CONTROL_FACTORIES = 6;
-
-    VersionHelper() {} // Disallow anyone from creating one of these.
-
-    static {
-        helper = new VersionHelper12();
-    }
-
-    public static VersionHelper getVersionHelper() {
-        return helper;
-    }
-
-    public abstract Class loadClass(String className)
-        throws ClassNotFoundException;
-
-    abstract Class loadClass(String className, ClassLoader cl)
-        throws ClassNotFoundException;
-
-    public abstract Class loadClass(String className, String codebase)
-        throws ClassNotFoundException, MalformedURLException;
-
-    /*
-     * Returns a JNDI property from the system properties.  Returns
-     * null if the property is not set, or if there is no permission
-     * to read it.
-     */
-    abstract String getJndiProperty(int i);
-
-    /*
-     * Reads each property in PROPS from the system properties, and
-     * returns their values -- in order -- in an array.  For each
-     * unset property, the corresponding array element is set to null.
-     * Returns null if there is no permission to call System.getProperties().
-     */
-    abstract String[] getJndiProperties();
-
-    /*
-     * Returns the resource of a given name associated with a particular
-     * class (never null), or null if none can be found.
-     */
-    abstract InputStream getResourceAsStream(Class c, String name);
-
-    /*
-     * Returns an input stream for a file in <java.home>/lib,
-     * or null if it cannot be located or opened.
-     *
-     * @param filename  The file name, sans directory.
-     */
-    abstract InputStream getJavaHomeLibStream(String filename);
-
-    /*
-     * Returns an enumeration (never null) of InputStreams of the
-     * resources of a given name associated with a particular class
-     * loader.  Null represents the bootstrap class loader in some
-     * Java implementations.
-     */
-    abstract NamingEnumeration getResources(ClassLoader cl, String name)
-        throws IOException;
-
-    /*
-     * Returns the context class loader associated with the current thread.
-     * Null indicates the bootstrap class loader in some Java implementations.
-     *
-     * @throws SecurityException if the class loader is not accessible.
-     */
-    abstract ClassLoader getContextClassLoader();
-
-    static protected URL[] getUrlArray(String codebase)
-        throws MalformedURLException {
-        // Parse codebase into separate URLs
-        StringTokenizer parser = new StringTokenizer(codebase);
-        Vector vec = new Vector(10);
-        while (parser.hasMoreTokens()) {
-            vec.addElement(parser.nextToken());
-        }
-        String[] url = new String[vec.size()];
-        for (int i = 0; i < url.length; i++) {
-            url[i] = (String)vec.elementAt(i);
-        }
-
-        URL[] urlArray = new URL[url.length];
-        for (int i = 0; i < urlArray.length; i++) {
-            urlArray[i] = new URL(url[i]);
-        }
-        return urlArray;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/naming/internal/VersionHelper12.java b/ojluni/src/main/java/com/sun/naming/internal/VersionHelper12.java
deleted file mode 100755
index cf18386..0000000
--- a/ojluni/src/main/java/com/sun/naming/internal/VersionHelper12.java
+++ /dev/null
@@ -1,256 +0,0 @@
-/*
- * Copyright (c) 1999, 2006, 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.naming.internal;
-
-import java.io.InputStream;
-import java.io.IOException;
-import java.net.MalformedURLException;
-import java.net.URLClassLoader;
-import java.net.URL;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import java.security.PrivilegedActionException;
-import java.security.PrivilegedExceptionAction;
-import java.util.Enumeration;
-import java.util.Hashtable;
-import java.util.NoSuchElementException;
-import java.util.Properties;
-
-import javax.naming.*;
-
-/**
- * VersionHelper was used by JNDI to accommodate differences between
- * JDK 1.1.x and the Java 2 platform. As this is no longer necessary
- * since JNDI's inclusion in the platform, this class currently
- * serves as a set of utilities for performing system-level things,
- * such as class-loading and reading system properties.
- *
- * @author Rosanna Lee
- * @author Scott Seligman
- */
-
-final class VersionHelper12 extends VersionHelper {
-
-    private boolean getSystemPropsFailed = false;
-
-    VersionHelper12() {} // Disallow external from creating one of these.
-
-    public Class loadClass(String className) throws ClassNotFoundException {
-        ClassLoader cl = getContextClassLoader();
-        return Class.forName(className, true, cl);
-    }
-
-    /**
-      * Package private.
-      */
-    Class loadClass(String className, ClassLoader cl)
-        throws ClassNotFoundException {
-        return Class.forName(className, true, cl);
-    }
-
-    /**
-     * @param className A non-null fully qualified class name.
-     * @param codebase A non-null, space-separated list of URL strings.
-     */
-    public Class loadClass(String className, String codebase)
-        throws ClassNotFoundException, MalformedURLException {
-        ClassLoader cl;
-
-        ClassLoader parent = getContextClassLoader();
-        cl = URLClassLoader.newInstance(getUrlArray(codebase), parent);
-
-        return Class.forName(className, true, cl);
-    }
-
-    String getJndiProperty(final int i) {
-        return (String) AccessController.doPrivileged(
-            new PrivilegedAction() {
-                public Object run() {
-                    try {
-                        return System.getProperty(PROPS[i]);
-                    } catch (SecurityException e) {
-                        return null;
-                    }
-                }
-            }
-        );
-    }
-
-    String[] getJndiProperties() {
-        if (getSystemPropsFailed) {
-            return null;        // after one failure, don't bother trying again
-        }
-        Properties sysProps = (Properties) AccessController.doPrivileged(
-            new PrivilegedAction() {
-                public Object run() {
-                    try {
-                        return System.getProperties();
-                    } catch (SecurityException e) {
-                        getSystemPropsFailed = true;
-                        return null;
-                    }
-                }
-            }
-        );
-        if (sysProps == null) {
-            return null;
-        }
-        String[] jProps = new String[PROPS.length];
-        for (int i = 0; i < PROPS.length; i++) {
-            jProps[i] = sysProps.getProperty(PROPS[i]);
-        }
-        return jProps;
-    }
-
-    InputStream getResourceAsStream(final Class c, final String name) {
-        return (InputStream) AccessController.doPrivileged(
-            new PrivilegedAction() {
-                public Object run() {
-                    return c.getResourceAsStream(name);
-                }
-            }
-        );
-    }
-
-    InputStream getJavaHomeLibStream(final String filename) {
-        return (InputStream) AccessController.doPrivileged(
-            new PrivilegedAction() {
-                public Object run() {
-                    try {
-                        String javahome = System.getProperty("java.home");
-                        if (javahome == null) {
-                            return null;
-                        }
-                        String pathname = javahome + java.io.File.separator +
-                            "lib" + java.io.File.separator + filename;
-                        return new java.io.FileInputStream(pathname);
-                    } catch (Exception e) {
-                        return null;
-                    }
-                }
-            }
-        );
-    }
-
-    NamingEnumeration getResources(final ClassLoader cl, final String name)
-            throws IOException
-    {
-        Enumeration urls;
-        try {
-            urls = (Enumeration) AccessController.doPrivileged(
-                new PrivilegedExceptionAction() {
-                    public Object run() throws IOException {
-                        return (cl == null)
-                            ? ClassLoader.getSystemResources(name)
-                            : cl.getResources(name);
-                    }
-                }
-            );
-        } catch (PrivilegedActionException e) {
-            throw (IOException)e.getException();
-        }
-        return new InputStreamEnumeration(urls);
-    }
-
-    ClassLoader getContextClassLoader() {
-        return (ClassLoader) AccessController.doPrivileged(
-            new PrivilegedAction() {
-                public Object run() {
-                    return Thread.currentThread().getContextClassLoader();
-                }
-            }
-        );
-    }
-
-
-    /**
-     * Given an enumeration of URLs, an instance of this class represents
-     * an enumeration of their InputStreams.  Each operation on the URL
-     * enumeration is performed within a doPrivileged block.
-     * This is used to enumerate the resources under a foreign codebase.
-     * This class is not MT-safe.
-     */
-    class InputStreamEnumeration implements NamingEnumeration {
-
-        private final Enumeration urls;
-
-        private Object nextElement = null;
-
-        InputStreamEnumeration(Enumeration urls) {
-            this.urls = urls;
-        }
-
-        /*
-         * Returns the next InputStream, or null if there are no more.
-         * An InputStream that cannot be opened is skipped.
-         */
-        private Object getNextElement() {
-            return AccessController.doPrivileged(
-                new PrivilegedAction() {
-                    public Object run() {
-                        while (urls.hasMoreElements()) {
-                            try {
-                                return ((URL)urls.nextElement()).openStream();
-                            } catch (IOException e) {
-                                // skip this URL
-                            }
-                        }
-                        return null;
-                    }
-                }
-            );
-        }
-
-        public boolean hasMore() {
-            if (nextElement != null) {
-                return true;
-            }
-            nextElement = getNextElement();
-            return (nextElement != null);
-        }
-
-        public boolean hasMoreElements() {
-            return hasMore();
-        }
-
-        public Object next() {
-            if (hasMore()) {
-                Object res = nextElement;
-                nextElement = null;
-                return res;
-            } else {
-                throw new NoSuchElementException();
-            }
-        }
-
-        public Object nextElement() {
-            return next();
-        }
-
-        public void close() {
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/pept/Delegate.java b/ojluni/src/main/java/com/sun/pept/Delegate.java
deleted file mode 100755
index 7d29ce0..0000000
--- a/ojluni/src/main/java/com/sun/pept/Delegate.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-/** Java interface "Delegate.java" generated from Poseidon for UML.
- *  Poseidon for UML is developed by <A HREF="http://www.gentleware.com">Gentleware</A>.
- *  Generated with <A HREF="http://jakarta.apache.org/velocity/">velocity</A> template engine.
- */
-package com.sun.pept;
-
-import com.sun.pept.presentation.MessageStruct;
-import java.util.*;
-
-/**
- * <p>
- *
- * @author Dr. Harold Carr
- * </p>
- */
-public interface Delegate {
-
-  ///////////////////////////////////////
-  // operations
-
-/**
- * <p>
- * Does ...
- * </p><p>
- *
- * @return a MessageStruct with ...
- * </p>
- */
-    public MessageStruct getMessageStruct();
-/**
- * <p>
- * Does ...
- * </p><p>
- *
- * </p><p>
- *
- * @param message ...
- * </p>
- */
-    public void send(MessageStruct message);
-
-} // end Delegate
diff --git a/ojluni/src/main/java/com/sun/pept/encoding/Decoder.java b/ojluni/src/main/java/com/sun/pept/encoding/Decoder.java
deleted file mode 100755
index 3af6e03..0000000
--- a/ojluni/src/main/java/com/sun/pept/encoding/Decoder.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-/** Java interface "Decoder.java" generated from Poseidon for UML.
- *  Poseidon for UML is developed by <A HREF="http://www.gentleware.com">Gentleware</A>.
- *  Generated with <A HREF="http://jakarta.apache.org/velocity/">velocity</A> template engine.
- */
-package com.sun.pept.encoding;
-
-import com.sun.pept.ept.MessageInfo;
-import java.util.*;
-
-/**
- * <p>
- *
- * @author Dr. Harold Carr
- * </p>
- */
-public interface Decoder {
-
-  ///////////////////////////////////////
-  // operations
-
-/**
- * <p>
- * Does ...
- * </p><p>
- *
- * </p><p>
- *
- * @param messageInfo ...
- * </p>
- */
-    public void decode(MessageInfo messageInfo);
-/**
- * <p>
- * Does ...
- * </p><p>
- *
- * </p><p>
- *
- * @param messageInfo ...
- * </p>
- */
-    public void receiveAndDecode(MessageInfo messageInfo);
-
-} // end Decoder
diff --git a/ojluni/src/main/java/com/sun/pept/encoding/Encoder.java b/ojluni/src/main/java/com/sun/pept/encoding/Encoder.java
deleted file mode 100755
index 66a6d64..0000000
--- a/ojluni/src/main/java/com/sun/pept/encoding/Encoder.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-/** Java interface "Encoder.java" generated from Poseidon for UML.
- *  Poseidon for UML is developed by <A HREF="http://www.gentleware.com">Gentleware</A>.
- *  Generated with <A HREF="http://jakarta.apache.org/velocity/">velocity</A> template engine.
- */
-package com.sun.pept.encoding;
-
-import com.sun.pept.ept.MessageInfo;
-import java.nio.ByteBuffer;
-import java.util.*;
-
-/**
- * <p>
- *
- * @author Arun Gupta
- * </p>
- */
-public interface Encoder {
-
-  ///////////////////////////////////////
-  // operations
-
-/**
- * <p>
- * Does ...
- * </p><p>
- *
- * </p><p>
- *
- * @param messageInfo ...
- * </p>
- */
-    public void encodeAndSend(MessageInfo messageInfo);
-/**
- * <p>
- * Does ...
- * </p><p>
- *
- * @return a ByteBuffer with ...
- * </p><p>
- * @param messageInfo ...
- * </p>
- */
-    public ByteBuffer encode(MessageInfo messageInfo);
-
-} // end Encoder
diff --git a/ojluni/src/main/java/com/sun/pept/ept/Acceptor.java b/ojluni/src/main/java/com/sun/pept/ept/Acceptor.java
deleted file mode 100755
index 82b59c1..0000000
--- a/ojluni/src/main/java/com/sun/pept/ept/Acceptor.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-/** Java interface "Acceptor.java" generated from Poseidon for UML.
- *  Poseidon for UML is developed by <A HREF="http://www.gentleware.com">Gentleware</A>.
- *  Generated with <A HREF="http://jakarta.apache.org/velocity/">velocity</A> template engine.
- */
-package com.sun.pept.ept;
-
-import java.util.*;
-
-/**
- * <p>
- *
- * @author Dr. Harold Carr
- * </p>
- */
-public interface Acceptor extends EPTFactory {
-
-  ///////////////////////////////////////
-  // operations
-
-/**
- * <p>
- * Does ...
- * </p><p>
- *
- * </p>
- */
-    public void accept();
-
-} // end Acceptor
diff --git a/ojluni/src/main/java/com/sun/pept/ept/ContactInfo.java b/ojluni/src/main/java/com/sun/pept/ept/ContactInfo.java
deleted file mode 100755
index 2981a51..0000000
--- a/ojluni/src/main/java/com/sun/pept/ept/ContactInfo.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-/** Java interface "ContactInfo.java" generated from Poseidon for UML.
- *  Poseidon for UML is developed by <A HREF="http://www.gentleware.com">Gentleware</A>.
- *  Generated with <A HREF="http://jakarta.apache.org/velocity/">velocity</A> template engine.
- */
-package com.sun.pept.ept;
-
-import com.sun.pept.transport.Connection;
-import java.util.*;
-
-/**
- * <p>
- *
- * @author Dr. Harold Carr
- * </p>
- */
-public interface ContactInfo extends EPTFactory {
-
-  ///////////////////////////////////////
-  // operations
-
-/**
- * <p>
- * Does ...
- * </p><p>
- *
- * @return a Connection with ...
- * </p><p>
- * @param messageInfo ...
- * </p>
- */
-    public Connection getConnection(MessageInfo messageInfo);
-
-} // end ContactInfo
diff --git a/ojluni/src/main/java/com/sun/pept/ept/ContactInfoList.java b/ojluni/src/main/java/com/sun/pept/ept/ContactInfoList.java
deleted file mode 100755
index b1ac49b..0000000
--- a/ojluni/src/main/java/com/sun/pept/ept/ContactInfoList.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-/** Java interface "ContactInfoList.java" generated from Poseidon for UML.
- *  Poseidon for UML is developed by <A HREF="http://www.gentleware.com">Gentleware</A>.
- *  Generated with <A HREF="http://jakarta.apache.org/velocity/">velocity</A> template engine.
- */
-package com.sun.pept.ept;
-
-import java.util.*;
-
-/**
- * <p>
- *
- * @author Dr. Harold Carr
- * </p>
- */
-public interface ContactInfoList {
-
-  ///////////////////////////////////////
-  // operations
-
-/**
- * <p>
- * Does ...
- * </p><p>
- *
- * @return a ContactInfoListIterator with ...
- * </p>
- */
-    public ContactInfoListIterator iterator();
-
-} // end ContactInfoList
diff --git a/ojluni/src/main/java/com/sun/pept/ept/ContactInfoListIterator.java b/ojluni/src/main/java/com/sun/pept/ept/ContactInfoListIterator.java
deleted file mode 100755
index 16143dd..0000000
--- a/ojluni/src/main/java/com/sun/pept/ept/ContactInfoListIterator.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-/** Java interface "ContactInfoListIterator.java" generated from Poseidon for UML.
- *  Poseidon for UML is developed by <A HREF="http://www.gentleware.com">Gentleware</A>.
- *  Generated with <A HREF="http://jakarta.apache.org/velocity/">velocity</A> template engine.
- */
-package com.sun.pept.ept;
-
-import java.util.*;
-
-/**
- * <p>
- *
- * @author Dr. Harold Carr
- * </p>
- */
-public interface ContactInfoListIterator {
-
-  ///////////////////////////////////////
-  // operations
-
-/**
- * <p>
- * Does ...
- * </p><p>
- *
- * @return a boolean with ...
- * </p>
- */
-    public boolean hasNext();
-/**
- * <p>
- * Does ...
- * </p><p>
- *
- * @return a ContactInfo with ...
- * </p>
- */
-    public ContactInfo next();
-
-} // end ContactInfoListIterator
diff --git a/ojluni/src/main/java/com/sun/pept/ept/EPTFactory.java b/ojluni/src/main/java/com/sun/pept/ept/EPTFactory.java
deleted file mode 100755
index 05595f0..0000000
--- a/ojluni/src/main/java/com/sun/pept/ept/EPTFactory.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-/** Java interface "EPTFactory.java" generated from Poseidon for UML.
- *  Poseidon for UML is developed by <A HREF="http://www.gentleware.com">Gentleware</A>.
- *  Generated with <A HREF="http://jakarta.apache.org/velocity/">velocity</A> template engine.
- */
-package com.sun.pept.ept;
-
-import com.sun.pept.encoding.Decoder;
-import com.sun.pept.encoding.Encoder;
-import com.sun.pept.presentation.TargetFinder;
-import com.sun.pept.protocol.Interceptors;
-import com.sun.pept.protocol.MessageDispatcher;
-import java.util.*;
-
-/**
- * <p>
- *
- * @author Dr. Harold Carr
- * </p>
- */
-public interface EPTFactory {
-
-  ///////////////////////////////////////
-  // operations
-
-/**
- * <p>
- * Does ...
- * </p><p>
- *
- * @return a MessageDispatcher with ...
- * </p><p>
- * @param messageInfo ...
- * </p>
- */
-    public MessageDispatcher getMessageDispatcher(MessageInfo messageInfo);
-/**
- * <p>
- * Does ...
- * </p><p>
- *
- * @return a Encoder with ...
- * </p><p>
- * @param messageInfo ...
- * </p>
- */
-    public Encoder getEncoder(MessageInfo messageInfo);
-/**
- * <p>
- * Does ...
- * </p><p>
- *
- * @return a Decoder with ...
- * </p><p>
- * @param messageInfo ...
- * </p>
- */
-    public Decoder getDecoder(MessageInfo messageInfo);
-/**
- * <p>
- * Does ...
- * </p><p>
- *
- * @return a Interceptors with ...
- * </p><p>
- * @param x ...
- * </p>
- */
-    public Interceptors getInterceptors(MessageInfo x);
-/**
- * <p>
- * Does ...
- * </p><p>
- *
- * @return a TargetFinder with ...
- * </p><p>
- * @param x ...
- * </p>
- */
-    public TargetFinder getTargetFinder(MessageInfo x);
-
-} // end EPTFactory
diff --git a/ojluni/src/main/java/com/sun/pept/ept/MessageInfo.java b/ojluni/src/main/java/com/sun/pept/ept/MessageInfo.java
deleted file mode 100755
index 9a4cd15..0000000
--- a/ojluni/src/main/java/com/sun/pept/ept/MessageInfo.java
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-/** Java interface "MessageInfo.java" generated from Poseidon for UML.
- *  Poseidon for UML is developed by <A HREF="http://www.gentleware.com">Gentleware</A>.
- *  Generated with <A HREF="http://jakarta.apache.org/velocity/">velocity</A> template engine.
- */
-package com.sun.pept.ept;
-
-import com.sun.pept.encoding.Decoder;
-import com.sun.pept.encoding.Encoder;
-import com.sun.pept.presentation.MessageStruct;
-import com.sun.pept.protocol.MessageDispatcher;
-import com.sun.pept.transport.Connection;
-import java.util.*;
-
-/**
- * <p>
- *
- * @author Dr. Harold Carr
- * </p>
- */
-public interface MessageInfo extends MessageStruct {
-
-  ///////////////////////////////////////
-  // operations
-
-/**
- * <p>
- * Does ...
- * </p><p>
- *
- * @return a EPTFactory with ...
- * </p>
- */
-    public EPTFactory getEPTFactory();
-/**
- * <p>
- * Does ...
- * </p><p>
- *
- * @return a MessageDispatcher with ...
- * </p>
- */
-    public MessageDispatcher getMessageDispatcher();
-/**
- * <p>
- * Does ...
- * </p><p>
- *
- * @return a Encoder with ...
- * </p>
- */
-    public Encoder getEncoder();
-/**
- * <p>
- * Does ...
- * </p><p>
- *
- * @return a Decoder with ...
- * </p>
- */
-    public Decoder getDecoder();
-/**
- * <p>
- * Does ...
- * </p><p>
- *
- * @return a Connection with ...
- * </p>
- */
-    public Connection getConnection();
-/**
- * <p>
- * Does ...
- * </p><p>
- *
- * </p><p>
- *
- * @param eptFactory ...
- * </p>
- */
-    public void setEPTFactory(EPTFactory eptFactory);
-/**
- * <p>
- * Does ...
- * </p><p>
- *
- * </p><p>
- *
- * @param messageDispatcher ...
- * </p>
- */
-    public void setMessageDispatcher(MessageDispatcher messageDispatcher);
-/**
- * <p>
- * Does ...
- * </p><p>
- *
- * </p><p>
- *
- * @param encoder ...
- * </p>
- */
-    public void setEncoder(Encoder encoder);
-/**
- * <p>
- * Does ...
- * </p><p>
- *
- * </p><p>
- *
- * @param decoder ...
- * </p>
- */
-    public void setDecoder(Decoder decoder);
-/**
- * <p>
- * Does ...
- * </p><p>
- *
- * </p><p>
- *
- * @param connection ...
- * </p>
- */
-    public void setConnection(Connection connection);
-
-} // end MessageInfo
diff --git a/ojluni/src/main/java/com/sun/pept/presentation/MessageStruct.java b/ojluni/src/main/java/com/sun/pept/presentation/MessageStruct.java
deleted file mode 100755
index 85f4fc7..0000000
--- a/ojluni/src/main/java/com/sun/pept/presentation/MessageStruct.java
+++ /dev/null
@@ -1,223 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-/** Java interface "MessageStruct.java" generated from Poseidon for UML.
- *  Poseidon for UML is developed by <A HREF="http://www.gentleware.com">Gentleware</A>.
- *  Generated with <A HREF="http://jakarta.apache.org/velocity/">velocity</A> template engine.
- */
-package com.sun.pept.presentation;
-
-import java.util.*;
-import java.lang.reflect.Method;
-/**
- * <p>
- *
- * @author Dr. Harold Carr
- * </p>
- */
-public interface MessageStruct {
-
-  ///////////////////////////////////////
-  //attributes
-
-
-/**
- * <p>
- * Represents ...
- * </p>
- */
-    public static final int NORMAL_RESPONSE = 0;
-
-/**
- * <p>
- * Represents ...
- * </p>
- */
-    public static final int CHECKED_EXCEPTION_RESPONSE = 1;
-
-/**
- * <p>
- * Represents ...
- * </p>
- */
-    public static final int UNCHECKED_EXCEPTION_RESPONSE = 2;
-
-/**
- * <p>
- * Represents ...
- * </p>
- */
-    public static final int REQUEST_RESPONSE_MEP = 1;
-
-/**
- * <p>
- * Represents ...
- * </p>
- */
-    public static final int ONE_WAY_MEP = 2;
-
-/**
- * <p>
- * Represents ...
- * </p>
- */
-    public static final int ASYNC_POLL_MEP = 3;
-
-/**
- * <p>
- * Represents ...
- * </p>
- */
-    public static final int ASYNC_CALLBACK_MEP = 4;
-
-  ///////////////////////////////////////
-  // operations
-
-/**
- * <p>
- * Does ...
- * </p><p>
- *
- * @param data ...
- * </p><p>
- *
- * </p>
- */
-    public void setData(Object[] data);
-/**
- * <p>
- * Does ...
- * </p><p>
- *
- * @return a Object[] with ...
- * </p>
- */
-    public Object[] getData();
-/**
- * <p>
- * Does ...
- * </p><p>
- *
- * </p><p>
- *
- * @param name ...
- * </p><p>
- * @param value ...
- * </p>
- */
-    public void setMetaData(Object name, Object value);
-/**
- * <p>
- * Does ...
- * </p><p>
- *
- * @return a Object with ...
- * </p><p>
- * @param name ...
- * </p>
- */
-    public Object getMetaData(Object name);
-/**
- * <p>
- * Does ...
- * </p><p>
- *
- * </p><p>
- *
- * @param messageExchangePattern ...
- * </p>
- */
-    public void setMEP(int messageExchangePattern);
-/**
- * <p>
- * Does ...
- * </p><p>
- *
- * @return a int with ...
- * </p>
- */
-    public int getMEP();
-/**
- * <p>
- * Does ...
- * </p><p>
- *
- * @return a int with ...
- * </p>
- */
-    public int getResponseType();
-/**
- * <p>
- * Does ...
- * </p><p>
- *
- * </p><p>
- *
- * @param responseType ...
- * </p>
- */
-    public void setResponseType(int responseType);
-/**
- * <p>
- * Does ...
- * </p><p>
- *
- * @return a Object with ...
- * </p>
- */
-    public Object getResponse();
-/**
- * <p>
- * Does ...
- * </p><p>
- *
- * </p><p>
- *
- * @param response ...
- * </p>
- */
-    public void setResponse(Object response);
-/**
- * <p>
- * Does ...
- * </p><p>
- *
- * </p><p>
- *
- * @param method ...
- * </p>
- */
-    public void setMethod(Method method);
-/**
- * <p>
- * Does ...
- * </p><p>
- *
- * @return a Method with ...
- * </p>
- */
-    public Method getMethod();
-
-} // end MessageStruct
diff --git a/ojluni/src/main/java/com/sun/pept/presentation/Stub.java b/ojluni/src/main/java/com/sun/pept/presentation/Stub.java
deleted file mode 100755
index 4b44dd4..0000000
--- a/ojluni/src/main/java/com/sun/pept/presentation/Stub.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-/** Java interface "Stub.java" generated from Poseidon for UML.
- *  Poseidon for UML is developed by <A HREF="http://www.gentleware.com">Gentleware</A>.
- *  Generated with <A HREF="http://jakarta.apache.org/velocity/">velocity</A> template engine.
- */
-package com.sun.pept.presentation;
-
-import com.sun.pept.Delegate;
-import java.util.*;
-
-/**
- * <p>
- *
- * @author Dr. Harold Carr
- * </p>
- */
-public interface Stub {
-
-  ///////////////////////////////////////
-  // operations
-
-/**
- * <p>
- * Does ...
- * </p><p>
- *
- * </p><p>
- *
- * @param delegate ...
- * </p>
- */
-    public void _setDelegate(Delegate delegate);
-/**
- * <p>
- * Does ...
- * </p><p>
- *
- * @return a Delegate with ...
- * </p>
- */
-    public Delegate _getDelegate();
-
-} // end Stub
diff --git a/ojluni/src/main/java/com/sun/pept/presentation/TargetFinder.java b/ojluni/src/main/java/com/sun/pept/presentation/TargetFinder.java
deleted file mode 100755
index 6fabf9b..0000000
--- a/ojluni/src/main/java/com/sun/pept/presentation/TargetFinder.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-/** Java interface "TargetFinder.java" generated from Poseidon for UML.
- *  Poseidon for UML is developed by <A HREF="http://www.gentleware.com">Gentleware</A>.
- *  Generated with <A HREF="http://jakarta.apache.org/velocity/">velocity</A> template engine.
- */
-package com.sun.pept.presentation;
-
-import com.sun.pept.ept.MessageInfo;
-import java.util.*;
-
-/**
- * <p>
- *
- * @author Dr. Harold Carr
- * </p>
- */
-public interface TargetFinder {
-
-  ///////////////////////////////////////
-  // operations
-
-/**
- * <p>
- * Does ...
- * </p><p>
- *
- * @return a Tie with ...
- * </p><p>
- * @param x ...
- * </p>
- */
-    public Tie findTarget(MessageInfo x);
-
-} // end TargetFinder
diff --git a/ojluni/src/main/java/com/sun/pept/presentation/Tie.java b/ojluni/src/main/java/com/sun/pept/presentation/Tie.java
deleted file mode 100755
index ed4dae2..0000000
--- a/ojluni/src/main/java/com/sun/pept/presentation/Tie.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-/** Java interface "Tie.java" generated from Poseidon for UML.
- *  Poseidon for UML is developed by <A HREF="http://www.gentleware.com">Gentleware</A>.
- *  Generated with <A HREF="http://jakarta.apache.org/velocity/">velocity</A> template engine.
- */
-package com.sun.pept.presentation;
-
-import com.sun.pept.ept.MessageInfo;
-import java.util.*;
-
-/**
- * <p>
- *
- * @author Dr. Harold Carr
- * </p>
- */
-public interface Tie {
-
-  ///////////////////////////////////////
-  // operations
-
-/**
- * <p>
- * Does ...
- * </p><p>
- *
- * </p><p>
- *
- * @param servant ...
- * </p>
- */
-    public void _setServant(Object servant);
-/**
- * <p>
- * Does ...
- * </p><p>
- *
- * @return a Object with ...
- * </p>
- */
-    public Object _getServant();
-/**
- * <p>
- * Does ...
- * </p><p>
- *
- * </p><p>
- *
- * @param messageInfo ...
- * </p>
- */
-    public void _invoke(MessageInfo messageInfo);
-
-} // end Tie
diff --git a/ojluni/src/main/java/com/sun/pept/protocol/Interceptors.java b/ojluni/src/main/java/com/sun/pept/protocol/Interceptors.java
deleted file mode 100755
index acfe1b9..0000000
--- a/ojluni/src/main/java/com/sun/pept/protocol/Interceptors.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-/**
- * $Id: Interceptors.java,v 1.1 2005/05/23 22:09:18 bbissett Exp $
- */
-
-/** Java interface "Interceptors.java" generated from Poseidon for UML.
- *  Poseidon for UML is developed by <A HREF="http://www.gentleware.com">Gentleware</A>.
- *  Generated with <A HREF="http://jakarta.apache.org/velocity/">velocity</A> template engine.
- */
-package com.sun.pept.protocol;
-
-import com.sun.pept.ept.MessageInfo;
-import java.util.*;
-
-/**
- * <p>
- *
- * @author Dr. Harold Carr
- * </p>
- */
-public interface Interceptors {
-
-  ///////////////////////////////////////
-  // operations
-
-/**
- * <p>
- * Does ...
- * </p><p>
- *
- * </p><p>
- *
- * @param messageInfo ...
- * </p>
- */
-    public void interceptMessage(MessageInfo messageInfo);
-
-} // end Interceptors
diff --git a/ojluni/src/main/java/com/sun/pept/protocol/MessageDispatcher.java b/ojluni/src/main/java/com/sun/pept/protocol/MessageDispatcher.java
deleted file mode 100755
index 83b81f2..0000000
--- a/ojluni/src/main/java/com/sun/pept/protocol/MessageDispatcher.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-/**
- * $Id: MessageDispatcher.java,v 1.1 2005/05/23 22:09:18 bbissett Exp $
- */
-
-/** Java interface "MessageDispatcher.java" generated from Poseidon for UML.
- *  Poseidon for UML is developed by <A HREF="http://www.gentleware.com">Gentleware</A>.
- *  Generated with <A HREF="http://jakarta.apache.org/velocity/">velocity</A> template engine.
- */
-package com.sun.pept.protocol;
-
-import com.sun.pept.ept.MessageInfo;
-import java.util.*;
-
-/**
- * <p>
- *
- * @author Dr. Harold Carr
- * </p>
- */
-public interface MessageDispatcher {
-
-  ///////////////////////////////////////
-  // operations
-
-/**
- * <p>
- * Does ...
- * </p><p>
- *
- * </p><p>
- *
- * @param messageInfo ...
- * </p>
- */
-    public void send(MessageInfo messageInfo);
-/**
- * <p>
- * Does ...
- * </p><p>
- *
- * </p><p>
- *
- * @param messageInfo ...
- * </p>
- */
-    public void receive(MessageInfo messageInfo);
-
-} // end MessageDispatcher
diff --git a/ojluni/src/main/java/com/sun/pept/transport/Connection.java b/ojluni/src/main/java/com/sun/pept/transport/Connection.java
deleted file mode 100755
index 489827f..0000000
--- a/ojluni/src/main/java/com/sun/pept/transport/Connection.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-/**
- * $Id: Connection.java,v 1.2 2005/07/23 04:09:58 kohlert Exp $
- */
-
-/** Java interface "Connection.java" generated from Poseidon for UML.
- *  Poseidon for UML is developed by <A HREF="http://www.gentleware.com">Gentleware</A>.
- *  Generated with <A HREF="http://jakarta.apache.org/velocity/">velocity</A> template engine.
- */
-package com.sun.pept.transport;
-
-import com.sun.pept.ept.EPTFactory;
-import java.nio.ByteBuffer;
-import java.util.*;
-
-/**
- * <p>
- *
- * @author Dr. Harold Carr
- * </p>
- */
-public interface Connection {
-
-  ///////////////////////////////////////
-  // operations
-
-/**
- * <p>
- * Does ...
- * </p><p>
- *
- * </p><p>
- *
- * @param byteBuffer ...
- * </p>
- */
-    public void write(ByteBuffer byteBuffer);
-/**
- * <p>
- * Does ...
- * </p><p>
- *
- * @return a EPTFactory with ...
- * </p>
- */
-    public EPTFactory getEPTFactory();
-/**
- * <p>
- * Does ...
- * </p><p>
- *
- * @return a int with ...
- * </p><p>
- * @param byteBuffer ...
- * </p>
- */
-    public int read(ByteBuffer byteBuffer);
-/**
- * <p>
- * Does ...
- * </p><p>
- *
- * </p>
- */
-    public ByteBuffer readUntilEnd();
-
-} // end Connection
diff --git a/ojluni/src/main/java/com/sun/rmi/rmid/ExecOptionPermission.java b/ojluni/src/main/java/com/sun/rmi/rmid/ExecOptionPermission.java
deleted file mode 100755
index fd6f50c..0000000
--- a/ojluni/src/main/java/com/sun/rmi/rmid/ExecOptionPermission.java
+++ /dev/null
@@ -1,349 +0,0 @@
-/*
- * Copyright (c) 2000, 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.rmi.rmid;
-
-import java.security.*;
-import java.io.*;
-import java.util.*;
-
-/**
- * The ExecOptionPermission class represents permission for rmid to use
- * a specific command-line option when launching an activation group.
- * <P>
- *
- * @author Ann Wollrath
- *
- * @serial exclude
- */
-public final class ExecOptionPermission extends Permission
-{
-    /**
-     * does this permission have a wildcard at the end?
-     */
-    private transient boolean wildcard;
-
-    /**
-     * the name without the wildcard on the end
-     */
-    private transient String name;
-
-    /**
-     * UID for serialization
-     */
-    private static final long serialVersionUID = 5842294756823092756L;
-
-    public ExecOptionPermission(String name) {
-        super(name);
-        init(name);
-    }
-
-    public ExecOptionPermission(String name, String actions) {
-        this(name);
-    }
-
-    /**
-     * Checks if the specified permission is "implied" by
-     * this object.
-     * <P>
-     * More specifically, this method returns true if:<p>
-     * <ul>
-     * <li> <i>p</i>'s class is the same as this object's class, and<p>
-     * <li> <i>p</i>'s name equals or (in the case of wildcards)
-     *      is implied by this object's
-     *      name. For example, "a.b.*" implies "a.b.c", and
-     *      "a.b=*" implies "a.b=c"
-     * </ul>
-     *
-     * @param p the permission to check against.
-     *
-     * @return true if the passed permission is equal to or
-     * implied by this permission, false otherwise.
-     */
-    public boolean implies(Permission p) {
-        if (!(p instanceof ExecOptionPermission))
-            return false;
-
-        ExecOptionPermission that = (ExecOptionPermission) p;
-
-        if (this.wildcard) {
-            if (that.wildcard) {
-                // one wildcard can imply another
-                return that.name.startsWith(name);
-            } else {
-                // make sure p.name is longer so a.b.* doesn't imply a.b
-                return (that.name.length() > this.name.length()) &&
-                    that.name.startsWith(this.name);
-            }
-        } else {
-            if (that.wildcard) {
-                // a non-wildcard can't imply a wildcard
-                return false;
-            } else {
-                return this.name.equals(that.name);
-            }
-        }
-    }
-
-    /**
-     * Checks two ExecOptionPermission objects for equality.
-     * Checks that <i>obj</i>'s class is the same as this object's class
-     * and has the same name as this object.
-     * <P>
-     * @param obj the object we are testing for equality with this object.
-     * @return true if <i>obj</i> is an ExecOptionPermission, and has the same
-     * name as this ExecOptionPermission object, false otherwise.
-     */
-    public boolean equals(Object obj) {
-        if (obj == this)
-            return true;
-
-        if ((obj == null) || (obj.getClass() != getClass()))
-            return false;
-
-        ExecOptionPermission that = (ExecOptionPermission) obj;
-
-        return this.getName().equals(that.getName());
-    }
-
-
-    /**
-     * Returns the hash code value for this object.
-     * The hash code used is the hash code of the name, that is,
-     * <code>getName().hashCode()</code>, where <code>getName</code> is
-     * from the Permission superclass.
-     *
-     * @return a hash code value for this object.
-     */
-    public int hashCode() {
-        return this.getName().hashCode();
-    }
-
-    /**
-     * Returns the canonical string representation of the actions.
-     *
-     * @return the canonical string representation of the actions.
-     */
-    public String getActions() {
-        return "";
-    }
-
-    /**
-     * Returns a new PermissionCollection object for storing
-     * ExecOptionPermission objects.
-     * <p>
-     * A ExecOptionPermissionCollection stores a collection of
-     * ExecOptionPermission permissions.
-     *
-     * <p>ExecOptionPermission objects must be stored in a manner that allows
-     * them to be inserted in any order, but that also enables the
-     * PermissionCollection <code>implies</code> method
-     * to be implemented in an efficient (and consistent) manner.
-     *
-     * @return a new PermissionCollection object suitable for
-     * storing ExecOptionPermissions.
-     */
-    public PermissionCollection newPermissionCollection() {
-        return new ExecOptionPermissionCollection();
-    }
-
-    /**
-     * readObject is called to restore the state of the ExecOptionPermission
-     * from a stream.
-     */
-    private synchronized void readObject(java.io.ObjectInputStream s)
-         throws IOException, ClassNotFoundException
-    {
-        s.defaultReadObject();
-        // init is called to initialize the rest of the values.
-        init(getName());
-    }
-
-    /**
-     * Initialize a ExecOptionPermission object. Common to all constructors.
-     * Also called during de-serialization.
-     */
-    private void init(String name)
-    {
-        if (name == null)
-            throw new NullPointerException("name can't be null");
-
-        if (name.equals("")) {
-            throw new IllegalArgumentException("name can't be empty");
-        }
-
-        if (name.endsWith(".*") || name.endsWith("=*") || name.equals("*")) {
-            wildcard = true;
-            if (name.length() == 1) {
-                this.name = "";
-            } else {
-                this.name = name.substring(0, name.length()-1);
-            }
-        } else {
-            this.name = name;
-        }
-    }
-
-    /**
-     * A ExecOptionPermissionCollection stores a collection
-     * of ExecOptionPermission permissions. ExecOptionPermission objects
-     * must be stored in a manner that allows them to be inserted in any
-     * order, but enable the implies function to evaluate the implies
-     * method in an efficient (and consistent) manner.
-     *
-     * A ExecOptionPermissionCollection handles comparing a permission like
-     * "a.b.c.d.e" * with a Permission such as "a.b.*", or "*".
-     *
-     * @serial include
-     */
-    private static class ExecOptionPermissionCollection
-        extends PermissionCollection
-        implements java.io.Serializable
-    {
-
-        private Hashtable<String, Permission> permissions;
-        private boolean all_allowed; // true if "*" is in the collection
-        private static final long serialVersionUID = -1242475729790124375L;
-
-        /**
-         * Create an empty ExecOptionPermissionCollection.
-         */
-        public ExecOptionPermissionCollection() {
-            permissions = new Hashtable<>(11);
-            all_allowed = false;
-        }
-
-        /**
-         * Adds a permission to the collection. The key for the hash is
-         * permission.name.
-         *
-         * @param permission the Permission object to add.
-         *
-         * @exception IllegalArgumentException - if the permission is not a
-         *                                       ExecOptionPermission
-         *
-         * @exception SecurityException - if this ExecOptionPermissionCollection
-         *                                object has been marked readonly
-         */
-
-        public void add(Permission permission)
-        {
-            if (! (permission instanceof ExecOptionPermission))
-                throw new IllegalArgumentException("invalid permission: "+
-                                                   permission);
-            if (isReadOnly())
-                throw new SecurityException("attempt to add a Permission to a readonly PermissionCollection");
-
-            ExecOptionPermission p = (ExecOptionPermission) permission;
-
-            permissions.put(p.getName(), permission);
-            if (!all_allowed) {
-                if (p.getName().equals("*"))
-                    all_allowed = true;
-            }
-        }
-
-        /**
-         * Check and see if this set of permissions implies the permissions
-         * expressed in "permission".
-         *
-         * @param p the Permission object to compare
-         *
-         * @return true if "permission" is a proper subset of a permission in
-         * the set, false if not.
-         */
-        public boolean implies(Permission permission)
-        {
-            if (! (permission instanceof ExecOptionPermission))
-                return false;
-
-            ExecOptionPermission p = (ExecOptionPermission) permission;
-
-            // short circuit if the "*" Permission was added
-            if (all_allowed)
-                return true;
-
-            // strategy:
-            // Check for full match first. Then work our way up the
-            // name looking for matches on a.b.*
-
-            String pname = p.getName();
-
-            Permission x = permissions.get(pname);
-
-            if (x != null)
-                // we have a direct hit!
-                return x.implies(permission);
-
-
-            // work our way up the tree...
-            int last, offset;
-
-            offset = pname.length() - 1;
-
-            while ((last = pname.lastIndexOf(".", offset)) != -1) {
-
-                pname = pname.substring(0, last+1) + "*";
-                x = permissions.get(pname);
-
-                if (x != null) {
-                    return x.implies(permission);
-                }
-                offset = last - 1;
-            }
-
-            // check for "=*" wildcard match
-            pname = p.getName();
-            offset = pname.length() - 1;
-
-            while ((last = pname.lastIndexOf("=", offset)) != -1) {
-
-                pname = pname.substring(0, last+1) + "*";
-                x = permissions.get(pname);
-
-                if (x != null) {
-                    return x.implies(permission);
-                }
-                offset = last - 1;
-            }
-
-            // we don't have to check for "*" as it was already checked
-            // at the top (all_allowed), so we just return false
-            return false;
-        }
-
-        /**
-         * Returns an enumeration of all the ExecOptionPermission objects in the
-         * container.
-         *
-         * @return an enumeration of all the ExecOptionPermission objects.
-         */
-
-        public Enumeration<Permission> elements()
-        {
-            return permissions.elements();
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/rmi/rmid/ExecPermission.java b/ojluni/src/main/java/com/sun/rmi/rmid/ExecPermission.java
deleted file mode 100755
index 067b9db..0000000
--- a/ojluni/src/main/java/com/sun/rmi/rmid/ExecPermission.java
+++ /dev/null
@@ -1,299 +0,0 @@
-/*
- * Copyright (c) 2000, 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.rmi.rmid;
-
-import java.security.*;
-import java.io.*;
-import java.util.*;
-
-/**
- * The ExecPermission class represents permission for rmid to execute
- * a specific command to launch an activation group.  An ExecPermission
- * consists of a pathname of a command to launch an activation group.
- * <P>
- * Pathname is the pathname of the file or directory to grant rmid
- * execute permission.  A pathname that ends in "/*" (where "/" is
- * the file separator character, <code>File.separatorChar</code>) indicates
- * all the files and directories contained in that directory. A pathname
- * that ends with "/-" indicates (recursively) all files
- * and subdirectories contained in that directory. A pathname consisting of
- * the special token "&lt;&lt;ALL FILES&gt;&gt;" matches <bold>any</bold> file.
- * <P>
- * Note: A pathname consisting of a single "*" indicates all the files
- * in the current directory, while a pathname consisting of a single "-"
- * indicates all the files in the current directory and
- * (recursively) all files and subdirectories contained in the current
- * directory.
- * <P>
- *
- *
- * @author Ann Wollrath
- *
- * @serial exclude
- */
-public final class ExecPermission extends Permission
-{
-    /**
-     * UID for serialization
-     */
-    private static final long serialVersionUID = -6208470287358147919L;
-
-    private transient FilePermission fp;
-
-    /**
-     * Creates a new ExecPermission object with the specified path.
-     * <i>path</i> is the pathname of a file or directory.
-     *
-     * <p>A pathname that ends in "/*" (where "/" is
-     * the file separator character, <code>File.separatorChar</code>) indicates
-     * a directory and all the files contained in that directory. A pathname
-     * that ends with "/-" indicates a directory and (recursively) all files
-     * and subdirectories contained in that directory. The special pathname
-     * "&lt;&lt;ALL FILES&gt;&gt;" matches all files.
-     *
-     * <p>A pathname consisting of a single "*" indicates all the files
-     * in the current directory, while a pathname consisting of a single "-"
-     * indicates all the files in the current directory and
-     * (recursively) all files and subdirectories contained in the current
-     * directory.
-     *
-     * @param path the pathname of the file/directory.
-     */
-    public ExecPermission(String path) {
-        super(path);
-        init(path);
-    }
-
-    /**
-     * Creates a new ExecPermission object with the specified path.
-     * <i>path</i> is the pathname of a file or directory.
-     *
-     * <p>A pathname that ends in "/*" (where "/" is
-     * the file separator character, <code>File.separatorChar</code>) indicates
-     * a directory and all the files contained in that directory. A pathname
-     * that ends with "/-" indicates a directory and (recursively) all files
-     * and subdirectories contained in that directory. The special pathname
-     * "&lt;&lt;ALL FILES&gt;&gt;" matches all files.
-     *
-     * <p>A pathname consisting of a single "*" indicates all the files
-     * in the current directory, while a pathname consisting of a single "-"
-     * indicates all the files in the current directory and
-     * (recursively) all files and subdirectories contained in the current
-     * directory.
-     *
-     * @param path the pathname of the file/directory.
-     * @param actions the action string (unused)
-     */
-    public ExecPermission(String path, String actions) {
-        this(path);
-    }
-
-    /**
-     * Checks if this ExecPermission object "implies" the specified permission.
-     * <P>
-     * More specifically, this method returns true if:<p>
-     * <ul>
-     * <li> <i>p</i> is an instanceof ExecPermission,<p> and
-     * <li> <i>p</i>'s pathname is implied by this object's
-     *      pathname. For example, "/tmp/*" implies "/tmp/foo", since
-     *      "/tmp/*" encompasses the "/tmp" directory and all files in that
-     *      directory, including the one named "foo".
-     * </ul>
-     * @param p the permission to check against.
-     *
-     * @return true if the specified permission is implied by this object,
-     * false if not.
-     */
-    public boolean implies(Permission p) {
-        if (!(p instanceof ExecPermission))
-            return false;
-
-        ExecPermission that = (ExecPermission) p;
-
-        return fp.implies(that.fp);
-    }
-
-    /**
-     * Checks two ExecPermission objects for equality.
-     * Checks that <i>obj</i>'s class is the same as this object's class
-     * and has the same name as this object.
-     * <P>
-     * @param obj the object we are testing for equality with this object.
-     * @return true if <i>obj</i> is an ExecPermission, and has the same
-     * pathname as this ExecPermission object, false otherwise.
-     */
-    public boolean equals(Object obj) {
-        if (obj == this)
-            return true;
-
-        if (! (obj instanceof ExecPermission))
-            return false;
-
-        ExecPermission that = (ExecPermission) obj;
-
-        return fp.equals(that.fp);
-    }
-
-    /**
-     * Returns the hash code value for this object.
-     *
-     * @return a hash code value for this object.
-     */
-    public int hashCode() {
-        return this.fp.hashCode();
-    }
-
-    /**
-     * Returns the canonical string representation of the actions.
-     *
-     * @return the canonical string representation of the actions.
-     */
-    public String getActions() {
-        return "";
-    }
-
-    /**
-     * Returns a new PermissionCollection object for storing
-     * ExecPermission objects.
-     * <p>
-     * A ExecPermissionCollection stores a collection of
-     * ExecPermission permissions.
-     *
-     * <p>ExecPermission objects must be stored in a manner that allows
-     * them to be inserted in any order, but that also enables the
-     * PermissionCollection <code>implies</code> method
-     * to be implemented in an efficient (and consistent) manner.
-     *
-     * @return a new PermissionCollection object suitable for
-     * storing ExecPermissions.
-     */
-    public PermissionCollection newPermissionCollection() {
-        return new ExecPermissionCollection();
-    }
-
-    /**
-     * readObject is called to restore the state of the ExecPermission
-     * from a stream.
-     */
-    private synchronized void readObject(java.io.ObjectInputStream s)
-         throws IOException, ClassNotFoundException
-    {
-        s.defaultReadObject();
-        // init is called to initialize the rest of the values.
-        init(getName());
-    }
-
-    /**
-     * Initialize a ExecPermission object. Common to all constructors.
-     * Also called during de-serialization.
-     */
-    private void init(String path) {
-        this.fp = new FilePermission(path, "execute");
-    }
-
-    /**
-     * A ExecPermissionCollection stores a collection
-     * of ExecPermission permissions. ExecPermission objects
-     * must be stored in a manner that allows them to be inserted in any
-     * order, but enable the implies function to evaluate the implies
-     * method in an efficient (and consistent) manner.
-     *
-     * @serial include
-     */
-    private static class ExecPermissionCollection
-        extends PermissionCollection
-        implements java.io.Serializable
-    {
-        private Vector<Permission> permissions;
-
-        private static final long serialVersionUID = -3352558508888368273L;
-
-        /**
-         * Create an empty ExecPermissionCollection.
-         */
-        public ExecPermissionCollection() {
-            permissions = new Vector<>();
-        }
-
-        /**
-         * Adds a permission to the collection.
-         *
-         * @param permission the Permission object to add.
-         *
-         * @exception IllegalArgumentException - if the permission is not a
-         *                                       ExecPermission
-         *
-         * @exception SecurityException - if this ExecPermissionCollection
-         *                                object has been marked readonly
-         */
-        public void add(Permission permission)
-        {
-            if (! (permission instanceof ExecPermission))
-                throw new IllegalArgumentException("invalid permission: "+
-                                                   permission);
-            if (isReadOnly())
-                throw new SecurityException("attempt to add a Permission to a readonly PermissionCollection");
-
-            permissions.addElement(permission);
-        }
-
-        /**
-         * Check and see if this set of permissions implies the permissions
-         * expressed in "permission".
-         *
-         * @param p the Permission object to compare
-         *
-         * @return true if "permission" is a proper subset of a permission in
-         * the set, false if not.
-         */
-        public boolean implies(Permission permission)
-        {
-            if (! (permission instanceof ExecPermission))
-                return false;
-
-            Enumeration<Permission> e = permissions.elements();
-
-            while (e.hasMoreElements()) {
-                ExecPermission x = (ExecPermission)e.nextElement();
-                if (x.implies(permission)) {
-                    return true;
-                }
-            }
-            return false;
-        }
-
-        /**
-         * Returns an enumeration of all the ExecPermission objects in the
-         * container.
-         *
-         * @return an enumeration of all the ExecPermission objects.
-         */
-        public Enumeration<Permission> elements()
-        {
-            return permissions.elements();
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/rowset/CachedRowSetImpl.java b/ojluni/src/main/java/com/sun/rowset/CachedRowSetImpl.java
deleted file mode 100755
index 8008049..0000000
--- a/ojluni/src/main/java/com/sun/rowset/CachedRowSetImpl.java
+++ /dev/null
@@ -1,10133 +0,0 @@
-/*
- * Copyright (c) 2003, 2011, 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.rowset;
-
-import java.sql.*;
-import javax.sql.*;
-import java.io.*;
-import java.math.*;
-import java.util.*;
-import java.text.*;
-
-import javax.sql.rowset.*;
-import javax.sql.rowset.spi.*;
-import javax.sql.rowset.serial.*;
-import com.sun.rowset.internal.*;
-import com.sun.rowset.providers.*;
-
-/**
- * The standard implementation of the <code>CachedRowSet</code> interface.
- *
- * See interface defintion for full behaviour and implementation requirements.
- * This reference implementation has made provision for a one-to-one write back
- * facility and it is curremtly be possible to change the peristence provider
- * during the life-time of any CachedRowSetImpl.
- *
- * @author Jonathan Bruce, Amit Handa
- */
-
-public class CachedRowSetImpl extends BaseRowSet implements RowSet, RowSetInternal, Serializable, Cloneable, CachedRowSet {
-
-    /**
-     * The <code>SyncProvider</code> used by the CachedRowSet
-     */
-    private SyncProvider provider;
-
-    /**
-     * The <code>RowSetReaderImpl</code> object that is the reader
-     * for this rowset.  The method <code>execute</code> uses this
-     * reader as part of its implementation.
-     * @serial
-     */
-    private RowSetReader rowSetReader;
-
-    /**
-     * The <code>RowSetWriterImpl</code> object that is the writer
-     * for this rowset.  The method <code>acceptChanges</code> uses
-     * this writer as part of its implementation.
-     * @serial
-     */
-    private RowSetWriter rowSetWriter;
-
-    /**
-     * The <code>Connection</code> object that connects with this
-     * <code>CachedRowSetImpl</code> object's current underlying data source.
-     */
-    private transient Connection conn;
-
-    /**
-     * The <code>ResultSetMetaData</code> object that contains information
-     * about the columns in the <code>ResultSet</code> object that is the
-     * current source of data for this <code>CachedRowSetImpl</code> object.
-     */
-    private transient ResultSetMetaData RSMD;
-
-    /**
-     * The <code>RowSetMetaData</code> object that contains information about
-     * the columns in this <code>CachedRowSetImpl</code> object.
-     * @serial
-     */
-    private RowSetMetaDataImpl RowSetMD;
-
-    // Properties of this RowSet
-
-    /**
-     * An array containing the columns in this <code>CachedRowSetImpl</code>
-     * object that form a unique identifier for a row. This array
-     * is used by the writer.
-     * @serial
-     */
-    private int keyCols[];
-
-    /**
-     * The name of the table in the underlying database to which updates
-     * should be written.  This name is needed because most drivers
-     * do not return this information in a <code>ResultSetMetaData</code>
-     * object.
-     * @serial
-     */
-    private String tableName;
-
-    /**
-     * A <code>Vector</code> object containing the <code>Row</code>
-     * objects that comprise  this <code>CachedRowSetImpl</code> object.
-     * @serial
-     */
-    private Vector<Object> rvh;
-
-    /**
-     * The current postion of the cursor in this <code>CachedRowSetImpl</code>
-     * object.
-     * @serial
-     */
-    private int cursorPos;
-
-    /**
-     * The current postion of the cursor in this <code>CachedRowSetImpl</code>
-     * object not counting rows that have been deleted, if any.
-     * <P>
-     * For example, suppose that the cursor is on the last row of a rowset
-     * that started with five rows and subsequently had the second and third
-     * rows deleted. The <code>absolutePos</code> would be <code>3</code>,
-     * whereas the <code>cursorPos</code> would be <code>5</code>.
-     * @serial
-     */
-    private int absolutePos;
-
-    /**
-     * The number of deleted rows currently in this <code>CachedRowSetImpl</code>
-     * object.
-     * @serial
-     */
-    private int numDeleted;
-
-    /**
-     * The total number of rows currently in this <code>CachedRowSetImpl</code>
-     * object.
-     * @serial
-     */
-    private int numRows;
-
-    /**
-     * A special row used for constructing a new row. A new
-     * row is constructed by using <code>ResultSet.updateXXX</code>
-     * methods to insert column values into the insert row.
-     * @serial
-     */
-    private InsertRow insertRow;
-
-    /**
-     * A <code>boolean</code> indicating whether the cursor is
-     * currently on the insert row.
-     * @serial
-     */
-    private boolean onInsertRow;
-
-    /**
-     * The field that temporarily holds the last position of the
-     * cursor before it moved to the insert row, thus preserving
-     * the number of the current row to which the cursor may return.
-     * @serial
-     */
-    private int currentRow;
-
-    /**
-     * A <code>boolean</code> indicating whether the last value
-     * returned was an SQL <code>NULL</code>.
-     * @serial
-     */
-    private boolean lastValueNull;
-
-    /**
-     * A <code>SQLWarning</code> which logs on the warnings
-     */
-    private SQLWarning sqlwarn;
-
-    /**
-     * Used to track match column for JoinRowSet consumption
-     */
-    private String strMatchColumn ="";
-
-    /**
-     * Used to track match column for JoinRowSet consumption
-     */
-    private int iMatchColumn = -1;
-
-    /**
-     * A <code>RowSetWarning</code> which logs on the warnings
-     */
-    private RowSetWarning rowsetWarning;
-
-    /**
-     * The default SyncProvider for the RI CachedRowSetImpl
-     */
-    private String DEFAULT_SYNC_PROVIDER = "com.sun.rowset.providers.RIOptimisticProvider";
-
-    /**
-     * The boolean variable indicating locatorsUpdateValue
-     */
-    private boolean dbmslocatorsUpdateCopy;
-
-    /**
-     * The <code>ResultSet</code> object that is used to maintain the data when
-     * a ResultSet and start position are passed as parameters to the populate function
-     */
-    private transient ResultSet resultSet;
-
-    /**
-     * The integer value indicating the end position in the ResultSetwhere the picking
-     * up of rows for populating a CachedRowSet object was left off.
-     */
-    private int endPos;
-
-    /**
-     * The integer value indicating the end position in the ResultSetwhere the picking
-     * up of rows for populating a CachedRowSet object was left off.
-     */
-    private int prevEndPos;
-
-    /**
-     * The integer value indicating the position in the ResultSet, to populate the
-     * CachedRowSet object.
-     */
-    private int startPos;
-
-    /**
-     * The integer value indicating the positon from where the page prior to this
-     * was populated.
-     */
-    private int startPrev;
-
-    /**
-     * The integer value indicating size of the page.
-     */
-    private int pageSize;
-
-    /**
-     * The integer value indicating number of rows that have been processed so far.
-     * Used for checking whether maxRows has been reached or not.
-     */
-    private int maxRowsreached;
-    /**
-     * The boolean value when true signifies that pages are still to follow and a
-     * false value indicates that this is the last page.
-     */
-    private boolean pagenotend = true;
-
-    /**
-     * The boolean value indicating whether this is the first page or not.
-     */
-    private boolean onFirstPage;
-
-    /**
-     * The boolean value indicating whether this is the last page or not.
-     */
-    private boolean onLastPage;
-
-    /**
-     * The integer value indicating how many times the populate function has been called.
-     */
-    private int populatecallcount;
-
-    /**
-     * The integer value indicating the total number of rows to be processed in the
-     * ResultSet object passed to the populate function.
-     */
-    private int totalRows;
-
-    /**
-     * The boolean value indicating how the CahedRowSet object has been populated for
-     * paging purpose. True indicates that connection parameter is passed.
-     */
-    private boolean callWithCon;
-
-    /**
-     * CachedRowSet reader object to read the data from the ResultSet when a connection
-     * parameter is passed to populate the CachedRowSet object for paging.
-     */
-    private CachedRowSetReader crsReader;
-
-    /**
-     * The Vector holding the Match Columns
-     */
-    private Vector<Integer> iMatchColumns;
-
-    /**
-     * The Vector that will hold the Match Column names.
-     */
-    private Vector<String> strMatchColumns;
-
-    /**
-     * Trigger that indicates whether the active SyncProvider is exposes the
-     * additional TransactionalWriter method
-     */
-    private boolean tXWriter = false;
-
-    /**
-     * The field object for a transactional RowSet writer
-     */
-    private TransactionalWriter tWriter = null;
-
-    protected transient JdbcRowSetResourceBundle resBundle;
-
-    private boolean updateOnInsert;
-
-
-
-    /**
-     * Constructs a new default <code>CachedRowSetImpl</code> object with
-     * the capacity to hold 100 rows. This new object has no metadata
-     * and has the following default values:
-     * <pre>
-     *     onInsertRow = false
-     *     insertRow = null
-     *     cursorPos = 0
-     *     numRows = 0
-     *     showDeleted = false
-     *     queryTimeout = 0
-     *     maxRows = 0
-     *     maxFieldSize = 0
-     *     rowSetType = ResultSet.TYPE_SCROLL_INSENSITIVE
-     *     concurrency = ResultSet.CONCUR_UPDATABLE
-     *     readOnly = false
-     *     isolation = Connection.TRANSACTION_READ_COMMITTED
-     *     escapeProcessing = true
-     *     onInsertRow = false
-     *     insertRow = null
-     *     cursorPos = 0
-     *     absolutePos = 0
-     *     numRows = 0
-     * </pre>
-     * A <code>CachedRowSetImpl</code> object is configured to use the default
-     * <code>RIOptimisticProvider</code> implementation to provide connectivity
-     * and synchronization capabilities to the set data source.
-     * <P>
-     * @throws SQLException if an error occurs
-     */
-    public CachedRowSetImpl() throws SQLException {
-
-        try {
-           resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle();
-        } catch(IOException ioe) {
-            throw new RuntimeException(ioe);
-        }
-
-        // set the Reader, this maybe overridden latter
-        provider =
-        (SyncProvider)SyncFactory.getInstance(DEFAULT_SYNC_PROVIDER);
-
-        if (!(provider instanceof RIOptimisticProvider)) {
-            throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.invalidp").toString());
-        }
-
-        rowSetReader = (CachedRowSetReader)provider.getRowSetReader();
-        rowSetWriter = (CachedRowSetWriter)provider.getRowSetWriter();
-
-        // allocate the parameters collection
-        initParams();
-
-        initContainer();
-
-        // set up some default values
-        initProperties();
-
-        // insert row setup
-        onInsertRow = false;
-        insertRow = null;
-
-        // set the warninings
-        sqlwarn = new SQLWarning();
-        rowsetWarning = new RowSetWarning();
-
-    }
-
-    /**
-     * Provides a <code>CachedRowSetImpl</code> instance with the same default properties as
-     * as the zero parameter constructor.
-     * <pre>
-     *     onInsertRow = false
-     *     insertRow = null
-     *     cursorPos = 0
-     *     numRows = 0
-     *     showDeleted = false
-     *     queryTimeout = 0
-     *     maxRows = 0
-     *     maxFieldSize = 0
-     *     rowSetType = ResultSet.TYPE_SCROLL_INSENSITIVE
-     *     concurrency = ResultSet.CONCUR_UPDATABLE
-     *     readOnly = false
-     *     isolation = Connection.TRANSACTION_READ_COMMITTED
-     *     escapeProcessing = true
-     *     onInsertRow = false
-     *     insertRow = null
-     *     cursorPos = 0
-     *     absolutePos = 0
-     *     numRows = 0
-     * </pre>
-     *
-     * However, applications will have the means to specify at runtime the
-     * desired <code>SyncProvider</code> object.
-     * <p>
-     * For example, creating a <code>CachedRowSetImpl</code> object as follows ensures
-     * that a it is established with the <code>com.foo.provider.Impl</code> synchronization
-     * implementation providing the synchronization mechanism for this disconnected
-     * <code>RowSet</code> object.
-     * <pre>
-     *     Hashtable env = new Hashtable();
-     *     env.put(javax.sql.rowset.spi.SyncFactory.ROWSET_PROVIDER_NAME,
-     *         "com.foo.provider.Impl");
-     *     CachedRowSetImpl crs = new CachedRowSet(env);
-     * </pre>
-     * <p>
-     * Calling this constructor with a <code>null</code> parameter will
-     * cause the <code>SyncFactory</code> to provide the reference
-     * optimistic provider <code>com.sun.rowset.providers.RIOptimisticProvider</code>.
-     * <p>
-     * In addition, the following properties can be associated with the
-     * provider to assist in determining the choice of the synchronizaton
-     * provider such as:
-     * <ul>
-     * <li><code>ROWSET_SYNC_PROVIDER</code> - the property specifying the the
-     * <code>SyncProvider</code> class name to be instantiated by the
-     * <code>SyncFacttory</code>
-     * <li><code>ROWSET_SYNC_VENDOR</code> - the property specifying the software
-     * vendor associated with a <code>SyncProvider</code> implementation.
-     * <li><code>ROWSET_SYNC_PROVIDER_VER</code> - the property specifying the
-     * version of the <code>SyncProvider</code> implementation provided by the
-     * software vendor.
-     * </ul>
-     * More specific detailes are available in the <code>SyncFactory</code>
-     * and <code>SyncProvider</code> specificiations later in this document.
-     * <p>
-     * @param env a <code>Hashtable</code> object with a list of desired
-     *        synchronization providers
-     * @throws SQLException if the requested provider cannot be found by the
-     * synchonization factory
-     * @see SyncProvider
-     */
-
-    public CachedRowSetImpl(Hashtable env) throws SQLException {
-
-
-        try {
-           resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle();
-        } catch(IOException ioe) {
-            throw new RuntimeException(ioe);
-        }
-
-        if (env == null) {
-            throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.nullhash").toString());
-        }
-
-        String providerName = (String)env.get(
-        javax.sql.rowset.spi.SyncFactory.ROWSET_SYNC_PROVIDER);
-
-        // set the Reader, this maybe overridden latter
-        provider =
-        (SyncProvider)SyncFactory.getInstance(providerName);
-
-        rowSetReader = provider.getRowSetReader();
-        rowSetWriter = provider.getRowSetWriter();
-
-        initParams(); // allocate the parameters collection
-        initContainer();
-        initProperties(); // set up some default values
-    }
-
-    /**
-     * Sets the <code>rvh</code> field to a new <code>Vector</code>
-     * object with a capacity of 100 and sets the
-     * <code>cursorPos</code> and <code>numRows</code> fields to zero.
-     */
-    private void initContainer() {
-
-        rvh = new Vector<Object>(100);
-        cursorPos = 0;
-        absolutePos = 0;
-        numRows = 0;
-        numDeleted = 0;
-    }
-
-    /**
-     * Sets the properties for this <code>CachedRowSetImpl</code> object to
-     * their default values. This method is called internally by the
-     * default constructor.
-     */
-
-    private void initProperties() throws SQLException {
-
-        if(resBundle == null) {
-            try {
-               resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle();
-            } catch(IOException ioe) {
-                throw new RuntimeException(ioe);
-            }
-        }
-        setShowDeleted(false);
-        setQueryTimeout(0);
-        setMaxRows(0);
-        setMaxFieldSize(0);
-        setType(ResultSet.TYPE_SCROLL_INSENSITIVE);
-        setConcurrency(ResultSet.CONCUR_UPDATABLE);
-        if((rvh.size() > 0) && (isReadOnly() == false))
-            setReadOnly(false);
-        else
-            setReadOnly(true);
-        setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
-        setEscapeProcessing(true);
-        //setTypeMap(null);
-        checkTransactionalWriter();
-
-        //Instantiating the vector for MatchColumns
-
-        iMatchColumns = new Vector<Integer>(10);
-        for(int i = 0; i < 10 ; i++) {
-           iMatchColumns.add(i,Integer.valueOf(-1));
-        }
-
-        strMatchColumns = new Vector<String>(10);
-        for(int j = 0; j < 10; j++) {
-           strMatchColumns.add(j,null);
-        }
-    }
-
-    /**
-     * Determine whether the SyncProvider's writer implements the
-     * <code>TransactionalWriter<code> interface
-     */
-    private void checkTransactionalWriter() {
-        if (rowSetWriter != null) {
-            Class c = rowSetWriter.getClass();
-            if (c != null) {
-                Class[] theInterfaces = c.getInterfaces();
-                for (int i = 0; i < theInterfaces.length; i++) {
-                    if ((theInterfaces[i].getName()).indexOf("TransactionalWriter") > 0) {
-                        tXWriter = true;
-                        establishTransactionalWriter();
-                    }
-                }
-            }
-        }
-    }
-
-    /**
-     * Sets an private field to all transaction bounddaries to be set
-     */
-    private void establishTransactionalWriter() {
-        tWriter = (TransactionalWriter)provider.getRowSetWriter();
-    }
-
-    //-----------------------------------------------------------------------
-    // Properties
-    //-----------------------------------------------------------------------
-
-    /**
-     * Sets this <code>CachedRowSetImpl</code> object's command property
-     * to the given <code>String</code> object and clears the parameters,
-     * if any, that were set for the previous command.
-     * <P>
-     * The command property may not be needed
-     * if the rowset is produced by a data source, such as a spreadsheet,
-     * that does not support commands. Thus, this property is optional
-     * and may be <code>null</code>.
-     *
-     * @param cmd a <code>String</code> object containing an SQL query
-     *            that will be set as the command; may be <code>null</code>
-     * @throws SQLException if an error occurs
-     */
-    public void setCommand(String cmd) throws SQLException {
-
-        super.setCommand(cmd);
-
-        if(!buildTableName(cmd).equals("")) {
-            this.setTableName(buildTableName(cmd));
-        }
-    }
-
-
-    //---------------------------------------------------------------------
-    // Reading and writing data
-    //---------------------------------------------------------------------
-
-    /**
-     * Populates this <code>CachedRowSetImpl</code> object with data from
-     * the given <code>ResultSet</code> object.  This
-     * method is an alternative to the method <code>execute</code>
-     * for filling the rowset with data.  The method <code>populate</code>
-     * does not require that the properties needed by the method
-     * <code>execute</code>, such as the <code>command</code> property,
-     * be set. This is true because the method <code>populate</code>
-     * is given the <code>ResultSet</code> object from
-     * which to get data and thus does not need to use the properties
-     * required for setting up a connection and executing this
-     * <code>CachedRowSetImpl</code> object's command.
-     * <P>
-     * After populating this rowset with data, the method
-     * <code>populate</code> sets the rowset's metadata and
-     * then sends a <code>RowSetChangedEvent</code> object
-     * to all registered listeners prior to returning.
-     *
-     * @param data the <code>ResultSet</code> object containing the data
-     *             to be read into this <code>CachedRowSetImpl</code> object
-     * @throws SQLException if an error occurs; or the max row setting is
-     *          violated while populating the RowSet
-     * @see #execute
-     */
-
-     public void populate(ResultSet data) throws SQLException {
-        int rowsFetched;
-        Row currentRow;
-        int numCols;
-        int i;
-        Map<String, Class<?>> map = getTypeMap();
-        Object obj;
-        int mRows;
-
-        if (data == null) {
-            throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.populate").toString());
-        }
-        this.resultSet = data;
-
-        // get the meta data for this ResultSet
-        RSMD = data.getMetaData();
-
-        // set up the metadata
-        RowSetMD = new RowSetMetaDataImpl();
-        initMetaData(RowSetMD, RSMD);
-
-        // release the meta-data so that aren't tempted to use it.
-        RSMD = null;
-        numCols = RowSetMD.getColumnCount();
-        mRows = this.getMaxRows();
-        rowsFetched = 0;
-        currentRow = null;
-
-        while ( data.next()) {
-
-            currentRow = new Row(numCols);
-
-            if ( rowsFetched > mRows && mRows > 0) {
-                rowsetWarning.setNextWarning(new RowSetWarning("Populating rows "
-                + "setting has exceeded max row setting"));
-            }
-            for ( i = 1; i <= numCols; i++) {
-                /*
-                 * check if the user has set a map. If no map
-                 * is set then use plain getObject. This lets
-                 * us work with drivers that do not support
-                 * getObject with a map in fairly sensible way
-                 */
-                if (map == null) {
-                    obj = data.getObject(i);
-                } else {
-                    obj = data.getObject(i, map);
-                }
-                /*
-                 * the following block checks for the various
-                 * types that we have to serialize in order to
-                 * store - right now only structs have been tested
-                 */
-                if (obj instanceof Struct) {
-                    obj = new SerialStruct((Struct)obj, map);
-                } else if (obj instanceof SQLData) {
-                    obj = new SerialStruct((SQLData)obj, map);
-                } else if (obj instanceof Blob) {
-                    obj = new SerialBlob((Blob)obj);
-                } else if (obj instanceof Clob) {
-                    obj = new SerialClob((Clob)obj);
-                } else if (obj instanceof java.sql.Array) {
-                    if(map != null)
-                        obj = new SerialArray((java.sql.Array)obj, map);
-                    else
-                        obj = new SerialArray((java.sql.Array)obj);
-                }
-
-                ((Row)currentRow).initColumnObject(i, obj);
-            }
-            rowsFetched++;
-            rvh.add(currentRow);
-        }
-
-        numRows = rowsFetched ;
-        // Also rowsFetched should be equal to rvh.size()
-
-        // notify any listeners that the rowset has changed
-        notifyRowSetChanged();
-
-
-    }
-
-    /**
-     * Initializes the given <code>RowSetMetaData</code> object with the values
-     * in the given <code>ResultSetMetaData</code> object.
-     *
-     * @param md the <code>RowSetMetaData</code> object for this
-     *           <code>CachedRowSetImpl</code> object, which will be set with
-     *           values from rsmd
-     * @param rsmd the <code>ResultSetMetaData</code> object from which new
-     *             values for md will be read
-     * @throws SQLException if an error occurs
-     */
-    private void initMetaData(RowSetMetaDataImpl md, ResultSetMetaData rsmd) throws SQLException {
-        int numCols = rsmd.getColumnCount();
-
-        md.setColumnCount(numCols);
-        for (int col=1; col <= numCols; col++) {
-            md.setAutoIncrement(col, rsmd.isAutoIncrement(col));
-            if(rsmd.isAutoIncrement(col))
-                updateOnInsert = true;
-            md.setCaseSensitive(col, rsmd.isCaseSensitive(col));
-            md.setCurrency(col, rsmd.isCurrency(col));
-            md.setNullable(col, rsmd.isNullable(col));
-            md.setSigned(col, rsmd.isSigned(col));
-            md.setSearchable(col, rsmd.isSearchable(col));
-             /*
-             * The PostgreSQL drivers sometimes return negative columnDisplaySize,
-             * which causes an exception to be thrown.  Check for it.
-             */
-            int size = rsmd.getColumnDisplaySize(col);
-            if (size < 0) {
-                size = 0;
-            }
-            md.setColumnDisplaySize(col, size);
-            md.setColumnLabel(col, rsmd.getColumnLabel(col));
-            md.setColumnName(col, rsmd.getColumnName(col));
-            md.setSchemaName(col, rsmd.getSchemaName(col));
-            /*
-             * Drivers return some strange values for precision, for non-numeric data, including reports of
-             * non-integer values; maybe we should check type, & set to 0 for non-numeric types.
-             */
-            int precision = rsmd.getPrecision(col);
-            if (precision < 0) {
-                precision = 0;
-            }
-            md.setPrecision(col, precision);
-
-            /*
-             * It seems, from a bug report, that a driver can sometimes return a negative
-             * value for scale.  javax.sql.rowset.RowSetMetaDataImpl will throw an exception
-             * if we attempt to set a negative value.  As such, we'll check for this case.
-             */
-            int scale = rsmd.getScale(col);
-            if (scale < 0) {
-                scale = 0;
-            }
-            md.setScale(col, scale);
-            md.setTableName(col, rsmd.getTableName(col));
-            md.setCatalogName(col, rsmd.getCatalogName(col));
-            md.setColumnType(col, rsmd.getColumnType(col));
-            md.setColumnTypeName(col, rsmd.getColumnTypeName(col));
-        }
-
-        if( conn != null){
-           // JDBC 4.0 mandates as does the Java EE spec that all DataBaseMetaData methods
-           // must be implemented, therefore, the previous fix for 5055528 is being backed out
-            dbmslocatorsUpdateCopy = conn.getMetaData().locatorsUpdateCopy();
-        }
-    }
-
-    /**
-     * Populates this <code>CachedRowSetImpl</code> object with data,
-     * using the given connection to produce the result set from
-     * which data will be read.  A second form of this method,
-     * which takes no arguments, uses the values from this rowset's
-     * user, password, and either url or data source properties to
-     * create a new database connection. The form of <code>execute</code>
-     * that is given a connection ignores these properties.
-     *
-     * @param conn A standard JDBC <code>Connection</code> object that this
-     * <code>CachedRowSet</code> object can pass to a synchronization provider
-     * to establish a connection to the data source
-     * @throws SQLException if an invalid <code>Connection</code> is supplied
-     *           or an error occurs in establishing the connection to the
-     *           data source
-     * @see #populate
-     * @see java.sql.Connection
-     */
-    public void execute(Connection conn) throws SQLException {
-        // store the connection so the reader can find it.
-        setConnection(conn);
-
-        if(getPageSize() != 0){
-            crsReader = (CachedRowSetReader)provider.getRowSetReader();
-            crsReader.setStartPosition(1);
-            callWithCon = true;
-            crsReader.readData((RowSetInternal)this);
-        }
-
-        // Now call the current reader's readData method
-        else {
-           rowSetReader.readData((RowSetInternal)this);
-        }
-        RowSetMD = (RowSetMetaDataImpl)this.getMetaData();
-
-        if(conn != null){
-            // JDBC 4.0 mandates as does the Java EE spec that all DataBaseMetaData methods
-            // must be implemented, therefore, the previous fix for 5055528 is being backed out
-            dbmslocatorsUpdateCopy = conn.getMetaData().locatorsUpdateCopy();
-        }
-
-    }
-
-    /**
-     * Sets this <code>CachedRowSetImpl</code> object's connection property
-     * to the given <code>Connection</code> object.  This method is called
-     * internally by the version of the method <code>execute</code> that takes a
-     * <code>Connection</code> object as an argument. The reader for this
-     * <code>CachedRowSetImpl</code> object can retrieve the connection stored
-     * in the rowset's connection property by calling its
-     * <code>getConnection</code> method.
-     *
-     * @param connection the <code>Connection</code> object that was passed in
-     *                   to the method <code>execute</code> and is to be stored
-     *                   in this <code>CachedRowSetImpl</code> object's connection
-     *                   property
-     */
-    private void setConnection (Connection connection) {
-        conn = connection;
-    }
-
-
-    /**
-     * Propagates all row update, insert, and delete changes to the
-     * underlying data source backing this <code>CachedRowSetImpl</code>
-     * object.
-     * <P>
-     * <b>Note</b>In the reference implementation an optimistic concurrency implementation
-     * is provided as a sample implementation of a the <code>SyncProvider</code>
-     * abstract class.
-     * <P>
-     * This method fails if any of the updates cannot be propagated back
-     * to the data source.  When it fails, the caller can assume that
-     * none of the updates are reflected in the data source.
-     * When an exception is thrown, the current row
-     * is set to the first "updated" row that resulted in an exception
-     * unless the row that caused the exception is a "deleted" row.
-     * In that case, when deleted rows are not shown, which is usually true,
-     * the current row is not affected.
-     * <P>
-     * If no <code>SyncProvider</code> is configured, the reference implementation
-     * leverages the <code>RIOptimisticProvider</code> available which provides the
-     * default and reference synchronization capabilities for disconnected
-     * <code>RowSets</code>.
-     *
-     * @throws SQLException if the cursor is on the insert row or the underlying
-     *          reference synchronization provider fails to commit the updates
-     *          to the datasource
-     * @throws SyncProviderException if an internal error occurs within the
-     *          <code>SyncProvider</code> instance during either during the
-     *          process or at any time when the <code>SyncProvider</code>
-     *          instance touches the data source.
-     * @see #acceptChanges(java.sql.Connection)
-     * @see javax.sql.RowSetWriter
-     * @see javax.sql.rowset.spi.SyncProvider
-     */
-    public void acceptChanges() throws SyncProviderException {
-        if (onInsertRow == true) {
-            throw new SyncProviderException(resBundle.handleGetObject("cachedrowsetimpl.invalidop").toString());
-        }
-
-        int saveCursorPos = cursorPos;
-        boolean success = false;
-        boolean conflict = false;
-
-        try {
-            if (rowSetWriter != null) {
-                saveCursorPos = cursorPos;
-                conflict = rowSetWriter.writeData((RowSetInternal)this);
-                cursorPos = saveCursorPos;
-            }
-
-            if ((tXWriter) && this.COMMIT_ON_ACCEPT_CHANGES) {
-                // do commit/rollback's here
-                if (!conflict) {
-                    tWriter = (TransactionalWriter)rowSetWriter;
-                    tWriter.rollback();
-                    success = false;
-                } else {
-                    tWriter = (TransactionalWriter)rowSetWriter;
-                    if (tWriter instanceof CachedRowSetWriter) {
-                        ((CachedRowSetWriter)tWriter).commit(this, updateOnInsert);
-                    } else {
-                        tWriter.commit();
-                    }
-
-                    success = true;
-                }
-            }
-
-            if (success == true) {
-                setOriginal();
-            } else if (!(success) && !(this.COMMIT_ON_ACCEPT_CHANGES)) {
-                throw new SyncProviderException(resBundle.handleGetObject("cachedrowsetimpl.accfailed").toString());
-            }
-
-        } catch (SyncProviderException spe) {
-               throw spe;
-        } catch (SQLException e) {
-            e.printStackTrace();
-            throw new SyncProviderException(e.getMessage());
-        } catch (SecurityException e) {
-            throw new SyncProviderException(e.getMessage());
-        }
-    }
-
-    /**
-     * Propagates all row update, insert, and delete changes to the
-     * data source backing this <code>CachedRowSetImpl</code> object
-     * using the given <code>Connection</code> object.
-     * <P>
-     * The reference implementation <code>RIOptimisticProvider</code>
-     * modifies its synchronization to a write back function given
-     * the updated connection
-     * The reference implementation modifies its synchronization behaviour
-     * via the <code>SyncProvider</code> to ensure the synchronization
-     * occurs according to the updated JDBC <code>Connection</code>
-     * properties.
-     *
-     * @param con a standard JDBC <code>Connection</code> object
-     * @throws SQLException if the cursor is on the insert row or the underlying
-     *                   synchronization provider fails to commit the updates
-     *                   back to the data source
-     * @see #acceptChanges
-     * @see javax.sql.RowSetWriter
-     * @see javax.sql.rowset.spi.SyncFactory
-     * @see javax.sql.rowset.spi.SyncProvider
-     */
-    public void acceptChanges(Connection con) throws SyncProviderException{
-
-      setConnection(con);
-      acceptChanges();
-
-    }
-
-    /**
-     * Restores this <code>CachedRowSetImpl</code> object to its original state,
-     * that is, its state before the last set of changes.
-     * <P>
-     * Before returning, this method moves the cursor before the first row
-     * and sends a <code>rowSetChanged</code> event to all registered
-     * listeners.
-     * @throws SQLException if an error is occurs rolling back the RowSet
-     *           state to the definied original value.
-     * @see javax.sql.RowSetListener#rowSetChanged
-     */
-    public void restoreOriginal() throws SQLException {
-        Row currentRow;
-        for (Iterator i = rvh.iterator(); i.hasNext();) {
-            currentRow = (Row)i.next();
-            if (currentRow.getInserted() == true) {
-                i.remove();
-                --numRows;
-            } else {
-                if (currentRow.getDeleted() == true) {
-                    currentRow.clearDeleted();
-                }
-                if (currentRow.getUpdated() == true) {
-                    currentRow.clearUpdated();
-                }
-            }
-        }
-        // move to before the first
-        cursorPos = 0;
-
-        // notify any listeners
-        notifyRowSetChanged();
-    }
-
-    /**
-     * Releases the current contents of this <code>CachedRowSetImpl</code>
-     * object and sends a <code>rowSetChanged</code> event object to all
-     * registered listeners.
-     *
-     * @throws SQLException if an error occurs flushing the contents of
-     *           RowSet.
-     * @see javax.sql.RowSetListener#rowSetChanged
-     */
-    public void release() throws SQLException {
-        initContainer();
-        notifyRowSetChanged();
-    }
-
-    /**
-     * Cancels deletion of the current row and notifies listeners that
-     * a row has changed.
-     * <P>
-     * Note:  This method can be ignored if deleted rows are not being shown,
-     * which is the normal case.
-     *
-     * @throws SQLException if the cursor is not on a valid row
-     */
-    public void undoDelete() throws SQLException {
-        if (getShowDeleted() == false) {
-            return;
-        }
-        // make sure we are on a row
-        checkCursor();
-
-        // don't want this to happen...
-        if (onInsertRow == true) {
-            throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.invalidcp").toString());
-        }
-
-        Row currentRow = (Row)getCurrentRow();
-        if (currentRow.getDeleted() == true) {
-            currentRow.clearDeleted();
-            --numDeleted;
-            notifyRowChanged();
-        }
-    }
-
-    /**
-     * Immediately removes the current row from this
-     * <code>CachedRowSetImpl</code> object if the row has been inserted, and
-     * also notifies listeners the a row has changed.  An exception is thrown
-     * if the row is not a row that has been inserted or the cursor is before
-     * the first row, after the last row, or on the insert row.
-     * <P>
-     * This operation cannot be undone.
-     *
-     * @throws SQLException if an error occurs,
-     *                         the cursor is not on a valid row,
-     *                         or the row has not been inserted
-     */
-    public void undoInsert() throws SQLException {
-        // make sure we are on a row
-        checkCursor();
-
-        // don't want this to happen...
-        if (onInsertRow == true) {
-            throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.invalidcp").toString());
-        }
-
-        Row currentRow = (Row)getCurrentRow();
-        if (currentRow.getInserted() == true) {
-            rvh.remove(cursorPos-1);
-            --numRows;
-            notifyRowChanged();
-        } else {
-            throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.illegalop").toString());
-        }
-    }
-
-    /**
-     * Immediately reverses the last update operation if the
-     * row has been modified. This method can be
-     * called to reverse updates on a all columns until all updates in a row have
-     * been rolled back to their originating state since the last synchronization
-     * (<code>acceptChanges</code>) or population. This method may also be called
-     * while performing updates to the insert row.
-     * <P>
-     * <code>undoUpdate</code may be called at any time during the life-time of a
-     * rowset, however after a synchronization has occurs this method has no
-     * affect until further modification to the RowSet data occurs.
-     *
-     * @throws SQLException if cursor is before the first row, after the last
-     *     row in rowset.
-     * @see #undoDelete
-     * @see #undoInsert
-     * @see java.sql.ResultSet#cancelRowUpdates
-     */
-    public void undoUpdate() throws SQLException {
-        // if on insert row, cancel the insert row
-        // make the insert row flag,
-        // cursorPos back to the current row
-        moveToCurrentRow();
-
-        // else if not on insert row
-        // call undoUpdate or undoInsert
-        undoDelete();
-
-        undoInsert();
-
-    }
-
-    //--------------------------------------------------------------------
-    // Views
-    //--------------------------------------------------------------------
-
-    /**
-     * Returns a new <code>RowSet</code> object backed by the same data as
-     * that of this <code>CachedRowSetImpl</code> object and sharing a set of cursors
-     * with it. This allows cursors to interate over a shared set of rows, providing
-     * multiple views of the underlying data.
-     *
-     * @return a <code>RowSet</code> object that is a copy of this <code>CachedRowSetImpl</code>
-     * object and shares a set of cursors with it
-     * @throws SQLException if an error occurs or cloning is
-     *                         not supported
-     * @see javax.sql.RowSetEvent
-     * @see javax.sql.RowSetListener
-     */
-    public RowSet createShared() throws SQLException {
-        RowSet clone;
-        try {
-            clone = (RowSet)clone();
-        } catch (CloneNotSupportedException ex) {
-            throw new SQLException(ex.getMessage());
-        }
-        return clone;
-    }
-
-    /**
-     * Returns a new <code>RowSet</code> object containing by the same data
-     * as this <code>CachedRowSetImpl</code> object.  This method
-     * differs from the method <code>createCopy</code> in that it throws a
-     * <code>CloneNotSupportedException</code> object instead of an
-     * <code>SQLException</code> object, as the method <code>createShared</code>
-     * does.  This <code>clone</code>
-     * method is called internally by the method <code>createShared</code>,
-     * which catches the <code>CloneNotSupportedException</code> object
-     * and in turn throws a new <code>SQLException</code> object.
-     *
-     * @return a copy of this <code>CachedRowSetImpl</code> object
-     * @throws CloneNotSupportedException if an error occurs when
-     * attempting to clone this <code>CachedRowSetImpl</code> object
-     * @see #createShared
-     */
-    protected Object clone() throws CloneNotSupportedException  {
-        return (super.clone());
-    }
-
-    /**
-     * Creates a <code>RowSet</code> object that is a deep copy of
-     * this <code>CachedRowSetImpl</code> object's data, including
-     * constraints.  Updates made
-     * on a copy are not visible to the original rowset;
-     * a copy of a rowset is completely independent from the original.
-     * <P>
-     * Making a copy saves the cost of creating an identical rowset
-     * from first principles, which can be quite expensive.
-     * For example, it can eliminate the need to query a
-     * remote database server.
-     * @return a new <code>CachedRowSet</code> object that is a deep copy
-     *           of this <code>CachedRowSet</code> object and is
-     *           completely independent from this <code>CachedRowSetImpl</code>
-     *           object.
-     * @throws SQLException if an error occurs in generating the copy of this
-     *           of the <code>CachedRowSetImpl</code>
-     * @see #createShared
-     * @see javax.sql.RowSetEvent
-     * @see javax.sql.RowSetListener
-     */
-    public CachedRowSet createCopy() throws SQLException {
-        ObjectOutputStream out;
-        ByteArrayOutputStream bOut = new ByteArrayOutputStream();
-        try {
-            out = new ObjectOutputStream(bOut);
-            out.writeObject(this);
-        } catch (IOException ex) {
-            throw new SQLException(MessageFormat.format(resBundle.handleGetObject("cachedrowsetimpl.clonefail").toString() , ex.getMessage()));
-        }
-
-        ObjectInputStream in;
-
-        try {
-            ByteArrayInputStream bIn = new ByteArrayInputStream(bOut.toByteArray());
-            in = new ObjectInputStream(bIn);
-        } catch (StreamCorruptedException ex) {
-            throw new SQLException(MessageFormat.format(resBundle.handleGetObject("cachedrowsetimpl.clonefail").toString() , ex.getMessage()));
-        } catch (IOException ex) {
-            throw new SQLException(MessageFormat.format(resBundle.handleGetObject("cachedrowsetimpl.clonefail").toString() , ex.getMessage()));
-        }
-
-        try {
-            //return ((CachedRowSet)(in.readObject()));
-            CachedRowSetImpl crsTemp = (CachedRowSetImpl)in.readObject();
-            crsTemp.resBundle = this.resBundle;
-            return ((CachedRowSet)crsTemp);
-
-        } catch (ClassNotFoundException ex) {
-            throw new SQLException(MessageFormat.format(resBundle.handleGetObject("cachedrowsetimpl.clonefail").toString() , ex.getMessage()));
-        } catch (OptionalDataException ex) {
-            throw new SQLException(MessageFormat.format(resBundle.handleGetObject("cachedrowsetimpl.clonefail").toString() , ex.getMessage()));
-        } catch (IOException ex) {
-            throw new SQLException(MessageFormat.format(resBundle.handleGetObject("cachedrowsetimpl.clonefail").toString() , ex.getMessage()));
-        }
-    }
-
-    /**
-     * Creates a <code>RowSet</code> object that is a copy of
-     * this <code>CachedRowSetImpl</code> object's table structure
-     * and the constraints only.
-     * There will be no data in the object being returned.
-     * Updates made on a copy are not visible to the original rowset.
-     * <P>
-     * This helps in getting the underlying XML schema which can
-     * be used as the basis for populating a <code>WebRowSet</code>.
-     *
-     * @return a new <code>CachedRowSet</code> object that is a copy
-     * of this <code>CachedRowSetImpl</code> object's schema and
-     * retains all the constraints on the original rowset but contains
-     * no data
-     * @throws SQLException if an error occurs in generating the copy
-     * of the <code>CachedRowSet</code> object
-     * @see #createShared
-     * @see #createCopy
-     * @see #createCopyNoConstraints
-     * @see javax.sql.RowSetEvent
-     * @see javax.sql.RowSetListener
-     */
-    public CachedRowSet createCopySchema() throws SQLException {
-        // Copy everything except data i.e all constraints
-
-        // Store the number of rows of "this"
-        // and make numRows equals zero.
-        // and make data also zero.
-        int nRows = numRows;
-        numRows = 0;
-
-        CachedRowSet crs = this.createCopy();
-
-        // reset this object back to number of rows.
-        numRows = nRows;
-
-        return crs;
-    }
-
-    /**
-     * Creates a <code>CachedRowSet</code> object that is a copy of
-     * this <code>CachedRowSetImpl</code> object's data only.
-     * All constraints set in this object will not be there
-     * in the returning object.  Updates made
-     * on a copy are not visible to the original rowset.
-     *
-     * @return a new <code>CachedRowSet</code> object that is a deep copy
-     * of this <code>CachedRowSetImpl</code> object and is
-     * completely independent from this <code>CachedRowSetImpl</code> object
-     * @throws SQLException if an error occurs in generating the copy of the
-     * of the <code>CachedRowSet</code>
-     * @see #createShared
-     * @see #createCopy
-     * @see #createCopySchema
-     * @see javax.sql.RowSetEvent
-     * @see javax.sql.RowSetListener
-     */
-    public CachedRowSet createCopyNoConstraints() throws SQLException {
-        // Copy the whole data ONLY without any constraints.
-        CachedRowSetImpl crs;
-        crs = (CachedRowSetImpl)this.createCopy();
-
-        crs.initProperties();
-        try {
-            crs.unsetMatchColumn(crs.getMatchColumnIndexes());
-        } catch(SQLException sqle) {
-            //do nothing, if the setMatchColumn is not set.
-        }
-
-        try {
-            crs.unsetMatchColumn(crs.getMatchColumnNames());
-        } catch(SQLException sqle) {
-            //do nothing, if the setMatchColumn is not set.
-        }
-
-        return crs;
-    }
-
-    /**
-     * Converts this <code>CachedRowSetImpl</code> object to a collection
-     * of tables. The sample implementation utilitizes the <code>TreeMap</code>
-     * collection type.
-     * This class guarantees that the map will be in ascending key order,
-     * sorted according to the natural order for the key's class.
-     *
-     * @return a <code>Collection</code> object consisting of tables,
-     *         each of which is a copy of a row in this
-     *         <code>CachedRowSetImpl</code> object
-     * @throws SQLException if an error occurs in generating the collection
-     * @see #toCollection(int)
-     * @see #toCollection(String)
-     * @see java.util.TreeMap
-     */
-    public Collection<?> toCollection() throws SQLException {
-
-        TreeMap<Integer, Object> tMap = new TreeMap<>();
-
-        for (int i = 0; i<numRows; i++) {
-            tMap.put(Integer.valueOf(i), rvh.get(i));
-        }
-
-        return (tMap.values());
-    }
-
-    /**
-     * Returns the specified column of this <code>CachedRowSetImpl</code> object
-     * as a <code>Collection</code> object.  This method makes a copy of the
-     * column's data and utilitizes the <code>Vector</code> to establish the
-     * collection. The <code>Vector</code> class implements a growable array
-     * objects allowing the individual components to be accessed using an
-     * an integer index similar to that of an array.
-     *
-     * @return a <code>Collection</code> object that contains the value(s)
-     *         stored in the specified column of this
-     *         <code>CachedRowSetImpl</code>
-     *         object
-     * @throws SQLException if an error occurs generated the collection; or
-     *          an invalid column is provided.
-     * @see #toCollection()
-     * @see #toCollection(String)
-     * @see java.util.Vector
-     */
-    public Collection<?> toCollection(int column) throws SQLException {
-
-        int nRows = numRows;
-        Vector<Object> vec = new Vector<>(nRows);
-
-        // create a copy
-        CachedRowSetImpl crsTemp;
-        crsTemp = (CachedRowSetImpl) this.createCopy();
-
-        while(nRows!=0) {
-            crsTemp.next();
-            vec.add(crsTemp.getObject(column));
-            nRows--;
-        }
-
-        return (Collection)vec;
-    }
-
-    /**
-     * Returns the specified column of this <code>CachedRowSetImpl</code> object
-     * as a <code>Collection</code> object.  This method makes a copy of the
-     * column's data and utilitizes the <code>Vector</code> to establish the
-     * collection. The <code>Vector</code> class implements a growable array
-     * objects allowing the individual components to be accessed using an
-     * an integer index similar to that of an array.
-     *
-     * @return a <code>Collection</code> object that contains the value(s)
-     *         stored in the specified column of this
-     *         <code>CachedRowSetImpl</code>
-     *         object
-     * @throws SQLException if an error occurs generated the collection; or
-     *          an invalid column is provided.
-     * @see #toCollection()
-     * @see #toCollection(int)
-     * @see java.util.Vector
-     */
-    public Collection<?> toCollection(String column) throws SQLException {
-        return toCollection(getColIdxByName(column));
-    }
-
-    //--------------------------------------------------------------------
-    // Advanced features
-    //--------------------------------------------------------------------
-
-
-    /**
-     * Returns the <code>SyncProvider</code> implementation being used
-     * with this <code>CachedRowSetImpl</code> implementation rowset.
-     *
-     * @return the SyncProvider used by the rowset. If not provider was
-     *          set when the rowset was instantiated, the reference
-     *          implementation (default) provider is returned.
-     * @throws SQLException if error occurs while return the
-     *          <code>SyncProvider</code> instance.
-     */
-    public SyncProvider getSyncProvider() throws SQLException {
-        return provider;
-    }
-
-    /**
-     * Sets the active <code>SyncProvider</code> and attempts to load
-     * load the new provider using the <code>SyncFactory</code> SPI.
-     *
-     * @throws SQLException if an error occurs while resetting the
-     *          <code>SyncProvider</code>.
-     */
-    public void setSyncProvider(String providerStr) throws SQLException {
-        provider =
-        (SyncProvider)SyncFactory.getInstance(providerStr);
-
-        rowSetReader = provider.getRowSetReader();
-        rowSetWriter = provider.getRowSetWriter();
-    }
-
-
-    //-----------------
-    // methods inherited from RowSet
-    //-----------------
-
-
-
-
-
-
-    //---------------------------------------------------------------------
-    // Reading and writing data
-    //---------------------------------------------------------------------
-
-    /**
-     * Populates this <code>CachedRowSetImpl</code> object with data.
-     * This form of the method uses the rowset's user, password, and url or
-     * data source name properties to create a database
-     * connection.  If properties that are needed
-     * have not been set, this method will throw an exception.
-     * <P>
-     * Another form of this method uses an existing JDBC <code>Connection</code>
-     * object instead of creating a new one; therefore, it ignores the
-     * properties used for establishing a new connection.
-     * <P>
-     * The query specified by the command property is executed to create a
-     * <code>ResultSet</code> object from which to retrieve data.
-     * The current contents of the rowset are discarded, and the
-     * rowset's metadata is also (re)set.  If there are outstanding updates,
-     * they are also ignored.
-     * <P>
-     * The method <code>execute</code> closes any database connections that it
-     * creates.
-     *
-     * @throws SQLException if an error occurs or the
-     *                         necessary properties have not been set
-     */
-    public void execute() throws SQLException {
-        execute(null);
-    }
-
-
-
-    //-----------------------------------
-    // Methods inherited from ResultSet
-    //-----------------------------------
-
-    /**
-     * Moves the cursor down one row from its current position and
-     * returns <code>true</code> if the new cursor position is a
-     * valid row.
-     * The cursor for a new <code>ResultSet</code> object is initially
-     * positioned before the first row. The first call to the method
-     * <code>next</code> moves the cursor to the first row, making it
-     * the current row; the second call makes the second row the
-     * current row, and so on.
-     *
-     * <P>If an input stream from the previous row is open, it is
-     * implicitly closed. The <code>ResultSet</code> object's warning
-     * chain is cleared when a new row is read.
-     *
-     * @return <code>true</code> if the new current row is valid;
-     *         <code>false</code> if there are no more rows
-     * @throws SQLException if an error occurs or
-     *            the cursor is not positioned in the rowset, before
-     *            the first row, or after the last row
-     */
-    public boolean next() throws SQLException {
-        /*
-         * make sure things look sane. The cursor must be
-         * positioned in the rowset or before first (0) or
-         * after last (numRows + 1)
-         */
-        if (cursorPos < 0 || cursorPos >= numRows + 1) {
-            throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.invalidcp").toString());
-        }
-        // now move and notify
-        boolean ret = this.internalNext();
-        notifyCursorMoved();
-
-        return ret;
-    }
-
-    /**
-     * Moves this <code>CachedRowSetImpl</code> object's cursor to the next
-     * row and returns <code>true</code> if the cursor is still in the rowset;
-     * returns <code>false</code> if the cursor has moved to the position after
-     * the last row.
-     * <P>
-     * This method handles the cases where the cursor moves to a row that
-     * has been deleted.
-     * If this rowset shows deleted rows and the cursor moves to a row
-     * that has been deleted, this method moves the cursor to the next
-     * row until the cursor is on a row that has not been deleted.
-     * <P>
-     * The method <code>internalNext</code> is called by methods such as
-     * <code>next</code>, <code>absolute</code>, and <code>relative</code>,
-     * and, as its name implies, is only called internally.
-     * <p>
-     * This is a implementation only method and is not required as a standard
-     * implementation of the <code>CachedRowSet</code> interface.
-     *
-     * @return <code>true</code> if the cursor is on a valid row in this
-     *         rowset; <code>false</code> if it is after the last row
-     * @throws SQLException if an error occurs
-     */
-    protected boolean internalNext() throws SQLException {
-        boolean ret = false;
-
-        do {
-            if (cursorPos < numRows) {
-                ++cursorPos;
-                ret = true;
-            } else if (cursorPos == numRows) {
-                // increment to after last
-                ++cursorPos;
-                ret = false;
-                break;
-            }
-        } while ((getShowDeleted() == false) && (rowDeleted() == true));
-
-        /* each call to internalNext may increment cursorPos multiple
-         * times however, the absolutePos only increments once per call.
-         */
-        if (ret == true)
-            absolutePos++;
-        else
-            absolutePos = 0;
-
-        return ret;
-    }
-
-    /**
-     * Closes this <code>CachedRowSetImpl</code> objecy and releases any resources
-     * it was using.
-     *
-     * @throws SQLException if an error occurs when releasing any resources in use
-     * by this <code>CachedRowSetImpl</code> object
-     */
-    public void close() throws SQLException {
-
-        // close all data structures holding
-        // the disconnected rowset
-
-        cursorPos = 0;
-        absolutePos = 0;
-        numRows = 0;
-        numDeleted = 0;
-
-        // set all insert(s), update(s) & delete(s),
-        // if at all, to their initial values.
-        initProperties();
-
-        // clear the vector of it's present contents
-        rvh.clear();
-
-        // this will make it eligible for gc
-        // rvh = null;
-    }
-
-    /**
-     * Reports whether the last column read was SQL <code>NULL</code>.
-     * Note that you must first call the method <code>getXXX</code>
-     * on a column to try to read its value and then call the method
-     * <code>wasNull</code> to determine whether the value was
-     * SQL <code>NULL</code>.
-     *
-     * @return <code>true</code> if the value in the last column read
-     *         was SQL <code>NULL</code>; <code>false</code> otherwise
-     * @throws SQLException if an error occurs
-     */
-    public boolean wasNull() throws SQLException {
-        return lastValueNull;
-    }
-
-    /**
-     * Sets the field <code>lastValueNull</code> to the given
-     * <code>boolean</code> value.
-     *
-     * @param value <code>true</code> to indicate that the value of
-     *        the last column read was SQL <code>NULL</code>;
-     *        <code>false</code> to indicate that it was not
-     */
-    private void setLastValueNull(boolean value) {
-        lastValueNull = value;
-    }
-
-    // Methods for accessing results by column index
-
-    /**
-     * Checks to see whether the given index is a valid column number
-     * in this <code>CachedRowSetImpl</code> object and throws
-     * an <code>SQLException</code> if it is not. The index is out of bounds
-     * if it is less than <code>1</code> or greater than the number of
-     * columns in this rowset.
-     * <P>
-     * This method is called internally by the <code>getXXX</code> and
-     * <code>updateXXX</code> methods.
-     *
-     * @param idx the number of a column in this <code>CachedRowSetImpl</code>
-     *            object; must be between <code>1</code> and the number of
-     *            rows in this rowset
-     * @throws SQLException if the given index is out of bounds
-     */
-    private void checkIndex(int idx) throws SQLException {
-        if (idx < 1 || idx > RowSetMD.getColumnCount()) {
-            throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.invalidcol").toString());
-        }
-    }
-
-    /**
-     * Checks to see whether the cursor for this <code>CachedRowSetImpl</code>
-     * object is on a row in the rowset and throws an
-     * <code>SQLException</code> if it is not.
-     * <P>
-     * This method is called internally by <code>getXXX</code> methods, by
-     * <code>updateXXX</code> methods, and by methods that update, insert,
-     * or delete a row or that cancel a row update, insert, or delete.
-     *
-     * @throws SQLException if the cursor for this <code>CachedRowSetImpl</code>
-     *         object is not on a valid row
-     */
-    private void checkCursor() throws SQLException {
-        if (isAfterLast() == true || isBeforeFirst() == true) {
-            throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.invalidcp").toString());
-        }
-    }
-
-    /**
-     * Returns the column number of the column with the given name in this
-     * <code>CachedRowSetImpl</code> object.  This method throws an
-     * <code>SQLException</code> if the given name is not the name of
-     * one of the columns in this rowset.
-     *
-     * @param name a <code>String</code> object that is the name of a column in
-     *              this <code>CachedRowSetImpl</code> object
-     * @throws SQLException if the given name does not match the name of one of
-     *         the columns in this rowset
-     */
-    private int getColIdxByName(String name) throws SQLException {
-        RowSetMD = (RowSetMetaDataImpl)this.getMetaData();
-        int cols = RowSetMD.getColumnCount();
-
-        for (int i=1; i <= cols; ++i) {
-            String colName = RowSetMD.getColumnName(i);
-            if (colName != null)
-                if (name.equalsIgnoreCase(colName))
-                    return (i);
-                else
-                    continue;
-        }
-        throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.invalcolnm").toString());
-
-    }
-
-    /**
-     * Returns the insert row or the current row of this
-     * <code>CachedRowSetImpl</code>object.
-     *
-     * @return the <code>Row</code> object on which this <code>CachedRowSetImpl</code>
-     * objects's cursor is positioned
-     */
-    protected BaseRow getCurrentRow() {
-        if (onInsertRow == true) {
-            return (BaseRow)insertRow;
-        } else {
-            return (BaseRow)(rvh.get(cursorPos - 1));
-        }
-    }
-
-    /**
-     * Removes the row on which the cursor is positioned.
-     * <p>
-     * This is a implementation only method and is not required as a standard
-     * implementation of the <code>CachedRowSet</code> interface.
-     *
-     * @throws SQLException if the cursor is positioned on the insert
-     *            row
-     */
-    protected void removeCurrentRow() {
-        ((Row)getCurrentRow()).setDeleted();
-        rvh.remove(cursorPos - 1);
-        --numRows;
-    }
-
-
-    /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>CachedRowSetImpl</code> object as a
-     * <code>String</code> object.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in the rowset
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     *         result is <code>null</code>
-     * @throws SQLException if (1) the given column index is out of bounds,
-     * (2) the cursor is not on one of this rowset's rows or its
-     * insert row, or (3) the designated column does not store an
-     * SQL <code>TINYINT, SMALLINT, INTEGER, BIGINT, REAL,
-     * FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT, <b>CHAR</b>, <b>VARCHAR</b></code>
-     * or <code>LONGVARCHAR</code> value. The bold SQL type designates the
-     * recommended return type.
-     */
-    public String getString(int columnIndex) throws SQLException {
-        Object value;
-
-        // sanity check.
-        checkIndex(columnIndex);
-        // make sure the cursor is on a valid row
-        checkCursor();
-
-        setLastValueNull(false);
-        value = getCurrentRow().getColumnObject(columnIndex);
-
-        // check for SQL NULL
-        if (value == null) {
-            setLastValueNull(true);
-            return null;
-        }
-
-        return value.toString();
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>CachedRowSetImpl</code> object as a
-     * <code>boolean</code> value.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in the rowset
-     * @return the column value as a <code>boolean</code> in the Java progamming language;
-     *        if the value is SQL <code>NULL</code>, the result is <code>false</code>
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) the designated column does not store an
-     *            SQL <code>BOOLEAN</code> value
-     * @see #getBoolean(String)
-     */
-    public boolean getBoolean(int columnIndex) throws SQLException {
-        Object value;
-
-        // sanity check.
-        checkIndex(columnIndex);
-        // make sure the cursor is on a valid row
-        checkCursor();
-
-        setLastValueNull(false);
-        value = getCurrentRow().getColumnObject(columnIndex);
-
-        // check for SQL NULL
-        if (value == null) {
-            setLastValueNull(true);
-            return false;
-        }
-
-        // check for Boolean...
-        if (value instanceof Boolean) {
-            return ((Boolean)value).booleanValue();
-        }
-
-        // convert to a Double and compare to zero
-        try {
-            Double d = new Double(value.toString());
-            if (d.compareTo(new Double((double)0)) == 0) {
-                return false;
-            } else {
-                return true;
-            }
-        } catch (NumberFormatException ex) {
-            throw new SQLException(MessageFormat.format(resBundle.handleGetObject("cachedrowsetimpl.boolfail").toString(),
-                  new Object[] {value.toString().trim(), columnIndex}));
-        }
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>CachedRowSetImpl</code> object as a
-     * <code>byte</code> value.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in the rowset
-     * @return the column value as a <code>byte</code> in the Java programming
-     * language; if the value is SQL <code>NULL</code>, the result is <code>0</code>
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) the designated column does not store an
-     *            SQL <code><b>TINYINT</b>, SMALLINT, INTEGER, BIGINT, REAL,
-     *            FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT, CHAR, VARCHAR</code>
-     *            or <code>LONGVARCHAR</code> value. The bold SQL type
-     *            designates the recommended return type.
-     * @see #getByte(String)
-     */
-    public byte getByte(int columnIndex) throws SQLException {
-        Object value;
-
-        // sanity check.
-        checkIndex(columnIndex);
-        // make sure the cursor is on a valid row
-        checkCursor();
-
-        setLastValueNull(false);
-        value = getCurrentRow().getColumnObject(columnIndex);
-
-        // check for SQL NULL
-        if (value == null) {
-            setLastValueNull(true);
-            return (byte)0;
-        }
-        try {
-            return ((Byte.valueOf(value.toString())).byteValue());
-        } catch (NumberFormatException ex) {
-            throw new SQLException(MessageFormat.format(resBundle.handleGetObject("cachedrowsetimpl.bytefail").toString(),
-                  new Object[] {value.toString().trim(), columnIndex}));
-        }
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>CachedRowSetImpl</code> object as a
-     * <code>short</code> value.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in the rowset
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     *         result is <code>0</code>
-     * @throws SQLException if (1) the given column index is out of bounds,
-     * (2) the cursor is not on one of this rowset's rows or its
-     * insert row, or (3) the designated column does not store an
-     * SQL <code>TINYINT, <b>SMALLINT</b>, INTEGER, BIGINT, REAL
-     * FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT, CHAR, VARCHAR</code>
-     * or <code>LONGVARCHAR</code> value. The bold SQL type designates the
-     * recommended return type.
-     * @see #getShort(String)
-     */
-    public short getShort(int columnIndex) throws SQLException {
-        Object value;
-
-        // sanity check.
-        checkIndex(columnIndex);
-        // make sure the cursor is on a valid row
-        checkCursor();
-
-        setLastValueNull(false);
-        value = getCurrentRow().getColumnObject(columnIndex);
-
-        // check for SQL NULL
-        if (value == null) {
-            setLastValueNull(true);
-            return (short)0;
-        }
-
-        try {
-            return ((Short.valueOf(value.toString().trim())).shortValue());
-        } catch (NumberFormatException ex) {
-            throw new SQLException(MessageFormat.format(resBundle.handleGetObject("cachedrowsetimpl.shortfail").toString(),
-                  new Object[] {value.toString().trim(), columnIndex}));
-        }
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>CachedRowSetImpl</code> object as an
-     * <code>int</code> value.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in the rowset
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     *         result is <code>0</code>
-     * @throws SQLException if (1) the given column index is out of bounds,
-     * (2) the cursor is not on one of this rowset's rows or its
-     * insert row, or (3) the designated column does not store an
-     * SQL <code>TINYINT, SMALLINT, <b>INTEGER</b>, BIGINT, REAL
-     * FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT, CHAR, VARCHAR</code>
-     * or <code>LONGVARCHAR</code> value. The bold SQL type designates the
-     * recommended return type.
-     */
-    public int getInt(int columnIndex) throws SQLException {
-        Object value;
-
-        // sanity check.
-        checkIndex(columnIndex);
-        // make sure the cursor is on a valid row
-        checkCursor();
-
-        setLastValueNull(false);
-        value = getCurrentRow().getColumnObject(columnIndex);
-
-        // check for SQL NULL
-        if (value == null) {
-            setLastValueNull(true);
-            return (int)0;
-        }
-
-        try {
-            return ((Integer.valueOf(value.toString().trim())).intValue());
-        } catch (NumberFormatException ex) {
-            throw new SQLException(MessageFormat.format(resBundle.handleGetObject("cachedrowsetimpl.intfail").toString(),
-                  new Object[] {value.toString().trim(), columnIndex}));
-        }
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>CachedRowSetImpl</code> object as a
-     * <code>long</code> value.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in the rowset
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     *         result is <code>0</code>
-     * @throws SQLException if (1) the given column index is out of bounds,
-     * (2) the cursor is not on one of this rowset's rows or its
-     * insert row, or (3) the designated column does not store an
-     * SQL <code>TINYINT, SMALLINT, INTEGER, <b>BIGINT</b>, REAL
-     * FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT, CHAR, VARCHAR</code>
-     * or <code>LONGVARCHAR</code> value. The bold SQL type designates the
-     * recommended return type.
-     * @see #getLong(String)
-     */
-    public long getLong(int columnIndex) throws SQLException {
-        Object value;
-
-        // sanity check.
-        checkIndex(columnIndex);
-        // make sure the cursor is on a valid row
-        checkCursor();
-
-        setLastValueNull(false);
-        value = getCurrentRow().getColumnObject(columnIndex);
-
-        // check for SQL NULL
-        if (value == null) {
-            setLastValueNull(true);
-            return (long)0;
-        }
-        try {
-            return ((Long.valueOf(value.toString().trim())).longValue());
-        } catch (NumberFormatException ex) {
-            throw new SQLException(MessageFormat.format(resBundle.handleGetObject("cachedrowsetimpl.longfail").toString(),
-                  new Object[] {value.toString().trim(), columnIndex}));
-        }
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>CachedRowSetImpl</code> object as a
-     * <code>float</code> value.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in the rowset
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     *         result is <code>0</code>
-     * @throws SQLException if (1) the given column index is out of bounds,
-     * (2) the cursor is not on one of this rowset's rows or its
-     * insert row, or (3) the designated column does not store an
-     * SQL <code>TINYINT, SMALLINT, INTEGER, BIGINT, <b>REAL</b>,
-     * FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT, CHAR, VARCHAR</code>
-     * or <code>LONGVARCHAR</code> value. The bold SQL type designates the
-     * recommended return type.
-     * @see #getFloat(String)
-     */
-    public float getFloat(int columnIndex) throws SQLException {
-        Object value;
-
-        // sanity check.
-        checkIndex(columnIndex);
-        // make sure the cursor is on a valid row
-        checkCursor();
-
-        setLastValueNull(false);
-        value = getCurrentRow().getColumnObject(columnIndex);
-
-        // check for SQL NULL
-        if (value == null) {
-            setLastValueNull(true);
-            return (float)0;
-        }
-        try {
-            return ((new Float(value.toString())).floatValue());
-        } catch (NumberFormatException ex) {
-            throw new SQLException(MessageFormat.format(resBundle.handleGetObject("cachedrowsetimpl.floatfail").toString(),
-                  new Object[] {value.toString().trim(), columnIndex}));
-        }
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>CachedRowSetImpl</code> object as a
-     * <code>double</code> value.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in the rowset
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     *         result is <code>0</code>
-     * @throws SQLException if (1) the given column index is out of bounds,
-     * (2) the cursor is not on one of this rowset's rows or its
-     * insert row, or (3) the designated column does not store an
-     * SQL <code>TINYINT, SMALLINT, INTEGER, BIGINT, REAL,
-     * <b>FLOAT</b>, <b>DOUBLE</b>, DECIMAL, NUMERIC, BIT, CHAR, VARCHAR</code>
-     * or <code>LONGVARCHAR</code> value. The bold SQL type designates the
-     * recommended return type.
-     * @see #getDouble(String)
-     *
-     */
-    public double getDouble(int columnIndex) throws SQLException {
-        Object value;
-
-        // sanity check.
-        checkIndex(columnIndex);
-        // make sure the cursor is on a valid row
-        checkCursor();
-
-        setLastValueNull(false);
-        value = getCurrentRow().getColumnObject(columnIndex);
-
-        // check for SQL NULL
-        if (value == null) {
-            setLastValueNull(true);
-            return (double)0;
-        }
-        try {
-            return ((new Double(value.toString().trim())).doubleValue());
-        } catch (NumberFormatException ex) {
-            throw new SQLException(MessageFormat.format(resBundle.handleGetObject("cachedrowsetimpl.doublefail").toString(),
-                  new Object[] {value.toString().trim(), columnIndex}));
-        }
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>CachedRowSetImpl</code> object as a
-     * <code>java.math.BigDecimal</code> object.
-     * <P>
-     * This method is deprecated; use the version of <code>getBigDecimal</code>
-     * that does not take a scale parameter and returns a value with full
-     * precision.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in the rowset
-     * @param scale the number of digits to the right of the decimal point in the
-     *        value returned
-     * @return the column value with the specified number of digits to the right
-     *         of the decimal point; if the value is SQL <code>NULL</code>, the
-     *         result is <code>null</code>
-     * @throws SQLException if the given column index is out of bounds,
-     *            the cursor is not on a valid row, or this method fails
-     * @deprecated
-     */
-    public BigDecimal getBigDecimal(int columnIndex, int scale) throws SQLException {
-        Object value;
-        BigDecimal bDecimal, retVal;
-
-        // sanity check.
-        checkIndex(columnIndex);
-        // make sure the cursor is on a valid row
-        checkCursor();
-
-        setLastValueNull(false);
-        value = getCurrentRow().getColumnObject(columnIndex);
-
-        // check for SQL NULL
-        if (value == null) {
-            setLastValueNull(true);
-            return (new BigDecimal(0));
-        }
-
-        bDecimal = this.getBigDecimal(columnIndex);
-
-        retVal = bDecimal.setScale(scale);
-
-        return retVal;
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>CachedRowSetImpl</code> object as a
-     * <code>byte</code> array value.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in the rowset
-     * @return the column value as a <code>byte</code> array in the Java programming
-     * language; if the value is SQL <code>NULL</code>, the
-     * result is <code>null</code>
-     *
-     * @throws SQLException if (1) the given column index is out of bounds,
-     * (2) the cursor is not on one of this rowset's rows or its
-     * insert row, or (3) the designated column does not store an
-     * SQL <code><b>BINARY</b>, <b>VARBINARY</b> or
-     * LONGVARBINARY</code> value.
-     * The bold SQL type designates the recommended return type.
-     * @see #getBytes(String)
-     */
-    public byte[] getBytes(int columnIndex) throws SQLException {
-        // sanity check.
-        checkIndex(columnIndex);
-        // make sure the cursor is on a valid row
-        checkCursor();
-
-        if (isBinary(RowSetMD.getColumnType(columnIndex)) == false) {
-            throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.dtypemismt").toString());
-        }
-
-        return (byte[])(getCurrentRow().getColumnObject(columnIndex));
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>CachedRowSetImpl</code> object as a
-     * <code>java.sql.Date</code> object.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in the rowset
-     * @return the column value as a <code>java.sql.Data</code> object; if
-     *        the value is SQL <code>NULL</code>, the
-     *        result is <code>null</code>
-     * @throws SQLException if the given column index is out of bounds,
-     *            the cursor is not on a valid row, or this method fails
-     */
-    public java.sql.Date getDate(int columnIndex) throws SQLException {
-        Object value;
-
-        // sanity check.
-        checkIndex(columnIndex);
-        // make sure the cursor is on a valid row
-        checkCursor();
-
-        setLastValueNull(false);
-        value = getCurrentRow().getColumnObject(columnIndex);
-
-        // check for SQL NULL
-        if (value == null) {
-            setLastValueNull(true);
-            return null;
-        }
-
-        /*
-         * The object coming back from the db could be
-         * a date, a timestamp, or a char field variety.
-         * If it's a date type return it, a timestamp
-         * we turn into a long and then into a date,
-         * char strings we try to parse. Yuck.
-         */
-        switch (RowSetMD.getColumnType(columnIndex)) {
-            case java.sql.Types.DATE: {
-                long sec = ((java.sql.Date)value).getTime();
-                return new java.sql.Date(sec);
-            }
-            case java.sql.Types.TIMESTAMP: {
-                long sec = ((java.sql.Timestamp)value).getTime();
-                return new java.sql.Date(sec);
-            }
-            case java.sql.Types.CHAR:
-            case java.sql.Types.VARCHAR:
-            case java.sql.Types.LONGVARCHAR: {
-                try {
-                    DateFormat df = DateFormat.getDateInstance();
-                    return ((java.sql.Date)(df.parse(value.toString())));
-                } catch (ParseException ex) {
-                    throw new SQLException(MessageFormat.format(resBundle.handleGetObject("cachedrowsetimpl.datefail").toString(),
-                        new Object[] {value.toString().trim(), columnIndex}));
-                }
-            }
-            default: {
-                throw new SQLException(MessageFormat.format(resBundle.handleGetObject("cachedrowsetimpl.datefail").toString(),
-                        new Object[] {value.toString().trim(), columnIndex}));
-            }
-        }
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>CachedRowSetImpl</code> object as a
-     * <code>java.sql.Time</code> object.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in the rowset
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     *         result is <code>null</code>
-     * @throws SQLException if the given column index is out of bounds,
-     *         the cursor is not on a valid row, or this method fails
-     */
-    public java.sql.Time getTime(int columnIndex) throws SQLException {
-        Object value;
-
-        // sanity check.
-        checkIndex(columnIndex);
-        // make sure the cursor is on a valid row
-        checkCursor();
-
-        setLastValueNull(false);
-        value = getCurrentRow().getColumnObject(columnIndex);
-
-        // check for SQL NULL
-        if (value == null) {
-            setLastValueNull(true);
-            return null;
-        }
-
-        /*
-         * The object coming back from the db could be
-         * a date, a timestamp, or a char field variety.
-         * If it's a date type return it, a timestamp
-         * we turn into a long and then into a date,
-         * char strings we try to parse. Yuck.
-         */
-        switch (RowSetMD.getColumnType(columnIndex)) {
-            case java.sql.Types.TIME: {
-                return (java.sql.Time)value;
-            }
-            case java.sql.Types.TIMESTAMP: {
-                long sec = ((java.sql.Timestamp)value).getTime();
-                return new java.sql.Time(sec);
-            }
-            case java.sql.Types.CHAR:
-            case java.sql.Types.VARCHAR:
-            case java.sql.Types.LONGVARCHAR: {
-                try {
-                    DateFormat tf = DateFormat.getTimeInstance();
-                    return ((java.sql.Time)(tf.parse(value.toString())));
-                } catch (ParseException ex) {
-                    throw new SQLException(MessageFormat.format(resBundle.handleGetObject("cachedrowsetimpl.timefail").toString(),
-                        new Object[] {value.toString().trim(), columnIndex}));
-                }
-            }
-            default: {
-                throw new SQLException(MessageFormat.format(resBundle.handleGetObject("cachedrowsetimpl.timefail").toString(),
-                        new Object[] {value.toString().trim(), columnIndex}));
-            }
-        }
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>CachedRowSetImpl</code> object as a
-     * <code>java.sql.Timestamp</code> object.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in the rowset
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     *         result is <code>null</code>
-     * @throws SQLException if the given column index is out of bounds,
-     *            the cursor is not on a valid row, or this method fails
-     */
-    public java.sql.Timestamp getTimestamp(int columnIndex) throws SQLException {
-        Object value;
-
-        // sanity check.
-        checkIndex(columnIndex);
-        // make sure the cursor is on a valid row
-        checkCursor();
-
-        setLastValueNull(false);
-        value = getCurrentRow().getColumnObject(columnIndex);
-
-        // check for SQL NULL
-        if (value == null) {
-            setLastValueNull(true);
-            return null;
-        }
-
-        /*
-         * The object coming back from the db could be
-         * a date, a timestamp, or a char field variety.
-         * If it's a date type return it; a timestamp
-         * we turn into a long and then into a date;
-         * char strings we try to parse. Yuck.
-         */
-        switch (RowSetMD.getColumnType(columnIndex)) {
-            case java.sql.Types.TIMESTAMP: {
-                return (java.sql.Timestamp)value;
-            }
-            case java.sql.Types.TIME: {
-                long sec = ((java.sql.Time)value).getTime();
-                return new java.sql.Timestamp(sec);
-            }
-            case java.sql.Types.DATE: {
-                long sec = ((java.sql.Date)value).getTime();
-                return new java.sql.Timestamp(sec);
-            }
-            case java.sql.Types.CHAR:
-            case java.sql.Types.VARCHAR:
-            case java.sql.Types.LONGVARCHAR: {
-                try {
-                    DateFormat tf = DateFormat.getTimeInstance();
-                    return ((java.sql.Timestamp)(tf.parse(value.toString())));
-                } catch (ParseException ex) {
-                    throw new SQLException(MessageFormat.format(resBundle.handleGetObject("cachedrowsetimpl.timefail").toString(),
-                        new Object[] {value.toString().trim(), columnIndex}));
-                }
-            }
-            default: {
-                throw new SQLException(MessageFormat.format(resBundle.handleGetObject("cachedrowsetimpl.timefail").toString(),
-                        new Object[] {value.toString().trim(), columnIndex}));
-            }
-        }
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row of this
-     * <code>CachedRowSetImpl</code> object as a <code>java.io.InputStream</code>
-     * object.
-     *
-     * A column value can be retrieved as a stream of ASCII characters
-     * and then read in chunks from the stream.  This method is particularly
-     * suitable for retrieving large <code>LONGVARCHAR</code> values.  The JDBC
-     * driver will do any necessary conversion from the database format into ASCII.
-     *
-     * <P><B>Note:</B> All the data in the returned stream must be
-     * read prior to getting the value of any other column. The next
-     * call to a get method implicitly closes the stream. . Also, a
-     * stream may return <code>0</code> for <code>CachedRowSetImpl.available()</code>
-     * whether there is data available or not.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @return a Java input stream that delivers the database column value
-     *         as a stream of one-byte ASCII characters.  If the value is SQL
-     *         <code>NULL</code>, the result is <code>null</code>.
-     * @throws SQLException if (1) the given column index is out of bounds,
-     * (2) the cursor is not on one of this rowset's rows or its
-     * insert row, or (3) the designated column does not store an
-     * SQL <code>CHAR, VARCHAR</code>, <code><b>LONGVARCHAR</b></code>
-     * <code>BINARY, VARBINARY</code> or <code>LONGVARBINARY</code> value. The
-     * bold SQL type designates the recommended return types that this method is
-     * used to retrieve.
-     * @see #getAsciiStream(String)
-     */
-    public java.io.InputStream getAsciiStream(int columnIndex) throws SQLException {
-        Object value;
-
-        // always free an old stream
-        asciiStream = null;
-
-        // sanity check
-        checkIndex(columnIndex);
-        //make sure the cursor is on a vlid row
-        checkCursor();
-
-        value =  getCurrentRow().getColumnObject(columnIndex);
-        if (value == null) {
-            lastValueNull = true;
-            return null;
-        }
-
-        try {
-            if (isString(RowSetMD.getColumnType(columnIndex))) {
-                asciiStream = new ByteArrayInputStream(((String)value).getBytes("ASCII"));
-            } else {
-                throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.dtypemismt").toString());
-            }
-        } catch (java.io.UnsupportedEncodingException ex) {
-            throw new SQLException(ex.getMessage());
-        }
-
-        return (java.io.InputStream)asciiStream;
-    }
-
-    /**
-     * A column value can be retrieved as a stream of Unicode characters
-     * and then read in chunks from the stream.  This method is particularly
-     * suitable for retrieving large LONGVARCHAR values.  The JDBC driver will
-     * do any necessary conversion from the database format into Unicode.
-     *
-     * <P><B>Note:</B> All the data in the returned stream must be
-     * read prior to getting the value of any other column. The next
-     * call to a get method implicitly closes the stream. . Also, a
-     * stream may return 0 for available() whether there is data
-     * available or not.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @return a Java input stream that delivers the database column value
-     * as a stream of two byte Unicode characters.  If the value is SQL NULL
-     * then the result is null.
-     * @throws SQLException if an error occurs
-     * @deprecated
-     */
-    public java.io.InputStream getUnicodeStream(int columnIndex) throws SQLException {
-        // always free an old stream
-        unicodeStream = null;
-
-        // sanity check.
-        checkIndex(columnIndex);
-        // make sure the cursor is on a valid row
-        checkCursor();
-
-        if (isBinary(RowSetMD.getColumnType(columnIndex)) == false &&
-        isString(RowSetMD.getColumnType(columnIndex)) == false) {
-            throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.dtypemismt").toString());
-        }
-
-        Object value = getCurrentRow().getColumnObject(columnIndex);
-        if (value == null) {
-            lastValueNull = true;
-            return null;
-        }
-
-        unicodeStream = new StringBufferInputStream(value.toString());
-
-        return (java.io.InputStream)unicodeStream;
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row of this
-     * <code>CachedRowSetImpl</code> object as a <code>java.io.InputStream</code>
-     * object.
-     * <P>
-     * A column value can be retrieved as a stream of uninterpreted bytes
-     * and then read in chunks from the stream.  This method is particularly
-     * suitable for retrieving large <code>LONGVARBINARY</code> values.
-     *
-     * <P><B>Note:</B> All the data in the returned stream must be
-     * read prior to getting the value of any other column. The next
-     * call to a get method implicitly closes the stream. Also, a
-     * stream may return <code>0</code> for
-     * <code>CachedRowSetImpl.available()</code> whether there is data
-     * available or not.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     * is <code>2</code>, and so on; must be <code>1</code> or larger
-     * and equal to or less than the number of columns in the rowset
-     * @return a Java input stream that delivers the database column value
-     * as a stream of uninterpreted bytes.  If the value is SQL <code>NULL</code>
-     * then the result is <code>null</code>.
-     * @throws SQLException if (1) the given column index is out of bounds,
-     * (2) the cursor is not on one of this rowset's rows or its
-     * insert row, or (3) the designated column does not store an
-     * SQL <code>BINARY, VARBINARY</code> or <code><b>LONGVARBINARY</b></code>
-     * The bold type indicates the SQL type that this method is recommened
-     * to retrieve.
-     * @see #getBinaryStream(String)
-     */
-    public java.io.InputStream getBinaryStream(int columnIndex) throws SQLException {
-
-        // always free an old stream
-        binaryStream = null;
-
-        // sanity check.
-        checkIndex(columnIndex);
-        // make sure the cursor is on a valid row
-        checkCursor();
-
-        if (isBinary(RowSetMD.getColumnType(columnIndex)) == false) {
-            throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.dtypemismt").toString());
-        }
-
-        Object value = getCurrentRow().getColumnObject(columnIndex);
-        if (value == null) {
-            lastValueNull = true;
-            return null;
-        }
-
-        binaryStream = new ByteArrayInputStream((byte[])value);
-
-        return (java.io.InputStream)binaryStream;
-
-    }
-
-
-    // Methods for accessing results by column name
-
-    /**
-     * Retrieves the value stored in the designated column
-     * of the current row as a <code>String</code> object.
-     *
-     * @param columnName a <code>String</code> object giving the SQL name of
-     *        a column in this <code>CachedRowSetImpl</code> object
-     * @return the column value; if the value is SQL <code>NULL</code>,
-     *         the result is <code>null</code>
-     * @throws SQLException if (1) the given column name is not the name of
-     * a column in this rowset, (2) the cursor is not on one of
-     * this rowset's rows or its insert row, or (3) the designated
-     * column does not store an SQL <code>TINYINT, SMALLINT, INTEGER
-     * BIGINT, REAL, FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT, <b>CHAR</b>,
-     * <b>VARCHAR</b></code> or <code>LONGVARCHAR<</code> value. The bold SQL type
-     * designates the recommended return type.
-     */
-    public String getString(String columnName) throws SQLException {
-        return getString(getColIdxByName(columnName));
-    }
-
-    /**
-     * Retrieves the value stored in the designated column
-     * of the current row as a <code>boolean</code> value.
-     *
-     * @param columnName a <code>String</code> object giving the SQL name of
-     *        a column in this <code>CachedRowSetImpl</code> object
-     * @return the column value as a <code>boolean</code> in the Java programming
-     *        language; if the value is SQL <code>NULL</code>,
-     *        the result is <code>false</code>
-     * @throws SQLException if (1) the given column name is not the name of
-     *            a column in this rowset, (2) the cursor is not on one of
-     *            this rowset's rows or its insert row, or (3) the designated
-     *            column does not store an SQL <code>BOOLEAN</code> value
-     * @see #getBoolean(int)
-     */
-    public boolean getBoolean(String columnName) throws SQLException {
-        return getBoolean(getColIdxByName(columnName));
-    }
-
-    /**
-     * Retrieves the value stored in the designated column
-     * of the current row as a <code>byte</code> value.
-     *
-     * @param columnName a <code>String</code> object giving the SQL name of
-     *        a column in this <code>CachedRowSetImpl</code> object
-     * @return the column value as a <code>byte</code> in the Java programming
-     * language; if the value is SQL <code>NULL</code>, the result is <code>0</code>
-     * @throws SQLException if (1) the given column name is not the name of
-     * a column in this rowset, (2) the cursor is not on one of
-     * this rowset's rows or its insert row, or (3) the designated
-     * column does not store an SQL <code><B>TINYINT</B>, SMALLINT, INTEGER,
-     * BIGINT, REAL, FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT, CHAR,
-     * VARCHAR</code> or <code>LONGVARCHAR</code> value. The
-     * bold type designates the recommended return type
-     */
-    public byte getByte(String columnName) throws SQLException {
-        return getByte(getColIdxByName(columnName));
-    }
-
-    /**
-     * Retrieves the value stored in the designated column
-     * of the current row as a <code>short</code> value.
-     *
-     * @param columnName a <code>String</code> object giving the SQL name of
-     *        a column in this <code>CachedRowSetImpl</code> object
-     * @return the column value; if the value is SQL <code>NULL</code>,
-     *         the result is <code>0</code>
-     * @throws SQLException if (1) the given column name is not the name of
-     * a column in this rowset, (2) the cursor is not on one of
-     * this rowset's rows or its insert row, or (3) the designated
-     * column does not store an SQL <code>TINYINT, <b>SMALLINT</b>, INTEGER
-     * BIGINT, REAL, FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT, CHAR,
-     * VARCHAR</code> or <code>LONGVARCHAR</code> value. The bold SQL type
-     * designates the recommended return type.
-     * @see #getShort(int)
-     */
-    public short getShort(String columnName) throws SQLException {
-        return getShort(getColIdxByName(columnName));
-    }
-
-    /**
-     * Retrieves the value stored in the designated column
-     * of the current row as an <code>int</code> value.
-     *
-     * @param columnName a <code>String</code> object giving the SQL name of
-     *        a column in this <code>CachedRowSetImpl</code> object
-     * @return the column value; if the value is SQL <code>NULL</code>,
-     *         the result is <code>0</code>
-     * @throws SQLException if (1) the given column name is not the name
-     * of a column in this rowset,
-     * (2) the cursor is not on one of this rowset's rows or its
-     * insert row, or (3) the designated column does not store an
-     * SQL <code>TINYINT, SMALLINT, <b>INTEGER</b>, BIGINT, REAL
-     * FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT, CHAR, VARCHAR</code>
-     * or <code>LONGVARCHAR</code> value. The bold SQL type designates the
-     * recommended return type.
-     */
-    public int getInt(String columnName) throws SQLException {
-        return getInt(getColIdxByName(columnName));
-    }
-
-    /**
-     * Retrieves the value stored in the designated column
-     * of the current row as a <code>long</code> value.
-     *
-     * @param columnName a <code>String</code> object giving the SQL name of
-     *        a column in this <code>CachedRowSetImpl</code> object
-     * @return the column value; if the value is SQL <code>NULL</code>,
-     *         the result is <code>0</code>
-     * @throws SQLException if (1) the given column name is not the name of
-     * a column in this rowset, (2) the cursor is not on one of
-     * this rowset's rows or its insert row, or (3) the designated
-     * column does not store an SQL <code>TINYINT, SMALLINT, INTEGER
-     * <b>BIGINT</b>, REAL, FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT, CHAR,
-     * VARCHAR</code> or <code>LONGVARCHAR</code> value. The bold SQL type
-     * designates the recommended return type.
-     * @see #getLong(int)
-     */
-    public long getLong(String columnName) throws SQLException {
-        return getLong(getColIdxByName(columnName));
-    }
-
-    /**
-     * Retrieves the value stored in the designated column
-     * of the current row as a <code>float</code> value.
-     *
-     * @param columnName a <code>String</code> object giving the SQL name of
-     *        a column in this <code>CachedRowSetImpl</code> object
-     * @return the column value; if the value is SQL <code>NULL</code>,
-     *         the result is <code>0</code>
-     * @throws SQLException if (1) the given column name is not the name of
-     * a column in this rowset, (2) the cursor is not on one of
-     * this rowset's rows or its insert row, or (3) the designated
-     * column does not store an SQL <code>TINYINT, SMALLINT, INTEGER
-     * BIGINT, <b>REAL</b>, FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT, CHAR,
-     * VARCHAR</code> or <code>LONGVARCHAR</code> value. The bold SQL type
-     * designates the recommended return type.
-     * @see #getFloat(String)
-     */
-    public float getFloat(String columnName) throws SQLException {
-        return getFloat(getColIdxByName(columnName));
-    }
-
-    /**
-     * Retrieves the value stored in the designated column
-     * of the current row of this <code>CachedRowSetImpl</code> object
-     * as a <code>double</code> value.
-     *
-     * @param columnName a <code>String</code> object giving the SQL name of
-     *        a column in this <code>CachedRowSetImpl</code> object
-     * @return the column value; if the value is SQL <code>NULL</code>,
-     *         the result is <code>0</code>
-     * @throws SQLException if (1) the given column name is not the name of
-     * a column in this rowset, (2) the cursor is not on one of
-     * this rowset's rows or its insert row, or (3) the designated
-     * column does not store an SQL <code>TINYINT, SMALLINT, INTEGER
-     * BIGINT, REAL, <b>FLOAT</b>, <b>DOUBLE</b>, DECIMAL, NUMERIC, BIT, CHAR,
-     * VARCHAR</code> or <code>LONGVARCHAR</code> value. The bold SQL type
-     * designates the recommended return types.
-     * @see #getDouble(int)
-     */
-    public double getDouble(String columnName) throws SQLException {
-        return getDouble(getColIdxByName(columnName));
-    }
-
-    /**
-     * Retrieves the value stored in the designated column
-     * of the current row as a <code>java.math.BigDecimal</code> object.
-     *
-     * @param columnName a <code>String</code> object giving the SQL name of
-     *        a column in this <code>CachedRowSetImpl</code> object
-     * @param scale the number of digits to the right of the decimal point
-     * @return a java.math.BugDecimal object with <code><i>scale</i></code>
-     * number of digits to the right of the decimal point.
-     * @throws SQLException if (1) the given column name is not the name of
-     * a column in this rowset, (2) the cursor is not on one of
-     * this rowset's rows or its insert row, or (3) the designated
-     * column does not store an SQL <code>TINYINT, SMALLINT, INTEGER
-     * BIGINT, REAL, FLOAT, DOUBLE, <b>DECIMAL</b>, <b>NUMERIC</b>, BIT CHAR,
-     * VARCHAR</code> or <code>LONGVARCHAR</code> value. The bold SQL type
-     * designates the recommended return type that this method is used to
-     * retrieve.
-     * @deprecated Use the <code>getBigDecimal(String columnName)</code>
-     *             method instead
-     */
-    public BigDecimal getBigDecimal(String columnName, int scale) throws SQLException {
-        return getBigDecimal(getColIdxByName(columnName), scale);
-    }
-
-    /**
-     * Retrieves the value stored in the designated column
-     * of the current row as a <code>byte</code> array.
-     * The bytes represent the raw values returned by the driver.
-     *
-     * @param columnName a <code>String</code> object giving the SQL name of
-     *        a column in this <code>CachedRowSetImpl</code> object
-     * @return the column value as a <code>byte</code> array in the Java programming
-     * language; if the value is SQL <code>NULL</code>, the result is <code>null</code>
-     * @throws SQLException if (1) the given column name is not the name of
-     * a column in this rowset, (2) the cursor is not on one of
-     * this rowset's rows or its insert row, or (3) the designated
-     * column does not store an SQL <code><b>BINARY</b>, <b>VARBINARY</b>
-     * </code> or <code>LONGVARBINARY</code> values
-     * The bold SQL type designates the recommended return type.
-     * @see #getBytes(int)
-     */
-    public byte[] getBytes(String columnName) throws SQLException {
-        return getBytes(getColIdxByName(columnName));
-    }
-
-    /**
-     * Retrieves the value stored in the designated column
-     * of the current row as a <code>java.sql.Date</code> object.
-     *
-     * @param columnName a <code>String</code> object giving the SQL name of
-     *        a column in this <code>CachedRowSetImpl</code> object
-     * @return the column value; if the value is SQL <code>NULL</code>,
-     *         the result is <code>null</code>
-     * @throws SQLException if (1) the given column name is not the name of
-     *            a column in this rowset, (2) the cursor is not on one of
-     *            this rowset's rows or its insert row, or (3) the designated
-     *            column does not store an SQL <code>DATE</code> or
-     *            <code>TIMESTAMP</code> value
-     */
-    public java.sql.Date getDate(String columnName) throws SQLException {
-        return getDate(getColIdxByName(columnName));
-    }
-
-    /**
-     * Retrieves the value stored in the designated column
-     * of the current row as a <code>java.sql.Time</code> object.
-     *
-     * @param columnName a <code>String</code> object giving the SQL name of
-     *        a column in this <code>CachedRowSetImpl</code> object
-     * @return the column value; if the value is SQL <code>NULL</code>,
-     *         the result is <code>null</code>
-     * @throws SQLException if the given column name does not match one of
-     *            this rowset's column names or the cursor is not on one of
-     *            this rowset's rows or its insert row
-     */
-    public java.sql.Time getTime(String columnName) throws SQLException {
-        return getTime(getColIdxByName(columnName));
-    }
-
-    /**
-     * Retrieves the value stored in the designated column
-     * of the current row as a <code>java.sql.Timestamp</code> object.
-     *
-     * @param columnName a <code>String</code> object giving the SQL name of
-     *        a column in this <code>CachedRowSetImpl</code> object
-     * @return the column value; if the value is SQL <code>NULL</code>,
-     *         the result is <code>null</code>
-     * @throws SQLException if the given column name does not match one of
-     *            this rowset's column names or the cursor is not on one of
-     *            this rowset's rows or its insert row
-     */
-    public java.sql.Timestamp getTimestamp(String columnName) throws SQLException {
-        return getTimestamp(getColIdxByName(columnName));
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row of this
-     * <code>CachedRowSetImpl</code> object as a <code>java.io.InputStream</code>
-     * object.
-     *
-     * A column value can be retrieved as a stream of ASCII characters
-     * and then read in chunks from the stream. This method is particularly
-     * suitable for retrieving large <code>LONGVARCHAR</code> values. The
-     * <code>SyncProvider</code> will rely on the JDBC driver to do any necessary
-     * conversion from the database format into ASCII format.
-     *
-     * <P><B>Note:</B> All the data in the returned stream must
-     * be read prior to getting the value of any other column. The
-     * next call to a <code>getXXX</code> method implicitly closes the stream.
-     *
-     * @param columnName a <code>String</code> object giving the SQL name of
-     *        a column in this <code>CachedRowSetImpl</code> object
-     * @return a Java input stream that delivers the database column value
-     *         as a stream of one-byte ASCII characters.  If the value is SQL
-     *         <code>NULL</code>, the result is <code>null</code>.
-     * @throws SQLException if (1) the given column name is not the name of
-     * a column in this rowset
-     * (2) the cursor is not on one of this rowset's rows or its
-     * insert row, or (3) the designated column does not store an
-     * SQL <code>CHAR, VARCHAR</code>, <code><b>LONGVARCHAR</b></code>
-     * <code>BINARY, VARBINARY</code> or <code>LONGVARBINARY</code> value. The
-     * bold SQL type designates the recommended return types that this method is
-     * used to retrieve.
-     * @see #getAsciiStream(int)
-     */
-    public java.io.InputStream getAsciiStream(String columnName) throws SQLException {
-        return getAsciiStream(getColIdxByName(columnName));
-
-    }
-
-    /**
-     * A column value can be retrieved as a stream of Unicode characters
-     * and then read in chunks from the stream.  This method is particularly
-     * suitable for retrieving large <code>LONGVARCHAR</code> values.
-     * The JDBC driver will do any necessary conversion from the database
-     * format into Unicode.
-     *
-     * <P><B>Note:</B> All the data in the returned stream must
-     * be read prior to getting the value of any other column. The
-     * next call to a <code>getXXX</code> method implicitly closes the stream.
-     *
-     * @param columnName a <code>String</code> object giving the SQL name of
-     *        a column in this <code>CachedRowSetImpl</code> object
-     * @return a Java input stream that delivers the database column value
-     *         as a stream of two-byte Unicode characters.  If the value is
-     *         SQL <code>NULL</code>, the result is <code>null</code>.
-     * @throws SQLException if the given column name does not match one of
-     *            this rowset's column names or the cursor is not on one of
-     *            this rowset's rows or its insert row
-     * @deprecated use the method <code>getCharacterStream</code> instead
-     */
-    public java.io.InputStream getUnicodeStream(String columnName) throws SQLException {
-        return getUnicodeStream(getColIdxByName(columnName));
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row of this
-     * <code>CachedRowSetImpl</code> object as a <code>java.io.InputStream</code>
-     * object.
-     * <P>
-     * A column value can be retrieved as a stream of uninterpreted bytes
-     * and then read in chunks from the stream.  This method is particularly
-     * suitable for retrieving large <code>LONGVARBINARY</code> values.
-     *
-     * <P><B>Note:</B> All the data in the returned stream must be
-     * read prior to getting the value of any other column. The next
-     * call to a get method implicitly closes the stream. Also, a
-     * stream may return <code>0</code> for <code>CachedRowSetImpl.available()</code>
-     * whether there is data available or not.
-     *
-     * @param columnName a <code>String</code> object giving the SQL name of
-     *        a column in this <code>CachedRowSetImpl</code> object
-     * @return a Java input stream that delivers the database column value
-     *         as a stream of uninterpreted bytes.  If the value is SQL
-     *         <code>NULL</code>, the result is <code>null</code>.
-     * @throws SQLException if (1) the given column name is unknown,
-     * (2) the cursor is not on one of this rowset's rows or its
-     * insert row, or (3) the designated column does not store an
-     * SQL <code>BINARY, VARBINARY</code> or <code><b>LONGVARBINARY</b></code>
-     * The bold type indicates the SQL type that this method is recommened
-     * to retrieve.
-     * @see #getBinaryStream(int)
-     *
-     */
-    public java.io.InputStream getBinaryStream(String columnName) throws SQLException {
-        return getBinaryStream(getColIdxByName(columnName));
-    }
-
-
-    // Advanced features:
-
-    /**
-     * The first warning reported by calls on this <code>CachedRowSetImpl</code>
-     * object is returned. Subsequent <code>CachedRowSetImpl</code> warnings will
-     * be chained to this <code>SQLWarning</code>.
-     *
-     * <P>The warning chain is automatically cleared each time a new
-     * row is read.
-     *
-     * <P><B>Note:</B> This warning chain only covers warnings caused
-     * by <code>ResultSet</code> methods.  Any warning caused by statement
-     * methods (such as reading OUT parameters) will be chained on the
-     * <code>Statement</code> object.
-     *
-     * @return the first SQLWarning or null
-     */
-    public SQLWarning getWarnings() {
-        return sqlwarn;
-    }
-
-    /**
-     * Clears all the warnings reporeted for the <code>CachedRowSetImpl</code>
-     * object. After a call to this method, the <code>getWarnings</code> method
-     * returns <code>null</code> until a new warning is reported for this
-     * <code>CachedRowSetImpl</code> object.
-     */
-    public void clearWarnings() {
-        sqlwarn = null;
-    }
-
-    /**
-     * Retrieves the name of the SQL cursor used by this
-     * <code>CachedRowSetImpl</code> object.
-     *
-     * <P>In SQL, a result table is retrieved through a cursor that is
-     * named. The current row of a <code>ResultSet</code> can be updated or deleted
-     * using a positioned update/delete statement that references the
-     * cursor name. To ensure that the cursor has the proper isolation
-     * level to support an update operation, the cursor's <code>SELECT</code>
-     * statement should be of the form <code>select for update</code>.
-     * If the <code>for update</code> clause
-     * is omitted, positioned updates may fail.
-     *
-     * <P>JDBC supports this SQL feature by providing the name of the
-     * SQL cursor used by a <code>ResultSet</code> object. The current row
-     * of a result set is also the current row of this SQL cursor.
-     *
-     * <P><B>Note:</B> If positioned updates are not supported, an
-     * <code>SQLException</code> is thrown.
-     *
-     * @return the SQL cursor name for this <code>CachedRowSetImpl</code> object's
-     *         cursor
-     * @throws SQLException if an error occurs
-     */
-    public String getCursorName() throws SQLException {
-        throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.posupdate").toString());
-    }
-
-    /**
-     * Retrieves a <code>ResultSetMetaData</code> object instance that
-     * contains information about the <code>CachedRowSet</code> object.
-     * However, applications should cast the returned object to a
-     * <code>RowSetMetaData</code> interface implementation. In the
-     * reference implementation, this cast can be done on the
-     * <code>RowSetMetaDataImpl</code> class.
-     * <P>
-     * For example:
-     * <pre>
-     * CachedRowSet crs = new CachedRowSetImpl();
-     * RowSetMetaDataImpl metaData =
-     *     (RowSetMetaDataImpl)crs.getMetaData();
-     * // Set the number of columns in the RowSet object for
-     * // which this RowSetMetaDataImpl object was created to the
-     * // given number.
-     * metaData.setColumnCount(3);
-     * crs.setMetaData(metaData);
-     * </pre>
-     *
-     * @return the <code>ResultSetMetaData</code> object that describes this
-     *         <code>CachedRowSetImpl</code> object's columns
-     * @throws SQLException if an error occurs in generating the RowSet
-     * meta data; or if the <code>CachedRowSetImpl</code> is empty.
-     * @see javax.sql.RowSetMetaData
-     */
-    public ResultSetMetaData getMetaData() throws SQLException {
-        return (ResultSetMetaData)RowSetMD;
-    }
-
-
-    /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>CachedRowSetImpl</code> object as an
-     * <code>Object</code> value.
-     * <P>
-     * The type of the <code>Object</code> will be the default
-     * Java object type corresponding to the column's SQL type,
-     * following the mapping for built-in types specified in the JDBC 3.0
-     * specification.
-     * <P>
-     * This method may also be used to read datatabase-specific
-     * abstract data types.
-     * <P>
-     * This implementation of the method <code>getObject</code> extends its
-     * behavior so that it gets the attributes of an SQL structured type
-     * as an array of <code>Object</code> values.  This method also custom
-     * maps SQL user-defined types to classes in the Java programming language.
-     * When the specified column contains
-     * a structured or distinct value, the behavior of this method is as
-     * if it were a call to the method <code>getObject(columnIndex,
-     * this.getStatement().getConnection().getTypeMap())</code>.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in the rowset
-     * @return a <code>java.lang.Object</code> holding the column value;
-     *         if the value is SQL <code>NULL</code>, the result is <code>null</code>
-     * @throws SQLException if the given column index is out of bounds,
-     *            the cursor is not on a valid row, or there is a problem getting
-     *            the <code>Class</code> object for a custom mapping
-     * @see #getObject(String)
-     */
-    public Object getObject(int columnIndex) throws SQLException {
-        Object value;
-        Map<String, Class<?>> map;
-
-        // sanity check.
-        checkIndex(columnIndex);
-        // make sure the cursor is on a valid row
-        checkCursor();
-
-        setLastValueNull(false);
-        value = getCurrentRow().getColumnObject(columnIndex);
-
-        // check for SQL NULL
-        if (value == null) {
-            setLastValueNull(true);
-            return null;
-        }
-        if (value instanceof Struct) {
-            Struct s = (Struct)value;
-            map = getTypeMap();
-            // look up the class in the map
-            Class c = (Class)map.get(s.getSQLTypeName());
-            if (c != null) {
-                // create new instance of the class
-                SQLData obj = null;
-                try {
-                    obj = (SQLData)c.newInstance();
-                } catch (java.lang.InstantiationException ex) {
-                    throw new SQLException(MessageFormat.format(resBundle.handleGetObject("cachedrowsetimpl.unableins").toString(),
-                    ex.getMessage()));
-                } catch (java.lang.IllegalAccessException ex) {
-                    throw new SQLException(MessageFormat.format(resBundle.handleGetObject("cachedrowsetimpl.unableins").toString(),
-                    ex.getMessage()));
-                }
-                // get the attributes from the struct
-                Object attribs[] = s.getAttributes(map);
-                // create the SQLInput "stream"
-                SQLInputImpl sqlInput = new SQLInputImpl(attribs, map);
-                // read the values...
-                obj.readSQL(sqlInput, s.getSQLTypeName());
-                return (Object)obj;
-            }
-        }
-        return value;
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>CachedRowSetImpl</code> object as an
-     * <code>Object</code> value.
-     * <P>
-     * The type of the <code>Object</code> will be the default
-     * Java object type corresponding to the column's SQL type,
-     * following the mapping for built-in types specified in the JDBC 3.0
-     * specification.
-     * <P>
-     * This method may also be used to read datatabase-specific
-     * abstract data types.
-     * <P>
-     * This implementation of the method <code>getObject</code> extends its
-     * behavior so that it gets the attributes of an SQL structured type
-     * as an array of <code>Object</code> values.  This method also custom
-     * maps SQL user-defined types to classes
-     * in the Java programming language. When the specified column contains
-     * a structured or distinct value, the behavior of this method is as
-     * if it were a call to the method <code>getObject(columnIndex,
-     * this.getStatement().getConnection().getTypeMap())</code>.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @return a <code>java.lang.Object</code> holding the column value;
-     *         if the value is SQL <code>NULL</code>, the result is <code>null</code>
-     * @throws SQLException if (1) the given column name does not match one of
-     *            this rowset's column names, (2) the cursor is not
-     *            on a valid row, or (3) there is a problem getting
-     *            the <code>Class</code> object for a custom mapping
-     * @see #getObject(int)
-     */
-    public Object getObject(String columnName) throws SQLException {
-        return getObject(getColIdxByName(columnName));
-    }
-
-    //----------------------------------------------------------------
-
-    /**
-     * Maps the given column name for one of this <code>CachedRowSetImpl</code>
-     * object's columns to its column number.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @return the column index of the given column name
-     * @throws SQLException if the given column name does not match one
-     *            of this rowset's column names
-     */
-    public int findColumn(String columnName) throws SQLException {
-        return getColIdxByName(columnName);
-    }
-
-
-    //--------------------------JDBC 2.0-----------------------------------
-
-    //---------------------------------------------------------------------
-    // Getter's and Setter's
-    //---------------------------------------------------------------------
-
-    /**
-     * Retrieves the value stored in the designated column
-     * of the current row as a <code>java.io.Reader</code> object.
-     *
-     * <P><B>Note:</B> All the data in the returned stream must
-     * be read prior to getting the value of any other column. The
-     * next call to a <code>getXXX</code> method implicitly closes the stream.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in the rowset
-     * @return a Java character stream that delivers the database column value
-     * as a stream of two-byte unicode characters in a
-     * <code>java.io.Reader</code> object.  If the value is
-     * SQL <code>NULL</code>, the result is <code>null</code>.
-     * @throws SQLException if (1) the given column index is out of bounds,
-     * (2) the cursor is not on one of this rowset's rows or its
-     * insert row, or (3) the designated column does not store an
-     * SQL <code>CHAR, VARCHAR, <b>LONGVARCHAR</b>, BINARY, VARBINARY</code> or
-     * <code>LONGVARBINARY</code> value.
-     * The bold SQL type designates the recommended return type.
-     * @see #getCharacterStream(String)
-     */
-    public java.io.Reader getCharacterStream(int columnIndex) throws SQLException{
-
-        // sanity check.
-        checkIndex(columnIndex);
-        // make sure the cursor is on a valid row
-        checkCursor();
-
-        if (isBinary(RowSetMD.getColumnType(columnIndex))) {
-            Object value = getCurrentRow().getColumnObject(columnIndex);
-            if (value == null) {
-                lastValueNull = true;
-                return null;
-            }
-            charStream = new InputStreamReader
-            (new ByteArrayInputStream((byte[])value));
-        } else if (isString(RowSetMD.getColumnType(columnIndex))) {
-            Object value = getCurrentRow().getColumnObject(columnIndex);
-            if (value == null) {
-                lastValueNull = true;
-                return null;
-            }
-            charStream = new StringReader(value.toString());
-        } else {
-            throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.dtypemismt").toString());
-        }
-
-        return (java.io.Reader)charStream;
-    }
-
-    /**
-     * Retrieves the value stored in the designated column
-     * of the current row as a <code>java.io.Reader</code> object.
-     *
-     * <P><B>Note:</B> All the data in the returned stream must
-     * be read prior to getting the value of any other column. The
-     * next call to a <code>getXXX</code> method implicitly closes the stream.
-     *
-     * @param columnName a <code>String</code> object giving the SQL name of
-     *        a column in this <code>CachedRowSetImpl</code> object
-     * @return a Java input stream that delivers the database column value
-     *         as a stream of two-byte Unicode characters.  If the value is
-     *         SQL <code>NULL</code>, the result is <code>null</code>.
-     * @throws SQLException if (1) the given column name is not the name of
-     * a column in this rowset, (2) the cursor is not on one of
-     * this rowset's rows or its insert row, or (3) the designated
-     * column does not store an SQL <code>CHAR, VARCHAR, <b>LONGVARCHAR</b>,
-     * BINARY, VARYBINARY</code> or <code>LONGVARBINARY</code> value.
-     * The bold SQL type designates the recommended return type.
-     */
-    public java.io.Reader getCharacterStream(String columnName) throws SQLException {
-        return getCharacterStream(getColIdxByName(columnName));
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>CachedRowSetImpl</code> object as a
-     * <code>java.math.BigDecimal</code> object.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in the rowset
-     * @return a <code>java.math.BigDecimal</code> value with full precision;
-     *         if the value is SQL <code>NULL</code>, the result is <code>null</code>
-     * @throws SQLException if (1) the given column index is out of bounds,
-     * (2) the cursor is not on one of this rowset's rows or its
-     * insert row, or (3) the designated column does not store an
-     * SQL <code>TINYINT, SMALLINT, INTEGER, BIGINT, REAL,
-     * FLOAT, DOUBLE, <b>DECIMAL</b>, <b>NUMERIC</b>, BIT, CHAR, VARCHAR</code>
-     * or <code>LONGVARCHAR</code> value. The bold SQL type designates the
-     * recommended return types that this method is used to retrieve.
-     * @see #getBigDecimal(String)
-     */
-    public BigDecimal getBigDecimal(int columnIndex) throws SQLException {
-        Object value;
-
-        // sanity check.
-        checkIndex(columnIndex);
-        // make sure the cursor is on a valid row
-        checkCursor();
-
-        setLastValueNull(false);
-        value = getCurrentRow().getColumnObject(columnIndex);
-
-        // check for SQL NULL
-        if (value == null) {
-            setLastValueNull(true);
-            return null;
-        }
-        try {
-            return (new BigDecimal(value.toString().trim()));
-        } catch (NumberFormatException ex) {
-            throw new SQLException(MessageFormat.format(resBundle.handleGetObject("cachedrowsetimpl.doublefail").toString(),
-                new Object[] {value.toString().trim(), columnIndex}));
-        }
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>CachedRowSetImpl</code> object as a
-     * <code>java.math.BigDecimal</code> object.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @return a <code>java.math.BigDecimal</code> value with full precision;
-     *         if the value is SQL <code>NULL</code>, the result is <code>null</code>
-     * @throws SQLException if (1) the given column name is not the name of
-     * a column in this rowset, (2) the cursor is not on one of
-     * this rowset's rows or its insert row, or (3) the designated
-     * column does not store an SQL <code>TINYINT, SMALLINT, INTEGER
-     * BIGINT, REAL, FLOAT, DOUBLE, <b>DECIMAL</b>, <b>NUMERIC</b>, BIT CHAR,
-     * VARCHAR</code> or <code>LONGVARCHAR</code> value. The bold SQL type
-     * designates the recommended return type that this method is used to
-     * retrieve
-     * @see #getBigDecimal(int)
-     */
-    public BigDecimal getBigDecimal(String columnName) throws SQLException {
-        return getBigDecimal(getColIdxByName(columnName));
-    }
-
-    //---------------------------------------------------------------------
-    // Traversal/Positioning
-    //---------------------------------------------------------------------
-
-    /**
-     * Returns the number of rows in this <code>CachedRowSetImpl</code> object.
-     *
-     * @return number of rows in the rowset
-     */
-    public int size() {
-        return numRows;
-    }
-
-    /**
-     * Indicates whether the cursor is before the first row in this
-     * <code>CachedRowSetImpl</code> object.
-     *
-     * @return <code>true</code> if the cursor is before the first row;
-     *         <code>false</code> otherwise or if the rowset contains no rows
-     * @throws SQLException if an error occurs
-     */
-    public boolean isBeforeFirst() throws SQLException {
-        if (cursorPos == 0 && numRows > 0) {
-            return true;
-        } else {
-            return false;
-        }
-    }
-
-    /**
-     * Indicates whether the cursor is after the last row in this
-     * <code>CachedRowSetImpl</code> object.
-     *
-     * @return <code>true</code> if the cursor is after the last row;
-     *         <code>false</code> otherwise or if the rowset contains no rows
-     * @throws SQLException if an error occurs
-     */
-    public boolean isAfterLast() throws SQLException {
-        if (cursorPos == numRows+1 && numRows > 0) {
-            return true;
-        } else {
-            return false;
-        }
-    }
-
-    /**
-     * Indicates whether the cursor is on the first row in this
-     * <code>CachedRowSetImpl</code> object.
-     *
-     * @return <code>true</code> if the cursor is on the first row;
-     *         <code>false</code> otherwise or if the rowset contains no rows
-     * @throws SQLException if an error occurs
-     */
-    public boolean isFirst() throws SQLException {
-        // this becomes nasty because of deletes.
-        int saveCursorPos = cursorPos;
-        int saveAbsoluteCursorPos = absolutePos;
-        internalFirst();
-        if (cursorPos == saveCursorPos) {
-            return true;
-        } else {
-            cursorPos = saveCursorPos;
-            absolutePos = saveAbsoluteCursorPos;
-            return false;
-        }
-    }
-
-    /**
-     * Indicates whether the cursor is on the last row in this
-     * <code>CachedRowSetImpl</code> object.
-     * <P>
-     * Note: Calling the method <code>isLast</code> may be expensive
-     * because the JDBC driver might need to fetch ahead one row in order
-     * to determine whether the current row is the last row in this rowset.
-     *
-     * @return <code>true</code> if the cursor is on the last row;
-     *         <code>false</code> otherwise or if this rowset contains no rows
-     * @throws SQLException if an error occurs
-     */
-    public boolean isLast() throws SQLException {
-        int saveCursorPos = cursorPos;
-        int saveAbsoluteCursorPos = absolutePos;
-        boolean saveShowDeleted = getShowDeleted();
-        setShowDeleted(true);
-        internalLast();
-        if (cursorPos == saveCursorPos) {
-            setShowDeleted(saveShowDeleted);
-            return true;
-        } else {
-            setShowDeleted(saveShowDeleted);
-            cursorPos = saveCursorPos;
-            absolutePos = saveAbsoluteCursorPos;
-            return false;
-        }
-    }
-
-    /**
-     * Moves this <code>CachedRowSetImpl</code> object's cursor to the front of
-     * the rowset, just before the first row. This method has no effect if
-     * this rowset contains no rows.
-     *
-     * @throws SQLException if an error occurs or the type of this rowset
-     *            is <code>ResultSet.TYPE_FORWARD_ONLY</code>
-     */
-    public void beforeFirst() throws SQLException {
-       if (getType() == ResultSet.TYPE_FORWARD_ONLY) {
-            throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.beforefirst").toString());
-        }
-        cursorPos = 0;
-        absolutePos = 0;
-        notifyCursorMoved();
-    }
-
-    /**
-     * Moves this <code>CachedRowSetImpl</code> object's cursor to the end of
-     * the rowset, just after the last row. This method has no effect if
-     * this rowset contains no rows.
-     *
-     * @throws SQLException if an error occurs
-     */
-    public void afterLast() throws SQLException {
-        if (numRows > 0) {
-            cursorPos = numRows + 1;
-            absolutePos = 0;
-            notifyCursorMoved();
-        }
-    }
-
-    /**
-     * Moves this <code>CachedRowSetImpl</code> object's cursor to the first row
-     * and returns <code>true</code> if the operation was successful.  This
-     * method also notifies registered listeners that the cursor has moved.
-     *
-     * @return <code>true</code> if the cursor is on a valid row;
-     *         <code>false</code> otherwise or if there are no rows in this
-     *         <code>CachedRowSetImpl</code> object
-     * @throws SQLException if the type of this rowset
-     *            is <code>ResultSet.TYPE_FORWARD_ONLY</code>
-     */
-    public boolean first() throws SQLException {
-        if(getType() == ResultSet.TYPE_FORWARD_ONLY) {
-            throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.first").toString());
-        }
-
-        // move and notify
-        boolean ret = this.internalFirst();
-        notifyCursorMoved();
-
-        return ret;
-    }
-
-    /**
-     * Moves this <code>CachedRowSetImpl</code> object's cursor to the first
-     * row and returns <code>true</code> if the operation is successful.
-     * <P>
-     * This method is called internally by the methods <code>first</code>,
-     * <code>isFirst</code>, and <code>absolute</code>.
-     * It in turn calls the method <code>internalNext</code> in order to
-     * handle the case where the first row is a deleted row that is not visible.
-     * <p>
-     * This is a implementation only method and is not required as a standard
-     * implementation of the <code>CachedRowSet</code> interface.
-     *
-     * @return <code>true</code> if the cursor moved to the first row;
-     *         <code>false</code> otherwise
-     * @throws SQLException if an error occurs
-     */
-    protected boolean internalFirst() throws SQLException {
-        boolean ret = false;
-
-        if (numRows > 0) {
-            cursorPos = 1;
-            if ((getShowDeleted() == false) && (rowDeleted() == true)) {
-                ret = internalNext();
-            } else {
-                ret = true;
-            }
-        }
-
-        if (ret == true)
-            absolutePos = 1;
-        else
-            absolutePos = 0;
-
-        return ret;
-    }
-
-    /**
-     * Moves this <code>CachedRowSetImpl</code> object's cursor to the last row
-     * and returns <code>true</code> if the operation was successful.  This
-     * method also notifies registered listeners that the cursor has moved.
-     *
-     * @return <code>true</code> if the cursor is on a valid row;
-     *         <code>false</code> otherwise or if there are no rows in this
-     *         <code>CachedRowSetImpl</code> object
-     * @throws SQLException if the type of this rowset
-     *            is <code>ResultSet.TYPE_FORWARD_ONLY</code>
-     */
-    public boolean last() throws SQLException {
-        if (getType() == ResultSet.TYPE_FORWARD_ONLY) {
-            throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.last").toString());
-        }
-
-        // move and notify
-        boolean ret = this.internalLast();
-        notifyCursorMoved();
-
-        return ret;
-    }
-
-    /**
-     * Moves this <code>CachedRowSetImpl</code> object's cursor to the last
-     * row and returns <code>true</code> if the operation is successful.
-     * <P>
-     * This method is called internally by the method <code>last</code>
-     * when rows have been deleted and the deletions are not visible.
-     * The method <code>internalLast</code> handles the case where the
-     * last row is a deleted row that is not visible by in turn calling
-     * the method <code>internalPrevious</code>.
-     * <p>
-     * This is a implementation only method and is not required as a standard
-     * implementation of the <code>CachedRowSet</code> interface.
-     *
-     * @return <code>true</code> if the cursor moved to the last row;
-     *         <code>false</code> otherwise
-     * @throws SQLException if an error occurs
-     */
-    protected boolean internalLast() throws SQLException {
-        boolean ret = false;
-
-        if (numRows > 0) {
-            cursorPos = numRows;
-            if ((getShowDeleted() == false) && (rowDeleted() == true)) {
-                ret = internalPrevious();
-            } else {
-                ret = true;
-            }
-        }
-        if (ret == true)
-            absolutePos = numRows - numDeleted;
-        else
-            absolutePos = 0;
-        return ret;
-    }
-
-    /**
-     * Returns the number of the current row in this <code>CachedRowSetImpl</code>
-     * object. The first row is number 1, the second number 2, and so on.
-     *
-     * @return the number of the current row;  <code>0</code> if there is no
-     *         current row
-     * @throws SQLException if an error occurs; or if the <code>CacheRowSetImpl</code>
-     *         is empty
-     */
-    public int getRow() throws SQLException {
-        // are we on a valid row? Valid rows are between first and last
-        if (numRows > 0 &&
-        cursorPos > 0 &&
-        cursorPos < (numRows + 1) &&
-        (getShowDeleted() == false && rowDeleted() == false)) {
-            return absolutePos;
-        } else if (getShowDeleted() == true) {
-            return cursorPos;
-        } else {
-            return 0;
-        }
-    }
-
-    /**
-     * Moves this <code>CachedRowSetImpl</code> object's cursor to the row number
-     * specified.
-     *
-     * <p>If the number is positive, the cursor moves to an absolute row with
-     * respect to the beginning of the rowset.  The first row is row 1, the second
-     * is row 2, and so on.  For example, the following command, in which
-     * <code>crs</code> is a <code>CachedRowSetImpl</code> object, moves the cursor
-     * to the fourth row, starting from the beginning of the rowset.
-     * <PRE><code>
-     *
-     *    crs.absolute(4);
-     *
-     * </code> </PRE>
-     * <P>
-     * If the number is negative, the cursor moves to an absolute row position
-     * with respect to the end of the rowset.  For example, calling
-     * <code>absolute(-1)</code> positions the cursor on the last row,
-     * <code>absolute(-2)</code> moves it on the next-to-last row, and so on.
-     * If the <code>CachedRowSetImpl</code> object <code>crs</code> has five rows,
-     * the following command moves the cursor to the fourth-to-last row, which
-     * in the case of a  rowset with five rows, is also the second row, counting
-     * from the beginning.
-     * <PRE><code>
-     *
-     *    crs.absolute(-4);
-     *
-     * </code> </PRE>
-     *
-     * If the number specified is larger than the number of rows, the cursor
-     * will move to the position after the last row. If the number specified
-     * would move the cursor one or more rows before the first row, the cursor
-     * moves to the position before the first row.
-     * <P>
-     * Note: Calling <code>absolute(1)</code> is the same as calling the
-     * method <code>first()</code>.  Calling <code>absolute(-1)</code> is the
-     * same as calling <code>last()</code>.
-     *
-     * @param row a positive number to indicate the row, starting row numbering from
-     *        the first row, which is <code>1</code>; a negative number to indicate
-     *        the row, starting row numbering from the last row, which is
-     *        <code>-1</code>; it must not be <code>0</code>
-     * @return <code>true</code> if the cursor is on the rowset; <code>false</code>
-     *         otherwise
-     * @throws SQLException if the given cursor position is <code>0</code> or the
-     *            type of this rowset is <code>ResultSet.TYPE_FORWARD_ONLY</code>
-     */
-    public boolean absolute( int row ) throws SQLException {
-        if (row == 0 || getType() == ResultSet.TYPE_FORWARD_ONLY) {
-            throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.absolute").toString());
-        }
-
-        if (row > 0) { // we are moving foward
-            if (row > numRows) {
-                // fell off the end
-                afterLast();
-                return false;
-            } else {
-                if (absolutePos <= 0)
-                    internalFirst();
-            }
-        } else { // we are moving backward
-            if (cursorPos + row < 0) {
-                // fell off the front
-                beforeFirst();
-                return false;
-            } else {
-                if (absolutePos >= 0)
-                    internalLast();
-            }
-        }
-
-        // Now move towards the absolute row that we're looking for
-        while (absolutePos != row) {
-            if (absolutePos < row) {
-                if (!internalNext())
-                    break;
-            }
-            else {
-                if (!internalPrevious())
-                    break;
-            }
-        }
-
-        notifyCursorMoved();
-
-        if (isAfterLast() || isBeforeFirst()) {
-            return false;
-        } else {
-            return true;
-        }
-    }
-
-    /**
-     * Moves the cursor the specified number of rows from the current
-     * position, with a positive number moving it forward and a
-     * negative number moving it backward.
-     * <P>
-     * If the number is positive, the cursor moves the specified number of
-     * rows toward the end of the rowset, starting at the current row.
-     * For example, the following command, in which
-     * <code>crs</code> is a <code>CachedRowSetImpl</code> object with 100 rows,
-     * moves the cursor forward four rows from the current row.  If the
-     * current row is 50, the cursor would move to row 54.
-     * <PRE><code>
-     *
-     *    crs.relative(4);
-     *
-     * </code> </PRE>
-     * <P>
-     * If the number is negative, the cursor moves back toward the beginning
-     * the specified number of rows, starting at the current row.
-     * For example, calling the method
-     * <code>absolute(-1)</code> positions the cursor on the last row,
-     * <code>absolute(-2)</code> moves it on the next-to-last row, and so on.
-     * If the <code>CachedRowSetImpl</code> object <code>crs</code> has five rows,
-     * the following command moves the cursor to the fourth-to-last row, which
-     * in the case of a  rowset with five rows, is also the second row
-     * from the beginning.
-     * <PRE><code>
-     *
-     *    crs.absolute(-4);
-     *
-     * </code> </PRE>
-     *
-     * If the number specified is larger than the number of rows, the cursor
-     * will move to the position after the last row. If the number specified
-     * would move the cursor one or more rows before the first row, the cursor
-     * moves to the position before the first row. In both cases, this method
-     * throws an <code>SQLException</code>.
-     * <P>
-     * Note: Calling <code>absolute(1)</code> is the same as calling the
-     * method <code>first()</code>.  Calling <code>absolute(-1)</code> is the
-     * same as calling <code>last()</code>.  Calling <code>relative(0)</code>
-     * is valid, but it does not change the cursor position.
-     *
-     * @param rows an <code>int</code> indicating the number of rows to move
-     *             the cursor, starting at the current row; a positive number
-     *             moves the cursor forward; a negative number moves the cursor
-     *             backward; must not move the cursor past the valid
-     *             rows
-     * @return <code>true</code> if the cursor is on a row in this
-     *         <code>CachedRowSetImpl</code> object; <code>false</code>
-     *         otherwise
-     * @throws SQLException if there are no rows in this rowset, the cursor is
-     *         positioned either before the first row or after the last row, or
-     *         the rowset is type <code>ResultSet.TYPE_FORWARD_ONLY</code>
-     */
-    public boolean relative(int rows) throws SQLException {
-        if (numRows == 0 || isBeforeFirst() ||
-        isAfterLast() || getType() == ResultSet.TYPE_FORWARD_ONLY) {
-            throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.relative").toString());
-        }
-
-        if (rows == 0) {
-            return true;
-        }
-
-        if (rows > 0) { // we are moving forward
-            if (cursorPos + rows > numRows) {
-                // fell off the end
-                afterLast();
-            } else {
-                for (int i=0; i < rows; i++) {
-                    if (!internalNext())
-                        break;
-                }
-            }
-        } else { // we are moving backward
-            if (cursorPos + rows < 0) {
-                // fell off the front
-                beforeFirst();
-            } else {
-                for (int i=rows; i < 0; i++) {
-                    if (!internalPrevious())
-                        break;
-                }
-            }
-        }
-        notifyCursorMoved();
-
-        if (isAfterLast() || isBeforeFirst()) {
-            return false;
-        } else {
-            return true;
-        }
-    }
-
-    /**
-     * Moves this <code>CachedRowSetImpl</code> object's cursor to the
-     * previous row and returns <code>true</code> if the cursor is on
-     * a valid row or <code>false</code> if it is not.
-     * This method also notifies all listeners registered with this
-     * <code>CachedRowSetImpl</code> object that its cursor has moved.
-     * <P>
-     * Note: calling the method <code>previous()</code> is not the same
-     * as calling the method <code>relative(-1)</code>.  This is true
-     * because it is possible to call <code>previous()</code> from the insert
-     * row, from after the last row, or from the current row, whereas
-     * <code>relative</code> may only be called from the current row.
-     * <P>
-     * The method <code>previous</code> may used in a <code>while</code>
-     * loop to iterate through a rowset starting after the last row
-     * and moving toward the beginning. The loop ends when <code>previous</code>
-     * returns <code>false</code>, meaning that there are no more rows.
-     * For example, the following code fragment retrieves all the data in
-     * the <code>CachedRowSetImpl</code> object <code>crs</code>, which has
-     * three columns.  Note that the cursor must initially be positioned
-     * after the last row so that the first call to the method
-     * <code>previous</code> places the cursor on the last line.
-     * <PRE> <code>
-     *
-     *     crs.afterLast();
-     *     while (previous()) {
-     *         String name = crs.getString(1);
-     *         int age = crs.getInt(2);
-     *         short ssn = crs.getShort(3);
-     *         System.out.println(name + "   " + age + "   " + ssn);
-     *     }
-     *
-     * </code> </PRE>
-     * This method throws an <code>SQLException</code> if the cursor is not
-     * on a row in the rowset, before the first row, or after the last row.
-     *
-     * @return <code>true</code> if the cursor is on a valid row;
-     *         <code>false</code> if it is before the first row or after the
-     *         last row
-     * @throws SQLException if the cursor is not on a valid position or the
-     *           type of this rowset is <code>ResultSet.TYPE_FORWARD_ONLY</code>
-     */
-    public boolean previous() throws SQLException {
-        if (getType() == ResultSet.TYPE_FORWARD_ONLY) {
-            throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.last").toString());
-        }
-        /*
-         * make sure things look sane. The cursor must be
-         * positioned in the rowset or before first (0) or
-         * after last (numRows + 1)
-         */
-        if (cursorPos < 0 || cursorPos > numRows + 1) {
-            throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.invalidcp").toString());
-        }
-        // move and notify
-        boolean ret = this.internalPrevious();
-        notifyCursorMoved();
-
-        return ret;
-    }
-
-    /**
-     * Moves the cursor to the previous row in this <code>CachedRowSetImpl</code>
-     * object, skipping past deleted rows that are not visible; returns
-     * <code>true</code> if the cursor is on a row in this rowset and
-     * <code>false</code> when the cursor goes before the first row.
-     * <P>
-     * This method is called internally by the method <code>previous</code>.
-     * <P>
-     * This is a implementation only method and is not required as a standard
-     * implementation of the <code>CachedRowSet</code> interface.
-     *
-     * @return <code>true</code> if the cursor is on a row in this rowset;
-     *         <code>false</code> when the cursor reaches the position before
-     *         the first row
-     * @throws SQLException if an error occurs
-     */
-    protected boolean internalPrevious() throws SQLException {
-        boolean ret = false;
-
-        do {
-            if (cursorPos > 1) {
-                --cursorPos;
-                ret = true;
-            } else if (cursorPos == 1) {
-                // decrement to before first
-                --cursorPos;
-                ret = false;
-                break;
-            }
-        } while ((getShowDeleted() == false) && (rowDeleted() == true));
-
-        /*
-         * Each call to internalPrevious may move the cursor
-         * over multiple rows, the absolute postion moves one one row
-         */
-        if (ret == true)
-            --absolutePos;
-        else
-            absolutePos = 0;
-
-        return ret;
-    }
-
-
-    //---------------------------------------------------------------------
-    // Updates
-    //---------------------------------------------------------------------
-
-    /**
-     * Indicates whether the current row of this <code>CachedRowSetImpl</code>
-     * object has been updated.  The value returned
-     * depends on whether this rowset can detect updates: <code>false</code>
-     * will always be returned if it does not detect updates.
-     *
-     * @return <code>true</code> if the row has been visibly updated
-     *         by the owner or another and updates are detected;
-     *         <code>false</code> otherwise
-     * @throws SQLException if the cursor is on the insert row or not
-     *            not on a valid row
-     *
-     * @see DatabaseMetaData#updatesAreDetected
-     */
-    public boolean rowUpdated() throws SQLException {
-        // make sure the cursor is on a valid row
-        checkCursor();
-        if (onInsertRow == true) {
-            throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.invalidop").toString());
-        }
-        return(((Row)getCurrentRow()).getUpdated());
-    }
-
-    /**
-     * Indicates whether the designated column of the current row of
-     * this <code>CachedRowSetImpl</code> object has been updated. The
-     * value returned depends on whether this rowset can detcted updates:
-     * <code>false</code> will always be returned if it does not detect updates.
-     *
-     * @param idx the index identifier of the column that may be have been updated.
-     * @return <code>true</code> is the designated column has been updated
-     * and the rowset detects updates; <code>false</code> if the rowset has not
-     * been updated or the rowset does not detect updates
-     * @throws SQLException if the cursor is on the insert row or not
-     *          on a valid row
-     * @see DatabaseMetaData#updatesAreDetected
-     */
-    public boolean columnUpdated(int idx) throws SQLException {
-        // make sure the cursor is on a valid row
-        checkCursor();
-        if (onInsertRow == true) {
-            throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.invalidop").toString());
-        }
-        return (((Row)getCurrentRow()).getColUpdated(idx - 1));
-    }
-
-    /**
-     * Indicates whether the designated column of the current row of
-     * this <code>CachedRowSetImpl</code> object has been updated. The
-     * value returned depends on whether this rowset can detcted updates:
-     * <code>false</code> will always be returned if it does not detect updates.
-     *
-     * @param columnName the <code>String</code> column name column that may be have
-     * been updated.
-     * @return <code>true</code> is the designated column has been updated
-     * and the rowset detects updates; <code>false</code> if the rowset has not
-     * been updated or the rowset does not detect updates
-     * @throws SQLException if the cursor is on the insert row or not
-     *          on a valid row
-     * @see DatabaseMetaData#updatesAreDetected
-     */
-    public boolean columnUpdated(String columnName) throws SQLException {
-        return columnUpdated(getColIdxByName(columnName));
-    }
-
-    /**
-     * Indicates whether the current row has been inserted.  The value returned
-     * depends on whether or not the rowset can detect visible inserts.
-     *
-     * @return <code>true</code> if a row has been inserted and inserts are detected;
-     *         <code>false</code> otherwise
-     * @throws SQLException if the cursor is on the insert row or not
-     *            not on a valid row
-     *
-     * @see DatabaseMetaData#insertsAreDetected
-     */
-    public boolean rowInserted() throws SQLException {
-        // make sure the cursor is on a valid row
-        checkCursor();
-        if (onInsertRow == true) {
-            throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.invalidop").toString());
-        }
-        return(((Row)getCurrentRow()).getInserted());
-    }
-
-    /**
-     * Indicates whether the current row has been deleted.  A deleted row
-     * may leave a visible "hole" in a rowset.  This method can be used to
-     * detect such holes if the rowset can detect deletions. This method
-     * will always return <code>false</code> if this rowset cannot detect
-     * deletions.
-     *
-     * @return <code>true</code> if (1)the current row is blank, indicating that
-     *         the row has been deleted, and (2)deletions are detected;
-     *         <code>false</code> otherwise
-     * @throws SQLException if the cursor is on a valid row in this rowset
-     * @see DatabaseMetaData#deletesAreDetected
-     */
-    public boolean rowDeleted() throws SQLException {
-        // make sure the cursor is on a valid row
-
-        if (isAfterLast() == true ||
-        isBeforeFirst() == true ||
-        onInsertRow == true) {
-
-            throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.invalidcp").toString());
-        }
-        return(((Row)getCurrentRow()).getDeleted());
-    }
-
-    /**
-     * Indicates whether the given SQL data type is a numberic type.
-     *
-     * @param type one of the constants from <code>java.sql.Types</code>
-     * @return <code>true</code> if the given type is <code>NUMERIC</code>,'
-     *         <code>DECIMAL</code>, <code>BIT</code>, <code>TINYINT</code>,
-     *         <code>SMALLINT</code>, <code>INTEGER</code>, <code>BIGINT</code>,
-     *         <code>REAL</code>, <code>DOUBLE</code>, or <code>FLOAT</code>;
-     *         <code>false</code> otherwise
-     */
-    private boolean isNumeric(int type) {
-        switch (type) {
-            case java.sql.Types.NUMERIC:
-            case java.sql.Types.DECIMAL:
-            case java.sql.Types.BIT:
-            case java.sql.Types.TINYINT:
-            case java.sql.Types.SMALLINT:
-            case java.sql.Types.INTEGER:
-            case java.sql.Types.BIGINT:
-            case java.sql.Types.REAL:
-            case java.sql.Types.DOUBLE:
-            case java.sql.Types.FLOAT:
-                return true;
-            default:
-                return false;
-        }
-    }
-
-    /**
-     * Indicates whether the given SQL data type is a string type.
-     *
-     * @param type one of the constants from <code>java.sql.Types</code>
-     * @return <code>true</code> if the given type is <code>CHAR</code>,'
-     *         <code>VARCHAR</code>, or <code>LONGVARCHAR</code>;
-     *         <code>false</code> otherwise
-     */
-    private boolean isString(int type) {
-        switch (type) {
-            case java.sql.Types.CHAR:
-            case java.sql.Types.VARCHAR:
-            case java.sql.Types.LONGVARCHAR:
-                return true;
-            default:
-                return false;
-        }
-    }
-
-    /**
-     * Indicates whether the given SQL data type is a binary type.
-     *
-     * @param type one of the constants from <code>java.sql.Types</code>
-     * @return <code>true</code> if the given type is <code>BINARY</code>,'
-     *         <code>VARBINARY</code>, or <code>LONGVARBINARY</code>;
-     *         <code>false</code> otherwise
-     */
-    private boolean isBinary(int type) {
-        switch (type) {
-            case java.sql.Types.BINARY:
-            case java.sql.Types.VARBINARY:
-            case java.sql.Types.LONGVARBINARY:
-                return true;
-            default:
-                return false;
-        }
-    }
-
-    /**
-     * Indicates whether the given SQL data type is a temporal type.
-     * This method is called internally by the conversion methods
-     * <code>convertNumeric</code> and <code>convertTemporal</code>.
-     *
-     * @param type one of the constants from <code>java.sql.Types</code>
-     * @return <code>true</code> if the given type is <code>DATE</code>,
-     *         <code>TIME</code>, or <code>TIMESTAMP</code>;
-     *         <code>false</code> otherwise
-     */
-    private boolean isTemporal(int type) {
-        switch (type) {
-            case java.sql.Types.DATE:
-            case java.sql.Types.TIME:
-            case java.sql.Types.TIMESTAMP:
-                return true;
-            default:
-                return false;
-        }
-    }
-
-    /**
-     * Indicates whether the given SQL data type is a boolean type.
-     * This method is called internally by the conversion methods
-     * <code>convertNumeric</code> and <code>convertBoolean</code>.
-     *
-     * @param type one of the constants from <code>java.sql.Types</code>
-     * @return <code>true</code> if the given type is <code>BIT</code>,
-     *         , or <code>BOOLEAN</code>;
-     *         <code>false</code> otherwise
-     */
-    private boolean isBoolean(int type) {
-        switch (type) {
-            case java.sql.Types.BIT:
-            case java.sql.Types.BOOLEAN:
-                return true;
-            default:
-                return false;
-        }
-    }
-
-
-    /**
-     * Converts the given <code>Object</code> in the Java programming language
-     * to the standard mapping for the specified SQL target data type.
-     * The conversion must be to a string or numeric type, but there are no
-     * restrictions on the type to be converted.  If the source type and target
-     * type are the same, the given object is simply returned.
-     *
-     * @param srcObj the <code>Object</code> in the Java programming language
-     *               that is to be converted to the target type
-     * @param srcType the data type that is the standard mapping in SQL of the
-     *                object to be converted; must be one of the constants in
-     *                <code>java.sql.Types</code>
-     * @param trgType the SQL data type to which to convert the given object;
-     *                must be one of the following constants in
-     *                <code>java.sql.Types</code>: <code>NUMERIC</code>,
-     *         <code>DECIMAL</code>, <code>BIT</code>, <code>TINYINT</code>,
-     *         <code>SMALLINT</code>, <code>INTEGER</code>, <code>BIGINT</code>,
-     *         <code>REAL</code>, <code>DOUBLE</code>, <code>FLOAT</code>,
-     *         <code>VARCHAR</code>, <code>LONGVARCHAR</code>, or <code>CHAR</code>
-     * @return an <code>Object</code> value.that is
-     *         the standard object mapping for the target SQL type
-     * @throws SQLException if the given target type is not one of the string or
-     *         numeric types in <code>java.sql.Types</code>
-     */
-    private Object convertNumeric(Object srcObj, int srcType,
-    int trgType) throws SQLException {
-
-        if (srcType == trgType) {
-            return srcObj;
-        }
-
-        if (isNumeric(trgType) == false && isString(trgType) == false) {
-            throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.dtypemismt").toString() + trgType);
-        }
-
-        try {
-            switch (trgType) {
-                case java.sql.Types.BIT:
-                    Integer i = Integer.valueOf(srcObj.toString().trim());
-                    return i.equals(Integer.valueOf((int)0)) ?
-                    Boolean.valueOf(false) :
-                        Boolean.valueOf(true);
-                case java.sql.Types.TINYINT:
-                    return Byte.valueOf(srcObj.toString().trim());
-                case java.sql.Types.SMALLINT:
-                    return Short.valueOf(srcObj.toString().trim());
-                case java.sql.Types.INTEGER:
-                    return Integer.valueOf(srcObj.toString().trim());
-                case java.sql.Types.BIGINT:
-                    return Long.valueOf(srcObj.toString().trim());
-                case java.sql.Types.NUMERIC:
-                case java.sql.Types.DECIMAL:
-                    return new BigDecimal(srcObj.toString().trim());
-                case java.sql.Types.REAL:
-                case java.sql.Types.FLOAT:
-                    return new Float(srcObj.toString().trim());
-                case java.sql.Types.DOUBLE:
-                    return new Double(srcObj.toString().trim());
-                case java.sql.Types.CHAR:
-                case java.sql.Types.VARCHAR:
-                case java.sql.Types.LONGVARCHAR:
-                    return srcObj.toString();
-                default:
-                    throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.dtypemismt").toString()+ trgType);
-            }
-        } catch (NumberFormatException ex) {
-            throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.dtypemismt").toString() + trgType);
-        }
-    }
-
-    /**
-     * Converts the given <code>Object</code> in the Java programming language
-     * to the standard object mapping for the specified SQL target data type.
-     * The conversion must be to a string or temporal type, and there are also
-     * restrictions on the type to be converted.
-     * <P>
-     * <TABLE ALIGN="CENTER" BORDER CELLPADDING=10 BORDERCOLOR="#0000FF"
-     * <CAPTION ALIGN="CENTER"><B>Parameters and Return Values</B></CAPTION>
-     * <TR>
-     *   <TD><B>Source SQL Type</B>
-     *   <TD><B>Target SQL Type</B>
-     *   <TD><B>Object Returned</B>
-     * </TR>
-     * <TR>
-     *   <TD><code>TIMESTAMP</code>
-     *   <TD><code>DATE</code>
-     *   <TD><code>java.sql.Date</code>
-     * </TR>
-     * <TR>
-     *   <TD><code>TIMESTAMP</code>
-     *   <TD><code>TIME</code>
-     *   <TD><code>java.sql.Time</code>
-     * </TR>
-     * <TR>
-     *   <TD><code>TIME</code>
-     *   <TD><code>TIMESTAMP</code>
-     *   <TD><code>java.sql.Timestamp</code>
-     * </TR>
-     * <TR>
-     *   <TD><code>DATE</code>, <code>TIME</code>, or <code>TIMESTAMP</code>
-     *   <TD><code>CHAR</code>, <code>VARCHAR</code>, or <code>LONGVARCHAR</code>
-     *   <TD><code>java.lang.String</code>
-     * </TR>
-     * </TABLE>
-     * <P>
-     * If the source type and target type are the same,
-     * the given object is simply returned.
-     *
-     * @param srcObj the <code>Object</code> in the Java programming language
-     *               that is to be converted to the target type
-     * @param srcType the data type that is the standard mapping in SQL of the
-     *                object to be converted; must be one of the constants in
-     *                <code>java.sql.Types</code>
-     * @param trgType the SQL data type to which to convert the given object;
-     *                must be one of the following constants in
-     *                <code>java.sql.Types</code>: <code>DATE</code>,
-     *         <code>TIME</code>, <code>TIMESTAMP</code>, <code>CHAR</code>,
-     *         <code>VARCHAR</code>, or <code>LONGVARCHAR</code>
-     * @return an <code>Object</code> value.that is
-     *         the standard object mapping for the target SQL type
-     * @throws SQLException if the given target type is not one of the string or
-     *         temporal types in <code>java.sql.Types</code>
-     */
-    private Object convertTemporal(Object srcObj,
-    int srcType, int trgType) throws SQLException {
-
-        if (srcType == trgType) {
-            return srcObj;
-        }
-
-        if (isNumeric(trgType) == true ||
-        (isString(trgType) == false && isTemporal(trgType) == false)) {
-            throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.dtypemismt").toString());
-        }
-
-        try {
-            switch (trgType) {
-                case java.sql.Types.DATE:
-                    if (srcType == java.sql.Types.TIMESTAMP) {
-                        return new java.sql.Date(((java.sql.Timestamp)srcObj).getTime());
-                    } else {
-                        throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.dtypemismt").toString());
-                    }
-                case java.sql.Types.TIMESTAMP:
-                    if (srcType == java.sql.Types.TIME) {
-                        return new Timestamp(((java.sql.Time)srcObj).getTime());
-                    } else {
-                        return new Timestamp(((java.sql.Date)srcObj).getTime());
-                    }
-                case java.sql.Types.TIME:
-                    if (srcType == java.sql.Types.TIMESTAMP) {
-                        return new Time(((java.sql.Timestamp)srcObj).getTime());
-                    } else {
-                        throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.dtypemismt").toString());
-                    }
-                case java.sql.Types.CHAR:
-                case java.sql.Types.VARCHAR:
-                case java.sql.Types.LONGVARCHAR:
-                    return srcObj.toString();
-                default:
-                    throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.dtypemismt").toString());
-            }
-        } catch (NumberFormatException ex) {
-            throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.dtypemismt").toString());
-        }
-
-    }
-
-    /**
-     * Converts the given <code>Object</code> in the Java programming language
-     * to the standard mapping for the specified SQL target data type.
-     * The conversion must be to a string or numeric type, but there are no
-     * restrictions on the type to be converted.  If the source type and target
-     * type are the same, the given object is simply returned.
-     *
-     * @param srcObj the <code>Object</code> in the Java programming language
-     *               that is to be converted to the target type
-     * @param srcType the data type that is the standard mapping in SQL of the
-     *                object to be converted; must be one of the constants in
-     *                <code>java.sql.Types</code>
-     * @param trgType the SQL data type to which to convert the given object;
-     *                must be one of the following constants in
-     *                <code>java.sql.Types</code>: <code>BIT</code>,
-     *         or <code>BOOLEAN</code>
-     * @return an <code>Object</code> value.that is
-     *         the standard object mapping for the target SQL type
-     * @throws SQLException if the given target type is not one of the Boolean
-     *         types in <code>java.sql.Types</code>
-     */
-    private Object convertBoolean(Object srcObj, int srcType,
-    int trgType) throws SQLException {
-
-        if (srcType == trgType) {
-            return srcObj;
-        }
-
-        if (isNumeric(trgType) == true ||
-        (isString(trgType) == false && isBoolean(trgType) == false)) {
-            throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.dtypemismt").toString());
-        }
-
-
-        try {
-            switch (trgType) {
-                case java.sql.Types.BIT:
-                    Integer i = Integer.valueOf(srcObj.toString().trim());
-                    return i.equals(Integer.valueOf((int)0)) ?
-                    Boolean.valueOf(false) :
-                        Boolean.valueOf(true);
-                case java.sql.Types.BOOLEAN:
-                    return Boolean.valueOf(srcObj.toString().trim());
-                default:
-                    throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.dtypemismt").toString()+ trgType);
-            }
-        } catch (NumberFormatException ex) {
-            throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.dtypemismt").toString() + trgType);
-        }
-    }
-
-    /**
-     * Sets the designated nullable column in the current row or the
-     * insert row of this <code>CachedRowSetImpl</code> object with
-     * <code>null</code> value.
-     * <P>
-     * This method updates a column value in the current row or the insert
-     * row of this rowset; however, another method must be called to complete
-     * the update process. If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to mark the row as updated
-     * and to notify listeners that the row has changed.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called to insert the new row into this rowset and to notify
-     * listeners that a row has changed.
-     * <P>
-     * In order to propagate updates in this rowset to the underlying
-     * data source, an application must call the method {@link #acceptChanges}
-     * after it calls either <code>updateRow</code> or <code>insertRow</code>.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateNull(int columnIndex) throws SQLException {
-        // sanity check.
-        checkIndex(columnIndex);
-        // make sure the cursor is on a valid row
-        checkCursor();
-
-        BaseRow row = getCurrentRow();
-        row.setColumnObject(columnIndex, null);
-
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>boolean</code> value.
-     * <P>
-     * This method updates a column value in the current row or the insert
-     * row of this rowset, but it does not update the database.
-     * If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param x the new column value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateBoolean(int columnIndex, boolean x) throws SQLException {
-        // sanity check.
-        checkIndex(columnIndex);
-        // make sure the cursor is on a valid row
-        checkCursor();
-        Object obj = convertBoolean(Boolean.valueOf(x),
-        java.sql.Types.BIT,
-        RowSetMD.getColumnType(columnIndex));
-
-        getCurrentRow().setColumnObject(columnIndex, obj);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>byte</code> value.
-     * <P>
-     * This method updates a column value in the current row or the insert
-     * row of this rowset, but it does not update the database.
-     * If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param x the new column value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateByte(int columnIndex, byte x) throws SQLException {
-        // sanity check.
-        checkIndex(columnIndex);
-        // make sure the cursor is on a valid row
-        checkCursor();
-
-        Object obj = convertNumeric(Byte.valueOf(x),
-        java.sql.Types.TINYINT,
-        RowSetMD.getColumnType(columnIndex));
-
-        getCurrentRow().setColumnObject(columnIndex, obj);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>short</code> value.
-     * <P>
-     * This method updates a column value in the current row or the insert
-     * row of this rowset, but it does not update the database.
-     * If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param x the new column value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateShort(int columnIndex, short x) throws SQLException {
-        // sanity check.
-        checkIndex(columnIndex);
-        // make sure the cursor is on a valid row
-        checkCursor();
-
-        Object obj = convertNumeric(Short.valueOf(x),
-        java.sql.Types.SMALLINT,
-        RowSetMD.getColumnType(columnIndex));
-
-        getCurrentRow().setColumnObject(columnIndex, obj);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>int</code> value.
-     * <P>
-     * This method updates a column value in the current row or the insert
-     * row of this rowset, but it does not update the database.
-     * If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param x the new column value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateInt(int columnIndex, int x) throws SQLException {
-        // sanity check.
-        checkIndex(columnIndex);
-        // make sure the cursor is on a valid row
-        checkCursor();
-        Object obj = convertNumeric(Integer.valueOf(x),
-        java.sql.Types.INTEGER,
-        RowSetMD.getColumnType(columnIndex));
-
-        getCurrentRow().setColumnObject(columnIndex, obj);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>long</code> value.
-     * <P>
-     * This method updates a column value in the current row or the insert
-     * row of this rowset, but it does not update the database.
-     * If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param x the new column value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateLong(int columnIndex, long x) throws SQLException {
-        // sanity check.
-        checkIndex(columnIndex);
-        // make sure the cursor is on a valid row
-        checkCursor();
-
-        Object obj = convertNumeric(Long.valueOf(x),
-        java.sql.Types.BIGINT,
-        RowSetMD.getColumnType(columnIndex));
-
-        getCurrentRow().setColumnObject(columnIndex, obj);
-
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>float</code> value.
-     * <P>
-     * This method updates a column value in the current row or the insert
-     * row of this rowset, but it does not update the database.
-     * If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param x the new column value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateFloat(int columnIndex, float x) throws SQLException {
-        // sanity check.
-        checkIndex(columnIndex);
-        // make sure the cursor is on a valid row
-        checkCursor();
-
-        Object obj = convertNumeric(new Float(x),
-        java.sql.Types.REAL,
-        RowSetMD.getColumnType(columnIndex));
-
-        getCurrentRow().setColumnObject(columnIndex, obj);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>double</code> value.
-     *
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param x the new column value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateDouble(int columnIndex, double x) throws SQLException {
-        // sanity check.
-        checkIndex(columnIndex);
-        // make sure the cursor is on a valid row
-        checkCursor();
-        Object obj = convertNumeric(new Double(x),
-        java.sql.Types.DOUBLE,
-        RowSetMD.getColumnType(columnIndex));
-
-        getCurrentRow().setColumnObject(columnIndex, obj);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>java.math.BigDecimal</code> object.
-     * <P>
-     * This method updates a column value in the current row or the insert
-     * row of this rowset, but it does not update the database.
-     * If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param x the new column value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateBigDecimal(int columnIndex, BigDecimal x) throws SQLException {
-        // sanity check.
-        checkIndex(columnIndex);
-        // make sure the cursor is on a valid row
-        checkCursor();
-
-        Object obj = convertNumeric(x,
-        java.sql.Types.NUMERIC,
-        RowSetMD.getColumnType(columnIndex));
-
-        getCurrentRow().setColumnObject(columnIndex, obj);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>String</code> object.
-     * <P>
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to mark the row as updated.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called to insert the new row into this rowset and mark it
-     * as inserted. Both of these methods must be called before the
-     * cursor moves to another row.
-     * <P>
-     * The method <code>acceptChanges</code> must be called if the
-     * updated values are to be written back to the underlying database.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param x the new column value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateString(int columnIndex, String x) throws SQLException {
-        // sanity check.
-        checkIndex(columnIndex);
-        // make sure the cursor is on a valid row
-        checkCursor();
-
-        getCurrentRow().setColumnObject(columnIndex, x);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>byte</code> array.
-     *
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param x the new column value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateBytes(int columnIndex, byte x[]) throws SQLException {
-        // sanity check.
-        checkIndex(columnIndex);
-        // make sure the cursor is on a valid row
-        checkCursor();
-
-        if (isBinary(RowSetMD.getColumnType(columnIndex)) == false) {
-            throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.dtypemismt").toString());
-        }
-
-        getCurrentRow().setColumnObject(columnIndex, x);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>Date</code> object.
-     *
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param x the new column value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, (3) the type of the designated column is not
-     *            an SQL <code>DATE</code> or <code>TIMESTAMP</code>, or
-     *            (4) this rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateDate(int columnIndex, java.sql.Date x) throws SQLException {
-        // sanity check.
-        checkIndex(columnIndex);
-        // make sure the cursor is on a valid row
-        checkCursor();
-
-        Object obj = convertTemporal(x,
-        java.sql.Types.DATE,
-        RowSetMD.getColumnType(columnIndex));
-
-        getCurrentRow().setColumnObject(columnIndex, obj);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>Time</code> object.
-     *
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param x the new column value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, (3) the type of the designated column is not
-     *            an SQL <code>TIME</code> or <code>TIMESTAMP</code>, or
-     *            (4) this rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateTime(int columnIndex, java.sql.Time x) throws SQLException {
-        // sanity check.
-        checkIndex(columnIndex);
-        // make sure the cursor is on a valid row
-        checkCursor();
-
-        Object obj = convertTemporal(x,
-        java.sql.Types.TIME,
-        RowSetMD.getColumnType(columnIndex));
-
-        getCurrentRow().setColumnObject(columnIndex, obj);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>Timestamp</code> object.
-     *
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param x the new column value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, (3) the type of the designated column is not
-     *            an SQL <code>DATE</code>, <code>TIME</code>, or
-     *            <code>TIMESTAMP</code>, or (4) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateTimestamp(int columnIndex, java.sql.Timestamp x) throws SQLException {
-        // sanity check.
-        checkIndex(columnIndex);
-        // make sure the cursor is on a valid row
-        checkCursor();
-
-        Object obj = convertTemporal(x,
-        java.sql.Types.TIMESTAMP,
-        RowSetMD.getColumnType(columnIndex));
-
-        getCurrentRow().setColumnObject(columnIndex, obj);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * ASCII stream value.
-     * <P>
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param x the new column value
-     * @param length the number of one-byte ASCII characters in the stream
-     * @throws SQLException if this method is invoked
-     */
-    public void updateAsciiStream(int columnIndex, java.io.InputStream x, int length) throws SQLException {
-        // sanity Check
-        checkIndex(columnIndex);
-        // make sure the cursor is on a valid row
-        checkCursor();
-
-
-        if (isString(RowSetMD.getColumnType(columnIndex)) == false &&
-        isBinary(RowSetMD.getColumnType(columnIndex)) == false) {
-            throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.dtypemismt").toString());
-        }
-
-        byte buf[] = new byte[length];
-        try {
-            int charsRead = 0;
-            do {
-                charsRead += x.read(buf, charsRead, length - charsRead);
-            } while (charsRead != length);
-            //Changed the condition check to check for length instead of -1
-        } catch (java.io.IOException ex) {
-            throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.asciistream").toString());
-        }
-        String str = new String(buf);
-
-        getCurrentRow().setColumnObject(columnIndex, str);
-
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>java.io.InputStream</code> object.
-     * <P>
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param x the new column value; must be a <code>java.io.InputStream</code>
-     *          containing <code>BINARY</code>, <code>VARBINARY</code>, or
-     *          <code>LONGVARBINARY</code> data
-     * @param length the length of the stream in bytes
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, (3) the data in the stream is not binary, or
-     *            (4) this rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateBinaryStream(int columnIndex, java.io.InputStream x,int length) throws SQLException {
-        // sanity Check
-        checkIndex(columnIndex);
-        // make sure the cursor is on a valid row
-        checkCursor();
-
-        if (isBinary(RowSetMD.getColumnType(columnIndex)) == false) {
-            throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.dtypemismt").toString());
-        }
-
-        byte buf[] = new byte[length];
-        try {
-            int bytesRead = 0;
-            do {
-                bytesRead += x.read(buf, bytesRead, length - bytesRead);
-            } while (bytesRead != -1);
-        } catch (java.io.IOException ex) {
-            throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.binstream").toString());
-        }
-
-        getCurrentRow().setColumnObject(columnIndex, buf);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>java.io.Reader</code> object.
-     * <P>
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param x the new column value; must be a <code>java.io.Reader</code>
-     *          containing <code>BINARY</code>, <code>VARBINARY</code>,
-     *          <code>LONGVARBINARY</code>, <code>CHAR</code>, <code>VARCHAR</code>,
-     *          or <code>LONGVARCHAR</code> data
-     * @param length the length of the stream in characters
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, (3) the data in the stream is not a binary or
-     *            character type, or (4) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateCharacterStream(int columnIndex, java.io.Reader x, int length) throws SQLException {
-        // sanity Check
-        checkIndex(columnIndex);
-        // make sure the cursor is on a valid row
-        checkCursor();
-
-        if (isString(RowSetMD.getColumnType(columnIndex)) == false &&
-        isBinary(RowSetMD.getColumnType(columnIndex)) == false) {
-            throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.dtypemismt").toString());
-        }
-
-        char buf[] = new char[length];
-        try {
-            int charsRead = 0;
-            do {
-                charsRead += x.read(buf, charsRead, length - charsRead);
-            } while (charsRead != length);
-            //Changed the condition checking to check for length instead of -1
-        } catch (java.io.IOException ex) {
-            throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.binstream").toString());
-        }
-        String str = new String(buf);
-
-        getCurrentRow().setColumnObject(columnIndex, str);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>Object</code> value.  The <code>scale</code> parameter indicates
-     * the number of digits to the right of the decimal point and is ignored
-     * if the new column value is not a type that will be mapped to an SQL
-     * <code>DECIMAL</code> or <code>NUMERIC</code> value.
-     * <P>
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param x the new column value
-     * @param scale the number of digits to the right of the decimal point (for
-     *              <code>DECIMAL</code> and <code>NUMERIC</code> types only)
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateObject(int columnIndex, Object x, int scale) throws SQLException {
-        // sanity check.
-        checkIndex(columnIndex);
-        // make sure the cursor is on a valid row
-        checkCursor();
-
-        int type = RowSetMD.getColumnType(columnIndex);
-        if (type == Types.DECIMAL || type == Types.NUMERIC) {
-            ((java.math.BigDecimal)x).setScale(scale);
-        }
-        getCurrentRow().setColumnObject(columnIndex, x);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>Object</code> value.
-     * <P>
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param x the new column value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateObject(int columnIndex, Object x) throws SQLException {
-        // sanity check.
-        checkIndex(columnIndex);
-        // make sure the cursor is on a valid row
-        checkCursor();
-
-        getCurrentRow().setColumnObject(columnIndex, x);
-    }
-
-    /**
-     * Sets the designated nullable column in the current row or the
-     * insert row of this <code>CachedRowSetImpl</code> object with
-     * <code>null</code> value.
-     * <P>
-     * This method updates a column value in the current row or the insert
-     * row of this rowset, but it does not update the database.
-     * If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateNull(String columnName) throws SQLException {
-        updateNull(getColIdxByName(columnName));
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>boolean</code> value.
-     * <P>
-     * This method updates a column value in the current row or the insert
-     * row of this rowset, but it does not update the database.
-     * If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param x the new column value
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateBoolean(String columnName, boolean x) throws SQLException {
-        updateBoolean(getColIdxByName(columnName), x);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>byte</code> value.
-     * <P>
-     * This method updates a column value in the current row or the insert
-     * row of this rowset, but it does not update the database.
-     * If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param x the new column value
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateByte(String columnName, byte x) throws SQLException {
-        updateByte(getColIdxByName(columnName), x);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>short</code> value.
-     * <P>
-     * This method updates a column value in the current row or the insert
-     * row of this rowset, but it does not update the database.
-     * If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param x the new column value
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateShort(String columnName, short x) throws SQLException {
-        updateShort(getColIdxByName(columnName), x);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>int</code> value.
-     * <P>
-     * This method updates a column value in the current row or the insert
-     * row of this rowset, but it does not update the database.
-     * If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param x the new column value
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateInt(String columnName, int x) throws SQLException {
-        updateInt(getColIdxByName(columnName), x);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>long</code> value.
-     * <P>
-     * This method updates a column value in the current row or the insert
-     * row of this rowset, but it does not update the database.
-     * If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param x the new column value
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateLong(String columnName, long x) throws SQLException {
-        updateLong(getColIdxByName(columnName), x);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>float</code> value.
-     * <P>
-     * This method updates a column value in the current row or the insert
-     * row of this rowset, but it does not update the database.
-     * If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param x the new column value
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateFloat(String columnName, float x) throws SQLException {
-        updateFloat(getColIdxByName(columnName), x);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>double</code> value.
-     *
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param x the new column value
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateDouble(String columnName, double x) throws SQLException {
-        updateDouble(getColIdxByName(columnName), x);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>java.math.BigDecimal</code> object.
-     * <P>
-     * This method updates a column value in the current row or the insert
-     * row of this rowset, but it does not update the database.
-     * If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param x the new column value
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateBigDecimal(String columnName, BigDecimal x) throws SQLException {
-        updateBigDecimal(getColIdxByName(columnName), x);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>String</code> object.
-     *
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param x the new column value
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateString(String columnName, String x) throws SQLException {
-        updateString(getColIdxByName(columnName), x);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>byte</code> array.
-     *
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param x the new column value
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateBytes(String columnName, byte x[]) throws SQLException {
-        updateBytes(getColIdxByName(columnName), x);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>Date</code> object.
-     *
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param x the new column value
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, (3) the type
-     *            of the designated column is not an SQL <code>DATE</code> or
-     *            <code>TIMESTAMP</code>, or (4) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateDate(String columnName, java.sql.Date x) throws SQLException {
-        updateDate(getColIdxByName(columnName), x);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>Time</code> object.
-     *
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param x the new column value
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, (3) the type
-     *            of the designated column is not an SQL <code>TIME</code> or
-     *            <code>TIMESTAMP</code>, or (4) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateTime(String columnName, java.sql.Time x) throws SQLException {
-        updateTime(getColIdxByName(columnName), x);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>Timestamp</code> object.
-     *
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param x the new column value
-     * @throws SQLException if the given column index is out of bounds or
-     *            the cursor is not on one of this rowset's rows or its
-     *            insert row
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, (3) the type
-     *            of the designated column is not an SQL <code>DATE</code>,
-     *            <code>TIME</code>, or <code>TIMESTAMP</code>, or (4) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateTimestamp(String columnName, java.sql.Timestamp x) throws SQLException {
-        updateTimestamp(getColIdxByName(columnName), x);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * ASCII stream value.
-     * <P>
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param x the new column value
-     * @param length the number of one-byte ASCII characters in the stream
-     */
-    public void updateAsciiStream(String columnName,
-    java.io.InputStream x,
-    int length) throws SQLException {
-        updateAsciiStream(getColIdxByName(columnName), x, length);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>java.io.InputStream</code> object.
-     * <P>
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param x the new column value; must be a <code>java.io.InputStream</code>
-     *          containing <code>BINARY</code>, <code>VARBINARY</code>, or
-     *          <code>LONGVARBINARY</code> data
-     * @param length the length of the stream in bytes
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, (3) the data
-     *            in the stream is not binary, or (4) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateBinaryStream(String columnName, java.io.InputStream x, int length) throws SQLException {
-        updateBinaryStream(getColIdxByName(columnName), x, length);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>java.io.Reader</code> object.
-     * <P>
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param reader the new column value; must be a
-     * <code>java.io.Reader</code> containing <code>BINARY</code>,
-     * <code>VARBINARY</code>, <code>LONGVARBINARY</code>, <code>CHAR</code>,
-     * <code>VARCHAR</code>, or <code>LONGVARCHAR</code> data
-     * @param length the length of the stream in characters
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, (3) the data
-     *            in the stream is not a binary or character type, or (4) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateCharacterStream(String columnName,
-    java.io.Reader reader,
-    int length) throws SQLException {
-        updateCharacterStream(getColIdxByName(columnName), reader, length);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>Object</code> value.  The <code>scale</code> parameter
-     * indicates the number of digits to the right of the decimal point
-     * and is ignored if the new column value is not a type that will be
-     *  mapped to an SQL <code>DECIMAL</code> or <code>NUMERIC</code> value.
-     * <P>
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param x the new column value
-     * @param scale the number of digits to the right of the decimal point (for
-     *              <code>DECIMAL</code> and <code>NUMERIC</code> types only)
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateObject(String columnName, Object x, int scale) throws SQLException {
-        updateObject(getColIdxByName(columnName), x, scale);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>Object</code> value.
-     * <P>
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param x the new column value
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateObject(String columnName, Object x) throws SQLException {
-        updateObject(getColIdxByName(columnName), x);
-    }
-
-    /**
-     * Inserts the contents of this <code>CachedRowSetImpl</code> object's insert
-     * row into this rowset immediately following the current row.
-     * If the current row is the
-     * position after the last row or before the first row, the new row will
-     * be inserted at the end of the rowset.  This method also notifies
-     * listeners registered with this rowset that the row has changed.
-     * <P>
-     * The cursor must be on the insert row when this method is called.
-     *
-     * @throws SQLException if (1) the cursor is not on the insert row,
-     *            (2) one or more of the non-nullable columns in the insert
-     *            row has not been given a value, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void insertRow() throws SQLException {
-        int pos;
-
-        if (onInsertRow == false ||
-            insertRow.isCompleteRow(RowSetMD) == false) {
-                throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.failedins").toString());
-        }
-        // Added the setting of parameters that are passed
-        // to setXXX methods after an empty CRS Object is
-        // created through RowSetMetaData object
-        Object [] toInsert = getParams();
-
-        for(int i = 0;i < toInsert.length; i++) {
-          insertRow.setColumnObject(i+1,toInsert[i]);
-        }
-
-        Row insRow = new Row(RowSetMD.getColumnCount(),
-        insertRow.getOrigRow());
-        insRow.setInserted();
-        /*
-         * The new row is inserted into the RowSet
-         * immediately following the current row.
-         *
-         * If we are afterlast then the rows are
-         * inserted at the end.
-         */
-        if (currentRow >= numRows || currentRow < 0) {
-            pos = numRows;
-        } else {
-            pos = currentRow;
-        }
-
-        rvh.add(pos, insRow);
-        ++numRows;
-        // notify the listeners that the row changed.
-        notifyRowChanged();
-    }
-
-    /**
-     * Marks the current row of this <code>CachedRowSetImpl</code> object as
-     * updated and notifies listeners registered with this rowset that the
-     * row has changed.
-     * <P>
-     * This method  cannot be called when the cursor is on the insert row, and
-     * it should be called before the cursor moves to another row.  If it is
-     * called after the cursor moves to another row, this method has no effect,
-     * and the updates made before the cursor moved will be lost.
-     *
-     * @throws SQLException if the cursor is on the insert row or this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateRow() throws SQLException {
-        // make sure we aren't on the insert row
-        if (onInsertRow == true) {
-            throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.updateins").toString());
-        }
-
-        ((Row)getCurrentRow()).setUpdated();
-
-        // notify the listeners that the row changed.
-        notifyRowChanged();
-    }
-
-    /**
-     * Deletes the current row from this <code>CachedRowSetImpl</code> object and
-     * notifies listeners registered with this rowset that a row has changed.
-     * This method cannot be called when the cursor is on the insert row.
-     * <P>
-     * This method marks the current row as deleted, but it does not delete
-     * the row from the underlying data source.  The method
-     * <code>acceptChanges</code> must be called to delete the row in
-     * the data source.
-     *
-     * @throws SQLException if (1) this method is called when the cursor
-     *            is on the insert row, before the first row, or after the
-     *            last row or (2) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void deleteRow() throws SQLException {
-        // make sure the cursor is on a valid row
-        checkCursor();
-
-        ((Row)getCurrentRow()).setDeleted();
-        ++numDeleted;
-
-        // notify the listeners that the row changed.
-        notifyRowChanged();
-    }
-
-    /**
-     * Sets the current row with its original value and marks the row as
-     * not updated, thus undoing any changes made to the row since the
-     * last call to the methods <code>updateRow</code> or <code>deleteRow</code>.
-     * This method should be called only when the cursor is on a row in
-     * this rowset.
-     *
-     * @throws SQLException if the cursor is on the insert row, before the
-     *            first row, or after the last row
-     */
-    public void refreshRow() throws SQLException {
-        // make sure we are on a row
-        checkCursor();
-
-        // don't want this to happen...
-        if (onInsertRow == true) {
-            throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.invalidcp").toString());
-        }
-
-        Row currentRow = (Row)getCurrentRow();
-        // just undo any changes made to this row.
-        currentRow.clearUpdated();
-
-    }
-
-    /**
-     * Rolls back any updates made to the current row of this
-     * <code>CachedRowSetImpl</code> object and notifies listeners that
-     * a row has changed.  To have an effect, this method
-     * must be called after an <code>updateXXX</code> method has been
-     * called and before the method <code>updateRow</code> has been called.
-     * If no updates have been made or the method <code>updateRow</code>
-     * has already been called, this method has no effect.
-     *
-     * @throws SQLException if the cursor is on the insert row, before the
-     *            first row, or after the last row
-     */
-    public void cancelRowUpdates() throws SQLException {
-        // make sure we are on a row
-        checkCursor();
-
-        // don't want this to happen...
-        if (onInsertRow == true) {
-            throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.invalidcp").toString());
-        }
-
-        Row currentRow = (Row)getCurrentRow();
-        if (currentRow.getUpdated() == true) {
-            currentRow.clearUpdated();
-            notifyRowChanged();
-        }
-    }
-
-    /**
-     * Moves the cursor for this <code>CachedRowSetImpl</code> object
-     * to the insert row.  The current row in the rowset is remembered
-     * while the cursor is on the insert row.
-     * <P>
-     * The insert row is a special row associated with an updatable
-     * rowset.  It is essentially a buffer where a new row may
-     * be constructed by calling the appropriate <code>updateXXX</code>
-     * methods to assign a value to each column in the row.  A complete
-     * row must be constructed; that is, every column that is not nullable
-     * must be assigned a value.  In order for the new row to become part
-     * of this rowset, the method <code>insertRow</code> must be called
-     * before the cursor is moved back to the rowset.
-     * <P>
-     * Only certain methods may be invoked while the cursor is on the insert
-     * row; many methods throw an exception if they are called while the
-     * cursor is there.  In addition to the <code>updateXXX</code>
-     * and <code>insertRow</code> methods, only the <code>getXXX</code> methods
-     * may be called when the cursor is on the insert row.  A <code>getXXX</code>
-     * method should be called on a column only after an <code>updateXXX</code>
-     * method has been called on that column; otherwise, the value returned is
-     * undetermined.
-     *
-     * @throws SQLException if this <code>CachedRowSetImpl</code> object is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void moveToInsertRow() throws SQLException {
-        if (getConcurrency() == ResultSet.CONCUR_READ_ONLY) {
-            throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.movetoins").toString());
-        }
-        if (insertRow == null) {
-            if (RowSetMD == null)
-                throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.movetoins1").toString());
-            int numCols = RowSetMD.getColumnCount();
-            if (numCols > 0) {
-                insertRow = new InsertRow(numCols);
-            } else {
-                throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.movetoins2").toString());
-            }
-        }
-        onInsertRow = true;
-        // %%% setCurrentRow called in BaseRow
-
-        currentRow = cursorPos;
-        cursorPos = -1;
-
-        insertRow.initInsertRow();
-    }
-
-    /**
-     * Moves the cursor for this <code>CachedRowSetImpl</code> object to
-     * the current row.  The current row is the row the cursor was on
-     * when the method <code>moveToInsertRow</code> was called.
-     * <P>
-     * Calling this method has no effect unless it is called while the
-     * cursor is on the insert row.
-     *
-     * @throws SQLException if an error occurs
-     */
-    public void moveToCurrentRow() throws SQLException {
-        if (onInsertRow == false) {
-            return;
-        } else {
-            cursorPos = currentRow;
-            onInsertRow = false;
-        }
-    }
-
-    /**
-     * Returns <code>null</code>.
-     *
-     * @return <code>null</code>
-     * @throws SQLException if an error occurs
-     */
-    public Statement getStatement() throws SQLException {
-        return null;
-    }
-
-    /**
-     * Retrieves the value of the designated column in this
-     * <code>CachedRowSetImpl</code> object as an <code>Object</code> in
-     * the Java programming language, using the given
-     * <code>java.util.Map</code> object to custom map the value if
-     * appropriate.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param map a <code>java.util.Map</code> object showing the mapping
-     *            from SQL type names to classes in the Java programming
-     *            language
-     * @return an <code>Object</code> representing the SQL value
-     * @throws SQLException if the given column index is out of bounds or
-     *            the cursor is not on one of this rowset's rows or its
-     *            insert row
-     */
-     public Object getObject(int columnIndex,
-                             java.util.Map<String,Class<?>> map)
-         throws SQLException
-     {
-        Object value;
-
-        // sanity check.
-        checkIndex(columnIndex);
-        // make sure the cursor is on a valid row
-        checkCursor();
-
-        setLastValueNull(false);
-        value = getCurrentRow().getColumnObject(columnIndex);
-
-        // check for SQL NULL
-        if (value == null) {
-            setLastValueNull(true);
-            return null;
-        }
-        if (value instanceof Struct) {
-            Struct s = (Struct)value;
-
-            // look up the class in the map
-            Class c = (Class)map.get(s.getSQLTypeName());
-            if (c != null) {
-                // create new instance of the class
-                SQLData obj = null;
-                try {
-                    obj = (SQLData)c.newInstance();
-                } catch (java.lang.InstantiationException ex) {
-                    throw new SQLException(MessageFormat.format(resBundle.handleGetObject("cachedrowsetimpl.unableins").toString(),
-                    ex.getMessage()));
-                } catch (java.lang.IllegalAccessException ex) {
-                    throw new SQLException(MessageFormat.format(resBundle.handleGetObject("cachedrowsetimpl.unableins").toString(),
-                    ex.getMessage()));
-                }
-                // get the attributes from the struct
-                Object attribs[] = s.getAttributes(map);
-                // create the SQLInput "stream"
-                SQLInputImpl sqlInput = new SQLInputImpl(attribs, map);
-                // read the values...
-                obj.readSQL(sqlInput, s.getSQLTypeName());
-                return (Object)obj;
-            }
-        }
-        return value;
-    }
-
-    /**
-     * Retrieves the value of the designated column in this
-     * <code>CachedRowSetImpl</code> object as a <code>Ref</code> object
-     * in the Java programming language.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @return a <code>Ref</code> object representing an SQL<code> REF</code> value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) the designated column does not store an
-     *            SQL <code>REF</code> value
-     * @see #getRef(String)
-     */
-    public Ref getRef(int columnIndex) throws SQLException {
-        Ref value;
-
-        // sanity check.
-        checkIndex(columnIndex);
-        // make sure the cursor is on a valid row
-        checkCursor();
-
-        if (RowSetMD.getColumnType(columnIndex) != java.sql.Types.REF) {
-            throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.dtypemismt").toString());
-        }
-
-        setLastValueNull(false);
-        value = (Ref)(getCurrentRow().getColumnObject(columnIndex));
-
-        // check for SQL NULL
-        if (value == null) {
-            setLastValueNull(true);
-            return null;
-        }
-
-        return value;
-    }
-
-    /**
-     * Retrieves the value of the designated column in this
-     * <code>CachedRowSetImpl</code> object as a <code>Blob</code> object
-     * in the Java programming language.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @return a <code>Blob</code> object representing an SQL <code>BLOB</code> value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) the designated column does not store an
-     *            SQL <code>BLOB</code> value
-     * @see #getBlob(String)
-     */
-    public Blob getBlob(int columnIndex) throws SQLException {
-        Blob value;
-
-        // sanity check.
-        checkIndex(columnIndex);
-        // make sure the cursor is on a valid row
-        checkCursor();
-
-        if (RowSetMD.getColumnType(columnIndex) != java.sql.Types.BLOB) {
-            System.out.println(MessageFormat.format(resBundle.handleGetObject("cachedrowsetimpl.type").toString(), RowSetMD.getColumnType(columnIndex)));
-            throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.dtypemismt").toString());
-        }
-
-        setLastValueNull(false);
-        value = (Blob)(getCurrentRow().getColumnObject(columnIndex));
-
-        // check for SQL NULL
-        if (value == null) {
-            setLastValueNull(true);
-            return null;
-        }
-
-        return value;
-    }
-
-    /**
-     * Retrieves the value of the designated column in this
-     * <code>CachedRowSetImpl</code> object as a <code>Clob</code> object
-     * in the Java programming language.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @return a <code>Clob</code> object representing an SQL <code>CLOB</code> value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) the designated column does not store an
-     *            SQL <code>CLOB</code> value
-     * @see #getClob(String)
-     */
-    public Clob getClob(int columnIndex) throws SQLException {
-        Clob value;
-
-        // sanity check.
-        checkIndex(columnIndex);
-        // make sure the cursor is on a valid row
-        checkCursor();
-
-        if (RowSetMD.getColumnType(columnIndex) != java.sql.Types.CLOB) {
-            System.out.println(MessageFormat.format(resBundle.handleGetObject("cachedrowsetimpl.type").toString(), RowSetMD.getColumnType(columnIndex)));
-            throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.dtypemismt").toString());
-        }
-
-        setLastValueNull(false);
-        value = (Clob)(getCurrentRow().getColumnObject(columnIndex));
-
-        // check for SQL NULL
-        if (value == null) {
-            setLastValueNull(true);
-            return null;
-        }
-
-        return value;
-    }
-
-    /**
-     * Retrieves the value of the designated column in this
-     * <code>CachedRowSetImpl</code> object as an <code>Array</code> object
-     * in the Java programming language.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @return an <code>Array</code> object representing an SQL
-     *         <code>ARRAY</code> value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) the designated column does not store an
-     *            SQL <code>ARRAY</code> value
-     * @see #getArray(String)
-     */
-    public Array getArray(int columnIndex) throws SQLException {
-        java.sql.Array value;
-
-        // sanity check.
-        checkIndex(columnIndex);
-        // make sure the cursor is on a valid row
-        checkCursor();
-
-        if (RowSetMD.getColumnType(columnIndex) != java.sql.Types.ARRAY) {
-            throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.dtypemismt").toString());
-        }
-
-        setLastValueNull(false);
-        value = (java.sql.Array)(getCurrentRow().getColumnObject(columnIndex));
-
-        // check for SQL NULL
-        if (value == null) {
-            setLastValueNull(true);
-            return null;
-        }
-
-        return value;
-    }
-
-    /**
-     * Retrieves the value of the designated column in this
-     * <code>CachedRowSetImpl</code> object as an <code>Object</code> in
-     * the Java programming language, using the given
-     * <code>java.util.Map</code> object to custom map the value if
-     * appropriate.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param map a <code>java.util.Map</code> object showing the mapping
-     *        from SQL type names to classes in the Java programming
-     *        language
-     * @return an <code>Object</code> representing the SQL value
-     * @throws SQLException if the given column name is not the name of
-     *         a column in this rowset or the cursor is not on one of
-     *         this rowset's rows or its insert row
-     */
-    public Object getObject(String columnName,
-                            java.util.Map<String,Class<?>> map)
-    throws SQLException {
-        return getObject(getColIdxByName(columnName), map);
-    }
-
-    /**
-     * Retrieves the value of the designated column in this
-     * <code>CachedRowSetImpl</code> object as a <code>Ref</code> object
-     * in the Java programming language.
-     *
-     * @param colName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @return a <code>Ref</code> object representing an SQL<code> REF</code> value
-     * @throws SQLException  if (1) the given column name is not the name of
-     *            a column in this rowset, (2) the cursor is not on one of
-     *            this rowset's rows or its insert row, or (3) the column value
-     *            is not an SQL <code>REF</code> value
-     * @see #getRef(int)
-     */
-    public Ref getRef(String colName) throws SQLException {
-        return getRef(getColIdxByName(colName));
-    }
-
-    /**
-     * Retrieves the value of the designated column in this
-     * <code>CachedRowSetImpl</code> object as a <code>Blob</code> object
-     * in the Java programming language.
-     *
-     * @param colName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @return a <code>Blob</code> object representing an SQL <code>BLOB</code> value
-     * @throws SQLException if (1) the given column name is not the name of
-     *            a column in this rowset, (2) the cursor is not on one of
-     *            this rowset's rows or its insert row, or (3) the designated
-     *            column does not store an SQL <code>BLOB</code> value
-     * @see #getBlob(int)
-     */
-    public Blob getBlob(String colName) throws SQLException {
-        return getBlob(getColIdxByName(colName));
-    }
-
-    /**
-     * Retrieves the value of the designated column in this
-     * <code>CachedRowSetImpl</code> object as a <code>Clob</code> object
-     * in the Java programming language.
-     *
-     * @param colName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @return a <code>Clob</code> object representing an SQL
-     *         <code>CLOB</code> value
-     * @throws SQLException if (1) the given column name is not the name of
-     *            a column in this rowset, (2) the cursor is not on one of
-     *            this rowset's rows or its insert row, or (3) the designated
-     *            column does not store an SQL <code>CLOB</code> value
-     * @see #getClob(int)
-     */
-    public Clob getClob(String colName) throws SQLException {
-        return getClob(getColIdxByName(colName));
-    }
-
-    /**
-     * Retrieves the value of the designated column in this
-     * <code>CachedRowSetImpl</code> object as an <code>Array</code> object
-     * in the Java programming langugage.
-     *
-     * @param colName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @return an <code>Array</code> object representing an SQL
-     *         <code>ARRAY</code> value
-     * @throws SQLException if (1) the given column name is not the name of
-     *            a column in this rowset, (2) the cursor is not on one of
-     *            this rowset's rows or its insert row, or (3) the designated
-     *            column does not store an SQL <code>ARRAY</code> value
-     * @see #getArray(int)
-     */
-    public Array getArray(String colName) throws SQLException {
-        return getArray(getColIdxByName(colName));
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>CachedRowSetImpl</code> object as a <code>java.sql.Date</code>
-     * object, using the given <code>Calendar</code> object to construct an
-     * appropriate millisecond value for the date.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in the rowset
-     * @param cal the <code>java.util.Calendar</code> object to use in
-     *            constructing the date
-     * @return the column value; if the value is SQL <code>NULL</code>,
-     *         the result is <code>null</code>
-     * @throws SQLException if (1) the given column name is not the name of
-     *            a column in this rowset, (2) the cursor is not on one of
-     *            this rowset's rows or its insert row, or (3) the designated
-     *            column does not store an SQL <code>DATE</code> or
-     *            <code>TIMESTAMP</code> value
-     */
-    public java.sql.Date getDate(int columnIndex, Calendar cal) throws SQLException {
-        Object value;
-
-        // sanity check.
-        checkIndex(columnIndex);
-        // make sure the cursor is on a valid row
-        checkCursor();
-
-        setLastValueNull(false);
-        value = getCurrentRow().getColumnObject(columnIndex);
-
-        // check for SQL NULL
-        if (value == null) {
-            setLastValueNull(true);
-            return null;
-        }
-
-        value = convertTemporal(value,
-        RowSetMD.getColumnType(columnIndex),
-        java.sql.Types.DATE);
-
-        // create a default calendar
-        Calendar defaultCal = Calendar.getInstance();
-        // set this Calendar to the time we have
-        defaultCal.setTime((java.util.Date)value);
-
-        /*
-         * Now we can pull the pieces of the date out
-         * of the default calendar and put them into
-         * the user provided calendar
-         */
-        cal.set(Calendar.YEAR, defaultCal.get(Calendar.YEAR));
-        cal.set(Calendar.MONTH, defaultCal.get(Calendar.MONTH));
-        cal.set(Calendar.DAY_OF_MONTH, defaultCal.get(Calendar.DAY_OF_MONTH));
-
-        /*
-         * This looks a little odd but it is correct -
-         * Calendar.getTime() returns a Date...
-         */
-        return new java.sql.Date(cal.getTime().getTime());
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>CachedRowSetImpl</code> object as a <code>java.sql.Date</code>
-     * object, using the given <code>Calendar</code> object to construct an
-     * appropriate millisecond value for the date.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param cal the <code>java.util.Calendar</code> object to use in
-     *            constructing the date
-     * @return the column value; if the value is SQL <code>NULL</code>,
-     *         the result is <code>null</code>
-     * @throws SQLException if (1) the given column name is not the name of
-     *            a column in this rowset, (2) the cursor is not on one of
-     *            this rowset's rows or its insert row, or (3) the designated
-     *            column does not store an SQL <code>DATE</code> or
-     *            <code>TIMESTAMP</code> value
-     */
-    public java.sql.Date getDate(String columnName, Calendar cal) throws SQLException {
-        return getDate(getColIdxByName(columnName), cal);
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>CachedRowSetImpl</code> object as a <code>java.sql.Time</code>
-     * object, using the given <code>Calendar</code> object to construct an
-     * appropriate millisecond value for the date.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in the rowset
-     * @param cal the <code>java.util.Calendar</code> object to use in
-     *            constructing the date
-     * @return the column value; if the value is SQL <code>NULL</code>,
-     *         the result is <code>null</code>
-     * @throws SQLException if (1) the given column name is not the name of
-     *            a column in this rowset, (2) the cursor is not on one of
-     *            this rowset's rows or its insert row, or (3) the designated
-     *            column does not store an SQL <code>TIME</code> or
-     *            <code>TIMESTAMP</code> value
-     */
-    public java.sql.Time getTime(int columnIndex, Calendar cal) throws SQLException {
-        Object value;
-
-        // sanity check.
-        checkIndex(columnIndex);
-        // make sure the cursor is on a valid row
-        checkCursor();
-
-        setLastValueNull(false);
-        value = getCurrentRow().getColumnObject(columnIndex);
-
-        // check for SQL NULL
-        if (value == null) {
-            setLastValueNull(true);
-            return null;
-        }
-
-        value = convertTemporal(value,
-        RowSetMD.getColumnType(columnIndex),
-        java.sql.Types.TIME);
-
-        // create a default calendar
-        Calendar defaultCal = Calendar.getInstance();
-        // set the time in the default calendar
-        defaultCal.setTime((java.util.Date)value);
-
-        /*
-         * Now we can pull the pieces of the date out
-         * of the default calendar and put them into
-         * the user provided calendar
-         */
-        cal.set(Calendar.HOUR_OF_DAY, defaultCal.get(Calendar.HOUR_OF_DAY));
-        cal.set(Calendar.MINUTE, defaultCal.get(Calendar.MINUTE));
-        cal.set(Calendar.SECOND, defaultCal.get(Calendar.SECOND));
-
-        return new java.sql.Time(cal.getTime().getTime());
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>CachedRowSetImpl</code> object as a <code>java.sql.Time</code>
-     * object, using the given <code>Calendar</code> object to construct an
-     * appropriate millisecond value for the date.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param cal the <code>java.util.Calendar</code> object to use in
-     *            constructing the date
-     * @return the column value; if the value is SQL <code>NULL</code>,
-     *         the result is <code>null</code>
-     * @throws SQLException if (1) the given column name is not the name of
-     *            a column in this rowset, (2) the cursor is not on one of
-     *            this rowset's rows or its insert row, or (3) the designated
-     *            column does not store an SQL <code>TIME</code> or
-     *            <code>TIMESTAMP</code> value
-     */
-    public java.sql.Time getTime(String columnName, Calendar cal) throws SQLException {
-        return getTime(getColIdxByName(columnName), cal);
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>CachedRowSetImpl</code> object as a <code>java.sql.Timestamp</code>
-     * object, using the given <code>Calendar</code> object to construct an
-     * appropriate millisecond value for the date.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in the rowset
-     * @param cal the <code>java.util.Calendar</code> object to use in
-     *            constructing the date
-     * @return the column value; if the value is SQL <code>NULL</code>,
-     *         the result is <code>null</code>
-     * @throws SQLException if (1) the given column name is not the name of
-     *            a column in this rowset, (2) the cursor is not on one of
-     *            this rowset's rows or its insert row, or (3) the designated
-     *            column does not store an SQL <code>TIME</code> or
-     *            <code>TIMESTAMP</code> value
-     */
-    public java.sql.Timestamp getTimestamp(int columnIndex, Calendar cal) throws SQLException {
-        Object value;
-
-        // sanity check.
-        checkIndex(columnIndex);
-        // make sure the cursor is on a valid row
-        checkCursor();
-
-        setLastValueNull(false);
-        value = getCurrentRow().getColumnObject(columnIndex);
-
-        // check for SQL NULL
-        if (value == null) {
-            setLastValueNull(true);
-            return null;
-        }
-
-        value = convertTemporal(value,
-        RowSetMD.getColumnType(columnIndex),
-        java.sql.Types.TIMESTAMP);
-
-        // create a default calendar
-        Calendar defaultCal = Calendar.getInstance();
-        // set the time in the default calendar
-        defaultCal.setTime((java.util.Date)value);
-
-        /*
-         * Now we can pull the pieces of the date out
-         * of the default calendar and put them into
-         * the user provided calendar
-         */
-        cal.set(Calendar.YEAR, defaultCal.get(Calendar.YEAR));
-        cal.set(Calendar.MONTH, defaultCal.get(Calendar.MONTH));
-        cal.set(Calendar.DAY_OF_MONTH, defaultCal.get(Calendar.DAY_OF_MONTH));
-        cal.set(Calendar.HOUR_OF_DAY, defaultCal.get(Calendar.HOUR_OF_DAY));
-        cal.set(Calendar.MINUTE, defaultCal.get(Calendar.MINUTE));
-        cal.set(Calendar.SECOND, defaultCal.get(Calendar.SECOND));
-
-        return new java.sql.Timestamp(cal.getTime().getTime());
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>CachedRowSetImpl</code> object as a
-     * <code>java.sql.Timestamp</code> object, using the given
-     * <code>Calendar</code> object to construct an appropriate
-     * millisecond value for the date.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param cal the <code>java.util.Calendar</code> object to use in
-     *            constructing the date
-     * @return the column value; if the value is SQL <code>NULL</code>,
-     *         the result is <code>null</code>
-     * @throws SQLException if (1) the given column name is not the name of
-     *            a column in this rowset, (2) the cursor is not on one of
-     *            this rowset's rows or its insert row, or (3) the designated
-     *            column does not store an SQL <code>DATE</code>,
-     *            <code>TIME</code>, or <code>TIMESTAMP</code> value
-     */
-    public java.sql.Timestamp getTimestamp(String columnName, Calendar cal) throws SQLException {
-        return getTimestamp(getColIdxByName(columnName), cal);
-    }
-
-    /*
-     * RowSetInternal Interface
-     */
-
-    /**
-     * Retrieves the <code>Connection</code> object passed to this
-     * <code>CachedRowSetImpl</code> object.  This connection may be
-     * used to populate this rowset with data or to write data back
-     * to its underlying data source.
-     *
-     * @return the <code>Connection</code> object passed to this rowset;
-     *         may be <code>null</code> if there is no connection
-     * @throws SQLException if an error occurs
-     */
-    public Connection getConnection() throws SQLException{
-        return conn;
-    }
-
-    /**
-     * Sets the metadata for this <code>CachedRowSetImpl</code> object
-     * with the given <code>RowSetMetaData</code> object.
-     *
-     * @param md a <code>RowSetMetaData</code> object instance containing
-     *            metadata about the columsn in the rowset
-     * @throws SQLException if invalid meta data is supplied to the
-     *            rowset
-     */
-    public void setMetaData(RowSetMetaData md) throws SQLException {
-        RowSetMD =(RowSetMetaDataImpl) md;
-    }
-
-    /**
-     * Returns a result set containing the original value of the rowset. The
-     * original value is the state of the <code>CachedRowSetImpl</code> after the
-     * last population or synchronization (whichever occured most recently) with
-     * the data source.
-     * <p>
-     * The cursor is positioned before the first row in the result set.
-     * Only rows contained in the result set returned by <code>getOriginal()</code>
-     * are said to have an original value.
-     *
-     * @return the original result set of the rowset
-     * @throws SQLException if an error occurs produce the
-     *           <code>ResultSet</code> object
-     */
-    public ResultSet getOriginal() throws SQLException {
-        CachedRowSetImpl crs = new CachedRowSetImpl();
-        crs.RowSetMD = RowSetMD;
-        crs.numRows = numRows;
-        crs.cursorPos = 0;
-
-        // make sure we don't get someone playing with these
-        // %%% is this now necessary ???
-        //crs.setReader(null);
-        //crs.setWriter(null);
-        int colCount = RowSetMD.getColumnCount();
-        Row orig;
-
-        for (Iterator i = rvh.iterator(); i.hasNext();) {
-            orig = new Row(colCount, ((Row)i.next()).getOrigRow());
-            crs.rvh.add(orig);
-        }
-        return (ResultSet)crs;
-    }
-
-    /**
-     * Returns a result set containing the original value of the current
-     * row only.
-     * The original value is the state of the <code>CachedRowSetImpl</code> after
-     * the last population or synchronization (whichever occured most recently)
-     * with the data source.
-     *
-     * @return the original result set of the row
-     * @throws SQLException if there is no current row
-     * @see #setOriginalRow
-     */
-    public ResultSet getOriginalRow() throws SQLException {
-        CachedRowSetImpl crs = new CachedRowSetImpl();
-        crs.RowSetMD = RowSetMD;
-        crs.numRows = 1;
-        crs.cursorPos = 0;
-        crs.setTypeMap(this.getTypeMap());
-
-        // make sure we don't get someone playing with these
-        // %%% is this now necessary ???
-        //crs.setReader(null);
-        //crs.setWriter(null);
-
-        Row orig = new Row(RowSetMD.getColumnCount(),
-        getCurrentRow().getOrigRow());
-
-        crs.rvh.add(orig);
-
-        return (ResultSet)crs;
-
-    }
-
-    /**
-     * Marks the current row in this rowset as being an original row.
-     *
-     * @throws SQLException if there is no current row
-     * @see #getOriginalRow
-     */
-    public void setOriginalRow() throws SQLException {
-        if (onInsertRow == true) {
-            throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.invalidop").toString());
-        }
-
-        Row row = (Row)getCurrentRow();
-        makeRowOriginal(row);
-
-        // this can happen if deleted rows are being shown
-        if (row.getDeleted() == true) {
-            removeCurrentRow();
-        }
-    }
-
-    /**
-     * Makes the given row of this rowset the original row by clearing any
-     * settings that mark the row as having been inserted, deleted, or updated.
-     * This method is called internally by the methods
-     * <code>setOriginalRow</code>
-     * and <code>setOriginal</code>.
-     *
-     * @param row the row to be made the original row
-     */
-    private void makeRowOriginal(Row row) {
-        if (row.getInserted() == true) {
-            row.clearInserted();
-        }
-
-        if (row.getUpdated() == true) {
-            row.moveCurrentToOrig();
-        }
-    }
-
-    /**
-     * Marks all rows in this rowset as being original rows. Any updates
-     * made to the rows become the original values for the rowset.
-     * Calls to the method <code>setOriginal</code> connot be reversed.
-     *
-     * @throws SQLException if an error occurs
-     */
-    public void setOriginal() throws SQLException {
-        for (Iterator i = rvh.iterator(); i.hasNext();) {
-            Row row = (Row)i.next();
-            makeRowOriginal(row);
-            // remove deleted rows from the collection.
-            if (row.getDeleted() == true) {
-                i.remove();
-                --numRows;
-            }
-        }
-        numDeleted = 0;
-
-        // notify any listeners that the rowset has changed
-        notifyRowSetChanged();
-    }
-
-    /**
-     * Returns an identifier for the object (table) that was used to create this
-     * rowset.
-     *
-     * @return a <code>String</code> object that identifies the table from
-     *         which this <code>CachedRowSetImpl</code> object was derived
-     * @throws SQLException if an error occurs
-     */
-    public String getTableName() throws SQLException {
-        return tableName;
-    }
-
-    /**
-     * Sets the identifier for the table from which this rowset was derived
-     * to the given table name.
-     *
-     * @param tabName a <code>String</code> object that identifies the
-     *          table from which this <code>CachedRowSetImpl</code> object
-     *          was derived
-     * @throws SQLException if an error occurs
-     */
-    public void setTableName(String tabName) throws SQLException {
-        if (tabName == null)
-            throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.tablename").toString());
-        else
-            tableName = tabName;
-    }
-
-    /**
-     * Returns the columns that make a key to uniquely identify a
-     * row in this <code>CachedRowSetImpl</code> object.
-     *
-     * @return an array of column numbers that constitutes a primary
-     *           key for this rowset. This array should be empty
-     *           if no column is representitive of a primary key
-     * @throws SQLException if the rowset is empty or no columns
-     *           are designated as primary keys
-     * @see #setKeyColumns
-     */
-    public int[] getKeyColumns() throws SQLException {
-        return keyCols;
-    }
-
-
-    /**
-     * Sets this <code>CachedRowSetImpl</code> object's
-     * <code>keyCols</code> field with the given array of column
-     * numbers, which forms a key for uniquely identifying a row
-     * in this rowset.
-     *
-     * @param keys an array of <code>int</code> indicating the
-     *        columns that form a primary key for this
-     *        <code>CachedRowSetImpl</code> object; every
-     *        element in the array must be greater than
-     *        <code>0</code> and less than or equal to the number
-     *        of columns in this rowset
-     * @throws SQLException if any of the numbers in the
-     *            given array is not valid for this rowset
-     * @see #getKeyColumns
-     */
-    public void setKeyColumns(int [] keys) throws SQLException {
-        int numCols = 0;
-        if (RowSetMD != null) {
-            numCols = RowSetMD.getColumnCount();
-            if (keys.length > numCols)
-                throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.keycols").toString());
-        }
-        keyCols = new int[keys.length];
-        for (int i = 0; i < keys.length; i++) {
-            if (RowSetMD != null && (keys[i] <= 0 ||
-            keys[i] > numCols)) {
-                throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.invalidcol").toString() +
-                keys[i]);
-            }
-            keyCols[i] = keys[i];
-        }
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>Ref</code> value.
-     *
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param ref the new column <code>java.sql.Ref</code> value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *        (2) the cursor is not on one of this rowset's rows or its
-     *        insert row, or (3) this rowset is
-     *        <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateRef(int columnIndex, java.sql.Ref ref) throws SQLException {
-        // sanity check.
-        checkIndex(columnIndex);
-        // make sure the cursor is on a valid row
-        checkCursor();
-
-        // SerialClob will help in getting the byte array and storing it.
-        // We need to be checking DatabaseMetaData.locatorsUpdatorCopy()
-        // or through RowSetMetaData.locatorsUpdatorCopy()
-        getCurrentRow().setColumnObject(columnIndex, new SerialRef(ref));
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>double</code> value.
-     *
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param ref the new column <code>java.sql.Ref</code> value
-     * @throws SQLException if (1) the given column name does not match the
-     *        name of a column in this rowset, (2) the cursor is not on
-     *        one of this rowset's rows or its insert row, or (3) this
-     *        rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateRef(String columnName, java.sql.Ref ref) throws SQLException {
-        updateRef(getColIdxByName(columnName), ref);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>double</code> value.
-     *
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param c the new column <code>Clob</code> value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *        (2) the cursor is not on one of this rowset's rows or its
-     *        insert row, or (3) this rowset is
-     *        <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateClob(int columnIndex, Clob c) throws SQLException {
-        // sanity check.
-        checkIndex(columnIndex);
-        // make sure the cursor is on a valid row
-        checkCursor();
-
-        // SerialClob will help in getting the byte array and storing it.
-        // We need to be checking DatabaseMetaData.locatorsUpdatorCopy()
-        // or through RowSetMetaData.locatorsUpdatorCopy()
-
-        if(dbmslocatorsUpdateCopy){
-           getCurrentRow().setColumnObject(columnIndex, new SerialClob(c));
-        }
-        else{
-           throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.opnotsupp").toString());
-        }
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>double</code> value.
-     *
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param c the new column <code>Clob</code> value
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateClob(String columnName, Clob c) throws SQLException {
-        updateClob(getColIdxByName(columnName), c);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>java.sql.Blob</code> value.
-     *
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param b the new column <code>Blob</code> value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateBlob(int columnIndex, Blob b) throws SQLException {
-        // sanity check.
-        checkIndex(columnIndex);
-        // make sure the cursor is on a valid row
-        checkCursor();
-
-        // SerialBlob will help in getting the byte array and storing it.
-        // We need to be checking DatabaseMetaData.locatorsUpdatorCopy()
-        // or through RowSetMetaData.locatorsUpdatorCopy()
-
-        if(dbmslocatorsUpdateCopy){
-           getCurrentRow().setColumnObject(columnIndex, new SerialBlob(b));
-        }
-        else{
-           throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.opnotsupp").toString());
-        }
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>java.sql.Blob </code> value.
-     *
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param b the new column <code>Blob</code> value
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateBlob(String columnName, Blob b) throws SQLException {
-        updateBlob(getColIdxByName(columnName), b);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>java.sql.Array</code> values.
-     *
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param a the new column <code>Array</code> value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateArray(int columnIndex, Array a) throws SQLException {
-        // sanity check.
-        checkIndex(columnIndex);
-        // make sure the cursor is on a valid row
-        checkCursor();
-
-        // SerialArray will help in getting the byte array and storing it.
-        // We need to be checking DatabaseMetaData.locatorsUpdatorCopy()
-        // or through RowSetMetaData.locatorsUpdatorCopy()
-        getCurrentRow().setColumnObject(columnIndex, new SerialArray(a));
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>java.sql.Array</code> value.
-     *
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param a the new column <code>Array</code> value
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateArray(String columnName, Array a) throws SQLException {
-        updateArray(getColIdxByName(columnName), a);
-    }
-
-
-    /**
-     * Retrieves the value of the designated column in this
-     * <code>CachedRowSetImpl</code> object as a <code>java.net.URL</code> object
-     * in the Java programming language.
-     *
-     * @return a java.net.URL object containing the resource reference described by
-     * the URL
-     * @throws SQLException if (1) the given column index is out of bounds,
-     * (2) the cursor is not on one of this rowset's rows or its
-     * insert row, or (3) the designated column does not store an
-     * SQL <code>DATALINK</code> value.
-     * @see #getURL(String)
-     */
-    public java.net.URL getURL(int columnIndex) throws SQLException {
-        //throw new SQLException("Operation not supported");
-
-        java.net.URL value;
-
-        // sanity check.
-        checkIndex(columnIndex);
-        // make sure the cursor is on a valid row
-        checkCursor();
-
-        if (RowSetMD.getColumnType(columnIndex) != java.sql.Types.DATALINK) {
-            throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.dtypemismt").toString());
-        }
-
-        setLastValueNull(false);
-        value = (java.net.URL)(getCurrentRow().getColumnObject(columnIndex));
-
-        // check for SQL NULL
-        if (value == null) {
-            setLastValueNull(true);
-            return null;
-        }
-
-        return value;
-    }
-
-    /**
-     * Retrieves the value of the designated column in this
-     * <code>CachedRowSetImpl</code> object as a <code>java.net.URL</code> object
-     * in the Java programming language.
-     *
-     * @return a java.net.URL object containing the resource reference described by
-     * the URL
-     * @throws SQLException if (1) the given column name not the name of a column
-     * in this rowset, or
-     * (2) the cursor is not on one of this rowset's rows or its
-     * insert row, or (3) the designated column does not store an
-     * SQL <code>DATALINK</code> value.
-     * @see #getURL(int)
-     */
-    public java.net.URL getURL(String columnName) throws SQLException {
-        return getURL(getColIdxByName(columnName));
-
-    }
-
-    /**
-     * The first warning reported by calls on this <code>CachedRowSetImpl</code>
-     * object is returned. Subsequent <code>CachedRowSetImpl</code> warnings will
-     * be chained to this <code>SQLWarning</code>. All <code>RowSetWarnings</code>
-     * warnings are generated in the disconnected environment and remain a
-     * seperate warning chain to that provided by the <code>getWarnings</code>
-     * method.
-     *
-     * <P>The warning chain is automatically cleared each time a new
-     * row is read.
-     *
-     * <P><B>Note:</B> This warning chain only covers warnings caused
-     * by <code>CachedRowSet</code> (and their child interface)
-     * methods. All <code>SQLWarnings</code> can be obtained using the
-     * <code>getWarnings</code> method which tracks warnings generated
-     * by the underlying JDBC driver.
-     * @return the first SQLWarning or null
-     *
-     */
-    public RowSetWarning getRowSetWarnings() {
-        try {
-            notifyCursorMoved();
-        } catch (SQLException e) {} // mask exception
-        return rowsetWarning;
-    }
-
-
-    /**
-     * The function tries to isolate the tablename when only setCommand
-     * is set and not setTablename is called provided there is only one table
-     * name in the query else just leaves the setting of table name as such.
-     * If setTablename is set later it will over ride this table name
-     * value so retrieved.
-     *
-     * @return the tablename if only one table in query else return ""
-     */
-    private String buildTableName(String command) throws SQLException {
-
-        // If we have a query from one table,
-        // we set the table name implicitly
-        // else user has to explicitly set the table name.
-
-        int indexFrom, indexComma;
-        String strTablename ="";
-        command = command.trim();
-
-        // Query can be a select, insert or  update
-
-        if(command.toLowerCase().startsWith("select")) {
-            // look for "from" keyword, after that look for a
-            // comma after from. If comma is there don't set
-            // table name else isolate table name.
-
-            indexFrom = command.toLowerCase().indexOf("from");
-            indexComma = command.indexOf(",", indexFrom);
-
-            if(indexComma == -1) {
-                // implies only one table
-                strTablename = (command.substring(indexFrom+"from".length(),command.length())).trim();
-
-                String tabName = strTablename;
-
-                int idxWhere = tabName.toLowerCase().indexOf("where");
-
-                /**
-                  * Adding the addtional check for conditions following the table name.
-                  * If a condition is found truncate it.
-                  **/
-
-                if(idxWhere != -1)
-                {
-                   tabName = tabName.substring(0,idxWhere).trim();
-                }
-
-                strTablename = tabName;
-
-            } else {
-                //strTablename="";
-            }
-
-        } else if(command.toLowerCase().startsWith("insert")) {
-            //strTablename="";
-        } else if(command.toLowerCase().startsWith("update")) {
-            //strTablename="";
-        }
-        return strTablename;
-    }
-
-    /**
-     * Commits all changes performed by the <code>acceptChanges()</code>
-     * methods
-     *
-     * @see java.sql.Connection#commit
-     */
-    public void commit() throws SQLException {
-        conn.commit();
-    }
-
-    /**
-     * Rolls back all changes performed by the <code>acceptChanges()</code>
-     * methods
-     *
-     * @see java.sql.Connection#rollback
-     */
-    public void rollback() throws SQLException {
-        conn.rollback();
-    }
-
-    /**
-     * Rolls back all changes performed by the <code>acceptChanges()</code>
-     * to the last <code>Savepoint</code> transaction marker.
-     *
-     * @see java.sql.Connection#rollback(Savepoint)
-     */
-    public void rollback(Savepoint s) throws SQLException {
-        conn.rollback(s);
-    }
-
-    /**
-     * Unsets the designated parameter to the given int array.
-     * This was set using <code>setMatchColumn</code>
-     * as the column which will form the basis of the join.
-     * <P>
-     * The parameter value unset by this method should be same
-     * as was set.
-     *
-     * @param columnIdxes the index into this rowset
-     *        object's internal representation of parameter values
-     * @throws SQLException if an error occurs or the
-     *  parameter index is out of bounds or if the columnIdx is
-     *  not the same as set using <code>setMatchColumn(int [])</code>
-     */
-    public void unsetMatchColumn(int[] columnIdxes) throws SQLException {
-
-         int i_val;
-         for( int j= 0 ;j < columnIdxes.length; j++) {
-            i_val = (Integer.parseInt(iMatchColumns.get(j).toString()));
-            if(columnIdxes[j] != i_val) {
-               throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.matchcols").toString());
-            }
-         }
-
-         for( int i = 0;i < columnIdxes.length ;i++) {
-            iMatchColumns.set(i,Integer.valueOf(-1));
-         }
-    }
-
-   /**
-     * Unsets the designated parameter to the given String array.
-     * This was set using <code>setMatchColumn</code>
-     * as the column which will form the basis of the join.
-     * <P>
-     * The parameter value unset by this method should be same
-     * as was set.
-     *
-     * @param columnIdxes the index into this rowset
-     *        object's internal representation of parameter values
-     * @throws SQLException if an error occurs or the
-     *  parameter index is out of bounds or if the columnName is
-     *  not the same as set using <code>setMatchColumn(String [])</code>
-     */
-    public void unsetMatchColumn(String[] columnIdxes) throws SQLException {
-
-        for(int j = 0 ;j < columnIdxes.length; j++) {
-           if( !columnIdxes[j].equals(strMatchColumns.get(j)) ){
-              throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.matchcols").toString());
-           }
-        }
-
-        for(int i = 0 ; i < columnIdxes.length; i++) {
-           strMatchColumns.set(i,null);
-        }
-    }
-
-    /**
-     * Retrieves the column name as <code>String</code> array
-     * that was set using <code>setMatchColumn(String [])</code>
-     * for this rowset.
-     *
-     * @return a <code>String</code> array object that contains the column names
-     *         for the rowset which has this the match columns
-     *
-     * @throws SQLException if an error occurs or column name is not set
-     */
-    public String[] getMatchColumnNames() throws SQLException {
-
-        String []str_temp = new String[strMatchColumns.size()];
-
-        if( strMatchColumns.get(0) == null) {
-           throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.setmatchcols").toString());
-        }
-
-        strMatchColumns.copyInto(str_temp);
-        return str_temp;
-    }
-
-    /**
-     * Retrieves the column id as <code>int</code> array that was set using
-     * <code>setMatchColumn(int [])</code> for this rowset.
-     *
-     * @return a <code>int</code> array object that contains the column ids
-     *         for the rowset which has this as the match columns.
-     *
-     * @throws SQLException if an error occurs or column index is not set
-     */
-    public int[] getMatchColumnIndexes() throws SQLException {
-
-        Integer []int_temp = new Integer[iMatchColumns.size()];
-        int [] i_temp = new int[iMatchColumns.size()];
-        int i_val;
-
-        i_val = ((Integer)iMatchColumns.get(0)).intValue();
-
-        if( i_val == -1 ) {
-           throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.setmatchcols").toString());
-        }
-
-
-        iMatchColumns.copyInto(int_temp);
-
-        for(int i = 0; i < int_temp.length; i++) {
-           i_temp[i] = (int_temp[i]).intValue();
-        }
-
-        return i_temp;
-    }
-
-    /**
-     * Sets the designated parameter to the given int array.
-     * This forms the basis of the join for the
-     * <code>JoinRowSet</code> as the column which will form the basis of the
-     * join.
-     * <P>
-     * The parameter value set by this method is stored internally and
-     * will be supplied as the appropriate parameter in this rowset's
-     * command when the method <code>getMatchColumnIndexes</code> is called.
-     *
-     * @param columnIdxes the indexes into this rowset
-     *        object's internal representation of parameter values; the
-     *        first parameter is 0, the second is 1, and so on; must be
-     *        <code>0</code> or greater
-     * @throws SQLException if an error occurs or the
-     *                         parameter index is out of bounds
-     */
-    public void setMatchColumn(int[] columnIdxes) throws SQLException {
-
-        for(int j = 0 ; j < columnIdxes.length; j++) {
-           if( columnIdxes[j] < 0 ) {
-              throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.matchcols1").toString());
-           }
-        }
-        for(int i = 0 ;i < columnIdxes.length; i++) {
-           iMatchColumns.add(i,Integer.valueOf(columnIdxes[i]));
-        }
-    }
-
-    /**
-     * Sets the designated parameter to the given String array.
-     *  This forms the basis of the join for the
-     * <code>JoinRowSet</code> as the column which will form the basis of the
-     * join.
-     * <P>
-     * The parameter value set by this method is stored internally and
-     * will be supplied as the appropriate parameter in this rowset's
-     * command when the method <code>getMatchColumn</code> is called.
-     *
-     * @param columnNames the name of the column into this rowset
-     *        object's internal representation of parameter values
-     * @throws SQLException if an error occurs or the
-     *  parameter index is out of bounds
-     */
-    public void setMatchColumn(String[] columnNames) throws SQLException {
-
-        for(int j = 0; j < columnNames.length; j++) {
-           if( columnNames[j] == null || columnNames[j].equals("")) {
-              throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.matchcols2").toString());
-           }
-        }
-        for( int i = 0; i < columnNames.length; i++) {
-           strMatchColumns.add(i,columnNames[i]);
-        }
-    }
-
-
-    /**
-     * Sets the designated parameter to the given <code>int</code>
-     * object.  This forms the basis of the join for the
-     * <code>JoinRowSet</code> as the column which will form the basis of the
-     * join.
-     * <P>
-     * The parameter value set by this method is stored internally and
-     * will be supplied as the appropriate parameter in this rowset's
-     * command when the method <code>getMatchColumn</code> is called.
-     *
-     * @param columnIdx the index into this rowset
-     *        object's internal representation of parameter values; the
-     *        first parameter is 0, the second is 1, and so on; must be
-     *        <code>0</code> or greater
-     * @throws SQLException if an error occurs or the
-     *                         parameter index is out of bounds
-     */
-    public void setMatchColumn(int columnIdx) throws SQLException {
-        // validate, if col is ok to be set
-        if(columnIdx < 0) {
-            throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.matchcols1").toString());
-        } else {
-            // set iMatchColumn
-            iMatchColumns.set(0, Integer.valueOf(columnIdx));
-            //strMatchColumn = null;
-        }
-    }
-
-    /**
-     * Sets the designated parameter to the given <code>String</code>
-     * object.  This forms the basis of the join for the
-     * <code>JoinRowSet</code> as the column which will form the basis of the
-     * join.
-     * <P>
-     * The parameter value set by this method is stored internally and
-     * will be supplied as the appropriate parameter in this rowset's
-     * command when the method <code>getMatchColumn</code> is called.
-     *
-     * @param columnName the name of the column into this rowset
-     *        object's internal representation of parameter values
-     * @throws SQLException if an error occurs or the
-     *  parameter index is out of bounds
-     */
-    public void setMatchColumn(String columnName) throws SQLException {
-        // validate, if col is ok to be set
-        if(columnName == null || (columnName= columnName.trim()).equals("") ) {
-            throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.matchcols2").toString());
-        } else {
-            // set strMatchColumn
-            strMatchColumns.set(0, columnName);
-            //iMatchColumn = -1;
-        }
-    }
-
-    /**
-     * Unsets the designated parameter to the given <code>int</code>
-     * object.  This was set using <code>setMatchColumn</code>
-     * as the column which will form the basis of the join.
-     * <P>
-     * The parameter value unset by this method should be same
-     * as was set.
-     *
-     * @param columnIdx the index into this rowset
-     *        object's internal representation of parameter values
-     * @throws SQLException if an error occurs or the
-     *  parameter index is out of bounds or if the columnIdx is
-     *  not the same as set using <code>setMatchColumn(int)</code>
-     */
-    public void unsetMatchColumn(int columnIdx) throws SQLException {
-        // check if we are unsetting the SAME column
-        if(! iMatchColumns.get(0).equals(Integer.valueOf(columnIdx) )  ) {
-            throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.unsetmatch").toString());
-        } else if(strMatchColumns.get(0) != null) {
-            throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.unsetmatch1").toString());
-        } else {
-                // that is, we are unsetting it.
-               iMatchColumns.set(0, Integer.valueOf(-1));
-        }
-    }
-
-    /**
-     * Unsets the designated parameter to the given <code>String</code>
-     * object.  This was set using <code>setMatchColumn</code>
-     * as the column which will form the basis of the join.
-     * <P>
-     * The parameter value unset by this method should be same
-     * as was set.
-     *
-     * @param columnName the index into this rowset
-     *        object's internal representation of parameter values
-     * @throws SQLException if an error occurs or the
-     *  parameter index is out of bounds or if the columnName is
-     *  not the same as set using <code>setMatchColumn(String)</code>
-     */
-    public void unsetMatchColumn(String columnName) throws SQLException {
-        // check if we are unsetting the same column
-        columnName = columnName.trim();
-
-        if(!((strMatchColumns.get(0)).equals(columnName))) {
-            throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.unsetmatch").toString());
-        } else if( ((Integer)(iMatchColumns.get(0))).intValue() > 0) {
-            throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.unsetmatch2").toString());
-        } else {
-            strMatchColumns.set(0, null);   // that is, we are unsetting it.
-        }
-    }
-
-    /**
-     * Notifies registered listeners that a RowSet object in the given RowSetEvent
-     * object has populated a number of additional rows. The <code>numRows</code> parameter
-     * ensures that this event will only be fired every <code>numRow</code>.
-     * <p>
-     * The source of the event can be retrieved with the method event.getSource.
-     *
-     * @param event a <code>RowSetEvent</code> object that contains the
-     *     <code>RowSet</code> object that is the source of the events
-     * @param numRows when populating, the number of rows interval on which the
-     *     <code>CachedRowSet</code> populated should fire; the default value
-     *     is zero; cannot be less than <code>fetchSize</code> or zero
-     */
-    public void rowSetPopulated(RowSetEvent event, int numRows) throws SQLException {
-
-        if( numRows < 0 || numRows < getFetchSize()) {
-           throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.numrows").toString());
-        }
-
-        if(size() % numRows == 0) {
-            RowSetEvent event_temp = new RowSetEvent(this);
-            event = event_temp;
-            notifyRowSetChanged();
-        }
-    }
-
-    /**
-     * Populates this <code>CachedRowSet</code> object with data from
-     * the given <code>ResultSet</code> object. While related to the <code>populate(ResultSet)</code>
-     * method, an additional parameter is provided to allow starting position within
-     * the <code>ResultSet</code> from where to populate the CachedRowSet
-     * instance.
-     *
-     * This method is an alternative to the method <code>execute</code>
-     * for filling the rowset with data.  The method <code>populate</code>
-     * does not require that the properties needed by the method
-     * <code>execute</code>, such as the <code>command</code> property,
-     * be set. This is true because the method <code>populate</code>
-     * is given the <code>ResultSet</code> object from
-     * which to get data and thus does not need to use the properties
-     * required for setting up a connection and executing this
-     * <code>CachedRowSetImpl</code> object's command.
-     * <P>
-     * After populating this rowset with data, the method
-     * <code>populate</code> sets the rowset's metadata and
-     * then sends a <code>RowSetChangedEvent</code> object
-     * to all registered listeners prior to returning.
-     *
-     * @param data the <code>ResultSet</code> object containing the data
-     *             to be read into this <code>CachedRowSetImpl</code> object
-     * @param start the integer specifing the position in the
-     *        <code>ResultSet</code> object to popultate the
-     *        <code>CachedRowSetImpl</code> object.
-     * @throws SQLException if an error occurs; or the max row setting is
-     *          violated while populating the RowSet.Also id the start position
-     *          is negative.
-     * @see #execute
-     */
-     public void populate(ResultSet data, int start) throws SQLException{
-
-        int rowsFetched;
-        Row currentRow;
-        int numCols;
-        int i;
-        Map<String, Class<?>> map = getTypeMap();
-        Object obj;
-        int mRows;
-
-        cursorPos = 0;
-        if(populatecallcount == 0){
-            if(start < 0){
-               throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.startpos").toString());
-            }
-            if(getMaxRows() == 0){
-               data.absolute(start);
-               while(data.next()){
-                   totalRows++;
-               }
-               totalRows++;
-            }
-            startPos = start;
-        }
-        populatecallcount = populatecallcount +1;
-        resultSet = data;
-        if((endPos - startPos) >= getMaxRows() && (getMaxRows() > 0)){
-            endPos = prevEndPos;
-            pagenotend = false;
-            return;
-        }
-
-        if((maxRowsreached != getMaxRows() || maxRowsreached != totalRows) && pagenotend) {
-           startPrev = start - getPageSize();
-        }
-
-        if( pageSize == 0){
-           prevEndPos = endPos;
-           endPos = start + getMaxRows() ;
-        }
-        else{
-            prevEndPos = endPos;
-            endPos = start + getPageSize();
-        }
-
-
-        if (start == 1){
-            resultSet.beforeFirst();
-        }
-        else {
-            resultSet.absolute(start -1);
-        }
-        if( pageSize == 0) {
-           rvh = new Vector<Object>(getMaxRows());
-
-        }
-        else{
-            rvh = new Vector<Object>(getPageSize());
-        }
-
-        if (data == null) {
-            throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.populate").toString());
-        }
-
-        // get the meta data for this ResultSet
-        RSMD = data.getMetaData();
-
-        // set up the metadata
-        RowSetMD = new RowSetMetaDataImpl();
-        initMetaData(RowSetMD, RSMD);
-
-        // release the meta-data so that aren't tempted to use it.
-        RSMD = null;
-        numCols = RowSetMD.getColumnCount();
-        mRows = this.getMaxRows();
-        rowsFetched = 0;
-        currentRow = null;
-
-        if(!data.next() && mRows == 0){
-            endPos = prevEndPos;
-            pagenotend = false;
-            return;
-        }
-
-        data.previous();
-
-        while ( data.next()) {
-
-            currentRow = new Row(numCols);
-          if(pageSize == 0){
-            if ( rowsFetched >= mRows && mRows > 0) {
-                rowsetWarning.setNextException(new SQLException("Populating rows "
-                + "setting has exceeded max row setting"));
-                break;
-            }
-          }
-          else {
-              if ( (rowsFetched >= pageSize) ||( maxRowsreached >= mRows && mRows > 0)) {
-                rowsetWarning.setNextException(new SQLException("Populating rows "
-                + "setting has exceeded max row setting"));
-                break;
-            }
-          }
-
-            for ( i = 1; i <= numCols; i++) {
-                /*
-                 * check if the user has set a map. If no map
-                 * is set then use plain getObject. This lets
-                 * us work with drivers that do not support
-                 * getObject with a map in fairly sensible way
-                 */
-                if (map == null) {
-                    obj = data.getObject(i);
-                } else {
-                    obj = data.getObject(i, map);
-                }
-                /*
-                 * the following block checks for the various
-                 * types that we have to serialize in order to
-                 * store - right now only structs have been tested
-                 */
-                if (obj instanceof Struct) {
-                    obj = new SerialStruct((Struct)obj, map);
-                } else if (obj instanceof SQLData) {
-                    obj = new SerialStruct((SQLData)obj, map);
-                } else if (obj instanceof Blob) {
-                    obj = new SerialBlob((Blob)obj);
-                } else if (obj instanceof Clob) {
-                    obj = new SerialClob((Clob)obj);
-                } else if (obj instanceof java.sql.Array) {
-                    obj = new SerialArray((java.sql.Array)obj, map);
-                }
-
-                ((Row)currentRow).initColumnObject(i, obj);
-            }
-            rowsFetched++;
-            maxRowsreached++;
-            rvh.add(currentRow);
-        }
-        numRows = rowsFetched ;
-        // Also rowsFetched should be equal to rvh.size()
-        // notify any listeners that the rowset has changed
-        notifyRowSetChanged();
-
-     }
-
-    /**
-     * The nextPage gets the next page, that is a <code>CachedRowSetImpl</code> object
-     * containing the number of rows specified by page size.
-     * @return boolean value true indicating whether there are more pages to come and
-     *         false indicating that this is the last page.
-     * @throws SQLException if an error occurs or this called before calling populate.
-     */
-     public boolean nextPage() throws SQLException {
-
-         if (populatecallcount == 0){
-             throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.nextpage").toString());
-         }
-         // Fix for 6554186
-         onFirstPage = false;
-         if(callWithCon){
-            crsReader.setStartPosition(endPos);
-            crsReader.readData((RowSetInternal)this);
-            resultSet = null;
-         }
-         else {
-            populate(resultSet,endPos);
-         }
-         return pagenotend;
-     }
-
-    /**
-     * This is the setter function for setting the size of the page, which specifies
-     * how many rows have to be retrived at a time.
-     *
-     * @param size which is the page size
-     * @throws SQLException if size is less than zero or greater than max rows.
-     */
-     public void setPageSize (int size) throws SQLException {
-        if (size < 0) {
-            throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.pagesize").toString());
-        }
-        if (size > getMaxRows() && getMaxRows() != 0) {
-            throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.pagesize1").toString());
-        }
-        pageSize = size;
-     }
-
-    /**
-     * This is the getter function for the size of the page.
-     *
-     * @return an integer that is the page size.
-     */
-    public int getPageSize() {
-        return pageSize;
-    }
-
-
-    /**
-     * Retrieves the data present in the page prior to the page from where it is
-     * called.
-     * @return boolean value true if it retrieves the previous page, flase if it
-     *         is on the first page.
-     * @throws SQLException if it is called before populate is called or ResultSet
-     *         is of type <code>ResultSet.TYPE_FORWARD_ONLY</code> or if an error
-     *         occurs.
-     */
-    public boolean previousPage() throws SQLException {
-        int pS;
-        int mR;
-        int rem;
-
-        pS = getPageSize();
-        mR = maxRowsreached;
-
-        if (populatecallcount == 0){
-             throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.nextpage").toString());
-         }
-
-        if( !callWithCon){
-           if(resultSet.getType() == ResultSet.TYPE_FORWARD_ONLY){
-               throw new SQLException (resBundle.handleGetObject("cachedrowsetimpl.fwdonly").toString());
-           }
-        }
-
-        pagenotend = true;
-
-        if(startPrev < startPos ){
-                onFirstPage = true;
-               return false;
-            }
-
-        if(onFirstPage){
-            return false;
-        }
-
-        rem = mR % pS;
-
-        if(rem == 0){
-            maxRowsreached -= (2 * pS);
-            if(callWithCon){
-                crsReader.setStartPosition(startPrev);
-                crsReader.readData((RowSetInternal)this);
-                resultSet = null;
-            }
-            else {
-               populate(resultSet,startPrev);
-            }
-            return true;
-        }
-        else
-        {
-            maxRowsreached -= (pS + rem);
-            if(callWithCon){
-                crsReader.setStartPosition(startPrev);
-                crsReader.readData((RowSetInternal)this);
-                resultSet = null;
-            }
-            else {
-               populate(resultSet,startPrev);
-            }
-            return true;
-        }
-    }
-
-    /**
-     * Goes to the page number passed as the parameter
-     * @param page , the page loaded on a call to this function
-     * @return true if the page exists false otherwise
-     * @throws SQLException if an error occurs
-     */
-    /*
-    public boolean absolutePage(int page) throws SQLException{
-
-        boolean isAbs = true, retVal = true;
-        int counter;
-
-        if( page <= 0 ){
-            throw new SQLException("Absolute positoin is invalid");
-        }
-        counter = 0;
-
-        firstPage();
-        counter++;
-        while((counter < page) && isAbs) {
-            isAbs = nextPage();
-            counter ++;
-        }
-
-        if( !isAbs && counter < page){
-            retVal = false;
-        }
-        else if(counter == page){
-            retVal = true;
-        }
-
-       return retVal;
-    }
-    */
-
-
-    /**
-     * Goes to the page number passed as the parameter  from the current page.
-     * The parameter can take postive or negative value accordingly.
-     * @param page , the page loaded on a call to this function
-     * @return true if the page exists false otherwise
-     * @throws SQLException if an error occurs
-     */
-    /*
-    public boolean relativePage(int page) throws SQLException {
-
-        boolean isRel = true,retVal = true;
-        int counter;
-
-        if(page > 0){
-           counter  = 0;
-           while((counter < page) && isRel){
-              isRel = nextPage();
-              counter++;
-           }
-
-           if(!isRel && counter < page){
-               retVal = false;
-           }
-           else if( counter == page){
-               retVal = true;
-           }
-           return retVal;
-        }
-        else {
-            counter = page;
-            isRel = true;
-            while((counter < 0) && isRel){
-                isRel = previousPage();
-                counter++;
-            }
-
-            if( !isRel && counter < 0){
-                retVal = false;
-            }
-            else if(counter == 0){
-                retVal = true;
-            }
-            return retVal;
-        }
-    }
-    */
-
-     /**
-     * Retrieves the first page of data as specified by the page size.
-     * @return boolean value true if present on first page, false otherwise
-     * @throws SQLException if it called before populate or ResultSet is of
-     *         type <code>ResultSet.TYPE_FORWARD_ONLY</code> or an error occurs
-     */
-    /*
-    public boolean firstPage() throws SQLException {
-           if (populatecallcount == 0){
-             throw new SQLException("Populate the data before calling ");
-           }
-           if( !callWithCon){
-              if(resultSet.getType() == ResultSet.TYPE_FORWARD_ONLY) {
-                  throw new SQLException("Result of type forward only");
-              }
-           }
-           endPos = 0;
-           maxRowsreached = 0;
-           pagenotend = true;
-           if(callWithCon){
-               crsReader.setStartPosition(startPos);
-               crsReader.readData((RowSetInternal)this);
-               resultSet = null;
-           }
-           else {
-              populate(resultSet,startPos);
-           }
-           onFirstPage = true;
-           return onFirstPage;
-    }
-    */
-
-    /**
-     * Retrives the last page of data as specified by the page size.
-     * @return boolean value tur if present on the last page, false otherwise
-     * @throws SQLException if called before populate or if an error occurs.
-     */
-     /*
-    public boolean lastPage() throws SQLException{
-          int pS;
-          int mR;
-          int quo;
-          int rem;
-
-          pS = getPageSize();
-          mR = getMaxRows();
-
-          if(pS == 0){
-              onLastPage = true;
-              return onLastPage;
-          }
-
-          if(getMaxRows() == 0){
-              mR = totalRows;
-          }
-
-          if (populatecallcount == 0){
-             throw new SQLException("Populate the data before calling ");
-         }
-
-         onFirstPage = false;
-
-         if((mR % pS) == 0){
-             quo = mR / pS;
-             int start = startPos + (pS * (quo - 1));
-             maxRowsreached = mR - pS;
-             if(callWithCon){
-                 crsReader.setStartPosition(start);
-                 crsReader.readData((RowSetInternal)this);
-                 resultSet = null;
-             }
-             else {
-                populate(resultSet,start);
-             }
-             onLastPage = true;
-             return onLastPage;
-         }
-        else {
-              quo = mR /pS;
-              rem = mR % pS;
-              int start = startPos + (pS * quo);
-             maxRowsreached = mR - (rem);
-             if(callWithCon){
-                 crsReader.setStartPosition(start);
-                 crsReader.readData((RowSetInternal)this);
-                 resultSet = null;
-             }
-             else {
-                populate(resultSet,start);
-             }
-             onLastPage = true;
-             return onLastPage;
-         }
-    }
-    */
-
-   /**
-     * Sets the status for the row on which the cursor is positioned. The insertFlag is used
-     * to mention the toggle status for this row
-     * @param insertFlag if it is true  - marks this row as inserted
-     *                   if it is false - marks it as not a newly inserted row
-     * @throws SQLException if an error occurs while doing this operation
-     */
-    public void setRowInserted(boolean insertFlag) throws SQLException {
-
-        checkCursor();
-
-        if(onInsertRow == true)
-          throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.invalidop").toString());
-
-        if( insertFlag ) {
-          ((Row)getCurrentRow()).setInserted();
-        } else {
-          ((Row)getCurrentRow()).clearInserted();
-        }
-    }
-
-    /**
-     * Retrieves the value of the designated <code>SQL XML</code> parameter as a
-     * <code>SQLXML</code> object in the Java programming language.
-     * @param columnIndex the first column is 1, the second is 2, ...
-     * @return a SQLXML object that maps an SQL XML value
-     * @throws SQLException if a database access error occurs
-     * @since 6.0
-     */
-    public SQLXML getSQLXML(int columnIndex) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.opnotysupp").toString());
-    }
-
-    /**
-     * Retrieves the value of the designated <code>SQL XML</code> parameter as a
-     * <code>SQLXML</code> object in the Java programming language.
-     * @param colName the name of the column from which to retrieve the value
-     * @return a SQLXML object that maps an SQL XML value
-     * @throws SQLException if a database access error occurs
-     */
-    public SQLXML getSQLXML(String colName) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.opnotysupp").toString());
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row of this
-     * <code>ResultSet</code> object as a java.sql.RowId object in the Java
-     * programming language.
-     *
-     * @param columnIndex the first column is 1, the second 2, ...
-     * @return the column value if the value is a SQL <code>NULL</code> the
-     *     value returned is <code>null</code>
-     * @throws SQLException if a database access error occurs
-     * @since 6.0
-     */
-    public RowId getRowId(int columnIndex) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.opnotysupp").toString());
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row of this
-     * <code>ResultSet</code> object as a java.sql.RowId object in the Java
-     * programming language.
-     *
-     * @param columnName the name of the column
-     * @return the column value if the value is a SQL <code>NULL</code> the
-     *     value returned is <code>null</code>
-     * @throws SQLException if a database access error occurs
-     * @since 6.0
-     */
-    public RowId getRowId(String columnName) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.opnotysupp").toString());
-    }
-
-    /**
-     * Updates the designated column with a <code>RowId</code> value. The updater
-     * methods are used to update column values in the current row or the insert
-     * row. The updater methods do not update the underlying database; instead
-     * the <code>updateRow<code> or <code>insertRow</code> methods are called
-     * to update the database.
-     *
-     * @param columnIndex the first column is 1, the second 2, ...
-     * @param x the column value
-     * @throws SQLException if a database access occurs
-     * @since 6.0
-     */
-    public void updateRowId(int columnIndex, RowId x) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.opnotysupp").toString());
-    }
-
-    /**
-     * Updates the designated column with a <code>RowId</code> value. The updater
-     * methods are used to update column values in the current row or the insert
-     * row. The updater methods do not update the underlying database; instead
-     * the <code>updateRow<code> or <code>insertRow</code> methods are called
-     * to update the database.
-     *
-     * @param columnName the name of the column
-     * @param x the column value
-     * @throws SQLException if a database access occurs
-     * @since 6.0
-     */
-    public void updateRowId(String columnName, RowId x) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.opnotysupp").toString());
-    }
-
-    /**
-     * Retrieves the holdability of this ResultSet object
-     * @return  either ResultSet.HOLD_CURSORS_OVER_COMMIT or ResultSet.CLOSE_CURSORS_AT_COMMIT
-     * @throws SQLException if a database error occurs
-     * @since 6.0
-     */
-    public int getHoldability() throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.opnotysupp").toString());
-    }
-
-    /**
-     * Retrieves whether this ResultSet object has been closed. A ResultSet is closed if the
-     * method close has been called on it, or if it is automatically closed.
-     * @return true if this ResultSet object is closed; false if it is still open
-     * @throws SQLException if a database access error occurs
-     * @since 6.0
-     */
-    public boolean isClosed() throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.opnotysupp").toString());
-    }
-
-    /**
-     * This method is used for updating columns that support National Character sets.
-     * It can be used for updating NCHAR,NVARCHAR and LONGNVARCHAR columns.
-     * @param columnIndex the first column is 1, the second 2, ...
-     * @param nString the value for the column to be updated
-     * @throws SQLException if a database access error occurs
-     * @since 6.0
-     */
-    public void updateNString(int columnIndex, String nString) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.opnotysupp").toString());
-    }
-
-    /**
-     * This method is used for updating columns that support National Character sets.
-     * It can be used for updating NCHAR,NVARCHAR and LONGNVARCHAR columns.
-     * @param columnName name of the Column
-     * @param nString the value for the column to be updated
-     * @throws SQLException if a database access error occurs
-     * @since 6.0
-     */
-    public void updateNString(String columnName, String nString) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.opnotysupp").toString());
-    }
-
-
-    /*o
-     * This method is used for updating SQL <code>NCLOB</code>  type that maps
-     * to <code>java.sql.Types.NCLOB</code>
-     * @param columnIndex the first column is 1, the second 2, ...
-     * @param nClob the value for the column to be updated
-     * @throws SQLException if a database access error occurs
-     * @since 6.0
-     */
-    public void updateNClob(int columnIndex, NClob nClob) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.opnotysupp").toString());
-    }
-
-    /**
-     * This method is used for updating SQL <code>NCLOB</code>  type that maps
-     * to <code>java.sql.Types.NCLOB</code>
-     * @param columnName name of the column
-     * @param nClob the value for the column to be updated
-     * @throws SQLException if a database access error occurs
-     * @since 6.0
-     */
-    public void updateNClob(String columnName, NClob nClob) throws SQLException {
-       throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.opnotysupp").toString());
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>ResultSet</code> object as a <code>NClob</code> object
-     * in the Java programming language.
-     *
-     * @param i the first column is 1, the second is 2, ...
-     * @return a <code>NClob</code> object representing the SQL
-     *         <code>NCLOB</code> value in the specified column
-     * @exception SQLException if a database access error occurs
-     * @since 6.0
-     */
-    public NClob getNClob(int i) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.opnotysupp").toString());
-    }
-
-
-   /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>ResultSet</code> object as a <code>NClob</code> object
-     * in the Java programming language.
-     *
-     * @param colName the name of the column from which to retrieve the value
-     * @return a <code>NClob</code> object representing the SQL <code>NCLOB</code>
-     * value in the specified column
-     * @exception SQLException if a database access error occurs
-     * @since 6.0
-     */
-    public NClob getNClob(String colName) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.opnotysupp").toString());
-    }
-
-    public <T> T unwrap(java.lang.Class<T> iface) throws java.sql.SQLException {
-        return null;
-    }
-
-    public boolean isWrapperFor(Class<?> interfaces) throws SQLException {
-        return false;
-    }
-
-
-   /**
-      * Sets the designated parameter to the given <code>java.sql.SQLXML</code> object. The driver converts this to an
-      * SQL <code>XML</code> value when it sends it to the database.
-      * @param parameterIndex index of the first parameter is 1, the second is 2, ...
-      * @param xmlObject a <code>SQLXML</code> object that maps an SQL <code>XML</code> value
-      * @throws SQLException if a database access error occurs
-      * @since 1.6
-      */
-     public void setSQLXML(int parameterIndex, SQLXML xmlObject) throws SQLException {
-         throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.opnotysupp").toString());
-     }
-
-   /**
-     * Sets the designated parameter to the given <code>java.sql.SQLXML</code> object. The driver converts this to an
-     * <code>SQL XML</code> value when it sends it to the database.
-     * @param parameterName the name of the parameter
-     * @param xmlObject a <code>SQLXML</code> object that maps an <code>SQL XML</code> value
-     * @throws SQLException if a database access error occurs
-     * @since 1.6
-     */
-    public void setSQLXML(String parameterName, SQLXML xmlObject) throws SQLException {
-         throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.opnotysupp").toString());
-     }
-
-
-    /**
-     * Sets the designated parameter to the given <code>java.sql.RowId</code> object. The
-     * driver converts this to a SQL <code>ROWID</code> value when it sends it
-     * to the database
-     *
-     * @param parameterIndex the first parameter is 1, the second is 2, ...
-     * @param x the parameter value
-     * @throws SQLException if a database access error occurs
-     *
-     * @since 1.6
-     */
-    public void setRowId(int parameterIndex, RowId x) throws SQLException {
-         throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.opnotysupp").toString());
-     }
-
-
-    /**
-    * Sets the designated parameter to the given <code>java.sql.RowId</code> object. The
-    * driver converts this to a SQL <code>ROWID</code> when it sends it to the
-    * database.
-    *
-    * @param parameterName the name of the parameter
-    * @param x the parameter value
-    * @throws SQLException if a database access error occurs
-    * @since 1.6
-    */
-   public void setRowId(String parameterName, RowId x) throws SQLException {
-         throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.opnotysupp").toString());
-     }
-
-
-    /**
-     * Sets the designated parameter to a <code>Reader</code> object. The
-     * <code>Reader</code> reads the data till end-of-file is reached. The
-     * driver does the necessary conversion from Java character format to
-     * the national character set in the database.
-
-     * <P><B>Note:</B> This stream object can either be a standard
-     * Java stream object or your own subclass that implements the
-     * standard interface.
-     * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
-     * it might be more efficient to use a version of
-     * <code>setNCharacterStream</code> which takes a length parameter.
-     *
-     * @param parameterIndex of the first parameter is 1, the second is 2, ...
-     * @param value the parameter value
-     * @throws SQLException if the driver does not support national
-     *         character sets;  if the driver can detect that a data conversion
-     *  error could occur ; if a database access error occurs; or
-     * this method is called on a closed <code>PreparedStatement</code>
-     * @throws SQLFeatureNotSupportedException  if the JDBC driver does not support this method
-     * @since 1.6
-     */
-     public void setNCharacterStream(int parameterIndex, Reader value) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
-     }
-
-
-    /**
-    * Sets the designated parameter to a <code>java.sql.NClob</code> object. The object
-    * implements the <code>java.sql.NClob</code> interface. This <code>NClob</code>
-    * object maps to a SQL <code>NCLOB</code>.
-    * @param parameterName the name of the column to be set
-    * @param value the parameter value
-    * @throws SQLException if the driver does not support national
-    *         character sets;  if the driver can detect that a data conversion
-    *  error could occur; or if a database access error occurs
-    * @since 1.6
-    */
-    public void setNClob(String parameterName, NClob value) throws SQLException {
-         throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.opnotysupp").toString());
-     }
-
-
-  /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>ResultSet</code> object as a
-     * <code>java.io.Reader</code> object.
-     * It is intended for use when
-     * accessing  <code>NCHAR</code>,<code>NVARCHAR</code>
-     * and <code>LONGNVARCHAR</code> columns.
-     *
-     * @return a <code>java.io.Reader</code> object that contains the column
-     * value; if the value is SQL <code>NULL</code>, the value returned is
-     * <code>null</code> in the Java programming language.
-     * @param columnIndex the first column is 1, the second is 2, ...
-     * @exception SQLException if a database access error occurs
-     * @since 1.6
-     */
-    public java.io.Reader getNCharacterStream(int columnIndex) throws SQLException {
-       throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.opnotysupp").toString());
-     }
-
-
-    /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>ResultSet</code> object as a
-     * <code>java.io.Reader</code> object.
-     * It is intended for use when
-     * accessing  <code>NCHAR</code>,<code>NVARCHAR</code>
-     * and <code>LONGNVARCHAR</code> columns.
-     *
-     * @param columnName the name of the column
-     * @return a <code>java.io.Reader</code> object that contains the column
-     * value; if the value is SQL <code>NULL</code>, the value returned is
-     * <code>null</code> in the Java programming language
-     * @exception SQLException if a database access error occurs
-     * @since 1.6
-     */
-    public java.io.Reader getNCharacterStream(String columnName) throws SQLException {
-       throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.opnotysupp").toString());
-     }
-
-
-    /**
-     * Updates the designated column with a <code>java.sql.SQLXML</code> value.
-     * The updater
-     * methods are used to update column values in the current row or the insert
-     * row. The updater methods do not update the underlying database; instead
-     * the <code>updateRow</code> or <code>insertRow</code> methods are called
-     * to update the database.
-     * @param columnIndex the first column is 1, the second 2, ...
-     * @param xmlObject the value for the column to be updated
-     * @throws SQLException if a database access error occurs
-     * @since 1.6
-     */
-    public void updateSQLXML(int columnIndex, SQLXML xmlObject) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.opnotysupp").toString());
-    }
-
-    /**
-     * Updates the designated column with a <code>java.sql.SQLXML</code> value.
-     * The updater
-     * methods are used to update column values in the current row or the insert
-     * row. The updater methods do not update the underlying database; instead
-     * the <code>updateRow</code> or <code>insertRow</code> methods are called
-     * to update the database.
-     *
-     * @param columnName the name of the column
-     * @param xmlObject the column value
-     * @throws SQLException if a database access occurs
-     * @since 1.6
-     */
-    public void updateSQLXML(String columnName, SQLXML xmlObject) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.opnotysupp").toString());
-    }
-
-     /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>ResultSet</code> object as
-     * a <code>String</code> in the Java programming language.
-     * It is intended for use when
-     * accessing  <code>NCHAR</code>,<code>NVARCHAR</code>
-     * and <code>LONGNVARCHAR</code> columns.
-     *
-     * @param columnIndex the first column is 1, the second is 2, ...
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     * value returned is <code>null</code>
-     * @exception SQLException if a database access error occurs
-     * @since 1.6
-     */
-    public String getNString(int columnIndex) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.opnotysupp").toString());
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>ResultSet</code> object as
-     * a <code>String</code> in the Java programming language.
-     * It is intended for use when
-     * accessing  <code>NCHAR</code>,<code>NVARCHAR</code>
-     * and <code>LONGNVARCHAR</code> columns.
-     *
-     * @param columnName the SQL name of the column
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     * value returned is <code>null</code>
-     * @exception SQLException if a database access error occurs
-     * @since 1.6
-     */
-    public String getNString(String columnName) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.opnotysupp").toString());
-    }
-
-     /**
-       * Updates the designated column with a character stream value, which will
-       * have the specified number of bytes. The driver does the necessary conversion
-       * from Java character format to the national character set in the database.
-       * It is intended for use when updating NCHAR,NVARCHAR and LONGNVARCHAR columns.
-       * The updater methods are used to update column values in the current row or
-       * the insert row. The updater methods do not update the underlying database;
-       * instead the updateRow or insertRow methods are called to update the database.
-       *
-       * @param columnIndex - the first column is 1, the second is 2, ...
-       * @param x - the new column value
-       * @param length - the length of the stream
-       * @exception SQLException if a database access error occurs
-       * @since 1.6
-       */
-       public void updateNCharacterStream(int columnIndex,
-                            java.io.Reader x,
-                            long length)
-                            throws SQLException {
-          throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.opnotysupp").toString());
-       }
-
-     /**
-       * Updates the designated column with a character stream value, which will
-       * have the specified number of bytes. The driver does the necessary conversion
-       * from Java character format to the national character set in the database.
-       * It is intended for use when updating NCHAR,NVARCHAR and LONGNVARCHAR columns.
-       * The updater methods are used to update column values in the current row or
-       * the insert row. The updater methods do not update the underlying database;
-       * instead the updateRow or insertRow methods are called to update the database.
-       *
-       * @param columnName - name of the Column
-       * @param x - the new column value
-       * @param length - the length of the stream
-       * @exception SQLException if a database access error occurs
-       * @since 1.6
-       */
-       public void updateNCharacterStream(String columnName,
-                            java.io.Reader x,
-                            long length)
-                            throws SQLException {
-          throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.opnotysupp").toString());
-       }
-
-     /**
-     * Updates the designated column with a character stream value.   The
-     * driver does the necessary conversion from Java character format to
-     * the national character set in the database.
-     * It is intended for use when
-     * updating  <code>NCHAR</code>,<code>NVARCHAR</code>
-     * and <code>LONGNVARCHAR</code> columns.
-     *
-     * The updater methods are used to update column values in the
-     * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
-     * it might be more efficient to use a version of
-     * <code>updateNCharacterStream</code> which takes a length parameter.
-     *
-     * @param columnIndex the first column is 1, the second is 2, ...
-     * @param x the new column value
-     * @exception SQLException if a database access error occurs,
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code> or this method is called on a closed result set
-     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-     * this method
-     * @since 1.6
-     */
-    public void updateNCharacterStream(int columnIndex,
-                             java.io.Reader x) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
-    }
-
-    /**
-     * Updates the designated column with a character stream value.  The
-     * driver does the necessary conversion from Java character format to
-     * the national character set in the database.
-     * It is intended for use when
-     * updating  <code>NCHAR</code>,<code>NVARCHAR</code>
-     * and <code>LONGNVARCHAR</code> columns.
-     *
-     * The updater methods are used to update column values in the
-     * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
-     * it might be more efficient to use a version of
-     * <code>updateNCharacterStream</code> which takes a length parameter.
-     *
-     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the la
-bel is the name of the column
-     * @param reader the <code>java.io.Reader</code> object containing
-     *        the new column value
-     * @exception SQLException if a database access error occurs,
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code> or this method is called on a closed result set
-      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-     * this method
-     * @since 1.6
-     */
-    public void updateNCharacterStream(String columnLabel,
-                             java.io.Reader reader) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
-    }
-
-//////////////////////////
-
-    /**
-     * Updates the designated column using the given input stream, which
-     * will have the specified number of bytes.
-     * When a very large ASCII value is input to a <code>LONGVARCHAR</code>
-     * parameter, it may be more practical to send it via a
-     * <code>java.io.InputStream</code>. Data will be read from the stream
-     * as needed until end-of-file is reached.  The JDBC driver will
-     * do any necessary conversion from ASCII to the database char format.
-     *
-     * <P><B>Note:</B> This stream object can either be a standard
-     * Java stream object or your own subclass that implements the
-     * standard interface.
-     * <p>
-     * The updater methods are used to update column values in the
-     * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnIndex the first column is 1, the second is 2, ...
-     * @param inputStream An object that contains the data to set the parameter
-     * value to.
-     * @param length the number of bytes in the parameter data.
-     * @exception SQLException if a database access error occurs,
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
-     * or this method is called on a closed result set
-     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-     * this method
-     * @since 1.6
-     */
-    public void updateBlob(int columnIndex, InputStream inputStream, long length) throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
-    }
-
-    /**
-     * Updates the designated column using the given input stream, which
-     * will have the specified number of bytes.
-     * When a very large ASCII value is input to a <code>LONGVARCHAR</code>
-     * parameter, it may be more practical to send it via a
-     * <code>java.io.InputStream</code>. Data will be read from the stream
-     * as needed until end-of-file is reached.  The JDBC driver will
-     * do any necessary conversion from ASCII to the database char format.
-     *
-     * <P><B>Note:</B> This stream object can either be a standard
-     * Java stream object or your own subclass that implements the
-     * standard interface.
-     * <p>
-     * The updater methods are used to update column values in the
-     * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
-     * @param inputStream An object that contains the data to set the parameter
-     * value to.
-     * @param length the number of bytes in the parameter data.
-     * @exception SQLException if a database access error occurs,
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
-     * or this method is called on a closed result set
-     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-     * this method
-     * @since 1.6
-     */
-    public void updateBlob(String columnLabel, InputStream inputStream, long length) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
-    }
-
-    /**
-     * Updates the designated column using the given input stream.
-     * When a very large ASCII value is input to a <code>LONGVARCHAR</code>
-     * parameter, it may be more practical to send it via a
-     * <code>java.io.InputStream</code>. Data will be read from the stream
-     * as needed until end-of-file is reached.  The JDBC driver will
-     * do any necessary conversion from ASCII to the database char format.
-     *
-     * <P><B>Note:</B> This stream object can either be a standard
-     * Java stream object or your own subclass that implements the
-     * standard interface.
-     *
-     *  <P><B>Note:</B> Consult your JDBC driver documentation to determine if
-     * it might be more efficient to use a version of
-     * <code>updateBlob</code> which takes a length parameter.
-     * <p>
-     * The updater methods are used to update column values in the
-     * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnIndex the first column is 1, the second is 2, ...
-     * @param inputStream An object that contains the data to set the parameter
-     * value to.
-     * @exception SQLException if a database access error occurs,
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
-     * or this method is called on a closed result set
-     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-     * this method
-     * @since 1.6
-     */
-    public void updateBlob(int columnIndex, InputStream inputStream) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
-    }
-
-    /**
-     * Updates the designated column using the given input stream.
-     * When a very large ASCII value is input to a <code>LONGVARCHAR</code>
-     * parameter, it may be more practical to send it via a
-     * <code>java.io.InputStream</code>. Data will be read from the stream
-     * as needed until end-of-file is reached.  The JDBC driver will
-     * do any necessary conversion from ASCII to the database char format.
-     *
-     * <P><B>Note:</B> This stream object can either be a standard
-     * Java stream object or your own subclass that implements the
-     * standard interface.
-     *   <P><B>Note:</B> Consult your JDBC driver documentation to determine if
-     * it might be more efficient to use a version of
-     * <code>updateBlob</code> which takes a length parameter.
-     * <p>
-     * The updater methods are used to update column values in the
-     * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the la
-bel is the name of the column
-     * @param inputStream An object that contains the data to set the parameter
-     * value to.
-     * @exception SQLException if a database access error occurs,
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
-     * or this method is called on a closed result set
-     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-     * this method
-     * @since 1.6
-     */
-    public void updateBlob(String columnLabel, InputStream inputStream) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
-    }
-
-    /**
-     * Updates the designated column using the given <code>Reader</code>
-     * object, which is the given number of characters long.
-     * When a very large UNICODE value is input to a <code>LONGVARCHAR</code>
-     * parameter, it may be more practical to send it via a
-     * <code>java.io.Reader</code> object. The data will be read from the stream
-     * as needed until end-of-file is reached.  The JDBC driver will
-     * do any necessary conversion from UNICODE to the database char format.
-     *
-     * <P><B>Note:</B> This stream object can either be a standard
-     * Java stream object or your own subclass that implements the
-     * standard interface.
-     * <p>
-     * The updater methods are used to update column values in the
-     * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnIndex the first column is 1, the second is 2, ...
-     * @param reader An object that contains the data to set the parameter value to.
-     * @param length the number of characters in the parameter data.
-     * @exception SQLException if a database access error occurs,
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
-     * or this method is called on a closed result set
-     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-     * this method
-     * @since 1.6
-     */
-    public void updateClob(int columnIndex,  Reader reader, long length) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
-    }
-
-    /**
-     * Updates the designated column using the given <code>Reader</code>
-     * object, which is the given number of characters long.
-     * When a very large UNICODE value is input to a <code>LONGVARCHAR</code>
-     * parameter, it may be more practical to send it via a
-     * <code>java.io.Reader</code> object. The data will be read from the stream
-     * as needed until end-of-file is reached.  The JDBC driver will
-     * do any necessary conversion from UNICODE to the database char format.
-     *
-     * <P><B>Note:</B> This stream object can either be a standard
-     * Java stream object or your own subclass that implements the
-     * standard interface.
-     * <p>
-     * The updater methods are used to update column values in the
-     * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
-     * @param reader An object that contains the data to set the parameter value to.
-     * @param length the number of characters in the parameter data.
-     * @exception SQLException if a database access error occurs,
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
-     * or this method is called on a closed result set
-     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-     * this method
-     * @since 1.6
-     */
-    public void updateClob(String columnLabel,  Reader reader, long length) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
-    }
-
-   /**
-     * Updates the designated column using the given <code>Reader</code>
-     * object.
-     * When a very large UNICODE value is input to a <code>LONGVARCHAR</code>
-     * parameter, it may be more practical to send it via a
-     * <code>java.io.Reader</code> object. The data will be read from the stream
-     * as needed until end-of-file is reached.  The JDBC driver will
-     * do any necessary conversion from UNICODE to the database char format.
-     *
-     * <P><B>Note:</B> This stream object can either be a standard
-     * Java stream object or your own subclass that implements the
-     * standard interface.
-     *   <P><B>Note:</B> Consult your JDBC driver documentation to determine if
-     * it might be more efficient to use a version of
-     * <code>updateClob</code> which takes a length parameter.
-     * <p>
-     * The updater methods are used to update column values in the
-     * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnIndex the first column is 1, the second is 2, ...
-     * @param reader An object that contains the data to set the parameter value to.
-     * @exception SQLException if a database access error occurs,
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
-     * or this method is called on a closed result set
-     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-     * this method
-     * @since 1.6
-     */
-    public void updateClob(int columnIndex,  Reader reader) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
-    }
-
-    /**
-     * Updates the designated column using the given <code>Reader</code>
-     * object.
-     * When a very large UNICODE value is input to a <code>LONGVARCHAR</code>
-     * parameter, it may be more practical to send it via a
-     * <code>java.io.Reader</code> object. The data will be read from the stream
-     * as needed until end-of-file is reached.  The JDBC driver will
-     * do any necessary conversion from UNICODE to the database char format.
-     *
-     * <P><B>Note:</B> This stream object can either be a standard
-     * Java stream object or your own subclass that implements the
-     * standard interface.
-     *  <P><B>Note:</B> Consult your JDBC driver documentation to determine if
-     * it might be more efficient to use a version of
-     * <code>updateClob</code> which takes a length parameter.
-     * <p>
-     * The updater methods are used to update column values in the
-     * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the la
-bel is the name of the column
-     * @param reader An object that contains the data to set the parameter value to.
-     * @exception SQLException if a database access error occurs,
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
-     * or this method is called on a closed result set
-     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-     * this method
-     * @since 1.6
-     */
-    public void updateClob(String columnLabel,  Reader reader) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
-    }
-
-   /**
-     * Updates the designated column using the given <code>Reader</code>
-     * object, which is the given number of characters long.
-     * When a very large UNICODE value is input to a <code>LONGVARCHAR</code>
-     * parameter, it may be more practical to send it via a
-     * <code>java.io.Reader</code> object. The data will be read from the stream
-     * as needed until end-of-file is reached.  The JDBC driver will
-     * do any necessary conversion from UNICODE to the database char format.
-     *
-     * <P><B>Note:</B> This stream object can either be a standard
-     * Java stream object or your own subclass that implements the
-     * standard interface.
-     * <p>
-     * The updater methods are used to update column values in the
-     * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnIndex the first column is 1, the second 2, ...
-     * @param reader An object that contains the data to set the parameter value to.
-     * @param length the number of characters in the parameter data.
-     * @throws SQLException if the driver does not support national
-     *         character sets;  if the driver can detect that a data conversion
-     *  error could occur; this method is called on a closed result set,
-     * if a database access error occurs or
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
-     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-     * this method
-     * @since 1.6
-     */
-    public void updateNClob(int columnIndex,  Reader reader, long length) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
-    }
-
-    /**
-     * Updates the designated column using the given <code>Reader</code>
-     * object, which is the given number of characters long.
-     * When a very large UNICODE value is input to a <code>LONGVARCHAR</code>
-     * parameter, it may be more practical to send it via a
-     * <code>java.io.Reader</code> object. The data will be read from the stream
-     * as needed until end-of-file is reached.  The JDBC driver will
-     * do any necessary conversion from UNICODE to the database char format.
-     *
-     * <P><B>Note:</B> This stream object can either be a standard
-     * Java stream object or your own subclass that implements the
-     * standard interface.
-     * <p>
-     * The updater methods are used to update column values in the
-     * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
-     * @param reader An object that contains the data to set the parameter value to.
-     * @param length the number of characters in the parameter data.
-     * @throws SQLException if the driver does not support national
-     *         character sets;  if the driver can detect that a data conversion
-     *  error could occur; this method is called on a closed result set;
-     *  if a database access error occurs or
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
-     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-     * this method
-     * @since 1.6
-     */
-    public void updateNClob(String columnLabel,  Reader reader, long length) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
-    }
-
-    /**
-     * Updates the designated column using the given <code>Reader</code>
-     * object.
-     * When a very large UNICODE value is input to a <code>LONGVARCHAR</code>
-     * parameter, it may be more practical to send it via a
-     * <code>java.io.Reader</code> object. The data will be read from the stream
-     * as needed until end-of-file is reached.  The JDBC driver will
-     * do any necessary conversion from UNICODE to the database char format.
-     *
-     * <P><B>Note:</B> This stream object can either be a standard
-     * Java stream object or your own subclass that implements the
-     * standard interface.
-     * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
-     * it might be more efficient to use a version of
-     * <code>updateNClob</code> which takes a length parameter.
-     * <p>
-     * The updater methods are used to update column values in the
-     * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnIndex the first column is 1, the second 2, ...
-     * @param reader An object that contains the data to set the parameter value to.
-     * @throws SQLException if the driver does not support national
-     *         character sets;  if the driver can detect that a data conversion
-     *  error could occur; this method is called on a closed result set,
-     * if a database access error occurs or
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
-     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-     * this method
-     * @since 1.6
-     */
-    public void updateNClob(int columnIndex,  Reader reader) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
-    }
-
-    /**
-     * Updates the designated column using the given <code>Reader</code>
-     * object.
-     * When a very large UNICODE value is input to a <code>LONGVARCHAR</code>
-     * parameter, it may be more practical to send it via a
-     * <code>java.io.Reader</code> object. The data will be read from the stream
-     * as needed until end-of-file is reached.  The JDBC driver will
-     * do any necessary conversion from UNICODE to the database char format.
-     *
-     * <P><B>Note:</B> This stream object can either be a standard
-     * Java stream object or your own subclass that implements the
-     * standard interface.
-     * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
-     * it might be more efficient to use a version of
-     * <code>updateNClob</code> which takes a length parameter.
-     * <p>
-     * The updater methods are used to update column values in the
-     * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the la
-bel is the name of the column
-     * @param reader An object that contains the data to set the parameter value to.
-     * @throws SQLException if the driver does not support national
-     *         character sets;  if the driver can detect that a data conversion
-     *  error could occur; this method is called on a closed result set;
-     *  if a database access error occurs or
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
-     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-     * this method
-     * @since 1.6
-     */
-    public void updateNClob(String columnLabel,  Reader reader) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
-    }
-
-        /**
-     * Updates the designated column with an ascii stream value, which will have
-     * the specified number of bytes.
-     * The updater methods are used to update column values in the
-     * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnIndex the first column is 1, the second is 2, ...
-     * @param x the new column value
-     * @param length the length of the stream
-     * @exception SQLException if a database access error occurs,
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
-     * or this method is called on a closed result set
-     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-     * this method
-     * @since 1.6
-     */
-    public void updateAsciiStream(int columnIndex,
-                           java.io.InputStream x,
-                           long length) throws SQLException {
-
-    }
-
-    /**
-     * Updates the designated column with a binary stream value, which will have
-     * the specified number of bytes.
-     * The updater methods are used to update column values in the
-     * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnIndex the first column is 1, the second is 2, ...
-     * @param x the new column value
-     * @param length the length of the stream
-     * @exception SQLException if a database access error occurs,
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
-     * or this method is called on a closed result set
-     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-     * this method
-     * @since 1.6
-     */
-    public void updateBinaryStream(int columnIndex,
-                            java.io.InputStream x,
-                            long length) throws SQLException {
-    }
-
-    /**
-     * Updates the designated column with a character stream value, which will have
-     * the specified number of bytes.
-     * The updater methods are used to update column values in the
-     * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnIndex the first column is 1, the second is 2, ...
-     * @param x the new column value
-     * @param length the length of the stream
-     * @exception SQLException if a database access error occurs,
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
-     * or this method is called on a closed result set
-     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-     * this method
-     * @since 1.6
-     */
-    public void updateCharacterStream(int columnIndex,
-                             java.io.Reader x,
-                             long length) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
-    }
-
-    /**
-     * Updates the designated column with a character stream value, which will have
-     * the specified number of bytes.
-     * The updater methods are used to update column values in the
-     * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the la
-bel is the name of the column
-     * @param reader the <code>java.io.Reader</code> object containing
-     *        the new column value
-     * @param length the length of the stream
-     * @exception SQLException if a database access error occurs,
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
-     * or this method is called on a closed result set
-     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-     * this method
-     * @since 1.6
-     */
-    public void updateCharacterStream(String columnLabel,
-                             java.io.Reader reader,
-                             long length) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
-    }
-     /**
-     * Updates the designated column with an ascii stream value, which will have
-     * the specified number of bytes..
-     * The updater methods are used to update column values in the
-     * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
-     * @param x the new column value
-     * @param length the length of the stream
-     * @exception SQLException if a database access error occurs,
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
-     * or this method is called on a closed result set
-     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-     * this method
-     * @since 1.6
-     */
-    public void updateAsciiStream(String columnLabel,
-                           java.io.InputStream x,
-                           long length) throws SQLException {
-    }
-
-    /**
-     * Updates the designated column with a binary stream value, which will have
-     * the specified number of bytes.
-     * The updater methods are used to update column values in the
-     * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
-     * @param x the new column value
-     * @param length the length of the stream
-     * @exception SQLException if a database access error occurs,
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
-     * or this method is called on a closed result set
-     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-     * this method
-     * @since 1.6
-     */
-    public void updateBinaryStream(String columnLabel,
-                            java.io.InputStream x,
-                            long length) throws SQLException {
-    }
-
-    /**
-     * Updates the designated column with a binary stream value.
-     * The updater methods are used to update column values in the
-     * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
-     * it might be more efficient to use a version of
-     * <code>updateBinaryStream</code> which takes a length parameter.
-     *
-     * @param columnIndex the first column is 1, the second is 2, ...
-     * @param x the new column value
-     * @exception SQLException if a database access error occurs,
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
-     * or this method is called on a closed result set
-     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-     * this method
-     * @since 1.6
-     */
-    public void updateBinaryStream(int columnIndex,
-                            java.io.InputStream x) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
-    }
-
-
-    /**
-     * Updates the designated column with a binary stream value.
-     * The updater methods are used to update column values in the
-     * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
-     * it might be more efficient to use a version of
-     * <code>updateBinaryStream</code> which takes a length parameter.
-     *
-     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the la
-bel is the name of the column
-     * @param x the new column value
-     * @exception SQLException if a database access error occurs,
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
-     * or this method is called on a closed result set
-     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-     * this method
-     * @since 1.6
-     */
-    public void updateBinaryStream(String columnLabel,
-                            java.io.InputStream x) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
-    }
-
-    /**
-     * Updates the designated column with a character stream value.
-     * The updater methods are used to update column values in the
-     * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
-     * it might be more efficient to use a version of
-     * <code>updateCharacterStream</code> which takes a length parameter.
-     *
-     * @param columnIndex the first column is 1, the second is 2, ...
-     * @param x the new column value
-     * @exception SQLException if a database access error occurs,
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
-     * or this method is called on a closed result set
-     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-     * this method
-     * @since 1.6
-     */
-    public void updateCharacterStream(int columnIndex,
-                             java.io.Reader x) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
-    }
-
-    /**
-     * Updates the designated column with a character stream value.
-     * The updater methods are used to update column values in the
-     * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
-     * it might be more efficient to use a version of
-     * <code>updateCharacterStream</code> which takes a length parameter.
-     *
-     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the la
-bel is the name of the column
-     * @param reader the <code>java.io.Reader</code> object containing
-     *        the new column value
-     * @exception SQLException if a database access error occurs,
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
-     * or this method is called on a closed result set
-     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-     * this method
-     * @since 1.6
-     */
-    public void updateCharacterStream(String columnLabel,
-                             java.io.Reader reader) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
-    }
-
-    /**
-     * Updates the designated column with an ascii stream value.
-     * The updater methods are used to update column values in the
-     * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
-     * it might be more efficient to use a version of
-     * <code>updateAsciiStream</code> which takes a length parameter.
-     *
-     * @param columnIndex the first column is 1, the second is 2, ...
-     * @param x the new column value
-     * @exception SQLException if a database access error occurs,
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
-     * or this method is called on a closed result set
-     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-     * this method
-     * @since 1.6
-     */
-    public void updateAsciiStream(int columnIndex,
-                           java.io.InputStream x) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
-    }
-
-    /**
-     * Updates the designated column with an ascii stream value.
-     * The updater methods are used to update column values in the
-     * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
-     * it might be more efficient to use a version of
-     * <code>updateAsciiStream</code> which takes a length parameter.
-     *
-     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the la
-bel is the name of the column
-     * @param x the new column value
-     * @exception SQLException if a database access error occurs,
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
-     * or this method is called on a closed result set
-     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-     * this method
-     * @since 1.6
-     */
-    public void updateAsciiStream(String columnLabel,
-                           java.io.InputStream x) throws SQLException {
-
-    }
-
-   /**
-  * Sets the designated parameter to the given <code>java.net.URL</code> value.
-  * The driver converts this to an SQL <code>DATALINK</code> value
-  * when it sends it to the database.
-  *
-  * @param parameterIndex the first parameter is 1, the second is 2, ...
-  * @param x the <code>java.net.URL</code> object to be set
-  * @exception SQLException if a database access error occurs or
-  * this method is called on a closed <code>PreparedStatement</code>
-  * @throws SQLFeatureNotSupportedException  if the JDBC driver does not support this method
-  * @since 1.4
-  */
-  public void setURL(int parameterIndex, java.net.URL x) throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
-   }
-
-  /**
-  * Sets the designated parameter to a <code>Reader</code> object.
-  * This method differs from the <code>setCharacterStream (int, Reader)</code> method
-  * because it informs the driver that the parameter value should be sent to
-  * the server as a <code>NCLOB</code>.  When the <code>setCharacterStream</code> method is used, the
-  * driver may have to do extra work to determine whether the parameter
-  * data should be sent to the server as a <code>LONGNVARCHAR</code> or a <code>NCLOB</code>
-  * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
-  * it might be more efficient to use a version of
-  * <code>setNClob</code> which takes a length parameter.
-  *
-  * @param parameterIndex index of the first parameter is 1, the second is 2, ...
-  * @param reader An object that contains the data to set the parameter value to.
-  * @throws SQLException if parameterIndex does not correspond to a parameter
-  * marker in the SQL statement;
-  * if the driver does not support national character sets;
-  * if the driver can detect that a data conversion
-  *  error could occur;  if a database access error occurs or
-  * this method is called on a closed <code>PreparedStatement</code>
-  * @throws SQLFeatureNotSupportedException  if the JDBC driver does not support this method
-  *
-  * @since 1.6
-  */
-  public void setNClob(int parameterIndex, Reader reader)
-    throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
-   }
-
-  /**
-  * Sets the designated parameter to a <code>Reader</code> object.  The <code>reader</code> must contain  the number
-             * of characters specified by length otherwise a <code>SQLException</code> will be
-            * generated when the <code>CallableStatement</code> is executed.
-            * This method differs from the <code>setCharacterStream (int, Reader, int)</code> method
-            * because it informs the driver that the parameter value should be sent to
-            * the server as a <code>NCLOB</code>.  When the <code>setCharacterStream</code> method is used, the
-            * driver may have to do extra work to determine whether the parameter
-            * data should be send to the server as a <code>LONGNVARCHAR</code> or a <code>NCLOB</code>
-            *
-            * @param parameterName the name of the parameter to be set
-            * @param reader An object that contains the data to set the parameter value to.
-            * @param length the number of characters in the parameter data.
-            * @throws SQLException if parameterIndex does not correspond to a parameter
-            * marker in the SQL statement; if the length specified is less than zero;
-            * if the driver does not support national
-            *         character sets;  if the driver can detect that a data conversion
-            *  error could occur; if a database access error occurs or
-            * this method is called on a closed <code>CallableStatement</code>
-            * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-            * this method
-            * @since 1.6
-            */
-            public void setNClob(String parameterName, Reader reader, long length)
-    throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
-   }
-
-
- /**
-  * Sets the designated parameter to a <code>Reader</code> object.
-  * This method differs from the <code>setCharacterStream (int, Reader)</code> method
-  * because it informs the driver that the parameter value should be sent to
-  * the server as a <code>NCLOB</code>.  When the <code>setCharacterStream</code> method is used, the
-  * driver may have to do extra work to determine whether the parameter
-  * data should be send to the server as a <code>LONGNVARCHAR</code> or a <code>NCLOB</code>
-  * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
-  * it might be more efficient to use a version of
-  * <code>setNClob</code> which takes a length parameter.
-  *
-  * @param parameterName the name of the parameter
-  * @param reader An object that contains the data to set the parameter value to.
-  * @throws SQLException if the driver does not support national character sets;
-  * if the driver can detect that a data conversion
-  *  error could occur;  if a database access error occurs or
-  * this method is called on a closed <code>CallableStatement</code>
-  * @throws SQLFeatureNotSupportedException  if the JDBC driver does not support this method
-  *
-  * @since 1.6
-  */
-  public void setNClob(String parameterName, Reader reader)
-    throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
-   }
-
-
-    /**
-     * Sets the designated parameter to a <code>Reader</code> object.  The reader must contain  the number
-     * of characters specified by length otherwise a <code>SQLException</code> will be
-     * generated when the <code>PreparedStatement</code> is executed.
-     * This method differs from the <code>setCharacterStream (int, Reader, int)</code> method
-     * because it informs the driver that the parameter value should be sent to
-     * the server as a <code>NCLOB</code>.  When the <code>setCharacterStream</code> method is used, the
-     * driver may have to do extra work to determine whether the parameter
-     * data should be sent to the server as a <code>LONGNVARCHAR</code> or a <code>NCLOB</code>
-     * @param parameterIndex index of the first parameter is 1, the second is 2, ...
-     * @param reader An object that contains the data to set the parameter value to.
-     * @param length the number of characters in the parameter data.
-     * @throws SQLException if parameterIndex does not correspond to a parameter
-     * marker in the SQL statement; if the length specified is less than zero;
-     * if the driver does not support national character sets;
-     * if the driver can detect that a data conversion
-     *  error could occur;  if a database access error occurs or
-     * this method is called on a closed <code>PreparedStatement</code>
-     * @throws SQLFeatureNotSupportedException  if the JDBC driver does not support this method
-     *
-     * @since 1.6
-     */
-     public void setNClob(int parameterIndex, Reader reader, long length)
-       throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
-   }
-
-
-    /**
-     * Sets the designated parameter to a <code>java.sql.NClob</code> object. The driver converts this to
-a
-     * SQL <code>NCLOB</code> value when it sends it to the database.
-     * @param parameterIndex of the first parameter is 1, the second is 2, ...
-     * @param value the parameter value
-     * @throws SQLException if the driver does not support national
-     *         character sets;  if the driver can detect that a data conversion
-     *  error could occur ; or if a database access error occurs
-     * @since 1.6
-     */
-     public void setNClob(int parameterIndex, NClob value) throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
-   }
-
-
-   /**
-  * Sets the designated paramter to the given <code>String</code> object.
-  * The driver converts this to a SQL <code>NCHAR</code> or
-  * <code>NVARCHAR</code> or <code>LONGNVARCHAR</code> value
-  * (depending on the argument's
-  * size relative to the driver's limits on <code>NVARCHAR</code> values)
-  * when it sends it to the database.
-  *
-  * @param parameterIndex of the first parameter is 1, the second is 2, ...
-  * @param value the parameter value
-  * @throws SQLException if the driver does not support national
-  *         character sets;  if the driver can detect that a data conversion
-  *  error could occur ; or if a database access error occurs
-  * @since 1.6
-  */
-  public void setNString(int parameterIndex, String value) throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
-   }
-
-
- /**
-  * Sets the designated paramter to the given <code>String</code> object.
-  * The driver converts this to a SQL <code>NCHAR</code> or
-  * <code>NVARCHAR</code> or <code>LONGNVARCHAR</code>
-  * @param parameterName the name of the column to be set
-  * @param value the parameter value
-  * @throws SQLException if the driver does not support national
-  *         character sets;  if the driver can detect that a data conversion
-  *  error could occur; or if a database access error occurs
-  * @since 1.6
-  */
- public void setNString(String parameterName, String value)
-         throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
-   }
-
-
- /**
-  * Sets the designated parameter to a <code>Reader</code> object. The
-  * <code>Reader</code> reads the data till end-of-file is reached. The
-  * driver does the necessary conversion from Java character format to
-  * the national character set in the database.
-  * @param parameterIndex of the first parameter is 1, the second is 2, ...
-  * @param value the parameter value
-  * @param length the number of characters in the parameter data.
-  * @throws SQLException if the driver does not support national
-  *         character sets;  if the driver can detect that a data conversion
-  *  error could occur ; or if a database access error occurs
-  * @since 1.6
-  */
-  public void setNCharacterStream(int parameterIndex, Reader value, long length) throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
-   }
-
-
- /**
-  * Sets the designated parameter to a <code>Reader</code> object. The
-  * <code>Reader</code> reads the data till end-of-file is reached. The
-  * driver does the necessary conversion from Java character format to
-  * the national character set in the database.
-  * @param parameterName the name of the column to be set
-  * @param value the parameter value
-  * @param length the number of characters in the parameter data.
-  * @throws SQLException if the driver does not support national
-  *         character sets;  if the driver can detect that a data conversion
-  *  error could occur; or if a database access error occurs
-  * @since 1.6
-  */
- public void setNCharacterStream(String parameterName, Reader value, long length)
-         throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
-   }
-
-  /**
-  * Sets the designated parameter to a <code>Reader</code> object. The
-  * <code>Reader</code> reads the data till end-of-file is reached. The
-  * driver does the necessary conversion from Java character format to
-  * the national character set in the database.
-
-  * <P><B>Note:</B> This stream object can either be a standard
-  * Java stream object or your own subclass that implements the
-  * standard interface.
-  * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
-  * it might be more efficient to use a version of
-  * <code>setNCharacterStream</code> which takes a length parameter.
-  *
-  * @param parameterName the name of the parameter
-  * @param value the parameter value
-  * @throws SQLException if the driver does not support national
-  *         character sets;  if the driver can detect that a data conversion
-  *  error could occur ; if a database access error occurs; or
-  * this method is called on a closed <code>CallableStatement</code>
-  * @throws SQLFeatureNotSupportedException  if the JDBC driver does not support this method
-  * @since 1.6
-  */
-  public void setNCharacterStream(String parameterName, Reader value) throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
-   }
-
-  /**
-    * Sets the designated parameter to the given <code>java.sql.Timestamp</code> value,
-    * using the given <code>Calendar</code> object.  The driver uses
-    * the <code>Calendar</code> object to construct an SQL <code>TIMESTAMP</code> value,
-    * which the driver then sends to the database.  With a
-    * a <code>Calendar</code> object, the driver can calculate the timestamp
-    * taking into account a custom timezone.  If no
-    * <code>Calendar</code> object is specified, the driver uses the default
-    * timezone, which is that of the virtual machine running the application.
-    *
-    * @param parameterName the name of the parameter
-    * @param x the parameter value
-    * @param cal the <code>Calendar</code> object the driver will use
-    *            to construct the timestamp
-    * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
-    * @see #getTimestamp
-    * @since 1.4
-    */
-    public void setTimestamp(String parameterName, java.sql.Timestamp x, Calendar cal)
-       throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
-   }
-
-    /**
-    * Sets the designated parameter to a <code>Reader</code> object.  The <code>reader</code> must contain  the number
-               * of characters specified by length otherwise a <code>SQLException</code> will be
-               * generated when the <code>CallableStatement</code> is executed.
-              * This method differs from the <code>setCharacterStream (int, Reader, int)</code> method
-              * because it informs the driver that the parameter value should be sent to
-              * the server as a <code>CLOB</code>.  When the <code>setCharacterStream</code> method is used, the
-              * driver may have to do extra work to determine whether the parameter
-              * data should be send to the server as a <code>LONGVARCHAR</code> or a <code>CLOB</code>
-              * @param parameterName the name of the parameter to be set
-              * @param reader An object that contains the data to set the parameter value to.
-              * @param length the number of characters in the parameter data.
-              * @throws SQLException if parameterIndex does not correspond to a parameter
-              * marker in the SQL statement; if the length specified is less than zero;
-              * a database access error occurs or
-              * this method is called on a closed <code>CallableStatement</code>
-              * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-              * this method
-              *
-              * @since 1.6
-              */
-      public  void setClob(String parameterName, Reader reader, long length)
-      throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
-   }
-
-
-  /**
-    * Sets the designated parameter to the given <code>java.sql.Clob</code> object.
-    * The driver converts this to an SQL <code>CLOB</code> value when it
-    * sends it to the database.
-    *
-    * @param parameterName the name of the parameter
-    * @param x a <code>Clob</code> object that maps an SQL <code>CLOB</code> value
-    * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
-    * @since 1.6
-    */
-    public void setClob (String parameterName, Clob x) throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
-   }
-
-
- /**
-    * Sets the designated parameter to a <code>Reader</code> object.
-    * This method differs from the <code>setCharacterStream (int, Reader)</code> method
-    * because it informs the driver that the parameter value should be sent to
-    * the server as a <code>CLOB</code>.  When the <code>setCharacterStream</code> method is used, the
-    * driver may have to do extra work to determine whether the parameter
-    * data should be send to the server as a <code>LONGVARCHAR</code> or a <code>CLOB</code>
-    *
-    * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
-    * it might be more efficient to use a version of
-    * <code>setClob</code> which takes a length parameter.
-    *
-    * @param parameterName the name of the parameter
-    * @param reader An object that contains the data to set the parameter value to.
-    * @throws SQLException if a database access error occurs or this method is called on
-    * a closed <code>CallableStatement</code>
-    *
-    * @throws SQLFeatureNotSupportedException  if the JDBC driver does not support this method
-    * @since 1.6
-    */
-    public void setClob(String parameterName, Reader reader)
-      throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
-   }
-
-
- /**
-    * Sets the designated parameter to the given <code>java.sql.Date</code> value
-    * using the default time zone of the virtual machine that is running
-    * the application.
-    * The driver converts this
-    * to an SQL <code>DATE</code> value when it sends it to the database.
-    *
-    * @param parameterName the name of the parameter
-    * @param x the parameter value
-    * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
-    * @see #getDate
-    * @since 1.4
-    */
-    public void setDate(String parameterName, java.sql.Date x)
-       throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
-   }
-
-
- /**
-    * Sets the designated parameter to the given <code>java.sql.Date</code> value,
-    * using the given <code>Calendar</code> object.  The driver uses
-    * the <code>Calendar</code> object to construct an SQL <code>DATE</code> value,
-    * which the driver then sends to the database.  With a
-    * a <code>Calendar</code> object, the driver can calculate the date
-    * taking into account a custom timezone.  If no
-    * <code>Calendar</code> object is specified, the driver uses the default
-    * timezone, which is that of the virtual machine running the application.
-    *
-    * @param parameterName the name of the parameter
-    * @param x the parameter value
-    * @param cal the <code>Calendar</code> object the driver will use
-    *            to construct the date
-    * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
-    * @see #getDate
-    * @since 1.4
-    */
-   public void setDate(String parameterName, java.sql.Date x, Calendar cal)
-       throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
-   }
-
-
- /**
-    * Sets the designated parameter to the given <code>java.sql.Time</code> value.
-    * The driver converts this
-    * to an SQL <code>TIME</code> value when it sends it to the database.
-    *
-    * @param parameterName the name of the parameter
-    * @param x the parameter value
-    * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
-    * @see #getTime
-    * @since 1.4
-    */
-   public void setTime(String parameterName, java.sql.Time x)
-       throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
-   }
-
-
- /**
-    * Sets the designated parameter to the given <code>java.sql.Time</code> value,
-    * using the given <code>Calendar</code> object.  The driver uses
-    * the <code>Calendar</code> object to construct an SQL <code>TIME</code> value,
-    * which the driver then sends to the database.  With a
-    * a <code>Calendar</code> object, the driver can calculate the time
-    * taking into account a custom timezone.  If no
-    * <code>Calendar</code> object is specified, the driver uses the default
-    * timezone, which is that of the virtual machine running the application.
-    *
-    * @param parameterName the name of the parameter
-    * @param x the parameter value
-    * @param cal the <code>Calendar</code> object the driver will use
-    *            to construct the time
-    * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
-    * @see #getTime
-    * @since 1.4
-    */
-   public void setTime(String parameterName, java.sql.Time x, Calendar cal)
-       throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
-   }
-
-   /**
-   * Sets the designated parameter to a <code>Reader</code> object.
-   * This method differs from the <code>setCharacterStream (int, Reader)</code> method
-   * because it informs the driver that the parameter value should be sent to
-   * the server as a <code>CLOB</code>.  When the <code>setCharacterStream</code> method is used, the
-   * driver may have to do extra work to determine whether the parameter
-   * data should be sent to the server as a <code>LONGVARCHAR</code> or a <code>CLOB</code>
-   *
-   * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
-   * it might be more efficient to use a version of
-   * <code>setClob</code> which takes a length parameter.
-   *
-   * @param parameterIndex index of the first parameter is 1, the second is 2, ...
-   * @param reader An object that contains the data to set the parameter value to.
-   * @throws SQLException if a database access error occurs, this method is called on
-   * a closed <code>PreparedStatement</code>or if parameterIndex does not correspond to a parameter
-   * marker in the SQL statement
-   *
-   * @throws SQLFeatureNotSupportedException  if the JDBC driver does not support this method
-   * @since 1.6
-   */
-   public void setClob(int parameterIndex, Reader reader)
-     throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
-   }
-
-    /**
-   * Sets the designated parameter to a <code>Reader</code> object.  The reader must contain  the number
-   * of characters specified by length otherwise a <code>SQLException</code> will be
-   * generated when the <code>PreparedStatement</code> is executed.
-   *This method differs from the <code>setCharacterStream (int, Reader, int)</code> method
-   * because it informs the driver that the parameter value should be sent to
-   * the server as a <code>CLOB</code>.  When the <code>setCharacterStream</code> method is used, the
-   * driver may have to do extra work to determine whether the parameter
-   * data should be sent to the server as a <code>LONGVARCHAR</code> or a <code>CLOB</code>
-   * @param parameterIndex index of the first parameter is 1, the second is 2, ...
-   * @param reader An object that contains the data to set the parameter value to.
-   * @param length the number of characters in the parameter data.
-   * @throws SQLException if a database access error occurs, this method is called on
-   * a closed <code>PreparedStatement</code>, if parameterIndex does not correspond to a parameter
-   * marker in the SQL statement, or if the length specified is less than zero.
-   *
-   * @throws SQLFeatureNotSupportedException  if the JDBC driver does not support this method
-   * @since 1.6
-   */
-   public void setClob(int parameterIndex, Reader reader, long length)
-     throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
-   }
-
-
- /**
-    * Sets the designated parameter to a <code>InputStream</code> object.  The inputstream must contain  the number
-    * of characters specified by length otherwise a <code>SQLException</code> will be
-    * generated when the <code>PreparedStatement</code> is executed.
-    * This method differs from the <code>setBinaryStream (int, InputStream, int)</code>
-    * method because it informs the driver that the parameter value should be
-    * sent to the server as a <code>BLOB</code>.  When the <code>setBinaryStream</code> method is used,
-    * the driver may have to do extra work to determine whether the parameter
-    * data should be sent to the server as a <code>LONGVARBINARY</code> or a <code>BLOB</code>
-    * @param parameterIndex index of the first parameter is 1,
-    * the second is 2, ...
-    * @param inputStream An object that contains the data to set the parameter
-    * value to.
-    * @param length the number of bytes in the parameter data.
-    * @throws SQLException if a database access error occurs,
-    * this method is called on a closed <code>PreparedStatement</code>,
-    * if parameterIndex does not correspond
-    * to a parameter marker in the SQL statement,  if the length specified
-    * is less than zero or if the number of bytes in the inputstream does not match
-    * the specfied length.
-    * @throws SQLFeatureNotSupportedException  if the JDBC driver does not support this method
-    *
-    * @since 1.6
-    */
-    public void setBlob(int parameterIndex, InputStream inputStream, long length)
-       throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
-   }
-
-
- /**
-    * Sets the designated parameter to a <code>InputStream</code> object.
-    * This method differs from the <code>setBinaryStream (int, InputStream)</code>
-    * method because it informs the driver that the parameter value should be
-    * sent to the server as a <code>BLOB</code>.  When the <code>setBinaryStream</code> method is used,
-    * the driver may have to do extra work to determine whether the parameter
-    * data should be sent to the server as a <code>LONGVARBINARY</code> or a <code>BLOB</code>
-    *
-    * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
-    * it might be more efficient to use a version of
-    * <code>setBlob</code> which takes a length parameter.
-    *
-    * @param parameterIndex index of the first parameter is 1,
-    * the second is 2, ...
-    * @param inputStream An object that contains the data to set the parameter
-    * value to.
-    * @throws SQLException if a database access error occurs,
-    * this method is called on a closed <code>PreparedStatement</code> or
-    * if parameterIndex does not correspond
-    * to a parameter marker in the SQL statement,
-    * @throws SQLFeatureNotSupportedException  if the JDBC driver does not support this method
-    *
-    * @since 1.6
-    */
-    public void setBlob(int parameterIndex, InputStream inputStream)
-       throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
-   }
-
-
- /**
-    * Sets the designated parameter to a <code>InputStream</code> object.  The <code>inputstream</code> must contain  the number
-     * of characters specified by length, otherwise a <code>SQLException</code> will be
-     * generated when the <code>CallableStatement</code> is executed.
-     * This method differs from the <code>setBinaryStream (int, InputStream, int)</code>
-     * method because it informs the driver that the parameter value should be
-     * sent to the server as a <code>BLOB</code>.  When the <code>setBinaryStream</code> method is used,
-     * the driver may have to do extra work to determine whether the parameter
-     * data should be sent to the server as a <code>LONGVARBINARY</code> or a <code>BLOB</code>
-     *
-     * @param parameterName the name of the parameter to be set
-     * the second is 2, ...
-     *
-     * @param inputStream An object that contains the data to set the parameter
-     * value to.
-     * @param length the number of bytes in the parameter data.
-     * @throws SQLException  if parameterIndex does not correspond
-     * to a parameter marker in the SQL statement,  or if the length specified
-     * is less than zero; if the number of bytes in the inputstream does not match
-     * the specfied length; if a database access error occurs or
-     * this method is called on a closed <code>CallableStatement</code>
-     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-     * this method
-     *
-     * @since 1.6
-     */
-     public void setBlob(String parameterName, InputStream inputStream, long length)
-        throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
-   }
-
-
- /**
-    * Sets the designated parameter to the given <code>java.sql.Blob</code> object.
-    * The driver converts this to an SQL <code>BLOB</code> value when it
-    * sends it to the database.
-    *
-    * @param parameterName the name of the parameter
-    * @param x a <code>Blob</code> object that maps an SQL <code>BLOB</code> value
-    * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
-    * @since 1.6
-    */
-   public void setBlob (String parameterName, Blob x) throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
-   }
-
-
- /**
-    * Sets the designated parameter to a <code>InputStream</code> object.
-    * This method differs from the <code>setBinaryStream (int, InputStream)</code>
-    * method because it informs the driver that the parameter value should be
-    * sent to the server as a <code>BLOB</code>.  When the <code>setBinaryStream</code> method is used,
-    * the driver may have to do extra work to determine whether the parameter
-    * data should be send to the server as a <code>LONGVARBINARY</code> or a <code>BLOB</code>
-    *
-    * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
-    * it might be more efficient to use a version of
-    * <code>setBlob</code> which takes a length parameter.
-    *
-    * @param parameterName the name of the parameter
-    * @param inputStream An object that contains the data to set the parameter
-    * value to.
-    * @throws SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @throws SQLFeatureNotSupportedException  if the JDBC driver does not support this method
-    *
-    * @since 1.6
-    */
-    public void setBlob(String parameterName, InputStream inputStream)
-       throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
-   }
-
-    /**
-    * Sets the value of the designated parameter with the given object. The second
-    * argument must be an object type; for integral values, the
-    * <code>java.lang</code> equivalent objects should be used.
-    *
-    * <p>The given Java object will be converted to the given targetSqlType
-    * before being sent to the database.
-    *
-    * If the object has a custom mapping (is of a class implementing the
-    * interface <code>SQLData</code>),
-    * the JDBC driver should call the method <code>SQLData.writeSQL</code> to write it
-    * to the SQL data stream.
-    * If, on the other hand, the object is of a class implementing
-    * <code>Ref</code>, <code>Blob</code>, <code>Clob</code>,  <code>NClob</code>,
-    *  <code>Struct</code>, <code>java.net.URL</code>,
-    * or <code>Array</code>, the driver should pass it to the database as a
-    * value of the corresponding SQL type.
-    * <P>
-    * Note that this method may be used to pass datatabase-
-    * specific abstract data types.
-    *
-    * @param parameterName the name of the parameter
-    * @param x the object containing the input parameter value
-    * @param targetSqlType the SQL type (as defined in java.sql.Types) to be
-    * sent to the database. The scale argument may further qualify this type.
-    * @param scale for java.sql.Types.DECIMAL or java.sql.Types.NUMERIC types,
-    *          this is the number of digits after the decimal point.  For all other
-    *          types, this value will be ignored.
-    * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @exception SQLFeatureNotSupportedException if <code>targetSqlType</code> is
-    * a <code>ARRAY</code>, <code>BLOB</code>, <code>CLOB</code>,
-    * <code>DATALINK</code>, <code>JAVA_OBJECT</code>, <code>NCHAR</code>,
-    * <code>NCLOB</code>, <code>NVARCHAR</code>, <code>LONGNVARCHAR</code>,
-    *  <code>REF</code>, <code>ROWID</code>, <code>SQLXML</code>
-    * or  <code>STRUCT</code> data type and the JDBC driver does not support
-    * this data type
-    * @see Types
-    * @see #getObject
-    * @since 1.4
-    */
-    public void setObject(String parameterName, Object x, int targetSqlType, int scale)
-       throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
-   }
-
-
-
- /**
-    * Sets the value of the designated parameter with the given object.
-    * This method is like the method <code>setObject</code>
-    * above, except that it assumes a scale of zero.
-    *
-    * @param parameterName the name of the parameter
-    * @param x the object containing the input parameter value
-    * @param targetSqlType the SQL type (as defined in java.sql.Types) to be
-    *                      sent to the database
-    * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @exception SQLFeatureNotSupportedException if <code>targetSqlType</code> is
-    * a <code>ARRAY</code>, <code>BLOB</code>, <code>CLOB</code>,
-    * <code>DATALINK</code>, <code>JAVA_OBJECT</code>, <code>NCHAR</code>,
-    * <code>NCLOB</code>, <code>NVARCHAR</code>, <code>LONGNVARCHAR</code>,
-    *  <code>REF</code>, <code>ROWID</code>, <code>SQLXML</code>
-    * or  <code>STRUCT</code> data type and the JDBC driver does not support
-    * this data type
-    * @see #getObject
-    * @since 1.4
-    */
-    public void setObject(String parameterName, Object x, int targetSqlType)
-       throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
-   }
-
-
- /**
-   * Sets the value of the designated parameter with the given object.
-   * The second parameter must be of type <code>Object</code>; therefore, the
-   * <code>java.lang</code> equivalent objects should be used for built-in types.
-   *
-   * <p>The JDBC specification specifies a standard mapping from
-   * Java <code>Object</code> types to SQL types.  The given argument
-   * will be converted to the corresponding SQL type before being
-   * sent to the database.
-   *
-   * <p>Note that this method may be used to pass datatabase-
-   * specific abstract data types, by using a driver-specific Java
-   * type.
-   *
-   * If the object is of a class implementing the interface <code>SQLData</code>,
-   * the JDBC driver should call the method <code>SQLData.writeSQL</code>
-   * to write it to the SQL data stream.
-   * If, on the other hand, the object is of a class implementing
-   * <code>Ref</code>, <code>Blob</code>, <code>Clob</code>,  <code>NClob</code>,
-   *  <code>Struct</code>, <code>java.net.URL</code>,
-   * or <code>Array</code>, the driver should pass it to the database as a
-   * value of the corresponding SQL type.
-   * <P>
-   * This method throws an exception if there is an ambiguity, for example, if the
-   * object is of a class implementing more than one of the interfaces named above.
-   *
-   * @param parameterName the name of the parameter
-   * @param x the object containing the input parameter value
-   * @exception SQLException if a database access error occurs,
-   * this method is called on a closed <code>CallableStatement</code> or if the given
-   *            <code>Object</code> parameter is ambiguous
-   * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-   * this method
-   * @see #getObject
-   * @since 1.4
-   */
-   public void setObject(String parameterName, Object x) throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
-   }
-
-    /**
-    * Sets the designated parameter to the given input stream, which will have
-    * the specified number of bytes.
-    * When a very large ASCII value is input to a <code>LONGVARCHAR</code>
-    * parameter, it may be more practical to send it via a
-    * <code>java.io.InputStream</code>. Data will be read from the stream
-    * as needed until end-of-file is reached.  The JDBC driver will
-    * do any necessary conversion from ASCII to the database char format.
-    *
-    * <P><B>Note:</B> This stream object can either be a standard
-    * Java stream object or your own subclass that implements the
-    * standard interface.
-    *
-    * @param parameterName the name of the parameter
-    * @param x the Java input stream that contains the ASCII parameter value
-    * @param length the number of bytes in the stream
-    * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
-    * @since 1.4
-    */
-   public void setAsciiStream(String parameterName, java.io.InputStream x, int length)
-       throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
-   }
-
-
- /**
-    * Sets the designated parameter to the given input stream, which will have
-    * the specified number of bytes.
-    * When a very large binary value is input to a <code>LONGVARBINARY</code>
-    * parameter, it may be more practical to send it via a
-    * <code>java.io.InputStream</code> object. The data will be read from the stream
-    * as needed until end-of-file is reached.
-    *
-    * <P><B>Note:</B> This stream object can either be a standard
-    * Java stream object or your own subclass that implements the
-    * standard interface.
-    *
-    * @param parameterName the name of the parameter
-    * @param x the java input stream which contains the binary parameter value
-    * @param length the number of bytes in the stream
-    * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
-    * @since 1.4
-    */
-   public void setBinaryStream(String parameterName, java.io.InputStream x,
-                        int length) throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
-   }
-
-
-  /**
-    * Sets the designated parameter to the given <code>Reader</code>
-    * object, which is the given number of characters long.
-    * When a very large UNICODE value is input to a <code>LONGVARCHAR</code>
-    * parameter, it may be more practical to send it via a
-    * <code>java.io.Reader</code> object. The data will be read from the stream
-    * as needed until end-of-file is reached.  The JDBC driver will
-    * do any necessary conversion from UNICODE to the database char format.
-    *
-    * <P><B>Note:</B> This stream object can either be a standard
-    * Java stream object or your own subclass that implements the
-    * standard interface.
-    *
-    * @param parameterName the name of the parameter
-    * @param reader the <code>java.io.Reader</code> object that
-    *        contains the UNICODE data used as the designated parameter
-    * @param length the number of characters in the stream
-    * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
-    * @since 1.4
-    */
-   public void setCharacterStream(String parameterName,
-                           java.io.Reader reader,
-                           int length) throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
-   }
-
-
-  /**
-   * Sets the designated parameter to the given input stream.
-   * When a very large ASCII value is input to a <code>LONGVARCHAR</code>
-   * parameter, it may be more practical to send it via a
-   * <code>java.io.InputStream</code>. Data will be read from the stream
-   * as needed until end-of-file is reached.  The JDBC driver will
-   * do any necessary conversion from ASCII to the database char format.
-   *
-   * <P><B>Note:</B> This stream object can either be a standard
-   * Java stream object or your own subclass that implements the
-   * standard interface.
-   * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
-   * it might be more efficient to use a version of
-   * <code>setAsciiStream</code> which takes a length parameter.
-   *
-   * @param parameterName the name of the parameter
-   * @param x the Java input stream that contains the ASCII parameter value
-   * @exception SQLException if a database access error occurs or
-   * this method is called on a closed <code>CallableStatement</code>
-   * @throws SQLFeatureNotSupportedException  if the JDBC driver does not support this method
-     * @since 1.6
-  */
-  public void setAsciiStream(String parameterName, java.io.InputStream x)
-          throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
-   }
-
-
- /**
-    * Sets the designated parameter to the given input stream.
-    * When a very large binary value is input to a <code>LONGVARBINARY</code>
-    * parameter, it may be more practical to send it via a
-    * <code>java.io.InputStream</code> object. The data will be read from the
-    * stream as needed until end-of-file is reached.
-    *
-    * <P><B>Note:</B> This stream object can either be a standard
-    * Java stream object or your own subclass that implements the
-    * standard interface.
-    * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
-    * it might be more efficient to use a version of
-    * <code>setBinaryStream</code> which takes a length parameter.
-    *
-    * @param parameterName the name of the parameter
-    * @param x the java input stream which contains the binary parameter value
-    * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @throws SQLFeatureNotSupportedException  if the JDBC driver does not support this method
-    * @since 1.6
-    */
-   public void setBinaryStream(String parameterName, java.io.InputStream x)
-   throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
-   }
-
-
-
- /**
-    * Sets the designated parameter to the given <code>Reader</code>
-    * object.
-    * When a very large UNICODE value is input to a <code>LONGVARCHAR</code>
-    * parameter, it may be more practical to send it via a
-    * <code>java.io.Reader</code> object. The data will be read from the stream
-    * as needed until end-of-file is reached.  The JDBC driver will
-    * do any necessary conversion from UNICODE to the database char format.
-    *
-    * <P><B>Note:</B> This stream object can either be a standard
-    * Java stream object or your own subclass that implements the
-    * standard interface.
-    * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
-    * it might be more efficient to use a version of
-    * <code>setCharacterStream</code> which takes a length parameter.
-    *
-    * @param parameterName the name of the parameter
-    * @param reader the <code>java.io.Reader</code> object that contains the
-    *        Unicode data
-    * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @throws SQLFeatureNotSupportedException  if the JDBC driver does not support this method
-    * @since 1.6
-    */
-   public void setCharacterStream(String parameterName,
-                         java.io.Reader reader) throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
-   }
-
-   /**
-    * Sets the designated parameter to the given
-    * <code>java.math.BigDecimal</code> value.
-    * The driver converts this to an SQL <code>NUMERIC</code> value when
-    * it sends it to the database.
-    *
-    * @param parameterName the name of the parameter
-    * @param x the parameter value
-    * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
-    * @see #getBigDecimal
-    * @since 1.4
-    */
-   public void setBigDecimal(String parameterName, BigDecimal x) throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
-   }
-
-
-
- /**
-    * Sets the designated parameter to the given Java <code>String</code> value.
-    * The driver converts this
-    * to an SQL <code>VARCHAR</code> or <code>LONGVARCHAR</code> value
-    * (depending on the argument's
-    * size relative to the driver's limits on <code>VARCHAR</code> values)
-    * when it sends it to the database.
-    *
-    * @param parameterName the name of the parameter
-    * @param x the parameter value
-    * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
-    * @see #getString
-    * @since 1.4
-    */
-   public void setString(String parameterName, String x) throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
-   }
-
-
-
- /**
-    * Sets the designated parameter to the given Java array of bytes.
-    * The driver converts this to an SQL <code>VARBINARY</code> or
-    * <code>LONGVARBINARY</code> (depending on the argument's size relative
-    * to the driver's limits on <code>VARBINARY</code> values) when it sends
-    * it to the database.
-    *
-    * @param parameterName the name of the parameter
-    * @param x the parameter value
-    * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
-    * @see #getBytes
-    * @since 1.4
-    */
-   public void setBytes(String parameterName, byte x[]) throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
-   }
-
-
-
- /**
-    * Sets the designated parameter to the given <code>java.sql.Timestamp</code> value.
-    * The driver
-    * converts this to an SQL <code>TIMESTAMP</code> value when it sends it to the
-    * database.
-    *
-    * @param parameterName the name of the parameter
-    * @param x the parameter value
-    * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
-    * @see #getTimestamp
-    * @since 1.4
-    */
-   public void setTimestamp(String parameterName, java.sql.Timestamp x)
-       throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
-   }
-
-    /**
-    * Sets the designated parameter to SQL <code>NULL</code>.
-    *
-    * <P><B>Note:</B> You must specify the parameter's SQL type.
-    *
-    * @param parameterName the name of the parameter
-    * @param sqlType the SQL type code defined in <code>java.sql.Types</code>
-    * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
-    * @since 1.4
-    */
-   public void setNull(String parameterName, int sqlType) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
-   }
-
-
- /**
-    * Sets the designated parameter to SQL <code>NULL</code>.
-    * This version of the method <code>setNull</code> should
-    * be used for user-defined types and REF type parameters.  Examples
-    * of user-defined types include: STRUCT, DISTINCT, JAVA_OBJECT, and
-    * named array types.
-    *
-    * <P><B>Note:</B> To be portable, applications must give the
-    * SQL type code and the fully-qualified SQL type name when specifying
-    * a NULL user-defined or REF parameter.  In the case of a user-defined type
-    * the name is the type name of the parameter itself.  For a REF
-    * parameter, the name is the type name of the referenced type.  If
-    * a JDBC driver does not need the type code or type name information,
-    * it may ignore it.
-    *
-    * Although it is intended for user-defined and Ref parameters,
-    * this method may be used to set a null parameter of any JDBC type.
-    * If the parameter does not have a user-defined or REF type, the given
-    * typeName is ignored.
-    *
-    *
-    * @param parameterName the name of the parameter
-    * @param sqlType a value from <code>java.sql.Types</code>
-    * @param typeName the fully-qualified name of an SQL user-defined type;
-    *        ignored if the parameter is not a user-defined type or
-    *        SQL <code>REF</code> value
-    * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
-    * @since 1.4
-    */
-   public void setNull (String parameterName, int sqlType, String typeName)
-       throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
-   }
-
-
-
- /**
-    * Sets the designated parameter to the given Java <code>boolean</code> value.
-    * The driver converts this
-    * to an SQL <code>BIT</code> or <code>BOOLEAN</code> value when it sends it to the database.
-    *
-    * @param parameterName the name of the parameter
-    * @param x the parameter value
-    * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @see #getBoolean
-    * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
-    * @since 1.4
-    */
-   public void setBoolean(String parameterName, boolean x) throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
-   }
-
-
-
- /**
-    * Sets the designated parameter to the given Java <code>byte</code> value.
-    * The driver converts this
-    * to an SQL <code>TINYINT</code> value when it sends it to the database.
-    *
-    * @param parameterName the name of the parameter
-    * @param x the parameter value
-    * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
-    * @see #getByte
-    * @since 1.4
-    */
-   public void setByte(String parameterName, byte x) throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
-   }
-
-
-
- /**
-    * Sets the designated parameter to the given Java <code>short</code> value.
-    * The driver converts this
-    * to an SQL <code>SMALLINT</code> value when it sends it to the database.
-    *
-    * @param parameterName the name of the parameter
-    * @param x the parameter value
-    * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
-    * @see #getShort
-    * @since 1.4
-    */
-   public void setShort(String parameterName, short x) throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
-   }
-
-
- /**
-    * Sets the designated parameter to the given Java <code>int</code> value.
-    * The driver converts this
-    * to an SQL <code>INTEGER</code> value when it sends it to the database.
-    *
-    * @param parameterName the name of the parameter
-    * @param x the parameter value
-    * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
-    * @see #getInt
-    * @since 1.4
-    */
-   public void setInt(String parameterName, int x) throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
-   }
-
-
- /**
-    * Sets the designated parameter to the given Java <code>long</code> value.
-    * The driver converts this
-    * to an SQL <code>BIGINT</code> value when it sends it to the database.
-    *
-    * @param parameterName the name of the parameter
-    * @param x the parameter value
-    * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
-    * @see #getLong
-    * @since 1.4
-    */
-   public void setLong(String parameterName, long x) throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
-   }
-
-
- /**
-    * Sets the designated parameter to the given Java <code>float</code> value.
-    * The driver converts this
-    * to an SQL <code>FLOAT</code> value when it sends it to the database.
-    *
-    * @param parameterName the name of the parameter
-    * @param x the parameter value
-    * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
-    * @see #getFloat
-    * @since 1.4
-    */
-   public void setFloat(String parameterName, float x) throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
-   }
-
-
- /**
-    * Sets the designated parameter to the given Java <code>double</code> value.
-    * The driver converts this
-    * to an SQL <code>DOUBLE</code> value when it sends it to the database.
-    *
-    * @param parameterName the name of the parameter
-    * @param x the parameter value
-    * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
-    * @see #getDouble
-    * @since 1.4
-    */
-   public void setDouble(String parameterName, double x) throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
-   }
-
-   /**
-     * This method re populates the resBundle
-     * during the deserialization process
-     *
-     */
-    private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException {
-        // Default state initialization happens here
-        ois.defaultReadObject();
-        // Initialization of transient Res Bundle happens here .
-        try {
-           resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle();
-        } catch(IOException ioe) {
-            throw new RuntimeException(ioe);
-        }
-
-    }
-
-    //------------------------- JDBC 4.1 -----------------------------------
-    public <T> T getObject(int columnIndex, Class<T> type) throws SQLException {
-        throw new SQLFeatureNotSupportedException("Not supported yet.");
-    }
-
-    public <T> T getObject(String columnLabel, Class<T> type) throws SQLException {
-        throw new SQLFeatureNotSupportedException("Not supported yet.");
-    }
-
-    static final long serialVersionUID =1884577171200622428L;
-}
diff --git a/ojluni/src/main/java/com/sun/rowset/FilteredRowSetImpl.java b/ojluni/src/main/java/com/sun/rowset/FilteredRowSetImpl.java
deleted file mode 100755
index f21013c..0000000
--- a/ojluni/src/main/java/com/sun/rowset/FilteredRowSetImpl.java
+++ /dev/null
@@ -1,1768 +0,0 @@
-/*
- * Copyright (c) 2003, 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
- * 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.rowset;
-
-import java.io.*;
-import java.util.*;
-import java.sql.*;
-import javax.sql.*;
-import java.math.*;
-
-import javax.sql.rowset.*;
-import javax.sql.rowset.spi.*;
-import javax.sql.rowset.serial.*;
-import com.sun.rowset.providers.*;
-import com.sun.rowset.internal.*;
-
-/**
- * The standard implementation of the <code>FilteredRowSet</code> interface. See the interface
- * defintion for full behaviour and implementation requirements.
- *
- * @see javax.sql.rowset.Predicate
- * @author Jonathan Bruce, Amit Handa
- */
-
-public class FilteredRowSetImpl extends WebRowSetImpl implements Serializable, Cloneable, FilteredRowSet {
-
-    private Predicate p;
-
-    private boolean onInsertRow = false;
-
-
-    /**
-     * Construct a <code>FilteredRowSet</code>
-     */
-    public FilteredRowSetImpl() throws SQLException {
-        super();
-    }
-
-    /**
-     * Construct a <code>FilteredRowSet</code> with a specified synchronization
-     * provider.
-     *
-     * @param env a Hashtable containing a desired synchconizatation provider
-     * name-value pair.
-     */
-    public FilteredRowSetImpl(Hashtable env) throws SQLException {
-        super(env);
-    }
-
-    /**
-     * Apply the predicate for this filter
-     *
-     * @param p an implementation of the predicate interface
-     */
-    public void setFilter(Predicate p) throws SQLException {
-        this.p = p;
-    }
-
-    /**
-     * Retrieve the filter active for this <code>FilteredRowSet</code>
-     *
-     * @return a <code>Predicate</code> object instance
-     */
-    public Predicate getFilter() {
-        return this.p;
-    }
-
-    /**
-     * Over-riding <code>internalNext()</code> implementation. This method
-     * applies the filter on the <code>RowSet</code> each time the cursor is advanced or
-     * manipulated. It moves the cursor to the next row according to the set
-     * predicate and returns <code>true</code> if the cursor is still within the rowset or
-     * <code>false</code> if the cursor position is over the last row
-     *
-     * @return true if over the valid row in the rowset; false if over the last
-     * row
-     */
-    protected boolean internalNext() throws SQLException {
-        // CachedRowSetImpl.next() internally calls
-        // this(crs).internalNext() NOTE: this holds crs object
-        // So when frs.next() is called,
-        // internally this(frs).internalNext() will be called
-        // which will be nothing but this method.
-        // because this holds frs object
-
-        // keep on doing super.internalNext()
-        // rather than doing it once.
-
-
-         // p.evaluate will help us in changing the cursor
-         // and checking the next value by returning true or false.
-         // to fit the filter
-
-         // So while() loop will have a "random combination" of
-         // true and false returned depending upon the records
-         // are in or out of filter.
-         // We need to traverse from present cursorPos till end,
-         // whether true or false and check each row for "filter"
-         // "till we get a "true"
-
-
-         boolean bool = false;
-
-         for(int rows=this.getRow(); rows<=this.size();rows++) {
-             bool = super.internalNext();
-
-             if( p == null) {
-               return bool;
-             }
-             if(p.evaluate(this)){
-                   break;
-             }
-
-         }
-
-       return bool;
-    }
-
-
-    /**
-     * Over-riding <code>internalPrevious()</code> implementation. This method
-     * applies the filter on the <code>RowSet</code> each time the cursor is moved backward or
-     * manipulated. It moves the cursor to the previous row according to the set
-     * predicate and returns <code>true</code> if the cursor is still within the rowset or
-     * <code>false</code> if the cursor position is over the last row
-     *
-     * @return true if over the valid row in the rowset; false if over the last
-     * row
-     */
-    protected boolean internalPrevious() throws SQLException {
-         boolean bool = false;
-         // with previous move backwards,
-         // i.e. from any record towards first record
-
-         for(int rows=this.getRow(); rows>0;rows--) {
-
-             bool = super.internalPrevious();
-
-             if( p == null) {
-               return bool;
-             }
-
-             if(p.evaluate(this)){
-                   break;
-             }
-
-         }
-
-       return bool;
-    }
-
-
-    /**
-     * Over-riding <code>internalFirst()</code> implementation. This method
-     * applies the filter on the <code>RowSet</code> each time the cursor is moved to first
-     * row. It moves the cursor to the first row according to the set
-     * predicate and returns <code>true</code> if the cursor is still within the rowset or
-     * <code>false</code> if the cursor position is over the last row
-     *
-     * @return true if over the valid row in the rowset; false if over the last
-     * row
-     */
-    protected boolean internalFirst() throws SQLException {
-
-        // from first till present cursor position(go forward),
-        // find the actual first which matches the filter.
-
-         boolean bool = super.internalFirst();
-
-         if( p == null) {
-               return bool;
-             }
-
-         while(bool) {
-
-             if(p.evaluate(this)){
-                   break;
-             }
-        bool = super.internalNext();
-        }
-     return bool;
-    }
-
-
-    /**
-     * Over-riding <code>internalLast()</code> implementation. This method
-     * applies the filter on the <code>RowSet</code> each time the cursor is moved to
-     * last row. It moves the cursor to the last row according to the set
-     * predicate and returns <code>true</code> if the cursor is still within the rowset or
-     * <code>false</code> if the cursor position is over the last row
-     *
-     * @return true if over the valid row in the rowset; false if over the last
-     * row
-     */
-    protected boolean internalLast() throws SQLException {
-        // from last to the present cursor position(go backward),
-        // find the actual last which matches the filter.
-
-         boolean bool = super.internalLast();
-
-         if( p == null) {
-               return bool;
-             }
-
-         while(bool) {
-
-             if(p.evaluate(this)){
-                   break;
-             }
-
-        bool = super.internalPrevious();
-
-        }
-     return bool;
-
-   } // end internalLast()
-   /**
-     * Moves the cursor the specified number of rows from the current
-     * position, with a positive number moving it forward and a
-     * negative number moving it backward.
-     * <P>
-     * If the number is positive, the cursor moves the specified number of
-     * rows toward the end of the rowset, starting at the current row.
-     * For example, the following command, in which
-     * <code>crs</code> is a <code>CachedRowSetImpl</code> object with 100 rows,
-     * moves the cursor forward four rows from the current row.  If the
-     * current row is 50, the cursor would move to row 54.
-     * <PRE><code>
-     *
-     *    crs.relative(4);
-     *
-     * </code> </PRE>
-     * <P>
-     * If the number is negative, the cursor moves back toward the beginning
-     * the specified number of rows, starting at the current row.
-     * For example, calling the method
-     * <code>absolute(-1)</code> positions the cursor on the last row,
-     * <code>absolute(-2)</code> moves it on the next-to-last row, and so on.
-     * If the <code>CachedRowSetImpl</code> object <code>crs</code> has five rows,
-     * the following command moves the cursor to the fourth-to-last row, which
-     * in the case of a  rowset with five rows, is also the second row
-     * from the beginning.
-     * <PRE><code>
-     *
-     *    crs.absolute(-4);
-     *
-     * </code> </PRE>
-     *
-     * If the number specified is larger than the number of rows, the cursor
-     * will move to the position after the last row. If the number specified
-     * would move the cursor one or more rows before the first row, the cursor
-     * moves to the position before the first row. In both cases, this method
-     * throws an <code>SQLException</code>.
-     * <P>
-     * Note: Calling <code>absolute(1)</code> is the same as calling the
-     * method <code>first()</code>.  Calling <code>absolute(-1)</code> is the
-     * same as calling <code>last()</code>.  Calling <code>relative(0)</code>
-     * is valid, but it does not change the cursor position.
-     *
-     * @param rows an <code>int</code> indicating the number of rows to move
-     *             the cursor, starting at the current row; a positive number
-     *             moves the cursor forward; a negative number moves the cursor
-     *             backward; must not move the cursor past the valid
-     *             rows
-     * @return <code>true</code> if the cursor is on a row in this
-     *         <code>CachedRowSetImpl</code> object; <code>false</code>
-     *         otherwise
-     * @throws SQLException if the rowset is type <code>ResultSet.TYPE_FORWARD_ONLY</code>
-     */
-   public boolean relative(int rows) throws SQLException {
-
-      boolean retval;
-      boolean bool = false;
-      boolean boolval = false;
-
-      if(getType() == ResultSet.TYPE_FORWARD_ONLY) {
-         throw new SQLException(resBundle.handleGetObject("filteredrowsetimpl.relative").toString());
-      }
-
-      if( rows > 0 ) {
-
-         int i = 0;
-         while( i < (rows)) {
-
-            if( isAfterLast() ) {
-               return false;
-            }
-            bool = internalNext();
-            i++;
-         }
-
-         retval = bool;
-      } else {
-         int j = rows;
-         while( (j) < 0 ) {
-
-           if( isBeforeFirst() ) {
-              return false;
-           }
-           boolval = internalPrevious();
-           j++;
-         }
-         retval = boolval;
-      }
-      if(rows != 0)
-          notifyCursorMoved();
-      return retval;
-   }
-
-   /**
-     * Moves this <code>CachedRowSetImpl</code> object's cursor to the row number
-     * specified.
-     *
-     * <p>If the number is positive, the cursor moves to an absolute row with
-     * respect to the beginning of the rowset.  The first row is row 1, the second
-     * is row 2, and so on.  For example, the following command, in which
-     * <code>crs</code> is a <code>CachedRowSetImpl</code> object, moves the cursor
-     * to the fourth row, starting from the beginning of the rowset.
-     * <PRE><code>
-     *
-     *    crs.absolute(4);
-     *
-     * </code> </PRE>
-     * <P>
-     * If the number is negative, the cursor moves to an absolute row position
-     * with respect to the end of the rowset.  For example, calling
-     * <code>absolute(-1)</code> positions the cursor on the last row,
-     * <code>absolute(-2)</code> moves it on the next-to-last row, and so on.
-     * If the <code>CachedRowSetImpl</code> object <code>crs</code> has five rows,
-     * the following command moves the cursor to the fourth-to-last row, which
-     * in the case of a  rowset with five rows, is also the second row, counting
-     * from the beginning.
-     * <PRE><code>
-     *
-     *    crs.absolute(-4);
-     *
-     * </code> </PRE>
-     *
-     * If the number specified is larger than the number of rows, the cursor
-     * will move to the position after the last row. If the number specified
-     * would move the cursor one or more rows before the first row, the cursor
-     * moves to the position before the first row.
-     * <P>
-     * Note: Calling <code>absolute(1)</code> is the same as calling the
-     * method <code>first()</code>.  Calling <code>absolute(-1)</code> is the
-     * same as calling <code>last()</code>.
-     *
-     * @param rows a positive number to indicate the row, starting row numbering from
-     *        the first row, which is <code>1</code>; a negative number to indicate
-     *        the row, starting row numbering from the last row, which is
-     *        <code>-1</code>; it must not be <code>0</code>
-     * @return <code>true</code> if the cursor is on the rowset; <code>false</code>
-     *         otherwise
-     * @throws SQLException if the given cursor position is <code>0</code> or the
-     *            type of this rowset is <code>ResultSet.TYPE_FORWARD_ONLY</code>
-     */
-    public boolean absolute(int rows) throws SQLException {
-
-      boolean retval;
-      boolean bool = false;
-
-      if(rows == 0 || getType() == ResultSet.TYPE_FORWARD_ONLY) {
-         throw new SQLException(resBundle.handleGetObject("filteredrowsetimpl.absolute").toString());
-      }
-
-      if (rows > 0) {
-         bool = internalFirst();
-
-         int i = 0;
-         while(i < (rows-1)) {
-            if( isAfterLast() ) {
-               return false;
-            }
-            bool = internalNext();
-            i++;
-         }
-         retval = bool;
-      } else {
-         bool = internalLast();
-
-         int j = rows;
-         while((j+1) < 0 ) {
-            if( isBeforeFirst() ) {
-               return false;
-            }
-            bool = internalPrevious();
-            j++;
-         }
-         retval = bool;
-      }
-      notifyCursorMoved();
-      return retval;
-   }
-
-   /**
-     * Moves the cursor for this <code>CachedRowSetImpl</code> object
-     * to the insert row.  The current row in the rowset is remembered
-     * while the cursor is on the insert row.
-     * <P>
-     * The insert row is a special row associated with an updatable
-     * rowset.  It is essentially a buffer where a new row may
-     * be constructed by calling the appropriate <code>updateXXX</code>
-     * methods to assign a value to each column in the row.  A complete
-     * row must be constructed; that is, every column that is not nullable
-     * must be assigned a value.  In order for the new row to become part
-     * of this rowset, the method <code>insertRow</code> must be called
-     * before the cursor is moved back to the rowset.
-     * <P>
-     * Only certain methods may be invoked while the cursor is on the insert
-     * row; many methods throw an exception if they are called while the
-     * cursor is there.  In addition to the <code>updateXXX</code>
-     * and <code>insertRow</code> methods, only the <code>getXXX</code> methods
-     * may be called when the cursor is on the insert row.  A <code>getXXX</code>
-     * method should be called on a column only after an <code>updateXXX</code>
-     * method has been called on that column; otherwise, the value returned is
-     * undetermined.
-     *
-     * @throws SQLException if this <code>CachedRowSetImpl</code> object is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-   public void moveToInsertRow() throws SQLException {
-
-      onInsertRow = true;
-      super.moveToInsertRow();
-   }
-
-   /**
-     * This is explanation for the overriding of the updateXXX functions.
-     * These functions have been overriden to ensure that only correct
-     * values that pass the criteria for the filter are actaully inserted.
-     * The evaluation of whether a particular value passes the criteria
-     * of the filter is done using the evaluate function in the Predicate
-     * interface.
-     *
-     * The checking can will done in the evaluate function which is implemented
-     * in the class that implements the Predicate interface. So the checking
-     * can vary from one implementation to another.
-     *
-     * Some additional points here on the following:
-     * 1. updateBytes()     - since the evaluate function takes Object as parameter
-     *                        a String is constructed from the byte array and would
-     *                        passed to the evaluate function.
-     * 2. updateXXXstream() - here it would suffice to pass the stream handle
-     *                        to the evaluate function and the implementation
-     *                        of the evaluate function can do the comparision
-     *                        based on the stream and also type of data.
-     */
-
-
-   /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>int</code> value.
-     * <P>
-     * This method updates a column value in the current row or the insert
-     * row of this rowset, but it does not update the database.
-     * If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param x the new column value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-   public void updateInt(int columnIndex , int x) throws SQLException {
-
-     boolean bool;
-
-     if(onInsertRow) {
-        if(p != null) {
-           bool = p.evaluate(Integer.valueOf(x),columnIndex);
-
-           if(!bool) {
-              throw new SQLException(resBundle.handleGetObject("filteredrowsetimpl.notallowed").toString());
-           }
-        }
-     }
-
-     super.updateInt(columnIndex,x);
-   }
-
-   /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>int</code> value.
-     * <P>
-     * This method updates a column value in the current row or the insert
-     * row of this rowset, but it does not update the database.
-     * If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param x the new column value
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-   public void updateInt(String columnName , int x) throws SQLException {
-
-       this.updateInt(findColumn(columnName), x);
-   }
-
-   /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>boolean</code> value.
-     * <P>
-     * This method updates a column value in the current row or the insert
-     * row of this rowset, but it does not update the database.
-     * If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param x the new column value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-   public void updateBoolean(int columnIndex, boolean x) throws SQLException {
-
-      boolean bool;
-
-      if(onInsertRow) {
-         if(p != null) {
-            bool = p.evaluate(Boolean.valueOf(x) , columnIndex);
-
-            if(!bool) {
-               throw new SQLException(resBundle.handleGetObject("filteredrowsetimpl.notallowed").toString());
-            }
-         }
-      }
-
-      super.updateBoolean(columnIndex,x);
-   }
-
-   /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>boolean</code> value.
-     * <P>
-     * This method updates a column value in the current row or the insert
-     * row of this rowset, but it does not update the database.
-     * If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param x the new column value
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-   public void updateBoolean(String columnName , boolean x) throws SQLException {
-
-      this.updateBoolean(findColumn(columnName),x);
-   }
-
-
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>byte</code> value.
-     * <P>
-     * This method updates a column value in the current row or the insert
-     * row of this rowset, but it does not update the database.
-     * If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param x the new column value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-   public void updateByte(int columnIndex , byte x) throws SQLException {
-      boolean bool;
-
-      if(onInsertRow) {
-         if(p != null) {
-            bool = p.evaluate(Byte.valueOf(x),columnIndex);
-
-            if(!bool) {
-                throw new SQLException(resBundle.handleGetObject("filteredrowsetimpl.notallowed").toString());
-            }
-          }
-      }
-
-      super.updateByte(columnIndex,x);
-   }
-
-
-   /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>byte</code> value.
-     * <P>
-     * This method updates a column value in the current row or the insert
-     * row of this rowset, but it does not update the database.
-     * If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param x the new column value
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-   public void updateByte(String columnName , byte x) throws SQLException {
-
-      this.updateByte(findColumn(columnName),x);
-   }
-
-
-   /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>short</code> value.
-     * <P>
-     * This method updates a column value in the current row or the insert
-     * row of this rowset, but it does not update the database.
-     * If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param x the new column value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-   public void updateShort( int columnIndex , short x) throws SQLException {
-
-      boolean bool;
-
-      if(onInsertRow) {
-         if(p != null) {
-            bool = p.evaluate(Short.valueOf(x), columnIndex);
-
-            if(!bool) {
-               throw new SQLException(resBundle.handleGetObject("filteredrowsetimpl.notallowed").toString());
-            }
-          }
-      }
-
-      super.updateShort(columnIndex,x);
-   }
-
-   /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>short</code> value.
-     * <P>
-     * This method updates a column value in the current row or the insert
-     * row of this rowset, but it does not update the database.
-     * If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param x the new column value
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-   public void updateShort( String columnName , short x) throws SQLException {
-
-      this.updateShort(findColumn(columnName),x);
-   }
-
-
-   /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>long</code> value.
-     * <P>
-     * This method updates a column value in the current row or the insert
-     * row of this rowset, but it does not update the database.
-     * If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param x the new column value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-   public void updateLong(int columnIndex , long x) throws SQLException {
-
-      boolean bool;
-
-      if(onInsertRow) {
-         if(p != null) {
-            bool = p.evaluate(Long.valueOf(x), columnIndex);
-
-            if(!bool) {
-               throw new SQLException(resBundle.handleGetObject("filteredrowsetimpl.notallowed").toString());
-            }
-          }
-      }
-
-      super.updateLong(columnIndex,x);
-   }
-
-   /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>long</code> value.
-     * <P>
-     * This method updates a column value in the current row or the insert
-     * row of this rowset, but it does not update the database.
-     * If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param x the new column value
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-   public void updateLong( String columnName , long x) throws SQLException {
-
-      this.updateLong(findColumn(columnName) , x);
-   }
-
-   /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>float</code> value.
-     * <P>
-     * This method updates a column value in the current row or the insert
-     * row of this rowset, but it does not update the database.
-     * If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param x the new column value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-   public void updateFloat(int columnIndex , float x) throws SQLException {
-
-      boolean bool;
-
-      if(onInsertRow) {
-         if(p != null) {
-            bool = p.evaluate(new Float(x) , columnIndex);
-
-            if(!bool) {
-               throw new SQLException(resBundle.handleGetObject("filteredrowsetimpl.notallowed").toString());
-            }
-          }
-      }
-
-      super.updateFloat(columnIndex,x);
-   }
-
-   /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>float</code> value.
-     * <P>
-     * This method updates a column value in the current row or the insert
-     * row of this rowset, but it does not update the database.
-     * If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param x the new column value
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-   public void updateFloat(String columnName , float x) throws SQLException {
-
-      this.updateFloat(findColumn(columnName),x);
-   }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>double</code> value.
-     *
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param x the new column value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-   public void updateDouble(int columnIndex , double x) throws SQLException {
-
-      boolean bool;
-
-      if(onInsertRow) {
-         if(p != null) {
-            bool = p.evaluate(new Double(x) , columnIndex);
-
-            if(!bool) {
-               throw new SQLException(resBundle.handleGetObject("filteredrowsetimpl.notallowed").toString());
-            }
-          }
-      }
-
-      super.updateDouble(columnIndex,x);
-   }
-
-   /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>double</code> value.
-     *
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param x the new column value
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-   public void updateDouble(String columnName , double x) throws SQLException {
-
-      this.updateDouble(findColumn(columnName),x);
-   }
-
-   /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>java.math.BigDecimal</code> object.
-     * <P>
-     * This method updates a column value in the current row or the insert
-     * row of this rowset, but it does not update the database.
-     * If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param x the new column value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-   public void updateBigDecimal(int columnIndex , BigDecimal x) throws SQLException {
-
-      boolean bool;
-
-      if(onInsertRow) {
-         if(p != null) {
-            bool = p.evaluate(x,columnIndex);
-
-            if(!bool) {
-               throw new SQLException(resBundle.handleGetObject("filteredrowsetimpl.notallowed").toString());
-            }
-          }
-      }
-
-      super.updateBigDecimal(columnIndex,x);
-   }
-
-   /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>java.math.BigDecimal</code> object.
-     * <P>
-     * This method updates a column value in the current row or the insert
-     * row of this rowset, but it does not update the database.
-     * If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param x the new column value
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-   public void updateBigDecimal(String columnName , BigDecimal x) throws SQLException {
-
-      this.updateBigDecimal(findColumn(columnName),x);
-   }
-
-   /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>String</code> object.
-     * <P>
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to mark the row as updated.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called to insert the new row into this rowset and mark it
-     * as inserted. Both of these methods must be called before the
-     * cursor moves to another row.
-     * <P>
-     * The method <code>acceptChanges</code> must be called if the
-     * updated values are to be written back to the underlying database.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param x the new column value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-   public void updateString(int columnIndex , String x) throws SQLException {
-
-      boolean bool;
-
-      if(onInsertRow) {
-         if(p != null) {
-           bool = p.evaluate(x,columnIndex);
-
-           if(!bool) {
-              throw new SQLException(resBundle.handleGetObject("filteredrowsetimpl.notallowed").toString());
-           }
-         }
-      }
-
-      super.updateString(columnIndex,x);
-   }
-
-   /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>String</code> object.
-     *
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param x the new column value
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-   public void updateString(String columnName , String x) throws SQLException {
-
-      this.updateString(findColumn(columnName),x);
-   }
-
-   /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>byte</code> array.
-     *
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param x the new column value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-   public void updateBytes(int columnIndex , byte []x) throws SQLException {
-
-      boolean bool;
-      String val = "";
-
-      Byte [] obj_arr = new Byte[x.length];
-
-      for(int i = 0; i < x.length; i++) {
-         obj_arr[i] = Byte.valueOf(x[i]);
-         val = val.concat(obj_arr[i].toString());
-     }
-
-
-      if(onInsertRow) {
-         if(p != null) {
-             bool = p.evaluate(val,columnIndex);
-
-             if(!bool) {
-                 throw new SQLException(resBundle.handleGetObject("filteredrowsetimpl.notallowed").toString());
-             }
-         }
-      }
-
-      super.updateBytes(columnIndex,x);
-   }
-
-   /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>byte</code> array.
-     *
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param x the new column value
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-   public void updateBytes(String columnName , byte []x) throws SQLException {
-
-      this.updateBytes(findColumn(columnName),x);
-   }
-
-   /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>Date</code> object.
-     *
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param x the new column value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, (3) the type of the designated column is not
-     *            an SQL <code>DATE</code> or <code>TIMESTAMP</code>, or
-     *            (4) this rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-   public void updateDate(int columnIndex , java.sql.Date x) throws SQLException {
-
-      boolean bool;
-
-      if(onInsertRow) {
-         if(p != null) {
-             bool = p.evaluate(x,columnIndex);
-
-             if(!bool) {
-                 throw new SQLException(resBundle.handleGetObject("filteredrowsetimpl.notallowed").toString());
-             }
-         }
-      }
-
-      super.updateDate(columnIndex,x);
-   }
-
-   /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>Date</code> object.
-     *
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param x the new column value
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, (3) the type
-     *            of the designated column is not an SQL <code>DATE</code> or
-     *            <code>TIMESTAMP</code>, or (4) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-   public void updateDate(String columnName , java.sql.Date x) throws SQLException {
-
-      this.updateDate(findColumn(columnName),x);
-   }
-
-   /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>Time</code> object.
-     *
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param x the new column value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, (3) the type of the designated column is not
-     *            an SQL <code>TIME</code> or <code>TIMESTAMP</code>, or
-     *            (4) this rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-   public void updateTime(int columnIndex , Time x) throws SQLException {
-
-      boolean bool;
-
-      if(onInsertRow) {
-         if(p != null) {
-             bool = p.evaluate(x, columnIndex);
-
-             if(!bool) {
-                 throw new SQLException(resBundle.handleGetObject("filteredrowsetimpl.notallowed").toString());
-             }
-         }
-      }
-
-      super.updateTime(columnIndex,x);
-   }
-
-   /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>Time</code> object.
-     *
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param x the new column value
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, (3) the type
-     *            of the designated column is not an SQL <code>TIME</code> or
-     *            <code>TIMESTAMP</code>, or (4) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-   public void updateTime(String columnName , Time x) throws SQLException {
-
-      this.updateTime(findColumn(columnName),x);
-   }
-
-   /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>Timestamp</code> object.
-     *
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param x the new column value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, (3) the type of the designated column is not
-     *            an SQL <code>DATE</code>, <code>TIME</code>, or
-     *            <code>TIMESTAMP</code>, or (4) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-   public void updateTimestamp(int columnIndex , Timestamp x) throws SQLException {
-
-      boolean bool;
-
-      if(onInsertRow) {
-         if(p != null) {
-             bool = p.evaluate(x,columnIndex);
-
-             if(!bool) {
-                 throw new SQLException(resBundle.handleGetObject("filteredrowsetimpl.notallowed").toString());
-             }
-         }
-      }
-
-      super.updateTimestamp(columnIndex,x);
-   }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>Timestamp</code> object.
-     *
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param x the new column value
-     * @throws SQLException if the given column index is out of bounds or
-     *            the cursor is not on one of this rowset's rows or its
-     *            insert row
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, (3) the type
-     *            of the designated column is not an SQL <code>DATE</code>,
-     *            <code>TIME</code>, or <code>TIMESTAMP</code>, or (4) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-   public void updateTimestamp(String columnName , Timestamp x) throws SQLException {
-
-      this.updateTimestamp(findColumn(columnName),x);
-   }
-
-   /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * ASCII stream value.
-     * <P>
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param x the new column value
-     * @param length the number of one-byte ASCII characters in the stream
-     * @throws SQLException if this method is invoked
-     */
-   public void updateAsciiStream(int columnIndex , java.io.InputStream x ,int length) throws SQLException {
-
-      boolean bool;
-
-      if(onInsertRow) {
-         if(p != null) {
-             bool = p.evaluate(x,columnIndex);
-
-             if(!bool) {
-                 throw new SQLException(resBundle.handleGetObject("filteredrowsetimpl.notallowed").toString());
-             }
-         }
-      }
-
-      super.updateAsciiStream(columnIndex,x,length);
-   }
-
-   /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * ASCII stream value.
-     * <P>
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param x the new column value
-     * @param length the number of one-byte ASCII characters in the stream
-     */
-   public void updateAsciiStream(String columnName , java.io.InputStream x , int length) throws SQLException {
-
-      this.updateAsciiStream(findColumn(columnName),x,length);
-   }
-
-   /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>java.io.Reader</code> object.
-     * <P>
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param x the new column value; must be a <code>java.io.Reader</code>
-     *          containing <code>BINARY</code>, <code>VARBINARY</code>,
-     *          <code>LONGVARBINARY</code>, <code>CHAR</code>, <code>VARCHAR</code>,
-     *          or <code>LONGVARCHAR</code> data
-     * @param length the length of the stream in characters
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, (3) the data in the stream is not a binary or
-     *            character type, or (4) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-   public void updateCharacterStream(int columnIndex , java.io.Reader x , int length) throws SQLException {
-
-      boolean bool;
-
-      if(onInsertRow) {
-         if(p != null) {
-             bool = p.evaluate(x,columnIndex);
-
-             if(!bool) {
-                 throw new SQLException(resBundle.handleGetObject("filteredrowsetimpl.notallowed").toString());
-             }
-         }
-      }
-
-      super.updateCharacterStream(columnIndex,x,length);
-   }
-
-   /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>java.io.Reader</code> object.
-     * <P>
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param reader the new column value; must be a
-     * <code>java.io.Reader</code> containing <code>BINARY</code>,
-     * <code>VARBINARY</code>, <code>LONGVARBINARY</code>, <code>CHAR</code>,
-     * <code>VARCHAR</code>, or <code>LONGVARCHAR</code> data
-     * @param length the length of the stream in characters
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, (3) the data
-     *            in the stream is not a binary or character type, or (4) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-   public void updateCharacterStream(String columnName , java.io.Reader reader, int length) throws SQLException {
-      this.updateCharacterStream(findColumn(columnName), reader, length);
-   }
-
-   /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>java.io.InputStream</code> object.
-     * <P>
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param x the new column value; must be a <code>java.io.InputStream</code>
-     *          containing <code>BINARY</code>, <code>VARBINARY</code>, or
-     *          <code>LONGVARBINARY</code> data
-     * @param length the length of the stream in bytes
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, (3) the data in the stream is not binary, or
-     *            (4) this rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-   public void updateBinaryStream(int columnIndex , java.io.InputStream x , int length) throws SQLException {
-
-      boolean bool;
-
-      if(onInsertRow) {
-         if(p != null) {
-             bool = p.evaluate(x,columnIndex);
-
-             if(!bool) {
-                 throw new SQLException(resBundle.handleGetObject("filteredrowsetimpl.notallowed").toString());
-             }
-         }
-      }
-
-      super.updateBinaryStream(columnIndex,x,length);
-   }
-
-   /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>java.io.InputStream</code> object.
-     * <P>
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param x the new column value; must be a <code>java.io.InputStream</code>
-     *          containing <code>BINARY</code>, <code>VARBINARY</code>, or
-     *          <code>LONGVARBINARY</code> data
-     * @param length the length of the stream in bytes
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, (3) the data
-     *            in the stream is not binary, or (4) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-   public void updateBinaryStream(String columnName , java.io.InputStream x, int length) throws SQLException {
-
-      this.updateBinaryStream(findColumn(columnName),x,length);
-   }
-
-   /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>Object</code> value.
-     * <P>
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param x the new column value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-   public void updateObject(int columnIndex , Object x) throws SQLException {
-
-      boolean bool;
-
-      if(onInsertRow) {
-         if(p != null) {
-             bool = p.evaluate(x,columnIndex);
-
-             if(!bool) {
-                 throw new SQLException(resBundle.handleGetObject("filteredrowsetimpl.notallowed").toString());
-             }
-         }
-      }
-
-      super.updateObject(columnIndex,x);
-   }
-
-   /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>Object</code> value.
-     * <P>
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param x the new column value
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-   public void updateObject(String columnName , Object x) throws SQLException {
-
-      this.updateObject(findColumn(columnName),x);
-   }
-
-   /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>Object</code> value.  The <code>scale</code> parameter indicates
-     * the number of digits to the right of the decimal point and is ignored
-     * if the new column value is not a type that will be mapped to an SQL
-     * <code>DECIMAL</code> or <code>NUMERIC</code> value.
-     * <P>
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param x the new column value
-     * @param scale the number of digits to the right of the decimal point (for
-     *              <code>DECIMAL</code> and <code>NUMERIC</code> types only)
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-   public void updateObject(int columnIndex , Object x , int scale) throws SQLException {
-
-      boolean bool;
-
-      if(onInsertRow) {
-         if(p != null) {
-             bool = p.evaluate(x,columnIndex);
-
-             if(!bool) {
-                 throw new SQLException(resBundle.handleGetObject("filteredrowsetimpl.notallowed").toString());
-             }
-         }
-      }
-
-      super.updateObject(columnIndex,x,scale);
-   }
-
-   /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>Object</code> value.  The <code>scale</code> parameter
-     * indicates the number of digits to the right of the decimal point
-     * and is ignored if the new column value is not a type that will be
-     *  mapped to an SQL <code>DECIMAL</code> or <code>NUMERIC</code> value.
-     * <P>
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param x the new column value
-     * @param scale the number of digits to the right of the decimal point (for
-     *              <code>DECIMAL</code> and <code>NUMERIC</code> types only)
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-   public void updateObject(String columnName , Object x, int scale) throws SQLException {
-
-      this.updateObject(findColumn(columnName),x,scale);
-   }
-
-   /**
-     * Inserts the contents of this <code>CachedRowSetImpl</code> object's insert
-     * row into this rowset immediately following the current row.
-     * If the current row is the
-     * position after the last row or before the first row, the new row will
-     * be inserted at the end of the rowset.  This method also notifies
-     * listeners registered with this rowset that the row has changed.
-     * <P>
-     * The cursor must be on the insert row when this method is called.
-     *
-     * @throws SQLException if (1) the cursor is not on the insert row,
-     *            (2) one or more of the non-nullable columns in the insert
-     *            row has not been given a value, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-   public void insertRow() throws SQLException {
-
-      onInsertRow = false;
-      super.insertRow();
-   }
-
-   /**
-    * This method re populates the resBundle
-    * during the deserialization process
-    *
-    */
-   private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException {
-       // Default state initialization happens here
-       ois.defaultReadObject();
-       // Initialization of transient Res Bundle happens here .
-       try {
-          resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle();
-       } catch(IOException ioe) {
-           throw new RuntimeException(ioe);
-       }
-
-   }
-
-   static final long serialVersionUID = 6178454588413509360L;
-} // end FilteredRowSetImpl class
diff --git a/ojluni/src/main/java/com/sun/rowset/JdbcRowSetImpl.java b/ojluni/src/main/java/com/sun/rowset/JdbcRowSetImpl.java
deleted file mode 100755
index f29d7d9..0000000
--- a/ojluni/src/main/java/com/sun/rowset/JdbcRowSetImpl.java
+++ /dev/null
@@ -1,7047 +0,0 @@
-/*
- * Copyright (c) 2003, 2011, 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.rowset;
-
-import java.sql.*;
-import javax.sql.*;
-import javax.naming.*;
-import java.io.*;
-import java.math.*;
-import java.util.*;
-import java.beans.*;
-
-import javax.sql.rowset.*;
-
-/**
- * The standard implementation of the <code>JdbcRowSet</code> interface. See the interface
- * defintion for full behavior and implementation requirements.
- *
- * @author Jonathan Bruce, Amit Handa
- */
-
-public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable {
-
-    /**
-     * The <code>Connection</code> object that is this rowset's
-     * current connection to the database.  This field is set
-     * internally when the connection is established.
-     */
-    private Connection conn;
-
-    /**
-     * The <code>PreparedStatement</code> object that is this rowset's
-     * current command.  This field is set internally when the method
-     * <code>execute</code> creates the <code>PreparedStatement</code>
-     * object.
-     */
-    private PreparedStatement ps;
-
-    /**
-     * The <code>ResultSet</code> object that is this rowset's
-     * current result set.  This field is set internally when the method
-     * <code>execute</code> executes the rowset's command and thereby
-     * creates the rowset's <code>ResultSet</code> object.
-     */
-    private ResultSet rs;
-
-    /**
-     * The <code>RowSetMetaDataImpl</code> object that is contructed when
-     * a <code>ResultSet</code> object is passed to the <code>JdbcRowSet</code>
-     * constructor. This helps in constructing all metadata associated
-     * with the <code>ResultSet</code> object using the setter methods of
-     * <code>RowSetMetaDataImpl</code>.
-     */
-    private RowSetMetaDataImpl rowsMD;
-
-    /**
-     * The <code>ResultSetMetaData</code> object from which this
-     * <code>RowSetMetaDataImpl</code> is formed and which  helps in getting
-     * the metadata information.
-     */
-    private ResultSetMetaData resMD;
-
-    /**
-     * The property that helps to fire the property changed event when certain
-     * properties are changed in the <code>JdbcRowSet</code> object. This property
-     * is being added to satisfy Rave requirements.
-     */
-    private PropertyChangeSupport propertyChangeSupport;
-
-    /**
-     * The Vector holding the Match Columns
-     */
-    private Vector<Integer> iMatchColumns;
-
-    /**
-     * The Vector that will hold the Match Column names.
-     */
-    private Vector<String> strMatchColumns;
-
-
-    protected transient JdbcRowSetResourceBundle resBundle;
-
-    /**
-     * Constructs a default <code>JdbcRowSet</code> object.
-     * The new instance of <code>JdbcRowSet</code> will serve as a proxy
-     * for the <code>ResultSet</code> object it creates, and by so doing,
-     * it will make it possible to use the result set as a JavaBeans
-     * component.
-     * <P>
-     * The following is true of a default <code>JdbcRowSet</code> instance:
-     * <UL>
-     *   <LI>Does not show deleted rows
-     *   <LI>Has no time limit for how long a driver may take to
-     *       execute the rowset's command
-     *   <LI>Has no limit for the number of rows it may contain
-     *   <LI>Has no limit for the number of bytes a column may contain
-     *   <LI>Has a scrollable cursor and does not show changes
-     *       made by others
-     *   <LI>Will not see uncommitted data (make "dirty" reads)
-     *   <LI>Has escape processing turned on
-     *   <LI>Has its connection's type map set to <code>null</code>
-     *   <LI>Has an empty <code>Hashtable</code> object for storing any
-     *       parameters that are set
-     * </UL>
-     * A newly created <code>JdbcRowSet</code> object must have its
-     * <code>execute</code> method invoked before other public methods
-     * are called on it; otherwise, such method calls will cause an
-     * exception to be thrown.
-     *
-     * @throws SQLException [1] if any of its public methods are called prior
-     * to calling the <code>execute</code> method; [2] if invalid JDBC driver
-     * properties are set or [3] if no connection to a data source exists.
-     */
-    public JdbcRowSetImpl() {
-        conn = null;
-        ps   = null;
-        rs   = null;
-
-        try {
-           resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle();
-        } catch(IOException ioe) {
-            throw new RuntimeException(ioe);
-        }
-
-        propertyChangeSupport = new PropertyChangeSupport(this);
-
-        initParams();
-
-        // set the defaults
-
-        try {
-            setShowDeleted(false);
-        } catch(SQLException sqle) {
-             System.err.println(resBundle.handleGetObject("jdbcrowsetimpl.setshowdeleted").toString() +
-                                sqle.getLocalizedMessage());
-        }
-
-        try {
-            setQueryTimeout(0);
-        } catch(SQLException sqle) {
-            System.err.println(resBundle.handleGetObject("jdbcrowsetimpl.setquerytimeout").toString() +
-                                sqle.getLocalizedMessage());
-        }
-
-        try {
-            setMaxRows(0);
-        } catch(SQLException sqle) {
-            System.err.println(resBundle.handleGetObject("jdbcrowsetimpl.setmaxrows").toString() +
-                                sqle.getLocalizedMessage());
-        }
-
-        try {
-            setMaxFieldSize(0);
-        } catch(SQLException sqle) {
-             System.err.println(resBundle.handleGetObject("jdbcrowsetimpl.setmaxfieldsize").toString() +
-                                sqle.getLocalizedMessage());
-        }
-
-        try {
-            setEscapeProcessing(true);
-        } catch(SQLException sqle) {
-             System.err.println(resBundle.handleGetObject("jdbcrowsetimpl.setescapeprocessing").toString() +
-                                sqle.getLocalizedMessage());
-        }
-
-        try {
-            setConcurrency(ResultSet.CONCUR_UPDATABLE);
-        } catch (SQLException sqle) {
-            System.err.println(resBundle.handleGetObject("jdbcrowsetimpl.setconcurrency").toString() +
-                                sqle.getLocalizedMessage());
-        }
-
-        setTypeMap(null);
-
-        try {
-            setType(ResultSet.TYPE_SCROLL_INSENSITIVE);
-        } catch(SQLException sqle){
-          System.err.println(resBundle.handleGetObject("jdbcrowsetimpl.settype").toString() +
-                                sqle.getLocalizedMessage());
-        }
-
-        setReadOnly(true);
-
-        try {
-            setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
-        } catch(SQLException sqle){
-            System.err.println(resBundle.handleGetObject("jdbcrowsetimpl.settransactionisolation").toString() +
-                                sqle.getLocalizedMessage());
-        }
-
-        //Instantiating the vector for MatchColumns
-
-        iMatchColumns = new Vector<Integer>(10);
-        for(int i = 0; i < 10 ; i++) {
-           iMatchColumns.add(i,Integer.valueOf(-1));
-        }
-
-        strMatchColumns = new Vector<String>(10);
-        for(int j = 0; j < 10; j++) {
-           strMatchColumns.add(j,null);
-        }
-    }
-
-    /**
-     * Constructs a default <code>JdbcRowSet</code> object given a
-     * valid <code>Connection</code> object. The new
-     * instance of <code>JdbcRowSet</code> will serve as a proxy for
-     * the <code>ResultSet</code> object it creates, and by so doing,
-     * it will make it possible to use the result set as a JavaBeans
-     * component.
-     * <P>
-     * The following is true of a default <code>JdbcRowSet</code> instance:
-     * <UL>
-     *   <LI>Does not show deleted rows
-     *   <LI>Has no time limit for how long a driver may take to
-     *       execute the rowset's command
-     *   <LI>Has no limit for the number of rows it may contain
-     *   <LI>Has no limit for the number of bytes a column may contain
-     *   <LI>Has a scrollable cursor and does not show changes
-     *       made by others
-     *   <LI>Will not see uncommitted data (make "dirty" reads)
-     *   <LI>Has escape processing turned on
-     *   <LI>Has its connection's type map set to <code>null</code>
-     *   <LI>Has an empty <code>Hashtable</code> object for storing any
-     *       parameters that are set
-     * </UL>
-     * A newly created <code>JdbcRowSet</code> object must have its
-     * <code>execute</code> method invoked before other public methods
-     * are called on it; otherwise, such method calls will cause an
-     * exception to be thrown.
-     *
-     * @throws SQLException [1] if any of its public methods are called prior
-     * to calling the <code>execute</code> method, [2] if invalid JDBC driver
-     * properties are set, or [3] if no connection to a data source exists.
-     */
-    public JdbcRowSetImpl(Connection con) throws SQLException {
-
-        conn = con;
-        ps = null;
-        rs = null;
-
-        try {
-           resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle();
-        } catch(IOException ioe) {
-            throw new RuntimeException(ioe);
-        }
-
-        propertyChangeSupport = new PropertyChangeSupport(this);
-
-        initParams();
-        // set the defaults
-        setShowDeleted(false);
-        setQueryTimeout(0);
-        setMaxRows(0);
-        setMaxFieldSize(0);
-
-        setParams();
-
-        setReadOnly(true);
-        setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
-        setEscapeProcessing(true);
-        setTypeMap(null);
-
-        //Instantiating the vector for MatchColumns
-
-        iMatchColumns = new Vector<Integer>(10);
-        for(int i = 0; i < 10 ; i++) {
-           iMatchColumns.add(i,Integer.valueOf(-1));
-        }
-
-        strMatchColumns = new Vector<String>(10);
-        for(int j = 0; j < 10; j++) {
-           strMatchColumns.add(j,null);
-        }
-    }
-
-    /**
-     * Constructs a default <code>JdbcRowSet</code> object using the
-     * URL, username, and password arguments supplied. The new
-     * instance of <code>JdbcRowSet</code> will serve as a proxy for
-     * the <code>ResultSet</code> object it creates, and by so doing,
-     * it will make it possible to use the result set as a JavaBeans
-     * component.
-     *
-     * <P>
-     * The following is true of a default <code>JdbcRowSet</code> instance:
-     * <UL>
-     *   <LI>Does not show deleted rows
-     *   <LI>Has no time limit for how long a driver may take to
-     *       execute the rowset's command
-     *   <LI>Has no limit for the number of rows it may contain
-     *   <LI>Has no limit for the number of bytes a column may contain
-     *   <LI>Has a scrollable cursor and does not show changes
-     *       made by others
-     *   <LI>Will not see uncommitted data (make "dirty" reads)
-     *   <LI>Has escape processing turned on
-     *   <LI>Has its connection's type map set to <code>null</code>
-     *   <LI>Has an empty <code>Hashtable</code> object for storing any
-     *       parameters that are set
-     * </UL>
-     *
-     * @param url - a JDBC URL for the database to which this <code>JdbcRowSet</code>
-     *        object will be connected. The form for a JDBC URL is
-     *        <code>jdbc:subprotocol:subname</code>.
-     * @param user - the database user on whose behalf the connection
-     *        is being made
-     * @param password - the user's password
-     *
-     * @throws SQLException if a database access error occurs
-     *
-     */
-    public JdbcRowSetImpl(String url, String user, String password) throws SQLException {
-        conn = null;
-        ps = null;
-        rs = null;
-
-        try {
-           resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle();
-        } catch(IOException ioe) {
-            throw new RuntimeException(ioe);
-        }
-
-        propertyChangeSupport = new PropertyChangeSupport(this);
-
-        initParams();
-
-        // Pass the arguments to BaseRowSet
-        // setter methods now.
-
-        setUsername(user);
-        setPassword(password);
-        setUrl(url);
-
-        // set the defaults
-        setShowDeleted(false);
-        setQueryTimeout(0);
-        setMaxRows(0);
-        setMaxFieldSize(0);
-
-        // to ensure connection to a db call connect now
-        // and associate a conn with "this" object
-        // in this case.
-        conn = connect();
-        setParams();
-
-        setReadOnly(true);
-        setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
-        setEscapeProcessing(true);
-        setTypeMap(null);
-
-        //Instantiating the vector for MatchColumns
-
-        iMatchColumns = new Vector<Integer>(10);
-        for(int i = 0; i < 10 ; i++) {
-           iMatchColumns.add(i,Integer.valueOf(-1));
-        }
-
-        strMatchColumns = new Vector<String>(10);
-        for(int j = 0; j < 10; j++) {
-           strMatchColumns.add(j,null);
-        }
-    }
-
-
-    /**
-     * Constructs a <code>JdbcRowSet</code> object using the given valid
-     * <code>ResultSet</code> object. The new
-     * instance of <code>JdbcRowSet</code> will serve as a proxy for
-     * the <code>ResultSet</code> object, and by so doing,
-     * it will make it possible to use the result set as a JavaBeans
-     * component.
-     *
-     * <P>
-     * The following is true of a default <code>JdbcRowSet</code> instance:
-     * <UL>
-     *   <LI>Does not show deleted rows
-     *   <LI>Has no time limit for how long a driver may take to
-     *       execute the rowset's command
-     *   <LI>Has no limit for the number of rows it may contain
-     *   <LI>Has no limit for the number of bytes a column may contain
-     *   <LI>Has a scrollable cursor and does not show changes
-     *       made by others
-     *   <LI>Will not see uncommitted data (make "dirty" reads)
-     *   <LI>Has escape processing turned on
-     *   <LI>Has its connection's type map set to <code>null</code>
-     *   <LI>Has an empty <code>Hashtable</code> object for storing any
-     *       parameters that are set
-     * </UL>
-     *
-     * @param res a valid <code>ResultSet</code> object
-     *
-     * @throws SQLException if a database access occurs due to a non
-     * valid ResultSet handle.
-     */
-    public JdbcRowSetImpl(ResultSet res) throws SQLException {
-
-        // A ResultSet handle encapsulates a connection handle.
-        // But there is no way we can retrieve a Connection handle
-        // from a ResultSet object.
-        // So to avoid any anomalies we keep the conn = null
-        // The passed rs handle will be a wrapper around for
-        // "this" object's all operations.
-        conn = null;
-
-        ps = null;
-
-        rs = res;
-
-        try {
-           resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle();
-        } catch(IOException ioe) {
-            throw new RuntimeException(ioe);
-        }
-
-        propertyChangeSupport = new PropertyChangeSupport(this);
-
-        initParams();
-
-        // get the values from the resultset handle.
-        setShowDeleted(false);
-        setQueryTimeout(0);
-        setMaxRows(0);
-        setMaxFieldSize(0);
-
-        setParams();
-
-        setReadOnly(true);
-        setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
-        setEscapeProcessing(true);
-        setTypeMap(null);
-
-        // Get a handle to ResultSetMetaData
-        // Construct RowSetMetaData out of it.
-
-        resMD = rs.getMetaData();
-
-        rowsMD = new RowSetMetaDataImpl();
-
-        initMetaData(rowsMD, resMD);
-
-        //Instantiating the vector for MatchColumns
-
-        iMatchColumns = new Vector<Integer>(10);
-        for(int i = 0; i < 10 ; i++) {
-           iMatchColumns.add(i,Integer.valueOf(-1));
-        }
-
-        strMatchColumns = new Vector<String>(10);
-        for(int j = 0; j < 10; j++) {
-           strMatchColumns.add(j,null);
-        }
-    }
-
-    /**
-     * Initializes the given <code>RowSetMetaData</code> object with the values
-     * in the given <code>ResultSetMetaData</code> object.
-     *
-     * @param md the <code>RowSetMetaData</code> object for this
-     *           <code>JdbcRowSetImpl</code> object, which will be set with
-     *           values from rsmd
-     * @param rsmd the <code>ResultSetMetaData</code> object from which new
-     *             values for md will be read
-     * @throws SQLException if an error occurs
-     */
-    protected void initMetaData(RowSetMetaData md, ResultSetMetaData rsmd) throws SQLException {
-        int numCols = rsmd.getColumnCount();
-
-        md.setColumnCount(numCols);
-        for (int col=1; col <= numCols; col++) {
-            md.setAutoIncrement(col, rsmd.isAutoIncrement(col));
-            md.setCaseSensitive(col, rsmd.isCaseSensitive(col));
-            md.setCurrency(col, rsmd.isCurrency(col));
-            md.setNullable(col, rsmd.isNullable(col));
-            md.setSigned(col, rsmd.isSigned(col));
-            md.setSearchable(col, rsmd.isSearchable(col));
-            md.setColumnDisplaySize(col, rsmd.getColumnDisplaySize(col));
-            md.setColumnLabel(col, rsmd.getColumnLabel(col));
-            md.setColumnName(col, rsmd.getColumnName(col));
-            md.setSchemaName(col, rsmd.getSchemaName(col));
-            md.setPrecision(col, rsmd.getPrecision(col));
-            md.setScale(col, rsmd.getScale(col));
-            md.setTableName(col, rsmd.getTableName(col));
-            md.setCatalogName(col, rsmd.getCatalogName(col));
-            md.setColumnType(col, rsmd.getColumnType(col));
-            md.setColumnTypeName(col, rsmd.getColumnTypeName(col));
-        }
-    }
-
-
-    protected void checkState() throws SQLException {
-
-        // If all the three i.e.  conn, ps & rs are
-        // simultaneously null implies we are not connected
-        // to the db, implies undesirable state so throw exception
-
-        if (conn == null && ps == null && rs == null ) {
-            throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.invalstate").toString());
-        }
-    }
-
-    //---------------------------------------------------------------------
-    // Reading and writing data
-    //---------------------------------------------------------------------
-
-    /**
-     * Creates the internal <code>ResultSet</code> object for which this
-     * <code>JdbcRowSet</code> object is a wrapper, effectively
-     * making the result set a JavaBeans component.
-     * <P>
-     * Certain properties must have been set before this method is called
-     * so that it can establish a connection to a database and execute the
-     * query that will create the result set.  If a <code>DataSource</code>
-     * object will be used to create the connection, properties for the
-     * data source name, user name, and password must be set.  If the
-     * <code>DriverManager</code> will be used, the properties for the
-     * URL, user name, and password must be set.  In either case, the
-     * property for the command must be set.  If the command has placeholder
-     * parameters, those must also be set. This method throws
-     * an exception if the required properties are not set.
-     * <P>
-     * Other properties have default values that may optionally be set
-     * to new values. The <code>execute</code> method will use the value
-     * for the command property to create a <code>PreparedStatement</code>
-     * object and set its properties (escape processing, maximum field
-     * size, maximum number of rows, and query timeout limit) to be those
-     * of this rowset.
-     *
-     * @throws SQLException if (1) a database access error occurs,
-     * (2) any required JDBC properties are not set, or (3) if an
-     * invalid connection exists.
-     */
-    public void execute() throws SQLException {
-        /*
-         * To execute based on the properties:
-         * i) determine how to get a connection
-         * ii) prepare the statement
-         * iii) set the properties of the statement
-         * iv) parse the params. and set them
-         * v) execute the statement
-         *
-         * During all of this try to tolerate as many errors
-         * as possible, many drivers will not support all of
-         * the properties and will/should throw SQLException
-         * at us...
-         *
-         */
-
-        prepare();
-
-        // set the properties of our shiny new statement
-        setProperties(ps);
-
-
-        // set the parameters
-        decodeParams(getParams(), ps);
-
-
-        // execute the statement
-        rs = ps.executeQuery();
-
-
-        // notify listeners
-        notifyRowSetChanged();
-
-
-    }
-
-    protected void setProperties(PreparedStatement ps) throws SQLException {
-
-        try {
-            ps.setEscapeProcessing(getEscapeProcessing());
-        } catch (SQLException ex) {
-            System.err.println(resBundle.handleGetObject("jdbcrowsetimpl.setescapeprocessing").toString() +
-                                ex.getLocalizedMessage());
-        }
-
-        try {
-            ps.setMaxFieldSize(getMaxFieldSize());
-        } catch (SQLException ex) {
-            System.err.println(resBundle.handleGetObject("jdbcrowsetimpl.setmaxfieldsize").toString() +
-                                ex.getLocalizedMessage());
-        }
-
-        try {
-            ps.setMaxRows(getMaxRows());
-        } catch (SQLException ex) {
-           System.err.println(resBundle.handleGetObject("jdbcrowsetimpl.setmaxrows").toString() +
-                                ex.getLocalizedMessage());
-        }
-
-        try {
-            ps.setQueryTimeout(getQueryTimeout());
-        } catch (SQLException ex) {
-           System.err.println(resBundle.handleGetObject("jdbcrowsetimpl.setquerytimeout").toString() +
-                                ex.getLocalizedMessage());
-        }
-
-    }
-
-    // An alternate solution is required instead of having the
-    // connect method as protected.
-    // This is a work around to assist Rave Team
-    // :ah
-
-    protected Connection connect() throws SQLException {
-
-        // Get a JDBC connection.
-
-        // First check for Connection handle object as such if
-        // "this" initialized  using conn.
-
-        if(conn != null) {
-            return conn;
-
-        } else if (getDataSourceName() != null) {
-
-            // Connect using JNDI.
-            try {
-                Context ctx = new InitialContext();
-                DataSource ds = (DataSource)ctx.lookup
-                    (getDataSourceName());
-                //return ds.getConnection(getUsername(),getPassword());
-
-                if(getUsername() != null && !getUsername().equals("")) {
-                     return ds.getConnection(getUsername(),getPassword());
-                } else {
-                     return ds.getConnection();
-                }
-            }
-            catch (javax.naming.NamingException ex) {
-                throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.connect").toString());
-            }
-
-        } else if (getUrl() != null) {
-            // Check only for getUrl() != null because
-            // user, passwd can be null
-            // Connect using the driver manager.
-
-            return DriverManager.getConnection
-                    (getUrl(), getUsername(), getPassword());
-        }
-        else {
-            return null;
-        }
-
-    }
-
-
-    protected PreparedStatement prepare() throws SQLException {
-        // get a connection
-        conn = connect();
-
-        try {
-
-            Map<String, Class<?>> aMap = getTypeMap();
-            if( aMap != null) {
-                conn.setTypeMap(aMap);
-            }
-            ps = conn.prepareStatement(getCommand(),ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
-        } catch (SQLException ex) {
-            System.err.println(resBundle.handleGetObject("jdbcrowsetimpl.prepare").toString() +
-                                ex.getLocalizedMessage());
-
-            if (ps != null)
-                ps.close();
-            if (conn != null)
-                conn.close();
-
-            throw new SQLException(ex.getMessage());
-        }
-
-        return ps;
-    }
-
-    private void decodeParams(Object[] params, PreparedStatement ps)
-    throws SQLException {
-
-    // There is a corresponding decodeParams in JdbcRowSetImpl
-    // which does the same as this method. This is a design flaw.
-    // Update the CachedRowsetReader.decodeParams when you update
-    // this method.
-
-    // Adding the same comments to CachedRowsetReader.decodeParams.
-
-        int arraySize;
-        Object[] param = null;
-
-        for (int i=0; i < params.length; i++) {
-            if (params[i] instanceof Object[]) {
-                param = (Object[])params[i];
-
-                if (param.length == 2) {
-                    if (param[0] == null) {
-                        ps.setNull(i + 1, ((Integer)param[1]).intValue());
-                        continue;
-                    }
-
-                    if (param[0] instanceof java.sql.Date ||
-                        param[0] instanceof java.sql.Time ||
-                        param[0] instanceof java.sql.Timestamp) {
-                        System.err.println(resBundle.handleGetObject("jdbcrowsetimpl.detecteddate"));
-                        if (param[1] instanceof java.util.Calendar) {
-                            System.err.println(resBundle.handleGetObject("jdbcrowsetimpl.detectedcalendar"));
-                            ps.setDate(i + 1, (java.sql.Date)param[0],
-                                       (java.util.Calendar)param[1]);
-                            continue;
-                        }
-                        else {
-                            throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.paramtype").toString());
-                        }
-                    }
-
-                    if (param[0] instanceof Reader) {
-                        ps.setCharacterStream(i + 1, (Reader)param[0],
-                                              ((Integer)param[1]).intValue());
-                        continue;
-                    }
-
-                    /*
-                     * What's left should be setObject(int, Object, scale)
-                     */
-                    if (param[1] instanceof Integer) {
-                        ps.setObject(i + 1, param[0], ((Integer)param[1]).intValue());
-                        continue;
-                    }
-
-                } else if (param.length == 3) {
-
-                    if (param[0] == null) {
-                        ps.setNull(i + 1, ((Integer)param[1]).intValue(),
-                                   (String)param[2]);
-                        continue;
-                    }
-
-                    if (param[0] instanceof java.io.InputStream) {
-                        switch (((Integer)param[2]).intValue()) {
-                        case JdbcRowSetImpl.UNICODE_STREAM_PARAM:
-                            ps.setUnicodeStream(i + 1,
-                                                (java.io.InputStream)param[0],
-                                                ((Integer)param[1]).intValue());
-                        case JdbcRowSetImpl.BINARY_STREAM_PARAM:
-                            ps.setBinaryStream(i + 1,
-                                               (java.io.InputStream)param[0],
-                                               ((Integer)param[1]).intValue());
-                        case JdbcRowSetImpl.ASCII_STREAM_PARAM:
-                            ps.setAsciiStream(i + 1,
-                                              (java.io.InputStream)param[0],
-                                              ((Integer)param[1]).intValue());
-                        default:
-                            throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.paramtype").toString());
-                        }
-                    }
-
-                    /*
-                     * no point at looking at the first element now;
-                     * what's left must be the setObject() cases.
-                     */
-                    if (param[1] instanceof Integer && param[2] instanceof Integer) {
-                        ps.setObject(i + 1, param[0], ((Integer)param[1]).intValue(),
-                                     ((Integer)param[2]).intValue());
-                        continue;
-                    }
-
-                    throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.paramtype").toString());
-
-                } else {
-                    // common case - this catches all SQL92 types
-                    ps.setObject(i + 1, params[i]);
-                    continue;
-                }
-            }  else {
-               // Try to get all the params to be set here
-               ps.setObject(i + 1, params[i]);
-
-            }
-        }
-    }
-
-    /**
-     * Moves the cursor for this rowset's <code>ResultSet</code>
-     * object down one row from its current position.
-     * A <code>ResultSet</code> cursor is initially positioned
-     * before the first row; the first call to the method
-     * <code>next</code> makes the first row the current row; the
-     * second call makes the second row the current row, and so on.
-     *
-     * <P>If an input stream is open for the current row, a call
-     * to the method <code>next</code> will
-     * implicitly close it. A <code>ResultSet</code> object's
-     * warning chain is cleared when a new row is read.
-     *
-     * @return <code>true</code> if the new current row is valid;
-     *         <code>false</code> if there are no more rows
-     * @throws SQLException if a database access error occurs
-     *            or this rowset does not currently have a valid connection,
-     *            prepared statement, and result set
-     */
-    public boolean next() throws SQLException {
-        checkState();
-
-        boolean b = rs.next();
-        notifyCursorMoved();
-        return b;
-    }
-
-    /**
-     * Releases this rowset's <code>ResultSet</code> object's database and
-     * JDBC resources immediately instead of waiting for
-     * this to happen when it is automatically closed.
-     *
-     * <P><B>Note:</B> A <code>ResultSet</code> object
-     * is automatically closed by the
-     * <code>Statement</code> object that generated it when
-     * that <code>Statement</code> object is closed,
-     * re-executed, or is used to retrieve the next result from a
-     * sequence of multiple results. A <code>ResultSet</code> object
-     * is also automatically closed when it is garbage collected.
-     *
-     * @throws SQLException if a database access error occurs
-     */
-    public void close() throws SQLException {
-        if (rs != null)
-            rs.close();
-        if (ps != null)
-            ps.close();
-        if (conn != null)
-            conn.close();
-    }
-
-    /**
-     * Reports whether the last column read from this rowset's
-     * <code>ResultSet</code> object had a value of SQL <code>NULL</code>.
-     * Note that you must first call one of the <code>getXXX</code> methods
-     * on a column to try to read its value and then call
-     * the method <code>wasNull</code> to see if the value read was
-     * SQL <code>NULL</code>.
-     *
-     * @return <code>true</code> if the last column value read was SQL
-     *         <code>NULL</code> and <code>false</code> otherwise
-     * @throws SQLException if a database access error occurs
-     *            or this rowset does not have a currently valid connection,
-     *            prepared statement, and result set
-     */
-    public boolean wasNull() throws SQLException {
-        checkState();
-
-        return rs.wasNull();
-    }
-
-    //======================================================================
-    // Methods for accessing results by column index
-    //======================================================================
-
-    /**
-     * Gets the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as
-     * a <code>String</code>.
-     *
-     * @param columnIndex the first column is 1, the second is 2, and so on
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     * value returned is <code>null</code>
-     * @throws SQLException if (1) a database access error occurs
-     *            or (2) this rowset does not currently have a valid connection,
-     *            prepared statement, and result set
-     */
-    public String getString(int columnIndex) throws SQLException {
-        checkState();
-
-        return rs.getString(columnIndex);
-    }
-
-    /**
-     * Gets the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as
-     * a <code>boolean</code>.
-     *
-     * @param columnIndex the first column is 1, the second is 2, and so on
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     * value returned is <code>false</code>
-     * @throws SQLException if (1) a database access error occurs
-     *            or (2) this rowset does not have a currently valid connection,
-     *            prepared statement, and result set
-     */
-    public boolean getBoolean(int columnIndex) throws SQLException {
-        checkState();
-
-        return rs.getBoolean(columnIndex);
-    }
-
-    /**
-     * Gets the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as
-     * a <code>byte</code>.
-     *
-     * @param columnIndex the first column is 1, the second is 2, and so on
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     * value returned is <code>0</code>
-     * @throws SQLException if (1) a database access error occurs
-     *            or (2) this rowset does not have a currently valid connection,
-     *            prepared statement, and result set
-     */
-    public byte getByte(int columnIndex) throws SQLException {
-        checkState();
-
-        return rs.getByte(columnIndex);
-    }
-
-    /**
-     * Gets the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as
-     * a <code>short</code>.
-     *
-     * @param columnIndex the first column is 1, the second is 2, and so on
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     * value returned is <code>0</code>
-     * @throws SQLException if (1) a database access error occurs
-     *            or (2) this rowset does not have a currently valid connection,
-     *            prepared statement, and result set
-     */
-    public short getShort(int columnIndex) throws SQLException {
-        checkState();
-
-        return rs.getShort(columnIndex);
-    }
-
-    /**
-     * Gets the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as
-     * an <code>int</code>.
-     *
-     * @param columnIndex the first column is 1, the second is 2, and so on
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     * value returned is <code>0</code>
-     * @throws SQLException if (1) a database access error occurs
-     *            or (2) this rowset does not have a currently valid connection,
-     *            prepared statement, and result set
-     */
-    public int getInt(int columnIndex) throws SQLException {
-        checkState();
-
-        return rs.getInt(columnIndex);
-    }
-
-    /**
-     * Gets the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as
-     * a <code>long</code>.
-     *
-     * @param columnIndex the first column is 1, the second is 2, and so on
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     * value returned is <code>0</code>
-     * @throws SQLException if (1) a database access error occurs
-     *            or (2) this rowset does not have a currently valid connection,
-     *            prepared statement, and result set
-     */
-    public long getLong(int columnIndex) throws SQLException {
-        checkState();
-
-        return rs.getLong(columnIndex);
-    }
-
-    /**
-     * Gets the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as
-     * a <code>float</code>.
-     *
-     * @param columnIndex the first column is 1, the second is 2, and so on
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     * value returned is <code>0</code>
-     * @throws SQLException if (1) a database access error occurs
-     *            or (2) this rowset does not have a currently valid connection,
-     *            prepared statement, and result set
-     */
-    public float getFloat(int columnIndex) throws SQLException {
-        checkState();
-
-        return rs.getFloat(columnIndex);
-    }
-
-    /**
-     * Gets the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as
-     * a <code>double</code>.
-     *
-     * @param columnIndex the first column is 1, the second is 2, and so on
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     * value returned is <code>0</code>
-     * @throws SQLException if (1) a database access error occurs
-     *            or (2) this rowset does not have a currently valid connection,
-     *            prepared statement, and result set
-     */
-    public double getDouble(int columnIndex) throws SQLException {
-        checkState();
-
-        return rs.getDouble(columnIndex);
-    }
-
-    /**
-     * Gets the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as
-     * a <code>java.sql.BigDecimal</code>.
-     *
-     * @param columnIndex the first column is 1, the second is 2, and so on
-     * @param scale the number of digits to the right of the decimal point
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     * value returned is <code>null</code>
-     * @throws SQLException if (1) database access error occurs
-     *            or (2) this rowset does not have a currently valid connection,
-     *            prepared statement, and result set
-     * @deprecated
-     */
-    public BigDecimal getBigDecimal(int columnIndex, int scale) throws SQLException {
-        checkState();
-
-        return rs.getBigDecimal(columnIndex, scale);
-    }
-
-    /**
-     * Gets the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as
-     * a <code>byte</code> array in the Java programming language.
-     * The bytes represent the raw values returned by the driver.
-     *
-     * @param columnIndex the first column is 1, the second is 2, and so on
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     * value returned is <code>null</code>
-     * @throws SQLException if (1) a database access error occurs
-     *            or (2) this rowset does not have a currently valid connection,
-     *            prepared statement, and result set
-     */
-    public byte[] getBytes(int columnIndex) throws SQLException {
-        checkState();
-
-        return rs.getBytes(columnIndex);
-    }
-
-    /**
-     * Gets the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as
-     * a <code>java.sql.Date</code> object in the Java programming language.
-     *
-     * @param columnIndex the first column is 1, the second is 2, and so on
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     * value returned is <code>null</code>
-     * @throws SQLException if (1) a database access error occurs
-     *            or (2) this rowset does not have a currently valid connection,
-     *            prepared statement, and result set
-     */
-    public java.sql.Date getDate(int columnIndex) throws SQLException {
-        checkState();
-
-        return rs.getDate(columnIndex);
-    }
-
-    /**
-     * Gets the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as
-     * a <code>java.sql.Time</code> object in the Java programming language.
-     *
-     * @param columnIndex the first column is 1, the second is 2, and so on
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     * value returned is <code>null</code>
-     * @throws SQLException if (1) a database access error occurs
-     *            or (2) this rowset does not have a currently valid connection,
-     *            prepared statement, and result set
-     */
-    public java.sql.Time getTime(int columnIndex) throws SQLException {
-        checkState();
-
-        return rs.getTime(columnIndex);
-    }
-
-    /**
-     * Gets the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as
-     * a <code>java.sql.Timestamp</code> object in the Java programming language.
-     *
-     * @param columnIndex the first column is 1, the second is 2, and so on
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     * value returned is <code>null</code>
-     * @throws SQLException if (1) a database access error occurs
-     *            or (2) this rowset does not have a currently valid connection,
-     *            prepared statement, and result set
-     */
-    public java.sql.Timestamp getTimestamp(int columnIndex) throws SQLException {
-        checkState();
-
-        return rs.getTimestamp(columnIndex);
-    }
-
-    /**
-     * Gets the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as
-     * a stream of ASCII characters. The value can then be read in chunks from the
-     * stream. This method is particularly
-     * suitable for retrieving large <code>LONGVARCHAR</code> values.
-     * The JDBC driver will
-     * do any necessary conversion from the database format into ASCII.
-     *
-     * <P><B>Note:</B> All the data in the returned stream must be
-     * read prior to getting the value of any other column. The next
-     * call to a <code>getXXX</code> method implicitly closes the stream.  Also, a
-     * stream may return <code>0</code> when the method
-     * <code>InputStream.available</code>
-     * is called whether there is data available or not.
-     *
-     * @param columnIndex the first column is 1, the second is 2, and so on
-     * @return a Java input stream that delivers the database column value
-     * as a stream of one-byte ASCII characters;
-     * if the value is SQL <code>NULL</code>, the
-     * value returned is <code>null</code>
-     * @throws SQLException if (1) database access error occurs
-     *            (2) this rowset does not have a currently valid connection,
-     *            prepared statement, and result set
-     */
-    public java.io.InputStream getAsciiStream(int columnIndex) throws SQLException {
-        checkState();
-
-        return rs.getAsciiStream(columnIndex);
-    }
-
-    /**
-     * Gets the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as
-     * as a stream of Unicode characters.
-     * The value can then be read in chunks from the
-     * stream. This method is particularly
-     * suitable for retrieving large<code>LONGVARCHAR</code>values.  The JDBC driver will
-     * do any necessary conversion from the database format into Unicode.
-     * The byte format of the Unicode stream must be Java UTF-8,
-     * as specified in the Java virtual machine specification.
-     *
-     * <P><B>Note:</B> All the data in the returned stream must be
-     * read prior to getting the value of any other column. The next
-     * call to a <code>getXXX</code> method implicitly closes the stream.  Also, a
-     * stream may return <code>0</code> when the method
-     * <code>InputStream.available</code>
-     * is called whether there is data available or not.
-     *
-     * @param columnIndex the first column is 1, the second is 2, and so on
-     * @return a Java input stream that delivers the database column value
-     * as a stream in Java UTF-8 byte format;
-     * if the value is SQL <code>NULL</code>, the value returned is <code>null</code>
-     * @throws SQLException if (1) a database access error occurs
-     *            or (2) this rowset does not have a currently valid connection,
-     *            prepared statement, and result set
-     * @deprecated use <code>getCharacterStream</code> in place of
-     *              <code>getUnicodeStream</code>
-     */
-    public java.io.InputStream getUnicodeStream(int columnIndex) throws SQLException {
-        checkState();
-
-        return rs.getUnicodeStream(columnIndex);
-    }
-
-    /**
-     * Gets the value of a column in the current row as a stream of
-     * the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as a binary stream of
-     * uninterpreted bytes. The value can then be read in chunks from the
-     * stream. This method is particularly
-     * suitable for retrieving large <code>LONGVARBINARY</code> values.
-     *
-     * <P><B>Note:</B> All the data in the returned stream must be
-     * read prior to getting the value of any other column. The next
-     * call to a <code>getXXX</code> method implicitly closes the stream.  Also, a
-     * stream may return <code>0</code> when the method
-     * <code>InputStream.available</code>
-     * is called whether there is data available or not.
-     *
-     * @param columnIndex the first column is 1, the second is 2, and so on
-     * @return a Java input stream that delivers the database column value
-     * as a stream of uninterpreted bytes;
-     * if the value is SQL <code>NULL</code>, the value returned is <code>null</code>
-     * @throws SQLException if (1) a database access error occurs
-     *            or (2) this rowset does not have a currently valid connection,
-     *            prepared statement, and result set
-     */
-    public java.io.InputStream getBinaryStream(int columnIndex) throws SQLException {
-        checkState();
-
-        return rs.getBinaryStream(columnIndex);
-    }
-
-
-    //======================================================================
-    // Methods for accessing results by column name
-    //======================================================================
-
-    /**
-     * Gets the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as
-     * a <code>String</code>.
-     *
-     * @param columnName the SQL name of the column
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     * value returned is <code>null</code>
-     * @throws SQLException if (1) a database access error occurs
-     *            or (2) this rowset does not have a currently valid connection,
-     *            prepared statement, and result set
-     */
-    public String getString(String columnName) throws SQLException {
-        return getString(findColumn(columnName));
-    }
-
-    /**
-     * Gets the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as
-     * a <code>boolean</code>.
-     *
-     * @param columnName the SQL name of the column
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     * value returned is <code>false</code>
-     * @throws SQLException if (1) a database access error occurs
-     *            or (2) this rowset does not have a currently valid connection,
-     *            prepared statement, and result set
-     */
-    public boolean getBoolean(String columnName) throws SQLException {
-        return getBoolean(findColumn(columnName));
-    }
-
-    /**
-     * Gets the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as
-     * a <code>byte</code>.
-     *
-     * @param columnName the SQL name of the column
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     * value returned is <code>0</code>
-     * @throws SQLException if (1) a database access error occurs
-     *            or (2) this rowset does not have a currently valid connection,
-     *            prepared statement, and result set
-     */
-    public byte getByte(String columnName) throws SQLException {
-        return getByte(findColumn(columnName));
-    }
-
-    /**
-     * Gets the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as
-     * a <code>short</code>.
-     *
-     * @param columnName the SQL name of the column
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     * value returned is <code>0</code>
-     * @throws SQLException if (1) a database access error occurs
-     *            or (2) this rowset does not have a currently valid connection,
-     *            prepared statement, and result set
-     */
-    public short getShort(String columnName) throws SQLException {
-        return getShort(findColumn(columnName));
-    }
-
-    /**
-     * Gets the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as
-     * an <code>int</code>.
-     *
-     * @param columnName the SQL name of the column
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     * value returned is <code>0</code>
-     * @throws SQLException if (1) a database access error occurs
-     *            or (2) this rowset does not have a currently valid connection,
-     *            prepared statement, and result set
-     */
-    public int getInt(String columnName) throws SQLException {
-        return getInt(findColumn(columnName));
-    }
-
-    /**
-     * Gets the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as
-     * a <code>long</code>.
-     *
-     * @param columnName the SQL name of the column
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     * value returned is <code>0</code>
-     * @throws SQLException if a database access error occurs
-     *            or this rowset does not have a currently valid connection,
-     *            prepared statement, and result set
-     */
-    public long getLong(String columnName) throws SQLException {
-        return getLong(findColumn(columnName));
-    }
-
-    /**
-     * Gets the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as
-     * a <code>float</code>.
-     *
-     * @param columnName the SQL name of the column
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     * value returned is <code>0</code>
-     * @throws SQLException if (1) a database access error occurs
-     *            or (2) this rowset does not have a currently valid connection,
-     *            prepared statement, and result set
-     */
-    public float getFloat(String columnName) throws SQLException {
-        return getFloat(findColumn(columnName));
-    }
-
-    /**
-     * Gets the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as
-     * a <code>double</code>.
-     *
-     * @param columnName the SQL name of the column
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     * value returned is <code>0</code>
-     * @throws SQLException if (1) a database access error occurs
-     *            or (2) this rowset does not have a currently valid connection,
-     *            prepared statement, and result set
-     */
-    public double getDouble(String columnName) throws SQLException {
-        return getDouble(findColumn(columnName));
-    }
-
-    /**
-     * Gets the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as
-     * a <code>java.math.BigDecimal</code>.
-     *
-     * @param columnName the SQL name of the column
-     * @param scale the number of digits to the right of the decimal point
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     * value returned is <code>null</code>
-     * @throws SQLException if (1) adatabase access error occurs
-     *            or (2) this rowset does not have a currently valid connection,
-     *            prepared statement, and result set
-     * @deprecated
-     */
-    public BigDecimal getBigDecimal(String columnName, int scale) throws SQLException {
-        return getBigDecimal(findColumn(columnName), scale);
-    }
-
-    /**
-     * Gets the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as
-     * a <code>byte</code> array in the Java programming language.
-     * The bytes represent the raw values returned by the driver.
-     *
-     * @param columnName the SQL name of the column
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     * value returned is <code>null</code>
-     * @throws SQLException if (1) a database access error occurs
-     *            or (2) this rowset does not have a currently valid connection,
-     *            prepared statement, and result set
-     */
-    public byte[] getBytes(String columnName) throws SQLException {
-        return getBytes(findColumn(columnName));
-    }
-
-    /**
-     * Gets the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as
-     * a <code>java.sql.Date</code> object in the Java programming language.
-     *
-     * @param columnName the SQL name of the column
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     * value returned is <code>null</code>
-     * @throws SQLException if (1) a database access error occurs
-     *            or (2) this rowset does not have a currently valid connection,
-     *            prepared statement, and result set
-     */
-    public java.sql.Date getDate(String columnName) throws SQLException {
-        return getDate(findColumn(columnName));
-    }
-
-    /**
-     * Gets the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as
-     * a <code>java.sql.Time</code> object in the Java programming language.
-     *
-     * @param columnName the SQL name of the column
-     * @return the column value;
-     * if the value is SQL <code>NULL</code>,
-     * the value returned is <code>null</code>
-     * @throws SQLException if (1) a database access error occurs
-     *            or (2) this rowset does not have a currently valid connection,
-     *            prepared statement, and result set
-     */
-    public java.sql.Time getTime(String columnName) throws SQLException {
-        return getTime(findColumn(columnName));
-    }
-
-    /**
-     * Gets the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as
-     * a <code>java.sql.Timestamp</code> object.
-     *
-     * @param columnName the SQL name of the column
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     * value returned is <code>null</code>
-     * @throws SQLException if (1) a database access error occurs
-     *            or (2) this rowset does not have a currently valid connection,
-     *            prepared statement, and result set
-     */
-    public java.sql.Timestamp getTimestamp(String columnName) throws SQLException {
-        return getTimestamp(findColumn(columnName));
-    }
-
-    /**
-     * Gets the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as a stream of
-     * ASCII characters. The value can then be read in chunks from the
-     * stream. This method is particularly
-     * suitable for retrieving large <code>LONGVARCHAR</code> values.
-     * The JDBC driver will
-     * do any necessary conversion from the database format into ASCII.
-     *
-     * <P><B>Note:</B> All the data in the returned stream must be
-     * read prior to getting the value of any other column. The next
-     * call to a <code>getXXX</code> method implicitly closes the stream. Also, a
-     * stream may return <code>0</code> when the method <code>available</code>
-     * is called whether there is data available or not.
-     *
-     * @param columnName the SQL name of the column
-     * @return a Java input stream that delivers the database column value
-     * as a stream of one-byte ASCII characters.
-     * If the value is SQL <code>NULL</code>,
-     * the value returned is <code>null</code>.
-     * @throws SQLException if (1) a database access error occurs
-     *            or (2) this rowset does not have a currently valid connection,
-     *            prepared statement, and result set
-     */
-    public java.io.InputStream getAsciiStream(String columnName) throws SQLException {
-        return getAsciiStream(findColumn(columnName));
-    }
-
-    /**
-     * Gets the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as a stream of
-     * Unicode characters. The value can then be read in chunks from the
-     * stream. This method is particularly
-     * suitable for retrieving large <code>LONGVARCHAR</code> values.
-     * The JDBC driver will
-     * do any necessary conversion from the database format into Unicode.
-     * The byte format of the Unicode stream must be Java UTF-8,
-     * as defined in the Java virtual machine specification.
-     *
-     * <P><B>Note:</B> All the data in the returned stream must be
-     * read prior to getting the value of any other column. The next
-     * call to a <code>getXXX</code> method implicitly closes the stream. Also, a
-     * stream may return <code>0</code> when the method <code>available</code>
-     * is called whether there is data available or not.
-     *
-     * @param columnName the SQL name of the column
-     * @return a Java input stream that delivers the database column value
-     * as a stream of two-byte Unicode characters.
-     * If the value is SQL <code>NULL</code>,
-     * the value returned is <code>null</code>.
-     * @throws SQLException if (1) a database access error occurs
-     *            or (2) this rowset does not have a currently valid connection,
-     *            prepared statement, and result set
-     * @deprecated
-     */
-    public java.io.InputStream getUnicodeStream(String columnName) throws SQLException {
-        return getUnicodeStream(findColumn(columnName));
-    }
-
-    /**
-     * Gets the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as a stream of uninterpreted
-     * <code>byte</code>s.
-     * The value can then be read in chunks from the
-     * stream. This method is particularly
-     * suitable for retrieving large <code>LONGVARBINARY</code>
-     * values.
-     *
-     * <P><B>Note:</B> All the data in the returned stream must be
-     * read prior to getting the value of any other column. The next
-     * call to a <code>getXXX</code> method implicitly closes the stream. Also, a
-     * stream may return <code>0</code> when the method <code>available</code>
-     * is called whether there is data available or not.
-     *
-     * @param columnName the SQL name of the column
-     * @return a Java input stream that delivers the database column value
-     * as a stream of uninterpreted bytes;
-     * if the value is SQL <code>NULL</code>, the result is <code>null</code>
-     * @throws SQLException if (1) a database access error occurs
-     *            or (2) this rowset does not have a currently valid connection,
-     *            prepared statement, and result set
-     */
-    public java.io.InputStream getBinaryStream(String columnName) throws SQLException {
-        return getBinaryStream(findColumn(columnName));
-    }
-
-
-    //=====================================================================
-    // Advanced features:
-    //=====================================================================
-
-    /**
-     * Returns the first warning reported by calls on this rowset's
-     * <code>ResultSet</code> object.
-     * Subsequent warnings on this rowset's <code>ResultSet</code> object
-     * will be chained to the <code>SQLWarning</code> object that
-     * this method returns.
-     *
-     * <P>The warning chain is automatically cleared each time a new
-     * row is read.
-     *
-     * <P><B>Note:</B> This warning chain only covers warnings caused
-     * by <code>ResultSet</code> methods.  Any warning caused by
-     * <code>Statement</code> methods
-     * (such as reading OUT parameters) will be chained on the
-     * <code>Statement</code> object.
-     *
-     * @return the first <code>SQLWarning</code> object reported or <code>null</code>
-     * @throws SQLException if (1) a database access error occurs
-     *            or (2) this rowset does not have a currently valid connection,
-     *            prepared statement, and result set
-     */
-    public SQLWarning getWarnings() throws SQLException {
-        checkState();
-
-        return rs.getWarnings();
-    }
-
-    /**
-     * Clears all warnings reported on this rowset's <code>ResultSet</code> object.
-     * After this method is called, the method <code>getWarnings</code>
-     * returns <code>null</code> until a new warning is
-     * reported for this rowset's <code>ResultSet</code> object.
-     *
-     * @throws SQLException if (1) a database access error occurs
-     *            or (2) this rowset does not have a currently valid connection,
-     *            prepared statement, and result set
-     */
-    public void clearWarnings() throws SQLException {
-        checkState();
-
-        rs.clearWarnings();
-    }
-
-    /**
-     * Gets the name of the SQL cursor used by this rowset's <code>ResultSet</code>
-     * object.
-     *
-     * <P>In SQL, a result table is retrieved through a cursor that is
-     * named. The current row of a result set can be updated or deleted
-     * using a positioned update/delete statement that references the
-     * cursor name. To insure that the cursor has the proper isolation
-     * level to support update, the cursor's <code>select</code> statement should be
-     * of the form 'select for update'. If the 'for update' clause is
-     * omitted, the positioned updates may fail.
-     *
-     * <P>The JDBC API supports this SQL feature by providing the name of the
-     * SQL cursor used by a <code>ResultSet</code> object.
-     * The current row of a <code>ResultSet</code> object
-     * is also the current row of this SQL cursor.
-     *
-     * <P><B>Note:</B> If positioned update is not supported, a
-     * <code>SQLException</code> is thrown.
-     *
-     * @return the SQL name for this rowset's <code>ResultSet</code> object's cursor
-     * @throws SQLException if (1) a database access error occurs
-     *            or (2) xthis rowset does not have a currently valid connection,
-     *            prepared statement, and result set
-     */
-    public String getCursorName() throws SQLException {
-        checkState();
-
-        return rs.getCursorName();
-    }
-
-    /**
-     * Retrieves the  number, types and properties of
-     * this rowset's <code>ResultSet</code> object's columns.
-     *
-     * @return the description of this rowset's <code>ResultSet</code>
-     *     object's columns
-     * @throws SQLException if (1) a database access error occurs
-     *     or (2) this rowset does not have a currently valid connection,
-     *     prepared statement, and result set
-     */
-    public ResultSetMetaData getMetaData() throws SQLException {
-
-        checkState();
-
-        // It may be the case that JdbcRowSet might not have been
-        // initialized with ResultSet handle and may be by PreparedStatement
-        // internally when we set JdbcRowSet.setCommand().
-        // We may require all the basic properties of setEscapeProcessing
-        // setMaxFieldSize etc. which an application can use before we call
-        // execute.
-        try {
-             checkState();
-        } catch(SQLException sqle) {
-             prepare();
-             // will return ResultSetMetaData
-             return ps.getMetaData();
-        }
-        return rs.getMetaData();
-    }
-
-    /**
-     * <p>Gets the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as
-     * an <code>Object</code>.
-     *
-     * <p>This method will return the value of the given column as a
-     * Java object.  The type of the Java object will be the default
-     * Java object type corresponding to the column's SQL type,
-     * following the mapping for built-in types specified in the JDBC
-     * specification.
-     *
-     * <p>This method may also be used to read datatabase-specific
-     * abstract data types.
-     *
-     * In the JDBC 3.0 API, the behavior of method
-     * <code>getObject</code> is extended to materialize
-     * data of SQL user-defined types.  When a column contains
-     * a structured or distinct value, the behavior of this method is as
-     * if it were a call to: <code>getObject(columnIndex,
-     * this.getStatement().getConnection().getTypeMap())</code>.
-     *
-     * @param columnIndex the first column is 1, the second is 2, and so on
-     * @return a <code>java.lang.Object</code> holding the column value
-     * @throws SQLException if (1) a database access error occurs
-     *            or (2) this rowset does not currently have a valid connection,
-     *            prepared statement, and result set
-     */
-    public Object getObject(int columnIndex) throws SQLException {
-        checkState();
-
-        return rs.getObject(columnIndex);
-    }
-
-    /**
-     * <p>Gets the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as
-     * an <code>Object</code>.
-     *
-     * <p>This method will return the value of the given column as a
-     * Java object.  The type of the Java object will be the default
-     * Java object type corresponding to the column's SQL type,
-     * following the mapping for built-in types specified in the JDBC
-     * specification.
-     *
-     * <p>This method may also be used to read datatabase-specific
-     * abstract data types.
-     *
-     * In the JDBC 3.0 API, the behavior of the method
-     * <code>getObject</code> is extended to materialize
-     * data of SQL user-defined types.  When a column contains
-     * a structured or distinct value, the behavior of this method is as
-     * if it were a call to: <code>getObject(columnIndex,
-     * this.getStatement().getConnection().getTypeMap())</code>.
-     *
-     * @param columnName the SQL name of the column
-     * @return a <code>java.lang.Object</code> holding the column value
-     * @throws SQLException if (1) a database access error occurs
-     *            or (2) this rowset does not currently have a valid connection,
-     *            prepared statement, and result set
-     */
-    public Object getObject(String columnName) throws SQLException {
-        return getObject(findColumn(columnName));
-    }
-
-    //----------------------------------------------------------------
-
-    /**
-     * Maps the given <code>JdbcRowSetImpl</code> column name to its
-     * <code>JdbcRowSetImpl</code> column index and reflects this on
-     * the internal <code>ResultSet</code> object.
-     *
-     * @param columnName the name of the column
-     * @return the column index of the given column name
-     * @throws SQLException if (1) a database access error occurs
-     * (2) this rowset does not have a currently valid connection,
-     * prepared statement, and result set
-     */
-    public int findColumn(String columnName) throws SQLException {
-        checkState();
-
-        return rs.findColumn(columnName);
-    }
-
-
-    //--------------------------JDBC 2.0-----------------------------------
-
-    //---------------------------------------------------------------------
-    // Getters and Setters
-    //---------------------------------------------------------------------
-
-    /**
-     * Gets the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as a
-     * <code>java.io.Reader</code> object.
-     * @return a <code>java.io.Reader</code> object that contains the column
-     * value; if the value is SQL <code>NULL</code>, the value returned is
-     * <code>null</code>.
-     * @param columnIndex the first column is 1, the second is 2, and so on
-     *
-     */
-    public java.io.Reader getCharacterStream(int columnIndex) throws SQLException {
-        checkState();
-
-        return rs.getCharacterStream(columnIndex);
-    }
-
-    /**
-     * Gets the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as a
-     * <code>java.io.Reader</code> object.
-     *
-     * @return a <code>java.io.Reader</code> object that contains the column
-     * value; if the value is SQL <code>NULL</code>, the value returned is
-     * <code>null</code>.
-     * @param columnName the name of the column
-     * @return the value in the specified column as a <code>java.io.Reader</code>
-     *
-     */
-    public java.io.Reader getCharacterStream(String columnName) throws SQLException {
-        return getCharacterStream(findColumn(columnName));
-    }
-
-    /**
-     * Gets the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as a
-     * <code>java.math.BigDecimal</code> with full precision.
-     *
-     * @param columnIndex the first column is 1, the second is 2, and so on
-     * @return the column value (full precision);
-     * if the value is SQL <code>NULL</code>, the value returned is
-     * <code>null</code>.
-     * @throws SQLException if a database access error occurs
-     *            or this rowset does not currently have a valid
-     *            connection, prepared statement, and result set
-     */
-    public BigDecimal getBigDecimal(int columnIndex) throws SQLException {
-        checkState();
-
-        return rs.getBigDecimal(columnIndex);
-    }
-
-    /**
-     * Gets the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as a
-     * <code>java.math.BigDecimal</code> with full precision.
-     *
-     * @param columnName the column name
-     * @return the column value (full precision);
-     * if the value is SQL <code>NULL</code>, the value returned is
-     * <code>null</code>.
-     * @throws SQLException if a database access error occurs
-     *            or this rowset does not currently have a valid
-     *            connection, prepared statement, and result set
-     */
-    public BigDecimal getBigDecimal(String columnName) throws SQLException {
-        return getBigDecimal(findColumn(columnName));
-    }
-
-    //---------------------------------------------------------------------
-    // Traversal/Positioning
-    //---------------------------------------------------------------------
-
-    /**
-     * Indicates whether the cursor is before the first row in
-     * this rowset's <code>ResultSet</code> object.
-     *
-     * @return <code>true</code> if the cursor is before the first row;
-     * <code>false</code> if the cursor is at any other position or the
-     * result set contains no rows
-     * @throws SQLException if a database access error occurs
-     *            or this rowset does not currently have a valid
-     *            connection, prepared statement, and result set
-     */
-    public boolean isBeforeFirst() throws SQLException {
-        checkState();
-
-        return rs.isBeforeFirst();
-    }
-
-    /**
-     * Indicates whether the cursor is after the last row in
-     * this rowset's <code>ResultSet</code> object.
-     *
-     * @return <code>true</code> if the cursor is after the last row;
-     * <code>false</code> if the cursor is at any other position or the
-     * result set contains no rows
-     * @throws SQLException if a database access error occurs
-     *            or this rowset does not currently have a valid
-     *            connection, prepared statement, and result set
-     */
-    public boolean isAfterLast() throws SQLException {
-        checkState();
-
-        return rs.isAfterLast();
-    }
-
-    /**
-     * Indicates whether the cursor is on the first row of
-     * this rowset's <code>ResultSet</code> object.
-     *
-     * @return <code>true</code> if the cursor is on the first row;
-     * <code>false</code> otherwise
-     * @throws SQLException if a database access error occurs
-     *            or this rowset does not currently have a valid
-     *            connection, prepared statement, and result set
-     */
-    public boolean isFirst() throws SQLException {
-        checkState();
-
-        return rs.isFirst();
-    }
-
-    /**
-     * Indicates whether the cursor is on the last row of
-     * this rowset's <code>ResultSet</code> object.
-     * Note: Calling the method <code>isLast</code> may be expensive
-     * because the JDBC driver
-     * might need to fetch ahead one row in order to determine
-     * whether the current row is the last row in the result set.
-     *
-     * @return <code>true</code> if the cursor is on the last row;
-     * <code>false</code> otherwise
-     * @throws SQLException if a database access error occurs
-     *            or this rowset does not currently have a valid
-     *            connection, prepared statement, and result set
-     *
-     */
-    public boolean isLast() throws SQLException {
-        checkState();
-
-        return rs.isLast();
-    }
-
-    /**
-     * Moves the cursor to the front of
-     * this rowset's <code>ResultSet</code> object, just before the
-     * first row. This method has no effect if the result set contains no rows.
-     *
-     * @throws SQLException if (1) a database access error occurs,
-     *            (2) the result set type is <code>TYPE_FORWARD_ONLY</code>,
-     *            or (3) this rowset does not currently have a valid
-     *            connection, prepared statement, and result set
-     */
-    public void beforeFirst() throws SQLException {
-        checkState();
-
-        rs.beforeFirst();
-        notifyCursorMoved();
-    }
-
-    /**
-     * Moves the cursor to the end of
-     * this rowset's <code>ResultSet</code> object, just after the
-     * last row. This method has no effect if the result set contains no rows.
-     * @throws SQLException if (1) a database access error occurs,
-     *            (2) the result set type is <code>TYPE_FORWARD_ONLY</code>,
-     *            or (3) this rowset does not currently have a valid
-     *            connection, prepared statement, and result set
-     */
-    public void afterLast() throws SQLException {
-        checkState();
-
-        rs.afterLast();
-        notifyCursorMoved();
-    }
-
-    /**
-     * Moves the cursor to the first row in
-     * this rowset's <code>ResultSet</code> object.
-     *
-     * @return <code>true</code> if the cursor is on a valid row;
-     * <code>false</code> if there are no rows in the result set
-     * @throws SQLException if (1) a database access error occurs,
-     *            (2) the result set type is <code>TYPE_FORWARD_ONLY</code>,
-     *            or (3) this rowset does not currently have a valid
-     *            connection, prepared statement, and result set
-     */
-    public boolean first() throws SQLException {
-        checkState();
-
-        boolean b = rs.first();
-        notifyCursorMoved();
-        return b;
-
-    }
-
-    /**
-     * Moves the cursor to the last row in
-     * this rowset's <code>ResultSet</code> object.
-     *
-     * @return <code>true</code> if the cursor is on a valid row;
-     * <code>false</code> if there are no rows in the result set
-     * @throws SQLException if (1) a database access error occurs,
-     *            (2) the result set type is <code>TYPE_FORWARD_ONLY</code>,
-     *            or (3) this rowset does not currently have a valid
-     *            connection, prepared statement, and result set
-     */
-    public boolean last() throws SQLException {
-        checkState();
-
-        boolean b = rs.last();
-        notifyCursorMoved();
-        return b;
-    }
-
-    /**
-     * Retrieves the current row number.  The first row is number 1, the
-     * second is number 2, and so on.
-     *
-     * @return the current row number; <code>0</code> if there is no current row
-     * @throws SQLException if a database access error occurs
-     *            or this rowset does not currently have a valid connection,
-     *            prepared statement, and result set
-     */
-    public int getRow() throws SQLException {
-        checkState();
-
-        return rs.getRow();
-    }
-
-    /**
-     * Moves the cursor to the given row number in
-     * this rowset's internal <code>ResultSet</code> object.
-     *
-     * <p>If the row number is positive, the cursor moves to
-     * the given row number with respect to the
-     * beginning of the result set.  The first row is row 1, the second
-     * is row 2, and so on.
-     *
-     * <p>If the given row number is negative, the cursor moves to
-     * an absolute row position with respect to
-     * the end of the result set.  For example, calling the method
-     * <code>absolute(-1)</code> positions the
-     * cursor on the last row, calling the method <code>absolute(-2)</code>
-     * moves the cursor to the next-to-last row, and so on.
-     *
-     * <p>An attempt to position the cursor beyond the first/last row in
-     * the result set leaves the cursor before the first row or after
-     * the last row.
-     *
-     * <p><B>Note:</B> Calling <code>absolute(1)</code> is the same
-     * as calling <code>first()</code>. Calling <code>absolute(-1)</code>
-     * is the same as calling <code>last()</code>.
-     *
-     * @return <code>true</code> if the cursor is on the result set;
-     * <code>false</code> otherwise
-     * @throws SQLException if (1) a database access error occurs,
-     *            (2) the row is <code>0</code>, (3) the result set
-     *            type is <code>TYPE_FORWARD_ONLY</code>, or (4) this
-     *            rowset does not currently have a valid connection,
-     *            prepared statement, and result set
-     */
-    public boolean absolute(int row) throws SQLException {
-        checkState();
-
-        boolean b = rs.absolute(row);
-        notifyCursorMoved();
-        return b;
-    }
-
-    /**
-     * Moves the cursor a relative number of rows, either positive or negative.
-     * Attempting to move beyond the first/last row in the
-     * result set positions the cursor before/after the
-     * the first/last row. Calling <code>relative(0)</code> is valid, but does
-     * not change the cursor position.
-     *
-     * <p>Note: Calling the method <code>relative(1)</code>
-     * is different from calling the method <code>next()</code>
-     * because is makes sense to call <code>next()</code> when there
-     * is no current row,
-     * for example, when the cursor is positioned before the first row
-     * or after the last row of the result set.
-     *
-     * @return <code>true</code> if the cursor is on a row;
-     * <code>false</code> otherwise
-     * @throws SQLException if (1) a database access error occurs,
-     *            (2) there is no current row, (3) the result set
-     *            type is <code>TYPE_FORWARD_ONLY</code>, or (4) this
-     *            rowset does not currently have a valid connection,
-     *            prepared statement, and result set
-     */
-    public boolean relative(int rows) throws SQLException {
-        checkState();
-
-        boolean b = rs.relative(rows);
-        notifyCursorMoved();
-        return b;
-    }
-
-    /**
-     * Moves the cursor to the previous row in this
-     * <code>ResultSet</code> object.
-     *
-     * <p><B>Note:</B> Calling the method <code>previous()</code> is not the same as
-     * calling the method <code>relative(-1)</code> because it
-     * makes sense to call <code>previous()</code> when there is no current row.
-     *
-     * @return <code>true</code> if the cursor is on a valid row;
-     * <code>false</code> if it is off the result set
-     * @throws SQLException if (1) a database access error occurs,
-     *            (2) the result set type is <code>TYPE_FORWARD_ONLY</code>,
-     *            or (3) this rowset does not currently have a valid
-     *            connection, prepared statement, and result set
-     */
-    public boolean previous() throws SQLException {
-        checkState();
-
-        boolean b = rs.previous();
-        notifyCursorMoved();
-        return b;
-    }
-
-    /**
-     * Gives a hint as to the direction in which the rows in this
-     * <code>ResultSet</code> object will be processed.
-     * The initial value is determined by the
-     * <code>Statement</code> object
-     * that produced this rowset's <code>ResultSet</code> object.
-     * The fetch direction may be changed at any time.
-     *
-     * @throws SQLException if (1) a database access error occurs,
-     *            (2) the result set type is <code>TYPE_FORWARD_ONLY</code>
-     *            and the fetch direction is not <code>FETCH_FORWARD</code>,
-     *            or (3) this rowset does not currently have a valid
-     *            connection, prepared statement, and result set
-     * @see java.sql.Statement#setFetchDirection
-     */
-    public void setFetchDirection(int direction) throws SQLException {
-        checkState();
-
-        rs.setFetchDirection(direction);
-    }
-
-    /**
-     * Returns the fetch direction for this
-     * <code>ResultSet</code> object.
-     *
-     * @return the current fetch direction for this rowset's
-     *         <code>ResultSet</code> object
-     * @throws SQLException if a database access error occurs
-     *            or this rowset does not currently have a valid connection,
-     *            prepared statement, and result set
-     */
-    public int getFetchDirection() throws SQLException {
-        try {
-             checkState();
-        } catch(SQLException sqle) {
-             super.getFetchDirection();
-        }
-        return rs.getFetchDirection();
-    }
-
-    /**
-     * Gives the JDBC driver a hint as to the number of rows that should
-     * be fetched from the database when more rows are needed for this
-     * <code>ResultSet</code> object.
-     * If the fetch size specified is zero, the JDBC driver
-     * ignores the value and is free to make its own best guess as to what
-     * the fetch size should be.  The default value is set by the
-     * <code>Statement</code> object
-     * that created the result set.  The fetch size may be changed at any time.
-     *
-     * @param rows the number of rows to fetch
-     * @throws SQLException if (1) a database access error occurs, (2) the
-     *            condition <code>0 <= rows <= this.getMaxRows()</code> is not
-     *            satisfied, or (3) this rowset does not currently have a valid
-     *            connection, prepared statement, and result set
-     *
-     */
-    public void setFetchSize(int rows) throws SQLException {
-        checkState();
-
-        rs.setFetchSize(rows);
-    }
-
-    /**
-     *
-     * Returns the fetch size for this
-     * <code>ResultSet</code> object.
-     *
-     * @return the current fetch size for this rowset's <code>ResultSet</code> object
-     * @throws SQLException if a database access error occurs
-     *            or this rowset does not currently have a valid connection,
-     *            prepared statement, and result set
-     */
-    public int getType() throws SQLException {
-        try {
-             checkState();
-        } catch(SQLException sqle) {
-            return super.getType();
-        }
-
-        // If the ResultSet has not been created, then return the default type
-        // otherwise return the type from the ResultSet.
-        if(rs == null) {
-            return super.getType();
-        } else {
-           int rstype = rs.getType();
-            return rstype;
-        }
-
-
-    }
-
-    /**
-     * Returns the concurrency mode of this rowset's <code>ResultSet</code> object.
-     * The concurrency used is determined by the
-     * <code>Statement</code> object that created the result set.
-     *
-     * @return the concurrency type, either <code>CONCUR_READ_ONLY</code>
-     * or <code>CONCUR_UPDATABLE</code>
-     * @throws SQLException if (1) a database access error occurs
-     *            or (2) this rowset does not currently have a valid connection,
-     *            prepared statement, and result set
-     */
-    public int getConcurrency() throws SQLException {
-        try {
-             checkState();
-        } catch(SQLException sqle) {
-             super.getConcurrency();
-        }
-        return rs.getConcurrency();
-    }
-
-    //---------------------------------------------------------------------
-    // Updates
-    //---------------------------------------------------------------------
-
-    /**
-     * Indicates whether the current row has been updated.  The value returned
-     * depends on whether or not the result set can detect updates.
-     *
-     * @return <code>true</code> if the row has been visibly updated
-     * by the owner or another, and updates are detected
-     * @throws SQLException if a database access error occurs
-     *            or this rowset does not currently have a valid connection,
-     *            prepared statement, and result set
-     * @see java.sql.DatabaseMetaData#updatesAreDetected
-     */
-    public boolean rowUpdated() throws SQLException {
-        checkState();
-
-        return rs.rowUpdated();
-    }
-
-    /**
-     * Indicates whether the current row has had an insertion.
-     * The value returned depends on whether or not this
-     * <code>ResultSet</code> object can detect visible inserts.
-     *
-     * @return <code>true</code> if a row has had an insertion
-     * and insertions are detected; <code>false</code> otherwise
-     * @throws SQLException if a database access error occurs
-     *            or this rowset does not currently have a valid connection,
-     *            prepared statement, and result set
-     * @see java.sql.DatabaseMetaData#insertsAreDetected
-     *
-     */
-    public boolean rowInserted() throws SQLException {
-        checkState();
-
-        return rs.rowInserted();
-    }
-
-    /**
-     * Indicates whether a row has been deleted.  A deleted row may leave
-     * a visible "hole" in a result set.  This method can be used to
-     * detect holes in a result set.  The value returned depends on whether
-     * or not this rowset's <code>ResultSet</code> object can detect deletions.
-     *
-     * @return <code>true</code> if a row was deleted and deletions are detected;
-     * <code>false</code> otherwise
-     * @throws SQLException if a database access error occurs
-     *            or this rowset does not currently have a valid connection,
-     *            prepared statement, and result set
-     * @see java.sql.DatabaseMetaData#deletesAreDetected
-     */
-    public boolean rowDeleted() throws SQLException {
-        checkState();
-
-        return rs.rowDeleted();
-    }
-
-    /**
-     * Gives a nullable column a null value.
-     *
-     * The <code>updateXXX</code> methods are used to update column values in the
-     * current row or the insert row.  The <code>updateXXX</code> methods do not
-     * update the underlying database; instead the <code>updateRow</code>
-     * or <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnIndex the first column is 1, the second is 2, and so on
-     * @throws SQLException if a database access error occurs
-     *            or this rowset does not currently have a valid connection,
-     *            prepared statement, and result set
-     */
-    public void updateNull(int columnIndex) throws SQLException {
-        checkState();
-
-        // To check the type and concurrency of the ResultSet
-        // to verify whether updates are possible or not
-        checkTypeConcurrency();
-
-        rs.updateNull(columnIndex);
-    }
-
-    /**
-     * Updates the designated column with a <code>boolean</code> value.
-     * The <code>updateXXX</code> methods are used to update column values in the
-     * current row or the insert row.  The <code>updateXXX</code> methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnIndex the first column is 1, the second is 2, and so on
-     * @param x the new column value
-     * @throws SQLException if a database access error occurs
-     *            or this rowset does not currently have a valid connection,
-     *            prepared statement, and result set
-     *
-     */
-    public void updateBoolean(int columnIndex, boolean x) throws SQLException {
-        checkState();
-
-        // To check the type and concurrency of the ResultSet
-        // to verify whether updates are possible or not
-        checkTypeConcurrency();
-
-        rs.updateBoolean(columnIndex, x);
-    }
-
-    /**
-     * Updates the designated column with a <code>byte</code> value.
-     * The <code>updateXXX</code> methods are used to update column values in the
-     * current row or the insert row.  The <code>updateXXX</code> methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     *
-     * @param columnIndex the first column is 1, the second is 2, and so on
-     * @param x the new column value
-     * @throws SQLException if a database access error occurs
-     *            or this rowset does not currently have a valid connection,
-     *            prepared statement, and result set
-     *
-     */
-    public void updateByte(int columnIndex, byte x) throws SQLException {
-        checkState();
-
-        // To check the type and concurrency of the ResultSet
-        // to verify whether updates are possible or not
-        checkTypeConcurrency();
-
-        rs.updateByte(columnIndex, x);
-    }
-
-    /**
-     * Updates the designated column with a <code>short</code> value.
-     * The <code>updateXXX</code> methods are used to update column values in the
-     * current row or the insert row.  The <code>updateXXX</code> methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnIndex the first column is 1, the second is 2, and so on
-     * @param x the new column value
-     * @throws SQLException if a database access error occurs
-     *            or this rowset does not currently have a valid connection,
-     *            prepared statement, and result set
-     *
-     */
-    public void updateShort(int columnIndex, short x) throws SQLException {
-        checkState();
-
-        // To check the type and concurrency of the ResultSet
-        // to verify whether updates are possible or not
-        checkTypeConcurrency();
-
-        rs.updateShort(columnIndex, x);
-    }
-
-    /**
-     * Updates the designated column with an <code>int</code> value.
-     * The <code>updateXXX</code> methods are used to update column values in the
-     * current row or the insert row.  The <code>updateXXX</code> methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnIndex the first column is 1, the second is 2, and so on
-     * @param x the new column value
-     * @throws SQLException if a database access error occurs
-     *            or this rowset does not currently have a valid connection,
-     *            prepared statement, and result set
-     */
-    public void updateInt(int columnIndex, int x) throws SQLException {
-        checkState();
-
-        // To check the type and concurrency of the ResultSet
-        // to verify whether updates are possible or not
-        checkTypeConcurrency();
-
-        rs.updateInt(columnIndex, x);
-    }
-
-    /**
-     * Updates the designated column with a <code>long</code> value.
-     * The <code>updateXXX</code> methods are used to update column values in the
-     * current row or the insert row.  The <code>updateXXX</code> methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnIndex the first column is 1, the second is 2, and so on
-     * @param x the new column value
-     * @throws SQLException if a database access error occurs
-     *            or this rowset does not currently have a valid connection,
-     *            prepared statement, and result set
-     *
-     */
-    public void updateLong(int columnIndex, long x) throws SQLException {
-        checkState();
-
-        // To check the type and concurrency of the ResultSet
-        // to verify whether updates are possible or not
-        checkTypeConcurrency();
-
-        rs.updateLong(columnIndex, x);
-    }
-
-    /**
-     * Updates the designated column with a <code>float</code> value.
-     * The <code>updateXXX</code> methods are used to update column values in the
-     * current row or the insert row.  The <code>updateXXX</code> methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnIndex the first column is 1, the second is 2, and so on
-     * @param x the new column value
-     * @throws SQLException if a database access error occurs
-     *            or this rowset does not currently have a valid connection,
-     *            prepared statement, and result set
-     *
-     */
-    public void updateFloat(int columnIndex, float x) throws SQLException {
-        checkState();
-
-        // To check the type and concurrency of the ResultSet
-        // to verify whether updates are possible or not
-        checkTypeConcurrency();
-
-        rs.updateFloat(columnIndex, x);
-    }
-
-    /**
-     * Updates the designated column with a <code>double</code> value.
-     * The <code>updateXXX</code> methods are used to update column values in the
-     * current row or the insert row.  The <code>updateXXX</code> methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnIndex the first column is 1, the second is 2, and so on
-     * @param x the new column value
-     * @throws SQLException if a database access error occurs
-     *            or this rowset does not currently have a valid connection,
-     *            prepared statement, and result set
-     *
-     */
-    public void updateDouble(int columnIndex, double x) throws SQLException {
-        checkState();
-
-        // To check the type and concurrency of the ResultSet
-        // to verify whether updates are possible or not
-        checkTypeConcurrency();
-
-        rs.updateDouble(columnIndex, x);
-    }
-
-    /**
-     * Updates the designated column with a <code>java.math.BigDecimal</code>
-     * value.
-     * The <code>updateXXX</code> methods are used to update column values in the
-     * current row or the insert row.  The <code>updateXXX</code> methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnIndex the first column is 1, the second is 2, and so on
-     * @param x the new column value
-     * @throws SQLException if a database access error occurs
-     *            or this rowset does not currently have a valid connection,
-     *            prepared statement, and result set
-     *
-     */
-    public void updateBigDecimal(int columnIndex, BigDecimal x) throws SQLException {
-        checkState();
-
-        // To check the type and concurrency of the ResultSet
-        // to verify whether updates are possible or not
-        checkTypeConcurrency();
-
-        rs.updateBigDecimal(columnIndex, x);
-    }
-
-    /**
-     * Updates the designated column with a <code>String</code> value.
-     * The <code>updateXXX</code> methods are used to update column values in the
-     * current row or the insert row.  The <code>updateXXX</code> methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnIndex the first column is 1, the second is 2, and so on
-     * @param x the new column value
-     * @throws SQLException if a database access error occurs
-     *            or this rowset does not currently have a valid connection,
-     *            prepared statement, and result set
-     *
-     */
-    public void updateString(int columnIndex, String x) throws SQLException {
-        checkState();
-
-        // To check the type and concurrency of the ResultSet
-        // to verify whether updates are possible or not
-        checkTypeConcurrency();
-
-        rs.updateString(columnIndex, x);
-    }
-
-    /**
-     * Updates the designated column with a <code>byte</code> array value.
-     * The <code>updateXXX</code> methods are used to update column values in the
-     * current row or the insert row.  The <code>updateXXX</code> methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnIndex the first column is 1, the second is 2, and so on
-     * @param x the new column value
-     * @throws SQLException if a database access error occurs
-     *            or this rowset does not currently have a valid connection,
-     *            prepared statement, and result set
-     *
-     */
-    public void updateBytes(int columnIndex, byte x[]) throws SQLException {
-        checkState();
-
-        // To check the type and concurrency of the ResultSet
-        // to verify whether updates are possible or not
-        checkTypeConcurrency();
-
-        rs.updateBytes(columnIndex, x);
-    }
-
-    /**
-     * Updates the designated column with a <code>java.sql.Date</code> value.
-     * The <code>updateXXX</code> methods are used to update column values in the
-     * current row or the insert row.  The <code>updateXXX</code> methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnIndex the first column is 1, the second is 2, and so on
-     * @param x the new column value
-     * @throws SQLException if a database access error occurs
-     *            or this rowset does not currently have a valid connection,
-     *            prepared statement, and result set
-     *
-     */
-    public void updateDate(int columnIndex, java.sql.Date x) throws SQLException {
-        checkState();
-
-        // To check the type and concurrency of the ResultSet
-        // to verify whether updates are possible or not
-        checkTypeConcurrency();
-
-        rs.updateDate(columnIndex, x);
-    }
-
-
-    /**
-     * Updates the designated column with a <code>java.sql.Time</code> value.
-     * The <code>updateXXX</code> methods are used to update column values in the
-     * current row or the insert row.  The <code>updateXXX</code> methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnIndex the first column is 1, the second is 2, and so on
-     * @param x the new column value
-     * @throws SQLException if a database access error occurs
-     *            or this rowset does not currently have a valid connection,
-     *            prepared statement, and result set
-     *
-     */
-    public void updateTime(int columnIndex, java.sql.Time x) throws SQLException {
-        checkState();
-
-        // To check the type and concurrency of the ResultSet
-        // to verify whether updates are possible or not
-        checkTypeConcurrency();
-
-        rs.updateTime(columnIndex, x);
-    }
-
-    /**
-     * Updates the designated column with a <code>java.sql.Timestamp</code>
-     * value.
-     * The <code>updateXXX</code> methods are used to update column values in the
-     * current row or the insert row.  The <code>updateXXX</code> methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnIndex the first column is 1, the second is 2, and so on
-     * @param x the new column value
-     * @throws SQLException if a database access error occurs
-     *            or this rowset does not currently have a valid connection,
-     *            prepared statement, and result set
-     *
-     */
-    public void updateTimestamp(int columnIndex, java.sql.Timestamp x) throws SQLException {
-        checkState();
-
-        // To check the type and concurrency of the ResultSet
-        // to verify whether updates are possible or not
-        checkTypeConcurrency();
-
-        rs.updateTimestamp(columnIndex, x);
-    }
-
-    /**
-     * Updates the designated column with an ascii stream value.
-     * The <code>updateXXX</code> methods are used to update column values in the
-     * current row or the insert row.  The <code>updateXXX</code> methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnIndex the first column is 1, the second is 2, and so on
-     * @param x the new column value
-     * @param length the length of the stream
-     * @throws SQLException if (1) a database access error occurs
-     *            (2) or this rowset does not currently have a valid connection,
-     *            prepared statement, and result set
-     *
-     */
-    public void updateAsciiStream(int columnIndex, java.io.InputStream x, int length) throws SQLException {
-        checkState();
-
-        // To check the type and concurrency of the ResultSet
-        // to verify whether updates are possible or not
-        checkTypeConcurrency();
-
-        rs.updateAsciiStream(columnIndex, x, length);
-    }
-
-    /**
-     * Updates the designated column with a binary stream value.
-     * The <code>updateXXX</code> methods are used to update column values in the
-     * current row or the insert row.  The <code>updateXXX</code> methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnIndex the first column is 1, the second is 2, and so on
-     * @param x the new column value
-     * @param length the length of the stream
-     * @throws SQLException if a database access error occurs
-     *            or this rowset does not currently have a valid connection,
-     *            prepared statement, and result set
-     *
-     */
-    public void updateBinaryStream(int columnIndex, java.io.InputStream x, int length) throws SQLException {
-        checkState();
-
-        // To check the type and concurrency of the ResultSet
-        // to verify whether updates are possible or not
-        checkTypeConcurrency();
-
-        rs.updateBinaryStream(columnIndex, x, length);
-    }
-
-    /**
-     * Updates the designated column with a character stream value.
-     * The <code>updateXXX</code> methods are used to update column values in the
-     * current row or the insert row.  The <code>updateXXX</code> methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnIndex the first column is 1, the second is 2, and so on
-     * @param x the new column value
-     * @param length the length of the stream
-     * @throws SQLException if a database access error occurs
-     *            or this rowset does not currently have a valid connection,
-     *            prepared statement, and result set
-     *
-     */
-    public void updateCharacterStream(int columnIndex, java.io.Reader x, int length) throws SQLException {
-        checkState();
-
-        // To check the type and concurrency of the ResultSet
-        // to verify whether updates are possible or not
-        checkTypeConcurrency();
-
-        rs.updateCharacterStream(columnIndex, x, length);
-    }
-
-    /**
-     * Updates the designated column with an <code>Object</code> value.
-     * The <code>updateXXX</code> methods are used to update column values in the
-     * current row or the insert row.  The <code>updateXXX</code> methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnIndex the first column is 1, the second is 2, and so on
-     * @param x the new column value
-     * @param scale for <code>java.sql.Types.DECIMAl</code>
-     *  or <code>java.sql.Types.NUMERIC</code> types,
-     *  this is the number of digits after the decimal point.  For all other
-     *  types this value will be ignored.
-     * @throws SQLException if a database access error occurs
-     *            or this rowset does not currently have a valid connection,
-     *            prepared statement, and result set
-     *
-     */
-    public void updateObject(int columnIndex, Object x, int scale) throws SQLException {
-        checkState();
-
-        // To check the type and concurrency of the ResultSet
-        // to verify whether updates are possible or not
-        checkTypeConcurrency();
-
-        rs.updateObject(columnIndex, x, scale);
-    }
-
-    /**
-     * Updates the designated column with an <code>Object</code> value.
-     * The <code>updateXXX</code> methods are used to update column values in the
-     * current row or the insert row.  The <code>updateXXX</code> methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnIndex the first column is 1, the second is 2, and so on
-     * @param x the new column value
-     * @throws SQLException if a database access error occurs
-     *            or this rowset does not currently have a valid connection,
-     *            prepared statement, and result set
-     *
-     */
-    public void updateObject(int columnIndex, Object x) throws SQLException {
-        checkState();
-
-        // To check the type and concurrency of the ResultSet
-        // to verify whether updates are possible or not
-        checkTypeConcurrency();
-
-        rs.updateObject(columnIndex, x);
-    }
-
-    /**
-     * Updates the designated column with a <code>null</code> value.
-     * The <code>updateXXX</code> methods are used to update column values in the
-     * current row or the insert row.  The <code>updateXXX</code> methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnName the name of the column
-     * @throws SQLException if a database access error occurs
-     *            or this rowset does not currently have a valid connection,
-     *            prepared statement, and result set
-     *
-     */
-    public void updateNull(String columnName) throws SQLException {
-        updateNull(findColumn(columnName));
-    }
-
-    /**
-     * Updates the designated column with a <code>boolean</code> value.
-     * The <code>updateXXX</code> methods are used to update column values in the
-     * current row or the insert row.  The <code>updateXXX</code> methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnName the name of the column
-     * @param x the new column value
-     * @throws SQLException if a database access error occurs
-     *
-     */
-    public void updateBoolean(String columnName, boolean x) throws SQLException {
-        updateBoolean(findColumn(columnName), x);
-    }
-
-    /**
-     * Updates the designated column with a <code>byte</code> value.
-     * The <code>updateXXX</code> methods are used to update column values in the
-     * current row or the insert row.  The <code>updateXXX</code> methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnName the name of the column
-     * @param x the new column value
-     * @throws SQLException if a database access error occurs
-     *
-     */
-    public void updateByte(String columnName, byte x) throws SQLException {
-        updateByte(findColumn(columnName), x);
-    }
-
-    /**
-     * Updates the designated column with a <code>short</code> value.
-     * The <code>updateXXX</code> methods are used to update column values in the
-     * current row or the insert row.  The <code>updateXXX</code> methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnName the name of the column
-     * @param x the new column value
-     * @throws SQLException if a database access error occurs
-     *
-     */
-    public void updateShort(String columnName, short x) throws SQLException {
-        updateShort(findColumn(columnName), x);
-    }
-
-    /**
-     * Updates the designated column with an <code>int</code> value.
-     * The <code>updateXXX</code> methods are used to update column values in the
-     * current row or the insert row.  The <code>updateXXX</code> methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnName the name of the column
-     * @param x the new column value
-     * @throws SQLException if a database access error occurs
-     *
-     */
-    public void updateInt(String columnName, int x) throws SQLException {
-        updateInt(findColumn(columnName), x);
-    }
-
-    /**
-     * Updates the designated column with a <code>long</code> value.
-     * The <code>updateXXX</code> methods are used to update column values in the
-     * current row or the insert row.  The <code>updateXXX</code> methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnName the name of the column
-     * @param x the new column value
-     * @throws SQLException if a database access error occurs
-     *
-     */
-    public void updateLong(String columnName, long x) throws SQLException {
-        updateLong(findColumn(columnName), x);
-    }
-
-    /**
-     * Updates the designated column with a <code>float </code> value.
-     * The <code>updateXXX</code> methods are used to update column values in the
-     * current row or the insert row.  The <code>updateXXX</code> methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnName the name of the column
-     * @param x the new column value
-     * @throws SQLException if a database access error occurs
-     *
-     */
-    public void updateFloat(String columnName, float x) throws SQLException {
-        updateFloat(findColumn(columnName), x);
-    }
-
-    /**
-     * Updates the designated column with a <code>double</code> value.
-     * The <code>updateXXX</code> methods are used to update column values in the
-     * current row or the insert row.  The <code>updateXXX</code> methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnName the name of the column
-     * @param x the new column value
-     * @throws SQLException if a database access error occurs
-     *
-     */
-    public void updateDouble(String columnName, double x) throws SQLException {
-        updateDouble(findColumn(columnName), x);
-    }
-
-    /**
-     * Updates the designated column with a <code>java.sql.BigDecimal</code>
-     * value.
-     * The <code>updateXXX</code> methods are used to update column values in the
-     * current row or the insert row.  The <code>updateXXX</code> methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnName the name of the column
-     * @param x the new column value
-     * @throws SQLException if a database access error occurs
-     *
-     */
-    public void updateBigDecimal(String columnName, BigDecimal x) throws SQLException {
-        updateBigDecimal(findColumn(columnName), x);
-    }
-
-    /**
-     * Updates the designated column with a <code>String</code> value.
-     * The <code>updateXXX</code> methods are used to update column values in the
-     * current row or the insert row.  The <code>updateXXX</code> methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnName the name of the column
-     * @param x the new column value
-     * @throws SQLException if a database access error occurs
-     *
-     */
-    public void updateString(String columnName, String x) throws SQLException {
-        updateString(findColumn(columnName), x);
-    }
-
-    /**
-     * Updates the designated column with a <code>boolean</code> value.
-     * The <code>updateXXX</code> methods are used to update column values in the
-     * current row or the insert row.  The <code>updateXXX</code> methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * JDBC 2.0
-     *
-     * Updates a column with a byte array value.
-     *
-     * The <code>updateXXX</code> methods are used to update column values in the
-     * current row, or the insert row.  The <code>updateXXX</code> methods do not
-     * update the underlying database; instead the <code>updateRow</code> or <code>insertRow</code>
-     * methods are called to update the database.
-     *
-     * @param columnName the name of the column
-     * @param x the new column value
-     * @throws SQLException if a database access error occurs
-     *
-     */
-    public void updateBytes(String columnName, byte x[]) throws SQLException {
-        updateBytes(findColumn(columnName), x);
-    }
-
-    /**
-     * Updates the designated column with a <code>java.sql.Date</code> value.
-     * The <code>updateXXX</code> methods are used to update column values in the
-     * current row or the insert row.  The <code>updateXXX</code> methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnName the name of the column
-     * @param x the new column value
-     * @throws SQLException if a database access error occurs
-     *
-     */
-    public void updateDate(String columnName, java.sql.Date x) throws SQLException {
-        updateDate(findColumn(columnName), x);
-    }
-
-    /**
-     * Updates the designated column with a <code>java.sql.Time</code> value.
-     * The <code>updateXXX</code> methods are used to update column values in the
-     * current row or the insert row.  The <code>updateXXX</code> methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnName the name of the column
-     * @param x the new column value
-     * @throws SQLException if a database access error occurs
-     *
-     */
-    public void updateTime(String columnName, java.sql.Time x) throws SQLException {
-        updateTime(findColumn(columnName), x);
-    }
-
-    /**
-     * Updates the designated column with a <code>java.sql.Timestamp</code>
-     * value.
-     * The <code>updateXXX</code> methods are used to update column values in the
-     * current row or the insert row.  The <code>updateXXX</code> methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnName the name of the column
-     * @param x the new column value
-     * @throws SQLException if a database access error occurs
-     *
-     */
-    public void updateTimestamp(String columnName, java.sql.Timestamp x) throws SQLException {
-        updateTimestamp(findColumn(columnName), x);
-    }
-
-    /**
-     * Updates the designated column with an ascii stream value.
-     * The <code>updateXXX</code> methods are used to update column values in the
-     * current row or the insert row.  The <code>updateXXX</code> methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnName the name of the column
-     * @param x the new column value
-     * @param length the length of the stream
-     * @throws SQLException if a database access error occurs
-     *
-     */
-    public void updateAsciiStream(String columnName, java.io.InputStream x, int length) throws SQLException {
-        updateAsciiStream(findColumn(columnName), x, length);
-    }
-
-    /**
-     * Updates the designated column with a binary stream value.
-     * The <code>updateXXX</code> methods are used to update column values in the
-     * current row or the insert row.  The <code>updateXXX</code> methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnName the name of the column
-     * @param x the new column value
-     * @param length the length of the stream
-     * @throws SQLException if a database access error occurs
-     *
-     */
-    public void updateBinaryStream(String columnName, java.io.InputStream x, int length) throws SQLException {
-        updateBinaryStream(findColumn(columnName), x, length);
-    }
-
-    /**
-     * Updates the designated column with a character stream value.
-     * The <code>updateXXX</code> methods are used to update column values
-     * in the current row or the insert row.  The <code>updateXXX</code>
-     * methods do not update the underlying database; instead the
-     * <code>updateRow</code> or <code>insertRow</code> methods are called
-     * to update the database.
-     *
-     * @param columnName the name of the column
-     * @param reader the new column <code>Reader</code> stream value
-     * @param length the length of the stream
-     * @throws SQLException if a database access error occurs
-     *
-     */
-    public void updateCharacterStream(String columnName, java.io.Reader reader, int length) throws SQLException {
-        updateCharacterStream(findColumn(columnName), reader, length);
-    }
-
-    /**
-     * Updates the designated column with an <code>Object</code> value.
-     * The <code>updateXXX</code> methods are used to update column values in the
-     * current row or the insert row.  The <code>updateXXX</code> methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnName the name of the column
-     * @param x the new column value
-     * @param scale for <code>java.sql.Types.DECIMAL</code>
-     *  or <code>java.sql.Types.NUMERIC</code> types,
-     *  this is the number of digits after the decimal point.  For all other
-     *  types this value will be ignored.
-     * @throws SQLException if a database access error occurs
-     *
-     */
-    public void updateObject(String columnName, Object x, int scale) throws SQLException {
-        updateObject(findColumn(columnName), x, scale);
-    }
-
-    /**
-     * Updates the designated column with an <code>Object</code> value.
-     * The <code>updateXXX</code> methods are used to update column values in the
-     * current row or the insert row.  The <code>updateXXX</code> methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnName the name of the column
-     * @param x the new column value
-     * @throws SQLException if a database access error occurs
-     *
-     */
-    public void updateObject(String columnName, Object x) throws SQLException {
-        updateObject(findColumn(columnName), x);
-    }
-
-    /**
-     * Inserts the contents of the insert row into this
-     * <code>ResultSet</code> object and into the database
-     * and also notifies listeners that a row has changed.
-     * The cursor must be on the insert row when this method is called.
-     *
-     * @throws SQLException if (1) a database access error occurs,
-     *            (2) this method is called when the cursor is not
-     *             on the insert row, (3) not all non-nullable columns in
-     *             the insert row have been given a value, or (4) this
-     *             rowset does not currently have a valid connection,
-     *             prepared statement, and result set
-     */
-    public void insertRow() throws SQLException {
-        checkState();
-
-        rs.insertRow();
-        notifyRowChanged();
-    }
-
-    /**
-     * Updates the underlying database with the new contents of the
-     * current row of this rowset's <code>ResultSet</code> object
-     * and notifies listeners that a row has changed.
-     * This method cannot be called when the cursor is on the insert row.
-     *
-     * @throws SQLException if (1) a database access error occurs,
-     *            (2) this method is called when the cursor is
-     *             on the insert row, (3) the concurrency of the result
-     *             set is <code>ResultSet.CONCUR_READ_ONLY</code>, or
-     *             (4) this rowset does not currently have a valid connection,
-     *             prepared statement, and result set
-     */
-    public void updateRow() throws SQLException {
-        checkState();
-
-        rs.updateRow();
-        notifyRowChanged();
-    }
-
-    /**
-     * Deletes the current row from this rowset's <code>ResultSet</code> object
-     * and from the underlying database and also notifies listeners that a row
-     * has changed.  This method cannot be called when the cursor is on the insert
-     * row.
-     *
-     * @throws SQLException if a database access error occurs
-     * or if this method is called when the cursor is on the insert row
-     * @throws SQLException if (1) a database access error occurs,
-     *            (2) this method is called when the cursor is before the
-     *            first row, after the last row, or on the insert row,
-     *            (3) the concurrency of this rowset's result
-     *            set is <code>ResultSet.CONCUR_READ_ONLY</code>, or
-     *            (4) this rowset does not currently have a valid connection,
-     *            prepared statement, and result set
-     */
-    public void deleteRow() throws SQLException {
-        checkState();
-
-        rs.deleteRow();
-        notifyRowChanged();
-    }
-
-    /**
-     * Refreshes the current row of this rowset's <code>ResultSet</code>
-     * object with its most recent value in the database.  This method
-     * cannot be called when the cursor is on the insert row.
-     *
-     * <P>The <code>refreshRow</code> method provides a way for an
-     * application to explicitly tell the JDBC driver to refetch
-     * a row(s) from the database.  An application may want to call
-     * <code>refreshRow</code> when caching or prefetching is being
-     * done by the JDBC driver to fetch the latest value of a row
-     * from the database.  The JDBC driver may actually refresh multiple
-     * rows at once if the fetch size is greater than one.
-     *
-     * <P> All values are refetched subject to the transaction isolation
-     * level and cursor sensitivity.  If <code>refreshRow</code> is called after
-     * calling an <code>updateXXX</code> method, but before calling
-     * the method <code>updateRow</code>, then the
-     * updates made to the row are lost.  Calling the method
-     * <code>refreshRow</code> frequently will likely slow performance.
-     *
-     * @throws SQLException if (1) a database access error occurs,
-     *            (2) this method is called when the cursor is
-     *             on the insert row, or (3) this rowset does not
-     *             currently have a valid connection, prepared statement,
-     *             and result set
-     *
-     */
-    public void refreshRow() throws SQLException {
-        checkState();
-
-        rs.refreshRow();
-    }
-
-    /**
-     * Cancels the updates made to the current row in this
-     * <code>ResultSet</code> object and notifies listeners that a row
-     * has changed. This method may be called after calling an
-     * <code>updateXXX</code> method(s) and before calling
-     * the method <code>updateRow</code> to roll back
-     * the updates made to a row.  If no updates have been made or
-     * <code>updateRow</code> has already been called, this method has no
-     * effect.
-     *
-     * @throws SQLException if (1) a database access error occurs,
-     *            (2) this method is called when the cursor is
-     *             on the insert row, or (3) this rowset does not
-     *             currently have a valid connection, prepared statement,
-     *             and result set
-     */
-    public void cancelRowUpdates() throws SQLException {
-        checkState();
-
-        rs.cancelRowUpdates();
-
-        notifyRowChanged();
-    }
-
-    /**
-     * Moves the cursor to the insert row.  The current cursor position is
-     * remembered while the cursor is positioned on the insert row.
-     *
-     * The insert row is a special row associated with an updatable
-     * result set.  It is essentially a buffer where a new row may
-     * be constructed by calling the <code>updateXXX</code> methods prior to
-     * inserting the row into the result set.
-     *
-     * Only the <code>updateXXX</code>, <code>getXXX</code>,
-     * and <code>insertRow</code> methods may be
-     * called when the cursor is on the insert row.  All of the columns in
-     * a result set must be given a value each time this method is
-     * called before calling <code>insertRow</code>.
-     * An <code>updateXXX</code> method must be called before a
-     * <code>getXXX</code> method can be called on a column value.
-     *
-     * @throws SQLException if (1) a database access error occurs,
-     *            (2) this rowset's <code>ResultSet</code> object is
-     *             not updatable, or (3) this rowset does not
-     *             currently have a valid connection, prepared statement,
-     *             and result set
-     *
-     */
-    public void moveToInsertRow() throws SQLException {
-        checkState();
-
-        rs.moveToInsertRow();
-    }
-
-    /**
-     * Moves the cursor to the remembered cursor position, usually the
-     * current row.  This method has no effect if the cursor is not on
-     * the insert row.
-     *
-     * @throws SQLException if (1) a database access error occurs,
-     *            (2) this rowset's <code>ResultSet</code> object is
-     *             not updatable, or (3) this rowset does not
-     *             currently have a valid connection, prepared statement,
-     *             and result set
-     */
-    public void moveToCurrentRow() throws SQLException {
-        checkState();
-
-        rs.moveToCurrentRow();
-    }
-
-    /**
-     * Returns the <code>Statement</code> object that produced this
-     * <code>ResultSet</code> object.
-     * If the result set was generated some other way, such as by a
-     * <code>DatabaseMetaData</code> method, this method returns
-     * <code>null</code>.
-     *
-     * @return the <code>Statment</code> object that produced
-     * this rowset's <code>ResultSet</code> object or <code>null</code>
-     * if the result set was produced some other way
-     * @throws SQLException if a database access error occurs
-     */
-    public java.sql.Statement getStatement() throws SQLException {
-
-        if(rs != null)
-        {
-           return rs.getStatement();
-        } else {
-           return null;
-        }
-    }
-
-    /**
-     * Returns the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as an <code>Object</code>.
-     * This method uses the given <code>Map</code> object
-     * for the custom mapping of the
-     * SQL structured or distinct type that is being retrieved.
-     *
-     * @param i the first column is 1, the second is 2, and so on
-     * @param map a <code>java.util.Map</code> object that contains the mapping
-     * from SQL type names to classes in the Java programming language
-     * @return an <code>Object</code> in the Java programming language
-     * representing the SQL value
-     * @throws SQLException if (1) a database access error occurs
-     *            or (2) this rowset does not currently have a valid connection,
-     *            prepared statement, and result set
-     */
-    public Object getObject(int i, java.util.Map<String,Class<?>> map)
-        throws SQLException
-    {
-        checkState();
-
-        return rs.getObject(i, map);
-    }
-
-    /**
-     * Returns the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as a <code>Ref</code> object.
-     *
-     * @param i the first column is 1, the second is 2, and so on
-     * @return a <code>Ref</code> object representing an SQL <code>REF</code> value
-     * @throws SQLException if (1) a database access error occurs
-     *            or (2) this rowset does not currently have a valid connection,
-     *            prepared statement, and result set
-     */
-    public Ref getRef(int i) throws SQLException {
-        checkState();
-
-        return rs.getRef(i);
-    }
-
-
-    /**
-     * Returns the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as a <code>Blob</code> object.
-     *
-     * @param i the first column is 1, the second is 2, and so on
-     * @return a <code>Blob</code> object representing the SQL <code>BLOB</code>
-     *         value in the specified column
-     * @throws SQLException if (1) a database access error occurs
-     *            or (2) this rowset does not currently have a valid connection,
-     *            prepared statement, and result set
-     */
-    public Blob getBlob(int i) throws SQLException {
-        checkState();
-
-        return rs.getBlob(i);
-    }
-
-    /**
-     * Returns the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as a <code>Clob</code> object.
-     *
-     * @param i the first column is 1, the second is 2, and so on
-     * @return a <code>Clob</code> object representing the SQL <code>CLOB</code>
-     *         value in the specified column
-     * @throws SQLException if (1) a database access error occurs
-     *            or (2) this rowset does not currently have a valid connection,
-     *            prepared statement, and result set
-     */
-    public Clob getClob(int i) throws SQLException {
-        checkState();
-
-        return rs.getClob(i);
-    }
-
-    /**
-     * Returns the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as an <code>Array</code> object.
-     *
-     * @param i the first column is 1, the second is 2, and so on.
-     * @return an <code>Array</code> object representing the SQL <code>ARRAY</code>
-     *         value in the specified column
-     * @throws SQLException if (1) a database access error occurs
-     *            or (2) this rowset does not currently have a valid connection,
-     *            prepared statement, and result set
-     */
-    public Array getArray(int i) throws SQLException {
-        checkState();
-
-        return rs.getArray(i);
-    }
-
-    /**
-     * Returns the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as an <code>Object</code>.
-     * This method uses the specified <code>Map</code> object for
-     * custom mapping if appropriate.
-     *
-     * @param colName the name of the column from which to retrieve the value
-     * @param map a <code>java.util.Map</code> object that contains the mapping
-     * from SQL type names to classes in the Java programming language
-     * @return an <code>Object</code> representing the SQL
-     *         value in the specified column
-     * @throws SQLException if (1) a database access error occurs
-     *            or (2) this rowset does not currently have a valid connection,
-     *            prepared statement, and result set
-     */
-    public Object getObject(String colName, java.util.Map<String,Class<?>> map)
-        throws SQLException
-    {
-        return getObject(findColumn(colName), map);
-    }
-
-    /**
-     * Returns the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as a <code>Ref</code> object.
-     *
-     * @param colName the column name
-     * @return a <code>Ref</code> object representing the SQL <code>REF</code> value in
-     *         the specified column
-     * @throws SQLException if (1) a database access error occurs
-     *            or (2) this rowset does not currently have a valid connection,
-     *            prepared statement, and result set
-     */
-    public Ref getRef(String colName) throws SQLException {
-        return getRef(findColumn(colName));
-    }
-
-    /**
-     * Returns the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as a <code>Blob</code> object.
-     *
-     * @param colName the name of the column from which to retrieve the value
-     * @return a <code>Blob</code> object representing the SQL <code>BLOB</code>
-     *         value in the specified column
-     * @throws SQLException if (1) a database access error occurs
-     *            or (2) this rowset does not currently have a valid connection,
-     *            prepared statement, and result set
-     */
-    public Blob getBlob(String colName) throws SQLException {
-        return getBlob(findColumn(colName));
-    }
-
-    /**
-     * Returns the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as a <code>Clob</code> object.
-     *
-     * @param colName the name of the column from which to retrieve the value
-     * @return a <code>Clob</code> object representing the SQL <code>CLOB</code>
-     *         value in the specified column
-     * @throws SQLException if (1) a database access error occurs
-     *            or (2) this rowset does not currently have a valid connection,
-     *            prepared statement, and result set
-     */
-    public Clob getClob(String colName) throws SQLException {
-        return getClob(findColumn(colName));
-    }
-
-    /**
-     * Returns the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as an <code>Array</code> object.
-     *
-     * @param colName the name of the column from which to retrieve the value
-     * @return an <code>Array</code> object representing the SQL <code>ARRAY</code>
-     *         value in the specified column
-     * @throws SQLException if (1) a database access error occurs
-     *            or (2) this rowset does not currently have a valid connection,
-     *            prepared statement, and result set
-     */
-    public Array getArray(String colName) throws SQLException {
-        return getArray(findColumn(colName));
-    }
-
-    /**
-     * Returns the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as a <code>java.sql.Date</code>
-     * object. This method uses the given calendar to construct an appropriate
-     * millisecond value for the date if the underlying database does not store
-     * timezone information.
-     *
-     * @param columnIndex the first column is 1, the second is 2, and so on
-     * @param cal the <code>java.util.Calendar</code> object
-     *        to use in constructing the date
-     * @return the column value as a <code>java.sql.Date</code> object;
-     *         if the value is SQL <code>NULL</code>,
-     *         the value returned is <code>null</code>
-     * @throws SQLException if (1) a database access error occurs
-     *            or (2) this rowset does not currently have a valid connection,
-     *            prepared statement, and result set
-     */
-    public java.sql.Date getDate(int columnIndex, Calendar cal) throws SQLException {
-        checkState();
-
-        return rs.getDate(columnIndex, cal);
-    }
-
-    /**
-     * Returns the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as a <code>java.sql.Date</code>
-     * object. This method uses the given calendar to construct an appropriate
-     * millisecond value for the date if the underlying database does not store
-     * timezone information.
-     *
-     * @param columnName the SQL name of the column from which to retrieve the value
-     * @param cal the <code>java.util.Calendar</code> object
-     *        to use in constructing the date
-     * @return the column value as a <code>java.sql.Date</code> object;
-     *         if the value is SQL <code>NULL</code>,
-     *         the value returned is <code>null</code>
-     * @throws SQLException if a database access error occurs
-     *            or this rowset does not currently have a valid connection,
-     *            prepared statement, and result set
-     *
-     */
-    public java.sql.Date getDate(String columnName, Calendar cal) throws SQLException {
-        return getDate(findColumn(columnName), cal);
-    }
-
-    /**
-     * Returns the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as a <code>java.sql.Time</code>
-     * object. This method uses the given calendar to construct an appropriate
-     * millisecond value for the date if the underlying database does not store
-     * timezone information.
-     *
-     * @param columnIndex the first column is 1, the second is 2, and so on
-     * @param cal the <code>java.util.Calendar</code> object
-     *        to use in constructing the time
-     * @return the column value as a <code>java.sql.Time</code> object;
-     *         if the value is SQL <code>NULL</code>,
-     *         the value returned is <code>null</code> in the Java programming language
-     * @throws SQLException if a database access error occurs
-     *            or this rowset does not currently have a valid connection,
-     *            prepared statement, and result set
-     */
-    public java.sql.Time getTime(int columnIndex, Calendar cal) throws SQLException {
-        checkState();
-
-        return rs.getTime(columnIndex, cal);
-    }
-
-    /**
-     * Returns the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as a <code>java.sql.Time</code>
-     * object. This method uses the given calendar to construct an appropriate
-     * millisecond value for the date if the underlying database does not store
-     * timezone information.
-     *
-     * @param columnName the SQL name of the column
-     * @param cal the <code>java.util.Calendar</code> object
-     *        to use in constructing the time
-     * @return the column value as a <code>java.sql.Time</code> object;
-     *         if the value is SQL <code>NULL</code>,
-     *         the value returned is <code>null</code> in the Java programming language
-     * @throws SQLException if a database access error occurs
-     *            or this rowset does not currently have a valid connection,
-     *            prepared statement, and result set
-     */
-    public java.sql.Time getTime(String columnName, Calendar cal) throws SQLException {
-        return getTime(findColumn(columnName), cal);
-    }
-
-    /**
-     * Returns the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as a
-     * <code>java.sql.Timestamp</code> object.
-     * This method uses the given calendar to construct an appropriate millisecond
-     * value for the timestamp if the underlying database does not store
-     * timezone information.
-     *
-     * @param columnIndex the first column is 1, the second is 2, and so on
-     * @param cal the <code>java.util.Calendar</code> object
-     *        to use in constructing the timestamp
-     * @return the column value as a <code>java.sql.Timestamp</code> object;
-     *         if the value is SQL <code>NULL</code>,
-     *         the value returned is <code>null</code>
-     * @throws SQLException if a database access error occurs
-     *            or this rowset does not currently have a valid connection,
-     *            prepared statement, and result set
-     */
-    public java.sql.Timestamp getTimestamp(int columnIndex, Calendar cal) throws SQLException {
-        checkState();
-
-        return rs.getTimestamp(columnIndex, cal);
-    }
-
-    /**
-     * Returns the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as a
-     * <code>java.sql.Timestamp</code> object.
-     * This method uses the given calendar to construct an appropriate millisecond
-     * value for the timestamp if the underlying database does not store
-     * timezone information.
-     *
-     * @param columnName the SQL name of the column
-     * @param cal the <code>java.util.Calendar</code> object
-     *        to use in constructing the timestamp
-     * @return the column value as a <code>java.sql.Timestamp</code> object;
-     *         if the value is SQL <code>NULL</code>,
-     *         the value returned is <code>null</code>
-     * @throws SQLException if a database access error occurs
-     *            or this rowset does not currently have a valid connection,
-     *            prepared statement, and result set
-     */
-    public java.sql.Timestamp getTimestamp(String columnName, Calendar cal) throws SQLException {
-        return getTimestamp(findColumn(columnName), cal);
-    }
-
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>JdbcRowSetImpl</code> object with the given
-     * <code>double</code> value.
-     *
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param ref the new <code>Ref</code> column value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateRef(int columnIndex, java.sql.Ref ref)
-        throws SQLException {
-        checkState();
-        rs.updateRef(columnIndex, ref);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>JdbcRowSetImpl</code> object with the given
-     * <code>double</code> value.
-     *
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param ref the new column value
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateRef(String columnName, java.sql.Ref ref)
-        throws SQLException {
-        updateRef(findColumn(columnName), ref);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>JdbcRowSetImpl</code> object with the given
-     * <code>double</code> value.
-     *
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param c the new column <code>Clob</code> value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateClob(int columnIndex, Clob c) throws SQLException {
-        checkState();
-        rs.updateClob(columnIndex, c);
-    }
-
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>JdbcRowSetImpl</code> object with the given
-     * <code>double</code> value.
-     *
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param c the new column <code>Clob</code> value
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateClob(String columnName, Clob c) throws SQLException {
-        updateClob(findColumn(columnName), c);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>JdbcRowSetImpl</code> object with the given
-     * <code>java.sql.Blob</code> value.
-     *
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param b the new column <code>Blob</code> value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateBlob(int columnIndex, Blob b) throws SQLException {
-        checkState();
-        rs.updateBlob(columnIndex, b);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>JdbcRowSetImpl</code> object with the given
-     * <code>java.sql.Blob </code> value.
-     *
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param b the new column <code>Blob</code> value
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateBlob(String columnName, Blob b) throws SQLException {
-        updateBlob(findColumn(columnName), b);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>JdbcRowSetImpl</code> object with the given
-     * <code>java.sql.Array</code> values.
-     *
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param a the new column <code>Array</code> value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateArray(int columnIndex, Array a) throws SQLException {
-        checkState();
-        rs.updateArray(columnIndex, a);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>JdbcRowSetImpl</code> object with the given
-     * <code>java.sql.Array</code> value.
-     *
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param a the new column <code>Array</code> value
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateArray(String columnName, Array a) throws SQLException {
-        updateArray(findColumn(columnName), a);
-    }
-
-    /**
-     * Provide interface coverage for getURL(int) in ResultSet->RowSet
-     */
-    public java.net.URL getURL(int columnIndex) throws SQLException {
-        checkState();
-        return rs.getURL(columnIndex);
-    }
-
-    /**
-     * Provide interface coverage for getURL(String) in ResultSet->RowSet
-     */
-    public java.net.URL getURL(String columnName) throws SQLException {
-        return getURL(findColumn(columnName));
-    }
-
-    /**
-     * Return the RowSetWarning object for the current row of a
-     * <code>JdbcRowSetImpl</code>
-     */
-    public RowSetWarning getRowSetWarnings() throws SQLException {
-       return null;
-    }
-    /**
-     * Unsets the designated parameter to the given int array.
-     * This was set using <code>setMatchColumn</code>
-     * as the column which will form the basis of the join.
-     * <P>
-     * The parameter value unset by this method should be same
-     * as was set.
-     *
-     * @param columnIdxes the index into this rowset
-     *        object's internal representation of parameter values
-     * @throws SQLException if an error occurs or the
-     *  parameter index is out of bounds or if the columnIdx is
-     *  not the same as set using <code>setMatchColumn(int [])</code>
-     */
-    public void unsetMatchColumn(int[] columnIdxes) throws SQLException {
-
-         int i_val;
-         for( int j= 0 ;j < columnIdxes.length; j++) {
-            i_val = (Integer.parseInt(iMatchColumns.get(j).toString()));
-            if(columnIdxes[j] != i_val) {
-               throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.matchcols").toString());
-            }
-         }
-
-         for( int i = 0;i < columnIdxes.length ;i++) {
-            iMatchColumns.set(i,Integer.valueOf(-1));
-         }
-    }
-
-   /**
-     * Unsets the designated parameter to the given String array.
-     * This was set using <code>setMatchColumn</code>
-     * as the column which will form the basis of the join.
-     * <P>
-     * The parameter value unset by this method should be same
-     * as was set.
-     *
-     * @param columnIdxes the index into this rowset
-     *        object's internal representation of parameter values
-     * @throws SQLException if an error occurs or the
-     *  parameter index is out of bounds or if the columnName is
-     *  not the same as set using <code>setMatchColumn(String [])</code>
-     */
-    public void unsetMatchColumn(String[] columnIdxes) throws SQLException {
-
-        for(int j = 0 ;j < columnIdxes.length; j++) {
-           if( !columnIdxes[j].equals(strMatchColumns.get(j)) ){
-              throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.matchcols").toString());
-           }
-        }
-
-        for(int i = 0 ; i < columnIdxes.length; i++) {
-           strMatchColumns.set(i,null);
-        }
-    }
-
-    /**
-     * Retrieves the column name as <code>String</code> array
-     * that was set using <code>setMatchColumn(String [])</code>
-     * for this rowset.
-     *
-     * @return a <code>String</code> array object that contains the column names
-     *         for the rowset which has this the match columns
-     *
-     * @throws SQLException if an error occurs or column name is not set
-     */
-    public String[] getMatchColumnNames() throws SQLException {
-
-        String []str_temp = new String[strMatchColumns.size()];
-
-        if( strMatchColumns.get(0) == null) {
-           throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.setmatchcols").toString());
-        }
-
-        strMatchColumns.copyInto(str_temp);
-        return str_temp;
-    }
-
-    /**
-     * Retrieves the column id as <code>int</code> array that was set using
-     * <code>setMatchColumn(int [])</code> for this rowset.
-     *
-     * @return a <code>int</code> array object that contains the column ids
-     *         for the rowset which has this as the match columns.
-     *
-     * @throws SQLException if an error occurs or column index is not set
-     */
-    public int[] getMatchColumnIndexes() throws SQLException {
-
-        Integer []int_temp = new Integer[iMatchColumns.size()];
-        int [] i_temp = new int[iMatchColumns.size()];
-        int i_val;
-
-        i_val = ((Integer)iMatchColumns.get(0)).intValue();
-
-        if( i_val == -1 ) {
-           throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.setmatchcols").toString());
-        }
-
-
-        iMatchColumns.copyInto(int_temp);
-
-        for(int i = 0; i < int_temp.length; i++) {
-           i_temp[i] = (int_temp[i]).intValue();
-        }
-
-        return i_temp;
-    }
-
-    /**
-     * Sets the designated parameter to the given int array.
-     * This forms the basis of the join for the
-     * <code>JoinRowSet</code> as the column which will form the basis of the
-     * join.
-     * <P>
-     * The parameter value set by this method is stored internally and
-     * will be supplied as the appropriate parameter in this rowset's
-     * command when the method <code>getMatchColumnIndexes</code> is called.
-     *
-     * @param columnIdxes the indexes into this rowset
-     *        object's internal representation of parameter values; the
-     *        first parameter is 0, the second is 1, and so on; must be
-     *        <code>0</code> or greater
-     * @throws SQLException if an error occurs or the
-     *                         parameter index is out of bounds
-     */
-    public void setMatchColumn(int[] columnIdxes) throws SQLException {
-
-        for(int j = 0 ; j < columnIdxes.length; j++) {
-           if( columnIdxes[j] < 0 ) {
-              throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.matchcols1").toString());
-           }
-        }
-        for(int i = 0 ;i < columnIdxes.length; i++) {
-           iMatchColumns.add(i,Integer.valueOf(columnIdxes[i]));
-        }
-    }
-
-    /**
-     * Sets the designated parameter to the given String array.
-     *  This forms the basis of the join for the
-     * <code>JoinRowSet</code> as the column which will form the basis of the
-     * join.
-     * <P>
-     * The parameter value set by this method is stored internally and
-     * will be supplied as the appropriate parameter in this rowset's
-     * command when the method <code>getMatchColumn</code> is called.
-     *
-     * @param columnNames the name of the column into this rowset
-     *        object's internal representation of parameter values
-     * @throws SQLException if an error occurs or the
-     *  parameter index is out of bounds
-     */
-    public void setMatchColumn(String[] columnNames) throws SQLException {
-
-        for(int j = 0; j < columnNames.length; j++) {
-           if( columnNames[j] == null || columnNames[j].equals("")) {
-              throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.matchcols2").toString());
-           }
-        }
-        for( int i = 0; i < columnNames.length; i++) {
-           strMatchColumns.add(i,columnNames[i]);
-        }
-    }
-
-
-        /**
-     * Sets the designated parameter to the given <code>int</code>
-     * object.  This forms the basis of the join for the
-     * <code>JoinRowSet</code> as the column which will form the basis of the
-     * join.
-     * <P>
-     * The parameter value set by this method is stored internally and
-     * will be supplied as the appropriate parameter in this rowset's
-     * command when the method <code>getMatchColumn</code> is called.
-     *
-     * @param columnIdx the index into this rowset
-     *        object's internal representation of parameter values; the
-     *        first parameter is 0, the second is 1, and so on; must be
-     *        <code>0</code> or greater
-     * @throws SQLException if an error occurs or the
-     *                         parameter index is out of bounds
-     */
-    public void setMatchColumn(int columnIdx) throws SQLException {
-        // validate, if col is ok to be set
-        if(columnIdx < 0) {
-            throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.matchcols1").toString());
-        } else {
-            // set iMatchColumn
-            iMatchColumns.set(0, Integer.valueOf(columnIdx));
-            //strMatchColumn = null;
-        }
-    }
-
-    /**
-     * Sets the designated parameter to the given <code>String</code>
-     * object.  This forms the basis of the join for the
-     * <code>JoinRowSet</code> as the column which will form the basis of the
-     * join.
-     * <P>
-     * The parameter value set by this method is stored internally and
-     * will be supplied as the appropriate parameter in this rowset's
-     * command when the method <code>getMatchColumn</code> is called.
-     *
-     * @param columnName the name of the column into this rowset
-     *        object's internal representation of parameter values
-     * @throws SQLException if an error occurs or the
-     *  parameter index is out of bounds
-     */
-    public void setMatchColumn(String columnName) throws SQLException {
-        // validate, if col is ok to be set
-        if(columnName == null || (columnName= columnName.trim()).equals("")) {
-            throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.matchcols2").toString());
-        } else {
-            // set strMatchColumn
-            strMatchColumns.set(0, columnName);
-            //iMatchColumn = -1;
-        }
-    }
-
-    /**
-     * Unsets the designated parameter to the given <code>int</code>
-     * object.  This was set using <code>setMatchColumn</code>
-     * as the column which will form the basis of the join.
-     * <P>
-     * The parameter value unset by this method should be same
-     * as was set.
-     *
-     * @param columnIdx the index into this rowset
-     *        object's internal representation of parameter values
-     * @throws SQLException if an error occurs or the
-     *  parameter index is out of bounds or if the columnIdx is
-     *  not the same as set using <code>setMatchColumn(int)</code>
-     */
-    public void unsetMatchColumn(int columnIdx) throws SQLException {
-        // check if we are unsetting the SAME column
-        if(! iMatchColumns.get(0).equals(Integer.valueOf(columnIdx) )  ) {
-            throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.unsetmatch").toString());
-        } else if(strMatchColumns.get(0) != null) {
-            throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.usecolname").toString());
-        } else {
-                // that is, we are unsetting it.
-               iMatchColumns.set(0, Integer.valueOf(-1));
-        }
-    }
-
-    /**
-     * Unsets the designated parameter to the given <code>String</code>
-     * object.  This was set using <code>setMatchColumn</code>
-     * as the column which will form the basis of the join.
-     * <P>
-     * The parameter value unset by this method should be same
-     * as was set.
-     *
-     * @param columnName the index into this rowset
-     *        object's internal representation of parameter values
-     * @throws SQLException if an error occurs or the
-     *  parameter index is out of bounds or if the columnName is
-     *  not the same as set using <code>setMatchColumn(String)</code>
-     *
-     */
-    public void unsetMatchColumn(String columnName) throws SQLException {
-        // check if we are unsetting the same column
-        columnName = columnName.trim();
-
-        if(!((strMatchColumns.get(0)).equals(columnName))) {
-            throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.unsetmatch").toString());
-        } else if( ((Integer)(iMatchColumns.get(0))).intValue() > 0) {
-            throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.usecolid").toString());
-        } else {
-            strMatchColumns.set(0, null);   // that is, we are unsetting it.
-        }
-    }
-
-    /**
-     * Retrieves the <code>DatabaseMetaData</code> associated with
-     * the connection handle associated this this
-     * <code>JdbcRowSet</code> object.
-     *
-     * @return the <code>DatabaseMetadata</code> associated
-     *  with the rowset's connection.
-     * @throws SQLException if a database access error occurs
-     */
-    public DatabaseMetaData getDatabaseMetaData() throws SQLException {
-        Connection con = connect();
-        return con.getMetaData();
-    }
-
-    /**
-     * Retrieves the <code>ParameterMetaData</code> associated with
-     * the connection handle associated this this
-     * <code>JdbcRowSet</code> object.
-     *
-     * @return the <code>ParameterMetadata</code> associated
-     *  with the rowset's connection.
-     * @throws SQLException if a database access error occurs
-     */
-    public ParameterMetaData getParameterMetaData() throws SQLException {
-        prepare();
-        return (ps.getParameterMetaData());
-    }
-
-    /**
-     * Commits all updates in this <code>JdbcRowSet</code> object by
-     * wrapping the internal <code>Connection</code> object and calling
-     * its <code>commit</code> method.
-     * This method sets this <code>JdbcRowSet</code> object's private field
-     * <code>rs</code> to <code>null</code> after saving its value to another
-     * object, but only if the <code>ResultSet</code>
-     * constant <code>HOLD_CURSORS_OVER_COMMIT</code> has not been set.
-     * (The field <code>rs</code> is this <code>JdbcRowSet</code> object's
-     * <code>ResultSet</code> object.)
-     *
-     * @throws SQLException if autoCommit is set to true or if a database
-     * access error occurs
-     */
-    public void commit() throws SQLException {
-      conn.commit();
-
-      // Checking the holadbility value and making the result set handle null
-      // Added as per Rave requirements
-
-      if( conn.getHoldability() != HOLD_CURSORS_OVER_COMMIT) {
-         ResultSet oldVal = rs;
-         rs = null;
-         // propertyChangeSupport.firePropertyChange("ResultSet",oldVal,rs);
-      }
-    }
-
-    /**
-     * Sets auto-commit on the internal <code>Connection</code> object with this
-     * <code>JdbcRowSet</code>
-     *
-     * @throws SQLException if a database access error occurs
-     */
-    public void setAutoCommit(boolean autoCommit) throws SQLException {
-        // The connection object should be there
-        // in order to commit the connection handle on or off.
-
-        if(conn != null) {
-           conn.setAutoCommit(autoCommit);
-        } else {
-           // Coming here means the connection object is null.
-           // So generate a connection handle internally, since
-           // a JdbcRowSet is always connected to a db, it is fine
-           // to get a handle to the connection.
-
-           // Get hold of a connection handle
-           // and change the autcommit as passesd.
-           conn = connect();
-
-           // After setting the below the conn.getAutoCommit()
-           // should return the same value.
-           conn.setAutoCommit(autoCommit);
-
-        }
-    }
-
-    /**
-     * Returns the auto-commit status with this <code>JdbcRowSet</code>.
-     *
-     * @return true if auto commit is true; false otherwise
-     * @throws SQLException if a database access error occurs
-     */
-    public boolean getAutoCommit() throws SQLException {
-        return conn.getAutoCommit();
-    }
-
-    /**
-     * Rolls back all the updates in this <code>JdbcRowSet</code> object by
-     * wrapping the internal <code>Connection</code> object and calling its
-     * <code>rollback</code> method.
-     * This method sets this <code>JdbcRowSet</code> object's private field
-     * <code>rs</code> to <code>null</code> after saving its value to another object.
-     * (The field <code>rs</code> is this <code>JdbcRowSet</code> object's
-     * internal <code>ResultSet</code> object.)
-     *
-     * @throws SQLException if autoCommit is set to true or a database
-     * access error occurs
-     */
-    public void rollback() throws SQLException {
-        conn.rollback();
-
-        // Makes the result ste handle null after rollback
-        // Added as per Rave requirements
-
-        ResultSet oldVal = rs;
-        rs = null;
-        // propertyChangeSupport.firePropertyChange("ResultSet", oldVal,rs);
-    }
-
-
-    /**
-     * Rollbacks all the updates in the <code>JdbcRowSet</code> back to the
-     * last <code>Savepoint</code> transaction marker. Wraps the internal
-     * <code>Connection</code> object and call it's rollback method
-     *
-     * @param s the <code>Savepoint</code> transaction marker to roll the
-     * transaction to.
-     * @throws SQLException if autoCommit is set to true; or ia a database
-     * access error occurs
-     */
-    public void rollback(Savepoint s) throws SQLException {
-        conn.rollback(s);
-    }
-
-    // Setting the ResultSet Type and Concurrency
-    protected void setParams() throws SQLException {
-        if(rs == null) {
-           setType(ResultSet.TYPE_SCROLL_INSENSITIVE);
-           setConcurrency(ResultSet.CONCUR_UPDATABLE);
-        }
-        else {
-            setType(rs.getType());
-            setConcurrency(rs.getConcurrency());
-        }
-    }
-
-
-    // Checking ResultSet Type and Concurrency
-    private void checkTypeConcurrency() throws SQLException {
-        if(rs.getType() == TYPE_FORWARD_ONLY ||
-           rs.getConcurrency() == CONCUR_READ_ONLY) {
-              throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.resnotupd").toString());
-         }
-    }
-
-     // Returns a Connection Handle
-    //  Added as per Rave requirements
-
-    /**
-     * Gets this <code>JdbcRowSet</code> object's Connection property
-     *
-     *
-     * @return the <code>Connection</code> object associated with this rowset;
-     */
-
-    protected Connection getConnection() {
-       return conn;
-    }
-
-    // Sets the connection handle with the parameter
-    // Added as per rave requirements
-
-    /**
-     * Sets this <code>JdbcRowSet</code> object's connection property
-     * to the given <code>Connection</code> object.
-     *
-     * @param connection the <code>Connection</code> object.
-     */
-
-    protected void setConnection(Connection connection) {
-       conn = connection;
-    }
-
-    // Returns a PreparedStatement Handle
-    // Added as per Rave requirements
-
-    /**
-     * Gets this <code>JdbcRowSet</code> object's PreparedStatement property
-     *
-     *
-     * @return the <code>PreparedStatement</code> object associated with this rowset;
-     */
-
-    protected PreparedStatement getPreparedStatement() {
-       return ps;
-    }
-
-    //Sets the prepared statement handle to the parameter
-    // Added as per Rave requirements
-
-    /**
-     * Sets this <code>JdbcRowSet</code> object's preparedtsatement property
-     * to the given <code>PreparedStatemennt</code> object.
-     *
-     * @param preparedStatement the <code>PreparedStatement</code> object
-     *
-     */
-    protected void setPreparedStatement(PreparedStatement preparedStatement) {
-       ps = preparedStatement;
-    }
-
-    // Returns a ResultSet handle
-    // Added as per Rave requirements
-
-    /**
-     * Gets this <code>JdbcRowSet</code> object's ResultSet property
-     *
-     *
-     * @return the <code>ResultSet</code> object associated with this rowset;
-     */
-
-    protected ResultSet getResultSet() throws SQLException {
-
-       checkState();
-
-       return rs;
-    }
-
-    // Sets the result set handle to the parameter
-    // Added as per Rave requirements
-
-    /**
-     * Sets this <code>JdbcRowSet</code> object's resultset property
-     * to the given <code>ResultSet</code> object.
-     *
-     * @param resultSet the <code>ResultSet</code> object
-     *
-     */
-    protected void setResultSet(ResultSet resultSet) {
-       rs = resultSet;
-    }
-
-
-    // Over riding the setCommand from BaseRowSet for
-    // firing the propertyChangeSupport Event for
-    // Rave requirements when this property's value
-    // changes.
-
-    /**
-     * Sets this <code>JdbcRowSet</code> object's <code>command</code> property to
-     * the given <code>String</code> object and clears the parameters, if any,
-     * that were set for the previous command. In addition,
-     * if the <code>command</code> property has previously been set to a
-     * non-null value and it is
-     * different from the <code>String</code> object supplied,
-     * this method sets this <code>JdbcRowSet</code> object's private fields
-     * <code>ps</code> and <code>rs</code> to <code>null</code>.
-     * (The field <code>ps</code> is its <code>PreparedStatement</code> object, and
-     * the field <code>rs</code> is its <code>ResultSet</code> object.)
-     * <P>
-     * The <code>command</code> property may not be needed if the <code>RowSet</code>
-     * object gets its data from a source that does not support commands,
-     * such as a spreadsheet or other tabular file.
-     * Thus, this property is optional and may be <code>null</code>.
-     *
-     * @param command a <code>String</code> object containing an SQL query
-     *            that will be set as this <code>RowSet</code> object's command
-     *            property; may be <code>null</code> but may not be an empty string
-     * @throws SQLException if an empty string is provided as the command value
-     * @see #getCommand
-     */
-    public void setCommand(String command) throws SQLException {
-       String oldVal;
-
-       if (getCommand() != null) {
-          if(!getCommand().equals(command)) {
-             oldVal = getCommand();
-             super.setCommand(command);
-             ps = null;
-             rs = null;
-             propertyChangeSupport.firePropertyChange("command", oldVal,command);
-          }
-       }
-       else {
-          super.setCommand(command);
-          propertyChangeSupport.firePropertyChange("command", null,command);
-       }
-    }
-
-    // Over riding the setDataSourceName from BaseRowSet for
-    // firing the propertyChangeSupport Event for
-    // Rave requirements when this property's values
-    // changes.
-
-    /**
-     * Sets the <code>dataSourceName</code> property for this <code>JdbcRowSet</code>
-     * object to the given logical name and sets this <code>JdbcRowSet</code> object's
-     * Url property to <code>null</code>. In addition, if the <code>dataSourceName</code>
-     * property has previously been set and is different from the one supplied,
-     * this method sets this <code>JdbcRowSet</code> object's private fields
-     * <code>ps</code>, <code>rs</code>, and <code>conn</code> to <code>null</code>.
-     * (The field <code>ps</code> is its <code>PreparedStatement</code> object,
-     * the field <code>rs</code> is its <code>ResultSet</code> object, and
-     * the field <code>conn</code> is its <code>Connection</code> object.)
-     * <P>
-     * The name supplied to this method must have been bound to a
-     * <code>DataSource</code> object in a JNDI naming service so that an
-     * application can do a lookup using that name to retrieve the
-     * <code>DataSource</code> object bound to it. The <code>DataSource</code>
-     * object can then be used to establish a connection to the data source it
-     * represents.
-     * <P>
-     * Users should set either the Url property or the dataSourceName property.
-     * If both properties are set, the driver will use the property set most recently.
-     *
-     * @param dsName a <code>String</code> object with the name that can be supplied
-     *        to a naming service based on JNDI technology to retrieve the
-     *        <code>DataSource</code> object that can be used to get a connection;
-     *        may be <code>null</code>
-     * @throws SQLException if there is a problem setting the
-     *          <code>dataSourceName</code> property
-     * @see #getDataSourceName
-     */
-    public void setDataSourceName(String dsName) throws SQLException{
-       String oldVal;
-
-       if(getDataSourceName() != null) {
-          if(!getDataSourceName().equals(dsName)) {
-             oldVal = getDataSourceName();
-             super.setDataSourceName(dsName);
-             conn = null;
-             ps = null;
-             rs = null;
-             propertyChangeSupport.firePropertyChange("dataSourceName",oldVal,dsName);
-          }
-       }
-       else {
-          super.setDataSourceName(dsName);
-          propertyChangeSupport.firePropertyChange("dataSourceName",null,dsName);
-       }
-    }
-
-    // Over riding the setUrl from BaseRowSet for
-    // firing the propertyChangeSupport Event for
-    // Rave requirements when this property's values
-    // changes.
-
-    /**
-     * Sets the Url property for this <code>JdbcRowSet</code> object
-     * to the given <code>String</code> object and sets the dataSource name
-     * property to <code>null</code>. In addition, if the Url property has
-     * previously been set to a non <code>null</code> value and its value
-     * is different from the value to be set,
-     * this method sets this <code>JdbcRowSet</code> object's private fields
-     * <code>ps</code>, <code>rs</code>, and <code>conn</code> to <code>null</code>.
-     * (The field <code>ps</code> is its <code>PreparedStatement</code> object,
-     * the field <code>rs</code> is its <code>ResultSet</code> object, and
-     * the field <code>conn</code> is its <code>Connection</code> object.)
-     * <P>
-     * The Url property is a JDBC URL that is used when
-     * the connection is created using a JDBC technology-enabled driver
-     * ("JDBC driver") and the <code>DriverManager</code>.
-     * The correct JDBC URL for the specific driver to be used can be found
-     * in the driver documentation.  Although there are guidelines for for how
-     * a JDBC URL is formed,
-     * a driver vendor can specify any <code>String</code> object except
-     * one with a length of <code>0</code> (an empty string).
-     * <P>
-     * Setting the Url property is optional if connections are established using
-     * a <code>DataSource</code> object instead of the <code>DriverManager</code>.
-     * The driver will use either the URL property or the
-     * dataSourceName property to create a connection, whichever was
-     * specified most recently. If an application uses a JDBC URL, it
-     * must load a JDBC driver that accepts the JDBC URL before it uses the
-     * <code>RowSet</code> object to connect to a database.  The <code>RowSet</code>
-     * object will use the URL internally to create a database connection in order
-     * to read or write data.
-     *
-     * @param url a <code>String</code> object that contains the JDBC URL
-     *            that will be used to establish the connection to a database for this
-     *            <code>RowSet</code> object; may be <code>null</code> but must not
-     *            be an empty string
-     * @throws SQLException if an error occurs setting the Url property or the
-     *         parameter supplied is a string with a length of <code>0</code> (an
-     *         empty string)
-     * @see #getUrl
-     */
-
-    public void setUrl(String url) throws SQLException {
-       String oldVal;
-
-       if(getUrl() != null) {
-          if(!getUrl().equals(url)) {
-             oldVal = getUrl();
-             super.setUrl(url);
-             conn = null;
-             ps = null;
-             rs = null;
-             propertyChangeSupport.firePropertyChange("url", oldVal, url);
-          }
-       }
-       else {
-          super.setUrl(url);
-          propertyChangeSupport.firePropertyChange("url", null, url);
-       }
-    }
-
-    // Over riding the setUsername from BaseRowSet for
-    // firing the propertyChangeSupport Event for
-    // Rave requirements when this property's values
-    // changes.
-
-     /**
-     * Sets the username property for this <code>JdbcRowSet</code> object
-     * to the given user name. Because it
-     * is not serialized, the username property is set at run time before
-     * calling the method <code>execute</code>. In addition,
-     * if the <code>username</code> property is already set with a
-     * non-null value and that value is different from the <code>String</code>
-     * object to be set,
-     * this method sets this <code>JdbcRowSet</code> object's private fields
-     * <code>ps</code>, <code>rs</code>, and <code>conn</code> to <code>null</code>.
-     * (The field <code>ps</code> is its <code>PreparedStatement</code> object,
-     * <code>rs</code> is its <code>ResultSet</code> object, and
-     * <code>conn</code> is its <code>Connection</code> object.)
-     * Setting these fields to <code>null</code> ensures that only current
-     * values will be used.
-     *
-     * @param uname the <code>String</code> object containing the user name that
-     *     is supplied to the data source to create a connection. It may be null.
-     * @see #getUsername
-     */
-    public void setUsername(String uname) {
-       String oldVal;
-
-       if( getUsername() != null) {
-          if(!getUsername().equals(uname)) {
-             oldVal = getUsername();
-             super.setUsername(uname);
-             conn = null;
-             ps = null;
-             rs = null;
-             propertyChangeSupport.firePropertyChange("username",oldVal,uname);
-          }
-       }
-       else{
-          super.setUsername(uname);
-          propertyChangeSupport.firePropertyChange("username",null,uname);
-       }
-    }
-
-    // Over riding the setPassword from BaseRowSet for
-    // firing the propertyChangeSupport Event for
-    // Rave requirements when this property's values
-    // changes.
-
-     /**
-     * Sets the password property for this <code>JdbcRowSet</code> object
-     * to the given <code>String</code> object. Because it
-     * is not serialized, the password property is set at run time before
-     * calling the method <code>execute</code>. Its default valus is
-     * <code>null</code>. In addition,
-     * if the <code>password</code> property is already set with a
-     * non-null value and that value is different from the one being set,
-     * this method sets this <code>JdbcRowSet</code> object's private fields
-     * <code>ps</code>, <code>rs</code>, and <code>conn</code> to <code>null</code>.
-     * (The field <code>ps</code> is its <code>PreparedStatement</code> object,
-     * <code>rs</code> is its <code>ResultSet</code> object, and
-     * <code>conn</code> is its <code>Connection</code> object.)
-     * Setting these fields to <code>null</code> ensures that only current
-     * values will be used.
-     *
-     * @param password the <code>String</code> object that represents the password
-     *     that must be supplied to the database to create a connection
-     */
-    public void setPassword(String password) {
-       String oldVal;
-
-       if ( getPassword() != null) {
-          if(!getPassword().equals(password)) {
-             oldVal = getPassword();
-             super.setPassword(password);
-             conn = null;
-             ps = null;
-             rs = null;
-             propertyChangeSupport.firePropertyChange("password",oldVal,password);
-          }
-       }
-       else{
-          super.setPassword(password);
-          propertyChangeSupport.firePropertyChange("password",null,password);
-       }
-    }
-
-    /**
-     * Sets the type for this <code>RowSet</code> object to the specified type.
-     * The default type is <code>ResultSet.TYPE_SCROLL_INSENSITIVE</code>.
-     *
-     * @param type one of the following constants:
-     *             <code>ResultSet.TYPE_FORWARD_ONLY</code>,
-     *             <code>ResultSet.TYPE_SCROLL_INSENSITIVE</code>, or
-     *             <code>ResultSet.TYPE_SCROLL_SENSITIVE</code>
-     * @throws SQLException if the parameter supplied is not one of the
-     *         following constants:
-     *          <code>ResultSet.TYPE_FORWARD_ONLY</code> or
-     *          <code>ResultSet.TYPE_SCROLL_INSENSITIVE</code>
-     *          <code>ResultSet.TYPE_SCROLL_SENSITIVE</code>
-     * @see #getConcurrency
-     * @see #getType
-     */
-
-    public void setType(int type) throws SQLException {
-
-       int oldVal;
-
-       try {
-          oldVal = getType();
-        }catch(SQLException ex) {
-           oldVal = 0;
-        }
-
-       if(oldVal != type) {
-           super.setType(type);
-           propertyChangeSupport.firePropertyChange("type",oldVal,type);
-       }
-
-    }
-
-    /**
-     * Sets the concurrency for this <code>RowSet</code> object to
-     * the specified concurrency. The default concurrency for any <code>RowSet</code>
-     * object (connected or disconnected) is <code>ResultSet.CONCUR_UPDATABLE</code>,
-     * but this method may be called at any time to change the concurrency.
-     *
-     * @param concur one of the following constants:
-     *                    <code>ResultSet.CONCUR_READ_ONLY</code> or
-     *                    <code>ResultSet.CONCUR_UPDATABLE</code>
-     * @throws SQLException if the parameter supplied is not one of the
-     *         following constants:
-     *          <code>ResultSet.CONCUR_UPDATABLE</code> or
-     *          <code>ResultSet.CONCUR_READ_ONLY</code>
-     * @see #getConcurrency
-     * @see #isReadOnly
-     */
-    public void setConcurrency(int concur) throws SQLException {
-
-       int oldVal;
-
-       try {
-          oldVal = getConcurrency();
-        }catch(NullPointerException ex) {
-           oldVal = 0;
-        }
-
-       if(oldVal != concur) {
-           super.setConcurrency(concur);
-           propertyChangeSupport.firePropertyChange("concurrency",oldVal,concur);
-       }
-
-    }
-
-    /**
-     * Sets the transaction isolation property for this JDBC <code>RowSet</code> object to the given
-     * constant. The DBMS will use this transaction isolation level for
-     * transactions if it can.
-     * <p>
-     * For <code>RowSet</code> implementations such as
-     * the <code>CachedRowSet</code> that operate in a disconnected environment,
-     * the <code>SyncProvider</code> object being used
-     * offers complementary locking and data integrity options. The
-     * options described below are pertinent only to connected <code>RowSet</code>
-     * objects (<code>JdbcRowSet</code> objects).
-     *
-     * @param transIso one of the following constants, listed in ascending order:
-     *              <code>Connection.TRANSACTION_NONE</code>,
-     *              <code>Connection.TRANSACTION_READ_UNCOMMITTED</code>,
-     *              <code>Connection.TRANSACTION_READ_COMMITTED</code>,
-     *              <code>Connection.TRANSACTION_REPEATABLE_READ</code>, or
-     *              <code>Connection.TRANSACTION_SERIALIZABLE</code>
-     * @throws SQLException if the given parameter is not one of the Connection
-     *          constants
-     * @see javax.sql.rowset.spi.SyncFactory
-     * @see javax.sql.rowset.spi.SyncProvider
-     * @see #getTransactionIsolation
-     */
-    public void setTransactionIsolation(int transIso) throws SQLException {
-
-       int oldVal;
-
-       try {
-          oldVal = getTransactionIsolation();
-        }catch(NullPointerException ex) {
-           oldVal = 0;
-        }
-
-       if(oldVal != transIso) {
-           super.setTransactionIsolation(transIso);
-           propertyChangeSupport.firePropertyChange("transactionIsolation",oldVal,transIso);
-       }
-
-    }
-
-    /**
-     * Sets the maximum number of rows that this <code>RowSet</code> object may contain to
-     * the given number. If this limit is exceeded, the excess rows are
-     * silently dropped.
-     *
-     * @param mRows an <code>int</code> indicating the current maximum number
-     *     of rows; zero means that there is no limit
-     * @throws SQLException if an error occurs internally setting the
-     *     maximum limit on the number of rows that a JDBC <code>RowSet</code> object
-     *     can contain; or if <i>max</i> is less than <code>0</code>; or
-     *     if <i>max</i> is less than the <code>fetchSize</code> of the
-     *     <code>RowSet</code>
-     */
-    public void setMaxRows(int mRows) throws SQLException {
-
-       int oldVal;
-
-       try {
-          oldVal = getMaxRows();
-        }catch(NullPointerException ex) {
-           oldVal = 0;
-        }
-
-       if(oldVal != mRows) {
-           super.setMaxRows(mRows);
-           propertyChangeSupport.firePropertyChange("maxRows",oldVal,mRows);
-       }
-
-    }
-
-    /**
-     * Retrieves the value of the designated <code>SQL XML</code> parameter as a
-     * <code>SQLXML</code> object in the Java programming language.
-     * @param columnIndex the first column is 1, the second is 2, ...
-     * @return a SQLXML object that maps an SQL XML value
-     * @throws SQLException if a database access error occurs
-     * @since 6.0
-     */
-    public SQLXML getSQLXML(int columnIndex) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-    }
-
-    /**
-     * Retrieves the value of the designated <code>SQL XML</code> parameter as a
-     * <code>SQLXML</code> object in the Java programming language.
-     * @param colName the name of the column from which to retrieve the value
-     * @return a SQLXML object that maps an SQL XML value
-     * @throws SQLException if a database access error occurs
-     */
-    public SQLXML getSQLXML(String colName) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row of this
-     * <code>ResultSet</code> object as a java.sql.RowId object in the Java
-     * programming language.
-     *
-     * @param columnIndex the first column is 1, the second 2, ...
-     * @return the column value if the value is a SQL <code>NULL</code> the
-     *     value returned is <code>null</code>
-     * @throws SQLException if a database access error occurs
-     * @since 6.0
-     */
-    public RowId getRowId(int columnIndex) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row of this
-     * <code>ResultSet</code> object as a java.sql.RowId object in the Java
-     * programming language.
-     *
-     * @param columnName the name of the column
-     * @return the column value if the value is a SQL <code>NULL</code> the
-     *     value returned is <code>null</code>
-     * @throws SQLException if a database access error occurs
-     * @since 6.0
-     */
-    public RowId getRowId(String columnName) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-    }
-
-    /**
-     * Updates the designated column with a <code>RowId</code> value. The updater
-     * methods are used to update column values in the current row or the insert
-     * row. The updater methods do not update the underlying database; instead
-     * the <code>updateRow<code> or <code>insertRow</code> methods are called
-     * to update the database.
-     *
-     * @param columnIndex the first column is 1, the second 2, ...
-     * @param x the column value
-     * @throws SQLException if a database access occurs
-     * @since 6.0
-     */
-    public void updateRowId(int columnIndex, RowId x) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-    }
-
-    /**
-     * Updates the designated column with a <code>RowId</code> value. The updater
-     * methods are used to update column values in the current row or the insert
-     * row. The updater methods do not update the underlying database; instead
-     * the <code>updateRow<code> or <code>insertRow</code> methods are called
-     * to update the database.
-     *
-     * @param columnName the name of the column
-     * @param x the column value
-     * @throws SQLException if a database access occurs
-     * @since 6.0
-     */
-    public void updateRowId(String columnName, RowId x) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-    }
-
-    /**
-     * Retrieves the holdability of this ResultSet object
-     * @return  either ResultSet.HOLD_CURSORS_OVER_COMMIT or ResultSet.CLOSE_CURSORS_AT_COMMIT
-     * @throws SQLException if a database error occurs
-     * @since 6.0
-     */
-    public int getHoldability() throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-    }
-
-    /**
-     * Retrieves whether this ResultSet object has been closed. A ResultSet is closed if the
-     * method close has been called on it, or if it is automatically closed.
-     * @return true if this ResultSet object is closed; false if it is still open
-     * @throws SQLException if a database access error occurs
-     * @since 6.0
-     */
-    public boolean isClosed() throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-    }
-
-    /**
-     * This method is used for updating columns that support National Character sets.
-     * It can be used for updating NCHAR,NVARCHAR and LONGNVARCHAR columns.
-     * @param columnIndex the first column is 1, the second 2, ...
-     * @param nString the value for the column to be updated
-     * @throws SQLException if a database access error occurs
-     * @since 6.0
-     */
-    public void updateNString(int columnIndex, String nString) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-    }
-
-    /**
-     * This method is used for updating columns that support National Character sets.
-     * It can be used for updating NCHAR,NVARCHAR and LONGNVARCHAR columns.
-     * @param columnName name of the Column
-     * @param nString the value for the column to be updated
-     * @throws SQLException if a database access error occurs
-     * @since 6.0
-     */
-    public void updateNString(String columnName, String nString) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-    }
-
-
-    /*o
-     * This method is used for updating SQL <code>NCLOB</code>  type that maps
-     * to <code>java.sql.Types.NCLOB</code>
-     * @param columnIndex the first column is 1, the second 2, ...
-     * @param nClob the value for the column to be updated
-     * @throws SQLException if a database access error occurs
-     * @since 6.0
-     */
-    public void updateNClob(int columnIndex, NClob nClob) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-    }
-
-    /**
-     * This method is used for updating SQL <code>NCLOB</code>  type that maps
-     * to <code>java.sql.Types.NCLOB</code>
-     * @param columnName name of the column
-     * @param nClob the value for the column to be updated
-     * @throws SQLException if a database access error occurs
-     * @since 6.0
-     */
-    public void updateNClob(String columnName, NClob nClob) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>ResultSet</code> object as a <code>NClob</code> object
-     * in the Java programming language.
-     *
-     * @param i the first column is 1, the second is 2, ...
-     * @return a <code>NClob</code> object representing the SQL
-     *         <code>NCLOB</code> value in the specified column
-     * @exception SQLException if a database access error occurs
-     * @since 6.0
-     */
-    public NClob getNClob(int i) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-    }
-
-
-  /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>ResultSet</code> object as a <code>NClob</code> object
-     * in the Java programming language.
-     *
-     * @param colName the name of the column from which to retrieve the value
-     * @return a <code>NClob</code> object representing the SQL <code>NCLOB</code>
-     * value in the specified column
-     * @exception SQLException if a database access error occurs
-     * @since 6.0
-     */
-    public NClob getNClob(String colName) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-    }
-
-    public <T> T unwrap(java.lang.Class<T> iface) throws java.sql.SQLException{
-        return null;
-    }
-
-    public boolean isWrapperFor(Class<?> interfaces) throws SQLException {
-        return false;
-    }
-
-    /**
-      * Sets the designated parameter to the given <code>java.sql.SQLXML</code> object. The driver converts this to an
-      * SQL <code>XML</code> value when it sends it to the database.
-      * @param parameterIndex index of the first parameter is 1, the second is 2, ...
-      * @param xmlObject a <code>SQLXML</code> object that maps an SQL <code>XML</code> value
-      * @throws SQLException if a database access error occurs
-      * @since 1.6
-      */
-     public void setSQLXML(int parameterIndex, SQLXML xmlObject) throws SQLException {
-         throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-     }
-
-    /**
-     * Sets the designated parameter to the given <code>java.sql.SQLXML</code> object. The driver converts this to an
-     * <code>SQL XML</code> value when it sends it to the database.
-     * @param parameterName the name of the parameter
-     * @param xmlObject a <code>SQLXML</code> object that maps an <code>SQL XML</code> value
-     * @throws SQLException if a database access error occurs
-     * @since 1.6
-     */
-    public void setSQLXML(String parameterName, SQLXML xmlObject) throws SQLException {
-         throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-     }
-
-    /**
-     * Sets the designated parameter to the given <code>java.sql.RowId</code> object. The
-     * driver converts this to a SQL <code>ROWID</code> value when it sends it
-     * to the database
-     *
-     * @param parameterIndex the first parameter is 1, the second is 2, ...
-     * @param x the parameter value
-     * @throws SQLException if a database access error occurs
-     *
-     * @since 1.6
-     */
-    public void setRowId(int parameterIndex, RowId x) throws SQLException {
-         throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-     }
-
-    /**
-    * Sets the designated parameter to the given <code>java.sql.RowId</code> object. The
-    * driver converts this to a SQL <code>ROWID</code> when it sends it to the
-    * database.
-    *
-    * @param parameterName the name of the parameter
-    * @param x the parameter value
-    * @throws SQLException if a database access error occurs
-    * @since 1.6
-    */
-   public void setRowId(String parameterName, RowId x) throws SQLException {
-         throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-     }
-
-
-   /**
-     * Sets the designated paramter to the given <code>String</code> object.
-     * The driver converts this to a SQL <code>NCHAR</code> or
-     * <code>NVARCHAR</code> or <code>LONGNVARCHAR</code> value
-     * (depending on the argument's
-     * size relative to the driver's limits on <code>NVARCHAR</code> values)
-     * when it sends it to the database.
-     *
-     * @param parameterIndex of the first parameter is 1, the second is 2, ...
-     * @param value the parameter value
-     * @throws SQLException if the driver does not support national
-     *         character sets;  if the driver can detect that a data conversion
-     *  error could occur ; or if a database access error occurs
-     * @since 1.6
-     */
-     public void setNString(int parameterIndex, String value) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-     }
-
-
-   /**
-    * Sets the designated parameter in this <code>RowSet</code> object's command
-    * to a <code>Reader</code> object. The
-    * <code>Reader</code> reads the data till end-of-file is reached. The
-    * driver does the necessary conversion from Java character format to
-    * the national character set in the database.
-
-    * <P><B>Note:</B> This stream object can either be a standard
-    * Java stream object or your own subclass that implements the
-    * standard interface.
-    * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
-    * it might be more efficient to use a version of
-    * <code>setNCharacterStream</code> which takes a length parameter.
-    *
-    * @param parameterIndex of the first parameter is 1, the second is 2, ...
-    * @param value the parameter value
-    * @throws SQLException if the driver does not support national
-    *         character sets;  if the driver can detect that a data conversion
-    *  error could occur ; if a database access error occurs; or
-    * this method is called on a closed <code>PreparedStatement</code>
-    * @throws SQLFeatureNotSupportedException  if the JDBC driver does not support this method
-    * @since 1.6
-    */
-    public void setNCharacterStream(int parameterIndex, Reader value) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-    }
-
-  /**
-    * Sets the designated parameter to a <code>java.sql.NClob</code> object. The object
-    * implements the <code>java.sql.NClob</code> interface. This <code>NClob</code>
-    * object maps to a SQL <code>NCLOB</code>.
-    * @param parameterName the name of the column to be set
-    * @param value the parameter value
-    * @throws SQLException if the driver does not support national
-    *         character sets;  if the driver can detect that a data conversion
-    *  error could occur; or if a database access error occurs
-    * @since 1.6
-    */
-    public void setNClob(String parameterName, NClob value) throws SQLException {
-         throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-     }
-
-
-  /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>ResultSet</code> object as a
-     * <code>java.io.Reader</code> object.
-     * It is intended for use when
-     * accessing  <code>NCHAR</code>,<code>NVARCHAR</code>
-     * and <code>LONGNVARCHAR</code> columns.
-     *
-     * @return a <code>java.io.Reader</code> object that contains the column
-     * value; if the value is SQL <code>NULL</code>, the value returned is
-     * <code>null</code> in the Java programming language.
-     * @param columnIndex the first column is 1, the second is 2, ...
-     * @exception SQLException if a database access error occurs
-     * @since 1.6
-     */
-    public java.io.Reader getNCharacterStream(int columnIndex) throws SQLException {
-       throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-     }
-
-
-    /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>ResultSet</code> object as a
-     * <code>java.io.Reader</code> object.
-     * It is intended for use when
-     * accessing  <code>NCHAR</code>,<code>NVARCHAR</code>
-     * and <code>LONGNVARCHAR</code> columns.
-     *
-     * @param columnName the name of the column
-     * @return a <code>java.io.Reader</code> object that contains the column
-     * value; if the value is SQL <code>NULL</code>, the value returned is
-     * <code>null</code> in the Java programming language
-     * @exception SQLException if a database access error occurs
-     * @since 1.6
-     */
-    public java.io.Reader getNCharacterStream(String columnName) throws SQLException {
-       throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-     }
-
-    /**
-     * Updates the designated column with a <code>java.sql.SQLXML</code> value.
-     * The updater
-     * methods are used to update column values in the current row or the insert
-     * row. The updater methods do not update the underlying database; instead
-     * the <code>updateRow</code> or <code>insertRow</code> methods are called
-     * to update the database.
-     * @param columnIndex the first column is 1, the second 2, ...
-     * @param xmlObject the value for the column to be updated
-     * @throws SQLException if a database access error occurs
-     * @since 1.6
-     */
-    public void updateSQLXML(int columnIndex, SQLXML xmlObject) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-    }
-
-    /**
-     * Updates the designated column with a <code>java.sql.SQLXML</code> value.
-     * The updater
-     * methods are used to update column values in the current row or the insert
-     * row. The updater methods do not update the underlying database; instead
-     * the <code>updateRow</code> or <code>insertRow</code> methods are called
-     * to update the database.
-     *
-     * @param columnName the name of the column
-     * @param xmlObject the column value
-     * @throws SQLException if a database access occurs
-     * @since 1.6
-     */
-    public void updateSQLXML(String columnName, SQLXML xmlObject) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-    }
-
-     /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>ResultSet</code> object as
-     * a <code>String</code> in the Java programming language.
-     * It is intended for use when
-     * accessing  <code>NCHAR</code>,<code>NVARCHAR</code>
-     * and <code>LONGNVARCHAR</code> columns.
-     *
-     * @param columnIndex the first column is 1, the second is 2, ...
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     * value returned is <code>null</code>
-     * @exception SQLException if a database access error occurs
-     * @since 1.6
-     */
-    public String getNString(int columnIndex) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>ResultSet</code> object as
-     * a <code>String</code> in the Java programming language.
-     * It is intended for use when
-     * accessing  <code>NCHAR</code>,<code>NVARCHAR</code>
-     * and <code>LONGNVARCHAR</code> columns.
-     *
-     * @param columnName the SQL name of the column
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     * value returned is <code>null</code>
-     * @exception SQLException if a database access error occurs
-     * @since 1.6
-     */
-    public String getNString(String columnName) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-    }
-
-     /**
-       * Updates the designated column with a character stream value, which will
-       * have the specified number of bytes. The driver does the necessary conversion
-       * from Java character format to the national character set in the database.
-       * It is intended for use when updating NCHAR,NVARCHAR and LONGNVARCHAR columns.
-       * The updater methods are used to update column values in the current row or
-       * the insert row. The updater methods do not update the underlying database;
-       * instead the updateRow or insertRow methods are called to update the database.
-       *
-       * @param columnIndex - the first column is 1, the second is 2, ...
-       * @param x - the new column value
-       * @param length - the length of the stream
-       * @exception SQLException if a database access error occurs
-       * @since 1.6
-       */
-       public void updateNCharacterStream(int columnIndex,
-                            java.io.Reader x,
-                            long length)
-                            throws SQLException {
-          throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-       }
-
-     /**
-       * Updates the designated column with a character stream value, which will
-       * have the specified number of bytes. The driver does the necessary conversion
-       * from Java character format to the national character set in the database.
-       * It is intended for use when updating NCHAR,NVARCHAR and LONGNVARCHAR columns.
-       * The updater methods are used to update column values in the current row or
-       * the insert row. The updater methods do not update the underlying database;
-       * instead the updateRow or insertRow methods are called to update the database.
-       *
-       * @param columnName - name of the Column
-       * @param x - the new column value
-       * @param length - the length of the stream
-       * @exception SQLException if a database access error occurs
-       * @since 1.6
-       */
-       public void updateNCharacterStream(String columnName,
-                            java.io.Reader x,
-                            long length)
-                            throws SQLException {
-          throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-       }
-
-    /**
-     * Updates the designated column with a character stream value.   The
-     * driver does the necessary conversion from Java character format to
-     * the national character set in the database.
-     * It is intended for use when
-     * updating  <code>NCHAR</code>,<code>NVARCHAR</code>
-     * and <code>LONGNVARCHAR</code> columns.
-     *
-     * The updater methods are used to update column values in the
-     * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
-     * it might be more efficient to use a version of
-     * <code>updateNCharacterStream</code> which takes a length parameter.
-     *
-     * @param columnIndex the first column is 1, the second is 2, ...
-     * @param x the new column value
-     * @exception SQLException if a database access error occurs,
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code> or this method is called on a closed result set
-     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-     * this method
-     * @since 1.6
-     */
-    public void updateNCharacterStream(int columnIndex,
-                             java.io.Reader x) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-    }
-
-    /**
-     * Updates the designated column with a character stream value.  The
-     * driver does the necessary conversion from Java character format to
-     * the national character set in the database.
-     * It is intended for use when
-     * updating  <code>NCHAR</code>,<code>NVARCHAR</code>
-     * and <code>LONGNVARCHAR</code> columns.
-     *
-     * The updater methods are used to update column values in the
-     * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
-     * it might be more efficient to use a version of
-     * <code>updateNCharacterStream</code> which takes a length parameter.
-     *
-     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the la
-bel is the name of the column
-     * @param reader the <code>java.io.Reader</code> object containing
-     *        the new column value
-     * @exception SQLException if a database access error occurs,
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code> or this method is called on a closed result set
-      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-     * this method
-     * @since 1.6
-     */
-    public void updateNCharacterStream(String columnLabel,
-                             java.io.Reader reader) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-    }
-
-    /**
-     * Updates the designated column using the given input stream, which
-     * will have the specified number of bytes.
-     * When a very large ASCII value is input to a <code>LONGVARCHAR</code>
-     * parameter, it may be more practical to send it via a
-     * <code>java.io.InputStream</code>. Data will be read from the stream
-     * as needed until end-of-file is reached.  The JDBC driver will
-     * do any necessary conversion from ASCII to the database char format.
-     *
-     * <P><B>Note:</B> This stream object can either be a standard
-     * Java stream object or your own subclass that implements the
-     * standard interface.
-     * <p>
-     * The updater methods are used to update column values in the
-     * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnIndex the first column is 1, the second is 2, ...
-     * @param inputStream An object that contains the data to set the parameter
-     * value to.
-     * @param length the number of bytes in the parameter data.
-     * @exception SQLException if a database access error occurs,
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
-     * or this method is called on a closed result set
-     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-     * this method
-     * @since 1.6
-     */
-    public void updateBlob(int columnIndex, InputStream inputStream, long length) throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-    }
-
-    /**
-     * Updates the designated column using the given input stream, which
-     * will have the specified number of bytes.
-     * When a very large ASCII value is input to a <code>LONGVARCHAR</code>
-     * parameter, it may be more practical to send it via a
-     * <code>java.io.InputStream</code>. Data will be read from the stream
-     * as needed until end-of-file is reached.  The JDBC driver will
-     * do any necessary conversion from ASCII to the database char format.
-     *
-     * <P><B>Note:</B> This stream object can either be a standard
-     * Java stream object or your own subclass that implements the
-     * standard interface.
-     * <p>
-     * The updater methods are used to update column values in the
-     * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
-     * @param inputStream An object that contains the data to set the parameter
-     * value to.
-     * @param length the number of bytes in the parameter data.
-     * @exception SQLException if a database access error occurs,
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
-     * or this method is called on a closed result set
-     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-     * this method
-     * @since 1.6
-     */
-    public void updateBlob(String columnLabel, InputStream inputStream, long length) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-    }
-
-    /**
-     * Updates the designated column using the given input stream.
-     * When a very large ASCII value is input to a <code>LONGVARCHAR</code>
-     * parameter, it may be more practical to send it via a
-     * <code>java.io.InputStream</code>. Data will be read from the stream
-     * as needed until end-of-file is reached.  The JDBC driver will
-     * do any necessary conversion from ASCII to the database char format.
-     *
-     * <P><B>Note:</B> This stream object can either be a standard
-     * Java stream object or your own subclass that implements the
-     * standard interface.
-     *
-     *  <P><B>Note:</B> Consult your JDBC driver documentation to determine if
-     * it might be more efficient to use a version of
-     * <code>updateBlob</code> which takes a length parameter.
-     * <p>
-     * The updater methods are used to update column values in the
-     * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnIndex the first column is 1, the second is 2, ...
-     * @param inputStream An object that contains the data to set the parameter
-     * value to.
-     * @exception SQLException if a database access error occurs,
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
-     * or this method is called on a closed result set
-     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-     * this method
-     * @since 1.6
-     */
-    public void updateBlob(int columnIndex, InputStream inputStream) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-    }
-
-    /**
-     * Updates the designated column using the given input stream.
-     * When a very large ASCII value is input to a <code>LONGVARCHAR</code>
-     * parameter, it may be more practical to send it via a
-     * <code>java.io.InputStream</code>. Data will be read from the stream
-     * as needed until end-of-file is reached.  The JDBC driver will
-     * do any necessary conversion from ASCII to the database char format.
-     *
-     * <P><B>Note:</B> This stream object can either be a standard
-     * Java stream object or your own subclass that implements the
-     * standard interface.
-     *   <P><B>Note:</B> Consult your JDBC driver documentation to determine if
-     * it might be more efficient to use a version of
-     * <code>updateBlob</code> which takes a length parameter.
-     * <p>
-     * The updater methods are used to update column values in the
-     * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the la
-bel is the name of the column
-     * @param inputStream An object that contains the data to set the parameter
-     * value to.
-     * @exception SQLException if a database access error occurs,
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
-     * or this method is called on a closed result set
-     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-     * this method
-     * @since 1.6
-     */
-    public void updateBlob(String columnLabel, InputStream inputStream) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-    }
-
-    /**
-     * Updates the designated column using the given <code>Reader</code>
-     * object, which is the given number of characters long.
-     * When a very large UNICODE value is input to a <code>LONGVARCHAR</code>
-     * parameter, it may be more practical to send it via a
-     * <code>java.io.Reader</code> object. The data will be read from the stream
-     * as needed until end-of-file is reached.  The JDBC driver will
-     * do any necessary conversion from UNICODE to the database char format.
-     *
-     * <P><B>Note:</B> This stream object can either be a standard
-     * Java stream object or your own subclass that implements the
-     * standard interface.
-     * <p>
-     * The updater methods are used to update column values in the
-     * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnIndex the first column is 1, the second is 2, ...
-     * @param reader An object that contains the data to set the parameter value to.
-     * @param length the number of characters in the parameter data.
-     * @exception SQLException if a database access error occurs,
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
-     * or this method is called on a closed result set
-     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-     * this method
-     * @since 1.6
-     */
-    public void updateClob(int columnIndex,  Reader reader, long length) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-    }
-
-    /**
-     * Updates the designated column using the given <code>Reader</code>
-     * object, which is the given number of characters long.
-     * When a very large UNICODE value is input to a <code>LONGVARCHAR</code>
-     * parameter, it may be more practical to send it via a
-     * <code>java.io.Reader</code> object. The data will be read from the stream
-     * as needed until end-of-file is reached.  The JDBC driver will
-     * do any necessary conversion from UNICODE to the database char format.
-     *
-     * <P><B>Note:</B> This stream object can either be a standard
-     * Java stream object or your own subclass that implements the
-     * standard interface.
-     * <p>
-     * The updater methods are used to update column values in the
-     * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
-     * @param reader An object that contains the data to set the parameter value to.
-     * @param length the number of characters in the parameter data.
-     * @exception SQLException if a database access error occurs,
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
-     * or this method is called on a closed result set
-     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-     * this method
-     * @since 1.6
-     */
-    public void updateClob(String columnLabel,  Reader reader, long length) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-    }
-
-    /**
-     * Updates the designated column using the given <code>Reader</code>
-     * object.
-     * When a very large UNICODE value is input to a <code>LONGVARCHAR</code>
-     * parameter, it may be more practical to send it via a
-     * <code>java.io.Reader</code> object. The data will be read from the stream
-     * as needed until end-of-file is reached.  The JDBC driver will
-     * do any necessary conversion from UNICODE to the database char format.
-     *
-     * <P><B>Note:</B> This stream object can either be a standard
-     * Java stream object or your own subclass that implements the
-     * standard interface.
-     *   <P><B>Note:</B> Consult your JDBC driver documentation to determine if
-     * it might be more efficient to use a version of
-     * <code>updateClob</code> which takes a length parameter.
-     * <p>
-     * The updater methods are used to update column values in the
-     * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnIndex the first column is 1, the second is 2, ...
-     * @param reader An object that contains the data to set the parameter value to.
-     * @exception SQLException if a database access error occurs,
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
-     * or this method is called on a closed result set
-     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-     * this method
-     * @since 1.6
-     */
-    public void updateClob(int columnIndex,  Reader reader) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-    }
-
-    /**
-     * Updates the designated column using the given <code>Reader</code>
-     * object.
-     * When a very large UNICODE value is input to a <code>LONGVARCHAR</code>
-     * parameter, it may be more practical to send it via a
-     * <code>java.io.Reader</code> object. The data will be read from the stream
-     * as needed until end-of-file is reached.  The JDBC driver will
-     * do any necessary conversion from UNICODE to the database char format.
-     *
-     * <P><B>Note:</B> This stream object can either be a standard
-     * Java stream object or your own subclass that implements the
-     * standard interface.
-     *  <P><B>Note:</B> Consult your JDBC driver documentation to determine if
-     * it might be more efficient to use a version of
-     * <code>updateClob</code> which takes a length parameter.
-     * <p>
-     * The updater methods are used to update column values in the
-     * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the la
-bel is the name of the column
-     * @param reader An object that contains the data to set the parameter value to.
-     * @exception SQLException if a database access error occurs,
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
-     * or this method is called on a closed result set
-     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-     * this method
-     * @since 1.6
-     */
-    public void updateClob(String columnLabel,  Reader reader) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-    }
-
-   /**
-     * Updates the designated column using the given <code>Reader</code>
-     * object, which is the given number of characters long.
-     * When a very large UNICODE value is input to a <code>LONGVARCHAR</code>
-     * parameter, it may be more practical to send it via a
-     * <code>java.io.Reader</code> object. The data will be read from the stream
-     * as needed until end-of-file is reached.  The JDBC driver will
-     * do any necessary conversion from UNICODE to the database char format.
-     *
-     * <P><B>Note:</B> This stream object can either be a standard
-     * Java stream object or your own subclass that implements the
-     * standard interface.
-     * <p>
-     * The updater methods are used to update column values in the
-     * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnIndex the first column is 1, the second 2, ...
-     * @param reader An object that contains the data to set the parameter value to.
-     * @param length the number of characters in the parameter data.
-     * @throws SQLException if the driver does not support national
-     *         character sets;  if the driver can detect that a data conversion
-     *  error could occur; this method is called on a closed result set,
-     * if a database access error occurs or
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
-     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-     * this method
-     * @since 1.6
-     */
-    public void updateNClob(int columnIndex,  Reader reader, long length) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-    }
-
-    /**
-     * Updates the designated column using the given <code>Reader</code>
-     * object, which is the given number of characters long.
-     * When a very large UNICODE value is input to a <code>LONGVARCHAR</code>
-     * parameter, it may be more practical to send it via a
-     * <code>java.io.Reader</code> object. The data will be read from the stream
-     * as needed until end-of-file is reached.  The JDBC driver will
-     * do any necessary conversion from UNICODE to the database char format.
-     *
-     * <P><B>Note:</B> This stream object can either be a standard
-     * Java stream object or your own subclass that implements the
-     * standard interface.
-     * <p>
-     * The updater methods are used to update column values in the
-     * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
-     * @param reader An object that contains the data to set the parameter value to.
-     * @param length the number of characters in the parameter data.
-     * @throws SQLException if the driver does not support national
-     *         character sets;  if the driver can detect that a data conversion
-     *  error could occur; this method is called on a closed result set;
-     *  if a database access error occurs or
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
-     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-     * this method
-     * @since 1.6
-     */
-    public void updateNClob(String columnLabel,  Reader reader, long length) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-    }
-
-    /**
-     * Updates the designated column using the given <code>Reader</code>
-     * object.
-     * When a very large UNICODE value is input to a <code>LONGVARCHAR</code>
-     * parameter, it may be more practical to send it via a
-     * <code>java.io.Reader</code> object. The data will be read from the stream
-     * as needed until end-of-file is reached.  The JDBC driver will
-     * do any necessary conversion from UNICODE to the database char format.
-     *
-     * <P><B>Note:</B> This stream object can either be a standard
-     * Java stream object or your own subclass that implements the
-     * standard interface.
-     * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
-     * it might be more efficient to use a version of
-     * <code>updateNClob</code> which takes a length parameter.
-     * <p>
-     * The updater methods are used to update column values in the
-     * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnIndex the first column is 1, the second 2, ...
-     * @param reader An object that contains the data to set the parameter value to.
-     * @throws SQLException if the driver does not support national
-     *         character sets;  if the driver can detect that a data conversion
-     *  error could occur; this method is called on a closed result set,
-     * if a database access error occurs or
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
-     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-     * this method
-     * @since 1.6
-     */
-    public void updateNClob(int columnIndex,  Reader reader) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-    }
-
-    /**
-     * Updates the designated column using the given <code>Reader</code>
-     * object.
-     * When a very large UNICODE value is input to a <code>LONGVARCHAR</code>
-     * parameter, it may be more practical to send it via a
-     * <code>java.io.Reader</code> object. The data will be read from the stream
-     * as needed until end-of-file is reached.  The JDBC driver will
-     * do any necessary conversion from UNICODE to the database char format.
-     *
-     * <P><B>Note:</B> This stream object can either be a standard
-     * Java stream object or your own subclass that implements the
-     * standard interface.
-     * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
-     * it might be more efficient to use a version of
-     * <code>updateNClob</code> which takes a length parameter.
-     * <p>
-     * The updater methods are used to update column values in the
-     * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the la
-bel is the name of the column
-     * @param reader An object that contains the data to set the parameter value to.
-     * @throws SQLException if the driver does not support national
-     *         character sets;  if the driver can detect that a data conversion
-     *  error could occur; this method is called on a closed result set;
-     *  if a database access error occurs or
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
-     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-     * this method
-     * @since 1.6
-     */
-    public void updateNClob(String columnLabel,  Reader reader) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-    }
-
-
-        /**
-     * Updates the designated column with an ascii stream value, which will have
-     * the specified number of bytes.
-     * The updater methods are used to update column values in the
-     * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnIndex the first column is 1, the second is 2, ...
-     * @param x the new column value
-     * @param length the length of the stream
-     * @exception SQLException if a database access error occurs,
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
-     * or this method is called on a closed result set
-     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-     * this method
-     * @since 1.6
-     */
-    public void updateAsciiStream(int columnIndex,
-                           java.io.InputStream x,
-                           long length) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-    }
-
-    /**
-     * Updates the designated column with a binary stream value, which will have
-     * the specified number of bytes.
-     * The updater methods are used to update column values in the
-     * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnIndex the first column is 1, the second is 2, ...
-     * @param x the new column value
-     * @param length the length of the stream
-     * @exception SQLException if a database access error occurs,
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
-     * or this method is called on a closed result set
-     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-     * this method
-     * @since 1.6
-     */
-    public void updateBinaryStream(int columnIndex,
-                            java.io.InputStream x,
-                            long length) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-    }
-
-    /**
-     * Updates the designated column with a character stream value, which will have
-     * the specified number of bytes.
-     * The updater methods are used to update column values in the
-     * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnIndex the first column is 1, the second is 2, ...
-     * @param x the new column value
-     * @param length the length of the stream
-     * @exception SQLException if a database access error occurs,
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
-     * or this method is called on a closed result set
-     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-     * this method
-     * @since 1.6
-     */
-    public void updateCharacterStream(int columnIndex,
-                             java.io.Reader x,
-                             long length) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-    }
-
-     /**
-     * Updates the designated column with an ascii stream value, which will have
-     * the specified number of bytes..
-     * The updater methods are used to update column values in the
-     * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
-     * @param x the new column value
-     * @param length the length of the stream
-     * @exception SQLException if a database access error occurs,
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
-     * or this method is called on a closed result set
-     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-     * this method
-     * @since 1.6
-     */
-    public void updateAsciiStream(String columnLabel,
-                           java.io.InputStream x,
-                           long length) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-    }
-
-    /**
-     * Updates the designated column with an ascii stream value.
-     * The updater methods are used to update column values in the
-     * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
-     * it might be more efficient to use a version of
-     * <code>updateAsciiStream</code> which takes a length parameter.
-     *
-     * @param columnIndex the first column is 1, the second is 2, ...
-     * @param x the new column value
-     * @exception SQLException if a database access error occurs,
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
-     * or this method is called on a closed result set
-     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-     * this method
-     * @since 1.6
-     */
-    public void updateAsciiStream(int columnIndex,
-                           java.io.InputStream x) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-    }
-
-    /**
-     * Updates the designated column with an ascii stream value.
-     * The updater methods are used to update column values in the
-     * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
-     * it might be more efficient to use a version of
-     * <code>updateAsciiStream</code> which takes a length parameter.
-     *
-     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the la
-bel is the name of the column
-     * @param x the new column value
-     * @exception SQLException if a database access error occurs,
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
-     * or this method is called on a closed result set
-     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-     * this method
-     * @since 1.6
-     */
-    public void updateAsciiStream(String columnLabel,
-                           java.io.InputStream x) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-    }
-
-
-    /**
-     * Updates the designated column with a binary stream value, which will have
-     * the specified number of bytes.
-     * The updater methods are used to update column values in the
-     * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
-     * @param x the new column value
-     * @param length the length of the stream
-     * @exception SQLException if a database access error occurs,
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
-     * or this method is called on a closed result set
-     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-     * this method
-     * @since 1.6
-     */
-    public void updateBinaryStream(String columnLabel,
-                            java.io.InputStream x,
-                            long length) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-    }
-
-    /**
-     * Updates the designated column with a binary stream value.
-     * The updater methods are used to update column values in the
-     * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
-     * it might be more efficient to use a version of
-     * <code>updateBinaryStream</code> which takes a length parameter.
-     *
-     * @param columnIndex the first column is 1, the second is 2, ...
-     * @param x the new column value
-     * @exception SQLException if a database access error occurs,
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
-     * or this method is called on a closed result set
-     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-     * this method
-     * @since 1.6
-     */
-    public void updateBinaryStream(int columnIndex,
-                            java.io.InputStream x) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-    }
-
-
-    /**
-     * Updates the designated column with a binary stream value.
-     * The updater methods are used to update column values in the
-     * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
-     * it might be more efficient to use a version of
-     * <code>updateBinaryStream</code> which takes a length parameter.
-     *
-     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the la
-bel is the name of the column
-     * @param x the new column value
-     * @exception SQLException if a database access error occurs,
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
-     * or this method is called on a closed result set
-     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-     * this method
-     * @since 1.6
-     */
-    public void updateBinaryStream(String columnLabel,
-                            java.io.InputStream x) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-    }
-
-
-    /**
-     * Updates the designated column with a character stream value, which will have
-     * the specified number of bytes.
-     * The updater methods are used to update column values in the
-     * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
-     * @param reader the <code>java.io.Reader</code> object containing
-     *        the new column value
-     * @param length the length of the stream
-     * @exception SQLException if a database access error occurs,
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
-     * or this method is called on a closed result set
-     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-     * this method
-     * @since 1.6
-     */
-    public void updateCharacterStream(String columnLabel,
-                             java.io.Reader reader,
-                             long length) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-    }
-
-    /**
-     * Updates the designated column with a character stream value.
-     * The updater methods are used to update column values in the
-     * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
-     * it might be more efficient to use a version of
-     * <code>updateCharacterStream</code> which takes a length parameter.
-     *
-     * @param columnIndex the first column is 1, the second is 2, ...
-     * @param x the new column value
-     * @exception SQLException if a database access error occurs,
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
-     * or this method is called on a closed result set
-     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-     * this method
-     * @since 1.6
-     */
-    public void updateCharacterStream(int columnIndex,
-                             java.io.Reader x) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-    }
-
-    /**
-     * Updates the designated column with a character stream value.
-     * The updater methods are used to update column values in the
-     * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
-     * it might be more efficient to use a version of
-     * <code>updateCharacterStream</code> which takes a length parameter.
-     *
-     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the la
-bel is the name of the column
-     * @param reader the <code>java.io.Reader</code> object containing
-     *        the new column value
-     * @exception SQLException if a database access error occurs,
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
-     * or this method is called on a closed result set
-     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-     * this method
-     * @since 1.6
-     */
-    public void updateCharacterStream(String columnLabel,
-                             java.io.Reader reader) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-    }
-
-
-     /**
-  * Sets the designated parameter to the given <code>java.net.URL</code> value.
-  * The driver converts this to an SQL <code>DATALINK</code> value
-  * when it sends it to the database.
-  *
-  * @param parameterIndex the first parameter is 1, the second is 2, ...
-  * @param x the <code>java.net.URL</code> object to be set
-  * @exception SQLException if a database access error occurs or
-  * this method is called on a closed <code>PreparedStatement</code>
-  * @throws SQLFeatureNotSupportedException  if the JDBC driver does not support this method
-  * @since 1.4
-  */
-  public void setURL(int parameterIndex, java.net.URL x) throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-   }
-
-
-   /**
-  * Sets the designated parameter to a <code>Reader</code> object.
-  * This method differs from the <code>setCharacterStream (int, Reader)</code> method
-  * because it informs the driver that the parameter value should be sent to
-  * the server as a <code>NCLOB</code>.  When the <code>setCharacterStream</code> method is used, the
-  * driver may have to do extra work to determine whether the parameter
-  * data should be sent to the server as a <code>LONGNVARCHAR</code> or a <code>NCLOB</code>
-  * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
-  * it might be more efficient to use a version of
-  * <code>setNClob</code> which takes a length parameter.
-  *
-  * @param parameterIndex index of the first parameter is 1, the second is 2, ...
-  * @param reader An object that contains the data to set the parameter value to.
-  * @throws SQLException if parameterIndex does not correspond to a parameter
-  * marker in the SQL statement;
-  * if the driver does not support national character sets;
-  * if the driver can detect that a data conversion
-  *  error could occur;  if a database access error occurs or
-  * this method is called on a closed <code>PreparedStatement</code>
-  * @throws SQLFeatureNotSupportedException  if the JDBC driver does not support this method
-  *
-  * @since 1.6
-  */
-  public void setNClob(int parameterIndex, Reader reader)
-    throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-   }
-
-   /**
-  * Sets the designated parameter to a <code>Reader</code> object.  The <code>reader</code> must contain the number
-             * of characters specified by length otherwise a <code>SQLException</code> will be
-            * generated when the <code>CallableStatement</code> is executed.
-            * This method differs from the <code>setCharacterStream (int, Reader, int)</code> method
-            * because it informs the driver that the parameter value should be sent to
-            * the server as a <code>NCLOB</code>.  When the <code>setCharacterStream</code> method is used, the
-            * driver may have to do extra work to determine whether the parameter
-            * data should be send to the server as a <code>LONGNVARCHAR</code> or a <code>NCLOB</code>
-            *
-            * @param parameterName the name of the parameter to be set
-            * @param reader An object that contains the data to set the parameter value to.
-            * @param length the number of characters in the parameter data.
-            * @throws SQLException if parameterIndex does not correspond to a parameter
-            * marker in the SQL statement; if the length specified is less than zero;
-            * if the driver does not support national
-            *         character sets;  if the driver can detect that a data conversion
-            *  error could occur; if a database access error occurs or
-            * this method is called on a closed <code>CallableStatement</code>
-            * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-            * this method
-            * @since 1.6
-            */
-            public void setNClob(String parameterName, Reader reader, long length)
-    throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-   }
-
-
- /**
-  * Sets the designated parameter to a <code>Reader</code> object.
-  * This method differs from the <code>setCharacterStream (int, Reader)</code> method
-  * because it informs the driver that the parameter value should be sent to
-  * the server as a <code>NCLOB</code>.  When the <code>setCharacterStream</code> method is used, the
-  * driver may have to do extra work to determine whether the parameter
-  * data should be send to the server as a <code>LONGNVARCHAR</code> or a <code>NCLOB</code>
-  * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
-  * it might be more efficient to use a version of
-  * <code>setNClob</code> which takes a length parameter.
-  *
-  * @param parameterName the name of the parameter
-  * @param reader An object that contains the data to set the parameter value to.
-  * @throws SQLException if the driver does not support national character sets;
-  * if the driver can detect that a data conversion
-  *  error could occur;  if a database access error occurs or
-  * this method is called on a closed <code>CallableStatement</code>
-  * @throws SQLFeatureNotSupportedException  if the JDBC driver does not support this method
-  *
-  * @since 1.6
-  */
-  public void setNClob(String parameterName, Reader reader)
-    throws SQLException{
-             throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-   }
-
-
-   /**
-     ** of characters specified by length otherwise a <code>SQLException</code> will becontain  the number
-     * generated when the <code>PreparedStatement</code> is executed.
-     * This method differs from the <code>setCharacterStream (int, Reader, int)</code> method
-     * because it informs the driver that the parameter value should be sent to
-     * the server as a <code>NCLOB</code>.  When the <code>setCharacterStream</code> method is used, the
-     * driver may have to do extra work to determine whether the parameter
-     * data should be sent to the server as a <code>LONGNVARCHAR</code> or a <code>NCLOB</code>
-     * @param parameterIndex index of the first parameter is 1, the second is 2, ...
-     * @param reader An object that contains the data to set the parameter value to.
-     * @param length the number of characters in the parameter data.
-     * @throws SQLException if parameterIndex does not correspond to a parameter
-     * marker in the SQL statement; if the length specified is less than zero;
-     * if the driver does not support national character sets;
-     * if the driver can detect that a data conversion
-     *  error could occur;  if a database access error occurs or
-     * this method is called on a closed <code>PreparedStatement</code>
-     * @throws SQLFeatureNotSupportedException  if the JDBC driver does not support this method
-     *
-     * @since 1.6
-     */
-     public void setNClob(int parameterIndex, Reader reader, long length)
-       throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-   }
-
-
-    /**
-     * Sets the designated parameter to a <code>java.sql.NClob</code> object. The driver converts this to
-a
-     * SQL <code>NCLOB</code> value when it sends it to the database.
-     * @param parameterIndex of the first parameter is 1, the second is 2, ...
-     * @param value the parameter value
-     * @throws SQLException if the driver does not support national
-     *         character sets;  if the driver can detect that a data conversion
-     *  error could occur ; or if a database access error occurs
-     * @since 1.6
-     */
-     public void setNClob(int parameterIndex, NClob value) throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-   }
-
-
- /**
-  * Sets the designated paramter to the given <code>String</code> object.
-  * The driver converts this to a SQL <code>NCHAR</code> or
-  * <code>NVARCHAR</code> or <code>LONGNVARCHAR</code>
-  * @param parameterName the name of the column to be set
-  * @param value the parameter value
-  * @throws SQLException if the driver does not support national
-  *         character sets;  if the driver can detect that a data conversion
-  *  error could occur; or if a database access error occurs
-  * @since 1.6
-  */
- public void setNString(String parameterName, String value)
-         throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-   }
-
- /**
-  * Sets the designated parameter to a <code>Reader</code> object. The
-  * <code>Reader</code> reads the data till end-of-file is reached. The
-  * driver does the necessary conversion from Java character format to
-  * the national character set in the database.
-  * @param parameterIndex of the first parameter is 1, the second is 2, ...
-  * @param value the parameter value
-  * @param length the number of characters in the parameter data.
-  * @throws SQLException if the driver does not support national
-  *         character sets;  if the driver can detect that a data conversion
-  *  error could occur ; or if a database access error occurs
-  * @since 1.6
-  */
-  public void setNCharacterStream(int parameterIndex, Reader value, long length) throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-   }
-
-
-
- /**
-  * Sets the designated parameter to a <code>Reader</code> object. The
-  * <code>Reader</code> reads the data till end-of-file is reached. The
-  * driver does the necessary conversion from Java character format to
-  * the national character set in the database.
-  * @param parameterName the name of the column to be set
-  * @param value the parameter value
-  * @param length the number of characters in the parameter data.
-  * @throws SQLException if the driver does not support national
-  *         character sets;  if the driver can detect that a data conversion
-  *  error could occur; or if a database access error occurs
-  * @since 1.6
-  */
- public void setNCharacterStream(String parameterName, Reader value, long length)
-         throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-   }
-
-  /**
-  * Sets the designated parameter to a <code>Reader</code> object. The
-  * <code>Reader</code> reads the data till end-of-file is reached. The
-  * driver does the necessary conversion from Java character format to
-  * the national character set in the database.
-
-  * <P><B>Note:</B> This stream object can either be a standard
-  * Java stream object or your own subclass that implements the
-  * standard interface.
-  * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
-  * it might be more efficient to use a version of
-  * <code>setNCharacterStream</code> which takes a length parameter.
-  *
-  * @param parameterName the name of the parameter
-  * @param value the parameter value
-  * @throws SQLException if the driver does not support national
-  *         character sets;  if the driver can detect that a data conversion
-  *  error could occur ; if a database access error occurs; or
-  * this method is called on a closed <code>CallableStatement</code>
-  * @throws SQLFeatureNotSupportedException  if the JDBC driver does not support this method
-  * @since 1.6
-  */
-  public void setNCharacterStream(String parameterName, Reader value) throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-   }
-
-  /**
-    * Sets the designated parameter to the given <code>java.sql.Timestamp</code> value,
-    * using the given <code>Calendar</code> object.  The driver uses
-    * the <code>Calendar</code> object to construct an SQL <code>TIMESTAMP</code> value,
-    * which the driver then sends to the database.  With a
-    * a <code>Calendar</code> object, the driver can calculate the timestamp
-    * taking into account a custom timezone.  If no
-    * <code>Calendar</code> object is specified, the driver uses the default
-    * timezone, which is that of the virtual machine running the application.
-    *
-    * @param parameterName the name of the parameter
-    * @param x the parameter value
-    * @param cal the <code>Calendar</code> object the driver will use
-    *            to construct the timestamp
-    * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
-    * @see #getTimestamp
-    * @since 1.4
-    */
-    public void setTimestamp(String parameterName, java.sql.Timestamp x, Calendar cal)
-       throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-   }
-
-    /**
-    * Sets the designated parameter to a <code>Reader</code> object.  The <code>reader</code> must contain  the number
-               * of characters specified by length otherwise a <code>SQLException</code> will be
-               * generated when the <code>CallableStatement</code> is executed.
-              * This method differs from the <code>setCharacterStream (int, Reader, int)</code> method
-              * because it informs the driver that the parameter value should be sent to
-              * the server as a <code>CLOB</code>.  When the <code>setCharacterStream</code> method is used, the
-               * driver may have to do extra work to determine whether the parameter
-               * data should be send to the server as a <code>LONGVARCHAR</code> or a <code>CLOB</code>
-               * @param parameterName the name of the parameter to be set
-              * @param reader An object that contains the data to set the parameter value to.
-              * @param length the number of characters in the parameter data.
-              * @throws SQLException if parameterIndex does not correspond to a parameter
-              * marker in the SQL statement; if the length specified is less than zero;
-              * a database access error occurs or
-              * this method is called on a closed <code>CallableStatement</code>
-              * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-              * this method
-              *
-              * @since 1.6
-              */
-      public  void setClob(String parameterName, Reader reader, long length)
-      throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-   }
-
-
-
-  /**
-    * Sets the designated parameter to the given <code>java.sql.Clob</code> object.
-    * The driver converts this to an SQL <code>CLOB</code> value when it
-    * sends it to the database.
-    *
-    * @param parameterName the name of the parameter
-    * @param x a <code>Clob</code> object that maps an SQL <code>CLOB</code> value
-    * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
-    * @since 1.6
-    */
-    public void setClob (String parameterName, Clob x) throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-   }
-
- /**
-    * Sets the designated parameter to a <code>Reader</code> object.
-    * This method differs from the <code>setCharacterStream (int, Reader)</code> method
-    * because it informs the driver that the parameter value should be sent to
-    * the server as a <code>CLOB</code>.  When the <code>setCharacterStream</code> method is used, the
-    * driver may have to do extra work to determine whether the parameter
-    * data should be send to the server as a <code>LONGVARCHAR</code> or a <code>CLOB</code>
-    *
-    * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
-    * it might be more efficient to use a version of
-    * <code>setClob</code> which takes a length parameter.
-    *
-    * @param parameterName the name of the parameter
-    * @param reader An object that contains the data to set the parameter value to.
-    * @throws SQLException if a database access error occurs or this method is called on
-    * a closed <code>CallableStatement</code>
-    *
-    * @throws SQLFeatureNotSupportedException  if the JDBC driver does not support this method
-    * @since 1.6
-    */
-    public void setClob(String parameterName, Reader reader)
-      throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-   }
-
-
- /**
-    * Sets the designated parameter to the given <code>java.sql.Date</code> value
-    * using the default time zone of the virtual machine that is running
-    * the application.
-    * The driver converts this
-    * to an SQL <code>DATE</code> value when it sends it to the database.
-    *
-    * @param parameterName the name of the parameter
-    * @param x the parameter value
-    * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
-    * @see #getDate
-    * @since 1.4
-    */
-    public void setDate(String parameterName, java.sql.Date x)
-       throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-   }
-
-   /**
-    * Sets the designated parameter to the given <code>java.sql.Date</code> value,
-    * using the given <code>Calendar</code> object.  The driver uses
-    * the <code>Calendar</code> object to construct an SQL <code>DATE</code> value,
-    * which the driver then sends to the database.  With a
-    * a <code>Calendar</code> object, the driver can calculate the date
-    * taking into account a custom timezone.  If no
-    * <code>Calendar</code> object is specified, the driver uses the default
-    * timezone, which is that of the virtual machine running the application.
-    *
-    * @param parameterName the name of the parameter
-    * @param x the parameter value
-    * @param cal the <code>Calendar</code> object the driver will use
-    *            to construct the date
-    * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
-    * @see #getDate
-    * @since 1.4
-    */
-   public void setDate(String parameterName, java.sql.Date x, Calendar cal)
-       throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-   }
-
-
- /**
-    * Sets the designated parameter to the given <code>java.sql.Time</code> value.
-    * The driver converts this
-    * to an SQL <code>TIME</code> value when it sends it to the database.
-    *
-    * @param parameterName the name of the parameter
-    * @param x the parameter value
-    * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
-    * @see #getTime
-    * @since 1.4
-    */
-   public void setTime(String parameterName, java.sql.Time x)
-       throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-   }
-
- /**
-    * Sets the designated parameter to the given <code>java.sql.Time</code> value,
-    * using the given <code>Calendar</code> object.  The driver uses
-    * the <code>Calendar</code> object to construct an SQL <code>TIME</code> value,
-    * which the driver then sends to the database.  With a
-    * a <code>Calendar</code> object, the driver can calculate the time
-    * taking into account a custom timezone.  If no
-    * <code>Calendar</code> object is specified, the driver uses the default
-    * timezone, which is that of the virtual machine running the application.
-    *
-    * @param parameterName the name of the parameter
-    * @param x the parameter value
-    * @param cal the <code>Calendar</code> object the driver will use
-    *            to construct the time
-    * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
-    * @see #getTime
-    * @since 1.4
-    */
-   public void setTime(String parameterName, java.sql.Time x, Calendar cal)
-       throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-   }
-
-   /**
-   * Sets the designated parameter to a <code>Reader</code> object.
-   * This method differs from the <code>setCharacterStream (int, Reader)</code> method
-   * because it informs the driver that the parameter value should be sent to
-   * the server as a <code>CLOB</code>.  When the <code>setCharacterStream</code> method is used, the
-   * driver may have to do extra work to determine whether the parameter
-   * data should be sent to the server as a <code>LONGVARCHAR</code> or a <code>CLOB</code>
-   *
-   * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
-   * it might be more efficient to use a version of
-   * <code>setClob</code> which takes a length parameter.
-   *
-   * @param parameterIndex index of the first parameter is 1, the second is 2, ...
-   * @param reader An object that contains the data to set the parameter value to.
-   * @throws SQLException if a database access error occurs, this method is called on
-   * a closed <code>PreparedStatement</code>or if parameterIndex does not correspond to a parameter
-   * marker in the SQL statement
-   *
-   * @throws SQLFeatureNotSupportedException  if the JDBC driver does not support this method
-   * @since 1.6
-   */
-   public void setClob(int parameterIndex, Reader reader)
-     throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-   }
-
-
-   /**
-   * Sets the designated parameter to a <code>Reader</code> object.  The reader must contain  the number
-   * of characters specified by length otherwise a <code>SQLException</code> will be
-   * generated when the <code>PreparedStatement</code> is executed.
-   *This method differs from the <code>setCharacterStream (int, Reader, int)</code> method
-   * because it informs the driver that the parameter value should be sent to
-   * the server as a <code>CLOB</code>.  When the <code>setCharacterStream</code> method is used, the
-   * driver may have to do extra work to determine whether the parameter
-   * data should be sent to the server as a <code>LONGVARCHAR</code> or a <code>CLOB</code>
-   * @param parameterIndex index of the first parameter is 1, the second is 2, ...
-   * @param reader An object that contains the data to set the parameter value to.
-   * @param length the number of characters in the parameter data.
-   * @throws SQLException if a database access error occurs, this method is called on
-   * a closed <code>PreparedStatement</code>, if parameterIndex does not correspond to a parameter
-   * marker in the SQL statement, or if the length specified is less than zero.
-   *
-   * @throws SQLFeatureNotSupportedException  if the JDBC driver does not support this method
-   * @since 1.6
-   */
-   public void setClob(int parameterIndex, Reader reader, long length)
-     throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-   }
-
-
- /**
-    * Sets the designated parameter to a <code>InputStream</code> object.  The inputstream must contain  the number
-    * of characters specified by length otherwise a <code>SQLException</code> will be
-    * generated when the <code>PreparedStatement</code> is executed.
-    * This method differs from the <code>setBinaryStream (int, InputStream, int)</code>
-    * method because it informs the driver that the parameter value should be
-    * sent to the server as a <code>BLOB</code>.  When the <code>setBinaryStream</code> method is used,
-    * the driver may have to do extra work to determine whether the parameter
-    * data should be sent to the server as a <code>LONGVARBINARY</code> or a <code>BLOB</code>
-    * @param parameterIndex index of the first parameter is 1,
-    * the second is 2, ...
-    * @param inputStream An object that contains the data to set the parameter
-    * value to.
-    * @param length the number of bytes in the parameter data.
-    * @throws SQLException if a database access error occurs,
-    * this method is called on a closed <code>PreparedStatement</code>,
-    * if parameterIndex does not correspond
-    * to a parameter marker in the SQL statement,  if the length specified
-    * is less than zero or if the number of bytes in the inputstream does not match
-    * the specfied length.
-    * @throws SQLFeatureNotSupportedException  if the JDBC driver does not support this method
-    *
-    * @since 1.6
-    */
-    public void setBlob(int parameterIndex, InputStream inputStream, long length)
-       throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-   }
-
- /**
-    * Sets the designated parameter to a <code>InputStream</code> object.
-    * This method differs from the <code>setBinaryStream (int, InputStream)</code>
-    * This method differs from the <code>setBinaryStream (int, InputStream)</code>
-    * method because it informs the driver that the parameter value should be
-    * sent to the server as a <code>BLOB</code>.  When the <code>setBinaryStream</code> method is used,
-    * the driver may have to do extra work to determine whether the parameter
-    * data should be sent to the server as a <code>LONGVARBINARY</code> or a <code>BLOB</code>
-    *
-    * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
-    * it might be more efficient to use a version of
-    * <code>setBlob</code> which takes a length parameter.
-    *
-    * @param parameterIndex index of the first parameter is 1,
-    * the second is 2, ...
-
-
-    * @param inputStream An object that contains the data to set the parameter
-    * value to.
-    * @throws SQLException if a database access error occurs,
-    * this method is called on a closed <code>PreparedStatement</code> or
-    * if parameterIndex does not correspond
-    * to a parameter marker in the SQL statement,
-    * @throws SQLFeatureNotSupportedException  if the JDBC driver does not support this method
-    *
-    * @since 1.6
-    */
-    public void setBlob(int parameterIndex, InputStream inputStream)
-       throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-   }
-
- /**
-    * Sets the designated parameter to a <code>InputStream</code> object.  The <code>inputstream</code> must contain  the number
-      * of characters specified by length, otherwise a <code>SQLException</code> will be
-      * generated when the <code>CallableStatement</code> is executed.
-      * This method differs from the <code>setBinaryStream (int, InputStream, int)</code>
-      * method because it informs the driver that the parameter value should be
-      * sent to the server as a <code>BLOB</code>.  When the <code>setBinaryStream</code> method is used,
-      * the driver may have to do extra work to determine whether the parameter
-      * data should be sent to the server as a <code>LONGVARBINARY</code> or a <code>BLOB</code>
-      *
-      * @param parameterName the name of the parameter to be set
-      * the second is 2, ...
-      *
-      * @param inputStream An object that contains the data to set the parameter
-      * value to.
-      * @param length the number of bytes in the parameter data.
-      * @throws SQLException  if parameterIndex does not correspond
-      * to a parameter marker in the SQL statement,  or if the length specified
-      * is less than zero; if the number of bytes in the inputstream does not match
-      * the specfied length; if a database access error occurs or
-      * this method is called on a closed <code>CallableStatement</code>
-      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-      * this method
-      *
-      * @since 1.6
-      */
-      public void setBlob(String parameterName, InputStream inputStream, long length)
-         throws SQLException{
-         throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-    }
-
-
- /**
-    * Sets the designated parameter to the given <code>java.sql.Blob</code> object.
-    * The driver converts this to an SQL <code>BLOB</code> value when it
-    * sends it to the database.
-    *
-    * @param parameterName the name of the parameter
-    * @param x a <code>Blob</code> object that maps an SQL <code>BLOB</code> value
-    * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
-    * @since 1.6
-    */
-   public void setBlob (String parameterName, Blob x) throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-   }
-
- /**
-    * Sets the designated parameter to a <code>InputStream</code> object.
-    * This method differs from the <code>setBinaryStream (int, InputStream)</code>
-    * method because it informs the driver that the parameter value should be
-    * sent to the server as a <code>BLOB</code>.  When the <code>setBinaryStream</code> method is used,
-    * the driver may have to do extra work to determine whether the parameter
-    * data should be send to the server as a <code>LONGVARBINARY</code> or a <code>BLOB</code>
-    *
-    * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
-    * it might be more efficient to use a version of
-    * <code>setBlob</code> which takes a length parameter.
-    *
-    * @param parameterName the name of the parameter
-    * @param inputStream An object that contains the data to set the parameter
-    * value to.
-    * @throws SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @throws SQLFeatureNotSupportedException  if the JDBC driver does not support this method
-    *
-    * @since 1.6
-    */
-    public void setBlob(String parameterName, InputStream inputStream)
-       throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-   }
-
-  /**
-  * Sets the value of the designated parameter with the given object. The second
-  * argument must be an object type; for integral values, the
-  * <code>java.lang</code> equivalent objects should be used.
-  *
-  * <p>The given Java object will be converted to the given targetSqlType
-  * before being sent to the database.
-  *
-  * If the object has a custom mapping (is of a class implementing the
-  * interface <code>SQLData</code>),
-  * the JDBC driver should call the method <code>SQLData.writeSQL</code> to write it
-  * to the SQL data stream.
-  * If, on the other hand, the object is of a class implementing
-  * <code>Ref</code>, <code>Blob</code>, <code>Clob</code>,  <code>NClob</code>,
-  *  <code>Struct</code>, <code>java.net.URL</code>,
-  * or <code>Array</code>, the driver should pass it to the database as a
-  * value of the corresponding SQL type.
-  * <P>
-  * Note that this method may be used to pass datatabase-
-  * specific abstract data types.
-  *
-  * @param parameterName the name of the parameter
-  * @param x the object containing the input parameter value
-  * @param targetSqlType the SQL type (as defined in java.sql.Types) to be
-  * sent to the database. The scale argument may further qualify this type.
-  * @param scale for java.sql.Types.DECIMAL or java.sql.Types.NUMERIC types,
-  *          this is the number of digits after the decimal point.  For all other
-  *          types, this value will be ignored.
-  * @exception SQLException if a database access error occurs or
-  * this method is called on a closed <code>CallableStatement</code>
-  * @exception SQLFeatureNotSupportedException if <code>targetSqlType</code> is
-  * a <code>ARRAY</code>, <code>BLOB</code>, <code>CLOB</code>,
-  * <code>DATALINK</code>, <code>JAVA_OBJECT</code>, <code>NCHAR</code>,
-  * <code>NCLOB</code>, <code>NVARCHAR</code>, <code>LONGNVARCHAR</code>,
-  *  <code>REF</code>, <code>ROWID</code>, <code>SQLXML</code>
-  * or  <code>STRUCT</code> data type and the JDBC driver does not support
-  * this data type
-  * @see Types
-  * @see #getObject
-  * @since 1.4
-  */
-  public void setObject(String parameterName, Object x, int targetSqlType, int scale)
-     throws SQLException{
-      throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
- }
-
-  /**
-    * Sets the value of the designated parameter with the given object.
-    * This method is like the method <code>setObject</code>
-    * above, except that it assumes a scale of zero.
-    *
-    * @param parameterName the name of the parameter
-    * @param x the object containing the input parameter value
-    * @param targetSqlType the SQL type (as defined in java.sql.Types) to be
-    *                      sent to the database
-    * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @exception SQLFeatureNotSupportedException if <code>targetSqlType</code> is
-    * a <code>ARRAY</code>, <code>BLOB</code>, <code>CLOB</code>,
-    * <code>DATALINK</code>, <code>JAVA_OBJECT</code>, <code>NCHAR</code>,
-    * <code>NCLOB</code>, <code>NVARCHAR</code>, <code>LONGNVARCHAR</code>,
-    *  <code>REF</code>, <code>ROWID</code>, <code>SQLXML</code>
-    * or  <code>STRUCT</code> data type and the JDBC driver does not support
-    * this data type
-    * @see #getObject
-    * @since 1.4
-    */
-    public void setObject(String parameterName, Object x, int targetSqlType)
-       throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-   }
-
- /**
-   * Sets the value of the designated parameter with the given object.
-   * The second parameter must be of type <code>Object</code>; therefore, the
-   * <code>java.lang</code> equivalent objects should be used for built-in types.
-   *
-   * <p>The JDBC specification specifies a standard mapping from
-   * Java <code>Object</code> types to SQL types.  The given argument
-   * will be converted to the corresponding SQL type before being
-   * sent to the database.
-   *
-   * <p>Note that this method may be used to pass datatabase-
-   * specific abstract data types, by using a driver-specific Java
-   * type.
-   *
-   * If the object is of a class implementing the interface <code>SQLData</code>,
-   * the JDBC driver should call the method <code>SQLData.writeSQL</code>
-   * to write it to the SQL data stream.
-   * If, on the other hand, the object is of a class implementing
-   * <code>Ref</code>, <code>Blob</code>, <code>Clob</code>,  <code>NClob</code>,
-   *  <code>Struct</code>, <code>java.net.URL</code>,
-   * or <code>Array</code>, the driver should pass it to the database as a
-   * value of the corresponding SQL type.
-   * <P>
-   * This method throws an exception if there is an ambiguity, for example, if the
-   * object is of a class implementing more than one of the interfaces named above.
-   *
-   * @param parameterName the name of the parameter
-   * @param x the object containing the input parameter value
-   * @exception SQLException if a database access error occurs,
-   * this method is called on a closed <code>CallableStatement</code> or if the given
-   *            <code>Object</code> parameter is ambiguous
-   * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-   * this method
-   * @see #getObject
-   * @since 1.4
-   */
-   public void setObject(String parameterName, Object x) throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-   }
-
-  /**
-  * Sets the designated parameter to the given input stream, which will have
-  * the specified number of bytes.
-  * When a very large ASCII value is input to a <code>LONGVARCHAR</code>
-  * parameter, it may be more practical to send it via a
-  * <code>java.io.InputStream</code>. Data will be read from the stream
-  * as needed until end-of-file is reached.  The JDBC driver will
-  * do any necessary conversion from ASCII to the database char format.
-  *
-  * <P><B>Note:</B> This stream object can either be a standard
-  * Java stream object or your own subclass that implements the
-  * standard interface.
-  *
-  * @param parameterName the name of the parameter
-  * @param x the Java input stream that contains the ASCII parameter value
-  * @param length the number of bytes in the stream
-  * @exception SQLException if a database access error occurs or
-  * this method is called on a closed <code>CallableStatement</code>
-  * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-  * this method
-  * @since 1.4
-  */
- public void setAsciiStream(String parameterName, java.io.InputStream x, int length)
-     throws SQLException{
-      throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
- }
-
-
-/**
-  * Sets the designated parameter to the given input stream, which will have
-  * the specified number of bytes.
-  * When a very large binary value is input to a <code>LONGVARBINARY</code>
-  * parameter, it may be more practical to send it via a
-  * <code>java.io.InputStream</code> object. The data will be read from the stream
-  * as needed until end-of-file is reached.
-  *
-  * <P><B>Note:</B> This stream object can either be a standard
-  * Java stream object or your own subclass that implements the
-  * standard interface.
-  *
-  * @param parameterName the name of the parameter
-  * @param x the java input stream which contains the binary parameter value
-  * @param length the number of bytes in the stream
-  * @exception SQLException if a database access error occurs or
-  * this method is called on a closed <code>CallableStatement</code>
-  * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-  * this method
-  * @since 1.4
-  */
- public void setBinaryStream(String parameterName, java.io.InputStream x,
-                      int length) throws SQLException{
-      throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
- }
-
- /**
-   * Sets the designated parameter to the given <code>Reader</code>
-   * object, which is the given number of characters long.
-   * When a very large UNICODE value is input to a <code>LONGVARCHAR</code>
-   * parameter, it may be more practical to send it via a
-   * <code>java.io.Reader</code> object. The data will be read from the stream
-   * as needed until end-of-file is reached.  The JDBC driver will
-   * do any necessary conversion from UNICODE to the database char format.
-   *
-   * <P><B>Note:</B> This stream object can either be a standard
-   * Java stream object or your own subclass that implements the
-   * standard interface.
-   *
-   * @param parameterName the name of the parameter
-   * @param reader the <code>java.io.Reader</code> object that
-   *        contains the UNICODE data used as the designated parameter
-   * @param length the number of characters in the stream
-   * @exception SQLException if a database access error occurs or
-   * this method is called on a closed <code>CallableStatement</code>
-   * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-   * this method
-   * @since 1.4
-   */
-  public void setCharacterStream(String parameterName,
-                          java.io.Reader reader,
-                          int length) throws SQLException{
-       throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-  }
-
-  /**
-   * Sets the designated parameter to the given input stream.
-   * When a very large ASCII value is input to a <code>LONGVARCHAR</code>
-   * parameter, it may be more practical to send it via a
-   * <code>java.io.InputStream</code>. Data will be read from the stream
-   * as needed until end-of-file is reached.  The JDBC driver will
-   * do any necessary conversion from ASCII to the database char format.
-   *
-   * <P><B>Note:</B> This stream object can either be a standard
-   * Java stream object or your own subclass that implements the
-   * standard interface.
-   * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
-   * it might be more efficient to use a version of
-   * <code>setAsciiStream</code> which takes a length parameter.
-   *
-   * @param parameterName the name of the parameter
-   * @param x the Java input stream that contains the ASCII parameter value
-   * @exception SQLException if a database access error occurs or
-   * this method is called on a closed <code>CallableStatement</code>
-   * @throws SQLFeatureNotSupportedException  if the JDBC driver does not support this method
-     * @since 1.6
-  */
-  public void setAsciiStream(String parameterName, java.io.InputStream x)
-          throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-   }
-
-
- /**
-    * Sets the designated parameter to the given input stream.
-    * When a very large binary value is input to a <code>LONGVARBINARY</code>
-    * parameter, it may be more practical to send it via a
-    * <code>java.io.InputStream</code> object. The data will be read from the
-    * stream as needed until end-of-file is reached.
-    *
-    * <P><B>Note:</B> This stream object can either be a standard
-    * Java stream object or your own subclass that implements the
-    * standard interface.
-    * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
-    * it might be more efficient to use a version of
-    * <code>setBinaryStream</code> which takes a length parameter.
-    *
-    * @param parameterName the name of the parameter
-    * @param x the java input stream which contains the binary parameter value
-    * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @throws SQLFeatureNotSupportedException  if the JDBC driver does not support this method
-    * @since 1.6
-    */
-   public void setBinaryStream(String parameterName, java.io.InputStream x)
-   throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-   }
-
- /**
-    * Sets the designated parameter to the given <code>Reader</code>
-    * object.
-    * When a very large UNICODE value is input to a <code>LONGVARCHAR</code>
-    * parameter, it may be more practical to send it via a
-    * <code>java.io.Reader</code> object. The data will be read from the stream
-    * as needed until end-of-file is reached.  The JDBC driver will
-    * do any necessary conversion from UNICODE to the database char format.
-    *
-    * <P><B>Note:</B> This stream object can either be a standard
-    * Java stream object or your own subclass that implements the
-    * standard interface.
-    * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
-    * it might be more efficient to use a version of
-    * <code>setCharacterStream</code> which takes a length parameter.
-    *
-    * @param parameterName the name of the parameter
-    * @param reader the <code>java.io.Reader</code> object that contains the
-    *        Unicode data
-    * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @throws SQLFeatureNotSupportedException  if the JDBC driver does not support this method
-    * @since 1.6
-    */
-   public void setCharacterStream(String parameterName,
-                         java.io.Reader reader) throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-   }
-
-   /**
-    * Sets the designated parameter to the given
-    * <code>java.math.BigDecimal</code> value.
-    * The driver converts this to an SQL <code>NUMERIC</code> value when
-    * it sends it to the database.
-    *
-    * @param parameterName the name of the parameter
-    * @param x the parameter value
-    * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
-    * @see #getBigDecimal
-    * @since 1.4
-    */
-   public void setBigDecimal(String parameterName, BigDecimal x) throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-   }
-
- /**
-    * Sets the designated parameter to the given Java <code>String</code> value.
-    * The driver converts this
-    * to an SQL <code>VARCHAR</code> or <code>LONGVARCHAR</code> value
-    * (depending on the argument's
-    * size relative to the driver's limits on <code>VARCHAR</code> values)
-    * when it sends it to the database.
-    *
-    * @param parameterName the name of the parameter
-    * @param x the parameter value
-    * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
-    * @see #getString
-    * @since 1.4
-    */
-   public void setString(String parameterName, String x) throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-   }
-
-
-
- /**
-    * Sets the designated parameter to the given Java array of bytes.
-    * The driver converts this to an SQL <code>VARBINARY</code> or
-    * <code>LONGVARBINARY</code> (depending on the argument's size relative
-    * to the driver's limits on <code>VARBINARY</code> values) when it sends
-    * it to the database.
-    *
-    * @param parameterName the name of the parameter
-    * @param x the parameter value
-    * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
-    * @see #getBytes
-    * @since 1.4
-    */
-   public void setBytes(String parameterName, byte x[]) throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-   }
-
- /**
-    * Sets the designated parameter to the given <code>java.sql.Timestamp</code> value.
-    * The driver
-    * converts this to an SQL <code>TIMESTAMP</code> value when it sends it to the
-    * database.
-    *
-    * @param parameterName the name of the parameter
-    * @param x the parameter value
-    * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
-    * @see #getTimestamp
-    * @since 1.4
-    */
-   public void setTimestamp(String parameterName, java.sql.Timestamp x)
-       throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-   }
-
-    /**
-    * Sets the designated parameter to SQL <code>NULL</code>.
-    *
-    * <P><B>Note:</B> You must specify the parameter's SQL type.
-    *
-    * @param parameterName the name of the parameter
-    * @param sqlType the SQL type code defined in <code>java.sql.Types</code>
-    * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
-    * @since 1.4
-    */
-   public void setNull(String parameterName, int sqlType) throws SQLException {
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-   }
-
- /**
-    * Sets the designated parameter to SQL <code>NULL</code>.
-    * This version of the method <code>setNull</code> should
-    * be used for user-defined types and REF type parameters.  Examples
-    * of user-defined types include: STRUCT, DISTINCT, JAVA_OBJECT, and
-    * named array types.
-    *
-    * <P><B>Note:</B> To be portable, applications must give the
-    * SQL type code and the fully-qualified SQL type name when specifying
-    * a NULL user-defined or REF parameter.  In the case of a user-defined type
-    * the name is the type name of the parameter itself.  For a REF
-    * parameter, the name is the type name of the referenced type.  If
-    * a JDBC driver does not need the type code or type name information,
-    * it may ignore it.
-    *
-    * Although it is intended for user-defined and Ref parameters,
-    * this method may be used to set a null parameter of any JDBC type.
-    * If the parameter does not have a user-defined or REF type, the given
-    * typeName is ignored.
-    *
-    *
-    * @param parameterName the name of the parameter
-    * @param sqlType a value from <code>java.sql.Types</code>
-    * @param typeName the fully-qualified name of an SQL user-defined type;
-    *        ignored if the parameter is not a user-defined type or
-    *        SQL <code>REF</code> value
-    * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
-    * @since 1.4
-    */
-   public void setNull (String parameterName, int sqlType, String typeName)
-       throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-   }
-
- /**
-    * Sets the designated parameter to the given Java <code>boolean</code> value.
-    * The driver converts this
-    * to an SQL <code>BIT</code> or <code>BOOLEAN</code> value when it sends it to the database.
-    *
-    * @param parameterName the name of the parameter
-    * @param x the parameter value
-    * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @see #getBoolean
-    * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
-    * @since 1.4
-    */
-   public void setBoolean(String parameterName, boolean x) throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-   }
-
-
-
- /**
-    * Sets the designated parameter to the given Java <code>byte</code> value.
-    * The driver converts this
-    * to an SQL <code>TINYINT</code> value when it sends it to the database.
-    *
-    * @param parameterName the name of the parameter
-    * @param x the parameter value
-    * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
-    * @see #getByte
-    * @since 1.4
-    */
-   public void setByte(String parameterName, byte x) throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-   }
-
-
- /**
-    * Sets the designated parameter to the given Java <code>short</code> value.
-    * The driver converts this
-    * to an SQL <code>SMALLINT</code> value when it sends it to the database.
-    *
-    * @param parameterName the name of the parameter
-    * @param x the parameter value
-    * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
-    * @see #getShort
-    * @since 1.4
-    */
-   public void setShort(String parameterName, short x) throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-   }
-
-
-   /**
-    * Sets the designated parameter to the given Java <code>int</code> value.
-    * The driver converts this
-    * to an SQL <code>INTEGER</code> value when it sends it to the database.
-    *
-    * @param parameterName the name of the parameter
-    * @param x the parameter value
-    * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
-    * @see #getInt
-    * @since 1.4
-    */
-   public void setInt(String parameterName, int x) throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-   }
-
- /**
-    * Sets the designated parameter to the given Java <code>long</code> value.
-    * The driver converts this
-    * to an SQL <code>BIGINT</code> value when it sends it to the database.
-    *
-    * @param parameterName the name of the parameter
-    * @param x the parameter value
-    * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
-    * @see #getLong
-    * @since 1.4
-    */
-   public void setLong(String parameterName, long x) throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-   }
-
-
- /**
-    * Sets the designated parameter to the given Java <code>float</code> value.
-    * The driver converts this
-    * to an SQL <code>FLOAT</code> value when it sends it to the database.
-    *
-    * @param parameterName the name of the parameter
-    * @param x the parameter value
-    * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
-    * @see #getFloat
-    * @since 1.4
-    */
-   public void setFloat(String parameterName, float x) throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-   }
-
- /**
-    * Sets the designated parameter to the given Java <code>double</code> value.
-    * The driver converts this
-    * to an SQL <code>DOUBLE</code> value when it sends it to the database.
-    *
-    * @param parameterName the name of the parameter
-    * @param x the parameter value
-    * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
-    * @see #getDouble
-    * @since 1.4
-    */
-   public void setDouble(String parameterName, double x) throws SQLException{
-        throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-   }
-
-    /**
-     * This method re populates the resBundle
-     * during the deserialization process
-     *
-     */
-    private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException {
-        // Default state initialization happens here
-        ois.defaultReadObject();
-        // Initialization of transient Res Bundle happens here .
-        try {
-           resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle();
-        } catch(IOException ioe) {}
-
-    }
-
-   static final long serialVersionUID = -3591946023893483003L;
-
- //------------------------- JDBC 4.1 -----------------------------------
-
-    public <T> T getObject(int columnIndex, Class<T> type) throws SQLException {
-        throw new SQLFeatureNotSupportedException("Not supported yet.");
-    }
-
-    public <T> T getObject(String columnLabel, Class<T> type) throws SQLException {
-        throw new SQLFeatureNotSupportedException("Not supported yet.");
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/rowset/JdbcRowSetResourceBundle.java b/ojluni/src/main/java/com/sun/rowset/JdbcRowSetResourceBundle.java
deleted file mode 100755
index acf7479..0000000
--- a/ojluni/src/main/java/com/sun/rowset/JdbcRowSetResourceBundle.java
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
- * Copyright (c) 2005, 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
- * 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.rowset;
-
-import java.io.*;
-import java.util.*;
-
-/**
- * This class is used to help in localization of resources,
- * especially the exception strings.
- *
- * @author Amit Handa
- */
-
-public class JdbcRowSetResourceBundle implements Serializable {
-
-    /**
-     * This <code>String</code> variable stores the location
-     * of the resource bundle location.
-     */
-    private static String fileName;
-
-    /**
-     * This variable will hold the <code>PropertyResourceBundle</code>
-     * of the text to be internationalized.
-     */
-    private transient PropertyResourceBundle propResBundle;
-
-    /**
-     * The constructor initializes to this object
-     *
-     */
-    private static volatile JdbcRowSetResourceBundle jpResBundle;
-
-    /**
-     * The variable which will represent the properties
-     * the suffix or extension of the resource bundle.
-     **/
-    private static final String PROPERTIES = "properties";
-
-    /**
-     * The variable to represent underscore
-     **/
-    private static final String UNDERSCORE = "_";
-
-    /**
-     * The variable which will represent dot
-     **/
-    private static final String DOT = ".";
-
-    /**
-     * The variable which will represent the slash.
-     **/
-    private static final String SLASH = "/";
-
-    /**
-     * The variable where the default resource bundle will
-     * be placed.
-     **/
-    private static final String PATH = "com/sun/rowset/RowSetResourceBundle";
-
-    /**
-     * The constructor which initializes the resource bundle.
-     * Note this is a private constructor and follows Singleton
-     * Design Pattern.
-     *
-     * @throws IOException if unable to load the ResourceBundle
-     * according to locale or the default one.
-     */
-    private JdbcRowSetResourceBundle () throws IOException {
-        // Try to load the resource bundle according
-        // to the locale. Else if no bundle found according
-        // to the locale load the default.
-
-        // In default case the default locale resource bundle
-        // should always be loaded else it
-        // will be difficult to throw appropriate
-        // exception string messages.
-        Locale locale = Locale.getDefault();
-
-        // Load appropriate bundle according to locale
-         propResBundle = (PropertyResourceBundle) ResourceBundle.getBundle(PATH,
-                           locale, Thread.currentThread().getContextClassLoader());
-
-   }
-
-    /**
-     * This method is used to get a handle to the
-     * initialized instance of this class. Note that
-     * at any time there is only one instance of this
-     * class initialized which will be returned.
-     *
-     * @throws IOException if unable to find the RowSetResourceBundle.properties
-     */
-    public static JdbcRowSetResourceBundle getJdbcRowSetResourceBundle()
-    throws IOException {
-
-         if(jpResBundle == null){
-             synchronized(JdbcRowSetResourceBundle.class) {
-                if(jpResBundle == null){
-                    jpResBundle = new JdbcRowSetResourceBundle();
-                } //end if
-             } //end synchronized block
-         } //end if
-         return jpResBundle;
-    }
-
-    /**
-     * This method returns an enumerated handle of the keys
-     * which correspond to values translated to various locales.
-     *
-     * @return an enumeration of keys which have messages tranlated to
-     * corresponding locales.
-     */
-    public Enumeration getKeys() {
-       return propResBundle.getKeys();
-    }
-
-
-    /**
-     * This method takes the key as an argument and
-     * returns the corresponding value reading it
-     * from the Resource Bundle loaded earlier.
-     *
-     * @return value in locale specific language
-     * according to the key passed.
-     */
-    public Object handleGetObject(String key) {
-       return propResBundle.handleGetObject(key);
-    }
-
-    static final long serialVersionUID = 436199386225359954L;
-}
diff --git a/ojluni/src/main/java/com/sun/rowset/JoinRowSetImpl.java b/ojluni/src/main/java/com/sun/rowset/JoinRowSetImpl.java
deleted file mode 100755
index 05feebc..0000000
--- a/ojluni/src/main/java/com/sun/rowset/JoinRowSetImpl.java
+++ /dev/null
@@ -1,4353 +0,0 @@
-/*
- * Copyright (c) 2003, 2011, 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.rowset;
-
-import java.sql.*;
-import javax.sql.*;
-import javax.naming.*;
-import java.io.*;
-import java.math.*;
-import java.util.*;
-
-import javax.sql.rowset.*;
-import javax.sql.rowset.spi.SyncProvider;
-import javax.sql.rowset.spi.SyncProviderException;
-
-/**
- * The standard implementation of the <code>JoinRowSet</code>
- * interface providing an SQL <code>JOIN</code> between <code>RowSet</code>
- * objects.
- * <P>
- * The implementation provides an ANSI-style <code>JOIN</code> providing an
- * inner join between two tables. Any unmatched rows in either table of the
- * join are  discarded.
- * <p>
- * Typically, a <code>JoinRowSet</code> implementation is leveraged by
- * <code>RowSet</code> instances that are in a disconnected environment and
- * thus do not have the luxury of an open connection to the data source to
- * establish logical relationships between themselves. In other words, it is
- * largely <code>CachedRowSet</code> objects and implementations derived from
- * the <code>CachedRowSet</code> interface that will use the <code>JoinRowSetImpl</code>
- * implementation.
- *
- * @author Amit Handa, Jonathan Bruce
- */
-public class JoinRowSetImpl extends WebRowSetImpl implements JoinRowSet {
-    /**
-     * A <code>Vector</code> object that contains the <code>RowSet</code> objects
-     * that have been added to this <code>JoinRowSet</code> object.
-     */
-    private Vector<CachedRowSetImpl> vecRowSetsInJOIN;
-
-    /**
-     * The <code>CachedRowSet</code> object that encapsulates this
-     * <code>JoinRowSet</code> object.
-     * When <code>RowSet</code> objects are added to this <code>JoinRowSet</code>
-     * object, they are also added to <i>crsInternal</i> to form the same kind of
-     * SQL <code>JOIN</code>.  As a result, methods for making updates to this
-     * <code>JoinRowSet</code> object can use <i>crsInternal</i> methods in their
-     * implementations.
-     */
-    private CachedRowSetImpl crsInternal;
-
-    /**
-     * A <code>Vector</code> object containing the types of join that have been set
-     * for this <code>JoinRowSet</code> object.
-     * The last join type set forms the basis of succeeding joins.
-     */
-    private Vector<Integer> vecJoinType;
-
-    /**
-     * A <code>Vector</code> object containing the names of all the tables entering
-     * the join.
-     */
-    private Vector<String> vecTableNames;
-
-    /**
-     * An <code>int</code> that indicates the column index of the match column.
-     */
-    private int iMatchKey;
-
-    /**
-     * A <code>String</code> object that stores the name of the match column.
-     */
-    private String strMatchKey ;
-
-    /**
-     * An array of <code>boolean</code> values indicating the types of joins supported
-     * by this <code>JoinRowSet</code> implementation.
-     */
-    boolean[] supportedJOINs;
-
-    /**
-     * The <code>WebRowSet</code> object that encapsulates this <code>JoinRowSet</code>
-     * object. This <code>WebRowSet</code> object allows this <code>JoinRowSet</code>
-     * object to leverage the properties and methods of a <code>WebRowSet</code>
-     * object.
-     */
-    private WebRowSet wrs;
-
-
-    /**
-     * Constructor for <code>JoinRowSetImpl</code> class. Configures various internal data
-     * structures to provide mechanisms required for <code>JoinRowSet</code> interface
-     * implementation.
-     *
-     * @throws SQLException if an error occurs in instantiating an instance of
-     * <code>JoinRowSetImpl</code>
-     */
-    public JoinRowSetImpl() throws SQLException {
-
-        vecRowSetsInJOIN = new Vector<CachedRowSetImpl>();
-        crsInternal = new CachedRowSetImpl();
-        vecJoinType = new Vector<Integer>();
-        vecTableNames = new Vector<String>();
-        iMatchKey = -1;
-        strMatchKey = null;
-        supportedJOINs =
-              new boolean[] {false, true, false, false, false};
-       try {
-           resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle();
-        } catch(IOException ioe) {
-            throw new RuntimeException(ioe);
-        }
-
-    }
-
-    /**
-     * Adds the given <code>RowSet</code> object to this
-     * <code>JoinRowSet</code> object.  If this
-     * rowset is the first to be added to the <code>JoinRowSet</code>
-     * object, it forms the basis for the <code>JOIN</code>
-     * relationships to be formed.
-     * <p>
-     * This method should be used when the given <code>RowSet</code> object
-     * already has a match column set.
-     *
-     * @param rowset the <code>RowSet</code> object that implements the
-     *         <code>Joinable</code> interface and is to be added
-     *         to this <code>JoinRowSet</code> object
-     * @throws SQLException if an empty <code>RowSet</code> is added to the to the
-     *         <code>JoinRowSet</code>; if a match column is not set; or if an
-     *         additional <code>RowSet</code> violates the active <code>JOIN</code>
-     * @see CachedRowSet#setMatchColumn
-     */
-    public void addRowSet(Joinable rowset) throws SQLException {
-        boolean boolColId, boolColName;
-
-        boolColId = false;
-        boolColName = false;
-        CachedRowSetImpl cRowset;
-
-        if(!(rowset instanceof RowSet)) {
-            throw new SQLException(resBundle.handleGetObject("joinrowsetimpl.notinstance").toString());
-        }
-
-        if(rowset instanceof JdbcRowSetImpl ) {
-            cRowset = new CachedRowSetImpl();
-            cRowset.populate((RowSet)rowset);
-            if(cRowset.size() == 0){
-                throw new SQLException(resBundle.handleGetObject("joinrowsetimpl.emptyrowset").toString());
-            }
-
-
-            try {
-                int matchColumnCount = 0;
-                for(int i=0; i< rowset.getMatchColumnIndexes().length; i++) {
-                    if(rowset.getMatchColumnIndexes()[i] != -1)
-                        ++ matchColumnCount;
-                    else
-                        break;
-                }
-                int[] pCol = new int[matchColumnCount];
-                for(int i=0; i<matchColumnCount; i++)
-                   pCol[i] = rowset.getMatchColumnIndexes()[i];
-                cRowset.setMatchColumn(pCol);
-            } catch(SQLException sqle) {
-
-            }
-
-        } else {
-             cRowset = (CachedRowSetImpl)rowset;
-             if(cRowset.size() == 0){
-                 throw new SQLException(resBundle.handleGetObject("joinrowsetimpl.emptyrowset").toString());
-             }
-        }
-
-        // Either column id or column name will be set
-        // If both not set throw exception.
-
-        try {
-             iMatchKey = (cRowset.getMatchColumnIndexes())[0];
-        } catch(SQLException sqle) {
-           //if not set catch the exception but do nothing now.
-             boolColId = true;
-        }
-
-        try {
-             strMatchKey = (cRowset.getMatchColumnNames())[0];
-        } catch(SQLException sqle) {
-           //if not set catch the exception but do nothing now.
-           boolColName = true;
-        }
-
-        if(boolColId && boolColName) {
-           // neither setter methods have been used to set
-           throw new SQLException(resBundle.handleGetObject("joinrowsetimpl.matchnotset").toString());
-        } else {
-           //if(boolColId || boolColName)
-           // either of the setter methods have been set.
-           if(boolColId){
-              //
-              ArrayList<Integer> indices = new ArrayList<>();
-              for(int i=0;i<cRowset.getMatchColumnNames().length;i++) {
-                  if( (strMatchKey = (cRowset.getMatchColumnNames())[i]) != null) {
-                      iMatchKey = cRowset.findColumn(strMatchKey);
-                      indices.add(iMatchKey);
-                  }
-                  else
-                      break;
-              }
-              int[] indexes = new int[indices.size()];
-              for(int i=0; i<indices.size();i++)
-                  indexes[i] = ((Integer)indices.get(i)).intValue();
-              cRowset.setMatchColumn(indexes);
-              // Set the match column here because join will be
-              // based on columnId,
-              // (nested for loop in initJOIN() checks for equality
-              //  based on columnIndex)
-           } else {
-              //do nothing, iMatchKey is set.
-           }
-           // Now both iMatchKey and strMatchKey have been set pointing
-           // to the same column
-        }
-
-        // Till first rowset setJoinType may not be set because
-        // default type is JoinRowSet.INNER_JOIN which should
-        // be set and for subsequent additions of rowset, if not set
-        // keep on adding join type as JoinRowSet.INNER_JOIN
-        // to vecJoinType.
-
-        initJOIN(cRowset);
-    }
-
-    /**
-     * Adds the given <code>RowSet</code> object to the <code>JOIN</code> relation
-     * and sets the designated column as the match column.
-     * If the given <code>RowSet</code>
-     * object is the first to be added to this <code>JoinRowSet</code>
-     * object, it forms the basis of the <code>JOIN</code> relationship to be formed
-     * when other <code>RowSet</code> objects are added .
-     * <P>
-     * This method should be used when the given <code>RowSet</code> object
-     * does not already have a match column set.
-     *
-     * @param rowset a <code>RowSet</code> object to be added to
-     *         the <code>JOIN</code> relation; must implement the <code>Joinable</code>
-     *         interface
-     * @param columnIdx an <code>int</code> giving the index of the column to be set as
-     *         the match column
-     * @throws SQLException if (1) an empty <code>RowSet</code> object is added to this
-     *         <code>JoinRowSet</code> object, (2) a match column has not been set,
-     *         or (3) the <code>RowSet</code> object being added violates the active
-     *         <code>JOIN</code>
-     * @see CachedRowSet#unsetMatchColumn
-     */
-    public void addRowSet(RowSet rowset, int columnIdx) throws SQLException {
-        //passing the rowset as well as the columnIdx to form the joinrowset.
-
-        ((CachedRowSetImpl)rowset).setMatchColumn(columnIdx);
-
-        addRowSet((Joinable)rowset);
-    }
-
-    /**
-     * Adds the given <code>RowSet</code> object to the <code>JOIN</code> relationship
-     * and sets the designated column as the match column. If the given
-     * <code>RowSet</code>
-     * object is the first to be added to this <code>JoinRowSet</code>
-     * object, it forms the basis of the <code>JOIN</code> relationship to be formed
-     * when other <code>RowSet</code> objects are added .
-     * <P>
-     * This method should be used when the given <code>RowSet</code> object
-     * does not already have a match column set.
-     *
-     * @param rowset a <code>RowSet</code> object to be added to
-     *         the <code>JOIN</code> relation
-     * @param columnName a <code>String</code> object giving the name of the column
-     *        to be set as the match column; must implement the <code>Joinable</code>
-     *        interface
-     * @throws SQLException if (1) an empty <code>RowSet</code> object is added to this
-     *         <code>JoinRowSet</code> object, (2) a match column has not been set,
-     *         or (3) the <code>RowSet</code> object being added violates the active
-     *         <code>JOIN</code>
-     */
-    public void addRowSet(RowSet rowset, String columnName) throws SQLException {
-        //passing the rowset as well as the columnIdx to form the joinrowset.
-        ((CachedRowSetImpl)rowset).setMatchColumn(columnName);
-        addRowSet((Joinable)rowset);
-    }
-
-    /**
-     * Adds the given <code>RowSet</code> objects to the <code>JOIN</code> relationship
-     * and sets the designated columns as the match columns. If the first
-     * <code>RowSet</code> object in the array of <code>RowSet</code> objects
-     * is the first to be added to this <code>JoinRowSet</code>
-     * object, it forms the basis of the <code>JOIN</code> relationship to be formed
-     * when other <code>RowSet</code> objects are added.
-     * <P>
-     * The first <code>int</code>
-     * in <i>columnIdx</i> is used to set the match column for the first
-     * <code>RowSet</code> object in <i>rowset</i>, the second <code>int</code>
-     * in <i>columnIdx</i> is used to set the match column for the second
-     * <code>RowSet</code> object in <i>rowset</i>, and so on.
-     * <P>
-     * This method should be used when the given <code>RowSet</code> objects
-     * do not already have match columns set.
-     *
-     * @param rowset an array of <code>RowSet</code> objects to be added to
-     *         the <code>JOIN</code> relation; each <code>RowSet</code> object must
-     *         implement the <code>Joinable</code> interface
-     * @param columnIdx an array of <code>int</code> values designating the columns
-     *        to be set as the
-     *        match columns for the <code>RowSet</code> objects in <i>rowset</i>
-     * @throws SQLException if the number of <code>RowSet</code> objects in
-     *         <i>rowset</i> is not equal to the number of <code>int</code> values
-     *         in <i>columnIdx</i>
-     */
-    public void addRowSet(RowSet[] rowset,
-                          int[] columnIdx) throws SQLException {
-    //validate if length of rowset array is same as length of int array.
-     if(rowset.length != columnIdx.length) {
-        throw new SQLException
-             (resBundle.handleGetObject("joinrowsetimpl.numnotequal").toString());
-     } else {
-        for(int i=0; i< rowset.length; i++) {
-           ((CachedRowSetImpl)rowset[i]).setMatchColumn(columnIdx[i]);
-           addRowSet((Joinable)rowset[i]);
-        } //end for
-     } //end if
-
-   }
-
-
-    /**
-     * Adds the given <code>RowSet</code> objects to the <code>JOIN</code> relationship
-     * and sets the designated columns as the match columns. If the first
-     * <code>RowSet</code> object in the array of <code>RowSet</code> objects
-     * is the first to be added to this <code>JoinRowSet</code>
-     * object, it forms the basis of the <code>JOIN</code> relationship to be formed
-     * when other <code>RowSet</code> objects are added.
-     * <P>
-     * The first <code>String</code> object
-     * in <i>columnName</i> is used to set the match column for the first
-     * <code>RowSet</code> object in <i>rowset</i>, the second <code>String</code>
-     * object in <i>columnName</i> is used to set the match column for the second
-     * <code>RowSet</code> object in <i>rowset</i>, and so on.
-     * <P>
-     * This method should be used when the given <code>RowSet</code> objects
-     * do not already have match columns set.
-     *
-     * @param rowset an array of <code>RowSet</code> objects to be added to
-     *         the <code>JOIN</code> relation; each <code>RowSet</code> object must
-     *         implement the <code>Joinable</code> interface
-     * @param columnName an array of <code>String</code> objects designating the columns
-     *        to be set as the
-     *        match columns for the <code>RowSet</code> objects in <i>rowset</i>
-     * @throws SQLException if the number of <code>RowSet</code> objects in
-     *         <i>rowset</i> is not equal to the number of <code>String</code> objects
-     *         in <i>columnName</i>, an empty <code>JdbcRowSet</code> is added to the
-     *         <code>JoinRowSet</code>, if a match column is not set,
-     *         or one or the <code>RowSet</code> objects in <i>rowset</i> violates the
-     *         active <code>JOIN</code>
-     */
-    public void addRowSet(RowSet[] rowset,
-                          String[] columnName) throws SQLException {
-    //validate if length of rowset array is same as length of int array.
-
-     if(rowset.length != columnName.length) {
-        throw new SQLException
-                 (resBundle.handleGetObject("joinrowsetimpl.numnotequal").toString());
-     } else {
-        for(int i=0; i< rowset.length; i++) {
-           ((CachedRowSetImpl)rowset[i]).setMatchColumn(columnName[i]);
-           addRowSet((Joinable)rowset[i]);
-        } //end for
-     } //end if
-
-    }
-
-    /**
-     * Returns a Collection of the <code>RowSet</code> object instances
-     * currently residing with the instance of the <code>JoinRowSet</code>
-     * object instance. This should return the 'n' number of RowSet contained
-     * within the JOIN and maintain any updates that have occoured while in
-     * this union.
-     *
-     * @return A <code>Collection</code> of the added <code>RowSet</code>
-     * object instances
-     * @throws SQLException if an error occours generating a collection
-     * of the originating RowSets contained within the JOIN.
-     */
-    public Collection getRowSets() throws SQLException {
-        return vecRowSetsInJOIN;
-    }
-
-    /**
-     * Returns a string array of the RowSet names currently residing
-     * with the <code>JoinRowSet</code> object instance.
-     *
-     * @return a string array of the RowSet names
-     * @throws SQLException if an error occours retrieving the RowSet names
-     * @see CachedRowSet#setTableName
-     */
-    public String[] getRowSetNames() throws SQLException {
-        Object [] arr = vecTableNames.toArray();
-        String []strArr = new String[arr.length];
-
-        for( int i = 0;i < arr.length; i++) {
-           strArr[i] = arr[i].toString();
-        }
-
-        return strArr;
-    }
-
-    /**
-     * Creates a separate <code>CachedRowSet</code> object that contains the data
-     * in this <code>JoinRowSet</code> object.
-     * <P>
-     * If any updates or modifications have been applied to this <code>JoinRowSet</code>
-     * object, the <code>CachedRowSet</code> object returned by this method will
-     * not be able to persist
-     * the changes back to the originating rows and tables in the
-     * data source because the data may be from different tables. The
-     * <code>CachedRowSet</code> instance returned should not
-     * contain modification data, such as whether a row has been updated or what the
-     * original values are.  Also, the <code>CachedRowSet</code> object should clear
-     * its  properties pertaining to
-     * its originating SQL statement. An application should reset the
-     * SQL statement using the <code>RowSet.setCommand</code> method.
-     * <p>
-     * To persist changes back to the data source, the <code>JoinRowSet</code> object
-     * calls the method <code>acceptChanges</code>. Implementations
-     * can leverage the internal data and update tracking in their
-     * implementations to interact with the <code>SyncProvider</code> to persist any
-     * changes.
-     *
-     * @return a <code>CachedRowSet</code> object containing the contents of this
-     *         <code>JoinRowSet</code> object
-     * @throws SQLException if an error occurs assembling the <code>CachedRowSet</code>
-     *         object
-     * @see javax.sql.RowSet
-     * @see javax.sql.rowset.CachedRowSet
-     * @see javax.sql.rowset.spi.SyncProvider
-     */
-    public CachedRowSet toCachedRowSet() throws SQLException {
-        return crsInternal;
-    }
-
-    /**
-     * Returns <code>true</code> if this <code>JoinRowSet</code> object supports
-     * an SQL <code>CROSS_JOIN</code> and <code>false</code> if it does not.
-     *
-     * @return <code>true</code> if the CROSS_JOIN is supported; <code>false</code>
-     *         otherwise
-     */
-    public boolean supportsCrossJoin() {
-        return supportedJOINs[JoinRowSet.CROSS_JOIN];
-    }
-
-    /**
-     * Returns <code>true</code> if this <code>JoinRowSet</code> object supports
-     * an SQL <code>INNER_JOIN</code> and <code>false</code> if it does not.
-     *
-     * @return true is the INNER_JOIN is supported; false otherwise
-     */
-    public boolean supportsInnerJoin() {
-        return supportedJOINs[JoinRowSet.INNER_JOIN];
-    }
-
-    /**
-     * Returns <code>true</code> if this <code>JoinRowSet</code> object supports
-     * an SQL <code>LEFT_OUTER_JOIN</code> and <code>false</code> if it does not.
-     *
-     * @return true is the LEFT_OUTER_JOIN is supported; false otherwise
-     */
-    public boolean supportsLeftOuterJoin() {
-        return supportedJOINs[JoinRowSet.LEFT_OUTER_JOIN];
-    }
-
-    /**
-     * Returns <code>true</code> if this <code>JoinRowSet</code> object supports
-     * an SQL <code>RIGHT_OUTER_JOIN</code> and <code>false</code> if it does not.
-     *
-     * @return true is the RIGHT_OUTER_JOIN is supported; false otherwise
-     */
-    public boolean supportsRightOuterJoin() {
-        return supportedJOINs[JoinRowSet.RIGHT_OUTER_JOIN];
-    }
-
-    /**
-     * Returns <code>true</code> if this <code>JoinRowSet</code> object supports
-     * an SQL <code>FULL_JOIN</code> and <code>false</code> if it does not.
-     *
-     * @return true is the FULL_JOIN is supported; false otherwise
-     */
-    public boolean supportsFullJoin() {
-        return supportedJOINs[JoinRowSet.FULL_JOIN];
-
-    }
-
-    /**
-     * Sets the type of SQL <code>JOIN</code> that this <code>JoinRowSet</code>
-     * object will use. This method
-     * allows an application to adjust the type of <code>JOIN</code> imposed
-     * on tables contained within this <code>JoinRowSet</code> object and to do it
-     * on the fly. The last <code>JOIN</code> type set determines the type of
-     * <code>JOIN</code> to be performed.
-     * <P>
-     * Implementations should throw an <code>SQLException</code> if they do
-     * not support the given <code>JOIN</code> type.
-     *
-     * @param type one of the standard <code>JoinRowSet</code> constants
-     *        indicating the type of <code>JOIN</code>.  Must be one of the
-     *        following:
-     *            <code>JoinRowSet.CROSS_JOIN</code>
-     *            <code>JoinRowSet.INNER_JOIN</code>
-     *            <code>JoinRowSet.LEFT_OUTER_JOIN</code>
-     *            <code>JoinRowSet.RIGHT_OUTER_JOIN</code>, or
-     *            <code>JoinRowSet.FULL_JOIN</code>
-     * @throws SQLException if an unsupported <code>JOIN</code> type is set
-     */
-    public void setJoinType(int type) throws SQLException {
-        // The join which governs the join of two rowsets is the last
-        // join set, using setJoinType
-
-       if (type >= JoinRowSet.CROSS_JOIN && type <= JoinRowSet.FULL_JOIN) {
-           if (type != JoinRowSet.INNER_JOIN) {
-               // This 'if' will be removed after all joins are implemented.
-               throw new SQLException(resBundle.handleGetObject("joinrowsetimpl.notsupported").toString());
-           } else {
-              Integer Intgr = Integer.valueOf(JoinRowSet.INNER_JOIN);
-              vecJoinType.add(Intgr);
-           }
-       } else {
-          throw new SQLException(resBundle.handleGetObject("joinrowsetimpl.notdefined").toString());
-       }  //end if
-    }
-
-
-    /**
-     * This checks for a match column for
-     * whether it exists or not.
-     *
-     * @param <code>CachedRowSet</code> object whose match column needs to be checked.
-     * @throws SQLException if MatchColumn is not set.
-     */
-    private boolean checkforMatchColumn(Joinable rs) throws SQLException {
-        int[] i = rs.getMatchColumnIndexes();
-        if (i.length <= 0) {
-            return false;
-        }
-        return true;
-    }
-
-    /**
-     * Internal initialization of <code>JoinRowSet</code>.
-     */
-    private void initJOIN(CachedRowSet rowset) throws SQLException {
-        try {
-
-            CachedRowSetImpl cRowset = (CachedRowSetImpl)rowset;
-            // Create a new CachedRowSet object local to this function.
-            CachedRowSetImpl crsTemp = new CachedRowSetImpl();
-            RowSetMetaDataImpl rsmd = new RowSetMetaDataImpl();
-
-            /* The following 'if block' seems to be always going true.
-               commenting this out for present
-
-            if (!supportedJOINs[1]) {
-                throw new SQLException(resBundle.handleGetObject("joinrowsetimpl.notsupported").toString());
-            }
-
-            */
-
-            if (vecRowSetsInJOIN.isEmpty() ) {
-
-                // implies first cRowset to be added to the Join
-                // simply add this as a CachedRowSet.
-                // Also add it to the class variable of type vector
-                // do not need to check "type" of Join but it should be set.
-                crsInternal = (CachedRowSetImpl)rowset.createCopy();
-                crsInternal.setMetaData((RowSetMetaDataImpl)cRowset.getMetaData());
-                // metadata will also set the MatchColumn.
-
-                vecRowSetsInJOIN.add(cRowset);
-
-            } else {
-                // At this point we are ready to add another rowset to 'this' object
-                // Check the size of vecJoinType and vecRowSetsInJoin
-
-                // If nothing is being set, internally call setJoinType()
-                // to set to JoinRowSet.INNER_JOIN.
-
-                // For two rowsets one (valid) entry should be there in vecJoinType
-                // For three rowsets two (valid) entries should be there in vecJoinType
-
-                // Maintain vecRowSetsInJoin = vecJoinType + 1
-
-
-                if( (vecRowSetsInJOIN.size() - vecJoinType.size() ) == 2 ) {
-                   // we are going to add next rowset and setJoinType has not been set
-                   // recently, so set it to setJoinType() to JoinRowSet.INNER_JOIN.
-                   // the default join type
-
-                        setJoinType(JoinRowSet.INNER_JOIN);
-                } else if( (vecRowSetsInJOIN.size() - vecJoinType.size() ) == 1  ) {
-                   // do nothing setjoinType() has been set by programmer
-                }
-
-                // Add the table names to the class variable of type vector.
-                vecTableNames.add(crsInternal.getTableName());
-                vecTableNames.add(cRowset.getTableName());
-                // Now we have two rowsets crsInternal and cRowset which need
-                // to be INNER JOIN'ED to form a new rowset
-                // Compare table1.MatchColumn1.value1 == { table2.MatchColumn2.value1
-                //                              ... upto table2.MatchColumn2.valueN }
-                //     ...
-                // Compare table1.MatchColumn1.valueM == { table2.MatchColumn2.value1
-                //                              ... upto table2.MatchColumn2.valueN }
-                //
-                // Assuming first rowset has M rows and second N rows.
-
-                int rowCount2 = cRowset.size();
-                int rowCount1 = crsInternal.size();
-
-                // total columns in the new CachedRowSet will be sum of both -1
-                // (common column)
-                int matchColumnCount = 0;
-                for(int i=0; i< crsInternal.getMatchColumnIndexes().length; i++) {
-                    if(crsInternal.getMatchColumnIndexes()[i] != -1)
-                        ++ matchColumnCount;
-                    else
-                        break;
-                }
-
-                rsmd.setColumnCount
-                    (crsInternal.getMetaData().getColumnCount() +
-                     cRowset.getMetaData().getColumnCount() - matchColumnCount);
-
-                crsTemp.setMetaData(rsmd);
-                crsInternal.beforeFirst();
-                cRowset.beforeFirst();
-                for (int i = 1 ; i <= rowCount1 ; i++) {
-                  if(crsInternal.isAfterLast() ) {
-                    break;
-                  }
-                  if(crsInternal.next()) {
-                    cRowset.beforeFirst();
-                    for(int j = 1 ; j <= rowCount2 ; j++) {
-                         if( cRowset.isAfterLast()) {
-                            break;
-                         }
-                         if(cRowset.next()) {
-                             boolean match = true;
-                             for(int k=0; k<matchColumnCount; k++) {
-                                 if (!crsInternal.getObject( crsInternal.getMatchColumnIndexes()[k]).equals
-                                         (cRowset.getObject(cRowset.getMatchColumnIndexes()[k]))) {
-                                     match = false;
-                                     break;
-                                 }
-                             }
-                             if (match) {
-
-                                int p;
-                                int colc = 0;   // reset this variable everytime you loop
-                                // re create a JoinRowSet in crsTemp object
-                                crsTemp.moveToInsertRow();
-
-                                // create a new rowset crsTemp with data from first rowset
-                            for( p=1;
-                                p<=crsInternal.getMetaData().getColumnCount();p++) {
-
-                                match = false;
-                                for(int k=0; k<matchColumnCount; k++) {
-                                 if (p == crsInternal.getMatchColumnIndexes()[k] ) {
-                                     match = true;
-                                     break;
-                                 }
-                                }
-                                    if ( !match ) {
-
-                                    crsTemp.updateObject(++colc, crsInternal.getObject(p));
-                                    // column type also needs to be passed.
-
-                                    rsmd.setColumnName
-                                        (colc, crsInternal.getMetaData().getColumnName(p));
-                                    rsmd.setTableName(colc, crsInternal.getTableName());
-
-                                    rsmd.setColumnType(p, crsInternal.getMetaData().getColumnType(p));
-                                    rsmd.setAutoIncrement(p, crsInternal.getMetaData().isAutoIncrement(p));
-                                    rsmd.setCaseSensitive(p, crsInternal.getMetaData().isCaseSensitive(p));
-                                    rsmd.setCatalogName(p, crsInternal.getMetaData().getCatalogName(p));
-                                    rsmd.setColumnDisplaySize(p, crsInternal.getMetaData().getColumnDisplaySize(p));
-                                    rsmd.setColumnLabel(p, crsInternal.getMetaData().getColumnLabel(p));
-                                    rsmd.setColumnType(p, crsInternal.getMetaData().getColumnType(p));
-                                    rsmd.setColumnTypeName(p, crsInternal.getMetaData().getColumnTypeName(p));
-                                    rsmd.setCurrency(p,crsInternal.getMetaData().isCurrency(p) );
-                                    rsmd.setNullable(p, crsInternal.getMetaData().isNullable(p));
-                                    rsmd.setPrecision(p, crsInternal.getMetaData().getPrecision(p));
-                                    rsmd.setScale(p, crsInternal.getMetaData().getScale(p));
-                                    rsmd.setSchemaName(p, crsInternal.getMetaData().getSchemaName(p));
-                                    rsmd.setSearchable(p, crsInternal.getMetaData().isSearchable(p));
-                                    rsmd.setSigned(p, crsInternal.getMetaData().isSigned(p));
-
-                                } else {
-                                    // will happen only once, for that  merged column pass
-                                    // the types as OBJECT, if types not equal
-
-                                    crsTemp.updateObject(++colc, crsInternal.getObject(p));
-
-                                    rsmd.setColumnName(colc, crsInternal.getMetaData().getColumnName(p));
-                                    rsmd.setTableName
-                                        (colc, crsInternal.getTableName()+
-                                         "#"+
-                                         cRowset.getTableName());
-
-
-                                    rsmd.setColumnType(p, crsInternal.getMetaData().getColumnType(p));
-                                    rsmd.setAutoIncrement(p, crsInternal.getMetaData().isAutoIncrement(p));
-                                    rsmd.setCaseSensitive(p, crsInternal.getMetaData().isCaseSensitive(p));
-                                    rsmd.setCatalogName(p, crsInternal.getMetaData().getCatalogName(p));
-                                    rsmd.setColumnDisplaySize(p, crsInternal.getMetaData().getColumnDisplaySize(p));
-                                    rsmd.setColumnLabel(p, crsInternal.getMetaData().getColumnLabel(p));
-                                    rsmd.setColumnType(p, crsInternal.getMetaData().getColumnType(p));
-                                    rsmd.setColumnTypeName(p, crsInternal.getMetaData().getColumnTypeName(p));
-                                    rsmd.setCurrency(p,crsInternal.getMetaData().isCurrency(p) );
-                                    rsmd.setNullable(p, crsInternal.getMetaData().isNullable(p));
-                                    rsmd.setPrecision(p, crsInternal.getMetaData().getPrecision(p));
-                                    rsmd.setScale(p, crsInternal.getMetaData().getScale(p));
-                                    rsmd.setSchemaName(p, crsInternal.getMetaData().getSchemaName(p));
-                                    rsmd.setSearchable(p, crsInternal.getMetaData().isSearchable(p));
-                                    rsmd.setSigned(p, crsInternal.getMetaData().isSigned(p));
-
-                                    //don't do ++colc in the above statement
-                                } //end if
-                            } //end for
-
-
-                            // append the rowset crsTemp, with data from second rowset
-                            for(int q=1;
-                                q<= cRowset.getMetaData().getColumnCount();q++) {
-
-                                match = false;
-                                for(int k=0; k<matchColumnCount; k++) {
-                                 if (q == cRowset.getMatchColumnIndexes()[k] ) {
-                                     match = true;
-                                     break;
-                                 }
-                                }
-                                    if ( !match ) {
-
-                                    crsTemp.updateObject(++colc, cRowset.getObject(q));
-
-                                    rsmd.setColumnName
-                                        (colc, cRowset.getMetaData().getColumnName(q));
-                                    rsmd.setTableName(colc, cRowset.getTableName());
-
-                                    /**
-                                      * This will happen for a special case scenario. The value of 'p'
-                                      * will always be one more than the number of columns in the first
-                                      * rowset in the join. So, for a value of 'q' which is the number of
-                                      * columns in the second rowset that participates in the join.
-                                      * So decrement value of 'p' by 1 else `p+q-1` will be out of range.
-                                      **/
-
-                                    //if((p+q-1) > ((crsInternal.getMetaData().getColumnCount()) +
-                                      //            (cRowset.getMetaData().getColumnCount())     - 1)) {
-                                      // --p;
-                                    //}
-                                    rsmd.setColumnType(p+q-1, cRowset.getMetaData().getColumnType(q));
-                                    rsmd.setAutoIncrement(p+q-1, cRowset.getMetaData().isAutoIncrement(q));
-                                    rsmd.setCaseSensitive(p+q-1, cRowset.getMetaData().isCaseSensitive(q));
-                                    rsmd.setCatalogName(p+q-1, cRowset.getMetaData().getCatalogName(q));
-                                    rsmd.setColumnDisplaySize(p+q-1, cRowset.getMetaData().getColumnDisplaySize(q));
-                                    rsmd.setColumnLabel(p+q-1, cRowset.getMetaData().getColumnLabel(q));
-                                    rsmd.setColumnType(p+q-1, cRowset.getMetaData().getColumnType(q));
-                                    rsmd.setColumnTypeName(p+q-1, cRowset.getMetaData().getColumnTypeName(q));
-                                    rsmd.setCurrency(p+q-1,cRowset.getMetaData().isCurrency(q) );
-                                    rsmd.setNullable(p+q-1, cRowset.getMetaData().isNullable(q));
-                                    rsmd.setPrecision(p+q-1, cRowset.getMetaData().getPrecision(q));
-                                    rsmd.setScale(p+q-1, cRowset.getMetaData().getScale(q));
-                                    rsmd.setSchemaName(p+q-1, cRowset.getMetaData().getSchemaName(q));
-                                    rsmd.setSearchable(p+q-1, cRowset.getMetaData().isSearchable(q));
-                                    rsmd.setSigned(p+q-1, cRowset.getMetaData().isSigned(q));
-                                }
-                                else {
-                                    --p;
-                                }
-                            }
-                            crsTemp.insertRow();
-                            crsTemp.moveToCurrentRow();
-
-                        } else {
-                            // since not equa12
-                            // so do nothing
-                        } //end if
-                         // bool1 = cRowset.next();
-                         }
-
-                    } // end inner for
-                     //bool2 = crsInternal.next();
-                   }
-
-                } //end outer for
-                crsTemp.setMetaData(rsmd);
-                crsTemp.setOriginal();
-
-                // Now the join is done.
-               // Make crsInternal = crsTemp, to be ready for next merge, if at all.
-
-                int[] pCol = new int[matchColumnCount];
-                for(int i=0; i<matchColumnCount; i++)
-                   pCol[i] = crsInternal.getMatchColumnIndexes()[i];
-
-                crsInternal = (CachedRowSetImpl)crsTemp.createCopy();
-
-                // Because we add the first rowset as crsInternal to the
-                // merged rowset, so pCol will point to the Match column.
-                // until reset, am not sure we should set this or not(?)
-                // if this is not set next inner join won't happen
-                // if we explicitly do not set a set MatchColumn of
-                // the new crsInternal.
-
-                crsInternal.setMatchColumn(pCol);
-                // Add the merged rowset to the class variable of type vector.
-                crsInternal.setMetaData(rsmd);
-                vecRowSetsInJOIN.add(cRowset);
-            } //end if
-        } catch(SQLException sqle) {
-            // %%% Exception should not dump here:
-            sqle.printStackTrace();
-            throw new SQLException(resBundle.handleGetObject("joinrowsetimpl.initerror").toString() + sqle);
-        } catch (Exception e) {
-            e.printStackTrace();
-            throw new SQLException(resBundle.handleGetObject("joinrowsetimpl.genericerr").toString() + e);
-        }
-    }
-
-    /**
-     * Return a SQL-like description of the <code>WHERE</code> clause being used
-     * in a <code>JoinRowSet</code> object instance. An implementation can describe
-     * the <code>WHERE</code> clause of the SQL <code>JOIN</code> by supplying a <code>SQL</code>
-     * strings description of <code>JOIN</code> or provide a textual description to assist
-     * applications using a <code>JoinRowSet</code>.
-     *
-     * @return whereClause a textual or SQL descripition of the logical
-     * <code>WHERE</code> cluase used in the <code>JoinRowSet</code> instance
-     * @throws SQLException if an error occurs in generating a representation
-     * of the <code>WHERE</code> clause.
-     */
-    public String getWhereClause() throws SQLException {
-
-       String strWhereClause = "Select ";
-       String whereClause;
-       String tabName= "";
-       String strTabName = "";
-       int sz,cols;
-       int j;
-       CachedRowSetImpl crs;
-
-       // get all the column(s) names from each rowset.
-       // append them with their tablenames i.e. tableName.columnName
-       // Select tableName1.columnName1,..., tableNameX.columnNameY
-       // from tableName1,...tableNameX where
-       // tableName1.(rowset1.getMatchColumnName()) ==
-       // tableName2.(rowset2.getMatchColumnName()) + "and" +
-       // tableNameX.(rowsetX.getMatchColumnName()) ==
-       // tableNameZ.(rowsetZ.getMatchColumnName()));
-
-       sz = vecRowSetsInJOIN.size();
-       for(int i=0;i<sz; i++) {
-          crs = (CachedRowSetImpl)vecRowSetsInJOIN.get(i);
-          cols = crs.getMetaData().getColumnCount();
-          tabName = tabName.concat(crs.getTableName());
-          strTabName = strTabName.concat(tabName+", ");
-          j = 1;
-          while(j<cols) {
-
-            strWhereClause = strWhereClause.concat
-                (tabName+"."+crs.getMetaData().getColumnName(j++));
-            strWhereClause = strWhereClause.concat(", ");
-          } //end while
-        } //end for
-
-
-        // now remove the last ","
-        strWhereClause = strWhereClause.substring
-             (0, strWhereClause.lastIndexOf(","));
-
-        // Add from clause
-        strWhereClause = strWhereClause.concat(" from ");
-
-        // Add the table names.
-        strWhereClause = strWhereClause.concat(strTabName);
-
-        //Remove the last ","
-        strWhereClause = strWhereClause.substring
-             (0, strWhereClause.lastIndexOf(","));
-
-        // Add the where clause
-        strWhereClause = strWhereClause.concat(" where ");
-
-        // Get the match columns
-        // rowset1.getMatchColumnName() == rowset2.getMatchColumnName()
-         for(int i=0;i<sz; i++) {
-             strWhereClause = strWhereClause.concat(
-               ((CachedRowSetImpl)vecRowSetsInJOIN.get(i)).getMatchColumnNames()[0]);
-             if(i%2!=0) {
-               strWhereClause = strWhereClause.concat("=");
-             }  else {
-               strWhereClause = strWhereClause.concat(" and");
-             }
-          strWhereClause = strWhereClause.concat(" ");
-         }
-
-        return strWhereClause;
-    }
-
-
-    /**
-     * Moves the cursor down one row from its current position and
-     * returns <code>true</code> if the new cursor position is a
-     * valid row.
-     * The cursor for a new <code>ResultSet</code> object is initially
-     * positioned before the first row. The first call to the method
-     * <code>next</code> moves the cursor to the first row, making it
-     * the current row; the second call makes the second row the
-     * current row, and so on.
-     *
-     * <P>If an input stream from the previous row is open, it is
-     * implicitly closed. The <code>ResultSet</code> object's warning
-     * chain is cleared when a new row is read.
-     *
-     * @return <code>true</code> if the new current row is valid;
-     *         <code>false</code> if there are no more rows
-     * @throws SQLException if an error occurs or
-     *            the cursor is not positioned in the rowset, before
-     *            the first row, or after the last row
-     */
-    public boolean next() throws SQLException {
-        return crsInternal.next();
-    }
-
-
-    /**
-     * Releases the current contents of this rowset, discarding  outstanding
-     * updates.  The rowset contains no rows after the method
-     * <code>release</code> is called. This method sends a
-     * <code>RowSetChangedEvent</code> object to all registered listeners prior
-     * to returning.
-     *
-     * @throws SQLException if an error occurs
-     */
-    public void close() throws SQLException {
-        crsInternal.close();
-    }
-
-
-    /**
-     * Reports whether the last column read was SQL <code>NULL</code>.
-     * Note that you must first call the method <code>getXXX</code>
-     * on a column to try to read its value and then call the method
-     * <code>wasNull</code> to determine whether the value was
-     * SQL <code>NULL</code>.
-     *
-     * @return <code>true</code> if the value in the last column read
-     *         was SQL <code>NULL</code>; <code>false</code> otherwise
-     * @throws SQLException if an error occurs
-     */
-    public boolean wasNull() throws SQLException {
-        return crsInternal.wasNull();
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>JoinRowSetImpl</code> object as a
-     * <code>String</code> object.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in the rowset
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     *         result is <code>null</code>
-     * @throws SQLException if the given column index is out of bounds or
-     *            the cursor is not on a valid row
-     */
-    public String getString(int columnIndex) throws SQLException {
-        return crsInternal.getString(columnIndex);
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>JoinRowSetImpl</code> object as a
-     * <code>boolean</code> value.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in the rowset
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     *         result is <code>false</code>
-     * @throws SQLException if the given column index is out of bounds,
-     *            the cursor is not on a valid row, or this method fails
-     */
-    public boolean getBoolean(int columnIndex) throws SQLException {
-        return crsInternal.getBoolean(columnIndex);
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>JoinRowSetImpl</code> object as a
-     * <code>byte</code> value.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in the rowset
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     *         result is <code>0</code>
-     * @throws SQLException if the given column index is out of bounds,
-     *            the cursor is not on a valid row, or this method fails
-     */
-    public byte getByte(int columnIndex) throws SQLException {
-        return crsInternal.getByte(columnIndex);
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>JoinRowSetImpl</code> object as a
-             * <code>short</code> value.
-             *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in the rowset
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     *         result is <code>0</code>
-     * @throws SQLException if the given column index is out of bounds,
-     *            the cursor is not on a valid row, or this method fails
-     */
-    public short getShort(int columnIndex) throws SQLException {
-        return crsInternal.getShort(columnIndex);
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>JoinRowSetImpl</code> object as a
-     * <code>short</code> value.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in the rowset
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     *         result is <code>0</code>
-     * @throws SQLException if the given column index is out of bounds,
-     *            the cursor is not on a valid row, or this method fails
-     */
-    public int getInt(int columnIndex) throws SQLException {
-        return crsInternal.getInt(columnIndex);
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>JoinRowSetImpl</code> object as a
-     * <code>long</code> value.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in the rowset
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     *         result is <code>0</code>
-     * @throws SQLException if the given column index is out of bounds,
-     *            the cursor is not on a valid row, or this method fails
-     */
-    public long getLong(int columnIndex) throws SQLException {
-        return crsInternal.getLong(columnIndex);
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>JoinRowSetImpl</code> object as a
-     * <code>float</code> value.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in the rowset
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     *         result is <code>0</code>
-     * @throws SQLException if the given column index is out of bounds,
-     *            the cursor is not on a valid row, or this method fails
-     */
-    public float getFloat(int columnIndex) throws SQLException {
-        return crsInternal.getFloat(columnIndex);
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>JoinRowSetImpl</code> object as a
-     * <code>double</code> value.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in the rowset
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     *         result is <code>0</code>
-     * @throws SQLException if the given column index is out of bounds,
-     *            the cursor is not on a valid row, or this method fails
-     */
-    public double getDouble(int columnIndex) throws SQLException {
-        return crsInternal.getDouble(columnIndex);
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>JoinRowSetImpl</code> object as a
-     * <code>java.math.BigDecimal</code> object.
-     * <P>
-     * This method is deprecated; use the version of <code>getBigDecimal</code>
-     * that does not take a scale parameter and returns a value with full
-     * precision.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in the rowset
-     * @param scale the number of digits to the right of the decimal point in the
-     *        value returned
-     * @return the column value with the specified number of digits to the right
-     *         of the decimal point; if the value is SQL <code>NULL</code>, the
-     *         result is <code>null</code>
-     * @throws SQLException if the given column index is out of bounds,
-     *            the cursor is not on a valid row, or this method fails
-     * @deprecated
-     */
-    public BigDecimal getBigDecimal(int columnIndex, int scale) throws SQLException {
-        return crsInternal.getBigDecimal(columnIndex);
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>JoinRowSetImpl</code> object as a
-     * <code>byte array</code> value.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in the rowset
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     *         result is <code>null</code>
-     * @throws SQLException if the given column index is out of bounds,
-     *            the cursor is not on a valid row, or the the value to be
-     *            retrieved is not binary
-     */
-    public byte[] getBytes(int columnIndex) throws SQLException {
-        return crsInternal.getBytes(columnIndex);
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>JoinRowSetImpl</code> object as a
-     * <code>java.sql.Date</code> object.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in the rowset
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     *         result is <code>null</code>
-     * @throws SQLException if the given column index is out of bounds,
-     *            the cursor is not on a valid row, or this method fails
-     */
-    public java.sql.Date getDate(int columnIndex) throws SQLException {
-        return crsInternal.getDate(columnIndex);
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>JoinRowSetImpl</code> object as a
-     * <code>java.sql.Time</code> object.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in the rowset
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     *         result is <code>null</code>
-     * @throws SQLException if the given column index is out of bounds,
-     *            the cursor is not on a valid row, or this method fails
-     */
-    public java.sql.Time getTime(int columnIndex) throws SQLException {
-        return crsInternal.getTime(columnIndex);
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>JoinRowSetImpl</code> object as a
-     * <code>java.sql.Timestamp</code> object.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in the rowset
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     *         result is <code>null</code>
-     * @throws SQLException if the given column index is out of bounds,
-     *            the cursor is not on a valid row, or this method fails
-     */
-    public java.sql.Timestamp getTimestamp(int columnIndex) throws SQLException {
-        return crsInternal.getTimestamp(columnIndex);
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>JoinRowSetImpl</code> object as a
-     * <code>java.sql.Timestamp</code> object.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in the rowset
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     *         result is <code>null</code>
-     * @throws SQLException if the given column index is out of bounds,
-     *            the cursor is not on a valid row, or this method fails
-     */
-    public java.io.InputStream getAsciiStream(int columnIndex) throws SQLException {
-        return crsInternal.getAsciiStream(columnIndex);
-    }
-
-    /**
-     * A column value can be retrieved as a stream of Unicode characters
-     * and then read in chunks from the stream.  This method is particularly
-     * suitable for retrieving large LONGVARCHAR values.  The JDBC driver will
-     * do any necessary conversion from the database format into Unicode.
-     *
-     * <P><B>Note:</B> All the data in the returned stream must be
-     * read prior to getting the value of any other column. The next
-     * call to a get method implicitly closes the stream. . Also, a
-     * stream may return 0 for available() whether there is data
-     * available or not.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @return a Java input stream that delivers the database column value
-     * as a stream of two byte Unicode characters.  If the value is SQL NULL
-     * then the result is null.
-     * @throws SQLException if an error occurs
-     * @deprecated
-     */
-    public java.io.InputStream getUnicodeStream(int columnIndex) throws SQLException {
-        return crsInternal.getUnicodeStream(columnIndex);
-    }
-
-    /**
-     * A column value can be retrieved as a stream of uninterpreted bytes
-     * and then read in chunks from the stream.  This method is particularly
-     * suitable for retrieving large LONGVARBINARY values.
-     *
-     * <P><B>Note:</B> All the data in the returned stream must be
-     * read prior to getting the value of any other column. The next
-     * call to a get method implicitly closes the stream. Also, a
-     * stream may return 0 for available() whether there is data
-     * available or not.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in the rowset
-     * @return a Java input stream that delivers the database column value
-     * as a stream of uninterpreted bytes.  If the value is SQL NULL
-     * then the result is null.
-     * @throws SQLException if an error occurs
-     */
-    public java.io.InputStream getBinaryStream(int columnIndex) throws SQLException {
-        return crsInternal.getBinaryStream(columnIndex);
-    }
-
-    // ColumnName methods
-
-    /**
-     * Retrieves the value stored in the designated column
-     * of the current row as a <code>String</code> object.
-     *
-     * @param columnName a <code>String</code> object giving the SQL name of
-     *        a column in this <code>JoinRowSetImpl</code> object
-     * @return the column value; if the value is SQL <code>NULL</code>,
-     *         the result is <code>null</code>
-     * @throws SQLException if the given column name does not match one of
-     *            this rowset's column names or the cursor is not on one of
-     *            this rowset's rows or its insert row
-     */
-    public String getString(String columnName) throws SQLException {
-        return crsInternal.getString(columnName);
-    }
-
-    /**
-     * Retrieves the value stored in the designated column
-     * of the current row as a <code>boolean</code> value.
-     *
-     * @param columnName a <code>String</code> object giving the SQL name of
-     *        a column in this <code>JoinRowSetImpl</code> object
-     * @return the column value; if the value is SQL <code>NULL</code>,
-     *         the result is <code>false</code>
-     * @throws SQLException if the given column name does not match one of
-     *            this rowset's column names or the cursor is not on one of
-     *            this rowset's rows or its insert row
-     */
-    public boolean getBoolean(String columnName) throws SQLException {
-        return crsInternal.getBoolean(columnName);
-    }
-
-    /**
-     * Retrieves the value stored in the designated column
-     * of the current row as a <code>byte</code> value.
-     *
-     * @param columnName a <code>String</code> object giving the SQL name of
-     *        a column in this <code>JoinRowSetImpl</code> object
-     * @return the column value; if the value is SQL <code>NULL</code>,
-     *         the result is <code>0</code>
-     * @throws SQLException if the given column name does not match one of
-     *            this rowset's column names or the cursor is not on one of
-     *            this rowset's rows or its insert row
-     */
-    public byte getByte(String columnName) throws SQLException {
-        return crsInternal.getByte(columnName);
-    }
-
-    /**
-     * Retrieves the value stored in the designated column
-     * of the current row as a <code>short</code> value.
-     *
-     * @param columnName a <code>String</code> object giving the SQL name of
-     *        a column in this <code>JoinRowSetImpl</code> object
-     * @return the column value; if the value is SQL <code>NULL</code>,
-     *         the result is <code>0</code>
-     * @throws SQLException if the given column name does not match one of
-     *            this rowset's column names or the cursor is not on one of
-     *            this rowset's rows or its insert row
-     */
-    public short getShort(String columnName) throws SQLException {
-        return crsInternal.getShort(columnName);
-    }
-
-    /**
-     * Retrieves the value stored in the designated column
-     * of the current row as an <code>int</code> value.
-     *
-     * @param columnName a <code>String</code> object giving the SQL name of
-     *        a column in this <code>JoinRowSetImpl</code> object
-     * @return the column value; if the value is SQL <code>NULL</code>,
-     *         the result is <code>0</code>
-     * @throws SQLException if the given column name does not match one of
-     *            this rowset's column names or the cursor is not on one of
-     *            this rowset's rows or its insert row
-     */
-    public int getInt(String columnName) throws SQLException {
-        return crsInternal.getInt(columnName);
-    }
-
-    /**
-     * Retrieves the value stored in the designated column
-     * of the current row as a <code>long</code> value.
-     *
-     * @param columnName a <code>String</code> object giving the SQL name of
-     *        a column in this <code>JoinRowSetImpl</code> object
-     * @return the column value; if the value is SQL <code>NULL</code>,
-     *         the result is <code>0</code>
-     * @throws SQLException if the given column name does not match one of
-     *            this rowset's column names or the cursor is not on one of
-     *            this rowset's rows or its insert row
-     */
-    public long getLong(String columnName) throws SQLException {
-        return crsInternal.getLong(columnName);
-    }
-
-    /**
-     * Retrieves the value stored in the designated column
-     * of the current row as a <code>float</code> value.
-     *
-     * @param columnName a <code>String</code> object giving the SQL name of
-     *        a column in this <code>JoinRowSetImpl</code> object
-     * @return the column value; if the value is SQL <code>NULL</code>,
-     *         the result is <code>0</code>
-     * @throws SQLException if the given column name does not match one of
-     *            this rowset's column names or the cursor is not on one of
-     *            this rowset's rows or its insert row
-     */
-    public float getFloat(String columnName) throws SQLException {
-        return crsInternal.getFloat(columnName);
-    }
-
-    /**
-     * Retrieves the value stored in the designated column
-     * of the current row as a <code>double</code> value.
-     *
-     * @param columnName a <code>String</code> object giving the SQL name of
-     *        a column in this <code>JoinRowSetImpl</code> object
-     * @return the column value; if the value is SQL <code>NULL</code>,
-     *         the result is <code>0</code>
-     * @throws SQLException if the given column name does not match one of
-     *            this rowset's column names or the cursor is not on one of
-     *            this rowset's rows or its insert row
-     */
-    public double getDouble(String columnName) throws SQLException {
-        return crsInternal.getDouble(columnName);
-    }
-
-    /**
-     * Retrieves the value stored in the designated column
-     * of the current row as a <code>java.math.BigDecimal</code> object.
-     *
-     * @param columnName a <code>String</code> object giving the SQL name of
-     *        a column in this <code>JoinRowSetImpl</code> object
-     * @param scale the number of digits to the right of the decimal point
-     * @return the column value; if the value is SQL <code>NULL</code>,
-     *         the result is <code>null</code>
-     * @throws SQLException if the given column name does not match one of
-     *            this rowset's column names or the cursor is not on one of
-     *            this rowset's rows or its insert row
-     * @deprecated use the method <code>getBigDecimal(String columnName)</code>
-     *             instead
-     */
-    public BigDecimal getBigDecimal(String columnName, int scale) throws SQLException {
-        return crsInternal.getBigDecimal(columnName);
-    }
-
-    /**
-     * Retrieves the value stored in the designated column
-     * of the current row as a byte array.
-     * The bytes represent the raw values returned by the driver.
-     *
-     * @param columnName a <code>String</code> object giving the SQL name of
-     *        a column in this <code>JoinRowSetImpl</code> object
-     * @return the column value; if the value is SQL <code>NULL</code>,
-     *         the result is <code>null</code>
-     * @throws SQLException if the given column name does not match one of
-     *            this rowset's column names or the cursor is not on one of
-     *            this rowset's rows or its insert row
-     */
-    public byte[] getBytes(String columnName) throws SQLException {
-        return crsInternal.getBytes(columnName);
-    }
-
-    /**
-     * Retrieves the value stored in the designated column
-     * of the current row as a <code>java.sql.Date</code> object.
-     *
-     * @param columnName a <code>String</code> object giving the SQL name of
-     *        a column in this <code>JoinRowSetImpl</code> object
-     * @return the column value; if the value is SQL <code>NULL</code>,
-     *         the result is <code>null</code>
-     * @throws SQLException if the given column name does not match one of
-     *            this rowset's column names or the cursor is not on one of
-     *            this rowset's rows or its insert row
-     */
-    public java.sql.Date getDate(String columnName) throws SQLException {
-        return crsInternal.getDate(columnName);
-    }
-
-    /**
-     * Retrieves the value stored in the designated column
-     * of the current row as a <code>java.sql.Time</code> object.
-     *
-     * @param columnName a <code>String</code> object giving the SQL name of
-     *        a column in this <code>JoinRowSetImpl</code> object
-     * @return the column value; if the value is SQL <code>NULL</code>,
-     *         the result is <code>null</code>
-     * @throws SQLException if the given column name does not match one of
-     *            this rowset's column names or the cursor is not on one of
-     *            this rowset's rows or its insert row
-     */
-    public java.sql.Time getTime(String columnName) throws SQLException {
-        return crsInternal.getTime(columnName);
-    }
-
-    /**
-     * Retrieves the value stored in the designated column
-     * of the current row as a <code>java.sql.Timestamp</code> object.
-     *
-     * @param columnName a <code>String</code> object giving the SQL name of
-     *        a column in this <code>JoinRowSetImpl</code> object
-     * @return the column value; if the value is SQL <code>NULL</code>,
-     *         the result is <code>null</code>
-     * @throws SQLException if the given column name does not match one of
-     *            this rowset's column names or the cursor is not on one of
-     *            this rowset's rows or its insert row
-     */
-    public java.sql.Timestamp getTimestamp(String columnName) throws SQLException {
-        return crsInternal.getTimestamp(columnName);
-    }
-
-    /**
-     * This method is not supported, and it will throw an
-     * <code>UnsupportedOperationException</code> if it is called.
-     * <P>
-     * A column value can be retrieved as a stream of ASCII characters
-     * and then read in chunks from the stream.  This method is particularly
-     * suitable for retrieving large LONGVARCHAR values.  The JDBC driver will
-     * do any necessary conversion from the database format into ASCII format.
-     *
-     * <P><B>Note:</B> All the data in the returned stream must
-     * be read prior to getting the value of any other column. The
-     * next call to a <code>getXXX</code> method implicitly closes the stream.
-     *
-     * @param columnName a <code>String</code> object giving the SQL name of
-     *        a column in this <code>JoinRowSetImpl</code> object
-     * @return a Java input stream that delivers the database column value
-     *         as a stream of one-byte ASCII characters.  If the value is SQL
-     *         <code>NULL</code>, the result is <code>null</code>.
-     * @throws UnsupportedOperationException if this method is called
-     */
-    public java.io.InputStream getAsciiStream(String columnName) throws SQLException {
-        return crsInternal.getAsciiStream(columnName);
-    }
-
-    /**
-     * Retrieves the value stored in the designated column
-     * of the current row as a <code>java.io.InputStream</code> object.
-     * A column value can be retrieved as a stream of Unicode characters
-     * and then read in chunks from the stream.  This method is particularly
-     * suitable for retrieving large <code>LONGVARCHAR</code> values.
-     * The JDBC driver will do any necessary conversion from the database
-     * format into Unicode.
-     *
-     * <P><B>Note:</B> All the data in the returned stream must
-     * be read prior to getting the value of any other column. The
-     * next call to a <code>getXXX</code> method implicitly closes the stream.
-     *
-     * @param columnName a <code>String</code> object giving the SQL name of
-     *        a column in this <code>JoinRowSetImpl</code> object
-     * @return a Java input stream that delivers the database column value
-     *         as a stream of two-byte Unicode characters.  If the value is
-     *         SQL <code>NULL</code>, the result is <code>null</code>.
-     * @throws SQLException if the given column name does not match one of
-     *            this rowset's column names or the cursor is not on one of
-     *            this rowset's rows or its insert row
-     * @deprecated use the method <code>getCharacterStream</code> instead
-     */
-    public java.io.InputStream getUnicodeStream(String columnName) throws SQLException {
-        return crsInternal.getUnicodeStream(columnName);
-    }
-
-    /**
-     * Retrieves the value stored in the designated column
-     * of the current row as a <code>java.io.InputStream</code> object.
-     * A column value can be retrieved as a stream of uninterpreted bytes
-     * and then read in chunks from the stream.  This method is particularly
-     * suitable for retrieving large <code>LONGVARBINARY</code> values.
-     *
-     * <P><B>Note:</B> All the data in the returned stream must
-     * be read prior to getting the value of any other column. The
-     * next call to a get method implicitly closes the stream.
-     *
-     * @param columnName a <code>String</code> object giving the SQL name of
-     *        a column in this <code>JoinRowSetImpl</code> object
-     * @return a Java input stream that delivers the database column value
-     *         as a stream of uninterpreted bytes.  If the value is SQL
-     *         <code>NULL</code>, the result is <code>null</code>.
-     * @throws SQLException if the given column name does not match one of
-     *            this rowset's column names or the cursor is not on one of
-     *            this rowset's rows or its insert row
-     */
-    public java.io.InputStream getBinaryStream(String columnName) throws SQLException {
-        return crsInternal.getBinaryStream(columnName);
-    }
-
-    /* The first warning reported by calls on this <code>JoinRowSetImpl</code>
-     * object is returned. Subsequent <code>JoinRowSetImpl</code> warnings will
-     * be chained to this <code>SQLWarning</code>.
-     *
-     * <P>The warning chain is automatically cleared each time a new
-     * row is read.
-     *
-     * <P><B>Note:</B> This warning chain only covers warnings caused
-     * by <code>ResultSet</code> methods.  Any warning caused by statement
-     * methods (such as reading OUT parameters) will be chained on the
-     * <code>Statement</code> object.
-     *
-     * @return the first SQLWarning or null
-     * @throws UnsupportedOperationException if this method is called
-     */
-    public SQLWarning getWarnings() {
-        return crsInternal.getWarnings();
-    }
-
-    /**
-     * Throws an <code>UnsupportedOperationException</code> if called.
-     * <P>
-     * After a call to this method, the <code>getWarnings</code> method
-     * returns <code>null</code> until a new warning is reported for this
-     * <code>JoinRowSetImpl</code> object.
-     *
-     * @throws UnsupportedOperationException if this method is called
-     */
-     public void clearWarnings() {
-        crsInternal.clearWarnings();
-    }
-
-    /**
-     * Retrieves the name of the SQL cursor used by this
-     * <code>JoinRowSetImpl</code> object.
-     *
-     * <P>In SQL, a result table is retrieved through a cursor that is
-     * named. The current row of a result can be updated or deleted
-     * using a positioned update/delete statement that references the
-     * cursor name. To insure that the cursor has the proper isolation
-     * level to support an update operation, the cursor's <code>SELECT</code>
-     * statement should be of the form 'select for update'. If the 'for update'
-     * clause is omitted, positioned updates may fail.
-     *
-     * <P>JDBC supports this SQL feature by providing the name of the
-     * SQL cursor used by a <code>ResultSet</code> object. The current row
-     * of a result set is also the current row of this SQL cursor.
-     *
-     * <P><B>Note:</B> If positioned updates are not supported, an
-     * <code>SQLException</code> is thrown.
-     *
-     * @return the SQL cursor name for this <code>JoinRowSetImpl</code> object's
-     *         cursor
-     * @throws SQLException if an error occurs
-     */
-    public String getCursorName() throws SQLException {
-        return crsInternal.getCursorName();
-    }
-
-    /**
-     * Retrieves the <code>ResultSetMetaData</code> object that contains
-     * information about this <code>CachedRowsSet</code> object. The
-     * information includes the number of columns, the data type for each
-     * column, and other properties for each column.
-     *
-     * @return the <code>ResultSetMetaData</code> object that describes this
-     *         <code>JoinRowSetImpl</code> object's columns
-     * @throws SQLException if an error occurs
-     */
-    public ResultSetMetaData getMetaData() throws SQLException {
-        return crsInternal.getMetaData();
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>JoinRowSetImpl</code> object as an
-     * <code>Object</code> value.
-     * <P>
-     * The type of the <code>Object</code> will be the default
-     * Java object type corresponding to the column's SQL type,
-     * following the mapping for built-in types specified in the JDBC
-     * specification.
-     * <P>
-     * This method may also be used to read datatabase-specific
-     * abstract data types.
-     * <P>
-     * This implementation of the method <code>getObject</code> extends its
-     * behavior so that it gets the attributes of an SQL structured type as
-     * as an array of <code>Object</code> values.  This method also custom
-     * maps SQL user-defined types to classes in the Java programming language.
-     * When the specified column contains
-     * a structured or distinct value, the behavior of this method is as
-     * if it were a call to the method <code>getObject(columnIndex,
-     * this.getStatement().getConnection().getTypeMap())</code>.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in the rowset
-     * @return a <code>java.lang.Object</code> holding the column value;
-     *         if the value is SQL <code>NULL</code>, the result is <code>null</code>
-     * @throws SQLException if the given column index is out of bounds,
-     *            the cursor is not on a valid row, or there is a problem getting
-     *            the <code>Class</code> object for a custom mapping
-     * @since 1.2
-     */
-    public Object getObject(int columnIndex) throws SQLException {
-        return crsInternal.getObject(columnIndex);
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>JoinRowSetImpl</code> object as an
-     * <code>Object</code> value.
-     * <P>
-     * The type of the <code>Object</code> will be the default
-     * Java object type corresponding to the column's SQL type,
-     * following the mapping for built-in types specified in the JDBC
-     * specification.
-     * <P>
-     * This method may also be used to read datatabase-specific
-     * abstract data types.
-     * <P>
-     * This implementation of the method <code>getObject</code> extends its
-     * behavior so that it gets the attributes of an SQL structured type as
-     * as an array of <code>Object</code> values.  This method also custom
-     * maps SQL user-defined types to classes
-     * in the Java programming language. When the specified column contains
-     * a structured or distinct value, the behavior of this method is as
-     * if it were a call to the method <code>getObject(columnIndex,
-     * this.getStatement().getConnection().getTypeMap())</code>.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *         is <code>2</code>, and so on; must be <code>1</code> or larger
-     *         and equal to or less than the number of columns in the rowset
-     * @param map a <code>java.util.Map</code> object showing the mapping
-     *         from SQL type names to classes in the Java programming
-     *         language
-     * @return a <code>java.lang.Object</code> holding the column value;
-     *         if the value is SQL <code>NULL</code>, the result is
-     *         <code>null</code>
-     * @throws SQLException if (1) the given column name does not match
-     *         one of this rowset's column names, (2) the cursor is not
-     *         on a valid row, or (3) there is a problem getting
-     *         the <code>Class</code> object for a custom mapping
-     */
-    public Object getObject(int columnIndex,
-                            java.util.Map<String,Class<?>> map)
-    throws SQLException {
-        return crsInternal.getObject(columnIndex, map);
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>JoinRowSetImpl</code> object as an
-     * <code>Object</code> value.
-     * <P>
-     * The type of the <code>Object</code> will be the default
-     * Java object type corresponding to the column's SQL type,
-     * following the mapping for built-in types specified in the JDBC
-     * specification.
-     * <P>
-     * This method may also be used to read datatabase-specific
-     * abstract data types.
-     * <P>
-     * This implementation of the method <code>getObject</code> extends its
-     * behavior so that it gets the attributes of an SQL structured type as
-     * as an array of <code>Object</code> values.  This method also custom
-     * maps SQL user-defined types to classes
-     * in the Java programming language. When the specified column contains
-     * a structured or distinct value, the behavior of this method is as
-     * if it were a call to the method <code>getObject(columnIndex,
-     * this.getStatement().getConnection().getTypeMap())</code>.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @return a <code>java.lang.Object</code> holding the column value;
-     *        if the value is SQL <code>NULL</code>, the result is
-     *        <code>null</code>
-     * @throws SQLException if (1) the given column name does not match
-     *        one of this rowset's column names, (2) the cursor is not
-     *        on a valid row, or (3) there is a problem getting
-     *        the <code>Class</code> object for a custom mapping
-     */
-    public Object getObject(String columnName) throws SQLException {
-        return crsInternal.getObject(columnName);
-    }
-
-    /**
-     * Retrieves the value of the designated column in this
-     * <code>JoinRowSetImpl</code> object as an <code>Object</code> in
-     * the Java programming lanugage, using the given
-     * <code>java.util.Map</code> object to custom map the value if
-     * appropriate.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param map a <code>java.util.Map</code> object showing the mapping
-     *            from SQL type names to classes in the Java programming
-     *            language
-     * @return an <code>Object</code> representing the SQL value
-     * @throws SQLException if the given column index is out of bounds or
-     *            the cursor is not on one of this rowset's rows or its
-     *            insert row
-     */
-    public Object getObject(String columnName,
-                            java.util.Map<String,Class<?>> map)
-        throws SQLException {
-        return crsInternal.getObject(columnName, map);
-    }
-
-    /**
-     * Retrieves the value stored in the designated column
-     * of the current row as a <code>java.io.Reader</code> object.
-     *
-     * <P><B>Note:</B> All the data in the returned stream must
-     * be read prior to getting the value of any other column. The
-     * next call to a <code>getXXX</code> method implicitly closes the stream.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in the rowset
-     * @return a Java character stream that delivers the database column value
-     *         as a <code>java.io.Reader</code> object.  If the value is
-     *         SQL <code>NULL</code>, the result is <code>null</code>.
-     * @throws SQLException if the given column index is out of bounds,
-     *            the cursor is not on a valid row, or there is a type mismatch
-     */
-    public java.io.Reader getCharacterStream(int columnIndex) throws SQLException {
-        return crsInternal.getCharacterStream(columnIndex);
-    }
-
-    /**
-     * Retrieves the value stored in the designated column
-     * of the current row as a <code>java.io.Reader</code> object.
-     *
-     * <P><B>Note:</B> All the data in the returned stream must
-     * be read prior to getting the value of any other column. The
-     * next call to a <code>getXXX</code> method implicitly closes the stream.
-     *
-     * @param columnName a <code>String</code> object giving the SQL name of
-     *        a column in this <code>JoinRowSetImpl</code> object
-     * @return a Java input stream that delivers the database column value
-     *         as a stream of two-byte Unicode characters.  If the value is
-     *         SQL <code>NULL</code>, the result is <code>null</code>.
-     * @throws SQLException if the given column index is out of bounds,
-     *            the cursor is not on a valid row, or there is a type mismatch
-     */
-    public java.io.Reader getCharacterStream(String columnName) throws SQLException {
-        return crsInternal.getCharacterStream(columnName);
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>JoinRowSetImpl</code> object as a
-     * <code>java.math.BigDecimal</code> object.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in the rowset
-     * @return a <code>java.math.BigDecimal</code> value with full precision;
-     *         if the value is SQL <code>NULL</code>, the result is <code>null</code>
-     * @throws SQLException if the given column index is out of bounds,
-     *            the cursor is not on a valid row, or this method fails
-     */
-    public BigDecimal getBigDecimal(int columnIndex) throws SQLException {
-       return crsInternal.getBigDecimal(columnIndex);
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>JoinRowSetImpl</code> object as a
-     * <code>java.math.BigDecimal</code> object.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @return a <code>java.math.BigDecimal</code> value with full precision;
-     *         if the value is SQL <code>NULL</code>, the result is <code>null</code>
-     * @throws SQLException if the given column index is out of bounds,
-     *            the cursor is not on a valid row, or this method fails
-     */
-    public BigDecimal getBigDecimal(String columnName) throws SQLException {
-       return crsInternal.getBigDecimal(columnName);
-    }
-
-    /**
-     * Returns the number of rows in this <code>JoinRowSetImpl</code> object.
-     *
-     * @return number of rows in the rowset
-     */
-    public int size() {
-        return crsInternal.size();
-    }
-
-    /**
-     * Indicates whether the cursor is before the first row in this
-     * <code>JoinRowSetImpl</code> object.
-     *
-     * @return <code>true</code> if the cursor is before the first row;
-     *         <code>false</code> otherwise or if the rowset contains no rows
-     * @throws SQLException if an error occurs
-     */
-    public boolean isBeforeFirst() throws SQLException {
-        return crsInternal.isBeforeFirst();
-    }
-
-    /**
-     * Indicates whether the cursor is after the last row in this
-     * <code>JoinRowSetImpl</code> object.
-     *
-     * @return <code>true</code> if the cursor is after the last row;
-     *         <code>false</code> otherwise or if the rowset contains no rows
-     * @throws SQLException if an error occurs
-     */
-    public boolean isAfterLast() throws SQLException {
-        return crsInternal.isAfterLast();
-    }
-
-    /**
-     * Indicates whether the cursor is on the first row in this
-     * <code>JoinRowSetImpl</code> object.
-     *
-     * @return <code>true</code> if the cursor is on the first row;
-     *         <code>false</code> otherwise or if the rowset contains no rows
-     * @throws SQLException if an error occurs
-     */
-    public boolean isFirst() throws SQLException {
-        return crsInternal.isFirst();
-    }
-
-    /**
-     * Indicates whether the cursor is on the last row in this
-     * <code>JoinRowSetImpl</code> object.
-     * <P>
-     * Note: Calling the method <code>isLast</code> may be expensive
-     * because the JDBC driver might need to fetch ahead one row in order
-     * to determine whether the current row is the last row in this rowset.
-     *
-     * @return <code>true</code> if the cursor is on the last row;
-     *         <code>false</code> otherwise or if this rowset contains no rows
-     * @throws SQLException if an error occurs
-     */
-    public boolean isLast() throws SQLException {
-        return crsInternal.isLast();
-    }
-
-    /**
-     * Moves this <code>JoinRowSetImpl</code> object's cursor to the front of
-     * the rowset, just before the first row. This method has no effect if
-     * this rowset contains no rows.
-     *
-     * @throws SQLException if an error occurs or the type of this rowset
-     *            is <code>ResultSet.TYPE_FORWARD_ONLY</code>
-     */
-    public void beforeFirst() throws SQLException {
-        crsInternal.beforeFirst();
-    }
-
-    /**
-     * Moves this <code>JoinRowSetImpl</code> object's cursor to the end of
-     * the rowset, just after the last row. This method has no effect if
-     * this rowset contains no rows.
-     *
-     * @throws SQLException if an error occurs
-     */
-    public void afterLast() throws SQLException {
-        crsInternal.afterLast();
-    }
-
-    /**
-     * Moves this <code>JoinRowSetImpl</code> object's cursor to the first row
-     * and returns <code>true</code> if the operation was successful.  This
-     * method also notifies registered listeners that the cursor has moved.
-     *
-     * @return <code>true</code> if the cursor is on a valid row;
-     *         <code>false</code> otherwise or if there are no rows in this
-     *         <code>JoinRowSetImpl</code> object
-     * @throws SQLException if the type of this rowset
-     *            is <code>ResultSet.TYPE_FORWARD_ONLY</code>
-     */
-    public boolean first() throws SQLException {
-        return crsInternal.first();
-    }
-
-
-    /**
-     * Moves this <code>JoinRowSetImpl</code> object's cursor to the last row
-     * and returns <code>true</code> if the operation was successful.  This
-     * method also notifies registered listeners that the cursor has moved.
-     *
-     * @return <code>true</code> if the cursor is on a valid row;
-     *         <code>false</code> otherwise or if there are no rows in this
-     *         <code>JoinRowSetImpl</code> object
-     * @throws SQLException if the type of this rowset
-     *            is <code>ResultSet.TYPE_FORWARD_ONLY</code>
-     */
-    public boolean last() throws SQLException {
-        return crsInternal.last();
-    }
-
-    /**
-     * Returns the number of the current row in this <code>JoinRowSetImpl</code>
-     * object. The first row is number 1, the second number 2, and so on.
-     *
-     * @return the number of the current row;  <code>0</code> if there is no
-     *         current row
-     * @throws SQLException if an error occurs
-     */
-    public int getRow() throws SQLException {
-        return crsInternal.getRow();
-    }
-
-    /**
-     * Moves this <code>JoinRowSetImpl</code> object's cursor to the row number
-     * specified.
-     *
-     * <p>If the number is positive, the cursor moves to an absolute row with
-     * respect to the beginning of the rowset.  The first row is row 1, the second
-     * is row 2, and so on.  For example, the following command, in which
-     * <code>crs</code> is a <code>JoinRowSetImpl</code> object, moves the cursor
-     * to the fourth row, starting from the beginning of the rowset.
-     * <PRE><code>
-     *
-     *    crs.absolute(4);
-     *
-     * </code> </PRE>
-     * <P>
-     * If the number is negative, the cursor moves to an absolute row position
-     * with respect to the end of the rowset.  For example, calling
-     * <code>absolute(-1)</code> positions the cursor on the last row,
-     * <code>absolute(-2)</code> moves it on the next-to-last row, and so on.
-     * If the <code>JoinRowSetImpl</code> object <code>crs</code> has five rows,
-     * the following command moves the cursor to the fourth-to-last row, which
-     * in the case of a  rowset with five rows, is also the second row, counting
-     * from the beginning.
-     * <PRE><code>
-     *
-     *    crs.absolute(-4);
-     *
-     * </code> </PRE>
-     *
-     * If the number specified is larger than the number of rows, the cursor
-     * will move to the position after the last row. If the number specified
-     * would move the cursor one or more rows before the first row, the cursor
-     * moves to the position before the first row.
-     * <P>
-     * Note: Calling <code>absolute(1)</code> is the same as calling the
-     * method <code>first()</code>.  Calling <code>absolute(-1)</code> is the
-     * same as calling <code>last()</code>.
-     *
-     * @param row a positive number to indicate the row, starting row numbering from
-     *        the first row, which is <code>1</code>; a negative number to indicate
-     *        the row, starting row numbering from the last row, which is
-     *        <code>-1</code>; must not be <code>0</code>
-     * @return <code>true</code> if the cursor is on the rowset; <code>false</code>
-     *         otherwise
-     * @throws SQLException if the given cursor position is <code>0</code> or the
-     *            type of this rowset is <code>ResultSet.TYPE_FORWARD_ONLY</code>
-     */
-    public boolean absolute(int row) throws SQLException {
-        return crsInternal.absolute(row);
-    }
-
-    /**
-     * Moves the cursor the specified number of rows from the current
-     * position, with a positive number moving it forward and a
-     * negative number moving it backward.
-     * <P>
-     * If the number is positive, the cursor moves the specified number of
-     * rows toward the end of the rowset, starting at the current row.
-     * For example, the following command, in which
-     * <code>crs</code> is a <code>JoinRowSetImpl</code> object with 100 rows,
-     * moves the cursor forward four rows from the current row.  If the
-     * current row is 50, the cursor would move to row 54.
-     * <PRE><code>
-     *
-     *    crs.relative(4);
-     *
-     * </code> </PRE>
-     * <P>
-     * If the number is negative, the cursor moves back toward the beginning
-     * the specified number of rows, starting at the current row.
-     * For example, calling the method
-     * <code>absolute(-1)</code> positions the cursor on the last row,
-     * <code>absolute(-2)</code> moves it on the next-to-last row, and so on.
-     * If the <code>JoinRowSetImpl</code> object <code>crs</code> has five rows,
-     * the following command moves the cursor to the fourth-to-last row, which
-     * in the case of a  rowset with five rows, is also the second row
-     * from the beginning.
-     * <PRE><code>
-     *
-     *    crs.absolute(-4);
-     *
-     * </code> </PRE>
-     *
-     * If the number specified is larger than the number of rows, the cursor
-     * will move to the position after the last row. If the number specified
-     * would move the cursor one or more rows before the first row, the cursor
-     * moves to the position before the first row. In both cases, this method
-     * throws an <code>SQLException</code>.
-     * <P>
-     * Note: Calling <code>absolute(1)</code> is the same as calling the
-     * method <code>first()</code>.  Calling <code>absolute(-1)</code> is the
-     * same as calling <code>last()</code>.  Calling <code>relative(0)</code>
-     * is valid, but it does not change the cursor position.
-     *
-     * @param rows an <code>int</code> indicating the number of rows to move
-     *             the cursor, starting at the current row; a positive number
-     *             moves the cursor forward; a negative number moves the cursor
-     *             backward; must not move the cursor past the valid
-     *             rows
-     * @return <code>true</code> if the cursor is on a row in this
-     *         <code>JoinRowSetImpl</code> object; <code>false</code>
-     *         otherwise
-     * @throws SQLException if there are no rows in this rowset, the cursor is
-     *         positioned either before the first row or after the last row, or
-     *         the rowset is type <code>ResultSet.TYPE_FORWARD_ONLY</code>
-     */
-    public boolean relative(int rows) throws SQLException {
-        return crsInternal.relative(rows);
-    }
-
-    /**
-     * Moves this <code>JoinRowSetImpl</code> object's cursor to the
-     * previous row and returns <code>true</code> if the cursor is on
-     * a valid row or <code>false</code> if it is not.
-     * This method also notifies all listeners registered with this
-     * <code>JoinRowSetImpl</code> object that its cursor has moved.
-     * <P>
-     * Note: calling the method <code>previous()</code> is not the same
-     * as calling the method <code>relative(-1)</code>.  This is true
-     * because it is possible to call <code>previous()</code> from the insert
-     * row, from after the last row, or from the current row, whereas
-     * <code>relative</code> may only be called from the current row.
-     * <P>
-     * The method <code>previous</code> may used in a <code>while</code>
-     * loop to iterate through a rowset starting after the last row
-     * and moving toward the beginning. The loop ends when <code>previous</code>
-     * returns <code>false</code>, meaning that there are no more rows.
-     * For example, the following code fragment retrieves all the data in
-     * the <code>JoinRowSetImpl</code> object <code>crs</code>, which has
-     * three columns.  Note that the cursor must initially be positioned
-     * after the last row so that the first call to the method
-     * <code>previous</code> places the cursor on the last line.
-     * <PRE> <code>
-     *
-     *     crs.afterLast();
-     *     while (previous()) {
-     *         String name = crs.getString(1);
-     *         int age = crs.getInt(2);
-     *         short ssn = crs.getShort(3);
-     *         System.out.println(name + "   " + age + "   " + ssn);
-     *     }
-     *
-     * </code> </PRE>
-     * This method throws an <code>SQLException</code> if the cursor is not
-     * on a row in the rowset, before the first row, or after the last row.
-     *
-     * @return <code>true</code> if the cursor is on a valid row;
-     *         <code>false</code> if it is before the first row or after the
-     *         last row
-     * @throws SQLException if the cursor is not on a valid position or the
-     *           type of this rowset is <code>ResultSet.TYPE_FORWARD_ONLY</code>
-     */
-    public boolean previous() throws SQLException {
-        return crsInternal.previous();
-    }
-
-    /**
-     * Returns the index of the column whose name is <i>columnName</i>.
-     *
-     * @param columnName a <code>String</code> object giving the name of the
-     *        column for which the index will be returned; the name must
-     *        match the SQL name of a column in this <code>JoinRowSet</code>
-     *        object, ignoring case
-     * @throws SQLException if the given column name does not match one of the
-     *         column names for this <code>JoinRowSet</code> object
-     */
-    public int findColumn(String columnName) throws SQLException {
-        return crsInternal.findColumn(columnName);
-    }
-
-    /**
-     * Indicates whether the current row of this <code>JoinRowSetImpl</code>
-     * object has been updated.  The value returned
-     * depends on whether this rowset can detect updates: <code>false</code>
-     * will always be returned if it does not detect updates.
-     *
-     * @return <code>true</code> if the row has been visibly updated
-     *         by the owner or another and updates are detected;
-     *         <code>false</code> otherwise
-     * @throws SQLException if the cursor is on the insert row or not
-     *            on a valid row
-     *
-     * @see DatabaseMetaData#updatesAreDetected
-     */
-    public boolean rowUpdated() throws SQLException {
-        return crsInternal.rowUpdated();
-    }
-
-    /**
-     * Indicates whether the designated column of the current row of
-     * this <code>JoinRowSetImpl</code> object has been updated. The
-     * value returned depends on whether this rowset can detcted updates:
-     * <code>false</code> will always be returned if it does not detect updates.
-     *
-     * @return <code>true</code> if the column updated
-     *          <code>false</code> otherwse
-     * @throws SQLException if the cursor is on the insert row or not
-     *          on a valid row
-     * @see DatabaseMetaData#updatesAreDetected
-     */
-    public boolean columnUpdated(int indexColumn) throws SQLException {
-        return crsInternal.columnUpdated(indexColumn);
-    }
-
-    /**
-     * Indicates whether the current row has been inserted.  The value returned
-     * depends on whether or not the rowset can detect visible inserts.
-     *
-     * @return <code>true</code> if a row has been inserted and inserts are detected;
-     *         <code>false</code> otherwise
-     * @throws SQLException if the cursor is on the insert row or not
-     *            not on a valid row
-     *
-     * @see DatabaseMetaData#insertsAreDetected
-     */
-    public boolean rowInserted() throws SQLException {
-        return crsInternal.rowInserted();
-    }
-
-    /**
-     * Indicates whether the current row has been deleted.  A deleted row
-     * may leave a visible "hole" in a rowset.  This method can be used to
-     * detect such holes if the rowset can detect deletions. This method
-     * will always return <code>false</code> if this rowset cannot detect
-     * deletions.
-     *
-     * @return <code>true</code> if (1)the current row is blank, indicating that
-     *         the row has been deleted, and (2)deletions are detected;
-     *         <code>false</code> otherwise
-     * @throws SQLException if the cursor is on a valid row in this rowset
-     * @see DatabaseMetaData#deletesAreDetected
-     */
-    public boolean rowDeleted() throws SQLException {
-        return crsInternal.rowDeleted();
-    }
-
-    /**
-     * Sets the designated nullable column in the current row or the
-     * insert row of this <code>JoinRowSetImpl</code> object with
-     * <code>null</code> value.
-     * <P>
-     * This method updates a column value in the current row or the insert
-     * row of this rowset; however, another method must be called to complete
-     * the update process. If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to mark the row as updated
-     * and to notify listeners that the row has changed.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called to insert the new row into this rowset and to notify
-     * listeners that a row has changed.
-     * <P>
-     * In order to propagate updates in this rowset to the underlying
-     * data source, an application must call the method acceptChanges
-     * after it calls either <code>updateRow</code> or <code>insertRow</code>.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateNull(int columnIndex) throws SQLException {
-        crsInternal.updateNull(columnIndex);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>JoinRowSetImpl</code> object with the given
-     * <code>boolean</code> value.
-     * <P>
-     * This method updates a column value in the current row or the insert
-     * row of this rowset, but it does not update the database.
-     * If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param x the new column value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateBoolean(int columnIndex, boolean x) throws SQLException {
-        crsInternal.updateBoolean(columnIndex, x);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>JoinRowSetImpl</code> object with the given
-     * <code>byte</code> value.
-     * <P>
-     * This method updates a column value in the current row or the insert
-     * row of this rowset, but it does not update the database.
-     * If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param x the new column value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateByte(int columnIndex, byte x) throws SQLException {
-        crsInternal.updateByte(columnIndex, x);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>JoinRowSetImpl</code> object with the given
-     * <code>short</code> value.
-     * <P>
-     * This method updates a column value in the current row or the insert
-     * row of this rowset, but it does not update the database.
-     * If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param x the new column value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateShort(int columnIndex, short x) throws SQLException {
-        crsInternal.updateShort(columnIndex, x);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>JoinRowSetImpl</code> object with the given
-     * <code>int</code> value.
-     * <P>
-     * This method updates a column value in the current row or the insert
-     * row of this rowset, but it does not update the database.
-     * If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param x the new column value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateInt(int columnIndex, int x) throws SQLException {
-        crsInternal.updateInt(columnIndex, x);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>JoinRowSetImpl</code> object with the given
-     * <code>long</code> value.
-     * <P>
-     * This method updates a column value in the current row or the insert
-     * row of this rowset, but it does not update the database.
-     * If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param x the new column value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateLong(int columnIndex, long x) throws SQLException {
-        crsInternal.updateLong(columnIndex, x);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>JoinRowSetImpl</code> object with the given
-     * <code>float</code> value.
-     * <P>
-     * This method updates a column value in the current row or the insert
-     * row of this rowset, but it does not update the database.
-     * If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param x the new column value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateFloat(int columnIndex, float x) throws SQLException {
-        crsInternal.updateFloat(columnIndex, x);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>JoinRowSetImpl</code> object with the given
-     * <code>double</code> value.
-     *
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param x the new column value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateDouble(int columnIndex, double x) throws SQLException {
-        crsInternal.updateDouble(columnIndex, x);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>JoinRowSetImpl</code> object with the given
-     * <code>java.math.BigDecimal</code> object.
-     * <P>
-     * This method updates a column value in the current row or the insert
-     * row of this rowset, but it does not update the database.
-     * If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param x the new column value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateBigDecimal(int columnIndex, BigDecimal x) throws SQLException {
-        crsInternal.updateBigDecimal(columnIndex, x);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>JoinRowSetImpl</code> object with the given
-     * <code>String</code> object.
-     * <P>
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to mark the row as updated.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called to insert the new row into this rowset and mark it
-     * as inserted. Both of these methods must be called before the
-     * cursor moves to another row.
-     * <P>
-     * The method <code>acceptChanges</code> must be called if the
-     * updated values are to be written back to the underlying database.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param x the new column value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateString(int columnIndex, String x) throws SQLException {
-        crsInternal.updateString(columnIndex, x);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>JoinRowSetImpl</code> object with the given
-     * <code>byte</code> array.
-     *
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param x the new column value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateBytes(int columnIndex, byte x[]) throws SQLException {
-        crsInternal.updateBytes(columnIndex, x);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>JoinRowSetImpl</code> object with the given
-     * <code>Date</code> object.
-     *
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param x the new column value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, (3) the type of the designated column is not
-     *            an SQL <code>DATE</code> or <code>TIMESTAMP</code>, or
-     *            (4) this rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateDate(int columnIndex, java.sql.Date x) throws SQLException {
-        crsInternal.updateDate(columnIndex, x);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>JoinRowSetImpl</code> object with the given
-     * <code>Time</code> object.
-     *
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param x the new column value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, (3) the type of the designated column is not
-     *            an SQL <code>TIME</code> or <code>TIMESTAMP</code>, or
-     *            (4) this rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateTime(int columnIndex, java.sql.Time x) throws SQLException {
-        crsInternal.updateTime(columnIndex, x);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>JoinRowSetImpl</code> object with the given
-     * <code>Timestamp</code> object.
-     *
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param x the new column value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, (3) the type of the designated column is not
-     *            an SQL <code>DATE</code>, <code>TIME</code>, or
-     *            <code>TIMESTAMP</code>, or (4) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateTimestamp(int columnIndex, java.sql.Timestamp x) throws SQLException {
-        crsInternal.updateTimestamp(columnIndex, x);
-    }
-
-    /*
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>JoinRowSetImpl</code> object with the given
-     * ASCII stream value.
-     * <P>
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param x the new column value
-     * @param length the number of one-byte ASCII characters in the stream
-     * @throws UnsupportedOperationException if this method is invoked
-     */
-    public void updateAsciiStream(int columnIndex, java.io.InputStream x, int length) throws SQLException {
-        crsInternal.updateAsciiStream(columnIndex, x, length);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>JoinRowSetImpl</code> object with the given
-     * <code>java.io.InputStream</code> object.
-     * <P>
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param x the new column value; must be a <code>java.io.InputStream</code>
-     *          containing <code>BINARY</code>, <code>VARBINARY</code>, or
-     *          <code>LONGVARBINARY</code> data
-     * @param length the length of the stream in bytes
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, (3) the data in the stream is not binary, or
-     *            (4) this rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateBinaryStream(int columnIndex, java.io.InputStream x, int length) throws SQLException {
-        crsInternal.updateBinaryStream(columnIndex, x, length);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>JoinRowSetImpl</code> object with the given
-     * <code>java.io.Reader</code> object.
-     * <P>
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param x the new column value; must be a <code>java.io.Reader</code>
-     *          containing <code>BINARY</code>, <code>VARBINARY</code>,
-     *          <code>LONGVARBINARY</code>, <code>CHAR</code>, <code>VARCHAR</code>,
-     *          or <code>LONGVARCHAR</code> data
-     * @param length the length of the stream in characters
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, (3) the data in the stream is not a binary or
-     *            character type, or (4) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateCharacterStream(int columnIndex, java.io.Reader x, int length) throws SQLException {
-        crsInternal.updateCharacterStream(columnIndex, x, length);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>JoinRowSetImpl</code> object with the given
-     * <code>Object</code> value.  The <code>scale</code> parameter indicates
-     * the number of digits to the right of the decimal point and is ignored
-     * if the new column value is not a type that will be mapped to an SQL
-     * <code>DECIMAL</code> or <code>NUMERIC</code> value.
-     * <P>
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param x the new column value
-     * @param scale the number of digits to the right of the decimal point (for
-     *              <code>DECIMAL</code> and <code>NUMERIC</code> types only)
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateObject(int columnIndex, Object x, int scale) throws SQLException {
-        crsInternal.updateObject(columnIndex, x, scale);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>JoinRowSetImpl</code> object with the given
-     * <code>Object</code> value.
-     * <P>
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param x the new column value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateObject(int columnIndex, Object x) throws SQLException {
-        crsInternal.updateObject(columnIndex, x);
-    }
-
-    // columnName updates
-
-    /**
-     * Sets the designated nullable column in the current row or the
-     * insert row of this <code>JoinRowSetImpl</code> object with
-     * <code>null</code> value.
-     * <P>
-     * This method updates a column value in the current row or the insert
-     * row of this rowset, but it does not update the database.
-     * If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateNull(String columnName) throws SQLException {
-        crsInternal.updateNull(columnName);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>JoinRowSetImpl</code> object with the given
-     * <code>boolean</code> value.
-     * <P>
-     * This method updates a column value in the current row or the insert
-     * row of this rowset, but it does not update the database.
-     * If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param x the new column value
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateBoolean(String columnName, boolean x) throws SQLException {
-        crsInternal.updateBoolean(columnName, x);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>JoinRowSetImpl</code> object with the given
-     * <code>byte</code> value.
-     * <P>
-     * This method updates a column value in the current row or the insert
-     * row of this rowset, but it does not update the database.
-     * If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param x the new column value
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateByte(String columnName, byte x) throws SQLException {
-        crsInternal.updateByte(columnName, x);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>JoinRowSetImpl</code> object with the given
-     * <code>short</code> value.
-     * <P>
-     * This method updates a column value in the current row or the insert
-     * row of this rowset, but it does not update the database.
-     * If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param x the new column value
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateShort(String columnName, short x) throws SQLException {
-        crsInternal.updateShort(columnName, x);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>JoinRowSetImpl</code> object with the given
-     * <code>int</code> value.
-     * <P>
-     * This method updates a column value in the current row or the insert
-     * row of this rowset, but it does not update the database.
-     * If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param x the new column value
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateInt(String columnName, int x) throws SQLException {
-        crsInternal.updateInt(columnName, x);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>JoinRowSetImpl</code> object with the given
-     * <code>long</code> value.
-     * <P>
-     * This method updates a column value in the current row or the insert
-     * row of this rowset, but it does not update the database.
-     * If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param x the new column value
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateLong(String columnName, long x) throws SQLException {
-        crsInternal.updateLong(columnName, x);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>JoinRowSetImpl</code> object with the given
-     * <code>float</code> value.
-     * <P>
-     * This method updates a column value in the current row or the insert
-     * row of this rowset, but it does not update the database.
-     * If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param x the new column value
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateFloat(String columnName, float x) throws SQLException {
-        crsInternal.updateFloat(columnName, x);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>JoinRowSetImpl</code> object with the given
-     * <code>double</code> value.
-     *
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param x the new column value
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateDouble(String columnName, double x) throws SQLException {
-        crsInternal.updateDouble(columnName, x);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>JoinRowSetImpl</code> object with the given
-     * <code>java.math.BigDecimal</code> object.
-     * <P>
-     * This method updates a column value in the current row or the insert
-     * row of this rowset, but it does not update the database.
-     * If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param x the new column value
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateBigDecimal(String columnName, BigDecimal x) throws SQLException {
-        crsInternal.updateBigDecimal(columnName, x);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>JoinRowSetImpl</code> object with the given
-     * <code>String</code> object.
-     *
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param x the new column value
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateString(String columnName, String x) throws SQLException {
-        crsInternal.updateString(columnName, x);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>JoinRowSetImpl</code> object with the given
-     * <code>byte</code> array.
-     *
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param x the new column value
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateBytes(String columnName, byte x[]) throws SQLException {
-        crsInternal.updateBytes(columnName, x);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>JoinRowSetImpl</code> object with the given
-     * <code>Date</code> object.
-     *
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param x the new column value
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, (3) the type
-     *            of the designated column is not an SQL <code>DATE</code> or
-     *            <code>TIMESTAMP</code>, or (4) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateDate(String columnName, java.sql.Date x) throws SQLException {
-        crsInternal.updateDate(columnName, x);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>JoinRowSetImpl</code> object with the given
-     * <code>Time</code> object.
-     *
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param x the new column value
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, (3) the type
-     *            of the designated column is not an SQL <code>TIME</code> or
-     *            <code>TIMESTAMP</code>, or (4) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateTime(String columnName, java.sql.Time x) throws SQLException {
-        crsInternal.updateTime(columnName, x);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>JoinRowSetImpl</code> object with the given
-     * <code>Timestamp</code> object.
-     *
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param x the new column value
-     * @throws SQLException if the given column index is out of bounds or
-     *            the cursor is not on one of this rowset's rows or its
-     *            insert row
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, (3) the type
-     *            of the designated column is not an SQL <code>DATE</code>,
-     *            <code>TIME</code>, or <code>TIMESTAMP</code>, or (4) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateTimestamp(String columnName, java.sql.Timestamp x) throws SQLException {
-        crsInternal.updateTimestamp(columnName, x);
-    }
-
-    /**
-     * Unsupported; throws an <code>UnsupportedOperationException</code>
-     * if called.
-     * <P>
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>JoinRowSetImpl</code> object with the given
-     * ASCII stream value.
-     * <P>
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param x the new column value
-     * @param length the number of one-byte ASCII characters in the stream
-     * @throws UnsupportedOperationException if this method is invoked
-     */
-    public void updateAsciiStream(String columnName, java.io.InputStream x, int length) throws SQLException {
-        crsInternal.updateAsciiStream(columnName, x, length);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>JoinRowSetImpl</code> object with the given
-     * <code>java.io.InputStream</code> object.
-     * <P>
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param x the new column value; must be a <code>java.io.InputStream</code>
-     *          containing <code>BINARY</code>, <code>VARBINARY</code>, or
-     *          <code>LONGVARBINARY</code> data
-     * @param length the length of the stream in bytes
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, (3) the data
-     *            in the stream is not binary, or (4) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateBinaryStream(String columnName, java.io.InputStream x, int length) throws SQLException {
-        crsInternal.updateBinaryStream(columnName, x, length);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>JoinRowSetImpl</code> object with the given
-     * <code>java.io.Reader</code> object.
-     * <P>
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param x the new column value; must be a <code>java.io.Reader</code>
-     *          containing <code>BINARY</code>, <code>VARBINARY</code>,
-     *          <code>LONGVARBINARY</code>, <code>CHAR</code>, <code>VARCHAR</code>,
-     *          or <code>LONGVARCHAR</code> data
-     * @param length the length of the stream in characters
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, (3) the data
-     *            in the stream is not a binary or character type, or (4) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateCharacterStream(String columnName, java.io.Reader x, int length) throws SQLException {
-        crsInternal.updateCharacterStream(columnName, x, length);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>JoinRowSetImpl</code> object with the given
-     * <code>Object</code> value.  The <code>scale</code> parameter
-     * indicates the number of digits to the right of the decimal point
-     * and is ignored if the new column value is not a type that will be
-     *  mapped to an SQL <code>DECIMAL</code> or <code>NUMERIC</code> value.
-     * <P>
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param x the new column value
-     * @param scale the number of digits to the right of the decimal point (for
-     *              <code>DECIMAL</code> and <code>NUMERIC</code> types only)
-     * @throws SQLException if the given column index is out of bounds or
-     *            the cursor is not on one of this rowset's rows or its
-     *            insert row
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateObject(String columnName, Object x, int scale) throws SQLException {
-        crsInternal.updateObject(columnName, x, scale);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>JoinRowSetImpl</code> object with the given
-     * <code>Object</code> value.
-     * <P>
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param x the new column value
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateObject(String columnName, Object x) throws SQLException {
-        crsInternal.updateObject(columnName, x);
-    }
-
-    /**
-     * Inserts the contents of this <code>JoinRowSetImpl</code> object's insert
-     * row into this rowset immediately following the current row.
-     * If the current row is the
-     * position after the last row or before the first row, the new row will
-     * be inserted at the end of the rowset.  This method also notifies
-     * listeners registered with this rowset that the row has changed.
-     * <P>
-     * The cursor must be on the insert row when this method is called.
-     *
-     * @throws SQLException if (1) the cursor is not on the insert row,
-     *            (2) one or more of the non-nullable columns in the insert
-     *            row has not been given a value, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void insertRow() throws SQLException {
-        crsInternal.insertRow();
-    }
-
-    /**
-     * Marks the current row of this <code>JoinRowSetImpl</code> object as
-     * updated and notifies listeners registered with this rowset that the
-     * row has changed.
-     * <P>
-     * This method  cannot be called when the cursor is on the insert row, and
-     * it should be called before the cursor moves to another row.  If it is
-     * called after the cursor moves to another row, this method has no effect,
-     * and the updates made before the cursor moved will be lost.
-     *
-     * @throws SQLException if the cursor is on the insert row or this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateRow() throws SQLException {
-        crsInternal.updateRow();
-    }
-
-    /**
-     * Deletes the current row from this <code>JoinRowSetImpl</code> object and
-     * notifies listeners registered with this rowset that a row has changed.
-     * This method cannot be called when the cursor is on the insert row.
-     * <P>
-     * This method marks the current row as deleted, but it does not delete
-     * the row from the underlying data source.  The method
-     * <code>acceptChanges</code> must be called to delete the row in
-     * the data source.
-     *
-     * @throws SQLException if (1) this method is called when the cursor
-     *            is on the insert row, before the first row, or after the
-     *            last row or (2) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void deleteRow() throws SQLException {
-        crsInternal.deleteRow();
-    }
-
-    /**
-     * Sets the current row with its original value and marks the row as
-     * not updated, thus undoing any changes made to the row since the
-     * last call to the methods <code>updateRow</code> or <code>deleteRow</code>.
-     * This method should be called only when the cursor is on a row in
-     * this rowset.
-     *
-     * @throws SQLException if the cursor is on the insert row, before the
-     *            first row, or after the last row
-     */
-    public void refreshRow() throws SQLException {
-        crsInternal.refreshRow();
-    }
-
-    /**
-     * Rolls back any updates made to the current row of this
-     * <code>JoinRowSetImpl</code> object and notifies listeners that
-     * a row has changed.  To have an effect, this method
-     * must be called after an <code>updateXXX</code> method has been
-     * called and before the method <code>updateRow</code> has been called.
-     * If no updates have been made or the method <code>updateRow</code>
-     * has already been called, this method has no effect.
-     * <P>
-     * After <code>updateRow</code> is called it is the
-     * <code>cancelRowUpdates</code> has no affect on the newly
-     * inserted values. The method <code>cancelRowInsert</code> can
-     * be used to remove any rows inserted into the RowSet.
-     *
-     * @throws SQLException if the cursor is on the insert row, before the
-     *            first row, or after the last row
-     */
-    public void cancelRowUpdates() throws SQLException {
-        crsInternal.cancelRowUpdates();
-    }
-
-    /**
-     * Moves the cursor for this <code>JoinRowSetImpl</code> object
-     * to the insert row.  The current row in the rowset is remembered
-     * while the cursor is on the insert row.
-     * <P>
-     * The insert row is a special row associated with an updatable
-     * rowset.  It is essentially a buffer where a new row may
-     * be constructed by calling the appropriate <code>updateXXX</code>
-     * methods to assign a value to each column in the row.  A complete
-     * row must be constructed; that is, every column that is not nullable
-     * must be assigned a value.  In order for the new row to become part
-     * of this rowset, the method <code>insertRow</code> must be called
-     * before the cursor is moved back to the rowset.
-     * <P>
-     * Only certain methods may be invoked while the cursor is on the insert
-     * row; many methods throw an exception if they are called while the
-     * cursor is there.  In addition to the <code>updateXXX</code>
-     * and <code>insertRow</code> methods, only the <code>getXXX</code> methods
-     * may be called when the cursor is on the insert row.  A <code>getXXX</code>
-     * method should be called on a column only after an <code>updateXXX</code>
-     * method has been called on that column; otherwise, the value returned is
-     * undetermined.
-     *
-     * @throws SQLException if this <code>JoinRowSetImpl</code> object is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void moveToInsertRow() throws SQLException {
-        crsInternal.moveToInsertRow();
-    }
-
-    /**
-     * Moves the cursor for this <code>JoinRowSetImpl</code> object to
-     * the current row.  The current row is the row the cursor was on
-     * when the method <code>moveToInsertRow</code> was called.
-     * <P>
-     * Calling this method has no effect unless it is called while the
-     * cursor is on the insert row.
-     *
-     * @throws SQLException if an error occurs
-     */
-    public void moveToCurrentRow() throws SQLException {
-        crsInternal.moveToCurrentRow();
-    }
-
-    /**
-     * Returns <code>null</code>.
-     *
-     * @return <code>null</code>
-     * @throws SQLException if an error occurs
-     */
-    public Statement getStatement() throws SQLException {
-        return crsInternal.getStatement();
-    }
-
-    /**
-     * Retrieves the value of the designated column in this
-     * <code>JoinRowSetImpl</code> object as a <code>Ref</code> object
-     * in the Java programming lanugage.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @return a <code>Ref</code> object representing an SQL<code> REF</code> value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) the designated column does not store an
-     *            SQL <code>REF</code> value
-     */
-    public Ref getRef(int columnIndex) throws SQLException {
-        return crsInternal.getRef(columnIndex);
-    }
-
-    /**
-     * Retrieves the value of the designated column in this
-     * <code>JoinRowSetImpl</code> object as a <code>Blob</code> object
-     * in the Java programming lanugage.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @return a <code>Blob</code> object representing an SQL <code>BLOB</code> value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) the designated column does not store an
-     *            SQL <code>BLOB</code> value
-     */
-    public Blob getBlob(int columnIndex) throws SQLException {
-        return crsInternal.getBlob(columnIndex);
-    }
-
-    /**
-     * Retrieves the value of the designated column in this
-     * <code>JoinRowSetImpl</code> object as a <code>Clob</code> object
-     * in the Java programming lanugage.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @return a <code>Clob</code> object representing an SQL <code>CLOB</code> value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) the designated column does not store an
-     *            SQL <code>CLOB</code> value
-     */
-    public Clob getClob(int columnIndex) throws SQLException {
-        return crsInternal.getClob(columnIndex);
-    }
-
-    /**
-     * Retrieves the value of the designated column in this
-     * <code>JoinRowSetImpl</code> object as an <code>Array</code> object
-     * in the Java programming lanugage.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @return an <code>Array</code> object representing an SQL
-     *         <code>ARRAY</code> value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) the designated column does not store an
-     *            SQL <code>ARRAY</code> value
-     */
-     public Array getArray(int columnIndex) throws SQLException {
-        return crsInternal.getArray(columnIndex);
-    }
-
-    // ColumnName
-
-    /**
-     * Retrieves the value of the designated column in this
-     * <code>JoinRowSetImpl</code> object as a <code>Ref</code> object
-     * in the Java programming lanugage.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @return a <code>Ref</code> object representing an SQL<code> REF</code> value
-     * @throws SQLException  if (1) the given column name is not the name
-     *         of a column in this rowset, (2) the cursor is not on one of
-     *         this rowset's rows or its insert row, or (3) the column value
-     *         is not an SQL <code>REF</code> value
-     */
-    public Ref getRef(String columnName) throws SQLException {
-        return crsInternal.getRef(columnName);
-    }
-
-    /**
-     * Retrieves the value of the designated column in this
-     * <code>JoinRowSetImpl</code> object as a <code>Blob</code> object
-     * in the Java programming lanugage.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @return a <code>Blob</code> object representing an SQL
-     *        <code>BLOB</code> value
-     * @throws SQLException if (1) the given column name is not the name of
-     *        a column in this rowset, (2) the cursor is not on one of
-     *        this rowset's rows or its insert row, or (3) the designated
-     *        column does not store an SQL <code>BLOB</code> value
-     */
-    public Blob getBlob(String columnName) throws SQLException {
-        return crsInternal.getBlob(columnName);
-    }
-
-    /**
-     * Retrieves the value of the designated column in this
-     * <code>JoinRowSetImpl</code> object as a <code>Clob</code> object
-     * in the Java programming lanugage.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @return a <code>Clob</code> object representing an SQL
-     *         <code>CLOB</code> value
-     * @throws SQLException if (1) the given column name is not the name of
-     *            a column in this rowset, (2) the cursor is not on one of
-     *            this rowset's rows or its insert row, or (3) the designated
-     *            column does not store an SQL <code>CLOB</code> value
-     */
-    public Clob getClob(String columnName) throws SQLException {
-        return crsInternal.getClob(columnName);
-    }
-
-    /**
-     * Retrieves the value of the designated column in this
-     * <code>JoinRowSetImpl</code> object as an <code>Array</code> object
-     * in the Java programming lanugage.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @return an <code>Array</code> object representing an SQL
-     *        <code>ARRAY</code> value
-     * @throws SQLException if (1) the given column name is not the name of
-     *        a column in this rowset, (2) the cursor is not on one of
-     *        this rowset's rows or its insert row, or (3) the designated
-     *        column does not store an SQL <code>ARRAY</code> value
-     */
-    public Array getArray(String columnName) throws SQLException {
-        return crsInternal.getArray(columnName);
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>JoinRowSetImpl</code> object as a <code>java.sql.Date</code>
-     * object, using the given <code>Calendar</code> object to construct an
-     * appropriate millisecond value for the date.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in the rowset
-     * @param cal the <code>java.util.Calendar</code> object to use in
-     *            constructing the date
-     * @return the column value; if the value is SQL <code>NULL</code>,
-     *         the result is <code>null</code>
-     * @throws SQLException if (1) the given column name is not the name of
-     *            a column in this rowset, (2) the cursor is not on one of
-     *            this rowset's rows or its insert row, or (3) the designated
-     *            column does not store an SQL <code>DATE</code> or
-     *            <code>TIMESTAMP</code> value
-     */
-    public java.sql.Date getDate(int columnIndex, Calendar cal) throws SQLException {
-        return crsInternal.getDate(columnIndex, cal);
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>JoinRowSetImpl</code> object as a <code>java.sql.Date</code>
-     * object, using the given <code>Calendar</code> object to construct an
-     * appropriate millisecond value for the date.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param cal the <code>java.util.Calendar</code> object to use in
-     *            constructing the date
-     * @return the column value; if the value is SQL <code>NULL</code>,
-     *         the result is <code>null</code>
-     * @throws SQLException if (1) the given column name is not the name of
-     *            a column in this rowset, (2) the cursor is not on one of
-     *            this rowset's rows or its insert row, or (3) the designated
-     *            column does not store an SQL <code>DATE</code> or
-     *            <code>TIMESTAMP</code> value
-     */
-    public java.sql.Date getDate(String columnName, Calendar cal) throws SQLException {
-        return crsInternal.getDate(columnName, cal);
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>JoinRowSetImpl</code> object as a <code>java.sql.Time</code>
-     * object, using the given <code>Calendar</code> object to construct an
-     * appropriate millisecond value for the date.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in the rowset
-     * @param cal the <code>java.util.Calendar</code> object to use in
-     *            constructing the date
-     * @return the column value; if the value is SQL <code>NULL</code>,
-     *         the result is <code>null</code>
-     * @throws SQLException if (1) the given column name is not the name of
-     *            a column in this rowset, (2) the cursor is not on one of
-     *            this rowset's rows or its insert row, or (3) the designated
-     *            column does not store an SQL <code>TIME</code> or
-     *            <code>TIMESTAMP</code> value
-     */
-    public java.sql.Time getTime(int columnIndex, Calendar cal) throws SQLException {
-        return crsInternal.getTime(columnIndex, cal);
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>JoinRowSetImpl</code> object as a <code>java.sql.Time</code>
-     * object, using the given <code>Calendar</code> object to construct an
-     * appropriate millisecond value for the date.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param cal the <code>java.util.Calendar</code> object to use in
-     *            constructing the date
-     * @return the column value; if the value is SQL <code>NULL</code>,
-     *         the result is <code>null</code>
-     * @throws SQLException if (1) the given column name is not the name of
-     *            a column in this rowset, (2) the cursor is not on one of
-     *            this rowset's rows or its insert row, or (3) the designated
-     *            column does not store an SQL <code>TIME</code> or
-     *            <code>TIMESTAMP</code> value
-     */
-    public java.sql.Time getTime(String columnName, Calendar cal) throws SQLException {
-        return crsInternal.getTime(columnName, cal);
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>JoinRowSetImpl</code> object as a <code>java.sql.Timestamp</code>
-     * object, using the given <code>Calendar</code> object to construct an
-     * appropriate millisecond value for the date.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in the rowset
-     * @param cal the <code>java.util.Calendar</code> object to use in
-     *            constructing the date
-     * @return the column value; if the value is SQL <code>NULL</code>,
-     *         the result is <code>null</code>
-     * @throws SQLException if (1) the given column name is not the name of
-     *            a column in this rowset, (2) the cursor is not on one of
-     *            this rowset's rows or its insert row, or (3) the designated
-     *            column does not store an SQL <code>TIME</code> or
-     *            <code>TIMESTAMP</code> value
-     */
-    public java.sql.Timestamp getTimestamp(int columnIndex, Calendar cal) throws SQLException {
-        return crsInternal.getTimestamp(columnIndex, cal);
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>JoinRowSetImpl</code> object as a
-     * <code>java.sql.Timestamp</code> object, using the given
-     * <code>Calendar</code> object to construct an appropriate
-     * millisecond value for the date.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param cal the <code>java.util.Calendar</code> object to use in
-     *            constructing the date
-     * @return the column value; if the value is SQL <code>NULL</code>,
-     *         the result is <code>null</code>
-     * @throws SQLException if (1) the given column name is not the name of
-     *            a column in this rowset, (2) the cursor is not on one of
-     *            this rowset's rows or its insert row, or (3) the designated
-     *            column does not store an SQL <code>DATE</code>,
-     *            <code>TIME</code>, or <code>TIMESTAMP</code> value
-     */
-    public java.sql.Timestamp getTimestamp(String columnName, Calendar cal) throws SQLException {
-        return crsInternal.getTimestamp(columnName, cal);
-    }
-
-   /**
-    * Sets the metadata for this <code>JoinRowSetImpl</code> object
-    * with the given <code>RowSetMetaData</code> object.
-    *
-    * @param md a <code>RowSetMetaData</code> object instance containing
-    *            metadata about the columsn in the rowset
-    * @throws SQLException if invalid meta data is supplied to the
-    *            rowset
-    */
-    public void setMetaData(RowSetMetaData md) throws SQLException {
-        crsInternal.setMetaData(md);
-    }
-
-    public ResultSet getOriginal() throws SQLException {
-        return crsInternal.getOriginal();
-    }
-
-   /**
-    * Returns a result set containing the original value of the rowset.
-    * The cursor is positioned before the first row in the result set.
-    * Only rows contained in the result set returned by getOriginal()
-    * are said to have an original value.
-    *
-    * @return the original result set of the rowset
-    * @throws SQLException if an error occurs produce the
-    *           <code>ResultSet</code> object
-    */
-    public ResultSet getOriginalRow() throws SQLException {
-        return crsInternal.getOriginalRow();
-    }
-
-   /**
-    * Returns a result set containing the original value of the current
-    * row only.
-    *
-    * @throws SQLException if there is no current row
-    * @see #setOriginalRow
-    */
-    public void setOriginalRow() throws SQLException {
-        crsInternal.setOriginalRow();
-    }
-
-   /**
-    * Returns the columns that make a key to uniquely identify a
-    * row in this <code>JoinRowSetImpl</code> object.
-    *
-    * @return an array of column number that constites a primary
-    *           key for this rowset. This array should be empty
-    *           if no columns is representitive of a primary key
-    * @throws SQLException if the rowset is empty or no columns
-    *           are designated as primary keys
-    * @see #setKeyColumns
-    */
-    public int[] getKeyColumns() throws SQLException {
-        return crsInternal.getKeyColumns();
-    }
-
-    /**
-     * Sets this <code>JoinRowSetImpl</code> object's
-     * <code>keyCols</code> field with the given array of column
-     * numbers, which forms a key for uniquely identifying a row
-     * in this rowset.
-     *
-     * @param cols an array of <code>int</code> indicating the
-     *        columns that form a primary key for this
-     *        <code>JoinRowSetImpl</code> object; every
-     *        element in the array must be greater than
-     *        <code>0</code> and less than or equal to the number
-     *        of columns in this rowset
-     * @throws SQLException if any of the numbers in the
-     *            given array is not valid for this rowset
-     * @see #getKeyColumns
-     */
-    public void setKeyColumns(int[] cols) throws SQLException {
-        crsInternal.setKeyColumns(cols);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>JoinRowSetImpl</code> object with the given
-     * <code>Ref</code> value.
-     * <P>
-     * This method updates a column value in the current row or the insert
-     * row of this rowset, but it does not update the database.
-     * If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Either of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param ref the <code>java.sql.Ref</code> object that will be set as
-     *         the new column value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateRef(int columnIndex, java.sql.Ref ref) throws SQLException {
-        crsInternal.updateRef(columnIndex, ref);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>JoinRowSetImpl</code> object with the given
-     * <code>Ref</code> value.
-     * <P>
-     * This method updates a column value in the current row or the insert
-     * row of this rowset, but it does not update the database.
-     * If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Either of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object giving the name of the column
-     *        to be updated; must match one of the column names in this
-     *        <code>JoinRowSetImpl</code> object
-     * @param ref the <code>java.sql.Ref</code> object that will be set as
-     *         the new column value
-     * @throws SQLException if (1) the given column name is not valid,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateRef(String columnName, java.sql.Ref ref) throws SQLException {
-        crsInternal.updateRef(columnName, ref);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>JoinRowSetImpl</code> object with the given
-     * <code>Clob</code> object.
-     * <P>
-     * This method updates a column value in the current row or the insert
-     * row of this rowset, but it does not update the database.
-     * If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Either of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param c the <code>java.sql.Clob</code> object that will be set as
-     *         the new column value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateClob(int columnIndex, Clob c) throws SQLException {
-        crsInternal.updateClob(columnIndex, c);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>JoinRowSetImpl</code> object with the given
-     * <code>Clob</code> object.
-     * <P>
-     * This method updates a column value in the current row or the insert
-     * row of this rowset, but it does not update the database.
-     * If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Either of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object giving the name of the column
-     *        to be updated; must match one of the column names in this
-     *        <code>JoinRowSetImpl</code> object
-     * @param c the <code>java.sql.Clob</code> object that will be set as
-     *         the new column value
-     * @throws SQLException if (1) the given column name is not valid,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateClob(String columnName, Clob c) throws SQLException {
-        crsInternal.updateClob(columnName, c);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>JoinRowSetImpl</code> object with the given
-     * <code>Blob</code> value.
-     * <P>
-     * This method updates a column value in the current row or the insert
-     * row of this rowset, but it does not update the database.
-     * If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Either of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param b the <code>java.sql.Blob</code> object that will be set as
-     *         the new column value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateBlob(int columnIndex, Blob b) throws SQLException {
-         crsInternal.updateBlob(columnIndex, b);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>JoinRowSetImpl</code> object with the given
-     * <code>Blob</code> object.
-     * <P>
-     * This method updates a column value in the current row or the insert
-     * row of this rowset, but it does not update the database.
-     * If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Either of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object giving the name of the column
-     *        to be updated; must match one of the column names in this
-     *        <code>JoinRowSetImpl</code> object
-     * @param b the <code>java.sql.Blob</code> object that will be set as
-     *         the new column value
-     * @throws SQLException if (1) the given column name is not valid,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateBlob(String columnName, Blob b) throws SQLException {
-         crsInternal.updateBlob(columnName, b);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>JoinRowSetImpl</code> object with the given
-     * <code>Array</code> object.
-     * <P>
-     * This method updates a column value in the current row or the insert
-     * row of this rowset, but it does not update the database.
-     * If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Either of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param a the <code>java.sql.Array</code> object that will be set as
-     *         the new column value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateArray(int columnIndex, Array a) throws SQLException {
-         crsInternal.updateArray(columnIndex, a);
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>JoinRowSetImpl</code> object with the given
-     * <code>Array</code> object.
-     * <P>
-     * This method updates a column value in the current row or the insert
-     * row of this rowset, but it does not update the database.
-     * If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Either of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object giving the name of the column
-     *        to be updated; must match one of the column names in this
-     *        <code>JoinRowSetImpl</code> object
-     * @param a the <code>java.sql.Array</code> object that will be set as
-     *         the new column value
-     * @throws SQLException if (1) the given column name is not valid,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateArray(String columnName, Array a) throws SQLException {
-         crsInternal.updateArray(columnName, a);
-    }
-
-    /**
-     * Populates this <code>JoinRowSetImpl</code> object with data.
-     * This form of the method uses the rowset's user, password, and url or
-     * data source name properties to create a database
-     * connection.  If properties that are needed
-     * have not been set, this method will throw an exception.
-     * <P>
-     * Another form of this method uses an existing JDBC <code>Connection</code>
-     * object instead of creating a new one; therefore, it ignores the
-     * properties used for establishing a new connection.
-     * <P>
-     * The query specified by the command property is executed to create a
-     * <code>ResultSet</code> object from which to retrieve data.
-     * The current contents of the rowset are discarded, and the
-     * rowset's metadata is also (re)set.  If there are outstanding updates,
-     * they are also ignored.
-     * <P>
-     * The method <code>execute</code> closes any database connections that it
-     * creates.
-     *
-     * @throws SQLException if an error occurs or the
-     *                         necessary properties have not been set
-     */
-    public void execute() throws SQLException {
-        crsInternal.execute();
-    }
-
-    /**
-     * Populates this <code>JoinRowSetImpl</code> object with data,
-     * using the given connection to produce the result set from
-     * which data will be read.  A second form of this method,
-     * which takes no arguments, uses the values from this rowset's
-     * user, password, and either url or data source properties to
-     * create a new database connection. The form of <code>execute</code>
-     * that is given a connection ignores these properties.
-     *
-     *  @param conn A standard JDBC <code>Connection</code> object with valid
-     *           properties that the <code>JoinRowSet</code> implementation
-     *           can pass to a synchronization provider to establish a
-     *           connection to the datasource
-     * @throws SQLException if an invalid <code>Connection</code> is supplied
-     *           or an error occurs in establishing the connection to the
-     *           data soure
-     * @see java.sql.Connection
-     */
-    public void execute(Connection conn) throws SQLException {
-        crsInternal.execute(conn);
-    }
-
-    /**
-     * Provide interface coverage for getURL(int) in ResultSet->RowSet
-     */
-    public java.net.URL getURL(int columnIndex) throws SQLException {
-        return crsInternal.getURL(columnIndex);
-    }
-
-    /**
-     * Provide interface coverage for getURL(String) in ResultSet->RowSet
-     */
-    public java.net.URL getURL(String columnName) throws SQLException {
-        return crsInternal.getURL(columnName);
-    }
-
-   /**
-    * Creates a new <code>WebRowSet</code> object, populates it with the
-    * data in the given <code>ResultSet</code> object, and writes it
-    * to the given <code>java.io.Writer</code> object in XML format.
-    *
-    * @throws SQLException if an error occurs writing out the rowset
-    *          contents to XML
-    */
-    public void writeXml(ResultSet rs, java.io.Writer writer)
-        throws SQLException {
-             wrs = new WebRowSetImpl();
-             wrs.populate(rs);
-             wrs.writeXml(writer);
-    }
-
-    /**
-     * Writes this <code>JoinRowSet</code> object to the given
-     * <code>java.io.Writer</code> object in XML format. In
-     * addition to the rowset's data, its properties and metadata
-     * are also included.
-     *
-     * @throws SQLException if an error occurs writing out the rowset
-     *          contents to XML
-     */
-    public void writeXml(java.io.Writer writer) throws SQLException {
-        createWebRowSet().writeXml(writer);
-}
-
-    /**
-     * Reads this <code>JoinRowSet</code> object in its XML format.
-     *
-     * @throws SQLException if a database access error occurs
-     */
-    public void readXml(java.io.Reader reader) throws SQLException {
-        wrs = new WebRowSetImpl();
-        wrs.readXml(reader);
-        crsInternal = (CachedRowSetImpl)wrs;
-    }
-
-    // Stream based methods
-    /**
-     * Reads a stream based XML input to populate an <code>WebRowSet</code>
-     *
-     * @throws SQLException if a data source access occurs
-     * @throws IOException if a IO exception occurs
-     */
-    public void readXml(java.io.InputStream iStream) throws SQLException, IOException {
-         wrs = new WebRowSetImpl();
-         wrs.readXml(iStream);
-         crsInternal = (CachedRowSetImpl)wrs;
-    }
-
-    /**
-     * Creates an an output stream of the internal state and contents of a
-     * <code>WebRowSet</code> for XML proceessing
-     *
-     * @throws SQLException if a datasource access occurs
-     * @throws IOException if an IO exception occurs
-     */
-    public void writeXml(java.io.OutputStream oStream) throws SQLException, IOException {
-         createWebRowSet().writeXml(oStream);
-    }
-
-    /**
-     * Creates a new <code>WebRowSet</code> object, populates it with
-     * the contents of the <code>ResultSet</code> and creates an output
-     * streams the internal state and contents of the rowset for XML processing.
-     *
-     * @throws SQLException if a datasource access occurs
-     * @throws IOException if an IO exception occurs
-     */
-    public void writeXml(ResultSet rs, java.io.OutputStream oStream) throws SQLException, IOException {
-             wrs = new WebRowSetImpl();
-             wrs.populate(rs);
-             wrs.writeXml(oStream);
-    }
-
-    /**
-     * %%% Javadoc comments to be added here
-     */
-    private WebRowSet createWebRowSet() throws SQLException {
-       if(wrs != null) {
-           // check if it has already been initialized.
-           return wrs;
-       } else {
-         wrs = new WebRowSetImpl();
-          crsInternal.beforeFirst();
-          wrs.populate(crsInternal);
-          return wrs;
-       }
-    }
-
-    /**
-     * Returns the last set SQL <code>JOIN</code> type in this JoinRowSetImpl
-     * object
-     *
-     * @return joinType One of the standard JoinRowSet static field JOIN types
-     * @throws SQLException if an error occurs determining the current join type
-     */
-    public int getJoinType() throws SQLException {
-        if (vecJoinType == null) {
-            // Default JoinRowSet type
-            this.setJoinType(JoinRowSet.INNER_JOIN);
-        }
-        Integer i = (Integer)(vecJoinType.get(vecJoinType.size()-1));
-        return i.intValue();
-    }
-
-    /**
-    * The listener will be notified whenever an event occurs on this <code>JoinRowSet</code>
-    * object.
-    * <P>
-    * A listener might, for example, be a table or graph that needs to
-    * be updated in order to accurately reflect the current state of
-    * the <code>RowSet</code> object.
-    * <p>
-    * <b>Note</b>: if the <code>RowSetListener</code> object is
-    * <code>null</code>, this method silently discards the <code>null</code>
-    * value and does not add a null reference to the set of listeners.
-    * <p>
-    * <b>Note</b>: if the listener is already set, and the new <code>RowSetListerner</code>
-    * instance is added to the set of listeners already registered to receive
-    * event notifications from this <code>RowSet</code>.
-    *
-    * @param listener an object that has implemented the
-    *     <code>javax.sql.RowSetListener</code> interface and wants to be notified
-    *     of any events that occur on this <code>JoinRowSet</code> object; May be
-    *     null.
-    * @see #removeRowSetListener
-    */
-    public void addRowSetListener(RowSetListener listener) {
-        crsInternal.addRowSetListener(listener);
-    }
-
-    /**
-    * Removes the designated object from this <code>JoinRowSet</code> object's list of listeners.
-    * If the given argument is not a registered listener, this method
-    * does nothing.
-    *
-    *  <b>Note</b>: if the <code>RowSetListener</code> object is
-    * <code>null</code>, this method silently discards the <code>null</code>
-    * value.
-    *
-    * @param listener a <code>RowSetListener</code> object that is on the list
-    *        of listeners for this <code>JoinRowSet</code> object
-    * @see #addRowSetListener
-    */
-     public void removeRowSetListener(RowSetListener listener) {
-        crsInternal.removeRowSetListener(listener);
-    }
-
-    /**
-     * Converts this <code>JoinRowSetImpl</code> object to a collection
-     * of tables. The sample implementation utilitizes the <code>TreeMap</code>
-     * collection type.
-     * This class guarantees that the map will be in ascending key order,
-     * sorted according to the natural order for the key's class.
-     *
-     * @return a <code>Collection</code> object consisting of tables,
-     *         each of which is a copy of a row in this
-     *         <code>JoinRowSetImpl</code> object
-     * @throws SQLException if an error occurs in generating the collection
-     * @see #toCollection(int)
-     * @see #toCollection(String)
-     * @see java.util.TreeMap
-     */
-     public Collection<?> toCollection() throws SQLException {
-        return crsInternal.toCollection();
-    }
-
-    /**
-     * Returns the specified column of this <code>JoinRowSetImpl</code> object
-     * as a <code>Collection</code> object.  This method makes a copy of the
-     * column's data and utilitizes the <code>Vector</code> to establish the
-     * collection. The <code>Vector</code> class implements a growable array
-     * objects allowing the individual components to be accessed using an
-     * an integer index similar to that of an array.
-     *
-     * @return a <code>Collection</code> object that contains the value(s)
-     *         stored in the specified column of this
-     *         <code>JoinRowSetImpl</code>
-     *         object
-     * @throws SQLException if an error occurs generated the collection; or
-     *          an invalid column is provided.
-     * @see #toCollection()
-     * @see #toCollection(String)
-     * @see java.util.Vector
-     */
-    public Collection<?> toCollection(int column) throws SQLException {
-        return crsInternal.toCollection(column);
-    }
-
-    /**
-     * Returns the specified column of this <code>JoinRowSetImpl</code> object
-     * as a <code>Collection</code> object.  This method makes a copy of the
-     * column's data and utilitizes the <code>Vector</code> to establish the
-     * collection. The <code>Vector</code> class implements a growable array
-     * objects allowing the individual components to be accessed using an
-     * an integer index similar to that of an array.
-     *
-     * @return a <code>Collection</code> object that contains the value(s)
-     *         stored in the specified column of this
-     *         <code>JoinRowSetImpl</code>
-     *         object
-     * @throws SQLException if an error occurs generated the collection; or
-     *          an invalid column is provided.
-     * @see #toCollection()
-     * @see #toCollection(int)
-     * @see java.util.Vector
-     */
-    public Collection<?> toCollection(String column) throws SQLException {
-        return crsInternal.toCollection(column);
-    }
-
-    /**
-     * Creates a <code>RowSet</code> object that is a copy of
-     * this <code>JoinRowSetImpl</code> object's table structure
-     * and the constraints only.
-     * There will be no data in the object being returned.
-     * Updates made on a copy are not visible to the original rowset.
-     * <P>
-     * This helps in getting the underlying XML schema which can
-     * be used as the basis for populating a <code>WebRowSet</code>.
-     *
-     * @return a new <code>CachedRowSet</code> object that is a copy
-     * of this <code>JoinRowSetImpl</code> object's schema and
-     * retains all the constraints on the original rowset but contains
-     * no data
-     * @throws SQLException if an error occurs in generating the copy
-     * of the <code>CachedRowSet</code> object
-     * @see #createShared
-     * @see #createCopy
-     * @see #createCopyNoConstraints
-     * @see javax.sql.RowSetEvent
-     * @see javax.sql.RowSetListener
-     */
-     public CachedRowSet createCopySchema() throws SQLException {
-         return crsInternal.createCopySchema();
-     }
-
-     /**
-      * {@inheritDoc}
-      */
-     public void setSyncProvider(String providerStr) throws SQLException {
-         crsInternal.setSyncProvider(providerStr);
-     }
-
-     /**
-      * {@inheritDoc}
-      */
-     public void acceptChanges() throws SyncProviderException {
-         crsInternal.acceptChanges();
-     }
-
-     /**
-      * {@inheritDoc}
-      */
-     public SyncProvider getSyncProvider() throws SQLException {
-        return crsInternal.getSyncProvider();
-     }
-
-    /**
-     * This method re populates the resBundle
-     * during the deserialization process
-     *
-     */
-     private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException {
-        // Default state initialization happens here
-        ois.defaultReadObject();
-        // Initialization of transient Res Bundle happens here .
-        try {
-           resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle();
-        } catch(IOException ioe) {
-            throw new RuntimeException(ioe);
-        }
-
-     }
-
-     static final long serialVersionUID = -5590501621560008453L;
-}
diff --git a/ojluni/src/main/java/com/sun/rowset/RowSetFactoryImpl.java b/ojluni/src/main/java/com/sun/rowset/RowSetFactoryImpl.java
deleted file mode 100755
index 6f1c0fa..0000000
--- a/ojluni/src/main/java/com/sun/rowset/RowSetFactoryImpl.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright (c) 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
- * 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.rowset;
-
-import java.sql.SQLException;
-import javax.sql.rowset.CachedRowSet;
-import javax.sql.rowset.FilteredRowSet;
-import javax.sql.rowset.JdbcRowSet;
-import javax.sql.rowset.JoinRowSet;
-import javax.sql.rowset.WebRowSet;
-import javax.sql.rowset.RowSetFactory;
-
-/**
- * This is the implementation specific class for the
- * <code>javax.sql.rowset.spi.RowSetFactory</code>. This is the platform
- * default implementation for the Java SE platform.
- *
- * @author Lance Andersen
- *
- *
- * @version 1.7
- */
-public  final class RowSetFactoryImpl implements RowSetFactory {
-
-    public CachedRowSet createCachedRowSet() throws SQLException {
-        return new com.sun.rowset.CachedRowSetImpl();
-    }
-
-    public FilteredRowSet createFilteredRowSet() throws SQLException {
-        return new com.sun.rowset.FilteredRowSetImpl();
-    }
-
-
-    public JdbcRowSet createJdbcRowSet() throws SQLException {
-        return new com.sun.rowset.JdbcRowSetImpl();
-    }
-
-    public JoinRowSet createJoinRowSet() throws SQLException {
-        return new com.sun.rowset.JoinRowSetImpl();
-    }
-
-    public WebRowSet createWebRowSet() throws SQLException {
-        return new com.sun.rowset.WebRowSetImpl();
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/rowset/RowSetResourceBundle.properties b/ojluni/src/main/java/com/sun/rowset/RowSetResourceBundle.properties
deleted file mode 100755
index 47ad98d..0000000
--- a/ojluni/src/main/java/com/sun/rowset/RowSetResourceBundle.properties
+++ /dev/null
@@ -1,170 +0,0 @@
-#
-# Copyright (c) 2005, 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
-# 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.
-#
-
-# CacheRowSetImpl exceptions
-cachedrowsetimpl.populate = Invalid ResultSet object supplied to populate method
-cachedrowsetimpl.invalidp = Invalid persistence provider generated
-cachedrowsetimpl.nullhash = Cannot instantiate CachedRowSetImpl instance. Null Hashtable supplied to constructor
-cachedrowsetimpl.invalidop = Invalid operation while on insert row
-cachedrowsetimpl.accfailed = acceptChanges Failed
-cachedrowsetimpl.invalidcp = Invalid cursor position
-cachedrowsetimpl.illegalop = Illegal operation on non-inserted row
-cachedrowsetimpl.clonefail = Clone failed: {0}
-cachedrowsetimpl.invalidcol = Invalid column index
-cachedrowsetimpl.invalcolnm = Invalid column name
-cachedrowsetimpl.boolfail = getBoolen Failed on value ( {0} ) in column {1}
-cachedrowsetimpl.bytefail = getByte Failed on value ( {0} ) in column {1}
-cachedrowsetimpl.shortfail = getShort Failed on value ( {0} ) in column {1}
-cachedrowsetimpl.intfail = getInt Failed on value ( {0} ) in column {1}
-cachedrowsetimpl.longfail = getLong Failed on value ( {0} ) in column {1}
-cachedrowsetimpl.floatfail = getFloat failed on value ( {0} ) in column {1}
-cachedrowsetimpl.doublefail = getDouble failed on value ( {0} ) in column {1}
-cachedrowsetimpl.dtypemismt = Data Type Mismatch 
-cachedrowsetimpl.datefail = getDate Failed on value ( {0} ) in column {1} no conversion available
-cachedrowsetimpl.timefail = getTime failed on value ( {0} ) in column {1} no conversion available
-cachedrowsetimpl.posupdate = Positioned updates not supported
-cachedrowsetimpl.unableins = Unable to instantiate : {0}
-cachedrowsetimpl.beforefirst = beforeFirst : Invalid cursor operation
-cachedrowsetimpl.first = First : Invalid cursor operation
-cachedrowsetimpl.last = last : TYPE_FORWARD_ONLY
-cachedrowsetimpl.absolute = absolute : Invalid cursor position
-cachedrowsetimpl.relative = relative : Invalid cursor position
-cachedrowsetimpl.asciistream = read failed for ascii stream
-cachedrowsetimpl.binstream = read failed on binary stream
-cachedrowsetimpl.failedins = Failed on insert row
-cachedrowsetimpl.updateins = updateRow called while on insert row
-cachedrowsetimpl.movetoins = moveToInsertRow : CONCUR_READ_ONLY
-cachedrowsetimpl.movetoins1 = moveToInsertRow : no meta data
-cachedrowsetimpl.movetoins2 = moveToInsertRow : invalid number of columns
-cachedrowsetimpl.tablename = Table name cannot be null
-cachedrowsetimpl.keycols = Invalid key columns
-cachedrowsetimpl.invalidcol = Invalid column index
-cachedrowsetimpl.opnotsupp = Operation not supported by Database
-cachedrowsetimpl.matchcols = Match columns are not the same as those set
-cachedrowsetimpl.setmatchcols = Set Match columns before getting them
-cachedrowsetimpl.matchcols1 = Match columns should be greater than 0
-cachedrowsetimpl.matchcols2 = Match columns should be empty or null string
-cachedrowsetimpl.unsetmatch = Columns being unset are not the same as set
-cachedrowsetimpl.unsetmatch1 = Use column name as argument to unsetMatchColumn
-cachedrowsetimpl.unsetmatch2 = Use column ID as argument to unsetMatchColumn
-cachedrowsetimpl.numrows = Number of rows is less than zero or less than fetch size
-cachedrowsetimpl.startpos = Start position cannot be negative
-cachedrowsetimpl.nextpage = Populate data before calling 
-cachedrowsetimpl.pagesize = Page size cannot be less than zero
-cachedrowsetimpl.pagesize1 = Page size cannot be greater than maxRows
-cachedrowsetimpl.fwdonly = ResultSet is forward only
-cachedrowsetimpl.type = Type is : {0}
-cachedrowsetimpl.opnotysupp = Operation not yet supported
-cachedrowsetimpl.featnotsupp = Feature not supported
-
-# WebRowSetImpl exceptions
-webrowsetimpl.nullhash = Cannot instantiate WebRowSetImpl instance. Null Hashtable supplied to constructor
-webrowsetimpl.invalidwr = Invalid writer
-webrowsetimpl.invalidrd = Invalid reader
-
-#FilteredRowSetImpl exceptions
-filteredrowsetimpl.relative = relative : Invalid cursor operation 
-filteredrowsetimpl.absolute = absolute : Invalid cursor operation
-filteredrowsetimpl.notallowed = This value is not allowed through the filter
-
-#JoinRowSetImpl exceptions
-joinrowsetimpl.notinstance = Not an instance of rowset
-joinrowsetimpl.matchnotset = Match Column not set for join
-joinrowsetimpl.numnotequal = Number of elements in rowset not equal to match column
-joinrowsetimpl.notdefined = This is not a defined type of join
-joinrowsetimpl.notsupported = This type of join is not supported
-joinrowsetimpl.initerror = JoinRowSet initialization error
-joinrowsetimpl.genericerr = Genric joinrowset intial error
-joinrowsetimpl.emptyrowset = Empty rowset cannot be added to this JoinRowSet
-
-#JdbcRowSetImpl exceptions
-jdbcrowsetimpl.invalstate = Invalid state
-jdbcrowsetimpl.connect = JdbcRowSet (connect) JNDI unable to connect
-jdbcrowsetimpl.paramtype = Unable to deduce param type
-jdbcrowsetimpl.matchcols = Match Columns are not the same as those set
-jdbcrowsetimpl.setmatchcols = Set the match columns before getting them
-jdbcrowsetimpl.matchcols1 = Match columns should be greater than 0
-jdbcrowsetimpl.matchcols2 = Match columns cannot be null or empty string
-jdbcrowsetimpl.unsetmatch = Columns being unset are not the same as those set
-jdbcrowsetimpl.usecolname = Use column name as argument to unsetMatchColumn
-jdbcrowsetimpl.usecolid = Use column ID as argument to unsetMatchColumn
-jdbcrowsetimpl.resnotupd = ResultSet is not updatable
-jdbcrowsetimpl.opnotysupp = Operation not yet supported
-jdbcrowsetimpl.featnotsupp = Feature not supported
-
-#CachedRowSetReader exceptions
-crsreader.connect = (JNDI) Unable to connect
-crsreader.paramtype = Unable to deduce param type
-crsreader.connecterr = Internal Error in RowSetReader: no connection or command
-crsreader.datedetected = Detected a Date
-crsreader.caldetected = Detected a Calendar
-
-#CachedRowSetWriter exceptions
-crswriter.connect = Unable to get connection
-crswriter.tname = writeData cannot determine table name
-crswriter.params1 = Value of params1 : {0} 
-crswriter.params2 = Value of params2 : {0} 
-crswriter.conflictsno =  conflicts while synchronizing 
-
-#InsertRow exceptions
-insertrow.novalue = No value has been inserted
-
-#SyncResolverImpl exceptions
-syncrsimpl.indexval = Index value out of range  
-syncrsimpl.noconflict = This column not in conflict
-syncrsimpl.syncnotpos = Synchronization is not possible
-syncrsimpl.valtores = Value to be resolved can either be in the database or in cachedrowset
-
-#WebRowSetXmlReader exception
-wrsxmlreader.invalidcp = End of RowSet reached. Invalid cursor position
-wrsxmlreader.readxml = readXML : {0}
-wrsxmlreader.parseerr = ** Parsing Error : {0} , line : {1} , uri : {2}
-
-#WebRowSetXmlWriter exceptions
-wrsxmlwriter.ioex = IOException : {0}
-wrsxmlwriter.sqlex = SQLException : {0}
-wrsxmlwriter.failedwrite = Failed to write value
-wsrxmlwriter.notproper = Not a proper type
-
-#XmlReaderContentHandler exceptions
-xmlrch.errmap = Error setting Map : {0}
-xmlrch.errmetadata = Error setting metadata : {0}
-xmlrch.errinsertval = Error inserting values : {0}
-xmlrch.errconstr = Error constructing row : {0}
-xmlrch.errdel = Error deleting row : {0}
-xmlrch.errinsert = Error constructing insert row : {0}
-xmlrch.errinsdel = Error constructing insdel row : {0}
-xmlrch.errupdate = Error constructing update row : {0}
-xmlrch.errupdrow = Error updating row : {0}
-xmlrch.chars = characters :
-xmlrch.badvalue = Bad value ; non-nullable property
-xmlrch.badvalue1 = Bad value ; non-nullable metadata
-xmlrch.warning =  ** Warning : {0} , line : {1} , uri : {2}
-
-#RIOptimisticProvider Exceptions
-riop.locking = Locking classification is not supported
-
-#RIXMLProvider exceptions
-rixml.unsupp = Unsupported with RIXMLProvider
diff --git a/ojluni/src/main/java/com/sun/rowset/RowSetResourceBundle_de.properties b/ojluni/src/main/java/com/sun/rowset/RowSetResourceBundle_de.properties
deleted file mode 100755
index 41e23d7..0000000
--- a/ojluni/src/main/java/com/sun/rowset/RowSetResourceBundle_de.properties
+++ /dev/null
@@ -1,170 +0,0 @@
-#
-# Copyright (c) 2005, 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
-# 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.
-#
-
-# CacheRowSetImpl exceptions
-cachedrowsetimpl.populate = Ung\u00FCltiges ResultSet-Objekt zum Auff\u00FCllen der Methode angegeben
-cachedrowsetimpl.invalidp = Ung\u00FCltiger Persistence-Provider generiert
-cachedrowsetimpl.nullhash = CachedRowSetImpl-Instanz kann nicht instanziiert werden. Null-Hash-Tabelle f\u00FCr Constructor angegeben
-cachedrowsetimpl.invalidop = Ung\u00FCltiger Vorgang beim Zeileneinf\u00FCgen
-cachedrowsetimpl.accfailed = acceptChanges nicht erfolgreich
-cachedrowsetimpl.invalidcp = Ung\u00FCltige Cursorposition
-cachedrowsetimpl.illegalop = Ung\u00FCltiger Vorgang bei nicht eingef\u00FCgter Zeile
-cachedrowsetimpl.clonefail = Clonen nicht erfolgreich: {0}
-cachedrowsetimpl.invalidcol = Ung\u00FCltiger Spaltenindex
-cachedrowsetimpl.invalcolnm = Ung\u00FCltiger Spaltenname
-cachedrowsetimpl.boolfail = getBoolen bei Wert ( {0} ) in Spalte {1} nicht erfolgreich
-cachedrowsetimpl.bytefail = getByte bei Wert ( {0} ) in Spalte {1} nicht erfolgreich
-cachedrowsetimpl.shortfail = getShort bei Wert ( {0} ) in Spalte {1} nicht erfolgreich
-cachedrowsetimpl.intfail = getInt bei Wert ( {0} ) in Spalte {1} nicht erfolgreich
-cachedrowsetimpl.longfail = getLong bei Wert ( {0} ) in Spalte {1} nicht erfolgreich
-cachedrowsetimpl.floatfail = getFloat bei Wert ( {0} ) in Spalte {1} nicht erfolgreich
-cachedrowsetimpl.doublefail = getDouble bei Wert ( {0} ) in Spalte {1} nicht erfolgreich
-cachedrowsetimpl.dtypemismt = Keine Datentyp\u00FCbereinstimmung 
-cachedrowsetimpl.datefail = getDate bei Wert ( {0} ) in Spalte {1} nicht erfolgreich. Keine Konvertierung m\u00F6glich
-cachedrowsetimpl.timefail = getTime bei Wert ( {0} ) in Spalte {1} nicht erfolgreich. Keine Konvertierung m\u00F6glich
-cachedrowsetimpl.posupdate = Positionierte Updates werden nicht unterst\u00FCtzt
-cachedrowsetimpl.unableins = Keine Instanziierung m\u00F6glich: {0}
-cachedrowsetimpl.beforefirst = beforeFirst: Ung\u00FCltiger Cursorvorgang
-cachedrowsetimpl.first = First: Ung\u00FCltiger Cursorvorgang
-cachedrowsetimpl.last = last: TYPE_FORWARD_ONLY
-cachedrowsetimpl.absolute = absolute: Ung\u00FCltige Cursorposition
-cachedrowsetimpl.relative = relative: Ung\u00FCltige Cursorposition
-cachedrowsetimpl.asciistream = Lesen von ASCII-Stream nicht erfolgreich
-cachedrowsetimpl.binstream = Lesen von Bin\u00E4r-Stream nicht erfolgreich
-cachedrowsetimpl.failedins = Fehler beim Zeileneinf\u00FCgen
-cachedrowsetimpl.updateins = updateRow beim Zeileneinf\u00FCgen aufgerufen
-cachedrowsetimpl.movetoins = moveToInsertRow: CONCUR_READ_ONLY
-cachedrowsetimpl.movetoins1 = moveToInsertRow: keine Metadaten
-cachedrowsetimpl.movetoins2 = moveToInsertRow: ung\u00FCltige Spaltenanzahl
-cachedrowsetimpl.tablename = Tabellenname darf nicht null sein
-cachedrowsetimpl.keycols = Ung\u00FCltige Schl\u00FCsselspalten
-cachedrowsetimpl.invalidcol = Ung\u00FCltiger Spaltenindex
-cachedrowsetimpl.opnotsupp = Vorgang nicht von Datenbank unterst\u00FCtzt
-cachedrowsetimpl.matchcols = \u00DCbereinstimmungsspalten entsprechen nicht den festgelegten Spalten
-cachedrowsetimpl.setmatchcols = \u00DCbereinstimmungsspalten m\u00FCssen vor dem Abrufen festgelegt werden
-cachedrowsetimpl.matchcols1 = Wert f\u00FCr \u00DCbereinstimmungsspalten muss gr\u00F6\u00DFer als 0 sein
-cachedrowsetimpl.matchcols2 = \u00DCbereinstimmungsspalten m\u00FCssen leer sein oder eine Nullzeichenfolge aufweisen
-cachedrowsetimpl.unsetmatch = Spalten, deren Wert aufgehoben wird, entsprechen nicht den festgelegten Spalten
-cachedrowsetimpl.unsetmatch1 = Spaltenname als Argument f\u00FCr unsetMatchColumn verwenden
-cachedrowsetimpl.unsetmatch2 = Spalten-ID als Argument f\u00FCr unsetMatchColumn verwenden
-cachedrowsetimpl.numrows = Zeilenanzahl ist kleiner als null oder kleiner als Abrufgr\u00F6\u00DFe
-cachedrowsetimpl.startpos = Startposition darf keinen Negativwert aufweisen
-cachedrowsetimpl.nextpage = Daten m\u00FCssen vor dem Aufruf ausgef\u00FCllt werden 
-cachedrowsetimpl.pagesize = Seitengr\u00F6\u00DFe darf nicht kleiner als null sein
-cachedrowsetimpl.pagesize1 = Seitengr\u00F6\u00DFe darf nicht gr\u00F6\u00DFer als maxRows sein
-cachedrowsetimpl.fwdonly = ResultSet kann nur vorw\u00E4rts gerichtet sein
-cachedrowsetimpl.type = Typ ist: {0}
-cachedrowsetimpl.opnotysupp = Vorgang noch nicht unterst\u00FCtzt
-cachedrowsetimpl.featnotsupp = Feature nicht unterst\u00FCtzt
-
-# WebRowSetImpl exceptions
-webrowsetimpl.nullhash = WebRowSetImpl-Instanz kann nicht instanziiert werden. Null-Hash-Tabelle f\u00FCr Constructor angegeben
-webrowsetimpl.invalidwr = Ung\u00FCltiger Writer
-webrowsetimpl.invalidrd = Ung\u00FCltiger Reader
-
-#FilteredRowSetImpl exceptions
-filteredrowsetimpl.relative = relative: Ung\u00FCltiger Cursorvorgang 
-filteredrowsetimpl.absolute = absolute: Ung\u00FCltiger Cursorvorgang
-filteredrowsetimpl.notallowed = Kein zul\u00E4ssiger Wert im Filter
-
-#JoinRowSetImpl exceptions
-joinrowsetimpl.notinstance = Keine Instanz von rowset
-joinrowsetimpl.matchnotset = \u00DCbereinstimmungsspalte wurde nicht f\u00FCr Join festgelegt
-joinrowsetimpl.numnotequal = Elementanzahl in rowset nicht gleich \u00DCbereinstimmungsspalte
-joinrowsetimpl.notdefined = Kein definierter Join-Typ
-joinrowsetimpl.notsupported = Join-Typ wird nicht unterst\u00FCtzt
-joinrowsetimpl.initerror = JoinRowSet-Initialisierungsfehler
-joinrowsetimpl.genericerr = Generischer Anfangsfehler bei joinrowset
-joinrowsetimpl.emptyrowset = Leeres rowset kann nicht zu diesem JoinRowSet hinzugef\u00FCgt werden
-
-#JdbcRowSetImpl exceptions
-jdbcrowsetimpl.invalstate = Ung\u00FCltiger Status
-jdbcrowsetimpl.connect = JdbcRowSet (verbinden), keine JNDI-Verbindung m\u00F6glich
-jdbcrowsetimpl.paramtype = Parametertyp kann nicht abgeleitet werden
-jdbcrowsetimpl.matchcols = \u00DCbereinstimmungsspalten entsprechen nicht den festgelegten Spalten
-jdbcrowsetimpl.setmatchcols = \u00DCbereinstimmungsspalten m\u00FCssen vor dem Abrufen festgelegt werden
-jdbcrowsetimpl.matchcols1 = Wert f\u00FCr \u00DCbereinstimmungsspalten muss gr\u00F6\u00DFer als 0 sein
-jdbcrowsetimpl.matchcols2 = \u00DCbereinstimmungsspalten k\u00F6nnen keine Null- oder leere Zeichenfolge aufweisen
-jdbcrowsetimpl.unsetmatch = Spalten, deren Wert aufgehoben wird, entsprechen nicht den festgelegten Spalten
-jdbcrowsetimpl.usecolname = Spaltenname als Argument f\u00FCr unsetMatchColumn verwenden
-jdbcrowsetimpl.usecolid = Spalten-ID als Argument f\u00FCr unsetMatchColumn verwenden
-jdbcrowsetimpl.resnotupd = ResultSet kann nicht aktualisiert werden
-jdbcrowsetimpl.opnotysupp = Vorgang noch nicht unterst\u00FCtzt
-jdbcrowsetimpl.featnotsupp = Feature nicht unterst\u00FCtzt
-
-#CachedRowSetReader exceptions
-crsreader.connect = (JNDI) Verbindung nicht m\u00F6glich
-crsreader.paramtype = Parametertyp kann nicht abgeleitet werden
-crsreader.connecterr = Interner Fehler in RowSetReader: Keine Verbindung oder kein Befehl
-crsreader.datedetected = Datum festgestellt
-crsreader.caldetected = Kalender festgestellt
-
-#CachedRowSetWriter exceptions
-crswriter.connect = Verbindung kann nicht hergestellt werden
-crswriter.tname = writeData kann Tabellennamen nicht bestimmen
-crswriter.params1 = Wert f\u00FCr params1: {0} 
-crswriter.params2 = Wert f\u00FCr params2: {0} 
-crswriter.conflictsno =  Konflikte beim Synchronisieren 
-
-#InsertRow exceptions
-insertrow.novalue = Es wurde kein Wert eingef\u00FCgt
-
-#SyncResolverImpl exceptions
-syncrsimpl.indexval = Indexwert liegt au\u00DFerhalb des Bereichs  
-syncrsimpl.noconflict = Kein Konflikt bei dieser Spalte
-syncrsimpl.syncnotpos = Keine Synchronisierung m\u00F6glich
-syncrsimpl.valtores = Aufzul\u00F6sender Wert kann sich entweder in der Datenbank oder in cachedrowset befinden
-
-#WebRowSetXmlReader exception
-wrsxmlreader.invalidcp = Ende von RowSet wurde erreicht. Ung\u00FCltige Cursorposition
-wrsxmlreader.readxml = readXML: {0}
-wrsxmlreader.parseerr = ** Parsing-Fehler: {0}, Zeile: {1} , URI: {2}
-
-#WebRowSetXmlWriter exceptions
-wrsxmlwriter.ioex = IOException: {0}
-wrsxmlwriter.sqlex = SQLException: {0}
-wrsxmlwriter.failedwrite = Schreiben des Wertes nicht erfolgreich
-wsrxmlwriter.notproper = Kein zul\u00E4ssiger Typ
-
-#XmlReaderContentHandler exceptions
-xmlrch.errmap = Fehler beim Festlegen der Zuordnung: {0}
-xmlrch.errmetadata = Fehler beim Festlegen der Metadaten: {0}
-xmlrch.errinsertval = Fehler beim Einf\u00FCgen der Werte: {0}
-xmlrch.errconstr = Fehler beim Erstellen der Zeile: {0}
-xmlrch.errdel = Fehler beim L\u00F6schen der Zeile: {0}
-xmlrch.errinsert = Fehler beim Erstellen der Einf\u00FCgezeile: {0}
-xmlrch.errinsdel = Fehler beim Erstellen der Einf\u00FCge- oder L\u00F6schzeile: {0}
-xmlrch.errupdate = Fehler beim Erstellen der Updatezeile: {0}
-xmlrch.errupdrow = Fehler beim Aktualisieren der Zeile: {0}
-xmlrch.chars = Zeichen:
-xmlrch.badvalue = Ung\u00FCltiger Wert. Eigenschaft kann nicht auf null gesetzt werden
-xmlrch.badvalue1 = Ung\u00FCltiger Wert. Metadaten k\u00F6nnen nicht auf null gesetzt werden
-xmlrch.warning =  ** Warnung: {0}, Zeile: {1} , URI: {2}
-
-#RIOptimisticProvider Exceptions
-riop.locking = Sperren der Klassifizierung wird nicht unterst\u00FCtzt
-
-#RIXMLProvider exceptions
-rixml.unsupp = Keine Unterst\u00FCtzung bei RIXMLProvider
diff --git a/ojluni/src/main/java/com/sun/rowset/RowSetResourceBundle_es.properties b/ojluni/src/main/java/com/sun/rowset/RowSetResourceBundle_es.properties
deleted file mode 100755
index 683429d..0000000
--- a/ojluni/src/main/java/com/sun/rowset/RowSetResourceBundle_es.properties
+++ /dev/null
@@ -1,170 +0,0 @@
-#
-# Copyright (c) 2005, 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
-# 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.
-#
-
-# CacheRowSetImpl exceptions
-cachedrowsetimpl.populate = Se ha proporcionado un objeto ResultSet no v\u00E1lido para el m\u00E9todo de relleno
-cachedrowsetimpl.invalidp = El proveedor de persistencia generado no es v\u00E1lido
-cachedrowsetimpl.nullhash = La instancia CachedRowSetImpl no se puede crear. Se ha proporcionado una tabla hash nula al constructor
-cachedrowsetimpl.invalidop = Operaci\u00F3n no v\u00E1lida al insertar fila
-cachedrowsetimpl.accfailed = Fallo de acceptChanges
-cachedrowsetimpl.invalidcp = Posici\u00F3n de cursor no v\u00E1lida
-cachedrowsetimpl.illegalop = Operaci\u00F3n no permitida en fila no insertada
-cachedrowsetimpl.clonefail = Fallo en la clonaci\u00F3n: {0}
-cachedrowsetimpl.invalidcol = \u00CDndice de columnas no v\u00E1lido
-cachedrowsetimpl.invalcolnm = Nombre de columna no v\u00E1lido
-cachedrowsetimpl.boolfail = Fallo de getBoolen en valor ( {0} ) de columna {1}
-cachedrowsetimpl.bytefail = Fallo de getByte en valor ( {0} ) de columna {1}
-cachedrowsetimpl.shortfail = Fallo de getShort en valor ( {0} ) de columna {1}
-cachedrowsetimpl.intfail = Fallo de getInt en valor ( {0} ) de columna {1}
-cachedrowsetimpl.longfail = Fallo de getLong en valor ( {0} ) de columna {1}
-cachedrowsetimpl.floatfail = Fallo de getFloat en valor ( {0} ) de columna {1}
-cachedrowsetimpl.doublefail = Fallo de getDouble en valor ( {0} ) de columna {1}
-cachedrowsetimpl.dtypemismt = Discordancia entre Tipos de Datos 
-cachedrowsetimpl.datefail = Fallo de getDate en valor ( {0} ) de columna {1}. No es posible convertir
-cachedrowsetimpl.timefail = Fallo de getTime en valor ( {0} ) de columna {1}. No es posible convertir
-cachedrowsetimpl.posupdate = Actualizaciones posicionadas no soportadas
-cachedrowsetimpl.unableins = No se ha podido crear la instancia: {0}
-cachedrowsetimpl.beforefirst = beforeFirst: Operaci\u00F3n de cursor no v\u00E1lida
-cachedrowsetimpl.first = First: Operaci\u00F3n de cursor no v\u00E1lida
-cachedrowsetimpl.last = last : TYPE_FORWARD_ONLY
-cachedrowsetimpl.absolute = absolute: Posici\u00F3n de cursor no v\u00E1lida
-cachedrowsetimpl.relative = relative: Posici\u00F3n de cursor no v\u00E1lida
-cachedrowsetimpl.asciistream = fallo en lectura de flujo de caracteres ascii
-cachedrowsetimpl.binstream = fallo de lectura de flujo binario
-cachedrowsetimpl.failedins = Fallo en inserci\u00F3n de fila
-cachedrowsetimpl.updateins = llamada a updateRow mientras se insertaba fila
-cachedrowsetimpl.movetoins = moveToInsertRow : CONCUR_READ_ONLY
-cachedrowsetimpl.movetoins1 = moveToInsertRow: no hay metadatos
-cachedrowsetimpl.movetoins2 = moveToInsertRow: n\u00FAmero de columnas no v\u00E1lido
-cachedrowsetimpl.tablename = El nombre de la tabla no puede ser nulo
-cachedrowsetimpl.keycols = Columnas clave no v\u00E1lidas
-cachedrowsetimpl.invalidcol = \u00CDndice de columnas no v\u00E1lido
-cachedrowsetimpl.opnotsupp = La base de datos no admite esta operaci\u00F3n
-cachedrowsetimpl.matchcols = Las columnas coincidentes no concuerdan con las definidas
-cachedrowsetimpl.setmatchcols = Defina las columnas coincidentes antes de obtenerlas
-cachedrowsetimpl.matchcols1 = Las columnas coincidentes deben ser mayores que 0
-cachedrowsetimpl.matchcols2 = Las columnas coincidentes deben estar vac\u00EDas o ser una cadena nula
-cachedrowsetimpl.unsetmatch = Las columnas cuya definici\u00F3n se est\u00E1 anulando no concuerdan con las definidas
-cachedrowsetimpl.unsetmatch1 = Use el nombre de columna como argumento en unsetMatchColumn
-cachedrowsetimpl.unsetmatch2 = Use el identificador de columna como argumento en unsetMatchColumn
-cachedrowsetimpl.numrows = El n\u00FAmero de filas es menor que cero o menor que el tama\u00F1o recuperado
-cachedrowsetimpl.startpos = La posici\u00F3n de inicio no puede ser negativa
-cachedrowsetimpl.nextpage = Rellene los datos antes de realizar la llamada 
-cachedrowsetimpl.pagesize = El tama\u00F1o de p\u00E1gina no puede ser menor que cero
-cachedrowsetimpl.pagesize1 = El tama\u00F1o de p\u00E1gina no puede ser mayor que maxRows
-cachedrowsetimpl.fwdonly = ResultSet s\u00F3lo se reenv\u00EDa
-cachedrowsetimpl.type = El tipo es: {0}
-cachedrowsetimpl.opnotysupp = Operaci\u00F3n no soportada todav\u00EDa
-cachedrowsetimpl.featnotsupp = Funci\u00F3n no soportada
-
-# WebRowSetImpl exceptions
-webrowsetimpl.nullhash = La instancia WebRowSetImpl no se puede crear. Se ha proporcionado una tabla hash nula al constructor
-webrowsetimpl.invalidwr = Escritor no v\u00E1lido
-webrowsetimpl.invalidrd = Lector no v\u00E1lido
-
-#FilteredRowSetImpl exceptions
-filteredrowsetimpl.relative = relative: Operaci\u00F3n de cursor no v\u00E1lida 
-filteredrowsetimpl.absolute = absolute: Operaci\u00F3n de cursor no v\u00E1lida
-filteredrowsetimpl.notallowed = El filtro no admite este valor
-
-#JoinRowSetImpl exceptions
-joinrowsetimpl.notinstance = No es una instancia de rowset
-joinrowsetimpl.matchnotset = Las columnas coincidentes no est\u00E1n definidas para la uni\u00F3n
-joinrowsetimpl.numnotequal = El n\u00FAmero de elementos de rowset y el de columnas coincidentes no es el mismo
-joinrowsetimpl.notdefined = No es un tipo de uni\u00F3n definido
-joinrowsetimpl.notsupported = Este tipo de uni\u00F3n no est\u00E1 soportado
-joinrowsetimpl.initerror = Error de inicializaci\u00F3n de JoinRowSet
-joinrowsetimpl.genericerr = Error de inicializaci\u00F3n gen\u00E9rico de joinrowset
-joinrowsetimpl.emptyrowset = No se puede agregar un juego de filas vac\u00EDo a este JoinRowSet
-
-#JdbcRowSetImpl exceptions
-jdbcrowsetimpl.invalstate = Estado no v\u00E1lido
-jdbcrowsetimpl.connect = JdbcRowSet (connect): JNDI no se puede conectar
-jdbcrowsetimpl.paramtype = No se puede deducir el tipo de par\u00E1metro
-jdbcrowsetimpl.matchcols = Las columnas coincidentes no concuerdan con las definidas
-jdbcrowsetimpl.setmatchcols = Defina las columnas coincidentes antes de obtenerlas
-jdbcrowsetimpl.matchcols1 = Las columnas coincidentes deben ser mayores que 0
-jdbcrowsetimpl.matchcols2 = Las columnas coincidentes no pueden estar vac\u00EDas ni ser una cadena nula
-jdbcrowsetimpl.unsetmatch = Las columnas cuya definici\u00F3n se est\u00E1 anulando no concuerdan con las definidas
-jdbcrowsetimpl.usecolname = Use el nombre de columna como argumento en unsetMatchColumn
-jdbcrowsetimpl.usecolid = Use el identificador de columna como argumento en unsetMatchColumn
-jdbcrowsetimpl.resnotupd = ResultSet no se puede actualizar
-jdbcrowsetimpl.opnotysupp = Operaci\u00F3n no soportada todav\u00EDa
-jdbcrowsetimpl.featnotsupp = Funci\u00F3n no soportada
-
-#CachedRowSetReader exceptions
-crsreader.connect = (JNDI) No se ha podido conectar
-crsreader.paramtype = No se ha podido deducir el tipo de par\u00E1metro
-crsreader.connecterr = Error interno en RowSetReader: no hay conexi\u00F3n o comando
-crsreader.datedetected = Fecha Detectada
-crsreader.caldetected = Calendario Detectado
-
-#CachedRowSetWriter exceptions
-crswriter.connect = No se ha podido obtener una conexi\u00F3n
-crswriter.tname = writeData no puede determinar el nombre de tabla
-crswriter.params1 = Valor de params1: {0} 
-crswriter.params2 = Valor de params2: {0} 
-crswriter.conflictsno =  conflictos en la sincronizaci\u00F3n 
-
-#InsertRow exceptions
-insertrow.novalue = No se ha insertado ning\u00FAn valor
-
-#SyncResolverImpl exceptions
-syncrsimpl.indexval = El valor de \u00EDndice est\u00E1 fuera de rango  
-syncrsimpl.noconflict = Esta columna no est\u00E1 en conflicto
-syncrsimpl.syncnotpos = No se puede sincronizar
-syncrsimpl.valtores = El valor que se debe resolver puede estar en la base de datos o en cachedrowset
-
-#WebRowSetXmlReader exception
-wrsxmlreader.invalidcp = Se ha llegado al final de RowSet. Posici\u00F3n de cursor no v\u00E1lida
-wrsxmlreader.readxml = readXML : {0}
-wrsxmlreader.parseerr = ** Error de an\u00E1lisis: {0} , l\u00EDnea: {1} , uri: {2}
-
-#WebRowSetXmlWriter exceptions
-wrsxmlwriter.ioex = IOException : {0}
-wrsxmlwriter.sqlex = SQLException : {0}
-wrsxmlwriter.failedwrite = Error al escribir el valor
-wsrxmlwriter.notproper = Tipo incorrecto
-
-#XmlReaderContentHandler exceptions
-xmlrch.errmap = Error al definir la asignaci\u00F3n: {0}
-xmlrch.errmetadata = Error al definir metadatos: {0}
-xmlrch.errinsertval = Error al insertar los valores: {0}
-xmlrch.errconstr = Error al construir la fila: {0}
-xmlrch.errdel = Error al suprimir la fila: {0}
-xmlrch.errinsert = Error al construir la fila de inserci\u00F3n: {0}
-xmlrch.errinsdel = Error al construir la fila de inserci\u00F3n o supresi\u00F3n: {0}
-xmlrch.errupdate = Error al construir la fila de actualizaci\u00F3n: {0}
-xmlrch.errupdrow = Error al actualizar la fila: {0}
-xmlrch.chars = caracteres:
-xmlrch.badvalue = Valor incorrecto; la propiedad no puede ser nula
-xmlrch.badvalue1 = Valor incorrecto; los metadatos no pueden ser nulos
-xmlrch.warning =  ** Advertencia: {0} , l\u00EDnea: {1} , uri: {2}
-
-#RIOptimisticProvider Exceptions
-riop.locking = No se permite bloquear la clasificaci\u00F3n
-
-#RIXMLProvider exceptions
-rixml.unsupp = No soportado con RIXMLProvider
diff --git a/ojluni/src/main/java/com/sun/rowset/RowSetResourceBundle_fr.properties b/ojluni/src/main/java/com/sun/rowset/RowSetResourceBundle_fr.properties
deleted file mode 100755
index 7793e88..0000000
--- a/ojluni/src/main/java/com/sun/rowset/RowSetResourceBundle_fr.properties
+++ /dev/null
@@ -1,170 +0,0 @@
-#
-# Copyright (c) 2005, 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
-# 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.
-#
-
-# CacheRowSetImpl exceptions
-cachedrowsetimpl.populate = L'objet ResultSet fourni en entr\u00E9e de la m\u00E9thode n'est pas valide
-cachedrowsetimpl.invalidp = Le fournisseur de persistance g\u00E9n\u00E9r\u00E9 n'est pas valide
-cachedrowsetimpl.nullhash = Impossible de cr\u00E9er une instance de CachedRowSetImpl. Table de hachage NULL fournie au constructeur
-cachedrowsetimpl.invalidop = Op\u00E9ration non valide lors de l'insertion de ligne
-cachedrowsetimpl.accfailed = Echec de acceptChanges
-cachedrowsetimpl.invalidcp = Position du curseur non valide
-cachedrowsetimpl.illegalop = Op\u00E9ration non admise sur une ligne non ins\u00E9r\u00E9e
-cachedrowsetimpl.clonefail = Echec du clonage : {0}
-cachedrowsetimpl.invalidcol = Index de colonne non valide
-cachedrowsetimpl.invalcolnm = Nom de colonne non valide
-cachedrowsetimpl.boolfail = Echec de getBoolen pour la valeur ({0}) de la colonne {1}
-cachedrowsetimpl.bytefail = Echec de getByte pour la valeur ({0}) de la colonne {1}
-cachedrowsetimpl.shortfail = Echec de getShort pour la valeur ({0}) de la colonne {1}
-cachedrowsetimpl.intfail = Echec de getInt pour la valeur ({0}) de la colonne {1}
-cachedrowsetimpl.longfail = Echec de getLong pour la valeur ({0}) de la colonne {1}
-cachedrowsetimpl.floatfail = Echec de getFloat pour la valeur ({0}) de la colonne {1}
-cachedrowsetimpl.doublefail = Echec de getDouble pour la valeur ({0}) de la colonne {1}
-cachedrowsetimpl.dtypemismt = Le type de donn\u00E9es ne correspond pas 
-cachedrowsetimpl.datefail = Echec de getDate pour la valeur ({0}) de la colonne {1} - Aucune conversion possible
-cachedrowsetimpl.timefail = Echec de getTime pour la valeur ({0}) de la colonne {1} - Aucune conversion possible
-cachedrowsetimpl.posupdate = Mises \u00E0 jour choisies non prises en charge
-cachedrowsetimpl.unableins = Instanciation impossible : {0}
-cachedrowsetimpl.beforefirst = beforeFirst : op\u00E9ration de curseur non valide
-cachedrowsetimpl.first = First : op\u00E9ration de curseur non valide
-cachedrowsetimpl.last = last : TYPE_FORWARD_ONLY
-cachedrowsetimpl.absolute = absolute : position de curseur non valide
-cachedrowsetimpl.relative = relative : position de curseur non valide
-cachedrowsetimpl.asciistream = \u00E9chec de la lecture pour le flux ASCII
-cachedrowsetimpl.binstream = \u00E9chec de la lecture pour le flux binaire
-cachedrowsetimpl.failedins = Echec de l'insertion de ligne
-cachedrowsetimpl.updateins = appel de updateRow lors de l'insertion de ligne
-cachedrowsetimpl.movetoins = moveToInsertRow : CONCUR_READ_ONLY
-cachedrowsetimpl.movetoins1 = moveToInsertRow : aucune m\u00E9tadonn\u00E9e
-cachedrowsetimpl.movetoins2 = moveToInsertRow : nombre de colonnes non valide
-cachedrowsetimpl.tablename = Le nom de la table ne peut pas \u00EAtre NULL
-cachedrowsetimpl.keycols = Colonnes de cl\u00E9 non valides
-cachedrowsetimpl.invalidcol = Index de colonne non valide
-cachedrowsetimpl.opnotsupp = Op\u00E9ration non prise en charge par la base de donn\u00E9es
-cachedrowsetimpl.matchcols = Les colonnes correspondantes ne sont pas les m\u00EAmes que les colonnes d\u00E9finies
-cachedrowsetimpl.setmatchcols = D\u00E9finir les colonnes correspondantes avant de les prendre
-cachedrowsetimpl.matchcols1 = Les colonnes correspondantes doivent \u00EAtre sup\u00E9rieures \u00E0 z\u00E9ro
-cachedrowsetimpl.matchcols2 = Les colonnes correspondantes doivent \u00EAtres vides ou ne contenir que des cha\u00EEnes NULL
-cachedrowsetimpl.unsetmatch = Les colonnes d\u00E9finies et non d\u00E9finies sont diff\u00E9rentes
-cachedrowsetimpl.unsetmatch1 = Utiliser le nom de colonne comme argument pour unsetMatchColumn
-cachedrowsetimpl.unsetmatch2 = Utiliser l'ID de colonne comme argument pour unsetMatchColumn
-cachedrowsetimpl.numrows = Le nombre de lignes est inf\u00E9rieur \u00E0 z\u00E9ro ou \u00E0 la taille d'extraction
-cachedrowsetimpl.startpos = La position de d\u00E9part ne peut pas \u00EAtre n\u00E9gative
-cachedrowsetimpl.nextpage = Entrer les donn\u00E9es avant l'appel 
-cachedrowsetimpl.pagesize = La taille de la page ne peut pas \u00EAtre n\u00E9gative
-cachedrowsetimpl.pagesize1 = La taille de la page ne peut pas \u00EAtre sup\u00E9rieure \u00E0 maxRows
-cachedrowsetimpl.fwdonly = ResultSet va en avant seulement
-cachedrowsetimpl.type = Le type est : {0}
-cachedrowsetimpl.opnotysupp = Op\u00E9ration non encore prise en charge
-cachedrowsetimpl.featnotsupp = Fonctionnalit\u00E9 non prise en charge
-
-# WebRowSetImpl exceptions
-webrowsetimpl.nullhash = Impossible de cr\u00E9er une instance de WebRowSetImpl. Table de hachage NULL fournie au constructeur
-webrowsetimpl.invalidwr = Processus d'\u00E9criture non valide
-webrowsetimpl.invalidrd = Processus de lecture non valide
-
-#FilteredRowSetImpl exceptions
-filteredrowsetimpl.relative = relative : op\u00E9ration de curseur non valide 
-filteredrowsetimpl.absolute = absolute : op\u00E9ration de curseur non valide
-filteredrowsetimpl.notallowed = Cette valeur n'est pas autoris\u00E9e via le filtre
-
-#JoinRowSetImpl exceptions
-joinrowsetimpl.notinstance = N'est pas une instance de RowSet
-joinrowsetimpl.matchnotset = Les colonnes correspondantes ne sont pas d\u00E9finies pour la jointure
-joinrowsetimpl.numnotequal = Le nombre d'\u00E9l\u00E9ments dans RowSet est diff\u00E9rent du nombre de colonnes correspondantes
-joinrowsetimpl.notdefined = Ce n'est pas un type de jointure d\u00E9fini
-joinrowsetimpl.notsupported = Ce type de jointure n'est pas pris en charge
-joinrowsetimpl.initerror = Erreur d'initialisation de JoinRowSet
-joinrowsetimpl.genericerr = Erreur initiale g\u00E9n\u00E9rique de JoinRowSet
-joinrowsetimpl.emptyrowset = Impossible d'ajouter un objet RowSet vide \u00E0 ce JoinRowSet
-
-#JdbcRowSetImpl exceptions
-jdbcrowsetimpl.invalstate = Etat non valide
-jdbcrowsetimpl.connect = Impossible de connecter JNDI JdbcRowSet (connexion)
-jdbcrowsetimpl.paramtype = Impossible de d\u00E9duire le type de param\u00E8tre
-jdbcrowsetimpl.matchcols = Les colonnes correspondantes ne sont pas les m\u00EAmes que les colonnes d\u00E9finies
-jdbcrowsetimpl.setmatchcols = D\u00E9finir les colonnes correspondantes avant de les prendre
-jdbcrowsetimpl.matchcols1 = Les colonnes correspondantes doivent \u00EAtre sup\u00E9rieures \u00E0 z\u00E9ro
-jdbcrowsetimpl.matchcols2 = Les colonnes correspondantes ne doivent pas \u00EAtres NULL ni contenir des cha\u00EEnes vides
-jdbcrowsetimpl.unsetmatch = Les colonnes non d\u00E9finies ne sont pas les m\u00EAmes que les colonnes d\u00E9finies
-jdbcrowsetimpl.usecolname = Utiliser le nom de colonne comme argument pour unsetMatchColumn
-jdbcrowsetimpl.usecolid = Utiliser l'ID de colonne comme argument pour unsetMatchColumn
-jdbcrowsetimpl.resnotupd = La mise \u00E0 jour de ResultSet est interdite
-jdbcrowsetimpl.opnotysupp = Op\u00E9ration non encore prise en charge
-jdbcrowsetimpl.featnotsupp = Fonctionnalit\u00E9 non prise en charge
-
-#CachedRowSetReader exceptions
-crsreader.connect = Impossible de connecter (JNDI)
-crsreader.paramtype = Impossible de d\u00E9duire le type de param\u00E8tre
-crsreader.connecterr = Erreur interne dans RowSetReader\u00A0: pas de connexion ni de commande
-crsreader.datedetected = Une date a \u00E9t\u00E9 d\u00E9tect\u00E9e
-crsreader.caldetected = Un calendrier a \u00E9t\u00E9 d\u00E9tect\u00E9
-
-#CachedRowSetWriter exceptions
-crswriter.connect = Impossible d'obtenir la connexion
-crswriter.tname = writeData ne peut pas d\u00E9terminer le nom de la table
-crswriter.params1 = Valeur de params1 : {0} 
-crswriter.params2 = Valeur de params2 : {0} 
-crswriter.conflictsno =  conflits lors de la synchronisation 
-
-#InsertRow exceptions
-insertrow.novalue = Aucune valeur n'a \u00E9t\u00E9 ins\u00E9r\u00E9e
-
-#SyncResolverImpl exceptions
-syncrsimpl.indexval = Valeur d'index hors plage  
-syncrsimpl.noconflict = Cette colonne n'est pas en conflit
-syncrsimpl.syncnotpos = La synchronisation est impossible
-syncrsimpl.valtores = La valeur \u00E0 r\u00E9soudre peut \u00EAtre soit dans la base de donn\u00E9es, soit dans CachedrowSet
-
-#WebRowSetXmlReader exception
-wrsxmlreader.invalidcp = Fin de RowSet atteinte. Position de curseur non valide
-wrsxmlreader.readxml = readXML : {0}
-wrsxmlreader.parseerr = ** Erreur d''analyse : {0} , ligne : {1} , URI : {2}
-
-#WebRowSetXmlWriter exceptions
-wrsxmlwriter.ioex = Exception d''E/S : {0}
-wrsxmlwriter.sqlex = Exception SQL : {0}
-wrsxmlwriter.failedwrite = Echec d'\u00E9criture de la valeur
-wsrxmlwriter.notproper = N'est pas un type correct
-
-#XmlReaderContentHandler exceptions
-xmlrch.errmap = Erreur lors de la d\u00E9finition du mappage : {0}
-xmlrch.errmetadata = Erreur lors de la d\u00E9finition des m\u00E9tadonn\u00E9es : {0}
-xmlrch.errinsertval = Erreur lors de l''insertion des valeurs\u00A0: {0}
-xmlrch.errconstr = Erreur lors de la construction de la ligne : {0}
-xmlrch.errdel = Erreur lors de la suppression de la ligne : {0}
-xmlrch.errinsert = Erreur lors de la construction de la ligne \u00E0 ins\u00E9rer : {0}
-xmlrch.errinsdel = Erreur lors de la construction de la ligne insdel : {0}
-xmlrch.errupdate = Erreur lors de la construction de la ligne \u00E0 mettre \u00E0 jour : {0}
-xmlrch.errupdrow = Erreur lors de la mise \u00E0 jour de la ligne\u00A0: {0}
-xmlrch.chars = caract\u00E8res :
-xmlrch.badvalue = Valeur incorrecte ; cette propri\u00E9t\u00E9 ne peut pas \u00EAtre NULL
-xmlrch.badvalue1 = Valeur incorrecte ; ces m\u00E9tadonn\u00E9es ne peuvent pas \u00EAtre NULL
-xmlrch.warning =  ** Avertissement : {0} , ligne : {1} , URI : {2}
-
-#RIOptimisticProvider Exceptions
-riop.locking = Le verrouillage de la classification n'est pas pris en charge
-
-#RIXMLProvider exceptions
-rixml.unsupp = Non pris en charge avec RIXMLProvider
diff --git a/ojluni/src/main/java/com/sun/rowset/RowSetResourceBundle_it.properties b/ojluni/src/main/java/com/sun/rowset/RowSetResourceBundle_it.properties
deleted file mode 100755
index 916db67..0000000
--- a/ojluni/src/main/java/com/sun/rowset/RowSetResourceBundle_it.properties
+++ /dev/null
@@ -1,170 +0,0 @@
-#
-# Copyright (c) 2005, 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
-# 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.
-#
-
-# CacheRowSetImpl exceptions
-cachedrowsetimpl.populate = Oggetto ResultSet non valido fornito per l'inserimento dati nel metodo
-cachedrowsetimpl.invalidp = Generato provider di persistenza non valido
-cachedrowsetimpl.nullhash = Impossibile creare istanza CachedRowSetImpl. Tabella hash nulla fornita al costruttore
-cachedrowsetimpl.invalidop = Operazione non valida nella riga di inserimento
-cachedrowsetimpl.accfailed = acceptChanges non riuscito
-cachedrowsetimpl.invalidcp = Posizione cursore non valida
-cachedrowsetimpl.illegalop = Operazione non valida nella riga non inserita
-cachedrowsetimpl.clonefail = Copia non riuscita: {0}
-cachedrowsetimpl.invalidcol = Indice di colonna non valido
-cachedrowsetimpl.invalcolnm = Nome di colonna non valido
-cachedrowsetimpl.boolfail = getBoolen non riuscito per il valore ( {0} ) nella colonna {1}
-cachedrowsetimpl.bytefail = getByte non riuscito per il valore ( {0} ) nella colonna {1}
-cachedrowsetimpl.shortfail = getShort non riuscito per il valore ( {0} ) nella colonna {1}
-cachedrowsetimpl.intfail = getInt non riuscito per il valore ( {0} ) nella colonna {1}
-cachedrowsetimpl.longfail = getLong non riuscito per il valore ( {0} ) nella colonna {1}
-cachedrowsetimpl.floatfail = getFloat non riuscito per il valore ( {0} ) nella colonna {1}
-cachedrowsetimpl.doublefail = getDouble non riuscito per il valore ( {0} ) nella colonna {1}
-cachedrowsetimpl.dtypemismt = Mancata corrispondenza tipo di dati 
-cachedrowsetimpl.datefail = getDate non riuscito per il valore ( {0} ) nella colonna {1}. Nessuna conversione disponibile.
-cachedrowsetimpl.timefail = getTime non riuscito per il valore ( {0} ) nella colonna {1}. Nessuna conversione disponibile.
-cachedrowsetimpl.posupdate = Aggiornamenti posizionati non supportati
-cachedrowsetimpl.unableins = Impossibile creare istanza: {0}
-cachedrowsetimpl.beforefirst = beforeFirst: operazione cursore non valida
-cachedrowsetimpl.first = First: operazione cursore non valida
-cachedrowsetimpl.last = last: TYPE_FORWARD_ONLY
-cachedrowsetimpl.absolute = absolute: posizione cursore non valida
-cachedrowsetimpl.relative = relative: posizione cursore non valida
-cachedrowsetimpl.asciistream = lettura non riuscita per il flusso ascii
-cachedrowsetimpl.binstream = lettura non riuscita per il flusso binario
-cachedrowsetimpl.failedins = operazione non riuscita nella riga di inserimento
-cachedrowsetimpl.updateins = updateRow chiamato nella riga di inserimento
-cachedrowsetimpl.movetoins = moveToInsertRow: CONCUR_READ_ONLY
-cachedrowsetimpl.movetoins1 = moveToInsertRow: nessun metadato
-cachedrowsetimpl.movetoins2 = moveToInsertRow: numero di colonne non valido
-cachedrowsetimpl.tablename = Il nome di tabella non pu\u00F2 essere nullo
-cachedrowsetimpl.keycols = Colonne chiave non valide
-cachedrowsetimpl.invalidcol = Indice di colonna non valido
-cachedrowsetimpl.opnotsupp = Operazione non supportata dal database
-cachedrowsetimpl.matchcols = Le colonne di corrispondenza non coincidono con le colonne impostate
-cachedrowsetimpl.setmatchcols = Impostare le colonne di corrispondenza prima di recuperarle
-cachedrowsetimpl.matchcols1 = Le colonne di corrispondenza devono essere superiori a 0
-cachedrowsetimpl.matchcols2 = Le colonne di corrispondenza devono essere una stringa vuota o nulla
-cachedrowsetimpl.unsetmatch = Le colonne rimosse non coincidono con le colonne impostate
-cachedrowsetimpl.unsetmatch1 = Utilizzare il nome di colonna come argomento per unsetMatchColumn
-cachedrowsetimpl.unsetmatch2 = Utilizzare l'ID di colonna come argomento per unsetMatchColumn
-cachedrowsetimpl.numrows = Il numero di righe \u00E8 inferiore a zero o alla dimensione di recupero
-cachedrowsetimpl.startpos = La posizione iniziale non pu\u00F2 essere negativa
-cachedrowsetimpl.nextpage = Inserire i dati prima di chiamare 
-cachedrowsetimpl.pagesize = La dimensione della pagina non pu\u00F2 essere inferiore a zero
-cachedrowsetimpl.pagesize1 = La dimensione della pagina non pu\u00F2 essere superiore a maxRows
-cachedrowsetimpl.fwdonly = ResultSet \u00E8 a solo inoltro
-cachedrowsetimpl.type = Il tipo \u00E8: {0}
-cachedrowsetimpl.opnotysupp = Operazione attualmente non supportata
-cachedrowsetimpl.featnotsupp = Funzione non supportata
-
-# WebRowSetImpl exceptions
-webrowsetimpl.nullhash = Impossibile creare istanza WebRowSetImpl. Tabella hash nulla fornita al costruttore
-webrowsetimpl.invalidwr = Processo di scrittura non valido
-webrowsetimpl.invalidrd = Processo di lettura non valido
-
-#FilteredRowSetImpl exceptions
-filteredrowsetimpl.relative = relative: operazione cursore non valida 
-filteredrowsetimpl.absolute = absolute: operazione cursore non valida
-filteredrowsetimpl.notallowed = Questo valore non \u00E8 consentito nel filtro
-
-#JoinRowSetImpl exceptions
-joinrowsetimpl.notinstance = Non \u00E8 un'istanza di rowset
-joinrowsetimpl.matchnotset = Colonna di corrispondenza non impostata per l'unione
-joinrowsetimpl.numnotequal = Numero di elementi in rowset diverso dalla colonna di corrispondenza
-joinrowsetimpl.notdefined = Non \u00E8 un tipo di unione definito
-joinrowsetimpl.notsupported = Questo tipo di unione non \u00E8 supportato
-joinrowsetimpl.initerror = Errore di inizializzazione di JoinRowSet
-joinrowsetimpl.genericerr = Errore iniziale di joinrowset generico
-joinrowsetimpl.emptyrowset = Impossibile aggiungere un set di righe vuoto al JoinRowSet corrente
-
-#JdbcRowSetImpl exceptions
-jdbcrowsetimpl.invalstate = Stato non valido
-jdbcrowsetimpl.connect = JdbcRowSet (connessione): impossibile stabilire una connessione con JNDI
-jdbcrowsetimpl.paramtype = Impossibile dedurre il tipo di parametro
-jdbcrowsetimpl.matchcols = Le colonne di corrispondenza non coincidono con le colonne impostate
-jdbcrowsetimpl.setmatchcols = Impostare le colonne di corrispondenza prima di recuperarle
-jdbcrowsetimpl.matchcols1 = Le colonne di corrispondenza devono essere superiori a 0
-jdbcrowsetimpl.matchcols2 = Le colonne di corrispondenza non possono essere una stringa vuota o nulla
-jdbcrowsetimpl.unsetmatch = Le colonne rimosse non coincidono con le colonne impostate
-jdbcrowsetimpl.usecolname = Utilizzare il nome di colonna come argomento per unsetMatchColumn
-jdbcrowsetimpl.usecolid = Utilizzare l'ID di colonna come argomento per unsetMatchColumn
-jdbcrowsetimpl.resnotupd = ResultSet non \u00E8 aggiornabile
-jdbcrowsetimpl.opnotysupp = Operazione attualmente non supportata
-jdbcrowsetimpl.featnotsupp = Funzione non supportata
-
-#CachedRowSetReader exceptions
-crsreader.connect = (JNDI) Impossibile stabilire una connessione
-crsreader.paramtype = Impossibile dedurre il tipo di parametro
-crsreader.connecterr = Errore interno in RowSetReader: nessuna connessione o comando
-crsreader.datedetected = \u00C8 stata rilevata una data
-crsreader.caldetected = \u00C8 stato rilevato un calendario
-
-#CachedRowSetWriter exceptions
-crswriter.connect = Impossibile stabilire una connessione
-crswriter.tname = writeData non riesce a determinare il nome di tabella
-crswriter.params1 = Valore dei parametri 1: {0} 
-crswriter.params2 = Valore dei parametri 2: {0} 
-crswriter.conflictsno =  Conflitti durante la sincronizzazione 
-
-#InsertRow exceptions
-insertrow.novalue = Non \u00E8 stato inserito alcun valore
-
-#SyncResolverImpl exceptions
-syncrsimpl.indexval = Valore indice non compreso nell'intervallo  
-syncrsimpl.noconflict = Questa colonna non \u00E8 in conflitto
-syncrsimpl.syncnotpos = Impossibile eseguire la sincronizzazione
-syncrsimpl.valtores = Il valore da risolvere pu\u00F2 essere nel database o in cachedrowset
-
-#WebRowSetXmlReader exception
-wrsxmlreader.invalidcp = Raggiunta la fine di RowSet. Posizione cursore non valida
-wrsxmlreader.readxml = readXML: {0}
-wrsxmlreader.parseerr = **Errore di analisi: {0}, riga: {1}, URI: {2}
-
-#WebRowSetXmlWriter exceptions
-wrsxmlwriter.ioex = IOException: {0}
-wrsxmlwriter.sqlex = SQLException: {0}
-wrsxmlwriter.failedwrite = Impossibile scrivere il valore
-wsrxmlwriter.notproper = Non un tipo corretto
-
-#XmlReaderContentHandler exceptions
-xmlrch.errmap = Errore durante l''impostazione della mappa: {0}
-xmlrch.errmetadata = Errore durante l''impostazione dei metadati: {0}
-xmlrch.errinsertval = Errore durante l''inserimento dei valori: {0}
-xmlrch.errconstr = Errore durante la costruzione della riga: {0}
-xmlrch.errdel = Errore durante l''eliminazione della riga: {0}
-xmlrch.errinsert = Errore durante la costruzione della riga di inserimento: {0}
-xmlrch.errinsdel = Errore durante la costruzione della riga insdel: {0}
-xmlrch.errupdate = Errore durante la costruzione della riga di aggiornamento: {0}
-xmlrch.errupdrow = Errore durante l''aggiornamento della riga: {0}
-xmlrch.chars = caratteri:
-xmlrch.badvalue = valore non valido; propriet\u00E0 non annullabile
-xmlrch.badvalue1 = valore non valido; metadati non annullabili
-xmlrch.warning =  **Avvertenza: {0}, riga: {1}, URI: {2}
-
-#RIOptimisticProvider Exceptions
-riop.locking = La classificazione di blocco non \u00E8 supportata
-
-#RIXMLProvider exceptions
-rixml.unsupp = Non supportato con RIXMLProvider
diff --git a/ojluni/src/main/java/com/sun/rowset/RowSetResourceBundle_ja.properties b/ojluni/src/main/java/com/sun/rowset/RowSetResourceBundle_ja.properties
deleted file mode 100755
index 7580131..0000000
--- a/ojluni/src/main/java/com/sun/rowset/RowSetResourceBundle_ja.properties
+++ /dev/null
@@ -1,170 +0,0 @@
-#
-# Copyright (c) 2005, 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
-# 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.
-#
-
-# CacheRowSetImpl exceptions
-cachedrowsetimpl.populate = populate\u30E1\u30BD\u30C3\u30C9\u306B\u7121\u52B9\u306AResultSet\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u304C\u4F7F\u7528\u3055\u308C\u307E\u3057\u305F
-cachedrowsetimpl.invalidp = \u7121\u52B9\u306A\u6C38\u7D9A\u6027\u30D7\u30ED\u30D0\u30A4\u30C0\u304C\u751F\u6210\u3055\u308C\u307E\u3057\u305F
-cachedrowsetimpl.nullhash = CachedRowSetImpl\u30A4\u30F3\u30B9\u30BF\u30F3\u30B9\u3092\u30A4\u30F3\u30B9\u30BF\u30F3\u30B9\u5316\u3067\u304D\u307E\u305B\u3093\u3002\u30B3\u30F3\u30B9\u30C8\u30E9\u30AF\u30BF\u306Bnull\u306EHashtable\u304C\u4F7F\u7528\u3055\u308C\u307E\u3057\u305F
-cachedrowsetimpl.invalidop = \u633F\u5165\u884C\u3067\u306E\u7121\u52B9\u306A\u64CD\u4F5C
-cachedrowsetimpl.accfailed = acceptChanges\u306E\u5931\u6557
-cachedrowsetimpl.invalidcp = \u7121\u52B9\u306A\u30AB\u30FC\u30BD\u30EB\u4F4D\u7F6E
-cachedrowsetimpl.illegalop = \u633F\u5165\u3055\u308C\u306A\u304B\u3063\u305F\u884C\u306E\u4E0D\u6B63\u306A\u64CD\u4F5C
-cachedrowsetimpl.clonefail = \u30AF\u30ED\u30FC\u30F3\u306E\u5931\u6557: {0}
-cachedrowsetimpl.invalidcol = \u7121\u52B9\u306A\u5217\u7D22\u5F15
-cachedrowsetimpl.invalcolnm = \u7121\u52B9\u306A\u5217\u540D
-cachedrowsetimpl.boolfail = \u5217{1}\u306E\u5024({0})\u3067getBoolean\u304C\u5931\u6557\u3057\u307E\u3057\u305F
-cachedrowsetimpl.bytefail = \u5217{1}\u306E\u5024({0})\u3067getByte\u304C\u5931\u6557\u3057\u307E\u3057\u305F
-cachedrowsetimpl.shortfail = \u5217{1}\u306E\u5024({0})\u3067getShort\u304C\u5931\u6557\u3057\u307E\u3057\u305F
-cachedrowsetimpl.intfail = \u5217{1}\u306E\u5024({0})\u3067getInt\u304C\u5931\u6557\u3057\u307E\u3057\u305F
-cachedrowsetimpl.longfail = \u5217{1}\u306E\u5024({0})\u3067getLong\u304C\u5931\u6557\u3057\u307E\u3057\u305F
-cachedrowsetimpl.floatfail = \u5217{1}\u306E\u5024({0})\u3067getFloat\u304C\u5931\u6557\u3057\u307E\u3057\u305F
-cachedrowsetimpl.doublefail = \u5217{1}\u306E\u5024({0})\u3067getDouble\u304C\u5931\u6557\u3057\u307E\u3057\u305F
-cachedrowsetimpl.dtypemismt = \u30C7\u30FC\u30BF\u578B\u306E\u4E0D\u4E00\u81F4 
-cachedrowsetimpl.datefail = \u5217{1}\u306E\u5024({0})\u3067getDate\u304C\u5931\u6557\u3002\u5909\u63DB\u3067\u304D\u307E\u305B\u3093
-cachedrowsetimpl.timefail = \u5217{1}\u306E\u5024({0})\u3067getTime\u304C\u5931\u6557\u3002\u5909\u63DB\u3067\u304D\u307E\u305B\u3093
-cachedrowsetimpl.posupdate = \u4F4D\u7F6E\u6C7A\u3081\u3055\u308C\u305F\u66F4\u65B0\u304C\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u307E\u305B\u3093
-cachedrowsetimpl.unableins = \u30A4\u30F3\u30B9\u30BF\u30F3\u30B9\u5316\u3067\u304D\u306A\u3044: {0}
-cachedrowsetimpl.beforefirst = beforeFirst: \u7121\u52B9\u306A\u30AB\u30FC\u30BD\u30EB\u64CD\u4F5C
-cachedrowsetimpl.first = First: \u7121\u52B9\u306A\u30AB\u30FC\u30BD\u30EB\u64CD\u4F5C
-cachedrowsetimpl.last = last: TYPE_FORWARD_ONLY
-cachedrowsetimpl.absolute = absolute: \u7121\u52B9\u306A\u30AB\u30FC\u30BD\u30EB\u4F4D\u7F6E
-cachedrowsetimpl.relative = relative: \u7121\u52B9\u306A\u30AB\u30FC\u30BD\u30EB\u4F4D\u7F6E
-cachedrowsetimpl.asciistream = ascii\u30B9\u30C8\u30EA\u30FC\u30E0\u306E\u8AAD\u8FBC\u307F\u306B\u5931\u6557\u3057\u307E\u3057\u305F
-cachedrowsetimpl.binstream = \u30D0\u30A4\u30CA\u30EA\u30FB\u30B9\u30C8\u30EA\u30FC\u30E0\u306E\u8AAD\u8FBC\u307F\u306B\u5931\u6557\u3057\u307E\u3057\u305F
-cachedrowsetimpl.failedins = \u884C\u306E\u633F\u5165\u306B\u5931\u6557
-cachedrowsetimpl.updateins = \u633F\u5165\u884C\u306B\u304A\u3044\u3066updateRow\u304C\u547C\u3073\u51FA\u3055\u308C\u307E\u3057\u305F
-cachedrowsetimpl.movetoins = moveToInsertRow: CONCUR_READ_ONLY
-cachedrowsetimpl.movetoins1 = moveToInsertRow: \u30E1\u30BF\u30C7\u30FC\u30BF\u306A\u3057
-cachedrowsetimpl.movetoins2 = moveToInsertRow: \u7121\u52B9\u306A\u5217\u6570
-cachedrowsetimpl.tablename = \u8868\u540D\u306Bnull\u306F\u4F7F\u7528\u3067\u304D\u307E\u305B\u3093
-cachedrowsetimpl.keycols = \u7121\u52B9\u306A\u30AD\u30FC\u5217
-cachedrowsetimpl.invalidcol = \u7121\u52B9\u306A\u5217\u7D22\u5F15
-cachedrowsetimpl.opnotsupp = \u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u3067\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u306A\u3044\u64CD\u4F5C
-cachedrowsetimpl.matchcols = \u4E00\u81F4\u5217\u304C\u5217\u306E\u30BB\u30C3\u30C8\u3068\u540C\u3058\u3067\u306F\u3042\u308A\u307E\u305B\u3093
-cachedrowsetimpl.setmatchcols = \u4E00\u81F4\u5217\u3092\u53D6\u5F97\u3059\u308B\u524D\u306B\u8A2D\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044
-cachedrowsetimpl.matchcols1 = \u4E00\u81F4\u5217\u306F0\u3088\u308A\u5927\u304D\u3044\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059
-cachedrowsetimpl.matchcols2 = \u4E00\u81F4\u5217\u306F\u7A7A\u304Bnull\u6587\u5B57\u5217\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059
-cachedrowsetimpl.unsetmatch = \u8A2D\u5B9A\u89E3\u9664\u3055\u308C\u3066\u3044\u308B\u5217\u306F\u30BB\u30C3\u30C8\u3068\u540C\u3058\u3067\u306F\u3042\u308A\u307E\u305B\u3093
-cachedrowsetimpl.unsetmatch1 = unsetMatchColumn\u3078\u306E\u5F15\u6570\u3068\u3057\u3066\u5217\u540D\u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044
-cachedrowsetimpl.unsetmatch2 = unsetMatchColumn\u3078\u306E\u5F15\u6570\u3068\u3057\u3066\u5217ID\u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044
-cachedrowsetimpl.numrows = \u884C\u6570\u304C\u30BC\u30ED\u307E\u305F\u306F\u30D5\u30A7\u30C3\u30C1\u30FB\u30B5\u30A4\u30BA\u3088\u308A\u5C0F\u3055\u3044\u3067\u3059
-cachedrowsetimpl.startpos = \u958B\u59CB\u4F4D\u7F6E\u3092\u8CA0\u306B\u3059\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093
-cachedrowsetimpl.nextpage = \u547C\u51FA\u3057\u524D\u306B\u30C7\u30FC\u30BF\u3092\u79FB\u5165\u3057\u307E\u3059 
-cachedrowsetimpl.pagesize = \u30DA\u30FC\u30B8\u30FB\u30B5\u30A4\u30BA\u3092\u30BC\u30ED\u3088\u308A\u5C0F\u3055\u304F\u3059\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093
-cachedrowsetimpl.pagesize1 = \u30DA\u30FC\u30B8\u30FB\u30B5\u30A4\u30BA\u3092maxRows\u3088\u308A\u5927\u304D\u304F\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u305B\u3093
-cachedrowsetimpl.fwdonly = ResultSet\u306F\u9806\u65B9\u5411\u306E\u307F\u3067\u3059
-cachedrowsetimpl.type = \u30BF\u30A4\u30D7: {0}
-cachedrowsetimpl.opnotysupp = \u307E\u3060\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u306A\u3044\u64CD\u4F5C
-cachedrowsetimpl.featnotsupp = \u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u306A\u3044\u6A5F\u80FD
-
-# WebRowSetImpl exceptions
-webrowsetimpl.nullhash = WebRowSetImpl\u30A4\u30F3\u30B9\u30BF\u30F3\u30B9\u3092\u30A4\u30F3\u30B9\u30BF\u30F3\u30B9\u5316\u3067\u304D\u307E\u305B\u3093\u3002\u30B3\u30F3\u30B9\u30C8\u30E9\u30AF\u30BF\u306Bnull\u306EHashtable\u304C\u4F7F\u7528\u3055\u308C\u307E\u3057\u305F
-webrowsetimpl.invalidwr = \u7121\u52B9\u306A\u30E9\u30A4\u30BF\u30FC
-webrowsetimpl.invalidrd = \u7121\u52B9\u306A\u30EA\u30FC\u30C0\u30FC
-
-#FilteredRowSetImpl exceptions
-filteredrowsetimpl.relative = relative: \u7121\u52B9\u306A\u30AB\u30FC\u30BD\u30EB\u64CD\u4F5C 
-filteredrowsetimpl.absolute = absolute: \u7121\u52B9\u306A\u30AB\u30FC\u30BD\u30EB\u64CD\u4F5C
-filteredrowsetimpl.notallowed = \u3053\u306E\u5024\u306F\u30D5\u30A3\u30EB\u30BF\u3067\u8A31\u5BB9\u3055\u308C\u307E\u305B\u3093
-
-#JoinRowSetImpl exceptions
-joinrowsetimpl.notinstance = \u884C\u30BB\u30C3\u30C8\u306E\u30A4\u30F3\u30B9\u30BF\u30F3\u30B9\u3067\u306F\u3042\u308A\u307E\u305B\u3093
-joinrowsetimpl.matchnotset = \u4E00\u81F4\u5217\u304C\u7D50\u5408\u7528\u306B\u8A2D\u5B9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093
-joinrowsetimpl.numnotequal = \u884C\u30BB\u30C3\u30C8\u306E\u8981\u7D20\u6570\u304C\u4E00\u81F4\u5217\u3068\u7B49\u3057\u304F\u3042\u308A\u307E\u305B\u3093
-joinrowsetimpl.notdefined = \u5B9A\u7FA9\u3055\u308C\u305F\u7D50\u5408\u306E\u30BF\u30A4\u30D7\u3067\u306F\u3042\u308A\u307E\u305B\u3093
-joinrowsetimpl.notsupported = \u3053\u306E\u30BF\u30A4\u30D7\u306E\u7D50\u5408\u306F\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u307E\u305B\u3093
-joinrowsetimpl.initerror = JoinRowSet\u521D\u671F\u5316\u30A8\u30E9\u30FC
-joinrowsetimpl.genericerr = \u6C4E\u7528joinrowset\u306E\u521D\u671F\u30A8\u30E9\u30FC
-joinrowsetimpl.emptyrowset = \u3053\u306EJoinRowSet\u306B\u7A7A\u306E\u884C\u30BB\u30C3\u30C8\u3092\u8FFD\u52A0\u3059\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093
-
-#JdbcRowSetImpl exceptions
-jdbcrowsetimpl.invalstate = \u7121\u52B9\u306A\u72B6\u614B
-jdbcrowsetimpl.connect = JdbcRowSet(connect): JNDI\u304C\u63A5\u7D9A\u3067\u304D\u307E\u305B\u3093
-jdbcrowsetimpl.paramtype = \u30D1\u30E9\u30E1\u30FC\u30BF\u30FB\u30BF\u30A4\u30D7\u3092\u63A8\u5B9A\u3067\u304D\u307E\u305B\u3093
-jdbcrowsetimpl.matchcols = \u4E00\u81F4\u5217\u304C\u5217\u306E\u30BB\u30C3\u30C8\u3068\u540C\u3058\u3067\u306F\u3042\u308A\u307E\u305B\u3093
-jdbcrowsetimpl.setmatchcols = \u4E00\u81F4\u5217\u3092\u53D6\u5F97\u3059\u308B\u524D\u306B\u8A2D\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044
-jdbcrowsetimpl.matchcols1 = \u4E00\u81F4\u5217\u306F0\u3088\u308A\u5927\u304D\u3044\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059
-jdbcrowsetimpl.matchcols2 = \u4E00\u81F4\u5217\u3092\u7A7A\u307E\u305F\u306Fnull\u6587\u5B57\u5217\u306B\u3059\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093
-jdbcrowsetimpl.unsetmatch = \u8A2D\u5B9A\u89E3\u9664\u3055\u308C\u3066\u3044\u308B\u5217\u306F\u30BB\u30C3\u30C8\u3068\u540C\u3058\u3067\u306F\u3042\u308A\u307E\u305B\u3093
-jdbcrowsetimpl.usecolname = unsetMatchColumn\u3078\u306E\u5F15\u6570\u3068\u3057\u3066\u5217\u540D\u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044
-jdbcrowsetimpl.usecolid = unsetMatchColumn\u3078\u306E\u5F15\u6570\u3068\u3057\u3066\u5217ID\u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044
-jdbcrowsetimpl.resnotupd = ResultSet\u306F\u66F4\u65B0\u3067\u304D\u307E\u305B\u3093
-jdbcrowsetimpl.opnotysupp = \u307E\u3060\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u306A\u3044\u64CD\u4F5C
-jdbcrowsetimpl.featnotsupp = \u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u306A\u3044\u6A5F\u80FD
-
-#CachedRowSetReader exceptions
-crsreader.connect = (JNDI)\u63A5\u7D9A\u3067\u304D\u307E\u305B\u3093
-crsreader.paramtype = \u30D1\u30E9\u30E1\u30FC\u30BF\u30FB\u30BF\u30A4\u30D7\u3092\u63A8\u5B9A\u3067\u304D\u307E\u305B\u3093
-crsreader.connecterr = RowSetReader\u306E\u5185\u90E8\u30A8\u30E9\u30FC: \u63A5\u7D9A\u307E\u305F\u306F\u30B3\u30DE\u30F3\u30C9\u306A\u3057
-crsreader.datedetected = \u65E5\u4ED8\u3092\u691C\u51FA\u3057\u307E\u3057\u305F
-crsreader.caldetected = \u30AB\u30EC\u30F3\u30C0\u3092\u691C\u51FA\u3057\u307E\u3057\u305F
-
-#CachedRowSetWriter exceptions
-crswriter.connect = \u63A5\u7D9A\u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093
-crswriter.tname = writeData\u304C\u8868\u540D\u3092\u5224\u5225\u3067\u304D\u307E\u305B\u3093
-crswriter.params1 = params1\u306E\u5024: {0} 
-crswriter.params2 = params2\u306E\u5024: {0} 
-crswriter.conflictsno =  \u540C\u671F\u4E2D\u306B\u7AF6\u5408\u304C\u767A\u751F\u3057\u307E\u3059 
-
-#InsertRow exceptions
-insertrow.novalue = \u5024\u306F\u633F\u5165\u3055\u308C\u3066\u3044\u307E\u305B\u3093
-
-#SyncResolverImpl exceptions
-syncrsimpl.indexval = \u7BC4\u56F2\u5916\u306E\u7D22\u5F15\u5024  
-syncrsimpl.noconflict = \u3053\u306E\u5217\u306F\u7AF6\u5408\u3057\u3066\u3044\u307E\u305B\u3093
-syncrsimpl.syncnotpos = \u540C\u671F\u3067\u304D\u307E\u305B\u3093
-syncrsimpl.valtores = \u89E3\u6C7A\u3055\u308C\u308B\u5024\u306F\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u307E\u305F\u306Fcachedrowset\u306B\u3042\u308B\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059
-
-#WebRowSetXmlReader exception
-wrsxmlreader.invalidcp = RowSet\u306E\u6700\u5F8C\u306B\u5230\u9054\u3057\u307E\u3057\u305F\u3002\u7121\u52B9\u306A\u30AB\u30FC\u30BD\u30EB\u4F4D\u7F6E
-wrsxmlreader.readxml = readXML: {0}
-wrsxmlreader.parseerr = **\u89E3\u6790\u30A8\u30E9\u30FC: {0}\u3001\u884C: {1}\u3001URI: {2}
-
-#WebRowSetXmlWriter exceptions
-wrsxmlwriter.ioex = IOException: {0}
-wrsxmlwriter.sqlex = SQLException: {0}
-wrsxmlwriter.failedwrite = \u5024\u306E\u66F8\u8FBC\u307F\u306B\u5931\u6557\u3057\u307E\u3057\u305F
-wsrxmlwriter.notproper = \u9069\u5207\u306A\u30BF\u30A4\u30D7\u3067\u306F\u3042\u308A\u307E\u305B\u3093
-
-#XmlReaderContentHandler exceptions
-xmlrch.errmap = Map\u8A2D\u5B9A\u30A8\u30E9\u30FC: {0}
-xmlrch.errmetadata = \u30E1\u30BF\u30C7\u30FC\u30BF\u8A2D\u5B9A\u30A8\u30E9\u30FC: {0}
-xmlrch.errinsertval = \u5024\u306E\u633F\u5165\u30A8\u30E9\u30FC: {0}
-xmlrch.errconstr = \u884C\u306E\u751F\u6210\u30A8\u30E9\u30FC: {0}
-xmlrch.errdel = \u884C\u306E\u524A\u9664\u30A8\u30E9\u30FC: {0}
-xmlrch.errinsert = \u633F\u5165\u884C\u306E\u751F\u6210\u30A8\u30E9\u30FC: {0}
-xmlrch.errinsdel = insdel\u884C\u306E\u751F\u6210\u30A8\u30E9\u30FC: {0}
-xmlrch.errupdate = \u66F4\u65B0\u884C\u306E\u751F\u6210\u30A8\u30E9\u30FC: {0}
-xmlrch.errupdrow = \u884C\u306E\u66F4\u65B0\u30A8\u30E9\u30FC: {0}
-xmlrch.chars = \u6587\u5B57:
-xmlrch.badvalue = \u4E0D\u6B63\u306A\u5024: null\u306B\u3067\u304D\u306A\u3044\u30D7\u30ED\u30D1\u30C6\u30A3
-xmlrch.badvalue1 = \u4E0D\u6B63\u306A\u5024: null\u306B\u3067\u304D\u306A\u3044\u30E1\u30BF\u30C7\u30FC\u30BF
-xmlrch.warning =  **\u8B66\u544A: {0}\u3001\u884C: {1}\u3001URI: {2}
-
-#RIOptimisticProvider Exceptions
-riop.locking = \u30ED\u30C3\u30AF\u306E\u5206\u985E\u306F\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u307E\u305B\u3093
-
-#RIXMLProvider exceptions
-rixml.unsupp = RIXMLProvider\u3067\u306F\u672A\u30B5\u30DD\u30FC\u30C8
diff --git a/ojluni/src/main/java/com/sun/rowset/RowSetResourceBundle_ko.properties b/ojluni/src/main/java/com/sun/rowset/RowSetResourceBundle_ko.properties
deleted file mode 100755
index 3dd9ee0..0000000
--- a/ojluni/src/main/java/com/sun/rowset/RowSetResourceBundle_ko.properties
+++ /dev/null
@@ -1,170 +0,0 @@
-#
-# Copyright (c) 2005, 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
-# 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.
-#
-
-# CacheRowSetImpl exceptions
-cachedrowsetimpl.populate = \uBD80\uC801\uD569\uD55C ResultSet \uAC1D\uCCB4\uAC00 \uC81C\uACF5\uB418\uC5B4 \uBA54\uC18C\uB4DC\uB97C \uCC44\uC6B8 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.
-cachedrowsetimpl.invalidp = \uBD80\uC801\uD569\uD55C \uC9C0\uC18D\uC131 \uC81C\uACF5\uC790\uAC00 \uC0DD\uC131\uB418\uC5C8\uC2B5\uB2C8\uB2E4.
-cachedrowsetimpl.nullhash = CachedRowSetImpl \uC778\uC2A4\uD134\uC2A4\uB97C \uC778\uC2A4\uD134\uC2A4\uD654\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. \uC0DD\uC131\uC790\uC5D0 \uB110 Hashtable\uC774 \uC81C\uACF5\uB418\uC5C8\uC2B5\uB2C8\uB2E4.
-cachedrowsetimpl.invalidop = \uD589\uC744 \uC0BD\uC785\uD558\uB294 \uC911 \uBD80\uC801\uD569\uD55C \uC791\uC5C5\uC774 \uC218\uD589\uB418\uC5C8\uC2B5\uB2C8\uB2E4.
-cachedrowsetimpl.accfailed = acceptChanges\uB97C \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4.
-cachedrowsetimpl.invalidcp = \uCEE4\uC11C \uC704\uCE58\uAC00 \uBD80\uC801\uD569\uD569\uB2C8\uB2E4.
-cachedrowsetimpl.illegalop = \uC0BD\uC785\uB41C \uD589\uC774 \uC544\uB2CC \uD589\uC5D0\uC11C \uC798\uBABB\uB41C \uC791\uC5C5\uC774 \uC218\uD589\uB418\uC5C8\uC2B5\uB2C8\uB2E4.
-cachedrowsetimpl.clonefail = \uBCF5\uC81C \uC2E4\uD328: {0}
-cachedrowsetimpl.invalidcol = \uC5F4 \uC778\uB371\uC2A4\uAC00 \uBD80\uC801\uD569\uD569\uB2C8\uB2E4.
-cachedrowsetimpl.invalcolnm = \uC5F4 \uC774\uB984\uC774 \uBD80\uC801\uD569\uD569\uB2C8\uB2E4.
-cachedrowsetimpl.boolfail = {1} \uC5F4\uC758 \uAC12({0})\uC5D0\uC11C getBoolen\uC744 \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4.
-cachedrowsetimpl.bytefail = {1} \uC5F4\uC758 \uAC12({0})\uC5D0\uC11C getByte\uB97C \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4.
-cachedrowsetimpl.shortfail = {1} \uC5F4\uC758 \uAC12({0})\uC5D0\uC11C getShort\uB97C \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4.
-cachedrowsetimpl.intfail = {1} \uC5F4\uC758 \uAC12({0})\uC5D0\uC11C getInt\uB97C \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4.
-cachedrowsetimpl.longfail = {1} \uC5F4\uC758 \uAC12({0})\uC5D0\uC11C getLong\uC744 \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4.
-cachedrowsetimpl.floatfail = {1} \uC5F4\uC758 \uAC12({0})\uC5D0\uC11C getFloat\uB97C \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4.
-cachedrowsetimpl.doublefail = {1} \uC5F4\uC758 \uAC12({0})\uC5D0\uC11C getDouble\uC744 \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4.
-cachedrowsetimpl.dtypemismt = \uB370\uC774\uD130 \uC720\uD615\uC774 \uC77C\uCE58\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. 
-cachedrowsetimpl.datefail = {1} \uC5F4\uC758 \uAC12({0})\uC5D0\uC11C getDate\uB97C \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4. \uBCC0\uD658\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.
-cachedrowsetimpl.timefail = {1} \uC5F4\uC758 \uAC12({0})\uC5D0\uC11C getTime\uC744 \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4. \uBCC0\uD658\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.
-cachedrowsetimpl.posupdate = \uC704\uCE58\uAC00 \uC9C0\uC815\uB41C \uAC31\uC2E0\uC774 \uC9C0\uC6D0\uB418\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.
-cachedrowsetimpl.unableins = \uC778\uC2A4\uD134\uC2A4\uD654\uD560 \uC218 \uC5C6\uC74C: {0}
-cachedrowsetimpl.beforefirst = beforeFirst: \uCEE4\uC11C \uC791\uC5C5\uC774 \uBD80\uC801\uD569\uD569\uB2C8\uB2E4.
-cachedrowsetimpl.first = \uCC98\uC74C: \uCEE4\uC11C \uC791\uC5C5\uC774 \uBD80\uC801\uD569\uD569\uB2C8\uB2E4.
-cachedrowsetimpl.last = \uB9C8\uC9C0\uB9C9: TYPE_FORWARD_ONLY
-cachedrowsetimpl.absolute = \uC808\uB300: \uCEE4\uC11C \uC704\uCE58\uAC00 \uBD80\uC801\uD569\uD569\uB2C8\uB2E4.
-cachedrowsetimpl.relative = \uC0C1\uB300: \uCEE4\uC11C \uC704\uCE58\uAC00 \uBD80\uC801\uD569\uD569\uB2C8\uB2E4.
-cachedrowsetimpl.asciistream = ASCII \uC2A4\uD2B8\uB9BC\uC5D0 \uB300\uD55C \uC77D\uAE30\uB97C \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4.
-cachedrowsetimpl.binstream = \uC774\uC9C4 \uC2A4\uD2B8\uB9BC\uC5D0\uC11C \uC77D\uAE30\uB97C \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4.
-cachedrowsetimpl.failedins = \uD589 \uC0BD\uC785\uC744 \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4.
-cachedrowsetimpl.updateins = \uD589\uC744 \uC0BD\uC785\uD558\uB294 \uC911 updateRow\uAC00 \uD638\uCD9C\uB418\uC5C8\uC2B5\uB2C8\uB2E4.
-cachedrowsetimpl.movetoins = moveToInsertRow: CONCUR_READ_ONLY
-cachedrowsetimpl.movetoins1 = moveToInsertRow: \uBA54\uD0C0 \uB370\uC774\uD130\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4.
-cachedrowsetimpl.movetoins2 = moveToInsertRow: \uC5F4 \uC218\uAC00 \uBD80\uC801\uD569\uD569\uB2C8\uB2E4.
-cachedrowsetimpl.tablename = \uD14C\uC774\uBE14 \uC774\uB984\uC740 \uB110\uC77C \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.
-cachedrowsetimpl.keycols = \uD0A4 \uC5F4\uC774 \uBD80\uC801\uD569\uD569\uB2C8\uB2E4.
-cachedrowsetimpl.invalidcol = \uC5F4 \uC778\uB371\uC2A4\uAC00 \uBD80\uC801\uD569\uD569\uB2C8\uB2E4.
-cachedrowsetimpl.opnotsupp = \uB370\uC774\uD130\uBCA0\uC774\uC2A4\uC5D0\uC11C \uC9C0\uC6D0\uD558\uC9C0 \uC54A\uB294 \uC791\uC5C5\uC785\uB2C8\uB2E4.
-cachedrowsetimpl.matchcols = \uC77C\uCE58 \uC5F4\uC774 \uC124\uC815\uB41C \uC5F4\uACFC \uB3D9\uC77C\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.
-cachedrowsetimpl.setmatchcols = \uC77C\uCE58 \uC5F4\uC744 \uC124\uC815\uD55C \uD6C4 \uAC00\uC838\uC624\uC2ED\uC2DC\uC624.
-cachedrowsetimpl.matchcols1 = \uC77C\uCE58 \uC5F4\uC740 0\uAC1C \uC774\uC0C1\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4.
-cachedrowsetimpl.matchcols2 = \uC77C\uCE58 \uC5F4\uC740 \uBE44\uC5B4 \uC788\uAC70\uB098 \uB110 \uBB38\uC790\uC5F4\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4.
-cachedrowsetimpl.unsetmatch = \uC124\uC815\uC744 \uD574\uC81C\uD558\uB824\uB294 \uC5F4\uC774 \uC124\uC815\uB41C \uC5F4\uACFC \uB2E4\uB985\uB2C8\uB2E4.
-cachedrowsetimpl.unsetmatch1 = \uC5F4 \uC774\uB984\uC744 unsetMatchColumn\uC758 \uC778\uC218\uB85C \uC0AC\uC6A9\uD558\uC2ED\uC2DC\uC624.
-cachedrowsetimpl.unsetmatch2 = \uC5F4 ID\uB97C unsetMatchColumn\uC758 \uC778\uC218\uB85C \uC0AC\uC6A9\uD558\uC2ED\uC2DC\uC624.
-cachedrowsetimpl.numrows = \uD589 \uC218\uAC00 0\uBCF4\uB2E4 \uC791\uAC70\uB098 \uC778\uCD9C \uD06C\uAE30\uBCF4\uB2E4 \uC791\uC2B5\uB2C8\uB2E4.
-cachedrowsetimpl.startpos = \uC2DC\uC791 \uC704\uCE58\uB294 \uC74C\uC218\uC77C \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.
-cachedrowsetimpl.nextpage = \uD638\uCD9C\uD558\uAE30 \uC804\uC5D0 \uB370\uC774\uD130\uB97C \uCC44\uC6B0\uC2ED\uC2DC\uC624. 
-cachedrowsetimpl.pagesize = \uD398\uC774\uC9C0 \uD06C\uAE30\uB294 0\uBCF4\uB2E4 \uC791\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.
-cachedrowsetimpl.pagesize1 = \uD398\uC774\uC9C0 \uD06C\uAE30\uB294 maxRows\uBCF4\uB2E4 \uD074 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.
-cachedrowsetimpl.fwdonly = ResultSet\uB294 \uC804\uB2EC \uC804\uC6A9\uC785\uB2C8\uB2E4.
-cachedrowsetimpl.type = \uC720\uD615: {0}
-cachedrowsetimpl.opnotysupp = \uC791\uC5C5\uC774 \uC544\uC9C1 \uC9C0\uC6D0\uB418\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.
-cachedrowsetimpl.featnotsupp = \uAE30\uB2A5\uC774 \uC9C0\uC6D0\uB418\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.
-
-# WebRowSetImpl exceptions
-webrowsetimpl.nullhash = WebRowSetImpl \uC778\uC2A4\uD134\uC2A4\uB97C \uC778\uC2A4\uD134\uC2A4\uD654\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. \uC0DD\uC131\uC790\uC5D0 \uB110 Hashtable\uC774 \uC81C\uACF5\uB418\uC5C8\uC2B5\uB2C8\uB2E4.
-webrowsetimpl.invalidwr = \uAE30\uB85D \uC7A5\uCE58\uAC00 \uBD80\uC801\uD569\uD569\uB2C8\uB2E4.
-webrowsetimpl.invalidrd = \uC77D\uAE30 \uD504\uB85C\uADF8\uB7A8\uC774 \uBD80\uC801\uD569\uD569\uB2C8\uB2E4.
-
-#FilteredRowSetImpl exceptions
-filteredrowsetimpl.relative = \uC0C1\uB300: \uCEE4\uC11C \uC791\uC5C5\uC774 \uBD80\uC801\uD569\uD569\uB2C8\uB2E4. 
-filteredrowsetimpl.absolute = \uC808\uB300: \uCEE4\uC11C \uC791\uC5C5\uC774 \uBD80\uC801\uD569\uD569\uB2C8\uB2E4.
-filteredrowsetimpl.notallowed = \uC774 \uAC12\uC740 \uD544\uD130\uB97C \uD1B5\uACFC\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.
-
-#JoinRowSetImpl exceptions
-joinrowsetimpl.notinstance = Rowset\uC758 \uC778\uC2A4\uD134\uC2A4\uAC00 \uC544\uB2D9\uB2C8\uB2E4.
-joinrowsetimpl.matchnotset = \uC870\uC778\uD560 \uC77C\uCE58 \uC5F4\uC774 \uC124\uC815\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4.
-joinrowsetimpl.numnotequal = Rowset\uC758 \uC694\uC18C \uC218\uAC00 \uC77C\uCE58 \uC5F4\uACFC \uAC19\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.
-joinrowsetimpl.notdefined = \uC815\uC758\uB41C \uC870\uC778 \uC720\uD615\uC774 \uC544\uB2D9\uB2C8\uB2E4.
-joinrowsetimpl.notsupported = \uC774 \uC870\uC778 \uC720\uD615\uC740 \uC9C0\uC6D0\uB418\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.
-joinrowsetimpl.initerror = JoinRowSet \uCD08\uAE30\uD654 \uC624\uB958
-joinrowsetimpl.genericerr = \uC77C\uBC18 joinrowset \uCD08\uAE30 \uC624\uB958
-joinrowsetimpl.emptyrowset = \uBE48 rowset\uB97C \uC774 JoinRowSet\uC5D0 \uCD94\uAC00\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.
-
-#JdbcRowSetImpl exceptions
-jdbcrowsetimpl.invalstate = \uC0C1\uD0DC\uAC00 \uBD80\uC801\uD569\uD569\uB2C8\uB2E4.
-jdbcrowsetimpl.connect = JdbcRowSet(\uC811\uC18D) JNDI\uAC00 \uC811\uC18D\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.
-jdbcrowsetimpl.paramtype = \uB9E4\uAC1C\uBCC0\uC218 \uC720\uD615\uC744 \uCD94\uB860\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.
-jdbcrowsetimpl.matchcols = \uC77C\uCE58 \uC5F4\uC774 \uC124\uC815\uB41C \uC5F4\uACFC \uB3D9\uC77C\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.
-jdbcrowsetimpl.setmatchcols = \uC77C\uCE58 \uC5F4\uC744 \uC124\uC815\uD55C \uD6C4 \uAC00\uC838\uC624\uC2ED\uC2DC\uC624.
-jdbcrowsetimpl.matchcols1 = \uC77C\uCE58 \uC5F4\uC740 0\uAC1C \uC774\uC0C1\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4.
-jdbcrowsetimpl.matchcols2 = \uC77C\uCE58 \uC5F4\uC740 \uB110 \uB610\uB294 \uBE48 \uBB38\uC790\uC5F4\uC77C \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.
-jdbcrowsetimpl.unsetmatch = \uC124\uC815\uC744 \uD574\uC81C\uD558\uB824\uB294 \uC5F4\uC774 \uC124\uC815\uB41C \uC5F4\uACFC \uB2E4\uB985\uB2C8\uB2E4.
-jdbcrowsetimpl.usecolname = \uC5F4 \uC774\uB984\uC744 unsetMatchColumn\uC758 \uC778\uC218\uB85C \uC0AC\uC6A9\uD558\uC2ED\uC2DC\uC624.
-jdbcrowsetimpl.usecolid = \uC5F4 ID\uB97C unsetMatchColumn\uC758 \uC778\uC218\uB85C \uC0AC\uC6A9\uD558\uC2ED\uC2DC\uC624.
-jdbcrowsetimpl.resnotupd = ResultSet\uB97C \uAC31\uC2E0\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.
-jdbcrowsetimpl.opnotysupp = \uC791\uC5C5\uC774 \uC544\uC9C1 \uC9C0\uC6D0\uB418\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.
-jdbcrowsetimpl.featnotsupp = \uAE30\uB2A5\uC774 \uC9C0\uC6D0\uB418\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.
-
-#CachedRowSetReader exceptions
-crsreader.connect = (JNDI) \uC811\uC18D\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.
-crsreader.paramtype = \uB9E4\uAC1C\uBCC0\uC218 \uC720\uD615\uC744 \uCD94\uB860\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.
-crsreader.connecterr = RowSetReader\uC5D0 \uB0B4\uBD80 \uC624\uB958 \uBC1C\uC0DD: \uC811\uC18D \uB610\uB294 \uBA85\uB839\uC774 \uC5C6\uC2B5\uB2C8\uB2E4.
-crsreader.datedetected = \uB0A0\uC9DC\uB97C \uAC10\uC9C0\uD568
-crsreader.caldetected = \uB2EC\uB825\uC744 \uAC10\uC9C0\uD568
-
-#CachedRowSetWriter exceptions
-crswriter.connect = \uC811\uC18D\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.
-crswriter.tname = writeData\uC5D0\uC11C \uD14C\uC774\uBE14 \uC774\uB984\uC744 \uD655\uC778\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.
-crswriter.params1 = params1\uC758 \uAC12: {0} 
-crswriter.params2 = params2\uC758 \uAC12: {0} 
-crswriter.conflictsno =  \uB3D9\uAE30\uD654\uD558\uB294 \uC911 \uCDA9\uB3CC\uD568 
-
-#InsertRow exceptions
-insertrow.novalue = \uAC12\uC774 \uC0BD\uC785\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4.
-
-#SyncResolverImpl exceptions
-syncrsimpl.indexval = \uC778\uB371\uC2A4 \uAC12\uC774 \uBC94\uC704\uB97C \uBC97\uC5B4\uB0AC\uC2B5\uB2C8\uB2E4.  
-syncrsimpl.noconflict = \uC774 \uC5F4\uC740 \uCDA9\uB3CC\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.
-syncrsimpl.syncnotpos = \uB3D9\uAE30\uD654\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.
-syncrsimpl.valtores = \uBD84\uC11D\uD560 \uAC12\uC774 \uB370\uC774\uD130\uBCA0\uC774\uC2A4 \uB610\uB294 cachedrowset\uC5D0 \uC788\uC744 \uC218 \uC788\uC2B5\uB2C8\uB2E4.
-
-#WebRowSetXmlReader exception
-wrsxmlreader.invalidcp = RowSet\uC758 \uB05D\uC5D0 \uB3C4\uB2EC\uD588\uC2B5\uB2C8\uB2E4. \uCEE4\uC11C \uC704\uCE58\uAC00 \uBD80\uC801\uD569\uD569\uB2C8\uB2E4.
-wrsxmlreader.readxml = readXML: {0}
-wrsxmlreader.parseerr = ** \uAD6C\uBB38 \uBD84\uC11D \uC624\uB958: {0}, \uD589: {1}, URI: {2}
-
-#WebRowSetXmlWriter exceptions
-wrsxmlwriter.ioex = IOException : {0}
-wrsxmlwriter.sqlex = SQLException : {0}
-wrsxmlwriter.failedwrite = \uAC12 \uC4F0\uAE30\uB97C \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4.
-wsrxmlwriter.notproper = \uC801\uC808\uD55C \uC720\uD615\uC774 \uC544\uB2D9\uB2C8\uB2E4.
-
-#XmlReaderContentHandler exceptions
-xmlrch.errmap = \uB9F5\uC744 \uC124\uC815\uD558\uB294 \uC911 \uC624\uB958 \uBC1C\uC0DD: {0}
-xmlrch.errmetadata = \uBA54\uD0C0 \uB370\uC774\uD130\uB97C \uC124\uC815\uD558\uB294 \uC911 \uC624\uB958 \uBC1C\uC0DD: {0}
-xmlrch.errinsertval = \uAC12\uC744 \uC0BD\uC785\uD558\uB294 \uC911 \uC624\uB958 \uBC1C\uC0DD: {0}
-xmlrch.errconstr = \uD589\uC744 \uC0DD\uC131\uD558\uB294 \uC911 \uC624\uB958 \uBC1C\uC0DD: {0}
-xmlrch.errdel = \uD589\uC744 \uC0AD\uC81C\uD558\uB294 \uC911 \uC624\uB958 \uBC1C\uC0DD: {0}
-xmlrch.errinsert = insert \uD589\uC744 \uC0DD\uC131\uD558\uB294 \uC911 \uC624\uB958 \uBC1C\uC0DD: {0}
-xmlrch.errinsdel = insdel \uD589\uC744 \uC0DD\uC131\uD558\uB294 \uC911 \uC624\uB958 \uBC1C\uC0DD: {0}
-xmlrch.errupdate = update \uD589\uC744 \uC0DD\uC131\uD558\uB294 \uC911 \uC624\uB958 \uBC1C\uC0DD: {0}
-xmlrch.errupdrow = \uD589\uC744 \uAC31\uC2E0\uD558\uB294 \uC911 \uC624\uB958 \uBC1C\uC0DD: {0}
-xmlrch.chars = \uBB38\uC790:
-xmlrch.badvalue = \uC798\uBABB\uB41C \uAC12: \uB110\uC77C \uC218 \uC5C6\uB294 \uC18D\uC131\uC785\uB2C8\uB2E4.
-xmlrch.badvalue1 = \uC798\uBABB\uB41C \uAC12: \uB110\uC77C \uC218 \uC5C6\uB294 \uBA54\uD0C0 \uB370\uC774\uD130\uC785\uB2C8\uB2E4.
-xmlrch.warning =  ** \uACBD\uACE0: {0}, \uD589: {1}, URI: {2}
-
-#RIOptimisticProvider Exceptions
-riop.locking = \uBD84\uB958 \uC7A0\uAE08\uC774 \uC9C0\uC6D0\uB418\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.
-
-#RIXMLProvider exceptions
-rixml.unsupp = RIXMLProvider\uC5D0\uC11C \uC9C0\uC6D0\uB418\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.
diff --git a/ojluni/src/main/java/com/sun/rowset/RowSetResourceBundle_pt_BR.properties b/ojluni/src/main/java/com/sun/rowset/RowSetResourceBundle_pt_BR.properties
deleted file mode 100755
index cc80e06..0000000
--- a/ojluni/src/main/java/com/sun/rowset/RowSetResourceBundle_pt_BR.properties
+++ /dev/null
@@ -1,170 +0,0 @@
-#
-# Copyright (c) 2005, 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
-# 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.
-#
-
-# CacheRowSetImpl exceptions
-cachedrowsetimpl.populate = Objeto ResultSet inv\u00E1lido fornecido para preencher o m\u00E9todo
-cachedrowsetimpl.invalidp = Fornecedor de persist\u00EAncias inv\u00E1lido gerado
-cachedrowsetimpl.nullhash = N\u00E3o \u00E9 poss\u00EDvel instanciar a inst\u00E2ncia CachedRowSetImpl. Hashtable Nulo fornecido ao construtor
-cachedrowsetimpl.invalidop = Opera\u00E7\u00E3o inv\u00E1lida durante a inser\u00E7\u00E3o de linha
-cachedrowsetimpl.accfailed = Falha em acceptChanges
-cachedrowsetimpl.invalidcp = Posi\u00E7\u00E3o inv\u00E1lida do cursor
-cachedrowsetimpl.illegalop = Opera\u00E7\u00E3o inv\u00E1lida em linha n\u00E3o inserida
-cachedrowsetimpl.clonefail = Falha ao clonar: {0}
-cachedrowsetimpl.invalidcol = \u00CDndice de coluna inv\u00E1lido
-cachedrowsetimpl.invalcolnm = Nome de coluna inv\u00E1lido
-cachedrowsetimpl.boolfail = Falha em getBoolen no valor ( {0} ) na coluna {1}
-cachedrowsetimpl.bytefail = Falha em getByte no valor ( {0} ) na coluna {1}
-cachedrowsetimpl.shortfail = Falha em getShort no valor ( {0} ) na coluna {1}
-cachedrowsetimpl.intfail = Falha em getInt no valor ( {0} ) na coluna {1}
-cachedrowsetimpl.longfail = Falha em getLong no valor ( {0} ) na coluna {1}
-cachedrowsetimpl.floatfail = Falha em getFloat no valor ( {0} ) na coluna {1}
-cachedrowsetimpl.doublefail = Falha em getDouble no valor ( {0} ) na coluna {1}
-cachedrowsetimpl.dtypemismt = Tipo de Dados Incompat\u00EDvel 
-cachedrowsetimpl.datefail = Falha em getDate no valor ( {0} ) na coluna {1} sem convers\u00E3o dispon\u00EDvel
-cachedrowsetimpl.timefail = Falha em getTime no valor ( {0} ) na coluna {1} sem convers\u00E3o dispon\u00EDvel
-cachedrowsetimpl.posupdate = Atualiza\u00E7\u00F5es posicionadas n\u00E3o suportadas
-cachedrowsetimpl.unableins = N\u00E3o \u00E9 poss\u00EDvel instanciar : {0}
-cachedrowsetimpl.beforefirst = beforeFirst : Opera\u00E7\u00E3o do cursor inv\u00E1lida
-cachedrowsetimpl.first = First : Opera\u00E7\u00E3o inv\u00E1lida do cursor
-cachedrowsetimpl.last = last : TYPE_FORWARD_ONLY
-cachedrowsetimpl.absolute = absolute : Posi\u00E7\u00E3o inv\u00E1lida do cursor
-cachedrowsetimpl.relative = relative : Posi\u00E7\u00E3o inv\u00E1lida do cursor
-cachedrowsetimpl.asciistream = falha na leitura do fluxo ascii
-cachedrowsetimpl.binstream = falha na leitura do fluxo bin\u00E1rio
-cachedrowsetimpl.failedins = Falha ao inserir a linha
-cachedrowsetimpl.updateins = updateRow chamado durante a inser\u00E7\u00E3o de linha
-cachedrowsetimpl.movetoins = moveToInsertRow : CONCUR_READ_ONLY
-cachedrowsetimpl.movetoins1 = moveToInsertRow : sem metadados
-cachedrowsetimpl.movetoins2 = moveToInsertRow : n\u00FAmero de colunas inv\u00E1lido
-cachedrowsetimpl.tablename = O nome da tabela n\u00E3o pode ser nulo
-cachedrowsetimpl.keycols = Colunas de chaves inv\u00E1lidas
-cachedrowsetimpl.invalidcol = \u00CDndice de coluna inv\u00E1lido
-cachedrowsetimpl.opnotsupp = Opera\u00E7\u00E3o n\u00E3o suportada pelo Banco de Dados
-cachedrowsetimpl.matchcols = As colunas correspondentes n\u00E3o s\u00E3o iguais \u00E0s colunas definidas
-cachedrowsetimpl.setmatchcols = Definir Colunas correspondentes antes de obt\u00EA-las
-cachedrowsetimpl.matchcols1 = As colunas correspondentes devem ser maior do que 0
-cachedrowsetimpl.matchcols2 = As colunas correspondentes devem ser strings vazias ou nulas
-cachedrowsetimpl.unsetmatch = As colunas n\u00E3o definidas n\u00E3o s\u00E3o iguais \u00E0s colunas definidas
-cachedrowsetimpl.unsetmatch1 = Usar o nome da coluna como argumento para unsetMatchColumn
-cachedrowsetimpl.unsetmatch2 = Usar o ID da coluna como argumento para unsetMatchColumn
-cachedrowsetimpl.numrows = O n\u00FAmero de linhas \u00E9 menor do que zero ou menor do que o tamanho obtido
-cachedrowsetimpl.startpos = A posi\u00E7\u00E3o de in\u00EDcio n\u00E3o pode ser negativa
-cachedrowsetimpl.nextpage = Preencher dados antes de chamar 
-cachedrowsetimpl.pagesize = O tamanho da p\u00E1gina n\u00E3o pode ser menor do que zero
-cachedrowsetimpl.pagesize1 = O tamanho da p\u00E1gina n\u00E3o pode ser maior do que maxRows
-cachedrowsetimpl.fwdonly = ResultSet \u00E9 somente para frente
-cachedrowsetimpl.type = O tipo \u00E9 : {0}
-cachedrowsetimpl.opnotysupp = Opera\u00E7\u00E3o ainda n\u00E3o suportada
-cachedrowsetimpl.featnotsupp = Recurso n\u00E3o suportado
-
-# WebRowSetImpl exceptions
-webrowsetimpl.nullhash = N\u00E3o \u00E9 poss\u00EDvel instanciar a inst\u00E2ncia WebRowSetImpl. Hashtable nulo fornecido ao construtor
-webrowsetimpl.invalidwr = Gravador inv\u00E1lido
-webrowsetimpl.invalidrd = Leitor inv\u00E1lido
-
-#FilteredRowSetImpl exceptions
-filteredrowsetimpl.relative = relative : Opera\u00E7\u00E3o inv\u00E1lida do cursor 
-filteredrowsetimpl.absolute = absolute : Opera\u00E7\u00E3o inv\u00E1lida do cursor
-filteredrowsetimpl.notallowed = Este valor n\u00E3o \u00E9 permitido no filtro
-
-#JoinRowSetImpl exceptions
-joinrowsetimpl.notinstance = N\u00E3o \u00E9 uma inst\u00E2ncia do conjunto de linhas
-joinrowsetimpl.matchnotset = Coluna Correspondente n\u00E3o definida para jun\u00E7\u00E3o
-joinrowsetimpl.numnotequal = N\u00FAmero de elementos no conjunto de linhas diferente da coluna correspondente
-joinrowsetimpl.notdefined = N\u00E3o \u00E9 um tipo definido de jun\u00E7\u00E3o
-joinrowsetimpl.notsupported = Este tipo de jun\u00E7\u00E3o n\u00E3o \u00E9 suportada
-joinrowsetimpl.initerror = Erro de inicializa\u00E7\u00E3o do JoinRowSet
-joinrowsetimpl.genericerr = Erro inicial de joinrowset gen\u00E9rico
-joinrowsetimpl.emptyrowset = O conjunto de linha vazio n\u00E3o pode ser adicionado a este JoinRowSet
-
-#JdbcRowSetImpl exceptions
-jdbcrowsetimpl.invalstate = Estado inv\u00E1lido
-jdbcrowsetimpl.connect = N\u00E3o \u00E9 poss\u00EDvel conectar JdbcRowSet (connect) a JNDI
-jdbcrowsetimpl.paramtype = N\u00E3o \u00E9 poss\u00EDvel deduzir o tipo de par\u00E2metro
-jdbcrowsetimpl.matchcols = As Colunas Correspondentes n\u00E3o s\u00E3o iguais \u00E0s colunas definidas
-jdbcrowsetimpl.setmatchcols = Definir as colunas correspondentes antes de obt\u00EA-las
-jdbcrowsetimpl.matchcols1 = As colunas correspondentes devem ser maior do que 0
-jdbcrowsetimpl.matchcols2 = As colunas correspondentes n\u00E3o podem ser strings vazias ou nulas
-jdbcrowsetimpl.unsetmatch = As colunas n\u00E3o definidas n\u00E3o s\u00E3o iguais \u00E0s colunas definidas
-jdbcrowsetimpl.usecolname = Usar o nome da coluna como argumento para unsetMatchColumn
-jdbcrowsetimpl.usecolid = Usar o ID da coluna como argumento para unsetMatchColumn
-jdbcrowsetimpl.resnotupd = ResultSet n\u00E3o \u00E9 atualiz\u00E1vel
-jdbcrowsetimpl.opnotysupp = Opera\u00E7\u00E3o ainda n\u00E3o suportada
-jdbcrowsetimpl.featnotsupp = Recurso n\u00E3o suportado
-
-#CachedRowSetReader exceptions
-crsreader.connect = (JNDI) N\u00E3o \u00E9 poss\u00EDvel conectar
-crsreader.paramtype = N\u00E3o \u00E9 poss\u00EDvel deduzir o tipo de par\u00E2metro
-crsreader.connecterr = Erro Interno no RowSetReader: sem conex\u00E3o ou comando
-crsreader.datedetected = Data Detectada
-crsreader.caldetected = Calend\u00E1rio Detectado
-
-#CachedRowSetWriter exceptions
-crswriter.connect = N\u00E3o \u00E9 poss\u00EDvel obter a conex\u00E3o
-crswriter.tname = writeData n\u00E3o pode determinar o nome da tabela
-crswriter.params1 = Valor de params1 : {0} 
-crswriter.params2 = Valor de params2 : {0} 
-crswriter.conflictsno =  conflitos durante a sincroniza\u00E7\u00E3o 
-
-#InsertRow exceptions
-insertrow.novalue = Nenhum valor foi inserido
-
-#SyncResolverImpl exceptions
-syncrsimpl.indexval = Valor de \u00EDndice fora da faixa  
-syncrsimpl.noconflict = Est\u00E1 coluna n\u00E3o est\u00E1 em conflito
-syncrsimpl.syncnotpos = A sincroniza\u00E7\u00E3o n\u00E3o \u00E9 poss\u00EDvel
-syncrsimpl.valtores = O valor a ser decidido pode estar no banco de dados ou no conjunto de linhas armazenado no cache
-
-#WebRowSetXmlReader exception
-wrsxmlreader.invalidcp = Fim de RowSet atingido. Posi\u00E7\u00E3o inv\u00E1lida do cursor
-wrsxmlreader.readxml = readXML : {0}
-wrsxmlreader.parseerr = ** Erro de Parsing : {0} , linha : {1} , uri : {2}
-
-#WebRowSetXmlWriter exceptions
-wrsxmlwriter.ioex = IOException : {0}
-wrsxmlwriter.sqlex = SQLException : {0}
-wrsxmlwriter.failedwrite = Falha ao gravar o valor
-wsrxmlwriter.notproper = N\u00E3o \u00E9 um tipo adequado
-
-#XmlReaderContentHandler exceptions
-xmlrch.errmap = Erro ao definir o Mapa : {0}
-xmlrch.errmetadata = Erro ao definir metadados : {0}
-xmlrch.errinsertval = Erro ao inserir valores : {0}
-xmlrch.errconstr = Erro ao construir a linha : {0}
-xmlrch.errdel = Erro ao deletar a linha : {0}
-xmlrch.errinsert = Erro ao construir a linha de inser\u00E7\u00E3o : {0}
-xmlrch.errinsdel = Erro ao construir a linha insdel : {0}
-xmlrch.errupdate = Erro ao construir a linha de atualiza\u00E7\u00E3o : {0}
-xmlrch.errupdrow = Erro ao atualizar a linha : {0}
-xmlrch.chars = caracteres :
-xmlrch.badvalue = Valor incorreto ; propriedade n\u00E3o anul\u00E1vel
-xmlrch.badvalue1 = Valor incorreto ; metadado n\u00E3o anul\u00E1vel
-xmlrch.warning =  ** Advert\u00EAncia : {0} , linha : {1} , uri : {2}
-
-#RIOptimisticProvider Exceptions
-riop.locking = O bloqueio de classifica\u00E7\u00E3o n\u00E3o \u00E9 suportado
-
-#RIXMLProvider exceptions
-rixml.unsupp = N\u00E3o suportado com RIXMLProvider
diff --git a/ojluni/src/main/java/com/sun/rowset/RowSetResourceBundle_sv.properties b/ojluni/src/main/java/com/sun/rowset/RowSetResourceBundle_sv.properties
deleted file mode 100755
index 089dc28..0000000
--- a/ojluni/src/main/java/com/sun/rowset/RowSetResourceBundle_sv.properties
+++ /dev/null
@@ -1,170 +0,0 @@
-#
-# Copyright (c) 2005, 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
-# 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.
-#
-
-# CacheRowSetImpl exceptions
-cachedrowsetimpl.populate = Ifyllningsmetoden fick ett ogiltigt ResultSet-objekt
-cachedrowsetimpl.invalidp = En ogiltig best\u00E4ndig leverant\u00F6r genererades
-cachedrowsetimpl.nullhash = Kan inte instansiera CachedRowSetImpl. Null-hashtabell skickades till konstruktor
-cachedrowsetimpl.invalidop = En ogiltig \u00E5tg\u00E4rd utf\u00F6rdes p\u00E5 infogad rad
-cachedrowsetimpl.accfailed = acceptChanges utf\u00F6rdes inte
-cachedrowsetimpl.invalidcp = Mark\u00F6rpositionen \u00E4r ogiltig
-cachedrowsetimpl.illegalop = En otill\u00E5ten \u00E5tg\u00E4rd utf\u00F6rdes p\u00E5 en icke infogad rad
-cachedrowsetimpl.clonefail = Kloningen utf\u00F6rdes inte: {0}
-cachedrowsetimpl.invalidcol = Kolumnindexet \u00E4r ogiltigt
-cachedrowsetimpl.invalcolnm = Kolumnnamnet \u00E4r ogiltigt
-cachedrowsetimpl.boolfail = getBoolen utf\u00F6rdes inte f\u00F6r v\u00E4rdet ({0}) i kolumnen {1}
-cachedrowsetimpl.bytefail = getByte utf\u00F6rdes inte f\u00F6r v\u00E4rdet ({0}) i kolumnen {1}
-cachedrowsetimpl.shortfail = getShort utf\u00F6rdes inte f\u00F6r v\u00E4rdet ({0}) i kolumnen {1}
-cachedrowsetimpl.intfail = getInt utf\u00F6rdes inte f\u00F6r v\u00E4rdet ({0}) i kolumnen {1}
-cachedrowsetimpl.longfail = getLong utf\u00F6rdes inte f\u00F6r v\u00E4rdet ({0}) i kolumnen {1}
-cachedrowsetimpl.floatfail = getFloat utf\u00F6rdes inte f\u00F6r v\u00E4rdet ({0}) i kolumnen {1}
-cachedrowsetimpl.doublefail = getDouble utf\u00F6rdes inte f\u00F6r v\u00E4rdet ({0}) i kolumnen {1}
-cachedrowsetimpl.dtypemismt = Inkompatibel datatyp 
-cachedrowsetimpl.datefail = getDate utf\u00F6rdes inte f\u00F6r v\u00E4rdet ({0}) i kolumnen {1}, ingen konvertering tillg\u00E4nglig
-cachedrowsetimpl.timefail = getTime utf\u00F6rdes inte f\u00F6r v\u00E4rdet ({0}) i kolumnen {1}, ingen konvertering tillg\u00E4nglig
-cachedrowsetimpl.posupdate = Det finns inte st\u00F6d f\u00F6r positionerad uppdatering
-cachedrowsetimpl.unableins = Kan inte instansiera {0}
-cachedrowsetimpl.beforefirst = beforeFirst: Ogiltig mark\u00F6r\u00E5tg\u00E4rd
-cachedrowsetimpl.first = First: Ogiltig mark\u00F6r\u00E5tg\u00E4rd
-cachedrowsetimpl.last = last: TYPE_FORWARD_ONLY
-cachedrowsetimpl.absolute = absolute: Mark\u00F6rpositionen \u00E4r ogiltig
-cachedrowsetimpl.relative = relative: Mark\u00F6rpositionen \u00E4r ogiltig
-cachedrowsetimpl.asciistream = kunde inte l\u00E4sa ASCII-str\u00F6mmen
-cachedrowsetimpl.binstream = kunde inte l\u00E4sa den bin\u00E4ra str\u00F6mmen
-cachedrowsetimpl.failedins = Kunde inte infoga rad
-cachedrowsetimpl.updateins = updateRow anropades fr\u00E5n infogad rad
-cachedrowsetimpl.movetoins = moveToInsertRow : CONCUR_READ_ONLY
-cachedrowsetimpl.movetoins1 = moveToInsertRow: inga metadata
-cachedrowsetimpl.movetoins2 = moveToInsertRow: ogiltigt antal kolumner
-cachedrowsetimpl.tablename = Tabellnamnet kan inte vara null
-cachedrowsetimpl.keycols = Ogiltiga nyckelkolumner
-cachedrowsetimpl.invalidcol = Kolumnindexet \u00E4r ogiltigt
-cachedrowsetimpl.opnotsupp = Databasen har inte st\u00F6d f\u00F6r denna \u00E5tg\u00E4rd
-cachedrowsetimpl.matchcols = Matchningskolumnerna \u00E4r inte samma som de som st\u00E4llts in
-cachedrowsetimpl.setmatchcols = St\u00E4ll in matchningskolumnerna innan du h\u00E4mtar dem
-cachedrowsetimpl.matchcols1 = Matchningskolumnerna m\u00E5ste vara st\u00F6rre \u00E4n 0
-cachedrowsetimpl.matchcols2 = Matchningskolumnerna m\u00E5ste vara tomma eller en null-str\u00E4ng
-cachedrowsetimpl.unsetmatch = Kolumnerna som \u00E5terst\u00E4lls \u00E4r inte samma som de som st\u00E4llts in
-cachedrowsetimpl.unsetmatch1 = Anv\u00E4nd kolumnnamn som argument f\u00F6r unsetMatchColumn
-cachedrowsetimpl.unsetmatch2 = Anv\u00E4nd kolumn-id som argument f\u00F6r unsetMatchColumn
-cachedrowsetimpl.numrows = Antalet rader understiger noll eller \u00E4r mindre \u00E4n h\u00E4mtningsstorleken
-cachedrowsetimpl.startpos = Startpositionen f\u00E5r inte vara negativ
-cachedrowsetimpl.nextpage = Fyll i data innan anrop 
-cachedrowsetimpl.pagesize = Sidstorleken f\u00E5r inte understiga noll
-cachedrowsetimpl.pagesize1 = Sidstorleken f\u00E5r inte \u00F6verstiga maxRows
-cachedrowsetimpl.fwdonly = ResultSet kan endast g\u00E5 fram\u00E5t
-cachedrowsetimpl.type = Typ: {0}
-cachedrowsetimpl.opnotysupp = Det finns \u00E4nnu inget st\u00F6d f\u00F6r denna \u00E5tg\u00E4rd
-cachedrowsetimpl.featnotsupp = Det finns inget st\u00F6d f\u00F6r denna funktion
-
-# WebRowSetImpl exceptions
-webrowsetimpl.nullhash = Kan inte instansiera WebRowSetImpl. Null-hashtabell skickades till konstruktor.
-webrowsetimpl.invalidwr = Ogiltig f\u00F6rfattare
-webrowsetimpl.invalidrd = Ogiltig l\u00E4sare
-
-#FilteredRowSetImpl exceptions
-filteredrowsetimpl.relative = relative: Ogiltig mark\u00F6r\u00E5tg\u00E4rd 
-filteredrowsetimpl.absolute = absolute: Ogiltig mark\u00F6r\u00E5tg\u00E4rd
-filteredrowsetimpl.notallowed = Detta v\u00E4rde kommer att filtreras bort
-
-#JoinRowSetImpl exceptions
-joinrowsetimpl.notinstance = Detta \u00E4r inte en instans av radupps\u00E4ttning
-joinrowsetimpl.matchnotset = Matchningskolumnen \u00E4r inte inst\u00E4lld p\u00E5 koppling
-joinrowsetimpl.numnotequal = Antal objekt i radupps\u00E4ttning st\u00E4mmer inte med matchningskolumnens
-joinrowsetimpl.notdefined = Detta \u00E4r inte n\u00E5gon definierad kopplingstyp
-joinrowsetimpl.notsupported = Det finns inget st\u00F6d f\u00F6r denna kopplingstyp
-joinrowsetimpl.initerror = Initieringsfel f\u00F6r JoinRowSet
-joinrowsetimpl.genericerr = Allm\u00E4nt initieringsfel f\u00F6r JoinRowSet
-joinrowsetimpl.emptyrowset = Tomma radupps\u00E4ttningar kan inte l\u00E4ggas till i denna JoinRowSet
-
-#JdbcRowSetImpl exceptions
-jdbcrowsetimpl.invalstate = Ogiltig status
-jdbcrowsetimpl.connect = JdbcRowSet (anslut) JNDI kan inte anslutas
-jdbcrowsetimpl.paramtype = Kan inte h\u00E4rleda parametertypen
-jdbcrowsetimpl.matchcols = Matchningskolumnerna \u00E4r inte samma som de som st\u00E4llts in
-jdbcrowsetimpl.setmatchcols = St\u00E4ll in matchningskolumnerna innan du h\u00E4mtar dem
-jdbcrowsetimpl.matchcols1 = Matchningskolumnerna m\u00E5ste vara st\u00F6rre \u00E4n 0
-jdbcrowsetimpl.matchcols2 = Matchningskolumnerna kan inte vara en null-str\u00E4ng eller tomma
-jdbcrowsetimpl.unsetmatch = Kolumnerna som \u00E5terst\u00E4lls \u00E4r inte samma som de som st\u00E4llts in
-jdbcrowsetimpl.usecolname = Anv\u00E4nd kolumnnamn som argument f\u00F6r unsetMatchColumn
-jdbcrowsetimpl.usecolid = Anv\u00E4nd kolumn-id som argument f\u00F6r unsetMatchColumn
-jdbcrowsetimpl.resnotupd = ResultSet \u00E4r inte uppdateringsbart
-jdbcrowsetimpl.opnotysupp = Det finns \u00E4nnu inget st\u00F6d f\u00F6r denna \u00E5tg\u00E4rd
-jdbcrowsetimpl.featnotsupp = Det finns inget st\u00F6d f\u00F6r denna funktion
-
-#CachedRowSetReader exceptions
-crsreader.connect = (JNDI) kan inte anslutas
-crsreader.paramtype = Kan inte h\u00E4rleda parametertypen
-crsreader.connecterr = Internt fel i RowSetReader: ingen anslutning eller inget kommando
-crsreader.datedetected = Ett datum har identifierats
-crsreader.caldetected = En kalender har identifierats
-
-#CachedRowSetWriter exceptions
-crswriter.connect = Kan inte uppr\u00E4tta n\u00E5gon anslutning
-crswriter.tname = writeData kan inte fastst\u00E4lla tabellnamnet
-crswriter.params1 = Parameterv\u00E4rde1: {0} 
-crswriter.params2 = Parameterv\u00E4rde2: {0} 
-crswriter.conflictsno =  orsakar konflikt vid synkronisering 
-
-#InsertRow exceptions
-insertrow.novalue = Inget v\u00E4rde har infogats
-
-#SyncResolverImpl exceptions
-syncrsimpl.indexval = Indexv\u00E4rdet ligger utanf\u00F6r intervallet  
-syncrsimpl.noconflict = Kolumnen orsakar ingen konflikt
-syncrsimpl.syncnotpos = Synkronisering \u00E4r inte m\u00F6jlig
-syncrsimpl.valtores = V\u00E4rdet som ska fastst\u00E4llas kan antingen finnas i databasen eller i cachedrowset
-
-#WebRowSetXmlReader exception
-wrsxmlreader.invalidcp = Slutet p\u00E5 RowSet har n\u00E5tts. Mark\u00F6rpositionen \u00E4r ogiltig.
-wrsxmlreader.readxml = readXML: {0}
-wrsxmlreader.parseerr = ** Tolkningsfel: {0}, rad: {1}, URI: {2}
-
-#WebRowSetXmlWriter exceptions
-wrsxmlwriter.ioex = IOException: {0}
-wrsxmlwriter.sqlex = SQLException: {0}
-wrsxmlwriter.failedwrite = Kunde inte skriva v\u00E4rdet
-wsrxmlwriter.notproper = Ingen riktig typ
-
-#XmlReaderContentHandler exceptions
-xmlrch.errmap = Fel uppstod vid inst\u00E4llning av mappning: {0}
-xmlrch.errmetadata = Fel uppstod vid inst\u00E4llning av metadata: {0}
-xmlrch.errinsertval = Fel uppstod vid infogning av v\u00E4rden: {0}
-xmlrch.errconstr = Fel uppstod vid konstruktion av rad: {0}
-xmlrch.errdel = Fel uppstod vid borttagning av rad: {0}
-xmlrch.errinsert = Fel uppstod vid konstruktion av infogad rad: {0}
-xmlrch.errinsdel = Fel uppstod vid konstruktion av insdel-rad: {0}
-xmlrch.errupdate = Fel uppstod vid konstruktion av uppdateringsrad: {0}
-xmlrch.errupdrow = Fel uppstod vid uppdatering av rad: {0}
-xmlrch.chars = tecken:
-xmlrch.badvalue = Felaktigt v\u00E4rde; egenskapen kan inte ha ett tomt v\u00E4rde
-xmlrch.badvalue1 = Felaktigt v\u00E4rde; metadatan kan inte ha ett tomt v\u00E4rde
-xmlrch.warning =  ** Varning! {0}, rad: {1}, URI: {2}
-
-#RIOptimisticProvider Exceptions
-riop.locking = Det finns inte st\u00F6d f\u00F6r denna l\u00E5sningsklassificering
-
-#RIXMLProvider exceptions
-rixml.unsupp = RIXMLProvider har inte st\u00F6d f\u00F6r detta
diff --git a/ojluni/src/main/java/com/sun/rowset/RowSetResourceBundle_zh_CN.properties b/ojluni/src/main/java/com/sun/rowset/RowSetResourceBundle_zh_CN.properties
deleted file mode 100755
index 29d1823..0000000
--- a/ojluni/src/main/java/com/sun/rowset/RowSetResourceBundle_zh_CN.properties
+++ /dev/null
@@ -1,170 +0,0 @@
-#
-# Copyright (c) 2005, 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
-# 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.
-#
-
-# CacheRowSetImpl exceptions
-cachedrowsetimpl.populate = \u63D0\u4F9B\u7ED9\u586B\u5145\u65B9\u6CD5\u7684 ResultSet \u5BF9\u8C61\u65E0\u6548
-cachedrowsetimpl.invalidp = \u751F\u6210\u7684\u6301\u4E45\u6027\u63D0\u4F9B\u65B9\u65E0\u6548
-cachedrowsetimpl.nullhash = \u65E0\u6CD5\u5B9E\u4F8B\u5316 CachedRowSetImpl \u5B9E\u4F8B\u3002\u63D0\u4F9B\u7ED9\u6784\u9020\u5668\u7684 Hashtable \u4E3A\u7A7A\u503C
-cachedrowsetimpl.invalidop = \u5BF9\u63D2\u5165\u884C\u6267\u884C\u7684\u64CD\u4F5C\u65E0\u6548
-cachedrowsetimpl.accfailed = acceptChanges \u5931\u8D25
-cachedrowsetimpl.invalidcp = \u5149\u6807\u4F4D\u7F6E\u65E0\u6548
-cachedrowsetimpl.illegalop = \u5BF9\u975E\u63D2\u5165\u884C\u6267\u884C\u7684\u64CD\u4F5C\u975E\u6CD5
-cachedrowsetimpl.clonefail = \u514B\u9686\u5931\u8D25: {0}
-cachedrowsetimpl.invalidcol = \u5217\u7D22\u5F15\u65E0\u6548
-cachedrowsetimpl.invalcolnm = \u5217\u540D\u65E0\u6548
-cachedrowsetimpl.boolfail = \u5BF9\u5217 {1} \u4E2D\u7684\u503C ({0}) \u6267\u884C getBoolen \u5931\u8D25
-cachedrowsetimpl.bytefail = \u5BF9\u5217 {1} \u4E2D\u7684\u503C ({0}) \u6267\u884C getByte \u5931\u8D25
-cachedrowsetimpl.shortfail = \u5BF9\u5217 {1} \u4E2D\u7684\u503C ({0}) \u6267\u884C getShort \u5931\u8D25
-cachedrowsetimpl.intfail = \u5BF9\u5217 {1} \u4E2D\u7684\u503C ({0}) \u6267\u884C getInt \u5931\u8D25
-cachedrowsetimpl.longfail = \u5BF9\u5217 {1} \u4E2D\u7684\u503C ({0}) \u6267\u884C getLong \u5931\u8D25
-cachedrowsetimpl.floatfail = \u5BF9\u5217 {1} \u4E2D\u7684\u503C ({0}) \u6267\u884C getFloat \u5931\u8D25
-cachedrowsetimpl.doublefail = \u5BF9\u5217 {1} \u4E2D\u7684\u503C ({0}) \u6267\u884C getDouble \u5931\u8D25
-cachedrowsetimpl.dtypemismt = \u6570\u636E\u7C7B\u578B\u4E0D\u5339\u914D 
-cachedrowsetimpl.datefail = \u5BF9\u5217 {1} \u4E2D\u7684\u503C ({0}) \u6267\u884C getDate \u5931\u8D25, \u65E0\u53EF\u7528\u8F6C\u6362
-cachedrowsetimpl.timefail = \u5BF9\u5217 {1} \u4E2D\u7684\u503C ({0}) \u6267\u884C getTime \u5931\u8D25, \u65E0\u53EF\u7528\u8F6C\u6362
-cachedrowsetimpl.posupdate = \u4E0D\u652F\u6301\u5B9A\u4F4D\u66F4\u65B0
-cachedrowsetimpl.unableins = \u65E0\u6CD5\u5B9E\u4F8B\u5316: {0}
-cachedrowsetimpl.beforefirst = beforeFirst: \u5149\u6807\u64CD\u4F5C\u65E0\u6548
-cachedrowsetimpl.first = First: \u5149\u6807\u64CD\u4F5C\u65E0\u6548
-cachedrowsetimpl.last = last: TYPE_FORWARD_ONLY
-cachedrowsetimpl.absolute = absolute: \u5149\u6807\u4F4D\u7F6E\u65E0\u6548
-cachedrowsetimpl.relative = relative: \u5149\u6807\u4F4D\u7F6E\u65E0\u6548
-cachedrowsetimpl.asciistream = \u672A\u80FD\u8BFB\u53D6 ASCII \u6D41
-cachedrowsetimpl.binstream = \u672A\u80FD\u8BFB\u53D6\u4E8C\u8FDB\u5236\u6D41
-cachedrowsetimpl.failedins = \u5BF9\u63D2\u5165\u884C\u6267\u884C\u64CD\u4F5C\u5931\u8D25
-cachedrowsetimpl.updateins = \u4E3A\u63D2\u5165\u884C\u8C03\u7528 updateRow
-cachedrowsetimpl.movetoins = moveToInsertRow: CONCUR_READ_ONLY
-cachedrowsetimpl.movetoins1 = moveToInsertRow: \u65E0\u5143\u6570\u636E
-cachedrowsetimpl.movetoins2 = moveToInsertRow: \u5217\u6570\u65E0\u6548
-cachedrowsetimpl.tablename = \u8868\u540D\u4E0D\u80FD\u4E3A\u7A7A\u503C
-cachedrowsetimpl.keycols = \u5173\u952E\u5B57\u5217\u65E0\u6548
-cachedrowsetimpl.invalidcol = \u5217\u7D22\u5F15\u65E0\u6548
-cachedrowsetimpl.opnotsupp = \u64CD\u4F5C\u4E0D\u53D7\u6570\u636E\u5E93\u652F\u6301
-cachedrowsetimpl.matchcols = \u5339\u914D\u5217\u4E0E\u8BBE\u7F6E\u7684\u90A3\u4E9B\u5339\u914D\u5217\u4E0D\u540C
-cachedrowsetimpl.setmatchcols = \u5728\u83B7\u53D6\u5339\u914D\u5217\u4E4B\u524D\u5148\u8BBE\u7F6E\u5339\u914D\u5217
-cachedrowsetimpl.matchcols1 = \u5339\u914D\u5217\u6570\u5E94\u5F53\u5927\u4E8E 0
-cachedrowsetimpl.matchcols2 = \u5339\u914D\u5217\u6570\u5E94\u5F53\u4E3A\u7A7A\u6216\u7A7A\u503C\u5B57\u7B26\u4E32
-cachedrowsetimpl.unsetmatch = \u8981\u53D6\u6D88\u8BBE\u7F6E\u7684\u5217\u4E0E\u8BBE\u7F6E\u7684\u5217\u4E0D\u540C
-cachedrowsetimpl.unsetmatch1 = \u4F7F\u7528\u5217\u540D\u4F5C\u4E3A unsetMatchColumn \u7684\u53C2\u6570
-cachedrowsetimpl.unsetmatch2 = \u4F7F\u7528\u5217 ID \u4F5C\u4E3A unsetMatchColumn \u7684\u53C2\u6570
-cachedrowsetimpl.numrows = \u884C\u6570\u5C0F\u4E8E\u96F6\u6216\u5C0F\u4E8E\u8981\u63D0\u53D6\u7684\u884C\u6570
-cachedrowsetimpl.startpos = \u8D77\u59CB\u4F4D\u7F6E\u4E0D\u80FD\u4E3A\u8D1F\u6570
-cachedrowsetimpl.nextpage = \u5728\u8C03\u7528\u4E4B\u524D\u5148\u586B\u5145\u6570\u636E 
-cachedrowsetimpl.pagesize = \u9875\u9762\u5927\u5C0F\u4E0D\u80FD\u5C0F\u4E8E\u96F6
-cachedrowsetimpl.pagesize1 = \u9875\u9762\u5927\u5C0F\u4E0D\u80FD\u5927\u4E8E maxRows
-cachedrowsetimpl.fwdonly = ResultSet \u7684\u7C7B\u578B\u4E3A\u4EC5\u5411\u524D\u7C7B\u578B
-cachedrowsetimpl.type = \u7C7B\u578B\u4E3A: {0}
-cachedrowsetimpl.opnotysupp = \u5C1A\u4E0D\u652F\u6301\u8BE5\u64CD\u4F5C
-cachedrowsetimpl.featnotsupp = \u5C1A\u4E0D\u652F\u6301\u8BE5\u529F\u80FD
-
-# WebRowSetImpl exceptions
-webrowsetimpl.nullhash = \u65E0\u6CD5\u5B9E\u4F8B\u5316 WebRowSetImpl \u5B9E\u4F8B\u3002\u63D0\u4F9B\u7ED9\u6784\u9020\u5668\u7684 Hashtable \u4E3A\u7A7A\u503C
-webrowsetimpl.invalidwr = \u5199\u8FDB\u7A0B\u65E0\u6548
-webrowsetimpl.invalidrd = \u8BFB\u8FDB\u7A0B\u65E0\u6548
-
-#FilteredRowSetImpl exceptions
-filteredrowsetimpl.relative = relative: \u5149\u6807\u64CD\u4F5C\u65E0\u6548 
-filteredrowsetimpl.absolute = absolute: \u5149\u6807\u64CD\u4F5C\u65E0\u6548
-filteredrowsetimpl.notallowed = \u4E0D\u5141\u8BB8\u6B64\u503C\u901A\u8FC7\u7B5B\u9009\u5668
-
-#JoinRowSetImpl exceptions
-joinrowsetimpl.notinstance = \u4E0D\u662F RowSet \u7684\u5B9E\u4F8B
-joinrowsetimpl.matchnotset = \u672A\u8BBE\u7F6E\u5339\u914D\u5217\u4EE5\u8FDB\u884C\u8054\u63A5
-joinrowsetimpl.numnotequal = RowSet \u4E2D\u7684\u5143\u7D20\u4E2A\u6570\u4E0D\u7B49\u4E8E\u5339\u914D\u5217\u6570
-joinrowsetimpl.notdefined = \u8FD9\u4E0D\u662F\u5B9A\u4E49\u7684\u8054\u63A5\u7C7B\u578B
-joinrowsetimpl.notsupported = \u4E0D\u652F\u6301\u6B64\u8054\u63A5\u7C7B\u578B
-joinrowsetimpl.initerror = JoinRowSet \u521D\u59CB\u5316\u9519\u8BEF
-joinrowsetimpl.genericerr = \u4E00\u822C JoinRowSet \u521D\u59CB\u5316\u9519\u8BEF
-joinrowsetimpl.emptyrowset = \u65E0\u6CD5\u5C06\u7A7A RowSet \u6DFB\u52A0\u5230\u6B64 JoinRowSet
-
-#JdbcRowSetImpl exceptions
-jdbcrowsetimpl.invalstate = \u72B6\u6001\u65E0\u6548
-jdbcrowsetimpl.connect = JdbcRowSet (\u8FDE\u63A5) JNDI \u65E0\u6CD5\u8FDE\u63A5
-jdbcrowsetimpl.paramtype = \u65E0\u6CD5\u63A8\u65AD\u53C2\u6570\u7C7B\u578B
-jdbcrowsetimpl.matchcols = \u5339\u914D\u5217\u4E0E\u8BBE\u7F6E\u7684\u90A3\u4E9B\u5339\u914D\u5217\u4E0D\u540C
-jdbcrowsetimpl.setmatchcols = \u5728\u83B7\u53D6\u5339\u914D\u5217\u4E4B\u524D\u5148\u8BBE\u7F6E\u5339\u914D\u5217
-jdbcrowsetimpl.matchcols1 = \u5339\u914D\u5217\u6570\u5E94\u5F53\u5927\u4E8E 0
-jdbcrowsetimpl.matchcols2 = \u5339\u914D\u5217\u4E0D\u80FD\u4E3A\u7A7A\u503C\u6216\u7A7A\u5B57\u7B26\u4E32
-jdbcrowsetimpl.unsetmatch = \u8981\u53D6\u6D88\u8BBE\u7F6E\u7684\u5217\u4E0E\u8BBE\u7F6E\u7684\u5217\u4E0D\u540C
-jdbcrowsetimpl.usecolname = \u4F7F\u7528\u5217\u540D\u4F5C\u4E3A unsetMatchColumn \u7684\u53C2\u6570
-jdbcrowsetimpl.usecolid = \u4F7F\u7528\u5217 ID \u4F5C\u4E3A unsetMatchColumn \u7684\u53C2\u6570
-jdbcrowsetimpl.resnotupd = ResultSet \u4E0D\u53EF\u66F4\u65B0
-jdbcrowsetimpl.opnotysupp = \u5C1A\u4E0D\u652F\u6301\u8BE5\u64CD\u4F5C
-jdbcrowsetimpl.featnotsupp = \u5C1A\u4E0D\u652F\u6301\u8BE5\u529F\u80FD
-
-#CachedRowSetReader exceptions
-crsreader.connect = (JNDI) \u65E0\u6CD5\u8FDE\u63A5
-crsreader.paramtype = \u65E0\u6CD5\u63A8\u65AD\u53C2\u6570\u7C7B\u578B
-crsreader.connecterr = RowSetReader \u4E2D\u51FA\u73B0\u5185\u90E8\u9519\u8BEF: \u65E0\u8FDE\u63A5\u6216\u547D\u4EE4
-crsreader.datedetected = \u68C0\u6D4B\u5230\u65E5\u671F
-crsreader.caldetected = \u68C0\u6D4B\u5230\u65E5\u5386
-
-#CachedRowSetWriter exceptions
-crswriter.connect = \u65E0\u6CD5\u83B7\u53D6\u8FDE\u63A5
-crswriter.tname = writeData \u65E0\u6CD5\u786E\u5B9A\u8868\u540D
-crswriter.params1 = params1 \u7684\u503C: {0} 
-crswriter.params2 = params2 \u7684\u503C: {0} 
-crswriter.conflictsno =  \u540C\u6B65\u65F6\u53D1\u751F\u51B2\u7A81 
-
-#InsertRow exceptions
-insertrow.novalue = \u5C1A\u672A\u63D2\u5165\u4EFB\u4F55\u503C
-
-#SyncResolverImpl exceptions
-syncrsimpl.indexval = \u7D22\u5F15\u503C\u8D85\u51FA\u8303\u56F4  
-syncrsimpl.noconflict = \u6B64\u5217\u4E0D\u51B2\u7A81
-syncrsimpl.syncnotpos = \u4E0D\u80FD\u540C\u6B65
-syncrsimpl.valtores = \u8981\u89E3\u6790\u7684\u503C\u53EF\u4EE5\u5728\u6570\u636E\u5E93\u4E2D, \u4E5F\u53EF\u4EE5\u5728 CachedRowSet \u4E2D
-
-#WebRowSetXmlReader exception
-wrsxmlreader.invalidcp = \u5DF2\u5230\u8FBE RowSet \u7684\u7ED3\u5C3E\u3002\u5149\u6807\u4F4D\u7F6E\u65E0\u6548
-wrsxmlreader.readxml = readXML: {0}
-wrsxmlreader.parseerr = ** \u89E3\u6790\u9519\u8BEF: {0}, \u884C: {1}, URI: {2}
-
-#WebRowSetXmlWriter exceptions
-wrsxmlwriter.ioex = IOException: {0}
-wrsxmlwriter.sqlex = SQLException: {0}
-wrsxmlwriter.failedwrite = \u65E0\u6CD5\u5199\u5165\u503C
-wsrxmlwriter.notproper = \u7C7B\u578B\u4E0D\u6B63\u786E
-
-#XmlReaderContentHandler exceptions
-xmlrch.errmap = \u8BBE\u7F6E\u6620\u5C04\u65F6\u51FA\u9519: {0}
-xmlrch.errmetadata = \u8BBE\u7F6E\u5143\u6570\u636E\u65F6\u51FA\u9519: {0}
-xmlrch.errinsertval = \u63D2\u5165\u503C\u65F6\u51FA\u9519: {0}
-xmlrch.errconstr = \u6784\u9020\u884C\u65F6\u51FA\u9519: {0}
-xmlrch.errdel = \u5220\u9664\u884C\u65F6\u51FA\u9519: {0}
-xmlrch.errinsert = \u6784\u9020\u63D2\u5165\u884C\u65F6\u51FA\u9519: {0}
-xmlrch.errinsdel = \u6784\u9020 insdel \u884C\u65F6\u51FA\u9519: {0}
-xmlrch.errupdate = \u6784\u9020\u66F4\u65B0\u884C\u65F6\u51FA\u9519: {0}
-xmlrch.errupdrow = \u66F4\u65B0\u884C\u65F6\u51FA\u9519: {0}
-xmlrch.chars = \u5B57\u7B26:
-xmlrch.badvalue = \u503C\u9519\u8BEF; \u5C5E\u6027\u4E0D\u53EF\u4E3A\u7A7A\u503C
-xmlrch.badvalue1 = \u503C\u9519\u8BEF; \u5143\u6570\u636E\u4E0D\u53EF\u4E3A\u7A7A\u503C
-xmlrch.warning =  ** \u8B66\u544A: {0}, \u884C: {1}, URI: {2}
-
-#RIOptimisticProvider Exceptions
-riop.locking = \u4E0D\u652F\u6301\u9501\u5B9A\u5206\u7C7B
-
-#RIXMLProvider exceptions
-rixml.unsupp = \u4E0D\u652F\u6301 RIXMLProvider
diff --git a/ojluni/src/main/java/com/sun/rowset/RowSetResourceBundle_zh_TW.properties b/ojluni/src/main/java/com/sun/rowset/RowSetResourceBundle_zh_TW.properties
deleted file mode 100755
index 5ed2f8c..0000000
--- a/ojluni/src/main/java/com/sun/rowset/RowSetResourceBundle_zh_TW.properties
+++ /dev/null
@@ -1,170 +0,0 @@
-#
-# Copyright (c) 2005, 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
-# 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.
-#
-
-# CacheRowSetImpl exceptions
-cachedrowsetimpl.populate = \u70BA\u690D\u5165\u65B9\u6CD5\u63D0\u4F9B\u7684 ResultSet \u7269\u4EF6\u7121\u6548
-cachedrowsetimpl.invalidp = \u7522\u751F\u7684\u6301\u7E8C\u6027\u63D0\u4F9B\u8005\u7121\u6548
-cachedrowsetimpl.nullhash = \u7121\u6CD5\u5EFA\u7ACB CachedRowSetImpl \u57F7\u884C\u8655\u7406\u3002\u70BA\u5EFA\u69CB\u5B50\u63D0\u4F9B\u7684 Hashtable \u70BA\u7A7A\u503C
-cachedrowsetimpl.invalidop = \u63D2\u5165\u5217\u6642\u7684\u4F5C\u696D\u7121\u6548
-cachedrowsetimpl.accfailed = acceptChanges \u5931\u6557
-cachedrowsetimpl.invalidcp = \u6E38\u6A19\u4F4D\u7F6E\u7121\u6548
-cachedrowsetimpl.illegalop = \u975E\u63D2\u5165\u5217\u4E0A\u5B58\u5728\u7121\u6548\u4F5C\u696D
-cachedrowsetimpl.clonefail = \u8907\u88FD\u5931\u6557: {0}
-cachedrowsetimpl.invalidcol = \u6B04\u7D22\u5F15\u7121\u6548
-cachedrowsetimpl.invalcolnm = \u6B04\u540D\u7121\u6548
-cachedrowsetimpl.boolfail = \u5C0D\u6B04 {1} \u4E2D\u7684\u503C ( {0} ) \u57F7\u884C getBoolen \u5931\u6557
-cachedrowsetimpl.bytefail = \u5C0D\u6B04 {1} \u4E2D\u7684\u503C ( {0} ) \u57F7\u884C getByte \u5931\u6557
-cachedrowsetimpl.shortfail = \u5C0D\u6B04 {1} \u4E2D\u7684\u503C ( {0} ) \u57F7\u884C getShort \u5931\u6557
-cachedrowsetimpl.intfail = \u5C0D\u6B04 {1} \u4E2D\u7684\u503C ( {0} ) \u57F7\u884C getInt \u5931\u6557
-cachedrowsetimpl.longfail = \u5C0D\u6B04 {1} \u4E2D\u7684\u503C ( {0} ) \u57F7\u884C getLong \u5931\u6557
-cachedrowsetimpl.floatfail = \u5C0D\u6B04 {1} \u4E2D\u7684\u503C ( {0} ) \u57F7\u884C getFloat \u5931\u6557
-cachedrowsetimpl.doublefail = \u5C0D\u6B04 {1} \u4E2D\u7684\u503C ( {0} ) \u57F7\u884C getDouble \u5931\u6557
-cachedrowsetimpl.dtypemismt = \u8CC7\u6599\u985E\u578B\u4E0D\u76F8\u7B26
-cachedrowsetimpl.datefail = \u5C0D\u6B04 {1} \u4E2D\u7684\u503C ( {0} ) \u57F7\u884C getDate \u5931\u6557\uFF0C\u672A\u9032\u884C\u8F49\u63DB
-cachedrowsetimpl.timefail = \u5C0D\u6B04 {1} \u4E2D\u7684\u503C ( {0} ) \u57F7\u884C getTime \u5931\u6557\uFF0C\u672A\u9032\u884C\u8F49\u63DB
-cachedrowsetimpl.posupdate = \u4E0D\u652F\u63F4\u5B9A\u4F4D\u7684\u66F4\u65B0
-cachedrowsetimpl.unableins = \u7121\u6CD5\u5EFA\u7ACB: {0}
-cachedrowsetimpl.beforefirst = beforeFirst: \u6E38\u6A19\u4F5C\u696D\u7121\u6548
-cachedrowsetimpl.first = First: \u6E38\u6A19\u4F5C\u696D\u7121\u6548
-cachedrowsetimpl.last = last : TYPE_FORWARD_ONLY
-cachedrowsetimpl.absolute = absolute: \u6E38\u6A19\u4F4D\u7F6E\u7121\u6548
-cachedrowsetimpl.relative = relative: \u6E38\u6A19\u4F4D\u7F6E\u7121\u6548
-cachedrowsetimpl.asciistream = \u8B80\u53D6 ascii \u4E32\u6D41\u5931\u6557
-cachedrowsetimpl.binstream = \u8B80\u53D6\u4E8C\u9032\u4F4D\u4E32\u6D41\u5931\u6557
-cachedrowsetimpl.failedins = \u63D2\u5165\u5217\u5931\u6557
-cachedrowsetimpl.updateins = \u63D2\u5165\u5217\u6642\u547C\u53EB updateRow
-cachedrowsetimpl.movetoins = moveToInsertRow: CONCUR_READ_ONLY
-cachedrowsetimpl.movetoins1 = moveToInsertRow: \u6C92\u6709\u63CF\u8FF0\u8CC7\u6599
-cachedrowsetimpl.movetoins2 = moveToInsertRow: \u6B04\u6578\u7121\u6548
-cachedrowsetimpl.tablename = \u8868\u683C\u540D\u7A31\u4E0D\u80FD\u70BA\u7A7A\u503C
-cachedrowsetimpl.keycols = \u95DC\u9375\u6B04\u7121\u6548
-cachedrowsetimpl.invalidcol = \u6B04\u7D22\u5F15\u7121\u6548
-cachedrowsetimpl.opnotsupp = \u8CC7\u6599\u5EAB\u4E0D\u652F\u63F4\u4F5C\u696D
-cachedrowsetimpl.matchcols = \u5339\u914D\u6B04\u548C\u8A2D\u5B9A\u7684\u6B04\u4E0D\u540C
-cachedrowsetimpl.setmatchcols = \u5728\u53D6\u5F97\u5339\u914D\u6B04\u4E4B\u524D\u8A2D\u5B9A\u5B83\u5011
-cachedrowsetimpl.matchcols1 = \u5339\u914D\u6B04\u61C9\u5927\u65BC 0
-cachedrowsetimpl.matchcols2 = \u5339\u914D\u6B04\u61C9\u70BA\u7A7A\u767D\u5B57\u4E32\u6216\u7A7A\u503C\u5B57\u4E32
-cachedrowsetimpl.unsetmatch = \u53D6\u6D88\u8A2D\u5B9A\u7684\u6B04\u548C\u8A2D\u5B9A\u7684\u6B04\u4E0D\u540C
-cachedrowsetimpl.unsetmatch1 = \u4F7F\u7528\u6B04\u540D\u4F5C\u70BA unsetMatchColumn \u7684\u5F15\u6578
-cachedrowsetimpl.unsetmatch2 = \u4F7F\u7528\u6B04 ID \u4F5C\u70BA unsetMatchColumn \u7684\u5F15\u6578
-cachedrowsetimpl.numrows = \u5217\u6578\u5C0F\u65BC\u96F6\u6216\u5C0F\u65BC\u64F7\u53D6\u5927\u5C0F
-cachedrowsetimpl.startpos = \u8D77\u59CB\u4F4D\u7F6E\u4E0D\u80FD\u70BA\u8CA0\u6578
-cachedrowsetimpl.nextpage = \u5728\u547C\u53EB\u4E4B\u524D\u690D\u5165\u8CC7\u6599 
-cachedrowsetimpl.pagesize = \u9801\u9762\u5927\u5C0F\u4E0D\u80FD\u5C0F\u65BC\u96F6
-cachedrowsetimpl.pagesize1 = \u9801\u9762\u5927\u5C0F\u4E0D\u80FD\u5927\u65BC maxRows
-cachedrowsetimpl.fwdonly = ResultSet \u53EA\u80FD\u5411\u524D\u9032\u884C
-cachedrowsetimpl.type = \u985E\u578B\u662F: {0}
-cachedrowsetimpl.opnotysupp = \u5C1A\u4E0D\u652F\u63F4\u8A72\u4F5C\u696D
-cachedrowsetimpl.featnotsupp = \u4E0D\u652F\u63F4\u8A72\u529F\u80FD
-
-# WebRowSetImpl exceptions
-webrowsetimpl.nullhash = \u7121\u6CD5\u5EFA\u7ACB WebRowSetImpl \u57F7\u884C\u8655\u7406\u3002\u70BA\u5EFA\u69CB\u5B50\u63D0\u4F9B\u7684 Hashtable \u70BA\u7A7A\u503C
-webrowsetimpl.invalidwr = \u5BEB\u5165\u5668\u7121\u6548
-webrowsetimpl.invalidrd = \u8B80\u53D6\u5668\u7121\u6548
-
-#FilteredRowSetImpl exceptions
-filteredrowsetimpl.relative = relative: \u6E38\u6A19\u4F5C\u696D\u7121\u6548 
-filteredrowsetimpl.absolute = absolute: \u6E38\u6A19\u4F5C\u696D\u7121\u6548
-filteredrowsetimpl.notallowed = \u4E0D\u5141\u8A31\u6B64\u503C\u901A\u904E\u7BE9\u9078
-
-#JoinRowSetImpl exceptions
-joinrowsetimpl.notinstance = \u4E0D\u662F rowset \u7684\u57F7\u884C\u8655\u7406
-joinrowsetimpl.matchnotset = \u672A\u8A2D\u5B9A\u7528\u65BC\u9023\u7D50\u7684\u5339\u914D\u6B04
-joinrowsetimpl.numnotequal = rowset \u4E2D\u7684\u5143\u7D20\u6578\u4E0D\u7B49\u65BC\u5339\u914D\u6B04
-joinrowsetimpl.notdefined = \u9019\u4E0D\u662F\u9023\u7D50\u7684\u5DF2\u5B9A\u7FA9\u985E\u578B
-joinrowsetimpl.notsupported = \u4E0D\u652F\u63F4\u6B64\u985E\u9023\u7D50
-joinrowsetimpl.initerror = JoinRowSet \u521D\u59CB\u5316\u932F\u8AA4
-joinrowsetimpl.genericerr = \u4E00\u822C\u7684 joinrowset \u521D\u59CB\u5316\u932F\u8AA4
-joinrowsetimpl.emptyrowset = \u7121\u6CD5\u5C07\u7A7A rowset \u65B0\u589E\u81F3\u6B64 JoinRowSet
-
-#JdbcRowSetImpl exceptions
-jdbcrowsetimpl.invalstate = \u72C0\u614B\u7121\u6548
-jdbcrowsetimpl.connect = JdbcRowSet (\u9023\u7DDA) JNDI \u7121\u6CD5\u9023\u7DDA
-jdbcrowsetimpl.paramtype = \u7121\u6CD5\u63A8\u65B7\u53C3\u6578\u985E\u578B
-jdbcrowsetimpl.matchcols = \u5339\u914D\u6B04\u548C\u8A2D\u5B9A\u7684\u6B04\u4E0D\u540C
-jdbcrowsetimpl.setmatchcols = \u8981\u5148\u8A2D\u5B9A\u5339\u914D\u6B04\uFF0C\u624D\u80FD\u53D6\u5F97\u5B83\u5011
-jdbcrowsetimpl.matchcols1 = \u5339\u914D\u6B04\u61C9\u5927\u65BC 0
-jdbcrowsetimpl.matchcols2 = \u5339\u914D\u6B04\u4E0D\u80FD\u70BA\u7A7A\u767D\u5B57\u4E32\u6216\u7A7A\u503C\u5B57\u4E32
-jdbcrowsetimpl.unsetmatch = \u53D6\u6D88\u8A2D\u5B9A\u7684\u6B04\u548C\u8A2D\u5B9A\u7684\u6B04\u4E0D\u540C
-jdbcrowsetimpl.usecolname = \u4F7F\u7528\u6B04\u540D\u4F5C\u70BA unsetMatchColumn \u7684\u5F15\u6578
-jdbcrowsetimpl.usecolid = \u4F7F\u7528\u6B04 ID \u4F5C\u70BA unsetMatchColumn \u7684\u5F15\u6578
-jdbcrowsetimpl.resnotupd = ResultSet \u4E0D\u53EF\u66F4\u65B0
-jdbcrowsetimpl.opnotysupp = \u5C1A\u4E0D\u652F\u63F4\u8A72\u4F5C\u696D
-jdbcrowsetimpl.featnotsupp = \u4E0D\u652F\u63F4\u8A72\u529F\u80FD
-
-#CachedRowSetReader exceptions
-crsreader.connect = (JNDI) \u7121\u6CD5\u9023\u7DDA
-crsreader.paramtype = \u7121\u6CD5\u63A8\u65B7\u53C3\u6578\u985E\u578B
-crsreader.connecterr = RowSetReader \u4E2D\u51FA\u73FE\u5167\u90E8\u932F\u8AA4: \u7121\u9023\u7DDA\u6216\u547D\u4EE4
-crsreader.datedetected = \u5075\u6E2C\u5230\u65E5\u671F
-crsreader.caldetected = \u5075\u6E2C\u5230\u884C\u4E8B\u66C6
-
-#CachedRowSetWriter exceptions
-crswriter.connect = \u7121\u6CD5\u53D6\u5F97\u9023\u7DDA
-crswriter.tname = writeData \u4E0D\u80FD\u6C7A\u5B9A\u8868\u683C\u540D\u7A31
-crswriter.params1 = params1 \u7684\u503C: {0} 
-crswriter.params2 = params2 \u7684\u503C: {0} 
-crswriter.conflictsno =  \u540C\u6B65\u5316\u6642\u767C\u751F\u885D\u7A81 
-
-#InsertRow exceptions
-insertrow.novalue = \u5C1A\u672A\u63D2\u5165\u503C
-
-#SyncResolverImpl exceptions
-syncrsimpl.indexval = \u7D22\u5F15\u503C\u8D85\u51FA\u7BC4\u570D  
-syncrsimpl.noconflict = \u6B64\u6B04\u4E0D\u885D\u7A81
-syncrsimpl.syncnotpos = \u4E0D\u53EF\u80FD\u540C\u6B65\u5316
-syncrsimpl.valtores = \u8981\u89E3\u6790\u7684\u503C\u53EF\u4F4D\u65BC\u8CC7\u6599\u5EAB\u6216 cachedrowset \u4E2D
-
-#WebRowSetXmlReader exception
-wrsxmlreader.invalidcp = \u5DF2\u5230\u9054 RowSet \u7D50\u5C3E\u3002\u6E38\u6A19\u4F4D\u7F6E\u7121\u6548
-wrsxmlreader.readxml = readXML: {0}
-wrsxmlreader.parseerr = ** \u5256\u6790\u932F\u8AA4: {0}\uFF0C\u884C: {1}\uFF0Curi: {2}
-
-#WebRowSetXmlWriter exceptions
-wrsxmlwriter.ioex = IOException : {0}
-wrsxmlwriter.sqlex = SQLException : {0}
-wrsxmlwriter.failedwrite = \u5BEB\u5165\u503C\u5931\u6557
-wsrxmlwriter.notproper = \u4E0D\u662F\u6B63\u78BA\u985E\u578B
-
-#XmlReaderContentHandler exceptions
-xmlrch.errmap = \u8A2D\u5B9A\u5C0D\u6620\u6642\u767C\u751F\u932F\u8AA4: {0}
-xmlrch.errmetadata = \u8A2D\u5B9A\u63CF\u8FF0\u8CC7\u6599\u6642\u767C\u751F\u932F\u8AA4: {0}
-xmlrch.errinsertval = \u63D2\u5165\u503C\u6642\u767C\u751F\u932F\u8AA4: {0}
-xmlrch.errconstr = \u5EFA\u69CB\u5217\u6642\u767C\u751F\u932F\u8AA4: {0}
-xmlrch.errdel = \u522A\u9664\u5217\u6642\u767C\u751F\u932F\u8AA4: {0}
-xmlrch.errinsert = \u5EFA\u69CB\u63D2\u5165\u5217\u6642\u767C\u751F\u932F\u8AA4 : {0}
-xmlrch.errinsdel = \u5EFA\u69CB insdel \u5217\u6642\u767C\u751F\u932F\u8AA4: {0}
-xmlrch.errupdate = \u5EFA\u69CB\u66F4\u65B0\u5217\u6642\u767C\u751F\u932F\u8AA4: {0}
-xmlrch.errupdrow = \u66F4\u65B0\u5217\u6642\u767C\u751F\u932F\u8AA4: {0}
-xmlrch.chars = \u5B57\u5143: 
-xmlrch.badvalue = \u932F\u8AA4\u7684\u503C; \u5C6C\u6027\u4E0D\u80FD\u70BA\u7A7A\u503C
-xmlrch.badvalue1 = \u932F\u8AA4\u7684\u503C; \u63CF\u8FF0\u8CC7\u6599\u4E0D\u80FD\u70BA\u7A7A\u503C
-xmlrch.warning =  ** \u8B66\u544A: {0}\uFF0C\u884C: {1}\uFF0Curi: {2}
-
-#RIOptimisticProvider Exceptions
-riop.locking = \u4E0D\u652F\u63F4\u9396\u5B9A\u5206\u985E
-
-#RIXMLProvider exceptions
-rixml.unsupp = RIXMLProvider \u4E0D\u652F\u63F4
diff --git a/ojluni/src/main/java/com/sun/rowset/WebRowSetImpl.java b/ojluni/src/main/java/com/sun/rowset/WebRowSetImpl.java
deleted file mode 100755
index 5a62c78..0000000
--- a/ojluni/src/main/java/com/sun/rowset/WebRowSetImpl.java
+++ /dev/null
@@ -1,291 +0,0 @@
-/*
- * Copyright (c) 2003, 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
- * 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.rowset;
-
-import java.sql.*;
-import javax.sql.*;
-import java.io.*;
-import java.math.*;
-import java.util.*;
-import java.text.*;
-
-import org.xml.sax.*;
-
-import javax.sql.rowset.*;
-import javax.sql.rowset.spi.*;
-
-import com.sun.rowset.providers.*;
-import com.sun.rowset.internal.*;
-
-/**
- * The standard implementation of the <code>WebRowSet</code> interface. See the interface
- * defintion for full behaviour and implementation requirements.
- *
- * @author Jonathan Bruce, Amit Handa
- */
-public class WebRowSetImpl extends CachedRowSetImpl implements WebRowSet {
-
-    /**
-     * The <code>WebRowSetXmlReader</code> object that this
-     * <code>WebRowSet</code> object will call when the method
-     * <code>WebRowSet.readXml</code> is invoked.
-     */
-    private WebRowSetXmlReader xmlReader;
-
-    /**
-     * The <code>WebRowSetXmlWriter</code> object that this
-     * <code>WebRowSet</code> object will call when the method
-     * <code>WebRowSet.writeXml</code> is invoked.
-     */
-    private WebRowSetXmlWriter xmlWriter;
-
-    /* This stores the cursor position prior to calling the writeXML.
-     * This variable is used after the write to restore the position
-     * to the point where the writeXml was called.
-     */
-    private int curPosBfrWrite;
-
-    private SyncProvider provider;
-
-    /**
-     * Constructs a new <code>WebRowSet</code> object initialized with the
-     * default values for a <code>CachedRowSet</code> object instance. This
-     * provides the <code>RIOptimistic</code> provider to deliver
-     * synchronization capabilities to relational datastores and a default
-     * <code>WebRowSetXmlReader</code> object and a default
-     * <code>WebRowSetXmlWriter</code> object to enable XML output
-     * capabilities.
-     *
-     * @throws SQLException if an error occurs in configuring the default
-     * synchronization providers for relational and XML providers.
-     */
-    public WebRowSetImpl() throws SQLException {
-        super();
-
-        // %%%
-        // Needs to use to SPI  XmlReader,XmlWriters
-        //
-        xmlReader = new WebRowSetXmlReader();
-        xmlWriter = new WebRowSetXmlWriter();
-    }
-
-    /**
-     * Constructs a new <code>WebRowSet</code> object initialized with the the
-     * synchronization SPI provider properties as specified in the <code>Hashtable</code>. If
-     * this hashtable is empty or is <code>null</code> the default constructor is invoked.
-     *
-     * @throws SQLException if an error occurs in configuring the specified
-     * synchronization providers for the relational and XML providers; or
-     * if the Hashtanle is null
-     */
-    public WebRowSetImpl(Hashtable env) throws SQLException {
-
-        try {
-           resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle();
-        } catch(IOException ioe) {
-            throw new RuntimeException(ioe);
-        }
-
-        if ( env == null) {
-            throw new SQLException(resBundle.handleGetObject("webrowsetimpl.nullhash").toString());
-        }
-
-        String providerName =
-            (String)env.get(javax.sql.rowset.spi.SyncFactory.ROWSET_SYNC_PROVIDER);
-
-        // set the Reader, this maybe overridden latter
-        provider = (SyncProvider)SyncFactory.getInstance(providerName);
-
-        // xmlReader = provider.getRowSetReader();
-        // xmlWriter = provider.getRowSetWriter();
-    }
-
-   /**
-    * Populates this <code>WebRowSet</code> object with the
-    * data in the given <code>ResultSet</code> object and writes itself
-    * to the given <code>java.io.Writer</code> object in XML format.
-    * This includes the rowset's data,  properties, and metadata.
-    *
-    * @throws SQLException if an error occurs writing out the rowset
-    *          contents to XML
-    */
-    public void writeXml(ResultSet rs, java.io.Writer writer)
-        throws SQLException {
-            // WebRowSetImpl wrs = new WebRowSetImpl();
-            this.populate(rs);
-
-            // Store the cursor position before writing
-            curPosBfrWrite = this.getRow();
-
-            this.writeXml(writer);
-    }
-
-    /**
-     * Writes this <code>WebRowSet</code> object to the given
-     * <code>java.io.Writer</code> object in XML format. This
-     * includes the rowset's data,  properties, and metadata.
-     *
-     * @throws SQLException if an error occurs writing out the rowset
-     *          contents to XML
-     */
-    public void writeXml(java.io.Writer writer) throws SQLException {
-        // %%%
-        // This will change to a XmlReader, which over-rides the default
-        // Xml that is used when a WRS is instantiated.
-        // WebRowSetXmlWriter xmlWriter = getXmlWriter();
-        if (xmlWriter != null) {
-
-            // Store the cursor position before writing
-            curPosBfrWrite = this.getRow();
-
-            xmlWriter.writeXML(this, writer);
-        } else {
-            throw new SQLException(resBundle.handleGetObject("webrowsetimpl.invalidwr").toString());
-        }
-    }
-
-    /**
-     * Reads this <code>WebRowSet</code> object in its XML format.
-     *
-     * @throws SQLException if a database access error occurs
-     */
-    public void readXml(java.io.Reader reader) throws SQLException {
-        // %%%
-        // This will change to a XmlReader, which over-rides the default
-        // Xml that is used when a WRS is instantiated.
-        //WebRowSetXmlReader xmlReader = getXmlReader();
-        try {
-             if (reader != null) {
-                xmlReader.readXML(this, reader);
-
-                // Position is before the first row
-                // The cursor position is to be stored while serializng
-                // and deserializing the WebRowSet Object.
-                if(curPosBfrWrite == 0) {
-                   this.beforeFirst();
-                }
-
-                // Return the position back to place prior to callin writeXml
-                else {
-                   this.absolute(curPosBfrWrite);
-                }
-
-            } else {
-                throw new SQLException(resBundle.handleGetObject("webrowsetimpl.invalidrd").toString());
-            }
-        } catch (Exception e) {
-            throw new SQLException(e.getMessage());
-        }
-    }
-
-    // Stream based methods
-    /**
-     * Reads a stream based XML input to populate this <code>WebRowSet</code>
-     * object.
-     *
-     * @throws SQLException if a data source access error occurs
-     * @throws IOException if a IO exception occurs
-     */
-    public void readXml(java.io.InputStream iStream) throws SQLException, IOException {
-        if (iStream != null) {
-            xmlReader.readXML(this, iStream);
-
-            // Position is before the first row
-                // The cursor position is to be stored while serializng
-                // and deserializing the WebRowSet Object.
-                if(curPosBfrWrite == 0) {
-                   this.beforeFirst();
-                }
-
-                // Return the position back to place prior to callin writeXml
-                else {
-                   this.absolute(curPosBfrWrite);
-                }
-
-        } else {
-            throw new SQLException(resBundle.handleGetObject("webrowsetimpl.invalidrd").toString());
-        }
-    }
-
-    /**
-     * Writes this <code>WebRowSet</code> object to the given <code> OutputStream</code>
-     * object in XML format.
-     * Creates an an output stream of the internal state and contents of a
-     * <code>WebRowSet</code> for XML proceessing
-     *
-     * @throws SQLException if a datasource access error occurs
-     * @throws IOException if an IO exception occurs
-     */
-    public void writeXml(java.io.OutputStream oStream) throws SQLException, IOException {
-        if (xmlWriter != null) {
-
-            // Store the cursor position before writing
-            curPosBfrWrite = this.getRow();
-
-            xmlWriter.writeXML(this, oStream);
-        } else {
-            throw new SQLException(resBundle.handleGetObject("webrowsetimpl.invalidwr").toString());
-        }
-
-    }
-
-    /**
-     * Populates this <code>WebRowSet</code> object with the
-     * data in the given <code>ResultSet</code> object and writes itself
-     * to the given <code>java.io.OutputStream</code> object in XML format.
-     * This includes the rowset's data,  properties, and metadata.
-     *
-     * @throws SQLException if a datasource access error occurs
-     * @throws IOException if an IO exception occurs
-     */
-    public void writeXml(ResultSet rs, java.io.OutputStream oStream) throws SQLException, IOException {
-            this.populate(rs);
-
-            // Store the cursor position before writing
-            curPosBfrWrite = this.getRow();
-
-            this.writeXml(oStream);
-    }
-
-    /**
-     * This method re populates the resBundle
-     * during the deserialization process
-     *
-     */
-    private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException {
-        // Default state initialization happens here
-        ois.defaultReadObject();
-        // Initialization of transient Res Bundle happens here .
-        try {
-           resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle();
-        } catch(IOException ioe) {
-            throw new RuntimeException(ioe);
-        }
-
-    }
-
-    static final long serialVersionUID = -8771775154092422943L;
-}
diff --git a/ojluni/src/main/java/com/sun/rowset/internal/BaseRow.java b/ojluni/src/main/java/com/sun/rowset/internal/BaseRow.java
deleted file mode 100755
index 49fce70..0000000
--- a/ojluni/src/main/java/com/sun/rowset/internal/BaseRow.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-package com.sun.rowset.internal;
-
-import java.sql.*;
-import java.io.*;
-
-/**
- * The abstract base class from which the classes <code>Row</code>
- * The class <code>BaseRow</code> stores
- * a row's original values as an array of <code>Object</code>
- * values, which can be retrieved with the method <code>getOrigRow</code>.
- * This class also provides methods for getting and setting individual
- * values in the row.
- * <P>
- * A row's original values are the values it contained before it was last
- * modified.  For example, when the <code>CachedRowSet</code>method
- * <code>acceptChanges</code> is called, it will reset a row's original
- * values to be the row's current values.  Then, when the row is modified,
- * the values that were previously the current values will become the row's
- * original values (the values the row had immediately before it was modified).
- * If a row has not been modified, its original values are its initial values.
- * <P>
- * Subclasses of this class contain more specific details, such as
- * the conditions under which an exception is thrown or the bounds for
- * index parameters.
- */
-public abstract class BaseRow implements Serializable, Cloneable {
-
-/**
- * The array containing the original values for this <code>BaseRow</code>
- * object.
- * @serial
- */
-    protected Object[] origVals;
-
-/**
- * Retrieves the values that this row contained immediately
- * prior to its last modification.
- *
- * @return an array of <code>Object</code> values containing this row's
- * original values
- */
-    public Object[] getOrigRow() {
-        return origVals;
-    }
-
-/**
- * Retrieves the array element at the given index, which is
- * the original value of column number <i>idx</i> in this row.
- *
- * @param idx the index of the element to return
- * @return the <code>Object</code> value at the given index into this
- *         row's array of original values
- * @throws <code>SQLException</code> if there is an error
- */
-    public abstract Object getColumnObject(int idx) throws SQLException;
-
-/**
- * Sets the element at the given index into this row's array of
- * original values to the given value.  Implementations of the classes
- * <code>Row</code> and determine what happens
- * when the cursor is on the insert row and when it is on any other row.
- *
- * @param idx the index of the element to be set
- * @param obj the <code>Object</code> to which the element at index
- *              <code>idx</code> to be set
- * @throws <code>SQLException</code> if there is an error
- */
-    public abstract void setColumnObject(int idx, Object obj) throws SQLException;
-}
diff --git a/ojluni/src/main/java/com/sun/rowset/internal/CachedRowSetReader.java b/ojluni/src/main/java/com/sun/rowset/internal/CachedRowSetReader.java
deleted file mode 100755
index 3151002..0000000
--- a/ojluni/src/main/java/com/sun/rowset/internal/CachedRowSetReader.java
+++ /dev/null
@@ -1,506 +0,0 @@
-/*
- * Copyright (c) 2003, 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
- * 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.rowset.internal;
-
-import java.sql.*;
-import javax.sql.*;
-import javax.naming.*;
-import java.io.*;
-import java.lang.reflect.*;
-
-import com.sun.rowset.*;
-import javax.sql.rowset.*;
-import javax.sql.rowset.spi.*;
-
-/**
- * The facility called by the <code>RIOptimisticProvider</code> object
- * internally to read data into it.  The calling <code>RowSet</code> object
- * must have implemented the <code>RowSetInternal</code> interface
- * and have the standard <code>CachedRowSetReader</code> object set as its
- * reader.
- * <P>
- * This implementation always reads all rows of the data source,
- * and it assumes that the <code>command</code> property for the caller
- * is set with a query that is appropriate for execution by a
- * <code>PreparedStatement</code> object.
- * <P>
- * Typically the <code>SyncFactory</code> manages the <code>RowSetReader</code> and
- * the <code>RowSetWriter</code> implementations using <code>SyncProvider</code> objects.
- * Standard JDBC RowSet implementations provide an object instance of this
- * reader by invoking the <code>SyncProvider.getRowSetReader()</code> method.
- *
- * @author Jonathan Bruce
- * @see javax.sql.rowset.spi.SyncProvider
- * @see javax.sql.rowset.spi.SyncFactory
- * @see javax.sql.rowset.spi.SyncFactoryException
- */
-public class CachedRowSetReader implements RowSetReader, Serializable {
-
-    /**
-     * The field that keeps track of whether the writer associated with
-     * this <code>CachedRowSetReader</code> object's rowset has been called since
-     * the rowset was populated.
-     * <P>
-     * When this <code>CachedRowSetReader</code> object reads data into
-     * its rowset, it sets the field <code>writerCalls</code> to 0.
-     * When the writer associated with the rowset is called to write
-     * data back to the underlying data source, its <code>writeData</code>
-     * method calls the method <code>CachedRowSetReader.reset</code>,
-     * which increments <code>writerCalls</code> and returns <code>true</code>
-     * if <code>writerCalls</code> is 1. Thus, <code>writerCalls</code> equals
-     * 1 after the first call to <code>writeData</code> that occurs
-     * after the rowset has had data read into it.
-     *
-     * @serial
-     */
-    private int writerCalls = 0;
-
-    private boolean userCon = false;
-
-    private int startPosition;
-
-    private JdbcRowSetResourceBundle resBundle;
-
-    public CachedRowSetReader() {
-        try {
-                resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle();
-        } catch(IOException ioe) {
-            throw new RuntimeException(ioe);
-        }
-    }
-
-
-    /**
-     * Reads data from a data source and populates the given
-     * <code>RowSet</code> object with that data.
-     * This method is called by the rowset internally when
-     * the application invokes the method <code>execute</code>
-     * to read a new set of rows.
-     * <P>
-     * After clearing the rowset of its contents, if any, and setting
-     * the number of writer calls to <code>0</code>, this reader calls
-     * its <code>connect</code> method to make
-     * a connection to the rowset's data source. Depending on which
-     * of the rowset's properties have been set, the <code>connect</code>
-     * method will use a <code>DataSource</code> object or the
-     * <code>DriverManager</code> facility to make a connection to the
-     * data source.
-     * <P>
-     * Once the connection to the data source is made, this reader
-     * executes the query in the calling <code>CachedRowSet</code> object's
-     * <code>command</code> property. Then it calls the rowset's
-     * <code>populate</code> method, which reads data from the
-     * <code>ResultSet</code> object produced by executing the rowset's
-     * command. The rowset is then populated with this data.
-     * <P>
-     * This method's final act is to close the connection it made, thus
-     * leaving the rowset disconnected from its data source.
-     *
-     * @param caller a <code>RowSet</code> object that has implemented
-     *               the <code>RowSetInternal</code> interface and had
-     *               this <code>CachedRowSetReader</code> object set as
-     *               its reader
-     * @throws SQLException if there is a database access error, there is a
-     *         problem making the connection, or the command property has not
-     *         been set
-     */
-    public void readData(RowSetInternal caller) throws SQLException
-    {
-        Connection con = null;
-        try {
-            CachedRowSet crs = (CachedRowSet)caller;
-
-            // Get rid of the current contents of the rowset.
-
-            /**
-             * Checking added to verify whether page size has been set or not.
-             * If set then do not close the object as certain parameters need
-             * to be maintained.
-             */
-
-            if(crs.getPageSize() == 0 && crs.size() >0 ) {
-               // When page size is not set,
-               // crs.size() will show the total no of rows.
-               crs.close();
-            }
-
-            writerCalls = 0;
-
-            // Get a connection.  This reader assumes that the necessary
-            // properties have been set on the caller to let it supply a
-            // connection.
-            userCon = false;
-
-            con = this.connect(caller);
-
-            // Check our assumptions.
-            if (con == null || crs.getCommand() == null)
-                throw new SQLException(resBundle.handleGetObject("crsreader.connecterr").toString());
-
-            try {
-                con.setTransactionIsolation(crs.getTransactionIsolation());
-            } catch (Exception ex) {
-                ;
-            }
-            // Use JDBC to read the data.
-            PreparedStatement pstmt = con.prepareStatement(crs.getCommand());
-            // Pass any input parameters to JDBC.
-
-            decodeParams(caller.getParams(), pstmt);
-            try {
-                pstmt.setMaxRows(crs.getMaxRows());
-                pstmt.setMaxFieldSize(crs.getMaxFieldSize());
-                pstmt.setEscapeProcessing(crs.getEscapeProcessing());
-                pstmt.setQueryTimeout(crs.getQueryTimeout());
-            } catch (Exception ex) {
-                /*
-                 * drivers may not support the above - esp. older
-                 * drivers being used by the bridge..
-                 */
-                throw new SQLException(ex.getMessage());
-            }
-
-            if(crs.getCommand().toLowerCase().indexOf("select") != -1) {
-                // can be (crs.getCommand()).indexOf("select")) == 0
-                // because we will be getting resultset when
-                // it may be the case that some false select query with
-                // select coming in between instead of first.
-
-                // if ((crs.getCommand()).indexOf("?")) does not return -1
-                // implies a Prepared Statement like query exists.
-
-                ResultSet rs = pstmt.executeQuery();
-               if(crs.getPageSize() == 0){
-                      crs.populate(rs);
-               }
-               else {
-                       /**
-                        * If page size has been set then create a ResultSet object that is scrollable using a
-                        * PreparedStatement handle.Also call the populate(ResultSet,int) function to populate
-                        * a page of data as specified by the page size.
-                        */
-                       pstmt = con.prepareStatement(crs.getCommand(),ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
-                       decodeParams(caller.getParams(), pstmt);
-                       try {
-                               pstmt.setMaxRows(crs.getMaxRows());
-                               pstmt.setMaxFieldSize(crs.getMaxFieldSize());
-                               pstmt.setEscapeProcessing(crs.getEscapeProcessing());
-                               pstmt.setQueryTimeout(crs.getQueryTimeout());
-                           } catch (Exception ex) {
-                          /*
-                           * drivers may not support the above - esp. older
-                           * drivers being used by the bridge..
-                           */
-                            throw new SQLException(ex.getMessage());
-                          }
-                       rs = pstmt.executeQuery();
-                       crs.populate(rs,startPosition);
-               }
-                rs.close();
-            } else  {
-                pstmt.executeUpdate();
-            }
-
-            // Get the data.
-            pstmt.close();
-            try {
-                con.commit();
-            } catch (SQLException ex) {
-                ;
-            }
-            // only close connections we created...
-            if (getCloseConnection() == true)
-                con.close();
-        }
-        catch (SQLException ex) {
-            // Throw an exception if reading fails for any reason.
-            throw ex;
-        } finally {
-            try {
-                // only close connections we created...
-                if (con != null && getCloseConnection() == true) {
-                    try {
-                        if (!con.getAutoCommit()) {
-                            con.rollback();
-                        }
-                    } catch (Exception dummy) {
-                        /*
-                         * not an error condition, we're closing anyway, but
-                         * we'd like to clean up any locks if we can since
-                         * it is not clear the connection pool will clean
-                         * these connections in a timely manner
-                         */
-                    }
-                    con.close();
-                    con = null;
-                }
-            } catch (SQLException e) {
-                // will get exception if something already went wrong, but don't
-                // override that exception with this one
-            }
-        }
-    }
-
-    /**
-     * Checks to see if the writer associated with this reader needs
-     * to reset its state.  The writer will need to initialize its state
-     * if new contents have been read since the writer was last called.
-     * This method is called by the writer that was registered with
-     * this reader when components were being wired together.
-     *
-     * @return <code>true</code> if writer associated with this reader needs
-     *         to reset the values of its fields; <code>false</code> otherwise
-     * @throws SQLException if an access error occurs
-     */
-    public boolean reset() throws SQLException {
-        writerCalls++;
-        return writerCalls == 1;
-    }
-
-    /**
-     * Establishes a connection with the data source for the given
-     * <code>RowSet</code> object.  If the rowset's <code>dataSourceName</code>
-     * property has been set, this method uses the JNDI API to retrieve the
-     * <code>DataSource</code> object that it can use to make the connection.
-     * If the url, username, and password properties have been set, this
-     * method uses the <code>DriverManager.getConnection</code> method to
-     * make the connection.
-     * <P>
-     * This method is used internally by the reader and writer associated with
-     * the calling <code>RowSet</code> object; an application never calls it
-     * directly.
-     *
-     * @param caller a <code>RowSet</code> object that has implemented
-     *               the <code>RowSetInternal</code> interface and had
-     *               this <code>CachedRowSetReader</code> object set as
-     *               its reader
-     * @return a <code>Connection</code> object that represents a connection
-     *         to the caller's data source
-     * @throws SQLException if an access error occurs
-     */
-    public Connection connect(RowSetInternal caller) throws SQLException {
-
-        // Get a JDBC connection.
-        if (caller.getConnection() != null) {
-            // A connection was passed to execute(), so use it.
-            // As we are using a connection the user gave us we
-            // won't close it.
-            userCon = true;
-            return caller.getConnection();
-        }
-        else if (((RowSet)caller).getDataSourceName() != null) {
-            // Connect using JNDI.
-            try {
-                Context ctx = new InitialContext();
-                DataSource ds = (DataSource)ctx.lookup
-                    (((RowSet)caller).getDataSourceName());
-
-                // Check for username, password,
-                // if it exists try getting a Connection handle through them
-                // else try without these
-                // else throw SQLException
-
-                if(((RowSet)caller).getUsername() != null) {
-                     return ds.getConnection(((RowSet)caller).getUsername(),
-                                            ((RowSet)caller).getPassword());
-                } else {
-                     return ds.getConnection();
-                }
-            }
-            catch (javax.naming.NamingException ex) {
-                SQLException sqlEx = new SQLException(resBundle.handleGetObject("crsreader.connect").toString());
-                sqlEx.initCause(ex);
-                throw sqlEx;
-            }
-        } else if (((RowSet)caller).getUrl() != null) {
-            // Connect using the driver manager.
-            return DriverManager.getConnection(((RowSet)caller).getUrl(),
-                                               ((RowSet)caller).getUsername(),
-                                               ((RowSet)caller).getPassword());
-        }
-        else {
-            return null;
-        }
-    }
-
-    /**
-     * Sets the parameter placeholders
-     * in the rowset's command (the given <code>PreparedStatement</code>
-     * object) with the parameters in the given array.
-     * This method, called internally by the method
-     * <code>CachedRowSetReader.readData</code>, reads each parameter, and
-     * based on its type, determines the correct
-     * <code>PreparedStatement.setXXX</code> method to use for setting
-     * that parameter.
-     *
-     * @param params an array of parameters to be used with the given
-     *               <code>PreparedStatement</code> object
-     * @param pstmt  the <code>PreparedStatement</code> object that is the
-     *               command for the calling rowset and into which
-     *               the given parameters are to be set
-     * @throws SQLException if an access error occurs
-     */
-    private void decodeParams(Object[] params,
-                              PreparedStatement pstmt) throws SQLException {
-    // There is a corresponding decodeParams in JdbcRowSetImpl
-    // which does the same as this method. This is a design flaw.
-    // Update the JdbcRowSetImpl.decodeParams when you update
-    // this method.
-
-    // Adding the same comments to JdbcRowSetImpl.decodeParams.
-
-        int arraySize;
-        Object[] param = null;
-
-        for (int i=0; i < params.length; i++) {
-            if (params[i] instanceof Object[]) {
-                param = (Object[])params[i];
-
-                if (param.length == 2) {
-                    if (param[0] == null) {
-                        pstmt.setNull(i + 1, ((Integer)param[1]).intValue());
-                        continue;
-                    }
-
-                    if (param[0] instanceof java.sql.Date ||
-                        param[0] instanceof java.sql.Time ||
-                        param[0] instanceof java.sql.Timestamp) {
-                        System.err.println(resBundle.handleGetObject("crsreader.datedetected").toString());
-                        if (param[1] instanceof java.util.Calendar) {
-                            System.err.println(resBundle.handleGetObject("crsreader.caldetected").toString());
-                            pstmt.setDate(i + 1, (java.sql.Date)param[0],
-                                       (java.util.Calendar)param[1]);
-                            continue;
-                        }
-                        else {
-                            throw new SQLException(resBundle.handleGetObject("crsreader.paramtype").toString());
-                        }
-                    }
-
-                    if (param[0] instanceof Reader) {
-                        pstmt.setCharacterStream(i + 1, (Reader)param[0],
-                                              ((Integer)param[1]).intValue());
-                        continue;
-                    }
-
-                    /*
-                     * What's left should be setObject(int, Object, scale)
-                     */
-                    if (param[1] instanceof Integer) {
-                        pstmt.setObject(i + 1, param[0], ((Integer)param[1]).intValue());
-                        continue;
-                    }
-
-                } else if (param.length == 3) {
-
-                    if (param[0] == null) {
-                        pstmt.setNull(i + 1, ((Integer)param[1]).intValue(),
-                                   (String)param[2]);
-                        continue;
-                    }
-
-                    if (param[0] instanceof java.io.InputStream) {
-                        switch (((Integer)param[2]).intValue()) {
-                        case CachedRowSetImpl.UNICODE_STREAM_PARAM:
-                            pstmt.setUnicodeStream(i + 1,
-                                                (java.io.InputStream)param[0],
-                                                ((Integer)param[1]).intValue());
-                        case CachedRowSetImpl.BINARY_STREAM_PARAM:
-                            pstmt.setBinaryStream(i + 1,
-                                               (java.io.InputStream)param[0],
-                                               ((Integer)param[1]).intValue());
-                        case CachedRowSetImpl.ASCII_STREAM_PARAM:
-                            pstmt.setAsciiStream(i + 1,
-                                              (java.io.InputStream)param[0],
-                                              ((Integer)param[1]).intValue());
-                        default:
-                            throw new SQLException(resBundle.handleGetObject("crsreader.paramtype").toString());
-                        }
-                    }
-
-                    /*
-                     * no point at looking at the first element now;
-                     * what's left must be the setObject() cases.
-                     */
-                    if (param[1] instanceof Integer && param[2] instanceof Integer) {
-                        pstmt.setObject(i + 1, param[0], ((Integer)param[1]).intValue(),
-                                     ((Integer)param[2]).intValue());
-                        continue;
-                    }
-
-                    throw new SQLException(resBundle.handleGetObject("crsreader.paramtype").toString());
-
-                } else {
-                    // common case - this catches all SQL92 types
-                    pstmt.setObject(i + 1, params[i]);
-                    continue;
-                }
-            }  else {
-               // Try to get all the params to be set here
-               pstmt.setObject(i + 1, params[i]);
-
-            }
-        }
-    }
-
-    /**
-     * Assists in determining whether the current connection was created by this
-     * CachedRowSet to ensure incorrect connections are not prematurely terminated.
-     *
-     * @return a boolean giving the status of whether the connection has been closed.
-     */
-    protected boolean getCloseConnection() {
-        if (userCon == true)
-            return false;
-
-        return true;
-    }
-
-    /**
-     *  This sets the start position in the ResultSet from where to begin. This is
-     * called by the Reader in the CachedRowSetImpl to set the position on the page
-     * to begin populating from.
-     * @param pos integer indicating the position in the <code>ResultSet</code> to begin
-     *        populating from.
-     */
-    public void setStartPosition(int pos){
-        startPosition = pos;
-    }
-
-    private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException {
-        // Default state initialization happens here
-        ois.defaultReadObject();
-        // Initialization of  Res Bundle happens here .
-        try {
-           resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle();
-        } catch(IOException ioe) {
-            throw new RuntimeException(ioe);
-        }
-
-    }
-
-    static final long serialVersionUID =5049738185801363801L;
-}
diff --git a/ojluni/src/main/java/com/sun/rowset/internal/CachedRowSetWriter.java b/ojluni/src/main/java/com/sun/rowset/internal/CachedRowSetWriter.java
deleted file mode 100755
index 784d0c0..0000000
--- a/ojluni/src/main/java/com/sun/rowset/internal/CachedRowSetWriter.java
+++ /dev/null
@@ -1,1440 +0,0 @@
-/*
- * Copyright (c) 2003, 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
- * 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.rowset.internal;
-
-import java.sql.*;
-import javax.sql.*;
-import java.util.*;
-import java.io.*;
-
-import com.sun.rowset.*;
-import java.text.MessageFormat;
-import javax.sql.rowset.*;
-import javax.sql.rowset.serial.SQLInputImpl;
-import javax.sql.rowset.serial.SerialArray;
-import javax.sql.rowset.serial.SerialBlob;
-import javax.sql.rowset.serial.SerialClob;
-import javax.sql.rowset.serial.SerialStruct;
-import javax.sql.rowset.spi.*;
-
-
-/**
- * The facility called on internally by the <code>RIOptimisticProvider</code> implementation to
- * propagate changes back to the data source from which the rowset got its data.
- * <P>
- * A <code>CachedRowSetWriter</code> object, called a writer, has the public
- * method <code>writeData</code> for writing modified data to the underlying data source.
- * This method is invoked by the rowset internally and is never invoked directly by an application.
- * A writer also has public methods for setting and getting
- * the <code>CachedRowSetReader</code> object, called a reader, that is associated
- * with the writer. The remainder of the methods in this class are private and
- * are invoked internally, either directly or indirectly, by the method
- * <code>writeData</code>.
- * <P>
- * Typically the <code>SyncFactory</code> manages the <code>RowSetReader</code> and
- * the <code>RowSetWriter</code> implementations using <code>SyncProvider</code> objects.
- * Standard JDBC RowSet implementations provide an object instance of this
- * writer by invoking the <code>SyncProvider.getRowSetWriter()</code> method.
- *
- * @version 0.2
- * @author Jonathan Bruce
- * @see javax.sql.rowset.spi.SyncProvider
- * @see javax.sql.rowset.spi.SyncFactory
- * @see javax.sql.rowset.spi.SyncFactoryException
- */
-public class CachedRowSetWriter implements TransactionalWriter, Serializable {
-
-/**
- * The <code>Connection</code> object that this writer will use to make a
- * connection to the data source to which it will write data.
- *
- */
-    private transient Connection con;
-
-/**
- * The SQL <code>SELECT</code> command that this writer will call
- * internally. The method <code>initSQLStatements</code> builds this
- * command by supplying the words "SELECT" and "FROM," and using
- * metadata to get the table name and column names .
- *
- * @serial
- */
-    private String selectCmd;
-
-/**
- * The SQL <code>UPDATE</code> command that this writer will call
- * internally to write data to the rowset's underlying data source.
- * The method <code>initSQLStatements</code> builds this <code>String</code>
- * object.
- *
- * @serial
- */
-    private String updateCmd;
-
-/**
- * The SQL <code>WHERE</code> clause the writer will use for update
- * statements in the <code>PreparedStatement</code> object
- * it sends to the underlying data source.
- *
- * @serial
- */
-    private String updateWhere;
-
-/**
- * The SQL <code>DELETE</code> command that this writer will call
- * internally to delete a row in the rowset's underlying data source.
- *
- * @serial
- */
-    private String deleteCmd;
-
-/**
- * The SQL <code>WHERE</code> clause the writer will use for delete
- * statements in the <code>PreparedStatement</code> object
- * it sends to the underlying data source.
- *
- * @serial
- */
-    private String deleteWhere;
-
-/**
- * The SQL <code>INSERT INTO</code> command that this writer will internally use
- * to insert data into the rowset's underlying data source.  The method
- * <code>initSQLStatements</code> builds this command with a question
- * mark parameter placeholder for each column in the rowset.
- *
- * @serial
- */
-    private String insertCmd;
-
-/**
- * An array containing the column numbers of the columns that are
- * needed to uniquely identify a row in the <code>CachedRowSet</code> object
- * for which this <code>CachedRowSetWriter</code> object is the writer.
- *
- * @serial
- */
-    private int[] keyCols;
-
-/**
- * An array of the parameters that should be used to set the parameter
- * placeholders in a <code>PreparedStatement</code> object that this
- * writer will execute.
- *
- * @serial
- */
-    private Object[] params;
-
-/**
- * The <code>CachedRowSetReader</code> object that has been
- * set as the reader for the <code>CachedRowSet</code> object
- * for which this <code>CachedRowSetWriter</code> object is the writer.
- *
- * @serial
- */
-    private CachedRowSetReader reader;
-
-/**
- * The <code>ResultSetMetaData</code> object that contains information
- * about the columns in the <code>CachedRowSet</code> object
- * for which this <code>CachedRowSetWriter</code> object is the writer.
- *
- * @serial
- */
-    private ResultSetMetaData callerMd;
-
-/**
- * The number of columns in the <code>CachedRowSet</code> object
- * for which this <code>CachedRowSetWriter</code> object is the writer.
- *
- * @serial
- */
-    private int callerColumnCount;
-
-/**
- * This <code>CachedRowSet<code> will hold the conflicting values
- *  retrieved from the db and hold it.
- */
-    private CachedRowSetImpl crsResolve;
-
-/**
- * This <code>ArrayList<code> will hold the values of SyncResolver.*
- */
-    private ArrayList status;
-
-/**
- * This will check whether the same field value has changed both
- * in database and CachedRowSet.
- */
-    private int iChangedValsInDbAndCRS;
-
-/**
- * This will hold the number of cols for which the values have
- * changed only in database.
- */
-    private int iChangedValsinDbOnly ;
-
-    private JdbcRowSetResourceBundle resBundle;
-
-    public CachedRowSetWriter() {
-       try {
-               resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle();
-       } catch(IOException ioe) {
-               throw new RuntimeException(ioe);
-       }
-    }
-
-/**
- * Propagates changes in the given <code>RowSet</code> object
- * back to its underlying data source and returns <code>true</code>
- * if successful. The writer will check to see if
- * the data in the pre-modified rowset (the original values) differ
- * from the data in the underlying data source.  If data in the data
- * source has been modified by someone else, there is a conflict,
- * and in that case, the writer will not write to the data source.
- * In other words, the writer uses an optimistic concurrency algorithm:
- * It checks for conflicts before making changes rather than restricting
- * access for concurrent users.
- * <P>
- * This method is called by the rowset internally when
- * the application invokes the method <code>acceptChanges</code>.
- * The <code>writeData</code> method in turn calls private methods that
- * it defines internally.
- * The following is a general summary of what the method
- * <code>writeData</code> does, much of which is accomplished
- * through calls to its own internal methods.
- * <OL>
- * <LI>Creates a <code>CachedRowSet</code> object from the given
- *     <code>RowSet</code> object
- * <LI>Makes a connection with the data source
- *   <UL>
- *      <LI>Disables autocommit mode if it is not already disabled
- *      <LI>Sets the transaction isolation level to that of the rowset
- *   </UL>
- * <LI>Checks to see if the reader has read new data since the writer
- *     was last called and, if so, calls the method
- *    <code>initSQLStatements</code> to initialize new SQL statements
- *   <UL>
- *       <LI>Builds new <code>SELECT</code>, <code>UPDATE</code>,
- *           <code>INSERT</code>, and <code>DELETE</code> statements
- *       <LI>Uses the <code>CachedRowSet</code> object's metadata to
- *           determine the table name, column names, and the columns
- *           that make up the primary key
- *   </UL>
- * <LI>When there is no conflict, propagates changes made to the
- *     <code>CachedRowSet</code> object back to its underlying data source
- *   <UL>
- *      <LI>Iterates through each row of the <code>CachedRowSet</code> object
- *          to determine whether it has been updated, inserted, or deleted
- *      <LI>If the corresponding row in the data source has not been changed
- *          since the rowset last read its
- *          values, the writer will use the appropriate command to update,
- *          insert, or delete the row
- *      <LI>If any data in the data source does not match the original values
- *          for the <code>CachedRowSet</code> object, the writer will roll
- *          back any changes it has made to the row in the data source.
- *   </UL>
- * </OL>
- *
- * @return <code>true</code> if changes to the rowset were successfully
- *         written to the rowset's underlying data source;
- *         <code>false</code> otherwise
- */
-    public boolean writeData(RowSetInternal caller) throws SQLException {
-        boolean conflict = false;
-        boolean showDel = false;
-        PreparedStatement pstmtIns = null;
-        iChangedValsInDbAndCRS = 0;
-        iChangedValsinDbOnly = 0;
-
-        // We assume caller is a CachedRowSet
-        CachedRowSetImpl crs = (CachedRowSetImpl)caller;
-        // crsResolve = new CachedRowSetImpl();
-        this.crsResolve = new CachedRowSetImpl();;
-
-        // The reader is registered with the writer at design time.
-        // This is not required, in general.  The reader has logic
-        // to get a JDBC connection, so call it.
-
-        con = reader.connect(caller);
-
-
-        if (con == null) {
-            throw new SQLException(resBundle.handleGetObject("crswriter.connect").toString());
-        }
-
-        /*
-         // Fix 6200646.
-         // Don't change the connection or transaction properties. This will fail in a
-         // J2EE container.
-        if (con.getAutoCommit() == true)  {
-            con.setAutoCommit(false);
-        }
-
-        con.setTransactionIsolation(crs.getTransactionIsolation());
-        */
-
-        initSQLStatements(crs);
-        int iColCount;
-
-        RowSetMetaDataImpl rsmdWrite = (RowSetMetaDataImpl)crs.getMetaData();
-        RowSetMetaDataImpl rsmdResolv = new RowSetMetaDataImpl();
-
-        iColCount = rsmdWrite.getColumnCount();
-        int sz= crs.size()+1;
-        status = new ArrayList(sz);
-
-        status.add(0,null);
-        rsmdResolv.setColumnCount(iColCount);
-
-        for(int i =1; i <= iColCount; i++) {
-            rsmdResolv.setColumnType(i, rsmdWrite.getColumnType(i));
-            rsmdResolv.setColumnName(i, rsmdWrite.getColumnName(i));
-            rsmdResolv.setNullable(i, ResultSetMetaData.columnNullableUnknown);
-        }
-        this.crsResolve.setMetaData(rsmdResolv);
-
-        // moved outside the insert inner loop
-        //pstmtIns = con.prepareStatement(insertCmd);
-
-        if (callerColumnCount < 1) {
-            // No data, so return success.
-            if (reader.getCloseConnection() == true)
-                    con.close();
-            return true;
-        }
-        // We need to see rows marked for deletion.
-        showDel = crs.getShowDeleted();
-        crs.setShowDeleted(true);
-
-        // Look at all the rows.
-        crs.beforeFirst();
-
-        int rows =1;
-        while (crs.next()) {
-            if (crs.rowDeleted()) {
-                // The row has been deleted.
-                if (conflict = (deleteOriginalRow(crs, this.crsResolve)) == true) {
-                       status.add(rows, Integer.valueOf(SyncResolver.DELETE_ROW_CONFLICT));
-                } else {
-                      // delete happened without any occurrence of conflicts
-                      // so update status accordingly
-                       status.add(rows, Integer.valueOf(SyncResolver.NO_ROW_CONFLICT));
-                }
-
-           } else if (crs.rowInserted()) {
-                // The row has been inserted.
-
-                pstmtIns = con.prepareStatement(insertCmd);
-                if ( (conflict = insertNewRow(crs, pstmtIns, this.crsResolve)) == true) {
-                          status.add(rows, Integer.valueOf(SyncResolver.INSERT_ROW_CONFLICT));
-                } else {
-                      // insert happened without any occurrence of conflicts
-                      // so update status accordingly
-                       status.add(rows, Integer.valueOf(SyncResolver.NO_ROW_CONFLICT));
-                }
-            } else  if (crs.rowUpdated()) {
-                  // The row has been updated.
-                       if ( conflict = (updateOriginalRow(crs)) == true) {
-                             status.add(rows, Integer.valueOf(SyncResolver.UPDATE_ROW_CONFLICT));
-               } else {
-                      // update happened without any occurrence of conflicts
-                      // so update status accordingly
-                      status.add(rows, Integer.valueOf(SyncResolver.NO_ROW_CONFLICT));
-               }
-
-            } else {
-               /** The row is neither of inserted, updated or deleted.
-                *  So set nulls in the this.crsResolve for this row,
-                *  as nothing is to be done for such rows.
-                *  Also note that if such a row has been changed in database
-                *  and we have not changed(inserted, updated or deleted)
-                *  that is fine.
-                **/
-                int icolCount = crs.getMetaData().getColumnCount();
-                status.add(rows, Integer.valueOf(SyncResolver.NO_ROW_CONFLICT));
-
-                this.crsResolve.moveToInsertRow();
-                for(int cols=0;cols<iColCount;cols++) {
-                   this.crsResolve.updateNull(cols+1);
-                } //end for
-
-                this.crsResolve.insertRow();
-                this.crsResolve.moveToCurrentRow();
-
-                } //end if
-         rows++;
-      } //end while
-
-        // close the insert statement
-        if(pstmtIns!=null)
-        pstmtIns.close();
-        // reset
-        crs.setShowDeleted(showDel);
-
-      boolean boolConf = false;
-      for (int j=1;j<status.size();j++){
-          // ignore status for index = 0 which is set to null
-          if(! ((status.get(j)).equals(Integer.valueOf(SyncResolver.NO_ROW_CONFLICT)))) {
-              // there is at least one conflict which needs to be resolved
-              boolConf = true;
-             break;
-          }
-      }
-
-        crs.beforeFirst();
-        this.crsResolve.beforeFirst();
-
-    if(boolConf) {
-        SyncProviderException spe = new SyncProviderException(status.size() - 1+resBundle.handleGetObject("crswriter.conflictsno").toString());
-        //SyncResolver syncRes = spe.getSyncResolver();
-
-         SyncResolverImpl syncResImpl = (SyncResolverImpl) spe.getSyncResolver();
-
-         syncResImpl.setCachedRowSet(crs);
-         syncResImpl.setCachedRowSetResolver(this.crsResolve);
-
-         syncResImpl.setStatus(status);
-         syncResImpl.setCachedRowSetWriter(this);
-
-        throw spe;
-    } else {
-         return true;
-    }
-       /*
-       if (conflict == true) {
-            con.rollback();
-            return false;
-        } else {
-            con.commit();
-                if (reader.getCloseConnection() == true) {
-                       con.close();
-                }
-            return true;
-        }
-        */
-
-  } //end writeData
-
-/**
- * Updates the given <code>CachedRowSet</code> object's underlying data
- * source so that updates to the rowset are reflected in the original
- * data source, and returns <code>false</code> if the update was successful.
- * A return value of <code>true</code> indicates that there is a conflict,
- * meaning that a value updated in the rowset has already been changed by
- * someone else in the underlying data source.  A conflict can also exist
- * if, for example, more than one row in the data source would be affected
- * by the update or if no rows would be affected.  In any case, if there is
- * a conflict, this method does not update the underlying data source.
- * <P>
- * This method is called internally by the method <code>writeData</code>
- * if a row in the <code>CachedRowSet</code> object for which this
- * <code>CachedRowSetWriter</code> object is the writer has been updated.
- *
- * @return <code>false</code> if the update to the underlying data source is
- *         successful; <code>true</code> otherwise
- * @throws SQLException if a database access error occurs
- */
-    private boolean updateOriginalRow(CachedRowSet crs)
-        throws SQLException {
-        PreparedStatement pstmt;
-        int i = 0;
-        int idx = 0;
-
-        // Select the row from the database.
-        ResultSet origVals = crs.getOriginalRow();
-        origVals.next();
-
-        try {
-            updateWhere = buildWhereClause(updateWhere, origVals);
-
-
-             /**
-              *  The following block of code is for checking a particular type of
-              *  query where in there is a where clause. Without this block, if a
-              *  SQL statement is built the "where" clause will appear twice hence
-              *  the DB errors out and a SQLException is thrown. This code also
-              *  considers that the where clause is in the right place as the
-              *  CachedRowSet object would already have been populated with this
-              *  query before coming to this point.
-              **/
-
-
-            String tempselectCmd = selectCmd.toLowerCase();
-
-            int idxWhere = tempselectCmd.indexOf("where");
-
-            if(idxWhere != -1)
-            {
-               String tempSelect = selectCmd.substring(0,idxWhere);
-               selectCmd = tempSelect;
-            }
-
-            pstmt = con.prepareStatement(selectCmd + updateWhere,
-                        ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
-
-            for (i = 0; i < keyCols.length; i++) {
-                if (params[i] != null) {
-                    pstmt.setObject(++idx, params[i]);
-                } else {
-                    continue;
-                }
-            }
-
-            try {
-                pstmt.setMaxRows(crs.getMaxRows());
-                pstmt.setMaxFieldSize(crs.getMaxFieldSize());
-                pstmt.setEscapeProcessing(crs.getEscapeProcessing());
-                pstmt.setQueryTimeout(crs.getQueryTimeout());
-            } catch (Exception ex) {
-                // Older driver don't support these operations.
-            }
-
-            ResultSet rs = null;
-            rs = pstmt.executeQuery();
-            ResultSetMetaData rsmd = rs.getMetaData();
-
-            if (rs.next()) {
-                if (rs.next()) {
-                   /** More than one row conflict.
-                    *  If rs has only one row we are able to
-                    *  uniquely identify the row where update
-                    *  have to happen else if more than one
-                    *  row implies we cannot uniquely identify the row
-                    *  where we have to do updates.
-                    *  crs.setKeyColumns needs to be set to
-                    *  come out of this situation.
-                    */
-
-                   return true;
-                }
-
-                // don't close the rs
-                // we require the record in rs to be used.
-                // rs.close();
-                // pstmt.close();
-                rs.first();
-
-                // how many fields need to be updated
-                int colsNotChanged = 0;
-                Vector cols = new Vector();
-                String updateExec = updateCmd;
-                Object orig;
-                Object curr;
-                Object rsval;
-                boolean boolNull = true;
-                Object objVal = null;
-
-                // There's only one row and the cursor
-                // needs to be on that row.
-
-                boolean first = true;
-                boolean flag = true;
-
-          this.crsResolve.moveToInsertRow();
-
-          for (i = 1; i <= callerColumnCount; i++) {
-                orig = origVals.getObject(i);
-                curr = crs.getObject(i);
-                rsval = rs.getObject(i);
-                /*
-                 * the following block creates equivalent objects
-                 * that would have been created if this rs is populated
-                 * into a CachedRowSet so that comparison of the column values
-                 * from the ResultSet and CachedRowSet are possible
-                 */
-                Map map = (crs.getTypeMap() == null)?con.getTypeMap():crs.getTypeMap();
-                if (rsval instanceof Struct) {
-
-                    Struct s = (Struct)rsval;
-
-                    // look up the class in the map
-                    Class c = null;
-                    c = (Class)map.get(s.getSQLTypeName());
-                    if (c != null) {
-                        // create new instance of the class
-                        SQLData obj = null;
-                        try {
-                            obj = (SQLData)c.newInstance();
-                        } catch (java.lang.InstantiationException ex) {
-                            throw new SQLException(MessageFormat.format(resBundle.handleGetObject("cachedrowsetimpl.unableins").toString(),
-                            ex.getMessage()));
-                        } catch (java.lang.IllegalAccessException ex) {
-                            throw new SQLException(MessageFormat.format(resBundle.handleGetObject("cachedrowsetimpl.unableins").toString(),
-                            ex.getMessage()));
-                        }
-                        // get the attributes from the struct
-                        Object attribs[] = s.getAttributes(map);
-                        // create the SQLInput "stream"
-                        SQLInputImpl sqlInput = new SQLInputImpl(attribs, map);
-                        // read the values...
-                        obj.readSQL(sqlInput, s.getSQLTypeName());
-                        rsval = obj;
-                    }
-                } else if (rsval instanceof SQLData) {
-                    rsval = new SerialStruct((SQLData)rsval, map);
-                } else if (rsval instanceof Blob) {
-                    rsval = new SerialBlob((Blob)rsval);
-                } else if (rsval instanceof Clob) {
-                    rsval = new SerialClob((Clob)rsval);
-                } else if (rsval instanceof java.sql.Array) {
-                    rsval = new SerialArray((java.sql.Array)rsval, map);
-                }
-
-                // reset boolNull if it had been set
-                boolNull = true;
-
-                /** This addtional checking has been added when the current value
-                 *  in the DB is null, but the DB had a different value when the
-                 *  data was actaully fetched into the CachedRowSet.
-                 **/
-
-                if(rsval == null && orig != null) {
-                   // value in db has changed
-                    // don't proceed with synchronization
-                    // get the value in db and pass it to the resolver.
-
-                    iChangedValsinDbOnly++;
-                   // Set the boolNull to false,
-                   // in order to set the actual value;
-                     boolNull = false;
-                     objVal = rsval;
-                }
-
-                /** Adding the checking for rsval to be "not" null or else
-                 *  it would through a NullPointerException when the values
-                 *  are compared.
-                 **/
-
-                else if(rsval != null && (!rsval.equals(orig)))
-                {
-                    // value in db has changed
-                    // don't proceed with synchronization
-                    // get the value in db and pass it to the resolver.
-
-                    iChangedValsinDbOnly++;
-                   // Set the boolNull to false,
-                   // in order to set the actual value;
-                     boolNull = false;
-                     objVal = rsval;
-                } else if (  (orig == null || curr == null) ) {
-
-                        /** Adding the additonal condition of checking for "flag"
-                         *  boolean variable, which would otherwise result in
-                         *  building a invalid query, as the comma would not be
-                         *  added to the query string.
-                         **/
-
-                        if (first == false || flag == false) {
-                          updateExec += ", ";
-                         }
-                        updateExec += crs.getMetaData().getColumnName(i);
-                        cols.add(Integer.valueOf(i));
-                        updateExec += " = ? ";
-                        first = false;
-
-                /** Adding the extra condition for orig to be "not" null as the
-                 *  condition for orig to be null is take prior to this, if this
-                 *  is not added it will result in a NullPointerException when
-                 *  the values are compared.
-                 **/
-
-                }  else if (orig.equals(curr)) {
-                       colsNotChanged++;
-                     //nothing to update in this case since values are equal
-
-                /** Adding the extra condition for orig to be "not" null as the
-                 *  condition for orig to be null is take prior to this, if this
-                 *  is not added it will result in a NullPointerException when
-                 *  the values are compared.
-                 **/
-
-                } else if(orig.equals(curr) == false) {
-                      // When values from db and values in CachedRowSet are not equal,
-                      // if db value is same as before updation for each col in
-                      // the row before fetching into CachedRowSet,
-                      // only then we go ahead with updation, else we
-                      // throw SyncProviderException.
-
-                      // if value has changed in db after fetching from db
-                      // for some cols of the row and at the same time, some other cols
-                      // have changed in CachedRowSet, no synchronization happens
-
-                      // Synchronization happens only when data when fetching is
-                      // same or at most has changed in cachedrowset
-
-                      // check orig value with what is there in crs for a column
-                      // before updation in crs.
-
-                         if(crs.columnUpdated(i)) {
-                             if(rsval.equals(orig)) {
-                               // At this point we are sure that
-                               // the value updated in crs was from
-                               // what is in db now and has not changed
-                                 if (flag == false || first == false) {
-                                    updateExec += ", ";
-                                 }
-                                updateExec += crs.getMetaData().getColumnName(i);
-                                cols.add(Integer.valueOf(i));
-                                updateExec += " = ? ";
-                                flag = false;
-                             } else {
-                               // Here the value has changed in the db after
-                               // data was fetched
-                               // Plus store this row from CachedRowSet and keep it
-                               // in a new CachedRowSet
-                               boolNull= false;
-                               objVal = rsval;
-                               iChangedValsInDbAndCRS++;
-                             }
-                         }
-                  }
-
-                    if(!boolNull) {
-                        this.crsResolve.updateObject(i,objVal);
-                                 } else {
-                                      this.crsResolve.updateNull(i);
-                                 }
-                } //end for
-
-                rs.close();
-                pstmt.close();
-
-               this.crsResolve.insertRow();
-                   this.crsResolve.moveToCurrentRow();
-
-                /**
-                 * if nothing has changed return now - this can happen
-                 * if column is updated to the same value.
-                 * if colsNotChanged == callerColumnCount implies we are updating
-                 * the database with ALL COLUMNS HAVING SAME VALUES,
-                 * so skip going to database, else do as usual.
-                 **/
-                if ( (first == false && cols.size() == 0)  ||
-                     colsNotChanged == callerColumnCount ) {
-                    return false;
-                }
-
-                if(iChangedValsInDbAndCRS != 0 || iChangedValsinDbOnly != 0) {
-                   return true;
-                }
-
-
-                updateExec += updateWhere;
-
-                pstmt = con.prepareStatement(updateExec);
-
-                // Comments needed here
-                for (i = 0; i < cols.size(); i++) {
-                    Object obj = crs.getObject(((Integer)cols.get(i)).intValue());
-                    if (obj != null)
-                        pstmt.setObject(i + 1, obj);
-                    else
-                        pstmt.setNull(i + 1,crs.getMetaData().getColumnType(i + 1));
-                }
-                idx = i;
-
-                // Comments needed here
-                for (i = 0; i < keyCols.length; i++) {
-                    if (params[i] != null) {
-                        pstmt.setObject(++idx, params[i]);
-                    } else {
-                        continue;
-                    }
-                }
-
-                i = pstmt.executeUpdate();
-
-               /**
-                * i should be equal to 1(row count), because we update
-                * one row(returned as row count) at a time, if all goes well.
-                * if 1 != 1, this implies we have not been able to
-                * do updations properly i.e there is a conflict in database
-                * versus what is in CachedRowSet for this particular row.
-                **/
-
-                 return false;
-
-            } else {
-                /**
-                 * Cursor will be here, if the ResultSet may not return even a single row
-                 * i.e. we can't find the row where to update because it has been deleted
-                 * etc. from the db.
-                 * Present the whole row as null to user, to force null to be sync'ed
-                 * and hence nothing to be synced.
-                 *
-                 * NOTE:
-                 * ------
-                 * In the database if a column that is mapped to java.sql.Types.REAL stores
-                 * a Double value and is compared with value got from ResultSet.getFloat()
-                 * no row is retrieved and will throw a SyncProviderException. For details
-                 * see bug Id 5053830
-                 **/
-                return true;
-            }
-        } catch (SQLException ex) {
-            ex.printStackTrace();
-            // if executeUpdate fails it will come here,
-            // update crsResolve with null rows
-            this.crsResolve.moveToInsertRow();
-
-            for(i = 1; i <= callerColumnCount; i++) {
-               this.crsResolve.updateNull(i);
-            }
-
-            this.crsResolve.insertRow();
-            this.crsResolve.moveToCurrentRow();
-
-            return true;
-        }
-    }
-
-    /**
-         * Inserts a row that has been inserted into the given
-         * <code>CachedRowSet</code> object into the data source from which
-         * the rowset is derived, returning <code>false</code> if the insertion
-         * was successful.
-         *
-         * @param crs the <code>CachedRowSet</code> object that has had a row inserted
-         *            and to whose underlying data source the row will be inserted
-         * @param pstmt the <code>PreparedStatement</code> object that will be used
-         *              to execute the insertion
-         * @return <code>false</code> to indicate that the insertion was successful;
-         *         <code>true</code> otherwise
-         * @throws SQLException if a database access error occurs
-         */
-    private boolean insertNewRow(CachedRowSet crs,
-        PreparedStatement pstmt, CachedRowSetImpl crsRes) throws SQLException {
-        int i = 0;
-        int icolCount = crs.getMetaData().getColumnCount();
-
-        boolean returnVal = false;
-        PreparedStatement pstmtSel = con.prepareStatement(selectCmd,
-                        ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
-        ResultSet rs, rs2 = null;
-        DatabaseMetaData dbmd = con.getMetaData();
-        rs = pstmtSel.executeQuery();
-        String table = crs.getTableName();
-        rs2 = dbmd.getPrimaryKeys(null, null, table);
-        String [] primaryKeys = new String[icolCount];
-        int k = 0;
-        while(rs2.next()) {
-            String pkcolname = rs2.getString("COLUMN_NAME");
-            primaryKeys[k] = pkcolname;
-            k++;
-        }
-
-        if(rs.next()) {
-            for(int j=0;j<primaryKeys.length;j++) {
-                if(primaryKeys[j] != null) {
-                    if(crs.getObject(primaryKeys[j]) == null){
-                        break;
-                    }
-                    String crsPK = (crs.getObject(primaryKeys[j])).toString();
-                    String rsPK = (rs.getObject(primaryKeys[j])).toString();
-                    if(crsPK.equals(rsPK)) {
-                        returnVal = true;
-                        this.crsResolve.moveToInsertRow();
-                        for(i = 1; i <= icolCount; i++) {
-                            String colname = (rs.getMetaData()).getColumnName(i);
-                            if(colname.equals(primaryKeys[j]))
-                                this.crsResolve.updateObject(i,rsPK);
-                            else
-                                this.crsResolve.updateNull(i);
-                        }
-                        this.crsResolve.insertRow();
-                        this.crsResolve.moveToCurrentRow();
-                    }
-                }
-            }
-        }
-        if(returnVal)
-            return returnVal;
-
-        try {
-            for (i = 1; i <= icolCount; i++) {
-                Object obj = crs.getObject(i);
-                if (obj != null) {
-                    pstmt.setObject(i, obj);
-                } else {
-                    pstmt.setNull(i,crs.getMetaData().getColumnType(i));
-                }
-            }
-
-             i = pstmt.executeUpdate();
-             return false;
-
-        } catch (SQLException ex) {
-            /**
-             * Cursor will come here if executeUpdate fails.
-             * There can be many reasons why the insertion failed,
-             * one can be violation of primary key.
-             * Hence we cannot exactly identify why the insertion failed
-             * Present the current row as a null row to the user.
-             **/
-            this.crsResolve.moveToInsertRow();
-
-            for(i = 1; i <= icolCount; i++) {
-               this.crsResolve.updateNull(i);
-            }
-
-            this.crsResolve.insertRow();
-            this.crsResolve.moveToCurrentRow();
-
-            return true;
-        }
-    }
-
-/**
- * Deletes the row in the underlying data source that corresponds to
- * a row that has been deleted in the given <code> CachedRowSet</code> object
- * and returns <code>false</code> if the deletion was successful.
- * <P>
- * This method is called internally by this writer's <code>writeData</code>
- * method when a row in the rowset has been deleted. The values in the
- * deleted row are the same as those that are stored in the original row
- * of the given <code>CachedRowSet</code> object.  If the values in the
- * original row differ from the row in the underlying data source, the row
- * in the data source is not deleted, and <code>deleteOriginalRow</code>
- * returns <code>true</code> to indicate that there was a conflict.
- *
- *
- * @return <code>false</code> if the deletion was successful, which means that
- *         there was no conflict; <code>true</code> otherwise
- * @throws SQLException if there was a database access error
- */
-    private boolean deleteOriginalRow(CachedRowSet crs, CachedRowSetImpl crsRes) throws SQLException {
-        PreparedStatement pstmt;
-        int i;
-        int idx = 0;
-        String strSelect;
-    // Select the row from the database.
-        ResultSet origVals = crs.getOriginalRow();
-        origVals.next();
-
-        deleteWhere = buildWhereClause(deleteWhere, origVals);
-        pstmt = con.prepareStatement(selectCmd + deleteWhere,
-                ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
-
-        for (i = 0; i < keyCols.length; i++) {
-            if (params[i] != null) {
-                pstmt.setObject(++idx, params[i]);
-            } else {
-                continue;
-            }
-        }
-
-        try {
-            pstmt.setMaxRows(crs.getMaxRows());
-            pstmt.setMaxFieldSize(crs.getMaxFieldSize());
-            pstmt.setEscapeProcessing(crs.getEscapeProcessing());
-            pstmt.setQueryTimeout(crs.getQueryTimeout());
-        } catch (Exception ex) {
-            /*
-             * Older driver don't support these operations...
-             */
-            ;
-        }
-
-        ResultSet rs = pstmt.executeQuery();
-
-        if (rs.next() == true) {
-            if (rs.next()) {
-                // more than one row
-                return true;
-            }
-            rs.first();
-
-            // Now check all the values in rs to be same in
-            // db also before actually going ahead with deleting
-            boolean boolChanged = false;
-
-            crsRes.moveToInsertRow();
-
-            for (i = 1; i <= crs.getMetaData().getColumnCount(); i++) {
-
-                Object original = origVals.getObject(i);
-                Object changed = rs.getObject(i);
-
-                if(original != null && changed != null ) {
-                  if(! (original.toString()).equals(changed.toString()) ) {
-                      boolChanged = true;
-                      crsRes.updateObject(i,origVals.getObject(i));
-                  }
-                } else {
-                   crsRes.updateNull(i);
-               }
-            }
-
-           crsRes.insertRow();
-           crsRes.moveToCurrentRow();
-
-           if(boolChanged) {
-               // do not delete as values in db have changed
-               // deletion will not happen for this row from db
-                   // exit now returning true. i.e. conflict
-               return true;
-            } else {
-                // delete the row.
-                // Go ahead with deleting,
-                // don't do anything here
-            }
-
-            String cmd = deleteCmd + deleteWhere;
-            pstmt = con.prepareStatement(cmd);
-
-            idx = 0;
-            for (i = 0; i < keyCols.length; i++) {
-                if (params[i] != null) {
-                    pstmt.setObject(++idx, params[i]);
-                } else {
-                    continue;
-                }
-            }
-
-            if (pstmt.executeUpdate() != 1) {
-                return true;
-            }
-            pstmt.close();
-        } else {
-            // didn't find the row
-            return true;
-        }
-
-        // no conflict
-        return false;
-    }
-
-    /**
-     * Sets the reader for this writer to the given reader.
-     *
-     * @throws SQLException if a database access error occurs
-     */
-    public void setReader(CachedRowSetReader reader) throws SQLException {
-        this.reader = reader;
-    }
-
-    /**
-     * Gets the reader for this writer.
-     *
-     * @throws SQLException if a database access error occurs
-     */
-    public CachedRowSetReader getReader() throws SQLException {
-        return reader;
-    }
-
-    /**
-     * Composes a <code>SELECT</code>, <code>UPDATE</code>, <code>INSERT</code>,
-     * and <code>DELETE</code> statement that can be used by this writer to
-     * write data to the data source backing the given <code>CachedRowSet</code>
-     * object.
-     *
-     * @ param caller a <code>CachedRowSet</code> object for which this
-     *                <code>CachedRowSetWriter</code> object is the writer
-     * @throws SQLException if a database access error occurs
-     */
-    private void initSQLStatements(CachedRowSet caller) throws SQLException {
-
-        int i;
-
-        callerMd = caller.getMetaData();
-        callerColumnCount = callerMd.getColumnCount();
-        if (callerColumnCount < 1)
-            // No data, so return.
-            return;
-
-        /*
-         * If the RowSet has a Table name we should use it.
-         * This is really a hack to get round the fact that
-         * a lot of the jdbc drivers can't provide the tab.
-         */
-        String table = caller.getTableName();
-        if (table == null) {
-            /*
-             * attempt to build a table name using the info
-             * that the driver gave us for the first column
-             * in the source result set.
-             */
-            table = callerMd.getTableName(1);
-            if (table == null || table.length() == 0) {
-                throw new SQLException(resBundle.handleGetObject("crswriter.tname").toString());
-            }
-        }
-        String catalog = callerMd.getCatalogName(1);
-            String schema = callerMd.getSchemaName(1);
-        DatabaseMetaData dbmd = con.getMetaData();
-
-        /*
-         * Compose a SELECT statement.  There are three parts.
-         */
-
-        // Project List
-        selectCmd = "SELECT ";
-        for (i=1; i <= callerColumnCount; i++) {
-            selectCmd += callerMd.getColumnName(i);
-            if ( i <  callerMd.getColumnCount() )
-                selectCmd += ", ";
-            else
-                selectCmd += " ";
-        }
-
-        // FROM clause.
-        selectCmd += "FROM " + buildTableName(dbmd, catalog, schema, table);
-
-        /*
-         * Compose an UPDATE statement.
-         */
-        updateCmd = "UPDATE " + buildTableName(dbmd, catalog, schema, table);
-
-
-        /**
-         *  The following block of code is for checking a particular type of
-         *  query where in there is a where clause. Without this block, if a
-         *  SQL statement is built the "where" clause will appear twice hence
-         *  the DB errors out and a SQLException is thrown. This code also
-         *  considers that the where clause is in the right place as the
-         *  CachedRowSet object would already have been populated with this
-         *  query before coming to this point.
-         **/
-
-        String tempupdCmd = updateCmd.toLowerCase();
-
-        int idxupWhere = tempupdCmd.indexOf("where");
-
-        if(idxupWhere != -1)
-        {
-           updateCmd = updateCmd.substring(0,idxupWhere);
-        }
-        updateCmd += "SET ";
-
-        /*
-         * Compose an INSERT statement.
-         */
-        insertCmd = "INSERT INTO " + buildTableName(dbmd, catalog, schema, table);
-        // Column list
-        insertCmd += "(";
-        for (i=1; i <= callerColumnCount; i++) {
-            insertCmd += callerMd.getColumnName(i);
-            if ( i <  callerMd.getColumnCount() )
-                insertCmd += ", ";
-            else
-                insertCmd += ") VALUES (";
-        }
-        for (i=1; i <= callerColumnCount; i++) {
-            insertCmd += "?";
-            if (i < callerColumnCount)
-                insertCmd += ", ";
-            else
-                insertCmd += ")";
-        }
-
-        /*
-         * Compose a DELETE statement.
-         */
-        deleteCmd = "DELETE FROM " + buildTableName(dbmd, catalog, schema, table);
-
-        /*
-         * set the key desriptors that will be
-         * needed to construct where clauses.
-         */
-        buildKeyDesc(caller);
-    }
-
-    /**
-     * Returns a fully qualified table name built from the given catalog and
-     * table names. The given metadata object is used to get the proper order
-     * and separator.
-     *
-     * @param dbmd a <code>DatabaseMetaData</code> object that contains metadata
-     *          about this writer's <code>CachedRowSet</code> object
-     * @param catalog a <code>String</code> object with the rowset's catalog
-     *          name
-     * @param table a <code>String</code> object with the name of the table from
-     *          which this writer's rowset was derived
-     * @return a <code>String</code> object with the fully qualified name of the
-     *          table from which this writer's rowset was derived
-     * @throws SQLException if a database access error occurs
-     */
-    private String buildTableName(DatabaseMetaData dbmd,
-        String catalog, String schema, String table) throws SQLException {
-
-       // trim all the leading and trailing whitespaces,
-       // white spaces can never be catalog, schema or a table name.
-
-        String cmd = "";
-
-        catalog = catalog.trim();
-        schema = schema.trim();
-        table = table.trim();
-
-        if (dbmd.isCatalogAtStart() == true) {
-            if (catalog != null && catalog.length() > 0) {
-                cmd += catalog + dbmd.getCatalogSeparator();
-            }
-            if (schema != null && schema.length() > 0) {
-                cmd += schema + ".";
-            }
-            cmd += table;
-        } else {
-            if (schema != null && schema.length() > 0) {
-                cmd += schema + ".";
-            }
-            cmd += table;
-            if (catalog != null && catalog.length() > 0) {
-                cmd += dbmd.getCatalogSeparator() + catalog;
-            }
-        }
-        cmd += " ";
-        return cmd;
-    }
-
-    /**
-     * Assigns to the given <code>CachedRowSet</code> object's
-     * <code>params</code>
-     * field an array whose length equals the number of columns needed
-     * to uniquely identify a row in the rowset. The array is given
-     * values by the method <code>buildWhereClause</code>.
-     * <P>
-     * If the <code>CachedRowSet</code> object's <code>keyCols</code>
-     * field has length <code>0</code> or is <code>null</code>, the array
-     * is set with the column number of every column in the rowset.
-     * Otherwise, the array in the field <code>keyCols</code> is set with only
-     * the column numbers of the columns that are required to form a unique
-     * identifier for a row.
-     *
-     * @param crs the <code>CachedRowSet</code> object for which this
-     *     <code>CachedRowSetWriter</code> object is the writer
-     *
-     * @throws SQLException if a database access error occurs
-     */
-    private void buildKeyDesc(CachedRowSet crs) throws SQLException {
-
-        keyCols = crs.getKeyColumns();
-        ResultSetMetaData resultsetmd = crs.getMetaData();
-        if (keyCols == null || keyCols.length == 0) {
-            ArrayList<Integer> listKeys = new ArrayList<Integer>();
-
-            for (int i = 0; i < callerColumnCount; i++ ) {
-                if(resultsetmd.getColumnType(i+1) != java.sql.Types.CLOB &&
-                        resultsetmd.getColumnType(i+1) != java.sql.Types.STRUCT &&
-                        resultsetmd.getColumnType(i+1) != java.sql.Types.SQLXML &&
-                        resultsetmd.getColumnType(i+1) != java.sql.Types.BLOB &&
-                        resultsetmd.getColumnType(i+1) != java.sql.Types.ARRAY &&
-                        resultsetmd.getColumnType(i+1) != java.sql.Types.OTHER )
-                    listKeys.add(i+1);
-            }
-            keyCols = new int[listKeys.size()];
-            for (int i = 0; i < listKeys.size(); i++ )
-                keyCols[i] = listKeys.get(i);
-        }
-        params = new Object[keyCols.length];
-    }
-
-    /**
-         * Constructs an SQL <code>WHERE</code> clause using the given
-         * string as a starting point. The resulting clause will contain
-         * a column name and " = ?" for each key column, that is, each column
-         * that is needed to form a unique identifier for a row in the rowset.
-         * This <code>WHERE</code> clause can be added to
-         * a <code>PreparedStatement</code> object that updates, inserts, or
-         * deletes a row.
-         * <P>
-         * This method uses the given result set to access values in the
-         * <code>CachedRowSet</code> object that called this writer.  These
-         * values are used to build the array of parameters that will serve as
-         * replacements for the "?" parameter placeholders in the
-         * <code>PreparedStatement</code> object that is sent to the
-         * <code>CachedRowSet</code> object's underlying data source.
-         *
-         * @param whereClause a <code>String</code> object that is an empty
-         *                    string ("")
-         * @param rs a <code>ResultSet</code> object that can be used
-         *           to access the <code>CachedRowSet</code> object's data
-         * @return a <code>WHERE</code> clause of the form "<code>WHERE</code>
-         *         columnName = ? AND columnName = ? AND columnName = ? ..."
-         * @throws SQLException if a database access error occurs
-         */
-    private String buildWhereClause(String whereClause,
-                                    ResultSet rs) throws SQLException {
-        whereClause = "WHERE ";
-
-        for (int i = 0; i < keyCols.length; i++) {
-            if (i > 0) {
-                    whereClause += "AND ";
-            }
-            whereClause += callerMd.getColumnName(keyCols[i]);
-            params[i] = rs.getObject(keyCols[i]);
-            if (rs.wasNull() == true) {
-                whereClause += " IS NULL ";
-            } else {
-                whereClause += " = ? ";
-            }
-        }
-        return whereClause;
-    }
-
-    void updateResolvedConflictToDB(CachedRowSet crs, Connection con) throws SQLException {
-          //String updateExe = ;
-          PreparedStatement pStmt  ;
-          String strWhere = "WHERE " ;
-          String strExec =" ";
-          String strUpdate = "UPDATE ";
-          int icolCount = crs.getMetaData().getColumnCount();
-          int keyColumns[] = crs.getKeyColumns();
-          Object param[];
-          String strSet="";
-
-        strWhere = buildWhereClause(strWhere, crs);
-
-        if (keyColumns == null || keyColumns.length == 0) {
-            keyColumns = new int[icolCount];
-            for (int i = 0; i < keyColumns.length; ) {
-                keyColumns[i] = ++i;
-            }
-          }
-          param = new Object[keyColumns.length];
-
-         strUpdate = "UPDATE " + buildTableName(con.getMetaData(),
-                            crs.getMetaData().getCatalogName(1),
-                           crs.getMetaData().getSchemaName(1),
-                           crs.getTableName());
-
-         // changed or updated values will become part of
-         // set clause here
-         strUpdate += "SET ";
-
-        boolean first = true;
-
-        for (int i=1; i<=icolCount;i++) {
-           if (crs.columnUpdated(i)) {
-                  if (first == false) {
-                    strSet += ", ";
-                  }
-                 strSet += crs.getMetaData().getColumnName(i);
-                 strSet += " = ? ";
-                 first = false;
-         } //end if
-      } //end for
-
-         // keycols will become part of where clause
-         strUpdate += strSet;
-         strWhere = "WHERE ";
-
-        for (int i = 0; i < keyColumns.length; i++) {
-            if (i > 0) {
-                    strWhere += "AND ";
-            }
-            strWhere += crs.getMetaData().getColumnName(keyColumns[i]);
-            param[i] = crs.getObject(keyColumns[i]);
-            if (crs.wasNull() == true) {
-                strWhere += " IS NULL ";
-            } else {
-                strWhere += " = ? ";
-            }
-        }
-          strUpdate += strWhere;
-
-        pStmt = con.prepareStatement(strUpdate);
-
-        int idx =0;
-          for (int i = 0; i < icolCount; i++) {
-             if(crs.columnUpdated(i+1)) {
-              Object obj = crs.getObject(i+1);
-              if (obj != null) {
-                  pStmt.setObject(++idx, obj);
-              } else {
-                  pStmt.setNull(i + 1,crs.getMetaData().getColumnType(i + 1));
-             } //end if ..else
-           } //end if crs.column...
-        } //end for
-
-          // Set the key cols for after WHERE =? clause
-          for (int i = 0; i < keyColumns.length; i++) {
-              if (param[i] != null) {
-                  pStmt.setObject(++idx, param[i]);
-              }
-          }
-
-        int id = pStmt.executeUpdate();
-      }
-
-
-    /**
-     *
-     */
-    public void commit() throws SQLException {
-        con.commit();
-        if (reader.getCloseConnection() == true) {
-            con.close();
-        }
-    }
-
-     public void commit(CachedRowSetImpl crs, boolean updateRowset) throws SQLException {
-        con.commit();
-        if(updateRowset) {
-          if(crs.getCommand() != null)
-            crs.execute(con);
-        }
-
-        if (reader.getCloseConnection() == true) {
-            con.close();
-        }
-    }
-
-    /**
-     *
-     */
-    public void rollback() throws SQLException {
-        con.rollback();
-        if (reader.getCloseConnection() == true) {
-            con.close();
-        }
-    }
-
-    /**
-     *
-     */
-    public void rollback(Savepoint s) throws SQLException {
-        con.rollback(s);
-        if (reader.getCloseConnection() == true) {
-            con.close();
-        }
-    }
-
-    private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException {
-        // Default state initialization happens here
-        ois.defaultReadObject();
-        // Initialization of  Res Bundle happens here .
-        try {
-           resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle();
-        } catch(IOException ioe) {
-            throw new RuntimeException(ioe);
-        }
-
-    }
-
-    static final long serialVersionUID =-8506030970299413976L;
-}
diff --git a/ojluni/src/main/java/com/sun/rowset/internal/InsertRow.java b/ojluni/src/main/java/com/sun/rowset/internal/InsertRow.java
deleted file mode 100755
index 914d6fb..0000000
--- a/ojluni/src/main/java/com/sun/rowset/internal/InsertRow.java
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- * Copyright (c) 2003, 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
- * 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.rowset.internal;
-
-import com.sun.rowset.JdbcRowSetResourceBundle;
-import java.sql.*;
-import javax.sql.*;
-import java.io.*;
-import java.util.*;
-
-/**
- * A class used internally to manage a <code>CachedRowSet</code> object's
- * insert row.  This class keeps track of the number of columns in the
- * insert row and which columns have had a value inserted.  It provides
- * methods for retrieving a column value, setting a column value, and finding
- * out whether the insert row is complete.
- */
-public class InsertRow extends BaseRow implements Serializable, Cloneable {
-
-/**
- * An internal <code>BitSet</code> object used to keep track of the
- * columns in this <code>InsertRow</code> object that have had a value
- * inserted.
- */
-    private BitSet colsInserted;
-
-/**
- * The number of columns in this <code>InsertRow</code> object.
- */
-    private int cols;
-
-    private JdbcRowSetResourceBundle resBundle;
-
-/**
- * Creates an <code>InsertRow</code> object initialized with the
- * given number of columns, an array for keeping track of the
- * original values in this insert row, and a
- * <code>BitSet</code> object with the same number of bits as
- * there are columns.
- *
- * @param numCols an <code>int</code> indicating the number of columns
- *                in this <code>InsertRow</code> object
- */
-    public InsertRow(int numCols) {
-        origVals = new Object[numCols];
-        colsInserted = new BitSet(numCols);
-        cols = numCols;
-        try {
-           resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle();
-        } catch(IOException ioe) {
-            throw new RuntimeException(ioe);
-        }
-    }
-
-/**
- * Sets the bit in this <code>InsertRow</code> object's internal
- * <code>BitSet</code> object that corresponds to the specified column
- * in this <code>InsertRow</code> object. Setting a bit indicates
- * that a value has been set.
- *
- * @param col the number of the column to be marked as inserted;
- *            the first column is <code>1</code>
- */
-    protected void markColInserted(int col) {
-        colsInserted.set(col);
-    }
-
-/**
- * Indicates whether this <code>InsertRow</code> object has a value
- * for every column that cannot be null.
- * @param RowSetMD the <code>RowSetMetaData</code> object for the
- *                 <code>CachedRowSet</code> object that maintains this
- *                 <code>InsertRow</code> object
- * @return <code>true</code> if this <code>InsertRow</code> object is
- *         complete; <code>false</code> otherwise
- * @throws SQLException if there is an error accessing data
- */
-    public boolean isCompleteRow(RowSetMetaData RowSetMD) throws SQLException {
-        for (int i = 0; i < cols; i++) {
-            if (colsInserted.get(i) == false &&
-                RowSetMD.isNullable(i + 1) ==
-                ResultSetMetaData.columnNoNulls) {
-                return false;
-            }
-
-        }
-        return true;
-    }
-
-/**
- * Clears all the bits in the internal <code>BitSet</code> object
- * maintained by this <code>InsertRow</code> object.  Clearing all the bits
- * indicates that none of the columns have had a value inserted.
- */
-    public void initInsertRow() {
-        for (int i = 0; i < cols; i++) {
-            colsInserted.clear(i);
-        }
-    }
-
-/**
- * Retrieves the value of the designated column in this
- * <code>InsertRow</code> object.  If no value has been inserted
- * into the designated column, this method throws an
- * <code>SQLException</code>.
- *
- * @param idx the column number of the value to be retrieved;
- *            the first column is <code>1</code>
- * @throws SQLException if no value has been inserted into
- *                                   the designated column
- */
-    public Object getColumnObject(int idx) throws SQLException {
-        if (colsInserted.get(idx - 1) == false) {
-            throw new SQLException(resBundle.handleGetObject("insertrow.novalue").toString());
-        }
-        return (origVals[idx - 1]);
-    }
-
-/**
- * Sets the element in this <code>InsertRow</code> object's
- * internal array of original values that corresponds to the
- * designated column with the given value.  If the third
- * argument is <code>true</code>,
- * which means that the cursor is on the insert row, this
- * <code>InsertRow</code> object's internal <code>BitSet</code> object
- * is set so that the bit corresponding to the column being set is
- * turned on.
- *
- * @param idx the number of the column in the insert row to be set;
- *              the first column is <code>1</code>
- * @param val the value to be set
- */
-    public void setColumnObject(int idx, Object val) {
-        origVals[idx - 1] = val;
-        markColInserted(idx - 1);
-    }
-
-    /**
-     * This method re populates the resBundle
-     * during the deserialization process
-     *
-     */
-    private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException {
-        // Default state initialization happens here
-        ois.defaultReadObject();
-        // Initialization of transient Res Bundle happens here .
-        try {
-           resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle();
-        } catch(IOException ioe) {
-            throw new RuntimeException(ioe);
-        }
-
-    }
-
-    static final long serialVersionUID = 1066099658102869344L;
-}
diff --git a/ojluni/src/main/java/com/sun/rowset/internal/Row.java b/ojluni/src/main/java/com/sun/rowset/internal/Row.java
deleted file mode 100755
index 7fa2eda..0000000
--- a/ojluni/src/main/java/com/sun/rowset/internal/Row.java
+++ /dev/null
@@ -1,343 +0,0 @@
-/*
- * Copyright (c) 2003, 2006, 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.rowset.internal;
-
-import java.sql.*;
-import java.io.*;
-import java.math.*;
-import java.lang.*;
-import java.lang.reflect.*;
-import java.util.*;
-
-/**
- * A class that keeps track of a row's values. A <code>Row</code> object
- * maintains an array of current column values and an array of original
- * column values, and it provides methods for getting and setting the
- * value of a column.  It also keeps track of which columns have
- * changed and whether the change was a delete, insert, or update.
- * <P>
- * Note that column numbers for rowsets start at <code>1</code>,
- * whereas the first element of an array or bitset is <code>0</code>.
- * The argument for the method <code>getColumnUpdated</code> refers to
- * the column number in the rowset (the first column is <code>1</code>);
- * the argument for <code>setColumnUpdated</code> refers to the index
- * into the rowset's internal bitset (the first bit is <code>0</code>).
- */
-public class Row extends BaseRow implements Serializable, Cloneable {
-
-/**
- * An array containing the current column values for this <code>Row</code>
- * object.
- * @serial
- */
-    private Object[] currentVals;
-
-/**
- * A <code>BitSet</code> object containing a flag for each column in
- * this <code>Row</code> object, with each flag indicating whether or
- * not the value in the column has been changed.
- * @serial
- */
-    private BitSet colsChanged;
-
-/**
- * A <code>boolean</code> indicating whether or not this <code>Row</code>
- * object has been deleted.  <code>true</code> indicates that it has
- * been deleted; <code>false</code> indicates that it has not.
- * @serial
- */
-    private boolean deleted;
-
-/**
- * A <code>boolean</code> indicating whether or not this <code>Row</code>
- * object has been updated.  <code>true</code> indicates that it has
- * been updated; <code>false</code> indicates that it has not.
- * @serial
- */
-    private boolean updated;
-
-/**
- * A <code>boolean</code> indicating whether or not this <code>Row</code>
- * object has been inserted.  <code>true</code> indicates that it has
- * been inserted; <code>false</code> indicates that it has not.
- * @serial
- */
-    private boolean inserted;
-
-/**
- * The number of columns in this <code>Row</code> object.
- * @serial
- */
-    private int numCols;
-
-/**
- * Creates a new <code>Row</code> object with the given number of columns.
- * The newly-created row includes an array of original values,
- * an array for storing its current values, and a <code>BitSet</code>
- * object for keeping track of which column values have been changed.
- */
-    public Row(int numCols) {
-        origVals = new Object[numCols];
-        currentVals = new Object[numCols];
-        colsChanged = new BitSet(numCols);
-        this.numCols = numCols;
-    }
-
-/**
- * Creates a new <code>Row</code> object with the given number of columns
- * and with its array of original values initialized to the given array.
- * The new <code>Row</code> object also has an array for storing its
- * current values and a <code>BitSet</code> object for keeping track
- * of which column values have been changed.
- */
-    public Row(int numCols, Object[] vals) {
-        origVals = new Object[numCols];
-        for (int i=0; i < numCols; i++) {
-            origVals[i] = vals[i];
-        }
-        currentVals = new Object[numCols];
-        colsChanged = new BitSet(numCols);
-        this.numCols = numCols;
-    }
-
-/**
- *
- * This method is called internally by the <code>CachedRowSet.populate</code>
- * methods.
- *
- * @param idx the number of the column in this <code>Row</code> object
- *            that is to be set; the index of the first column is
- *            <code>1</code>
- * @param val the new value to be set
- */
-    public void initColumnObject(int idx, Object val) {
-        origVals[idx - 1] = val;
-    }
-
-
-/**
- *
- * This method is called internally by the <code>CachedRowSet.updateXXX</code>
- * methods.
- *
- * @param idx the number of the column in this <code>Row</code> object
- *            that is to be set; the index of the first column is
- *            <code>1</code>
- * @param val the new value to be set
- */
-    public void setColumnObject(int idx, Object val) {
-            currentVals[idx - 1] = val;
-            setColUpdated(idx - 1);
-    }
-
-/**
- * Retrieves the column value stored in the designated column of this
- * <code>Row</code> object.
- *
- * @param columnIndex the index of the column value to be retrieved;
- *                    the index of the first column is <code>1</code>
- * @return an <code>Object</code> in the Java programming language that
- *         represents the value stored in the designated column
- * @throws SQLException if there is a database access error
- */
-    public Object getColumnObject(int columnIndex) throws SQLException {
-        if (getColUpdated(columnIndex - 1)) {
-            return(currentVals[columnIndex - 1]); // maps to array!!
-        } else {
-            return(origVals[columnIndex - 1]); // maps to array!!
-        }
-    }
-
-/**
- * Indicates whether the designated column of this <code>Row</code> object
- * has been changed.
- * @param idx the index into the <code>BitSet</code> object maintained by
- *            this <code>Row</code> object to keep track of which column
- *            values have been modified; the index of the first bit is
- *            <code>0</code>
- * @return <code>true</code> if the designated column value has been changed;
- *         <code>false</code> otherwise
- *
- */
-    public boolean getColUpdated(int idx) {
-        return colsChanged.get(idx);
-    }
-
-/**
- * Sets this <code>Row</code> object's <code>deleted</code> field
- * to <code>true</code>.
- *
- * @see #getDeleted
- */
-    public void setDeleted() { // %%% was public
-        deleted = true;
-    }
-
-
-/**
- * Retrieves the value of this <code>Row</code> object's <code>deleted</code> field,
- * which will be <code>true</code> if one or more of its columns has been
- * deleted.
- * @return <code>true</code> if a column value has been deleted; <code>false</code>
- *         otherwise
- *
- * @see #setDeleted
- */
-    public boolean getDeleted() {
-        return(deleted);
-    }
-
-/**
- * Sets the <code>deleted</code> field for this <code>Row</code> object to
- * <code>false</code>.
- */
-    public void clearDeleted() {
-        deleted = false;
-    }
-
-
-/**
- * Sets the value of this <code>Row</code> object's <code>inserted</code> field
- * to <code>true</code>.
- *
- * @see #getInserted
- */
-    public void setInserted() {
-        inserted = true;
-    }
-
-
-/**
- * Retrieves the value of this <code>Row</code> object's <code>inserted</code> field,
- * which will be <code>true</code> if this row has been inserted.
- * @return <code>true</code> if this row has been inserted; <code>false</code>
- *         otherwise
- *
- * @see #setInserted
- */
-    public boolean getInserted() {
-        return(inserted);
-    }
-
-
-/**
- * Sets the <code>inserted</code> field for this <code>Row</code> object to
- * <code>false</code>.
- */
-    public void clearInserted() { // %%% was public
-        inserted = false;
-    }
-
-/**
- * Retrieves the value of this <code>Row</code> object's
- * <code>updated</code> field.
- * @return <code>true</code> if this <code>Row</code> object has been
- *         updated; <code>false</code> if it has not
- *
- * @see #setUpdated
- */
-    public boolean getUpdated() {
-        return(updated);
-    }
-
-/**
- * Sets the <code>updated</code> field for this <code>Row</code> object to
- * <code>true</code> if one or more of its column values has been changed.
- *
- * @see #getUpdated
- */
-    public void setUpdated() {
-        // only mark something as updated if one or
-        // more of the columns has been changed.
-        for (int i = 0; i < numCols; i++) {
-            if (getColUpdated(i) == true) {
-                updated = true;
-                return;
-            }
-        }
-    }
-
-/**
- * Sets the bit at the given index into this <code>Row</code> object's internal
- * <code>BitSet</code> object, indicating that the corresponding column value
- * (column <code>idx</code> + 1) has been changed.
- *
- * @param idx the index into the <code>BitSet</code> object maintained by
- *            this <code>Row</code> object; the first bit is at index
- *            <code>0</code>
- *
- */
-    private void setColUpdated(int idx) {
-        colsChanged.set(idx);
-    }
-
-/**
- * Sets the <code>updated</code> field for this <code>Row</code> object to
- * <code>false</code>, sets all the column values in this <code>Row</code>
- * object's internal array of current values to <code>null</code>, and clears
- * all of the bits in the <code>BitSet</code> object maintained by this
- * <code>Row</code> object.
- */
-    public void clearUpdated() {
-        updated = false;
-        for (int i = 0; i < numCols; i++) {
-            currentVals[i] = null;
-            colsChanged.clear(i);
-        }
-    }
-
-   /**
-    * Sets the column values in this <code>Row</code> object's internal
-    * array of original values with the values in its internal array of
-    * current values, sets all the values in this <code>Row</code>
-    * object's internal array of current values to <code>null</code>,
-    * clears all the bits in this <code>Row</code> object's internal bitset,
-    * and sets its <code>updated</code> field to <code>false</code>.
-    * <P>
-    * This method is called internally by the <code>CachedRowSet</code>
-    * method <code>makeRowOriginal</code>.
-    */
-    public void moveCurrentToOrig() {
-        for (int i = 0; i < numCols; i++) {
-            if (getColUpdated(i) == true) {
-                origVals[i] = currentVals[i];
-                currentVals[i] = null;
-                colsChanged.clear(i);
-            }
-        }
-        updated = false;
-    }
-
-   /**
-    * Returns the row on which the cursor is positioned.
-    *
-    * @return the <code>Row</code> object on which the <code>CachedRowSet</code>
-    *           implementation objects's cursor is positioned
-    */
-    public BaseRow getCurrentRow() {
-        return null;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/rowset/internal/SyncResolverImpl.java b/ojluni/src/main/java/com/sun/rowset/internal/SyncResolverImpl.java
deleted file mode 100755
index 10573ae..0000000
--- a/ojluni/src/main/java/com/sun/rowset/internal/SyncResolverImpl.java
+++ /dev/null
@@ -1,4860 +0,0 @@
-/*
- * Copyright (c) 2004, 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
- * 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.rowset.internal;
-
-import java.sql.*;
-import javax.sql.*;
-import java.util.*;
-import java.math.BigDecimal;
-
-import javax.sql.rowset.*;
-import javax.sql.rowset.spi.*;
-
-import com.sun.rowset.*;
-import java.io.IOException;
-import java.io.ObjectInputStream;
-
-/**
- * There will be two sets of data which will be maintained by the rowset at the
- * time of synchronization. The <code>SyncProvider</code> will utilize the
- * <code>SyncResolver</code> to synchronize the changes back to database.
- */
-public class SyncResolverImpl extends CachedRowSetImpl implements SyncResolver {
-    /**
-     * This CachedRowSet object will encapsulate a rowset
-     * which will be sync'ed with the datasource but will
-     * contain values in rows where there is conflict.
-     * For rows other than conflict, it will *not* contain
-     * any data. For rows containing conflict it will
-     * return either of the three values set by SyncResolver.*_CONFLICT
-     * from getStatus()
-     */
-    private CachedRowSetImpl crsRes;
-
-    /**
-     * This is the actual CachedRowSet object
-     * which is being synchronized back to
-     * datasource.
-     */
-    private CachedRowSetImpl crsSync;
-
-    /**
-     *  This ArrayList will contain the status of a row
-     *  from the SyncResolver.* values else it will be null.
-     */
-    private ArrayList stats;
-
-    /**
-     * The RowSetWriter associated with the original
-     * CachedRowSet object which is being synchronized.
-     */
-    private CachedRowSetWriter crw;
-
-    /**
-     * Row number identifier
-     */
-    private int rowStatus;
-
-    /**
-     * This will contain the size of the <code>CachedRowSet</code> object
-     */
-    private int sz;
-
-    /**
-     * The <code>Connection</code> handle used to synchronize the changes
-     * back to datasource. This is the same connection handle as was passed
-     * to the CachedRowSet while fetching the data.
-     */
-    private transient Connection con;
-
-    /**
-     * The <code>CachedRowSet</code> object which will encapsulate
-     * a row at any time. This will be built from CachedRowSet and
-     * SyncResolver values. Synchronization takes place on a row by
-     * row basis encapsulated as a CahedRowSet.
-     */
-    private CachedRowSet row;
-
-    private JdbcRowSetResourceBundle resBundle;
-
-    /**
-     * Public constructor
-     */
-    public SyncResolverImpl() throws SQLException {
-        try {
-            crsSync = new CachedRowSetImpl();
-            crsRes = new CachedRowSetImpl();
-            crw = new CachedRowSetWriter();
-            row = new CachedRowSetImpl();
-            rowStatus = 1;
-            try {
-                resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle();
-            } catch(IOException ioe) {
-                throw new RuntimeException(ioe);
-            }
-
-        } catch(SQLException sqle) {
-        }
-     }
-
-
-    /**
-     * Retrieves the conflict status of the current row of this
-     * <code>SyncResolver</code>, which indicates the operationthe <code>RowSet</code>
-     * object was attempting when the conflict occurred.
-     *
-     * @return one of the following constants:
-     *         <code>SyncResolver.UPDATE_ROW_CONFLICT</code>,
-     *         <code>SyncResolver.DELETE_ROW_CONFLICT</code>, or
-     *         <code>SyncResolver.INSERT_ROW_CONFLICT</code>
-     */
-    public int getStatus() {
-        return ((Integer)stats.get(rowStatus-1)).intValue();
-    }
-
-    /**
-     * Retrieves the value in the designated column in the current row of this
-     * <code>SyncResolver</code> object, which is the value that caused a conflict.
-     *
-     * @param index <code>int</code> designating the column in this row of this
-     *        <code>SyncResolver</code> object from which to retrieve the value
-     *        causing a conflict
-     */
-    public Object getConflictValue(int index) throws SQLException {
-        try {
-             return crsRes.getObject(index);
-        } catch(SQLException sqle) {
-            throw new SQLException(sqle.getMessage());
-        }
-    }
-
-    /**
-     * Retrieves the value in the designated column in the current row of this
-     * <code>SyncResolver</code> object, which is the value that caused a conflict.
-     *
-     * @param columnName a <code>String</code> object designating the column in this row of this
-     *        <code>SyncResolver</code> object from which to retrieve the value
-     *        causing a conflict
-     */
-    public Object getConflictValue(String columnName) throws SQLException {
-        try {
-             return crsRes.getObject(columnName);
-        } catch(SQLException sqle) {
-             throw new SQLException(sqle.getMessage());
-        }
-    }
-
-    /**
-     * Sets <i>obj</i> as the value in column <i>index</i> in the current row of the
-     * <code>RowSet</code> object. This value is the resolved value that is to be
-     * persisted in the data source.
-     *
-     * @param index an <code>int</code> giving the number of the column into which to
-     *        set the value to be persisted
-     * @param obj an <code>Object</code> that is the value to be set in the data source
-     */
-    public void setResolvedValue(int index, Object obj) throws SQLException {
-        // modify method to throw SQLException in spec
-
-        /**
-         * When a value is resolved properly make it to null
-         * inside crsRes for that column.
-         *
-         * For more than one conflicts in the row,
-         * check for the last resolved value of the current row
-         * (Note: it can be resolved randomly for same row)
-         * then sync back immediately.
-         **/
-        try {
-            // check whether the index is in range
-            if(index<=0 || index > crsSync.getMetaData().getColumnCount() ) {
-                throw new SQLException(resBundle.handleGetObject("syncrsimpl.indexval").toString()+ index);
-            }
-             // check whether index col is in conflict
-            if(crsRes.getObject(index) == null) {
-                throw new SQLException(resBundle.handleGetObject("syncrsimpl.noconflict").toString());
-            }
-        } catch (SQLException sqle) {
-            // modify method to throw for SQLException
-            throw new SQLException(sqle.getMessage());
-        }
-        try {
-             boolean bool = true;
-             /** Check resolved value to be either of conflict
-               * or in rowset else throw sql exception.
-               * If we allow a value other than that in CachedRowSet or
-               * datasource we will end up in looping the loop of exceptions.
-              **/
-
-             if( ((crsSync.getObject(index)).toString()).equals(obj.toString()) ||
-                     ((crsRes.getObject(index)).toString()).equals(obj.toString()) ) {
-
-                /**
-                 * Check whether this is the only conflict in the row.
-                 * If yes, synchronize this row back
-                 * which has been resolved, else wait
-                 * for all conflicts of current row to be resolved
-                 *
-                 * Step 1: Update crsRes and make the index col as null
-                 * i.e. resolved
-                 * crsRes.updateObject(index, obj);
-                 **/
-                  crsRes.updateNull(index);
-                  crsRes.updateRow();
-
-                 /**
-                  * Step 2: Change the value in the CachedRowSetImpl object
-                  * crsSync.updateObject(index, obj);
-                  * crsSync.updateRow();
-                  **/
-                 if(row.size() != 1) {
-                    row = buildCachedRow();
-                 }
-
-                 row.updateObject(index, obj);
-                 row.updateRow();
-
-                 for(int j=1; j < crsRes.getMetaData().getColumnCount(); j++) {
-                     if(crsRes.getObject(j) != null) {
-                        bool = false;
-                        break;
-                         // break out of loop and wait for other cols
-                         // in same row to get resolved
-                     } //end if
-
-                  } //end for
-
-                  if(bool) {
-                     /**
-                      * sync data back using CachedRowSetWriter
-                      * construct the present row and pass it to the writer
-                      * to write back to db.
-                      **/
-                     try {
-                           /**
-                            * Note : The use of CachedRowSetWriter to get *same* Connection handle.
-                            * The CachedRowSetWriter uses the connection handle
-                            * from the reader, Hence will use the same connection handle
-                            * as of original CachedRowSetImpl
-                            **/
-
-                          writeData(row);
-
-                          //crw.writeData( (RowSetInternal)crsRow);
-                          //System.out.printlnt.println("12");
-
-                     } catch(SyncProviderException spe) {
-                         /**
-                          * This will occur if db is not allowing
-                          * even after resolving the conflicts
-                          * due to some reasons.
-                          * Also will prevent from going into a loop of SPE's
-                          **/
-                         throw new SQLException(resBundle.handleGetObject("syncrsimpl.syncnotpos").toString());
-                     }
-                  } //end if(bool)
-
-             } else {
-                 throw new SQLException(resBundle.handleGetObject("syncrsimpl.valtores").toString());
-             } //end if (crs.getObject ...) block
-
-
-        } catch(SQLException sqle) {
-           throw new SQLException(sqle.getMessage());
-        }
-    }
-
-    /**
-     * This passes a CachedRowSet as a row the the CachedRowSetWriter
-     * after the values have been resolved, back to the datasource.
-     *
-     * @param row a <code>CachedRowSet</code> object which will hold the
-     *        values of a particular row after they have been resolved by
-     *        the user to synchronize back to datasource.
-     * @throws SQLException if synchronization does not happen properly
-     *         maybe beacuse <code>Connection</code> has timed out.
-     **/
-     private void writeData(CachedRowSet row) throws SQLException {
-        crw.updateResolvedConflictToDB(row, crw.getReader().connect((RowSetInternal)crsSync));
-     }
-
-    /**
-     * This function builds a row  as a <code>CachedRowSet</code> object
-     * which has been resolved and is ready to be synchrinized to the datasource
-     *
-     * @throws SQLException if there is problem in building
-     *         the metadata of the row.
-     **/
-     private CachedRowSet buildCachedRow() throws SQLException {
-       int iColCount;
-       CachedRowSetImpl crsRow = new CachedRowSetImpl();
-
-       RowSetMetaDataImpl rsmd = new RowSetMetaDataImpl();
-       RowSetMetaDataImpl rsmdWrite = (RowSetMetaDataImpl)crsSync.getMetaData();
-       RowSetMetaDataImpl rsmdRow = new RowSetMetaDataImpl();
-
-       iColCount = rsmdWrite.getColumnCount();
-       rsmdRow.setColumnCount(iColCount);
-
-       for(int i =1;i<=iColCount;i++) {
-          rsmdRow.setColumnType(i,rsmdWrite.getColumnType(i));
-          rsmdRow.setColumnName(i,rsmdWrite.getColumnName(i));
-          rsmdRow.setNullable(i,ResultSetMetaData.columnNullableUnknown);
-
-          try {
-             rsmdRow.setCatalogName(i, rsmdWrite.getCatalogName(i));
-             rsmdRow.setSchemaName(i, rsmdWrite.getSchemaName(i));
-          } catch(SQLException e) {
-               e.printStackTrace();
-          }
-        } //end for
-
-       crsRow.setMetaData(rsmdRow);
-
-       crsRow.moveToInsertRow();
-
-       for(int col=1;col<=crsSync.getMetaData().getColumnCount();col++) {
-           crsRow.updateObject(col, crsSync.getObject(col));
-       }
-
-       crsRow.insertRow();
-       crsRow.moveToCurrentRow();
-
-       crsRow.absolute(1);
-       crsRow.setOriginalRow();
-
-      try {
-          crsRow.setUrl(crsSync.getUrl());
-      } catch(SQLException sqle) {
-
-      }
-
-      try {
-          crsRow.setDataSourceName(crsSync.getCommand());
-       } catch(SQLException sqle) {
-
-       }
-
-       try {
-           if(crsSync.getTableName()!= null){
-              crsRow.setTableName(crsSync.getTableName());
-           }
-        } catch(SQLException sqle) {
-
-        }
-
-       try {
-            if(crsSync.getCommand() != null)
-                crsRow.setCommand(crsSync.getCommand());
-       } catch(SQLException sqle) {
-
-       }
-
-       try {
-            crsRow.setKeyColumns(crsSync.getKeyColumns());
-       } catch(SQLException sqle) {
-
-       }
-       return crsRow;
-    }
-
-
-
-    /**
-     * Sets <i>obj</i> as the value in column <i>columnName</i> in the current row of the
-     * <code>RowSet</code> object. This value is the resolved value that is to be
-     * persisted in the data source.
-     *
-     * @param columnName a <code>String</code> object giving the name of the column
-     *        into which to set the value to be persisted
-     * @param obj an <code>Object</code> that is the value to be set in the data source
-     */
-    public void setResolvedValue(String columnName, Object obj) throws SQLException {
-       // modify method to throw SQLException in spec
-       // %%% Missing implementation!
-    }
-
-    /**
-     * This function is package private,
-     * i.e. cannot be accesses outside this package.
-     * This is used to set the actual CachedRowSet
-     * which is being synchronized to the database
-     **/
-   void setCachedRowSet(CachedRowSet crs) {
-           crsSync = (CachedRowSetImpl)crs;
-    }
-
-    /**
-     * This function is package private,
-     * i.e. cannot be accesses outside this package.
-     * This is used to set the CachedRowSet formed
-     * with conflict values.
-     **/
-    void setCachedRowSetResolver(CachedRowSet crs){
-         try {
-              crsRes = (CachedRowSetImpl)crs;
-              crsRes.afterLast();
-              sz = crsRes.size();
-         } catch (SQLException sqle) {
-            // do nothing
-         }
-    }
-
-    /**
-     * This function is package private,
-     * i.e. cannot be accesses outside this package.
-     * This is used to set the status of each row
-     * to either of the values SyncResolver.*_CONFLICT
-     **/
-    void setStatus(ArrayList status){
-             stats = status;
-    }
-
-    /**
-     * This function is package private,
-     * i.e. cannot be accesses outside this package.
-     * This is used to set the handle to the writer object
-     * which will write the resolved values back to datasource
-     **/
-    void setCachedRowSetWriter(CachedRowSetWriter CRWriter) {
-         crw = CRWriter;
-    }
-
-    /**
-     * Moves the cursor down one row from its current position. A <code>SyncResolver</code>
-     * cursor is initially positioned before the first conflict row; the first call to the
-     * method <code>nextConflict()</code> makes the first conflict row the current row;
-     * the second call makes the second conflict row the current row, and so on.
-     * <p>
-     * If an input stream is open for the current row, a call to the method next will
-     * implicitly close it. A <code>SyncResolver</code> object's warning chain is cleared
-     * when a new row
-     *
-     * @return true if the new current row is valid; false if there are no more rows
-     * @throws SQLException if a database access occurs
-     *
-     */
-    public boolean nextConflict() throws SQLException {
-        /**
-          * The next() method will hop from
-          * one conflict to another
-          *
-          * Internally do a crs.next() until
-          * next conflict.
-          **/
-      boolean bool = false;
-
-      crsSync.setShowDeleted(true);
-      while(crsSync.next()) {
-           crsRes.previous();
-           rowStatus++;  //sz--;
-
-          if((rowStatus-1) >= stats.size()) {
-             bool = false;
-             break;
-          }
-
-          if(((Integer)stats.get(rowStatus-1)).intValue() == SyncResolver.NO_ROW_CONFLICT) {
-              // do nothing
-              // bool remains as false
-             ;
-           } else {
-             bool = true;
-             break;
-           } //end if
-
-      } //end while
-
-        crsSync.setShowDeleted(false);
-        return bool;
-   } // end next() method
-
-
-    /**
-     * Moves the cursor to the previous conflict row in this <code>SyncResolver</code> object.
-     *
-     * @return <code>true</code> if the cursor is on a valid row; <code>false</code>
-     *     if it is off the result set
-     * @throws SQLException if a database access error occurs or the result set type
-     *     is TYPE_FORWARD_ONLY
-     */
-   public boolean previousConflict() throws SQLException {
-       throw new UnsupportedOperationException();
-   }
-
-    //-----------------------------------------------------------------------
-    // Properties
-    //-----------------------------------------------------------------------
-
-    /**
-     * Sets this <code>CachedRowSetImpl</code> object's command property
-     * to the given <code>String</code> object and clears the parameters,
-     * if any, that were set for the previous command.
-     * <P>
-     * The command property may not be needed
-     * if the rowset is produced by a data source, such as a spreadsheet,
-     * that does not support commands. Thus, this property is optional
-     * and may be <code>null</code>.
-     *
-     * @param cmd a <code>String</code> object containing an SQL query
-     *            that will be set as the command; may be <code>null</code>
-     * @throws SQLException if an error occurs
-     */
-    public void setCommand(String cmd) throws SQLException {
-         throw new UnsupportedOperationException();
-    }
-
-
-    //---------------------------------------------------------------------
-    // Reading and writing data
-    //---------------------------------------------------------------------
-
-    /**
-     * Populates this <code>CachedRowSetImpl</code> object with data from
-     * the given <code>ResultSet</code> object.  This
-     * method is an alternative to the method <code>execute</code>
-     * for filling the rowset with data.  The method <code>populate</code>
-     * does not require that the properties needed by the method
-     * <code>execute</code>, such as the <code>command</code> property,
-     * be set. This is true because the method <code>populate</code>
-     * is given the <code>ResultSet</code> object from
-     * which to get data and thus does not need to use the properties
-     * required for setting up a connection and executing this
-     * <code>CachedRowSetImpl</code> object's command.
-     * <P>
-     * After populating this rowset with data, the method
-     * <code>populate</code> sets the rowset's metadata and
-     * then sends a <code>RowSetChangedEvent</code> object
-     * to all registered listeners prior to returning.
-     *
-     * @param data the <code>ResultSet</code> object containing the data
-     *             to be read into this <code>CachedRowSetImpl</code> object
-     * @throws SQLException if an error occurs; or the max row setting is
-     *          violated while populating the RowSet
-     * @see #execute
-     */
-    public void populate(ResultSet data) throws SQLException {
-         throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Populates this <code>CachedRowSetImpl</code> object with data,
-     * using the given connection to produce the result set from
-     * which data will be read.  A second form of this method,
-     * which takes no arguments, uses the values from this rowset's
-     * user, password, and either url or data source properties to
-     * create a new database connection. The form of <code>execute</code>
-     * that is given a connection ignores these properties.
-     *
-     * @param conn A standard JDBC <code>Connection</code> object that this
-     * <code>CachedRowSet</code> object can pass to a synchronization provider
-     * to establish a connection to the data source
-     * @throws SQLException if an invalid <code>Connection</code> is supplied
-     *           or an error occurs in establishing the connection to the
-     *           data source
-     * @see #populate
-     * @see java.sql.Connection
-     */
-    public void execute(Connection conn) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Propagates all row update, insert, and delete changes to the
-     * underlying data source backing this <code>CachedRowSetImpl</code>
-     * object.
-     * <P>
-     * <b>Note</b>In the reference implementation an optimistic concurrency implementation
-     * is provided as a sample implementation of a the <code>SyncProvider</code>
-     * abstract class.
-     * <P>
-     * This method fails if any of the updates cannot be propagated back
-     * to the data source.  When it fails, the caller can assume that
-     * none of the updates are reflected in the data source.
-     * When an exception is thrown, the current row
-     * is set to the first "updated" row that resulted in an exception
-     * unless the row that caused the exception is a "deleted" row.
-     * In that case, when deleted rows are not shown, which is usually true,
-     * the current row is not affected.
-     * <P>
-     * If no <code>SyncProvider</code> is configured, the reference implementation
-     * leverages the <code>RIOptimisticProvider</code> available which provides the
-     * default and reference synchronization capabilities for disconnected
-     * <code>RowSets</code>.
-     *
-     * @throws SQLException if the cursor is on the insert row or the underlying
-     *          reference synchronization provider fails to commit the updates
-     *          to the datasource
-     * @throws SyncProviderException if an internal error occurs within the
-     *          <code>SyncProvider</code> instance during either during the
-     *          process or at any time when the <code>SyncProvider</code>
-     *          instance touches the data source.
-     * @see #acceptChanges(java.sql.Connection)
-     * @see javax.sql.RowSetWriter
-     * @see javax.sql.rowset.spi.SyncProvider
-     */
-    public void acceptChanges() throws SyncProviderException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Propagates all row update, insert, and delete changes to the
-     * data source backing this <code>CachedRowSetImpl</code> object
-     * using the given <code>Connection</code> object.
-     * <P>
-     * The reference implementation <code>RIOptimisticProvider</code>
-     * modifies its synchronization to a write back function given
-     * the updated connection
-     * The reference implementation modifies its synchronization behaviour
-     * via the <code>SyncProvider</code> to ensure the synchronization
-     * occurs according to the updated JDBC <code>Connection</code>
-     * properties.
-     *
-     * @param con a standard JDBC <code>Connection</code> object
-     * @throws SQLException if the cursor is on the insert row or the underlying
-     *                   synchronization provider fails to commit the updates
-     *                   back to the data source
-     * @see #acceptChanges
-     * @see javax.sql.RowSetWriter
-     * @see javax.sql.rowset.spi.SyncFactory
-     * @see javax.sql.rowset.spi.SyncProvider
-     */
-    public void acceptChanges(Connection con) throws SyncProviderException{
-     throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Restores this <code>CachedRowSetImpl</code> object to its original state,
-     * that is, its state before the last set of changes.
-     * <P>
-     * Before returning, this method moves the cursor before the first row
-     * and sends a <code>rowSetChanged</code> event to all registered
-     * listeners.
-     * @throws SQLException if an error is occurs rolling back the RowSet
-     *           state to the definied original value.
-     * @see javax.sql.RowSetListener#rowSetChanged
-     */
-    public void restoreOriginal() throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Releases the current contents of this <code>CachedRowSetImpl</code>
-     * object and sends a <code>rowSetChanged</code> event object to all
-     * registered listeners.
-     *
-     * @throws SQLException if an error occurs flushing the contents of
-     *           RowSet.
-     * @see javax.sql.RowSetListener#rowSetChanged
-     */
-    public void release() throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Cancels deletion of the current row and notifies listeners that
-     * a row has changed.
-     * <P>
-     * Note:  This method can be ignored if deleted rows are not being shown,
-     * which is the normal case.
-     *
-     * @throws SQLException if the cursor is not on a valid row
-     */
-    public void undoDelete() throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Immediately removes the current row from this
-     * <code>CachedRowSetImpl</code> object if the row has been inserted, and
-     * also notifies listeners the a row has changed.  An exception is thrown
-     * if the row is not a row that has been inserted or the cursor is before
-     * the first row, after the last row, or on the insert row.
-     * <P>
-     * This operation cannot be undone.
-     *
-     * @throws SQLException if an error occurs,
-     *                         the cursor is not on a valid row,
-     *                         or the row has not been inserted
-     */
-    public void undoInsert() throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Immediately reverses the last update operation if the
-     * row has been modified. This method can be
-     * called to reverse updates on a all columns until all updates in a row have
-     * been rolled back to their originating state since the last synchronization
-     * (<code>acceptChanges</code>) or population. This method may also be called
-     * while performing updates to the insert row.
-     * <P>
-     * <code>undoUpdate</code may be called at any time during the life-time of a
-     * rowset, however after a synchronization has occurs this method has no
-     * affect until further modification to the RowSet data occurs.
-     *
-     * @throws SQLException if cursor is before the first row, after the last
-     *     row in rowset.
-     * @see #undoDelete
-     * @see #undoInsert
-     * @see java.sql.ResultSet#cancelRowUpdates
-     */
-    public void undoUpdate() throws SQLException {
-        throw new UnsupportedOperationException();
-
-    }
-
-    //--------------------------------------------------------------------
-    // Views
-    //--------------------------------------------------------------------
-
-    /**
-     * Returns a new <code>RowSet</code> object backed by the same data as
-     * that of this <code>CachedRowSetImpl</code> object and sharing a set of cursors
-     * with it. This allows cursors to interate over a shared set of rows, providing
-     * multiple views of the underlying data.
-     *
-     * @return a <code>RowSet</code> object that is a copy of this <code>CachedRowSetImpl</code>
-     * object and shares a set of cursors with it
-     * @throws SQLException if an error occurs or cloning is
-     *                         not supported
-     * @see javax.sql.RowSetEvent
-     * @see javax.sql.RowSetListener
-     */
-    public RowSet createShared() throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Returns a new <code>RowSet</code> object containing by the same data
-     * as this <code>CachedRowSetImpl</code> object.  This method
-     * differs from the method <code>createCopy</code> in that it throws a
-     * <code>CloneNotSupportedException</code> object instead of an
-     * <code>SQLException</code> object, as the method <code>createShared</code>
-     * does.  This <code>clone</code>
-     * method is called internally by the method <code>createShared</code>,
-     * which catches the <code>CloneNotSupportedException</code> object
-     * and in turn throws a new <code>SQLException</code> object.
-     *
-     * @return a copy of this <code>CachedRowSetImpl</code> object
-     * @throws CloneNotSupportedException if an error occurs when
-     * attempting to clone this <code>CachedRowSetImpl</code> object
-     * @see #createShared
-     */
-    protected Object clone() throws CloneNotSupportedException  {
-       throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Creates a <code>RowSet</code> object that is a deep copy of
-     * this <code>CachedRowSetImpl</code> object's data, including
-     * constraints.  Updates made
-     * on a copy are not visible to the original rowset;
-     * a copy of a rowset is completely independent from the original.
-     * <P>
-     * Making a copy saves the cost of creating an identical rowset
-     * from first principles, which can be quite expensive.
-     * For example, it can eliminate the need to query a
-     * remote database server.
-     * @return a new <code>CachedRowSet</code> object that is a deep copy
-     *           of this <code>CachedRowSet</code> object and is
-     *           completely independent from this <code>CachedRowSetImpl</code>
-     *           object.
-     * @throws SQLException if an error occurs in generating the copy of this
-     *           of the <code>CachedRowSetImpl</code>
-     * @see #createShared
-     * @see javax.sql.RowSetEvent
-     * @see javax.sql.RowSetListener
-     */
-    public CachedRowSet createCopy() throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Creates a <code>RowSet</code> object that is a copy of
-     * this <code>CachedRowSetImpl</code> object's table structure
-     * and the constraints only.
-     * There will be no data in the object being returned.
-     * Updates made on a copy are not visible to the original rowset.
-     * <P>
-     * This helps in getting the underlying XML schema which can
-     * be used as the basis for populating a <code>WebRowSet</code>.
-     *
-     * @return a new <code>CachedRowSet</code> object that is a copy
-     * of this <code>CachedRowSetImpl</code> object's schema and
-     * retains all the constraints on the original rowset but contains
-     * no data
-     * @throws SQLException if an error occurs in generating the copy
-     * of the <code>CachedRowSet</code> object
-     * @see #createShared
-     * @see #createCopy
-     * @see #createCopyNoConstraints
-     * @see javax.sql.RowSetEvent
-     * @see javax.sql.RowSetListener
-     */
-    public CachedRowSet createCopySchema() throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Creates a <code>CachedRowSet</code> object that is a copy of
-     * this <code>CachedRowSetImpl</code> object's data only.
-     * All constraints set in this object will not be there
-     * in the returning object.  Updates made
-     * on a copy are not visible to the original rowset.
-     *
-     * @return a new <code>CachedRowSet</code> object that is a deep copy
-     * of this <code>CachedRowSetImpl</code> object and is
-     * completely independent from this <code>CachedRowSetImpl</code> object
-     * @throws SQLException if an error occurs in generating the copy of the
-     * of the <code>CachedRowSet</code>
-     * @see #createShared
-     * @see #createCopy
-     * @see #createCopySchema
-     * @see javax.sql.RowSetEvent
-     * @see javax.sql.RowSetListener
-     */
-    public CachedRowSet createCopyNoConstraints() throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Converts this <code>CachedRowSetImpl</code> object to a collection
-     * of tables. The sample implementation utilitizes the <code>TreeMap</code>
-     * collection type.
-     * This class guarantees that the map will be in ascending key order,
-     * sorted according to the natural order for the key's class.
-     *
-     * @return a <code>Collection</code> object consisting of tables,
-     *         each of which is a copy of a row in this
-     *         <code>CachedRowSetImpl</code> object
-     * @throws SQLException if an error occurs in generating the collection
-     * @see #toCollection(int)
-     * @see #toCollection(String)
-     * @see java.util.TreeMap
-     */
-    public Collection toCollection() throws SQLException {
-       throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Returns the specified column of this <code>CachedRowSetImpl</code> object
-     * as a <code>Collection</code> object.  This method makes a copy of the
-     * column's data and utilitizes the <code>Vector</code> to establish the
-     * collection. The <code>Vector</code> class implements a growable array
-     * objects allowing the individual components to be accessed using an
-     * an integer index similar to that of an array.
-     *
-     * @return a <code>Collection</code> object that contains the value(s)
-     *         stored in the specified column of this
-     *         <code>CachedRowSetImpl</code>
-     *         object
-     * @throws SQLException if an error occurs generated the collection; or
-     *          an invalid column is provided.
-     * @see #toCollection()
-     * @see #toCollection(String)
-     * @see java.util.Vector
-     */
-    public Collection toCollection(int column) throws SQLException {
-       throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Returns the specified column of this <code>CachedRowSetImpl</code> object
-     * as a <code>Collection</code> object.  This method makes a copy of the
-     * column's data and utilitizes the <code>Vector</code> to establish the
-     * collection. The <code>Vector</code> class implements a growable array
-     * objects allowing the individual components to be accessed using an
-     * an integer index similar to that of an array.
-     *
-     * @return a <code>Collection</code> object that contains the value(s)
-     *         stored in the specified column of this
-     *         <code>CachedRowSetImpl</code>
-     *         object
-     * @throws SQLException if an error occurs generated the collection; or
-     *          an invalid column is provided.
-     * @see #toCollection()
-     * @see #toCollection(int)
-     * @see java.util.Vector
-     */
-    public Collection toCollection(String column) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    //--------------------------------------------------------------------
-    // Advanced features
-    //--------------------------------------------------------------------
-
-
-    /**
-     * Returns the <code>SyncProvider</code> implementation being used
-     * with this <code>CachedRowSetImpl</code> implementation rowset.
-     *
-     * @return the SyncProvider used by the rowset. If not provider was
-     *          set when the rowset was instantiated, the reference
-     *          implementation (default) provider is returned.
-     * @throws SQLException if error occurs while return the
-     *          <code>SyncProvider</code> instance.
-     */
-    public SyncProvider getSyncProvider() throws SQLException {
-      throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Sets the active <code>SyncProvider</code> and attempts to load
-     * load the new provider using the <code>SyncFactory</code> SPI.
-     *
-     * @throws SQLException if an error occurs while resetting the
-     *          <code>SyncProvider</code>.
-     */
-    public void setSyncProvider(String providerStr) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-
-    //-----------------
-    // methods inherited from RowSet
-    //-----------------
-
-
-
-
-
-
-    //---------------------------------------------------------------------
-    // Reading and writing data
-    //---------------------------------------------------------------------
-
-    /**
-     * Populates this <code>CachedRowSetImpl</code> object with data.
-     * This form of the method uses the rowset's user, password, and url or
-     * data source name properties to create a database
-     * connection.  If properties that are needed
-     * have not been set, this method will throw an exception.
-     * <P>
-     * Another form of this method uses an existing JDBC <code>Connection</code>
-     * object instead of creating a new one; therefore, it ignores the
-     * properties used for establishing a new connection.
-     * <P>
-     * The query specified by the command property is executed to create a
-     * <code>ResultSet</code> object from which to retrieve data.
-     * The current contents of the rowset are discarded, and the
-     * rowset's metadata is also (re)set.  If there are outstanding updates,
-     * they are also ignored.
-     * <P>
-     * The method <code>execute</code> closes any database connections that it
-     * creates.
-     *
-     * @throws SQLException if an error occurs or the
-     *                         necessary properties have not been set
-     */
-    public void execute() throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-
-
-    //-----------------------------------
-    // Methods inherited from ResultSet
-    //-----------------------------------
-
-    /**
-     * Moves the cursor down one row from its current position and
-     * returns <code>true</code> if the new cursor position is a
-     * valid row.
-     * The cursor for a new <code>ResultSet</code> object is initially
-     * positioned before the first row. The first call to the method
-     * <code>next</code> moves the cursor to the first row, making it
-     * the current row; the second call makes the second row the
-     * current row, and so on.
-     *
-     * <P>If an input stream from the previous row is open, it is
-     * implicitly closed. The <code>ResultSet</code> object's warning
-     * chain is cleared when a new row is read.
-     *
-     * @return <code>true</code> if the new current row is valid;
-     *         <code>false</code> if there are no more rows
-     * @throws SQLException if an error occurs or
-     *            the cursor is not positioned in the rowset, before
-     *            the first row, or after the last row
-     */
-    public boolean next() throws SQLException {
-       throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Moves this <code>CachedRowSetImpl</code> object's cursor to the next
-     * row and returns <code>true</code> if the cursor is still in the rowset;
-     * returns <code>false</code> if the cursor has moved to the position after
-     * the last row.
-     * <P>
-     * This method handles the cases where the cursor moves to a row that
-     * has been deleted.
-     * If this rowset shows deleted rows and the cursor moves to a row
-     * that has been deleted, this method moves the cursor to the next
-     * row until the cursor is on a row that has not been deleted.
-     * <P>
-     * The method <code>internalNext</code> is called by methods such as
-     * <code>next</code>, <code>absolute</code>, and <code>relative</code>,
-     * and, as its name implies, is only called internally.
-     * <p>
-     * This is a implementation only method and is not required as a standard
-     * implementation of the <code>CachedRowSet</code> interface.
-     *
-     * @return <code>true</code> if the cursor is on a valid row in this
-     *         rowset; <code>false</code> if it is after the last row
-     * @throws SQLException if an error occurs
-     */
-    protected boolean internalNext() throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Closes this <code>CachedRowSetImpl</code> objecy and releases any resources
-     * it was using.
-     *
-     * @throws SQLException if an error occurs when releasing any resources in use
-     * by this <code>CachedRowSetImpl</code> object
-     */
-    public void close() throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Reports whether the last column read was SQL <code>NULL</code>.
-     * Note that you must first call the method <code>getXXX</code>
-     * on a column to try to read its value and then call the method
-     * <code>wasNull</code> to determine whether the value was
-     * SQL <code>NULL</code>.
-     *
-     * @return <code>true</code> if the value in the last column read
-     *         was SQL <code>NULL</code>; <code>false</code> otherwise
-     * @throws SQLException if an error occurs
-     */
-    public boolean wasNull() throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Returns the insert row or the current row of this
-     * <code>CachedRowSetImpl</code>object.
-     *
-     * @return the <code>Row</code> object on which this <code>CachedRowSetImpl</code>
-     * objects's cursor is positioned
-     */
-    protected BaseRow getCurrentRow() {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Removes the row on which the cursor is positioned.
-     * <p>
-     * This is a implementation only method and is not required as a standard
-     * implementation of the <code>CachedRowSet</code> interface.
-     *
-     * @throws SQLException if the cursor is positioned on the insert
-     *            row
-     */
-    protected void removeCurrentRow() {
-        throw new UnsupportedOperationException();
-    }
-
-
-    /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>CachedRowSetImpl</code> object as a
-     * <code>String</code> object.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in the rowset
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     *         result is <code>null</code>
-     * @throws SQLException if (1) the given column index is out of bounds,
-     * (2) the cursor is not on one of this rowset's rows or its
-     * insert row, or (3) the designated column does not store an
-     * SQL <code>TINYINT, SMALLINT, INTEGER, BIGINT, REAL,
-     * FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT, <b>CHAR</b>, <b>VARCHAR</b></code>
-     * or <code>LONGVARCHAR</code> value. The bold SQL type designates the
-     * recommended return type.
-     */
-    public String getString(int columnIndex) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>CachedRowSetImpl</code> object as a
-     * <code>boolean</code> value.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in the rowset
-     * @return the column value as a <code>boolean</code> in the Java progamming language;
-     *        if the value is SQL <code>NULL</code>, the result is <code>false</code>
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) the designated column does not store an
-     *            SQL <code>BOOLEAN</code> value
-     * @see #getBoolean(String)
-     */
-    public boolean getBoolean(int columnIndex) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>CachedRowSetImpl</code> object as a
-     * <code>byte</code> value.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in the rowset
-     * @return the column value as a <code>byte</code> in the Java programming
-     * language; if the value is SQL <code>NULL</code>, the result is <code>0</code>
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) the designated column does not store an
-     *            SQL <code><b>TINYINT</b>, SMALLINT, INTEGER, BIGINT, REAL,
-     *            FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT, CHAR, VARCHAR</code>
-     *            or <code>LONGVARCHAR</code> value. The bold SQL type
-     *            designates the recommended return type.
-     * @see #getByte(String)
-     */
-    public byte getByte(int columnIndex) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>CachedRowSetImpl</code> object as a
-     * <code>short</code> value.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in the rowset
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     *         result is <code>0</code>
-     * @throws SQLException if (1) the given column index is out of bounds,
-     * (2) the cursor is not on one of this rowset's rows or its
-     * insert row, or (3) the designated column does not store an
-     * SQL <code>TINYINT, <b>SMALLINT</b>, INTEGER, BIGINT, REAL
-     * FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT, CHAR, VARCHAR</code>
-     * or <code>LONGVARCHAR</code> value. The bold SQL type designates the
-     * recommended return type.
-     * @see #getShort(String)
-     */
-    public short getShort(int columnIndex) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>CachedRowSetImpl</code> object as an
-     * <code>int</code> value.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in the rowset
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     *         result is <code>0</code>
-     * @throws SQLException if (1) the given column index is out of bounds,
-     * (2) the cursor is not on one of this rowset's rows or its
-     * insert row, or (3) the designated column does not store an
-     * SQL <code>TINYINT, SMALLINT, <b>INTEGER</b>, BIGINT, REAL
-     * FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT, CHAR, VARCHAR</code>
-     * or <code>LONGVARCHAR</code> value. The bold SQL type designates the
-     * recommended return type.
-     */
-    public int getInt(int columnIndex) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>CachedRowSetImpl</code> object as a
-     * <code>long</code> value.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in the rowset
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     *         result is <code>0</code>
-     * @throws SQLException if (1) the given column index is out of bounds,
-     * (2) the cursor is not on one of this rowset's rows or its
-     * insert row, or (3) the designated column does not store an
-     * SQL <code>TINYINT, SMALLINT, INTEGER, <b>BIGINT</b>, REAL
-     * FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT, CHAR, VARCHAR</code>
-     * or <code>LONGVARCHAR</code> value. The bold SQL type designates the
-     * recommended return type.
-     * @see #getLong(String)
-     */
-    public long getLong(int columnIndex) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>CachedRowSetImpl</code> object as a
-     * <code>float</code> value.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in the rowset
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     *         result is <code>0</code>
-     * @throws SQLException if (1) the given column index is out of bounds,
-     * (2) the cursor is not on one of this rowset's rows or its
-     * insert row, or (3) the designated column does not store an
-     * SQL <code>TINYINT, SMALLINT, INTEGER, BIGINT, <b>REAL</b>,
-     * FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT, CHAR, VARCHAR</code>
-     * or <code>LONGVARCHAR</code> value. The bold SQL type designates the
-     * recommended return type.
-     * @see #getFloat(String)
-     */
-    public float getFloat(int columnIndex) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>CachedRowSetImpl</code> object as a
-     * <code>double</code> value.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in the rowset
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     *         result is <code>0</code>
-     * @throws SQLException if (1) the given column index is out of bounds,
-     * (2) the cursor is not on one of this rowset's rows or its
-     * insert row, or (3) the designated column does not store an
-     * SQL <code>TINYINT, SMALLINT, INTEGER, BIGINT, REAL,
-     * <b>FLOAT</b>, <b>DOUBLE</b>, DECIMAL, NUMERIC, BIT, CHAR, VARCHAR</code>
-     * or <code>LONGVARCHAR</code> value. The bold SQL type designates the
-     * recommended return type.
-     * @see #getDouble(String)
-     *
-     */
-    public double getDouble(int columnIndex) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>CachedRowSetImpl</code> object as a
-     * <code>java.math.BigDecimal</code> object.
-     * <P>
-     * This method is deprecated; use the version of <code>getBigDecimal</code>
-     * that does not take a scale parameter and returns a value with full
-     * precision.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in the rowset
-     * @param scale the number of digits to the right of the decimal point in the
-     *        value returned
-     * @return the column value with the specified number of digits to the right
-     *         of the decimal point; if the value is SQL <code>NULL</code>, the
-     *         result is <code>null</code>
-     * @throws SQLException if the given column index is out of bounds,
-     *            the cursor is not on a valid row, or this method fails
-     * @deprecated
-     */
-    public BigDecimal getBigDecimal(int columnIndex, int scale) throws SQLException {
-       throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>CachedRowSetImpl</code> object as a
-     * <code>byte</code> array value.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in the rowset
-     * @return the column value as a <code>byte</code> array in the Java programming
-     * language; if the value is SQL <code>NULL</code>, the
-     * result is <code>null</code>
-     *
-     * @throws SQLException if (1) the given column index is out of bounds,
-     * (2) the cursor is not on one of this rowset's rows or its
-     * insert row, or (3) the designated column does not store an
-     * SQL <code><b>BINARY</b>, <b>VARBINARY</b> or
-     * LONGVARBINARY</code> value.
-     * The bold SQL type designates the recommended return type.
-     * @see #getBytes(String)
-     */
-    public byte[] getBytes(int columnIndex) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>CachedRowSetImpl</code> object as a
-     * <code>java.sql.Date</code> object.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in the rowset
-     * @return the column value as a <code>java.sql.Data</code> object; if
-     *        the value is SQL <code>NULL</code>, the
-     *        result is <code>null</code>
-     * @throws SQLException if the given column index is out of bounds,
-     *            the cursor is not on a valid row, or this method fails
-     */
-    public java.sql.Date getDate(int columnIndex) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>CachedRowSetImpl</code> object as a
-     * <code>java.sql.Time</code> object.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in the rowset
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     *         result is <code>null</code>
-     * @throws SQLException if the given column index is out of bounds,
-     *         the cursor is not on a valid row, or this method fails
-     */
-    public java.sql.Time getTime(int columnIndex) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>CachedRowSetImpl</code> object as a
-     * <code>java.sql.Timestamp</code> object.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in the rowset
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     *         result is <code>null</code>
-     * @throws SQLException if the given column index is out of bounds,
-     *            the cursor is not on a valid row, or this method fails
-     */
-    public java.sql.Timestamp getTimestamp(int columnIndex) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row of this
-     * <code>CachedRowSetImpl</code> object as a <code>java.io.InputStream</code>
-     * object.
-     *
-     * A column value can be retrieved as a stream of ASCII characters
-     * and then read in chunks from the stream.  This method is particularly
-     * suitable for retrieving large <code>LONGVARCHAR</code> values.  The JDBC
-     * driver will do any necessary conversion from the database format into ASCII.
-     *
-     * <P><B>Note:</B> All the data in the returned stream must be
-     * read prior to getting the value of any other column. The next
-     * call to a get method implicitly closes the stream. . Also, a
-     * stream may return <code>0</code> for <code>CachedRowSetImpl.available()</code>
-     * whether there is data available or not.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @return a Java input stream that delivers the database column value
-     *         as a stream of one-byte ASCII characters.  If the value is SQL
-     *         <code>NULL</code>, the result is <code>null</code>.
-     * @throws SQLException if (1) the given column index is out of bounds,
-     * (2) the cursor is not on one of this rowset's rows or its
-     * insert row, or (3) the designated column does not store an
-     * SQL <code>CHAR, VARCHAR</code>, <code><b>LONGVARCHAR</b></code>
-     * <code>BINARY, VARBINARY</code> or <code>LONGVARBINARY</code> value. The
-     * bold SQL type designates the recommended return types that this method is
-     * used to retrieve.
-     * @see #getAsciiStream(String)
-     */
-    public java.io.InputStream getAsciiStream(int columnIndex) throws SQLException {
-       throw new UnsupportedOperationException();
-    }
-
-    /**
-     * A column value can be retrieved as a stream of Unicode characters
-     * and then read in chunks from the stream.  This method is particularly
-     * suitable for retrieving large LONGVARCHAR values.  The JDBC driver will
-     * do any necessary conversion from the database format into Unicode.
-     *
-     * <P><B>Note:</B> All the data in the returned stream must be
-     * read prior to getting the value of any other column. The next
-     * call to a get method implicitly closes the stream. . Also, a
-     * stream may return 0 for available() whether there is data
-     * available or not.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @return a Java input stream that delivers the database column value
-     * as a stream of two byte Unicode characters.  If the value is SQL NULL
-     * then the result is null.
-     * @throws SQLException if an error occurs
-     * @deprecated
-     */
-    public java.io.InputStream getUnicodeStream(int columnIndex) throws SQLException {
-       throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row of this
-     * <code>CachedRowSetImpl</code> object as a <code>java.io.InputStream</code>
-     * object.
-     * <P>
-     * A column value can be retrieved as a stream of uninterpreted bytes
-     * and then read in chunks from the stream.  This method is particularly
-     * suitable for retrieving large <code>LONGVARBINARY</code> values.
-     *
-     * <P><B>Note:</B> All the data in the returned stream must be
-     * read prior to getting the value of any other column. The next
-     * call to a get method implicitly closes the stream. Also, a
-     * stream may return <code>0</code> for
-     * <code>CachedRowSetImpl.available()</code> whether there is data
-     * available or not.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     * is <code>2</code>, and so on; must be <code>1</code> or larger
-     * and equal to or less than the number of columns in the rowset
-     * @return a Java input stream that delivers the database column value
-     * as a stream of uninterpreted bytes.  If the value is SQL <code>NULL</code>
-     * then the result is <code>null</code>.
-     * @throws SQLException if (1) the given column index is out of bounds,
-     * (2) the cursor is not on one of this rowset's rows or its
-     * insert row, or (3) the designated column does not store an
-     * SQL <code>BINARY, VARBINARY</code> or <code><b>LONGVARBINARY</b></code>
-     * The bold type indicates the SQL type that this method is recommened
-     * to retrieve.
-     * @see #getBinaryStream(String)
-     */
-    public java.io.InputStream getBinaryStream(int columnIndex) throws SQLException {
-       throw new UnsupportedOperationException();
-
-    }
-
-
-    //======================================================================
-    // Methods for accessing results by column name
-    //======================================================================
-
-    /**
-     * Retrieves the value stored in the designated column
-     * of the current row as a <code>String</code> object.
-     *
-     * @param columnName a <code>String</code> object giving the SQL name of
-     *        a column in this <code>CachedRowSetImpl</code> object
-     * @return the column value; if the value is SQL <code>NULL</code>,
-     *         the result is <code>null</code>
-     * @throws SQLException if (1) the given column name is not the name of
-     * a column in this rowset, (2) the cursor is not on one of
-     * this rowset's rows or its insert row, or (3) the designated
-     * column does not store an SQL <code>TINYINT, SMALLINT, INTEGER
-     * BIGINT, REAL, FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT, <b>CHAR</b>,
-     * <b>VARCHAR</b></code> or <code>LONGVARCHAR<</code> value. The bold SQL type
-     * designates the recommended return type.
-     */
-    public String getString(String columnName) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Retrieves the value stored in the designated column
-     * of the current row as a <code>boolean</code> value.
-     *
-     * @param columnName a <code>String</code> object giving the SQL name of
-     *        a column in this <code>CachedRowSetImpl</code> object
-     * @return the column value as a <code>boolean</code> in the Java programming
-     *        language; if the value is SQL <code>NULL</code>,
-     *        the result is <code>false</code>
-     * @throws SQLException if (1) the given column name is not the name of
-     *            a column in this rowset, (2) the cursor is not on one of
-     *            this rowset's rows or its insert row, or (3) the designated
-     *            column does not store an SQL <code>BOOLEAN</code> value
-     * @see #getBoolean(int)
-     */
-    public boolean getBoolean(String columnName) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Retrieves the value stored in the designated column
-     * of the current row as a <code>byte</code> value.
-     *
-     * @param columnName a <code>String</code> object giving the SQL name of
-     *        a column in this <code>CachedRowSetImpl</code> object
-     * @return the column value as a <code>byte</code> in the Java programming
-     * language; if the value is SQL <code>NULL</code>, the result is <code>0</code>
-     * @throws SQLException if (1) the given column name is not the name of
-     * a column in this rowset, (2) the cursor is not on one of
-     * this rowset's rows or its insert row, or (3) the designated
-     * column does not store an SQL <code><B>TINYINT</B>, SMALLINT, INTEGER,
-     * BIGINT, REAL, FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT, CHAR,
-     * VARCHAR</code> or <code>LONGVARCHAR</code> value. The
-     * bold type designates the recommended return type
-     */
-    public byte getByte(String columnName) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Retrieves the value stored in the designated column
-     * of the current row as a <code>short</code> value.
-     *
-     * @param columnName a <code>String</code> object giving the SQL name of
-     *        a column in this <code>CachedRowSetImpl</code> object
-     * @return the column value; if the value is SQL <code>NULL</code>,
-     *         the result is <code>0</code>
-     * @throws SQLException if (1) the given column name is not the name of
-     * a column in this rowset, (2) the cursor is not on one of
-     * this rowset's rows or its insert row, or (3) the designated
-     * column does not store an SQL <code>TINYINT, <b>SMALLINT</b>, INTEGER
-     * BIGINT, REAL, FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT, CHAR,
-     * VARCHAR</code> or <code>LONGVARCHAR</code> value. The bold SQL type
-     * designates the recommended return type.
-     * @see #getShort(int)
-     */
-    public short getShort(String columnName) throws SQLException {
-       throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Retrieves the value stored in the designated column
-     * of the current row as an <code>int</code> value.
-     *
-     * @param columnName a <code>String</code> object giving the SQL name of
-     *        a column in this <code>CachedRowSetImpl</code> object
-     * @return the column value; if the value is SQL <code>NULL</code>,
-     *         the result is <code>0</code>
-     * @throws SQLException if (1) the given column name is not the name
-     * of a column in this rowset,
-     * (2) the cursor is not on one of this rowset's rows or its
-     * insert row, or (3) the designated column does not store an
-     * SQL <code>TINYINT, SMALLINT, <b>INTEGER</b>, BIGINT, REAL
-     * FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT, CHAR, VARCHAR</code>
-     * or <code>LONGVARCHAR</code> value. The bold SQL type designates the
-     * recommended return type.
-     */
-    public int getInt(String columnName) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Retrieves the value stored in the designated column
-     * of the current row as a <code>long</code> value.
-     *
-     * @param columnName a <code>String</code> object giving the SQL name of
-     *        a column in this <code>CachedRowSetImpl</code> object
-     * @return the column value; if the value is SQL <code>NULL</code>,
-     *         the result is <code>0</code>
-     * @throws SQLException if (1) the given column name is not the name of
-     * a column in this rowset, (2) the cursor is not on one of
-     * this rowset's rows or its insert row, or (3) the designated
-     * column does not store an SQL <code>TINYINT, SMALLINT, INTEGER
-     * <b>BIGINT</b>, REAL, FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT, CHAR,
-     * VARCHAR</code> or <code>LONGVARCHAR</code> value. The bold SQL type
-     * designates the recommended return type.
-     * @see #getLong(int)
-     */
-    public long getLong(String columnName) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Retrieves the value stored in the designated column
-     * of the current row as a <code>float</code> value.
-     *
-     * @param columnName a <code>String</code> object giving the SQL name of
-     *        a column in this <code>CachedRowSetImpl</code> object
-     * @return the column value; if the value is SQL <code>NULL</code>,
-     *         the result is <code>0</code>
-     * @throws SQLException if (1) the given column name is not the name of
-     * a column in this rowset, (2) the cursor is not on one of
-     * this rowset's rows or its insert row, or (3) the designated
-     * column does not store an SQL <code>TINYINT, SMALLINT, INTEGER
-     * BIGINT, <b>REAL</b>, FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT, CHAR,
-     * VARCHAR</code> or <code>LONGVARCHAR</code> value. The bold SQL type
-     * designates the recommended return type.
-     * @see #getFloat(String)
-     */
-    public float getFloat(String columnName) throws SQLException {
-       throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Retrieves the value stored in the designated column
-     * of the current row of this <code>CachedRowSetImpl</code> object
-     * as a <code>double</code> value.
-     *
-     * @param columnName a <code>String</code> object giving the SQL name of
-     *        a column in this <code>CachedRowSetImpl</code> object
-     * @return the column value; if the value is SQL <code>NULL</code>,
-     *         the result is <code>0</code>
-     * @throws SQLException if (1) the given column name is not the name of
-     * a column in this rowset, (2) the cursor is not on one of
-     * this rowset's rows or its insert row, or (3) the designated
-     * column does not store an SQL <code>TINYINT, SMALLINT, INTEGER
-     * BIGINT, REAL, <b>FLOAT</b>, <b>DOUBLE</b>, DECIMAL, NUMERIC, BIT, CHAR,
-     * VARCHAR</code> or <code>LONGVARCHAR</code> value. The bold SQL type
-     * designates the recommended return types.
-     * @see #getDouble(int)
-     */
-    public double getDouble(String columnName) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Retrieves the value stored in the designated column
-     * of the current row as a <code>java.math.BigDecimal</code> object.
-     *
-     * @param columnName a <code>String</code> object giving the SQL name of
-     *        a column in this <code>CachedRowSetImpl</code> object
-     * @param scale the number of digits to the right of the decimal point
-     * @return a java.math.BugDecimal object with <code><i>scale</i></code>
-     * number of digits to the right of the decimal point.
-     * @throws SQLException if (1) the given column name is not the name of
-     * a column in this rowset, (2) the cursor is not on one of
-     * this rowset's rows or its insert row, or (3) the designated
-     * column does not store an SQL <code>TINYINT, SMALLINT, INTEGER
-     * BIGINT, REAL, FLOAT, DOUBLE, <b>DECIMAL</b>, <b>NUMERIC</b>, BIT CHAR,
-     * VARCHAR</code> or <code>LONGVARCHAR</code> value. The bold SQL type
-     * designates the recommended return type that this method is used to
-     * retrieve.
-     * @deprecated Use the <code>getBigDecimal(String columnName)</code>
-     *             method instead
-     */
-    public BigDecimal getBigDecimal(String columnName, int scale) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Retrieves the value stored in the designated column
-     * of the current row as a <code>byte</code> array.
-     * The bytes represent the raw values returned by the driver.
-     *
-     * @param columnName a <code>String</code> object giving the SQL name of
-     *        a column in this <code>CachedRowSetImpl</code> object
-     * @return the column value as a <code>byte</code> array in the Java programming
-     * language; if the value is SQL <code>NULL</code>, the result is <code>null</code>
-     * @throws SQLException if (1) the given column name is not the name of
-     * a column in this rowset, (2) the cursor is not on one of
-     * this rowset's rows or its insert row, or (3) the designated
-     * column does not store an SQL <code><b>BINARY</b>, <b>VARBINARY</b>
-     * </code> or <code>LONGVARBINARY</code> values
-     * The bold SQL type designates the recommended return type.
-     * @see #getBytes(int)
-     */
-    public byte[] getBytes(String columnName) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Retrieves the value stored in the designated column
-     * of the current row as a <code>java.sql.Date</code> object.
-     *
-     * @param columnName a <code>String</code> object giving the SQL name of
-     *        a column in this <code>CachedRowSetImpl</code> object
-     * @return the column value; if the value is SQL <code>NULL</code>,
-     *         the result is <code>null</code>
-     * @throws SQLException if (1) the given column name is not the name of
-     *            a column in this rowset, (2) the cursor is not on one of
-     *            this rowset's rows or its insert row, or (3) the designated
-     *            column does not store an SQL <code>DATE</code> or
-     *            <code>TIMESTAMP</code> value
-     */
-    public java.sql.Date getDate(String columnName) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Retrieves the value stored in the designated column
-     * of the current row as a <code>java.sql.Time</code> object.
-     *
-     * @param columnName a <code>String</code> object giving the SQL name of
-     *        a column in this <code>CachedRowSetImpl</code> object
-     * @return the column value; if the value is SQL <code>NULL</code>,
-     *         the result is <code>null</code>
-     * @throws SQLException if the given column name does not match one of
-     *            this rowset's column names or the cursor is not on one of
-     *            this rowset's rows or its insert row
-     */
-    public java.sql.Time getTime(String columnName) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Retrieves the value stored in the designated column
-     * of the current row as a <code>java.sql.Timestamp</code> object.
-     *
-     * @param columnName a <code>String</code> object giving the SQL name of
-     *        a column in this <code>CachedRowSetImpl</code> object
-     * @return the column value; if the value is SQL <code>NULL</code>,
-     *         the result is <code>null</code>
-     * @throws SQLException if the given column name does not match one of
-     *            this rowset's column names or the cursor is not on one of
-     *            this rowset's rows or its insert row
-     */
-    public java.sql.Timestamp getTimestamp(String columnName) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row of this
-     * <code>CachedRowSetImpl</code> object as a <code>java.io.InputStream</code>
-     * object.
-     *
-     * A column value can be retrieved as a stream of ASCII characters
-     * and then read in chunks from the stream. This method is particularly
-     * suitable for retrieving large <code>LONGVARCHAR</code> values. The
-     * <code>SyncProvider</code> will rely on the JDBC driver to do any necessary
-     * conversion from the database format into ASCII format.
-     *
-     * <P><B>Note:</B> All the data in the returned stream must
-     * be read prior to getting the value of any other column. The
-     * next call to a <code>getXXX</code> method implicitly closes the stream.
-     *
-     * @param columnName a <code>String</code> object giving the SQL name of
-     *        a column in this <code>CachedRowSetImpl</code> object
-     * @return a Java input stream that delivers the database column value
-     *         as a stream of one-byte ASCII characters.  If the value is SQL
-     *         <code>NULL</code>, the result is <code>null</code>.
-     * @throws SQLException if (1) the given column name is not the name of
-     * a column in this rowset
-     * (2) the cursor is not on one of this rowset's rows or its
-     * insert row, or (3) the designated column does not store an
-     * SQL <code>CHAR, VARCHAR</code>, <code><b>LONGVARCHAR</b></code>
-     * <code>BINARY, VARBINARY</code> or <code>LONGVARBINARY</code> value. The
-     * bold SQL type designates the recommended return types that this method is
-     * used to retrieve.
-     * @see #getAsciiStream(int)
-     */
-    public java.io.InputStream getAsciiStream(String columnName) throws SQLException {
-        throw new UnsupportedOperationException();
-
-    }
-
-    /**
-     * A column value can be retrieved as a stream of Unicode characters
-     * and then read in chunks from the stream.  This method is particularly
-     * suitable for retrieving large <code>LONGVARCHAR</code> values.
-     * The JDBC driver will do any necessary conversion from the database
-     * format into Unicode.
-     *
-     * <P><B>Note:</B> All the data in the returned stream must
-     * be read prior to getting the value of any other column. The
-     * next call to a <code>getXXX</code> method implicitly closes the stream.
-     *
-     * @param columnName a <code>String</code> object giving the SQL name of
-     *        a column in this <code>CachedRowSetImpl</code> object
-     * @return a Java input stream that delivers the database column value
-     *         as a stream of two-byte Unicode characters.  If the value is
-     *         SQL <code>NULL</code>, the result is <code>null</code>.
-     * @throws SQLException if the given column name does not match one of
-     *            this rowset's column names or the cursor is not on one of
-     *            this rowset's rows or its insert row
-     * @deprecated use the method <code>getCharacterStream</code> instead
-     */
-    public java.io.InputStream getUnicodeStream(String columnName) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row of this
-     * <code>CachedRowSetImpl</code> object as a <code>java.io.InputStream</code>
-     * object.
-     * <P>
-     * A column value can be retrieved as a stream of uninterpreted bytes
-     * and then read in chunks from the stream.  This method is particularly
-     * suitable for retrieving large <code>LONGVARBINARY</code> values.
-     *
-     * <P><B>Note:</B> All the data in the returned stream must be
-     * read prior to getting the value of any other column. The next
-     * call to a get method implicitly closes the stream. Also, a
-     * stream may return <code>0</code> for <code>CachedRowSetImpl.available()</code>
-     * whether there is data available or not.
-     *
-     * @param columnName a <code>String</code> object giving the SQL name of
-     *        a column in this <code>CachedRowSetImpl</code> object
-     * @return a Java input stream that delivers the database column value
-     *         as a stream of uninterpreted bytes.  If the value is SQL
-     *         <code>NULL</code>, the result is <code>null</code>.
-     * @throws SQLException if (1) the given column name is unknown,
-     * (2) the cursor is not on one of this rowset's rows or its
-     * insert row, or (3) the designated column does not store an
-     * SQL <code>BINARY, VARBINARY</code> or <code><b>LONGVARBINARY</b></code>
-     * The bold type indicates the SQL type that this method is recommened
-     * to retrieve.
-     * @see #getBinaryStream(int)
-     *
-     */
-    public java.io.InputStream getBinaryStream(String columnName) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-
-    //=====================================================================
-    // Advanced features:
-    //=====================================================================
-
-    /**
-     * The first warning reported by calls on this <code>CachedRowSetImpl</code>
-     * object is returned. Subsequent <code>CachedRowSetImpl</code> warnings will
-     * be chained to this <code>SQLWarning</code>.
-     *
-     * <P>The warning chain is automatically cleared each time a new
-     * row is read.
-     *
-     * <P><B>Note:</B> This warning chain only covers warnings caused
-     * by <code>ResultSet</code> methods.  Any warning caused by statement
-     * methods (such as reading OUT parameters) will be chained on the
-     * <code>Statement</code> object.
-     *
-     * @return the first SQLWarning or null
-     */
-    public SQLWarning getWarnings() {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Clears all the warnings reporeted for the <code>CachedRowSetImpl</code>
-     * object. After a call to this method, the <code>getWarnings</code> method
-     * returns <code>null</code> until a new warning is reported for this
-     * <code>CachedRowSetImpl</code> object.
-     */
-    public void clearWarnings() {
-       throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Retrieves the name of the SQL cursor used by this
-     * <code>CachedRowSetImpl</code> object.
-     *
-     * <P>In SQL, a result table is retrieved through a cursor that is
-     * named. The current row of a <code>ResultSet</code> can be updated or deleted
-     * using a positioned update/delete statement that references the
-     * cursor name. To ensure that the cursor has the proper isolation
-     * level to support an update operation, the cursor's <code>SELECT</code>
-     * statement should be of the form <code>select for update</code>.
-     * If the <code>for update</code> clause
-     * is omitted, positioned updates may fail.
-     *
-     * <P>JDBC supports this SQL feature by providing the name of the
-     * SQL cursor used by a <code>ResultSet</code> object. The current row
-     * of a result set is also the current row of this SQL cursor.
-     *
-     * <P><B>Note:</B> If positioned updates are not supported, an
-     * <code>SQLException</code> is thrown.
-     *
-     * @return the SQL cursor name for this <code>CachedRowSetImpl</code> object's
-     *         cursor
-     * @throws SQLException if an error occurs
-     */
-    public String getCursorName() throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Retrieves a <code>ResultSetMetaData</code> object instance that
-     * contains information about the <code>CachedRowSet</code> object.
-     * However, applications should cast the returned object to a
-     * <code>RowSetMetaData</code> interface implementation. In the
-     * reference implementation, this cast can be done on the
-     * <code>RowSetMetaDataImpl</code> class.
-     * <P>
-     * For example:
-     * <pre>
-     * CachedRowSet crs = new CachedRowSetImpl();
-     * RowSetMetaDataImpl metaData =
-     *     (RowSetMetaDataImpl)crs.getMetaData();
-     * // Set the number of columns in the RowSet object for
-     * // which this RowSetMetaDataImpl object was created to the
-     * // given number.
-     * metaData.setColumnCount(3);
-     * crs.setMetaData(metaData);
-     * </pre>
-     *
-     * @return the <code>ResultSetMetaData</code> object that describes this
-     *         <code>CachedRowSetImpl</code> object's columns
-     * @throws SQLException if an error occurs in generating the RowSet
-     * meta data; or if the <code>CachedRowSetImpl</code> is empty.
-     * @see javax.sql.RowSetMetaData
-     */
-    public ResultSetMetaData getMetaData() throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-
-    /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>CachedRowSetImpl</code> object as an
-     * <code>Object</code> value.
-     * <P>
-     * The type of the <code>Object</code> will be the default
-     * Java object type corresponding to the column's SQL type,
-     * following the mapping for built-in types specified in the JDBC 3.0
-     * specification.
-     * <P>
-     * This method may also be used to read datatabase-specific
-     * abstract data types.
-     * <P>
-     * This implementation of the method <code>getObject</code> extends its
-     * behavior so that it gets the attributes of an SQL structured type
-     * as an array of <code>Object</code> values.  This method also custom
-     * maps SQL user-defined types to classes in the Java programming language.
-     * When the specified column contains
-     * a structured or distinct value, the behavior of this method is as
-     * if it were a call to the method <code>getObject(columnIndex,
-     * this.getStatement().getConnection().getTypeMap())</code>.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in the rowset
-     * @return a <code>java.lang.Object</code> holding the column value;
-     *         if the value is SQL <code>NULL</code>, the result is <code>null</code>
-     * @throws SQLException if the given column index is out of bounds,
-     *            the cursor is not on a valid row, or there is a problem getting
-     *            the <code>Class</code> object for a custom mapping
-     * @see #getObject(String)
-     */
-    public Object getObject(int columnIndex) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>CachedRowSetImpl</code> object as an
-     * <code>Object</code> value.
-     * <P>
-     * The type of the <code>Object</code> will be the default
-     * Java object type corresponding to the column's SQL type,
-     * following the mapping for built-in types specified in the JDBC 3.0
-     * specification.
-     * <P>
-     * This method may also be used to read datatabase-specific
-     * abstract data types.
-     * <P>
-     * This implementation of the method <code>getObject</code> extends its
-     * behavior so that it gets the attributes of an SQL structured type
-     * as an array of <code>Object</code> values.  This method also custom
-     * maps SQL user-defined types to classes
-     * in the Java programming language. When the specified column contains
-     * a structured or distinct value, the behavior of this method is as
-     * if it were a call to the method <code>getObject(columnIndex,
-     * this.getStatement().getConnection().getTypeMap())</code>.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @return a <code>java.lang.Object</code> holding the column value;
-     *         if the value is SQL <code>NULL</code>, the result is <code>null</code>
-     * @throws SQLException if (1) the given column name does not match one of
-     *            this rowset's column names, (2) the cursor is not
-     *            on a valid row, or (3) there is a problem getting
-     *            the <code>Class</code> object for a custom mapping
-     * @see #getObject(int)
-     */
-    public Object getObject(String columnName) throws SQLException {
-       throw new UnsupportedOperationException();
-    }
-
-    //----------------------------------------------------------------
-
-    /**
-     * Maps the given column name for one of this <code>CachedRowSetImpl</code>
-     * object's columns to its column number.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @return the column index of the given column name
-     * @throws SQLException if the given column name does not match one
-     *            of this rowset's column names
-     */
-    public int findColumn(String columnName) throws SQLException {
-       throw new UnsupportedOperationException();
-    }
-
-    //--------------------------JDBC 2.0-----------------------------------
-
-    //---------------------------------------------------------------------
-    // Getter's and Setter's
-    //---------------------------------------------------------------------
-
-    /**
-     * Retrieves the value stored in the designated column
-     * of the current row as a <code>java.io.Reader</code> object.
-     *
-     * <P><B>Note:</B> All the data in the returned stream must
-     * be read prior to getting the value of any other column. The
-     * next call to a <code>getXXX</code> method implicitly closes the stream.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in the rowset
-     * @return a Java character stream that delivers the database column value
-     * as a stream of two-byte unicode characters in a
-     * <code>java.io.Reader</code> object.  If the value is
-     * SQL <code>NULL</code>, the result is <code>null</code>.
-     * @throws SQLException if (1) the given column index is out of bounds,
-     * (2) the cursor is not on one of this rowset's rows or its
-     * insert row, or (3) the designated column does not store an
-     * SQL <code>CHAR, VARCHAR, <b>LONGVARCHAR</b>, BINARY, VARBINARY</code> or
-     * <code>LONGVARBINARY</code> value.
-     * The bold SQL type designates the recommended return type.
-     * @see #getCharacterStream(String)
-     */
-    public java.io.Reader getCharacterStream(int columnIndex) throws SQLException{
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Retrieves the value stored in the designated column
-     * of the current row as a <code>java.io.Reader</code> object.
-     *
-     * <P><B>Note:</B> All the data in the returned stream must
-     * be read prior to getting the value of any other column. The
-     * next call to a <code>getXXX</code> method implicitly closes the stream.
-     *
-     * @param columnName a <code>String</code> object giving the SQL name of
-     *        a column in this <code>CachedRowSetImpl</code> object
-     * @return a Java input stream that delivers the database column value
-     *         as a stream of two-byte Unicode characters.  If the value is
-     *         SQL <code>NULL</code>, the result is <code>null</code>.
-     * @throws SQLException if (1) the given column name is not the name of
-     * a column in this rowset, (2) the cursor is not on one of
-     * this rowset's rows or its insert row, or (3) the designated
-     * column does not store an SQL <code>CHAR, VARCHAR, <b>LONGVARCHAR</b>,
-     * BINARY, VARYBINARY</code> or <code>LONGVARBINARY</code> value.
-     * The bold SQL type designates the recommended return type.
-     */
-    public java.io.Reader getCharacterStream(String columnName) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>CachedRowSetImpl</code> object as a
-     * <code>java.math.BigDecimal</code> object.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in the rowset
-     * @return a <code>java.math.BigDecimal</code> value with full precision;
-     *         if the value is SQL <code>NULL</code>, the result is <code>null</code>
-     * @throws SQLException if (1) the given column index is out of bounds,
-     * (2) the cursor is not on one of this rowset's rows or its
-     * insert row, or (3) the designated column does not store an
-     * SQL <code>TINYINT, SMALLINT, INTEGER, BIGINT, REAL,
-     * FLOAT, DOUBLE, <b>DECIMAL</b>, <b>NUMERIC</b>, BIT, CHAR, VARCHAR</code>
-     * or <code>LONGVARCHAR</code> value. The bold SQL type designates the
-     * recommended return types that this method is used to retrieve.
-     * @see #getBigDecimal(String)
-     */
-    public BigDecimal getBigDecimal(int columnIndex) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>CachedRowSetImpl</code> object as a
-     * <code>java.math.BigDecimal</code> object.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @return a <code>java.math.BigDecimal</code> value with full precision;
-     *         if the value is SQL <code>NULL</code>, the result is <code>null</code>
-     * @throws SQLException if (1) the given column name is not the name of
-     * a column in this rowset, (2) the cursor is not on one of
-     * this rowset's rows or its insert row, or (3) the designated
-     * column does not store an SQL <code>TINYINT, SMALLINT, INTEGER
-     * BIGINT, REAL, FLOAT, DOUBLE, <b>DECIMAL</b>, <b>NUMERIC</b>, BIT CHAR,
-     * VARCHAR</code> or <code>LONGVARCHAR</code> value. The bold SQL type
-     * designates the recommended return type that this method is used to
-     * retrieve
-     * @see #getBigDecimal(int)
-     */
-    public BigDecimal getBigDecimal(String columnName) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    //---------------------------------------------------------------------
-    // Traversal/Positioning
-    //---------------------------------------------------------------------
-
-    /**
-     * Returns the number of rows in this <code>CachedRowSetImpl</code> object.
-     *
-     * @return number of rows in the rowset
-     */
-    public int size() {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Indicates whether the cursor is before the first row in this
-     * <code>CachedRowSetImpl</code> object.
-     *
-     * @return <code>true</code> if the cursor is before the first row;
-     *         <code>false</code> otherwise or if the rowset contains no rows
-     * @throws SQLException if an error occurs
-     */
-    public boolean isBeforeFirst() throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Indicates whether the cursor is after the last row in this
-     * <code>CachedRowSetImpl</code> object.
-     *
-     * @return <code>true</code> if the cursor is after the last row;
-     *         <code>false</code> otherwise or if the rowset contains no rows
-     * @throws SQLException if an error occurs
-     */
-    public boolean isAfterLast() throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Indicates whether the cursor is on the first row in this
-     * <code>CachedRowSetImpl</code> object.
-     *
-     * @return <code>true</code> if the cursor is on the first row;
-     *         <code>false</code> otherwise or if the rowset contains no rows
-     * @throws SQLException if an error occurs
-     */
-    public boolean isFirst() throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Indicates whether the cursor is on the last row in this
-     * <code>CachedRowSetImpl</code> object.
-     * <P>
-     * Note: Calling the method <code>isLast</code> may be expensive
-     * because the JDBC driver might need to fetch ahead one row in order
-     * to determine whether the current row is the last row in this rowset.
-     *
-     * @return <code>true</code> if the cursor is on the last row;
-     *         <code>false</code> otherwise or if this rowset contains no rows
-     * @throws SQLException if an error occurs
-     */
-    public boolean isLast() throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Moves this <code>CachedRowSetImpl</code> object's cursor to the front of
-     * the rowset, just before the first row. This method has no effect if
-     * this rowset contains no rows.
-     *
-     * @throws SQLException if an error occurs or the type of this rowset
-     *            is <code>ResultSet.TYPE_FORWARD_ONLY</code>
-     */
-    public void beforeFirst() throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Moves this <code>CachedRowSetImpl</code> object's cursor to the end of
-     * the rowset, just after the last row. This method has no effect if
-     * this rowset contains no rows.
-     *
-     * @throws SQLException if an error occurs
-     */
-    public void afterLast() throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Moves this <code>CachedRowSetImpl</code> object's cursor to the first row
-     * and returns <code>true</code> if the operation was successful.  This
-     * method also notifies registered listeners that the cursor has moved.
-     *
-     * @return <code>true</code> if the cursor is on a valid row;
-     *         <code>false</code> otherwise or if there are no rows in this
-     *         <code>CachedRowSetImpl</code> object
-     * @throws SQLException if the type of this rowset
-     *            is <code>ResultSet.TYPE_FORWARD_ONLY</code>
-     */
-    public boolean first() throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Moves this <code>CachedRowSetImpl</code> object's cursor to the first
-     * row and returns <code>true</code> if the operation is successful.
-     * <P>
-     * This method is called internally by the methods <code>first</code>,
-     * <code>isFirst</code>, and <code>absolute</code>.
-     * It in turn calls the method <code>internalNext</code> in order to
-     * handle the case where the first row is a deleted row that is not visible.
-     * <p>
-     * This is a implementation only method and is not required as a standard
-     * implementation of the <code>CachedRowSet</code> interface.
-     *
-     * @return <code>true</code> if the cursor moved to the first row;
-     *         <code>false</code> otherwise
-     * @throws SQLException if an error occurs
-     */
-    protected boolean internalFirst() throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Moves this <code>CachedRowSetImpl</code> object's cursor to the last row
-     * and returns <code>true</code> if the operation was successful.  This
-     * method also notifies registered listeners that the cursor has moved.
-     *
-     * @return <code>true</code> if the cursor is on a valid row;
-     *         <code>false</code> otherwise or if there are no rows in this
-     *         <code>CachedRowSetImpl</code> object
-     * @throws SQLException if the type of this rowset
-     *            is <code>ResultSet.TYPE_FORWARD_ONLY</code>
-     */
-    public boolean last() throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Moves this <code>CachedRowSetImpl</code> object's cursor to the last
-     * row and returns <code>true</code> if the operation is successful.
-     * <P>
-     * This method is called internally by the method <code>last</code>
-     * when rows have been deleted and the deletions are not visible.
-     * The method <code>internalLast</code> handles the case where the
-     * last row is a deleted row that is not visible by in turn calling
-     * the method <code>internalPrevious</code>.
-     * <p>
-     * This is a implementation only method and is not required as a standard
-     * implementation of the <code>CachedRowSet</code> interface.
-     *
-     * @return <code>true</code> if the cursor moved to the last row;
-     *         <code>false</code> otherwise
-     * @throws SQLException if an error occurs
-     */
-    protected boolean internalLast() throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Returns the number of the current row in this <code>CachedRowSetImpl</code>
-     * object. The first row is number 1, the second number 2, and so on.
-     *
-     * @return the number of the current row;  <code>0</code> if there is no
-     *         current row
-     * @throws SQLException if an error occurs; or if the <code>CacheRowSetImpl</code>
-     *         is empty
-     */
-    public int getRow() throws SQLException {
-        return crsSync.getRow();
-    }
-
-    /**
-     * Moves this <code>CachedRowSetImpl</code> object's cursor to the row number
-     * specified.
-     *
-     * <p>If the number is positive, the cursor moves to an absolute row with
-     * respect to the beginning of the rowset.  The first row is row 1, the second
-     * is row 2, and so on.  For example, the following command, in which
-     * <code>crs</code> is a <code>CachedRowSetImpl</code> object, moves the cursor
-     * to the fourth row, starting from the beginning of the rowset.
-     * <PRE><code>
-     *
-     *    crs.absolute(4);
-     *
-     * </code> </PRE>
-     * <P>
-     * If the number is negative, the cursor moves to an absolute row position
-     * with respect to the end of the rowset.  For example, calling
-     * <code>absolute(-1)</code> positions the cursor on the last row,
-     * <code>absolute(-2)</code> moves it on the next-to-last row, and so on.
-     * If the <code>CachedRowSetImpl</code> object <code>crs</code> has five rows,
-     * the following command moves the cursor to the fourth-to-last row, which
-     * in the case of a  rowset with five rows, is also the second row, counting
-     * from the beginning.
-     * <PRE><code>
-     *
-     *    crs.absolute(-4);
-     *
-     * </code> </PRE>
-     *
-     * If the number specified is larger than the number of rows, the cursor
-     * will move to the position after the last row. If the number specified
-     * would move the cursor one or more rows before the first row, the cursor
-     * moves to the position before the first row.
-     * <P>
-     * Note: Calling <code>absolute(1)</code> is the same as calling the
-     * method <code>first()</code>.  Calling <code>absolute(-1)</code> is the
-     * same as calling <code>last()</code>.
-     *
-     * @param row a positive number to indicate the row, starting row numbering from
-     *        the first row, which is <code>1</code>; a negative number to indicate
-     *        the row, starting row numbering from the last row, which is
-     *        <code>-1</code>; it must not be <code>0</code>
-     * @return <code>true</code> if the cursor is on the rowset; <code>false</code>
-     *         otherwise
-     * @throws SQLException if the given cursor position is <code>0</code> or the
-     *            type of this rowset is <code>ResultSet.TYPE_FORWARD_ONLY</code>
-     */
-    public boolean absolute( int row ) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Moves the cursor the specified number of rows from the current
-     * position, with a positive number moving it forward and a
-     * negative number moving it backward.
-     * <P>
-     * If the number is positive, the cursor moves the specified number of
-     * rows toward the end of the rowset, starting at the current row.
-     * For example, the following command, in which
-     * <code>crs</code> is a <code>CachedRowSetImpl</code> object with 100 rows,
-     * moves the cursor forward four rows from the current row.  If the
-     * current row is 50, the cursor would move to row 54.
-     * <PRE><code>
-     *
-     *    crs.relative(4);
-     *
-     * </code> </PRE>
-     * <P>
-     * If the number is negative, the cursor moves back toward the beginning
-     * the specified number of rows, starting at the current row.
-     * For example, calling the method
-     * <code>absolute(-1)</code> positions the cursor on the last row,
-     * <code>absolute(-2)</code> moves it on the next-to-last row, and so on.
-     * If the <code>CachedRowSetImpl</code> object <code>crs</code> has five rows,
-     * the following command moves the cursor to the fourth-to-last row, which
-     * in the case of a  rowset with five rows, is also the second row
-     * from the beginning.
-     * <PRE><code>
-     *
-     *    crs.absolute(-4);
-     *
-     * </code> </PRE>
-     *
-     * If the number specified is larger than the number of rows, the cursor
-     * will move to the position after the last row. If the number specified
-     * would move the cursor one or more rows before the first row, the cursor
-     * moves to the position before the first row. In both cases, this method
-     * throws an <code>SQLException</code>.
-     * <P>
-     * Note: Calling <code>absolute(1)</code> is the same as calling the
-     * method <code>first()</code>.  Calling <code>absolute(-1)</code> is the
-     * same as calling <code>last()</code>.  Calling <code>relative(0)</code>
-     * is valid, but it does not change the cursor position.
-     *
-     * @param rows an <code>int</code> indicating the number of rows to move
-     *             the cursor, starting at the current row; a positive number
-     *             moves the cursor forward; a negative number moves the cursor
-     *             backward; must not move the cursor past the valid
-     *             rows
-     * @return <code>true</code> if the cursor is on a row in this
-     *         <code>CachedRowSetImpl</code> object; <code>false</code>
-     *         otherwise
-     * @throws SQLException if there are no rows in this rowset, the cursor is
-     *         positioned either before the first row or after the last row, or
-     *         the rowset is type <code>ResultSet.TYPE_FORWARD_ONLY</code>
-     */
-    public boolean relative(int rows) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Moves this <code>CachedRowSetImpl</code> object's cursor to the
-     * previous row and returns <code>true</code> if the cursor is on
-     * a valid row or <code>false</code> if it is not.
-     * This method also notifies all listeners registered with this
-     * <code>CachedRowSetImpl</code> object that its cursor has moved.
-     * <P>
-     * Note: calling the method <code>previous()</code> is not the same
-     * as calling the method <code>relative(-1)</code>.  This is true
-     * because it is possible to call <code>previous()</code> from the insert
-     * row, from after the last row, or from the current row, whereas
-     * <code>relative</code> may only be called from the current row.
-     * <P>
-     * The method <code>previous</code> may used in a <code>while</code>
-     * loop to iterate through a rowset starting after the last row
-     * and moving toward the beginning. The loop ends when <code>previous</code>
-     * returns <code>false</code>, meaning that there are no more rows.
-     * For example, the following code fragment retrieves all the data in
-     * the <code>CachedRowSetImpl</code> object <code>crs</code>, which has
-     * three columns.  Note that the cursor must initially be positioned
-     * after the last row so that the first call to the method
-     * <code>previous</code> places the cursor on the last line.
-     * <PRE> <code>
-     *
-     *     crs.afterLast();
-     *     while (previous()) {
-     *         String name = crs.getString(1);
-     *         int age = crs.getInt(2);
-     *         short ssn = crs.getShort(3);
-     *         System.out.println(name + "   " + age + "   " + ssn);
-     *     }
-     *
-     * </code> </PRE>
-     * This method throws an <code>SQLException</code> if the cursor is not
-     * on a row in the rowset, before the first row, or after the last row.
-     *
-     * @return <code>true</code> if the cursor is on a valid row;
-     *         <code>false</code> if it is before the first row or after the
-     *         last row
-     * @throws SQLException if the cursor is not on a valid position or the
-     *           type of this rowset is <code>ResultSet.TYPE_FORWARD_ONLY</code>
-     */
-    public boolean previous() throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Moves the cursor to the previous row in this <code>CachedRowSetImpl</code>
-     * object, skipping past deleted rows that are not visible; returns
-     * <code>true</code> if the cursor is on a row in this rowset and
-     * <code>false</code> when the cursor goes before the first row.
-     * <P>
-     * This method is called internally by the method <code>previous</code>.
-     * <P>
-     * This is a implementation only method and is not required as a standard
-     * implementation of the <code>CachedRowSet</code> interface.
-     *
-     * @return <code>true</code> if the cursor is on a row in this rowset;
-     *         <code>false</code> when the cursor reaches the position before
-     *         the first row
-     * @throws SQLException if an error occurs
-     */
-    protected boolean internalPrevious() throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-
-    //---------------------------------------------------------------------
-    // Updates
-    //---------------------------------------------------------------------
-
-    /**
-     * Indicates whether the current row of this <code>CachedRowSetImpl</code>
-     * object has been updated.  The value returned
-     * depends on whether this rowset can detect updates: <code>false</code>
-     * will always be returned if it does not detect updates.
-     *
-     * @return <code>true</code> if the row has been visibly updated
-     *         by the owner or another and updates are detected;
-     *         <code>false</code> otherwise
-     * @throws SQLException if the cursor is on the insert row or not
-     *            not on a valid row
-     *
-     * @see DatabaseMetaData#updatesAreDetected
-     */
-    public boolean rowUpdated() throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Indicates whether the designated column of the current row of
-     * this <code>CachedRowSetImpl</code> object has been updated. The
-     * value returned depends on whether this rowset can detcted updates:
-     * <code>false</code> will always be returned if it does not detect updates.
-     *
-     * @param idx the index identifier of the column that may be have been updated.
-     * @return <code>true</code> is the designated column has been updated
-     * and the rowset detects updates; <code>false</code> if the rowset has not
-     * been updated or the rowset does not detect updates
-     * @throws SQLException if the cursor is on the insert row or not
-     *          on a valid row
-     * @see DatabaseMetaData#updatesAreDetected
-     */
-    public boolean columnUpdated(int idx) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Indicates whether the designated column of the current row of
-     * this <code>CachedRowSetImpl</code> object has been updated. The
-     * value returned depends on whether this rowset can detcted updates:
-     * <code>false</code> will always be returned if it does not detect updates.
-     *
-     * @param columnName the <code>String</code> column name column that may be have
-     * been updated.
-     * @return <code>true</code> is the designated column has been updated
-     * and the rowset detects updates; <code>false</code> if the rowset has not
-     * been updated or the rowset does not detect updates
-     * @throws SQLException if the cursor is on the insert row or not
-     *          on a valid row
-     * @see DatabaseMetaData#updatesAreDetected
-     */
-    public boolean columnUpdated(String columnName) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Indicates whether the current row has been inserted.  The value returned
-     * depends on whether or not the rowset can detect visible inserts.
-     *
-     * @return <code>true</code> if a row has been inserted and inserts are detected;
-     *         <code>false</code> otherwise
-     * @throws SQLException if the cursor is on the insert row or not
-     *            not on a valid row
-     *
-     * @see DatabaseMetaData#insertsAreDetected
-     */
-    public boolean rowInserted() throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Indicates whether the current row has been deleted.  A deleted row
-     * may leave a visible "hole" in a rowset.  This method can be used to
-     * detect such holes if the rowset can detect deletions. This method
-     * will always return <code>false</code> if this rowset cannot detect
-     * deletions.
-     *
-     * @return <code>true</code> if (1)the current row is blank, indicating that
-     *         the row has been deleted, and (2)deletions are detected;
-     *         <code>false</code> otherwise
-     * @throws SQLException if the cursor is on a valid row in this rowset
-     * @see DatabaseMetaData#deletesAreDetected
-     */
-    public boolean rowDeleted() throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Sets the designated nullable column in the current row or the
-     * insert row of this <code>CachedRowSetImpl</code> object with
-     * <code>null</code> value.
-     * <P>
-     * This method updates a column value in the current row or the insert
-     * row of this rowset; however, another method must be called to complete
-     * the update process. If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to mark the row as updated
-     * and to notify listeners that the row has changed.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called to insert the new row into this rowset and to notify
-     * listeners that a row has changed.
-     * <P>
-     * In order to propagate updates in this rowset to the underlying
-     * data source, an application must call the method {@link #acceptChanges}
-     * after it calls either <code>updateRow</code> or <code>insertRow</code>.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateNull(int columnIndex) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>boolean</code> value.
-     * <P>
-     * This method updates a column value in the current row or the insert
-     * row of this rowset, but it does not update the database.
-     * If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param x the new column value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateBoolean(int columnIndex, boolean x) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>byte</code> value.
-     * <P>
-     * This method updates a column value in the current row or the insert
-     * row of this rowset, but it does not update the database.
-     * If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param x the new column value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateByte(int columnIndex, byte x) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>short</code> value.
-     * <P>
-     * This method updates a column value in the current row or the insert
-     * row of this rowset, but it does not update the database.
-     * If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param x the new column value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateShort(int columnIndex, short x) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>int</code> value.
-     * <P>
-     * This method updates a column value in the current row or the insert
-     * row of this rowset, but it does not update the database.
-     * If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param x the new column value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateInt(int columnIndex, int x) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>long</code> value.
-     * <P>
-     * This method updates a column value in the current row or the insert
-     * row of this rowset, but it does not update the database.
-     * If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param x the new column value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateLong(int columnIndex, long x) throws SQLException {
-       throw new UnsupportedOperationException();
-
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>float</code> value.
-     * <P>
-     * This method updates a column value in the current row or the insert
-     * row of this rowset, but it does not update the database.
-     * If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param x the new column value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateFloat(int columnIndex, float x) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>double</code> value.
-     *
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param x the new column value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateDouble(int columnIndex, double x) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>java.math.BigDecimal</code> object.
-     * <P>
-     * This method updates a column value in the current row or the insert
-     * row of this rowset, but it does not update the database.
-     * If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param x the new column value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateBigDecimal(int columnIndex, BigDecimal x) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>String</code> object.
-     * <P>
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to mark the row as updated.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called to insert the new row into this rowset and mark it
-     * as inserted. Both of these methods must be called before the
-     * cursor moves to another row.
-     * <P>
-     * The method <code>acceptChanges</code> must be called if the
-     * updated values are to be written back to the underlying database.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param x the new column value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateString(int columnIndex, String x) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>byte</code> array.
-     *
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param x the new column value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateBytes(int columnIndex, byte x[]) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>Date</code> object.
-     *
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param x the new column value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, (3) the type of the designated column is not
-     *            an SQL <code>DATE</code> or <code>TIMESTAMP</code>, or
-     *            (4) this rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateDate(int columnIndex, java.sql.Date x) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>Time</code> object.
-     *
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param x the new column value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, (3) the type of the designated column is not
-     *            an SQL <code>TIME</code> or <code>TIMESTAMP</code>, or
-     *            (4) this rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateTime(int columnIndex, java.sql.Time x) throws SQLException {
-       throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>Timestamp</code> object.
-     *
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param x the new column value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, (3) the type of the designated column is not
-     *            an SQL <code>DATE</code>, <code>TIME</code>, or
-     *            <code>TIMESTAMP</code>, or (4) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateTimestamp(int columnIndex, java.sql.Timestamp x) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * ASCII stream value.
-     * <P>
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param x the new column value
-     * @param length the number of one-byte ASCII characters in the stream
-     * @throws SQLException if this method is invoked
-     */
-    public void updateAsciiStream(int columnIndex, java.io.InputStream x, int length) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>java.io.InputStream</code> object.
-     * <P>
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param x the new column value; must be a <code>java.io.InputStream</code>
-     *          containing <code>BINARY</code>, <code>VARBINARY</code>, or
-     *          <code>LONGVARBINARY</code> data
-     * @param length the length of the stream in bytes
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, (3) the data in the stream is not binary, or
-     *            (4) this rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateBinaryStream(int columnIndex, java.io.InputStream x,int length) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>java.io.Reader</code> object.
-     * <P>
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param x the new column value; must be a <code>java.io.Reader</code>
-     *          containing <code>BINARY</code>, <code>VARBINARY</code>,
-     *          <code>LONGVARBINARY</code>, <code>CHAR</code>, <code>VARCHAR</code>,
-     *          or <code>LONGVARCHAR</code> data
-     * @param length the length of the stream in characters
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, (3) the data in the stream is not a binary or
-     *            character type, or (4) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateCharacterStream(int columnIndex, java.io.Reader x, int length) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>Object</code> value.  The <code>scale</code> parameter indicates
-     * the number of digits to the right of the decimal point and is ignored
-     * if the new column value is not a type that will be mapped to an SQL
-     * <code>DECIMAL</code> or <code>NUMERIC</code> value.
-     * <P>
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param x the new column value
-     * @param scale the number of digits to the right of the decimal point (for
-     *              <code>DECIMAL</code> and <code>NUMERIC</code> types only)
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateObject(int columnIndex, Object x, int scale) throws SQLException {
-       throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>Object</code> value.
-     * <P>
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param x the new column value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateObject(int columnIndex, Object x) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-
-    /**
-     * Sets the designated nullable column in the current row or the
-     * insert row of this <code>CachedRowSetImpl</code> object with
-     * <code>null</code> value.
-     * <P>
-     * This method updates a column value in the current row or the insert
-     * row of this rowset, but it does not update the database.
-     * If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateNull(String columnName) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>boolean</code> value.
-     * <P>
-     * This method updates a column value in the current row or the insert
-     * row of this rowset, but it does not update the database.
-     * If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param x the new column value
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateBoolean(String columnName, boolean x) throws SQLException {
-       throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>byte</code> value.
-     * <P>
-     * This method updates a column value in the current row or the insert
-     * row of this rowset, but it does not update the database.
-     * If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param x the new column value
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateByte(String columnName, byte x) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>short</code> value.
-     * <P>
-     * This method updates a column value in the current row or the insert
-     * row of this rowset, but it does not update the database.
-     * If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param x the new column value
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateShort(String columnName, short x) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>int</code> value.
-     * <P>
-     * This method updates a column value in the current row or the insert
-     * row of this rowset, but it does not update the database.
-     * If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param x the new column value
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateInt(String columnName, int x) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>long</code> value.
-     * <P>
-     * This method updates a column value in the current row or the insert
-     * row of this rowset, but it does not update the database.
-     * If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param x the new column value
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateLong(String columnName, long x) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>float</code> value.
-     * <P>
-     * This method updates a column value in the current row or the insert
-     * row of this rowset, but it does not update the database.
-     * If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param x the new column value
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateFloat(String columnName, float x) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>double</code> value.
-     *
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param x the new column value
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateDouble(String columnName, double x) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>java.math.BigDecimal</code> object.
-     * <P>
-     * This method updates a column value in the current row or the insert
-     * row of this rowset, but it does not update the database.
-     * If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param x the new column value
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateBigDecimal(String columnName, BigDecimal x) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>String</code> object.
-     *
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param x the new column value
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateString(String columnName, String x) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>byte</code> array.
-     *
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param x the new column value
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateBytes(String columnName, byte x[]) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>Date</code> object.
-     *
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param x the new column value
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, (3) the type
-     *            of the designated column is not an SQL <code>DATE</code> or
-     *            <code>TIMESTAMP</code>, or (4) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateDate(String columnName, java.sql.Date x) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>Time</code> object.
-     *
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param x the new column value
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, (3) the type
-     *            of the designated column is not an SQL <code>TIME</code> or
-     *            <code>TIMESTAMP</code>, or (4) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateTime(String columnName, java.sql.Time x) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>Timestamp</code> object.
-     *
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param x the new column value
-     * @throws SQLException if the given column index is out of bounds or
-     *            the cursor is not on one of this rowset's rows or its
-     *            insert row
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, (3) the type
-     *            of the designated column is not an SQL <code>DATE</code>,
-     *            <code>TIME</code>, or <code>TIMESTAMP</code>, or (4) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateTimestamp(String columnName, java.sql.Timestamp x) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * ASCII stream value.
-     * <P>
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param x the new column value
-     * @param length the number of one-byte ASCII characters in the stream
-     */
-    public void updateAsciiStream(String columnName,
-    java.io.InputStream x,
-    int length) throws SQLException {
-       throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>java.io.InputStream</code> object.
-     * <P>
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param x the new column value; must be a <code>java.io.InputStream</code>
-     *          containing <code>BINARY</code>, <code>VARBINARY</code>, or
-     *          <code>LONGVARBINARY</code> data
-     * @param length the length of the stream in bytes
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, (3) the data
-     *            in the stream is not binary, or (4) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateBinaryStream(String columnName, java.io.InputStream x, int length) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>java.io.Reader</code> object.
-     * <P>
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param reader the new column value; must be a
-     * <code>java.io.Reader</code> containing <code>BINARY</code>,
-     * <code>VARBINARY</code>, <code>LONGVARBINARY</code>, <code>CHAR</code>,
-     * <code>VARCHAR</code>, or <code>LONGVARCHAR</code> data
-     * @param length the length of the stream in characters
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, (3) the data
-     *            in the stream is not a binary or character type, or (4) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateCharacterStream(String columnName,
-    java.io.Reader reader,
-    int length) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>Object</code> value.  The <code>scale</code> parameter
-     * indicates the number of digits to the right of the decimal point
-     * and is ignored if the new column value is not a type that will be
-     *  mapped to an SQL <code>DECIMAL</code> or <code>NUMERIC</code> value.
-     * <P>
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param x the new column value
-     * @param scale the number of digits to the right of the decimal point (for
-     *              <code>DECIMAL</code> and <code>NUMERIC</code> types only)
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateObject(String columnName, Object x, int scale) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>Object</code> value.
-     * <P>
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param x the new column value
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateObject(String columnName, Object x) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Inserts the contents of this <code>CachedRowSetImpl</code> object's insert
-     * row into this rowset immediately following the current row.
-     * If the current row is the
-     * position after the last row or before the first row, the new row will
-     * be inserted at the end of the rowset.  This method also notifies
-     * listeners registered with this rowset that the row has changed.
-     * <P>
-     * The cursor must be on the insert row when this method is called.
-     *
-     * @throws SQLException if (1) the cursor is not on the insert row,
-     *            (2) one or more of the non-nullable columns in the insert
-     *            row has not been given a value, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void insertRow() throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Marks the current row of this <code>CachedRowSetImpl</code> object as
-     * updated and notifies listeners registered with this rowset that the
-     * row has changed.
-     * <P>
-     * This method  cannot be called when the cursor is on the insert row, and
-     * it should be called before the cursor moves to another row.  If it is
-     * called after the cursor moves to another row, this method has no effect,
-     * and the updates made before the cursor moved will be lost.
-     *
-     * @throws SQLException if the cursor is on the insert row or this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateRow() throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Deletes the current row from this <code>CachedRowSetImpl</code> object and
-     * notifies listeners registered with this rowset that a row has changed.
-     * This method cannot be called when the cursor is on the insert row.
-     * <P>
-     * This method marks the current row as deleted, but it does not delete
-     * the row from the underlying data source.  The method
-     * <code>acceptChanges</code> must be called to delete the row in
-     * the data source.
-     *
-     * @throws SQLException if (1) this method is called when the cursor
-     *            is on the insert row, before the first row, or after the
-     *            last row or (2) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void deleteRow() throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Sets the current row with its original value and marks the row as
-     * not updated, thus undoing any changes made to the row since the
-     * last call to the methods <code>updateRow</code> or <code>deleteRow</code>.
-     * This method should be called only when the cursor is on a row in
-     * this rowset.
-     *
-     * @throws SQLException if the cursor is on the insert row, before the
-     *            first row, or after the last row
-     */
-    public void refreshRow() throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Rolls back any updates made to the current row of this
-     * <code>CachedRowSetImpl</code> object and notifies listeners that
-     * a row has changed.  To have an effect, this method
-     * must be called after an <code>updateXXX</code> method has been
-     * called and before the method <code>updateRow</code> has been called.
-     * If no updates have been made or the method <code>updateRow</code>
-     * has already been called, this method has no effect.
-     *
-     * @throws SQLException if the cursor is on the insert row, before the
-     *            first row, or after the last row
-     */
-    public void cancelRowUpdates() throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Moves the cursor for this <code>CachedRowSetImpl</code> object
-     * to the insert row.  The current row in the rowset is remembered
-     * while the cursor is on the insert row.
-     * <P>
-     * The insert row is a special row associated with an updatable
-     * rowset.  It is essentially a buffer where a new row may
-     * be constructed by calling the appropriate <code>updateXXX</code>
-     * methods to assign a value to each column in the row.  A complete
-     * row must be constructed; that is, every column that is not nullable
-     * must be assigned a value.  In order for the new row to become part
-     * of this rowset, the method <code>insertRow</code> must be called
-     * before the cursor is moved back to the rowset.
-     * <P>
-     * Only certain methods may be invoked while the cursor is on the insert
-     * row; many methods throw an exception if they are called while the
-     * cursor is there.  In addition to the <code>updateXXX</code>
-     * and <code>insertRow</code> methods, only the <code>getXXX</code> methods
-     * may be called when the cursor is on the insert row.  A <code>getXXX</code>
-     * method should be called on a column only after an <code>updateXXX</code>
-     * method has been called on that column; otherwise, the value returned is
-     * undetermined.
-     *
-     * @throws SQLException if this <code>CachedRowSetImpl</code> object is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void moveToInsertRow() throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Moves the cursor for this <code>CachedRowSetImpl</code> object to
-     * the current row.  The current row is the row the cursor was on
-     * when the method <code>moveToInsertRow</code> was called.
-     * <P>
-     * Calling this method has no effect unless it is called while the
-     * cursor is on the insert row.
-     *
-     * @throws SQLException if an error occurs
-     */
-    public void moveToCurrentRow() throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Returns <code>null</code>.
-     *
-     * @return <code>null</code>
-     * @throws SQLException if an error occurs
-     */
-    public Statement getStatement() throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Retrieves the value of the designated column in this
-     * <code>CachedRowSetImpl</code> object as an <code>Object</code> in
-     * the Java programming language, using the given
-     * <code>java.util.Map</code> object to custom map the value if
-     * appropriate.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param map a <code>java.util.Map</code> object showing the mapping
-     *            from SQL type names to classes in the Java programming
-     *            language
-     * @return an <code>Object</code> representing the SQL value
-     * @throws SQLException if the given column index is out of bounds or
-     *            the cursor is not on one of this rowset's rows or its
-     *            insert row
-     */
-    public Object getObject(int columnIndex,
-                            java.util.Map<String,Class<?>> map)
-          throws SQLException
-    {
-       throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Retrieves the value of the designated column in this
-     * <code>CachedRowSetImpl</code> object as a <code>Ref</code> object
-     * in the Java programming language.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @return a <code>Ref</code> object representing an SQL<code> REF</code> value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) the designated column does not store an
-     *            SQL <code>REF</code> value
-     * @see #getRef(String)
-     */
-    public Ref getRef(int columnIndex) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Retrieves the value of the designated column in this
-     * <code>CachedRowSetImpl</code> object as a <code>Blob</code> object
-     * in the Java programming language.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @return a <code>Blob</code> object representing an SQL <code>BLOB</code> value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) the designated column does not store an
-     *            SQL <code>BLOB</code> value
-     * @see #getBlob(String)
-     */
-    public Blob getBlob(int columnIndex) throws SQLException {
-       throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Retrieves the value of the designated column in this
-     * <code>CachedRowSetImpl</code> object as a <code>Clob</code> object
-     * in the Java programming language.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @return a <code>Clob</code> object representing an SQL <code>CLOB</code> value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) the designated column does not store an
-     *            SQL <code>CLOB</code> value
-     * @see #getClob(String)
-     */
-    public Clob getClob(int columnIndex) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Retrieves the value of the designated column in this
-     * <code>CachedRowSetImpl</code> object as an <code>Array</code> object
-     * in the Java programming language.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @return an <code>Array</code> object representing an SQL
-     *         <code>ARRAY</code> value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) the designated column does not store an
-     *            SQL <code>ARRAY</code> value
-     * @see #getArray(String)
-     */
-    public Array getArray(int columnIndex) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Retrieves the value of the designated column in this
-     * <code>CachedRowSetImpl</code> object as an <code>Object</code> in
-     * the Java programming language, using the given
-     * <code>java.util.Map</code> object to custom map the value if
-     * appropriate.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param map a <code>java.util.Map</code> object showing the mapping
-     *        from SQL type names to classes in the Java programming
-     *        language
-     * @return an <code>Object</code> representing the SQL value
-     * @throws SQLException if the given column name is not the name of
-     *         a column in this rowset or the cursor is not on one of
-     *         this rowset's rows or its insert row
-     */
-    public Object getObject(String columnName,
-                            java.util.Map<String,Class<?>> map)
-    throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Retrieves the value of the designated column in this
-     * <code>CachedRowSetImpl</code> object as a <code>Ref</code> object
-     * in the Java programming language.
-     *
-     * @param colName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @return a <code>Ref</code> object representing an SQL<code> REF</code> value
-     * @throws SQLException  if (1) the given column name is not the name of
-     *            a column in this rowset, (2) the cursor is not on one of
-     *            this rowset's rows or its insert row, or (3) the column value
-     *            is not an SQL <code>REF</code> value
-     * @see #getRef(int)
-     */
-    public Ref getRef(String colName) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Retrieves the value of the designated column in this
-     * <code>CachedRowSetImpl</code> object as a <code>Blob</code> object
-     * in the Java programming language.
-     *
-     * @param colName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @return a <code>Blob</code> object representing an SQL <code>BLOB</code> value
-     * @throws SQLException if (1) the given column name is not the name of
-     *            a column in this rowset, (2) the cursor is not on one of
-     *            this rowset's rows or its insert row, or (3) the designated
-     *            column does not store an SQL <code>BLOB</code> value
-     * @see #getBlob(int)
-     */
-    public Blob getBlob(String colName) throws SQLException {
-       throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Retrieves the value of the designated column in this
-     * <code>CachedRowSetImpl</code> object as a <code>Clob</code> object
-     * in the Java programming language.
-     *
-     * @param colName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @return a <code>Clob</code> object representing an SQL
-     *         <code>CLOB</code> value
-     * @throws SQLException if (1) the given column name is not the name of
-     *            a column in this rowset, (2) the cursor is not on one of
-     *            this rowset's rows or its insert row, or (3) the designated
-     *            column does not store an SQL <code>CLOB</code> value
-     * @see #getClob(int)
-     */
-    public Clob getClob(String colName) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Retrieves the value of the designated column in this
-     * <code>CachedRowSetImpl</code> object as an <code>Array</code> object
-     * in the Java programming langugage.
-     *
-     * @param colName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @return an <code>Array</code> object representing an SQL
-     *         <code>ARRAY</code> value
-     * @throws SQLException if (1) the given column name is not the name of
-     *            a column in this rowset, (2) the cursor is not on one of
-     *            this rowset's rows or its insert row, or (3) the designated
-     *            column does not store an SQL <code>ARRAY</code> value
-     * @see #getArray(int)
-     */
-    public Array getArray(String colName) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>CachedRowSetImpl</code> object as a <code>java.sql.Date</code>
-     * object, using the given <code>Calendar</code> object to construct an
-     * appropriate millisecond value for the date.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in the rowset
-     * @param cal the <code>java.util.Calendar</code> object to use in
-     *            constructing the date
-     * @return the column value; if the value is SQL <code>NULL</code>,
-     *         the result is <code>null</code>
-     * @throws SQLException if (1) the given column name is not the name of
-     *            a column in this rowset, (2) the cursor is not on one of
-     *            this rowset's rows or its insert row, or (3) the designated
-     *            column does not store an SQL <code>DATE</code> or
-     *            <code>TIMESTAMP</code> value
-     */
-    public java.sql.Date getDate(int columnIndex, Calendar cal) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>CachedRowSetImpl</code> object as a <code>java.sql.Date</code>
-     * object, using the given <code>Calendar</code> object to construct an
-     * appropriate millisecond value for the date.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param cal the <code>java.util.Calendar</code> object to use in
-     *            constructing the date
-     * @return the column value; if the value is SQL <code>NULL</code>,
-     *         the result is <code>null</code>
-     * @throws SQLException if (1) the given column name is not the name of
-     *            a column in this rowset, (2) the cursor is not on one of
-     *            this rowset's rows or its insert row, or (3) the designated
-     *            column does not store an SQL <code>DATE</code> or
-     *            <code>TIMESTAMP</code> value
-     */
-    public java.sql.Date getDate(String columnName, Calendar cal) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>CachedRowSetImpl</code> object as a <code>java.sql.Time</code>
-     * object, using the given <code>Calendar</code> object to construct an
-     * appropriate millisecond value for the date.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in the rowset
-     * @param cal the <code>java.util.Calendar</code> object to use in
-     *            constructing the date
-     * @return the column value; if the value is SQL <code>NULL</code>,
-     *         the result is <code>null</code>
-     * @throws SQLException if (1) the given column name is not the name of
-     *            a column in this rowset, (2) the cursor is not on one of
-     *            this rowset's rows or its insert row, or (3) the designated
-     *            column does not store an SQL <code>TIME</code> or
-     *            <code>TIMESTAMP</code> value
-     */
-    public java.sql.Time getTime(int columnIndex, Calendar cal) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>CachedRowSetImpl</code> object as a <code>java.sql.Time</code>
-     * object, using the given <code>Calendar</code> object to construct an
-     * appropriate millisecond value for the date.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param cal the <code>java.util.Calendar</code> object to use in
-     *            constructing the date
-     * @return the column value; if the value is SQL <code>NULL</code>,
-     *         the result is <code>null</code>
-     * @throws SQLException if (1) the given column name is not the name of
-     *            a column in this rowset, (2) the cursor is not on one of
-     *            this rowset's rows or its insert row, or (3) the designated
-     *            column does not store an SQL <code>TIME</code> or
-     *            <code>TIMESTAMP</code> value
-     */
-    public java.sql.Time getTime(String columnName, Calendar cal) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>CachedRowSetImpl</code> object as a <code>java.sql.Timestamp</code>
-     * object, using the given <code>Calendar</code> object to construct an
-     * appropriate millisecond value for the date.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in the rowset
-     * @param cal the <code>java.util.Calendar</code> object to use in
-     *            constructing the date
-     * @return the column value; if the value is SQL <code>NULL</code>,
-     *         the result is <code>null</code>
-     * @throws SQLException if (1) the given column name is not the name of
-     *            a column in this rowset, (2) the cursor is not on one of
-     *            this rowset's rows or its insert row, or (3) the designated
-     *            column does not store an SQL <code>TIME</code> or
-     *            <code>TIMESTAMP</code> value
-     */
-    public java.sql.Timestamp getTimestamp(int columnIndex, Calendar cal) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Retrieves the value of the designated column in the current row
-     * of this <code>CachedRowSetImpl</code> object as a
-     * <code>java.sql.Timestamp</code> object, using the given
-     * <code>Calendar</code> object to construct an appropriate
-     * millisecond value for the date.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param cal the <code>java.util.Calendar</code> object to use in
-     *            constructing the date
-     * @return the column value; if the value is SQL <code>NULL</code>,
-     *         the result is <code>null</code>
-     * @throws SQLException if (1) the given column name is not the name of
-     *            a column in this rowset, (2) the cursor is not on one of
-     *            this rowset's rows or its insert row, or (3) the designated
-     *            column does not store an SQL <code>DATE</code>,
-     *            <code>TIME</code>, or <code>TIMESTAMP</code> value
-     */
-    public java.sql.Timestamp getTimestamp(String columnName, Calendar cal) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /*
-     * RowSetInternal Interface
-     */
-
-    /**
-     * Retrieves the <code>Connection</code> object passed to this
-     * <code>CachedRowSetImpl</code> object.  This connection may be
-     * used to populate this rowset with data or to write data back
-     * to its underlying data source.
-     *
-     * @return the <code>Connection</code> object passed to this rowset;
-     *         may be <code>null</code> if there is no connection
-     * @throws SQLException if an error occurs
-     */
-    public Connection getConnection() throws SQLException{
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Sets the metadata for this <code>CachedRowSetImpl</code> object
-     * with the given <code>RowSetMetaData</code> object.
-     *
-     * @param md a <code>RowSetMetaData</code> object instance containing
-     *            metadata about the columsn in the rowset
-     * @throws SQLException if invalid meta data is supplied to the
-     *            rowset
-     */
-    public void setMetaData(RowSetMetaData md) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Returns a result set containing the original value of the rowset. The
-     * original value is the state of the <code>CachedRowSetImpl</code> after the
-     * last population or synchronization (whichever occured most recently) with
-     * the data source.
-     * <p>
-     * The cursor is positioned before the first row in the result set.
-     * Only rows contained in the result set returned by <code>getOriginal()</code>
-     * are said to have an original value.
-     *
-     * @return the original result set of the rowset
-     * @throws SQLException if an error occurs produce the
-     *           <code>ResultSet</code> object
-     */
-    public ResultSet getOriginal() throws SQLException {
-       throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Returns a result set containing the original value of the current
-     * row only.
-     * The original value is the state of the <code>CachedRowSetImpl</code> after
-     * the last population or synchronization (whichever occured most recently)
-     * with the data source.
-     *
-     * @return the original result set of the row
-     * @throws SQLException if there is no current row
-     * @see #setOriginalRow
-     */
-    public ResultSet getOriginalRow() throws SQLException {
-        throw new UnsupportedOperationException();
-
-    }
-
-    /**
-     * Marks the current row in this rowset as being an original row.
-     *
-     * @throws SQLException if there is no current row
-     * @see #getOriginalRow
-     */
-    public void setOriginalRow() throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Marks all rows in this rowset as being original rows. Any updates
-     * made to the rows become the original values for the rowset.
-     * Calls to the method <code>setOriginal</code> connot be reversed.
-     *
-     * @throws SQLException if an error occurs
-     */
-    public void setOriginal() throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Returns an identifier for the object (table) that was used to create this
-     * rowset.
-     *
-     * @return a <code>String</code> object that identifies the table from
-     *         which this <code>CachedRowSetImpl</code> object was derived
-     * @throws SQLException if an error occurs
-     */
-    public String getTableName() throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Sets the identifier for the table from which this rowset was derived
-     * to the given table name.
-     *
-     * @param tabName a <code>String</code> object that identifies the
-     *          table from which this <code>CachedRowSetImpl</code> object
-     *          was derived
-     * @throws SQLException if an error occurs
-     */
-    public void setTableName(String tabName) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Returns the columns that make a key to uniquely identify a
-     * row in this <code>CachedRowSetImpl</code> object.
-     *
-     * @return an array of column numbers that constitutes a primary
-     *           key for this rowset. This array should be empty
-     *           if no column is representitive of a primary key
-     * @throws SQLException if the rowset is empty or no columns
-     *           are designated as primary keys
-     * @see #setKeyColumns
-     */
-    public int[] getKeyColumns() throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-
-    /**
-     * Sets this <code>CachedRowSetImpl</code> object's
-     * <code>keyCols</code> field with the given array of column
-     * numbers, which forms a key for uniquely identifying a row
-     * in this rowset.
-     *
-     * @param keys an array of <code>int</code> indicating the
-     *        columns that form a primary key for this
-     *        <code>CachedRowSetImpl</code> object; every
-     *        element in the array must be greater than
-     *        <code>0</code> and less than or equal to the number
-     *        of columns in this rowset
-     * @throws SQLException if any of the numbers in the
-     *            given array is not valid for this rowset
-     * @see #getKeyColumns
-     */
-    public void setKeyColumns(int [] keys) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>double</code> value.
-     *
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param ref the new column <code>java.sql.Ref</code> value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *        (2) the cursor is not on one of this rowset's rows or its
-     *        insert row, or (3) this rowset is
-     *        <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateRef(int columnIndex, java.sql.Ref ref) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>double</code> value.
-     *
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param ref the new column <code>java.sql.Ref</code> value
-     * @throws SQLException if (1) the given column name does not match the
-     *        name of a column in this rowset, (2) the cursor is not on
-     *        one of this rowset's rows or its insert row, or (3) this
-     *        rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateRef(String columnName, java.sql.Ref ref) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>double</code> value.
-     *
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param c the new column <code>Clob value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *        (2) the cursor is not on one of this rowset's rows or its
-     *        insert row, or (3) this rowset is
-     *        <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateClob(int columnIndex, Clob c) throws SQLException {
-       throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>double</code> value.
-     *
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param c the new column <code>Clob</code>value
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateClob(String columnName, Clob c) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>java.sql.Blob</code> value.
-     *
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param b the new column <code>Blob</code> value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateBlob(int columnIndex, Blob b) throws SQLException {
-       throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>java.sql.Blob </code> value.
-     *
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param b the new column <code>Blob</code> value
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateBlob(String columnName, Blob b) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>java.sql.Array</code> values.
-     *
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
-     *        and equal to or less than the number of columns in this rowset
-     * @param a the new column <code>Array</code> value
-     * @throws SQLException if (1) the given column index is out of bounds,
-     *            (2) the cursor is not on one of this rowset's rows or its
-     *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateArray(int columnIndex, Array a) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>java.sql.Array</code> value.
-     *
-     * This method updates a column value in either the current row or
-     * the insert row of this rowset, but it does not update the
-     * database.  If the cursor is on a row in the rowset, the
-     * method {@link #updateRow} must be called to update the database.
-     * If the cursor is on the insert row, the method {@link #insertRow}
-     * must be called, which will insert the new row into both this rowset
-     * and the database. Both of these methods must be called before the
-     * cursor moves to another row.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this rowset, ignoring case
-     * @param a the new column <code>Array</code> value
-     * @throws SQLException if (1) the given column name does not match the
-     *            name of a column in this rowset, (2) the cursor is not on
-     *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
-     */
-    public void updateArray(String columnName, Array a) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-
-    /**
-     * Retrieves the value of the designated column in this
-     * <code>CachedRowSetImpl</code> object as a <code>java.net.URL</code> object
-     * in the Java programming language.
-     *
-     * @return a java.net.URL object containing the resource reference described by
-     * the URL
-     * @throws SQLException if (1) the given column index is out of bounds,
-     * (2) the cursor is not on one of this rowset's rows or its
-     * insert row, or (3) the designated column does not store an
-     * SQL <code>DATALINK</code> value.
-     * @see #getURL(String)
-     */
-    public java.net.URL getURL(int columnIndex) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Retrieves the value of the designated column in this
-     * <code>CachedRowSetImpl</code> object as a <code>java.net.URL</code> object
-     * in the Java programming language.
-     *
-     * @return a java.net.URL object containing the resource reference described by
-     * the URL
-     * @throws SQLException if (1) the given column name not the name of a column
-     * in this rowset, or
-     * (2) the cursor is not on one of this rowset's rows or its
-     * insert row, or (3) the designated column does not store an
-     * SQL <code>DATALINK</code> value.
-     * @see #getURL(int)
-     */
-    public java.net.URL getURL(String columnName) throws SQLException {
-        throw new UnsupportedOperationException();
-
-    }
-
-    /**
-     * The first warning reported by calls on this <code>CachedRowSetImpl</code>
-     * object is returned. Subsequent <code>CachedRowSetImpl</code> warnings will
-     * be chained to this <code>SQLWarning</code>. All <code>RowSetWarnings</code>
-     * warnings are generated in the disconnected environment and remain a
-     * seperate warning chain to that provided by the <code>getWarnings</code>
-     * method.
-     *
-     * <P>The warning chain is automatically cleared each time a new
-     * row is read.
-     *
-     * <P><B>Note:</B> This warning chain only covers warnings caused
-     * by <code>CachedRowSet</code> (and their child interface)
-     * methods. All <code>SQLWarnings</code> can be obtained using the
-     * <code>getWarnings</code> method which tracks warnings generated
-     * by the underlying JDBC driver.
-     * @return the first SQLWarning or null
-     *
-     */
-    public RowSetWarning getRowSetWarnings() {
-        throw new UnsupportedOperationException();
-    }
-
-     /**
-     * Commits all changes performed by the <code>acceptChanges()</code>
-     * methods
-     *
-     * @see java.sql.Connection#commit
-     */
-    public void commit() throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Rolls back all changes performed by the <code>acceptChanges()</code>
-     * methods
-     *
-     * @see java.sql.Connection#rollback
-     */
-    public void rollback() throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Rolls back all changes performed by the <code>acceptChanges()</code>
-     * to the last <code>Savepoint</code> transaction marker.
-     *
-     * @see java.sql.Connection#rollback(Savepoint)
-     */
-    public void rollback(Savepoint s) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Unsets the designated parameter to the given int array.
-     * This was set using <code>setMatchColumn</code>
-     * as the column which will form the basis of the join.
-     * <P>
-     * The parameter value unset by this method should be same
-     * as was set.
-     *
-     * @param columnIdxes the index into this rowset
-     *        object's internal representation of parameter values
-     * @throws SQLException if an error occurs or the
-     *  parameter index is out of bounds or if the columnIdx is
-     *  not the same as set using <code>setMatchColumn(int [])</code>
-     */
-    public void unsetMatchColumn(int[] columnIdxes) throws SQLException {
-         throw new UnsupportedOperationException();
-    }
-
-   /**
-     * Unsets the designated parameter to the given String array.
-     * This was set using <code>setMatchColumn</code>
-     * as the column which will form the basis of the join.
-     * <P>
-     * The parameter value unset by this method should be same
-     * as was set.
-     *
-     * @param columnIdxes the index into this rowset
-     *        object's internal representation of parameter values
-     * @throws SQLException if an error occurs or the
-     *  parameter index is out of bounds or if the columnName is
-     *  not the same as set using <code>setMatchColumn(String [])</code>
-     */
-    public void unsetMatchColumn(String[] columnIdxes) throws SQLException {
-       throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Retrieves the column name as <code>String</code> array
-     * that was set using <code>setMatchColumn(String [])</code>
-     * for this rowset.
-     *
-     * @return a <code>String</code> array object that contains the column names
-     *         for the rowset which has this the match columns
-     *
-     * @throws SQLException if an error occurs or column name is not set
-     */
-    public String[] getMatchColumnNames() throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Retrieves the column id as <code>int</code> array that was set using
-     * <code>setMatchColumn(int [])</code> for this rowset.
-     *
-     * @return a <code>int</code> array object that contains the column ids
-     *         for the rowset which has this as the match columns.
-     *
-     * @throws SQLException if an error occurs or column index is not set
-     */
-    public int[] getMatchColumnIndexes() throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Sets the designated parameter to the given int array.
-     * This forms the basis of the join for the
-     * <code>JoinRowSet</code> as the column which will form the basis of the
-     * join.
-     * <P>
-     * The parameter value set by this method is stored internally and
-     * will be supplied as the appropriate parameter in this rowset's
-     * command when the method <code>getMatchColumnIndexes</code> is called.
-     *
-     * @param columnIdxes the indexes into this rowset
-     *        object's internal representation of parameter values; the
-     *        first parameter is 0, the second is 1, and so on; must be
-     *        <code>0</code> or greater
-     * @throws SQLException if an error occurs or the
-     *                         parameter index is out of bounds
-     */
-    public void setMatchColumn(int[] columnIdxes) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Sets the designated parameter to the given String array.
-     *  This forms the basis of the join for the
-     * <code>JoinRowSet</code> as the column which will form the basis of the
-     * join.
-     * <P>
-     * The parameter value set by this method is stored internally and
-     * will be supplied as the appropriate parameter in this rowset's
-     * command when the method <code>getMatchColumn</code> is called.
-     *
-     * @param columnNames the name of the column into this rowset
-     *        object's internal representation of parameter values
-     * @throws SQLException if an error occurs or the
-     *  parameter index is out of bounds
-     */
-    public void setMatchColumn(String[] columnNames) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-
-    /**
-     * Sets the designated parameter to the given <code>int</code>
-     * object.  This forms the basis of the join for the
-     * <code>JoinRowSet</code> as the column which will form the basis of the
-     * join.
-     * <P>
-     * The parameter value set by this method is stored internally and
-     * will be supplied as the appropriate parameter in this rowset's
-     * command when the method <code>getMatchColumn</code> is called.
-     *
-     * @param columnIdx the index into this rowset
-     *        object's internal representation of parameter values; the
-     *        first parameter is 0, the second is 1, and so on; must be
-     *        <code>0</code> or greater
-     * @throws SQLException if an error occurs or the
-     *                         parameter index is out of bounds
-     */
-    public void setMatchColumn(int columnIdx) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Sets the designated parameter to the given <code>String</code>
-     * object.  This forms the basis of the join for the
-     * <code>JoinRowSet</code> as the column which will form the basis of the
-     * join.
-     * <P>
-     * The parameter value set by this method is stored internally and
-     * will be supplied as the appropriate parameter in this rowset's
-     * command when the method <code>getMatchColumn</code> is called.
-     *
-     * @param columnName the name of the column into this rowset
-     *        object's internal representation of parameter values
-     * @throws SQLException if an error occurs or the
-     *  parameter index is out of bounds
-     */
-    public void setMatchColumn(String columnName) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Unsets the designated parameter to the given <code>int</code>
-     * object.  This was set using <code>setMatchColumn</code>
-     * as the column which will form the basis of the join.
-     * <P>
-     * The parameter value unset by this method should be same
-     * as was set.
-     *
-     * @param columnIdx the index into this rowset
-     *        object's internal representation of parameter values
-     * @throws SQLException if an error occurs or the
-     *  parameter index is out of bounds or if the columnIdx is
-     *  not the same as set using <code>setMatchColumn(int)</code>
-     */
-    public void unsetMatchColumn(int columnIdx) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Unsets the designated parameter to the given <code>String</code>
-     * object.  This was set using <code>setMatchColumn</code>
-     * as the column which will form the basis of the join.
-     * <P>
-     * The parameter value unset by this method should be same
-     * as was set.
-     *
-     * @param columnName the index into this rowset
-     *        object's internal representation of parameter values
-     * @throws SQLException if an error occurs or the
-     *  parameter index is out of bounds or if the columnName is
-     *  not the same as set using <code>setMatchColumn(String)</code>
-     */
-    public void unsetMatchColumn(String columnName) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Notifies registered listeners that a RowSet object in the given RowSetEvent
-     * object has populated a number of additional rows. The <code>numRows</code> parameter
-     * ensures that this event will only be fired every <code>numRow</code>.
-     * <p>
-     * The source of the event can be retrieved with the method event.getSource.
-     *
-     * @param event a <code>RowSetEvent</code> object that contains the
-     *     <code>RowSet</code> object that is the source of the events
-     * @param numRows when populating, the number of rows interval on which the
-     *     <code>CachedRowSet</code> populated should fire; the default value
-     *     is zero; cannot be less than <code>fetchSize</code> or zero
-     */
-    public void rowSetPopulated(RowSetEvent event, int numRows) throws SQLException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Populates this <code>CachedRowSet</code> object with data from
-     * the given <code>ResultSet</code> object. While related to the <code>populate(ResultSet)</code>
-     * method, an additional parameter is provided to allow starting position within
-     * the <code>ResultSet</code> from where to populate the CachedRowSet
-     * instance.
-     *
-     * This method is an alternative to the method <code>execute</code>
-     * for filling the rowset with data.  The method <code>populate</code>
-     * does not require that the properties needed by the method
-     * <code>execute</code>, such as the <code>command</code> property,
-     * be set. This is true because the method <code>populate</code>
-     * is given the <code>ResultSet</code> object from
-     * which to get data and thus does not need to use the properties
-     * required for setting up a connection and executing this
-     * <code>CachedRowSetImpl</code> object's command.
-     * <P>
-     * After populating this rowset with data, the method
-     * <code>populate</code> sets the rowset's metadata and
-     * then sends a <code>RowSetChangedEvent</code> object
-     * to all registered listeners prior to returning.
-     *
-     * @param data the <code>ResultSet</code> object containing the data
-     *             to be read into this <code>CachedRowSetImpl</code> object
-     * @param start the integer specifing the position in the
-     *        <code>ResultSet</code> object to popultate the
-     *        <code>CachedRowSetImpl</code> object.
-     * @throws SQLException if an error occurs; or the max row setting is
-     *          violated while populating the RowSet.Also id the start position
-     *          is negative.
-     * @see #execute
-     */
-     public void populate(ResultSet data, int start) throws SQLException{
-        throw new UnsupportedOperationException();
-
-     }
-
-    /**
-     * The nextPage gets the next page, that is a <code>CachedRowSetImpl</code> object
-     * containing the number of rows specified by page size.
-     * @return boolean value true indicating whether there are more pages to come and
-     *         false indicating that this is the last page.
-     * @throws SQLException if an error occurs or this called before calling populate.
-     */
-     public boolean nextPage() throws SQLException {
-         throw new UnsupportedOperationException();
-     }
-
-    /**
-     * This is the setter function for setting the size of the page, which specifies
-     * how many rows have to be retrived at a time.
-     *
-     * @param size which is the page size
-     * @throws SQLException if size is less than zero or greater than max rows.
-     */
-     public void setPageSize (int size) throws SQLException {
-        throw new UnsupportedOperationException();
-     }
-
-    /**
-     * This is the getter function for the size of the page.
-     *
-     * @return an integer that is the page size.
-     */
-    public int getPageSize() {
-        throw new UnsupportedOperationException();
-    }
-
-
-    /**
-     * Retrieves the data present in the page prior to the page from where it is
-     * called.
-     * @return boolean value true if it retrieves the previous page, flase if it
-     *         is on the first page.
-     * @throws SQLException if it is called before populate is called or ResultSet
-     *         is of type <code>ResultSet.TYPE_FORWARD_ONLY</code> or if an error
-     *         occurs.
-     */
-    public boolean previousPage() throws SQLException {
-       throw new UnsupportedOperationException();
-    }
-
-    /**
-       * Updates the designated column with a character stream value, which will
-       * have the specified number of bytes. The driver does the necessary conversion
-       * from Java character format to the national character set in the database.
-       * It is intended for use when updating NCHAR,NVARCHAR and LONGNVARCHAR columns.
-       * The updater methods are used to update column values in the current row or
-       * the insert row. The updater methods do not update the underlying database;
-       * instead the updateRow or insertRow methods are called to update the database.
-       *
-       * @param columnIndex - the first column is 1, the second is 2, ...
-       * @param x - the new column value
-       * @param length - the length of the stream
-       * @exception SQLException if a database access error occurs
-       * @since 1.6
-       */
-       public void updateNCharacterStream(int columnIndex,
-                            java.io.Reader x,
-                            int length)
-                            throws SQLException {
-          throw new UnsupportedOperationException("Operation not yet supported");
-       }
-
-     /**
-       * Updates the designated column with a character stream value, which will
-       * have the specified number of bytes. The driver does the necessary conversion
-       * from Java character format to the national character set in the database.
-       * It is intended for use when updating NCHAR,NVARCHAR and LONGNVARCHAR columns.
-       * The updater methods are used to update column values in the current row or
-       * the insert row. The updater methods do not update the underlying database;
-       * instead the updateRow or insertRow methods are called to update the database.
-       *
-       * @param columnName - name of the Column
-       * @param x - the new column value
-       * @param length - the length of the stream
-       * @exception SQLException if a database access error occurs
-       * @since 1.6
-       */
-       public void updateNCharacterStream(String columnName,
-                            java.io.Reader x,
-                            int length)
-                            throws SQLException {
-          throw new UnsupportedOperationException("Operation not yet supported");
-       }
-
-      /**
-       * This method re populates the resBundle
-       * during the deserialization process
-       *
-       */
-       private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException {
-         // Default state initialization happens here
-         ois.defaultReadObject();
-         // Initialization of transient Res Bundle happens here .
-         try {
-            resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle();
-         } catch(IOException ioe) {
-             throw new RuntimeException(ioe);
-         }
-
-       }
-
-       static final long serialVersionUID = -3345004441725080251L;
-} //end class
diff --git a/ojluni/src/main/java/com/sun/rowset/internal/WebRowSetXmlReader.java b/ojluni/src/main/java/com/sun/rowset/internal/WebRowSetXmlReader.java
deleted file mode 100755
index a0d99e4..0000000
--- a/ojluni/src/main/java/com/sun/rowset/internal/WebRowSetXmlReader.java
+++ /dev/null
@@ -1,237 +0,0 @@
-/*
- * Copyright (c) 2003, 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
- * 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.rowset.internal;
-
-import java.sql.*;
-import javax.sql.*;
-import java.io.*;
-
-import org.xml.sax.*;
-import org.xml.sax.helpers.*;
-import javax.xml.parsers.*;
-
-import com.sun.rowset.*;
-import java.text.MessageFormat;
-import javax.sql.rowset.*;
-import javax.sql.rowset.spi.*;
-
-/**
- * An implementation of the <code>XmlReader</code> interface, which
- * reads and parses an XML formatted <code>WebRowSet</code> object.
- * This implementation uses an <code>org.xml.sax.Parser</code> object
- * as its parser.
- */
-public class WebRowSetXmlReader implements XmlReader, Serializable {
-
-
-    private JdbcRowSetResourceBundle resBundle;
-
-    public WebRowSetXmlReader(){
-        try {
-           resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle();
-        } catch(IOException ioe) {
-            throw new RuntimeException(ioe);
-        }
-    }
-
-    /**
-     * Parses the given <code>WebRowSet</code> object, getting its input from
-     * the given <code>java.io.Reader</code> object.  The parser will send
-     * notifications of parse events to the rowset's
-     * <code>XmlReaderDocHandler</code>, which will build the rowset as
-     * an XML document.
-     * <P>
-     * This method is called internally by the method
-     * <code>WebRowSet.readXml</code>.
-     * <P>
-     * If a parsing error occurs, the exception thrown will include
-     * information for locating the error in the original XML document.
-     *
-     * @param caller the <code>WebRowSet</code> object to be parsed, whose
-     *        <code>xmlReader</code> field must contain a reference to
-     *        this <code>XmlReader</code> object
-     * @param reader the <code>java.io.Reader</code> object from which
-     *        the parser will get its input
-     * @exception SQLException if a database access error occurs or
-     *            this <code>WebRowSetXmlReader</code> object is not the
-     *            reader for the given rowset
-     * @see XmlReaderContentHandler
-     */
-    public void readXML(WebRowSet caller, java.io.Reader reader) throws SQLException {
-        try {
-            // Crimson Parser(as in J2SE 1.4.1 is NOT able to handle
-            // Reader(s)(FileReader).
-            //
-            // But getting the file as a Stream works fine. So we are going to take
-            // the reader but send it as a InputStream to the parser. Note that this
-            // functionality needs to work against any parser
-            // Crimson(J2SE 1.4.x) / Xerces(J2SE 1.5.x).
-            InputSource is = new InputSource(reader);
-            DefaultHandler dh = new XmlErrorHandler();
-            XmlReaderContentHandler hndr = new XmlReaderContentHandler((RowSet)caller);
-            SAXParserFactory factory = SAXParserFactory.newInstance();
-            factory.setNamespaceAware(true);
-            factory.setValidating(true);
-            SAXParser parser = factory.newSAXParser() ;
-
-            parser.setProperty(
-                               "http://java.sun.com/xml/jaxp/properties/schemaLanguage", "http://www.w3.org/2001/XMLSchema");
-
-            XMLReader reader1 = parser.getXMLReader() ;
-            reader1.setEntityResolver(new XmlResolver());
-            reader1.setContentHandler(hndr);
-
-            reader1.setErrorHandler(dh);
-
-            reader1.parse(is);
-
-        } catch (SAXParseException err) {
-            System.out.println (MessageFormat.format(resBundle.handleGetObject("wrsxmlreader.parseerr").toString(), new Object[]{ err.getMessage (), err.getLineNumber(), err.getSystemId()}));
-            err.printStackTrace();
-            throw new SQLException(err.getMessage());
-
-        } catch (SAXException e) {
-            Exception   x = e;
-            if (e.getException () != null)
-                x = e.getException();
-            x.printStackTrace ();
-            throw new SQLException(x.getMessage());
-
-        }
-
-        // Will be here if trying to write beyond the RowSet limits
-
-         catch (ArrayIndexOutOfBoundsException aie) {
-              throw new SQLException(resBundle.handleGetObject("wrsxmlreader.invalidcp").toString());
-        }
-        catch (Throwable e) {
-            throw new SQLException(MessageFormat.format(resBundle.handleGetObject("wrsxmlreader.readxml").toString() , e.getMessage()));
-        }
-
-    }
-
-
-    /**
-     * Parses the given <code>WebRowSet</code> object, getting its input from
-     * the given <code>java.io.InputStream</code> object.  The parser will send
-     * notifications of parse events to the rowset's
-     * <code>XmlReaderDocHandler</code>, which will build the rowset as
-     * an XML document.
-     * <P>
-     * Using streams is a much faster way than using <code>java.io.Reader</code>
-     * <P>
-     * This method is called internally by the method
-     * <code>WebRowSet.readXml</code>.
-     * <P>
-     * If a parsing error occurs, the exception thrown will include
-     * information for locating the error in the original XML document.
-     *
-     * @param caller the <code>WebRowSet</code> object to be parsed, whose
-     *        <code>xmlReader</code> field must contain a reference to
-     *        this <code>XmlReader</code> object
-     * @param iStream the <code>java.io.InputStream</code> object from which
-     *        the parser will get its input
-     * @throws SQLException if a database access error occurs or
-     *            this <code>WebRowSetXmlReader</code> object is not the
-     *            reader for the given rowset
-     * @see XmlReaderContentHandler
-     */
-    public void readXML(WebRowSet caller, java.io.InputStream iStream) throws SQLException {
-        try {
-            InputSource is = new InputSource(iStream);
-            DefaultHandler dh = new XmlErrorHandler();
-
-            XmlReaderContentHandler hndr = new XmlReaderContentHandler((RowSet)caller);
-            SAXParserFactory factory = SAXParserFactory.newInstance();
-            factory.setNamespaceAware(true);
-            factory.setValidating(true);
-
-            SAXParser parser = factory.newSAXParser() ;
-
-            parser.setProperty("http://java.sun.com/xml/jaxp/properties/schemaLanguage",
-                     "http://www.w3.org/2001/XMLSchema");
-
-            XMLReader reader1 = parser.getXMLReader() ;
-            reader1.setEntityResolver(new XmlResolver());
-            reader1.setContentHandler(hndr);
-
-            reader1.setErrorHandler(dh);
-
-            reader1.parse(is);
-
-        } catch (SAXParseException err) {
-            System.out.println (MessageFormat.format(resBundle.handleGetObject("wrsxmlreader.parseerr").toString(), new Object[]{err.getLineNumber(), err.getSystemId() }));
-            System.out.println("   " + err.getMessage ());
-            err.printStackTrace();
-            throw new SQLException(err.getMessage());
-
-        } catch (SAXException e) {
-            Exception   x = e;
-            if (e.getException () != null)
-                x = e.getException();
-            x.printStackTrace ();
-            throw new SQLException(x.getMessage());
-
-        }
-
-        // Will be here if trying to write beyond the RowSet limits
-
-         catch (ArrayIndexOutOfBoundsException aie) {
-              throw new SQLException(resBundle.handleGetObject("wrsxmlreader.invalidcp").toString());
-        }
-
-        catch (Throwable e) {
-            throw new SQLException(MessageFormat.format(resBundle.handleGetObject("wrsxmlreader.readxml").toString() , e.getMessage()));
-        }
-    }
-
-    /**
-     * For code coverage purposes only right now
-     *
-     */
-
-    public void readData(RowSetInternal caller) {
-    }
-
-    /**
-     * This method re populates the resBundle
-     * during the deserialization process
-     *
-     */
-    private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException {
-        // Default state initialization happens here
-        ois.defaultReadObject();
-        // Initialization of transient Res Bundle happens here .
-        try {
-           resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle();
-        } catch(IOException ioe) {
-            throw new RuntimeException(ioe);
-        }
-
-    }
-
-    static final long serialVersionUID = -9127058392819008014L;
-}
diff --git a/ojluni/src/main/java/com/sun/rowset/internal/WebRowSetXmlWriter.java b/ojluni/src/main/java/com/sun/rowset/internal/WebRowSetXmlWriter.java
deleted file mode 100755
index 936c7f6..0000000
--- a/ojluni/src/main/java/com/sun/rowset/internal/WebRowSetXmlWriter.java
+++ /dev/null
@@ -1,685 +0,0 @@
-/*
- * Copyright (c) 2003, 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
- * 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.rowset.internal;
-
-import com.sun.rowset.JdbcRowSetResourceBundle;
-import java.sql.*;
-import javax.sql.*;
-import java.io.*;
-import java.text.MessageFormat;
-import java.util.*;
-
-import javax.sql.rowset.*;
-import javax.sql.rowset.spi.*;
-
-/**
- * An implementation of the <code>XmlWriter</code> interface, which writes a
- * <code>WebRowSet</code> object to an output stream as an XML document.
- */
-
-public class WebRowSetXmlWriter implements XmlWriter, Serializable {
-
-    /**
-     * The <code>java.io.Writer</code> object to which this <code>WebRowSetXmlWriter</code>
-     * object will write when its <code>writeXML</code> method is called. The value
-     * for this field is set with the <code>java.io.Writer</code> object given
-     * as the second argument to the <code>writeXML</code> method.
-     */
-    private java.io.Writer writer;
-
-    /**
-     * The <code>java.util.Stack</code> object that this <code>WebRowSetXmlWriter</code>
-     * object will use for storing the tags to be used for writing the calling
-     * <code>WebRowSet</code> object as an XML document.
-     */
-    private java.util.Stack stack;
-
-    private  JdbcRowSetResourceBundle resBundle;
-
-    public WebRowSetXmlWriter() {
-
-        try {
-           resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle();
-        } catch(IOException ioe) {
-            throw new RuntimeException(ioe);
-        }
-    }
-
-    /**
-     * Writes the given <code>WebRowSet</code> object as an XML document
-     * using the given <code>java.io.Writer</code> object. The XML document
-     * will include the <code>WebRowSet</code> object's data, metadata, and
-     * properties.  If a data value has been updated, that information is also
-     * included.
-     * <P>
-     * This method is called by the <code>XmlWriter</code> object that is
-     * referenced in the calling <code>WebRowSet</code> object's
-     * <code>xmlWriter</code> field.  The <code>XmlWriter.writeXML</code>
-     * method passes to this method the arguments that were supplied to it.
-     *
-     * @param caller the <code>WebRowSet</code> object to be written; must
-     *        be a rowset for which this <code>WebRowSetXmlWriter</code> object
-     *        is the writer
-     * @param wrt the <code>java.io.Writer</code> object to which
-     *        <code>caller</code> will be written
-     * @exception SQLException if a database access error occurs or
-     *            this <code>WebRowSetXmlWriter</code> object is not the writer
-     *            for the given rowset
-     * @see XmlWriter#writeXML
-     */
-    public void writeXML(WebRowSet caller, java.io.Writer wrt)
-    throws SQLException {
-
-        // create a new stack for tag checking.
-        stack = new java.util.Stack();
-        writer = wrt;
-        writeRowSet(caller);
-    }
-
-    /**
-     * Writes the given <code>WebRowSet</code> object as an XML document
-     * using the given <code>java.io.OutputStream</code> object. The XML document
-     * will include the <code>WebRowSet</code> object's data, metadata, and
-     * properties.  If a data value has been updated, that information is also
-     * included.
-     * <P>
-     * Using stream is a faster way than using <code>java.io.Writer<code/>
-     *
-     * This method is called by the <code>XmlWriter</code> object that is
-     * referenced in the calling <code>WebRowSet</code> object's
-     * <code>xmlWriter</code> field.  The <code>XmlWriter.writeXML</code>
-     * method passes to this method the arguments that were supplied to it.
-     *
-     * @param caller the <code>WebRowSet</code> object to be written; must
-     *        be a rowset for which this <code>WebRowSetXmlWriter</code> object
-     *        is the writer
-     * @param oStream the <code>java.io.OutputStream</code> object to which
-     *        <code>caller</code> will be written
-     * @throws SQLException if a database access error occurs or
-     *            this <code>WebRowSetXmlWriter</code> object is not the writer
-     *            for the given rowset
-     * @see XmlWriter#writeXML
-     */
-    public void writeXML(WebRowSet caller, java.io.OutputStream oStream)
-    throws SQLException {
-
-        // create a new stack for tag checking.
-        stack = new java.util.Stack();
-        writer = new OutputStreamWriter(oStream);
-        writeRowSet(caller);
-    }
-
-    /**
-     *
-     *
-     * @exception SQLException if a database access error occurs
-     */
-    private void writeRowSet(WebRowSet caller) throws SQLException {
-
-        try {
-
-            startHeader();
-
-            writeProperties(caller);
-            writeMetaData(caller);
-            writeData(caller);
-
-            endHeader();
-
-        } catch (java.io.IOException ex) {
-            throw new SQLException(MessageFormat.format(resBundle.handleGetObject("wrsxmlwriter.ioex").toString(), ex.getMessage()));
-        }
-    }
-
-    private void startHeader() throws java.io.IOException {
-
-        setTag("webRowSet");
-        writer.write("<?xml version=\"1.0\"?>\n");
-        writer.write("<webRowSet xmlns=\"http://java.sun.com/xml/ns/jdbc\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n");
-        writer.write("xsi:schemaLocation=\"http://java.sun.com/xml/ns/jdbc http://java.sun.com/xml/ns/jdbc/webrowset.xsd\">\n");
-    }
-
-    private void endHeader() throws java.io.IOException {
-        endTag("webRowSet");
-    }
-
-    /**
-     *
-     *
-     * @exception SQLException if a database access error occurs
-     */
-    private void writeProperties(WebRowSet caller) throws java.io.IOException {
-
-        beginSection("properties");
-
-        try {
-            propString("command", processSpecialCharacters(caller.getCommand()));
-            propInteger("concurrency", caller.getConcurrency());
-            propString("datasource", caller.getDataSourceName());
-            propBoolean("escape-processing",
-                    caller.getEscapeProcessing());
-
-            try {
-                propInteger("fetch-direction", caller.getFetchDirection());
-            } catch(SQLException sqle) {
-                // it may be the case that fetch direction has not been set
-                // fetchDir  == 0
-                // in that case it will throw a SQLException.
-                // To avoid that catch it here
-            }
-
-            propInteger("fetch-size", caller.getFetchSize());
-            propInteger("isolation-level",
-                    caller.getTransactionIsolation());
-
-            beginSection("key-columns");
-
-            int[] kc = caller.getKeyColumns();
-            for (int i = 0; kc != null && i < kc.length; i++)
-                propInteger("column", kc[i]);
-
-            endSection("key-columns");
-
-            //Changed to beginSection and endSection for maps for proper indentation
-            beginSection("map");
-            java.util.Map typeMap = caller.getTypeMap();
-            if (typeMap != null) {
-                Iterator i = typeMap.keySet().iterator();
-                Class c;
-                String type;
-                while (i.hasNext()) {
-                    type = (String)i.next();
-                    c = (Class)typeMap.get(type);
-                    propString("type", type);
-                    propString("class", c.getName());
-                }
-            }
-            endSection("map");
-
-            propInteger("max-field-size", caller.getMaxFieldSize());
-            propInteger("max-rows", caller.getMaxRows());
-            propInteger("query-timeout", caller.getQueryTimeout());
-            propBoolean("read-only", caller.isReadOnly());
-
-            int itype = caller.getType();
-            String strType = "";
-
-            if(itype == 1003) {
-                strType = "ResultSet.TYPE_FORWARD_ONLY";
-            } else if(itype == 1004) {
-                strType = "ResultSet.TYPE_SCROLL_INSENSITIVE";
-            } else if(itype == 1005) {
-                strType = "ResultSet.TYPE_SCROLL_SENSITIVE";
-            }
-
-            propString("rowset-type", strType);
-
-            propBoolean("show-deleted", caller.getShowDeleted());
-            propString("table-name", caller.getTableName());
-            propString("url", caller.getUrl());
-
-            beginSection("sync-provider");
-            // Remove the string after "@xxxx"
-            // before writing it to the xml file.
-            String strProviderInstance = (caller.getSyncProvider()).toString();
-            String strProvider = strProviderInstance.substring(0, (caller.getSyncProvider()).toString().indexOf("@"));
-
-            propString("sync-provider-name", strProvider);
-            propString("sync-provider-vendor", "Oracle Corporation");
-            propString("sync-provider-version", "1.0");
-            propInteger("sync-provider-grade", caller.getSyncProvider().getProviderGrade());
-            propInteger("data-source-lock", caller.getSyncProvider().getDataSourceLock());
-
-            endSection("sync-provider");
-
-        } catch (SQLException ex) {
-            throw new java.io.IOException(MessageFormat.format(resBundle.handleGetObject("wrsxmlwriter.sqlex").toString(), ex.getMessage()));
-        }
-
-        endSection("properties");
-    }
-
-    /**
-     *
-     *
-     * @exception SQLException if a database access error occurs
-     */
-    private void writeMetaData(WebRowSet caller) throws java.io.IOException {
-        int columnCount;
-
-        beginSection("metadata");
-
-        try {
-
-            ResultSetMetaData rsmd = caller.getMetaData();
-            columnCount = rsmd.getColumnCount();
-            propInteger("column-count", columnCount);
-
-            for (int colIndex = 1; colIndex <= columnCount; colIndex++) {
-                beginSection("column-definition");
-
-                propInteger("column-index", colIndex);
-                propBoolean("auto-increment", rsmd.isAutoIncrement(colIndex));
-                propBoolean("case-sensitive", rsmd.isCaseSensitive(colIndex));
-                propBoolean("currency", rsmd.isCurrency(colIndex));
-                propInteger("nullable", rsmd.isNullable(colIndex));
-                propBoolean("signed", rsmd.isSigned(colIndex));
-                propBoolean("searchable", rsmd.isSearchable(colIndex));
-                propInteger("column-display-size",rsmd.getColumnDisplaySize(colIndex));
-                propString("column-label", rsmd.getColumnLabel(colIndex));
-                propString("column-name", rsmd.getColumnName(colIndex));
-                propString("schema-name", rsmd.getSchemaName(colIndex));
-                propInteger("column-precision", rsmd.getPrecision(colIndex));
-                propInteger("column-scale", rsmd.getScale(colIndex));
-                propString("table-name", rsmd.getTableName(colIndex));
-                propString("catalog-name", rsmd.getCatalogName(colIndex));
-                propInteger("column-type", rsmd.getColumnType(colIndex));
-                propString("column-type-name", rsmd.getColumnTypeName(colIndex));
-
-                endSection("column-definition");
-            }
-        } catch (SQLException ex) {
-            throw new java.io.IOException(MessageFormat.format(resBundle.handleGetObject("wrsxmlwriter.sqlex").toString(), ex.getMessage()));
-        }
-
-        endSection("metadata");
-    }
-
-    /**
-     *
-     *
-     * @exception SQLException if a database access error occurs
-     */
-    private void writeData(WebRowSet caller) throws java.io.IOException {
-        ResultSet rs;
-
-        try {
-            ResultSetMetaData rsmd = caller.getMetaData();
-            int columnCount = rsmd.getColumnCount();
-            int i;
-
-            beginSection("data");
-
-            caller.beforeFirst();
-            caller.setShowDeleted(true);
-            while (caller.next()) {
-                if (caller.rowDeleted() && caller.rowInserted()) {
-                    beginSection("modifyRow");
-                } else if (caller.rowDeleted()) {
-                    beginSection("deleteRow");
-                } else if (caller.rowInserted()) {
-                    beginSection("insertRow");
-                } else {
-                    beginSection("currentRow");
-                }
-
-                for (i = 1; i <= columnCount; i++) {
-                    if (caller.columnUpdated(i)) {
-                        rs = caller.getOriginalRow();
-                        rs.next();
-                        beginTag("columnValue");
-                        writeValue(i, (RowSet)rs);
-                        endTag("columnValue");
-                        beginTag("updateRow");
-                        writeValue(i, caller);
-                        endTag("updateRow");
-                    } else {
-                        beginTag("columnValue");
-                        writeValue(i, caller);
-                        endTag("columnValue");
-                    }
-                }
-
-                endSection(); // this is unchecked
-            }
-            endSection("data");
-        } catch (SQLException ex) {
-            throw new java.io.IOException(MessageFormat.format(resBundle.handleGetObject("wrsxmlwriter.sqlex").toString(), ex.getMessage()));
-        }
-    }
-
-    private void writeValue(int idx, RowSet caller) throws java.io.IOException {
-        try {
-            int type = caller.getMetaData().getColumnType(idx);
-
-            switch (type) {
-                case java.sql.Types.BIT:
-                case java.sql.Types.BOOLEAN:
-                    boolean b = caller.getBoolean(idx);
-                    if (caller.wasNull())
-                        writeNull();
-                    else
-                        writeBoolean(b);
-                    break;
-                case java.sql.Types.TINYINT:
-                case java.sql.Types.SMALLINT:
-                    short s = caller.getShort(idx);
-                    if (caller.wasNull())
-                        writeNull();
-                    else
-                        writeShort(s);
-                    break;
-                case java.sql.Types.INTEGER:
-                    int i = caller.getInt(idx);
-                    if (caller.wasNull())
-                        writeNull();
-                    else
-                        writeInteger(i);
-                    break;
-                case java.sql.Types.BIGINT:
-                    long l = caller.getLong(idx);
-                    if (caller.wasNull())
-                        writeNull();
-                    else
-                        writeLong(l);
-                    break;
-                case java.sql.Types.REAL:
-                case java.sql.Types.FLOAT:
-                    float f = caller.getFloat(idx);
-                    if (caller.wasNull())
-                        writeNull();
-                    else
-                        writeFloat(f);
-                    break;
-                case java.sql.Types.DOUBLE:
-                    double d = caller.getDouble(idx);
-                    if (caller.wasNull())
-                        writeNull();
-                    else
-                        writeDouble(d);
-                    break;
-                case java.sql.Types.NUMERIC:
-                case java.sql.Types.DECIMAL:
-                    writeBigDecimal(caller.getBigDecimal(idx));
-                    break;
-                case java.sql.Types.BINARY:
-                case java.sql.Types.VARBINARY:
-                case java.sql.Types.LONGVARBINARY:
-                    break;
-                case java.sql.Types.DATE:
-                    java.sql.Date date = caller.getDate(idx);
-                    if (caller.wasNull())
-                        writeNull();
-                    else
-                        writeLong(date.getTime());
-                    break;
-                case java.sql.Types.TIME:
-                    java.sql.Time time = caller.getTime(idx);
-                    if (caller.wasNull())
-                        writeNull();
-                    else
-                        writeLong(time.getTime());
-                    break;
-                case java.sql.Types.TIMESTAMP:
-                    java.sql.Timestamp ts = caller.getTimestamp(idx);
-                    if (caller.wasNull())
-                        writeNull();
-                    else
-                        writeLong(ts.getTime());
-                    break;
-                case java.sql.Types.CHAR:
-                case java.sql.Types.VARCHAR:
-                case java.sql.Types.LONGVARCHAR:
-                    writeStringData(caller.getString(idx));
-                    break;
-                default:
-                    System.out.println(resBundle.handleGetObject("wsrxmlwriter.notproper").toString());
-                    //Need to take care of BLOB, CLOB, Array, Ref here
-            }
-        } catch (SQLException ex) {
-            throw new java.io.IOException(resBundle.handleGetObject("wrsxmlwriter.failedwrite").toString()+ ex.getMessage());
-        }
-    }
-
-    /*
-     * This begins a new tag with a indent
-     *
-     */
-    private void beginSection(String tag) throws java.io.IOException {
-        // store the current tag
-        setTag(tag);
-
-        writeIndent(stack.size());
-
-        // write it out
-        writer.write("<" + tag + ">\n");
-    }
-
-    /*
-     * This closes a tag started by beginTag with a indent
-     *
-     */
-    private void endSection(String tag) throws java.io.IOException {
-        writeIndent(stack.size());
-
-        String beginTag = getTag();
-
-        if(beginTag.indexOf("webRowSet") != -1) {
-            beginTag ="webRowSet";
-        }
-
-        if (tag.equals(beginTag) ) {
-            // get the current tag and write it out
-            writer.write("</" + beginTag + ">\n");
-        } else {
-            ;
-        }
-        writer.flush();
-    }
-
-    private void endSection() throws java.io.IOException {
-        writeIndent(stack.size());
-
-        // get the current tag and write it out
-        String beginTag = getTag();
-        writer.write("</" + beginTag + ">\n");
-
-        writer.flush();
-    }
-
-    private void beginTag(String tag) throws java.io.IOException {
-        // store the current tag
-        setTag(tag);
-
-        writeIndent(stack.size());
-
-        // write tag out
-        writer.write("<" + tag + ">");
-    }
-
-    private void endTag(String tag) throws java.io.IOException {
-        String beginTag = getTag();
-        if (tag.equals(beginTag)) {
-            // get the current tag and write it out
-            writer.write("</" + beginTag + ">\n");
-        } else {
-            ;
-        }
-        writer.flush();
-    }
-
-    private void emptyTag(String tag) throws java.io.IOException {
-        // write an emptyTag
-        writer.write("<" + tag + "/>");
-    }
-
-    private void setTag(String tag) {
-        // add the tag to stack
-        stack.push(tag);
-    }
-
-    private String getTag() {
-        return (String)stack.pop();
-    }
-
-    private void writeNull() throws java.io.IOException {
-        emptyTag("null");
-    }
-
-    private void writeStringData(String s) throws java.io.IOException {
-        if (s == null) {
-            writeNull();
-        } else if (s.equals("")) {
-            writeEmptyString();
-        } else {
-
-            s = processSpecialCharacters(s);
-
-            writer.write(s);
-        }
-    }
-
-    private void writeString(String s) throws java.io.IOException {
-        if (s != null) {
-            writer.write(s);
-        } else  {
-            writeNull();
-        }
-    }
-
-
-    private void writeShort(short s) throws java.io.IOException {
-        writer.write(Short.toString(s));
-    }
-
-    private void writeLong(long l) throws java.io.IOException {
-        writer.write(Long.toString(l));
-    }
-
-    private void writeInteger(int i) throws java.io.IOException {
-        writer.write(Integer.toString(i));
-    }
-
-    private void writeBoolean(boolean b) throws java.io.IOException {
-        writer.write(Boolean.valueOf(b).toString());
-    }
-
-    private void writeFloat(float f) throws java.io.IOException {
-        writer.write(Float.toString(f));
-    }
-
-    private void writeDouble(double d) throws java.io.IOException {
-        writer.write(Double.toString(d));
-    }
-
-    private void writeBigDecimal(java.math.BigDecimal bd) throws java.io.IOException {
-        if (bd != null)
-            writer.write(bd.toString());
-        else
-            emptyTag("null");
-    }
-
-    private void writeIndent(int tabs) throws java.io.IOException {
-        // indent...
-        for (int i = 1; i < tabs; i++) {
-            writer.write("  ");
-        }
-    }
-
-    private void propString(String tag, String s) throws java.io.IOException {
-        beginTag(tag);
-        writeString(s);
-        endTag(tag);
-    }
-
-    private void propInteger(String tag, int i) throws java.io.IOException {
-        beginTag(tag);
-        writeInteger(i);
-        endTag(tag);
-    }
-
-    private void propBoolean(String tag, boolean b) throws java.io.IOException {
-        beginTag(tag);
-        writeBoolean(b);
-        endTag(tag);
-    }
-
-    private void writeEmptyString() throws java.io.IOException {
-        emptyTag("emptyString");
-    }
-    /**
-     * Purely for code coverage purposes..
-     */
-    public boolean writeData(RowSetInternal caller) {
-        return false;
-    }
-
-
-    /**
-     * This function has been added for the processing of special characters
-     * lik <,>,'," and & in the data to be serialized. These have to be taken
-     * of specifically or else there will be parsing error while trying to read
-     * the contents of the XML file.
-     **/
-
-    private String processSpecialCharacters(String s) {
-
-        if(s == null) {
-            return null;
-        }
-        char []charStr = s.toCharArray();
-        String specialStr = "";
-
-        for(int i = 0; i < charStr.length; i++) {
-            if(charStr[i] == '&') {
-                specialStr = specialStr.concat("&amp;");
-            } else if(charStr[i] == '<') {
-                specialStr = specialStr.concat("&lt;");
-            } else if(charStr[i] == '>') {
-                specialStr = specialStr.concat("&gt;");
-            } else if(charStr[i] == '\'') {
-                specialStr = specialStr.concat("&apos;");
-            } else if(charStr[i] == '\"') {
-                specialStr = specialStr.concat("&quot;");
-            } else {
-                specialStr = specialStr.concat(String.valueOf(charStr[i]));
-            }
-        }
-
-        s = specialStr;
-        return s;
-    }
-
-
-    /**
-     * This method re populates the resBundle
-     * during the deserialization process
-     *
-     */
-    private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException {
-        // Default state initialization happens here
-        ois.defaultReadObject();
-        // Initialization of transient Res Bundle happens here .
-        try {
-           resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle();
-        } catch(IOException ioe) {
-            throw new RuntimeException(ioe);
-        }
-
-    }
-
-    static final long serialVersionUID = 7163134986189677641L;
-}
diff --git a/ojluni/src/main/java/com/sun/rowset/internal/XmlErrorHandler.java b/ojluni/src/main/java/com/sun/rowset/internal/XmlErrorHandler.java
deleted file mode 100755
index 099446c..0000000
--- a/ojluni/src/main/java/com/sun/rowset/internal/XmlErrorHandler.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-package com.sun.rowset.internal;
-
-import org.xml.sax.*;
-import org.xml.sax.helpers.DefaultHandler;
-
-import com.sun.rowset.*;
-import javax.sql.rowset.*;
-
-
-/**
- * An implementation of the <code>DefaultHandler</code> interface, which
- * handles all the errors, fatalerrors and warnings while reading the xml file.
- * This is the ErrorHandler which helps <code>WebRowSetXmlReader</code>
- * to handle any errors while reading the xml data.
- */
-
-
-public class XmlErrorHandler extends DefaultHandler {
-       public int errorCounter = 0;
-
-       public void error(SAXParseException e) throws SAXException {
-           errorCounter++;
-
-       }
-
-       public void fatalError(SAXParseException e) throws SAXException {
-           errorCounter++;
-
-       }
-
-       public void warning(SAXParseException exception) throws SAXException {
-
-       }
-}
diff --git a/ojluni/src/main/java/com/sun/rowset/internal/XmlReaderContentHandler.java b/ojluni/src/main/java/com/sun/rowset/internal/XmlReaderContentHandler.java
deleted file mode 100755
index 50cb7e3..0000000
--- a/ojluni/src/main/java/com/sun/rowset/internal/XmlReaderContentHandler.java
+++ /dev/null
@@ -1,1452 +0,0 @@
-/*
- * Copyright (c) 2003, 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
- * 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.rowset.internal;
-
-import java.util.*;
-
-import org.xml.sax.*;
-import org.xml.sax.helpers.*;
-
-import java.sql.*;
-import javax.sql.*;
-
-import javax.sql.rowset.*;
-import com.sun.rowset.*;
-import java.io.IOException;
-import java.text.MessageFormat;
-
-/**
- * The document handler that receives parse events that an XML parser sends while it
- * is parsing an XML document representing a <code>WebRowSet</code> object. The
- * parser sends strings to this <code>XmlReaderContentHandler</code> and then uses
- * these strings as arguments for the <code>XmlReaderContentHandler</code> methods
- * it invokes. The final goal of the SAX parser working with an
- * <code>XmlReaderContentHandler</code> object is to read an XML document that represents
- * a <code>RowSet</code> object.
- * <P>
- * A rowset consists of its properties, metadata, and data values. An XML document
- * representating a rowset includes the values in these three categories along with
- * appropriate XML tags to identify them.  It also includes a top-level XML tag for
- * the rowset and three section tags identifying the three categories of values.
- * <P>
- * The tags in an XML document are hierarchical.
- * This means that the top-level tag, <code>RowSet</code>, is
- * followed by the three sections with appropriate tags, which are in turn each
- * followed by their constituent elements. For example, the <code>properties</code>
- * element will be followed by an element for each of the properties listed in
- * in this <code>XmlReaderContentHandler</code> object's <code>properties</code>
- * field.  The content of the other two fields, <code>colDef</code>, which lists
- * the rowset's metadata elements, and <code>data</code>, which lists the rowset's data
- * elements, are handled similarly .
- * <P>
- * This implementation of <code>XmlReaderContentHandler</code> provides the means for the
- * parser to determine which elements need to have a value set and then to set
- * those values. The methods in this class are all called by the parser; an
- * application programmer never calls them directly.
- *
- */
-
-public class XmlReaderContentHandler extends DefaultHandler {
-
-    private HashMap propMap;
-    private HashMap colDefMap;
-    private HashMap dataMap;
-
-    private HashMap typeMap;
-
-    private Vector updates;
-    private Vector keyCols;
-
-    private String columnValue;
-    private String propertyValue;
-    private String metaDataValue;
-
-    private int tag;
-    private int state;
-
-    private WebRowSetImpl rs;
-    private boolean nullVal;
-    private boolean emptyStringVal;
-    private RowSetMetaData md;
-    private int idx;
-    private String lastval;
-    private String Key_map;
-    private String Value_map;
-    private String tempStr;
-    private String tempUpdate;
-    private String tempCommand;
-    private Object [] upd;
-
-    /**
-     * A list of the properties for a rowset. There is a constant defined to
-     * correspond to each of these properties so that a <code>HashMap</code>
-     * object can be created to map the properties, which are strings, to
-     * the constants, which are integers.
-     */
-    private String [] properties = {"command", "concurrency", "datasource",
-                            "escape-processing", "fetch-direction", "fetch-size",
-                            "isolation-level", "key-columns", "map",
-                            "max-field-size", "max-rows", "query-timeout",
-                            "read-only", "rowset-type", "show-deleted",
-                            "table-name", "url", "null", "column", "type",
-                            "class", "sync-provider", "sync-provider-name",
-                             "sync-provider-vendor", "sync-provider-version",
-                             "sync-provider-grade","data-source-lock"};
-
-    /**
-     * A constant representing the tag for the command property.
-     */
-    private final static int CommandTag = 0;
-
-    /**
-     * A constant representing the tag for the concurrency property.
-     */
-    private final static int ConcurrencyTag = 1;
-
-    /**
-     * A constant representing the tag for the datasource property.
-     */
-    private final static int DatasourceTag = 2;
-
-    /**
-     * A constant representing the tag for the escape-processing property.
-     */
-    private final static int EscapeProcessingTag = 3;
-
-    /**
-     * A constant representing the tag for the fetch-direction property.
-     */
-    private final static int FetchDirectionTag = 4;
-
-    /**
-     * A constant representing the tag for the fetch-size property.
-     */
-    private final static int FetchSizeTag = 5;
-
-    /**
-     * A constant representing the tag for the isolation-level property
-     */
-    private final static int IsolationLevelTag = 6;
-
-    /**
-     * A constant representing the tag for the key-columns property.
-     */
-    private final static int KeycolsTag = 7;
-
-    /**
-     * A constant representing the tag for the map property.
-     * This map is the type map that specifies the custom mapping
-     * for an SQL user-defined type.
-     */
-    private final static int MapTag = 8;
-
-    /**
-     * A constant representing the tag for the max-field-size property.
-     */
-    private final static int MaxFieldSizeTag = 9;
-
-    /**
-     * A constant representing the tag for the max-rows property.
-     */
-    private final static int MaxRowsTag = 10;
-
-    /**
-     * A constant representing the tag for the query-timeout property.
-     */
-    private final static int QueryTimeoutTag = 11;
-
-    /**
-     * A constant representing the tag for the read-only property.
-     */
-    private final static int ReadOnlyTag = 12;
-
-    /**
-     * A constant representing the tag for the rowset-type property.
-     */
-    private final static int RowsetTypeTag = 13;
-
-    /**
-     * A constant representing the tag for the show-deleted property.
-     */
-    private final static int ShowDeletedTag = 14;
-
-    /**
-     * A constant representing the tag for the table-name property.
-     */
-    private final static int TableNameTag = 15;
-
-    /**
-     * A constant representing the tag for the URL property.
-     */
-    private final static int UrlTag = 16;
-
-    /**
-     * A constant representing the tag for the null property.
-     */
-    private final static int PropNullTag = 17;
-
-    /**
-     * A constant representing the tag for the column property.
-     */
-    private final static int PropColumnTag = 18;
-
-    /**
-     * A constant representing the tag for the type property.
-     */
-    private final static int PropTypeTag = 19;
-
-    /**
-     * A constant representing the tag for the class property.
-     */
-    private final static int PropClassTag = 20;
-
-    /**
-     * A constant representing the tag for the sync-provider.
-     */
-    private final static int SyncProviderTag = 21;
-
-    /**
-     * A constant representing the tag for the sync-provider
-     * name
-     */
-    private final static int SyncProviderNameTag = 22;
-
-    /**
-     * A constant representing the tag for the sync-provider
-     * vendor tag.
-     */
-    private final static int SyncProviderVendorTag = 23;
-
-    /**
-     * A constant representing the tag for the sync-provider
-     * version tag.
-     */
-    private final static int SyncProviderVersionTag = 24;
-
-    /**
-     * A constant representing the tag for the sync-provider
-     * grade tag.
-     */
-    private final static int SyncProviderGradeTag = 25;
-
-    /**
-     * A constant representing the tag for the data source lock.
-     */
-    private final static int DataSourceLock = 26;
-
-    /**
-     * A listing of the kinds of metadata information available about
-     * the columns in a <code>WebRowSet</code> object.
-     */
-    private String [] colDef = {"column-count", "column-definition", "column-index",
-                        "auto-increment", "case-sensitive", "currency",
-                        "nullable", "signed", "searchable",
-                        "column-display-size", "column-label", "column-name",
-                        "schema-name", "column-precision", "column-scale",
-                        "table-name", "catalog-name", "column-type",
-                        "column-type-name", "null"};
-
-
-    /**
-     * A constant representing the tag for column-count.
-     */
-    private final static int ColumnCountTag = 0;
-
-    /**
-     * A constant representing the tag for column-definition.
-     */
-    private final static int ColumnDefinitionTag = 1;
-
-    /**
-     * A constant representing the tag for column-index.
-     */
-    private final static int ColumnIndexTag = 2;
-
-    /**
-     * A constant representing the tag for auto-increment.
-     */
-    private final static int AutoIncrementTag = 3;
-
-    /**
-     * A constant representing the tag for case-sensitive.
-     */
-    private final static int CaseSensitiveTag = 4;
-
-    /**
-     * A constant representing the tag for currency.
-     */
-    private final static int CurrencyTag = 5;
-
-    /**
-     * A constant representing the tag for nullable.
-     */
-    private final static int NullableTag = 6;
-
-    /**
-     * A constant representing the tag for signed.
-     */
-    private final static int SignedTag = 7;
-
-    /**
-     * A constant representing the tag for searchable.
-     */
-    private final static int SearchableTag = 8;
-
-    /**
-     * A constant representing the tag for column-display-size.
-     */
-    private final static int ColumnDisplaySizeTag = 9;
-
-    /**
-     * A constant representing the tag for column-label.
-     */
-    private final static int ColumnLabelTag = 10;
-
-    /**
-     * A constant representing the tag for column-name.
-     */
-    private final static int ColumnNameTag = 11;
-
-    /**
-     * A constant representing the tag for schema-name.
-     */
-    private final static int SchemaNameTag = 12;
-
-    /**
-     * A constant representing the tag for column-precision.
-     */
-    private final static int ColumnPrecisionTag = 13;
-
-    /**
-     * A constant representing the tag for column-scale.
-     */
-    private final static int ColumnScaleTag = 14;
-
-    /**
-     * A constant representing the tag for table-name.
-     */
-    private final static int MetaTableNameTag = 15;
-
-    /**
-     * A constant representing the tag for catalog-name.
-     */
-    private final static int CatalogNameTag = 16;
-
-    /**
-     * A constant representing the tag for column-type.
-     */
-    private final static int ColumnTypeTag = 17;
-
-    /**
-     * A constant representing the tag for column-type-name.
-     */
-    private final static int ColumnTypeNameTag = 18;
-
-    /**
-     * A constant representing the tag for null.
-     */
-    private final static int MetaNullTag = 19;
-
-    private String [] data = {"currentRow", "columnValue", "insertRow", "deleteRow", "insdel", "updateRow", "null" , "emptyString"};
-
-    private final static int RowTag = 0;
-    private final static int ColTag = 1;
-    private final static int InsTag = 2;
-    private final static int DelTag = 3;
-    private final static int InsDelTag = 4;
-    private final static int UpdTag = 5;
-    private final static int NullTag = 6;
-    private final static int EmptyStringTag = 7;
-
-    /**
-     * A constant indicating the state of this <code>XmlReaderContentHandler</code>
-     * object in which it has not yet been called by the SAX parser and therefore
-     * has no indication of what type of input to expect from the parser next.
-     * <P>
-     * The state is set to <code>INITIAL</code> at the end of each
-     * section, which allows the sections to appear in any order and
-     * still be parsed correctly (except that metadata must be
-     * set before data values can be set).
-     */
-    private final static int INITIAL = 0;
-
-    /**
-     * A constant indicating the state in which this <code>XmlReaderContentHandler</code>
-     * object expects the next input received from the
-     * SAX parser to be a string corresponding to one of the elements in
-     * <code>properties</code>.
-     */
-    private final static int PROPERTIES = 1;
-
-    /**
-     * A constant indicating the state in which this <code>XmlReaderContentHandler</code>
-     * object expects the next input received from the
-     * SAX parser to be a string corresponding to one of the elements in
-     * <code>colDef</code>.
-     */
-    private final static int METADATA = 2;
-
-    /**
-     * A constant indicating the state in which this <code>XmlReaderContentHandler</code>
-     * object expects the next input received from the
-     * SAX parser to be a string corresponding to one of the elements in
-     * <code>data</code>.
-     */
-    private final static int DATA = 3;
-
-    private  JdbcRowSetResourceBundle resBundle;
-
-    /**
-     * Constructs a new <code>XmlReaderContentHandler</code> object that will
-     * assist the SAX parser in reading a <code>WebRowSet</code> object in the
-     * format of an XML document. In addition to setting some default values,
-     * this constructor creates three <code>HashMap</code> objects, one for
-     * properties, one for metadata, and one for data.  These hash maps map the
-     * strings sent by the SAX parser to integer constants so that they can be
-     * compared more efficiently in <code>switch</code> statements.
-     *
-     * @param r the <code>RowSet</code> object in XML format that will be read
-     */
-    public XmlReaderContentHandler(RowSet r) {
-        // keep the rowset we've been given
-        rs = (WebRowSetImpl)r;
-
-        // set-up the token maps
-        initMaps();
-
-        // allocate the collection for the updates
-        updates = new Vector();
-
-        // start out with the empty string
-        columnValue = "";
-        propertyValue = "";
-        metaDataValue = "";
-
-        nullVal = false;
-        idx = 0;
-        tempStr = "";
-        tempUpdate = "";
-        tempCommand = "";
-
-        try {
-           resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle();
-        } catch(IOException ioe) {
-            throw new RuntimeException(ioe);
-        }
-    }
-
-    /**
-     * Creates and initializes three new <code>HashMap</code> objects that map
-     * the strings returned by the SAX parser to <code>Integer</code>
-     * objects.  The strings returned by the parser will match the strings that
-     * are array elements in this <code>XmlReaderContentHandler</code> object's
-     * <code>properties</code>, <code>colDef</code>, or <code>data</code>
-     * fields. For each array element in these fields, there is a corresponding
-     * constant defined. It is to these constants that the strings are mapped.
-     * In the <code>HashMap</code> objects, the string is the key, and the
-     * integer is the value.
-     * <P>
-     * The purpose of the mapping is to make comparisons faster.  Because comparing
-     * numbers is more efficient than comparing strings, the strings returned
-     * by the parser are mapped to integers, which can then be used in a
-     * <code>switch</code> statement.
-     */
-    private void initMaps() {
-        int items, i;
-
-        propMap = new HashMap();
-        items = properties.length;
-
-        for (i=0;i<items;i++) {
-            propMap.put(properties[i], Integer.valueOf(i));
-        }
-
-        colDefMap = new HashMap();
-        items = colDef.length;
-
-        for (i=0;i<items;i++) {
-            colDefMap.put(colDef[i], Integer.valueOf(i));
-        }
-
-        dataMap = new HashMap();
-        items = data.length;
-
-        for (i=0;i<items;i++) {
-            dataMap.put(data[i], Integer.valueOf(i));
-        }
-
-        //Initialize connection map here
-        typeMap = new HashMap();
-    }
-
-    public void startDocument() throws SAXException {
-    }
-
-    public void endDocument() throws SAXException {
-    }
-
-
-    /**
-     * Sets this <code>XmlReaderContentHandler</code> object's <code>tag</code>
-     * field if the given name is the key for a tag and this object's state
-     * is not <code>INITIAL</code>.  The field is set
-     * to the constant that corresponds to the given element name.
-     * If the state is <code>INITIAL</code>, the state is set to the given
-     * name, which will be one of the sections <code>PROPERTIES</code>,
-     * <code>METADATA</code>, or <code>DATA</code>.  In either case, this
-     * method puts this document handler in the proper state for calling
-     * the method <code>endElement</code>.
-     * <P>
-     * If the state is <code>DATA</code> and the tag is <code>RowTag</code>,
-     * <code>DelTag</code>, or <code>InsTag</code>, this method moves the
-     * rowset's cursor to the insert row and sets this
-     * <code>XmlReaderContentHandler</code> object's <code>idx</code>
-     * field to <code>0</code> so that it will be in the proper
-     * state when the parser calls the method <code>endElement</code>.
-     *
-     * @param lName the name of the element; either (1) one of the array
-     *        elements in the fields <code>properties</code>,
-     *        <code>colDef</code>, or <code>data</code> or
-     *        (2) one of the <code>RowSet</code> elements
-     *        <code>"properties"</code>, <code>"metadata"</code>, or
-     *        <code>"data"</code>
-     * @param attributes <code>org.xml.sax.AttributeList</code> objects that are
-     *             attributes of the named section element; may be <code>null</code>
-     *             if there are no attributes, which is the case for
-     *             <code>WebRowSet</code> objects
-     * @exception SAXException if a general SAX error occurs
-     */
-    public void startElement(String uri, String lName, String qName, Attributes attributes) throws SAXException {
-        int tag;
-        String name = "";
-
-        name = lName;
-
-        switch (getState()) {
-        case PROPERTIES:
-
-            tempCommand = "";
-            tag = ((Integer)propMap.get(name)).intValue();
-            if (tag == PropNullTag)
-               setNullValue(true);
-            else
-                setTag(tag);
-            break;
-        case METADATA:
-            tag = ((Integer)colDefMap.get(name)).intValue();
-
-            if (tag == MetaNullTag)
-                setNullValue(true);
-            else
-                setTag(tag);
-            break;
-        case DATA:
-
-            /**
-              * This has been added to clear out the values of the previous read
-              * so that we should not add up values of data between different tags
-              */
-            tempStr = "";
-            tempUpdate = "";
-            if(dataMap.get(name) == null) {
-                tag = NullTag;
-            } else if(((Integer)dataMap.get(name)).intValue() == EmptyStringTag) {
-                tag = EmptyStringTag;
-            } else {
-                 tag = ((Integer)dataMap.get(name)).intValue();
-            }
-
-            if (tag == NullTag) {
-                setNullValue(true);
-            } else if(tag == EmptyStringTag) {
-                setEmptyStringValue(true);
-            } else {
-                setTag(tag);
-
-                if (tag == RowTag || tag == DelTag || tag == InsTag) {
-                    idx = 0;
-                    try {
-                        rs.moveToInsertRow();
-                    } catch (SQLException ex) {
-                        ;
-                    }
-                }
-            }
-
-            break;
-        default:
-            setState(name);
-        }
-
-    }
-
-    /**
-     * Sets the value for the given element if <code>name</code> is one of
-     * the array elements in the fields <code>properties</code>,
-     * <code>colDef</code>, or <code>data</code> and this
-     * <code>XmlReaderContentHandler</code> object's state is not
-     * <code>INITIAL</code>. If the state is <code>INITIAL</code>,
-     * this method does nothing.
-     * <P>
-     * If the state is <code>METADATA</code> and
-     * the argument supplied is <code>"metadata"</code>, the rowset's
-     * metadata is set. If the state is <code>PROPERTIES</code>, the
-     * appropriate property is set using the given name to determine
-     * the appropriate value. If the state is <code>DATA</code> and
-     * the argument supplied is <code>"data"</code>, this method sets
-     * the state to <code>INITIAL</code> and returns.  If the argument
-     * supplied is one of the elements in the field <code>data</code>,
-     * this method makes the appropriate changes to the rowset's data.
-     *
-     * @param lName the name of the element; either (1) one of the array
-     *        elements in the fields <code>properties</code>,
-     *        <code>colDef</code>, or <code>data</code> or
-     *        (2) one of the <code>RowSet</code> elements
-     *        <code>"properties"</code>, <code>"metadata"</code>, or
-     *        <code>"data"</code>
-     *
-     * @exception SAXException if a general SAX error occurs
-     */
-    public void endElement(String uri, String lName, String qName) throws SAXException {
-        int tag;
-
-        String name = "";
-        name = lName;
-
-        switch (getState()) {
-        case PROPERTIES:
-            if (name.equals("properties")) {
-                state = INITIAL;
-                break;
-            }
-
-            try {
-                tag = ((Integer)propMap.get(name)).intValue();
-                switch (tag) {
-                case KeycolsTag:
-                    if (keyCols != null) {
-                        int i[] = new int[keyCols.size()];
-                        for (int j = 0; j < i.length; j++)
-                            i[j] = Integer.parseInt((String)keyCols.elementAt(j));
-                        rs.setKeyColumns(i);
-                    }
-                    break;
-
-                 case PropClassTag:
-                     //Added the handling for Class tags to take care of maps
-                     //Makes an entry into the map upon end of class tag
-                     try{
-                          typeMap.put(Key_map,Class.forName(Value_map));
-
-                        }catch(ClassNotFoundException ex) {
-                          throw new SAXException(MessageFormat.format(resBundle.handleGetObject("xmlrch.errmap").toString(), ex.getMessage()));
-                        }
-                      break;
-
-                 case MapTag:
-                      //Added the handling for Map to take set the typeMap
-                      rs.setTypeMap(typeMap);
-                      break;
-
-                default:
-                    break;
-                }
-
-                if (getNullValue()) {
-                    setPropertyValue(null);
-                    setNullValue(false);
-                } else {
-                    setPropertyValue(propertyValue);
-                }
-            } catch (SQLException ex) {
-                throw new SAXException(ex.getMessage());
-            }
-
-            // propertyValue need to be reset to an empty string
-            propertyValue = "";
-            setTag(-1);
-            break;
-        case METADATA:
-            if (name.equals("metadata")) {
-                try {
-                    rs.setMetaData(md);
-                    state = INITIAL;
-                } catch (SQLException ex) {
-                    throw new SAXException(MessageFormat.format(resBundle.handleGetObject("xmlrch.errmetadata").toString(), ex.getMessage()));
-                }
-            } else {
-                try {
-                    if (getNullValue()) {
-                        setMetaDataValue(null);
-                        setNullValue(false);
-                    } else {
-                        setMetaDataValue(metaDataValue);
-                    }
-                } catch (SQLException ex) {
-                    throw new SAXException(MessageFormat.format(resBundle.handleGetObject("xmlrch.errmetadata").toString(), ex.getMessage()));
-
-                }
-                // metaDataValue needs to be reset to an empty string
-                metaDataValue = "";
-            }
-            setTag(-1);
-            break;
-        case DATA:
-            if (name.equals("data")) {
-                state = INITIAL;
-                return;
-            }
-
-            if(dataMap.get(name) == null) {
-                tag = NullTag;
-            } else {
-                 tag = ((Integer)dataMap.get(name)).intValue();
-            }
-            switch (tag) {
-            case ColTag:
-                try {
-                    idx++;
-                    if (getNullValue()) {
-                        insertValue(null);
-                        setNullValue(false);
-                    } else {
-                        insertValue(tempStr);
-                    }
-                    // columnValue now need to be reset to the empty string
-                    columnValue = "";
-                } catch (SQLException ex) {
-                    throw new SAXException(MessageFormat.format(resBundle.handleGetObject("xmlrch.errinsertval").toString(), ex.getMessage()));
-                }
-                break;
-            case RowTag:
-                try {
-                    rs.insertRow();
-                    rs.moveToCurrentRow();
-                    rs.next();
-
-                    // Making this as the original to turn off the
-                    // rowInserted flagging
-                    rs.setOriginalRow();
-
-                    applyUpdates();
-                } catch (SQLException ex) {
-                    throw new SAXException(MessageFormat.format(resBundle.handleGetObject("xmlrch.errconstr").toString(), ex.getMessage()));
-                }
-                break;
-            case DelTag:
-                try {
-                    rs.insertRow();
-                    rs.moveToCurrentRow();
-                    rs.next();
-                    rs.setOriginalRow();
-                    applyUpdates();
-                } catch (SQLException ex) {
-                    throw new SAXException(MessageFormat.format(resBundle.handleGetObject("xmlrch.errdel").toString() , ex.getMessage()));
-                }
-                break;
-            case InsTag:
-                try {
-                    rs.insertRow();
-                    rs.moveToCurrentRow();
-                    rs.next();
-                    applyUpdates();
-                } catch (SQLException ex) {
-                    throw new SAXException(MessageFormat.format(resBundle.handleGetObject("xmlrch.errinsert").toString() , ex.getMessage()));
-                }
-                break;
-
-            case InsDelTag:
-                try {
-                    rs.insertRow();
-                    rs.moveToCurrentRow();
-                    rs.next();
-                    rs.setOriginalRow();
-                    applyUpdates();
-                } catch (SQLException ex) {
-                    throw new SAXException(MessageFormat.format(resBundle.handleGetObject("xmlrch.errinsdel").toString() , ex.getMessage()));
-                }
-                break;
-
-             case UpdTag:
-                 try {
-                        if(getNullValue())
-                         {
-                          insertValue(null);
-                          setNullValue(false);
-                         } else if(getEmptyStringValue()) {
-                               insertValue("");
-                               setEmptyStringValue(false);
-                         } else {
-                            updates.add(upd);
-                         }
-                 }  catch(SQLException ex) {
-                        throw new SAXException(MessageFormat.format(resBundle.handleGetObject("xmlrch.errupdate").toString() , ex.getMessage()));
-                 }
-                break;
-
-            default:
-                break;
-            }
-        default:
-            break;
-        }
-    }
-
-    private void applyUpdates() throws SAXException {
-        // now handle any updates
-        if (updates.size() > 0) {
-            try {
-                Object upd[];
-                Iterator i = updates.iterator();
-                while (i.hasNext()) {
-                    upd = (Object [])i.next();
-                    idx = ((Integer)upd[0]).intValue();
-
-                   if(!(lastval.equals(upd[1]))){
-                       insertValue((String)(upd[1]));
-                    }
-                }
-
-                rs.updateRow();
-                } catch (SQLException ex) {
-                    throw new SAXException(MessageFormat.format(resBundle.handleGetObject("xmlrch.errupdrow").toString() , ex.getMessage()));
-                }
-            updates.removeAllElements();
-        }
-
-
-    }
-
-    /**
-     * Sets a property, metadata, or data value with the characters in
-     * the given array of characters, starting with the array element
-     * indicated by <code>start</code> and continuing for <code>length</code>
-     * number of characters.
-     * <P>
-     * The SAX parser invokes this method and supplies
-     * the character array, start position, and length parameter values it
-     * got from parsing the XML document.  An application programmer never
-     * invokes this method directly.
-     *
-     * @param ch an array of characters supplied by the SAX parser, all or part of
-     *         which will be used to set a value
-     * @param start the position in the given array at which to start
-     * @param length the number of consecutive characters to use
-     */
-    public void characters(char[] ch, int start, int length) throws SAXException {
-        try {
-            switch (getState()) {
-            case PROPERTIES:
-                propertyValue = new String(ch, start, length);
-
-                /**
-                  * This has been added for handling of special characters. When special
-                  * characters are encountered the characters function gets called for
-                  * each of the characters so we need to append the value got in the
-                  * previous call as it is the same data present between the start and
-                  * the end tag.
-                  **/
-                tempCommand = tempCommand.concat(propertyValue);
-                propertyValue = tempCommand;
-
-                // Added the following check for handling of type tags in maps
-                if(tag == PropTypeTag)
-                {
-                        Key_map = propertyValue;
-                }
-
-                // Added the following check for handling of class tags in maps
-                else if(tag == PropClassTag)
-                {
-                        Value_map = propertyValue;
-                }
-                break;
-
-            case METADATA:
-
-                // The parser will come here after the endElement as there is
-                // "\n" in the after endTag is printed. This will cause a problem
-                // when the data between the tags is an empty string so adding
-                // below condition to take care of that situation.
-
-                if (tag == -1)
-                {
-                        break;
-                }
-
-                metaDataValue = new String(ch, start, length);
-                break;
-            case DATA:
-                setDataValue(ch, start, length);
-                break;
-            default:
-                ;
-            }
-        } catch (SQLException ex) {
-            throw new SAXException(resBundle.handleGetObject("xmlrch.chars").toString() + ex.getMessage());
-        }
-    }
-
-    private void setState(String s) throws SAXException {
-        if (s.equals("webRowSet")) {
-            state = INITIAL;
-        } else if (s.equals("properties")) {
-            if (state != PROPERTIES)
-                state = PROPERTIES;
-            else
-                state = INITIAL;
-        } else if (s.equals("metadata")) {
-            if (state != METADATA)
-                state = METADATA;
-            else
-                state = INITIAL;
-        } else if (s.equals("data")) {
-            if (state != DATA)
-                state = DATA;
-            else
-                state = INITIAL;
-        }
-
-    }
-
-    /**
-     * Retrieves the current state of this <code>XmlReaderContentHandler</code>
-     * object's rowset, which is stored in the document handler's
-     * <code>state</code> field.
-     *
-     * @return one of the following constants:
-     *         <code>XmlReaderContentHandler.PROPERTIES</code>
-     *         <code>XmlReaderContentHandler.METADATA</code>
-     *         <code>XmlReaderContentHandler.DATA</code>
-     *         <code>XmlReaderContentHandler.INITIAL</code>
-     */
-    private int getState() {
-        return state;
-    }
-
-    private void setTag(int t) {
-        tag = t;
-    }
-
-    private int getTag() {
-        return tag;
-    }
-
-    private void setNullValue(boolean n) {
-        nullVal = n;
-    }
-
-    private boolean getNullValue() {
-        return nullVal;
-    }
-
-    private void setEmptyStringValue(boolean e) {
-        emptyStringVal = e;
-    }
-
-    private boolean getEmptyStringValue() {
-        return emptyStringVal;
-    }
-
-    private String getStringValue(String s) {
-         return s;
-    }
-
-    private int getIntegerValue(String s) {
-        return Integer.parseInt(s);
-    }
-
-    private boolean getBooleanValue(String s) {
-
-        return Boolean.valueOf(s).booleanValue();
-    }
-
-    private java.math.BigDecimal getBigDecimalValue(String s) {
-        return new java.math.BigDecimal(s);
-    }
-
-    private byte getByteValue(String s) {
-        return Byte.parseByte(s);
-    }
-
-    private short getShortValue(String s) {
-        return Short.parseShort(s);
-    }
-
-    private long getLongValue(String s) {
-        return Long.parseLong(s);
-    }
-
-    private float getFloatValue(String s) {
-        return Float.parseFloat(s);
-    }
-
-    private double getDoubleValue(String s) {
-        return Double.parseDouble(s);
-    }
-
-    private byte[] getBinaryValue(String s) {
-        return s.getBytes();
-    }
-
-    private java.sql.Date getDateValue(String s) {
-        return new java.sql.Date(getLongValue(s));
-    }
-
-    private java.sql.Time getTimeValue(String s) {
-        return new java.sql.Time(getLongValue(s));
-    }
-
-    private java.sql.Timestamp getTimestampValue(String s) {
-        return new java.sql.Timestamp(getLongValue(s));
-    }
-
-    private void setPropertyValue(String s) throws SQLException {
-        // find out if we are going to be dealing with a null
-        boolean nullValue = getNullValue();
-
-        switch(getTag()) {
-        case CommandTag:
-            if (nullValue)
-               ; //rs.setCommand(null);
-            else
-                rs.setCommand(s);
-            break;
-        case ConcurrencyTag:
-            if (nullValue)
-                throw new SQLException(resBundle.handleGetObject("xmlrch.badvalue").toString());
-            else
-                rs.setConcurrency(getIntegerValue(s));
-            break;
-        case DatasourceTag:
-            if (nullValue)
-                rs.setDataSourceName(null);
-            else
-                rs.setDataSourceName(s);
-            break;
-        case EscapeProcessingTag:
-            if (nullValue)
-                throw new SQLException(resBundle.handleGetObject("xmlrch.badvalue").toString());
-            else
-                rs.setEscapeProcessing(getBooleanValue(s));
-            break;
-        case FetchDirectionTag:
-            if (nullValue)
-                throw new SQLException(resBundle.handleGetObject("xmlrch.badvalue").toString());
-            else
-                rs.setFetchDirection(getIntegerValue(s));
-            break;
-        case FetchSizeTag:
-            if (nullValue)
-                throw new SQLException(resBundle.handleGetObject("xmlrch.badvalue").toString());
-            else
-                rs.setFetchSize(getIntegerValue(s));
-            break;
-        case IsolationLevelTag:
-            if (nullValue)
-                throw new SQLException(resBundle.handleGetObject("xmlrch.badvalue").toString());
-            else
-                rs.setTransactionIsolation(getIntegerValue(s));
-            break;
-        case KeycolsTag:
-            break;
-        case PropColumnTag:
-            if (keyCols == null)
-                keyCols = new Vector();
-            keyCols.add(s);
-            break;
-        case MapTag:
-            break;
-        case MaxFieldSizeTag:
-            if (nullValue)
-                throw new SQLException(resBundle.handleGetObject("xmlrch.badvalue").toString());
-            else
-                rs.setMaxFieldSize(getIntegerValue(s));
-            break;
-        case MaxRowsTag:
-            if (nullValue)
-                throw new SQLException(resBundle.handleGetObject("xmlrch.badvalue").toString());
-            else
-                rs.setMaxRows(getIntegerValue(s));
-            break;
-        case QueryTimeoutTag:
-            if (nullValue)
-                throw new SQLException(resBundle.handleGetObject("xmlrch.badvalue").toString());
-            else
-                rs.setQueryTimeout(getIntegerValue(s));
-            break;
-        case ReadOnlyTag:
-            if (nullValue)
-                throw new SQLException(resBundle.handleGetObject("xmlrch.badvalue").toString());
-            else
-                rs.setReadOnly(getBooleanValue(s));
-            break;
-        case RowsetTypeTag:
-            if (nullValue) {
-                throw new SQLException(resBundle.handleGetObject("xmlrch.badvalue").toString());
-            } else {
-                //rs.setType(getIntegerValue(s));
-                String strType = getStringValue(s);
-                int iType = 0;
-
-                if(strType.trim().equals("ResultSet.TYPE_SCROLL_INSENSITIVE")) {
-                   iType = 1004;
-                } else if(strType.trim().equals("ResultSet.TYPE_SCROLL_SENSITIVE"))   {
-                   iType = 1005;
-                } else if(strType.trim().equals("ResultSet.TYPE_FORWARD_ONLY")) {
-                   iType = 1003;
-                }
-                rs.setType(iType);
-            }
-            break;
-        case ShowDeletedTag:
-            if (nullValue)
-                throw new SQLException(resBundle.handleGetObject("xmlrch.badvalue").toString());
-            else
-                rs.setShowDeleted(getBooleanValue(s));
-            break;
-        case TableNameTag:
-            if (nullValue)
-                //rs.setTableName(null);
-                ;
-            else
-                rs.setTableName(s);
-            break;
-        case UrlTag:
-            if (nullValue)
-                rs.setUrl(null);
-            else
-                rs.setUrl(s);
-            break;
-        case SyncProviderNameTag:
-            if (nullValue) {
-                rs.setSyncProvider(null);
-            } else {
-                String str = s.substring(0,s.indexOf("@")+1);
-                rs.setSyncProvider(str);
-            }
-            break;
-        case SyncProviderVendorTag:
-            // to be implemented
-            break;
-        case SyncProviderVersionTag:
-            // to be implemented
-            break;
-        case SyncProviderGradeTag:
-            // to be implemented
-            break;
-        case DataSourceLock:
-            // to be implemented
-            break;
-        default:
-            break;
-        }
-
-    }
-
-    private void setMetaDataValue(String s) throws SQLException {
-        // find out if we are going to be dealing with a null
-        boolean nullValue = getNullValue();
-
-        switch (getTag()) {
-        case ColumnCountTag:
-            md = new RowSetMetaDataImpl();
-            idx = 0;
-
-            if (nullValue) {
-                throw new SQLException(resBundle.handleGetObject("xmlrch.badvalue1").toString());
-            } else {
-                md.setColumnCount(getIntegerValue(s));
-            }
-            break;
-        case ColumnDefinitionTag:
-            break;
-        case ColumnIndexTag:
-            idx++;
-            break;
-        case AutoIncrementTag:
-            if (nullValue)
-                throw new SQLException(resBundle.handleGetObject("xmlrch.badvalue1").toString());
-            else
-                md.setAutoIncrement(idx, getBooleanValue(s));
-            break;
-        case CaseSensitiveTag:
-            if (nullValue)
-                throw new SQLException(resBundle.handleGetObject("xmlrch.badvalue1").toString());
-            else
-                md.setCaseSensitive(idx, getBooleanValue(s));
-            break;
-        case CurrencyTag:
-            if (nullValue)
-                throw new SQLException(resBundle.handleGetObject("xmlrch.badvalue1").toString());
-            else
-                md.setCurrency(idx, getBooleanValue(s));
-            break;
-        case NullableTag:
-            if (nullValue)
-                throw new SQLException(resBundle.handleGetObject("xmlrch.badvalue1").toString());
-            else
-                md.setNullable(idx, getIntegerValue(s));
-            break;
-        case SignedTag:
-            if (nullValue)
-                throw new SQLException(resBundle.handleGetObject("xmlrch.badvalue1").toString());
-            else
-                md.setSigned(idx, getBooleanValue(s));
-            break;
-        case SearchableTag:
-            if (nullValue)
-                throw new SQLException(resBundle.handleGetObject("xmlrch.badvalue1").toString());
-            else
-                md.setSearchable(idx, getBooleanValue(s));
-            break;
-        case ColumnDisplaySizeTag:
-            if (nullValue)
-                throw new SQLException(resBundle.handleGetObject("xmlrch.badvalue1").toString());
-            else
-                md.setColumnDisplaySize(idx, getIntegerValue(s));
-            break;
-        case ColumnLabelTag:
-            if (nullValue)
-                md.setColumnLabel(idx, null);
-            else
-                md.setColumnLabel(idx, s);
-            break;
-        case ColumnNameTag:
-            if (nullValue)
-                md.setColumnName(idx, null);
-            else
-                md.setColumnName(idx, s);
-
-            break;
-        case SchemaNameTag:
-            if (nullValue) {
-                md.setSchemaName(idx, null); }
-            else
-                md.setSchemaName(idx, s);
-            break;
-        case ColumnPrecisionTag:
-            if (nullValue)
-                throw new SQLException(resBundle.handleGetObject("xmlrch.badvalue1").toString());
-            else
-                md.setPrecision(idx, getIntegerValue(s));
-            break;
-        case ColumnScaleTag:
-            if (nullValue)
-                throw new SQLException(resBundle.handleGetObject("xmlrch.badvalue1").toString());
-            else
-                md.setScale(idx, getIntegerValue(s));
-            break;
-        case MetaTableNameTag:
-            if (nullValue)
-                md.setTableName(idx, null);
-            else
-                md.setTableName(idx, s);
-            break;
-        case CatalogNameTag:
-            if (nullValue)
-                md.setCatalogName(idx, null);
-            else
-                md.setCatalogName(idx, s);
-            break;
-        case ColumnTypeTag:
-            if (nullValue)
-                throw new SQLException(resBundle.handleGetObject("xmlrch.badvalue1").toString());
-            else
-                md.setColumnType(idx, getIntegerValue(s));
-            break;
-        case ColumnTypeNameTag:
-            if (nullValue)
-                md.setColumnTypeName(idx, null);
-            else
-                md.setColumnTypeName(idx, s);
-            break;
-        default:
-            //System.out.println("MetaData: Unknown Tag: (" + getTag() + ")");
-            break;
-
-        }
-    }
-
-    private void setDataValue(char[] ch, int start, int len) throws SQLException {
-        switch (getTag()) {
-        case ColTag:
-            columnValue = new String(ch, start, len);
-            /**
-              * This has been added for handling of special characters. When special
-              * characters are encountered the characters function gets called for
-              * each of the characters so we need to append the value got in the
-              * previous call as it is the same data present between the start and
-              * the end tag.
-              **/
-            tempStr = tempStr.concat(columnValue);
-            break;
-        case UpdTag:
-            upd = new Object[2];
-
-            /**
-              * This has been added for handling of special characters. When special
-              * characters are encountered the characters function gets called for
-              * each of the characters so we need to append the value got in the
-              * previous call as it is the same data present between the start and
-              * the end tag.
-              **/
-
-            tempUpdate = tempUpdate.concat(new String(ch,start,len));
-            upd[0] = Integer.valueOf(idx);
-            upd[1] = tempUpdate;
-            //updates.add(upd);
-
-            lastval = (String)upd[1];
-            //insertValue(ch, start, len);
-            break;
-        case InsTag:
-
-        }
-    }
-
-    private void insertValue(String s) throws SQLException {
-
-        if (getNullValue()) {
-            rs.updateNull(idx);
-            return;
-        }
-
-        // no longer have to deal with those pesky nulls.
-        int type = rs.getMetaData().getColumnType(idx);
-        switch (type) {
-        case java.sql.Types.BIT:
-            rs.updateBoolean(idx, getBooleanValue(s));
-            break;
-        case java.sql.Types.BOOLEAN:
-            rs.updateBoolean(idx, getBooleanValue(s));
-            break;
-        case java.sql.Types.SMALLINT:
-        case java.sql.Types.TINYINT:
-            rs.updateShort(idx, getShortValue(s));
-            break;
-        case java.sql.Types.INTEGER:
-            rs.updateInt(idx, getIntegerValue(s));
-            break;
-        case java.sql.Types.BIGINT:
-            rs.updateLong(idx, getLongValue(s));
-            break;
-        case java.sql.Types.REAL:
-        case java.sql.Types.FLOAT:
-            rs.updateFloat(idx, getFloatValue(s));
-            break;
-        case java.sql.Types.DOUBLE:
-            rs.updateDouble(idx, getDoubleValue(s));
-            break;
-        case java.sql.Types.NUMERIC:
-        case java.sql.Types.DECIMAL:
-            rs.updateObject(idx, getBigDecimalValue(s));
-            break;
-        case java.sql.Types.BINARY:
-        case java.sql.Types.VARBINARY:
-        case java.sql.Types.LONGVARBINARY:
-            rs.updateBytes(idx, getBinaryValue(s));
-            break;
-        case java.sql.Types.DATE:
-            rs.updateDate(idx,  getDateValue(s));
-            break;
-        case java.sql.Types.TIME:
-            rs.updateTime(idx, getTimeValue(s));
-            break;
-        case java.sql.Types.TIMESTAMP:
-            rs.updateTimestamp(idx, getTimestampValue(s));
-            break;
-        case java.sql.Types.CHAR:
-        case java.sql.Types.VARCHAR:
-        case java.sql.Types.LONGVARCHAR:
-            rs.updateString(idx, getStringValue(s));
-            break;
-        default:
-
-        }
-
-    }
-
-    /**
-     * Throws the given <code>SAXParseException</code> object. This
-     * exception was originally thrown by the SAX parser and is passed
-     * to the method <code>error</code> when the SAX parser invokes it.
-     *
-     * @param e the <code>SAXParseException</code> object to throw
-     */
-    public void error (SAXParseException e) throws SAXParseException {
-            throw e;
-    }
-
-    // dump warnings too
-    /**
-     * Prints a warning message to <code>System.out</code> giving the line
-     * number and uri for what caused the warning plus a message explaining
-     * the reason for the warning. This method is invoked by the SAX parser.
-     *
-     * @param err a warning generated by the SAX parser
-     */
-    public void warning (SAXParseException err) throws SAXParseException {
-        System.out.println (MessageFormat.format(resBundle.handleGetObject("xmlrch.warning").toString(), new Object[] { err.getMessage(), err.getLineNumber(), err.getSystemId() }));
-    }
-
-    /**
-     *
-     */
-    public void notationDecl(String name, String publicId, String systemId) {
-
-    }
-
-    /**
-     *
-     */
-    public void unparsedEntityDecl(String name, String publicId, String systemId, String notationName) {
-
-    }
-
-   /**
-    * Returns the current row of this <code>Rowset</code>object.
-    * The ResultSet's cursor is positioned at the Row which is needed
-    *
-    * @return the <code>Row</code> object on which the <code>RowSet</code>
-    *           implementation objects's cursor is positioned
-    */
-    private Row getPresentRow(WebRowSetImpl rs) throws SQLException {
-         //rs.setOriginalRow();
-         // ResultSetMetaData rsmd = rs.getMetaData();
-         // int numCols = rsmd.getColumnCount();
-         // Object vals[] = new Object[numCols];
-         // for(int j = 1; j<= numCols ; j++){
-         //     vals[j-1] = rs.getObject(j);
-         // }
-         // return(new Row(numCols, vals));
-         return null;
-   }
-
-
-
-
-}
diff --git a/ojluni/src/main/java/com/sun/rowset/internal/XmlResolver.java b/ojluni/src/main/java/com/sun/rowset/internal/XmlResolver.java
deleted file mode 100755
index a51df22..0000000
--- a/ojluni/src/main/java/com/sun/rowset/internal/XmlResolver.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-package com.sun.rowset.internal;
-
-import org.xml.sax.*;
-
-import org.xml.sax.EntityResolver;
-import org.xml.sax.InputSource;
-
-/**
- * An implementation of the <code>EntityResolver</code> interface, which
- * reads and parses an XML formatted <code>WebRowSet</code> object.
- * This is an implementation of org.xml.sax
- *
- */
-public class XmlResolver implements EntityResolver {
-
-        public InputSource resolveEntity(String publicId, String systemId) {
-           String schemaName = systemId.substring(systemId.lastIndexOf("/"));
-
-           if(systemId.startsWith("http://java.sun.com/xml/ns/jdbc")) {
-               return new InputSource(this.getClass().getResourceAsStream(schemaName));
-
-           } else {
-              // use the default behaviour
-              return null;
-           }
-
-
-
-
-       }
-}
diff --git a/ojluni/src/main/java/com/sun/rowset/package.html b/ojluni/src/main/java/com/sun/rowset/package.html
deleted file mode 100755
index ca33eca..0000000
--- a/ojluni/src/main/java/com/sun/rowset/package.html
+++ /dev/null
@@ -1,86 +0,0 @@
-<!--
- Copyright (c) 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.
--->
-
-<!DOCTYPE doctype PUBLIC "-//w3c//dtd html 4.0 transitional//en">
-<html>
-<head>
-                                    
-  <meta http-equiv="Content-Type"
- content="text/html; charset=iso-8859-1">
-  <title>com.sun.rowset Package</title>
-</head>
-  <body bgcolor="#ffffff">
-Provides five standard implementations of the standard JDBC <tt>RowSet</tt> implementation 
-interface definitions. These reference implementations are included with the J2SE version 
-1.5 platform and represent the benchmark standard <tt>RowSet</tt> implementations as verified 
-by the Test Compatibility Kit (TCK) as mandated by the Java Community Process.
- <br>
-   
-<h3>1.0 Available JDBC RowSet Reference Implementations </h3>
-  The following implementations are provided:<br>
-           
-<blockquote><tt><b>JdbcRowSetImpl</b></tt> - The <tt>javax.sql.rowset.JdbcRowSet</tt>
-interface reference implementation. <br>
-<br>
-<tt><b>CachedRowSetImpl </b></tt>- The <tt>javax.sql.rowset.CachedRowSet</tt> interface
-reference implementation.<br>
-<br>
-<tt><b>WebRowSetImpl</b></tt> - The <tt>javax.sql.rowset.WebRowSet</tt> interface
-reference implementation.<br>
-<br>
-<tt><b>FilteredRowSetImpl</b></tt> - The <tt>javax.sql.rowset.FilteredRowSet</tt>
-interface reference implementation.<br>
-<br>
-<tt><b>JoinRowSetImpl</b></tt> - The <tt>javax.sql.rowset.JoinRowSet</tt> interface
-reference implementation.<br>
-</blockquote>
-
-All details on their expected behavior, including their interactions with the <tt>SyncProvider</tt>
-SPI and helper classes are provided in the interface definitions in the <tt>javax.sql.rowset</tt>
-package specification.<br>
-   
-<h3>2.0 Usage</h3>
-The reference implementations represent robust implementations of the standard
-<code>RowSet</code> interfaces defined in the <code>javax.sql.rowset</code> package. 
-All disconnected <code>RowSet</code> implementations, such as the <tt>CachedRowSetImpl</tt>
-and <tt>WebRowSetImpl</tt>, are flexible enough to use the <tt>SyncFactory</tt> SPIs to 
-leverage non-reference implementation <tt>SyncProvider</tt> implementations to obtain
-differing synchronization semantics. Furthermore, developers and vendors alike are free 
-to use these implementations and integrate them into their products just as they
-can with to other components of the Java platform.<br>
-   
-<h3>3.0 Extending the JDBC RowSet Implementations</h3>
-
-The JDBC <code>RowSet</code> reference implementations are provided as non-final
-classess so that any developer can extend them to provider additional features
-while maintaining the core required standard functionality and compatibility. It
-is anticipated that many vendors and developers will extend the standard feature
-set to their their particular needs. The website for JDBC Technology will
-provider a portal where implementations can be listed, similar to the way it
-provides a site for JDBC drivers.
-<br>
- <br>
-</body>
-</html>
diff --git a/ojluni/src/main/java/com/sun/rowset/providers/RIOptimisticProvider.java b/ojluni/src/main/java/com/sun/rowset/providers/RIOptimisticProvider.java
deleted file mode 100755
index 0d8dff3..0000000
--- a/ojluni/src/main/java/com/sun/rowset/providers/RIOptimisticProvider.java
+++ /dev/null
@@ -1,262 +0,0 @@
-/*
- * Copyright (c) 2003, 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
- * 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.rowset.providers;
-
-import com.sun.rowset.JdbcRowSetResourceBundle;
-import javax.sql.*;
-import java.io.*;
-
-import javax.sql.rowset.spi.*;
-import com.sun.rowset.internal.*;
-
-/**
- * The reference implementation of a JDBC Rowset synchronization provider
- * providing optimistic synchronization with a relational datastore
- * using any JDBC technology-enabled driver.
- * <p>
- * <h3>1.0 Backgroud</h3>
- * This synchronization provider is registered with the
- * <code>SyncFactory</code> by default as the
- * <code>com.sun.rowset.providers.RIOptimisticProvider</code>.
- * As an extension of the <code>SyncProvider</code> abstract
- * class, it provides the reader and writer classes required by disconnected
- * rowsets as <code>javax.sql.RowSetReader</code> and <code>javax.sql.RowSetWriter</code>
- * interface implementations. As a reference implementation,
- * <code>RIOptimisticProvider</code> provides a
- * fully functional implementation offering a medium grade classification of
- * syncrhonization, namely GRADE_CHECK_MODIFIED_AT_COMMIT. A
- * disconnected <code>RowSet</code> implementation using the
- * <code>RIOptimisticProvider</code> can expect the writer to
- * check only rows that have been modified in the <code>RowSet</code> against
- * the values in the data source.  If there is a conflict, that is, if a value
- * in the data source has been changed by another party, the
- * <code>RIOptimisticProvider</code> will not write any of the changes to the data
- * source and  will throw a <code>SyncProviderException</code> object.
- *
- * <h3>2.0 Usage</h3>
- * Standard disconnected <code>RowSet</code> implementations may opt to use this
- * <code>SyncProvider</code> implementation in one of two ways:
- * <OL>
- *  <LI>By specifically calling the <code>setSyncProvider</code> method
-    defined in the <code>CachedRowSet</code> interface
- * <pre>
- *     CachedRowset crs = new FooCachedRowSetImpl();
- *     crs.setSyncProvider("com.sun.rowset.providers.RIOptimisticProvider");
- * </pre>
- *  <LI>By specifying it in the constructor of the <code>RowSet</code>
- *      implementation
- * <pre>
- *     CachedRowset crs = new FooCachedRowSetImpl(
- *                         "com.sun.rowset.providers.RIOptimisticProvider");
- * </pre>
- * </OL>
- * Note that because the <code>RIOptimisticProvider</code> implementation is
- * the default provider, it will always be the provider when no provider ID is
- * specified to the constructor.
- * <P>
- * See the standard <code>RowSet</code> reference implementations in the
- * <code>com.sun.rowset</code> package for more details.
- *
- * @author  Jonathan Bruce
- * @see javax.sql.rowset.spi.SyncProvider
- * @see javax.sql.rowset.spi.SyncProviderException
- * @see javax.sql.rowset.spi.SyncFactory
- * @see javax.sql.rowset.spi.SyncFactoryException
- *
- */
-public final class RIOptimisticProvider extends SyncProvider implements Serializable {
-
-    private CachedRowSetReader reader;
-    private CachedRowSetWriter writer;
-
-    /**
-     * The unique provider identifier.
-     */
-    private String providerID = "com.sun.rowset.providers.RIOptimisticProvider";
-
-    /**
-     * The vendor name of this SyncProvider implementation
-     */
-    private String vendorName = "Oracle Corporation";
-
-    /**
-     * The version number of this SyncProvider implementation
-     */
-    private String versionNumber = "1.0";
-
-    /**
-     * ResourceBundle
-     */
-    private JdbcRowSetResourceBundle resBundle;
-
-    /**
-     * Creates an <code>RIOptimisticProvider</code> object initialized with the
-     * fully qualified class name of this <code>SyncProvider</code> implementation
-     * and a default reader and writer.
-     * <P>
-     * This provider is available to all disconnected <code>RowSet</code> implementations
-     *  as the default persistence provider.
-     */
-    public RIOptimisticProvider() {
-        providerID = this.getClass().getName();
-        reader = new CachedRowSetReader();
-        writer = new CachedRowSetWriter();
-        try {
-           resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle();
-        } catch(IOException ioe) {
-            throw new RuntimeException(ioe);
-        }
-    }
-
-    /**
-     * Returns the <code>'javax.sql.rowset.providers.RIOptimisticProvider'</code>
-     * provider identification string.
-     *
-     * @return String Provider ID of this persistence provider
-     */
-    public String getProviderID() {
-        return providerID;
-    }
-
-    /**
-     * Returns the <code>javax.sql.RowSetWriter</code> object for this
-     * <code>RIOptimisticProvider</code> object.  This is the writer that will
-     * write changes made to the <code>Rowset</code> object back to the data source.
-     *
-     * @return the <code>javax.sql.RowSetWriter</code> object for this
-     *     <code>RIOptimisticProvider</code> object
-     */
-    public RowSetWriter getRowSetWriter() {
-        try {
-            writer.setReader(reader);
-        } catch (java.sql.SQLException e) {}
-        return writer;
-    }
-
-    /**
-     * Returns the <code>javax.sql.RowSetReader</code> object for this
-     * <code>RIOptimisticProvider</code> object.  This is the reader that will
-     * populate a <code>RowSet</code> object using this <code>RIOptimisticProvider</code>.
-     *
-     * @return the <code>javax.sql.RowSetReader</code> object for this
-     *     <code>RIOptimisticProvider</code> object
-     */
-    public RowSetReader getRowSetReader() {
-        return reader;
-    }
-
-    /**
-     * Returns the <code>SyncProvider</code> grade of synchronization that
-     * <code>RowSet</code> objects can expect when using this
-     * implementation. As an optimisic synchonization provider, the writer
-     * will only check rows that have been modified in the <code>RowSet</code>
-     * object.
-     */
-    public int getProviderGrade() {
-        return SyncProvider.GRADE_CHECK_MODIFIED_AT_COMMIT;
-    }
-
-    /**
-     * Modifies the data source lock severity according to the standard
-     * <code>SyncProvider</code> classifications.
-     *
-     * @param datasource_lock An <code>int</code> indicating the level of locking to be
-     *        set; must be one of the following constants:
-     * <PRE>
-     *       SyncProvider.DATASOURCE_NO_LOCK,
-     *       SyncProvider.DATASOURCE_ROW_LOCK,
-     *       SyncProvider.DATASOURCE_TABLE_LOCK,
-     *       SyncProvider.DATASOURCE_DB_LOCk
-     * </PRE>
-     * @throws SyncProviderException if the parameter specified is not
-     *           <code>SyncProvider.DATASOURCE_NO_LOCK</code>
-     */
-    public void setDataSourceLock(int datasource_lock) throws SyncProviderException {
-        if(datasource_lock != SyncProvider.DATASOURCE_NO_LOCK ) {
-          throw new SyncProviderException(resBundle.handleGetObject("riop.locking").toString());
-        }
-    }
-
-    /**
-     * Returns the active data source lock severity in this
-     * reference implementation of the <code>SyncProvider</code>
-     * abstract class.
-     *
-     * @return <code>SyncProvider.DATASOURCE_NO_LOCK</code>.
-     *     The reference implementation does not support data source locks.
-     */
-    public int getDataSourceLock() throws SyncProviderException {
-        return SyncProvider.DATASOURCE_NO_LOCK;
-    }
-
-    /**
-     * Returns the supported updatable view abilities of the
-     * reference implementation of the <code>SyncProvider</code>
-     * abstract class.
-     *
-     * @return <code>SyncProvider.NONUPDATABLE_VIEW_SYNC</code>. The
-     *     the reference implementation does not support updating tables
-     *     that are the source of a view.
-     */
-    public int supportsUpdatableView() {
-        return SyncProvider.NONUPDATABLE_VIEW_SYNC;
-    }
-
-    /**
-     * Returns the release version ID of the Reference Implementation Optimistic
-     * Synchronization Provider.
-     *
-     * @return the <code>String</code> detailing the version number of this SyncProvider
-     */
-    public String getVersion() {
-        return this.versionNumber;
-    }
-
-    /**
-     * Returns the vendor name of the Reference Implementation Optimistic
-     * Synchronization Provider
-     *
-     * @return the <code>String</code> detailing the vendor name of this
-     *      SyncProvider
-     */
-    public String getVendor() {
-        return this.vendorName;
-    }
-
-    private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException {
-        // Default state initialization happens here
-        ois.defaultReadObject();
-        // Initialization of transient Res Bundle happens here .
-        try {
-           resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle();
-        } catch(IOException ioe) {
-            throw new RuntimeException(ioe);
-        }
-
-    }
-    static final long serialVersionUID =-3143367176751761936L;
-
-}
diff --git a/ojluni/src/main/java/com/sun/rowset/providers/RIXMLProvider.java b/ojluni/src/main/java/com/sun/rowset/providers/RIXMLProvider.java
deleted file mode 100755
index 3736001..0000000
--- a/ojluni/src/main/java/com/sun/rowset/providers/RIXMLProvider.java
+++ /dev/null
@@ -1,248 +0,0 @@
-/*
- * Copyright (c) 2003, 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
- * 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.rowset.providers;
-
-import com.sun.rowset.JdbcRowSetResourceBundle;
-import java.io.IOException;
-import java.sql.*;
-import javax.sql.*;
-
-import javax.sql.rowset.spi.*;
-
-/**
- * A reference implementation of a JDBC RowSet synchronization provider
- * with the ability to read and write rowsets in well formed XML using the
- * standard WebRowSet schema.
- *
- * <h3>1.0 Background</h3>
- * This synchronization provider is registered with the
- * <code>SyncFactory</code> by default as the
- * <code>com.sun.rowset.providers.RIXMLProvider</code>.
- * <P>
- * A <code>WebRowSet</code> object uses an <code>RIXMLProvider</code> implementation
- * to read an XML data source or to write itself in XML format using the
- * <code>WebRowSet</code> XML schema definition available at
- * <pre>
- *     <a href="http://java.sun.com/xml/ns/jdbc/webrowset.xsd">http://java.sun.com/xml/ns/jdbc/webrowset.xsd</a>
- * </pre>
- * The <code>RIXMLProvider</code> implementation has a synchronization level of
- * GRADE_NONE, which means that it does no checking at all for conflicts.  It
- * simply writes a <code>WebRowSet</code> object to a file.
- * <h3>2.0 Usage</h3>
- * A <code>WebRowSet</code> implementation is created with an <code>RIXMLProvider</code>
- * by default.
- * <pre>
- *     WebRowSet wrs = new FooWebRowSetImpl();
- * </pre>
- * The <code>SyncFactory</code> always provides an instance of
- * <code>RIOptimisticProvider</code> when no provider is specified,
- * but the implementation of the default constructor for <code>WebRowSet</code> sets the
- * provider to be the <code>RIXMLProvider</code> implementation.  Therefore,
- * the following line of code is executed behind the scenes as part of the
- * implementation of the default constructor.
- * <pre>
- *     wrs.setSyncProvider("com.sun.rowset.providers.RIXMLProvider");
- * </pre>
- * See the standard <code>RowSet</code> reference implementations in the
- * <code>com.sun.rowset</code> package for more details.
- *
- * @author  Jonathan Bruce
- * @see javax.sql.rowset.spi.SyncProvider
- * @see javax.sql.rowset.spi.SyncProviderException
- * @see javax.sql.rowset.spi.SyncFactory
- * @see javax.sql.rowset.spi.SyncFactoryException
- */
-public final class RIXMLProvider extends SyncProvider {
-
-    /**
-     * The unique provider identifier.
-     */
-    private String providerID = "com.sun.rowset.providers.RIXMLProvider";
-
-    /**
-     * The vendor name of this SyncProvider implementation.
-     */
-    private String vendorName = "Oracle Corporation";
-
-    /**
-     * The version number of this SyncProvider implementation.
-     */
-    private String versionNumber = "1.0";
-
-    private JdbcRowSetResourceBundle resBundle;
-
-    private XmlReader xmlReader;
-    private XmlWriter xmlWriter;
-
-    /**
-     * This provider is available to all JDBC <code>RowSet</code> implementations as the
-     * default persistence provider.
-     */
-    public RIXMLProvider() {
-        providerID = this.getClass().getName();
-        try {
-           resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle();
-        } catch(IOException ioe) {
-            throw new RuntimeException(ioe);
-        }
-    }
-
-    /**
-     * Returns <code>"javax.sql.rowset.providers.RIXMLProvider"</code>, which is
-     * the fully qualified class name of this provider implementation.
-     *
-     * @return a <code>String</code> object with the fully specified class name of
-     *           this <code>RIOptimisticProvider</code> implementation
-     */
-    public String getProviderID() {
-        return providerID;
-    }
-
-    // additional methods that sit on top of reader/writer methods back to
-    // original datasource. Allow XML state to be written out and in
-
-    /**
-     * Sets this <code>WebRowSet</code> object's reader to the given
-     * <code>XmlReader</code> object.
-     *
-     * @throws SQLException if a database access error occurs
-     */
-    public void setXmlReader(XmlReader reader) throws SQLException {
-        xmlReader = reader;
-    }
-
-    /**
-     * Sets this <code>WebRowSet</code> object's writer to the given
-     * <code>XmlWriter</code> object.
-     *
-     * @throws SQLException if a database access error occurs
-     */
-    public void setXmlWriter(XmlWriter writer) throws SQLException {
-        xmlWriter = writer;
-    }
-
-    /**
-     * Retrieves the reader that this <code>WebRowSet</code> object
-     * will call when its <code>readXml</code> method is called.
-     *
-     * @return the <code>XmlReader</code> object for this SyncProvider
-     * @throws SQLException if a database access error occurs
-     */
-    public XmlReader getXmlReader() throws SQLException {
-        return xmlReader;
-    }
-
-    /**
-     * Retrieves the writer that this <code>WebRowSet</code> object
-     * will call when its <code>writeXml</code> method is called.
-     *
-     * @return the <code>XmlWriter</code> for this SyncProvider
-     * @throws SQLException if a database access error occurs
-     */
-    public XmlWriter getXmlWriter() throws SQLException {
-        return xmlWriter;
-    }
-
-    /**
-     * Returns the <code>SyncProvider</code> grade of syncrhonization that
-     * <code>RowSet</code> object instances can expect when using this
-     * implementation. As this implementation provides no synchonization
-     * facilities to the XML data source, the lowest grade is returned.
-     *
-     * @return the <code>SyncProvider</code> syncronization grade of this
-     *     provider; must be one of the following constants:
-     *       <PRE>
-     *          SyncProvider.GRADE_NONE,
-     *          SyncProvider.GRADE_MODIFIED_AT_COMMIT,
-     *          SyncProvider.GRADE_CHECK_ALL_AT_COMMIT,
-     *          SyncProvider.GRADE_LOCK_WHEN_MODIFIED,
-     *          SyncProvider.GRADE_LOCK_WHEN_LOADED
-     *       </PRE>
-     *
-     */
-    public int getProviderGrade() {
-        return SyncProvider.GRADE_NONE;
-    }
-
-    /**
-     * Returns the default UPDATABLE_VIEW behavior of this reader
-     *
-     */
-    public int supportsUpdatableView() {
-        return SyncProvider.NONUPDATABLE_VIEW_SYNC;
-    }
-
-    /**
-     * Returns the default DATASOURCE_LOCK behavior of this reader
-     */
-    public int getDataSourceLock() throws SyncProviderException {
-        return SyncProvider.DATASOURCE_NO_LOCK;
-    }
-
-    /**
-     * Throws an unsupported operation exception as this method does
-     * function with non-locking XML data sources.
-     */
-    public void setDataSourceLock(int lock) throws SyncProviderException {
-        throw new UnsupportedOperationException(resBundle.handleGetObject("rixml.unsupp").toString());
-    }
-
-    /**
-     * Returns a null object as RowSetWriters are not returned by this SyncProvider
-     */
-    public RowSetWriter getRowSetWriter() {
-        return null;
-    }
-
-    /**
-     * Returns a null object as RowSetWriter objects are not returned by this
-     * SyncProvider
-     */
-    public RowSetReader getRowSetReader() {
-        return null;
-    }
-
-  /**
-     * Returns the release version ID of the Reference Implementation Optimistic
-     * Synchronization Provider.
-     *
-     * @return the <code>String</code> detailing the version number of this SyncProvider
-     */
-    public String getVersion() {
-        return this.versionNumber;
-    }
-
-    /**
-     * Returns the vendor name of the Reference Implemntation Optimistic
-     * Syncchronication Provider
-     *
-     * @return the <code>String</code> detailing the vendor name of this
-     *      SyncProvider
-     */
-    public String getVendor() {
-        return this.vendorName;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/rowset/providers/package.html b/ojluni/src/main/java/com/sun/rowset/providers/package.html
deleted file mode 100755
index f75681f..0000000
--- a/ojluni/src/main/java/com/sun/rowset/providers/package.html
+++ /dev/null
@@ -1,170 +0,0 @@
-<!DOCTYPE doctype PUBLIC "-//w3c//dtd html 4.0 transitional//en">
-<html>
-<head>
-                    
-  <meta http-equiv="Content-Type"
- content="text/html; charset=iso-8859-1">
-                    
-  <meta name="GENERATOR"
- content="Mozilla/4.79 [en] (Windows NT 5.0; U) [Netscape]">
-     <!--
-
-Copyright (c) 2003, 2006, 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.
--->
-  <title>javax.sql.rowset.providers Package</title>
-</head>
-  <body bgcolor="#ffffff">
-  Repository for the <tt>RowSet</tt> reference implementations of the 
- <tt>SyncProvider</tt> abstract class. These implementations provide a 
- disconnected <code>RowSet</code>
- object with the ability to synchronize the data in the underlying data 
- source with its data.  These implementations are provided as
-the default <tt>SyncProvider</tt> implementations and are accessible via the
-<tt>SyncProvider</tt> SPI managed by the <tt>SyncFactory</tt>.  
-
-<h3>1.0 <code>SyncProvider</code> Reference Implementations</h3>
-  The main job of a <tt>SyncProvider</tt> implementation is to manage
-the reader and writer mechanisms.
- The <tt>SyncProvider</tt> SPI, as specified in the <tt>javax.sql.rowset.spi</tt>
-package, provides a pluggable mechanism by which <tt>javax.sql.RowSetReader</tt>
-and <tt>javax.sql.RowSetWriter</tt> implementations can be supplied to a disconnected
-<tt>RowSet</tt> object.
-<P>
- A reader, a <code>javax.sql.RowSetReader</code>
-object, does the work necessary to populate a <code>RowSet</code> object with data.
-A writer, a <code>javax.sql.RowSetWriter</code> object, does the work necessary for
-synchronizing a <code>RowSet</code> object's data with the data in the originating
-source of data. Put another way, a writer writes a <code>RowSet</code>
-object's data back to the data source. 
-<P>
-Generally speaking, the course of events is this.  The reader makes a connection to
-the data source and reads the data from a <code>ResultSet</code> object into its
-<code>RowSet</code> object.  Then it closes the connection.  While 
-the <code>RowSet</code> object is disconnected, an application makes some modifications 
-to the data and calls the method <code>acceptChanges</code>. At this point, the
-writer is called to write the changes back to the database table or view
-from which the original data came. This is called <i>synchronization</i>.
-<P>
-If the data in the originating data source has not changed, there is no problem
-with just writing the <code>RowSet</code> object's new data to the data source.
-If it has changed, however, there is a conflict that needs to be resolved. One
-way to solve the problem is not to let the data in the data source be changed in
-the first place, which can be done by setting locks on a row, a table, or the 
-whole data source.  Setting locks is a way to avoid conflicts, but it can be
-very expensive. Another approach, which is at the other end of the spectrum,
- is simply to assume that no conflicts will occur and thus do nothing to avoid
-conflicts.  
-Different <code>SyncProvider</code> implementations may handle synchronization in
-any of these ways, varying from doing no checking for
-conflicts, to doing various levels of checking, to guaranteeing that there are no
-conflicts. 
-<P>
-The <code>SyncProvider</code> class offers methods to help a <code>RowSet</code>
-object discover and manage how a provider handles synchronization.
-The method <code>getProviderGrade</code> returns the
-grade of synchronization a provider offers. An application can 
-direct the provider to use a particular level of locking by calling
-the method <code>setDataSourceLock</code> and specifying the level of locking desired.
-If a <code>RowSet</code> object's data came from an SQL <code>VIEW</code>, an 
-application may call the method <code>supportsUpdatableView</code> to 
-find out whether the <code>VIEW</code> can be updated.
-<P>
-Synchronization is done completely behind the scenes, so it is third party vendors of
-synchronization provider implementations who have to take care of this complex task.
-Application programmers can decide which provider to use and the level of locking to
-be done, but they are free from having to worry about the implementation details.
-<P>
-The JDBC <code>RowSet</code> Implementations reference implementation provides two
-implementations of the <code>SyncProvider</code> class:
-   
-<UL>
-<LI>
-<b><tt>RIOptimisticProvider </tt></b>- provides the <tt>javax.sql.RowSetReader</tt>
- and <tt>javax.sql.RowSetWriter</tt> interface implementations and provides
-an optimistic concurrency model for synchronization. This model assumes that there
-will be few conflicts and therefore uses a relatively low grade of synchronization.
-If no other provider is available, this is the default provider that the 
-<code>SyncFactory</code> will supply to a <code>RowSet</code> object.
-    <br>
-<LI>
-    <b><tt>RIXMLProvider </tt></b>- provides the <tt>XmlReader</tt> (an extension
-of  the <tt>javax.sql.RowSetReader</tt> interface) and the <tt>XmlWriter</tt>
-(an extension of the <tt>javax.sql.RowSetWriter</tt> interface) to enable
-  <tt>WebRowSet</tt> objects to write their state to a
-well formed XML document according to the <tt>WebRowSet</tt> XML schema
-definition.<br>
-</UL>
-   
-<h3>2.0 Basics in RowSet Population &amp; Synchronization</h3>
-  A rowset's first task is to populate itself with rows of column values.
-Generally,   these rows will come from a relational database, so a rowset
-has properties   that supply what is necessary for making a connection to
-a database and executing  a query. A rowset that does not need to establish
-a connection and execute  a command, such as one that gets its data from
-a tabular file instead of a relational database, does not need to have these
-properties set. The vast  majority of RowSets, however, do need to set these
-properties. The general  rule is that a RowSet is required to set only the
-properties that it uses.<br>
-    <br>
-    The <tt>command</tt> property contains the query that determines what 
-data  a <code>RowSet</code> will contain. Rowsets have methods for setting a query's 
-parameter(s),  which means that a query can be executed multiple times with 
-different parameters  to produce different result sets. Or the query can be
-changed to something  completely new to get a new result set.           
-<p>Once a rowset contains the rows from a <tt>ResultSet</tt> object or some
-  other data source, its column values can be updated, and its rows can be
- inserted or deleted. Any method that causes a change in the rowset's values
- or cursor position also notifies any object that has been registered as
-a  listener with the rowset. So, for example, a table that displays the rowset's
- data in an applet can can be notified of changes and make updates as they
- occur.<br>
-    <br>
-  The changes made to a rowset can be propagated back to the original data
-  source to keep the rowset and its data source synchronized. Although this
-  involves many operations behind the scenes, it is completely transparent 
- to the application programmer and remains the concern of the RowSet provider 
-  developer. All an application has to do is invoke the method <tt>acceptChanges</tt>, 
-  and the data source backing the rowset will be updated to match the current 
-  values in the rowset. </p>
-       
-<p>A disconnected rowset, such as a <tt>CachedRowSet</tt> or <tt>WebRowSet</tt>
- object, establishes a connection to populate itself with data from a database 
- and then closes the connection. The <code>RowSet</code> object will remain 
- disconnected until it wants to propagate changes back to its database table, 
- which is optional. To write its changes back to the database (synchronize with
- the database), the rowset establishes a connection, write the changes, and then 
- once again disconnects itself.<br>
-  </p>
-      
-<h3> 3.0 Other Possible Implementations</h3>
- There are many other possible implementations of the <tt>SyncProvider</tt> abstract
- class. One possibility is to employ a more robust synchronization model, which
- would give a <code>RowSet</code> object increased trust in the provider's
- ability to get any updates back to the original data source. Another possibility 
- is a more formal synchronization mechanism such as SyncML
- (<a href="http://www.syncml.org/">http://www.syncml.org/</a>)   <br>
-    <br>
- <br>
-</body>
-</html>
diff --git a/ojluni/src/main/java/com/sun/script/javascript/ExternalScriptable.java b/ojluni/src/main/java/com/sun/script/javascript/ExternalScriptable.java
deleted file mode 100755
index 85656208..0000000
--- a/ojluni/src/main/java/com/sun/script/javascript/ExternalScriptable.java
+++ /dev/null
@@ -1,467 +0,0 @@
-/*
- * Copyright (c) 2005, 2006, 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.script.javascript;
-import sun.org.mozilla.javascript.internal.*;
-import javax.script.*;
-import java.util.*;
-
-/**
- * ExternalScriptable is an implementation of Scriptable
- * backed by a JSR 223 ScriptContext instance.
- *
- * @author Mike Grogan
- * @author A. Sundararajan
- * @since 1.6
- */
-
-final class ExternalScriptable implements Scriptable {
-    /* Underlying ScriptContext that we use to store
-     * named variables of this scope.
-     */
-    private ScriptContext context;
-
-    /* JavaScript allows variables to be named as numbers (indexed
-     * properties). This way arrays, objects (scopes) are treated uniformly.
-     * Note that JSR 223 API supports only String named variables and
-     * so we can't store these in Bindings. Also, JavaScript allows name
-     * of the property name to be even empty String! Again, JSR 223 API
-     * does not support empty name. So, we use the following fallback map
-     * to store such variables of this scope. This map is not exposed to
-     * JSR 223 API. We can just script objects "as is" and need not convert.
-     */
-    private Map<Object, Object> indexedProps;
-
-    // my prototype
-    private Scriptable prototype;
-    // my parent scope, if any
-    private Scriptable parent;
-
-    ExternalScriptable(ScriptContext context) {
-        this(context, new HashMap<Object, Object>());
-    }
-
-    ExternalScriptable(ScriptContext context, Map<Object, Object> indexedProps) {
-        if (context == null) {
-            throw new NullPointerException("context is null");
-        }
-        this.context = context;
-        this.indexedProps = indexedProps;
-    }
-
-    ScriptContext getContext() {
-        return context;
-    }
-
-    private boolean isEmpty(String name) {
-        return name.equals("");
-    }
-
-    /**
-     * Return the name of the class.
-     */
-    public String getClassName() {
-        return "Global";
-    }
-
-    /**
-     * Returns the value of the named property or NOT_FOUND.
-     *
-     * If the property was created using defineProperty, the
-     * appropriate getter method is called.
-     *
-     * @param name the name of the property
-     * @param start the object in which the lookup began
-     * @return the value of the property (may be null), or NOT_FOUND
-     */
-    public synchronized Object get(String name, Scriptable start) {
-        if (isEmpty(name)) {
-            if (indexedProps.containsKey(name)) {
-                return indexedProps.get(name);
-            } else {
-                return NOT_FOUND;
-            }
-        } else {
-            synchronized (context) {
-                int scope = context.getAttributesScope(name);
-                if (scope != -1) {
-                    Object value = context.getAttribute(name, scope);
-                    return Context.javaToJS(value, this);
-                } else {
-                    return NOT_FOUND;
-                }
-            }
-        }
-    }
-
-    /**
-     * Returns the value of the indexed property or NOT_FOUND.
-     *
-     * @param index the numeric index for the property
-     * @param start the object in which the lookup began
-     * @return the value of the property (may be null), or NOT_FOUND
-     */
-    public synchronized Object get(int index, Scriptable start) {
-        Integer key = new Integer(index);
-        if (indexedProps.containsKey(index)) {
-            return indexedProps.get(key);
-        } else {
-            return NOT_FOUND;
-        }
-    }
-
-    /**
-     * Returns true if the named property is defined.
-     *
-     * @param name the name of the property
-     * @param start the object in which the lookup began
-     * @return true if and only if the property was found in the object
-     */
-    public synchronized boolean has(String name, Scriptable start) {
-        if (isEmpty(name)) {
-            return indexedProps.containsKey(name);
-        } else {
-            synchronized (context) {
-                return context.getAttributesScope(name) != -1;
-            }
-        }
-    }
-
-    /**
-     * Returns true if the property index is defined.
-     *
-     * @param index the numeric index for the property
-     * @param start the object in which the lookup began
-     * @return true if and only if the property was found in the object
-     */
-    public synchronized boolean has(int index, Scriptable start) {
-        Integer key = new Integer(index);
-        return indexedProps.containsKey(key);
-    }
-
-    /**
-     * Sets the value of the named property, creating it if need be.
-     *
-     * @param name the name of the property
-     * @param start the object whose property is being set
-     * @param value value to set the property to
-     */
-    public void put(String name, Scriptable start, Object value) {
-        if (start == this) {
-            synchronized (this) {
-                if (isEmpty(name)) {
-                    indexedProps.put(name, value);
-                } else {
-                    synchronized (context) {
-                        int scope = context.getAttributesScope(name);
-                        if (scope == -1) {
-                            scope = ScriptContext.ENGINE_SCOPE;
-                        }
-                        context.setAttribute(name, jsToJava(value), scope);
-                    }
-                }
-            }
-        } else {
-            start.put(name, start, value);
-        }
-    }
-
-    /**
-     * Sets the value of the indexed property, creating it if need be.
-     *
-     * @param index the numeric index for the property
-     * @param start the object whose property is being set
-     * @param value value to set the property to
-     */
-    public void put(int index, Scriptable start, Object value) {
-        if (start == this) {
-            synchronized (this) {
-                indexedProps.put(new Integer(index), value);
-            }
-        } else {
-            start.put(index, start, value);
-        }
-    }
-
-    /**
-     * Removes a named property from the object.
-     *
-     * If the property is not found, no action is taken.
-     *
-     * @param name the name of the property
-     */
-    public synchronized void delete(String name) {
-        if (isEmpty(name)) {
-            indexedProps.remove(name);
-        } else {
-            synchronized (context) {
-                int scope = context.getAttributesScope(name);
-                if (scope != -1) {
-                    context.removeAttribute(name, scope);
-                }
-            }
-        }
-    }
-
-    /**
-     * Removes the indexed property from the object.
-     *
-     * If the property is not found, no action is taken.
-     *
-     * @param index the numeric index for the property
-     */
-    public void delete(int index) {
-        indexedProps.remove(new Integer(index));
-    }
-
-    /**
-     * Get the prototype of the object.
-     * @return the prototype
-     */
-    public Scriptable getPrototype() {
-        return prototype;
-    }
-
-    /**
-     * Set the prototype of the object.
-     * @param prototype the prototype to set
-     */
-    public void setPrototype(Scriptable prototype) {
-        this.prototype = prototype;
-    }
-
-    /**
-     * Get the parent scope of the object.
-     * @return the parent scope
-     */
-    public Scriptable getParentScope() {
-        return parent;
-    }
-
-    /**
-     * Set the parent scope of the object.
-     * @param parent the parent scope to set
-     */
-    public void setParentScope(Scriptable parent) {
-        this.parent = parent;
-    }
-
-     /**
-     * Get an array of property ids.
-     *
-     * Not all property ids need be returned. Those properties
-     * whose ids are not returned are considered non-enumerable.
-     *
-     * @return an array of Objects. Each entry in the array is either
-     *         a java.lang.String or a java.lang.Number
-     */
-    public synchronized Object[] getIds() {
-        String[] keys = getAllKeys();
-        int size = keys.length + indexedProps.size();
-        Object[] res = new Object[size];
-        System.arraycopy(keys, 0, res, 0, keys.length);
-        int i = keys.length;
-        // now add all indexed properties
-        for (Object index : indexedProps.keySet()) {
-            res[i++] = index;
-        }
-        return res;
-    }
-
-    /**
-     * Get the default value of the object with a given hint.
-     * The hints are String.class for type String, Number.class for type
-     * Number, Scriptable.class for type Object, and Boolean.class for
-     * type Boolean. <p>
-     *
-     * A <code>hint</code> of null means "no hint".
-     *
-     * See ECMA 8.6.2.6.
-     *
-     * @param hint the type hint
-     * @return the default value
-     */
-    public Object getDefaultValue(Class typeHint) {
-        for (int i=0; i < 2; i++) {
-            boolean tryToString;
-            if (typeHint == ScriptRuntime.StringClass) {
-                tryToString = (i == 0);
-            } else {
-                tryToString = (i == 1);
-            }
-
-            String methodName;
-            Object[] args;
-            if (tryToString) {
-                methodName = "toString";
-                args = ScriptRuntime.emptyArgs;
-            } else {
-                methodName = "valueOf";
-                args = new Object[1];
-                String hint;
-                if (typeHint == null) {
-                    hint = "undefined";
-                } else if (typeHint == ScriptRuntime.StringClass) {
-                    hint = "string";
-                } else if (typeHint == ScriptRuntime.ScriptableClass) {
-                    hint = "object";
-                } else if (typeHint == ScriptRuntime.FunctionClass) {
-                    hint = "function";
-                } else if (typeHint == ScriptRuntime.BooleanClass
-                           || typeHint == Boolean.TYPE)
-                {
-                    hint = "boolean";
-                } else if (typeHint == ScriptRuntime.NumberClass ||
-                         typeHint == ScriptRuntime.ByteClass ||
-                         typeHint == Byte.TYPE ||
-                         typeHint == ScriptRuntime.ShortClass ||
-                         typeHint == Short.TYPE ||
-                         typeHint == ScriptRuntime.IntegerClass ||
-                         typeHint == Integer.TYPE ||
-                         typeHint == ScriptRuntime.FloatClass ||
-                         typeHint == Float.TYPE ||
-                         typeHint == ScriptRuntime.DoubleClass ||
-                         typeHint == Double.TYPE)
-                {
-                    hint = "number";
-                } else {
-                    throw Context.reportRuntimeError(
-                        "Invalid JavaScript value of type " +
-                        typeHint.toString());
-                }
-                args[0] = hint;
-            }
-            Object v = ScriptableObject.getProperty(this, methodName);
-            if (!(v instanceof Function))
-                continue;
-            Function fun = (Function) v;
-            Context cx = RhinoScriptEngine.enterContext();
-            try {
-                v = fun.call(cx, fun.getParentScope(), this, args);
-            } finally {
-                cx.exit();
-            }
-            if (v != null) {
-                if (!(v instanceof Scriptable)) {
-                    return v;
-                }
-                if (typeHint == ScriptRuntime.ScriptableClass
-                    || typeHint == ScriptRuntime.FunctionClass)
-                {
-                    return v;
-                }
-                if (tryToString && v instanceof Wrapper) {
-                    // Let a wrapped java.lang.String pass for a primitive
-                    // string.
-                    Object u = ((Wrapper)v).unwrap();
-                    if (u instanceof String)
-                        return u;
-                }
-            }
-        }
-        // fall through to error
-        String arg = (typeHint == null) ? "undefined" : typeHint.getName();
-        throw Context.reportRuntimeError(
-                  "Cannot find default value for object " + arg);
-    }
-
-    /**
-     * Implements the instanceof operator.
-     *
-     * @param instance The value that appeared on the LHS of the instanceof
-     *              operator
-     * @return true if "this" appears in value's prototype chain
-     *
-     */
-    public boolean hasInstance(Scriptable instance) {
-        // Default for JS objects (other than Function) is to do prototype
-        // chasing.
-        Scriptable proto = instance.getPrototype();
-        while (proto != null) {
-            if (proto.equals(this)) return true;
-            proto = proto.getPrototype();
-        }
-        return false;
-    }
-
-    private String[] getAllKeys() {
-        ArrayList<String> list = new ArrayList<String>();
-        synchronized (context) {
-            for (int scope : context.getScopes()) {
-                Bindings bindings = context.getBindings(scope);
-                if (bindings != null) {
-                    list.ensureCapacity(bindings.size());
-                    for (String key : bindings.keySet()) {
-                        list.add(key);
-                    }
-                }
-            }
-        }
-        String[] res = new String[list.size()];
-        list.toArray(res);
-        return res;
-    }
-
-   /**
-    * We convert script values to the nearest Java value.
-    * We unwrap wrapped Java objects so that access from
-    * Bindings.get() would return "workable" value for Java.
-    * But, at the same time, we need to make few special cases
-    * and hence the following function is used.
-    */
-    private Object jsToJava(Object jsObj) {
-        if (jsObj instanceof Wrapper) {
-            Wrapper njb = (Wrapper) jsObj;
-            /* importClass feature of ImporterTopLevel puts
-             * NativeJavaClass in global scope. If we unwrap
-             * it, importClass won't work.
-             */
-            if (njb instanceof NativeJavaClass) {
-                return njb;
-            }
-
-            /* script may use Java primitive wrapper type objects
-             * (such as java.lang.Integer, java.lang.Boolean etc)
-             * explicitly. If we unwrap, then these script objects
-             * will become script primitive types. For example,
-             *
-             *    var x = new java.lang.Double(3.0); print(typeof x);
-             *
-             * will print 'number'. We don't want that to happen.
-             */
-            Object obj = njb.unwrap();
-            if (obj instanceof Number || obj instanceof String ||
-                obj instanceof Boolean || obj instanceof Character) {
-                // special type wrapped -- we just leave it as is.
-                return njb;
-            } else {
-                // return unwrapped object for any other object.
-                return obj;
-            }
-        } else { // not-a-Java-wrapper
-            return jsObj;
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/script/javascript/JSAdapter.java b/ojluni/src/main/java/com/sun/script/javascript/JSAdapter.java
deleted file mode 100755
index 53497e9..0000000
--- a/ojluni/src/main/java/com/sun/script/javascript/JSAdapter.java
+++ /dev/null
@@ -1,338 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-package com.sun.script.javascript;
-
-import sun.org.mozilla.javascript.internal.*;
-import java.util.*;
-
-/**
- * JSAdapter is java.lang.reflect.Proxy equivalent for JavaScript. JSAdapter
- * calls specially named JavaScript methods on an adaptee object when property
- * access is attempted on it.
- *
- * Example:
- *
- *    var y = {
- *                __get__    : function (name) { ... }
- *                __has__    : function (name) { ... }
- *                __put__    : function (name, value) {...}
- *                __delete__ : function (name) { ... }
- *                __getIds__ : function () { ... }
- *            };
- *
- *    var x = new JSAdapter(y);
- *
- *    x.i;                        // calls y.__get__
- *    i in x;                     // calls y.__has__
- *    x.p = 10;                   // calls y.__put__
- *    delete x.p;                 // calls y.__delete__
- *    for (i in x) { print(i); }  // calls y.__getIds__
- *
- * If a special JavaScript method is not found in the adaptee, then JSAdapter
- * forwards the property access to the adaptee itself.
- *
- * JavaScript caller of adapter object is isolated from the fact that
- * the property access/mutation/deletion are really calls to
- * JavaScript methods on adaptee.  Use cases include 'smart'
- * properties, property access tracing/debugging, encaptulation with
- * easy client access - in short JavaScript becomes more "Self" like.
- *
- * Note that Rhino already supports special properties like __proto__
- * (to set, get prototype), __parent__ (to set, get parent scope). We
- * follow the same double underscore nameing convention here. Similarly
- * the name JSAdapter is derived from JavaAdapter -- which is a facility
- * to extend, implement Java classes/interfaces by JavaScript.
- *
- * @author A. Sundararajan
- * @since 1.6
- */
-public final class JSAdapter implements Scriptable, Function {
-    private JSAdapter(Scriptable obj) {
-        setAdaptee(obj);
-    }
-
-    // initializer to setup JSAdapter prototype in the given scope
-    public static void init(Context cx, Scriptable scope, boolean sealed)
-    throws RhinoException {
-        JSAdapter obj = new JSAdapter(cx.newObject(scope));
-        obj.setParentScope(scope);
-        obj.setPrototype(getFunctionPrototype(scope));
-        obj.isPrototype = true;
-        ScriptableObject.defineProperty(scope, "JSAdapter",  obj,
-                ScriptableObject.DONTENUM);
-    }
-
-    public String getClassName() {
-        return "JSAdapter";
-    }
-
-    public Object get(String name, Scriptable start) {
-        Function func = getAdapteeFunction(GET_PROP);
-        if (func != null) {
-            return call(func, new Object[] { name });
-        } else {
-            start = getAdaptee();
-            return start.get(name, start);
-        }
-    }
-
-    public Object get(int index, Scriptable start) {
-        Function func = getAdapteeFunction(GET_PROP);
-        if (func != null) {
-            return call(func, new Object[] { new Integer(index) });
-        } else {
-            start = getAdaptee();
-            return start.get(index, start);
-        }
-    }
-
-    public boolean has(String name, Scriptable start) {
-        Function func = getAdapteeFunction(HAS_PROP);
-        if (func != null) {
-            Object res = call(func, new Object[] { name });
-            return Context.toBoolean(res);
-        } else {
-            start = getAdaptee();
-            return start.has(name, start);
-        }
-    }
-
-    public boolean has(int index, Scriptable start) {
-        Function func = getAdapteeFunction(HAS_PROP);
-        if (func != null) {
-            Object res = call(func, new Object[] { new Integer(index) });
-            return Context.toBoolean(res);
-        } else {
-            start = getAdaptee();
-            return start.has(index, start);
-        }
-    }
-
-    public void put(String name, Scriptable start, Object value) {
-        if (start == this) {
-            Function func = getAdapteeFunction(PUT_PROP);
-            if (func != null) {
-                call(func, new Object[] { name, value });
-            } else {
-                start = getAdaptee();
-                start.put(name, start, value);
-            }
-        } else {
-            start.put(name, start, value);
-        }
-    }
-
-    public void put(int index, Scriptable start, Object value) {
-        if (start == this) {
-            Function func = getAdapteeFunction(PUT_PROP);
-            if( func != null) {
-                call(func, new Object[] { new Integer(index), value });
-            } else {
-                start = getAdaptee();
-                start.put(index, start, value);
-            }
-        } else {
-            start.put(index, start, value);
-        }
-    }
-
-    public void delete(String name) {
-        Function func = getAdapteeFunction(DEL_PROP);
-        if (func != null) {
-            call(func, new Object[] { name });
-        } else {
-            getAdaptee().delete(name);
-        }
-    }
-
-    public void delete(int index) {
-        Function func = getAdapteeFunction(DEL_PROP);
-        if (func != null) {
-            call(func, new Object[] { new Integer(index) });
-        } else {
-            getAdaptee().delete(index);
-        }
-    }
-
-    public Scriptable getPrototype() {
-        return prototype;
-    }
-
-    public void setPrototype(Scriptable prototype) {
-        this.prototype = prototype;
-    }
-
-    public Scriptable getParentScope() {
-        return parent;
-    }
-
-    public void setParentScope(Scriptable parent) {
-        this.parent = parent;
-    }
-
-    public Object[] getIds() {
-        Function func = getAdapteeFunction(GET_PROPIDS);
-        if (func != null) {
-            Object val = call(func, new Object[0]);
-            // in most cases, adaptee would return native JS array
-            if (val instanceof NativeArray) {
-                NativeArray array = (NativeArray) val;
-                Object[] res = new Object[(int)array.getLength()];
-                for (int index = 0; index < res.length; index++) {
-                    res[index] = mapToId(array.get(index, array));
-                }
-                return res;
-            } else if (val instanceof NativeJavaArray) {
-                // may be attempt wrapped Java array
-                Object tmp = ((NativeJavaArray)val).unwrap();
-                Object[] res;
-                if (tmp.getClass() == Object[].class) {
-                    Object[]  array = (Object[]) tmp;
-                    res = new Object[array.length];
-                    for (int index = 0; index < array.length; index++) {
-                        res[index] = mapToId(array[index]);
-                    }
-                } else {
-                    // just return an empty array
-                    res = Context.emptyArgs;
-                }
-                return res;
-            } else {
-                // some other return type, just return empty array
-                return Context.emptyArgs;
-            }
-        } else {
-            return getAdaptee().getIds();
-        }
-    }
-
-    public boolean hasInstance(Scriptable scriptable) {
-        if (scriptable instanceof JSAdapter) {
-            return true;
-        } else {
-            Scriptable proto = scriptable.getPrototype();
-            while (proto != null) {
-                if (proto.equals(this)) return true;
-                proto = proto.getPrototype();
-            }
-            return false;
-        }
-    }
-
-    public Object getDefaultValue(Class hint) {
-        return getAdaptee().getDefaultValue(hint);
-    }
-
-    public Object call(Context cx, Scriptable scope, Scriptable thisObj,
-            Object[] args)
-            throws RhinoException {
-        if (isPrototype) {
-            return construct(cx, scope, args);
-        } else {
-            Scriptable tmp = getAdaptee();
-            if (tmp instanceof Function) {
-                return ((Function)tmp).call(cx, scope, tmp, args);
-            } else {
-                throw Context.reportRuntimeError("TypeError: not a function");
-            }
-        }
-    }
-
-    public Scriptable construct(Context cx, Scriptable scope, Object[] args)
-    throws RhinoException {
-        if (isPrototype) {
-            Scriptable topLevel = ScriptableObject.getTopLevelScope(scope);
-            JSAdapter newObj;
-            if (args.length > 0) {
-                newObj = new JSAdapter(Context.toObject(args[0], topLevel));
-            } else {
-                throw Context.reportRuntimeError("JSAdapter requires adaptee");
-            }
-            return newObj;
-        } else {
-            Scriptable tmp = getAdaptee();
-            if (tmp instanceof Function) {
-                return ((Function)tmp).construct(cx, scope, args);
-            } else {
-                throw Context.reportRuntimeError("TypeError: not a constructor");
-            }
-        }
-    }
-
-    public Scriptable getAdaptee() {
-        return adaptee;
-    }
-
-    public void setAdaptee(Scriptable adaptee) {
-        if (adaptee == null) {
-            throw new NullPointerException("adaptee can not be null");
-        }
-        this.adaptee = adaptee;
-    }
-
-    //-- internals only below this point
-
-    // map a property id. Property id can only be an Integer or String
-    private Object mapToId(Object tmp) {
-        if (tmp instanceof Double) {
-            return new Integer(((Double)tmp).intValue());
-        } else {
-            return Context.toString(tmp);
-        }
-    }
-
-    private static Scriptable getFunctionPrototype(Scriptable scope) {
-        return ScriptableObject.getFunctionPrototype(scope);
-    }
-
-    private Function getAdapteeFunction(String name) {
-        Object o = ScriptableObject.getProperty(getAdaptee(), name);
-        return (o instanceof Function)? (Function)o : null;
-    }
-
-    private Object call(Function func, Object[] args) {
-        Context cx = Context.getCurrentContext();
-        Scriptable thisObj = getAdaptee();
-        Scriptable scope = func.getParentScope();
-        try {
-            return func.call(cx, scope, thisObj, args);
-        } catch (RhinoException re) {
-            throw Context.reportRuntimeError(re.getMessage());
-        }
-    }
-
-    private Scriptable prototype;
-    private Scriptable parent;
-    private Scriptable adaptee;
-    private boolean isPrototype;
-
-    // names of adaptee JavaScript functions
-    private static final String GET_PROP = "__get__";
-    private static final String HAS_PROP = "__has__";
-    private static final String PUT_PROP = "__put__";
-    private static final String DEL_PROP = "__delete__";
-    private static final String GET_PROPIDS = "__getIds__";
-}
diff --git a/ojluni/src/main/java/com/sun/script/javascript/JavaAdapter.java b/ojluni/src/main/java/com/sun/script/javascript/JavaAdapter.java
deleted file mode 100755
index 4e67006..0000000
--- a/ojluni/src/main/java/com/sun/script/javascript/JavaAdapter.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Copyright (c) 2005, 2006, 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.script.javascript;
-
-import javax.script.Invocable;
-import sun.org.mozilla.javascript.internal.*;
-
-/**
- * This class implements Rhino-like JavaAdapter to help implement a Java
- * interface in JavaScript. We support this using Invocable.getInterface.
- * Using this JavaAdapter, script author could write:
- *
- *    var r = new java.lang.Runnable() {
- *                run: function() { script... }
- *            };
- *
- *    r.run();
- *    new java.lang.Thread(r).start();
- *
- * Note that Rhino's JavaAdapter support allows extending a Java class and/or
- * implementing one or more interfaces. This JavaAdapter implementation does
- * not support these.
- *
- * @author A. Sundararajan
- * @since 1.6
- */
-final class JavaAdapter extends ScriptableObject implements Function {
-    private JavaAdapter(Invocable engine) {
-        this.engine = engine;
-    }
-
-    static void init(Context cx, Scriptable scope, boolean sealed)
-    throws RhinoException {
-        RhinoTopLevel topLevel = (RhinoTopLevel) scope;
-        Invocable engine = topLevel.getScriptEngine();
-        JavaAdapter obj = new JavaAdapter(engine);
-        obj.setParentScope(scope);
-        obj.setPrototype(getFunctionPrototype(scope));
-        /*
-         * Note that we can't use defineProperty. A property of this
-         * name is already defined in Context.initStandardObjects. We
-         * simply overwrite the property value!
-         */
-        ScriptableObject.putProperty(topLevel, "JavaAdapter", obj);
-    }
-
-    public String getClassName() {
-        return "JavaAdapter";
-    }
-
-    public Object call(Context cx, Scriptable scope, Scriptable thisObj,
-            Object[] args) throws RhinoException {
-        return construct(cx, scope, args);
-    }
-
-    public Scriptable construct(Context cx, Scriptable scope, Object[] args)
-    throws RhinoException {
-        if (args.length == 2) {
-            Class<?> clazz = null;
-            Object obj1 = args[0];
-            if (obj1 instanceof Wrapper) {
-                Object o = ((Wrapper)obj1).unwrap();
-                if (o instanceof Class && ((Class)o).isInterface()) {
-                    clazz = (Class) o;
-                }
-            } else if (obj1 instanceof Class) {
-                if (((Class)obj1).isInterface()) {
-                    clazz = (Class) obj1;
-                }
-            }
-            if (clazz == null) {
-                throw Context.reportRuntimeError("JavaAdapter: first arg should be interface Class");
-            }
-
-            Scriptable topLevel = ScriptableObject.getTopLevelScope(scope);
-            return cx.toObject(engine.getInterface(args[1],  clazz), topLevel);
-        } else {
-            throw Context.reportRuntimeError("JavaAdapter requires two arguments");
-        }
-    }
-
-    private Invocable engine;
-}
diff --git a/ojluni/src/main/java/com/sun/script/javascript/META-INF/services/javax.script.ScriptEngineFactory b/ojluni/src/main/java/com/sun/script/javascript/META-INF/services/javax.script.ScriptEngineFactory
deleted file mode 100755
index de576fb..0000000
--- a/ojluni/src/main/java/com/sun/script/javascript/META-INF/services/javax.script.ScriptEngineFactory
+++ /dev/null
@@ -1,5 +0,0 @@
-
-#script engines supported
-
-com.sun.script.javascript.RhinoScriptEngineFactory #javascript
-
diff --git a/ojluni/src/main/java/com/sun/script/javascript/RhinoClassShutter.java b/ojluni/src/main/java/com/sun/script/javascript/RhinoClassShutter.java
deleted file mode 100755
index ea376e8..0000000
--- a/ojluni/src/main/java/com/sun/script/javascript/RhinoClassShutter.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-package com.sun.script.javascript;
-
-import java.util.*;
-import sun.org.mozilla.javascript.internal.*;
-
-/**
- * This class prevents script access to certain sensitive classes.
- * Note that this class checks over and above SecurityManager. i.e., although
- * a SecurityManager would pass, class shutter may still prevent access.
- *
- * @author A. Sundararajan
- * @since 1.6
- */
-final class RhinoClassShutter implements ClassShutter {
-    private static Map<String, Boolean> protectedClasses;
-    private static RhinoClassShutter theInstance;
-
-    private RhinoClassShutter() {
-    }
-
-    static synchronized ClassShutter getInstance() {
-        if (theInstance == null) {
-            theInstance = new RhinoClassShutter();
-            protectedClasses = new HashMap<String, Boolean>();
-
-            // For now, we just have AccessController. Allowing scripts
-            // to this class will allow it to execute doPrivileged in
-            // bootstrap context. We can add more classes for other reasons.
-            protectedClasses.put("java.security.AccessController", Boolean.TRUE);
-        }
-        return theInstance;
-    }
-
-    public boolean visibleToScripts(String fullClassName) {
-        // first do the security check.
-        SecurityManager sm = System.getSecurityManager();
-        if (sm != null) {
-            int i = fullClassName.lastIndexOf(".");
-            if (i != -1) {
-                try {
-                    sm.checkPackageAccess(fullClassName.substring(0, i));
-                } catch (SecurityException se) {
-                    return false;
-                }
-            }
-        }
-        // now, check is it a protected class.
-        return protectedClasses.get(fullClassName) == null;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/script/javascript/RhinoCompiledScript.java b/ojluni/src/main/java/com/sun/script/javascript/RhinoCompiledScript.java
deleted file mode 100755
index 4c6a824..0000000
--- a/ojluni/src/main/java/com/sun/script/javascript/RhinoCompiledScript.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Copyright (c) 2005, 2006, 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.script.javascript;
-import javax.script.*;
-import sun.org.mozilla.javascript.internal.*;
-
-/**
- * Represents compiled JavaScript code.
- *
- * @author Mike Grogan
- * @since 1.6
- */
-final class RhinoCompiledScript extends CompiledScript {
-
-    private RhinoScriptEngine engine;
-    private Script script;
-
-
-    RhinoCompiledScript(RhinoScriptEngine engine, Script script) {
-        this.engine = engine;
-        this.script = script;
-    }
-
-    public Object eval(ScriptContext context) throws ScriptException {
-
-        Object result = null;
-        Context cx = RhinoScriptEngine.enterContext();
-        try {
-
-            Scriptable scope = engine.getRuntimeScope(context);
-            Object ret = script.exec(cx, scope);
-            result = engine.unwrapReturnValue(ret);
-        } catch (RhinoException re) {
-            int line = (line = re.lineNumber()) == 0 ? -1 : line;
-            String msg;
-            if (re instanceof JavaScriptException) {
-                msg = String.valueOf(((JavaScriptException)re).getValue());
-            } else {
-                msg = re.toString();
-            }
-            ScriptException se = new ScriptException(msg, re.sourceName(), line);
-            se.initCause(re);
-            throw se;
-        } finally {
-            Context.exit();
-        }
-
-        return result;
-    }
-
-    public ScriptEngine getEngine() {
-        return engine;
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/script/javascript/RhinoScriptEngine.java b/ojluni/src/main/java/com/sun/script/javascript/RhinoScriptEngine.java
deleted file mode 100755
index 3a3a8b4..0000000
--- a/ojluni/src/main/java/com/sun/script/javascript/RhinoScriptEngine.java
+++ /dev/null
@@ -1,451 +0,0 @@
-/*
- * Copyright (c) 2005, 2011, 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.script.javascript;
-import com.sun.script.util.*;
-import javax.script.*;
-import sun.org.mozilla.javascript.internal.*;
-import java.lang.reflect.Method;
-import java.io.*;
-import java.security.*;
-import java.util.*;
-
-
-/**
- * Implementation of <code>ScriptEngine</code> using the Mozilla Rhino
- * interpreter.
- *
- * @author Mike Grogan
- * @author A. Sundararajan
- * @since 1.6
- */
-public final class RhinoScriptEngine extends AbstractScriptEngine
-        implements  Invocable, Compilable {
-
-    private static final boolean DEBUG = false;
-
-    private AccessControlContext accCtxt;
-
-    /* Scope where standard JavaScript objects and our
-     * extensions to it are stored. Note that these are not
-     * user defined engine level global variables. These are
-     * variables have to be there on all compliant ECMAScript
-     * scopes. We put these standard objects in this top level.
-     */
-    private RhinoTopLevel topLevel;
-
-    /* map used to store indexed properties in engine scope
-     * refer to comment on 'indexedProps' in ExternalScriptable.java.
-     */
-    private Map<Object, Object> indexedProps;
-
-    private ScriptEngineFactory factory;
-    private InterfaceImplementor implementor;
-
-    private static final int languageVersion = getLanguageVersion();
-    private static final int optimizationLevel = getOptimizationLevel();
-
-    static {
-        ContextFactory.initGlobal(new ContextFactory() {
-            /**
-             * Create new Context instance to be associated with the current thread.
-             */
-            @Override
-            protected Context makeContext() {
-                Context cx = super.makeContext();
-                cx.setLanguageVersion(languageVersion);
-                cx.setOptimizationLevel(optimizationLevel);
-                cx.setClassShutter(RhinoClassShutter.getInstance());
-                cx.setWrapFactory(RhinoWrapFactory.getInstance());
-                return cx;
-            }
-
-            /**
-             * Execute top call to script or function. When the runtime is about to
-             * execute a script or function that will create the first stack frame
-             * with scriptable code, it calls this method to perform the real call.
-             * In this way execution of any script happens inside this function.
-             */
-            @Override
-            protected Object doTopCall(final Callable callable,
-                               final Context cx, final Scriptable scope,
-                               final Scriptable thisObj, final Object[] args) {
-                AccessControlContext accCtxt = null;
-                Scriptable global = ScriptableObject.getTopLevelScope(scope);
-                Scriptable globalProto = global.getPrototype();
-                if (globalProto instanceof RhinoTopLevel) {
-                    accCtxt = ((RhinoTopLevel)globalProto).getAccessContext();
-                }
-
-                if (accCtxt != null) {
-                    return AccessController.doPrivileged(new PrivilegedAction<Object>() {
-                        public Object run() {
-                            return superDoTopCall(callable, cx, scope, thisObj, args);
-                        }
-                    }, accCtxt);
-                } else {
-                    return superDoTopCall(callable, cx, scope, thisObj, args);
-                }
-            }
-
-            private  Object superDoTopCall(Callable callable,
-                               Context cx, Scriptable scope,
-                               Scriptable thisObj, Object[] args) {
-                return super.doTopCall(callable, cx, scope, thisObj, args);
-            }
-        });
-    }
-
-    private static final String RHINO_JS_VERSION = "rhino.js.version";
-    private static int getLanguageVersion() {
-        int version;
-        String tmp = java.security.AccessController.doPrivileged(
-            new sun.security.action.GetPropertyAction(RHINO_JS_VERSION));
-        if (tmp != null) {
-            version = Integer.parseInt((String)tmp);
-        } else {
-            version = Context.VERSION_1_8;
-        }
-        return version;
-    }
-
-    private static final String RHINO_OPT_LEVEL = "rhino.opt.level";
-    private static int getOptimizationLevel() {
-        int optLevel = -1;
-        // disable optimizer under security manager, for now.
-        if (System.getSecurityManager() == null) {
-            optLevel = Integer.getInteger(RHINO_OPT_LEVEL, -1);
-        }
-        return optLevel;
-    }
-
-    /**
-     * Creates a new instance of RhinoScriptEngine
-     */
-    public RhinoScriptEngine() {
-        if (System.getSecurityManager() != null) {
-            try {
-                AccessController.checkPermission(new AllPermission());
-            } catch (AccessControlException ace) {
-                accCtxt = AccessController.getContext();
-            }
-        }
-
-        Context cx = enterContext();
-        try {
-            topLevel = new RhinoTopLevel(cx, this);
-        } finally {
-            cx.exit();
-        }
-
-        indexedProps = new HashMap<Object, Object>();
-
-        //construct object used to implement getInterface
-        implementor = new InterfaceImplementor(this) {
-                protected boolean isImplemented(Object thiz, Class<?> iface) {
-                    Context cx = enterContext();
-                    try {
-                        if (thiz != null && !(thiz instanceof Scriptable)) {
-                            thiz = cx.toObject(thiz, topLevel);
-                        }
-                        Scriptable engineScope = getRuntimeScope(context);
-                        Scriptable localScope = (thiz != null)? (Scriptable) thiz :
-                                                    engineScope;
-                        for (Method method : iface.getMethods()) {
-                            // ignore methods of java.lang.Object class
-                            if (method.getDeclaringClass() == Object.class) {
-                                continue;
-                            }
-                            Object obj = ScriptableObject.getProperty(localScope, method.getName());
-                            if (! (obj instanceof Function)) {
-                                return false;
-                            }
-                        }
-                        return true;
-                    } finally {
-                        cx.exit();
-                    }
-                }
-
-                protected Object convertResult(Method method, Object res)
-                                            throws ScriptException {
-                    Class desiredType = method.getReturnType();
-                    if (desiredType == Void.TYPE) {
-                        return null;
-                    } else {
-                        return Context.jsToJava(res, desiredType);
-                    }
-                }
-            };
-    }
-
-    public Object eval(Reader reader, ScriptContext ctxt)
-    throws ScriptException {
-        Object ret;
-
-        Context cx = enterContext();
-        try {
-            Scriptable scope = getRuntimeScope(ctxt);
-            String filename = (String) get(ScriptEngine.FILENAME);
-            filename = filename == null ? "<Unknown source>" : filename;
-
-            ret = cx.evaluateReader(scope, reader, filename , 1,  null);
-        } catch (RhinoException re) {
-            if (DEBUG) re.printStackTrace();
-            int line = (line = re.lineNumber()) == 0 ? -1 : line;
-            String msg;
-            if (re instanceof JavaScriptException) {
-                msg = String.valueOf(((JavaScriptException)re).getValue());
-            } else {
-                msg = re.toString();
-            }
-            ScriptException se = new ScriptException(msg, re.sourceName(), line);
-            se.initCause(re);
-            throw se;
-        } catch (IOException ee) {
-            throw new ScriptException(ee);
-        } finally {
-            cx.exit();
-        }
-
-        return unwrapReturnValue(ret);
-    }
-
-    public Object eval(String script, ScriptContext ctxt) throws ScriptException {
-        if (script == null) {
-            throw new NullPointerException("null script");
-        }
-        return eval(new StringReader(script) , ctxt);
-    }
-
-    public ScriptEngineFactory getFactory() {
-        if (factory != null) {
-            return factory;
-        } else {
-            return new RhinoScriptEngineFactory();
-        }
-    }
-
-    public Bindings createBindings() {
-        return new SimpleBindings();
-    }
-
-    //Invocable methods
-    public Object invokeFunction(String name, Object... args)
-    throws ScriptException, NoSuchMethodException {
-        return invoke(null, name, args);
-    }
-
-    public Object invokeMethod(Object thiz, String name, Object... args)
-    throws ScriptException, NoSuchMethodException {
-        if (thiz == null) {
-            throw new IllegalArgumentException("script object can not be null");
-        }
-        return invoke(thiz, name, args);
-    }
-
-    private Object invoke(Object thiz, String name, Object... args)
-    throws ScriptException, NoSuchMethodException {
-        Context cx = enterContext();
-        try {
-            if (name == null) {
-                throw new NullPointerException("method name is null");
-            }
-
-            if (thiz != null && !(thiz instanceof Scriptable)) {
-                thiz = cx.toObject(thiz, topLevel);
-            }
-
-            Scriptable engineScope = getRuntimeScope(context);
-            Scriptable localScope = (thiz != null)? (Scriptable) thiz :
-                                                    engineScope;
-            Object obj = ScriptableObject.getProperty(localScope, name);
-            if (! (obj instanceof Function)) {
-                throw new NoSuchMethodException("no such method: " + name);
-            }
-
-            Function func = (Function) obj;
-            Scriptable scope = func.getParentScope();
-            if (scope == null) {
-                scope = engineScope;
-            }
-            Object result = func.call(cx, scope, localScope,
-                                      wrapArguments(args));
-            return unwrapReturnValue(result);
-        } catch (RhinoException re) {
-            if (DEBUG) re.printStackTrace();
-            int line = (line = re.lineNumber()) == 0 ? -1 : line;
-            ScriptException se = new ScriptException(re.toString(), re.sourceName(), line);
-            se.initCause(re);
-            throw se;
-        } finally {
-            cx.exit();
-        }
-    }
-
-    public <T> T getInterface(Class<T> clasz) {
-        try {
-            return implementor.getInterface(null, clasz);
-        } catch (ScriptException e) {
-            return null;
-        }
-    }
-
-    public <T> T getInterface(Object thiz, Class<T> clasz) {
-        if (thiz == null) {
-            throw new IllegalArgumentException("script object can not be null");
-        }
-
-        try {
-            return implementor.getInterface(thiz, clasz);
-        } catch (ScriptException e) {
-            return null;
-        }
-    }
-
-    private static final String printSource =
-            "function print(str, newline) {                \n" +
-            "    if (typeof(str) == 'undefined') {         \n" +
-            "        str = 'undefined';                    \n" +
-            "    } else if (str == null) {                 \n" +
-            "        str = 'null';                         \n" +
-            "    }                                         \n" +
-            "    var out = context.getWriter();            \n" +
-            "    if (!(out instanceof java.io.PrintWriter))\n" +
-            "        out = new java.io.PrintWriter(out);   \n" +
-            "    out.print(String(str));                   \n" +
-            "    if (newline) out.print('\\n');            \n" +
-            "    out.flush();                              \n" +
-            "}\n" +
-            "function println(str) {                       \n" +
-            "    print(str, true);                         \n" +
-            "}";
-
-    Scriptable getRuntimeScope(ScriptContext ctxt) {
-        if (ctxt == null) {
-            throw new NullPointerException("null script context");
-        }
-
-        // we create a scope for the given ScriptContext
-        Scriptable newScope = new ExternalScriptable(ctxt, indexedProps);
-
-        // Set the prototype of newScope to be 'topLevel' so that
-        // JavaScript standard objects are visible from the scope.
-        newScope.setPrototype(topLevel);
-
-        // define "context" variable in the new scope
-        newScope.put("context", newScope, ctxt);
-
-        // define "print", "println" functions in the new scope
-        Context cx = enterContext();
-        try {
-            cx.evaluateString(newScope, printSource, "print", 1, null);
-        } finally {
-            cx.exit();
-        }
-        return newScope;
-    }
-
-
-    //Compilable methods
-    public CompiledScript compile(String script) throws ScriptException {
-        return compile(new StringReader(script));
-    }
-
-    public CompiledScript compile(java.io.Reader script) throws ScriptException {
-        CompiledScript ret = null;
-        Context cx = enterContext();
-
-        try {
-            String fileName = (String) get(ScriptEngine.FILENAME);
-            if (fileName == null) {
-                fileName = "<Unknown Source>";
-            }
-
-            Scriptable scope = getRuntimeScope(context);
-            Script scr = cx.compileReader(scope, script, fileName, 1, null);
-            ret = new RhinoCompiledScript(this, scr);
-        } catch (Exception e) {
-            if (DEBUG) e.printStackTrace();
-            throw new ScriptException(e);
-        } finally {
-            cx.exit();
-        }
-        return ret;
-    }
-
-
-    //package-private helpers
-
-    static Context enterContext() {
-        // call this always so that initializer of this class runs
-        // and initializes custom wrap factory and class shutter.
-        return Context.enter();
-    }
-
-    void setEngineFactory(ScriptEngineFactory fac) {
-        factory = fac;
-    }
-
-    AccessControlContext getAccessContext() {
-        return accCtxt;
-    }
-
-    Object[] wrapArguments(Object[] args) {
-        if (args == null) {
-            return Context.emptyArgs;
-        }
-        Object[] res = new Object[args.length];
-        for (int i = 0; i < res.length; i++) {
-            res[i] = Context.javaToJS(args[i], topLevel);
-        }
-        return res;
-    }
-
-    Object unwrapReturnValue(Object result) {
-        if (result instanceof Wrapper) {
-            result = ( (Wrapper) result).unwrap();
-        }
-
-        return result instanceof Undefined ? null : result;
-    }
-
-    /*
-    public static void main(String[] args) throws Exception {
-        if (args.length == 0) {
-            System.out.println("No file specified");
-            return;
-        }
-
-        InputStreamReader r = new InputStreamReader(new FileInputStream(args[0]));
-        ScriptEngine engine = new RhinoScriptEngine();
-
-        engine.put("x", "y");
-        engine.put(ScriptEngine.FILENAME, args[0]);
-        engine.eval(r);
-        System.out.println(engine.get("x"));
-    }
-    */
-}
diff --git a/ojluni/src/main/java/com/sun/script/javascript/RhinoScriptEngineFactory.java b/ojluni/src/main/java/com/sun/script/javascript/RhinoScriptEngineFactory.java
deleted file mode 100755
index c81ac79..0000000
--- a/ojluni/src/main/java/com/sun/script/javascript/RhinoScriptEngineFactory.java
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
- * Copyright (c) 2005, 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
- * 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.script.javascript;
-import javax.script.*;
-import java.util.*;
-import sun.org.mozilla.javascript.internal.*;
-import com.sun.script.util.*;
-
-/**
- * Factory to create RhinoScriptEngine
- *
- * @author Mike Grogan
- * @since 1.6
- */
-public class RhinoScriptEngineFactory extends ScriptEngineFactoryBase {
-
-    public RhinoScriptEngineFactory() {
-    }
-
-    public List<String> getExtensions() {
-        return extensions;
-    }
-
-    public List<String> getMimeTypes() {
-        return mimeTypes;
-    }
-
-    public List<String> getNames() {
-        return names;
-    }
-
-    public Object getParameter(String key) {
-        if (key.equals(ScriptEngine.NAME)) {
-            return "javascript";
-        } else if (key.equals(ScriptEngine.ENGINE)) {
-            return "Mozilla Rhino";
-        } else if (key.equals(ScriptEngine.ENGINE_VERSION)) {
-            return "1.7 release 3 PRERELEASE";
-        } else if (key.equals(ScriptEngine.LANGUAGE)) {
-            return "ECMAScript";
-        } else if (key.equals(ScriptEngine.LANGUAGE_VERSION)) {
-            return "1.8";
-        } else if (key.equals("THREADING")) {
-            return "MULTITHREADED";
-        } else {
-            throw new IllegalArgumentException("Invalid key");
-        }
-    }
-
-    public ScriptEngine getScriptEngine() {
-        RhinoScriptEngine ret = new RhinoScriptEngine();
-        ret.setEngineFactory(this);
-        return ret;
-    }
-
-    public String getMethodCallSyntax(String obj, String method, String... args) {
-
-        String ret = obj + "." + method + "(";
-        int len = args.length;
-        if (len == 0) {
-            ret += ")";
-            return ret;
-        }
-
-        for (int i = 0; i < len; i++) {
-            ret += args[i];
-            if (i != len - 1) {
-                ret += ",";
-            } else {
-                ret += ")";
-            }
-        }
-        return ret;
-    }
-
-    public String getOutputStatement(String toDisplay) {
-        StringBuffer buf = new StringBuffer();
-        int len = toDisplay.length();
-        buf.append("print(\"");
-        for (int i = 0; i < len; i++) {
-            char ch = toDisplay.charAt(i);
-            switch (ch) {
-            case '"':
-                buf.append("\\\"");
-                break;
-            case '\\':
-                buf.append("\\\\");
-                break;
-            default:
-                buf.append(ch);
-                break;
-            }
-        }
-        buf.append("\")");
-        return buf.toString();
-    }
-
-    public String getProgram(String... statements) {
-        int len = statements.length;
-        String ret = "";
-        for (int i = 0; i < len; i++) {
-            ret += statements[i] + ";";
-        }
-
-        return ret;
-    }
-
-    /*
-    public static void main(String[] args) {
-        RhinoScriptEngineFactory fact = new RhinoScriptEngineFactory();
-        System.out.println(fact.getParameter(ScriptEngine.ENGINE_VERSION));
-    }
-    */
-
-    private static List<String> names;
-    private static List<String> mimeTypes;
-    private static List<String> extensions;
-
-    static {
-        names = new ArrayList<String>(6);
-        names.add("js");
-        names.add("rhino");
-        names.add("JavaScript");
-        names.add("javascript");
-        names.add("ECMAScript");
-        names.add("ecmascript");
-        names = Collections.unmodifiableList(names);
-
-        mimeTypes = new ArrayList<String>(4);
-        mimeTypes.add("application/javascript");
-        mimeTypes.add("application/ecmascript");
-        mimeTypes.add("text/javascript");
-        mimeTypes.add("text/ecmascript");
-        mimeTypes = Collections.unmodifiableList(mimeTypes);
-
-        extensions = new ArrayList<String>(1);
-        extensions.add("js");
-        extensions = Collections.unmodifiableList(extensions);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/script/javascript/RhinoTopLevel.java b/ojluni/src/main/java/com/sun/script/javascript/RhinoTopLevel.java
deleted file mode 100755
index 7eb462ec4..0000000
--- a/ojluni/src/main/java/com/sun/script/javascript/RhinoTopLevel.java
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
- * Copyright (c) 2005, 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
- * 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.script.javascript;
-
-import sun.org.mozilla.javascript.internal.*;
-import javax.script.*;
-import java.security.AccessControlContext;
-
-/**
- * This class serves as top level scope for Rhino. This class adds
- * 3 top level functions (bindings, scope, sync) and two constructors
- * (JSAdapter, JavaAdapter).
- *
- * @author A. Sundararajan
- * @since 1.6
- */
-public final class RhinoTopLevel extends ImporterTopLevel {
-    RhinoTopLevel(Context cx, RhinoScriptEngine engine) {
-        // second boolean parameter to super constructor tells whether
-        // to seal standard JavaScript objects or not. If security manager
-        // is present, we seal the standard objects.
-        super(cx, System.getSecurityManager() != null);
-        this.engine = engine;
-
-        // initialize JSAdapter lazily. Reduces footprint & startup time.
-        new LazilyLoadedCtor(this, "JSAdapter",
-                "com.sun.script.javascript.JSAdapter",
-                false);
-
-        /*
-         * initialize JavaAdapter. We can't lazy initialize this because
-         * lazy initializer attempts to define a new property. But, JavaAdapter
-         * is an exisiting property that we overwrite.
-         */
-        JavaAdapter.init(cx, this, false);
-
-        // add top level functions
-        String names[] = { "bindings", "scope", "sync"  };
-        defineFunctionProperties(names, RhinoTopLevel.class,
-                ScriptableObject.DONTENUM);
-    }
-
-    /**
-     * The bindings function takes a JavaScript scope object
-     * of type ExternalScriptable and returns the underlying Bindings
-     * instance.
-     *
-     *    var page = scope(pageBindings);
-     *    with (page) {
-     *       // code that uses page scope
-     *    }
-     *    var b = bindings(page);
-     *    // operate on bindings here.
-     */
-    public static Object bindings(Context cx, Scriptable thisObj, Object[] args,
-            Function funObj) {
-        if (args.length == 1) {
-            Object arg = args[0];
-            if (arg instanceof Wrapper) {
-                arg = ((Wrapper)arg).unwrap();
-            }
-            if (arg instanceof ExternalScriptable) {
-                ScriptContext ctx = ((ExternalScriptable)arg).getContext();
-                Bindings bind = ctx.getBindings(ScriptContext.ENGINE_SCOPE);
-                return Context.javaToJS(bind,
-                           ScriptableObject.getTopLevelScope(thisObj));
-            }
-        }
-        return cx.getUndefinedValue();
-    }
-
-    /**
-     * The scope function creates a new JavaScript scope object
-     * with given Bindings object as backing store. This can be used
-     * to create a script scope based on arbitrary Bindings instance.
-     * For example, in webapp scenario, a 'page' level Bindings instance
-     * may be wrapped as a scope and code can be run in JavaScripe 'with'
-     * statement:
-     *
-     *    var page = scope(pageBindings);
-     *    with (page) {
-     *       // code that uses page scope
-     *    }
-     */
-    public static Object scope(Context cx, Scriptable thisObj, Object[] args,
-            Function funObj) {
-        if (args.length == 1) {
-            Object arg = args[0];
-            if (arg instanceof Wrapper) {
-                arg = ((Wrapper)arg).unwrap();
-            }
-            if (arg instanceof Bindings) {
-                ScriptContext ctx = new SimpleScriptContext();
-                ctx.setBindings((Bindings)arg, ScriptContext.ENGINE_SCOPE);
-                Scriptable res = new ExternalScriptable(ctx);
-                res.setPrototype(ScriptableObject.getObjectPrototype(thisObj));
-                res.setParentScope(ScriptableObject.getTopLevelScope(thisObj));
-                return res;
-            }
-        }
-        return cx.getUndefinedValue();
-    }
-
-    /**
-     * The sync function creates a synchronized function (in the sense
-     * of a Java synchronized method) from an existing function. The
-     * new function synchronizes on the <code>this</code> object of
-     * its invocation.
-     * js> var o = { f : sync(function(x) {
-     *       print("entry");
-     *       Packages.java.lang.Thread.sleep(x*1000);
-     *       print("exit");
-     *     })};
-     * js> thread(function() {o.f(5);});
-     * entry
-     * js> thread(function() {o.f(5);});
-     * js>
-     * exit
-     * entry
-     * exit
-     */
-    public static Object sync(Context cx, Scriptable thisObj, Object[] args,
-            Function funObj) {
-        if (args.length == 1 && args[0] instanceof Function) {
-            return new Synchronizer((Function)args[0]);
-        } else {
-            throw Context.reportRuntimeError("wrong argument(s) for sync");
-        }
-    }
-
-    RhinoScriptEngine getScriptEngine() {
-        return engine;
-    }
-
-    AccessControlContext getAccessContext() {
-        return engine.getAccessContext();
-    }
-
-    private RhinoScriptEngine engine;
-}
diff --git a/ojluni/src/main/java/com/sun/script/javascript/RhinoWrapFactory.java b/ojluni/src/main/java/com/sun/script/javascript/RhinoWrapFactory.java
deleted file mode 100755
index 906ffba..0000000
--- a/ojluni/src/main/java/com/sun/script/javascript/RhinoWrapFactory.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * Copyright (c) 2005, 2006, 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.script.javascript;
-
-import java.lang.reflect.*;
-import static sun.security.util.SecurityConstants.*;
-import sun.org.mozilla.javascript.internal.*;
-
-/**
- * This wrap factory is used for security reasons. JSR 223 script
- * engine interface and JavaScript engine classes are run as bootstrap
- * classes. For example, java.lang.Class.forName method (when called without
- * class loader) uses caller's class loader. This may be exploited by script
- * authors to access classes otherwise not accessible. For example,
- * classes in sun.* namespace are normally not accessible to untrusted
- * code and hence should not be accessible to JavaScript run from
- * untrusted code.
- *
- * @author A. Sundararajan
- * @since 1.6
- */
-final class RhinoWrapFactory extends WrapFactory {
-    private RhinoWrapFactory() {}
-    private static RhinoWrapFactory theInstance;
-
-    static synchronized WrapFactory getInstance() {
-        if (theInstance == null) {
-            theInstance = new RhinoWrapFactory();
-        }
-        return theInstance;
-    }
-
-    // We use instance of this class to wrap security sensitive
-    // Java object. Please refer below.
-    private static class RhinoJavaObject extends NativeJavaObject {
-        RhinoJavaObject(Scriptable scope, Object obj, Class type) {
-            // we pass 'null' to object. NativeJavaObject uses
-            // passed 'type' to reflect fields and methods when
-            // object is null.
-            super(scope, null, type);
-
-            // Now, we set actual object. 'javaObject' is protected
-            // field of NativeJavaObject.
-            javaObject = obj;
-        }
-    }
-
-    public Scriptable wrapAsJavaObject(Context cx, Scriptable scope,
-            Object javaObject, Class staticType) {
-        SecurityManager sm = System.getSecurityManager();
-        ClassShutter classShutter = RhinoClassShutter.getInstance();
-        if (javaObject instanceof ClassLoader) {
-            // Check with Security Manager whether we can expose a
-            // ClassLoader...
-            if (sm != null) {
-                sm.checkPermission(GET_CLASSLOADER_PERMISSION);
-            }
-            // if we fall through here, check permission succeeded.
-            return super.wrapAsJavaObject(cx, scope, javaObject, staticType);
-        } else {
-            String name = null;
-            if (javaObject instanceof Class) {
-                name = ((Class)javaObject).getName();
-            } else if (javaObject instanceof Member) {
-                Member member = (Member) javaObject;
-                // Check member access. Don't allow reflective access to
-                // non-public members. Note that we can't call checkMemberAccess
-                // because that expects exact stack depth!
-                if (sm != null && !Modifier.isPublic(member.getModifiers())) {
-                    return null;
-                }
-                name = member.getDeclaringClass().getName();
-            }
-            // Now, make sure that no ClassShutter prevented Class or Member
-            // of it is accessed reflectively. Note that ClassShutter may
-            // prevent access to a class, even though SecurityManager permit.
-            if (name != null) {
-                if (!classShutter.visibleToScripts(name)) {
-                    return null;
-                } else {
-                    return super.wrapAsJavaObject(cx, scope, javaObject, staticType);
-                }
-            }
-        }
-
-        // we have got some non-reflective object.
-        Class dynamicType = javaObject.getClass();
-        String name = dynamicType.getName();
-        if (!classShutter.visibleToScripts(name)) {
-            // Object of some sensitive class (such as sun.net.www.*
-            // objects returned from public method of java.net.URL class.
-            // We expose this object as though it is an object of some
-            // super class that is safe for access.
-
-            Class type = null;
-
-            // Whenever a Java Object is wrapped, we are passed with a
-            // staticType which is the type found from environment. For
-            // example, method return type known from signature. The dynamic
-            // type would be the actual Class of the actual returned object.
-            // If the staticType is an interface, we just use that type.
-            if (staticType != null && staticType.isInterface()) {
-                type = staticType;
-            } else {
-                // dynamicType is always a class type and never an interface.
-                // find an accessible super class of the dynamic type.
-                while (dynamicType != null) {
-                    dynamicType = dynamicType.getSuperclass();
-                    name = dynamicType.getName();
-                    if (classShutter.visibleToScripts(name)) {
-                         type = dynamicType; break;
-                    }
-                }
-                // atleast java.lang.Object has to be accessible. So, when
-                // we reach here, type variable should not be null.
-                assert type != null:
-                       "even java.lang.Object is not accessible?";
-            }
-            // create custom wrapper with the 'safe' type.
-            return new RhinoJavaObject(scope, javaObject, type);
-        } else {
-            return super.wrapAsJavaObject(cx, scope, javaObject, staticType);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/script/util/BindingsBase.java b/ojluni/src/main/java/com/sun/script/util/BindingsBase.java
deleted file mode 100755
index de0704c..0000000
--- a/ojluni/src/main/java/com/sun/script/util/BindingsBase.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-package com.sun.script.util;
-
-import javax.script.Bindings;
-import java.util.Map;
-import java.util.AbstractMap;
-
-/**
- * Abstract super class for Bindings implementations
- *
- * @author Mike Grogan
- * @since 1.6
- */
-public abstract class BindingsBase extends AbstractMap<String, Object>
-        implements Bindings {
-
-    //AbstractMap methods
-    public Object get(Object name) {
-        checkKey(name);
-        return getImpl((String)name);
-    }
-
-    public Object remove(Object key) {
-        checkKey(key);
-        return removeImpl((String)key);
-    }
-
-    public Object put(String key, Object value) {
-        checkKey(key);
-        return putImpl(key, value);
-    }
-
-    public void putAll(Map<? extends String, ? extends Object> toMerge) {
-        for (Map.Entry<? extends String, ? extends Object> entry : toMerge.entrySet()) {
-            String key = entry.getKey();
-            checkKey(key);
-            putImpl(entry.getKey(), entry.getValue());
-        }
-    }
-
-    //BindingsBase methods
-    public abstract Object putImpl(String name, Object value);
-    public abstract Object getImpl(String name);
-    public abstract Object removeImpl(String name);
-    public abstract String[] getNames();
-
-    protected void checkKey(Object key) {
-        if (key == null) {
-            throw new NullPointerException("key can not be null");
-        }
-        if (!(key instanceof String)) {
-            throw new ClassCastException("key should be String");
-        }
-        if (key.equals("")) {
-            throw new IllegalArgumentException("key can not be empty");
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/script/util/BindingsEntrySet.java b/ojluni/src/main/java/com/sun/script/util/BindingsEntrySet.java
deleted file mode 100755
index 3755844..0000000
--- a/ojluni/src/main/java/com/sun/script/util/BindingsEntrySet.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-package com.sun.script.util;
-import java.util.*;
-
-/**
- * Entry set implementation for Bindings implementations
- *
- * @author Mike Grogan
- * @since 1.6
- */
-public class BindingsEntrySet extends AbstractSet<Map.Entry<String, Object>> {
-
-    private BindingsBase base;
-    private String[] keys;
-
-    public BindingsEntrySet(BindingsBase base) {
-        this.base = base;
-        keys = base.getNames();
-    }
-
-    public int size() {
-        return keys.length;
-    }
-
-    public Iterator<Map.Entry<String, Object>> iterator() {
-        return new BindingsIterator();
-    }
-
-    public class BindingsEntry implements Map.Entry<String, Object> {
-        private String key;
-        public BindingsEntry(String key) {
-            this.key = key;
-        }
-
-        public Object setValue(Object value) {
-            throw new UnsupportedOperationException();
-        }
-
-        public String getKey() {
-            return key;
-        }
-
-        public Object getValue() {
-            return base.get(key);
-        }
-
-    }
-
-    public class BindingsIterator implements Iterator<Map.Entry<String, Object>> {
-
-        private int current = 0;
-        private boolean stale = false;
-
-        public boolean hasNext() {
-            return (current < keys.length);
-        }
-
-        public BindingsEntry next() {
-            stale = false;
-            return new BindingsEntry(keys[current++]);
-        }
-
-        public void remove() {
-            if (stale || current == 0) {
-                throw new IllegalStateException();
-            }
-
-            stale = true;
-            base.remove(keys[current - 1]);
-        }
-
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/script/util/BindingsImpl.java b/ojluni/src/main/java/com/sun/script/util/BindingsImpl.java
deleted file mode 100755
index 44eed88..0000000
--- a/ojluni/src/main/java/com/sun/script/util/BindingsImpl.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-package com.sun.script.util;
-import java.util.*;
-import javax.script.Bindings;
-
-/*
- * Abstract super class for Bindings implementations. Handles
- * global and local scopes.
- *
- * @author Mike Grogan
- * @since 1.6
- */
-public abstract class BindingsImpl extends BindingsBase {
-
-    //get method delegates to global if key is not defined in
-    //base class or local scope
-    protected Bindings global = null;
-
-    //get delegates to local scope
-    protected Bindings local = null;
-
-    public void setGlobal(Bindings n) {
-        global = n;
-    }
-
-    public void setLocal(Bindings n) {
-        local = n;
-    }
-
-    public  Set<Map.Entry<String, Object>> entrySet() {
-        return new BindingsEntrySet(this);
-    }
-
-    public Object get(Object key) {
-        checkKey(key);
-
-        Object ret  = null;
-        if ((local != null) && (null != (ret = local.get(key)))) {
-            return ret;
-        }
-
-        ret = getImpl((String)key);
-
-        if (ret != null) {
-            return ret;
-        } else if (global != null) {
-            return global.get(key);
-        } else {
-            return null;
-        }
-    }
-
-    public Object remove(Object key) {
-        checkKey(key);
-        Object ret = get(key);
-        if (ret != null) {
-            removeImpl((String)key);
-        }
-        return ret;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/script/util/InterfaceImplementor.java b/ojluni/src/main/java/com/sun/script/util/InterfaceImplementor.java
deleted file mode 100755
index 7e94c96..0000000
--- a/ojluni/src/main/java/com/sun/script/util/InterfaceImplementor.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * Copyright (c) 2005, 2011, 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.script.util;
-
-import javax.script.*;
-import java.lang.reflect.*;
-import java.security.*;
-
-/*
- * java.lang.reflect.Proxy based interface implementor. This is meant
- * to be used to implement Invocable.getInterface.
- *
- * @author Mike Grogan
- * @since 1.6
- */
-public class InterfaceImplementor {
-
-    private Invocable engine;
-
-    /** Creates a new instance of Invocable */
-    public InterfaceImplementor(Invocable engine) {
-        this.engine = engine;
-    }
-
-    private final class InterfaceImplementorInvocationHandler
-                        implements InvocationHandler {
-        private Object thiz;
-        private AccessControlContext accCtxt;
-
-        public InterfaceImplementorInvocationHandler(Object thiz,
-            AccessControlContext accCtxt) {
-            this.thiz = thiz;
-            this.accCtxt = accCtxt;
-        }
-
-        public Object invoke(Object proxy , Method method, Object[] args)
-        throws java.lang.Throwable {
-            // give chance to convert input args
-            args = convertArguments(method, args);
-            Object result;
-            final Method m = method;
-            final Object[] a = args;
-            result = AccessController.doPrivileged(new PrivilegedExceptionAction<Object>() {
-                public Object run() throws Exception {
-                    if (thiz == null) {
-                        return engine.invokeFunction(m.getName(), a);
-                    } else {
-                        return engine.invokeMethod(thiz, m.getName(), a);
-                    }
-                }
-            }, accCtxt);
-            // give chance to convert the method result
-            return convertResult(method, result);
-        }
-    }
-
-    public <T> T getInterface(Object thiz, Class<T> iface)
-    throws ScriptException {
-        if (iface == null || !iface.isInterface()) {
-            throw new IllegalArgumentException("interface Class expected");
-        }
-        if (! isImplemented(thiz, iface)) {
-            return null;
-        }
-        AccessControlContext accCtxt = AccessController.getContext();
-        return iface.cast(Proxy.newProxyInstance(iface.getClassLoader(),
-            new Class[]{iface},
-            new InterfaceImplementorInvocationHandler(thiz, accCtxt)));
-    }
-
-    protected boolean isImplemented(Object thiz, Class<?> iface) {
-        return true;
-    }
-
-    // called to convert method result after invoke
-    protected Object convertResult(Method method, Object res)
-                                   throws ScriptException {
-        // default is identity conversion
-        return res;
-    }
-
-    // called to convert method arguments before invoke
-    protected Object[] convertArguments(Method method, Object[] args)
-                                      throws ScriptException {
-        // default is identity conversion
-        return args;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/script/util/ScriptEngineFactoryBase.java b/ojluni/src/main/java/com/sun/script/util/ScriptEngineFactoryBase.java
deleted file mode 100755
index 3867045..0000000
--- a/ojluni/src/main/java/com/sun/script/util/ScriptEngineFactoryBase.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-package com.sun.script.util;
-import javax.script.*;
-
-/*
- * Abstract super class for factory implementations.
- *
- * @author Mike Grogan
- * @since 1.6
- */
-public abstract class ScriptEngineFactoryBase implements ScriptEngineFactory {
-
-    public String getName() {
-        return (String)getParameter(ScriptEngine.NAME);
-    }
-
-    public String getEngineName() {
-        return (String)getParameter(ScriptEngine.ENGINE);
-    }
-
-    public String getEngineVersion() {
-        return (String)getParameter(ScriptEngine.ENGINE_VERSION);
-    }
-
-    public String getLanguageName() {
-        return (String)getParameter(ScriptEngine.LANGUAGE);
-    }
-
-    public String getLanguageVersion() {
-        return (String)getParameter(ScriptEngine.LANGUAGE_VERSION);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/swing/internal/plaf/basic/resources/basic.properties b/ojluni/src/main/java/com/sun/swing/internal/plaf/basic/resources/basic.properties
deleted file mode 100755
index 722d302..0000000
--- a/ojluni/src/main/java/com/sun/swing/internal/plaf/basic/resources/basic.properties
+++ /dev/null
@@ -1,189 +0,0 @@
-# This properties file is used to create a PropertyResourceBundle
-# It contains Locale specific strings used in Swing
-# Currently, the following components need this for support:
-#
-#    ColorChooser
-#    FileChooser
-#    OptionPane
-#
-# When this file is read in, the strings are put into the
-# defaults table.  This is an implementation detail of the current
-# workings of Swing.  DO NOT DEPEND ON THIS.
-# This may change in future versions of Swing as we improve localization
-# support.
-#
-#                        MNEMONIC NOTE:
-# Many of strings in this file are used by widgets that have a
-# mnemonic, for example:
-#   ColorChooser.rgbNameTextAndMnemonic=R&GB
-#
-# Indicates that the tab in the ColorChooser for RGB colors will have
-# the text 'RGB', further the mnemonic character will be 'g' and that
-# a decoration will be provided under the 'G'. This will typically
-# look like:  RGB
-#              -
-#
-# One important thing to remember is that the mnemonic MUST exist in
-# the String, if it does not exist you should add text that makes it
-# exist. This will typically take the form 'XXXX (M)' where M is the
-# character for the mnemonic.
-#
-# @author Steve Wilson
-
-############ FILE CHOOSER STRINGS #############
-FileChooser.fileDescription.textAndMnemonic=Generic File
-FileChooser.directoryDescription.textAndMnemonic=Directory
-FileChooser.newFolderError.textAndMnemonic=Error creating new folder
-FileChooser.newFolderErrorSeparator= :
-FileChooser.newFolderParentDoesntExistTitle.textAndMnemonic=Unable to create folder
-FileChooser.newFolderParentDoesntExist.textAndMnemonic=Unable to create the folder.\n\nThe system cannot find the path specified.
-FileChooser.renameErrorTitle.textAndMnemonic=Error Renaming File or Folder
-FileChooser.renameError.textAndMnemonic=Cannot rename {0}
-FileChooser.renameErrorFileExists.textAndMnemonic=Cannot rename {0}: A file with the name you specified already exists. \
-  Specify a different file name.
-FileChooser.acceptAllFileFilter.textAndMnemonic=All Files
-FileChooser.cancelButton.textAndMnemonic=Cancel
-FileChooser.saveButton.textAndMnemonic=&Save
-FileChooser.openButton.textAndMnemonic=&Open
-FileChooser.saveDialogTitle.textAndMnemonic=Save
-FileChooser.openDialogTitle.textAndMnemonic=Open
-FileChooser.updateButton.textAndMnemonic=&Update
-FileChooser.helpButton.textAndMnemonic=&Help
-FileChooser.directoryOpenButton.textAndMnemonic=&Open
-
-# File Size Units
-FileChooser.fileSizeKiloBytes={0} KB
-FileChooser.fileSizeMegaBytes={0} MB
-FileChooser.fileSizeGigaBytes={0} GB
-
-# These strings are platform dependent not look and feel dependent.
-FileChooser.win32.newFolder=New Folder
-FileChooser.win32.newFolder.subsequent=New Folder ({0})
-FileChooser.other.newFolder=NewFolder
-FileChooser.other.newFolder.subsequent=NewFolder.{0}
-
-
-## file chooser tooltips ###
-FileChooser.cancelButtonToolTip.textAndMnemonic=Abort file chooser dialog
-FileChooser.saveButtonToolTip.textAndMnemonic=Save selected file
-FileChooser.openButtonToolTip.textAndMnemonic=Open selected file
-FileChooser.updateButtonToolTip.textAndMnemonic=Update directory listing
-FileChooser.helpButtonToolTip.textAndMnemonic=FileChooser help
-FileChooser.directoryOpenButtonToolTip.textAndMnemonic=Open selected directory
-
-FileChooser.filesListAccessibleName=Files List
-FileChooser.filesDetailsAccessibleName=Files Details
-
-############ COLOR CHOOSER STRINGS #############
-ColorChooser.preview.textAndMnemonic=Preview
-ColorChooser.ok.textAndMnemonic=OK
-ColorChooser.cancel.textAndMnemonic=Cancel
-ColorChooser.reset.textAndMnemonic=&Reset
-ColorChooser.sample.textAndMnemonic=Sample Text  Sample Text
-ColorChooser.swatches.textAndMnemonic=&Swatches
-ColorChooser.swatchesRecent.textAndMnemonic=Recent:
-ColorChooser.hsv.textAndMnemonic=&HSV
-ColorChooser.hsvHue.textAndMnemonic=Hue
-ColorChooser.hsvSaturation.textAndMnemonic=Saturation
-ColorChooser.hsvValue.textAndMnemonic=Value
-ColorChooser.hsvTransparency.textAndMnemonic=Transparency
-ColorChooser.hsl.textAndMnemonic=HS&L
-ColorChooser.hslHue.textAndMnemonic=Hue
-ColorChooser.hslSaturation.textAndMnemonic=Saturation
-ColorChooser.hslLightness.textAndMnemonic=Lightness
-ColorChooser.hslTransparency.textAndMnemonic=Transparency
-ColorChooser.rgb.textAndMnemonic=R&GB
-ColorChooser.rgbRed.textAndMnemonic=Re&d
-ColorChooser.rgbGreen.textAndMnemonic=Gree&n
-ColorChooser.rgbBlue.textAndMnemonic=&Blue
-ColorChooser.rgbAlpha.textAndMnemonic=Alpha
-ColorChooser.rgbHexCode.textAndMnemonic=&Color Code
-ColorChooser.cmyk.textAndMnemonic=C&MYK
-ColorChooser.cmykCyan.textAndMnemonic=Cyan
-ColorChooser.cmykMagenta.textAndMnemonic=Magenta
-ColorChooser.cmykYellow.textAndMnemonic=Yellow
-ColorChooser.cmykBlack.textAndMnemonic=Black
-ColorChooser.cmykAlpha.textAndMnemonic=Alpha
-
-############ OPTION PANE STRINGS #############
-# We only define mnemonics for YES/NO, but for completeness you can
-# define mnemonics for any of the buttons.
-OptionPane.yesButton.textAndMnemonic=&Yes
-OptionPane.noButton.textAndMnemonic=&No
-OptionPane.okButton.textAndMnemonic=OK
-#OptionPane.okButtonMnemonic=0
-OptionPane.cancelButton.textAndMnemonic=Cancel
-#OptionPane.cancelButtonMnemonic=0
-OptionPane.title.textAndMnemonic=Select an Option
-# Title for the dialog for the showInputDialog methods. Only used if
-# the developer uses one of the variants that doesn't take a title.
-OptionPane.inputDialog.titleAndMnemonic=Input
-# Title for the dialog for the showMessageDialog methods. Only used if
-# the developer uses one of the variants that doesn't take a title.
-OptionPane.messageDialog.titleAndMnemonic=Message
-
-############ Printing Dialog Strings ############
-PrintingDialog.titleProgress.textAndMnemonic=Printing
-PrintingDialog.titleAborting.textAndMnemonic=Printing (Aborting)
-
-PrintingDialog.contentInitial.textAndMnemonic=Printing in progress...
-
-# The following string will be formatted by a MessageFormat
-# and {0} will be replaced by page number being printed
-PrintingDialog.contentProgress.textAndMnemonic=Printed page {0}...
-
-PrintingDialog.contentAborting.textAndMnemonic=Printing aborting...
-
-PrintingDialog.abortButton.textAndMnemonic=&Abort
-PrintingDialog.abortButtonToolTip.textAndMnemonic=Abort Printing
-
-############ Internal Frame Strings ############
-InternalFrame.iconButtonToolTip=Minimize
-InternalFrame.maxButtonToolTip=Maximize
-InternalFrame.restoreButtonToolTip=Restore
-InternalFrame.closeButtonToolTip=Close
-
-############ Internal Frame Title Pane Strings ############
-InternalFrameTitlePane.restoreButton.textAndMnemonic=Restore
-InternalFrameTitlePane.moveButton.textAndMnemonic=Move
-InternalFrameTitlePane.sizeButton.textAndMnemonic=Size
-InternalFrameTitlePane.minimizeButton.textAndMnemonic=Minimize
-InternalFrameTitlePane.maximizeButton.textAndMnemonic=Maximize
-InternalFrameTitlePane.closeButton.textAndMnemonic=Close
-
-############ Text strings #############
-# Used for html forms
-FormView.submitButton.textAndMnemonic=Submit Query
-FormView.resetButton.textAndMnemonic=Reset
-FormView.browseFileButton.textAndMnemonic=Browse...
-
-############ Abstract Document Strings ############
-AbstractDocument.styleChange.textAndMnemonic=style change
-AbstractDocument.addition.textAndMnemonic=addition
-AbstractDocument.deletion.textAndMnemonic=deletion
-AbstractDocument.undo.textAndMnemonic=Undo
-AbstractDocument.redo.textAndMnemonic=Redo
-
-############ Abstract Button Strings ############
-AbstractButton.click.textAndMnemonic=click
-
-############ Abstract Undoable Edit Strings ############
-AbstractUndoableEdit.undo.textAndMnemonic=Undo
-AbstractUndoableEdit.redo.textAndMnemonic=Redo
-
-############ Combo Box Strings ############
-ComboBox.togglePopup.textAndMnemonic=togglePopup
-
-############ Progress Monitor Strings ############
-ProgressMonitor.progress.textAndMnemonic=Progress...
-
-############ Split Pane Strings ############
-SplitPane.leftButton.textAndMnemonic=left button
-SplitPane.rightButton.textAndMnemonic=right button
-# Used for Isindex
-IsindexView.prompt=This is a searchable index.  Enter search keywords:
-
-############ InternalFrameTitlePane Strings ############
-InternalFrameTitlePane.iconifyButtonAccessibleName=Iconify
-InternalFrameTitlePane.maximizeButtonAccessibleName=Maximize
-InternalFrameTitlePane.closeButtonAccessibleName=Close
diff --git a/ojluni/src/main/java/com/sun/swing/internal/plaf/basic/resources/basic_de.properties b/ojluni/src/main/java/com/sun/swing/internal/plaf/basic/resources/basic_de.properties
deleted file mode 100755
index 1affb2f..0000000
--- a/ojluni/src/main/java/com/sun/swing/internal/plaf/basic/resources/basic_de.properties
+++ /dev/null
@@ -1,188 +0,0 @@
-# This properties file is used to create a PropertyResourceBundle
-# It contains Locale specific strings used in Swing
-# Currently, the following components need this for support:
-#
-#    ColorChooser
-#    FileChooser
-#    OptionPane
-#
-# When this file is read in, the strings are put into the
-# defaults table.  This is an implementation detail of the current
-# workings of Swing.  DO NOT DEPEND ON THIS.
-# This may change in future versions of Swing as we improve localization
-# support.
-#
-#                        MNEMONIC NOTE:
-# Many of strings in this file are used by widgets that have a
-# mnemonic, for example:
-#   ColorChooser.rgbNameTextAndMnemonic=R&GB
-#
-# Indicates that the tab in the ColorChooser for RGB colors will have
-# the text 'RGB', further the mnemonic character will be 'g' and that
-# a decoration will be provided under the 'G'. This will typically
-# look like:  RGB
-#              -
-#
-# One important thing to remember is that the mnemonic MUST exist in
-# the String, if it does not exist you should add text that makes it
-# exist. This will typically take the form 'XXXX (M)' where M is the
-# character for the mnemonic.
-#
-# @author Steve Wilson
-
-############ FILE CHOOSER STRINGS #############
-FileChooser.fileDescription.textAndMnemonic=Allgemeine Datei
-FileChooser.directoryDescription.textAndMnemonic=Verzeichnis
-FileChooser.newFolderError.textAndMnemonic=Fehler beim Erstellen eines neuen Ordners
-FileChooser.newFolderErrorSeparator= :
-FileChooser.newFolderParentDoesntExistTitle.textAndMnemonic=Ordner kann nicht erstellt werden
-FileChooser.newFolderParentDoesntExist.textAndMnemonic=Ordner kann nicht erstellt werden.\n\nSystem kann den angegebenen Pfad nicht finden.
-FileChooser.renameErrorTitle.textAndMnemonic=Fehler beim Umbenennen von Datei oder Ordner
-FileChooser.renameError.textAndMnemonic={0} kann nicht umbenannt werden
-FileChooser.renameErrorFileExists.textAndMnemonic={0} kann nicht umbenannt werden: Es ist bereits eine Datei mit dem angegebenen Namen vorhanden. Geben Sie einen anderen Dateinamen an. 
-FileChooser.acceptAllFileFilter.textAndMnemonic=Alle Dateien
-FileChooser.cancelButton.textAndMnemonic=Abbrechen
-FileChooser.saveButton.textAndMnemonic=&Speichern
-FileChooser.openButton.textAndMnemonic=\u00D6&ffnen
-FileChooser.saveDialogTitle.textAndMnemonic=Speichern
-FileChooser.openDialogTitle.textAndMnemonic=\u00D6ffnen
-FileChooser.updateButton.textAndMnemonic=A&ktualisieren
-FileChooser.helpButton.textAndMnemonic=&Hilfe
-FileChooser.directoryOpenButton.textAndMnemonic=\u00D6&ffnen
-
-# File Size Units
-FileChooser.fileSizeKiloBytes={0} KB
-FileChooser.fileSizeMegaBytes={0} MB
-FileChooser.fileSizeGigaBytes={0} GB
-
-# These strings are platform dependent not look and feel dependent.
-FileChooser.win32.newFolder=Neuer Ordner
-FileChooser.win32.newFolder.subsequent=Neuer Ordner ({0})
-FileChooser.other.newFolder=NewFolder
-FileChooser.other.newFolder.subsequent=NewFolder.{0}
-
-
-## file chooser tooltips ###
-FileChooser.cancelButtonToolTip.textAndMnemonic=Dialogfeld f\u00FCr Dateiauswahl schlie\u00DFen
-FileChooser.saveButtonToolTip.textAndMnemonic=Ausgew\u00E4hlte Datei speichern
-FileChooser.openButtonToolTip.textAndMnemonic=Ausgew\u00E4hlte Datei \u00F6ffnen
-FileChooser.updateButtonToolTip.textAndMnemonic=Verzeichnisliste aktualisieren
-FileChooser.helpButtonToolTip.textAndMnemonic=FileChooser-Hilfe
-FileChooser.directoryOpenButtonToolTip.textAndMnemonic=Ausgew\u00E4hltes Verzeichnis \u00F6ffnen
-
-FileChooser.filesListAccessibleName=Dateiliste
-FileChooser.filesDetailsAccessibleName=Dateidetails
-
-############ COLOR CHOOSER STRINGS #############
-ColorChooser.preview.textAndMnemonic=Vorschau
-ColorChooser.ok.textAndMnemonic=OK
-ColorChooser.cancel.textAndMnemonic=Abbrechen
-ColorChooser.reset.textAndMnemonic=&Zur\u00FCcksetzen
-ColorChooser.sample.textAndMnemonic=Beispieltext  Beispieltext
-ColorChooser.swatches.textAndMnemonic=&Swatches
-ColorChooser.swatchesRecent.textAndMnemonic=Aktuell:
-ColorChooser.hsv.textAndMnemonic=&HSV
-ColorChooser.hsvHue.textAndMnemonic=Farbton
-ColorChooser.hsvSaturation.textAndMnemonic=S\u00E4ttigung
-ColorChooser.hsvValue.textAndMnemonic=Wert
-ColorChooser.hsvTransparency.textAndMnemonic=Transparenz
-ColorChooser.hsl.textAndMnemonic=HS&L
-ColorChooser.hslHue.textAndMnemonic=Farbton
-ColorChooser.hslSaturation.textAndMnemonic=S\u00E4ttigung
-ColorChooser.hslLightness.textAndMnemonic=Helligkeit
-ColorChooser.hslTransparency.textAndMnemonic=Transparenz
-ColorChooser.rgb.textAndMnemonic=R&GB
-ColorChooser.rgbRed.textAndMnemonic=Ro&t
-ColorChooser.rgbGreen.textAndMnemonic=Gr\u00FC&n
-ColorChooser.rgbBlue.textAndMnemonic=&Blau
-ColorChooser.rgbAlpha.textAndMnemonic=Alpha
-ColorChooser.rgbHexCode.textAndMnemonic=&Farbcode
-ColorChooser.cmyk.textAndMnemonic=C&MYK
-ColorChooser.cmykCyan.textAndMnemonic=Zyan
-ColorChooser.cmykMagenta.textAndMnemonic=Magenta
-ColorChooser.cmykYellow.textAndMnemonic=Gelb
-ColorChooser.cmykBlack.textAndMnemonic=Schwarz
-ColorChooser.cmykAlpha.textAndMnemonic=Alpha
-
-############ OPTION PANE STRINGS #############
-# We only define mnemonics for YES/NO, but for completeness you can
-# define mnemonics for any of the buttons.
-OptionPane.yesButton.textAndMnemonic=&Ja
-OptionPane.noButton.textAndMnemonic=&Nein
-OptionPane.okButton.textAndMnemonic=OK
-#OptionPane.okButtonMnemonic=0
-OptionPane.cancelButton.textAndMnemonic=Abbrechen
-#OptionPane.cancelButtonMnemonic=0
-OptionPane.title.textAndMnemonic=Option ausw\u00E4hlen
-# Title for the dialog for the showInputDialog methods. Only used if
-# the developer uses one of the variants that doesn't take a title.
-OptionPane.inputDialog.titleAndMnemonic=Eingabe
-# Title for the dialog for the showMessageDialog methods. Only used if
-# the developer uses one of the variants that doesn't take a title.
-OptionPane.messageDialog.titleAndMnemonic=Meldung
-
-############ Printing Dialog Strings ############
-PrintingDialog.titleProgress.textAndMnemonic=Drucken
-PrintingDialog.titleAborting.textAndMnemonic=Drucken (Abbruch)
-
-PrintingDialog.contentInitial.textAndMnemonic=Druckvorgang l\u00E4uft...
-
-# The following string will be formatted by a MessageFormat
-# and {0} will be replaced by page number being printed
-PrintingDialog.contentProgress.textAndMnemonic=Seite {0} wurde gedruckt...
-
-PrintingDialog.contentAborting.textAndMnemonic=Druckvorgang wird abgebrochen...
-
-PrintingDialog.abortButton.textAndMnemonic=&Abbruch
-PrintingDialog.abortButtonToolTip.textAndMnemonic=Druckvorgang abbrechen
-
-############ Internal Frame Strings ############
-InternalFrame.iconButtonToolTip=Minimieren
-InternalFrame.maxButtonToolTip=Maximieren
-InternalFrame.restoreButtonToolTip=Wiederherstellen
-InternalFrame.closeButtonToolTip=Schlie\u00DFen
-
-############ Internal Frame Title Pane Strings ############
-InternalFrameTitlePane.restoreButton.textAndMnemonic=Wiederherstellen
-InternalFrameTitlePane.moveButton.textAndMnemonic=Verschieben
-InternalFrameTitlePane.sizeButton.textAndMnemonic=Gr\u00F6\u00DFe
-InternalFrameTitlePane.minimizeButton.textAndMnemonic=Minimieren
-InternalFrameTitlePane.maximizeButton.textAndMnemonic=Maximieren
-InternalFrameTitlePane.closeButton.textAndMnemonic=Schlie\u00DFen
-
-############ Text strings #############
-# Used for html forms
-FormView.submitButton.textAndMnemonic=Abfrage weiterleiten
-FormView.resetButton.textAndMnemonic=Zur\u00FCcksetzen
-FormView.browseFileButton.textAndMnemonic=Durchsuchen...
-
-############ Abstract Document Strings ############
-AbstractDocument.styleChange.textAndMnemonic=Formatvorlagen\u00E4nderung
-AbstractDocument.addition.textAndMnemonic=Hinzuf\u00FCgen
-AbstractDocument.deletion.textAndMnemonic=L\u00F6schen
-AbstractDocument.undo.textAndMnemonic=R\u00FCckg\u00E4ngig
-AbstractDocument.redo.textAndMnemonic=Wiederherstellen
-
-############ Abstract Button Strings ############
-AbstractButton.click.textAndMnemonic=Klicken
-
-############ Abstract Undoable Edit Strings ############
-AbstractUndoableEdit.undo.textAndMnemonic=R\u00FCckg\u00E4ngig
-AbstractUndoableEdit.redo.textAndMnemonic=Wiederherstellen
-
-############ Combo Box Strings ############
-ComboBox.togglePopup.textAndMnemonic=togglePopup
-
-############ Progress Monitor Strings ############
-ProgressMonitor.progress.textAndMnemonic=Fortschritt...
-
-############ Split Pane Strings ############
-SplitPane.leftButton.textAndMnemonic=linke Schaltfl\u00E4che
-SplitPane.rightButton.textAndMnemonic=rechte Schaltfl\u00E4che
-# Used for Isindex
-IsindexView.prompt=Dieser Index kann durchsucht werden. Geben Sie Schl\u00FCsselw\u00F6rter f\u00FCr die Suche ein:
-
-############ InternalFrameTitlePane Strings ############
-InternalFrameTitlePane.iconifyButtonAccessibleName=Als Symbol darstellen
-InternalFrameTitlePane.maximizeButtonAccessibleName=Maximieren
-InternalFrameTitlePane.closeButtonAccessibleName=Schlie\u00DFen
diff --git a/ojluni/src/main/java/com/sun/swing/internal/plaf/basic/resources/basic_es.properties b/ojluni/src/main/java/com/sun/swing/internal/plaf/basic/resources/basic_es.properties
deleted file mode 100755
index 2de493e..0000000
--- a/ojluni/src/main/java/com/sun/swing/internal/plaf/basic/resources/basic_es.properties
+++ /dev/null
@@ -1,188 +0,0 @@
-# This properties file is used to create a PropertyResourceBundle
-# It contains Locale specific strings used in Swing
-# Currently, the following components need this for support:
-#
-#    ColorChooser
-#    FileChooser
-#    OptionPane
-#
-# When this file is read in, the strings are put into the
-# defaults table.  This is an implementation detail of the current
-# workings of Swing.  DO NOT DEPEND ON THIS.
-# This may change in future versions of Swing as we improve localization
-# support.
-#
-#                        MNEMONIC NOTE:
-# Many of strings in this file are used by widgets that have a
-# mnemonic, for example:
-#   ColorChooser.rgbNameTextAndMnemonic=R&GB
-#
-# Indicates that the tab in the ColorChooser for RGB colors will have
-# the text 'RGB', further the mnemonic character will be 'g' and that
-# a decoration will be provided under the 'G'. This will typically
-# look like:  RGB
-#              -
-#
-# One important thing to remember is that the mnemonic MUST exist in
-# the String, if it does not exist you should add text that makes it
-# exist. This will typically take the form 'XXXX (M)' where M is the
-# character for the mnemonic.
-#
-# @author Steve Wilson
-
-############ FILE CHOOSER STRINGS #############
-FileChooser.fileDescription.textAndMnemonic=Archivo Gen\u00E9rico
-FileChooser.directoryDescription.textAndMnemonic=Directorio
-FileChooser.newFolderError.textAndMnemonic=Error al crear una nueva carpeta
-FileChooser.newFolderErrorSeparator= :
-FileChooser.newFolderParentDoesntExistTitle.textAndMnemonic=No se ha podido crear la carpeta
-FileChooser.newFolderParentDoesntExist.textAndMnemonic=No se ha podido crear la carpeta.\n\nEl sistema no puede encontrar la ruta de acceso especificada.
-FileChooser.renameErrorTitle.textAndMnemonic=Error al cambiar el nombre del archivo o carpeta
-FileChooser.renameError.textAndMnemonic=No se puede cambiar el nombre de {0}
-FileChooser.renameErrorFileExists.textAndMnemonic=No se puede cambiar el nombre de {0}: ya existe un archivo con el nombre especificado. Especifique otro nombre de archivo. 
-FileChooser.acceptAllFileFilter.textAndMnemonic=Todos los Archivos
-FileChooser.cancelButton.textAndMnemonic=Cancelar
-FileChooser.saveButton.textAndMnemonic=&Guardar
-FileChooser.openButton.textAndMnemonic=&Abrir
-FileChooser.saveDialogTitle.textAndMnemonic=Guardar
-FileChooser.openDialogTitle.textAndMnemonic=Abrir
-FileChooser.updateButton.textAndMnemonic=Act&ualizar
-FileChooser.helpButton.textAndMnemonic=A&yuda
-FileChooser.directoryOpenButton.textAndMnemonic=&Abrir
-
-# File Size Units
-FileChooser.fileSizeKiloBytes={0} KB
-FileChooser.fileSizeMegaBytes={0} MB
-FileChooser.fileSizeGigaBytes={0} GB
-
-# These strings are platform dependent not look and feel dependent.
-FileChooser.win32.newFolder=Nueva Carpeta
-FileChooser.win32.newFolder.subsequent=Nueva Carpeta ({0})
-FileChooser.other.newFolder=Nueva Carpeta
-FileChooser.other.newFolder.subsequent=Nueva Carpeta.{0}
-
-
-## file chooser tooltips ###
-FileChooser.cancelButtonToolTip.textAndMnemonic=Cuadro de di\u00E1logo para abortar el selector de archivos
-FileChooser.saveButtonToolTip.textAndMnemonic=Guardar archivo seleccionado
-FileChooser.openButtonToolTip.textAndMnemonic=Abrir archivo seleccionado
-FileChooser.updateButtonToolTip.textAndMnemonic=Actualizar lista de directorios
-FileChooser.helpButtonToolTip.textAndMnemonic=Ayuda del Selector de Archivos
-FileChooser.directoryOpenButtonToolTip.textAndMnemonic=Abrir directorio seleccionado
-
-FileChooser.filesListAccessibleName=Lista de archivos
-FileChooser.filesDetailsAccessibleName=Detalles de archivos
-
-############ COLOR CHOOSER STRINGS #############
-ColorChooser.preview.textAndMnemonic=Vista Previa
-ColorChooser.ok.textAndMnemonic=Aceptar
-ColorChooser.cancel.textAndMnemonic=Cancelar
-ColorChooser.reset.textAndMnemonic=&Restablecer
-ColorChooser.sample.textAndMnemonic=Texto de Ejemplo  Texto de Ejemplo
-ColorChooser.swatches.textAndMnemonic=Mue&stras
-ColorChooser.swatchesRecent.textAndMnemonic=Reciente:
-ColorChooser.hsv.textAndMnemonic=&HSV
-ColorChooser.hsvHue.textAndMnemonic=Matiz
-ColorChooser.hsvSaturation.textAndMnemonic=Saturaci\u00F3n
-ColorChooser.hsvValue.textAndMnemonic=Valor
-ColorChooser.hsvTransparency.textAndMnemonic=Transparencia
-ColorChooser.hsl.textAndMnemonic=HS&L
-ColorChooser.hslHue.textAndMnemonic=Matiz
-ColorChooser.hslSaturation.textAndMnemonic=Saturaci\u00F3n
-ColorChooser.hslLightness.textAndMnemonic=Iluminaci\u00F3n
-ColorChooser.hslTransparency.textAndMnemonic=Transparencia
-ColorChooser.rgb.textAndMnemonic=R&GB
-ColorChooser.rgbRed.textAndMnemonic=Ro&jo
-ColorChooser.rgbGreen.textAndMnemonic=&Verde
-ColorChooser.rgbBlue.textAndMnemonic=A&zul
-ColorChooser.rgbAlpha.textAndMnemonic=Alfa
-ColorChooser.rgbHexCode.textAndMnemonic=&C\u00F3digo de Color
-ColorChooser.cmyk.textAndMnemonic=C&MYK
-ColorChooser.cmykCyan.textAndMnemonic=Cian
-ColorChooser.cmykMagenta.textAndMnemonic=Magenta
-ColorChooser.cmykYellow.textAndMnemonic=Amarillo
-ColorChooser.cmykBlack.textAndMnemonic=Negro
-ColorChooser.cmykAlpha.textAndMnemonic=Alfa
-
-############ OPTION PANE STRINGS #############
-# We only define mnemonics for YES/NO, but for completeness you can
-# define mnemonics for any of the buttons.
-OptionPane.yesButton.textAndMnemonic=&S\u00ED
-OptionPane.noButton.textAndMnemonic=&No
-OptionPane.okButton.textAndMnemonic=Aceptar
-#OptionPane.okButtonMnemonic=0
-OptionPane.cancelButton.textAndMnemonic=Cancelar
-#OptionPane.cancelButtonMnemonic=0
-OptionPane.title.textAndMnemonic=Seleccionar una Opci\u00F3n
-# Title for the dialog for the showInputDialog methods. Only used if
-# the developer uses one of the variants that doesn't take a title.
-OptionPane.inputDialog.titleAndMnemonic=Entrada
-# Title for the dialog for the showMessageDialog methods. Only used if
-# the developer uses one of the variants that doesn't take a title.
-OptionPane.messageDialog.titleAndMnemonic=Mensaje
-
-############ Printing Dialog Strings ############
-PrintingDialog.titleProgress.textAndMnemonic=Impresi\u00F3n
-PrintingDialog.titleAborting.textAndMnemonic=Impresi\u00F3n (Abortando)
-
-PrintingDialog.contentInitial.textAndMnemonic=Impresi\u00F3n en curso...
-
-# The following string will be formatted by a MessageFormat
-# and {0} will be replaced by page number being printed
-PrintingDialog.contentProgress.textAndMnemonic=P\u00E1gina {0} impresa...
-
-PrintingDialog.contentAborting.textAndMnemonic=Abortando la impresi\u00F3n...
-
-PrintingDialog.abortButton.textAndMnemonic=&Abortar
-PrintingDialog.abortButtonToolTip.textAndMnemonic=Abortar Impresi\u00F3n
-
-############ Internal Frame Strings ############
-InternalFrame.iconButtonToolTip=Minimizar
-InternalFrame.maxButtonToolTip=Maximizar
-InternalFrame.restoreButtonToolTip=Restaurar
-InternalFrame.closeButtonToolTip=Cerrar
-
-############ Internal Frame Title Pane Strings ############
-InternalFrameTitlePane.restoreButton.textAndMnemonic=Restaurar
-InternalFrameTitlePane.moveButton.textAndMnemonic=Mover
-InternalFrameTitlePane.sizeButton.textAndMnemonic=Tama\u00F1o
-InternalFrameTitlePane.minimizeButton.textAndMnemonic=Minimizar
-InternalFrameTitlePane.maximizeButton.textAndMnemonic=Maximizar
-InternalFrameTitlePane.closeButton.textAndMnemonic=Cerrar
-
-############ Text strings #############
-# Used for html forms
-FormView.submitButton.textAndMnemonic=Enviar Consulta
-FormView.resetButton.textAndMnemonic=Restablecer
-FormView.browseFileButton.textAndMnemonic=Examinar...
-
-############ Abstract Document Strings ############
-AbstractDocument.styleChange.textAndMnemonic=cambio de estilo
-AbstractDocument.addition.textAndMnemonic=agregaci\u00F3n
-AbstractDocument.deletion.textAndMnemonic=supresi\u00F3n
-AbstractDocument.undo.textAndMnemonic=Deshacer
-AbstractDocument.redo.textAndMnemonic=Rehacer
-
-############ Abstract Button Strings ############
-AbstractButton.click.textAndMnemonic=hacer clic
-
-############ Abstract Undoable Edit Strings ############
-AbstractUndoableEdit.undo.textAndMnemonic=Deshacer
-AbstractUndoableEdit.redo.textAndMnemonic=Rehacer
-
-############ Combo Box Strings ############
-ComboBox.togglePopup.textAndMnemonic=togglePopup
-
-############ Progress Monitor Strings ############
-ProgressMonitor.progress.textAndMnemonic=Progreso...
-
-############ Split Pane Strings ############
-SplitPane.leftButton.textAndMnemonic=bot\u00F3n izquierdo
-SplitPane.rightButton.textAndMnemonic=bot\u00F3n derecho
-# Used for Isindex
-IsindexView.prompt=En este \u00EDndice se pueden efectuar b\u00FAsquedas. Escriba las palabras clave de b\u00FAsqueda:
-
-############ InternalFrameTitlePane Strings ############
-InternalFrameTitlePane.iconifyButtonAccessibleName=Convertir en Icono
-InternalFrameTitlePane.maximizeButtonAccessibleName=Maximizar
-InternalFrameTitlePane.closeButtonAccessibleName=Cerrar
diff --git a/ojluni/src/main/java/com/sun/swing/internal/plaf/basic/resources/basic_fr.properties b/ojluni/src/main/java/com/sun/swing/internal/plaf/basic/resources/basic_fr.properties
deleted file mode 100755
index f57feca..0000000
--- a/ojluni/src/main/java/com/sun/swing/internal/plaf/basic/resources/basic_fr.properties
+++ /dev/null
@@ -1,188 +0,0 @@
-# This properties file is used to create a PropertyResourceBundle
-# It contains Locale specific strings used in Swing
-# Currently, the following components need this for support:
-#
-#    ColorChooser
-#    FileChooser
-#    OptionPane
-#
-# When this file is read in, the strings are put into the
-# defaults table.  This is an implementation detail of the current
-# workings of Swing.  DO NOT DEPEND ON THIS.
-# This may change in future versions of Swing as we improve localization
-# support.
-#
-#                        MNEMONIC NOTE:
-# Many of strings in this file are used by widgets that have a
-# mnemonic, for example:
-#   ColorChooser.rgbNameTextAndMnemonic=R&GB
-#
-# Indicates that the tab in the ColorChooser for RGB colors will have
-# the text 'RGB', further the mnemonic character will be 'g' and that
-# a decoration will be provided under the 'G'. This will typically
-# look like:  RGB
-#              -
-#
-# One important thing to remember is that the mnemonic MUST exist in
-# the String, if it does not exist you should add text that makes it
-# exist. This will typically take the form 'XXXX (M)' where M is the
-# character for the mnemonic.
-#
-# @author Steve Wilson
-
-############ FILE CHOOSER STRINGS #############
-FileChooser.fileDescription.textAndMnemonic=Fichier g\u00E9n\u00E9rique
-FileChooser.directoryDescription.textAndMnemonic=R\u00E9pertoire
-FileChooser.newFolderError.textAndMnemonic=Erreur lors de la cr\u00E9ation du dossier
-FileChooser.newFolderErrorSeparator= :
-FileChooser.newFolderParentDoesntExistTitle.textAndMnemonic=Impossible de cr\u00E9er le dossier
-FileChooser.newFolderParentDoesntExist.textAndMnemonic=Impossible de cr\u00E9er le dossier.\n\nLe syst\u00E8me ne parvient pas \u00E0 trouver le chemin indiqu\u00E9.
-FileChooser.renameErrorTitle.textAndMnemonic=Erreur lors du changement de nom du fichier ou du dossier
-FileChooser.renameError.textAndMnemonic=Impossible de renommer {0}
-FileChooser.renameErrorFileExists.textAndMnemonic=Impossible de renommer {0} : il existe d\u00E9j\u00E0 un fichier portant le nom indiqu\u00E9. Indiquez-en un autre. 
-FileChooser.acceptAllFileFilter.textAndMnemonic=Tous les fichiers
-FileChooser.cancelButton.textAndMnemonic=Annuler
-FileChooser.saveButton.textAndMnemonic=Enregi&strer
-FileChooser.openButton.textAndMnemonic=&Ouvrir
-FileChooser.saveDialogTitle.textAndMnemonic=Enregistrer
-FileChooser.openDialogTitle.textAndMnemonic=Ouvrir
-FileChooser.updateButton.textAndMnemonic=Mettre \u00E0 jo&ur
-FileChooser.helpButton.textAndMnemonic=&Aide
-FileChooser.directoryOpenButton.textAndMnemonic=&Ouvrir
-
-# File Size Units
-FileChooser.fileSizeKiloBytes={0} KB
-FileChooser.fileSizeMegaBytes={0} MB
-FileChooser.fileSizeGigaBytes={0} GB
-
-# These strings are platform dependent not look and feel dependent.
-FileChooser.win32.newFolder=Nouveau dossier
-FileChooser.win32.newFolder.subsequent=Nouveau dossier ({0})
-FileChooser.other.newFolder=NewFolder
-FileChooser.other.newFolder.subsequent=NewFolder.{0}
-
-
-## file chooser tooltips ###
-FileChooser.cancelButtonToolTip.textAndMnemonic=Ferme la bo\u00EEte de dialogue du s\u00E9lecteur de fichiers
-FileChooser.saveButtonToolTip.textAndMnemonic=Enregistre le fichier s\u00E9lectionn\u00E9
-FileChooser.openButtonToolTip.textAndMnemonic=Ouvre le fichier s\u00E9lectionn\u00E9
-FileChooser.updateButtonToolTip.textAndMnemonic=Met \u00E0 jour la liste des r\u00E9pertoires
-FileChooser.helpButtonToolTip.textAndMnemonic=Aide du s\u00E9lecteur de fichiers
-FileChooser.directoryOpenButtonToolTip.textAndMnemonic=Ouvre le r\u00E9pertoire s\u00E9lectionn\u00E9
-
-FileChooser.filesListAccessibleName=Liste des fichiers
-FileChooser.filesDetailsAccessibleName=D\u00E9tails des fichiers
-
-############ COLOR CHOOSER STRINGS #############
-ColorChooser.preview.textAndMnemonic=Aper\u00E7u
-ColorChooser.ok.textAndMnemonic=OK
-ColorChooser.cancel.textAndMnemonic=Annuler
-ColorChooser.reset.textAndMnemonic=&R\u00E9initialiser
-ColorChooser.sample.textAndMnemonic=Echantillon de texte  Echantillon de texte
-ColorChooser.swatches.textAndMnemonic=&Echantillons
-ColorChooser.swatchesRecent.textAndMnemonic=Dernier :
-ColorChooser.hsv.textAndMnemonic=&TSV
-ColorChooser.hsvHue.textAndMnemonic=Teinte
-ColorChooser.hsvSaturation.textAndMnemonic=Saturation
-ColorChooser.hsvValue.textAndMnemonic=Valeur
-ColorChooser.hsvTransparency.textAndMnemonic=Transparence
-ColorChooser.hsl.textAndMnemonic=TS&L
-ColorChooser.hslHue.textAndMnemonic=Teinte
-ColorChooser.hslSaturation.textAndMnemonic=Saturation
-ColorChooser.hslLightness.textAndMnemonic=Lumi\u00E8re
-ColorChooser.hslTransparency.textAndMnemonic=Transparence
-ColorChooser.rgb.textAndMnemonic=R&VB
-ColorChooser.rgbRed.textAndMnemonic=R&ouge
-ColorChooser.rgbGreen.textAndMnemonic=&Vert
-ColorChooser.rgbBlue.textAndMnemonic=&Bleu
-ColorChooser.rgbAlpha.textAndMnemonic=Alpha
-ColorChooser.rgbHexCode.textAndMnemonic=&Code couleur
-ColorChooser.cmyk.textAndMnemonic=C&MYK
-ColorChooser.cmykCyan.textAndMnemonic=Cyan
-ColorChooser.cmykMagenta.textAndMnemonic=Magenta
-ColorChooser.cmykYellow.textAndMnemonic=Jaune
-ColorChooser.cmykBlack.textAndMnemonic=Noir
-ColorChooser.cmykAlpha.textAndMnemonic=Alpha
-
-############ OPTION PANE STRINGS #############
-# We only define mnemonics for YES/NO, but for completeness you can
-# define mnemonics for any of the buttons.
-OptionPane.yesButton.textAndMnemonic=&Oui
-OptionPane.noButton.textAndMnemonic=&Non
-OptionPane.okButton.textAndMnemonic=OK
-#OptionPane.okButtonMnemonic=0
-OptionPane.cancelButton.textAndMnemonic=Annuler
-#OptionPane.cancelButtonMnemonic=0
-OptionPane.title.textAndMnemonic=S\u00E9lectionner une option
-# Title for the dialog for the showInputDialog methods. Only used if
-# the developer uses one of the variants that doesn't take a title.
-OptionPane.inputDialog.titleAndMnemonic=Entr\u00E9e
-# Title for the dialog for the showMessageDialog methods. Only used if
-# the developer uses one of the variants that doesn't take a title.
-OptionPane.messageDialog.titleAndMnemonic=Message
-
-############ Printing Dialog Strings ############
-PrintingDialog.titleProgress.textAndMnemonic=Impression
-PrintingDialog.titleAborting.textAndMnemonic=Impression (abandon)
-
-PrintingDialog.contentInitial.textAndMnemonic=Impression en cours...
-
-# The following string will be formatted by a MessageFormat
-# and {0} will be replaced by page number being printed
-PrintingDialog.contentProgress.textAndMnemonic=Page {0} imprim\u00E9e...
-
-PrintingDialog.contentAborting.textAndMnemonic=Abandon de l'impression...
-
-PrintingDialog.abortButton.textAndMnemonic=&Abandonner
-PrintingDialog.abortButtonToolTip.textAndMnemonic=Abandonner l'impression
-
-############ Internal Frame Strings ############
-InternalFrame.iconButtonToolTip=R\u00E9duire
-InternalFrame.maxButtonToolTip=Agrandir
-InternalFrame.restoreButtonToolTip=Restaurer
-InternalFrame.closeButtonToolTip=Fermer
-
-############ Internal Frame Title Pane Strings ############
-InternalFrameTitlePane.restoreButton.textAndMnemonic=Restaurer
-InternalFrameTitlePane.moveButton.textAndMnemonic=D\u00E9placer
-InternalFrameTitlePane.sizeButton.textAndMnemonic=Taille
-InternalFrameTitlePane.minimizeButton.textAndMnemonic=R\u00E9duire
-InternalFrameTitlePane.maximizeButton.textAndMnemonic=Agrandir
-InternalFrameTitlePane.closeButton.textAndMnemonic=Fermer
-
-############ Text strings #############
-# Used for html forms
-FormView.submitButton.textAndMnemonic=Soumettre la requ\u00EAte
-FormView.resetButton.textAndMnemonic=R\u00E9initialiser
-FormView.browseFileButton.textAndMnemonic=Parcourir...
-
-############ Abstract Document Strings ############
-AbstractDocument.styleChange.textAndMnemonic=modification de style
-AbstractDocument.addition.textAndMnemonic=ajout
-AbstractDocument.deletion.textAndMnemonic=suppression
-AbstractDocument.undo.textAndMnemonic=Annuler
-AbstractDocument.redo.textAndMnemonic=R\u00E9tablir
-
-############ Abstract Button Strings ############
-AbstractButton.click.textAndMnemonic=cliquer
-
-############ Abstract Undoable Edit Strings ############
-AbstractUndoableEdit.undo.textAndMnemonic=Annuler
-AbstractUndoableEdit.redo.textAndMnemonic=R\u00E9tablir
-
-############ Combo Box Strings ############
-ComboBox.togglePopup.textAndMnemonic=togglePopup
-
-############ Progress Monitor Strings ############
-ProgressMonitor.progress.textAndMnemonic=Progression...
-
-############ Split Pane Strings ############
-SplitPane.leftButton.textAndMnemonic=bouton gauche
-SplitPane.rightButton.textAndMnemonic=bouton droit
-# Used for Isindex
-IsindexView.prompt=Ceci est un index de recherche. Tapez des mots-cl\u00E9s pour la recherche :
-
-############ InternalFrameTitlePane Strings ############
-InternalFrameTitlePane.iconifyButtonAccessibleName=R\u00E9duire
-InternalFrameTitlePane.maximizeButtonAccessibleName=Agrandir
-InternalFrameTitlePane.closeButtonAccessibleName=Fermer
diff --git a/ojluni/src/main/java/com/sun/swing/internal/plaf/basic/resources/basic_it.properties b/ojluni/src/main/java/com/sun/swing/internal/plaf/basic/resources/basic_it.properties
deleted file mode 100755
index 243cf6a..0000000
--- a/ojluni/src/main/java/com/sun/swing/internal/plaf/basic/resources/basic_it.properties
+++ /dev/null
@@ -1,188 +0,0 @@
-# This properties file is used to create a PropertyResourceBundle
-# It contains Locale specific strings used in Swing
-# Currently, the following components need this for support:
-#
-#    ColorChooser
-#    FileChooser
-#    OptionPane
-#
-# When this file is read in, the strings are put into the
-# defaults table.  This is an implementation detail of the current
-# workings of Swing.  DO NOT DEPEND ON THIS.
-# This may change in future versions of Swing as we improve localization
-# support.
-#
-#                        MNEMONIC NOTE:
-# Many of strings in this file are used by widgets that have a
-# mnemonic, for example:
-#   ColorChooser.rgbNameTextAndMnemonic=R&GB
-#
-# Indicates that the tab in the ColorChooser for RGB colors will have
-# the text 'RGB', further the mnemonic character will be 'g' and that
-# a decoration will be provided under the 'G'. This will typically
-# look like:  RGB
-#              -
-#
-# One important thing to remember is that the mnemonic MUST exist in
-# the String, if it does not exist you should add text that makes it
-# exist. This will typically take the form 'XXXX (M)' where M is the
-# character for the mnemonic.
-#
-# @author Steve Wilson
-
-############ FILE CHOOSER STRINGS #############
-FileChooser.fileDescription.textAndMnemonic=File generico
-FileChooser.directoryDescription.textAndMnemonic=Directory
-FileChooser.newFolderError.textAndMnemonic=Errore durante la creazione della nuova cartella
-FileChooser.newFolderErrorSeparator= :
-FileChooser.newFolderParentDoesntExistTitle.textAndMnemonic=Impossibile creare la cartella
-FileChooser.newFolderParentDoesntExist.textAndMnemonic=Impossibile creare la cartella.\n\nIl sistema non \u00E8 in grado di trovare il percorso specificato.
-FileChooser.renameErrorTitle.textAndMnemonic=Errore durante la ridenominazione del file o della cartella
-FileChooser.renameError.textAndMnemonic=Impossibile rinominare {0}
-FileChooser.renameErrorFileExists.textAndMnemonic=Impossibile rinominare {0}: esiste gi\u00E0 un file con il nome specificato. Specificare un altro nome. 
-FileChooser.acceptAllFileFilter.textAndMnemonic=Tutti i file
-FileChooser.cancelButton.textAndMnemonic=Annulla
-FileChooser.saveButton.textAndMnemonic=Sal&va
-FileChooser.openButton.textAndMnemonic=&Apri
-FileChooser.saveDialogTitle.textAndMnemonic=Salva
-FileChooser.openDialogTitle.textAndMnemonic=Apri
-FileChooser.updateButton.textAndMnemonic=Ag&giorna
-FileChooser.helpButton.textAndMnemonic=&?
-FileChooser.directoryOpenButton.textAndMnemonic=&Apri
-
-# File Size Units
-FileChooser.fileSizeKiloBytes={0} KB
-FileChooser.fileSizeMegaBytes={0} MB
-FileChooser.fileSizeGigaBytes={0} GB
-
-# These strings are platform dependent not look and feel dependent.
-FileChooser.win32.newFolder=Nuova cartella
-FileChooser.win32.newFolder.subsequent=Nuova cartella ({0})
-FileChooser.other.newFolder=NewFolder
-FileChooser.other.newFolder.subsequent=NewFolder.{0}
-
-
-## file chooser tooltips ###
-FileChooser.cancelButtonToolTip.textAndMnemonic=Chiude la finestra di dialogo di selezione file
-FileChooser.saveButtonToolTip.textAndMnemonic=Salva il file selezionato
-FileChooser.openButtonToolTip.textAndMnemonic=Apre il file selezionato
-FileChooser.updateButtonToolTip.textAndMnemonic=Aggiorna la lista directory
-FileChooser.helpButtonToolTip.textAndMnemonic=Guida FileChooser
-FileChooser.directoryOpenButtonToolTip.textAndMnemonic=Apre la directory selezionata
-
-FileChooser.filesListAccessibleName=Lista dei file
-FileChooser.filesDetailsAccessibleName=Dettagli file
-
-############ COLOR CHOOSER STRINGS #############
-ColorChooser.preview.textAndMnemonic=Anteprima
-ColorChooser.ok.textAndMnemonic=OK
-ColorChooser.cancel.textAndMnemonic=Annulla
-ColorChooser.reset.textAndMnemonic=&Reimposta
-ColorChooser.sample.textAndMnemonic=Testo di prova          Testo di prova
-ColorChooser.swatches.textAndMnemonic=Colori cam&pione
-ColorChooser.swatchesRecent.textAndMnemonic=Recenti:
-ColorChooser.hsv.textAndMnemonic=&HSV
-ColorChooser.hsvHue.textAndMnemonic=Tonalit\u00E0
-ColorChooser.hsvSaturation.textAndMnemonic=Saturazione
-ColorChooser.hsvValue.textAndMnemonic=Valore
-ColorChooser.hsvTransparency.textAndMnemonic=Trasparenza
-ColorChooser.hsl.textAndMnemonic=HS&L
-ColorChooser.hslHue.textAndMnemonic=Tonalit\u00E0
-ColorChooser.hslSaturation.textAndMnemonic=Saturazione
-ColorChooser.hslLightness.textAndMnemonic=Luminosit\u00E0
-ColorChooser.hslTransparency.textAndMnemonic=Trasparenza
-ColorChooser.rgb.textAndMnemonic=R&GB
-ColorChooser.rgbRed.textAndMnemonic=Ro&sso
-ColorChooser.rgbGreen.textAndMnemonic=Ver&de
-ColorChooser.rgbBlue.textAndMnemonic=&Blu
-ColorChooser.rgbAlpha.textAndMnemonic=Alfa
-ColorChooser.rgbHexCode.textAndMnemonic=&Codice colori
-ColorChooser.cmyk.textAndMnemonic=C&MYK
-ColorChooser.cmykCyan.textAndMnemonic=Ciano
-ColorChooser.cmykMagenta.textAndMnemonic=Magenta
-ColorChooser.cmykYellow.textAndMnemonic=Giallo
-ColorChooser.cmykBlack.textAndMnemonic=Nero
-ColorChooser.cmykAlpha.textAndMnemonic=Alfa
-
-############ OPTION PANE STRINGS #############
-# We only define mnemonics for YES/NO, but for completeness you can
-# define mnemonics for any of the buttons.
-OptionPane.yesButton.textAndMnemonic=&S\u00EC
-OptionPane.noButton.textAndMnemonic=&No
-OptionPane.okButton.textAndMnemonic=OK
-#OptionPane.okButtonMnemonic=0
-OptionPane.cancelButton.textAndMnemonic=Annulla
-#OptionPane.cancelButtonMnemonic=0
-OptionPane.title.textAndMnemonic=Selezionare una opzione
-# Title for the dialog for the showInputDialog methods. Only used if
-# the developer uses one of the variants that doesn't take a title.
-OptionPane.inputDialog.titleAndMnemonic=Input
-# Title for the dialog for the showMessageDialog methods. Only used if
-# the developer uses one of the variants that doesn't take a title.
-OptionPane.messageDialog.titleAndMnemonic=Messaggio
-
-############ Printing Dialog Strings ############
-PrintingDialog.titleProgress.textAndMnemonic=Stampa in corso
-PrintingDialog.titleAborting.textAndMnemonic=Stampa in corso (operazione interrotta)
-
-PrintingDialog.contentInitial.textAndMnemonic=Stampa in corso...
-
-# The following string will be formatted by a MessageFormat
-# and {0} will be replaced by page number being printed
-PrintingDialog.contentProgress.textAndMnemonic=Pagina stampata {0}...
-
-PrintingDialog.contentAborting.textAndMnemonic=Interruzione della stampa...
-
-PrintingDialog.abortButton.textAndMnemonic=I&nterrompi
-PrintingDialog.abortButtonToolTip.textAndMnemonic=Interrompi la stampa
-
-############ Internal Frame Strings ############
-InternalFrame.iconButtonToolTip=Riduci a icona
-InternalFrame.maxButtonToolTip=Ingrandisci
-InternalFrame.restoreButtonToolTip=Ripristina
-InternalFrame.closeButtonToolTip=Chiudi
-
-############ Internal Frame Title Pane Strings ############
-InternalFrameTitlePane.restoreButton.textAndMnemonic=Ripristina
-InternalFrameTitlePane.moveButton.textAndMnemonic=Sposta
-InternalFrameTitlePane.sizeButton.textAndMnemonic=Dimensioni
-InternalFrameTitlePane.minimizeButton.textAndMnemonic=Riduci a icona
-InternalFrameTitlePane.maximizeButton.textAndMnemonic=Ingrandisci
-InternalFrameTitlePane.closeButton.textAndMnemonic=Chiudi
-
-############ Text strings #############
-# Used for html forms
-FormView.submitButton.textAndMnemonic=Sottometti query
-FormView.resetButton.textAndMnemonic=Reimposta
-FormView.browseFileButton.textAndMnemonic=Sfoglia...
-
-############ Abstract Document Strings ############
-AbstractDocument.styleChange.textAndMnemonic=modifica di stile
-AbstractDocument.addition.textAndMnemonic=aggiunta
-AbstractDocument.deletion.textAndMnemonic=eliminazione
-AbstractDocument.undo.textAndMnemonic=Annulla
-AbstractDocument.redo.textAndMnemonic=Ripeti
-
-############ Abstract Button Strings ############
-AbstractButton.click.textAndMnemonic=fare clic
-
-############ Abstract Undoable Edit Strings ############
-AbstractUndoableEdit.undo.textAndMnemonic=Annulla
-AbstractUndoableEdit.redo.textAndMnemonic=Ripeti
-
-############ Combo Box Strings ############
-ComboBox.togglePopup.textAndMnemonic=togglePopup
-
-############ Progress Monitor Strings ############
-ProgressMonitor.progress.textAndMnemonic=Avanzamento...
-
-############ Split Pane Strings ############
-SplitPane.leftButton.textAndMnemonic=tasto sinistro
-SplitPane.rightButton.textAndMnemonic=tasto destro
-# Used for Isindex
-IsindexView.prompt=Questo \u00E8 un indice di ricerca. Immettere le parole chiave:
-
-############ InternalFrameTitlePane Strings ############
-InternalFrameTitlePane.iconifyButtonAccessibleName=Riduci a icona
-InternalFrameTitlePane.maximizeButtonAccessibleName=Ingrandisci
-InternalFrameTitlePane.closeButtonAccessibleName=Chiudi
diff --git a/ojluni/src/main/java/com/sun/swing/internal/plaf/basic/resources/basic_ja.properties b/ojluni/src/main/java/com/sun/swing/internal/plaf/basic/resources/basic_ja.properties
deleted file mode 100755
index d8adf8c..0000000
--- a/ojluni/src/main/java/com/sun/swing/internal/plaf/basic/resources/basic_ja.properties
+++ /dev/null
@@ -1,188 +0,0 @@
-# This properties file is used to create a PropertyResourceBundle
-# It contains Locale specific strings used in Swing
-# Currently, the following components need this for support:
-#
-#    ColorChooser
-#    FileChooser
-#    OptionPane
-#
-# When this file is read in, the strings are put into the
-# defaults table.  This is an implementation detail of the current
-# workings of Swing.  DO NOT DEPEND ON THIS.
-# This may change in future versions of Swing as we improve localization
-# support.
-#
-#                        MNEMONIC NOTE:
-# Many of strings in this file are used by widgets that have a
-# mnemonic, for example:
-#   ColorChooser.rgbNameTextAndMnemonic=R&GB
-#
-# Indicates that the tab in the ColorChooser for RGB colors will have
-# the text 'RGB', further the mnemonic character will be 'g' and that
-# a decoration will be provided under the 'G'. This will typically
-# look like:  RGB
-#              -
-#
-# One important thing to remember is that the mnemonic MUST exist in
-# the String, if it does not exist you should add text that makes it
-# exist. This will typically take the form 'XXXX (M)' where M is the
-# character for the mnemonic.
-#
-# @author Steve Wilson
-
-############ FILE CHOOSER STRINGS #############
-FileChooser.fileDescription.textAndMnemonic=\u6C4E\u7528\u30D5\u30A1\u30A4\u30EB
-FileChooser.directoryDescription.textAndMnemonic=\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA
-FileChooser.newFolderError.textAndMnemonic=\u65B0\u898F\u30D5\u30A9\u30EB\u30C0\u306E\u4F5C\u6210\u30A8\u30E9\u30FC
-FileChooser.newFolderErrorSeparator= :
-FileChooser.newFolderParentDoesntExistTitle.textAndMnemonic=\u30D5\u30A9\u30EB\u30C0\u3092\u4F5C\u6210\u3067\u304D\u307E\u305B\u3093
-FileChooser.newFolderParentDoesntExist.textAndMnemonic=\u30D5\u30A9\u30EB\u30C0\u3092\u4F5C\u6210\u3067\u304D\u307E\u305B\u3093\u3002\n\n\u6307\u5B9A\u3057\u305F\u30D1\u30B9\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3002
-FileChooser.renameErrorTitle.textAndMnemonic=\u30D5\u30A1\u30A4\u30EB\u307E\u305F\u306F\u30D5\u30A9\u30EB\u30C0\u306E\u540D\u524D\u5909\u66F4\u30A8\u30E9\u30FC
-FileChooser.renameError.textAndMnemonic={0}\u306E\u540D\u524D\u3092\u5909\u66F4\u3067\u304D\u307E\u305B\u3093
-FileChooser.renameErrorFileExists.textAndMnemonic={0}\u306E\u540D\u524D\u3092\u5909\u66F4\u3067\u304D\u307E\u305B\u3093: \u6307\u5B9A\u3057\u305F\u540D\u524D\u306E\u30D5\u30A1\u30A4\u30EB\u306F\u3059\u3067\u306B\u5B58\u5728\u3057\u307E\u3059\u3002\u5225\u306E\u30D5\u30A1\u30A4\u30EB\u540D\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002 
-FileChooser.acceptAllFileFilter.textAndMnemonic=\u3059\u3079\u3066\u306E\u30D5\u30A1\u30A4\u30EB
-FileChooser.cancelButton.textAndMnemonic=\u53D6\u6D88
-FileChooser.saveButton.textAndMnemonic=\u4FDD\u5B58(&S)
-FileChooser.openButton.textAndMnemonic=\u958B\u304F(&O)
-FileChooser.saveDialogTitle.textAndMnemonic=\u4FDD\u5B58
-FileChooser.openDialogTitle.textAndMnemonic=\u958B\u304F
-FileChooser.updateButton.textAndMnemonic=\u66F4\u65B0(&U)
-FileChooser.helpButton.textAndMnemonic=\u30D8\u30EB\u30D7(&H)
-FileChooser.directoryOpenButton.textAndMnemonic=\u958B\u304F(&O)
-
-# File Size Units
-FileChooser.fileSizeKiloBytes={0} KB
-FileChooser.fileSizeMegaBytes={0} MB
-FileChooser.fileSizeGigaBytes={0} GB
-
-# These strings are platform dependent not look and feel dependent.
-FileChooser.win32.newFolder=\u65B0\u898F\u30D5\u30A9\u30EB\u30C0
-FileChooser.win32.newFolder.subsequent=\u65B0\u898F\u30D5\u30A9\u30EB\u30C0({0})
-FileChooser.other.newFolder=\u65B0\u898F\u30D5\u30A9\u30EB\u30C0
-FileChooser.other.newFolder.subsequent=\u65B0\u898F\u30D5\u30A9\u30EB\u30C0.{0}
-
-
-## file chooser tooltips ###
-FileChooser.cancelButtonToolTip.textAndMnemonic=\u30D5\u30A1\u30A4\u30EB\u30FB\u30C1\u30E5\u30FC\u30B6\u30FB\u30C0\u30A4\u30A2\u30ED\u30B0\u3092\u7D42\u4E86\u3057\u307E\u3059
-FileChooser.saveButtonToolTip.textAndMnemonic=\u9078\u629E\u3057\u305F\u30D5\u30A1\u30A4\u30EB\u3092\u4FDD\u5B58\u3057\u307E\u3059
-FileChooser.openButtonToolTip.textAndMnemonic=\u9078\u629E\u3057\u305F\u30D5\u30A1\u30A4\u30EB\u3092\u958B\u304D\u307E\u3059
-FileChooser.updateButtonToolTip.textAndMnemonic=\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u306E\u30EA\u30B9\u30C8\u3092\u66F4\u65B0\u3057\u307E\u3059
-FileChooser.helpButtonToolTip.textAndMnemonic=FileChooser\u306E\u30D8\u30EB\u30D7\u3067\u3059
-FileChooser.directoryOpenButtonToolTip.textAndMnemonic=\u9078\u629E\u3057\u305F\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u3092\u958B\u304D\u307E\u3059
-
-FileChooser.filesListAccessibleName=\u30D5\u30A1\u30A4\u30EB\u30FB\u30EA\u30B9\u30C8
-FileChooser.filesDetailsAccessibleName=\u30D5\u30A1\u30A4\u30EB\u306E\u8A73\u7D30
-
-############ COLOR CHOOSER STRINGS #############
-ColorChooser.preview.textAndMnemonic=\u30D7\u30EC\u30D3\u30E5\u30FC
-ColorChooser.ok.textAndMnemonic=OK
-ColorChooser.cancel.textAndMnemonic=\u53D6\u6D88
-ColorChooser.reset.textAndMnemonic=\u30EA\u30BB\u30C3\u30C8(&R)
-ColorChooser.sample.textAndMnemonic=\u30B5\u30F3\u30D7\u30EB\u30FB\u30C6\u30AD\u30B9\u30C8  \u30B5\u30F3\u30D7\u30EB\u30FB\u30C6\u30AD\u30B9\u30C8
-ColorChooser.swatches.textAndMnemonic=\u30B5\u30F3\u30D7\u30EB(&S)
-ColorChooser.swatchesRecent.textAndMnemonic=\u6700\u65B0:
-ColorChooser.hsv.textAndMnemonic=HSV(&H)
-ColorChooser.hsvHue.textAndMnemonic=\u8272\u76F8
-ColorChooser.hsvSaturation.textAndMnemonic=\u5F69\u5EA6
-ColorChooser.hsvValue.textAndMnemonic=\u5024
-ColorChooser.hsvTransparency.textAndMnemonic=\u900F\u660E\u5EA6
-ColorChooser.hsl.textAndMnemonic=HSL(&L)
-ColorChooser.hslHue.textAndMnemonic=\u8272\u76F8
-ColorChooser.hslSaturation.textAndMnemonic=\u5F69\u5EA6
-ColorChooser.hslLightness.textAndMnemonic=\u660E\u5EA6
-ColorChooser.hslTransparency.textAndMnemonic=\u900F\u660E\u5EA6
-ColorChooser.rgb.textAndMnemonic=RGB(&G)
-ColorChooser.rgbRed.textAndMnemonic=\u8D64(&D)
-ColorChooser.rgbGreen.textAndMnemonic=\u7DD1(&N)
-ColorChooser.rgbBlue.textAndMnemonic=\u9752(&B)
-ColorChooser.rgbAlpha.textAndMnemonic=\u30A2\u30EB\u30D5\u30A1
-ColorChooser.rgbHexCode.textAndMnemonic=\u8272\u30B3\u30FC\u30C9(&C)
-ColorChooser.cmyk.textAndMnemonic=C&MYK
-ColorChooser.cmykCyan.textAndMnemonic=\u30B7\u30A2\u30F3
-ColorChooser.cmykMagenta.textAndMnemonic=\u30DE\u30BC\u30F3\u30BF
-ColorChooser.cmykYellow.textAndMnemonic=\u9EC4
-ColorChooser.cmykBlack.textAndMnemonic=\u9ED2
-ColorChooser.cmykAlpha.textAndMnemonic=\u30A2\u30EB\u30D5\u30A1
-
-############ OPTION PANE STRINGS #############
-# We only define mnemonics for YES/NO, but for completeness you can
-# define mnemonics for any of the buttons.
-OptionPane.yesButton.textAndMnemonic=\u306F\u3044(&Y)
-OptionPane.noButton.textAndMnemonic=\u3044\u3044\u3048(&N)
-OptionPane.okButton.textAndMnemonic=OK
-#OptionPane.okButtonMnemonic=0
-OptionPane.cancelButton.textAndMnemonic=\u53D6\u6D88
-#OptionPane.cancelButtonMnemonic=0
-OptionPane.title.textAndMnemonic=\u30AA\u30D7\u30B7\u30E7\u30F3\u306E\u9078\u629E
-# Title for the dialog for the showInputDialog methods. Only used if
-# the developer uses one of the variants that doesn't take a title.
-OptionPane.inputDialog.titleAndMnemonic=\u5165\u529B
-# Title for the dialog for the showMessageDialog methods. Only used if
-# the developer uses one of the variants that doesn't take a title.
-OptionPane.messageDialog.titleAndMnemonic=\u30E1\u30C3\u30BB\u30FC\u30B8
-
-############ Printing Dialog Strings ############
-PrintingDialog.titleProgress.textAndMnemonic=\u5370\u5237\u3057\u3066\u3044\u307E\u3059
-PrintingDialog.titleAborting.textAndMnemonic=\u5370\u5237\u3092\u4E2D\u6B62\u3057\u3066\u3044\u307E\u3059
-
-PrintingDialog.contentInitial.textAndMnemonic=\u5370\u5237\u4E2D...
-
-# The following string will be formatted by a MessageFormat
-# and {0} will be replaced by page number being printed
-PrintingDialog.contentProgress.textAndMnemonic=\u30DA\u30FC\u30B8{0}\u3092\u5370\u5237\u3057\u307E\u3057\u305F...
-
-PrintingDialog.contentAborting.textAndMnemonic=\u5370\u5237\u3092\u4E2D\u6B62\u3057\u3066\u3044\u307E\u3059...
-
-PrintingDialog.abortButton.textAndMnemonic=\u4E2D\u6B62(&A)
-PrintingDialog.abortButtonToolTip.textAndMnemonic=\u5370\u5237\u306E\u4E2D\u6B62
-
-############ Internal Frame Strings ############
-InternalFrame.iconButtonToolTip=\u6700\u5C0F\u5316
-InternalFrame.maxButtonToolTip=\u6700\u5927\u5316
-InternalFrame.restoreButtonToolTip=\u5FA9\u5143
-InternalFrame.closeButtonToolTip=\u9589\u3058\u308B
-
-############ Internal Frame Title Pane Strings ############
-InternalFrameTitlePane.restoreButton.textAndMnemonic=\u5FA9\u5143
-InternalFrameTitlePane.moveButton.textAndMnemonic=\u79FB\u52D5
-InternalFrameTitlePane.sizeButton.textAndMnemonic=\u30B5\u30A4\u30BA
-InternalFrameTitlePane.minimizeButton.textAndMnemonic=\u6700\u5C0F\u5316
-InternalFrameTitlePane.maximizeButton.textAndMnemonic=\u6700\u5927\u5316
-InternalFrameTitlePane.closeButton.textAndMnemonic=\u9589\u3058\u308B
-
-############ Text strings #############
-# Used for html forms
-FormView.submitButton.textAndMnemonic=\u554F\u5408\u305B\u306E\u5B9F\u884C
-FormView.resetButton.textAndMnemonic=\u30EA\u30BB\u30C3\u30C8
-FormView.browseFileButton.textAndMnemonic=\u53C2\u7167...
-
-############ Abstract Document Strings ############
-AbstractDocument.styleChange.textAndMnemonic=\u30B9\u30BF\u30A4\u30EB\u5909\u66F4
-AbstractDocument.addition.textAndMnemonic=\u8FFD\u52A0
-AbstractDocument.deletion.textAndMnemonic=\u524A\u9664
-AbstractDocument.undo.textAndMnemonic=\u5143\u306B\u623B\u3059
-AbstractDocument.redo.textAndMnemonic=\u3084\u308A\u76F4\u3057
-
-############ Abstract Button Strings ############
-AbstractButton.click.textAndMnemonic=\u30AF\u30EA\u30C3\u30AF
-
-############ Abstract Undoable Edit Strings ############
-AbstractUndoableEdit.undo.textAndMnemonic=\u5143\u306B\u623B\u3059
-AbstractUndoableEdit.redo.textAndMnemonic=\u3084\u308A\u76F4\u3057
-
-############ Combo Box Strings ############
-ComboBox.togglePopup.textAndMnemonic=\u30C8\u30B0\u30EB\u30FB\u30DD\u30C3\u30D7\u30A2\u30C3\u30D7
-
-############ Progress Monitor Strings ############
-ProgressMonitor.progress.textAndMnemonic=\u9032\u884C\u4E2D...
-
-############ Split Pane Strings ############
-SplitPane.leftButton.textAndMnemonic=\u5DE6\u30DC\u30BF\u30F3
-SplitPane.rightButton.textAndMnemonic=\u53F3\u30DC\u30BF\u30F3
-# Used for Isindex
-IsindexView.prompt=\u691C\u7D22\u7528\u306E\u7D22\u5F15\u3067\u3059\u3002\u691C\u7D22\u3059\u308B\u30AD\u30FC\u30EF\u30FC\u30C9\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044:
-
-############ InternalFrameTitlePane Strings ############
-InternalFrameTitlePane.iconifyButtonAccessibleName=\u30A2\u30A4\u30B3\u30F3\u5316
-InternalFrameTitlePane.maximizeButtonAccessibleName=\u6700\u5927\u5316
-InternalFrameTitlePane.closeButtonAccessibleName=\u9589\u3058\u308B
diff --git a/ojluni/src/main/java/com/sun/swing/internal/plaf/basic/resources/basic_ko.properties b/ojluni/src/main/java/com/sun/swing/internal/plaf/basic/resources/basic_ko.properties
deleted file mode 100755
index 86f0102..0000000
--- a/ojluni/src/main/java/com/sun/swing/internal/plaf/basic/resources/basic_ko.properties
+++ /dev/null
@@ -1,188 +0,0 @@
-# This properties file is used to create a PropertyResourceBundle
-# It contains Locale specific strings used in Swing
-# Currently, the following components need this for support:
-#
-#    ColorChooser
-#    FileChooser
-#    OptionPane
-#
-# When this file is read in, the strings are put into the
-# defaults table.  This is an implementation detail of the current
-# workings of Swing.  DO NOT DEPEND ON THIS.
-# This may change in future versions of Swing as we improve localization
-# support.
-#
-#                        MNEMONIC NOTE:
-# Many of strings in this file are used by widgets that have a
-# mnemonic, for example:
-#   ColorChooser.rgbNameTextAndMnemonic=R&GB
-#
-# Indicates that the tab in the ColorChooser for RGB colors will have
-# the text 'RGB', further the mnemonic character will be 'g' and that
-# a decoration will be provided under the 'G'. This will typically
-# look like:  RGB
-#              -
-#
-# One important thing to remember is that the mnemonic MUST exist in
-# the String, if it does not exist you should add text that makes it
-# exist. This will typically take the form 'XXXX (M)' where M is the
-# character for the mnemonic.
-#
-# @author Steve Wilson
-
-############ FILE CHOOSER STRINGS #############
-FileChooser.fileDescription.textAndMnemonic=\uC77C\uBC18 \uD30C\uC77C
-FileChooser.directoryDescription.textAndMnemonic=\uB514\uB809\uD1A0\uB9AC
-FileChooser.newFolderError.textAndMnemonic=\uC0C8 \uD3F4\uB354\uB97C \uC0DD\uC131\uD558\uB294 \uC911 \uC624\uB958\uAC00 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4.
-FileChooser.newFolderErrorSeparator= :
-FileChooser.newFolderParentDoesntExistTitle.textAndMnemonic=\uD3F4\uB354\uB97C \uC0DD\uC131\uD560 \uC218 \uC5C6\uC74C
-FileChooser.newFolderParentDoesntExist.textAndMnemonic=\uD3F4\uB354\uB97C \uC0DD\uC131\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.\n\n\uC2DC\uC2A4\uD15C\uC5D0\uC11C \uC9C0\uC815\uB41C \uACBD\uB85C\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.
-FileChooser.renameErrorTitle.textAndMnemonic=\uD30C\uC77C \uB610\uB294 \uD3F4\uB354 \uC774\uB984 \uBC14\uAFB8\uB294 \uC911 \uC624\uB958 \uBC1C\uC0DD
-FileChooser.renameError.textAndMnemonic={0}\uC758 \uC774\uB984\uC744 \uBC14\uAFC0 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.
-FileChooser.renameErrorFileExists.textAndMnemonic={0}\uC758 \uC774\uB984\uC744 \uBC14\uAFC0 \uC218 \uC5C6\uC74C: \uC9C0\uC815\uD55C \uC774\uB984\uC744 \uC0AC\uC6A9\uD558\uB294 \uD30C\uC77C\uC774 \uC874\uC7AC\uD569\uB2C8\uB2E4. \uB2E4\uB978 \uD30C\uC77C \uC774\uB984\uC744 \uC9C0\uC815\uD558\uC2ED\uC2DC\uC624.
-FileChooser.acceptAllFileFilter.textAndMnemonic=\uBAA8\uB4E0 \uD30C\uC77C
-FileChooser.cancelButton.textAndMnemonic=\uCDE8\uC18C
-FileChooser.saveButton.textAndMnemonic=\uC800\uC7A5(&S)
-FileChooser.openButton.textAndMnemonic=\uC5F4\uAE30(&O)
-FileChooser.saveDialogTitle.textAndMnemonic=\uC800\uC7A5
-FileChooser.openDialogTitle.textAndMnemonic=\uC5F4\uAE30
-FileChooser.updateButton.textAndMnemonic=\uAC31\uC2E0(&U)
-FileChooser.helpButton.textAndMnemonic=\uB3C4\uC6C0\uB9D0(&H)
-FileChooser.directoryOpenButton.textAndMnemonic=\uC5F4\uAE30(&O)
-
-# File Size Units
-FileChooser.fileSizeKiloBytes={0} KB
-FileChooser.fileSizeMegaBytes={0} MB
-FileChooser.fileSizeGigaBytes={0} GB
-
-# These strings are platform dependent not look and feel dependent.
-FileChooser.win32.newFolder=\uC0C8 \uD3F4\uB354
-FileChooser.win32.newFolder.subsequent=\uC0C8 \uD3F4\uB354({0})
-FileChooser.other.newFolder=NewFolder
-FileChooser.other.newFolder.subsequent=NewFolder.{0}
-
-
-## file chooser tooltips ###
-FileChooser.cancelButtonToolTip.textAndMnemonic=\uD30C\uC77C \uC120\uD0DD\uAE30 \uB300\uD654\uC0C1\uC790 \uC911\uB2E8
-FileChooser.saveButtonToolTip.textAndMnemonic=\uC120\uD0DD\uB41C \uD30C\uC77C \uC800\uC7A5
-FileChooser.openButtonToolTip.textAndMnemonic=\uC120\uD0DD\uB41C \uD30C\uC77C \uC5F4\uAE30
-FileChooser.updateButtonToolTip.textAndMnemonic=\uB514\uB809\uD1A0\uB9AC \uBAA9\uB85D \uAC31\uC2E0
-FileChooser.helpButtonToolTip.textAndMnemonic=FileChooser \uB3C4\uC6C0\uB9D0
-FileChooser.directoryOpenButtonToolTip.textAndMnemonic=\uC120\uD0DD\uB41C \uB514\uB809\uD1A0\uB9AC \uC5F4\uAE30
-
-FileChooser.filesListAccessibleName=\uD30C\uC77C \uBAA9\uB85D
-FileChooser.filesDetailsAccessibleName=\uD30C\uC77C \uC138\uBD80 \uC815\uBCF4
-
-############ COLOR CHOOSER STRINGS #############
-ColorChooser.preview.textAndMnemonic=\uBBF8\uB9AC\uBCF4\uAE30
-ColorChooser.ok.textAndMnemonic=\uD655\uC778
-ColorChooser.cancel.textAndMnemonic=\uCDE8\uC18C
-ColorChooser.reset.textAndMnemonic=\uC7AC\uC124\uC815(&R)
-ColorChooser.sample.textAndMnemonic=\uC0D8\uD50C \uD14D\uC2A4\uD2B8  \uC0D8\uD50C \uD14D\uC2A4\uD2B8
-ColorChooser.swatches.textAndMnemonic=\uACAC\uBCF8(&S)
-ColorChooser.swatchesRecent.textAndMnemonic=\uCD5C\uADFC \uBAA9\uB85D:
-ColorChooser.hsv.textAndMnemonic=HSV(&H)
-ColorChooser.hsvHue.textAndMnemonic=\uC0C9\uC870
-ColorChooser.hsvSaturation.textAndMnemonic=\uCC44\uB3C4
-ColorChooser.hsvValue.textAndMnemonic=\uAC12
-ColorChooser.hsvTransparency.textAndMnemonic=\uD22C\uBA85
-ColorChooser.hsl.textAndMnemonic=HSL(&L)
-ColorChooser.hslHue.textAndMnemonic=\uC0C9\uC870
-ColorChooser.hslSaturation.textAndMnemonic=\uCC44\uB3C4
-ColorChooser.hslLightness.textAndMnemonic=\uBC1D\uAE30
-ColorChooser.hslTransparency.textAndMnemonic=\uD22C\uBA85
-ColorChooser.rgb.textAndMnemonic=RGB(&G)
-ColorChooser.rgbRed.textAndMnemonic=\uBE68\uAC04\uC0C9(&D)
-ColorChooser.rgbGreen.textAndMnemonic=\uB179\uC0C9(&N)
-ColorChooser.rgbBlue.textAndMnemonic=\uD30C\uB780\uC0C9(&B)
-ColorChooser.rgbAlpha.textAndMnemonic=\uC54C\uD30C
-ColorChooser.rgbHexCode.textAndMnemonic=\uC0C9\uC0C1 \uCF54\uB4DC(&C)
-ColorChooser.cmyk.textAndMnemonic=C&MYK
-ColorChooser.cmykCyan.textAndMnemonic=\uCCAD\uB85D\uC0C9
-ColorChooser.cmykMagenta.textAndMnemonic=\uC9C4\uD64D\uC0C9
-ColorChooser.cmykYellow.textAndMnemonic=\uB178\uB780\uC0C9
-ColorChooser.cmykBlack.textAndMnemonic=\uAC80\uC815\uC0C9
-ColorChooser.cmykAlpha.textAndMnemonic=\uC54C\uD30C
-
-############ OPTION PANE STRINGS #############
-# We only define mnemonics for YES/NO, but for completeness you can
-# define mnemonics for any of the buttons.
-OptionPane.yesButton.textAndMnemonic=\uC608(&Y)
-OptionPane.noButton.textAndMnemonic=\uC544\uB2C8\uC624(&N)
-OptionPane.okButton.textAndMnemonic=\uD655\uC778
-#OptionPane.okButtonMnemonic=0
-OptionPane.cancelButton.textAndMnemonic=\uCDE8\uC18C
-#OptionPane.cancelButtonMnemonic=0
-OptionPane.title.textAndMnemonic=\uC635\uC158 \uC120\uD0DD
-# Title for the dialog for the showInputDialog methods. Only used if
-# the developer uses one of the variants that doesn't take a title.
-OptionPane.inputDialog.titleAndMnemonic=\uC785\uB825
-# Title for the dialog for the showMessageDialog methods. Only used if
-# the developer uses one of the variants that doesn't take a title.
-OptionPane.messageDialog.titleAndMnemonic=\uBA54\uC2DC\uC9C0
-
-############ Printing Dialog Strings ############
-PrintingDialog.titleProgress.textAndMnemonic=\uC778\uC1C4
-PrintingDialog.titleAborting.textAndMnemonic=\uC778\uC1C4(\uC911\uB2E8 \uC911)
-
-PrintingDialog.contentInitial.textAndMnemonic=\uC778\uC1C4 \uC9C4\uD589 \uC911...
-
-# The following string will be formatted by a MessageFormat
-# and {0} will be replaced by page number being printed
-PrintingDialog.contentProgress.textAndMnemonic=\uC778\uC1C4\uB41C \uD398\uC774\uC9C0 {0}...
-
-PrintingDialog.contentAborting.textAndMnemonic=\uC778\uC1C4 \uC911\uB2E8 \uC911...
-
-PrintingDialog.abortButton.textAndMnemonic=\uC911\uB2E8(&A)
-PrintingDialog.abortButtonToolTip.textAndMnemonic=\uC778\uC1C4 \uC911\uB2E8
-
-############ Internal Frame Strings ############
-InternalFrame.iconButtonToolTip=\uCD5C\uC18C\uD654
-InternalFrame.maxButtonToolTip=\uCD5C\uB300\uD654
-InternalFrame.restoreButtonToolTip=\uBCF5\uC6D0
-InternalFrame.closeButtonToolTip=\uB2EB\uAE30
-
-############ Internal Frame Title Pane Strings ############
-InternalFrameTitlePane.restoreButton.textAndMnemonic=\uBCF5\uC6D0
-InternalFrameTitlePane.moveButton.textAndMnemonic=\uC774\uB3D9
-InternalFrameTitlePane.sizeButton.textAndMnemonic=\uD06C\uAE30
-InternalFrameTitlePane.minimizeButton.textAndMnemonic=\uCD5C\uC18C\uD654
-InternalFrameTitlePane.maximizeButton.textAndMnemonic=\uCD5C\uB300\uD654
-InternalFrameTitlePane.closeButton.textAndMnemonic=\uB2EB\uAE30
-
-############ Text strings #############
-# Used for html forms
-FormView.submitButton.textAndMnemonic=\uC9C8\uC758 \uC81C\uCD9C
-FormView.resetButton.textAndMnemonic=\uC7AC\uC124\uC815
-FormView.browseFileButton.textAndMnemonic=\uCC3E\uC544\uBCF4\uAE30...
-
-############ Abstract Document Strings ############
-AbstractDocument.styleChange.textAndMnemonic=\uC2A4\uD0C0\uC77C \uBCC0\uACBD
-AbstractDocument.addition.textAndMnemonic=\uCD94\uAC00
-AbstractDocument.deletion.textAndMnemonic=\uC0AD\uC81C
-AbstractDocument.undo.textAndMnemonic=\uC2E4\uD589 \uCDE8\uC18C
-AbstractDocument.redo.textAndMnemonic=\uC7AC\uC2E4\uD589
-
-############ Abstract Button Strings ############
-AbstractButton.click.textAndMnemonic=\uB204\uB974\uAE30
-
-############ Abstract Undoable Edit Strings ############
-AbstractUndoableEdit.undo.textAndMnemonic=\uC2E4\uD589 \uCDE8\uC18C
-AbstractUndoableEdit.redo.textAndMnemonic=\uC7AC\uC2E4\uD589
-
-############ Combo Box Strings ############
-ComboBox.togglePopup.textAndMnemonic=togglePopup
-
-############ Progress Monitor Strings ############
-ProgressMonitor.progress.textAndMnemonic=\uC9C4\uD589...
-
-############ Split Pane Strings ############
-SplitPane.leftButton.textAndMnemonic=\uC67C\uCABD \uB2E8\uCD94
-SplitPane.rightButton.textAndMnemonic=\uC624\uB978\uCABD \uB2E8\uCD94
-# Used for Isindex
-IsindexView.prompt=\uB2E4\uC74C\uC740 \uAC80\uC0C9 \uAC00\uB2A5\uD55C \uC778\uB371\uC2A4\uC785\uB2C8\uB2E4. \uAC80\uC0C9 \uD0A4\uC6CC\uB4DC \uC785\uB825:
-
-############ InternalFrameTitlePane Strings ############
-InternalFrameTitlePane.iconifyButtonAccessibleName=\uC544\uC774\uCF58\uD654
-InternalFrameTitlePane.maximizeButtonAccessibleName=\uCD5C\uB300\uD654
-InternalFrameTitlePane.closeButtonAccessibleName=\uB2EB\uAE30
diff --git a/ojluni/src/main/java/com/sun/swing/internal/plaf/basic/resources/basic_pt_BR.properties b/ojluni/src/main/java/com/sun/swing/internal/plaf/basic/resources/basic_pt_BR.properties
deleted file mode 100755
index 61b4e12..0000000
--- a/ojluni/src/main/java/com/sun/swing/internal/plaf/basic/resources/basic_pt_BR.properties
+++ /dev/null
@@ -1,188 +0,0 @@
-# This properties file is used to create a PropertyResourceBundle
-# It contains Locale specific strings used in Swing
-# Currently, the following components need this for support:
-#
-#    ColorChooser
-#    FileChooser
-#    OptionPane
-#
-# When this file is read in, the strings are put into the
-# defaults table.  This is an implementation detail of the current
-# workings of Swing.  DO NOT DEPEND ON THIS.
-# This may change in future versions of Swing as we improve localization
-# support.
-#
-#                        MNEMONIC NOTE:
-# Many of strings in this file are used by widgets that have a
-# mnemonic, for example:
-#   ColorChooser.rgbNameTextAndMnemonic=R&GB
-#
-# Indicates that the tab in the ColorChooser for RGB colors will have
-# the text 'RGB', further the mnemonic character will be 'g' and that
-# a decoration will be provided under the 'G'. This will typically
-# look like:  RGB
-#              -
-#
-# One important thing to remember is that the mnemonic MUST exist in
-# the String, if it does not exist you should add text that makes it
-# exist. This will typically take the form 'XXXX (M)' where M is the
-# character for the mnemonic.
-#
-# @author Steve Wilson
-
-############ FILE CHOOSER STRINGS #############
-FileChooser.fileDescription.textAndMnemonic=Arquivo Gen\u00E9rico
-FileChooser.directoryDescription.textAndMnemonic=Diret\u00F3rio
-FileChooser.newFolderError.textAndMnemonic=Erro ao criar nova pasta
-FileChooser.newFolderErrorSeparator= :
-FileChooser.newFolderParentDoesntExistTitle.textAndMnemonic=N\u00E3o \u00E9 poss\u00EDvel criar a pasta
-FileChooser.newFolderParentDoesntExist.textAndMnemonic=N\u00E3o \u00E9 poss\u00EDvel criar a pasta.\n\nO sistema n\u00E3o pode localizar o caminho especificado.
-FileChooser.renameErrorTitle.textAndMnemonic=Erro ao Renomear o Arquivo ou a Pasta
-FileChooser.renameError.textAndMnemonic=N\u00E3o \u00E9 poss\u00EDvel renomear {0}
-FileChooser.renameErrorFileExists.textAndMnemonic=N\u00E3o \u00E9 poss\u00EDvel renomear {0}: Um arquivo com o nome especificado j\u00E1 existe. Especifique outro nome de arquivo.
-FileChooser.acceptAllFileFilter.textAndMnemonic=Todos os Arquivos
-FileChooser.cancelButton.textAndMnemonic=Cancelar
-FileChooser.saveButton.textAndMnemonic=&Salvar
-FileChooser.openButton.textAndMnemonic=A&brir
-FileChooser.saveDialogTitle.textAndMnemonic=Salvar
-FileChooser.openDialogTitle.textAndMnemonic=Abrir
-FileChooser.updateButton.textAndMnemonic=At&ualizar
-FileChooser.helpButton.textAndMnemonic=Aj&uda
-FileChooser.directoryOpenButton.textAndMnemonic=A&brir
-
-# File Size Units
-FileChooser.fileSizeKiloBytes={0} KB
-FileChooser.fileSizeMegaBytes={0} MB
-FileChooser.fileSizeGigaBytes={0} GB
-
-# These strings are platform dependent not look and feel dependent.
-FileChooser.win32.newFolder=Nova Pasta
-FileChooser.win32.newFolder.subsequent=Nova Pasta ({0})
-FileChooser.other.newFolder=NewFolder
-FileChooser.other.newFolder.subsequent=NewFolder.{0}
-
-
-## file chooser tooltips ###
-FileChooser.cancelButtonToolTip.textAndMnemonic=Abortar caixa de di\u00E1logo do seletor de arquivos
-FileChooser.saveButtonToolTip.textAndMnemonic=Salvar arquivo selecionado
-FileChooser.openButtonToolTip.textAndMnemonic=Abrir arquivo selecionado
-FileChooser.updateButtonToolTip.textAndMnemonic=Atualizar lista de diret\u00F3rios
-FileChooser.helpButtonToolTip.textAndMnemonic=Ajuda do FileChooser
-FileChooser.directoryOpenButtonToolTip.textAndMnemonic=Abrir diret\u00F3rio selecionado
-
-FileChooser.filesListAccessibleName=Lista de Arquivos
-FileChooser.filesDetailsAccessibleName=Detalhes do Arquivo
-
-############ COLOR CHOOSER STRINGS #############
-ColorChooser.preview.textAndMnemonic=Visualizar
-ColorChooser.ok.textAndMnemonic=OK
-ColorChooser.cancel.textAndMnemonic=Cancelar
-ColorChooser.reset.textAndMnemonic=&Redefinir
-ColorChooser.sample.textAndMnemonic=Texto de Amostra Texto de Amostra
-ColorChooser.swatches.textAndMnemonic=Amo&stras
-ColorChooser.swatchesRecent.textAndMnemonic=Recente:
-ColorChooser.hsv.textAndMnemonic=&HSV
-ColorChooser.hsvHue.textAndMnemonic=Matiz
-ColorChooser.hsvSaturation.textAndMnemonic=Satura\u00E7\u00E3o
-ColorChooser.hsvValue.textAndMnemonic=Valor
-ColorChooser.hsvTransparency.textAndMnemonic=Transpar\u00EAncia
-ColorChooser.hsl.textAndMnemonic=HS&L
-ColorChooser.hslHue.textAndMnemonic=Matiz
-ColorChooser.hslSaturation.textAndMnemonic=Satura\u00E7\u00E3o
-ColorChooser.hslLightness.textAndMnemonic=Clareza
-ColorChooser.hslTransparency.textAndMnemonic=Transpar\u00EAncia
-ColorChooser.rgb.textAndMnemonic=R&GB
-ColorChooser.rgbRed.textAndMnemonic=&Vermelho
-ColorChooser.rgbGreen.textAndMnemonic=&Verde
-ColorChooser.rgbBlue.textAndMnemonic=&Azul
-ColorChooser.rgbAlpha.textAndMnemonic=Alfa
-ColorChooser.rgbHexCode.textAndMnemonic=&C\u00F3digo da Cor
-ColorChooser.cmyk.textAndMnemonic=C&MYK
-ColorChooser.cmykCyan.textAndMnemonic=Ciano
-ColorChooser.cmykMagenta.textAndMnemonic=Magenta
-ColorChooser.cmykYellow.textAndMnemonic=Amarelo
-ColorChooser.cmykBlack.textAndMnemonic=Preto
-ColorChooser.cmykAlpha.textAndMnemonic=Alfa
-
-############ OPTION PANE STRINGS #############
-# We only define mnemonics for YES/NO, but for completeness you can
-# define mnemonics for any of the buttons.
-OptionPane.yesButton.textAndMnemonic=&Sim
-OptionPane.noButton.textAndMnemonic=&N\u00E3o
-OptionPane.okButton.textAndMnemonic=OK
-#OptionPane.okButtonMnemonic=0
-OptionPane.cancelButton.textAndMnemonic=Cancelar
-#OptionPane.cancelButtonMnemonic=0
-OptionPane.title.textAndMnemonic=Selecionar uma Op\u00E7\u00E3o
-# Title for the dialog for the showInputDialog methods. Only used if
-# the developer uses one of the variants that doesn't take a title.
-OptionPane.inputDialog.titleAndMnemonic=Entrada
-# Title for the dialog for the showMessageDialog methods. Only used if
-# the developer uses one of the variants that doesn't take a title.
-OptionPane.messageDialog.titleAndMnemonic=Mensagem
-
-############ Printing Dialog Strings ############
-PrintingDialog.titleProgress.textAndMnemonic=Impress\u00E3o
-PrintingDialog.titleAborting.textAndMnemonic=Impress\u00E3o (Abortando)
-
-PrintingDialog.contentInitial.textAndMnemonic=Impress\u00E3o em andamento...
-
-# The following string will be formatted by a MessageFormat
-# and {0} will be replaced by page number being printed
-PrintingDialog.contentProgress.textAndMnemonic=P\u00E1gina impressa {0}...
-
-PrintingDialog.contentAborting.textAndMnemonic=Abortando impress\u00E3o...
-
-PrintingDialog.abortButton.textAndMnemonic=&Abortar
-PrintingDialog.abortButtonToolTip.textAndMnemonic=Abortar Impress\u00E3o
-
-############ Internal Frame Strings ############
-InternalFrame.iconButtonToolTip=Minimizar
-InternalFrame.maxButtonToolTip=Maximizar
-InternalFrame.restoreButtonToolTip=Restaurar
-InternalFrame.closeButtonToolTip=Fechar
-
-############ Internal Frame Title Pane Strings ############
-InternalFrameTitlePane.restoreButton.textAndMnemonic=Restaurar
-InternalFrameTitlePane.moveButton.textAndMnemonic=Mover
-InternalFrameTitlePane.sizeButton.textAndMnemonic=Tamanho
-InternalFrameTitlePane.minimizeButton.textAndMnemonic=Minimizar
-InternalFrameTitlePane.maximizeButton.textAndMnemonic=Maximizar
-InternalFrameTitlePane.closeButton.textAndMnemonic=Fechar
-
-############ Text strings #############
-# Used for html forms
-FormView.submitButton.textAndMnemonic=Submeter Consulta
-FormView.resetButton.textAndMnemonic=Redefinir
-FormView.browseFileButton.textAndMnemonic=Procurar...
-
-############ Abstract Document Strings ############
-AbstractDocument.styleChange.textAndMnemonic=altera\u00E7\u00E3o de estilo
-AbstractDocument.addition.textAndMnemonic=adi\u00E7\u00E3o
-AbstractDocument.deletion.textAndMnemonic=exclus\u00E3o
-AbstractDocument.undo.textAndMnemonic=Desfazer
-AbstractDocument.redo.textAndMnemonic=Refazer
-
-############ Abstract Button Strings ############
-AbstractButton.click.textAndMnemonic=clicar
-
-############ Abstract Undoable Edit Strings ############
-AbstractUndoableEdit.undo.textAndMnemonic=Desfazer
-AbstractUndoableEdit.redo.textAndMnemonic=Refazer
-
-############ Combo Box Strings ############
-ComboBox.togglePopup.textAndMnemonic=togglePopup
-
-############ Progress Monitor Strings ############
-ProgressMonitor.progress.textAndMnemonic=Andamento...
-
-############ Split Pane Strings ############
-SplitPane.leftButton.textAndMnemonic=bot\u00E3o esquerdo
-SplitPane.rightButton.textAndMnemonic=bot\u00E3o direito
-# Used for Isindex
-IsindexView.prompt=Trata-se de um \u00EDndice pesquis\u00E1vel. Informe as palavras-chave de pesquisa:
-
-############ InternalFrameTitlePane Strings ############
-InternalFrameTitlePane.iconifyButtonAccessibleName=Iconizar
-InternalFrameTitlePane.maximizeButtonAccessibleName=Maximizar
-InternalFrameTitlePane.closeButtonAccessibleName=Fechar
diff --git a/ojluni/src/main/java/com/sun/swing/internal/plaf/basic/resources/basic_sv.properties b/ojluni/src/main/java/com/sun/swing/internal/plaf/basic/resources/basic_sv.properties
deleted file mode 100755
index 2d40e3c..0000000
--- a/ojluni/src/main/java/com/sun/swing/internal/plaf/basic/resources/basic_sv.properties
+++ /dev/null
@@ -1,188 +0,0 @@
-# This properties file is used to create a PropertyResourceBundle
-# It contains Locale specific strings used in Swing
-# Currently, the following components need this for support:
-#
-#    ColorChooser
-#    FileChooser
-#    OptionPane
-#
-# When this file is read in, the strings are put into the
-# defaults table.  This is an implementation detail of the current
-# workings of Swing.  DO NOT DEPEND ON THIS.
-# This may change in future versions of Swing as we improve localization
-# support.
-#
-#                        MNEMONIC NOTE:
-# Many of strings in this file are used by widgets that have a
-# mnemonic, for example:
-#   ColorChooser.rgbNameTextAndMnemonic=R&GB
-#
-# Indicates that the tab in the ColorChooser for RGB colors will have
-# the text 'RGB', further the mnemonic character will be 'g' and that
-# a decoration will be provided under the 'G'. This will typically
-# look like:  RGB
-#              -
-#
-# One important thing to remember is that the mnemonic MUST exist in
-# the String, if it does not exist you should add text that makes it
-# exist. This will typically take the form 'XXXX (M)' where M is the
-# character for the mnemonic.
-#
-# @author Steve Wilson
-
-############ FILE CHOOSER STRINGS #############
-FileChooser.fileDescription.textAndMnemonic=Generisk fil
-FileChooser.directoryDescription.textAndMnemonic=Katalog
-FileChooser.newFolderError.textAndMnemonic=Fel uppstod n\u00E4r ny mapp skapades
-FileChooser.newFolderErrorSeparator= :
-FileChooser.newFolderParentDoesntExistTitle.textAndMnemonic=Kan inte skapa mappen
-FileChooser.newFolderParentDoesntExist.textAndMnemonic=Kan inte skapa mappen.\n\nSystemet kan inte hitta angiven s\u00F6kv\u00E4g.
-FileChooser.renameErrorTitle.textAndMnemonic=Ett fel intr\u00E4ffade vid f\u00F6rs\u00F6k att \u00E4ndra namn p\u00E5 fil eller mapp
-FileChooser.renameError.textAndMnemonic=Kan inte namn\u00E4ndra {0}
-FileChooser.renameErrorFileExists.textAndMnemonic=Kan inte namn\u00E4ndra {0}: En fil med angivet namn finns redan. Ange ett annat filnamn. 
-FileChooser.acceptAllFileFilter.textAndMnemonic=Alla filer
-FileChooser.cancelButton.textAndMnemonic=Avbryt
-FileChooser.saveButton.textAndMnemonic=&Spara
-FileChooser.openButton.textAndMnemonic=&\u00D6ppna
-FileChooser.saveDialogTitle.textAndMnemonic=Spara
-FileChooser.openDialogTitle.textAndMnemonic=\u00D6ppna
-FileChooser.updateButton.textAndMnemonic=Upp&datera
-FileChooser.helpButton.textAndMnemonic=&Hj\u00E4lp
-FileChooser.directoryOpenButton.textAndMnemonic=&\u00D6ppna
-
-# File Size Units
-FileChooser.fileSizeKiloBytes={0} KB
-FileChooser.fileSizeMegaBytes={0} MB
-FileChooser.fileSizeGigaBytes={0} GB
-
-# These strings are platform dependent not look and feel dependent.
-FileChooser.win32.newFolder=Ny mapp
-FileChooser.win32.newFolder.subsequent=Ny mapp ({0})
-FileChooser.other.newFolder=Ny mapp
-FileChooser.other.newFolder.subsequent=Ny mapp.{0}
-
-
-## file chooser tooltips ###
-FileChooser.cancelButtonToolTip.textAndMnemonic=Avbryt filvalsdialogruta
-FileChooser.saveButtonToolTip.textAndMnemonic=Spara vald fil
-FileChooser.openButtonToolTip.textAndMnemonic=\u00D6ppna vald fil
-FileChooser.updateButtonToolTip.textAndMnemonic=Uppdatera kataloglistan
-FileChooser.helpButtonToolTip.textAndMnemonic=Hj\u00E4lp - Filv\u00E4ljare
-FileChooser.directoryOpenButtonToolTip.textAndMnemonic=\u00D6ppna vald katalog
-
-FileChooser.filesListAccessibleName=Fillista
-FileChooser.filesDetailsAccessibleName=Fildetaljer
-
-############ COLOR CHOOSER STRINGS #############
-ColorChooser.preview.textAndMnemonic=Granska
-ColorChooser.ok.textAndMnemonic=OK
-ColorChooser.cancel.textAndMnemonic=Avbryt
-ColorChooser.reset.textAndMnemonic=&\u00C5terst\u00E4ll
-ColorChooser.sample.textAndMnemonic=Exempeltext  Exempeltext
-ColorChooser.swatches.textAndMnemonic=&Prov
-ColorChooser.swatchesRecent.textAndMnemonic=Senaste:
-ColorChooser.hsv.textAndMnemonic=&HSV
-ColorChooser.hsvHue.textAndMnemonic=Nyans
-ColorChooser.hsvSaturation.textAndMnemonic=M\u00E4ttnad
-ColorChooser.hsvValue.textAndMnemonic=V\u00E4rde
-ColorChooser.hsvTransparency.textAndMnemonic=Transparens
-ColorChooser.hsl.textAndMnemonic=HS&L
-ColorChooser.hslHue.textAndMnemonic=Nyans
-ColorChooser.hslSaturation.textAndMnemonic=M\u00E4ttnad
-ColorChooser.hslLightness.textAndMnemonic=Ljusstyrka
-ColorChooser.hslTransparency.textAndMnemonic=Transparens
-ColorChooser.rgb.textAndMnemonic=R&GB
-ColorChooser.rgbRed.textAndMnemonic=R\u00F6&d
-ColorChooser.rgbGreen.textAndMnemonic=Gr\u00F6&n
-ColorChooser.rgbBlue.textAndMnemonic=&Bl\u00E5
-ColorChooser.rgbAlpha.textAndMnemonic=Alfa
-ColorChooser.rgbHexCode.textAndMnemonic=&F\u00E4rgkod
-ColorChooser.cmyk.textAndMnemonic=C&MYK
-ColorChooser.cmykCyan.textAndMnemonic=Cyan
-ColorChooser.cmykMagenta.textAndMnemonic=Magenta
-ColorChooser.cmykYellow.textAndMnemonic=Gul
-ColorChooser.cmykBlack.textAndMnemonic=Svart
-ColorChooser.cmykAlpha.textAndMnemonic=Alfa
-
-############ OPTION PANE STRINGS #############
-# We only define mnemonics for YES/NO, but for completeness you can
-# define mnemonics for any of the buttons.
-OptionPane.yesButton.textAndMnemonic=&Ja
-OptionPane.noButton.textAndMnemonic=&Nej
-OptionPane.okButton.textAndMnemonic=OK
-#OptionPane.okButtonMnemonic=0
-OptionPane.cancelButton.textAndMnemonic=Avbryt
-#OptionPane.cancelButtonMnemonic=0
-OptionPane.title.textAndMnemonic=V\u00E4lj ett alternativ
-# Title for the dialog for the showInputDialog methods. Only used if
-# the developer uses one of the variants that doesn't take a title.
-OptionPane.inputDialog.titleAndMnemonic=Indata
-# Title for the dialog for the showMessageDialog methods. Only used if
-# the developer uses one of the variants that doesn't take a title.
-OptionPane.messageDialog.titleAndMnemonic=Meddelande
-
-############ Printing Dialog Strings ############
-PrintingDialog.titleProgress.textAndMnemonic=Skriver ut
-PrintingDialog.titleAborting.textAndMnemonic=Skriver ut (avbryter)
-
-PrintingDialog.contentInitial.textAndMnemonic=Utskrift p\u00E5g\u00E5r...
-
-# The following string will be formatted by a MessageFormat
-# and {0} will be replaced by page number being printed
-PrintingDialog.contentProgress.textAndMnemonic=Utskriven sida {0}...
-
-PrintingDialog.contentAborting.textAndMnemonic=Utskriften avbryts...
-
-PrintingDialog.abortButton.textAndMnemonic=&Avbryt
-PrintingDialog.abortButtonToolTip.textAndMnemonic=Avbryt utskrift
-
-############ Internal Frame Strings ############
-InternalFrame.iconButtonToolTip=Minimera
-InternalFrame.maxButtonToolTip=Maximera
-InternalFrame.restoreButtonToolTip=\u00C5terst\u00E4ll
-InternalFrame.closeButtonToolTip=St\u00E4ng
-
-############ Internal Frame Title Pane Strings ############
-InternalFrameTitlePane.restoreButton.textAndMnemonic=\u00C5terst\u00E4ll
-InternalFrameTitlePane.moveButton.textAndMnemonic=Flytta
-InternalFrameTitlePane.sizeButton.textAndMnemonic=Storlek
-InternalFrameTitlePane.minimizeButton.textAndMnemonic=Minimera
-InternalFrameTitlePane.maximizeButton.textAndMnemonic=Maximera
-InternalFrameTitlePane.closeButton.textAndMnemonic=St\u00E4ng
-
-############ Text strings #############
-# Used for html forms
-FormView.submitButton.textAndMnemonic=Skicka fr\u00E5ga
-FormView.resetButton.textAndMnemonic=\u00C5terst\u00E4ll
-FormView.browseFileButton.textAndMnemonic=Bl\u00E4ddra...
-
-############ Abstract Document Strings ############
-AbstractDocument.styleChange.textAndMnemonic=format\u00E4ndring
-AbstractDocument.addition.textAndMnemonic=till\u00E4gg
-AbstractDocument.deletion.textAndMnemonic=borttagning
-AbstractDocument.undo.textAndMnemonic=\u00C5ngra
-AbstractDocument.redo.textAndMnemonic=G\u00F6r om
-
-############ Abstract Button Strings ############
-AbstractButton.click.textAndMnemonic=klicka
-
-############ Abstract Undoable Edit Strings ############
-AbstractUndoableEdit.undo.textAndMnemonic=\u00C5ngra
-AbstractUndoableEdit.redo.textAndMnemonic=G\u00F6r om
-
-############ Combo Box Strings ############
-ComboBox.togglePopup.textAndMnemonic=v\u00E4xlaPopup
-
-############ Progress Monitor Strings ############
-ProgressMonitor.progress.textAndMnemonic=P\u00E5g\u00E5r...
-
-############ Split Pane Strings ############
-SplitPane.leftButton.textAndMnemonic=v\u00E4nster knapp
-SplitPane.rightButton.textAndMnemonic=h\u00F6ger knapp
-# Used for Isindex
-IsindexView.prompt=Detta \u00E4r ett s\u00F6kbart index. Ange s\u00F6kord:
-
-############ InternalFrameTitlePane Strings ############
-InternalFrameTitlePane.iconifyButtonAccessibleName=Minimera
-InternalFrameTitlePane.maximizeButtonAccessibleName=Maximera
-InternalFrameTitlePane.closeButtonAccessibleName=St\u00E4ng
diff --git a/ojluni/src/main/java/com/sun/swing/internal/plaf/basic/resources/basic_zh_CN.properties b/ojluni/src/main/java/com/sun/swing/internal/plaf/basic/resources/basic_zh_CN.properties
deleted file mode 100755
index 4db5d18..0000000
--- a/ojluni/src/main/java/com/sun/swing/internal/plaf/basic/resources/basic_zh_CN.properties
+++ /dev/null
@@ -1,188 +0,0 @@
-# This properties file is used to create a PropertyResourceBundle
-# It contains Locale specific strings used in Swing
-# Currently, the following components need this for support:
-#
-#    ColorChooser
-#    FileChooser
-#    OptionPane
-#
-# When this file is read in, the strings are put into the
-# defaults table.  This is an implementation detail of the current
-# workings of Swing.  DO NOT DEPEND ON THIS.
-# This may change in future versions of Swing as we improve localization
-# support.
-#
-#                        MNEMONIC NOTE:
-# Many of strings in this file are used by widgets that have a
-# mnemonic, for example:
-#   ColorChooser.rgbNameTextAndMnemonic=R&GB
-#
-# Indicates that the tab in the ColorChooser for RGB colors will have
-# the text 'RGB', further the mnemonic character will be 'g' and that
-# a decoration will be provided under the 'G'. This will typically
-# look like:  RGB
-#              -
-#
-# One important thing to remember is that the mnemonic MUST exist in
-# the String, if it does not exist you should add text that makes it
-# exist. This will typically take the form 'XXXX (M)' where M is the
-# character for the mnemonic.
-#
-# @author Steve Wilson
-
-############ FILE CHOOSER STRINGS #############
-FileChooser.fileDescription.textAndMnemonic=\u901A\u7528\u6587\u4EF6
-FileChooser.directoryDescription.textAndMnemonic=\u76EE\u5F55
-FileChooser.newFolderError.textAndMnemonic=\u521B\u5EFA\u65B0\u7684\u6587\u4EF6\u5939\u65F6\u51FA\u9519
-FileChooser.newFolderErrorSeparator= :
-FileChooser.newFolderParentDoesntExistTitle.textAndMnemonic=\u65E0\u6CD5\u521B\u5EFA\u6587\u4EF6\u5939
-FileChooser.newFolderParentDoesntExist.textAndMnemonic=\u65E0\u6CD5\u521B\u5EFA\u6587\u4EF6\u5939\u3002\n\n\u7CFB\u7EDF\u627E\u4E0D\u5230\u6307\u5B9A\u7684\u8DEF\u5F84\u3002
-FileChooser.renameErrorTitle.textAndMnemonic=\u91CD\u547D\u540D\u6587\u4EF6\u6216\u6587\u4EF6\u5939\u65F6\u51FA\u9519
-FileChooser.renameError.textAndMnemonic=\u65E0\u6CD5\u91CD\u547D\u540D{0}
-FileChooser.renameErrorFileExists.textAndMnemonic=\u65E0\u6CD5\u91CD\u547D\u540D{0}: \u5DF2\u5B58\u5728\u5177\u6709\u6240\u6307\u5B9A\u540D\u79F0\u7684\u6587\u4EF6\u3002\u8BF7\u6307\u5B9A\u5176\u4ED6\u6587\u4EF6\u540D\u3002
-FileChooser.acceptAllFileFilter.textAndMnemonic=\u6240\u6709\u6587\u4EF6
-FileChooser.cancelButton.textAndMnemonic=\u53D6\u6D88
-FileChooser.saveButton.textAndMnemonic=\u4FDD\u5B58(&S)
-FileChooser.openButton.textAndMnemonic=\u6253\u5F00(&O)
-FileChooser.saveDialogTitle.textAndMnemonic=\u4FDD\u5B58
-FileChooser.openDialogTitle.textAndMnemonic=\u6253\u5F00
-FileChooser.updateButton.textAndMnemonic=\u66F4\u65B0(&U)
-FileChooser.helpButton.textAndMnemonic=\u5E2E\u52A9(&H)
-FileChooser.directoryOpenButton.textAndMnemonic=\u6253\u5F00(&O)
-
-# File Size Units
-FileChooser.fileSizeKiloBytes={0} KB
-FileChooser.fileSizeMegaBytes={0} MB
-FileChooser.fileSizeGigaBytes={0} GB
-
-# These strings are platform dependent not look and feel dependent.
-FileChooser.win32.newFolder=\u65B0\u5EFA\u6587\u4EF6\u5939
-FileChooser.win32.newFolder.subsequent=\u65B0\u5EFA\u6587\u4EF6\u5939 ({0})
-FileChooser.other.newFolder=NewFolder
-FileChooser.other.newFolder.subsequent=NewFolder.{0}
-
-
-## file chooser tooltips ###
-FileChooser.cancelButtonToolTip.textAndMnemonic=\u4E2D\u6B62\u6587\u4EF6\u9009\u62E9\u5668\u5BF9\u8BDD\u6846
-FileChooser.saveButtonToolTip.textAndMnemonic=\u4FDD\u5B58\u6240\u9009\u6587\u4EF6
-FileChooser.openButtonToolTip.textAndMnemonic=\u6253\u5F00\u6240\u9009\u6587\u4EF6
-FileChooser.updateButtonToolTip.textAndMnemonic=\u66F4\u65B0\u76EE\u5F55\u5217\u8868
-FileChooser.helpButtonToolTip.textAndMnemonic=FileChooser \u5E2E\u52A9
-FileChooser.directoryOpenButtonToolTip.textAndMnemonic=\u6253\u5F00\u9009\u62E9\u7684\u76EE\u5F55
-
-FileChooser.filesListAccessibleName=\u6587\u4EF6\u5217\u8868
-FileChooser.filesDetailsAccessibleName=\u6587\u4EF6\u8BE6\u7EC6\u4FE1\u606F
-
-############ COLOR CHOOSER STRINGS #############
-ColorChooser.preview.textAndMnemonic=\u9884\u89C8
-ColorChooser.ok.textAndMnemonic=\u786E\u5B9A
-ColorChooser.cancel.textAndMnemonic=\u53D6\u6D88
-ColorChooser.reset.textAndMnemonic=\u91CD\u7F6E(&R)
-ColorChooser.sample.textAndMnemonic=\u793A\u4F8B\u6587\u672C  \u793A\u4F8B\u6587\u672C
-ColorChooser.swatches.textAndMnemonic=\u6837\u672C(&S)
-ColorChooser.swatchesRecent.textAndMnemonic=\u6700\u8FD1:
-ColorChooser.hsv.textAndMnemonic=HSV(&H)
-ColorChooser.hsvHue.textAndMnemonic=\u8272\u8C03
-ColorChooser.hsvSaturation.textAndMnemonic=\u9971\u548C\u5EA6
-ColorChooser.hsvValue.textAndMnemonic=\u503C
-ColorChooser.hsvTransparency.textAndMnemonic=\u900F\u660E\u5EA6
-ColorChooser.hsl.textAndMnemonic=HSL(&L)
-ColorChooser.hslHue.textAndMnemonic=\u8272\u8C03
-ColorChooser.hslSaturation.textAndMnemonic=\u9971\u548C\u5EA6
-ColorChooser.hslLightness.textAndMnemonic=\u4EAE\u5EA6
-ColorChooser.hslTransparency.textAndMnemonic=\u900F\u660E\u5EA6
-ColorChooser.rgb.textAndMnemonic=RGB(&G)
-ColorChooser.rgbRed.textAndMnemonic=\u7EA2\u8272(&D)
-ColorChooser.rgbGreen.textAndMnemonic=\u7EFF\u8272(&N)
-ColorChooser.rgbBlue.textAndMnemonic=\u84DD\u8272(&B)
-ColorChooser.rgbAlpha.textAndMnemonic=Alpha
-ColorChooser.rgbHexCode.textAndMnemonic=\u989C\u8272\u4EE3\u7801(&C)
-ColorChooser.cmyk.textAndMnemonic=C&MYK
-ColorChooser.cmykCyan.textAndMnemonic=\u9752\u8272
-ColorChooser.cmykMagenta.textAndMnemonic=\u7D2B\u7EA2\u8272
-ColorChooser.cmykYellow.textAndMnemonic=\u9EC4\u8272
-ColorChooser.cmykBlack.textAndMnemonic=\u9ED1\u8272
-ColorChooser.cmykAlpha.textAndMnemonic=Alpha
-
-############ OPTION PANE STRINGS #############
-# We only define mnemonics for YES/NO, but for completeness you can
-# define mnemonics for any of the buttons.
-OptionPane.yesButton.textAndMnemonic=\u662F(&Y)
-OptionPane.noButton.textAndMnemonic=\u5426(&N)
-OptionPane.okButton.textAndMnemonic=\u786E\u5B9A
-#OptionPane.okButtonMnemonic=0
-OptionPane.cancelButton.textAndMnemonic=\u53D6\u6D88
-#OptionPane.cancelButtonMnemonic=0
-OptionPane.title.textAndMnemonic=\u9009\u62E9\u4E00\u4E2A\u9009\u9879
-# Title for the dialog for the showInputDialog methods. Only used if
-# the developer uses one of the variants that doesn't take a title.
-OptionPane.inputDialog.titleAndMnemonic=\u8F93\u5165
-# Title for the dialog for the showMessageDialog methods. Only used if
-# the developer uses one of the variants that doesn't take a title.
-OptionPane.messageDialog.titleAndMnemonic=\u6D88\u606F
-
-############ Printing Dialog Strings ############
-PrintingDialog.titleProgress.textAndMnemonic=\u6253\u5370
-PrintingDialog.titleAborting.textAndMnemonic=\u6253\u5370 (\u6B63\u5728\u4E2D\u6B62)
-
-PrintingDialog.contentInitial.textAndMnemonic=\u6B63\u5728\u8FDB\u884C\u6253\u5370...
-
-# The following string will be formatted by a MessageFormat
-# and {0} will be replaced by page number being printed
-PrintingDialog.contentProgress.textAndMnemonic=\u5DF2\u6253\u5370\u9875 {0}...
-
-PrintingDialog.contentAborting.textAndMnemonic=\u6B63\u5728\u4E2D\u6B62\u6253\u5370...
-
-PrintingDialog.abortButton.textAndMnemonic=\u4E2D\u6B62(&A)
-PrintingDialog.abortButtonToolTip.textAndMnemonic=\u4E2D\u6B62\u6253\u5370
-
-############ Internal Frame Strings ############
-InternalFrame.iconButtonToolTip=\u6700\u5C0F\u5316
-InternalFrame.maxButtonToolTip=\u6700\u5927\u5316
-InternalFrame.restoreButtonToolTip=\u8FD8\u539F
-InternalFrame.closeButtonToolTip=\u5173\u95ED
-
-############ Internal Frame Title Pane Strings ############
-InternalFrameTitlePane.restoreButton.textAndMnemonic=\u8FD8\u539F
-InternalFrameTitlePane.moveButton.textAndMnemonic=\u79FB\u52A8
-InternalFrameTitlePane.sizeButton.textAndMnemonic=\u5927\u5C0F
-InternalFrameTitlePane.minimizeButton.textAndMnemonic=\u6700\u5C0F\u5316
-InternalFrameTitlePane.maximizeButton.textAndMnemonic=\u6700\u5927\u5316
-InternalFrameTitlePane.closeButton.textAndMnemonic=\u5173\u95ED
-
-############ Text strings #############
-# Used for html forms
-FormView.submitButton.textAndMnemonic=\u63D0\u4EA4\u67E5\u8BE2
-FormView.resetButton.textAndMnemonic=\u91CD\u7F6E
-FormView.browseFileButton.textAndMnemonic=\u6D4F\u89C8...
-
-############ Abstract Document Strings ############
-AbstractDocument.styleChange.textAndMnemonic=\u6837\u5F0F\u66F4\u6539
-AbstractDocument.addition.textAndMnemonic=\u6DFB\u52A0
-AbstractDocument.deletion.textAndMnemonic=\u5220\u9664
-AbstractDocument.undo.textAndMnemonic=\u64A4\u6D88
-AbstractDocument.redo.textAndMnemonic=\u91CD\u505A
-
-############ Abstract Button Strings ############
-AbstractButton.click.textAndMnemonic=\u5355\u51FB
-
-############ Abstract Undoable Edit Strings ############
-AbstractUndoableEdit.undo.textAndMnemonic=\u64A4\u6D88
-AbstractUndoableEdit.redo.textAndMnemonic=\u91CD\u505A
-
-############ Combo Box Strings ############
-ComboBox.togglePopup.textAndMnemonic=togglePopup
-
-############ Progress Monitor Strings ############
-ProgressMonitor.progress.textAndMnemonic=\u8FDB\u5EA6...
-
-############ Split Pane Strings ############
-SplitPane.leftButton.textAndMnemonic=\u5DE6\u952E
-SplitPane.rightButton.textAndMnemonic=\u53F3\u952E
-# Used for Isindex
-IsindexView.prompt=\u8FD9\u662F\u53EF\u641C\u7D22\u7D22\u5F15\u3002\u8BF7\u8F93\u5165\u641C\u7D22\u5173\u952E\u5B57: 
-
-############ InternalFrameTitlePane Strings ############
-InternalFrameTitlePane.iconifyButtonAccessibleName=\u56FE\u6807\u5316
-InternalFrameTitlePane.maximizeButtonAccessibleName=\u6700\u5927\u5316
-InternalFrameTitlePane.closeButtonAccessibleName=\u5173\u95ED
diff --git a/ojluni/src/main/java/com/sun/swing/internal/plaf/basic/resources/basic_zh_TW.properties b/ojluni/src/main/java/com/sun/swing/internal/plaf/basic/resources/basic_zh_TW.properties
deleted file mode 100755
index 8112751..0000000
--- a/ojluni/src/main/java/com/sun/swing/internal/plaf/basic/resources/basic_zh_TW.properties
+++ /dev/null
@@ -1,188 +0,0 @@
-# This properties file is used to create a PropertyResourceBundle
-# It contains Locale specific strings used in Swing
-# Currently, the following components need this for support:
-#
-#    ColorChooser
-#    FileChooser
-#    OptionPane
-#
-# When this file is read in, the strings are put into the
-# defaults table.  This is an implementation detail of the current
-# workings of Swing.  DO NOT DEPEND ON THIS.
-# This may change in future versions of Swing as we improve localization
-# support.
-#
-#                        MNEMONIC NOTE:
-# Many of strings in this file are used by widgets that have a
-# mnemonic, for example:
-#   ColorChooser.rgbNameTextAndMnemonic=R&GB
-#
-# Indicates that the tab in the ColorChooser for RGB colors will have
-# the text 'RGB', further the mnemonic character will be 'g' and that
-# a decoration will be provided under the 'G'. This will typically
-# look like:  RGB
-#              -
-#
-# One important thing to remember is that the mnemonic MUST exist in
-# the String, if it does not exist you should add text that makes it
-# exist. This will typically take the form 'XXXX (M)' where M is the
-# character for the mnemonic.
-#
-# @author Steve Wilson
-
-############ FILE CHOOSER STRINGS #############
-FileChooser.fileDescription.textAndMnemonic=\u4E00\u822C\u6A94\u6848
-FileChooser.directoryDescription.textAndMnemonic=\u76EE\u9304
-FileChooser.newFolderError.textAndMnemonic=\u5EFA\u7ACB\u65B0\u8CC7\u6599\u593E\u6642\u767C\u751F\u932F\u8AA4
-FileChooser.newFolderErrorSeparator= :
-FileChooser.newFolderParentDoesntExistTitle.textAndMnemonic=\u7121\u6CD5\u5EFA\u7ACB\u8CC7\u6599\u593E
-FileChooser.newFolderParentDoesntExist.textAndMnemonic=\u7121\u6CD5\u5EFA\u7ACB\u8CC7\u6599\u593E\u3002\n\n\u7CFB\u7D71\u627E\u4E0D\u5230\u6307\u5B9A\u7684\u8DEF\u5F91\u3002
-FileChooser.renameErrorTitle.textAndMnemonic=\u91CD\u65B0\u547D\u540D\u6A94\u6848\u6216\u8CC7\u6599\u593E\u6642\u767C\u751F\u932F\u8AA4\u3002
-FileChooser.renameError.textAndMnemonic=\u7121\u6CD5\u91CD\u65B0\u547D\u540D {0}
-FileChooser.renameErrorFileExists.textAndMnemonic=\u7121\u6CD5\u91CD\u65B0\u547D\u540D {0}: \u5DF2\u7D93\u5B58\u5728\u60A8\u6240\u6307\u5B9A\u540D\u7A31\u7684\u6A94\u6848\u3002\u8ACB\u6307\u5B9A\u4E0D\u540C\u7684\u540D\u7A31\u3002
-FileChooser.acceptAllFileFilter.textAndMnemonic=\u6240\u6709\u6A94\u6848
-FileChooser.cancelButton.textAndMnemonic=\u53D6\u6D88
-FileChooser.saveButton.textAndMnemonic=\u5132\u5B58(&S)
-FileChooser.openButton.textAndMnemonic=\u958B\u555F(&O)
-FileChooser.saveDialogTitle.textAndMnemonic=\u5132\u5B58
-FileChooser.openDialogTitle.textAndMnemonic=\u958B\u555F
-FileChooser.updateButton.textAndMnemonic=\u66F4\u65B0(&U)
-FileChooser.helpButton.textAndMnemonic=\u8AAA\u660E(&H)
-FileChooser.directoryOpenButton.textAndMnemonic=\u958B\u555F(&O)
-
-# File Size Units
-FileChooser.fileSizeKiloBytes={0} KB
-FileChooser.fileSizeMegaBytes={0} MB
-FileChooser.fileSizeGigaBytes={0} GB
-
-# These strings are platform dependent not look and feel dependent.
-FileChooser.win32.newFolder=\u65B0\u8CC7\u6599\u593E
-FileChooser.win32.newFolder.subsequent=\u65B0\u8CC7\u6599\u593E ({0})
-FileChooser.other.newFolder=\u65B0\u8CC7\u6599\u593E
-FileChooser.other.newFolder.subsequent=\u65B0\u8CC7\u6599\u593E.{0}
-
-
-## file chooser tooltips ###
-FileChooser.cancelButtonToolTip.textAndMnemonic=\u4E2D\u6B62\u6A94\u6848\u9078\u64C7\u5668\u5C0D\u8A71\u65B9\u584A
-FileChooser.saveButtonToolTip.textAndMnemonic=\u5132\u5B58\u9078\u53D6\u7684\u6A94\u6848
-FileChooser.openButtonToolTip.textAndMnemonic=\u958B\u555F\u9078\u53D6\u7684\u6A94\u6848
-FileChooser.updateButtonToolTip.textAndMnemonic=\u66F4\u65B0\u76EE\u9304\u6E05\u55AE
-FileChooser.helpButtonToolTip.textAndMnemonic=\u300C\u6A94\u6848\u9078\u64C7\u5668\u300D\u8AAA\u660E
-FileChooser.directoryOpenButtonToolTip.textAndMnemonic=\u958B\u555F\u9078\u53D6\u7684\u76EE\u9304
-
-FileChooser.filesListAccessibleName=\u6A94\u6848\u6E05\u55AE
-FileChooser.filesDetailsAccessibleName=\u6A94\u6848\u8A73\u7D30\u8CC7\u8A0A
-
-############ COLOR CHOOSER STRINGS #############
-ColorChooser.preview.textAndMnemonic=\u9810\u89BD
-ColorChooser.ok.textAndMnemonic=\u78BA\u5B9A
-ColorChooser.cancel.textAndMnemonic=\u53D6\u6D88
-ColorChooser.reset.textAndMnemonic=\u91CD\u8A2D(&R)
-ColorChooser.sample.textAndMnemonic=\u7BC4\u4F8B\u6587\u5B57  \u7BC4\u4F8B\u6587\u5B57
-ColorChooser.swatches.textAndMnemonic=\u8ABF\u8272\u677F(&S)
-ColorChooser.swatchesRecent.textAndMnemonic=\u6700\u65B0\u9078\u64C7:
-ColorChooser.hsv.textAndMnemonic=HSV(&H)
-ColorChooser.hsvHue.textAndMnemonic=\u8272\u8ABF
-ColorChooser.hsvSaturation.textAndMnemonic=\u5F69\u5EA6
-ColorChooser.hsvValue.textAndMnemonic=\u6578\u503C
-ColorChooser.hsvTransparency.textAndMnemonic=\u900F\u660E\u5EA6
-ColorChooser.hsl.textAndMnemonic=HSL(&L)
-ColorChooser.hslHue.textAndMnemonic=\u8272\u8ABF
-ColorChooser.hslSaturation.textAndMnemonic=\u5F69\u5EA6
-ColorChooser.hslLightness.textAndMnemonic=\u4EAE\u5EA6
-ColorChooser.hslTransparency.textAndMnemonic=\u900F\u660E\u5EA6
-ColorChooser.rgb.textAndMnemonic=RGB(&G)
-ColorChooser.rgbRed.textAndMnemonic=\u7D05(&D)
-ColorChooser.rgbGreen.textAndMnemonic=\u7DA0(&N)
-ColorChooser.rgbBlue.textAndMnemonic=\u85CD(&B)
-ColorChooser.rgbAlpha.textAndMnemonic=Alpha
-ColorChooser.rgbHexCode.textAndMnemonic=\u984F\u8272\u4EE3\u78BC(&C)
-ColorChooser.cmyk.textAndMnemonic=C&MYK
-ColorChooser.cmykCyan.textAndMnemonic=\u85CD\u7DA0\u8272
-ColorChooser.cmykMagenta.textAndMnemonic=\u7D2B\u7D05\u8272
-ColorChooser.cmykYellow.textAndMnemonic=\u9EC3\u8272
-ColorChooser.cmykBlack.textAndMnemonic=\u9ED1\u8272
-ColorChooser.cmykAlpha.textAndMnemonic=Alpha
-
-############ OPTION PANE STRINGS #############
-# We only define mnemonics for YES/NO, but for completeness you can
-# define mnemonics for any of the buttons.
-OptionPane.yesButton.textAndMnemonic=\u662F(&Y)
-OptionPane.noButton.textAndMnemonic=\u5426(&N)
-OptionPane.okButton.textAndMnemonic=\u78BA\u5B9A
-#OptionPane.okButtonMnemonic=0
-OptionPane.cancelButton.textAndMnemonic=\u53D6\u6D88
-#OptionPane.cancelButtonMnemonic=0
-OptionPane.title.textAndMnemonic=\u9078\u53D6\u4E00\u500B\u9078\u9805
-# Title for the dialog for the showInputDialog methods. Only used if
-# the developer uses one of the variants that doesn't take a title.
-OptionPane.inputDialog.titleAndMnemonic=\u8F38\u5165
-# Title for the dialog for the showMessageDialog methods. Only used if
-# the developer uses one of the variants that doesn't take a title.
-OptionPane.messageDialog.titleAndMnemonic=\u8A0A\u606F
-
-############ Printing Dialog Strings ############
-PrintingDialog.titleProgress.textAndMnemonic=\u5217\u5370
-PrintingDialog.titleAborting.textAndMnemonic=\u5217\u5370 (\u4E2D\u6B62)
-
-PrintingDialog.contentInitial.textAndMnemonic=\u6B63\u5728\u5217\u5370...
-
-# The following string will be formatted by a MessageFormat
-# and {0} will be replaced by page number being printed
-PrintingDialog.contentProgress.textAndMnemonic=\u5DF2\u5217\u5370\u7684\u9801\u9762 {0}...
-
-PrintingDialog.contentAborting.textAndMnemonic=\u6B63\u5728\u4E2D\u6B62\u5217\u5370...
-
-PrintingDialog.abortButton.textAndMnemonic=\u4E2D\u6B62(&A)
-PrintingDialog.abortButtonToolTip.textAndMnemonic=\u4E2D\u6B62\u5217\u5370
-
-############ Internal Frame Strings ############
-InternalFrame.iconButtonToolTip=\u6700\u5C0F\u5316
-InternalFrame.maxButtonToolTip=\u6700\u5927\u5316
-InternalFrame.restoreButtonToolTip=\u5FA9\u539F
-InternalFrame.closeButtonToolTip=\u95DC\u9589
-
-############ Internal Frame Title Pane Strings ############
-InternalFrameTitlePane.restoreButton.textAndMnemonic=\u5FA9\u539F
-InternalFrameTitlePane.moveButton.textAndMnemonic=\u79FB\u52D5
-InternalFrameTitlePane.sizeButton.textAndMnemonic=\u5927\u5C0F
-InternalFrameTitlePane.minimizeButton.textAndMnemonic=\u6700\u5C0F\u5316
-InternalFrameTitlePane.maximizeButton.textAndMnemonic=\u6700\u5927\u5316
-InternalFrameTitlePane.closeButton.textAndMnemonic=\u95DC\u9589
-
-############ Text strings #############
-# Used for html forms
-FormView.submitButton.textAndMnemonic=\u9001\u51FA\u67E5\u8A62
-FormView.resetButton.textAndMnemonic=\u91CD\u8A2D
-FormView.browseFileButton.textAndMnemonic=\u700F\u89BD...
-
-############ Abstract Document Strings ############
-AbstractDocument.styleChange.textAndMnemonic=\u6A23\u5F0F\u8B8A\u66F4
-AbstractDocument.addition.textAndMnemonic=\u9644\u52A0
-AbstractDocument.deletion.textAndMnemonic=\u522A\u9664
-AbstractDocument.undo.textAndMnemonic=\u9084\u539F
-AbstractDocument.redo.textAndMnemonic=\u91CD\u505A
-
-############ Abstract Button Strings ############
-AbstractButton.click.textAndMnemonic=\u6309\u4E00\u4E0B
-
-############ Abstract Undoable Edit Strings ############
-AbstractUndoableEdit.undo.textAndMnemonic=\u9084\u539F
-AbstractUndoableEdit.redo.textAndMnemonic=\u91CD\u505A
-
-############ Combo Box Strings ############
-ComboBox.togglePopup.textAndMnemonic=\u5207\u63DB\u5373\u73FE\u5F0F\u8996\u7A97
-
-############ Progress Monitor Strings ############
-ProgressMonitor.progress.textAndMnemonic=\u9032\u5EA6...
-
-############ Split Pane Strings ############
-SplitPane.leftButton.textAndMnemonic=\u5DE6\u6309\u9215
-SplitPane.rightButton.textAndMnemonic=\u53F3\u6309\u9215
-# Used for Isindex
-IsindexView.prompt=\u9019\u662F\u4E00\u500B\u53EF\u641C\u5C0B\u7684\u7D22\u5F15\u3002\u8F38\u5165\u641C\u5C0B\u95DC\u9375\u5B57: 
-
-############ InternalFrameTitlePane Strings ############
-InternalFrameTitlePane.iconifyButtonAccessibleName=\u5716\u793A\u5316
-InternalFrameTitlePane.maximizeButtonAccessibleName=\u6700\u5927\u5316
-InternalFrameTitlePane.closeButtonAccessibleName=\u95DC\u9589
diff --git a/ojluni/src/main/java/com/sun/swing/internal/plaf/metal/resources/metal.properties b/ojluni/src/main/java/com/sun/swing/internal/plaf/metal/resources/metal.properties
deleted file mode 100755
index e3cc230..0000000
--- a/ojluni/src/main/java/com/sun/swing/internal/plaf/metal/resources/metal.properties
+++ /dev/null
@@ -1,53 +0,0 @@
-# This properties file is used to create a PropertyResourceBundle

-# It contains Locale specific strings used be the Metal Look and Feel.

-# Currently, the following components need this for support:

-#

-#    FileChooser

-#

-# When this file is read in, the strings are put into the

-# defaults table.  This is an implementation detail of the current

-# workings of Swing.  DO NOT DEPEND ON THIS.

-# This may change in future versions of Swing as we improve localization

-# support.

-#

-# Refer to the note in basic.properties for a description as to what

-# the mnemonics correspond to and how to calculate them.

-#

-# @author Steve Wilson

-

-

-############ FILE CHOOSER STRINGS #############

-

-FileChooser.lookInLabel.textAndMnemonic=Look &In:

-FileChooser.saveInLabel.textAndMnemonic=Save In:

-FileChooser.fileNameLabel.textAndMnemonic=File &Name:

-FileChooser.folderNameLabel.textAndMnemonic=Folder &name:

-FileChooser.filesOfTypeLabel.textAndMnemonic=Files of &Type:

-FileChooser.upFolderToolTip.textAndMnemonic=Up One Level

-FileChooser.upFolderAccessibleName=Up

-FileChooser.homeFolderToolTip.textAndMnemonic=Home

-FileChooser.homeFolderAccessibleName=Home

-FileChooser.newFolderToolTip.textAndMnemonic=Create New Folder

-FileChooser.newFolderAccessibleName=New Folder

-FileChooser.newFolderActionLabel.textAndMnemonic=New Folder

-FileChooser.listViewButtonToolTip.textAndMnemonic=List

-FileChooser.listViewButtonAccessibleName=List

-FileChooser.listViewActionLabel.textAndMnemonic=List

-FileChooser.detailsViewButtonToolTip.textAndMnemonic=Details

-FileChooser.detailsViewButtonAccessibleName=Details

-FileChooser.detailsViewActionLabel.textAndMnemonic=Details

-FileChooser.refreshActionLabel.textAndMnemonic=Refresh

-FileChooser.viewMenuLabel.textAndMnemonic=View

-FileChooser.fileNameHeader.textAndMnemonic=Name

-FileChooser.fileSizeHeader.textAndMnemonic=Size

-FileChooser.fileTypeHeader.textAndMnemonic=Type

-FileChooser.fileDateHeader.textAndMnemonic=Modified

-FileChooser.fileAttrHeader.textAndMnemonic=Attributes

-FileChooser.saveButton.textAndMnemonic=Save

-FileChooser.openButton.textAndMnemonic=Open

-

-############ Used by MetalTitlePane if rendering window decorations############

-MetalTitlePane.restore.titleAndMnemonic=&Restore

-MetalTitlePane.iconify.titleAndMnemonic=Minimiz&e

-MetalTitlePane.maximize.titleAndMnemonic=Ma&ximize

-MetalTitlePane.close.titleAndMnemonic=&Close

diff --git a/ojluni/src/main/java/com/sun/swing/internal/plaf/metal/resources/metal_de.properties b/ojluni/src/main/java/com/sun/swing/internal/plaf/metal/resources/metal_de.properties
deleted file mode 100755
index 48315d3..0000000
--- a/ojluni/src/main/java/com/sun/swing/internal/plaf/metal/resources/metal_de.properties
+++ /dev/null
@@ -1,53 +0,0 @@
-# This properties file is used to create a PropertyResourceBundle
-# It contains Locale specific strings used be the Metal Look and Feel.
-# Currently, the following components need this for support:
-#
-#    FileChooser
-#
-# When this file is read in, the strings are put into the
-# defaults table.  This is an implementation detail of the current
-# workings of Swing.  DO NOT DEPEND ON THIS.
-# This may change in future versions of Swing as we improve localization
-# support.
-#
-# Refer to the note in basic.properties for a description as to what
-# the mnemonics correspond to and how to calculate them.
-#
-# @author Steve Wilson
-
-
-############ FILE CHOOSER STRINGS #############
-
-FileChooser.lookInLabel.textAndMnemonic=Suchen &in:
-FileChooser.saveInLabel.textAndMnemonic=Speichern in:
-FileChooser.fileNameLabel.textAndMnemonic=&Dateiname:
-FileChooser.folderNameLabel.textAndMnemonic=Ordner&name:
-FileChooser.filesOfTypeLabel.textAndMnemonic=Datei&typ:
-FileChooser.upFolderToolTip.textAndMnemonic=Eine Ebene h\u00F6her
-FileChooser.upFolderAccessibleName=Nach oben
-FileChooser.homeFolderToolTip.textAndMnemonic=Home
-FileChooser.homeFolderAccessibleName=Home
-FileChooser.newFolderToolTip.textAndMnemonic=Neuen Ordner erstellen
-FileChooser.newFolderAccessibleName=Neuer Ordner
-FileChooser.newFolderActionLabel.textAndMnemonic=Neuer Ordner
-FileChooser.listViewButtonToolTip.textAndMnemonic=Liste
-FileChooser.listViewButtonAccessibleName=Liste
-FileChooser.listViewActionLabel.textAndMnemonic=Liste
-FileChooser.detailsViewButtonToolTip.textAndMnemonic=Details
-FileChooser.detailsViewButtonAccessibleName=Details
-FileChooser.detailsViewActionLabel.textAndMnemonic=Details
-FileChooser.refreshActionLabel.textAndMnemonic=Aktualisieren
-FileChooser.viewMenuLabel.textAndMnemonic=Ansicht
-FileChooser.fileNameHeader.textAndMnemonic=Name
-FileChooser.fileSizeHeader.textAndMnemonic=Gr\u00F6\u00DFe
-FileChooser.fileTypeHeader.textAndMnemonic=Typ
-FileChooser.fileDateHeader.textAndMnemonic=Ge\u00E4ndert
-FileChooser.fileAttrHeader.textAndMnemonic=Attribute
-FileChooser.saveButton.textAndMnemonic=Speichern
-FileChooser.openButton.textAndMnemonic=\u00D6ffnen
-
-############ Used by MetalTitlePane if rendering window decorations############
-MetalTitlePane.restore.titleAndMnemonic=&Wiederherstellen
-MetalTitlePane.iconify.titleAndMnemonic=Minimie&ren
-MetalTitlePane.maximize.titleAndMnemonic=Ma&ximieren
-MetalTitlePane.close.titleAndMnemonic=&Schlie\u00DFen
diff --git a/ojluni/src/main/java/com/sun/swing/internal/plaf/metal/resources/metal_es.properties b/ojluni/src/main/java/com/sun/swing/internal/plaf/metal/resources/metal_es.properties
deleted file mode 100755
index 72ec82e..0000000
--- a/ojluni/src/main/java/com/sun/swing/internal/plaf/metal/resources/metal_es.properties
+++ /dev/null
@@ -1,53 +0,0 @@
-# This properties file is used to create a PropertyResourceBundle
-# It contains Locale specific strings used be the Metal Look and Feel.
-# Currently, the following components need this for support:
-#
-#    FileChooser
-#
-# When this file is read in, the strings are put into the
-# defaults table.  This is an implementation detail of the current
-# workings of Swing.  DO NOT DEPEND ON THIS.
-# This may change in future versions of Swing as we improve localization
-# support.
-#
-# Refer to the note in basic.properties for a description as to what
-# the mnemonics correspond to and how to calculate them.
-#
-# @author Steve Wilson
-
-
-############ FILE CHOOSER STRINGS #############
-
-FileChooser.lookInLabel.textAndMnemonic=&Buscar en:
-FileChooser.saveInLabel.textAndMnemonic=Guardar en:
-FileChooser.fileNameLabel.textAndMnemonic=&Nombre de archivo:
-FileChooser.folderNameLabel.textAndMnemonic=&Nombre de carpeta:
-FileChooser.filesOfTypeLabel.textAndMnemonic=Archivos de &tipo:
-FileChooser.upFolderToolTip.textAndMnemonic=Subir un Nivel
-FileChooser.upFolderAccessibleName=Arriba
-FileChooser.homeFolderToolTip.textAndMnemonic=Inicio
-FileChooser.homeFolderAccessibleName=Inicio
-FileChooser.newFolderToolTip.textAndMnemonic=Crear Nueva Carpeta
-FileChooser.newFolderAccessibleName=Nueva Carpeta
-FileChooser.newFolderActionLabel.textAndMnemonic=Nueva Carpeta
-FileChooser.listViewButtonToolTip.textAndMnemonic=Lista
-FileChooser.listViewButtonAccessibleName=Lista
-FileChooser.listViewActionLabel.textAndMnemonic=Lista
-FileChooser.detailsViewButtonToolTip.textAndMnemonic=Detalles
-FileChooser.detailsViewButtonAccessibleName=Detalles
-FileChooser.detailsViewActionLabel.textAndMnemonic=Detalles
-FileChooser.refreshActionLabel.textAndMnemonic=Refrescar
-FileChooser.viewMenuLabel.textAndMnemonic=Ver
-FileChooser.fileNameHeader.textAndMnemonic=Nombre
-FileChooser.fileSizeHeader.textAndMnemonic=Tama\u00F1o
-FileChooser.fileTypeHeader.textAndMnemonic=Tipo
-FileChooser.fileDateHeader.textAndMnemonic=Modificado
-FileChooser.fileAttrHeader.textAndMnemonic=Atributos
-FileChooser.saveButton.textAndMnemonic=Guardar
-FileChooser.openButton.textAndMnemonic=Abrir
-
-############ Used by MetalTitlePane if rendering window decorations############
-MetalTitlePane.restore.titleAndMnemonic=&Restaurar
-MetalTitlePane.iconify.titleAndMnemonic=Minimi&zar
-MetalTitlePane.maximize.titleAndMnemonic=Ma&ximizar
-MetalTitlePane.close.titleAndMnemonic=&Cerrar
diff --git a/ojluni/src/main/java/com/sun/swing/internal/plaf/metal/resources/metal_fr.properties b/ojluni/src/main/java/com/sun/swing/internal/plaf/metal/resources/metal_fr.properties
deleted file mode 100755
index 05a1c70..0000000
--- a/ojluni/src/main/java/com/sun/swing/internal/plaf/metal/resources/metal_fr.properties
+++ /dev/null
@@ -1,53 +0,0 @@
-# This properties file is used to create a PropertyResourceBundle
-# It contains Locale specific strings used be the Metal Look and Feel.
-# Currently, the following components need this for support:
-#
-#    FileChooser
-#
-# When this file is read in, the strings are put into the
-# defaults table.  This is an implementation detail of the current
-# workings of Swing.  DO NOT DEPEND ON THIS.
-# This may change in future versions of Swing as we improve localization
-# support.
-#
-# Refer to the note in basic.properties for a description as to what
-# the mnemonics correspond to and how to calculate them.
-#
-# @author Steve Wilson
-
-
-############ FILE CHOOSER STRINGS #############
-
-FileChooser.lookInLabel.textAndMnemonic=Rechercher &dans :
-FileChooser.saveInLabel.textAndMnemonic=Enregistrer dans :
-FileChooser.fileNameLabel.textAndMnemonic=&Nom du fichier :
-FileChooser.folderNameLabel.textAndMnemonic=&Nom du dossier :
-FileChooser.filesOfTypeLabel.textAndMnemonic=&Type de fichier :
-FileChooser.upFolderToolTip.textAndMnemonic=Remonte d'un niveau.
-FileChooser.upFolderAccessibleName=Monter
-FileChooser.homeFolderToolTip.textAndMnemonic=R\u00E9pertoire d'origine
-FileChooser.homeFolderAccessibleName=R\u00E9pertoire d'origine
-FileChooser.newFolderToolTip.textAndMnemonic=Cr\u00E9e un dossier.
-FileChooser.newFolderAccessibleName=Nouveau dossier
-FileChooser.newFolderActionLabel.textAndMnemonic=Nouveau dossier
-FileChooser.listViewButtonToolTip.textAndMnemonic=Liste
-FileChooser.listViewButtonAccessibleName=Liste
-FileChooser.listViewActionLabel.textAndMnemonic=Liste
-FileChooser.detailsViewButtonToolTip.textAndMnemonic=D\u00E9tails
-FileChooser.detailsViewButtonAccessibleName=D\u00E9tails
-FileChooser.detailsViewActionLabel.textAndMnemonic=D\u00E9tails
-FileChooser.refreshActionLabel.textAndMnemonic=Actualiser
-FileChooser.viewMenuLabel.textAndMnemonic=Affichage
-FileChooser.fileNameHeader.textAndMnemonic=Nom
-FileChooser.fileSizeHeader.textAndMnemonic=Taille
-FileChooser.fileTypeHeader.textAndMnemonic=Type
-FileChooser.fileDateHeader.textAndMnemonic=Modifi\u00E9
-FileChooser.fileAttrHeader.textAndMnemonic=Attributs
-FileChooser.saveButton.textAndMnemonic=Enregistrer
-FileChooser.openButton.textAndMnemonic=Ouvrir
-
-############ Used by MetalTitlePane if rendering window decorations############
-MetalTitlePane.restore.titleAndMnemonic=&Restaurer
-MetalTitlePane.iconify.titleAndMnemonic=R\u00E9&duire
-MetalTitlePane.maximize.titleAndMnemonic=&Agrandir
-MetalTitlePane.close.titleAndMnemonic=&Fermer
diff --git a/ojluni/src/main/java/com/sun/swing/internal/plaf/metal/resources/metal_it.properties b/ojluni/src/main/java/com/sun/swing/internal/plaf/metal/resources/metal_it.properties
deleted file mode 100755
index 6194621..0000000
--- a/ojluni/src/main/java/com/sun/swing/internal/plaf/metal/resources/metal_it.properties
+++ /dev/null
@@ -1,53 +0,0 @@
-# This properties file is used to create a PropertyResourceBundle
-# It contains Locale specific strings used be the Metal Look and Feel.
-# Currently, the following components need this for support:
-#
-#    FileChooser
-#
-# When this file is read in, the strings are put into the
-# defaults table.  This is an implementation detail of the current
-# workings of Swing.  DO NOT DEPEND ON THIS.
-# This may change in future versions of Swing as we improve localization
-# support.
-#
-# Refer to the note in basic.properties for a description as to what
-# the mnemonics correspond to and how to calculate them.
-#
-# @author Steve Wilson
-
-
-############ FILE CHOOSER STRINGS #############
-
-FileChooser.lookInLabel.textAndMnemonic=Cerca &in:
-FileChooser.saveInLabel.textAndMnemonic=Salva in:
-FileChooser.fileNameLabel.textAndMnemonic=&Nome file:
-FileChooser.folderNameLabel.textAndMnemonic=&Nome cartella:
-FileChooser.filesOfTypeLabel.textAndMnemonic=&Tipo di file:
-FileChooser.upFolderToolTip.textAndMnemonic=Cartella superiore
-FileChooser.upFolderAccessibleName=Superiore
-FileChooser.homeFolderToolTip.textAndMnemonic=Home
-FileChooser.homeFolderAccessibleName=Home
-FileChooser.newFolderToolTip.textAndMnemonic=Crea nuova cartella
-FileChooser.newFolderAccessibleName=Nuova cartella
-FileChooser.newFolderActionLabel.textAndMnemonic=Nuova cartella
-FileChooser.listViewButtonToolTip.textAndMnemonic=Lista
-FileChooser.listViewButtonAccessibleName=Lista
-FileChooser.listViewActionLabel.textAndMnemonic=Lista
-FileChooser.detailsViewButtonToolTip.textAndMnemonic=Dettagli
-FileChooser.detailsViewButtonAccessibleName=Dettagli
-FileChooser.detailsViewActionLabel.textAndMnemonic=Dettagli
-FileChooser.refreshActionLabel.textAndMnemonic=Aggiorna
-FileChooser.viewMenuLabel.textAndMnemonic=Visualizza
-FileChooser.fileNameHeader.textAndMnemonic=Nome
-FileChooser.fileSizeHeader.textAndMnemonic=Dimensioni
-FileChooser.fileTypeHeader.textAndMnemonic=Tipo
-FileChooser.fileDateHeader.textAndMnemonic=Modificato
-FileChooser.fileAttrHeader.textAndMnemonic=Attributi
-FileChooser.saveButton.textAndMnemonic=Salva
-FileChooser.openButton.textAndMnemonic=Apri
-
-############ Used by MetalTitlePane if rendering window decorations############
-MetalTitlePane.restore.titleAndMnemonic=&Ripristina
-MetalTitlePane.iconify.titleAndMnemonic=Rid&uci a icona
-MetalTitlePane.maximize.titleAndMnemonic=In&grandisci
-MetalTitlePane.close.titleAndMnemonic=&Chiudi
diff --git a/ojluni/src/main/java/com/sun/swing/internal/plaf/metal/resources/metal_ja.properties b/ojluni/src/main/java/com/sun/swing/internal/plaf/metal/resources/metal_ja.properties
deleted file mode 100755
index 8a8fef8..0000000
--- a/ojluni/src/main/java/com/sun/swing/internal/plaf/metal/resources/metal_ja.properties
+++ /dev/null
@@ -1,53 +0,0 @@
-# This properties file is used to create a PropertyResourceBundle
-# It contains Locale specific strings used be the Metal Look and Feel.
-# Currently, the following components need this for support:
-#
-#    FileChooser
-#
-# When this file is read in, the strings are put into the
-# defaults table.  This is an implementation detail of the current
-# workings of Swing.  DO NOT DEPEND ON THIS.
-# This may change in future versions of Swing as we improve localization
-# support.
-#
-# Refer to the note in basic.properties for a description as to what
-# the mnemonics correspond to and how to calculate them.
-#
-# @author Steve Wilson
-
-
-############ FILE CHOOSER STRINGS #############
-
-FileChooser.lookInLabel.textAndMnemonic=\u30D5\u30A1\u30A4\u30EB\u306E\u5834\u6240(&I):
-FileChooser.saveInLabel.textAndMnemonic=\u4FDD\u5B58:
-FileChooser.fileNameLabel.textAndMnemonic=\u30D5\u30A1\u30A4\u30EB\u540D(&N):
-FileChooser.folderNameLabel.textAndMnemonic=\u30D5\u30A9\u30EB\u30C0\u540D(&N):
-FileChooser.filesOfTypeLabel.textAndMnemonic=\u30D5\u30A1\u30A4\u30EB\u306E\u30BF\u30A4\u30D7(&T):
-FileChooser.upFolderToolTip.textAndMnemonic=1\u30EC\u30D9\u30EB\u4E0A\u3078
-FileChooser.upFolderAccessibleName=\u4E0A\u3078
-FileChooser.homeFolderToolTip.textAndMnemonic=\u30DB\u30FC\u30E0
-FileChooser.homeFolderAccessibleName=\u30DB\u30FC\u30E0
-FileChooser.newFolderToolTip.textAndMnemonic=\u65B0\u898F\u30D5\u30A9\u30EB\u30C0\u306E\u4F5C\u6210
-FileChooser.newFolderAccessibleName=\u65B0\u898F\u30D5\u30A9\u30EB\u30C0
-FileChooser.newFolderActionLabel.textAndMnemonic=\u65B0\u898F\u30D5\u30A9\u30EB\u30C0
-FileChooser.listViewButtonToolTip.textAndMnemonic=\u30EA\u30B9\u30C8
-FileChooser.listViewButtonAccessibleName=\u30EA\u30B9\u30C8
-FileChooser.listViewActionLabel.textAndMnemonic=\u30EA\u30B9\u30C8
-FileChooser.detailsViewButtonToolTip.textAndMnemonic=\u8A73\u7D30
-FileChooser.detailsViewButtonAccessibleName=\u8A73\u7D30
-FileChooser.detailsViewActionLabel.textAndMnemonic=\u8A73\u7D30
-FileChooser.refreshActionLabel.textAndMnemonic=\u30EA\u30D5\u30EC\u30C3\u30B7\u30E5
-FileChooser.viewMenuLabel.textAndMnemonic=\u8868\u793A
-FileChooser.fileNameHeader.textAndMnemonic=\u540D\u524D
-FileChooser.fileSizeHeader.textAndMnemonic=\u30B5\u30A4\u30BA
-FileChooser.fileTypeHeader.textAndMnemonic=\u30BF\u30A4\u30D7
-FileChooser.fileDateHeader.textAndMnemonic=\u4FEE\u6B63\u65E5
-FileChooser.fileAttrHeader.textAndMnemonic=\u5C5E\u6027
-FileChooser.saveButton.textAndMnemonic=\u4FDD\u5B58
-FileChooser.openButton.textAndMnemonic=\u958B\u304F
-
-############ Used by MetalTitlePane if rendering window decorations############
-MetalTitlePane.restore.titleAndMnemonic=\u5FA9\u5143(&R)
-MetalTitlePane.iconify.titleAndMnemonic=\u6700\u5C0F\u5316(&E)
-MetalTitlePane.maximize.titleAndMnemonic=\u6700\u5927\u5316(&X)
-MetalTitlePane.close.titleAndMnemonic=\u9589\u3058\u308B(&C)
diff --git a/ojluni/src/main/java/com/sun/swing/internal/plaf/metal/resources/metal_ko.properties b/ojluni/src/main/java/com/sun/swing/internal/plaf/metal/resources/metal_ko.properties
deleted file mode 100755
index 264976c..0000000
--- a/ojluni/src/main/java/com/sun/swing/internal/plaf/metal/resources/metal_ko.properties
+++ /dev/null
@@ -1,53 +0,0 @@
-# This properties file is used to create a PropertyResourceBundle
-# It contains Locale specific strings used be the Metal Look and Feel.
-# Currently, the following components need this for support:
-#
-#    FileChooser
-#
-# When this file is read in, the strings are put into the
-# defaults table.  This is an implementation detail of the current
-# workings of Swing.  DO NOT DEPEND ON THIS.
-# This may change in future versions of Swing as we improve localization
-# support.
-#
-# Refer to the note in basic.properties for a description as to what
-# the mnemonics correspond to and how to calculate them.
-#
-# @author Steve Wilson
-
-
-############ FILE CHOOSER STRINGS #############
-
-FileChooser.lookInLabel.textAndMnemonic=\uCC3E\uB294 \uC704\uCE58(&I):
-FileChooser.saveInLabel.textAndMnemonic=\uC800\uC7A5 \uC704\uCE58:
-FileChooser.fileNameLabel.textAndMnemonic=\uD30C\uC77C \uC774\uB984(&N):
-FileChooser.folderNameLabel.textAndMnemonic=\uD3F4\uB354 \uC774\uB984(&N):
-FileChooser.filesOfTypeLabel.textAndMnemonic=\uD30C\uC77C \uC720\uD615(&T):
-FileChooser.upFolderToolTip.textAndMnemonic=\uD55C \uB808\uBCA8 \uC704\uB85C
-FileChooser.upFolderAccessibleName=\uC704\uB85C
-FileChooser.homeFolderToolTip.textAndMnemonic=\uD648
-FileChooser.homeFolderAccessibleName=\uD648
-FileChooser.newFolderToolTip.textAndMnemonic=\uC0C8 \uD3F4\uB354 \uC0DD\uC131
-FileChooser.newFolderAccessibleName=\uC0C8 \uD3F4\uB354
-FileChooser.newFolderActionLabel.textAndMnemonic=\uC0C8 \uD3F4\uB354
-FileChooser.listViewButtonToolTip.textAndMnemonic=\uBAA9\uB85D
-FileChooser.listViewButtonAccessibleName=\uBAA9\uB85D
-FileChooser.listViewActionLabel.textAndMnemonic=\uBAA9\uB85D
-FileChooser.detailsViewButtonToolTip.textAndMnemonic=\uC138\uBD80 \uC815\uBCF4
-FileChooser.detailsViewButtonAccessibleName=\uC138\uBD80 \uC815\uBCF4
-FileChooser.detailsViewActionLabel.textAndMnemonic=\uC138\uBD80 \uC815\uBCF4
-FileChooser.refreshActionLabel.textAndMnemonic=\uC0C8\uB85C \uACE0\uCE68
-FileChooser.viewMenuLabel.textAndMnemonic=\uBCF4\uAE30
-FileChooser.fileNameHeader.textAndMnemonic=\uC774\uB984
-FileChooser.fileSizeHeader.textAndMnemonic=\uD06C\uAE30
-FileChooser.fileTypeHeader.textAndMnemonic=\uC720\uD615
-FileChooser.fileDateHeader.textAndMnemonic=\uC218\uC815 \uB0A0\uC9DC
-FileChooser.fileAttrHeader.textAndMnemonic=\uC18D\uC131
-FileChooser.saveButton.textAndMnemonic=\uC800\uC7A5
-FileChooser.openButton.textAndMnemonic=\uC5F4\uAE30
-
-############ Used by MetalTitlePane if rendering window decorations############
-MetalTitlePane.restore.titleAndMnemonic=\uBCF5\uC6D0(&R)
-MetalTitlePane.iconify.titleAndMnemonic=\uCD5C\uC18C\uD654(&E)
-MetalTitlePane.maximize.titleAndMnemonic=\uCD5C\uB300\uD654(&X)
-MetalTitlePane.close.titleAndMnemonic=\uB2EB\uAE30(&C)
diff --git a/ojluni/src/main/java/com/sun/swing/internal/plaf/metal/resources/metal_pt_BR.properties b/ojluni/src/main/java/com/sun/swing/internal/plaf/metal/resources/metal_pt_BR.properties
deleted file mode 100755
index 79c45cb..0000000
--- a/ojluni/src/main/java/com/sun/swing/internal/plaf/metal/resources/metal_pt_BR.properties
+++ /dev/null
@@ -1,53 +0,0 @@
-# This properties file is used to create a PropertyResourceBundle
-# It contains Locale specific strings used be the Metal Look and Feel.
-# Currently, the following components need this for support:
-#
-#    FileChooser
-#
-# When this file is read in, the strings are put into the
-# defaults table.  This is an implementation detail of the current
-# workings of Swing.  DO NOT DEPEND ON THIS.
-# This may change in future versions of Swing as we improve localization
-# support.
-#
-# Refer to the note in basic.properties for a description as to what
-# the mnemonics correspond to and how to calculate them.
-#
-# @author Steve Wilson
-
-
-############ FILE CHOOSER STRINGS #############
-
-FileChooser.lookInLabel.textAndMnemonic=Pesquisar &em:
-FileChooser.saveInLabel.textAndMnemonic=Salvar Em:
-FileChooser.fileNameLabel.textAndMnemonic=&Nome do Arquivo:
-FileChooser.folderNameLabel.textAndMnemonic=&Nome da pasta:
-FileChooser.filesOfTypeLabel.textAndMnemonic=Arquivos do &Tipo:
-FileChooser.upFolderToolTip.textAndMnemonic=Um N\u00EDvel Acima
-FileChooser.upFolderAccessibleName=Acima
-FileChooser.homeFolderToolTip.textAndMnemonic=In\u00EDcio
-FileChooser.homeFolderAccessibleName=In\u00EDcio
-FileChooser.newFolderToolTip.textAndMnemonic=Criar Nova Pasta
-FileChooser.newFolderAccessibleName=Nova Pasta
-FileChooser.newFolderActionLabel.textAndMnemonic=Nova Pasta
-FileChooser.listViewButtonToolTip.textAndMnemonic=Lista
-FileChooser.listViewButtonAccessibleName=Lista
-FileChooser.listViewActionLabel.textAndMnemonic=Lista
-FileChooser.detailsViewButtonToolTip.textAndMnemonic=Detalhes
-FileChooser.detailsViewButtonAccessibleName=Detalhes
-FileChooser.detailsViewActionLabel.textAndMnemonic=Detalhes
-FileChooser.refreshActionLabel.textAndMnemonic=Atualizar
-FileChooser.viewMenuLabel.textAndMnemonic=Exibir
-FileChooser.fileNameHeader.textAndMnemonic=Nome
-FileChooser.fileSizeHeader.textAndMnemonic=Tamanho
-FileChooser.fileTypeHeader.textAndMnemonic=Tipo
-FileChooser.fileDateHeader.textAndMnemonic=Modificado
-FileChooser.fileAttrHeader.textAndMnemonic=Atributos
-FileChooser.saveButton.textAndMnemonic=Salvar
-FileChooser.openButton.textAndMnemonic=Abrir
-
-############ Used by MetalTitlePane if rendering window decorations############
-MetalTitlePane.restore.titleAndMnemonic=&Restaurar
-MetalTitlePane.iconify.titleAndMnemonic=&Minimizar
-MetalTitlePane.maximize.titleAndMnemonic=Ma&ximizar
-MetalTitlePane.close.titleAndMnemonic=&Fechar
diff --git a/ojluni/src/main/java/com/sun/swing/internal/plaf/metal/resources/metal_sv.properties b/ojluni/src/main/java/com/sun/swing/internal/plaf/metal/resources/metal_sv.properties
deleted file mode 100755
index 3d799b5..0000000
--- a/ojluni/src/main/java/com/sun/swing/internal/plaf/metal/resources/metal_sv.properties
+++ /dev/null
@@ -1,53 +0,0 @@
-# This properties file is used to create a PropertyResourceBundle
-# It contains Locale specific strings used be the Metal Look and Feel.
-# Currently, the following components need this for support:
-#
-#    FileChooser
-#
-# When this file is read in, the strings are put into the
-# defaults table.  This is an implementation detail of the current
-# workings of Swing.  DO NOT DEPEND ON THIS.
-# This may change in future versions of Swing as we improve localization
-# support.
-#
-# Refer to the note in basic.properties for a description as to what
-# the mnemonics correspond to and how to calculate them.
-#
-# @author Steve Wilson
-
-
-############ FILE CHOOSER STRINGS #############
-
-FileChooser.lookInLabel.textAndMnemonic=Leta &i:
-FileChooser.saveInLabel.textAndMnemonic=Spara i:
-FileChooser.fileNameLabel.textAndMnemonic=Fil&namn:
-FileChooser.folderNameLabel.textAndMnemonic=Mapp&namn:
-FileChooser.filesOfTypeLabel.textAndMnemonic=Mapp&namn:
-FileChooser.upFolderToolTip.textAndMnemonic=Upp en niv\u00E5
-FileChooser.upFolderAccessibleName=Upp
-FileChooser.homeFolderToolTip.textAndMnemonic=Hem
-FileChooser.homeFolderAccessibleName=Hem
-FileChooser.newFolderToolTip.textAndMnemonic=Skapa ny mapp
-FileChooser.newFolderAccessibleName=Ny mapp
-FileChooser.newFolderActionLabel.textAndMnemonic=Ny mapp
-FileChooser.listViewButtonToolTip.textAndMnemonic=Lista
-FileChooser.listViewButtonAccessibleName=Lista
-FileChooser.listViewActionLabel.textAndMnemonic=Lista
-FileChooser.detailsViewButtonToolTip.textAndMnemonic=Detaljer
-FileChooser.detailsViewButtonAccessibleName=Detaljer
-FileChooser.detailsViewActionLabel.textAndMnemonic=Detaljer
-FileChooser.refreshActionLabel.textAndMnemonic=F\u00F6rnya
-FileChooser.viewMenuLabel.textAndMnemonic=Vy
-FileChooser.fileNameHeader.textAndMnemonic=Namn
-FileChooser.fileSizeHeader.textAndMnemonic=Storlek
-FileChooser.fileTypeHeader.textAndMnemonic=Typ
-FileChooser.fileDateHeader.textAndMnemonic=\u00C4ndrad
-FileChooser.fileAttrHeader.textAndMnemonic=Attribut
-FileChooser.saveButton.textAndMnemonic=Spara
-FileChooser.openButton.textAndMnemonic=\u00D6ppna
-
-############ Used by MetalTitlePane if rendering window decorations############
-MetalTitlePane.restore.titleAndMnemonic=&\u00C5terst\u00E4ll
-MetalTitlePane.iconify.titleAndMnemonic=Minim&era
-MetalTitlePane.maximize.titleAndMnemonic=Ma&ximera
-MetalTitlePane.close.titleAndMnemonic=&St\u00E4ng
diff --git a/ojluni/src/main/java/com/sun/swing/internal/plaf/metal/resources/metal_zh_CN.properties b/ojluni/src/main/java/com/sun/swing/internal/plaf/metal/resources/metal_zh_CN.properties
deleted file mode 100755
index 2d6cf13..0000000
--- a/ojluni/src/main/java/com/sun/swing/internal/plaf/metal/resources/metal_zh_CN.properties
+++ /dev/null
@@ -1,53 +0,0 @@
-# This properties file is used to create a PropertyResourceBundle
-# It contains Locale specific strings used be the Metal Look and Feel.
-# Currently, the following components need this for support:
-#
-#    FileChooser
-#
-# When this file is read in, the strings are put into the
-# defaults table.  This is an implementation detail of the current
-# workings of Swing.  DO NOT DEPEND ON THIS.
-# This may change in future versions of Swing as we improve localization
-# support.
-#
-# Refer to the note in basic.properties for a description as to what
-# the mnemonics correspond to and how to calculate them.
-#
-# @author Steve Wilson
-
-
-############ FILE CHOOSER STRINGS #############
-
-FileChooser.lookInLabel.textAndMnemonic=\u67E5\u627E(&I):
-FileChooser.saveInLabel.textAndMnemonic=\u4FDD\u5B58: 
-FileChooser.fileNameLabel.textAndMnemonic=\u6587\u4EF6\u540D(&N):
-FileChooser.folderNameLabel.textAndMnemonic=\u6587\u4EF6\u5939\u540D(&N):
-FileChooser.filesOfTypeLabel.textAndMnemonic=\u6587\u4EF6\u7C7B\u578B(&T):
-FileChooser.upFolderToolTip.textAndMnemonic=\u5411\u4E0A\u4E00\u7EA7
-FileChooser.upFolderAccessibleName=\u5411\u4E0A
-FileChooser.homeFolderToolTip.textAndMnemonic=\u4E3B\u76EE\u5F55
-FileChooser.homeFolderAccessibleName=\u4E3B\u76EE\u5F55
-FileChooser.newFolderToolTip.textAndMnemonic=\u521B\u5EFA\u65B0\u6587\u4EF6\u5939
-FileChooser.newFolderAccessibleName=\u65B0\u5EFA\u6587\u4EF6\u5939
-FileChooser.newFolderActionLabel.textAndMnemonic=\u65B0\u5EFA\u6587\u4EF6\u5939
-FileChooser.listViewButtonToolTip.textAndMnemonic=\u5217\u8868
-FileChooser.listViewButtonAccessibleName=\u5217\u8868
-FileChooser.listViewActionLabel.textAndMnemonic=\u5217\u8868
-FileChooser.detailsViewButtonToolTip.textAndMnemonic=\u8BE6\u7EC6\u4FE1\u606F
-FileChooser.detailsViewButtonAccessibleName=\u8BE6\u7EC6\u4FE1\u606F
-FileChooser.detailsViewActionLabel.textAndMnemonic=\u8BE6\u7EC6\u4FE1\u606F
-FileChooser.refreshActionLabel.textAndMnemonic=\u5237\u65B0
-FileChooser.viewMenuLabel.textAndMnemonic=\u89C6\u56FE
-FileChooser.fileNameHeader.textAndMnemonic=\u540D\u79F0
-FileChooser.fileSizeHeader.textAndMnemonic=\u5927\u5C0F
-FileChooser.fileTypeHeader.textAndMnemonic=\u7C7B\u578B
-FileChooser.fileDateHeader.textAndMnemonic=\u4FEE\u6539\u65E5\u671F
-FileChooser.fileAttrHeader.textAndMnemonic=\u5C5E\u6027
-FileChooser.saveButton.textAndMnemonic=\u4FDD\u5B58
-FileChooser.openButton.textAndMnemonic=\u6253\u5F00
-
-############ Used by MetalTitlePane if rendering window decorations############
-MetalTitlePane.restore.titleAndMnemonic=\u8FD8\u539F(&R)
-MetalTitlePane.iconify.titleAndMnemonic=\u6700\u5C0F\u5316(&E)
-MetalTitlePane.maximize.titleAndMnemonic=\u6700\u5927\u5316(&X)
-MetalTitlePane.close.titleAndMnemonic=\u5173\u95ED(&C)
diff --git a/ojluni/src/main/java/com/sun/swing/internal/plaf/metal/resources/metal_zh_TW.properties b/ojluni/src/main/java/com/sun/swing/internal/plaf/metal/resources/metal_zh_TW.properties
deleted file mode 100755
index 1d2b826..0000000
--- a/ojluni/src/main/java/com/sun/swing/internal/plaf/metal/resources/metal_zh_TW.properties
+++ /dev/null
@@ -1,53 +0,0 @@
-# This properties file is used to create a PropertyResourceBundle
-# It contains Locale specific strings used be the Metal Look and Feel.
-# Currently, the following components need this for support:
-#
-#    FileChooser
-#
-# When this file is read in, the strings are put into the
-# defaults table.  This is an implementation detail of the current
-# workings of Swing.  DO NOT DEPEND ON THIS.
-# This may change in future versions of Swing as we improve localization
-# support.
-#
-# Refer to the note in basic.properties for a description as to what
-# the mnemonics correspond to and how to calculate them.
-#
-# @author Steve Wilson
-
-
-############ FILE CHOOSER STRINGS #############
-
-FileChooser.lookInLabel.textAndMnemonic=\u67E5\u8A62(&I):
-FileChooser.saveInLabel.textAndMnemonic=\u5132\u5B58\u65BC: 
-FileChooser.fileNameLabel.textAndMnemonic=\u6A94\u6848\u540D\u7A31(&N):
-FileChooser.folderNameLabel.textAndMnemonic=\u8CC7\u6599\u593E\u540D\u7A31(&N):
-FileChooser.filesOfTypeLabel.textAndMnemonic=\u6A94\u6848\u985E\u578B(&T):
-FileChooser.upFolderToolTip.textAndMnemonic=\u5F80\u4E0A\u4E00\u5C64
-FileChooser.upFolderAccessibleName=\u5F80\u4E0A
-FileChooser.homeFolderToolTip.textAndMnemonic=\u4E3B\u76EE\u9304
-FileChooser.homeFolderAccessibleName=\u4E3B\u76EE\u9304
-FileChooser.newFolderToolTip.textAndMnemonic=\u5EFA\u7ACB\u65B0\u8CC7\u6599\u593E
-FileChooser.newFolderAccessibleName=\u65B0\u8CC7\u6599\u593E
-FileChooser.newFolderActionLabel.textAndMnemonic=\u65B0\u8CC7\u6599\u593E
-FileChooser.listViewButtonToolTip.textAndMnemonic=\u6E05\u55AE
-FileChooser.listViewButtonAccessibleName=\u6E05\u55AE
-FileChooser.listViewActionLabel.textAndMnemonic=\u6E05\u55AE
-FileChooser.detailsViewButtonToolTip.textAndMnemonic=\u8A73\u7D30\u8CC7\u8A0A
-FileChooser.detailsViewButtonAccessibleName=\u8A73\u7D30\u8CC7\u8A0A
-FileChooser.detailsViewActionLabel.textAndMnemonic=\u8A73\u7D30\u8CC7\u8A0A
-FileChooser.refreshActionLabel.textAndMnemonic=\u91CD\u65B0\u6574\u7406
-FileChooser.viewMenuLabel.textAndMnemonic=\u6AA2\u8996
-FileChooser.fileNameHeader.textAndMnemonic=\u540D\u7A31
-FileChooser.fileSizeHeader.textAndMnemonic=\u5927\u5C0F
-FileChooser.fileTypeHeader.textAndMnemonic=\u985E\u578B
-FileChooser.fileDateHeader.textAndMnemonic=\u4FEE\u6539\u65E5\u671F
-FileChooser.fileAttrHeader.textAndMnemonic=\u5C6C\u6027
-FileChooser.saveButton.textAndMnemonic=\u5132\u5B58
-FileChooser.openButton.textAndMnemonic=\u958B\u555F
-
-############ Used by MetalTitlePane if rendering window decorations############
-MetalTitlePane.restore.titleAndMnemonic=\u56DE\u5FA9(&R)
-MetalTitlePane.iconify.titleAndMnemonic=\u6700\u5C0F\u5316(&E)
-MetalTitlePane.maximize.titleAndMnemonic=\u6700\u5927\u5316(&X)
-MetalTitlePane.close.titleAndMnemonic=\u95DC\u9589(&C)
diff --git a/ojluni/src/main/java/com/sun/swing/internal/plaf/synth/resources/synth.properties b/ojluni/src/main/java/com/sun/swing/internal/plaf/synth/resources/synth.properties
deleted file mode 100755
index 35d2356..0000000
--- a/ojluni/src/main/java/com/sun/swing/internal/plaf/synth/resources/synth.properties
+++ /dev/null
@@ -1,45 +0,0 @@
-# This properties file is used to create a PropertyResourceBundle

-# It contains Locale specific strings used be the Synth Look and Feel.

-# Currently, the following components need this for support:

-#

-#    FileChooser

-#

-# When this file is read in, the strings are put into the

-# defaults table.  This is an implementation detail of the current

-# workings of Swing.  DO NOT DEPEND ON THIS.

-# This may change in future versions of Swing as we improve localization

-# support.

-#

-# Refer to the note in basic.properties for a description as to what

-# the mnemonics correspond to and how to calculate them.

-#

-# @author Steve Wilson

-

-

-############ FILE CHOOSER STRINGS #############

-

-FileChooser.lookInLabel.textAndMnemonic=Look &In:

-FileChooser.saveInLabel.textAndMnemonic=Save In:

-FileChooser.fileNameLabel.textAndMnemonic=File &Name:

-FileChooser.folderNameLabel.textAndMnemonic=Folder &Name:

-FileChooser.filesOfTypeLabel.textAndMnemonic=Files of &Type:

-FileChooser.upFolderToolTip.textAndMnemonic=Up One Level

-FileChooser.upFolderAccessibleName=Up

-FileChooser.homeFolderToolTip.textAndMnemonic=Home

-FileChooser.homeFolderAccessibleName=Home

-FileChooser.newFolderToolTip.textAndMnemonic=Create New Folder

-FileChooser.newFolderAccessibleName=New Folder

-FileChooser.newFolderActionLabel.textAndMnemonic=New Folder

-FileChooser.listViewButtonToolTip.textAndMnemonic=List

-FileChooser.listViewButtonAccessibleName=List

-FileChooser.listViewActionLabel.textAndMnemonic=List

-FileChooser.detailsViewButtonToolTip.textAndMnemonic=Details

-FileChooser.detailsViewButtonAccessibleName=Details

-FileChooser.detailsViewActionLabel.textAndMnemonic=Details

-FileChooser.refreshActionLabel.textAndMnemonic=Refresh

-FileChooser.viewMenuLabel.textAndMnemonic=View

-FileChooser.fileNameHeader.textAndMnemonic=Name

-FileChooser.fileSizeHeader.textAndMnemonic=Size

-FileChooser.fileTypeHeader.textAndMnemonic=Type

-FileChooser.fileDateHeader.textAndMnemonic=Modified

-FileChooser.fileAttrHeader.textAndMnemonic=Attributes

diff --git a/ojluni/src/main/java/com/sun/swing/internal/plaf/synth/resources/synth_de.properties b/ojluni/src/main/java/com/sun/swing/internal/plaf/synth/resources/synth_de.properties
deleted file mode 100755
index fe3d60e..0000000
--- a/ojluni/src/main/java/com/sun/swing/internal/plaf/synth/resources/synth_de.properties
+++ /dev/null
@@ -1,45 +0,0 @@
-# This properties file is used to create a PropertyResourceBundle
-# It contains Locale specific strings used be the Synth Look and Feel.
-# Currently, the following components need this for support:
-#
-#    FileChooser
-#
-# When this file is read in, the strings are put into the
-# defaults table.  This is an implementation detail of the current
-# workings of Swing.  DO NOT DEPEND ON THIS.
-# This may change in future versions of Swing as we improve localization
-# support.
-#
-# Refer to the note in basic.properties for a description as to what
-# the mnemonics correspond to and how to calculate them.
-#
-# @author Steve Wilson
-
-
-############ FILE CHOOSER STRINGS #############
-
-FileChooser.lookInLabel.textAndMnemonic=Suchen &in:
-FileChooser.saveInLabel.textAndMnemonic=Speichern in:
-FileChooser.fileNameLabel.textAndMnemonic=&Dateiname:
-FileChooser.folderNameLabel.textAndMnemonic=&Ordnername:
-FileChooser.filesOfTypeLabel.textAndMnemonic=Datei&typ:
-FileChooser.upFolderToolTip.textAndMnemonic=Eine Ebene h\u00F6her
-FileChooser.upFolderAccessibleName=Nach oben
-FileChooser.homeFolderToolTip.textAndMnemonic=Home
-FileChooser.homeFolderAccessibleName=Home
-FileChooser.newFolderToolTip.textAndMnemonic=Neuen Ordner erstellen
-FileChooser.newFolderAccessibleName=Neuer Ordner
-FileChooser.newFolderActionLabel.textAndMnemonic=Neuer Ordner
-FileChooser.listViewButtonToolTip.textAndMnemonic=Liste
-FileChooser.listViewButtonAccessibleName=Liste
-FileChooser.listViewActionLabel.textAndMnemonic=Liste
-FileChooser.detailsViewButtonToolTip.textAndMnemonic=Details
-FileChooser.detailsViewButtonAccessibleName=Details
-FileChooser.detailsViewActionLabel.textAndMnemonic=Details
-FileChooser.refreshActionLabel.textAndMnemonic=Aktualisieren
-FileChooser.viewMenuLabel.textAndMnemonic=Ansicht
-FileChooser.fileNameHeader.textAndMnemonic=Name
-FileChooser.fileSizeHeader.textAndMnemonic=Gr\u00F6\u00DFe
-FileChooser.fileTypeHeader.textAndMnemonic=Typ
-FileChooser.fileDateHeader.textAndMnemonic=Ge\u00E4ndert
-FileChooser.fileAttrHeader.textAndMnemonic=Attribute
diff --git a/ojluni/src/main/java/com/sun/swing/internal/plaf/synth/resources/synth_es.properties b/ojluni/src/main/java/com/sun/swing/internal/plaf/synth/resources/synth_es.properties
deleted file mode 100755
index d4390fd..0000000
--- a/ojluni/src/main/java/com/sun/swing/internal/plaf/synth/resources/synth_es.properties
+++ /dev/null
@@ -1,45 +0,0 @@
-# This properties file is used to create a PropertyResourceBundle
-# It contains Locale specific strings used be the Synth Look and Feel.
-# Currently, the following components need this for support:
-#
-#    FileChooser
-#
-# When this file is read in, the strings are put into the
-# defaults table.  This is an implementation detail of the current
-# workings of Swing.  DO NOT DEPEND ON THIS.
-# This may change in future versions of Swing as we improve localization
-# support.
-#
-# Refer to the note in basic.properties for a description as to what
-# the mnemonics correspond to and how to calculate them.
-#
-# @author Steve Wilson
-
-
-############ FILE CHOOSER STRINGS #############
-
-FileChooser.lookInLabel.textAndMnemonic=&Buscar en:
-FileChooser.saveInLabel.textAndMnemonic=Guardar en:
-FileChooser.fileNameLabel.textAndMnemonic=&Nombre de archivo:
-FileChooser.folderNameLabel.textAndMnemonic=&Nombre de carpeta:
-FileChooser.filesOfTypeLabel.textAndMnemonic=Archivos de &tipo:
-FileChooser.upFolderToolTip.textAndMnemonic=Subir un Nivel
-FileChooser.upFolderAccessibleName=Arriba
-FileChooser.homeFolderToolTip.textAndMnemonic=Inicio
-FileChooser.homeFolderAccessibleName=Inicio
-FileChooser.newFolderToolTip.textAndMnemonic=Crear Nueva Carpeta
-FileChooser.newFolderAccessibleName=Nueva Carpeta
-FileChooser.newFolderActionLabel.textAndMnemonic=Nueva Carpeta
-FileChooser.listViewButtonToolTip.textAndMnemonic=Lista
-FileChooser.listViewButtonAccessibleName=Lista
-FileChooser.listViewActionLabel.textAndMnemonic=Lista
-FileChooser.detailsViewButtonToolTip.textAndMnemonic=Detalles
-FileChooser.detailsViewButtonAccessibleName=Detalles
-FileChooser.detailsViewActionLabel.textAndMnemonic=Detalles
-FileChooser.refreshActionLabel.textAndMnemonic=Refrescar
-FileChooser.viewMenuLabel.textAndMnemonic=Ver
-FileChooser.fileNameHeader.textAndMnemonic=Nombre
-FileChooser.fileSizeHeader.textAndMnemonic=Tama\u00F1o
-FileChooser.fileTypeHeader.textAndMnemonic=Tipo
-FileChooser.fileDateHeader.textAndMnemonic=Modificado
-FileChooser.fileAttrHeader.textAndMnemonic=Atributos
diff --git a/ojluni/src/main/java/com/sun/swing/internal/plaf/synth/resources/synth_fr.properties b/ojluni/src/main/java/com/sun/swing/internal/plaf/synth/resources/synth_fr.properties
deleted file mode 100755
index a21072d..0000000
--- a/ojluni/src/main/java/com/sun/swing/internal/plaf/synth/resources/synth_fr.properties
+++ /dev/null
@@ -1,45 +0,0 @@
-# This properties file is used to create a PropertyResourceBundle
-# It contains Locale specific strings used be the Synth Look and Feel.
-# Currently, the following components need this for support:
-#
-#    FileChooser
-#
-# When this file is read in, the strings are put into the
-# defaults table.  This is an implementation detail of the current
-# workings of Swing.  DO NOT DEPEND ON THIS.
-# This may change in future versions of Swing as we improve localization
-# support.
-#
-# Refer to the note in basic.properties for a description as to what
-# the mnemonics correspond to and how to calculate them.
-#
-# @author Steve Wilson
-
-
-############ FILE CHOOSER STRINGS #############
-
-FileChooser.lookInLabel.textAndMnemonic=Rechercher &dans :
-FileChooser.saveInLabel.textAndMnemonic=Enregistrer dans :
-FileChooser.fileNameLabel.textAndMnemonic=&Nom du fichier :
-FileChooser.folderNameLabel.textAndMnemonic=&Nom du dossier :
-FileChooser.filesOfTypeLabel.textAndMnemonic=&Type de fichier :
-FileChooser.upFolderToolTip.textAndMnemonic=Remonte d'un niveau.
-FileChooser.upFolderAccessibleName=Monter
-FileChooser.homeFolderToolTip.textAndMnemonic=R\u00E9pertoire d'origine
-FileChooser.homeFolderAccessibleName=R\u00E9pertoire d'origine
-FileChooser.newFolderToolTip.textAndMnemonic=Cr\u00E9e un dossier.
-FileChooser.newFolderAccessibleName=Nouveau dossier
-FileChooser.newFolderActionLabel.textAndMnemonic=Nouveau dossier
-FileChooser.listViewButtonToolTip.textAndMnemonic=Liste
-FileChooser.listViewButtonAccessibleName=Liste
-FileChooser.listViewActionLabel.textAndMnemonic=Liste
-FileChooser.detailsViewButtonToolTip.textAndMnemonic=D\u00E9tails
-FileChooser.detailsViewButtonAccessibleName=D\u00E9tails
-FileChooser.detailsViewActionLabel.textAndMnemonic=D\u00E9tails
-FileChooser.refreshActionLabel.textAndMnemonic=Actualiser
-FileChooser.viewMenuLabel.textAndMnemonic=Affichage
-FileChooser.fileNameHeader.textAndMnemonic=Nom
-FileChooser.fileSizeHeader.textAndMnemonic=Taille
-FileChooser.fileTypeHeader.textAndMnemonic=Type
-FileChooser.fileDateHeader.textAndMnemonic=Modifi\u00E9
-FileChooser.fileAttrHeader.textAndMnemonic=Attributs
diff --git a/ojluni/src/main/java/com/sun/swing/internal/plaf/synth/resources/synth_it.properties b/ojluni/src/main/java/com/sun/swing/internal/plaf/synth/resources/synth_it.properties
deleted file mode 100755
index f2173e7..0000000
--- a/ojluni/src/main/java/com/sun/swing/internal/plaf/synth/resources/synth_it.properties
+++ /dev/null
@@ -1,45 +0,0 @@
-# This properties file is used to create a PropertyResourceBundle
-# It contains Locale specific strings used be the Synth Look and Feel.
-# Currently, the following components need this for support:
-#
-#    FileChooser
-#
-# When this file is read in, the strings are put into the
-# defaults table.  This is an implementation detail of the current
-# workings of Swing.  DO NOT DEPEND ON THIS.
-# This may change in future versions of Swing as we improve localization
-# support.
-#
-# Refer to the note in basic.properties for a description as to what
-# the mnemonics correspond to and how to calculate them.
-#
-# @author Steve Wilson
-
-
-############ FILE CHOOSER STRINGS #############
-
-FileChooser.lookInLabel.textAndMnemonic=Cerca &in:
-FileChooser.saveInLabel.textAndMnemonic=Salva in:
-FileChooser.fileNameLabel.textAndMnemonic=&Nome file:
-FileChooser.folderNameLabel.textAndMnemonic=&Nome cartella:
-FileChooser.filesOfTypeLabel.textAndMnemonic=&Tipo di file:
-FileChooser.upFolderToolTip.textAndMnemonic=Cartella superiore
-FileChooser.upFolderAccessibleName=Superiore
-FileChooser.homeFolderToolTip.textAndMnemonic=Home
-FileChooser.homeFolderAccessibleName=Home
-FileChooser.newFolderToolTip.textAndMnemonic=Crea nuova cartella
-FileChooser.newFolderAccessibleName=Nuova cartella
-FileChooser.newFolderActionLabel.textAndMnemonic=Nuova cartella
-FileChooser.listViewButtonToolTip.textAndMnemonic=Lista
-FileChooser.listViewButtonAccessibleName=Lista
-FileChooser.listViewActionLabel.textAndMnemonic=Lista
-FileChooser.detailsViewButtonToolTip.textAndMnemonic=Dettagli
-FileChooser.detailsViewButtonAccessibleName=Dettagli
-FileChooser.detailsViewActionLabel.textAndMnemonic=Dettagli
-FileChooser.refreshActionLabel.textAndMnemonic=Aggiorna
-FileChooser.viewMenuLabel.textAndMnemonic=Visualizza
-FileChooser.fileNameHeader.textAndMnemonic=Nome
-FileChooser.fileSizeHeader.textAndMnemonic=Dimensioni
-FileChooser.fileTypeHeader.textAndMnemonic=Tipo
-FileChooser.fileDateHeader.textAndMnemonic=Modificato
-FileChooser.fileAttrHeader.textAndMnemonic=Attributi
diff --git a/ojluni/src/main/java/com/sun/swing/internal/plaf/synth/resources/synth_ja.properties b/ojluni/src/main/java/com/sun/swing/internal/plaf/synth/resources/synth_ja.properties
deleted file mode 100755
index ab6bd11..0000000
--- a/ojluni/src/main/java/com/sun/swing/internal/plaf/synth/resources/synth_ja.properties
+++ /dev/null
@@ -1,45 +0,0 @@
-# This properties file is used to create a PropertyResourceBundle
-# It contains Locale specific strings used be the Synth Look and Feel.
-# Currently, the following components need this for support:
-#
-#    FileChooser
-#
-# When this file is read in, the strings are put into the
-# defaults table.  This is an implementation detail of the current
-# workings of Swing.  DO NOT DEPEND ON THIS.
-# This may change in future versions of Swing as we improve localization
-# support.
-#
-# Refer to the note in basic.properties for a description as to what
-# the mnemonics correspond to and how to calculate them.
-#
-# @author Steve Wilson
-
-
-############ FILE CHOOSER STRINGS #############
-
-FileChooser.lookInLabel.textAndMnemonic=\u30D5\u30A1\u30A4\u30EB\u306E\u5834\u6240(&I):
-FileChooser.saveInLabel.textAndMnemonic=\u4FDD\u5B58:
-FileChooser.fileNameLabel.textAndMnemonic=\u30D5\u30A1\u30A4\u30EB\u540D(&N):
-FileChooser.folderNameLabel.textAndMnemonic=\u30D5\u30A9\u30EB\u30C0\u540D(&N):
-FileChooser.filesOfTypeLabel.textAndMnemonic=\u30D5\u30A1\u30A4\u30EB\u306E\u30BF\u30A4\u30D7(&T):
-FileChooser.upFolderToolTip.textAndMnemonic=1\u30EC\u30D9\u30EB\u4E0A\u3078
-FileChooser.upFolderAccessibleName=\u4E0A\u3078
-FileChooser.homeFolderToolTip.textAndMnemonic=\u30DB\u30FC\u30E0
-FileChooser.homeFolderAccessibleName=\u30DB\u30FC\u30E0
-FileChooser.newFolderToolTip.textAndMnemonic=\u65B0\u898F\u30D5\u30A9\u30EB\u30C0\u306E\u4F5C\u6210
-FileChooser.newFolderAccessibleName=\u65B0\u898F\u30D5\u30A9\u30EB\u30C0
-FileChooser.newFolderActionLabel.textAndMnemonic=\u65B0\u898F\u30D5\u30A9\u30EB\u30C0
-FileChooser.listViewButtonToolTip.textAndMnemonic=\u30EA\u30B9\u30C8
-FileChooser.listViewButtonAccessibleName=\u30EA\u30B9\u30C8
-FileChooser.listViewActionLabel.textAndMnemonic=\u30EA\u30B9\u30C8
-FileChooser.detailsViewButtonToolTip.textAndMnemonic=\u8A73\u7D30
-FileChooser.detailsViewButtonAccessibleName=\u8A73\u7D30
-FileChooser.detailsViewActionLabel.textAndMnemonic=\u8A73\u7D30
-FileChooser.refreshActionLabel.textAndMnemonic=\u30EA\u30D5\u30EC\u30C3\u30B7\u30E5
-FileChooser.viewMenuLabel.textAndMnemonic=\u8868\u793A
-FileChooser.fileNameHeader.textAndMnemonic=\u540D\u524D
-FileChooser.fileSizeHeader.textAndMnemonic=\u30B5\u30A4\u30BA
-FileChooser.fileTypeHeader.textAndMnemonic=\u30BF\u30A4\u30D7
-FileChooser.fileDateHeader.textAndMnemonic=\u4FEE\u6B63\u65E5
-FileChooser.fileAttrHeader.textAndMnemonic=\u5C5E\u6027
diff --git a/ojluni/src/main/java/com/sun/swing/internal/plaf/synth/resources/synth_ko.properties b/ojluni/src/main/java/com/sun/swing/internal/plaf/synth/resources/synth_ko.properties
deleted file mode 100755
index d106464..0000000
--- a/ojluni/src/main/java/com/sun/swing/internal/plaf/synth/resources/synth_ko.properties
+++ /dev/null
@@ -1,45 +0,0 @@
-# This properties file is used to create a PropertyResourceBundle
-# It contains Locale specific strings used be the Synth Look and Feel.
-# Currently, the following components need this for support:
-#
-#    FileChooser
-#
-# When this file is read in, the strings are put into the
-# defaults table.  This is an implementation detail of the current
-# workings of Swing.  DO NOT DEPEND ON THIS.
-# This may change in future versions of Swing as we improve localization
-# support.
-#
-# Refer to the note in basic.properties for a description as to what
-# the mnemonics correspond to and how to calculate them.
-#
-# @author Steve Wilson
-
-
-############ FILE CHOOSER STRINGS #############
-
-FileChooser.lookInLabel.textAndMnemonic=\uCC3E\uB294 \uC704\uCE58(&I):
-FileChooser.saveInLabel.textAndMnemonic=\uC800\uC7A5 \uC704\uCE58:
-FileChooser.fileNameLabel.textAndMnemonic=\uD30C\uC77C \uC774\uB984(&N):
-FileChooser.folderNameLabel.textAndMnemonic=\uD3F4\uB354 \uC774\uB984(&N):
-FileChooser.filesOfTypeLabel.textAndMnemonic=\uD30C\uC77C \uC720\uD615(&T):
-FileChooser.upFolderToolTip.textAndMnemonic=\uD55C \uB808\uBCA8 \uC704\uB85C
-FileChooser.upFolderAccessibleName=\uC704\uB85C
-FileChooser.homeFolderToolTip.textAndMnemonic=\uD648
-FileChooser.homeFolderAccessibleName=\uD648
-FileChooser.newFolderToolTip.textAndMnemonic=\uC0C8 \uD3F4\uB354 \uC0DD\uC131
-FileChooser.newFolderAccessibleName=\uC0C8 \uD3F4\uB354
-FileChooser.newFolderActionLabel.textAndMnemonic=\uC0C8 \uD3F4\uB354
-FileChooser.listViewButtonToolTip.textAndMnemonic=\uBAA9\uB85D
-FileChooser.listViewButtonAccessibleName=\uBAA9\uB85D
-FileChooser.listViewActionLabel.textAndMnemonic=\uBAA9\uB85D
-FileChooser.detailsViewButtonToolTip.textAndMnemonic=\uC138\uBD80 \uC815\uBCF4
-FileChooser.detailsViewButtonAccessibleName=\uC138\uBD80 \uC815\uBCF4
-FileChooser.detailsViewActionLabel.textAndMnemonic=\uC138\uBD80 \uC815\uBCF4
-FileChooser.refreshActionLabel.textAndMnemonic=\uC0C8\uB85C \uACE0\uCE68
-FileChooser.viewMenuLabel.textAndMnemonic=\uBCF4\uAE30
-FileChooser.fileNameHeader.textAndMnemonic=\uC774\uB984
-FileChooser.fileSizeHeader.textAndMnemonic=\uD06C\uAE30
-FileChooser.fileTypeHeader.textAndMnemonic=\uC720\uD615
-FileChooser.fileDateHeader.textAndMnemonic=\uC218\uC815 \uB0A0\uC9DC
-FileChooser.fileAttrHeader.textAndMnemonic=\uC18D\uC131
diff --git a/ojluni/src/main/java/com/sun/swing/internal/plaf/synth/resources/synth_pt_BR.properties b/ojluni/src/main/java/com/sun/swing/internal/plaf/synth/resources/synth_pt_BR.properties
deleted file mode 100755
index 995bdeb..0000000
--- a/ojluni/src/main/java/com/sun/swing/internal/plaf/synth/resources/synth_pt_BR.properties
+++ /dev/null
@@ -1,45 +0,0 @@
-# This properties file is used to create a PropertyResourceBundle
-# It contains Locale specific strings used be the Synth Look and Feel.
-# Currently, the following components need this for support:
-#
-#    FileChooser
-#
-# When this file is read in, the strings are put into the
-# defaults table.  This is an implementation detail of the current
-# workings of Swing.  DO NOT DEPEND ON THIS.
-# This may change in future versions of Swing as we improve localization
-# support.
-#
-# Refer to the note in basic.properties for a description as to what
-# the mnemonics correspond to and how to calculate them.
-#
-# @author Steve Wilson
-
-
-############ FILE CHOOSER STRINGS #############
-
-FileChooser.lookInLabel.textAndMnemonic=Pesquisar &em:
-FileChooser.saveInLabel.textAndMnemonic=Salvar Em:
-FileChooser.fileNameLabel.textAndMnemonic=&Nome do Arquivo:
-FileChooser.folderNameLabel.textAndMnemonic=&Nome da Pasta:
-FileChooser.filesOfTypeLabel.textAndMnemonic=Arquivos do &Tipo:
-FileChooser.upFolderToolTip.textAndMnemonic=Um N\u00EDvel Acima
-FileChooser.upFolderAccessibleName=Acima
-FileChooser.homeFolderToolTip.textAndMnemonic=In\u00EDcio
-FileChooser.homeFolderAccessibleName=In\u00EDcio
-FileChooser.newFolderToolTip.textAndMnemonic=Criar Nova Pasta
-FileChooser.newFolderAccessibleName=Nova Pasta
-FileChooser.newFolderActionLabel.textAndMnemonic=Nova Pasta
-FileChooser.listViewButtonToolTip.textAndMnemonic=Lista
-FileChooser.listViewButtonAccessibleName=Lista
-FileChooser.listViewActionLabel.textAndMnemonic=Lista
-FileChooser.detailsViewButtonToolTip.textAndMnemonic=Detalhes
-FileChooser.detailsViewButtonAccessibleName=Detalhes
-FileChooser.detailsViewActionLabel.textAndMnemonic=Detalhes
-FileChooser.refreshActionLabel.textAndMnemonic=Atualizar
-FileChooser.viewMenuLabel.textAndMnemonic=Exibir
-FileChooser.fileNameHeader.textAndMnemonic=Nome
-FileChooser.fileSizeHeader.textAndMnemonic=Tamanho
-FileChooser.fileTypeHeader.textAndMnemonic=Tipo
-FileChooser.fileDateHeader.textAndMnemonic=Modificado
-FileChooser.fileAttrHeader.textAndMnemonic=Atributos
diff --git a/ojluni/src/main/java/com/sun/swing/internal/plaf/synth/resources/synth_sv.properties b/ojluni/src/main/java/com/sun/swing/internal/plaf/synth/resources/synth_sv.properties
deleted file mode 100755
index 6c91f5a..0000000
--- a/ojluni/src/main/java/com/sun/swing/internal/plaf/synth/resources/synth_sv.properties
+++ /dev/null
@@ -1,45 +0,0 @@
-# This properties file is used to create a PropertyResourceBundle
-# It contains Locale specific strings used be the Synth Look and Feel.
-# Currently, the following components need this for support:
-#
-#    FileChooser
-#
-# When this file is read in, the strings are put into the
-# defaults table.  This is an implementation detail of the current
-# workings of Swing.  DO NOT DEPEND ON THIS.
-# This may change in future versions of Swing as we improve localization
-# support.
-#
-# Refer to the note in basic.properties for a description as to what
-# the mnemonics correspond to and how to calculate them.
-#
-# @author Steve Wilson
-
-
-############ FILE CHOOSER STRINGS #############
-
-FileChooser.lookInLabel.textAndMnemonic=Leta &i:
-FileChooser.saveInLabel.textAndMnemonic=Spara i:
-FileChooser.fileNameLabel.textAndMnemonic=Fil&namn:
-FileChooser.folderNameLabel.textAndMnemonic=Mapp&namn:
-FileChooser.filesOfTypeLabel.textAndMnemonic=Filer av &typ:
-FileChooser.upFolderToolTip.textAndMnemonic=Upp en niv\u00E5
-FileChooser.upFolderAccessibleName=Upp
-FileChooser.homeFolderToolTip.textAndMnemonic=Hem
-FileChooser.homeFolderAccessibleName=Hem
-FileChooser.newFolderToolTip.textAndMnemonic=Skapa ny mapp
-FileChooser.newFolderAccessibleName=Ny mapp
-FileChooser.newFolderActionLabel.textAndMnemonic=Ny mapp
-FileChooser.listViewButtonToolTip.textAndMnemonic=Lista
-FileChooser.listViewButtonAccessibleName=Lista
-FileChooser.listViewActionLabel.textAndMnemonic=Lista
-FileChooser.detailsViewButtonToolTip.textAndMnemonic=Detaljer
-FileChooser.detailsViewButtonAccessibleName=Detaljer
-FileChooser.detailsViewActionLabel.textAndMnemonic=Detaljer
-FileChooser.refreshActionLabel.textAndMnemonic=F\u00F6rnya
-FileChooser.viewMenuLabel.textAndMnemonic=Vy
-FileChooser.fileNameHeader.textAndMnemonic=Namn
-FileChooser.fileSizeHeader.textAndMnemonic=Storlek
-FileChooser.fileTypeHeader.textAndMnemonic=Typ
-FileChooser.fileDateHeader.textAndMnemonic=\u00C4ndrad
-FileChooser.fileAttrHeader.textAndMnemonic=Attribut
diff --git a/ojluni/src/main/java/com/sun/swing/internal/plaf/synth/resources/synth_zh_CN.properties b/ojluni/src/main/java/com/sun/swing/internal/plaf/synth/resources/synth_zh_CN.properties
deleted file mode 100755
index f9d976f..0000000
--- a/ojluni/src/main/java/com/sun/swing/internal/plaf/synth/resources/synth_zh_CN.properties
+++ /dev/null
@@ -1,45 +0,0 @@
-# This properties file is used to create a PropertyResourceBundle
-# It contains Locale specific strings used be the Synth Look and Feel.
-# Currently, the following components need this for support:
-#
-#    FileChooser
-#
-# When this file is read in, the strings are put into the
-# defaults table.  This is an implementation detail of the current
-# workings of Swing.  DO NOT DEPEND ON THIS.
-# This may change in future versions of Swing as we improve localization
-# support.
-#
-# Refer to the note in basic.properties for a description as to what
-# the mnemonics correspond to and how to calculate them.
-#
-# @author Steve Wilson
-
-
-############ FILE CHOOSER STRINGS #############
-
-FileChooser.lookInLabel.textAndMnemonic=\u67E5\u627E(&I):
-FileChooser.saveInLabel.textAndMnemonic=\u4FDD\u5B58: 
-FileChooser.fileNameLabel.textAndMnemonic=\u6587\u4EF6\u540D(&N):
-FileChooser.folderNameLabel.textAndMnemonic=\u6587\u4EF6\u5939\u540D(&N):
-FileChooser.filesOfTypeLabel.textAndMnemonic=\u6587\u4EF6\u7C7B\u578B(&T):
-FileChooser.upFolderToolTip.textAndMnemonic=\u5411\u4E0A\u4E00\u7EA7
-FileChooser.upFolderAccessibleName=\u5411\u4E0A
-FileChooser.homeFolderToolTip.textAndMnemonic=\u4E3B\u76EE\u5F55
-FileChooser.homeFolderAccessibleName=\u4E3B\u76EE\u5F55
-FileChooser.newFolderToolTip.textAndMnemonic=\u521B\u5EFA\u65B0\u6587\u4EF6\u5939
-FileChooser.newFolderAccessibleName=\u65B0\u5EFA\u6587\u4EF6\u5939
-FileChooser.newFolderActionLabel.textAndMnemonic=\u65B0\u5EFA\u6587\u4EF6\u5939
-FileChooser.listViewButtonToolTip.textAndMnemonic=\u5217\u8868
-FileChooser.listViewButtonAccessibleName=\u5217\u8868
-FileChooser.listViewActionLabel.textAndMnemonic=\u5217\u8868
-FileChooser.detailsViewButtonToolTip.textAndMnemonic=\u8BE6\u7EC6\u4FE1\u606F
-FileChooser.detailsViewButtonAccessibleName=\u8BE6\u7EC6\u4FE1\u606F
-FileChooser.detailsViewActionLabel.textAndMnemonic=\u8BE6\u7EC6\u4FE1\u606F
-FileChooser.refreshActionLabel.textAndMnemonic=\u5237\u65B0
-FileChooser.viewMenuLabel.textAndMnemonic=\u89C6\u56FE
-FileChooser.fileNameHeader.textAndMnemonic=\u540D\u79F0
-FileChooser.fileSizeHeader.textAndMnemonic=\u5927\u5C0F
-FileChooser.fileTypeHeader.textAndMnemonic=\u7C7B\u578B
-FileChooser.fileDateHeader.textAndMnemonic=\u4FEE\u6539\u65E5\u671F
-FileChooser.fileAttrHeader.textAndMnemonic=\u5C5E\u6027
diff --git a/ojluni/src/main/java/com/sun/swing/internal/plaf/synth/resources/synth_zh_TW.properties b/ojluni/src/main/java/com/sun/swing/internal/plaf/synth/resources/synth_zh_TW.properties
deleted file mode 100755
index 60d8410..0000000
--- a/ojluni/src/main/java/com/sun/swing/internal/plaf/synth/resources/synth_zh_TW.properties
+++ /dev/null
@@ -1,45 +0,0 @@
-# This properties file is used to create a PropertyResourceBundle
-# It contains Locale specific strings used be the Synth Look and Feel.
-# Currently, the following components need this for support:
-#
-#    FileChooser
-#
-# When this file is read in, the strings are put into the
-# defaults table.  This is an implementation detail of the current
-# workings of Swing.  DO NOT DEPEND ON THIS.
-# This may change in future versions of Swing as we improve localization
-# support.
-#
-# Refer to the note in basic.properties for a description as to what
-# the mnemonics correspond to and how to calculate them.
-#
-# @author Steve Wilson
-
-
-############ FILE CHOOSER STRINGS #############
-
-FileChooser.lookInLabel.textAndMnemonic=\u67E5\u8A62(&I):
-FileChooser.saveInLabel.textAndMnemonic=\u5132\u5B58\u65BC: 
-FileChooser.fileNameLabel.textAndMnemonic=\u6A94\u6848\u540D\u7A31(&N):
-FileChooser.folderNameLabel.textAndMnemonic=\u8CC7\u6599\u593E\u540D\u7A31(&N):
-FileChooser.filesOfTypeLabel.textAndMnemonic=\u6A94\u6848\u985E\u578B(&T):
-FileChooser.upFolderToolTip.textAndMnemonic=\u5F80\u4E0A\u4E00\u5C64
-FileChooser.upFolderAccessibleName=\u5F80\u4E0A
-FileChooser.homeFolderToolTip.textAndMnemonic=\u4E3B\u76EE\u9304
-FileChooser.homeFolderAccessibleName=\u4E3B\u76EE\u9304
-FileChooser.newFolderToolTip.textAndMnemonic=\u5EFA\u7ACB\u65B0\u8CC7\u6599\u593E
-FileChooser.newFolderAccessibleName=\u65B0\u8CC7\u6599\u593E
-FileChooser.newFolderActionLabel.textAndMnemonic=\u65B0\u8CC7\u6599\u593E
-FileChooser.listViewButtonToolTip.textAndMnemonic=\u6E05\u55AE
-FileChooser.listViewButtonAccessibleName=\u6E05\u55AE
-FileChooser.listViewActionLabel.textAndMnemonic=\u6E05\u55AE
-FileChooser.detailsViewButtonToolTip.textAndMnemonic=\u8A73\u7D30\u8CC7\u8A0A
-FileChooser.detailsViewButtonAccessibleName=\u8A73\u7D30\u8CC7\u8A0A
-FileChooser.detailsViewActionLabel.textAndMnemonic=\u8A73\u7D30\u8CC7\u8A0A
-FileChooser.refreshActionLabel.textAndMnemonic=\u91CD\u65B0\u6574\u7406
-FileChooser.viewMenuLabel.textAndMnemonic=\u6AA2\u8996
-FileChooser.fileNameHeader.textAndMnemonic=\u540D\u7A31
-FileChooser.fileSizeHeader.textAndMnemonic=\u5927\u5C0F
-FileChooser.fileTypeHeader.textAndMnemonic=\u985E\u578B
-FileChooser.fileDateHeader.textAndMnemonic=\u4FEE\u6539\u65E5\u671F
-FileChooser.fileAttrHeader.textAndMnemonic=\u5C6C\u6027
diff --git a/ojluni/src/main/java/com/sun/tools/attach/AgentInitializationException.java b/ojluni/src/main/java/com/sun/tools/attach/AgentInitializationException.java
deleted file mode 100755
index 5f241b4..0000000
--- a/ojluni/src/main/java/com/sun/tools/attach/AgentInitializationException.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Copyright (c) 2005, 2006, 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.tools.attach;
-
-/**
- * The exception thrown when an agent fails to initialize in the target
- * Java virtual machine.
- *
- * <p> This exception is thrown by {@link
- * com.sun.tools.attach.VirtualMachine#loadAgent VirtualMachine.loadAgent},
- * {@link com.sun.tools.attach.VirtualMachine#loadAgentLibrary
- * VirtualMachine.loadAgentLibrary}, {@link
- * com.sun.tools.attach.VirtualMachine#loadAgentPath VirtualMachine.loadAgentPath}
- * methods if an agent, or agent library, cannot be initialized.
- * When thrown by <tt>VirtualMachine.loadAgentLibrary</tt>, or
- * <tt>VirtualMachine.loadAgentPath</tt> then the exception encapsulates
- * the error returned by the agent's <code>Agent_OnAttach</code> function.
- * This error code can be obtained by invoking the {@link #returnValue() returnValue} method.
- */
-public class AgentInitializationException extends Exception {
-
-    /** use serialVersionUID for interoperability */
-    static final long serialVersionUID = -1508756333332806353L;
-
-    private int returnValue;
-
-    /**
-     * Constructs an <code>AgentInitializationException</code> with
-     * no detail message.
-     */
-    public AgentInitializationException() {
-        super();
-        this.returnValue = 0;
-    }
-
-    /**
-     * Constructs an <code>AgentInitializationException</code> with
-     * the specified detail message.
-     *
-     * @param   s   the detail message.
-     */
-    public AgentInitializationException(String s) {
-        super(s);
-        this.returnValue = 0;
-    }
-
-    /**
-     * Constructs an <code>AgentInitializationException</code> with
-     * the specified detail message and the return value from the
-     * execution of the agent's <code>Agent_OnAttach</code> function.
-     *
-     * @param   s               the detail message.
-     * @param   returnValue     the return value
-     */
-    public AgentInitializationException(String s, int returnValue) {
-        super(s);
-        this.returnValue = returnValue;
-    }
-
-    /**
-     * If the exception was created with the return value from the agent
-     * <code>Agent_OnAttach</code> function then this returns that value,
-     * otherwise returns <code>0</code>. </p>
-     *
-     * @return  the return value
-     */
-    public int returnValue() {
-        return returnValue;
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/tools/attach/AgentLoadException.java b/ojluni/src/main/java/com/sun/tools/attach/AgentLoadException.java
deleted file mode 100755
index a724d8b..0000000
--- a/ojluni/src/main/java/com/sun/tools/attach/AgentLoadException.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-package com.sun.tools.attach;
-
-/**
- * The exception thrown when an agent cannot be loaded into the target
- * Java virtual machine.
- *
- * <p> This exception is thrown by {@link
- * com.sun.tools.attach.VirtualMachine#loadAgent VirtualMachine.loadAgent} or
- * {@link com.sun.tools.attach.VirtualMachine#loadAgentLibrary
- * VirtualMachine.loadAgentLibrary}, {@link
- * com.sun.tools.attach.VirtualMachine#loadAgentPath loadAgentPath} methods
- * if the agent, or agent library, cannot be loaded.
- */
-public class AgentLoadException extends Exception {
-
-    /** use serialVersionUID for interoperability */
-    static final long serialVersionUID = 688047862952114238L;
-
-    /**
-     * Constructs an <code>AgentLoadException</code> with
-     * no detail message.
-     */
-    public AgentLoadException() {
-        super();
-    }
-
-    /**
-     * Constructs an <code>AgentLoadException</code> with
-     * the specified detail message.
-     *
-     * @param   s   the detail message.
-     */
-    public AgentLoadException(String s) {
-        super(s);
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/tools/attach/AttachNotSupportedException.java b/ojluni/src/main/java/com/sun/tools/attach/AttachNotSupportedException.java
deleted file mode 100755
index ac4d1ee..0000000
--- a/ojluni/src/main/java/com/sun/tools/attach/AttachNotSupportedException.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-package com.sun.tools.attach;
-
-import com.sun.tools.attach.spi.AttachProvider;         // for javadoc
-
-/**
- * Thrown by {@link com.sun.tools.attach.VirtualMachine#attach
- * VirtalMachine.attach} when attempting to attach to a Java virtual machine
- * for which a compatible {@link com.sun.tools.attach.spi.AttachProvider
- * AttachProvider} does not exist. It is also thrown by {@link
- * com.sun.tools.attach.spi.AttachProvider#attachVirtualMachine
- * AttachProvider.attachVirtualMachine} if the provider attempts to
- * attach to a Java virtual machine with which it not comptatible.
- */
-public class AttachNotSupportedException extends Exception {
-
-    /** use serialVersionUID for interoperability */
-    static final long serialVersionUID = 3391824968260177264L;
-
-    /**
-     * Constructs an <code>AttachNotSupportedException</code> with
-     * no detail message.
-     */
-    public AttachNotSupportedException() {
-        super();
-
-    }
-
-    /**
-     * Constructs an <code>AttachNotSupportedException</code> with
-     * the specified detail message.
-     *
-     * @param   s   the detail message.
-     */
-    public AttachNotSupportedException(String s) {
-        super(s);
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/tools/attach/AttachPermission.java b/ojluni/src/main/java/com/sun/tools/attach/AttachPermission.java
deleted file mode 100755
index ca094d6..0000000
--- a/ojluni/src/main/java/com/sun/tools/attach/AttachPermission.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-package com.sun.tools.attach;
-
-/**
- * When a {@link java.lang.SecurityManager SecurityManager} set, this
- * is the permission which will be checked when code invokes {@link
- * VirtualMachine#attach VirtalMachine.attach} to attach to a target virtual
- * machine.
- * This permission is also checked when an {@link
- * com.sun.tools.attach.spi.AttachProvider AttachProvider} is created. </p>
- *
- * <p> An <code>AttachPermission</code> object contains a name (also referred
- * to as a "target name") but no actions list; you either have the
- * named permission or you don't.
- * The following table provides a summary description of what the
- * permission allows, and discusses the risks of granting code the
- * permission.
- * <P>
- * <table border=1 cellpadding=5 summary="Table shows permission
- * target name, what the permission allows, and associated risks">
- * <tr>
- * <th>Permission Target Name</th>
- * <th>What the Permission Allows</th>
- * <th>Risks of Allowing this Permission</th>
- * </tr>
- *
- * <tr>
- *   <td>attachVirtualMachine</td>
- *   <td>Ability to attach to another Java virtual machine and load agents
- *       into that VM.
- *   </td>
- *   <td>This allows an attacker to control the target VM which can potentially
- *       cause it to misbehave.
- *   </td>
- * </tr>
- *
- * <tr>
- *   <td>createAttachProvider</td>
- *   <td>Ability to create an <code>AttachProvider</code> instance.
- *   </td>
- *   <td>This allows an attacker to create an AttachProvider which can
- *       potentially be used to attach to other Java virtual machines.
- *   </td>
- * </tr>
-
- *
- * </table>
-
- * <p>
- * Programmers do not normally create AttachPermission objects directly.
- * Instead they are created by the security policy code based on reading
- * the security policy file.
- *
- * @see com.sun.tools.attach.VirtualMachine
- * @see com.sun.tools.attach.spi.AttachProvider
- */
-
-public final class AttachPermission extends java.security.BasicPermission {
-
-    /** use serialVersionUID for interoperability */
-    static final long serialVersionUID = -4619447669752976181L;
-
-    /**
-     * Constructs a new AttachPermission object.
-     *
-     * @param name Permission name. Must be either "attachVirtualMachine",
-     *             or "createAttachProvider".
-     *
-     * @throws NullPointerException if name is <code>null</code>.
-     * @throws IllegalArgumentException if the name is invalid.
-     */
-    public AttachPermission(String name) {
-        super(name);
-        if (!name.equals("attachVirtualMachine") && !name.equals("createAttachProvider")) {
-            throw new IllegalArgumentException("name: " + name);
-        }
-    }
-
-    /**
-     * Constructs a new AttachPermission object.
-     *
-     * @param name Permission name.   Must be either "attachVirtualMachine",
-     *             or "createAttachProvider".
-     *
-     * @param actions Not used and should be <code>null</code>, or
-     *                the empty string.
-     *
-     * @throws NullPointerException if name is <code>null</code>.
-     * @throws IllegalArgumentException if arguments are invalid.
-     */
-    public AttachPermission(String name, String actions) {
-        super(name);
-        if (!name.equals("attachVirtualMachine") && !name.equals("createAttachProvider")) {
-            throw new IllegalArgumentException("name: " + name);
-        }
-        if (actions != null && actions.length() > 0) {
-            throw new IllegalArgumentException("actions: " + actions);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/attach/VirtualMachine.java b/ojluni/src/main/java/com/sun/tools/attach/VirtualMachine.java
deleted file mode 100755
index aad0be2..0000000
--- a/ojluni/src/main/java/com/sun/tools/attach/VirtualMachine.java
+++ /dev/null
@@ -1,633 +0,0 @@
-/*
- * Copyright (c) 2005, 2006, 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.tools.attach;
-
-import com.sun.tools.attach.spi.AttachProvider;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Properties;
-import java.io.IOException;
-
-
-/**
- * A Java virtual machine.
- *
- * <p> A <code>VirtualMachine</code> represents a Java virtual machine to which this
- * Java virtual machine has attached. The Java virtual machine to which it is
- * attached is sometimes called the <i>target virtual machine</i>, or <i>target VM</i>.
- * An application (typically a tool such as a managemet console or profiler) uses a
- * VirtualMachine to load an agent into the target VM. For example, a profiler tool
- * written in the Java Language might attach to a running application and load its
- * profiler agent to profile the running application. </p>
- *
- * <p> A VirtualMachine is obtained by invoking the {@link #attach(String) attach} method
- * with an identifier that identifies the target virtual machine. The identifier is
- * implementation-dependent but is typically the process identifier (or pid) in
- * environments where each Java virtual machine runs in its own operating system process.
- * Alternatively, a <code>VirtualMachine</code> instance is obtained by invoking the
- * {@link #attach(VirtualMachineDescriptor) attach} method with a {@link
- * com.sun.tools.attach.VirtualMachineDescriptor VirtualMachineDescriptor} obtained
- * from the list of virtual machine descriptors returned by the {@link #list list} method.
- * Once a reference to a virtual machine is obtained, the {@link #loadAgent loadAgent},
- * {@link #loadAgentLibrary loadAgentLibrary}, and {@link #loadAgentPath loadAgentPath}
- * methods are used to load agents into target virtual machine. The {@link
- * #loadAgent loadAgent} method is used to load agents that are written in the Java
- * Language and deployed in a {@link java.util.jar.JarFile JAR file}. (See
- * {@link java.lang.instrument} for a detailed description on how these agents
- * are loaded and started). The {@link #loadAgentLibrary loadAgentLibrary} and
- * {@link #loadAgentPath loadAgentPath} methods are used to load agents that
- * are deployed in a dynamic library and make use of the <a
- * href="../../../../../../../../technotes/guides/jvmti/index.html">JVM Tools
- * Interface</a>. </p>
- *
- * <p> In addition to loading agents a VirtualMachine provides read access to the
- * {@link java.lang.System#getProperties() system properties} in the target VM.
- * This can be useful in some environments where properties such as
- * <code>java.home</code>, <code>os.name</code>, or <code>os.arch</code> are
- * used to construct the path to agent that will be loaded into the target VM.
- *
- * <p> The following example demonstrates how VirtualMachine may be used:</p>
- *
- * <pre>
- *
- *      // attach to target VM
- *      VirtualMachine vm = VirtualMachine.attach("2177");
- *
- *      // get system properties in target VM
- *      Properties props = vm.getSystemProperties();
- *
- *      // construct path to management agent
- *      String home = props.getProperty("java.home");
- *      String agent = home + File.separator + "lib" + File.separator
- *          + "management-agent.jar";
- *
- *      // load agent into target VM
- *      vm.loadAgent(agent, "com.sun.management.jmxremote.port=5000");
- *
- *      // detach
- *      vm.detach();
- *
- * </pre>
- *
- * <p> In this example we attach to a Java virtual machine that is identified by
- * the process identifier <code>2177</code>. The system properties from the target
- * VM are then used to construct the path to a <i>management agent</i> which is then
- * loaded into the target VM. Once loaded the client detaches from the target VM. </p>
- *
- * <p> A VirtualMachine is safe for use by multiple concurrent threads. </p>
- *
- * @since 1.6
- */
-
-public abstract class VirtualMachine {
-    private AttachProvider provider;
-    private String id;
-    private volatile int hash;        // 0 => not computed
-
-    /**
-     * Initializes a new instance of this class.
-     *
-     * @param   provider
-     *          The attach provider creating this class.
-     * @param   id
-     *          The abstract identifier that identifies the Java virtual machine.
-     *
-     * @throws  NullPointerException
-     *          If <code>provider</code> or <code>id</code> is <code>null</code>.
-     */
-    protected VirtualMachine(AttachProvider provider, String id) {
-        if (provider == null) {
-            throw new NullPointerException("provider cannot be null");
-        }
-        if (id == null) {
-            throw new NullPointerException("id cannot be null");
-        }
-        this.provider = provider;
-        this.id = id;
-    }
-
-    /**
-     * Return a list of Java virtual machines.
-     *
-     * <p> This method returns a list of Java {@link
-     * com.sun.tools.attach.VirtualMachineDescriptor} elements.
-     * The list is an aggregation of the virtual machine
-     * descriptor lists obtained by invoking the {@link
-     * com.sun.tools.attach.spi.AttachProvider#listVirtualMachines
-     * listVirtualMachines} method of all installed
-     * {@link com.sun.tools.attach.spi.AttachProvider attach providers}.
-     * If there are no Java virtual machines known to any provider
-     * then an empty list is returned.
-     *
-     * @return  The list of virtual machine descriptors.
-     */
-    public static List<VirtualMachineDescriptor> list() {
-        ArrayList<VirtualMachineDescriptor> l =
-            new ArrayList<VirtualMachineDescriptor>();
-        List<AttachProvider> providers = AttachProvider.providers();
-        for (AttachProvider provider: providers) {
-            l.addAll(provider.listVirtualMachines());
-        }
-        return l;
-    }
-
-    /**
-     * Attaches to a Java virtual machine.
-     *
-     * <p> This method obtains the list of attach providers by invoking the
-     * {@link com.sun.tools.attach.spi.AttachProvider#providers()
-     * AttachProvider.providers()} method. It then iterates overs the list
-     * and invokes each provider's {@link
-     * com.sun.tools.attach.spi.AttachProvider#attachVirtualMachine(java.lang.String)
-     * attachVirtualMachine} method in turn. If a provider successfully
-     * attaches then the iteration terminates, and the VirtualMachine created
-     * by the provider that successfully attached is returned by this method.
-     * If the <code>attachVirtualMachine</code> method of all providers throws
-     * {@link com.sun.tools.attach.AttachNotSupportedException AttachNotSupportedException}
-     * then this method also throws <code>AttachNotSupportedException</code>.
-     * This means that <code>AttachNotSupportedException</code> is thrown when
-     * the identifier provided to this method is invalid, or the identifier
-     * corresponds to a Java virtual machine that does not exist, or none
-     * of the providers can attach to it. This exception is also thrown if
-     * {@link com.sun.tools.attach.spi.AttachProvider#providers()
-     * AttachProvider.providers()} returns an empty list. </p>
-     *
-     * @param   id
-     *          The abstract identifier that identifies the Java virtual machine.
-     *
-     * @return  A VirtualMachine representing the target VM.
-     *
-     * @throws  SecurityException
-     *          If a security manager has been installed and it denies
-     *          {@link com.sun.tools.attach.AttachPermission AttachPermission}
-     *          <tt>("attachVirtualMachine")</tt>, or another permission
-     *          required by the implementation.
-     *
-     * @throws  AttachNotSupportedException
-     *          If the <code>attachVirtualmachine</code> method of all installed
-     *          providers throws <code>AttachNotSupportedException</code>, or
-     *          there aren't any providers installed.
-     *
-     * @throws  IOException
-     *          If an I/O error occurs
-     *
-     * @throws  NullPointerException
-     *          If <code>id</code> is <code>null</code>.
-     */
-    public static VirtualMachine attach(String id)
-        throws AttachNotSupportedException, IOException
-    {
-        if (id == null) {
-            throw new NullPointerException("id cannot be null");
-        }
-        List<AttachProvider> providers = AttachProvider.providers();
-        if (providers.size() == 0) {
-            throw new AttachNotSupportedException("no providers installed");
-        }
-        AttachNotSupportedException lastExc = null;
-        for (AttachProvider provider: providers) {
-            try {
-                return provider.attachVirtualMachine(id);
-            } catch (AttachNotSupportedException x) {
-                lastExc = x;
-            }
-        }
-        throw lastExc;
-    }
-
-    /**
-     * Attaches to a Java virtual machine.
-     *
-     * <p> This method first invokes the {@link
-     * com.sun.tools.attach.VirtualMachineDescriptor#provider() provider()} method
-     * of the given virtual machine descriptor to obtain the attach provider. It
-     * then invokes the attach provider's {@link
-     * com.sun.tools.attach.spi.AttachProvider#attachVirtualMachine(VirtualMachineDescriptor)
-     * attachVirtualMachine} to attach to the target VM.
-     *
-     * @param   vmd
-     *          The virtual machine descriptor.
-     *
-     * @return  A VirtualMachine representing the target VM.
-     *
-     * @throws  SecurityException
-     *          If a security manager has been installed and it denies
-     *          {@link com.sun.tools.attach.AttachPermission AttachPermission}
-     *          <tt>("attachVirtualMachine")</tt>, or another permission
-     *          required by the implementation.
-     *
-     * @throws  AttachNotSupportedException
-     *          If the attach provider's <code>attachVirtualmachine</code>
-     *          throws <code>AttachNotSupportedException</code>.
-     *
-     * @throws  IOException
-     *          If an I/O error occurs
-     *
-     * @throws  NullPointerException
-     *          If <code>vmd</code> is <code>null</code>.
-     */
-    public static VirtualMachine attach(VirtualMachineDescriptor vmd)
-        throws AttachNotSupportedException, IOException
-    {
-        return vmd.provider().attachVirtualMachine(vmd);
-    }
-
-    /**
-     * Detach from the virtual machine.
-     *
-     * <p> After detaching from the virtual machine, any further attempt to invoke
-     * operations on that virtual machine will cause an {@link java.io.IOException
-     * IOException} to be thrown. If an operation (such as {@link #loadAgent
-     * loadAgent} for example) is in progress when this method is invoked then
-     * the behaviour is implementation dependent. In other words, it is
-     * implementation specific if the operation completes or throws
-     * <tt>IOException</tt>.
-     *
-     * <p> If already detached from the virtual machine then invoking this
-     * method has no effect. </p>
-     *
-     * @throws  IOException
-     *          If an I/O error occurs
-     */
-    public abstract void detach() throws IOException;
-
-    /**
-     * Returns the provider that created this virtual machine.
-     *
-     * @return  The provider that created this virtual machine.
-     */
-    public final AttachProvider provider() {
-        return provider;
-    }
-
-    /**
-     * Returns the identifier for this Java virtual machine.
-     *
-     * @return  The identifier for this Java virtual machine.
-     */
-    public final String id() {
-        return id;
-    }
-
-    /**
-     * Loads an agent library.
-     *
-     * <p> A <a href="../../../../../../../../technotes/guides/jvmti/index.html">JVM
-     * TI</a> client is called an <i>agent</i>. It is developed in a native language.
-     * A JVM TI agent is deployed in a platform specific manner but it is typically the
-     * platform equivalent of a dynamic library. This method causes the given agent
-     * library to be loaded into the target VM (if not already loaded).
-     * It then causes the target VM to invoke the <code>Agent_OnAttach</code> function
-     * as specified in the
-     * <a href="../../../../../../../../technotes/guides/jvmti/index.html"> JVM Tools
-     * Interface</a> specification. Note that the <code>Agent_OnAttach</code>
-     * function is invoked even if the agent library was loaded prior to invoking
-     * this method.
-     *
-     * <p> The agent library provided is the name of the agent library. It is interpreted
-     * in the target virtual machine in an implementation-dependent manner. Typically an
-     * implementation will expand the library name into an operating system specific file
-     * name. For example, on UNIX systems, the name <tt>foo</tt> might be expanded to
-     * <tt>libfoo.so</tt>, and located using the search path specified by the
-     * <tt>LD_LIBRARY_PATH</tt> environment variable.</p>
-     *
-     * <p> If the <code>Agent_OnAttach</code> function in the agent library returns
-     * an error then an {@link com.sun.tools.attach.AgentInitializationException} is
-     * thrown. The return value from the <code>Agent_OnAttach</code> can then be
-     * obtained by invoking the {@link
-     * com.sun.tools.attach.AgentInitializationException#returnValue() returnValue}
-     * method on the exception. </p>
-     *
-     * @param   agentLibrary
-     *          The name of the agent library.
-     *
-     * @param   options
-     *          The options to provide to the <code>Agent_OnAttach</code>
-     *          function (can be <code>null</code>).
-     *
-     * @throws  AgentLoadException
-     *          If the agent library does not exist, or cannot be loaded for
-     *          another reason.
-     *
-     * @throws  AgentInitializationException
-     *          If the <code>Agent_OnAttach</code> function returns an error
-     *
-     * @throws  IOException
-     *          If an I/O error occurs
-     *
-     * @throws  NullPointerException
-     *          If <code>agentLibrary</code> is <code>null</code>.
-     *
-     * @see     com.sun.tools.attach.AgentInitializationException#returnValue()
-     */
-    public abstract void loadAgentLibrary(String agentLibrary, String options)
-        throws AgentLoadException, AgentInitializationException, IOException;
-
-    /**
-     * Loads an agent library.
-     *
-     * <p> This convenience method works as if by invoking:
-     *
-     * <blockquote><tt>
-     * {@link #loadAgentLibrary(String, String) loadAgentLibrary}(agentLibrary,&nbsp;null);
-     * </tt></blockquote>
-     *
-     * @param   agentLibrary
-     *          The name of the agent library.
-     *
-     * @throws  AgentLoadException
-     *          If the agent library does not exist, or cannot be loaded for
-     *          another reason.
-     *
-     * @throws  AgentInitializationException
-     *          If the <code>Agent_OnAttach</code> function returns an error
-     *
-     * @throws  IOException
-     *          If an I/O error occurs
-     *
-     * @throws  NullPointerException
-     *          If <code>agentLibrary</code> is <code>null</code>.
-     */
-    public void loadAgentLibrary(String agentLibrary)
-        throws AgentLoadException, AgentInitializationException, IOException
-    {
-        loadAgentLibrary(agentLibrary, null);
-    }
-
-    /**
-     * Load a native agent library by full pathname.
-     *
-     * <p> A <a href="../../../../../../../../technotes/guides/jvmti/index.html">JVM
-     * TI</a> client is called an <i>agent</i>. It is developed in a native language.
-     * A JVM TI agent is deployed in a platform specific manner but it is typically the
-     * platform equivalent of a dynamic library. This method causes the given agent
-     * library to be loaded into the target VM (if not already loaded).
-     * It then causes the target VM to invoke the <code>Agent_OnAttach</code> function
-     * as specified in the
-     * <a href="../../../../../../../../technotes/guides/jvmti/index.html"> JVM Tools
-     * Interface</a> specification. Note that the <code>Agent_OnAttach</code>
-     * function is invoked even if the agent library was loaded prior to invoking
-     * this method.
-     *
-     * <p> The agent library provided is the absolute path from which to load the
-     * agent library. Unlike {@link #loadAgentLibrary loadAgentLibrary}, the library name
-     * is not expanded in the target virtual machine. </p>
-     *
-     * <p> If the <code>Agent_OnAttach</code> function in the agent library returns
-     * an error then an {@link com.sun.tools.attach.AgentInitializationException} is
-     * thrown. The return value from the <code>Agent_OnAttach</code> can then be
-     * obtained by invoking the {@link
-     * com.sun.tools.attach.AgentInitializationException#returnValue() returnValue}
-     * method on the exception. </p>
-     *
-     * @param   agentPath
-     *          The full path of the agent library.
-     *
-     * @param   options
-     *          The options to provide to the <code>Agent_OnAttach</code>
-     *          function (can be <code>null</code>).
-     *
-     * @throws  AgentLoadException
-     *          If the agent library does not exist, or cannot be loaded for
-     *          another reason.
-     *
-     * @throws  AgentInitializationException
-     *          If the <code>Agent_OnAttach</code> function returns an error
-     *
-     * @throws  IOException
-     *          If an I/O error occurs
-     *
-     * @throws  NullPointerException
-     *          If <code>agentPath</code> is <code>null</code>.
-     *
-     * @see     com.sun.tools.attach.AgentInitializationException#returnValue()
-     */
-    public abstract void loadAgentPath(String agentPath, String options)
-        throws AgentLoadException, AgentInitializationException, IOException;
-
-    /**
-     * Load a native agent library by full pathname.
-     *
-     * <p> This convenience method works as if by invoking:
-     *
-     * <blockquote><tt>
-     * {@link #loadAgentPath(String, String) loadAgentPath}(agentLibrary,&nbsp;null);
-     * </tt></blockquote>
-     *
-     * @param   agentPath
-     *          The full path to the agent library.
-     *
-     * @throws  AgentLoadException
-     *          If the agent library does not exist, or cannot be loaded for
-     *          another reason.
-     *
-     * @throws  AgentInitializationException
-     *          If the <code>Agent_OnAttach</code> function returns an error
-     *
-     * @throws  IOException
-     *          If an I/O error occurs
-     *
-     * @throws  NullPointerException
-     *          If <code>agentPath</code> is <code>null</code>.
-     */
-    public void loadAgentPath(String agentPath)
-       throws AgentLoadException, AgentInitializationException, IOException
-    {
-        loadAgentPath(agentPath, null);
-    }
-
-
-   /**
-     * Loads an agent.
-     *
-     * <p> The agent provided to this method is a path name to a JAR file on the file
-     * system of the target virtual machine. This path is passed to the target virtual
-     * machine where it is interpreted. The target virtual machine attempts to start
-     * the agent as specified by the {@link java.lang.instrument} specification.
-     * That is, the specified JAR file is added to the system class path (of the target
-     * virtual machine), and the <code>agentmain</code> method of the agent class, specified
-     * by the <code>Agent-Class</code> attribute in the JAR manifest, is invoked. This
-     * method completes when the <code>agentmain</code> method completes.
-     *
-     * @param   agent
-     *          Path to the JAR file containing the agent.
-     *
-     * @param   options
-     *          The options to provide to the agent's <code>agentmain</code>
-     *          method (can be <code>null</code>).
-     *
-     * @throws  AgentLoadException
-     *          If the agent does not exist, or cannot be started in the manner
-     *          specified in the {@link java.lang.instrument} specification.
-     *
-     * @throws  AgentInitializationException
-     *          If the <code>agentmain</code> throws an exception
-     *
-     * @throws  IOException
-     *          If an I/O error occurs
-     *
-     * @throws  NullPointerException
-     *          If <code>agent</code> is <code>null</code>.
-     */
-    public abstract void loadAgent(String agent, String options)
-        throws AgentLoadException, AgentInitializationException, IOException;
-
-    /**
-     * Loads an agent.
-     *
-     * <p> This convenience method works as if by invoking:
-     *
-     * <blockquote><tt>
-     * {@link #loadAgent(String, String) loadAgent}(agent,&nbsp;null);
-     * </tt></blockquote>
-     *
-     * @param   agent
-     *          Path to the JAR file containing the agent.
-     *
-     * @throws  AgentLoadException
-     *          If the agent does not exist, or cannot be started in the manner
-     *          specified in the {@link java.lang.instrument} specification.
-     *
-     * @throws  AgentInitializationException
-     *          If the <code>agentmain</code> throws an exception
-     *
-     * @throws  IOException
-     *          If an I/O error occurs
-     *
-     * @throws  NullPointerException
-     *          If <code>agent</code> is <code>null</code>.
-     */
-    public void loadAgent(String agent)
-        throws AgentLoadException, AgentInitializationException, IOException
-    {
-        loadAgent(agent, null);
-    }
-
-    /**
-     * Returns the current system properties in the target virtual machine.
-     *
-     * <p> This method returns the system properties in the target virtual
-     * machine. Properties whose key or value is not a <tt>String</tt> are
-     * omitted. The method is approximately equivalent to the invocation of the
-     * method {@link java.lang.System#getProperties System.getProperties}
-     * in the target virtual machine except that properties with a key or
-     * value that is not a <tt>String</tt> are not included.
-     *
-     * <p> This method is typically used to decide which agent to load into
-     * the target virtual machine with {@link #loadAgent loadAgent}, or
-     * {@link #loadAgentLibrary loadAgentLibrary}. For example, the
-     * <code>java.home</code> or <code>user.dir</code> properties might be
-     * use to create the path to the agent library or JAR file.
-     *
-     * @return  The system properties
-     *
-     * @throws  IOException
-     *          If an I/O error occurs
-     *
-     * @see     java.lang.System#getProperties
-     * @see     #loadAgentLibrary
-     * @see     #loadAgent
-     */
-    public abstract Properties getSystemProperties() throws IOException;
-
-    /**
-     * Returns the current <i>agent properties</i> in the target virtual
-     * machine.
-     *
-     * <p> The target virtual machine can maintain a list of properties on
-     * behalf of agents. The manner in which this is done, the names of the
-     * properties, and the types of values that are allowed, is implementation
-     * specific. Agent properties are typically used to store communication
-     * end-points and other agent configuration details. For example, a debugger
-     * agent might create an agent property for its transport address.
-     *
-     * <p> This method returns the agent properties whose key and value is a
-     * <tt>String</tt>. Properties whose key or value is not a <tt>String</tt>
-     * are omitted. If there are no agent properties maintained in the target
-     * virtual machine then an empty property list is returned.
-     *
-     * @return       The agent properties
-     *
-     * @throws       IOException
-     *               If an I/O error occurs
-     */
-    public abstract Properties getAgentProperties() throws IOException;
-
-    /**
-     * Returns a hash-code value for this VirtualMachine. The hash
-     * code is based upon the VirtualMachine's components, and satifies
-     * the general contract of the {@link java.lang.Object#hashCode()
-     * Object.hashCode} method.
-     *
-     * @return  A hash-code value for this virtual machine
-     */
-    public int hashCode() {
-        if (hash != 0) {
-            return hash;
-        }
-        hash = provider.hashCode() * 127 + id.hashCode();
-        return hash;
-    }
-
-    /**
-     * Tests this VirtualMachine for equality with another object.
-     *
-     * <p> If the given object is not a VirtualMachine then this
-     * method returns <tt>false</tt>. For two VirtualMachines to
-     * be considered equal requires that they both reference the same
-     * provider, and their {@link VirtualMachineDescriptor#id() identifiers} are equal. </p>
-     *
-     * <p> This method satisfies the general contract of the {@link
-     * java.lang.Object#equals(Object) Object.equals} method. </p>
-     *
-     * @param   ob   The object to which this object is to be compared
-     *
-     * @return  <tt>true</tt> if, and only if, the given object is
-     *                a VirtualMachine that is equal to this
-     *                VirtualMachine.
-     */
-    public boolean equals(Object ob) {
-        if (ob == this)
-            return true;
-        if (!(ob instanceof VirtualMachine))
-            return false;
-        VirtualMachine other = (VirtualMachine)ob;
-        if (other.provider() != this.provider()) {
-            return false;
-        }
-        if (!other.id().equals(this.id())) {
-            return false;
-        }
-        return true;
-    }
-
-    /**
-     * Returns the string representation of the <code>VirtualMachine</code>.
-     */
-    public String toString() {
-        return provider.toString() + ": " + id;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/attach/VirtualMachineDescriptor.java b/ojluni/src/main/java/com/sun/tools/attach/VirtualMachineDescriptor.java
deleted file mode 100755
index 9334ea1..0000000
--- a/ojluni/src/main/java/com/sun/tools/attach/VirtualMachineDescriptor.java
+++ /dev/null
@@ -1,203 +0,0 @@
-/*
- * Copyright (c) 2005, 2006, 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.tools.attach;
-
-import com.sun.tools.attach.spi.AttachProvider;
-
-/**
- * Describes a Java virtual machine.
- *
- * <p> A <code>VirtualMachineDescriptor</code> is a container class used to
- * describe a Java virtual machine. It encapsulates an identifier that identifies
- * a target virtual machine, and a reference to the {@link
- * com.sun.tools.attach.spi.AttachProvider AttachProvider} that should be used
- * when attempting to attach to the virtual machine. The identifier is
- * implementation-dependent but is typically the process identifier (or pid)
- * environments where each Java virtual machine runs in its own operating system
- * process. </p>
- *
- * <p> A <code>VirtualMachineDescriptor</code> also has a {@link #displayName() displayName}.
- * The display name is typically a human readable string that a tool might
- * display to a user. For example, a tool that shows a list of Java
- * virtual machines running on a system might use the display name rather
- * than the identifier. A <code>VirtualMachineDescriptor</code> may be
- * created without a <i>display name</i>. In that case the identifier is
- * used as the <i>display name</i>.
- *
- * <p> <code>VirtualMachineDescriptor</code> instances are typically created by
- * invoking the {@link com.sun.tools.attach.VirtualMachine#list VirtualMachine.list()}
- * method. This returns the complete list of descriptors to describe the
- * Java virtual machines known to all installed {@link
- * com.sun.tools.attach.spi.AttachProvider attach providers}.
- *
- * @since 1.6
- */
-public class VirtualMachineDescriptor {
-
-    private AttachProvider provider;
-    private String id;
-    private String displayName;
-
-    private volatile int hash;        // 0 => not computed
-
-    /**
-     * Creates a virtual machine descriptor from the given components.
-     *
-     * @param   provider      The AttachProvider to attach to the Java virtual machine.
-     * @param   id            The virtual machine identifier.
-     * @param   displayName   The display name.
-     *
-     * @throws  NullPointerException
-     *          If any of the arguments are <code>null</code>
-     */
-    public VirtualMachineDescriptor(AttachProvider provider, String id, String displayName) {
-        if (provider == null) {
-            throw new NullPointerException("provider cannot be null");
-        }
-        if (id == null) {
-            throw new NullPointerException("identifier cannot be null");
-        }
-        if (displayName == null) {
-            throw new NullPointerException("display name cannot be null");
-        }
-        this.provider = provider;
-        this.id = id;
-        this.displayName = displayName;
-    }
-
-    /**
-     * Creates a virtual machine descriptor from the given components.
-     *
-     * <p> This convenience constructor works as if by invoking the
-     * three-argument constructor as follows:
-     *
-     * <blockquote><tt>
-     * new&nbsp;{@link #VirtualMachineDescriptor(AttachProvider, String, String)
-     * VirtualMachineDescriptor}(provider, &nbsp;id, &nbsp;id);
-     * </tt></blockquote>
-     *
-     * <p> That is, it creates a virtual machine descriptor such that
-     * the <i>display name</i> is the same as the virtual machine
-     * identifier.
-     *
-     * @param   provider      The AttachProvider to attach to the Java virtual machine.
-     * @param   id            The virtual machine identifier.
-     *
-     * @throws  NullPointerException
-     *          If <tt>provider</tt> or <tt>id</tt> is <tt>null</tt>.
-     */
-    public VirtualMachineDescriptor(AttachProvider provider, String id) {
-        this(provider, id, id);
-    }
-
-    /**
-     * Return the <code>AttachProvider</code> that this descriptor references.
-     *
-     * @return The <code>AttachProvider</code> that this descriptor references.
-     */
-    public AttachProvider provider() {
-        return provider;
-    }
-
-    /**
-     * Return the identifier component of this descriptor.
-     *
-     * @return  The identifier component of this descriptor.
-     */
-    public String id() {
-        return id;
-    }
-
-    /**
-     * Return the <i>display name</i> component of this descriptor.
-     *
-     * @return  The display name component of this descriptor.
-     */
-    public String displayName() {
-        return displayName;
-    }
-
-    /**
-     * Returns a hash-code value for this VirtualMachineDescriptor. The hash
-     * code is based upon the descriptor's components, and satifies
-     * the general contract of the {@link java.lang.Object#hashCode()
-     * Object.hashCode} method.
-     *
-     * @return  A hash-code value for this descriptor.
-     */
-    public int hashCode() {
-        if (hash != 0) {
-            return hash;
-        }
-        hash = provider.hashCode() * 127 + id.hashCode();
-        return hash;
-    }
-
-    /**
-     * Tests this VirtualMachineDescriptor for equality with another object.
-     *
-     * <p> If the given object is not a VirtualMachineDescriptor then this
-     * method returns <tt>false</tt>. For two VirtualMachineDescriptors to
-     * be considered equal requires that they both reference the same
-     * provider, and their {@link #id() identifiers} are equal. </p>
-     *
-     * <p> This method satisfies the general contract of the {@link
-     * java.lang.Object#equals(Object) Object.equals} method. </p>
-     *
-     * @param   ob   The object to which this object is to be compared
-     *
-     * @return  <tt>true</tt> if, and only if, the given object is
-     *                a VirtualMachineDescriptor that is equal to this
-     *                VirtualMachineDescriptor.
-     */
-    public boolean equals(Object ob) {
-        if (ob == this)
-            return true;
-        if (!(ob instanceof VirtualMachineDescriptor))
-            return false;
-        VirtualMachineDescriptor other = (VirtualMachineDescriptor)ob;
-        if (other.provider() != this.provider()) {
-            return false;
-        }
-        if (!other.id().equals(this.id())) {
-            return false;
-        }
-        return true;
-    }
-
-    /**
-     * Returns the string representation of the <code>VirtualMachineDescriptor</code>.
-     */
-    public String toString() {
-        String s = provider.toString() + ": " + id;
-        if (displayName != id) {
-            s += " " + displayName;
-        }
-        return s;
-    }
-
-
-}
diff --git a/ojluni/src/main/java/com/sun/tools/attach/package.html b/ojluni/src/main/java/com/sun/tools/attach/package.html
deleted file mode 100755
index 8673b11..0000000
--- a/ojluni/src/main/java/com/sun/tools/attach/package.html
+++ /dev/null
@@ -1,48 +0,0 @@
-<!-- 
- Copyright (c) 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.
--->
-
-<!doctype html public "-//IETF//DTD HTML//EN">
-<html>
-<body bgcolor="white">
-
-Provides the API to attach to a Java<sup><font size=-2>TM</font></sup> 
-virtual machine.
-
-A tool, written in the Java Language, uses this API to attach to a target 
-virtual machine (VM) and load its tool agent into the target VM. For 
-example, a management console might have a management agent which it uses
-to obtain management information from instrumented objects in a Java
-virtual machine. If the management console is required to manage
-an application that is running in a virtual machine that does not include
-the management agent, then this API can be used to attach to the target
-VM and load the agent.
-
-@since 1.6
-
-</body>
-</html>
-
-
-
diff --git a/ojluni/src/main/java/com/sun/tools/attach/spi/AttachProvider.java b/ojluni/src/main/java/com/sun/tools/attach/spi/AttachProvider.java
deleted file mode 100755
index f85daab..0000000
--- a/ojluni/src/main/java/com/sun/tools/attach/spi/AttachProvider.java
+++ /dev/null
@@ -1,273 +0,0 @@
-/*
- * Copyright (c) 2005, 2006, 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.tools.attach.spi;
-
-import java.io.IOException;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.ArrayList;
-import java.util.List;
-import com.sun.tools.attach.VirtualMachine;
-import com.sun.tools.attach.VirtualMachineDescriptor;
-import com.sun.tools.attach.AttachPermission;
-import com.sun.tools.attach.AttachNotSupportedException;
-import java.util.ServiceLoader;
-
-/**
- * Attach provider class for attaching to a Java virtual machine.
- *
- * <p> An attach provider is a concrete subclass of this class that has a
- * zero-argument constructor and implements the abstract methods specified
- * below. </p>
- *
- * <p> An attach provider implementation is typically tied to a Java virtual
- * machine implementation, version, or even mode of operation. That is, a specific
- * provider implementation will typically only be capable of attaching to
- * a specific Java virtual machine implementation or version. For example, Sun's
- * JDK implementation ships with provider implementations that can only attach to
- * Sun's <i>HotSpot</i> virtual machine. In general, if an environment
- * consists of Java virtual machines of different versions and from different
- * vendors then there will be an attach provider implementation for each
- * <i>family</i> of implementations or versions. </p>
- *
- * <p> An attach provider is identified by its {@link #name <i>name</i>} and
- * {@link #type <i>type</i>}. The <i>name</i> is typically, but not required to
- * be, a name that corresponds to the VM vendor. The Sun JDK implementation,
- * for example, ships with attach providers that use the name <i>"sun"</i>. The
- * <i>type</i> typically corresponds to the attach mechanism. For example, an
- * implementation that uses the Doors inter-process communication mechanism
- * might use the type <i>"doors"</i>. The purpose of the name and type is to
- * identify providers in environments where there are multiple providers
- * installed. </p>
- *
- * <p> AttachProvider implementations are loaded and instantiated at the first
- * invocation of the {@link #providers() providers} method. This method
- * attempts to load all provider implementations that are installed on the
- * platform. </p>
- *
- * <p> All of the methods in this class are safe for use by multiple
- * concurrent threads. </p>
- *
- * @since 1.6
- */
-
-public abstract class AttachProvider {
-
-    private static final Object lock = new Object();
-    private static List<AttachProvider> providers = null;
-
-    /**
-     * Initializes a new instance of this class.  </p>
-     *
-     * @throws  SecurityException
-     *          If a security manager has been installed and it denies
-     *          {@link com.sun.tools.attach.AttachPermission AttachPermission}
-     *          <tt>("createAttachProvider")</tt>
-     */
-    protected AttachProvider() {
-        SecurityManager sm = System.getSecurityManager();
-        if (sm != null)
-            sm.checkPermission(new AttachPermission("createAttachProvider"));
-    }
-
-    /**
-     * Return this provider's name. </p>
-     *
-     * @return  The name of this provider
-     */
-    public abstract String name();
-
-    /**
-     * Return this provider's type. </p>
-     *
-     * @return  The type of this provider
-     */
-    public abstract String type();
-
-    /**
-     * Attaches to a Java virtual machine.
-     *
-     * <p> A Java virtual machine is identified by an abstract identifier. The
-     * nature of this identifier is platform dependent but in many cases it will be the
-     * string representation of the process identifier (or pid). </p>
-     *
-     * <p> This method parses the identifier and maps the identifier to a Java
-     * virtual machine (in an implementation dependent manner). If the identifier
-     * cannot be parsed by the provider then an {@link
-     * com.sun.tools.attach.AttachNotSupportedException AttachNotSupportedException}
-     * is thrown. Once parsed this method attempts to attach to the Java virtual machine.
-     * If the provider detects that the identifier corresponds to a Java virtual machine
-     * that does not exist, or it corresponds to a Java virtual machine that does not support
-     * the attach mechanism implemented by this provider, or it detects that the
-     * Java virtual machine is a version to which this provider cannot attach, then
-     * an <code>AttachNotSupportedException</code> is thrown. </p>
-     *
-     * @param  id
-     *         The abstract identifier that identifies the Java virtual machine.
-     *
-     * @return  VirtualMachine representing the target virtual machine.
-     *
-     * @throws  SecurityException
-     *          If a security manager has been installed and it denies
-     *          {@link com.sun.tools.attach.AttachPermission AttachPermission}
-     *          <tt>("attachVirtualMachine")</tt>, or other permission
-     *          required by the implementation.
-     *
-     * @throws  AttachNotSupportedException
-     *          If the identifier cannot be parsed, or it corresponds to
-     *          to a Java virtual machine that does not exist, or it
-     *          corresponds to a Java virtual machine which this
-     *          provider cannot attach.
-     *
-     * @throws  IOException
-     *          If some other I/O error occurs
-     *
-     * @throws  NullPointerException
-     *          If <code>id</code> is <code>null</code>
-     */
-    public abstract VirtualMachine attachVirtualMachine(String id)
-        throws AttachNotSupportedException, IOException;
-
-    /**
-     * Attaches to a Java virtual machine.
-     *
-     * <p> A Java virtual machine can be described using a {@link
-     * com.sun.tools.attach.VirtualMachineDescriptor VirtualMachineDescriptor}.
-     * This method invokes the descriptor's {@link
-     * com.sun.tools.attach.VirtualMachineDescriptor#provider() provider()} method
-     * to check that it is equal to this provider. It then attempts to attach to the
-     * Java virtual machine.
-     *
-     * @param  vmd
-     *         The virtual machine descriptor
-     *
-     * @return  VirtualMachine representing the target virtual machine.
-     *
-     * @throws  SecurityException
-     *          If a security manager has been installed and it denies
-     *          {@link com.sun.tools.attach.AttachPermission AttachPermission}
-     *          <tt>("attachVirtualMachine")</tt>, or other permission
-     *          required by the implementation.
-     *
-     * @throws  AttachNotSupportedException
-     *          If the descriptor's {@link
-     *          com.sun.tools.attach.VirtualMachineDescriptor#provider() provider()} method
-     *          returns a provider that is not this provider, or it does not correspond
-     *          to a Java virtual machine to which this provider can attach.
-     *
-     * @throws  IOException
-     *          If some other I/O error occurs
-     *
-     * @throws  NullPointerException
-     *          If <code>vmd</code> is <code>null</code>
-     */
-    public VirtualMachine attachVirtualMachine(VirtualMachineDescriptor vmd)
-        throws AttachNotSupportedException, IOException
-    {
-        if (vmd.provider() != this) {
-            throw new AttachNotSupportedException("provider mismatch");
-        }
-        return attachVirtualMachine(vmd.id());
-    }
-
-    /**
-     * Lists the Java virtual machines known to this provider.
-     *
-     * <p> This method returns a list of {@link
-     * com.sun.tools.attach.VirtualMachineDescriptor} elements. Each
-     * <code>VirtualMachineDescriptor</code> describes a Java virtual machine
-     * to which this provider can <i>potentially</i> attach.  There isn't any
-     * guarantee that invoking {@link #attachVirtualMachine(VirtualMachineDescriptor)
-     * attachVirtualMachine} on each descriptor in the list will succeed.
-     *
-     * @return  The list of virtual machine descriptors which describe the
-     *          Java virtual machines known to this provider (may be empty).
-     */
-    public abstract List<VirtualMachineDescriptor> listVirtualMachines();
-
-
-    /**
-     * Returns a list of the installed attach providers.
-     *
-     * <p> An AttachProvider is installed on the platform if:
-     *
-     * <ul>
-     *   <li><p>It is installed in a JAR file that is visible to the defining
-     *   class loader of the AttachProvider type (usually, but not required
-     *   to be, the {@link java.lang.ClassLoader#getSystemClassLoader system
-     *   class loader}).</p></li>
-     *
-     *   <li><p>The JAR file contains a provider configuration named
-     *   <tt>com.sun.tools.attach.spi.AttachProvider</tt> in the resource directory
-     *   <tt>META-INF/services</tt>. </p></li>
-     *
-     *   <li><p>The provider configuration file lists the full-qualified class
-     *   name of the AttachProvider implementation. </p></li>
-     * </ul>
-     *
-     * <p> The format of the provider configuration file is one fully-qualified
-     * class name per line. Space and tab characters surrounding each class name,
-     * as well as blank lines are ignored. The comment character is
-     *  <tt>'#'</tt> (<tt>0x23</tt>), and on each line all characters following
-     * the first comment character are ignored. The file must be encoded in
-     * UTF-8. </p>
-     *
-     * <p> AttachProvider implementations are loaded and instantiated
-     * (using the zero-arg constructor) at the first invocation of this method.
-     * The list returned by the first invocation of this method is the list
-     * of providers. Subsequent invocations of this method return a list of the same
-     * providers. The list is unmodifable.</p>
-     *
-     * @return  A list of the installed attach providers.
-     */
-    public static List<AttachProvider> providers() {
-        synchronized (lock) {
-            if (providers == null) {
-                providers = new ArrayList<AttachProvider>();
-
-                ServiceLoader<AttachProvider> providerLoader =
-                    ServiceLoader.load(AttachProvider.class,
-                                       AttachProvider.class.getClassLoader());
-
-                Iterator<AttachProvider> i = providerLoader.iterator();
-
-                while (i.hasNext()) {
-                    try {
-                        providers.add(i.next());
-                    } catch (Throwable t) {
-                        if (t instanceof ThreadDeath) {
-                            ThreadDeath td = (ThreadDeath)t;
-                            throw td;
-                        }
-                        // Ignore errors and exceptions
-                        System.err.println(t);
-                    }
-                }
-            }
-            return Collections.unmodifiableList(providers);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/attach/spi/package.html b/ojluni/src/main/java/com/sun/tools/attach/spi/package.html
deleted file mode 100755
index 28b7db6..0000000
--- a/ojluni/src/main/java/com/sun/tools/attach/spi/package.html
+++ /dev/null
@@ -1,38 +0,0 @@
-<!--
- Copyright (c) 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.
--->
-
-<!doctype html public "-//IETF//DTD HTML//EN">
-<html>
-<body bgcolor="white">
-
-Provider classes for the <tt>{@link com.sun.tools.attach}</tt> package.
-
-<p> Only developers who are defining new attach providers should need to make
-direct use of this package.  </p>
-
-@since 1.6
-
-</body>
-</html>
diff --git a/ojluni/src/main/java/com/sun/tools/example/README b/ojluni/src/main/java/com/sun/tools/example/README
deleted file mode 100755
index 13e1540..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/README
+++ /dev/null
@@ -1,3 +0,0 @@
-Please refer to the documentation in:
-
-	doc/index.html
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/bdi/AccessWatchpointSpec.java b/ojluni/src/main/java/com/sun/tools/example/debug/bdi/AccessWatchpointSpec.java
deleted file mode 100755
index 8cfe90f..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/bdi/AccessWatchpointSpec.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.bdi;
-
-import com.sun.jdi.*;
-
-public class AccessWatchpointSpec extends WatchpointSpec {
-
-    AccessWatchpointSpec(EventRequestSpecList specs,
-                         ReferenceTypeSpec refSpec, String fieldId) {
-        super(specs, refSpec,  fieldId);
-    }
-
-    /**
-     * The 'refType' is known to match.
-     */
-   @Override
-    void resolve(ReferenceType refType) throws InvalidTypeException,
-                                             NoSuchFieldException {
-        if (!(refType instanceof ClassType)) {
-            throw new InvalidTypeException();
-        }
-        Field field = refType.fieldByName(fieldId);
-        if (field == null) {
-            throw new NoSuchFieldException(fieldId);
-        }
-        setRequest(refType.virtualMachine().eventRequestManager()
-                   .createAccessWatchpointRequest(field));
-    }
-
-   @Override
-    public boolean equals(Object obj) {
-        return (obj instanceof AccessWatchpointSpec) && super.equals(obj);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/bdi/AmbiguousMethodException.java b/ojluni/src/main/java/com/sun/tools/example/debug/bdi/AmbiguousMethodException.java
deleted file mode 100755
index 139d688..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/bdi/AmbiguousMethodException.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1998, 1999, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.bdi;
-
-public class AmbiguousMethodException extends Exception
-{
-
-    private static final long serialVersionUID = 7793370943251707514L;
-
-    public AmbiguousMethodException()
-    {
-        super();
-    }
-
-    public AmbiguousMethodException(String s)
-    {
-        super(s);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/bdi/BreakpointSpec.java b/ojluni/src/main/java/com/sun/tools/example/debug/bdi/BreakpointSpec.java
deleted file mode 100755
index 9e5da40..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/bdi/BreakpointSpec.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.bdi;
-
-public abstract class BreakpointSpec extends EventRequestSpec {
-
-    BreakpointSpec(EventRequestSpecList specs, ReferenceTypeSpec refSpec) {
-        super(specs, refSpec);
-    }
-
-    @Override
-    void notifySet(SpecListener listener, SpecEvent evt) {
-        listener.breakpointSet(evt);
-    }
-
-    @Override
-    void notifyDeferred(SpecListener listener, SpecEvent evt) {
-        listener.breakpointDeferred(evt);
-    }
-
-    @Override
-    void notifyResolved(SpecListener listener, SpecEvent evt) {
-        listener.breakpointResolved(evt);
-    }
-
-    @Override
-    void notifyDeleted(SpecListener listener, SpecEvent evt) {
-        listener.breakpointDeleted(evt);
-    }
-
-    @Override
-    void notifyError(SpecListener listener, SpecErrorEvent evt) {
-        listener.breakpointError(evt);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/bdi/ChildSession.java b/ojluni/src/main/java/com/sun/tools/example/debug/bdi/ChildSession.java
deleted file mode 100755
index 7469709..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/bdi/ChildSession.java
+++ /dev/null
@@ -1,309 +0,0 @@
-/*
- * Copyright (c) 1998, 1999, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.bdi;
-
-import com.sun.jdi.*;
-import com.sun.jdi.connect.LaunchingConnector;
-import com.sun.jdi.connect.Connector;
-import com.sun.jdi.connect.VMStartException;
-import com.sun.jdi.connect.IllegalConnectorArgumentsException;
-import java.io.*;
-import java.util.Map;
-import javax.swing.SwingUtilities;
-
-
-class ChildSession extends Session {
-
-    private Process process;
-
-    private PrintWriter in;
-    private BufferedReader out;
-    private BufferedReader err;
-
-    private InputListener input;
-    private OutputListener output;
-    private OutputListener error;
-
-    public ChildSession(ExecutionManager runtime,
-                        String userVMArgs, String cmdLine,
-                        InputListener input,
-                        OutputListener output,
-                        OutputListener error,
-                        OutputListener diagnostics) {
-        this(runtime, getVM(diagnostics, userVMArgs, cmdLine),
-             input, output, error, diagnostics);
-    }
-
-    public ChildSession(ExecutionManager runtime,
-                        LaunchingConnector connector,
-                        Map<String, Connector.Argument> arguments,
-                        InputListener input,
-                        OutputListener output,
-                        OutputListener error,
-                        OutputListener diagnostics) {
-        this(runtime, generalGetVM(diagnostics, connector, arguments),
-             input, output, error, diagnostics);
-    }
-
-    private ChildSession(ExecutionManager runtime,
-                        VirtualMachine vm,
-                        InputListener input,
-                        OutputListener output,
-                        OutputListener error,
-                        OutputListener diagnostics) {
-        super(vm, runtime, diagnostics);
-        this.input = input;
-        this.output = output;
-        this.error = error;
-    }
-
-    @Override
-    public boolean attach() {
-
-        if (!connectToVMProcess()) {
-            diagnostics.putString("Could not launch VM");
-            return false;
-        }
-
-        /*
-         * Create a Thread that will retrieve and display any output.
-         * Needs to be high priority, else debugger may exit before
-         * it can be displayed.
-         */
-
-        //### Rename InputWriter and OutputReader classes
-        //### Thread priorities cribbed from ttydebug.  Think about them.
-
-        OutputReader outputReader =
-            new OutputReader("output reader", "output",
-                             out, output, diagnostics);
-        outputReader.setPriority(Thread.MAX_PRIORITY-1);
-        outputReader.start();
-
-        OutputReader errorReader =
-            new OutputReader("error reader", "error",
-                             err, error, diagnostics);
-        errorReader.setPriority(Thread.MAX_PRIORITY-1);
-        errorReader.start();
-
-        InputWriter inputWriter =
-            new InputWriter("input writer", in, input);
-        inputWriter.setPriority(Thread.MAX_PRIORITY-1);
-        inputWriter.start();
-
-        if (!super.attach()) {
-            if (process != null) {
-                process.destroy();
-                process = null;
-            }
-            return false;
-        }
-
-        //### debug
-        //System.out.println("IO after attach: "+ inputWriter + " " + outputReader + " "+ errorReader);
-
-        return true;
-    }
-
-    @Override
-    public void detach() {
-
-        //### debug
-        //System.out.println("IO before detach: "+ inputWriter + " " + outputReader + " "+ errorReader);
-
-        super.detach();
-
-        /*
-        inputWriter.quit();
-        outputReader.quit();
-        errorReader.quit();
-        */
-
-        if (process != null) {
-            process.destroy();
-            process = null;
-        }
-
-    }
-
-    /**
-     * Launch child java interpreter, return host:port
-     */
-
-    static private void dumpStream(OutputListener diagnostics,
-                                   InputStream stream) throws IOException {
-        BufferedReader in =
-            new BufferedReader(new InputStreamReader(stream));
-        String line;
-        while ((line = in.readLine()) != null) {
-            diagnostics.putString(line);
-        }
-    }
-
-    static private void dumpFailedLaunchInfo(OutputListener diagnostics,
-                                             Process process) {
-        try {
-            dumpStream(diagnostics, process.getErrorStream());
-            dumpStream(diagnostics, process.getInputStream());
-        } catch (IOException e) {
-            diagnostics.putString("Unable to display process output: " +
-                                  e.getMessage());
-        }
-    }
-
-    static private VirtualMachine getVM(OutputListener diagnostics,
-                                        String userVMArgs,
-                                        String cmdLine) {
-        VirtualMachineManager manager = Bootstrap.virtualMachineManager();
-        LaunchingConnector connector = manager.defaultConnector();
-        Map<String, Connector.Argument> arguments = connector.defaultArguments();
-        arguments.get("options").setValue(userVMArgs);
-        arguments.get("main").setValue(cmdLine);
-        return generalGetVM(diagnostics, connector, arguments);
-    }
-
-    static private VirtualMachine generalGetVM(OutputListener diagnostics,
-                                               LaunchingConnector connector,
-                                               Map<String, Connector.Argument> arguments) {
-        VirtualMachine vm = null;
-        try {
-            diagnostics.putString("Starting child.");
-            vm = connector.launch(arguments);
-        } catch (IOException ioe) {
-            diagnostics.putString("Unable to start child: " + ioe.getMessage());
-        } catch (IllegalConnectorArgumentsException icae) {
-            diagnostics.putString("Unable to start child: " + icae.getMessage());
-        } catch (VMStartException vmse) {
-            diagnostics.putString("Unable to start child: " + vmse.getMessage() + '\n');
-            dumpFailedLaunchInfo(diagnostics, vmse.process());
-        }
-        return vm;
-    }
-
-    private boolean connectToVMProcess() {
-        if (vm == null) {
-            return false;
-        }
-        process = vm.process();
-        in = new PrintWriter(new OutputStreamWriter(process.getOutputStream()));
-        //### Note small buffer sizes!
-        out = new BufferedReader(new InputStreamReader(process.getInputStream()), 1);
-        err = new BufferedReader(new InputStreamReader(process.getErrorStream()), 1);
-        return true;
-    }
-
-    /**
-     *  Threads to handle application input/output.
-     */
-
-    private static class OutputReader extends Thread {
-
-        private String streamName;
-        private BufferedReader stream;
-        private OutputListener output;
-        private OutputListener diagnostics;
-        private boolean running = true;
-        private char[] buffer = new char[512];
-
-        OutputReader(String threadName,
-                     String streamName,
-                     BufferedReader stream,
-                     OutputListener output,
-                     OutputListener diagnostics) {
-            super(threadName);
-            this.streamName = streamName;
-            this.stream = stream;
-            this.output = output;
-            this.diagnostics = diagnostics;
-        }
-
-        @Override
-        public void run() {
-            try {
-                int count;
-                while (running && (count = stream.read(buffer, 0, 512)) != -1) {
-                    if (count > 0) {
-                        // Run in Swing event dispatcher thread.
-                        final String chars = new String(buffer, 0, count);
-                        SwingUtilities.invokeLater(new Runnable() {
-                            @Override
-                            public void run() {
-                                output.putString(chars);
-                            }
-                        });
-                    }
-                    //### Should we sleep briefly here?
-                }
-            } catch (IOException e) {
-                // Run in Swing event dispatcher thread.
-                SwingUtilities.invokeLater(new Runnable() {
-                    @Override
-                    public void run() {
-                        diagnostics.putString("IO error reading " +
-                                              streamName +
-                                              " stream of child java interpreter");
-                    }
-                });
-            }
-        }
-    }
-
-    private static class InputWriter extends Thread {
-
-        private PrintWriter stream;
-        private InputListener input;
-        private boolean running = true;
-
-        InputWriter(String threadName,
-                    PrintWriter stream,
-                    InputListener input) {
-            super(threadName);
-            this.stream = stream;
-            this.input = input;
-        }
-
-        @Override
-        public void run() {
-            String line;
-            while (running) {
-                line = input.getLine();
-                stream.println(line);
-                // Should not be needed for println above!
-                stream.flush();
-            }
-        }
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/bdi/EvaluationException.java b/ojluni/src/main/java/com/sun/tools/example/debug/bdi/EvaluationException.java
deleted file mode 100755
index 9163e5b..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/bdi/EvaluationException.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (c) 1998, 1999, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.bdi;
-
-public class EvaluationException extends Exception {
-
-    private static final long serialVersionUID = 4947109680354951694L;
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/bdi/EventRequestSpec.java b/ojluni/src/main/java/com/sun/tools/example/debug/bdi/EventRequestSpec.java
deleted file mode 100755
index 5a9c1d7..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/bdi/EventRequestSpec.java
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.bdi;
-
-import com.sun.jdi.*;
-import com.sun.jdi.request.EventRequest;
-
-abstract public class EventRequestSpec {
-
-    static final int STATUS_UNRESOLVED = 1;
-    static final int STATUS_RESOLVED = 2;
-    static final int STATUS_ERROR = 3;
-
-    static final Object specPropertyKey = "spec";
-
-    final EventRequestSpecList specs;
-    final ReferenceTypeSpec refSpec;
-    EventRequest request = null;
-
-    int status = STATUS_UNRESOLVED;
-
-    EventRequestSpec(EventRequestSpecList specs, ReferenceTypeSpec refSpec) {
-        this.specs = specs;
-        this.refSpec = refSpec;
-    }
-
-    void setRequest(EventRequest request) {
-        this.request = request;
-        request.putProperty(specPropertyKey, this);
-        request.enable();
-    }
-
-    /**
-     * The 'refType' is known to match.
-     */
-    abstract void resolve(ReferenceType refType) throws Exception;
-
-    abstract void notifySet(SpecListener listener, SpecEvent evt);
-    abstract void notifyDeferred(SpecListener listener, SpecEvent evt);
-    abstract void notifyResolved(SpecListener listener, SpecEvent evt);
-    abstract void notifyDeleted(SpecListener listener, SpecEvent evt);
-    abstract void notifyError(SpecListener listener, SpecErrorEvent evt);
-
-    /**
-     * The 'refType' is known to match.
-     */
-    void resolveNotify(ReferenceType refType) {
-        try {
-            resolve(refType);
-            status = STATUS_RESOLVED;
-            specs.notifyResolved(this);
-        } catch(Exception exc) {
-            status = STATUS_ERROR;
-            specs.notifyError(this, exc);
-        }
-    }
-
-    /**
-     * See if 'refType' matches and resolve.
-     */
-    void attemptResolve(ReferenceType refType) {
-        if (!isResolved() && refSpec.matches(refType)) {
-            resolveNotify(refType);
-        }
-    }
-
-    void attemptImmediateResolve(VirtualMachine vm) {
-        // try to resolve immediately
-        for (ReferenceType refType : vm.allClasses()) {
-            if (refSpec.matches(refType)) {
-                try {
-                    resolve(refType);
-                    status = STATUS_RESOLVED;
-                    specs.notifySet(this);
-                } catch(Exception exc) {
-                    status = STATUS_ERROR;
-                    specs.notifyError(this, exc);
-                }
-                return;
-            }
-        }
-        specs.notifyDeferred(this);
-    }
-
-    public EventRequest getEventRequest() {
-        return request;
-    }
-
-    /**
-     * @return true if this spec has been resolved.
-     */
-    public boolean isResolved() {
-        return status == STATUS_RESOLVED;
-    }
-
-    /**
-     * @return true if this spec has not yet been resolved.
-     */
-    public boolean isUnresolved() {
-        return status == STATUS_UNRESOLVED;
-    }
-
-    /**
-     * @return true if this spec is unresolvable due to error.
-     */
-    public boolean isErroneous() {
-        return status == STATUS_ERROR;
-    }
-
-    public String getStatusString() {
-        switch (status) {
-            case STATUS_RESOLVED:
-                return "resolved";
-            case STATUS_UNRESOLVED:
-                return "deferred";
-            case STATUS_ERROR:
-                return "erroneous";
-        }
-        return "unknown";
-    }
-
-    boolean isJavaIdentifier(String s) {
-        return Utils.isJavaIdentifier(s);
-    }
-
-    public String errorMessageFor(Exception e) {
-        if (e instanceof IllegalArgumentException) {
-            return ("Invalid command syntax");
-        } else if (e instanceof RuntimeException) {
-            // A runtime exception that we were not expecting
-            throw (RuntimeException)e;
-        } else {
-            return ("Internal error; unable to set" + this);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/bdi/EventRequestSpecList.java b/ojluni/src/main/java/com/sun/tools/example/debug/bdi/EventRequestSpecList.java
deleted file mode 100755
index ce5dcce..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/bdi/EventRequestSpecList.java
+++ /dev/null
@@ -1,187 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.bdi;
-
-import com.sun.jdi.*;
-import com.sun.jdi.request.*;
-
-import java.util.*;
-
-class EventRequestSpecList {
-
-    // all specs
-    private List<EventRequestSpec> eventRequestSpecs = Collections.synchronizedList(
-                                                  new ArrayList<EventRequestSpec>());
-
-    final ExecutionManager runtime;
-
-    EventRequestSpecList(ExecutionManager runtime) {
-        this.runtime = runtime;
-    }
-
-    /**
-     * Resolve all deferred eventRequests waiting for 'refType'.
-     */
-    void resolve(ReferenceType refType) {
-        synchronized(eventRequestSpecs) {
-            for (EventRequestSpec spec : eventRequestSpecs) {
-                spec.attemptResolve(refType);
-             }
-        }
-    }
-
-    void install(EventRequestSpec ers, VirtualMachine vm) {
-        synchronized (eventRequestSpecs) {
-            eventRequestSpecs.add(ers);
-        }
-        if (vm != null) {
-            ers.attemptImmediateResolve(vm);
-        }
-    }
-
-    BreakpointSpec
-    createClassLineBreakpoint(String classPattern, int line) {
-        ReferenceTypeSpec refSpec =
-            new PatternReferenceTypeSpec(classPattern);
-        return new LineBreakpointSpec(this, refSpec, line);
-    }
-
-    BreakpointSpec
-    createSourceLineBreakpoint(String sourceName, int line) {
-        ReferenceTypeSpec refSpec =
-            new SourceNameReferenceTypeSpec(sourceName, line);
-        return new LineBreakpointSpec(this, refSpec, line);
-    }
-
-    BreakpointSpec
-    createMethodBreakpoint(String classPattern,
-                           String methodId, List<String> methodArgs) {
-        ReferenceTypeSpec refSpec =
-            new PatternReferenceTypeSpec(classPattern);
-        return new MethodBreakpointSpec(this, refSpec,
-                                        methodId, methodArgs);
-    }
-
-    ExceptionSpec
-    createExceptionIntercept(String classPattern,
-                             boolean notifyCaught,
-                             boolean notifyUncaught) {
-        ReferenceTypeSpec refSpec =
-            new PatternReferenceTypeSpec(classPattern);
-        return new ExceptionSpec(this, refSpec,
-                                 notifyCaught, notifyUncaught);
-    }
-
-    AccessWatchpointSpec
-    createAccessWatchpoint(String classPattern, String fieldId) {
-        ReferenceTypeSpec refSpec =
-            new PatternReferenceTypeSpec(classPattern);
-        return new AccessWatchpointSpec(this, refSpec, fieldId);
-    }
-
-    ModificationWatchpointSpec
-    createModificationWatchpoint(String classPattern, String fieldId) {
-        ReferenceTypeSpec refSpec =
-            new PatternReferenceTypeSpec(classPattern);
-        return new ModificationWatchpointSpec(this, refSpec, fieldId);
-    }
-
-    void delete(EventRequestSpec ers) {
-        EventRequest request = ers.getEventRequest();
-        synchronized (eventRequestSpecs) {
-            eventRequestSpecs.remove(ers);
-        }
-        if (request != null) {
-            request.virtualMachine().eventRequestManager()
-                .deleteEventRequest(request);
-        }
-        notifyDeleted(ers);
-        //### notify delete - here?
-    }
-
-    List<EventRequestSpec> eventRequestSpecs() {
-        // We need to make a copy to avoid synchronization problems
-        synchronized (eventRequestSpecs) {
-            return new ArrayList<EventRequestSpec>(eventRequestSpecs);
-        }
-    }
-
-    // --------  notify routines --------------------
-
-    @SuppressWarnings("unchecked")
-    private Vector<SpecListener> specListeners() {
-        return (Vector<SpecListener>)runtime.specListeners.clone();
-    }
-
-    void notifySet(EventRequestSpec spec) {
-        Vector<SpecListener> l = specListeners();
-        SpecEvent evt = new SpecEvent(spec);
-        for (int i = 0; i < l.size(); i++) {
-            spec.notifySet(l.elementAt(i), evt);
-        }
-    }
-
-    void notifyDeferred(EventRequestSpec spec) {
-        Vector<SpecListener> l = specListeners();
-        SpecEvent evt = new SpecEvent(spec);
-        for (int i = 0; i < l.size(); i++) {
-            spec.notifyDeferred(l.elementAt(i), evt);
-        }
-    }
-
-    void notifyDeleted(EventRequestSpec spec) {
-        Vector<SpecListener> l = specListeners();
-        SpecEvent evt = new SpecEvent(spec);
-        for (int i = 0; i < l.size(); i++) {
-            spec.notifyDeleted(l.elementAt(i), evt);
-        }
-    }
-
-    void notifyResolved(EventRequestSpec spec) {
-        Vector<SpecListener> l = specListeners();
-        SpecEvent evt = new SpecEvent(spec);
-        for (int i = 0; i < l.size(); i++) {
-            spec.notifyResolved(l.elementAt(i), evt);
-        }
-    }
-
-    void notifyError(EventRequestSpec spec, Exception exc) {
-        Vector<SpecListener> l = specListeners();
-        SpecErrorEvent evt = new SpecErrorEvent(spec, exc);
-        for (int i = 0; i < l.size(); i++) {
-            spec.notifyError(l.elementAt(i), evt);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/bdi/ExceptionSpec.java b/ojluni/src/main/java/com/sun/tools/example/debug/bdi/ExceptionSpec.java
deleted file mode 100755
index c26d8b8..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/bdi/ExceptionSpec.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.bdi;
-
-import com.sun.jdi.ReferenceType;
-
-public class ExceptionSpec extends EventRequestSpec {
-
-    boolean notifyCaught;
-    boolean notifyUncaught;
-
-    ExceptionSpec(EventRequestSpecList specs, ReferenceTypeSpec refSpec,
-                  boolean notifyCaught, boolean notifyUncaught)
-    {
-        super(specs, refSpec);
-        this.notifyCaught = notifyCaught;
-        this.notifyUncaught = notifyUncaught;
-    }
-
-    @Override
-    void notifySet(SpecListener listener, SpecEvent evt) {
-        listener.exceptionInterceptSet(evt);
-    }
-
-    @Override
-    void notifyDeferred(SpecListener listener, SpecEvent evt) {
-        listener.exceptionInterceptDeferred(evt);
-    }
-
-    @Override
-    void notifyResolved(SpecListener listener, SpecEvent evt) {
-        listener.exceptionInterceptResolved(evt);
-    }
-
-    @Override
-    void notifyDeleted(SpecListener listener, SpecEvent evt) {
-        listener.exceptionInterceptDeleted(evt);
-    }
-
-    @Override
-    void notifyError(SpecListener listener, SpecErrorEvent evt) {
-        listener.exceptionInterceptError(evt);
-    }
-
-    /**
-     * The 'refType' is known to match.
-     */
-    @Override
-    void resolve(ReferenceType refType) {
-        setRequest(refType.virtualMachine().eventRequestManager()
-                   .createExceptionRequest(refType,
-                                           notifyCaught, notifyUncaught));
-    }
-
-    @Override
-    public int hashCode() {
-        return refSpec.hashCode();
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-        if (obj instanceof ExceptionSpec) {
-            ExceptionSpec es = (ExceptionSpec)obj;
-
-            return refSpec.equals(es.refSpec);
-        } else {
-            return false;
-        }
-    }
-
-    @Override
-    public String toString() {
-        StringBuffer buffer = new StringBuffer("exception catch ");
-        buffer.append(refSpec.toString());
-        return buffer.toString();
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/bdi/ExecutionManager.java b/ojluni/src/main/java/com/sun/tools/example/debug/bdi/ExecutionManager.java
deleted file mode 100755
index 4a79f43..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/bdi/ExecutionManager.java
+++ /dev/null
@@ -1,824 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.bdi;
-
-import com.sun.jdi.*;
-import com.sun.jdi.request.*;
-import com.sun.jdi.connect.*;
-import com.sun.tools.example.debug.expr.ExpressionParser;
-import com.sun.tools.example.debug.expr.ParseException;
-
-import java.io.*;
-import java.util.*;
-
-import com.sun.tools.example.debug.event.*;
-
-import javax.swing.SwingUtilities;
-
-/**
- * Move this towards being only state and functionality
- * that spans across Sessions (and thus VMs).
- */
-public class ExecutionManager {
-
-    private Session session;
-
-    /**
-     * Get/set JDI trace mode.
-     */
-    int traceMode = VirtualMachine.TRACE_NONE;
-
-  //////////////////    Listener registration    //////////////////
-
-  // Session Listeners
-
-    ArrayList<SessionListener> sessionListeners = new ArrayList<SessionListener>();
-
-    public void addSessionListener(SessionListener listener) {
-        sessionListeners.add(listener);
-    }
-
-    public void removeSessionListener(SessionListener listener) {
-        sessionListeners.remove(listener);
-    }
-
-  // Spec Listeners
-
-  ArrayList<SpecListener> specListeners = new ArrayList<SpecListener>();
-
-    public void addSpecListener(SpecListener cl) {
-        specListeners.add(cl);
-    }
-
-    public void removeSpecListener(SpecListener cl) {
-        specListeners.remove(cl);
-    }
-
-    // JDI Listeners
-
-    ArrayList<JDIListener> jdiListeners = new ArrayList<JDIListener>();
-
-    /**
-     * Adds a JDIListener
-     */
-    public void addJDIListener(JDIListener jl) {
-        jdiListeners.add(jl);
-    }
-
-    /**
-     * Adds a JDIListener - at the specified position
-     */
-    public void addJDIListener(int index, JDIListener jl) {
-        jdiListeners.add(index, jl);
-    }
-
-    /**
-     * Removes a JDIListener
-     */
-    public void removeJDIListener(JDIListener jl) {
-        jdiListeners.remove(jl);
-    }
-
-  // App Echo Listeners
-
-    private ArrayList<OutputListener> appEchoListeners = new ArrayList<OutputListener>();
-
-    public void addApplicationEchoListener(OutputListener l) {
-        appEchoListeners.add(l);
-    }
-
-    public void removeApplicationEchoListener(OutputListener l) {
-        appEchoListeners.remove(l);
-    }
-
-  // App Output Listeners
-
-    private ArrayList<OutputListener> appOutputListeners = new ArrayList<OutputListener>();
-
-    public void addApplicationOutputListener(OutputListener l) {
-        appOutputListeners.add(l);
-    }
-
-    public void removeApplicationOutputListener(OutputListener l) {
-        appOutputListeners.remove(l);
-    }
-
-  // App Error Listeners
-
-    private ArrayList<OutputListener> appErrorListeners = new ArrayList<OutputListener>();
-
-    public void addApplicationErrorListener(OutputListener l) {
-        appErrorListeners.add(l);
-    }
-
-    public void removeApplicationErrorListener(OutputListener l) {
-        appErrorListeners.remove(l);
-    }
-
-  // Diagnostic Listeners
-
-    private ArrayList<OutputListener> diagnosticsListeners = new ArrayList<OutputListener>();
-
-    public void addDiagnosticsListener(OutputListener l) {
-        diagnosticsListeners.add(l);
-    }
-
-    public void removeDiagnosticsListener(OutputListener l) {
-        diagnosticsListeners.remove(l);
-    }
-
-  ///////////    End Listener Registration    //////////////
-
-    //### We probably don't want this public
-    public VirtualMachine vm() {
-        return session == null ? null : session.vm;
-    }
-
-    void ensureActiveSession() throws NoSessionException {
-        if (session == null) {
-         throw new NoSessionException();
-      }
-    }
-
-    public EventRequestManager eventRequestManager() {
-        return vm() == null ? null : vm().eventRequestManager();
-    }
-
-    /**
-     * Get JDI trace mode.
-     */
-    public int getTraceMode(int mode) {
-        return traceMode;
-    }
-
-    /**
-     * Set JDI trace mode.
-     */
-    public void setTraceMode(int mode) {
-        traceMode = mode;
-        if (session != null) {
-            session.setTraceMode(mode);
-        }
-    }
-
-    /**
-     * Determine if VM is interrupted, i.e, present and not running.
-     */
-    public boolean isInterrupted() /* should: throws NoSessionException */ {
-//      ensureActiveSession();
-        return session.interrupted;
-    }
-
-    /**
-     * Return a list of ReferenceType objects for all
-     * currently loaded classes and interfaces.
-     * Array types are not returned.
-     */
-    public List<ReferenceType> allClasses() throws NoSessionException {
-        ensureActiveSession();
-        return vm().allClasses();
-    }
-
-    /**
-     * Return a ReferenceType object for the currently
-     * loaded class or interface whose fully-qualified
-     * class name is specified, else return null if there
-     * is none.
-     *
-     * In general, we must return a list of types, because
-     * multiple class loaders could have loaded a class
-     * with the same fully-qualified name.
-     */
-    public List<ReferenceType> findClassesByName(String name) throws NoSessionException {
-        ensureActiveSession();
-        return vm().classesByName(name);
-    }
-
-    /**
-     * Return a list of ReferenceType objects for all
-     * currently loaded classes and interfaces whose name
-     * matches the given pattern.  The pattern syntax is
-     * open to some future revision, but currently consists
-     * of a fully-qualified class name in which the first
-     * component may optionally be a "*" character, designating
-     * an arbitrary prefix.
-     */
-    public List<ReferenceType> findClassesMatchingPattern(String pattern)
-                                                throws NoSessionException {
-        ensureActiveSession();
-        List<ReferenceType> result = new ArrayList<ReferenceType>();  //### Is default size OK?
-        if (pattern.startsWith("*.")) {
-            // Wildcard matches any leading package name.
-            pattern = pattern.substring(1);
-            for (ReferenceType type : vm().allClasses()) {
-                if (type.name().endsWith(pattern)) {
-                    result.add(type);
-                }
-            }
-            return result;
-        } else {
-            // It's a class name.
-            return vm().classesByName(pattern);
-        }
-    }
-
-    /*
-     * Return a list of ThreadReference objects corresponding
-     * to the threads that are currently active in the VM.
-     * A thread is removed from the list just before the
-     * thread terminates.
-     */
-
-    public List<ThreadReference> allThreads() throws NoSessionException {
-        ensureActiveSession();
-        return vm().allThreads();
-    }
-
-    /*
-     * Return a list of ThreadGroupReference objects corresponding
-     * to the top-level threadgroups that are currently active in the VM.
-     * Note that a thread group may be empty, or contain no threads as
-     * descendents.
-     */
-
-    public List<ThreadGroupReference> topLevelThreadGroups() throws NoSessionException {
-        ensureActiveSession();
-        return vm().topLevelThreadGroups();
-    }
-
-    /*
-     * Return the system threadgroup.
-     */
-
-    public ThreadGroupReference systemThreadGroup()
-                                                throws NoSessionException {
-        ensureActiveSession();
-        return vm().topLevelThreadGroups().get(0);
-    }
-
-    /*
-     * Evaluate an expression.
-     */
-
-    public Value evaluate(final StackFrame f, String expr)
-        throws ParseException,
-                                            InvocationException,
-                                            InvalidTypeException,
-                                            ClassNotLoadedException,
-                                            NoSessionException,
-                                            IncompatibleThreadStateException {
-        ExpressionParser.GetFrame frameGetter = null;
-        ensureActiveSession();
-        if (f != null) {
-            frameGetter = new ExpressionParser.GetFrame() {
-                @Override
-                public StackFrame get() /* throws IncompatibleThreadStateException */ {
-                    return f;
-                }
-            };
-        }
-        return ExpressionParser.evaluate(expr, vm(), frameGetter);
-    }
-
-
-    /*
-     * Start a new VM.
-     */
-
-    public void run(boolean suspended,
-                    String vmArgs,
-                    String className,
-                    String args) throws VMLaunchFailureException {
-
-        endSession();
-
-        //### Set a breakpoint on 'main' method.
-        //### Would be cleaner if we could just bring up VM already suspended.
-        if (suspended) {
-            //### Set breakpoint at 'main(java.lang.String[])'.
-            List<String> argList = new ArrayList<String>(1);
-            argList.add("java.lang.String[]");
-            createMethodBreakpoint(className, "main", argList);
-        }
-
-        String cmdLine = className + " " + args;
-
-        startSession(new ChildSession(this, vmArgs, cmdLine,
-                                      appInput, appOutput, appError,
-                                      diagnostics));
-    }
-
-    /*
-     * Attach to an existing VM.
-     */
-    public void attach(String portName) throws VMLaunchFailureException {
-        endSession();
-
-        //### Changes made here for connectors have broken the
-        //### the 'Session' abstraction.  The 'Session.attach()'
-        //### method is intended to encapsulate all of the various
-        //### ways in which session start-up can fail. (maddox 12/18/98)
-
-        /*
-         * Now that attaches and launches both go through Connectors,
-         * it may be worth creating a new subclass of Session for
-         * attach sessions.
-         */
-        VirtualMachineManager mgr = Bootstrap.virtualMachineManager();
-        AttachingConnector connector = mgr.attachingConnectors().get(0);
-        Map<String, Connector.Argument> arguments = connector.defaultArguments();
-        arguments.get("port").setValue(portName);
-
-        Session newSession = internalAttach(connector, arguments);
-        if (newSession != null) {
-            startSession(newSession);
-        }
-    }
-
-    private Session internalAttach(AttachingConnector connector,
-                                   Map<String, Connector.Argument> arguments) {
-        try {
-            VirtualMachine vm = connector.attach(arguments);
-            return new Session(vm, this, diagnostics);
-        } catch (IOException ioe) {
-            diagnostics.putString("\n Unable to attach to target VM: " +
-                                  ioe.getMessage());
-        } catch (IllegalConnectorArgumentsException icae) {
-            diagnostics.putString("\n Invalid connector arguments: " +
-                                  icae.getMessage());
-        }
-        return null;
-    }
-
-    private Session internalListen(ListeningConnector connector,
-                                   Map<String, Connector.Argument> arguments) {
-        try {
-            VirtualMachine vm = connector.accept(arguments);
-            return new Session(vm, this, diagnostics);
-        } catch (IOException ioe) {
-            diagnostics.putString(
-                  "\n Unable to accept connection to target VM: " +
-                                  ioe.getMessage());
-        } catch (IllegalConnectorArgumentsException icae) {
-            diagnostics.putString("\n Invalid connector arguments: " +
-                                  icae.getMessage());
-        }
-        return null;
-    }
-
-    /*
-     * Connect via user specified arguments
-     * @return true on success
-     */
-    public boolean explictStart(Connector connector, Map<String, Connector.Argument> arguments)
-                                           throws VMLaunchFailureException {
-        Session newSession = null;
-
-        endSession();
-
-        if (connector instanceof LaunchingConnector) {
-            // we were launched, use ChildSession
-            newSession = new ChildSession(this, (LaunchingConnector)connector,
-                                          arguments,
-                                          appInput, appOutput, appError,
-                                          diagnostics);
-        } else if (connector instanceof AttachingConnector) {
-            newSession = internalAttach((AttachingConnector)connector,
-                                        arguments);
-        } else if (connector instanceof ListeningConnector) {
-            newSession = internalListen((ListeningConnector)connector,
-                                        arguments);
-        } else {
-            diagnostics.putString("\n Unknown connector: " + connector);
-        }
-        if (newSession != null) {
-            startSession(newSession);
-        }
-        return newSession != null;
-    }
-
-    /*
-     * Detach from VM.  If VM was started by debugger, terminate it.
-     */
-    public void detach() throws NoSessionException {
-        ensureActiveSession();
-        endSession();
-    }
-
-    private void startSession(Session s) throws VMLaunchFailureException {
-        if (!s.attach()) {
-            throw new VMLaunchFailureException();
-        }
-        session = s;
-        EventRequestManager em = vm().eventRequestManager();
-        ClassPrepareRequest classPrepareRequest = em.createClassPrepareRequest();
-        //### We must allow the deferred breakpoints to be resolved before
-        //### we continue executing the class.  We could optimize if there
-        //### were no deferred breakpoints outstanding for a particular class.
-        //### Can we do this with JDI?
-        classPrepareRequest.setSuspendPolicy(EventRequest.SUSPEND_ALL);
-        classPrepareRequest.enable();
-        ClassUnloadRequest classUnloadRequest = em.createClassUnloadRequest();
-        classUnloadRequest.setSuspendPolicy(EventRequest.SUSPEND_NONE);
-        classUnloadRequest.enable();
-        ThreadStartRequest threadStartRequest = em.createThreadStartRequest();
-        threadStartRequest.setSuspendPolicy(EventRequest.SUSPEND_NONE);
-        threadStartRequest.enable();
-        ThreadDeathRequest threadDeathRequest = em.createThreadDeathRequest();
-        threadDeathRequest.setSuspendPolicy(EventRequest.SUSPEND_NONE);
-        threadDeathRequest.enable();
-        ExceptionRequest exceptionRequest =
-                                em.createExceptionRequest(null, false, true);
-        exceptionRequest.setSuspendPolicy(EventRequest.SUSPEND_ALL);
-        exceptionRequest.enable();
-        validateThreadInfo();
-        session.interrupted = true;
-        notifySessionStart();
-    }
-
-    void endSession() {
-        if (session != null) {
-            session.detach();
-            session = null;
-            invalidateThreadInfo();
-            notifySessionDeath();
-        }
-    }
-
-    /*
-     * Suspend all VM activity.
-     */
-
-    public void interrupt() throws NoSessionException {
-        ensureActiveSession();
-        vm().suspend();
-        //### Is it guaranteed that the interrupt has happened?
-        validateThreadInfo();
-        session.interrupted = true;
-        notifyInterrupted();
-    }
-
-    /*
-     * Resume interrupted VM.
-     */
-
-    public void go() throws NoSessionException, VMNotInterruptedException {
-        ensureActiveSession();
-        invalidateThreadInfo();
-        session.interrupted = false;
-        notifyContinued();
-        vm().resume();
-    }
-
-    /*
-     * Stepping.
-     */
-    void clearPreviousStep(ThreadReference thread) {
-        /*
-         * A previous step may not have completed on this thread;
-         * if so, it gets removed here.
-         */
-         EventRequestManager mgr = vm().eventRequestManager();
-         for (StepRequest request : mgr.stepRequests()) {
-             if (request.thread().equals(thread)) {
-                 mgr.deleteEventRequest(request);
-                 break;
-             }
-         }
-    }
-
-    private void generalStep(ThreadReference thread, int size, int depth)
-                        throws NoSessionException {
-        ensureActiveSession();
-        invalidateThreadInfo();
-        session.interrupted = false;
-        notifyContinued();
-
-        clearPreviousStep(thread);
-        EventRequestManager reqMgr = vm().eventRequestManager();
-        StepRequest request = reqMgr.createStepRequest(thread,
-                                                       size, depth);
-        // We want just the next step event and no others
-        request.addCountFilter(1);
-        request.enable();
-        vm().resume();
-    }
-
-    public void stepIntoInstruction(ThreadReference thread)
-                        throws NoSessionException {
-        generalStep(thread, StepRequest.STEP_MIN, StepRequest.STEP_INTO);
-    }
-
-    public void stepOverInstruction(ThreadReference thread)
-                        throws NoSessionException {
-        generalStep(thread, StepRequest.STEP_MIN, StepRequest.STEP_OVER);
-    }
-
-    public void stepIntoLine(ThreadReference thread)
-                        throws NoSessionException,
-                        AbsentInformationException {
-        generalStep(thread, StepRequest.STEP_LINE, StepRequest.STEP_INTO);
-    }
-
-    public void stepOverLine(ThreadReference thread)
-                        throws NoSessionException,
-                        AbsentInformationException {
-        generalStep(thread, StepRequest.STEP_LINE, StepRequest.STEP_OVER);
-    }
-
-    public void stepOut(ThreadReference thread)
-                        throws NoSessionException {
-        generalStep(thread, StepRequest.STEP_MIN, StepRequest.STEP_OUT);
-    }
-
-    /*
-     * Thread control.
-     */
-
-    public void suspendThread(ThreadReference thread) throws NoSessionException {
-        ensureActiveSession();
-        thread.suspend();
-    }
-
-    public void resumeThread(ThreadReference thread) throws NoSessionException {
-        ensureActiveSession();
-        thread.resume();
-    }
-
-    public void stopThread(ThreadReference thread) throws NoSessionException {
-        ensureActiveSession();
-        //### Need an exception now.  Which one to use?
-        //thread.stop();
-    }
-
-    /*
-     * ThreadInfo objects -- Allow query of thread status and stack.
-     */
-
-    private List<ThreadInfo> threadInfoList = new LinkedList<ThreadInfo>();
-    //### Should be weak! (in the value, not the key)
-    private HashMap<ThreadReference, ThreadInfo> threadInfoMap = new HashMap<ThreadReference, ThreadInfo>();
-
-    public ThreadInfo threadInfo(ThreadReference thread) {
-        if (session == null || thread == null) {
-            return null;
-        }
-        ThreadInfo info = threadInfoMap.get(thread);
-        if (info == null) {
-            //### Should not hardcode initial frame count and prefetch here!
-            //info = new ThreadInfo(thread, 10, 10);
-            info = new ThreadInfo(thread);
-            if (session.interrupted) {
-                info.validate();
-            }
-            threadInfoList.add(info);
-            threadInfoMap.put(thread, info);
-        }
-        return info;
-    }
-
-     void validateThreadInfo() {
-        session.interrupted = true;
-        for (ThreadInfo threadInfo : threadInfoList) {
-            threadInfo.validate();
-            }
-    }
-
-    private void invalidateThreadInfo() {
-        if (session != null) {
-            session.interrupted = false;
-            for (ThreadInfo threadInfo : threadInfoList) {
-                threadInfo.invalidate();
-            }
-        }
-    }
-
-    void removeThreadInfo(ThreadReference thread) {
-        ThreadInfo info = threadInfoMap.get(thread);
-        if (info != null) {
-            info.invalidate();
-            threadInfoMap.remove(thread);
-            threadInfoList.remove(info);
-        }
-    }
-
-    /*
-     * Listen for Session control events.
-     */
-
-    private void notifyInterrupted() {
-      ArrayList<SessionListener> l = new ArrayList<SessionListener>(sessionListeners);
-        EventObject evt = new EventObject(this);
-        for (int i = 0; i < l.size(); i++) {
-            l.get(i).sessionInterrupt(evt);
-        }
-    }
-
-    private void notifyContinued() {
-        ArrayList<SessionListener> l = new ArrayList<SessionListener>(sessionListeners);
-        EventObject evt = new EventObject(this);
-        for (int i = 0; i < l.size(); i++) {
-            l.get(i).sessionContinue(evt);
-        }
-    }
-
-    private void notifySessionStart() {
-        ArrayList<SessionListener> l = new ArrayList<SessionListener>(sessionListeners);
-        EventObject evt = new EventObject(this);
-        for (int i = 0; i < l.size(); i++) {
-            l.get(i).sessionStart(evt);
-        }
-    }
-
-    private void notifySessionDeath() {
-/*** noop for now
-        ArrayList<SessionListener> l = new ArrayList<SessionListener>(sessionListeners);
-        EventObject evt = new EventObject(this);
-        for (int i = 0; i < l.size(); i++) {
-            ((SessionListener)l.get(i)).sessionDeath(evt);
-        }
-****/
-    }
-
-    /*
-     * Listen for input and output requests from the application
-     * being debugged.  These are generated only when the debuggee
-     * is spawned as a child of the debugger.
-     */
-
-    private Object inputLock = new Object();
-    private LinkedList<String> inputBuffer = new LinkedList<String>();
-
-    private void resetInputBuffer() {
-        synchronized (inputLock) {
-            inputBuffer = new LinkedList<String>();
-        }
-    }
-
-    public void sendLineToApplication(String line) {
-        synchronized (inputLock) {
-            inputBuffer.addFirst(line);
-            inputLock.notifyAll();
-        }
-    }
-
-    private InputListener appInput = new InputListener() {
-        @Override
-        public String getLine() {
-            // Don't allow reader to be interrupted -- catch and retry.
-            String line = null;
-            while (line == null) {
-                synchronized (inputLock) {
-                    try {
-                        while (inputBuffer.size() < 1) {
-                            inputLock.wait();
-                        }
-                        line = inputBuffer.removeLast();
-                    } catch (InterruptedException e) {}
-                }
-            }
-            // We must not be holding inputLock here, as the listener
-            // that we call to echo a line might call us re-entrantly
-            // to provide another line of input.
-            // Run in Swing event dispatcher thread.
-            final String input = line;
-            SwingUtilities.invokeLater(new Runnable() {
-                @Override
-                public void run() {
-                    echoInputLine(input);
-                }
-            });
-            return line;
-        }
-    };
-
-    private static String newline = System.getProperty("line.separator");
-
-    private void echoInputLine(String line) {
-        ArrayList<OutputListener> l = new ArrayList<OutputListener>(appEchoListeners);
-        for (int i = 0; i < l.size(); i++) {
-            OutputListener ol = l.get(i);
-            ol.putString(line);
-            ol.putString(newline);
-        }
-    }
-
-    private OutputListener appOutput = new OutputListener() {
-      @Override
-        public void putString(String string) {
-            ArrayList<OutputListener> l = new ArrayList<OutputListener>(appEchoListeners);
-            for (int i = 0; i < l.size(); i++) {
-                l.get(i).putString(string);
-            }
-        }
-    };
-
-    private OutputListener appError = new OutputListener() {
-      @Override
-        public void putString(String string) {
-            ArrayList<OutputListener> l = new ArrayList<OutputListener>(appEchoListeners);
-            for (int i = 0; i < l.size(); i++) {
-                l.get(i).putString(string);
-            }
-        }
-    };
-
-   private OutputListener diagnostics = new OutputListener() {
-      @Override
-        public void putString(String string) {
-            ArrayList<OutputListener> l = new ArrayList<OutputListener>(diagnosticsListeners);
-            for (int i = 0; i < l.size(); i++) {
-                l.get(i).putString(string);
-            }
-        }
-   };
-
-  /////////////    Spec Request Creation/Deletion/Query   ///////////
-
-    private EventRequestSpecList specList = new EventRequestSpecList(this);
-
-    public BreakpointSpec
-    createSourceLineBreakpoint(String sourceName, int line) {
-        return specList.createSourceLineBreakpoint(sourceName, line);
-    }
-
-    public BreakpointSpec
-    createClassLineBreakpoint(String classPattern, int line) {
-        return specList.createClassLineBreakpoint(classPattern, line);
-    }
-
-    public BreakpointSpec
-    createMethodBreakpoint(String classPattern,
-                           String methodId, List<String> methodArgs) {
-        return specList.createMethodBreakpoint(classPattern,
-                                                 methodId, methodArgs);
-    }
-
-    public ExceptionSpec
-    createExceptionIntercept(String classPattern,
-                             boolean notifyCaught,
-                             boolean notifyUncaught) {
-        return specList.createExceptionIntercept(classPattern,
-                                                   notifyCaught,
-                                                   notifyUncaught);
-    }
-
-    public AccessWatchpointSpec
-    createAccessWatchpoint(String classPattern, String fieldId) {
-        return specList.createAccessWatchpoint(classPattern, fieldId);
-    }
-
-    public ModificationWatchpointSpec
-    createModificationWatchpoint(String classPattern, String fieldId) {
-        return specList.createModificationWatchpoint(classPattern,
-                                                       fieldId);
-    }
-
-    public void delete(EventRequestSpec spec) {
-        specList.delete(spec);
-    }
-
-    void resolve(ReferenceType refType) {
-        specList.resolve(refType);
-    }
-
-    public void install(EventRequestSpec spec) {
-        specList.install(spec, vm());
-    }
-
-    public List<EventRequestSpec> eventRequestSpecs() {
-        return specList.eventRequestSpecs();
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/bdi/FrameIndexOutOfBoundsException.java b/ojluni/src/main/java/com/sun/tools/example/debug/bdi/FrameIndexOutOfBoundsException.java
deleted file mode 100755
index 4f1ebd2..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/bdi/FrameIndexOutOfBoundsException.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (c) 1998, 1999, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.bdi;
-
-public class FrameIndexOutOfBoundsException extends IndexOutOfBoundsException {
-
-    private static final long serialVersionUID = -4870148107027371437L;
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/bdi/InputListener.java b/ojluni/src/main/java/com/sun/tools/example/debug/bdi/InputListener.java
deleted file mode 100755
index d32d1da..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/bdi/InputListener.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (c) 1998, 1999, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.bdi;
-
-public interface InputListener {
-    String getLine();
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/bdi/JDIEventSource.java b/ojluni/src/main/java/com/sun/tools/example/debug/bdi/JDIEventSource.java
deleted file mode 100755
index bd34832..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/bdi/JDIEventSource.java
+++ /dev/null
@@ -1,193 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.bdi;
-
-import com.sun.jdi.*;
-import com.sun.jdi.event.*;
-
-import com.sun.tools.example.debug.event.*;
-
-import javax.swing.SwingUtilities;
-
-/**
- */
-class JDIEventSource extends Thread {
-
-    private /*final*/ EventQueue queue;
-    private /*final*/ Session session;
-    private /*final*/ ExecutionManager runtime;
-    private final JDIListener firstListener = new FirstListener();
-
-    private boolean wantInterrupt;  //### Hack
-
-    /**
-     * Create event source.
-     */
-    JDIEventSource(Session session) {
-        super("JDI Event Set Dispatcher");
-        this.session = session;
-        this.runtime = session.runtime;
-        this.queue = session.vm.eventQueue();
-    }
-
-    @Override
-    public void run() {
-        try {
-            runLoop();
-        } catch (Exception exc) {
-            //### Do something different for InterruptedException???
-            // just exit
-        }
-        session.running = false;
-    }
-
-    private void runLoop() throws InterruptedException {
-        AbstractEventSet es;
-        do {
-            EventSet jdiEventSet = queue.remove();
-            es = AbstractEventSet.toSpecificEventSet(jdiEventSet);
-            session.interrupted = es.suspendedAll();
-            dispatchEventSet(es);
-        } while(!(es instanceof VMDisconnectEventSet));
-    }
-
-    //### Gross foul hackery!
-    private void dispatchEventSet(final AbstractEventSet es) {
-        SwingUtilities.invokeLater(new Runnable() {
-            @Override
-            public void run() {
-                boolean interrupted = es.suspendedAll();
-                es.notify(firstListener);
-                boolean wantInterrupt = JDIEventSource.this.wantInterrupt;
-                for (JDIListener jl : session.runtime.jdiListeners) {
-                    es.notify(jl);
-                }
-                if (interrupted && !wantInterrupt) {
-                    session.interrupted = false;
-                    //### Catch here is a hack
-                    try {
-                        session.vm.resume();
-                    } catch (VMDisconnectedException ee) {}
-                }
-                if (es instanceof ThreadDeathEventSet) {
-                    ThreadReference t = ((ThreadDeathEventSet)es).getThread();
-                    session.runtime.removeThreadInfo(t);
-                }
-            }
-        });
-    }
-
-    private void finalizeEventSet(AbstractEventSet es) {
-        if (session.interrupted && !wantInterrupt) {
-            session.interrupted = false;
-            //### Catch here is a hack
-            try {
-                session.vm.resume();
-            } catch (VMDisconnectedException ee) {}
-        }
-        if (es instanceof ThreadDeathEventSet) {
-            ThreadReference t = ((ThreadDeathEventSet)es).getThread();
-            session.runtime.removeThreadInfo(t);
-        }
-    }
-
-    //### This is a Hack, deal with it
-    private class FirstListener implements JDIListener {
-
-        @Override
-        public void accessWatchpoint(AccessWatchpointEventSet e) {
-            session.runtime.validateThreadInfo();
-            wantInterrupt = true;
-        }
-
-        @Override
-        public void classPrepare(ClassPrepareEventSet e)  {
-            wantInterrupt = false;
-            runtime.resolve(e.getReferenceType());
-        }
-
-        @Override
-        public void classUnload(ClassUnloadEventSet e)  {
-            wantInterrupt = false;
-        }
-
-        @Override
-        public void exception(ExceptionEventSet e)  {
-            wantInterrupt = true;
-        }
-
-        @Override
-        public void locationTrigger(LocationTriggerEventSet e)  {
-            session.runtime.validateThreadInfo();
-            wantInterrupt = true;
-        }
-
-        @Override
-        public void modificationWatchpoint(ModificationWatchpointEventSet e)  {
-            session.runtime.validateThreadInfo();
-            wantInterrupt = true;
-        }
-
-        @Override
-        public void threadDeath(ThreadDeathEventSet e)  {
-            wantInterrupt = false;
-        }
-
-        @Override
-        public void threadStart(ThreadStartEventSet e)  {
-            wantInterrupt = false;
-        }
-
-        @Override
-        public void vmDeath(VMDeathEventSet e)  {
-            //### Should have some way to notify user
-            //### that VM died before the session ended.
-            wantInterrupt = false;
-        }
-
-        @Override
-        public void vmDisconnect(VMDisconnectEventSet e)  {
-            //### Notify user?
-            wantInterrupt = false;
-            session.runtime.endSession();
-        }
-
-        @Override
-        public void vmStart(VMStartEventSet e)  {
-            //### Do we need to do anything with it?
-            wantInterrupt = false;
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/bdi/LineBreakpointSpec.java b/ojluni/src/main/java/com/sun/tools/example/debug/bdi/LineBreakpointSpec.java
deleted file mode 100755
index 838fe55..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/bdi/LineBreakpointSpec.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.bdi;
-
-import com.sun.jdi.*;
-import java.util.List;
-
-public class LineBreakpointSpec extends BreakpointSpec {
-    int lineNumber;
-
-    LineBreakpointSpec(EventRequestSpecList specs,
-                       ReferenceTypeSpec refSpec, int lineNumber) {
-        super(specs, refSpec);
-        this.lineNumber = lineNumber;
-    }
-
-    /**
-     * The 'refType' is known to match.
-     */
-    @Override
-    void resolve(ReferenceType refType) throws InvalidTypeException,
-                                             LineNotFoundException {
-        if (!(refType instanceof ClassType)) {
-            throw new InvalidTypeException();
-        }
-        Location location = location((ClassType)refType);
-        setRequest(refType.virtualMachine().eventRequestManager()
-                   .createBreakpointRequest(location));
-    }
-
-    private Location location(ClassType clazz) throws
-                                            LineNotFoundException {
-        Location location = null;
-        try {
-            List<Location> locs = clazz.locationsOfLine(lineNumber());
-            if (locs.size() == 0) {
-                throw new LineNotFoundException();
-            }
-            // TODO handle multiple locations
-            location = locs.get(0);
-            if (location.method() == null) {
-                throw new LineNotFoundException();
-            }
-        } catch (AbsentInformationException e) {
-            /*
-             * TO DO: throw something more specific, or allow
-             * AbsentInfo exception to pass through.
-             */
-            throw new LineNotFoundException();
-        }
-        return location;
-    }
-
-    public int lineNumber() {
-        return lineNumber;
-    }
-
-    @Override
-    public int hashCode() {
-        return refSpec.hashCode() + lineNumber;
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-        if (obj instanceof LineBreakpointSpec) {
-            LineBreakpointSpec breakpoint = (LineBreakpointSpec)obj;
-
-            return refSpec.equals(breakpoint.refSpec) &&
-                   (lineNumber == breakpoint.lineNumber);
-        } else {
-            return false;
-        }
-    }
-
-    @Override
-    public String errorMessageFor(Exception e) {
-        if (e instanceof LineNotFoundException) {
-            return ("No code at line " + lineNumber() + " in " + refSpec);
-        } else if (e instanceof InvalidTypeException) {
-            return ("Breakpoints can be located only in classes. " +
-                        refSpec + " is an interface or array");
-        } else {
-            return super.errorMessageFor( e);
-        }
-    }
-
-    @Override
-    public String toString() {
-        StringBuffer buffer = new StringBuffer("breakpoint ");
-        buffer.append(refSpec.toString());
-        buffer.append(':');
-        buffer.append(lineNumber);
-        buffer.append(" (");
-        buffer.append(getStatusString());
-        buffer.append(')');
-        return buffer.toString();
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/bdi/LineNotFoundException.java b/ojluni/src/main/java/com/sun/tools/example/debug/bdi/LineNotFoundException.java
deleted file mode 100755
index 97f023a..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/bdi/LineNotFoundException.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1998, 1999, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.bdi;
-
-public class LineNotFoundException extends Exception
-{
-
-    private static final long serialVersionUID = -5630418117861587582L;
-
-    public LineNotFoundException()
-    {
-        super();
-    }
-
-    public LineNotFoundException(String s)
-    {
-        super(s);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/bdi/MalformedMemberNameException.java b/ojluni/src/main/java/com/sun/tools/example/debug/bdi/MalformedMemberNameException.java
deleted file mode 100755
index 1dea517..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/bdi/MalformedMemberNameException.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.bdi;
-
-class MalformedMemberNameException extends Exception {
-
-    private static final long serialVersionUID = -7726664097374844485L;
-
-    public MalformedMemberNameException() {
-        super();
-    }
-
-    public MalformedMemberNameException(String s) {
-        super(s);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/bdi/MethodBreakpointSpec.java b/ojluni/src/main/java/com/sun/tools/example/debug/bdi/MethodBreakpointSpec.java
deleted file mode 100755
index 387f92f..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/bdi/MethodBreakpointSpec.java
+++ /dev/null
@@ -1,346 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.bdi;
-
-import com.sun.jdi.*;
-import java.util.ArrayList;
-import java.util.List;
-
-public class MethodBreakpointSpec extends BreakpointSpec {
-    String methodId;
-    List<String> methodArgs;
-
-    MethodBreakpointSpec(EventRequestSpecList specs,
-                         ReferenceTypeSpec refSpec,
-                         String methodId, List<String> methodArgs) {
-        super(specs, refSpec);
-        this.methodId = methodId;
-        this.methodArgs = methodArgs;
-    }
-
-    /**
-     * The 'refType' is known to match.
-     */
-    @Override
-    void resolve(ReferenceType refType) throws MalformedMemberNameException,
-                                             AmbiguousMethodException,
-                                             InvalidTypeException,
-                                             NoSuchMethodException,
-                                             NoSessionException {
-        if (!isValidMethodName(methodId)) {
-            throw new MalformedMemberNameException(methodId);
-        }
-        if (!(refType instanceof ClassType)) {
-            throw new InvalidTypeException();
-        }
-        Location location = location((ClassType)refType);
-        setRequest(refType.virtualMachine().eventRequestManager()
-                   .createBreakpointRequest(location));
-    }
-
-    private Location location(ClassType clazz) throws
-                                               AmbiguousMethodException,
-                                               NoSuchMethodException,
-                                               NoSessionException {
-        Method method = findMatchingMethod(clazz);
-        Location location = method.location();
-        return location;
-    }
-
-    public String methodName() {
-        return methodId;
-    }
-
-    public List<String> methodArgs() {
-        return methodArgs;
-    }
-
-    @Override
-    public int hashCode() {
-        return refSpec.hashCode() +
-            ((methodId != null) ? methodId.hashCode() : 0) +
-            ((methodArgs != null) ? methodArgs.hashCode() : 0);
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-        if (obj instanceof MethodBreakpointSpec) {
-            MethodBreakpointSpec breakpoint = (MethodBreakpointSpec)obj;
-
-            return methodId.equals(breakpoint.methodId) &&
-                   methodArgs.equals(breakpoint.methodArgs) &&
-                   refSpec.equals(breakpoint.refSpec);
-        } else {
-            return false;
-        }
-    }
-
-    @Override
-    public String errorMessageFor(Exception e) {
-        if (e instanceof AmbiguousMethodException) {
-            return ("Method " + methodName() + " is overloaded; specify arguments");
-            /*
-             * TO DO: list the methods here
-             */
-        } else if (e instanceof NoSuchMethodException) {
-            return ("No method " + methodName() + " in " + refSpec);
-        } else if (e instanceof InvalidTypeException) {
-            return ("Breakpoints can be located only in classes. " +
-                        refSpec + " is an interface or array");
-        } else {
-            return super.errorMessageFor( e);
-        }
-    }
-
-    @Override
-    public String toString() {
-        StringBuffer buffer = new StringBuffer("breakpoint ");
-        buffer.append(refSpec.toString());
-        buffer.append('.');
-        buffer.append(methodId);
-        if (methodArgs != null) {
-            boolean first = true;
-            buffer.append('(');
-            for (String name : methodArgs) {
-                if (!first) {
-                    buffer.append(',');
-                }
-                buffer.append(name);
-                first = false;
-            }
-            buffer.append(")");
-        }
-        buffer.append(" (");
-        buffer.append(getStatusString());
-        buffer.append(')');
-        return buffer.toString();
-    }
-
-    private boolean isValidMethodName(String s) {
-        return isJavaIdentifier(s) ||
-               s.equals("<init>") ||
-               s.equals("<clinit>");
-    }
-
-    /*
-     * Compare a method's argument types with a Vector of type names.
-     * Return true if each argument type has a name identical to the
-     * corresponding string in the vector (allowing for varargs)
-     * and if the number of arguments in the method matches the
-     * number of names passed
-     */
-    private boolean compareArgTypes(Method method, List<String> nameList) {
-        List<String> argTypeNames = method.argumentTypeNames();
-
-        // If argument counts differ, we can stop here
-        if (argTypeNames.size() != nameList.size()) {
-            return false;
-        }
-
-        // Compare each argument type's name
-        int nTypes = argTypeNames.size();
-        for (int i = 0; i < nTypes; ++i) {
-            String comp1 = argTypeNames.get(i);
-            String comp2 = nameList.get(i);
-            if (! comp1.equals(comp2)) {
-                /*
-                 * We have to handle varargs.  EG, the
-                 * method's last arg type is xxx[]
-                 * while the nameList contains xxx...
-                 * Note that the nameList can also contain
-                 * xxx[] in which case we don't get here.
-                 */
-                if (i != nTypes - 1 ||
-                    !method.isVarArgs()  ||
-                    !comp2.endsWith("...")) {
-                    return false;
-                }
-                /*
-                 * The last types differ, it is a varargs
-                 * method and the nameList item is varargs.
-                 * We just have to compare the type names, eg,
-                 * make sure we don't have xxx[] for the method
-                 * arg type and yyy... for the nameList item.
-                 */
-                int comp1Length = comp1.length();
-                if (comp1Length + 1 != comp2.length()) {
-                    // The type names are different lengths
-                    return false;
-                }
-                // We know the two type names are the same length
-                if (!comp1.regionMatches(0, comp2, 0, comp1Length - 2)) {
-                    return false;
-                }
-                // We do have xxx[] and xxx... as the last param type
-                return true;
-            }
-        }
-
-        return true;
-    }
-
-  private VirtualMachine vm() {
-    return request.virtualMachine();
-  }
-
-  /**
-     * Remove unneeded spaces and expand class names to fully
-     * qualified names, if necessary and possible.
-     */
-    private String normalizeArgTypeName(String name) throws NoSessionException {
-        /*
-         * Separate the type name from any array modifiers,
-         * stripping whitespace after the name ends.
-         */
-        int i = 0;
-        StringBuffer typePart = new StringBuffer();
-        StringBuffer arrayPart = new StringBuffer();
-        name = name.trim();
-        int nameLength = name.length();
-        /*
-         * For varargs, there can be spaces before the ... but not
-         * within the ...  So, we will just ignore the ...
-         * while stripping blanks.
-         */
-        boolean isVarArgs = name.endsWith("...");
-        if (isVarArgs) {
-            nameLength -= 3;
-        }
-
-        while (i < nameLength) {
-            char c = name.charAt(i);
-            if (Character.isWhitespace(c) || c == '[') {
-                break;      // name is complete
-            }
-            typePart.append(c);
-            i++;
-        }
-        while (i < nameLength) {
-            char c = name.charAt(i);
-            if ( (c == '[') || (c == ']')) {
-                arrayPart.append(c);
-            } else if (!Character.isWhitespace(c)) {
-                throw new IllegalArgumentException(
-                                                "Invalid argument type name");
-
-            }
-            i++;
-        }
-
-        name = typePart.toString();
-
-        /*
-         * When there's no sign of a package name already,
-         * try to expand the
-         * the name to a fully qualified class name
-         */
-        if ((name.indexOf('.') == -1) || name.startsWith("*.")) {
-            try {
-                List<?> refs = specs.runtime.findClassesMatchingPattern(name);
-                if (refs.size() > 0) {  //### ambiguity???
-                    name = ((ReferenceType)(refs.get(0))).name();
-                }
-            } catch (IllegalArgumentException e) {
-                // We'll try the name as is
-            }
-        }
-        name += arrayPart.toString();
-        if (isVarArgs) {
-            name += "...";
-        }
-        return name;
-    }
-
-    /*
-     * Attempt an unambiguous match of the method name and
-     * argument specification to a method. If no arguments
-     * are specified, the method must not be overloaded.
-     * Otherwise, the argument types much match exactly
-     */
-    private Method findMatchingMethod(ClassType clazz)
-                                        throws AmbiguousMethodException,
-                                               NoSuchMethodException,
-                                               NoSessionException  {
-
-        // Normalize the argument string once before looping below.
-        List<String> argTypeNames = null;
-        if (methodArgs() != null) {
-            argTypeNames = new ArrayList<String>(methodArgs().size());
-            for (String name : methodArgs()) {
-                name = normalizeArgTypeName(name);
-                argTypeNames.add(name);
-            }
-        }
-
-        // Check each method in the class for matches
-        Method firstMatch = null;  // first method with matching name
-        Method exactMatch = null;  // (only) method with same name & sig
-        int matchCount = 0;        // > 1 implies overload
-        for (Method candidate : clazz.methods()) {
-            if (candidate.name().equals(methodName())) {
-                matchCount++;
-
-                // Remember the first match in case it is the only one
-                if (matchCount == 1) {
-                    firstMatch = candidate;
-                }
-
-                // If argument types were specified, check against candidate
-                if ((argTypeNames != null)
-                        && compareArgTypes(candidate, argTypeNames) == true) {
-                    exactMatch = candidate;
-                    break;
-                }
-            }
-        }
-
-        // Determine method for breakpoint
-        Method method = null;
-        if (exactMatch != null) {
-            // Name and signature match
-            method = exactMatch;
-        } else if ((argTypeNames == null) && (matchCount > 0)) {
-            // At least one name matched and no arg types were specified
-            if (matchCount == 1) {
-                method = firstMatch;       // Only one match; safe to use it
-            } else {
-                throw new AmbiguousMethodException();
-            }
-        } else {
-            throw new NoSuchMethodException(methodName());
-        }
-        return method;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/bdi/MethodNotFoundException.java b/ojluni/src/main/java/com/sun/tools/example/debug/bdi/MethodNotFoundException.java
deleted file mode 100755
index 75331cc..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/bdi/MethodNotFoundException.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (c) 1998, 1999, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.bdi;
-
-public class MethodNotFoundException extends Exception
-{
-    private static final long serialVersionUID = -2064968107599632609L;
-
-    public MethodNotFoundException()
-    {
-        super();
-    }
-
-    public MethodNotFoundException(String s)
-    {
-        super(s);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/bdi/ModificationWatchpointSpec.java b/ojluni/src/main/java/com/sun/tools/example/debug/bdi/ModificationWatchpointSpec.java
deleted file mode 100755
index 7d30378..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/bdi/ModificationWatchpointSpec.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.bdi;
-
-import com.sun.jdi.*;
-
-public class ModificationWatchpointSpec extends WatchpointSpec {
-
-    ModificationWatchpointSpec(EventRequestSpecList specs,
-                         ReferenceTypeSpec refSpec, String fieldId) {
-        super(specs, refSpec,  fieldId);
-    }
-
-    /**
-     * The 'refType' is known to match.
-     */
-    @Override
-    void resolve(ReferenceType refType) throws InvalidTypeException,
-                                             NoSuchFieldException {
-        if (!(refType instanceof ClassType)) {
-            throw new InvalidTypeException();
-        }
-        Field field = refType.fieldByName(fieldId);
-        if (field == null) {
-            throw new NoSuchFieldException(fieldId);
-        }
-        setRequest(refType.virtualMachine().eventRequestManager()
-                   .createModificationWatchpointRequest(field));
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-        return (obj instanceof ModificationWatchpointSpec) &&
-            super.equals(obj);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/bdi/NoSessionException.java b/ojluni/src/main/java/com/sun/tools/example/debug/bdi/NoSessionException.java
deleted file mode 100755
index df1c82d..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/bdi/NoSessionException.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (c) 1998, 1999, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.bdi;
-
-public class NoSessionException extends Exception {
-
-    private static final long serialVersionUID = -7324357828115128603L;
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/bdi/NoThreadException.java b/ojluni/src/main/java/com/sun/tools/example/debug/bdi/NoThreadException.java
deleted file mode 100755
index 48ed6ba..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/bdi/NoThreadException.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (c) 1998, 1999, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.bdi;
-
-public class NoThreadException extends Exception {
-
-    private static final long serialVersionUID = 1846613539928921998L;
-
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/bdi/OutputListener.java b/ojluni/src/main/java/com/sun/tools/example/debug/bdi/OutputListener.java
deleted file mode 100755
index 2f5db08..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/bdi/OutputListener.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (c) 1998, 1999, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.bdi;
-
-public interface OutputListener {
-    void putString(String str);
-    //void putLine(String line);
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/bdi/ParseException.java b/ojluni/src/main/java/com/sun/tools/example/debug/bdi/ParseException.java
deleted file mode 100755
index 413e7aa..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/bdi/ParseException.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (c) 1998, 1999, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.bdi;
-
-// dummy placeholder for javaCC-generated code.
-
-public class ParseException extends Exception {}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/bdi/PatternReferenceTypeSpec.java b/ojluni/src/main/java/com/sun/tools/example/debug/bdi/PatternReferenceTypeSpec.java
deleted file mode 100755
index 382b6da..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/bdi/PatternReferenceTypeSpec.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.bdi;
-
-import com.sun.jdi.*;
-import java.util.StringTokenizer;
-
-class PatternReferenceTypeSpec implements ReferenceTypeSpec {
-    final boolean isWild;
-    final String classId;
-
-    PatternReferenceTypeSpec(String classId)
-//                             throws ClassNotFoundException
-    {
-//        checkClassName(classId);
-        isWild = classId.startsWith("*.");
-        if (isWild) {
-            this.classId = classId.substring(1);
-        } else {
-            this.classId = classId;
-        }
-    }
-
-    /**
-     * Does the specified ReferenceType match this spec.
-     */
-    @Override
-    public boolean matches(ReferenceType refType) {
-        if (isWild) {
-            return refType.name().endsWith(classId);
-        } else {
-            return refType.name().equals(classId);
-        }
-    }
-
-    @Override
-    public int hashCode() {
-        return classId.hashCode();
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-        if (obj instanceof PatternReferenceTypeSpec) {
-            PatternReferenceTypeSpec spec = (PatternReferenceTypeSpec)obj;
-
-            return classId.equals(spec.classId) && (isWild == spec.isWild);
-        } else {
-            return false;
-        }
-    }
-
-    private void checkClassName(String className) throws ClassNotFoundException {
-        // Do stricter checking of class name validity on deferred
-        //  because if the name is invalid, it will
-        // never match a future loaded class, and we'll be silent
-        // about it.
-        StringTokenizer tokenizer = new StringTokenizer(className, ".");
-        boolean first = true;
-        while (tokenizer.hasMoreTokens()) {
-            String token = tokenizer.nextToken();
-            // Each dot-separated piece must be a valid identifier
-            // and the first token can also be "*". (Note that
-            // numeric class ids are not permitted. They must
-            // match a loaded class.)
-            if (!Utils.isJavaIdentifier(token) && !(first && token.equals("*"))) {
-                throw new ClassNotFoundException();
-            }
-            first = false;
-        }
-    }
-
-    @Override
-    public String toString() {
-        return isWild? "*" + classId : classId;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/bdi/ReferenceTypeSpec.java b/ojluni/src/main/java/com/sun/tools/example/debug/bdi/ReferenceTypeSpec.java
deleted file mode 100755
index 199df81..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/bdi/ReferenceTypeSpec.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.bdi;
-
-import com.sun.jdi.*;
-
-interface ReferenceTypeSpec {
-    /**
-     * Does the specified ReferenceType match this spec.
-     */
-    boolean matches(ReferenceType refType);
-
-    @Override
-    int hashCode();
-
-    @Override
-    boolean equals(Object obj);
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/bdi/Session.java b/ojluni/src/main/java/com/sun/tools/example/debug/bdi/Session.java
deleted file mode 100755
index d2cd7ce..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/bdi/Session.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * Copyright (c) 1998, 1999, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.bdi;
-
-import com.sun.jdi.VirtualMachine;
-import com.sun.jdi.VMDisconnectedException;
-
-/**
- * Our repository of what we know about the state of one
- * running VM.
- */
-class Session {
-
-    final VirtualMachine vm;
-    final ExecutionManager runtime;
-    final OutputListener diagnostics;
-
-    boolean running = true;  // Set false by JDIEventSource
-    boolean interrupted = false;  // Set false by JDIEventSource
-
-    private JDIEventSource eventSourceThread = null;
-    private int traceFlags;
-    private boolean dead = false;
-
-    public Session(VirtualMachine vm, ExecutionManager runtime,
-                   OutputListener diagnostics) {
-        this.vm = vm;
-        this.runtime = runtime;
-        this.diagnostics = diagnostics;
-        this.traceFlags = VirtualMachine.TRACE_NONE;
-    }
-
-    /**
-     * Determine if VM is interrupted, i.e, present and not running.
-     */
-    public boolean isInterrupted() {
-        return interrupted;
-    }
-
-    public void setTraceMode(int traceFlags) {
-        this.traceFlags = traceFlags;
-        if (!dead) {
-            vm.setDebugTraceMode(traceFlags);
-        }
-    }
-
-    public boolean attach() {
-        vm.setDebugTraceMode(traceFlags);
-        diagnostics.putString("Connected to VM");
-        eventSourceThread = new JDIEventSource(this);
-        eventSourceThread.start();
-        return true;
-    }
-
-    public void detach() {
-        if (!dead) {
-            eventSourceThread.interrupt();
-            eventSourceThread = null;
-            //### The VM may already be disconnected
-            //### if the debuggee did a System.exit().
-            //### Exception handler here is a kludge,
-            //### Rather, there are many other places
-            //### where we need to handle this exception,
-            //### and initiate a detach due to an error
-            //### condition, e.g., connection failure.
-            try {
-                vm.dispose();
-            } catch (VMDisconnectedException ee) {}
-            dead = true;
-            diagnostics.putString("Disconnected from VM");
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/bdi/SessionListener.java b/ojluni/src/main/java/com/sun/tools/example/debug/bdi/SessionListener.java
deleted file mode 100755
index 1b22055..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/bdi/SessionListener.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.bdi;
-
-import java.util.EventObject;
-import java.util.EventListener;
-
-public interface SessionListener extends EventListener {
-
-    void sessionStart(EventObject e);
-
-    void sessionInterrupt(EventObject e);
-    void sessionContinue(EventObject e);
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/bdi/SourceNameReferenceTypeSpec.java b/ojluni/src/main/java/com/sun/tools/example/debug/bdi/SourceNameReferenceTypeSpec.java
deleted file mode 100755
index ff954d2..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/bdi/SourceNameReferenceTypeSpec.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.bdi;
-
-import com.sun.jdi.*;
-
-class SourceNameReferenceTypeSpec implements ReferenceTypeSpec {
-    final String sourceName;
-    final int linenumber;
-
-    SourceNameReferenceTypeSpec(String sourceName, int linenumber) {
-        this.sourceName = sourceName;
-        this.linenumber = linenumber;
-    }
-
-    /**
-     * Does the specified ReferenceType match this spec.
-     */
-    @Override
-    public boolean matches(ReferenceType refType) {
-        try {
-            if (refType.sourceName().equals(sourceName)) {
-                try {
-                    refType.locationsOfLine(linenumber);
-                    // if we don't throw an exception then it was found
-                    return true;
-                } catch(AbsentInformationException exc) {
-                } catch(ObjectCollectedException  exc) {
-                }
-            }
-        } catch(AbsentInformationException exc) {
-            // for sourceName(), fall through
-        }
-        return false;
-    }
-
-    @Override
-    public int hashCode() {
-        return sourceName.hashCode() + linenumber;
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-        if (obj instanceof SourceNameReferenceTypeSpec) {
-            SourceNameReferenceTypeSpec spec = (SourceNameReferenceTypeSpec)obj;
-
-            return sourceName.equals(spec.sourceName) &&
-                              (linenumber == spec.linenumber);
-        } else {
-            return false;
-        }
-    }
-
-    @Override
-    public String toString() {
-        return sourceName + "@" + linenumber;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/bdi/SpecErrorEvent.java b/ojluni/src/main/java/com/sun/tools/example/debug/bdi/SpecErrorEvent.java
deleted file mode 100755
index 2ba571e..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/bdi/SpecErrorEvent.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.bdi;
-
-public class SpecErrorEvent extends SpecEvent {
-
-    private static final long serialVersionUID = 8162634387866409578L;
-    private Exception reason;
-
-    public SpecErrorEvent(EventRequestSpec eventRequestSpec,
-                                 Exception reason) {
-        super(eventRequestSpec);
-        this.reason = reason;
-    }
-
-    public Exception getReason() {
-        return reason;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/bdi/SpecEvent.java b/ojluni/src/main/java/com/sun/tools/example/debug/bdi/SpecEvent.java
deleted file mode 100755
index 8492f4d..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/bdi/SpecEvent.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.bdi;
-
-import java.util.EventObject;
-
-import com.sun.jdi.request.EventRequest;
-
-public class SpecEvent extends EventObject {
-
-    private static final long serialVersionUID = 4820735456787276230L;
-    private EventRequestSpec eventRequestSpec;
-
-    public SpecEvent(EventRequestSpec eventRequestSpec) {
-        super(eventRequestSpec.specs);
-        this.eventRequestSpec = eventRequestSpec;
-    }
-
-    public EventRequestSpec getEventRequestSpec() {
-        return eventRequestSpec;
-    }
-
-    public EventRequest getEventRequest() {
-        return eventRequestSpec.getEventRequest();
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/bdi/SpecListener.java b/ojluni/src/main/java/com/sun/tools/example/debug/bdi/SpecListener.java
deleted file mode 100755
index a5d6bc4..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/bdi/SpecListener.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.bdi;
-
-import java.util.EventListener;
-
-public interface SpecListener extends EventListener {
-
-    void breakpointSet(SpecEvent e);
-    void breakpointDeferred(SpecEvent e);
-    void breakpointDeleted(SpecEvent e);
-    void breakpointResolved(SpecEvent e);
-    void breakpointError(SpecErrorEvent e);
-
-    void watchpointSet(SpecEvent e);
-    void watchpointDeferred(SpecEvent e);
-    void watchpointDeleted(SpecEvent e);
-    void watchpointResolved(SpecEvent e);
-    void watchpointError(SpecErrorEvent e);
-
-    void exceptionInterceptSet(SpecEvent e);
-    void exceptionInterceptDeferred(SpecEvent e);
-    void exceptionInterceptDeleted(SpecEvent e);
-    void exceptionInterceptResolved(SpecEvent e);
-    void exceptionInterceptError(SpecErrorEvent e);
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/bdi/ThreadGroupIterator.java b/ojluni/src/main/java/com/sun/tools/example/debug/bdi/ThreadGroupIterator.java
deleted file mode 100755
index 736bf2e..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/bdi/ThreadGroupIterator.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.bdi;
-
-import com.sun.jdi.ThreadGroupReference;
-import java.util.List;
-import java.util.Stack;
-import java.util.ArrayList;
-import java.util.Iterator;
-
-/**
- * Descend the tree of thread groups.
- * @author Robert G. Field
- */
-public class ThreadGroupIterator implements Iterator<ThreadGroupReference> {
-    private final Stack<Iterator<ThreadGroupReference>> stack
-                        = new Stack<Iterator<ThreadGroupReference>>();
-
-    public ThreadGroupIterator(List<ThreadGroupReference> tgl) {
-        push(tgl);
-    }
-
-    public ThreadGroupIterator(ThreadGroupReference tg) {
-        List<ThreadGroupReference> tgl = new ArrayList<ThreadGroupReference>();
-        tgl.add(tg);
-        push(tgl);
-    }
-
-/*
-    ThreadGroupIterator() {
-        this(Env.vm().topLevelThreadGroups());
-    }
-*/
-
-    private Iterator<ThreadGroupReference> top() {
-        return stack.peek();
-    }
-
-    /**
-     * The invariant in this class is that the top iterator
-     * on the stack has more elements.  If the stack is
-     * empty, there is no top.  This method assures
-     * this invariant.
-     */
-    private void push(List<ThreadGroupReference> tgl) {
-        stack.push(tgl.iterator());
-        while (!stack.isEmpty() && !top().hasNext()) {
-            stack.pop();
-        }
-    }
-
-    @Override
-    public boolean hasNext() {
-        return !stack.isEmpty();
-    }
-
-    @Override
-    public ThreadGroupReference next() {
-        return nextThreadGroup();
-    }
-
-    public ThreadGroupReference nextThreadGroup() {
-        ThreadGroupReference tg = top().next();
-        push(tg.threadGroups());
-        return tg;
-    }
-
-    @Override
-    public void remove() {
-        throw new UnsupportedOperationException();
-    }
-
-/*
-    static ThreadGroupReference find(String name) {
-        ThreadGroupIterator tgi = new ThreadGroupIterator();
-        while (tgi.hasNext()) {
-            ThreadGroupReference tg = tgi.nextThreadGroup();
-            if (tg.name().equals(name)) {
-                return tg;
-            }
-        }
-        return null;
-    }
-*/
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/bdi/ThreadInfo.java b/ojluni/src/main/java/com/sun/tools/example/debug/bdi/ThreadInfo.java
deleted file mode 100755
index 9f36408..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/bdi/ThreadInfo.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.bdi;
-
-import com.sun.jdi.*;
-
-//### Should handle target VM death or connection failure cleanly.
-
-public class ThreadInfo {
-
-    private ThreadReference thread;
-    private int status;
-
-    private int frameCount;
-
-    Object userObject;  // User-supplied annotation.
-
-    private boolean interrupted = false;
-
-    private void assureInterrupted() throws VMNotInterruptedException {
-        if (!interrupted) {
-            throw new VMNotInterruptedException();
-        }
-    }
-
-    ThreadInfo (ThreadReference thread) {
-        this.thread = thread;
-        this.frameCount = -1;
-    }
-
-    public ThreadReference thread() {
-        return thread;
-    }
-
-    public int getStatus() throws VMNotInterruptedException {
-        assureInterrupted();
-        update();
-        return status;
-    }
-
-    public int getFrameCount() throws VMNotInterruptedException {
-        assureInterrupted();
-        update();
-        return frameCount;
-    }
-
-    public StackFrame getFrame(int index) throws VMNotInterruptedException {
-        assureInterrupted();
-        update();
-        try {
-            return thread.frame(index);
-        } catch (IncompatibleThreadStateException e) {
-            // Should not happen
-            interrupted = false;
-            throw new VMNotInterruptedException();
-        }
-    }
-
-    public Object getUserObject() {
-        return userObject;
-    }
-
-    public void setUserObject(Object obj) {
-        userObject = obj;
-    }
-
-    // Refresh upon first access after cache is cleared.
-
-    void update() throws VMNotInterruptedException {
-        if (frameCount == -1) {
-            try {
-                status = thread.status();
-                frameCount = thread.frameCount();
-            } catch (IncompatibleThreadStateException e) {
-                // Should not happen
-                interrupted = false;
-                throw new VMNotInterruptedException();
-            }
-        }
-    }
-
-    // Called from 'ExecutionManager'.
-
-    void validate() {
-        interrupted = true;
-    }
-
-    void invalidate() {
-        interrupted = false;
-        frameCount = -1;
-        status = ThreadReference.THREAD_STATUS_UNKNOWN;
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/bdi/ThreadIterator.java b/ojluni/src/main/java/com/sun/tools/example/debug/bdi/ThreadIterator.java
deleted file mode 100755
index ac61bbd..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/bdi/ThreadIterator.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.bdi;
-
-import com.sun.jdi.ThreadGroupReference;
-import com.sun.jdi.ThreadReference;
-import java.util.List;
-import java.util.Iterator;
-
-public class ThreadIterator implements Iterator<ThreadReference> {
-    Iterator<ThreadReference> it = null;
-    ThreadGroupIterator tgi;
-
-    public ThreadIterator(ThreadGroupReference tg) {
-        tgi = new ThreadGroupIterator(tg);
-    }
-
-    //### make this package access only?
-    public ThreadIterator(List<ThreadGroupReference> tgl) {
-        tgi = new ThreadGroupIterator(tgl);
-    }
-
-    @Override
-    public boolean hasNext() {
-        while (it == null || !it.hasNext()) {
-            if (!tgi.hasNext()) {
-                return false; // no more
-            }
-            it = tgi.nextThreadGroup().threads().iterator();
-        }
-        return true;
-    }
-
-    @Override
-    public ThreadReference next() {
-        return it.next();
-    }
-
-    public ThreadReference nextThread() {
-        return next();
-    }
-
-    @Override
-    public void remove() {
-        throw new UnsupportedOperationException();
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/bdi/Utils.java b/ojluni/src/main/java/com/sun/tools/example/debug/bdi/Utils.java
deleted file mode 100755
index 3ccaad6..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/bdi/Utils.java
+++ /dev/null
@@ -1,190 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.bdi;   //### does it belong here?
-
-import com.sun.jdi.*;
-
-public class Utils {
-
-    /**
-     * Return the thread status description.
-     */
-    public static String getStatus(ThreadReference thr) {
-        int status = thr.status();
-        String result;
-        switch (status) {
-          case ThreadReference.THREAD_STATUS_UNKNOWN:
-            result = "unknown status";
-            break;
-          case ThreadReference.THREAD_STATUS_ZOMBIE:
-            result = "zombie";
-            break;
-          case ThreadReference.THREAD_STATUS_RUNNING:
-            result = "running";
-            break;
-          case ThreadReference.THREAD_STATUS_SLEEPING:
-            result = "sleeping";
-            break;
-          case ThreadReference.THREAD_STATUS_MONITOR:
-            result = "waiting to acquire a monitor lock";
-            break;
-          case ThreadReference.THREAD_STATUS_WAIT:
-            result = "waiting on a condition";
-            break;
-          default:
-            result = "<invalid thread status>";
-        }
-        if (thr.isSuspended()) {
-            result += " (suspended)";
-        }
-        return result;
-    }
-
-    /**
-     * Return a description of an object.
-     */
-    public static String description(ObjectReference ref) {
-        ReferenceType clazz = ref.referenceType();
-        long id = ref.uniqueID();  //### TODO use real id
-        if (clazz == null) {
-            return toHex(id);
-        } else {
-            return "(" + clazz.name() + ")" + toHex(id);
-        }
-    }
-
-    /**
-     * Convert a long to a hexadecimal string.
-     */
-    public static String toHex(long n) {
-        char s1[] = new char[16];
-        char s2[] = new char[18];
-
-        // Store digits in reverse order.
-        int i = 0;
-        do {
-            long d = n & 0xf;
-            s1[i++] = (char)((d < 10) ? ('0' + d) : ('a' + d - 10));
-        } while ((n >>>= 4) > 0);
-
-        // Now reverse the array.
-        s2[0] = '0';
-        s2[1] = 'x';
-        int j = 2;
-        while (--i >= 0) {
-            s2[j++] = s1[i];
-        }
-        return new String(s2, 0, j);
-    }
-
-    /**
-     * Convert hexadecimal strings to longs.
-     */
-    public static long fromHex(String hexStr) {
-        String str = hexStr.startsWith("0x") ?
-            hexStr.substring(2).toLowerCase() : hexStr.toLowerCase();
-        if (hexStr.length() == 0) {
-            throw new NumberFormatException();
-        }
-
-        long ret = 0;
-        for (int i = 0; i < str.length(); i++) {
-            int c = str.charAt(i);
-            if (c >= '0' && c <= '9') {
-                ret = (ret * 16) + (c - '0');
-            } else if (c >= 'a' && c <= 'f') {
-                ret = (ret * 16) + (c - 'a' + 10);
-            } else {
-                throw new NumberFormatException();
-            }
-        }
-        return ret;
-    }
-
-
-    /*
-     * The next two methods are used by this class and by EventHandler
-     * to print consistent locations and error messages.
-     */
-    public static String locationString(Location loc) {
-        return  loc.declaringType().name() +
-            "." + loc.method().name() + "(), line=" +
-            loc.lineNumber();
-    }
-
-//### UNUSED.
-/************************
-    private String typedName(Method method) {
-        // TO DO: Use method.signature() instead of method.arguments() so that
-        // we get sensible results for classes without debugging info
-        StringBuffer buf = new StringBuffer();
-        buf.append(method.name());
-        buf.append("(");
-        Iterator it = method.arguments().iterator();
-        while (it.hasNext()) {
-            buf.append(((LocalVariable)it.next()).typeName());
-            if (it.hasNext()) {
-                buf.append(",");
-            }
-        }
-        buf.append(")");
-        return buf.toString();
-    }
-************************/
-
-    public static boolean isValidMethodName(String s) {
-        return isJavaIdentifier(s) ||
-               s.equals("<init>") ||
-               s.equals("<clinit>");
-    }
-
-    public static boolean isJavaIdentifier(String s) {
-        if (s.length() == 0) {
-            return false;
-        }
-        int cp = s.codePointAt(0);
-        if (! Character.isJavaIdentifierStart(cp)) {
-            return false;
-        }
-        for (int i = Character.charCount(cp); i < s.length(); i += Character.charCount(cp)) {
-            cp = s.codePointAt(i);
-            if (! Character.isJavaIdentifierPart(cp)) {
-                return false;
-            }
-        }
-        return true;
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/bdi/VMLaunchFailureException.java b/ojluni/src/main/java/com/sun/tools/example/debug/bdi/VMLaunchFailureException.java
deleted file mode 100755
index 4996184..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/bdi/VMLaunchFailureException.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (c) 1998, 1999, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.bdi;
-
-public class VMLaunchFailureException extends Exception {
-
-    private static final long serialVersionUID = -2439646729274310108L;
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/bdi/VMNotInterruptedException.java b/ojluni/src/main/java/com/sun/tools/example/debug/bdi/VMNotInterruptedException.java
deleted file mode 100755
index f14a5f4..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/bdi/VMNotInterruptedException.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (c) 1998, 1999, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.bdi;
-
-public class VMNotInterruptedException extends Exception {
-
-    private static final long serialVersionUID = 8111074582188765600L;
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/bdi/WatchpointSpec.java b/ojluni/src/main/java/com/sun/tools/example/debug/bdi/WatchpointSpec.java
deleted file mode 100755
index 7b77173..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/bdi/WatchpointSpec.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.bdi;
-
-public abstract class WatchpointSpec extends EventRequestSpec {
-    final String fieldId;
-
-    WatchpointSpec(EventRequestSpecList specs,
-                   ReferenceTypeSpec refSpec, String fieldId) {
-        super(specs, refSpec);
-        this.fieldId = fieldId;
-//        if (!isJavaIdentifier(fieldId)) {
-//            throw new MalformedMemberNameException(fieldId);
-//        }
-    }
-
-    @Override
-    void notifySet(SpecListener listener, SpecEvent evt) {
-        listener.watchpointSet(evt);
-    }
-
-    @Override
-    void notifyDeferred(SpecListener listener, SpecEvent evt) {
-        listener.watchpointDeferred(evt);
-    }
-
-    @Override
-    void notifyResolved(SpecListener listener, SpecEvent evt) {
-        listener.watchpointResolved(evt);
-    }
-
-    @Override
-    void notifyDeleted(SpecListener listener, SpecEvent evt) {
-        listener.watchpointDeleted(evt);
-    }
-
-    @Override
-    void notifyError(SpecListener listener, SpecErrorEvent evt) {
-        listener.watchpointError(evt);
-    }
-
-    @Override
-    public int hashCode() {
-        return refSpec.hashCode() + fieldId.hashCode() +
-            getClass().hashCode();
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-        if (obj instanceof WatchpointSpec) {
-            WatchpointSpec watchpoint = (WatchpointSpec)obj;
-
-            return fieldId.equals(watchpoint.fieldId) &&
-                   refSpec.equals(watchpoint.refSpec) &&
-                   getClass().equals(watchpoint.getClass());
-        } else {
-            return false;
-        }
-    }
-
-    @Override
-    public String errorMessageFor(Exception e) {
-        if (e instanceof NoSuchFieldException) {
-            return ("No field " + fieldId + " in " + refSpec);
-        } else {
-            return super.errorMessageFor(e);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/event/AbstractEventSet.java b/ojluni/src/main/java/com/sun/tools/example/debug/event/AbstractEventSet.java
deleted file mode 100755
index c239f0f..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/event/AbstractEventSet.java
+++ /dev/null
@@ -1,272 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.event;
-
-import com.sun.jdi.*;
-import com.sun.jdi.event.*;
-import com.sun.jdi.request.*;
-
-import java.util.*;
-
-public abstract class AbstractEventSet extends EventObject implements EventSet {
-
-    private static final long serialVersionUID = 2772717574222076977L;
-    private final EventSet jdiEventSet;
-    final Event oneEvent;
-
-    /**
-     */
-    AbstractEventSet(EventSet jdiEventSet) {
-        super(jdiEventSet.virtualMachine());
-        this.jdiEventSet = jdiEventSet;
-        this.oneEvent = eventIterator().nextEvent();
-    }
-
-    public static AbstractEventSet toSpecificEventSet(EventSet jdiEventSet) {
-        Event evt = jdiEventSet.eventIterator().nextEvent();
-        if (evt instanceof LocatableEvent) {
-            if (evt instanceof ExceptionEvent) {
-                return new ExceptionEventSet(jdiEventSet);
-            } else if (evt instanceof WatchpointEvent) {
-                if (evt instanceof AccessWatchpointEvent) {
-                    return new AccessWatchpointEventSet(jdiEventSet);
-                } else {
-                    return new ModificationWatchpointEventSet(jdiEventSet);
-                }
-            } else {
-                return new LocationTriggerEventSet(jdiEventSet);
-            }
-        } else if (evt instanceof ClassPrepareEvent) {
-            return new ClassPrepareEventSet(jdiEventSet);
-        } else if (evt instanceof ClassUnloadEvent) {
-            return new ClassUnloadEventSet(jdiEventSet);
-        } else if (evt instanceof ThreadDeathEvent) {
-            return new ThreadDeathEventSet(jdiEventSet);
-        } else if (evt instanceof ThreadStartEvent) {
-            return new ThreadStartEventSet(jdiEventSet);
-        } else if (evt instanceof VMDeathEvent) {
-            return new VMDeathEventSet(jdiEventSet);
-        } else if (evt instanceof VMDisconnectEvent) {
-            return new VMDisconnectEventSet(jdiEventSet);
-        } else if (evt instanceof VMStartEvent) {
-            return new VMStartEventSet(jdiEventSet);
-        } else {
-            throw new IllegalArgumentException("Unknown event " + evt);
-        }
-    }
-
-    public abstract void notify(JDIListener listener);
-
-    // Implement Mirror
-
-    @Override
-    public VirtualMachine virtualMachine() {
-        return jdiEventSet.virtualMachine();
-    }
-
-    public VirtualMachine getVirtualMachine() {
-        return jdiEventSet.virtualMachine();
-    }
-
-    // Implement EventSet
-
-    /**
-     * Returns the policy used to suspend threads in the target VM
-     * for this event set. This policy is selected from the suspend
-     * policies for each event's request. The one that suspends the
-     * most threads is chosen when the event occurs in the target VM
-     * and that policy is returned here. See
-     * com.sun.jdi.request.EventRequest for the possible policy values.
-     *
-     * @return the integer suspendPolicy
-     */
-    public int getSuspendPolicy() {
-        return jdiEventSet.suspendPolicy();
-    }
-
-    @Override
-    public void resume() {
-        jdiEventSet.resume();
-    }
-
-    @Override
-    public int suspendPolicy() {
-        return jdiEventSet.suspendPolicy();
-    }
-
-    public boolean suspendedAll() {
-        return jdiEventSet.suspendPolicy() == EventRequest.SUSPEND_ALL;
-    }
-
-    public boolean suspendedEventThread() {
-        return jdiEventSet.suspendPolicy() == EventRequest.SUSPEND_EVENT_THREAD;
-    }
-
-    public boolean suspendedNone() {
-        return jdiEventSet.suspendPolicy() == EventRequest.SUSPEND_NONE;
-    }
-
-    /**
-     * Return an iterator specific to {@link Event} objects.
-     */
-    @Override
-    public EventIterator eventIterator() {
-        return jdiEventSet.eventIterator();
-    }
-
-
-    // Implement java.util.Set (by pass through)
-
-    /**
-     * Returns the number of elements in this set (its cardinality).  If this
-     * set contains more than <tt>Integer.MAX_VALUE</tt> elements, returns
-     * <tt>Integer.MAX_VALUE</tt>.
-     *
-     * @return the number of elements in this set (its cardinality).
-     */
-    @Override
-    public int size() {
-        return jdiEventSet.size();
-    }
-
-    /**
-     * Returns <tt>true</tt> if this set contains no elements.
-     *
-     * @return <tt>true</tt> if this set contains no elements.
-     */
-    @Override
-    public boolean isEmpty() {
-        return jdiEventSet.isEmpty();
-    }
-
-    /**
-     * Returns <tt>true</tt> if this set contains the specified element.  More
-     * formally, returns <tt>true</tt> if and only if this set contains an
-     * element <code>e</code> such that <code>(o==null ? e==null :
-     * o.equals(e))</code>.
-     *
-     * @return <tt>true</tt> if this set contains the specified element.
-     */
-    @Override
-    public boolean contains(Object o) {
-        return jdiEventSet.contains(o);
-    }
-
-    /**
-     * Returns an iterator over the elements in this set.  The elements are
-     * returned in no particular order (unless this set is an instance of some
-     * class that provides a guarantee).
-     *
-     * @return an iterator over the elements in this set.
-     */
-    @Override
-    public Iterator<Event> iterator() {
-        return jdiEventSet.iterator();
-    }
-
-    /**
-     * Returns an array containing all of the elements in this set.
-     * Obeys the general contract of the <tt>Collection.toArray</tt> method.
-     *
-     * @return an array containing all of the elements in this set.
-     */
-    @Override
-    public Object[] toArray() {
-        return jdiEventSet.toArray();
-    }
-
-    /**
-     * Returns an array containing all of the elements in this set whose
-     * runtime type is that of the specified array.  Obeys the general
-     * contract of the <tt>Collection.toArray(Object[])</tt> method.
-     *
-     * @param a the array into which the elements of this set are to
-     *          be stored, if it is big enough {
-        return jdiEventSet.XXX();
-    } otherwise, a new array of the
-     *          same runtime type is allocated for this purpose.
-     * @return an array containing the elements of this set.
-     * @throws    ArrayStoreException the runtime type of a is not a supertype
-     * of the runtime type of every element in this set.
-     */
-    @Override
-    public <T> T[] toArray(T a[]) {
-        return jdiEventSet.toArray(a);
-    }
-
-    // Bulk Operations
-
-    /**
-     * Returns <tt>true</tt> if this set contains all of the elements of the
-     * specified collection.  If the specified collection is also a set, this
-     * method returns <tt>true</tt> if it is a <i>subset</i> of this set.
-     *
-     * @param c collection to be checked for containment in this set.
-     * @return <tt>true</tt> if this set contains all of the elements of the
-     *         specified collection.
-     */
-    @Override
-    public boolean containsAll(Collection<?> c) {
-        return jdiEventSet.containsAll(c);
-    }
-
-
-    // Make the rest of Set unmodifiable
-
-    @Override
-    public boolean add(Event e){
-        throw new UnsupportedOperationException();
-    }
-    @Override
-    public boolean remove(Object o) {
-        throw new UnsupportedOperationException();
-    }
-    @Override
-    public boolean addAll(Collection<? extends Event> coll) {
-        throw new UnsupportedOperationException();
-    }
-    @Override
-    public boolean removeAll(Collection<?> coll) {
-        throw new UnsupportedOperationException();
-    }
-    @Override
-    public boolean retainAll(Collection<?> coll) {
-        throw new UnsupportedOperationException();
-    }
-    @Override
-    public void clear() {
-        throw new UnsupportedOperationException();
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/event/AccessWatchpointEventSet.java b/ojluni/src/main/java/com/sun/tools/example/debug/event/AccessWatchpointEventSet.java
deleted file mode 100755
index e8b0f08..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/event/AccessWatchpointEventSet.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.event;
-
-import com.sun.jdi.event.*;
-
-public class AccessWatchpointEventSet extends WatchpointEventSet {
-
-    private static final long serialVersionUID = -2620394219156607673L;
-
-    AccessWatchpointEventSet(EventSet jdiEventSet) {
-        super(jdiEventSet);
-    }
-
-    @Override
-    public void notify(JDIListener listener) {
-        listener.accessWatchpoint(this);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/event/ClassPrepareEventSet.java b/ojluni/src/main/java/com/sun/tools/example/debug/event/ClassPrepareEventSet.java
deleted file mode 100755
index 09e8340..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/event/ClassPrepareEventSet.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.event;
-
-import com.sun.jdi.*;
-import com.sun.jdi.event.*;
-
-public class ClassPrepareEventSet extends AbstractEventSet {
-
-    private static final long serialVersionUID = 5958493423581010491L;
-
-    ClassPrepareEventSet(EventSet jdiEventSet) {
-        super(jdiEventSet);
-    }
-
-    /**
-     * Returns the thread in which this event has occurred.
-     *
-     * @return a {@link ThreadReference} which mirrors the event's thread in
-     * the target VM.
-     */
-    public ThreadReference getThread() {
-        return ((ClassPrepareEvent)oneEvent).thread();
-    }
-
-
-    /**
-     * Returns the reference type for which this event was generated.
-     *
-     * @return a {@link ReferenceType} which mirrors the class, interface, or
-     * array which has been linked.
-     */
-    public ReferenceType getReferenceType() {
-        return ((ClassPrepareEvent)oneEvent).referenceType();
-    }
-
-    @Override
-    public void notify(JDIListener listener) {
-        listener.classPrepare(this);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/event/ClassUnloadEventSet.java b/ojluni/src/main/java/com/sun/tools/example/debug/event/ClassUnloadEventSet.java
deleted file mode 100755
index b9e70d6..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/event/ClassUnloadEventSet.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.event;
-
-import com.sun.jdi.event.*;
-
-public class ClassUnloadEventSet extends AbstractEventSet {
-
-    private static final long serialVersionUID = 8370341450345835866L;
-
-    ClassUnloadEventSet(EventSet jdiEventSet) {
-        super(jdiEventSet);
-    }
-
-    /**
-     * Returns the name of the class that has been unloaded.
-     */
-    public String getClassName() {
-        return ((ClassUnloadEvent)oneEvent).className();
-    }
-
-    /**
-     * Returns the JNI-style signature of the class that has been unloaded.
-     */
-    public String getClassSignature() {
-        return ((ClassUnloadEvent)oneEvent).classSignature();
-    }
-
-    @Override
-    public void notify(JDIListener listener) {
-        listener.classUnload(this);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/event/ExceptionEventSet.java b/ojluni/src/main/java/com/sun/tools/example/debug/event/ExceptionEventSet.java
deleted file mode 100755
index 7c48539..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/event/ExceptionEventSet.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.event;
-
-import com.sun.jdi.*;
-import com.sun.jdi.event.*;
-
-public class ExceptionEventSet extends LocatableEventSet {
-
-    private static final long serialVersionUID = 5328140167954640711L;
-
-    ExceptionEventSet(EventSet jdiEventSet) {
-        super(jdiEventSet);
-    }
-
-    /**
-     * Gets the thrown exception object. The exception object is
-     * an instance of java.lang.Throwable or a subclass in the
-     * target VM.
-     *
-     * @return an {@link ObjectReference} which mirrors the thrown object in
-     * the target VM.
-     */
-    public ObjectReference getException() {
-        return ((ExceptionEvent)oneEvent).exception();
-    }
-
-    /**
-     * Gets the location where the exception will be caught. An exception
-     * is considered to be caught if, at the point of the throw, the
-     * current location is dynamically enclosed in a try statement that
-     * handles the exception. (See the JVM specification for details).
-     * If there is such a try statement, the catch location is the
-     * first code index of the appropriate catch clause.
-     * <p>
-     * If there are native methods in the call stack at the time of the
-     * exception, there are important restrictions to note about the
-     * returned catch location. In such cases,
-     * it is not possible to predict whether an exception will be handled
-     * by some native method on the call stack.
-     * Thus, it is possible that exceptions considered uncaught
-     * here will, in fact, be handled by a native method and not cause
-     * termination of the target VM. Also, it cannot be assumed that the
-     * catch location returned here will ever be reached by the throwing
-     * thread. If there is
-     * a native frame between the current location and the catch location,
-     * the exception might be handled and cleared in that native method
-     * instead.
-     *
-     * @return the {@link Location} where the exception will be caught or null if
-     * the exception is uncaught.
-     */
-    public Location getCatchLocation() {
-        return ((ExceptionEvent)oneEvent).catchLocation();
-    }
-
-    @Override
-    public void notify(JDIListener listener) {
-        listener.exception(this);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/event/JDIAdapter.java b/ojluni/src/main/java/com/sun/tools/example/debug/event/JDIAdapter.java
deleted file mode 100755
index 706e206..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/event/JDIAdapter.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.event;
-
-/**
- * The adapter which receives JDI event sets. The methods in this
- * class are empty; this class is provided as a convenience for
- * easily creating listeners by extending this class and overriding
- * only the methods of interest.
- */
-public class JDIAdapter implements JDIListener {
-
-    @Override
-    public void accessWatchpoint(AccessWatchpointEventSet e) {
-    }
-
-    @Override
-    public void classPrepare(ClassPrepareEventSet e)  {
-    }
-
-    @Override
-    public void classUnload(ClassUnloadEventSet e)  {
-    }
-
-    @Override
-    public void exception(ExceptionEventSet e)  {
-    }
-
-    @Override
-    public void locationTrigger(LocationTriggerEventSet e)  {
-    }
-
-    @Override
-    public void modificationWatchpoint(ModificationWatchpointEventSet e)  {
-    }
-
-    @Override
-    public void threadDeath(ThreadDeathEventSet e)  {
-    }
-
-    @Override
-    public void threadStart(ThreadStartEventSet e)  {
-    }
-
-    @Override
-    public void vmDeath(VMDeathEventSet e)  {
-    }
-
-    @Override
-    public void vmDisconnect(VMDisconnectEventSet e)  {
-    }
-
-    @Override
-    public void vmStart(VMStartEventSet e)  {
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/event/JDIListener.java b/ojluni/src/main/java/com/sun/tools/example/debug/event/JDIListener.java
deleted file mode 100755
index a0637e3..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/event/JDIListener.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.event;
-
-import java.util.EventListener;
-
-public interface JDIListener extends EventListener {
-    void accessWatchpoint(AccessWatchpointEventSet e);
-    void classPrepare(ClassPrepareEventSet e);
-    void classUnload(ClassUnloadEventSet e);
-    void exception(ExceptionEventSet e);
-    void locationTrigger(LocationTriggerEventSet e);
-    void modificationWatchpoint(ModificationWatchpointEventSet e);
-    void threadDeath(ThreadDeathEventSet e);
-    void threadStart(ThreadStartEventSet e);
-    void vmDeath(VMDeathEventSet e);
-    void vmDisconnect(VMDisconnectEventSet e);
-    void vmStart(VMStartEventSet e);
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/event/LocatableEventSet.java b/ojluni/src/main/java/com/sun/tools/example/debug/event/LocatableEventSet.java
deleted file mode 100755
index 6cafff9..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/event/LocatableEventSet.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.event;
-
-import com.sun.jdi.*;
-import com.sun.jdi.event.*;
-
-/**
- * Abstract event set for events with location and thread.
- */
-public abstract class LocatableEventSet extends AbstractEventSet {
-
-    private static final long serialVersionUID = 1027131209997915620L;
-
-    LocatableEventSet(EventSet jdiEventSet) {
-        super(jdiEventSet);
-    }
-
-    /**
-     * Returns the {@link Location} of this mirror. Depending on context
-     * and on available debug information, this location will have
-     * varying precision.
-     *
-     * @return the {@link Location} of this mirror.
-     */
-    public Location getLocation() {
-        return ((LocatableEvent)oneEvent).location();
-    }
-
-    /**
-     * Returns the thread in which this event has occurred.
-     *
-     * @return a {@link ThreadReference} which mirrors the event's thread in
-     * the target VM.
-     */
-    public ThreadReference getThread() {
-        return ((LocatableEvent)oneEvent).thread();
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/event/LocationTriggerEventSet.java b/ojluni/src/main/java/com/sun/tools/example/debug/event/LocationTriggerEventSet.java
deleted file mode 100755
index ab52678..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/event/LocationTriggerEventSet.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.event;
-
-import com.sun.jdi.event.*;
-
-public class LocationTriggerEventSet extends LocatableEventSet {
-
-    private static final long serialVersionUID = -3674631710485872487L;
-
-    LocationTriggerEventSet(EventSet jdiEventSet) {
-        super(jdiEventSet);
-    }
-
-    @Override
-    public void notify(JDIListener listener) {
-        listener.locationTrigger(this);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/event/ModificationWatchpointEventSet.java b/ojluni/src/main/java/com/sun/tools/example/debug/event/ModificationWatchpointEventSet.java
deleted file mode 100755
index 591bcd5..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/event/ModificationWatchpointEventSet.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.event;
-
-import com.sun.jdi.*;
-import com.sun.jdi.event.*;
-
-public class ModificationWatchpointEventSet extends WatchpointEventSet {
-
-    private static final long serialVersionUID = -680889300856154719L;
-
-    ModificationWatchpointEventSet(EventSet jdiEventSet) {
-        super(jdiEventSet);
-    }
-
-    /**
-     * Value that will be assigned to the field when the instruction
-     * completes.
-     */
-    public Value getValueToBe() {
-        return ((ModificationWatchpointEvent)oneEvent).valueToBe();
-    }
-
-    @Override
-    public void notify(JDIListener listener) {
-        listener.modificationWatchpoint(this);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/event/ThreadDeathEventSet.java b/ojluni/src/main/java/com/sun/tools/example/debug/event/ThreadDeathEventSet.java
deleted file mode 100755
index dd17a05..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/event/ThreadDeathEventSet.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.event;
-
-import com.sun.jdi.*;
-import com.sun.jdi.event.*;
-
-public class ThreadDeathEventSet extends AbstractEventSet {
-
-    private static final long serialVersionUID = -8801604712308151331L;
-
-    ThreadDeathEventSet(EventSet jdiEventSet) {
-        super(jdiEventSet);
-    }
-
-    /**
-     * Returns the thread which is terminating.
-     *
-     * @return a {@link ThreadReference} which mirrors the event's thread in
-     * the target VM.
-     */
-    public ThreadReference getThread() {
-        return ((ThreadDeathEvent)oneEvent).thread();
-    }
-
-    @Override
-    public void notify(JDIListener listener) {
-        listener.threadDeath(this);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/event/ThreadStartEventSet.java b/ojluni/src/main/java/com/sun/tools/example/debug/event/ThreadStartEventSet.java
deleted file mode 100755
index c96e298..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/event/ThreadStartEventSet.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.event;
-
-import com.sun.jdi.*;
-import com.sun.jdi.event.*;
-
-public class ThreadStartEventSet extends AbstractEventSet {
-
-    private static final long serialVersionUID = -3802096132294933502L;
-
-    ThreadStartEventSet(EventSet jdiEventSet) {
-        super(jdiEventSet);
-    }
-
-    /**
-     * Returns the thread which has started.
-     *
-     * @return a {@link ThreadReference} which mirrors the event's thread in
-     * the target VM.
-     */
-    public ThreadReference getThread() {
-        return ((ThreadStartEvent)oneEvent).thread();
-    }
-
-    @Override
-    public void notify(JDIListener listener) {
-        listener.threadStart(this);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/event/VMDeathEventSet.java b/ojluni/src/main/java/com/sun/tools/example/debug/event/VMDeathEventSet.java
deleted file mode 100755
index ee05411..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/event/VMDeathEventSet.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.event;
-
-import com.sun.jdi.event.*;
-
-public class VMDeathEventSet extends AbstractEventSet {
-
-    private static final long serialVersionUID = 1163097303940092229L;
-
-    VMDeathEventSet(EventSet jdiEventSet) {
-        super(jdiEventSet);
-    }
-
-   @Override
-    public void notify(JDIListener listener) {
-        listener.vmDeath(this);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/event/VMDisconnectEventSet.java b/ojluni/src/main/java/com/sun/tools/example/debug/event/VMDisconnectEventSet.java
deleted file mode 100755
index 0ac988c..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/event/VMDisconnectEventSet.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.event;
-
-import com.sun.jdi.event.*;
-
-public class VMDisconnectEventSet extends AbstractEventSet {
-
-    private static final long serialVersionUID = 7968123152344675342L;
-
-    VMDisconnectEventSet(EventSet jdiEventSet) {
-        super(jdiEventSet);
-    }
-
-   @Override
-    public void notify(JDIListener listener) {
-        listener.vmDisconnect(this);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/event/VMStartEventSet.java b/ojluni/src/main/java/com/sun/tools/example/debug/event/VMStartEventSet.java
deleted file mode 100755
index 0de4700..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/event/VMStartEventSet.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.event;
-
-import com.sun.jdi.*;
-import com.sun.jdi.event.*;
-
-public class VMStartEventSet extends AbstractEventSet {
-
-    private static final long serialVersionUID = -3384957227835478191L;
-
-    VMStartEventSet(EventSet jdiEventSet) {
-        super(jdiEventSet);
-    }
-
-    /**
-     * Returns the initial thread of the VM which has started.
-     *
-     * @return a {@link ThreadReference} which mirrors the event's
-     * thread in the target VM.
-     */
-    public ThreadReference getThread() {
-        return ((VMStartEvent)oneEvent).thread();
-    }
-
-   @Override
-    public void notify(JDIListener listener) {
-        listener.vmStart(this);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/event/WatchpointEventSet.java b/ojluni/src/main/java/com/sun/tools/example/debug/event/WatchpointEventSet.java
deleted file mode 100755
index e662b10..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/event/WatchpointEventSet.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.event;
-
-import com.sun.jdi.*;
-import com.sun.jdi.event.*;
-
-public abstract class WatchpointEventSet extends LocatableEventSet {
-
-    private static final long serialVersionUID = 5606285209703845409L;
-
-    WatchpointEventSet(EventSet jdiEventSet) {
-        super(jdiEventSet);
-    }
-
-    /**
-     * Returns the field that is about to be accessed/modified.
-     *
-     * @return a {@link Field} which mirrors the field
-     * in the target VM.
-     */
-    public Field getField() {
-        return ((WatchpointEvent)oneEvent).field();
-    }
-
-    /**
-     * Returns the object whose field is about to be accessed/modified.
-     * Return null is the access is to a static field.
-     *
-     * @return a {@link ObjectReference} which mirrors the event's
-     * object in the target VM.
-     */
-    public ObjectReference getObject() {
-        return ((WatchpointEvent)oneEvent).object();
-    }
-
-    /**
-     * Current value of the field.
-     */
-    public Value getValueCurrent() {
-        return ((WatchpointEvent)oneEvent).valueCurrent();
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/expr/ASCII_UCodeESC_CharStream.java b/ojluni/src/main/java/com/sun/tools/example/debug/expr/ASCII_UCodeESC_CharStream.java
deleted file mode 100755
index 69f2433..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/expr/ASCII_UCodeESC_CharStream.java
+++ /dev/null
@@ -1,533 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-/* Generated By:JavaCC: Do not edit this line. ASCII_UCodeESC_CharStream.java Version 0.7pre6 */
-
-package com.sun.tools.example.debug.expr;
-
-/**
- * An implementation of interface CharStream, where the stream is assumed to
- * contain only ASCII characters (with java-like unicode escape processing).
- */
-
-public final class ASCII_UCodeESC_CharStream
-{
-  public static final boolean staticFlag = false;
-  static final int hexval(char c) throws java.io.IOException {
-    switch(c)
-    {
-       case '0' :
-          return 0;
-       case '1' :
-          return 1;
-       case '2' :
-          return 2;
-       case '3' :
-          return 3;
-       case '4' :
-          return 4;
-       case '5' :
-          return 5;
-       case '6' :
-          return 6;
-       case '7' :
-          return 7;
-       case '8' :
-          return 8;
-       case '9' :
-          return 9;
-
-       case 'a' :
-       case 'A' :
-          return 10;
-       case 'b' :
-       case 'B' :
-          return 11;
-       case 'c' :
-       case 'C' :
-          return 12;
-       case 'd' :
-       case 'D' :
-          return 13;
-       case 'e' :
-       case 'E' :
-          return 14;
-       case 'f' :
-       case 'F' :
-          return 15;
-    }
-
-    throw new java.io.IOException(); // Should never come here
-  }
-
-  public int bufpos = -1;
-  int bufsize;
-  int available;
-  int tokenBegin;
-  private int bufline[];
-  private int bufcolumn[];
-
-  private int column = 0;
-  private int line = 1;
-
-  private java.io.InputStream inputStream;
-
-  private boolean prevCharIsCR = false;
-  private boolean prevCharIsLF = false;
-
-  private byte[] nextCharBuf;
-  private char[] buffer;
-  private int maxNextCharInd = 0;
-  private int nextCharInd = -1;
-  private int inBuf = 0;
-
-  private final void ExpandBuff(boolean wrapAround)
-  {
-     char[] newbuffer = new char[bufsize + 2048];
-     int newbufline[] = new int[bufsize + 2048];
-     int newbufcolumn[] = new int[bufsize + 2048];
-
-     try
-     {
-        if (wrapAround)
-        {
-           System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin);
-           System.arraycopy(buffer, 0, newbuffer,
-                                             bufsize - tokenBegin, bufpos);
-           buffer = newbuffer;
-
-           System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin);
-           System.arraycopy(bufline, 0, newbufline, bufsize - tokenBegin, bufpos);
-           bufline = newbufline;
-
-           System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin);
-           System.arraycopy(bufcolumn, 0, newbufcolumn, bufsize - tokenBegin, bufpos);
-           bufcolumn = newbufcolumn;
-
-           bufpos += (bufsize - tokenBegin);
-        }
-        else
-        {
-           System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin);
-           buffer = newbuffer;
-
-           System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin);
-           bufline = newbufline;
-
-           System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin);
-           bufcolumn = newbufcolumn;
-
-           bufpos -= tokenBegin;
-        }
-     }
-     catch (Throwable t)
-     {
-        throw new Error(t.getMessage());
-     }
-
-     available = (bufsize += 2048);
-     tokenBegin = 0;
-  }
-
-  private final void FillBuff() throws java.io.IOException
-  {
-     int i;
-     if (maxNextCharInd == 4096)
-        maxNextCharInd = nextCharInd = 0;
-
-     try {
-        if ((i = inputStream.read(nextCharBuf, maxNextCharInd,
-                                            4096 - maxNextCharInd)) == -1)
-        {
-           inputStream.close();
-           throw new java.io.IOException();
-        }
-        else
-           maxNextCharInd += i;
-        return;
-     }
-     catch(java.io.IOException e) {
-        if (bufpos != 0)
-        {
-           --bufpos;
-           backup(0);
-        }
-        else
-        {
-           bufline[bufpos] = line;
-           bufcolumn[bufpos] = column;
-        }
-        throw e;
-     }
-  }
-
-  private final byte ReadByte() throws java.io.IOException
-  {
-     if (++nextCharInd >= maxNextCharInd)
-        FillBuff();
-
-     return nextCharBuf[nextCharInd];
-  }
-
-  public final char BeginToken() throws java.io.IOException
-  {
-     if (inBuf > 0)
-     {
-        --inBuf;
-        return buffer[tokenBegin = (bufpos == bufsize - 1) ? (bufpos = 0)
-                                                           : ++bufpos];
-     }
-
-     tokenBegin = 0;
-     bufpos = -1;
-
-     return readChar();
-  }
-
-  private final void AdjustBuffSize()
-  {
-     if (available == bufsize)
-     {
-        if (tokenBegin > 2048)
-        {
-           bufpos = 0;
-           available = tokenBegin;
-        }
-        else
-           ExpandBuff(false);
-     }
-     else if (available > tokenBegin)
-        available = bufsize;
-     else if ((tokenBegin - available) < 2048)
-        ExpandBuff(true);
-     else
-        available = tokenBegin;
-  }
-
-  private final void UpdateLineColumn(char c)
-  {
-     column++;
-
-     if (prevCharIsLF)
-     {
-        prevCharIsLF = false;
-        line += (column = 1);
-     }
-     else if (prevCharIsCR)
-     {
-        prevCharIsCR = false;
-        if (c == '\n')
-        {
-           prevCharIsLF = true;
-        }
-        else
-           line += (column = 1);
-     }
-
-     switch (c)
-     {
-        case '\r' :
-           prevCharIsCR = true;
-           break;
-        case '\n' :
-           prevCharIsLF = true;
-           break;
-        case '\t' :
-           column--;
-           column += (8 - (column & 07));
-           break;
-        default :
-           break;
-     }
-
-     bufline[bufpos] = line;
-     bufcolumn[bufpos] = column;
-  }
-
-  public final char readChar() throws java.io.IOException
-  {
-     if (inBuf > 0)
-     {
-        --inBuf;
-        return buffer[(bufpos == bufsize - 1) ? (bufpos = 0) : ++bufpos];
-     }
-
-     char c;
-
-     if (++bufpos == available)
-        AdjustBuffSize();
-
-     if (((buffer[bufpos] = c = (char)((char)0xff & ReadByte())) == '\\'))
-     {
-        UpdateLineColumn(c);
-
-        int backSlashCnt = 1;
-
-        for (;;) // Read all the backslashes
-        {
-           if (++bufpos == available)
-              AdjustBuffSize();
-
-           try
-           {
-              if ((buffer[bufpos] = c = (char)((char)0xff & ReadByte())) != '\\')
-              {
-                 UpdateLineColumn(c);
-                 // found a non-backslash char.
-                 if ((c == 'u') && ((backSlashCnt & 1) == 1))
-                 {
-                    if (--bufpos < 0)
-                       bufpos = bufsize - 1;
-
-                    break;
-                 }
-
-                 backup(backSlashCnt);
-                 return '\\';
-              }
-           }
-           catch(java.io.IOException e)
-           {
-              if (backSlashCnt > 1)
-                 backup(backSlashCnt);
-
-              return '\\';
-           }
-
-           UpdateLineColumn(c);
-           backSlashCnt++;
-        }
-
-        // Here, we have seen an odd number of backslash's followed by a 'u'
-        try
-        {
-           while ((c = (char)((char)0xff & ReadByte())) == 'u')
-              ++column;
-
-           buffer[bufpos] = c = (char)(hexval(c) << 12 |
-                                       hexval((char)((char)0xff & ReadByte())) << 8 |
-                                       hexval((char)((char)0xff & ReadByte())) << 4 |
-                                       hexval((char)((char)0xff & ReadByte())));
-
-           column += 4;
-        }
-        catch(java.io.IOException e)
-        {
-           throw new Error("Invalid escape character at line " + line +
-                                         " column " + column + ".");
-        }
-
-        if (backSlashCnt == 1)
-           return c;
-        else
-        {
-           backup(backSlashCnt - 1);
-           return '\\';
-        }
-     }
-     else
-     {
-        UpdateLineColumn(c);
-        return (c);
-     }
-  }
-
-  /**
-   * @deprecated
-   * @see #getEndColumn
-   */
-    @Deprecated
-  public final int getColumn() {
-     return bufcolumn[bufpos];
-  }
-
-  /**
-   * @deprecated
-   * @see #getEndLine
-   */
-    @Deprecated
-  public final int getLine() {
-     return bufline[bufpos];
-  }
-
-  public final int getEndColumn() {
-     return bufcolumn[bufpos];
-  }
-
-  public final int getEndLine() {
-     return bufline[bufpos];
-  }
-
-  public final int getBeginColumn() {
-     return bufcolumn[tokenBegin];
-  }
-
-  public final int getBeginLine() {
-     return bufline[tokenBegin];
-  }
-
-  public final void backup(int amount) {
-
-    inBuf += amount;
-    if ((bufpos -= amount) < 0)
-       bufpos += bufsize;
-  }
-
-  public ASCII_UCodeESC_CharStream(java.io.InputStream dstream,
-                 int startline, int startcolumn, int buffersize)
-  {
-    inputStream = dstream;
-    line = startline;
-    column = startcolumn - 1;
-
-    available = bufsize = buffersize;
-    buffer = new char[buffersize];
-    bufline = new int[buffersize];
-    bufcolumn = new int[buffersize];
-    nextCharBuf = new byte[4096];
-  }
-
-  public ASCII_UCodeESC_CharStream(java.io.InputStream dstream,
-                                        int startline, int startcolumn)
-  {
-     this(dstream, startline, startcolumn, 4096);
-  }
-  public void ReInit(java.io.InputStream dstream,
-                 int startline, int startcolumn, int buffersize)
-  {
-    inputStream = dstream;
-    line = startline;
-    column = startcolumn - 1;
-
-    if (buffer == null || buffersize != buffer.length)
-    {
-      available = bufsize = buffersize;
-      buffer = new char[buffersize];
-      bufline = new int[buffersize];
-      bufcolumn = new int[buffersize];
-      nextCharBuf = new byte[4096];
-    }
-    prevCharIsLF = prevCharIsCR = false;
-    tokenBegin = inBuf = maxNextCharInd = 0;
-    nextCharInd = bufpos = -1;
-  }
-
-  public void ReInit(java.io.InputStream dstream,
-                                        int startline, int startcolumn)
-  {
-     ReInit(dstream, startline, startcolumn, 4096);
-  }
-
-  public final String GetImage()
-  {
-     if (bufpos >= tokenBegin)
-        return new String(buffer, tokenBegin, bufpos - tokenBegin + 1);
-     else
-        return new String(buffer, tokenBegin, bufsize - tokenBegin) +
-                              new String(buffer, 0, bufpos + 1);
-  }
-
-  public final char[] GetSuffix(int len)
-  {
-     char[] ret = new char[len];
-
-     if ((bufpos + 1) >= len)
-        System.arraycopy(buffer, bufpos - len + 1, ret, 0, len);
-     else
-     {
-        System.arraycopy(buffer, bufsize - (len - bufpos - 1), ret, 0,
-                                                          len - bufpos - 1);
-        System.arraycopy(buffer, 0, ret, len - bufpos - 1, bufpos + 1);
-     }
-
-     return ret;
-  }
-
-  public void Done()
-  {
-     nextCharBuf = null;
-     buffer = null;
-     bufline = null;
-     bufcolumn = null;
-  }
-
-  /**
-   * Method to adjust line and column numbers for the start of a token.<BR>
-   */
-  public void adjustBeginLineColumn(int newLine, int newCol)
-  {
-     int start = tokenBegin;
-     int len;
-
-     if (bufpos >= tokenBegin)
-     {
-        len = bufpos - tokenBegin + inBuf + 1;
-     }
-     else
-     {
-        len = bufsize - tokenBegin + bufpos + 1 + inBuf;
-     }
-
-     int i = 0, j = 0, k = 0;
-     int nextColDiff = 0, columnDiff = 0;
-
-     while (i < len &&
-            bufline[j = start % bufsize] == bufline[k = ++start % bufsize])
-     {
-        bufline[j] = newLine;
-        nextColDiff = columnDiff + bufcolumn[k] - bufcolumn[j];
-        bufcolumn[j] = newCol + columnDiff;
-        columnDiff = nextColDiff;
-        i++;
-     }
-
-     if (i < len)
-     {
-        bufline[j] = newLine++;
-        bufcolumn[j] = newCol + columnDiff;
-
-        while (i++ < len)
-        {
-           if (bufline[j = start % bufsize] != bufline[++start % bufsize])
-              bufline[j] = newLine++;
-           else
-              bufline[j] = newLine;
-        }
-     }
-
-     line = bufline[j];
-     column = bufcolumn[j];
-  }
-
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/expr/Expr.jj b/ojluni/src/main/java/com/sun/tools/example/debug/expr/Expr.jj
deleted file mode 100755
index ffe12e3..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/expr/Expr.jj
+++ /dev/null
@@ -1,724 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-options {
-  JAVA_UNICODE_ESCAPE = true;
-  STATIC = false;
-}
-
-PARSER_BEGIN(ExpressionParser)
-
-package com.sun.tools.example.debug.expr;
-
-import com.sun.jdi.*;
-import java.util.Stack;
-import java.util.List;
-import java.util.ArrayList;
-
-public class ExpressionParser {    
-
-  Stack stack = new Stack();    
-  VirtualMachine vm = null;
-  GetFrame frameGetter = null;
-  private static GetFrame lastFrameGetter;
-  private static LValue lastLValue;
-
-  LValue peek() {
-    return (LValue)stack.peek();
-  }
-
-  LValue pop() {
-    return (LValue)stack.pop();
-  }
-
-  void push(LValue lval) {
-    stack.push(lval);
-  }
-
-  public static Value getMassagedValue() throws ParseException {
-        return lastLValue.getMassagedValue(lastFrameGetter);
-  }
-
-  public interface GetFrame {
-        StackFrame get() throws IncompatibleThreadStateException;
-  }
-
-  public static Value evaluate(String expr, VirtualMachine vm, 
-                               GetFrame frameGetter) throws ParseException,
-                                            InvocationException, 
-					    InvalidTypeException,
-					    ClassNotLoadedException,
-					    IncompatibleThreadStateException {
-        // TODO StringBufferInputStream is deprecated.
-        java.io.InputStream in = new java.io.StringBufferInputStream(expr);
-        ExpressionParser parser = new ExpressionParser(in);
-        parser.vm = vm;
-        parser.frameGetter = frameGetter;
-	Value value = null;
-        parser.Expression();
-	lastFrameGetter = frameGetter;
-	lastLValue = parser.pop();
-	return lastLValue.getValue();
-  }
-
-  public static void main(String args[]) {
-    ExpressionParser parser;
-    System.out.print("Java Expression Parser:  ");
-    if (args.length == 0) {
-      System.out.println("Reading from standard input . . .");
-      parser = new ExpressionParser(System.in);
-    } else if (args.length == 1) {
-      System.out.println("Reading from file " + args[0] + " . . .");
-      try {
-        parser = new ExpressionParser(new java.io.FileInputStream(args[0]));
-      } catch (java.io.FileNotFoundException e) {
-        System.out.println("Java Parser Version 1.0.2:  File " + 
-                           args[0] + " not found.");
-        return;
-      }
-    } else {
-      System.out.println("Usage is one of:");
-      System.out.println("         java ExpressionParser < inputfile");
-      System.out.println("OR");
-      System.out.println("         java ExpressionParser inputfile");
-      return;
-    }
-    try {
-        parser.Expression();
-        System.out.print("Java Expression Parser:  ");
-        System.out.println("Java program parsed successfully.");
-    } catch (ParseException e) {
-        System.out.print("Java Expression Parser:  ");
-        System.out.println("Encountered errors during parse.");
-    }
-  }
-
-}
-
-PARSER_END(ExpressionParser)
-
-
-SKIP : /* WHITE SPACE */
-{
-  " "
-| "\t"
-| "\n"
-| "\r"
-| "\f"
-}
-
-SPECIAL_TOKEN : /* COMMENTS */
-{
-  <SINGLE_LINE_COMMENT: "//" (~["\n","\r"])* ("\n"|"\r"|"\r\n")>
-| <FORMAL_COMMENT: "/**" (~["*"])* "*" ("*" | (~["*","/"] (~["*"])* "*"))* "/">
-| <MULTI_LINE_COMMENT: "/*" (~["*"])* "*" ("*" | (~["*","/"] (~["*"])* "*"))* "/">
-}
-
-TOKEN : /* RESERVED WORDS AND LITERALS */
-{
-  < ABSTRACT: "abstract" >
-| < BOOLEAN: "boolean" >
-| < BREAK: "break" >
-| < BYTE: "byte" >
-| < CASE: "case" >
-| < CATCH: "catch" >
-| < CHAR: "char" >
-| < CLASS: "class" >
-| < CONST: "const" >
-| < CONTINUE: "continue" >
-| < _DEFAULT: "default" >
-| < DO: "do" >
-| < DOUBLE: "double" >
-| < ELSE: "else" >
-| < EXTENDS: "extends" >
-| < FALSE: "false" >
-| < FINAL: "final" >
-| < FINALLY: "finally" >
-| < FLOAT: "float" >
-| < FOR: "for" >
-| < GOTO: "goto" >
-| < IF: "if" >
-| < IMPLEMENTS: "implements" >
-| < IMPORT: "import" >
-| < INSTANCEOF: "instanceof" >
-| < INT: "int" >
-| < INTERFACE: "interface" >
-| < LONG: "long" >
-| < NATIVE: "native" >
-| < NEW: "new" >
-| < NULL: "null" >
-| < PACKAGE: "package">
-| < PRIVATE: "private" >
-| < PROTECTED: "protected" >
-| < PUBLIC: "public" >
-| < RETURN: "return" >
-| < SHORT: "short" >
-| < STATIC: "static" >
-| < SUPER: "super" >
-| < SWITCH: "switch" >
-| < SYNCHRONIZED: "synchronized" >
-| < THIS: "this" >
-| < THROW: "throw" >
-| < THROWS: "throws" >
-| < TRANSIENT: "transient" >
-| < TRUE: "true" >
-| < TRY: "try" >
-| < VOID: "void" >
-| < VOLATILE: "volatile" >
-| < WHILE: "while" >
-}
-
-TOKEN : /* LITERALS */
-{
-  <
-    INTEGER_LITERAL:
-        <DECIMAL_LITERAL> (["l","L"])?
-      | <HEX_LITERAL> (["l","L"])?
-      | <OCTAL_LITERAL> (["l","L"])?
-  >
-|
-  < #DECIMAL_LITERAL: ["1"-"9"] (["0"-"9"])* >
-|
-  < #HEX_LITERAL: "0" ["x","X"] (["0"-"9","a"-"f","A"-"F"])+ >
-|
-  < #OCTAL_LITERAL: "0" (["0"-"7"])* >
-|
-  < FLOATING_POINT_LITERAL:
-        (["0"-"9"])+ "." (["0"-"9"])* (<EXPONENT>)? (["f","F","d","D"])?
-      | "." (["0"-"9"])+ (<EXPONENT>)? (["f","F","d","D"])?
-      | (["0"-"9"])+ <EXPONENT> (["f","F","d","D"])?
-      | (["0"-"9"])+ (<EXPONENT>)? ["f","F","d","D"]
-  >
-|
-  < #EXPONENT: ["e","E"] (["+","-"])? (["0"-"9"])+ >
-|
-  < CHARACTER_LITERAL:
-      "'"
-      (   (~["'","\\","\n","\r"])
-        | ("\\"
-            ( ["n","t","b","r","f","\\","'","\""]
-            | ["0"-"7"] ( ["0"-"7"] )?
-            | ["0"-"3"] ["0"-"7"] ["0"-"7"]
-            )
-          )
-      )
-      "'"
-  >
-|
-  < STRING_LITERAL:
-      "\""
-      (   (~["\"","\\","\n","\r"])
-        | ("\\"
-            ( ["n","t","b","r","f","\\","'","\""]
-            | ["0"-"7"] ( ["0"-"7"] )?
-            | ["0"-"3"] ["0"-"7"] ["0"-"7"]
-            )
-          )
-      )*
-      "\""
-  >
-}
-
-TOKEN : /* IDENTIFIERS */
-{
-  < IDENTIFIER: <LETTER> (<LETTER>|<DIGIT>)* >
-|
-  < #LETTER:
-      [
-       "\u0024",
-       "\u0041"-"\u005a",
-       "\u005f",
-       "\u0061"-"\u007a",
-       "\u00c0"-"\u00d6",
-       "\u00d8"-"\u00f6",
-       "\u00f8"-"\u00ff",
-       "\u0100"-"\u1fff",
-       "\u3040"-"\u318f",
-       "\u3300"-"\u337f",
-       "\u3400"-"\u3d2d",
-       "\u4e00"-"\u9fff",
-       "\uf900"-"\ufaff"
-      ]
-  >
-|
-  < #DIGIT:
-      [
-       "\u0030"-"\u0039",
-       "\u0660"-"\u0669",
-       "\u06f0"-"\u06f9",
-       "\u0966"-"\u096f",
-       "\u09e6"-"\u09ef",
-       "\u0a66"-"\u0a6f",
-       "\u0ae6"-"\u0aef",
-       "\u0b66"-"\u0b6f",
-       "\u0be7"-"\u0bef",
-       "\u0c66"-"\u0c6f",
-       "\u0ce6"-"\u0cef",
-       "\u0d66"-"\u0d6f",
-       "\u0e50"-"\u0e59",
-       "\u0ed0"-"\u0ed9",
-       "\u1040"-"\u1049"
-      ]
-  >
-}
-
-TOKEN : /* SEPARATORS */
-{
-  < LPAREN: "(" >
-| < RPAREN: ")" >
-| < LBRACE: "{" >
-| < RBRACE: "}" >
-| < LBRACKET: "[" >
-| < RBRACKET: "]" >
-| < SEMICOLON: ";" >
-| < COMMA: "," >
-| < DOT: "." >
-}
-
-TOKEN : /* OPERATORS */
-{
-  < ASSIGN: "=" >
-| < GT: ">" >
-| < LT: "<" >
-| < BANG: "!" >
-| < TILDE: "~" >
-| < HOOK: "?" >
-| < COLON: ":" >
-| < EQ: "==" >
-| < LE: "<=" >
-| < GE: ">=" >
-| < NE: "!=" >
-| < SC_OR: "||" >
-| < SC_AND: "&&" >
-| < INCR: "++" >
-| < DECR: "--" >
-| < PLUS: "+" >
-| < MINUS: "-" >
-| < STAR: "*" >
-| < SLASH: "/" >
-| < BIT_AND: "&" >
-| < BIT_OR: "|" >
-| < XOR: "^" >
-| < REM: "%" >
-| < LSHIFT: "<<" >
-| < RSIGNEDSHIFT: ">>" >
-| < RUNSIGNEDSHIFT: ">>>" >
-| < PLUSASSIGN: "+=" >
-| < MINUSASSIGN: "-=" >
-| < STARASSIGN: "*=" >
-| < SLASHASSIGN: "/=" >
-| < ANDASSIGN: "&=" >
-| < ORASSIGN: "|=" >
-| < XORASSIGN: "^=" >
-| < REMASSIGN: "%=" >
-| < LSHIFTASSIGN: "<<=" >
-| < RSIGNEDSHIFTASSIGN: ">>=" >
-| < RUNSIGNEDSHIFTASSIGN: ">>>=" >
-}
-
-
-/*****************************************
- * THE JAVA LANGUAGE GRAMMAR STARTS HERE *
- *****************************************/
-
-/*
- * Type, name and expression syntax follows.
- */
-
-void Type() :
-{}
-{
-  ( PrimitiveType() | Name() ) ( "[" "]" )*
-}
-
-void PrimitiveType() :
-{}
-{
-  "boolean"
-|
-  "char"
-|
-  "byte"
-|
-  "short"
-|
-  "int"
-|
-  "long"
-|
-  "float"
-|
-  "double"
-}
-
-
-String Name() :
-{StringBuffer sb = new StringBuffer();}
-{
-  <IDENTIFIER> { sb.append(token); }
-  ( LOOKAHEAD(2) "." <IDENTIFIER> { sb.append('.'); sb.append(token); }
-  )*
-        { return sb.toString(); }
-}
-
-void NameList() :
-{}
-{
-  Name()
-  ( "," Name()
-  )*
-}
-
-
-/*
- * Expression syntax follows.
- */
-
-void Expression() :
-{}
-{
-  LOOKAHEAD( PrimaryExpression() AssignmentOperator() )
-  Assignment()
-|
-  ConditionalExpression()
-}
-
-void Assignment() :
-{}
-{
-  PrimaryExpression() AssignmentOperator() Expression()
-        { LValue exprVal = pop(); pop().setValue(exprVal); push(exprVal);}
-}
-
-void AssignmentOperator() :
-{}
-{
-  "=" | "*=" | "/=" | "%=" | "+=" | "-=" | "<<=" | ">>=" | ">>>=" | "&=" | "^=" | "|="
-}
-
-void ConditionalExpression() :
-{}
-{
-  ConditionalOrExpression() 
-        [ "?" Expression() ":" ConditionalExpression() 
-                { LValue falseBranch = pop(); LValue trueBranch = pop(); 
-                  Value cond = pop().interiorGetValue();
-                  if (cond instanceof BooleanValue) {
-                        push(((BooleanValue)cond).booleanValue()? 
-                                        trueBranch : falseBranch);
-                  } else {
-                        throw new ParseException("Condition must be boolean");
-                  }
-                }
-        ]
-}
-
-void ConditionalOrExpression() :
-{}
-{
-  ConditionalAndExpression() 
-        ( "||" ConditionalAndExpression() 
-                        { throw new ParseException("operation not yet supported"); }
-        )*
-}
-
-void ConditionalAndExpression() :
-{}
-{
-  InclusiveOrExpression() 
-        ( "&&" InclusiveOrExpression() 
-                        { throw new ParseException("operation not yet supported"); }
-        )*
-}
-
-void InclusiveOrExpression() :
-{}
-{
-  ExclusiveOrExpression() 
-        ( "|" ExclusiveOrExpression() 
-                        { throw new ParseException("operation not yet supported"); }
-        )*
-}
-
-void ExclusiveOrExpression() :
-{}
-{
-  AndExpression() 
-        ( "^" AndExpression() 
-                        { throw new ParseException("operation not yet supported"); }
-        )*
-}
-
-void AndExpression() :
-{}
-{
-  EqualityExpression() 
-        ( "&" EqualityExpression() 
-                        { throw new ParseException("operation not yet supported"); }
-        )*
-}
-
-void EqualityExpression() :
-{Token tok;}
-{
-  InstanceOfExpression() 
-        ( ( tok = "==" | tok = "!=" ) InstanceOfExpression() 
-                { LValue left = pop(); 
-                  push( LValue.booleanOperation(vm, tok, pop(), left) ); }
-        )*
-}
-
-void InstanceOfExpression() :
-{}
-{
-  RelationalExpression() 
-        [ "instanceof" Type() 
-                        { throw new ParseException("operation not yet supported"); }
-        ]
-}
-
-void RelationalExpression() :
-{Token tok;}
-{
-  ShiftExpression() 
-        ( ( tok = "<" | tok = ">" | tok = "<=" | tok = ">=" ) ShiftExpression()
-                { LValue left = pop(); 
-                  push( LValue.booleanOperation(vm, tok, pop(), left) ); }
-         )*
-}
-
-void ShiftExpression() :
-{}
-{
-  AdditiveExpression() 
-        ( ( "<<" | ">>" | ">>>" ) AdditiveExpression() 
-                        { throw new ParseException("operation not yet supported"); }
-        )*
-}
-
-void AdditiveExpression() :
-{Token tok;}
-{
-  MultiplicativeExpression() 
-        ( ( tok = "+" | tok = "-" ) MultiplicativeExpression() 
-                { LValue left = pop(); 
-                  push( LValue.operation(vm, tok, pop(), left, frameGetter) ); }
-        )*
-}
-
-void MultiplicativeExpression() :
-{Token tok;}
-{
-  UnaryExpression() 
-        ( ( tok = "*" | tok = "/" | tok = "%" ) UnaryExpression()
-                { LValue left = pop(); 
-                  push( LValue.operation(vm, tok, pop(), left, frameGetter) ); }
-        )*
-}
-
-void UnaryExpression() :
-{}
-{
-  ( "+" | "-" ) UnaryExpression()
-                        { throw new ParseException("operation not yet supported"); }
-|
-  PreIncrementExpression()
-|
-  PreDecrementExpression()
-|
-  UnaryExpressionNotPlusMinus()
-}
-
-void PreIncrementExpression() :
-{}
-{
-  "++" PrimaryExpression()
-                        { throw new ParseException("operation not yet supported"); }
-}
-
-void PreDecrementExpression() :
-{}
-{
-  "--" PrimaryExpression()
-                        { throw new ParseException("operation not yet supported"); }
-}
-
-void UnaryExpressionNotPlusMinus() :
-{}
-{
-  ( "~" | "!" ) UnaryExpression()
-                        { throw new ParseException("operation not yet supported"); }
-|
-  LOOKAHEAD( CastLookahead() )
-  CastExpression()
-|
-  PostfixExpression()
-}
-
-// This production is to determine lookahead only.  The LOOKAHEAD specifications
-// below are not used, but they are there just to indicate that we know about
-// this.
-void CastLookahead() :
-{}
-{
-  LOOKAHEAD(2)
-  "(" PrimitiveType()
-|
-  LOOKAHEAD("(" Name() "[")
-  "(" Name() "[" "]"
-|
-  "(" Name() ")" ( "~" | "!" | "(" | <IDENTIFIER> | "this" | "super" | "new" | Literal() )
-}
-
-void PostfixExpression() :
-{}
-{
-  PrimaryExpression() 
-        [ "++" | "--" 
-                        { throw new ParseException("operation not yet supported"); }
-        ]
-}
-
-void CastExpression() :
-{}
-{
-  LOOKAHEAD(2)
-  "(" PrimitiveType() ( "[" "]" )* ")" UnaryExpression()
-|
-  "(" Name() ( "[" "]" )* ")" UnaryExpressionNotPlusMinus()
-}
-
-void PrimaryExpression() :
-{}
-{
-  PrimaryPrefix() ( PrimarySuffix() )*
-}
-
-void PrimaryPrefix() :
-{String name;}
-{
-  Literal()
-|
-  name = Name()
-                        { push(LValue.makeName(vm, frameGetter, name)); }
-|
-  "this"
-                        { push(LValue.makeThisObject(vm, frameGetter, token)); }
-|
-  "super" "." <IDENTIFIER>
-                        { throw new ParseException("operation not yet supported"); }
-|
-  "(" Expression() ")"
-|
-  AllocationExpression()
-}
-
-void PrimarySuffix() :
-{List argList;}
-{
-  "[" Expression() "]"  
-                        { LValue index = pop();
-                          push(pop().arrayElementLValue(index)); }
-|
-  "." <IDENTIFIER>
-                        { push(pop().memberLValue(frameGetter, token.image)); }
-|
-  argList = Arguments()
-                        { peek().invokeWith(argList); }
-}
-
-void Literal() :
-{}
-{
-  <INTEGER_LITERAL>
-                        { push(LValue.makeInteger(vm, token)); }
-|
-  <FLOATING_POINT_LITERAL>
-                        { push(LValue.makeFloat(vm, token)); }
-|
-  <CHARACTER_LITERAL>
-                        { push(LValue.makeCharacter(vm, token)); }
-|
-  <STRING_LITERAL>
-                        { push(LValue.makeString(vm, token)); }
-|
-  BooleanLiteral()
-                        { push(LValue.makeBoolean(vm, token)); }
-|
-  NullLiteral()
-                        { push(LValue.makeNull(vm, token)); }
-}
-
-void BooleanLiteral() :
-{}
-{
-  "true" 
-|
-  "false"
-}
-
-void NullLiteral() :
-{}
-{
-  "null"
-}
-
-List Arguments() :
-{List argList = new ArrayList();}
-{
-  "(" [ ArgumentList(argList) ] ")"
-  { return argList; }
-}
-
-void ArgumentList(List argList) :
-{}
-{
-  Expression() {argList.add(pop().interiorGetValue());}
-  ( "," Expression() {argList.add(pop().interiorGetValue());} )*
-}
-
-void AllocationExpression() :
-{List argList; String className;}
-{
-  LOOKAHEAD(2)
-  "new" PrimitiveType() ArrayDimensions()
-|
-  "new" className = Name() ( argList = Arguments() 
-                        { push(LValue.makeNewObject(vm, frameGetter, className, argList)); }
-                           | ArrayDimensions() 
-                        { throw new ParseException("operation not yet supported"); }
-			   )
-}
-
-/*
- * The second LOOKAHEAD specification below is to parse to PrimarySuffix
- * if there is an expression between the "[...]".
- */
-void ArrayDimensions() :
-{}
-{
-  ( LOOKAHEAD(2) "[" Expression() "]" )+ ( LOOKAHEAD(2) "[" "]" )*
-}
-
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/expr/ExpressionParser.java b/ojluni/src/main/java/com/sun/tools/example/debug/expr/ExpressionParser.java
deleted file mode 100755
index 063c29d..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/expr/ExpressionParser.java
+++ /dev/null
@@ -1,3942 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-/* Generated By:JavaCC: Do not edit this line. ExpressionParser.java */
-package com.sun.tools.example.debug.expr;
-
-import com.sun.jdi.*;
-
-import java.util.Stack;
-import java.util.List;
-import java.util.ArrayList;
-
-public class ExpressionParser implements ExpressionParserConstants {
-
-   Stack<LValue> stack = new Stack<LValue>();
-  VirtualMachine vm = null;
-  GetFrame frameGetter = null;
-  private static GetFrame lastFrameGetter;
-  private static LValue lastLValue;
-
-  LValue peek() {
-      return stack.peek();
-  }
-
-  LValue pop() {
-      return stack.pop();
-  }
-
-  void push(LValue lval) {
-    stack.push(lval);
-  }
-
-  public static Value getMassagedValue() throws ParseException {
-       return lastLValue.getMassagedValue(lastFrameGetter);
-  }
-
-  public interface GetFrame {
-        StackFrame get() throws IncompatibleThreadStateException;
-  }
-
-  public static Value evaluate(String expr, VirtualMachine vm,
-         GetFrame frameGetter) throws ParseException, InvocationException,
-         InvalidTypeException, ClassNotLoadedException,
-                                            IncompatibleThreadStateException {
-        // TODO StringBufferInputStream is deprecated.
-        java.io.InputStream in = new java.io.StringBufferInputStream(expr);
-        ExpressionParser parser = new ExpressionParser(in);
-        parser.vm = vm;
-        parser.frameGetter = frameGetter;
-        parser.Expression();
-        lastFrameGetter = frameGetter;
-        lastLValue = parser.pop();
-        return lastLValue.getValue();
-  }
-
-  public static void main(String args[]) {
-    ExpressionParser parser;
-    System.out.print("Java Expression Parser:  ");
-    if (args.length == 0) {
-      System.out.println("Reading from standard input . . .");
-      parser = new ExpressionParser(System.in);
-    } else if (args.length == 1) {
-      System.out.println("Reading from file " + args[0] + " . . .");
-      try {
-        parser = new ExpressionParser(new java.io.FileInputStream(args[0]));
-      } catch (java.io.FileNotFoundException e) {
-            System.out.println("Java Parser Version 1.0.2:  File " + args[0]
-                  + " not found.");
-        return;
-      }
-    } else {
-      System.out.println("Usage is one of:");
-      System.out.println("         java ExpressionParser < inputfile");
-      System.out.println("OR");
-      System.out.println("         java ExpressionParser inputfile");
-      return;
-    }
-    try {
-        parser.Expression();
-        System.out.print("Java Expression Parser:  ");
-        System.out.println("Java program parsed successfully.");
-    } catch (ParseException e) {
-        System.out.print("Java Expression Parser:  ");
-        System.out.println("Encountered errors during parse.");
-    }
-  }
-
-/*****************************************
- * THE JAVA LANGUAGE GRAMMAR STARTS HERE *
- *****************************************/
-
-/*
- * Type, name and expression syntax follows.
- */
-  final public void Type() throws ParseException {
-    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-    case BOOLEAN:
-    case BYTE:
-    case CHAR:
-    case DOUBLE:
-    case FLOAT:
-    case INT:
-    case LONG:
-    case SHORT:
-      PrimitiveType();
-      break;
-    case IDENTIFIER:
-      Name();
-      break;
-    default:
-      jj_la1[0] = jj_gen;
-      jj_consume_token(-1);
-      throw new ParseException();
-    }
-      label_1: while (true) {
-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case LBRACKET:
-        ;
-        break;
-      default:
-        jj_la1[1] = jj_gen;
-        break label_1;
-      }
-      jj_consume_token(LBRACKET);
-      jj_consume_token(RBRACKET);
-    }
-  }
-
-  final public void PrimitiveType() throws ParseException {
-    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-    case BOOLEAN:
-      jj_consume_token(BOOLEAN);
-      break;
-    case CHAR:
-      jj_consume_token(CHAR);
-      break;
-    case BYTE:
-      jj_consume_token(BYTE);
-      break;
-    case SHORT:
-      jj_consume_token(SHORT);
-      break;
-    case INT:
-      jj_consume_token(INT);
-      break;
-    case LONG:
-      jj_consume_token(LONG);
-      break;
-    case FLOAT:
-      jj_consume_token(FLOAT);
-      break;
-    case DOUBLE:
-      jj_consume_token(DOUBLE);
-      break;
-    default:
-      jj_la1[2] = jj_gen;
-      jj_consume_token(-1);
-      throw new ParseException();
-    }
-  }
-
-  final public String Name() throws ParseException {
- StringBuffer sb = new StringBuffer();
-    jj_consume_token(IDENTIFIER);
-                 sb.append(token);
-      label_2: while (true) {
-      if (jj_2_1(2)) {
-        ;
-      } else {
-        break label_2;
-      }
-      jj_consume_token(DOT);
-      jj_consume_token(IDENTIFIER);
-         sb.append('.');
-         sb.append(token);
-      }
-      if (true) {
-         return sb.toString();
-      }
-    throw new Error("Missing return statement in function");
-  }
-
-  final public void NameList() throws ParseException {
-    Name();
-      label_3: while (true) {
-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case COMMA:
-        ;
-        break;
-      default:
-        jj_la1[3] = jj_gen;
-        break label_3;
-      }
-      jj_consume_token(COMMA);
-      Name();
-    }
-  }
-
-/*
- * Expression syntax follows.
- */
-  final public void Expression() throws ParseException {
-    if (jj_2_2(2147483647)) {
-      Assignment();
-    } else {
-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case FALSE:
-      case NEW:
-      case NULL:
-      case SUPER:
-      case THIS:
-      case TRUE:
-      case INTEGER_LITERAL:
-      case FLOATING_POINT_LITERAL:
-      case CHARACTER_LITERAL:
-      case STRING_LITERAL:
-      case IDENTIFIER:
-      case LPAREN:
-      case BANG:
-      case TILDE:
-      case INCR:
-      case DECR:
-      case PLUS:
-      case MINUS:
-        ConditionalExpression();
-        break;
-      default:
-        jj_la1[4] = jj_gen;
-        jj_consume_token(-1);
-        throw new ParseException();
-      }
-    }
-  }
-
-  final public void Assignment() throws ParseException {
-    PrimaryExpression();
-    AssignmentOperator();
-    Expression();
-      LValue exprVal = pop();
-      pop().setValue(exprVal);
-      push(exprVal);
-  }
-
-  final public void AssignmentOperator() throws ParseException {
-    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-    case ASSIGN:
-      jj_consume_token(ASSIGN);
-      break;
-    case STARASSIGN:
-      jj_consume_token(STARASSIGN);
-      break;
-    case SLASHASSIGN:
-      jj_consume_token(SLASHASSIGN);
-      break;
-    case REMASSIGN:
-      jj_consume_token(REMASSIGN);
-      break;
-    case PLUSASSIGN:
-      jj_consume_token(PLUSASSIGN);
-      break;
-    case MINUSASSIGN:
-      jj_consume_token(MINUSASSIGN);
-      break;
-    case LSHIFTASSIGN:
-      jj_consume_token(LSHIFTASSIGN);
-      break;
-    case RSIGNEDSHIFTASSIGN:
-      jj_consume_token(RSIGNEDSHIFTASSIGN);
-      break;
-    case RUNSIGNEDSHIFTASSIGN:
-      jj_consume_token(RUNSIGNEDSHIFTASSIGN);
-      break;
-    case ANDASSIGN:
-      jj_consume_token(ANDASSIGN);
-      break;
-    case XORASSIGN:
-      jj_consume_token(XORASSIGN);
-      break;
-    case ORASSIGN:
-      jj_consume_token(ORASSIGN);
-      break;
-    default:
-      jj_la1[5] = jj_gen;
-      jj_consume_token(-1);
-      throw new ParseException();
-    }
-  }
-
-  final public void ConditionalExpression() throws ParseException {
-    ConditionalOrExpression();
-    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-    case HOOK:
-      jj_consume_token(HOOK);
-      Expression();
-      jj_consume_token(COLON);
-      ConditionalExpression();
-         LValue falseBranch = pop();
-         LValue trueBranch = pop();
-                  Value cond = pop().interiorGetValue();
-                  if (cond instanceof BooleanValue) {
-            push(((BooleanValue) cond).booleanValue() ? trueBranch
-                  : falseBranch);
-                  } else {
-            {
-               if (true) {
-                  throw new ParseException("Condition must be boolean");
-               }
-            }
-                  }
-      break;
-    default:
-      jj_la1[6] = jj_gen;
-      ;
-    }
-  }
-
-  final public void ConditionalOrExpression() throws ParseException {
-    ConditionalAndExpression();
-      label_4: while (true) {
-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case SC_OR:
-        ;
-        break;
-      default:
-        jj_la1[7] = jj_gen;
-        break label_4;
-      }
-      jj_consume_token(SC_OR);
-      ConditionalAndExpression();
-         {
-            if (true) {
-               throw new ParseException("operation not yet supported");
-            }
-         }
-    }
-  }
-
-  final public void ConditionalAndExpression() throws ParseException {
-    InclusiveOrExpression();
-      label_5: while (true) {
-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case SC_AND:
-        ;
-        break;
-      default:
-        jj_la1[8] = jj_gen;
-        break label_5;
-      }
-      jj_consume_token(SC_AND);
-      InclusiveOrExpression();
-         {
-            if (true) {
-               throw new ParseException("operation not yet supported");
-            }
-         }
-    }
-  }
-
-  final public void InclusiveOrExpression() throws ParseException {
-    ExclusiveOrExpression();
-      label_6: while (true) {
-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case BIT_OR:
-        ;
-        break;
-      default:
-        jj_la1[9] = jj_gen;
-        break label_6;
-      }
-      jj_consume_token(BIT_OR);
-      ExclusiveOrExpression();
-         {
-            if (true) {
-               throw new ParseException("operation not yet supported");
-            }
-         }
-    }
-  }
-
-  final public void ExclusiveOrExpression() throws ParseException {
-    AndExpression();
-      label_7: while (true) {
-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case XOR:
-        ;
-        break;
-      default:
-        jj_la1[10] = jj_gen;
-        break label_7;
-      }
-      jj_consume_token(XOR);
-      AndExpression();
-         {
-            if (true) {
-               throw new ParseException("operation not yet supported");
-            }
-         }
-    }
-  }
-
-  final public void AndExpression() throws ParseException {
-    EqualityExpression();
-      label_8: while (true) {
-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case BIT_AND:
-        ;
-        break;
-      default:
-        jj_la1[11] = jj_gen;
-        break label_8;
-      }
-      jj_consume_token(BIT_AND);
-      EqualityExpression();
-         {
-            if (true) {
-               throw new ParseException("operation not yet supported");
-            }
-         }
-    }
-  }
-
-  final public void EqualityExpression() throws ParseException {
- Token tok;
-    InstanceOfExpression();
-      label_9: while (true) {
-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case EQ:
-      case NE:
-        ;
-        break;
-      default:
-        jj_la1[12] = jj_gen;
-        break label_9;
-      }
-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case EQ:
-        tok = jj_consume_token(EQ);
-        break;
-      case NE:
-        tok = jj_consume_token(NE);
-        break;
-      default:
-        jj_la1[13] = jj_gen;
-        jj_consume_token(-1);
-        throw new ParseException();
-      }
-      InstanceOfExpression();
-                  LValue left = pop();
-                  push( LValue.booleanOperation(vm, tok, pop(), left) );
-    }
-  }
-
-  final public void InstanceOfExpression() throws ParseException {
-    RelationalExpression();
-    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-    case INSTANCEOF:
-      jj_consume_token(INSTANCEOF);
-      Type();
-         {
-            if (true) {
-               throw new ParseException("operation not yet supported");
-            }
-         }
-      break;
-    default:
-      jj_la1[14] = jj_gen;
-      ;
-    }
-  }
-
-  final public void RelationalExpression() throws ParseException {
- Token tok;
-    ShiftExpression();
-      label_10: while (true) {
-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case GT:
-      case LT:
-      case LE:
-      case GE:
-        ;
-        break;
-      default:
-        jj_la1[15] = jj_gen;
-        break label_10;
-      }
-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case LT:
-        tok = jj_consume_token(LT);
-        break;
-      case GT:
-        tok = jj_consume_token(GT);
-        break;
-      case LE:
-        tok = jj_consume_token(LE);
-        break;
-      case GE:
-        tok = jj_consume_token(GE);
-        break;
-      default:
-        jj_la1[16] = jj_gen;
-        jj_consume_token(-1);
-        throw new ParseException();
-      }
-      ShiftExpression();
-                  LValue left = pop();
-                  push( LValue.booleanOperation(vm, tok, pop(), left) );
-    }
-  }
-
-  final public void ShiftExpression() throws ParseException {
-    AdditiveExpression();
-      label_11: while (true) {
-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case LSHIFT:
-      case RSIGNEDSHIFT:
-      case RUNSIGNEDSHIFT:
-        ;
-        break;
-      default:
-        jj_la1[17] = jj_gen;
-        break label_11;
-      }
-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case LSHIFT:
-        jj_consume_token(LSHIFT);
-        break;
-      case RSIGNEDSHIFT:
-        jj_consume_token(RSIGNEDSHIFT);
-        break;
-      case RUNSIGNEDSHIFT:
-        jj_consume_token(RUNSIGNEDSHIFT);
-        break;
-      default:
-        jj_la1[18] = jj_gen;
-        jj_consume_token(-1);
-        throw new ParseException();
-      }
-      AdditiveExpression();
-         {
-            if (true) {
-               throw new ParseException("operation not yet supported");
-            }
-         }
-    }
-  }
-
-  final public void AdditiveExpression() throws ParseException {
- Token tok;
-    MultiplicativeExpression();
-      label_12: while (true) {
-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case PLUS:
-      case MINUS:
-        ;
-        break;
-      default:
-        jj_la1[19] = jj_gen;
-        break label_12;
-      }
-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case PLUS:
-        tok = jj_consume_token(PLUS);
-        break;
-      case MINUS:
-        tok = jj_consume_token(MINUS);
-        break;
-      default:
-        jj_la1[20] = jj_gen;
-        jj_consume_token(-1);
-        throw new ParseException();
-      }
-      MultiplicativeExpression();
-                  LValue left = pop();
-                  push( LValue.operation(vm, tok, pop(), left, frameGetter) );
-    }
-  }
-
-  final public void MultiplicativeExpression() throws ParseException {
- Token tok;
-    UnaryExpression();
-      label_13: while (true) {
-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case STAR:
-      case SLASH:
-      case REM:
-        ;
-        break;
-      default:
-        jj_la1[21] = jj_gen;
-        break label_13;
-      }
-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case STAR:
-        tok = jj_consume_token(STAR);
-        break;
-      case SLASH:
-        tok = jj_consume_token(SLASH);
-        break;
-      case REM:
-        tok = jj_consume_token(REM);
-        break;
-      default:
-        jj_la1[22] = jj_gen;
-        jj_consume_token(-1);
-        throw new ParseException();
-      }
-      UnaryExpression();
-                  LValue left = pop();
-                  push( LValue.operation(vm, tok, pop(), left, frameGetter) );
-    }
-  }
-
-  final public void UnaryExpression() throws ParseException {
-    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-    case PLUS:
-    case MINUS:
-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case PLUS:
-        jj_consume_token(PLUS);
-        break;
-      case MINUS:
-        jj_consume_token(MINUS);
-        break;
-      default:
-        jj_la1[23] = jj_gen;
-        jj_consume_token(-1);
-        throw new ParseException();
-      }
-      UnaryExpression();
-         {
-            if (true) {
-               throw new ParseException("operation not yet supported");
-            }
-         }
-      break;
-    case INCR:
-      PreIncrementExpression();
-      break;
-    case DECR:
-      PreDecrementExpression();
-      break;
-    case FALSE:
-    case NEW:
-    case NULL:
-    case SUPER:
-    case THIS:
-    case TRUE:
-    case INTEGER_LITERAL:
-    case FLOATING_POINT_LITERAL:
-    case CHARACTER_LITERAL:
-    case STRING_LITERAL:
-    case IDENTIFIER:
-    case LPAREN:
-    case BANG:
-    case TILDE:
-      UnaryExpressionNotPlusMinus();
-      break;
-    default:
-      jj_la1[24] = jj_gen;
-      jj_consume_token(-1);
-      throw new ParseException();
-    }
-  }
-
-  final public void PreIncrementExpression() throws ParseException {
-    jj_consume_token(INCR);
-    PrimaryExpression();
-      {
-         if (true) {
-            throw new ParseException("operation not yet supported");
-         }
-      }
-  }
-
-  final public void PreDecrementExpression() throws ParseException {
-    jj_consume_token(DECR);
-    PrimaryExpression();
-      {
-         if (true) {
-            throw new ParseException("operation not yet supported");
-         }
-      }
-  }
-
-  final public void UnaryExpressionNotPlusMinus() throws ParseException {
-    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-    case BANG:
-    case TILDE:
-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case TILDE:
-        jj_consume_token(TILDE);
-        break;
-      case BANG:
-        jj_consume_token(BANG);
-        break;
-      default:
-        jj_la1[25] = jj_gen;
-        jj_consume_token(-1);
-        throw new ParseException();
-      }
-      UnaryExpression();
-         {
-            if (true) {
-               throw new ParseException("operation not yet supported");
-            }
-         }
-      break;
-    default:
-      jj_la1[26] = jj_gen;
-      if (jj_2_3(2147483647)) {
-        CastExpression();
-      } else {
-        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-        case FALSE:
-        case NEW:
-        case NULL:
-        case SUPER:
-        case THIS:
-        case TRUE:
-        case INTEGER_LITERAL:
-        case FLOATING_POINT_LITERAL:
-        case CHARACTER_LITERAL:
-        case STRING_LITERAL:
-        case IDENTIFIER:
-        case LPAREN:
-          PostfixExpression();
-          break;
-        default:
-          jj_la1[27] = jj_gen;
-          jj_consume_token(-1);
-          throw new ParseException();
-        }
-      }
-    }
-  }
-
-   // This production is to determine lookahead only. The LOOKAHEAD
-   // specifications
-   // below are not used, but they are there just to indicate that we know
-   // about
-// this.
-  final public void CastLookahead() throws ParseException {
-    if (jj_2_4(2)) {
-      jj_consume_token(LPAREN);
-      PrimitiveType();
-    } else if (jj_2_5(2147483647)) {
-      jj_consume_token(LPAREN);
-      Name();
-      jj_consume_token(LBRACKET);
-      jj_consume_token(RBRACKET);
-    } else {
-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case LPAREN:
-        jj_consume_token(LPAREN);
-        Name();
-        jj_consume_token(RPAREN);
-        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-        case TILDE:
-          jj_consume_token(TILDE);
-          break;
-        case BANG:
-          jj_consume_token(BANG);
-          break;
-        case LPAREN:
-          jj_consume_token(LPAREN);
-          break;
-        case IDENTIFIER:
-          jj_consume_token(IDENTIFIER);
-          break;
-        case THIS:
-          jj_consume_token(THIS);
-          break;
-        case SUPER:
-          jj_consume_token(SUPER);
-          break;
-        case NEW:
-          jj_consume_token(NEW);
-          break;
-        case FALSE:
-        case NULL:
-        case TRUE:
-        case INTEGER_LITERAL:
-        case FLOATING_POINT_LITERAL:
-        case CHARACTER_LITERAL:
-        case STRING_LITERAL:
-          Literal();
-          break;
-        default:
-          jj_la1[28] = jj_gen;
-          jj_consume_token(-1);
-          throw new ParseException();
-        }
-        break;
-      default:
-        jj_la1[29] = jj_gen;
-        jj_consume_token(-1);
-        throw new ParseException();
-      }
-    }
-  }
-
-  final public void PostfixExpression() throws ParseException {
-    PrimaryExpression();
-    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-    case INCR:
-    case DECR:
-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case INCR:
-        jj_consume_token(INCR);
-        break;
-      case DECR:
-        jj_consume_token(DECR);
-            {
-               if (true) {
-                  throw new ParseException("operation not yet supported");
-               }
-            }
-        break;
-      default:
-        jj_la1[30] = jj_gen;
-        jj_consume_token(-1);
-        throw new ParseException();
-      }
-      break;
-    default:
-      jj_la1[31] = jj_gen;
-      ;
-    }
-  }
-
-  final public void CastExpression() throws ParseException {
-    if (jj_2_6(2)) {
-      jj_consume_token(LPAREN);
-      PrimitiveType();
-         label_14: while (true) {
-        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-        case LBRACKET:
-          ;
-          break;
-        default:
-          jj_la1[32] = jj_gen;
-          break label_14;
-        }
-        jj_consume_token(LBRACKET);
-        jj_consume_token(RBRACKET);
-      }
-      jj_consume_token(RPAREN);
-      UnaryExpression();
-    } else {
-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case LPAREN:
-        jj_consume_token(LPAREN);
-        Name();
-            label_15: while (true) {
-          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-          case LBRACKET:
-            ;
-            break;
-          default:
-            jj_la1[33] = jj_gen;
-            break label_15;
-          }
-          jj_consume_token(LBRACKET);
-          jj_consume_token(RBRACKET);
-        }
-        jj_consume_token(RPAREN);
-        UnaryExpressionNotPlusMinus();
-        break;
-      default:
-        jj_la1[34] = jj_gen;
-        jj_consume_token(-1);
-        throw new ParseException();
-      }
-    }
-  }
-
-  final public void PrimaryExpression() throws ParseException {
-    PrimaryPrefix();
-      label_16: while (true) {
-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case LPAREN:
-      case LBRACKET:
-      case DOT:
-        ;
-        break;
-      default:
-        jj_la1[35] = jj_gen;
-        break label_16;
-      }
-      PrimarySuffix();
-    }
-  }
-
-  final public void PrimaryPrefix() throws ParseException {
- String name;
-    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-    case FALSE:
-    case NULL:
-    case TRUE:
-    case INTEGER_LITERAL:
-    case FLOATING_POINT_LITERAL:
-    case CHARACTER_LITERAL:
-    case STRING_LITERAL:
-      Literal();
-      break;
-    case IDENTIFIER:
-      name = Name();
-                          push(LValue.makeName(vm, frameGetter, name));
-      break;
-    case THIS:
-      jj_consume_token(THIS);
-                          push(LValue.makeThisObject(vm, frameGetter, token));
-      break;
-    case SUPER:
-      jj_consume_token(SUPER);
-      jj_consume_token(DOT);
-      jj_consume_token(IDENTIFIER);
-         {
-            if (true) {
-               throw new ParseException("operation not yet supported");
-            }
-         }
-      break;
-    case LPAREN:
-      jj_consume_token(LPAREN);
-      Expression();
-      jj_consume_token(RPAREN);
-      break;
-    case NEW:
-      AllocationExpression();
-      break;
-    default:
-      jj_la1[36] = jj_gen;
-      jj_consume_token(-1);
-      throw new ParseException();
-    }
-  }
-
-  final public void PrimarySuffix() throws ParseException {
-      List<Value> argList;
-    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-    case LBRACKET:
-      jj_consume_token(LBRACKET);
-      Expression();
-      jj_consume_token(RBRACKET);
-                          LValue index = pop();
-                          push(pop().arrayElementLValue(index));
-      break;
-    case DOT:
-      jj_consume_token(DOT);
-      jj_consume_token(IDENTIFIER);
-                          push(pop().memberLValue(frameGetter, token.image));
-      break;
-    case LPAREN:
-      argList = Arguments();
-                          peek().invokeWith(argList);
-      break;
-    default:
-      jj_la1[37] = jj_gen;
-      jj_consume_token(-1);
-      throw new ParseException();
-    }
-  }
-
-  final public void Literal() throws ParseException {
-    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-    case INTEGER_LITERAL:
-      jj_consume_token(INTEGER_LITERAL);
-                          push(LValue.makeInteger(vm, token));
-      break;
-    case FLOATING_POINT_LITERAL:
-      jj_consume_token(FLOATING_POINT_LITERAL);
-                          push(LValue.makeFloat(vm, token));
-      break;
-    case CHARACTER_LITERAL:
-      jj_consume_token(CHARACTER_LITERAL);
-                          push(LValue.makeCharacter(vm, token));
-      break;
-    case STRING_LITERAL:
-      jj_consume_token(STRING_LITERAL);
-                          push(LValue.makeString(vm, token));
-      break;
-    case FALSE:
-    case TRUE:
-      BooleanLiteral();
-                          push(LValue.makeBoolean(vm, token));
-      break;
-    case NULL:
-      NullLiteral();
-                          push(LValue.makeNull(vm, token));
-      break;
-    default:
-      jj_la1[38] = jj_gen;
-      jj_consume_token(-1);
-      throw new ParseException();
-    }
-  }
-
-  final public void BooleanLiteral() throws ParseException {
-    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-    case TRUE:
-      jj_consume_token(TRUE);
-      break;
-    case FALSE:
-      jj_consume_token(FALSE);
-      break;
-    default:
-      jj_la1[39] = jj_gen;
-      jj_consume_token(-1);
-      throw new ParseException();
-    }
-  }
-
-  final public void NullLiteral() throws ParseException {
-    jj_consume_token(NULL);
-  }
-
-   final public List<Value> Arguments() throws ParseException {
-      List<Value> argList = new ArrayList<Value>();
-    jj_consume_token(LPAREN);
-    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-    case FALSE:
-    case NEW:
-    case NULL:
-    case SUPER:
-    case THIS:
-    case TRUE:
-    case INTEGER_LITERAL:
-    case FLOATING_POINT_LITERAL:
-    case CHARACTER_LITERAL:
-    case STRING_LITERAL:
-    case IDENTIFIER:
-    case LPAREN:
-    case BANG:
-    case TILDE:
-    case INCR:
-    case DECR:
-    case PLUS:
-    case MINUS:
-      ArgumentList(argList);
-      break;
-    default:
-      jj_la1[40] = jj_gen;
-      ;
-    }
-    jj_consume_token(RPAREN);
-      {
-         if (true) {
-            return argList;
-         }
-      }
-    throw new Error("Missing return statement in function");
-  }
-
-   final public void ArgumentList(List<Value> argList) throws ParseException {
-    Expression();
-                argList.add(pop().interiorGetValue());
-      label_17: while (true) {
-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case COMMA:
-        ;
-        break;
-      default:
-        jj_la1[41] = jj_gen;
-        break label_17;
-      }
-      jj_consume_token(COMMA);
-      Expression();
-                      argList.add(pop().interiorGetValue());
-    }
-  }
-
-  final public void AllocationExpression() throws ParseException {
-      List<Value> argList;
-      String className;
-    if (jj_2_7(2)) {
-      jj_consume_token(NEW);
-      PrimitiveType();
-      ArrayDimensions();
-    } else {
-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case NEW:
-        jj_consume_token(NEW);
-        className = Name();
-        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-        case LPAREN:
-          argList = Arguments();
-                          push(LValue.makeNewObject(vm, frameGetter, className, argList));
-          break;
-        case LBRACKET:
-          ArrayDimensions();
-               {
-                  if (true) {
-                     throw new ParseException("operation not yet supported");
-                  }
-               }
-          break;
-        default:
-          jj_la1[42] = jj_gen;
-          jj_consume_token(-1);
-          throw new ParseException();
-        }
-        break;
-      default:
-        jj_la1[43] = jj_gen;
-        jj_consume_token(-1);
-        throw new ParseException();
-      }
-    }
-  }
-
-/*
-    * The second LOOKAHEAD specification below is to parse to PrimarySuffix if
-    * there is an expression between the "[...]".
- */
-  final public void ArrayDimensions() throws ParseException {
-      label_18: while (true) {
-      jj_consume_token(LBRACKET);
-      Expression();
-      jj_consume_token(RBRACKET);
-      if (jj_2_8(2)) {
-        ;
-      } else {
-        break label_18;
-      }
-    }
-      label_19: while (true) {
-      if (jj_2_9(2)) {
-        ;
-      } else {
-        break label_19;
-      }
-      jj_consume_token(LBRACKET);
-      jj_consume_token(RBRACKET);
-    }
-  }
-
-  final private boolean jj_2_1(int xla) {
-      jj_la = xla;
-      jj_lastpos = jj_scanpos = token;
-    boolean retval = !jj_3_1();
-    jj_save(0, xla);
-    return retval;
-  }
-
-  final private boolean jj_2_2(int xla) {
-      jj_la = xla;
-      jj_lastpos = jj_scanpos = token;
-    boolean retval = !jj_3_2();
-    jj_save(1, xla);
-    return retval;
-  }
-
-  final private boolean jj_2_3(int xla) {
-      jj_la = xla;
-      jj_lastpos = jj_scanpos = token;
-    boolean retval = !jj_3_3();
-    jj_save(2, xla);
-    return retval;
-  }
-
-  final private boolean jj_2_4(int xla) {
-      jj_la = xla;
-      jj_lastpos = jj_scanpos = token;
-    boolean retval = !jj_3_4();
-    jj_save(3, xla);
-    return retval;
-  }
-
-  final private boolean jj_2_5(int xla) {
-      jj_la = xla;
-      jj_lastpos = jj_scanpos = token;
-    boolean retval = !jj_3_5();
-    jj_save(4, xla);
-    return retval;
-  }
-
-  final private boolean jj_2_6(int xla) {
-      jj_la = xla;
-      jj_lastpos = jj_scanpos = token;
-    boolean retval = !jj_3_6();
-    jj_save(5, xla);
-    return retval;
-  }
-
-  final private boolean jj_2_7(int xla) {
-      jj_la = xla;
-      jj_lastpos = jj_scanpos = token;
-    boolean retval = !jj_3_7();
-    jj_save(6, xla);
-    return retval;
-  }
-
-  final private boolean jj_2_8(int xla) {
-      jj_la = xla;
-      jj_lastpos = jj_scanpos = token;
-    boolean retval = !jj_3_8();
-    jj_save(7, xla);
-    return retval;
-  }
-
-  final private boolean jj_2_9(int xla) {
-      jj_la = xla;
-      jj_lastpos = jj_scanpos = token;
-    boolean retval = !jj_3_9();
-    jj_save(8, xla);
-    return retval;
-  }
-
-  final private boolean jj_3R_154() {
-      if (jj_scan_token(INCR)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_151() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_154()) {
-    jj_scanpos = xsp;
-         if (jj_3R_155()) {
-            return true;
-         }
-         if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-            return false;
-         }
-      } else if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_148() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3_6()) {
-    jj_scanpos = xsp;
-         if (jj_3R_150()) {
-            return true;
-         }
-         if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-            return false;
-         }
-      } else if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3_6() {
-      if (jj_scan_token(LPAREN)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-      if (jj_3R_23()) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    Token xsp;
-    while (true) {
-      xsp = jj_scanpos;
-         if (jj_3R_152()) {
-            jj_scanpos = xsp;
-            break;
-         }
-         if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-            return false;
-         }
-      }
-      if (jj_scan_token(RPAREN)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-      if (jj_3R_115()) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_25() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_50()) {
-    jj_scanpos = xsp;
-         if (jj_3R_51()) {
-            return true;
-         }
-         if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-            return false;
-         }
-      } else if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_50() {
-      if (jj_3R_67()) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3_5() {
-      if (jj_scan_token(LPAREN)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-      if (jj_3R_24()) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-      if (jj_scan_token(LBRACKET)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_149() {
-      if (jj_3R_20()) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    Token xsp;
-    xsp = jj_scanpos;
-      if (jj_3R_151()) {
-         jj_scanpos = xsp;
-      } else if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_41() {
-      if (jj_scan_token(LPAREN)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-      if (jj_3R_24()) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-      if (jj_scan_token(RPAREN)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_59()) {
-    jj_scanpos = xsp;
-    if (jj_3R_60()) {
-    jj_scanpos = xsp;
-    if (jj_3R_61()) {
-    jj_scanpos = xsp;
-    if (jj_3R_62()) {
-    jj_scanpos = xsp;
-    if (jj_3R_63()) {
-    jj_scanpos = xsp;
-    if (jj_3R_64()) {
-    jj_scanpos = xsp;
-    if (jj_3R_65()) {
-    jj_scanpos = xsp;
-                           if (jj_3R_66()) {
-                              return true;
-                           }
-                           if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-                              return false;
-                           }
-                        } else if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-                           return false;
-                        }
-                     } else if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-                        return false;
-                     }
-                  } else if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-                     return false;
-                  }
-               } else if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-                  return false;
-               }
-            } else if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-               return false;
-            }
-         } else if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-            return false;
-         }
-      } else if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_40() {
-      if (jj_scan_token(LPAREN)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-      if (jj_3R_24()) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-      if (jj_scan_token(LBRACKET)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-      if (jj_scan_token(RBRACKET)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_123() {
-      if (jj_scan_token(LBRACKET)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-      if (jj_scan_token(RBRACKET)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3_1() {
-      if (jj_scan_token(DOT)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-      if (jj_scan_token(IDENTIFIER)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3_4() {
-      if (jj_scan_token(LPAREN)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-      if (jj_3R_23()) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_22() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3_4()) {
-    jj_scanpos = xsp;
-    if (jj_3R_40()) {
-    jj_scanpos = xsp;
-            if (jj_3R_41()) {
-               return true;
-            }
-            if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-               return false;
-            }
-         } else if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-            return false;
-         }
-      } else if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3_3() {
-      if (jj_3R_22()) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_24() {
-      if (jj_scan_token(IDENTIFIER)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    Token xsp;
-    while (true) {
-      xsp = jj_scanpos;
-         if (jj_3_1()) {
-            jj_scanpos = xsp;
-            break;
-         }
-         if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-            return false;
-         }
-    }
-    return false;
-  }
-
-  final private boolean jj_3R_147() {
-      if (jj_scan_token(BANG)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_142() {
-      if (jj_3R_149()) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_122() {
-      if (jj_3R_24()) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_49() {
-      if (jj_scan_token(DOUBLE)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_141() {
-      if (jj_3R_148()) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_48() {
-      if (jj_scan_token(FLOAT)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_146() {
-      if (jj_scan_token(TILDE)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_47() {
-      if (jj_scan_token(LONG)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_140() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_146()) {
-    jj_scanpos = xsp;
-         if (jj_3R_147()) {
-            return true;
-         }
-         if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-            return false;
-         }
-      } else if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-      if (jj_3R_115()) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_136() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_140()) {
-    jj_scanpos = xsp;
-    if (jj_3R_141()) {
-    jj_scanpos = xsp;
-            if (jj_3R_142()) {
-               return true;
-            }
-            if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-               return false;
-            }
-         } else if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-            return false;
-         }
-      } else if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_46() {
-      if (jj_scan_token(INT)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_145() {
-      if (jj_scan_token(REM)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_45() {
-      if (jj_scan_token(SHORT)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_44() {
-      if (jj_scan_token(BYTE)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_135() {
-      if (jj_scan_token(DECR)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-      if (jj_3R_20()) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_43() {
-      if (jj_scan_token(CHAR)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_23() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_42()) {
-    jj_scanpos = xsp;
-    if (jj_3R_43()) {
-    jj_scanpos = xsp;
-    if (jj_3R_44()) {
-    jj_scanpos = xsp;
-    if (jj_3R_45()) {
-    jj_scanpos = xsp;
-    if (jj_3R_46()) {
-    jj_scanpos = xsp;
-    if (jj_3R_47()) {
-    jj_scanpos = xsp;
-    if (jj_3R_48()) {
-    jj_scanpos = xsp;
-                           if (jj_3R_49()) {
-                              return true;
-                           }
-                           if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-                              return false;
-                           }
-                        } else if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-                           return false;
-                        }
-                     } else if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-                        return false;
-                     }
-                  } else if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-                     return false;
-                  }
-               } else if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-                  return false;
-               }
-            } else if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-               return false;
-            }
-         } else if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-            return false;
-         }
-      } else if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_42() {
-      if (jj_scan_token(BOOLEAN)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3_9() {
-      if (jj_scan_token(LBRACKET)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-      if (jj_scan_token(RBRACKET)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_121() {
-      if (jj_3R_23()) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_144() {
-      if (jj_scan_token(SLASH)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_134() {
-      if (jj_scan_token(INCR)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-      if (jj_3R_20()) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_114() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_121()) {
-    jj_scanpos = xsp;
-         if (jj_3R_122()) {
-            return true;
-         }
-         if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-            return false;
-         }
-      } else if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    while (true) {
-      xsp = jj_scanpos;
-         if (jj_3R_123()) {
-            jj_scanpos = xsp;
-            break;
-         }
-         if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-            return false;
-         }
-    }
-    return false;
-  }
-
-  final private boolean jj_3R_120() {
-      if (jj_scan_token(GE)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_133() {
-      if (jj_scan_token(MINUS)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_127() {
-      if (jj_3R_136()) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_126() {
-      if (jj_3R_135()) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_139() {
-      if (jj_scan_token(MINUS)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_125() {
-      if (jj_3R_134()) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_132() {
-      if (jj_scan_token(PLUS)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_143() {
-      if (jj_scan_token(STAR)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_124() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_132()) {
-    jj_scanpos = xsp;
-         if (jj_3R_133()) {
-            return true;
-         }
-         if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-            return false;
-         }
-      } else if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-      if (jj_3R_115()) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_115() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_124()) {
-    jj_scanpos = xsp;
-    if (jj_3R_125()) {
-    jj_scanpos = xsp;
-    if (jj_3R_126()) {
-    jj_scanpos = xsp;
-               if (jj_3R_127()) {
-                  return true;
-               }
-               if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-                  return false;
-               }
-            } else if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-               return false;
-            }
-         } else if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-            return false;
-         }
-      } else if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_137() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_143()) {
-    jj_scanpos = xsp;
-    if (jj_3R_144()) {
-    jj_scanpos = xsp;
-            if (jj_3R_145()) {
-               return true;
-            }
-            if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-               return false;
-            }
-         } else if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-            return false;
-         }
-      } else if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-      if (jj_3R_115()) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_131() {
-      if (jj_scan_token(RUNSIGNEDSHIFT)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_119() {
-      if (jj_scan_token(LE)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_138() {
-      if (jj_scan_token(PLUS)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_112() {
-      if (jj_3R_115()) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    Token xsp;
-    while (true) {
-      xsp = jj_scanpos;
-         if (jj_3R_137()) {
-            jj_scanpos = xsp;
-            break;
-         }
-         if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-            return false;
-         }
-    }
-    return false;
-  }
-
-  final private boolean jj_3R_88() {
-      if (jj_3R_86()) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_130() {
-      if (jj_scan_token(RSIGNEDSHIFT)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_128() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_138()) {
-    jj_scanpos = xsp;
-         if (jj_3R_139()) {
-            return true;
-         }
-         if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-            return false;
-         }
-      } else if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-      if (jj_3R_112()) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_87() {
-      if (jj_3R_82()) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_118() {
-      if (jj_scan_token(GT)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_129() {
-      if (jj_scan_token(LSHIFT)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_116() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_129()) {
-    jj_scanpos = xsp;
-    if (jj_3R_130()) {
-    jj_scanpos = xsp;
-            if (jj_3R_131()) {
-               return true;
-            }
-            if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-               return false;
-            }
-         } else if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-            return false;
-         }
-      } else if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-      if (jj_3R_108()) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_108() {
-      if (jj_3R_112()) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    Token xsp;
-    while (true) {
-      xsp = jj_scanpos;
-         if (jj_3R_128()) {
-            jj_scanpos = xsp;
-            break;
-         }
-         if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-            return false;
-         }
-    }
-    return false;
-  }
-
-  final private boolean jj_3_8() {
-      if (jj_scan_token(LBRACKET)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-      if (jj_3R_25()) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-      if (jj_scan_token(RBRACKET)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_86() {
-    Token xsp;
-      if (jj_3_8()) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    while (true) {
-      xsp = jj_scanpos;
-         if (jj_3_8()) {
-            jj_scanpos = xsp;
-            break;
-         }
-         if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-            return false;
-         }
-    }
-    while (true) {
-      xsp = jj_scanpos;
-         if (jj_3_9()) {
-            jj_scanpos = xsp;
-            break;
-         }
-         if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-            return false;
-         }
-    }
-    return false;
-  }
-
-  final private boolean jj_3R_117() {
-      if (jj_scan_token(LT)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_106() {
-      if (jj_3R_108()) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    Token xsp;
-    while (true) {
-      xsp = jj_scanpos;
-         if (jj_3R_116()) {
-            jj_scanpos = xsp;
-            break;
-         }
-         if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-            return false;
-         }
-    }
-    return false;
-  }
-
-  final private boolean jj_3R_113() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_117()) {
-    jj_scanpos = xsp;
-    if (jj_3R_118()) {
-    jj_scanpos = xsp;
-    if (jj_3R_119()) {
-    jj_scanpos = xsp;
-               if (jj_3R_120()) {
-                  return true;
-               }
-               if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-                  return false;
-               }
-            } else if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-               return false;
-            }
-         } else if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-            return false;
-         }
-      } else if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-      if (jj_3R_106()) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_111() {
-      if (jj_scan_token(NE)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_109() {
-      if (jj_scan_token(INSTANCEOF)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-      if (jj_3R_114()) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_104() {
-      if (jj_3R_106()) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    Token xsp;
-    while (true) {
-      xsp = jj_scanpos;
-         if (jj_3R_113()) {
-            jj_scanpos = xsp;
-            break;
-         }
-         if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-            return false;
-         }
-    }
-    return false;
-  }
-
-  final private boolean jj_3R_81() {
-      if (jj_scan_token(NEW)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-      if (jj_3R_24()) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_87()) {
-    jj_scanpos = xsp;
-         if (jj_3R_88()) {
-            return true;
-         }
-         if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-            return false;
-         }
-      } else if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3_7() {
-      if (jj_scan_token(NEW)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-      if (jj_3R_23()) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-      if (jj_3R_86()) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_70() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3_7()) {
-    jj_scanpos = xsp;
-         if (jj_3R_81()) {
-            return true;
-         }
-         if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-            return false;
-         }
-      } else if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_97() {
-      if (jj_scan_token(COMMA)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-      if (jj_3R_25()) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_39() {
-      if (jj_scan_token(ORASSIGN)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_110() {
-      if (jj_scan_token(EQ)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_102() {
-      if (jj_3R_104()) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    Token xsp;
-    xsp = jj_scanpos;
-      if (jj_3R_109()) {
-         jj_scanpos = xsp;
-      } else if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_107() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_110()) {
-    jj_scanpos = xsp;
-         if (jj_3R_111()) {
-            return true;
-         }
-         if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-            return false;
-         }
-      } else if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-      if (jj_3R_102()) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_94() {
-      if (jj_3R_25()) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    Token xsp;
-    while (true) {
-      xsp = jj_scanpos;
-         if (jj_3R_97()) {
-            jj_scanpos = xsp;
-            break;
-         }
-         if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-            return false;
-         }
-    }
-    return false;
-  }
-
-  final private boolean jj_3R_89() {
-      if (jj_3R_94()) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_38() {
-      if (jj_scan_token(XORASSIGN)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_82() {
-      if (jj_scan_token(LPAREN)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    Token xsp;
-    xsp = jj_scanpos;
-      if (jj_3R_89()) {
-         jj_scanpos = xsp;
-      } else if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-      if (jj_scan_token(RPAREN)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_105() {
-      if (jj_scan_token(BIT_AND)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-      if (jj_3R_100()) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_100() {
-      if (jj_3R_102()) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    Token xsp;
-    while (true) {
-      xsp = jj_scanpos;
-         if (jj_3R_107()) {
-            jj_scanpos = xsp;
-            break;
-         }
-         if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-            return false;
-         }
-    }
-    return false;
-  }
-
-  final private boolean jj_3R_37() {
-      if (jj_scan_token(ANDASSIGN)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_85() {
-      if (jj_scan_token(NULL)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_103() {
-      if (jj_scan_token(XOR)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-      if (jj_3R_98()) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_98() {
-      if (jj_3R_100()) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    Token xsp;
-    while (true) {
-      xsp = jj_scanpos;
-         if (jj_3R_105()) {
-            jj_scanpos = xsp;
-            break;
-         }
-         if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-            return false;
-         }
-    }
-    return false;
-  }
-
-  final private boolean jj_3R_92() {
-      if (jj_scan_token(FALSE)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_36() {
-      if (jj_scan_token(RUNSIGNEDSHIFTASSIGN)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_91() {
-      if (jj_scan_token(TRUE)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_84() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_91()) {
-    jj_scanpos = xsp;
-         if (jj_3R_92()) {
-            return true;
-         }
-         if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-            return false;
-         }
-      } else if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_101() {
-      if (jj_scan_token(BIT_OR)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-      if (jj_3R_95()) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_95() {
-      if (jj_3R_98()) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    Token xsp;
-    while (true) {
-      xsp = jj_scanpos;
-         if (jj_3R_103()) {
-            jj_scanpos = xsp;
-            break;
-         }
-         if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-            return false;
-         }
-    }
-    return false;
-  }
-
-  final private boolean jj_3R_35() {
-      if (jj_scan_token(RSIGNEDSHIFTASSIGN)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_80() {
-      if (jj_3R_85()) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_66() {
-      if (jj_3R_69()) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_79() {
-      if (jj_3R_84()) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_78() {
-      if (jj_scan_token(STRING_LITERAL)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_99() {
-      if (jj_scan_token(SC_AND)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-      if (jj_3R_90()) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_90() {
-      if (jj_3R_95()) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    Token xsp;
-    while (true) {
-      xsp = jj_scanpos;
-         if (jj_3R_101()) {
-            jj_scanpos = xsp;
-            break;
-         }
-         if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-            return false;
-         }
-    }
-    return false;
-  }
-
-  final private boolean jj_3R_34() {
-      if (jj_scan_token(LSHIFTASSIGN)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_65() {
-      if (jj_scan_token(NEW)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_77() {
-      if (jj_scan_token(CHARACTER_LITERAL)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_76() {
-      if (jj_scan_token(FLOATING_POINT_LITERAL)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_33() {
-      if (jj_scan_token(MINUSASSIGN)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_69() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_75()) {
-    jj_scanpos = xsp;
-    if (jj_3R_76()) {
-    jj_scanpos = xsp;
-    if (jj_3R_77()) {
-    jj_scanpos = xsp;
-    if (jj_3R_78()) {
-    jj_scanpos = xsp;
-    if (jj_3R_79()) {
-    jj_scanpos = xsp;
-                     if (jj_3R_80()) {
-                        return true;
-                     }
-                     if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-                        return false;
-                     }
-                  } else if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-                     return false;
-                  }
-               } else if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-                  return false;
-               }
-            } else if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-               return false;
-            }
-         } else if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-            return false;
-         }
-      } else if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_75() {
-      if (jj_scan_token(INTEGER_LITERAL)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_96() {
-      if (jj_scan_token(SC_OR)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-      if (jj_3R_83()) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_83() {
-      if (jj_3R_90()) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    Token xsp;
-    while (true) {
-      xsp = jj_scanpos;
-         if (jj_3R_99()) {
-            jj_scanpos = xsp;
-            break;
-         }
-         if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-            return false;
-         }
-    }
-    return false;
-  }
-
-  final private boolean jj_3R_64() {
-      if (jj_scan_token(SUPER)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_32() {
-      if (jj_scan_token(PLUSASSIGN)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_73() {
-      if (jj_3R_82()) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_72() {
-      if (jj_scan_token(DOT)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-      if (jj_scan_token(IDENTIFIER)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_74() {
-      if (jj_3R_83()) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    Token xsp;
-    while (true) {
-      xsp = jj_scanpos;
-         if (jj_3R_96()) {
-            jj_scanpos = xsp;
-            break;
-         }
-         if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-            return false;
-         }
-    }
-    return false;
-  }
-
-  final private boolean jj_3R_63() {
-      if (jj_scan_token(THIS)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_31() {
-      if (jj_scan_token(REMASSIGN)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_58() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_71()) {
-    jj_scanpos = xsp;
-    if (jj_3R_72()) {
-    jj_scanpos = xsp;
-            if (jj_3R_73()) {
-               return true;
-            }
-            if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-               return false;
-            }
-         } else if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-            return false;
-         }
-      } else if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_71() {
-      if (jj_scan_token(LBRACKET)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-      if (jj_3R_25()) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-      if (jj_scan_token(RBRACKET)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_93() {
-      if (jj_scan_token(HOOK)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-      if (jj_3R_25()) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-      if (jj_scan_token(COLON)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-      if (jj_3R_68()) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_57() {
-      if (jj_3R_70()) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_30() {
-      if (jj_scan_token(SLASHASSIGN)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_27() {
-      if (jj_3R_58()) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_56() {
-      if (jj_scan_token(LPAREN)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-      if (jj_3R_25()) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-      if (jj_scan_token(RPAREN)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_152() {
-      if (jj_scan_token(LBRACKET)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-      if (jj_scan_token(RBRACKET)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_55() {
-      if (jj_scan_token(SUPER)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-      if (jj_scan_token(DOT)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-      if (jj_scan_token(IDENTIFIER)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_29() {
-      if (jj_scan_token(STARASSIGN)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_68() {
-      if (jj_3R_74()) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    Token xsp;
-    xsp = jj_scanpos;
-      if (jj_3R_93()) {
-         jj_scanpos = xsp;
-      } else if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_54() {
-      if (jj_scan_token(THIS)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_62() {
-      if (jj_scan_token(IDENTIFIER)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_53() {
-      if (jj_3R_24()) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_153() {
-      if (jj_scan_token(LBRACKET)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-      if (jj_scan_token(RBRACKET)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_26() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_52()) {
-    jj_scanpos = xsp;
-    if (jj_3R_53()) {
-    jj_scanpos = xsp;
-    if (jj_3R_54()) {
-    jj_scanpos = xsp;
-    if (jj_3R_55()) {
-    jj_scanpos = xsp;
-    if (jj_3R_56()) {
-    jj_scanpos = xsp;
-                     if (jj_3R_57()) {
-                        return true;
-                     }
-                     if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-                        return false;
-                     }
-                  } else if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-                     return false;
-                  }
-               } else if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-                  return false;
-               }
-            } else if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-               return false;
-            }
-         } else if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-            return false;
-         }
-      } else if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_52() {
-      if (jj_3R_69()) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_21() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_28()) {
-    jj_scanpos = xsp;
-    if (jj_3R_29()) {
-    jj_scanpos = xsp;
-    if (jj_3R_30()) {
-    jj_scanpos = xsp;
-    if (jj_3R_31()) {
-    jj_scanpos = xsp;
-    if (jj_3R_32()) {
-    jj_scanpos = xsp;
-    if (jj_3R_33()) {
-    jj_scanpos = xsp;
-    if (jj_3R_34()) {
-    jj_scanpos = xsp;
-    if (jj_3R_35()) {
-    jj_scanpos = xsp;
-    if (jj_3R_36()) {
-    jj_scanpos = xsp;
-    if (jj_3R_37()) {
-    jj_scanpos = xsp;
-    if (jj_3R_38()) {
-    jj_scanpos = xsp;
-                                       if (jj_3R_39()) {
-                                          return true;
-                                       }
-                                       if (jj_la == 0
-                                             && jj_scanpos == jj_lastpos) {
-                                          return false;
-                                       }
-                                    } else if (jj_la == 0
-                                          && jj_scanpos == jj_lastpos) {
-                                       return false;
-                                    }
-                                 } else if (jj_la == 0
-                                       && jj_scanpos == jj_lastpos) {
-                                    return false;
-                                 }
-                              } else if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-                                 return false;
-                              }
-                           } else if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-                              return false;
-                           }
-                        } else if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-                           return false;
-                        }
-                     } else if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-                        return false;
-                     }
-                  } else if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-                     return false;
-                  }
-               } else if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-                  return false;
-               }
-            } else if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-               return false;
-            }
-         } else if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-            return false;
-         }
-      } else if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_28() {
-      if (jj_scan_token(ASSIGN)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_61() {
-      if (jj_scan_token(LPAREN)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3_2() {
-      if (jj_3R_20()) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-      if (jj_3R_21()) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_20() {
-      if (jj_3R_26()) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    Token xsp;
-    while (true) {
-      xsp = jj_scanpos;
-         if (jj_3R_27()) {
-            jj_scanpos = xsp;
-            break;
-         }
-         if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-            return false;
-         }
-    }
-    return false;
-  }
-
-  final private boolean jj_3R_60() {
-      if (jj_scan_token(BANG)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_155() {
-      if (jj_scan_token(DECR)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_67() {
-      if (jj_3R_20()) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-      if (jj_3R_21()) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-      if (jj_3R_25()) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_150() {
-      if (jj_scan_token(LPAREN)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-      if (jj_3R_24()) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    Token xsp;
-    while (true) {
-      xsp = jj_scanpos;
-         if (jj_3R_153()) {
-            jj_scanpos = xsp;
-            break;
-         }
-         if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-            return false;
-         }
-      }
-      if (jj_scan_token(RPAREN)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-      if (jj_3R_136()) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_59() {
-      if (jj_scan_token(TILDE)) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  final private boolean jj_3R_51() {
-      if (jj_3R_68()) {
-         return true;
-      }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-         return false;
-      }
-    return false;
-  }
-
-  public ExpressionParserTokenManager token_source;
-  ASCII_UCodeESC_CharStream jj_input_stream;
-  public Token token, jj_nt;
-  private int jj_ntk;
-  private Token jj_scanpos, jj_lastpos;
-  private int jj_la;
-  public boolean lookingAhead = false;
-  private int jj_gen;
-  final private int[] jj_la1 = new int[44];
-   final private int[] jj_la1_0 = { 0x8209400, 0x0, 0x8209400, 0x0, 0x1000000,
-         0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-         0x0, 0x0, 0x0, 0x0, 0x0, 0x1000000, 0x0, 0x0, 0x1000000, 0x1000000,
-         0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1000000, 0x0, 0x1000000,
-         0x1000000, 0x1000000, 0x0, 0x0, 0x0, };
-   final private int[] jj_la1_1 = { 0x2014, 0x0, 0x2014, 0x0, 0x884480c0, 0x0,
-         0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0,
-         0x0, 0x0, 0x0, 0x0, 0x884480c0, 0x0, 0x0, 0x884480c0, 0x884480c0, 0x0,
-         0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x884480c0, 0x0, 0x88400080, 0x400000,
-         0x884480c0, 0x0, 0x0, 0x40, };
-   final private int[] jj_la1_2 = { 0x8, 0x400, 0x0, 0x2000, 0xf00c004e,
-         0x8000, 0x100000, 0x4000000, 0x8000000, 0x0, 0x0, 0x0, 0x2400000,
-         0x2400000, 0x0, 0x1830000, 0x1830000, 0x0, 0x0, 0xc0000000,
-         0xc0000000, 0x0, 0x0, 0xc0000000, 0xf00c004e, 0xc0000, 0xc0000, 0x4e,
-         0xc004e, 0x40, 0x30000000, 0x30000000, 0x400, 0x400, 0x40, 0x4440,
-         0x4e, 0x4440, 0x6, 0x0, 0xf00c004e, 0x2000, 0x440, 0x0, };
-   final private int[] jj_la1_3 = { 0x0, 0x0, 0x0, 0x0, 0x0, 0xffe00, 0x0, 0x0,
-         0x0, 0x8, 0x10, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1c0, 0x1c0, 0x0, 0x0,
-         0x23, 0x23, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-         0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, };
-  final private JJExpressionParserCalls[] jj_2_rtns = new JJExpressionParserCalls[9];
-  private boolean jj_rescan = false;
-  private int jj_gc = 0;
-
-  public ExpressionParser(java.io.InputStream stream) {
-    jj_input_stream = new ASCII_UCodeESC_CharStream(stream, 1, 1);
-    token_source = new ExpressionParserTokenManager(jj_input_stream);
-    token = new Token();
-    jj_ntk = -1;
-    jj_gen = 0;
-      for (int i = 0; i < 44; i++) {
-         jj_la1[i] = -1;
-      }
-      for (int i = 0; i < jj_2_rtns.length; i++) {
-         jj_2_rtns[i] = new JJExpressionParserCalls();
-      }
-  }
-
-  public void ReInit(java.io.InputStream stream) {
-    jj_input_stream.ReInit(stream, 1, 1);
-    token_source.ReInit(jj_input_stream);
-    token = new Token();
-    jj_ntk = -1;
-    jj_gen = 0;
-      for (int i = 0; i < 44; i++) {
-         jj_la1[i] = -1;
-      }
-      for (int i = 0; i < jj_2_rtns.length; i++) {
-         jj_2_rtns[i] = new JJExpressionParserCalls();
-      }
-  }
-
-  public ExpressionParser(ExpressionParserTokenManager tm) {
-    token_source = tm;
-    token = new Token();
-    jj_ntk = -1;
-    jj_gen = 0;
-      for (int i = 0; i < 44; i++) {
-         jj_la1[i] = -1;
-      }
-      for (int i = 0; i < jj_2_rtns.length; i++) {
-         jj_2_rtns[i] = new JJExpressionParserCalls();
-      }
-  }
-
-  public void ReInit(ExpressionParserTokenManager tm) {
-    token_source = tm;
-    token = new Token();
-    jj_ntk = -1;
-    jj_gen = 0;
-      for (int i = 0; i < 44; i++) {
-         jj_la1[i] = -1;
-      }
-      for (int i = 0; i < jj_2_rtns.length; i++) {
-         jj_2_rtns[i] = new JJExpressionParserCalls();
-      }
-  }
-
-  final private Token jj_consume_token(int kind) throws ParseException {
-    Token oldToken;
-      if ((oldToken = token).next != null) {
-         token = token.next;
-      } else {
-         token = token.next = token_source.getNextToken();
-      }
-    jj_ntk = -1;
-    if (token.kind == kind) {
-      jj_gen++;
-      if (++jj_gc > 100) {
-        jj_gc = 0;
-            for (JJExpressionParserCalls jj_2_rtn : jj_2_rtns) {
-               JJExpressionParserCalls c = jj_2_rtn;
-          while (c != null) {
-                  if (c.gen < jj_gen) {
-                     c.first = null;
-                  }
-            c = c.next;
-          }
-        }
-      }
-      return token;
-    }
-    token = oldToken;
-    jj_kind = kind;
-    throw generateParseException();
-  }
-
-  final private boolean jj_scan_token(int kind) {
-    if (jj_scanpos == jj_lastpos) {
-      jj_la--;
-      if (jj_scanpos.next == null) {
-            jj_lastpos = jj_scanpos = jj_scanpos.next = token_source
-                  .getNextToken();
-      } else {
-        jj_lastpos = jj_scanpos = jj_scanpos.next;
-      }
-    } else {
-      jj_scanpos = jj_scanpos.next;
-    }
-    if (jj_rescan) {
-         int i = 0;
-         Token tok = token;
-         while (tok != null && tok != jj_scanpos) {
-            i++;
-            tok = tok.next;
-         }
-         if (tok != null) {
-            jj_add_error_token(kind, i);
-         }
-    }
-    return (jj_scanpos.kind != kind);
-  }
-
-  final public Token getNextToken() {
-      if (token.next != null) {
-         token = token.next;
-      } else {
-         token = token.next = token_source.getNextToken();
-      }
-    jj_ntk = -1;
-    jj_gen++;
-    return token;
-  }
-
-  final public Token getToken(int index) {
-    Token t = lookingAhead ? jj_scanpos : token;
-    for (int i = 0; i < index; i++) {
-         if (t.next != null) {
-            t = t.next;
-         } else {
-            t = t.next = token_source.getNextToken();
-         }
-    }
-    return t;
-  }
-
-  final private int jj_ntk() {
-      if ((jj_nt = token.next) == null) {
-      return (jj_ntk = (token.next=token_source.getNextToken()).kind);
-      } else {
-      return (jj_ntk = jj_nt.kind);
-  }
-   }
-
-   private java.util.Vector<int[]> jj_expentries = new java.util.Vector<int[]>();
-  private int[] jj_expentry;
-  private int jj_kind = -1;
-  private int[] jj_lasttokens = new int[100];
-  private int jj_endpos;
-
-  private void jj_add_error_token(int kind, int pos) {
-      if (pos >= 100) {
-         return;
-      }
-    if (pos == jj_endpos + 1) {
-      jj_lasttokens[jj_endpos++] = kind;
-    } else if (jj_endpos != 0) {
-      jj_expentry = new int[jj_endpos];
-      for (int i = 0; i < jj_endpos; i++) {
-        jj_expentry[i] = jj_lasttokens[i];
-      }
-      boolean exists = false;
-         for (java.util.Enumeration<int[]> enum_ = jj_expentries.elements(); enum_
-               .hasMoreElements();) {
-            int[] oldentry = (enum_.nextElement());
-        if (oldentry.length == jj_expentry.length) {
-          exists = true;
-          for (int i = 0; i < jj_expentry.length; i++) {
-            if (oldentry[i] != jj_expentry[i]) {
-              exists = false;
-              break;
-            }
-          }
-               if (exists) {
-                  break;
-               }
-            }
-         }
-         if (!exists) {
-            jj_expentries.addElement(jj_expentry);
-         }
-         if (pos != 0) {
-            jj_lasttokens[(jj_endpos = pos) - 1] = kind;
-         }
-    }
-  }
-
-  final public ParseException generateParseException() {
-    jj_expentries.removeAllElements();
-    boolean[] la1tokens = new boolean[116];
-    for (int i = 0; i < 116; i++) {
-      la1tokens[i] = false;
-    }
-    if (jj_kind >= 0) {
-      la1tokens[jj_kind] = true;
-      jj_kind = -1;
-    }
-    for (int i = 0; i < 44; i++) {
-      if (jj_la1[i] == jj_gen) {
-        for (int j = 0; j < 32; j++) {
-          if ((jj_la1_0[i] & (1<<j)) != 0) {
-            la1tokens[j] = true;
-          }
-          if ((jj_la1_1[i] & (1<<j)) != 0) {
-            la1tokens[32+j] = true;
-          }
-          if ((jj_la1_2[i] & (1<<j)) != 0) {
-            la1tokens[64+j] = true;
-          }
-          if ((jj_la1_3[i] & (1<<j)) != 0) {
-            la1tokens[96+j] = true;
-          }
-        }
-      }
-    }
-    for (int i = 0; i < 116; i++) {
-      if (la1tokens[i]) {
-        jj_expentry = new int[1];
-        jj_expentry[0] = i;
-        jj_expentries.addElement(jj_expentry);
-      }
-    }
-    jj_endpos = 0;
-    jj_rescan_token();
-    jj_add_error_token(0, 0);
-    int[][] exptokseq = new int[jj_expentries.size()][];
-    for (int i = 0; i < jj_expentries.size(); i++) {
-         exptokseq[i] = jj_expentries.elementAt(i);
-    }
-    return new ParseException(token, exptokseq, tokenImage);
-  }
-
-  final public void enable_tracing() {
-  }
-
-  final public void disable_tracing() {
-  }
-
-  final private void jj_rescan_token() {
-    jj_rescan = true;
-    for (int i = 0; i < 9; i++) {
-      JJExpressionParserCalls p = jj_2_rtns[i];
-      do {
-        if (p.gen > jj_gen) {
-               jj_la = p.arg;
-               jj_lastpos = jj_scanpos = p.first;
-          switch (i) {
-               case 0:
-                  jj_3_1();
-                  break;
-               case 1:
-                  jj_3_2();
-                  break;
-               case 2:
-                  jj_3_3();
-                  break;
-               case 3:
-                  jj_3_4();
-                  break;
-               case 4:
-                  jj_3_5();
-                  break;
-               case 5:
-                  jj_3_6();
-                  break;
-               case 6:
-                  jj_3_7();
-                  break;
-               case 7:
-                  jj_3_8();
-                  break;
-               case 8:
-                  jj_3_9();
-                  break;
-          }
-        }
-        p = p.next;
-      } while (p != null);
-    }
-    jj_rescan = false;
-  }
-
-  final private void jj_save(int index, int xla) {
-    JJExpressionParserCalls p = jj_2_rtns[index];
-    while (p.gen > jj_gen) {
-         if (p.next == null) {
-            p = p.next = new JJExpressionParserCalls();
-            break;
-         }
-      p = p.next;
-    }
-      p.gen = jj_gen + xla - jj_la;
-      p.first = token;
-      p.arg = xla;
-  }
-
-}
-
-final class JJExpressionParserCalls {
-  int gen;
-  Token first;
-  int arg;
-  JJExpressionParserCalls next;
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/expr/ExpressionParserConstants.java b/ojluni/src/main/java/com/sun/tools/example/debug/expr/ExpressionParserConstants.java
deleted file mode 100755
index 390d238..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/expr/ExpressionParserConstants.java
+++ /dev/null
@@ -1,273 +0,0 @@
-/*
- * Copyright (c) 1999, 2001, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-/* Generated By:JavaCC: Do not edit this line. ExpressionParserConstants.java */
-package com.sun.tools.example.debug.expr;
-
-public interface ExpressionParserConstants {
-
-  int EOF = 0;
-  int SINGLE_LINE_COMMENT = 6;
-  int FORMAL_COMMENT = 7;
-  int MULTI_LINE_COMMENT = 8;
-  int ABSTRACT = 9;
-  int BOOLEAN = 10;
-  int BREAK = 11;
-  int BYTE = 12;
-  int CASE = 13;
-  int CATCH = 14;
-  int CHAR = 15;
-  int CLASS = 16;
-  int CONST = 17;
-  int CONTINUE = 18;
-  int _DEFAULT = 19;
-  int DO = 20;
-  int DOUBLE = 21;
-  int ELSE = 22;
-  int EXTENDS = 23;
-  int FALSE = 24;
-  int FINAL = 25;
-  int FINALLY = 26;
-  int FLOAT = 27;
-  int FOR = 28;
-  int GOTO = 29;
-  int IF = 30;
-  int IMPLEMENTS = 31;
-  int IMPORT = 32;
-  int INSTANCEOF = 33;
-  int INT = 34;
-  int INTERFACE = 35;
-  int LONG = 36;
-  int NATIVE = 37;
-  int NEW = 38;
-  int NULL = 39;
-  int PACKAGE = 40;
-  int PRIVATE = 41;
-  int PROTECTED = 42;
-  int PUBLIC = 43;
-  int RETURN = 44;
-  int SHORT = 45;
-  int STATIC = 46;
-  int SUPER = 47;
-  int SWITCH = 48;
-  int SYNCHRONIZED = 49;
-  int THIS = 50;
-  int THROW = 51;
-  int THROWS = 52;
-  int TRANSIENT = 53;
-  int TRUE = 54;
-  int TRY = 55;
-  int VOID = 56;
-  int VOLATILE = 57;
-  int WHILE = 58;
-  int INTEGER_LITERAL = 59;
-  int DECIMAL_LITERAL = 60;
-  int HEX_LITERAL = 61;
-  int OCTAL_LITERAL = 62;
-  int FLOATING_POINT_LITERAL = 63;
-  int EXPONENT = 64;
-  int CHARACTER_LITERAL = 65;
-  int STRING_LITERAL = 66;
-  int IDENTIFIER = 67;
-  int LETTER = 68;
-  int DIGIT = 69;
-  int LPAREN = 70;
-  int RPAREN = 71;
-  int LBRACE = 72;
-  int RBRACE = 73;
-  int LBRACKET = 74;
-  int RBRACKET = 75;
-  int SEMICOLON = 76;
-  int COMMA = 77;
-  int DOT = 78;
-  int ASSIGN = 79;
-  int GT = 80;
-  int LT = 81;
-  int BANG = 82;
-  int TILDE = 83;
-  int HOOK = 84;
-  int COLON = 85;
-  int EQ = 86;
-  int LE = 87;
-  int GE = 88;
-  int NE = 89;
-  int SC_OR = 90;
-  int SC_AND = 91;
-  int INCR = 92;
-  int DECR = 93;
-  int PLUS = 94;
-  int MINUS = 95;
-  int STAR = 96;
-  int SLASH = 97;
-  int BIT_AND = 98;
-  int BIT_OR = 99;
-  int XOR = 100;
-  int REM = 101;
-  int LSHIFT = 102;
-  int RSIGNEDSHIFT = 103;
-  int RUNSIGNEDSHIFT = 104;
-  int PLUSASSIGN = 105;
-  int MINUSASSIGN = 106;
-  int STARASSIGN = 107;
-  int SLASHASSIGN = 108;
-  int ANDASSIGN = 109;
-  int ORASSIGN = 110;
-  int XORASSIGN = 111;
-  int REMASSIGN = 112;
-  int LSHIFTASSIGN = 113;
-  int RSIGNEDSHIFTASSIGN = 114;
-  int RUNSIGNEDSHIFTASSIGN = 115;
-
-  int DEFAULT = 0;
-
-  String[] tokenImage = {
-    "<EOF>",
-    "\" \"",
-    "\"\\t\"",
-    "\"\\n\"",
-    "\"\\r\"",
-    "\"\\f\"",
-    "<SINGLE_LINE_COMMENT>",
-    "<FORMAL_COMMENT>",
-    "<MULTI_LINE_COMMENT>",
-    "\"abstract\"",
-    "\"boolean\"",
-    "\"break\"",
-    "\"byte\"",
-    "\"case\"",
-    "\"catch\"",
-    "\"char\"",
-    "\"class\"",
-    "\"const\"",
-    "\"continue\"",
-    "\"default\"",
-    "\"do\"",
-    "\"double\"",
-    "\"else\"",
-    "\"extends\"",
-    "\"false\"",
-    "\"final\"",
-    "\"finally\"",
-    "\"float\"",
-    "\"for\"",
-    "\"goto\"",
-    "\"if\"",
-    "\"implements\"",
-    "\"import\"",
-    "\"instanceof\"",
-    "\"int\"",
-    "\"interface\"",
-    "\"long\"",
-    "\"native\"",
-    "\"new\"",
-    "\"null\"",
-    "\"package\"",
-    "\"private\"",
-    "\"protected\"",
-    "\"public\"",
-    "\"return\"",
-    "\"short\"",
-    "\"static\"",
-    "\"super\"",
-    "\"switch\"",
-    "\"synchronized\"",
-    "\"this\"",
-    "\"throw\"",
-    "\"throws\"",
-    "\"transient\"",
-    "\"true\"",
-    "\"try\"",
-    "\"void\"",
-    "\"volatile\"",
-    "\"while\"",
-    "<INTEGER_LITERAL>",
-    "<DECIMAL_LITERAL>",
-    "<HEX_LITERAL>",
-    "<OCTAL_LITERAL>",
-    "<FLOATING_POINT_LITERAL>",
-    "<EXPONENT>",
-    "<CHARACTER_LITERAL>",
-    "<STRING_LITERAL>",
-    "<IDENTIFIER>",
-    "<LETTER>",
-    "<DIGIT>",
-    "\"(\"",
-    "\")\"",
-    "\"{\"",
-    "\"}\"",
-    "\"[\"",
-    "\"]\"",
-    "\";\"",
-    "\",\"",
-    "\".\"",
-    "\"=\"",
-    "\">\"",
-    "\"<\"",
-    "\"!\"",
-    "\"~\"",
-    "\"?\"",
-    "\":\"",
-    "\"==\"",
-    "\"<=\"",
-    "\">=\"",
-    "\"!=\"",
-    "\"||\"",
-    "\"&&\"",
-    "\"++\"",
-    "\"--\"",
-    "\"+\"",
-    "\"-\"",
-    "\"*\"",
-    "\"/\"",
-    "\"&\"",
-    "\"|\"",
-    "\"^\"",
-    "\"%\"",
-    "\"<<\"",
-    "\">>\"",
-    "\">>>\"",
-    "\"+=\"",
-    "\"-=\"",
-    "\"*=\"",
-    "\"/=\"",
-    "\"&=\"",
-    "\"|=\"",
-    "\"^=\"",
-    "\"%=\"",
-    "\"<<=\"",
-    "\">>=\"",
-    "\">>>=\"",
-  };
-
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/expr/ExpressionParserTokenManager.java b/ojluni/src/main/java/com/sun/tools/example/debug/expr/ExpressionParserTokenManager.java
deleted file mode 100755
index 6720997..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/expr/ExpressionParserTokenManager.java
+++ /dev/null
@@ -1,1766 +0,0 @@
-/*
- * Copyright (c) 1999, 2001, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-/* Generated By:JavaCC: Do not edit this line. ExpressionParserTokenManager.java */
-package com.sun.tools.example.debug.expr;
-
-public class ExpressionParserTokenManager implements ExpressionParserConstants
-{
-private final int jjStopStringLiteralDfa_0(int pos, long active0, long active1)
-{
-   switch (pos)
-   {
-      case 0:
-         if ((active1 & 0x4000L) != 0L) {
-            return 4;
-         }
-         if ((active0 & 0x7fffffffffffe00L) != 0L)
-         {
-            jjmatchedKind = 67;
-            return 28;
-         }
-         if ((active1 & 0x100200000000L) != 0L) {
-            return 49;
-         }
-         return -1;
-      case 1:
-         if ((active0 & 0x7ffffffbfcffe00L) != 0L)
-         {
-            if (jjmatchedPos != 1)
-            {
-               jjmatchedKind = 67;
-               jjmatchedPos = 1;
-            }
-            return 28;
-         }
-         if ((active0 & 0x40300000L) != 0L) {
-            return 28;
-         }
-         return -1;
-      case 2:
-         if ((active0 & 0x77fffb3afeffe00L) != 0L)
-         {
-            if (jjmatchedPos != 2)
-            {
-               jjmatchedKind = 67;
-               jjmatchedPos = 2;
-            }
-            return 28;
-         }
-         if ((active0 & 0x80004c10000000L) != 0L) {
-            return 28;
-         }
-         return -1;
-      case 3:
-         if ((active0 & 0x63bff2b8faf4e00L) != 0L)
-         {
-            jjmatchedKind = 67;
-            jjmatchedPos = 3;
-            return 28;
-         }
-         if ((active0 & 0x14400902040b000L) != 0L) {
-            return 28;
-         }
-         return -1;
-      case 4:
-         if ((active0 & 0x2235f2b80ac0600L) != 0L)
-         {
-            if (jjmatchedPos != 4)
-            {
-               jjmatchedKind = 67;
-               jjmatchedPos = 4;
-            }
-            return 28;
-         }
-         if ((active0 & 0x418a0000f034800L) != 0L) {
-            return 28;
-         }
-         return -1;
-      case 5:
-         if ((active0 & 0x222070a848c0600L) != 0L)
-         {
-            jjmatchedKind = 67;
-            jjmatchedPos = 5;
-            return 28;
-         }
-         if ((active0 & 0x11582100200000L) != 0L) {
-            return 28;
-         }
-         return -1;
-      case 6:
-         if ((active0 & 0x222040a80040200L) != 0L)
-         {
-            jjmatchedKind = 67;
-            jjmatchedPos = 6;
-            return 28;
-         }
-         if ((active0 & 0x30004880400L) != 0L) {
-            return 28;
-         }
-         return -1;
-      case 7:
-         if ((active0 & 0x22040a80000000L) != 0L)
-         {
-            jjmatchedKind = 67;
-            jjmatchedPos = 7;
-            return 28;
-         }
-         if ((active0 & 0x200000000040200L) != 0L) {
-            return 28;
-         }
-         return -1;
-      case 8:
-         if ((active0 & 0x2000280000000L) != 0L)
-         {
-            jjmatchedKind = 67;
-            jjmatchedPos = 8;
-            return 28;
-         }
-         if ((active0 & 0x20040800000000L) != 0L) {
-            return 28;
-         }
-         return -1;
-      case 9:
-         if ((active0 & 0x2000000000000L) != 0L)
-         {
-            jjmatchedKind = 67;
-            jjmatchedPos = 9;
-            return 28;
-         }
-         if ((active0 & 0x280000000L) != 0L) {
-            return 28;
-         }
-         return -1;
-      case 10:
-         if ((active0 & 0x2000000000000L) != 0L)
-         {
-            jjmatchedKind = 67;
-            jjmatchedPos = 10;
-            return 28;
-         }
-         return -1;
-      default :
-         return -1;
-   }
-}
-private final int jjStartNfa_0(int pos, long active0, long active1)
-{
-   return jjMoveNfa_0(jjStopStringLiteralDfa_0(pos, active0, active1), pos + 1);
-}
-private final int jjStopAtPos(int pos, int kind)
-{
-   jjmatchedKind = kind;
-   jjmatchedPos = pos;
-   return pos + 1;
-}
-private final int jjStartNfaWithStates_0(int pos, int kind, int state)
-{
-   jjmatchedKind = kind;
-   jjmatchedPos = pos;
-   try { curChar = input_stream.readChar(); }
-   catch(java.io.IOException e) { return pos + 1; }
-   return jjMoveNfa_0(state, pos + 1);
-}
-private final int jjMoveStringLiteralDfa0_0()
-{
-   switch(curChar)
-   {
-      case 33:
-         jjmatchedKind = 82;
-         return jjMoveStringLiteralDfa1_0(0x0L, 0x2000000L);
-      case 37:
-         jjmatchedKind = 101;
-         return jjMoveStringLiteralDfa1_0(0x0L, 0x1000000000000L);
-      case 38:
-         jjmatchedKind = 98;
-         return jjMoveStringLiteralDfa1_0(0x0L, 0x200008000000L);
-      case 40:
-         return jjStopAtPos(0, 70);
-      case 41:
-         return jjStopAtPos(0, 71);
-      case 42:
-         jjmatchedKind = 96;
-         return jjMoveStringLiteralDfa1_0(0x0L, 0x80000000000L);
-      case 43:
-         jjmatchedKind = 94;
-         return jjMoveStringLiteralDfa1_0(0x0L, 0x20010000000L);
-      case 44:
-         return jjStopAtPos(0, 77);
-      case 45:
-         jjmatchedKind = 95;
-         return jjMoveStringLiteralDfa1_0(0x0L, 0x40020000000L);
-      case 46:
-         return jjStartNfaWithStates_0(0, 78, 4);
-      case 47:
-         jjmatchedKind = 97;
-         return jjMoveStringLiteralDfa1_0(0x0L, 0x100000000000L);
-      case 58:
-         return jjStopAtPos(0, 85);
-      case 59:
-         return jjStopAtPos(0, 76);
-      case 60:
-         jjmatchedKind = 81;
-         return jjMoveStringLiteralDfa1_0(0x0L, 0x2004000800000L);
-      case 61:
-         jjmatchedKind = 79;
-         return jjMoveStringLiteralDfa1_0(0x0L, 0x400000L);
-      case 62:
-         jjmatchedKind = 80;
-         return jjMoveStringLiteralDfa1_0(0x0L, 0xc018001000000L);
-      case 63:
-         return jjStopAtPos(0, 84);
-      case 91:
-         return jjStopAtPos(0, 74);
-      case 93:
-         return jjStopAtPos(0, 75);
-      case 94:
-         jjmatchedKind = 100;
-         return jjMoveStringLiteralDfa1_0(0x0L, 0x800000000000L);
-      case 97:
-         return jjMoveStringLiteralDfa1_0(0x200L, 0x0L);
-      case 98:
-         return jjMoveStringLiteralDfa1_0(0x1c00L, 0x0L);
-      case 99:
-         return jjMoveStringLiteralDfa1_0(0x7e000L, 0x0L);
-      case 100:
-         return jjMoveStringLiteralDfa1_0(0x380000L, 0x0L);
-      case 101:
-         return jjMoveStringLiteralDfa1_0(0xc00000L, 0x0L);
-      case 102:
-         return jjMoveStringLiteralDfa1_0(0x1f000000L, 0x0L);
-      case 103:
-         return jjMoveStringLiteralDfa1_0(0x20000000L, 0x0L);
-      case 105:
-         return jjMoveStringLiteralDfa1_0(0xfc0000000L, 0x0L);
-      case 108:
-         return jjMoveStringLiteralDfa1_0(0x1000000000L, 0x0L);
-      case 110:
-         return jjMoveStringLiteralDfa1_0(0xe000000000L, 0x0L);
-      case 112:
-         return jjMoveStringLiteralDfa1_0(0xf0000000000L, 0x0L);
-      case 114:
-         return jjMoveStringLiteralDfa1_0(0x100000000000L, 0x0L);
-      case 115:
-         return jjMoveStringLiteralDfa1_0(0x3e00000000000L, 0x0L);
-      case 116:
-         return jjMoveStringLiteralDfa1_0(0xfc000000000000L, 0x0L);
-      case 118:
-         return jjMoveStringLiteralDfa1_0(0x300000000000000L, 0x0L);
-      case 119:
-         return jjMoveStringLiteralDfa1_0(0x400000000000000L, 0x0L);
-      case 123:
-         return jjStopAtPos(0, 72);
-      case 124:
-         jjmatchedKind = 99;
-         return jjMoveStringLiteralDfa1_0(0x0L, 0x400004000000L);
-      case 125:
-         return jjStopAtPos(0, 73);
-      case 126:
-         return jjStopAtPos(0, 83);
-      default :
-         return jjMoveNfa_0(0, 0);
-   }
-}
-private final int jjMoveStringLiteralDfa1_0(long active0, long active1)
-{
-   try { curChar = input_stream.readChar(); }
-   catch(java.io.IOException e) {
-      jjStopStringLiteralDfa_0(0, active0, active1);
-      return 1;
-   }
-   switch(curChar)
-   {
-      case 38:
-         if ((active1 & 0x8000000L) != 0L) {
-            return jjStopAtPos(1, 91);
-         }
-         break;
-      case 43:
-         if ((active1 & 0x10000000L) != 0L) {
-            return jjStopAtPos(1, 92);
-         }
-         break;
-      case 45:
-         if ((active1 & 0x20000000L) != 0L) {
-            return jjStopAtPos(1, 93);
-         }
-         break;
-      case 60:
-         if ((active1 & 0x4000000000L) != 0L)
-         {
-            jjmatchedKind = 102;
-            jjmatchedPos = 1;
-         }
-         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x2000000000000L);
-      case 61:
-         if ((active1 & 0x400000L) != 0L) {
-            return jjStopAtPos(1, 86);
-         } else if ((active1 & 0x800000L) != 0L) {
-            return jjStopAtPos(1, 87);
-         } else if ((active1 & 0x1000000L) != 0L) {
-            return jjStopAtPos(1, 88);
-         } else if ((active1 & 0x2000000L) != 0L) {
-            return jjStopAtPos(1, 89);
-         } else if ((active1 & 0x20000000000L) != 0L) {
-            return jjStopAtPos(1, 105);
-         } else if ((active1 & 0x40000000000L) != 0L) {
-            return jjStopAtPos(1, 106);
-         } else if ((active1 & 0x80000000000L) != 0L) {
-            return jjStopAtPos(1, 107);
-         } else if ((active1 & 0x100000000000L) != 0L) {
-            return jjStopAtPos(1, 108);
-         } else if ((active1 & 0x200000000000L) != 0L) {
-            return jjStopAtPos(1, 109);
-         } else if ((active1 & 0x400000000000L) != 0L) {
-            return jjStopAtPos(1, 110);
-         } else if ((active1 & 0x800000000000L) != 0L) {
-            return jjStopAtPos(1, 111);
-         } else if ((active1 & 0x1000000000000L) != 0L) {
-            return jjStopAtPos(1, 112);
-         }
-         break;
-      case 62:
-         if ((active1 & 0x8000000000L) != 0L)
-         {
-            jjmatchedKind = 103;
-            jjmatchedPos = 1;
-         }
-         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0xc010000000000L);
-      case 97:
-         return jjMoveStringLiteralDfa2_0(active0, 0x12001006000L, active1, 0L);
-      case 98:
-         return jjMoveStringLiteralDfa2_0(active0, 0x200L, active1, 0L);
-      case 101:
-         return jjMoveStringLiteralDfa2_0(active0, 0x104000080000L, active1, 0L);
-      case 102:
-         if ((active0 & 0x40000000L) != 0L) {
-            return jjStartNfaWithStates_0(1, 30, 28);
-         }
-         break;
-      case 104:
-         return jjMoveStringLiteralDfa2_0(active0, 0x41c200000008000L, active1, 0L);
-      case 105:
-         return jjMoveStringLiteralDfa2_0(active0, 0x6000000L, active1, 0L);
-      case 108:
-         return jjMoveStringLiteralDfa2_0(active0, 0x8410000L, active1, 0L);
-      case 109:
-         return jjMoveStringLiteralDfa2_0(active0, 0x180000000L, active1, 0L);
-      case 110:
-         return jjMoveStringLiteralDfa2_0(active0, 0xe00000000L, active1, 0L);
-      case 111:
-         if ((active0 & 0x100000L) != 0L)
-         {
-            jjmatchedKind = 20;
-            jjmatchedPos = 1;
-         }
-         return jjMoveStringLiteralDfa2_0(active0, 0x300001030260400L, active1, 0L);
-      case 114:
-         return jjMoveStringLiteralDfa2_0(active0, 0xe0060000000800L, active1, 0L);
-      case 116:
-         return jjMoveStringLiteralDfa2_0(active0, 0x400000000000L, active1, 0L);
-      case 117:
-         return jjMoveStringLiteralDfa2_0(active0, 0x888000000000L, active1, 0L);
-      case 119:
-         return jjMoveStringLiteralDfa2_0(active0, 0x1000000000000L, active1, 0L);
-      case 120:
-         return jjMoveStringLiteralDfa2_0(active0, 0x800000L, active1, 0L);
-      case 121:
-         return jjMoveStringLiteralDfa2_0(active0, 0x2000000001000L, active1, 0L);
-      case 124:
-         if ((active1 & 0x4000000L) != 0L) {
-            return jjStopAtPos(1, 90);
-         }
-         break;
-      default :
-         break;
-   }
-   return jjStartNfa_0(0, active0, active1);
-}
-private final int jjMoveStringLiteralDfa2_0(long old0, long active0, long old1, long active1)
-{
-   if (((active0 &= old0) | (active1 &= old1)) == 0L) {
-      return jjStartNfa_0(0, old0, old1);
-   }
-   try { curChar = input_stream.readChar(); }
-   catch(java.io.IOException e) {
-      jjStopStringLiteralDfa_0(1, active0, active1);
-      return 2;
-   }
-   switch(curChar)
-   {
-      case 61:
-         if ((active1 & 0x2000000000000L) != 0L) {
-            return jjStopAtPos(2, 113);
-         } else if ((active1 & 0x4000000000000L) != 0L) {
-            return jjStopAtPos(2, 114);
-         }
-         break;
-      case 62:
-         if ((active1 & 0x10000000000L) != 0L)
-         {
-            jjmatchedKind = 104;
-            jjmatchedPos = 2;
-         }
-         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x8000000000000L);
-      case 97:
-         return jjMoveStringLiteralDfa3_0(active0, 0x20400000018000L, active1, 0L);
-      case 98:
-         return jjMoveStringLiteralDfa3_0(active0, 0x80000000000L, active1, 0L);
-      case 99:
-         return jjMoveStringLiteralDfa3_0(active0, 0x10000000000L, active1, 0L);
-      case 101:
-         return jjMoveStringLiteralDfa3_0(active0, 0x800L, active1, 0L);
-      case 102:
-         return jjMoveStringLiteralDfa3_0(active0, 0x80000L, active1, 0L);
-      case 105:
-         return jjMoveStringLiteralDfa3_0(active0, 0x505020000000000L, active1, 0L);
-      case 108:
-         return jjMoveStringLiteralDfa3_0(active0, 0x200008001000000L, active1, 0L);
-      case 110:
-         return jjMoveStringLiteralDfa3_0(active0, 0x2001006060000L, active1, 0L);
-      case 111:
-         return jjMoveStringLiteralDfa3_0(active0, 0x240008000400L, active1, 0L);
-      case 112:
-         return jjMoveStringLiteralDfa3_0(active0, 0x800180000000L, active1, 0L);
-      case 114:
-         if ((active0 & 0x10000000L) != 0L) {
-            return jjStartNfaWithStates_0(2, 28, 28);
-         }
-         return jjMoveStringLiteralDfa3_0(active0, 0x18000000000000L, active1, 0L);
-      case 115:
-         return jjMoveStringLiteralDfa3_0(active0, 0x200402200L, active1, 0L);
-      case 116:
-         if ((active0 & 0x400000000L) != 0L)
-         {
-            jjmatchedKind = 34;
-            jjmatchedPos = 2;
-         }
-         return jjMoveStringLiteralDfa3_0(active0, 0x102820805000L, active1, 0L);
-      case 117:
-         return jjMoveStringLiteralDfa3_0(active0, 0x40000000200000L, active1, 0L);
-      case 119:
-         if ((active0 & 0x4000000000L) != 0L) {
-            return jjStartNfaWithStates_0(2, 38, 28);
-         }
-         break;
-      case 121:
-         if ((active0 & 0x80000000000000L) != 0L) {
-            return jjStartNfaWithStates_0(2, 55, 28);
-         }
-         break;
-      default :
-         break;
-   }
-   return jjStartNfa_0(1, active0, active1);
-}
-private final int jjMoveStringLiteralDfa3_0(long old0, long active0, long old1, long active1)
-{
-   if (((active0 &= old0) | (active1 &= old1)) == 0L) {
-      return jjStartNfa_0(1, old0, old1);
-   }
-   try { curChar = input_stream.readChar(); }
-   catch(java.io.IOException e) {
-      jjStopStringLiteralDfa_0(2, active0, active1);
-      return 3;
-   }
-   switch(curChar)
-   {
-      case 61:
-         if ((active1 & 0x8000000000000L) != 0L) {
-            return jjStopAtPos(3, 115);
-         }
-         break;
-      case 97:
-         return jjMoveStringLiteralDfa4_0(active0, 0x20000000e080800L, active1, 0L);
-      case 98:
-         return jjMoveStringLiteralDfa4_0(active0, 0x200000L, active1, 0L);
-      case 99:
-         return jjMoveStringLiteralDfa4_0(active0, 0x2000000004000L, active1, 0L);
-      case 100:
-         if ((active0 & 0x100000000000000L) != 0L) {
-            return jjStartNfaWithStates_0(3, 56, 28);
-         }
-         break;
-      case 101:
-         if ((active0 & 0x1000L) != 0L) {
-            return jjStartNfaWithStates_0(3, 12, 28);
-         } else if ((active0 & 0x2000L) != 0L) {
-            return jjStartNfaWithStates_0(3, 13, 28);
-         } else if ((active0 & 0x400000L) != 0L) {
-            return jjStartNfaWithStates_0(3, 22, 28);
-         } else if ((active0 & 0x40000000000000L) != 0L) {
-            return jjStartNfaWithStates_0(3, 54, 28);
-         }
-         return jjMoveStringLiteralDfa4_0(active0, 0x800800800000L, active1, 0L);
-      case 103:
-         if ((active0 & 0x1000000000L) != 0L) {
-            return jjStartNfaWithStates_0(3, 36, 28);
-         }
-         break;
-      case 105:
-         return jjMoveStringLiteralDfa4_0(active0, 0x2000000000L, active1, 0L);
-      case 107:
-         return jjMoveStringLiteralDfa4_0(active0, 0x10000000000L, active1, 0L);
-      case 108:
-         if ((active0 & 0x8000000000L) != 0L) {
-            return jjStartNfaWithStates_0(3, 39, 28);
-         }
-         return jjMoveStringLiteralDfa4_0(active0, 0x400080080000400L, active1, 0L);
-      case 110:
-         return jjMoveStringLiteralDfa4_0(active0, 0x20000000000000L, active1, 0L);
-      case 111:
-         if ((active0 & 0x20000000L) != 0L) {
-            return jjStartNfaWithStates_0(3, 29, 28);
-         }
-         return jjMoveStringLiteralDfa4_0(active0, 0x18000100000000L, active1, 0L);
-      case 114:
-         if ((active0 & 0x8000L) != 0L) {
-            return jjStartNfaWithStates_0(3, 15, 28);
-         }
-         return jjMoveStringLiteralDfa4_0(active0, 0x200000000000L, active1, 0L);
-      case 115:
-         if ((active0 & 0x4000000000000L) != 0L) {
-            return jjStartNfaWithStates_0(3, 50, 28);
-         }
-         return jjMoveStringLiteralDfa4_0(active0, 0x1030000L, active1, 0L);
-      case 116:
-         return jjMoveStringLiteralDfa4_0(active0, 0x1440200040200L, active1, 0L);
-      case 117:
-         return jjMoveStringLiteralDfa4_0(active0, 0x100000000000L, active1, 0L);
-      case 118:
-         return jjMoveStringLiteralDfa4_0(active0, 0x20000000000L, active1, 0L);
-      default :
-         break;
-   }
-   return jjStartNfa_0(2, active0, active1);
-}
-private final int jjMoveStringLiteralDfa4_0(long old0, long active0, long old1, long active1)
-{
-   if (((active0 &= old0) | (active1 &= old1)) == 0L) {
-      return jjStartNfa_0(2, old0, old1);
-   }
-   try { curChar = input_stream.readChar(); }
-   catch(java.io.IOException e) {
-      jjStopStringLiteralDfa_0(3, active0, 0L);
-      return 4;
-   }
-   switch(curChar)
-   {
-      case 97:
-         return jjMoveStringLiteralDfa5_0(active0, 0x30200000000L);
-      case 99:
-         return jjMoveStringLiteralDfa5_0(active0, 0x1000000000000L);
-      case 101:
-         if ((active0 & 0x1000000L) != 0L) {
-            return jjStartNfaWithStates_0(4, 24, 28);
-         } else if ((active0 & 0x400000000000000L) != 0L) {
-            return jjStartNfaWithStates_0(4, 58, 28);
-         }
-         return jjMoveStringLiteralDfa5_0(active0, 0x40080000400L);
-      case 104:
-         if ((active0 & 0x4000L) != 0L) {
-            return jjStartNfaWithStates_0(4, 14, 28);
-         }
-         return jjMoveStringLiteralDfa5_0(active0, 0x2000000000000L);
-      case 105:
-         return jjMoveStringLiteralDfa5_0(active0, 0x480000040000L);
-      case 107:
-         if ((active0 & 0x800L) != 0L) {
-            return jjStartNfaWithStates_0(4, 11, 28);
-         }
-         break;
-      case 108:
-         if ((active0 & 0x2000000L) != 0L)
-         {
-            jjmatchedKind = 25;
-            jjmatchedPos = 4;
-         }
-         return jjMoveStringLiteralDfa5_0(active0, 0x4200000L);
-      case 110:
-         return jjMoveStringLiteralDfa5_0(active0, 0x800000L);
-      case 114:
-         if ((active0 & 0x800000000000L) != 0L) {
-            return jjStartNfaWithStates_0(4, 47, 28);
-         }
-         return jjMoveStringLiteralDfa5_0(active0, 0x100900000200L);
-      case 115:
-         if ((active0 & 0x10000L) != 0L) {
-            return jjStartNfaWithStates_0(4, 16, 28);
-         }
-         return jjMoveStringLiteralDfa5_0(active0, 0x20000000000000L);
-      case 116:
-         if ((active0 & 0x20000L) != 0L) {
-            return jjStartNfaWithStates_0(4, 17, 28);
-         } else if ((active0 & 0x8000000L) != 0L) {
-            return jjStartNfaWithStates_0(4, 27, 28);
-         } else if ((active0 & 0x200000000000L) != 0L) {
-            return jjStartNfaWithStates_0(4, 45, 28);
-         }
-         return jjMoveStringLiteralDfa5_0(active0, 0x200000000000000L);
-      case 117:
-         return jjMoveStringLiteralDfa5_0(active0, 0x80000L);
-      case 118:
-         return jjMoveStringLiteralDfa5_0(active0, 0x2000000000L);
-      case 119:
-         if ((active0 & 0x8000000000000L) != 0L)
-         {
-            jjmatchedKind = 51;
-            jjmatchedPos = 4;
-         }
-         return jjMoveStringLiteralDfa5_0(active0, 0x10000000000000L);
-      default :
-         break;
-   }
-   return jjStartNfa_0(3, active0, 0L);
-}
-private final int jjMoveStringLiteralDfa5_0(long old0, long active0)
-{
-   if (((active0 &= old0)) == 0L) {
-      return jjStartNfa_0(3, old0, 0L);
-   }
-   try { curChar = input_stream.readChar(); }
-   catch(java.io.IOException e) {
-      jjStopStringLiteralDfa_0(4, active0, 0L);
-      return 5;
-   }
-   switch(curChar)
-   {
-      case 97:
-         return jjMoveStringLiteralDfa6_0(active0, 0x600L);
-      case 99:
-         if ((active0 & 0x80000000000L) != 0L) {
-            return jjStartNfaWithStates_0(5, 43, 28);
-         } else if ((active0 & 0x400000000000L) != 0L) {
-            return jjStartNfaWithStates_0(5, 46, 28);
-         }
-         return jjMoveStringLiteralDfa6_0(active0, 0x40000000000L);
-      case 100:
-         return jjMoveStringLiteralDfa6_0(active0, 0x800000L);
-      case 101:
-         if ((active0 & 0x200000L) != 0L) {
-            return jjStartNfaWithStates_0(5, 21, 28);
-         } else if ((active0 & 0x2000000000L) != 0L) {
-            return jjStartNfaWithStates_0(5, 37, 28);
-         }
-         break;
-      case 102:
-         return jjMoveStringLiteralDfa6_0(active0, 0x800000000L);
-      case 103:
-         return jjMoveStringLiteralDfa6_0(active0, 0x10000000000L);
-      case 104:
-         if ((active0 & 0x1000000000000L) != 0L) {
-            return jjStartNfaWithStates_0(5, 48, 28);
-         }
-         break;
-      case 105:
-         return jjMoveStringLiteralDfa6_0(active0, 0x220000000000000L);
-      case 108:
-         return jjMoveStringLiteralDfa6_0(active0, 0x4080000L);
-      case 109:
-         return jjMoveStringLiteralDfa6_0(active0, 0x80000000L);
-      case 110:
-         if ((active0 & 0x100000000000L) != 0L) {
-            return jjStartNfaWithStates_0(5, 44, 28);
-         }
-         return jjMoveStringLiteralDfa6_0(active0, 0x200040000L);
-      case 114:
-         return jjMoveStringLiteralDfa6_0(active0, 0x2000000000000L);
-      case 115:
-         if ((active0 & 0x10000000000000L) != 0L) {
-            return jjStartNfaWithStates_0(5, 52, 28);
-         }
-         break;
-      case 116:
-         if ((active0 & 0x100000000L) != 0L) {
-            return jjStartNfaWithStates_0(5, 32, 28);
-         }
-         return jjMoveStringLiteralDfa6_0(active0, 0x20000000000L);
-      default :
-         break;
-   }
-   return jjStartNfa_0(4, active0, 0L);
-}
-private final int jjMoveStringLiteralDfa6_0(long old0, long active0)
-{
-   if (((active0 &= old0)) == 0L) {
-      return jjStartNfa_0(4, old0, 0L);
-   }
-   try { curChar = input_stream.readChar(); }
-   catch(java.io.IOException e) {
-      jjStopStringLiteralDfa_0(5, active0, 0L);
-      return 6;
-   }
-   switch(curChar)
-   {
-      case 97:
-         return jjMoveStringLiteralDfa7_0(active0, 0x800000000L);
-      case 99:
-         return jjMoveStringLiteralDfa7_0(active0, 0x200000200L);
-      case 101:
-         if ((active0 & 0x10000000000L) != 0L) {
-            return jjStartNfaWithStates_0(6, 40, 28);
-         } else if ((active0 & 0x20000000000L) != 0L) {
-            return jjStartNfaWithStates_0(6, 41, 28);
-         }
-         return jjMoveStringLiteralDfa7_0(active0, 0x20000080000000L);
-      case 108:
-         return jjMoveStringLiteralDfa7_0(active0, 0x200000000000000L);
-      case 110:
-         if ((active0 & 0x400L) != 0L) {
-            return jjStartNfaWithStates_0(6, 10, 28);
-         }
-         break;
-      case 111:
-         return jjMoveStringLiteralDfa7_0(active0, 0x2000000000000L);
-      case 115:
-         if ((active0 & 0x800000L) != 0L) {
-            return jjStartNfaWithStates_0(6, 23, 28);
-         }
-         break;
-      case 116:
-         if ((active0 & 0x80000L) != 0L) {
-            return jjStartNfaWithStates_0(6, 19, 28);
-         }
-         return jjMoveStringLiteralDfa7_0(active0, 0x40000000000L);
-      case 117:
-         return jjMoveStringLiteralDfa7_0(active0, 0x40000L);
-      case 121:
-         if ((active0 & 0x4000000L) != 0L) {
-            return jjStartNfaWithStates_0(6, 26, 28);
-         }
-         break;
-      default :
-         break;
-   }
-   return jjStartNfa_0(5, active0, 0L);
-}
-private final int jjMoveStringLiteralDfa7_0(long old0, long active0)
-{
-   if (((active0 &= old0)) == 0L) {
-      return jjStartNfa_0(5, old0, 0L);
-   }
-   try { curChar = input_stream.readChar(); }
-   catch(java.io.IOException e) {
-      jjStopStringLiteralDfa_0(6, active0, 0L);
-      return 7;
-   }
-   switch(curChar)
-   {
-      case 99:
-         return jjMoveStringLiteralDfa8_0(active0, 0x800000000L);
-      case 101:
-         if ((active0 & 0x40000L) != 0L) {
-            return jjStartNfaWithStates_0(7, 18, 28);
-         } else if ((active0 & 0x200000000000000L) != 0L) {
-            return jjStartNfaWithStates_0(7, 57, 28);
-         }
-         return jjMoveStringLiteralDfa8_0(active0, 0x40200000000L);
-      case 110:
-         return jjMoveStringLiteralDfa8_0(active0, 0x22000080000000L);
-      case 116:
-         if ((active0 & 0x200L) != 0L) {
-            return jjStartNfaWithStates_0(7, 9, 28);
-         }
-         break;
-      default :
-         break;
-   }
-   return jjStartNfa_0(6, active0, 0L);
-}
-private final int jjMoveStringLiteralDfa8_0(long old0, long active0)
-{
-   if (((active0 &= old0)) == 0L) {
-      return jjStartNfa_0(6, old0, 0L);
-   }
-   try { curChar = input_stream.readChar(); }
-   catch(java.io.IOException e) {
-      jjStopStringLiteralDfa_0(7, active0, 0L);
-      return 8;
-   }
-   switch(curChar)
-   {
-      case 100:
-         if ((active0 & 0x40000000000L) != 0L) {
-            return jjStartNfaWithStates_0(8, 42, 28);
-         }
-         break;
-      case 101:
-         if ((active0 & 0x800000000L) != 0L) {
-            return jjStartNfaWithStates_0(8, 35, 28);
-         }
-         break;
-      case 105:
-         return jjMoveStringLiteralDfa9_0(active0, 0x2000000000000L);
-      case 111:
-         return jjMoveStringLiteralDfa9_0(active0, 0x200000000L);
-      case 116:
-         if ((active0 & 0x20000000000000L) != 0L) {
-            return jjStartNfaWithStates_0(8, 53, 28);
-         }
-         return jjMoveStringLiteralDfa9_0(active0, 0x80000000L);
-      default :
-         break;
-   }
-   return jjStartNfa_0(7, active0, 0L);
-}
-private final int jjMoveStringLiteralDfa9_0(long old0, long active0)
-{
-   if (((active0 &= old0)) == 0L) {
-      return jjStartNfa_0(7, old0, 0L);
-   }
-   try { curChar = input_stream.readChar(); }
-   catch(java.io.IOException e) {
-      jjStopStringLiteralDfa_0(8, active0, 0L);
-      return 9;
-   }
-   switch(curChar)
-   {
-      case 102:
-         if ((active0 & 0x200000000L) != 0L) {
-            return jjStartNfaWithStates_0(9, 33, 28);
-         }
-         break;
-      case 115:
-         if ((active0 & 0x80000000L) != 0L) {
-            return jjStartNfaWithStates_0(9, 31, 28);
-         }
-         break;
-      case 122:
-         return jjMoveStringLiteralDfa10_0(active0, 0x2000000000000L);
-      default :
-         break;
-   }
-   return jjStartNfa_0(8, active0, 0L);
-}
-private final int jjMoveStringLiteralDfa10_0(long old0, long active0)
-{
-   if (((active0 &= old0)) == 0L) {
-      return jjStartNfa_0(8, old0, 0L);
-   }
-   try { curChar = input_stream.readChar(); }
-   catch(java.io.IOException e) {
-      jjStopStringLiteralDfa_0(9, active0, 0L);
-      return 10;
-   }
-   switch(curChar)
-   {
-      case 101:
-         return jjMoveStringLiteralDfa11_0(active0, 0x2000000000000L);
-      default :
-         break;
-   }
-   return jjStartNfa_0(9, active0, 0L);
-}
-private final int jjMoveStringLiteralDfa11_0(long old0, long active0)
-{
-   if (((active0 &= old0)) == 0L) {
-      return jjStartNfa_0(9, old0, 0L);
-   }
-   try { curChar = input_stream.readChar(); }
-   catch(java.io.IOException e) {
-      jjStopStringLiteralDfa_0(10, active0, 0L);
-      return 11;
-   }
-   switch(curChar)
-   {
-      case 100:
-         if ((active0 & 0x2000000000000L) != 0L) {
-            return jjStartNfaWithStates_0(11, 49, 28);
-         }
-         break;
-      default :
-         break;
-   }
-   return jjStartNfa_0(10, active0, 0L);
-}
-private final void jjCheckNAdd(int state)
-{
-   if (jjrounds[state] != jjround)
-   {
-      jjstateSet[jjnewStateCnt++] = state;
-      jjrounds[state] = jjround;
-   }
-}
-private final void jjAddStates(int start, int end)
-{
-   do {
-      jjstateSet[jjnewStateCnt++] = jjnextStates[start];
-   } while (start++ != end);
-}
-private final void jjCheckNAddTwoStates(int state1, int state2)
-{
-   jjCheckNAdd(state1);
-   jjCheckNAdd(state2);
-}
-private final void jjCheckNAddStates(int start, int end)
-{
-   do {
-      jjCheckNAdd(jjnextStates[start]);
-   } while (start++ != end);
-}
-private final void jjCheckNAddStates(int start)
-{
-   jjCheckNAdd(jjnextStates[start]);
-   jjCheckNAdd(jjnextStates[start + 1]);
-}
-static final long[] jjbitVec0 = {
-   0xfffffffffffffffeL, 0xffffffffffffffffL, 0xffffffffffffffffL, 0xffffffffffffffffL
-};
-static final long[] jjbitVec2 = {
-   0x0L, 0x0L, 0xffffffffffffffffL, 0xffffffffffffffffL
-};
-static final long[] jjbitVec3 = {
-   0x1ff00000fffffffeL, 0xffffffffffffc000L, 0xffffffffL, 0x600000000000000L
-};
-static final long[] jjbitVec4 = {
-   0x0L, 0x0L, 0x0L, 0xff7fffffff7fffffL
-};
-static final long[] jjbitVec5 = {
-   0x0L, 0xffffffffffffffffL, 0xffffffffffffffffL, 0xffffffffffffffffL
-};
-static final long[] jjbitVec6 = {
-   0xffffffffffffffffL, 0xffffffffffffffffL, 0xffffL, 0x0L
-};
-static final long[] jjbitVec7 = {
-   0xffffffffffffffffL, 0xffffffffffffffffL, 0x0L, 0x0L
-};
-static final long[] jjbitVec8 = {
-   0x3fffffffffffL, 0x0L, 0x0L, 0x0L
-};
-private final int jjMoveNfa_0(int startState, int curPos)
-{
-   int startsAt = 0;
-   jjnewStateCnt = 67;
-   int i = 1;
-   jjstateSet[0] = startState;
-   int kind = 0x7fffffff;
-   for (;;)
-   {
-      if (++jjround == 0x7fffffff) {
-         ReInitRounds();
-      }
-      if (curChar < 64)
-      {
-         long l = 1L << curChar;
-         //MatchLoop
-         do
-         {
-            switch(jjstateSet[--i])
-            {
-               case 0:
-                  if ((0x3ff000000000000L & l) != 0L) {
-                     jjCheckNAddStates(0, 6);
-                  } else if (curChar == 47) {
-                     jjAddStates(7, 9);
-                  } else if (curChar == 36)
-                  {
-                     if (kind > 67) {
-                        kind = 67;
-                     }
-                     jjCheckNAdd(28);
-                  }
-                  else if (curChar == 34) {
-                     jjCheckNAddStates(10, 12);
-                  } else if (curChar == 39) {
-                     jjAddStates(13, 14);
-                  } else if (curChar == 46) {
-                     jjCheckNAdd(4);
-                  }
-                  if ((0x3fe000000000000L & l) != 0L)
-                  {
-                     if (kind > 59) {
-                        kind = 59;
-                     }
-                     jjCheckNAddTwoStates(1, 2);
-                  }
-                  else if (curChar == 48)
-                  {
-                     if (kind > 59) {
-                        kind = 59;
-                     }
-                     jjCheckNAddStates(15, 17);
-                  }
-                  break;
-               case 49:
-                  if (curChar == 42) {
-                     jjCheckNAddTwoStates(62, 63);
-                  } else if (curChar == 47) {
-                     jjCheckNAddStates(18, 20);
-                  }
-                  if (curChar == 42) {
-                     jjstateSet[jjnewStateCnt++] = 54;
-                  }
-                  break;
-               case 1:
-                  if ((0x3ff000000000000L & l) == 0L) {
-                     break;
-                  }
-                  if (kind > 59) {
-                     kind = 59;
-                  }
-                  jjCheckNAddTwoStates(1, 2);
-                  break;
-               case 3:
-                  if (curChar == 46) {
-                     jjCheckNAdd(4);
-                  }
-                  break;
-               case 4:
-                  if ((0x3ff000000000000L & l) == 0L) {
-                     break;
-                  }
-                  if (kind > 63) {
-                     kind = 63;
-                  }
-                  jjCheckNAddStates(21, 23);
-                  break;
-               case 6:
-                  if ((0x280000000000L & l) != 0L) {
-                     jjCheckNAdd(7);
-                  }
-                  break;
-               case 7:
-                  if ((0x3ff000000000000L & l) == 0L) {
-                     break;
-                  }
-                  if (kind > 63) {
-                     kind = 63;
-                  }
-                  jjCheckNAddTwoStates(7, 8);
-                  break;
-               case 9:
-                  if (curChar == 39) {
-                     jjAddStates(13, 14);
-                  }
-                  break;
-               case 10:
-                  if ((0xffffff7fffffdbffL & l) != 0L) {
-                     jjCheckNAdd(11);
-                  }
-                  break;
-               case 11:
-                  if (curChar == 39 && kind > 65) {
-                     kind = 65;
-                  }
-                  break;
-               case 13:
-                  if ((0x8400000000L & l) != 0L) {
-                     jjCheckNAdd(11);
-                  }
-                  break;
-               case 14:
-                  if ((0xff000000000000L & l) != 0L) {
-                     jjCheckNAddTwoStates(15, 11);
-                  }
-                  break;
-               case 15:
-                  if ((0xff000000000000L & l) != 0L) {
-                     jjCheckNAdd(11);
-                  }
-                  break;
-               case 16:
-                  if ((0xf000000000000L & l) != 0L) {
-                     jjstateSet[jjnewStateCnt++] = 17;
-                  }
-                  break;
-               case 17:
-                  if ((0xff000000000000L & l) != 0L) {
-                     jjCheckNAdd(15);
-                  }
-                  break;
-               case 18:
-                  if (curChar == 34) {
-                     jjCheckNAddStates(10, 12);
-                  }
-                  break;
-               case 19:
-                  if ((0xfffffffbffffdbffL & l) != 0L) {
-                     jjCheckNAddStates(10, 12);
-                  }
-                  break;
-               case 21:
-                  if ((0x8400000000L & l) != 0L) {
-                     jjCheckNAddStates(10, 12);
-                  }
-                  break;
-               case 22:
-                  if (curChar == 34 && kind > 66) {
-                     kind = 66;
-                  }
-                  break;
-               case 23:
-                  if ((0xff000000000000L & l) != 0L) {
-                     jjCheckNAddStates(24, 27);
-                  }
-                  break;
-               case 24:
-                  if ((0xff000000000000L & l) != 0L) {
-                     jjCheckNAddStates(10, 12);
-                  }
-                  break;
-               case 25:
-                  if ((0xf000000000000L & l) != 0L) {
-                     jjstateSet[jjnewStateCnt++] = 26;
-                  }
-                  break;
-               case 26:
-                  if ((0xff000000000000L & l) != 0L) {
-                     jjCheckNAdd(24);
-                  }
-                  break;
-               case 27:
-                  if (curChar != 36) {
-                     break;
-                  }
-                  if (kind > 67) {
-                     kind = 67;
-                  }
-                  jjCheckNAdd(28);
-                  break;
-               case 28:
-                  if ((0x3ff001000000000L & l) == 0L) {
-                     break;
-                  }
-                  if (kind > 67) {
-                     kind = 67;
-                  }
-                  jjCheckNAdd(28);
-                  break;
-               case 29:
-                  if ((0x3ff000000000000L & l) != 0L) {
-                     jjCheckNAddStates(0, 6);
-                  }
-                  break;
-               case 30:
-                  if ((0x3ff000000000000L & l) != 0L) {
-                     jjCheckNAddTwoStates(30, 31);
-                  }
-                  break;
-               case 31:
-                  if (curChar != 46) {
-                     break;
-                  }
-                  if (kind > 63) {
-                     kind = 63;
-                  }
-                  jjCheckNAddStates(28, 30);
-                  break;
-               case 32:
-                  if ((0x3ff000000000000L & l) == 0L) {
-                     break;
-                  }
-                  if (kind > 63) {
-                     kind = 63;
-                  }
-                  jjCheckNAddStates(28, 30);
-                  break;
-               case 34:
-                  if ((0x280000000000L & l) != 0L) {
-                     jjCheckNAdd(35);
-                  }
-                  break;
-               case 35:
-                  if ((0x3ff000000000000L & l) == 0L) {
-                     break;
-                  }
-                  if (kind > 63) {
-                     kind = 63;
-                  }
-                  jjCheckNAddTwoStates(35, 8);
-                  break;
-               case 36:
-                  if ((0x3ff000000000000L & l) != 0L) {
-                     jjCheckNAddTwoStates(36, 37);
-                  }
-                  break;
-               case 38:
-                  if ((0x280000000000L & l) != 0L) {
-                     jjCheckNAdd(39);
-                  }
-                  break;
-               case 39:
-                  if ((0x3ff000000000000L & l) == 0L) {
-                     break;
-                  }
-                  if (kind > 63) {
-                     kind = 63;
-                  }
-                  jjCheckNAddTwoStates(39, 8);
-                  break;
-               case 40:
-                  if ((0x3ff000000000000L & l) != 0L) {
-                     jjCheckNAddStates(31, 33);
-                  }
-                  break;
-               case 42:
-                  if ((0x280000000000L & l) != 0L) {
-                     jjCheckNAdd(43);
-                  }
-                  break;
-               case 43:
-                  if ((0x3ff000000000000L & l) != 0L) {
-                     jjCheckNAddTwoStates(43, 8);
-                  }
-                  break;
-               case 44:
-                  if (curChar != 48) {
-                     break;
-                  }
-                  if (kind > 59) {
-                     kind = 59;
-                  }
-                  jjCheckNAddStates(15, 17);
-                  break;
-               case 46:
-                  if ((0x3ff000000000000L & l) == 0L) {
-                     break;
-                  }
-                  if (kind > 59) {
-                     kind = 59;
-                  }
-                  jjCheckNAddTwoStates(46, 2);
-                  break;
-               case 47:
-                  if ((0xff000000000000L & l) == 0L) {
-                     break;
-                  }
-                  if (kind > 59) {
-                     kind = 59;
-                  }
-                  jjCheckNAddTwoStates(47, 2);
-                  break;
-               case 48:
-                  if (curChar == 47) {
-                     jjAddStates(7, 9);
-                  }
-                  break;
-               case 50:
-                  if ((0xffffffffffffdbffL & l) != 0L) {
-                     jjCheckNAddStates(18, 20);
-                  }
-                  break;
-               case 51:
-                  if ((0x2400L & l) != 0L && kind > 6) {
-                     kind = 6;
-                  }
-                  break;
-               case 52:
-                  if (curChar == 10 && kind > 6) {
-                     kind = 6;
-                  }
-                  break;
-               case 53:
-                  if (curChar == 13) {
-                     jjstateSet[jjnewStateCnt++] = 52;
-                  }
-                  break;
-               case 54:
-                  if (curChar == 42) {
-                     jjCheckNAddTwoStates(55, 56);
-                  }
-                  break;
-               case 55:
-                  if ((0xfffffbffffffffffL & l) != 0L) {
-                     jjCheckNAddTwoStates(55, 56);
-                  }
-                  break;
-               case 56:
-                  if (curChar == 42) {
-                     jjCheckNAddStates(34, 36);
-                  }
-                  break;
-               case 57:
-                  if ((0xffff7bffffffffffL & l) != 0L) {
-                     jjCheckNAddTwoStates(58, 56);
-                  }
-                  break;
-               case 58:
-                  if ((0xfffffbffffffffffL & l) != 0L) {
-                     jjCheckNAddTwoStates(58, 56);
-                  }
-                  break;
-               case 59:
-                  if (curChar == 47 && kind > 7) {
-                     kind = 7;
-                  }
-                  break;
-               case 60:
-                  if (curChar == 42) {
-                     jjstateSet[jjnewStateCnt++] = 54;
-                  }
-                  break;
-               case 61:
-                  if (curChar == 42) {
-                     jjCheckNAddTwoStates(62, 63);
-                  }
-                  break;
-               case 62:
-                  if ((0xfffffbffffffffffL & l) != 0L) {
-                     jjCheckNAddTwoStates(62, 63);
-                  }
-                  break;
-               case 63:
-                  if (curChar == 42) {
-                     jjCheckNAddStates(37, 39);
-                  }
-                  break;
-               case 64:
-                  if ((0xffff7bffffffffffL & l) != 0L) {
-                     jjCheckNAddTwoStates(65, 63);
-                  }
-                  break;
-               case 65:
-                  if ((0xfffffbffffffffffL & l) != 0L) {
-                     jjCheckNAddTwoStates(65, 63);
-                  }
-                  break;
-               case 66:
-                  if (curChar == 47 && kind > 8) {
-                     kind = 8;
-                  }
-                  break;
-               default : break;
-            }
-         } while(i != startsAt);
-      }
-      else if (curChar < 128)
-      {
-         long l = 1L << (curChar & 077);
-         //MatchLoop
-         do
-         {
-            switch(jjstateSet[--i])
-            {
-               case 0:
-               case 28:
-                  if ((0x7fffffe87fffffeL & l) == 0L) {
-                     break;
-                  }
-                  if (kind > 67) {
-                     kind = 67;
-                  }
-                  jjCheckNAdd(28);
-                  break;
-               case 2:
-                  if ((0x100000001000L & l) != 0L && kind > 59) {
-                     kind = 59;
-                  }
-                  break;
-               case 5:
-                  if ((0x2000000020L & l) != 0L) {
-                     jjAddStates(40, 41);
-                  }
-                  break;
-               case 8:
-                  if ((0x5000000050L & l) != 0L && kind > 63) {
-                     kind = 63;
-                  }
-                  break;
-               case 10:
-                  if ((0xffffffffefffffffL & l) != 0L) {
-                     jjCheckNAdd(11);
-                  }
-                  break;
-               case 12:
-                  if (curChar == 92) {
-                     jjAddStates(42, 44);
-                  }
-                  break;
-               case 13:
-                  if ((0x14404410000000L & l) != 0L) {
-                     jjCheckNAdd(11);
-                  }
-                  break;
-               case 19:
-                  if ((0xffffffffefffffffL & l) != 0L) {
-                     jjCheckNAddStates(10, 12);
-                  }
-                  break;
-               case 20:
-                  if (curChar == 92) {
-                     jjAddStates(45, 47);
-                  }
-                  break;
-               case 21:
-                  if ((0x14404410000000L & l) != 0L) {
-                     jjCheckNAddStates(10, 12);
-                  }
-                  break;
-               case 33:
-                  if ((0x2000000020L & l) != 0L) {
-                     jjAddStates(48, 49);
-                  }
-                  break;
-               case 37:
-                  if ((0x2000000020L & l) != 0L) {
-                     jjAddStates(50, 51);
-                  }
-                  break;
-               case 41:
-                  if ((0x2000000020L & l) != 0L) {
-                     jjAddStates(52, 53);
-                  }
-                  break;
-               case 45:
-                  if ((0x100000001000000L & l) != 0L) {
-                     jjCheckNAdd(46);
-                  }
-                  break;
-               case 46:
-                  if ((0x7e0000007eL & l) == 0L) {
-                     break;
-                  }
-                  if (kind > 59) {
-                     kind = 59;
-                  }
-                  jjCheckNAddTwoStates(46, 2);
-                  break;
-               case 50:
-                  jjAddStates(18, 20);
-                  break;
-               case 55:
-                  jjCheckNAddTwoStates(55, 56);
-                  break;
-               case 57:
-               case 58:
-                  jjCheckNAddTwoStates(58, 56);
-                  break;
-               case 62:
-                  jjCheckNAddTwoStates(62, 63);
-                  break;
-               case 64:
-               case 65:
-                  jjCheckNAddTwoStates(65, 63);
-                  break;
-               default : break;
-            }
-         } while(i != startsAt);
-      }
-      else
-      {
-         int hiByte = (int)(curChar >> 8);
-         int i1 = hiByte >> 6;
-         long l1 = 1L << (hiByte & 077);
-         int i2 = (curChar & 0xff) >> 6;
-         long l2 = 1L << (curChar & 077);
-         //MatchLoop
-         do
-         {
-            switch(jjstateSet[--i])
-            {
-               case 0:
-               case 28:
-                  if (!jjCanMove_1(hiByte, i1, i2, l1, l2)) {
-                     break;
-                  }
-                  if (kind > 67) {
-                     kind = 67;
-                  }
-                  jjCheckNAdd(28);
-                  break;
-               case 10:
-                  if (jjCanMove_0(hiByte, i1, i2, l1, l2)) {
-                     jjstateSet[jjnewStateCnt++] = 11;
-                  }
-                  break;
-               case 19:
-                  if (jjCanMove_0(hiByte, i1, i2, l1, l2)) {
-                     jjAddStates(10, 12);
-                  }
-                  break;
-               case 50:
-                  if (jjCanMove_0(hiByte, i1, i2, l1, l2)) {
-                     jjAddStates(18, 20);
-                  }
-                  break;
-               case 55:
-                  if (jjCanMove_0(hiByte, i1, i2, l1, l2)) {
-                     jjCheckNAddTwoStates(55, 56);
-                  }
-                  break;
-               case 57:
-               case 58:
-                  if (jjCanMove_0(hiByte, i1, i2, l1, l2)) {
-                     jjCheckNAddTwoStates(58, 56);
-                  }
-                  break;
-               case 62:
-                  if (jjCanMove_0(hiByte, i1, i2, l1, l2)) {
-                     jjCheckNAddTwoStates(62, 63);
-                  }
-                  break;
-               case 64:
-               case 65:
-                  if (jjCanMove_0(hiByte, i1, i2, l1, l2)) {
-                     jjCheckNAddTwoStates(65, 63);
-                  }
-                  break;
-               default : break;
-            }
-         } while(i != startsAt);
-      }
-      if (kind != 0x7fffffff)
-      {
-         jjmatchedKind = kind;
-         jjmatchedPos = curPos;
-         kind = 0x7fffffff;
-      }
-      ++curPos;
-      if ((i = jjnewStateCnt) == (startsAt = 67 - (jjnewStateCnt = startsAt))) {
-         return curPos;
-      }
-      try { curChar = input_stream.readChar(); }
-      catch(java.io.IOException e) { return curPos; }
-   }
-}
-static final int[] jjnextStates = {
-   30, 31, 36, 37, 40, 41, 8, 49, 60, 61, 19, 20, 22, 10, 12, 45,
-   47, 2, 50, 51, 53, 4, 5, 8, 19, 20, 24, 22, 32, 33, 8, 40,
-   41, 8, 56, 57, 59, 63, 64, 66, 6, 7, 13, 14, 16, 21, 23, 25,
-   34, 35, 38, 39, 42, 43,
-};
-private static final boolean jjCanMove_0(int hiByte, int i1, int i2, long l1, long l2)
-{
-   switch(hiByte)
-   {
-      case 0:
-         return ((jjbitVec2[i2] & l2) != 0L);
-      default :
-         if ((jjbitVec0[i1] & l1) != 0L) {
-            return true;
-         }
-         return false;
-   }
-}
-private static final boolean jjCanMove_1(int hiByte, int i1, int i2, long l1, long l2)
-{
-   switch(hiByte)
-   {
-      case 0:
-         return ((jjbitVec4[i2] & l2) != 0L);
-      case 48:
-         return ((jjbitVec5[i2] & l2) != 0L);
-      case 49:
-         return ((jjbitVec6[i2] & l2) != 0L);
-      case 51:
-         return ((jjbitVec7[i2] & l2) != 0L);
-      case 61:
-         return ((jjbitVec8[i2] & l2) != 0L);
-      default :
-         if ((jjbitVec3[i1] & l1) != 0L) {
-            return true;
-         }
-         return false;
-   }
-}
-public static final String[] jjstrLiteralImages = {
-"", null, null, null, null, null, null, null, null,
-"\141\142\163\164\162\141\143\164", "\142\157\157\154\145\141\156", "\142\162\145\141\153", "\142\171\164\145",
-"\143\141\163\145", "\143\141\164\143\150", "\143\150\141\162", "\143\154\141\163\163",
-"\143\157\156\163\164", "\143\157\156\164\151\156\165\145", "\144\145\146\141\165\154\164",
-"\144\157", "\144\157\165\142\154\145", "\145\154\163\145",
-"\145\170\164\145\156\144\163", "\146\141\154\163\145", "\146\151\156\141\154",
-"\146\151\156\141\154\154\171", "\146\154\157\141\164", "\146\157\162", "\147\157\164\157", "\151\146",
-"\151\155\160\154\145\155\145\156\164\163", "\151\155\160\157\162\164", "\151\156\163\164\141\156\143\145\157\146",
-"\151\156\164", "\151\156\164\145\162\146\141\143\145", "\154\157\156\147",
-"\156\141\164\151\166\145", "\156\145\167", "\156\165\154\154", "\160\141\143\153\141\147\145",
-"\160\162\151\166\141\164\145", "\160\162\157\164\145\143\164\145\144", "\160\165\142\154\151\143",
-"\162\145\164\165\162\156", "\163\150\157\162\164", "\163\164\141\164\151\143", "\163\165\160\145\162",
-"\163\167\151\164\143\150", "\163\171\156\143\150\162\157\156\151\172\145\144", "\164\150\151\163",
-"\164\150\162\157\167", "\164\150\162\157\167\163", "\164\162\141\156\163\151\145\156\164",
-"\164\162\165\145", "\164\162\171", "\166\157\151\144", "\166\157\154\141\164\151\154\145",
-"\167\150\151\154\145", null, null, null, null, null, null, null, null, null, null, null, "\50",
-"\51", "\173", "\175", "\133", "\135", "\73", "\54", "\56", "\75", "\76", "\74",
-"\41", "\176", "\77", "\72", "\75\75", "\74\75", "\76\75", "\41\75", "\174\174",
-"\46\46", "\53\53", "\55\55", "\53", "\55", "\52", "\57", "\46", "\174", "\136", "\45",
-"\74\74", "\76\76", "\76\76\76", "\53\75", "\55\75", "\52\75", "\57\75", "\46\75",
-"\174\75", "\136\75", "\45\75", "\74\74\75", "\76\76\75", "\76\76\76\75", };
-public static final String[] lexStateNames = {
-   "DEFAULT",
-};
-static final long[] jjtoToken = {
-   0x8ffffffffffffe01L, 0xfffffffffffceL,
-};
-static final long[] jjtoSkip = {
-   0x1feL, 0x0L,
-};
-static final long[] jjtoSpecial = {
-   0x1c0L, 0x0L,
-};
-private ASCII_UCodeESC_CharStream input_stream;
-private final int[] jjrounds = new int[67];
-private final int[] jjstateSet = new int[134];
-protected char curChar;
-public ExpressionParserTokenManager(ASCII_UCodeESC_CharStream stream)
-{
-   if (ASCII_UCodeESC_CharStream.staticFlag) {
-      throw new Error("ERROR: Cannot use a static CharStream class with a non-static lexical analyzer.");
-   }
-   input_stream = stream;
-}
-public ExpressionParserTokenManager(ASCII_UCodeESC_CharStream stream, int lexState)
-{
-   this(stream);
-   SwitchTo(lexState);
-}
-public void ReInit(ASCII_UCodeESC_CharStream stream)
-{
-   jjmatchedPos = jjnewStateCnt = 0;
-   curLexState = defaultLexState;
-   input_stream = stream;
-   ReInitRounds();
-}
-private final void ReInitRounds()
-{
-   int i;
-   jjround = 0x80000001;
-   for (i = 67; i-- > 0;) {
-      jjrounds[i] = 0x80000000;
-}
-}
-public void ReInit(ASCII_UCodeESC_CharStream stream, int lexState)
-{
-   ReInit(stream);
-   SwitchTo(lexState);
-}
-public void SwitchTo(int lexState)
-{
-   if (lexState >= 1 || lexState < 0) {
-      throw new TokenMgrError("Error: Ignoring invalid lexical state : " + lexState + ". State unchanged.", TokenMgrError.INVALID_LEXICAL_STATE);
-   } else {
-      curLexState = lexState;
-}
-}
-
-private final Token jjFillToken()
-{
-   Token t = Token.newToken(jjmatchedKind);
-   t.kind = jjmatchedKind;
-   String im = jjstrLiteralImages[jjmatchedKind];
-   t.image = (im == null) ? input_stream.GetImage() : im;
-   t.beginLine = input_stream.getBeginLine();
-   t.beginColumn = input_stream.getBeginColumn();
-   t.endLine = input_stream.getEndLine();
-   t.endColumn = input_stream.getEndColumn();
-   return t;
-}
-
-int curLexState = 0;
-int defaultLexState = 0;
-int jjnewStateCnt;
-int jjround;
-int jjmatchedPos;
-int jjmatchedKind;
-
-public final Token getNextToken()
-{
-  Token specialToken = null;
-  Token matchedToken;
-  int curPos = 0;
-
-  EOFLoop :
-  for (;;)
-  {
-   try
-   {
-      curChar = input_stream.BeginToken();
-   }
-   catch(java.io.IOException e)
-   {
-      jjmatchedKind = 0;
-      matchedToken = jjFillToken();
-      matchedToken.specialToken = specialToken;
-      return matchedToken;
-   }
-
-   try {
-      while (curChar <= 32 && (0x100003600L & (1L << curChar)) != 0L) {
-         curChar = input_stream.BeginToken();
-   }
-   }
-   catch (java.io.IOException e1) { continue EOFLoop; }
-   jjmatchedKind = 0x7fffffff;
-   jjmatchedPos = 0;
-   curPos = jjMoveStringLiteralDfa0_0();
-   if (jjmatchedKind != 0x7fffffff)
-   {
-      if (jjmatchedPos + 1 < curPos) {
-         input_stream.backup(curPos - jjmatchedPos - 1);
-      }
-      if ((jjtoToken[jjmatchedKind >> 6] & (1L << (jjmatchedKind & 077))) != 0L)
-      {
-         matchedToken = jjFillToken();
-         matchedToken.specialToken = specialToken;
-         return matchedToken;
-      }
-      else
-      {
-         if ((jjtoSpecial[jjmatchedKind >> 6] & (1L << (jjmatchedKind & 077))) != 0L)
-         {
-            matchedToken = jjFillToken();
-            if (specialToken == null) {
-               specialToken = matchedToken;
-            } else
-            {
-               matchedToken.specialToken = specialToken;
-               specialToken = (specialToken.next = matchedToken);
-            }
-         }
-         continue EOFLoop;
-      }
-   }
-   int error_line = input_stream.getEndLine();
-   int error_column = input_stream.getEndColumn();
-   String error_after = null;
-   boolean EOFSeen = false;
-   try { input_stream.readChar(); input_stream.backup(1); }
-   catch (java.io.IOException e1) {
-      EOFSeen = true;
-      error_after = curPos <= 1 ? "" : input_stream.GetImage();
-      if (curChar == '\n' || curChar == '\r') {
-         error_line++;
-         error_column = 0;
-      } else {
-         error_column++;
-      }
-   }
-   if (!EOFSeen) {
-      input_stream.backup(1);
-      error_after = curPos <= 1 ? "" : input_stream.GetImage();
-   }
-   throw new TokenMgrError(EOFSeen, curLexState, error_line, error_column, error_after, curChar, TokenMgrError.LEXICAL_ERROR);
-  }
-}
-
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/expr/LValue.java b/ojluni/src/main/java/com/sun/tools/example/debug/expr/LValue.java
deleted file mode 100755
index 57e2950..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/expr/LValue.java
+++ /dev/null
@@ -1,1065 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.expr;
-
-import com.sun.jdi.*;
-import java.util.*;
-
-abstract class LValue {
-
-    // The JDI Value object for this LValue.  Once we have this Value,
-    // we have to remember it since after we return the LValue object
-    // to the ExpressionParser, it might decide that it needs
-    // the 'toString' value for the LValue in which case it will
-    // call getMassagedValue to get this toString value.  At that
-    // point, we don't want to call JDI a 2nd time to get the Value
-    // for the LValue.  This is especially wrong when the LValue
-    // represents a member function.  We would end up calling it
-    // a 2nd time.
-    //
-    // Unfortunately, there are several levels of calls to
-    // get/set values in this file.  To minimize confusion,
-    // jdiValue is set/tested at the lowest level - right
-    // next to the actual calls to JDI methods to get/set the
-    // value in the debuggee.
-    protected Value jdiValue;
-
-    abstract Value getValue() throws InvocationException,
-                                     IncompatibleThreadStateException,
-                                     InvalidTypeException,
-                                     ClassNotLoadedException,
-                                     ParseException;
-
-    abstract void setValue0(Value value)
-                   throws ParseException, InvalidTypeException,
-                          ClassNotLoadedException;
-
-    abstract void invokeWith(List<Value> arguments) throws ParseException;
-
-    void setValue(Value value) throws ParseException {
-        try {
-            setValue0(value);
-        } catch (InvalidTypeException exc) {
-            throw new ParseException(
-                "Attempt to set value of incorrect type" +
-                exc);
-        } catch (ClassNotLoadedException exc) {
-            throw new ParseException(
-                "Attempt to set value before " + exc.className() + " was loaded" +
-                exc);
-        }
-    }
-
-    void setValue(LValue lval) throws ParseException {
-        setValue(lval.interiorGetValue());
-    }
-
-    LValue memberLValue(ExpressionParser.GetFrame frameGetter,
-                        String fieldName) throws ParseException {
-        try {
-            return memberLValue(fieldName, frameGetter.get().thread());
-        } catch (IncompatibleThreadStateException exc) {
-            throw new ParseException("Thread not suspended");
-        }
-    }
-
-    LValue memberLValue(String fieldName, ThreadReference thread) throws ParseException {
-
-        Value val = interiorGetValue();
-        if ((val instanceof ArrayReference) &&
-            "length".equals(fieldName)){
-            return new LValueArrayLength((ArrayReference)val);
-        }
-        return new LValueInstanceMember(val, fieldName, thread);
-    }
-
-    // Return the Value for this LValue that would be used to concatenate
-    // to a String.  IE, if it is an Object, call toString in the debuggee.
-    Value getMassagedValue(ExpressionParser.GetFrame frameGetter) throws ParseException {
-        Value vv = interiorGetValue();
-
-        // If vv is an ObjectReference, then we have to
-        // do the implicit call to toString().
-        if (vv instanceof ObjectReference &&
-            !(vv instanceof StringReference) &&
-            !(vv instanceof ArrayReference)) {
-            StackFrame frame;
-            try {
-                frame = frameGetter.get();
-            } catch (IncompatibleThreadStateException exc) {
-                throw new ParseException("Thread not suspended");
-            }
-
-            ThreadReference thread = frame.thread();
-            LValue toStringMember = memberLValue("toString", thread);
-            toStringMember.invokeWith(new ArrayList<Value>());
-            return toStringMember.interiorGetValue();
-        }
-        return vv;
-    }
-
-    Value interiorGetValue() throws ParseException {
-        Value value;
-        try {
-            value = getValue();
-        } catch (InvocationException e) {
-            throw new ParseException("Unable to complete expression. Exception " +
-                                     e.exception() + " thrown");
-        } catch (IncompatibleThreadStateException itse) {
-            throw new ParseException("Unable to complete expression. Thread " +
-                                     "not suspended for method invoke");
-        } catch (InvalidTypeException ite) {
-            throw new ParseException("Unable to complete expression. Method " +
-                                     "argument type mismatch");
-        } catch (ClassNotLoadedException tnle) {
-            throw new ParseException("Unable to complete expression. Method " +
-                                     "argument type " + tnle.className() +
-                                     " not yet loaded");
-        }
-        return value;
-    }
-
-    LValue arrayElementLValue(LValue lval) throws ParseException {
-        Value indexValue = lval.interiorGetValue();
-        int index;
-        if ( (indexValue instanceof IntegerValue) ||
-             (indexValue instanceof ShortValue) ||
-             (indexValue instanceof ByteValue) ||
-             (indexValue instanceof CharValue) ) {
-            index = ((PrimitiveValue)indexValue).intValue();
-        } else {
-            throw new ParseException("Array index must be a integer type");
-        }
-        return new LValueArrayElement(interiorGetValue(), index);
-    }
-
-   @Override
-    public String toString() {
-        try {
-            return interiorGetValue().toString();
-        } catch (ParseException e) {
-            return "<Parse Exception>";
-        }
-    }
-
-    static final int STATIC = 0;
-    static final int INSTANCE = 1;
-
-    static Field fieldByName(ReferenceType refType, String name, int kind) {
-        /*
-         * TO DO: Note that this currently fails to find superclass
-         * or implemented interface fields. This is due to a temporary
-         * limititation of RefType.fieldByName. Once that method is
-         * fixed, superclass fields will be found.
-         */
-        Field field = refType.fieldByName(name);
-        if (field != null) {
-            boolean isStatic = field.isStatic();
-            if (((kind == STATIC) && !isStatic) ||
-                ((kind == INSTANCE) && isStatic)) {
-                field = null;
-            }
-        }
-/***
-        System.err.println("fieldByName: " + refType.name() + " " +
-                                             name + " " +
-                                             kind + " " +
-                                             (field != null));
-***/
-        return field;
-    }
-
-    static List<Method> methodsByName(ReferenceType refType,
-                                      String name, int kind) {
-        List<Method> list = refType.methodsByName(name);
-        Iterator<Method> iter = list.iterator();
-        while (iter.hasNext()) {
-            Method method = iter.next();
-            boolean isStatic = method.isStatic();
-            if (((kind == STATIC) && !isStatic) ||
-                ((kind == INSTANCE) && isStatic)) {
-                iter.remove();
-            }
-        }
-        return list;
-    }
-
-    static List<String> primitiveTypeNames = new ArrayList<String>();
-    static {
-        primitiveTypeNames.add("boolean");
-        primitiveTypeNames.add("byte");
-        primitiveTypeNames.add("char");
-        primitiveTypeNames.add("short");
-        primitiveTypeNames.add("int");
-        primitiveTypeNames.add("long");
-        primitiveTypeNames.add("float");
-        primitiveTypeNames.add("double");
-    }
-
-
-    static final int SAME = 0;
-    static final int ASSIGNABLE = 1;
-    static final int DIFFERENT = 2;
-    /*
-     * Return SAME, DIFFERENT or ASSIGNABLE.
-     * SAME means each arg type is the same as type of the corr. arg.
-     * ASSIGNABLE means that not all the pairs are the same, but
-     * for those that aren't, at least the argType is assignable
-     * from the type of the argument value.
-     * DIFFERENT means that in at least one pair, the
-     * argType is not assignable from the type of the argument value.
-     * IE, one is an Apple and the other is an Orange.
-     */
-    static int argumentsMatch(List<Type> argTypes, List<Value> arguments) {
-        if (argTypes.size() != arguments.size()) {
-            return DIFFERENT;
-        }
-
-        Iterator<Type> typeIter = argTypes.iterator();
-        Iterator<Value> valIter = arguments.iterator();
-        int result = SAME;
-
-        // If any pair aren't the same, change the
-        // result to ASSIGNABLE.  If any pair aren't
-        // assignable, return DIFFERENT
-        while (typeIter.hasNext()) {
-            Type argType = typeIter.next();
-            Value value = valIter.next();
-            if (value == null) {
-                // Null values can be passed to any non-primitive argument
-                if (primitiveTypeNames.contains(argType.name())) {
-                    return DIFFERENT;
-                }
-                // Else, we will assume that a null value
-                // exactly matches an object type.
-            }
-            if (!value.type().equals(argType)) {
-                if (isAssignableTo(value.type(), argType)) {
-                    result = ASSIGNABLE;
-                } else {
-                    return DIFFERENT;
-                }
-            }
-        }
-        return result;
-    }
-
-
-    // These is...AssignableTo methods are based on similar code in the JDI
-    // implementations of ClassType, ArrayType, and InterfaceType
-
-    static boolean isComponentAssignable(Type fromType, Type toType) {
-        if (fromType instanceof PrimitiveType) {
-            // Assignment of primitive arrays requires identical
-            // component types.
-            return fromType.equals(toType);
-        }
-        if (toType instanceof PrimitiveType) {
-            return false;
-        }
-        // Assignment of object arrays requires availability
-        // of widening conversion of component types
-        return isAssignableTo(fromType, toType);
-    }
-
-    static boolean isArrayAssignableTo(ArrayType fromType, Type toType) {
-        if (toType instanceof ArrayType) {
-            try {
-                Type toComponentType = ((ArrayType)toType).componentType();
-                return isComponentAssignable(fromType.componentType(), toComponentType);
-            } catch (ClassNotLoadedException e) {
-                // One or both component types has not yet been
-                // loaded => can't assign
-                return false;
-            }
-        }
-        if (toType instanceof InterfaceType) {
-            // Only valid InterfaceType assignee is Cloneable
-            return toType.name().equals("java.lang.Cloneable");
-        }
-        // Only valid ClassType assignee is Object
-        return toType.name().equals("java.lang.Object");
-    }
-
-    static boolean isAssignableTo(Type fromType, Type toType) {
-        if (fromType.equals(toType)) {
-            return true;
-        }
-
-        // If one is boolean, so must be the other.
-        if (fromType instanceof BooleanType) {
-            if (toType instanceof BooleanType) {
-                return true;
-            }
-            return false;
-        }
-        if (toType instanceof BooleanType) {
-            return false;
-        }
-
-        // Other primitive types are intermixable only with each other.
-        if (fromType instanceof PrimitiveType) {
-            if (toType instanceof PrimitiveType) {
-                return true;
-            }
-            return false;
-        }
-        if (toType instanceof PrimitiveType) {
-            return false;
-        }
-
-        // neither one is primitive.
-        if (fromType instanceof ArrayType) {
-            return isArrayAssignableTo((ArrayType)fromType, toType);
-        }
-        List<InterfaceType> interfaces;
-        if (fromType instanceof ClassType) {
-            ClassType superclazz = ((ClassType)fromType).superclass();
-            if ((superclazz != null) && isAssignableTo(superclazz, toType)) {
-                return true;
-            }
-            interfaces = ((ClassType)fromType).interfaces();
-        } else {
-            // fromType must be an InterfaceType
-            interfaces = ((InterfaceType)fromType).superinterfaces();
-        }
-        for (InterfaceType interfaze : interfaces) {
-            if (isAssignableTo(interfaze, toType)) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    static Method resolveOverload(List<Method> overloads,
-                                  List<Value> arguments)
-                                       throws ParseException {
-
-        // If there is only one method to call, we'll just choose
-        // that without looking at the args.  If they aren't right
-        // the invoke will return a better error message than we
-        // could generate here.
-        if (overloads.size() == 1) {
-            return overloads.get(0);
-        }
-
-        // Resolving overloads is beyond the scope of this exercise.
-        // So, we will look for a method that matches exactly the
-        // types of the arguments.  If we can't find one, then
-        // if there is exactly one method whose param types are assignable
-        // from the arg types, we will use that.  Otherwise,
-        // it is an error.  We won't guess which of multiple possible
-        // methods to call. And, since casts aren't implemented,
-        // the user can't use them to pick a particular overload to call.
-        // IE, the user is out of luck in this case.
-        Method retVal = null;
-        int assignableCount = 0;
-        for (Method mm : overloads) {
-            List<Type> argTypes;
-            try {
-                argTypes = mm.argumentTypes();
-            } catch (ClassNotLoadedException ee) {
-                // This probably won't happen for the
-                // method that we are really supposed to
-                // call.
-                continue;
-            }
-            int compare = argumentsMatch(argTypes, arguments);
-            if (compare == SAME) {
-                return mm;
-            }
-            if (compare == DIFFERENT) {
-                continue;
-            }
-            // Else, it is assignable.  Remember it.
-            retVal = mm;
-            assignableCount++;
-        }
-
-        // At this point, we didn't find an exact match,
-        // but we found one for which the args are assignable.
-        //
-        if (retVal != null) {
-            if (assignableCount == 1) {
-                return retVal;
-            }
-            throw new ParseException("Arguments match multiple methods");
-        }
-        throw new ParseException("Arguments match no method");
-    }
-
-    private static class LValueLocal extends LValue {
-        final StackFrame frame;
-        final LocalVariable var;
-
-        LValueLocal(StackFrame frame, LocalVariable var) {
-            this.frame = frame;
-            this.var = var;
-        }
-
-      @Override
-        Value getValue() {
-            if (jdiValue == null) {
-                jdiValue = frame.getValue(var);
-            }
-            return jdiValue;
-        }
-
-      @Override
-        void setValue0(Value val) throws InvalidTypeException,
-                                         ClassNotLoadedException {
-            frame.setValue(var, val);
-            jdiValue = val;
-        }
-
-      @Override
-        void invokeWith(List<Value> arguments) throws ParseException {
-            throw new ParseException(var.name() + " is not a method");
-        }
-    }
-
-    private static class LValueInstanceMember extends LValue {
-        final ObjectReference obj;
-        final ThreadReference thread;
-        final Field matchingField;
-        final List<Method> overloads;
-        Method matchingMethod = null;
-        List<Value> methodArguments = null;
-
-        LValueInstanceMember(Value value,
-                            String memberName,
-                            ThreadReference thread) throws ParseException {
-            if (!(value instanceof ObjectReference)) {
-                throw new ParseException(
-                       "Cannot access field of primitive type: " + value);
-            }
-            this.obj = (ObjectReference)value;
-            this.thread = thread;
-            ReferenceType refType = obj.referenceType();
-            /*
-             * Can't tell yet whether this LValue will be accessed as a
-             * field or method, so we keep track of all the possibilities
-             */
-            matchingField = LValue.fieldByName(refType, memberName,
-                                               LValue.INSTANCE);
-            overloads = LValue.methodsByName(refType, memberName,
-                                              LValue.INSTANCE);
-            if ((matchingField == null) && overloads.size() == 0) {
-                throw new ParseException("No instance field or method with the name "
-                               + memberName + " in " + refType.name());
-            }
-        }
-
-      @Override
-        Value getValue() throws InvocationException, InvalidTypeException,
-                                ClassNotLoadedException, IncompatibleThreadStateException,
-                                ParseException {
-            if (jdiValue != null) {
-                return jdiValue;
-            }
-            if (matchingMethod == null) {
-                if (matchingField == null) {
-                    throw new ParseException("No such field in " + obj.referenceType().name());
-                }
-                return jdiValue = obj.getValue(matchingField);
-            } else {
-                return jdiValue = obj.invokeMethod(thread, matchingMethod, methodArguments, 0);
-            }
-        }
-
-        @Override
-        void setValue0(Value val) throws ParseException,
-                                         InvalidTypeException,
-                                        ClassNotLoadedException {
-            if (matchingMethod != null) {
-                throw new ParseException("Cannot assign to a method invocation");
-            }
-            obj.setValue(matchingField, val);
-            jdiValue = val;
-        }
-
-        @Override
-        void invokeWith(List<Value> arguments) throws ParseException {
-            if (matchingMethod != null) {
-                throw new ParseException("Invalid consecutive invocations");
-            }
-            methodArguments = arguments;
-            matchingMethod = LValue.resolveOverload(overloads, arguments);
-        }
-    }
-
-    private static class LValueStaticMember extends LValue {
-        final ReferenceType refType;
-        final ThreadReference thread;
-        final Field matchingField;
-        final List<Method> overloads;
-        Method matchingMethod = null;
-        List<Value> methodArguments = null;
-
-        LValueStaticMember(ReferenceType refType,
-                          String memberName,
-                          ThreadReference thread) throws ParseException {
-            this.refType = refType;
-            this.thread = thread;
-            /*
-             * Can't tell yet whether this LValue will be accessed as a
-             * field or method, so we keep track of all the possibilities
-             */
-            matchingField = LValue.fieldByName(refType, memberName,
-                                               LValue.STATIC);
-            overloads = LValue.methodsByName(refType, memberName,
-                                              LValue.STATIC);
-            if ((matchingField == null) && overloads.size() == 0) {
-                throw new ParseException("No static field or method with the name "
-                               + memberName + " in " + refType.name());
-            }
-        }
-
-        @Override
-        Value getValue() throws InvocationException, InvalidTypeException,
-                                ClassNotLoadedException, IncompatibleThreadStateException,
-                                ParseException {
-            if (jdiValue != null) {
-                return jdiValue;
-            }
-            if (matchingMethod == null) {
-                return jdiValue = refType.getValue(matchingField);
-            } else if (refType instanceof ClassType) {
-                ClassType clazz = (ClassType)refType;
-                return jdiValue = clazz.invokeMethod(thread, matchingMethod, methodArguments, 0);
-            } else {
-                throw new InvalidTypeException("Cannot invoke static method on " +
-                                         refType.name());
-            }
-        }
-
-        @Override
-        void setValue0(Value val)
-                           throws ParseException, InvalidTypeException,
-                                  ClassNotLoadedException {
-            if (matchingMethod != null) {
-                throw new ParseException("Cannot assign to a method invocation");
-            }
-            if (!(refType instanceof ClassType)) {
-                throw new ParseException(
-                       "Cannot set interface field: " + refType);
-            }
-            ((ClassType)refType).setValue(matchingField, val);
-            jdiValue = val;
-        }
-
-        @Override
-        void invokeWith(List<Value> arguments) throws ParseException {
-            if (matchingMethod != null) {
-                throw new ParseException("Invalid consecutive invocations");
-            }
-            methodArguments = arguments;
-            matchingMethod = LValue.resolveOverload(overloads, arguments);
-        }
-    }
-
-    private static class LValueArrayLength extends LValue {
-        /*
-         * Since one can code "int myLen = myArray.length;",
-         * one might expect that these JDI calls would get a Value
-         * object for the length of an array in the debugee:
-         *    Field xxx = ArrayType.fieldByName("length")
-         *    Value lenVal= ArrayReference.getValue(xxx)
-         *
-         * However, this doesn't work because the array length isn't
-         * really stored as a field, and can't be accessed as such
-         * via JDI.  Instead, the arrayRef.length() method has to be
-         * used.
-         */
-        final ArrayReference arrayRef;
-        LValueArrayLength (ArrayReference value) {
-            this.arrayRef = value;
-        }
-
-        @Override
-        Value getValue() {
-            if (jdiValue == null) {
-                jdiValue = arrayRef.virtualMachine().mirrorOf(arrayRef.length());
-            }
-            return jdiValue;
-        }
-
-        @Override
-        void setValue0(Value value) throws ParseException  {
-            throw new ParseException("Cannot set constant: " + value);
-        }
-
-        @Override
-        void invokeWith(List<Value> arguments) throws ParseException {
-            throw new ParseException("Array element is not a method");
-        }
-    }
-
-    private static class LValueArrayElement extends LValue {
-        final ArrayReference array;
-        final int index;
-
-        LValueArrayElement(Value value, int index) throws ParseException {
-            if (!(value instanceof ArrayReference)) {
-                throw new ParseException(
-                       "Must be array type: " + value);
-            }
-            this.array = (ArrayReference)value;
-            this.index = index;
-        }
-
-        @Override
-        Value getValue() {
-            if (jdiValue == null) {
-                jdiValue = array.getValue(index);
-            }
-            return jdiValue;
-        }
-
-        @Override
-        void setValue0(Value val) throws InvalidTypeException,
-                                         ClassNotLoadedException  {
-            array.setValue(index, val);
-            jdiValue = val;
-        }
-
-        @Override
-        void invokeWith(List<Value> arguments) throws ParseException {
-            throw new ParseException("Array element is not a method");
-        }
-    }
-
-    private static class LValueConstant extends LValue {
-        final Value value;
-
-        LValueConstant(Value value) {
-            this.value = value;
-        }
-
-        @Override
-        Value getValue() {
-            if (jdiValue == null) {
-                jdiValue = value;
-            }
-            return jdiValue;
-        }
-
-        @Override
-        void setValue0(Value val) throws ParseException {
-            throw new ParseException("Cannot set constant: " + value);
-        }
-
-        @Override
-        void invokeWith(List<Value> arguments) throws ParseException {
-            throw new ParseException("Constant is not a method");
-        }
-    }
-
-    static LValue make(VirtualMachine vm, boolean val) {
-        return new LValueConstant(vm.mirrorOf(val));
-    }
-
-    static LValue make(VirtualMachine vm, byte val) {
-        return new LValueConstant(vm.mirrorOf(val));
-    }
-
-    static LValue make(VirtualMachine vm, char val) {
-        return new LValueConstant(vm.mirrorOf(val));
-    }
-
-    static LValue make(VirtualMachine vm, short val) {
-        return new LValueConstant(vm.mirrorOf(val));
-    }
-
-    static LValue make(VirtualMachine vm, int val) {
-        return new LValueConstant(vm.mirrorOf(val));
-    }
-
-    static LValue make(VirtualMachine vm, long val) {
-        return new LValueConstant(vm.mirrorOf(val));
-    }
-
-    static LValue make(VirtualMachine vm, float val) {
-        return new LValueConstant(vm.mirrorOf(val));
-    }
-
-    static LValue make(VirtualMachine vm, double val) {
-        return new LValueConstant(vm.mirrorOf(val));
-    }
-
-    static LValue make(VirtualMachine vm, String val) throws ParseException {
-        return new LValueConstant(vm.mirrorOf(val));
-    }
-
-    static LValue makeBoolean(VirtualMachine vm, Token token) {
-        return make(vm, token.image.charAt(0) == 't');
-    }
-
-    static LValue makeCharacter(VirtualMachine vm, Token token) {
-        return make(vm, token.image.charAt(1));
-    }
-
-    static LValue makeFloat(VirtualMachine vm, Token token) {
-        return make(vm, Float.valueOf(token.image).floatValue());
-    }
-
-    static LValue makeDouble(VirtualMachine vm, Token token) {
-        return make(vm, Double.valueOf(token.image).doubleValue());
-    }
-
-    static LValue makeInteger(VirtualMachine vm, Token token) {
-        return make(vm, Integer.parseInt(token.image));
-    }
-
-    static LValue makeShort(VirtualMachine vm, Token token) {
-        return make(vm, Short.parseShort(token.image));
-    }
-
-    static LValue makeLong(VirtualMachine vm, Token token) {
-        return make(vm, Long.parseLong(token.image));
-    }
-
-    static LValue makeByte(VirtualMachine vm, Token token) {
-        return make(vm, Byte.parseByte(token.image));
-    }
-
-    static LValue makeString(VirtualMachine vm,
-                             Token token) throws ParseException {
-        int len = token.image.length();
-        return make(vm, token.image.substring(1,len-1));
-    }
-
-    static LValue makeNull(VirtualMachine vm,
-                           Token token) throws ParseException {
-        return new LValueConstant(null);
-    }
-
-    static LValue makeThisObject(VirtualMachine vm,
-                                 ExpressionParser.GetFrame frameGetter,
-                                 Token token) throws ParseException {
-        if (frameGetter == null) {
-            throw new ParseException("No current thread");
-        } else {
-            try {
-                StackFrame frame = frameGetter.get();
-                ObjectReference thisObject = frame.thisObject();
-
-                if (thisObject==null) {
-                        throw new ParseException(
-                            "No 'this'.  In native or static method");
-                } else {
-                        return new LValueConstant(thisObject);
-                }
-            } catch (IncompatibleThreadStateException exc) {
-                throw new ParseException("Thread not suspended");
-            }
-        }
-    }
-
-    static LValue makeNewObject(VirtualMachine vm,
-                                 ExpressionParser.GetFrame frameGetter,
-                                String className, List<Value> arguments) throws ParseException {
-        List<ReferenceType> classes = vm.classesByName(className);
-        if (classes.size() == 0) {
-            throw new ParseException("No class named: " + className);
-        }
-
-        if (classes.size() > 1) {
-            throw new ParseException("More than one class named: " +
-                                     className);
-        }
-        ReferenceType refType = classes.get(0);
-
-
-        if (!(refType instanceof ClassType)) {
-            throw new ParseException("Cannot create instance of interface " +
-                                     className);
-        }
-
-        ClassType classType = (ClassType)refType;
-        List<Method> methods = new ArrayList<Method>(classType.methods()); // writable
-        Iterator<Method> iter = methods.iterator();
-        while (iter.hasNext()) {
-            Method method = iter.next();
-            if (!method.isConstructor()) {
-                iter.remove();
-            }
-        }
-        Method constructor = LValue.resolveOverload(methods, arguments);
-
-        ObjectReference newObject;
-        try {
-            ThreadReference thread = frameGetter.get().thread();
-            newObject = classType.newInstance(thread, constructor, arguments, 0);
-        } catch (InvocationException ie) {
-            throw new ParseException("Exception in " + className + " constructor: " +
-                                     ie.exception().referenceType().name());
-        } catch (IncompatibleThreadStateException exc) {
-            throw new ParseException("Thread not suspended");
-        } catch (Exception e) {
-            /*
-             * TO DO: Better error handling
-             */
-            throw new ParseException("Unable to create " + className + " instance");
-        }
-        return new LValueConstant(newObject);
-    }
-
-    private static LValue nFields(LValue lval,
-                                  StringTokenizer izer,
-                                  ThreadReference thread)
-                                          throws ParseException {
-        if (!izer.hasMoreTokens()) {
-            return lval;
-        } else {
-            return nFields(lval.memberLValue(izer.nextToken(), thread), izer, thread);
-        }
-    }
-
-    static LValue makeName(VirtualMachine vm,
-                           ExpressionParser.GetFrame frameGetter,
-                           String name) throws ParseException {
-        StringTokenizer izer = new StringTokenizer(name, ".");
-        String first = izer.nextToken();
-        // check local variables
-        if (frameGetter != null) {
-            try {
-                StackFrame frame = frameGetter.get();
-                ThreadReference thread = frame.thread();
-                LocalVariable var;
-                try {
-                    var = frame.visibleVariableByName(first);
-                } catch (AbsentInformationException e) {
-                    var = null;
-                }
-                if (var != null) {
-                    return nFields(new LValueLocal(frame, var), izer, thread);
-                } else {
-                    ObjectReference thisObject = frame.thisObject();
-                    if (thisObject != null) {
-                        // check if it is a field of 'this'
-                        LValue thisLValue = new LValueConstant(thisObject);
-                        LValue fv;
-                        try {
-                            fv = thisLValue.memberLValue(first, thread);
-                        } catch (ParseException exc) {
-                            fv = null;
-                        }
-                        if (fv != null) {
-                            return nFields(fv, izer, thread);
-                        }
-                    }
-                }
-                // check for class name
-                while (izer.hasMoreTokens()) {
-                    List<ReferenceType> classes = vm.classesByName(first);
-                    if (classes.size() > 0) {
-                        if (classes.size() > 1) {
-                            throw new ParseException("More than one class named: " +
-                                                     first);
-                        } else {
-                            ReferenceType refType = classes.get(0);
-                            LValue lval = new LValueStaticMember(refType,
-                                                            izer.nextToken(), thread);
-                            return nFields(lval, izer, thread);
-                        }
-                    }
-                    first = first + '.' + izer.nextToken();
-                }
-            } catch (IncompatibleThreadStateException exc) {
-                throw new ParseException("Thread not suspended");
-            }
-        }
-        throw new ParseException("Name unknown: " + name);
-    }
-
-    static String stringValue(LValue lval, ExpressionParser.GetFrame frameGetter
-                              ) throws ParseException {
-        Value val = lval.getMassagedValue(frameGetter);
-        if (val == null) {
-            return "null";
-        }
-        if (val instanceof StringReference) {
-            return ((StringReference)val).value();
-        }
-        return val.toString();  // is this correct in all cases?
-    }
-
-    static LValue booleanOperation(VirtualMachine vm, Token token,
-                            LValue rightL,
-                            LValue leftL) throws ParseException {
-        String op = token.image;
-        Value right = rightL.interiorGetValue();
-        Value left = leftL.interiorGetValue();
-        if ( !(right instanceof PrimitiveValue) ||
-             !(left instanceof PrimitiveValue) ) {
-            if (op.equals("==")) {
-                return make(vm, right.equals(left));
-            } else if (op.equals("!=")) {
-                return make(vm, !right.equals(left));
-            } else {
-                throw new ParseException("Operands or '" + op +
-                                     "' must be primitive");
-            }
-        }
-        // can compare any numeric doubles
-        double rr = ((PrimitiveValue)right).doubleValue();
-        double ll = ((PrimitiveValue)left).doubleValue();
-        boolean res;
-        if (op.equals("<")) {
-            res = rr < ll;
-        } else if (op.equals(">")) {
-            res = rr > ll;
-        } else if (op.equals("<=")) {
-            res = rr <= ll;
-        } else if (op.equals(">=")) {
-            res = rr >= ll;
-        } else if (op.equals("==")) {
-            res = rr == ll;
-        } else if (op.equals("!=")) {
-            res = rr != ll;
-        } else {
-            throw new ParseException("Unknown operation: " + op);
-        }
-        return make(vm, res);
-    }
-
-    static LValue operation(VirtualMachine vm, Token token,
-                            LValue rightL, LValue leftL,
-                            ExpressionParser.GetFrame frameGetter
-                            ) throws ParseException {
-        String op = token.image;
-        Value right = rightL.interiorGetValue();
-        Value left = leftL.interiorGetValue();
-        if ((right instanceof StringReference) ||
-                              (left instanceof StringReference)) {
-            if (op.equals("+")) {
-                // If one is an ObjectRef, we will need to invoke
-                // toString on it, so we need the thread.
-                return make(vm, stringValue(rightL, frameGetter) +
-                            stringValue(leftL, frameGetter));
-            }
-        }
-        if ((right instanceof ObjectReference) ||
-                              (left instanceof ObjectReference)) {
-            if (op.equals("==")) {
-                return make(vm, right.equals(left));
-            } else if (op.equals("!=")) {
-                return make(vm, !right.equals(left));
-            } else {
-                throw new ParseException("Invalid operation '" +
-                                         op + "' on an Object");
-            }
-        }
-        if ((right instanceof BooleanValue) ||
-                              (left instanceof BooleanValue)) {
-            throw new ParseException("Invalid operation '" +
-                                     op + "' on a Boolean");
-        }
-        // from here on, we know it is a integer kind of type
-        PrimitiveValue primRight = (PrimitiveValue)right;
-        PrimitiveValue primLeft = (PrimitiveValue)left;
-        if ((primRight instanceof DoubleValue) ||
-                              (primLeft instanceof DoubleValue)) {
-            double rr = primRight.doubleValue();
-            double ll = primLeft.doubleValue();
-            double res;
-            if (op.equals("+")) {
-                res = rr + ll;
-            } else if (op.equals("-")) {
-                res = rr - ll;
-            } else if (op.equals("*")) {
-                res = rr * ll;
-            } else if (op.equals("/")) {
-                res = rr / ll;
-            } else {
-                throw new ParseException("Unknown operation: " + op);
-            }
-            return make(vm, res);
-        }
-        if ((primRight instanceof FloatValue) ||
-                              (primLeft instanceof FloatValue)) {
-            float rr = primRight.floatValue();
-            float ll = primLeft.floatValue();
-            float res;
-            if (op.equals("+")) {
-                res = rr + ll;
-            } else if (op.equals("-")) {
-                res = rr - ll;
-            } else if (op.equals("*")) {
-                res = rr * ll;
-            } else if (op.equals("/")) {
-                res = rr / ll;
-            } else {
-                throw new ParseException("Unknown operation: " + op);
-            }
-            return make(vm, res);
-        }
-        if ((primRight instanceof LongValue) ||
-                              (primLeft instanceof LongValue)) {
-            long rr = primRight.longValue();
-            long ll = primLeft.longValue();
-            long res;
-            if (op.equals("+")) {
-                res = rr + ll;
-            } else if (op.equals("-")) {
-                res = rr - ll;
-            } else if (op.equals("*")) {
-                res = rr * ll;
-            } else if (op.equals("/")) {
-                res = rr / ll;
-            } else {
-                throw new ParseException("Unknown operation: " + op);
-            }
-            return make(vm, res);
-        } else {
-            int rr = primRight.intValue();
-            int ll = primLeft.intValue();
-            int res;
-            if (op.equals("+")) {
-                res = rr + ll;
-            } else if (op.equals("-")) {
-                res = rr - ll;
-            } else if (op.equals("*")) {
-                res = rr * ll;
-            } else if (op.equals("/")) {
-                res = rr / ll;
-            } else {
-                throw new ParseException("Unknown operation: " + op);
-            }
-            return make(vm, res);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/expr/ParseException.java b/ojluni/src/main/java/com/sun/tools/example/debug/expr/ParseException.java
deleted file mode 100755
index 1f5c30b..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/expr/ParseException.java
+++ /dev/null
@@ -1,230 +0,0 @@
-/*
- * Copyright (c) 1999, 2001, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-/* Generated By:JavaCC: Do not edit this line. ParseException.java Version 0.7pre6 */
-package com.sun.tools.example.debug.expr;
-
-/**
- * This exception is thrown when parse errors are encountered.
- * You can explicitly create objects of this exception type by
- * calling the method generateParseException in the generated
- * parser.
- *
- * You can modify this class to customize your error reporting
- * mechanisms so long as you retain the public fields.
- */
-public class ParseException extends Exception {
-
-  private static final long serialVersionUID = 7978489144303647901L;
-
-  /**
-   * This constructor is used by the method "generateParseException"
-   * in the generated parser.  Calling this constructor generates
-   * a new object of this type with the fields "currentToken",
-   * "expectedTokenSequences", and "tokenImage" set.  The boolean
-   * flag "specialConstructor" is also set to true to indicate that
-   * this constructor was used to create this object.
-   * This constructor calls its super class with the empty string
-   * to force the "toString" method of parent class "Throwable" to
-   * print the error message in the form:
-   *     ParseException: <result of getMessage>
-   */
-  public ParseException(Token currentTokenVal,
-                        int[][] expectedTokenSequencesVal,
-                        String[] tokenImageVal
-                       )
-  {
-    super("");
-    specialConstructor = true;
-    currentToken = currentTokenVal;
-    expectedTokenSequences = expectedTokenSequencesVal;
-    tokenImage = tokenImageVal;
-  }
-
-  /**
-   * The following constructors are for use by you for whatever
-   * purpose you can think of.  Constructing the exception in this
-   * manner makes the exception behave in the normal way - i.e., as
-   * documented in the class "Throwable".  The fields "errorToken",
-   * "expectedTokenSequences", and "tokenImage" do not contain
-   * relevant information.  The JavaCC generated code does not use
-   * these constructors.
-   */
-
-  public ParseException() {
-    super();
-    specialConstructor = false;
-  }
-
-  public ParseException(String message) {
-    super(message);
-    specialConstructor = false;
-  }
-
-  /**
-   * This variable determines which constructor was used to create
-   * this object and thereby affects the semantics of the
-   * "getMessage" method (see below).
-   */
-  protected boolean specialConstructor;
-
-  /**
-   * This is the last token that has been consumed successfully.  If
-   * this object has been created due to a parse error, the token
-   * followng this token will (therefore) be the first error token.
-   */
-  public Token currentToken;
-
-  /**
-   * Each entry in this array is an array of integers.  Each array
-   * of integers represents a sequence of tokens (by their ordinal
-   * values) that is expected at this point of the parse.
-   */
-  public int[][] expectedTokenSequences;
-
-  /**
-   * This is a reference to the "tokenImage" array of the generated
-   * parser within which the parse error occurred.  This array is
-   * defined in the generated ...Constants interface.
-   */
-  public String[] tokenImage;
-
-  /**
-   * This method has the standard behavior when this object has been
-   * created using the standard constructors.  Otherwise, it uses
-   * "currentToken" and "expectedTokenSequences" to generate a parse
-   * error message and returns it.  If this object has been created
-   * due to a parse error, and you do not catch it (it gets thrown
-   * from the parser), then this method is called during the printing
-   * of the final stack trace, and hence the correct error message
-   * gets displayed.
-   */
-  @Override
-  public String getMessage() {
-    if (!specialConstructor) {
-      return super.getMessage();
-    }
-    String expected = "";
-    int maxSize = 0;
-    for (int[] expectedTokenSequence : expectedTokenSequences) {
-      if (maxSize < expectedTokenSequence.length) {
-        maxSize = expectedTokenSequence.length;
-      }
-      for (int j = 0; j < expectedTokenSequence.length; j++) {
-        expected += tokenImage[expectedTokenSequence[j]] + " ";
-      }
-      if (expectedTokenSequence[expectedTokenSequence.length - 1] != 0) {
-        expected += "...";
-      }
-      expected += eol + "    ";
-    }
-    String retval = "Encountered \"";
-    Token tok = currentToken.next;
-    for (int i = 0; i < maxSize; i++) {
-      if (i != 0) {
-         retval += " ";
-      }
-      if (tok.kind == 0) {
-        retval += tokenImage[0];
-        break;
-      }
-      retval += add_escapes(tok.image);
-      tok = tok.next;
-    }
-    retval += "\" at line " + currentToken.next.beginLine + ", column " + currentToken.next.beginColumn + "." + eol;
-    if (expectedTokenSequences.length == 1) {
-      retval += "Was expecting:" + eol + "    ";
-    } else {
-      retval += "Was expecting one of:" + eol + "    ";
-    }
-    retval += expected;
-    return retval;
-  }
-
-  /**
-   * The end of line string for this machine.
-   */
-  protected String eol = System.getProperty("line.separator", "\n");
-
-  /**
-   * Used to convert raw characters to their escaped version
-   * when these raw version cannot be used as part of an ASCII
-   * string literal.
-   */
-  protected String add_escapes(String str) {
-      StringBuffer retval = new StringBuffer();
-      char ch;
-      for (int i = 0; i < str.length(); i++) {
-        switch (str.charAt(i))
-        {
-           case 0 :
-              continue;
-           case '\b':
-              retval.append("\\b");
-              continue;
-           case '\t':
-              retval.append("\\t");
-              continue;
-           case '\n':
-              retval.append("\\n");
-              continue;
-           case '\f':
-              retval.append("\\f");
-              continue;
-           case '\r':
-              retval.append("\\r");
-              continue;
-           case '\"':
-              retval.append("\\\"");
-              continue;
-           case '\'':
-              retval.append("\\\'");
-              continue;
-           case '\\':
-              retval.append("\\\\");
-              continue;
-           default:
-              if ((ch = str.charAt(i)) < 0x20 || ch > 0x7e) {
-                 String s = "0000" + Integer.toString(ch, 16);
-                 retval.append("\\u" + s.substring(s.length() - 4, s.length()));
-              } else {
-                 retval.append(ch);
-              }
-              continue;
-        }
-      }
-      return retval.toString();
-   }
-
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/expr/Token.java b/ojluni/src/main/java/com/sun/tools/example/debug/expr/Token.java
deleted file mode 100755
index 1b6a63d..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/expr/Token.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Copyright (c) 1999, 2001, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-/* Generated By:JavaCC: Do not edit this line. Token.java Version 0.7pre3 */
-package com.sun.tools.example.debug.expr;
-
-/**
- * Describes the input token stream.
- */
-
-public class Token {
-
-  /**
-   * An integer that describes the kind of this token.  This numbering
-   * system is determined by JavaCCParser, and a table of these numbers is
-   * stored in the file ...Constants.java.
-   */
-  public int kind;
-
-  /**
-   * beginLine and beginColumn describe the position of the first character
-   * of this token; endLine and endColumn describe the position of the
-   * last character of this token.
-   */
-  public int beginLine, beginColumn, endLine, endColumn;
-
-  /**
-   * The string image of the token.
-   */
-  public String image;
-
-  /**
-   * A reference to the next regular (non-special) token from the input
-   * stream.  If this is the last token from the input stream, or if the
-   * token manager has not read tokens beyond this one, this field is
-   * set to null.  This is true only if this token is also a regular
-   * token.  Otherwise, see below for a description of the contents of
-   * this field.
-   */
-  public Token next;
-
-  /**
-   * This field is used to access special tokens that occur prior to this
-   * token, but after the immediately preceding regular (non-special) token.
-   * If there are no such special tokens, this field is set to null.
-   * When there are more than one such special token, this field refers
-   * to the last of these special tokens, which in turn refers to the next
-   * previous special token through its specialToken field, and so on
-   * until the first special token (whose specialToken field is null).
-   * The next fields of special tokens refer to other special tokens that
-   * immediately follow it (without an intervening regular token).  If there
-   * is no such token, this field is null.
-   */
-  public Token specialToken;
-
-  /**
-   * Returns the image.
-   */
-  @Override
-  public final String toString()
-  {
-     return image;
-  }
-
-  /**
-   * Returns a new Token object, by default. However, if you want, you
-   * can create and return subclass objects based on the value of ofKind.
-   * Simply add the cases to the switch for all those special cases.
-   * For example, if you have a subclass of Token called IDToken that
-   * you want to create if ofKind is ID, simlpy add something like :
-   *
-   *    case MyParserConstants.ID : return new IDToken();
-   *
-   * to the following switch statement. Then you can cast matchedToken
-   * variable to the appropriate type and use it in your lexical actions.
-   */
-  public static final Token newToken(int ofKind)
-  {
-     switch(ofKind)
-     {
-       default : return new Token();
-     }
-  }
-
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/expr/TokenMgrError.java b/ojluni/src/main/java/com/sun/tools/example/debug/expr/TokenMgrError.java
deleted file mode 100755
index fc84002..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/expr/TokenMgrError.java
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
- * Copyright (c) 1999, 2001, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-/* Generated By:JavaCC: Do not edit this line. TokenMgrError.java Version 0.7pre2 */
-package com.sun.tools.example.debug.expr;
-
-public class TokenMgrError extends Error
-{
-   /*
-    * Ordinals for various reasons why an Error of this type can be thrown.
-    */
-
-    private static final long serialVersionUID = -6236440836177601522L;
-
-   /**
-    * Lexical error occured.
-    */
-   static final int LEXICAL_ERROR = 0;
-
-   /**
-    * An attempt wass made to create a second instance of a static token manager.
-    */
-   static final int STATIC_LEXER_ERROR = 1;
-
-   /**
-    * Tried to change to an invalid lexical state.
-    */
-   static final int INVALID_LEXICAL_STATE = 2;
-
-   /**
-    * Detected (and bailed out of) an infinite loop in the token manager.
-    */
-   static final int LOOP_DETECTED = 3;
-
-   /**
-    * Indicates the reason why the exception is thrown. It will have
-    * one of the above 4 values.
-    */
-   int errorCode;
-
-   /**
-    * Replaces unprintable characters by their espaced (or unicode escaped)
-    * equivalents in the given string
-    */
-   protected static final String addEscapes(String str) {
-      StringBuffer retval = new StringBuffer();
-      char ch;
-      for (int i = 0; i < str.length(); i++) {
-        switch (str.charAt(i))
-        {
-           case 0 :
-              continue;
-           case '\b':
-              retval.append("\\b");
-              continue;
-           case '\t':
-              retval.append("\\t");
-              continue;
-           case '\n':
-              retval.append("\\n");
-              continue;
-           case '\f':
-              retval.append("\\f");
-              continue;
-           case '\r':
-              retval.append("\\r");
-              continue;
-           case '\"':
-              retval.append("\\\"");
-              continue;
-           case '\'':
-              retval.append("\\\'");
-              continue;
-           case '\\':
-              retval.append("\\\\");
-              continue;
-           default:
-              if ((ch = str.charAt(i)) < 0x20 || ch > 0x7e) {
-                 String s = "0000" + Integer.toString(ch, 16);
-                 retval.append("\\u" + s.substring(s.length() - 4, s.length()));
-              } else {
-                 retval.append(ch);
-              }
-              continue;
-        }
-      }
-      return retval.toString();
-   }
-
-   /**
-    * Returns a detailed message for the Error when it is thrown by the
-    * token manager to indicate a lexical error.
-    * Parameters :
-    *    EOFSeen     : indicates if EOF caused the lexicl error
-    *    curLexState : lexical state in which this error occured
-    *    errorLine   : line number when the error occured
-    *    errorColumn : column number when the error occured
-    *    errorAfter  : prefix that was seen before this error occured
-    *    curchar     : the offending character
-    * Note: You can customize the lexical error message by modifying this method.
-    */
-   private static final String LexicalError(boolean EOFSeen, int lexState, int errorLine, int errorColumn, String errorAfter, char curChar) {
-      return("Lexical error at line " +
-           errorLine + ", column " +
-           errorColumn + ".  Encountered: " +
-           (EOFSeen ? "<EOF> " : ("\"" + addEscapes(String.valueOf(curChar)) + "\"") + " (" + (int)curChar + "), ") +
-           "after : \"" + addEscapes(errorAfter) + "\"");
-   }
-
-   /**
-    * You can also modify the body of this method to customize your error messages.
-    * For example, cases like LOOP_DETECTED and INVALID_LEXICAL_STATE are not
-    * of end-users concern, so you can return something like :
-    *
-    *     "Internal Error : Please file a bug report .... "
-    *
-    * from this method for such cases in the release version of your parser.
-    */
-   @Override
-   public String getMessage() {
-      return super.getMessage();
-   }
-
-   /*
-    * Constructors of various flavors follow.
-    */
-
-   public TokenMgrError() {
-   }
-
-   public TokenMgrError(String message, int reason) {
-      super(message);
-      errorCode = reason;
-   }
-
-   public TokenMgrError(boolean EOFSeen, int lexState, int errorLine, int errorColumn, String errorAfter, char curChar, int reason) {
-      this(LexicalError(EOFSeen, lexState, errorLine, errorColumn, errorAfter, curChar), reason);
-   }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/gui/ApplicationTool.java b/ojluni/src/main/java/com/sun/tools/example/debug/gui/ApplicationTool.java
deleted file mode 100755
index 4157f98..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/gui/ApplicationTool.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Copyright (c) 1998, 1999, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.gui;
-
-import javax.swing.*;
-import java.awt.*;
-import java.awt.event.*;
-
-import com.sun.tools.example.debug.bdi.*;
-
-public class ApplicationTool extends JPanel {
-
-    private static final long serialVersionUID = 310966063293205714L;
-
-    private ExecutionManager runtime;
-
-    private TypeScript script;
-
-    private static final String PROMPT = "Input:";
-
-    public ApplicationTool(Environment env) {
-
-        super(new BorderLayout());
-
-        this.runtime = env.getExecutionManager();
-
-        this.script = new TypeScript(PROMPT, false); // No implicit echo.
-        this.add(script);
-
-        script.addActionListener(new ActionListener() {
-            @Override
-            public void actionPerformed(ActionEvent e) {
-                runtime.sendLineToApplication(script.readln());
-            }
-        });
-
-        runtime.addApplicationEchoListener(new TypeScriptOutputListener(script));
-        runtime.addApplicationOutputListener(new TypeScriptOutputListener(script));
-        runtime.addApplicationErrorListener(new TypeScriptOutputListener(script));
-
-        //### should clean up on exit!
-
-    }
-
-    /******
-    public void setFont(Font f) {
-        script.setFont(f);
-    }
-    ******/
-
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/gui/ClassManager.java b/ojluni/src/main/java/com/sun/tools/example/debug/gui/ClassManager.java
deleted file mode 100755
index f5561d1..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/gui/ClassManager.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright (c) 1998, 1999, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.gui;
-
-public class ClassManager {
-
-    // This class is provided primarily for symmetry with
-    // SourceManager.  Currently, it does very little.
-    // If we add facilities in the future that require that
-    // class files be read outside of the VM, for example, to
-    // provide a disassembled view of a class for bytecode-level
-    // debugging, the required class file management will be done
-    // here.
-
-    private SearchPath classPath;
-
-    public ClassManager(Environment env) {
-        this.classPath = new SearchPath("");
-    }
-
-    public ClassManager(SearchPath classPath) {
-        this.classPath = classPath;
-    }
-
-    /*
-     * Set path for access to class files.
-     */
-
-    public void setClassPath(SearchPath sp) {
-        classPath = sp;
-    }
-
-    /*
-     * Get path for access to class files.
-     */
-
-    public SearchPath getClassPath() {
-        return classPath;
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/gui/ClassTreeTool.java b/ojluni/src/main/java/com/sun/tools/example/debug/gui/ClassTreeTool.java
deleted file mode 100755
index bc4a766..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/gui/ClassTreeTool.java
+++ /dev/null
@@ -1,287 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.gui;
-
-import java.util.*;
-
-import javax.swing.*;
-import javax.swing.tree.*;
-import java.awt.*;
-import java.awt.event.*;
-
-import com.sun.jdi.*;
-import com.sun.tools.example.debug.event.*;
-import com.sun.tools.example.debug.bdi.*;
-
-public class ClassTreeTool extends JPanel {
-
-    private static final long serialVersionUID = 526178912591739259L;
-
-    private Environment env;
-
-    private ExecutionManager runtime;
-    private SourceManager sourceManager;
-    private ClassManager classManager;
-
-    private JTree tree;
-    private DefaultTreeModel treeModel;
-    private ClassTreeNode root;
-//    private SearchPath sourcePath;
-
-    private CommandInterpreter interpreter;
-
-    private static String HEADING = "CLASSES";
-
-    public ClassTreeTool(Environment env) {
-
-        super(new BorderLayout());
-
-        this.env = env;
-        this.runtime = env.getExecutionManager();
-        this.sourceManager = env.getSourceManager();
-
-        this.interpreter = new CommandInterpreter(env);
-
-        root = createClassTree(HEADING);
-        treeModel = new DefaultTreeModel(root);
-
-        // Create a tree that allows one selection at a time.
-
-        tree = new JTree(treeModel);
-        tree.setSelectionModel(new SingleLeafTreeSelectionModel());
-
-        /******
-        // Listen for when the selection changes.
-        tree.addTreeSelectionListener(new TreeSelectionListener() {
-            public void valueChanged(TreeSelectionEvent e) {
-                ClassTreeNode node = (ClassTreeNode)
-                    (e.getPath().getLastPathComponent());
-                if (node != null) {
-                    interpreter.executeCommand("view " + node.getReferenceTypeName());
-                }
-            }
-        });
-        ******/
-
-        MouseListener ml = new MouseAdapter() {
-            @Override
-            public void mouseClicked(MouseEvent e) {
-                int selRow = tree.getRowForLocation(e.getX(), e.getY());
-                TreePath selPath = tree.getPathForLocation(e.getX(), e.getY());
-                if(selRow != -1) {
-                    if(e.getClickCount() == 1) {
-                        ClassTreeNode node =
-                            (ClassTreeNode)selPath.getLastPathComponent();
-                        // If user clicks on leaf, select it, and issue 'view' command.
-                        if (node.isLeaf()) {
-                            tree.setSelectionPath(selPath);
-                            interpreter.executeCommand("view " + node.getReferenceTypeName());
-                        }
-                    }
-                }
-            }
-        };
-        tree.addMouseListener(ml);
-
-        JScrollPane treeView = new JScrollPane(tree);
-        add(treeView);
-
-        // Create listener.
-        ClassTreeToolListener listener = new ClassTreeToolListener();
-        runtime.addJDIListener(listener);
-        runtime.addSessionListener(listener);
-
-        //### remove listeners on exit!
-    }
-
-    private class ClassTreeToolListener extends JDIAdapter
-                       implements JDIListener, SessionListener {
-
-        // SessionListener
-
-        @Override
-        public void sessionStart(EventObject e) {
-            // Get system classes and any others loaded before attaching.
-            try {
-                for (ReferenceType type : runtime.allClasses()) {
-                    root.addClass(type);
-                }
-            } catch (VMDisconnectedException ee) {
-                // VM terminated unexpectedly.
-            } catch (NoSessionException ee) {
-                // Ignore.  Should not happen.
-            }
-        }
-
-        @Override
-        public void sessionInterrupt(EventObject e) {}
-        @Override
-        public void sessionContinue(EventObject e) {}
-
-        // JDIListener
-
-        @Override
-        public void classPrepare(ClassPrepareEventSet e) {
-            root.addClass(e.getReferenceType());
-        }
-
-        @Override
-        public void classUnload(ClassUnloadEventSet e) {
-            root.removeClass(e.getClassName());
-        }
-
-        @Override
-        public void vmDisconnect(VMDisconnectEventSet e) {
-            // Clear contents of this view.
-            root = createClassTree(HEADING);
-            treeModel = new DefaultTreeModel(root);
-            tree.setModel(treeModel);
-        }
-    }
-
-    ClassTreeNode createClassTree(String label) {
-        return new ClassTreeNode(label, null);
-    }
-
-    class ClassTreeNode extends DefaultMutableTreeNode {
-
-        private String name;
-        private ReferenceType refTy;  // null for package
-
-        ClassTreeNode(String name, ReferenceType refTy) {
-            this.name = name;
-            this.refTy = refTy;
-        }
-
-        @Override
-        public String toString() {
-            return name;
-        }
-
-        public ReferenceType getReferenceType() {
-            return refTy;
-        }
-
-        public String getReferenceTypeName() {
-            return refTy.name();
-        }
-
-        private boolean isPackage() {
-            return (refTy == null);
-        }
-
-        @Override
-        public boolean isLeaf() {
-            return !isPackage();
-        }
-
-        public void addClass(ReferenceType refTy) {
-            addClass(refTy.name(), refTy);
-        }
-
-        private void addClass(String className, ReferenceType refTy) {
-            if (className.equals("")) {
-                return;
-            }
-            int pos = className.indexOf('.');
-            if (pos < 0) {
-                insertNode(className, refTy);
-            } else {
-                String head = className.substring(0, pos);
-                String tail = className.substring(pos + 1);
-                ClassTreeNode child = insertNode(head, null);
-                child.addClass(tail, refTy);
-            }
-        }
-
-        private ClassTreeNode insertNode(String name, ReferenceType refTy) {
-            for (int i = 0; i < getChildCount(); i++) {
-                ClassTreeNode child = (ClassTreeNode)getChildAt(i);
-                int cmp = name.compareTo(child.toString());
-                if (cmp == 0) {
-                    // like-named node already exists
-                    return child;
-                } else if (cmp < 0) {
-                    // insert new node before the child
-                    ClassTreeNode newChild = new ClassTreeNode(name, refTy);
-                    treeModel.insertNodeInto(newChild, this, i);
-                    return newChild;
-                }
-            }
-            // insert new node after last child
-            ClassTreeNode newChild = new ClassTreeNode(name, refTy);
-            treeModel.insertNodeInto(newChild, this, getChildCount());
-            return newChild;
-        }
-
-        public void removeClass(String className) {
-            if (className.equals("")) {
-                return;
-            }
-            int pos = className.indexOf('.');
-            if (pos < 0) {
-                ClassTreeNode child = findNode(className);
-                if (!isPackage()) {
-                    treeModel.removeNodeFromParent(child);
-                }
-            } else {
-                String head = className.substring(0, pos);
-                String tail = className.substring(pos + 1);
-                ClassTreeNode child = findNode(head);
-                child.removeClass(tail);
-                if (isPackage() && child.getChildCount() < 1) {
-                    // Prune non-leaf nodes with no children.
-                    treeModel.removeNodeFromParent(child);
-                }
-            }
-        }
-
-        private ClassTreeNode findNode(String name) {
-            for (int i = 0; i < getChildCount(); i++) {
-                ClassTreeNode child = (ClassTreeNode)getChildAt(i);
-                int cmp = name.compareTo(child.toString());
-                if (cmp == 0) {
-                    return child;
-                } else if (cmp > 0) {
-                    // not found, since children are sorted
-                    return null;
-                }
-            }
-            return null;
-        }
-
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/gui/CommandInterpreter.java b/ojluni/src/main/java/com/sun/tools/example/debug/gui/CommandInterpreter.java
deleted file mode 100755
index af1b9eb..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/gui/CommandInterpreter.java
+++ /dev/null
@@ -1,1468 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.gui;
-
-import java.io.*;
-import java.util.*;
-
-import com.sun.jdi.*;
-import com.sun.tools.example.debug.bdi.*;
-
-public class CommandInterpreter {
-
-    boolean echo;
-
-    Environment env;
-
-    private ContextManager context;
-    private ExecutionManager runtime;
-    private ClassManager classManager;
-    private SourceManager sourceManager;
-
-    private OutputSink out; //### Hack!  Should be local in each method used.
-    private String lastCommand = "help";
-
-    public CommandInterpreter(Environment env) {
-        this(env, true);
-    }
-
-    public CommandInterpreter(Environment env, boolean echo) {
-        this.env = env;
-        this.echo = echo;
-        this.runtime = env.getExecutionManager();
-        this.context = env.getContextManager();
-        this.classManager = env.getClassManager();
-        this.sourceManager = env.getSourceManager();
-    }
-
-    private ThreadReference[] threads = null;
-
-    /*
-     * The numbering of threads is relative to the current set of threads,
-     * and may be affected by the creation and termination of new threads.
-     * Commands issued using such thread ids will only give reliable behavior
-     * relative to what was shown earlier in 'list' commands if the VM is interrupted.
-     * We need a better scheme.
-     */
-
-    private ThreadReference[] threads() throws NoSessionException {
-        if (threads == null) {
-            ThreadIterator ti = new ThreadIterator(getDefaultThreadGroup());
-            List<ThreadReference> tlist = new ArrayList<ThreadReference>();
-            while (ti.hasNext()) {
-                tlist.add(ti.nextThread());
-            }
-            threads = tlist.toArray(new ThreadReference[tlist.size()]);
-        }
-        return threads;
-    }
-
-    private ThreadReference findThread(String idToken) throws NoSessionException {
-        String id;
-        ThreadReference thread = null;
-        if (idToken.startsWith("t@")) {
-            id = idToken.substring(2);
-        } else {
-            id = idToken;
-        }
-        try {
-            ThreadReference[] threads = threads();
-            long threadID = Long.parseLong(id, 16);
-            for (ThreadReference thread2 : threads) {
-                if (thread2.uniqueID() == threadID) {
-                    thread = thread2;
-                    break;
-                }
-            }
-            if (thread == null) {
-                //env.failure("No thread for id \"" + idToken + "\"");
-                env.failure("\"" + idToken + "\" is not a valid thread id.");
-            }
-        } catch (NumberFormatException e) {
-            env.error("Thread id \"" + idToken + "\" is ill-formed.");
-            thread = null;
-        }
-        return thread;
-    }
-
-    private ThreadIterator allThreads() throws NoSessionException {
-        threads = null;
-        //### Why not use runtime.allThreads().iterator() ?
-        return new ThreadIterator(runtime.topLevelThreadGroups());
-    }
-
-    private ThreadIterator currentThreadGroupThreads() throws NoSessionException {
-        threads = null;
-        return new ThreadIterator(getDefaultThreadGroup());
-    }
-
-    private ThreadGroupIterator allThreadGroups() throws NoSessionException {
-        threads = null;
-        return new ThreadGroupIterator(runtime.topLevelThreadGroups());
-    }
-
-    private ThreadGroupReference defaultThreadGroup;
-
-    private ThreadGroupReference getDefaultThreadGroup() throws NoSessionException {
-        if (defaultThreadGroup == null) {
-            defaultThreadGroup = runtime.systemThreadGroup();
-        }
-        return defaultThreadGroup;
-    }
-
-    private void setDefaultThreadGroup(ThreadGroupReference tg) {
-        defaultThreadGroup = tg;
-    }
-
-    /*
-     * Command handlers.
-     */
-
-    // Command: classes
-
-    private void commandClasses() throws NoSessionException {
-        OutputSink out = env.getOutputSink();
-        //out.println("** classes list **");
-        for (ReferenceType refType : runtime.allClasses()) {
-            out.println(refType.name());
-        }
-        out.show();
-    }
-
-
-    // Command: methods
-
-    private void commandMethods(StringTokenizer t) throws NoSessionException {
-        if (!t.hasMoreTokens()) {
-            env.error("No class specified.");
-            return;
-        }
-        String idClass = t.nextToken();
-        ReferenceType cls = findClass(idClass);
-        if (cls != null) {
-            List<Method> methods = cls.allMethods();
-            OutputSink out = env.getOutputSink();
-            for (int i = 0; i < methods.size(); i++) {
-                Method method = methods.get(i);
-                out.print(method.declaringType().name() + " " +
-                            method.name() + "(");
-                Iterator<String> it = method.argumentTypeNames().iterator();
-                if (it.hasNext()) {
-                    while (true) {
-                        out.print(it.next());
-                        if (!it.hasNext()) {
-                            break;
-                        }
-                        out.print(", ");
-                    }
-                }
-                out.println(")");
-            }
-            out.show();
-        } else {
-            //### Should validate class name syntax.
-            env.failure("\"" + idClass + "\" is not a valid id or class name.");
-        }
-    }
-
-    private ReferenceType findClass(String pattern) throws NoSessionException {
-        List<ReferenceType> results = runtime.findClassesMatchingPattern(pattern);
-        if (results.size() > 0) {
-            //### Should handle multiple results sensibly.
-            return results.get(0);
-        }
-        return null;
-    }
-
-    // Command: threads
-
-    private void commandThreads(StringTokenizer t) throws NoSessionException {
-        if (!t.hasMoreTokens()) {
-            OutputSink out = env.getOutputSink();
-            printThreadGroup(out, getDefaultThreadGroup(), 0);
-            out.show();
-            return;
-        }
-        String name = t.nextToken();
-        ThreadGroupReference tg = findThreadGroup(name);
-        if (tg == null) {
-            env.failure(name + " is not a valid threadgroup name.");
-        } else {
-            OutputSink out = env.getOutputSink();
-            printThreadGroup(out, tg, 0);
-            out.show();
-        }
-    }
-
-    private ThreadGroupReference findThreadGroup(String name) throws NoSessionException {
-        //### Issue: Uniqueness of thread group names is not enforced.
-        ThreadGroupIterator tgi = allThreadGroups();
-        while (tgi.hasNext()) {
-            ThreadGroupReference tg = tgi.nextThreadGroup();
-            if (tg.name().equals(name)) {
-                return tg;
-            }
-        }
-        return null;
-    }
-
-    private int printThreadGroup(OutputSink out, ThreadGroupReference tg, int iThread) {
-        out.println("Group " + tg.name() + ":");
-        List<ThreadReference> tlist = tg.threads();
-        int maxId = 0;
-        int maxName = 0;
-        for (int i = 0 ; i < tlist.size() ; i++) {
-            ThreadReference thr = tlist.get(i);
-            int len = Utils.description(thr).length();
-            if (len > maxId) {
-                maxId = len;
-            }
-            String name = thr.name();
-            int iDot = name.lastIndexOf('.');
-            if (iDot >= 0 && name.length() > iDot) {
-                name = name.substring(iDot + 1);
-            }
-            if (name.length() > maxName) {
-                maxName = name.length();
-        }
-        }
-        String maxNumString = String.valueOf(iThread + tlist.size());
-        int maxNumDigits = maxNumString.length();
-        for (int i = 0 ; i < tlist.size() ; i++) {
-            ThreadReference thr = tlist.get(i);
-            char buf[] = new char[80];
-            for (int j = 0; j < 79; j++) {
-                buf[j] = ' ';
-            }
-            buf[79] = '\0';
-            StringBuffer sbOut = new StringBuffer();
-            sbOut.append(buf);
-
-            // Right-justify the thread number at start of output string
-            String numString = String.valueOf(iThread + i + 1);
-            sbOut.insert(maxNumDigits - numString.length(),
-                         numString);
-            sbOut.insert(maxNumDigits, ".");
-
-            int iBuf = maxNumDigits + 2;
-            sbOut.insert(iBuf, Utils.description(thr));
-            iBuf += maxId + 1;
-            String name = thr.name();
-            int iDot = name.lastIndexOf('.');
-            if (iDot >= 0 && name.length() > iDot) {
-                name = name.substring(iDot + 1);
-            }
-            sbOut.insert(iBuf, name);
-            iBuf += maxName + 1;
-            sbOut.insert(iBuf, Utils.getStatus(thr));
-            sbOut.setLength(79);
-            out.println(sbOut.toString());
-        }
-        for (ThreadGroupReference tg0 : tg.threadGroups()) {
-            if (!tg.equals(tg0)) {  // TODO ref mgt
-                iThread += printThreadGroup(out, tg0, iThread + tlist.size());
-            }
-        }
-        return tlist.size();
-    }
-
-    // Command: threadgroups
-
-    private void commandThreadGroups() throws NoSessionException {
-        ThreadGroupIterator it = allThreadGroups();
-        int cnt = 0;
-        OutputSink out = env.getOutputSink();
-        while (it.hasNext()) {
-            ThreadGroupReference tg = it.nextThreadGroup();
-            ++cnt;
-            out.println("" + cnt + ". " + Utils.description(tg) + " " + tg.name());
-        }
-        out.show();
-    }
-
-    // Command: thread
-
-    private void commandThread(StringTokenizer t) throws NoSessionException {
-        if (!t.hasMoreTokens()) {
-            env.error("Thread number not specified.");
-            return;
-        }
-        ThreadReference thread = findThread(t.nextToken());
-        if (thread != null) {
-            //### Should notify user.
-            context.setCurrentThread(thread);
-        }
-    }
-
-    // Command: threadgroup
-
-    private void commandThreadGroup(StringTokenizer t) throws NoSessionException {
-        if (!t.hasMoreTokens()) {
-            env.error("Threadgroup name not specified.");
-            return;
-        }
-        String name = t.nextToken();
-        ThreadGroupReference tg = findThreadGroup(name);
-        if (tg == null) {
-            env.failure(name + " is not a valid threadgroup name.");
-        } else {
-            //### Should notify user.
-            setDefaultThreadGroup(tg);
-        }
-    }
-
-    // Command: run
-
-    private void commandRun(StringTokenizer t) throws NoSessionException {
-        if (doLoad(false, t)) {
-            env.notice("Running ...");
-        }
-    }
-
-    // Command: load
-
-    private void commandLoad(StringTokenizer t) throws NoSessionException {
-        if (doLoad(true, t)) {}
-    }
-
-    private boolean doLoad(boolean suspended,
-                           StringTokenizer t) throws NoSessionException {
-
-        String clname;
-
-        if (!t.hasMoreTokens()) {
-            clname = context.getMainClassName();
-            if (!clname.equals("")) {
-                // Run from prevously-set class name.
-                try {
-                    String vmArgs = context.getVmArguments();
-                    runtime.run(suspended,
-                                vmArgs,
-                                clname,
-                                context.getProgramArguments());
-                    return true;
-                } catch (VMLaunchFailureException e) {
-                    env.failure("Attempt to launch main class \"" + clname + "\" failed.");
-                }
-            } else {
-                env.failure("No main class specifed and no current default defined.");
-            }
-        } else {
-            clname = t.nextToken();
-            StringBuffer sbuf = new StringBuffer();
-            // Allow VM arguments to be specified here?
-            while (t.hasMoreTokens()) {
-                String tok = t.nextToken();
-                sbuf.append(tok);
-                if (t.hasMoreTokens()) {
-                    sbuf.append(' ');
-                }
-            }
-            String args = sbuf.toString();
-            try {
-                String vmArgs = context.getVmArguments();
-                runtime.run(suspended, vmArgs, clname, args);
-                context.setMainClassName(clname);
-                //context.setVmArguments(vmArgs);
-                context.setProgramArguments(args);
-                return true;
-            } catch (VMLaunchFailureException e) {
-                env.failure("Attempt to launch main class \"" + clname + "\" failed.");
-            }
-        }
-        return false;
-    }
-
-    // Command: connect
-
-    private void commandConnect(StringTokenizer t) {
-        try {
-            LaunchTool.queryAndLaunchVM(runtime);
-        } catch (VMLaunchFailureException e) {
-            env.failure("Attempt to connect failed.");
-        }
-    }
-
-    // Command: attach
-
-    private void commandAttach(StringTokenizer t) {
-        String portName;
-        if (!t.hasMoreTokens()) {
-            portName = context.getRemotePort();
-            if (!portName.equals("")) {
-                try {
-                    runtime.attach(portName);
-                } catch (VMLaunchFailureException e) {
-                    env.failure("Attempt to attach to port \"" + portName + "\" failed.");
-                }
-            } else {
-                env.failure("No port specifed and no current default defined.");
-            }
-        } else {
-            portName = t.nextToken();
-            try {
-                runtime.attach(portName);
-            } catch (VMLaunchFailureException e) {
-                env.failure("Attempt to attach to port \"" + portName + "\" failed.");
-            }
-            context.setRemotePort(portName);
-        }
-    }
-
-    // Command: detach
-
-    private void commandDetach(StringTokenizer t) throws NoSessionException {
-        runtime.detach();
-    }
-
-    // Command: interrupt
-
-    private void commandInterrupt(StringTokenizer t) throws NoSessionException {
-        runtime.interrupt();
-    }
-
-    // Command: suspend
-
-    private void commandSuspend(StringTokenizer t) throws NoSessionException {
-        if (!t.hasMoreTokens()) {
-            // Suspend all threads in the current thread group.
-            //### Issue: help message says default is all threads.
-            //### Behavior here agrees with 'jdb', however.
-            ThreadIterator ti = currentThreadGroupThreads();
-            while (ti.hasNext()) {
-                // TODO - don't suspend debugger threads
-                ti.nextThread().suspend();
-            }
-            env.notice("All (non-system) threads suspended.");
-        } else {
-            while (t.hasMoreTokens()) {
-                ThreadReference thread = findThread(t.nextToken());
-                if (thread != null) {
-                    //thread.suspend();
-                    runtime.suspendThread(thread);
-                }
-            }
-        }
-    }
-
-    // Command: resume
-
-    private void commandResume(StringTokenizer t) throws NoSessionException {
-         if (!t.hasMoreTokens()) {
-            // Suspend all threads in the current thread group.
-            //### Issue: help message says default is all threads.
-            //### Behavior here agrees with 'jdb', however.
-            ThreadIterator ti = currentThreadGroupThreads();
-            while (ti.hasNext()) {
-                // TODO - don't suspend debugger threads
-                ti.nextThread().resume();
-            }
-            env.notice("All threads resumed.");
-         } else {
-             while (t.hasMoreTokens()) {
-                ThreadReference thread = findThread(t.nextToken());
-                if (thread != null) {
-                    //thread.resume();
-                    runtime.resumeThread(thread);
-                }
-             }
-         }
-    }
-
-    // Command: cont
-
-    private void commandCont() throws NoSessionException {
-        try {
-            runtime.go();
-        } catch (VMNotInterruptedException e) {
-            //### failure?
-            env.notice("Target VM is already running.");
-        }
-    }
-
-    // Command: step
-
-    private void commandStep(StringTokenizer t) throws NoSessionException{
-        ThreadReference current = context.getCurrentThread();
-        if (current == null) {
-            env.failure("No current thread.");
-            return;
-        }
-        try {
-            if (t.hasMoreTokens() &&
-                t.nextToken().toLowerCase().equals("up")) {
-                runtime.stepOut(current);
-            } else {
-                runtime.stepIntoLine(current);
-            }
-        } catch (AbsentInformationException e) {
-            env.failure("No linenumber information available -- " +
-                            "Try \"stepi\" to step by instructions.");
-        }
-    }
-
-    // Command: stepi
-
-    private void commandStepi() throws NoSessionException {
-        ThreadReference current = context.getCurrentThread();
-        if (current == null) {
-            env.failure("No current thread.");
-            return;
-        }
-        runtime.stepIntoInstruction(current);
-    }
-
-    // Command: next
-
-    private void commandNext() throws NoSessionException {
-        ThreadReference current = context.getCurrentThread();
-        if (current == null) {
-            env.failure("No current thread.");
-            return;
-        }
-        try {
-            runtime.stepOverLine(current);
-        } catch (AbsentInformationException e) {
-            env.failure("No linenumber information available -- " +
-                            "Try \"nexti\" to step by instructions.");
-        }
-    }
-
-    // Command: nexti  (NEW)
-
-    private void commandNexti() throws NoSessionException {
-        ThreadReference current = context.getCurrentThread();
-        if (current == null) {
-            env.failure("No current thread.");
-            return;
-        }
-        runtime.stepOverInstruction(current);
-    }
-
-    // Command: kill
-
-    private void commandKill(StringTokenizer t) throws NoSessionException {
-        //### Should change the way in which thread ids and threadgroup names
-        //### are distinguished.
-         if (!t.hasMoreTokens()) {
-            env.error("Usage: kill <threadgroup name> or <thread id>");
-            return;
-        }
-        while (t.hasMoreTokens()) {
-            String idToken = t.nextToken();
-            ThreadReference thread = findThread(idToken);
-            if (thread != null) {
-                runtime.stopThread(thread);
-                env.notice("Thread " + thread.name() + " killed.");
-                return;
-            } else {
-                /* Check for threadgroup name, NOT skipping "system". */
-                //### Should skip "system"?  Classic 'jdb' does this.
-                //### Should deal with possible non-uniqueness of threadgroup names.
-                ThreadGroupIterator itg = allThreadGroups();
-                while (itg.hasNext()) {
-                    ThreadGroupReference tg = itg.nextThreadGroup();
-                    if (tg.name().equals(idToken)) {
-                        ThreadIterator it = new ThreadIterator(tg);
-                        while (it.hasNext()) {
-                            runtime.stopThread(it.nextThread());
-                        }
-                        env.notice("Threadgroup " + tg.name() + "killed.");
-                        return;
-                    }
-                }
-                env.failure("\"" + idToken +
-                            "\" is not a valid threadgroup or id.");
-            }
-        }
-    }
-
-
-    /*************
-    // TODO
-    private void commandCatchException(StringTokenizer t) throws NoSessionException {}
-    // TODO
-    private void commandIgnoreException(StringTokenizer t) throws NoSessionException {}
-    *************/
-
-    // Command: up
-
-    //### Print current frame after command?
-
-    int readCount(StringTokenizer t) {
-        int cnt = 1;
-        if (t.hasMoreTokens()) {
-            String idToken = t.nextToken();
-            try {
-                cnt = Integer.valueOf(idToken).intValue();
-            } catch (NumberFormatException e) {
-                cnt = -1;
-            }
-        }
-        return cnt;
-    }
-
-    void commandUp(StringTokenizer t) throws NoSessionException {
-        ThreadReference current = context.getCurrentThread();
-        if (current == null) {
-            env.failure("No current thread.");
-            return;
-        }
-        int nLevels = readCount(t);
-        if (nLevels <= 0) {
-            env.error("usage: up [n frames]");
-            return;
-        }
-        try {
-            int delta = context.moveCurrentFrameIndex(current, -nLevels);
-            if (delta == 0) {
-                env.notice("Already at top of stack.");
-            } else if (-delta < nLevels) {
-                env.notice("Moved up " + delta + " frames to top of stack.");
-            }
-        } catch (VMNotInterruptedException e) {
-            env.failure("Target VM must be in interrupted state.");
-        }
-    }
-
-    private void commandDown(StringTokenizer t) throws NoSessionException {
-        ThreadReference current = context.getCurrentThread();
-        if (current == null) {
-            env.failure("No current thread.");
-            return;
-        }
-        int nLevels = readCount(t);
-        if (nLevels <= 0) {
-            env.error("usage: down [n frames]");
-            return;
-        }
-        try {
-            int delta = context.moveCurrentFrameIndex(current, nLevels);
-            if (delta == 0) {
-                env.notice("Already at bottom of stack.");
-            } else if (delta < nLevels) {
-                env.notice("Moved down " + delta + " frames to bottom of stack.");
-            }
-        } catch (VMNotInterruptedException e) {
-            env.failure("Target VM must be in interrupted state.");
-        }
-    }
-
-    // Command: frame
-
-    private void commandFrame(StringTokenizer t) throws NoSessionException {
-        ThreadReference current = context.getCurrentThread();
-        if (current == null) {
-            env.failure("No current thread.");
-            return;
-        }
-        if (!t.hasMoreTokens()) {
-            env.error("usage: frame <frame-index>");
-            return;
-        }
-        String idToken = t.nextToken();
-        int n;
-        try {
-            n = Integer.valueOf(idToken).intValue();
-        } catch (NumberFormatException e) {
-            n = 0;
-        }
-        if (n <= 0) {
-            env.error("use positive frame index");
-            return;
-        }
-        try {
-            int delta = context.setCurrentFrameIndex(current, n);
-            if (delta == 0) {
-                env.notice("Frame unchanged.");
-            } else if (delta < 0) {
-                env.notice("Moved up " + -delta + " frames.");
-            } else {
-                env.notice("Moved down " + delta + " frames.");
-            }
-        } catch (VMNotInterruptedException e) {
-            env.failure("Target VM must be in interrupted state.");
-        }
-    }
-
-    // Command: where
-
-    //### Should we insist that VM be interrupted here?
-    //### There is an inconsistency between the 'where' command
-    //### and 'up' and 'down' in this respect.
-
-    private void commandWhere(StringTokenizer t, boolean showPC)
-                                                throws NoSessionException {
-        ThreadReference current = context.getCurrentThread();
-        if (!t.hasMoreTokens()) {
-            if (current == null) {
-                env.error("No thread specified.");
-                return;
-            }
-            dumpStack(current, showPC);
-        } else {
-            String token = t.nextToken();
-            if (token.toLowerCase().equals("all")) {
-                ThreadIterator it = allThreads();
-                while (it.hasNext()) {
-                    ThreadReference thread = it.next();
-                    out.println(thread.name() + ": ");
-                    dumpStack(thread, showPC);
-                }
-            } else {
-                ThreadReference thread = findThread(t.nextToken());
-                //### Do we want to set current thread here?
-                //### Should notify user of change.
-                if (thread != null) {
-                    context.setCurrentThread(thread);
-                }
-                dumpStack(thread, showPC);
-            }
-        }
-    }
-
-    private void dumpStack(ThreadReference thread, boolean showPC) {
-        //### Check for these.
-        //env.failure("Thread no longer exists.");
-        //env.failure("Target VM must be in interrupted state.");
-        //env.failure("Current thread isn't suspended.");
-        //### Should handle extremely long stack traces sensibly for user.
-        List<StackFrame> stack = null;
-        try {
-            stack = thread.frames();
-        } catch (IncompatibleThreadStateException e) {
-            env.failure("Thread is not suspended.");
-        }
-        //### Fix this!
-        //### Previously mishandled cases where thread was not current.
-        //### Now, prints all of the stack regardless of current frame.
-        int frameIndex = 0;
-        //int frameIndex = context.getCurrentFrameIndex();
-        if (stack == null) {
-            env.failure("Thread is not running (no stack).");
-        } else {
-            OutputSink out = env.getOutputSink();
-            int nFrames = stack.size();
-            for (int i = frameIndex; i < nFrames; i++) {
-                StackFrame frame = stack.get(i);
-                Location loc = frame.location();
-                Method meth = loc.method();
-                out.print("  [" + (i + 1) + "] ");
-                out.print(meth.declaringType().name());
-                out.print('.');
-                out.print(meth.name());
-                out.print(" (");
-                if (meth.isNative()) {
-                    out.print("native method");
-                } else if (loc.lineNumber() != -1) {
-                    try {
-                        out.print(loc.sourceName());
-                    } catch (AbsentInformationException e) {
-                        out.print("<unknown>");
-                    }
-                    out.print(':');
-                    out.print(loc.lineNumber());
-                }
-                out.print(')');
-                if (showPC) {
-                    long pc = loc.codeIndex();
-                    if (pc != -1) {
-                        out.print(", pc = " + pc);
-                    }
-                }
-                out.println();
-            }
-            out.show();
-        }
-    }
-
-    private void listEventRequests() throws NoSessionException {
-        // Print set breakpoints
-        List<EventRequestSpec> specs = runtime.eventRequestSpecs();
-        if (specs.isEmpty()) {
-            env.notice("No breakpoints/watchpoints/exceptions set.");
-        } else {
-            OutputSink out = env.getOutputSink();
-            out.println("Current breakpoints/watchpoints/exceptions set:");
-            for (EventRequestSpec bp : specs) {
-                out.println("\t" + bp);
-            }
-            out.show();
-        }
-    }
-
-    private BreakpointSpec parseBreakpointSpec(String bptSpec) {
-        StringTokenizer t = new StringTokenizer(bptSpec);
-        BreakpointSpec bpSpec = null;
-//        try {
-            String token = t.nextToken("@:( \t\n\r");
-            // We can't use hasMoreTokens here because it will cause any leading
-            // paren to be lost.
-            String rest;
-            try {
-                rest = t.nextToken("").trim();
-            } catch (NoSuchElementException e) {
-                rest = null;
-            }
-            if ((rest != null) && rest.startsWith("@")) {
-                t = new StringTokenizer(rest.substring(1));
-                String sourceName = token;
-                String lineToken = t.nextToken();
-                int lineNumber = Integer.valueOf(lineToken).intValue();
-                if (t.hasMoreTokens()) {
-                    return null;
-                }
-                bpSpec = runtime.createSourceLineBreakpoint(sourceName,
-                                                            lineNumber);
-            } else if ((rest != null) && rest.startsWith(":")) {
-                t = new StringTokenizer(rest.substring(1));
-                String classId = token;
-                String lineToken = t.nextToken();
-                int lineNumber = Integer.valueOf(lineToken).intValue();
-                if (t.hasMoreTokens()) {
-                    return null;
-                }
-                bpSpec = runtime.createClassLineBreakpoint(classId, lineNumber);
-            } else {
-                // Try stripping method from class.method token.
-                int idot = token.lastIndexOf(".");
-                if ( (idot <= 0) ||        /* No dot or dot in first char */
-                     (idot >= token.length() - 1) ) { /* dot in last char */
-                    return null;
-                }
-                String methodName = token.substring(idot + 1);
-                String classId = token.substring(0, idot);
-                List<String> argumentList = null;
-                if (rest != null) {
-                    if (!rest.startsWith("(") || !rest.endsWith(")")) {
-                        //### Should throw exception with error message
-                        //out.println("Invalid method specification: "
-                        //            + methodName + rest);
-                        return null;
-                    }
-                    // Trim the parens
-                    //### What about spaces in arglist?
-                    rest = rest.substring(1, rest.length() - 1);
-                    argumentList = new ArrayList<String>();
-                    t = new StringTokenizer(rest, ",");
-                    while (t.hasMoreTokens()) {
-                        argumentList.add(t.nextToken());
-                    }
-                }
-                bpSpec = runtime.createMethodBreakpoint(classId,
-                                                       methodName,
-                                                       argumentList);
-            }
-//        } catch (Exception e) {
-//            env.error("Exception attempting to create breakpoint: " + e);
-//            return null;
-//        }
-        return bpSpec;
-    }
-
-    private void commandStop(StringTokenizer t) throws NoSessionException {
-        String token;
-
-        if (!t.hasMoreTokens()) {
-            listEventRequests();
-        } else {
-            token = t.nextToken();
-            // Ignore optional "at" or "in" token.
-            // Allowed for backward compatibility.
-            if (token.equals("at") || token.equals("in")) {
-                if (t.hasMoreTokens()) {
-                    token = t.nextToken();
-                } else {
-                    env.error("Missing breakpoint specification.");
-                    return;
-                }
-            }
-            BreakpointSpec bpSpec = parseBreakpointSpec(token);
-            if (bpSpec != null) {
-                //### Add sanity-checks for deferred breakpoint.
-                runtime.install(bpSpec);
-            } else {
-                env.error("Ill-formed breakpoint specification.");
-            }
-        }
-    }
-
-    private void commandClear(StringTokenizer t) throws NoSessionException {
-        if (!t.hasMoreTokens()) {
-            // Print set breakpoints
-            listEventRequests();
-            return;
-        }
-        //### need 'clear all'
-        BreakpointSpec bpSpec = parseBreakpointSpec(t.nextToken());
-        if (bpSpec != null) {
-            List<EventRequestSpec> specs = runtime.eventRequestSpecs();
-
-            if (specs.isEmpty()) {
-                env.notice("No breakpoints set.");
-            } else {
-                List<EventRequestSpec> toDelete = new ArrayList<EventRequestSpec>();
-                for (EventRequestSpec spec : specs) {
-                    if (spec.equals(bpSpec)) {
-                        toDelete.add(spec);
-                    }
-                }
-                // The request used for matching should be found
-                if (toDelete.size() <= 1) {
-                    env.notice("No matching breakpoint set.");
-                }
-                for (EventRequestSpec spec : toDelete) {
-                    runtime.delete(spec);
-                }
-            }
-        } else {
-            env.error("Ill-formed breakpoint specification.");
-        }
-    }
-
-    // Command: list
-
-    private void commandList(StringTokenizer t) throws NoSessionException {
-        ThreadReference current = context.getCurrentThread();
-        if (current == null) {
-            env.error("No thread specified.");
-            return;
-        }
-        Location loc;
-        try {
-            StackFrame frame = context.getCurrentFrame(current);
-            if (frame == null) {
-                env.failure("Thread has not yet begun execution.");
-                return;
-            }
-            loc = frame.location();
-        } catch (VMNotInterruptedException e) {
-            env.failure("Target VM must be in interrupted state.");
-            return;
-        }
-        SourceModel source = sourceManager.sourceForLocation(loc);
-        if (source == null) {
-            if (loc.method().isNative()) {
-                env.failure("Current method is native.");
-                return;
-            }
-            env.failure("No source available for " + Utils.locationString(loc) + ".");
-            return;
-        }
-        ReferenceType refType = loc.declaringType();
-        int lineno = loc.lineNumber();
-        if (t.hasMoreTokens()) {
-            String id = t.nextToken();
-            // See if token is a line number.
-            try {
-                lineno = Integer.valueOf(id).intValue();
-            } catch (NumberFormatException nfe) {
-                // It isn't -- see if it's a method name.
-                List<Method> meths = refType.methodsByName(id);
-                if (meths == null || meths.size() == 0) {
-                    env.failure(id +
-                                " is not a valid line number or " +
-                                "method name for class " +
-                                refType.name());
-                    return;
-                } else if (meths.size() > 1) {
-                    env.failure(id +
-                                " is an ambiguous method name in" +
-                                refType.name());
-                    return;
-                }
-                loc = meths.get(0).location();
-                lineno = loc.lineNumber();
-            }
-        }
-        int startLine = (lineno > 4) ? lineno - 4 : 1;
-        int endLine = startLine + 9;
-        String sourceLine = source.sourceLine(lineno);
-        if (sourceLine == null) {
-            env.failure("" +
-                        lineno +
-                        " is an invalid line number for " +
-                        refType.name());
-        } else {
-            OutputSink out = env.getOutputSink();
-            for (int i = startLine; i <= endLine; i++) {
-                sourceLine = source.sourceLine(i);
-                if (sourceLine == null) {
-                    break;
-                }
-                out.print(i);
-                out.print("\t");
-                if (i == lineno) {
-                    out.print("=> ");
-                } else {
-                    out.print("   ");
-                }
-                out.println(sourceLine);
-            }
-            out.show();
-        }
-    }
-
-    // Command: use
-    // Get or set the source file path list.
-
-    private void commandUse(StringTokenizer t) {
-        if (!t.hasMoreTokens()) {
-            out.println(sourceManager.getSourcePath().asString());
-        } else {
-            //### Should throw exception for invalid path.
-            //### E.g., vetoable property change.
-            sourceManager.setSourcePath(new SearchPath(t.nextToken()));
-        }
-    }
-
-    // Command: sourcepath
-    // Get or set the source file path list.  (Alternate to 'use'.)
-
-    private void commandSourcepath(StringTokenizer t) {
-        if (!t.hasMoreTokens()) {
-            out.println(sourceManager.getSourcePath().asString());
-        } else {
-            //### Should throw exception for invalid path.
-            //### E.g., vetoable property change.
-            sourceManager.setSourcePath(new SearchPath(t.nextToken()));
-        }
-    }
-
-    // Command: classpath
-    // Get or set the class file path list.
-
-    private void commandClasspath(StringTokenizer t) {
-        if (!t.hasMoreTokens()) {
-            out.println(classManager.getClassPath().asString());
-        } else {
-            //### Should throw exception for invalid path.
-            //### E.g., vetoable property change.
-            classManager.setClassPath(new SearchPath(t.nextToken()));
-        }
-    }
-
-    // Command: view
-    // Display source for source file or class.
-
-    private void commandView(StringTokenizer t) throws NoSessionException {
-        if (!t.hasMoreTokens()) {
-            env.error("Argument required");
-        } else {
-            String name = t.nextToken();
-            if (name.endsWith(".java") ||
-                name.indexOf(File.separatorChar) >= 0) {
-                env.viewSource(name);
-            } else {
-                //### JDI crashes taking line number for class.
-                /*****
-                ReferenceType cls = findClass(name);
-                if (cls != null) {
-                    env.viewLocation(cls.location());
-                } else {
-                    env.failure("No such class");
-                }
-                *****/
-                String fileName = name.replace('.', File.separatorChar) + ".java";
-                env.viewSource(fileName);
-            }
-        }
-    }
-
-    // Command: locals
-    // Print all local variables in current stack frame.
-
-    private void commandLocals() throws NoSessionException {
-        ThreadReference current = context.getCurrentThread();
-        if (current == null) {
-            env.failure("No default thread specified: " +
-                        "use the \"thread\" command first.");
-            return;
-        }
-        StackFrame frame;
-        try {
-            frame = context.getCurrentFrame(current);
-            if (frame == null) {
-                env.failure("Thread has not yet created any stack frames.");
-                return;
-            }
-        } catch (VMNotInterruptedException e) {
-            env.failure("Target VM must be in interrupted state.");
-            return;
-        }
-
-        List<LocalVariable> vars;
-        try {
-            vars = frame.visibleVariables();
-            if (vars == null || vars.size() == 0) {
-                env.failure("No local variables");
-                return;
-            }
-        } catch (AbsentInformationException e) {
-            env.failure("Local variable information not available." +
-                        " Compile with -g to generate variable information");
-            return;
-        }
-
-        OutputSink out = env.getOutputSink();
-        out.println("Method arguments:");
-        for (LocalVariable var : vars) {
-            if (var.isArgument()) {
-                printVar(out, var, frame);
-            }
-        }
-        out.println("Local variables:");
-        for (LocalVariable var : vars) {
-            if (!var.isArgument()) {
-                printVar(out, var, frame);
-            }
-        }
-        out.show();
-        return;
-    }
-
-    /**
-     * Command: monitor
-     * Monitor an expression
-     */
-    private void commandMonitor(StringTokenizer t) throws NoSessionException {
-        if (!t.hasMoreTokens()) {
-            env.error("Argument required");
-        } else {
-            env.getMonitorListModel().add(t.nextToken(""));
-        }
-    }
-
-    /**
-     * Command: unmonitor
-     * Unmonitor an expression
-     */
-    private void commandUnmonitor(StringTokenizer t) throws NoSessionException {
-        if (!t.hasMoreTokens()) {
-            env.error("Argument required");
-        } else {
-            env.getMonitorListModel().remove(t.nextToken(""));
-        }
-    }
-
-    // Print a stack variable.
-
-    private void printVar(OutputSink out, LocalVariable var, StackFrame frame) {
-        out.print("  " + var.name());
-        if (var.isVisible(frame)) {
-            Value val = frame.getValue(var);
-            out.println(" = " + val.toString());
-        } else {
-            out.println(" is not in scope");
-        }
-    }
-
-    // Command: print
-    // Evaluate an expression.
-
-    private void commandPrint(StringTokenizer t, boolean dumpObject) throws NoSessionException {
-        if (!t.hasMoreTokens()) {
-            //### Probably confused if expresion contains whitespace.
-            env.error("No expression specified.");
-            return;
-        }
-        ThreadReference current = context.getCurrentThread();
-        if (current == null) {
-            env.failure("No default thread specified: " +
-                        "use the \"thread\" command first.");
-            return;
-        }
-        StackFrame frame;
-        try {
-            frame = context.getCurrentFrame(current);
-            if (frame == null) {
-                env.failure("Thread has not yet created any stack frames.");
-                return;
-            }
-        } catch (VMNotInterruptedException e) {
-            env.failure("Target VM must be in interrupted state.");
-            return;
-        }
-        while (t.hasMoreTokens()) {
-            String expr = t.nextToken("");
-            Value val = null;
-            try {
-                val = runtime.evaluate(frame, expr);
-            } catch(Exception e) {
-                env.error("Exception: " + e);
-                //### Fix this!
-            }
-            if (val == null) {
-                return;  // Error message already printed
-            }
-            OutputSink out = env.getOutputSink();
-            if (dumpObject && (val instanceof ObjectReference) &&
-                                 !(val instanceof StringReference)) {
-                ObjectReference obj = (ObjectReference)val;
-                ReferenceType refType = obj.referenceType();
-                out.println(expr + " = " + val.toString() + " {");
-                dump(out, obj, refType, refType);
-                out.println("}");
-            } else {
-                out.println(expr + " = " + val.toString());
-            }
-            out.show();
-        }
-    }
-
-    private void dump(OutputSink out,
-                      ObjectReference obj, ReferenceType refType,
-                      ReferenceType refTypeBase) {
-        for (Field field : refType.fields()) {
-            out.print("    ");
-            if (!refType.equals(refTypeBase)) {
-                out.print(refType.name() + ".");
-            }
-            out.print(field.name() + ": ");
-            Object o = obj.getValue(field);
-            out.println((o == null) ? "null" : o.toString()); // Bug ID 4374471
-        }
-        if (refType instanceof ClassType) {
-            ClassType sup = ((ClassType)refType).superclass();
-            if (sup != null) {
-                dump(out, obj, sup, refTypeBase);
-            }
-        } else if (refType instanceof InterfaceType) {
-            for (InterfaceType sup : ((InterfaceType)refType).superinterfaces()) {
-                dump(out, obj, sup, refTypeBase);
-            }
-        }
-    }
-
-    /*
-     * Display help message.
-     */
-
-    private void help() {
-        out.println("** command list **");
-        out.println("threads [threadgroup]     -- list threads");
-        out.println("thread <thread id>        -- set default thread");
-        out.println("suspend [thread id(s)]    -- suspend threads (default: all)");
-        out.println("resume [thread id(s)]     -- resume threads (default: all)");
-        out.println("where [thread id] | all   -- dump a thread's stack");
-        out.println("wherei [thread id] | all  -- dump a thread's stack, with pc info");
-        out.println("threadgroups              -- list threadgroups");
-        out.println("threadgroup <name>        -- set current threadgroup\n");
-//      out.println("print <expression>        -- print value of expression");
-        out.println("dump <expression>         -- print all object information\n");
-//      out.println("eval <expression>         -- evaluate expression (same as print)");
-        out.println("locals                    -- print all local variables in current stack frame\n");
-        out.println("classes                   -- list currently known classes");
-        out.println("methods <class id>        -- list a class's methods\n");
-        out.println("stop [in] <class id>.<method>[(argument_type,...)] -- set a breakpoint in a method");
-        out.println("stop [at] <class id>:<line> -- set a breakpoint at a line");
-        out.println("up [n frames]             -- move up a thread's stack");
-        out.println("down [n frames]           -- move down a thread's stack");
-        out.println("frame <frame-id>           -- to a frame");
-        out.println("clear <class id>.<method>[(argument_type,...)]   -- clear a breakpoint in a method");
-        out.println("clear <class id>:<line>   -- clear a breakpoint at a line");
-        out.println("clear                     -- list breakpoints");
-        out.println("step                      -- execute current line");
-        out.println("step up                   -- execute until the current method returns to its caller");
-        out.println("stepi                     -- execute current instruction");
-        out.println("next                      -- step one line (step OVER calls)");
-        out.println("nexti                     -- step one instruction (step OVER calls)");
-        out.println("cont                      -- continue execution from breakpoint\n");
-//      out.println("catch <class id>          -- break for the specified exception");
-//      out.println("ignore <class id>         -- ignore when the specified exception\n");
-        out.println("view classname|filename   -- display source file");
-        out.println("list [line number|method] -- print source code context at line or method");
-        out.println("use <source file path>    -- display or change the source path\n");
-//### new
-        out.println("sourcepath <source file path>    -- display or change the source path\n");
-//### new
-        out.println("classpath <class file path>    -- display or change the class path\n");
-        out.println("monitor <expression>      -- evaluate an expression each time the program stops\n");
-        out.println("unmonitor <monitor#>      -- delete a monitor\n");
-        out.println("read <filename>           -- read and execute a command file\n");
-//      out.println("memory                    -- report memory usage");
-//      out.println("gc                        -- free unused objects\n");
-        out.println("run <class> [args]        -- start execution of a Java class");
-        out.println("run                       -- re-execute last class run");
-        out.println("load <class> [args]       -- start execution of a Java class, initially suspended");
-        out.println("load                      -- re-execute last class run, initially suspended");
-        out.println("attach <portname>         -- debug existing process\n");
-        out.println("detach                    -- detach from debuggee process\n");
-        out.println("kill <thread(group)>      -- kill a thread or threadgroup\n");
-        out.println("!!                        -- repeat last command");
-        out.println("help (or ?)               -- list commands");
-        out.println("exit (or quit)            -- exit debugger");
-    }
-
-    /*
-     * Execute a command.
-     */
-
-    public void executeCommand(String command) {
-        //### Treatment of 'out' here is dirty...
-        out = env.getOutputSink();
-        if (echo) {
-            out.println(">>> " + command);
-        }
-        StringTokenizer t = new StringTokenizer(command);
-        try {
-            String cmd;
-            if (t.hasMoreTokens()) {
-                cmd = t.nextToken().toLowerCase();
-                lastCommand = cmd;
-            } else {
-                cmd = lastCommand;
-            }
-            if (cmd.equals("print")) {
-                commandPrint(t, false);
-            } else if (cmd.equals("eval")) {
-                commandPrint(t, false);
-            } else if (cmd.equals("dump")) {
-                commandPrint(t, true);
-            } else if (cmd.equals("locals")) {
-                commandLocals();
-            } else if (cmd.equals("classes")) {
-                commandClasses();
-            } else if (cmd.equals("methods")) {
-                commandMethods(t);
-            } else if (cmd.equals("threads")) {
-                commandThreads(t);
-            } else if (cmd.equals("thread")) {
-                commandThread(t);
-            } else if (cmd.equals("suspend")) {
-                commandSuspend(t);
-            } else if (cmd.equals("resume")) {
-                commandResume(t);
-            } else if (cmd.equals("cont")) {
-                commandCont();
-            } else if (cmd.equals("threadgroups")) {
-                commandThreadGroups();
-            } else if (cmd.equals("threadgroup")) {
-                commandThreadGroup(t);
-            } else if (cmd.equals("run")) {
-                commandRun(t);
-            } else if (cmd.equals("load")) {
-                commandLoad(t);
-            } else if (cmd.equals("connect")) {
-                commandConnect(t);
-            } else if (cmd.equals("attach")) {
-                commandAttach(t);
-            } else if (cmd.equals("detach")) {
-                commandDetach(t);
-            } else if (cmd.equals("interrupt")) {
-                commandInterrupt(t);
-//### Not implemented.
-//          } else if (cmd.equals("catch")) {
-//              commandCatchException(t);
-//### Not implemented.
-//          } else if (cmd.equals("ignore")) {
-//              commandIgnoreException(t);
-            } else if (cmd.equals("step")) {
-                commandStep(t);
-            } else if (cmd.equals("stepi")) {
-                commandStepi();
-            } else if (cmd.equals("next")) {
-                commandNext();
-            } else if (cmd.equals("nexti")) {
-                commandNexti();
-            } else if (cmd.equals("kill")) {
-                commandKill(t);
-            } else if (cmd.equals("where")) {
-                commandWhere(t, false);
-            } else if (cmd.equals("wherei")) {
-                commandWhere(t, true);
-            } else if (cmd.equals("up")) {
-                commandUp(t);
-            } else if (cmd.equals("down")) {
-                commandDown(t);
-            } else if (cmd.equals("frame")) {
-                commandFrame(t);
-            } else if (cmd.equals("stop")) {
-                commandStop(t);
-            } else if (cmd.equals("clear")) {
-                commandClear(t);
-            } else if (cmd.equals("list")) {
-                commandList(t);
-            } else if (cmd.equals("use")) {
-                commandUse(t);
-            } else if (cmd.equals("sourcepath")) {
-                commandSourcepath(t);
-            } else if (cmd.equals("classpath")) {
-                commandClasspath(t);
-            } else if (cmd.equals("monitor")) {
-                commandMonitor(t);
-            } else if (cmd.equals("unmonitor")) {
-                commandUnmonitor(t);
-            } else if (cmd.equals("view")) {
-                commandView(t);
-//          } else if (cmd.equals("read")) {
-//              readCommand(t);
-            } else if (cmd.equals("help") || cmd.equals("?")) {
-                help();
-            } else if (cmd.equals("quit") || cmd.equals("exit")) {
-                try {
-                    runtime.detach();
-                } catch (NoSessionException e) {
-                    // ignore
-                }
-                env.terminate();
-            } else {
-                //### Dubious repeat-count feature inherited from 'jdb'
-                if (t.hasMoreTokens()) {
-                    try {
-                        int repeat = Integer.parseInt(cmd);
-                        String subcom = t.nextToken("");
-                        while (repeat-- > 0) {
-                            executeCommand(subcom);
-                        }
-                        return;
-                    } catch (NumberFormatException exc) {
-                    }
-                }
-                out.println("huh? Try help...");
-                out.flush();
-            }
-        } catch (NoSessionException e) {
-            out.println("There is no currently attached VM session.");
-            out.flush();
-        } catch (Exception e) {
-            out.println("Internal exception: " + e.toString());
-            out.flush();
-            System.out.println("JDB internal exception: " + e.toString());
-            e.printStackTrace();
-        }
-        out.show();
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/gui/CommandTool.java b/ojluni/src/main/java/com/sun/tools/example/debug/gui/CommandTool.java
deleted file mode 100755
index 1e0f78b..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/gui/CommandTool.java
+++ /dev/null
@@ -1,342 +0,0 @@
-/*
- * Copyright (c) 1998, 1999, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.gui;
-
-import java.io.*;
-import java.util.*;
-
-import javax.swing.*;
-import java.awt.BorderLayout;
-import java.awt.event.*;
-
-import com.sun.jdi.*;
-import com.sun.jdi.event.*;
-
-import com.sun.tools.example.debug.bdi.*;
-import com.sun.tools.example.debug.event.*;
-
-public class CommandTool extends JPanel {
-
-    private static final long serialVersionUID = 8613516856378346415L;
-
-    private Environment env;
-
-    private ContextManager context;
-    private ExecutionManager runtime;
-    private SourceManager sourceManager;
-
-    private TypeScript script;
-
-    private static final String DEFAULT_CMD_PROMPT = "Command:";
-
-    public CommandTool(Environment env) {
-
-        super(new BorderLayout());
-
-        this.env = env;
-        this.context = env.getContextManager();
-        this.runtime = env.getExecutionManager();
-        this.sourceManager = env.getSourceManager();
-
-        script = new TypeScript(DEFAULT_CMD_PROMPT, false); //no echo
-        this.add(script);
-
-        final CommandInterpreter interpreter =
-            new CommandInterpreter(env);
-
-        // Establish handler for incoming commands.
-
-        script.addActionListener(new ActionListener() {
-            @Override
-            public void actionPerformed(ActionEvent e) {
-                interpreter.executeCommand(script.readln());
-            }
-        });
-
-        // Establish ourselves as the listener for VM diagnostics.
-
-        OutputListener diagnosticsListener =
-            new TypeScriptOutputListener(script, true);
-        runtime.addDiagnosticsListener(diagnosticsListener);
-
-        // Establish ourselves as the shared debugger typescript.
-
-        env.setTypeScript(new PrintWriter(new TypeScriptWriter(script)));
-
-        // Handle VM events.
-
-        TTYDebugListener listener = new TTYDebugListener(diagnosticsListener);
-
-        runtime.addJDIListener(listener);
-        runtime.addSessionListener(listener);
-        runtime.addSpecListener(listener);
-        context.addContextListener(listener);
-
-        //### remove listeners on exit!
-
-    }
-
-    private class TTYDebugListener implements
-            JDIListener, SessionListener, SpecListener, ContextListener {
-
-        private OutputListener diagnostics;
-
-        TTYDebugListener(OutputListener diagnostics) {
-            this.diagnostics = diagnostics;
-        }
-
-        // JDIListener
-
-        @Override
-        public void accessWatchpoint(AccessWatchpointEventSet e) {
-            setThread(e);
-            for (EventIterator it = e.eventIterator(); it.hasNext(); ) {
-                it.nextEvent();
-                diagnostics.putString("Watchpoint hit: " +
-                                      locationString(e));
-            }
-        }
-
-        @Override
-        public void classPrepare(ClassPrepareEventSet e) {
-            if (context.getVerboseFlag()) {
-                String name = e.getReferenceType().name();
-                diagnostics.putString("Class " + name + " loaded");
-            }
-        }
-
-        @Override
-        public void classUnload(ClassUnloadEventSet e) {
-            if (context.getVerboseFlag()) {
-                diagnostics.putString("Class " + e.getClassName() +
-                                      " unloaded.");
-            }
-        }
-
-        @Override
-        public void exception(ExceptionEventSet e) {
-            setThread(e);
-            String name = e.getException().referenceType().name();
-            diagnostics.putString("Exception: " + name);
-        }
-
-        @Override
-        public void locationTrigger(LocationTriggerEventSet e) {
-            String locString = locationString(e);
-            setThread(e);
-            for (EventIterator it = e.eventIterator(); it.hasNext(); ) {
-                Event evt = it.nextEvent();
-                if (evt instanceof BreakpointEvent) {
-                    diagnostics.putString("Breakpoint hit: " + locString);
-                } else if (evt instanceof StepEvent) {
-                    diagnostics.putString("Step completed: " + locString);
-                } else if (evt instanceof MethodEntryEvent) {
-                    diagnostics.putString("Method entered: " + locString);
-                } else if (evt instanceof MethodExitEvent) {
-                    diagnostics.putString("Method exited: " + locString);
-                } else {
-                    diagnostics.putString("UNKNOWN event: " + e);
-                }
-            }
-        }
-
-        @Override
-        public void modificationWatchpoint(ModificationWatchpointEventSet e) {
-            setThread(e);
-            for (EventIterator it = e.eventIterator(); it.hasNext(); ) {
-                it.nextEvent();
-                diagnostics.putString("Watchpoint hit: " +
-                                      locationString(e));
-            }
-        }
-
-        @Override
-        public void threadDeath(ThreadDeathEventSet e) {
-            if (context.getVerboseFlag()) {
-                diagnostics.putString("Thread " + e.getThread() +
-                                      " ended.");
-            }
-        }
-
-        @Override
-        public void threadStart(ThreadStartEventSet e) {
-            if (context.getVerboseFlag()) {
-                diagnostics.putString("Thread " + e.getThread() +
-                                      " started.");
-            }
-        }
-
-        @Override
-        public void vmDeath(VMDeathEventSet e) {
-            script.setPrompt(DEFAULT_CMD_PROMPT);
-            diagnostics.putString("VM exited");
-        }
-
-        @Override
-        public void vmDisconnect(VMDisconnectEventSet e) {
-            script.setPrompt(DEFAULT_CMD_PROMPT);
-            diagnostics.putString("Disconnected from VM");
-        }
-
-        @Override
-        public void vmStart(VMStartEventSet e) {
-            script.setPrompt(DEFAULT_CMD_PROMPT);
-            diagnostics.putString("VM started");
-        }
-
-        // SessionListener
-
-        @Override
-        public void sessionStart(EventObject e) {}
-
-        @Override
-        public void sessionInterrupt(EventObject e) {
-            Thread.yield();  // fetch output
-            diagnostics.putString("VM interrupted by user.");
-            script.setPrompt(DEFAULT_CMD_PROMPT);
-        }
-
-        @Override
-        public void sessionContinue(EventObject e) {
-            diagnostics.putString("Execution resumed.");
-            script.setPrompt(DEFAULT_CMD_PROMPT);
-        }
-
-        // SpecListener
-
-        @Override
-        public void breakpointSet(SpecEvent e) {
-            EventRequestSpec spec = e.getEventRequestSpec();
-            diagnostics.putString("Breakpoint set at " + spec + ".");
-        }
-        @Override
-        public void breakpointDeferred(SpecEvent e) {
-            EventRequestSpec spec = e.getEventRequestSpec();
-            diagnostics.putString("Breakpoint will be set at " +
-                                  spec + " when its class is loaded.");
-        }
-        @Override
-        public void breakpointDeleted(SpecEvent e) {
-            EventRequestSpec spec = e.getEventRequestSpec();
-            diagnostics.putString("Breakpoint at " + spec.toString() + " deleted.");
-        }
-        @Override
-        public void breakpointResolved(SpecEvent e) {
-            EventRequestSpec spec = e.getEventRequestSpec();
-            diagnostics.putString("Breakpoint resolved to " + spec.toString() + ".");
-        }
-        @Override
-        public void breakpointError(SpecErrorEvent e) {
-            EventRequestSpec spec = e.getEventRequestSpec();
-            diagnostics.putString("Deferred breakpoint at " +
-                                  spec + " could not be resolved:" +
-                                  e.getReason());
-        }
-
-//### Add info for watchpoints and exceptions
-
-        @Override
-        public void watchpointSet(SpecEvent e) {
-        }
-        @Override
-        public void watchpointDeferred(SpecEvent e) {
-        }
-        @Override
-        public void watchpointDeleted(SpecEvent e) {
-        }
-        @Override
-        public void watchpointResolved(SpecEvent e) {
-        }
-        @Override
-        public void watchpointError(SpecErrorEvent e) {
-        }
-
-        @Override
-        public void exceptionInterceptSet(SpecEvent e) {
-        }
-        @Override
-        public void exceptionInterceptDeferred(SpecEvent e) {
-        }
-        @Override
-        public void exceptionInterceptDeleted(SpecEvent e) {
-        }
-        @Override
-        public void exceptionInterceptResolved(SpecEvent e) {
-        }
-        @Override
-        public void exceptionInterceptError(SpecErrorEvent e) {
-        }
-
-
-        // ContextListener.
-
-        // If the user selects a new current thread or frame, update prompt.
-
-        @Override
-        public void currentFrameChanged(CurrentFrameChangedEvent e) {
-            // Update prompt only if affect thread is current.
-            ThreadReference thread = e.getThread();
-            if (thread == context.getCurrentThread()) {
-                script.setPrompt(promptString(thread, e.getIndex()));
-            }
-        }
-
-    }
-
-    private String locationString(LocatableEventSet e) {
-        Location loc = e.getLocation();
-        return "thread=\"" + e.getThread().name() +
-            "\", " + Utils.locationString(loc);
-    }
-
-    private void setThread(LocatableEventSet e) {
-        if (!e.suspendedNone()) {
-            Thread.yield();  // fetch output
-            script.setPrompt(promptString(e.getThread(), 0));
-            //### Current thread should be set elsewhere, e.g.,
-            //### in ContextManager
-            //### context.setCurrentThread(thread);
-        }
-    }
-
-    private String promptString(ThreadReference thread, int frameIndex) {
-        if (thread == null) {
-            return DEFAULT_CMD_PROMPT;
-        } else {
-            // Frame indices are presented to user as indexed from 1.
-            return (thread.name() + "[" + (frameIndex + 1) + "]:");
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/gui/ContextListener.java b/ojluni/src/main/java/com/sun/tools/example/debug/gui/ContextListener.java
deleted file mode 100755
index b4b63f0..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/gui/ContextListener.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (c) 1998, 1999, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.gui;
-
-public interface ContextListener {
-    void currentFrameChanged(CurrentFrameChangedEvent e);
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/gui/ContextManager.java b/ojluni/src/main/java/com/sun/tools/example/debug/gui/ContextManager.java
deleted file mode 100755
index 01f96d4..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/gui/ContextManager.java
+++ /dev/null
@@ -1,362 +0,0 @@
-/*
- * Copyright (c) 1998, 1999, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.gui;
-
-import java.io.*;
-import java.util.*;
-
-import com.sun.jdi.*;
-import com.sun.tools.example.debug.event.*;
-import com.sun.tools.example.debug.bdi.*;
-
-public class ContextManager {
-
-    private ClassManager classManager;
-    private ExecutionManager runtime;
-
-    private String mainClassName;
-    private String vmArguments;
-    private String commandArguments;
-    private String remotePort;
-
-    private ThreadReference currentThread;
-
-    private boolean verbose;
-
-    private ArrayList<ContextListener> contextListeners = new ArrayList<ContextListener>();
-
-    public ContextManager(Environment env) {
-        classManager = env.getClassManager();
-        runtime = env.getExecutionManager();
-        mainClassName = "";
-        vmArguments = "";
-        commandArguments = "";
-        currentThread = null;
-
-        ContextManagerListener listener = new ContextManagerListener();
-        runtime.addJDIListener(listener);
-        runtime.addSessionListener(listener);
-    }
-
-    // Program execution defaults.
-
-    //### Should there be change listeners for these?
-    //### They would be needed if we expected a dialog to be
-    //### synchronized with command input while it was open.
-
-    public String getMainClassName() {
-        return mainClassName;
-    }
-
-    public void setMainClassName(String mainClassName) {
-        this.mainClassName = mainClassName;
-    }
-
-    public String getVmArguments() {
-        return processClasspathDefaults(vmArguments);
-    }
-
-    public void setVmArguments(String vmArguments) {
-        this.vmArguments = vmArguments;
-    }
-
-    public String getProgramArguments() {
-        return commandArguments;
-    }
-
-    public void setProgramArguments(String commandArguments) {
-        this.commandArguments = commandArguments;
-    }
-
-    public String getRemotePort() {
-        return remotePort;
-    }
-
-    public void setRemotePort(String remotePort) {
-        this.remotePort = remotePort;
-
-    }
-
-
-    // Miscellaneous debugger session preferences.
-
-    public boolean getVerboseFlag() {
-        return verbose;
-    }
-
-    public void setVerboseFlag(boolean verbose) {
-        this.verbose = verbose;
-    }
-
-
-    // Thread focus.
-
-    public ThreadReference getCurrentThread() {
-        return currentThread;
-    }
-
-    public void setCurrentThread(ThreadReference t) {
-        if (t != currentThread) {
-            currentThread = t;
-            notifyCurrentThreadChanged(t);
-        }
-    }
-
-    public void setCurrentThreadInvalidate(ThreadReference t) {
-        currentThread = t;
-        notifyCurrentFrameChanged(runtime.threadInfo(t),
-                                  0, true);
-    }
-
-    public void invalidateCurrentThread() {
-        notifyCurrentFrameChanged(null, 0, true);
-    }
-
-
-    // If a view is displaying the current thread, it may
-    // choose to indicate which frame is current in the
-    // sense of the command-line UI.  It may also "warp" the
-    // selection to that frame when changed by an 'up' or 'down'
-    // command. Hence, a notifier is provided.
-
-    /******
-    public int getCurrentFrameIndex() {
-        return getCurrentFrameIndex(currentThreadInfo);
-    }
-    ******/
-
-    public int getCurrentFrameIndex(ThreadReference t) {
-        return getCurrentFrameIndex(runtime.threadInfo(t));
-    }
-
-    //### Used in StackTraceTool.
-    public int getCurrentFrameIndex(ThreadInfo tinfo) {
-        if (tinfo == null) {
-            return 0;
-        }
-        Integer currentFrame = (Integer)tinfo.getUserObject();
-        if (currentFrame == null) {
-            return 0;
-        } else {
-            return currentFrame.intValue();
-        }
-    }
-
-    public int moveCurrentFrameIndex(ThreadReference t, int count) throws VMNotInterruptedException {
-        return setCurrentFrameIndex(t,count, true);
-    }
-
-    public int setCurrentFrameIndex(ThreadReference t, int newIndex) throws VMNotInterruptedException {
-        return setCurrentFrameIndex(t, newIndex, false);
-    }
-
-    public int setCurrentFrameIndex(int newIndex) throws VMNotInterruptedException {
-        if (currentThread == null) {
-            return 0;
-        } else {
-            return setCurrentFrameIndex(currentThread, newIndex, false);
-        }
-    }
-
-    private int setCurrentFrameIndex(ThreadReference t, int x, boolean relative) throws VMNotInterruptedException {
-        boolean sameThread = t.equals(currentThread);
-        ThreadInfo tinfo = runtime.threadInfo(t);
-        if (tinfo == null) {
-            return 0;
-        }
-        int maxIndex = tinfo.getFrameCount()-1;
-        int oldIndex = getCurrentFrameIndex(tinfo);
-        int newIndex = relative? oldIndex + x : x;
-        if (newIndex > maxIndex) {
-            newIndex = maxIndex;
-        } else  if (newIndex < 0) {
-            newIndex = 0;
-        }
-        if (!sameThread || newIndex != oldIndex) {  // don't recurse
-            setCurrentFrameIndex(tinfo, newIndex);
-        }
-        return newIndex - oldIndex;
-    }
-
-    private void setCurrentFrameIndex(ThreadInfo tinfo, int index) {
-        tinfo.setUserObject(new Integer(index));
-        //### In fact, the value may not have changed at this point.
-        //### We need to signal that the user attempted to change it,
-        //### however, so that the selection can be "warped" to the
-        //### current location.
-        notifyCurrentFrameChanged(tinfo.thread(), index);
-    }
-
-    public StackFrame getCurrentFrame() throws VMNotInterruptedException {
-        return getCurrentFrame(runtime.threadInfo(currentThread));
-    }
-
-    public StackFrame getCurrentFrame(ThreadReference t) throws VMNotInterruptedException {
-        return getCurrentFrame(runtime.threadInfo(t));
-    }
-
-    public StackFrame getCurrentFrame(ThreadInfo tinfo) throws VMNotInterruptedException {
-        int index = getCurrentFrameIndex(tinfo);
-        try {
-            // It is possible, though unlikely, that the VM was interrupted
-            // before the thread created its Java stack.
-            return tinfo.getFrame(index);
-        } catch (FrameIndexOutOfBoundsException e) {
-            return null;
-        }
-    }
-
-    public void addContextListener(ContextListener cl) {
-        contextListeners.add(cl);
-    }
-
-    public void removeContextListener(ContextListener cl) {
-        contextListeners.remove(cl);
-    }
-
-    //### These notifiers are fired only in response to USER-INITIATED changes
-    //### to the current thread and current frame.  When the current thread is set automatically
-    //### after a breakpoint hit or step completion, no event is generated.  Instead,
-    //### interested parties are expected to listen for the BreakpointHit and StepCompleted
-    //### events.  This convention is unclean, and I believe that it reflects a defect in
-    //### in the current architecture.  Unfortunately, however, we cannot guarantee the
-    //### order in which various listeners receive a given event, and the handlers for
-    //### the very same events that cause automatic changes to the current thread may also
-    //### need to know the current thread.
-
-    private void notifyCurrentThreadChanged(ThreadReference t) {
-        ThreadInfo tinfo = null;
-        int index = 0;
-        if (t != null) {
-            tinfo = runtime.threadInfo(t);
-            index = getCurrentFrameIndex(tinfo);
-        }
-        notifyCurrentFrameChanged(tinfo, index, false);
-    }
-
-    private void notifyCurrentFrameChanged(ThreadReference t, int index) {
-        notifyCurrentFrameChanged(runtime.threadInfo(t),
-                                  index, false);
-    }
-
-    private void notifyCurrentFrameChanged(ThreadInfo tinfo, int index,
-                                           boolean invalidate) {
-        ArrayList<ContextListener> l =  new ArrayList<ContextListener>(contextListeners);
-        CurrentFrameChangedEvent evt =
-            new CurrentFrameChangedEvent(this, tinfo, index, invalidate);
-        for (int i = 0; i < l.size(); i++) {
-            l.get(i).currentFrameChanged(evt);
-        }
-    }
-
-    private class ContextManagerListener extends JDIAdapter
-                       implements SessionListener, JDIListener {
-
-        // SessionListener
-
-        @Override
-        public void sessionStart(EventObject e) {
-            invalidateCurrentThread();
-        }
-
-        @Override
-        public void sessionInterrupt(EventObject e) {
-            setCurrentThreadInvalidate(currentThread);
-        }
-
-        @Override
-        public void sessionContinue(EventObject e) {
-            invalidateCurrentThread();
-        }
-
-        // JDIListener
-
-        @Override
-        public void locationTrigger(LocationTriggerEventSet e) {
-            setCurrentThreadInvalidate(e.getThread());
-        }
-
-        @Override
-        public void exception(ExceptionEventSet e) {
-            setCurrentThreadInvalidate(e.getThread());
-        }
-
-        @Override
-        public void vmDisconnect(VMDisconnectEventSet e) {
-            invalidateCurrentThread();
-        }
-
-    }
-
-
-    /**
-     * Add a -classpath argument to the arguments passed to the exec'ed
-     * VM with the contents of CLASSPATH environment variable,
-     * if -classpath was not already specified.
-     *
-     * @param javaArgs the arguments to the VM being exec'd that
-     *                 potentially has a user specified -classpath argument.
-     * @return a javaArgs whose -classpath option has been added
-     */
-
-    private String processClasspathDefaults(String javaArgs) {
-        if (javaArgs.indexOf("-classpath ") == -1) {
-            StringBuffer munged = new StringBuffer(javaArgs);
-            SearchPath classpath = classManager.getClassPath();
-            if (classpath.isEmpty()) {
-                String envcp = System.getProperty("env.class.path");
-                if ((envcp != null) && (envcp.length() > 0)) {
-                    munged.append(" -classpath " + envcp);
-                }
-            } else {
-                munged.append(" -classpath " + classpath.asString());
-            }
-            return munged.toString();
-        } else {
-            return javaArgs;
-        }
-    }
-
-    private String appendPath(String path1, String path2) {
-        if (path1 == null || path1.length() == 0) {
-            return path2 == null ? "." : path2;
-        } else if (path2 == null || path2.length() == 0) {
-            return path1;
-        } else {
-            return path1  + File.pathSeparator + path2;
-        }
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/gui/CurrentFrameChangedEvent.java b/ojluni/src/main/java/com/sun/tools/example/debug/gui/CurrentFrameChangedEvent.java
deleted file mode 100755
index 90f2967..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/gui/CurrentFrameChangedEvent.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Copyright (c) 1998, 1999, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.gui;
-
-import com.sun.jdi.*;
-import com.sun.tools.example.debug.bdi.*;
-import java.util.EventObject;
-
-public class CurrentFrameChangedEvent extends EventObject {
-
-    private static final long serialVersionUID = 4214479486546762179L;
-    private ThreadInfo tinfo;
-    private int index;
-    private boolean invalidate;
-
-    public CurrentFrameChangedEvent(Object source, ThreadInfo tinfo,
-                                    int index, boolean invalidate) {
-        super(source);
-        this.tinfo = tinfo;
-        this.index = index;
-        this.invalidate = invalidate;
-    }
-
-    public ThreadReference getThread() {
-        return tinfo == null? null : tinfo.thread();
-    }
-
-    public ThreadInfo getThreadInfo() {
-        return tinfo;
-    }
-
-    public int getIndex() {
-        return index;
-    }
-
-    public boolean getInvalidate() {
-        return invalidate;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/gui/Environment.java b/ojluni/src/main/java/com/sun/tools/example/debug/gui/Environment.java
deleted file mode 100755
index 6dc57a9..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/gui/Environment.java
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- * Copyright (c) 1998, 1999, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.gui;
-
-import java.io.*;
-import com.sun.jdi.*;
-import com.sun.tools.example.debug.bdi.*;
-
-public class Environment {
-
-    private SourceManager sourceManager;
-    private ClassManager classManager;
-    private ContextManager contextManager;
-    private MonitorListModel monitorListModel;
-    private ExecutionManager runtime;
-
-    private PrintWriter typeScript;
-
-    private boolean verbose;
-
-    public Environment() {
-        this.classManager = new ClassManager(this);
-        //### Order of the next three lines is important!  (FIX THIS)
-        this.runtime = new ExecutionManager();
-        this.sourceManager = new SourceManager(this);
-        this.contextManager = new ContextManager(this);
-        this.monitorListModel = new MonitorListModel(this);
-    }
-
-    // Services used by debugging tools.
-
-    public SourceManager getSourceManager() {
-        return sourceManager;
-    }
-
-    public ClassManager getClassManager() {
-        return classManager;
-    }
-
-    public ContextManager getContextManager() {
-        return contextManager;
-    }
-
-    public MonitorListModel getMonitorListModel() {
-        return monitorListModel;
-    }
-
-    public ExecutionManager getExecutionManager() {
-        return runtime;
-    }
-
-    //### TODO:
-    //### Tools should attach/detach from environment
-    //### via a property, which should call an 'addTool'
-    //### method when set to maintain a registry of
-    //### tools for exit-time cleanup, etc.  Tool
-    //### class constructors should be argument-free, so
-    //### that they may be instantiated by bean builders.
-    //### Will also need 'removeTool' in case property
-    //### value is changed.
-    //
-    // public void addTool(Tool t);
-    // public void removeTool(Tool t);
-
-     public void terminate() {
-         System.exit(0);
-     }
-
-    // public void refresh();    // notify all tools to refresh their views
-
-
-    // public void addStatusListener(StatusListener l);
-    // public void removeStatusListener(StatusListener l);
-
-    // public void addOutputListener(OutputListener l);
-    // public void removeOutputListener(OutputListener l);
-
-    public void setTypeScript(PrintWriter writer) {
-        typeScript = writer;
-    }
-
-    public void error(String message) {
-        if (typeScript != null) {
-            typeScript.println(message);
-        } else {
-            System.out.println(message);
-        }
-    }
-
-    public void failure(String message) {
-        if (typeScript != null) {
-            typeScript.println(message);
-        } else {
-            System.out.println(message);
-        }
-    }
-
-    public void notice(String message) {
-        if (typeScript != null) {
-            typeScript.println(message);
-        } else {
-            System.out.println(message);
-        }
-    }
-
-    public OutputSink getOutputSink() {
-        return new OutputSink(typeScript);
-    }
-
-    public void viewSource(String fileName) {
-        //### HACK ###
-        //### Should use listener here.
-        com.sun.tools.example.debug.gui.GUI.srcTool.showSourceFile(fileName);
-    }
-
-    public void viewLocation(Location locn) {
-        //### HACK ###
-        //### Should use listener here.
-        //### Should we use sourceForLocation here?
-        com.sun.tools.example.debug.gui.GUI.srcTool.showSourceForLocation(locn);
-    }
-
-    //### Also in 'ContextManager'.  Do we need both?
-
-    public boolean getVerboseFlag() {
-        return verbose;
-    }
-
-    public void setVerboseFlag(boolean verbose) {
-        this.verbose = verbose;
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/gui/GUI.java b/ojluni/src/main/java/com/sun/tools/example/debug/gui/GUI.java
deleted file mode 100755
index b9ae173..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/gui/GUI.java
+++ /dev/null
@@ -1,265 +0,0 @@
-/*
- * Copyright (c) 1998, 1999, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.gui;
-
-import java.io.*;
-import javax.swing.*;
-import javax.swing.border.*;
-import java.awt.*;
-import java.awt.event.*;
-
-import com.sun.jdi.*;
-import com.sun.tools.example.debug.bdi.*;
-
-public class GUI extends JPanel {
-
-    private static final long serialVersionUID = 3292463234530679091L;
-    private CommandTool cmdTool;
-    private ApplicationTool appTool;
-    //###HACK##
-    //### There is currently dirty code in Environment that
-    //### accesses this directly.
-    //private SourceTool srcTool;
-    public static SourceTool srcTool;
-
-    private SourceTreeTool sourceTreeTool;
-    private ClassTreeTool classTreeTool;
-    private ThreadTreeTool threadTreeTool;
-    private StackTraceTool stackTool;
-    private MonitorTool monitorTool;
-
-    public static final String progname = "javadt";
-    public static final String version = "1.0Beta";  //### FIX ME.
-    public static final String windowBanner = "Java(tm) platform Debug Tool";
-
-    private Font fixedFont = new Font("monospaced", Font.PLAIN, 10);
-
-    private GUI(Environment env) {
-        setLayout(new BorderLayout());
-
-        setBorder(new EmptyBorder(5, 5, 5, 5));
-
-        add(new JDBToolBar(env), BorderLayout.NORTH);
-
-        srcTool = new SourceTool(env);
-        srcTool.setPreferredSize(new java.awt.Dimension(500, 300));
-        srcTool.setTextFont(fixedFont);
-
-        stackTool = new StackTraceTool(env);
-        stackTool.setPreferredSize(new java.awt.Dimension(500, 100));
-
-        monitorTool = new MonitorTool(env);
-        monitorTool.setPreferredSize(new java.awt.Dimension(500, 50));
-
-        JSplitPane right = new JSplitPane(JSplitPane.VERTICAL_SPLIT, srcTool,
-            new JSplitPane(JSplitPane.VERTICAL_SPLIT, stackTool, monitorTool));
-
-        sourceTreeTool = new SourceTreeTool(env);
-        sourceTreeTool.setPreferredSize(new java.awt.Dimension(200, 450));
-
-        classTreeTool = new ClassTreeTool(env);
-        classTreeTool.setPreferredSize(new java.awt.Dimension(200, 450));
-
-        threadTreeTool = new ThreadTreeTool(env);
-        threadTreeTool.setPreferredSize(new java.awt.Dimension(200, 450));
-
-        JTabbedPane treePane = new JTabbedPane(SwingConstants.BOTTOM);
-        treePane.addTab("Source", null, sourceTreeTool);
-        treePane.addTab("Classes", null, classTreeTool);
-        treePane.addTab("Threads", null, threadTreeTool);
-
-        JSplitPane centerTop = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, treePane, right);
-
-        cmdTool = new CommandTool(env);
-        cmdTool.setPreferredSize(new java.awt.Dimension(700, 150));
-
-        appTool = new ApplicationTool(env);
-        appTool.setPreferredSize(new java.awt.Dimension(700, 200));
-
-        JSplitPane centerBottom = new JSplitPane(JSplitPane.VERTICAL_SPLIT, cmdTool, appTool);
-        //        centerBottom.setPreferredSize(new java.awt.Dimension(700, 350));
-
-        JSplitPane center = new JSplitPane(JSplitPane.VERTICAL_SPLIT, centerTop, centerBottom);
-
-        add(center, BorderLayout.CENTER);
-
-
-    }
-
-    private static void usage() {
-        String separator = File.pathSeparator;
-        System.out.println("Usage: " + progname + " <options> <class> <arguments>");
-        System.out.println();
-        System.out.println("where options include:");
-        System.out.println("    -help             print out this message and exit");
-        System.out.println("    -sourcepath <directories separated by \"" +
-                           separator + "\">");
-        System.out.println("                      list directories in which to look for source files");
-        System.out.println("    -remote <hostname>:<port-number>");
-        System.out.println("                      host machine and port number of interpreter to attach to");
-        System.out.println("    -dbgtrace [flags] print info for debugging " + progname);
-        System.out.println();
-        System.out.println("options forwarded to debuggee process:");
-        System.out.println("    -v -verbose[:class|gc|jni]");
-        System.out.println("                      turn on verbose mode");
-        System.out.println("    -D<name>=<value>  set a system property");
-        System.out.println("    -classpath <directories separated by \"" +
-                           separator + "\">");
-        System.out.println("                      list directories in which to look for classes");
-        System.out.println("    -X<option>        non-standard debuggee VM option");
-        System.out.println();
-        System.out.println("<class> is the name of the class to begin debugging");
-        System.out.println("<arguments> are the arguments passed to the main() method of <class>");
-        System.out.println();
-        System.out.println("For command help type 'help' at " + progname + " prompt");
-    }
-
-    public static void main(String argv[]) {
-        String clsName = "";
-        String progArgs = "";
-        String javaArgs = "";
-        final Environment env = new Environment();
-
-        JPanel mainPanel = new GUI(env);
-
-        ContextManager context = env.getContextManager();
-        ExecutionManager runtime = env.getExecutionManager();
-
-        for (int i = 0; i < argv.length; i++) {
-            String token = argv[i];
-            if (token.equals("-dbgtrace")) {
-            if ((i == argv.length - 1) ||
-                ! Character.isDigit(argv[i+1].charAt(0))) {
-                runtime.setTraceMode(VirtualMachine.TRACE_ALL);
-            } else {
-                String flagStr = argv[++i];
-                runtime.setTraceMode(Integer.decode(flagStr).intValue());
-            }
-        } else if (token.equals("-X")) {
-                System.out.println(
-                       "Use 'java -X' to see the available non-standard options");
-                System.out.println();
-                usage();
-                System.exit(1);
-            } else if (
-                   // Standard VM options passed on
-                   token.equals("-v") || token.startsWith("-v:") ||  // -v[:...]
-                   token.startsWith("-verbose") ||                  // -verbose[:...]
-                   token.startsWith("-D") ||
-                   // NonStandard options passed on
-                   token.startsWith("-X") ||
-                   // Old-style options
-                   // (These should remain in place as long as the standard VM accepts them)
-                   token.equals("-noasyncgc") || token.equals("-prof") ||
-                   token.equals("-verify") || token.equals("-noverify") ||
-                   token.equals("-verifyremote") ||
-                   token.equals("-verbosegc") ||
-                   token.startsWith("-ms") || token.startsWith("-mx") ||
-                   token.startsWith("-ss") || token.startsWith("-oss") ) {
-                javaArgs += token + " ";
-            } else if (token.equals("-sourcepath")) {
-                if (i == (argv.length - 1)) {
-                    System.out.println("No sourcepath specified.");
-                    usage();
-                    System.exit(1);
-                }
-                env.getSourceManager().setSourcePath(new SearchPath(argv[++i]));
-            } else if (token.equals("-classpath")) {
-                if (i == (argv.length - 1)) {
-                    System.out.println("No classpath specified.");
-                    usage();
-                    System.exit(1);
-                }
-                env.getClassManager().setClassPath(new SearchPath(argv[++i]));
-            } else if (token.equals("-remote")) {
-                if (i == (argv.length - 1)) {
-                    System.out.println("No remote specified.");
-                    usage();
-                    System.exit(1);
-                }
-                env.getContextManager().setRemotePort(argv[++i]);
-            } else if (token.equals("-help")) {
-                usage();
-                System.exit(0);
-            } else if (token.equals("-version")) {
-                System.out.println(progname + " version " + version);
-                System.exit(0);
-            } else if (token.startsWith("-")) {
-                System.out.println("invalid option: " + token);
-                usage();
-                System.exit(1);
-            } else {
-                // Everything from here is part of the command line
-                clsName = token;
-                for (i++; i < argv.length; i++) {
-                    progArgs += argv[i] + " ";
-                }
-                break;
-            }
-        }
-
-        context.setMainClassName(clsName);
-        context.setProgramArguments(progArgs);
-        context.setVmArguments(javaArgs);
-
-        // Force Cross Platform L&F
-        try {
-            UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
-            // If you want the System L&F instead, comment out the above line and
-            // uncomment the following:
-            // UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
-        } catch (Exception exc) {
-            System.err.println("Error loading L&F: " + exc);
-        }
-
-        JFrame frame = new JFrame();
-        frame.setBackground(Color.lightGray);
-        frame.setTitle(windowBanner);
-        frame.setJMenuBar(new JDBMenuBar(env));
-        frame.setContentPane(mainPanel);
-
-        frame.addWindowListener(new WindowAdapter() {
-            @Override
-            public void windowClosing(WindowEvent e) {
-                env.terminate();
-            }
-        });
-
-        frame.pack();
-        frame.setVisible(true);
-
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/gui/Icons.java b/ojluni/src/main/java/com/sun/tools/example/debug/gui/Icons.java
deleted file mode 100755
index 87173d2..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/gui/Icons.java
+++ /dev/null
@@ -1,218 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.gui;
-
-import javax.swing.Icon;
-import javax.swing.ImageIcon;
-
-class Icons {
-
-    private static int[]  exec  = {
-  0xffd8ffe0, 0x00104a46, 0x49460001, 0x01020000
-, 0x00000000, 0xffdb0043, 0x00020101, 0x01010102
-, 0x01010102, 0x02020202, 0x04030202, 0x02020504
-, 0x04030406, 0x05060606, 0x05060606, 0x07090806
-, 0x07090706, 0x06080b08, 0x090a0a0a, 0x0a0a0608
-, 0x0b0c0b0a, 0x0c090a0a, 0x0affdb00, 0x43010202
-, 0x02020202, 0x05030305, 0x0a070607, 0x0a0a0a0a
-, 0x0a0a0a0a, 0x0a0a0a0a, 0x0a0a0a0a, 0x0a0a0a0a
-, 0x0a0a0a0a, 0x0a0a0a0a, 0x0a0a0a0a, 0x0a0a0a0a
-, 0x0a0a0a0a, 0x0a0a0a0a, 0x0a0a0a0a, 0x0a0affc0
-, 0x00110800, 0x0c000c03, 0x01220002, 0x11010311
-, 0x01ffc400, 0x1f000001, 0x05010101, 0x01010100
-, 0x00000000, 0x00000001, 0x02030405, 0x06070809
-, 0x0a0bffc4, 0x00b51000, 0x02010303, 0x02040305
-, 0x05040400, 0x00017d01, 0x02030004, 0x11051221
-, 0x31410613, 0x51610722, 0x71143281, 0x91a10823
-, 0x42b1c115, 0x52d1f024, 0x33627282, 0x090a1617
-, 0x18191a25, 0x26272829, 0x2a343536, 0x3738393a
-, 0x43444546, 0x4748494a, 0x53545556, 0x5758595a
-, 0x63646566, 0x6768696a, 0x73747576, 0x7778797a
-, 0x83848586, 0x8788898a, 0x92939495, 0x96979899
-, 0x9aa2a3a4, 0xa5a6a7a8, 0xa9aab2b3, 0xb4b5b6b7
-, 0xb8b9bac2, 0xc3c4c5c6, 0xc7c8c9ca, 0xd2d3d4d5
-, 0xd6d7d8d9, 0xdae1e2e3, 0xe4e5e6e7, 0xe8e9eaf1
-, 0xf2f3f4f5, 0xf6f7f8f9, 0xfaffc400, 0x1f010003
-, 0x01010101, 0x01010101, 0x01000000, 0x00000001
-, 0x02030405, 0x06070809, 0x0a0bffc4, 0x00b51100
-, 0x02010204, 0x04030407, 0x05040400, 0x01027700
-, 0x01020311, 0x04052131, 0x06124151, 0x07617113
-, 0x22328108, 0x144291a1, 0xb1c10923, 0x3352f015
-, 0x6272d10a, 0x162434e1, 0x25f11718, 0x191a2627
-, 0x28292a35, 0x36373839, 0x3a434445, 0x46474849
-, 0x4a535455, 0x56575859, 0x5a636465, 0x66676869
-, 0x6a737475, 0x76777879, 0x7a828384, 0x85868788
-, 0x898a9293, 0x94959697, 0x98999aa2, 0xa3a4a5a6
-, 0xa7a8a9aa, 0xb2b3b4b5, 0xb6b7b8b9, 0xbac2c3c4
-, 0xc5c6c7c8, 0xc9cad2d3, 0xd4d5d6d7, 0xd8d9dae2
-, 0xe3e4e5e6, 0xe7e8e9ea, 0xf2f3f4f5, 0xf6f7f8f9
-, 0xfaffda00, 0x0c030100, 0x02110311, 0x003f00fd
-, 0xbafda27e, 0x35ea1f03, 0x346f0ef8, 0x86cfc2d3
-, 0x6b31ea9e, 0x2ab7d2ee, 0xf4fb38cb, 0x5cc91cb0
-, 0xce4790a0, 0xfcd2ef44, 0xc29e1f95, 0xf94b065f
-, 0x42a86eb4, 0xed3ef67b, 0x7b9bcb18, 0x6692ce63
-, 0x35a492c4, 0x19a090a3, 0x465d09fb, 0xadb1dd72
-, 0x39daec3a, 0x13535706, 0x1f0f8ca7, 0x8dad56a5
-, 0x5e6a72e5, 0xe485be0b, 0x2b49df77, 0xcceda6ca
-, 0xda6ece3a, 0x147150c5, 0xd5a93a97, 0x84b97963
-, 0x6f86cbde, 0x77ddf33b, 0x69b2b69b, 0xb3ffd900
-
-    };
-    private static int[]  blank  = {
-  0xffd8ffe0, 0x00104a46, 0x49460001, 0x01020000
-, 0x00000000, 0xffdb0043, 0x00020101, 0x01010102
-, 0x01010102, 0x02020202, 0x04030202, 0x02020504
-, 0x04030406, 0x05060606, 0x05060606, 0x07090806
-, 0x07090706, 0x06080b08, 0x090a0a0a, 0x0a0a0608
-, 0x0b0c0b0a, 0x0c090a0a, 0x0affdb00, 0x43010202
-, 0x02020202, 0x05030305, 0x0a070607, 0x0a0a0a0a
-, 0x0a0a0a0a, 0x0a0a0a0a, 0x0a0a0a0a, 0x0a0a0a0a
-, 0x0a0a0a0a, 0x0a0a0a0a, 0x0a0a0a0a, 0x0a0a0a0a
-, 0x0a0a0a0a, 0x0a0a0a0a, 0x0a0a0a0a, 0x0a0affc0
-, 0x00110800, 0x0c000c03, 0x01220002, 0x11010311
-, 0x01ffc400, 0x1f000001, 0x05010101, 0x01010100
-, 0x00000000, 0x00000001, 0x02030405, 0x06070809
-, 0x0a0bffc4, 0x00b51000, 0x02010303, 0x02040305
-, 0x05040400, 0x00017d01, 0x02030004, 0x11051221
-, 0x31410613, 0x51610722, 0x71143281, 0x91a10823
-, 0x42b1c115, 0x52d1f024, 0x33627282, 0x090a1617
-, 0x18191a25, 0x26272829, 0x2a343536, 0x3738393a
-, 0x43444546, 0x4748494a, 0x53545556, 0x5758595a
-, 0x63646566, 0x6768696a, 0x73747576, 0x7778797a
-, 0x83848586, 0x8788898a, 0x92939495, 0x96979899
-, 0x9aa2a3a4, 0xa5a6a7a8, 0xa9aab2b3, 0xb4b5b6b7
-, 0xb8b9bac2, 0xc3c4c5c6, 0xc7c8c9ca, 0xd2d3d4d5
-, 0xd6d7d8d9, 0xdae1e2e3, 0xe4e5e6e7, 0xe8e9eaf1
-, 0xf2f3f4f5, 0xf6f7f8f9, 0xfaffc400, 0x1f010003
-, 0x01010101, 0x01010101, 0x01000000, 0x00000001
-, 0x02030405, 0x06070809, 0x0a0bffc4, 0x00b51100
-, 0x02010204, 0x04030407, 0x05040400, 0x01027700
-, 0x01020311, 0x04052131, 0x06124151, 0x07617113
-, 0x22328108, 0x144291a1, 0xb1c10923, 0x3352f015
-, 0x6272d10a, 0x162434e1, 0x25f11718, 0x191a2627
-, 0x28292a35, 0x36373839, 0x3a434445, 0x46474849
-, 0x4a535455, 0x56575859, 0x5a636465, 0x66676869
-, 0x6a737475, 0x76777879, 0x7a828384, 0x85868788
-, 0x898a9293, 0x94959697, 0x98999aa2, 0xa3a4a5a6
-, 0xa7a8a9aa, 0xb2b3b4b5, 0xb6b7b8b9, 0xbac2c3c4
-, 0xc5c6c7c8, 0xc9cad2d3, 0xd4d5d6d7, 0xd8d9dae2
-, 0xe3e4e5e6, 0xe7e8e9ea, 0xf2f3f4f5, 0xf6f7f8f9
-, 0xfaffda00, 0x0c030100, 0x02110311, 0x003f00fd
-, 0xfca28a28, 0x03ffd900
-
-    };
-
-   private static int[] stopSignWords = {
-  0xffd8ffe0, 0x00104a46, 0x49460001, 0x01020000
-, 0x00000000, 0xffdb0043, 0x00020101, 0x01010102
-, 0x01010102, 0x02020202, 0x04030202, 0x02020504
-, 0x04030406, 0x05060606, 0x05060606, 0x07090806
-, 0x07090706, 0x06080b08, 0x090a0a0a, 0x0a0a0608
-, 0x0b0c0b0a, 0x0c090a0a, 0x0affdb00, 0x43010202
-, 0x02020202, 0x05030305, 0x0a070607, 0x0a0a0a0a
-, 0x0a0a0a0a, 0x0a0a0a0a, 0x0a0a0a0a, 0x0a0a0a0a
-, 0x0a0a0a0a, 0x0a0a0a0a, 0x0a0a0a0a, 0x0a0a0a0a
-, 0x0a0a0a0a, 0x0a0a0a0a, 0x0a0a0a0a, 0x0a0affc0
-, 0x00110800, 0x0c000c03, 0x01220002, 0x11010311
-, 0x01ffc400, 0x1f000001, 0x05010101, 0x01010100
-, 0x00000000, 0x00000001, 0x02030405, 0x06070809
-, 0x0a0bffc4, 0x00b51000, 0x02010303, 0x02040305
-, 0x05040400, 0x00017d01, 0x02030004, 0x11051221
-, 0x31410613, 0x51610722, 0x71143281, 0x91a10823
-, 0x42b1c115, 0x52d1f024, 0x33627282, 0x090a1617
-, 0x18191a25, 0x26272829, 0x2a343536, 0x3738393a
-, 0x43444546, 0x4748494a, 0x53545556, 0x5758595a
-, 0x63646566, 0x6768696a, 0x73747576, 0x7778797a
-, 0x83848586, 0x8788898a, 0x92939495, 0x96979899
-, 0x9aa2a3a4, 0xa5a6a7a8, 0xa9aab2b3, 0xb4b5b6b7
-, 0xb8b9bac2, 0xc3c4c5c6, 0xc7c8c9ca, 0xd2d3d4d5
-, 0xd6d7d8d9, 0xdae1e2e3, 0xe4e5e6e7, 0xe8e9eaf1
-, 0xf2f3f4f5, 0xf6f7f8f9, 0xfaffc400, 0x1f010003
-, 0x01010101, 0x01010101, 0x01000000, 0x00000001
-, 0x02030405, 0x06070809, 0x0a0bffc4, 0x00b51100
-, 0x02010204, 0x04030407, 0x05040400, 0x01027700
-, 0x01020311, 0x04052131, 0x06124151, 0x07617113
-, 0x22328108, 0x144291a1, 0xb1c10923, 0x3352f015
-, 0x6272d10a, 0x162434e1, 0x25f11718, 0x191a2627
-, 0x28292a35, 0x36373839, 0x3a434445, 0x46474849
-, 0x4a535455, 0x56575859, 0x5a636465, 0x66676869
-, 0x6a737475, 0x76777879, 0x7a828384, 0x85868788
-, 0x898a9293, 0x94959697, 0x98999aa2, 0xa3a4a5a6
-, 0xa7a8a9aa, 0xb2b3b4b5, 0xb6b7b8b9, 0xbac2c3c4
-, 0xc5c6c7c8, 0xc9cad2d3, 0xd4d5d6d7, 0xd8d9dae2
-, 0xe3e4e5e6, 0xe7e8e9ea, 0xf2f3f4f5, 0xf6f7f8f9
-, 0xfaffda00, 0x0c030100, 0x02110311, 0x003f00f8
-, 0xe7e37fc6, 0xff00197f, 0xc142fc65, 0x17ed5bfb
-, 0x56db699e, 0x27f14f89, 0xf4cb7b85, 0x5bcd3924
-, 0xb5d1ed5d, 0x3cc8b4db, 0x08a4ddf6, 0x6b387cc6
-, 0x09182599, 0x99e595e5, 0x9e69a693, 0xbaf0dffc
-, 0x1c9dff00, 0x050aff00, 0x82637837, 0x44fd94be
-, 0x11e89f0f, 0xfc61e16d, 0x334c5b8f, 0x0f37c45d
-, 0x26fef2eb, 0x46b56778, 0xd34db796, 0xd6fadbfd
-, 0x0e2f2898, 0xa3903b42, 0xb21891d6, 0x08e08623
-, 0xfe0e4ef0, 0xdf837fe0, 0x98dff050, 0xbb2f847f
-, 0xb2978274, 0xcd33c2de, 0x30f87f69, 0xe2e6f0f5
-, 0xe44ef6ba, 0x35d5c5fe, 0xa16b2dad, 0x8246d1f9
-, 0x167fe84b, 0x2a40772c, 0x2d33c717, 0x9702c304
-, 0x5fb0dff0, 0x4abff825, 0x5ffc13d7, 0xc55ff04f
-, 0x5f845f17, 0x3e2e7ec8, 0xbf0ffe21, 0xf8a7e21f
-, 0xc3fd1fc5, 0xde21f10f, 0xc45f0758, 0x6b774b75
-, 0xa9584174, 0xf6b6ef75, 0x0b7d9ace, 0x1f304514
-, 0x11ed50a8, 0x647f3279, 0x679e5fcf, 0x720cbb37
-, 0xc3f1257a, 0x95eb7343, 0xdebabc9d, 0xeef4d1ab
-, 0x2b7e1b2d, 0x0fec0f16, 0xb8c7c3cc, 0xdbc15caf
-, 0x0795e59e, 0xc710fd97, 0x2cfd9d38, 0xf2f241aa
-, 0x9efc64e5, 0x2e67dd7b, 0xdf14acd1, 0xffd90000
-
-};
-
-    static private byte[] wordsToBytes(int[] wordArray) {
-        byte[] bytes = new byte[wordArray.length * 4];
-        int inx = bytes.length;
-        for (int i = wordArray.length-1; i >= 0; --i) {
-            int word = wordArray[i];
-            for (int j = 0; j < 4; ++j) {
-                bytes[--inx] = (byte)(word & 0xff);
-                word = word >>> 8;
-            }
-        }
-        return bytes;
-    }
-
-    static Icon stopSignIcon = new ImageIcon(wordsToBytes(stopSignWords));
-    static Icon blankIcon = new ImageIcon(wordsToBytes(blank));
-
-    static Icon execIcon = new ImageIcon(wordsToBytes(exec));
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/gui/JDBFileFilter.java b/ojluni/src/main/java/com/sun/tools/example/debug/gui/JDBFileFilter.java
deleted file mode 100755
index 6d6bf77..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/gui/JDBFileFilter.java
+++ /dev/null
@@ -1,278 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.gui;
-
-import java.io.File;
-import java.util.Hashtable;
-import java.util.Enumeration;
-import javax.swing.filechooser.*;
-
-//### Renamed from 'ExampleFileFilter.java' provided with Swing demos.
-
-/**
- * A convenience implementation of FileFilter that filters out
- * all files except for those type extensions that it knows about.
- *
- * Extensions are of the type ".foo", which is typically found on
- * Windows and Unix boxes, but not on Macinthosh. Case is ignored.
- *
- * Example - create a new filter that filerts out all files
- * but gif and jpg image files:
- *
- *     JFileChooser chooser = new JFileChooser();
- *     ExampleFileFilter filter = new ExampleFileFilter(
- *                   new String{"gif", "jpg"}, "JPEG & GIF Images")
- *     chooser.addChoosableFileFilter(filter);
- *     chooser.showOpenDialog(this);
- *
- * @author Jeff Dinkins
- */
-
-public class JDBFileFilter extends FileFilter {
-
-    private static String TYPE_UNKNOWN = "Type Unknown";
-    private static String HIDDEN_FILE = "Hidden File";
-
-    private Hashtable<String, JDBFileFilter> filters = null;
-    private String description = null;
-    private String fullDescription = null;
-    private boolean useExtensionsInDescription = true;
-
-    /**
-     * Creates a file filter. If no filters are added, then all
-     * files are accepted.
-     *
-     * @see #addExtension
-     */
-    public JDBFileFilter() {
-        this.filters = new Hashtable<String, JDBFileFilter>();
-    }
-
-    /**
-     * Creates a file filter that accepts files with the given extension.
-     * Example: new JDBFileFilter("jpg");
-     *
-     * @see #addExtension
-     */
-    public JDBFileFilter(String extension) {
-        this(extension,null);
-    }
-
-    /**
-     * Creates a file filter that accepts the given file type.
-     * Example: new JDBFileFilter("jpg", "JPEG Image Images");
-     *
-     * Note that the "." before the extension is not needed. If
-     * provided, it will be ignored.
-     *
-     * @see #addExtension
-     */
-    public JDBFileFilter(String extension, String description) {
-        this();
-        if(extension!=null) {
-         addExtension(extension);
-      }
-        if(description!=null) {
-         setDescription(description);
-      }
-    }
-
-    /**
-     * Creates a file filter from the given string array.
-     * Example: new JDBFileFilter(String {"gif", "jpg"});
-     *
-     * Note that the "." before the extension is not needed adn
-     * will be ignored.
-     *
-     * @see #addExtension
-     */
-    public JDBFileFilter(String[] filters) {
-        this(filters, null);
-    }
-
-    /**
-     * Creates a file filter from the given string array and description.
-     * Example: new JDBFileFilter(String {"gif", "jpg"}, "Gif and JPG Images");
-     *
-     * Note that the "." before the extension is not needed and will be ignored.
-     *
-     * @see #addExtension
-     */
-    public JDBFileFilter(String[] filters, String description) {
-        this();
-        for (String filter : filters) {
-            // add filters one by one
-            addExtension(filter);
-        }
-        if(description!=null) {
-         setDescription(description);
-      }
-    }
-
-    /**
-     * Return true if this file should be shown in the directory pane,
-     * false if it shouldn't.
-     *
-     * Files that begin with "." are ignored.
-     *
-     * @see #getExtension
-     * @see FileFilter#accepts
-     */
-    @Override
-    public boolean accept(File f) {
-        if(f != null) {
-            if(f.isDirectory()) {
-                return true;
-            }
-            String extension = getExtension(f);
-            if(extension != null && filters.get(getExtension(f)) != null) {
-                return true;
-            };
-        }
-        return false;
-    }
-
-    /**
-     * Return the extension portion of the file's name .
-     *
-     * @see #getExtension
-     * @see FileFilter#accept
-     */
-     public String getExtension(File f) {
-        if(f != null) {
-            String filename = f.getName();
-            int i = filename.lastIndexOf('.');
-            if(i>0 && i<filename.length()-1) {
-                return filename.substring(i+1).toLowerCase();
-            };
-        }
-        return null;
-    }
-
-    /**
-     * Adds a filetype "dot" extension to filter against.
-     *
-     * For example: the following code will create a filter that filters
-     * out all files except those that end in ".jpg" and ".tif":
-     *
-     *   JDBFileFilter filter = new JDBFileFilter();
-     *   filter.addExtension("jpg");
-     *   filter.addExtension("tif");
-     *
-     * Note that the "." before the extension is not needed and will be ignored.
-     */
-    public void addExtension(String extension) {
-        if(filters == null) {
-            filters = new Hashtable<String, JDBFileFilter>(5);
-        }
-        filters.put(extension.toLowerCase(), this);
-        fullDescription = null;
-    }
-
-
-    /**
-     * Returns the human readable description of this filter. For
-     * example: "JPEG and GIF Image Files (*.jpg, *.gif)"
-     *
-     * @see setDescription
-     * @see setExtensionListInDescription
-     * @see isExtensionListInDescription
-     * @see FileFilter#getDescription
-     */
-    @Override
-    public String getDescription() {
-        if(fullDescription == null) {
-            if(description == null || isExtensionListInDescription()) {
-                fullDescription = description==null ? "(" : description + " (";
-                // build the description from the extension list
-                Enumeration<String> extensions = filters.keys();
-                if(extensions != null) {
-                    fullDescription += "." + extensions.nextElement();
-                    while (extensions.hasMoreElements()) {
-                        fullDescription += ", " + extensions.nextElement();
-                    }
-                }
-                fullDescription += ")";
-            } else {
-                fullDescription = description;
-            }
-        }
-        return fullDescription;
-    }
-
-    /**
-     * Sets the human readable description of this filter. For
-     * example: filter.setDescription("Gif and JPG Images");
-     *
-     * @see setDescription
-     * @see setExtensionListInDescription
-     * @see isExtensionListInDescription
-     */
-    public void setDescription(String description) {
-        this.description = description;
-        fullDescription = null;
-    }
-
-    /**
-     * Determines whether the extension list (.jpg, .gif, etc) should
-     * show up in the human readable description.
-     *
-     * Only relevent if a description was provided in the constructor
-     * or using setDescription();
-     *
-     * @see getDescription
-     * @see setDescription
-     * @see isExtensionListInDescription
-     */
-    public void setExtensionListInDescription(boolean b) {
-        useExtensionsInDescription = b;
-        fullDescription = null;
-    }
-
-    /**
-     * Returns whether the extension list (.jpg, .gif, etc) should
-     * show up in the human readable description.
-     *
-     * Only relevent if a description was provided in the constructor
-     * or using setDescription();
-     *
-     * @see getDescription
-     * @see setDescription
-     * @see setExtensionListInDescription
-     */
-    public boolean isExtensionListInDescription() {
-        return useExtensionsInDescription;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/gui/JDBMenuBar.java b/ojluni/src/main/java/com/sun/tools/example/debug/gui/JDBMenuBar.java
deleted file mode 100755
index 22329cf..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/gui/JDBMenuBar.java
+++ /dev/null
@@ -1,199 +0,0 @@
-/*
- * Copyright (c) 1998, 1999, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.gui;
-
-import javax.swing.*;
-import java.awt.*;
-import java.awt.event.*;
-import java.util.Vector;
-import java.util.List;
-
-import com.sun.tools.example.debug.bdi.*;
-
-//### This is currently just a placeholder!
-
-class JDBMenuBar extends JMenuBar {
-
-    Environment env;
-
-    ExecutionManager runtime;
-    ClassManager classManager;
-    SourceManager sourceManager;
-
-    CommandInterpreter interpreter;
-
-    JDBMenuBar(Environment env) {
-        this.env = env;
-        this.runtime = env.getExecutionManager();
-        this.classManager = env.getClassManager();
-        this.sourceManager = env.getSourceManager();
-        this.interpreter = new CommandInterpreter(env, true);
-
-        JMenu fileMenu = new JMenu("File");
-
-        JMenuItem openItem = new JMenuItem("Open...", 'O');
-        openItem.addActionListener(new ActionListener() {
-            @Override
-            public void actionPerformed(ActionEvent e) {
-                openCommand();
-            }
-        });
-        fileMenu.add(openItem);
-        addTool(fileMenu, "Exit debugger", "Exit", "exit");
-
-        JMenu cmdMenu = new JMenu("Commands");
-
-        addTool(cmdMenu, "Step into next line", "Step", "step");
-        addTool(cmdMenu, "Step over next line", "Next", "next");
-        cmdMenu.addSeparator();
-
-        addTool(cmdMenu, "Step into next instruction",
-                "Step Instruction", "stepi");
-        addTool(cmdMenu, "Step over next instruction",
-                "Next Instruction", "nexti");
-        cmdMenu.addSeparator();
-
-        addTool(cmdMenu, "Step out of current method call",
-                "Step Up", "step up");
-        cmdMenu.addSeparator();
-
-        addTool(cmdMenu, "Suspend execution", "Interrupt", "interrupt");
-        addTool(cmdMenu, "Continue execution", "Continue", "cont");
-        cmdMenu.addSeparator();
-
-        addTool(cmdMenu, "Display current stack", "Where", "where");
-        cmdMenu.addSeparator();
-
-        addTool(cmdMenu, "Move up one stack frame", "Up", "up");
-        addTool(cmdMenu, "Move down one stack frame", "Down", "down");
-        cmdMenu.addSeparator();
-
-        JMenuItem monitorItem = new JMenuItem("Monitor Expression...", 'M');
-        monitorItem.addActionListener(new ActionListener() {
-            @Override
-            public void actionPerformed(ActionEvent e) {
-                monitorCommand();
-            }
-        });
-        cmdMenu.add(monitorItem);
-
-        JMenuItem unmonitorItem = new JMenuItem("Unmonitor Expression...");
-        unmonitorItem.addActionListener(new ActionListener() {
-            @Override
-            public void actionPerformed(ActionEvent e) {
-                unmonitorCommand();
-            }
-        });
-        cmdMenu.add(unmonitorItem);
-
-        JMenu breakpointMenu = new JMenu("Breakpoint");
-        JMenuItem stopItem = new JMenuItem("Stop in...", 'S');
-        stopItem.addActionListener(new ActionListener() {
-            @Override
-            public void actionPerformed(ActionEvent e) {
-                buildBreakpoint();
-            }
-        });
-        breakpointMenu.add(stopItem);
-
-        JMenu helpMenu = new JMenu("Help");
-        addTool(helpMenu, "Display command list", "Help", "help");
-
-        this.add(fileMenu);
-        this.add(cmdMenu);
-//      this.add(breakpointMenu);
-        this.add(helpMenu);
-    }
-
-    private void buildBreakpoint() {
-        Frame frame = JOptionPane.getRootFrame();
-        JDialog dialog = new JDialog(frame, "Specify Breakpoint");
-        Container contents = dialog.getContentPane();
-        Vector<String> classes = new Vector<String>();
-        classes.add("Foo");
-        classes.add("Bar");
-        JList list = new JList(classes);
-        JScrollPane scrollPane = new JScrollPane(list);
-        contents.add(scrollPane);
-        dialog.show();
-
-    }
-
-    private void monitorCommand() {
-        String expr = (String)JOptionPane.showInputDialog(null,
-                           "Expression to monitor:", "Add Monitor",
-                           JOptionPane.QUESTION_MESSAGE, null, null, null);
-        if (expr != null) {
-            interpreter.executeCommand("monitor " + expr);
-        }
-    }
-
-    private void unmonitorCommand() {
-        List monitors = env.getMonitorListModel().monitors();
-        String expr = (String)JOptionPane.showInputDialog(null,
-                           "Expression to unmonitor:", "Remove Monitor",
-                           JOptionPane.QUESTION_MESSAGE, null,
-                           monitors.toArray(),
-                           monitors.get(monitors.size()-1));
-        if (expr != null) {
-            interpreter.executeCommand("unmonitor " + expr);
-        }
-    }
-
-    private void openCommand() {
-        JFileChooser chooser = new JFileChooser();
-        JDBFileFilter filter = new JDBFileFilter("java", "Java source code");
-        chooser.setFileFilter(filter);
-        int result = chooser.showOpenDialog(this);
-        if (result == JFileChooser.APPROVE_OPTION) {
-            System.out.println("Chose file: " + chooser.getSelectedFile().getName());
-        }
-    }
-
-    private void addTool(JMenu menu, String toolTip, String labelText,
-                         String command) {
-        JMenuItem mi = new JMenuItem(labelText);
-        mi.setToolTipText(toolTip);
-        final String cmd = command;
-        mi.addActionListener(new ActionListener() {
-            @Override
-            public void actionPerformed(ActionEvent e) {
-                interpreter.executeCommand(cmd);
-            }
-        });
-        menu.add(mi);
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/gui/JDBToolBar.java b/ojluni/src/main/java/com/sun/tools/example/debug/gui/JDBToolBar.java
deleted file mode 100755
index 8031fab..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/gui/JDBToolBar.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * Copyright (c) 1998, 1999, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.gui;
-
-import javax.swing.*;
-import java.awt.event.*;
-
-import com.sun.tools.example.debug.bdi.*;
-
-class JDBToolBar extends JToolBar {
-
-    Environment env;
-
-    ExecutionManager runtime;
-    ClassManager classManager;
-    SourceManager sourceManager;
-
-    CommandInterpreter interpreter;
-
-    JDBToolBar(Environment env) {
-
-        this.env = env;
-        this.runtime = env.getExecutionManager();
-        this.classManager = env.getClassManager();
-        this.sourceManager = env.getSourceManager();
-        this.interpreter = new CommandInterpreter(env, true);
-
-        //===== Configure toolbar here =====
-
-        addTool("Run application", "run", "run");
-        addTool("Connect to application", "connect", "connect");
-        addSeparator();
-
-        addTool("Step into next line", "step", "step");
-        addTool("Step over next line", "next", "next");
-//      addSeparator();
-
-//      addTool("Step into next instruction", "stepi", "stepi");
-//      addTool("Step over next instruction", "nexti", "nexti");
-//      addSeparator();
-
-        addTool("Step out of current method call", "step up", "step up");
-        addSeparator();
-
-        addTool("Suspend execution", "interrupt", "interrupt");
-        addTool("Continue execution", "cont", "cont");
-        addSeparator();
-
-//      addTool("Display current stack", "where", "where");
-//      addSeparator();
-
-        addTool("Move up one stack frame", "up", "up");
-        addTool("Move down one stack frame", "down", "down");
-//      addSeparator();
-
-//      addTool("Display command list", "help", "help");
-//      addSeparator();
-
-//      addTool("Exit debugger", "exit", "exit");
-
-        //==================================
-
-    }
-
-    private void addTool(String toolTip, String labelText, String command) {
-        JButton button = new JButton(labelText);
-        button.setToolTipText(toolTip);
-        final String cmd = command;
-        button.addActionListener(new ActionListener() {
-            @Override
-            public void actionPerformed(ActionEvent e) {
-                interpreter.executeCommand(cmd);
-            }
-        });
-        this.add(button);
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/gui/LaunchTool.java b/ojluni/src/main/java/com/sun/tools/example/debug/gui/LaunchTool.java
deleted file mode 100755
index febce66..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/gui/LaunchTool.java
+++ /dev/null
@@ -1,272 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.gui;
-
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Map;
-import java.util.HashMap;
-import java.awt.BorderLayout;
-import java.awt.Container;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import javax.swing.*;
-import javax.swing.border.Border;
-import javax.swing.border.TitledBorder;
-
-import com.sun.jdi.*;
-import com.sun.jdi.connect.*;
-
-import com.sun.tools.example.debug.bdi.*;
-
-class LaunchTool {
-
-    private final ExecutionManager runtime;
-
-    private abstract class ArgRep {
-        final Connector.Argument arg;
-        final JPanel panel;
-
-        ArgRep(Connector.Argument arg) {
-            this.arg = arg;
-            panel = new JPanel();
-            Border etched = BorderFactory.createEtchedBorder();
-            Border titled = BorderFactory.createTitledBorder(etched,
-                                      arg.description(),
-                                      TitledBorder.LEFT, TitledBorder.TOP);
-            panel.setBorder(titled);
-        }
-
-        abstract String getText();
-
-        boolean isValid() {
-            return arg.isValid(getText());
-        }
-
-        boolean isSpecified() {
-            String value = getText();
-            return (value != null && value.length() > 0) ||
-                !arg.mustSpecify();
-        }
-
-        void install() {
-            arg.setValue(getText());
-        }
-    }
-
-    private class StringArgRep extends ArgRep {
-        final JTextField textField;
-
-        StringArgRep(Connector.Argument arg, JPanel comp) {
-            super(arg);
-            textField = new JTextField(arg.value(), 50 );
-            textField.setBorder(BorderFactory.createLoweredBevelBorder());
-
-            panel.add(new JLabel(arg.label(), SwingConstants.RIGHT));
-            panel.add(textField); // , BorderLayout.CENTER);
-            comp.add(panel);
-        }
-
-        @Override
-        String getText() {
-            return textField.getText();
-        }
-    }
-
-    private class BooleanArgRep extends ArgRep {
-        final JCheckBox check;
-
-        BooleanArgRep(Connector.BooleanArgument barg, JPanel comp) {
-            super(barg);
-            check = new JCheckBox(barg.label());
-            check.setSelected(barg.booleanValue());
-            panel.add(check);
-            comp.add(panel);
-        }
-
-        @Override
-        String getText() {
-            return ((Connector.BooleanArgument)arg)
-                           .stringValueOf(check.getModel().isSelected());
-        }
-    }
-
-
-    private LaunchTool(ExecutionManager runtime) {
-        this.runtime = runtime;
-    }
-
-    private Connector selectConnector() {
-        final JDialog dialog = new JDialog();
-        Container content = dialog.getContentPane();
-        final JPanel radioPanel = new JPanel();
-        final ButtonGroup radioGroup = new ButtonGroup();
-        VirtualMachineManager manager = Bootstrap.virtualMachineManager();
-        List<Connector> all = manager.allConnectors();
-        Map<ButtonModel, Connector> modelToConnector = new HashMap<ButtonModel, Connector>(all.size(), 0.5f);
-
-        dialog.setModal(true);
-        dialog.setTitle("Select Connector Type");
-        radioPanel.setLayout(new BoxLayout(radioPanel, BoxLayout.Y_AXIS));
-        for (Connector connector : all) {
-            JRadioButton radio = new JRadioButton(connector.description());
-            modelToConnector.put(radio.getModel(), connector);
-            radioPanel.add(radio);
-            radioGroup.add(radio);
-        }
-        content.add(radioPanel);
-
-        final boolean[] oked = {false};
-        JPanel buttonPanel = okCancel( dialog, new ActionListener() {
-            @Override
-            public void actionPerformed(ActionEvent event) {
-                if (radioGroup.getSelection() == null) {
-                    JOptionPane.showMessageDialog(dialog,
-                                    "Please select a connector type",
-                                    "No Selection",
-                                     JOptionPane.ERROR_MESSAGE);
-                } else {
-                    oked[0] = true;
-                    dialog.setVisible(false);
-                    dialog.dispose();
-                }
-            }
-        } );
-        content.add(BorderLayout.SOUTH, buttonPanel);
-        dialog.pack();
-        dialog.setVisible(true);
-
-        return oked[0] ?
-            modelToConnector.get(radioGroup.getSelection()) :
-            null;
-    }
-
-    private void configureAndConnect(final Connector connector) {
-        final JDialog dialog = new JDialog();
-        final Map<String, Connector.Argument> args = connector.defaultArguments();
-
-        dialog.setModal(true);
-        dialog.setTitle("Connector Arguments");
-        Container content = dialog.getContentPane();
-        JPanel guts = new JPanel();
-        Border etched = BorderFactory.createEtchedBorder();
-        BorderFactory.createTitledBorder(etched,
-                                connector.description(),
-                                TitledBorder.LEFT, TitledBorder.TOP);
-        guts.setBorder(etched);
-        guts.setLayout(new BoxLayout(guts, BoxLayout.Y_AXIS));
-
-        //        guts.add(new JLabel(connector.description()));
-
-        final List<ArgRep> argReps = new ArrayList<ArgRep>(args.size());
-        for (Connector.Argument arg : args.values()) {
-            ArgRep ar;
-            if (arg instanceof Connector.BooleanArgument) {
-                ar = new BooleanArgRep((Connector.BooleanArgument)arg, guts);
-            } else {
-                ar = new StringArgRep(arg, guts);
-            }
-            argReps.add(ar);
-        }
-        content.add(guts);
-
-        JPanel buttonPanel = okCancel( dialog, new ActionListener() {
-            @Override
-            public void actionPerformed(ActionEvent event) {
-                for (ArgRep ar : argReps) {
-                    if (!ar.isSpecified()) {
-                        JOptionPane.showMessageDialog(dialog,
-                                    ar.arg.label() +
-                                         ": Argument must be specified",
-                                    "No argument", JOptionPane.ERROR_MESSAGE);
-                        return;
-                    }
-                    if (!ar.isValid()) {
-                        JOptionPane.showMessageDialog(dialog,
-                                    ar.arg.label() +
-                                         ": Bad argument value: " +
-                                         ar.getText(),
-                                    "Bad argument", JOptionPane.ERROR_MESSAGE);
-                        return;
-                    }
-                    ar.install();
-                }
-                try {
-                    if (runtime.explictStart(connector, args)) {
-                        dialog.setVisible(false);
-                        dialog.dispose();
-                    } else {
-                        JOptionPane.showMessageDialog(dialog,
-                           "Bad arguments values: See diagnostics window.",
-                           "Bad arguments", JOptionPane.ERROR_MESSAGE);
-                    }
-                } catch (VMLaunchFailureException exc) {
-                        JOptionPane.showMessageDialog(dialog,
-                           "Launch Failure: " + exc,
-                           "Launch Failed",JOptionPane.ERROR_MESSAGE);
-                }
-            }
-        } );
-        content.add(BorderLayout.SOUTH, buttonPanel);
-        dialog.pack();
-        dialog.setVisible(true);
-    }
-
-    private JPanel okCancel(final JDialog dialog, ActionListener okListener) {
-        JPanel buttonPanel = new JPanel();
-        JButton ok = new JButton("OK");
-        JButton cancel = new JButton("Cancel");
-        buttonPanel.add(ok);
-        buttonPanel.add(cancel);
-        ok.addActionListener(okListener);
-        cancel.addActionListener( new ActionListener() {
-            @Override
-            public void actionPerformed(ActionEvent event) {
-                dialog.setVisible(false);
-                dialog.dispose();
-            }
-        } );
-        return buttonPanel;
-    }
-
-    static void queryAndLaunchVM(ExecutionManager runtime)
-                                         throws VMLaunchFailureException {
-        LaunchTool lt = new LaunchTool(runtime);
-        Connector connector = lt.selectConnector();
-        if (connector != null) {
-            lt.configureAndConnect(connector);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/gui/MonitorListModel.java b/ojluni/src/main/java/com/sun/tools/example/debug/gui/MonitorListModel.java
deleted file mode 100755
index 9203206..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/gui/MonitorListModel.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.gui;
-
-import java.util.*;
-
-import javax.swing.AbstractListModel;
-
-public class MonitorListModel extends AbstractListModel {
-
-    private final List<String> monitors = new ArrayList<String>();
-
-    MonitorListModel(Environment env) {
-
-        // Create listener.
-        MonitorListListener listener = new MonitorListListener();
-        env.getContextManager().addContextListener(listener);
-
-        //### remove listeners on exit!
-    }
-
-    @Override
-    public Object getElementAt(int index) {
-        return monitors.get(index);
-    }
-
-    @Override
-    public int getSize() {
-        return monitors.size();
-    }
-
-    public void add(String expr) {
-        monitors.add(expr);
-        int newIndex = monitors.size()-1;  // order important
-        fireIntervalAdded(this, newIndex, newIndex);
-    }
-
-    public void remove(String expr) {
-        int index = monitors.indexOf(expr);
-        remove(index);
-    }
-
-    public void remove(int index) {
-        monitors.remove(index);
-        fireIntervalRemoved(this, index, index);
-    }
-
-    public List<String> monitors() {
-        return Collections.unmodifiableList(monitors);
-    }
-
-    public Iterator<?> iterator() {
-        return monitors().iterator();
-    }
-
-    private void invalidate() {
-        fireContentsChanged(this, 0, monitors.size()-1);
-    }
-
-    private class MonitorListListener implements ContextListener {
-
-        @Override
-        public void currentFrameChanged(final CurrentFrameChangedEvent e) {
-            invalidate();
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/gui/MonitorTool.java b/ojluni/src/main/java/com/sun/tools/example/debug/gui/MonitorTool.java
deleted file mode 100755
index ebdca54..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/gui/MonitorTool.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.gui;
-
-import javax.swing.*;
-import javax.swing.event.*;
-import java.awt.*;
-import com.sun.jdi.*;
-import com.sun.tools.example.debug.bdi.*;
-import com.sun.tools.example.debug.expr.ExpressionParser;
-import com.sun.tools.example.debug.expr.ParseException;
-
-public class MonitorTool extends JPanel {
-
-    private static final long serialVersionUID = -645235951031726647L;
-    private ExecutionManager runtime;
-    private ContextManager context;
-
-    private JList list;
-
-    public MonitorTool(Environment env) {
-        super(new BorderLayout());
-        this.runtime = env.getExecutionManager();
-        this.context = env.getContextManager();
-
-        list = new JList(env.getMonitorListModel());
-        list.setCellRenderer(new MonitorRenderer());
-
-        JScrollPane listView = new JScrollPane(list);
-        add(listView);
-
-        // Create listener.
-        MonitorToolListener listener = new MonitorToolListener();
-        list.addListSelectionListener(listener);
-        //### remove listeners on exit!
-    }
-
-    private class MonitorToolListener implements ListSelectionListener {
-        @Override
-        public void valueChanged(ListSelectionEvent e) {
-            int index = list.getSelectedIndex();
-            if (index != -1) {
-            }
-        }
-    }
-
-    private Value evaluate(String expr) throws ParseException,
-                                            InvocationException,
-                                            InvalidTypeException,
-                                            ClassNotLoadedException,
-                                            IncompatibleThreadStateException {
-        ExpressionParser.GetFrame frameGetter =
-            new ExpressionParser.GetFrame() {
-                @Override
-                public StackFrame get()
-                    throws IncompatibleThreadStateException
-                {
-                    try {
-                        return context.getCurrentFrame();
-                    } catch (VMNotInterruptedException exc) {
-                        throw new IncompatibleThreadStateException();
-                    }
-                }
-            };
-        return ExpressionParser.evaluate(expr, runtime.vm(), frameGetter);
-    }
-
-    private class MonitorRenderer extends DefaultListCellRenderer {
-
-        @Override
-        public Component getListCellRendererComponent(JList list,
-                                                      Object value,
-                                                      int index,
-                                                      boolean isSelected,
-                                                      boolean cellHasFocus) {
-
-            //### We should indicate the current thread independently of the
-            //### selection, e.g., with an icon, because the user may change
-            //### the selection graphically without affecting the current
-            //### thread.
-
-            super.getListCellRendererComponent(list, value, index,
-                                               isSelected, cellHasFocus);
-            if (value == null) {
-                this.setText("<unavailable>");
-            } else {
-                String expr = (String)value;
-                try {
-                    Value result = evaluate(expr);
-                    this.setText(expr + " = " + result);
-                } catch (ParseException exc) {
-                    this.setText(expr + " ? " + exc.getMessage());
-                } catch (IncompatibleThreadStateException exc) {
-                    this.setText(expr + " ...");
-                } catch (Exception exc) {
-                    this.setText(expr + " ? " + exc);
-                }
-            }
-            return this;
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/gui/OutputSink.java b/ojluni/src/main/java/com/sun/tools/example/debug/gui/OutputSink.java
deleted file mode 100755
index 321e162..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/gui/OutputSink.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (c) 1998, 1999, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.gui;
-
-import java.io.*;
-
-// This class is used in 'CommandInterpreter' as a hook to
-// allow messagebox style command output as an alternative
-// to a typescript. It should be an interface, not a class.
-
-public class OutputSink extends PrintWriter {
-
-    // Currently, we do no buffering,
-    // so 'show' is a no-op.
-
-    OutputSink(Writer writer) {
-        super(writer);
-    }
-
-    public void show() {
-        // ignore
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/gui/SearchPath.java b/ojluni/src/main/java/com/sun/tools/example/debug/gui/SearchPath.java
deleted file mode 100755
index 9e6da58..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/gui/SearchPath.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.gui;
-
-import java.io.*;
-import java.util.*;
-
-public class SearchPath {
-
-    private String pathString;
-
-    private String[] pathArray;
-
-    public SearchPath(String searchPath) {
-        //### Should check searchpath for well-formedness.
-        StringTokenizer st = new StringTokenizer(searchPath, File.pathSeparator);
-        List<String> dlist = new ArrayList<String>();
-        while (st.hasMoreTokens()) {
-            dlist.add(st.nextToken());
-        }
-        pathString = searchPath;
-        pathArray = dlist.toArray(new String[dlist.size()]);
-    }
-
-    public boolean isEmpty() {
-        return (pathArray.length == 0);
-    }
-
-    public String asString() {
-        return pathString;
-    }
-
-    public String[] asArray() {
-        return pathArray.clone();
-    }
-
-    public File resolve(String relativeFileName) {
-        for (String element : pathArray) {
-            File path = new File(element, relativeFileName);
-            if (path.exists()) {
-                return path;
-            }
-        }
-        return null;
-    }
-
-    //### return List?
-
-    public String[] children(String relativeDirName, FilenameFilter filter) {
-        // If a file appears at the same relative path
-        // with respect to multiple entries on the classpath,
-        // the one corresponding to the earliest entry on the
-        // classpath is retained.  This is the one that will be
-        // found if we later do a 'resolve'.
-        SortedSet<String> s = new TreeSet<String>();  // sorted, no duplicates
-        for (String element : pathArray) {
-            File path = new File(element, relativeDirName);
-            if (path.exists()) {
-                String[] childArray = path.list(filter);
-                if (childArray != null) {
-                    for (int j = 0; j < childArray.length; j++) {
-                        if (!s.contains(childArray[j])) {
-                            s.add(childArray[j]);
-                        }
-                    }
-                }
-            }
-        }
-        return s.toArray(new String[s.size()]);
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/gui/SingleLeafTreeSelectionModel.java b/ojluni/src/main/java/com/sun/tools/example/debug/gui/SingleLeafTreeSelectionModel.java
deleted file mode 100755
index 0de002a..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/gui/SingleLeafTreeSelectionModel.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Copyright (c) 1998, 1999, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.gui;
-
-import javax.swing.tree.*;
-
-public class SingleLeafTreeSelectionModel extends DefaultTreeSelectionModel {
-
-    private static final long serialVersionUID = -7849105107888117679L;
-
-    SingleLeafTreeSelectionModel() {
-        super();
-        selectionMode = SINGLE_TREE_SELECTION;
-    }
-
-    @Override
-    public void setSelectionPath(TreePath path) {
-        if(((TreeNode)(path.getLastPathComponent())).isLeaf()) {
-            super.setSelectionPath(path);
-        }
-    }
-
-    @Override
-    public void setSelectionPaths(TreePath[] paths) {
-        // Only look at first path, as all others will be
-        // ignored anyway in single tree selection mode.
-        if(((TreeNode)(paths[0].getLastPathComponent())).isLeaf()) {
-            super.setSelectionPaths(paths);
-        }
-    }
-
-    @Override
-    public void addSelectionPath(TreePath path) {
-        if(((TreeNode)(path.getLastPathComponent())).isLeaf()) {
-            super.setSelectionPath(path);
-        }
-    }
-
-    @Override
-    public void addSelectionPaths(TreePath[] paths) {
-        // Only look at first path, as all others will be
-        // ignored anyway in single tree selection mode.
-        if(((TreeNode)(paths[0].getLastPathComponent())).isLeaf()) {
-            super.addSelectionPaths(paths);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/gui/SourceListener.java b/ojluni/src/main/java/com/sun/tools/example/debug/gui/SourceListener.java
deleted file mode 100755
index d98251a..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/gui/SourceListener.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (c) 1998, 1999, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.gui;
-
-public interface SourceListener {
-    void sourcepathChanged(SourcepathChangedEvent e);
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/gui/SourceManager.java b/ojluni/src/main/java/com/sun/tools/example/debug/gui/SourceManager.java
deleted file mode 100755
index 7465bfb..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/gui/SourceManager.java
+++ /dev/null
@@ -1,189 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.gui;
-
-import java.io.*;
-import java.util.*;
-
-import com.sun.jdi.*;
-
-import com.sun.tools.example.debug.event.*;
-
-/**
- * Manage the list of source files.
- * Origin of SourceListener events.
- */
-public class SourceManager {
-
-    //### TODO: The source cache should be aged, and some cap
-    //### put on memory consumption by source files loaded into core.
-
-    private List<SourceModel> sourceList;
-    private SearchPath sourcePath;
-
-    private ArrayList<SourceListener> sourceListeners = new ArrayList<SourceListener>();
-
-    private Map<ReferenceType, SourceModel> classToSource = new HashMap<ReferenceType, SourceModel>();
-
-    private Environment env;
-
-    /**
-     * Hold on to it so it can be removed.
-     */
-    private SMClassListener classListener = new SMClassListener();
-
-    public SourceManager(Environment env) {
-        this(env, new SearchPath(""));
-    }
-
-    public SourceManager(Environment env, SearchPath sourcePath) {
-        this.env = env;
-        this.sourceList = new LinkedList<SourceModel>();
-        this.sourcePath = sourcePath;
-        env.getExecutionManager().addJDIListener(classListener);
-    }
-
-    /**
-     * Set path for access to source code.
-     */
-    public void setSourcePath(SearchPath sp) {
-        sourcePath = sp;
-        // Old cached sources are now invalid.
-        sourceList = new LinkedList<SourceModel>();
-        notifySourcepathChanged();
-        classToSource = new HashMap<ReferenceType, SourceModel>();
-    }
-
-    public void addSourceListener(SourceListener l) {
-        sourceListeners.add(l);
-    }
-
-    public void removeSourceListener(SourceListener l) {
-        sourceListeners.remove(l);
-    }
-
-    private void notifySourcepathChanged() {
-        ArrayList<SourceListener> l = new ArrayList<SourceListener>(sourceListeners);
-        SourcepathChangedEvent evt = new SourcepathChangedEvent(this);
-        for (int i = 0; i < l.size(); i++) {
-            l.get(i).sourcepathChanged(evt);
-        }
-    }
-
-    /**
-     * Get path for access to source code.
-     */
-    public SearchPath getSourcePath() {
-        return sourcePath;
-    }
-
-    /**
-     * Get source object associated with a Location.
-     */
-    public SourceModel sourceForLocation(Location loc) {
-        return sourceForClass(loc.declaringType());
-    }
-
-    /**
-     * Get source object associated with a class or interface.
-     * Returns null if not available.
-     */
-    public SourceModel sourceForClass(ReferenceType refType) {
-        SourceModel sm = classToSource.get(refType);
-        if (sm != null) {
-            return sm;
-        }
-        try {
-            String filename = refType.sourceName();
-            String refName = refType.name();
-            int iDot = refName.lastIndexOf('.');
-            String pkgName = (iDot >= 0)? refName.substring(0, iDot+1) : "";
-            String full = pkgName.replace('.', File.separatorChar) + filename;
-            File path = sourcePath.resolve(full);
-            if (path != null) {
-                sm = sourceForFile(path);
-                classToSource.put(refType, sm);
-                return sm;
-            }
-            return null;
-        } catch (AbsentInformationException e) {
-            return null;
-        }
-    }
-
-    /**
-     * Get source object associated with an absolute file path.
-     */
-    //### Use hash table for this?
-    public SourceModel sourceForFile(File path) {
-        Iterator<SourceModel> iter = sourceList.iterator();
-        SourceModel sm = null;
-        while (iter.hasNext()) {
-            SourceModel candidate = iter.next();
-            if (candidate.fileName().equals(path)) {
-                sm = candidate;
-                iter.remove();    // Will move to start of list.
-                break;
-            }
-        }
-        if (sm == null && path.exists()) {
-            sm = new SourceModel(env, path);
-        }
-        if (sm != null) {
-            // At start of list for faster access
-            sourceList.add(0, sm);
-        }
-        return sm;
-    }
-
-    private class SMClassListener extends JDIAdapter
-                                   implements JDIListener {
-
-        @Override
-        public void classPrepare(ClassPrepareEventSet e) {
-            ReferenceType refType = e.getReferenceType();
-            SourceModel sm = sourceForClass(refType);
-            if (sm != null) {
-                sm.addClass(refType);
-            }
-        }
-
-        @Override
-        public void classUnload(ClassUnloadEventSet e) {
-            //### iterate through looking for (e.getTypeName()).
-            //### then remove it.
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/gui/SourceModel.java b/ojluni/src/main/java/com/sun/tools/example/debug/gui/SourceModel.java
deleted file mode 100755
index 9510218..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/gui/SourceModel.java
+++ /dev/null
@@ -1,256 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.gui;
-
-import java.io.*;
-import java.util.*;
-
-import com.sun.jdi.*;
-import com.sun.jdi.request.*;
-
-import javax.swing.*;
-
-/**
- * Represents and manages one source file.
- * Caches source lines.  Holds other source file info.
- */
-public class SourceModel extends AbstractListModel {
-
-    private File path;
-
-    boolean isActuallySource = true;
-
-    private List<ReferenceType> classes = new ArrayList<ReferenceType>();
-
-    private Environment env;
-
-    // Cached line-by-line access.
-
-    //### Unify this with source model used in source view?
-    //### What is our cache-management policy for these?
-    //### Even with weak refs, we won't discard any part of the
-    //### source if the SourceModel object is reachable.
-    /**
-     * List of Line.
-     */
-    private List<Line> sourceLines = null;
-
-    public static class Line {
-        public String text;
-        public boolean hasBreakpoint = false;
-        public ReferenceType refType = null;
-        Line(String text) {
-            this.text = text;
-        }
-        public boolean isExecutable() {
-            return refType != null;
-        }
-        public boolean hasBreakpoint() {
-            return hasBreakpoint;
-        }
-    };
-
-    // 132 characters long, all printable characters.
-    public static final Line prototypeCellValue = new Line(
-                                        "abcdefghijklmnopqrstuvwxyz" +
-                                        "ABCDEFGHIJKLMNOPQRSTUVWXYZ" +
-                                        "ABCDEFGHIJKLMNOPQRSTUVWXYZ" +
-                                        "1234567890~!@#$%^&*()_+{}|" +
-                                        ":<>?`-=[];',.XXXXXXXXXXXX/\\\"");
-
-    SourceModel(Environment env, File path) {
-        this.env = env;
-        this.path = path;
-    }
-
-    public SourceModel(String message) {
-        this.path = null;
-        setMessage(message);
-    }
-
-    private void setMessage(String message) {
-        isActuallySource = false;
-        sourceLines = new ArrayList<Line>();
-        sourceLines.add(new Line(message));
-    }
-
-    // **** Implement ListModel  *****
-
-    @Override
-    public Object getElementAt(int index) {
-        if (sourceLines == null) {
-            initialize();
-        }
-        return sourceLines.get(index);
-    }
-
-    @Override
-    public int getSize() {
-        if (sourceLines == null) {
-            initialize();
-        }
-        return sourceLines.size();
-    }
-
-    // ***** Other functionality *****
-
-    public File fileName() {
-        return path;
-    }
-
-    public BufferedReader sourceReader() throws IOException {
-        return new BufferedReader(new FileReader(path));
-    }
-
-    public Line line(int lineNo) {
-        if (sourceLines == null) {
-            initialize();
-        }
-        int index = lineNo - 1; // list is 0-indexed
-        if (index >= sourceLines.size() || index < 0) {
-            return null;
-        } else {
-            return sourceLines.get(index);
-        }
-    }
-
-    public String sourceLine(int lineNo) {
-        Line line = line(lineNo);
-        if (line == null) {
-            return null;
-        } else {
-            return line.text;
-        }
-    }
-
-    void addClass(ReferenceType refType) {
-        // Logically is Set
-        if (classes.indexOf(refType) == -1) {
-            classes.add(refType);
-            if (sourceLines != null) {
-                markClassLines(refType);
-            }
-        }
-    }
-
-    /**
-     * @return List of currently known {@link com.sun.jdi.ReferenceType}
-     * in this source file.
-     */
-    public List<ReferenceType> referenceTypes() {
-        return Collections.unmodifiableList(classes);
-    }
-
-    private void initialize() {
-        try {
-            rawInit();
-        } catch (IOException exc) {
-            setMessage("[Error reading source code]");
-        }
-    }
-
-    public void showBreakpoint(int ln, boolean hasBreakpoint) {
-        line(ln).hasBreakpoint = hasBreakpoint;
-        fireContentsChanged(this, ln, ln);
-    }
-
-    public void showExecutable(int ln, ReferenceType refType) {
-        line(ln).refType = refType;
-        fireContentsChanged(this, ln, ln);
-    }
-
-    /**
-     * Mark executable lines and breakpoints, but only
-     * when sourceLines is set.
-     */
-    private void markClassLines(ReferenceType refType) {
-        for (Method meth : refType.methods()) {
-            try {
-                for (Location loc : meth.allLineLocations()) {
-                    showExecutable(loc.lineNumber(), refType);
-                }
-            } catch (AbsentInformationException exc) {
-                // do nothing
-            }
-        }
-        for (BreakpointRequest bp :
-                 env.getExecutionManager().eventRequestManager().breakpointRequests()) {
-            if (bp.location() != null) {
-                Location loc = bp.location();
-                if (loc.declaringType().equals(refType)) {
-                    showBreakpoint(loc.lineNumber(),true);
-                }
-            }
-        }
-    }
-
-    private void rawInit() throws IOException {
-        sourceLines = new ArrayList<Line>();
-        BufferedReader reader = sourceReader();
-        try {
-            String line = reader.readLine();
-            while (line != null) {
-                sourceLines.add(new Line(expandTabs(line)));
-                line = reader.readLine();
-            }
-        } finally {
-            reader.close();
-        }
-        for (ReferenceType refType : classes) {
-            markClassLines(refType);
-        }
-    }
-
-    private String expandTabs(String s) {
-        int col = 0;
-        int len = s.length();
-        StringBuffer sb = new StringBuffer(132);
-        for (int i = 0; i < len; i++) {
-            char c = s.charAt(i);
-            sb.append(c);
-            if (c == '\t') {
-                int pad = (8 - (col % 8));
-                for (int j = 0; j < pad; j++) {
-                    sb.append(' ');
-                }
-                col += pad;
-            } else {
-                col++;
-            }
-        }
-        return sb.toString();
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/gui/SourceTool.java b/ojluni/src/main/java/com/sun/tools/example/debug/gui/SourceTool.java
deleted file mode 100755
index a358c71..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/gui/SourceTool.java
+++ /dev/null
@@ -1,392 +0,0 @@
-/*
- * Copyright (c) 1998, 1999, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.gui;
-
-import java.io.*;
-import java.awt.*;
-import java.awt.event.*;
-import javax.swing.*;
-
-import com.sun.jdi.*;
-import com.sun.jdi.request.*;
-
-import com.sun.tools.example.debug.bdi.*;
-
-public class SourceTool extends JPanel {
-
-    private static final long serialVersionUID = -5461299294186395257L;
-
-    private Environment env;
-
-    private ExecutionManager runtime;
-    private ContextManager context;
-    private SourceManager sourceManager;
-
-    private JList list;
-    private ListModel sourceModel;
-
-    // Information on source file that is on display, or failed to be
-    // displayed due to inaccessible source.  Used to update display
-    // when sourcepath is changed.
-
-    private String sourceName;          // relative path name, if showSourceFile
-    private Location sourceLocn;        // location, if showSourceForLocation
-    private CommandInterpreter interpreter;
-
-    public SourceTool(Environment env) {
-
-        super(new BorderLayout());
-
-        this.env = env;
-
-        runtime = env.getExecutionManager();
-        sourceManager = env.getSourceManager();
-        this.context = env.getContextManager();
-        this.interpreter = new CommandInterpreter(env, true);
-
-        sourceModel = new DefaultListModel();  // empty
-
-        list = new JList(sourceModel);
-        list.setCellRenderer(new SourceLineRenderer());
-
-        list.setPrototypeCellValue(SourceModel.prototypeCellValue);
-
-        SourceToolListener listener = new SourceToolListener();
-        context.addContextListener(listener);
-        runtime.addSpecListener(listener);
-        sourceManager.addSourceListener(listener);
-
-        MouseListener squeek = new STMouseListener();
-        list.addMouseListener(squeek);
-
-        add(new JScrollPane(list));
-    }
-
-    public void setTextFont(Font f) {
-        list.setFont(f);
-        list.setPrototypeCellValue(SourceModel.prototypeCellValue);
-    }
-
-    private class SourceToolListener
-               implements ContextListener, SourceListener, SpecListener
-    {
-
-        // ContextListener
-
-        @Override
-        public void currentFrameChanged(CurrentFrameChangedEvent e) {
-            showSourceContext(e.getThread(), e.getIndex());
-        }
-
-            // Clear source view.
-            //      sourceModel = new DefaultListModel();  // empty
-
-        // SourceListener
-
-        @Override
-        public void sourcepathChanged(SourcepathChangedEvent e) {
-            // Reload source view if its contents depend
-            // on the source path.
-            if (sourceName != null) {
-                showSourceFile(sourceName);
-            } else if (sourceLocn != null) {
-                showSourceForLocation(sourceLocn);
-            }
-        }
-
-        // SpecListener
-
-        @Override
-        public void breakpointSet(SpecEvent e) {
-            breakpointResolved(e);
-        }
-
-        @Override
-        public void breakpointDeferred(SpecEvent e) { }
-
-        @Override
-        public void breakpointDeleted(SpecEvent e) {
-            BreakpointRequest req = (BreakpointRequest)e.getEventRequest();
-            Location loc = req.location();
-            if (loc != null) {
-                try {
-                    SourceModel sm = sourceManager.sourceForLocation(loc);
-                    sm.showBreakpoint(loc.lineNumber(), false);
-                    showSourceForLocation(loc);
-                } catch (Exception exc) {
-                }
-            }
-        }
-
-        @Override
-        public void breakpointResolved(SpecEvent e) {
-            BreakpointRequest req = (BreakpointRequest)e.getEventRequest();
-            Location loc = req.location();
-            try {
-                SourceModel sm = sourceManager.sourceForLocation(loc);
-                sm.showBreakpoint(loc.lineNumber(), true);
-                showSourceForLocation(loc);
-            } catch (Exception exc) {
-            }
-        }
-
-        @Override
-        public void breakpointError(SpecErrorEvent e) {
-            breakpointDeleted(e);
-        }
-
-        @Override
-        public void watchpointSet(SpecEvent e) {
-        }
-        @Override
-        public void watchpointDeferred(SpecEvent e) {
-        }
-        @Override
-        public void watchpointDeleted(SpecEvent e) {
-        }
-        @Override
-        public void watchpointResolved(SpecEvent e) {
-        }
-        @Override
-        public void watchpointError(SpecErrorEvent e) {
-        }
-
-        @Override
-        public void exceptionInterceptSet(SpecEvent e) {
-        }
-        @Override
-        public void exceptionInterceptDeferred(SpecEvent e) {
-        }
-        @Override
-        public void exceptionInterceptDeleted(SpecEvent e) {
-        }
-        @Override
-        public void exceptionInterceptResolved(SpecEvent e) {
-        }
-        @Override
-        public void exceptionInterceptError(SpecErrorEvent e) {
-        }
-    }
-
-    private void showSourceContext(ThreadReference thread, int index) {
-        //### Should use ThreadInfo here.
-        StackFrame frame = null;
-        if (thread != null) {
-            try {
-                frame = thread.frame(index);
-            } catch (IncompatibleThreadStateException e) {}
-        }
-        if (frame == null) {
-            return;
-        }
-        Location locn = frame.location();
-        /*****
-        if (!showSourceForLocation(locn)) {
-            env.notice("Could not display source for "
-                       + Utils.locationString(locn));
-        }
-        *****/
-        showSourceForLocation(locn);
-    }
-
-    public boolean showSourceForLocation(Location locn) {
-        sourceName = null;
-        sourceLocn = locn;
-        int lineNo = locn.lineNumber();
-        if (lineNo != -1) {
-            SourceModel source = sourceManager.sourceForLocation(locn);
-            if (source != null) {
-                showSourceAtLine(source, lineNo-1);
-                return true;
-            }
-        }
-        // Here if we could not display source.
-        showSourceUnavailable();
-        return false;
-    }
-
-    public boolean showSourceFile(String fileName) {
-        sourceLocn = null;
-        File file;
-        if (!fileName.startsWith(File.separator)) {
-            sourceName = fileName;
-            SearchPath sourcePath = sourceManager.getSourcePath();
-            file = sourcePath.resolve(fileName);
-            if (file == null) {
-                //env.failure("Source not found on current source path.");
-                showSourceUnavailable();
-                return false;
-            }
-        } else {
-            sourceName = null;  // Absolute pathname does not depend on sourcepath.
-            file = new File(fileName);
-        }
-        SourceModel source = sourceManager.sourceForFile(file);
-        if (source != null) {
-            showSource(source);
-            return true;
-        }
-        showSourceUnavailable();
-        return false;
-    }
-
-    private void showSource(SourceModel model) {
-        setViewModel(model);
-    }
-
-    private void showSourceAtLine(SourceModel model, int lineNo) {
-        setViewModel(model);
-        if (model.isActuallySource && (lineNo < model.getSize())) {
-            list.setSelectedIndex(lineNo);
-            if (lineNo+4 < model.getSize()) {
-                list.ensureIndexIsVisible(lineNo+4);  // give some context
-            }
-            list.ensureIndexIsVisible(lineNo);
-        }
-    }
-
-    private void showSourceUnavailable() {
-        SourceModel model = new SourceModel("[Source code is not available]");
-        setViewModel(model);
-    }
-
-    private void setViewModel(SourceModel model) {
-        if (model != sourceModel) {
-            // install new model
-            list.setModel(model);
-            sourceModel = model;
-        }
-    }
-
-    private class SourceLineRenderer extends DefaultListCellRenderer {
-
-        @Override
-        public Component getListCellRendererComponent(JList list,
-                                                      Object value,
-                                                      int index,
-                                                      boolean isSelected,
-                                                      boolean cellHasFocus) {
-
-            //### Should set background highlight and/or icon if breakpoint on this line.
-            // Configures "this"
-            super.getListCellRendererComponent(list, value, index,
-                                               isSelected, cellHasFocus);
-
-            SourceModel.Line line = (SourceModel.Line)value;
-
-            //### Tab expansion is now done when source file is read in,
-            //### to speed up display.  This costs a lot of space, slows
-            //### down source file loading, and has not been demonstrated
-            //### to yield an observable improvement in display performance.
-            //### Measurements may be appropriate here.
-            //String sourceLine = expandTabs((String)value);
-            setText(line.text);
-            if (line.hasBreakpoint) {
-                setIcon(Icons.stopSignIcon);
-            } else if (line.isExecutable()) {
-                setIcon(Icons.execIcon);
-            } else {
-                setIcon(Icons.blankIcon);
-            }
-
-
-            return this;
-        }
-
-        @Override
-        public Dimension getPreferredSize() {
-            Dimension dim = super.getPreferredSize();
-            return new Dimension(dim.width, dim.height-5);
-        }
-
-    }
-
-    private class STMouseListener extends MouseAdapter implements MouseListener {
-        @Override
-        public void mousePressed(MouseEvent e) {
-            if (e.isPopupTrigger()) {
-                showPopupMenu((Component)e.getSource(),
-                              e.getX(), e.getY());
-            }
-        }
-
-        @Override
-        public void mouseReleased(MouseEvent e) {
-            if (e.isPopupTrigger()) {
-                showPopupMenu((Component)e.getSource(),
-                              e.getX(), e.getY());
-            }
-        }
-
-        private void showPopupMenu(Component invoker, int x, int y) {
-            JList list = (JList)invoker;
-            int ln = list.getSelectedIndex() + 1;
-            SourceModel.Line line =
-                (SourceModel.Line)list.getSelectedValue();
-            JPopupMenu popup = new JPopupMenu();
-
-            if (line == null) {
-                popup.add(new JMenuItem("please select a line"));
-            } else if (line.isExecutable()) {
-                String className = line.refType.name();
-                if (line.hasBreakpoint()) {
-                    popup.add(commandItem("Clear Breakpoint",
-                                          "clear " + className +
-                                          ":" + ln));
-                } else {
-                    popup.add(commandItem("Set Breakpoint",
-                                          "stop at " + className +
-                                          ":" + ln));
-                }
-            } else {
-                popup.add(new JMenuItem("not an executable line"));
-            }
-
-            popup.show(invoker,
-                       x + popup.getWidth()/2, y + popup.getHeight()/2);
-        }
-
-        private JMenuItem commandItem(String label, final String cmd) {
-            JMenuItem item = new JMenuItem(label);
-            item.addActionListener(new ActionListener() {
-                @Override
-                public void actionPerformed(ActionEvent e) {
-                    interpreter.executeCommand(cmd);
-                }
-            });
-            return item;
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/gui/SourceTreeTool.java b/ojluni/src/main/java/com/sun/tools/example/debug/gui/SourceTreeTool.java
deleted file mode 100755
index e21b027..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/gui/SourceTreeTool.java
+++ /dev/null
@@ -1,292 +0,0 @@
-/*
- * Copyright (c) 1998, 1999, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.gui;
-
-import java.io.*;
-import java.util.*;
-
-import javax.swing.*;
-import javax.swing.tree.*;
-import java.awt.*;
-import java.awt.event.*;
-
-import com.sun.tools.example.debug.bdi.*;
-
-public class SourceTreeTool extends JPanel {
-
-    private static final long serialVersionUID = 3336680912107956419L;
-
-    private Environment env;
-
-    private ExecutionManager runtime;
-    private SourceManager sourceManager;
-    private ClassManager classManager;
-
-    private JTree tree;
-    private SourceTreeNode root;
-    private SearchPath sourcePath;
-    private CommandInterpreter interpreter;
-
-    private static String HEADING = "SOURCES";
-
-    public SourceTreeTool(Environment env) {
-
-        super(new BorderLayout());
-
-        this.env = env;
-        this.runtime = env.getExecutionManager();
-        this.sourceManager = env.getSourceManager();
-
-        this.interpreter = new CommandInterpreter(env);
-
-        sourcePath = sourceManager.getSourcePath();
-        root = createDirectoryTree(HEADING);
-
-        // Create a tree that allows one selection at a time.
-        tree = new JTree(new DefaultTreeModel(root));
-        tree.setSelectionModel(new SingleLeafTreeSelectionModel());
-
-        /******
-        // Listen for when the selection changes.
-        tree.addTreeSelectionListener(new TreeSelectionListener() {
-            public void valueChanged(TreeSelectionEvent e) {
-                SourceTreeNode node = (SourceTreeNode)
-                    (e.getPath().getLastPathComponent());
-                interpreter.executeCommand("view " + node.getRelativePath());
-            }
-        });
-        ******/
-
-        MouseListener ml = new MouseAdapter() {
-            @Override
-            public void mouseClicked(MouseEvent e) {
-                int selRow = tree.getRowForLocation(e.getX(), e.getY());
-                TreePath selPath = tree.getPathForLocation(e.getX(), e.getY());
-                if(selRow != -1) {
-                    if(e.getClickCount() == 1) {
-                        SourceTreeNode node =
-                            (SourceTreeNode)selPath.getLastPathComponent();
-                        // If user clicks on leaf, select it, and issue 'view' command.
-                        if (node.isLeaf()) {
-                            tree.setSelectionPath(selPath);
-                            interpreter.executeCommand("view " + node.getRelativePath());
-                        }
-                    }
-                }
-            }
-        };
-        tree.addMouseListener(ml);
-
-        JScrollPane treeView = new JScrollPane(tree);
-        add(treeView);
-
-        // Create listener for source path changes.
-
-        SourceTreeToolListener listener = new SourceTreeToolListener();
-        sourceManager.addSourceListener(listener);
-
-        //### remove listeners on exit!
-    }
-
-    private class SourceTreeToolListener implements SourceListener {
-
-        @Override
-        public void sourcepathChanged(SourcepathChangedEvent e) {
-            sourcePath = sourceManager.getSourcePath();
-            root = createDirectoryTree(HEADING);
-            tree.setModel(new DefaultTreeModel(root));
-        }
-
-    }
-
-    private static class SourceOrDirectoryFilter implements FilenameFilter {
-        @Override
-        public boolean accept(File dir, String name) {
-            return (name.endsWith(".java") ||
-                    new File(dir, name).isDirectory());
-        }
-    }
-
-    private static FilenameFilter filter = new SourceOrDirectoryFilter();
-
-    SourceTreeNode createDirectoryTree(String label) {
-        try {
-            return new SourceTreeNode(label, null, "", true);
-        } catch (SecurityException e) {
-            env.failure("Cannot access source file or directory");
-            return null;
-        }
-    }
-
-
-    class SourceTreeNode implements TreeNode {
-
-        private String name;
-        private boolean isDirectory;
-        private SourceTreeNode parent;
-        private SourceTreeNode[] children;
-        private String relativePath;
-        private boolean isExpanded;
-
-        private SourceTreeNode(String label,
-                               SourceTreeNode parent,
-                               String relativePath,
-                               boolean isDirectory) {
-            this.name = label;
-            this.relativePath = relativePath;
-            this.parent = parent;
-            this.isDirectory = isDirectory;
-        }
-
-        @Override
-        public String toString() {
-            return name;
-        }
-
-        public String getRelativePath() {
-            return relativePath;
-        }
-
-        private void expandIfNeeded() {
-            try {
-                if (!isExpanded && isDirectory) {
-                    String[] files = sourcePath.children(relativePath, filter);
-                    children = new SourceTreeNode[files.length];
-                    for (int i = 0; i < files.length; i++) {
-                        String childName =
-                            (relativePath.equals(""))
-                            ? files[i]
-                            : relativePath + File.separator + files[i];
-                        File file = sourcePath.resolve(childName);
-                        boolean isDir = (file != null && file.isDirectory());
-                        children[i] =
-                            new SourceTreeNode(files[i], this, childName, isDir);
-                    }
-                }
-                isExpanded = true;
-            } catch (SecurityException e) {
-                children = null;
-                env.failure("Cannot access source file or directory");
-            }
-        }
-
-        // -- interface TreeNode --
-
-        /*
-         * Returns the child <code>TreeNode</code> at index
-         * <code>childIndex</code>.
-         */
-        @Override
-        public TreeNode getChildAt(int childIndex) {
-            expandIfNeeded();
-            return children[childIndex];
-        }
-
-        /**
-         * Returns the number of children <code>TreeNode</code>s the receiver
-         * contains.
-         */
-        @Override
-        public int getChildCount() {
-            expandIfNeeded();
-            return children.length;
-        }
-
-        /**
-         * Returns the parent <code>TreeNode</code> of the receiver.
-         */
-        @Override
-        public TreeNode getParent() {
-            return parent;
-        }
-
-        /**
-         * Returns the index of <code>node</code> in the receivers children.
-         * If the receiver does not contain <code>node</code>, -1 will be
-         * returned.
-         */
-        @Override
-        public int getIndex(TreeNode node) {
-            expandIfNeeded();
-            for (int i = 0; i < children.length; i++) {
-                if (children[i] == node) {
-                    return i;
-            }
-            }
-            return -1;
-        }
-
-        /**
-         * Returns true if the receiver allows children.
-         */
-        @Override
-        public boolean getAllowsChildren() {
-            return isDirectory;
-        }
-
-        /**
-         * Returns true if the receiver is a leaf.
-         */
-        @Override
-        public boolean isLeaf() {
-            expandIfNeeded();
-            return !isDirectory;
-        }
-
-        /**
-         * Returns the children of the receiver as an Enumeration.
-         */
-        @Override
-        public Enumeration children() {
-            expandIfNeeded();
-            return new Enumeration() {
-                int i = 0;
-                @Override
-                public boolean hasMoreElements() {
-                    return (i < children.length);
-                }
-                @Override
-                public Object nextElement() throws NoSuchElementException {
-                    if (i >= children.length) {
-                        throw new NoSuchElementException();
-                    }
-                    return children[i++];
-                }
-            };
-        }
-
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/gui/SourcepathChangedEvent.java b/ojluni/src/main/java/com/sun/tools/example/debug/gui/SourcepathChangedEvent.java
deleted file mode 100755
index 88a26f9..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/gui/SourcepathChangedEvent.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (c) 1998, 1999, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.gui;
-
-import java.util.EventObject;
-
-public class SourcepathChangedEvent extends EventObject {
-
-    private static final long serialVersionUID = 8762169481005804121L;
-
-    public SourcepathChangedEvent(Object source) {
-        super(source);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/gui/StackTraceTool.java b/ojluni/src/main/java/com/sun/tools/example/debug/gui/StackTraceTool.java
deleted file mode 100755
index 405c7ec..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/gui/StackTraceTool.java
+++ /dev/null
@@ -1,207 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.gui;
-
-import javax.swing.*;
-import javax.swing.event.*;
-import java.awt.*;
-import com.sun.jdi.*;
-import com.sun.tools.example.debug.bdi.*;
-
-public class StackTraceTool extends JPanel {
-
-    private static final long serialVersionUID = 9140041989427965718L;
-
-    private Environment env;
-
-    private ExecutionManager runtime;
-    private ContextManager context;
-
-    private ThreadInfo tinfo;
-
-    private JList list;
-    private ListModel stackModel;
-
-    public StackTraceTool(Environment env) {
-
-        super(new BorderLayout());
-
-        this.env = env;
-        this.runtime = env.getExecutionManager();
-        this.context = env.getContextManager();
-
-        stackModel = new DefaultListModel();  // empty
-
-        list = new JList(stackModel);
-        list.setCellRenderer(new StackFrameRenderer());
-
-        JScrollPane listView = new JScrollPane(list);
-        add(listView);
-
-        // Create listener.
-        StackTraceToolListener listener = new StackTraceToolListener();
-        context.addContextListener(listener);
-        list.addListSelectionListener(listener);
-
-        //### remove listeners on exit!
-    }
-
-    private class StackTraceToolListener
-        implements ContextListener, ListSelectionListener
-    {
-
-        // ContextListener
-
-        // If the user selects a new current frame, display it in
-        // this view.
-
-        //### I suspect we handle the case badly that the VM is not interrupted.
-
-        @Override
-        public void currentFrameChanged(CurrentFrameChangedEvent e) {
-            // If the current frame of the thread appearing in this
-            // view is changed, move the selection to track it.
-            int frameIndex = e.getIndex();
-            ThreadInfo ti = e.getThreadInfo();
-            if (e.getInvalidate() || tinfo != ti) {
-                tinfo = ti;
-                showStack(ti, frameIndex);
-            } else {
-                if (frameIndex < stackModel.getSize()) {
-                    list.setSelectedIndex(frameIndex);
-                    list.ensureIndexIsVisible(frameIndex);
-                }
-            }
-        }
-
-        // ListSelectionListener
-
-        @Override
-        public void valueChanged(ListSelectionEvent e) {
-            int index = list.getSelectedIndex();
-            if (index != -1) {
-                //### should use listener?
-                try {
-                    context.setCurrentFrameIndex(index);
-                } catch (VMNotInterruptedException exc) {
-                }
-            }
-        }
-    }
-
-    private class StackFrameRenderer extends DefaultListCellRenderer {
-
-        @Override
-        public Component getListCellRendererComponent(JList list,
-                                                      Object value,
-                                                      int index,
-                                                      boolean isSelected,
-                                                      boolean cellHasFocus) {
-
-            //### We should indicate the current thread independently of the
-            //### selection, e.g., with an icon, because the user may change
-            //### the selection graphically without affecting the current
-            //### thread.
-
-            super.getListCellRendererComponent(list, value, index,
-                                               isSelected, cellHasFocus);
-            if (value == null) {
-                this.setText("<unavailable>");
-            } else {
-                StackFrame frame = (StackFrame)value;
-                Location loc = frame.location();
-                Method meth = loc.method();
-                String methName =
-                    meth.declaringType().name() + '.' + meth.name();
-                String position = "";
-                if (meth.isNative()) {
-                    position = " (native method)";
-                } else if (loc.lineNumber() != -1) {
-                    position = ":" + loc.lineNumber();
-                } else {
-                    long pc = loc.codeIndex();
-                    if (pc != -1) {
-                        position = ", pc = " + pc;
-                    }
-                }
-                // Indices are presented to the user starting from 1, not 0.
-                this.setText("[" + (index+1) +"] " + methName + position);
-            }
-            return this;
-        }
-    }
-
-    // Point this view at the given thread and frame.
-
-    private void showStack(ThreadInfo tinfo, int selectFrame) {
-        StackTraceListModel model = new StackTraceListModel(tinfo);
-        stackModel = model;
-        list.setModel(stackModel);
-        list.setSelectedIndex(selectFrame);
-        list.ensureIndexIsVisible(selectFrame);
-    }
-
-    private static class StackTraceListModel extends AbstractListModel {
-
-        private final ThreadInfo tinfo;
-
-        public StackTraceListModel(ThreadInfo tinfo) {
-            this.tinfo = tinfo;
-        }
-
-        @Override
-        public Object getElementAt(int index) {
-            try {
-                return tinfo == null? null : tinfo.getFrame(index);
-            } catch (VMNotInterruptedException e) {
-                //### Is this the right way to handle this?
-                //### Would happen if user scrolled stack trace
-                //### while not interrupted -- should probably
-                //### block user interaction in this case.
-                return null;
-            }
-        }
-
-        @Override
-        public int getSize() {
-            try {
-                return tinfo == null? 1 : tinfo.getFrameCount();
-            } catch (VMNotInterruptedException e) {
-                //### Is this the right way to handle this?
-                return 0;
-            }
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/gui/ThreadTreeTool.java b/ojluni/src/main/java/com/sun/tools/example/debug/gui/ThreadTreeTool.java
deleted file mode 100755
index 05e1836..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/gui/ThreadTreeTool.java
+++ /dev/null
@@ -1,355 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.gui;
-
-import java.util.*;
-import java.util.List;  // Must import explicitly due to conflict with javax.awt.List
-
-import javax.swing.*;
-import javax.swing.tree.*;
-import java.awt.*;
-import java.awt.event.*;
-
-import com.sun.jdi.*;
-import com.sun.tools.example.debug.event.*;
-import com.sun.tools.example.debug.bdi.*;
-
-//### Bug: If the name of a thread is changed via Thread.setName(), the
-//### thread tree view does not reflect this.  The name of the thread at
-//### the time it is created is used throughout its lifetime.
-
-public class ThreadTreeTool extends JPanel {
-
-    private static final long serialVersionUID = 4168599992853038878L;
-
-    private Environment env;
-
-    private ExecutionManager runtime;
-    private SourceManager sourceManager;
-    private ClassManager classManager;
-
-    private JTree tree;
-    private DefaultTreeModel treeModel;
-    private ThreadTreeNode root;
-    private SearchPath sourcePath;
-
-    private CommandInterpreter interpreter;
-
-    private static String HEADING = "THREADS";
-
-    public ThreadTreeTool(Environment env) {
-
-        super(new BorderLayout());
-
-        this.env = env;
-        this.runtime = env.getExecutionManager();
-        this.sourceManager = env.getSourceManager();
-
-        this.interpreter = new CommandInterpreter(env);
-
-        root = createThreadTree(HEADING);
-        treeModel = new DefaultTreeModel(root);
-
-        // Create a tree that allows one selection at a time.
-
-        tree = new JTree(treeModel);
-        tree.setSelectionModel(new SingleLeafTreeSelectionModel());
-
-        MouseListener ml = new MouseAdapter() {
-            @Override
-            public void mouseClicked(MouseEvent e) {
-                int selRow = tree.getRowForLocation(e.getX(), e.getY());
-                TreePath selPath = tree.getPathForLocation(e.getX(), e.getY());
-                if(selRow != -1) {
-                    if(e.getClickCount() == 1) {
-                        ThreadTreeNode node =
-                            (ThreadTreeNode)selPath.getLastPathComponent();
-                        // If user clicks on leaf, select it, and issue 'thread' command.
-                        if (node.isLeaf()) {
-                            tree.setSelectionPath(selPath);
-                            interpreter.executeCommand("thread " +
-                                                       node.getThreadId() +
-                                                       "  (\"" +
-                                                       node.getName() + "\")");
-                        }
-                    }
-                }
-            }
-        };
-
-        tree.addMouseListener(ml);
-
-        JScrollPane treeView = new JScrollPane(tree);
-        add(treeView);
-
-        // Create listener.
-        ThreadTreeToolListener listener = new ThreadTreeToolListener();
-        runtime.addJDIListener(listener);
-        runtime.addSessionListener(listener);
-
-        //### remove listeners on exit!
-    }
-
-    HashMap<ThreadReference, List<String>> threadTable = new HashMap<ThreadReference, List<String>>();
-
-    private List<String> threadPath(ThreadReference thread) {
-        // May exit abnormally if VM disconnects.
-        List<String> l = new ArrayList<String>();
-        l.add(0, thread.name());
-        ThreadGroupReference group = thread.threadGroup();
-        while (group != null) {
-            l.add(0, group.name());
-            group = group.parent();
-        }
-        return l;
-    }
-
-    private class ThreadTreeToolListener extends JDIAdapter
-                              implements JDIListener, SessionListener {
-
-        // SessionListener
-
-        @Override
-        public void sessionStart(EventObject e) {
-            try {
-                for (ThreadReference thread : runtime.allThreads()) {
-                    root.addThread(thread);
-                }
-            } catch (VMDisconnectedException ee) {
-                // VM went away unexpectedly.
-            } catch (NoSessionException ee) {
-                // Ignore.  Should not happen.
-            }
-        }
-
-        @Override
-        public void sessionInterrupt(EventObject e) {}
-        @Override
-        public void sessionContinue(EventObject e) {}
-
-
-        // JDIListener
-
-        @Override
-        public void threadStart(ThreadStartEventSet e) {
-            root.addThread(e.getThread());
-        }
-
-        @Override
-        public void threadDeath(ThreadDeathEventSet e) {
-            root.removeThread(e.getThread());
-        }
-
-        @Override
-        public void vmDisconnect(VMDisconnectEventSet e) {
-            // Clear the contents of this view.
-            root = createThreadTree(HEADING);
-            treeModel = new DefaultTreeModel(root);
-            tree.setModel(treeModel);
-            threadTable = new HashMap<ThreadReference, List<String>>();
-        }
-
-    }
-
-    ThreadTreeNode createThreadTree(String label) {
-        return new ThreadTreeNode(label, null);
-    }
-
-    class ThreadTreeNode extends DefaultMutableTreeNode {
-
-        String name;
-        ThreadReference thread; // null if thread group
-        long uid;
-        String description;
-
-        ThreadTreeNode(String name, ThreadReference thread) {
-            if (name == null) {
-                name = "<unnamed>";
-            }
-            this.name = name;
-            this.thread = thread;
-            if (thread == null) {
-                this.uid = -1;
-                this.description = name;
-            } else {
-                this.uid = thread.uniqueID();
-                this.description = name + " (t@" + Long.toHexString(uid) + ")";
-            }
-        }
-
-        @Override
-        public String toString() {
-            return description;
-        }
-
-        public String getName() {
-            return name;
-        }
-
-        public ThreadReference getThread() {
-            return thread;
-        }
-
-        public String getThreadId() {
-            return "t@" + Long.toHexString(uid);
-        }
-
-        private boolean isThreadGroup() {
-            return (thread == null);
-        }
-
-        @Override
-        public boolean isLeaf() {
-            return !isThreadGroup();
-        }
-
-        public void addThread(ThreadReference thread) {
-            // This can fail if the VM disconnects.
-            // It is important to do all necessary JDI calls
-            // before modifying the tree, so we don't abort
-            // midway through!
-            if (threadTable.get(thread) == null) {
-                // Add thread only if not already present.
-                try {
-                    List<String> path = threadPath(thread);
-                    // May not get here due to exception.
-                    // If we get here, we are committed.
-                    // We must not leave the tree partially updated.
-                    try {
-                        threadTable.put(thread, path);
-                        addThread(path, thread);
-                    } catch (Throwable tt) {
-                        //### Assertion failure.
-                        throw new RuntimeException("ThreadTree corrupted");
-                    }
-                } catch (VMDisconnectedException ee) {
-                    // Ignore.  Thread will not be added.
-                }
-            }
-        }
-
-        private void addThread(List<String> threadPath, ThreadReference thread) {
-            int size = threadPath.size();
-            if (size == 0) {
-                return;
-            } else if (size == 1) {
-                String name = threadPath.get(0);
-                insertNode(name, thread);
-            } else {
-                String head = threadPath.get(0);
-                List<String> tail = threadPath.subList(1, size);
-                ThreadTreeNode child = insertNode(head, null);
-                child.addThread(tail, thread);
-            }
-        }
-
-        private ThreadTreeNode insertNode(String name, ThreadReference thread) {
-            for (int i = 0; i < getChildCount(); i++) {
-                ThreadTreeNode child = (ThreadTreeNode)getChildAt(i);
-                int cmp = name.compareTo(child.getName());
-                if (cmp == 0 && thread == null) {
-                    // A like-named interior node already exists.
-                    return child;
-                } else if (cmp < 0) {
-                    // Insert new node before the child.
-                    ThreadTreeNode newChild = new ThreadTreeNode(name, thread);
-                    treeModel.insertNodeInto(newChild, this, i);
-                    return newChild;
-                }
-            }
-            // Insert new node after last child.
-            ThreadTreeNode newChild = new ThreadTreeNode(name, thread);
-            treeModel.insertNodeInto(newChild, this, getChildCount());
-            return newChild;
-        }
-
-        public void removeThread(ThreadReference thread) {
-            List<String> threadPath = threadTable.get(thread);
-            // Only remove thread if we recorded it in table.
-            // Original add may have failed due to VM disconnect.
-            if (threadPath != null) {
-                removeThread(threadPath, thread);
-            }
-        }
-
-        private void removeThread(List<String> threadPath, ThreadReference thread) {
-            int size = threadPath.size();
-            if (size == 0) {
-                return;
-            } else if (size == 1) {
-                String name = threadPath.get(0);
-                ThreadTreeNode child = findLeafNode(thread, name);
-                treeModel.removeNodeFromParent(child);
-            } else {
-                String head = threadPath.get(0);
-                List<String> tail = threadPath.subList(1, size);
-                ThreadTreeNode child = findInternalNode(head);
-                child.removeThread(tail, thread);
-                if (child.isThreadGroup() && child.getChildCount() < 1) {
-                    // Prune non-leaf nodes with no children.
-                    treeModel.removeNodeFromParent(child);
-                }
-            }
-        }
-
-        private ThreadTreeNode findLeafNode(ThreadReference thread, String name) {
-            for (int i = 0; i < getChildCount(); i++) {
-                ThreadTreeNode child = (ThreadTreeNode)getChildAt(i);
-                if (child.getThread() == thread) {
-                    if (!name.equals(child.getName())) {
-                        //### Assertion failure.
-                        throw new RuntimeException("name mismatch");
-                    }
-                    return child;
-                }
-            }
-            //### Assertion failure.
-            throw new RuntimeException("not found");
-        }
-
-        private ThreadTreeNode findInternalNode(String name) {
-            for (int i = 0; i < getChildCount(); i++) {
-                ThreadTreeNode child = (ThreadTreeNode)getChildAt(i);
-                if (name.equals(child.getName())) {
-                    return child;
-                }
-            }
-            //### Assertion failure.
-            throw new RuntimeException("not found");
-        }
-
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/gui/TypeScript.java b/ojluni/src/main/java/com/sun/tools/example/debug/gui/TypeScript.java
deleted file mode 100755
index 254e9fa..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/gui/TypeScript.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * Copyright (c) 1998, 1999, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.gui;
-
-import java.awt.*;
-import java.awt.event.*;
-import javax.swing.*;
-
-public class TypeScript extends JPanel {
-
-    private static final long serialVersionUID = -983704841363534885L;
-    private JTextArea history;
-    private JTextField entry;
-
-    private JLabel promptLabel;
-
-    private JScrollBar historyVScrollBar;
-    private JScrollBar historyHScrollBar;
-
-    private boolean echoInput = false;
-
-    private static String newline = System.getProperty("line.separator");
-
-    public TypeScript(String prompt) {
-        this(prompt, true);
-    }
-
-    public TypeScript(String prompt, boolean echoInput) {
-        this.echoInput = echoInput;
-
-        setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
-        //setBorder(new EmptyBorder(5, 5, 5, 5));
-
-        history = new JTextArea(0, 0);
-        history.setEditable(false);
-        JScrollPane scroller = new JScrollPane(history);
-        historyVScrollBar = scroller.getVerticalScrollBar();
-        historyHScrollBar = scroller.getHorizontalScrollBar();
-
-        add(scroller);
-
-        JPanel cmdLine = new JPanel();
-        cmdLine.setLayout(new BoxLayout(cmdLine, BoxLayout.X_AXIS));
-        //cmdLine.setBorder(new EmptyBorder(5, 5, 0, 0));
-
-        promptLabel = new JLabel(prompt + " ");
-        cmdLine.add(promptLabel);
-        entry = new JTextField();
-//### Swing bug workaround.
-entry.setMaximumSize(new Dimension(1000, 20));
-        cmdLine.add(entry);
-        add(cmdLine);
-    }
-
-    /******
-    public void setFont(Font f) {
-        entry.setFont(f);
-        history.setFont(f);
-    }
-    ******/
-
-    public void setPrompt(String prompt) {
-        promptLabel.setText(prompt + " ");
-    }
-
-    public void append(String text) {
-        history.append(text);
-        historyVScrollBar.setValue(historyVScrollBar.getMaximum());
-        historyHScrollBar.setValue(historyHScrollBar.getMinimum());
-    }
-
-    public void newline() {
-        history.append(newline);
-        historyVScrollBar.setValue(historyVScrollBar.getMaximum());
-        historyHScrollBar.setValue(historyHScrollBar.getMinimum());
-    }
-
-    public void flush() {}
-
-    public void addActionListener(ActionListener a) {
-        entry.addActionListener(a);
-    }
-
-    public void removeActionListener(ActionListener a) {
-        entry.removeActionListener(a);
-    }
-
-    public String readln() {
-        String text = entry.getText();
-        entry.setText("");
-        if (echoInput) {
-            history.append(">>>");
-            history.append(text);
-            history.append(newline);
-            historyVScrollBar.setValue(historyVScrollBar.getMaximum());
-            historyHScrollBar.setValue(historyHScrollBar.getMinimum());
-        }
-        return text;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/gui/TypeScriptOutputListener.java b/ojluni/src/main/java/com/sun/tools/example/debug/gui/TypeScriptOutputListener.java
deleted file mode 100755
index e284e77..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/gui/TypeScriptOutputListener.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (c) 1998, 1999, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.gui;
-
-import com.sun.tools.example.debug.bdi.OutputListener;
-
-public class TypeScriptOutputListener implements OutputListener {
-
-    private TypeScript script;
-    private boolean appendNewline;
-
-    public TypeScriptOutputListener(TypeScript script) {
-        this(script, false);
-    }
-
-    public TypeScriptOutputListener(TypeScript script, boolean appendNewline) {
-        this.script = script;
-        this.appendNewline = appendNewline;
-    }
-
-    @Override
-    public void putString(String s) {
-        script.append(s);
-        if (appendNewline) {
-            script.newline();
-    }
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/gui/TypeScriptWriter.java b/ojluni/src/main/java/com/sun/tools/example/debug/gui/TypeScriptWriter.java
deleted file mode 100755
index 462d4a5..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/gui/TypeScriptWriter.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (c) 1998, 1999, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.gui;
-
-import java.io.*;
-
-public class TypeScriptWriter extends Writer {
-
-    TypeScript script;
-
-    public TypeScriptWriter(TypeScript script) {
-        this.script = script;
-    }
-
-    @Override
-    public void write(char[] cbuf, int off, int len) throws IOException {
-        script.append(String.valueOf(cbuf, off, len));
-    }
-
-    @Override
-    public void flush() {
-        script.flush();
-    }
-
-    @Override
-    public void close() {
-        script.flush();
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/tty/AccessWatchpointSpec.java b/ojluni/src/main/java/com/sun/tools/example/debug/tty/AccessWatchpointSpec.java
deleted file mode 100755
index 0f72fb4..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/tty/AccessWatchpointSpec.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (c) 1998, 2001, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.tty;
-
-import com.sun.jdi.*;
-import com.sun.jdi.request.*;
-
-class AccessWatchpointSpec extends WatchpointSpec {
-
-    AccessWatchpointSpec(ReferenceTypeSpec refSpec, String fieldId)
-                                  throws MalformedMemberNameException {
-        super(refSpec, fieldId);
-    }
-
-    /**
-     * The 'refType' is known to match, return the EventRequest.
-     */
-    @Override
-    EventRequest resolveEventRequest(ReferenceType refType)
-                                      throws NoSuchFieldException {
-        Field field = refType.fieldByName(fieldId);
-        EventRequestManager em = refType.virtualMachine().eventRequestManager();
-        EventRequest wp = em.createAccessWatchpointRequest(field);
-        wp.setSuspendPolicy(suspendPolicy);
-        wp.enable();
-        return wp;
-    }
-
-    @Override
-    public String toString() {
-        return MessageOutput.format("watch accesses of",
-                                    new Object [] {refSpec.toString(),
-                                                   fieldId});
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/tty/AmbiguousMethodException.java b/ojluni/src/main/java/com/sun/tools/example/debug/tty/AmbiguousMethodException.java
deleted file mode 100755
index 35329bc..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/tty/AmbiguousMethodException.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (c) 1998, 2001, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.tty;
-
-public class AmbiguousMethodException extends Exception
-{
-    private static final long serialVersionUID = -5372629264936918654L;
-
-    public AmbiguousMethodException()
-    {
-        super();
-    }
-
-    public AmbiguousMethodException(String s)
-    {
-        super(s);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/tty/BreakpointSpec.java b/ojluni/src/main/java/com/sun/tools/example/debug/tty/BreakpointSpec.java
deleted file mode 100755
index 87a9a30..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/tty/BreakpointSpec.java
+++ /dev/null
@@ -1,391 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.tty;
-
-import com.sun.jdi.*;
-import com.sun.jdi.request.*;
-
-import java.util.ArrayList;
-import java.util.List;
-
-class BreakpointSpec extends EventRequestSpec {
-    String methodId;
-    List<String> methodArgs;
-    int lineNumber;
-
-    BreakpointSpec(ReferenceTypeSpec refSpec, int lineNumber) {
-        super(refSpec);
-        this.methodId = null;
-        this.methodArgs = null;
-        this.lineNumber = lineNumber;
-    }
-
-    BreakpointSpec(ReferenceTypeSpec refSpec, String methodId,
-                   List<String> methodArgs) throws MalformedMemberNameException {
-        super(refSpec);
-        this.methodId = methodId;
-        this.methodArgs = methodArgs;
-        this.lineNumber = 0;
-        if (!isValidMethodName(methodId)) {
-            throw new MalformedMemberNameException(methodId);
-        }
-    }
-
-    /**
-     * The 'refType' is known to match, return the EventRequest.
-     */
-    @Override
-    EventRequest resolveEventRequest(ReferenceType refType)
-                           throws AmbiguousMethodException,
-                                  AbsentInformationException,
-                                  InvalidTypeException,
-                                  NoSuchMethodException,
-                                  LineNotFoundException {
-        Location location = location(refType);
-        if (location == null) {
-            throw new InvalidTypeException();
-        }
-        EventRequestManager em = refType.virtualMachine().eventRequestManager();
-        EventRequest bp = em.createBreakpointRequest(location);
-        bp.setSuspendPolicy(suspendPolicy);
-        bp.enable();
-        return bp;
-    }
-
-    String methodName() {
-        return methodId;
-    }
-
-    int lineNumber() {
-        return lineNumber;
-    }
-
-    List<String> methodArgs() {
-        return methodArgs;
-    }
-
-    boolean isMethodBreakpoint() {
-        return (methodId != null);
-    }
-
-    @Override
-    public int hashCode() {
-        return refSpec.hashCode() + lineNumber +
-            ((methodId != null) ? methodId.hashCode() : 0) +
-            ((methodArgs != null) ? methodArgs.hashCode() : 0);
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-        if (obj instanceof BreakpointSpec) {
-            BreakpointSpec breakpoint = (BreakpointSpec)obj;
-
-            return ((methodId != null) ?
-                        methodId.equals(breakpoint.methodId)
-                      : methodId == breakpoint.methodId) &&
-                   ((methodArgs != null) ?
-                        methodArgs.equals(breakpoint.methodArgs)
-                      : methodArgs == breakpoint.methodArgs) &&
-                   refSpec.equals(breakpoint.refSpec) &&
-                   (lineNumber == breakpoint.lineNumber);
-        } else {
-            return false;
-        }
-    }
-
-    @Override
-    String errorMessageFor(Exception e) {
-        if (e instanceof AmbiguousMethodException) {
-            return (MessageOutput.format("Method is overloaded; specify arguments",
-                                         methodName()));
-            /*
-             * TO DO: list the methods here
-             */
-        } else if (e instanceof NoSuchMethodException) {
-            return (MessageOutput.format("No method in",
-                                         new Object [] {methodName(),
-                                                        refSpec.toString()}));
-        } else if (e instanceof AbsentInformationException) {
-            return (MessageOutput.format("No linenumber information for",
-                                         refSpec.toString()));
-        } else if (e instanceof LineNotFoundException) {
-            return (MessageOutput.format("No code at line",
-                                         new Object [] {new Long (lineNumber()),
-                                                        refSpec.toString()}));
-        } else if (e instanceof InvalidTypeException) {
-            return (MessageOutput.format("Breakpoints can be located only in classes.",
-                                         refSpec.toString()));
-        } else {
-            return super.errorMessageFor( e);
-        }
-    }
-
-    @Override
-    public String toString() {
-        StringBuffer buffer = new StringBuffer(refSpec.toString());
-        if (isMethodBreakpoint()) {
-            buffer.append('.');
-            buffer.append(methodId);
-            if (methodArgs != null) {
-                boolean first = true;
-                buffer.append('(');
-                for (String arg : methodArgs) {
-                    if (!first) {
-                        buffer.append(',');
-                    }
-                    buffer.append(arg);
-                    first = false;
-                }
-                buffer.append(")");
-            }
-        } else {
-            buffer.append(':');
-            buffer.append(lineNumber);
-        }
-        return MessageOutput.format("breakpoint", buffer.toString());
-    }
-
-    private Location location(ReferenceType refType) throws
-                                    AmbiguousMethodException,
-                                    AbsentInformationException,
-                                    NoSuchMethodException,
-                                    LineNotFoundException {
-        Location location = null;
-        if (isMethodBreakpoint()) {
-            Method method = findMatchingMethod(refType);
-            location = method.location();
-        } else {
-            // let AbsentInformationException be thrown
-            List<Location> locs = refType.locationsOfLine(lineNumber());
-            if (locs.size() == 0) {
-                throw new LineNotFoundException();
-            }
-            // TO DO: handle multiple locations
-            location = locs.get(0);
-            if (location.method() == null) {
-                throw new LineNotFoundException();
-            }
-        }
-        return location;
-    }
-
-    private boolean isValidMethodName(String s) {
-        return isJavaIdentifier(s) ||
-               s.equals("<init>") ||
-               s.equals("<clinit>");
-    }
-
-    /*
-     * Compare a method's argument types with a Vector of type names.
-     * Return true if each argument type has a name identical to the
-     * corresponding string in the vector (allowing for varars)
-     * and if the number of arguments in the method matches the
-     * number of names passed
-     */
-    private boolean compareArgTypes(Method method, List<String> nameList) {
-        List<String> argTypeNames = method.argumentTypeNames();
-
-        // If argument counts differ, we can stop here
-        if (argTypeNames.size() != nameList.size()) {
-            return false;
-        }
-
-        // Compare each argument type's name
-        int nTypes = argTypeNames.size();
-        for (int i = 0; i < nTypes; ++i) {
-            String comp1 = argTypeNames.get(i);
-            String comp2 = nameList.get(i);
-            if (! comp1.equals(comp2)) {
-                /*
-                 * We have to handle varargs.  EG, the
-                 * method's last arg type is xxx[]
-                 * while the nameList contains xxx...
-                 * Note that the nameList can also contain
-                 * xxx[] in which case we don't get here.
-                 */
-                if (i != nTypes - 1 ||
-                    !method.isVarArgs()  ||
-                    !comp2.endsWith("...")) {
-                    return false;
-                }
-                /*
-                 * The last types differ, it is a varargs
-                 * method and the nameList item is varargs.
-                 * We just have to compare the type names, eg,
-                 * make sure we don't have xxx[] for the method
-                 * arg type and yyy... for the nameList item.
-                 */
-                int comp1Length = comp1.length();
-                if (comp1Length + 1 != comp2.length()) {
-                    // The type names are different lengths
-                    return false;
-                }
-                // We know the two type names are the same length
-                if (!comp1.regionMatches(0, comp2, 0, comp1Length - 2)) {
-                    return false;
-                }
-                // We do have xxx[] and xxx... as the last param type
-                return true;
-            }
-        }
-
-        return true;
-    }
-
-
-    /*
-     * Remove unneeded spaces and expand class names to fully
-     * qualified names, if necessary and possible.
-     */
-    private String normalizeArgTypeName(String name) {
-        /*
-         * Separate the type name from any array modifiers,
-         * stripping whitespace after the name ends
-         */
-        int i = 0;
-        StringBuffer typePart = new StringBuffer();
-        StringBuffer arrayPart = new StringBuffer();
-        name = name.trim();
-        int nameLength = name.length();
-        /*
-         * For varargs, there can be spaces before the ... but not
-         * within the ...  So, we will just ignore the ...
-         * while stripping blanks.
-         */
-        boolean isVarArgs = name.endsWith("...");
-        if (isVarArgs) {
-            nameLength -= 3;
-        }
-        while (i < nameLength) {
-            char c = name.charAt(i);
-            if (Character.isWhitespace(c) || c == '[') {
-                break;      // name is complete
-            }
-            typePart.append(c);
-            i++;
-        }
-        while (i < nameLength) {
-            char c = name.charAt(i);
-            if ( (c == '[') || (c == ']')) {
-                arrayPart.append(c);
-            } else if (!Character.isWhitespace(c)) {
-                throw new IllegalArgumentException
-                    (MessageOutput.format("Invalid argument type name"));
-            }
-            i++;
-        }
-        name = typePart.toString();
-
-        /*
-         * When there's no sign of a package name already, try to expand the
-         * the name to a fully qualified class name
-         */
-        if ((name.indexOf('.') == -1) || name.startsWith("*.")) {
-            try {
-                ReferenceType argClass = Env.getReferenceTypeFromToken(name);
-                if (argClass != null) {
-                    name = argClass.name();
-                }
-            } catch (IllegalArgumentException e) {
-                // We'll try the name as is
-            }
-        }
-        name += arrayPart.toString();
-        if (isVarArgs) {
-            name += "...";
-        }
-        return name;
-    }
-
-    /*
-     * Attempt an unambiguous match of the method name and
-     * argument specification to a method. If no arguments
-     * are specified, the method must not be overloaded.
-     * Otherwise, the argument types much match exactly
-     */
-    private Method findMatchingMethod(ReferenceType refType)
-                                        throws AmbiguousMethodException,
-                                               NoSuchMethodException {
-
-        // Normalize the argument string once before looping below.
-        List<String> argTypeNames = null;
-        if (methodArgs() != null) {
-            argTypeNames = new ArrayList<String>(methodArgs().size());
-            for (String name : methodArgs()) {
-                name = normalizeArgTypeName(name);
-                argTypeNames.add(name);
-            }
-        }
-
-        // Check each method in the class for matches
-        Method firstMatch = null;  // first method with matching name
-        Method exactMatch = null;  // (only) method with same name & sig
-        int matchCount = 0;        // > 1 implies overload
-        for (Method candidate : refType.methods()) {
-            if (candidate.name().equals(methodName())) {
-                matchCount++;
-
-                // Remember the first match in case it is the only one
-                if (matchCount == 1) {
-                    firstMatch = candidate;
-                }
-
-                // If argument types were specified, check against candidate
-                if ((argTypeNames != null)
-                        && compareArgTypes(candidate, argTypeNames) == true) {
-                    exactMatch = candidate;
-                    break;
-                }
-            }
-        }
-
-        // Determine method for breakpoint
-        Method method = null;
-        if (exactMatch != null) {
-            // Name and signature match
-            method = exactMatch;
-        } else if ((argTypeNames == null) && (matchCount > 0)) {
-            // At least one name matched and no arg types were specified
-            if (matchCount == 1) {
-                method = firstMatch;       // Only one match; safe to use it
-            } else {
-                throw new AmbiguousMethodException();
-            }
-        } else {
-            throw new NoSuchMethodException(methodName());
-        }
-        return method;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/tty/Commands.java b/ojluni/src/main/java/com/sun/tools/example/debug/tty/Commands.java
deleted file mode 100755
index d6fa909..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/tty/Commands.java
+++ /dev/null
@@ -1,2107 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.tty;
-
-import com.sun.jdi.*;
-import com.sun.jdi.connect.Connector;
-import com.sun.jdi.request.*;
-import com.sun.tools.example.debug.expr.ExpressionParser;
-import com.sun.tools.example.debug.expr.ParseException;
-
-import java.text.*;
-import java.util.*;
-import java.io.*;
-
-class Commands {
-
-    abstract class AsyncExecution {
-        abstract void action();
-
-        AsyncExecution() {
-            execute();
-        }
-
-        void execute() {
-            /*
-             * Save current thread and stack frame. (BugId 4296031)
-             */
-            final ThreadInfo threadInfo = ThreadInfo.getCurrentThreadInfo();
-            final int stackFrame = threadInfo == null? 0 : threadInfo.getCurrentFrameIndex();
-            Thread thread = new Thread("asynchronous jdb command") {
-                    @Override
-                    public void run() {
-                        try {
-                            action();
-                        } catch (UnsupportedOperationException uoe) {
-                            //(BugId 4453329)
-                            MessageOutput.println("Operation is not supported on the target VM");
-                        } catch (Exception e) {
-                            MessageOutput.println("Internal exception during operation:",
-                                                  e.getMessage());
-                        } finally {
-                            /*
-                             * This was an asynchronous command.  Events may have been
-                             * processed while it was running.  Restore the thread and
-                             * stack frame the user was looking at.  (BugId 4296031)
-                             */
-                            if (threadInfo != null) {
-                                ThreadInfo.setCurrentThreadInfo(threadInfo);
-                                try {
-                                    threadInfo.setCurrentFrameIndex(stackFrame);
-                                } catch (IncompatibleThreadStateException e) {
-                                    MessageOutput.println("Current thread isnt suspended.");
-                                } catch (ArrayIndexOutOfBoundsException e) {
-                                    MessageOutput.println("Requested stack frame is no longer active:",
-                                                          new Object []{new Integer(stackFrame)});
-                                }
-                            }
-                            MessageOutput.printPrompt();
-                        }
-                    }
-                };
-            thread.start();
-        }
-    }
-
-    Commands() {
-    }
-
-    private Value evaluate(String expr) {
-        Value result = null;
-        ExpressionParser.GetFrame frameGetter = null;
-        try {
-            final ThreadInfo threadInfo = ThreadInfo.getCurrentThreadInfo();
-            if ((threadInfo != null) && (threadInfo.getCurrentFrame() != null)) {
-                frameGetter = new ExpressionParser.GetFrame() {
-                        @Override
-                        public StackFrame get() throws IncompatibleThreadStateException {
-                            return threadInfo.getCurrentFrame();
-                        }
-                    };
-            }
-            result = ExpressionParser.evaluate(expr, Env.vm(), frameGetter);
-        } catch (InvocationException ie) {
-            MessageOutput.println("Exception in expression:",
-                                  ie.exception().referenceType().name());
-        } catch (Exception ex) {
-            String exMessage = ex.getMessage();
-            if (exMessage == null) {
-                MessageOutput.printException(exMessage, ex);
-            } else {
-                String s;
-                try {
-                    s = MessageOutput.format(exMessage);
-                } catch (MissingResourceException mex) {
-                    s = ex.toString();
-                }
-                MessageOutput.printDirectln(s);// Special case: use printDirectln()
-            }
-        }
-        return result;
-    }
-
-    private String getStringValue() {
-         Value val = null;
-         String valStr = null;
-         try {
-              val = ExpressionParser.getMassagedValue();
-              valStr = val.toString();
-         } catch (ParseException e) {
-              String msg = e.getMessage();
-              if (msg == null) {
-                  MessageOutput.printException(msg, e);
-              } else {
-                  String s;
-                  try {
-                      s = MessageOutput.format(msg);
-                  } catch (MissingResourceException mex) {
-                      s = e.toString();
-                  }
-                  MessageOutput.printDirectln(s);
-              }
-         }
-         return valStr;
-    }
-
-    private ThreadInfo doGetThread(String idToken) {
-        ThreadInfo threadInfo = ThreadInfo.getThreadInfo(idToken);
-        if (threadInfo == null) {
-            MessageOutput.println("is not a valid thread id", idToken);
-        }
-        return threadInfo;
-    }
-
-    String typedName(Method method) {
-        StringBuffer buf = new StringBuffer();
-        buf.append(method.name());
-        buf.append("(");
-
-        List<String> args = method.argumentTypeNames();
-        int lastParam = args.size() - 1;
-        // output param types except for the last
-        for (int ii = 0; ii < lastParam; ii++) {
-            buf.append(args.get(ii));
-            buf.append(", ");
-        }
-        if (lastParam >= 0) {
-            // output the last param
-            String lastStr = args.get(lastParam);
-            if (method.isVarArgs()) {
-                // lastParam is an array.  Replace the [] with ...
-                buf.append(lastStr.substring(0, lastStr.length() - 2));
-                buf.append("...");
-            } else {
-                buf.append(lastStr);
-            }
-        }
-        buf.append(")");
-        return buf.toString();
-    }
-
-    void commandConnectors(VirtualMachineManager vmm) {
-        Collection<Connector> ccs = vmm.allConnectors();
-        if (ccs.isEmpty()) {
-            MessageOutput.println("Connectors available");
-        }
-        for (Connector cc : ccs) {
-            String transportName =
-                cc.transport() == null ? "null" : cc.transport().name();
-            MessageOutput.println();
-            MessageOutput.println("Connector and Transport name",
-                                  new Object [] {cc.name(), transportName});
-            MessageOutput.println("Connector description", cc.description());
-
-            for (Connector.Argument aa : cc.defaultArguments().values()) {
-                    MessageOutput.println();
-
-                    boolean requiredArgument = aa.mustSpecify();
-                    if (aa.value() == null || aa.value() == "") {
-                        //no current value and no default.
-                        MessageOutput.println(requiredArgument ?
-                                              "Connector required argument nodefault" :
-                                              "Connector argument nodefault", aa.name());
-                    } else {
-                        MessageOutput.println(requiredArgument ?
-                                              "Connector required argument default" :
-                                              "Connector argument default",
-                                              new Object [] {aa.name(), aa.value()});
-                    }
-                    MessageOutput.println("Connector description", aa.description());
-
-                }
-            }
-
-    }
-
-    void commandClasses() {
-        StringBuffer classList = new StringBuffer();
-        for (ReferenceType refType : Env.vm().allClasses()) {
-            classList.append(refType.name());
-            classList.append("\n");
-        }
-        MessageOutput.print("** classes list **", classList.toString());
-    }
-
-    void commandClass(StringTokenizer t) {
-
-        if (!t.hasMoreTokens()) {
-            MessageOutput.println("No class specified.");
-            return;
-        }
-
-        String idClass = t.nextToken();
-        boolean showAll = false;
-
-        if (t.hasMoreTokens()) {
-            if (t.nextToken().toLowerCase().equals("all")) {
-                showAll = true;
-            } else {
-                MessageOutput.println("Invalid option on class command");
-                return;
-            }
-        }
-        ReferenceType type = Env.getReferenceTypeFromToken(idClass);
-        if (type == null) {
-            MessageOutput.println("is not a valid id or class name", idClass);
-            return;
-        }
-        if (type instanceof ClassType) {
-            ClassType clazz = (ClassType)type;
-            MessageOutput.println("Class:", clazz.name());
-
-            ClassType superclass = clazz.superclass();
-            while (superclass != null) {
-                MessageOutput.println("extends:", superclass.name());
-                superclass = showAll ? superclass.superclass() : null;
-            }
-
-            List<InterfaceType> interfaces =
-                showAll ? clazz.allInterfaces() : clazz.interfaces();
-            for (InterfaceType interfaze : interfaces) {
-                MessageOutput.println("implements:", interfaze.name());
-            }
-
-            for (ClassType sub : clazz.subclasses()) {
-                MessageOutput.println("subclass:", sub.name());
-            }
-            for (ReferenceType nest : clazz.nestedTypes()) {
-                MessageOutput.println("nested:", nest.name());
-            }
-        } else if (type instanceof InterfaceType) {
-            InterfaceType interfaze = (InterfaceType)type;
-            MessageOutput.println("Interface:", interfaze.name());
-            for (InterfaceType superinterface : interfaze.superinterfaces()) {
-                MessageOutput.println("extends:", superinterface.name());
-            }
-            for (InterfaceType sub : interfaze.subinterfaces()) {
-                MessageOutput.println("subinterface:", sub.name());
-            }
-            for (ClassType implementor : interfaze.implementors()) {
-                MessageOutput.println("implementor:", implementor.name());
-            }
-            for (ReferenceType nest : interfaze.nestedTypes()) {
-                MessageOutput.println("nested:", nest.name());
-            }
-        } else {  // array type
-            ArrayType array = (ArrayType)type;
-            MessageOutput.println("Array:", array.name());
-        }
-    }
-
-    void commandMethods(StringTokenizer t) {
-        if (!t.hasMoreTokens()) {
-            MessageOutput.println("No class specified.");
-            return;
-        }
-
-        String idClass = t.nextToken();
-        ReferenceType cls = Env.getReferenceTypeFromToken(idClass);
-        if (cls != null) {
-            StringBuffer methodsList = new StringBuffer();
-            for (Method method : cls.allMethods()) {
-                methodsList.append(method.declaringType().name());
-                methodsList.append(" ");
-                methodsList.append(typedName(method));
-                methodsList.append('\n');
-            }
-            MessageOutput.print("** methods list **", methodsList.toString());
-        } else {
-            MessageOutput.println("is not a valid id or class name", idClass);
-        }
-    }
-
-    void commandFields(StringTokenizer t) {
-        if (!t.hasMoreTokens()) {
-            MessageOutput.println("No class specified.");
-            return;
-        }
-
-        String idClass = t.nextToken();
-        ReferenceType cls = Env.getReferenceTypeFromToken(idClass);
-        if (cls != null) {
-            List<Field> fields = cls.allFields();
-            List<Field> visible = cls.visibleFields();
-            StringBuffer fieldsList = new StringBuffer();
-            for (Field field : fields) {
-                String s;
-                if (!visible.contains(field)) {
-                    s = MessageOutput.format("list field typename and name hidden",
-                                             new Object [] {field.typeName(),
-                                                            field.name()});
-                } else if (!field.declaringType().equals(cls)) {
-                    s = MessageOutput.format("list field typename and name inherited",
-                                             new Object [] {field.typeName(),
-                                                            field.name(),
-                                                            field.declaringType().name()});
-                } else {
-                    s = MessageOutput.format("list field typename and name",
-                                             new Object [] {field.typeName(),
-                                                            field.name()});
-                }
-                fieldsList.append(s);
-            }
-            MessageOutput.print("** fields list **", fieldsList.toString());
-        } else {
-            MessageOutput.println("is not a valid id or class name", idClass);
-        }
-    }
-
-    private void printThreadGroup(ThreadGroupReference tg) {
-        ThreadIterator threadIter = new ThreadIterator(tg);
-
-        MessageOutput.println("Thread Group:", tg.name());
-        int maxIdLength = 0;
-        int maxNameLength = 0;
-        while (threadIter.hasNext()) {
-            ThreadReference thr = threadIter.next();
-            maxIdLength = Math.max(maxIdLength,
-                                   Env.description(thr).length());
-            maxNameLength = Math.max(maxNameLength,
-                                     thr.name().length());
-        }
-
-        threadIter = new ThreadIterator(tg);
-        while (threadIter.hasNext()) {
-            ThreadReference thr = threadIter.next();
-            if (thr.threadGroup() == null) {
-                continue;
-            }
-            // Note any thread group changes
-            if (!thr.threadGroup().equals(tg)) {
-                tg = thr.threadGroup();
-                MessageOutput.println("Thread Group:", tg.name());
-            }
-
-            /*
-             * Do a bit of filling with whitespace to get thread ID
-             * and thread names to line up in the listing, and also
-             * allow for proper localization.  This also works for
-             * very long thread names, at the possible cost of lines
-             * being wrapped by the display device.
-             */
-            StringBuffer idBuffer = new StringBuffer(Env.description(thr));
-            for (int i = idBuffer.length(); i < maxIdLength; i++) {
-                idBuffer.append(" ");
-            }
-            StringBuffer nameBuffer = new StringBuffer(thr.name());
-            for (int i = nameBuffer.length(); i < maxNameLength; i++) {
-                nameBuffer.append(" ");
-            }
-
-            /*
-             * Select the output format to use based on thread status
-             * and breakpoint.
-             */
-            String statusFormat;
-            switch (thr.status()) {
-            case ThreadReference.THREAD_STATUS_UNKNOWN:
-                if (thr.isAtBreakpoint()) {
-                    statusFormat = "Thread description name unknownStatus BP";
-                } else {
-                    statusFormat = "Thread description name unknownStatus";
-                }
-                break;
-            case ThreadReference.THREAD_STATUS_ZOMBIE:
-                if (thr.isAtBreakpoint()) {
-                    statusFormat = "Thread description name zombieStatus BP";
-                } else {
-                    statusFormat = "Thread description name zombieStatus";
-                }
-                break;
-            case ThreadReference.THREAD_STATUS_RUNNING:
-                if (thr.isAtBreakpoint()) {
-                    statusFormat = "Thread description name runningStatus BP";
-                } else {
-                    statusFormat = "Thread description name runningStatus";
-                }
-                break;
-            case ThreadReference.THREAD_STATUS_SLEEPING:
-                if (thr.isAtBreakpoint()) {
-                    statusFormat = "Thread description name sleepingStatus BP";
-                } else {
-                    statusFormat = "Thread description name sleepingStatus";
-                }
-                break;
-            case ThreadReference.THREAD_STATUS_MONITOR:
-                if (thr.isAtBreakpoint()) {
-                    statusFormat = "Thread description name waitingStatus BP";
-                } else {
-                    statusFormat = "Thread description name waitingStatus";
-                }
-                break;
-            case ThreadReference.THREAD_STATUS_WAIT:
-                if (thr.isAtBreakpoint()) {
-                    statusFormat = "Thread description name condWaitstatus BP";
-                } else {
-                    statusFormat = "Thread description name condWaitstatus";
-                }
-                break;
-            default:
-                throw new InternalError(MessageOutput.format("Invalid thread status."));
-            }
-            MessageOutput.println(statusFormat,
-                                  new Object [] {idBuffer.toString(),
-                                                 nameBuffer.toString()});
-        }
-    }
-
-    void commandThreads(StringTokenizer t) {
-        if (!t.hasMoreTokens()) {
-            printThreadGroup(ThreadInfo.group());
-            return;
-        }
-        String name = t.nextToken();
-        ThreadGroupReference tg = ThreadGroupIterator.find(name);
-        if (tg == null) {
-            MessageOutput.println("is not a valid threadgroup name", name);
-        } else {
-            printThreadGroup(tg);
-        }
-    }
-
-    void commandThreadGroups() {
-        ThreadGroupIterator it = new ThreadGroupIterator();
-        int cnt = 0;
-        while (it.hasNext()) {
-            ThreadGroupReference tg = it.nextThreadGroup();
-            ++cnt;
-            MessageOutput.println("thread group number description name",
-                                  new Object [] { new Integer (cnt),
-                                                  Env.description(tg),
-                                                  tg.name()});
-        }
-    }
-
-    void commandThread(StringTokenizer t) {
-        if (!t.hasMoreTokens()) {
-            MessageOutput.println("Thread number not specified.");
-            return;
-        }
-        ThreadInfo threadInfo = doGetThread(t.nextToken());
-        if (threadInfo != null) {
-            ThreadInfo.setCurrentThreadInfo(threadInfo);
-        }
-    }
-
-    void commandThreadGroup(StringTokenizer t) {
-        if (!t.hasMoreTokens()) {
-            MessageOutput.println("Threadgroup name not specified.");
-            return;
-        }
-        String name = t.nextToken();
-        ThreadGroupReference tg = ThreadGroupIterator.find(name);
-        if (tg == null) {
-            MessageOutput.println("is not a valid threadgroup name", name);
-        } else {
-            ThreadInfo.setThreadGroup(tg);
-        }
-    }
-
-    void commandRun(StringTokenizer t) {
-        /*
-         * The 'run' command makes little sense in a
-         * that doesn't support restarts or multiple VMs. However,
-         * this is an attempt to emulate the behavior of the old
-         * JDB as much as possible. For new users and implementations
-         * it is much more straightforward to launch immedidately
-         * with the -launch option.
-         */
-        VMConnection connection = Env.connection();
-        if (!connection.isLaunch()) {
-            if (!t.hasMoreTokens()) {
-                commandCont();
-            } else {
-                MessageOutput.println("run <args> command is valid only with launched VMs");
-            }
-            return;
-        }
-        if (connection.isOpen()) {
-            MessageOutput.println("VM already running. use cont to continue after events.");
-            return;
-        }
-
-        /*
-         * Set the main class and any arguments. Note that this will work
-         * only with the standard launcher, "com.sun.jdi.CommandLineLauncher"
-         */
-        String args;
-        if (t.hasMoreTokens()) {
-            args = t.nextToken("");
-            boolean argsSet = connection.setConnectorArg("main", args);
-            if (!argsSet) {
-                MessageOutput.println("Unable to set main class and arguments");
-                return;
-            }
-        } else {
-            args = connection.connectorArg("main");
-            if (args.length() == 0) {
-                MessageOutput.println("Main class and arguments must be specified");
-                return;
-            }
-        }
-        MessageOutput.println("run", args);
-
-        /*
-         * Launch the VM.
-         */
-        connection.open();
-
-    }
-
-    void commandLoad(StringTokenizer t) {
-        MessageOutput.println("The load command is no longer supported.");
-    }
-
-    private List<ThreadReference> allThreads(ThreadGroupReference group) {
-        List<ThreadReference> list = new ArrayList<ThreadReference>();
-        list.addAll(group.threads());
-        for (ThreadGroupReference child : group.threadGroups()) {
-            list.addAll(allThreads(child));
-        }
-        return list;
-    }
-
-    void commandSuspend(StringTokenizer t) {
-        if (!t.hasMoreTokens()) {
-            Env.vm().suspend();
-            MessageOutput.println("All threads suspended.");
-        } else {
-            while (t.hasMoreTokens()) {
-                ThreadInfo threadInfo = doGetThread(t.nextToken());
-                if (threadInfo != null) {
-                    threadInfo.getThread().suspend();
-                }
-            }
-        }
-    }
-
-    void commandResume(StringTokenizer t) {
-         if (!t.hasMoreTokens()) {
-             ThreadInfo.invalidateAll();
-             Env.vm().resume();
-             MessageOutput.println("All threads resumed.");
-         } else {
-             while (t.hasMoreTokens()) {
-                ThreadInfo threadInfo = doGetThread(t.nextToken());
-                if (threadInfo != null) {
-                    threadInfo.invalidate();
-                    threadInfo.getThread().resume();
-                }
-            }
-        }
-    }
-
-    void commandCont() {
-        if (ThreadInfo.getCurrentThreadInfo() == null) {
-            MessageOutput.println("Nothing suspended.");
-            return;
-        }
-        ThreadInfo.invalidateAll();
-        Env.vm().resume();
-    }
-
-    void clearPreviousStep(ThreadReference thread) {
-        /*
-         * A previous step may not have completed on this thread;
-         * if so, it gets removed here.
-         */
-         EventRequestManager mgr = Env.vm().eventRequestManager();
-         for (StepRequest request : mgr.stepRequests()) {
-             if (request.thread().equals(thread)) {
-                 mgr.deleteEventRequest(request);
-                 break;
-             }
-         }
-    }
-    /* step
-     *
-     */
-    void commandStep(StringTokenizer t) {
-        ThreadInfo threadInfo = ThreadInfo.getCurrentThreadInfo();
-        if (threadInfo == null) {
-            MessageOutput.println("Nothing suspended.");
-            return;
-        }
-        int depth;
-        if (t.hasMoreTokens() &&
-                  t.nextToken().toLowerCase().equals("up")) {
-            depth = StepRequest.STEP_OUT;
-        } else {
-            depth = StepRequest.STEP_INTO;
-        }
-
-        clearPreviousStep(threadInfo.getThread());
-        EventRequestManager reqMgr = Env.vm().eventRequestManager();
-        StepRequest request = reqMgr.createStepRequest(threadInfo.getThread(),
-                                                       StepRequest.STEP_LINE, depth);
-        if (depth == StepRequest.STEP_INTO) {
-            Env.addExcludes(request);
-        }
-        // We want just the next step event and no others
-        request.addCountFilter(1);
-        request.enable();
-        ThreadInfo.invalidateAll();
-        Env.vm().resume();
-    }
-
-    /* stepi
-     * step instruction.
-     */
-    void commandStepi() {
-        ThreadInfo threadInfo = ThreadInfo.getCurrentThreadInfo();
-        if (threadInfo == null) {
-            MessageOutput.println("Nothing suspended.");
-            return;
-        }
-        clearPreviousStep(threadInfo.getThread());
-        EventRequestManager reqMgr = Env.vm().eventRequestManager();
-        StepRequest request = reqMgr.createStepRequest(threadInfo.getThread(),
-                                                       StepRequest.STEP_MIN,
-                                                       StepRequest.STEP_INTO);
-        Env.addExcludes(request);
-        // We want just the next step event and no others
-        request.addCountFilter(1);
-        request.enable();
-        ThreadInfo.invalidateAll();
-        Env.vm().resume();
-    }
-
-    void commandNext() {
-        ThreadInfo threadInfo = ThreadInfo.getCurrentThreadInfo();
-        if (threadInfo == null) {
-            MessageOutput.println("Nothing suspended.");
-            return;
-        }
-        clearPreviousStep(threadInfo.getThread());
-        EventRequestManager reqMgr = Env.vm().eventRequestManager();
-        StepRequest request = reqMgr.createStepRequest(threadInfo.getThread(),
-                                                       StepRequest.STEP_LINE,
-                                                       StepRequest.STEP_OVER);
-        Env.addExcludes(request);
-        // We want just the next step event and no others
-        request.addCountFilter(1);
-        request.enable();
-        ThreadInfo.invalidateAll();
-        Env.vm().resume();
-    }
-
-    void doKill(ThreadReference thread, StringTokenizer t) {
-        if (!t.hasMoreTokens()) {
-            MessageOutput.println("No exception object specified.");
-            return;
-        }
-        String expr = t.nextToken("");
-        Value val = evaluate(expr);
-        if ((val != null) && (val instanceof ObjectReference)) {
-            try {
-                thread.stop((ObjectReference)val);
-                MessageOutput.println("killed", thread.toString());
-            } catch (InvalidTypeException e) {
-                MessageOutput.println("Invalid exception object");
-            }
-        } else {
-            MessageOutput.println("Expression must evaluate to an object");
-        }
-    }
-
-    void doKillThread(final ThreadReference threadToKill,
-                      final StringTokenizer tokenizer) {
-        new AsyncExecution() {
-                @Override
-                void action() {
-                    doKill(threadToKill, tokenizer);
-                }
-            };
-    }
-
-    void commandKill(StringTokenizer t) {
-        if (!t.hasMoreTokens()) {
-            MessageOutput.println("Usage: kill <thread id> <throwable>");
-            return;
-        }
-        ThreadInfo threadInfo = doGetThread(t.nextToken());
-        if (threadInfo != null) {
-            MessageOutput.println("killing thread:", threadInfo.getThread().name());
-            doKillThread(threadInfo.getThread(), t);
-            return;
-        }
-    }
-
-    void listCaughtExceptions() {
-        boolean noExceptions = true;
-
-        // Print a listing of the catch patterns currently in place
-        for (EventRequestSpec spec : Env.specList.eventRequestSpecs()) {
-            if (spec instanceof ExceptionSpec) {
-                if (noExceptions) {
-                    noExceptions = false;
-                    MessageOutput.println("Exceptions caught:");
-                }
-                MessageOutput.println("tab", spec.toString());
-            }
-        }
-        if (noExceptions) {
-            MessageOutput.println("No exceptions caught.");
-        }
-    }
-
-    private EventRequestSpec parseExceptionSpec(StringTokenizer t) {
-        String notification = t.nextToken();
-        boolean notifyCaught = false;
-        boolean notifyUncaught = false;
-        EventRequestSpec spec = null;
-        String classPattern = null;
-
-        if (notification.equals("uncaught")) {
-            notifyCaught = false;
-            notifyUncaught = true;
-        } else if (notification.equals("caught")) {
-            notifyCaught = true;
-            notifyUncaught = false;
-        } else if (notification.equals("all")) {
-            notifyCaught = true;
-            notifyUncaught = true;
-        } else {
-            /*
-             * Handle the same as "all" for backward
-             * compatibility with existing .jdbrc files.
-             *
-             * Insert an "all" and take the current token as the
-             * intended classPattern
-             *
-             */
-            notifyCaught = true;
-            notifyUncaught = true;
-            classPattern = notification;
-        }
-        if (classPattern == null && t.hasMoreTokens()) {
-            classPattern = t.nextToken();
-        }
-        if ((classPattern != null) && (notifyCaught || notifyUncaught)) {
-            try {
-                spec = Env.specList.createExceptionCatch(classPattern,
-                                                         notifyCaught,
-                                                         notifyUncaught);
-            } catch (ClassNotFoundException exc) {
-                MessageOutput.println("is not a valid class name", classPattern);
-            }
-        }
-        return spec;
-    }
-
-    void commandCatchException(StringTokenizer t) {
-        if (!t.hasMoreTokens()) {
-            listCaughtExceptions();
-        } else {
-            EventRequestSpec spec = parseExceptionSpec(t);
-            if (spec != null) {
-                resolveNow(spec);
-            } else {
-                MessageOutput.println("Usage: catch exception");
-            }
-        }
-    }
-
-    void commandIgnoreException(StringTokenizer t) {
-        if (!t.hasMoreTokens()) {
-            listCaughtExceptions();
-        } else {
-            EventRequestSpec spec = parseExceptionSpec(t);
-            if (Env.specList.delete(spec)) {
-                MessageOutput.println("Removed:", spec.toString());
-            } else {
-                if (spec != null) {
-                    MessageOutput.println("Not found:", spec.toString());
-                }
-                MessageOutput.println("Usage: ignore exception");
-            }
-        }
-    }
-
-    void commandUp(StringTokenizer t) {
-        ThreadInfo threadInfo = ThreadInfo.getCurrentThreadInfo();
-        if (threadInfo == null) {
-            MessageOutput.println("Current thread not set.");
-            return;
-        }
-
-        int nLevels = 1;
-        if (t.hasMoreTokens()) {
-            String idToken = t.nextToken();
-            int i;
-            try {
-                NumberFormat nf = NumberFormat.getNumberInstance();
-                nf.setParseIntegerOnly(true);
-                Number n = nf.parse(idToken);
-                i = n.intValue();
-            } catch (java.text.ParseException jtpe) {
-                i = 0;
-            }
-            if (i <= 0) {
-                MessageOutput.println("Usage: up [n frames]");
-                return;
-            }
-            nLevels = i;
-        }
-
-        try {
-            threadInfo.up(nLevels);
-        } catch (IncompatibleThreadStateException e) {
-            MessageOutput.println("Current thread isnt suspended.");
-        } catch (ArrayIndexOutOfBoundsException e) {
-            MessageOutput.println("End of stack.");
-        }
-    }
-
-    void commandDown(StringTokenizer t) {
-        ThreadInfo threadInfo = ThreadInfo.getCurrentThreadInfo();
-        if (threadInfo == null) {
-            MessageOutput.println("Current thread not set.");
-            return;
-        }
-
-        int nLevels = 1;
-        if (t.hasMoreTokens()) {
-            String idToken = t.nextToken();
-            int i;
-            try {
-                NumberFormat nf = NumberFormat.getNumberInstance();
-                nf.setParseIntegerOnly(true);
-                Number n = nf.parse(idToken);
-                i = n.intValue();
-            } catch (java.text.ParseException jtpe) {
-                i = 0;
-            }
-            if (i <= 0) {
-                MessageOutput.println("Usage: down [n frames]");
-                return;
-            }
-            nLevels = i;
-        }
-
-        try {
-            threadInfo.down(nLevels);
-        } catch (IncompatibleThreadStateException e) {
-            MessageOutput.println("Current thread isnt suspended.");
-        } catch (ArrayIndexOutOfBoundsException e) {
-            MessageOutput.println("End of stack.");
-        }
-    }
-
-    private void dumpStack(ThreadInfo threadInfo, boolean showPC) {
-        List<StackFrame> stack = null;
-        try {
-            stack = threadInfo.getStack();
-        } catch (IncompatibleThreadStateException e) {
-            MessageOutput.println("Current thread isnt suspended.");
-            return;
-        }
-        if (stack == null) {
-            MessageOutput.println("Thread is not running (no stack).");
-        } else {
-            int nFrames = stack.size();
-            for (int i = threadInfo.getCurrentFrameIndex(); i < nFrames; i++) {
-                StackFrame frame = stack.get(i);
-                dumpFrame (i, showPC, frame);
-            }
-        }
-    }
-
-    private void dumpFrame (int frameNumber, boolean showPC, StackFrame frame) {
-        Location loc = frame.location();
-        long pc = -1;
-        if (showPC) {
-            pc = loc.codeIndex();
-        }
-        Method meth = loc.method();
-
-        long lineNumber = loc.lineNumber();
-        String methodInfo = null;
-        if (meth.isNative()) {
-            methodInfo = MessageOutput.format("native method");
-        } else if (lineNumber != -1) {
-            try {
-                methodInfo = loc.sourceName() +
-                    MessageOutput.format("line number",
-                                         new Object [] {new Long(lineNumber)});
-            } catch (AbsentInformationException e) {
-                methodInfo = MessageOutput.format("unknown");
-            }
-        }
-        if (pc != -1) {
-            MessageOutput.println("stack frame dump with pc",
-                                  new Object [] {new Integer(frameNumber + 1),
-                                                 meth.declaringType().name(),
-                                                 meth.name(),
-                                                 methodInfo,
-                                                 new Long(pc)});
-        } else {
-            MessageOutput.println("stack frame dump",
-                                  new Object [] {new Integer(frameNumber + 1),
-                                                 meth.declaringType().name(),
-                                                 meth.name(),
-                                                 methodInfo});
-        }
-    }
-
-    void commandWhere(StringTokenizer t, boolean showPC) {
-        if (!t.hasMoreTokens()) {
-            ThreadInfo threadInfo = ThreadInfo.getCurrentThreadInfo();
-            if (threadInfo == null) {
-                MessageOutput.println("No thread specified.");
-                return;
-            }
-            dumpStack(threadInfo, showPC);
-        } else {
-            String token = t.nextToken();
-            if (token.toLowerCase().equals("all")) {
-                for (ThreadInfo threadInfo : ThreadInfo.threads()) {
-                    MessageOutput.println("Thread:",
-                                          threadInfo.getThread().name());
-                    dumpStack(threadInfo, showPC);
-                }
-            } else {
-                ThreadInfo threadInfo = doGetThread(token);
-                if (threadInfo != null) {
-                    ThreadInfo.setCurrentThreadInfo(threadInfo);
-                    dumpStack(threadInfo, showPC);
-                }
-            }
-        }
-    }
-
-    void commandInterrupt(StringTokenizer t) {
-        if (!t.hasMoreTokens()) {
-            ThreadInfo threadInfo = ThreadInfo.getCurrentThreadInfo();
-            if (threadInfo == null) {
-                MessageOutput.println("No thread specified.");
-                return;
-            }
-            threadInfo.getThread().interrupt();
-        } else {
-            ThreadInfo threadInfo = doGetThread(t.nextToken());
-            if (threadInfo != null) {
-                threadInfo.getThread().interrupt();
-            }
-        }
-    }
-
-    void commandMemory() {
-        MessageOutput.println("The memory command is no longer supported.");
-    }
-
-    void commandGC() {
-        MessageOutput.println("The gc command is no longer necessary.");
-    }
-
-    /*
-     * The next two methods are used by this class and by EventHandler
-     * to print consistent locations and error messages.
-     */
-    static String locationString(Location loc) {
-        return MessageOutput.format("locationString",
-                                    new Object [] {loc.declaringType().name(),
-                                                   loc.method().name(),
-                                                   new Integer (loc.lineNumber()),
-                                                   new Long (loc.codeIndex())});
-    }
-
-    void listBreakpoints() {
-        boolean noBreakpoints = true;
-
-        // Print set breakpoints
-        for (EventRequestSpec spec : Env.specList.eventRequestSpecs()) {
-            if (spec instanceof BreakpointSpec) {
-                if (noBreakpoints) {
-                    noBreakpoints = false;
-                    MessageOutput.println("Breakpoints set:");
-                }
-                MessageOutput.println("tab", spec.toString());
-            }
-        }
-        if (noBreakpoints) {
-            MessageOutput.println("No breakpoints set.");
-        }
-    }
-
-
-    private void printBreakpointCommandUsage(String atForm, String inForm) {
-        MessageOutput.println("printbreakpointcommandusage",
-                              new Object [] {atForm, inForm});
-    }
-
-    protected BreakpointSpec parseBreakpointSpec(StringTokenizer t,
-                                             String atForm, String inForm) {
-        BreakpointSpec breakpoint = null;
-        try {
-            String token = t.nextToken(":( \t\n\r");
-
-            // We can't use hasMoreTokens here because it will cause any leading
-            // paren to be lost.
-            String rest;
-            try {
-                rest = t.nextToken("").trim();
-            } catch (NoSuchElementException e) {
-                rest = null;
-            }
-
-            if ((rest != null) && rest.startsWith(":")) {
-                t = new StringTokenizer(rest.substring(1));
-                String classId = token;
-                String lineToken = t.nextToken();
-
-                NumberFormat nf = NumberFormat.getNumberInstance();
-                nf.setParseIntegerOnly(true);
-                Number n = nf.parse(lineToken);
-                int lineNumber = n.intValue();
-
-                if (t.hasMoreTokens()) {
-                    printBreakpointCommandUsage(atForm, inForm);
-                    return null;
-                }
-                try {
-                    breakpoint = Env.specList.createBreakpoint(classId,
-                                                               lineNumber);
-                } catch (ClassNotFoundException exc) {
-                    MessageOutput.println("is not a valid class name", classId);
-                }
-            } else {
-                // Try stripping method from class.method token.
-                int idot = token.lastIndexOf(".");
-                if ( (idot <= 0) ||                     /* No dot or dot in first char */
-                     (idot >= token.length() - 1) ) { /* dot in last char */
-                    printBreakpointCommandUsage(atForm, inForm);
-                    return null;
-                }
-                String methodName = token.substring(idot + 1);
-                String classId = token.substring(0, idot);
-                List<String> argumentList = null;
-                if (rest != null) {
-                    if (!rest.startsWith("(") || !rest.endsWith(")")) {
-                        MessageOutput.println("Invalid method specification:",
-                                              methodName + rest);
-                        printBreakpointCommandUsage(atForm, inForm);
-                        return null;
-                    }
-                    // Trim the parens
-                    rest = rest.substring(1, rest.length() - 1);
-
-                    argumentList = new ArrayList<String>();
-                    t = new StringTokenizer(rest, ",");
-                    while (t.hasMoreTokens()) {
-                        argumentList.add(t.nextToken());
-                    }
-                }
-                try {
-                    breakpoint = Env.specList.createBreakpoint(classId,
-                                                               methodName,
-                                                               argumentList);
-                } catch (MalformedMemberNameException exc) {
-                    MessageOutput.println("is not a valid method name", methodName);
-                } catch (ClassNotFoundException exc) {
-                    MessageOutput.println("is not a valid class name", classId);
-                }
-            }
-        } catch (Exception e) {
-            printBreakpointCommandUsage(atForm, inForm);
-            return null;
-        }
-        return breakpoint;
-    }
-
-    private void resolveNow(EventRequestSpec spec) {
-        boolean success = Env.specList.addEagerlyResolve(spec);
-        if (success && !spec.isResolved()) {
-            MessageOutput.println("Deferring.", spec.toString());
-        }
-    }
-
-    void commandStop(StringTokenizer t) {
-        String atIn;
-        byte suspendPolicy = EventRequest.SUSPEND_ALL;
-
-        if (t.hasMoreTokens()) {
-            atIn = t.nextToken();
-            if (atIn.equals("go") && t.hasMoreTokens()) {
-                suspendPolicy = EventRequest.SUSPEND_NONE;
-                atIn = t.nextToken();
-            } else if (atIn.equals("thread") && t.hasMoreTokens()) {
-                suspendPolicy = EventRequest.SUSPEND_EVENT_THREAD;
-                atIn = t.nextToken();
-            }
-        } else {
-            listBreakpoints();
-            return;
-        }
-
-        BreakpointSpec spec = parseBreakpointSpec(t, "stop at", "stop in");
-        if (spec != null) {
-            // Enforcement of "at" vs. "in". The distinction is really
-            // unnecessary and we should consider not checking for this
-            // (and making "at" and "in" optional).
-            if (atIn.equals("at") && spec.isMethodBreakpoint()) {
-                MessageOutput.println("Use stop at to set a breakpoint at a line number");
-                printBreakpointCommandUsage("stop at", "stop in");
-                return;
-            }
-            spec.suspendPolicy = suspendPolicy;
-            resolveNow(spec);
-        }
-    }
-
-    void commandClear(StringTokenizer t) {
-        if (!t.hasMoreTokens()) {
-            listBreakpoints();
-            return;
-        }
-
-        BreakpointSpec spec = parseBreakpointSpec(t, "clear", "clear");
-        if (spec != null) {
-            if (Env.specList.delete(spec)) {
-                MessageOutput.println("Removed:", spec.toString());
-            } else {
-                MessageOutput.println("Not found:", spec.toString());
-            }
-        }
-    }
-
-    private List<WatchpointSpec> parseWatchpointSpec(StringTokenizer t) {
-        List<WatchpointSpec> list = new ArrayList<WatchpointSpec>();
-        boolean access = false;
-        boolean modification = false;
-        int suspendPolicy = EventRequest.SUSPEND_ALL;
-
-        String fieldName = t.nextToken();
-        if (fieldName.equals("go")) {
-            suspendPolicy = EventRequest.SUSPEND_NONE;
-            fieldName = t.nextToken();
-        } else if (fieldName.equals("thread")) {
-            suspendPolicy = EventRequest.SUSPEND_EVENT_THREAD;
-            fieldName = t.nextToken();
-        }
-        if (fieldName.equals("access")) {
-            access = true;
-            fieldName = t.nextToken();
-        } else if (fieldName.equals("all")) {
-            access = true;
-            modification = true;
-            fieldName = t.nextToken();
-        } else {
-            modification = true;
-        }
-        int dot = fieldName.lastIndexOf('.');
-        if (dot < 0) {
-            MessageOutput.println("Class containing field must be specified.");
-            return list;
-        }
-        String className = fieldName.substring(0, dot);
-        fieldName = fieldName.substring(dot+1);
-
-        try {
-            WatchpointSpec spec;
-            if (access) {
-                spec = Env.specList.createAccessWatchpoint(className,
-                                                           fieldName);
-                spec.suspendPolicy = suspendPolicy;
-                list.add(spec);
-            }
-            if (modification) {
-                spec = Env.specList.createModificationWatchpoint(className,
-                                                                 fieldName);
-                spec.suspendPolicy = suspendPolicy;
-                list.add(spec);
-            }
-        } catch (MalformedMemberNameException exc) {
-            MessageOutput.println("is not a valid field name", fieldName);
-        } catch (ClassNotFoundException exc) {
-            MessageOutput.println("is not a valid class name", className);
-        }
-        return list;
-    }
-
-    void commandWatch(StringTokenizer t) {
-        if (!t.hasMoreTokens()) {
-            MessageOutput.println("Field to watch not specified");
-            return;
-        }
-
-        for (WatchpointSpec spec : parseWatchpointSpec(t)) {
-            resolveNow(spec);
-        }
-    }
-
-    void commandUnwatch(StringTokenizer t) {
-        if (!t.hasMoreTokens()) {
-            MessageOutput.println("Field to unwatch not specified");
-            return;
-        }
-
-        for (WatchpointSpec spec : parseWatchpointSpec(t)) {
-            if (Env.specList.delete(spec)) {
-                MessageOutput.println("Removed:", spec.toString());
-            } else {
-                MessageOutput.println("Not found:", spec.toString());
-            }
-        }
-    }
-
-    void turnOnExitTrace(ThreadInfo threadInfo, int suspendPolicy) {
-        EventRequestManager erm = Env.vm().eventRequestManager();
-        MethodExitRequest exit = erm.createMethodExitRequest();
-        if (threadInfo != null) {
-            exit.addThreadFilter(threadInfo.getThread());
-        }
-        Env.addExcludes(exit);
-        exit.setSuspendPolicy(suspendPolicy);
-        exit.enable();
-
-    }
-
-    static String methodTraceCommand = null;
-
-    void commandTrace(StringTokenizer t) {
-        String modif;
-        int suspendPolicy = EventRequest.SUSPEND_ALL;
-        ThreadInfo threadInfo = null;
-        String goStr = " ";
-
-        /*
-         * trace [go] methods [thread]
-         * trace [go] method exit | exits [thread]
-         */
-        if (t.hasMoreTokens()) {
-            modif = t.nextToken();
-            if (modif.equals("go")) {
-                suspendPolicy = EventRequest.SUSPEND_NONE;
-                goStr = " go ";
-                if (t.hasMoreTokens()) {
-                    modif = t.nextToken();
-                }
-            } else if (modif.equals("thread")) {
-                // this is undocumented as it doesn't work right.
-                suspendPolicy = EventRequest.SUSPEND_EVENT_THREAD;
-                if (t.hasMoreTokens()) {
-                    modif = t.nextToken();
-                }
-            }
-
-            if  (modif.equals("method")) {
-                String traceCmd = null;
-
-                if (t.hasMoreTokens()) {
-                    String modif1 = t.nextToken();
-                    if (modif1.equals("exits") || modif1.equals("exit")) {
-                        if (t.hasMoreTokens()) {
-                            threadInfo = doGetThread(t.nextToken());
-                        }
-                        if (modif1.equals("exit")) {
-                            StackFrame frame;
-                            try {
-                                frame = ThreadInfo.getCurrentThreadInfo().getCurrentFrame();
-                            } catch (IncompatibleThreadStateException ee) {
-                                MessageOutput.println("Current thread isnt suspended.");
-                                return;
-                            }
-                            Env.setAtExitMethod(frame.location().method());
-                            traceCmd = MessageOutput.format("trace" +
-                                                    goStr + "method exit " +
-                                                    "in effect for",
-                                                    Env.atExitMethod().toString());
-                        } else {
-                            traceCmd = MessageOutput.format("trace" +
-                                                   goStr + "method exits " +
-                                                   "in effect");
-                        }
-                        commandUntrace(new StringTokenizer("methods"));
-                        turnOnExitTrace(threadInfo, suspendPolicy);
-                        methodTraceCommand = traceCmd;
-                        return;
-                    }
-                } else {
-                   MessageOutput.println("Can only trace");
-                   return;
-                }
-            }
-            if (modif.equals("methods")) {
-                // Turn on method entry trace
-                MethodEntryRequest entry;
-                EventRequestManager erm = Env.vm().eventRequestManager();
-                if (t.hasMoreTokens()) {
-                    threadInfo = doGetThread(t.nextToken());
-                }
-                if (threadInfo != null) {
-                    /*
-                     * To keep things simple we want each 'trace' to cancel
-                     * previous traces.  However in this case, we don't do that
-                     * to preserve backward compatibility with pre JDK 6.0.
-                     * IE, you can currently do
-                     *   trace   methods 0x21
-                     *   trace   methods 0x22
-                     * and you will get xxx traced just on those two threads
-                     * But this feature is kind of broken because if you then do
-                     *   untrace  0x21
-                     * it turns off both traces instead of just the one.
-                     * Another bogosity is that if you do
-                     *   trace methods
-                     *   trace methods
-                     * and you will get two traces.
-                     */
-
-                    entry = erm.createMethodEntryRequest();
-                    entry.addThreadFilter(threadInfo.getThread());
-                } else {
-                    commandUntrace(new StringTokenizer("methods"));
-                    entry = erm.createMethodEntryRequest();
-                }
-                Env.addExcludes(entry);
-                entry.setSuspendPolicy(suspendPolicy);
-                entry.enable();
-                turnOnExitTrace(threadInfo, suspendPolicy);
-                methodTraceCommand = MessageOutput.format("trace" + goStr +
-                                                          "methods in effect");
-
-                return;
-            }
-
-            MessageOutput.println("Can only trace");
-            return;
-        }
-
-        // trace all by itself.
-        if (methodTraceCommand != null) {
-            MessageOutput.printDirectln(methodTraceCommand);
-        }
-
-        // More trace lines can be added here.
-    }
-
-    void commandUntrace(StringTokenizer t) {
-        // untrace
-        // untrace methods
-
-        String modif = null;
-        EventRequestManager erm = Env.vm().eventRequestManager();
-        if (t.hasMoreTokens()) {
-            modif = t.nextToken();
-        }
-        if (modif == null || modif.equals("methods")) {
-            erm.deleteEventRequests(erm.methodEntryRequests());
-            erm.deleteEventRequests(erm.methodExitRequests());
-            Env.setAtExitMethod(null);
-            methodTraceCommand = null;
-        }
-    }
-
-    void commandList(StringTokenizer t) {
-        StackFrame frame = null;
-        ThreadInfo threadInfo = ThreadInfo.getCurrentThreadInfo();
-        if (threadInfo == null) {
-            MessageOutput.println("No thread specified.");
-            return;
-        }
-        try {
-            frame = threadInfo.getCurrentFrame();
-        } catch (IncompatibleThreadStateException e) {
-            MessageOutput.println("Current thread isnt suspended.");
-            return;
-        }
-
-        if (frame == null) {
-            MessageOutput.println("No frames on the current call stack");
-            return;
-        }
-
-        Location loc = frame.location();
-        if (loc.method().isNative()) {
-            MessageOutput.println("Current method is native");
-            return;
-        }
-
-        String sourceFileName = null;
-        try {
-            sourceFileName = loc.sourceName();
-
-            ReferenceType refType = loc.declaringType();
-            int lineno = loc.lineNumber();
-
-            if (t.hasMoreTokens()) {
-                String id = t.nextToken();
-
-                // See if token is a line number.
-                try {
-                    NumberFormat nf = NumberFormat.getNumberInstance();
-                    nf.setParseIntegerOnly(true);
-                    Number n = nf.parse(id);
-                    lineno = n.intValue();
-                } catch (java.text.ParseException jtpe) {
-                    // It isn't -- see if it's a method name.
-                        List<Method> meths = refType.methodsByName(id);
-                        if (meths == null || meths.size() == 0) {
-                            MessageOutput.println("is not a valid line number or method name for",
-                                                  new Object [] {id, refType.name()});
-                            return;
-                        } else if (meths.size() > 1) {
-                            MessageOutput.println("is an ambiguous method name in",
-                                                  new Object [] {id, refType.name()});
-                            return;
-                        }
-                        loc = meths.get(0).location();
-                        lineno = loc.lineNumber();
-                }
-            }
-            int startLine = Math.max(lineno - 4, 1);
-            int endLine = startLine + 9;
-            if (lineno < 0) {
-                MessageOutput.println("Line number information not available for");
-            } else if (Env.sourceLine(loc, lineno) == null) {
-                MessageOutput.println("is an invalid line number for",
-                                      new Object [] {new Integer (lineno),
-                                                     refType.name()});
-            } else {
-                for (int i = startLine; i <= endLine; i++) {
-                    String sourceLine = Env.sourceLine(loc, i);
-                    if (sourceLine == null) {
-                        break;
-                    }
-                    if (i == lineno) {
-                        MessageOutput.println("source line number current line and line",
-                                              new Object [] {new Integer (i),
-                                                             sourceLine});
-                    } else {
-                        MessageOutput.println("source line number and line",
-                                              new Object [] {new Integer (i),
-                                                             sourceLine});
-                    }
-                }
-            }
-        } catch (AbsentInformationException e) {
-            MessageOutput.println("No source information available for:", loc.toString());
-        } catch(FileNotFoundException exc) {
-            MessageOutput.println("Source file not found:", sourceFileName);
-        } catch(IOException exc) {
-            MessageOutput.println("I/O exception occurred:", exc.toString());
-        }
-    }
-
-    void commandLines(StringTokenizer t) { // Undocumented command: useful for testing
-        if (!t.hasMoreTokens()) {
-            MessageOutput.println("Specify class and method");
-        } else {
-            String idClass = t.nextToken();
-            String idMethod = t.hasMoreTokens() ? t.nextToken() : null;
-            try {
-                ReferenceType refType = Env.getReferenceTypeFromToken(idClass);
-                if (refType != null) {
-                    List<Location> lines = null;
-                    if (idMethod == null) {
-                        lines = refType.allLineLocations();
-                    } else {
-                        for (Method method : refType.allMethods()) {
-                            if (method.name().equals(idMethod)) {
-                                lines = method.allLineLocations();
-                            }
-                        }
-                        if (lines == null) {
-                            MessageOutput.println("is not a valid method name", idMethod);
-                        }
-                    }
-                    for (Location line : lines) {
-                        MessageOutput.printDirectln(line.toString());// Special case: use printDirectln()
-                    }
-                } else {
-                    MessageOutput.println("is not a valid id or class name", idClass);
-                }
-            } catch (AbsentInformationException e) {
-                MessageOutput.println("Line number information not available for", idClass);
-            }
-        }
-    }
-
-    void commandClasspath(StringTokenizer t) {
-        if (Env.vm() instanceof PathSearchingVirtualMachine) {
-            PathSearchingVirtualMachine vm = (PathSearchingVirtualMachine)Env.vm();
-            MessageOutput.println("base directory:", vm.baseDirectory());
-            MessageOutput.println("classpath:", vm.classPath().toString());
-            MessageOutput.println("bootclasspath:", vm.bootClassPath().toString());
-        } else {
-            MessageOutput.println("The VM does not use paths");
-        }
-    }
-
-    /* Get or set the source file path list. */
-    void commandUse(StringTokenizer t) {
-        if (!t.hasMoreTokens()) {
-            MessageOutput.printDirectln(Env.getSourcePath());// Special case: use printDirectln()
-        } else {
-            /*
-             * Take the remainder of the command line, minus
-             * leading or trailing whitespace.  Embedded
-             * whitespace is fine.
-             */
-            Env.setSourcePath(t.nextToken("").trim());
-        }
-    }
-
-    /* Print a stack variable */
-    private void printVar(LocalVariable var, Value value) {
-        MessageOutput.println("expr is value",
-                              new Object [] {var.name(),
-                                             value == null ? "null" : value.toString()});
-    }
-
-    /* Print all local variables in current stack frame. */
-    void commandLocals() {
-        StackFrame frame;
-        ThreadInfo threadInfo = ThreadInfo.getCurrentThreadInfo();
-        if (threadInfo == null) {
-            MessageOutput.println("No default thread specified:");
-            return;
-        }
-        try {
-            frame = threadInfo.getCurrentFrame();
-            if (frame == null) {
-                throw new AbsentInformationException();
-            }
-            List<LocalVariable> vars = frame.visibleVariables();
-
-            if (vars.size() == 0) {
-                MessageOutput.println("No local variables");
-                return;
-            }
-            Map<LocalVariable, Value> values = frame.getValues(vars);
-
-            MessageOutput.println("Method arguments:");
-            for (LocalVariable var : vars) {
-                if (var.isArgument()) {
-                    Value val = values.get(var);
-                    printVar(var, val);
-                }
-            }
-            MessageOutput.println("Local variables:");
-            for (LocalVariable var : vars) {
-                if (!var.isArgument()) {
-                    Value val = values.get(var);
-                    printVar(var, val);
-                }
-            }
-        } catch (AbsentInformationException aie) {
-            MessageOutput.println("Local variable information not available.");
-        } catch (IncompatibleThreadStateException exc) {
-            MessageOutput.println("Current thread isnt suspended.");
-        }
-    }
-
-    private void dump(ObjectReference obj, ReferenceType refType,
-                      ReferenceType refTypeBase) {
-        for (Field field : refType.fields()) {
-            StringBuffer o = new StringBuffer();
-            o.append("    ");
-            if (!refType.equals(refTypeBase)) {
-                o.append(refType.name());
-                o.append(".");
-            }
-            o.append(field.name());
-            o.append(MessageOutput.format("colon space"));
-            o.append(obj.getValue(field));
-            MessageOutput.printDirectln(o.toString()); // Special case: use printDirectln()
-        }
-        if (refType instanceof ClassType) {
-            ClassType sup = ((ClassType)refType).superclass();
-            if (sup != null) {
-                dump(obj, sup, refTypeBase);
-            }
-        } else if (refType instanceof InterfaceType) {
-            for (InterfaceType sup : ((InterfaceType)refType).superinterfaces()) {
-                dump(obj, sup, refTypeBase);
-            }
-        } else {
-            /* else refType is an instanceof ArrayType */
-            if (obj instanceof ArrayReference) {
-                for (Iterator<Value> it = ((ArrayReference)obj).getValues().iterator();
-                     it.hasNext(); ) {
-                    MessageOutput.printDirect(it.next().toString());// Special case: use printDirect()
-                    if (it.hasNext()) {
-                        MessageOutput.printDirect(", ");// Special case: use printDirect()
-                    }
-                }
-                MessageOutput.println();
-            }
-        }
-    }
-
-    /* Print a specified reference.
-     */
-    void doPrint(StringTokenizer t, boolean dumpObject) {
-        if (!t.hasMoreTokens()) {
-            MessageOutput.println("No objects specified.");
-            return;
-        }
-
-        while (t.hasMoreTokens()) {
-            String expr = t.nextToken("");
-            Value val = evaluate(expr);
-            if (val == null) {
-                MessageOutput.println("expr is null", expr.toString());
-            } else if (dumpObject && (val instanceof ObjectReference) &&
-                       !(val instanceof StringReference)) {
-                ObjectReference obj = (ObjectReference)val;
-                ReferenceType refType = obj.referenceType();
-                MessageOutput.println("expr is value",
-                                      new Object [] {expr.toString(),
-                                                     MessageOutput.format("grouping begin character")});
-                dump(obj, refType, refType);
-                MessageOutput.println("grouping end character");
-            } else {
-                  String strVal = getStringValue();
-                  if (strVal != null) {
-                     MessageOutput.println("expr is value", new Object [] {expr.toString(),
-                                                                      strVal});
-                   }
-            }
-        }
-    }
-
-    void commandPrint(final StringTokenizer t, final boolean dumpObject) {
-        new AsyncExecution() {
-                @Override
-                void action() {
-                    doPrint(t, dumpObject);
-                }
-            };
-    }
-
-    void commandSet(final StringTokenizer t) {
-        String all = t.nextToken("");
-
-        /*
-         * Bare bones error checking.
-         */
-        if (all.indexOf('=') == -1) {
-            MessageOutput.println("Invalid assignment syntax");
-            MessageOutput.printPrompt();
-            return;
-        }
-
-        /*
-         * The set command is really just syntactic sugar. Pass it on to the
-         * print command.
-         */
-        commandPrint(new StringTokenizer(all), false);
-    }
-
-    void doLock(StringTokenizer t) {
-        if (!t.hasMoreTokens()) {
-            MessageOutput.println("No object specified.");
-            return;
-        }
-
-        String expr = t.nextToken("");
-        Value val = evaluate(expr);
-
-        try {
-            if ((val != null) && (val instanceof ObjectReference)) {
-                ObjectReference object = (ObjectReference)val;
-                String strVal = getStringValue();
-                if (strVal != null) {
-                    MessageOutput.println("Monitor information for expr",
-                                      new Object [] {expr.trim(),
-                                                     strVal});
-                }
-                ThreadReference owner = object.owningThread();
-                if (owner == null) {
-                    MessageOutput.println("Not owned");
-                } else {
-                    MessageOutput.println("Owned by:",
-                                          new Object [] {owner.name(),
-                                                         new Integer (object.entryCount())});
-                }
-                List<ThreadReference> waiters = object.waitingThreads();
-                if (waiters.size() == 0) {
-                    MessageOutput.println("No waiters");
-                } else {
-                    for (ThreadReference waiter : waiters) {
-                        MessageOutput.println("Waiting thread:", waiter.name());
-                    }
-                }
-            } else {
-                MessageOutput.println("Expression must evaluate to an object");
-            }
-        } catch (IncompatibleThreadStateException e) {
-            MessageOutput.println("Threads must be suspended");
-        }
-    }
-
-    void commandLock(final StringTokenizer t) {
-        new AsyncExecution() {
-                @Override
-                void action() {
-                    doLock(t);
-                }
-            };
-    }
-
-    private void printThreadLockInfo(ThreadInfo threadInfo) {
-        ThreadReference thread = threadInfo.getThread();
-        try {
-            MessageOutput.println("Monitor information for thread", thread.name());
-            List<ObjectReference> owned = thread.ownedMonitors();
-            if (owned.size() == 0) {
-                MessageOutput.println("No monitors owned");
-            } else {
-                for (ObjectReference monitor : owned) {
-                    MessageOutput.println("Owned monitor:", monitor.toString());
-                }
-            }
-            ObjectReference waiting = thread.currentContendedMonitor();
-            if (waiting == null) {
-                MessageOutput.println("Not waiting for a monitor");
-            } else {
-                MessageOutput.println("Waiting for monitor:", waiting.toString());
-            }
-        } catch (IncompatibleThreadStateException e) {
-            MessageOutput.println("Threads must be suspended");
-        }
-    }
-
-    void commandThreadlocks(final StringTokenizer t) {
-        if (!t.hasMoreTokens()) {
-            ThreadInfo threadInfo = ThreadInfo.getCurrentThreadInfo();
-            if (threadInfo == null) {
-                MessageOutput.println("Current thread not set.");
-            } else {
-                printThreadLockInfo(threadInfo);
-            }
-            return;
-        }
-        String token = t.nextToken();
-        if (token.toLowerCase().equals("all")) {
-            for (ThreadInfo threadInfo : ThreadInfo.threads()) {
-                printThreadLockInfo(threadInfo);
-            }
-        } else {
-            ThreadInfo threadInfo = doGetThread(token);
-            if (threadInfo != null) {
-                ThreadInfo.setCurrentThreadInfo(threadInfo);
-                printThreadLockInfo(threadInfo);
-            }
-        }
-    }
-
-    void doDisableGC(StringTokenizer t) {
-        if (!t.hasMoreTokens()) {
-            MessageOutput.println("No object specified.");
-            return;
-        }
-
-        String expr = t.nextToken("");
-        Value val = evaluate(expr);
-        if ((val != null) && (val instanceof ObjectReference)) {
-            ObjectReference object = (ObjectReference)val;
-            object.disableCollection();
-            String strVal = getStringValue();
-            if (strVal != null) {
-                 MessageOutput.println("GC Disabled for", strVal);
-            }
-        } else {
-            MessageOutput.println("Expression must evaluate to an object");
-        }
-    }
-
-    void commandDisableGC(final StringTokenizer t) {
-        new AsyncExecution() {
-                @Override
-                void action() {
-                    doDisableGC(t);
-                }
-            };
-    }
-
-    void doEnableGC(StringTokenizer t) {
-        if (!t.hasMoreTokens()) {
-            MessageOutput.println("No object specified.");
-            return;
-        }
-
-        String expr = t.nextToken("");
-        Value val = evaluate(expr);
-        if ((val != null) && (val instanceof ObjectReference)) {
-            ObjectReference object = (ObjectReference)val;
-            object.enableCollection();
-            String strVal = getStringValue();
-            if (strVal != null) {
-                 MessageOutput.println("GC Enabled for", strVal);
-            }
-        } else {
-            MessageOutput.println("Expression must evaluate to an object");
-        }
-    }
-
-    void commandEnableGC(final StringTokenizer t) {
-        new AsyncExecution() {
-                @Override
-                void action() {
-                    doEnableGC(t);
-                }
-            };
-    }
-
-    void doSave(StringTokenizer t) {// Undocumented command: useful for testing.
-        if (!t.hasMoreTokens()) {
-            MessageOutput.println("No save index specified.");
-            return;
-        }
-
-        String key = t.nextToken();
-
-        if (!t.hasMoreTokens()) {
-            MessageOutput.println("No expression specified.");
-            return;
-        }
-        String expr = t.nextToken("");
-        Value val = evaluate(expr);
-        if (val != null) {
-            Env.setSavedValue(key, val);
-            String strVal = getStringValue();
-            if (strVal != null) {
-                 MessageOutput.println("saved", strVal);
-            }
-        } else {
-            MessageOutput.println("Expression cannot be void");
-        }
-    }
-
-    void commandSave(final StringTokenizer t) { // Undocumented command: useful for testing.
-        if (!t.hasMoreTokens()) {
-            Set<String> keys = Env.getSaveKeys();
-            if (keys.isEmpty()) {
-                MessageOutput.println("No saved values");
-                return;
-            }
-            for (String key : keys) {
-                Value value = Env.getSavedValue(key);
-                if ((value instanceof ObjectReference) &&
-                    ((ObjectReference)value).isCollected()) {
-                    MessageOutput.println("expr is value <collected>",
-                                          new Object [] {key, value.toString()});
-                } else {
-                    if (value == null){
-                        MessageOutput.println("expr is null", key);
-                    } else {
-                        MessageOutput.println("expr is value",
-                                              new Object [] {key, value.toString()});
-                    }
-                }
-            }
-        } else {
-            new AsyncExecution() {
-                    @Override
-                    void action() {
-                        doSave(t);
-                    }
-                };
-        }
-
-    }
-
-   void commandBytecodes(final StringTokenizer t) { // Undocumented command: useful for testing.
-        if (!t.hasMoreTokens()) {
-            MessageOutput.println("No class specified.");
-            return;
-        }
-        String className = t.nextToken();
-
-        if (!t.hasMoreTokens()) {
-            MessageOutput.println("No method specified.");
-            return;
-        }
-        // Overloading is not handled here.
-        String methodName = t.nextToken();
-
-        List<ReferenceType> classes = Env.vm().classesByName(className);
-        // TO DO: handle multiple classes found
-        if (classes.size() == 0) {
-            if (className.indexOf('.') < 0) {
-                MessageOutput.println("not found (try the full name)", className);
-            } else {
-                MessageOutput.println("not found", className);
-            }
-            return;
-        }
-
-        ReferenceType rt = classes.get(0);
-        if (!(rt instanceof ClassType)) {
-            MessageOutput.println("not a class", className);
-            return;
-        }
-
-        byte[] bytecodes = null;
-        for (Method method : rt.methodsByName(methodName)) {
-            if (!method.isAbstract()) {
-                bytecodes = method.bytecodes();
-                break;
-            }
-        }
-
-        StringBuffer line = new StringBuffer(80);
-        line.append("0000: ");
-        for (int i = 0; i < bytecodes.length; i++) {
-            if ((i > 0) && (i % 16 == 0)) {
-                MessageOutput.printDirectln(line.toString());// Special case: use printDirectln()
-                line.setLength(0);
-                line.append(String.valueOf(i));
-                line.append(": ");
-                int len = line.length();
-                for (int j = 0; j < 6 - len; j++) {
-                    line.insert(0, '0');
-                }
-            }
-            int val = 0xff & bytecodes[i];
-            String str = Integer.toHexString(val);
-            if (str.length() == 1) {
-                line.append('0');
-            }
-            line.append(str);
-            line.append(' ');
-        }
-        if (line.length() > 6) {
-            MessageOutput.printDirectln(line.toString());// Special case: use printDirectln()
-        }
-    }
-
-    void commandExclude(StringTokenizer t) {
-        if (!t.hasMoreTokens()) {
-            MessageOutput.printDirectln(Env.excludesString());// Special case: use printDirectln()
-        } else {
-            String rest = t.nextToken("");
-            if (rest.equals("none")) {
-                rest = "";
-            }
-            Env.setExcludes(rest);
-        }
-    }
-
-    void commandRedefine(StringTokenizer t) {
-        if (!t.hasMoreTokens()) {
-            MessageOutput.println("Specify classes to redefine");
-        } else {
-            String className = t.nextToken();
-            List<ReferenceType> classes = Env.vm().classesByName(className);
-            if (classes.size() == 0) {
-                MessageOutput.println("No class named", className);
-                return;
-            }
-            if (classes.size() > 1) {
-                MessageOutput.println("More than one class named", className);
-                return;
-            }
-            Env.setSourcePath(Env.getSourcePath());
-            ReferenceType refType = classes.get(0);
-            if (!t.hasMoreTokens()) {
-                MessageOutput.println("Specify file name for class", className);
-                return;
-            }
-            String fileName = t.nextToken();
-            File phyl = new File(fileName);
-            byte[] bytes = new byte[(int)phyl.length()];
-            try {
-                InputStream in = new FileInputStream(phyl);
-                in.read(bytes);
-                in.close();
-            } catch (Exception exc) {
-                MessageOutput.println("Error reading file",
-                             new Object [] {fileName, exc.toString()});
-                return;
-            }
-            Map<ReferenceType, byte[]> map
-                = new HashMap<ReferenceType, byte[]>();
-            map.put(refType, bytes);
-            try {
-                Env.vm().redefineClasses(map);
-            } catch (Throwable exc) {
-                MessageOutput.println("Error redefining class to file",
-                             new Object [] {className,
-                                            fileName,
-                                            exc});
-            }
-        }
-    }
-
-    void commandPopFrames(StringTokenizer t, boolean reenter) {
-        ThreadInfo threadInfo;
-
-        if (t.hasMoreTokens()) {
-            String token = t.nextToken();
-            threadInfo = doGetThread(token);
-            if (threadInfo == null) {
-                return;
-            }
-        } else {
-            threadInfo = ThreadInfo.getCurrentThreadInfo();
-            if (threadInfo == null) {
-                MessageOutput.println("No thread specified.");
-                return;
-            }
-        }
-
-        try {
-            StackFrame frame = threadInfo.getCurrentFrame();
-            threadInfo.getThread().popFrames(frame);
-            threadInfo = ThreadInfo.getCurrentThreadInfo();
-            ThreadInfo.setCurrentThreadInfo(threadInfo);
-            if (reenter) {
-                commandStepi();
-            }
-        } catch (Throwable exc) {
-            MessageOutput.println("Error popping frame", exc.toString());
-        }
-    }
-
-    void commandExtension(StringTokenizer t) {
-        if (!t.hasMoreTokens()) {
-            MessageOutput.println("No class specified.");
-            return;
-        }
-
-        String idClass = t.nextToken();
-        ReferenceType cls = Env.getReferenceTypeFromToken(idClass);
-        String extension = null;
-        if (cls != null) {
-            try {
-                extension = cls.sourceDebugExtension();
-                MessageOutput.println("sourcedebugextension", extension);
-            } catch (AbsentInformationException e) {
-                MessageOutput.println("No sourcedebugextension specified");
-            }
-        } else {
-            MessageOutput.println("is not a valid id or class name", idClass);
-        }
-    }
-
-    void commandVersion(String debuggerName,
-                        VirtualMachineManager vmm) {
-        MessageOutput.println("minus version",
-                              new Object [] { debuggerName,
-                                              new Integer(vmm.majorInterfaceVersion()),
-                                              new Integer(vmm.minorInterfaceVersion()),
-                                                  System.getProperty("java.version")});
-        if (Env.connection() != null) {
-            try {
-                MessageOutput.printDirectln(Env.vm().description());// Special case: use printDirectln()
-            } catch (VMNotConnectedException e) {
-                MessageOutput.println("No VM connected");
-            }
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/tty/Env.java b/ojluni/src/main/java/com/sun/tools/example/debug/tty/Env.java
deleted file mode 100755
index 060f8a3..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/tty/Env.java
+++ /dev/null
@@ -1,331 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.tty;
-
-import com.sun.jdi.*;
-import com.sun.jdi.request.StepRequest;
-import com.sun.jdi.request.MethodEntryRequest;
-import com.sun.jdi.request.MethodExitRequest;
-import java.util.*;
-import java.io.*;
-
-
-class Env {
-
-    static EventRequestSpecList specList = new EventRequestSpecList();
-
-    private static VMConnection connection;
-
-    private static SourceMapper sourceMapper = new SourceMapper("");
-    private static List<String> excludes;
-
-    private static final int SOURCE_CACHE_SIZE = 5;
-    private static List<SourceCode> sourceCache = new LinkedList<SourceCode>();
-
-    private static HashMap<String, Value> savedValues = new HashMap<String, Value>();
-    private static Method atExitMethod;
-
-    static void init(String connectSpec, boolean openNow, int flags) {
-        connection = new VMConnection(connectSpec, flags);
-        if (!connection.isLaunch() || openNow) {
-            connection.open();
-        }
-    }
-
-    static VMConnection connection() {
-        return connection;
-    }
-
-    static VirtualMachine vm() {
-        return connection.vm();
-    }
-
-    static void shutdown() {
-        shutdown(null);
-    }
-
-    static void shutdown(String message) {
-        if (connection != null) {
-            try {
-                connection.disposeVM();
-            } catch (VMDisconnectedException e) {
-                // Shutting down after the VM has gone away. This is
-                // not an error, and we just ignore it.
-            }
-        }
-        if (message != null) {
-            MessageOutput.lnprint(message);
-            MessageOutput.println();
-        }
-        System.exit(0);
-    }
-
-    static void setSourcePath(String srcPath) {
-        sourceMapper = new SourceMapper(srcPath);
-        sourceCache.clear();
-    }
-
-    static void setSourcePath(List<String> srcList) {
-        sourceMapper = new SourceMapper(srcList);
-        sourceCache.clear();
-    }
-
-    static String getSourcePath() {
-        return sourceMapper.getSourcePath();
-    }
-
-    static private List<String> excludes() {
-        if (excludes == null) {
-            setExcludes("java.*, javax.*, sun.*, com.sun.*");
-        }
-        return excludes;
-    }
-
-    static String excludesString() {
-        StringBuffer buffer = new StringBuffer();
-        for (String pattern : excludes()) {
-            buffer.append(pattern);
-            buffer.append(",");
-        }
-        return buffer.toString();
-    }
-
-    static void addExcludes(StepRequest request) {
-        for (String pattern : excludes()) {
-            request.addClassExclusionFilter(pattern);
-        }
-    }
-
-    static void addExcludes(MethodEntryRequest request) {
-        for (String pattern : excludes()) {
-            request.addClassExclusionFilter(pattern);
-        }
-    }
-
-    static void addExcludes(MethodExitRequest request) {
-        for (String pattern : excludes()) {
-            request.addClassExclusionFilter(pattern);
-        }
-    }
-
-    static void setExcludes(String excludeString) {
-        StringTokenizer t = new StringTokenizer(excludeString, " ,;");
-        List<String> list = new ArrayList<String>();
-        while (t.hasMoreTokens()) {
-            list.add(t.nextToken());
-        }
-        excludes = list;
-    }
-
-    static Method atExitMethod() {
-        return atExitMethod;
-    }
-
-    static void setAtExitMethod(Method mmm) {
-        atExitMethod = mmm;
-    }
-
-    /**
-     * Return a Reader cooresponding to the source of this location.
-     * Return null if not available.
-     * Note: returned reader must be closed.
-     */
-    static BufferedReader sourceReader(Location location) {
-        return sourceMapper.sourceReader(location);
-    }
-
-    static synchronized String sourceLine(Location location, int lineNumber)
-                                          throws IOException {
-        if (lineNumber == -1) {
-            throw new IllegalArgumentException();
-        }
-
-        try {
-            String fileName = location.sourceName();
-
-            Iterator<SourceCode> iter = sourceCache.iterator();
-            SourceCode code = null;
-            while (iter.hasNext()) {
-                SourceCode candidate = iter.next();
-                if (candidate.fileName().equals(fileName)) {
-                    code = candidate;
-                    iter.remove();
-                    break;
-                }
-            }
-            if (code == null) {
-                BufferedReader reader = sourceReader(location);
-                if (reader == null) {
-                    throw new FileNotFoundException(fileName);
-                }
-                code = new SourceCode(fileName, reader);
-                if (sourceCache.size() == SOURCE_CACHE_SIZE) {
-                    sourceCache.remove(sourceCache.size() - 1);
-                }
-            }
-            sourceCache.add(0, code);
-            return code.sourceLine(lineNumber);
-        } catch (AbsentInformationException e) {
-            throw new IllegalArgumentException();
-        }
-    }
-
-    /** Return a description of an object. */
-    static String description(ObjectReference ref) {
-        ReferenceType clazz = ref.referenceType();
-        long id = ref.uniqueID();
-        if (clazz == null) {
-            return toHex(id);
-        } else {
-            return MessageOutput.format("object description and hex id",
-                                        new Object [] {clazz.name(),
-                                                       toHex(id)});
-        }
-    }
-
-    /** Convert a long to a hexadecimal string. */
-    static String toHex(long n) {
-        char s1[] = new char[16];
-        char s2[] = new char[18];
-
-        /* Store digits in reverse order. */
-        int i = 0;
-        do {
-            long d = n & 0xf;
-            s1[i++] = (char)((d < 10) ? ('0' + d) : ('a' + d - 10));
-        } while ((n >>>= 4) > 0);
-
-        /* Now reverse the array. */
-        s2[0] = '0';
-        s2[1] = 'x';
-        int j = 2;
-        while (--i >= 0) {
-            s2[j++] = s1[i];
-        }
-        return new String(s2, 0, j);
-    }
-
-    /** Convert hexadecimal strings to longs. */
-    static long fromHex(String hexStr) {
-        String str = hexStr.startsWith("0x") ?
-            hexStr.substring(2).toLowerCase() : hexStr.toLowerCase();
-        if (hexStr.length() == 0) {
-            throw new NumberFormatException();
-        }
-
-        long ret = 0;
-        for (int i = 0; i < str.length(); i++) {
-            int c = str.charAt(i);
-            if (c >= '0' && c <= '9') {
-                ret = (ret * 16) + (c - '0');
-            } else if (c >= 'a' && c <= 'f') {
-                ret = (ret * 16) + (c - 'a' + 10);
-            } else {
-                throw new NumberFormatException();
-            }
-        }
-        return ret;
-    }
-
-    static ReferenceType getReferenceTypeFromToken(String idToken) {
-        ReferenceType cls = null;
-        if (Character.isDigit(idToken.charAt(0))) {
-            cls = null;
-        } else if (idToken.startsWith("*.")) {
-        // This notation saves typing by letting the user omit leading
-        // package names. The first
-        // loaded class whose name matches this limited regular
-        // expression is selected.
-        idToken = idToken.substring(1);
-        for (ReferenceType type : Env.vm().allClasses()) {
-            if (type.name().endsWith(idToken)) {
-                cls = type;
-                break;
-            }
-        }
-    } else {
-            // It's a class name
-            List<ReferenceType> classes = Env.vm().classesByName(idToken);
-            if (classes.size() > 0) {
-                // TO DO: handle multiples
-                cls = classes.get(0);
-            }
-        }
-        return cls;
-    }
-
-    static Set<String> getSaveKeys() {
-        return savedValues.keySet();
-    }
-
-    static Value getSavedValue(String key) {
-        return savedValues.get(key);
-    }
-
-    static void setSavedValue(String key, Value value) {
-        savedValues.put(key, value);
-    }
-
-    static class SourceCode {
-        private String fileName;
-        private List<String> sourceLines = new ArrayList<String>();
-
-        SourceCode(String fileName, BufferedReader reader)  throws IOException {
-            this.fileName = fileName;
-            try {
-                String line = reader.readLine();
-                while (line != null) {
-                    sourceLines.add(line);
-                    line = reader.readLine();
-                }
-            } finally {
-                reader.close();
-            }
-        }
-
-        String fileName() {
-            return fileName;
-        }
-
-        String sourceLine(int number) {
-            int index = number - 1; // list is 0-indexed
-            if (index >= sourceLines.size()) {
-                return null;
-            } else {
-                return sourceLines.get(index);
-            }
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/tty/EventHandler.java b/ojluni/src/main/java/com/sun/tools/example/debug/tty/EventHandler.java
deleted file mode 100755
index 55bf2bf..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/tty/EventHandler.java
+++ /dev/null
@@ -1,286 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.tty;
-
-import com.sun.jdi.*;
-import com.sun.jdi.event.*;
-import com.sun.jdi.request.EventRequest;
-
-public class EventHandler implements Runnable {
-
-    EventNotifier notifier;
-    Thread thread;
-    volatile boolean connected = true;
-    boolean completed = false;
-    String shutdownMessageKey;
-    boolean stopOnVMStart;
-
-    EventHandler(EventNotifier notifier, boolean stopOnVMStart) {
-        this.notifier = notifier;
-        this.stopOnVMStart = stopOnVMStart;
-        this.thread = new Thread(this, "event-handler");
-        this.thread.start();
-    }
-
-    synchronized void shutdown() {
-        connected = false;  // force run() loop termination
-        thread.interrupt();
-        while (!completed) {
-            try {wait();} catch (InterruptedException exc) {}
-        }
-    }
-
-    @Override
-    public void run() {
-        EventQueue queue = Env.vm().eventQueue();
-        while (connected) {
-            try {
-                EventSet eventSet = queue.remove();
-                boolean resumeStoppedApp = false;
-                EventIterator it = eventSet.eventIterator();
-                while (it.hasNext()) {
-                    resumeStoppedApp |= !handleEvent(it.nextEvent());
-                }
-
-                if (resumeStoppedApp) {
-                    eventSet.resume();
-                } else if (eventSet.suspendPolicy() == EventRequest.SUSPEND_ALL) {
-                    setCurrentThread(eventSet);
-                    notifier.vmInterrupted();
-                }
-            } catch (InterruptedException exc) {
-                // Do nothing. Any changes will be seen at top of loop.
-            } catch (VMDisconnectedException discExc) {
-                handleDisconnectedException();
-                break;
-            }
-        }
-        synchronized (this) {
-            completed = true;
-            notifyAll();
-        }
-    }
-
-    private boolean handleEvent(Event event) {
-        notifier.receivedEvent(event);
-
-        if (event instanceof ExceptionEvent) {
-            return exceptionEvent(event);
-        } else if (event instanceof BreakpointEvent) {
-            return breakpointEvent(event);
-        } else if (event instanceof WatchpointEvent) {
-            return fieldWatchEvent(event);
-        } else if (event instanceof StepEvent) {
-            return stepEvent(event);
-        } else if (event instanceof MethodEntryEvent) {
-            return methodEntryEvent(event);
-        } else if (event instanceof MethodExitEvent) {
-            return methodExitEvent(event);
-        } else if (event instanceof ClassPrepareEvent) {
-            return classPrepareEvent(event);
-        } else if (event instanceof ClassUnloadEvent) {
-            return classUnloadEvent(event);
-        } else if (event instanceof ThreadStartEvent) {
-            return threadStartEvent(event);
-        } else if (event instanceof ThreadDeathEvent) {
-            return threadDeathEvent(event);
-        } else if (event instanceof VMStartEvent) {
-            return vmStartEvent(event);
-        } else {
-            return handleExitEvent(event);
-        }
-    }
-
-    private boolean vmDied = false;
-    private boolean handleExitEvent(Event event) {
-        if (event instanceof VMDeathEvent) {
-            vmDied = true;
-            return vmDeathEvent(event);
-        } else if (event instanceof VMDisconnectEvent) {
-            connected = false;
-            if (!vmDied) {
-                vmDisconnectEvent(event);
-            }
-            Env.shutdown(shutdownMessageKey);
-            return false;
-        } else {
-            throw new InternalError(MessageOutput.format("Unexpected event type",
-                                                         new Object[] {event.getClass()}));
-        }
-    }
-
-    synchronized void handleDisconnectedException() {
-        /*
-         * A VMDisconnectedException has happened while dealing with
-         * another event. We need to flush the event queue, dealing only
-         * with exit events (VMDeath, VMDisconnect) so that we terminate
-         * correctly.
-         */
-        EventQueue queue = Env.vm().eventQueue();
-        while (connected) {
-            try {
-                EventSet eventSet = queue.remove();
-                EventIterator iter = eventSet.eventIterator();
-                while (iter.hasNext()) {
-                    handleExitEvent(iter.next());
-                }
-            } catch (InterruptedException exc) {
-                // ignore
-            } catch (InternalError exc) {
-                // ignore
-            }
-        }
-    }
-
-    private ThreadReference eventThread(Event event) {
-        if (event instanceof ClassPrepareEvent) {
-            return ((ClassPrepareEvent)event).thread();
-        } else if (event instanceof LocatableEvent) {
-            return ((LocatableEvent)event).thread();
-        } else if (event instanceof ThreadStartEvent) {
-            return ((ThreadStartEvent)event).thread();
-        } else if (event instanceof ThreadDeathEvent) {
-            return ((ThreadDeathEvent)event).thread();
-        } else if (event instanceof VMStartEvent) {
-            return ((VMStartEvent)event).thread();
-        } else {
-            return null;
-        }
-    }
-
-    private void setCurrentThread(EventSet set) {
-        ThreadReference thread;
-        if (set.size() > 0) {
-            /*
-             * If any event in the set has a thread associated with it,
-             * they all will, so just grab the first one.
-             */
-            Event event = set.iterator().next(); // Is there a better way?
-            thread = eventThread(event);
-        } else {
-            thread = null;
-        }
-        setCurrentThread(thread);
-    }
-
-    private void setCurrentThread(ThreadReference thread) {
-        ThreadInfo.invalidateAll();
-        ThreadInfo.setCurrentThread(thread);
-    }
-
-    private boolean vmStartEvent(Event event)  {
-        VMStartEvent se = (VMStartEvent)event;
-        notifier.vmStartEvent(se);
-        return stopOnVMStart;
-    }
-
-    private boolean breakpointEvent(Event event)  {
-        BreakpointEvent be = (BreakpointEvent)event;
-        notifier.breakpointEvent(be);
-        return true;
-    }
-
-    private boolean methodEntryEvent(Event event)  {
-        MethodEntryEvent me = (MethodEntryEvent)event;
-        notifier.methodEntryEvent(me);
-        return true;
-    }
-
-    private boolean methodExitEvent(Event event)  {
-        MethodExitEvent me = (MethodExitEvent)event;
-        return notifier.methodExitEvent(me);
-    }
-
-    private boolean fieldWatchEvent(Event event)  {
-        WatchpointEvent fwe = (WatchpointEvent)event;
-        notifier.fieldWatchEvent(fwe);
-        return true;
-    }
-
-    private boolean stepEvent(Event event)  {
-        StepEvent se = (StepEvent)event;
-        notifier.stepEvent(se);
-        return true;
-    }
-
-    private boolean classPrepareEvent(Event event)  {
-        ClassPrepareEvent cle = (ClassPrepareEvent)event;
-        notifier.classPrepareEvent(cle);
-
-        if (!Env.specList.resolve(cle)) {
-            MessageOutput.lnprint("Stopping due to deferred breakpoint errors.");
-            return true;
-        } else {
-            return false;
-        }
-    }
-
-    private boolean classUnloadEvent(Event event)  {
-        ClassUnloadEvent cue = (ClassUnloadEvent)event;
-        notifier.classUnloadEvent(cue);
-        return false;
-    }
-
-    private boolean exceptionEvent(Event event) {
-        ExceptionEvent ee = (ExceptionEvent)event;
-        notifier.exceptionEvent(ee);
-        return true;
-    }
-
-    private boolean threadDeathEvent(Event event) {
-        ThreadDeathEvent tee = (ThreadDeathEvent)event;
-        ThreadInfo.removeThread(tee.thread());
-        return false;
-    }
-
-    private boolean threadStartEvent(Event event) {
-        ThreadStartEvent tse = (ThreadStartEvent)event;
-        ThreadInfo.addThread(tse.thread());
-        notifier.threadStartEvent(tse);
-        return false;
-    }
-
-    public boolean vmDeathEvent(Event event) {
-        shutdownMessageKey = "The application exited";
-        notifier.vmDeathEvent((VMDeathEvent)event);
-        return false;
-    }
-
-    public boolean vmDisconnectEvent(Event event) {
-        shutdownMessageKey = "The application has been disconnected";
-        notifier.vmDisconnectEvent((VMDisconnectEvent)event);
-        return false;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/tty/EventNotifier.java b/ojluni/src/main/java/com/sun/tools/example/debug/tty/EventNotifier.java
deleted file mode 100755
index 97dabf9..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/tty/EventNotifier.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.tty;
-
-import com.sun.jdi.event.*;
-
-interface EventNotifier {
-    void vmStartEvent(VMStartEvent e);
-    void vmDeathEvent(VMDeathEvent e);
-    void vmDisconnectEvent(VMDisconnectEvent e);
-
-    void threadStartEvent(ThreadStartEvent e);
-    void threadDeathEvent(ThreadDeathEvent e);
-
-    void classPrepareEvent(ClassPrepareEvent e);
-    void classUnloadEvent(ClassUnloadEvent e);
-
-    void breakpointEvent(BreakpointEvent e);
-    void fieldWatchEvent(WatchpointEvent e);
-    void stepEvent(StepEvent e);
-    void exceptionEvent(ExceptionEvent e);
-    void methodEntryEvent(MethodEntryEvent e);
-    boolean methodExitEvent(MethodExitEvent e);
-
-    void vmInterrupted();
-    void receivedEvent(Event event);
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/tty/EventRequestSpec.java b/ojluni/src/main/java/com/sun/tools/example/debug/tty/EventRequestSpec.java
deleted file mode 100755
index ba668d2..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/tty/EventRequestSpec.java
+++ /dev/null
@@ -1,219 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.tty;
-
-import com.sun.jdi.*;
-import com.sun.jdi.request.EventRequest;
-import com.sun.jdi.request.ExceptionRequest;
-import com.sun.jdi.request.ClassPrepareRequest;
-import com.sun.jdi.event.ClassPrepareEvent;
-import java.util.ArrayList;
-
-abstract class EventRequestSpec {
-
-    final ReferenceTypeSpec refSpec;
-
-    int suspendPolicy = EventRequest.SUSPEND_ALL;
-
-    EventRequest resolved = null;
-    ClassPrepareRequest prepareRequest = null;
-
-    EventRequestSpec(ReferenceTypeSpec refSpec) {
-        this.refSpec = refSpec;
-    }
-
-    /**
-     * The 'refType' is known to match, return the EventRequest.
-     */
-    abstract EventRequest resolveEventRequest(ReferenceType refType)
-                                           throws Exception;
-
-    /**
-     * @return If this EventRequestSpec matches the 'refType'
-     * return the cooresponding EventRequest.  Otherwise
-     * return null.
-     */
-    synchronized EventRequest resolve(ClassPrepareEvent event) throws Exception {
-        if ((resolved == null) &&
-            (prepareRequest != null) &&
-            prepareRequest.equals(event.request())) {
-
-            resolved = resolveEventRequest(event.referenceType());
-            prepareRequest.disable();
-            Env.vm().eventRequestManager().deleteEventRequest(prepareRequest);
-            prepareRequest = null;
-
-            if (refSpec instanceof PatternReferenceTypeSpec) {
-                PatternReferenceTypeSpec prs = (PatternReferenceTypeSpec)refSpec;
-                if (! prs.isUnique()){
-                    /*
-                     * Class pattern event requests are never
-                     * considered "resolved", since future class loads
-                     * might also match.
-                     * Create and enable a new ClassPrepareRequest to
-                     * keep trying to resolve.
-                     */
-                    resolved = null;
-                    prepareRequest = refSpec.createPrepareRequest();
-                    prepareRequest.enable();
-                }
-            }
-        }
-        return resolved;
-    }
-
-    synchronized void remove() {
-        if (isResolved()) {
-            Env.vm().eventRequestManager().deleteEventRequest(resolved());
-        }
-        if (refSpec instanceof PatternReferenceTypeSpec) {
-            PatternReferenceTypeSpec prs = (PatternReferenceTypeSpec)refSpec;
-            if (! prs.isUnique()){
-                /*
-                 * This is a class pattern.  Track down and delete
-                 * all EventRequests matching this spec.
-                 * Note: Class patterns apply only to ExceptionRequests,
-                 * so that is all we need to examine.
-                 */
-                ArrayList<ExceptionRequest> deleteList = new ArrayList<ExceptionRequest>();
-                for (ExceptionRequest er :
-                         Env.vm().eventRequestManager().exceptionRequests()) {
-                    if (prs.matches(er.exception())) {
-                        deleteList.add (er);
-                    }
-                }
-                Env.vm().eventRequestManager().deleteEventRequests(deleteList);
-            }
-        }
-    }
-
-    private EventRequest resolveAgainstPreparedClasses() throws Exception {
-        for (ReferenceType refType : Env.vm().allClasses()) {
-            if (refType.isPrepared() && refSpec.matches(refType)) {
-                resolved = resolveEventRequest(refType);
-            }
-        }
-        return resolved;
-    }
-
-    synchronized EventRequest resolveEagerly() throws Exception {
-        try {
-            if (resolved == null) {
-                /*
-                 * Not resolved.  Schedule a prepare request so we
-                 * can resolve later.
-                 */
-                prepareRequest = refSpec.createPrepareRequest();
-                prepareRequest.enable();
-
-                // Try to resolve in case the class is already loaded.
-                resolveAgainstPreparedClasses();
-                if (resolved != null) {
-                    prepareRequest.disable();
-                    Env.vm().eventRequestManager().deleteEventRequest(prepareRequest);
-                    prepareRequest = null;
-                }
-            }
-            if (refSpec instanceof PatternReferenceTypeSpec) {
-                PatternReferenceTypeSpec prs = (PatternReferenceTypeSpec)refSpec;
-                if (! prs.isUnique()){
-                    /*
-                     * Class pattern event requests are never
-                     * considered "resolved", since future class loads
-                     * might also match.  Create a new
-                     * ClassPrepareRequest if necessary and keep
-                     * trying to resolve.
-                     */
-                    resolved = null;
-                    if (prepareRequest == null) {
-                        prepareRequest = refSpec.createPrepareRequest();
-                        prepareRequest.enable();
-                    }
-                }
-            }
-        } catch (VMNotConnectedException e) {
-            // Do nothing. Another resolve will be attempted when the
-            // VM is started.
-        }
-        return resolved;
-    }
-
-    /**
-     * @return the eventRequest this spec has been resolved to,
-     * null if so far unresolved.
-     */
-    EventRequest resolved() {
-        return resolved;
-    }
-
-    /**
-     * @return true if this spec has been resolved.
-     */
-    boolean isResolved() {
-        return resolved != null;
-    }
-
-    protected boolean isJavaIdentifier(String s) {
-        if (s.length() == 0) {
-            return false;
-        }
-
-        int cp = s.codePointAt(0);
-        if (! Character.isJavaIdentifierStart(cp)) {
-            return false;
-        }
-
-        for (int i = Character.charCount(cp); i < s.length(); i += Character.charCount(cp)) {
-            cp = s.codePointAt(i);
-            if (! Character.isJavaIdentifierPart(cp)) {
-                return false;
-            }
-        }
-
-        return true;
-    }
-
-    String errorMessageFor(Exception e) {
-        if (e instanceof IllegalArgumentException) {
-            return (MessageOutput.format("Invalid command syntax"));
-        } else if (e instanceof RuntimeException) {
-            // A runtime exception that we were not expecting
-            throw (RuntimeException)e;
-        } else {
-            return (MessageOutput.format("Internal error; unable to set",
-                                         this.refSpec.toString()));
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/tty/EventRequestSpecList.java b/ojluni/src/main/java/com/sun/tools/example/debug/tty/EventRequestSpecList.java
deleted file mode 100755
index 8ad6528..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/tty/EventRequestSpecList.java
+++ /dev/null
@@ -1,175 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.tty;
-
-import com.sun.jdi.request.EventRequest;
-import com.sun.jdi.event.ClassPrepareEvent;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-class EventRequestSpecList {
-
-    private static final int statusResolved = 1;
-    private static final int statusUnresolved = 2;
-    private static final int statusError = 3;
-
-    // all specs
-    private List<EventRequestSpec> eventRequestSpecs = Collections.synchronizedList(
-                                                  new ArrayList<EventRequestSpec>());
-
-    EventRequestSpecList() {
-    }
-
-    /**
-     * Resolve all deferred eventRequests waiting for 'refType'.
-     * @return true if it completes successfully, false on error.
-     */
-    boolean resolve(ClassPrepareEvent event) {
-        boolean failure = false;
-        synchronized(eventRequestSpecs) {
-            for (EventRequestSpec spec : eventRequestSpecs) {
-                if (!spec.isResolved()) {
-                    try {
-                        EventRequest eventRequest = spec.resolve(event);
-                        if (eventRequest != null) {
-                            MessageOutput.println("Set deferred", spec.toString());
-                        }
-                    } catch (Exception e) {
-                        MessageOutput.println("Unable to set deferred",
-                                              new Object [] {spec.toString(),
-                                                             spec.errorMessageFor(e)});
-                        failure = true;
-                    }
-                }
-            }
-        }
-        return !failure;
-    }
-
-    void resolveAll() {
-        for (EventRequestSpec spec : eventRequestSpecs) {
-            try {
-                EventRequest eventRequest = spec.resolveEagerly();
-                if (eventRequest != null) {
-                    MessageOutput.println("Set deferred", spec.toString());
-                }
-            } catch (Exception e) {
-            }
-        }
-    }
-
-    boolean addEagerlyResolve(EventRequestSpec spec) {
-        try {
-            eventRequestSpecs.add(spec);
-            EventRequest eventRequest = spec.resolveEagerly();
-            if (eventRequest != null) {
-                MessageOutput.println("Set", spec.toString());
-            }
-            return true;
-        } catch (Exception exc) {
-            MessageOutput.println("Unable to set",
-                                  new Object [] {spec.toString(),
-                                                 spec.errorMessageFor(exc)});
-            return false;
-        }
-    }
-
-    BreakpointSpec createBreakpoint(String classPattern, int line)
-        throws ClassNotFoundException {
-        ReferenceTypeSpec refSpec =
-            new PatternReferenceTypeSpec(classPattern);
-        return new BreakpointSpec(refSpec, line);
-    }
-
-    BreakpointSpec createBreakpoint(String classPattern,
-                                 String methodId,
-                                    List<String> methodArgs)
-                                throws MalformedMemberNameException,
-                                       ClassNotFoundException {
-        ReferenceTypeSpec refSpec =
-            new PatternReferenceTypeSpec(classPattern);
-        return new BreakpointSpec(refSpec, methodId, methodArgs);
-    }
-
-    EventRequestSpec createExceptionCatch(String classPattern,
-                                          boolean notifyCaught,
-                                          boolean notifyUncaught)
-                                            throws ClassNotFoundException {
-        ReferenceTypeSpec refSpec =
-            new PatternReferenceTypeSpec(classPattern);
-        return new ExceptionSpec(refSpec, notifyCaught, notifyUncaught);
-    }
-
-    WatchpointSpec createAccessWatchpoint(String classPattern,
-                                       String fieldId)
-                                      throws MalformedMemberNameException,
-                                             ClassNotFoundException {
-        ReferenceTypeSpec refSpec =
-            new PatternReferenceTypeSpec(classPattern);
-        return new AccessWatchpointSpec(refSpec, fieldId);
-    }
-
-    WatchpointSpec createModificationWatchpoint(String classPattern,
-                                       String fieldId)
-                                      throws MalformedMemberNameException,
-                                             ClassNotFoundException {
-        ReferenceTypeSpec refSpec =
-            new PatternReferenceTypeSpec(classPattern);
-        return new ModificationWatchpointSpec(refSpec, fieldId);
-    }
-
-    boolean delete(EventRequestSpec proto) {
-        synchronized (eventRequestSpecs) {
-            int inx = eventRequestSpecs.indexOf(proto);
-            if (inx != -1) {
-                EventRequestSpec spec = eventRequestSpecs.get(inx);
-                spec.remove();
-                eventRequestSpecs.remove(inx);
-                return true;
-            } else {
-                return false;
-            }
-        }
-    }
-
-    List<EventRequestSpec> eventRequestSpecs() {
-       // We need to make a copy to avoid synchronization problems
-        synchronized (eventRequestSpecs) {
-            return new ArrayList<EventRequestSpec>(eventRequestSpecs);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/tty/ExceptionSpec.java b/ojluni/src/main/java/com/sun/tools/example/debug/tty/ExceptionSpec.java
deleted file mode 100755
index 8c1e652..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/tty/ExceptionSpec.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.tty;
-
-import com.sun.jdi.ReferenceType;
-import com.sun.jdi.request.*;
-
-class ExceptionSpec extends EventRequestSpec {
-    private boolean notifyCaught;
-    private boolean notifyUncaught;
-
-    private ExceptionSpec(ReferenceTypeSpec refSpec) {
-        this(refSpec, true, true);
-    }
-
-    ExceptionSpec(ReferenceTypeSpec refSpec,
-                  boolean notifyCaught,
-                  boolean notifyUncaught) {
-        super(refSpec);
-        this.notifyCaught = notifyCaught;
-        this.notifyUncaught = notifyUncaught;
-    }
-
-    /**
-     * The 'refType' is known to match, return the EventRequest.
-     */
-    @Override
-    EventRequest resolveEventRequest(ReferenceType refType) {
-        EventRequestManager em = refType.virtualMachine().eventRequestManager();
-        ExceptionRequest excReq = em.createExceptionRequest(refType,
-                                                            notifyCaught,
-                                                            notifyUncaught);
-        excReq.enable();
-        return excReq;
-    }
-
-    public boolean notifyCaught() {
-        return notifyCaught;
-    }
-
-    public boolean notifyUncaught() {
-        return notifyUncaught;
-    }
-
-    @Override
-    public int hashCode() {
-        //Reference: Effective Java[tm] (Bloch, 2001), Item 8
-        int result = 17;
-        result = (37 * result) + (notifyCaught() ? 0: 1);
-        result = (37 * result) + (notifyUncaught() ? 0: 1);
-        result = (37 * result) + refSpec.hashCode();
-        return result;
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-        if (obj instanceof ExceptionSpec) {
-            ExceptionSpec es = (ExceptionSpec)obj;
-
-            if (refSpec.equals(es.refSpec) &&
-                (this.notifyCaught() == es.notifyCaught()) &&
-                (this.notifyUncaught() == es.notifyUncaught())) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    @Override
-    public String toString() {
-        String s;
-        if (notifyCaught && !notifyUncaught) {
-            s = MessageOutput.format("exceptionSpec caught",
-                                     refSpec.toString());
-        } else if (notifyUncaught && !notifyCaught) {
-            s = MessageOutput.format("exceptionSpec uncaught",
-                                     refSpec.toString());
-        } else {
-            s = MessageOutput.format("exceptionSpec all",
-                                     refSpec.toString());
-        }
-        return s;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/tty/LineNotFoundException.java b/ojluni/src/main/java/com/sun/tools/example/debug/tty/LineNotFoundException.java
deleted file mode 100755
index 8e188aa..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/tty/LineNotFoundException.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (c) 1998, 2001, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.tty;
-
-public class LineNotFoundException extends Exception
-{
-    private static final long serialVersionUID = 3748297722519448995L;
-
-    public LineNotFoundException()
-    {
-        super();
-    }
-
-    public LineNotFoundException(String s)
-    {
-        super(s);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/tty/MalformedMemberNameException.java b/ojluni/src/main/java/com/sun/tools/example/debug/tty/MalformedMemberNameException.java
deleted file mode 100755
index 3e64927..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/tty/MalformedMemberNameException.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 1998, 1999, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.tty;
-
-class MalformedMemberNameException extends Exception {
-    private static final long serialVersionUID = 7759071468833196630L;
-
-    public MalformedMemberNameException() {
-        super();
-    }
-
-    public MalformedMemberNameException(String s) {
-        super(s);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/tty/MessageOutput.java b/ojluni/src/main/java/com/sun/tools/example/debug/tty/MessageOutput.java
deleted file mode 100755
index b86d89f..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/tty/MessageOutput.java
+++ /dev/null
@@ -1,205 +0,0 @@
-/*
- * Copyright (c) 2001, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-package com.sun.tools.example.debug.tty;
-
-import java.util.*;
-import java.text.MessageFormat;
-/**
- * Internationalization (i18n) convenience methods for jdb.
- *
- * All program output should flow through these methods, and this is
- * the only class that should be printing directly or otherwise
- * accessing System.[out,err].
- *
- * @bug 4348376
- * @author Tim Bell
- */
-public class MessageOutput {
-    /**
-     * The resource bundle containing localizable message content.
-     * This is loaded by TTY.main() at start-up
-     */
-    static ResourceBundle textResources;
-
-    /** Our message formatter.  Allocated once, used many times */
-    private static MessageFormat messageFormat;
-
-    /**
-     * Fatal shutdown notification.  This is sent to System.err
-     * instead of System.out
-     */
-    static void fatalError(String messageKey) {
-        System.err.println();
-        System.err.println(format("Fatal error"));
-        System.err.println(format(messageKey));
-        Env.shutdown();
-    }
-
-    /**
-     * "Format" a string by doing a simple key lookup.
-     */
-    static String format(String key) {
-        return (textResources.getString(key));
-    }
-
-    /**
-     * Fetch and format a message with one string argument.
-     * This is the most common usage.
-     */
-    static String format(String key, String argument) {
-        return format(key, new Object [] {argument});
-    }
-
-    /**
-     * Fetch a string by key lookup and format in the arguments.
-     */
-    static synchronized String format(String key, Object [] arguments) {
-        if (messageFormat == null) {
-            messageFormat = new MessageFormat (textResources.getString(key));
-        } else {
-            messageFormat.applyPattern (textResources.getString(key));
-        }
-        return (messageFormat.format (arguments));
-    }
-
-    /**
-     * Print directly to System.out.
-     * Every rule has a few exceptions.
-     * The exceptions to "must use the MessageOutput formatters" are:
-     *     VMConnection.dumpStream()
-     *     TTY.monitorCommand()
-     *     TTY.TTY() (for the '!!' command only)
-     *     Commands.java (multiple locations)
-     * These are the only sites that should be calling this
-     * method.
-     */
-    static void printDirectln(String line) {
-        System.out.println(line);
-    }
-    static void printDirect(String line) {
-        System.out.print(line);
-    }
-    static void printDirect(char c) {
-        System.out.print(c);
-    }
-
-    /**
-     * Print a newline.
-     * Use this instead of '\n'
-     */
-    static void println() {
-        System.out.println();
-    }
-
-    /**
-     * Format and print a simple string.
-     */
-    static void print(String key) {
-        System.out.print(format(key));
-    }
-    /**
-     * Format and print a simple string.
-     */
-    static void println(String key) {
-        System.out.println(format(key));
-    }
-
-
-    /**
-     * Fetch, format and print a message with one string argument.
-     * This is the most common usage.
-     */
-    static void print(String key, String argument) {
-        System.out.print(format(key, argument));
-    }
-    static void println(String key, String argument) {
-        System.out.println(format(key, argument));
-    }
-
-    /**
-     * Fetch, format and print a message with an arbitrary
-     * number of message arguments.
-     */
-    static void println(String key, Object [] arguments) {
-        System.out.println(format(key, arguments));
-    }
-
-    /**
-     * Print a newline, followed by the string.
-     */
-    static void lnprint(String key) {
-        System.out.println();
-        System.out.print(textResources.getString(key));
-    }
-
-    static void lnprint(String key, String argument) {
-        System.out.println();
-        System.out.print(format(key, argument));
-    }
-
-    static void lnprint(String key, Object [] arguments) {
-        System.out.println();
-        System.out.print(format(key, arguments));
-    }
-
-    /**
-     * Print an exception message with a stack trace.
-     */
-    static void printException(String key, Exception e) {
-        if (key != null) {
-            try {
-                println(key);
-            } catch (MissingResourceException mex) {
-                printDirectln(key);
-            }
-        }
-        System.out.flush();
-        e.printStackTrace();
-    }
-
-    static void printPrompt() {
-        ThreadInfo threadInfo = ThreadInfo.getCurrentThreadInfo();
-        if (threadInfo == null) {
-            System.out.print
-                (MessageOutput.format("jdb prompt with no current thread"));
-        } else {
-            System.out.print
-                (MessageOutput.format("jdb prompt thread name and current stack frame",
-                                      new Object [] {
-                                          threadInfo.getThread().name(),
-                                          new Integer (threadInfo.getCurrentFrameIndex() + 1)}));
-        }
-        System.out.flush();
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/tty/ModificationWatchpointSpec.java b/ojluni/src/main/java/com/sun/tools/example/debug/tty/ModificationWatchpointSpec.java
deleted file mode 100755
index 846f74b..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/tty/ModificationWatchpointSpec.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (c) 1998, 2001, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.tty;
-
-import com.sun.jdi.*;
-import com.sun.jdi.request.EventRequestManager;
-import com.sun.jdi.request.EventRequest;
-
-class ModificationWatchpointSpec extends WatchpointSpec {
-    ModificationWatchpointSpec(ReferenceTypeSpec refSpec, String fieldId)
-                                  throws MalformedMemberNameException {
-        super(refSpec, fieldId);
-    }
-
-    /**
-     * The 'refType' is known to match, return the EventRequest.
-     */
-    @Override
-    EventRequest resolveEventRequest(ReferenceType refType)
-                                      throws NoSuchFieldException {
-        Field field = refType.fieldByName(fieldId);
-        EventRequestManager em = refType.virtualMachine().eventRequestManager();
-        EventRequest wp = em.createModificationWatchpointRequest(field);
-        wp.setSuspendPolicy(suspendPolicy);
-        wp.enable();
-        return wp;
-    }
-
-    @Override
-    public String toString() {
-        return MessageOutput.format("watch modification of",
-                                    new Object [] {refSpec.toString(),
-                                                   fieldId});
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/tty/PatternReferenceTypeSpec.java b/ojluni/src/main/java/com/sun/tools/example/debug/tty/PatternReferenceTypeSpec.java
deleted file mode 100755
index e719222..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/tty/PatternReferenceTypeSpec.java
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.tty;
-
-import com.sun.jdi.*;
-import com.sun.jdi.request.ClassPrepareRequest;
-import java.util.StringTokenizer;
-
-
-class PatternReferenceTypeSpec implements ReferenceTypeSpec {
-    final String classId;
-    String stem;
-
-    PatternReferenceTypeSpec(String classId) throws ClassNotFoundException {
-        this.classId = classId;
-        stem = classId;
-        if (classId.startsWith("*")) {
-            stem = stem.substring(1);
-        } else if (classId.endsWith("*")) {
-            stem = stem.substring(0, classId.length() - 1);
-        }
-        checkClassName(stem);
-    }
-
-    /**
-     * Is this spec unique or is it a class pattern?
-     */
-    public boolean isUnique() {
-        return classId.equals(stem);
-    }
-
-    /**
-     * Does the specified ReferenceType match this spec.
-     */
-    @Override
-    public boolean matches(ReferenceType refType) {
-        if (classId.startsWith("*")) {
-            return refType.name().endsWith(stem);
-        } else if (classId.endsWith("*")) {
-            return refType.name().startsWith(stem);
-        } else {
-            return refType.name().equals(classId);
-        }
-    }
-
-    @Override
-    public ClassPrepareRequest createPrepareRequest() {
-        ClassPrepareRequest request =
-            Env.vm().eventRequestManager().createClassPrepareRequest();
-        request.addClassFilter(classId);
-        request.addCountFilter(1);
-        return request;
-    }
-
-    @Override
-    public int hashCode() {
-        return classId.hashCode();
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-        if (obj instanceof PatternReferenceTypeSpec) {
-            PatternReferenceTypeSpec spec = (PatternReferenceTypeSpec)obj;
-
-            return classId.equals(spec.classId);
-        } else {
-            return false;
-        }
-    }
-
-    private void checkClassName(String className) throws ClassNotFoundException {
-        // Do stricter checking of class name validity on deferred
-        //  because if the name is invalid, it will
-        // never match a future loaded class, and we'll be silent
-        // about it.
-        StringTokenizer tokenizer = new StringTokenizer(className, ".");
-        while (tokenizer.hasMoreTokens()) {
-            String token = tokenizer.nextToken();
-            // Each dot-separated piece must be a valid identifier
-            // and the first token can also be "*". (Note that
-            // numeric class ids are not permitted. They must
-            // match a loaded class.)
-            if (!isJavaIdentifier(token)) {
-                throw new ClassNotFoundException();
-            }
-        }
-    }
-
-    private boolean isJavaIdentifier(String s) {
-        if (s.length() == 0) {
-            return false;
-        }
-
-        int cp = s.codePointAt(0);
-        if (! Character.isJavaIdentifierStart(cp)) {
-            return false;
-        }
-
-        for (int i = Character.charCount(cp); i < s.length(); i += Character.charCount(cp)) {
-            cp = s.codePointAt(i);
-            if (! Character.isJavaIdentifierPart(cp)) {
-                return false;
-            }
-        }
-
-        return true;
-    }
-
-    @Override
-    public String toString() {
-        return classId;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/tty/ReferenceTypeSpec.java b/ojluni/src/main/java/com/sun/tools/example/debug/tty/ReferenceTypeSpec.java
deleted file mode 100755
index 12f1fc6..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/tty/ReferenceTypeSpec.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (c) 1998, 1999, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.tty;
-
-import com.sun.jdi.*;
-import com.sun.jdi.request.ClassPrepareRequest;
-
-interface ReferenceTypeSpec {
-    /**
-     * Does the specified ReferenceType match this spec.
-     */
-    boolean matches(ReferenceType refType);
-    ClassPrepareRequest createPrepareRequest();
-
-    @Override
-    int hashCode();
-
-    @Override
-    boolean equals(Object obj);
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/tty/SourceMapper.java b/ojluni/src/main/java/com/sun/tools/example/debug/tty/SourceMapper.java
deleted file mode 100755
index e7f67f0..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/tty/SourceMapper.java
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.tty;
-
-import com.sun.jdi.Location;
-import com.sun.jdi.AbsentInformationException;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.StringTokenizer;
-import java.io.*;
-
-class SourceMapper {
-
-    private final String[] dirs;
-
-    SourceMapper(List<String> sourcepath) {
-        /*
-         * sourcepath can arrive from the debugee as a List.
-         * (via PathSearchingVirtualMachine.classPath())
-         */
-        List<String> dirList = new ArrayList<String>();
-        for (String element : sourcepath) {
-            //XXX remove .jar and .zip files; we want only directories on
-            //the source path. (Bug ID 4186582)
-            if ( ! (element.endsWith(".jar") ||
-                    element.endsWith(".zip"))) {
-                dirList.add(element);
-            }
-        }
-        dirs = dirList.toArray(new String[0]);
-    }
-
-    SourceMapper(String sourcepath) {
-        /*
-         * sourcepath can also arrive from the command line
-         * as a String.  (via "-sourcepath")
-         *
-         * Using File.pathSeparator as delimiter below is OK
-         * because we are on the same machine as the command
-         * line originiated.
-         */
-        StringTokenizer st = new StringTokenizer(sourcepath,
-                                                 File.pathSeparator);
-        List<String> dirList = new ArrayList<String>();
-        while (st.hasMoreTokens()) {
-            String s = st.nextToken();
-            //XXX remove .jar and .zip files; we want only directories on
-            //the source path. (Bug ID 4186582)
-            if ( ! (s.endsWith(".jar") ||
-                    s.endsWith(".zip"))) {
-                dirList.add(s);
-            }
-        }
-        dirs = dirList.toArray(new String[0]);
-    }
-
-    /*
-     * Return the current sourcePath as a String.
-     */
-    String getSourcePath() {
-        int i = 0;
-        StringBuffer sp;
-        if (dirs.length < 1) {
-            return "";          //The source path is empty.
-        } else {
-            sp = new StringBuffer(dirs[i++]);
-        }
-        for (; i < dirs.length; i++) {
-            sp.append(File.pathSeparator);
-            sp.append(dirs[i]);
-        }
-        return sp.toString();
-    }
-
-    /**
-     * Return a File cooresponding to the source of this location.
-     * Return null if not available.
-     */
-    File sourceFile(Location loc) {
-        try {
-            String filename = loc.sourceName();
-            String refName = loc.declaringType().name();
-            int iDot = refName.lastIndexOf('.');
-            String pkgName = (iDot >= 0)? refName.substring(0, iDot+1) : "";
-            String full = pkgName.replace('.', File.separatorChar) + filename;
-            for (int i= 0; i < dirs.length; ++i) {
-                File path = new File(dirs[i], full);
-                if (path.exists()) {
-                    return path;
-                }
-            }
-            return null;
-        } catch (AbsentInformationException e) {
-            return null;
-        }
-    }
-
-    /**
-     * Return a BufferedReader cooresponding to the source
-     * of this location.
-     * Return null if not available.
-     * Note: returned reader must be closed.
-     */
-    BufferedReader sourceReader(Location loc) {
-        File sourceFile = sourceFile(loc);
-        if (sourceFile == null) {
-            return null;
-        }
-        try {
-            return new BufferedReader(new FileReader(sourceFile));
-        } catch(IOException exc) {
-        }
-        return null;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/tty/TTY.java b/ojluni/src/main/java/com/sun/tools/example/debug/tty/TTY.java
deleted file mode 100755
index f86f177..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/tty/TTY.java
+++ /dev/null
@@ -1,1072 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.tty;
-
-import com.sun.jdi.*;
-import com.sun.jdi.event.*;
-import com.sun.jdi.request.*;
-import com.sun.jdi.connect.*;
-
-import java.util.*;
-import java.io.*;
-
-public class TTY implements EventNotifier {
-    EventHandler handler = null;
-
-    /**
-     * List of Strings to execute at each stop.
-     */
-    private List<String> monitorCommands = new ArrayList<String>();
-    private int monitorCount = 0;
-
-    /**
-     * The name of this tool.
-     */
-    private static final String progname = "jdb";
-
-    @Override
-    public void vmStartEvent(VMStartEvent se)  {
-        Thread.yield();  // fetch output
-        MessageOutput.lnprint("VM Started:");
-    }
-
-    @Override
-    public void vmDeathEvent(VMDeathEvent e)  {
-    }
-
-    @Override
-    public void vmDisconnectEvent(VMDisconnectEvent e)  {
-    }
-
-    @Override
-    public void threadStartEvent(ThreadStartEvent e)  {
-    }
-
-    @Override
-    public void threadDeathEvent(ThreadDeathEvent e)  {
-    }
-
-    @Override
-    public void classPrepareEvent(ClassPrepareEvent e)  {
-    }
-
-    @Override
-    public void classUnloadEvent(ClassUnloadEvent e)  {
-    }
-
-    @Override
-    public void breakpointEvent(BreakpointEvent be)  {
-        Thread.yield();  // fetch output
-        MessageOutput.lnprint("Breakpoint hit:");
-    }
-
-    @Override
-    public void fieldWatchEvent(WatchpointEvent fwe)  {
-        Field field = fwe.field();
-        ObjectReference obj = fwe.object();
-        Thread.yield();  // fetch output
-
-        if (fwe instanceof ModificationWatchpointEvent) {
-            MessageOutput.lnprint("Field access encountered before after",
-                                  new Object [] {field,
-                                                 fwe.valueCurrent(),
-                                                 ((ModificationWatchpointEvent)fwe).valueToBe()});
-        } else {
-            MessageOutput.lnprint("Field access encountered", field.toString());
-        }
-    }
-
-    @Override
-    public void stepEvent(StepEvent se)  {
-        Thread.yield();  // fetch output
-        MessageOutput.lnprint("Step completed:");
-    }
-
-    @Override
-    public void exceptionEvent(ExceptionEvent ee) {
-        Thread.yield();  // fetch output
-        Location catchLocation = ee.catchLocation();
-        if (catchLocation == null) {
-            MessageOutput.lnprint("Exception occurred uncaught",
-                                  ee.exception().referenceType().name());
-        } else {
-            MessageOutput.lnprint("Exception occurred caught",
-                                  new Object [] {ee.exception().referenceType().name(),
-                                                 Commands.locationString(catchLocation)});
-        }
-    }
-
-    @Override
-    public void methodEntryEvent(MethodEntryEvent me) {
-        Thread.yield();  // fetch output
-        /*
-         * These can be very numerous, so be as efficient as possible.
-         * If we are stopping here, then we will see the normal location
-         * info printed.
-         */
-        if (me.request().suspendPolicy() != EventRequest.SUSPEND_NONE) {
-            // We are stopping; the name will be shown by the normal mechanism
-            MessageOutput.lnprint("Method entered:");
-        } else {
-            // We aren't stopping, show the name
-            MessageOutput.print("Method entered:");
-            printLocationOfEvent(me);
-        }
-    }
-
-    @Override
-    public boolean methodExitEvent(MethodExitEvent me) {
-        Thread.yield();  // fetch output
-        /*
-         * These can be very numerous, so be as efficient as possible.
-         */
-        Method mmm = Env.atExitMethod();
-        Method meMethod = me.method();
-
-        if (mmm == null || mmm.equals(meMethod)) {
-            // Either we are not tracing a specific method, or we are
-            // and we are exitting that method.
-
-            if (me.request().suspendPolicy() != EventRequest.SUSPEND_NONE) {
-                // We will be stopping here, so do a newline
-                MessageOutput.println();
-            }
-            if (Env.vm().canGetMethodReturnValues()) {
-                MessageOutput.print("Method exitedValue:", me.returnValue() + "");
-            } else {
-                MessageOutput.print("Method exited:");
-            }
-
-            if (me.request().suspendPolicy() == EventRequest.SUSPEND_NONE) {
-                // We won't be stopping here, so show the method name
-                printLocationOfEvent(me);
-
-            }
-
-            // In case we want to have a one shot trace exit some day, this
-            // code disables the request so we don't hit it again.
-            if (false) {
-                // This is a one shot deal; we don't want to stop
-                // here the next time.
-                Env.setAtExitMethod(null);
-                EventRequestManager erm = Env.vm().eventRequestManager();
-                for (EventRequest eReq : erm.methodExitRequests()) {
-                    if (eReq.equals(me.request())) {
-                        eReq.disable();
-                    }
-                }
-            }
-            return true;
-        }
-
-        // We are tracing a specific method, and this isn't it.  Keep going.
-        return false;
-    }
-
-    @Override
-    public void vmInterrupted() {
-        Thread.yield();  // fetch output
-        printCurrentLocation();
-        for (String cmd : monitorCommands) {
-            StringTokenizer t = new StringTokenizer(cmd);
-            t.nextToken();  // get rid of monitor number
-            executeCommand(t);
-        }
-        MessageOutput.printPrompt();
-    }
-
-    @Override
-    public void receivedEvent(Event event) {
-    }
-
-    private void printBaseLocation(String threadName, Location loc) {
-        MessageOutput.println("location",
-                              new Object [] {threadName,
-                                             Commands.locationString(loc)});
-    }
-
-    private void printCurrentLocation() {
-        ThreadInfo threadInfo = ThreadInfo.getCurrentThreadInfo();
-        StackFrame frame;
-        try {
-            frame = threadInfo.getCurrentFrame();
-        } catch (IncompatibleThreadStateException exc) {
-            MessageOutput.println("<location unavailable>");
-            return;
-        }
-        if (frame == null) {
-            MessageOutput.println("No frames on the current call stack");
-        } else {
-            Location loc = frame.location();
-            printBaseLocation(threadInfo.getThread().name(), loc);
-            // Output the current source line, if possible
-            if (loc.lineNumber() != -1) {
-                String line;
-                try {
-                    line = Env.sourceLine(loc, loc.lineNumber());
-                } catch (java.io.IOException e) {
-                    line = null;
-                }
-                if (line != null) {
-                    MessageOutput.println("source line number and line",
-                                          new Object [] {new Integer(loc.lineNumber()),
-                                                         line});
-                }
-            }
-        }
-        MessageOutput.println();
-    }
-
-    private void printLocationOfEvent(LocatableEvent theEvent) {
-        printBaseLocation(theEvent.thread().name(), theEvent.location());
-    }
-
-    void help() {
-        MessageOutput.println("zz help text");
-    }
-
-    private static final String[][] commandList = {
-        /*
-         * NOTE: this list must be kept sorted in ascending ASCII
-         *       order by element [0].  Ref: isCommand() below.
-         *
-         *Command      OK when        OK when
-         * name      disconnected?   readonly?
-         *------------------------------------
-         */
-        {"!!",           "n",         "y"},
-        {"?",            "y",         "y"},
-        {"bytecodes",    "n",         "y"},
-        {"catch",        "y",         "n"},
-        {"class",        "n",         "y"},
-        {"classes",      "n",         "y"},
-        {"classpath",    "n",         "y"},
-        {"clear",        "y",         "n"},
-        {"connectors",   "y",         "y"},
-        {"cont",         "n",         "n"},
-        {"disablegc",    "n",         "n"},
-        {"down",         "n",         "y"},
-        {"dump",         "n",         "y"},
-        {"enablegc",     "n",         "n"},
-        {"eval",         "n",         "y"},
-        {"exclude",      "y",         "n"},
-        {"exit",         "y",         "y"},
-        {"extension",    "n",         "y"},
-        {"fields",       "n",         "y"},
-        {"gc",           "n",         "n"},
-        {"help",         "y",         "y"},
-        {"ignore",       "y",         "n"},
-        {"interrupt",    "n",         "n"},
-        {"kill",         "n",         "n"},
-        {"lines",        "n",         "y"},
-        {"list",         "n",         "y"},
-        {"load",         "n",         "y"},
-        {"locals",       "n",         "y"},
-        {"lock",         "n",         "n"},
-        {"memory",       "n",         "y"},
-        {"methods",      "n",         "y"},
-        {"monitor",      "n",         "n"},
-        {"next",         "n",         "n"},
-        {"pop",          "n",         "n"},
-        {"print",        "n",         "y"},
-        {"quit",         "y",         "y"},
-        {"read",         "y",         "y"},
-        {"redefine",     "n",         "n"},
-        {"reenter",      "n",         "n"},
-        {"resume",       "n",         "n"},
-        {"run",          "y",         "n"},
-        {"save",         "n",         "n"},
-        {"set",          "n",         "n"},
-        {"sourcepath",   "y",         "y"},
-        {"step",         "n",         "n"},
-        {"stepi",        "n",         "n"},
-        {"stop",         "y",         "n"},
-        {"suspend",      "n",         "n"},
-        {"thread",       "n",         "y"},
-        {"threadgroup",  "n",         "y"},
-        {"threadgroups", "n",         "y"},
-        {"threadlocks",  "n",         "y"},
-        {"threads",      "n",         "y"},
-        {"trace",        "n",         "n"},
-        {"unmonitor",    "n",         "n"},
-        {"untrace",      "n",         "n"},
-        {"unwatch",      "y",         "n"},
-        {"up",           "n",         "y"},
-        {"use",          "y",         "y"},
-        {"version",      "y",         "y"},
-        {"watch",        "y",         "n"},
-        {"where",        "n",         "y"},
-        {"wherei",       "n",         "y"},
-    };
-
-    /*
-     * Look up the command string in commandList.
-     * If found, return the index.
-     * If not found, return index < 0
-     */
-    private int isCommand(String key) {
-        //Reference: binarySearch() in java/util/Arrays.java
-        //           Adapted for use with String[][0].
-        int low = 0;
-        int high = commandList.length - 1;
-        while (low <= high) {
-            int mid = (low + high) >>> 1;
-            String midVal = commandList[mid][0];
-            int compare = midVal.compareTo(key);
-            if (compare < 0) {
-                low = mid + 1;
-            } else if (compare > 0) {
-                high = mid - 1;
-            }
-            else {
-                return mid; // key found
-        }
-        }
-        return -(low + 1);  // key not found.
-    };
-
-    /*
-     * Return true if the command is OK when disconnected.
-     */
-    private boolean isDisconnectCmd(int ii) {
-        if (ii < 0 || ii >= commandList.length) {
-            return false;
-        }
-        return (commandList[ii][1].equals("y"));
-    }
-
-    /*
-     * Return true if the command is OK when readonly.
-     */
-    private boolean isReadOnlyCmd(int ii) {
-        if (ii < 0 || ii >= commandList.length) {
-            return false;
-        }
-        return (commandList[ii][2].equals("y"));
-    };
-
-
-    void executeCommand(StringTokenizer t) {
-        String cmd = t.nextToken().toLowerCase();
-        // Normally, prompt for the next command after this one is done
-        boolean showPrompt = true;
-
-
-        /*
-         * Anything starting with # is discarded as a no-op or 'comment'.
-         */
-        if (!cmd.startsWith("#")) {
-            /*
-             * Next check for an integer repetition prefix.  If found,
-             * recursively execute cmd that number of times.
-             */
-            if (Character.isDigit(cmd.charAt(0)) && t.hasMoreTokens()) {
-                try {
-                    int repeat = Integer.parseInt(cmd);
-                    String subcom = t.nextToken("");
-                    while (repeat-- > 0) {
-                        executeCommand(new StringTokenizer(subcom));
-                        showPrompt = false; // Bypass the printPrompt() below.
-                    }
-                } catch (NumberFormatException exc) {
-                    MessageOutput.println("Unrecognized command.  Try help...", cmd);
-                }
-            } else {
-                int commandNumber = isCommand(cmd);
-                /*
-                 * Check for an unknown command
-                 */
-                if (commandNumber < 0) {
-                    MessageOutput.println("Unrecognized command.  Try help...", cmd);
-                } else if (!Env.connection().isOpen() && !isDisconnectCmd(commandNumber)) {
-                    MessageOutput.println("Command not valid until the VM is started with the run command",
-                                          cmd);
-                } else if (Env.connection().isOpen() && !Env.vm().canBeModified() &&
-                           !isReadOnlyCmd(commandNumber)) {
-                    MessageOutput.println("Command is not supported on a read-only VM connection",
-                                          cmd);
-                } else {
-
-                    Commands evaluator = new Commands();
-                    try {
-                        if (cmd.equals("print")) {
-                            evaluator.commandPrint(t, false);
-                            showPrompt = false;        // asynchronous command
-                        } else if (cmd.equals("eval")) {
-                            evaluator.commandPrint(t, false);
-                            showPrompt = false;        // asynchronous command
-                        } else if (cmd.equals("set")) {
-                            evaluator.commandSet(t);
-                            showPrompt = false;        // asynchronous command
-                        } else if (cmd.equals("dump")) {
-                            evaluator.commandPrint(t, true);
-                            showPrompt = false;        // asynchronous command
-                        } else if (cmd.equals("locals")) {
-                            evaluator.commandLocals();
-                        } else if (cmd.equals("classes")) {
-                            evaluator.commandClasses();
-                        } else if (cmd.equals("class")) {
-                            evaluator.commandClass(t);
-                        } else if (cmd.equals("connectors")) {
-                            evaluator.commandConnectors(Bootstrap.virtualMachineManager());
-                        } else if (cmd.equals("methods")) {
-                            evaluator.commandMethods(t);
-                        } else if (cmd.equals("fields")) {
-                            evaluator.commandFields(t);
-                        } else if (cmd.equals("threads")) {
-                            evaluator.commandThreads(t);
-                        } else if (cmd.equals("thread")) {
-                            evaluator.commandThread(t);
-                        } else if (cmd.equals("suspend")) {
-                            evaluator.commandSuspend(t);
-                        } else if (cmd.equals("resume")) {
-                            evaluator.commandResume(t);
-                        } else if (cmd.equals("cont")) {
-                            evaluator.commandCont();
-                        } else if (cmd.equals("threadgroups")) {
-                            evaluator.commandThreadGroups();
-                        } else if (cmd.equals("threadgroup")) {
-                            evaluator.commandThreadGroup(t);
-                        } else if (cmd.equals("catch")) {
-                            evaluator.commandCatchException(t);
-                        } else if (cmd.equals("ignore")) {
-                            evaluator.commandIgnoreException(t);
-                        } else if (cmd.equals("step")) {
-                            evaluator.commandStep(t);
-                        } else if (cmd.equals("stepi")) {
-                            evaluator.commandStepi();
-                        } else if (cmd.equals("next")) {
-                            evaluator.commandNext();
-                        } else if (cmd.equals("kill")) {
-                            evaluator.commandKill(t);
-                        } else if (cmd.equals("interrupt")) {
-                            evaluator.commandInterrupt(t);
-                        } else if (cmd.equals("trace")) {
-                            evaluator.commandTrace(t);
-                        } else if (cmd.equals("untrace")) {
-                            evaluator.commandUntrace(t);
-                        } else if (cmd.equals("where")) {
-                            evaluator.commandWhere(t, false);
-                        } else if (cmd.equals("wherei")) {
-                            evaluator.commandWhere(t, true);
-                        } else if (cmd.equals("up")) {
-                            evaluator.commandUp(t);
-                        } else if (cmd.equals("down")) {
-                            evaluator.commandDown(t);
-                        } else if (cmd.equals("load")) {
-                            evaluator.commandLoad(t);
-                        } else if (cmd.equals("run")) {
-                            evaluator.commandRun(t);
-                            /*
-                             * Fire up an event handler, if the connection was just
-                             * opened. Since this was done from the run command
-                             * we don't stop the VM on its VM start event (so
-                             * arg 2 is false).
-                             */
-                            if ((handler == null) && Env.connection().isOpen()) {
-                                handler = new EventHandler(this, false);
-                            }
-                        } else if (cmd.equals("memory")) {
-                            evaluator.commandMemory();
-                        } else if (cmd.equals("gc")) {
-                            evaluator.commandGC();
-                        } else if (cmd.equals("stop")) {
-                            evaluator.commandStop(t);
-                        } else if (cmd.equals("clear")) {
-                            evaluator.commandClear(t);
-                        } else if (cmd.equals("watch")) {
-                            evaluator.commandWatch(t);
-                        } else if (cmd.equals("unwatch")) {
-                            evaluator.commandUnwatch(t);
-                        } else if (cmd.equals("list")) {
-                            evaluator.commandList(t);
-                        } else if (cmd.equals("lines")) { // Undocumented command: useful for testing.
-                            evaluator.commandLines(t);
-                        } else if (cmd.equals("classpath")) {
-                            evaluator.commandClasspath(t);
-                        } else if (cmd.equals("use") || cmd.equals("sourcepath")) {
-                            evaluator.commandUse(t);
-                        } else if (cmd.equals("monitor")) {
-                            monitorCommand(t);
-                        } else if (cmd.equals("unmonitor")) {
-                            unmonitorCommand(t);
-                        } else if (cmd.equals("lock")) {
-                            evaluator.commandLock(t);
-                            showPrompt = false;        // asynchronous command
-                        } else if (cmd.equals("threadlocks")) {
-                            evaluator.commandThreadlocks(t);
-                        } else if (cmd.equals("disablegc")) {
-                            evaluator.commandDisableGC(t);
-                            showPrompt = false;        // asynchronous command
-                        } else if (cmd.equals("enablegc")) {
-                            evaluator.commandEnableGC(t);
-                            showPrompt = false;        // asynchronous command
-                        } else if (cmd.equals("save")) { // Undocumented command: useful for testing.
-                            evaluator.commandSave(t);
-                            showPrompt = false;        // asynchronous command
-                        } else if (cmd.equals("bytecodes")) { // Undocumented command: useful for testing.
-                            evaluator.commandBytecodes(t);
-                        } else if (cmd.equals("redefine")) {
-                            evaluator.commandRedefine(t);
-                        } else if (cmd.equals("pop")) {
-                            evaluator.commandPopFrames(t, false);
-                        } else if (cmd.equals("reenter")) {
-                            evaluator.commandPopFrames(t, true);
-                        } else if (cmd.equals("extension")) {
-                            evaluator.commandExtension(t);
-                        } else if (cmd.equals("exclude")) {
-                            evaluator.commandExclude(t);
-                        } else if (cmd.equals("read")) {
-                            readCommand(t);
-                        } else if (cmd.equals("help") || cmd.equals("?")) {
-                            help();
-                        } else if (cmd.equals("version")) {
-                            evaluator.commandVersion(progname,
-                                                     Bootstrap.virtualMachineManager());
-                        } else if (cmd.equals("quit") || cmd.equals("exit")) {
-                            if (handler != null) {
-                                handler.shutdown();
-                            }
-                            Env.shutdown();
-                        } else {
-                            MessageOutput.println("Unrecognized command.  Try help...", cmd);
-                        }
-                    } catch (VMCannotBeModifiedException rovm) {
-                        MessageOutput.println("Command is not supported on a read-only VM connection", cmd);
-                    } catch (UnsupportedOperationException uoe) {
-                        MessageOutput.println("Command is not supported on the target VM", cmd);
-                    } catch (VMNotConnectedException vmnse) {
-                        MessageOutput.println("Command not valid until the VM is started with the run command",
-                                              cmd);
-                    } catch (Exception e) {
-                        MessageOutput.printException("Internal exception:", e);
-                    }
-                }
-            }
-        }
-        if (showPrompt) {
-            MessageOutput.printPrompt();
-        }
-    }
-
-    /*
-     * Maintain a list of commands to execute each time the VM is suspended.
-     */
-    void monitorCommand(StringTokenizer t) {
-        if (t.hasMoreTokens()) {
-            ++monitorCount;
-            monitorCommands.add(monitorCount + ": " + t.nextToken(""));
-        } else {
-            for (String cmd : monitorCommands) {
-                MessageOutput.printDirectln(cmd);// Special case: use printDirectln()
-            }
-        }
-    }
-
-    void unmonitorCommand(StringTokenizer t) {
-        if (t.hasMoreTokens()) {
-            String monTok = t.nextToken();
-            int monNum;
-            try {
-                monNum = Integer.parseInt(monTok);
-            } catch (NumberFormatException exc) {
-                MessageOutput.println("Not a monitor number:", monTok);
-                return;
-            }
-            String monStr = monTok + ":";
-            for (String cmd : monitorCommands) {
-                StringTokenizer ct = new StringTokenizer(cmd);
-                if (ct.nextToken().equals(monStr)) {
-                    monitorCommands.remove(cmd);
-                    MessageOutput.println("Unmonitoring", cmd);
-                    return;
-                }
-            }
-            MessageOutput.println("No monitor numbered:", monTok);
-        } else {
-            MessageOutput.println("Usage: unmonitor <monitor#>");
-        }
-    }
-
-
-    void readCommand(StringTokenizer t) {
-        if (t.hasMoreTokens()) {
-            String cmdfname = t.nextToken();
-            if (!readCommandFile(new File(cmdfname))) {
-                MessageOutput.println("Could not open:", cmdfname);
-            }
-        } else {
-            MessageOutput.println("Usage: read <command-filename>");
-        }
-    }
-
-    /**
-     * Read and execute a command file.  Return true if the file was read
-     * else false;
-     */
-    boolean readCommandFile(File f) {
-        BufferedReader inFile = null;
-        try {
-            if (f.canRead()) {
-                // Process initial commands.
-                MessageOutput.println("*** Reading commands from", f.getPath());
-                inFile = new BufferedReader(new FileReader(f));
-                String ln;
-                while ((ln = inFile.readLine()) != null) {
-                    StringTokenizer t = new StringTokenizer(ln);
-                    if (t.hasMoreTokens()) {
-                        executeCommand(t);
-                    }
-                }
-            }
-        } catch (IOException e) {
-        } finally {
-            if (inFile != null) {
-                try {
-                    inFile.close();
-                } catch (Exception exc) {
-                }
-            }
-        }
-        return inFile != null;
-    }
-
-    /**
-     * Try to read commands from dir/fname, unless
-     * the canonical path passed in is the same as that
-     * for dir/fname.
-     * Return null if that file doesn't exist,
-     * else return the canonical path of that file.
-     */
-    String readStartupCommandFile(String dir, String fname, String canonPath) {
-        File dotInitFile = new File(dir, fname);
-        if (!dotInitFile.exists()) {
-            return null;
-        }
-
-        String myCanonFile;
-        try {
-            myCanonFile = dotInitFile.getCanonicalPath();
-        } catch (IOException ee) {
-            MessageOutput.println("Could not open:", dotInitFile.getPath());
-            return null;
-        }
-        if (canonPath == null || !canonPath.equals(myCanonFile)) {
-            if (!readCommandFile(dotInitFile)) {
-                MessageOutput.println("Could not open:", dotInitFile.getPath());
-            }
-        }
-        return myCanonFile;
-    }
-
-
-    public TTY() throws Exception {
-
-        MessageOutput.println("Initializing progname", progname);
-
-        if (Env.connection().isOpen() && Env.vm().canBeModified()) {
-            /*
-             * Connection opened on startup. Start event handler
-             * immediately, telling it (through arg 2) to stop on the
-             * VM start event.
-             */
-            this.handler = new EventHandler(this, true);
-        }
-        try {
-            BufferedReader in =
-                    new BufferedReader(new InputStreamReader(System.in));
-
-            String lastLine = null;
-
-            Thread.currentThread().setPriority(Thread.NORM_PRIORITY);
-
-            /*
-             * Read start up files.  This mimics the behavior
-             * of gdb which will read both ~/.gdbinit and then
-             * ./.gdbinit if they exist.  We have the twist that
-             * we allow two different names, so we do this:
-             *  if ~/jdb.ini exists,
-             *      read it
-             *  else if ~/.jdbrc exists,
-             *      read it
-             *
-             *  if ./jdb.ini exists,
-             *      if it hasn't been read, read it
-             *      It could have been read above because ~ == .
-             *      or because of symlinks, ...
-             *  else if ./jdbrx exists
-             *      if it hasn't been read, read it
-             */
-            {
-                String userHome = System.getProperty("user.home");
-                String canonPath;
-
-                if ((canonPath = readStartupCommandFile(userHome, "jdb.ini", null)) == null) {
-                    // Doesn't exist, try alternate spelling
-                    canonPath = readStartupCommandFile(userHome, ".jdbrc", null);
-                }
-
-                String userDir = System.getProperty("user.dir");
-                if (readStartupCommandFile(userDir, "jdb.ini", canonPath) == null) {
-                    // Doesn't exist, try alternate spelling
-                    readStartupCommandFile(userDir, ".jdbrc", canonPath);
-                }
-            }
-
-            // Process interactive commands.
-            MessageOutput.printPrompt();
-            while (true) {
-                String ln = in.readLine();
-                if (ln == null) {
-                    MessageOutput.println("Input stream closed.");
-                    ln = "quit";
-                }
-
-                if (ln.startsWith("!!") && lastLine != null) {
-                    ln = lastLine + ln.substring(2);
-                    MessageOutput.printDirectln(ln);// Special case: use printDirectln()
-                }
-
-                StringTokenizer t = new StringTokenizer(ln);
-                if (t.hasMoreTokens()) {
-                    lastLine = ln;
-                    executeCommand(t);
-                } else {
-                    MessageOutput.printPrompt();
-                }
-            }
-        } catch (VMDisconnectedException e) {
-            handler.handleDisconnectedException();
-        }
-    }
-
-    private static void usage() {
-        MessageOutput.println("zz usage text", new Object [] {progname,
-                                                     File.pathSeparator});
-        System.exit(1);
-    }
-
-    static void usageError(String messageKey) {
-        MessageOutput.println(messageKey);
-        MessageOutput.println();
-        usage();
-    }
-
-    static void usageError(String messageKey, String argument) {
-        MessageOutput.println(messageKey, argument);
-        MessageOutput.println();
-        usage();
-    }
-
-    private static boolean supportsSharedMemory() {
-        for (Connector connector :
-                 Bootstrap.virtualMachineManager().allConnectors()) {
-            if (connector.transport() == null) {
-                continue;
-            }
-            if ("dt_shmem".equals(connector.transport().name())) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    private static String addressToSocketArgs(String address) {
-        int index = address.indexOf(':');
-        if (index != -1) {
-            String hostString = address.substring(0, index);
-            String portString = address.substring(index + 1);
-            return "hostname=" + hostString + ",port=" + portString;
-        } else {
-            return "port=" + address;
-        }
-    }
-
-    private static boolean hasWhitespace(String string) {
-        int length = string.length();
-        for (int i = 0; i < length; i++) {
-            if (Character.isWhitespace(string.charAt(i))) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    private static String addArgument(String string, String argument) {
-        if (hasWhitespace(argument) || argument.indexOf(',') != -1) {
-            // Quotes were stripped out for this argument, add 'em back.
-            StringBuffer buffer = new StringBuffer(string);
-            buffer.append('"');
-            for (int i = 0; i < argument.length(); i++) {
-                char c = argument.charAt(i);
-                if (c == '"') {
-                    buffer.append('\\');
-                }
-                buffer.append(c);
-            }
-            buffer.append("\" ");
-            return buffer.toString();
-        } else {
-            return string + argument + ' ';
-        }
-    }
-
-    public static void main(String argv[]) throws MissingResourceException {
-        String cmdLine = "";
-        String javaArgs = "";
-        int traceFlags = VirtualMachine.TRACE_NONE;
-        boolean launchImmediately = false;
-        String connectSpec = null;
-
-        MessageOutput.textResources = ResourceBundle.getBundle
-            ("com.sun.tools.example.debug.tty.TTYResources",
-             Locale.getDefault());
-
-        for (int i = 0; i < argv.length; i++) {
-            String token = argv[i];
-            if (token.equals("-dbgtrace")) {
-                if ((i == argv.length - 1) ||
-                    ! Character.isDigit(argv[i+1].charAt(0))) {
-                    traceFlags = VirtualMachine.TRACE_ALL;
-                } else {
-                    String flagStr = "";
-                    try {
-                        flagStr = argv[++i];
-                        traceFlags = Integer.decode(flagStr).intValue();
-                    } catch (NumberFormatException nfe) {
-                        usageError("dbgtrace flag value must be an integer:",
-                                   flagStr);
-                        return;
-                    }
-                }
-            } else if (token.equals("-X")) {
-                usageError("Use java minus X to see");
-                return;
-            } else if (
-                   // Standard VM options passed on
-                   token.equals("-v") || token.startsWith("-v:") ||  // -v[:...]
-                   token.startsWith("-verbose") ||                  // -verbose[:...]
-                   token.startsWith("-D") ||
-                   // -classpath handled below
-                   // NonStandard options passed on
-                   token.startsWith("-X") ||
-                   // Old-style options (These should remain in place as long as
-                   //  the standard VM accepts them)
-                   token.equals("-noasyncgc") || token.equals("-prof") ||
-                   token.equals("-verify") || token.equals("-noverify") ||
-                   token.equals("-verifyremote") ||
-                   token.equals("-verbosegc") ||
-                   token.startsWith("-ms") || token.startsWith("-mx") ||
-                   token.startsWith("-ss") || token.startsWith("-oss") ) {
-
-                javaArgs = addArgument(javaArgs, token);
-            } else if (token.equals("-tclassic")) {
-                usageError("Classic VM no longer supported.");
-                return;
-            } else if (token.equals("-tclient")) {
-                // -client must be the first one
-                javaArgs = "-client " + javaArgs;
-            } else if (token.equals("-tserver")) {
-                // -server must be the first one
-                javaArgs = "-server " + javaArgs;
-            } else if (token.equals("-sourcepath")) {
-                if (i == (argv.length - 1)) {
-                    usageError("No sourcepath specified.");
-                    return;
-                }
-                Env.setSourcePath(argv[++i]);
-            } else if (token.equals("-classpath")) {
-                if (i == (argv.length - 1)) {
-                    usageError("No classpath specified.");
-                    return;
-                }
-                javaArgs = addArgument(javaArgs, token);
-                javaArgs = addArgument(javaArgs, argv[++i]);
-            } else if (token.equals("-attach")) {
-                if (connectSpec != null) {
-                    usageError("cannot redefine existing connection", token);
-                    return;
-                }
-                if (i == (argv.length - 1)) {
-                    usageError("No attach address specified.");
-                    return;
-                }
-                String address = argv[++i];
-
-                /*
-                 * -attach is shorthand for one of the reference implementation's
-                 * attaching connectors. Use the shared memory attach if it's
-                 * available; otherwise, use sockets. Build a connect
-                 * specification string based on this decision.
-                 */
-                if (supportsSharedMemory()) {
-                    connectSpec = "com.sun.jdi.SharedMemoryAttach:name=" +
-                                   address;
-                } else {
-                    String suboptions = addressToSocketArgs(address);
-                    connectSpec = "com.sun.jdi.SocketAttach:" + suboptions;
-                }
-            } else if (token.equals("-listen") || token.equals("-listenany")) {
-                if (connectSpec != null) {
-                    usageError("cannot redefine existing connection", token);
-                    return;
-                }
-                String address = null;
-                if (token.equals("-listen")) {
-                    if (i == (argv.length - 1)) {
-                        usageError("No attach address specified.");
-                        return;
-                    }
-                    address = argv[++i];
-                }
-
-                /*
-                 * -listen[any] is shorthand for one of the reference implementation's
-                 * listening connectors. Use the shared memory listen if it's
-                 * available; otherwise, use sockets. Build a connect
-                 * specification string based on this decision.
-                 */
-                if (supportsSharedMemory()) {
-                    connectSpec = "com.sun.jdi.SharedMemoryListen:";
-                    if (address != null) {
-                        connectSpec += ("name=" + address);
-                    }
-                } else {
-                    connectSpec = "com.sun.jdi.SocketListen:";
-                    if (address != null) {
-                        connectSpec += addressToSocketArgs(address);
-                    }
-                }
-            } else if (token.equals("-launch")) {
-                launchImmediately = true;
-            } else if (token.equals("-listconnectors")) {
-                Commands evaluator = new Commands();
-                evaluator.commandConnectors(Bootstrap.virtualMachineManager());
-                return;
-            } else if (token.equals("-connect")) {
-                /*
-                 * -connect allows the user to pick the connector
-                 * used in bringing up the target VM. This allows
-                 * use of connectors other than those in the reference
-                 * implementation.
-                 */
-                if (connectSpec != null) {
-                    usageError("cannot redefine existing connection", token);
-                    return;
-                }
-                if (i == (argv.length - 1)) {
-                    usageError("No connect specification.");
-                    return;
-                }
-                connectSpec = argv[++i];
-            } else if (token.equals("-help")) {
-                usage();
-            } else if (token.equals("-version")) {
-                Commands evaluator = new Commands();
-                evaluator.commandVersion(progname,
-                                         Bootstrap.virtualMachineManager());
-                System.exit(0);
-            } else if (token.startsWith("-")) {
-                usageError("invalid option", token);
-                return;
-            } else {
-                // Everything from here is part of the command line
-                cmdLine = addArgument("", token);
-                for (i++; i < argv.length; i++) {
-                    cmdLine = addArgument(cmdLine, argv[i]);
-                }
-                break;
-            }
-        }
-
-        /*
-         * Unless otherwise specified, set the default connect spec.
-         */
-
-        /*
-         * Here are examples of jdb command lines and how the options
-         * are interpreted as arguments to the program being debugged.
-         * arg1       arg2
-         * ----       ----
-         * jdb hello a b       a          b
-         * jdb hello "a b"     a b
-         * jdb hello a,b       a,b
-         * jdb hello a, b      a,         b
-         * jdb hello "a, b"    a, b
-         * jdb -connect "com.sun.jdi.CommandLineLaunch:main=hello  a,b"   illegal
-         * jdb -connect  com.sun.jdi.CommandLineLaunch:main=hello "a,b"   illegal
-         * jdb -connect 'com.sun.jdi.CommandLineLaunch:main=hello "a,b"'  arg1 = a,b
-         * jdb -connect 'com.sun.jdi.CommandLineLaunch:main=hello "a b"'  arg1 = a b
-         * jdb -connect 'com.sun.jdi.CommandLineLaunch:main=hello  a b'   arg1 = a  arg2 = b
-         * jdb -connect 'com.sun.jdi.CommandLineLaunch:main=hello "a," b' arg1 = a, arg2 = b
-         */
-        if (connectSpec == null) {
-            connectSpec = "com.sun.jdi.CommandLineLaunch:";
-        } else if (!connectSpec.endsWith(",") && !connectSpec.endsWith(":")) {
-            connectSpec += ","; // (Bug ID 4285874)
-        }
-
-        cmdLine = cmdLine.trim();
-        javaArgs = javaArgs.trim();
-
-        if (cmdLine.length() > 0) {
-            if (!connectSpec.startsWith("com.sun.jdi.CommandLineLaunch:")) {
-                usageError("Cannot specify command line with connector:",
-                           connectSpec);
-                return;
-            }
-            connectSpec += "main=" + cmdLine + ",";
-        }
-
-        if (javaArgs.length() > 0) {
-            if (!connectSpec.startsWith("com.sun.jdi.CommandLineLaunch:")) {
-                usageError("Cannot specify target vm arguments with connector:",
-                           connectSpec);
-                return;
-            }
-            connectSpec += "options=" + javaArgs + ",";
-        }
-
-        try {
-            if (! connectSpec.endsWith(",")) {
-                connectSpec += ","; // (Bug ID 4285874)
-            }
-            Env.init(connectSpec, launchImmediately, traceFlags);
-            new TTY();
-        } catch(Exception e) {
-            MessageOutput.printException("Internal exception:", e);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/tty/TTYResources.java b/ojluni/src/main/java/com/sun/tools/example/debug/tty/TTYResources.java
deleted file mode 100755
index 2c844c2..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/tty/TTYResources.java
+++ /dev/null
@@ -1,465 +0,0 @@
-/*
- * Copyright (c) 2001, 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
- * 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.tty;
-
-/**
- * <p> This class represents the <code>ResourceBundle</code>
- * for the following package(s):
- *
- * <ol>
- * <li> com.sun.tools.example.debug.tty
- * </ol>
- *
- */
-public class TTYResources extends java.util.ListResourceBundle {
-
-
-    /**
-     * Returns the contents of this <code>ResourceBundle</code>.
-     *
-     * <p>
-     *
-     * @return the contents of this <code>ResourceBundle</code>.
-     */
-    @Override
-    public Object[][] getContents() {
-        Object[][] temp = new Object[][] {
-        // NOTE: The value strings in this file containing "{0}" are
-        //       processed by the java.text.MessageFormat class.  Any
-        //       single quotes appearing in these strings need to be
-        //       doubled up.
-        //
-        // LOCALIZE THIS
-        {"** classes list **", "** classes list **\n{0}"},
-        {"** fields list **", "** fields list **\n{0}"},
-        {"** methods list **", "** methods list **\n{0}"},
-        {"*** Reading commands from", "*** Reading commands from {0}"},
-        {"All threads resumed.", "All threads resumed."},
-        {"All threads suspended.", "All threads suspended."},
-        {"Argument is not defined for connector:", "Argument {0} is not defined for connector: {1}"},
-        {"Arguments match no method", "Arguments match no method"},
-        {"Array:", "Array: {0}"},
-        {"Array element is not a method", "Array element is not a method"},
-        {"Array index must be a integer type", "Array index must be a integer type"},
-        {"base directory:", "base directory: {0}"},
-        {"bootclasspath:", "bootclasspath: {0}"},
-        {"Breakpoint hit:", "Breakpoint hit: "},
-        {"breakpoint", "breakpoint {0}"},
-        {"Breakpoints set:", "Breakpoints set:"},
-        {"Breakpoints can be located only in classes.", "Breakpoints can be located only in classes.  {0} is an interface or array."},
-        {"Can only trace", "Can only trace 'methods' or 'method exit' or 'method exits'"},
-        {"cannot redefine existing connection", "{0} cannot redefine existing connection"},
-        {"Cannot assign to a method invocation", "Cannot assign to a method invocation"},
-        {"Cannot specify command line with connector:", "Cannot specify command line with connector: {0}"},
-        {"Cannot specify target vm arguments with connector:", "Cannot specify target VM arguments with connector: {0}"},
-        {"Class containing field must be specified.", "Class containing field must be specified."},
-        {"Class:", "Class: {0}"},
-        {"Classic VM no longer supported.", "Classic VM no longer supported."},
-        {"classpath:", "classpath: {0}"},
-        {"colon mark", ":"},
-        {"colon space", ": "},
-        {"Command is not supported on the target VM", "Command ''{0}'' is not supported on the target VM"},
-        {"Command is not supported on a read-only VM connection", "Command ''{0}'' is not supported on a read-only VM connection"},
-        {"Command not valid until the VM is started with the run command", "Command ''{0}'' is not valid until the VM is started with the ''run'' command"},
-        {"Condition must be boolean", "Condition must be boolean"},
-        {"Connector and Transport name", "  Connector: {0}  Transport: {1}"},
-        {"Connector argument nodefault", "    Argument: {0} (no default)"},
-        {"Connector argument default", "    Argument: {0} Default value: {1}"},
-        {"Connector description", "    description: {0}"},
-        {"Connector required argument nodefault", "    Required Argument: {0} (no default)"},
-        {"Connector required argument default", "    Required Argument: {0} Default value: {1}"},
-        {"Connectors available", "Available connectors are:"},
-        {"Constant is not a method", "Constant is not a method"},
-        {"Could not open:", "Could not open: {0}"},
-        {"Current method is native", "Current method is native"},
-        {"Current thread died. Execution continuing...", "Current thread {0} died. Execution continuing..."},
-        {"Current thread isnt suspended.", "Current thread isn't suspended."},
-        {"Current thread not set.", "Current thread not set."},
-        {"dbgtrace flag value must be an integer:", "dbgtrace flag value must be an integer: {0}"},
-        {"Deferring.", "Deferring {0}.\nIt will be set after the class is loaded."},
-        {"End of stack.", "End of stack."},
-        {"Error popping frame", "Error popping frame - {0}"},
-        {"Error reading file", "Error reading ''{0}'' - {1}"},
-        {"Error redefining class to file", "Error redefining {0} to {1} - {2}"},
-        {"exceptionSpec all", "all {0}"},
-        {"exceptionSpec caught", "caught {0}"},
-        {"exceptionSpec uncaught", "uncaught {0}"},
-        {"Exception in expression:", "Exception in expression: {0}"},
-        {"Exception occurred caught", "Exception occurred: {0} (to be caught at: {1})"},
-        {"Exception occurred uncaught", "Exception occurred: {0} (uncaught)"},
-        {"Exceptions caught:", "Break when these exceptions occur:"},
-        {"expr is null", "{0} = null"},
-        {"expr is value", "{0} = {1}"},
-        {"expr is value <collected>", "  {0} = {1} <collected>"},
-        {"Expression cannot be void", "Expression cannot be void"},
-        {"Expression must evaluate to an object", "Expression must evaluate to an object"},
-        {"extends:", "extends: {0}"},
-        {"Failed reading output", "Failed reading output of child java interpreter."},
-        {"Fatal error", "Fatal error:"},
-        {"Field access encountered before after", "Field ({0}) is {1}, will be {2}: "},
-        {"Field access encountered", "Field ({0}) access encountered: "},
-        {"Field to unwatch not specified", "Field to unwatch not specified."},
-        {"Field to watch not specified", "Field to watch not specified."},
-        {"GC Disabled for", "GC Disabled for {0}:"},
-        {"GC Enabled for", "GC Enabled for {0}:"},
-        {"grouping begin character", "{"},
-        {"grouping end character", "}"},
-        {"Illegal Argument Exception", "Illegal Argument Exception"},
-        {"Illegal connector argument", "Illegal connector argument: {0}"},
-        {"implementor:", "implementor: {0}"},
-        {"implements:", "implements: {0}"},
-        {"Initializing progname", "Initializing {0} ..."},
-        {"Input stream closed.", "Input stream closed."},
-        {"Interface:", "Interface: {0}"},
-        {"Internal debugger error.", "Internal debugger error."},
-        {"Internal error: null ThreadInfo created", "Internal error: null ThreadInfo created"},
-        {"Internal error; unable to set", "Internal error; unable to set {0}"},
-        {"Internal exception during operation:", "Internal exception during operation:\n    {0}"},
-        {"Internal exception:", "Internal exception:"},
-        {"Invalid argument type name", "Invalid argument type name"},
-        {"Invalid assignment syntax", "Invalid assignment syntax"},
-        {"Invalid command syntax", "Invalid command syntax"},
-        {"Invalid connect type", "Invalid connect type"},
-        {"Invalid consecutive invocations", "Invalid consecutive invocations"},
-        {"Invalid exception object", "Invalid exception object"},
-        {"Invalid method specification:", "Invalid method specification: {0}"},
-        {"Invalid option on class command", "Invalid option on class command"},
-        {"invalid option", "invalid option: {0}"},
-        {"Invalid thread status.", "Invalid thread status."},
-        {"Invalid transport name:", "Invalid transport name: {0}"},
-        {"I/O exception occurred:", "I/O Exception occurred: {0}"},
-        {"is an ambiguous method name in", "\"{0}\" is an ambiguous method name in \"{1}\""},
-        {"is an invalid line number for",  "{0,number,integer} is an invalid line number for {1}"},
-        {"is not a valid class name", "\"{0}\" is not a valid class name."},
-        {"is not a valid field name", "\"{0}\" is not a valid field name."},
-        {"is not a valid id or class name", "\"{0}\" is not a valid id or class name."},
-        {"is not a valid line number or method name for", "\"{0}\" is not a valid line number or method name for class \"{1}\""},
-        {"is not a valid method name", "\"{0}\" is not a valid method name."},
-        {"is not a valid thread id", "\"{0}\" is not a valid thread id."},
-        {"is not a valid threadgroup name", "\"{0}\" is not a valid threadgroup name."},
-        {"jdb prompt with no current thread", "> "},
-        {"jdb prompt thread name and current stack frame", "{0}[{1,number,integer}] "},
-        {"killed", "{0} killed"},
-        {"killing thread:", "killing thread: {0}"},
-        {"Line number information not available for", "Source line numbers not available for this location."},
-        {"line number", ":{0,number,integer}"},
-        {"list field typename and name", "{0} {1}\n"},
-        {"list field typename and name inherited", "{0} {1} (inherited from {2})\n"},
-        {"list field typename and name hidden", "{0} {1} (hidden)\n"},
-        {"Listening at address:", "Listening at address: {0}"},
-        {"Local variable information not available.", "Local variable information not available.  Compile with -g to generate variable information"},
-        {"Local variables:", "Local variables:"},
-        {"<location unavailable>", "<location unavailable>"},
-        {"location", "\"thread={0}\", {1}"},
-        {"locationString", "{0}.{1}(), line={2,number,integer} bci={3,number,integer}"},
-        {"Main class and arguments must be specified", "Main class and arguments must be specified"},
-        {"Method arguments:", "Method arguments:"},
-        {"Method entered:", "Method entered: "},
-        {"Method exited:",  "Method exited"},
-        {"Method exitedValue:", "Method exited: return value = {0}, "},
-        {"Method is overloaded; specify arguments", "Method {0} is overloaded; specify arguments"},
-        {"minus version", "This is {0} version {1,number,integer}.{2,number,integer} (Java SE version {3})"},
-        {"Monitor information for thread", "Monitor information for thread {0}:"},
-        {"Monitor information for expr", "Monitor information for {0} ({1}):"},
-        {"More than one class named", "More than one class named: ''{0}''"},
-        {"native method", "native method"},
-        {"nested:", "nested: {0}"},
-        {"No attach address specified.", "No attach address specified."},
-        {"No breakpoints set.", "No breakpoints set."},
-        {"No class named", "No class named ''{0}''"},
-        {"No class specified.", "No class specified."},
-        {"No classpath specified.", "No classpath specified."},
-        {"No code at line", "No code at line {0,number,integer} in {1}"},
-        {"No connect specification.", "No connect specification."},
-        {"No connector named:", "No connector named: {0}"},
-        {"No current thread", "No current thread"},
-        {"No default thread specified:", "No default thread specified: use the \"thread\" command first."},
-        {"No exception object specified.", "No exception object specified."},
-        {"No exceptions caught.", "No exceptions caught."},
-        {"No expression specified.", "No expression specified."},
-        {"No field in", "No field {0} in {1}"},
-        {"No frames on the current call stack", "No frames on the current call stack"},
-        {"No linenumber information for", "No linenumber information for {0}.  Try compiling with debugging on."},
-        {"No local variables", "No local variables"},
-        {"No method in", "No method {0} in {1}"},
-        {"No method specified.", "No method specified."},
-        {"No monitor numbered:", "No monitor numbered: {0}"},
-        {"No monitors owned", "  No monitors owned"},
-        {"No object specified.", "No object specified."},
-        {"No objects specified.", "No objects specified."},
-        {"No save index specified.", "No save index specified."},
-        {"No saved values", "No saved values"},
-        {"No source information available for:", "No source information available for: {0}"},
-        {"No sourcedebugextension specified", "No SourceDebugExtension specified"},
-        {"No sourcepath specified.", "No sourcepath specified."},
-        {"No thread specified.", "No thread specified."},
-        {"No VM connected", "No VM connected"},
-        {"No waiters", "  No waiters"},
-        {"not a class", "{0} is not a class"},
-        {"Not a monitor number:", "Not a monitor number: ''{0}''"},
-        {"not found (try the full name)", "{0} not found (try the full name)"},
-        {"Not found:", "Not found: {0}"},
-        {"not found", "{0} not found"},
-        {"Not owned", "  Not owned"},
-        {"Not waiting for a monitor", "  Not waiting for a monitor"},
-        {"Nothing suspended.", "Nothing suspended."},
-        {"object description and hex id", "({0}){1}"},
-        {"Operation is not supported on the target VM", "Operation is not supported on the target VM"},
-        {"operation not yet supported", "operation not yet supported"},
-        {"Owned by:", "  Owned by: {0}, entry count: {1,number,integer}"},
-        {"Owned monitor:", "  Owned monitor: {0}"},
-        {"Parse exception:", "Parse Exception: {0}"},
-        {"printbreakpointcommandusage", "Usage: {0} <class>:<line_number> or\n       {1} <class>.<method_name>[(argument_type,...)]"},
-        {"Removed:", "Removed: {0}"},
-        {"Requested stack frame is no longer active:", "Requested stack frame is no longer active: {0,number,integer}"},
-        {"run <args> command is valid only with launched VMs", "'run <args>' command is valid only with launched VMs"},
-        {"run", "run {0}"},
-        {"saved", "{0} saved"},
-        {"Set deferred", "Set deferred {0}"},
-        {"Set", "Set {0}"},
-        {"Source file not found:", "Source file not found: {0}"},
-        {"source line number and line", "{0,number,integer}    {1}"},
-        {"source line number current line and line", "{0,number,integer} => {1}"},
-        {"sourcedebugextension", "SourceDebugExtension -- {0}"},
-        {"Specify class and method", "Specify class and method"},
-        {"Specify classes to redefine", "Specify classes to redefine"},
-        {"Specify file name for class", "Specify file name for class {0}"},
-        {"stack frame dump with pc", "  [{0,number,integer}] {1}.{2} ({3}), pc = {4}"},
-        {"stack frame dump", "  [{0,number,integer}] {1}.{2} ({3})"},
-        {"Step completed:", "Step completed: "},
-        {"Stopping due to deferred breakpoint errors.", "Stopping due to deferred breakpoint errors.\n"},
-        {"subclass:", "subclass: {0}"},
-        {"subinterface:", "subinterface: {0}"},
-        {"tab", "\t{0}"},
-        {"Target VM failed to initialize.", "Target VM failed to initialize."},
-        {"The application exited", "The application exited"},
-        {"The application has been disconnected", "The application has been disconnected"},
-        {"The gc command is no longer necessary.", "The 'gc' command is no longer necessary.\n" +
-         "All objects are garbage collected as usual. Use 'enablegc' and 'disablegc'\n" +
-         "commands to control garbage collection of individual objects."},
-        {"The load command is no longer supported.", "The 'load' command is no longer supported."},
-        {"The memory command is no longer supported.", "The 'memory' command is no longer supported."},
-        {"The VM does not use paths", "The VM does not use paths"},
-        {"Thread is not running (no stack).", "Thread is not running (no stack)."},
-        {"Thread number not specified.", "Thread number not specified."},
-        {"Thread:", "{0}:"},
-        {"Thread Group:", "Group {0}:"},
-        {"Thread description name unknownStatus BP",  "  {0} {1} unknown (at breakpoint)"},
-        {"Thread description name unknownStatus",     "  {0} {1} unknown"},
-        {"Thread description name zombieStatus BP",   "  {0} {1} zombie (at breakpoint)"},
-        {"Thread description name zombieStatus",      "  {0} {1} zombie"},
-        {"Thread description name runningStatus BP",  "  {0} {1} running (at breakpoint)"},
-        {"Thread description name runningStatus",     "  {0} {1} running"},
-        {"Thread description name sleepingStatus BP", "  {0} {1} sleeping (at breakpoint)"},
-        {"Thread description name sleepingStatus",    "  {0} {1} sleeping"},
-        {"Thread description name waitingStatus BP",  "  {0} {1} waiting in a monitor (at breakpoint)"},
-        {"Thread description name waitingStatus",     "  {0} {1} waiting in a monitor"},
-        {"Thread description name condWaitstatus BP", "  {0} {1} cond. waiting (at breakpoint)"},
-        {"Thread description name condWaitstatus",    "  {0} {1} cond. waiting"},
-        {"Thread has been resumed", "Thread has been resumed"},
-        {"Thread not suspended", "Thread not suspended"},
-        {"thread group number description name", "{0,number,integer}. {1} {2}"},
-        {"Threadgroup name not specified.", "Threadgroup name not specified."},
-        {"Threads must be suspended", "Threads must be suspended"},
-        {"trace method exit in effect for", "trace method exit in effect for {0}"},
-        {"trace method exits in effect", "trace method exits in effect"},
-        {"trace methods in effect", "trace methods in effect"},
-        {"trace go method exit in effect for", "trace go method exit in effect for {0}"},
-        {"trace go method exits in effect", "trace go method exits in effect"},
-        {"trace go methods in effect", "trace go methods in effect"},
-        {"trace not in effect", "trace not in effect"},
-        {"Unable to attach to target VM.", "Unable to attach to target VM."},
-        {"Unable to display process output:", "Unable to display process output: {0}"},
-        {"Unable to launch target VM.", "Unable to launch target VM."},
-        {"Unable to set deferred", "Unable to set deferred {0} : {1}"},
-        {"Unable to set main class and arguments", "Unable to set main class and arguments"},
-        {"Unable to set", "Unable to set {0} : {1}"},
-        {"Unexpected event type", "Unexpected event type: {0}"},
-        {"unknown", "unknown"},
-        {"Unmonitoring", "Unmonitoring {0} "},
-        {"Unrecognized command.  Try help...", "Unrecognized command: ''{0}''.  Try help..."},
-        {"Usage: catch exception", "Usage: catch [uncaught|caught|all] <class id>|<class pattern>"},
-        {"Usage: ignore exception", "Usage: ignore [uncaught|caught|all] <class id>|<class pattern>"},
-        {"Usage: down [n frames]", "Usage: down [n frames]"},
-        {"Usage: kill <thread id> <throwable>", "Usage: kill <thread id> <throwable>"},
-        {"Usage: read <command-filename>", "Usage: read <command-filename>"},
-        {"Usage: unmonitor <monitor#>", "Usage: unmonitor <monitor#>"},
-        {"Usage: up [n frames]", "Usage: up [n frames]"},
-        {"Use java minus X to see", "Use 'java -X' to see the available non-standard options"},
-        {"Use stop at to set a breakpoint at a line number", "Use 'stop at' to set a breakpoint at a line number"},
-        {"VM already running. use cont to continue after events.", "VM already running. Use 'cont' to continue after events."},
-        {"VM Started:", "VM Started: "},
-        {"vmstartexception", "VM start exception: {0}"},
-        {"Waiting for monitor:", "   Waiting for monitor: {0}"},
-        {"Waiting thread:", " Waiting thread: {0}"},
-        {"watch accesses of", "watch accesses of {0}.{1}"},
-        {"watch modification of", "watch modification of {0}.{1}"},
-        {"zz help text",
-             "** command list **\n" +
-             "connectors                -- list available connectors and transports in this VM\n" +
-             "\n" +
-             "run [class [args]]        -- start execution of application's main class\n" +
-             "\n" +
-             "threads [threadgroup]     -- list threads\n" +
-             "thread <thread id>        -- set default thread\n" +
-             "suspend [thread id(s)]    -- suspend threads (default: all)\n" +
-             "resume [thread id(s)]     -- resume threads (default: all)\n" +
-             "where [<thread id> | all] -- dump a thread's stack\n" +
-             "wherei [<thread id> | all]-- dump a thread's stack, with pc info\n" +
-             "up [n frames]             -- move up a thread's stack\n" +
-             "down [n frames]           -- move down a thread's stack\n" +
-             "kill <thread id> <expr>   -- kill a thread with the given exception object\n" +
-             "interrupt <thread id>     -- interrupt a thread\n" +
-             "\n" +
-             "print <expr>              -- print value of expression\n" +
-             "dump <expr>               -- print all object information\n" +
-             "eval <expr>               -- evaluate expression (same as print)\n" +
-             "set <lvalue> = <expr>     -- assign new value to field/variable/array element\n" +
-             "locals                    -- print all local variables in current stack frame\n" +
-             "\n" +
-             "classes                   -- list currently known classes\n" +
-             "class <class id>          -- show details of named class\n" +
-             "methods <class id>        -- list a class's methods\n" +
-             "fields <class id>         -- list a class's fields\n" +
-             "\n" +
-             "threadgroups              -- list threadgroups\n" +
-             "threadgroup <name>        -- set current threadgroup\n" +
-             "\n" +
-             "stop in <class id>.<method>[(argument_type,...)]\n" +
-             "                          -- set a breakpoint in a method\n" +
-             "stop at <class id>:<line> -- set a breakpoint at a line\n" +
-             "clear <class id>.<method>[(argument_type,...)]\n" +
-             "                          -- clear a breakpoint in a method\n" +
-             "clear <class id>:<line>   -- clear a breakpoint at a line\n" +
-             "clear                     -- list breakpoints\n" +
-             "catch [uncaught|caught|all] <class id>|<class pattern>\n" +
-             "                          -- break when specified exception occurs\n" +
-             "ignore [uncaught|caught|all] <class id>|<class pattern>\n" +
-             "                          -- cancel 'catch' for the specified exception\n" +
-             "watch [access|all] <class id>.<field name>\n" +
-             "                          -- watch access/modifications to a field\n" +
-             "unwatch [access|all] <class id>.<field name>\n" +
-             "                          -- discontinue watching access/modifications to a field\n" +
-             "trace [go] methods [thread]\n" +
-             "                          -- trace method entries and exits.\n" +
-             "                          -- All threads are suspended unless 'go' is specified\n" +
-             "trace [go] method exit | exits [thread]\n" +
-             "                          -- trace the current method's exit, or all methods' exits\n" +
-             "                          -- All threads are suspended unless 'go' is specified\n" +
-             "untrace [methods]         -- stop tracing method entrys and/or exits\n" +
-             "step                      -- execute current line\n" +
-             "step up                   -- execute until the current method returns to its caller\n" +
-             "stepi                     -- execute current instruction\n" +
-             "next                      -- step one line (step OVER calls)\n" +
-             "cont                      -- continue execution from breakpoint\n" +
-             "\n" +
-             "list [line number|method] -- print source code\n" +
-             "use (or sourcepath) [source file path]\n" +
-             "                          -- display or change the source path\n" +
-             "exclude [<class pattern>, ... | \"none\"]\n" +
-             "                          -- do not report step or method events for specified classes\n" +
-             "classpath                 -- print classpath info from target VM\n" +
-             "\n" +
-             "monitor <command>         -- execute command each time the program stops\n" +
-             "monitor                   -- list monitors\n" +
-             "unmonitor <monitor#>      -- delete a monitor\n" +
-             "read <filename>           -- read and execute a command file\n" +
-             "\n" +
-             "lock <expr>               -- print lock info for an object\n" +
-             "threadlocks [thread id]   -- print lock info for a thread\n" +
-             "\n" +
-             "pop                       -- pop the stack through and including the current frame\n" +
-             "reenter                   -- same as pop, but current frame is reentered\n" +
-             "redefine <class id> <class file name>\n" +
-             "                          -- redefine the code for a class\n" +
-             "\n" +
-             "disablegc <expr>          -- prevent garbage collection of an object\n" +
-             "enablegc <expr>           -- permit garbage collection of an object\n" +
-             "\n" +
-             "!!                        -- repeat last command\n" +
-             "<n> <command>             -- repeat command n times\n" +
-             "# <command>               -- discard (no-op)\n" +
-             "help (or ?)               -- list commands\n" +
-             "version                   -- print version information\n" +
-             "exit (or quit)            -- exit debugger\n" +
-             "\n" +
-             "<class id>: a full class name with package qualifiers\n" +
-             "<class pattern>: a class name with a leading or trailing wildcard ('*')\n" +
-             "<thread id>: thread number as reported in the 'threads' command\n" +
-             "<expr>: a Java(TM) Programming Language expression.\n" +
-             "Most common syntax is supported.\n" +
-             "\n" +
-             "Startup commands can be placed in either \"jdb.ini\" or \".jdbrc\"\n" +
-             "in user.home or user.dir"},
-        {"zz usage text",
-             "Usage: {0} <options> <class> <arguments>\n" +
-             "\n" +
-             "where options include:\n" +
-             "    -help             print out this message and exit\n" +
-             "    -sourcepath <directories separated by \"{1}\">\n" +
-             "                      directories in which to look for source files\n" +
-             "    -attach <address>\n" +
-             "                      attach to a running VM at the specified address using standard connector\n" +
-             "    -listen <address>\n" +
-             "                      wait for a running VM to connect at the specified address using standard connector\n" +
-             "    -listenany\n" +
-             "                      wait for a running VM to connect at any available address using standard connector\n" +
-             "    -launch\n" +
-             "                      launch VM immediately instead of waiting for ''run'' command\n" +
-             "    -listconnectors   list the connectors available in this VM\n" +
-             "    -connect <connector-name>:<name1>=<value1>,...\n" +
-             "                      connect to target VM using named connector with listed argument values\n" +
-             "    -dbgtrace [flags] print info for debugging {0}\n" +
-             "    -tclient          run the application in the HotSpot(TM) Client Compiler\n" +
-             "    -tserver          run the application in the HotSpot(TM) Server Compiler\n" +
-             "\n" +
-             "options forwarded to debuggee process:\n" +
-             "    -v -verbose[:class|gc|jni]\n" +
-             "                      turn on verbose mode\n" +
-             "    -D<name>=<value>  set a system property\n" +
-             "    -classpath <directories separated by \"{1}\">\n" +
-             "                      list directories in which to look for classes\n" +
-             "    -X<option>        non-standard target VM option\n" +
-             "\n" +
-             "<class> is the name of the class to begin debugging\n" +
-             "<arguments> are the arguments passed to the main() method of <class>\n" +
-             "\n" +
-             "For command help type ''help'' at {0} prompt"},
-        // END OF MATERIAL TO LOCALIZE
-        };
-
-        return temp;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/tty/TTYResources_ja.java b/ojluni/src/main/java/com/sun/tools/example/debug/tty/TTYResources_ja.java
deleted file mode 100755
index 175092d..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/tty/TTYResources_ja.java
+++ /dev/null
@@ -1,336 +0,0 @@
-/*
- * Copyright (c) 2001, 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
- * 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.tty;
-
-/**
- * <p> This class represents the <code>ResourceBundle</code>
- * for the following package(s):
- *
- * <ol>
- * <li> com.sun.tools.example.debug.tty
- * </ol>
- *
- */
-public class TTYResources_ja extends java.util.ListResourceBundle {
-
-
-    /**
-     * Returns the contents of this <code>ResourceBundle</code>.
-     *
-     * <p>
-     *
-     * @return the contents of this <code>ResourceBundle</code>.
-     */
-    @Override
-    public Object[][] getContents() {
-        Object[][] temp = new Object[][] {
-        // NOTE: The value strings in this file containing "{0}" are
-        //       processed by the java.text.MessageFormat class.  Any
-        //       single quotes appearing in these strings need to be
-        //       doubled up.
-        //
-        // LOCALIZE THIS
-        {"** classes list **", "** \u30AF\u30E9\u30B9\u30FB\u30EA\u30B9\u30C8 **\n{0}"},
-        {"** fields list **", "** \u30D5\u30A3\u30FC\u30EB\u30C9\u30FB\u30EA\u30B9\u30C8 **\n{0}"},
-        {"** methods list **", "** \u30E1\u30BD\u30C3\u30C9\u30FB\u30EA\u30B9\u30C8 **\n{0}"},
-        {"*** Reading commands from", "*** {0}\u304B\u3089\u306E\u30B3\u30DE\u30F3\u30C9\u306E\u8AAD\u53D6\u308A"},
-        {"All threads resumed.", "\u3059\u3079\u3066\u306E\u30B9\u30EC\u30C3\u30C9\u304C\u518D\u958B\u3055\u308C\u307E\u3057\u305F\u3002"},
-        {"All threads suspended.", "\u3059\u3079\u3066\u306E\u30B9\u30EC\u30C3\u30C9\u304C\u4E2D\u65AD\u3055\u308C\u307E\u3057\u305F\u3002"},
-        {"Argument is not defined for connector:", "\u5F15\u6570{0}\u306F\u30B3\u30CD\u30AF\u30BF\u306B\u5BFE\u3057\u3066\u5B9A\u7FA9\u3055\u308C\u3066\u3044\u307E\u305B\u3093: {1}"},
-        {"Arguments match no method", "\u5F15\u6570\u304C\u9069\u5408\u3059\u308B\u30E1\u30BD\u30C3\u30C9\u304C\u3042\u308A\u307E\u305B\u3093"},
-        {"Array:", "\u914D\u5217: {0}"},
-        {"Array element is not a method", "\u914D\u5217\u8981\u7D20\u306F\u30E1\u30BD\u30C3\u30C9\u3067\u306F\u3042\u308A\u307E\u305B\u3093"},
-        {"Array index must be a integer type", "\u914D\u5217\u306E\u6DFB\u3048\u5B57\u306F\u6574\u6570\u578B\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059"},
-        {"base directory:", "\u30D9\u30FC\u30B9\u30FB\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA: {0}"},
-        {"bootclasspath:", "\u30D6\u30FC\u30C8\u30FB\u30AF\u30E9\u30B9\u30D1\u30B9: {0}"},
-        {"Breakpoint hit:", "\u30D2\u30C3\u30C8\u3057\u305F\u30D6\u30EC\u30FC\u30AF\u30DD\u30A4\u30F3\u30C8: "},
-        {"breakpoint", "\u30D6\u30EC\u30FC\u30AF\u30DD\u30A4\u30F3\u30C8{0}"},
-        {"Breakpoints set:", "\u8A2D\u5B9A\u3055\u308C\u3066\u3044\u308B\u30D6\u30EC\u30FC\u30AF\u30DD\u30A4\u30F3\u30C8:"},
-        {"Breakpoints can be located only in classes.", "\u30D6\u30EC\u30FC\u30AF\u30DD\u30A4\u30F3\u30C8\u306F\u30AF\u30E9\u30B9\u5185\u306B\u306E\u307F\u914D\u7F6E\u3067\u304D\u307E\u3059\u3002{0}\u306F\u30A4\u30F3\u30BF\u30D5\u30A7\u30FC\u30B9\u307E\u305F\u306F\u914D\u5217\u3067\u3059\u3002"},
-        {"Can only trace", "'methods'\u3001'method exit'\u307E\u305F\u306F'method exits'\u306E\u307F\u30C8\u30EC\u30FC\u30B9\u3067\u304D\u307E\u3059"},
-        {"cannot redefine existing connection", "{0}\u306F\u65E2\u5B58\u306E\u63A5\u7D9A\u3092\u518D\u5B9A\u7FA9\u3067\u304D\u307E\u305B\u3093"},
-        {"Cannot assign to a method invocation", "\u30E1\u30BD\u30C3\u30C9\u547C\u51FA\u3057\u306B\u5272\u5F53\u3066\u3067\u304D\u307E\u305B\u3093"},
-        {"Cannot specify command line with connector:", "\u30B3\u30CD\u30AF\u30BF\u3067\u30B3\u30DE\u30F3\u30C9\u30E9\u30A4\u30F3\u3092\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093: {0}"},
-        {"Cannot specify target vm arguments with connector:", "\u30B3\u30CD\u30AF\u30BF\u3067\u30BF\u30FC\u30B2\u30C3\u30C8VM\u5F15\u6570\u3092\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093: {0}"},
-        {"Class containing field must be specified.", "\u30D5\u30A3\u30FC\u30EB\u30C9\u3092\u542B\u3080\u30AF\u30E9\u30B9\u3092\u6307\u5B9A\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002"},
-        {"Class:", "\u30AF\u30E9\u30B9: {0}"},
-        {"Classic VM no longer supported.", "Classic VM\u306F\u73FE\u5728\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002"},
-        {"classpath:", "\u30AF\u30E9\u30B9\u30D1\u30B9: {0}"},
-        {"colon mark", ":"},
-        {"colon space", ": "},
-        {"Command is not supported on the target VM", "\u30B3\u30DE\u30F3\u30C9''{0}''\u306F\u30BF\u30FC\u30B2\u30C3\u30C8VM\u3067\u306F\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u307E\u305B\u3093"},
-        {"Command is not supported on a read-only VM connection", "\u30B3\u30DE\u30F3\u30C9''{0}''\u306F\u8AAD\u53D6\u308A\u5C02\u7528VM\u63A5\u7D9A\u3067\u306F\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u307E\u305B\u3093"},
-        {"Command not valid until the VM is started with the run command", "\u30B3\u30DE\u30F3\u30C9''{0}''\u306F\u3001VM\u304C''run''\u30B3\u30DE\u30F3\u30C9\u3067\u958B\u59CB\u3055\u308C\u308B\u307E\u3067\u7121\u52B9\u3067\u3059"},
-        {"Condition must be boolean", "\u6761\u4EF6\u306Fboolean\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059"},
-        {"Connector and Transport name", "  \u30B3\u30CD\u30AF\u30BF: {0}  \u30C8\u30E9\u30F3\u30B9\u30DD\u30FC\u30C8: {1}"},
-        {"Connector argument nodefault", "    \u5F15\u6570: {0} (\u30C7\u30D5\u30A9\u30EB\u30C8\u306A\u3057)"},
-        {"Connector argument default", "    \u5F15\u6570: {0} \u30C7\u30D5\u30A9\u30EB\u30C8\u5024: {1}"},
-        {"Connector description", "    \u8AAC\u660E: {0}"},
-        {"Connector required argument nodefault", "    \u5FC5\u9808\u5F15\u6570: {0} (\u30C7\u30D5\u30A9\u30EB\u30C8\u306A\u3057)"},
-        {"Connector required argument default", "    \u5FC5\u9808\u5F15\u6570: {0} \u30C7\u30D5\u30A9\u30EB\u30C8\u5024: {1}"},
-        {"Connectors available", "\u5229\u7528\u53EF\u80FD\u306A\u30B3\u30CD\u30AF\u30BF:"},
-        {"Constant is not a method", "\u5B9A\u6570\u306F\u30E1\u30BD\u30C3\u30C9\u3067\u306F\u3042\u308A\u307E\u305B\u3093"},
-        {"Could not open:", "\u958B\u3051\u307E\u305B\u3093\u3067\u3057\u305F: {0}"},
-        {"Current method is native", "\u73FE\u5728\u306E\u30E1\u30BD\u30C3\u30C9\u306Fnative\u3067\u3059"},
-        {"Current thread died. Execution continuing...", "\u73FE\u5728\u306E\u30B9\u30EC\u30C3\u30C9{0}\u304C\u7D42\u4E86\u3057\u307E\u3057\u305F\u3002\u5B9F\u884C\u304C\u7D9A\u884C\u4E2D..."},
-        {"Current thread isnt suspended.", "\u73FE\u5728\u306E\u30B9\u30EC\u30C3\u30C9\u306F\u4E2D\u65AD\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002"},
-        {"Current thread not set.", "\u73FE\u5728\u306E\u30B9\u30EC\u30C3\u30C9\u304C\u8A2D\u5B9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002"},
-        {"dbgtrace flag value must be an integer:", "dbgtrace\u30D5\u30E9\u30B0\u5024\u306F\u6574\u6570\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059: {0}"},
-        {"Deferring.", "\u9045\u5EF6\u3057\u305F{0}\u3002\n\u30AF\u30E9\u30B9\u304C\u30ED\u30FC\u30C9\u3055\u308C\u305F\u5F8C\u306B\u8A2D\u5B9A\u3055\u308C\u307E\u3059\u3002"},
-        {"End of stack.", "\u30B9\u30BF\u30C3\u30AF\u306E\u7D42\u308F\u308A\u3002"},
-        {"Error popping frame", "\u30D5\u30EC\u30FC\u30E0\u306E\u30DD\u30C3\u30D7\u4E2D\u306E\u30A8\u30E9\u30FC - {0}"},
-        {"Error reading file", "''{0}''\u306E\u8AAD\u53D6\u308A\u30A8\u30E9\u30FC - {1}"},
-        {"Error redefining class to file", "{0}\u3092{1}\u306B\u518D\u5B9A\u7FA9\u4E2D\u306E\u30A8\u30E9\u30FC - {2}"},
-        {"exceptionSpec all", "\u3059\u3079\u3066\u306E{0}"},
-        {"exceptionSpec caught", "\u6355\u6349\u3057\u305F{0}"},
-        {"exceptionSpec uncaught", "\u6355\u6349\u3055\u308C\u306A\u3044{0}"},
-        {"Exception in expression:", "\u5F0F\u306E\u4F8B\u5916: {0}"},
-        {"Exception occurred caught", "\u4F8B\u5916\u304C\u767A\u751F\u3057\u307E\u3057\u305F: {0} (\u6355\u6349\u3055\u308C\u308B\u5834\u6240: {1})"},
-        {"Exception occurred uncaught", "\u4F8B\u5916\u304C\u767A\u751F\u3057\u307E\u3057\u305F: {0} (\u6355\u6349\u3055\u308C\u306A\u3044)"},
-        {"Exceptions caught:", "\u6B21\u306E\u4F8B\u5916\u304C\u767A\u751F\u3057\u305F\u3068\u304D\u306B\u30D6\u30EC\u30FC\u30AF:"},
-        {"expr is null", "{0} = null"},
-        {"expr is value", "{0} = {1}"},
-        {"expr is value <collected>", "  {0} = {1} <collected>"},
-        {"Expression cannot be void", "\u5F0F\u306Fvoid\u578B\u306B\u3067\u304D\u307E\u305B\u3093"},
-        {"Expression must evaluate to an object", "\u5F0F\u306F\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3068\u3057\u3066\u8A55\u4FA1\u3055\u308C\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059"},
-        {"extends:", "\u62E1\u5F35\u3057\u307E\u3059: {0}"},
-        {"Failed reading output", "\u5B50\u306Ejava\u30A4\u30F3\u30BF\u30FC\u30D7\u30EA\u30BF\u306E\u51FA\u529B\u306E\u8AAD\u53D6\u308A\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002"},
-        {"Fatal error", "\u81F4\u547D\u7684\u30A8\u30E9\u30FC:"},
-        {"Field access encountered before after", "\u30D5\u30A3\u30FC\u30EB\u30C9({0})\u306F{1}\u3067\u3001{2}\u306B\u306A\u308A\u307E\u3059: "},
-        {"Field access encountered", "\u30D5\u30A3\u30FC\u30EB\u30C9({0})\u306E\u30A2\u30AF\u30BB\u30B9\u304C\u691C\u51FA\u3055\u308C\u307E\u3057\u305F: "},
-        {"Field to unwatch not specified", "\u76E3\u8996\u3057\u306A\u3044\u30D5\u30A3\u30FC\u30EB\u30C9\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002"},
-        {"Field to watch not specified", "\u76E3\u8996\u3059\u308B\u30D5\u30A3\u30FC\u30EB\u30C9\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002"},
-        {"GC Disabled for", "{0}\u306EGC\u304C\u7121\u52B9\u3067\u3059:"},
-        {"GC Enabled for", "{0}\u306EGC\u304C\u6709\u52B9\u3067\u3059:"},
-        {"grouping begin character", "{"},
-        {"grouping end character", "}"},
-        {"Illegal Argument Exception", "\u4E0D\u6B63\u306A\u5F15\u6570\u306E\u4F8B\u5916\u3067\u3059"},
-        {"Illegal connector argument", "\u4E0D\u6B63\u306A\u30B3\u30CD\u30AF\u30BF\u5F15\u6570\u3067\u3059: {0}"},
-        {"implementor:", "\u30A4\u30F3\u30D7\u30EA\u30E1\u30F3\u30BF: {0}"},
-        {"implements:", "\u5B9F\u88C5\u3057\u307E\u3059: {0}"},
-        {"Initializing progname", "{0}\u306E\u521D\u671F\u5316\u4E2D..."},
-        {"Input stream closed.", "\u5165\u529B\u30B9\u30C8\u30EA\u30FC\u30E0\u304C\u9589\u3058\u3089\u308C\u307E\u3057\u305F\u3002"},
-        {"Interface:", "\u30A4\u30F3\u30BF\u30D5\u30A7\u30FC\u30B9: {0}"},
-        {"Internal debugger error.", "\u30C7\u30D0\u30C3\u30AC\u306E\u5185\u90E8\u30A8\u30E9\u30FC\u3067\u3059\u3002"},
-        {"Internal error: null ThreadInfo created", "\u5185\u90E8\u30A8\u30E9\u30FC: null\u306EThreadInfo\u304C\u4F5C\u6210\u3055\u308C\u307E\u3057\u305F"},
-        {"Internal error; unable to set", "\u5185\u90E8\u30A8\u30E9\u30FC\u3002{0}\u3092\u8A2D\u5B9A\u3067\u304D\u307E\u305B\u3093"},
-        {"Internal exception during operation:", "\u64CD\u4F5C\u4E2D\u306E\u5185\u90E8\u4F8B\u5916:\n    {0}"},
-        {"Internal exception:", "\u5185\u90E8\u4F8B\u5916:"},
-        {"Invalid argument type name", "\u5F15\u6570\u578B\u306E\u540D\u524D\u304C\u7121\u52B9\u3067\u3059"},
-        {"Invalid assignment syntax", "\u5272\u5F53\u3066\u69CB\u6587\u304C\u7121\u52B9\u3067\u3059"},
-        {"Invalid command syntax", "\u30B3\u30DE\u30F3\u30C9\u69CB\u6587\u304C\u7121\u52B9\u3067\u3059"},
-        {"Invalid connect type", "\u63A5\u7D9A\u578B\u304C\u7121\u52B9\u3067\u3059"},
-        {"Invalid consecutive invocations", "\u9023\u7D9A\u547C\u51FA\u3057\u304C\u7121\u52B9\u3067\u3059"},
-        {"Invalid exception object", "\u4F8B\u5916\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u304C\u7121\u52B9\u3067\u3059"},
-        {"Invalid method specification:", "\u7121\u52B9\u306A\u30E1\u30BD\u30C3\u30C9\u6307\u5B9A: {0}"},
-        {"Invalid option on class command", "class\u30B3\u30DE\u30F3\u30C9\u306E\u30AA\u30D7\u30B7\u30E7\u30F3\u304C\u7121\u52B9\u3067\u3059"},
-        {"invalid option", "\u7121\u52B9\u306A\u30AA\u30D7\u30B7\u30E7\u30F3: {0}"},
-        {"Invalid thread status.", "\u30B9\u30EC\u30C3\u30C9\u72B6\u614B\u304C\u7121\u52B9\u3067\u3059\u3002"},
-        {"Invalid transport name:", "\u30C8\u30E9\u30F3\u30B9\u30DD\u30FC\u30C8\u540D\u304C\u7121\u52B9\u3067\u3059: {0}"},
-        {"I/O exception occurred:", "\u5165\u51FA\u529B\u4F8B\u5916\u304C\u767A\u751F\u3057\u307E\u3057\u305F: {0}"},
-        {"is an ambiguous method name in", "\"{0}\"\u306F\"{1}\"\u306E\u3042\u3044\u307E\u3044\u306A\u30E1\u30BD\u30C3\u30C9\u540D\u3067\u3059"},
-        {"is an invalid line number for",  "{0,number,integer}\u306F{1}\u306E\u7121\u52B9\u306A\u884C\u756A\u53F7\u3067\u3059"},
-        {"is not a valid class name", "\"{0}\"\u306F\u4E0D\u6B63\u306A\u30AF\u30E9\u30B9\u540D\u3067\u3059\u3002"},
-        {"is not a valid field name", "\"{0}\"\u306F\u4E0D\u6B63\u306A\u30D5\u30A3\u30FC\u30EB\u30C9\u540D\u3067\u3059\u3002"},
-        {"is not a valid id or class name", "\"{0}\"\u306F\u4E0D\u6B63\u306AID\u307E\u305F\u306F\u30AF\u30E9\u30B9\u540D\u3067\u3059\u3002"},
-        {"is not a valid line number or method name for", "\"{0}\"\u306F\u30AF\u30E9\u30B9\"{1}\"\u306E\u4E0D\u6B63\u306A\u884C\u756A\u53F7\u307E\u305F\u306F\u30E1\u30BD\u30C3\u30C9\u540D\u3067\u3059"},
-        {"is not a valid method name", "\"{0}\"\u306F\u4E0D\u6B63\u306A\u30E1\u30BD\u30C3\u30C9\u540D\u3067\u3059\u3002"},
-        {"is not a valid thread id", "\"{0}\"\u306F\u4E0D\u6B63\u306A\u30B9\u30EC\u30C3\u30C9ID\u3067\u3059\u3002"},
-        {"is not a valid threadgroup name", "\"{0}\"\u306F\u4E0D\u6B63\u306A\u30B9\u30EC\u30C3\u30C9\u30FB\u30B0\u30EB\u30FC\u30D7\u540D\u3067\u3059\u3002"},
-        {"jdb prompt with no current thread", "> "},
-        {"jdb prompt thread name and current stack frame", "{0}[{1,number,integer}] "},
-        {"killed", "{0}\u304C\u5F37\u5236\u7D42\u4E86\u3055\u308C\u307E\u3057\u305F"},
-        {"killing thread:", "\u5F37\u5236\u7D42\u4E86\u3059\u308B\u30B9\u30EC\u30C3\u30C9: {0}"},
-        {"Line number information not available for", "\u30BD\u30FC\u30B9\u884C\u756A\u53F7\u306F\u3053\u306E\u5834\u6240\u3067\u306F\u4F7F\u7528\u3067\u304D\u307E\u305B\u3093\u3002"},
-        {"line number", ":{0,number,integer}"},
-        {"list field typename and name", "{0} {1}\n"},
-        {"list field typename and name inherited", "{0} {1} ({2}\u304B\u3089\u7D99\u627F)\n"},
-        {"list field typename and name hidden", "{0} {1} (\u975E\u8868\u793A)\n"},
-        {"Listening at address:", "\u6B21\u306E\u30A2\u30C9\u30EC\u30B9\u3067\u30EA\u30B9\u30CB\u30F3\u30B0: {0}"},
-        {"Local variable information not available.", "\u30ED\u30FC\u30AB\u30EB\u5909\u6570\u60C5\u5831\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u5909\u6570\u60C5\u5831\u3092\u751F\u6210\u3059\u308B\u306B\u306F-g\u3092\u6307\u5B9A\u3057\u3066\u30B3\u30F3\u30D1\u30A4\u30EB\u3057\u3066\u304F\u3060\u3055\u3044"},
-        {"Local variables:", "\u30ED\u30FC\u30AB\u30EB\u5909\u6570:"},
-        {"<location unavailable>", "<location unavailable>"},
-        {"location", "\"\u30B9\u30EC\u30C3\u30C9={0}\", {1}"},
-        {"locationString", "{0}.{1}()\u3001\u884C={2,number,integer} bci={3,number,integer}"},
-        {"Main class and arguments must be specified", "\u30E1\u30A4\u30F3\u30FB\u30AF\u30E9\u30B9\u3068\u5F15\u6570\u3092\u6307\u5B9A\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059"},
-        {"Method arguments:", "\u30E1\u30BD\u30C3\u30C9\u5F15\u6570:"},
-        {"Method entered:", "\u5165\u529B\u3055\u308C\u305F\u30E1\u30BD\u30C3\u30C9: "},
-        {"Method exited:",  "\u7D42\u4E86\u3057\u305F\u30E1\u30BD\u30C3\u30C9"},
-        {"Method exitedValue:", "\u30E1\u30BD\u30C3\u30C9\u304C\u7D42\u4E86\u3057\u307E\u3057\u305F: \u623B\u308A\u5024= {0}, "},
-        {"Method is overloaded; specify arguments", "\u30E1\u30BD\u30C3\u30C9{0}\u304C\u30AA\u30FC\u30D0\u30FC\u30ED\u30FC\u30C9\u3055\u308C\u3066\u3044\u307E\u3059\u3002\u5F15\u6570\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044"},
-        {"minus version", "\u3053\u308C\u306F{0}\u30D0\u30FC\u30B8\u30E7\u30F3{1,number,integer}.{2,number,integer} (Java SE\u30D0\u30FC\u30B8\u30E7\u30F3{3})\u3067\u3059"},
-        {"Monitor information for thread", "\u30B9\u30EC\u30C3\u30C9{0}\u306E\u60C5\u5831\u306E\u30E2\u30CB\u30BF\u30FC:"},
-        {"Monitor information for expr", "{0} ({1})\u306E\u60C5\u5831\u306E\u30E2\u30CB\u30BF\u30FC:"},
-        {"More than one class named", "\u540D\u524D''{0}''\u306E\u30AF\u30E9\u30B9\u304C\u8907\u6570\u3042\u308A\u307E\u3059"},
-        {"native method", "native\u30E1\u30BD\u30C3\u30C9"},
-        {"nested:", "\u30CD\u30B9\u30C8\u3055\u308C\u3066\u3044\u307E\u3059: {0}"},
-        {"No attach address specified.", "\u63A5\u7D9A\u30A2\u30C9\u30EC\u30B9\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002"},
-        {"No breakpoints set.", "\u30D6\u30EC\u30FC\u30AF\u30DD\u30A4\u30F3\u30C8\u304C\u8A2D\u5B9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002"},
-        {"No class named", "\u540D\u524D''{0}''\u306E\u30AF\u30E9\u30B9\u304C\u3042\u308A\u307E\u305B\u3093"},
-        {"No class specified.", "\u30AF\u30E9\u30B9\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002"},
-        {"No classpath specified.", "\u30AF\u30E9\u30B9\u30D1\u30B9\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002"},
-        {"No code at line", "\u884C{0,number,integer} ({1}\u5185)\u306B\u30B3\u30FC\u30C9\u304C\u3042\u308A\u307E\u305B\u3093"},
-        {"No connect specification.", "\u63A5\u7D9A\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002"},
-        {"No connector named:", "\u540D\u524D{0}\u306E\u30B3\u30CD\u30AF\u30BF\u304C\u3042\u308A\u307E\u305B\u3093"},
-        {"No current thread", "\u73FE\u5728\u306E\u30B9\u30EC\u30C3\u30C9\u304C\u3042\u308A\u307E\u305B\u3093"},
-        {"No default thread specified:", "\u30C7\u30D5\u30A9\u30EB\u30C8\u306E\u30B9\u30EC\u30C3\u30C9\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002\u6700\u521D\u306B\"thread\"\u30B3\u30DE\u30F3\u30C9\u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044\u3002"},
-        {"No exception object specified.", "\u4F8B\u5916\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002"},
-        {"No exceptions caught.", "\u4F8B\u5916\u304C\u6355\u6349\u3055\u308C\u307E\u305B\u3093\u3067\u3057\u305F\u3002"},
-        {"No expression specified.", "\u5F0F\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002"},
-        {"No field in", "{1}\u306B\u30D5\u30A3\u30FC\u30EB\u30C9{0}\u304C\u3042\u308A\u307E\u305B\u3093"},
-        {"No frames on the current call stack", "\u73FE\u5728\u306E\u30B3\u30FC\u30EB\u30FB\u30B9\u30BF\u30C3\u30AF\u306B\u30D5\u30EC\u30FC\u30E0\u304C\u3042\u308A\u307E\u305B\u3093"},
-        {"No linenumber information for", "{0}\u306E\u884C\u756A\u53F7\u60C5\u5831\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u30C7\u30D0\u30C3\u30B0\u3092\u30AA\u30F3\u306B\u3057\u3066\u30B3\u30F3\u30D1\u30A4\u30EB\u3057\u3066\u304F\u3060\u3055\u3044\u3002"},
-        {"No local variables", "\u30ED\u30FC\u30AB\u30EB\u5909\u6570\u304C\u3042\u308A\u307E\u305B\u3093"},
-        {"No method in", "{1}\u306B\u30E1\u30BD\u30C3\u30C9{0}\u304C\u3042\u308A\u307E\u305B\u3093"},
-        {"No method specified.", "\u30E1\u30BD\u30C3\u30C9\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002"},
-        {"No monitor numbered:", "\u756A\u53F7\u4ED8\u3051\u3055\u308C\u3066\u3044\u308B\u30E2\u30CB\u30BF\u30FC\u304C\u3042\u308A\u307E\u305B\u3093: {0}"},
-        {"No monitors owned", "  \u6240\u6709\u3055\u308C\u3066\u3044\u308B\u30E2\u30CB\u30BF\u30FC\u304C\u3042\u308A\u307E\u305B\u3093"},
-        {"No object specified.", "\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002"},
-        {"No objects specified.", "\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002"},
-        {"No save index specified.", "\u4FDD\u5B58\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002"},
-        {"No saved values", "\u4FDD\u5B58\u3055\u308C\u305F\u5024\u304C\u3042\u308A\u307E\u305B\u3093"},
-        {"No source information available for:", "{0}\u306E\u30BD\u30FC\u30B9\u60C5\u5831\u304C\u5229\u7528\u3067\u304D\u307E\u305B\u3093"},
-        {"No sourcedebugextension specified", "SourceDebugExtension\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093"},
-        {"No sourcepath specified.", "\u30BD\u30FC\u30B9\u30FB\u30D1\u30B9\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002"},
-        {"No thread specified.", "\u30B9\u30EC\u30C3\u30C9\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002"},
-        {"No VM connected", "VM\u304C\u63A5\u7D9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093"},
-        {"No waiters", "  \u5F85\u6A5F\u306F\u3042\u308A\u307E\u305B\u3093"},
-        {"not a class", "{0}\u306F\u30AF\u30E9\u30B9\u3067\u306F\u3042\u308A\u307E\u305B\u3093"},
-        {"Not a monitor number:", "\u30E2\u30CB\u30BF\u30FC\u756A\u53F7\u3067\u306F\u3042\u308A\u307E\u305B\u3093: ''{0}''"},
-        {"not found (try the full name)", "{0}\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093(\u30D5\u30EB\u30CD\u30FC\u30E0\u3092\u8A66\u3057\u3066\u304F\u3060\u3055\u3044)"},
-        {"Not found:", "\u898B\u3064\u304B\u308A\u307E\u305B\u3093: {0}"},
-        {"not found", "{0}\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093"},
-        {"Not owned", "  \u6240\u6709\u3055\u308C\u3066\u3044\u307E\u305B\u3093"},
-        {"Not waiting for a monitor", "  \u30E2\u30CB\u30BF\u30FC\u3092\u5F85\u6A5F\u3057\u3066\u3044\u307E\u305B\u3093"},
-        {"Nothing suspended.", "\u4F55\u3082\u4E2D\u65AD\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002"},
-        {"object description and hex id", "({0}){1}"},
-        {"Operation is not supported on the target VM", "\u64CD\u4F5C\u306F\u30BF\u30FC\u30B2\u30C3\u30C8VM\u3067\u306F\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u307E\u305B\u3093"},
-        {"operation not yet supported", "\u307E\u3060\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u306A\u3044\u64CD\u4F5C"},
-        {"Owned by:", "  \u6240\u6709\u8005: {0}\u3001\u30A8\u30F3\u30C8\u30EA\u6570: {1,number,integer}"},
-        {"Owned monitor:", "  \u6240\u6709\u3055\u308C\u3066\u3044\u308B\u30E2\u30CB\u30BF\u30FC: {0}"},
-        {"Parse exception:", "\u4F8B\u5916\u306E\u89E3\u6790: {0}"},
-        {"printbreakpointcommandusage", "\u4F7F\u7528\u65B9\u6CD5: {0} <class>:<line_number>\u307E\u305F\u306F\n       {1} <class>.<method_name>[(argument_type,...)]"},
-        {"Removed:", "{0}\u306F\u524A\u9664\u3055\u308C\u307E\u3057\u305F"},
-        {"Requested stack frame is no longer active:", "\u30EA\u30AF\u30A8\u30B9\u30C8\u3055\u308C\u305F\u30B9\u30BF\u30C3\u30AF\u30FB\u30D5\u30EC\u30FC\u30E0\u306F\u73FE\u5728\u30A2\u30AF\u30C6\u30A3\u30D6\u3067\u306F\u3042\u308A\u307E\u305B\u3093: {0,number,integer}"},
-        {"run <args> command is valid only with launched VMs", "'run <args>'\u30B3\u30DE\u30F3\u30C9\u306F\u8D77\u52D5\u6E08\u306EVM\u3067\u306E\u307F\u6709\u52B9\u3067\u3059"},
-        {"run", "{0}\u306E\u5B9F\u884C"},
-        {"saved", "{0}\u304C\u4FDD\u5B58\u3055\u308C\u307E\u3057\u305F"},
-        {"Set deferred", "\u9045\u5EF6\u3057\u305F{0}\u306E\u8A2D\u5B9A"},
-        {"Set", "{0}\u306E\u8A2D\u5B9A"},
-        {"Source file not found:", "\u30BD\u30FC\u30B9\u30FB\u30D5\u30A1\u30A4\u30EB\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093: {0}"},
-        {"source line number and line", "{0,number,integer}    {1}"},
-        {"source line number current line and line", "{0,number,integer} => {1}"},
-        {"sourcedebugextension", "SourceDebugExtension -- {0}"},
-        {"Specify class and method", "\u30AF\u30E9\u30B9\u3068\u30E1\u30BD\u30C3\u30C9\u306E\u6307\u5B9A"},
-        {"Specify classes to redefine", "\u518D\u5B9A\u7FA9\u3059\u308B\u30AF\u30E9\u30B9\u306E\u6307\u5B9A"},
-        {"Specify file name for class", "\u30AF\u30E9\u30B9{0}\u306E\u30D5\u30A1\u30A4\u30EB\u540D\u306E\u6307\u5B9A"},
-        {"stack frame dump with pc", "  [{0,number,integer}] {1}.{2} ({3})\u3001pc = {4}"},
-        {"stack frame dump", "  [{0,number,integer}] {1}.{2} ({3})"},
-        {"Step completed:", "\u30B9\u30C6\u30C3\u30D7\u304C\u5B8C\u4E86\u3057\u307E\u3057\u305F: "},
-        {"Stopping due to deferred breakpoint errors.", "\u9045\u5EF6\u3057\u305F\u30D6\u30EC\u30FC\u30AF\u30DD\u30A4\u30F3\u30C8\u30FB\u30A8\u30E9\u30FC\u304C\u539F\u56E0\u3067\u505C\u6B62\u3057\u3066\u3044\u307E\u3059\u3002\n"},
-        {"subclass:", "\u30B5\u30D6\u30AF\u30E9\u30B9: {0}"},
-        {"subinterface:", "\u30B5\u30D6\u30A4\u30F3\u30BF\u30D5\u30A7\u30FC\u30B9: {0}"},
-        {"tab", "\t{0}"},
-        {"Target VM failed to initialize.", "\u30BF\u30FC\u30B2\u30C3\u30C8VM\u304C\u521D\u671F\u5316\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002"},
-        {"The application exited", "\u30A2\u30D7\u30EA\u30B1\u30FC\u30B7\u30E7\u30F3\u304C\u7D42\u4E86\u3057\u307E\u3057\u305F"},
-        {"The application has been disconnected", "\u30A2\u30D7\u30EA\u30B1\u30FC\u30B7\u30E7\u30F3\u304C\u5207\u65AD\u3055\u308C\u307E\u3057\u305F"},
-        {"The gc command is no longer necessary.", "'gc'\u30B3\u30DE\u30F3\u30C9\u306F\u4E0D\u8981\u306B\u306A\u308A\u307E\u3057\u305F\u3002\n\u3059\u3079\u3066\u306E\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306F\u901A\u5E38\u3069\u304A\u308A\u30AC\u30D9\u30FC\u30B8\u30FB\u30B3\u30EC\u30AF\u30B7\u30E7\u30F3\u3055\u308C\u307E\u3059\u3002\u500B\u3005\u306E\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306E\n\u30AC\u30D9\u30FC\u30B8\u30FB\u30B3\u30EC\u30AF\u30B7\u30E7\u30F3\u3092\u5236\u5FA1\u3059\u308B\u306B\u306F'enablegc'\u304A\u3088\u3073'disablegc'\u30B3\u30DE\u30F3\u30C9\u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044\u3002"},
-        {"The load command is no longer supported.", "'load'\u30B3\u30DE\u30F3\u30C9\u306F\u73FE\u5728\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002"},
-        {"The memory command is no longer supported.", "'memory'\u30B3\u30DE\u30F3\u30C9\u306F\u73FE\u5728\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002"},
-        {"The VM does not use paths", "VM\u306F\u30D1\u30B9\u3092\u4F7F\u7528\u3057\u307E\u305B\u3093"},
-        {"Thread is not running (no stack).", "\u30B9\u30EC\u30C3\u30C9\u306F\u5B9F\u884C\u4E2D\u3067\u306F\u3042\u308A\u307E\u305B\u3093(\u30B9\u30BF\u30C3\u30AF\u306A\u3057)\u3002"},
-        {"Thread number not specified.", "\u30B9\u30EC\u30C3\u30C9\u756A\u53F7\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002"},
-        {"Thread:", "{0}:"},
-        {"Thread Group:", "\u30B0\u30EB\u30FC\u30D7{0}:"},
-        {"Thread description name unknownStatus BP",  "  {0} {1}\u306F\u4E0D\u660E\u3067\u3059(\u30D6\u30EC\u30FC\u30AF\u30DD\u30A4\u30F3\u30C8)"},
-        {"Thread description name unknownStatus",     "  {0} {1}\u306F\u4E0D\u660E\u3067\u3059"},
-        {"Thread description name zombieStatus BP",   "  {0} {1}\u306F\u30BE\u30F3\u30D3\u3067\u3059(\u30D6\u30EC\u30FC\u30AF\u30DD\u30A4\u30F3\u30C8\u5730\u70B9)"},
-        {"Thread description name zombieStatus",      "  {0} {1}\u306F\u30BE\u30F3\u30D3\u3067\u3059"},
-        {"Thread description name runningStatus BP",  "  {0} {1}\u306F\u5B9F\u884C\u4E2D\u3067\u3059(\u30D6\u30EC\u30FC\u30AF\u30DD\u30A4\u30F3\u30C8)"},
-        {"Thread description name runningStatus",     "  {0} {1}\u306F\u5B9F\u884C\u4E2D\u3067\u3059"},
-        {"Thread description name sleepingStatus BP", "  {0} {1}\u306F\u30B9\u30EA\u30FC\u30D7\u4E2D\u3067\u3059(\u30D6\u30EC\u30FC\u30AF\u30DD\u30A4\u30F3\u30C8)"},
-        {"Thread description name sleepingStatus",    "  {0} {1}\u306F\u30B9\u30EA\u30FC\u30D7\u4E2D\u3067\u3059"},
-        {"Thread description name waitingStatus BP",  "  {0} {1}\u306F\u30E2\u30CB\u30BF\u30FC\u5185\u3067\u5F85\u6A5F\u4E2D\u3067\u3059(\u30D6\u30EC\u30FC\u30AF\u30DD\u30A4\u30F3\u30C8)"},
-        {"Thread description name waitingStatus",     "  {0} {1}\u306F\u30E2\u30CB\u30BF\u30FC\u5185\u3067\u5F85\u6A5F\u4E2D\u3067\u3059"},
-        {"Thread description name condWaitstatus BP", "  {0} {1}\u306F\u6761\u4EF6\u3092\u5F85\u6A5F\u4E2D\u3067\u3059(\u30D6\u30EC\u30FC\u30AF\u30DD\u30A4\u30F3\u30C8)"},
-        {"Thread description name condWaitstatus",    "  {0} {1}\u306F\u6761\u4EF6\u3092\u5F85\u6A5F\u4E2D\u3067\u3059"},
-        {"Thread has been resumed", "\u30B9\u30EC\u30C3\u30C9\u304C\u518D\u958B\u3057\u307E\u3057\u305F"},
-        {"Thread not suspended", "\u30B9\u30EC\u30C3\u30C9\u306F\u4E2D\u65AD\u3057\u3066\u3044\u307E\u305B\u3093"},
-        {"thread group number description name", "{0,number,integer}. {1} {2}"},
-        {"Threadgroup name not specified.", "\u30B9\u30EC\u30C3\u30C9\u30B0\u30EB\u30FC\u30D7\u540D\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002"},
-        {"Threads must be suspended", "\u30B9\u30EC\u30C3\u30C9\u3092\u4E2D\u65AD\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059"},
-        {"trace method exit in effect for", "{0}\u306B\u5BFE\u3057\u3066\u6709\u52B9\u306A\u30E1\u30BD\u30C3\u30C9\u7D42\u4E86\u306E\u30C8\u30EC\u30FC\u30B9"},
-        {"trace method exits in effect", "\u6709\u52B9\u306A\u30E1\u30BD\u30C3\u30C9\u7D42\u4E86\u306E\u30C8\u30EC\u30FC\u30B9"},
-        {"trace methods in effect", "\u30E1\u30BD\u30C3\u30C9\u306E\u30C8\u30EC\u30FC\u30B9\u306E\u6709\u52B9\u5316"},
-        {"trace go method exit in effect for", "{0}\u306B\u6709\u52B9\u306Ago\u30E1\u30BD\u30C3\u30C9\u7D42\u4E86\u306E\u30C8\u30EC\u30FC\u30B9"},
-        {"trace go method exits in effect", "\u6709\u52B9\u306Ago\u30E1\u30BD\u30C3\u30C9\u7D42\u4E86\u306E\u30C8\u30EC\u30FC\u30B9"},
-        {"trace go methods in effect", "go\u30E1\u30BD\u30C3\u30C9\u306E\u30C8\u30EC\u30FC\u30B9\u306E\u6709\u52B9\u5316"},
-        {"trace not in effect", "\u30C8\u30EC\u30FC\u30B9\u306E\u7121\u52B9\u5316"},
-        {"Unable to attach to target VM.", "\u30BF\u30FC\u30B2\u30C3\u30C8VM\u306B\u63A5\u7D9A\u3067\u304D\u307E\u305B\u3093\u3002"},
-        {"Unable to display process output:", "\u30D7\u30ED\u30BB\u30B9\u51FA\u529B\u3092\u8868\u793A\u3067\u304D\u307E\u305B\u3093: {0}"},
-        {"Unable to launch target VM.", "\u30BF\u30FC\u30B2\u30C3\u30C8VM\u3092\u8D77\u52D5\u3067\u304D\u307E\u305B\u3093\u3002"},
-        {"Unable to set deferred", "\u9045\u5EF6\u3057\u305F{0}\u3092\u8A2D\u5B9A\u3067\u304D\u307E\u305B\u3093: {1}"},
-        {"Unable to set main class and arguments", "\u30E1\u30A4\u30F3\u30FB\u30AF\u30E9\u30B9\u3068\u5F15\u6570\u3092\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093"},
-        {"Unable to set", "{0}\u3092\u8A2D\u5B9A\u3067\u304D\u307E\u305B\u3093: {1}"},
-        {"Unexpected event type", "\u4E88\u671F\u3057\u306A\u3044\u30A4\u30D9\u30F3\u30C8\u30FB\u30BF\u30A4\u30D7: {0}"},
-        {"unknown", "\u4E0D\u660E"},
-        {"Unmonitoring", "{0}\u306E\u30E2\u30CB\u30BF\u30EA\u30F3\u30B0\u89E3\u9664 "},
-        {"Unrecognized command.  Try help...", "''{0}''\u306F\u8A8D\u8B58\u3055\u308C\u306A\u3044\u30B3\u30DE\u30F3\u30C9\u3067\u3059\u3002help\u3067\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044..."},
-        {"Usage: catch exception", "\u4F7F\u7528\u65B9\u6CD5: catch [uncaught|caught|all] <class id>|<class pattern>"},
-        {"Usage: ignore exception", "\u4F7F\u7528\u65B9\u6CD5: ignore [uncaught|caught|all] <class id>|<class pattern>"},
-        {"Usage: down [n frames]", "\u4F7F\u7528\u65B9\u6CD5: down [n frames]"},
-        {"Usage: kill <thread id> <throwable>", "\u4F7F\u7528\u65B9\u6CD5: kill <thread id> <throwable>"},
-        {"Usage: read <command-filename>", "\u4F7F\u7528\u65B9\u6CD5: read <command-filename>"},
-        {"Usage: unmonitor <monitor#>", "\u4F7F\u7528\u65B9\u6CD5: unmonitor <monitor#>"},
-        {"Usage: up [n frames]", "\u4F7F\u7528\u65B9\u6CD5: up [n frames]"},
-        {"Use java minus X to see", "\u4F7F\u7528\u53EF\u80FD\u306A\u975E\u6A19\u6E96\u30AA\u30D7\u30B7\u30E7\u30F3\u3092\u8868\u793A\u3059\u308B\u306B\u306F'java -X'\u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044"},
-        {"Use stop at to set a breakpoint at a line number", "\u884C\u756A\u53F7\u306B\u30D6\u30EC\u30FC\u30AF\u30DD\u30A4\u30F3\u30C8\u3092\u8A2D\u5B9A\u3059\u308B\u306B\u306F'stop at'\u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044"},
-        {"VM already running. use cont to continue after events.", "VM\u306F\u3059\u3067\u306B\u5B9F\u884C\u4E2D\u3067\u3059\u3002\u30A4\u30D9\u30F3\u30C8\u5F8C\u306B\u7D9A\u884C\u3059\u308B\u306B\u306F'cont'\u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044\u3002"},
-        {"VM Started:", "VM\u304C\u958B\u59CB\u3055\u308C\u307E\u3057\u305F: "},
-        {"vmstartexception", "VM\u304C\u4F8B\u5916\u3092\u958B\u59CB\u3057\u307E\u3057\u305F: {0}"},
-        {"Waiting for monitor:", "   \u30E2\u30CB\u30BF\u30FC\u306E\u5F85\u6A5F\u4E2D: {0}"},
-        {"Waiting thread:", " \u30B9\u30EC\u30C3\u30C9\u3092\u5F85\u6A5F\u4E2D: {0}"},
-        {"watch accesses of", "{0}.{1}\u306E\u30A2\u30AF\u30BB\u30B9\u3092\u76E3\u8996"},
-        {"watch modification of", "{0}.{1}\u306E\u5909\u66F4\u306E\u76E3\u8996"},
-        {"zz help text",
-             "** \u30B3\u30DE\u30F3\u30C9\u30FB\u30EA\u30B9\u30C8 **\nconnectors                -- \u3053\u306EVM\u5185\u306E\u4F7F\u7528\u53EF\u80FD\u306A\u30B3\u30CD\u30AF\u30BF\u3068\u30C8\u30E9\u30F3\u30B9\u30DD\u30FC\u30C8\u3092\u30EA\u30B9\u30C8\u3057\u307E\u3059\n\nrun [class [args]]        -- \u30A2\u30D7\u30EA\u30B1\u30FC\u30B7\u30E7\u30F3\u306E\u30E1\u30A4\u30F3\u30FB\u30AF\u30E9\u30B9\u306E\u5B9F\u884C\u3092\u958B\u59CB\u3057\u307E\u3059\n\nthreads [threadgroup]     -- \u30B9\u30EC\u30C3\u30C9\u3092\u30EA\u30B9\u30C8\u3057\u307E\u3059\nthread <thread id>        -- \u30C7\u30D5\u30A9\u30EB\u30C8\u306E\u30B9\u30EC\u30C3\u30C9\u3092\u8A2D\u5B9A\u3057\u307E\u3059\nsuspend [thread id(s)]    -- \u30B9\u30EC\u30C3\u30C9\u3092\u4E2D\u65AD\u3057\u307E\u3059(\u30C7\u30D5\u30A9\u30EB\u30C8: \u3059\u3079\u3066)\nresume [thread id(s)]     -- \u30B9\u30EC\u30C3\u30C9\u3092\u518D\u958B\u3057\u307E\u3059(\u30C7\u30D5\u30A9\u30EB\u30C8: \u3059\u3079\u3066)\nwhere [<thread id> | all] -- \u30B9\u30EC\u30C3\u30C9\u306E\u30B9\u30BF\u30C3\u30AF\u3092\u30C0\u30F3\u30D7\u3057\u307E\u3059\nwherei [<thread id> | all]-- \u30B9\u30EC\u30C3\u30C9\u306E\u30B9\u30BF\u30C3\u30AF\u3092pc\u60C5\u5831\u3068\u3068\u3082\u306B\u30C0\u30F3\u30D7\u3057\u307E\u3059\nup [n frames]             -- \u30B9\u30EC\u30C3\u30C9\u306E\u30B9\u30BF\u30C3\u30AF\u3092\u4E0A\u306B\u79FB\u52D5\u3057\u307E\u3059\ndown [n frames]           -- \u30B9\u30EC\u30C3\u30C9\u306E\u30B9\u30BF\u30C3\u30AF\u3092\u4E0B\u306B\u79FB\u52D5\u3057\u307E\u3059\nkill <thread id> <expr>   -- \u6307\u5B9A\u3055\u308C\u305F\u4F8B\u5916\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3067\u30B9\u30EC\u30C3\u30C9\u3092\u5F37\u5236\u7D42\u4E86\u3057\u307E\u3059\ninterrupt <thread id>     -- \u30B9\u30EC\u30C3\u30C9\u3092\u4E2D\u65AD\u3057\u307E\u3059\n\nprint <expr>              -- \u5F0F\u306E\u5024\u3092\u51FA\u529B\u3057\u307E\u3059\ndump <expr>               -- \u3059\u3079\u3066\u306E\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u60C5\u5831\u3092\u51FA\u529B\u3057\u307E\u3059\neval <expr>               -- \u5F0F\u3092\u8A55\u4FA1\u3057\u307E\u3059(print\u3068\u540C\u3058)\nset <lvalue> = <expr>     -- \u65B0\u3057\u3044\u5024\u3092\u30D5\u30A3\u30FC\u30EB\u30C9/\u5909\u6570/\u914D\u5217\u8981\u7D20\u306B\u4EE3\u5165\u3057\u307E\u3059\nlocals                    -- \u73FE\u5728\u306E\u30B9\u30BF\u30C3\u30AF\u30FB\u30D5\u30EC\u30FC\u30E0\u5185\u306E\u3059\u3079\u3066\u306E\u30ED\u30FC\u30AB\u30EB\u5909\u6570\u3092\u51FA\u529B\u3057\u307E\u3059\n\nclasses                   -- \u73FE\u5728\u65E2\u77E5\u306E\u30AF\u30E9\u30B9\u3092\u30EA\u30B9\u30C8\u3057\u307E\u3059\nclass <class id>          -- \u6307\u5B9A\u3057\u305F\u30AF\u30E9\u30B9\u306E\u8A73\u7D30\u3092\u8868\u793A\u3057\u307E\u3059\nmethods <class id>        -- \u30AF\u30E9\u30B9\u306E\u30E1\u30BD\u30C3\u30C9\u3092\u30EA\u30B9\u30C8\u3057\u307E\u3059\nfields <class id>         -- \u30AF\u30E9\u30B9\u306E\u30D5\u30A3\u30FC\u30EB\u30C9\u3092\u30EA\u30B9\u30C8\u3057\u307E\u3059\n\nthreadgroups              -- \u30B9\u30EC\u30C3\u30C9\u30B0\u30EB\u30FC\u30D7\u3092\u30EA\u30B9\u30C8\u3057\u307E\u3059\nthreadgroup <name>        -- \u73FE\u5728\u306E\u30B9\u30EC\u30C3\u30C9\u30B0\u30EB\u30FC\u30D7\u3092\u8A2D\u5B9A\u3057\u307E\u3059\n\nstop in <class id>.<method>[(argument_type,...)]\n                          -- \u30D6\u30EC\u30FC\u30AF\u30DD\u30A4\u30F3\u30C8\u3092\u30E1\u30BD\u30C3\u30C9\u5185\u306B\u8A2D\u5B9A\u3057\u307E\u3059\nstop at <class id>:<line> -- \u884C\u306B\u30D6\u30EC\u30FC\u30AF\u30DD\u30A4\u30F3\u30C8\u3092\u8A2D\u5B9A\u3057\u307E\u3059\nclear <class id>.<method>[(argument_type,...)]\n                          -- \u30E1\u30BD\u30C3\u30C9\u5185\u306E\u30D6\u30EC\u30FC\u30AF\u30DD\u30A4\u30F3\u30C8\u3092\u30AF\u30EA\u30A2\u3057\u307E\u3059\nclear <class id>:<line>   -- \u884C\u306E\u30D6\u30EC\u30FC\u30AF\u30DD\u30A4\u30F3\u30C8\u3092\u30AF\u30EA\u30A2\u3057\u307E\u3059\nclear                     -- \u30D6\u30EC\u30FC\u30AF\u30DD\u30A4\u30F3\u30C8\u3092\u30EA\u30B9\u30C8\u3057\u307E\u3059\ncatch [uncaught|caught|all] <class id>|<class pattern>\n                          -- \u6307\u5B9A\u3055\u308C\u305F\u4F8B\u5916\u304C\u767A\u751F\u3057\u305F\u3068\u304D\u306B\u30D6\u30EC\u30FC\u30AF\u3057\u307E\u3059\nignore [uncaught|caught|all] <class id>|<class pattern>\n                          -- \u6307\u5B9A\u3055\u308C\u305F\u4F8B\u5916\u306E'catch'\u3092\u53D6\u308A\u6D88\u3057\u307E\u3059\nwatch [access|all] <class id>.<field name>\n                          -- \u30D5\u30A3\u30FC\u30EB\u30C9\u3078\u306E\u30A2\u30AF\u30BB\u30B9\u307E\u305F\u306F\u5909\u66F4\u3092\u76E3\u8996\u3057\u307E\u3059\nunwatch [access|all] <class id>.<field name>\n                          -- \u30D5\u30A3\u30FC\u30EB\u30C9\u3078\u306E\u30A2\u30AF\u30BB\u30B9\u307E\u305F\u306F\u5909\u66F4\u306E\u76E3\u8996\u3092\u4E2D\u6B62\u3057\u307E\u3059\ntrace [go] methods [thread]\n                          -- \u30E1\u30BD\u30C3\u30C9\u306E\u5165\u308A\u53E3\u3068\u51FA\u53E3\u3092\u30C8\u30EC\u30FC\u30B9\u3057\u307E\u3059\u3002\n                          -- 'go'\u304C\u6307\u5B9A\u3055\u308C\u308B\u307E\u3067\u3059\u3079\u3066\u306E\u30B9\u30EC\u30C3\u30C9\u306F\u4E2D\u65AD\u3057\u307E\u3059\ntrace [go] method exit | exits [thread]\n                          -- \u73FE\u5728\u306E\u30E1\u30BD\u30C3\u30C9\u306E\u51FA\u53E3\u307E\u305F\u306F\u3059\u3079\u3066\u306E\u30E1\u30BD\u30C3\u30C9\u306E\u51FA\u53E3\u3092\u30C8\u30EC\u30FC\u30B9\u3057\u307E\u3059\n                          -- 'go'\u304C\u6307\u5B9A\u3055\u308C\u308B\u307E\u3067\u3059\u3079\u3066\u306E\u30B9\u30EC\u30C3\u30C9\u306F\u4E2D\u65AD\u3057\u307E\u3059\nuntrace [methods]         -- \u30E1\u30BD\u30C3\u30C9\u306E\u958B\u59CB\u307E\u305F\u306F\u7D42\u4E86\u306E\u30C8\u30EC\u30FC\u30B9\u3092\u505C\u6B62\u3057\u307E\u3059\nstep                      -- \u73FE\u5728\u306E\u884C\u3092\u5B9F\u884C\u3057\u307E\u3059\nstep up                   -- \u73FE\u5728\u306E\u30E1\u30BD\u30C3\u30C9\u304C\u30E1\u30BD\u30C3\u30C9\u306E\u547C\u51FA\u3057\u5143\u306B\u623B\u308B\u307E\u3067\u5B9F\u884C\u3057\u307E\u3059\nstepi                     -- \u73FE\u5728\u306E\u547D\u4EE4\u3092\u5B9F\u884C\u3057\u307E\u3059\nnext                      -- 1\u884C\u3092\u30B9\u30C6\u30C3\u30D7\u5B9F\u884C\u3057\u307E\u3059(\u547C\u51FA\u3057\u3092\u30B9\u30C6\u30C3\u30D7\u30AA\u30FC\u30D0\u30FC)\ncont                      -- \u30D6\u30EC\u30FC\u30AF\u30DD\u30A4\u30F3\u30C8\u304B\u3089\u5B9F\u884C\u3092\u7D9A\u884C\u3057\u307E\u3059\n\nlist [line number|method] -- \u30BD\u30FC\u30B9\u30FB\u30B3\u30FC\u30C9\u3092\u51FA\u529B\u3057\u307E\u3059\nuse (or sourcepath) [source file path]\n                          -- \u30BD\u30FC\u30B9\u30FB\u30D1\u30B9\u3092\u8868\u793A\u307E\u305F\u306F\u5909\u66F4\u3057\u307E\u3059\nexclude [<class pattern>, ... | \"none\"]\n                          -- \u6307\u5B9A\u3057\u305F\u30AF\u30E9\u30B9\u306E\u30B9\u30C6\u30C3\u30D7\u3084\u30E1\u30BD\u30C3\u30C9\u30FB\u30A4\u30D9\u30F3\u30C8\u3092\u5831\u544A\u3057\u307E\u305B\u3093\nclasspath                 -- \u30BF\u30FC\u30B2\u30C3\u30C8VM\u304B\u3089\u30AF\u30E9\u30B9\u30D1\u30B9\u60C5\u5831\u3092\u51FA\u529B\u3057\u307E\u3059\n\nmonitor <command>         -- \u30D7\u30ED\u30B0\u30E9\u30E0\u304C\u505C\u6B62\u3059\u308B\u305F\u3073\u306B\u30B3\u30DE\u30F3\u30C9\u3092\u5B9F\u884C\u3057\u307E\u3059\nmonitor                   -- \u30E2\u30CB\u30BF\u30FC\u3092\u30EA\u30B9\u30C8\u3057\u307E\u3059\nunmonitor <monitor#>      -- \u30E2\u30CB\u30BF\u30FC\u3092\u524A\u9664\u3057\u307E\u3059\nread <filename>           -- \u30B3\u30DE\u30F3\u30C9\u30FB\u30D5\u30A1\u30A4\u30EB\u3092\u8AAD\u307F\u53D6\u3063\u3066\u5B9F\u884C\u3057\u307E\u3059\n\nlock <expr>               -- \u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306E\u30ED\u30C3\u30AF\u60C5\u5831\u3092\u51FA\u529B\u3057\u307E\u3059\nthreadlocks [thread id]   -- \u30B9\u30EC\u30C3\u30C9\u306E\u30ED\u30C3\u30AF\u60C5\u5831\u3092\u51FA\u529B\u3057\u307E\u3059\n\npop                       -- \u73FE\u5728\u306E\u30D5\u30EC\u30FC\u30E0\u307E\u3067\u306E\u3059\u3079\u3066\u306E\u30B9\u30BF\u30C3\u30AF\u3092\u30DD\u30C3\u30D7\u3057\u307E\u3059\nreenter                   -- pop\u3068\u540C\u3058\u3067\u3059\u304C\u3001\u73FE\u5728\u306E\u30D5\u30EC\u30FC\u30E0\u304C\u518D\u5165\u529B\u3055\u308C\u307E\u3059\nredefine <class id> <class file name>\n                          -- \u30AF\u30E9\u30B9\u306E\u30B3\u30FC\u30C9\u3092\u518D\u5B9A\u7FA9\u3057\u307E\u3059\n\ndisablegc <expr>          -- \u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306E\u30AC\u30D9\u30FC\u30B8\u30FB\u30B3\u30EC\u30AF\u30B7\u30E7\u30F3\u3092\u6291\u5236\u3057\u307E\u3059\nenablegc <expr>           -- \u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306E\u30AC\u30D9\u30FC\u30B8\u30FB\u30B3\u30EC\u30AF\u30B7\u30E7\u30F3\u3092\u8A31\u53EF\u3057\u307E\u3059\n\n!!                        -- \u6700\u5F8C\u306E\u30B3\u30DE\u30F3\u30C9\u3092\u7E70\u308A\u8FD4\u3057\u307E\u3059\n<n> <command>             -- \u30B3\u30DE\u30F3\u30C9\u3092n\u56DE\u7E70\u308A\u8FD4\u3057\u307E\u3059\n# <command>               -- \u7834\u68C4\u3057\u307E\u3059(\u64CD\u4F5C\u306A\u3057)\nhelp (\u307E\u305F\u306F?)               -- \u30B3\u30DE\u30F3\u30C9\u3092\u30EA\u30B9\u30C8\u3057\u307E\u3059\nversion                   -- \u30D0\u30FC\u30B8\u30E7\u30F3\u60C5\u5831\u3092\u51FA\u529B\u3057\u307E\u3059\nexit (\u307E\u305F\u306Fquit)            -- \u30C7\u30D0\u30C3\u30AC\u3092\u7D42\u4E86\u3057\u307E\u3059\n\n<class id>: \u30D1\u30C3\u30B1\u30FC\u30B8\u4FEE\u98FE\u5B50\u3092\u542B\u3080\u5B8C\u5168\u30AF\u30E9\u30B9\u540D\n<class pattern>: \u5148\u982D\u307E\u305F\u306F\u672B\u5C3E\u306E\u30EF\u30A4\u30EB\u30C9\u30AB\u30FC\u30C9('*')\u3092\u542B\u3080\u30AF\u30E9\u30B9\u540D\n<thread id>: 'threads'\u30B3\u30DE\u30F3\u30C9\u3067\u5831\u544A\u3055\u308C\u308B\u30B9\u30EC\u30C3\u30C9\u756A\u53F7\n<expr>: Java(TM)\u30D7\u30ED\u30B0\u30E9\u30DF\u30F3\u30B0\u8A00\u8A9E\u306E\u5F0F\u3002\n\u307B\u3068\u3093\u3069\u306E\u4E00\u822C\u7684\u306A\u69CB\u6587\u304C\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u307E\u3059\u3002\n\n\u8D77\u52D5\u30B3\u30DE\u30F3\u30C9\u306F\u3001\"jdb.ini\"\u307E\u305F\u306F\".jdbrc\"\u306B\u914D\u7F6E\u3067\u304D\u307E\u3059\n(user.home\u307E\u305F\u306Fuser.dir\u5185)"},
-        {"zz usage text",
-             "\u4F7F\u7528\u65B9\u6CD5: {0} <options> <class> <arguments>\n\n\u30AA\u30D7\u30B7\u30E7\u30F3\u306F\u6B21\u306E\u3068\u304A\u308A\u3067\u3059:\n    -help             \u3053\u306E\u30E1\u30C3\u30BB\u30FC\u30B8\u3092\u51FA\u529B\u3057\u3066\u7D42\u4E86\u3059\u308B\n    -sourcepath <directories separated by \"{1}\">\n                      \u30BD\u30FC\u30B9\u30FB\u30D5\u30A1\u30A4\u30EB\u3092\u691C\u7D22\u3059\u308B\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\n    -attach <address>\n                      \u6A19\u6E96\u30B3\u30CD\u30AF\u30BF\u3092\u4F7F\u7528\u3057\u3066\u3001\u6307\u5B9A\u3055\u308C\u305F\u30A2\u30C9\u30EC\u30B9\u3067\u5B9F\u884C\u4E2D\u306EVM\u306B\u63A5\u7D9A\u3059\u308B\n    -listen <address>\n                      \u6A19\u6E96\u30B3\u30CD\u30AF\u30BF\u3092\u4F7F\u7528\u3057\u3066\u3001\u6307\u5B9A\u3055\u308C\u305F\u30A2\u30C9\u30EC\u30B9\u3067\u5B9F\u884C\u4E2D\u306EVM\u306E\u63A5\u7D9A\u3092\u5F85\u6A5F\u3059\u308B\n    -listenany\n                      \u6A19\u6E96\u30B3\u30CD\u30AF\u30BF\u3092\u4F7F\u7528\u3057\u3066\u3001\u4F7F\u7528\u53EF\u80FD\u306A\u4EFB\u610F\u306E\u30A2\u30C9\u30EC\u30B9\u3067\u5B9F\u884C\u4E2D\u306EVM\u306E\u63A5\u7D9A\u3092\u5F85\u6A5F\u3059\u308B\n    -launch\n                      ''run''\u30B3\u30DE\u30F3\u30C9\u3092\u5F85\u6A5F\u305B\u305A\u306BVM\u3092\u5373\u6642\u306B\u8D77\u52D5\u3059\u308B\n    -listconnectors   \u3053\u306EVM\u3067\u4F7F\u7528\u53EF\u80FD\u306A\u30B3\u30CD\u30AF\u30BF\u3092\u30EA\u30B9\u30C8\u3059\u308B\n    -connect <connector-name>:<name1>=<value1>,...\n                      \u6307\u5B9A\u3055\u308C\u305F\u30B3\u30CD\u30AF\u30BF\u3092\u4F7F\u7528\u3057\u3066\u3001\u30EA\u30B9\u30C8\u3055\u308C\u305F\u5F15\u6570\u5024\u3067\u30BF\u30FC\u30B2\u30C3\u30C8VM\u306B\u63A5\u7D9A\u3059\u308B\n    -dbgtrace [flags] {0}\u306E\u30C7\u30D0\u30C3\u30B0\u306E\u60C5\u5831\u3092\u51FA\u529B\u3059\u308B\n    -tclient          \u30A2\u30D7\u30EA\u30B1\u30FC\u30B7\u30E7\u30F3\u3092HotSpot(TM) Client Compiler\u3067\u5B9F\u884C\u3059\u308B\n    -tserver          \u30A2\u30D7\u30EA\u30B1\u30FC\u30B7\u30E7\u30F3\u3092HotSpot(TM) Server Compiler\u3067\u5B9F\u884C\u3059\u308B\n\n\u30AA\u30D7\u30B7\u30E7\u30F3\u306F\u30C7\u30D0\u30C3\u30B0\u3059\u308B\u30D7\u30ED\u30BB\u30B9\u306B\u8EE2\u9001\u3055\u308C\u307E\u3059:\n    -v -verbose[:class|gc|jni]\n                      \u8A73\u7D30\u30E2\u30FC\u30C9\u3092\u30AA\u30F3\u306B\u3059\u308B\n    -D<name>=<value>  \u30B7\u30B9\u30C6\u30E0\u30FB\u30D7\u30ED\u30D1\u30C6\u30A3\u3092\u8A2D\u5B9A\u3059\u308B\n    -classpath <directories separated by \"{1}\">\n                      \u30AF\u30E9\u30B9\u3092\u691C\u7D22\u3059\u308B\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u3092\u30EA\u30B9\u30C8\u3059\u308B\n    -X<option>        \u975E\u6A19\u6E96\u306E\u30BF\u30FC\u30B2\u30C3\u30C8VM\u30AA\u30D7\u30B7\u30E7\u30F3\n\n<class>\u306F\u30C7\u30D0\u30C3\u30B0\u3092\u958B\u59CB\u3059\u308B\u30AF\u30E9\u30B9\u306E\u540D\u524D\u3067\u3059\n<arguments>\u306F<class>\u306Emain()\u30E1\u30BD\u30C3\u30C9\u306B\u6E21\u3055\u308C\u308B\u5F15\u6570\u3067\u3059\n\n\u30B3\u30DE\u30F3\u30C9\u306E\u30D8\u30EB\u30D7\u306B\u3064\u3044\u3066\u306F{0}\u30D7\u30ED\u30F3\u30D7\u30C8\u3067''help''\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044"},
-        // END OF MATERIAL TO LOCALIZE
-        };
-
-        return temp;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/tty/TTYResources_zh_CN.java b/ojluni/src/main/java/com/sun/tools/example/debug/tty/TTYResources_zh_CN.java
deleted file mode 100755
index bb94621..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/tty/TTYResources_zh_CN.java
+++ /dev/null
@@ -1,336 +0,0 @@
-/*
- * Copyright (c) 2001, 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
- * 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.tty;
-
-/**
- * <p> This class represents the <code>ResourceBundle</code>
- * for the following package(s):
- *
- * <ol>
- * <li> com.sun.tools.example.debug.tty
- * </ol>
- *
- */
-public class TTYResources_zh_CN extends java.util.ListResourceBundle {
-
-
-    /**
-     * Returns the contents of this <code>ResourceBundle</code>.
-     *
-     * <p>
-     *
-     * @return the contents of this <code>ResourceBundle</code>.
-     */
-    @Override
-    public Object[][] getContents() {
-        Object[][] temp = new Object[][] {
-        // NOTE: The value strings in this file containing "{0}" are
-        //       processed by the java.text.MessageFormat class.  Any
-        //       single quotes appearing in these strings need to be
-        //       doubled up.
-        //
-        // LOCALIZE THIS
-        {"** classes list **", "** \u7C7B\u5217\u8868 **\n{0}"},
-        {"** fields list **", "** \u5B57\u6BB5\u5217\u8868 **\n{0}"},
-        {"** methods list **", "** \u65B9\u6CD5\u5217\u8868 **\n{0}"},
-        {"*** Reading commands from", "*** \u6B63\u5728\u4ECE{0}\u8BFB\u53D6\u547D\u4EE4"},
-        {"All threads resumed.", "\u5DF2\u6062\u590D\u6240\u6709\u7EBF\u7A0B\u3002"},
-        {"All threads suspended.", "\u5DF2\u6302\u8D77\u6240\u6709\u7EBF\u7A0B\u3002"},
-        {"Argument is not defined for connector:", "\u6CA1\u6709\u4E3A\u8FDE\u63A5\u5668{1}\u5B9A\u4E49\u53C2\u6570{0}"},
-        {"Arguments match no method", "\u53C2\u6570\u4E0D\u4E0E\u4EFB\u4F55\u65B9\u6CD5\u5339\u914D"},
-        {"Array:", "\u6570\u7EC4: {0}"},
-        {"Array element is not a method", "\u6570\u7EC4\u5143\u7D20\u4E0D\u662F\u65B9\u6CD5"},
-        {"Array index must be a integer type", "\u6570\u7EC4\u7D22\u5F15\u5FC5\u987B\u4E3A\u6574\u6570\u7C7B\u578B"},
-        {"base directory:", "\u57FA\u76EE\u5F55: {0}"},
-        {"bootclasspath:", "\u5F15\u5BFC\u7C7B\u8DEF\u5F84: {0}"},
-        {"Breakpoint hit:", "\u65AD\u70B9\u547D\u4E2D: "},
-        {"breakpoint", "\u65AD\u70B9{0}"},
-        {"Breakpoints set:", "\u65AD\u70B9\u96C6:"},
-        {"Breakpoints can be located only in classes.", "\u65AD\u70B9\u53EA\u80FD\u4F4D\u4E8E\u7C7B\u4E2D\u3002{0}\u662F\u63A5\u53E3\u6216\u6570\u7EC4\u3002"},
-        {"Can only trace", "\u53EA\u80FD\u8DDF\u8E2A 'methods', 'method exit' \u6216 'method exits'"},
-        {"cannot redefine existing connection", "{0}\u65E0\u6CD5\u91CD\u65B0\u5B9A\u4E49\u73B0\u6709\u8FDE\u63A5"},
-        {"Cannot assign to a method invocation", "\u65E0\u6CD5\u5206\u914D\u5230\u65B9\u6CD5\u8C03\u7528"},
-        {"Cannot specify command line with connector:", "\u65E0\u6CD5\u6307\u5B9A\u5E26\u6709\u8FDE\u63A5\u5668\u7684\u547D\u4EE4\u884C: {0}"},
-        {"Cannot specify target vm arguments with connector:", "\u65E0\u6CD5\u6307\u5B9A\u5E26\u6709\u8FDE\u63A5\u5668\u7684\u76EE\u6807 VM \u53C2\u6570: {0}"},
-        {"Class containing field must be specified.", "\u5FC5\u987B\u6307\u5B9A\u5305\u542B\u5B57\u6BB5\u7684\u7C7B\u3002"},
-        {"Class:", "\u7C7B: {0}"},
-        {"Classic VM no longer supported.", "\u4E0D\u518D\u652F\u6301\u7ECF\u5178 VM\u3002"},
-        {"classpath:", "\u7C7B\u8DEF\u5F84: {0}"},
-        {"colon mark", ":"},
-        {"colon space", ": "},
-        {"Command is not supported on the target VM", "\u76EE\u6807 VM \u4E0D\u652F\u6301\u547D\u4EE4 ''{0}''"},
-        {"Command is not supported on a read-only VM connection", "\u53EA\u8BFB VM \u8FDE\u63A5\u4E0D\u652F\u6301\u547D\u4EE4 ''{0}''"},
-        {"Command not valid until the VM is started with the run command", "\u5728\u4F7F\u7528 ''run'' \u547D\u4EE4\u542F\u52A8 VM \u524D, \u547D\u4EE4 ''{0}'' \u662F\u65E0\u6548\u7684"},
-        {"Condition must be boolean", "\u6761\u4EF6\u5FC5\u987B\u662F\u5E03\u5C14\u578B"},
-        {"Connector and Transport name", "  \u8FDE\u63A5\u5668: {0}, \u4F20\u8F93: {1}"},
-        {"Connector argument nodefault", "    \u53C2\u6570: {0} (\u65E0\u9ED8\u8BA4\u503C)"},
-        {"Connector argument default", "    \u53C2\u6570: {0}, \u9ED8\u8BA4\u503C: {1}"},
-        {"Connector description", "    \u8BF4\u660E: {0}"},
-        {"Connector required argument nodefault", "    \u6240\u9700\u7684\u53C2\u6570: {0} (\u65E0\u9ED8\u8BA4\u503C)"},
-        {"Connector required argument default", "    \u6240\u9700\u7684\u53C2\u6570: {0}, \u9ED8\u8BA4\u503C: {1}"},
-        {"Connectors available", "\u53EF\u7528\u8FDE\u63A5\u5668\u4E3A:"},
-        {"Constant is not a method", "\u5E38\u91CF\u4E0D\u662F\u65B9\u6CD5"},
-        {"Could not open:", "\u65E0\u6CD5\u6253\u5F00: {0}"},
-        {"Current method is native", "\u5F53\u524D\u65B9\u6CD5\u4E3A\u672C\u673A\u65B9\u6CD5"},
-        {"Current thread died. Execution continuing...", "\u5F53\u524D\u7EBF\u7A0B{0}\u5DF2\u6210\u4E3A\u6B7B\u7EBF\u7A0B\u3002\u7EE7\u7EED\u6267\u884C..."},
-        {"Current thread isnt suspended.", "\u5F53\u524D\u7EBF\u7A0B\u672A\u6302\u8D77\u3002"},
-        {"Current thread not set.", "\u5F53\u524D\u7EBF\u7A0B\u672A\u8BBE\u7F6E\u3002"},
-        {"dbgtrace flag value must be an integer:", "dbgtrace \u6807\u8BB0\u503C\u5FC5\u987B\u4E3A\u6574\u6570: {0}"},
-        {"Deferring.", "\u6B63\u5728\u5EF6\u8FDF{0}\u3002\n\u5C06\u5728\u52A0\u8F7D\u7C7B\u540E\u8BBE\u7F6E\u3002"},
-        {"End of stack.", "\u5806\u6808\u7ED3\u675F\u3002"},
-        {"Error popping frame", "\u4F7F\u5E27\u51FA\u6808\u65F6\u51FA\u9519 - {0}"},
-        {"Error reading file", "\u8BFB\u53D6 ''{0}'' \u65F6\u51FA\u9519 - {1}"},
-        {"Error redefining class to file", "\u5C06{0}\u91CD\u65B0\u5B9A\u4E49\u4E3A{1}\u65F6\u51FA\u9519 - {2}"},
-        {"exceptionSpec all", "\u6240\u6709{0}"},
-        {"exceptionSpec caught", "\u6355\u83B7\u7684{0}"},
-        {"exceptionSpec uncaught", "\u672A\u6355\u83B7\u7684{0}"},
-        {"Exception in expression:", "\u8868\u8FBE\u5F0F\u4E2D\u51FA\u73B0\u5F02\u5E38\u9519\u8BEF: {0}"},
-        {"Exception occurred caught", "\u51FA\u73B0\u5F02\u5E38\u9519\u8BEF: {0} (\u5C06\u5728\u4EE5\u4E0B\u4F4D\u7F6E\u6355\u83B7: {1})"},
-        {"Exception occurred uncaught", "\u51FA\u73B0\u5F02\u5E38\u9519\u8BEF: {0} (\u672A\u6355\u83B7)"},
-        {"Exceptions caught:", "\u51FA\u73B0\u8FD9\u4E9B\u5F02\u5E38\u9519\u8BEF\u65F6\u4E2D\u65AD:"},
-        {"expr is null", "{0} = \u7A7A\u503C"},
-        {"expr is value", "{0} = {1}"},
-        {"expr is value <collected>", "  {0} = {1} <\u5DF2\u6536\u96C6>"},
-        {"Expression cannot be void", "\u8868\u8FBE\u5F0F\u4E0D\u80FD\u4E3A\u7A7A"},
-        {"Expression must evaluate to an object", "\u8868\u8FBE\u5F0F\u7684\u8BA1\u7B97\u7ED3\u679C\u5FC5\u987B\u4E3A\u5BF9\u8C61"},
-        {"extends:", "\u6269\u5C55: {0}"},
-        {"Failed reading output", "\u65E0\u6CD5\u8BFB\u53D6\u5B50 Java \u89E3\u91CA\u5668\u7684\u8F93\u51FA\u3002"},
-        {"Fatal error", "\u81F4\u547D\u9519\u8BEF:"},
-        {"Field access encountered before after", "\u5B57\u6BB5 ({0}) \u4E3A{1}, \u5C06\u4E3A{2}: "},
-        {"Field access encountered", "\u9047\u5230\u5B57\u6BB5 ({0}) \u8BBF\u95EE: "},
-        {"Field to unwatch not specified", "\u672A\u6307\u5B9A\u8981\u53D6\u6D88\u76D1\u89C6\u7684\u5B57\u6BB5\u3002"},
-        {"Field to watch not specified", "\u672A\u6307\u5B9A\u8981\u76D1\u89C6\u7684\u5B57\u6BB5\u3002"},
-        {"GC Disabled for", "\u5DF2\u5BF9{0}\u7981\u7528 GC:"},
-        {"GC Enabled for", "\u5DF2\u5BF9{0}\u542F\u7528 GC:"},
-        {"grouping begin character", "{"},
-        {"grouping end character", "}"},
-        {"Illegal Argument Exception", "\u975E\u6CD5\u53C2\u6570\u5F02\u5E38\u9519\u8BEF"},
-        {"Illegal connector argument", "\u975E\u6CD5\u8FDE\u63A5\u5668\u53C2\u6570: {0}"},
-        {"implementor:", "\u5B9E\u73B0\u8005: {0}"},
-        {"implements:", "\u5B9E\u73B0: {0}"},
-        {"Initializing progname", "\u6B63\u5728\u521D\u59CB\u5316{0}..."},
-        {"Input stream closed.", "\u8F93\u5165\u6D41\u5DF2\u5173\u95ED\u3002"},
-        {"Interface:", "\u63A5\u53E3: {0}"},
-        {"Internal debugger error.", "\u5185\u90E8\u8C03\u8BD5\u5668\u9519\u8BEF\u3002"},
-        {"Internal error: null ThreadInfo created", "\u5185\u90E8\u9519\u8BEF: \u521B\u5EFA\u4E86\u7A7A\u503C ThreadInfo"},
-        {"Internal error; unable to set", "\u5185\u90E8\u9519\u8BEF; \u65E0\u6CD5\u8BBE\u7F6E{0}"},
-        {"Internal exception during operation:", "\u64CD\u4F5C\u671F\u95F4\u51FA\u73B0\u5185\u90E8\u5F02\u5E38\u9519\u8BEF:\n    {0}"},
-        {"Internal exception:", "\u5185\u90E8\u5F02\u5E38\u9519\u8BEF:"},
-        {"Invalid argument type name", "\u53C2\u6570\u7C7B\u578B\u540D\u79F0\u65E0\u6548"},
-        {"Invalid assignment syntax", "\u8D4B\u503C\u8BED\u6CD5\u65E0\u6548"},
-        {"Invalid command syntax", "\u547D\u4EE4\u8BED\u6CD5\u65E0\u6548"},
-        {"Invalid connect type", "\u8FDE\u63A5\u7C7B\u578B\u65E0\u6548"},
-        {"Invalid consecutive invocations", "\u8FDE\u7EED\u8C03\u7528\u65E0\u6548"},
-        {"Invalid exception object", "\u5F02\u5E38\u9519\u8BEF\u5BF9\u8C61\u65E0\u6548"},
-        {"Invalid method specification:", "\u65B9\u6CD5\u89C4\u8303\u65E0\u6548: {0}"},
-        {"Invalid option on class command", "\u7C7B\u547D\u4EE4\u7684\u9009\u9879\u65E0\u6548"},
-        {"invalid option", "\u9009\u9879\u65E0\u6548: {0}"},
-        {"Invalid thread status.", "\u7EBF\u7A0B\u72B6\u6001\u65E0\u6548\u3002"},
-        {"Invalid transport name:", "\u4F20\u8F93\u540D\u79F0\u65E0\u6548: {0}"},
-        {"I/O exception occurred:", "\u51FA\u73B0 I/O \u5F02\u5E38\u9519\u8BEF: {0}"},
-        {"is an ambiguous method name in", "\"{0}\" \u5728 \"{1}\" \u4E2D\u662F\u4E0D\u660E\u786E\u7684\u65B9\u6CD5\u540D\u79F0"},
-        {"is an invalid line number for",  "{0,number,integer} \u662F{1}\u7684\u65E0\u6548\u884C\u53F7"},
-        {"is not a valid class name", "\"{0}\" \u4E0D\u662F\u6709\u6548\u7684\u7C7B\u540D\u3002"},
-        {"is not a valid field name", "\"{0}\" \u4E0D\u662F\u6709\u6548\u7684\u5B57\u6BB5\u540D\u3002"},
-        {"is not a valid id or class name", "\"{0}\" \u4E0D\u662F\u6709\u6548\u7684 ID \u6216\u7C7B\u540D\u3002"},
-        {"is not a valid line number or method name for", "\"{0}\" \u4E0D\u662F\u7C7B \"{1}\" \u7684\u6709\u6548\u884C\u53F7\u6216\u65B9\u6CD5\u540D"},
-        {"is not a valid method name", "\"{0}\" \u4E0D\u662F\u6709\u6548\u7684\u65B9\u6CD5\u540D\u3002"},
-        {"is not a valid thread id", "\"{0}\" \u4E0D\u662F\u6709\u6548\u7684\u7EBF\u7A0B ID\u3002"},
-        {"is not a valid threadgroup name", "\"{0}\" \u4E0D\u662F\u6709\u6548\u7684\u7EBF\u7A0B\u7EC4\u540D\u79F0\u3002"},
-        {"jdb prompt with no current thread", "> "},
-        {"jdb prompt thread name and current stack frame", "{0}[{1,number,integer}] "},
-        {"killed", "{0}\u5DF2\u7EC8\u6B62"},
-        {"killing thread:", "\u6B63\u5728\u7EC8\u6B62\u7EBF\u7A0B: {0}"},
-        {"Line number information not available for", "\u6B64\u4F4D\u7F6E\u7684\u6E90\u884C\u53F7\u4E0D\u53EF\u7528\u3002"},
-        {"line number", ":{0,number,integer}"},
-        {"list field typename and name", "{0} {1}\n"},
-        {"list field typename and name inherited", "{0} {1} (\u7EE7\u627F\u81EA{2})\n"},
-        {"list field typename and name hidden", "{0} {1} (\u9690\u85CF)\n"},
-        {"Listening at address:", "\u76D1\u542C\u5730\u5740: {0}"},
-        {"Local variable information not available.", "\u672C\u5730\u53D8\u91CF\u4FE1\u606F\u4E0D\u53EF\u7528\u3002\u8BF7\u4F7F\u7528 -g \u7F16\u8BD1\u4EE5\u751F\u6210\u53D8\u91CF\u4FE1\u606F"},
-        {"Local variables:", "\u672C\u5730\u53D8\u91CF:"},
-        {"<location unavailable>", "<\u4F4D\u7F6E\u4E0D\u53EF\u7528>"},
-        {"location", "\"\u7EBF\u7A0B={0}\", {1}"},
-        {"locationString", "{0}.{1}(), \u884C={2,number,integer} bci={3,number,integer}"},
-        {"Main class and arguments must be specified", "\u5FC5\u987B\u6307\u5B9A\u4E3B\u7C7B\u548C\u53C2\u6570"},
-        {"Method arguments:", "\u65B9\u6CD5\u53C2\u6570:"},
-        {"Method entered:", "\u5DF2\u8FDB\u5165\u65B9\u6CD5: "},
-        {"Method exited:",  "\u5DF2\u9000\u51FA\u65B9\u6CD5"},
-        {"Method exitedValue:", "\u5DF2\u9000\u51FA\u65B9\u6CD5: \u8FD4\u56DE\u503C = {0}, "},
-        {"Method is overloaded; specify arguments", "\u5DF2\u91CD\u8F7D\u65B9\u6CD5{0}; \u8BF7\u6307\u5B9A\u53C2\u6570"},
-        {"minus version", "\u8FD9\u662F{0}\u7248\u672C {1,number,integer}.{2,number,integer} (Java SE \u7248\u672C {3})"},
-        {"Monitor information for thread", "\u76D1\u89C6\u7EBF\u7A0B{0}\u7684\u4FE1\u606F:"},
-        {"Monitor information for expr", "\u76D1\u89C6{0} ({1}) \u7684\u4FE1\u606F:"},
-        {"More than one class named", "\u591A\u4E2A\u7C7B\u7684\u540D\u79F0\u4E3A: ''{0}''"},
-        {"native method", "\u672C\u673A\u65B9\u6CD5"},
-        {"nested:", "\u5D4C\u5957: {0}"},
-        {"No attach address specified.", "\u672A\u6307\u5B9A\u9644\u52A0\u5730\u5740\u3002"},
-        {"No breakpoints set.", "\u672A\u8BBE\u7F6E\u65AD\u70B9\u3002"},
-        {"No class named", "\u6CA1\u6709\u540D\u4E3A ''{0}'' \u7684\u7C7B"},
-        {"No class specified.", "\u672A\u6307\u5B9A\u7C7B\u3002"},
-        {"No classpath specified.", "\u672A\u6307\u5B9A\u7C7B\u8DEF\u5F84\u3002"},
-        {"No code at line", "{1}\u4E2D\u7684\u884C {0,number,integer} \u5904\u6CA1\u6709\u4EE3\u7801"},
-        {"No connect specification.", "\u6CA1\u6709\u8FDE\u63A5\u89C4\u8303\u3002"},
-        {"No connector named:", "\u6CA1\u6709\u540D\u4E3A{0}\u7684\u8FDE\u63A5\u5668"},
-        {"No current thread", "\u6CA1\u6709\u5F53\u524D\u7EBF\u7A0B"},
-        {"No default thread specified:", "\u672A\u6307\u5B9A\u9ED8\u8BA4\u7EBF\u7A0B: \u8BF7\u5148\u4F7F\u7528 \"thread\" \u547D\u4EE4\u3002"},
-        {"No exception object specified.", "\u672A\u6307\u5B9A\u5F02\u5E38\u9519\u8BEF\u5BF9\u8C61\u3002"},
-        {"No exceptions caught.", "\u672A\u6355\u83B7\u5230\u5F02\u5E38\u9519\u8BEF\u3002"},
-        {"No expression specified.", "\u672A\u6307\u5B9A\u8868\u8FBE\u5F0F\u3002"},
-        {"No field in", "{1}\u4E2D\u6CA1\u6709\u5B57\u6BB5{0}"},
-        {"No frames on the current call stack", "\u5F53\u524D\u8C03\u7528\u5806\u6808\u4E0A\u6CA1\u6709\u5E27"},
-        {"No linenumber information for", "{0}\u6CA1\u6709\u884C\u53F7\u4FE1\u606F\u3002\u8BF7\u5C1D\u8BD5\u5728\u542F\u7528\u8C03\u8BD5\u7684\u60C5\u51B5\u4E0B\u7F16\u8BD1\u3002"},
-        {"No local variables", "\u6CA1\u6709\u672C\u5730\u53D8\u91CF"},
-        {"No method in", "{1}\u4E2D\u6CA1\u6709\u65B9\u6CD5{0}"},
-        {"No method specified.", "\u672A\u6307\u5B9A\u65B9\u6CD5\u3002"},
-        {"No monitor numbered:", "\u6CA1\u6709\u7F16\u53F7\u4E3A {0} \u7684\u76D1\u89C6\u5668"},
-        {"No monitors owned", "  \u4E0D\u62E5\u6709\u76D1\u89C6\u5668"},
-        {"No object specified.", "\u672A\u6307\u5B9A\u5BF9\u8C61\u3002"},
-        {"No objects specified.", "\u672A\u6307\u5B9A\u5BF9\u8C61\u3002"},
-        {"No save index specified.", "\u672A\u6307\u5B9A\u4FDD\u5B58\u7D22\u5F15\u3002"},
-        {"No saved values", "\u6CA1\u6709\u4FDD\u5B58\u7684\u503C"},
-        {"No source information available for:", "\u6CA1\u6709\u53EF\u7528\u4E8E{0}\u7684\u6E90\u4FE1\u606F"},
-        {"No sourcedebugextension specified", "\u672A\u6307\u5B9A SourceDebugExtension"},
-        {"No sourcepath specified.", "\u672A\u6307\u5B9A\u6E90\u8DEF\u5F84\u3002"},
-        {"No thread specified.", "\u672A\u6307\u5B9A\u7EBF\u7A0B\u3002"},
-        {"No VM connected", "\u672A\u8FDE\u63A5 VM"},
-        {"No waiters", "  \u6CA1\u6709\u7B49\u5F85\u8FDB\u7A0B"},
-        {"not a class", "{0}\u4E0D\u662F\u7C7B"},
-        {"Not a monitor number:", "\u4E0D\u662F\u76D1\u89C6\u5668\u7F16\u53F7: ''{0}''"},
-        {"not found (try the full name)", "\u627E\u4E0D\u5230{0} (\u8BF7\u5C1D\u8BD5\u4F7F\u7528\u5168\u540D)"},
-        {"Not found:", "\u627E\u4E0D\u5230: {0}"},
-        {"not found", "\u627E\u4E0D\u5230{0}"},
-        {"Not owned", "  \u4E0D\u62E5\u6709"},
-        {"Not waiting for a monitor", "  \u672A\u7B49\u5F85\u76D1\u89C6\u5668"},
-        {"Nothing suspended.", "\u672A\u6302\u8D77\u4EFB\u4F55\u5BF9\u8C61\u3002"},
-        {"object description and hex id", "({0}){1}"},
-        {"Operation is not supported on the target VM", "\u76EE\u6807 VM \u4E0D\u652F\u6301\u8BE5\u64CD\u4F5C"},
-        {"operation not yet supported", "\u5C1A\u4E0D\u652F\u6301\u8BE5\u64CD\u4F5C"},
-        {"Owned by:", "  \u62E5\u6709\u8005: {0}, \u6761\u76EE\u8BA1\u6570: {1,number,integer}"},
-        {"Owned monitor:", "  \u62E5\u6709\u7684\u76D1\u89C6\u5668: {0}"},
-        {"Parse exception:", "\u89E3\u6790\u5F02\u5E38\u9519\u8BEF: {0}"},
-        {"printbreakpointcommandusage", "\u7528\u6CD5: {0} <class>:<line_number> \u6216\n       {1} <class>.<method_name>[(argument_type,...)]"},
-        {"Removed:", "\u5DF2\u5220\u9664: {0}"},
-        {"Requested stack frame is no longer active:", "\u8BF7\u6C42\u7684\u5806\u6808\u5E27\u4E0D\u518D\u6709\u6548: {0,number,integer}"},
-        {"run <args> command is valid only with launched VMs", "'run <args>' \u547D\u4EE4\u4EC5\u5BF9\u542F\u52A8\u7684 VM \u6709\u6548"},
-        {"run", "\u8FD0\u884C{0}"},
-        {"saved", "{0}\u5DF2\u4FDD\u5B58"},
-        {"Set deferred", "\u8BBE\u7F6E\u5EF6\u8FDF\u7684{0}"},
-        {"Set", "\u8BBE\u7F6E{0}"},
-        {"Source file not found:", "\u627E\u4E0D\u5230\u6E90\u6587\u4EF6: {0}"},
-        {"source line number and line", "{0,number,integer}    {1}"},
-        {"source line number current line and line", "{0,number,integer} => {1}"},
-        {"sourcedebugextension", "SourceDebugExtension -- {0}"},
-        {"Specify class and method", "\u6307\u5B9A\u7C7B\u548C\u65B9\u6CD5"},
-        {"Specify classes to redefine", "\u6307\u5B9A\u8981\u91CD\u65B0\u5B9A\u4E49\u7684\u7C7B"},
-        {"Specify file name for class", "\u6307\u5B9A\u7C7B{0}\u7684\u6587\u4EF6\u540D"},
-        {"stack frame dump with pc", "  [{0,number,integer}] {1}.{2} ({3}), pc = {4}"},
-        {"stack frame dump", "  [{0,number,integer}] {1}.{2} ({3})"},
-        {"Step completed:", "\u5DF2\u5B8C\u6210\u7684\u6B65\u9AA4: "},
-        {"Stopping due to deferred breakpoint errors.", "\u7531\u4E8E\u5EF6\u8FDF\u65AD\u70B9\u9519\u8BEF\u800C\u505C\u6B62\u3002\n"},
-        {"subclass:", "\u5B50\u7C7B: {0}"},
-        {"subinterface:", "\u5B50\u63A5\u53E3: {0}"},
-        {"tab", "\t{0}"},
-        {"Target VM failed to initialize.", "\u65E0\u6CD5\u521D\u59CB\u5316\u76EE\u6807 VM\u3002"},
-        {"The application exited", "\u5E94\u7528\u7A0B\u5E8F\u5DF2\u9000\u51FA"},
-        {"The application has been disconnected", "\u5E94\u7528\u7A0B\u5E8F\u5DF2\u65AD\u5F00\u8FDE\u63A5"},
-        {"The gc command is no longer necessary.", "\u4E0D\u518D\u9700\u8981 'gc' \u547D\u4EE4\u3002\n\u6240\u6709\u5BF9\u8C61\u5DF2\u7167\u5E38\u8FDB\u884C\u5783\u573E\u6536\u96C6\u3002\u8BF7\u4F7F\u7528 'enablegc' \u548C 'disablegc'\n\u547D\u4EE4\u6765\u63A7\u5236\u5404\u4E2A\u5BF9\u8C61\u7684\u5783\u573E\u6536\u96C6\u3002"},
-        {"The load command is no longer supported.", "\u4E0D\u518D\u652F\u6301 'load' \u547D\u4EE4\u3002"},
-        {"The memory command is no longer supported.", "\u4E0D\u518D\u652F\u6301 'memory' \u547D\u4EE4\u3002"},
-        {"The VM does not use paths", "VM \u4E0D\u4F7F\u7528\u8DEF\u5F84"},
-        {"Thread is not running (no stack).", "\u7EBF\u7A0B\u672A\u8FD0\u884C (\u6CA1\u6709\u5806\u6808)\u3002"},
-        {"Thread number not specified.", "\u672A\u6307\u5B9A\u7EBF\u7A0B\u7F16\u53F7\u3002"},
-        {"Thread:", "{0}:"},
-        {"Thread Group:", "\u7EC4{0}:"},
-        {"Thread description name unknownStatus BP",  "  {0} {1}\u672A\u77E5 (\u5728\u65AD\u70B9\u5904)"},
-        {"Thread description name unknownStatus",     "  {0} {1}\u672A\u77E5"},
-        {"Thread description name zombieStatus BP",   "  {0} {1}\u5904\u4E8E\u50F5\u6B7B\u72B6\u6001 (\u5728\u65AD\u70B9\u5904)"},
-        {"Thread description name zombieStatus",      "  {0} {1}\u5904\u4E8E\u50F5\u6B7B\u72B6\u6001"},
-        {"Thread description name runningStatus BP",  "  {0} {1}\u6B63\u5728\u8FD0\u884C (\u5728\u65AD\u70B9\u5904)"},
-        {"Thread description name runningStatus",     "  {0} {1}\u6B63\u5728\u8FD0\u884C"},
-        {"Thread description name sleepingStatus BP", "  {0} {1}\u6B63\u5728\u4F11\u7720 (\u5728\u65AD\u70B9\u5904)"},
-        {"Thread description name sleepingStatus",    "  {0} {1}\u6B63\u5728\u4F11\u7720"},
-        {"Thread description name waitingStatus BP",  "  {0} {1}\u6B63\u5728\u7B49\u5F85\u76D1\u89C6\u5668 (\u5728\u65AD\u70B9\u5904)"},
-        {"Thread description name waitingStatus",     "  {0} {1}\u6B63\u5728\u7B49\u5F85\u76D1\u89C6\u5668"},
-        {"Thread description name condWaitstatus BP", "  {0} {1}\u6B63\u5728\u6267\u884C\u6761\u4EF6\u7B49\u5F85 (\u5728\u65AD\u70B9\u5904)"},
-        {"Thread description name condWaitstatus",    "  {0} {1}\u6B63\u5728\u6267\u884C\u6761\u4EF6\u7B49\u5F85"},
-        {"Thread has been resumed", "\u5DF2\u6062\u590D\u7EBF\u7A0B"},
-        {"Thread not suspended", "\u672A\u6302\u8D77\u7EBF\u7A0B"},
-        {"thread group number description name", "{0,number,integer}\u3002{1} {2}"},
-        {"Threadgroup name not specified.", "\u672A\u6307\u5B9A\u7EBF\u7A0B\u7EC4\u540D\u3002"},
-        {"Threads must be suspended", "\u5FC5\u987B\u6302\u8D77\u7EBF\u7A0B"},
-        {"trace method exit in effect for", "\u6B63\u5728\u5BF9{0}\u5B9E\u884C trace method exit"},
-        {"trace method exits in effect", "\u6B63\u5728\u5B9E\u884C trace method exits"},
-        {"trace methods in effect", "\u6B63\u5728\u5B9E\u884C trace methods"},
-        {"trace go method exit in effect for", "\u6B63\u5728\u5BF9{0}\u5B9E\u884C trace go method exit"},
-        {"trace go method exits in effect", "\u6B63\u5728\u5B9E\u884C trace go method exits"},
-        {"trace go methods in effect", "\u6B63\u5728\u5B9E\u884C trace go methods"},
-        {"trace not in effect", "\u672A\u5B9E\u884C trace"},
-        {"Unable to attach to target VM.", "\u65E0\u6CD5\u9644\u52A0\u5230\u76EE\u6807 VM\u3002"},
-        {"Unable to display process output:", "\u65E0\u6CD5\u663E\u793A\u8FDB\u7A0B\u8F93\u51FA: {0}"},
-        {"Unable to launch target VM.", "\u65E0\u6CD5\u542F\u52A8\u76EE\u6807 VM\u3002"},
-        {"Unable to set deferred", "\u65E0\u6CD5\u8BBE\u7F6E\u5EF6\u8FDF\u7684{0}: {1}"},
-        {"Unable to set main class and arguments", "\u65E0\u6CD5\u8BBE\u7F6E\u4E3B\u7C7B\u548C\u53C2\u6570"},
-        {"Unable to set", "\u65E0\u6CD5\u8BBE\u7F6E{0}: {1}"},
-        {"Unexpected event type", "\u610F\u5916\u7684\u4E8B\u4EF6\u7C7B\u578B: {0}"},
-        {"unknown", "\u672A\u77E5"},
-        {"Unmonitoring", "\u53D6\u6D88\u76D1\u89C6{0} "},
-        {"Unrecognized command.  Try help...", "\u65E0\u6CD5\u8BC6\u522B\u7684\u547D\u4EE4: ''{0}''\u3002\u8BF7\u5C1D\u8BD5\u83B7\u5F97\u5E2E\u52A9..."},
-        {"Usage: catch exception", "\u7528\u6CD5: catch [uncaught|caught|all] <class id>|<class pattern>"},
-        {"Usage: ignore exception", "\u7528\u6CD5: ignore [uncaught|caught|all] <class id>|<class pattern>"},
-        {"Usage: down [n frames]", "\u7528\u6CD5: down [n frames]"},
-        {"Usage: kill <thread id> <throwable>", "\u7528\u6CD5: kill <thread id> <throwable>"},
-        {"Usage: read <command-filename>", "\u7528\u6CD5: read <command-filename>"},
-        {"Usage: unmonitor <monitor#>", "\u7528\u6CD5: unmonitor <monitor#>"},
-        {"Usage: up [n frames]", "\u7528\u6CD5: up [n frames]"},
-        {"Use java minus X to see", "\u4F7F\u7528 'java -X' \u53EF\u4EE5\u67E5\u770B\u53EF\u7528\u7684\u975E\u6807\u51C6\u9009\u9879"},
-        {"Use stop at to set a breakpoint at a line number", "\u4F7F\u7528 'stop at' \u53EF\u4EE5\u5728\u884C\u53F7\u5904\u8BBE\u7F6E\u65AD\u70B9"},
-        {"VM already running. use cont to continue after events.", "VM \u5DF2\u5728\u8FD0\u884C\u3002\u8BF7\u4F7F\u7528 'cont' \u4EE5\u5728\u4E8B\u4EF6\u7ED3\u675F\u540E\u7EE7\u7EED\u3002"},
-        {"VM Started:", "VM \u5DF2\u542F\u52A8: "},
-        {"vmstartexception", "VM \u542F\u52A8\u5F02\u5E38\u9519\u8BEF: {0}"},
-        {"Waiting for monitor:", "   \u6B63\u5728\u7B49\u5F85\u76D1\u89C6\u5668: {0}"},
-        {"Waiting thread:", " \u6B63\u5728\u7B49\u5F85\u7EBF\u7A0B: {0}"},
-        {"watch accesses of", "\u76D1\u89C6{0}.{1}\u7684\u8BBF\u95EE"},
-        {"watch modification of", "\u76D1\u89C6{0}.{1}\u7684\u4FEE\u6539"},
-        {"zz help text",
-             "** \u547D\u4EE4\u5217\u8868 **\nconnectors                -- \u5217\u51FA\u6B64 VM \u4E2D\u53EF\u7528\u7684\u8FDE\u63A5\u5668\u548C\u4F20\u8F93\n\nrun [class [args]]        -- \u5F00\u59CB\u6267\u884C\u5E94\u7528\u7A0B\u5E8F\u7684\u4E3B\u7C7B\n\nthreads [threadgroup]     -- \u5217\u51FA\u7EBF\u7A0B\nthread <thread id>        -- \u8BBE\u7F6E\u9ED8\u8BA4\u7EBF\u7A0B\nsuspend [thread id(s)]    -- \u6302\u8D77\u7EBF\u7A0B (\u9ED8\u8BA4\u503C: all)\nresume [thread id(s)]     -- \u6062\u590D\u7EBF\u7A0B (\u9ED8\u8BA4\u503C: all)\nwhere [<thread id> | all] -- \u8F6C\u50A8\u7EBF\u7A0B\u7684\u5806\u6808\nwherei [<thread id> | all]-- \u8F6C\u50A8\u7EBF\u7A0B\u7684\u5806\u6808, \u4EE5\u53CA pc \u4FE1\u606F\nup [n frames]             -- \u4E0A\u79FB\u7EBF\u7A0B\u7684\u5806\u6808\ndown [n frames]           -- \u4E0B\u79FB\u7EBF\u7A0B\u7684\u5806\u6808\nkill <thread id> <expr>   -- \u7EC8\u6B62\u5177\u6709\u7ED9\u5B9A\u7684\u5F02\u5E38\u9519\u8BEF\u5BF9\u8C61\u7684\u7EBF\u7A0B\ninterrupt <thread id>     -- \u4E2D\u65AD\u7EBF\u7A0B\n\nprint <expr>              -- \u8F93\u51FA\u8868\u8FBE\u5F0F\u7684\u503C\ndump <expr>               -- \u8F93\u51FA\u6240\u6709\u5BF9\u8C61\u4FE1\u606F\neval <expr>               -- \u5BF9\u8868\u8FBE\u5F0F\u6C42\u503C (\u4E0E print \u76F8\u540C)\nset <lvalue> = <expr>     -- \u5411\u5B57\u6BB5/\u53D8\u91CF/\u6570\u7EC4\u5143\u7D20\u5206\u914D\u65B0\u503C\nlocals                    -- \u8F93\u51FA\u5F53\u524D\u5806\u6808\u5E27\u4E2D\u7684\u6240\u6709\u672C\u5730\u53D8\u91CF\n\nclasses                   -- \u5217\u51FA\u5F53\u524D\u5DF2\u77E5\u7684\u7C7B\nclass <class id>          -- \u663E\u793A\u5DF2\u547D\u540D\u7C7B\u7684\u8BE6\u7EC6\u8D44\u6599\nmethods <class id>        -- \u5217\u51FA\u7C7B\u7684\u65B9\u6CD5\nfields <class id>         -- \u5217\u51FA\u7C7B\u7684\u5B57\u6BB5\n\nthreadgroups              -- \u5217\u51FA\u7EBF\u7A0B\u7EC4\nthreadgroup <name>        -- \u8BBE\u7F6E\u5F53\u524D\u7EBF\u7A0B\u7EC4\n\nstop in <class id>.<method>[(argument_type,...)]\n                          -- \u5728\u65B9\u6CD5\u4E2D\u8BBE\u7F6E\u65AD\u70B9\nstop at <class id>:<line> -- \u5728\u884C\u4E2D\u8BBE\u7F6E\u65AD\u70B9\nclear <class id>.<method>[(argument_type,...)]\n                          -- \u6E05\u9664\u65B9\u6CD5\u4E2D\u7684\u65AD\u70B9\nclear <class id>:<line>   -- \u6E05\u9664\u884C\u4E2D\u7684\u65AD\u70B9\nclear                     -- \u5217\u51FA\u65AD\u70B9\ncatch [uncaught|caught|all] <class id>|<class pattern>\n                          -- \u51FA\u73B0\u6307\u5B9A\u7684\u5F02\u5E38\u9519\u8BEF\u65F6\u4E2D\u65AD\nignore [uncaught|caught|all] <class id>|<class pattern>\n                          -- \u5BF9\u4E8E\u6307\u5B9A\u7684\u5F02\u5E38\u9519\u8BEF, \u53D6\u6D88 'catch'\nwatch [access|all] <class id>.<field name>\n                          -- \u76D1\u89C6\u5BF9\u5B57\u6BB5\u7684\u8BBF\u95EE/\u4FEE\u6539\nunwatch [access|all] <class id>.<field name>\n                          -- \u505C\u6B62\u76D1\u89C6\u5BF9\u5B57\u6BB5\u7684\u8BBF\u95EE/\u4FEE\u6539\ntrace [go] methods [thread]\n                          -- \u8DDF\u8E2A\u65B9\u6CD5\u8FDB\u5165\u548C\u9000\u51FA\u3002\n                          -- \u9664\u975E\u6307\u5B9A 'go', \u5426\u5219\u6302\u8D77\u6240\u6709\u7EBF\u7A0B\ntrace [go] method exit | exits [thread]\n                          -- \u8DDF\u8E2A\u5F53\u524D\u65B9\u6CD5\u7684\u9000\u51FA, \u6216\u8005\u6240\u6709\u65B9\u6CD5\u7684\u9000\u51FA\n                          -- \u9664\u975E\u6307\u5B9A 'go', \u5426\u5219\u6302\u8D77\u6240\u6709\u7EBF\u7A0B\nuntrace [methods]         -- \u505C\u6B62\u8DDF\u8E2A\u65B9\u6CD5\u8FDB\u5165\u548C/\u6216\u9000\u51FA\nstep                      -- \u6267\u884C\u5F53\u524D\u884C\nstep up                   -- \u4E00\u76F4\u6267\u884C, \u76F4\u5230\u5F53\u524D\u65B9\u6CD5\u8FD4\u56DE\u5230\u5176\u8C03\u7528\u65B9\nstepi                     -- \u6267\u884C\u5F53\u524D\u6307\u4EE4\n\u4E0B\u4E00\u6B65                      -- \u6B65\u8FDB\u4E00\u884C (\u6B65\u8FC7\u8C03\u7528)\ncont                      -- \u4ECE\u65AD\u70B9\u5904\u7EE7\u7EED\u6267\u884C\n\nlist [line number|method] -- \u8F93\u51FA\u6E90\u4EE3\u7801\nuse (\u6216 sourcepath) [source file path]\n                          -- \u663E\u793A\u6216\u66F4\u6539\u6E90\u8DEF\u5F84\nexclude [<class pattern>, ... | \"none\"]\n                          -- \u5BF9\u4E8E\u6307\u5B9A\u7684\u7C7B, \u4E0D\u62A5\u544A\u6B65\u9AA4\u6216\u65B9\u6CD5\u4E8B\u4EF6\nclasspath                 -- \u4ECE\u76EE\u6807 VM \u8F93\u51FA\u7C7B\u8DEF\u5F84\u4FE1\u606F\n\nmonitor <command>         -- \u6BCF\u6B21\u7A0B\u5E8F\u505C\u6B62\u65F6\u6267\u884C\u547D\u4EE4\nmonitor                   -- \u5217\u51FA\u76D1\u89C6\u5668\nunmonitor <monitor#>      -- \u5220\u9664\u76D1\u89C6\u5668\nread <filename>           -- \u8BFB\u53D6\u5E76\u6267\u884C\u547D\u4EE4\u6587\u4EF6\n\nlock <expr>               -- \u8F93\u51FA\u5BF9\u8C61\u7684\u9501\u4FE1\u606F\nthreadlocks [thread id]   -- \u8F93\u51FA\u7EBF\u7A0B\u7684\u9501\u4FE1\u606F\n\npop                       -- \u901A\u8FC7\u5F53\u524D\u5E27\u51FA\u6808, \u4E14\u5305\u542B\u5F53\u524D\u5E27\nreenter                   -- \u4E0E pop \u76F8\u540C, \u4F46\u91CD\u65B0\u8FDB\u5165\u5F53\u524D\u5E27\nredefine <class id> <class file name>\n                          -- \u91CD\u65B0\u5B9A\u4E49\u7C7B\u7684\u4EE3\u7801\n\ndisablegc <expr>          -- \u7981\u6B62\u5BF9\u8C61\u7684\u5783\u573E\u6536\u96C6\nenablegc <expr>           -- \u5141\u8BB8\u5BF9\u8C61\u7684\u5783\u573E\u6536\u96C6\n\n!!                        -- \u91CD\u590D\u6267\u884C\u6700\u540E\u4E00\u4E2A\u547D\u4EE4\n<n> <command>             -- \u5C06\u547D\u4EE4\u91CD\u590D\u6267\u884C n \u6B21\n# <command>               -- \u653E\u5F03 (\u65E0\u64CD\u4F5C)\nhelp (\u6216 ?)               -- \u5217\u51FA\u547D\u4EE4\nversion                   -- \u8F93\u51FA\u7248\u672C\u4FE1\u606F\nexit (\u6216 quit)            -- \u9000\u51FA\u8C03\u8BD5\u5668\n\n<class id>: \u5E26\u6709\u7A0B\u5E8F\u5305\u9650\u5B9A\u7B26\u7684\u5B8C\u6574\u7C7B\u540D\n<class pattern>: \u5E26\u6709\u524D\u5BFC\u6216\u5C3E\u968F\u901A\u914D\u7B26 ('*') \u7684\u7C7B\u540D\n<thread id>: 'threads' \u547D\u4EE4\u4E2D\u62A5\u544A\u7684\u7EBF\u7A0B\u7F16\u53F7\n<expr>: Java(TM) \u7F16\u7A0B\u8BED\u8A00\u8868\u8FBE\u5F0F\u3002\n\u652F\u6301\u5927\u591A\u6570\u5E38\u89C1\u8BED\u6CD5\u3002\n\n\u53EF\u4EE5\u5C06\u542F\u52A8\u547D\u4EE4\u7F6E\u4E8E \"jdb.ini\" \u6216 \".jdbrc\" \u4E2D\n\u4F4D\u4E8E user.home \u6216 user.dir \u4E2D"},
-        {"zz usage text",
-             "\u7528\u6CD5: {0} <options> <class> <arguments>\n\n\u5176\u4E2D, \u9009\u9879\u5305\u62EC:\n    -help             \u8F93\u51FA\u6B64\u6D88\u606F\u5E76\u9000\u51FA\n    -sourcepath <\u7531 \"{1}\" \u5206\u9694\u7684\u76EE\u5F55>\n                      \u8981\u5728\u5176\u4E2D\u67E5\u627E\u6E90\u6587\u4EF6\u7684\u76EE\u5F55\n    -attach <address>\n                      \u4F7F\u7528\u6807\u51C6\u8FDE\u63A5\u5668\u9644\u52A0\u5230\u6307\u5B9A\u5730\u5740\u5904\u6B63\u5728\u8FD0\u884C\u7684 VM\n    -listen <address>\n                      \u7B49\u5F85\u6B63\u5728\u8FD0\u884C\u7684 VM \u4F7F\u7528\u6807\u51C6\u8FDE\u63A5\u5668\u5728\u6307\u5B9A\u5730\u5740\u5904\u8FDE\u63A5\n    -listenany\n                      \u7B49\u5F85\u6B63\u5728\u8FD0\u884C\u7684 VM \u4F7F\u7528\u6807\u51C6\u8FDE\u63A5\u5668\u5728\u4EFB\u4F55\u53EF\u7528\u5730\u5740\u5904\u8FDE\u63A5\n    -launch\n                      \u7ACB\u5373\u542F\u52A8 VM \u800C\u4E0D\u662F\u7B49\u5F85 ''run'' \u547D\u4EE4\n    -listconnectors   \u5217\u51FA\u6B64 VM \u4E2D\u7684\u53EF\u7528\u8FDE\u63A5\u5668\n    -connect <connector-name>:<name1>=<value1>,...\n                      \u4F7F\u7528\u6240\u5217\u53C2\u6570\u503C\u901A\u8FC7\u6307\u5B9A\u7684\u8FDE\u63A5\u5668\u8FDE\u63A5\u5230\u76EE\u6807 VM\n    -dbgtrace [flags] \u8F93\u51FA\u4FE1\u606F\u4F9B\u8C03\u8BD5{0}\n    -tclient          \u5728 HotSpot(TM) \u5BA2\u6237\u673A\u7F16\u8BD1\u5668\u4E2D\u8FD0\u884C\u5E94\u7528\u7A0B\u5E8F\n    -tserver          \u5728 HotSpot(TM) \u670D\u52A1\u5668\u7F16\u8BD1\u5668\u4E2D\u8FD0\u884C\u5E94\u7528\u7A0B\u5E8F\n\n\u8F6C\u53D1\u5230\u88AB\u8C03\u8BD5\u8FDB\u7A0B\u7684\u9009\u9879:\n    -v -verbose[:class|gc|jni]\n                      \u542F\u7528\u8BE6\u7EC6\u6A21\u5F0F\n    -D<name>=<value>  \u8BBE\u7F6E\u7CFB\u7EDF\u5C5E\u6027\n    -classpath <\u7531 \"{1}\" \u5206\u9694\u7684\u76EE\u5F55>\n                      \u5217\u51FA\u8981\u5728\u5176\u4E2D\u67E5\u627E\u7C7B\u7684\u76EE\u5F55\n    -X<option>        \u975E\u6807\u51C6\u76EE\u6807 VM \u9009\u9879\n\n<class> \u662F\u8981\u5F00\u59CB\u8C03\u8BD5\u7684\u7C7B\u7684\u540D\u79F0\n<arguments> \u662F\u4F20\u9012\u5230 <class> \u7684 main() \u65B9\u6CD5\u7684\u53C2\u6570\n\n\u8981\u83B7\u5F97\u547D\u4EE4\u7684\u5E2E\u52A9, \u8BF7\u5728{0}\u63D0\u793A\u4E0B\u952E\u5165 ''help''"},
-        // END OF MATERIAL TO LOCALIZE
-        };
-
-        return temp;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/tty/ThreadGroupIterator.java b/ojluni/src/main/java/com/sun/tools/example/debug/tty/ThreadGroupIterator.java
deleted file mode 100755
index c361a83..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/tty/ThreadGroupIterator.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.tty;
-
-import com.sun.jdi.ThreadGroupReference;
-import java.util.List;
-import java.util.Stack;
-import java.util.ArrayList;
-import java.util.Iterator;
-
-/**
- * Descend the tree of thread groups.
- * @author Robert G. Field
- */
-class ThreadGroupIterator implements Iterator<ThreadGroupReference> {
-    private final Stack<Iterator<ThreadGroupReference>> stack = new Stack<Iterator<ThreadGroupReference>>();
-
-    ThreadGroupIterator(List<ThreadGroupReference> tgl) {
-        push(tgl);
-    }
-
-    ThreadGroupIterator(ThreadGroupReference tg) {
-        List<ThreadGroupReference> tgl = new ArrayList<ThreadGroupReference>();
-        tgl.add(tg);
-        push(tgl);
-    }
-
-    ThreadGroupIterator() {
-        this(Env.vm().topLevelThreadGroups());
-    }
-
-    private Iterator<ThreadGroupReference> top() {
-        return stack.peek();
-    }
-
-    /**
-     * The invariant in this class is that the top iterator
-     * on the stack has more elements.  If the stack is
-     * empty, there is no top.  This method assures
-     * this invariant.
-     */
-    private void push(List<ThreadGroupReference> tgl) {
-        stack.push(tgl.iterator());
-        while (!stack.isEmpty() && !top().hasNext()) {
-            stack.pop();
-        }
-    }
-
-    @Override
-    public boolean hasNext() {
-        return !stack.isEmpty();
-    }
-
-    @Override
-    public ThreadGroupReference next() {
-        return nextThreadGroup();
-    }
-
-    public ThreadGroupReference nextThreadGroup() {
-        ThreadGroupReference tg = top().next();
-        push(tg.threadGroups());
-        return tg;
-    }
-
-    @Override
-    public void remove() {
-        throw new UnsupportedOperationException();
-    }
-
-    static ThreadGroupReference find(String name) {
-        ThreadGroupIterator tgi = new ThreadGroupIterator();
-        while (tgi.hasNext()) {
-            ThreadGroupReference tg = tgi.nextThreadGroup();
-            if (tg.name().equals(name)) {
-                return tg;
-            }
-        }
-        return null;
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/tty/ThreadInfo.java b/ojluni/src/main/java/com/sun/tools/example/debug/tty/ThreadInfo.java
deleted file mode 100755
index b1654ac..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/tty/ThreadInfo.java
+++ /dev/null
@@ -1,296 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.tty;
-
-import com.sun.jdi.ThreadReference;
-import com.sun.jdi.ThreadGroupReference;
-import com.sun.jdi.IncompatibleThreadStateException;
-import com.sun.jdi.StackFrame;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Collections;
-
-class ThreadInfo {
-    // This is a list of all known ThreadInfo objects. It survives
-    // ThreadInfo.invalidateAll, unlike the other static fields below.
-    private static List<ThreadInfo> threads = Collections.synchronizedList(new ArrayList<ThreadInfo>());
-    private static boolean gotInitialThreads = false;
-
-    private static ThreadInfo current = null;
-    private static ThreadGroupReference group = null;
-
-    private final ThreadReference thread;
-    private int currentFrameIndex = 0;
-
-    private ThreadInfo(ThreadReference thread) {
-        this.thread = thread;
-        if (thread == null) {
-            MessageOutput.fatalError("Internal error: null ThreadInfo created");
-        }
-    }
-
-    private static void initThreads() {
-        if (!gotInitialThreads) {
-            for (ThreadReference thread : Env.vm().allThreads()) {
-                threads.add(new ThreadInfo(thread));
-            }
-            gotInitialThreads = true;
-        }
-    }
-
-    static void addThread(ThreadReference thread) {
-        synchronized (threads) {
-            initThreads();
-            ThreadInfo ti = new ThreadInfo(thread);
-            // Guard against duplicates. Duplicates can happen during
-            // initialization when a particular thread might be added both
-            // by a thread start event and by the initial call to threads()
-            if (getThreadInfo(thread) == null) {
-                threads.add(ti);
-            }
-        }
-    }
-
-    static void removeThread(ThreadReference thread) {
-        if (thread.equals(ThreadInfo.current)) {
-            // Current thread has died.
-
-            // Be careful getting the thread name. If its death happens
-            // as part of VM termination, it may be too late to get the
-            // information, and an exception will be thrown.
-            String currentThreadName;
-            try {
-               currentThreadName = "\"" + thread.name() + "\"";
-            } catch (Exception e) {
-               currentThreadName = "";
-            }
-
-            setCurrentThread(null);
-
-            MessageOutput.println();
-            MessageOutput.println("Current thread died. Execution continuing...",
-                                  currentThreadName);
-        }
-        threads.remove(getThreadInfo(thread));
-    }
-
-    static List<ThreadInfo> threads() {
-        synchronized(threads) {
-            initThreads();
-            // Make a copy to allow iteration without synchronization
-            return new ArrayList<ThreadInfo>(threads);
-        }
-    }
-
-    static void invalidateAll() {
-        current = null;
-        group = null;
-        synchronized (threads) {
-            for (ThreadInfo ti : threads()) {
-                ti.invalidate();
-            }
-        }
-    }
-
-    static void setThreadGroup(ThreadGroupReference tg) {
-        group = tg;
-    }
-
-    static void setCurrentThread(ThreadReference tr) {
-        if (tr == null) {
-            setCurrentThreadInfo(null);
-        } else {
-            ThreadInfo tinfo = getThreadInfo(tr);
-            setCurrentThreadInfo(tinfo);
-        }
-    }
-
-    static void setCurrentThreadInfo(ThreadInfo tinfo) {
-        current = tinfo;
-        if (current != null) {
-            current.invalidate();
-        }
-    }
-
-    /**
-     * Get the current ThreadInfo object.
-     *
-     * @return the ThreadInfo for the current thread.
-     */
-    static ThreadInfo getCurrentThreadInfo() {
-        return current;
-    }
-
-    /**
-     * Get the thread from this ThreadInfo object.
-     *
-     * @return the Thread wrapped by this ThreadInfo.
-     */
-    ThreadReference getThread() {
-        return thread;
-    }
-
-    static ThreadGroupReference group() {
-        if (group == null) {
-            // Current thread group defaults to the first top level
-            // thread group.
-            setThreadGroup(Env.vm().topLevelThreadGroups().get(0));
-        }
-        return group;
-    }
-
-    static ThreadInfo getThreadInfo(long id) {
-        ThreadInfo retInfo = null;
-
-        synchronized (threads) {
-            for (ThreadInfo ti : threads()) {
-                if (ti.thread.uniqueID() == id) {
-                   retInfo = ti;
-                   break;
-                }
-            }
-        }
-        return retInfo;
-    }
-
-    static ThreadInfo getThreadInfo(ThreadReference tr) {
-        return getThreadInfo(tr.uniqueID());
-    }
-
-    static ThreadInfo getThreadInfo(String idToken) {
-        ThreadInfo tinfo = null;
-        if (idToken.startsWith("t@")) {
-            idToken = idToken.substring(2);
-        }
-        try {
-            long threadId = Long.decode(idToken).longValue();
-            tinfo = getThreadInfo(threadId);
-        } catch (NumberFormatException e) {
-            tinfo = null;
-        }
-        return tinfo;
-    }
-
-    /**
-     * Get the thread stack frames.
-     *
-     * @return a <code>List</code> of the stack frames.
-     */
-    List<StackFrame> getStack() throws IncompatibleThreadStateException {
-        return thread.frames();
-    }
-
-    /**
-     * Get the current stackframe.
-     *
-     * @return the current stackframe.
-     */
-    StackFrame getCurrentFrame() throws IncompatibleThreadStateException {
-        if (thread.frameCount() == 0) {
-            return null;
-        }
-        return thread.frame(currentFrameIndex);
-    }
-
-    /**
-     * Invalidate the current stackframe index.
-     */
-    void invalidate() {
-        currentFrameIndex = 0;
-    }
-
-    /* Throw IncompatibleThreadStateException if not suspended */
-    private void assureSuspended() throws IncompatibleThreadStateException {
-        if (!thread.isSuspended()) {
-            throw new IncompatibleThreadStateException();
-        }
-    }
-
-    /**
-     * Get the current stackframe index.
-     *
-     * @return the number of the current stackframe.  Frame zero is the
-     * closest to the current program counter
-     */
-    int getCurrentFrameIndex() {
-        return currentFrameIndex;
-    }
-
-    /**
-     * Set the current stackframe to a specific frame.
-     *
-     * @param nFrame    the number of the desired stackframe.  Frame zero is the
-     * closest to the current program counter
-     * @exception IllegalAccessError when the thread isn't
-     * suspended or waiting at a breakpoint
-     * @exception ArrayIndexOutOfBoundsException when the
-     * requested frame is beyond the stack boundary
-     */
-    void setCurrentFrameIndex(int nFrame) throws IncompatibleThreadStateException {
-        assureSuspended();
-        if ((nFrame < 0) || (nFrame >= thread.frameCount())) {
-            throw new ArrayIndexOutOfBoundsException();
-        }
-        currentFrameIndex = nFrame;
-    }
-
-    /**
-     * Change the current stackframe to be one or more frames higher
-     * (as in, away from the current program counter).
-     *
-     * @param nFrames   the number of stackframes
-     * @exception IllegalAccessError when the thread isn't
-     * suspended or waiting at a breakpoint
-     * @exception ArrayIndexOutOfBoundsException when the
-     * requested frame is beyond the stack boundary
-     */
-    void up(int nFrames) throws IncompatibleThreadStateException {
-        setCurrentFrameIndex(currentFrameIndex + nFrames);
-    }
-
-    /**
-     * Change the current stackframe to be one or more frames lower
-     * (as in, toward the current program counter).     *
-     * @param nFrames   the number of stackframes
-     * @exception IllegalAccessError when the thread isn't
-     * suspended or waiting at a breakpoint
-     * @exception ArrayIndexOutOfBoundsException when the
-     * requested frame is beyond the stack boundary
-     */
-    void down(int nFrames) throws IncompatibleThreadStateException {
-        setCurrentFrameIndex(currentFrameIndex - nFrames);
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/tty/ThreadIterator.java b/ojluni/src/main/java/com/sun/tools/example/debug/tty/ThreadIterator.java
deleted file mode 100755
index 31b996b..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/tty/ThreadIterator.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.tty;
-
-import com.sun.jdi.ThreadGroupReference;
-import com.sun.jdi.ThreadReference;
-import java.util.List;
-import java.util.Iterator;
-
-class ThreadIterator implements Iterator<ThreadReference> {
-    Iterator<ThreadReference> it = null;
-    ThreadGroupIterator tgi;
-
-    ThreadIterator(ThreadGroupReference tg) {
-        tgi = new ThreadGroupIterator(tg);
-    }
-
-    ThreadIterator(List<ThreadGroupReference> tgl) {
-        tgi = new ThreadGroupIterator(tgl);
-    }
-
-    ThreadIterator() {
-        tgi = new ThreadGroupIterator();
-    }
-
-    @Override
-    public boolean hasNext() {
-        while (it == null || !it.hasNext()) {
-            if (!tgi.hasNext()) {
-                return false; // no more
-            }
-            it = tgi.nextThreadGroup().threads().iterator();
-        }
-        return true;
-    }
-
-    @Override
-    public ThreadReference next() {
-        return it.next();
-    }
-
-    public ThreadReference nextThread() {
-        return next();
-    }
-
-    @Override
-    public void remove() {
-        throw new UnsupportedOperationException();
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/tty/VMConnection.java b/ojluni/src/main/java/com/sun/tools/example/debug/tty/VMConnection.java
deleted file mode 100755
index 34a0037..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/tty/VMConnection.java
+++ /dev/null
@@ -1,548 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.tty;
-
-import com.sun.jdi.*;
-import com.sun.jdi.connect.*;
-import com.sun.jdi.request.EventRequestManager;
-import com.sun.jdi.request.ThreadStartRequest;
-import com.sun.jdi.request.ThreadDeathRequest;
-
-import java.util.*;
-import java.util.regex.*;
-import java.io.*;
-
-class VMConnection {
-
-    private VirtualMachine vm;
-    private Process process = null;
-    private int outputCompleteCount = 0;
-
-    private final Connector connector;
-    private final Map<String, com.sun.jdi.connect.Connector.Argument> connectorArgs;
-    private final int traceFlags;
-
-    synchronized void notifyOutputComplete() {
-        outputCompleteCount++;
-        notifyAll();
-    }
-
-    synchronized void waitOutputComplete() {
-        // Wait for stderr and stdout
-        if (process != null) {
-            while (outputCompleteCount < 2) {
-                try {wait();} catch (InterruptedException e) {}
-            }
-        }
-    }
-
-    private Connector findConnector(String name) {
-        for (Connector connector :
-                 Bootstrap.virtualMachineManager().allConnectors()) {
-            if (connector.name().equals(name)) {
-                return connector;
-            }
-        }
-        return null;
-    }
-
-    private Map <String, com.sun.jdi.connect.Connector.Argument> parseConnectorArgs(Connector connector, String argString) {
-        Map<String, com.sun.jdi.connect.Connector.Argument> arguments = connector.defaultArguments();
-
-        /*
-         * We are parsing strings of the form:
-         *    name1=value1,[name2=value2,...]
-         * However, the value1...valuen substrings may contain
-         * embedded comma(s), so make provision for quoting inside
-         * the value substrings. (Bug ID 4285874)
-         */
-        String regexPattern =
-            "(quote=[^,]+,)|" +           // special case for quote=.,
-            "(\\w+=)" +                   // name=
-            "(((\"[^\"]*\")|" +           //   ( "l , ue"
-            "('[^']*')|" +                //     'l , ue'
-            "([^,'\"]+))+,)";             //     v a l u e )+ ,
-        Pattern p = Pattern.compile(regexPattern);
-        Matcher m = p.matcher(argString);
-        while (m.find()) {
-            int startPosition = m.start();
-            int endPosition = m.end();
-            if (startPosition > 0) {
-                /*
-                 * It is an error if parsing skips over any part of argString.
-                 */
-                throw new IllegalArgumentException
-                    (MessageOutput.format("Illegal connector argument",
-                                          argString));
-            }
-
-            String token = argString.substring(startPosition, endPosition);
-            int index = token.indexOf('=');
-            String name = token.substring(0, index);
-            String value = token.substring(index + 1,
-                                           token.length() - 1); // Remove comma delimiter
-
-            /*
-             * for values enclosed in quotes (single and/or double quotes)
-             * strip off enclosing quote chars
-             * needed for quote enclosed delimited substrings
-             */
-            if (name.equals("options")) {
-                StringBuilder sb = new StringBuilder();
-                for (String s : splitStringAtNonEnclosedWhiteSpace(value)) {
-                    while (isEnclosed(s, "\"") || isEnclosed(s, "'")) {
-                        s = s.substring(1, s.length() - 1);
-                    }
-                    sb.append(s);
-                    sb.append(" ");
-                }
-                value = sb.toString();
-            }
-
-            Connector.Argument argument = arguments.get(name);
-            if (argument == null) {
-                throw new IllegalArgumentException
-                    (MessageOutput.format("Argument is not defined for connector:",
-                                          new Object [] {name, connector.name()}));
-            }
-            argument.setValue(value);
-
-            argString = argString.substring(endPosition); // Remove what was just parsed...
-            m = p.matcher(argString);                     //    and parse again on what is left.
-        }
-        if ((! argString.equals(",")) && (argString.length() > 0)) {
-            /*
-             * It is an error if any part of argString is left over,
-             * unless it was empty to begin with.
-             */
-            throw new IllegalArgumentException
-                (MessageOutput.format("Illegal connector argument", argString));
-        }
-        return arguments;
-    }
-
-    private static boolean isEnclosed(String value, String enclosingChar) {
-        if (value.indexOf(enclosingChar) == 0) {
-            int lastIndex = value.lastIndexOf(enclosingChar);
-            if (lastIndex > 0 && lastIndex  == value.length() - 1) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    private static List<String> splitStringAtNonEnclosedWhiteSpace(String value) throws IllegalArgumentException {
-        List<String> al = new ArrayList<String>();
-        char[] arr;
-        int startPosition = 0;
-        int endPosition = 0;
-        final char SPACE = ' ';
-        final char DOUBLEQ = '"';
-        final char SINGLEQ = '\'';
-
-        /*
-         * An "open" or "active" enclosing state is where
-         * the first valid start quote qualifier is found,
-         * and there is a search in progress for the
-         * relevant end matching quote
-         *
-         * enclosingTargetChar set to SPACE
-         * is used to signal a non open enclosing state
-         */
-        char enclosingTargetChar = SPACE;
-
-        if (value == null) {
-            throw new IllegalArgumentException
-                (MessageOutput.format("value string is null"));
-        }
-
-        // split parameter string into individual chars
-        arr = value.toCharArray();
-
-        for (int i = 0; i < arr.length; i++) {
-            switch (arr[i]) {
-                case SPACE: {
-                    // do nothing for spaces
-                    // unless last in array
-                    if (isLastChar(arr, i)) {
-                        endPosition = i;
-                        // break for substring creation
-                        break;
-                    }
-                    continue;
-                }
-                case DOUBLEQ:
-                case SINGLEQ: {
-                    if (enclosingTargetChar == arr[i]) {
-                        // potential match to close open enclosing
-                        if (isNextCharWhitespace(arr, i)) {
-                            // if peek next is whitespace
-                            // then enclosing is a valid substring
-                            endPosition = i;
-                            // reset enclosing target char
-                            enclosingTargetChar = SPACE;
-                            // break for substring creation
-                            break;
-                        }
-                    }
-                    if (enclosingTargetChar == SPACE) {
-                        // no open enclosing state
-                        // handle as normal char
-                        if (isPreviousCharWhitespace(arr, i)) {
-                            startPosition = i;
-                            // peek forward for end candidates
-                            if (value.indexOf(arr[i], i + 1) >= 0) {
-                                // set open enclosing state by
-                                // setting up the target char
-                                enclosingTargetChar = arr[i];
-                            } else {
-                                // no more target chars left to match
-                                // end enclosing, handle as normal char
-                                if (isNextCharWhitespace(arr, i)) {
-                                    endPosition = i;
-                                    // break for substring creation
-                                    break;
-                                }
-                            }
-                        }
-                    }
-                    continue;
-                }
-                default: {
-                    // normal non-space, non-" and non-' chars
-                    if (enclosingTargetChar == SPACE) {
-                        // no open enclosing state
-                        if (isPreviousCharWhitespace(arr, i)) {
-                            // start of space delim substring
-                            startPosition = i;
-                        }
-                        if (isNextCharWhitespace(arr, i)) {
-                            // end of space delim substring
-                            endPosition = i;
-                            // break for substring creation
-                            break;
-                        }
-                    }
-                    continue;
-                }
-            }
-
-            // break's end up here
-            if (startPosition > endPosition) {
-                throw new IllegalArgumentException
-                    (MessageOutput.format("Illegal option values"));
-            }
-
-            // extract substring and add to List<String>
-            al.add(value.substring(startPosition, ++endPosition));
-
-            // set new start position
-            i = startPosition = endPosition;
-
-        } // for loop
-
-        return al;
-    }
-
-    static private boolean isPreviousCharWhitespace(char[] arr, int curr_pos) {
-        return isCharWhitespace(arr, curr_pos - 1);
-    }
-
-    static private boolean isNextCharWhitespace(char[] arr, int curr_pos) {
-        return isCharWhitespace(arr, curr_pos + 1);
-    }
-
-    static private boolean isCharWhitespace(char[] arr, int pos) {
-        if (pos < 0 || pos >= arr.length) {
-            // outside arraybounds is considered an implicit space
-            return true;
-        }
-        if (arr[pos] == ' ') {
-            return true;
-        }
-        return false;
-    }
-
-    static private boolean isLastChar(char[] arr, int pos) {
-        return (pos + 1 == arr.length);
-    }
-
-    VMConnection(String connectSpec, int traceFlags) {
-        String nameString;
-        String argString;
-        int index = connectSpec.indexOf(':');
-        if (index == -1) {
-            nameString = connectSpec;
-            argString = "";
-        } else {
-            nameString = connectSpec.substring(0, index);
-            argString = connectSpec.substring(index + 1);
-        }
-
-        connector = findConnector(nameString);
-        if (connector == null) {
-            throw new IllegalArgumentException
-                (MessageOutput.format("No connector named:", nameString));
-        }
-
-        connectorArgs = parseConnectorArgs(connector, argString);
-        this.traceFlags = traceFlags;
-    }
-
-    synchronized VirtualMachine open() {
-        if (connector instanceof LaunchingConnector) {
-            vm = launchTarget();
-        } else if (connector instanceof AttachingConnector) {
-            vm = attachTarget();
-        } else if (connector instanceof ListeningConnector) {
-            vm = listenTarget();
-        } else {
-            throw new InternalError
-                (MessageOutput.format("Invalid connect type"));
-        }
-        vm.setDebugTraceMode(traceFlags);
-        if (vm.canBeModified()){
-            setEventRequests(vm);
-            resolveEventRequests();
-        }
-        /*
-         * Now that the vm connection is open, fetch the debugee
-         * classpath and set up a default sourcepath.
-         * (Unless user supplied a sourcepath on the command line)
-         * (Bug ID 4186582)
-         */
-        if (Env.getSourcePath().length() == 0) {
-            if (vm instanceof PathSearchingVirtualMachine) {
-                PathSearchingVirtualMachine psvm =
-                    (PathSearchingVirtualMachine) vm;
-                Env.setSourcePath(psvm.classPath());
-            } else {
-                Env.setSourcePath(".");
-            }
-        }
-
-        return vm;
-    }
-
-    boolean setConnectorArg(String name, String value) {
-        /*
-         * Too late if the connection already made
-         */
-        if (vm != null) {
-            return false;
-        }
-
-        Connector.Argument argument = connectorArgs.get(name);
-        if (argument == null) {
-            return false;
-        }
-        argument.setValue(value);
-        return true;
-    }
-
-    String connectorArg(String name) {
-        Connector.Argument argument = connectorArgs.get(name);
-        if (argument == null) {
-            return "";
-        }
-        return argument.value();
-    }
-
-    public synchronized VirtualMachine vm() {
-        if (vm == null) {
-            throw new VMNotConnectedException();
-        } else {
-            return vm;
-        }
-    }
-
-    boolean isOpen() {
-        return (vm != null);
-    }
-
-    boolean isLaunch() {
-        return (connector instanceof LaunchingConnector);
-    }
-
-    public void disposeVM() {
-        try {
-            if (vm != null) {
-                vm.dispose();
-                vm = null;
-            }
-        } finally {
-            if (process != null) {
-                process.destroy();
-                process = null;
-            }
-            waitOutputComplete();
-        }
-    }
-
-    private void setEventRequests(VirtualMachine vm) {
-        EventRequestManager erm = vm.eventRequestManager();
-
-        // Normally, we want all uncaught exceptions.  We request them
-        // via the same mechanism as Commands.commandCatchException()
-        // so the user can ignore them later if they are not
-        // interested.
-        // FIXME: this works but generates spurious messages on stdout
-        //        during startup:
-        //          Set uncaught java.lang.Throwable
-        //          Set deferred uncaught java.lang.Throwable
-        Commands evaluator = new Commands();
-        evaluator.commandCatchException
-            (new StringTokenizer("uncaught java.lang.Throwable"));
-
-        ThreadStartRequest tsr = erm.createThreadStartRequest();
-        tsr.enable();
-        ThreadDeathRequest tdr = erm.createThreadDeathRequest();
-        tdr.enable();
-    }
-
-    private void resolveEventRequests() {
-        Env.specList.resolveAll();
-    }
-
-    private void dumpStream(InputStream stream) throws IOException {
-        BufferedReader in =
-            new BufferedReader(new InputStreamReader(stream));
-        int i;
-        try {
-            while ((i = in.read()) != -1) {
-                   MessageOutput.printDirect((char)i);// Special case: use
-                                                      //   printDirect()
-            }
-        } catch (IOException ex) {
-            String s = ex.getMessage();
-            if (!s.startsWith("Bad file number")) {
-                  throw ex;
-            }
-            // else we got a Bad file number IOException which just means
-            // that the debuggee has gone away.  We'll just treat it the
-            // same as if we got an EOF.
-        }
-    }
-
-    /**
-     *  Create a Thread that will retrieve and display any output.
-     *  Needs to be high priority, else debugger may exit before
-     *  it can be displayed.
-     */
-    private void displayRemoteOutput(final InputStream stream) {
-        Thread thr = new Thread("output reader") {
-            @Override
-            public void run() {
-                try {
-                    dumpStream(stream);
-                } catch (IOException ex) {
-                    MessageOutput.fatalError("Failed reading output");
-                } finally {
-                    notifyOutputComplete();
-                }
-            }
-        };
-        thr.setPriority(Thread.MAX_PRIORITY-1);
-        thr.start();
-    }
-
-    private void dumpFailedLaunchInfo(Process process) {
-        try {
-            dumpStream(process.getErrorStream());
-            dumpStream(process.getInputStream());
-        } catch (IOException e) {
-            MessageOutput.println("Unable to display process output:",
-                                  e.getMessage());
-        }
-    }
-
-    /* launch child target vm */
-    private VirtualMachine launchTarget() {
-        LaunchingConnector launcher = (LaunchingConnector)connector;
-        try {
-            VirtualMachine vm = launcher.launch(connectorArgs);
-            process = vm.process();
-            displayRemoteOutput(process.getErrorStream());
-            displayRemoteOutput(process.getInputStream());
-            return vm;
-        } catch (IOException ioe) {
-            ioe.printStackTrace();
-            MessageOutput.fatalError("Unable to launch target VM.");
-        } catch (IllegalConnectorArgumentsException icae) {
-            icae.printStackTrace();
-            MessageOutput.fatalError("Internal debugger error.");
-        } catch (VMStartException vmse) {
-            MessageOutput.println("vmstartexception", vmse.getMessage());
-            MessageOutput.println();
-            dumpFailedLaunchInfo(vmse.process());
-            MessageOutput.fatalError("Target VM failed to initialize.");
-        }
-        return null; // Shuts up the compiler
-    }
-
-    /* attach to running target vm */
-    private VirtualMachine attachTarget() {
-        AttachingConnector attacher = (AttachingConnector)connector;
-        try {
-            return attacher.attach(connectorArgs);
-        } catch (IOException ioe) {
-            ioe.printStackTrace();
-            MessageOutput.fatalError("Unable to attach to target VM.");
-        } catch (IllegalConnectorArgumentsException icae) {
-            icae.printStackTrace();
-            MessageOutput.fatalError("Internal debugger error.");
-        }
-        return null; // Shuts up the compiler
-    }
-
-    /* listen for connection from target vm */
-    private VirtualMachine listenTarget() {
-        ListeningConnector listener = (ListeningConnector)connector;
-        try {
-            String retAddress = listener.startListening(connectorArgs);
-            MessageOutput.println("Listening at address:", retAddress);
-            vm = listener.accept(connectorArgs);
-            listener.stopListening(connectorArgs);
-            return vm;
-        } catch (IOException ioe) {
-            ioe.printStackTrace();
-            MessageOutput.fatalError("Unable to attach to target VM.");
-        } catch (IllegalConnectorArgumentsException icae) {
-            icae.printStackTrace();
-            MessageOutput.fatalError("Internal debugger error.");
-        }
-        return null; // Shuts up the compiler
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/tty/VMNotConnectedException.java b/ojluni/src/main/java/com/sun/tools/example/debug/tty/VMNotConnectedException.java
deleted file mode 100755
index bde3c12..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/tty/VMNotConnectedException.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.tty;
-
-public class VMNotConnectedException extends RuntimeException {
-
-    private static final long serialVersionUID = -7433430494903950165L;
-
-    public VMNotConnectedException() {
-        super();
-    }
-
-    public VMNotConnectedException(String s) {
-        super(s);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/debug/tty/WatchpointSpec.java b/ojluni/src/main/java/com/sun/tools/example/debug/tty/WatchpointSpec.java
deleted file mode 100755
index c9b3c4e..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/debug/tty/WatchpointSpec.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Copyright (c) 1998, 2001, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.debug.tty;
-
-abstract class WatchpointSpec extends EventRequestSpec {
-    final String fieldId;
-
-    WatchpointSpec(ReferenceTypeSpec refSpec, String fieldId)
-                                       throws MalformedMemberNameException {
-        super(refSpec);
-        this.fieldId = fieldId;
-        if (!isJavaIdentifier(fieldId)) {
-            throw new MalformedMemberNameException(fieldId);
-        }
-    }
-
-    @Override
-    public int hashCode() {
-        return refSpec.hashCode() + fieldId.hashCode() +
-            getClass().hashCode();
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-        if (obj instanceof WatchpointSpec) {
-            WatchpointSpec watchpoint = (WatchpointSpec)obj;
-
-            return fieldId.equals(watchpoint.fieldId) &&
-                   refSpec.equals(watchpoint.refSpec) &&
-                   getClass().equals(watchpoint.getClass());
-        } else {
-            return false;
-        }
-    }
-
-    @Override
-    String errorMessageFor(Exception e) {
-        if (e instanceof NoSuchFieldException) {
-            return (MessageOutput.format("No field in",
-                                         new Object [] {fieldId, refSpec.toString()}));
-        } else {
-            return super.errorMessageFor(e);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/doc/index.html b/ojluni/src/main/java/com/sun/tools/example/doc/index.html
deleted file mode 100755
index 0296ae4..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/doc/index.html
+++ /dev/null
@@ -1,85 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-  <head>
-    <title>Example JDI Applications</title>
-  </head>
-<BODY BGCOLOR="#FFFFFF">
-    <h1>Example JDI Applications</h1>
-This example download contains the source code and
-documentation for three applications written using
-the Java<sup><font size=-2>TM</font></sup> Debug Interface (JDI)
-of the <A HREF="http://java.sun.com/products/jpda">Java Platform Debugger Architecture</A> (JPDA).
-They are provided as educational tools and as starting
-points for debugger development.
-<P>
-In increasing order of complexity:
-<UL>
-<LI><A HREF="trace.html">Trace</A> displays traces
-of program execution.  It is very simple (less than 600 lines)
-yet uses most of the basic JDI functionality.  It is a
-good starting point.
-<LI><A HREF="jdb.html">Jdb</A> is the command line debugger
-distributed with the J2SE SDK.
-<LI><A HREF="javadt.html">Javadt</A> is the beginnings of
-a GUI debugger.
-</UL>
-<P>
-Trace is in the <code>trace</code> directory. 
-Jdb and Javadt share a package, and are under the 
-<code>debug</code> directory. 
-
-<A NAME="SETUP"><H2>Required Set-up</H2></A>
-
-<H4>Where is JPDA?</H4>
-New versions of the J2SE SDK have JPDA included.  For
-older versions JPDA must be separately downloaded.
-<DL>
-  <DT>SDKs with JPDA included
-  <DD>J2SE SDK v1.3 and later and J2SE SDK for Linux v1.2.2
-  <DT>SDKs requiring JPDA download
-  <DD>J2SE SDK v1.2.1 and v1.2.2 for Solaris and Windows
-  <DT>Other SDKs
-  <DD>Check with vendor
-</DL>
-<P>
-<H4>Set-up for J2SE SDKs with JPDA included</H4>
-Your classpath must include the JDI Library code, which is
-in <code>tools.jar</code> in the <code>lib</code> directory.
-This is needed for both compiling the example code and 
-executing it.
-<p>
-<H4>Set-up for J2SE SDKs without JPDA - Solaris</H4>
-Download JPDA v1.0 from 
-<A HREF="http://java.sun.com/products/jpda">http://java.sun.com/products/jpda</A>.  Follow the 
-<A HREF="http://java.sun.com/products/jpda/installinst.html">Installation Instructions</A>
-found there.  Pay particular attention to setting the library
-path.
-<P>
-Your classpath must include the JDI Library code, which is
-in <VAR>jpda_home</VAR>/<code>lib/tools.jar</code>.
-This is needed for both compiling the example code and 
-executing it.
-<P>
-<H4>Set-up for J2SE SDKs without JPDA - Windows</H4>
-Download JPDA v1.0 from 
-<A HREF="http://java.sun.com/products/jpda">http://java.sun.com/products/jpda</A>.  Follow the 
-<A HREF="http://java.sun.com/products/jpda/installinst.html">Installation Instructions</A>
-found there.  Be sure to add:
-<PRE>
-        <VAR>jpda_home</VAR>\bin
-</PRE>
-to your path.
-<P>
-Your classpath must include the JDI Library code, which is
-in <VAR>jpda_home</VAR>\<code>lib\tools.jar</code>.
-This is needed for both compiling the example code and 
-executing it.
-<P>
-    <hr>
-    <address><a href="mailto:java-debugger@java.sun.com">java-debugger@java.sun.com</a></address>
-    </P>
-<P>
-</P>
-<!-- Created: Mon Feb  7 18:56:28 PST 2000 -->
-</body>
-</html>
diff --git a/ojluni/src/main/java/com/sun/tools/example/doc/javadt.html b/ojluni/src/main/java/com/sun/tools/example/doc/javadt.html
deleted file mode 100755
index f9d28a1..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/doc/javadt.html
+++ /dev/null
@@ -1,174 +0,0 @@
-<HTML>
-<HEAD>
-   <TITLE>Release notes for the javadt debugger</TITLE>
-</HEAD>
-<BODY BGCOLOR="#FFFFFF">
-<H1>Release notes for the javadt debugger</H1>
-
-<P>
-As a demonstration of the 
-<A HREF="http://java.sun.com/j2se/1.4/docs/guide/jpda/architecture.html">
-Java<sup><font size=-2>TM</font></sup> Platform Debugger Architecture</A>
-we are providing source code for
-a simple GUI debugging tool - <b>javadt</b>.  
-It is included as an example and demonstration of
-<A HREF="http://java.sun.com/j2se/1.4/docs/guide/jpda/architecture.html#jdi">
-JDI</A>.  It is not a finished or polished debugger and is
-missing many features of importance for real debugging work.
-<P>
-
-<H2>Invoking javadt</H2>
-<P>
-<b>javadt</b> can be run by executing:
-<PRE>
-   java com.sun.tools.example.debug.gui.GUI &lt;options&gt;.. &lt;class-name&gt;
-</PRE>
-where &lt;class-name&gt; is the name you would normally
-place on the <code>java</code> command line. 
-Note: the path to the <A HREF="index.html#SETUP">JDI Library</A> and to 
-the compiled <b>javadt</b> class files must be on the class path
-used to invoke gui.GUI.
-<p>
-For example, you can invoke the javadt debugger as follows:
-<PRE>
-   java com.sun.tools.example.debug.gui.GUI -classpath . Hello
-</PRE>
-Note: this <code>-classpath</code> option controls the
-class path for the <code>Hello</code> application.
-Once the window appears, you can issue the 'run' command to begin
-execution immediately.  It is also
-possible to give the class name in the 'run' command, in
-which case it may be omitted when invoking the debugger from the
-shell.
-<P>
-The classpath may also be set from within the debugger, using the
-'classpath' command.  Currently, other arguments to the VM must be
-given on the shell command line when the debugger is initially
-invoked.  The most recently mentioned classpath, VM arguments, main
-class name, and program arguments are retained as defaults for later
-'run' and 'load' commands.  (Unfortunately, at present, the debugger
-will likely crash if you attempt to begin another debugging session
-with another debuggee process from within the same invocation of the
-debugger.  You should exit to the shell and start a new debugger
-process.)
-<P>
-
-<H2>Using javadt</H2>
-The javadt normally displays context related to the "current thread",
-that is, the thread that most recently encountered a breakpoint, threw
-an uncaught exception, or was single-stepped by the user.  When
-program execution is suspended on account of one of these events, a
-current thread exists, and the javadt displays the following information
-about it:
-<P>
-<UL>
-<LI>  A stack backtrace.	
-
-<LI>  The source code surrounding the line corresponding to the
-      instruction counter for the thread, if the source code is
-      available.
-</UL>
-<P>
-In addition, a tabbed pane allows the user to view one of three
-additional views:
-<P>
-<UL>
-<LI>  A tree of all source files available on the source path.
-
-<LI>  A tree of all loaded class files, organized hierarchically
-      by package.
-
-<LI>  A tree of all active threads, organized hierarchically
-      by thread group.
-</UL>
-<P>
-By clicking on the name of a source file, the source view can be
-directed to display it.  Likewise, clicking on a thread will make that
-thread the current thread.  These features are normally used while the
-program is suspended, e.g, at a breakpoint.  Upon resumption and
-encountering another breakpoint, for example, the current thread will
-be automatically reset and the views will be updated.  The views tile
-the javadt display, and are adjustable in size.
-<P>
-The javadt functionality is rather basic, thus a command-line interaction
-window is also provided that allows access to functions that are not
-yet exposed in the javadt.  In particular, it is necessary to use the
-command line in order to set breakpoints and examine variables. The
-javadt debugger command interpreter implements roughly a subset of the
-<a href="jdb.html">jdb</a>
- functionality, but adds a few commands of its own.  The
-'help' command lists the complete set of commands and their function.
-Shortcuts for a set of the most common commands is provided on a
-button-bar at the top of the display.
-<P>
-The program to be debugged may be started either as a child of the
-debugger, or the debugger can be attached to an existing process,
-provided that its VM is prepared to accept the connection.  If the
-debuggee is started by the debugger as a child, a line-oriented
-interface to its standard input, output, and error streams is provided
-in an application interaction pane.
-<P>
-The debugger expects to find the program source code on its
-sourcepath, set with the 'use' or 'sourcepath' command.  If you find
-that sources are not being displayed because the sourcepath is
-incorrect, you may change it at that time, and the source view will be
-immediately updated.
-<P>
-The message "No current thread" is often encountered when stepping
-through a program.  This message does not mean that the thread or
-the VM has died, merely that a current thread is undefined.  This
-situation can easily occur unexpectedly when the program being
-stepped is waiting, eg., for input.  The VM appears to be stopped,
-as it would be after the successful completion of a step, but it
-is considered to be "running", not "interrupted".  The prompt
-in the command interaction pane indicates the state by changing
-to a thread name and frame number when the VM is interrupted.
-When it is running, the prompt "Command:" is displayed.
-<P>
-<H2>Source for javadt</H2>
-Full source code for <b>javadt</b> is included under the
-<code>debug</code> directory of <code>examples.jar</code>. 
-Note: these directories also include the
-source for <a href="jdb.html"><code>jdb</code></a>.
-Source code for these example applications is included to provide concrete
-examples for debugger developers.  Example code may be used, modified
-and redistributed by debugger developers providing they adhere to the
-terms in the COPYRIGHT notice.
-<P>
-<b>javadt</b> uses the following packages (found under the
-<code>debug</code> directory): 
-<DL>
-<DT><code>gui</code>
-<DD>User interface code
-<DT><code>bdi</code>
-<DD>Debugger core code
-<DT><code>events</code>
-<DD>Event Set code
-<DT><code>expr</code>
-<DD>Expression processing code
-</DL>
-<P>
-<H2>Building javadt</H2>
-To build the <b>javadt</b> classes from the 
-provided source files under the <code>debug</code> directory, 
-you need only to compile them. No special
-options are required, aside from those which set your classpath to 
-include the <A HREF="index.html#SETUP">JDI Library</A>.
-</P>
-<P>
-However, if you want to modify the expression parser in the file
-<code>Expr.jj</code>, you will need the 
-<a href="http://www.metamata.com/javacc/">
-JavaCC parser generator</a>. 
-It is available free from 
-<a
-href="http://www.webgain.com/products/metamata/java_doc.html">Metamata
-(now part of WebGain)</a>.
-<P>
-    <hr>
-    <address><a href="mailto:java-debugger@java.sun.com">java-debugger@java.sun.com</a></address>
-    </P>
-<P>
-</P>
-</BODY>
-</HTML>
diff --git a/ojluni/src/main/java/com/sun/tools/example/doc/jdb.html b/ojluni/src/main/java/com/sun/tools/example/doc/jdb.html
deleted file mode 100755
index a8232b0..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/doc/jdb.html
+++ /dev/null
@@ -1,104 +0,0 @@
-<HTML>
-<HEAD>
-   <TITLE>Release notes for the jdb debugger</TITLE>
-</HEAD>
-<BODY TEXT="#000000" BGCOLOR="#FFFFFF" LINK="#0000FF" VLINK="#000077" ALINK="#FF0000">
-&nbsp;
-<TABLE BORDER=0 WIDTH="100%" >
-<TR>
-
-<TD>
-<CENTER>
-<H1>Release notes for the jdb debugger</H1></CENTER>
-</TD>
-</TR>
-</TABLE>
-<!-- Body text begins here -->
-<P>
-<A HREF="index.html">Home Page</A>
-
-<P>
-As a demonstration of the 
-<A HREF="http://java.sun.com/j2se/1.4/docs/guide/jpda/architecture.html">
-Java<sup><font size=-2>TM</font></sup> Platform Debugger Architecture</A>
-we are providing source code for the <b>jdb</b> debugger, which was
-re-written to use
-<A HREF="http://java.sun.com/j2se/1.4/docs/guide/jpda/architecture.html#jdi">
-JDI</A>.
-
-<P>
-<H2><b>jdb</b> man pages</H2>
-<BLOCKQUOTE>
-<a href="http://java.sun.com/j2se/1.4/docs/tooldocs/win32/jdb.html"><font size="+1"><b>jdb</b> man pages for Windows</font></a>
-<P>
-<a href="http://java.sun.com/j2se/1.4/docs/tooldocs/solaris/jdb.html"><font size="+1"><b>jdb</b> man pages for Solaris</font></a>
-</BLOCKQUOTE>
-<P>
-<H2>Invoking <b>jdb</b></H2>
-The <b>jdb</b> sample can be started by executing:
-<PRE>
-   java com.sun.tools.example.debug.tty.TTY &lt;options&gt;.. &lt;class-name&gt;
-</PRE>
-where &lt;class-name&gt; is the name you would normally
-place on the <code>java</code> command line. The <code>-help</code>
-option provides information on options. 
-</P>
-<P>
-Note: the path to the <A HREF="index.html#SETUP">JDI Library</A> and to 
-the compiled <b>jdb</b> class files must be on the class path
-used to invoke com.sun.tools.example.debug.tty.TTY.
-
-<p>
-For more information on invoking and connecting, refer to the
-<A HREF="http://java.sun.com/j2se/1.4/docs/guide/jpda/conninv.html">
-Connection and Invocation Details</A> section of the 
-<A HREF="http://java.sun.com/j2se/1.4/docs/guide/jpda/">
-JPDA documentation</A>, 
-particularly the section on <b>jdb</b>.
-<P>
-
-
-<H2>Source for jdb</H2>
-Full source code for <b>jdb</b> is included under the
-<code>debug</code> directory of <code>examples.jar</code>.  
-Note: these directories also include the
-source for <a href="javadt.html"><code>javadt</code></a>.
-Source code for these example applications is included to provide concrete
-examples for debugger developers.  Example code may be used, modified
-and redistributed by debugger developers providing they adhere to the
-terms in the COPYRIGHT notice.
-<P>
-<b>jdb</b> uses the following packages (found under the 
-<code>debug</code> directory): 
-<DL>
-<DT><code>tty</code>
-<DD>Application code
-<DT><code>expr</code>
-<DD>Expression processing code
-</DL>
-
-<P>
-<H2>Building jdb</H2>
-To completely rebuild the <b>jdb</b> classes from the 
-provided source files under the <code>debug</code> directory, 
-you need only to compile them. No special
-options are required, aside from those which set your classpath to 
-include the <A HREF="index.html#SETUP">JDI Library</A>.
-</P>
-<P>
-However, if you want to modify the expression parser in the file
-<code>Expr.jj</code>, you will need the 
-<a href="http://www.metamata.com/javacc/">
-JavaCC parser generator</a>. 
-It is available free from 
-<a
-href="http://www.webgain.com/products/metamata/java_doc.html">Metamata
-(now part of WebGain)</a>.
-<P>
-    <hr>
-    <address><a href="mailto:java-debugger@java.sun.com">java-debugger@java.sun.com</a></address>
-    </P>
-<P>
-</P>
-  </BODY>
-</HTML>
diff --git a/ojluni/src/main/java/com/sun/tools/example/doc/trace.html b/ojluni/src/main/java/com/sun/tools/example/doc/trace.html
deleted file mode 100755
index 8cae84d..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/doc/trace.html
+++ /dev/null
@@ -1,71 +0,0 @@
-<HTML>
-<HEAD>
-   <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
-   <TITLE>trace example</TITLE>
-</HEAD>
-<BODY TEXT="#000000" BGCOLOR="#FFFFFF" LINK="#0000FF" VLINK="#000077" ALINK="#FF0000">
-<H2>trace example</H2>
-
-<B>Trace</B> runs the Java language program passed as an argument and
-generates a trace of its execution.  <B>Trace</B> is a simple command
-line tool that uses the 
-<A HREF="http://java.sun.com/j2se/1.4/docs/guide/jpda/architecture.html#jdi">
-Java Debug Interface (JDI)</A>.  Programs need
-not be compiled for debugging since this information is not
-used.  
-<P>
-<B>Trace</B> can be invoked as follows:
-<PRE>
-        java com.sun.tools.example.trace.Trace <i>options class args</i>
-</PRE>
-Your classpath must include the JDI Library 
-(see <A HREF="index.html#SETUP">set-up</A>),
-the path to the compiled <b>trace</b> class files,
-and the path for the application being traced.
-<P>
-Available <i>options</i> are:
-
-<PRE>
-  -output <i>filename</i>   
-        Set destination for output trace. By default output
-        goes to the terminal.
-
-  -all                 
-        Include system classes in output.  By default
-        java.*, javax.*, sun.* and com.sun.* events are
-        not diplayed.
-
-  -fields
-        Also show assignments into fields.
-
-  -help              
-        Print a help message
-
-</PRE>
-<i>class</i> is the program to trace. <i>args</i> are the arguments to <i>class</i>.
-<P>
-
-<H2>Source for trace</H2>
-Full source code for <b>trace</b> is included in the
-<code>trace</code> directory of <code>examples.jar</code>.  
-Source code for these example applications is included to provide concrete
-examples for debugger developers.  Example code may be used, modified
-and redistributed by debugger developers providing they adhere to the
-terms in the COPYRIGHT notice.
-
-<P>
-<H2>Building trace</H2>
-To completely rebuild the <b>trace</b> classes from the 
-provided source files in the <code>trace</code> directory, 
-you need only to compile them. No special
-options are required, aside from those which set your classpath to 
-include the <A HREF="index.html#SETUP">JDI Library</A>.
-
-<P>
-    <hr>
-    <address><a href="mailto:java-debugger@java.sun.com">java-debugger@java.sun.com</a></address>
-    </P>
-<P>
-</P>
-</BODY>
-</HTML>
diff --git a/ojluni/src/main/java/com/sun/tools/example/trace/EventThread.java b/ojluni/src/main/java/com/sun/tools/example/trace/EventThread.java
deleted file mode 100755
index 22a3fdc..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/trace/EventThread.java
+++ /dev/null
@@ -1,353 +0,0 @@
-/*
- * Copyright (c) 2001, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.trace;
-
-import com.sun.jdi.*;
-import com.sun.jdi.request.*;
-import com.sun.jdi.event.*;
-
-import java.util.*;
-import java.io.PrintWriter;
-
-/**
- * This class processes incoming JDI events and displays them
- *
- * @author Robert Field
- */
-public class EventThread extends Thread {
-
-    private final VirtualMachine vm;   // Running VM
-    private final String[] excludes;   // Packages to exclude
-    private final PrintWriter writer;  // Where output goes
-
-    static String nextBaseIndent = ""; // Starting indent for next thread
-
-    private boolean connected = true;  // Connected to VM
-    private boolean vmDied = true;     // VMDeath occurred
-
-    // Maps ThreadReference to ThreadTrace instances
-    private Map<ThreadReference, ThreadTrace> traceMap =
-       new HashMap<>();
-
-    EventThread(VirtualMachine vm, String[] excludes, PrintWriter writer) {
-        super("event-handler");
-        this.vm = vm;
-        this.excludes = excludes;
-        this.writer = writer;
-    }
-
-    /**
-     * Run the event handling thread.
-     * As long as we are connected, get event sets off
-     * the queue and dispatch the events within them.
-     */
-    @Override
-    public void run() {
-        EventQueue queue = vm.eventQueue();
-        while (connected) {
-            try {
-                EventSet eventSet = queue.remove();
-                EventIterator it = eventSet.eventIterator();
-                while (it.hasNext()) {
-                    handleEvent(it.nextEvent());
-                }
-                eventSet.resume();
-            } catch (InterruptedException exc) {
-                // Ignore
-            } catch (VMDisconnectedException discExc) {
-                handleDisconnectedException();
-                break;
-            }
-        }
-    }
-
-    /**
-     * Create the desired event requests, and enable
-     * them so that we will get events.
-     * @param excludes     Class patterns for which we don't want events
-     * @param watchFields  Do we want to watch assignments to fields
-     */
-    void setEventRequests(boolean watchFields) {
-        EventRequestManager mgr = vm.eventRequestManager();
-
-        // want all exceptions
-        ExceptionRequest excReq = mgr.createExceptionRequest(null,
-                                                             true, true);
-        // suspend so we can step
-        excReq.setSuspendPolicy(EventRequest.SUSPEND_ALL);
-        excReq.enable();
-
-        MethodEntryRequest menr = mgr.createMethodEntryRequest();
-        for (int i=0; i<excludes.length; ++i) {
-            menr.addClassExclusionFilter(excludes[i]);
-        }
-        menr.setSuspendPolicy(EventRequest.SUSPEND_NONE);
-        menr.enable();
-
-        MethodExitRequest mexr = mgr.createMethodExitRequest();
-        for (int i=0; i<excludes.length; ++i) {
-            mexr.addClassExclusionFilter(excludes[i]);
-        }
-        mexr.setSuspendPolicy(EventRequest.SUSPEND_NONE);
-        mexr.enable();
-
-        ThreadDeathRequest tdr = mgr.createThreadDeathRequest();
-        // Make sure we sync on thread death
-        tdr.setSuspendPolicy(EventRequest.SUSPEND_ALL);
-        tdr.enable();
-
-        if (watchFields) {
-            ClassPrepareRequest cpr = mgr.createClassPrepareRequest();
-            for (int i=0; i<excludes.length; ++i) {
-                cpr.addClassExclusionFilter(excludes[i]);
-            }
-            cpr.setSuspendPolicy(EventRequest.SUSPEND_ALL);
-            cpr.enable();
-        }
-    }
-
-    /**
-     * This class keeps context on events in one thread.
-     * In this implementation, context is the indentation prefix.
-     */
-    class ThreadTrace {
-        final ThreadReference thread;
-        final String baseIndent;
-        static final String threadDelta = "                     ";
-        StringBuffer indent;
-
-        ThreadTrace(ThreadReference thread) {
-            this.thread = thread;
-            this.baseIndent = nextBaseIndent;
-            indent = new StringBuffer(baseIndent);
-            nextBaseIndent += threadDelta;
-            println("====== " + thread.name() + " ======");
-        }
-
-        private void println(String str) {
-            writer.print(indent);
-            writer.println(str);
-        }
-
-        void methodEntryEvent(MethodEntryEvent event)  {
-            println(event.method().name() + "  --  "
-                    + event.method().declaringType().name());
-            indent.append("| ");
-        }
-
-        void methodExitEvent(MethodExitEvent event)  {
-            indent.setLength(indent.length()-2);
-        }
-
-        void fieldWatchEvent(ModificationWatchpointEvent event)  {
-            Field field = event.field();
-            Value value = event.valueToBe();
-            println("    " + field.name() + " = " + value);
-        }
-
-        void exceptionEvent(ExceptionEvent event) {
-            println("Exception: " + event.exception() +
-                    " catch: " + event.catchLocation());
-
-            // Step to the catch
-            EventRequestManager mgr = vm.eventRequestManager();
-            StepRequest req = mgr.createStepRequest(thread,
-                                                    StepRequest.STEP_MIN,
-                                                    StepRequest.STEP_INTO);
-            req.addCountFilter(1);  // next step only
-            req.setSuspendPolicy(EventRequest.SUSPEND_ALL);
-            req.enable();
-        }
-
-        // Step to exception catch
-        void stepEvent(StepEvent event)  {
-            // Adjust call depth
-            int cnt = 0;
-            indent = new StringBuffer(baseIndent);
-            try {
-                cnt = thread.frameCount();
-            } catch (IncompatibleThreadStateException exc) {
-            }
-            while (cnt-- > 0) {
-                indent.append("| ");
-            }
-
-            EventRequestManager mgr = vm.eventRequestManager();
-            mgr.deleteEventRequest(event.request());
-        }
-
-        void threadDeathEvent(ThreadDeathEvent event)  {
-            indent = new StringBuffer(baseIndent);
-            println("====== " + thread.name() + " end ======");
-        }
-    }
-
-    /**
-     * Returns the ThreadTrace instance for the specified thread,
-     * creating one if needed.
-     */
-    ThreadTrace threadTrace(ThreadReference thread) {
-        ThreadTrace trace = traceMap.get(thread);
-        if (trace == null) {
-            trace = new ThreadTrace(thread);
-            traceMap.put(thread, trace);
-        }
-        return trace;
-    }
-
-    /**
-     * Dispatch incoming events
-     */
-    private void handleEvent(Event event) {
-        if (event instanceof ExceptionEvent) {
-            exceptionEvent((ExceptionEvent)event);
-        } else if (event instanceof ModificationWatchpointEvent) {
-            fieldWatchEvent((ModificationWatchpointEvent)event);
-        } else if (event instanceof MethodEntryEvent) {
-            methodEntryEvent((MethodEntryEvent)event);
-        } else if (event instanceof MethodExitEvent) {
-            methodExitEvent((MethodExitEvent)event);
-        } else if (event instanceof StepEvent) {
-            stepEvent((StepEvent)event);
-        } else if (event instanceof ThreadDeathEvent) {
-            threadDeathEvent((ThreadDeathEvent)event);
-        } else if (event instanceof ClassPrepareEvent) {
-            classPrepareEvent((ClassPrepareEvent)event);
-        } else if (event instanceof VMStartEvent) {
-            vmStartEvent((VMStartEvent)event);
-        } else if (event instanceof VMDeathEvent) {
-            vmDeathEvent((VMDeathEvent)event);
-        } else if (event instanceof VMDisconnectEvent) {
-            vmDisconnectEvent((VMDisconnectEvent)event);
-        } else {
-            throw new Error("Unexpected event type");
-        }
-    }
-
-    /***
-     * A VMDisconnectedException has happened while dealing with
-     * another event. We need to flush the event queue, dealing only
-     * with exit events (VMDeath, VMDisconnect) so that we terminate
-     * correctly.
-     */
-    synchronized void handleDisconnectedException() {
-        EventQueue queue = vm.eventQueue();
-        while (connected) {
-            try {
-                EventSet eventSet = queue.remove();
-                EventIterator iter = eventSet.eventIterator();
-                while (iter.hasNext()) {
-                    Event event = iter.nextEvent();
-                    if (event instanceof VMDeathEvent) {
-                        vmDeathEvent((VMDeathEvent)event);
-                    } else if (event instanceof VMDisconnectEvent) {
-                        vmDisconnectEvent((VMDisconnectEvent)event);
-                    }
-                }
-                eventSet.resume(); // Resume the VM
-            } catch (InterruptedException exc) {
-                // ignore
-            }
-        }
-    }
-
-    private void vmStartEvent(VMStartEvent event)  {
-         writer.println("-- VM Started --");
-    }
-
-    // Forward event for thread specific processing
-    private void methodEntryEvent(MethodEntryEvent event)  {
-         threadTrace(event.thread()).methodEntryEvent(event);
-    }
-
-    // Forward event for thread specific processing
-    private void methodExitEvent(MethodExitEvent event)  {
-         threadTrace(event.thread()).methodExitEvent(event);
-    }
-
-    // Forward event for thread specific processing
-    private void stepEvent(StepEvent event)  {
-         threadTrace(event.thread()).stepEvent(event);
-    }
-
-    // Forward event for thread specific processing
-    private void fieldWatchEvent(ModificationWatchpointEvent event)  {
-         threadTrace(event.thread()).fieldWatchEvent(event);
-    }
-
-    void threadDeathEvent(ThreadDeathEvent event)  {
-        ThreadTrace trace = traceMap.get(event.thread());
-        if (trace != null) {  // only want threads we care about
-            trace.threadDeathEvent(event);   // Forward event
-        }
-    }
-
-    /**
-     * A new class has been loaded.
-     * Set watchpoints on each of its fields
-     */
-    private void classPrepareEvent(ClassPrepareEvent event)  {
-        EventRequestManager mgr = vm.eventRequestManager();
-        List<Field> fields = event.referenceType().visibleFields();
-        for (Field field : fields) {
-            ModificationWatchpointRequest req =
-                     mgr.createModificationWatchpointRequest(field);
-            for (int i=0; i<excludes.length; ++i) {
-                req.addClassExclusionFilter(excludes[i]);
-            }
-            req.setSuspendPolicy(EventRequest.SUSPEND_NONE);
-            req.enable();
-        }
-    }
-
-    private void exceptionEvent(ExceptionEvent event) {
-        ThreadTrace trace = traceMap.get(event.thread());
-        if (trace != null) {  // only want threads we care about
-            trace.exceptionEvent(event);      // Forward event
-        }
-    }
-
-    public void vmDeathEvent(VMDeathEvent event) {
-        vmDied = true;
-        writer.println("-- The application exited --");
-    }
-
-    public void vmDisconnectEvent(VMDisconnectEvent event) {
-        connected = false;
-        if (!vmDied) {
-            writer.println("-- The application has been disconnected --");
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/trace/StreamRedirectThread.java b/ojluni/src/main/java/com/sun/tools/example/trace/StreamRedirectThread.java
deleted file mode 100755
index be5b028..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/trace/StreamRedirectThread.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Copyright (c) 2001, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.trace;
-
-import java.io.*;
-
-/**
- * StreamRedirectThread is a thread which copies it's input to
- * it's output and terminates when it completes.
- *
- * @author Robert Field
- */
-class StreamRedirectThread extends Thread {
-
-    private final Reader in;
-    private final Writer out;
-
-    private static final int BUFFER_SIZE = 2048;
-
-    /**
-     * Set up for copy.
-     * @param name  Name of the thread
-     * @param in    Stream to copy from
-     * @param out   Stream to copy to
-     */
-    StreamRedirectThread(String name, InputStream in, OutputStream out) {
-        super(name);
-        this.in = new InputStreamReader(in);
-        this.out = new OutputStreamWriter(out);
-        setPriority(Thread.MAX_PRIORITY-1);
-    }
-
-    /**
-     * Copy.
-     */
-    @Override
-    public void run() {
-        try {
-            char[] cbuf = new char[BUFFER_SIZE];
-            int count;
-            while ((count = in.read(cbuf, 0, BUFFER_SIZE)) >= 0) {
-                out.write(cbuf, 0, count);
-            }
-            out.flush();
-        } catch(IOException exc) {
-            System.err.println("Child I/O Transfer - " + exc);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/example/trace/Trace.java b/ojluni/src/main/java/com/sun/tools/example/trace/Trace.java
deleted file mode 100755
index 04fc096..0000000
--- a/ojluni/src/main/java/com/sun/tools/example/trace/Trace.java
+++ /dev/null
@@ -1,246 +0,0 @@
-/*
- * Copyright (c) 2001, 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.
- */
-
-/*
- * This source code is provided to illustrate the usage of a given feature
- * or technique and has been deliberately simplified. Additional steps
- * required for a production-quality application, such as security checks,
- * input validation and proper error handling, might not be present in
- * this sample code.
- */
-
-
-package com.sun.tools.example.trace;
-
-import com.sun.jdi.VirtualMachine;
-import com.sun.jdi.Bootstrap;
-import com.sun.jdi.connect.*;
-
-import java.util.Map;
-import java.util.List;
-
-import java.io.PrintWriter;
-import java.io.FileWriter;
-import java.io.IOException;
-
-/**
- * This program traces the execution of another program.
- * See "java Trace -help".
- * It is a simple example of the use of the Java Debug Interface.
- *
- * @author Robert Field
- */
-public class Trace {
-
-    // Running remote VM
-    private final VirtualMachine vm;
-
-    // Thread transferring remote error stream to our error stream
-    private Thread errThread = null;
-
-    // Thread transferring remote output stream to our output stream
-    private Thread outThread = null;
-
-    // Mode for tracing the Trace program (default= 0 off)
-    private int debugTraceMode = 0;
-
-    //  Do we want to watch assignments to fields
-    private boolean watchFields = false;
-
-    // Class patterns for which we don't want events
-    private String[] excludes = {"java.*", "javax.*", "sun.*",
-                                 "com.sun.*"};
-
-    /**
-     * main
-     */
-    public static void main(String[] args) {
-        new Trace(args);
-    }
-
-    /**
-     * Parse the command line arguments.
-     * Launch target VM.
-     * Generate the trace.
-     */
-    Trace(String[] args) {
-        PrintWriter writer = new PrintWriter(System.out);
-        int inx;
-        for (inx = 0; inx < args.length; ++inx) {
-            String arg = args[inx];
-            if (arg.charAt(0) != '-') {
-                break;
-            }
-            if (arg.equals("-output")) {
-                try {
-                    writer = new PrintWriter(new FileWriter(args[++inx]));
-                } catch (IOException exc) {
-                    System.err.println("Cannot open output file: " + args[inx]
-                                       + " - " +  exc);
-                    System.exit(1);
-                }
-            } else if (arg.equals("-all")) {
-                excludes = new String[0];
-            } else if (arg.equals("-fields")) {
-                watchFields = true;
-            } else if (arg.equals("-dbgtrace")) {
-                debugTraceMode = Integer.parseInt(args[++inx]);
-            } else if (arg.equals("-help")) {
-                usage();
-                System.exit(0);
-            } else {
-                System.err.println("No option: " + arg);
-                usage();
-                System.exit(1);
-            }
-        }
-        if (inx >= args.length) {
-            System.err.println("<class> missing");
-            usage();
-            System.exit(1);
-        }
-        StringBuffer sb = new StringBuffer();
-        sb.append(args[inx]);
-        for (++inx; inx < args.length; ++inx) {
-            sb.append(' ');
-            sb.append(args[inx]);
-        }
-        vm = launchTarget(sb.toString());
-        generateTrace(writer);
-    }
-
-
-    /**
-     * Generate the trace.
-     * Enable events, start thread to display events,
-     * start threads to forward remote error and output streams,
-     * resume the remote VM, wait for the final event, and shutdown.
-     */
-    void generateTrace(PrintWriter writer) {
-        vm.setDebugTraceMode(debugTraceMode);
-        EventThread eventThread = new EventThread(vm, excludes, writer);
-        eventThread.setEventRequests(watchFields);
-        eventThread.start();
-        redirectOutput();
-        vm.resume();
-
-        // Shutdown begins when event thread terminates
-        try {
-            eventThread.join();
-            errThread.join(); // Make sure output is forwarded
-            outThread.join(); // before we exit
-        } catch (InterruptedException exc) {
-            // we don't interrupt
-        }
-        writer.close();
-    }
-
-    /**
-     * Launch target VM.
-     * Forward target's output and error.
-     */
-    VirtualMachine launchTarget(String mainArgs) {
-        LaunchingConnector connector = findLaunchingConnector();
-        Map<String, Connector.Argument> arguments =
-           connectorArguments(connector, mainArgs);
-        try {
-            return connector.launch(arguments);
-        } catch (IOException exc) {
-            throw new Error("Unable to launch target VM: " + exc);
-        } catch (IllegalConnectorArgumentsException exc) {
-            throw new Error("Internal error: " + exc);
-        } catch (VMStartException exc) {
-            throw new Error("Target VM failed to initialize: " +
-                            exc.getMessage());
-        }
-    }
-
-    void redirectOutput() {
-        Process process = vm.process();
-
-        // Copy target's output and error to our output and error.
-        errThread = new StreamRedirectThread("error reader",
-                                             process.getErrorStream(),
-                                             System.err);
-        outThread = new StreamRedirectThread("output reader",
-                                             process.getInputStream(),
-                                             System.out);
-        errThread.start();
-        outThread.start();
-    }
-
-    /**
-     * Find a com.sun.jdi.CommandLineLaunch connector
-     */
-    LaunchingConnector findLaunchingConnector() {
-        List<Connector> connectors = Bootstrap.virtualMachineManager().allConnectors();
-        for (Connector connector : connectors) {
-            if (connector.name().equals("com.sun.jdi.CommandLineLaunch")) {
-                return (LaunchingConnector)connector;
-            }
-        }
-        throw new Error("No launching connector");
-    }
-
-    /**
-     * Return the launching connector's arguments.
-     */
-    Map<String, Connector.Argument> connectorArguments(LaunchingConnector connector, String mainArgs) {
-        Map<String, Connector.Argument> arguments = connector.defaultArguments();
-        Connector.Argument mainArg =
-                           (Connector.Argument)arguments.get("main");
-        if (mainArg == null) {
-            throw new Error("Bad launching connector");
-        }
-        mainArg.setValue(mainArgs);
-
-        if (watchFields) {
-            // We need a VM that supports watchpoints
-            Connector.Argument optionArg =
-                (Connector.Argument)arguments.get("options");
-            if (optionArg == null) {
-                throw new Error("Bad launching connector");
-            }
-            optionArg.setValue("-classic");
-        }
-        return arguments;
-    }
-
-    /**
-     * Print command line usage help
-     */
-    void usage() {
-        System.err.println("Usage: java Trace <options> <class> <args>");
-        System.err.println("<options> are:");
-        System.err.println(
-"  -output <filename>   Output trace to <filename>");
-        System.err.println(
-"  -all                 Include system classes in output");
-        System.err.println(
-"  -help                Print this help message");
-        System.err.println("<class> is the program to trace");
-        System.err.println("<args> are the arguments to <class>");
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/extcheck/ExtCheck.java b/ojluni/src/main/java/com/sun/tools/extcheck/ExtCheck.java
deleted file mode 100755
index d29e2cb..0000000
--- a/ojluni/src/main/java/com/sun/tools/extcheck/ExtCheck.java
+++ /dev/null
@@ -1,410 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package com.sun.tools.extcheck;
-
-import java.util.*;
-import java.net.MalformedURLException;
-import java.util.Vector;
-import java.io.*;
-import java.util.StringTokenizer;
-import java.net.URL;
-import java.util.jar.JarFile;
-import java.util.jar.JarEntry;
-import java.util.jar.Manifest;
-import java.util.jar.Attributes;
-import java.util.jar.Attributes.Name;
-import java.net.URLConnection;
-import java.security.Permission;
-import java.util.jar.*;
-import java.net.JarURLConnection;
-import sun.net.www.ParseUtil;
-
-/**
- * ExtCheck reports on clashes between a specified (target)
- * jar file and jar files already installed in the extensions
- * directory.
- *
- * @author Benedict Gomes
- * @since 1.2
- */
-
-public class ExtCheck {
-
-    private static final boolean DEBUG = false;
-
-    // The following strings hold the values of the version variables
-    // for the target jar file
-    private String targetSpecTitle;
-    private String targetSpecVersion;
-    private String targetSpecVendor;
-    private String targetImplTitle;
-    private String targetImplVersion;
-    private String targetImplVendor;
-    private String targetsealed;
-
-    /* Flag to indicate whether extra information should be dumped to stdout */
-    private boolean verboseFlag;
-
-    /*
-     * Create a new instance of the jar reporting tool for a particular
-     * targetFile.
-     * @param targetFile is the file to compare against.
-     * @param verbose indicates whether to dump filenames and manifest
-     *                information (on conflict) to the standard output.
-     */
-    static ExtCheck create(File targetFile, boolean verbose) {
-        return new ExtCheck(targetFile, verbose);
-    }
-
-    private ExtCheck(File targetFile, boolean verbose) {
-        verboseFlag = verbose;
-        investigateTarget(targetFile);
-    }
-
-
-    private void investigateTarget(File targetFile) {
-        verboseMessage("Target file:" + targetFile);
-        Manifest targetManifest = null;
-        try {
-            File canon = new File(targetFile.getCanonicalPath());
-            URL url = ParseUtil.fileToEncodedURL(canon);
-            if (url != null){
-                JarLoader loader = new JarLoader(url);
-                JarFile jarFile = loader.getJarFile();
-                targetManifest = jarFile.getManifest();
-            }
-        } catch (MalformedURLException e){
-            error("Malformed URL ");
-        } catch (IOException e) {
-            error("IO Exception ");
-        }
-        if (targetManifest == null)
-            error("No manifest available in "+targetFile);
-        Attributes attr = targetManifest.getMainAttributes();
-        if (attr != null) {
-            targetSpecTitle   = attr.getValue(Name.SPECIFICATION_TITLE);
-            targetSpecVersion = attr.getValue(Name.SPECIFICATION_VERSION);
-            targetSpecVendor  = attr.getValue(Name.SPECIFICATION_VENDOR);
-            targetImplTitle   = attr.getValue(Name.IMPLEMENTATION_TITLE);
-            targetImplVersion = attr.getValue(Name.IMPLEMENTATION_VERSION);
-            targetImplVendor  = attr.getValue(Name.IMPLEMENTATION_VENDOR);
-            targetsealed      = attr.getValue(Name.SEALED);
-        } else {
-            error("No attributes available in the manifest");
-        }
-        if (targetSpecTitle == null)
-            error("The target file does not have a specification title");
-        if (targetSpecVersion == null)
-            error("The target file does not have a specification version");
-        verboseMessage("Specification title:" + targetSpecTitle);
-        verboseMessage("Specification version:" + targetSpecVersion);
-        if (targetSpecVendor != null)
-            verboseMessage("Specification vendor:" + targetSpecVendor);
-        if (targetImplVersion != null)
-            verboseMessage("Implementation version:" + targetImplVersion);
-        if (targetImplVendor != null)
-            verboseMessage("Implementation vendor:" + targetImplVendor);
-        verboseMessage("");
-    }
-
-    /**
-     * Verify that none of the jar files in the install directory
-     * has the same specification-title and the same or a newer
-     * specification-version.
-     *
-     * @return Return true if the target jar file is newer
-     *        than any installed jar file with the same specification-title,
-     *        otherwise return false
-     */
-    boolean checkInstalledAgainstTarget(){
-        String s = System.getProperty("java.ext.dirs");
-        File [] dirs;
-        if (s != null) {
-            StringTokenizer st =
-                new StringTokenizer(s, File.pathSeparator);
-            int count = st.countTokens();
-            dirs = new File[count];
-            for (int i = 0; i < count; i++) {
-                dirs[i] = new File(st.nextToken());
-            }
-        } else {
-            dirs = new File[0];
-        }
-
-        boolean result = true;
-        for (int i = 0; i < dirs.length; i++) {
-            String[] files = dirs[i].list();
-            if (files != null) {
-                for (int j = 0; j < files.length; j++) {
-                    try {
-                        File f = new File(dirs[i],files[j]);
-                        File canon = new File(f.getCanonicalPath());
-                        URL url = ParseUtil.fileToEncodedURL(canon);
-                        if (url != null){
-                            result = result && checkURLRecursively(1,url);
-                        }
-                    } catch (MalformedURLException e){
-                        error("Malformed URL");
-                    } catch (IOException e) {
-                        error("IO Exception");
-                    }
-                }
-            }
-        }
-        if (result) {
-            generalMessage("No conflicting installed jar found.");
-        } else {
-            generalMessage("Conflicting installed jar found. "
-                           + " Use -verbose for more information.");
-        }
-        return result;
-    }
-
-    /**
-     * Recursively verify that a jar file, and any urls mentioned
-     * in its class path, do not conflict with the target jar file.
-     *
-     * @param indent is the current nesting level
-     * @param url is the path to the jar file being checked.
-     * @return true if there is no newer URL, otherwise false
-     */
-    private boolean checkURLRecursively(int indent, URL url)
-        throws IOException
-    {
-        verboseMessage("Comparing with " + url);
-        JarLoader jarloader = new JarLoader(url);
-        JarFile j = jarloader.getJarFile();
-        Manifest man = j.getManifest();
-        if (man != null) {
-            Attributes attr = man.getMainAttributes();
-            if (attr != null){
-                String title   = attr.getValue(Name.SPECIFICATION_TITLE);
-                String version = attr.getValue(Name.SPECIFICATION_VERSION);
-                String vendor  = attr.getValue(Name.SPECIFICATION_VENDOR);
-                String implTitle   = attr.getValue(Name.IMPLEMENTATION_TITLE);
-                String implVersion
-                    = attr.getValue(Name.IMPLEMENTATION_VERSION);
-                String implVendor  = attr.getValue(Name.IMPLEMENTATION_VENDOR);
-                String sealed      = attr.getValue(Name.SEALED);
-                if (title != null){
-                    if (title.equals(targetSpecTitle)){
-                        if (version != null){
-                            if (version.equals(targetSpecVersion) ||
-                                isNotOlderThan(version,targetSpecVersion)){
-                                verboseMessage("");
-                                verboseMessage("CONFLICT DETECTED ");
-                                verboseMessage("Conflicting file:"+ url);
-                                verboseMessage("Installed Version:" +
-                                               version);
-                                if (implTitle != null)
-                                    verboseMessage("Implementation Title:"+
-                                                   implTitle);
-                                if (implVersion != null)
-                                    verboseMessage("Implementation Version:"+
-                                                   implVersion);
-                                if (implVendor != null)
-                                    verboseMessage("Implementation Vendor:"+
-                                                   implVendor);
-                                return false;
-                            }
-                        }
-                    }
-                }
-            }
-        }
-        boolean result = true;
-        URL[] loaderList = jarloader.getClassPath();
-        if (loaderList != null) {
-            for(int i=0; i < loaderList.length; i++){
-                if (url != null){
-                    boolean res =  checkURLRecursively(indent+1,loaderList[i]);
-                    result = res && result;
-                }
-            }
-        }
-        return result;
-    }
-
-    /**
-     *  See comment in method java.lang.Package.isCompatibleWith.
-     *  Return true if already is not older than target. i.e. the
-     *  target file may be superseded by a file already installed
-     */
-    private boolean isNotOlderThan(String already,String target)
-        throws NumberFormatException
-    {
-            if (already == null || already.length() < 1) {
-            throw new NumberFormatException("Empty version string");
-        }
-
-            // Until it matches scan and compare numbers
-            StringTokenizer dtok = new StringTokenizer(target, ".", true);
-            StringTokenizer stok = new StringTokenizer(already, ".", true);
-        while (dtok.hasMoreTokens() || stok.hasMoreTokens()) {
-            int dver;
-            int sver;
-            if (dtok.hasMoreTokens()) {
-                dver = Integer.parseInt(dtok.nextToken());
-            } else
-                dver = 0;
-
-            if (stok.hasMoreTokens()) {
-                sver = Integer.parseInt(stok.nextToken());
-            } else
-                sver = 0;
-
-                if (sver < dver)
-                        return false;                // Known to be incompatible
-                if (sver > dver)
-                        return true;                // Known to be compatible
-
-                // Check for and absorb separators
-                if (dtok.hasMoreTokens())
-                        dtok.nextToken();
-                if (stok.hasMoreTokens())
-                        stok.nextToken();
-                // Compare next component
-            }
-            // All components numerically equal
-        return true;
-    }
-
-
-    /**
-     * Prints out message if the verboseFlag is set
-     */
-    void verboseMessage(String message){
-        if (verboseFlag) {
-            System.err.println(message);
-        }
-    }
-
-    void generalMessage(String message){
-        System.err.println(message);
-    }
-
-    /**
-     * Throws a RuntimeException with a message describing the error.
-     */
-    static void error(String message) throws RuntimeException {
-        throw new RuntimeException(message);
-    }
-
-
-    /**
-     * Inner class used to represent a loader of resources and classes
-     * from a base URL. Somewhat modified version of code in
-     * sun.misc.URLClassPath.JarLoader
-     */
-    private static class JarLoader {
-        private final URL base;
-        private JarFile jar;
-        private URL csu;
-
-        /*
-         * Creates a new Loader for the specified URL.
-         */
-        JarLoader(URL url) {
-            String urlName = url + "!/";
-            URL tmpBaseURL = null;
-            try {
-                tmpBaseURL = new URL("jar","",urlName);
-                jar = findJarFile(url);
-                csu = url;
-            } catch (MalformedURLException e) {
-                ExtCheck.error("Malformed url "+urlName);
-            } catch (IOException e) {
-                ExtCheck.error("IO Exception occurred");
-            }
-            base = tmpBaseURL;
-
-        }
-
-        /*
-         * Returns the base URL for this Loader.
-         */
-        URL getBaseURL() {
-            return base;
-        }
-
-        JarFile getJarFile() {
-            return jar;
-        }
-
-        private JarFile findJarFile(URL url) throws IOException {
-             // Optimize case where url refers to a local jar file
-             if ("file".equals(url.getProtocol())) {
-                 String path = url.getFile().replace('/', File.separatorChar);
-                 File file = new File(path);
-                 if (!file.exists()) {
-                     throw new FileNotFoundException(path);
-                 }
-                 return new JarFile(path);
-             }
-             URLConnection uc = getBaseURL().openConnection();
-             //uc.setRequestProperty(USER_AGENT_JAVA_VERSION, JAVA_VERSION);
-             return ((JarURLConnection)uc).getJarFile();
-         }
-
-
-        /*
-         * Returns the JAR file local class path, or null if none.
-         */
-        URL[] getClassPath() throws IOException {
-            Manifest man = jar.getManifest();
-            if (man != null) {
-                Attributes attr = man.getMainAttributes();
-                if (attr != null) {
-                    String value = attr.getValue(Name.CLASS_PATH);
-                    if (value != null) {
-                        return parseClassPath(csu, value);
-                    }
-                }
-            }
-            return null;
-        }
-
-        /*
-         * Parses value of the Class-Path manifest attribute and returns
-         * an array of URLs relative to the specified base URL.
-         */
-        private URL[] parseClassPath(URL base, String value)
-            throws MalformedURLException
-        {
-            StringTokenizer st = new StringTokenizer(value);
-            URL[] urls = new URL[st.countTokens()];
-            int i = 0;
-            while (st.hasMoreTokens()) {
-                String path = st.nextToken();
-                urls[i] = new URL(base, path);
-                i++;
-            }
-            return urls;
-        }
-    }
-
-
-}
diff --git a/ojluni/src/main/java/com/sun/tools/extcheck/Main.java b/ojluni/src/main/java/com/sun/tools/extcheck/Main.java
deleted file mode 100755
index b3f76a3..0000000
--- a/ojluni/src/main/java/com/sun/tools/extcheck/Main.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package com.sun.tools.extcheck;
-
-import java.io.*;
-
-/**
- * Main program of extcheck
- */
-
-public final class Main {
-    public static final String INSUFFICIENT = "Insufficient number of arguments";
-    public static final String MISSING = "Missing <jar file> argument";
-    public static final String DOES_NOT_EXIST = "Jarfile does not exist: ";
-    public static final String EXTRA = "Extra command line argument: ";
-
-    /**
-     * Terminates with one of the following codes
-     *  1 A newer (or same version) jar file is already installed
-     *  0 No newer jar file was found
-     *  -1 An internal error occurred
-     */
-    public static void main(String args[]) {
-        try {
-            realMain(args);
-        } catch (Exception ex) {
-            System.err.println(ex.getMessage());
-            System.exit(-1);
-        }
-    }
-
-    public static void realMain(String[] args) throws Exception {
-        if (args.length < 1) {
-            usage(INSUFFICIENT);
-        }
-        int argIndex = 0;
-        boolean verboseFlag = false;
-        if (args[argIndex].equals("-verbose")) {
-            verboseFlag = true;
-            argIndex++;
-            if (argIndex >= args.length) {
-                usage(MISSING);
-            }
-        }
-        String jarName = args[argIndex];
-        argIndex++;
-        File jarFile = new File(jarName);
-        if (!jarFile.exists()){
-            usage(DOES_NOT_EXIST + jarName);
-        }
-        if (argIndex < args.length) {
-            usage(EXTRA + args[argIndex]);
-        }
-        ExtCheck jt = ExtCheck.create(jarFile,verboseFlag);
-        boolean result = jt.checkInstalledAgainstTarget();
-        if (result) {
-            System.exit(0);
-        } else {
-            System.exit(1);
-        }
-    }
-
-    private static void usage(String msg) throws Exception {
-        throw new Exception(msg + "\nUsage: extcheck [-verbose] <jar file>");
-    }
-}
-
diff --git a/ojluni/src/main/java/com/sun/tools/hat/MANIFEST.mf b/ojluni/src/main/java/com/sun/tools/hat/MANIFEST.mf
deleted file mode 100755
index 35334c8..0000000
--- a/ojluni/src/main/java/com/sun/tools/hat/MANIFEST.mf
+++ /dev/null
@@ -1,2 +0,0 @@
-Manifest-Version: 1.0
-Main-Class: com.sun.tools.hat.Main
diff --git a/ojluni/src/main/java/com/sun/tools/hat/Main.java b/ojluni/src/main/java/com/sun/tools/hat/Main.java
deleted file mode 100755
index 0475adc..0000000
--- a/ojluni/src/main/java/com/sun/tools/hat/Main.java
+++ /dev/null
@@ -1,212 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-/*
- * The Original Code is HAT. The Initial Developer of the
- * Original Code is Bill Foote, with contributions from others
- * at JavaSoft/Sun.
- */
-
-package com.sun.tools.hat;
-
-import java.io.IOException;
-import java.io.File;
-
-import com.sun.tools.hat.internal.model.Snapshot;
-import com.sun.tools.hat.internal.model.ReachableExcludesImpl;
-import com.sun.tools.hat.internal.server.QueryListener;
-
-/**
- *
- * @author      Bill Foote
- */
-
-
-public class Main {
-
-    private static String VERSION_STRING = "jhat version 2.0";
-
-    private static void usage(String message) {
-        if ( message != null ) {
-            System.err.println("ERROR: " + message);
-        }
-        System.err.println("Usage:  jhat [-stack <bool>] [-refs <bool>] [-port <port>] [-baseline <file>] [-debug <int>] [-version] [-h|-help] <file>");
-        System.err.println();
-        System.err.println("\t-J<flag>          Pass <flag> directly to the runtime system. For");
-        System.err.println("\t\t\t  example, -J-mx512m to use a maximum heap size of 512MB");
-        System.err.println("\t-stack false:     Turn off tracking object allocation call stack.");
-        System.err.println("\t-refs false:      Turn off tracking of references to objects");
-        System.err.println("\t-port <port>:     Set the port for the HTTP server.  Defaults to 7000");
-        System.err.println("\t-exclude <file>:  Specify a file that lists data members that should");
-        System.err.println("\t\t\t  be excluded from the reachableFrom query.");
-        System.err.println("\t-baseline <file>: Specify a baseline object dump.  Objects in");
-        System.err.println("\t\t\t  both heap dumps with the same ID and same class will");
-        System.err.println("\t\t\t  be marked as not being \"new\".");
-        System.err.println("\t-debug <int>:     Set debug level.");
-        System.err.println("\t\t\t    0:  No debug output");
-        System.err.println("\t\t\t    1:  Debug hprof file parsing");
-        System.err.println("\t\t\t    2:  Debug hprof file parsing, no server");
-        System.err.println("\t-version          Report version number");
-        System.err.println("\t-h|-help          Print this help and exit");
-        System.err.println("\t<file>            The file to read");
-        System.err.println();
-        System.err.println("For a dump file that contains multiple heap dumps,");
-        System.err.println("you may specify which dump in the file");
-        System.err.println("by appending \"#<number>\" to the file name, i.e. \"foo.hprof#3\".");
-        System.err.println();
-        System.err.println("All boolean options default to \"true\"");
-        System.exit(1);
-    }
-
-    //
-    // Convert s to a boolean.  If it's invalid, abort the program.
-    //
-    private static boolean booleanValue(String s) {
-        if ("true".equalsIgnoreCase(s)) {
-            return true;
-        } else if ("false".equalsIgnoreCase(s)) {
-            return false;
-        } else {
-            usage("Boolean value must be true or false");
-            return false;       // Never happens
-        }
-    }
-
-    public static void main(String[] args) {
-        if (args.length < 1) {
-            usage("No arguments supplied");
-        }
-
-        boolean parseonly = false;
-        int portNumber = 7000;
-        boolean callStack = true;
-        boolean calculateRefs = true;
-        String baselineDump = null;
-        String excludeFileName = null;
-        int debugLevel = 0;
-        for (int i = 0; ; i += 2) {
-            if (i > (args.length - 1)) {
-                usage("Option parsing error");
-            }
-            if ("-version".equals(args[i])) {
-                System.out.print(VERSION_STRING);
-                System.out.println(" (java version " + System.getProperty("java.version") + ")");
-                System.exit(0);
-            }
-
-            if ("-h".equals(args[i]) || "-help".equals(args[i])) {
-                usage(null);
-            }
-
-            if (i == (args.length - 1)) {
-                break;
-            }
-            String key = args[i];
-            String value = args[i+1];
-            if ("-stack".equals(key)) {
-                callStack = booleanValue(value);
-            } else if ("-refs".equals(key)) {
-                calculateRefs = booleanValue(value);
-            } else if ("-port".equals(key)) {
-                portNumber = Integer.parseInt(value, 10);
-            } else if ("-exclude".equals(key)) {
-                excludeFileName = value;
-            } else if ("-baseline".equals(key)) {
-                baselineDump = value;
-            } else if ("-debug".equals(key)) {
-                debugLevel = Integer.parseInt(value, 10);
-            } else if ("-parseonly".equals(key)) {
-                // Undocumented option. To be used for testing purpose only
-                parseonly = booleanValue(value);
-            }
-        }
-        String fileName = args[args.length - 1];
-        Snapshot model = null;
-        File excludeFile = null;
-        if (excludeFileName != null) {
-            excludeFile = new File(excludeFileName);
-            if (!excludeFile.exists()) {
-                System.out.println("Exclude file " + excludeFile
-                                    + " does not exist.  Aborting.");
-                System.exit(1);
-            }
-        }
-
-        System.out.println("Reading from " + fileName + "...");
-        try {
-            model = com.sun.tools.hat.internal.parser.Reader.readFile(fileName, callStack, debugLevel);
-        } catch (IOException ex) {
-            ex.printStackTrace();
-            System.exit(1);
-        } catch (RuntimeException ex) {
-            ex.printStackTrace();
-            System.exit(1);
-        }
-        System.out.println("Snapshot read, resolving...");
-        model.resolve(calculateRefs);
-        System.out.println("Snapshot resolved.");
-
-        if (excludeFile != null) {
-            model.setReachableExcludes(new ReachableExcludesImpl(excludeFile));
-        }
-
-        if (baselineDump != null) {
-            System.out.println("Reading baseline snapshot...");
-            Snapshot baseline = null;
-            try {
-                baseline = com.sun.tools.hat.internal.parser.Reader.readFile(baselineDump, false,
-                                                      debugLevel);
-            } catch (IOException ex) {
-                ex.printStackTrace();
-                System.exit(1);
-            } catch (RuntimeException ex) {
-                ex.printStackTrace();
-                System.exit(1);
-            }
-            baseline.resolve(false);
-            System.out.println("Discovering new objects...");
-            model.markNewRelativeTo(baseline);
-            baseline = null;    // Guard against conservative GC
-        }
-        if ( debugLevel == 2 ) {
-            System.out.println("No server, -debug 2 was used.");
-            System.exit(0);
-        }
-
-        if (parseonly) {
-            // do not start web server.
-            System.out.println("-parseonly is true, exiting..");
-            System.exit(0);
-        }
-
-        QueryListener listener = new QueryListener(portNumber);
-        listener.setModel(model);
-        Thread t = new Thread(listener, "Query Listener");
-        t.setPriority(Thread.NORM_PRIORITY+1);
-        t.start();
-        System.out.println("Started HTTP server on port " + portNumber);
-        System.out.println("Server is ready.");
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/hat/README.txt b/ojluni/src/main/java/com/sun/tools/hat/README.txt
deleted file mode 100755
index 9bc0b9a..0000000
--- a/ojluni/src/main/java/com/sun/tools/hat/README.txt
+++ /dev/null
@@ -1,20 +0,0 @@
---------------
-This HAT source originally came from the http://hat.dev.java.net site.
-
-The utility has been named 'jhat' in the JDK, it is basically the same tool.
-
-Q: Where do I make changes? In the JDK or hat.dev.java.net?
-
-A: It depends on whether the change is intended for the JDK jhat version only,
-   or expected to be given back to the java.net project.
-   In general, we should putback changes to the java.net project and
-   bringover those changes to the JDK.
-
-Q: I want to build just jhat.jar instead of building entire JDK. What should I do?
-
-A: Use ant makefile (build.xml) in the current directory. This builds just the
-jhat sources and creates jhat.jar under ./build directory.
-
-To run the built jhat.jar, you can use the command:
-
-    java -jar build/jhat.jar heap_dump
diff --git a/ojluni/src/main/java/com/sun/tools/hat/build.xml b/ojluni/src/main/java/com/sun/tools/hat/build.xml
deleted file mode 100755
index 2d7bdc8..0000000
--- a/ojluni/src/main/java/com/sun/tools/hat/build.xml
+++ /dev/null
@@ -1,82 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- Copyright (c) 2005, 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.
--->
-
-<!-- 
-
- The Original Code is HAT. The Initial Developer of the
- Original Code is Bill Foote, with contributions from others
- at JavaSoft/Sun.
-
--->
-
-<!-- This is an Ant project file to build Heap Analysis Tool (HAT).
-     For more information on Ant, please see http://ant.apache.org/ 
-
-     To build jhat.jar, run ant in current directory. jhat.jar is
-     built in ./build directory.
--->
-
-<project name="Java Heap Analysis Tool" default="all" basedir=".">
-
-  <!-- Property Definitions -->
-
-  <property name="app.name" value="jhat"/>
-  <property name="src.dir"  value="."/>
-  <property name="build.dir"  value="build"/>
-  <property name="classes.dir"  value="${build.dir}/classes"/>
-  <property name="dist.jar" value="${app.name}.jar"/>
-
-  <target name="prepare">
-    <mkdir dir="${build.dir}"/>
-    <mkdir dir="${classes.dir}"/>
-  </target>
-
-  <target name="clean">
-     <delete dir="${build.dir}"/>
-  </target>
-
-  <target name="compile" depends="prepare" description="Compiles the sources">
-    <javac srcdir="${src.dir}" destdir="${classes.dir}"
-           debug="on" deprecation="on">
-    </javac>
-
-  </target>
-
-  <target name="deploy" depends="compile" description="Creates a deployment bundle">
-    <delete file="${build.dir}/${dist.jar}" />
-    <mkdir dir="${classes.dir}/com/sun/tools/hat/resources" />
-    <copy todir="${classes.dir}/com/sun/tools/hat/resources">
-      <fileset dir="${src.dir}/resources" includes="*" />
-    </copy>
-
-    <jar jarfile="${build.dir}/${dist.jar}"
-         manifest="${src.dir}/MANIFEST.mf" basedir="${classes.dir}"/>
-  </target>
-
-  <target name="all" depends="deploy" description="Builds sources and deployment jar"/>
-
-</project>
diff --git a/ojluni/src/main/java/com/sun/tools/hat/internal/model/AbstractJavaHeapObjectVisitor.java b/ojluni/src/main/java/com/sun/tools/hat/internal/model/AbstractJavaHeapObjectVisitor.java
deleted file mode 100755
index 28d57e1..0000000
--- a/ojluni/src/main/java/com/sun/tools/hat/internal/model/AbstractJavaHeapObjectVisitor.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-
-/*
- * The Original Code is HAT. The Initial Developer of the
- * Original Code is Bill Foote, with contributions from others
- * at JavaSoft/Sun.
- */
-
-package com.sun.tools.hat.internal.model;
-
-/**
- * A visitor for a JavaThing.  @see JavaObject#visitReferencedObjects()
- *
- */
-
-
-abstract public class AbstractJavaHeapObjectVisitor
-                implements JavaHeapObjectVisitor {
-    abstract public void visit(JavaHeapObject other);
-
-    /**
-     * Should the given field be excluded from the set of things visited?
-     * @return true if it should.
-     */
-    public boolean exclude(JavaClass clazz, JavaField f) {
-        return false;
-    }
-
-    /**
-     * @return true iff exclude might ever return true
-     */
-    public boolean mightExclude() {
-        return false;
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/tools/hat/internal/model/ArrayTypeCodes.java b/ojluni/src/main/java/com/sun/tools/hat/internal/model/ArrayTypeCodes.java
deleted file mode 100755
index 1326330..0000000
--- a/ojluni/src/main/java/com/sun/tools/hat/internal/model/ArrayTypeCodes.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-
-/*
- * The Original Code is HAT. The Initial Developer of the
- * Original Code is Bill Foote, with contributions from others
- * at JavaSoft/Sun.
- */
-
-package com.sun.tools.hat.internal.model;
-
-/**
- * Primitive array type codes as defined by VM specification.
- *
- */
-public interface ArrayTypeCodes {
-    // Typecodes for array elements.
-    // Refer to newarray instruction in VM Spec.
-    public static final int T_BOOLEAN = 4;
-    public static final int T_CHAR    = 5;
-    public static final int T_FLOAT   = 6;
-    public static final int T_DOUBLE  = 7;
-    public static final int T_BYTE    = 8;
-    public static final int T_SHORT   = 9;
-    public static final int T_INT     = 10;
-    public static final int T_LONG    = 11;
-}
diff --git a/ojluni/src/main/java/com/sun/tools/hat/internal/model/HackJavaValue.java b/ojluni/src/main/java/com/sun/tools/hat/internal/model/HackJavaValue.java
deleted file mode 100755
index f91ffa5..0000000
--- a/ojluni/src/main/java/com/sun/tools/hat/internal/model/HackJavaValue.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-
-/*
- * The Original Code is HAT. The Initial Developer of the
- * Original Code is Bill Foote, with contributions from others
- * at JavaSoft/Sun.
- */
-
-package com.sun.tools.hat.internal.model;
-
-/**
- * This is used to represent values that the program doesn't really understand.
- * This includes the null vlaue, and unresolved references (which shouldn't
- * happen in well-formed hprof files).
- *
- *
- * @author      Bill Foote
- */
-
-
-
-
-public class HackJavaValue extends JavaValue {
-
-    private String value;
-    private int size;
-
-    public HackJavaValue(String value, int size) {
-        this.value = value;
-        this.size = size;
-    }
-
-    public String toString() {
-        return value;
-    }
-
-    public int getSize() {
-        return size;
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/tools/hat/internal/model/JavaBoolean.java b/ojluni/src/main/java/com/sun/tools/hat/internal/model/JavaBoolean.java
deleted file mode 100755
index e0abe66..0000000
--- a/ojluni/src/main/java/com/sun/tools/hat/internal/model/JavaBoolean.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-
-/*
- * The Original Code is HAT. The Initial Developer of the
- * Original Code is Bill Foote, with contributions from others
- * at JavaSoft/Sun.
- */
-
-package com.sun.tools.hat.internal.model;
-
-/**
- * Represents a boolean (i.e. a boolean field in an instance).
- *
- * @author      Bill Foote
- */
-
-
-public class JavaBoolean extends JavaValue {
-
-    boolean value;
-
-    public JavaBoolean(boolean value) {
-        this.value = value;
-    }
-
-    public String toString() {
-        return "" + value;
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/tools/hat/internal/model/JavaByte.java b/ojluni/src/main/java/com/sun/tools/hat/internal/model/JavaByte.java
deleted file mode 100755
index de9d058..0000000
--- a/ojluni/src/main/java/com/sun/tools/hat/internal/model/JavaByte.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-
-/*
- * The Original Code is HAT. The Initial Developer of the
- * Original Code is Bill Foote, with contributions from others
- * at JavaSoft/Sun.
- */
-
-package com.sun.tools.hat.internal.model;
-
-/**
- * Represents an byte (i.e. a byte field in an instance).
- *
- * @author      Bill Foote
- */
-
-
-public class JavaByte extends JavaValue {
-
-    byte value;
-
-    public JavaByte(byte value) {
-        this.value = value;
-    }
-
-    public String toString() {
-        return "0x" + Integer.toString(((int) value) & 0xff, 16);
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/tools/hat/internal/model/JavaChar.java b/ojluni/src/main/java/com/sun/tools/hat/internal/model/JavaChar.java
deleted file mode 100755
index f58e465..0000000
--- a/ojluni/src/main/java/com/sun/tools/hat/internal/model/JavaChar.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-
-/*
- * The Original Code is HAT. The Initial Developer of the
- * Original Code is Bill Foote, with contributions from others
- * at JavaSoft/Sun.
- */
-
-package com.sun.tools.hat.internal.model;
-
-/**
- * Represents a char (i.e. a char field in an instance).
- *
- * @author      Bill Foote
- */
-
-
-public class JavaChar extends JavaValue {
-
-    char value;
-
-    public JavaChar(char value) {
-        this.value = value;
-    }
-
-    public String toString() {
-        return "" + value;
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/tools/hat/internal/model/JavaClass.java b/ojluni/src/main/java/com/sun/tools/hat/internal/model/JavaClass.java
deleted file mode 100755
index e7a59b3..0000000
--- a/ojluni/src/main/java/com/sun/tools/hat/internal/model/JavaClass.java
+++ /dev/null
@@ -1,503 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-
-/*
- * The Original Code is HAT. The Initial Developer of the
- * Original Code is Bill Foote, with contributions from others
- * at JavaSoft/Sun.
- */
-
-package com.sun.tools.hat.internal.model;
-
-import java.util.Vector;
-import java.util.Enumeration;
-import com.sun.tools.hat.internal.util.CompositeEnumeration;
-import com.sun.tools.hat.internal.parser.ReadBuffer;
-
-/**
- *
- * @author      Bill Foote
- */
-
-
-public class JavaClass extends JavaHeapObject {
-    // my id
-    private long id;
-    // my name
-    private String name;
-
-    // These are JavaObjectRef before resolve
-    private JavaThing superclass;
-    private JavaThing loader;
-    private JavaThing signers;
-    private JavaThing protectionDomain;
-
-    // non-static fields
-    private JavaField[] fields;
-    // static fields
-    private JavaStatic[] statics;
-
-    private static final JavaClass[] EMPTY_CLASS_ARRAY = new JavaClass[0];
-    // my subclasses
-    private JavaClass[] subclasses = EMPTY_CLASS_ARRAY;
-
-    // my instances
-    private Vector<JavaHeapObject> instances = new Vector<JavaHeapObject>();
-
-    // Who I belong to.  Set on resolve.
-    private Snapshot mySnapshot;
-
-    // Size of an instance, including VM overhead
-    private int instanceSize;
-    // Total number of fields including inherited ones
-    private int totalNumFields;
-
-
-    public JavaClass(long id, String name, long superclassId, long loaderId,
-                     long signersId, long protDomainId,
-                     JavaField[] fields, JavaStatic[] statics,
-                     int instanceSize) {
-        this.id = id;
-        this.name = name;
-        this.superclass = new JavaObjectRef(superclassId);
-        this.loader = new JavaObjectRef(loaderId);
-        this.signers = new JavaObjectRef(signersId);
-        this.protectionDomain = new JavaObjectRef(protDomainId);
-        this.fields = fields;
-        this.statics = statics;
-        this.instanceSize = instanceSize;
-    }
-
-    public JavaClass(String name, long superclassId, long loaderId,
-                     long signersId, long protDomainId,
-                     JavaField[] fields, JavaStatic[] statics,
-                     int instanceSize) {
-        this(-1L, name, superclassId, loaderId, signersId,
-             protDomainId, fields, statics, instanceSize);
-    }
-
-    public final JavaClass getClazz() {
-        return mySnapshot.getJavaLangClass();
-    }
-
-    public final int getIdentifierSize() {
-        return mySnapshot.getIdentifierSize();
-    }
-
-    public final int getMinimumObjectSize() {
-        return mySnapshot.getMinimumObjectSize();
-    }
-
-    public void resolve(Snapshot snapshot) {
-        if (mySnapshot != null) {
-            return;
-        }
-        mySnapshot = snapshot;
-        resolveSuperclass(snapshot);
-        if (superclass != null) {
-            ((JavaClass) superclass).addSubclass(this);
-        }
-
-        loader  = loader.dereference(snapshot, null);
-        signers  = signers.dereference(snapshot, null);
-        protectionDomain  = protectionDomain.dereference(snapshot, null);
-
-        for (int i = 0; i < statics.length; i++) {
-            statics[i].resolve(this, snapshot);
-        }
-        snapshot.getJavaLangClass().addInstance(this);
-        super.resolve(snapshot);
-        return;
-    }
-
-    /**
-     * Resolve our superclass.  This might be called well before
-     * all instances are available (like when reading deferred
-     * instances in a 1.2 dump file :-)  Calling this is sufficient
-     * to be able to explore this class' fields.
-     */
-    public void resolveSuperclass(Snapshot snapshot) {
-        if (superclass == null) {
-            // We must be java.lang.Object, so we have no superclass.
-        } else {
-            totalNumFields = fields.length;
-            superclass = superclass.dereference(snapshot, null);
-            if (superclass == snapshot.getNullThing()) {
-                superclass = null;
-            } else {
-                try {
-                    JavaClass sc = (JavaClass) superclass;
-                    sc.resolveSuperclass(snapshot);
-                    totalNumFields += sc.totalNumFields;
-                } catch (ClassCastException ex) {
-                    System.out.println("Warning!  Superclass of " + name + " is " + superclass);
-                    superclass = null;
-                }
-            }
-        }
-    }
-
-    public boolean isString() {
-        return mySnapshot.getJavaLangString() == this;
-    }
-
-    public boolean isClassLoader() {
-        return mySnapshot.getJavaLangClassLoader().isAssignableFrom(this);
-    }
-
-    /**
-     * Get a numbered field from this class
-     */
-    public JavaField getField(int i) {
-        if (i < 0 || i >= fields.length) {
-            throw new Error("No field " + i + " for " + name);
-        }
-        return fields[i];
-    }
-
-    /**
-     * Get the total number of fields that are part of an instance of
-     * this class.  That is, include superclasses.
-     */
-    public int getNumFieldsForInstance() {
-        return totalNumFields;
-    }
-
-    /**
-     * Get a numbered field from all the fields that are part of instance
-     * of this class.  That is, include superclasses.
-     */
-    public JavaField getFieldForInstance(int i) {
-        if (superclass != null) {
-            JavaClass sc = (JavaClass) superclass;
-            if (i < sc.totalNumFields) {
-                return sc.getFieldForInstance(i);
-            }
-            i -= sc.totalNumFields;
-        }
-        return getField(i);
-    }
-
-    /**
-     * Get the class responsible for field i, where i is a field number that
-     * could be passed into getFieldForInstance.
-     *
-     * @see JavaClass.getFieldForInstance()
-     */
-    public JavaClass getClassForField(int i) {
-        if (superclass != null) {
-            JavaClass sc = (JavaClass) superclass;
-            if (i < sc.totalNumFields) {
-                return sc.getClassForField(i);
-            }
-        }
-        return this;
-    }
-
-    public long getId() {
-        return id;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public boolean isArray() {
-        return name.indexOf('[') != -1;
-    }
-
-    public Enumeration getInstances(boolean includeSubclasses) {
-        if (includeSubclasses) {
-            Enumeration res = instances.elements();
-            for (int i = 0; i < subclasses.length; i++) {
-                res = new CompositeEnumeration(res,
-                              subclasses[i].getInstances(true));
-            }
-            return res;
-        } else {
-            return instances.elements();
-        }
-    }
-
-    /**
-     * @return a count of the instances of this class
-     */
-    public int getInstancesCount(boolean includeSubclasses) {
-        int result = instances.size();
-        if (includeSubclasses) {
-            for (int i = 0; i < subclasses.length; i++) {
-                result += subclasses[i].getInstancesCount(includeSubclasses);
-            }
-        }
-        return result;
-    }
-
-    public JavaClass[] getSubclasses() {
-        return subclasses;
-    }
-
-    /**
-     * This can only safely be called after resolve()
-     */
-    public JavaClass getSuperclass() {
-        return (JavaClass) superclass;
-    }
-
-    /**
-     * This can only safely be called after resolve()
-     */
-    public JavaThing getLoader() {
-        return loader;
-    }
-
-    /**
-     * This can only safely be called after resolve()
-     */
-    public boolean isBootstrap() {
-        return loader == mySnapshot.getNullThing();
-    }
-
-    /**
-     * This can only safely be called after resolve()
-     */
-    public JavaThing getSigners() {
-        return signers;
-    }
-
-    /**
-     * This can only safely be called after resolve()
-     */
-    public JavaThing getProtectionDomain() {
-        return protectionDomain;
-    }
-
-    public JavaField[] getFields() {
-        return fields;
-    }
-
-    /**
-     * Includes superclass fields
-     */
-    public JavaField[] getFieldsForInstance() {
-        Vector<JavaField> v = new Vector<JavaField>();
-        addFields(v);
-        JavaField[] result = new JavaField[v.size()];
-        for (int i = 0; i < v.size(); i++) {
-            result[i] =  v.elementAt(i);
-        }
-        return result;
-    }
-
-
-    public JavaStatic[] getStatics() {
-        return statics;
-    }
-
-    // returns value of static field of given name
-    public JavaThing getStaticField(String name) {
-        for (int i = 0; i < statics.length; i++) {
-            JavaStatic s = statics[i];
-            if (s.getField().getName().equals(name)) {
-                return s.getValue();
-            }
-        }
-        return null;
-    }
-
-    public String toString() {
-        return "class " + name;
-    }
-
-    public int compareTo(JavaThing other) {
-        if (other instanceof JavaClass) {
-            return name.compareTo(((JavaClass) other).name);
-        }
-        return super.compareTo(other);
-    }
-
-
-    /**
-     * @return true iff a variable of type this is assignable from an instance
-     *          of other
-     */
-    public boolean isAssignableFrom(JavaClass other) {
-        if (this == other) {
-            return true;
-        } else if (other == null) {
-            return false;
-        } else {
-            return isAssignableFrom((JavaClass) other.superclass);
-            // Trivial tail recursion:  I have faith in javac.
-        }
-    }
-
-    /**
-     * Describe the reference that this thing has to target.  This will only
-     * be called if target is in the array returned by getChildrenForRootset.
-     */
-     public String describeReferenceTo(JavaThing target, Snapshot ss) {
-        for (int i = 0; i < statics.length; i++) {
-            JavaField f = statics[i].getField();
-            if (f.hasId()) {
-                JavaThing other = statics[i].getValue();
-                if (other == target) {
-                    return "static field " + f.getName();
-                }
-            }
-        }
-        return super.describeReferenceTo(target, ss);
-    }
-
-    /**
-     * @return the size of an instance of this class.  Gives 0 for an array
-     *          type.
-     */
-    public int getInstanceSize() {
-        return instanceSize + mySnapshot.getMinimumObjectSize();
-    }
-
-
-    /**
-     * @return The size of all instances of this class.  Correctly handles
-     *          arrays.
-     */
-    public long getTotalInstanceSize() {
-        int count = instances.size();
-        if (count == 0 || !isArray()) {
-            return count * instanceSize;
-        }
-
-        // array class and non-zero count, we have to
-        // get the size of each instance and sum it
-        long result = 0;
-        for (int i = 0; i < count; i++) {
-            JavaThing t = (JavaThing) instances.elementAt(i);
-            result += t.getSize();
-        }
-        return result;
-    }
-
-    /**
-     * @return the size of this object
-     */
-    public int getSize() {
-        JavaClass cl = mySnapshot.getJavaLangClass();
-        if (cl == null) {
-            return 0;
-        } else {
-            return cl.getInstanceSize();
-        }
-    }
-
-    public void visitReferencedObjects(JavaHeapObjectVisitor v) {
-        super.visitReferencedObjects(v);
-        JavaHeapObject sc = getSuperclass();
-        if (sc != null) v.visit(getSuperclass());
-
-        JavaThing other;
-        other = getLoader();
-        if (other instanceof JavaHeapObject) {
-            v.visit((JavaHeapObject)other);
-        }
-        other = getSigners();
-        if (other instanceof JavaHeapObject) {
-            v.visit((JavaHeapObject)other);
-        }
-        other = getProtectionDomain();
-        if (other instanceof JavaHeapObject) {
-            v.visit((JavaHeapObject)other);
-        }
-
-        for (int i = 0; i < statics.length; i++) {
-            JavaField f = statics[i].getField();
-            if (!v.exclude(this, f) && f.hasId()) {
-                other = statics[i].getValue();
-                if (other instanceof JavaHeapObject) {
-                    v.visit((JavaHeapObject) other);
-                }
-            }
-        }
-    }
-
-    // package-privates below this point
-    final ReadBuffer getReadBuffer() {
-        return mySnapshot.getReadBuffer();
-    }
-
-    final void setNew(JavaHeapObject obj, boolean flag) {
-        mySnapshot.setNew(obj, flag);
-    }
-
-    final boolean isNew(JavaHeapObject obj) {
-        return mySnapshot.isNew(obj);
-    }
-
-    final StackTrace getSiteTrace(JavaHeapObject obj) {
-        return mySnapshot.getSiteTrace(obj);
-    }
-
-    final void addReferenceFromRoot(Root root, JavaHeapObject obj) {
-        mySnapshot.addReferenceFromRoot(root, obj);
-    }
-
-    final Root getRoot(JavaHeapObject obj) {
-        return mySnapshot.getRoot(obj);
-    }
-
-    final Snapshot getSnapshot() {
-        return mySnapshot;
-    }
-
-    void addInstance(JavaHeapObject inst) {
-        instances.addElement(inst);
-    }
-
-    // Internals only below this point
-    private void addFields(Vector<JavaField> v) {
-        if (superclass != null) {
-            ((JavaClass) superclass).addFields(v);
-        }
-        for (int i = 0; i < fields.length; i++) {
-            v.addElement(fields[i]);
-        }
-    }
-
-    private void addSubclassInstances(Vector<JavaHeapObject> v) {
-        for (int i = 0; i < subclasses.length; i++) {
-            subclasses[i].addSubclassInstances(v);
-        }
-        for (int i = 0; i < instances.size(); i++) {
-            v.addElement(instances.elementAt(i));
-        }
-    }
-
-    private void addSubclass(JavaClass sub) {
-        JavaClass newValue[] = new JavaClass[subclasses.length + 1];
-        System.arraycopy(subclasses, 0, newValue, 0, subclasses.length);
-        newValue[subclasses.length] = sub;
-        subclasses = newValue;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/hat/internal/model/JavaDouble.java b/ojluni/src/main/java/com/sun/tools/hat/internal/model/JavaDouble.java
deleted file mode 100755
index fc4a3f5..0000000
--- a/ojluni/src/main/java/com/sun/tools/hat/internal/model/JavaDouble.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-
-/*
- * The Original Code is HAT. The Initial Developer of the
- * Original Code is Bill Foote, with contributions from others
- * at JavaSoft/Sun.
- */
-
-package com.sun.tools.hat.internal.model;
-
-/**
- * Represents a double (i.e. a double field in an instance).
- *
- * @author      Bill Foote
- */
-
-
-public class JavaDouble extends JavaValue {
-
-    double value;
-
-    public JavaDouble(double value) {
-        this.value = value;
-    }
-
-    public String toString() {
-        return Double.toString(value);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/hat/internal/model/JavaField.java b/ojluni/src/main/java/com/sun/tools/hat/internal/model/JavaField.java
deleted file mode 100755
index 51c98c4..0000000
--- a/ojluni/src/main/java/com/sun/tools/hat/internal/model/JavaField.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-
-/*
- * The Original Code is HAT. The Initial Developer of the
- * Original Code is Bill Foote, with contributions from others
- * at JavaSoft/Sun.
- */
-
-package com.sun.tools.hat.internal.model;
-
-
-/**
- *
- * @author      Bill Foote
- */
-
-public class JavaField {
-
-    private String name;
-    private String signature;
-
-    public JavaField(String name, String signature) {
-        this.name = name;
-        this.signature = signature;
-    }
-
-
-    /**
-     * @return true if the type of this field is something that has an ID.
-     *          int fields, for exampe, don't.
-     */
-    public boolean hasId() {
-        char ch = signature.charAt(0);
-        return (ch == '[' || ch == 'L');
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public String getSignature() {
-        return signature;
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/tools/hat/internal/model/JavaFloat.java b/ojluni/src/main/java/com/sun/tools/hat/internal/model/JavaFloat.java
deleted file mode 100755
index 3c9b406..0000000
--- a/ojluni/src/main/java/com/sun/tools/hat/internal/model/JavaFloat.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-
-/*
- * The Original Code is HAT. The Initial Developer of the
- * Original Code is Bill Foote, with contributions from others
- * at JavaSoft/Sun.
- */
-
-package com.sun.tools.hat.internal.model;
-
-/**
- * Represents a float (i.e. a float field in an instance).
- *
- * @author      Bill Foote
- */
-
-
-public class JavaFloat extends JavaValue {
-
-    float value;
-
-    public JavaFloat(float value) {
-        this.value = value;
-    }
-
-    public String toString() {
-        return Float.toString(value);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/hat/internal/model/JavaHeapObject.java b/ojluni/src/main/java/com/sun/tools/hat/internal/model/JavaHeapObject.java
deleted file mode 100755
index 508e0c0..0000000
--- a/ojluni/src/main/java/com/sun/tools/hat/internal/model/JavaHeapObject.java
+++ /dev/null
@@ -1,207 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-
-/*
- * The Original Code is HAT. The Initial Developer of the
- * Original Code is Bill Foote, with contributions from others
- * at JavaSoft/Sun.
- */
-
-package com.sun.tools.hat.internal.model;
-
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.Map;
-import com.sun.tools.hat.internal.util.Misc;
-
-
-/**
- *
- * @author      Bill Foote
- */
-
-/**
- * Represents an object that's allocated out of the Java heap.  It occupies
- * memory in the VM, and is the sort of thing that in a JDK 1.1 VM had
- * a handle.  It can be a
- * JavaClass, a JavaObjectArray, a JavaValueArray or a JavaObject.
- */
-
-public abstract class JavaHeapObject extends JavaThing {
-
-    //
-    // Who we refer to.  This is heavily optimized for space, because it's
-    // well worth trading a bit of speed for less swapping.
-    // referers and referersLen go through two phases:  Building and
-    // resolved.  When building, referers might have duplicates, but can
-    // be appended to.  When resolved, referers has no duplicates or
-    // empty slots.
-    //
-    private JavaThing[] referers = null;
-    private int referersLen = 0;        // -1 when resolved
-
-    public abstract JavaClass getClazz();
-    public abstract int getSize();
-    public abstract long getId();
-
-    /**
-     * Do any initialization this thing needs after its data is read in.
-     * Subclasses that override this should call super.resolve().
-     */
-    public void resolve(Snapshot snapshot) {
-        StackTrace trace = snapshot.getSiteTrace(this);
-        if (trace != null) {
-            trace.resolve(snapshot);
-        }
-    }
-
-    //
-    //  Eliminate duplicates from referers, and size the array exactly.
-    // This sets us up to answer queries.  See the comments around the
-    // referers data member for details.
-    //
-    void setupReferers() {
-        if (referersLen > 1) {
-            // Copy referers to map, screening out duplicates
-            Map<JavaThing, JavaThing> map = new HashMap<JavaThing, JavaThing>();
-            for (int i = 0; i < referersLen; i++) {
-                if (map.get(referers[i]) == null) {
-                    map.put(referers[i], referers[i]);
-                }
-            }
-
-            // Now copy into the array
-            referers = new JavaThing[map.size()];
-            map.keySet().toArray(referers);
-        }
-        referersLen = -1;
-    }
-
-
-    /**
-     * @return the id of this thing as hex string
-     */
-    public String getIdString() {
-        return Misc.toHex(getId());
-    }
-
-    public String toString() {
-        return getClazz().getName() + "@" + getIdString();
-    }
-
-    /**
-     * @return the StackTrace of the point of allocation of this object,
-     *          or null if unknown
-     */
-    public StackTrace getAllocatedFrom() {
-        return getClazz().getSiteTrace(this);
-    }
-
-    public boolean isNew() {
-        return getClazz().isNew(this);
-    }
-
-    void setNew(boolean flag) {
-        getClazz().setNew(this, flag);
-    }
-
-    /**
-     * Tell the visitor about all of the objects we refer to
-     */
-    public void visitReferencedObjects(JavaHeapObjectVisitor v) {
-        v.visit(getClazz());
-    }
-
-    void addReferenceFrom(JavaHeapObject other) {
-        if (referersLen == 0) {
-            referers = new JavaThing[1];        // It was null
-        } else if (referersLen == referers.length) {
-            JavaThing[] copy = new JavaThing[(3 * (referersLen + 1)) / 2];
-            System.arraycopy(referers, 0, copy, 0, referersLen);
-            referers = copy;
-        }
-        referers[referersLen++] = other;
-        // We just append to referers here.  Measurements have shown that
-        // around 10% to 30% are duplicates, so it's better to just append
-        // blindly and screen out all the duplicates at once.
-    }
-
-    void addReferenceFromRoot(Root r) {
-        getClazz().addReferenceFromRoot(r, this);
-    }
-
-    /**
-     * If the rootset includes this object, return a Root describing one
-     * of the reasons why.
-     */
-    public Root getRoot() {
-        return getClazz().getRoot(this);
-    }
-
-    /**
-     * Tell who refers to us.
-     *
-     * @return an Enumeration of JavaHeapObject instances
-     */
-    public Enumeration getReferers() {
-        if (referersLen != -1) {
-            throw new RuntimeException("not resolved: " + getIdString());
-        }
-        return new Enumeration() {
-
-            private int num = 0;
-
-            public boolean hasMoreElements() {
-                return referers != null && num < referers.length;
-            }
-
-            public Object nextElement() {
-                return referers[num++];
-            }
-        };
-    }
-
-    /**
-     * Given other, which the caller promises is in referers, determines if
-     * the reference is only a weak reference.
-     */
-    public boolean refersOnlyWeaklyTo(Snapshot ss, JavaThing other) {
-        return false;
-    }
-
-    /**
-     * Describe the reference that this thing has to target.  This will only
-     * be called if target is in the array returned by getChildrenForRootset.
-     */
-    public String describeReferenceTo(JavaThing target, Snapshot ss) {
-        return "??";
-    }
-
-    public boolean isHeapAllocated() {
-        return true;
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/tools/hat/internal/model/JavaHeapObjectVisitor.java b/ojluni/src/main/java/com/sun/tools/hat/internal/model/JavaHeapObjectVisitor.java
deleted file mode 100755
index f3900b0..0000000
--- a/ojluni/src/main/java/com/sun/tools/hat/internal/model/JavaHeapObjectVisitor.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-
-/*
- * The Original Code is HAT. The Initial Developer of the
- * Original Code is Bill Foote, with contributions from others
- * at JavaSoft/Sun.
- */
-
-package com.sun.tools.hat.internal.model;
-
-/**
- * A visitor for a JavaThing.  @see JavaObject#visitReferencedObjects()
- *
- * @author      Bill Foote
- */
-
-
-public interface JavaHeapObjectVisitor {
-    public void visit(JavaHeapObject other);
-
-    /**
-     * Should the given field be excluded from the set of things visited?
-     * @return true if it should.
-     */
-    public boolean exclude(JavaClass clazz, JavaField f);
-
-    /**
-     * @return true iff exclude might ever return true
-     */
-    public boolean mightExclude();
-}
diff --git a/ojluni/src/main/java/com/sun/tools/hat/internal/model/JavaInt.java b/ojluni/src/main/java/com/sun/tools/hat/internal/model/JavaInt.java
deleted file mode 100755
index fab2c3f..0000000
--- a/ojluni/src/main/java/com/sun/tools/hat/internal/model/JavaInt.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-
-/*
- * The Original Code is HAT. The Initial Developer of the
- * Original Code is Bill Foote, with contributions from others
- * at JavaSoft/Sun.
- */
-
-package com.sun.tools.hat.internal.model;
-
-/**
- * Represents an integer (i.e. an int field in an instance).
- *
- * @author      Bill Foote
- */
-
-
-public class JavaInt extends JavaValue {
-
-    int value;
-
-    public JavaInt(int value) {
-        this.value = value;
-    }
-
-    public String toString() {
-        return "" + value;
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/tools/hat/internal/model/JavaLazyReadObject.java b/ojluni/src/main/java/com/sun/tools/hat/internal/model/JavaLazyReadObject.java
deleted file mode 100755
index 0727d51..0000000
--- a/ojluni/src/main/java/com/sun/tools/hat/internal/model/JavaLazyReadObject.java
+++ /dev/null
@@ -1,176 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-
-/*
- * The Original Code is HAT. The Initial Developer of the
- * Original Code is Bill Foote, with contributions from others
- * at JavaSoft/Sun.
- */
-
-package com.sun.tools.hat.internal.model;
-
-import java.io.IOException;
-import com.sun.tools.hat.internal.parser.ReadBuffer;
-
-/*
- * Base class for lazily read Java heap objects.
- */
-public abstract class JavaLazyReadObject extends JavaHeapObject {
-
-    // file offset from which this object data starts
-    private final long offset;
-
-    protected JavaLazyReadObject(long offset) {
-        this.offset = offset;
-    }
-
-    public final int getSize() {
-        return getValueLength() + getClazz().getMinimumObjectSize();
-    }
-
-    protected final long getOffset() {
-        return offset;
-    }
-
-    // return the length of the data for this object
-    protected final int getValueLength() {
-        try {
-            return readValueLength();
-        } catch (IOException exp) {
-            System.err.println("lazy read failed at offset " + offset);
-            exp.printStackTrace();
-            return 0;
-        }
-    }
-
-    // get this object's content as byte array
-    protected final byte[] getValue() {
-        try {
-            return readValue();
-        } catch (IOException exp) {
-            System.err.println("lazy read failed at offset " + offset);
-            exp.printStackTrace();
-            return Snapshot.EMPTY_BYTE_ARRAY;
-        }
-    }
-
-    // get ID of this object
-    public final long getId() {
-        try {
-            ReadBuffer buf = getClazz().getReadBuffer();
-            int idSize = getClazz().getIdentifierSize();
-            if (idSize == 4) {
-                return ((long)buf.getInt(offset)) & Snapshot.SMALL_ID_MASK;
-            } else {
-                return buf.getLong(offset);
-            }
-        } catch (IOException exp) {
-            System.err.println("lazy read failed at offset " + offset);
-            exp.printStackTrace();
-            return -1;
-        }
-    }
-
-    protected abstract int readValueLength() throws IOException;
-    protected abstract byte[] readValue() throws IOException;
-
-    // make Integer or Long for given object ID
-    protected static Number makeId(long id) {
-        if ((id & ~Snapshot.SMALL_ID_MASK) == 0) {
-            return new Integer((int)id);
-        } else {
-            return new Long(id);
-        }
-    }
-
-    // get ID as long value from Number
-    protected static long getIdValue(Number num) {
-        long id = num.longValue();
-        if (num instanceof Integer) {
-            id &= Snapshot.SMALL_ID_MASK;
-        }
-        return id;
-    }
-
-    // read object ID from given index from given byte array
-    protected final long objectIdAt(int index, byte[] data) {
-        int idSize = getClazz().getIdentifierSize();
-        if (idSize == 4) {
-            return ((long)intAt(index, data)) & Snapshot.SMALL_ID_MASK;
-        } else {
-            return longAt(index, data);
-        }
-    }
-
-    // utility methods to read primitive types from byte array
-    protected static byte byteAt(int index, byte[] value) {
-        return value[index];
-    }
-
-    protected static boolean booleanAt(int index, byte[] value) {
-        return (value[index] & 0xff) == 0? false: true;
-    }
-
-    protected static char charAt(int index, byte[] value) {
-        int b1 = ((int) value[index++] & 0xff);
-        int b2 = ((int) value[index++] & 0xff);
-        return (char) ((b1 << 8) + b2);
-    }
-
-    protected static short shortAt(int index, byte[] value) {
-        int b1 = ((int) value[index++] & 0xff);
-        int b2 = ((int) value[index++] & 0xff);
-        return (short) ((b1 << 8) + b2);
-    }
-
-    protected static int intAt(int index, byte[] value) {
-        int b1 = ((int) value[index++] & 0xff);
-        int b2 = ((int) value[index++] & 0xff);
-        int b3 = ((int) value[index++] & 0xff);
-        int b4 = ((int) value[index++] & 0xff);
-        return ((b1 << 24) + (b2 << 16) + (b3 << 8) + b4);
-    }
-
-    protected static long longAt(int index, byte[] value) {
-        long val = 0;
-        for (int j = 0; j < 8; j++) {
-            val = val << 8;
-            int b = ((int)value[index++]) & 0xff;
-            val |= b;
-        }
-        return val;
-    }
-
-    protected static float floatAt(int index, byte[] value) {
-        int val = intAt(index, value);
-        return Float.intBitsToFloat(val);
-    }
-
-    protected static double doubleAt(int index, byte[] value) {
-        long val = longAt(index, value);
-        return Double.longBitsToDouble(val);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/hat/internal/model/JavaLong.java b/ojluni/src/main/java/com/sun/tools/hat/internal/model/JavaLong.java
deleted file mode 100755
index 9e07299..0000000
--- a/ojluni/src/main/java/com/sun/tools/hat/internal/model/JavaLong.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-
-/*
- * The Original Code is HAT. The Initial Developer of the
- * Original Code is Bill Foote, with contributions from others
- * at JavaSoft/Sun.
- */
-
-package com.sun.tools.hat.internal.model;
-
-/**
- * Represents a long (i.e. a long field in an instance).
- *
- * @author      Bill Foote
- */
-
-
-public class JavaLong extends JavaValue {
-
-    long value;
-
-    public JavaLong(long value) {
-        this.value = value;
-    }
-
-    public String toString() {
-        return Long.toString(value);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/hat/internal/model/JavaObject.java b/ojluni/src/main/java/com/sun/tools/hat/internal/model/JavaObject.java
deleted file mode 100755
index ca57692..0000000
--- a/ojluni/src/main/java/com/sun/tools/hat/internal/model/JavaObject.java
+++ /dev/null
@@ -1,334 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-
-/*
- * The Original Code is HAT. The Initial Developer of the
- * Original Code is Bill Foote, with contributions from others
- * at JavaSoft/Sun.
- */
-
-package com.sun.tools.hat.internal.model;
-
-import java.io.IOException;
-import com.sun.tools.hat.internal.parser.ReadBuffer;
-
-/**
- * Represents Java instance
- *
- * @author      Bill Foote
- */
-public class JavaObject extends JavaLazyReadObject {
-
-    private Object clazz;       // Number before resolve
-                                // JavaClass after resolve
-    /**
-     * Construct a new JavaObject.
-     *
-     * @param classID id of the class object
-     * @param offset The offset of field data
-     */
-    public JavaObject(long classID, long offset) {
-        super(offset);
-        this.clazz = makeId(classID);
-    }
-
-    public void resolve(Snapshot snapshot) {
-        if (clazz instanceof JavaClass) {
-            return;
-        }
-        if (clazz instanceof Number) {
-            long classID = getIdValue((Number)clazz);
-            clazz = snapshot.findThing(classID);
-            if (! (clazz instanceof JavaClass)) {
-                warn("Class " + Long.toHexString(classID) + " not found, " +
-                     "adding fake class!");
-                int length;
-                ReadBuffer buf = snapshot.getReadBuffer();
-                int idSize = snapshot.getIdentifierSize();
-                long lenOffset = getOffset() + 2*idSize + 4;
-                try {
-                    length = buf.getInt(lenOffset);
-                } catch (IOException exp) {
-                    throw new RuntimeException(exp);
-                }
-                clazz = snapshot.addFakeInstanceClass(classID, length);
-            }
-        } else {
-            throw new InternalError("should not reach here");
-        }
-
-        JavaClass cl = (JavaClass) clazz;
-        cl.resolve(snapshot);
-
-        // while resolving, parse fields in verbose mode.
-        // but, getFields calls parseFields in non-verbose mode
-        // to avoid printing warnings repeatedly.
-        parseFields(getValue(), true);
-
-        cl.addInstance(this);
-        super.resolve(snapshot);
-    }
-
-    /**
-     * Are we the same type as other?  We are iff our clazz is the
-     * same type as other's.
-     */
-    public boolean isSameTypeAs(JavaThing other) {
-        if (!(other instanceof JavaObject)) {
-            return false;
-        }
-        JavaObject oo = (JavaObject) other;
-        return getClazz().equals(oo.getClazz());
-    }
-
-    /**
-     * Return our JavaClass object.  This may only be called after resolve.
-     */
-    public JavaClass getClazz() {
-        return (JavaClass) clazz;
-    }
-
-    public JavaThing[] getFields() {
-        // pass false to verbose mode so that dereference
-        // warnings are not printed.
-        return parseFields(getValue(), false);
-    }
-
-    // returns the value of field of given name
-    public JavaThing getField(String name) {
-        JavaThing[] flds = getFields();
-        JavaField[] instFields = getClazz().getFieldsForInstance();
-        for (int i = 0; i < instFields.length; i++) {
-            if (instFields[i].getName().equals(name)) {
-                return flds[i];
-            }
-        }
-        return null;
-    }
-
-    public int compareTo(JavaThing other) {
-        if (other instanceof JavaObject) {
-            JavaObject oo = (JavaObject) other;
-            return getClazz().getName().compareTo(oo.getClazz().getName());
-        }
-        return super.compareTo(other);
-    }
-
-    public void visitReferencedObjects(JavaHeapObjectVisitor v) {
-        super.visitReferencedObjects(v);
-        JavaThing[] flds = getFields();
-        for (int i = 0; i < flds.length; i++) {
-            if (flds[i] != null) {
-                if (v.mightExclude()
-                    && v.exclude(getClazz().getClassForField(i),
-                                 getClazz().getFieldForInstance(i)))
-                {
-                    // skip it
-                } else if (flds[i] instanceof JavaHeapObject) {
-                    v.visit((JavaHeapObject) flds[i]);
-                }
-            }
-        }
-    }
-
-    public boolean refersOnlyWeaklyTo(Snapshot ss, JavaThing other) {
-        if (ss.getWeakReferenceClass() != null) {
-            final int referentFieldIndex = ss.getReferentFieldIndex();
-            if (ss.getWeakReferenceClass().isAssignableFrom(getClazz())) {
-                //
-                // REMIND:  This introduces a dependency on the JDK
-                //      implementation that is undesirable.
-                JavaThing[] flds = getFields();
-                for (int i = 0; i < flds.length; i++) {
-                    if (i != referentFieldIndex && flds[i] == other) {
-                        return false;
-                    }
-                }
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Describe the reference that this thing has to target.  This will only
-     * be called if target is in the array returned by getChildrenForRootset.
-     */
-    public String describeReferenceTo(JavaThing target, Snapshot ss) {
-        JavaThing[] flds = getFields();
-        for (int i = 0; i < flds.length; i++) {
-            if (flds[i] == target) {
-                JavaField f = getClazz().getFieldForInstance(i);
-                return "field " + f.getName();
-            }
-        }
-        return super.describeReferenceTo(target, ss);
-    }
-
-    public String toString() {
-        if (getClazz().isString()) {
-            JavaThing value = getField("value");
-            if (value instanceof JavaValueArray) {
-                return ((JavaValueArray)value).valueString();
-            } else {
-                return "null";
-            }
-        } else {
-            return super.toString();
-        }
-    }
-
-    // Internals only below this point
-
-    /*
-     * Java instance record (HPROF_GC_INSTANCE_DUMP) looks as below:
-     *
-     *     object ID
-     *     stack trace serial number (int)
-     *     class ID
-     *     data length (int)
-     *     byte[length]
-     */
-    protected final int readValueLength() throws IOException {
-        JavaClass cl = getClazz();
-        int idSize = cl.getIdentifierSize();
-        long lengthOffset = getOffset() + 2*idSize + 4;
-        return cl.getReadBuffer().getInt(lengthOffset);
-    }
-
-    protected final byte[] readValue() throws IOException {
-        JavaClass cl = getClazz();
-        int idSize = cl.getIdentifierSize();
-        ReadBuffer buf = cl.getReadBuffer();
-        long offset = getOffset() + 2*idSize + 4;
-        int length = buf.getInt(offset);
-        if (length == 0) {
-            return Snapshot.EMPTY_BYTE_ARRAY;
-        } else {
-            byte[] res = new byte[length];
-            buf.get(offset + 4, res);
-            return res;
-        }
-    }
-
-    private JavaThing[] parseFields(byte[] data, boolean verbose) {
-        JavaClass cl = getClazz();
-        int target = cl.getNumFieldsForInstance();
-        JavaField[] fields = cl.getFields();
-        JavaThing[] fieldValues = new JavaThing[target];
-        Snapshot snapshot = cl.getSnapshot();
-        int idSize = snapshot.getIdentifierSize();
-        int fieldNo = 0;
-        // In the dump file, the fields are stored in this order:
-        // fields of most derived class (immediate class) are stored
-        // first and then the super class and so on. In this object,
-        // fields are stored in the reverse ("natural") order. i.e.,
-        // fields of most super class are stored first.
-
-        // target variable is used to compensate for the fact that
-        // the dump file starts field values from the leaf working
-        // upwards in the inheritance hierarchy, whereas JavaObject
-        // starts with the top of the inheritance hierarchy and works down.
-        target -= fields.length;
-        JavaClass currClass = cl;
-        int index = 0;
-        for (int i = 0; i < fieldValues.length; i++, fieldNo++) {
-            while (fieldNo >= fields.length) {
-                currClass = currClass.getSuperclass();
-                fields = currClass.getFields();
-                fieldNo = 0;
-                target -= fields.length;
-            }
-            JavaField f = fields[fieldNo];
-            char sig = f.getSignature().charAt(0);
-            switch (sig) {
-                case 'L':
-                case '[': {
-                    long id = objectIdAt(index, data);
-                    index += idSize;
-                    JavaObjectRef ref = new JavaObjectRef(id);
-                    fieldValues[target+fieldNo] = ref.dereference(snapshot, f, verbose);
-                    break;
-                }
-                case 'Z': {
-                    byte value = byteAt(index, data);
-                    index++;
-                    fieldValues[target+fieldNo] = new JavaBoolean(value != 0);
-                    break;
-                }
-                case 'B': {
-                    byte value = byteAt(index, data);
-                    index++;
-                    fieldValues[target+fieldNo] = new JavaByte(value);
-                    break;
-                }
-                case 'S': {
-                    short value = shortAt(index, data);
-                    index += 2;
-                    fieldValues[target+fieldNo] = new JavaShort(value);
-                    break;
-                }
-                case 'C': {
-                    char value = charAt(index, data);
-                    index += 2;
-                    fieldValues[target+fieldNo] = new JavaChar(value);
-                    break;
-                }
-                case 'I': {
-                    int value = intAt(index, data);
-                    index += 4;
-                    fieldValues[target+fieldNo] = new JavaInt(value);
-                    break;
-                }
-                case 'J': {
-                    long value = longAt(index, data);
-                    index += 8;
-                    fieldValues[target+fieldNo] = new JavaLong(value);
-                    break;
-                }
-                case 'F': {
-                    float value = floatAt(index, data);
-                    index += 4;
-                    fieldValues[target+fieldNo] = new JavaFloat(value);
-                    break;
-                }
-                case 'D': {
-                    double value = doubleAt(index, data);
-                    index += 8;
-                    fieldValues[target+fieldNo] = new JavaDouble(value);
-                    break;
-                }
-                default:
-                    throw new RuntimeException("invalid signature: " + sig);
-            }
-        }
-        return fieldValues;
-    }
-
-    private void warn(String msg) {
-        System.out.println("WARNING: " + msg);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/hat/internal/model/JavaObjectArray.java b/ojluni/src/main/java/com/sun/tools/hat/internal/model/JavaObjectArray.java
deleted file mode 100755
index 2e1cd09..0000000
--- a/ojluni/src/main/java/com/sun/tools/hat/internal/model/JavaObjectArray.java
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-
-/*
- * The Original Code is HAT. The Initial Developer of the
- * Original Code is Bill Foote, with contributions from others
- * at JavaSoft/Sun.
- */
-
-package com.sun.tools.hat.internal.model;
-
-import java.io.IOException;
-import com.sun.tools.hat.internal.parser.ReadBuffer;
-
-/**
- * @author      Bill Foote
- */
-public class JavaObjectArray extends JavaLazyReadObject {
-
-    private Object clazz;  // Long before resolve, the class after resolve
-
-    public JavaObjectArray(long classID, long offset) {
-        super(offset);
-        this.clazz = makeId(classID);
-    }
-
-    public JavaClass getClazz() {
-        return (JavaClass) clazz;
-    }
-
-    public void resolve(Snapshot snapshot) {
-        if (clazz instanceof JavaClass) {
-            return;
-        }
-        long classID = getIdValue((Number)clazz);
-        if (snapshot.isNewStyleArrayClass()) {
-            // Modern heap dumps do this
-            JavaThing t = snapshot.findThing(classID);
-            if (t instanceof JavaClass) {
-                clazz = (JavaClass) t;
-            }
-        }
-        if (!(clazz instanceof JavaClass)) {
-            JavaThing t = snapshot.findThing(classID);
-            if (t != null && t instanceof JavaClass) {
-                JavaClass el = (JavaClass) t;
-                String nm = el.getName();
-                if (!nm.startsWith("[")) {
-                    nm = "L" + el.getName() + ";";
-                }
-                clazz = snapshot.getArrayClass(nm);
-            }
-        }
-
-        if (!(clazz instanceof JavaClass)) {
-            clazz = snapshot.getOtherArrayType();
-        }
-        ((JavaClass)clazz).addInstance(this);
-        super.resolve(snapshot);
-    }
-
-    public JavaThing[] getValues() {
-        return getElements();
-    }
-
-    public JavaThing[] getElements() {
-        Snapshot snapshot = getClazz().getSnapshot();
-        byte[] data = getValue();
-        final int idSize = snapshot.getIdentifierSize();
-        final int numElements = data.length / idSize;
-        JavaThing[] elements = new JavaThing[numElements];
-        int index = 0;
-        for (int i = 0; i < elements.length; i++) {
-            long id = objectIdAt(index, data);
-            index += idSize;
-            elements[i] = snapshot.findThing(id);
-        }
-        return elements;
-    }
-
-    public int compareTo(JavaThing other) {
-        if (other instanceof JavaObjectArray) {
-            return 0;
-        }
-        return super.compareTo(other);
-    }
-
-    public int getLength() {
-        return getValueLength() / getClazz().getIdentifierSize();
-    }
-
-    public void visitReferencedObjects(JavaHeapObjectVisitor v) {
-        super.visitReferencedObjects(v);
-        JavaThing[] elements = getElements();
-        for (int i = 0; i < elements.length; i++) {
-            if (elements[i] != null && elements[i] instanceof JavaHeapObject) {
-                v.visit((JavaHeapObject) elements[i]);
-            }
-        }
-    }
-
-    /**
-     * Describe the reference that this thing has to target.  This will only
-     * be called if target is in the array returned by getChildrenForRootset.
-     */
-    public String describeReferenceTo(JavaThing target, Snapshot ss) {
-        JavaThing[] elements = getElements();
-        for (int i = 0; i < elements.length; i++) {
-            if (elements[i] == target) {
-                return "Element " + i + " of " + this;
-            }
-        }
-        return super.describeReferenceTo(target, ss);
-    }
-
-    /*
-     * Java object array record (HPROF_GC_OBJ_ARRAY_DUMP)
-     * looks as below:
-     *
-     *     object ID
-     *     stack trace serial number (int)
-     *     array length (int)
-     *     array class ID
-     *     array element IDs
-     */
-    protected final int readValueLength() throws IOException {
-        JavaClass cl = getClazz();
-        ReadBuffer buf = cl.getReadBuffer();
-        int idSize = cl.getIdentifierSize();
-        long offset = getOffset() + idSize + 4;
-        int len = buf.getInt(offset);
-        return len * cl.getIdentifierSize();
-    }
-
-    protected final byte[] readValue() throws IOException {
-        JavaClass cl = getClazz();
-        ReadBuffer buf = cl.getReadBuffer();
-        int idSize = cl.getIdentifierSize();
-        long offset = getOffset() + idSize + 4;
-        int len = buf.getInt(offset);
-        if (len == 0) {
-            return Snapshot.EMPTY_BYTE_ARRAY;
-        } else {
-            byte[] res = new byte[len * idSize];
-            buf.get(offset + 4 + idSize, res);
-            return res;
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/hat/internal/model/JavaObjectRef.java b/ojluni/src/main/java/com/sun/tools/hat/internal/model/JavaObjectRef.java
deleted file mode 100755
index bd83e50..0000000
--- a/ojluni/src/main/java/com/sun/tools/hat/internal/model/JavaObjectRef.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-
-/*
- * The Original Code is HAT. The Initial Developer of the
- * Original Code is Bill Foote, with contributions from others
- * at JavaSoft/Sun.
- */
-
-package com.sun.tools.hat.internal.model;
-
-import com.sun.tools.hat.internal.util.Misc;
-
-/**
- * A forward reference to an object.  This is an intermediate representation
- * for a JavaThing, when we have the thing's ID, but we might not have read
- * the thing yet.
- *
- * @author      Bill Foote
- */
-public class JavaObjectRef extends JavaThing {
-    private long id;
-
-    public JavaObjectRef(long id) {
-        this.id = id;
-    }
-
-    public long getId() {
-        return id;
-    }
-
-    public boolean isHeapAllocated() {
-        return true;
-    }
-
-    public JavaThing dereference(Snapshot snapshot, JavaField field) {
-        return dereference(snapshot, field, true);
-    }
-
-    public JavaThing dereference(Snapshot snapshot, JavaField field, boolean verbose) {
-        if (field != null && !field.hasId()) {
-            // If this happens, we must be a field that represents an int.
-            // (This only happens with .bod-style files)
-            return new JavaLong(id);
-        }
-        if (id == 0) {
-            return snapshot.getNullThing();
-        }
-        JavaThing result = snapshot.findThing(id);
-        if (result == null) {
-            if (!snapshot.getUnresolvedObjectsOK() && verbose) {
-                String msg = "WARNING:  Failed to resolve object id "
-                                + Misc.toHex(id);
-                if (field != null) {
-                    msg += " for field " + field.getName()
-                            + " (signature " + field.getSignature() + ")";
-                }
-                System.out.println(msg);
-                // Thread.dumpStack();
-            }
-            result = new HackJavaValue("Unresolved object "
-                                        + Misc.toHex(id), 0);
-        }
-        return result;
-    }
-
-    public int getSize() {
-        return 0;
-    }
-
-    public String toString() {
-        return "Unresolved object " + Misc.toHex(id);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/hat/internal/model/JavaShort.java b/ojluni/src/main/java/com/sun/tools/hat/internal/model/JavaShort.java
deleted file mode 100755
index d043afa..0000000
--- a/ojluni/src/main/java/com/sun/tools/hat/internal/model/JavaShort.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-
-/*
- * The Original Code is HAT. The Initial Developer of the
- * Original Code is Bill Foote, with contributions from others
- * at JavaSoft/Sun.
- */
-
-package com.sun.tools.hat.internal.model;
-
-/**
- * Represents a short (i.e. a short field in an instance).
- *
- * @author      Bill Foote
- */
-
-
-public class JavaShort extends JavaValue {
-
-    short value;
-
-    public JavaShort(short value) {
-        this.value = value;
-    }
-
-    public String toString() {
-        return "" + value;
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/tools/hat/internal/model/JavaStatic.java b/ojluni/src/main/java/com/sun/tools/hat/internal/model/JavaStatic.java
deleted file mode 100755
index 8f341b4..0000000
--- a/ojluni/src/main/java/com/sun/tools/hat/internal/model/JavaStatic.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-
-/*
- * The Original Code is HAT. The Initial Developer of the
- * Original Code is Bill Foote, with contributions from others
- * at JavaSoft/Sun.
- */
-
-package com.sun.tools.hat.internal.model;
-
-/**
- *
- * @author      Bill Foote
- */
-
-/**
- * Represents the value of a static field of a JavaClass
- */
-
-public class JavaStatic {
-
-    private JavaField field;
-    private JavaThing value;
-
-    public JavaStatic(JavaField field, JavaThing value) {
-        this.field = field;
-        this.value = value;
-    }
-
-    public void resolve(JavaClass clazz, Snapshot snapshot) {
-        long id = -1;
-        if (value instanceof JavaObjectRef) {
-            id = ((JavaObjectRef)value).getId();
-        }
-        value = value.dereference(snapshot, field);
-        if (value.isHeapAllocated() &&
-            clazz.getLoader() == snapshot.getNullThing()) {
-            // static fields are only roots if they are in classes
-            //    loaded by the root classloader.
-            JavaHeapObject ho = (JavaHeapObject) value;
-            String s = "Static reference from " + clazz.getName()
-                       + "." + field.getName();
-            snapshot.addRoot(new Root(id, clazz.getId(),
-                                      Root.JAVA_STATIC, s));
-        }
-    }
-
-    public JavaField getField() {
-        return field;
-    }
-
-    public JavaThing getValue() {
-        return value;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/hat/internal/model/JavaThing.java b/ojluni/src/main/java/com/sun/tools/hat/internal/model/JavaThing.java
deleted file mode 100755
index 3c4fb0f..0000000
--- a/ojluni/src/main/java/com/sun/tools/hat/internal/model/JavaThing.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-
-/*
- * The Original Code is HAT. The Initial Developer of the
- * Original Code is Bill Foote, with contributions from others
- * at JavaSoft/Sun.
- */
-
-package com.sun.tools.hat.internal.model;
-
-import java.util.Enumeration;
-import java.util.Hashtable;
-
-
-/**
- *
- * @author      Bill Foote
- */
-
-
-/**
- * Represents a java "Thing".  A thing is anything that can be the value of
- * a field.  This includes JavaHeapObject, JavaObjectRef, and JavaValue.
- */
-
-public abstract class JavaThing {
-
-    protected JavaThing() {
-    }
-
-    /**
-     * If this is a forward reference, figure out what it really
-     * refers to.
-     *
-     * @param snapshot  The snapshot this is for
-     * @param field     The field this thing represents.  If null, it is
-     *                  assumed this thing is an object (and never a value).
-     */
-    public JavaThing dereference(Snapshot shapshot, JavaField field) {
-        return this;
-    }
-
-
-    /**
-     * Are we the same type as other?
-     *
-     * @see JavaObject.isSameTypeAs()
-     */
-    public boolean isSameTypeAs(JavaThing other) {
-        return getClass() == other.getClass();
-    }
-    /**
-     * @return true iff this represents a heap-allocated object
-     */
-    abstract public boolean isHeapAllocated();
-
-    /**
-     * @return the size of this object, in bytes, including VM overhead
-     */
-    abstract public int getSize();
-
-    /**
-     * @return a human-readable string representation of this thing
-     */
-    abstract public String toString();
-
-    /**
-     * Compare our string representation to other's
-     * @see java.lang.String.compareTo()
-     */
-    public int compareTo(JavaThing other) {
-        return toString().compareTo(other.toString());
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/tools/hat/internal/model/JavaValue.java b/ojluni/src/main/java/com/sun/tools/hat/internal/model/JavaValue.java
deleted file mode 100755
index 0c5ee8d..0000000
--- a/ojluni/src/main/java/com/sun/tools/hat/internal/model/JavaValue.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-
-/*
- * The Original Code is HAT. The Initial Developer of the
- * Original Code is Bill Foote, with contributions from others
- * at JavaSoft/Sun.
- */
-
-package com.sun.tools.hat.internal.model;
-
-/**
- * Abstract base class for all value types (ints, longs, floats, etc.)
- *
- * @author      Bill Foote
- */
-
-
-
-
-public abstract class JavaValue extends JavaThing {
-
-    protected JavaValue() {
-    }
-
-    public boolean isHeapAllocated() {
-        return false;
-    }
-
-    abstract public String toString();
-
-    public int getSize() {
-        // The size of a value is already accounted for in the class
-        // that has the data member.
-        return 0;
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/tools/hat/internal/model/JavaValueArray.java b/ojluni/src/main/java/com/sun/tools/hat/internal/model/JavaValueArray.java
deleted file mode 100755
index d179532..0000000
--- a/ojluni/src/main/java/com/sun/tools/hat/internal/model/JavaValueArray.java
+++ /dev/null
@@ -1,433 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-
-/*
- * The Original Code is HAT. The Initial Developer of the
- * Original Code is Bill Foote, with contributions from others
- * at JavaSoft/Sun.
- */
-
-package com.sun.tools.hat.internal.model;
-
-import com.sun.tools.hat.internal.parser.ReadBuffer;
-import java.io.IOException;
-
-/**
- * An array of values, that is, an array of ints, boolean, floats or the like.
- *
- * @author      Bill Foote
- */
-public class JavaValueArray extends JavaLazyReadObject
-                /*imports*/ implements ArrayTypeCodes {
-
-    private static String arrayTypeName(byte sig) {
-        switch (sig) {
-            case 'B':
-                return "byte[]";
-            case 'Z':
-                return "boolean[]";
-            case 'C':
-                return "char[]";
-            case 'S':
-                return "short[]";
-            case 'I':
-                return "int[]";
-            case 'F':
-                return "float[]";
-            case 'J':
-                return "long[]";
-            case 'D':
-                return "double[]";
-            default:
-                throw new RuntimeException("invalid array element sig: " + sig);
-        }
-    }
-
-    private static int elementSize(byte type) {
-        switch (type) {
-            case T_BYTE:
-            case T_BOOLEAN:
-                return 1;
-            case T_CHAR:
-            case T_SHORT:
-                return 2;
-            case T_INT:
-            case T_FLOAT:
-                return 4;
-            case T_LONG:
-            case T_DOUBLE:
-                return 8;
-            default:
-                throw new RuntimeException("invalid array element type: " + type);
-        }
-    }
-
-    /*
-     * Java primitive array record (HPROF_GC_PRIM_ARRAY_DUMP) looks
-     * as below:
-     *
-     *    object ID
-     *    stack trace serial number (int)
-     *    length of the instance data (int)
-     *    element type (byte)
-     *    array data
-     */
-    protected final int readValueLength() throws IOException {
-        JavaClass cl = getClazz();
-        ReadBuffer buf = cl.getReadBuffer();
-        int idSize = cl.getIdentifierSize();
-        long offset = getOffset() + idSize + 4;
-        // length of the array
-        int len = buf.getInt(offset);
-        // typecode of array element type
-        byte type = buf.getByte(offset + 4);
-        return len * elementSize(type);
-    }
-
-    protected final byte[] readValue() throws IOException {
-        JavaClass cl = getClazz();
-        ReadBuffer buf = cl.getReadBuffer();
-        int idSize = cl.getIdentifierSize();
-        long offset = getOffset() + idSize + 4;
-        // length of the array
-        int length = buf.getInt(offset);
-        // typecode of array element type
-        byte type = buf.getByte(offset + 4);
-        if (length == 0) {
-            return Snapshot.EMPTY_BYTE_ARRAY;
-        } else {
-            length *= elementSize(type);
-            byte[] res = new byte[length];
-            buf.get(offset + 5, res);
-            return res;
-        }
-    }
-
-    // JavaClass set only after resolve.
-    private JavaClass clazz;
-
-    // This field contains elementSignature byte and
-    // divider to be used to calculate length. Note that
-    // length of content byte[] is not same as array length.
-    // Actual array length is (byte[].length / divider)
-    private int data;
-
-    // First 8 bits of data is used for element signature
-    private static final int SIGNATURE_MASK = 0x0FF;
-
-    // Next 8 bits of data is used for length divider
-    private static final int LENGTH_DIVIDER_MASK = 0x0FF00;
-
-    // Number of bits to shift to get length divider
-    private static final int LENGTH_DIVIDER_SHIFT = 8;
-
-    public JavaValueArray(byte elementSignature, long offset) {
-        super(offset);
-        this.data = (elementSignature & SIGNATURE_MASK);
-    }
-
-    public JavaClass getClazz() {
-        return clazz;
-    }
-
-    public void visitReferencedObjects(JavaHeapObjectVisitor v) {
-        super.visitReferencedObjects(v);
-    }
-
-    public void resolve(Snapshot snapshot) {
-        if (clazz instanceof JavaClass) {
-            return;
-        }
-        byte elementSig = getElementType();
-        clazz = snapshot.findClass(arrayTypeName(elementSig));
-        if (clazz == null) {
-            clazz = snapshot.getArrayClass("" + ((char) elementSig));
-        }
-        getClazz().addInstance(this);
-        super.resolve(snapshot);
-    }
-
-    public int getLength() {
-        int divider = (data & LENGTH_DIVIDER_MASK) >>> LENGTH_DIVIDER_SHIFT;
-        if (divider == 0) {
-            byte elementSignature = getElementType();
-            switch (elementSignature) {
-            case 'B':
-            case 'Z':
-                divider = 1;
-                break;
-            case 'C':
-            case 'S':
-                divider = 2;
-                break;
-            case 'I':
-            case 'F':
-                divider = 4;
-                break;
-            case 'J':
-            case 'D':
-                divider = 8;
-                break;
-            default:
-                throw new RuntimeException("unknown primitive type: " +
-                                elementSignature);
-            }
-            data |= (divider << LENGTH_DIVIDER_SHIFT);
-        }
-        return (getValueLength() / divider);
-    }
-
-    public Object getElements() {
-        final int len = getLength();
-        final byte et = getElementType();
-        byte[] data = getValue();
-        int index = 0;
-        switch (et) {
-            case 'Z': {
-                boolean[] res = new boolean[len];
-                for (int i = 0; i < len; i++) {
-                    res[i] = booleanAt(index, data);
-                    index++;
-                }
-                return res;
-            }
-            case 'B': {
-                byte[] res = new byte[len];
-                for (int i = 0; i < len; i++) {
-                    res[i] = byteAt(index, data);
-                    index++;
-                }
-                return res;
-            }
-            case 'C': {
-                char[] res = new char[len];
-                for (int i = 0; i < len; i++) {
-                    res[i] = charAt(index, data);
-                    index += 2;
-                }
-                return res;
-            }
-            case 'S': {
-                short[] res = new short[len];
-                for (int i = 0; i < len; i++) {
-                    res[i] = shortAt(index, data);
-                    index += 2;
-                }
-                return res;
-            }
-            case 'I': {
-                int[] res = new int[len];
-                for (int i = 0; i < len; i++) {
-                    res[i] = intAt(index, data);
-                    index += 4;
-                }
-                return res;
-            }
-            case 'J': {
-                long[] res = new long[len];
-                for (int i = 0; i < len; i++) {
-                    res[i] = longAt(index, data);
-                    index += 8;
-                }
-                return res;
-            }
-            case 'F': {
-                float[] res = new float[len];
-                for (int i = 0; i < len; i++) {
-                    res[i] = floatAt(index, data);
-                    index += 4;
-                }
-                return res;
-            }
-            case 'D': {
-                double[] res = new double[len];
-                for (int i = 0; i < len; i++) {
-                    res[i] = doubleAt(index, data);
-                    index += 8;
-                }
-                return res;
-            }
-            default: {
-                throw new RuntimeException("unknown primitive type?");
-            }
-        }
-    }
-
-    public byte getElementType() {
-        return (byte) (data & SIGNATURE_MASK);
-    }
-
-    private void checkIndex(int index) {
-        if (index < 0 || index >= getLength()) {
-            throw new ArrayIndexOutOfBoundsException(index);
-        }
-    }
-
-    private void requireType(char type) {
-        if (getElementType() != type) {
-            throw new RuntimeException("not of type : " + type);
-        }
-    }
-
-    public boolean getBooleanAt(int index) {
-        checkIndex(index);
-        requireType('Z');
-        return booleanAt(index, getValue());
-    }
-
-    public byte getByteAt(int index) {
-        checkIndex(index);
-        requireType('B');
-        return byteAt(index, getValue());
-    }
-
-    public char getCharAt(int index) {
-        checkIndex(index);
-        requireType('C');
-        return charAt(index << 1, getValue());
-    }
-
-    public short getShortAt(int index) {
-        checkIndex(index);
-        requireType('S');
-        return shortAt(index << 1, getValue());
-    }
-
-    public int getIntAt(int index) {
-        checkIndex(index);
-        requireType('I');
-        return intAt(index << 2, getValue());
-    }
-
-    public long getLongAt(int index) {
-        checkIndex(index);
-        requireType('J');
-        return longAt(index << 3, getValue());
-    }
-
-    public float getFloatAt(int index) {
-        checkIndex(index);
-        requireType('F');
-        return floatAt(index << 2, getValue());
-    }
-
-    public double getDoubleAt(int index) {
-        checkIndex(index);
-        requireType('D');
-        return doubleAt(index << 3, getValue());
-    }
-
-    public String valueString() {
-        return valueString(true);
-    }
-
-    public String valueString(boolean bigLimit) {
-        // Char arrays deserve special treatment
-        StringBuffer result;
-        byte[] value = getValue();
-        int max = value.length;
-        byte elementSignature = getElementType();
-        if (elementSignature == 'C')  {
-            result = new StringBuffer();
-            for (int i = 0; i < value.length; ) {
-                char val = charAt(i, value);
-                result.append(val);
-                i += 2;
-            }
-        } else {
-            int limit = 8;
-            if (bigLimit) {
-                limit = 1000;
-            }
-            result = new StringBuffer("{");
-            int num = 0;
-            for (int i = 0; i < value.length; ) {
-                if (num > 0) {
-                    result.append(", ");
-                }
-                if (num >= limit) {
-                    result.append("... ");
-                    break;
-                }
-                num++;
-                switch (elementSignature) {
-                    case 'Z': {
-                        boolean val = booleanAt(i, value);
-                        if (val) {
-                            result.append("true");
-                        } else {
-                            result.append("false");
-                        }
-                        i++;
-                        break;
-                    }
-                    case 'B': {
-                        int val = 0xFF & byteAt(i, value);
-                        result.append("0x" + Integer.toString(val, 16));
-                        i++;
-                        break;
-                    }
-                    case 'S': {
-                        short val = shortAt(i, value);
-                        i += 2;
-                        result.append("" + val);
-                        break;
-                    }
-                    case 'I': {
-                        int val = intAt(i, value);
-                        i += 4;
-                        result.append("" + val);
-                        break;
-                    }
-                    case 'J': {         // long
-                        long val = longAt(i, value);
-                        result.append("" + val);
-                        i += 8;
-                        break;
-                    }
-                    case 'F': {
-                        float val = floatAt(i, value);
-                        result.append("" + val);
-                        i += 4;
-                        break;
-                    }
-                    case 'D': {         // double
-                        double val = doubleAt(i, value);
-                        result.append("" + val);
-                        i += 8;
-                        break;
-                    }
-                    default: {
-                        throw new RuntimeException("unknown primitive type?");
-                    }
-                }
-            }
-            result.append("}");
-        }
-        return result.toString();
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/tools/hat/internal/model/ReachableExcludes.java b/ojluni/src/main/java/com/sun/tools/hat/internal/model/ReachableExcludes.java
deleted file mode 100755
index 9ab2b73..0000000
--- a/ojluni/src/main/java/com/sun/tools/hat/internal/model/ReachableExcludes.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-
-/*
- * The Original Code is HAT. The Initial Developer of the
- * Original Code is Bill Foote, with contributions from others
- * at JavaSoft/Sun.
- */
-
-package com.sun.tools.hat.internal.model;
-
-
-/**
- * This represents a set of data members that should be excluded from the
- * reachable objects query. This is useful to exclude observers from the
- * transitive closure of objects reachable from a given object, allowing
- * some kind of real determination of the "size" of that object.
- *
- */
-
-public interface ReachableExcludes {
-    /**
-     * @return true iff the given field is on the hitlist of excluded
-     *          fields.
-     */
-    public boolean isExcluded(String fieldName);
-}
diff --git a/ojluni/src/main/java/com/sun/tools/hat/internal/model/ReachableExcludesImpl.java b/ojluni/src/main/java/com/sun/tools/hat/internal/model/ReachableExcludesImpl.java
deleted file mode 100755
index 46978cf..0000000
--- a/ojluni/src/main/java/com/sun/tools/hat/internal/model/ReachableExcludesImpl.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-
-/*
- * The Original Code is HAT. The Initial Developer of the
- * Original Code is Bill Foote, with contributions from others
- * at JavaSoft/Sun.
- */
-
-package com.sun.tools.hat.internal.model;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.InputStreamReader;
-import java.io.Reader;
-import java.io.BufferedReader;
-import java.io.IOException;
-
-import java.util.Hashtable;
-
-/**
- * This represents a set of data members that should be excluded from the
- * reachable objects query.
- * This is useful to exclude observers from the
- * transitive closure of objects reachable from a given object, allowing
- * some kind of real determination of the "size" of that object.
- *
- * @author      Bill Foote
- */
-public class ReachableExcludesImpl implements ReachableExcludes {
-
-    private File excludesFile;
-    private long lastModified;
-    private Hashtable methods;  // Hashtable<String, String>, used as a bag
-
-    /**
-     * Create a new ReachableExcludesImpl over the given file.  The file will be
-     * re-read whenever the timestamp changes.
-     */
-    public ReachableExcludesImpl(File excludesFile) {
-        this.excludesFile = excludesFile;
-        readFile();
-    }
-
-    private void readFileIfNeeded() {
-        if (excludesFile.lastModified() != lastModified) {
-            synchronized(this) {
-                if (excludesFile.lastModified() != lastModified) {
-                    readFile();
-                }
-            }
-        }
-    }
-
-    private void readFile() {
-        long lm = excludesFile.lastModified();
-        Hashtable<String, String> m = new Hashtable<String, String>();
-
-        try {
-            BufferedReader r = new BufferedReader(new InputStreamReader(
-                                    new FileInputStream(excludesFile)));
-
-            String method;
-            while ((method = r.readLine()) != null) {
-                m.put(method, method);
-            }
-            lastModified = lm;
-            methods = m;        // We want this to be atomic
-        } catch (IOException ex) {
-            System.out.println("Error reading " + excludesFile + ":  " + ex);
-        }
-    }
-
-    /**
-     * @return true iff the given field is on the histlist of excluded
-     *          fields.
-     */
-    public boolean isExcluded(String fieldName) {
-        readFileIfNeeded();
-        return methods.get(fieldName) != null;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/hat/internal/model/ReachableObjects.java b/ojluni/src/main/java/com/sun/tools/hat/internal/model/ReachableObjects.java
deleted file mode 100755
index 831e824..0000000
--- a/ojluni/src/main/java/com/sun/tools/hat/internal/model/ReachableObjects.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-
-/*
- * The Original Code is HAT. The Initial Developer of the
- * Original Code is Bill Foote, with contributions from others
- * at JavaSoft/Sun.
- */
-
-package com.sun.tools.hat.internal.model;
-
-import java.util.Vector;
-import java.util.Hashtable;
-import java.util.Enumeration;
-
-import com.sun.tools.hat.internal.util.ArraySorter;
-import com.sun.tools.hat.internal.util.Comparer;
-
-/**
- * @author      A. Sundararajan
- */
-
-public class ReachableObjects {
-    public ReachableObjects(JavaHeapObject root,
-                            final ReachableExcludes excludes) {
-        this.root = root;
-
-        final Hashtable<JavaHeapObject, JavaHeapObject> bag = new Hashtable<JavaHeapObject, JavaHeapObject>();
-        final Hashtable<String, String> fieldsExcluded = new Hashtable<String, String>();  //Bag<String>
-        final Hashtable<String, String> fieldsUsed = new Hashtable<String, String>();   // Bag<String>
-        JavaHeapObjectVisitor visitor = new AbstractJavaHeapObjectVisitor() {
-            public void visit(JavaHeapObject t) {
-                // Size is zero for things like integer fields
-                if (t != null && t.getSize() > 0 && bag.get(t) == null) {
-                    bag.put(t, t);
-                    t.visitReferencedObjects(this);
-                }
-            }
-
-            public boolean mightExclude() {
-                return excludes != null;
-            }
-
-            public boolean exclude(JavaClass clazz, JavaField f) {
-                if (excludes == null) {
-                    return false;
-                }
-                String nm = clazz.getName() + "." + f.getName();
-                if (excludes.isExcluded(nm)) {
-                    fieldsExcluded.put(nm, nm);
-                    return true;
-                } else {
-                    fieldsUsed.put(nm, nm);
-                    return false;
-                }
-            }
-        };
-        // Put the closure of root and all objects reachable from root into
-        // bag (depth first), but don't include root:
-        visitor.visit(root);
-        bag.remove(root);
-
-        // Now grab the elements into a vector, and sort it in decreasing size
-        JavaThing[] things = new JavaThing[bag.size()];
-        int i = 0;
-        for (Enumeration e = bag.elements(); e.hasMoreElements(); ) {
-            things[i++] = (JavaThing) e.nextElement();
-        }
-        ArraySorter.sort(things, new Comparer() {
-            public int compare(Object lhs, Object rhs) {
-                JavaThing left = (JavaThing) lhs;
-                JavaThing right = (JavaThing) rhs;
-                int diff = right.getSize() - left.getSize();
-                if (diff != 0) {
-                    return diff;
-                }
-                return left.compareTo(right);
-            }
-        });
-        this.reachables = things;
-
-        this.totalSize = root.getSize();
-        for (i = 0; i < things.length; i++) {
-            this.totalSize += things[i].getSize();
-        }
-
-        excludedFields = getElements(fieldsExcluded);
-        usedFields = getElements(fieldsUsed);
-    }
-
-    public JavaHeapObject getRoot() {
-        return root;
-    }
-
-    public JavaThing[] getReachables() {
-        return reachables;
-    }
-
-    public long getTotalSize() {
-        return totalSize;
-    }
-
-    public String[] getExcludedFields() {
-        return excludedFields;
-    }
-
-    public String[] getUsedFields() {
-        return usedFields;
-    }
-
-    private String[] getElements(Hashtable ht) {
-        Object[] keys = ht.keySet().toArray();
-        int len = keys.length;
-        String[] res = new String[len];
-        System.arraycopy(keys, 0, res, 0, len);
-        ArraySorter.sortArrayOfStrings(res);
-        return res;
-    }
-
-    private JavaHeapObject root;
-    private JavaThing[] reachables;
-    private String[]  excludedFields;
-    private String[]  usedFields;
-    private long totalSize;
-}
diff --git a/ojluni/src/main/java/com/sun/tools/hat/internal/model/ReferenceChain.java b/ojluni/src/main/java/com/sun/tools/hat/internal/model/ReferenceChain.java
deleted file mode 100755
index 65bd8fd..0000000
--- a/ojluni/src/main/java/com/sun/tools/hat/internal/model/ReferenceChain.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-
-/*
- * The Original Code is HAT. The Initial Developer of the
- * Original Code is Bill Foote, with contributions from others
- * at JavaSoft/Sun.
- */
-
-package com.sun.tools.hat.internal.model;
-
-/**
- * Represents a chain of references to some target object
- *
- * @author      Bill Foote
- */
-
-public class ReferenceChain {
-
-    JavaHeapObject      obj;    // Object referred to
-    ReferenceChain      next;   // Next in chain
-
-    public ReferenceChain(JavaHeapObject obj, ReferenceChain next) {
-        this.obj = obj;
-        this.next = next;
-    }
-
-    public JavaHeapObject getObj() {
-        return obj;
-    }
-
-    public ReferenceChain getNext() {
-        return next;
-    }
-
-    public int getDepth() {
-        int count = 1;
-        ReferenceChain tmp = next;
-        while (tmp != null) {
-            count++;
-            tmp = tmp.next;
-        }
-        return count;
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/tools/hat/internal/model/Root.java b/ojluni/src/main/java/com/sun/tools/hat/internal/model/Root.java
deleted file mode 100755
index a975e87..0000000
--- a/ojluni/src/main/java/com/sun/tools/hat/internal/model/Root.java
+++ /dev/null
@@ -1,174 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-
-/*
- * The Original Code is HAT. The Initial Developer of the
- * Original Code is Bill Foote, with contributions from others
- * at JavaSoft/Sun.
- */
-
-package com.sun.tools.hat.internal.model;
-
-import com.sun.tools.hat.internal.util.Misc;
-
-/**
- *
- * @author      Bill Foote
- */
-
-
-/**
- * Represents a member of the rootset, that is, one of the objects that
- * the GC starts from when marking reachable objects.
- */
-
-public class Root {
-
-    private long id;            // ID of the JavaThing we refer to
-    private long refererId;     // Thread or Class responsible for this, or 0
-    private int index = -1;             // Index in Snapshot.roots
-    private int type;
-    private String description;
-    private JavaHeapObject referer = null;
-    private StackTrace stackTrace = null;
-
-    // Values for type.  Higher values are more interesting -- see getType().
-    // See also getTypeName()
-    public final static int INVALID_TYPE = 0;
-    public final static int UNKNOWN = 1;
-    public final static int SYSTEM_CLASS = 2;
-
-    public final static int NATIVE_LOCAL = 3;
-    public final static int NATIVE_STATIC = 4;
-    public final static int THREAD_BLOCK = 5;
-    public final static int BUSY_MONITOR = 6;
-    public final static int JAVA_LOCAL = 7;
-    public final static int NATIVE_STACK = 8;
-    public final static int JAVA_STATIC = 9;
-
-
-    public Root(long id, long refererId, int type, String description) {
-        this(id, refererId, type, description, null);
-    }
-
-
-    public Root(long id, long refererId, int type, String description,
-                StackTrace stackTrace) {
-        this.id = id;
-        this.refererId = refererId;
-        this.type = type;
-        this.description = description;
-        this.stackTrace = stackTrace;
-    }
-
-    public long getId() {
-        return id;
-    }
-
-    public String getIdString() {
-        return Misc.toHex(id);
-    }
-
-    public String getDescription() {
-        if ("".equals(description)) {
-            return getTypeName() + " Reference";
-        } else {
-            return description;
-        }
-    }
-
-    /**
-     * Return type.  We guarantee that more interesting roots will have
-     * a type that is numerically higher.
-     */
-    public int getType() {
-        return type;
-    }
-
-    public String getTypeName() {
-        switch(type) {
-            case INVALID_TYPE:          return "Invalid (?!?)";
-            case UNKNOWN:               return "Unknown";
-            case SYSTEM_CLASS:          return "System Class";
-            case NATIVE_LOCAL:          return "JNI Local";
-            case NATIVE_STATIC:         return "JNI Global";
-            case THREAD_BLOCK:          return "Thread Block";
-            case BUSY_MONITOR:          return "Busy Monitor";
-            case JAVA_LOCAL:            return "Java Local";
-            case NATIVE_STACK:          return "Native Stack (possibly Java local)";
-            case JAVA_STATIC:           return "Java Static";
-            default:                    return "??";
-        }
-    }
-
-    /**
-     * Given two Root instances, return the one that is most interesting.
-     */
-    public Root mostInteresting(Root other) {
-        if (other.type > this.type) {
-            return other;
-        } else {
-            return this;
-        }
-    }
-
-    /**
-     * Get the object that's responsible for this root, if there is one.
-     * This will be null, a Thread object, or a Class object.
-     */
-    public JavaHeapObject getReferer() {
-        return referer;
-    }
-
-    /**
-     * @return the stack trace responsible for this root, or null if there
-     * is none.
-     */
-    public StackTrace getStackTrace() {
-        return stackTrace;
-    }
-
-    /**
-     * @return The index of this root in Snapshot.roots
-     */
-    public int getIndex() {
-        return index;
-    }
-
-    void resolve(Snapshot ss) {
-        if (refererId != 0) {
-            referer = ss.findThing(refererId);
-        }
-        if (stackTrace != null) {
-            stackTrace.resolve(ss);
-        }
-    }
-
-    void setIndex(int i) {
-        index = i;
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/tools/hat/internal/model/Snapshot.java b/ojluni/src/main/java/com/sun/tools/hat/internal/model/Snapshot.java
deleted file mode 100755
index 4d881fd..0000000
--- a/ojluni/src/main/java/com/sun/tools/hat/internal/model/Snapshot.java
+++ /dev/null
@@ -1,630 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-
-/*
- * The Original Code is HAT. The Initial Developer of the
- * Original Code is Bill Foote, with contributions from others
- * at JavaSoft/Sun.
- */
-
-package com.sun.tools.hat.internal.model;
-
-import java.lang.ref.SoftReference;
-import java.util.*;
-import com.sun.tools.hat.internal.parser.ReadBuffer;
-import com.sun.tools.hat.internal.util.Misc;
-
-/**
- *
- * @author      Bill Foote
- */
-
-/**
- * Represents a snapshot of the Java objects in the VM at one instant.
- * This is the top-level "model" object read out of a single .hprof or .bod
- * file.
- */
-
-public class Snapshot {
-
-    public static long SMALL_ID_MASK = 0x0FFFFFFFFL;
-    public static final byte[] EMPTY_BYTE_ARRAY = new byte[0];
-
-    private static final JavaField[] EMPTY_FIELD_ARRAY = new JavaField[0];
-    private static final JavaStatic[] EMPTY_STATIC_ARRAY = new JavaStatic[0];
-
-    // all heap objects
-    private Hashtable<Number, JavaHeapObject> heapObjects =
-                 new Hashtable<Number, JavaHeapObject>();
-
-    private Hashtable<Number, JavaClass> fakeClasses =
-                 new Hashtable<Number, JavaClass>();
-
-    // all Roots in this Snapshot
-    private Vector<Root> roots = new Vector<Root>();
-
-    // name-to-class map
-    private Map<String, JavaClass> classes =
-                 new TreeMap<String, JavaClass>();
-
-    // new objects relative to a baseline - lazily initialized
-    private volatile Map<JavaHeapObject, Boolean> newObjects;
-
-    // allocation site traces for all objects - lazily initialized
-    private volatile Map<JavaHeapObject, StackTrace> siteTraces;
-
-    // object-to-Root map for all objects
-    private Map<JavaHeapObject, Root> rootsMap =
-                 new HashMap<JavaHeapObject, Root>();
-
-    // soft cache of finalizeable objects - lazily initialized
-    private SoftReference<Vector> finalizablesCache;
-
-    // represents null reference
-    private JavaThing nullThing;
-
-    // java.lang.ref.Reference class
-    private JavaClass weakReferenceClass;
-    // index of 'referent' field in java.lang.ref.Reference class
-    private int referentFieldIndex;
-
-    // java.lang.Class class
-    private JavaClass javaLangClass;
-    // java.lang.String class
-    private JavaClass javaLangString;
-    // java.lang.ClassLoader class
-    private JavaClass javaLangClassLoader;
-
-    // unknown "other" array class
-    private volatile JavaClass otherArrayType;
-    // Stuff to exclude from reachable query
-    private ReachableExcludes reachableExcludes;
-    // the underlying heap dump buffer
-    private ReadBuffer readBuf;
-
-    // True iff some heap objects have isNew set
-    private boolean hasNewSet;
-    private boolean unresolvedObjectsOK;
-
-    // whether object array instances have new style class or
-    // old style (element) class.
-    private boolean newStyleArrayClass;
-
-    // object id size in the heap dump
-    private int identifierSize = 4;
-
-    // minimum object size - accounts for object header in
-    // most Java virtual machines - we assume 2 identifierSize
-    // (which is true for Sun's hotspot JVM).
-    private int minimumObjectSize;
-
-    public Snapshot(ReadBuffer buf) {
-        nullThing = new HackJavaValue("<null>", 0);
-        readBuf = buf;
-    }
-
-    public void setSiteTrace(JavaHeapObject obj, StackTrace trace) {
-        if (trace != null && trace.getFrames().length != 0) {
-            initSiteTraces();
-            siteTraces.put(obj, trace);
-        }
-    }
-
-    public StackTrace getSiteTrace(JavaHeapObject obj) {
-        if (siteTraces != null) {
-            return siteTraces.get(obj);
-        } else {
-            return null;
-        }
-    }
-
-    public void setNewStyleArrayClass(boolean value) {
-        newStyleArrayClass = value;
-    }
-
-    public boolean isNewStyleArrayClass() {
-        return newStyleArrayClass;
-    }
-
-    public void setIdentifierSize(int size) {
-        identifierSize = size;
-        minimumObjectSize = 2 * size;
-    }
-
-    public int getIdentifierSize() {
-        return identifierSize;
-    }
-
-    public int getMinimumObjectSize() {
-        return minimumObjectSize;
-    }
-
-    public void addHeapObject(long id, JavaHeapObject ho) {
-        heapObjects.put(makeId(id), ho);
-    }
-
-    public void addRoot(Root r) {
-        r.setIndex(roots.size());
-        roots.addElement(r);
-    }
-
-    public void addClass(long id, JavaClass c) {
-        addHeapObject(id, c);
-        putInClassesMap(c);
-    }
-
-    JavaClass addFakeInstanceClass(long classID, int instSize) {
-        // Create a fake class name based on ID.
-        String name = "unknown-class<@" + Misc.toHex(classID) + ">";
-
-        // Create fake fields convering the given instance size.
-        // Create as many as int type fields and for the left over
-        // size create byte type fields.
-        int numInts = instSize / 4;
-        int numBytes = instSize % 4;
-        JavaField[] fields = new JavaField[numInts + numBytes];
-        int i;
-        for (i = 0; i < numInts; i++) {
-            fields[i] = new JavaField("unknown-field-" + i, "I");
-        }
-        for (i = 0; i < numBytes; i++) {
-            fields[i + numInts] = new JavaField("unknown-field-" +
-                                                i + numInts, "B");
-        }
-
-        // Create fake instance class
-        JavaClass c = new JavaClass(name, 0, 0, 0, 0, fields,
-                                 EMPTY_STATIC_ARRAY, instSize);
-        // Add the class
-        addFakeClass(makeId(classID), c);
-        return c;
-    }
-
-
-    /**
-     * @return true iff it's possible that some JavaThing instances might
-     *          isNew set
-     *
-     * @see JavaThing.isNew()
-     */
-    public boolean getHasNewSet() {
-        return hasNewSet;
-    }
-
-    //
-    // Used in the body of resolve()
-    //
-    private static class MyVisitor extends AbstractJavaHeapObjectVisitor {
-        JavaHeapObject t;
-        public void visit(JavaHeapObject other) {
-            other.addReferenceFrom(t);
-        }
-    }
-
-    // To show heap parsing progress, we print a '.' after this limit
-    private static final int DOT_LIMIT = 5000;
-
-    /**
-     * Called after reading complete, to initialize the structure
-     */
-    public void resolve(boolean calculateRefs) {
-        System.out.println("Resolving " + heapObjects.size() + " objects...");
-
-        // First, resolve the classes.  All classes must be resolved before
-        // we try any objects, because the objects use classes in their
-        // resolution.
-        javaLangClass = findClass("java.lang.Class");
-        if (javaLangClass == null) {
-            System.out.println("WARNING:  hprof file does not include java.lang.Class!");
-            javaLangClass = new JavaClass("java.lang.Class", 0, 0, 0, 0,
-                                 EMPTY_FIELD_ARRAY, EMPTY_STATIC_ARRAY, 0);
-            addFakeClass(javaLangClass);
-        }
-        javaLangString = findClass("java.lang.String");
-        if (javaLangString == null) {
-            System.out.println("WARNING:  hprof file does not include java.lang.String!");
-            javaLangString = new JavaClass("java.lang.String", 0, 0, 0, 0,
-                                 EMPTY_FIELD_ARRAY, EMPTY_STATIC_ARRAY, 0);
-            addFakeClass(javaLangString);
-        }
-        javaLangClassLoader = findClass("java.lang.ClassLoader");
-        if (javaLangClassLoader == null) {
-            System.out.println("WARNING:  hprof file does not include java.lang.ClassLoader!");
-            javaLangClassLoader = new JavaClass("java.lang.ClassLoader", 0, 0, 0, 0,
-                                 EMPTY_FIELD_ARRAY, EMPTY_STATIC_ARRAY, 0);
-            addFakeClass(javaLangClassLoader);
-        }
-
-        for (JavaHeapObject t : heapObjects.values()) {
-            if (t instanceof JavaClass) {
-                t.resolve(this);
-            }
-        }
-
-        // Now, resolve everything else.
-        for (JavaHeapObject t : heapObjects.values()) {
-            if (!(t instanceof JavaClass)) {
-                t.resolve(this);
-            }
-        }
-
-        heapObjects.putAll(fakeClasses);
-        fakeClasses.clear();
-
-        weakReferenceClass = findClass("java.lang.ref.Reference");
-        if (weakReferenceClass == null)  {      // JDK 1.1.x
-            weakReferenceClass = findClass("sun.misc.Ref");
-            referentFieldIndex = 0;
-        } else {
-            JavaField[] fields = weakReferenceClass.getFieldsForInstance();
-            for (int i = 0; i < fields.length; i++) {
-                if ("referent".equals(fields[i].getName())) {
-                    referentFieldIndex = i;
-                    break;
-                }
-            }
-        }
-
-        if (calculateRefs) {
-            calculateReferencesToObjects();
-            System.out.print("Eliminating duplicate references");
-            System.out.flush();
-            // This println refers to the *next* step
-        }
-        int count = 0;
-        for (JavaHeapObject t : heapObjects.values()) {
-            t.setupReferers();
-            ++count;
-            if (calculateRefs && count % DOT_LIMIT == 0) {
-                System.out.print(".");
-                System.out.flush();
-            }
-        }
-        if (calculateRefs) {
-            System.out.println("");
-        }
-
-        // to ensure that Iterator.remove() on getClasses()
-        // result will throw exception..
-        classes = Collections.unmodifiableMap(classes);
-    }
-
-    private void calculateReferencesToObjects() {
-        System.out.print("Chasing references, expect "
-                         + (heapObjects.size() / DOT_LIMIT) + " dots");
-        System.out.flush();
-        int count = 0;
-        MyVisitor visitor = new MyVisitor();
-        for (JavaHeapObject t : heapObjects.values()) {
-            visitor.t = t;
-            // call addReferenceFrom(t) on all objects t references:
-            t.visitReferencedObjects(visitor);
-            ++count;
-            if (count % DOT_LIMIT == 0) {
-                System.out.print(".");
-                System.out.flush();
-            }
-        }
-        System.out.println();
-        for (Root r : roots) {
-            r.resolve(this);
-            JavaHeapObject t = findThing(r.getId());
-            if (t != null) {
-                t.addReferenceFromRoot(r);
-            }
-        }
-    }
-
-    public void markNewRelativeTo(Snapshot baseline) {
-        hasNewSet = true;
-        for (JavaHeapObject t : heapObjects.values()) {
-            boolean isNew;
-            long thingID = t.getId();
-            if (thingID == 0L || thingID == -1L) {
-                isNew = false;
-            } else {
-                JavaThing other = baseline.findThing(t.getId());
-                if (other == null) {
-                    isNew = true;
-                } else {
-                    isNew = !t.isSameTypeAs(other);
-                }
-            }
-            t.setNew(isNew);
-        }
-    }
-
-    public Enumeration<JavaHeapObject> getThings() {
-        return heapObjects.elements();
-    }
-
-
-    public JavaHeapObject findThing(long id) {
-        Number idObj = makeId(id);
-        JavaHeapObject jho = heapObjects.get(idObj);
-        return jho != null? jho : fakeClasses.get(idObj);
-    }
-
-    public JavaHeapObject findThing(String id) {
-        return findThing(Misc.parseHex(id));
-    }
-
-    public JavaClass findClass(String name) {
-        if (name.startsWith("0x")) {
-            return (JavaClass) findThing(name);
-        } else {
-            return classes.get(name);
-        }
-    }
-
-    /**
-     * Return an Iterator of all of the classes in this snapshot.
-     **/
-    public Iterator getClasses() {
-        // note that because classes is a TreeMap
-        // classes are already sorted by name
-        return classes.values().iterator();
-    }
-
-    public JavaClass[] getClassesArray() {
-        JavaClass[] res = new JavaClass[classes.size()];
-        classes.values().toArray(res);
-        return res;
-    }
-
-    public synchronized Enumeration getFinalizerObjects() {
-        Vector obj;
-        if (finalizablesCache != null &&
-            (obj = finalizablesCache.get()) != null) {
-            return obj.elements();
-        }
-
-        JavaClass clazz = findClass("java.lang.ref.Finalizer");
-        JavaObject queue = (JavaObject) clazz.getStaticField("queue");
-        JavaThing tmp = queue.getField("head");
-        Vector<JavaHeapObject> finalizables = new Vector<JavaHeapObject>();
-        if (tmp != getNullThing()) {
-            JavaObject head = (JavaObject) tmp;
-            while (true) {
-                JavaHeapObject referent = (JavaHeapObject) head.getField("referent");
-                JavaThing next = head.getField("next");
-                if (next == getNullThing() || next.equals(head)) {
-                    break;
-                }
-                head = (JavaObject) next;
-                finalizables.add(referent);
-            }
-        }
-        finalizablesCache = new SoftReference<Vector>(finalizables);
-        return finalizables.elements();
-    }
-
-    public Enumeration<Root> getRoots() {
-        return roots.elements();
-    }
-
-    public Root[] getRootsArray() {
-        Root[] res = new Root[roots.size()];
-        roots.toArray(res);
-        return res;
-    }
-
-    public Root getRootAt(int i) {
-        return roots.elementAt(i);
-    }
-
-    public ReferenceChain[]
-    rootsetReferencesTo(JavaHeapObject target, boolean includeWeak) {
-        Vector<ReferenceChain> fifo = new Vector<ReferenceChain>();  // This is slow... A real fifo would help
-            // Must be a fifo to go breadth-first
-        Hashtable<JavaHeapObject, JavaHeapObject> visited = new Hashtable<JavaHeapObject, JavaHeapObject>();
-        // Objects are added here right after being added to fifo.
-        Vector<ReferenceChain> result = new Vector<ReferenceChain>();
-        visited.put(target, target);
-        fifo.addElement(new ReferenceChain(target, null));
-
-        while (fifo.size() > 0) {
-            ReferenceChain chain = fifo.elementAt(0);
-            fifo.removeElementAt(0);
-            JavaHeapObject curr = chain.getObj();
-            if (curr.getRoot() != null) {
-                result.addElement(chain);
-                // Even though curr is in the rootset, we want to explore its
-                // referers, because they might be more interesting.
-            }
-            Enumeration referers = curr.getReferers();
-            while (referers.hasMoreElements()) {
-                JavaHeapObject t = (JavaHeapObject) referers.nextElement();
-                if (t != null && !visited.containsKey(t)) {
-                    if (includeWeak || !t.refersOnlyWeaklyTo(this, curr)) {
-                        visited.put(t, t);
-                        fifo.addElement(new ReferenceChain(t, chain));
-                    }
-                }
-            }
-        }
-
-        ReferenceChain[] realResult = new ReferenceChain[result.size()];
-        for (int i = 0; i < result.size(); i++) {
-            realResult[i] =  result.elementAt(i);
-        }
-        return realResult;
-    }
-
-    public boolean getUnresolvedObjectsOK() {
-        return unresolvedObjectsOK;
-    }
-
-    public void setUnresolvedObjectsOK(boolean v) {
-        unresolvedObjectsOK = v;
-    }
-
-    public JavaClass getWeakReferenceClass() {
-        return weakReferenceClass;
-    }
-
-    public int getReferentFieldIndex() {
-        return referentFieldIndex;
-    }
-
-    public JavaThing getNullThing() {
-        return nullThing;
-    }
-
-    public void setReachableExcludes(ReachableExcludes e) {
-        reachableExcludes = e;
-    }
-
-    public ReachableExcludes getReachableExcludes() {
-        return reachableExcludes;
-    }
-
-    // package privates
-    void addReferenceFromRoot(Root r, JavaHeapObject obj) {
-        Root root = rootsMap.get(obj);
-        if (root == null) {
-            rootsMap.put(obj, r);
-        } else {
-            rootsMap.put(obj, root.mostInteresting(r));
-        }
-    }
-
-    Root getRoot(JavaHeapObject obj) {
-        return rootsMap.get(obj);
-    }
-
-    JavaClass getJavaLangClass() {
-        return javaLangClass;
-    }
-
-    JavaClass getJavaLangString() {
-        return javaLangString;
-    }
-
-    JavaClass getJavaLangClassLoader() {
-        return javaLangClassLoader;
-    }
-
-    JavaClass getOtherArrayType() {
-        if (otherArrayType == null) {
-            synchronized(this) {
-                if (otherArrayType == null) {
-                    addFakeClass(new JavaClass("[<other>", 0, 0, 0, 0,
-                                     EMPTY_FIELD_ARRAY, EMPTY_STATIC_ARRAY,
-                                     0));
-                    otherArrayType = findClass("[<other>");
-                }
-            }
-        }
-        return otherArrayType;
-    }
-
-    JavaClass getArrayClass(String elementSignature) {
-        JavaClass clazz;
-        synchronized(classes) {
-            clazz = findClass("[" + elementSignature);
-            if (clazz == null) {
-                clazz = new JavaClass("[" + elementSignature, 0, 0, 0, 0,
-                                   EMPTY_FIELD_ARRAY, EMPTY_STATIC_ARRAY, 0);
-                addFakeClass(clazz);
-                // This is needed because the JDK only creates Class structures
-                // for array element types, not the arrays themselves.  For
-                // analysis, though, we need to pretend that there's a
-                // JavaClass for the array type, too.
-            }
-        }
-        return clazz;
-    }
-
-    ReadBuffer getReadBuffer() {
-        return readBuf;
-    }
-
-    void setNew(JavaHeapObject obj, boolean isNew) {
-        initNewObjects();
-        if (isNew) {
-            newObjects.put(obj, Boolean.TRUE);
-        }
-    }
-
-    boolean isNew(JavaHeapObject obj) {
-        if (newObjects != null) {
-            return newObjects.get(obj) != null;
-        } else {
-            return false;
-        }
-    }
-
-    // Internals only below this point
-    private Number makeId(long id) {
-        if (identifierSize == 4) {
-            return new Integer((int)id);
-        } else {
-            return new Long(id);
-        }
-    }
-
-    private void putInClassesMap(JavaClass c) {
-        String name = c.getName();
-        if (classes.containsKey(name)) {
-            // more than one class can have the same name
-            // if so, create a unique name by appending
-            // - and id string to it.
-            name += "-" + c.getIdString();
-        }
-        classes.put(c.getName(), c);
-    }
-
-    private void addFakeClass(JavaClass c) {
-        putInClassesMap(c);
-        c.resolve(this);
-    }
-
-    private void addFakeClass(Number id, JavaClass c) {
-        fakeClasses.put(id, c);
-        addFakeClass(c);
-    }
-
-    private synchronized void initNewObjects() {
-        if (newObjects == null) {
-            synchronized (this) {
-                if (newObjects == null) {
-                    newObjects = new HashMap<JavaHeapObject, Boolean>();
-                }
-            }
-        }
-    }
-
-    private synchronized void initSiteTraces() {
-        if (siteTraces == null) {
-            synchronized (this) {
-                if (siteTraces == null) {
-                    siteTraces = new HashMap<JavaHeapObject, StackTrace>();
-                }
-            }
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/hat/internal/model/StackFrame.java b/ojluni/src/main/java/com/sun/tools/hat/internal/model/StackFrame.java
deleted file mode 100755
index 78c8e77..0000000
--- a/ojluni/src/main/java/com/sun/tools/hat/internal/model/StackFrame.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-
-/*
- * The Original Code is HAT. The Initial Developer of the
- * Original Code is Bill Foote, with contributions from others
- * at JavaSoft/Sun.
- */
-
-package com.sun.tools.hat.internal.model;
-
-/**
- *
- * @author      Bill Foote
- */
-
-
-/**
- * Represents a stack frame.
- */
-
-public class StackFrame {
-
-    //
-    // Values for the lineNumber data member.  These are the same
-    // as the values used in the JDK 1.2 heap dump file.
-    //
-    public final static int LINE_NUMBER_UNKNOWN = -1;
-    public final static int LINE_NUMBER_COMPILED = -2;
-    public final static int LINE_NUMBER_NATIVE = -3;
-
-    private String methodName;
-    private String methodSignature;
-    private String className;
-    private String sourceFileName;
-    private int lineNumber;
-
-    public StackFrame(String methodName, String methodSignature,
-                      String className, String sourceFileName, int lineNumber) {
-        this.methodName = methodName;
-        this.methodSignature = methodSignature;
-        this.className = className;
-        this.sourceFileName = sourceFileName;
-        this.lineNumber = lineNumber;
-    }
-
-    public void resolve(Snapshot snapshot) {
-    }
-
-    public String getMethodName() {
-        return methodName;
-    }
-
-    public String getMethodSignature() {
-        return methodSignature;
-    }
-
-    public String getClassName() {
-        return className;
-    }
-
-    public String getSourceFileName() {
-        return sourceFileName;
-    }
-
-    public String getLineNumber() {
-        switch(lineNumber) {
-            case LINE_NUMBER_UNKNOWN:
-                return "(unknown)";
-            case LINE_NUMBER_COMPILED:
-                return "(compiled method)";
-            case LINE_NUMBER_NATIVE:
-                return "(native method)";
-            default:
-                return Integer.toString(lineNumber, 10);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/hat/internal/model/StackTrace.java b/ojluni/src/main/java/com/sun/tools/hat/internal/model/StackTrace.java
deleted file mode 100755
index ede8457..0000000
--- a/ojluni/src/main/java/com/sun/tools/hat/internal/model/StackTrace.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-
-/*
- * The Original Code is HAT. The Initial Developer of the
- * Original Code is Bill Foote, with contributions from others
- * at JavaSoft/Sun.
- */
-
-package com.sun.tools.hat.internal.model;
-
-/**
- *
- * @author      Bill Foote
- */
-
-
-/**
- * Represents a stack trace, that is, an ordered collection of stack frames.
- */
-
-public class StackTrace {
-
-    private StackFrame[] frames;
-
-    public StackTrace(StackFrame[] frames) {
-        this.frames = frames;
-    }
-
-    /**
-     * @param depth.  The minimum reasonable depth is 1.
-     *
-     * @return a (possibly new) StackTrace that is limited to depth.
-     */
-    public StackTrace traceForDepth(int depth) {
-        if (depth >= frames.length) {
-            return this;
-        } else {
-            StackFrame[] f = new StackFrame[depth];
-            System.arraycopy(frames, 0, f, 0, depth);
-            return new StackTrace(f);
-        }
-    }
-
-    public void resolve(Snapshot snapshot) {
-        for (int i = 0; i < frames.length; i++) {
-            frames[i].resolve(snapshot);
-        }
-    }
-
-    public StackFrame[] getFrames() {
-        return frames;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/hat/internal/oql/OQLEngine.java b/ojluni/src/main/java/com/sun/tools/hat/internal/oql/OQLEngine.java
deleted file mode 100755
index c69335d..0000000
--- a/ojluni/src/main/java/com/sun/tools/hat/internal/oql/OQLEngine.java
+++ /dev/null
@@ -1,311 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-
-/*
- * The Original Code is HAT. The Initial Developer of the
- * Original Code is Bill Foote, with contributions from others
- * at JavaSoft/Sun.
- */
-
-package com.sun.tools.hat.internal.oql;
-
-import com.sun.tools.hat.internal.model.*;
-import java.io.*;
-import java.lang.reflect.*;
-import java.util.*;
-
-/**
- * This is Object Query Language Interpreter
- *
- */
-public class OQLEngine {
-    static {
-        try {
-            // Do we have javax.script support?
-            // create ScriptEngineManager
-            Class<?> managerClass = Class.forName("javax.script.ScriptEngineManager");
-            Object manager = managerClass.newInstance();
-
-            // create JavaScript engine
-            Method getEngineMethod = managerClass.getMethod("getEngineByName",
-                                new Class[] { String.class });
-            Object jse = getEngineMethod.invoke(manager, new Object[] {"js"});
-            oqlSupported = (jse != null);
-        } catch (Exception exp) {
-            oqlSupported = false;
-        }
-    }
-
-    // check OQL is supported or not before creating OQLEngine
-    public static boolean isOQLSupported() {
-        return oqlSupported;
-    }
-
-    public OQLEngine(Snapshot snapshot) {
-        if (!isOQLSupported()) {
-            throw new UnsupportedOperationException("OQL not supported");
-        }
-        init(snapshot);
-    }
-
-    /**
-       Query is of the form
-
-          select &lt;java script code to select&gt;
-          [ from [instanceof] &lt;class name&gt; [&lt;identifier&gt;]
-            [ where &lt;java script boolean expression&gt; ]
-          ]
-    */
-    public synchronized void executeQuery(String query, ObjectVisitor visitor)
-                                          throws OQLException {
-        debugPrint("query : " + query);
-        StringTokenizer st = new StringTokenizer(query);
-        if (st.hasMoreTokens()) {
-            String first = st.nextToken();
-            if (! first.equals("select") ) {
-                // Query does not start with 'select' keyword.
-                // Just treat it as plain JavaScript and eval it.
-                try {
-                    Object res = evalScript(query);
-                    visitor.visit(res);
-                } catch (Exception e) {
-                    throw new OQLException(e);
-                }
-                return;
-            }
-        } else {
-            throw new OQLException("query syntax error: no 'select' clause");
-        }
-
-        String selectExpr = "";
-        boolean seenFrom = false;
-        while (st.hasMoreTokens()) {
-            String tok = st.nextToken();
-            if (tok.equals("from")) {
-                seenFrom = true;
-                break;
-            }
-            selectExpr += " " + tok;
-        }
-
-        if (selectExpr.equals("")) {
-            throw new OQLException("query syntax error: 'select' expression can not be empty");
-        }
-
-        String className = null;
-        boolean isInstanceOf = false;
-        String whereExpr =  null;
-        String identifier = null;
-
-        if (seenFrom) {
-            if (st.hasMoreTokens()) {
-                String tmp = st.nextToken();
-                if (tmp.equals("instanceof")) {
-                    isInstanceOf = true;
-                    if (! st.hasMoreTokens()) {
-                        throw new OQLException("no class name after 'instanceof'");
-                    }
-                    className = st.nextToken();
-                } else {
-                    className = tmp;
-                }
-            } else {
-                throw new OQLException("query syntax error: class name must follow 'from'");
-            }
-
-            if (st.hasMoreTokens()) {
-                identifier = st.nextToken();
-                if (identifier.equals("where")) {
-                    throw new OQLException("query syntax error: identifier should follow class name");
-                }
-                if (st.hasMoreTokens()) {
-                    String tmp = st.nextToken();
-                    if (! tmp.equals("where")) {
-                        throw new OQLException("query syntax error: 'where' clause expected after 'from' clause");
-                    }
-
-                    whereExpr = "";
-                    while (st.hasMoreTokens()) {
-                        whereExpr += " " + st.nextToken();
-                    }
-                    if (whereExpr.equals("")) {
-                        throw new OQLException("query syntax error: 'where' clause cannot have empty expression");
-                    }
-                }
-            } else {
-                throw new OQLException("query syntax error: identifier should follow class name");
-            }
-        }
-
-        executeQuery(new OQLQuery(selectExpr, isInstanceOf, className,
-                                  identifier, whereExpr), visitor);
-    }
-
-    private void executeQuery(OQLQuery q, ObjectVisitor visitor)
-                              throws OQLException {
-        JavaClass clazz = null;
-        if (q.className != null) {
-            clazz = snapshot.findClass(q.className);
-            if (clazz == null) {
-                throw new OQLException(q.className + " is not found!");
-            }
-        }
-
-        StringBuffer buf = new StringBuffer();
-        buf.append("function __select__(");
-        if (q.identifier != null) {
-            buf.append(q.identifier);
-        }
-        buf.append(") { return ");
-        buf.append(q.selectExpr.replace('\n', ' '));
-        buf.append("; }");
-
-        String selectCode = buf.toString();
-        debugPrint(selectCode);
-        String whereCode = null;
-        if (q.whereExpr != null) {
-            buf = new StringBuffer();
-            buf.append("function __where__(");
-            buf.append(q.identifier);
-            buf.append(") { return ");
-            buf.append(q.whereExpr.replace('\n', ' '));
-            buf.append("; }");
-            whereCode = buf.toString();
-        }
-        debugPrint(whereCode);
-
-        // compile select expression and where condition
-        try {
-            evalMethod.invoke(engine, new Object[] { selectCode });
-            if (whereCode != null) {
-                evalMethod.invoke(engine, new Object[] { whereCode });
-            }
-
-            if (q.className != null) {
-                Enumeration objects = clazz.getInstances(q.isInstanceOf);
-                while (objects.hasMoreElements()) {
-                    JavaHeapObject obj = (JavaHeapObject) objects.nextElement();
-                    Object[] args = new Object[] { wrapJavaObject(obj) };
-                    boolean b = (whereCode == null);
-                    if (!b) {
-                        Object res = call("__where__", args);
-                        if (res instanceof Boolean) {
-                            b = ((Boolean)res).booleanValue();
-                        } else if (res instanceof Number) {
-                            b = ((Number)res).intValue() != 0;
-                        } else {
-                            b = (res != null);
-                        }
-                    }
-
-                    if (b) {
-                        Object select = call("__select__", args);
-                        if (visitor.visit(select)) return;
-                    }
-                }
-            } else {
-                // simple "select <expr>" query
-                Object select = call("__select__", new Object[] {});
-                visitor.visit(select);
-            }
-        } catch (Exception e) {
-            throw new OQLException(e);
-        }
-    }
-
-    public Object evalScript(String script) throws Exception {
-        return evalMethod.invoke(engine, new Object[] { script });
-    }
-
-    public Object wrapJavaObject(JavaHeapObject obj) throws Exception {
-        return call("wrapJavaObject", new Object[] { obj });
-    }
-
-    public Object toHtml(Object obj) throws Exception {
-        return call("toHtml", new Object[] { obj });
-    }
-
-    public Object call(String func, Object[] args) throws Exception {
-        return invokeMethod.invoke(engine, new Object[] { func, args });
-    }
-
-    private static void debugPrint(String msg) {
-        if (debug) System.out.println(msg);
-    }
-
-    private void init(Snapshot snapshot) throws RuntimeException {
-        this.snapshot = snapshot;
-        try {
-            // create ScriptEngineManager
-            Class<?> managerClass = Class.forName("javax.script.ScriptEngineManager");
-            Object manager = managerClass.newInstance();
-
-            // create JavaScript engine
-            Method getEngineMethod = managerClass.getMethod("getEngineByName",
-                                new Class[] { String.class });
-            engine = getEngineMethod.invoke(manager, new Object[] {"js"});
-
-            // initialize engine with init file (hat.js)
-            InputStream strm = getInitStream();
-            Class<?> engineClass = Class.forName("javax.script.ScriptEngine");
-            evalMethod = engineClass.getMethod("eval",
-                                new Class[] { Reader.class });
-            evalMethod.invoke(engine, new Object[] {new InputStreamReader(strm)});
-
-            // initialize ScriptEngine.eval(String) and
-            // Invocable.invokeFunction(String, Object[]) methods.
-            Class<?> invocableClass = Class.forName("javax.script.Invocable");
-
-            evalMethod = engineClass.getMethod("eval",
-                                  new Class[] { String.class });
-            invokeMethod = invocableClass.getMethod("invokeFunction",
-                                  new Class[] { String.class, Object[].class });
-
-            // initialize ScriptEngine.put(String, Object) method
-            Method putMethod = engineClass.getMethod("put",
-                                  new Class[] { String.class, Object.class });
-
-            // call ScriptEngine.put to initialize built-in heap object
-            putMethod.invoke(engine, new Object[] {
-                        "heap", call("wrapHeapSnapshot", new Object[] { snapshot })
-                    });
-        } catch (Exception e) {
-            if (debug) e.printStackTrace();
-            throw new RuntimeException(e);
-        }
-    }
-
-    private InputStream getInitStream() {
-        return getClass().getResourceAsStream("/com/sun/tools/hat/resources/hat.js");
-    }
-
-    private Object engine;
-    private Method evalMethod;
-    private Method invokeMethod;
-    private Snapshot snapshot;
-    private static boolean debug = false;
-    private static boolean oqlSupported;
-}
diff --git a/ojluni/src/main/java/com/sun/tools/hat/internal/oql/OQLException.java b/ojluni/src/main/java/com/sun/tools/hat/internal/oql/OQLException.java
deleted file mode 100755
index b83f134..0000000
--- a/ojluni/src/main/java/com/sun/tools/hat/internal/oql/OQLException.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-
-/*
- * The Original Code is HAT. The Initial Developer of the
- * Original Code is Bill Foote, with contributions from others
- * at JavaSoft/Sun.
- */
-
-package com.sun.tools.hat.internal.oql;
-
-/**
- * OQLException is thrown if OQL execution results in error
- *
- */
-public class OQLException extends Exception {
-    public OQLException(String msg) {
-        super(msg);
-    }
-
-    public OQLException(String msg, Throwable cause) {
-        super(msg, cause);
-    }
-
-    public OQLException(Throwable cause) {
-        super(cause);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/hat/internal/oql/OQLQuery.java b/ojluni/src/main/java/com/sun/tools/hat/internal/oql/OQLQuery.java
deleted file mode 100755
index 51c616e..0000000
--- a/ojluni/src/main/java/com/sun/tools/hat/internal/oql/OQLQuery.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-
-/*
- * The Original Code is HAT. The Initial Developer of the
- * Original Code is Bill Foote, with contributions from others
- * at JavaSoft/Sun.
- */
-
-package com.sun.tools.hat.internal.oql;
-
-/**
- * This represents a parsed OQL query
- *
- */
-class OQLQuery {
-    OQLQuery(String selectExpr, boolean isInstanceOf,
-             String className, String identifier, String whereExpr) {
-        this.selectExpr = selectExpr;
-        this.isInstanceOf = isInstanceOf;
-        this.className = className;
-        this.identifier = identifier;
-        this.whereExpr = whereExpr;
-    }
-
-    String   selectExpr;
-    boolean  isInstanceOf;
-    String   className;
-    String   identifier;
-    String   whereExpr;
-}
diff --git a/ojluni/src/main/java/com/sun/tools/hat/internal/oql/ObjectVisitor.java b/ojluni/src/main/java/com/sun/tools/hat/internal/oql/ObjectVisitor.java
deleted file mode 100755
index c3b4d34..0000000
--- a/ojluni/src/main/java/com/sun/tools/hat/internal/oql/ObjectVisitor.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-
-/*
- * The Original Code is HAT. The Initial Developer of the
- * Original Code is Bill Foote, with contributions from others
- * at JavaSoft/Sun.
- */
-
-package com.sun.tools.hat.internal.oql;
-
-/**
- * This visitor is supplied to OQLEngine.executeQuery
- * to receive result set objects one by one.
- *
- */
-public interface ObjectVisitor {
-    // return true to terminate the result set callback earlier
-    public boolean visit(Object o);
-}
diff --git a/ojluni/src/main/java/com/sun/tools/hat/internal/parser/FileReadBuffer.java b/ojluni/src/main/java/com/sun/tools/hat/internal/parser/FileReadBuffer.java
deleted file mode 100755
index eb3a113..0000000
--- a/ojluni/src/main/java/com/sun/tools/hat/internal/parser/FileReadBuffer.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-
-/*
- * The Original Code is HAT. The Initial Developer of the
- * Original Code is Bill Foote, with contributions from others
- * at JavaSoft/Sun.
- */
-
-package com.sun.tools.hat.internal.parser;
-
-import java.io.IOException;
-import java.io.RandomAccessFile;
-
-/**
- * Implementation of ReadBuffer using a RandomAccessFile
- *
- * @author A. Sundararajan
- */
-class FileReadBuffer implements ReadBuffer {
-    // underlying file to read
-    private RandomAccessFile file;
-
-    FileReadBuffer(RandomAccessFile file) {
-        this.file = file;
-    }
-
-    private void seek(long pos) throws IOException {
-        file.getChannel().position(pos);
-    }
-
-    public synchronized void get(long pos, byte[] buf) throws IOException {
-        seek(pos);
-        file.read(buf);
-    }
-
-    public synchronized char getChar(long pos) throws IOException {
-        seek(pos);
-        return file.readChar();
-    }
-
-    public synchronized byte getByte(long pos) throws IOException {
-        seek(pos);
-        return (byte) file.read();
-    }
-
-    public synchronized short getShort(long pos) throws IOException {
-        seek(pos);
-        return file.readShort();
-    }
-
-    public synchronized int getInt(long pos) throws IOException {
-        seek(pos);
-        return file.readInt();
-    }
-
-    public synchronized long getLong(long pos) throws IOException {
-        seek(pos);
-        return file.readLong();
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/hat/internal/parser/HprofReader.java b/ojluni/src/main/java/com/sun/tools/hat/internal/parser/HprofReader.java
deleted file mode 100755
index 33cdb3a..0000000
--- a/ojluni/src/main/java/com/sun/tools/hat/internal/parser/HprofReader.java
+++ /dev/null
@@ -1,892 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-
-/*
- * The Original Code is HAT. The Initial Developer of the
- * Original Code is Bill Foote, with contributions from others
- * at JavaSoft/Sun.
- */
-
-package com.sun.tools.hat.internal.parser;
-
-import java.io.*;
-import java.util.Date;
-import java.util.Hashtable;
-import com.sun.tools.hat.internal.model.ArrayTypeCodes;
-import com.sun.tools.hat.internal.model.*;
-
-/**
- * Object that's used to read a hprof file.
- *
- * @author      Bill Foote
- */
-
-public class HprofReader extends Reader /* imports */ implements ArrayTypeCodes {
-
-    final static int MAGIC_NUMBER = 0x4a415641;
-    // That's "JAVA", the first part of "JAVA PROFILE ..."
-    private final static String[] VERSIONS = {
-            " PROFILE 1.0\0",
-            " PROFILE 1.0.1\0",
-            " PROFILE 1.0.2\0",
-    };
-
-    private final static int VERSION_JDK12BETA3 = 0;
-    private final static int VERSION_JDK12BETA4 = 1;
-    private final static int VERSION_JDK6       = 2;
-    // These version numbers are indices into VERSIONS.  The instance data
-    // member version is set to one of these, and it drives decisions when
-    // reading the file.
-    //
-    // Version 1.0.1 added HPROF_GC_PRIM_ARRAY_DUMP, which requires no
-    // version-sensitive parsing.
-    //
-    // Version 1.0.1 changed the type of a constant pool entry from a signature
-    // to a typecode.
-    //
-    // Version 1.0.2 added HPROF_HEAP_DUMP_SEGMENT and HPROF_HEAP_DUMP_END
-    // to allow a large heap to be dumped as a sequence of heap dump segments.
-    //
-    // The HPROF agent in J2SE 1.2 through to 5.0 generate a version 1.0.1
-    // file. In Java SE 6.0 the version is either 1.0.1 or 1.0.2 depending on
-    // the size of the heap (normally it will be 1.0.1 but for multi-GB
-    // heaps the heap dump will not fit in a HPROF_HEAP_DUMP record so the
-    // dump is generated as version 1.0.2).
-
-    //
-    // Record types:
-    //
-    static final int HPROF_UTF8          = 0x01;
-    static final int HPROF_LOAD_CLASS    = 0x02;
-    static final int HPROF_UNLOAD_CLASS  = 0x03;
-    static final int HPROF_FRAME         = 0x04;
-    static final int HPROF_TRACE         = 0x05;
-    static final int HPROF_ALLOC_SITES   = 0x06;
-    static final int HPROF_HEAP_SUMMARY  = 0x07;
-
-    static final int HPROF_START_THREAD  = 0x0a;
-    static final int HPROF_END_THREAD    = 0x0b;
-
-    static final int HPROF_HEAP_DUMP     = 0x0c;
-
-    static final int HPROF_CPU_SAMPLES   = 0x0d;
-    static final int HPROF_CONTROL_SETTINGS = 0x0e;
-    static final int HPROF_LOCKSTATS_WAIT_TIME = 0x10;
-    static final int HPROF_LOCKSTATS_HOLD_TIME = 0x11;
-
-    static final int HPROF_GC_ROOT_UNKNOWN       = 0xff;
-    static final int HPROF_GC_ROOT_JNI_GLOBAL    = 0x01;
-    static final int HPROF_GC_ROOT_JNI_LOCAL     = 0x02;
-    static final int HPROF_GC_ROOT_JAVA_FRAME    = 0x03;
-    static final int HPROF_GC_ROOT_NATIVE_STACK  = 0x04;
-    static final int HPROF_GC_ROOT_STICKY_CLASS  = 0x05;
-    static final int HPROF_GC_ROOT_THREAD_BLOCK  = 0x06;
-    static final int HPROF_GC_ROOT_MONITOR_USED  = 0x07;
-    static final int HPROF_GC_ROOT_THREAD_OBJ    = 0x08;
-
-    static final int HPROF_GC_CLASS_DUMP         = 0x20;
-    static final int HPROF_GC_INSTANCE_DUMP      = 0x21;
-    static final int HPROF_GC_OBJ_ARRAY_DUMP         = 0x22;
-    static final int HPROF_GC_PRIM_ARRAY_DUMP         = 0x23;
-
-    static final int HPROF_HEAP_DUMP_SEGMENT     = 0x1c;
-    static final int HPROF_HEAP_DUMP_END         = 0x2c;
-
-    private final static int T_CLASS = 2;
-
-    private int version;        // The version of .hprof being read
-
-    private int debugLevel;
-    private long currPos;        // Current position in the file
-
-    private int dumpsToSkip;
-    private boolean callStack;  // If true, read the call stack of objects
-
-    private int identifierSize;         // Size, in bytes, of identifiers.
-    private Hashtable<Long, String> names;
-
-    // Hashtable<Integer, ThreadObject>, used to map the thread sequence number
-    // (aka "serial number") to the thread object ID for
-    // HPROF_GC_ROOT_THREAD_OBJ.  ThreadObject is a trivial inner class,
-    // at the end of this file.
-    private Hashtable<Integer, ThreadObject> threadObjects;
-
-    // Hashtable<Long, String>, maps class object ID to class name
-    // (with / converted to .)
-    private Hashtable<Long, String> classNameFromObjectID;
-
-    // Hashtable<Integer, Integer>, maps class serial # to class object ID
-    private Hashtable<Integer, String> classNameFromSerialNo;
-
-    // Hashtable<Long, StackFrame> maps stack frame ID to StackFrame.
-    // Null if we're not tracking them.
-    private Hashtable<Long, StackFrame> stackFrames;
-
-    // Hashtable<Integer, StackTrace> maps stack frame ID to StackTrace
-    // Null if we're not tracking them.
-    private Hashtable<Integer, StackTrace> stackTraces;
-
-    private Snapshot snapshot;
-
-    public HprofReader(String fileName, PositionDataInputStream in,
-                       int dumpNumber, boolean callStack, int debugLevel)
-                       throws IOException {
-        super(in);
-        RandomAccessFile file = new RandomAccessFile(fileName, "r");
-        this.snapshot = new Snapshot(MappedReadBuffer.create(file));
-        this.dumpsToSkip = dumpNumber - 1;
-        this.callStack = callStack;
-        this.debugLevel = debugLevel;
-        names = new Hashtable<Long, String>();
-        threadObjects = new Hashtable<Integer, ThreadObject>(43);
-        classNameFromObjectID = new Hashtable<Long, String>();
-        if (callStack) {
-            stackFrames = new Hashtable<Long, StackFrame>(43);
-            stackTraces = new Hashtable<Integer, StackTrace>(43);
-            classNameFromSerialNo = new Hashtable<Integer, String>();
-        }
-    }
-
-    public Snapshot read() throws IOException {
-        currPos = 4;    // 4 because of the magic number
-        version = readVersionHeader();
-        identifierSize = in.readInt();
-        snapshot.setIdentifierSize(identifierSize);
-        if (version >= VERSION_JDK12BETA4) {
-            snapshot.setNewStyleArrayClass(true);
-        } else {
-            snapshot.setNewStyleArrayClass(false);
-        }
-
-        currPos += 4;
-        if (identifierSize != 4 && identifierSize != 8) {
-            throw new IOException("I'm sorry, but I can't deal with an identifier size of " + identifierSize + ".  I can only deal with 4 or 8.");
-        }
-        System.out.println("Dump file created " + (new Date(in.readLong())));
-        currPos += 8;
-
-        for (;;) {
-            int type;
-            try {
-                type = in.readUnsignedByte();
-            } catch (EOFException ignored) {
-                break;
-            }
-            in.readInt();       // Timestamp of this record
-            // Length of record: readInt() will return negative value for record
-            // length >2GB.  so store 32bit value in long to keep it unsigned.
-            long length = in.readInt() & 0xffffffffL;
-            if (debugLevel > 0) {
-                System.out.println("Read record type " + type
-                                   + ", length " + length
-                                   + " at position " + toHex(currPos));
-            }
-            if (length < 0) {
-                throw new IOException("Bad record length of " + length
-                                      + " at byte " + toHex(currPos+5)
-                                      + " of file.");
-            }
-            currPos += 9 + length;
-            switch (type) {
-                case HPROF_UTF8: {
-                    long id = readID();
-                    byte[] chars = new byte[(int)length - identifierSize];
-                    in.readFully(chars);
-                    names.put(new Long(id), new String(chars));
-                    break;
-                }
-                case HPROF_LOAD_CLASS: {
-                    int serialNo = in.readInt();        // Not used
-                    long classID = readID();
-                    int stackTraceSerialNo = in.readInt();
-                    long classNameID = readID();
-                    Long classIdI = new Long(classID);
-                    String nm = getNameFromID(classNameID).replace('/', '.');
-                    classNameFromObjectID.put(classIdI, nm);
-                    if (classNameFromSerialNo != null) {
-                        classNameFromSerialNo.put(new Integer(serialNo), nm);
-                    }
-                    break;
-                }
-
-                case HPROF_HEAP_DUMP: {
-                    if (dumpsToSkip <= 0) {
-                        try {
-                            readHeapDump(length, currPos);
-                        } catch (EOFException exp) {
-                            handleEOF(exp, snapshot);
-                        }
-                        if (debugLevel > 0) {
-                            System.out.println("    Finished processing instances in heap dump.");
-                        }
-                        return snapshot;
-                    } else {
-                        dumpsToSkip--;
-                        skipBytes(length);
-                    }
-                    break;
-                }
-
-                case HPROF_HEAP_DUMP_END: {
-                    if (version >= VERSION_JDK6) {
-                        if (dumpsToSkip <= 0) {
-                            skipBytes(length);  // should be no-op
-                            return snapshot;
-                        } else {
-                            // skip this dump (of the end record for a sequence of dump segments)
-                            dumpsToSkip--;
-                        }
-                    } else {
-                        // HPROF_HEAP_DUMP_END only recognized in >= 1.0.2
-                        warn("Ignoring unrecognized record type " + type);
-                    }
-                    skipBytes(length);  // should be no-op
-                    break;
-                }
-
-                case HPROF_HEAP_DUMP_SEGMENT: {
-                    if (version >= VERSION_JDK6) {
-                        if (dumpsToSkip <= 0) {
-                            try {
-                                // read the dump segment
-                                readHeapDump(length, currPos);
-                            } catch (EOFException exp) {
-                                handleEOF(exp, snapshot);
-                            }
-                        } else {
-                            // all segments comprising the heap dump will be skipped
-                            skipBytes(length);
-                        }
-                    } else {
-                        // HPROF_HEAP_DUMP_SEGMENT only recognized in >= 1.0.2
-                        warn("Ignoring unrecognized record type " + type);
-                        skipBytes(length);
-                    }
-                    break;
-                }
-
-                case HPROF_FRAME: {
-                    if (stackFrames == null) {
-                        skipBytes(length);
-                    } else {
-                        long id = readID();
-                        String methodName = getNameFromID(readID());
-                        String methodSig = getNameFromID(readID());
-                        String sourceFile = getNameFromID(readID());
-                        int classSer = in.readInt();
-                        String className = classNameFromSerialNo.get(new Integer(classSer));
-                        int lineNumber = in.readInt();
-                        if (lineNumber < StackFrame.LINE_NUMBER_NATIVE) {
-                            warn("Weird stack frame line number:  " + lineNumber);
-                            lineNumber = StackFrame.LINE_NUMBER_UNKNOWN;
-                        }
-                        stackFrames.put(new Long(id),
-                                        new StackFrame(methodName, methodSig,
-                                                       className, sourceFile,
-                                                       lineNumber));
-                    }
-                    break;
-                }
-                case HPROF_TRACE: {
-                    if (stackTraces == null) {
-                        skipBytes(length);
-                    } else {
-                        int serialNo = in.readInt();
-                        int threadSeq = in.readInt();   // Not used
-                        StackFrame[] frames = new StackFrame[in.readInt()];
-                        for (int i = 0; i < frames.length; i++) {
-                            long fid = readID();
-                            frames[i] = stackFrames.get(new Long(fid));
-                            if (frames[i] == null) {
-                                throw new IOException("Stack frame " + toHex(fid) + " not found");
-                            }
-                        }
-                        stackTraces.put(new Integer(serialNo),
-                                        new StackTrace(frames));
-                    }
-                    break;
-                }
-                case HPROF_UNLOAD_CLASS:
-                case HPROF_ALLOC_SITES:
-                case HPROF_START_THREAD:
-                case HPROF_END_THREAD:
-                case HPROF_HEAP_SUMMARY:
-                case HPROF_CPU_SAMPLES:
-                case HPROF_CONTROL_SETTINGS:
-                case HPROF_LOCKSTATS_WAIT_TIME:
-                case HPROF_LOCKSTATS_HOLD_TIME:
-                {
-                    // Ignore these record types
-                    skipBytes(length);
-                    break;
-                }
-                default: {
-                    skipBytes(length);
-                    warn("Ignoring unrecognized record type " + type);
-                }
-            }
-        }
-
-        return snapshot;
-    }
-
-    private void skipBytes(long length) throws IOException {
-        in.skipBytes((int)length);
-    }
-
-    private int readVersionHeader() throws IOException {
-        int candidatesLeft = VERSIONS.length;
-        boolean[] matched = new boolean[VERSIONS.length];
-        for (int i = 0; i < candidatesLeft; i++) {
-            matched[i] = true;
-        }
-
-        int pos = 0;
-        while (candidatesLeft > 0) {
-            char c = (char) in.readByte();
-            currPos++;
-            for (int i = 0; i < VERSIONS.length; i++) {
-                if (matched[i]) {
-                    if (c != VERSIONS[i].charAt(pos)) {   // Not matched
-                        matched[i] = false;
-                        --candidatesLeft;
-                    } else if (pos == VERSIONS[i].length() - 1) {  // Full match
-                        return i;
-                    }
-                }
-            }
-            ++pos;
-        }
-        throw new IOException("Version string not recognized at byte " + (pos+3));
-    }
-
-    private void readHeapDump(long bytesLeft, long posAtEnd) throws IOException {
-        while (bytesLeft > 0) {
-            int type = in.readUnsignedByte();
-            if (debugLevel > 0) {
-                System.out.println("    Read heap sub-record type " + type
-                                   + " at position "
-                                   + toHex(posAtEnd - bytesLeft));
-            }
-            bytesLeft--;
-            switch(type) {
-                case HPROF_GC_ROOT_UNKNOWN: {
-                    long id = readID();
-                    bytesLeft -= identifierSize;
-                    snapshot.addRoot(new Root(id, 0, Root.UNKNOWN, ""));
-                    break;
-                }
-                case HPROF_GC_ROOT_THREAD_OBJ: {
-                    long id = readID();
-                    int threadSeq = in.readInt();
-                    int stackSeq = in.readInt();
-                    bytesLeft -= identifierSize + 8;
-                    threadObjects.put(new Integer(threadSeq),
-                                      new ThreadObject(id, stackSeq));
-                    break;
-                }
-                case HPROF_GC_ROOT_JNI_GLOBAL: {
-                    long id = readID();
-                    long globalRefId = readID();        // Ignored, for now
-                    bytesLeft -= 2*identifierSize;
-                    snapshot.addRoot(new Root(id, 0, Root.NATIVE_STATIC, ""));
-                    break;
-                }
-                case HPROF_GC_ROOT_JNI_LOCAL: {
-                    long id = readID();
-                    int threadSeq = in.readInt();
-                    int depth = in.readInt();
-                    bytesLeft -= identifierSize + 8;
-                    ThreadObject to = getThreadObjectFromSequence(threadSeq);
-                    StackTrace st = getStackTraceFromSerial(to.stackSeq);
-                    if (st != null) {
-                        st = st.traceForDepth(depth+1);
-                    }
-                    snapshot.addRoot(new Root(id, to.threadId,
-                                              Root.NATIVE_LOCAL, "", st));
-                    break;
-                }
-                case HPROF_GC_ROOT_JAVA_FRAME: {
-                    long id = readID();
-                    int threadSeq = in.readInt();
-                    int depth = in.readInt();
-                    bytesLeft -= identifierSize + 8;
-                    ThreadObject to = getThreadObjectFromSequence(threadSeq);
-                    StackTrace st = getStackTraceFromSerial(to.stackSeq);
-                    if (st != null) {
-                        st = st.traceForDepth(depth+1);
-                    }
-                    snapshot.addRoot(new Root(id, to.threadId,
-                                              Root.JAVA_LOCAL, "", st));
-                    break;
-                }
-                case HPROF_GC_ROOT_NATIVE_STACK: {
-                    long id = readID();
-                    int threadSeq = in.readInt();
-                    bytesLeft -= identifierSize + 4;
-                    ThreadObject to = getThreadObjectFromSequence(threadSeq);
-                    StackTrace st = getStackTraceFromSerial(to.stackSeq);
-                    snapshot.addRoot(new Root(id, to.threadId,
-                                              Root.NATIVE_STACK, "", st));
-                    break;
-                }
-                case HPROF_GC_ROOT_STICKY_CLASS: {
-                    long id = readID();
-                    bytesLeft -= identifierSize;
-                    snapshot.addRoot(new Root(id, 0, Root.SYSTEM_CLASS, ""));
-                    break;
-                }
-                case HPROF_GC_ROOT_THREAD_BLOCK: {
-                    long id = readID();
-                    int threadSeq = in.readInt();
-                    bytesLeft -= identifierSize + 4;
-                    ThreadObject to = getThreadObjectFromSequence(threadSeq);
-                    StackTrace st = getStackTraceFromSerial(to.stackSeq);
-                    snapshot.addRoot(new Root(id, to.threadId,
-                                     Root.THREAD_BLOCK, "", st));
-                    break;
-                }
-                case HPROF_GC_ROOT_MONITOR_USED: {
-                    long id = readID();
-                    bytesLeft -= identifierSize;
-                    snapshot.addRoot(new Root(id, 0, Root.BUSY_MONITOR, ""));
-                    break;
-                }
-                case HPROF_GC_CLASS_DUMP: {
-                    int bytesRead = readClass();
-                    bytesLeft -= bytesRead;
-                    break;
-                }
-                case HPROF_GC_INSTANCE_DUMP: {
-                    int bytesRead = readInstance();
-                    bytesLeft -= bytesRead;
-                    break;
-                }
-                case HPROF_GC_OBJ_ARRAY_DUMP: {
-                    int bytesRead = readArray(false);
-                    bytesLeft -= bytesRead;
-                    break;
-                }
-                case HPROF_GC_PRIM_ARRAY_DUMP: {
-                    int bytesRead = readArray(true);
-                    bytesLeft -= bytesRead;
-                    break;
-                }
-                default: {
-                    throw new IOException("Unrecognized heap dump sub-record type:  " + type);
-                }
-            }
-        }
-        if (bytesLeft != 0) {
-            warn("Error reading heap dump or heap dump segment:  Byte count is " + bytesLeft + " instead of 0");
-            skipBytes(bytesLeft);
-        }
-        if (debugLevel > 0) {
-            System.out.println("    Finished heap sub-records.");
-        }
-    }
-
-    private long readID() throws IOException {
-        return (identifierSize == 4)?
-            (Snapshot.SMALL_ID_MASK & (long)in.readInt()) : in.readLong();
-    }
-
-    //
-    // Read a java value.  If result is non-null, it's expected to be an
-    // array of one element.  We use it to fake multiple return values.
-    // @returns the number of bytes read
-    //
-    private int readValue(JavaThing[] resultArr) throws IOException {
-        byte type = in.readByte();
-        return 1 + readValueForType(type, resultArr);
-    }
-
-    private int readValueForType(byte type, JavaThing[] resultArr)
-            throws IOException {
-        if (version >= VERSION_JDK12BETA4) {
-            type = signatureFromTypeId(type);
-        }
-        return readValueForTypeSignature(type, resultArr);
-    }
-
-    private int readValueForTypeSignature(byte type, JavaThing[] resultArr)
-            throws IOException {
-        switch (type) {
-            case '[':
-            case 'L': {
-                long id = readID();
-                if (resultArr != null) {
-                    resultArr[0] = new JavaObjectRef(id);
-                }
-                return identifierSize;
-            }
-            case 'Z': {
-                int b = in.readByte();
-                if (b != 0 && b != 1) {
-                    warn("Illegal boolean value read");
-                }
-                if (resultArr != null) {
-                    resultArr[0] = new JavaBoolean(b != 0);
-                }
-                return 1;
-            }
-            case 'B': {
-                byte b = in.readByte();
-                if (resultArr != null) {
-                    resultArr[0] = new JavaByte(b);
-                }
-                return 1;
-            }
-            case 'S': {
-                short s = in.readShort();
-                if (resultArr != null) {
-                    resultArr[0] = new JavaShort(s);
-                }
-                return 2;
-            }
-            case 'C': {
-                char ch = in.readChar();
-                if (resultArr != null) {
-                    resultArr[0] = new JavaChar(ch);
-                }
-                return 2;
-            }
-            case 'I': {
-                int val = in.readInt();
-                if (resultArr != null) {
-                    resultArr[0] = new JavaInt(val);
-                }
-                return 4;
-            }
-            case 'J': {
-                long val = in.readLong();
-                if (resultArr != null) {
-                    resultArr[0] = new JavaLong(val);
-                }
-                return 8;
-            }
-            case 'F': {
-                float val = in.readFloat();
-                if (resultArr != null) {
-                    resultArr[0] = new JavaFloat(val);
-                }
-                return 4;
-            }
-            case 'D': {
-                double val = in.readDouble();
-                if (resultArr != null) {
-                    resultArr[0] = new JavaDouble(val);
-                }
-                return 8;
-            }
-            default: {
-                throw new IOException("Bad value signature:  " + type);
-            }
-        }
-    }
-
-    private ThreadObject getThreadObjectFromSequence(int threadSeq)
-            throws IOException {
-        ThreadObject to = threadObjects.get(new Integer(threadSeq));
-        if (to == null) {
-            throw new IOException("Thread " + threadSeq +
-                                  " not found for JNI local ref");
-        }
-        return to;
-    }
-
-    private String getNameFromID(long id) throws IOException {
-        return getNameFromID(new Long(id));
-    }
-
-    private String getNameFromID(Long id) throws IOException {
-        if (id.longValue() == 0L) {
-            return "";
-        }
-        String result = names.get(id);
-        if (result == null) {
-            warn("Name not found at " + toHex(id.longValue()));
-            return "unresolved name " + toHex(id.longValue());
-        }
-        return result;
-    }
-
-    private StackTrace getStackTraceFromSerial(int ser) throws IOException {
-        if (stackTraces == null) {
-            return null;
-        }
-        StackTrace result = stackTraces.get(new Integer(ser));
-        if (result == null) {
-            warn("Stack trace not found for serial # " + ser);
-        }
-        return result;
-    }
-
-    //
-    // Handle a HPROF_GC_CLASS_DUMP
-    // Return number of bytes read
-    //
-    private int readClass() throws IOException {
-        long id = readID();
-        StackTrace stackTrace = getStackTraceFromSerial(in.readInt());
-        long superId = readID();
-        long classLoaderId = readID();
-        long signersId = readID();
-        long protDomainId = readID();
-        long reserved1 = readID();
-        long reserved2 = readID();
-        int instanceSize = in.readInt();
-        int bytesRead = 7 * identifierSize + 8;
-
-        int numConstPoolEntries = in.readUnsignedShort();
-        bytesRead += 2;
-        for (int i = 0; i < numConstPoolEntries; i++) {
-            int index = in.readUnsignedShort(); // unused
-            bytesRead += 2;
-            bytesRead += readValue(null);       // We ignore the values
-        }
-
-        int numStatics = in.readUnsignedShort();
-        bytesRead += 2;
-        JavaThing[] valueBin = new JavaThing[1];
-        JavaStatic[] statics = new JavaStatic[numStatics];
-        for (int i = 0; i < numStatics; i++) {
-            long nameId = readID();
-            bytesRead += identifierSize;
-            byte type = in.readByte();
-            bytesRead++;
-            bytesRead += readValueForType(type, valueBin);
-            String fieldName = getNameFromID(nameId);
-            if (version >= VERSION_JDK12BETA4) {
-                type = signatureFromTypeId(type);
-            }
-            String signature = "" + ((char) type);
-            JavaField f = new JavaField(fieldName, signature);
-            statics[i] = new JavaStatic(f, valueBin[0]);
-        }
-
-        int numFields = in.readUnsignedShort();
-        bytesRead += 2;
-        JavaField[] fields = new JavaField[numFields];
-        for (int i = 0; i < numFields; i++) {
-            long nameId = readID();
-            bytesRead += identifierSize;
-            byte type = in.readByte();
-            bytesRead++;
-            String fieldName = getNameFromID(nameId);
-            if (version >= VERSION_JDK12BETA4) {
-                type = signatureFromTypeId(type);
-            }
-            String signature = "" + ((char) type);
-            fields[i] = new JavaField(fieldName, signature);
-        }
-        String name = classNameFromObjectID.get(new Long(id));
-        if (name == null) {
-            warn("Class name not found for " + toHex(id));
-            name = "unknown-name@" + toHex(id);
-        }
-        JavaClass c = new JavaClass(id, name, superId, classLoaderId, signersId,
-                                    protDomainId, fields, statics,
-                                    instanceSize);
-        snapshot.addClass(id, c);
-        snapshot.setSiteTrace(c, stackTrace);
-
-        return bytesRead;
-    }
-
-    private String toHex(long addr) {
-        return com.sun.tools.hat.internal.util.Misc.toHex(addr);
-    }
-
-    //
-    // Handle a HPROF_GC_INSTANCE_DUMP
-    // Return number of bytes read
-    //
-    private int readInstance() throws IOException {
-        long start = in.position();
-        long id = readID();
-        StackTrace stackTrace = getStackTraceFromSerial(in.readInt());
-        long classID = readID();
-        int bytesFollowing = in.readInt();
-        int bytesRead = (2 * identifierSize) + 8 + bytesFollowing;
-        JavaObject jobj = new JavaObject(classID, start);
-        skipBytes(bytesFollowing);
-        snapshot.addHeapObject(id, jobj);
-        snapshot.setSiteTrace(jobj, stackTrace);
-        return bytesRead;
-    }
-
-    //
-    // Handle a HPROF_GC_OBJ_ARRAY_DUMP or HPROF_GC_PRIM_ARRAY_DUMP
-    // Return number of bytes read
-    //
-    private int readArray(boolean isPrimitive) throws IOException {
-        long start = in.position();
-        long id = readID();
-        StackTrace stackTrace = getStackTraceFromSerial(in.readInt());
-        int num = in.readInt();
-        int bytesRead = identifierSize + 8;
-        long elementClassID;
-        if (isPrimitive) {
-            elementClassID = in.readByte();
-            bytesRead++;
-        } else {
-            elementClassID = readID();
-            bytesRead += identifierSize;
-        }
-
-        // Check for primitive arrays:
-        byte primitiveSignature = 0x00;
-        int elSize = 0;
-        if (isPrimitive || version < VERSION_JDK12BETA4) {
-            switch ((int)elementClassID) {
-                case T_BOOLEAN: {
-                    primitiveSignature = (byte) 'Z';
-                    elSize = 1;
-                    break;
-                }
-                case T_CHAR: {
-                    primitiveSignature = (byte) 'C';
-                    elSize = 2;
-                    break;
-                }
-                case T_FLOAT: {
-                    primitiveSignature = (byte) 'F';
-                    elSize = 4;
-                    break;
-                }
-                case T_DOUBLE: {
-                    primitiveSignature = (byte) 'D';
-                    elSize = 8;
-                    break;
-                }
-                case T_BYTE: {
-                    primitiveSignature = (byte) 'B';
-                    elSize = 1;
-                    break;
-                }
-                case T_SHORT: {
-                    primitiveSignature = (byte) 'S';
-                    elSize = 2;
-                    break;
-                }
-                case T_INT: {
-                    primitiveSignature = (byte) 'I';
-                    elSize = 4;
-                    break;
-                }
-                case T_LONG: {
-                    primitiveSignature = (byte) 'J';
-                    elSize = 8;
-                    break;
-                }
-            }
-            if (version >= VERSION_JDK12BETA4 && primitiveSignature == 0x00) {
-                throw new IOException("Unrecognized typecode:  "
-                                        + elementClassID);
-            }
-        }
-        if (primitiveSignature != 0x00) {
-            int size = elSize * num;
-            bytesRead += size;
-            JavaValueArray va = new JavaValueArray(primitiveSignature, start);
-            skipBytes(size);
-            snapshot.addHeapObject(id, va);
-            snapshot.setSiteTrace(va, stackTrace);
-        } else {
-            int sz = num * identifierSize;
-            bytesRead += sz;
-            JavaObjectArray arr = new JavaObjectArray(elementClassID, start);
-            skipBytes(sz);
-            snapshot.addHeapObject(id, arr);
-            snapshot.setSiteTrace(arr, stackTrace);
-        }
-        return bytesRead;
-    }
-
-    private byte signatureFromTypeId(byte typeId) throws IOException {
-        switch (typeId) {
-            case T_CLASS: {
-                return (byte) 'L';
-            }
-            case T_BOOLEAN: {
-                return (byte) 'Z';
-            }
-            case T_CHAR: {
-                return (byte) 'C';
-            }
-            case T_FLOAT: {
-                return (byte) 'F';
-            }
-            case T_DOUBLE: {
-                return (byte) 'D';
-            }
-            case T_BYTE: {
-                return (byte) 'B';
-            }
-            case T_SHORT: {
-                return (byte) 'S';
-            }
-            case T_INT: {
-                return (byte) 'I';
-            }
-            case T_LONG: {
-                return (byte) 'J';
-            }
-            default: {
-                throw new IOException("Invalid type id of " + typeId);
-            }
-        }
-    }
-
-    private void handleEOF(EOFException exp, Snapshot snapshot) {
-        if (debugLevel > 0) {
-            exp.printStackTrace();
-        }
-        warn("Unexpected EOF. Will miss information...");
-        // we have EOF, we have to tolerate missing references
-        snapshot.setUnresolvedObjectsOK(true);
-    }
-
-    private void warn(String msg) {
-        System.out.println("WARNING: " + msg);
-    }
-
-    //
-    // A trivial data-holder class for HPROF_GC_ROOT_THREAD_OBJ.
-    //
-    private class ThreadObject {
-
-        long threadId;
-        int stackSeq;
-
-        ThreadObject(long threadId, int stackSeq) {
-            this.threadId = threadId;
-            this.stackSeq = stackSeq;
-        }
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/tools/hat/internal/parser/MappedReadBuffer.java b/ojluni/src/main/java/com/sun/tools/hat/internal/parser/MappedReadBuffer.java
deleted file mode 100755
index 3bf98d7..0000000
--- a/ojluni/src/main/java/com/sun/tools/hat/internal/parser/MappedReadBuffer.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-
-/*
- * The Original Code is HAT. The Initial Developer of the
- * Original Code is Bill Foote, with contributions from others
- * at JavaSoft/Sun.
- */
-
-package com.sun.tools.hat.internal.parser;
-
-import java.io.IOException;
-import java.io.RandomAccessFile;
-import java.nio.MappedByteBuffer;
-import java.nio.channels.FileChannel;
-
-/**
- * Implementation of ReadBuffer using mapped file buffer
- *
- * @author A. Sundararajan
- */
-class MappedReadBuffer implements ReadBuffer {
-    private MappedByteBuffer buf;
-
-    MappedReadBuffer(MappedByteBuffer buf) {
-        this.buf = buf;
-    }
-
-    // factory method to create correct ReadBuffer for a given file
-    static ReadBuffer create(RandomAccessFile file) throws IOException {
-        FileChannel ch = file.getChannel();
-        long size = ch.size();
-        // if file size is more than 2 GB and when file mapping is
-        // configured (default), use mapped file reader
-        if (canUseFileMap() && (size <= Integer.MAX_VALUE)) {
-            MappedByteBuffer buf;
-            try {
-                buf = ch.map(FileChannel.MapMode.READ_ONLY, 0, size);
-                ch.close();
-                return new MappedReadBuffer(buf);
-            } catch (IOException exp) {
-                exp.printStackTrace();
-                System.err.println("File mapping failed, will use direct read");
-                // fall through
-            }
-        } // else fall through
-        return new FileReadBuffer(file);
-    }
-
-    private static boolean canUseFileMap() {
-        // set jhat.disableFileMap to any value other than "false"
-        // to disable file mapping
-        String prop = System.getProperty("jhat.disableFileMap");
-        return prop == null || prop.equals("false");
-    }
-
-    private void seek(long pos) throws IOException {
-        assert pos <= Integer.MAX_VALUE :  "position overflow";
-        buf.position((int)pos);
-    }
-
-    public synchronized void get(long pos, byte[] res) throws IOException {
-        seek(pos);
-        buf.get(res);
-    }
-
-    public synchronized char getChar(long pos) throws IOException {
-        seek(pos);
-        return buf.getChar();
-    }
-
-    public synchronized byte getByte(long pos) throws IOException {
-        seek(pos);
-        return buf.get();
-    }
-
-    public synchronized short getShort(long pos) throws IOException {
-        seek(pos);
-        return buf.getShort();
-    }
-
-    public synchronized int getInt(long pos) throws IOException {
-        seek(pos);
-        return buf.getInt();
-    }
-
-    public synchronized long getLong(long pos) throws IOException {
-        seek(pos);
-        return buf.getLong();
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/hat/internal/parser/PositionDataInputStream.java b/ojluni/src/main/java/com/sun/tools/hat/internal/parser/PositionDataInputStream.java
deleted file mode 100755
index 46de0ce..0000000
--- a/ojluni/src/main/java/com/sun/tools/hat/internal/parser/PositionDataInputStream.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-
-/*
- * The Original Code is HAT. The Initial Developer of the
- * Original Code is Bill Foote, with contributions from others
- * at JavaSoft/Sun.
- */
-
-package com.sun.tools.hat.internal.parser;
-
-import java.io.DataInputStream;
-import java.io.InputStream;
-
-/**
- * A DataInputStream that keeps track of total bytes read
- * (in effect 'position' in stream) so far.
- *
- */
-public class PositionDataInputStream extends DataInputStream {
-    public PositionDataInputStream(InputStream in) {
-        super(in instanceof PositionInputStream?
-              in : new PositionInputStream(in));
-    }
-
-    public boolean markSupported() {
-        return false;
-    }
-
-    public void mark(int readLimit) {
-        throw new UnsupportedOperationException("mark");
-    }
-
-    public void reset() {
-        throw new UnsupportedOperationException("reset");
-    }
-
-    public long position() {
-        return ((PositionInputStream)in).position();
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/hat/internal/parser/PositionInputStream.java b/ojluni/src/main/java/com/sun/tools/hat/internal/parser/PositionInputStream.java
deleted file mode 100755
index 54cd524..0000000
--- a/ojluni/src/main/java/com/sun/tools/hat/internal/parser/PositionInputStream.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-
-/*
- * The Original Code is HAT. The Initial Developer of the
- * Original Code is Bill Foote, with contributions from others
- * at JavaSoft/Sun.
- */
-
-package com.sun.tools.hat.internal.parser;
-
-import java.io.FilterInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-
-/**
- * InputStream that keeps track of total bytes read (in effect
- * 'position' in stream) from the input stream.
- *
- */
-public class PositionInputStream extends FilterInputStream {
-    private long position = 0L;
-
-    public PositionInputStream(InputStream in) {
-        super(in);
-    }
-
-    public int read() throws IOException {
-        int res = super.read();
-        if (res != -1) position++;
-        return res;
-    }
-
-    public int read(byte[] b, int off, int len) throws IOException {
-        int res = super.read(b, off, len);
-        if (res != -1) position += res;
-        return res;
-    }
-
-    public long skip(long n) throws IOException {
-        long res = super.skip(n);
-        position += res;
-        return res;
-    }
-
-    public boolean markSupported() {
-        return false;
-    }
-
-    public void mark(int readLimit) {
-        throw new UnsupportedOperationException("mark");
-    }
-
-    public void reset() {
-        throw new UnsupportedOperationException("reset");
-    }
-
-    public long position() {
-        return position;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/hat/internal/parser/ReadBuffer.java b/ojluni/src/main/java/com/sun/tools/hat/internal/parser/ReadBuffer.java
deleted file mode 100755
index 9376ec3..0000000
--- a/ojluni/src/main/java/com/sun/tools/hat/internal/parser/ReadBuffer.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-
-/*
- * The Original Code is HAT. The Initial Developer of the
- * Original Code is Bill Foote, with contributions from others
- * at JavaSoft/Sun.
- */
-
-package com.sun.tools.hat.internal.parser;
-
-import java.io.IOException;
-
-/**
- * Positionable read only buffer
- *
- * @author A. Sundararajan
- */
-public interface ReadBuffer {
-    // read methods - only byte array and int primitive types.
-    // read position has to be specified always.
-    public void  get(long pos, byte[] buf) throws IOException;
-    public char  getChar(long pos) throws IOException;
-    public byte  getByte(long pos) throws IOException;
-    public short getShort(long pos) throws IOException;
-    public int   getInt(long pos) throws IOException;
-    public long  getLong(long pos) throws IOException;
-}
diff --git a/ojluni/src/main/java/com/sun/tools/hat/internal/parser/Reader.java b/ojluni/src/main/java/com/sun/tools/hat/internal/parser/Reader.java
deleted file mode 100755
index d850663..0000000
--- a/ojluni/src/main/java/com/sun/tools/hat/internal/parser/Reader.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-
-/*
- * The Original Code is HAT. The Initial Developer of the
- * Original Code is Bill Foote, with contributions from others
- * at JavaSoft/Sun.
- */
-
-package com.sun.tools.hat.internal.parser;
-
-import java.io.*;
-import com.sun.tools.hat.internal.model.*;
-
-/**
- * Abstract base class for reading object dump files.  A reader need not be
- * thread-safe.
- *
- * @author      Bill Foote
- */
-
-
-public abstract class Reader {
-    protected PositionDataInputStream in;
-
-    protected Reader(PositionDataInputStream in) {
-        this.in = in;
-    }
-
-    /**
-     * Read a snapshot from a data input stream.  It is assumed that the magic
-     * number has already been read.
-     */
-    abstract public Snapshot read() throws IOException;
-
-    /**
-     * Read a snapshot from a file.
-     *
-     * @param heapFile The name of a file containing a heap dump
-     * @param callStack If true, read the call stack of allocaation sites
-     */
-    public static Snapshot readFile(String heapFile, boolean callStack,
-                                    int debugLevel)
-            throws IOException {
-        int dumpNumber = 1;
-        int pos = heapFile.lastIndexOf('#');
-        if (pos > -1) {
-            String num = heapFile.substring(pos+1, heapFile.length());
-            try {
-                dumpNumber = Integer.parseInt(num, 10);
-            } catch (java.lang.NumberFormatException ex) {
-                String msg = "In file name \"" + heapFile
-                             + "\", a dump number was "
-                             + "expected after the :, but \""
-                             + num + "\" was found instead.";
-                System.err.println(msg);
-                throw new IOException(msg);
-            }
-            heapFile = heapFile.substring(0, pos);
-        }
-        PositionDataInputStream in = new PositionDataInputStream(
-            new BufferedInputStream(new FileInputStream(heapFile)));
-        try {
-            int i = in.readInt();
-            if (i == HprofReader.MAGIC_NUMBER) {
-                Reader r
-                    = new HprofReader(heapFile, in, dumpNumber,
-                                      callStack, debugLevel);
-                return r.read();
-            } else {
-                throw new IOException("Unrecognized magic number: " + i);
-            }
-        } finally {
-            in.close();
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/hat/internal/server/AllClassesQuery.java b/ojluni/src/main/java/com/sun/tools/hat/internal/server/AllClassesQuery.java
deleted file mode 100755
index d44a8fc..0000000
--- a/ojluni/src/main/java/com/sun/tools/hat/internal/server/AllClassesQuery.java
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-
-/*
- * The Original Code is HAT. The Initial Developer of the
- * Original Code is Bill Foote, with contributions from others
- * at JavaSoft/Sun.
- */
-
-package com.sun.tools.hat.internal.server;
-
-import com.sun.tools.hat.internal.model.*;
-import java.util.Iterator;
-
-/**
- *
- * @author      Bill Foote
- */
-
-
-class AllClassesQuery extends QueryHandler {
-
-    boolean excludePlatform;
-    boolean oqlSupported;
-
-    public AllClassesQuery(boolean excludePlatform, boolean oqlSupported) {
-        this.excludePlatform = excludePlatform;
-        this.oqlSupported = oqlSupported;
-    }
-
-    public void run() {
-        if (excludePlatform) {
-            startHtml("All Classes (excluding platform)");
-        } else {
-            startHtml("All Classes (including platform)");
-        }
-
-        Iterator classes = snapshot.getClasses();
-        String lastPackage = null;
-        while (classes.hasNext()) {
-            JavaClass clazz = (JavaClass) classes.next();
-            if (excludePlatform && PlatformClasses.isPlatformClass(clazz)) {
-                // skip this..
-                continue;
-            }
-            String name = clazz.getName();
-            int pos = name.lastIndexOf(".");
-            String pkg;
-            if (name.startsWith("[")) {         // Only in ancient heap dumps
-                pkg = "<Arrays>";
-            } else if (pos == -1) {
-                pkg = "<Default Package>";
-            } else {
-                pkg = name.substring(0, pos);
-            }
-            if (!pkg.equals(lastPackage)) {
-                out.print("<h2>Package ");
-                print(pkg);
-                out.println("</h2>");
-            }
-            lastPackage = pkg;
-            printClass(clazz);
-            if (clazz.getId() != -1) {
-                out.print(" [" + clazz.getIdString() + "]");
-            }
-            out.println("<br>");
-        }
-
-        out.println("<h2>Other Queries</h2>");
-        out.println("<ul>");
-
-        out.println("<li>");
-        printAnchorStart();
-        if (excludePlatform) {
-            out.print("allClassesWithPlatform/\">");
-            print("All classes including platform");
-        } else {
-            out.print("\">");
-            print("All classes excluding platform");
-        }
-        out.println("</a>");
-
-        out.println("<li>");
-        printAnchorStart();
-        out.print("showRoots/\">");
-        print("Show all members of the rootset");
-        out.println("</a>");
-
-        out.println("<li>");
-        printAnchorStart();
-        out.print("showInstanceCounts/includePlatform/\">");
-        print("Show instance counts for all classes (including platform)");
-        out.println("</a>");
-
-        out.println("<li>");
-        printAnchorStart();
-        out.print("showInstanceCounts/\">");
-        print("Show instance counts for all classes (excluding platform)");
-        out.println("</a>");
-
-        out.println("<li>");
-        printAnchorStart();
-        out.print("histo/\">");
-        print("Show heap histogram");
-        out.println("</a>");
-
-        out.println("<li>");
-        printAnchorStart();
-        out.print("finalizerSummary/\">");
-        print("Show finalizer summary");
-        out.println("</a>");
-
-        if (oqlSupported) {
-            out.println("<li>");
-            printAnchorStart();
-            out.print("oql/\">");
-            print("Execute Object Query Language (OQL) query");
-            out.println("</a>");
-        }
-
-        out.println("</ul>");
-
-        endHtml();
-    }
-
-
-}
diff --git a/ojluni/src/main/java/com/sun/tools/hat/internal/server/AllRootsQuery.java b/ojluni/src/main/java/com/sun/tools/hat/internal/server/AllRootsQuery.java
deleted file mode 100755
index d1384b0..0000000
--- a/ojluni/src/main/java/com/sun/tools/hat/internal/server/AllRootsQuery.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-
-/*
- * The Original Code is HAT. The Initial Developer of the
- * Original Code is Bill Foote, with contributions from others
- * at JavaSoft/Sun.
- */
-
-package com.sun.tools.hat.internal.server;
-
-import java.util.Vector;
-
-import com.sun.tools.hat.internal.model.*;
-import com.sun.tools.hat.internal.util.ArraySorter;
-import com.sun.tools.hat.internal.util.Comparer;
-
-/**
- *
- * @author      Bill Foote
- */
-
-
-class AllRootsQuery extends QueryHandler {
-
-    public AllRootsQuery() {
-    }
-
-    public void run() {
-        startHtml("All Members of the Rootset");
-
-        Root[] roots = snapshot.getRootsArray();
-        ArraySorter.sort(roots, new Comparer() {
-            public int compare(Object lhs, Object rhs) {
-                Root left = (Root) lhs;
-                Root right = (Root) rhs;
-                int d = left.getType() - right.getType();
-                if (d != 0) {
-                    return -d;  // More interesting values are *higher*
-                }
-                return left.getDescription().compareTo(right.getDescription());
-            }
-        });
-
-        int lastType = Root.INVALID_TYPE;
-
-        for (int i= 0; i < roots.length; i++) {
-            Root root = roots[i];
-
-            if (root.getType() != lastType) {
-                lastType = root.getType();
-                out.print("<h2>");
-                print(root.getTypeName() + " References");
-                out.println("</h2>");
-            }
-
-            printRoot(root);
-            if (root.getReferer() != null) {
-                out.print("<small> (from ");
-                printThingAnchorTag(root.getReferer().getId());
-                print(root.getReferer().toString());
-                out.print(")</a></small>");
-            }
-            out.print(" :<br>");
-
-            JavaThing t = snapshot.findThing(root.getId());
-            if (t != null) {    // It should always be
-                print("--> ");
-                printThing(t);
-                out.println("<br>");
-            }
-        }
-
-        out.println("<h2>Other Queries</h2>");
-        out.println("<ul>");
-        out.println("<li>");
-        printAnchorStart();
-        out.print("\">");
-        print("Show All Classes");
-        out.println("</a>");
-        out.println("</ul>");
-
-        endHtml();
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/hat/internal/server/ClassQuery.java b/ojluni/src/main/java/com/sun/tools/hat/internal/server/ClassQuery.java
deleted file mode 100755
index 1d57823..0000000
--- a/ojluni/src/main/java/com/sun/tools/hat/internal/server/ClassQuery.java
+++ /dev/null
@@ -1,190 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-
-/*
- * The Original Code is HAT. The Initial Developer of the
- * Original Code is Bill Foote, with contributions from others
- * at JavaSoft/Sun.
- */
-
-package com.sun.tools.hat.internal.server;
-
-import com.sun.tools.hat.internal.model.*;
-import com.sun.tools.hat.internal.util.ArraySorter;
-import com.sun.tools.hat.internal.util.Comparer;
-
-import java.util.Enumeration;
-
-/**
- *
- * @author      Bill Foote
- */
-
-
-class ClassQuery extends QueryHandler {
-
-
-    public ClassQuery() {
-    }
-
-    public void run() {
-        startHtml("Class " + query);
-        JavaClass clazz = snapshot.findClass(query);
-        if (clazz == null) {
-            error("class not found: " + query);
-        } else {
-            printFullClass(clazz);
-        }
-        endHtml();
-    }
-
-    protected void printFullClass(JavaClass clazz) {
-        out.print("<h1>");
-        print(clazz.toString());
-        out.println("</h1>");
-
-        out.println("<h2>Superclass:</h2>");
-        printClass(clazz.getSuperclass());
-
-        out.println("<h2>Loader Details</h2>");
-        out.println("<h3>ClassLoader:</h3>");
-        printThing(clazz.getLoader());
-
-        out.println("<h3>Signers:</h3>");
-        printThing(clazz.getSigners());
-
-        out.println("<h3>Protection Domain:</h3>");
-        printThing(clazz.getProtectionDomain());
-
-        out.println("<h2>Subclasses:</h2>");
-        JavaClass[] sc = clazz.getSubclasses();
-        for (int i = 0; i < sc.length; i++) {
-            out.print("    ");
-            printClass(sc[i]);
-            out.println("<br>");
-        }
-
-        out.println("<h2>Instance Data Members:</h2>");
-        JavaField[] ff = clazz.getFields().clone();
-        ArraySorter.sort(ff, new Comparer() {
-            public int compare(Object lhs, Object rhs) {
-                JavaField left = (JavaField) lhs;
-                JavaField right = (JavaField) rhs;
-                return left.getName().compareTo(right.getName());
-            }
-        });
-        for (int i = 0; i < ff.length; i++) {
-            out.print("    ");
-            printField(ff[i]);
-            out.println("<br>");
-        }
-
-        out.println("<h2>Static Data Members:</h2>");
-        JavaStatic[] ss = clazz.getStatics();
-        for (int i = 0; i < ss.length; i++) {
-            printStatic(ss[i]);
-            out.println("<br>");
-        }
-
-        out.println("<h2>Instances</h2>");
-
-        printAnchorStart();
-        out.print("instances/" + encodeForURL(clazz));
-        out.print("\">");
-        out.println("Exclude subclasses</a><br>");
-
-        printAnchorStart();
-        out.print("allInstances/" + encodeForURL(clazz));
-        out.print("\">");
-        out.println("Include subclasses</a><br>");
-
-
-        if (snapshot.getHasNewSet()) {
-            out.println("<h2>New Instances</h2>");
-
-            printAnchorStart();
-            out.print("newInstances/" + encodeForURL(clazz));
-            out.print("\">");
-            out.println("Exclude subclasses</a><br>");
-
-            printAnchorStart();
-            out.print("allNewInstances/" + encodeForURL(clazz));
-            out.print("\">");
-            out.println("Include subclasses</a><br>");
-        }
-
-        out.println("<h2>References summary by Type</h2>");
-        printAnchorStart();
-        out.print("refsByType/" + encodeForURL(clazz));
-        out.print("\">");
-        out.println("References summary by type</a>");
-
-        printReferencesTo(clazz);
-    }
-
-    protected void printReferencesTo(JavaHeapObject obj) {
-        if (obj.getId() == -1) {
-            return;
-        }
-        out.println("<h2>References to this object:</h2>");
-        out.flush();
-        Enumeration referers = obj.getReferers();
-        while (referers.hasMoreElements()) {
-            JavaHeapObject ref = (JavaHeapObject) referers.nextElement();
-            printThing(ref);
-            print (" : " + ref.describeReferenceTo(obj, snapshot));
-            // If there are more than one references, this only gets the
-            // first one.
-            out.println("<br>");
-        }
-
-        out.println("<h2>Other Queries</h2>");
-        out.println("Reference Chains from Rootset");
-        long id = obj.getId();
-
-        out.print("<ul><li>");
-        printAnchorStart();
-        out.print("roots/");
-        printHex(id);
-        out.print("\">");
-        out.println("Exclude weak refs</a>");
-
-        out.print("<li>");
-        printAnchorStart();
-        out.print("allRoots/");
-        printHex(id);
-        out.print("\">");
-        out.println("Include weak refs</a></ul>");
-
-        printAnchorStart();
-        out.print("reachableFrom/");
-        printHex(id);
-        out.print("\">");
-        out.println("Objects reachable from here</a><br>");
-    }
-
-
-}
diff --git a/ojluni/src/main/java/com/sun/tools/hat/internal/server/FinalizerObjectsQuery.java b/ojluni/src/main/java/com/sun/tools/hat/internal/server/FinalizerObjectsQuery.java
deleted file mode 100755
index 91f7017..0000000
--- a/ojluni/src/main/java/com/sun/tools/hat/internal/server/FinalizerObjectsQuery.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-
-/*
- * The Original Code is HAT. The Initial Developer of the
- * Original Code is Bill Foote, with contributions from others
- * at JavaSoft/Sun.
- */
-
-package com.sun.tools.hat.internal.server;
-
-import com.sun.tools.hat.internal.model.*;
-import java.util.*;
-
-public class FinalizerObjectsQuery extends QueryHandler {
-    public void run() {
-        Enumeration objs = snapshot.getFinalizerObjects();
-        startHtml("Objects pending finalization");
-
-        out.println("<a href='/finalizerSummary/'>Finalizer summary</a>");
-
-        out.println("<h1>Objects pending finalization</h1>");
-
-        while (objs.hasMoreElements()) {
-            printThing((JavaHeapObject)objs.nextElement());
-            out.println("<br>");
-        }
-
-        endHtml();
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/hat/internal/server/FinalizerSummaryQuery.java b/ojluni/src/main/java/com/sun/tools/hat/internal/server/FinalizerSummaryQuery.java
deleted file mode 100755
index 916cda7..0000000
--- a/ojluni/src/main/java/com/sun/tools/hat/internal/server/FinalizerSummaryQuery.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-
-/*
- * The Original Code is HAT. The Initial Developer of the
- * Original Code is Bill Foote, with contributions from others
- * at JavaSoft/Sun.
- */
-
-package com.sun.tools.hat.internal.server;
-
-import com.sun.tools.hat.internal.model.*;
-import java.util.*;
-
-public class FinalizerSummaryQuery extends QueryHandler {
-    public void run() {
-        Enumeration objs = snapshot.getFinalizerObjects();
-        startHtml("Finalizer Summary");
-
-        out.println("<p align='center'>");
-        out.println("<b><a href='/'>All Classes (excluding platform)</a></b>");
-        out.println("</p>");
-
-        printFinalizerSummary(objs);
-        endHtml();
-    }
-
-    private static class HistogramElement {
-        public HistogramElement(JavaClass clazz) {
-            this.clazz = clazz;
-        }
-
-        public void updateCount() {
-            this.count++;
-        }
-
-        public int compare(HistogramElement other) {
-            long diff = other.count - count;
-            return (diff == 0L)? 0 : ((diff > 0L)? +1 : -1);
-        }
-
-        public JavaClass getClazz() {
-            return clazz;
-        }
-
-        public long getCount() {
-            return count;
-        }
-
-        private JavaClass clazz;
-        private long count;
-    }
-
-    private void printFinalizerSummary(Enumeration objs) {
-        int count = 0;
-        Map<JavaClass, HistogramElement> map = new HashMap<JavaClass, HistogramElement>();
-
-        while (objs.hasMoreElements()) {
-            JavaHeapObject obj = (JavaHeapObject) objs.nextElement();
-            count++;
-            JavaClass clazz = obj.getClazz();
-            if (! map.containsKey(clazz)) {
-                map.put(clazz, new HistogramElement(clazz));
-            }
-            HistogramElement element = map.get(clazz);
-            element.updateCount();
-        }
-
-        out.println("<p align='center'>");
-        out.println("<b>");
-        out.println("Total ");
-        if (count != 0) {
-            out.print("<a href='/finalizerObjects/'>instances</a>");
-        } else {
-            out.print("instances");
-        }
-        out.println(" pending finalization: ");
-        out.print(count);
-        out.println("</b></p><hr>");
-
-        if (count == 0) {
-            return;
-        }
-
-        // calculate and print histogram
-        HistogramElement[] elements = new HistogramElement[map.size()];
-        map.values().toArray(elements);
-        Arrays.sort(elements, new Comparator<HistogramElement>() {
-                    public int compare(HistogramElement o1, HistogramElement o2) {
-                        return o1.compare(o2);
-                    }
-                });
-
-        out.println("<table border=1 align=center>");
-        out.println("<tr><th>Count</th><th>Class</th></tr>");
-        for (int j = 0; j < elements.length; j++) {
-            out.println("<tr><td>");
-            out.println(elements[j].getCount());
-            out.println("</td><td>");
-            printClass(elements[j].getClazz());
-            out.println("</td><tr>");
-        }
-        out.println("</table>");
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/hat/internal/server/HistogramQuery.java b/ojluni/src/main/java/com/sun/tools/hat/internal/server/HistogramQuery.java
deleted file mode 100755
index 58431de..0000000
--- a/ojluni/src/main/java/com/sun/tools/hat/internal/server/HistogramQuery.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-
-/*
- * The Original Code is HAT. The Initial Developer of the
- * Original Code is Bill Foote, with contributions from others
- * at JavaSoft/Sun.
- */
-
-package com.sun.tools.hat.internal.server;
-
-import com.sun.tools.hat.internal.model.JavaClass;
-import java.util.Arrays;
-import java.util.Comparator;
-
-/**
- * Prints histogram sortable by class name, count and size.
- *
- */
-public class HistogramQuery extends QueryHandler {
-    public void run() {
-        JavaClass[] classes = snapshot.getClassesArray();
-        Comparator<JavaClass> comparator;
-        if (query.equals("count")) {
-            comparator = new Comparator<JavaClass>() {
-                public int compare(JavaClass first, JavaClass second) {
-                    long diff = (second.getInstancesCount(false) -
-                             first.getInstancesCount(false));
-                    return (diff == 0)? 0: ((diff < 0)? -1 : + 1);
-                }
-            };
-        } else if (query.equals("class")) {
-            comparator = new Comparator<JavaClass>() {
-                public int compare(JavaClass first, JavaClass second) {
-                    return first.getName().compareTo(second.getName());
-                }
-            };
-        } else {
-            // default sort is by total size
-            comparator = new Comparator<JavaClass>() {
-                public int compare(JavaClass first, JavaClass second) {
-                    long diff = (second.getTotalInstanceSize() -
-                             first.getTotalInstanceSize());
-                    return (diff == 0)? 0: ((diff < 0)? -1 : + 1);
-                }
-            };
-        }
-        Arrays.sort(classes, comparator);
-
-        startHtml("Heap Histogram");
-
-        out.println("<p align='center'>");
-        out.println("<b><a href='/'>All Classes (excluding platform)</a></b>");
-        out.println("</p>");
-
-        out.println("<table align=center border=1>");
-        out.println("<tr><th><a href='/histo/class'>Class</a></th>");
-        out.println("<th><a href='/histo/count'>Instance Count</a></th>");
-        out.println("<th><a href='/histo/size'>Total Size</a></th></tr>");
-        for (int i = 0; i < classes.length; i++) {
-            JavaClass clazz = classes[i];
-            out.println("<tr><td>");
-            printClass(clazz);
-            out.println("</td>");
-            out.println("<td>");
-            out.println(clazz.getInstancesCount(false));
-            out.println("</td>");
-            out.println("<td>");
-            out.println(clazz.getTotalInstanceSize());
-            out.println("</td></tr>");
-        }
-        out.println("</table>");
-
-        endHtml();
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/hat/internal/server/HttpReader.java b/ojluni/src/main/java/com/sun/tools/hat/internal/server/HttpReader.java
deleted file mode 100755
index f86c8ca..0000000
--- a/ojluni/src/main/java/com/sun/tools/hat/internal/server/HttpReader.java
+++ /dev/null
@@ -1,224 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-
-/*
- * The Original Code is HAT. The Initial Developer of the
- * Original Code is Bill Foote, with contributions from others
- * at JavaSoft/Sun.
- */
-
-package com.sun.tools.hat.internal.server;
-
-/**
- * Reads a single HTTP query from a socket, and starts up a QueryHandler
- * to server it.
- *
- * @author      Bill Foote
- */
-
-
-import java.net.Socket;
-import java.net.ServerSocket;
-import java.net.InetAddress;
-
-import java.io.InputStream;
-import java.io.BufferedInputStream;
-import java.io.IOException;
-import java.io.Writer;
-import java.io.BufferedWriter;
-import java.io.PrintWriter;
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-import java.io.BufferedOutputStream;
-
-import com.sun.tools.hat.internal.model.Snapshot;
-import com.sun.tools.hat.internal.oql.OQLEngine;
-
-public class HttpReader implements Runnable {
-
-
-    private Socket socket;
-    private PrintWriter out;
-    private Snapshot snapshot;
-    private OQLEngine engine;
-
-    public HttpReader (Socket s, Snapshot snapshot, OQLEngine engine) {
-        this.socket = s;
-        this.snapshot = snapshot;
-        this.engine = engine;
-    }
-
-    public void run() {
-        InputStream in = null;
-        try {
-            in = new BufferedInputStream(socket.getInputStream());
-            out = new PrintWriter(new BufferedWriter(
-                            new OutputStreamWriter(
-                                socket.getOutputStream())));
-            out.println("HTTP/1.0 200 OK");
-            out.println("Cache-Control: no-cache");
-            out.println("Pragma: no-cache");
-            out.println();
-            if (in.read() != 'G' || in.read() != 'E'
-                    || in.read() != 'T' || in.read() != ' ') {
-                outputError("Protocol error");
-            }
-            int data;
-            StringBuffer queryBuf = new StringBuffer();
-            while ((data = in.read()) != -1 && data != ' ') {
-                char ch = (char) data;
-                queryBuf.append(ch);
-            }
-            String query = queryBuf.toString();
-            query = java.net.URLDecoder.decode(query, "UTF-8");
-            QueryHandler handler = null;
-            if (snapshot == null) {
-                outputError("The heap snapshot is still being read.");
-                return;
-            } else if (query.equals("/")) {
-                handler = new AllClassesQuery(true, engine != null);
-                handler.setUrlStart("");
-                handler.setQuery("");
-            } else if (query.startsWith("/oql/")) {
-                if (engine != null) {
-                    handler = new OQLQuery(engine);
-                    handler.setUrlStart("");
-                    handler.setQuery(query.substring(5));
-                }
-            } else if (query.startsWith("/oqlhelp/")) {
-                if (engine != null) {
-                    handler = new OQLHelp();
-                    handler.setUrlStart("");
-                    handler.setQuery("");
-                }
-            } else if (query.equals("/allClassesWithPlatform/")) {
-                handler = new AllClassesQuery(false, engine != null);
-                handler.setUrlStart("../");
-                handler.setQuery("");
-            } else if (query.equals("/showRoots/")) {
-                handler = new AllRootsQuery();
-                handler.setUrlStart("../");
-                handler.setQuery("");
-            } else if (query.equals("/showInstanceCounts/includePlatform/")) {
-                handler = new InstancesCountQuery(false);
-                handler.setUrlStart("../../");
-                handler.setQuery("");
-            } else if (query.equals("/showInstanceCounts/")) {
-                handler = new InstancesCountQuery(true);
-                handler.setUrlStart("../");
-                handler.setQuery("");
-            } else if (query.startsWith("/instances/")) {
-                handler = new InstancesQuery(false);
-                handler.setUrlStart("../");
-                handler.setQuery(query.substring(11));
-            }  else if (query.startsWith("/newInstances/")) {
-                handler = new InstancesQuery(false, true);
-                handler.setUrlStart("../");
-                handler.setQuery(query.substring(14));
-            }  else if (query.startsWith("/allInstances/")) {
-                handler = new InstancesQuery(true);
-                handler.setUrlStart("../");
-                handler.setQuery(query.substring(14));
-            }  else if (query.startsWith("/allNewInstances/")) {
-                handler = new InstancesQuery(true, true);
-                handler.setUrlStart("../");
-                handler.setQuery(query.substring(17));
-            } else if (query.startsWith("/object/")) {
-                handler = new ObjectQuery();
-                handler.setUrlStart("../");
-                handler.setQuery(query.substring(8));
-            } else if (query.startsWith("/class/")) {
-                handler = new ClassQuery();
-                handler.setUrlStart("../");
-                handler.setQuery(query.substring(7));
-            } else if (query.startsWith("/roots/")) {
-                handler = new RootsQuery(false);
-                handler.setUrlStart("../");
-                handler.setQuery(query.substring(7));
-            } else if (query.startsWith("/allRoots/")) {
-                handler = new RootsQuery(true);
-                handler.setUrlStart("../");
-                handler.setQuery(query.substring(10));
-            } else if (query.startsWith("/reachableFrom/")) {
-                handler = new ReachableQuery();
-                handler.setUrlStart("../");
-                handler.setQuery(query.substring(15));
-            } else if (query.startsWith("/rootStack/")) {
-                handler = new RootStackQuery();
-                handler.setUrlStart("../");
-                handler.setQuery(query.substring(11));
-            } else if (query.startsWith("/histo/")) {
-                handler = new HistogramQuery();
-                handler.setUrlStart("../");
-                handler.setQuery(query.substring(7));
-            } else if (query.startsWith("/refsByType/")) {
-                handler = new RefsByTypeQuery();
-                handler.setUrlStart("../");
-                handler.setQuery(query.substring(12));
-            } else if (query.startsWith("/finalizerSummary/")) {
-                handler = new FinalizerSummaryQuery();
-                handler.setUrlStart("../");
-                handler.setQuery("");
-            } else if (query.startsWith("/finalizerObjects/")) {
-                handler = new FinalizerObjectsQuery();
-                handler.setUrlStart("../");
-                handler.setQuery("");
-            }
-
-            if (handler != null) {
-                handler.setOutput(out);
-                handler.setSnapshot(snapshot);
-                handler.run();
-            } else {
-                outputError("Query '" + query + "' not implemented");
-            }
-        } catch (IOException ex) {
-            ex.printStackTrace();
-        } finally {
-            if (out != null) {
-                out.close();
-            }
-            try {
-                if (in != null) {
-                    in.close();
-                }
-            } catch (IOException ignored) {
-            }
-            try {
-                socket.close();
-            } catch (IOException ignored) {
-            }
-        }
-    }
-
-    private void outputError(String msg) {
-        out.println();
-        out.println("<html><body bgcolor=\"#ffffff\">");
-        out.println(msg);
-        out.println("</body></html>");
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/tools/hat/internal/server/InstancesCountQuery.java b/ojluni/src/main/java/com/sun/tools/hat/internal/server/InstancesCountQuery.java
deleted file mode 100755
index 724b549..0000000
--- a/ojluni/src/main/java/com/sun/tools/hat/internal/server/InstancesCountQuery.java
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-
-/*
- * The Original Code is HAT. The Initial Developer of the
- * Original Code is Bill Foote, with contributions from others
- * at JavaSoft/Sun.
- */
-
-package com.sun.tools.hat.internal.server;
-
-import com.sun.tools.hat.internal.model.*;
-import com.sun.tools.hat.internal.util.ArraySorter;
-import com.sun.tools.hat.internal.util.Comparer;
-import java.util.Enumeration;
-
-/**
- *
- * @author      Bill Foote
- */
-
-
-class InstancesCountQuery extends QueryHandler {
-
-
-    private boolean excludePlatform;
-
-    public InstancesCountQuery(boolean excludePlatform) {
-        this.excludePlatform = excludePlatform;
-    }
-
-    public void run() {
-        if (excludePlatform) {
-            startHtml("Instance Counts for All Classes (excluding platform)");
-        } else {
-            startHtml("Instance Counts for All Classes (including platform)");
-        }
-
-        JavaClass[] classes = snapshot.getClassesArray();
-        if (excludePlatform) {
-            int num = 0;
-            for (int i = 0; i < classes.length; i++) {
-                if (! PlatformClasses.isPlatformClass(classes[i])) {
-                    classes[num++] = classes[i];
-                }
-            }
-            JavaClass[] tmp = new JavaClass[num];
-            System.arraycopy(classes, 0, tmp, 0, tmp.length);
-            classes = tmp;
-        }
-        ArraySorter.sort(classes, new Comparer() {
-            public int compare(Object lhso, Object rhso) {
-                JavaClass lhs = (JavaClass) lhso;
-                JavaClass rhs = (JavaClass) rhso;
-                int diff = lhs.getInstancesCount(false)
-                                - rhs.getInstancesCount(false);
-                if (diff != 0) {
-                    return -diff;       // Sort from biggest to smallest
-                }
-                String left = lhs.getName();
-                String right = rhs.getName();
-                if (left.startsWith("[") != right.startsWith("[")) {
-                    // Arrays at the end
-                    if (left.startsWith("[")) {
-                        return 1;
-                    } else {
-                        return -1;
-                    }
-                }
-                return left.compareTo(right);
-            }
-        });
-
-        String lastPackage = null;
-        long totalSize = 0;
-        long instances = 0;
-        for (int i = 0; i < classes.length; i++) {
-            JavaClass clazz = classes[i];
-            int count = clazz.getInstancesCount(false);
-            print("" + count);
-            printAnchorStart();
-            out.print("instances/" + encodeForURL(classes[i]));
-            out.print("\"> ");
-            if (count == 1) {
-                print("instance");
-            } else {
-                print("instances");
-            }
-            out.print("</a> ");
-            if (snapshot.getHasNewSet()) {
-                Enumeration objects = clazz.getInstances(false);
-                int newInst = 0;
-                while (objects.hasMoreElements()) {
-                    JavaHeapObject obj = (JavaHeapObject)objects.nextElement();
-                    if (obj.isNew()) {
-                        newInst++;
-                    }
-                }
-                print("(");
-                printAnchorStart();
-                out.print("newInstances/" + encodeForURL(classes[i]));
-                out.print("\">");
-                print("" + newInst + " new");
-                out.print("</a>) ");
-            }
-            print("of ");
-            printClass(classes[i]);
-            out.println("<br>");
-            instances += count;
-            totalSize += classes[i].getTotalInstanceSize();
-        }
-        out.println("<h2>Total of " + instances + " instances occupying " + totalSize + " bytes.</h2>");
-
-        out.println("<h2>Other Queries</h2>");
-        out.println("<ul>");
-
-        out.print("<li>");
-        printAnchorStart();
-        if (!excludePlatform) {
-            out.print("showInstanceCounts/\">");
-            print("Show instance counts for all classes (excluding platform)");
-        } else {
-            out.print("showInstanceCounts/includePlatform/\">");
-            print("Show instance counts for all classes (including platform)");
-        }
-        out.println("</a>");
-
-        out.print("<li>");
-        printAnchorStart();
-        out.print("allClassesWithPlatform/\">");
-        print("Show All Classes (including platform)");
-        out.println("</a>");
-
-        out.print("<li>");
-        printAnchorStart();
-        out.print("\">");
-        print("Show All Classes (excluding platform)");
-        out.println("</a>");
-
-        out.println("</ul>");
-
-        endHtml();
-    }
-
-
-}
diff --git a/ojluni/src/main/java/com/sun/tools/hat/internal/server/InstancesQuery.java b/ojluni/src/main/java/com/sun/tools/hat/internal/server/InstancesQuery.java
deleted file mode 100755
index ff1f60f..0000000
--- a/ojluni/src/main/java/com/sun/tools/hat/internal/server/InstancesQuery.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-
-/*
- * The Original Code is HAT. The Initial Developer of the
- * Original Code is Bill Foote, with contributions from others
- * at JavaSoft/Sun.
- */
-
-package com.sun.tools.hat.internal.server;
-
-import com.sun.tools.hat.internal.model.*;
-import java.util.Enumeration;
-
-/**
- *
- * @author      Bill Foote
- */
-
-
-class InstancesQuery extends QueryHandler {
-
-    private boolean includeSubclasses;
-    private boolean newObjects;
-
-    public InstancesQuery(boolean includeSubclasses) {
-        this.includeSubclasses = includeSubclasses;
-    }
-
-    public InstancesQuery(boolean includeSubclasses, boolean newObjects) {
-        this.includeSubclasses = includeSubclasses;
-        this.newObjects = newObjects;
-    }
-
-    public void run() {
-        JavaClass clazz = snapshot.findClass(query);
-        String instancesOf;
-        if (newObjects)
-            instancesOf = "New instances of ";
-        else
-            instancesOf = "Instances of ";
-        if (includeSubclasses) {
-            startHtml(instancesOf + query + " (including subclasses)");
-        } else {
-            startHtml(instancesOf + query);
-        }
-        if (clazz == null) {
-            error("Class not found");
-        } else {
-            out.print("<strong>");
-            printClass(clazz);
-            out.print("</strong><br><br>");
-            Enumeration objects = clazz.getInstances(includeSubclasses);
-            long totalSize = 0;
-            long instances = 0;
-            while (objects.hasMoreElements()) {
-                JavaHeapObject obj = (JavaHeapObject) objects.nextElement();
-                if (newObjects && !obj.isNew())
-                    continue;
-                printThing(obj);
-                out.println("<br>");
-                totalSize += obj.getSize();
-                instances++;
-            }
-            out.println("<h2>Total of " + instances + " instances occupying " + totalSize + " bytes.</h2>");
-        }
-        endHtml();
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/hat/internal/server/OQLHelp.java b/ojluni/src/main/java/com/sun/tools/hat/internal/server/OQLHelp.java
deleted file mode 100755
index 6aaa909..0000000
--- a/ojluni/src/main/java/com/sun/tools/hat/internal/server/OQLHelp.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-
-/*
- * The Original Code is HAT. The Initial Developer of the
- * Original Code is Bill Foote, with contributions from others
- * at JavaSoft/Sun.
- */
-
-package com.sun.tools.hat.internal.server;
-
-import java.io.*;
-
-/**
- * This handles Object Query Language (OQL) help.
- *
- * @author A. Sundararajan
- */
-
-class OQLHelp extends QueryHandler {
-
-    public OQLHelp() {
-    }
-
-    public void run() {
-        InputStream is = getClass().getResourceAsStream("/com/sun/tools/hat/resources/oqlhelp.html");
-        int ch = -1;
-        try {
-            is = new BufferedInputStream(is);
-            while ( (ch = is.read()) != -1) {
-                out.print((char)ch);
-            }
-        } catch (Exception exp) {
-            out.println(exp.getMessage());
-            out.println("<pre>");
-            exp.printStackTrace(out);
-            out.println("</pre>");
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/hat/internal/server/OQLQuery.java b/ojluni/src/main/java/com/sun/tools/hat/internal/server/OQLQuery.java
deleted file mode 100755
index 8e5ec5e..0000000
--- a/ojluni/src/main/java/com/sun/tools/hat/internal/server/OQLQuery.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-
-/*
- * The Original Code is HAT. The Initial Developer of the
- * Original Code is Bill Foote, with contributions from others
- * at JavaSoft/Sun.
- */
-
-package com.sun.tools.hat.internal.server;
-
-import com.sun.tools.hat.internal.model.*;
-import com.sun.tools.hat.internal.oql.*;
-import com.sun.tools.hat.internal.util.ArraySorter;
-import com.sun.tools.hat.internal.util.Comparer;
-
-/**
- * This handles Object Query Language (OQL) queries.
- *
- * @author A. Sundararajan
- */
-
-class OQLQuery extends QueryHandler {
-
-    public OQLQuery(OQLEngine engine) {
-        this.engine = engine;
-    }
-
-    public void run() {
-        startHtml("Object Query Language (OQL) query");
-        String oql = null;
-        if (query != null && !query.equals("")) {
-            int index = query.indexOf("?query=");
-            if (index != -1 && query.length() > 7) {
-                oql = query.substring(index + 7);
-            }
-        }
-        out.println("<p align='center'><table>");
-        out.println("<tr><td><b>");
-        out.println("<a href='/'>All Classes (excluding platform)</a>");
-        out.println("</b></td>");
-        out.println("<td><b><a href='/oqlhelp/'>OQL Help</a></b></td></tr>");
-        out.println("</table></p>");
-        out.println("<form action='/oql/' method='get'>");
-        out.println("<p align='center'>");
-        out.println("<textarea name='query' cols=80 rows=10>");
-        if (oql != null) {
-            out.println(oql);
-        }
-        out.println("</textarea>");
-        out.println("</p>");
-        out.println("<p align='center'>");
-        out.println("<input type='submit' value='Execute'></input>");
-        out.println("</p>");
-        out.println("</form>");
-        if (oql != null) {
-            executeQuery(oql);
-        }
-        endHtml();
-    }
-
-    private void executeQuery(String q) {
-        try {
-            out.println("<table border='1'>");
-            engine.executeQuery(q, new ObjectVisitor() {
-                     public boolean visit(Object o) {
-                         out.println("<tr><td>");
-                         try {
-                             out.println(engine.toHtml(o));
-                         } catch (Exception e) {
-                             out.println(e.getMessage());
-                             out.println("<pre>");
-                             e.printStackTrace(out);
-                             out.println("</pre>");
-                         }
-                         out.println("</td></tr>");
-                         return false;
-                     }
-                 });
-            out.println("</table>");
-        } catch (OQLException exp) {
-            out.println(exp.getMessage());
-            out.println("<pre>");
-            exp.printStackTrace(out);
-            out.println("</pre>");
-        }
-    }
-
-    private OQLEngine engine;
-}
diff --git a/ojluni/src/main/java/com/sun/tools/hat/internal/server/ObjectQuery.java b/ojluni/src/main/java/com/sun/tools/hat/internal/server/ObjectQuery.java
deleted file mode 100755
index edbf1ac..0000000
--- a/ojluni/src/main/java/com/sun/tools/hat/internal/server/ObjectQuery.java
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-
-/*
- * The Original Code is HAT. The Initial Developer of the
- * Original Code is Bill Foote, with contributions from others
- * at JavaSoft/Sun.
- */
-
-package com.sun.tools.hat.internal.server;
-
-import  java.util.Enumeration;
-
-import com.sun.tools.hat.internal.model.*;
-import com.sun.tools.hat.internal.util.ArraySorter;
-import com.sun.tools.hat.internal.util.Comparer;
-
-/**
- *
- * @author      Bill Foote
- */
-
-
-class ObjectQuery extends ClassQuery {
-        // We inherit printFullClass from ClassQuery
-
-    public ObjectQuery() {
-    }
-
-    public void run() {
-        startHtml("Object at " + query);
-        long id = parseHex(query);
-        JavaHeapObject thing = snapshot.findThing(id);
-        //
-        // In the following, I suppose we really should use a visitor
-        // pattern.  I'm not that strongly motivated to do this, however:
-        // This is the only typecase there is, and the default for an
-        // unrecognized type is to do something reasonable.
-        //
-        if (thing == null) {
-            error("object not found");
-        } else if (thing instanceof JavaClass) {
-            printFullClass((JavaClass) thing);
-        } else if (thing instanceof JavaValueArray) {
-            print(((JavaValueArray) thing).valueString(true));
-            printAllocationSite(thing);
-            printReferencesTo(thing);
-        } else if (thing instanceof JavaObjectArray) {
-            printFullObjectArray((JavaObjectArray) thing);
-            printAllocationSite(thing);
-            printReferencesTo(thing);
-        } else if (thing instanceof JavaObject) {
-            printFullObject((JavaObject) thing);
-            printAllocationSite(thing);
-            printReferencesTo(thing);
-        } else {
-            // We should never get here
-            print(thing.toString());
-            printReferencesTo(thing);
-        }
-        endHtml();
-    }
-
-
-    private void printFullObject(JavaObject obj) {
-        out.print("<h1>instance of ");
-        print(obj.toString());
-        out.print(" <small>(" + obj.getSize() + " bytes)</small>");
-        out.println("</h1>\n");
-
-        out.println("<h2>Class:</h2>");
-        printClass(obj.getClazz());
-
-        out.println("<h2>Instance data members:</h2>");
-        final JavaThing[] things = obj.getFields();
-        final JavaField[] fields = obj.getClazz().getFieldsForInstance();
-        Integer[] hack = new Integer[things.length];
-        for (int i = 0; i < things.length; i++) {
-            hack[i] = new Integer(i);
-        }
-        ArraySorter.sort(hack, new Comparer() {
-            public int compare(Object lhs, Object rhs) {
-                JavaField left = fields[((Integer) lhs).intValue()];
-                JavaField right = fields[((Integer) rhs).intValue()];
-                return left.getName().compareTo(right.getName());
-            }
-        });
-        for (int i = 0; i < things.length; i++) {
-            int index = hack[i].intValue();
-            printField(fields[index]);
-            out.print(" : ");
-            printThing(things[index]);
-            out.println("<br>");
-        }
-    }
-
-    private void printFullObjectArray(JavaObjectArray arr) {
-        JavaThing[] elements = arr.getElements();
-        out.println("<h1>Array of " + elements.length + " objects</h1>");
-
-        out.println("<h2>Class:</h2>");
-        printClass(arr.getClazz());
-
-        out.println("<h2>Values</h2>");
-        for (int i = 0; i < elements.length; i++) {
-            out.print("" + i + " : ");
-            printThing(elements[i]);
-            out.println("<br>");
-        }
-    }
-
-    //
-    // Print the StackTrace where this was allocated
-    //
-    private void printAllocationSite(JavaHeapObject obj) {
-        StackTrace trace = obj.getAllocatedFrom();
-        if (trace == null || trace.getFrames().length == 0) {
-            return;
-        }
-        out.println("<h2>Object allocated from:</h2>");
-        printStackTrace(trace);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/hat/internal/server/PlatformClasses.java b/ojluni/src/main/java/com/sun/tools/hat/internal/server/PlatformClasses.java
deleted file mode 100755
index ef735b0..0000000
--- a/ojluni/src/main/java/com/sun/tools/hat/internal/server/PlatformClasses.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-
-/*
- * The Original Code is HAT. The Initial Developer of the
- * Original Code is Bill Foote, with contributions from others
- * at JavaSoft/Sun.
- */
-
-package com.sun.tools.hat.internal.server;
-
-import com.sun.tools.hat.internal.model.JavaClass;
-import com.sun.tools.hat.internal.model.Snapshot;
-
-import java.util.LinkedList;
-import java.io.InputStream;
-import java.io.Reader;
-import java.io.InputStreamReader;
-import java.io.BufferedReader;
-import java.io.IOException;
-
-/**
- * This class is a helper that determines if a class is a "platform"
- * class or not.  It's a platform class if its name starts with one of
- * the prefixes to be found in /com/sun/tools/hat/resources/platform_names.txt.
- *
- * @author      Bill Foote
- */
-
-public class PlatformClasses  {
-
-    static String[] names = null;
-
-
-    public static synchronized String[] getNames() {
-        if (names == null) {
-            LinkedList<String> list = new LinkedList<String>();
-            InputStream str
-                = PlatformClasses.class
-                    .getResourceAsStream("/com/sun/tools/hat/resources/platform_names.txt");
-            if (str != null) {
-                try {
-                    BufferedReader rdr
-                        = new BufferedReader(new InputStreamReader(str));
-                    for (;;) {
-                        String s = rdr.readLine();
-                        if (s == null) {
-                            break;
-                        } else if (s.length() > 0) {
-                            list.add(s);
-                        }
-                    }
-                    rdr.close();
-                    str.close();
-                } catch (IOException ex) {
-                    ex.printStackTrace();
-                    // Shouldn't happen, and if it does, continuing
-                    // is the right thing to do anyway.
-                }
-            }
-            names = list.toArray(new String[list.size()]);
-        }
-        return names;
-    }
-
-
-    public static boolean isPlatformClass(JavaClass clazz) {
-        // all classes loaded by bootstrap loader are considered
-        // platform classes. In addition, the older name based filtering
-        // is also done for compatibility.
-        if (clazz.isBootstrap()) {
-            return true;
-        }
-
-        String name = clazz.getName();
-        // skip even the array classes of the skipped classes.
-        if (name.startsWith("[")) {
-            int index = name.lastIndexOf('[');
-            if (index != -1) {
-                if (name.charAt(index + 1) != 'L') {
-                    // some primitive array.
-                    return true;
-                }
-                // skip upto 'L' after the last '['.
-                name = name.substring(index + 2);
-            }
-        }
-        String[] nms = getNames();
-        for (int i = 0; i < nms.length; i++) {
-            if (name.startsWith(nms[i])) {
-                return true;
-            }
-        }
-        return false;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/hat/internal/server/QueryHandler.java b/ojluni/src/main/java/com/sun/tools/hat/internal/server/QueryHandler.java
deleted file mode 100755
index deda0f4..0000000
--- a/ojluni/src/main/java/com/sun/tools/hat/internal/server/QueryHandler.java
+++ /dev/null
@@ -1,226 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-
-/*
- * The Original Code is HAT. The Initial Developer of the
- * Original Code is Bill Foote, with contributions from others
- * at JavaSoft/Sun.
- */
-
-package com.sun.tools.hat.internal.server;
-
-import java.io.PrintWriter;
-
-import com.sun.tools.hat.internal.model.*;
-import com.sun.tools.hat.internal.util.Misc;
-
-import java.net.URLEncoder;
-import java.io.UnsupportedEncodingException;
-
-/**
- *
- * @author      Bill Foote
- */
-
-
-abstract class QueryHandler {
-
-    protected String urlStart;
-    protected String query;
-    protected PrintWriter out;
-    protected Snapshot snapshot;
-
-    abstract void run();
-
-
-    void setUrlStart(String s) {
-        urlStart = s;
-    }
-
-    void setQuery(String s) {
-        query = s;
-    }
-
-    void setOutput(PrintWriter o) {
-        this.out = o;
-    }
-
-    void setSnapshot(Snapshot ss) {
-        this.snapshot = ss;
-    }
-
-    protected String encodeForURL(String s) {
-        try {
-            s = URLEncoder.encode(s, "UTF-8");
-        } catch (UnsupportedEncodingException ex) {
-            // Should never happen
-            ex.printStackTrace();
-        }
-        return s;
-    }
-
-    protected void startHtml(String title) {
-        out.print("<html><title>");
-        print(title);
-        out.println("</title>");
-        out.println("<body bgcolor=\"#ffffff\"><center><h1>");
-        print(title);
-        out.println("</h1></center>");
-    }
-
-    protected void endHtml() {
-        out.println("</body></html>");
-    }
-
-    protected void error(String msg) {
-        out.println(msg);
-    }
-
-    protected void printAnchorStart() {
-        out.print("<a href=\"");
-        out.print(urlStart);
-    }
-
-    protected void printThingAnchorTag(long id) {
-        printAnchorStart();
-        out.print("object/");
-        printHex(id);
-        out.print("\">");
-    }
-
-    protected void printObject(JavaObject obj) {
-        printThing(obj);
-    }
-
-    protected void printThing(JavaThing thing) {
-        if (thing == null) {
-            out.print("null");
-            return;
-        }
-        if (thing instanceof JavaHeapObject) {
-            JavaHeapObject ho = (JavaHeapObject) thing;
-            long id = ho.getId();
-            if (id != -1L) {
-                if (ho.isNew())
-                out.println("<strong>");
-                printThingAnchorTag(id);
-            }
-            print(thing.toString());
-            if (id != -1) {
-                if (ho.isNew())
-                    out.println("[new]</strong>");
-                out.print(" (" + ho.getSize() + " bytes)");
-                out.println("</a>");
-            }
-        } else {
-            print(thing.toString());
-        }
-    }
-
-    protected void printRoot(Root root) {
-        StackTrace st = root.getStackTrace();
-        boolean traceAvailable = (st != null) && (st.getFrames().length != 0);
-        if (traceAvailable) {
-            printAnchorStart();
-            out.print("rootStack/");
-            printHex(root.getIndex());
-            out.print("\">");
-        }
-        print(root.getDescription());
-        if (traceAvailable) {
-            out.print("</a>");
-        }
-    }
-
-    protected void printClass(JavaClass clazz) {
-        if (clazz == null) {
-            out.println("null");
-            return;
-        }
-        String name = clazz.getName();
-        printAnchorStart();
-        out.print("class/");
-        print(encodeForURL(clazz));
-        out.print("\">");
-        print(clazz.toString());
-        out.println("</a>");
-    }
-
-    protected String encodeForURL(JavaClass clazz) {
-        if (clazz.getId() == -1) {
-            return encodeForURL(clazz.getName());
-        } else {
-            return clazz.getIdString();
-        }
-    }
-
-    protected void printField(JavaField field) {
-        print(field.getName() + " (" + field.getSignature() + ")");
-    }
-
-    protected void printStatic(JavaStatic member) {
-        JavaField f = member.getField();
-        printField(f);
-        out.print(" : ");
-        if (f.hasId()) {
-            JavaThing t = member.getValue();
-            printThing(t);
-        } else {
-            print(member.getValue().toString());
-        }
-    }
-
-    protected void printStackTrace(StackTrace trace) {
-        StackFrame[] frames = trace.getFrames();
-        for (int i = 0; i < frames.length; i++) {
-            StackFrame f = frames[i];
-            String clazz = f.getClassName();
-            out.print("<font color=purple>");
-            print(clazz);
-            out.print("</font>");
-            print("." + f.getMethodName() + "(" + f.getMethodSignature() + ")");
-            out.print(" <bold>:</bold> ");
-            print(f.getSourceFileName() + " line " + f.getLineNumber());
-            out.println("<br>");
-        }
-    }
-
-    protected void printHex(long addr) {
-        if (snapshot.getIdentifierSize() == 4) {
-            out.print(Misc.toHex((int)addr));
-        } else {
-            out.print(Misc.toHex(addr));
-        }
-    }
-
-    protected long parseHex(String value) {
-        return Misc.parseHex(value);
-    }
-
-    protected void print(String str) {
-        out.print(Misc.encodeHtml(str));
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/hat/internal/server/QueryListener.java b/ojluni/src/main/java/com/sun/tools/hat/internal/server/QueryListener.java
deleted file mode 100755
index b0b7c68..0000000
--- a/ojluni/src/main/java/com/sun/tools/hat/internal/server/QueryListener.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-
-/*
- * The Original Code is HAT. The Initial Developer of the
- * Original Code is Bill Foote, with contributions from others
- * at JavaSoft/Sun.
- */
-
-package com.sun.tools.hat.internal.server;
-
-/**
- *
- * @author      Bill Foote
- */
-
-
-import java.net.Socket;
-import java.net.ServerSocket;
-import java.net.InetAddress;
-
-import java.io.InputStream;
-import java.io.BufferedInputStream;
-import java.io.IOException;
-import java.io.Writer;
-import java.io.BufferedWriter;
-import java.io.PrintWriter;
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-import java.io.BufferedOutputStream;
-
-import com.sun.tools.hat.internal.model.Snapshot;
-import com.sun.tools.hat.internal.oql.OQLEngine;
-
-public class QueryListener implements Runnable {
-
-
-    private Snapshot snapshot;
-    private OQLEngine engine;
-    private int port;
-
-    public QueryListener(int port) {
-        this.port = port;
-        this.snapshot = null;   // Client will setModel when it's ready
-        this.engine = null; // created when snapshot is set
-    }
-
-    public void setModel(Snapshot ss) {
-        this.snapshot = ss;
-        if (OQLEngine.isOQLSupported()) {
-            this.engine = new OQLEngine(ss);
-        }
-    }
-
-    public void run() {
-        try {
-            waitForRequests();
-        } catch (IOException ex) {
-            ex.printStackTrace();
-            System.exit(1);
-        }
-    }
-
-    private void waitForRequests() throws IOException {
-        ServerSocket ss = new ServerSocket(port);
-        Thread last = null;
-        for (;;) {
-            Socket s = ss.accept();
-            Thread t = new Thread(new HttpReader(s, snapshot, engine));
-            if (snapshot == null) {
-                t.setPriority(Thread.NORM_PRIORITY+1);
-            } else {
-                t.setPriority(Thread.NORM_PRIORITY-1);
-                if (last != null) {
-                    try {
-                        last.setPriority(Thread.NORM_PRIORITY-2);
-                    } catch (Throwable ignored) {
-                    }
-                    // If the thread is no longer alive, we'll get a
-                    // NullPointerException
-                }
-            }
-            t.start();
-            last = t;
-        }
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/tools/hat/internal/server/ReachableQuery.java b/ojluni/src/main/java/com/sun/tools/hat/internal/server/ReachableQuery.java
deleted file mode 100755
index f6e4ab5..0000000
--- a/ojluni/src/main/java/com/sun/tools/hat/internal/server/ReachableQuery.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-
-/*
- * The Original Code is HAT. The Initial Developer of the
- * Original Code is Bill Foote, with contributions from others
- * at JavaSoft/Sun.
- */
-
-package com.sun.tools.hat.internal.server;
-
-import com.sun.tools.hat.internal.model.*;
-
-/**
- *
- * @author      Bill Foote
- */
-
-
-class ReachableQuery extends QueryHandler {
-        // We inherit printFullClass from ClassQuery
-
-
-    public ReachableQuery() {
-    }
-
-    public void run() {
-        startHtml("Objects Reachable From " + query);
-        long id = parseHex(query);
-        JavaHeapObject root = snapshot.findThing(id);
-        ReachableObjects ro = new ReachableObjects(root,
-                                   snapshot.getReachableExcludes());
-        // Now, print out the sorted list, but start with root
-        long totalSize = ro.getTotalSize();
-        JavaThing[] things = ro.getReachables();
-        long instances = things.length;
-
-        out.print("<strong>");
-        printThing(root);
-        out.println("</strong><br>");
-        out.println("<br>");
-        for (int i = 0; i < things.length; i++) {
-            printThing(things[i]);
-            out.println("<br>");
-        }
-
-        printFields(ro.getUsedFields(), "Data Members Followed");
-        printFields(ro.getExcludedFields(), "Excluded Data Members");
-        out.println("<h2>Total of " + instances + " instances occupying " + totalSize + " bytes.</h2>");
-
-        endHtml();
-    }
-
-    private void printFields(String[] fields, String title) {
-        if (fields.length == 0) {
-            return;
-        }
-        out.print("<h3>");
-        print(title);
-        out.println("</h3>");
-
-        for (int i = 0; i < fields.length; i++) {
-            print(fields[i]);
-            out.println("<br>");
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/hat/internal/server/RefsByTypeQuery.java b/ojluni/src/main/java/com/sun/tools/hat/internal/server/RefsByTypeQuery.java
deleted file mode 100755
index 5e7de9a..0000000
--- a/ojluni/src/main/java/com/sun/tools/hat/internal/server/RefsByTypeQuery.java
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-
-/*
- * The Original Code is HAT. The Initial Developer of the
- * Original Code is Bill Foote, with contributions from others
- * at JavaSoft/Sun.
- */
-
-package com.sun.tools.hat.internal.server;
-
-import com.sun.tools.hat.internal.model.*;
-import java.util.*;
-
-/**
- * References by type summary
- *
- */
-public class RefsByTypeQuery extends QueryHandler {
-    public void run() {
-        JavaClass clazz = snapshot.findClass(query);
-        if (clazz == null) {
-            error("class not found: " + query);
-        } else {
-            Map<JavaClass, Long> referrersStat = new HashMap<JavaClass, Long>();
-            final Map<JavaClass, Long> refereesStat = new HashMap<JavaClass, Long>();
-            Enumeration instances = clazz.getInstances(false);
-            while (instances.hasMoreElements()) {
-                JavaHeapObject instance = (JavaHeapObject) instances.nextElement();
-                if (instance.getId() == -1) {
-                    continue;
-                }
-                Enumeration e = instance.getReferers();
-                while (e.hasMoreElements()) {
-                    JavaHeapObject ref = (JavaHeapObject) e.nextElement();
-                    JavaClass cl = ref.getClazz();
-                    if (cl == null) {
-                         System.out.println("null class for " + ref);
-                         continue;
-                    }
-                    Long count = referrersStat.get(cl);
-                    if (count == null) {
-                        count = new Long(1);
-                    } else {
-                        count = new Long(count.longValue() + 1);
-                    }
-                    referrersStat.put(cl, count);
-                }
-                instance.visitReferencedObjects(
-                    new AbstractJavaHeapObjectVisitor() {
-                        public void visit(JavaHeapObject obj) {
-                            JavaClass cl = obj.getClazz();
-                            Long count = refereesStat.get(cl);
-                            if (count == null) {
-                                count = new Long(1);
-                            } else {
-                                count = new Long(count.longValue() + 1);
-                            }
-                            refereesStat.put(cl, count);
-                        }
-                    }
-                );
-            } // for each instance
-
-            startHtml("References by Type");
-            out.println("<p align='center'>");
-            printClass(clazz);
-            if (clazz.getId() != -1) {
-                out.println("[" + clazz.getIdString() + "]");
-            }
-            out.println("</p>");
-
-            if (referrersStat.size() != 0) {
-                out.println("<h3 align='center'>Referrers by Type</h3>");
-                print(referrersStat);
-            }
-
-            if (refereesStat.size() != 0) {
-                out.println("<h3 align='center'>Referees by Type</h3>");
-                print(refereesStat);
-            }
-
-            endHtml();
-        }  // clazz != null
-    } // run
-
-    private void print(final Map<JavaClass, Long> map) {
-        out.println("<table border='1' align='center'>");
-        Set<JavaClass> keys = map.keySet();
-        JavaClass[] classes = new JavaClass[keys.size()];
-        keys.toArray(classes);
-        Arrays.sort(classes, new Comparator<JavaClass>() {
-            public int compare(JavaClass first, JavaClass second) {
-                Long count1 = map.get(first);
-                Long count2 = map.get(second);
-                return count2.compareTo(count1);
-            }
-        });
-
-        out.println("<tr><th>Class</th><th>Count</th></tr>");
-        for (int i = 0; i < classes.length; i++) {
-            JavaClass clazz = classes[i];
-            out.println("<tr><td>");
-            out.print("<a href='/refsByType/");
-            out.print(clazz.getIdString());
-            out.print("'>");
-            out.print(clazz.getName());
-            out.println("</a>");
-            out.println("</td><td>");
-            out.println(map.get(clazz));
-            out.println("</td></tr>");
-        }
-        out.println("</table>");
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/hat/internal/server/RootStackQuery.java b/ojluni/src/main/java/com/sun/tools/hat/internal/server/RootStackQuery.java
deleted file mode 100755
index 30f9e4cd..0000000
--- a/ojluni/src/main/java/com/sun/tools/hat/internal/server/RootStackQuery.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-
-/*
- * The Original Code is HAT. The Initial Developer of the
- * Original Code is Bill Foote, with contributions from others
- * at JavaSoft/Sun.
- */
-
-package com.sun.tools.hat.internal.server;
-
-
-import com.sun.tools.hat.internal.model.*;
-
-/**
- * Query to show the StackTrace for a given root
- *
- * @author      Bill Foote
- */
-
-
-class RootStackQuery extends QueryHandler {
-
-    public RootStackQuery() {
-    }
-
-    public void run() {
-        int index = (int) parseHex(query);
-        Root root = snapshot.getRootAt(index);
-        if (root == null) {
-            error("Root at " + index + " not found");
-            return;
-        }
-        StackTrace st = root.getStackTrace();
-        if (st == null || st.getFrames().length == 0) {
-            error("No stack trace for " + root.getDescription());
-            return;
-        }
-        startHtml("Stack Trace for " + root.getDescription());
-        out.println("<p>");
-        printStackTrace(st);
-        out.println("</p>");
-        endHtml();
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/tools/hat/internal/server/RootsQuery.java b/ojluni/src/main/java/com/sun/tools/hat/internal/server/RootsQuery.java
deleted file mode 100755
index 2ab8d61..0000000
--- a/ojluni/src/main/java/com/sun/tools/hat/internal/server/RootsQuery.java
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-
-/*
- * The Original Code is HAT. The Initial Developer of the
- * Original Code is Bill Foote, with contributions from others
- * at JavaSoft/Sun.
- */
-
-package com.sun.tools.hat.internal.server;
-
-import java.util.Vector;
-
-import com.sun.tools.hat.internal.model.*;
-import com.sun.tools.hat.internal.util.ArraySorter;
-import com.sun.tools.hat.internal.util.Comparer;
-
-/**
- *
- * @author      Bill Foote
- */
-
-
-class RootsQuery extends QueryHandler {
-
-    private boolean includeWeak;
-
-    public RootsQuery(boolean includeWeak) {
-        this.includeWeak = includeWeak;
-    }
-
-    public void run() {
-        long id = parseHex(query);
-        JavaHeapObject target = snapshot.findThing(id);
-        if (target == null) {
-            startHtml("Object not found for rootset");
-            error("object not found");
-            endHtml();
-            return;
-        }
-        if (includeWeak) {
-            startHtml("Rootset references to " + target
-                        + " (includes weak refs)");
-        } else {
-            startHtml("Rootset references to " + target
-                        + " (excludes weak refs)");
-        }
-        out.flush();
-
-        ReferenceChain[] refs
-            = snapshot.rootsetReferencesTo(target, includeWeak);
-        ArraySorter.sort(refs, new Comparer() {
-            public int compare(Object lhs, Object rhs) {
-                ReferenceChain left = (ReferenceChain) lhs;
-                ReferenceChain right = (ReferenceChain) rhs;
-                Root leftR = left.getObj().getRoot();
-                Root rightR = right.getObj().getRoot();
-                int d = leftR.getType() - rightR.getType();
-                if (d != 0) {
-                    return -d;  // More interesting values are *higher*
-                }
-                return left.getDepth() - right.getDepth();
-            }
-        });
-
-        out.print("<h1>References to ");
-        printThing(target);
-        out.println("</h1>");
-        int lastType = Root.INVALID_TYPE;
-        for (int i= 0; i < refs.length; i++) {
-            ReferenceChain ref = refs[i];
-            Root root = ref.getObj().getRoot();
-            if (root.getType() != lastType) {
-                lastType = root.getType();
-                out.print("<h2>");
-                print(root.getTypeName() + " References");
-                out.println("</h2>");
-            }
-            out.print("<h3>");
-            printRoot(root);
-            if (root.getReferer() != null) {
-                out.print("<small> (from ");
-                printThingAnchorTag(root.getReferer().getId());
-                print(root.getReferer().toString());
-                out.print(")</a></small>");
-
-            }
-            out.print(" :</h3>");
-            while (ref != null) {
-                ReferenceChain next = ref.getNext();
-                JavaHeapObject obj = ref.getObj();
-                print("--> ");
-                printThing(obj);
-                if (next != null) {
-                    print(" (" +
-                          obj.describeReferenceTo(next.getObj(), snapshot)
-                          + ":)");
-                }
-                out.println("<br>");
-                ref = next;
-            }
-        }
-
-        out.println("<h2>Other queries</h2>");
-
-        if (includeWeak) {
-            printAnchorStart();
-            out.print("roots/");
-            printHex(id);
-            out.print("\">");
-            out.println("Exclude weak refs</a><br>");
-            endHtml();
-        }
-
-        if (!includeWeak) {
-            printAnchorStart();
-            out.print("allRoots/");
-            printHex(id);
-            out.print("\">");
-            out.println("Include weak refs</a><br>");
-        }
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/tools/hat/internal/util/ArraySorter.java b/ojluni/src/main/java/com/sun/tools/hat/internal/util/ArraySorter.java
deleted file mode 100755
index aaa13b8..0000000
--- a/ojluni/src/main/java/com/sun/tools/hat/internal/util/ArraySorter.java
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-
-/*
- * The Original Code is HAT. The Initial Developer of the
- * Original Code is Bill Foote, with contributions from others
- * at JavaSoft/Sun.
- */
-
-package com.sun.tools.hat.internal.util;
-import java.util.*;
-
-/**
- * A singleton utility class that sorts an array of objects.
- * <p>
- * Use:
- * <pre>
- *
- *  Stuff[] arr = ...;
- *  ArraySorter.sort(arr, new Comparer() {
- *      public int compare(Object lhs, Object rhs) {
- *          return ((String) lhs).compareTo((String) rhs);
- *      }
- *  });
- * </pre>
- *
- * @author      Bill Foote
- */
-
-public class ArraySorter {
-
-    /**
-     * Sort the given array, using c for comparison
-    **/
-    static public void sort(Object[] arr, Comparer c)  {
-        quickSort(arr, c, 0, arr.length-1);
-    }
-
-
-    /**
-     * Sort an array of strings, using String.compareTo()
-    **/
-    static public void sortArrayOfStrings(Object[] arr) {
-        sort(arr, new Comparer() {
-            public int compare(Object lhs, Object rhs) {
-                return ((String) lhs).compareTo((String) rhs);
-            }
-        });
-    }
-
-
-    static private void swap(Object[] arr, int a, int b) {
-        Object tmp = arr[a];
-        arr[a] = arr[b];
-        arr[b] = tmp;
-    }
-
-    //
-    // Sorts arr between from and to, inclusive.  This is a quick, off-the-top-
-    // of-my-head quicksort:  I haven't put any thought into optimizing it.
-    // I _did_ put thought into making sure it's safe (it will always
-    // terminate).  Worst-case it's O(n^2), but it will usually run in
-    // in O(n log n).  It's well-behaved if the list is already sorted,
-    // or nearly so.
-    //
-    static private void quickSort(Object[] arr, Comparer c, int from, int to) {
-        if (to <= from)
-            return;
-        int mid = (from + to) / 2;
-        if (mid != from)
-            swap(arr, mid, from);
-        Object pivot = arr[from];   // Simple-minded, but reasonable
-        int highestBelowPivot = from - 1;
-        int low = from+1;
-        int high = to;
-            // We now move low and high toward each other, maintaining the
-            // invariants:
-            //      arr[i] <= pivot    for all i < low
-            //      arr[i] > pivot     for all i > high
-            // As long as these invariants hold, and every iteration makes
-            // progress, we are safe.
-        while (low <= high) {
-            int cmp = c.compare(arr[low], pivot);
-            if (cmp <= 0) {   // arr[low] <= pivot
-                if (cmp < 0) {
-                    highestBelowPivot = low;
-                }
-                low++;
-            } else {
-                int c2;
-                for (;;) {
-                        // arr[high] > pivot:
-                    c2 = c.compare(arr[high], pivot);
-                    if (c2 > 0) {
-                        high--;
-                        if (low > high) {
-                            break;
-                        }
-                    } else {
-                        break;
-                    }
-                }
-                // At this point, low is never == high, BTW
-                if (low <= high) {
-                    swap(arr, low, high);
-                    if (c2 < 0) {
-                        highestBelowPivot = low;
-                    }
-                    low++;
-                    high--;
-                }
-            }
-        }
-        // At this point, low == high+1
-        // Now we just need to sort from from..highestBelowPivot
-        // and from high+1..to
-        if (highestBelowPivot > from) {
-            // pivot == pivot, so ensure algorithm terminates
-            swap(arr, from, highestBelowPivot);
-            quickSort(arr, c, from, highestBelowPivot-1);
-        }
-        quickSort(arr, c, high+1, to);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/hat/internal/util/Comparer.java b/ojluni/src/main/java/com/sun/tools/hat/internal/util/Comparer.java
deleted file mode 100755
index e1b9606..0000000
--- a/ojluni/src/main/java/com/sun/tools/hat/internal/util/Comparer.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-
-/*
- * The Original Code is HAT. The Initial Developer of the
- * Original Code is Bill Foote, with contributions from others
- * at JavaSoft/Sun.
- */
-
-package com.sun.tools.hat.internal.util;
-
-/**
- * Base class for comparison of two objects.
- * @see VectorSorter
- *
- * @author      Bill Foote
- */
-
-abstract public class Comparer {
-
-    /**
-     * @return a number <, == or > 0 depending on lhs compared to rhs
-     * @see java.lang.String.compareTo
-    **/
-    abstract public int compare(Object lhs, Object rhs);
-}
diff --git a/ojluni/src/main/java/com/sun/tools/hat/internal/util/CompositeEnumeration.java b/ojluni/src/main/java/com/sun/tools/hat/internal/util/CompositeEnumeration.java
deleted file mode 100755
index 6663d8f..0000000
--- a/ojluni/src/main/java/com/sun/tools/hat/internal/util/CompositeEnumeration.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-
-/*
- * The Original Code is HAT. The Initial Developer of the
- * Original Code is Bill Foote, with contributions from others
- * at JavaSoft/Sun.
- */
-
-package com.sun.tools.hat.internal.util;
-
-import java.util.Enumeration;
-import java.util.NoSuchElementException;
-
-public class CompositeEnumeration implements Enumeration {
-    Enumeration e1;
-    Enumeration e2;
-
-    public CompositeEnumeration(Enumeration e1, Enumeration e2) {
-        this.e1 = e1;
-        this.e2 = e2;
-    }
-
-    public boolean hasMoreElements() {
-        return e1.hasMoreElements() || e2.hasMoreElements();
-    }
-
-    public Object nextElement() {
-        if (e1.hasMoreElements()) {
-            return e1.nextElement();
-        }
-
-        if (e2.hasMoreElements()) {
-            return e2.nextElement();
-        }
-
-        throw new NoSuchElementException();
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/hat/internal/util/Misc.java b/ojluni/src/main/java/com/sun/tools/hat/internal/util/Misc.java
deleted file mode 100755
index 0fdf405..0000000
--- a/ojluni/src/main/java/com/sun/tools/hat/internal/util/Misc.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-
-/*
- * The Original Code is HAT. The Initial Developer of the
- * Original Code is Bill Foote, with contributions from others
- * at JavaSoft/Sun.
- */
-
-package com.sun.tools.hat.internal.util;
-import java.util.*;
-
-/**
- * Miscellaneous functions I couldn't think of a good place to put.
- *
- * @author      Bill Foote
- */
-
-
-public class Misc {
-
-    private static char[] digits = { '0', '1', '2', '3', '4', '5', '6', '7',
-                                     '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
-
-    public final static String toHex(int addr) {
-        char[] buf = new char[8];
-        int i = 0;
-        for (int s = 28; s >= 0; s -= 4) {
-            buf[i++] = digits[(addr >> s) & 0xf];
-        }
-        return "0x" + new String(buf);
-    }
-
-    public final static String toHex(long addr) {
-        return "0x" + Long.toHexString(addr);
-    }
-
-    public final static long parseHex(String value) {
-        long result = 0;
-        if (value.length() < 2 || value.charAt(0) != '0' ||
-            value.charAt(1) != 'x') {
-            return -1L;
-        }
-        for(int i = 2; i < value.length(); i++) {
-            result *= 16;
-            char ch = value.charAt(i);
-            if (ch >= '0' && ch <= '9') {
-                result += (ch - '0');
-            } else if (ch >= 'a' && ch <= 'f') {
-                result += (ch - 'a') + 10;
-            } else if (ch >= 'A' && ch <= 'F') {
-                result += (ch - 'A') + 10;
-            } else {
-                throw new NumberFormatException("" + ch
-                                        + " is not a valid hex digit");
-            }
-        }
-        return result;
-    }
-
-    public static String encodeHtml(String str) {
-        final int len = str.length();
-        StringBuffer buf = new StringBuffer();
-        for (int i = 0; i < len; i++) {
-            char ch = str.charAt(i);
-            if (ch == '<') {
-                buf.append("&lt;");
-            } else if (ch == '>') {
-                buf.append("&gt;");
-            } else if (ch == '"') {
-                buf.append("&quot;");
-            } else if (ch == '\'') {
-                buf.append("&#039;");
-            } else if (ch == '&') {
-                buf.append("&amp;");
-            } else if (ch < ' ') {
-                buf.append("&#" + Integer.toString(ch) + ";");
-            } else {
-                int c = (ch & 0xFFFF);
-                if (c > 127) {
-                    buf.append("&#" + Integer.toString(c) + ";");
-                } else {
-                    buf.append(ch);
-                }
-            }
-        }
-        return buf.toString();
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/hat/internal/util/VectorSorter.java b/ojluni/src/main/java/com/sun/tools/hat/internal/util/VectorSorter.java
deleted file mode 100755
index c846959..0000000
--- a/ojluni/src/main/java/com/sun/tools/hat/internal/util/VectorSorter.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-
-/*
- * The Original Code is HAT. The Initial Developer of the
- * Original Code is Bill Foote, with contributions from others
- * at JavaSoft/Sun.
- */
-
-package com.sun.tools.hat.internal.util;
-import java.util.*;
-
-/**
- * A singleton utility class that sorts a vector.
- * <p>
- * Use:
- * <pre>
- *
- *  Vector v =   <a vector of, say, String objects>;
- *  VectorSorter.sort(v, new Comparer() {
- *      public int compare(Object lhs, Object rhs) {
- *          return ((String) lhs).compareTo((String) rhs);
- *      }
- *  });
- * </pre>
- *
- * @author      Bill Foote
- */
-
-
-public class VectorSorter {
-
-    /**
-     * Sort the given vector, using c for comparison
-    **/
-    static public void sort(Vector<Object> v, Comparer c)  {
-        quickSort(v, c, 0, v.size()-1);
-    }
-
-
-    /**
-     * Sort a vector of strings, using String.compareTo()
-    **/
-    static public void sortVectorOfStrings(Vector<Object> v) {
-        sort(v, new Comparer() {
-            public int compare(Object lhs, Object rhs) {
-                return ((String) lhs).compareTo((String) rhs);
-            }
-        });
-    }
-
-
-    static private void swap(Vector<Object> v, int a, int b) {
-        Object tmp = v.elementAt(a);
-        v.setElementAt(v.elementAt(b), a);
-        v.setElementAt(tmp, b);
-    }
-
-    //
-    // Sorts v between from and to, inclusive.  This is a quick, off-the-top-
-    // of-my-head quicksort:  I haven't put any thought into optimizing it.
-    // I _did_ put thought into making sure it's safe (it will always
-    // terminate).  Worst-case it's O(n^2), but it will usually run in
-    // in O(n log n).  It's well-behaved if the list is already sorted,
-    // or nearly so.
-    //
-    static private void quickSort(Vector<Object> v, Comparer c, int from, int to) {
-        if (to <= from)
-            return;
-        int mid = (from + to) / 2;
-        if (mid != from)
-            swap(v, mid, from);
-        Object pivot = v.elementAt(from);
-                        // Simple-minded, but reasonable
-        int highestBelowPivot = from - 1;
-        int low = from+1;
-        int high = to;
-            // We now move low and high toward eachother, maintaining the
-            // invariants:
-            //      v[i] <= pivot    for all i < low
-            //      v[i] > pivot     for all i > high
-            // As long as these invariants hold, and every iteration makes
-            // progress, we are safe.
-        while (low <= high) {
-            int cmp = c.compare(v.elementAt(low), pivot);
-            if (cmp <= 0) {    // v[low] <= pivot
-                if (cmp < 0) {
-                    highestBelowPivot = low;
-                }
-                low++;
-            } else {
-                int c2;
-                for (;;) {
-                    c2 = c.compare(v.elementAt(high), pivot);
-                        // v[high] > pivot:
-                    if (c2 > 0) {
-                        high--;
-                        if (low > high) {
-                            break;
-                        }
-                    } else {
-                        break;
-                    }
-                }
-                // At this point, low is never == high
-                if (low <= high) {
-                    swap(v, low, high);
-                    if (c2 < 0) {
-                        highestBelowPivot = low;
-                    }
-                    low++;
-                    high--;
-                }
-            }
-        }
-        // Now we just need to sort from from..highestBelowPivot
-        // and from high+1..to
-        if (highestBelowPivot > from) {
-            // pivot == pivot, so ensure algorithm terminates
-            swap(v, from, highestBelowPivot);
-            quickSort(v, c, from, highestBelowPivot-1);
-        }
-        quickSort(v, c, high+1, to);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/hat/resources/hat.js b/ojluni/src/main/java/com/sun/tools/hat/resources/hat.js
deleted file mode 100755
index 468d25a..0000000
--- a/ojluni/src/main/java/com/sun/tools/hat/resources/hat.js
+++ /dev/null
@@ -1,1463 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-/*
- * The Original Code is HAT. The Initial Developer of the
- * Original Code is Bill Foote, with contributions from others
- * at JavaSoft/Sun.
- */
-
-var hatPkg = Packages.com.sun.tools.hat.internal;
-
-/**
- * This is JavaScript interface for heap analysis using HAT
- * (Heap Analysis Tool). HAT classes are refered from
- * this file. In particular, refer to classes in hat.model 
- * package.
- * 
- * HAT model objects are wrapped as convenient script objects so that
- * fields may be accessed in natural syntax. For eg. Java fields can be
- * accessed with obj.field_name syntax and array elements can be accessed
- * with array[index] syntax. 
- */
-
-// returns an enumeration that wraps elements of
-// the input enumeration elements.
-function wrapperEnumeration(e) {
-    return new java.util.Enumeration() {
-        hasMoreElements: function() {
-            return e.hasMoreElements();
-        },
-        nextElement: function() {
-            return wrapJavaValue(e.nextElement());
-        }
-    };
-}
-
-// returns an enumeration that filters out elements
-// of input enumeration using the filter function.
-function filterEnumeration(e, func, wrap) {
-    var next = undefined;
-    var index = 0;
-
-    function findNext() {
-        var tmp;
-        while (e.hasMoreElements()) {
-            tmp = e.nextElement();
-            index++;
-            if (wrap) {
-                tmp = wrapJavaValue(tmp);
-            }
-            if (func(tmp, index, e)) {
-                next = tmp;
-                return;
-            }
-        }
-    }
-
-    return new java.util.Enumeration() {
-        hasMoreElements: function() {
-            findNext();
-            return next != undefined;
-        },
-
-        nextElement: function() {
-            if (next == undefined) {
-                // user may not have called hasMoreElements?
-                findNext();
-            }
-            if (next == undefined) {
-                throw "NoSuchElementException";
-            }
-            var res = next;
-            next = undefined;
-            return res;
-        }
-    };
-}
-
-// enumeration that has no elements ..
-var emptyEnumeration = new java.util.Enumeration() {
-        hasMoreElements: function() { 
-            return false;
-        },
-        nextElement: function() {
-            throw "NoSuchElementException";
-        }
-    };
-
-function wrapRoot(root) {
-    if (root) {
-        return {
-            id: root.idString,
-            description: root.description,
-            referrer: wrapJavaValue(root.referer),
-            type: root.typeName
-        };
-    } else {
-        return null;
-    }
-}
-
-function JavaClassProto() {    
-    function jclass(obj) {
-        return obj['wrapped-object'];
-    }
-
-    // return whether given class is subclass of this class or not
-    this.isSubclassOf = function(other) {
-        var tmp = jclass(this);
-        var otherid = objectid(other);
-        while (tmp != null) {
-            if (otherid.equals(tmp.idString)) {
-                return true;
-            }
-            tmp = tmp.superclass;
-        }
-        return false;
-    }
-
-    // return whether given class is superclass of this class or not
-    this.isSuperclassOf = function(other) {
-        return other.isSubclassOf(this); 
-    }
-
-    // includes direct and indirect superclasses
-    this.superclasses = function() {
-        var res = new Array();
-        var tmp = this.superclass;
-        while (tmp != null) {
-            res[res.length] = tmp;
-            tmp = tmp.superclass;
-        } 
-        return res;
-    }
-
-    /**
-     * Returns an array containing subclasses of this class.
-     *
-     * @param indirect should include indirect subclasses or not.
-     *                 default is true.
-     */
-    this.subclasses = function(indirect) {
-        if (indirect == undefined) indirect = true;
-        var classes = jclass(this).subclasses;
-        var res = new Array();
-        for (var i in classes) {
-            var subclass = wrapJavaValue(classes[i]);
-            res[res.length] = subclass;
-            if (indirect) {
-                res = res.concat(subclass.subclasses());
-            }
-        }
-        return res;
-    }
-    this.toString = function() { return jclass(this).toString(); }
-}
-
-var theJavaClassProto = new JavaClassProto();
-
-// Script wrapper for HAT model objects, values.
-// wraps a Java value as appropriate for script object
-function wrapJavaValue(thing) {
-    if (thing == null || thing == undefined ||
-        thing instanceof hatPkg.model.HackJavaValue) {
-	return null;
-    } 
-    
-    if (thing instanceof hatPkg.model.JavaValue) {
-        // map primitive values to closest JavaScript primitives
-        if (thing instanceof hatPkg.model.JavaBoolean) {
-            return thing.toString() == "true";
-        } else if (thing instanceof hatPkg.model.JavaChar) {
-            return thing.toString() + '';
-        } else {
-            return java.lang.Double.parseDouble(thing.toString());
-        }			
-    } else {
-        // wrap Java object as script object
-        return wrapJavaObject(thing);		
-    }
-}
-
-// wrap Java object with appropriate script object
-function wrapJavaObject(thing) {
-
-    // HAT Java model object wrapper. Handles all cases 
-    // (instance, object/primitive array and Class objects)	
-    function javaObject(jobject) {		
-        // FIXME: Do I need this? or can I assume that these would
-        // have been resolved already?
-        if (jobject instanceof hatPkg.model.JavaObjectRef) {
-            jobject = jobject.dereference();
-            if (jobject instanceof hatPkg.model.HackJavaValue) {
-                print(jobject);
-                return null;
-            }
-        }
-
-        if (jobject instanceof hatPkg.model.JavaObject) {
-            return new JavaObjectWrapper(jobject);
-        } else if (jobject instanceof hatPkg.model.JavaClass) {
-            return new JavaClassWrapper(jobject);
-        } else if (jobject instanceof hatPkg.model.JavaObjectArray) {
-            return new JavaObjectArrayWrapper(jobject);
-        } else if (jobject instanceof hatPkg.model.JavaValueArray) {
-            return new JavaValueArrayWrapper(jobject);
-        } else {
-            print("unknown heap object type: " + jobject.getClass());
-            return jobject;
-        }
-    }
-    
-    // returns wrapper for Java instances
-    function JavaObjectWrapper(instance) {
-        var things = instance.fields;
-        var fields = instance.clazz.fieldsForInstance;
-    		
-        // instance fields can be accessed in natural syntax
-        return new JSAdapter() {
-            __getIds__ : function() {
-                    var res = new Array(fields.length);
-                    for (var i in fields) {
-                        res[i] = fields[i].name;
-                    }
-                    return res;
-            },
-            __has__ : function(name) {
-                    for (var i in fields) {
-                        if (name == fields[i].name) return true;
-                    }
-                    return name == 'class' || name == 'toString' ||
-                           name == 'wrapped-object';
-            },
-            __get__ : function(name) {
-    
-                    for (var i in fields) {
-                        if(fields[i].name == name) {
-                            return wrapJavaValue(things[i]);
-                        }
-                    }
-    
-                    if (name == 'class') {
-                        return wrapJavaValue(instance.clazz);
-                    } else if (name == 'toString') {
-                        return function() { 
-                            return instance.toString();
-                        }
-                    } else if (name == 'wrapped-object') {
-                        return instance;
-                    } 
-    
-                    return undefined;
-            }
-        }				
-    }
-
-
-    // return wrapper for Java Class objects
-    function JavaClassWrapper(jclass) {	
-        var fields = jclass.statics;
-    
-        // to access static fields of given Class cl, use 
-        // cl.statics.<static-field-name> syntax
-        this.statics = new JSAdapter() {
-            __getIds__ : function() {
-                var res = new Array(fields.length);
-                for (var i in fields) {
-                    res[i] = fields[i].field.name;
-                }
-                return res;
-            },
-            __has__ : function(name) {
-                for (var i in fields) {
-                    if (name == fields[i].field.name) {
-                        return true;
-                    }					
-                }
-                return theJavaClassProto[name] != undefined;
-            },
-            __get__ : function(name) {
-                for (var i in fields) {
-                    if (name == fields[i].field.name) {
-                        return wrapJavaValue(fields[i].value);	
-                    }					
-                }
-                return theJavaClassProto[name];
-            }
-        }
-    		
-        if (jclass.superclass != null) {
-            this.superclass = wrapJavaValue(jclass.superclass);
-        } else {
-            this.superclass = null;
-        }
-
-        this.loader = wrapJavaValue(jclass.getLoader());
-        this.signers = wrapJavaValue(jclass.getSigners());
-        this.protectionDomain = wrapJavaValue(jclass.getProtectionDomain());
-        this.instanceSize = jclass.instanceSize;
-        this.name = jclass.name; 
-        this.fields = jclass.fields;
-        this['wrapped-object'] = jclass;
-        this.__proto__ = this.statics;
-    }
-    
-    // returns wrapper for Java object arrays
-    function JavaObjectArrayWrapper(array) {
-        var elements = array.elements;
-        // array elements can be accessed in natural syntax
-        // also, 'length' property is supported.
-        return new JSAdapter() {
-            __getIds__ : function() {
-                var res = new Array(elements.length);
-                for (var i = 0; i < elements.length; i++) {
-                    res[i] = i;
-                }
-                return res;
-            },
-            __has__: function(name) {
-                return (typeof(name) == 'number' &&
-                        name >= 0 && name < elements.length)  ||
-                        name == 'length' || name == 'class' ||
-                        name == 'toString' || name == 'wrapped-object';
-            },
-            __get__ : function(name) {
-                if (typeof(name) == 'number' &&
-                    name >= 0 && name < elements.length) {
-                    return wrapJavaValue(elements[name]);
-                } else if (name == 'length') {
-                    return elements.length;
-                } else if (name == 'class') {
-                    return wrapJavaValue(array.clazz);
-                } else if (name == 'toString') {
-                    return function() { return array.toString(); }          
-                } else if (name == 'wrapped-object') {
-                    return array;
-                } else {
-                    return undefined;
-                }				
-            }
-        }			
-    }
-    
-    // returns wrapper for Java primitive arrays
-    function JavaValueArrayWrapper(array) {
-        var type = String(java.lang.Character.toString(array.elementType));
-        var elements = array.elements;
-        // array elements can be accessed in natural syntax
-        // also, 'length' property is supported.
-        return new JSAdapter() {
-            __getIds__ : function() {
-                var r = new Array(array.length);
-                for (var i = 0; i < array.length; i++) {
-                    r[i] = i;
-                }
-                return r;
-            },
-            __has__: function(name) {
-                return (typeof(name) == 'number' &&
-                        name >= 0 && name < array.length) ||
-                        name == 'length' || name == 'class' ||
-                        name == 'toString' || name == 'wrapped-object';
-            },
-            __get__: function(name) {
-                if (typeof(name) == 'number' &&
-                    name >= 0 && name < array.length) {
-                    return elements[name];
-                }
-    
-                if (name == 'length') {
-                    return array.length;
-                } else if (name == 'toString') {
-                    return function() { return array.valueString(true); } 
-                } else if (name == 'wrapped-object') {
-                    return array;
-                } else if (name == 'class') {
-                    return wrapJavaValue(array.clazz);
-                } else {
-                    return undefined;
-                }
-            }
-        }
-    }
-    return javaObject(thing);
-}
-
-// unwrap a script object to corresponding HAT object
-function unwrapJavaObject(jobject) {
-    if (!(jobject instanceof hatPkg.model.JavaHeapObject)) {
-        try {
-            jobject = jobject["wrapped-object"];
-        } catch (e) {
-            print("unwrapJavaObject: " + jobject + ", " + e);
-            jobject = undefined;
-        }
-    }
-    return jobject;
-}
-
-/**
- * readHeapDump parses a heap dump file and returns script wrapper object.
- *
- * @param file  Heap dump file name
- * @param stack flag to tell if allocation site traces are available
- * @param refs  flag to tell if backward references are needed or not
- * @param debug debug level for HAT
- * @return heap as a JavaScript object
- */
-function readHeapDump(file, stack, refs, debug) {
-
-    // default value of debug is 0
-    if (!debug) debug = 0;
-
-    // by default, we assume no stack traces
-    if (!stack) stack = false;
-
-    // by default, backward references are resolved
-    if (!refs) refs = true;
-
-    // read the heap dump 
-    var heap = hatPkg.parser.HprofReader.readFile(file, stack, debug);
-
-    // resolve it
-    heap.resolve(refs);
-
-    // wrap Snapshot as convenient script object
-    return wrapHeapSnapshot(heap);
-}
-
-/**
- * The result object supports the following methods:
- * 
- *  forEachClass  -- calls a callback for each Java Class
- *  forEachObject -- calls a callback for each Java object
- *  findClass -- finds Java Class of given name
- *  findObject -- finds object from given object id
- *  objects -- returns all objects of given class as an enumeration
- *  classes -- returns all classes in the heap as an enumeration
- *  reachables -- returns all objects reachable from a given object
- *  livepaths -- returns an array of live paths because of which an
- *               object alive.
- *  describeRef -- returns description for a reference from a 'from' 
- *              object to a 'to' object.
- */
-function wrapHeapSnapshot(heap) {
-    function getClazz(clazz) {
-        if (clazz == undefined) clazz = "java.lang.Object";
-        var type = typeof(clazz);
-        if (type == "string") {
-            clazz = heap.findClass(clazz);		
-        } else if (type == "object") {
-            clazz = unwrapJavaObject(clazz);
-        } else {
-            throw "class expected";;
-        }
-        return clazz;
-    }
-
-    // return heap as a script object with useful methods.
-    return {
-        snapshot: heap,
-
-        /**
-         * Class iteration: Calls callback function for each
-         * Java Class in the heap. Default callback function 
-         * is 'print'. If callback returns true, the iteration 
-         * is stopped.
-         *
-         * @param callback function to be called.
-         */
-        forEachClass: function(callback) {
-            if (callback == undefined) callback = print;
-            var classes = this.snapshot.classes;
-            while (classes.hasMoreElements()) {
-                if (callback(wrapJavaValue(classes.nextElement())))
-                    return;
-            }
-        },
-
-        /**
-         * Returns an Enumeration of all roots.
-         */
-        roots: function() {
-            var e = this.snapshot.roots;
-            return new java.util.Enumeration() {
-                hasMoreElements: function() {
-                    return e.hasMoreElements();
-                },
-                nextElement: function() {
-                    return wrapRoot(e.nextElement());
-                }
-            };
-        },
-
-        /**
-         * Returns an Enumeration for all Java classes.
-         */
-        classes: function() {
-            return wrapIterator(this.snapshot.classes, true);
-        },
-
-        /**
-         * Object iteration: Calls callback function for each
-         * Java Object in the heap. Default callback function 
-         * is 'print'.If callback returns true, the iteration 
-         * is stopped.
-         *
-         * @param callback function to be called. 
-         * @param clazz Class whose objects are retrieved.
-         *        Optional, default is 'java.lang.Object'
-         * @param includeSubtypes flag to tell if objects of subtypes
-         *        are included or not. optional, default is true.
-         */
-        forEachObject: function(callback, clazz, includeSubtypes) {
-            if (includeSubtypes == undefined) includeSubtypes = true;
-            if (callback == undefined) callback = print;
-            clazz = getClazz(clazz);
-
-            if (clazz) {
-                var instances = clazz.getInstances(includeSubtypes);
-                while (instances.hasNextElements()) {
-                    if (callback(wrapJavaValue(instances.nextElement())))
-                        return;
-                }
-            }
-        },
-
-        /** 
-         * Returns an enumeration of Java objects in the heap.
-         * 
-         * @param clazz Class whose objects are retrieved.
-         *        Optional, default is 'java.lang.Object'
-         * @param includeSubtypes flag to tell if objects of subtypes
-         *        are included or not. optional, default is true.
-         * @param where (optional) filter expression or function to
-         *        filter the objects. The expression has to return true
-         *        to include object passed to it in the result array. 
-         *        Built-in variable 'it' refers to the current object in 
-         *        filter expression.
-         */
-        objects: function(clazz, includeSubtypes, where) {
-            if (includeSubtypes == undefined) includeSubtypes = true;
-            if (where) {
-                if (typeof(where) == 'string') {
-                    where = new Function("it", "return " + where);
-                }
-            }
-            clazz = getClazz(clazz);
-            if (clazz) {
-                var instances = clazz.getInstances(includeSubtypes);
-                if (where) {
-                    return filterEnumeration(instances, where, true);
-                } else {
-                    return wrapperEnumeration(instances);
-                }
-            } else {
-                return emptyEnumeration;
-            }
-        },
-
-        /**
-         * Find Java Class of given name.
-         * 
-         * @param name class name
-         */
-        findClass: function(name) {
-            var clazz = this.snapshot.findClass(name + '');
-            return wrapJavaValue(clazz);
-        },
-
-        /**
-         * Find Java Object from given object id
-         *
-         * @param id object id as string
-         */
-        findObject: function(id) {
-            return wrapJavaValue(this.snapshot.findThing(id));
-        },
-
-        /**
-         * Returns an enumeration of objects in the finalizer
-         * queue waiting to be finalized.
-         */
-        finalizables: function() {
-            var tmp = this.snapshot.getFinalizerObjects();
-            return wrapperEnumeration(tmp);
-        },
- 
-        /**
-         * Returns an array that contains objects referred from the
-         * given Java object directly or indirectly (i.e., all 
-         * transitively referred objects are returned).
-         *
-         * @param jobject Java object whose reachables are returned.
-         */
-        reachables: function (jobject) {
-            return reachables(jobject, this.snapshot.reachableExcludes);
-        },
-
-        /**
-         * Returns array of paths of references by which the given 
-         * Java object is live. Each path itself is an array of
-         * objects in the chain of references. Each path supports
-         * toHtml method that returns html description of the path.
-         *
-         * @param jobject Java object whose live paths are returned
-         * @param weak flag to indicate whether to include paths with
-         *             weak references or not. default is false.
-         */
-        livepaths: function (jobject, weak) {
-            if (weak == undefined) {
-                weak = false;
-            }
-
-            function wrapRefChain(refChain) {
-                var path = new Array();
-
-                // compute path array from refChain
-                var tmp = refChain;
-                while (tmp != null) {
-                    var obj = tmp.obj;
-                    path[path.length] = wrapJavaValue(obj);
-                    tmp = tmp.next;
-                }
-
-                function computeDescription(html) {
-                    var root = refChain.obj.root;
-                    var desc = root.description;
-                    if (root.referer) {
-                        var ref = root.referer;
-                        desc += " (from " + 
-                            (html? toHtml(ref) : ref.toString()) + ')';
-                    }
-                    desc += '->';
-                    var tmp = refChain;
-                    while (tmp != null) {
-                        var next = tmp.next;
-                        var obj = tmp.obj;
-                        desc += html? toHtml(obj) : obj.toString();
-                        if (next != null) {
-                            desc += " (" + 
-                                    obj.describeReferenceTo(next.obj, heap)  + 
-                                    ") ->";
-                        }
-                        tmp = next;
-                    }
-                    return desc;
-                }
-
-                return new JSAdapter() {
-                    __getIds__ : function() {
-                        var res = new Array(path.length);
-                        for (var i = 0; i < path.length; i++) {
-                            res[i] = i;
-                        }
-                        return res;
-                    },
-                    __has__ : function (name) {
-                        return (typeof(name) == 'number' &&
-                            name >= 0 && name < path.length) ||
-                            name == 'length' || name == 'toHtml' ||
-                            name == 'toString';
-                    },
-                    __get__ : function(name) {
-                        if (typeof(name) == 'number' &&
-                            name >= 0 && name < path.length) {
-                            return path[name];
-                        } else if (name == 'length') {
-                            return path.length;
-                        } else if (name == 'toHtml') {
-                            return function() { 
-                               return computeDescription(true);
-                            }
-                        } else if (name == 'toString') {
-                            return function() {
-                               return computeDescription(false);
-                            }
-                        } else {
-                            return undefined;
-                        }
-                    },
-                };
-            }
-
-            jobject = unwrapJavaObject(jobject);
-            var refChains = this.snapshot.rootsetReferencesTo(jobject, weak);
-            var paths = new Array(refChains.length);
-            for (var i in refChains) {
-                paths[i] = wrapRefChain(refChains[i]);
-            }
-            return paths;
-        },
-
-        /**
-         * Return description string for reference from 'from' object
-         * to 'to' Java object.
-         *
-         * @param from source Java object
-         * @param to destination Java object
-         */
-        describeRef: function (from, to) {
-            from = unwrapJavaObject(from);
-            to = unwrapJavaObject(to);
-            return from.describeReferenceTo(to, this.snapshot);
-        },
-    };
-}
-
-// per-object functions
-
-/**
- * Returns allocation site trace (if available) of a Java object
- *
- * @param jobject object whose allocation site trace is returned
- */
-function allocTrace(jobject) {
-    try {
-        jobject = unwrapJavaObject(jobject);			
-        var trace = jobject.allocatedFrom;
-        return (trace != null) ? trace.frames : null;
-    } catch (e) {
-        print("allocTrace: " + jobject + ", " + e);
-        return null;
-    }
-}
-
-/**
- * Returns Class object for given Java object
- *
- * @param jobject object whose Class object is returned
- */
-function classof(jobject) {
-    jobject = unwrapJavaObject(jobject);
-    return wrapJavaValue(jobject.clazz);
-}
-
-/**
- * Find referers (a.k.a in-coming references). Calls callback
- * for each referrer of the given Java object. If the callback 
- * returns true, the iteration is stopped.
- *
- * @param callback function to call for each referer
- * @param jobject object whose referers are retrieved
- */
-function forEachReferrer(callback, jobject) {
-    jobject = unwrapJavaObject(jobject);
-    var refs = jobject.referers;
-    while (refs.hasMoreElements()) {
-        if (callback(wrapJavaValue(refs.nextElement()))) {
-            return;
-        }
-    }
-}
-
-/**
- * Compares two Java objects for object identity.
- *
- * @param o1, o2 objects to compare for identity
- */
-function identical(o1, o2) {
-    return objectid(o1) == objectid(o2);
-}
-
-/**
- * Returns Java object id as string
- *
- * @param jobject object whose id is returned
- */
-function objectid(jobject) {
-    try {
-        jobject = unwrapJavaObject(jobject);
-        return String(jobject.idString);
-    } catch (e) {
-        print("objectid: " + jobject + ", " + e);
-        return null;
-    }
-}
-
-/**
- * Prints allocation site trace of given object
- *
- * @param jobject object whose allocation site trace is returned
- */
-function printAllocTrace(jobject) {
-    var frames = this.allocTrace(jobject);
-    if (frames == null || frames.length == 0) {
-        print("allocation site trace unavailable for " + 
-              objectid(jobject));
-        return;
-    }    
-    print(objectid(jobject) + " was allocated at ..");
-    for (var i in frames) {
-        var frame = frames[i];
-        var src = frame.sourceFileName;
-        if (src == null) src = '<unknown source>';
-        print('\t' + frame.className + "." +
-             frame.methodName + '(' + frame.methodSignature + ') [' +
-             src + ':' + frame.lineNumber + ']');
-    }
-}
-
-/**
- * Returns an enumeration of referrers of the given Java object.
- *
- * @param jobject Java object whose referrers are returned.
- */
-function referrers(jobject) {
-    try {
-        jobject = unwrapJavaObject(jobject);
-        return wrapperEnumeration(jobject.referers);
-    } catch (e) {
-        print("referrers: " + jobject + ", " + e);
-        return emptyEnumeration;
-    }
-}
-
-/**
- * Returns an array that contains objects referred from the
- * given Java object.
- *
- * @param jobject Java object whose referees are returned.
- */
-function referees(jobject) {
-    var res = new Array();
-    jobject = unwrapJavaObject(jobject);
-    if (jobject != undefined) {
-        try {
-            jobject.visitReferencedObjects(
-                new hatPkg.model.JavaHeapObjectVisitor() {
-                    visit: function(other) { 
-                        res[res.length] = wrapJavaValue(other);
-                    },
-                    exclude: function(clazz, field) { 
-                        return false; 
-                    },
-                    mightExclude: function() { 
-                        return false; 
-                    }
-                });
-        } catch (e) {
-            print("referees: " + jobject + ", " + e);
-        }
-    }
-    return res;
-}
-
-/**
- * Returns an array that contains objects referred from the
- * given Java object directly or indirectly (i.e., all 
- * transitively referred objects are returned).
- *
- * @param jobject Java object whose reachables are returned.
- * @param excludes optional comma separated list of fields to be 
- *                 removed in reachables computation. Fields are
- *                 written as class_name.field_name form.
- */
-function reachables(jobject, excludes) {
-    if (excludes == undefined) {
-        excludes = null;
-    } else if (typeof(excludes) == 'string') {
-        var st = new java.util.StringTokenizer(excludes, ",");
-        var excludedFields = new Array();
-        while (st.hasMoreTokens()) {
-            excludedFields[excludedFields.length] = st.nextToken().trim();
-        }
-        if (excludedFields.length > 0) { 
-            excludes = new hatPkg.model.ReachableExcludes() {
-                        isExcluded: function (field) {
-                            for (var index in excludedFields) {
-                                if (field.equals(excludedFields[index])) {
-                                    return true;
-                                }
-                            }
-                            return false;
-                        }
-                    };
-        } else {
-            // nothing to filter...
-            excludes = null;
-        }
-    } else if (! (excludes instanceof hatPkg.model.ReachableExcludes)) {
-        excludes = null;
-    }
-
-    jobject = unwrapJavaObject(jobject);
-    var ro = new hatPkg.model.ReachableObjects(jobject, excludes);  
-    var tmp = ro.reachables;
-    var res = new Array(tmp.length);
-    for (var i in tmp) {
-        res[i] = wrapJavaValue(tmp[i]);
-    }
-    return res;
-}
-
-
-/**
- * Returns whether 'from' object refers to 'to' object or not.
- *
- * @param from Java object that is source of the reference.
- * @param to Java object that is destination of the reference.
- */
-function refers(from, to) {
-    try {
-        var tmp = unwrapJavaObject(from);
-        if (tmp instanceof hatPkg.model.JavaClass) {
-            from = from.statics;
-        } else if (tmp instanceof hatPkg.model.JavaValueArray) {
-            return false;
-        }
-        for (var i in from) {
-            if (identical(from[i], to)) {
-                return true;
-            }
-        }
-    } catch (e) {
-        print("refers: " + from + ", " + e);
-    }
-    return false;
-}
-
-/**
- * If rootset includes given jobject, return Root
- * object explanining the reason why it is a root.
- *
- * @param jobject object whose Root is returned
- */
-function root(jobject) {
-    try {
-        jobject = unwrapJavaObject(jobject);
-        return wrapRoot(jobject.root);
-    } catch (e) {
-        return null;
-    }
-}
-
-/**
- * Returns size of the given Java object
- *
- * @param jobject object whose size is returned
- */
-function sizeof(jobject) {
-    try {
-        jobject = unwrapJavaObject(jobject);
-        return jobject.size;
-    } catch (e) {
-        print("sizeof: " + jobject + ", " + e);
-        return null;
-    }
-}
-
-/**
- * Returns String by replacing Unicode chars and
- * HTML special chars (such as '<') with entities.
- *
- * @param str string to be encoded
- */
-function encodeHtml(str) {
-    return hatPkg.util.Misc.encodeHtml(str);
-}
-
-/**
- * Returns HTML string for the given object.
- *
- * @param obj object for which HTML string is returned.
- */
-function toHtml(obj) {
-    if (obj == null) {
-        return "null";
-    } 
-
-    if (obj == undefined) {
-        return "undefined";
-    } 
-
-    var tmp = unwrapJavaObject(obj);
-    if (tmp != undefined) {
-        var id = tmp.idString;
-        if (tmp instanceof Packages.com.sun.tools.hat.internal.model.JavaClass) {
-            var name = tmp.name;
-            return "<a href='/class/" + id + "'>class " + name + "</a>";
-        } else {
-            var name = tmp.clazz.name;
-            return "<a href='/object/" + id + "'>" +
-                   name + "@" + id + "</a>";
-        }
-    } else if ((typeof(obj) == 'object') || (obj instanceof JSAdapter)) {
-        if (obj instanceof java.lang.Object) {
-            // script wrapped Java object
-            obj = wrapIterator(obj);
-            // special case for enumeration
-            if (obj instanceof java.util.Enumeration) {
-                var res = "[ ";
-                while (obj.hasMoreElements()) {
-                    res += toHtml(obj.nextElement()) + ", ";
-                }
-                res += "]";
-                return res; 
-            } else {
-                return obj;
-            }
-        } else if (obj instanceof Array) {
-            // script array
-            var res = "[ ";
-            for (var i in obj) {
-                res += toHtml(obj[i]);
-                if (i != obj.length - 1) {
-                    res += ", ";
-                }
-            } 
-            res += " ]";
-            return res;
-        } else {
-            // if the object has a toHtml function property
-            // just use that...
-            if (typeof(obj.toHtml) == 'function') {
-                return obj.toHtml();
-            } else {
-                // script object
-                var res = "{ ";
-                for (var i in obj) {
-                    res +=  i + ":" + toHtml(obj[i]) + ", ";
-                }
-                res += "}";
-                return res;
-            }
-        }
-    } else {
-        // JavaScript primitive value
-        return obj;
-    }
-}
-
-/*
- * Generic array/iterator/enumeration [or even object!] manipulation 
- * functions. These functions accept an array/iteration/enumeration
- * and expression String or function. These functions iterate each 
- * element of array and apply the expression/function on each element.
- */
-
-// private function to wrap an Iterator as an Enumeration
-function wrapIterator(itr, wrap) {
-    if (itr instanceof java.util.Iterator) {
-        return new java.util.Enumeration() {
-                   hasMoreElements: function() {
-                       return itr.hasNext();
-                   },
-                   nextElement: function() {
-                       return wrap? wrapJavaValue(itr.next()) : itr.next();
-                   }
-               };
-    } else {
-        return itr;
-    }
-}
-
-/**
- * Converts an enumeration/iterator/object into an array
- *
- * @param obj enumeration/iterator/object
- * @return array that contains values of enumeration/iterator/object
- */
-function toArray(obj) {	
-    obj = wrapIterator(obj);
-    if (obj instanceof java.util.Enumeration) {
-        var res = new Array();
-        while (obj.hasMoreElements()) {
-            res[res.length] = obj.nextElement();
-        }
-        return res;
-    } else if (obj instanceof Array) {
-        return obj;
-    } else {
-        var res = new Array();
-        for (var index in obj) {
-            res[res.length] = obj[index];
-        }
-        return res;
-    }
-}
-
-/**
- * Returns whether the given array/iterator/enumeration contains 
- * an element that satisfies the given boolean expression specified 
- * in code. 
- *
- * @param array input array/iterator/enumeration that is iterated
- * @param code  expression string or function 
- * @return boolean result
- *
- * The code evaluated can refer to the following built-in variables. 
- *
- * 'it' -> currently visited element
- * 'index' -> index of the current element
- * 'array' -> array that is being iterated
- */
-function contains(array, code) {
-    array = wrapIterator(array);
-    var func = code;
-    if (typeof(func) != 'function') {
-        func = new Function("it", "index", "array",  "return " + code);
-    }
-
-    if (array instanceof java.util.Enumeration) {
-        var index = 0;
-        while (array.hasMoreElements()) {
-            var it = array.nextElement();
-            if (func(it, index, array)) {
-                return true;
-            }
-            index++;
-        }
-    } else {
-        for (var index in array) {
-            var it = array[index];
-            if (func(it, index, array)) {
-                return true;
-            }
-        }
-    }
-    return false;
-}
-
-/**
- * concatenates two arrays/iterators/enumerators.
- *
- * @param array1 array/iterator/enumeration
- * @param array2 array/iterator/enumeration
- *
- * @return concatenated array or composite enumeration
- */
-function concat(array1, array2) {
-    array1 = wrapIterator(array1);
-    array2 = wrapIterator(array2);
-    if (array1 instanceof Array && array2 instanceof Array) {
-        return array1.concat(array2);
-    } else if (array1 instanceof java.util.Enumeration &&
-               array2 instanceof java.util.Enumeration) {
-        return new Packages.com.sun.tools.hat.internal.util.CompositeEnumeration(array1, array2);
-    } else {
-        return undefined;
-    }
-}
-
-/**
- * Returns the number of array/iterator/enumeration elements 
- * that satisfy the given boolean expression specified in code. 
- * The code evaluated can refer to the following built-in variables. 
- *
- * @param array input array/iterator/enumeration that is iterated
- * @param code  expression string or function 
- * @return number of elements
- *
- * 'it' -> currently visited element
- * 'index' -> index of the current element
- * 'array' -> array that is being iterated
- */
-function count(array, code) {
-    if (code == undefined) {
-        return length(array);
-    }
-    array = wrapIterator(array);
-    var func = code;
-    if (typeof(func) != 'function') {
-        func = new Function("it", "index", "array",  "return " + code);
-    }
-
-    var result = 0;
-    if (array instanceof java.util.Enumeration) {
-        var index = 0;
-        while (array.hasMoreElements()) {
-            var it = array.nextElement();
-            if (func(it, index, array)) {
-                result++;
-            }
-            index++;
-        }
-    } else {
-        for (var index in array) {
-            var it = array[index];
-            if (func(it, index, array)) {
-                result++;
-            }
-        }
-    }
-    return result;
-}
-
-/**
- * filter function returns an array/enumeration that contains 
- * elements of the input array/iterator/enumeration that satisfy 
- * the given boolean expression. The boolean expression code can 
- * refer to the following built-in variables. 
- *
- * @param array input array/iterator/enumeration that is iterated
- * @param code  expression string or function 
- * @return array/enumeration that contains the filtered elements
- *
- * 'it' -> currently visited element
- * 'index' -> index of the current element
- * 'array' -> array that is being iterated
- * 'result' -> result array
- */
-function filter(array, code) {
-    array = wrapIterator(array);
-    var func = code;
-    if (typeof(code) != 'function') {
-        func = new Function("it", "index", "array", "result", "return " + code);
-    }
-    if (array instanceof java.util.Enumeration) {
-        return filterEnumeration(array, func, false);
-    } else {
-        var result = new Array();
-        for (var index in array) {
-            var it = array[index];
-            if (func(it, index, array, result)) {
-                result[result.length] = it;
-            }
-        }
-        return result;
-    }
-}
-
-/**
- * Returns the number of elements of array/iterator/enumeration.
- *
- * @param array input array/iterator/enumeration that is iterated
- */
-function length(array) {
-    array = wrapIterator(array);
-    if (array instanceof Array) {
-        return array.length;
-    } else if (array instanceof java.util.Enumeration) {
-        var cnt = 0;
-        while (array.hasMoreElements()) {
-            array.nextElement(); 
-            cnt++;
-        }
-        return cnt;
-    } else {
-        var cnt = 0;
-        for (var index in array) {
-            cnt++;
-        }
-        return cnt;
-    }
-}
-
-/**
- * Transforms the given object or array by evaluating given code
- * on each element of the object or array. The code evaluated
- * can refer to the following built-in variables. 
- *
- * @param array input array/iterator/enumeration that is iterated
- * @param code  expression string or function 
- * @return array/enumeration that contains mapped values
- *
- * 'it' -> currently visited element
- * 'index' -> index of the current element
- * 'array' -> array that is being iterated
- * 'result' -> result array
- *
- * map function returns an array/enumeration of values created 
- * by repeatedly calling code on each element of the input
- * array/iterator/enumeration.
- */
-function map(array, code) {
-    array = wrapIterator(array);
-    var func = code;
-    if(typeof(code) != 'function') {
-        func = new Function("it", "index", "array", "result", "return " + code);
-    }
-
-    if (array instanceof java.util.Enumeration) {
-        var index = 0;
-        var result = new java.util.Enumeration() {
-            hasMoreElements: function() {
-                return array.hasMoreElements();
-            },
-            nextElement: function() {
-                return func(array.nextElement(), index++, array, result);
-            }
-        };
-        return result;
-    } else {
-        var result = new Array();
-        for (var index in array) {
-            var it = array[index];
-            result[result.length] = func(it, index, array, result);
-        }
-        return result;
-    }
-}
-
-// private function used by min, max functions
-function minmax(array, code) {
-    if (typeof(code) == 'string') {
-        code = new Function("lhs", "rhs", "return " + code);
-    }
-    array = wrapIterator(array);
-    if (array instanceof java.util.Enumeration) {
-        if (! array.hasMoreElements()) {
-            return undefined;
-        }
-        var res = array.nextElement();
-        while (array.hasMoreElements()) {
-            var next = array.nextElement();
-            if (code(next, res)) {
-                res = next;
-            }
-        }
-        return res;
-    } else {
-        if (array.length == 0) {
-            return undefined;
-        }
-        var res = array[0];
-        for (var index = 1; index < array.length; index++) {
-            if (code(array[index], res)) {
-                res = array[index];
-            }
-        } 
-        return res;
-    }
-}
-
-/**
- * Returns the maximum element of the array/iterator/enumeration
- *
- * @param array input array/iterator/enumeration that is iterated
- * @param code (optional) comparision expression or function
- *        by default numerical maximum is computed.
- */
-function max(array, code) {
-    if (code == undefined) {
-        code = function (lhs, rhs) { return lhs > rhs; }
-    }
-    return minmax(array, code);
-}
-
-/**
- * Returns the minimum element of the array/iterator/enumeration
- *
- * @param array input array/iterator/enumeration that is iterated
- * @param code (optional) comparision expression or function
- *        by default numerical minimum is computed.
- */
-function min(array, code) {
-    if (code == undefined) {
-        code = function (lhs, rhs) { return lhs < rhs; }
-    } 
-    return minmax(array, code);
-}
-
-/**
- * sort function sorts the input array. optionally accepts
- * code to compare the elements. If code is not supplied,
- * numerical sort is done.
- *
- * @param array input array/iterator/enumeration that is sorted
- * @param code  expression string or function 
- * @return sorted array 
- *
- * The comparison expression can refer to the following
- * built-in variables:
- *
- * 'lhs' -> 'left side' element
- * 'rhs' -> 'right side' element
- */
-function sort(array, code) {
-    // we need an array to sort, so convert non-arrays
-    array = toArray(array);
-
-    // by default use numerical comparison
-    var func = code;
-    if (code == undefined) {
-        func = function(lhs, rhs) { return lhs - rhs; };
-    } else if (typeof(code) == 'string') {
-        func = new Function("lhs", "rhs", "return " + code);
-    }
-    return array.sort(func);
-}
-
-/**
- * Returns the sum of the elements of the array
- *
- * @param array input array that is summed.
- * @param code optional expression used to map
- *        input elements before sum.
- */
-function sum(array, code) {
-    array = wrapIterator(array);
-    if (code != undefined) {
-        array = map(array, code);
-    }
-    var result = 0;
-    if (array instanceof java.util.Enumeration) {
-        while (array.hasMoreElements()) {
-            result += Number(array.nextElement());
-        }
-    } else {
-        for (var index in array) {
-            result += Number(array[index]);
-        }
-    }
-    return result;
-}
-
-/**
- * Returns array of unique elements from the given input 
- * array/iterator/enumeration.
- *
- * @param array from which unique elements are returned.
- * @param code optional expression (or function) giving unique
- *             attribute/property for each element.
- *             by default, objectid is used for uniqueness.
- */
-function unique(array, code) {
-    array = wrapIterator(array);
-    if (code == undefined) {
-        code = new Function("it", "return objectid(it);");
-    } else if (typeof(code) == 'string') {
-        code = new Function("it", "return " + code);
-    }
-    var tmp = new Object();
-    if (array instanceof java.util.Enumeration) {
-        while (array.hasMoreElements()) {
-            var it = array.nextElement();
-            tmp[code(it)] = it;
-        }
-    } else {
-        for (var index in array) {
-            var it = array[index];
-            tmp[code(it)] = it;
-        }
-    }
-    var res = new Array();
-    for (var index in tmp) {
-        res[res.length] = tmp[index];
-    }
-    return res;
-}
diff --git a/ojluni/src/main/java/com/sun/tools/hat/resources/oqlhelp.html b/ojluni/src/main/java/com/sun/tools/hat/resources/oqlhelp.html
deleted file mode 100755
index 3937f4a..0000000
--- a/ojluni/src/main/java/com/sun/tools/hat/resources/oqlhelp.html
+++ /dev/null
@@ -1,809 +0,0 @@
-<!--
-Copyright (c) 2005, 2006, 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.
--->
-
-<html>
-<head>
-<style>
-.key  { color: red; font-weight: bold }
-</style>
-<title>
-Object Query Language (OQL)
-</title>
-</head>
-<body>
-<h1>Object Query Language (OQL)</h1>
-
-<p>
-OQL is SQL-like query language to query Java heap. OQL allows to filter/select information
-wanted from Java heap. While pre-defined queries such as "show all instances of class X"
-are already supported by HAT, OQL adds more flexibility. OQL is based on JavaScript expression
-language.
-</p>
-
-<p>
-OQL query is of the form
-
-<pre>
-<code>
-         <span class="key">select</span> &lt;JavaScript expression to select&gt;
-         [ <span class="key">from</span> [<span class="key">instanceof</span>] &lt;class name&gt; &lt;identifier&gt;
-         [ <span class="key">where</span> &lt;JavaScript boolean expression to filter&gt; ] ]
-</code>
-</pre>
-where class name is fully qualified Java class name (example: java.net.URL) or array class name.
-[C is char array name, [Ljava.io.File; is name of java.io.File[] and so on. 
-Note that fully qualified class name does not always uniquely identify a 
-Java class at runtime. There may be more than one Java class with the same 
-name but loaded by different loaders. So, class name is permitted to be
-id string of the class object.
-
-If <span class="key">instanceof</span> keyword is used, subtype objects are selected. If this 
-keyword is not specified, only the instances of exact class specified are selected. Both
-<span class="key">from</span> and <span class="key">where</span> clauses are optional.
-</p>
-
-
-<p>
-In <span class="key">select</span> and (optional) <span class="key">where</span> clauses, the expression 
-used in JavaScript expression. Java heap objects are wrapped as convenient script objects so that 
-fields may be accessed in natural syntax. For example, Java fields can be accessed with obj.field_name 
-syntax and array elements can be accessed with array[index] syntax. Each Java object selected is 
-bound to a JavaScript variable of the identifier name specified in <span class="key">from</span> clause.
-</p>
-
-<h2>OQL Examples</h2>
-
-<ul>
-<li>select all Strings of length 100 or more
-<pre>
-<code>
-    select s from java.lang.String s where s.count >= 100
-</code>
-</pre>
-<li>select all int arrays of length 256 or more
-<pre>
-<code>
-    select a from [I a where a.length >= 256
-</code>
-</pre>
-<li>show content of Strings that match a regular expression
-<pre>
-<code>
-    select s.value.toString() from java.lang.String s 
-    where /java/(s.value.toString())
-</code>
-</pre>
-<li>show path value of all File objects
-<pre>
-<code</b>
-    select file.path.value.toString() from java.io.File file
-</code>
-</pre>
-<li>show names of all ClassLoader classes
-<pre>
-<code>
-    select <a href="#classof">classof</a>(cl).name 
-    from instanceof java.lang.ClassLoader cl
-</code>
-</pre>
-<li>show instances of the Class identified by given id string
-<pre>
-<code>
-    select o from instanceof 0xd404b198 o
-</code>
-</pre>
-Note that 0xd404b198 is id of a Class (in a session). This is found by
-looking at the id shown in that class's page.
-</ul>
-
-<h2>OQL built-in objects, functions</h2>
-
-<h3>heap object</h3>
-
-The <b>heap</b> built-in object supports the following methods:
-
-<ul> 
-<li><b>heap.forEachClass</b> -- calls a callback function for each Java Class
-<pre>
-<code>
-    heap.forEachClass(callback);
-</code>
-</pre>
-<li><b>heap.forEachObject</b> -- calls a callback function for each Java object
-<pre>
-<code>
-    heap.forEachObject(callback, clazz, includeSubtypes);
-</code>
-</pre>
-<code>clazz</code> is the class whose instances are selected. If not specified, defaults to java.lang.Object. <code>includeSubtypes</code> is a boolean flag 
-that specifies whether to include subtype instances or not. Default value of 
-this flag is true.
-<a name="findClass"></a>
-<li><b>heap.findClass</b> -- finds Java Class of given name
-<pre>
-<code>
-    heap.findClass(className);
-</code>
-</pre>
-where <code>className</code> is name of the class to find. The resulting Class 
-object has following properties:
-<ul>
-<li>name - name of the class.
-<li>superclass - Class object for super class (or null if java.lang.Object).
-<li>statics - name, value pairs for static fields of the Class.
-<li>fields - array of field objects. field object has name, signature
-properties.
-<li>loader - ClassLoader object that loaded this class.
-<li>signers - signers that signed this class.
-<li>protectionDomain - protection domain to which this class belongs.
-</ul>
-Class objects have the following methods:
-<ul>
-<li>isSubclassOf - tests whether given class is direct or indirect 
-subclass of this class or not.
-<li>isSuperclassOf - tests whether given Class is direct or indirect
-superclass of this class or not.
-<li>subclasses - returns array of direct and indirect subclasses.
-<li>superclasses - returns array of direct and indirect superclasses.
-</ul>
-<a name="findObject"></a>
-<li><b>heap.findObject</b> -- finds object from given object id
-<pre>
-<code>
-    heap.findObject(stringIdOfObject);
-</code>
-</pre>
-<a name="classes"></a>
-<li><b>heap.classes</b> -- returns an enumeration of all Java classes
-<a name="objects"></a>
-<li><b>heap.objects</b> -- returns an enumeration of Java objects 
-<pre>
-<code>
-    heap.objects(clazz, [includeSubtypes], [filter])
-</code>
-</pre>
-<code>clazz</code> is the class whose instances are selected. If not specified, defaults to java.lang.Object. <code>includeSubtypes</code> is a boolean flag 
-that specifies whether to include subtype instances or not. Default value of 
-this flag is true. This method accepts an optional filter expression to filter
-the result set of objects.
-<a name="finalizables"></a>
-<li><b>heap.finalizables</b> -- returns an enumeration of Java objects that are
-pending to be finalized.
-<li><b>heap.livepaths</b> -- return an array of paths by which a given object 
-is alive. This method accepts optional second parameter that is a boolean
-flag. This flag tells whether to include paths with weak reference(s) or not.
-By default, paths with weak reference(s) are not included.
-<pre>
-<code>
-    select heap.livepaths(s) from java.lang.String s
-</code>
-</pre>
-Each element of this array itself is another array. The later array is 
-contains an objects that are in the 'reference chain' of the path.
-<li><b>heap.roots</b> -- returns an Enumeration of Roots of the heap. 
-<a name="rootobj"></a>
-Each Root object has the following properties:
-<ul>
-<li>id - String id of the object that is referred by this root
-<li>type - descriptive type of Root (JNI Global, JNI Local, Java Static etc)
-<li>description - String description of the Root
-<li>referrer - Thread Object or Class object that is responsible for this root or null
-</ul>
-</ul>
-
-Examples:
-<ul>
-<li>access static field 'props' of class java.lang.System
-<pre>
-<code>
-    select heap.findClass("java.lang.System").statics.props
-    select heap.findClass("java.lang.System").props
-</code>
-</pre>
-<li>get number of fields of java.lang.String class 
-<pre>
-<code>
-    select heap.findClass("java.lang.String").fields.length
-</code>
-</pre>
-<li> find the object whose object id is given
-<pre>
-<code>
-    select heap.findObject("0xf3800b58")
-</code>
-</pre>
-<li>select all classes that have name pattern java.net.*
-<pre>
-<code>
-    select <a href="#filter">filter</a>(heap.classes(), "/java.net./(it.name)")
-</code>
-</pre>
-</ul>
-
-<h3>functions on individual objects</h3>
-
-<ul>
-<li><a href="#allocTrace">allocTrace(jobject)</a>
-<li><a href="#classof">classof(jobject)</a>
-<li><a href="#forEachReferrer">forEachReferrer(callback, jobject)</a>
-<li><a href="#identical">identical(o1, o2)</a>
-<li><a href="#objectid">objectid(jobject)</a>
-<li><a href="#reachables">reachables(jobject, excludedFields)</a>
-<li><a href="#referrers">referrers(jobject)</a>
-<li><a href="#referees">referees(jobject)</a>
-<li><a href="#refers">refers(jobject)</a>
-<li><a href="#root">root(jobject)</a>
-<li><a href="#sizeof">sizeof(jobject)</a>
-<li><a href="#toHtml">toHtml(obj)</a>
-</ul>
-
-<a name="allocTrace"></a>
-<h4>allocTrace function</h4>
-
-This returns allocation site trace of a given Java object if available.
-allocTrace returns array of frame objects. Each frame object has the following
-properties:
-<ul>
-<li>className - name of the Java class whose method is running in the frame.
-<li>methodName - name of the Java method running in the frame.
-<li>methodSignature - signature of the Java method running in the frame.
-<li>sourceFileName - name of source file of the Java class running in the frame.
-<li>lineNumber - source line number within the method.
-</ul>
-
-<a name="classof"></a>
-<h4>classof function</h4>
-
-Returns Class object of a given Java Object. The result object supports the
-following properties:
-<ul>
-<li>name - name of the class.
-<li>superclass - Class object for super class (or null if java.lang.Object).
-<li>statics - name, value pairs for static fields of the Class.
-<li>fields - array of field objects. Field objects have name, signature
-properties.
-<li>loader - ClassLoader object that loaded this class.
-<li>signers - signers that signed this class.
-<li>protectionDomain - protection domain to which this class belongs.
-</ul>
-Class objects have the following methods:
-<ul>
-<li>isSubclassOf - tests whether given class is direct or indirect 
-subclass of this class or not.
-<li>isSuperclassOf - tests whether given Class is direct or indirect
-superclass of this class or not.
-<li>subclasses - returns array of direct and indirect subclasses.
-<li>superclasses - returns array of direct and indirect superclasses.
-</ul>
-
-Examples:
-<ul>
-<li>show class name of each Reference type object
-<pre>
-<code>
-    select classof(o).name from instanceof java.lang.ref.Reference o
-</code>
-<li>show all subclasses of java.io.InputStream
-<pre>
-<code>
-    select heap.findClass("java.io.InputStream").subclasses()
-</code>
-<li>show all superclasses of java.io.BufferedInputStream
-<pre>
-<code>
-    select heap.findClass("java.io.BufferedInputStream").superclasses()
-</code>
-</pre>
-</ul>
-
-<a name="forEachReferrer"></a>
-<h4>forEachReferrer function</h4>
-
-calls a callback function for each referrer of a given Java object.
-
-<a name="identical"></a>
-<h4>identical function</h4>
-<p>
-Returns whether two given Java objects are identical or not.
-</p>
-Example:
-<pre>
-<code>
-    select identical(heap.findClass("Foo").statics.bar, heap.findClass("AnotherClass").statics.bar)
-</code>
-</pre>
-
-<a name="objectid"></a>
-<h4>objectid function</h4>
-
-<p>
-Returns String id of a given Java object. This id can be passed to
-<a href="#findObject">heap.findObject</a> and may also be used to compare
-objects for identity.
-</p>
-Example:
-<pre>
-<code>
-    select objectid(o) from java.lang.Object o
-</code>
-</pre>
-
-<a name="reachables"></a>
-<h4>reachables function</h4>
-<p>
-Returns an array of Java objects that are transitively referred from the
-given Java object. Optionally accepts a second parameter that is comma
-separated field names to be excluded from reachability computation.
-Fields are written in class_name.field_name pattern.
-</p>
-Examples: 
-<ul>
-<li>print all reachable objects from each Properties instance.
-<pre>
-<code>
-    select reachables(p) from java.util.Properties p
-</code>
-</pre>
-<li>print all reachables from each java.net.URL but omit the objects reachable
-via the fields specified.
-<pre>
-<code>
-    select reachables(u, 'java.net.URL.handler') from java.net.URL u
-</code>
-</pre>
-</ul>
-
-<a name="referrers"></a>
-<h4>referrers function</h4>
-<p>
-Returns an enumeration of Java objects that hold reference to a given Java
-object.
-</p>
-Examples:
-<ul>
-<li> print number of referrers for each java.lang.Object instance
-<pre>
-<code>
-    select count(referrers(o)) from java.lang.Object o
-</code>
-</pre>
-<li>print referrers for each java.io.File object
-<pre>
-<code>
-    select referrers(f) from java.io.File f
-</code>
-</pre>
-<li>print URL objects only if referred by 2 or more 
-<pre>
-<code>
-    select u from java.net.URL u where count(referrers(u)) > 2
-</code>
-</pre>
-</ul>
-
-<a name="referees"></a>
-<h4>referees function</h4>
-<p>
-Returns an array of Java objects to which the given Java
-object directly refers to.
-</p>
-Example: to print all static reference fields of java.io.File class
-<pre>
-<code>
-    select referees(<a href="#findClass">heap.findClass</a>("java.io.File"))
-</code>
-</pre>
-
-<a name="refers"></a>
-<h4>refers function</h4>
-<p>
-Returns whether first Java object refers to second Java object or not.
-</p>
-
-<a name="root"></a>
-<h4>root function</h4>
-<p>
-If given object is a member of root set of objects, this function returns
-a descriptive <a href="#rootobj">Root object</a> describing why it is so.
-If given object is not a root, then this function returns null.
-</p>
-
-<a name="sizeof"></a>
-<h4>sizeof function</h4>
-
-Returns size of the given Java object in bytes
-Example: 
-<pre>
-<code>
-    select sizeof(o) from [I o
-</code>
-</pre>
-
-<a name="toHtml"></a>
-<h4>toHtml function</h4>
-
-Returns HTML string for the given Java object. Note that this is called
-automatically for objects selected by select expression. But, it may be useful
-to print more complex output.
-
-Example: print hyperlink in bold font weight
-<pre>
-<code>
-    select "&lt;b&gt;" + toHtml(o) + "&lt;/b&gt;" from java.lang.Object o
-</code>
-</pre>
-
-<h3>Selecting multiple values</h3>
-<p>
-Multiple values can be selected using JavaScript object literals or arrays.
-</p>
-
-Example: show name and thread for each thread object
-<pre>
-<code>
-    select { name: t.name? t.name.toString() : "null", thread: t } 
-    from instanceof java.lang.Thread t
-</code>
-</pre>
-
-<h3>array/iterator/enumeration manipulation functions</h3>
-
-<p>
-These functions accept an array/iterator/enumeration and an 
-expression string [or a callback function] as input. These functions iterate 
-the array/iterator/enumeration and apply the expression (or function) on 
-each element. Note that JavaScript objects are associative arrays. So, 
-these functions may also be used with arbitrary JavaScript objects.
-</p>
-
-<ul>
-<li><a href="#concat">concat(array1/enumeration1, array2/enumeration2)</a>
-<li><a href="#contains">contains(array/enumeration, expression)</a>
-<li><a href="#count">count(array/enumeration, expression)</a>
-<li><a href="#filter">filter(array/enumeration, expression)</a>
-<li><a href="#length">length(array/enumeration)</a>
-<li><a href="#map">map(array/enumeration, expression)</a>
-<li><a href="#max">max(array/enumeration, [expression])</a>
-<li><a href="#min">min(array/enumeration, [expression])</a>
-<li><a href="#sort">sort(array/enumeration, [expression])</a>
-<li><a href="#sum">sum(array/enumeration, [expression])</a>
-<li><a href="#toArray">toArray(array/enumeration)</a>
-<li><a href="#unique">unique(array/enumeration, [expression])</a>
-</ul>
-
-<a name="concat"></a>
-<h4>concat function</h4>
-<p>
-Concatenates two arrays or enumerations (i.e., returns composite
-enumeration).
-</p>
-
-<a name="contains"></a>
-<h4>contains function</h4>
-<p>
-Returns whether the given array/enumeration contains an element
-the given boolean expression specified in code. The code evaluated
-can refer to the following built-in variables.
-</p>
-<ul>
-<li>it -> currently visited element
-<li>index -> index of the current element
-<li>array -> array/enumeration that is being iterated
-</ul>
-Example: select all Properties objects that are referred by 
-some static field some class.
-<pre>
-<code>
-    select p from java.util.Properties p
-    where contains(<a href="#referrers">referrers</a>(p), "<a href="#classof">classof</a>(it).name == 'java.lang.Class'")
-</code>
-</pre>
-
-<a name="count"></a>
-<h4>count function</h4>
-<p>
-count function returns the count of elements of the input array/enumeration 
-that satisfy the given boolean expression. The boolean expression code can 
-refer to the following built-in variables.
-</p>
-<ul>
-<li>it -> currently visited element
-<li>index -> index of the current element
-<li>array -> array/enumeration that is being iterated
-</ul>
-Example: print number of classes that have specific name pattern
-<pre>
-<code>
-    select count(<a href="#classes">heap.classes()</a>, "/java.io./(it.name)")
-</code>
-</pre>
-
-<a name="filter"></a>
-<h4>filter function</h4>
-<p>
-filter function returns an array/enumeration that contains elements 
-of the input array/enumeration that satisfy the given boolean 
-expression. The boolean expression code can refer to the following built-in
-variables.
-</p>
-<ul>
-<li>it -> currently visited element
-<li>index -> index of the current element
-<li>array -> array/enumeration that is being iterated
-<li>result -> result array/enumeration
-</ul>
-Examples:
-<ul>
-<li>show all classes that have java.io.* name pattern
-<pre>
-<code>
-    select filter(<a href="#classes">heap.classes</a>(), "/java.io./(it.name)")
-</code>
-</pre>
-<li> show all referrers of URL object where the referrer is not from
-java.net package
-<pre>
-<code>
-    select filter(<a href="#referrers">referrers</a>(u), "! /java.net./(<a href="#classof">classof</a>(it).name)")
-    from java.net.URL u
-</code>
-</pre>
-</ul>
-
-<a name="length"></a>
-<h4>length function</h4>
-<p>
-length function returns number of elements of an array/enumeration.
-</p>
-
-<a name="map"></a>
-<h4>map function</h4>
-<p>
-Transforms the given array/enumeration by evaluating given code
-on each element. The code evaluated can refer to the following built-in 
-variables.
-</p>
-<ul>
-<li>it -> currently visited element
-<li>index -> index of the current element
-<li>array -> array/enumeration that is being iterated
-<li>result -> result array/enumeration
-</ul>
-<p>
-map function returns an array/enumeration of values created by repeatedly
-calling code on each element of input array/enumeration.
-</p>
-Example: show all static fields of java.io.File with name and value
-<pre>
-<code>
-    select map(<a href="#findClass">heap.findClass</a>("java.io.File").statics, "index + '=' + <a href="#toHtml">toHtml</a>(it)")
-</code>
-</pre>
-
-<a name="max"></a>
-<h4>max function</h4>
-<p>
-returns the maximum element of the  given array/enumeration. 
-Optionally accepts code expression to compare elements of the array. 
-By default numerical comparison is used. The comparison expression can 
-use the following built-in variables:
-</p>
-<ul>
-<li>lhs -> left side element for comparison
-<li>rhs -> right side element for comparison
-</ul>
-Examples:
-<ul>
-<li>find the maximum length of any String instance
-<pre>
-<code>
-    select max(map(heap.objects('java.lang.String', false), 'it.count'))
-</code>
-</pre>
-<li>find string instance that has the maximum length
-<pre>
-<code>
-    select max(heap.objects('java.lang.String'), 'lhs.count > rhs.count')
-</code>
-</pre>
-</ul>
-
-<a name="min"></a>
-<h4>min function</h4>
-<p>
-returns the minimum element of the  given array/enumeration. Optionally 
-accepts code expression to compare elements of the array. By default numerical
-comparison is used. The comparison expression can use the following built-in 
-variables:
-</p>
-<ul>
-<li>lhs -> left side element for comparison
-<li>rhs -> right side element for comparison
-</ul>
-Examples:
-<ul>
-<li>find the minimum size of any Vector instance
-<pre>
-<code>
-    select min(map(heap.objects('java.util.Vector', false), 'it.elementData.length'))
-</code>
-</pre>
-<li>find Vector instance that has the maximum length
-<pre>
-<code>
-    select min(heap.objects('java.util.Vector'), 'lhs.elementData.length < rhs.elementData.length')
-</code>
-</ul>
-
-<a name="sort"></a>
-<h4>sort function</h4>
-<p>
-sorts given array/enumeration. Optionally accepts code expression to
-compare elements of the array. By default numerical comparison is used.
-The comparison expression can use the following built-in variables:
-</p>
-<ul>
-<li>lhs -> left side element for comparison
-<li>rhs -> right side element for comparison
-</ul>
-Examples:
-<ul>
-<li> print all char[] objects in the order of size.
-<pre>
-<code>
-    select sort(<a href="#objects">heap.objects</a>('[C'), '<a href="#sizeof">sizeof</a>(lhs) - sizeof(rhs)')
-</code>
-</pre>
-<li> print all char[] objects in the order of size but print
-size as well.
-<pre>
-<code>
-    select <a href="#map">map</a>(sort(<a href="#objects">heap.objects</a>('[C'), '<a href="#sizeof">sizeof</a>(lhs) - sizeof(rhs)'), '{ size: sizeof(it), obj: it }')
-</code>
-</pre>
-</ul>
-
-<a name="sum"></a>
-<h4>sum function</h4>
-<p>
-This function returns the sum of all the elements of the given input array or
-enumeration. Optionally, accepts an expression as second param. This is used
-to map the input elements before summing those.
-</p>
-Example: return sum of sizes of the reachable objects from each Properties object
-<pre>
-<code>
-    select sum(<a href="#map">map</a>(<a href="#reachables">reachables</a>(p), '<a href="#sizeof">sizeof</a>(it)')) 
-    from java.util.Properties p
-
-    // or omit the map as in ...
-    select sum(<a href="#reachables">reachables</a>(p), '<a href="#sizeof">sizeof</a>(it)') 
-    from java.util.Properties p
-</code>
-</code>
-</pre>
-
-<a name="toArray"></a>
-<h4>toArray function</h4>
-<p>
-This function returns an array that contains elements of the input
-array/enumeration.
-</p>
-
-<a name="unique"></a>
-<h4>unique function</h4>
-<p>
-This function returns an array/enumeration containing unique elements of the 
-given input array/enumeration
-</p>
-Example: select unique char[] instances referenced from Strings. Note that
-more than one String instance can share the same char[] for the content.
-<pre>
-<code>
-   // number of unique char[] instances referenced from any String
-   select count(unique(map(heap.objects('java.lang.String'), 'it.value')))
-
-   // total number of Strings
-   select count(heap.objects('java.lang.String'))
-</code>
-</pre>
-    
-<h3>More complex examples</h3>
-
-<h4>Print histogram of each class loader and number of classes loaded by it</h4>
-
-<pre>
-<code>
-   select <a href="#map">map</a>(<a href="#sort">sort</a>(map(heap.objects('java.lang.ClassLoader'), 
-   '{ loader: it, count: it.classes.elementCount }'), 'lhs.count < rhs.count'),
-   'toHtml(it) + "&lt;br&gt;"')
-</code>
-</pre>
-<p>
-The above query uses the fact that, <b>java.lang.ClassLoader</b> has a private 
-field called <b>classes</b> of type <b>java.util.Vector</b> and Vector has a 
-private field named <b>elementCount</b> that is number of elements in the 
-vector. We select multiple values (loader, count) using JavaScript object 
-literal and map function. We sort the result by count (i.e., number of classes 
-loaded) using sort function with comparison expression.
-</p>
-
-<h4>Show parent-child chain for each class loader instance</h4>
-
-<pre>
-<code>
-   select <a href="#map">map</a>(heap.objects('java.lang.ClassLoader'),
-      function (it) {
-         var res = '';
-         while (it != null) {
-            res += toHtml(it) + "-&gt;";
-            it = it.parent;
-         }
-         res += "null";
-         return res + "&lt;br&gt;";
-      })
-</code>
-</pre>
-<p>
-Note that we use <b>parent</b> field of <b>java.lang.ClassLoader</b> class
-and walk until parent is null using the callback function to map call.
-</p>
-
-<h4>Printing value of all System properties</h4>
-
-<pre>
-<code>
-   select <a href="#map">map</a>(<a href="#filter">filter(<a href="#findClass">heap.findClass</a>('java.lang.System').props.table, 'it != null'), 
-            function (it) {
-                var res = "";
-                while (it != null) {
-                    res += it.key.value.toString() + '=' +
-                           it.value.value.toString() + '&lt;br&gt;';
-                    it = it.next;
-                }
-                return res;
-            });
-</code>
-</pre>
-<p>
-The above query uses the following facts:
-<ul>
-<li>java.lang.System has static field by name 'props' of type java.util.Properties.
-<li>java.util.Properties has field by 'table' of type java.util.Hashtable$Entry
-(this field is inherited from java.util.Hashtable). This is the hashtable
-buckets array.
-<li>java.util.Hashtable$Entry has 'key', 'value' and 'next' fields. Each
-entry points the next entry (or null) in the same hashtable bucket.
-<li>java.lang.String class has 'value' field of type char[].
-</ul>
-<p>
-<b>Note that this query (and many other queries) may not be stable - because
-private fields of Java platform classes may be modified/removed without any
-notification! (implementation detail)</b>. But, using such queries on user 
-classes may be safe - given that user has the control over the classes.
-</p>
-
-</body>
-</html>
diff --git a/ojluni/src/main/java/com/sun/tools/hat/resources/platform_names.txt b/ojluni/src/main/java/com/sun/tools/hat/resources/platform_names.txt
deleted file mode 100755
index 9ce6f9f..0000000
--- a/ojluni/src/main/java/com/sun/tools/hat/resources/platform_names.txt
+++ /dev/null
@@ -1,29 +0,0 @@
-boolean[
-char[
-float[
-double[
-byte[
-short[
-int[
-long[
-sun.
-java.
-javax.accessibility
-javax.crypto.
-javax.imageio.
-javax.naming.
-javax.net.
-javax.print.
-javax.rmi.
-javax.security.
-javax.sound.
-javax.sql.
-javax.swing.
-javax.transaction.
-javax.xml.parsers.
-javax.xml.transform.
-org.ietf.jgss.
-org.omg.
-org.w3c.dom.
-org.xml.sax.
-
diff --git a/ojluni/src/main/java/com/sun/tools/jconsole/JConsoleContext.java b/ojluni/src/main/java/com/sun/tools/jconsole/JConsoleContext.java
deleted file mode 100755
index 0c24061..0000000
--- a/ojluni/src/main/java/com/sun/tools/jconsole/JConsoleContext.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * Copyright (c) 2006, 2007, 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.tools.jconsole;
-
-import javax.management.MBeanServerConnection;
-import java.beans.PropertyChangeListener;
-import javax.swing.event.SwingPropertyChangeSupport;
-
-/**
- * {@code JConsoleContext} represents a JConsole connection to a target
- * application.
- * <p>
- * {@code JConsoleContext} notifies any {@code PropertyChangeListeners}
- * about the {@linkplain #CONNECTION_STATE_PROPERTY <i>ConnectionState</i>}
- * property change to {@link ConnectionState#CONNECTED CONNECTED} and
- * {@link ConnectionState#DISCONNECTED DISCONNECTED}.
- * The {@code JConsoleContext} instance will be the source for
- * any generated events.
- * <p>
- *
- * @since 1.6
- */
-public interface JConsoleContext {
-    /**
-     * The {@link ConnectionState ConnectionState} bound property name.
-     */
-    public static String CONNECTION_STATE_PROPERTY = "connectionState";
-
-    /**
-     * Values for the {@linkplain #CONNECTION_STATE_PROPERTY
-     * <i>ConnectionState</i>} bound property.
-     */
-    public enum ConnectionState {
-        /**
-         * The connection has been successfully established.
-         */
-        CONNECTED,
-        /**
-         * No connection present.
-         */
-        DISCONNECTED,
-        /**
-         * The connection is being attempted.
-         */
-        CONNECTING
-    }
-
-    /**
-     * Returns the {@link MBeanServerConnection MBeanServerConnection} for the
-     * connection to an application.  The returned
-     * {@code MBeanServerConnection} object becomes invalid when
-     * the connection state is changed to the
-     * {@link ConnectionState#DISCONNECTED DISCONNECTED} state.
-     *
-     * @return the {@code MBeanServerConnection} for the
-     * connection to an application.
-     */
-    public MBeanServerConnection getMBeanServerConnection();
-
-    /**
-     * Returns the current connection state.
-     * @return the current connection state.
-     */
-    public ConnectionState getConnectionState();
-
-    /**
-     * Add a {@link java.beans.PropertyChangeListener PropertyChangeListener}
-     * to the listener list.
-     * The listener is registered for all properties.
-     * The same listener object may be added more than once, and will be called
-     * as many times as it is added.
-     * If {@code listener} is {@code null}, no exception is thrown and
-     * no action is taken.
-     *
-     * @param listener  The {@code PropertyChangeListener} to be added
-     */
-    public void addPropertyChangeListener(PropertyChangeListener listener);
-
-    /**
-     * Removes a {@link java.beans.PropertyChangeListener PropertyChangeListener}
-     * from the listener list. This
-     * removes a {@code PropertyChangeListener} that was registered for all
-     * properties. If {@code listener} was added more than once to the same
-     * event source, it will be notified one less time after being removed. If
-     * {@code listener} is {@code null}, or was never added, no exception is
-     * thrown and no action is taken.
-     *
-     * @param listener the {@code PropertyChangeListener} to be removed
-     */
-    public void removePropertyChangeListener(PropertyChangeListener listener);
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jconsole/JConsolePlugin.java b/ojluni/src/main/java/com/sun/tools/jconsole/JConsolePlugin.java
deleted file mode 100755
index ab8a969..0000000
--- a/ojluni/src/main/java/com/sun/tools/jconsole/JConsolePlugin.java
+++ /dev/null
@@ -1,251 +0,0 @@
-/*
- * Copyright (c) 2006, 2007, 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.tools.jconsole;
-
-import java.beans.PropertyChangeEvent;
-import java.beans.PropertyChangeListener;
-import java.util.ArrayList;
-import java.util.List;
-import javax.swing.JPanel;
-import javax.swing.SwingWorker;
-
-/**
- * A JConsole plugin class.  JConsole uses the
- * <a href="{@docRoot}/../../../../api/java/util/ServiceLoader.html">
- * service provider</a> mechanism to search the JConsole plugins.
- * Users can provide their JConsole plugins in a jar file
- * containing a file named
- *
- * <blockquote><pre>
- * META-INF/services/com.sun.tools.jconsole.JConsolePlugin</pre></blockquote>
- *
- * <p> This file contains one line for each plugin, for example,
- *
- * <blockquote><pre>
- * com.sun.example.JTop</pre></blockquote>
- * <p> which is the fully qualified class name of the class implementing
- * {@code JConsolePlugin}.
- *
- * <p> To load the JConsole plugins in JConsole, run:
- *
- * <blockquote><pre>
- * jconsole -pluginpath &lt;plugin-path&gt; </pre></blockquote>
- *
- * <p> where <tt>&lt;plugin-path&gt;</tt> specifies the paths of JConsole
- * plugins to look up which can be a directory or a jar file. Multiple
- * paths are separated by the path separator character of the platform.
- *
- * <p> When a new JConsole window is created for a connection,
- * an instance of each {@code JConsolePlugin} will be created.
- * The {@code JConsoleContext} object is not available at its
- * construction time.
- * JConsole will set the {@link JConsoleContext} object for
- * a plugin after the plugin object is created.  It will then
- * call its {@link #getTabs getTabs} method and add the returned
- * tabs to the JConsole window.
- *
- * @see <a href="{@docRoot}/../../../../api/java/util/ServiceLoader.html">
- * java.util.ServiceLoader</a>
- *
- * @since 1.6
- */
-public abstract class JConsolePlugin {
-    private volatile JConsoleContext context = null;
-    private List<PropertyChangeListener> listeners = null;
-
-    /**
-     * Constructor.
-     */
-    protected JConsolePlugin() {
-    }
-
-    /**
-     * Sets the {@link JConsoleContext JConsoleContext} object representing
-     * the connection to an application.  This method will be called
-     * only once after the plugin is created and before the {@link #getTabs}
-     * is called. The given {@code context} can be in any
-     * {@link JConsoleContext#getConnectionState connection state} when
-     * this method is called.
-     *
-     * @param context a {@code JConsoleContext} object
-     */
-    public final synchronized void setContext(JConsoleContext context) {
-        this.context = context;
-        if (listeners != null) {
-            for (PropertyChangeListener l : listeners) {
-                context.addPropertyChangeListener(l);
-            }
-            // throw away the listener list
-            listeners = null;
-        }
-    }
-
-    /**
-     * Returns the {@link JConsoleContext JConsoleContext} object representing
-     * the connection to an application.  This method may return <tt>null</tt>
-     * if it is called before the {@link #setContext context} is initialized.
-     *
-     * @return the {@link JConsoleContext JConsoleContext} object representing
-     *         the connection to an application.
-     */
-    public final JConsoleContext getContext() {
-        return context;
-    }
-
-    /**
-     * Returns the tabs to be added in JConsole window.
-     * <p>
-     * The returned map contains one entry for each tab
-     * to be added in the tabbed pane in a JConsole window with
-     * the tab name as the key
-     * and the {@link JPanel} object as the value.
-     * This method returns an empty map if no tab is added by this plugin.
-     * This method will be called from the <i>Event Dispatch Thread</i>
-     * once at the new connection time.
-     *
-     * @return a map of a tab name and a {@link JPanel} object
-     *         representing the tabs to be added in the JConsole window;
-     *         or an empty map.
-     */
-    public abstract java.util.Map<String, JPanel> getTabs();
-
-    /**
-     * Returns a {@link SwingWorker} to perform
-     * the GUI update for this plugin at the same interval
-     * as JConsole updates the GUI.
-     * <p>
-     * JConsole schedules the GUI update at an interval specified
-     * for a connection.  This method will be called at every
-     * update to obtain a {@code SwingWorker} for each plugin.
-     * <p>
-     * JConsole will invoke the {@link SwingWorker#execute execute()}
-     * method to schedule the returned {@code SwingWorker} for execution
-     * if:
-     * <ul>
-     *   <li> the <tt>SwingWorker</tt> object has not been executed
-     *        (i.e. the {@link SwingWorker#getState} method
-     *        returns {@link javax.swing.SwingWorker.StateValue#PENDING PENDING}
-     *        state); and</li>
-     *   <li> the <tt>SwingWorker</tt> object returned in the previous
-     *        update has completed the task if it was not <tt>null</tt>
-     *        (i.e. the {@link SwingWorker#isDone SwingWorker.isDone} method
-     *        returns <tt>true</tt>).</li>
-     * </ul>
-     * <br>
-     * Otherwise, <tt>SwingWorker</tt> object will not be scheduled to work.
-     *
-     * <p>
-     * A plugin can schedule its own GUI update and this method
-     * will return <tt>null</tt>.
-     *
-     * @return a <tt>SwingWorker</tt> to perform the GUI update; or
-     *         <tt>null</tt>.
-     */
-    public abstract SwingWorker<?,?> newSwingWorker();
-
-    /**
-     * Dispose this plugin. This method is called by JConsole to inform
-     * that this plugin will be discarded and that it should free
-     * any resources that it has allocated.
-     * The {@link #getContext JConsoleContext} can be in any
-     * {@link JConsoleContext#getConnectionState connection state} when
-     * this method is called.
-     */
-    public void dispose() {
-        // Default nop implementation
-    }
-
-    /**
-     * Adds a {@link PropertyChangeListener PropertyChangeListener}
-     * to the {@link #getContext JConsoleContext} object for this plugin.
-     * This method is a convenient method for this plugin to register
-     * a listener when the {@code JConsoleContext} object may or
-     * may not be available.
-     *
-     * <p>For example, a plugin constructor can
-     * call this method to register a listener to listen to the
-     * {@link JConsoleContext.ConnectionState connectionState}
-     * property changes and the listener will be added to the
-     * {@link JConsoleContext#addPropertyChangeListener JConsoleContext}
-     * object when it is available.
-     *
-     * @param listener  The {@code PropertyChangeListener} to be added
-     *
-     * @throws NullPointerException if {@code listener} is {@code null}.
-     */
-    public final void addContextPropertyChangeListener(PropertyChangeListener listener) {
-        if (listener == null) {
-            throw new NullPointerException("listener is null");
-        }
-
-        if (context == null) {
-            // defer registration of the listener until setContext() is called
-            synchronized (this) {
-                // check again if context is not set
-                if (context == null) {
-                    // maintain a listener list to be added later
-                    if (listeners == null) {
-                        listeners = new ArrayList<PropertyChangeListener>();
-                    }
-                    listeners.add(listener);
-                    return;
-                }
-            }
-        }
-        context.addPropertyChangeListener(listener);
-    }
-
-    /**
-     * Removes a {@link PropertyChangeListener PropertyChangeListener}
-     * from the listener list of the {@link #getContext JConsoleContext}
-     * object for this plugin.
-     * If {@code listener} was never added, no exception is
-     * thrown and no action is taken.
-     *
-     * @param listener the {@code PropertyChangeListener} to be removed
-     *
-     * @throws NullPointerException if {@code listener} is {@code null}.
-     */
-    public final void removeContextPropertyChangeListener(PropertyChangeListener listener) {
-        if (listener == null) {
-            throw new NullPointerException("listener is null");
-        }
-
-        if (context == null) {
-            // defer registration of the listener until setContext() is called
-            synchronized (this) {
-                // check again if context is not set
-                if (context == null) {
-                    if (listeners != null) {
-                        listeners.remove(listener);
-                    }
-                    return;
-                }
-            }
-        }
-        context.removePropertyChangeListener(listener);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jconsole/package.html b/ojluni/src/main/java/com/sun/tools/jconsole/package.html
deleted file mode 100755
index c0859d2..0000000
--- a/ojluni/src/main/java/com/sun/tools/jconsole/package.html
+++ /dev/null
@@ -1,37 +0,0 @@
-<!--
- Copyright (c) 2006, 2007, 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.
--->
-
-<!doctype html public "-//IETF//DTD HTML//EN">
-<html>
-<head>
-</head>
-<body bgcolor="white">
-
-This package contains the JConsole API.
-
-@since 1.6
-
-</body>
-</html>
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/AbstractLauncher.java b/ojluni/src/main/java/com/sun/tools/jdi/AbstractLauncher.java
deleted file mode 100755
index 736da0a..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/AbstractLauncher.java
+++ /dev/null
@@ -1,273 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-package com.sun.tools.jdi;
-
-import com.sun.tools.jdi.*;
-import com.sun.jdi.connect.*;
-import com.sun.jdi.connect.spi.*;
-import com.sun.jdi.*;
-
-import java.util.Map;
-import java.util.StringTokenizer;
-import java.util.List;
-import java.util.ArrayList;
-import java.io.IOException;
-import java.io.InterruptedIOException;
-
-abstract class AbstractLauncher extends ConnectorImpl implements LaunchingConnector {
-
-    abstract public VirtualMachine
-        launch(Map<String,? extends Connector.Argument> arguments)
-                                 throws IOException,
-                                        IllegalConnectorArgumentsException,
-                                        VMStartException;
-    abstract public String name();
-    abstract public String description();
-
-    ThreadGroup grp;
-
-    AbstractLauncher() {
-        super();
-
-        grp = Thread.currentThread().getThreadGroup();
-        ThreadGroup parent = null;
-        while ((parent = grp.getParent()) != null) {
-            grp = parent;
-        }
-    }
-
-    String[] tokenizeCommand(String command, char quote) {
-        String quoteStr = String.valueOf(quote); // easier to deal with
-
-        /*
-         * Tokenize the command, respecting the given quote character.
-         */
-        StringTokenizer tokenizer = new StringTokenizer(command,
-                                                        quote + " \t\r\n\f",
-                                                        true);
-        String quoted = null;
-        String pending = null;
-        List<String> tokenList = new ArrayList<String>();
-        while (tokenizer.hasMoreTokens()) {
-            String token = tokenizer.nextToken();
-            if (quoted != null) {
-                if (token.equals(quoteStr)) {
-                    tokenList.add(quoted);
-                    quoted = null;
-                } else {
-                    quoted += token;
-                }
-            } else if (pending != null) {
-                if (token.equals(quoteStr)) {
-                    quoted = pending;
-                } else if ((token.length() == 1) &&
-                           Character.isWhitespace(token.charAt(0))) {
-                    tokenList.add(pending);
-                } else {
-                    throw new InternalException("Unexpected token: " + token);
-                }
-                pending = null;
-            } else {
-                if (token.equals(quoteStr)) {
-                    quoted = "";
-                } else if ((token.length() == 1) &&
-                           Character.isWhitespace(token.charAt(0))) {
-                    // continue
-                } else {
-                    pending = token;
-                }
-            }
-        }
-
-        /*
-         * Add final token.
-         */
-        if (pending != null) {
-            tokenList.add(pending);
-        }
-
-        /*
-         * An unclosed quote at the end of the command. Do an
-         * implicit end quote.
-         */
-        if (quoted != null) {
-            tokenList.add(quoted);
-        }
-
-        String[] tokenArray = new String[tokenList.size()];
-        for (int i = 0; i < tokenList.size(); i++) {
-            tokenArray[i] = tokenList.get(i);
-        }
-        return tokenArray;
-    }
-
-    protected VirtualMachine launch(String[] commandArray, String address,
-                                    TransportService.ListenKey listenKey,
-                                    TransportService ts)
-                                    throws IOException, VMStartException {
-        Helper helper = new Helper(commandArray, address, listenKey, ts);
-        helper.launchAndAccept();
-
-        VirtualMachineManager manager =
-            Bootstrap.virtualMachineManager();
-
-        return manager.createVirtualMachine(helper.connection(),
-                                            helper.process());
-    }
-
-    /**
-     * This class simply provides a context for a single launch and
-     * accept. It provides instance fields that can be used by
-     * all threads involved. This stuff can't be in the Connector proper
-     * because the connector is a singleton and is not specific to any
-     * one launch.
-     */
-    private class Helper {
-        private final String address;
-        private TransportService.ListenKey listenKey;
-        private TransportService ts;
-        private final String[] commandArray;
-        private Process process = null;
-        private Connection connection = null;
-        private IOException acceptException = null;
-        private boolean exited = false;
-
-        Helper(String[] commandArray, String address, TransportService.ListenKey listenKey,
-            TransportService ts) {
-            this.commandArray = commandArray;
-            this.address = address;
-            this.listenKey = listenKey;
-            this.ts = ts;
-        }
-
-        String commandString() {
-            String str = "";
-            for (int i = 0; i < commandArray.length; i++) {
-                if (i > 0) {
-                    str += " ";
-                }
-                str += commandArray[i];
-            }
-            return str;
-        }
-
-        synchronized void launchAndAccept() throws
-                                IOException, VMStartException {
-
-            process = Runtime.getRuntime().exec(commandArray);
-
-            Thread acceptingThread = acceptConnection();
-            Thread monitoringThread = monitorTarget();
-            try {
-                while ((connection == null) &&
-                       (acceptException == null) &&
-                       !exited) {
-                    wait();
-                }
-
-                if (exited) {
-                    throw new VMStartException(
-                        "VM initialization failed for: " + commandString(), process);
-                }
-                if (acceptException != null) {
-                    // Rethrow the exception in this thread
-                    throw acceptException;
-                }
-            } catch (InterruptedException e) {
-                throw new InterruptedIOException("Interrupted during accept");
-            } finally {
-                acceptingThread.interrupt();
-                monitoringThread.interrupt();
-            }
-        }
-
-        Process process() {
-            return process;
-        }
-
-        Connection connection() {
-            return connection;
-        }
-
-        synchronized void notifyOfExit() {
-            exited = true;
-            notify();
-        }
-
-        synchronized void notifyOfConnection(Connection connection) {
-            this.connection = connection;
-            notify();
-        }
-
-        synchronized void notifyOfAcceptException(IOException acceptException) {
-            this.acceptException = acceptException;
-            notify();
-        }
-
-        Thread monitorTarget() {
-            Thread thread = new Thread(grp,
-                                       "launched target monitor") {
-                public void run() {
-                    try {
-                        process.waitFor();
-                        /*
-                         * Notify waiting thread of VM error termination
-                         */
-                        notifyOfExit();
-                    } catch (InterruptedException e) {
-                        // Connection has been established, stop monitoring
-                    }
-                }
-            };
-            thread.setDaemon(true);
-            thread.start();
-            return thread;
-        }
-
-        Thread acceptConnection() {
-            Thread thread = new Thread(grp,
-                                       "connection acceptor") {
-                public void run() {
-                    try {
-                        Connection connection = ts.accept(listenKey, 0, 0);
-                        /*
-                         * Notify waiting thread of connection
-                         */
-                        notifyOfConnection(connection);
-                    } catch (InterruptedIOException e) {
-                        // VM terminated, stop accepting
-                    } catch (IOException e) {
-                        // Report any other exception to waiting thread
-                        notifyOfAcceptException(e);
-                    }
-                }
-            };
-            thread.setDaemon(true);
-            thread.start();
-            return thread;
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/ArrayReferenceImpl.java b/ojluni/src/main/java/com/sun/tools/jdi/ArrayReferenceImpl.java
deleted file mode 100755
index afeb49b..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/ArrayReferenceImpl.java
+++ /dev/null
@@ -1,283 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package com.sun.tools.jdi;
-
-import com.sun.jdi.*;
-
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Iterator;
-
-public class ArrayReferenceImpl extends ObjectReferenceImpl
-    implements ArrayReference
-{
-    int length = -1;
-
-    ArrayReferenceImpl(VirtualMachine aVm,long aRef) {
-        super(aVm,aRef);
-    }
-
-    protected ClassTypeImpl invokableReferenceType(Method method) {
-        // The method has to be a method on Object since
-        // arrays don't have methods nor any other 'superclasses'
-        // So, use the ClassTypeImpl for Object instead of
-        // the ArrayTypeImpl for the array itself.
-        return (ClassTypeImpl)method.declaringType();
-    }
-
-    ArrayTypeImpl arrayType() {
-        return (ArrayTypeImpl)type();
-    }
-
-    /**
-     * Return array length.
-     * Need not be synchronized since it cannot be provably stale.
-     */
-    public int length() {
-        if(length == -1) {
-            try {
-                length = JDWP.ArrayReference.Length.
-                    process(vm, this).arrayLength;
-            } catch (JDWPException exc) {
-                throw exc.toJDIException();
-            }
-        }
-        return length;
-    }
-
-    public Value getValue(int index) {
-        List list = getValues(index, 1);
-        return (Value)list.get(0);
-    }
-
-    public List<Value> getValues() {
-        return getValues(0, -1);
-    }
-
-    /**
-     * Validate that the range to set/get is valid.
-     * length of -1 (meaning rest of array) has been converted
-     * before entry.
-     */
-    private void validateArrayAccess(int index, int length) {
-        // because length can be computed from index,
-        // index must be tested first for correct error message
-        if ((index < 0) || (index > length())) {
-            throw new IndexOutOfBoundsException(
-                        "Invalid array index: " + index);
-        }
-        if (length < 0) {
-            throw new IndexOutOfBoundsException(
-                        "Invalid array range length: " + length);
-        }
-        if (index + length > length()) {
-            throw new IndexOutOfBoundsException(
-                        "Invalid array range: " +
-                        index + " to " + (index + length - 1));
-        }
-    }
-
-    @SuppressWarnings("unchecked")
-    private static <T> T cast(Object x) {
-        return (T)x;
-    }
-
-    public List<Value> getValues(int index, int length) {
-        if (length == -1) { // -1 means the rest of the array
-           length = length() - index;
-        }
-        validateArrayAccess(index, length);
-        if (length == 0) {
-            return new ArrayList<Value>();
-        }
-
-        List<Value> vals;
-        try {
-            vals = cast(JDWP.ArrayReference.GetValues.process(vm, this, index, length).values);
-        } catch (JDWPException exc) {
-            throw exc.toJDIException();
-        }
-
-        return vals;
-    }
-
-    public void setValue(int index, Value value)
-            throws InvalidTypeException,
-                   ClassNotLoadedException {
-        List<Value> list = new ArrayList<Value>(1);
-        list.add(value);
-        setValues(index, list, 0, 1);
-    }
-
-    public void setValues(List<? extends Value> values)
-            throws InvalidTypeException,
-                   ClassNotLoadedException {
-        setValues(0, values, 0, -1);
-    }
-
-    public void setValues(int index, List<? extends Value> values,
-                          int srcIndex, int length)
-            throws InvalidTypeException,
-                   ClassNotLoadedException {
-
-        if (length == -1) { // -1 means the rest of the array
-            // shorter of, the rest of the array and rest of
-            // the source values
-            length = Math.min(length() - index,
-                              values.size() - srcIndex);
-        }
-        validateMirrorsOrNulls(values);
-        validateArrayAccess(index, length);
-
-        if ((srcIndex < 0) || (srcIndex > values.size())) {
-            throw new IndexOutOfBoundsException(
-                        "Invalid source index: " + srcIndex);
-        }
-        if (srcIndex + length > values.size()) {
-            throw new IndexOutOfBoundsException(
-                        "Invalid source range: " +
-                        srcIndex + " to " +
-                        (srcIndex + length - 1));
-        }
-
-        boolean somethingToSet = false;;
-        ValueImpl[] setValues = new ValueImpl[length];
-
-        for (int i = 0; i < length; i++) {
-            ValueImpl value = (ValueImpl)values.get(srcIndex + i);
-
-            try {
-                // Validate and convert if necessary
-                setValues[i] =
-                  ValueImpl.prepareForAssignment(value,
-                                                 new Component());
-                somethingToSet = true;
-            } catch (ClassNotLoadedException e) {
-                /*
-                 * Since we got this exception,
-                 * the component must be a reference type.
-                 * This means the class has not yet been loaded
-                 * through the defining class's class loader.
-                 * If the value we're trying to set is null,
-                 * then setting to null is essentially a
-                 * no-op, and we should allow it without an
-                 * exception.
-                 */
-                if (value != null) {
-                    throw e;
-                }
-            }
-        }
-        if (somethingToSet) {
-            try {
-                JDWP.ArrayReference.SetValues.
-                    process(vm, this, index, setValues);
-            } catch (JDWPException exc) {
-                throw exc.toJDIException();
-            }
-        }
-    }
-
-    public String toString() {
-        return "instance of " + arrayType().componentTypeName() +
-               "[" + length() + "] (id=" + uniqueID() + ")";
-    }
-
-    byte typeValueKey() {
-        return JDWP.Tag.ARRAY;
-    }
-
-    void validateAssignment(ValueContainer destination)
-                            throws InvalidTypeException, ClassNotLoadedException {
-        try {
-            super.validateAssignment(destination);
-        } catch (ClassNotLoadedException e) {
-            /*
-             * An array can be used extensively without the
-             * enclosing loader being recorded by the VM as an
-             * initiating loader of the array type. In addition, the
-             * load of an array class is fairly harmless as long as
-             * the component class is already loaded. So we relax the
-             * rules a bit and allow the assignment as long as the
-             * ultimate component types are assignable.
-             */
-            boolean valid = false;
-            JNITypeParser destParser = new JNITypeParser(
-                                       destination.signature());
-            JNITypeParser srcParser = new JNITypeParser(
-                                       arrayType().signature());
-            int destDims = destParser.dimensionCount();
-            if (destDims <= srcParser.dimensionCount()) {
-                /*
-                 * Remove all dimensions from the destination. Remove
-                 * the same number of dimensions from the source.
-                 * Get types for both and check to see if they are
-                 * compatible.
-                 */
-                String destComponentSignature =
-                    destParser.componentSignature(destDims);
-                Type destComponentType =
-                    destination.findType(destComponentSignature);
-                String srcComponentSignature =
-                    srcParser.componentSignature(destDims);
-                Type srcComponentType =
-                    arrayType().findComponentType(srcComponentSignature);
-                valid = ArrayTypeImpl.isComponentAssignable(destComponentType,
-                                                          srcComponentType);
-            }
-
-            if (!valid) {
-                throw new InvalidTypeException("Cannot assign " +
-                                               arrayType().name() +
-                                               " to " +
-                                               destination.typeName());
-            }
-        }
-    }
-
-    /*
-     * Represents an array component to other internal parts of this
-     * implementation. This is not exposed at the JDI level. Currently,
-     * this class is needed only for type checking so it does not even
-     * reference a particular component - just a generic component
-     * of this array. In the future we may need to expand its use.
-     */
-    class Component implements ValueContainer {
-        public Type type() throws ClassNotLoadedException {
-            return arrayType().componentType();
-        }
-        public String typeName() {
-            return arrayType().componentTypeName();
-        }
-        public String signature() {
-            return arrayType().componentSignature();
-        }
-        public Type findType(String signature) throws ClassNotLoadedException {
-            return arrayType().findComponentType(signature);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/ArrayTypeImpl.java b/ojluni/src/main/java/com/sun/tools/jdi/ArrayTypeImpl.java
deleted file mode 100755
index a10cc05..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/ArrayTypeImpl.java
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
- * Copyright (c) 1998, 2001, 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.tools.jdi;
-
-import com.sun.jdi.*;
-
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.Map;
-
-public class ArrayTypeImpl extends ReferenceTypeImpl
-    implements ArrayType
-{
-    protected ArrayTypeImpl(VirtualMachine aVm, long aRef) {
-        super(aVm, aRef);
-    }
-
-    public ArrayReference newInstance(int length) {
-        try {
-            return (ArrayReference)JDWP.ArrayType.NewInstance.
-                                       process(vm, this, length).newArray;
-        } catch (JDWPException exc) {
-            throw exc.toJDIException();
-        }
-    }
-
-    public String componentSignature() {
-        return signature().substring(1); // Just skip the leading '['
-    }
-
-    public String componentTypeName() {
-        JNITypeParser parser = new JNITypeParser(componentSignature());
-        return parser.typeName();
-    }
-
-    Type type() throws ClassNotLoadedException {
-        return findType(componentSignature());
-    }
-
-    void addVisibleMethods(Map map) {
-        // arrays don't have methods
-    }
-
-    public List<Method> allMethods() {
-        return new ArrayList<Method>(0);   // arrays don't have methods
-    }
-
-    /*
-     * Find the type object, if any, of a component type of this array.
-     * The component type does not have to be immediate; e.g. this method
-     * can be used to find the component Foo of Foo[][]. This method takes
-     * advantage of the property that an array and its component must have
-     * the same class loader. Since array set operations don't have an
-     * implicit enclosing type like field and variable set operations,
-     * this method is sometimes needed for proper type checking.
-     */
-    Type findComponentType(String signature) throws ClassNotLoadedException {
-        byte tag = (byte)signature.charAt(0);
-        if (PacketStream.isObjectTag(tag)) {
-            // It's a reference type
-            JNITypeParser parser = new JNITypeParser(componentSignature());
-            List list = vm.classesByName(parser.typeName());
-            Iterator iter = list.iterator();
-            while (iter.hasNext()) {
-                ReferenceType type = (ReferenceType)iter.next();
-                ClassLoaderReference cl = type.classLoader();
-                if ((cl == null)?
-                         (classLoader() == null) :
-                         (cl.equals(classLoader()))) {
-                    return type;
-                }
-            }
-            // Component class has not yet been loaded
-            throw new ClassNotLoadedException(componentTypeName());
-        } else {
-            // It's a primitive type
-            return vm.primitiveTypeMirror(tag);
-        }
-    }
-
-    public Type componentType() throws ClassNotLoadedException {
-        return findComponentType(componentSignature());
-    }
-
-    static boolean isComponentAssignable(Type destination, Type source) {
-        if (source instanceof PrimitiveType) {
-            // Assignment of primitive arrays requires identical
-            // component types.
-            return source.equals(destination);
-        } else {
-            if (destination instanceof PrimitiveType) {
-                return false;
-            }
-
-            ReferenceTypeImpl refSource = (ReferenceTypeImpl)source;
-            ReferenceTypeImpl refDestination = (ReferenceTypeImpl)destination;
-            // Assignment of object arrays requires availability
-            // of widening conversion of component types
-            return refSource.isAssignableTo(refDestination);
-        }
-    }
-
-    /*
-     * Return true if an instance of the  given reference type
-     * can be assigned to a variable of this type
-     */
-    boolean isAssignableTo(ReferenceType destType) {
-        if (destType instanceof ArrayType) {
-            try {
-                Type destComponentType = ((ArrayType)destType).componentType();
-                return isComponentAssignable(destComponentType, componentType());
-            } catch (ClassNotLoadedException e) {
-                // One or both component types has not yet been
-                // loaded => can't assign
-                return false;
-            }
-        } else if (destType instanceof InterfaceType) {
-            // Only valid InterfaceType assignee is Cloneable
-            return destType.name().equals("java.lang.Cloneable");
-        } else {
-            // Only valid ClassType assignee is Object
-            return destType.name().equals("java.lang.Object");
-        }
-    }
-
-    List<ReferenceType> inheritedTypes() {
-        return new ArrayList<ReferenceType>(0);
-    }
-
-    void getModifiers() {
-        if (modifiers != -1) {
-            return;
-        }
-        /*
-         * For object arrays, the return values for Interface
-         * Accessible.isPrivate(), Accessible.isProtected(),
-         * etc... are the same as would be returned for the
-         * component type.  Fetch the modifier bits from the
-         * component type and use those.
-         *
-         * For primitive arrays, the modifiers are always
-         *   VMModifiers.FINAL | VMModifiers.PUBLIC
-         *
-         * Reference com.sun.jdi.Accessible.java.
-         */
-        try {
-            Type t = componentType();
-            if (t instanceof PrimitiveType) {
-                modifiers = VMModifiers.FINAL | VMModifiers.PUBLIC;
-            } else {
-                ReferenceType rt = (ReferenceType)t;
-                modifiers = rt.modifiers();
-            }
-        } catch (ClassNotLoadedException cnle) {
-            cnle.printStackTrace();
-        }
-    }
-
-    public String toString() {
-       return "array class " + name() + " (" + loaderString() + ")";
-    }
-
-    /*
-     * Save a pointless trip over the wire for these methods
-     * which have undefined results for arrays.
-     */
-    public boolean isPrepared() { return true; }
-    public boolean isVerified() { return true; }
-    public boolean isInitialized() { return true; }
-    public boolean failedToInitialize() { return false; }
-    public boolean isAbstract() { return false; }
-
-    /*
-     * Defined always to be true for arrays
-     */
-    public boolean isFinal() { return true; }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/BaseLineInfo.java b/ojluni/src/main/java/com/sun/tools/jdi/BaseLineInfo.java
deleted file mode 100755
index 872af85..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/BaseLineInfo.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright (c) 2001, 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.tools.jdi;
-
-import com.sun.jdi.*;
-
-class BaseLineInfo implements LineInfo {
-    private final int lineNumber;
-    private final ReferenceTypeImpl declaringType;
-
-    BaseLineInfo(int lineNumber,
-                 ReferenceTypeImpl declaringType) {
-        this.lineNumber = lineNumber;
-        this.declaringType = declaringType;
-    }
-
-    public String liStratum() {
-        return SDE.BASE_STRATUM_NAME;
-    }
-
-    public int liLineNumber() {
-        return lineNumber;
-    }
-
-    public String liSourceName()
-                            throws AbsentInformationException {
-        return declaringType.baseSourceName();
-    }
-
-    public String liSourcePath()
-                            throws AbsentInformationException {
-        return declaringType.baseSourcePath();
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/BooleanTypeImpl.java b/ojluni/src/main/java/com/sun/tools/jdi/BooleanTypeImpl.java
deleted file mode 100755
index 31f560f..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/BooleanTypeImpl.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (c) 1998, 1999, 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.tools.jdi;
-
-import com.sun.jdi.*;
-
-public class BooleanTypeImpl extends PrimitiveTypeImpl implements BooleanType {
-    BooleanTypeImpl(VirtualMachine vm) {
-        super(vm);
-    }
-
-    public String signature() {
-        return String.valueOf((char)JDWP.Tag.BOOLEAN);
-    }
-
-    PrimitiveValue convert(PrimitiveValue value) throws InvalidTypeException {
-        return vm.mirrorOf(((PrimitiveValueImpl)value).checkedBooleanValue());
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/BooleanValueImpl.java b/ojluni/src/main/java/com/sun/tools/jdi/BooleanValueImpl.java
deleted file mode 100755
index b2975ba..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/BooleanValueImpl.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Copyright (c) 1998, 1999, 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.tools.jdi;
-
-import com.sun.jdi.*;
-
-public class BooleanValueImpl extends PrimitiveValueImpl
-                              implements BooleanValue {
-    private boolean value;
-
-    BooleanValueImpl(VirtualMachine aVm,boolean aValue) {
-        super(aVm);
-
-        value = aValue;
-    }
-
-    public boolean equals(Object obj) {
-        if ((obj != null) && (obj instanceof BooleanValue)) {
-            return (value == ((BooleanValue)obj).value())
-                   && super.equals(obj);
-        } else {
-            return false;
-        }
-    }
-
-    public int hashCode() {
-        /*
-         * TO DO: Better hash code
-         */
-        return intValue();
-    }
-
-    public Type type() {
-        return vm.theBooleanType();
-    }
-
-    public boolean value() {
-        return value;
-    }
-
-    public boolean booleanValue() {
-        return value;
-    }
-
-    public byte byteValue() {
-        return(byte)((value)?1:0);
-    }
-
-    public char charValue() {
-        return(char)((value)?1:0);
-    }
-
-    public short shortValue() {
-        return(short)((value)?1:0);
-    }
-
-    public int intValue() {
-        return(int)((value)?1:0);
-    }
-
-    public long longValue() {
-        return(long)((value)?1:0);
-    }
-
-    public float floatValue() {
-        return(float)((value)?1.0:0.0);
-    }
-
-    public double doubleValue() {
-        return(double)((value)?1.0:0.0);
-    }
-
-    public String toString() {
-        return "" + value;
-    }
-
-    byte typeValueKey() {
-        return JDWP.Tag.BOOLEAN;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/ByteTypeImpl.java b/ojluni/src/main/java/com/sun/tools/jdi/ByteTypeImpl.java
deleted file mode 100755
index 1e3b053..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/ByteTypeImpl.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (c) 1998, 1999, 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.tools.jdi;
-
-import com.sun.jdi.*;
-
-public class ByteTypeImpl extends PrimitiveTypeImpl implements ByteType {
-    ByteTypeImpl(VirtualMachine vm) {
-        super(vm);
-    }
-
-
-    public String signature() {
-        return String.valueOf((char)JDWP.Tag.BYTE);
-    }
-
-    PrimitiveValue convert(PrimitiveValue value) throws InvalidTypeException {
-        return vm.mirrorOf(((PrimitiveValueImpl)value).checkedByteValue());
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/ByteValueImpl.java b/ojluni/src/main/java/com/sun/tools/jdi/ByteValueImpl.java
deleted file mode 100755
index effb240..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/ByteValueImpl.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package com.sun.tools.jdi;
-
-import com.sun.jdi.*;
-
-public class ByteValueImpl extends PrimitiveValueImpl
-                           implements ByteValue {
-    private byte value;
-
-    ByteValueImpl(VirtualMachine aVm,byte aValue) {
-        super(aVm);
-
-        value = aValue;
-    }
-
-    public boolean equals(Object obj) {
-        if ((obj != null) && (obj instanceof ByteValue)) {
-            return (value == ((ByteValue)obj).value())
-                   && super.equals(obj);
-        } else {
-            return false;
-        }
-    }
-
-    public int hashCode() {
-        /*
-         * TO DO: Better hash code
-         */
-        return intValue();
-    }
-
-    public int compareTo(ByteValue obj) {
-        byte other = obj.value();
-        return value() - other;
-    }
-
-
-    public Type type() {
-        return vm.theByteType();
-    }
-
-    public byte value() {
-        return value;
-    }
-
-    public boolean booleanValue() {
-        return(value == 0)?false:true;
-    }
-
-    public byte byteValue() {
-        return value;
-    }
-
-    public char charValue() {
-        return(char)value;
-    }
-
-    public short shortValue() {
-        return(short)value;
-    }
-
-    public int intValue() {
-        return(int)value;
-    }
-
-    public long longValue() {
-        return(long)value;
-    }
-
-    public float floatValue() {
-        return(float)value;
-    }
-
-    public double doubleValue() {
-        return(double)value;
-    }
-
-    char checkedCharValue() throws InvalidTypeException {
-        if ((value > Character.MAX_VALUE) || (value < Character.MIN_VALUE)) {
-            throw new InvalidTypeException("Can't convert " + value + " to char");
-        } else {
-            return super.checkedCharValue();
-        }
-    }
-
-    public String toString() {
-        return "" + value;
-    }
-
-    byte typeValueKey() {
-        return JDWP.Tag.BYTE;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/CharTypeImpl.java b/ojluni/src/main/java/com/sun/tools/jdi/CharTypeImpl.java
deleted file mode 100755
index 6dd150a..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/CharTypeImpl.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (c) 1998, 1999, 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.tools.jdi;
-
-import com.sun.jdi.*;
-
-public class CharTypeImpl extends PrimitiveTypeImpl implements CharType {
-    CharTypeImpl(VirtualMachine vm) {
-        super(vm);
-    }
-
-
-    public String signature() {
-        return String.valueOf((char)JDWP.Tag.CHAR);
-    }
-
-    PrimitiveValue convert(PrimitiveValue value) throws InvalidTypeException {
-        return vm.mirrorOf(((PrimitiveValueImpl)value).checkedCharValue());
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/CharValueImpl.java b/ojluni/src/main/java/com/sun/tools/jdi/CharValueImpl.java
deleted file mode 100755
index b29e1cb..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/CharValueImpl.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package com.sun.tools.jdi;
-
-import com.sun.jdi.*;
-
-public class CharValueImpl extends PrimitiveValueImpl
-                           implements CharValue {
-    private char value;
-
-    CharValueImpl(VirtualMachine aVm,char aValue) {
-        super(aVm);
-
-        value = aValue;
-    }
-
-    public boolean equals(Object obj) {
-        if ((obj != null) && (obj instanceof CharValue)) {
-            return (value == ((CharValue)obj).value()) &&
-                   super.equals(obj);
-        } else {
-            return false;
-        }
-    }
-
-    public int hashCode() {
-        /*
-         * TO DO: Better hash code
-         */
-        return intValue();
-    }
-
-    public int compareTo(CharValue obj) {
-        char other = obj.value();
-        return value() - other;
-    }
-
-    public Type type() {
-        return vm.theCharType();
-    }
-
-    public char value() {
-        return value;
-    }
-
-    public boolean booleanValue() {
-        return(value == 0)?false:true;
-    }
-
-    public byte byteValue() {
-        return(byte)value;
-    }
-
-    public char charValue() {
-        return(char)value;
-    }
-
-    public short shortValue() {
-        return(short)value;
-    }
-
-    public int intValue() {
-        return(int)value;
-    }
-
-    public long longValue() {
-        return(long)value;
-    }
-
-    public float floatValue() {
-        return(float)value;
-    }
-
-    public double doubleValue() {
-        return(double)value;
-    }
-
-    public String toString() {
-        return "" + value;
-    }
-
-    byte checkedByteValue() throws InvalidTypeException {
-        // Note: since char is unsigned, don't check against MIN_VALUE
-        if (value > Byte.MAX_VALUE) {
-            throw new InvalidTypeException("Can't convert " + value + " to byte");
-        } else {
-            return super.checkedByteValue();
-        }
-    }
-
-    short checkedShortValue() throws InvalidTypeException {
-        // Note: since char is unsigned, don't check against MIN_VALUE
-        if (value > Short.MAX_VALUE) {
-            throw new InvalidTypeException("Can't convert " + value + " to short");
-        } else {
-            return super.checkedShortValue();
-        }
-    }
-
-    byte typeValueKey() {
-        return JDWP.Tag.CHAR;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/ClassLoaderReferenceImpl.java b/ojluni/src/main/java/com/sun/tools/jdi/ClassLoaderReferenceImpl.java
deleted file mode 100755
index 8023f1f..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/ClassLoaderReferenceImpl.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package com.sun.tools.jdi;
-
-import com.sun.jdi.*;
-import java.util.*;
-
-public class ClassLoaderReferenceImpl extends ObjectReferenceImpl
-                  implements ClassLoaderReference, VMListener  {
-
-    // This is cached only while the VM is suspended
-    private static class Cache extends ObjectReferenceImpl.Cache {
-        List<ReferenceType> visibleClasses = null;
-    }
-
-    protected ObjectReferenceImpl.Cache newCache() {
-        return new Cache();
-    }
-
-    ClassLoaderReferenceImpl(VirtualMachine aVm, long ref) {
-        super(aVm, ref);
-        vm.state().addListener(this);
-    }
-
-    protected String description() {
-        return "ClassLoaderReference " + uniqueID();
-    }
-
-    public List<ReferenceType> definedClasses() {
-        ArrayList<ReferenceType> definedClasses = new ArrayList<ReferenceType>();
-        for (ReferenceType type :  vm.allClasses()) {
-            if (type.isPrepared() &&
-                equals(type.classLoader())) {
-                definedClasses.add(type);
-            }
-        }
-        return definedClasses;
-    }
-
-    public List<ReferenceType> visibleClasses() {
-        List<ReferenceType> classes = null;
-        try {
-            Cache local = (Cache)getCache();
-
-            if (local != null) {
-                classes = local.visibleClasses;
-            }
-            if (classes == null) {
-                JDWP.ClassLoaderReference.VisibleClasses.ClassInfo[]
-                  jdwpClasses = JDWP.ClassLoaderReference.VisibleClasses.
-                                            process(vm, this).classes;
-                classes = new ArrayList<ReferenceType>(jdwpClasses.length);
-                for (int i = 0; i < jdwpClasses.length; ++i) {
-                    classes.add(vm.referenceType(jdwpClasses[i].typeID,
-                                                 jdwpClasses[i].refTypeTag));
-                }
-                classes = Collections.unmodifiableList(classes);
-                if (local != null) {
-                    local.visibleClasses = classes;
-                    if ((vm.traceFlags & vm.TRACE_OBJREFS) != 0) {
-                        vm.printTrace(description() +
-                           " temporarily caching visible classes (count = " +
-                                      classes.size() + ")");
-                    }
-                }
-            }
-        } catch (JDWPException exc) {
-            throw exc.toJDIException();
-        }
-        return classes;
-    }
-
-    Type findType(String signature) throws ClassNotLoadedException {
-        List<ReferenceType> types = visibleClasses();
-        Iterator iter = types.iterator();
-        while (iter.hasNext()) {
-            ReferenceType type = (ReferenceType)iter.next();
-            if (type.signature().equals(signature)) {
-                return type;
-            }
-        }
-        JNITypeParser parser = new JNITypeParser(signature);
-        throw new ClassNotLoadedException(parser.typeName(),
-                                         "Class " + parser.typeName() + " not loaded");
-    }
-
-    byte typeValueKey() {
-        return JDWP.Tag.CLASS_LOADER;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/ClassObjectReferenceImpl.java b/ojluni/src/main/java/com/sun/tools/jdi/ClassObjectReferenceImpl.java
deleted file mode 100755
index 3cbbf34..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/ClassObjectReferenceImpl.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright (c) 1999, 2000, 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.tools.jdi;
-
-import com.sun.jdi.*;
-import java.util.*;
-
-public class ClassObjectReferenceImpl extends ObjectReferenceImpl
-                                      implements ClassObjectReference {
-    private ReferenceType reflectedType;
-
-    ClassObjectReferenceImpl(VirtualMachine vm, long ref) {
-        super(vm, ref);
-    }
-
-    public ReferenceType reflectedType() {
-        if (reflectedType == null) {
-            try {
-                JDWP.ClassObjectReference.ReflectedType reply =
-                    JDWP.ClassObjectReference.ReflectedType.process(vm, this);
-                reflectedType = vm.referenceType(reply.typeID,
-                                                 reply.refTypeTag);
-
-            } catch (JDWPException exc) {
-                throw exc.toJDIException();
-            }
-        }
-        return reflectedType;
-    }
-
-    byte typeValueKey() {
-        return JDWP.Tag.CLASS_OBJECT;
-    }
-
-    public String toString() {
-        return "instance of " + referenceType().name() +
-               "(reflected class=" + reflectedType().name() + ", " + "id=" + uniqueID() + ")";
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/ClassTypeImpl.java b/ojluni/src/main/java/com/sun/tools/jdi/ClassTypeImpl.java
deleted file mode 100755
index 8644957..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/ClassTypeImpl.java
+++ /dev/null
@@ -1,428 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package com.sun.tools.jdi;
-
-import com.sun.jdi.*;
-
-import java.util.*;
-
-public class ClassTypeImpl extends ReferenceTypeImpl
-    implements ClassType
-{
-    private boolean cachedSuperclass = false;
-    private ClassType superclass = null;
-    private int lastLine = -1;
-    private List<InterfaceType> interfaces = null;
-
-    protected ClassTypeImpl(VirtualMachine aVm,long aRef) {
-        super(aVm, aRef);
-    }
-
-    public ClassType superclass() {
-        if(!cachedSuperclass)  {
-            ClassTypeImpl sup = null;
-            try {
-                sup = JDWP.ClassType.Superclass.
-                    process(vm, this).superclass;
-            } catch (JDWPException exc) {
-                throw exc.toJDIException();
-            }
-
-            /*
-             * If there is a superclass, cache its
-             * ClassType here. Otherwise,
-             * leave the cache reference null.
-             */
-            if (sup != null) {
-                superclass = sup;
-            }
-            cachedSuperclass = true;
-        }
-
-        return superclass;
-    }
-
-    public List<InterfaceType> interfaces()  {
-        if (interfaces == null) {
-            interfaces = getInterfaces();
-        }
-        return interfaces;
-    }
-
-    void addInterfaces(List<InterfaceType> list) {
-        List<InterfaceType> immediate = interfaces();
-        list.addAll(interfaces());
-
-        Iterator iter = immediate.iterator();
-        while (iter.hasNext()) {
-            InterfaceTypeImpl interfaze = (InterfaceTypeImpl)iter.next();
-            interfaze.addSuperinterfaces(list);
-        }
-
-        ClassTypeImpl superclass = (ClassTypeImpl)superclass();
-        if (superclass != null) {
-            superclass.addInterfaces(list);
-        }
-    }
-
-    public List<InterfaceType> allInterfaces()  {
-        List<InterfaceType> all = new ArrayList<InterfaceType>();
-        addInterfaces(all);
-        return all;
-    }
-
-    public List<ClassType> subclasses() {
-        List<ClassType> subs = new ArrayList<ClassType>();
-        for (ReferenceType refType : vm.allClasses()) {
-            if (refType instanceof ClassType) {
-                ClassType clazz = (ClassType)refType;
-                ClassType superclass = clazz.superclass();
-                if ((superclass != null) && superclass.equals(this)) {
-                    subs.add((ClassType)refType);
-                }
-            }
-        }
-
-        return subs;
-    }
-
-    public boolean isEnum() {
-        ClassType superclass = superclass();
-        if (superclass != null &&
-            superclass.name().equals("java.lang.Enum")) {
-            return true;
-        }
-        return false;
-    }
-
-    public void setValue(Field field, Value value)
-        throws InvalidTypeException, ClassNotLoadedException {
-
-        validateMirror(field);
-        validateMirrorOrNull(value);
-        validateFieldSet(field);
-
-        // More validation specific to setting from a ClassType
-        if(!field.isStatic()) {
-            throw new IllegalArgumentException(
-                            "Must set non-static field through an instance");
-        }
-
-        try {
-            JDWP.ClassType.SetValues.FieldValue[] values =
-                          new JDWP.ClassType.SetValues.FieldValue[1];
-            values[0] = new JDWP.ClassType.SetValues.FieldValue(
-                    ((FieldImpl)field).ref(),
-                    // validate and convert if necessary
-                    ValueImpl.prepareForAssignment(value, (FieldImpl)field));
-
-            try {
-                JDWP.ClassType.SetValues.process(vm, this, values);
-            } catch (JDWPException exc) {
-                throw exc.toJDIException();
-            }
-        } catch (ClassNotLoadedException e) {
-            /*
-             * Since we got this exception,
-             * the field type must be a reference type. The value
-             * we're trying to set is null, but if the field's
-             * class has not yet been loaded through the enclosing
-             * class loader, then setting to null is essentially a
-             * no-op, and we should allow it without an exception.
-             */
-            if (value != null) {
-                throw e;
-            }
-        }
-    }
-
-    PacketStream sendInvokeCommand(final ThreadReferenceImpl thread,
-                                   final MethodImpl method,
-                                   final ValueImpl[] args,
-                                   final int options) {
-        CommandSender sender =
-            new CommandSender() {
-                public PacketStream send() {
-                    return JDWP.ClassType.InvokeMethod.enqueueCommand(
-                                          vm, ClassTypeImpl.this, thread,
-                                          method.ref(), args, options);
-                }
-        };
-
-        PacketStream stream;
-        if ((options & INVOKE_SINGLE_THREADED) != 0) {
-            stream = thread.sendResumingCommand(sender);
-        } else {
-            stream = vm.sendResumingCommand(sender);
-        }
-        return stream;
-    }
-
-    PacketStream sendNewInstanceCommand(final ThreadReferenceImpl thread,
-                                   final MethodImpl method,
-                                   final ValueImpl[] args,
-                                   final int options) {
-        CommandSender sender =
-            new CommandSender() {
-                public PacketStream send() {
-                    return JDWP.ClassType.NewInstance.enqueueCommand(
-                                          vm, ClassTypeImpl.this, thread,
-                                          method.ref(), args, options);
-                }
-        };
-
-        PacketStream stream;
-        if ((options & INVOKE_SINGLE_THREADED) != 0) {
-            stream = thread.sendResumingCommand(sender);
-        } else {
-            stream = vm.sendResumingCommand(sender);
-        }
-        return stream;
-    }
-
-    public Value invokeMethod(ThreadReference threadIntf, Method methodIntf,
-                              List<? extends Value> origArguments, int options)
-                                   throws InvalidTypeException,
-                                          ClassNotLoadedException,
-                                          IncompatibleThreadStateException,
-                                          InvocationException {
-        validateMirror(threadIntf);
-        validateMirror(methodIntf);
-        validateMirrorsOrNulls(origArguments);
-
-        MethodImpl method = (MethodImpl)methodIntf;
-        ThreadReferenceImpl thread = (ThreadReferenceImpl)threadIntf;
-
-        validateMethodInvocation(method);
-
-        List<? extends Value> arguments = method.validateAndPrepareArgumentsForInvoke(origArguments);
-
-        ValueImpl[] args = arguments.toArray(new ValueImpl[0]);
-        JDWP.ClassType.InvokeMethod ret;
-        try {
-            PacketStream stream =
-                sendInvokeCommand(thread, method, args, options);
-            ret = JDWP.ClassType.InvokeMethod.waitForReply(vm, stream);
-        } catch (JDWPException exc) {
-            if (exc.errorCode() == JDWP.Error.INVALID_THREAD) {
-                throw new IncompatibleThreadStateException();
-            } else {
-                throw exc.toJDIException();
-            }
-        }
-
-        /*
-         * There is an implict VM-wide suspend at the conclusion
-         * of a normal (non-single-threaded) method invoke
-         */
-        if ((options & INVOKE_SINGLE_THREADED) == 0) {
-            vm.notifySuspend();
-        }
-
-        if (ret.exception != null) {
-            throw new InvocationException(ret.exception);
-        } else {
-            return ret.returnValue;
-        }
-    }
-
-    public ObjectReference newInstance(ThreadReference threadIntf,
-                                       Method methodIntf,
-                                       List<? extends Value> origArguments,
-                                       int options)
-                                   throws InvalidTypeException,
-                                          ClassNotLoadedException,
-                                          IncompatibleThreadStateException,
-                                          InvocationException {
-        validateMirror(threadIntf);
-        validateMirror(methodIntf);
-        validateMirrorsOrNulls(origArguments);
-
-        MethodImpl method = (MethodImpl)methodIntf;
-        ThreadReferenceImpl thread = (ThreadReferenceImpl)threadIntf;
-
-        validateConstructorInvocation(method);
-
-        List<Value> arguments = method.validateAndPrepareArgumentsForInvoke(
-                                                       origArguments);
-        ValueImpl[] args = arguments.toArray(new ValueImpl[0]);
-        JDWP.ClassType.NewInstance ret = null;
-        try {
-            PacketStream stream =
-                sendNewInstanceCommand(thread, method, args, options);
-            ret = JDWP.ClassType.NewInstance.waitForReply(vm, stream);
-        } catch (JDWPException exc) {
-            if (exc.errorCode() == JDWP.Error.INVALID_THREAD) {
-                throw new IncompatibleThreadStateException();
-            } else {
-                throw exc.toJDIException();
-            }
-        }
-
-        /*
-         * There is an implict VM-wide suspend at the conclusion
-         * of a normal (non-single-threaded) method invoke
-         */
-        if ((options & INVOKE_SINGLE_THREADED) == 0) {
-            vm.notifySuspend();
-        }
-
-        if (ret.exception != null) {
-            throw new InvocationException(ret.exception);
-        } else {
-            return ret.newObject;
-        }
-    }
-
-    public Method concreteMethodByName(String name, String signature)  {
-       Method method = null;
-       for (Method candidate : visibleMethods()) {
-           if (candidate.name().equals(name) &&
-               candidate.signature().equals(signature) &&
-               !candidate.isAbstract()) {
-
-               method = candidate;
-               break;
-           }
-       }
-       return method;
-   }
-
-   public List<Method> allMethods() {
-        ArrayList<Method> list = new ArrayList<Method>(methods());
-
-        ClassType clazz = superclass();
-        while (clazz != null) {
-            list.addAll(clazz.methods());
-            clazz = clazz.superclass();
-        }
-
-        /*
-         * Avoid duplicate checking on each method by iterating through
-         * duplicate-free allInterfaces() rather than recursing
-         */
-        for (InterfaceType interfaze : allInterfaces()) {
-            list.addAll(interfaze.methods());
-        }
-
-        return list;
-    }
-
-    List<ReferenceType> inheritedTypes() {
-        List<ReferenceType> inherited = new ArrayList<ReferenceType>();
-        if (superclass() != null) {
-            inherited.add(0, (ReferenceType)superclass()); /* insert at front */
-        }
-        for (ReferenceType rt : interfaces()) {
-            inherited.add(rt);
-        }
-        return inherited;
-    }
-
-    void validateMethodInvocation(Method method)
-                                   throws InvalidTypeException,
-                                          InvocationException {
-        /*
-         * Method must be in this class or a superclass.
-         */
-        ReferenceTypeImpl declType = (ReferenceTypeImpl)method.declaringType();
-        if (!declType.isAssignableFrom(this)) {
-            throw new IllegalArgumentException("Invalid method");
-        }
-
-        /*
-         * Method must be a static and not a static initializer
-         */
-        if (!method.isStatic()) {
-            throw new IllegalArgumentException("Cannot invoke instance method on a class type");
-        } else if (method.isStaticInitializer()) {
-            throw new IllegalArgumentException("Cannot invoke static initializer");
-        }
-    }
-
-    void validateConstructorInvocation(Method method)
-                                   throws InvalidTypeException,
-                                          InvocationException {
-        /*
-         * Method must be in this class.
-         */
-        ReferenceTypeImpl declType = (ReferenceTypeImpl)method.declaringType();
-        if (!declType.equals(this)) {
-            throw new IllegalArgumentException("Invalid constructor");
-        }
-
-        /*
-         * Method must be a constructor
-         */
-        if (!method.isConstructor()) {
-            throw new IllegalArgumentException("Cannot create instance with non-constructor");
-        }
-    }
-
-    void addVisibleMethods(Map<String, Method> methodMap) {
-        /*
-         * Add methods from
-         * parent types first, so that the methods in this class will
-         * overwrite them in the hash table
-         */
-
-        Iterator iter = interfaces().iterator();
-        while (iter.hasNext()) {
-            InterfaceTypeImpl interfaze = (InterfaceTypeImpl)iter.next();
-            interfaze.addVisibleMethods(methodMap);
-        }
-
-        ClassTypeImpl clazz = (ClassTypeImpl)superclass();
-        if (clazz != null) {
-            clazz.addVisibleMethods(methodMap);
-        }
-
-        addToMethodMap(methodMap, methods());
-    }
-
-    boolean isAssignableTo(ReferenceType type) {
-        ClassTypeImpl superclazz = (ClassTypeImpl)superclass();
-        if (this.equals(type)) {
-            return true;
-        } else if ((superclazz != null) && superclazz.isAssignableTo(type)) {
-            return true;
-        } else {
-            List<InterfaceType> interfaces = interfaces();
-            Iterator iter = interfaces.iterator();
-            while (iter.hasNext()) {
-                InterfaceTypeImpl interfaze = (InterfaceTypeImpl)iter.next();
-                if (interfaze.isAssignableTo(type)) {
-                    return true;
-                }
-            }
-            return false;
-        }
-    }
-
-    public String toString() {
-       return "class " + name() + " (" + loaderString() + ")";
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/CommandSender.java b/ojluni/src/main/java/com/sun/tools/jdi/CommandSender.java
deleted file mode 100755
index d7916c7..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/CommandSender.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (c) 1999, 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.tools.jdi;
-
-import com.sun.jdi.*;
-import java.util.EventListener;
-
-interface CommandSender {
-    PacketStream send();
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/ConcreteMethodImpl.java b/ojluni/src/main/java/com/sun/tools/jdi/ConcreteMethodImpl.java
deleted file mode 100755
index 435255b..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/ConcreteMethodImpl.java
+++ /dev/null
@@ -1,545 +0,0 @@
-/*
- * Copyright (c) 2000, 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.
- */
-
-package com.sun.tools.jdi;
-
-import com.sun.jdi.*;
-
-import java.util.List;
-import java.util.Map;
-import java.util.Iterator;
-import java.util.ListIterator;
-import java.util.HashMap;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.lang.ref.SoftReference;
-
-/**
- * Represents methods with method bodies.
- * That is, non-native non-abstract methods.
- * Private to MethodImpl.
- */
-public class ConcreteMethodImpl extends MethodImpl {
-
-    /*
-     * A subset of the line number info that is softly cached
-     */
-    static private class SoftLocationXRefs {
-        final String stratumID;   // The stratum of this information
-        final Map<Integer, List<Location>> lineMapper;     // Maps line number to location(s)
-        final List<Location> lineLocations; // List of locations ordered by code index
-
-        /*
-         * Note: these do not necessarily correspond to
-         * the line numbers of the first and last elements
-         * in the lineLocations list. Use these only for bounds
-         * checking and with lineMapper.
-         */
-        final int lowestLine;
-        final int highestLine;
-
-        SoftLocationXRefs(String stratumID, Map<Integer, List<Location>> lineMapper, List<Location> lineLocations,
-                     int lowestLine, int highestLine) {
-            this.stratumID = stratumID;
-            this.lineMapper = Collections.unmodifiableMap(lineMapper);
-            this.lineLocations =
-                Collections.unmodifiableList(lineLocations);
-            this.lowestLine = lowestLine;
-            this.highestLine = highestLine;
-        }
-    }
-
-    private Location location = null;
-    private SoftReference<SoftLocationXRefs> softBaseLocationXRefsRef;
-    private SoftReference<SoftLocationXRefs> softOtherLocationXRefsRef;
-    private SoftReference<List<LocalVariable>> variablesRef = null;
-    private boolean absentVariableInformation = false;
-    private long firstIndex = -1;
-    private long lastIndex = -1;
-    private SoftReference<byte[]> bytecodesRef = null;
-    private int argSlotCount = -1;
-
-    ConcreteMethodImpl(VirtualMachine vm, ReferenceTypeImpl declaringType,
-                       long ref,
-                       String name, String signature,
-                       String genericSignature, int modifiers) {
-
-        // The generic signature is set when this is created
-        super(vm, declaringType, ref, name, signature,
-              genericSignature, modifiers);
-    }
-
-    public Location location() {
-        if (location == null) {
-            getBaseLocations();
-        }
-        return location;
-    }
-
-    List<Location> sourceNameFilter(List<Location> list,
-                          SDE.Stratum stratum,
-                          String sourceName)
-                            throws AbsentInformationException {
-        if (sourceName == null) {
-            return list;
-        } else {
-            /* needs sourceName filteration */
-            List<Location> locs = new ArrayList<Location>();
-            for (Location loc : list) {
-                if (((LocationImpl)loc).sourceName(stratum).equals(sourceName)) {
-                    locs.add(loc);
-                }
-            }
-            return locs;
-        }
-    }
-
-    List<Location> allLineLocations(SDE.Stratum stratum,
-                          String sourceName)
-                            throws AbsentInformationException {
-        List<Location> lineLocations = getLocations(stratum).lineLocations;
-
-        if (lineLocations.size() == 0) {
-            throw new AbsentInformationException();
-        }
-
-        return Collections.unmodifiableList(
-          sourceNameFilter(lineLocations, stratum, sourceName));
-    }
-
-    List<Location> locationsOfLine(SDE.Stratum stratum,
-                         String sourceName,
-                         int lineNumber)
-                            throws AbsentInformationException {
-        SoftLocationXRefs info = getLocations(stratum);
-
-        if (info.lineLocations.size() == 0) {
-            throw new AbsentInformationException();
-        }
-
-        /*
-         * Find the locations which match the line number
-         * passed in.
-         */
-        List<Location> list = info.lineMapper.get(new Integer(lineNumber));
-
-        if (list == null) {
-            list = new ArrayList<Location>(0);
-        }
-        return Collections.unmodifiableList(
-          sourceNameFilter(list, stratum, sourceName));
-    }
-
-
-    public Location locationOfCodeIndex(long codeIndex) {
-        if (firstIndex == -1) {
-            getBaseLocations();
-        }
-
-        /*
-         * Check for invalid code index.
-         */
-        if (codeIndex < firstIndex || codeIndex > lastIndex) {
-            return null;
-        }
-
-        return new LocationImpl(virtualMachine(), this, codeIndex);
-    }
-
-
-    LineInfo codeIndexToLineInfo(SDE.Stratum stratum,
-                                 long codeIndex) {
-        if (firstIndex == -1) {
-            getBaseLocations();
-        }
-
-        /*
-         * Check for invalid code index.
-         */
-        if (codeIndex < firstIndex || codeIndex > lastIndex) {
-            throw new InternalError(
-                    "Location with invalid code index");
-        }
-
-        List<Location> lineLocations = getLocations(stratum).lineLocations;
-
-        /*
-         * Check for absent line numbers.
-         */
-        if (lineLocations.size() == 0) {
-            return super.codeIndexToLineInfo(stratum, codeIndex);
-        }
-
-        Iterator iter = lineLocations.iterator();
-        /*
-         * Treat code before the beginning of the first line table
-         * entry as part of the first line.  javac will generate
-         * code like this for some local classes. This "prolog"
-         * code contains assignments from locals in the enclosing
-         * scope to synthetic fields in the local class.  Same for
-         * other language prolog code.
-         */
-        LocationImpl bestMatch = (LocationImpl)iter.next();
-        while (iter.hasNext()) {
-            LocationImpl current = (LocationImpl)iter.next();
-            if (current.codeIndex() > codeIndex) {
-                break;
-            }
-            bestMatch = current;
-        }
-        return bestMatch.getLineInfo(stratum);
-    }
-
-
-    public List<LocalVariable> variables() throws AbsentInformationException {
-        return getVariables();
-    }
-
-    public List<LocalVariable> variablesByName(String name) throws AbsentInformationException {
-        List<LocalVariable> variables = getVariables();
-
-        List<LocalVariable> retList = new ArrayList<LocalVariable>(2);
-        Iterator iter = variables.iterator();
-        while(iter.hasNext()) {
-            LocalVariable variable = (LocalVariable)iter.next();
-            if (variable.name().equals(name)) {
-                retList.add(variable);
-            }
-        }
-        return retList;
-    }
-
-    public List<LocalVariable> arguments() throws AbsentInformationException {
-        List<LocalVariable> variables = getVariables();
-
-        List<LocalVariable> retList = new ArrayList<LocalVariable>(variables.size());
-        Iterator iter = variables.iterator();
-        while(iter.hasNext()) {
-            LocalVariable variable = (LocalVariable)iter.next();
-            if (variable.isArgument()) {
-                retList.add(variable);
-            }
-        }
-        return retList;
-    }
-
-    public byte[] bytecodes() {
-        byte[] bytecodes = (bytecodesRef == null) ? null :
-                                     bytecodesRef.get();
-        if (bytecodes == null) {
-            try {
-                bytecodes = JDWP.Method.Bytecodes.
-                                 process(vm, declaringType, ref).bytes;
-            } catch (JDWPException exc) {
-                throw exc.toJDIException();
-            }
-            bytecodesRef = new SoftReference<byte[]>(bytecodes);
-        }
-        /*
-         * Arrays are always modifiable, so it is a little unsafe
-         * to return the cached bytecodes directly; instead, we
-         * make a clone at the cost of using more memory.
-         */
-        return bytecodes.clone();
-    }
-
-    int argSlotCount() throws AbsentInformationException {
-        if (argSlotCount == -1) {
-            getVariables();
-        }
-        return argSlotCount;
-    }
-
-    private SoftLocationXRefs getLocations(SDE.Stratum stratum) {
-        if (stratum.isJava()) {
-            return getBaseLocations();
-        }
-        String stratumID = stratum.id();
-        SoftLocationXRefs info =
-            (softOtherLocationXRefsRef == null) ? null :
-               softOtherLocationXRefsRef.get();
-        if (info != null && info.stratumID.equals(stratumID)) {
-            return info;
-        }
-
-        List<Location> lineLocations = new ArrayList<Location>();
-        Map<Integer, List<Location>> lineMapper = new HashMap<Integer, List<Location>>();
-        int lowestLine = -1;
-        int highestLine = -1;
-        SDE.LineStratum lastLineStratum = null;
-        SDE.Stratum baseStratum =
-            declaringType.stratum(SDE.BASE_STRATUM_NAME);
-        Iterator it = getBaseLocations().lineLocations.iterator();
-        while(it.hasNext()) {
-            LocationImpl loc = (LocationImpl)it.next();
-            int baseLineNumber = loc.lineNumber(baseStratum);
-            SDE.LineStratum lineStratum =
-                  stratum.lineStratum(declaringType,
-                                      baseLineNumber);
-
-            if (lineStratum == null) {
-                // location not mapped in this stratum
-                continue;
-            }
-
-            int lineNumber = lineStratum.lineNumber();
-
-            // remove unmapped and dup lines
-            if ((lineNumber != -1) &&
-                          (!lineStratum.equals(lastLineStratum))) {
-                lastLineStratum = lineStratum;
-
-                // Remember the largest/smallest line number
-                if (lineNumber > highestLine) {
-                    highestLine = lineNumber;
-                }
-                if ((lineNumber < lowestLine) || (lowestLine == -1)) {
-                    lowestLine = lineNumber;
-                }
-
-                loc.addStratumLineInfo(
-                  new StratumLineInfo(stratumID,
-                                      lineNumber,
-                                      lineStratum.sourceName(),
-                                      lineStratum.sourcePath()));
-
-                // Add to the location list
-                lineLocations.add(loc);
-
-                // Add to the line -> locations map
-                Integer key = new Integer(lineNumber);
-                List<Location> mappedLocs = lineMapper.get(key);
-                if (mappedLocs == null) {
-                    mappedLocs = new ArrayList<Location>(1);
-                    lineMapper.put(key, mappedLocs);
-                }
-                mappedLocs.add(loc);
-            }
-        }
-
-        info = new SoftLocationXRefs(stratumID,
-                                lineMapper, lineLocations,
-                                lowestLine, highestLine);
-        softOtherLocationXRefsRef = new SoftReference<SoftLocationXRefs>(info);
-        return info;
-    }
-
-    private SoftLocationXRefs getBaseLocations() {
-        SoftLocationXRefs info = (softBaseLocationXRefsRef == null) ? null :
-                                     softBaseLocationXRefsRef.get();
-        if (info != null) {
-            return info;
-        }
-
-        JDWP.Method.LineTable lntab = null;
-        try {
-            lntab = JDWP.Method.LineTable.process(vm, declaringType, ref);
-        } catch (JDWPException exc) {
-            /*
-             * Note: the absent info error shouldn't happen here
-             * because the first and last index are always available.
-             */
-            throw exc.toJDIException();
-        }
-
-        int count  = lntab.lines.length;
-
-        List<Location> lineLocations = new ArrayList<Location>(count);
-        Map<Integer, List<Location>>lineMapper = new HashMap<Integer, List<Location>>();
-        int lowestLine = -1;
-        int highestLine = -1;
-        for (int i = 0; i < count; i++) {
-            long bci = lntab.lines[i].lineCodeIndex;
-            int lineNumber = lntab.lines[i].lineNumber;
-
-            /*
-             * Some compilers will point multiple consecutive
-             * lines at the same location. We need to choose
-             * one of them so that we can consistently map back
-             * and forth between line and location. So we choose
-             * to record only the last line entry at a particular
-             * location.
-             */
-            if ((i + 1 == count) || (bci != lntab.lines[i+1].lineCodeIndex)) {
-                // Remember the largest/smallest line number
-                if (lineNumber > highestLine) {
-                    highestLine = lineNumber;
-                }
-                if ((lineNumber < lowestLine) || (lowestLine == -1)) {
-                    lowestLine = lineNumber;
-                }
-                LocationImpl loc =
-                    new LocationImpl(virtualMachine(), this, bci);
-                loc.addBaseLineInfo(
-                    new BaseLineInfo(lineNumber, declaringType));
-
-                // Add to the location list
-                lineLocations.add(loc);
-
-                // Add to the line -> locations map
-                Integer key = new Integer(lineNumber);
-                List<Location> mappedLocs = lineMapper.get(key);
-                if (mappedLocs == null) {
-                    mappedLocs = new ArrayList<Location>(1);
-                    lineMapper.put(key, mappedLocs);
-                }
-                mappedLocs.add(loc);
-            }
-        }
-
-        /*
-         * firstIndex, lastIndex, and startLocation need to be
-         * retrieved only once since they are strongly referenced.
-         */
-        if (location == null) {
-            firstIndex = lntab.start;
-            lastIndex = lntab.end;
-            /*
-             * The startLocation is the first one in the
-             * location list if we have one;
-             * otherwise, we construct a location for a
-             * method start with no line info
-             */
-            if (count > 0) {
-                location = lineLocations.get(0);
-            } else {
-                location = new LocationImpl(virtualMachine(), this,
-                                            firstIndex);
-            }
-        }
-
-        info = new SoftLocationXRefs(SDE.BASE_STRATUM_NAME,
-                                lineMapper, lineLocations,
-                                lowestLine, highestLine);
-        softBaseLocationXRefsRef = new SoftReference<SoftLocationXRefs>(info);
-        return info;
-    }
-
-    private List<LocalVariable> getVariables1_4() throws AbsentInformationException {
-        JDWP.Method.VariableTable vartab = null;
-        try {
-            vartab = JDWP.Method.VariableTable.
-                                     process(vm, declaringType, ref);
-        } catch (JDWPException exc) {
-            if (exc.errorCode() == JDWP.Error.ABSENT_INFORMATION) {
-                absentVariableInformation = true;
-                throw new AbsentInformationException();
-            } else {
-                throw exc.toJDIException();
-            }
-        }
-
-        // Get the number of slots used by argument variables
-        argSlotCount = vartab.argCnt;
-        int count = vartab.slots.length;
-        List<LocalVariable> variables = new ArrayList<LocalVariable>(count);
-        for (int i=0; i<count; i++) {
-            JDWP.Method.VariableTable.SlotInfo si = vartab.slots[i];
-
-            /*
-             * Skip "this*" entries because they are never real
-             * variables from the JLS perspective.
-             */
-            if (!si.name.startsWith("this$") && !si.name.equals("this")) {
-                Location scopeStart = new LocationImpl(virtualMachine(),
-                                                       this, si.codeIndex);
-                Location scopeEnd =
-                    new LocationImpl(virtualMachine(), this,
-                                     si.codeIndex + si.length - 1);
-                LocalVariable variable =
-                    new LocalVariableImpl(virtualMachine(), this,
-                                          si.slot, scopeStart, scopeEnd,
-                                          si.name, si.signature, null);
-                // Add to the variable list
-                variables.add(variable);
-            }
-        }
-        return variables;
-    }
-
-    private List<LocalVariable> getVariables1() throws AbsentInformationException {
-
-        if (!vm.canGet1_5LanguageFeatures()) {
-            return getVariables1_4();
-        }
-
-        JDWP.Method.VariableTableWithGeneric vartab = null;
-        try {
-            vartab = JDWP.Method.VariableTableWithGeneric.
-                                     process(vm, declaringType, ref);
-        } catch (JDWPException exc) {
-            if (exc.errorCode() == JDWP.Error.ABSENT_INFORMATION) {
-                absentVariableInformation = true;
-                throw new AbsentInformationException();
-            } else {
-                throw exc.toJDIException();
-            }
-        }
-
-        // Get the number of slots used by argument variables
-        argSlotCount = vartab.argCnt;
-        int count = vartab.slots.length;
-        List<LocalVariable> variables = new ArrayList<LocalVariable>(count);
-        for (int i=0; i<count; i++) {
-            JDWP.Method.VariableTableWithGeneric.SlotInfo si = vartab.slots[i];
-
-            /*
-             * Skip "this*" entries because they are never real
-             * variables from the JLS perspective.
-             */
-            if (!si.name.startsWith("this$") && !si.name.equals("this")) {
-                Location scopeStart = new LocationImpl(virtualMachine(),
-                                                       this, si.codeIndex);
-                Location scopeEnd =
-                    new LocationImpl(virtualMachine(), this,
-                                     si.codeIndex + si.length - 1);
-                LocalVariable variable =
-                    new LocalVariableImpl(virtualMachine(), this,
-                                          si.slot, scopeStart, scopeEnd,
-                                          si.name, si.signature,
-                                          si.genericSignature);
-                // Add to the variable list
-                variables.add(variable);
-            }
-        }
-        return variables;
-    }
-
-    private List<LocalVariable> getVariables() throws AbsentInformationException {
-        if (absentVariableInformation) {
-            throw new AbsentInformationException();
-        }
-
-        List<LocalVariable> variables = (variablesRef == null) ? null :
-                                        variablesRef.get();
-        if (variables != null) {
-            return variables;
-        }
-        variables = getVariables1();
-        variables = Collections.unmodifiableList(variables);
-        variablesRef = new SoftReference<List<LocalVariable>>(variables);
-        return variables;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/ConnectorImpl.java b/ojluni/src/main/java/com/sun/tools/jdi/ConnectorImpl.java
deleted file mode 100755
index 3b594b9..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/ConnectorImpl.java
+++ /dev/null
@@ -1,425 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package com.sun.tools.jdi;
-
-import com.sun.tools.jdi.*;
-import com.sun.jdi.*;
-import com.sun.jdi.connect.*;
-import com.sun.jdi.InternalException;
-import java.util.Collections;
-import java.util.Collection;
-import java.util.Map;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.ResourceBundle;
-import java.io.Serializable;
-
-abstract class ConnectorImpl implements Connector {
-    Map<String,Argument> defaultArguments = new java.util.LinkedHashMap<String,Argument>();
-
-    // Used by BooleanArgument
-    static String trueString = null;
-    static String falseString;
-
-    public Map<String,Argument> defaultArguments() {
-        Map<String,Argument> defaults = new java.util.LinkedHashMap<String,Argument>();
-        Collection values = defaultArguments.values();
-
-        Iterator iter = values.iterator();
-        while (iter.hasNext()) {
-            ArgumentImpl argument = (ArgumentImpl)iter.next();
-            defaults.put(argument.name(), (Argument)argument.clone());
-        }
-        return defaults;
-    }
-
-    void addStringArgument(String name, String label, String description,
-                           String defaultValue, boolean mustSpecify) {
-        defaultArguments.put(name,
-                             new StringArgumentImpl(name, label,
-                                                    description,
-                                                    defaultValue,
-                                                    mustSpecify));
-    }
-
-    void addBooleanArgument(String name, String label, String description,
-                            boolean defaultValue, boolean mustSpecify) {
-        defaultArguments.put(name,
-                             new BooleanArgumentImpl(name, label,
-                                                     description,
-                                                     defaultValue,
-                                                     mustSpecify));
-    }
-
-    void addIntegerArgument(String name, String label, String description,
-                            String defaultValue, boolean mustSpecify,
-                            int min, int max) {
-        defaultArguments.put(name,
-                             new IntegerArgumentImpl(name, label,
-                                                     description,
-                                                     defaultValue,
-                                                     mustSpecify,
-                                                     min, max));
-    }
-
-    void addSelectedArgument(String name, String label, String description,
-                             String defaultValue, boolean mustSpecify,
-                             List<String> list) {
-        defaultArguments.put(name,
-                             new SelectedArgumentImpl(name, label,
-                                                      description,
-                                                      defaultValue,
-                                                      mustSpecify, list));
-    }
-
-    ArgumentImpl argument(String name, Map arguments)
-                throws IllegalConnectorArgumentsException {
-
-        ArgumentImpl argument = (ArgumentImpl)arguments.get(name);
-        if (argument == null) {
-            throw new IllegalConnectorArgumentsException(
-                         "Argument missing", name);
-        }
-        String value = argument.value();
-        if (value == null || value.length() == 0) {
-            if (argument.mustSpecify()) {
-            throw new IllegalConnectorArgumentsException(
-                         "Argument unspecified", name);
-            }
-        } else if(!argument.isValid(value)) {
-            throw new IllegalConnectorArgumentsException(
-                         "Argument invalid", name);
-        }
-
-        return argument;
-    }
-
-
-    private ResourceBundle messages = null;
-
-    String getString(String key) {
-        if (messages == null) {
-            messages = ResourceBundle.getBundle("com.sun.tools.jdi.resources.jdi");
-        }
-        return messages.getString(key);
-    }
-
-    public String toString() {
-        String string = name() + " (defaults: ";
-        Iterator iter = defaultArguments().values().iterator();
-        boolean first = true;
-        while (iter.hasNext()) {
-            ArgumentImpl argument = (ArgumentImpl)iter.next();
-            if (!first) {
-                string += ", ";
-            }
-            string += argument.toString();
-            first = false;
-        }
-        string += ")";
-        return string;
-    }
-
-    abstract class ArgumentImpl implements Connector.Argument, Cloneable, Serializable {
-        private String name;
-        private String label;
-        private String description;
-        private String value;
-        private boolean mustSpecify;
-
-        ArgumentImpl(String name, String label, String description,
-                     String value,
-                     boolean mustSpecify) {
-            this.name = name;
-            this.label = label;
-            this.description = description;
-            this.value = value;
-            this.mustSpecify = mustSpecify;
-        }
-
-        public abstract boolean isValid(String value);
-
-        public String name() {
-            return name;
-        }
-
-        public String label() {
-            return label;
-        }
-
-        public String description() {
-            return description;
-        }
-
-        public String value() {
-            return value;
-        }
-
-        public void setValue(String value) {
-            if (value == null) {
-                throw new NullPointerException("Can't set null value");
-            }
-            this.value = value;
-        }
-
-        public boolean mustSpecify() {
-            return mustSpecify;
-        }
-
-        public boolean equals(Object obj) {
-            if ((obj != null) && (obj instanceof Connector.Argument)) {
-                Connector.Argument other = (Connector.Argument)obj;
-                return (name().equals(other.name())) &&
-                       (description().equals(other.description())) &&
-                       (mustSpecify() == other.mustSpecify()) &&
-                       (value().equals(other.value()));
-            } else {
-                return false;
-            }
-        }
-
-        public int hashCode() {
-            return description().hashCode();
-        }
-
-        public Object clone() {
-            try {
-                return super.clone();
-            } catch (CloneNotSupportedException e) {
-                // Object should always support clone
-                throw new InternalException();
-            }
-        }
-
-        public String toString() {
-            return name() + "=" + value();
-        }
-    }
-
-    class BooleanArgumentImpl extends ConnectorImpl.ArgumentImpl
-                              implements Connector.BooleanArgument {
-
-        BooleanArgumentImpl(String name, String label, String description,
-                            boolean value,
-                            boolean mustSpecify) {
-            super(name, label, description, null, mustSpecify);
-            if(trueString == null) {
-                trueString = getString("true");
-                falseString = getString("false");
-            }
-            setValue(value);
-        }
-
-        /**
-         * Sets the value of the argument.
-         */
-        public void setValue(boolean value) {
-            setValue(stringValueOf(value));
-        }
-
-        /**
-         * Performs basic sanity check of argument.
-         * @return <code>true</code> if value is a string
-         * representation of a boolean value.
-         * @see #stringValueOf(boolean)
-         */
-        public boolean isValid(String value) {
-            return value.equals(trueString) || value.equals(falseString);
-        }
-
-        /**
-         * Return the string representation of the <code>value</code>
-         * parameter.
-         * Does not set or examine the value or the argument.
-         * @return the localized String representation of the
-         * boolean value.
-         */
-        public String stringValueOf(boolean value) {
-            return value? trueString : falseString;
-        }
-
-        /**
-         * Return the value of the argument as a boolean.  Since
-         * the argument may not have been set or may have an invalid
-         * value {@link #isValid(String)} should be called on
-         * {@link #value()} to check its validity.  If it is invalid
-         * the boolean returned by this method is undefined.
-         * @return the value of the argument as a boolean.
-         */
-        public boolean booleanValue() {
-            return value().equals(trueString);
-        }
-    }
-
-    class IntegerArgumentImpl extends ConnectorImpl.ArgumentImpl
-                              implements Connector.IntegerArgument {
-
-        private final int min;
-        private final int max;
-
-        IntegerArgumentImpl(String name, String label, String description,
-                            String value,
-                            boolean mustSpecify, int min, int max) {
-            super(name, label, description, value, mustSpecify);
-            this.min = min;
-            this.max = max;
-        }
-
-        /**
-         * Sets the value of the argument.
-         * The value should be checked with {@link #isValid(int)}
-         * before setting it; invalid values will throw an exception
-         * when the connection is established - for example,
-         * on {@link LaunchingConnector#launch}
-         */
-        public void setValue(int value) {
-            setValue(stringValueOf(value));
-        }
-
-        /**
-         * Performs basic sanity check of argument.
-         * @return <code>true</code> if value represents an int that is
-         * <code>{@link #min()} &lt;= value &lt;= {@link #max()}</code>
-         */
-        public boolean isValid(String value) {
-            if (value == null) {
-                return false;
-            }
-            try {
-                return isValid(Integer.decode(value).intValue());
-            } catch(NumberFormatException exc) {
-                return false;
-            }
-        }
-
-        /**
-         * Performs basic sanity check of argument.
-         * @return <code>true</code> if
-         * <code>{@link #min()} &lt;= value  &lt;= {@link #max()}</code>
-         */
-        public boolean isValid(int value) {
-            return min <= value && value <= max;
-        }
-
-        /**
-         * Return the string representation of the <code>value</code>
-         * parameter.
-         * Does not set or examine the value or the argument.
-         * @return the String representation of the
-         * int value.
-         */
-        public String stringValueOf(int value) {
-            // *** Should this be internationalized????
-            // *** Even Brian Beck was unsure if an Arabic programmer
-            // *** would expect port numbers in Arabic numerals,
-            // *** so punt for now.
-            return ""+value;
-        }
-
-        /**
-         * Return the value of the argument as a int.  Since
-         * the argument may not have been set or may have an invalid
-         * value {@link #isValid(String)} should be called on
-         * {@link #value()} to check its validity.  If it is invalid
-         * the int returned by this method is undefined.
-         * @return the value of the argument as a int.
-         */
-        public int intValue() {
-            if (value() == null) {
-                return 0;
-            }
-            try {
-                return Integer.decode(value()).intValue();
-            } catch(NumberFormatException exc) {
-                return 0;
-            }
-        }
-
-        /**
-         * The upper bound for the value.
-         * @return the maximum allowed value for this argument.
-         */
-        public int max() {
-            return max;
-        }
-
-        /**
-         * The lower bound for the value.
-         * @return the minimum allowed value for this argument.
-         */
-        public int min() {
-            return min;
-        }
-    }
-
-    class StringArgumentImpl extends ConnectorImpl.ArgumentImpl
-                              implements Connector.StringArgument {
-
-        StringArgumentImpl(String name, String label, String description,
-                           String value,
-                           boolean mustSpecify) {
-            super(name, label, description, value, mustSpecify);
-        }
-
-        /**
-         * Performs basic sanity check of argument.
-         * @return <code>true</code> always
-         */
-        public boolean isValid(String value) {
-            return true;
-        }
-    }
-
-    class SelectedArgumentImpl extends ConnectorImpl.ArgumentImpl
-                              implements Connector.SelectedArgument {
-
-        private final List<String> choices;
-
-        SelectedArgumentImpl(String name, String label, String description,
-                             String value,
-                             boolean mustSpecify, List<String> choices) {
-            super(name, label, description, value, mustSpecify);
-            this.choices = Collections.unmodifiableList(new ArrayList<String>(choices));
-        }
-
-        /**
-         * Return the possible values for the argument
-         * @return {@link List} of {@link String}
-         */
-        public List<String> choices() {
-            return choices;
-        }
-
-        /**
-         * Performs basic sanity check of argument.
-         * @return <code>true</code> if value is one of {@link #choices()}.
-         */
-        public boolean isValid(String value) {
-            return choices.contains(value);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/DoubleTypeImpl.java b/ojluni/src/main/java/com/sun/tools/jdi/DoubleTypeImpl.java
deleted file mode 100755
index d075999..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/DoubleTypeImpl.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (c) 1998, 1999, 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.tools.jdi;
-
-import com.sun.jdi.*;
-
-public class DoubleTypeImpl extends PrimitiveTypeImpl implements DoubleType {
-    DoubleTypeImpl(VirtualMachine vm) {
-        super(vm);
-    }
-
-
-    public String signature() {
-        return String.valueOf((char)JDWP.Tag.DOUBLE);
-    }
-
-    PrimitiveValue convert(PrimitiveValue value) throws InvalidTypeException {
-        return vm.mirrorOf(((PrimitiveValueImpl)value).checkedDoubleValue());
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/DoubleValueImpl.java b/ojluni/src/main/java/com/sun/tools/jdi/DoubleValueImpl.java
deleted file mode 100755
index 5f6d387..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/DoubleValueImpl.java
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package com.sun.tools.jdi;
-
-import com.sun.jdi.*;
-
-public class DoubleValueImpl extends PrimitiveValueImpl
-                             implements DoubleValue {
-    private double value;
-
-    DoubleValueImpl(VirtualMachine aVm,double aValue) {
-        super(aVm);
-
-        value = aValue;
-    }
-
-    public boolean equals(Object obj) {
-        if ((obj != null) && (obj instanceof DoubleValue)) {
-            return (value == ((DoubleValue)obj).value()) &&
-                   super.equals(obj);
-        } else {
-            return false;
-        }
-    }
-
-    public int compareTo(DoubleValue obj) {
-        double other = obj.value();
-        if (value() < other) {
-            return -1;
-        } else if (value() == other) {
-            return 0;
-        } else {
-            return 1;
-        }
-    }
-
-    public int hashCode() {
-        /*
-         * TO DO: Better hash code
-         */
-        return intValue();
-    }
-
-    public Type type() {
-        return vm.theDoubleType();
-    }
-
-    public double value() {
-        return value;
-    }
-
-    public boolean booleanValue() {
-        return(value == 0.0)?false:true;
-    }
-
-    public byte byteValue() {
-        return(byte)value;
-    }
-
-    public char charValue() {
-        return(char)value;
-    }
-
-    public short shortValue() {
-        return(short)value;
-    }
-
-    public int intValue() {
-        return(int)value;
-    }
-
-    public long longValue() {
-        return(long)value;
-    }
-
-    public float floatValue() {
-        return(float)value;
-    }
-
-    public double doubleValue() {
-        return(double)value;
-    }
-
-    byte checkedByteValue() throws InvalidTypeException {
-        if ((value > Byte.MAX_VALUE) || (value < Byte.MIN_VALUE)) {
-            throw new InvalidTypeException("Can't convert " + value + " to byte");
-        } else {
-            return super.checkedByteValue();
-        }
-    }
-
-    char checkedCharValue() throws InvalidTypeException {
-        if ((value > Character.MAX_VALUE) || (value < Character.MIN_VALUE)) {
-            throw new InvalidTypeException("Can't convert " + value + " to char");
-        } else {
-            return super.checkedCharValue();
-        }
-    }
-
-    short checkedShortValue() throws InvalidTypeException {
-        if ((value > Short.MAX_VALUE) || (value < Short.MIN_VALUE)) {
-            throw new InvalidTypeException("Can't convert " + value + " to short");
-        } else {
-            return super.checkedShortValue();
-        }
-    }
-
-    int checkedIntValue() throws InvalidTypeException {
-        if ((value > Integer.MAX_VALUE) || (value < Integer.MIN_VALUE)) {
-            throw new InvalidTypeException("Can't convert " + value + " to int");
-        } else {
-            return super.checkedIntValue();
-        }
-    }
-
-    long checkedLongValue() throws InvalidTypeException {
-        long longValue = (long)value;
-        if (longValue != value) {
-            throw new InvalidTypeException("Can't convert " + value + " to long");
-        } else {
-            return super.checkedLongValue();
-        }
-    }
-
-    float checkedFloatValue() throws InvalidTypeException {
-        float floatValue = (float)value;
-        if (floatValue != value) {
-            throw new InvalidTypeException("Can't convert " + value + " to float");
-        } else {
-            return super.checkedFloatValue();
-        }
-    }
-
-    public String toString() {
-        return "" + value;
-    }
-
-    byte typeValueKey() {
-        return JDWP.Tag.DOUBLE;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/EventQueueImpl.java b/ojluni/src/main/java/com/sun/tools/jdi/EventQueueImpl.java
deleted file mode 100755
index ca8e33f..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/EventQueueImpl.java
+++ /dev/null
@@ -1,242 +0,0 @@
-/*
- * Copyright (c) 1998, 2006, 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.tools.jdi;
-
-import com.sun.jdi.*;
-import com.sun.jdi.event.EventQueue;
-import com.sun.jdi.event.EventSet;
-
-import java.util.*;
-
-public class EventQueueImpl extends MirrorImpl implements EventQueue {
-
-    /*
-     * Note this is not a synchronized list. Iteration/update should be
-     * protected through the 'this' monitor.
-     */
-    LinkedList<EventSet> eventSets = new LinkedList<EventSet>();
-
-    TargetVM target;
-    boolean closed = false;
-
-    EventQueueImpl(VirtualMachine vm, TargetVM target) {
-        super(vm);
-        this.target = target;
-        target.addEventQueue(this);
-    }
-
-    /*
-     * Override superclass back to default equality
-     */
-    public boolean equals(Object obj) {
-        return this == obj;
-    }
-
-    public int hashCode() {
-        return System.identityHashCode(this);
-    }
-
-    synchronized void enqueue(EventSet eventSet) {
-        eventSets.add(eventSet);
-        notifyAll();
-    }
-
-    synchronized int size() {
-        return eventSets.size();
-    }
-
-    synchronized void close() {
-        if (!closed) {
-            closed = true; // OK for this the be first since synchronized
-
-            // place VMDisconnectEvent into queue
-            enqueue(new EventSetImpl(vm,
-                                     (byte)JDWP.EventKind.VM_DISCONNECTED));
-        }
-    }
-
-    public EventSet remove() throws InterruptedException {
-        return remove(0);
-    }
-
-    /**
-     * Filter out events not for user's eyes.
-     * Then filter out empty sets.
-     */
-    public EventSet remove(long timeout) throws InterruptedException {
-        if (timeout < 0) {
-            throw new IllegalArgumentException("Timeout cannot be negative");
-        }
-
-        EventSet eventSet;
-        while (true) {
-            EventSetImpl fullEventSet = removeUnfiltered(timeout);
-            if (fullEventSet == null) {
-                eventSet = null;  // timeout
-                break;
-            }
-            /*
-             * Remove events from the event set for which
-             * there is no corresponding enabled request (
-             * this includes our internally requested events.)
-             * This never returns null
-             */
-            eventSet = fullEventSet.userFilter();
-            if (!eventSet.isEmpty()) {
-                break;
-            }
-        }
-
-        if ((eventSet != null) && (eventSet.suspendPolicy() == JDWP.SuspendPolicy.ALL)) {
-            vm.notifySuspend();
-        }
-
-        return eventSet;
-    }
-
-    EventSet removeInternal() throws InterruptedException {
-        EventSet eventSet;
-        do {
-            // Waiting forever, so removeUnfiltered() is never null
-            eventSet = removeUnfiltered(0).internalFilter();
-        } while (eventSet == null || eventSet.isEmpty());
-
-        /*
-         * Currently, no internal events are requested with a suspend
-         * policy other than none, so we don't check for notifySuspend()
-         * here. If this changes in the future, there is much
-         * infrastructure that needs to be updated.
-         */
-
-        return eventSet;
-    }
-
-    private TimerThread startTimerThread(long timeout) {
-        TimerThread thread = new TimerThread(timeout);
-        thread.setDaemon(true);
-        thread.start();
-        return thread;
-    }
-
-    private boolean shouldWait(TimerThread timerThread) {
-        return !closed && eventSets.isEmpty() &&
-               ((timerThread == null) ? true : !timerThread.timedOut());
-    }
-
-    private EventSetImpl removeUnfiltered(long timeout)
-                                               throws InterruptedException {
-        EventSetImpl eventSet = null;
-
-        /*
-         * Make sure the VM has completed initialization before
-         * trying to build events.
-         */
-        vm.waitInitCompletion();
-
-        synchronized(this) {
-            if (!eventSets.isEmpty()) {
-                /*
-                 * If there's already something there, no need
-                 * for anything elaborate.
-                 */
-                eventSet = (EventSetImpl)eventSets.removeFirst();
-            } else {
-                /*
-                 * If a timeout was specified, create a thread to
-                 * notify this one when a timeout
-                 * occurs. We can't use the timed version of wait()
-                 * because it is possible for multiple enqueue() calls
-                 * before we see something in the eventSet queue
-                 * (this is possible when multiple threads call
-                 * remove() concurrently -- not a great idea, but
-                 * it should be supported). Even if enqueue() did a
-                 * notify() instead of notifyAll() we are not able to
-                 * use a timed wait because there's no way to distinguish
-                 * a timeout from a notify.  That limitation implies a
-                 * possible race condition between a timed out thread
-                 * and a notified thread.
-                 */
-                TimerThread timerThread = null;
-                try {
-                    if (timeout > 0) {
-                        timerThread = startTimerThread(timeout);
-                    }
-
-                    while (shouldWait(timerThread)) {
-                        this.wait();
-                    }
-                } finally {
-                    if ((timerThread != null) && !timerThread.timedOut()) {
-                        timerThread.interrupt();
-                    }
-                }
-
-                if (eventSets.isEmpty()) {
-                    if (closed) {
-                        throw new VMDisconnectedException();
-                    }
-                } else {
-                    eventSet = (EventSetImpl)eventSets.removeFirst();
-                }
-            }
-        }
-
-        // The build is synchronized on the event set, don't hold
-        // the queue lock.
-        if (eventSet != null) {
-            target.notifyDequeueEventSet();
-            eventSet.build();
-        }
-        return eventSet;
-    }
-
-    private class TimerThread extends Thread {
-        private boolean timedOut = false;
-        private long timeout;
-
-        TimerThread(long timeout) {
-            super(vm.threadGroupForJDI(), "JDI Event Queue Timer");
-            this.timeout = timeout;
-        }
-
-        boolean timedOut() {
-            return timedOut;
-        }
-
-        public void run() {
-            try {
-                Thread.sleep(timeout);
-                EventQueueImpl queue = EventQueueImpl.this;
-                synchronized(queue) {
-                    timedOut = true;
-                    queue.notifyAll();
-                }
-            } catch (InterruptedException e) {
-                // Exit without notifying
-            }
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/EventRequestManagerImpl.java b/ojluni/src/main/java/com/sun/tools/jdi/EventRequestManagerImpl.java
deleted file mode 100755
index d9f27f6..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/EventRequestManagerImpl.java
+++ /dev/null
@@ -1,955 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package com.sun.tools.jdi;
-
-import com.sun.jdi.*;
-import com.sun.jdi.request.*;
-import com.sun.tools.jdi.JDWP;
-
-import java.util.*;
-
-/**
- * This interface is used to create and remove Breakpoints, Watchpoints,
- * etc.
- * It include implementations of all the request interfaces..
- */
-// Warnings from List filters and List[] requestLists is  hard to fix.
-// Remove SuppressWarning when we fix the warnings from List filters
-// and List[] requestLists. The generic array is not supported.
-@SuppressWarnings("unchecked")
-class EventRequestManagerImpl extends MirrorImpl
-                                       implements EventRequestManager
-{
-    List[] requestLists;
-    private static int methodExitEventCmd = 0;
-
-    static int JDWPtoJDISuspendPolicy(byte jdwpPolicy) {
-        switch(jdwpPolicy) {
-            case JDWP.SuspendPolicy.ALL:
-                return EventRequest.SUSPEND_ALL;
-            case JDWP.SuspendPolicy.EVENT_THREAD:
-                return EventRequest.SUSPEND_EVENT_THREAD;
-        case JDWP.SuspendPolicy.NONE:
-                return EventRequest.SUSPEND_NONE;
-            default:
-                throw new IllegalArgumentException("Illegal policy constant: " + jdwpPolicy);
-        }
-    }
-
-    static byte JDItoJDWPSuspendPolicy(int jdiPolicy) {
-        switch(jdiPolicy) {
-            case EventRequest.SUSPEND_ALL:
-                return JDWP.SuspendPolicy.ALL;
-            case EventRequest.SUSPEND_EVENT_THREAD:
-                return JDWP.SuspendPolicy.EVENT_THREAD;
-            case EventRequest.SUSPEND_NONE:
-                return JDWP.SuspendPolicy.NONE;
-            default:
-                throw new IllegalArgumentException("Illegal policy constant: " + jdiPolicy);
-        }
-    }
-
-    /*
-     * Override superclass back to default equality
-     */
-    public boolean equals(Object obj) {
-        return this == obj;
-    }
-
-    public int hashCode() {
-        return System.identityHashCode(this);
-    }
-
-    abstract class EventRequestImpl extends MirrorImpl implements EventRequest {
-        int id;
-
-        /*
-         * This list is not protected by a synchronized wrapper. All
-         * access/modification should be protected by synchronizing on
-         * the enclosing instance of EventRequestImpl.
-         */
-        List filters = new ArrayList();
-
-        boolean isEnabled = false;
-        boolean deleted = false;
-        byte suspendPolicy = JDWP.SuspendPolicy.ALL;
-        private Map<Object, Object> clientProperties = null;
-
-        EventRequestImpl() {
-            super(EventRequestManagerImpl.this.vm);
-        }
-
-
-        /*
-         * Override superclass back to default equality
-         */
-        public boolean equals(Object obj) {
-            return this == obj;
-        }
-
-        public int hashCode() {
-            return System.identityHashCode(this);
-        }
-
-        abstract int eventCmd();
-
-        InvalidRequestStateException invalidState() {
-            return new InvalidRequestStateException(toString());
-        }
-
-        String state() {
-            return deleted? " (deleted)" :
-                (isEnabled()? " (enabled)" : " (disabled)");
-        }
-
-        /**
-         * @return all the event request of this kind
-         */
-        List requestList() {
-            return EventRequestManagerImpl.this.requestList(eventCmd());
-        }
-
-        /**
-         * delete the event request
-         */
-        void delete() {
-            if (!deleted) {
-                requestList().remove(this);
-                disable(); /* must do BEFORE delete */
-                deleted = true;
-            }
-        }
-
-        public boolean isEnabled() {
-            return isEnabled;
-        }
-
-        public void enable() {
-            setEnabled(true);
-        }
-
-        public void disable() {
-            setEnabled(false);
-        }
-
-        public synchronized void setEnabled(boolean val) {
-            if (deleted) {
-                throw invalidState();
-            } else {
-                if (val != isEnabled) {
-                    if (isEnabled) {
-                        clear();
-                    } else {
-                        set();
-                    }
-                }
-            }
-        }
-
-        public synchronized void addCountFilter(int count) {
-            if (isEnabled() || deleted) {
-                throw invalidState();
-            }
-            if (count < 1) {
-                throw new IllegalArgumentException("count is less than one");
-            }
-            filters.add(JDWP.EventRequest.Set.Modifier.Count.create(count));
-        }
-
-        public void setSuspendPolicy(int policy) {
-            if (isEnabled() || deleted) {
-                throw invalidState();
-            }
-            suspendPolicy = JDItoJDWPSuspendPolicy(policy);
-        }
-
-        public int suspendPolicy() {
-            return JDWPtoJDISuspendPolicy(suspendPolicy);
-        }
-
-        /**
-         * set (enable) the event request
-         */
-        synchronized void set() {
-            JDWP.EventRequest.Set.Modifier[] mods =
-                (JDWP.EventRequest.Set.Modifier[])
-                filters.toArray(
-                    new JDWP.EventRequest.Set.Modifier[filters.size()]);
-            try {
-                id = JDWP.EventRequest.Set.process(vm, (byte)eventCmd(),
-                                                   suspendPolicy, mods).requestID;
-            } catch (JDWPException exc) {
-                throw exc.toJDIException();
-            }
-            isEnabled = true;
-        }
-
-        synchronized void clear() {
-            try {
-                JDWP.EventRequest.Clear.process(vm, (byte)eventCmd(), id);
-            } catch (JDWPException exc) {
-                throw exc.toJDIException();
-            }
-            isEnabled = false;
-        }
-
-        /**
-         * @return a small Map
-         * @see #putProperty
-         * @see #getProperty
-         */
-        private Map<Object, Object> getProperties() {
-            if (clientProperties == null) {
-                clientProperties = new HashMap<Object, Object>(2);
-            }
-            return clientProperties;
-        }
-
-        /**
-         * Returns the value of the property with the specified key.  Only
-         * properties added with <code>putProperty</code> will return
-         * a non-null value.
-         *
-         * @return the value of this property or null
-         * @see #putProperty
-         */
-        public final Object getProperty(Object key) {
-            if (clientProperties == null) {
-                return null;
-            } else {
-                return getProperties().get(key);
-            }
-        }
-
-        /**
-         * Add an arbitrary key/value "property" to this component.
-         *
-         * @see #getProperty
-         */
-        public final void putProperty(Object key, Object value) {
-            if (value != null) {
-                getProperties().put(key, value);
-            } else {
-                getProperties().remove(key);
-            }
-        }
-    }
-
-    abstract class ThreadVisibleEventRequestImpl extends EventRequestImpl {
-        public synchronized void addThreadFilter(ThreadReference thread) {
-            validateMirror(thread);
-            if (isEnabled() || deleted) {
-                throw invalidState();
-            }
-            filters.add(JDWP.EventRequest.Set.Modifier.ThreadOnly
-                                      .create((ThreadReferenceImpl)thread));
-        }
-    }
-
-    abstract class ClassVisibleEventRequestImpl
-                                  extends ThreadVisibleEventRequestImpl {
-        public synchronized void addClassFilter(ReferenceType clazz) {
-            validateMirror(clazz);
-            if (isEnabled() || deleted) {
-                throw invalidState();
-            }
-            filters.add(JDWP.EventRequest.Set.Modifier.ClassOnly
-                                      .create((ReferenceTypeImpl)clazz));
-        }
-
-        public synchronized void addClassFilter(String classPattern) {
-            if (isEnabled() || deleted) {
-                throw invalidState();
-            }
-            if (classPattern == null) {
-                throw new NullPointerException();
-            }
-            filters.add(JDWP.EventRequest.Set.Modifier.ClassMatch
-                                      .create(classPattern));
-        }
-
-        public synchronized void addClassExclusionFilter(String classPattern) {
-            if (isEnabled() || deleted) {
-                throw invalidState();
-            }
-            if (classPattern == null) {
-                throw new NullPointerException();
-            }
-            filters.add(JDWP.EventRequest.Set.Modifier.ClassExclude
-                                      .create(classPattern));
-        }
-
-        public synchronized void addInstanceFilter(ObjectReference instance) {
-            validateMirror(instance);
-            if (isEnabled() || deleted) {
-                throw invalidState();
-            }
-            if (!vm.canUseInstanceFilters()) {
-                throw new UnsupportedOperationException(
-                     "target does not support instance filters");
-            }
-            filters.add(JDWP.EventRequest.Set.Modifier.InstanceOnly
-                                      .create((ObjectReferenceImpl)instance));
-        }
-    }
-
-    class BreakpointRequestImpl extends ClassVisibleEventRequestImpl
-                                     implements BreakpointRequest {
-        private final Location location;
-
-        BreakpointRequestImpl(Location location) {
-            this.location = location;
-            filters.add(0,JDWP.EventRequest.Set.Modifier.LocationOnly
-                                                 .create(location));
-            requestList().add(this);
-        }
-
-        public Location location() {
-            return location;
-        }
-
-        int eventCmd() {
-            return JDWP.EventKind.BREAKPOINT;
-        }
-
-        public String toString() {
-            return "breakpoint request " + location() + state();
-        }
-    }
-
-    class ClassPrepareRequestImpl extends ClassVisibleEventRequestImpl
-                                     implements ClassPrepareRequest {
-        ClassPrepareRequestImpl() {
-            requestList().add(this);
-        }
-
-        int eventCmd() {
-            return JDWP.EventKind.CLASS_PREPARE;
-        }
-
-        public synchronized void addSourceNameFilter(String sourceNamePattern) {
-            if (isEnabled() || deleted) {
-                throw invalidState();
-            }
-            if (!vm.canUseSourceNameFilters()) {
-                throw new UnsupportedOperationException(
-                     "target does not support source name filters");
-            }
-            if (sourceNamePattern == null) {
-                throw new NullPointerException();
-            }
-
-            filters.add(JDWP.EventRequest.Set.Modifier.SourceNameMatch
-                                      .create(sourceNamePattern));
-        }
-
-        public String toString() {
-            return "class prepare request " + state();
-        }
-    }
-
-    class ClassUnloadRequestImpl extends ClassVisibleEventRequestImpl
-                                     implements ClassUnloadRequest {
-        ClassUnloadRequestImpl() {
-            requestList().add(this);
-        }
-
-        int eventCmd() {
-            return JDWP.EventKind.CLASS_UNLOAD;
-        }
-
-        public String toString() {
-            return "class unload request " + state();
-        }
-    }
-
-    class ExceptionRequestImpl extends ClassVisibleEventRequestImpl
-                                      implements ExceptionRequest {
-        ReferenceType exception = null;
-        boolean caught = true;
-        boolean uncaught = true;
-
-        ExceptionRequestImpl(ReferenceType refType,
-                          boolean notifyCaught, boolean notifyUncaught) {
-            exception = refType;
-            caught = notifyCaught;
-            uncaught = notifyUncaught;
-            {
-                ReferenceTypeImpl exc;
-                if (exception == null) {
-                    exc = new ClassTypeImpl(vm, 0);
-                } else {
-                    exc = (ReferenceTypeImpl)exception;
-                }
-                filters.add(JDWP.EventRequest.Set.Modifier.ExceptionOnly.
-                            create(exc, caught, uncaught));
-            }
-            requestList().add(this);
-        }
-
-        public ReferenceType exception() {
-            return exception;
-        }
-
-        public boolean notifyCaught() {
-            return caught;
-        }
-
-        public boolean notifyUncaught() {
-            return uncaught;
-        }
-
-        int eventCmd() {
-            return JDWP.EventKind.EXCEPTION;
-        }
-
-        public String toString() {
-            return "exception request " + exception() + state();
-        }
-    }
-
-    class MethodEntryRequestImpl extends ClassVisibleEventRequestImpl
-                                      implements MethodEntryRequest {
-        MethodEntryRequestImpl() {
-            requestList().add(this);
-        }
-
-        int eventCmd() {
-            return JDWP.EventKind.METHOD_ENTRY;
-        }
-
-        public String toString() {
-            return "method entry request " + state();
-        }
-    }
-
-    class MethodExitRequestImpl extends ClassVisibleEventRequestImpl
-                                      implements MethodExitRequest {
-        MethodExitRequestImpl() {
-            if (methodExitEventCmd == 0) {
-                /*
-                 * If we can get return values, then we always get them.
-                 * Thus, for JDI MethodExitRequests, we always use the
-                 * same JDWP EventKind.  Here we decide which to use and
-                 * save it so that it will be used for all future
-                 * MethodExitRequests.
-                 *
-                 * This call to canGetMethodReturnValues can't
-                 * be done in the EventRequestManager ctor because that is too early.
-                 */
-                if (vm.canGetMethodReturnValues()) {
-                    methodExitEventCmd = JDWP.EventKind.METHOD_EXIT_WITH_RETURN_VALUE;
-                } else {
-                    methodExitEventCmd = JDWP.EventKind.METHOD_EXIT;
-                }
-            }
-            requestList().add(this);
-        }
-
-        int eventCmd() {
-            return EventRequestManagerImpl.methodExitEventCmd;
-        }
-
-        public String toString() {
-            return "method exit request " + state();
-        }
-    }
-
-    class MonitorContendedEnterRequestImpl extends ClassVisibleEventRequestImpl
-                                      implements MonitorContendedEnterRequest {
-        MonitorContendedEnterRequestImpl() {
-            requestList().add(this);
-        }
-
-        int eventCmd() {
-            return JDWP.EventKind.MONITOR_CONTENDED_ENTER;
-        }
-
-        public String toString() {
-            return "monitor contended enter request " + state();
-        }
-    }
-
-    class MonitorContendedEnteredRequestImpl extends ClassVisibleEventRequestImpl
-                                      implements MonitorContendedEnteredRequest {
-        MonitorContendedEnteredRequestImpl() {
-            requestList().add(this);
-        }
-
-        int eventCmd() {
-            return JDWP.EventKind.MONITOR_CONTENDED_ENTERED;
-        }
-
-        public String toString() {
-            return "monitor contended entered request " + state();
-        }
-    }
-
-    class MonitorWaitRequestImpl extends ClassVisibleEventRequestImpl
-                                 implements MonitorWaitRequest {
-        MonitorWaitRequestImpl() {
-            requestList().add(this);
-        }
-
-        int eventCmd() {
-            return JDWP.EventKind.MONITOR_WAIT;
-        }
-
-        public String toString() {
-            return "monitor wait request " + state();
-        }
-    }
-
-    class MonitorWaitedRequestImpl extends ClassVisibleEventRequestImpl
-                                 implements MonitorWaitedRequest {
-        MonitorWaitedRequestImpl() {
-            requestList().add(this);
-        }
-
-        int eventCmd() {
-            return JDWP.EventKind.MONITOR_WAITED;
-        }
-
-        public String toString() {
-            return "monitor waited request " + state();
-        }
-    }
-
-    class StepRequestImpl extends ClassVisibleEventRequestImpl
-                                      implements StepRequest {
-        ThreadReferenceImpl thread;
-        int size;
-        int depth;
-
-        StepRequestImpl(ThreadReference thread, int size, int depth) {
-            this.thread = (ThreadReferenceImpl)thread;
-            this.size = size;
-            this.depth = depth;
-
-            /*
-             * Translate size and depth to corresponding JDWP values.
-             */
-            int jdwpSize;
-            switch (size) {
-                case STEP_MIN:
-                    jdwpSize = JDWP.StepSize.MIN;
-                    break;
-                case STEP_LINE:
-                    jdwpSize = JDWP.StepSize.LINE;
-                    break;
-                default:
-                    throw new IllegalArgumentException("Invalid step size");
-            }
-
-            int jdwpDepth;
-            switch (depth) {
-                case STEP_INTO:
-                    jdwpDepth = JDWP.StepDepth.INTO;
-                    break;
-                case STEP_OVER:
-                    jdwpDepth = JDWP.StepDepth.OVER;
-                    break;
-                case STEP_OUT:
-                    jdwpDepth = JDWP.StepDepth.OUT;
-                    break;
-                default:
-                    throw new IllegalArgumentException("Invalid step depth");
-            }
-
-            /*
-             * Make sure this isn't a duplicate
-             */
-            List requests = stepRequests();
-            Iterator iter = requests.iterator();
-            while (iter.hasNext()) {
-                StepRequest request = (StepRequest)iter.next();
-                if ((request != this) &&
-                        request.isEnabled() &&
-                        request.thread().equals(thread)) {
-                    throw new DuplicateRequestException(
-                        "Only one step request allowed per thread");
-                }
-            }
-
-            filters.add(JDWP.EventRequest.Set.Modifier.Step.
-                        create(this.thread, jdwpSize, jdwpDepth));
-            requestList().add(this);
-
-        }
-        public int depth() {
-            return depth;
-        }
-
-        public int size() {
-            return size;
-        }
-
-        public ThreadReference thread() {
-            return thread;
-        }
-
-        int eventCmd() {
-            return JDWP.EventKind.SINGLE_STEP;
-        }
-
-        public String toString() {
-            return "step request " + thread() + state();
-        }
-    }
-
-    class ThreadDeathRequestImpl extends ThreadVisibleEventRequestImpl
-                                      implements ThreadDeathRequest {
-        ThreadDeathRequestImpl() {
-            requestList().add(this);
-        }
-
-        int eventCmd() {
-            return JDWP.EventKind.THREAD_DEATH;
-        }
-
-        public String toString() {
-            return "thread death request " + state();
-        }
-    }
-
-    class ThreadStartRequestImpl extends ThreadVisibleEventRequestImpl
-                                      implements ThreadStartRequest {
-        ThreadStartRequestImpl() {
-            requestList().add(this);
-        }
-
-        int eventCmd() {
-            return JDWP.EventKind.THREAD_START;
-        }
-
-        public String toString() {
-            return "thread start request " + state();
-        }
-    }
-
-    abstract class WatchpointRequestImpl extends ClassVisibleEventRequestImpl
-                                      implements WatchpointRequest {
-        final Field field;
-
-        WatchpointRequestImpl(Field field) {
-            this.field = field;
-            filters.add(0,
-                   JDWP.EventRequest.Set.Modifier.FieldOnly.create(
-                    (ReferenceTypeImpl)field.declaringType(),
-                    ((FieldImpl)field).ref()));
-        }
-
-        public Field field() {
-            return field;
-        }
-    }
-
-    class AccessWatchpointRequestImpl extends WatchpointRequestImpl
-                                  implements AccessWatchpointRequest {
-        AccessWatchpointRequestImpl(Field field) {
-            super(field);
-            requestList().add(this);
-        }
-
-        int eventCmd() {
-            return JDWP.EventKind.FIELD_ACCESS;
-        }
-
-        public String toString() {
-            return "access watchpoint request " + field + state();
-        }
-    }
-
-    class ModificationWatchpointRequestImpl extends WatchpointRequestImpl
-                                  implements ModificationWatchpointRequest {
-        ModificationWatchpointRequestImpl(Field field) {
-            super(field);
-            requestList().add(this);
-        }
-
-        int eventCmd() {
-            return JDWP.EventKind.FIELD_MODIFICATION;
-        }
-
-        public String toString() {
-            return "modification watchpoint request " + field + state();
-        }
-    }
-
-    class VMDeathRequestImpl extends EventRequestImpl
-                                        implements VMDeathRequest {
-        VMDeathRequestImpl() {
-            requestList().add(this);
-        }
-
-        int eventCmd() {
-            return JDWP.EventKind.VM_DEATH;
-        }
-
-        public String toString() {
-            return "VM death request " + state();
-        }
-    }
-
-    /**
-     * Constructor.
-     */
-    EventRequestManagerImpl(VirtualMachine vm) {
-        super(vm);
-        java.lang.reflect.Field[] ekinds =
-            JDWP.EventKind.class.getDeclaredFields();
-        int highest = 0;
-        for (int i = 0; i < ekinds.length; ++i) {
-            int val;
-            try {
-                val = ekinds[i].getInt(null);
-            } catch (IllegalAccessException exc) {
-                throw new RuntimeException("Got: " + exc);
-            }
-            if (val > highest) {
-                highest = val;
-            }
-        }
-        requestLists = new List[highest+1];
-        for (int i=0; i <= highest; i++) {
-            requestLists[i] = new ArrayList();
-        }
-    }
-
-    public ClassPrepareRequest createClassPrepareRequest() {
-        return new ClassPrepareRequestImpl();
-    }
-
-    public ClassUnloadRequest createClassUnloadRequest() {
-        return new ClassUnloadRequestImpl();
-    }
-
-    public ExceptionRequest createExceptionRequest(ReferenceType refType,
-                                                   boolean notifyCaught,
-                                                   boolean notifyUncaught) {
-        validateMirrorOrNull(refType);
-        return new ExceptionRequestImpl(refType, notifyCaught, notifyUncaught);
-    }
-
-    public StepRequest createStepRequest(ThreadReference thread,
-                                         int size, int depth) {
-        validateMirror(thread);
-        return new StepRequestImpl(thread, size, depth);
-    }
-
-    public ThreadDeathRequest createThreadDeathRequest() {
-        return new ThreadDeathRequestImpl();
-    }
-
-    public ThreadStartRequest createThreadStartRequest() {
-        return new ThreadStartRequestImpl();
-    }
-
-    public MethodEntryRequest createMethodEntryRequest() {
-        return new MethodEntryRequestImpl();
-    }
-
-    public MethodExitRequest createMethodExitRequest() {
-        return new MethodExitRequestImpl();
-    }
-
-    public MonitorContendedEnterRequest createMonitorContendedEnterRequest() {
-        if (!vm.canRequestMonitorEvents()) {
-            throw new UnsupportedOperationException(
-          "target VM does not support requesting Monitor events");
-        }
-        return new MonitorContendedEnterRequestImpl();
-    }
-
-    public MonitorContendedEnteredRequest createMonitorContendedEnteredRequest() {
-        if (!vm.canRequestMonitorEvents()) {
-            throw new UnsupportedOperationException(
-          "target VM does not support requesting Monitor events");
-        }
-        return new MonitorContendedEnteredRequestImpl();
-    }
-
-    public MonitorWaitRequest createMonitorWaitRequest() {
-        if (!vm.canRequestMonitorEvents()) {
-            throw new UnsupportedOperationException(
-          "target VM does not support requesting Monitor events");
-        }
-        return new MonitorWaitRequestImpl();
-    }
-
-    public MonitorWaitedRequest createMonitorWaitedRequest() {
-        if (!vm.canRequestMonitorEvents()) {
-            throw new UnsupportedOperationException(
-          "target VM does not support requesting Monitor events");
-        }
-        return new MonitorWaitedRequestImpl();
-    }
-
-    public BreakpointRequest createBreakpointRequest(Location location) {
-        validateMirror(location);
-        if (location.codeIndex() == -1) {
-            throw new NativeMethodException("Cannot set breakpoints on native methods");
-        }
-        return new BreakpointRequestImpl(location);
-    }
-
-    public AccessWatchpointRequest
-                              createAccessWatchpointRequest(Field field) {
-        validateMirror(field);
-        if (!vm.canWatchFieldAccess()) {
-            throw new UnsupportedOperationException(
-          "target VM does not support access watchpoints");
-        }
-        return new AccessWatchpointRequestImpl(field);
-    }
-
-    public ModificationWatchpointRequest
-                        createModificationWatchpointRequest(Field field) {
-        validateMirror(field);
-        if (!vm.canWatchFieldModification()) {
-            throw new UnsupportedOperationException(
-          "target VM does not support modification watchpoints");
-        }
-        return new ModificationWatchpointRequestImpl(field);
-    }
-
-    public VMDeathRequest createVMDeathRequest() {
-        if (!vm.canRequestVMDeathEvent()) {
-            throw new UnsupportedOperationException(
-          "target VM does not support requesting VM death events");
-        }
-        return new VMDeathRequestImpl();
-    }
-
-    public void deleteEventRequest(EventRequest eventRequest) {
-        validateMirror(eventRequest);
-        ((EventRequestImpl)eventRequest).delete();
-    }
-
-    public void deleteEventRequests(List<? extends EventRequest> eventRequests) {
-        validateMirrors(eventRequests);
-        // copy the eventRequests to avoid ConcurrentModificationException
-        Iterator iter = (new ArrayList(eventRequests)).iterator();
-        while (iter.hasNext()) {
-            ((EventRequestImpl)iter.next()).delete();
-        }
-    }
-
-    public void deleteAllBreakpoints() {
-        requestList(JDWP.EventKind.BREAKPOINT).clear();
-
-        try {
-            JDWP.EventRequest.ClearAllBreakpoints.process(vm);
-        } catch (JDWPException exc) {
-            throw exc.toJDIException();
-        }
-    }
-
-    public List<StepRequest> stepRequests() {
-        return unmodifiableRequestList(JDWP.EventKind.SINGLE_STEP);
-    }
-
-    public List<ClassPrepareRequest> classPrepareRequests() {
-        return unmodifiableRequestList(JDWP.EventKind.CLASS_PREPARE);
-    }
-
-    public List<ClassUnloadRequest> classUnloadRequests() {
-        return unmodifiableRequestList(JDWP.EventKind.CLASS_UNLOAD);
-    }
-
-    public List<ThreadStartRequest> threadStartRequests() {
-        return unmodifiableRequestList(JDWP.EventKind.THREAD_START);
-    }
-
-    public List<ThreadDeathRequest> threadDeathRequests() {
-        return unmodifiableRequestList(JDWP.EventKind.THREAD_DEATH);
-    }
-
-    public List<ExceptionRequest> exceptionRequests() {
-        return unmodifiableRequestList(JDWP.EventKind.EXCEPTION);
-    }
-
-    public List<BreakpointRequest> breakpointRequests() {
-        return unmodifiableRequestList(JDWP.EventKind.BREAKPOINT);
-    }
-
-    public List<AccessWatchpointRequest> accessWatchpointRequests() {
-        return unmodifiableRequestList(JDWP.EventKind.FIELD_ACCESS);
-    }
-
-    public List<ModificationWatchpointRequest> modificationWatchpointRequests() {
-        return unmodifiableRequestList(JDWP.EventKind.FIELD_MODIFICATION);
-    }
-
-    public List<MethodEntryRequest> methodEntryRequests() {
-        return unmodifiableRequestList(JDWP.EventKind.METHOD_ENTRY);
-    }
-
-    public List<MethodExitRequest> methodExitRequests() {
-        return unmodifiableRequestList(
-                               EventRequestManagerImpl.methodExitEventCmd);
-    }
-
-    public List<MonitorContendedEnterRequest> monitorContendedEnterRequests() {
-        return unmodifiableRequestList(JDWP.EventKind.MONITOR_CONTENDED_ENTER);
-    }
-
-    public List<MonitorContendedEnteredRequest> monitorContendedEnteredRequests() {
-        return unmodifiableRequestList(JDWP.EventKind.MONITOR_CONTENDED_ENTERED);
-    }
-
-    public List<MonitorWaitRequest> monitorWaitRequests() {
-        return unmodifiableRequestList(JDWP.EventKind.MONITOR_WAIT);
-    }
-
-    public List<MonitorWaitedRequest> monitorWaitedRequests() {
-        return unmodifiableRequestList(JDWP.EventKind.MONITOR_WAITED);
-    }
-
-    public List<VMDeathRequest> vmDeathRequests() {
-        return unmodifiableRequestList(JDWP.EventKind.VM_DEATH);
-    }
-
-    List unmodifiableRequestList(int eventCmd) {
-        return Collections.unmodifiableList(requestList(eventCmd));
-    }
-
-    EventRequest request(int eventCmd, int requestId) {
-        List rl = requestList(eventCmd);
-        for (int i = rl.size() - 1; i >= 0; i--) {
-            EventRequestImpl er = (EventRequestImpl)rl.get(i);
-            if (er.id == requestId) {
-                return er;
-            }
-        }
-        return null;
-    }
-
-    List<? extends EventRequest>  requestList(int eventCmd) {
-        return requestLists[eventCmd];
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/EventSetImpl.java b/ojluni/src/main/java/com/sun/tools/jdi/EventSetImpl.java
deleted file mode 100755
index ad3d7e4..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/EventSetImpl.java
+++ /dev/null
@@ -1,874 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package com.sun.tools.jdi;
-
-import com.sun.jdi.*;
-import com.sun.jdi.event.*;
-import com.sun.jdi.request.*;
-
-import java.util.*;
-enum EventDestination {UNKNOWN_EVENT, INTERNAL_EVENT, CLIENT_EVENT};
-
-/*
- * An EventSet is normally created by the transport reader thread when
- * it reads a JDWP Composite command.  The constructor doesn't unpack
- * the events contained in the Composite command and create EventImpls
- * for them because that process might involve calling back into the back-end
- * which should not be done by the transport reader thread.  Instead,
- * the raw bytes of the packet are read and stored in the EventSet.
- * The EventSet is then added to each EventQueue. When an EventSet is
- * removed from an EventQueue, the EventSetImpl.build() method is called.
- * This method reads the packet bytes and creates the actual EventImpl objects.
- * build() also filters out events for our internal handler and puts them in
- * their own EventSet.  This means that the EventImpls that are in the EventSet
- * that is on the queues are all for client requests.
- */
-public class EventSetImpl extends ArrayList<Event> implements EventSet {
-
-    private VirtualMachineImpl vm; // we implement Mirror
-    private Packet pkt;
-    private byte suspendPolicy;
-    private EventSetImpl internalEventSet;
-
-    public String toString() {
-        String string = "event set, policy:" + suspendPolicy +
-                        ", count:" + this.size() + " = {";
-        boolean first = true;
-        for (Event event : this) {
-            if (!first) {
-                string += ", ";
-            }
-            string += event.toString();
-            first = false;
-        }
-        string += "}";
-        return string;
-    }
-
-    abstract class EventImpl extends MirrorImpl implements Event {
-
-        private final byte eventCmd;
-        private final int requestID;
-        // This is set only for client requests, not internal requests.
-        private final EventRequest request;
-
-        /**
-         * Constructor for events.
-         */
-        protected EventImpl(JDWP.Event.Composite.Events.EventsCommon evt,
-                            int requestID) {
-            super(EventSetImpl.this.vm);
-            this.eventCmd = evt.eventKind();
-            this.requestID = requestID;
-            EventRequestManagerImpl ermi = EventSetImpl.this.
-                vm.eventRequestManagerImpl();
-            this.request =  ermi.request(eventCmd, requestID);
-        }
-
-        /*
-         * Override superclass back to default equality
-         */
-        public boolean equals(Object obj) {
-            return this == obj;
-        }
-
-        public int hashCode() {
-            return System.identityHashCode(this);
-        }
-
-        /**
-         * Constructor for VM disconnected events.
-         */
-        protected EventImpl(byte eventCmd) {
-            super(EventSetImpl.this.vm);
-            this.eventCmd = eventCmd;
-            this.requestID = 0;
-            this.request = null;
-        }
-
-        public EventRequest request() {
-            return request;
-        }
-
-        int requestID() {
-            return requestID;
-        }
-
-        EventDestination destination() {
-            /*
-             * We need to decide if this event is for
-             * 1. an internal request
-             * 2. a client request that is no longer available, ie
-             *    it has been deleted, or disabled and re-enabled
-             *    which gives it a new ID.
-             * 3. a current client request that is disabled
-             * 4. a current enabled client request.
-             *
-             * We will filter this set into a set
-             * that contains only 1s for our internal queue
-             * and a set that contains only 4s for our client queue.
-             * If we get an EventSet that contains only 2 and 3
-             * then we have to resume it if it is not SUSPEND_NONE
-             * because no one else will.
-             */
-            if (requestID == 0) {
-                /* An unsolicited event.  These have traditionally
-                 * been treated as client events.
-                 */
-                return EventDestination.CLIENT_EVENT;
-            }
-
-            // Is this an event for a current client request?
-            if (request == null) {
-                // Nope.  Is it an event for an internal request?
-                EventRequestManagerImpl ermi = this.vm.getInternalEventRequestManager();
-                if (ermi.request(eventCmd, requestID) != null) {
-                    // Yep
-                    return EventDestination.INTERNAL_EVENT;
-                }
-                return EventDestination.UNKNOWN_EVENT;
-            }
-
-            // We found a client request
-            if (request.isEnabled()) {
-                return EventDestination.CLIENT_EVENT;
-            }
-            return EventDestination.UNKNOWN_EVENT;
-        }
-
-        abstract String eventName();
-
-        public String toString() {
-            return eventName();
-        }
-
-    }
-
-    abstract class ThreadedEventImpl extends EventImpl {
-        private ThreadReference thread;
-
-        ThreadedEventImpl(JDWP.Event.Composite.Events.EventsCommon evt,
-                          int requestID, ThreadReference thread) {
-            super(evt, requestID);
-            this.thread = thread;
-        }
-
-        public ThreadReference thread() {
-            return thread;
-        }
-
-        public String toString() {
-            return eventName() + " in thread " + thread.name();
-        }
-    }
-
-    abstract class LocatableEventImpl extends ThreadedEventImpl
-                                            implements Locatable {
-        private Location location;
-
-        LocatableEventImpl(JDWP.Event.Composite.Events.EventsCommon evt,
-                           int requestID,
-                           ThreadReference thread, Location location) {
-            super(evt, requestID, thread);
-            this.location = location;
-        }
-
-        public Location location() {
-            return location;
-        }
-
-        /**
-         * For MethodEntry and MethodExit
-         */
-        public Method method() {
-            return location.method();
-        }
-
-        public String toString() {
-            return eventName() + "@" +
-                   ((location() == null) ? " null" : location().toString()) +
-                   " in thread " + thread().name();
-        }
-    }
-
-    class BreakpointEventImpl extends LocatableEventImpl
-                            implements BreakpointEvent {
-        BreakpointEventImpl(JDWP.Event.Composite.Events.Breakpoint evt) {
-            super(evt, evt.requestID, evt.thread, evt.location);
-        }
-
-        String eventName() {
-            return "BreakpointEvent";
-        }
-    }
-
-    class StepEventImpl extends LocatableEventImpl implements StepEvent {
-        StepEventImpl(JDWP.Event.Composite.Events.SingleStep evt) {
-            super(evt, evt.requestID, evt.thread, evt.location);
-        }
-
-        String eventName() {
-            return "StepEvent";
-        }
-    }
-
-    class MethodEntryEventImpl extends LocatableEventImpl
-                            implements MethodEntryEvent {
-        MethodEntryEventImpl(JDWP.Event.Composite.Events.MethodEntry evt) {
-            super(evt, evt.requestID, evt.thread, evt.location);
-        }
-
-        String eventName() {
-            return "MethodEntryEvent";
-        }
-    }
-
-    class MethodExitEventImpl extends LocatableEventImpl
-                            implements MethodExitEvent {
-        private Value returnVal = null;
-
-        MethodExitEventImpl(JDWP.Event.Composite.Events.MethodExit evt) {
-            super(evt, evt.requestID, evt.thread, evt.location);
-        }
-
-        MethodExitEventImpl(JDWP.Event.Composite.Events.MethodExitWithReturnValue evt) {
-            super(evt, evt.requestID, evt.thread, evt.location);
-            returnVal = evt.value;
-        }
-
-        String eventName() {
-            return "MethodExitEvent";
-        }
-
-        public Value returnValue() {
-            if (!this.vm.canGetMethodReturnValues()) {
-                throw new UnsupportedOperationException(
-                "target does not support return values in MethodExit events");
-            }
-            return returnVal;
-        }
-
-    }
-
-    class MonitorContendedEnterEventImpl extends LocatableEventImpl
-                            implements MonitorContendedEnterEvent {
-        private ObjectReference monitor = null;
-
-        MonitorContendedEnterEventImpl(JDWP.Event.Composite.Events.MonitorContendedEnter evt) {
-            super(evt, evt.requestID, evt.thread, evt.location);
-            this.monitor = evt.object;
-        }
-
-        String eventName() {
-            return "MonitorContendedEnter";
-        }
-
-        public ObjectReference  monitor() {
-            return monitor;
-        };
-
-    }
-
-    class MonitorContendedEnteredEventImpl extends LocatableEventImpl
-                            implements MonitorContendedEnteredEvent {
-        private ObjectReference monitor = null;
-
-        MonitorContendedEnteredEventImpl(JDWP.Event.Composite.Events.MonitorContendedEntered evt) {
-            super(evt, evt.requestID, evt.thread, evt.location);
-            this.monitor = evt.object;
-        }
-
-        String eventName() {
-            return "MonitorContendedEntered";
-        }
-
-        public ObjectReference  monitor() {
-            return monitor;
-        };
-
-    }
-
-    class MonitorWaitEventImpl extends LocatableEventImpl
-                            implements MonitorWaitEvent {
-        private ObjectReference monitor = null;
-        private long timeout;
-
-        MonitorWaitEventImpl(JDWP.Event.Composite.Events.MonitorWait evt) {
-            super(evt, evt.requestID, evt.thread, evt.location);
-            this.monitor = evt.object;
-            this.timeout = evt.timeout;
-        }
-
-        String eventName() {
-            return "MonitorWait";
-        }
-
-        public ObjectReference  monitor() {
-            return monitor;
-        };
-
-        public long timeout() {
-            return timeout;
-        }
-    }
-
-    class MonitorWaitedEventImpl extends LocatableEventImpl
-                            implements MonitorWaitedEvent {
-        private ObjectReference monitor = null;
-        private boolean timed_out;
-
-        MonitorWaitedEventImpl(JDWP.Event.Composite.Events.MonitorWaited evt) {
-            super(evt, evt.requestID, evt.thread, evt.location);
-            this.monitor = evt.object;
-            this.timed_out = evt.timed_out;
-        }
-
-        String eventName() {
-            return "MonitorWaited";
-        }
-
-        public ObjectReference  monitor() {
-            return monitor;
-        };
-
-        public boolean timedout() {
-            return timed_out;
-        }
-    }
-
-    class ClassPrepareEventImpl extends ThreadedEventImpl
-                            implements ClassPrepareEvent {
-        private ReferenceType referenceType;
-
-        ClassPrepareEventImpl(JDWP.Event.Composite.Events.ClassPrepare evt) {
-            super(evt, evt.requestID, evt.thread);
-            referenceType = this.vm.referenceType(evt.typeID, evt.refTypeTag,
-                                                  evt.signature);
-            ((ReferenceTypeImpl)referenceType).setStatus(evt.status);
-        }
-
-        public ReferenceType referenceType() {
-            return referenceType;
-        }
-
-        String eventName() {
-            return "ClassPrepareEvent";
-        }
-    }
-
-    class ClassUnloadEventImpl extends EventImpl implements ClassUnloadEvent {
-        private String classSignature;
-
-        ClassUnloadEventImpl(JDWP.Event.Composite.Events.ClassUnload evt) {
-            super(evt, evt.requestID);
-            this.classSignature = evt.signature;
-        }
-
-        public String className() {
-            return classSignature.substring(1, classSignature.length()-1)
-                .replace('/', '.');
-        }
-
-        public String classSignature() {
-            return classSignature;
-        }
-
-        String eventName() {
-            return "ClassUnloadEvent";
-        }
-    }
-
-    class ExceptionEventImpl extends LocatableEventImpl
-                                             implements ExceptionEvent {
-        private ObjectReference exception;
-        private Location catchLocation;
-
-        ExceptionEventImpl(JDWP.Event.Composite.Events.Exception evt) {
-            super(evt, evt.requestID, evt.thread, evt.location);
-            this.exception = evt.exception;
-            this.catchLocation = evt.catchLocation;
-        }
-
-        public ObjectReference exception() {
-            return exception;
-        }
-
-        public Location catchLocation() {
-            return catchLocation;
-        }
-
-        String eventName() {
-            return "ExceptionEvent";
-        }
-    }
-
-    class ThreadDeathEventImpl extends ThreadedEventImpl
-                                        implements ThreadDeathEvent {
-        ThreadDeathEventImpl(JDWP.Event.Composite.Events.ThreadDeath evt) {
-            super(evt, evt.requestID, evt.thread);
-        }
-
-        String eventName() {
-            return "ThreadDeathEvent";
-        }
-    }
-
-    class ThreadStartEventImpl extends ThreadedEventImpl
-                                        implements ThreadStartEvent {
-        ThreadStartEventImpl(JDWP.Event.Composite.Events.ThreadStart evt) {
-            super(evt, evt.requestID, evt.thread);
-        }
-
-        String eventName() {
-            return "ThreadStartEvent";
-        }
-    }
-
-    class VMStartEventImpl extends ThreadedEventImpl
-                                        implements VMStartEvent {
-        VMStartEventImpl(JDWP.Event.Composite.Events.VMStart evt) {
-            super(evt, evt.requestID, evt.thread);
-        }
-
-        String eventName() {
-            return "VMStartEvent";
-        }
-    }
-
-    class VMDeathEventImpl extends EventImpl implements VMDeathEvent {
-
-        VMDeathEventImpl(JDWP.Event.Composite.Events.VMDeath evt) {
-            super(evt, evt.requestID);
-        }
-
-        String eventName() {
-            return "VMDeathEvent";
-        }
-    }
-
-    class VMDisconnectEventImpl extends EventImpl
-                                         implements VMDisconnectEvent {
-
-        VMDisconnectEventImpl() {
-            super((byte)JDWP.EventKind.VM_DISCONNECTED);
-        }
-
-        String eventName() {
-            return "VMDisconnectEvent";
-        }
-    }
-
-    abstract class WatchpointEventImpl extends LocatableEventImpl
-                                            implements WatchpointEvent {
-        private final ReferenceTypeImpl refType;
-        private final long fieldID;
-        private final ObjectReference object;
-        private Field field = null;
-
-        WatchpointEventImpl(JDWP.Event.Composite.Events.EventsCommon evt,
-                            int requestID,
-                            ThreadReference thread, Location location,
-                            byte refTypeTag, long typeID, long fieldID,
-                            ObjectReference object) {
-            super(evt, requestID, thread, location);
-            this.refType = this.vm.referenceType(typeID, refTypeTag);
-            this.fieldID = fieldID;
-            this.object = object;
-        }
-
-        public Field field() {
-            if (field == null) {
-                field = refType.getFieldMirror(fieldID);
-            }
-            return field;
-        }
-
-        public ObjectReference object() {
-            return object;
-        }
-
-        public Value valueCurrent() {
-            if (object == null) {
-                return refType.getValue(field());
-            } else {
-                return object.getValue(field());
-            }
-        }
-    }
-
-    class AccessWatchpointEventImpl extends WatchpointEventImpl
-                                            implements AccessWatchpointEvent {
-
-        AccessWatchpointEventImpl(JDWP.Event.Composite.Events.FieldAccess evt) {
-            super(evt, evt.requestID, evt.thread, evt.location,
-                  evt.refTypeTag, evt.typeID, evt.fieldID, evt.object);
-        }
-
-        String eventName() {
-            return "AccessWatchpoint";
-        }
-    }
-
-    class ModificationWatchpointEventImpl extends WatchpointEventImpl
-                           implements ModificationWatchpointEvent {
-        Value newValue;
-
-        ModificationWatchpointEventImpl(
-                        JDWP.Event.Composite.Events.FieldModification evt) {
-            super(evt, evt.requestID, evt.thread, evt.location,
-                  evt.refTypeTag, evt.typeID, evt.fieldID, evt.object);
-            this.newValue = evt.valueToBe;
-        }
-
-        public Value valueToBe() {
-            return newValue;
-        }
-
-        String eventName() {
-            return "ModificationWatchpoint";
-        }
-    }
-
-    /**
-     * Events are constructed on the thread which reads all data from the
-     * transport. This means that the packet cannot be converted to real
-     * JDI objects as that may involve further communications with the
-     * back end which would deadlock.
-     *
-     * Hence the {@link #build()} method below called by EventQueue.
-     */
-    EventSetImpl(VirtualMachine aVm, Packet pkt) {
-        super();
-
-        // From "MirrorImpl":
-        // Yes, its a bit of a hack. But by doing it this
-        // way, this is the only place we have to change
-        // typing to substitute a new impl.
-        vm = (VirtualMachineImpl)aVm;
-
-        this.pkt = pkt;
-    }
-
-    /**
-     * Constructor for special events like VM disconnected
-     */
-    EventSetImpl(VirtualMachine aVm, byte eventCmd) {
-        this(aVm, null);
-        suspendPolicy = JDWP.SuspendPolicy.NONE;
-        switch (eventCmd) {
-            case JDWP.EventKind.VM_DISCONNECTED:
-                addEvent(new VMDisconnectEventImpl());
-                break;
-
-            default:
-                throw new InternalException("Bad singleton event code");
-        }
-    }
-
-    private void addEvent(EventImpl evt) {
-        // Note that this class has a public add method that throws
-        // an exception so that clients can't modify the EventSet
-        super.add(evt);
-    }
-
-    /*
-     * Complete the construction of an EventSet.  This is called from
-     * an event handler thread.  It upacks the JDWP events inside
-     * the packet and creates EventImpls for them.  The EventSet is already
-     * on EventQueues when this is called, so it has to be synch.
-     */
-    synchronized void build() {
-        if (pkt == null) {
-            return;
-        }
-        PacketStream ps = new PacketStream(vm, pkt);
-        JDWP.Event.Composite compEvt = new JDWP.Event.Composite(vm, ps);
-        suspendPolicy = compEvt.suspendPolicy;
-        if ((vm.traceFlags & vm.TRACE_EVENTS) != 0) {
-            switch(suspendPolicy) {
-                case JDWP.SuspendPolicy.ALL:
-                    vm.printTrace("EventSet: SUSPEND_ALL");
-                    break;
-
-                case JDWP.SuspendPolicy.EVENT_THREAD:
-                    vm.printTrace("EventSet: SUSPEND_EVENT_THREAD");
-                    break;
-
-                case JDWP.SuspendPolicy.NONE:
-                    vm.printTrace("EventSet: SUSPEND_NONE");
-                    break;
-            }
-        }
-
-        ThreadReference fix6485605 = null;
-        for (int i = 0; i < compEvt.events.length; i++) {
-            EventImpl evt = createEvent(compEvt.events[i]);
-            if ((vm.traceFlags & vm.TRACE_EVENTS) != 0) {
-                try {
-                    vm.printTrace("Event: " + evt);
-                } catch (VMDisconnectedException ee) {
-                    // ignore - see bug 6502716
-                }
-            }
-
-            switch (evt.destination()) {
-                case UNKNOWN_EVENT:
-                    // Ignore disabled, deleted, unknown events, but
-                    // save the thread if there is one since we might
-                    // have to resume it.  Note that events for different
-                    // threads can't be in the same event set.
-                    if (evt instanceof ThreadedEventImpl &&
-                        suspendPolicy == JDWP.SuspendPolicy.EVENT_THREAD) {
-                        fix6485605 = ((ThreadedEventImpl)evt).thread();
-                    }
-                    continue;
-                case CLIENT_EVENT:
-                    addEvent(evt);
-                    break;
-                case INTERNAL_EVENT:
-                    if (internalEventSet == null) {
-                        internalEventSet = new EventSetImpl(this.vm, null);
-                    }
-                    internalEventSet.addEvent(evt);
-                    break;
-                default:
-                    throw new InternalException("Invalid event destination");
-            }
-        }
-        pkt = null; // No longer needed - free it up
-
-        // Avoid hangs described in 6296125, 6293795
-        if (super.size() == 0) {
-            // This set has no client events.  If we don't do
-            // needed resumes, no one else is going to.
-            if (suspendPolicy == JDWP.SuspendPolicy.ALL) {
-                vm.resume();
-            } else if (suspendPolicy == JDWP.SuspendPolicy.EVENT_THREAD) {
-                // See bug 6485605.
-                if (fix6485605 != null) {
-                    fix6485605.resume();
-                } else {
-                    // apparently, there is nothing to resume.
-                }
-            }
-            suspendPolicy = JDWP.SuspendPolicy.NONE;
-
-        }
-
-    }
-
-    /**
-     * Filter out internal events
-     */
-    EventSet userFilter() {
-        return this;
-    }
-
-    /**
-     * Filter out user events.
-     */
-    EventSet internalFilter() {
-        return this.internalEventSet;
-    }
-
-    EventImpl createEvent(JDWP.Event.Composite.Events evt) {
-        JDWP.Event.Composite.Events.EventsCommon comm = evt.aEventsCommon;
-        switch (evt.eventKind) {
-            case JDWP.EventKind.THREAD_START:
-                return new ThreadStartEventImpl(
-                      (JDWP.Event.Composite.Events.ThreadStart)comm);
-
-            case JDWP.EventKind.THREAD_END:
-                return new ThreadDeathEventImpl(
-                      (JDWP.Event.Composite.Events.ThreadDeath)comm);
-
-            case JDWP.EventKind.EXCEPTION:
-                return new ExceptionEventImpl(
-                      (JDWP.Event.Composite.Events.Exception)comm);
-
-            case JDWP.EventKind.BREAKPOINT:
-                return new BreakpointEventImpl(
-                      (JDWP.Event.Composite.Events.Breakpoint)comm);
-
-            case JDWP.EventKind.METHOD_ENTRY:
-                return new MethodEntryEventImpl(
-                      (JDWP.Event.Composite.Events.MethodEntry)comm);
-
-            case JDWP.EventKind.METHOD_EXIT:
-                return new MethodExitEventImpl(
-                      (JDWP.Event.Composite.Events.MethodExit)comm);
-
-            case JDWP.EventKind.METHOD_EXIT_WITH_RETURN_VALUE:
-                return new MethodExitEventImpl(
-                      (JDWP.Event.Composite.Events.MethodExitWithReturnValue)comm);
-
-            case JDWP.EventKind.FIELD_ACCESS:
-                return new AccessWatchpointEventImpl(
-                      (JDWP.Event.Composite.Events.FieldAccess)comm);
-
-            case JDWP.EventKind.FIELD_MODIFICATION:
-                return new ModificationWatchpointEventImpl(
-                      (JDWP.Event.Composite.Events.FieldModification)comm);
-
-            case JDWP.EventKind.SINGLE_STEP:
-                return new StepEventImpl(
-                      (JDWP.Event.Composite.Events.SingleStep)comm);
-
-            case JDWP.EventKind.CLASS_PREPARE:
-                return new ClassPrepareEventImpl(
-                      (JDWP.Event.Composite.Events.ClassPrepare)comm);
-
-            case JDWP.EventKind.CLASS_UNLOAD:
-                return new ClassUnloadEventImpl(
-                      (JDWP.Event.Composite.Events.ClassUnload)comm);
-
-            case JDWP.EventKind.MONITOR_CONTENDED_ENTER:
-                return new MonitorContendedEnterEventImpl(
-                      (JDWP.Event.Composite.Events.MonitorContendedEnter)comm);
-
-            case JDWP.EventKind.MONITOR_CONTENDED_ENTERED:
-                return new MonitorContendedEnteredEventImpl(
-                      (JDWP.Event.Composite.Events.MonitorContendedEntered)comm);
-
-            case JDWP.EventKind.MONITOR_WAIT:
-                return new MonitorWaitEventImpl(
-                      (JDWP.Event.Composite.Events.MonitorWait)comm);
-
-            case JDWP.EventKind.MONITOR_WAITED:
-                return new MonitorWaitedEventImpl(
-                      (JDWP.Event.Composite.Events.MonitorWaited)comm);
-
-            case JDWP.EventKind.VM_START:
-                return new VMStartEventImpl(
-                      (JDWP.Event.Composite.Events.VMStart)comm);
-
-            case JDWP.EventKind.VM_DEATH:
-                return new VMDeathEventImpl(
-                      (JDWP.Event.Composite.Events.VMDeath)comm);
-
-            default:
-                // Ignore unknown event types
-                System.err.println("Ignoring event cmd " +
-                                   evt.eventKind + " from the VM");
-                return null;
-        }
-    }
-
-    public VirtualMachine virtualMachine() {
-        return vm;
-    }
-
-    public int suspendPolicy() {
-        return EventRequestManagerImpl.JDWPtoJDISuspendPolicy(suspendPolicy);
-    }
-
-    private ThreadReference eventThread() {
-        for (Event event : this) {
-            if (event instanceof ThreadedEventImpl) {
-                return ((ThreadedEventImpl)event).thread();
-            }
-        }
-        return null;
-    }
-
-    public void resume() {
-        switch (suspendPolicy()) {
-            case EventRequest.SUSPEND_ALL:
-                vm.resume();
-                break;
-            case EventRequest.SUSPEND_EVENT_THREAD:
-                ThreadReference thread = eventThread();
-                if (thread == null) {
-                    throw new InternalException("Inconsistent suspend policy");
-                }
-                thread.resume();
-                break;
-            case EventRequest.SUSPEND_NONE:
-                // Do nothing
-                break;
-            default:
-                throw new InternalException("Invalid suspend policy");
-        }
-    }
-
-    public Iterator<Event> iterator() {
-        return new Itr();
-    }
-
-    public EventIterator eventIterator() {
-        return new Itr();
-    }
-
-    public class Itr implements EventIterator {
-        /**
-         * Index of element to be returned by subsequent call to next.
-         */
-        int cursor = 0;
-
-        public boolean hasNext() {
-            return cursor != size();
-        }
-
-        public Event next() {
-            try {
-                Event nxt = get(cursor);
-                ++cursor;
-                return nxt;
-            } catch(IndexOutOfBoundsException e) {
-                throw new NoSuchElementException();
-            }
-        }
-
-        public Event nextEvent() {
-            return next();
-        }
-
-        public void remove() {
-            throw new UnsupportedOperationException();
-        }
-    }
-
-    /* below make this unmodifiable */
-
-    public boolean add(Event o){
-        throw new UnsupportedOperationException();
-    }
-    public boolean remove(Object o) {
-        throw new UnsupportedOperationException();
-    }
-    public boolean addAll(Collection<? extends Event> coll) {
-        throw new UnsupportedOperationException();
-    }
-    public boolean removeAll(Collection<?> coll) {
-        throw new UnsupportedOperationException();
-    }
-    public boolean retainAll(Collection<?> coll) {
-        throw new UnsupportedOperationException();
-    }
-    public void clear() {
-        throw new UnsupportedOperationException();
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/FieldImpl.java b/ojluni/src/main/java/com/sun/tools/jdi/FieldImpl.java
deleted file mode 100755
index ecf6fdc..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/FieldImpl.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package com.sun.tools.jdi;
-
-import com.sun.jdi.*;
-
-
-public class FieldImpl extends TypeComponentImpl
-                       implements Field, ValueContainer {
-
-    FieldImpl(VirtualMachine vm, ReferenceTypeImpl declaringType,
-              long ref,
-              String name, String signature,
-              String genericSignature, int modifiers) {
-        super(vm, declaringType, ref, name, signature,
-              genericSignature, modifiers);
-    }
-
-    public boolean equals(Object obj) {
-        if ((obj != null) && (obj instanceof FieldImpl)) {
-            FieldImpl other = (FieldImpl)obj;
-            return (declaringType().equals(other.declaringType())) &&
-                   (ref() == other.ref()) &&
-                   super.equals(obj);
-        } else {
-            return false;
-        }
-    }
-
-    public int hashCode() {
-        return (int)ref();
-    }
-
-    public int compareTo(Field field) {
-        ReferenceTypeImpl declaringType = (ReferenceTypeImpl)declaringType();
-        int rc = declaringType.compareTo(field.declaringType());
-        if (rc == 0) {
-            rc = declaringType.indexOf(this) -
-                 declaringType.indexOf(field);
-        }
-        return rc;
-    }
-
-    public Type type() throws ClassNotLoadedException {
-        return findType(signature());
-    }
-
-    public Type findType(String signature) throws ClassNotLoadedException {
-        ReferenceTypeImpl enclosing = (ReferenceTypeImpl)declaringType();
-        return enclosing.findType(signature);
-    }
-
-    /**
-     * @return a text representation of the declared type
-     * of this field.
-     */
-    public String typeName() {
-        JNITypeParser parser = new JNITypeParser(signature());
-        return parser.typeName();
-    }
-
-    public boolean isTransient() {
-        return isModifierSet(VMModifiers.TRANSIENT);
-    }
-
-    public boolean isVolatile() {
-        return isModifierSet(VMModifiers.VOLATILE);
-    }
-
-    public boolean isEnumConstant() {
-        return isModifierSet(VMModifiers.ENUM_CONSTANT);
-    }
-
-    public String toString() {
-        StringBuffer buf = new StringBuffer();
-
-        buf.append(declaringType().name());
-        buf.append('.');
-        buf.append(name());
-
-        return buf.toString();
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/FloatTypeImpl.java b/ojluni/src/main/java/com/sun/tools/jdi/FloatTypeImpl.java
deleted file mode 100755
index dc6c857..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/FloatTypeImpl.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (c) 1998, 1999, 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.tools.jdi;
-
-import com.sun.jdi.*;
-
-public class FloatTypeImpl extends PrimitiveTypeImpl implements FloatType {
-    FloatTypeImpl(VirtualMachine vm) {
-        super(vm);
-    }
-
-
-    public String signature() {
-        return String.valueOf((char)JDWP.Tag.FLOAT);
-    }
-
-    PrimitiveValue convert(PrimitiveValue value) throws InvalidTypeException {
-        return vm.mirrorOf(((PrimitiveValueImpl)value).checkedFloatValue());
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/FloatValueImpl.java b/ojluni/src/main/java/com/sun/tools/jdi/FloatValueImpl.java
deleted file mode 100755
index cf100d2..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/FloatValueImpl.java
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package com.sun.tools.jdi;
-
-import com.sun.jdi.*;
-
-public class FloatValueImpl extends PrimitiveValueImpl
-                            implements FloatValue {
-    private float value;
-
-    FloatValueImpl(VirtualMachine aVm,float aValue) {
-        super(aVm);
-
-        value = aValue;
-    }
-
-    public boolean equals(Object obj) {
-        if ((obj != null) && (obj instanceof FloatValue)) {
-            return (value == ((FloatValue)obj).value()) &&
-                   super.equals(obj);
-        } else {
-            return false;
-        }
-    }
-
-    public int hashCode() {
-        /*
-         * TO DO: Better hash code
-         */
-        return intValue();
-    }
-
-    public int compareTo(FloatValue obj) {
-        float other = obj.value();
-        if (value() < other) {
-            return -1;
-        } else if (value() == other) {
-            return 0;
-        } else {
-            return 1;
-        }
-    }
-
-    public Type type() {
-        return vm.theFloatType();
-    }
-
-    public float value() {
-        return value;
-    }
-
-    public boolean booleanValue() {
-        return(value == 0.0)?false:true;
-    }
-
-    public byte byteValue() {
-        return(byte)value;
-    }
-
-    public char charValue() {
-        return(char)value;
-    }
-
-    public short shortValue() {
-        return(short)value;
-    }
-
-    public int intValue() {
-        return(int)value;
-    }
-
-    public long longValue() {
-        return(long)value;
-    }
-
-    public float floatValue() {
-        return(float)value;
-    }
-
-    public double doubleValue() {
-        return(double)value;
-    }
-
-    byte checkedByteValue() throws InvalidTypeException {
-        if ((value > Byte.MAX_VALUE) || (value < Byte.MIN_VALUE)) {
-            throw new InvalidTypeException("Can't convert " + value + " to byte");
-        } else {
-            return super.checkedByteValue();
-        }
-    }
-
-    char checkedCharValue() throws InvalidTypeException {
-        if ((value > Character.MAX_VALUE) || (value < Character.MIN_VALUE)) {
-            throw new InvalidTypeException("Can't convert " + value + " to char");
-        } else {
-            return super.checkedCharValue();
-        }
-    }
-
-    short checkedShortValue() throws InvalidTypeException {
-        if ((value > Short.MAX_VALUE) || (value < Short.MIN_VALUE)) {
-            throw new InvalidTypeException("Can't convert " + value + " to short");
-        } else {
-            return super.checkedShortValue();
-        }
-    }
-
-    int checkedIntValue() throws InvalidTypeException {
-        int intValue = (int)value;
-        if (intValue != value) {
-            throw new InvalidTypeException("Can't convert " + value + " to int");
-        } else {
-            return super.checkedIntValue();
-        }
-    }
-
-    long checkedLongValue() throws InvalidTypeException {
-        long longValue = (long)value;
-        if (longValue != value) {
-            throw new InvalidTypeException("Can't convert " + value + " to long");
-        } else {
-            return super.checkedLongValue();
-        }
-    }
-
-    public String toString() {
-        return "" + value;
-    }
-
-    byte typeValueKey() {
-        return JDWP.Tag.FLOAT;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/GenericAttachingConnector.java b/ojluni/src/main/java/com/sun/tools/jdi/GenericAttachingConnector.java
deleted file mode 100755
index 39d087e..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/GenericAttachingConnector.java
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-package com.sun.tools.jdi;
-
-import java.io.IOException;
-import java.util.Map;
-
-import com.sun.jdi.Bootstrap;
-import com.sun.jdi.VirtualMachine;
-import com.sun.jdi.connect.*;
-import com.sun.jdi.connect.spi.*;
-
-/*
- * An AttachingConnector to attach to a running VM using any
- * TransportService.
- */
-
-public class GenericAttachingConnector
-        extends ConnectorImpl implements AttachingConnector
-{
-    /*
-     * The arguments that this connector supports
-     */
-    static final String ARG_ADDRESS = "address";
-    static final String ARG_TIMEOUT = "timeout";
-
-    TransportService transportService;
-    Transport transport;
-
-    /*
-     * Initialize a new instance of this connector. The connector
-     * encapsulates a transport service and optionally has an
-     * "address" connector argument.
-     */
-    private GenericAttachingConnector(TransportService ts,
-                                      boolean addAddressArgument)
-    {
-        transportService = ts;
-        transport = new Transport() {
-                public String name() {
-                    // delegate name to the transport service
-                    return transportService.name();
-                }
-            };
-
-        if (addAddressArgument) {
-            addStringArgument(
-                ARG_ADDRESS,
-                getString("generic_attaching.address.label"),
-                getString("generic_attaching.address"),
-                "",
-                true);
-        }
-
-
-        addIntegerArgument(
-                ARG_TIMEOUT,
-                getString("generic_attaching.timeout.label"),
-                getString("generic_attaching.timeout"),
-                "",
-                false,
-                0, Integer.MAX_VALUE);
-    }
-
-    /**
-     * Initializes a new instance of this connector. This constructor
-     * is used when sub-classing - the resulting connector will have
-     * a "timeout" connector argument.
-     */
-    protected GenericAttachingConnector(TransportService ts) {
-        this(ts, false);
-    }
-
-    /*
-     * Create an instance of this connector. The resulting AttachingConnector
-     * will have address and timeout connector arguments.
-     */
-    public static GenericAttachingConnector create(TransportService ts) {
-        return new GenericAttachingConnector(ts, true);
-    }
-
-    /**
-     * Attach to a target VM using the specified address and Connector arguments.
-     */
-    public VirtualMachine attach(String address, Map args)
-        throws IOException, IllegalConnectorArgumentsException
-    {
-        String ts  = argument(ARG_TIMEOUT, args).value();
-        int timeout = 0;
-        if (ts.length() > 0) {
-            timeout = Integer.decode(ts).intValue();
-        }
-        Connection connection = transportService.attach(address, timeout, 0);
-        return Bootstrap.virtualMachineManager().createVirtualMachine(connection);
-    }
-
-    /**
-     * Attach to a target VM using the specified arguments - the address
-     * of the target VM is specified by the <code>address</code> connector
-     * argument.
-     */
-    public VirtualMachine
-        attach(Map<String,? extends Connector.Argument> args)
-        throws IOException, IllegalConnectorArgumentsException
-    {
-        String address = argument(ARG_ADDRESS, args).value();
-        return attach(address, args);
-    }
-
-    public String name() {
-        return transport.name() + "Attach";
-    }
-
-    public String description() {
-        return transportService.description();
-    }
-
-    public Transport transport() {
-        return transport;
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/GenericListeningConnector.java b/ojluni/src/main/java/com/sun/tools/jdi/GenericListeningConnector.java
deleted file mode 100755
index 886a954..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/GenericListeningConnector.java
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-package com.sun.tools.jdi;
-
-import java.util.Map;
-import java.util.HashMap;
-import java.util.ArrayList;
-import java.io.IOException;
-
-import com.sun.jdi.Bootstrap;
-import com.sun.jdi.VirtualMachine;
-import com.sun.jdi.connect.*;
-import com.sun.jdi.connect.spi.*;
-
-/*
- * A ListeningConnector to listen for connections from target VM
- * using the configured transport service
- */
-public class GenericListeningConnector
-        extends ConnectorImpl implements ListeningConnector
-{
-    static final String ARG_ADDRESS = "address";
-    static final String ARG_TIMEOUT = "timeout";
-
-    Map<Map<String,? extends Connector.Argument>, TransportService.ListenKey>  listenMap;
-    TransportService transportService;
-    Transport transport;
-
-    /**
-     * Initialize a new instance of this connector. The connector
-     * encapsulates a transport service, has a "timeout" connector argument,
-     * and optionally an "address" connector argument.
-     */
-    private GenericListeningConnector(TransportService ts,
-                                      boolean addAddressArgument)
-    {
-        transportService = ts;
-        transport = new Transport() {
-                public String name() {
-                    return transportService.name();
-                }
-            };
-
-        if (addAddressArgument) {
-            addStringArgument(
-                ARG_ADDRESS,
-                getString("generic_listening.address.label"),
-                getString("generic_listening.address"),
-                "",
-                false);
-        }
-
-        addIntegerArgument(
-                ARG_TIMEOUT,
-                getString("generic_listening.timeout.label"),
-                getString("generic_listening.timeout"),
-                "",
-                false,
-                0, Integer.MAX_VALUE);
-
-        listenMap = new HashMap<Map<String,? extends Connector.Argument>,TransportService.ListenKey>(10);
-    }
-
-    /**
-     * Initialize a new instance of this connector. This constructor is used
-     * when sub-classing - the resulting connector will a "timeout" connector
-     * argument.
-     */
-    protected GenericListeningConnector(TransportService ts) {
-        this(ts, false);
-    }
-
-    /**
-     * Create an instance of this Connector. The resulting ListeningConnector will
-     * have "address" and "timeout" connector arguments.
-     */
-    public static GenericListeningConnector create(TransportService ts) {
-        return new GenericListeningConnector(ts, true);
-    }
-
-    public String startListening(String address, Map<String,? extends Connector.Argument> args)
-        throws IOException, IllegalConnectorArgumentsException
-    {
-        TransportService.ListenKey listener = listenMap.get(args);
-        if (listener != null) {
-           throw new IllegalConnectorArgumentsException("Already listening",
-               new ArrayList<String>(args.keySet()));
-        }
-
-        listener = transportService.startListening(address);
-        listenMap.put(args, listener);
-        return listener.address();
-    }
-
-    public String
-        startListening(Map<String,? extends Connector.Argument> args)
-        throws IOException, IllegalConnectorArgumentsException
-    {
-        String address = argument(ARG_ADDRESS, args).value();
-        return startListening(address, args);
-    }
-
-    public void stopListening(Map<String,? extends Connector.Argument> args)
-        throws IOException, IllegalConnectorArgumentsException
-    {
-        TransportService.ListenKey listener = listenMap.get(args);
-        if (listener == null) {
-           throw new IllegalConnectorArgumentsException("Not listening",
-               new ArrayList<String>(args.keySet()));
-        }
-        transportService.stopListening(listener);
-        listenMap.remove(args);
-    }
-
-    public VirtualMachine
-        accept(Map<String,? extends Connector.Argument> args)
-        throws IOException, IllegalConnectorArgumentsException
-    {
-        String ts = argument(ARG_TIMEOUT, args).value();
-        int timeout = 0;
-        if (ts.length() > 0) {
-            timeout = Integer.decode(ts).intValue();
-        }
-
-        TransportService.ListenKey listener = listenMap.get(args);
-        Connection connection;
-        if (listener != null) {
-            connection = transportService.accept(listener, timeout, 0);
-        } else {
-            /*
-             * Keep compatibility with previous releases - if the
-             * debugger hasn't called startListening then we do a
-             * once-off accept
-             */
-             startListening(args);
-             listener = listenMap.get(args);
-             assert listener != null;
-             connection = transportService.accept(listener, timeout, 0);
-             stopListening(args);
-        }
-        return Bootstrap.virtualMachineManager().createVirtualMachine(connection);
-    }
-
-    public boolean supportsMultipleConnections() {
-        return transportService.capabilities().supportsMultipleConnections();
-    }
-
-    public String name() {
-        return transport.name() + "Listen";
-    }
-
-    public String description() {
-        return transportService.description();
-    }
-
-    public Transport transport() {
-        return transport;
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/IntegerTypeImpl.java b/ojluni/src/main/java/com/sun/tools/jdi/IntegerTypeImpl.java
deleted file mode 100755
index 806f35d..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/IntegerTypeImpl.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (c) 1998, 1999, 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.tools.jdi;
-
-import com.sun.jdi.*;
-
-public class IntegerTypeImpl extends PrimitiveTypeImpl implements IntegerType {
-    IntegerTypeImpl(VirtualMachine vm) {
-        super(vm);
-    }
-
-
-    public String signature() {
-        return String.valueOf((char)JDWP.Tag.INT);
-    }
-
-    PrimitiveValue convert(PrimitiveValue value) throws InvalidTypeException {
-        return vm.mirrorOf(((PrimitiveValueImpl)value).checkedIntValue());
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/IntegerValueImpl.java b/ojluni/src/main/java/com/sun/tools/jdi/IntegerValueImpl.java
deleted file mode 100755
index c455103..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/IntegerValueImpl.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package com.sun.tools.jdi;
-
-import com.sun.jdi.*;
-
-public class IntegerValueImpl extends PrimitiveValueImpl
-                              implements IntegerValue {
-    private int value;
-
-    IntegerValueImpl(VirtualMachine aVm,int aValue) {
-        super(aVm);
-
-        value = aValue;
-    }
-
-    public boolean equals(Object obj) {
-        if ((obj != null) && (obj instanceof IntegerValue)) {
-            return (value == ((IntegerValue)obj).value()) &&
-                   super.equals(obj);
-        } else {
-            return false;
-        }
-    }
-
-    public int hashCode() {
-        /*
-         * TO DO: Better hash code
-         */
-        return intValue();
-    }
-
-    public int compareTo(IntegerValue obj) {
-        int other = obj.value();
-        return (value()<other ? -1 : (value()==other ? 0 : 1));
-    }
-
-    public Type type() {
-        return vm.theIntegerType();
-    }
-
-    public int value() {
-        return value;
-    }
-
-    public boolean booleanValue() {
-        return(value == 0)?false:true;
-    }
-
-    public byte byteValue() {
-        return(byte)value;
-    }
-
-    public char charValue() {
-        return(char)value;
-    }
-
-    public short shortValue() {
-        return(short)value;
-    }
-
-    public int intValue() {
-        return(int)value;
-    }
-
-    public long longValue() {
-        return(long)value;
-    }
-
-    public float floatValue() {
-        return(float)value;
-    }
-
-    public double doubleValue() {
-        return(double)value;
-    }
-
-    byte checkedByteValue() throws InvalidTypeException {
-        if ((value > Byte.MAX_VALUE) || (value < Byte.MIN_VALUE)) {
-            throw new InvalidTypeException("Can't convert " + value + " to byte");
-        } else {
-            return super.checkedByteValue();
-        }
-    }
-
-    char checkedCharValue() throws InvalidTypeException {
-        if ((value > Character.MAX_VALUE) || (value < Character.MIN_VALUE)) {
-            throw new InvalidTypeException("Can't convert " + value + " to char");
-        } else {
-            return super.checkedCharValue();
-        }
-    }
-
-    short checkedShortValue() throws InvalidTypeException {
-        if ((value > Short.MAX_VALUE) || (value < Short.MIN_VALUE)) {
-            throw new InvalidTypeException("Can't convert " + value + " to short");
-        } else {
-            return super.checkedShortValue();
-        }
-    }
-
-    public String toString() {
-        return "" + value;
-    }
-
-    byte typeValueKey() {
-        return JDWP.Tag.INT;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/InterfaceTypeImpl.java b/ojluni/src/main/java/com/sun/tools/jdi/InterfaceTypeImpl.java
deleted file mode 100755
index 2de4637..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/InterfaceTypeImpl.java
+++ /dev/null
@@ -1,182 +0,0 @@
-/*
- * Copyright (c) 1998, 1999, 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.tools.jdi;
-
-import com.sun.jdi.*;
-
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Map;
-import java.util.Iterator;
-import java.util.Collections;
-import java.lang.ref.SoftReference;
-
-public class InterfaceTypeImpl extends ReferenceTypeImpl
-                               implements InterfaceType {
-
-    private SoftReference<List<InterfaceType>> superinterfacesRef = null;
-
-    protected InterfaceTypeImpl(VirtualMachine aVm,long aRef) {
-        super(aVm, aRef);
-    }
-
-    public List<InterfaceType> superinterfaces() {
-        List<InterfaceType> superinterfaces = (superinterfacesRef == null) ? null :
-                                     superinterfacesRef.get();
-        if (superinterfaces == null) {
-            superinterfaces = getInterfaces();
-            superinterfaces = Collections.unmodifiableList(superinterfaces);
-            superinterfacesRef = new SoftReference<List<InterfaceType>>(superinterfaces);
-        }
-        return superinterfaces;
-    }
-
-    public List<InterfaceType> subinterfaces() {
-        List<InterfaceType> subs = new ArrayList<InterfaceType>();
-        for (ReferenceType refType : vm.allClasses()) {
-            if (refType instanceof InterfaceType) {
-                InterfaceType interfaze = (InterfaceType)refType;
-                if (interfaze.isPrepared() && interfaze.superinterfaces().contains(this)) {
-                    subs.add(interfaze);
-                }
-            }
-        }
-        return subs;
-    }
-
-    public List<ClassType> implementors() {
-        List<ClassType> implementors = new ArrayList<ClassType>();
-        for (ReferenceType refType : vm.allClasses()) {
-            if (refType instanceof ClassType) {
-                ClassType clazz = (ClassType)refType;
-                if (clazz.isPrepared() && clazz.interfaces().contains(this)) {
-                    implementors.add(clazz);
-                }
-            }
-        }
-        return implementors;
-    }
-
-    void addVisibleMethods(Map<String, Method> methodMap) {
-        /*
-         * Add methods from
-         * parent types first, so that the methods in this class will
-         * overwrite them in the hash table
-         */
-
-        for (InterfaceType interfaze : superinterfaces()) {
-            ((InterfaceTypeImpl)interfaze).addVisibleMethods(methodMap);
-        }
-
-        addToMethodMap(methodMap, methods());
-    }
-
-    public List<Method> allMethods() {
-        ArrayList<Method> list = new ArrayList<Method>(methods());
-
-        /*
-         * It's more efficient if don't do this
-         * recursively.
-         */
-        for (InterfaceType interfaze : allSuperinterfaces()) {
-            list.addAll(interfaze.methods());
-        }
-
-        return list;
-    }
-
-    List<InterfaceType> allSuperinterfaces() {
-        ArrayList<InterfaceType> list = new ArrayList<InterfaceType>();
-        addSuperinterfaces(list);
-        return list;
-    }
-
-    void addSuperinterfaces(List<InterfaceType> list) {
-        /*
-         * This code is a little strange because it
-         * builds the list with a more suitable order than the
-         * depth-first approach a normal recursive solution would
-         * take. Instead, all direct superinterfaces precede all
-         * indirect ones.
-         */
-
-        /*
-         * Get a list of direct superinterfaces that's not already in the
-         * list being built.
-         */
-        List<InterfaceType> immediate = new ArrayList<InterfaceType>(superinterfaces());
-        Iterator iter = immediate.iterator();
-        while (iter.hasNext()) {
-            InterfaceType interfaze = (InterfaceType)iter.next();
-            if (list.contains(interfaze)) {
-                iter.remove();
-            }
-        }
-
-        /*
-         * Add all new direct superinterfaces
-         */
-        list.addAll(immediate);
-
-        /*
-         * Recurse for all new direct superinterfaces.
-         */
-        iter = immediate.iterator();
-        while (iter.hasNext()) {
-            InterfaceTypeImpl interfaze = (InterfaceTypeImpl)iter.next();
-            interfaze.addSuperinterfaces(list);
-        }
-    }
-
-    boolean isAssignableTo(ReferenceType type) {
-
-        // Exact match?
-        if (this.equals(type)) {
-            return true;
-        } else {
-            // Try superinterfaces.
-            for (InterfaceType interfaze : superinterfaces()) {
-                if (((InterfaceTypeImpl)interfaze).isAssignableTo(type)) {
-                    return true;
-                }
-            }
-
-            return false;
-        }
-    }
-
-    List<InterfaceType> inheritedTypes() {
-        return superinterfaces();
-    }
-
-    public boolean isInitialized() {
-        return isPrepared();
-    }
-
-    public String toString() {
-       return "interface " + name() + " (" + loaderString() + ")";
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/InternalEventHandler.java b/ojluni/src/main/java/com/sun/tools/jdi/InternalEventHandler.java
deleted file mode 100755
index d8b02fb..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/InternalEventHandler.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Copyright (c) 1998, 2001, 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.tools.jdi;
-
-import com.sun.jdi.*;
-import com.sun.jdi.event.*;
-import java.util.*;
-
-public class InternalEventHandler implements Runnable
-{
-    EventQueueImpl queue;
-    VirtualMachineImpl vm;
-
-    InternalEventHandler(VirtualMachineImpl vm, EventQueueImpl queue)
-    {
-        this.vm = vm;
-        this.queue = queue;
-        Thread thread = new Thread(vm.threadGroupForJDI(), this,
-                                   "JDI Internal Event Handler");
-        thread.setDaemon(true);
-        thread.start();
-    }
-
-    public void run() {
-        if ((vm.traceFlags & VirtualMachine.TRACE_EVENTS) != 0) {
-            vm.printTrace("Internal event handler running");
-        }
-        try {
-            while (true) {
-                try {
-                    EventSet eventSet = queue.removeInternal();
-                    EventIterator it = eventSet.eventIterator();
-                    while (it.hasNext()) {
-                        Event event = it.nextEvent();
-                        if (event instanceof ClassUnloadEvent) {
-                            ClassUnloadEvent cuEvent = (ClassUnloadEvent)event;
-                            vm.removeReferenceType(cuEvent.classSignature());
-
-                            if ((vm.traceFlags & vm.TRACE_EVENTS) != 0) {
-                                vm.printTrace("Handled Unload Event for " +
-                                              cuEvent.classSignature());
-                            }
-                        } else if (event instanceof ClassPrepareEvent) {
-                            ClassPrepareEvent cpEvent = (ClassPrepareEvent)event;
-                            ((ReferenceTypeImpl)cpEvent.referenceType())
-                                                            .markPrepared();
-
-                            if ((vm.traceFlags & vm.TRACE_EVENTS) != 0) {
-                                vm.printTrace("Handled Prepare Event for " +
-                                              cpEvent.referenceType().name());
-                            }
-                        }
-
-                    }
-
-                /*
-                 * Handle exceptions that can occur in normal operation
-                 * but which can't be accounted for by event builder
-                 * methods. The thread should not be terminated if they
-                 * occur.
-                 *
-                 * TO DO: We need a better way to log these conditions.
-                 */
-                } catch (VMOutOfMemoryException vmme) {
-                    vmme.printStackTrace();
-                } catch (InconsistentDebugInfoException idie) {
-                    idie.printStackTrace();
-
-                /*
-                 * If any of these exceptions below occurs, there is some
-                 * sort of programming error that should be addressed in
-                 * the JDI implemementation. However, it would cripple
-                 * the implementation if we let this thread die due to
-                 * one of them. So, a notification of the exception is
-                 * given and we attempt to continue.
-                 */
-                } catch (ObjectCollectedException oce) {
-                    oce.printStackTrace();
-                } catch (ClassNotPreparedException cnpe) {
-                    cnpe.printStackTrace();
-                }
-            }
-        } catch (InterruptedException e) {  // should we really die here
-        } catch (VMDisconnectedException e) {  // time to die
-        }
-        if ((vm.traceFlags & VirtualMachine.TRACE_EVENTS) != 0) {
-            vm.printTrace("Internal event handler exiting");
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/JDWPException.java b/ojluni/src/main/java/com/sun/tools/jdi/JDWPException.java
deleted file mode 100755
index 125689c..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/JDWPException.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (c) 1998, 2001, 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.tools.jdi;
-import com.sun.jdi.*;
-
-class JDWPException extends Exception {
-
-    short errorCode;
-
-    JDWPException(short errorCode) {
-        super();
-        this.errorCode = errorCode;
-    }
-
-    short errorCode() {
-        return errorCode;
-    }
-
-    RuntimeException toJDIException() {
-        switch (errorCode) {
-            case JDWP.Error.INVALID_OBJECT:
-                return new ObjectCollectedException();
-            case JDWP.Error.VM_DEAD:
-                return new VMDisconnectedException();
-            case JDWP.Error.OUT_OF_MEMORY:
-                return new VMOutOfMemoryException();
-            case JDWP.Error.CLASS_NOT_PREPARED:
-                return new ClassNotPreparedException();
-            case JDWP.Error.INVALID_FRAMEID:
-            case JDWP.Error.NOT_CURRENT_FRAME:
-                return new InvalidStackFrameException();
-            case JDWP.Error.NOT_IMPLEMENTED:
-                return new UnsupportedOperationException();
-            case JDWP.Error.INVALID_INDEX:
-            case JDWP.Error.INVALID_LENGTH:
-                return new IndexOutOfBoundsException();
-            case JDWP.Error.TYPE_MISMATCH:
-                return new InconsistentDebugInfoException();
-            case JDWP.Error.INVALID_THREAD:
-                return new IllegalThreadStateException();
-            default:
-                return new InternalException("Unexpected JDWP Error: " + errorCode, errorCode);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/JNITypeParser.java b/ojluni/src/main/java/com/sun/tools/jdi/JNITypeParser.java
deleted file mode 100755
index 2ed7265..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/JNITypeParser.java
+++ /dev/null
@@ -1,241 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package com.sun.tools.jdi;
-
-import java.util.List;
-import java.util.ArrayList;
-
-public class JNITypeParser {
-
-    static final char SIGNATURE_ENDCLASS = ';';
-    static final char SIGNATURE_FUNC = '(';
-    static final char SIGNATURE_ENDFUNC = ')';
-
-    private String signature;
-    private List<String> typeNameList;
-    private List<String> signatureList;
-    private int currentIndex;
-
-    JNITypeParser(String signature) {
-        this.signature = signature;
-    }
-
-    static String typeNameToSignature(String signature) {
-        StringBuffer buffer = new StringBuffer();
-        int firstIndex = signature.indexOf('[');
-        int index = firstIndex;
-        while (index != -1) {
-            buffer.append('[');
-            index = signature.indexOf('[', index + 1);
-        }
-
-        if (firstIndex != -1) {
-            signature = signature.substring(0, firstIndex);
-        }
-
-        if (signature.equals("boolean")) {
-            buffer.append('Z');
-        } else if (signature.equals("byte")) {
-            buffer.append('B');
-        } else if (signature.equals("char")) {
-            buffer.append('C');
-        } else if (signature.equals("short")) {
-            buffer.append('S');
-        } else if (signature.equals("int")) {
-            buffer.append('I');
-        } else if (signature.equals("long")) {
-            buffer.append('J');
-        } else if (signature.equals("float")) {
-            buffer.append('F');
-        } else if (signature.equals("double")) {
-            buffer.append('D');
-        } else {
-            buffer.append('L');
-            buffer.append(signature.replace('.', '/'));
-            buffer.append(';');
-        }
-
-        return buffer.toString();
-    }
-
-    String typeName() {
-        return typeNameList().get(typeNameList().size()-1);
-    }
-
-    List<String> argumentTypeNames() {
-        return typeNameList().subList(0, typeNameList().size() - 1);
-    }
-
-    String signature() {
-        return signatureList().get(signatureList().size()-1);
-    }
-
-    List<String> argumentSignatures() {
-        return signatureList().subList(0, signatureList().size() - 1);
-    }
-
-    int dimensionCount() {
-        int count = 0;
-        String signature = signature();
-        while (signature.charAt(count) == '[') {
-            count++;
-        }
-        return count;
-    }
-
-    String componentSignature(int level) {
-        return signature().substring(level);
-    }
-
-    private synchronized List<String> signatureList() {
-        if (signatureList == null) {
-            signatureList = new ArrayList<String>(10);
-            String elem;
-
-            currentIndex = 0;
-
-            while(currentIndex < signature.length()) {
-                elem = nextSignature();
-                signatureList.add(elem);
-            }
-            if (signatureList.size() == 0) {
-                throw new IllegalArgumentException("Invalid JNI signature '" +
-                                                   signature + "'");
-            }
-        }
-        return signatureList;
-    }
-
-    private synchronized List<String> typeNameList() {
-        if (typeNameList == null) {
-            typeNameList = new ArrayList<String>(10);
-            String elem;
-
-            currentIndex = 0;
-
-            while(currentIndex < signature.length()) {
-                elem = nextTypeName();
-                typeNameList.add(elem);
-            }
-            if (typeNameList.size() == 0) {
-                throw new IllegalArgumentException("Invalid JNI signature '" +
-                                                   signature + "'");
-            }
-        }
-        return typeNameList;
-    }
-
-    private String nextSignature() {
-        char key = signature.charAt(currentIndex++);
-
-        switch(key) {
-            case (JDWP.Tag.ARRAY):
-                return  key + nextSignature();
-
-            case (JDWP.Tag.OBJECT):
-                int endClass = signature.indexOf(SIGNATURE_ENDCLASS,
-                                                 currentIndex);
-                String retVal = signature.substring(currentIndex - 1,
-                                                    endClass + 1);
-                currentIndex = endClass + 1;
-                return retVal;
-
-            case (JDWP.Tag.VOID):
-            case (JDWP.Tag.BOOLEAN):
-            case (JDWP.Tag.BYTE):
-            case (JDWP.Tag.CHAR):
-            case (JDWP.Tag.SHORT):
-            case (JDWP.Tag.INT):
-            case (JDWP.Tag.LONG):
-            case (JDWP.Tag.FLOAT):
-            case (JDWP.Tag.DOUBLE):
-                return String.valueOf(key);
-
-            case SIGNATURE_ENDFUNC:
-            case SIGNATURE_FUNC:
-                return nextSignature();
-
-            default:
-                throw new IllegalArgumentException(
-                    "Invalid JNI signature character '" + key + "'");
-
-        }
-    }
-
-    private String nextTypeName() {
-        char key = signature.charAt(currentIndex++);
-
-        switch(key) {
-            case (JDWP.Tag.ARRAY):
-                return  nextTypeName() + "[]";
-
-            case (JDWP.Tag.BYTE):
-                return "byte";
-
-            case (JDWP.Tag.CHAR):
-                return "char";
-
-            case (JDWP.Tag.OBJECT):
-                int endClass = signature.indexOf(SIGNATURE_ENDCLASS,
-                                                 currentIndex);
-                String retVal = signature.substring(currentIndex,
-                                                    endClass);
-                retVal = retVal.replace('/','.');
-                currentIndex = endClass + 1;
-                return retVal;
-
-            case (JDWP.Tag.FLOAT):
-                return "float";
-
-            case (JDWP.Tag.DOUBLE):
-                return "double";
-
-            case (JDWP.Tag.INT):
-                return "int";
-
-            case (JDWP.Tag.LONG):
-                return "long";
-
-            case (JDWP.Tag.SHORT):
-                return "short";
-
-            case (JDWP.Tag.VOID):
-                return "void";
-
-            case (JDWP.Tag.BOOLEAN):
-                return "boolean";
-
-            case SIGNATURE_ENDFUNC:
-            case SIGNATURE_FUNC:
-                return nextTypeName();
-
-            default:
-                throw new IllegalArgumentException(
-                    "Invalid JNI signature character '" + key + "'");
-
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/LineInfo.java b/ojluni/src/main/java/com/sun/tools/jdi/LineInfo.java
deleted file mode 100755
index 8a4bdef..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/LineInfo.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (c) 2001, 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.tools.jdi;
-
-import com.sun.jdi.*;
-
-interface LineInfo {
-
-    String liStratum();
-
-    int liLineNumber();
-
-    String liSourceName() throws AbsentInformationException;
-
-    String liSourcePath() throws AbsentInformationException;
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/LinkedHashMap.java b/ojluni/src/main/java/com/sun/tools/jdi/LinkedHashMap.java
deleted file mode 100755
index fb055ee..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/LinkedHashMap.java
+++ /dev/null
@@ -1,904 +0,0 @@
-/*
- * Copyright (c) 1998, 2000, 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.tools.jdi;
-
-import java.io.*;
-import java.util.*;
-
-/**
- * Hash table based implementation of the Map interface.  This implementation
- * provides all of the optional Map operations, and permits null values and
- * the null key.  (HashMap is roughly equivalent to Hashtable, except that it
- * is unsynchronized and permits nulls.) In addition, elements in the map are
- * ordered and doubly linked together.
- * <p>
- * This implementation provides constant-time performance for the basic
- * operations (get and put), assuming the the hash function disperses the
- * elements properly among the buckets.  Iteration over Collection views
- * requires time proportional to its size (the number of key-value mappings)
- * and returns elements in the order they are linked. In a HashMap the
- * iteration would require time  proportional to the capacity of the map
- * plus the map size.
- * <p>
- * An instance of LinkedHashMap has two parameters that affect its efficiency:
- * its <i>capacity</i> and its <i>load factor</i>. The load factor should be
- * between 0.0 and 1.0. When the number of mappings in the LinkedHashMap exceeds
- * the product of the load factor and the current capacity, the capacity is
- * increased by calling the rehash method which requires time proportional
- * to the number of key-value mappings in the map. Larger load factors
- * use memory more efficiently, at the expense of larger expected time per
- * lookup.
- * <p>
- * If many mappings are to be stored in a LinkedHashMap, creating it with a
- * sufficiently large capacity will allow the mappings to be stored more
- * efficiently than letting it perform automatic rehashing as needed to grow
- * the table.
- * <p>
- * <strong>Note that this implementation is not synchronized.</strong> If
- * multiple threads access a LinkedHashMap concurrently, and at least one of the
- * threads modifies the LinkedHashMap structurally, it <em>must</em> be
- * synchronized externally.  (A structural modification is any operation that
- * adds or deletes one or more mappings; merely changing the value associated
- * with a key that is already contained in the Table is not a structural
- * modification.)  This is typically accomplished by synchronizing on some
- * object that naturally encapsulates the LinkedHashMap.  If no such object
- * exists, the LinkedHashMap should be "wrapped" using the
- * Collections.synchronizedSet method.  This is best done at creation time, to
- * prevent accidental unsynchronized access to the LinkedHashMap:
- * <pre>
- *      Map m = Collections.synchronizedMap(new LinkedHashMap(...));
- * </pre>
- * <p>
- * The Iterators returned by the iterator methods of the Collections returned
- * by all of LinkedHashMap's "collection view methods" are <em>fail-fast</em>:
- * if the LinkedHashMap is structurally modified at any time after the Iterator
- * is created, in any way except through the Iterator's own remove or add
- * methods, the Iterator will throw a ConcurrentModificationException.  Thus,
- * in the face of concurrent modification, the Iterator fails quickly and
- * cleanly, rather than risking arbitrary, non-deterministic behavior at an
- * undetermined time in the future.
- *
- * @author  Josh Bloch
- * @author  Arthur van Hoff
- * @author  Zhenghua Li
- * @see     Object#hashCode()
- * @see     java.util.Collection
- * @see     java.util.Map
- * @see     java.util.TreeMap
- * @see     java.util.Hashtable
- * @see     java.util.HashMap
- */
-
-import java.io.Serializable;
-
-public class LinkedHashMap extends AbstractMap implements Map, Serializable {
-    /**
-     * The hash table data.
-     */
-    private transient Entry table[];
-
-    /**
-     * The head of the double linked list.
-     */
-    private transient Entry header;
-
-    /**
-     * The total number of mappings in the hash table.
-     */
-    private transient int count;
-
-    /**
-     * Rehashes the table when count exceeds this threshold.
-     */
-    private int threshold;
-
-    /**
-     * The load factor for the LinkedHashMap.
-     */
-    private float loadFactor;
-
-    /**
-     * The number of times this LinkedHashMap has been structurally modified
-     * Structural modifications are those that change the number of mappings in
-     * the LinkedHashMap or otherwise modify its internal structure (e.g.,
-     * rehash).  This field is used to make iterators on Collection-views of
-     * the LinkedHashMap fail-fast.  (See ConcurrentModificationException).
-     */
-    private transient int modCount = 0;
-
-    /**
-     * Constructs a new, empty LinkedHashMap with the specified initial
-     * capacity and the specified load factor.
-     *
-     * @param      initialCapacity   the initial capacity of the LinkedHashMap.
-     * @param      loadFactor        a number between 0.0 and 1.0.
-     * @exception  IllegalArgumentException  if the initial capacity is less
-     *               than or equal to zero, or if the load factor is less than
-     *               or equal to zero.
-     */
-    public LinkedHashMap(int initialCapacity, float loadFactor) {
-        if (initialCapacity < 0)
-            throw new IllegalArgumentException("Illegal Initial Capacity: "+
-                                               initialCapacity);
-        if ((loadFactor > 1) || (loadFactor <= 0))
-            throw new IllegalArgumentException("Illegal Load factor: "+
-                                               loadFactor);
-        if (initialCapacity==0)
-            initialCapacity = 1;
-        this.loadFactor = loadFactor;
-        table = new Entry[initialCapacity];
-        threshold = (int)(initialCapacity * loadFactor);
-        header = new Entry(-1, null, null, null);
-        header.before = header.after = header;
-    }
-
-    /**
-     * Constructs a new, empty LinkedHashMap with the specified initial capacity
-     * and default load factor.
-     *
-     * @param   initialCapacity   the initial capacity of the LinkedHashMap.
-     */
-    public LinkedHashMap(int initialCapacity) {
-        this(initialCapacity, 0.75f);
-    }
-
-    /**
-     * Constructs a new, empty LinkedHashMap with a default capacity and load
-     * factor.
-     */
-    public LinkedHashMap() {
-        this(101, 0.75f);
-    }
-
-    /**
-     * Constructs a new LinkedHashMap with the same mappings as the given
-     * Map.  The LinkedHashMap is created with a capacity of thrice the number
-     * of mappings in the given Map or 11 (whichever is greater), and a
-     * default load factor.
-     */
-    public LinkedHashMap(Map t) {
-        this(Math.max(3*t.size(), 11), 0.75f);
-        putAll(t);
-    }
-
-    /**
-     * Returns the number of key-value mappings in this Map.
-     */
-    public int size() {
-        return count;
-    }
-
-    /**
-     * Returns true if this Map contains no key-value mappings.
-     */
-    public boolean isEmpty() {
-        return count == 0;
-    }
-
-    /**
-     * Returns true if this LinkedHashMap maps one or more keys to the specified
-     * value.
-     *
-     * @param value value whose presence in this Map is to be tested.
-     */
-    public boolean containsValue(Object value) {
-        if (value==null) {
-            for (Entry e = header.after; e != header; e = e.after)
-                if (e.value==null)
-                    return true;
-        } else {
-            for (Entry e = header.after; e != header; e = e.after)
-                if (value.equals(e.value))
-                    return true;
-        }
-        return false;
-    }
-
-    /**
-     * Returns true if this LinkedHashMap contains a mapping for the specified
-     * key.
-     *
-     * @param key key whose presence in this Map is to be tested.
-     */
-    public boolean containsKey(Object key) {
-        Entry tab[] = table;
-        if (key != null) {
-            int hash = key.hashCode();
-            int index = (hash & 0x7FFFFFFF) % tab.length;
-            for (Entry e = tab[index]; e != null; e = e.next)
-                if (e.hash==hash && e.key.equals(key))
-                    return true;
-        } else {
-            for (Entry e = tab[0]; e != null; e = e.next)
-                if (e.key==null)
-                    return true;
-        }
-
-        return false;
-    }
-
-    /**
-     * Returns the value to which this LinkedHashMap maps the specified key.
-     * Returns null if the LinkedHashMap contains no mapping for this key.
-     * A return value of null does not <em>necessarily</em> indicate that the
-     * LinkedHashMap contains no mapping for the key; it's also possible that
-     * the LinkedHashMap explicitly maps the key to null.  The containsKey
-     * operation may be used to distinguish these two cases.
-     *
-     * @param key key whose associated value is to be returned.
-     */
-    public Object get(Object key) {
-        Entry e = getEntry(key);
-        return e==null ? null : e.value;
-    }
-
-    /**
-     * Returns the entry associated with the specified key in the LinkedHashMap.
-     * Returns null if the LinkedHashMap contains no mapping for this key.
-     */
-    private Entry getEntry(Object key) {
-        Entry tab[] = table;
-
-        if (key != null) {
-            int hash = key.hashCode();
-            int index = (hash & 0x7FFFFFFF) % tab.length;
-            for (Entry e = tab[index]; e != null; e = e.next)
-                if ((e.hash == hash) && e.key.equals(key))
-                    return e;
-        } else {
-            for (Entry e = tab[0]; e != null; e = e.next)
-                if (e.key==null)
-                    return e;
-        }
-
-        return null;
-    }
-
-    /**
-     * Rehashes the contents of the LinkedHashMap into a LinkedHashMap with a
-     * larger capacity. This method is called automatically when the
-     * number of keys in the LinkedHashMap exceeds this LinkedHashMap's capacity
-     * and load factor.
-     */
-    private void rehash() {
-        int oldCapacity = table.length;
-        Entry oldMap[] = table;
-
-        int newCapacity = oldCapacity * 2 + 1;
-        Entry newMap[] = new Entry[newCapacity];
-
-        modCount++;
-        threshold = (int)(newCapacity * loadFactor);
-        table = newMap;
-
-        for (Entry e = header.after; e != header; e = e.after) {
-            int index = (e.hash & 0x7FFFFFFF) % newCapacity;
-            e.next = newMap[index];
-            newMap[index] = e;
-        }
-    }
-
-    /**
-     * Remove an entry from the linked list.
-     */
-    private void listRemove(Entry entry) {
-        if (entry == null) {
-            return;
-        }
-        entry.before.after = entry.after;
-        entry.after.before = entry.before;
-    }
-
-   /**
-    * Add the specified entry before the specified existing entry to
-    * the linked list.
-    */
-    private void listAddBefore(Entry entry, Entry existEntry) {
-        entry.after = existEntry;
-        entry.before = existEntry.before;
-        entry.before.after = entry;
-        entry.after.before = entry;
-    }
-
-    /**
-     * Returns the position of the mapping for the specified key
-     * in the ordered map.
-     *
-     * @param key the specified key.
-     * @return index of the key mapping.
-     */
-    public int indexOf(Object key) {
-        int i = 0;
-        if (key == null) {
-            for (Entry e = header.after; e != header; e = e.after, i++)
-                if (e.key == null)
-                    return i;
-        } else {
-            for (Entry e = header.after; e != header; e = e.after, i++)
-                if(key.equals(e.key))
-                    return i;
-        }
-        return -1;
-    }
-
-    /**
-     * Associates the specified value with the specified key in this
-     * LinkedHashMap. If the LinkedHashMap previously contained a mapping for
-     * this key, the old value is replaced and the position of this mapping
-     * entry in the double linked list remains the same. Otherwise, a new
-     * mapping entry is created and inserted into the list before the specified
-     * existing mapping entry. The method returns the previous value associated
-     * with the specified key, or null if there was no mapping for key.  A null
-     * return can also indicate that the LinkedHashMap previously associated
-     * null with the specified key.
-     */
-    private Object putAhead(Object key, Object value, Entry existEntry) {
-        // Makes sure the key is not already in the LinkedHashMap.
-        Entry tab[] = table;
-        int hash = 0;
-        int index = 0;
-
-        if (key != null) {
-            hash = key.hashCode();
-            index = (hash & 0x7FFFFFFF) % tab.length;
-            for (Entry e = tab[index] ; e != null ; e = e.next) {
-                if ((e.hash == hash) && e.key.equals(key)) {
-                    Object old = e.value;
-                    e.value = value;
-                    return old;
-                }
-            }
-        } else {
-            for (Entry e = tab[0] ; e != null ; e = e.next) {
-                if (e.key == null) {
-                    Object old = e.value;
-                    e.value = value;
-                    return old;
-                }
-            }
-        }
-
-        modCount++;
-        if (count >= threshold) {
-            // Rehash the table if the threshold is exceeded
-            rehash();
-            tab = table;
-            index = (hash & 0x7FFFFFFF) % tab.length;
-        }
-
-        // Creates the new entry.
-        Entry e = new Entry(hash, key, value, tab[index]);
-        tab[index] = e;
-        listAddBefore(e, existEntry);
-        count++;
-        return null;
-    }
-
-    /**
-     * Associates the specified value with the specified key in this
-     * LinkedHashMap and position the mapping at the specified index.
-     * If the LinkedHashMap previously contained a mapping for this key,
-     * the old value is replaced and the position of this mapping entry
-     * in the double linked list remains the same. Otherwise, a new mapping
-     * entry is created and inserted into the list at the specified
-     * position.
-     *
-     * @param index     the position to put the key-value mapping.
-     * @param key       key with which the specified value is to be associated.
-     * @param value     value to be associated with the specified key.
-     * @return previous value associated with specified key, or null if there
-     *         was no mapping for key.  A null return can also indicate that
-     *         the LinkedHashMap previously associated null with the specified
-     *         key.
-     */
-    public Object put(int index, Object key, Object value) {
-        if (index < 0 || index > count)
-            throw new IndexOutOfBoundsException();
-        Entry e = header.after;
-        if (index == count)
-            return putAhead(key, value, header); //fast approach for append
-        else {
-            for (int i = 0; i < index; i++)
-                e = e.after;
-            return putAhead(key, value, e);
-        }
-    }
-
-
-    /**
-     * Associates the specified value with the specified key in this
-     * LinkedHashMap. If the LinkedHashMap previously contained a mapping for
-     * this key, the old value is replaced. The mapping entry is also appended
-     * to the end of the ordered linked list.
-     *
-     * @param key key with which the specified value is to be associated.
-     * @param value value to be associated with the specified key.
-     * @return previous value associated with specified key, or null if there
-     *         was no mapping for key.  A null return can also indicate that
-     *         the LinkedHashMap previously associated null with the specified
-     *         key.
-     */
-    public Object put(Object key, Object value) {
-        return putAhead(key, value, header);
-    }
-
-    /**
-     * Removes the mapping for this key from this LinkedHashMap if present.
-     * The mapping would also be removed from the double linked list.
-     *
-     * @param key key whose mapping is to be removed from the Map.
-     * @return previous value associated with specified key, or null if there
-     *         was no mapping for key.  A null return can also indicate that
-     *         the LinkedHashMap previously associated null with the specified
-     *         key.
-     */
-    public Object remove(Object key) {
-        Entry tab[] = table;
-
-        if (key != null) {
-            int hash = key.hashCode();
-            int index = (hash & 0x7FFFFFFF) % tab.length;
-
-            for (Entry e = tab[index], prev = null; e != null;
-                 prev = e, e = e.next) {
-                if ((e.hash == hash) && e.key.equals(key)) {
-                    modCount++;
-                    if (prev != null)
-                        prev.next = e.next;
-                    else
-                        tab[index] = e.next;
-
-                    count--;
-                    Object oldValue = e.value;
-                    e.value = null;
-
-                    listRemove(e);
-                    return oldValue;
-                }
-            }
-        } else {
-            for (Entry e = tab[0], prev = null; e != null;
-                 prev = e, e = e.next) {
-                if (e.key == null) {
-                    modCount++;
-                    if (prev != null)
-                        prev.next = e.next;
-                    else
-                        tab[0] = e.next;
-
-                    count--;
-                    Object oldValue = e.value;
-                    e.value = null;
-
-                    listRemove(e);
-                    return oldValue;
-                }
-            }
-        }
-
-        return null;
-    }
-
-    /**
-     * Copies all of the mappings from the specified Map to this LinkedHashMap
-     * These mappings will replace any mappings that this LinkedHashMap had for
-     * any of the keys currently in the specified Map.
-     *
-      * @param t Mappings to be stored in this Map.
-     */
-    public void putAll(Map t) {
-        Iterator i = t.entrySet().iterator();
-        while (i.hasNext()) {
-            Map.Entry e = (Map.Entry) i.next();
-            put(e.getKey(), e.getValue());
-        }
-    }
-
-    /**
-     * Removes all mappings from this LinkedHashMap.
-     */
-    public void clear() {
-        Entry tab[] = table;
-        modCount++;
-        for (int index = tab.length; --index >= 0; )
-            tab[index] = null;
-        count = 0;
-        header.before = header.after = header;
-    }
-
-    /**
-     * Returns a shallow copy of this LinkedHashMap. The keys and values
-     * themselves are not cloned.
-     */
-    public Object clone() {
-        return new LinkedHashMap(this);
-    }
-
-    // Views
-
-    private transient Set keySet = null;
-    private transient Set entries = null;
-    private transient Collection values = null;
-
-    /**
-     * Returns a Set view of the keys contained in this LinkedHashMap.  The Set
-     * is backed by the LinkedHashMap, so changes to the LinkedHashMap are
-     * reflected in the Set, and vice-versa.  The Set supports element removal,
-     * which removes the corresponding mapping from the LinkedHashMap, via the
-     * Iterator.remove, Set.remove, removeAll retainAll, and clear operations.
-     * It does not support the add or addAll operations.
-     */
-    public Set keySet() {
-        if (keySet == null) {
-            keySet = new AbstractSet() {
-                public Iterator iterator() {
-                    return new HashIterator(KEYS);
-                }
-                public int size() {
-                    return count;
-                }
-                public boolean contains(Object o) {
-                    return containsKey(o);
-                }
-                public boolean remove(Object o) {
-                    return LinkedHashMap.this.remove(o) != null;
-                }
-                public void clear() {
-                    LinkedHashMap.this.clear();
-                }
-            };
-        }
-        return keySet;
-    }
-
-    /**
-     * Returns a Collection view of the values contained in this LinkedHashMap.
-     * The Collection is backed by the LinkedHashMap, so changes to the
-     * LinkedHashMap are reflected in the Collection, and vice-versa.  The
-     * Collection supports element removal, which removes the corresponding
-     * mapping from the LinkedHashMap, via the Iterator.remove,
-     * Collection.remove, removeAll, retainAll and clear operations.  It does
-     * not support the add or addAll operations.
-     */
-    public Collection values() {
-        if (values==null) {
-            values = new AbstractCollection() {
-                public Iterator iterator() {
-                    return new HashIterator(VALUES);
-                }
-                public int size() {
-                    return count;
-                }
-                public boolean contains(Object o) {
-                    return containsValue(o);
-                }
-                public void clear() {
-                    LinkedHashMap.this.clear();
-                }
-            };
-        }
-        return values;
-    }
-
-    /**
-     * Returns a Collection view of the mappings contained in this
-     * LinkedHashMap. Each element in the returned collection is a Map.Entry.
-     * The Collection is backed by the LinkedHashMap, so changes to the
-     * LinkedHashMap are reflected in the Collection, and vice-versa.  The
-     * Collection supports element removal, which removes the corresponding
-     * mapping from the LinkedHashMap, via the Iterator.remove,
-     * Collection.remove, removeAll, retainAll and clear operations.  It does
-     * not support the add or addAll operations.
-     *
-     * @see   java.util.Map.Entry
-     */
-    public Set entrySet() {
-        if (entries==null) {
-            entries = new AbstractSet() {
-                public Iterator iterator() {
-                    return new HashIterator(ENTRIES);
-                }
-
-                public boolean contains(Object o) {
-                    if (!(o instanceof Map.Entry))
-                        return false;
-                    Map.Entry entry = (Map.Entry)o;
-                    Object key = entry.getKey();
-                    Entry tab[] = table;
-                    int hash = (key==null ? 0 : key.hashCode());
-                    int index = (hash & 0x7FFFFFFF) % tab.length;
-
-                    for (Entry e = tab[index]; e != null; e = e.next)
-                        if (e.hash==hash && e.equals(entry))
-                            return true;
-                    return false;
-                }
-
-                public boolean remove(Object o) {
-                    if (!(o instanceof Map.Entry))
-                        return false;
-                    Map.Entry entry = (Map.Entry)o;
-                    Object key = entry.getKey();
-                    Entry tab[] = table;
-                    int hash = (key==null ? 0 : key.hashCode());
-                    int index = (hash & 0x7FFFFFFF) % tab.length;
-
-                    for (Entry e = tab[index], prev = null; e != null;
-                         prev = e, e = e.next) {
-                        if (e.hash==hash && e.equals(entry)) {
-                            modCount++;
-                            if (prev != null)
-                                prev.next = e.next;
-                            else
-                                tab[index] = e.next;
-
-                            count--;
-                            e.value = null;
-                            listRemove(e);
-                            return true;
-                        }
-                    }
-                    return false;
-                }
-
-                public int size() {
-                    return count;
-                }
-
-                public void clear() {
-                    LinkedHashMap.this.clear();
-                }
-            };
-        }
-
-        return entries;
-    }
-
-    /**
-     * Compares the specified Object with this Map for equality.
-     * Returns true if the given object is also a LinkedHashMap and the two
-     * Maps represent the same mappings in the same order.  More formally,
-     * two Maps <code>t1</code> and <code>t2</code> represent the same mappings
-     * if <code>t1.keySet().equals(t2.keySet())</code> and for every
-     * key <code>k</code> in <code>t1.keySet()</code>, <code>
-     * (t1.get(k)==null ? t2.get(k)==null : t1.get(k).equals(t2.get(k)))
-     * </code>.
-     * <p>
-     * This implementation first checks if the specified Object is this Map;
-     * if so it returns true.  Then, it checks if the specified Object is
-     * a Map whose size is identical to the size of this Set; if not, it
-     * it returns false.  If so, it iterates over this Map and the specified
-     * Map's entrySet() Collection, and checks that the specified Map contains
-     * each mapping that this Map contains at the same position.  If the
-     * specified Map fails to contain such a mapping in the right order, false
-     * is returned.  If the iteration completes, true is returned.
-     *
-     * @param o Object to be compared for equality with this Map.
-     * @return true if the specified Object is equal to this Map.
-     *
-     */
-    public boolean equals(Object o) {
-        if (o == this)
-            return true;
-
-        if (!(o instanceof LinkedHashMap))
-            return false;
-        LinkedHashMap t = (LinkedHashMap) o;
-        if (t.size() != size())
-            return false;
-
-        Iterator i1 = entrySet().iterator();
-        Iterator i2 = t.entrySet().iterator();
-
-        while (i1.hasNext()) {
-            Entry e1 = (Entry) i1.next();
-            Entry e2 = (Entry) i2.next();
-
-            Object key1 = e1.getKey();
-            Object value1 = e1.getValue();
-            Object key2 = e2.getKey();
-            Object value2 = e2.getValue();
-
-            if ((key1 == null ? key2 == null : key1.equals(key2)) &&
-                (value1 == null ? value2 == null : value1.equals(value2))) {
-                continue;
-            } else {
-                return false;
-            }
-        }
-        return true;
-    }
-
-    /**
-     * LinkedHashMap collision list entry.
-     */
-    private static class Entry implements Map.Entry {
-        int hash;
-        Object key;
-        Object value;
-        Entry next;
-
-        // These fields comprise the doubly linked list that is used for
-        // iteration.
-        Entry before, after;
-
-        Entry(int hash, Object key, Object value, Entry next) {
-            this.hash = hash;
-            this.key = key;
-            this.value = value;
-            this.next = next;
-        }
-
-        // Map.Entry Ops
-
-        public Object getKey() {
-            return key;
-        }
-
-        public Object getValue() {
-            return value;
-        }
-
-        public Object setValue(Object value) {
-            Object oldValue = this.value;
-            this.value = value;
-            return oldValue;
-        }
-
-        public boolean equals(Object o) {
-            if (!(o instanceof Map.Entry))
-                return false;
-            Map.Entry e = (Map.Entry)o;
-
-            return (key==null ? e.getKey()==null : key.equals(e.getKey())) &&
-               (value==null ? e.getValue()==null : value.equals(e.getValue()));
-        }
-
-        public int hashCode() {
-            return hash ^ (value==null ? 0 : value.hashCode());
-        }
-
-        public String toString() {
-            return key+"="+value;
-        }
-    }
-
-    // Types of Iterators
-    private static final int KEYS = 0;
-    private static final int VALUES = 1;
-    private static final int ENTRIES = 2;
-
-    private class HashIterator implements Iterator {
-        private Entry[] table = LinkedHashMap.this.table;
-        private Entry entry = null;
-        private Entry lastReturned = null;
-        private int type;
-
-        /**
-         * The modCount value that the iterator believes that the backing
-         * List should have.  If this expectation is violated, the iterator
-         * has detected concurrent modification.
-         */
-        private int expectedModCount = modCount;
-
-        HashIterator(int type) {
-            this.type = type;
-            this.entry = LinkedHashMap.this.header.after;
-        }
-
-        public boolean hasNext() {
-            return entry != header;
-        }
-
-        public Object next() {
-            if (modCount != expectedModCount)
-                throw new ConcurrentModificationException();
-            if (entry == LinkedHashMap.this.header)
-                throw new NoSuchElementException();
-
-            Entry e = lastReturned = entry;
-            entry = e.after;
-            return type == KEYS ? e.key : (type == VALUES ? e.value : e);
-        }
-
-        public void remove() {
-            if (lastReturned == null)
-                throw new IllegalStateException();
-            if (modCount != expectedModCount)
-                throw new ConcurrentModificationException();
-
-            Entry[] tab = LinkedHashMap.this.table;
-            int index = (lastReturned.hash & 0x7FFFFFFF) % tab.length;
-
-            for (Entry e = tab[index], prev = null; e != null;
-                 prev = e, e = e.next) {
-                if (e == lastReturned) {
-                    modCount++;
-                    expectedModCount++;
-                    if (prev == null)
-                        tab[index] = e.next;
-                    else
-                        prev.next = e.next;
-                    count--;
-                    listRemove(e);
-                    lastReturned = null;
-                    return;
-                }
-            }
-            throw new ConcurrentModificationException();
-        }
-    }
-
-    /**
-     * Save the state of the LinkedHashMap to a stream (i.e., serialize it).
-     * The objects will be written out in the order they are linked
-     * in the list.
-     */
-    private void writeObject(java.io.ObjectOutputStream s)
-        throws IOException
-    {
-        // Write out the threshold, loadfactor, and any hidden stuff
-        s.defaultWriteObject();
-
-        // Write out number of buckets
-        s.writeInt(table.length);
-
-        // Write out size (number of Mappings)
-        s.writeInt(count);
-
-        // Write out keys and values (alternating)
-        for (Entry e = header.after; e != header; e = e.after) {
-            s.writeObject(e.key);
-            s.writeObject(e.value);
-        }
-    }
-
-    /**
-     * Reconstitute the LinkedHashMap from a stream (i.e., deserialize it).
-     */
-    private void readObject(java.io.ObjectInputStream s)
-         throws IOException, ClassNotFoundException
-    {
-        // Read in the threshold, loadfactor, and any hidden stuff
-        s.defaultReadObject();
-
-        // Read in number of buckets and allocate the bucket array;
-        int numBuckets = s.readInt();
-        table = new Entry[numBuckets];
-        header = new Entry(-1, null, null, null);
-        header.before = header;
-        header.after = header;
-
-        // Read in size (number of Mappings)
-        int size = s.readInt();
-
-        // Read the keys and values, and put the mappings in the LinkedHashMap
-        for (int i=0; i<size; i++) {
-            Object key = s.readObject();
-            Object value = s.readObject();
-            put(key, value);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/LocalVariableImpl.java b/ojluni/src/main/java/com/sun/tools/jdi/LocalVariableImpl.java
deleted file mode 100755
index 0914eb1..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/LocalVariableImpl.java
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package com.sun.tools.jdi;
-import com.sun.jdi.*;
-
-public class LocalVariableImpl extends MirrorImpl
-                               implements LocalVariable, ValueContainer
-{
-    private final Method method;
-    private final int slot;
-    private final Location scopeStart;
-    private final Location scopeEnd;
-    private final String name;
-    private final String signature;
-    private String genericSignature = null;
-
-    LocalVariableImpl(VirtualMachine vm, Method method,
-                      int slot, Location scopeStart, Location scopeEnd,
-                      String name, String signature,
-                      String genericSignature) {
-        super(vm);
-        this.method = method;
-        this.slot = slot;
-        this.scopeStart = scopeStart;
-        this.scopeEnd = scopeEnd;
-        this.name = name;
-        this.signature = signature;
-        if (genericSignature != null && genericSignature.length() > 0) {
-            this.genericSignature = genericSignature;
-        } else {
-            // The Spec says to return null for non-generic types
-            this.genericSignature = null;
-        }
-    }
-
-    public boolean equals(Object obj) {
-        if ((obj != null) && (obj instanceof LocalVariableImpl)) {
-            LocalVariableImpl other = (LocalVariableImpl)obj;
-            return ((slot() == other.slot()) &&
-                    (scopeStart != null) &&
-                    (scopeStart.equals(other.scopeStart)) &&
-                    (super.equals(obj)));
-        } else {
-            return false;
-        }
-    }
-
-    public int hashCode() {
-        /*
-         * TO DO: Better hash code
-         */
-        return ((scopeStart.hashCode() << 4) + slot());
-    }
-
-    public int compareTo(LocalVariable object) {
-        LocalVariableImpl other = (LocalVariableImpl)object;
-
-        int rc = scopeStart.compareTo(other.scopeStart);
-        if (rc == 0) {
-            rc = slot() - other.slot();
-        }
-        return rc;
-    }
-
-    public String name() {
-        return name;
-    }
-
-    /**
-     * @return a text representation of the declared type
-     * of this variable.
-     */
-    public String typeName() {
-        JNITypeParser parser = new JNITypeParser(signature);
-        return parser.typeName();
-    }
-
-    public Type type() throws ClassNotLoadedException {
-        return findType(signature());
-    }
-
-    public Type findType(String signature) throws ClassNotLoadedException {
-        ReferenceTypeImpl enclosing = (ReferenceTypeImpl)method.declaringType();
-        return enclosing.findType(signature);
-    }
-
-    public String signature() {
-        return signature;
-    }
-
-    public String genericSignature() {
-        return genericSignature;
-    }
-
-    public boolean isVisible(StackFrame frame) {
-        validateMirror(frame);
-        Method frameMethod = frame.location().method();
-
-        if (!frameMethod.equals(method)) {
-            throw new IllegalArgumentException(
-                       "frame method different than variable's method");
-        }
-
-        // this is here to cover the possibility that we will
-        // allow LocalVariables for native methods.  If we do
-        // so we will have to re-examinine this.
-        if (frameMethod.isNative()) {
-            return false;
-        }
-
-        return ((scopeStart.compareTo(frame.location()) <= 0)
-             && (scopeEnd.compareTo(frame.location()) >= 0));
-    }
-
-    public boolean isArgument() {
-        try {
-            MethodImpl method = (MethodImpl)scopeStart.method();
-            return (slot < method.argSlotCount());
-        } catch (AbsentInformationException e) {
-            // If this variable object exists, there shouldn't be absent info
-            throw new InternalException();
-        }
-    }
-
-    int slot() {
-        return slot;
-    }
-
-    /*
-     * Compilers/VMs can have byte code ranges for variables of the
-     * same names that overlap. This is because the byte code ranges
-     * aren't necessarily scopes; they may have more to do with the
-     * lifetime of the variable's slot, depending on implementation.
-     *
-     * This method determines whether this variable hides an
-     * identically named variable; ie, their byte code ranges overlap
-     * this one starts after the given one. If it returns true this
-     * variable should be preferred when looking for a single variable
-     * with its name when both variables are visible.
-     */
-    boolean hides(LocalVariable other) {
-        LocalVariableImpl otherImpl = (LocalVariableImpl)other;
-        if (!method.equals(otherImpl.method) ||
-            !name.equals(otherImpl.name)) {
-            return false;
-        } else {
-            return (scopeStart.compareTo(otherImpl.scopeStart) > 0);
-        }
-    }
-
-    public String toString() {
-       return name() + " in " + method.toString() +
-              "@" + scopeStart.toString();
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/LocationImpl.java b/ojluni/src/main/java/com/sun/tools/jdi/LocationImpl.java
deleted file mode 100755
index 5922dc0..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/LocationImpl.java
+++ /dev/null
@@ -1,227 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package com.sun.tools.jdi;
-
-import com.sun.jdi.*;
-
-import java.util.*;
-
-public class LocationImpl extends MirrorImpl implements Location {
-    private final ReferenceTypeImpl declaringType;
-    private Method method;
-    private long methodRef;
-    private long codeIndex;
-    private LineInfo baseLineInfo = null;
-    private LineInfo otherLineInfo = null;
-
-    LocationImpl(VirtualMachine vm,
-                 Method method, long codeIndex) {
-        super(vm);
-
-        this.method = method;
-        this.codeIndex = method.isNative()? -1 : codeIndex;
-        this.declaringType = (ReferenceTypeImpl)method.declaringType();
-    }
-
-    /*
-     * This constructor allows lazy creation of the method mirror. This
-     * can be a performance savings if the method mirror does not yet
-     * exist.
-     */
-    LocationImpl(VirtualMachine vm, ReferenceTypeImpl declaringType,
-                 long methodRef, long codeIndex) {
-        super(vm);
-
-        this.method = null;
-        this.codeIndex = codeIndex;
-        this.declaringType = declaringType;
-        this.methodRef = methodRef;
-    }
-
-    public boolean equals(Object obj) {
-        if ((obj != null) && (obj instanceof Location)) {
-            Location other = (Location)obj;
-            return (method().equals(other.method())) &&
-                   (codeIndex() == other.codeIndex()) &&
-                   super.equals(obj);
-        } else {
-            return false;
-        }
-    }
-
-    public int hashCode() {
-        /*
-         * TO DO: better hash code?
-         */
-        return method().hashCode() + (int)codeIndex();
-    }
-
-    public int compareTo(Location object) {
-        LocationImpl other = (LocationImpl)object;
-        int rc = method().compareTo(other.method());
-        if (rc == 0) {
-            long diff = codeIndex() - other.codeIndex();
-            if (diff < 0)
-                return -1;
-            else if (diff > 0)
-                return 1;
-            else
-                return 0;
-        }
-        return rc;
-    }
-
-    public ReferenceType declaringType() {
-        return declaringType;
-    }
-
-    public Method method() {
-        if (method == null) {
-            method = declaringType.getMethodMirror(methodRef);
-            if (method.isNative()) {
-                codeIndex = -1;
-            }
-        }
-        return method;
-    }
-
-    public long codeIndex() {
-        method();  // be sure information is up-to-date
-        return codeIndex;
-    }
-
-    LineInfo getBaseLineInfo(SDE.Stratum stratum) {
-        LineInfo lineInfo;
-
-        /* check if there is cached info to use */
-        if (baseLineInfo != null) {
-            return baseLineInfo;
-        }
-
-        /* compute the line info */
-        MethodImpl methodImpl = (MethodImpl)method();
-        lineInfo = methodImpl.codeIndexToLineInfo(stratum,
-                                                  codeIndex());
-
-        /* cache it */
-        addBaseLineInfo(lineInfo);
-
-        return lineInfo;
-    }
-
-    LineInfo getLineInfo(SDE.Stratum stratum) {
-        LineInfo lineInfo;
-
-        /* base stratum is done slighly differently */
-        if (stratum.isJava()) {
-            return getBaseLineInfo(stratum);
-        }
-
-        /* check if there is cached info to use */
-        lineInfo = otherLineInfo; // copy because of concurrency
-        if (lineInfo != null &&
-                           stratum.id().equals(lineInfo.liStratum())) {
-            return lineInfo;
-        }
-
-        int baseLineNumber = lineNumber(SDE.BASE_STRATUM_NAME);
-        SDE.LineStratum lineStratum =
-                  stratum.lineStratum(declaringType, baseLineNumber);
-
-        if (lineStratum != null && lineStratum.lineNumber() != -1) {
-            lineInfo = new StratumLineInfo(stratum.id(),
-                                           lineStratum.lineNumber(),
-                                           lineStratum.sourceName(),
-                                           lineStratum.sourcePath());
-        } else {
-            /* find best match */
-            MethodImpl methodImpl = (MethodImpl)method();
-            lineInfo = methodImpl.codeIndexToLineInfo(stratum,
-                                                      codeIndex());
-        }
-
-        /* cache it */
-        addStratumLineInfo(lineInfo);
-
-        return lineInfo;
-    }
-
-    void addStratumLineInfo(LineInfo lineInfo) {
-        otherLineInfo = lineInfo;
-    }
-
-    void addBaseLineInfo(LineInfo lineInfo) {
-        baseLineInfo = lineInfo;
-    }
-
-    public String sourceName() throws AbsentInformationException {
-        return sourceName(vm.getDefaultStratum());
-    }
-
-    public String sourceName(String stratumID)
-                               throws AbsentInformationException {
-        return sourceName(declaringType.stratum(stratumID));
-    }
-
-    String sourceName(SDE.Stratum stratum)
-                               throws AbsentInformationException {
-        return getLineInfo(stratum).liSourceName();
-    }
-
-    public String sourcePath() throws AbsentInformationException {
-        return sourcePath(vm.getDefaultStratum());
-    }
-
-    public String sourcePath(String stratumID)
-                               throws AbsentInformationException {
-        return sourcePath(declaringType.stratum(stratumID));
-    }
-
-    String sourcePath(SDE.Stratum stratum)
-                               throws AbsentInformationException {
-        return getLineInfo(stratum).liSourcePath();
-    }
-
-    public int lineNumber() {
-        return lineNumber(vm.getDefaultStratum());
-    }
-
-    public int lineNumber(String stratumID) {
-        return lineNumber(declaringType.stratum(stratumID));
-    }
-
-    int lineNumber(SDE.Stratum stratum) {
-        return getLineInfo(stratum).liLineNumber();
-    }
-
-    public String toString() {
-        if (lineNumber() == -1) {
-            return method().toString() + "+" + codeIndex();
-        } else {
-            return declaringType().name() + ":" + lineNumber();
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/LockObject.java b/ojluni/src/main/java/com/sun/tools/jdi/LockObject.java
deleted file mode 100755
index 250a8ca..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/LockObject.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (c) 1998, 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.tools.jdi;
-
-import com.sun.jdi.*;
-
-/**
- * This class is used by the back end to do thread synchronization.
- * We don't want to use java.lang.Object(s) for two reasons: we can't
- * filter them out, and this class should use less heap.
- */
-
-public class LockObject
-{
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/LongTypeImpl.java b/ojluni/src/main/java/com/sun/tools/jdi/LongTypeImpl.java
deleted file mode 100755
index 5854d5e..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/LongTypeImpl.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (c) 1998, 1999, 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.tools.jdi;
-
-import com.sun.jdi.*;
-
-public class LongTypeImpl extends PrimitiveTypeImpl implements LongType {
-    LongTypeImpl(VirtualMachine vm) {
-        super(vm);
-    }
-
-
-    public String signature() {
-        return String.valueOf((char)JDWP.Tag.LONG);
-    }
-
-    PrimitiveValue convert(PrimitiveValue value) throws InvalidTypeException {
-        return vm.mirrorOf(((PrimitiveValueImpl)value).checkedLongValue());
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/LongValueImpl.java b/ojluni/src/main/java/com/sun/tools/jdi/LongValueImpl.java
deleted file mode 100755
index e2c04bb..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/LongValueImpl.java
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package com.sun.tools.jdi;
-
-import com.sun.jdi.*;
-
-public class LongValueImpl extends PrimitiveValueImpl
-                           implements LongValue {
-    private long value;
-
-    LongValueImpl(VirtualMachine aVm,long aValue) {
-        super(aVm);
-
-        value = aValue;
-    }
-
-    public boolean equals(Object obj) {
-        if ((obj != null) && (obj instanceof LongValue)) {
-            return (value == ((LongValue)obj).value()) &&
-                   super.equals(obj);
-        } else {
-            return false;
-        }
-    }
-
-    public int hashCode() {
-        /*
-         * TO DO: Better hash code
-         */
-        return intValue();
-    }
-
-    public int compareTo(LongValue obj) {
-        long other = obj.value();
-        if (value() < other) {
-            return -1;
-        } else if (value() == other) {
-            return 0;
-        } else {
-            return 1;
-        }
-    }
-
-    public Type type() {
-        return vm.theLongType();
-    }
-
-    public long value() {
-        return value;
-    }
-
-    public boolean booleanValue() {
-        return(value == 0)?false:true;
-    }
-
-    public byte byteValue() {
-        return(byte)value;
-    }
-
-    public char charValue() {
-        return(char)value;
-    }
-
-    public short shortValue() {
-        return(short)value;
-    }
-
-    public int intValue() {
-        return(int)value;
-    }
-
-    public long longValue() {
-        return(long)value;
-    }
-
-    public float floatValue() {
-        return(float)value;
-    }
-
-    public double doubleValue() {
-        return(double)value;
-    }
-
-    byte checkedByteValue() throws InvalidTypeException {
-        if ((value > Byte.MAX_VALUE) || (value < Byte.MIN_VALUE)) {
-            throw new InvalidTypeException("Can't convert " + value + " to byte");
-        } else {
-            return super.checkedByteValue();
-        }
-    }
-
-    char checkedCharValue() throws InvalidTypeException {
-        if ((value > Character.MAX_VALUE) || (value < Character.MIN_VALUE)) {
-            throw new InvalidTypeException("Can't convert " + value + " to char");
-        } else {
-            return super.checkedCharValue();
-        }
-    }
-
-    short checkedShortValue() throws InvalidTypeException {
-        if ((value > Short.MAX_VALUE) || (value < Short.MIN_VALUE)) {
-            throw new InvalidTypeException("Can't convert " + value + " to short");
-        } else {
-            return super.checkedShortValue();
-        }
-    }
-
-    int checkedIntValue() throws InvalidTypeException {
-        if ((value > Integer.MAX_VALUE) || (value < Integer.MIN_VALUE)) {
-            throw new InvalidTypeException("Can't convert " + value + " to int");
-        } else {
-            return super.checkedIntValue();
-        }
-    }
-
-    public String toString() {
-        return "" + value;
-    }
-
-    byte typeValueKey() {
-        return JDWP.Tag.LONG;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/META-INF/services/com.sun.jdi.connect.Connector b/ojluni/src/main/java/com/sun/tools/jdi/META-INF/services/com.sun.jdi.connect.Connector
deleted file mode 100755
index e9ecb5e..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/META-INF/services/com.sun.jdi.connect.Connector
+++ /dev/null
@@ -1,38 +0,0 @@
-#
-# Copyright (c) 2003, 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.
-# 
-
-#
-# List all Sun provided connector providers here. If there
-# are providers that are only available on a particular OS
-# then prefix the line with #[OS] and they will automatically
-# uncommented by the build process - see make/jpda/front/Makefile.
-#
-com.sun.tools.jdi.SunCommandLineLauncher
-com.sun.tools.jdi.RawCommandLineLauncher
-com.sun.tools.jdi.SocketAttachingConnector
-com.sun.tools.jdi.SocketListeningConnector
-#[windows]com.sun.tools.jdi.SharedMemoryAttachingConnector
-#[windows]com.sun.tools.jdi.SharedMemoryListeningConnector
-com.sun.tools.jdi.ProcessAttachingConnector
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/META-INF/services/com.sun.jdi.connect.spi.TransportService b/ojluni/src/main/java/com/sun/tools/jdi/META-INF/services/com.sun.jdi.connect.spi.TransportService
deleted file mode 100755
index 603dcc9..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/META-INF/services/com.sun.jdi.connect.spi.TransportService
+++ /dev/null
@@ -1,30 +0,0 @@
-#
-# Copyright (c) 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.
-# 
-
-#
-# List any additional Sun provided transport services here.
-# If any transport services are OS specific then prefix the line
-# with #[OS] and they will automatically be uncommented in the
-# build process - see make/jpda/front/Makefile.
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/MethodImpl.java b/ojluni/src/main/java/com/sun/tools/jdi/MethodImpl.java
deleted file mode 100755
index d0d4c87..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/MethodImpl.java
+++ /dev/null
@@ -1,399 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package com.sun.tools.jdi;
-
-import com.sun.jdi.*;
-
-import java.util.List;
-import java.util.Iterator;
-import java.util.ArrayList;
-import java.util.Comparator;
-
-public abstract class MethodImpl extends TypeComponentImpl
-    implements Method {
-    private JNITypeParser signatureParser;
-    abstract int argSlotCount() throws AbsentInformationException;
-
-    abstract List<Location> allLineLocations(SDE.Stratum stratum,
-                                   String sourceName)
-                           throws AbsentInformationException;
-
-    abstract List<Location> locationsOfLine(SDE.Stratum stratum,
-                                  String sourceName,
-                                  int lineNumber)
-                           throws AbsentInformationException;
-
-    MethodImpl(VirtualMachine vm, ReferenceTypeImpl declaringType,
-               long ref,
-               String name, String signature,
-               String genericSignature, int modifiers) {
-        super(vm, declaringType, ref, name, signature,
-              genericSignature, modifiers);
-        signatureParser = new JNITypeParser(signature);
-    }
-
-    static MethodImpl createMethodImpl(VirtualMachine vm,
-                                       ReferenceTypeImpl declaringType,
-                                       long ref,
-                                       String name,
-                                       String signature,
-                                       String genericSignature,
-                                       int modifiers) {
-        if ((modifiers &
-             (VMModifiers.NATIVE | VMModifiers.ABSTRACT)) != 0) {
-            return new NonConcreteMethodImpl(vm, declaringType, ref,
-                                             name, signature,
-                                             genericSignature,
-                                             modifiers);
-        } else {
-            return new ConcreteMethodImpl(vm, declaringType, ref,
-                                          name, signature,
-                                          genericSignature,
-                                          modifiers);
-        }
-    }
-
-    public boolean equals(Object obj) {
-        if ((obj != null) && (obj instanceof MethodImpl)) {
-            MethodImpl other = (MethodImpl)obj;
-            return (declaringType().equals(other.declaringType())) &&
-                   (ref() == other.ref()) &&
-                   super.equals(obj);
-        } else {
-            return false;
-        }
-    }
-
-    public int hashCode() {
-        return (int)ref();
-    }
-
-    public final List<Location> allLineLocations()
-                           throws AbsentInformationException {
-        return allLineLocations(vm.getDefaultStratum(), null);
-    }
-
-    public List<Location> allLineLocations(String stratumID,
-                                 String sourceName)
-                           throws AbsentInformationException {
-        return allLineLocations(declaringType.stratum(stratumID),
-                                sourceName);
-    }
-
-    public final List<Location> locationsOfLine(int lineNumber)
-                           throws AbsentInformationException {
-        return locationsOfLine(vm.getDefaultStratum(),
-                               null, lineNumber);
-    }
-
-    public List<Location> locationsOfLine(String stratumID,
-                                String sourceName,
-                                int lineNumber)
-                           throws AbsentInformationException {
-        return locationsOfLine(declaringType.stratum(stratumID),
-                               sourceName, lineNumber);
-    }
-
-    LineInfo codeIndexToLineInfo(SDE.Stratum stratum,
-                                 long codeIndex) {
-        if (stratum.isJava()) {
-            return new BaseLineInfo(-1, declaringType);
-        } else {
-            return new StratumLineInfo(stratum.id(), -1,
-                                       null, null);
-        }
-    }
-
-    /**
-     * @return a text representation of the declared return type
-     * of this method.
-     */
-    public String returnTypeName() {
-        return signatureParser.typeName();
-    }
-
-    private String returnSignature() {
-        return signatureParser.signature();
-    }
-
-    public Type returnType() throws ClassNotLoadedException {
-        return findType(returnSignature());
-    }
-
-    public Type findType(String signature) throws ClassNotLoadedException {
-        ReferenceTypeImpl enclosing = (ReferenceTypeImpl)declaringType();
-        return enclosing.findType(signature);
-    }
-
-    public List<String> argumentTypeNames() {
-        return signatureParser.argumentTypeNames();
-    }
-
-    public List<String> argumentSignatures() {
-        return signatureParser.argumentSignatures();
-    }
-
-    Type argumentType(int index) throws ClassNotLoadedException {
-        ReferenceTypeImpl enclosing = (ReferenceTypeImpl)declaringType();
-        String signature = argumentSignatures().get(index);
-        return enclosing.findType(signature);
-    }
-
-    public List<Type> argumentTypes() throws ClassNotLoadedException {
-        int size = argumentSignatures().size();
-        ArrayList<Type> types = new ArrayList<Type>(size);
-        for (int i = 0; i < size; i++) {
-            Type type = argumentType(i);
-            types.add(type);
-        }
-
-        return types;
-    }
-
-    public int compareTo(Method method) {
-        ReferenceTypeImpl declaringType = (ReferenceTypeImpl)declaringType();
-        int rc = declaringType.compareTo(method.declaringType());
-        if (rc == 0) {
-            rc = declaringType.indexOf(this) -
-                    declaringType.indexOf(method);
-        }
-        return rc;
-    }
-
-    public boolean isAbstract() {
-        return isModifierSet(VMModifiers.ABSTRACT);
-    }
-
-    public boolean isSynchronized() {
-        return isModifierSet(VMModifiers.SYNCHRONIZED);
-    }
-
-    public boolean isNative() {
-        return isModifierSet(VMModifiers.NATIVE);
-    }
-
-    public boolean isVarArgs() {
-        return isModifierSet(VMModifiers.VARARGS);
-    }
-
-    public boolean isBridge() {
-        return isModifierSet(VMModifiers.BRIDGE);
-    }
-
-    public boolean isConstructor() {
-        return name().equals("<init>");
-    }
-
-    public boolean isStaticInitializer() {
-        return name().equals("<clinit>");
-    }
-
-    public boolean isObsolete() {
-        try {
-            return JDWP.Method.IsObsolete.process(vm,
-                                    declaringType, ref).isObsolete;
-        } catch (JDWPException exc) {
-            throw exc.toJDIException();
-        }
-    }
-
-
-    /*
-     * A container class for the return value to allow
-     * proper type-checking.
-     */
-    class ReturnContainer implements ValueContainer {
-        ReturnContainer() {
-        }
-        public Type type() throws ClassNotLoadedException {
-            return returnType();
-        }
-        public String typeName(){
-            return returnTypeName();
-        }
-        public String signature() {
-            return returnSignature(); //type().signature();
-        }
-        public Type findType(String signature) throws ClassNotLoadedException {
-            return MethodImpl.this.findType(signature);
-        }
-    }
-    ReturnContainer retValContainer = null;
-    ReturnContainer getReturnValueContainer() {
-        if (retValContainer == null) {
-            retValContainer = new ReturnContainer();
-        }
-        return retValContainer;
-    }
-
-    /*
-     * A container class for the argument to allow
-     * proper type-checking.
-     */
-    class ArgumentContainer implements ValueContainer {
-        int index;
-
-        ArgumentContainer(int index) {
-            this.index = index;
-        }
-        public Type type() throws ClassNotLoadedException {
-            return argumentType(index);
-        }
-        public String typeName(){
-            return argumentTypeNames().get(index);
-        }
-        public String signature() {
-            return argumentSignatures().get(index);
-        }
-        public Type findType(String signature) throws ClassNotLoadedException {
-            return MethodImpl.this.findType(signature);
-        }
-    }
-
-    /*
-     * This is a var args method.  Thus, its last param is an
-     * array. If the method has n params, then:
-     * 1.  If there are n args and the last is the same type as the type of
-     *     the last param, do nothing.  IE, a String[]
-     *     can be passed to a String...
-     * 2.  If there are >= n arguments and for each arg whose number is >= n,
-     *     the arg type is 'compatible' with the component type of
-     *     the last param, then do
-     *     - create an array of the type of the last param
-     *     - put the n, ... args into this array.
-     *       We might have to do conversions here.
-     *     - put this array into arguments(n)
-     *     - delete arguments(n+1), ...
-     * NOTE that this might modify the input list.
-     */
-    void handleVarArgs(List<Value> arguments)
-        throws ClassNotLoadedException, InvalidTypeException {
-        List<Type> paramTypes = this.argumentTypes();
-        ArrayType lastParamType = (ArrayType)paramTypes.get(paramTypes.size() - 1);
-        Type componentType = lastParamType.componentType();
-        int argCount = arguments.size();
-        int paramCount = paramTypes.size();
-        if (argCount < paramCount - 1) {
-            // Error; will be caught later.
-            return;
-        }
-        if (argCount == paramCount - 1) {
-            // It is ok to pass 0 args to the var arg.
-            // We have to gen a 0 length array.
-            ArrayReference argArray = lastParamType.newInstance(0);
-            arguments.add(argArray);
-            return;
-        }
-        Value nthArgValue = arguments.get(paramCount - 1);
-        if (nthArgValue == null) {
-            return;
-        }
-        Type nthArgType = nthArgValue.type();
-        if (nthArgType instanceof ArrayTypeImpl) {
-            if (argCount == paramCount &&
-                ((ArrayTypeImpl)nthArgType).isAssignableTo(lastParamType)) {
-                /*
-                 * This is case 1.  A compatible array is being passed to the
-                 * var args array param.  We don't have to do anything.
-                 */
-                return;
-            }
-        }
-
-        /*
-         * Case 2.  We have to verify that the n, n+1, ... args are compatible
-         * with componentType, and do conversions if necessary and create
-         * an array of componentType to hold these possibly converted values.
-         */
-        int count = argCount - paramCount + 1;
-        ArrayReference argArray = lastParamType.newInstance(count);
-
-        /*
-         * This will copy arguments(paramCount - 1) ... to argArray(0) ...
-         * doing whatever conversions are needed!  It will throw an
-         * exception if an incompatible arg is encountered
-         */
-        argArray.setValues(0, arguments, paramCount - 1, count);
-        arguments.set(paramCount - 1, argArray);
-
-        /*
-         * Remove the excess args
-         */
-        for (int ii = paramCount; ii < argCount; ii++) {
-            arguments.remove(paramCount);
-        }
-        return;
-    }
-
-    /*
-     * The output list will be different than the input list.
-     */
-    List<Value> validateAndPrepareArgumentsForInvoke(List<? extends Value> origArguments)
-                         throws ClassNotLoadedException, InvalidTypeException {
-
-        List<Value> arguments = new ArrayList<Value>(origArguments);
-        if (isVarArgs()) {
-            handleVarArgs(arguments);
-        }
-
-        int argSize = arguments.size();
-
-        JNITypeParser parser = new JNITypeParser(signature());
-        List signatures = parser.argumentSignatures();
-
-        if (signatures.size() != argSize) {
-            throw new IllegalArgumentException("Invalid argument count: expected " +
-                                               signatures.size() + ", received " +
-                                               arguments.size());
-        }
-
-        for (int i = 0; i < argSize; i++) {
-            Value value = arguments.get(i);
-            value = ValueImpl.prepareForAssignment(value,
-                                                   new ArgumentContainer(i));
-            arguments.set(i, value);
-        }
-        return arguments;
-    }
-
-    public String toString() {
-        StringBuffer sb = new StringBuffer();
-        sb.append(declaringType().name());
-        sb.append(".");
-        sb.append(name());
-        sb.append("(");
-        boolean first = true;
-        for (String name : argumentTypeNames()) {
-            if (!first) {
-                sb.append(", ");
-            }
-            sb.append(name);
-            first = false;
-        }
-        sb.append(")");
-        return sb.toString();
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/MirrorImpl.java b/ojluni/src/main/java/com/sun/tools/jdi/MirrorImpl.java
deleted file mode 100755
index 9a68f23..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/MirrorImpl.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * Copyright (c) 1998, 1999, 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.tools.jdi;
-
-import com.sun.jdi.*;
-import java.util.Collection;
-import java.util.Iterator;
-
-abstract class MirrorImpl extends Object implements Mirror {
-
-    protected VirtualMachineImpl vm;
-
-    MirrorImpl(VirtualMachine aVm) {
-        super();
-
-        // Yes, its a bit of a hack. But by doing it this
-        // way, this is the only place we have to change
-        // typing to substitute a new impl.
-        vm = (VirtualMachineImpl)aVm;
-    }
-
-    public VirtualMachine virtualMachine() {
-        return vm;
-    }
-
-    public boolean equals(Object obj) {
-        if ((obj != null) && (obj instanceof Mirror)) {
-            Mirror other = (Mirror)obj;
-            return vm.equals(other.virtualMachine());
-        } else {
-            return false;
-        }
-    }
-
-    public int hashCode() {
-        return vm.hashCode();
-    }
-
-    /**
-     * Throw NullPointerException on null mirror.
-     * Throw VMMismatchException on wrong VM.
-     */
-    void validateMirror(Mirror mirror) {
-        if (!vm.equals(mirror.virtualMachine())) {
-            throw new VMMismatchException(mirror.toString());
-        }
-    }
-
-    /**
-     * Allow null mirror.
-     * Throw VMMismatchException on wrong VM.
-     */
-    void validateMirrorOrNull(Mirror mirror) {
-        if ((mirror != null) && !vm.equals(mirror.virtualMachine())) {
-            throw new VMMismatchException(mirror.toString());
-        }
-    }
-
-    /**
-     * Throw NullPointerException on null mirrors.
-     * Throw VMMismatchException on wrong VM.
-     */
-    void validateMirrors(Collection mirrors) {
-        Iterator iter = mirrors.iterator();
-        while (iter.hasNext()) {
-            MirrorImpl mirror = (MirrorImpl)iter.next();
-            if (!vm.equals(mirror.vm)) {
-                throw new VMMismatchException(mirror.toString());
-            }
-        }
-    }
-    /**
-     * Allow null mirrors.
-     * Throw VMMismatchException on wrong VM.
-     */
-    void validateMirrorsOrNulls(Collection mirrors) {
-        Iterator iter = mirrors.iterator();
-        while (iter.hasNext()) {
-            MirrorImpl mirror = (MirrorImpl)iter.next();
-            if ((mirror != null) && !vm.equals(mirror.vm)) {
-                throw new VMMismatchException(mirror.toString());
-            }
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/MonitorInfoImpl.java b/ojluni/src/main/java/com/sun/tools/jdi/MonitorInfoImpl.java
deleted file mode 100755
index 9ebc059..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/MonitorInfoImpl.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-package com.sun.tools.jdi;
-
-import com.sun.jdi.*;
-
-public class MonitorInfoImpl extends MirrorImpl
-    implements MonitorInfo, ThreadListener {
-
-    /* Once false, monitorInfo should not be used.
-     * access synchronized on (vm.state())
-     */
-    private boolean isValid = true;
-
-    ObjectReference monitor;
-    ThreadReference thread;
-    int  stack_depth;
-
-    MonitorInfoImpl(VirtualMachine vm, ObjectReference mon,
-                    ThreadReferenceImpl thread, int dpth) {
-        super(vm);
-        this.monitor = mon;
-        this.thread = thread;
-        this.stack_depth = dpth;
-        thread.addListener(this);
-    }
-
-
-    /*
-     * ThreadListener implementation
-     * Must be synchronized since we must protect against
-     * sending defunct (isValid == false) stack ids to the back-end.
-     */
-    public boolean threadResumable(ThreadAction action) {
-        synchronized (vm.state()) {
-            if (isValid) {
-                isValid = false;
-                return false;   /* remove this stack frame as a listener */
-            } else {
-                throw new InternalException(
-                                  "Invalid stack frame thread listener");
-            }
-        }
-    }
-
-    private void validateMonitorInfo() {
-        if (!isValid) {
-            throw new InvalidStackFrameException("Thread has been resumed");
-        }
-    }
-
-    public ObjectReference monitor() {
-        validateMonitorInfo();
-        return monitor;
-    }
-
-    public int stackDepth() {
-        validateMonitorInfo();
-        return stack_depth;
-    }
-
-    public ThreadReference thread() {
-        validateMonitorInfo();
-        return thread;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/NonConcreteMethodImpl.java b/ojluni/src/main/java/com/sun/tools/jdi/NonConcreteMethodImpl.java
deleted file mode 100755
index 9fc7ddd..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/NonConcreteMethodImpl.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * Copyright (c) 2000, 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.
- */
-
-package com.sun.tools.jdi;
-
-import com.sun.jdi.*;
-
-import java.util.List;
-import java.util.Map;
-import java.util.Iterator;
-import java.util.ListIterator;
-import java.util.HashMap;
-import java.util.ArrayList;
-import java.util.Collections;
-
-/**
- * Represents non-concrete (that is, native or abstract) methods.
- * Private to MethodImpl.
- */
-public class NonConcreteMethodImpl extends MethodImpl {
-
-    private Location location = null;
-
-    NonConcreteMethodImpl(VirtualMachine vm,
-                          ReferenceTypeImpl declaringType,
-                          long ref,
-                          String name, String signature,
-                          String genericSignature, int modifiers) {
-
-        // The generic signature is set when this is created
-        super(vm, declaringType, ref, name, signature,
-              genericSignature, modifiers);
-    }
-
-    public Location location() {
-        if (isAbstract()) {
-            return null;
-        }
-        if (location == null) {
-            location = new LocationImpl(vm, this, -1);
-        }
-        return location;
-    }
-
-    public List<Location> allLineLocations(String stratumID,
-                                 String sourceName) {
-        return new ArrayList<Location>(0);
-    }
-
-    public List<Location> allLineLocations(SDE.Stratum stratum,
-                                 String sourceName) {
-        return new ArrayList<Location>(0);
-    }
-
-    public List<Location> locationsOfLine(String stratumID,
-                                String sourceName,
-                                int lineNumber) {
-        return new ArrayList<Location>(0);
-    }
-
-    public List<Location> locationsOfLine(SDE.Stratum stratum,
-                                String sourceName,
-                                int lineNumber) {
-        return new ArrayList<Location>(0);
-    }
-
-    public Location locationOfCodeIndex(long codeIndex) {
-        return null;
-    }
-
-    public List<LocalVariable> variables() throws AbsentInformationException {
-        throw new AbsentInformationException();
-    }
-
-    public List<LocalVariable> variablesByName(String name) throws AbsentInformationException {
-        throw new AbsentInformationException();
-    }
-
-    public List<LocalVariable> arguments() throws AbsentInformationException {
-        throw new AbsentInformationException();
-    }
-
-    public byte[] bytecodes() {
-        return new byte[0];
-    }
-
-    int argSlotCount() throws AbsentInformationException {
-        throw new InternalException("should not get here");
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/ObjectReferenceImpl.java b/ojluni/src/main/java/com/sun/tools/jdi/ObjectReferenceImpl.java
deleted file mode 100755
index 1c2a8cb..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/ObjectReferenceImpl.java
+++ /dev/null
@@ -1,603 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package com.sun.tools.jdi;
-
-import com.sun.jdi.*;
-
-import java.util.*;
-import java.util.ArrayList;
-
-public class ObjectReferenceImpl extends ValueImpl
-             implements ObjectReference, VMListener {
-
-    protected long ref;
-    private ReferenceType type = null;
-    private int gcDisableCount = 0;
-    boolean addedListener = false;
-
-    // This is cached only while the VM is suspended
-    protected static class Cache {
-        JDWP.ObjectReference.MonitorInfo monitorInfo = null;
-    }
-
-    private static final Cache noInitCache = new Cache();
-    private static final Cache markerCache = new Cache();
-    private Cache cache = noInitCache;
-
-    private void disableCache() {
-        synchronized (vm.state()) {
-            cache = null;
-        }
-    }
-
-    private void enableCache() {
-        synchronized (vm.state()) {
-            cache = markerCache;
-        }
-    }
-
-    // Override in subclasses
-    protected Cache newCache() {
-        return new Cache();
-    }
-
-    protected Cache getCache() {
-        synchronized (vm.state()) {
-            if (cache == noInitCache) {
-                if (vm.state().isSuspended()) {
-                    // Set cache now, otherwise newly created objects are
-                    // not cached until resuspend
-                    enableCache();
-                } else {
-                    disableCache();
-                }
-            }
-            if (cache == markerCache) {
-                cache = newCache();
-            }
-            return cache;
-        }
-    }
-
-    // Return the ClassTypeImpl upon which to invoke a method.
-    // By default it is our very own referenceType() but subclasses
-    // can override.
-    protected ClassTypeImpl invokableReferenceType(Method method) {
-        return (ClassTypeImpl)referenceType();
-    }
-
-    ObjectReferenceImpl(VirtualMachine aVm,long aRef) {
-        super(aVm);
-
-        ref = aRef;
-    }
-
-    protected String description() {
-        return "ObjectReference " + uniqueID();
-    }
-
-    /*
-     * VMListener implementation
-     */
-    public boolean vmSuspended(VMAction action) {
-        enableCache();
-        return true;
-    }
-
-    public boolean vmNotSuspended(VMAction action) {
-        // make sure that cache and listener management are synchronized
-        synchronized (vm.state()) {
-            if (cache != null && (vm.traceFlags & vm.TRACE_OBJREFS) != 0) {
-                vm.printTrace("Clearing temporary cache for " + description());
-            }
-            disableCache();
-            if (addedListener) {
-                /*
-                 * If a listener was added (i.e. this is not a
-                 * ObjectReference that adds a listener on startup),
-                 * remove it here.
-                 */
-                addedListener = false;
-                return false;  // false says remove
-            } else {
-                return true;
-            }
-        }
-    }
-
-    public boolean equals(Object obj) {
-        if ((obj != null) && (obj instanceof ObjectReferenceImpl)) {
-            ObjectReferenceImpl other = (ObjectReferenceImpl)obj;
-            return (ref() == other.ref()) &&
-                   super.equals(obj);
-        } else {
-            return false;
-        }
-    }
-
-    public int hashCode() {
-        return(int)ref();
-    }
-
-    public Type type() {
-        return referenceType();
-    }
-
-    public ReferenceType referenceType() {
-        if (type == null) {
-            try {
-                JDWP.ObjectReference.ReferenceType rtinfo =
-                    JDWP.ObjectReference.ReferenceType.process(vm, this);
-                type = vm.referenceType(rtinfo.typeID,
-                                        rtinfo.refTypeTag);
-            } catch (JDWPException exc) {
-                throw exc.toJDIException();
-            }
-        }
-        return type;
-    }
-
-    public Value getValue(Field sig) {
-        List<Field> list = new ArrayList<Field>(1);
-        list.add(sig);
-        Map map = getValues(list);
-        return(Value)map.get(sig);
-    }
-
-    public Map<Field,Value> getValues(List<? extends Field> theFields) {
-        validateMirrors(theFields);
-
-        List<Field> staticFields = new ArrayList<Field>(0);
-        int size = theFields.size();
-        List<Field> instanceFields = new ArrayList<Field>(size);
-
-        for (int i=0; i<size; i++) {
-            Field field = (Field)theFields.get(i);
-
-            // Make sure the field is valid
-            ((ReferenceTypeImpl)referenceType()).validateFieldAccess(field);
-
-            // FIX ME! We need to do some sanity checking
-            // here; make sure the field belongs to this
-            // object.
-            if (field.isStatic())
-                staticFields.add(field);
-            else {
-                instanceFields.add(field);
-            }
-        }
-
-        Map<Field, Value> map;
-        if (staticFields.size() > 0) {
-            map = referenceType().getValues(staticFields);
-        } else {
-            map = new HashMap<Field, Value>(size);
-        }
-
-        size = instanceFields.size();
-
-        JDWP.ObjectReference.GetValues.Field[] queryFields =
-                         new JDWP.ObjectReference.GetValues.Field[size];
-        for (int i=0; i<size; i++) {
-            FieldImpl field = (FieldImpl)instanceFields.get(i);/* thanks OTI */
-            queryFields[i] = new JDWP.ObjectReference.GetValues.Field(
-                                         field.ref());
-        }
-        ValueImpl[] values;
-        try {
-            values = JDWP.ObjectReference.GetValues.
-                                     process(vm, this, queryFields).values;
-        } catch (JDWPException exc) {
-            throw exc.toJDIException();
-        }
-
-        if (size != values.length) {
-            throw new InternalException(
-                         "Wrong number of values returned from target VM");
-        }
-        for (int i=0; i<size; i++) {
-            FieldImpl field = (FieldImpl)instanceFields.get(i);
-            map.put(field, values[i]);
-        }
-
-        return map;
-    }
-
-    public void setValue(Field field, Value value)
-                   throws InvalidTypeException, ClassNotLoadedException {
-
-        validateMirror(field);
-        validateMirrorOrNull(value);
-
-        // Make sure the field is valid
-        ((ReferenceTypeImpl)referenceType()).validateFieldSet(field);
-
-        if (field.isStatic()) {
-            ReferenceType type = referenceType();
-            if (type instanceof ClassType) {
-                ((ClassType)type).setValue(field, value);
-                return;
-            } else {
-                throw new IllegalArgumentException(
-                                    "Invalid type for static field set");
-            }
-        }
-
-        try {
-            JDWP.ObjectReference.SetValues.FieldValue[] fvals =
-                      new JDWP.ObjectReference.SetValues.FieldValue[1];
-            fvals[0] = new JDWP.ObjectReference.SetValues.FieldValue(
-                           ((FieldImpl)field).ref(),
-                           // Validate and convert if necessary
-                           ValueImpl.prepareForAssignment(value,
-                                                          (FieldImpl)field));
-            try {
-                JDWP.ObjectReference.SetValues.process(vm, this, fvals);
-            } catch (JDWPException exc) {
-                throw exc.toJDIException();
-            }
-        } catch (ClassNotLoadedException e) {
-            /*
-             * Since we got this exception,
-             * the field type must be a reference type. The value
-             * we're trying to set is null, but if the field's
-             * class has not yet been loaded through the enclosing
-             * class loader, then setting to null is essentially a
-             * no-op, and we should allow it without an exception.
-             */
-            if (value != null) {
-                throw e;
-            }
-        }
-    }
-
-    void validateMethodInvocation(Method method, int options)
-                                         throws InvalidTypeException,
-                                         InvocationException {
-
-        /*
-         * Method must be in this object's class, a superclass, or
-         * implemented interface
-         */
-        ReferenceTypeImpl declType = (ReferenceTypeImpl)method.declaringType();
-        if (!declType.isAssignableFrom(this)) {
-            throw new IllegalArgumentException("Invalid method");
-        }
-
-        ClassTypeImpl clazz = invokableReferenceType(method);
-
-        /*
-         * Method must be a non-constructor
-         */
-        if (method.isConstructor()) {
-            throw new IllegalArgumentException("Cannot invoke constructor");
-        }
-
-        /*
-         * For nonvirtual invokes, method must have a body
-         */
-        if ((options & INVOKE_NONVIRTUAL) != 0) {
-            if (method.declaringType() instanceof InterfaceType) {
-                throw new IllegalArgumentException("Interface method");
-            } else if (method.isAbstract()) {
-                throw new IllegalArgumentException("Abstract method");
-            }
-        }
-
-        /*
-         * Get the class containing the method that will be invoked.
-         * This class is needed only for proper validation of the
-         * method argument types.
-         */
-        ClassTypeImpl invokedClass;
-        if ((options & INVOKE_NONVIRTUAL) != 0) {
-            // No overrides in non-virtual invokes
-            invokedClass = clazz;
-        } else {
-            /*
-             * For virtual invokes, find any override of the method.
-             * Since we are looking for a method with a real body, we
-             * don't need to bother with interfaces/abstract methods.
-             */
-            Method invoker = clazz.concreteMethodByName(method.name(),
-                                                        method.signature());
-            //  isAssignableFrom check above guarantees non-null
-            invokedClass = (ClassTypeImpl)invoker.declaringType();
-        }
-        /* The above code is left over from previous versions.
-         * We haven't had time to divine the intent.  jjh, 7/31/2003
-         */
-    }
-
-    PacketStream sendInvokeCommand(final ThreadReferenceImpl thread,
-                                   final ClassTypeImpl refType,
-                                   final MethodImpl method,
-                                   final ValueImpl[] args,
-                                   final int options) {
-        CommandSender sender =
-            new CommandSender() {
-                public PacketStream send() {
-                    return JDWP.ObjectReference.InvokeMethod.enqueueCommand(
-                                          vm, ObjectReferenceImpl.this,
-                                          thread, refType,
-                                          method.ref(), args, options);
-                }
-        };
-
-        PacketStream stream;
-        if ((options & INVOKE_SINGLE_THREADED) != 0) {
-            stream = thread.sendResumingCommand(sender);
-        } else {
-            stream = vm.sendResumingCommand(sender);
-        }
-        return stream;
-    }
-
-    public Value invokeMethod(ThreadReference threadIntf, Method methodIntf,
-                              List<? extends Value> origArguments, int options)
-                              throws InvalidTypeException,
-                                     IncompatibleThreadStateException,
-                                     InvocationException,
-                                     ClassNotLoadedException {
-        validateMirror(threadIntf);
-        validateMirror(methodIntf);
-        validateMirrorsOrNulls(origArguments);
-
-        MethodImpl method = (MethodImpl)methodIntf;
-        ThreadReferenceImpl thread = (ThreadReferenceImpl)threadIntf;
-
-        if (method.isStatic()) {
-            if (referenceType() instanceof ClassType) {
-                ClassType type = (ClassType)referenceType();
-                return type.invokeMethod(thread, method, origArguments, options);
-            } else {
-                throw new IllegalArgumentException("Invalid type for static method invocation");
-            }
-        }
-
-        validateMethodInvocation(method, options);
-
-        List<Value> arguments = method.validateAndPrepareArgumentsForInvoke(
-                                                  origArguments);
-
-        ValueImpl[] args = arguments.toArray(new ValueImpl[0]);
-        JDWP.ObjectReference.InvokeMethod ret;
-        try {
-            PacketStream stream =
-                sendInvokeCommand(thread, invokableReferenceType(method),
-                                  method, args, options);
-            ret = JDWP.ObjectReference.InvokeMethod.waitForReply(vm, stream);
-        } catch (JDWPException exc) {
-            if (exc.errorCode() == JDWP.Error.INVALID_THREAD) {
-                throw new IncompatibleThreadStateException();
-            } else {
-                throw exc.toJDIException();
-            }
-        }
-
-        /*
-         * There is an implict VM-wide suspend at the conclusion
-         * of a normal (non-single-threaded) method invoke
-         */
-        if ((options & INVOKE_SINGLE_THREADED) == 0) {
-            vm.notifySuspend();
-        }
-
-        if (ret.exception != null) {
-            throw new InvocationException(ret.exception);
-        } else {
-            return ret.returnValue;
-        }
-    }
-
-    /* leave synchronized to keep count accurate */
-    public synchronized void disableCollection() {
-        if (gcDisableCount == 0) {
-            try {
-                JDWP.ObjectReference.DisableCollection.process(vm, this);
-            } catch (JDWPException exc) {
-                throw exc.toJDIException();
-            }
-        }
-        gcDisableCount++;
-    }
-
-    /* leave synchronized to keep count accurate */
-    public synchronized void enableCollection() {
-        gcDisableCount--;
-
-        if (gcDisableCount == 0) {
-            try {
-                JDWP.ObjectReference.EnableCollection.process(vm, this);
-            } catch (JDWPException exc) {
-                // If already collected, no harm done, no exception
-                if (exc.errorCode() != JDWP.Error.INVALID_OBJECT) {
-                    throw exc.toJDIException();
-                }
-                return;
-            }
-        }
-    }
-
-    public boolean isCollected() {
-        try {
-            return JDWP.ObjectReference.IsCollected.process(vm, this).
-                                                              isCollected;
-        } catch (JDWPException exc) {
-            throw exc.toJDIException();
-        }
-    }
-
-    public long uniqueID() {
-        return ref();
-    }
-
-    JDWP.ObjectReference.MonitorInfo jdwpMonitorInfo()
-                             throws IncompatibleThreadStateException {
-        JDWP.ObjectReference.MonitorInfo info = null;
-        try {
-            Cache local;
-
-            // getCache() and addlistener() must be synchronized
-            // so that no events are lost.
-            synchronized (vm.state()) {
-                local = getCache();
-
-                if (local != null) {
-                    info = local.monitorInfo;
-
-                    // Check if there will be something to cache
-                    // and there is not already a listener
-                    if (info == null && !vm.state().hasListener(this)) {
-                        /* For other, less numerous objects, this is done
-                         * in the constructor. Since there can be many
-                         * ObjectReferences, the VM listener is installed
-                         * and removed as needed.
-                         * Listener must be installed before process()
-                         */
-                        vm.state().addListener(this);
-                        addedListener = true;
-                    }
-                }
-            }
-            if (info == null) {
-                info = JDWP.ObjectReference.MonitorInfo.process(vm, this);
-                if (local != null) {
-                    local.monitorInfo = info;
-                    if ((vm.traceFlags & vm.TRACE_OBJREFS) != 0) {
-                        vm.printTrace("ObjectReference " + uniqueID() +
-                                      " temporarily caching monitor info");
-                    }
-                }
-            }
-        } catch (JDWPException exc) {
-             if (exc.errorCode() == JDWP.Error.THREAD_NOT_SUSPENDED) {
-                 throw new IncompatibleThreadStateException();
-             } else {
-                 throw exc.toJDIException();
-             }
-         }
-        return info;
-    }
-
-    public List<ThreadReference> waitingThreads() throws IncompatibleThreadStateException {
-        return Arrays.asList((ThreadReference[])jdwpMonitorInfo().waiters);
-    }
-
-    public ThreadReference owningThread() throws IncompatibleThreadStateException {
-        return jdwpMonitorInfo().owner;
-    }
-
-    public int entryCount() throws IncompatibleThreadStateException {
-        return jdwpMonitorInfo().entryCount;
-    }
-
-
-    public List<ObjectReference> referringObjects(long maxReferrers) {
-        if (!vm.canGetInstanceInfo()) {
-            throw new UnsupportedOperationException(
-                "target does not support getting referring objects");
-        }
-
-        if (maxReferrers < 0) {
-            throw new IllegalArgumentException("maxReferrers is less than zero: "
-                                              + maxReferrers);
-        }
-
-        int intMax = (maxReferrers > Integer.MAX_VALUE)?
-            Integer.MAX_VALUE: (int)maxReferrers;
-        // JDWP can't currently handle more than this (in mustang)
-
-        try {
-            return Arrays.asList((ObjectReference[])JDWP.ObjectReference.ReferringObjects.
-                                process(vm, this, intMax).referringObjects);
-        } catch (JDWPException exc) {
-            throw exc.toJDIException();
-        }
-    }
-
-    long ref() {
-        return ref;
-    }
-
-    boolean isClassObject() {
-        /*
-         * Don't need to worry about subclasses since java.lang.Class is final.
-         */
-        return referenceType().name().equals("java.lang.Class");
-    }
-
-    ValueImpl prepareForAssignmentTo(ValueContainer destination)
-                                 throws InvalidTypeException,
-                                        ClassNotLoadedException {
-
-        validateAssignment(destination);
-        return this;            // conversion never necessary
-    }
-
-    void validateAssignment(ValueContainer destination)
-                            throws InvalidTypeException, ClassNotLoadedException {
-
-        /*
-         * Do these simpler checks before attempting a query of the destination's
-         * type which might cause a confusing ClassNotLoadedException if
-         * the destination is primitive or an array.
-         */
-        /*
-         * TO DO: Centralize JNI signature knowledge
-         */
-        if (destination.signature().length() == 1) {
-            throw new InvalidTypeException("Can't assign object value to primitive");
-        }
-        if ((destination.signature().charAt(0) == '[') &&
-            (type().signature().charAt(0) != '[')) {
-            throw new InvalidTypeException("Can't assign non-array value to an array");
-        }
-        if ("void".equals(destination.typeName())) {
-            throw new InvalidTypeException("Can't assign object value to a void");
-        }
-
-        // Validate assignment
-        ReferenceType destType = (ReferenceTypeImpl)destination.type();
-        ReferenceTypeImpl myType = (ReferenceTypeImpl)referenceType();
-        if (!myType.isAssignableTo(destType)) {
-            JNITypeParser parser = new JNITypeParser(destType.signature());
-            String destTypeName = parser.typeName();
-            throw new InvalidTypeException("Can't assign " +
-                                           type().name() +
-                                           " to " + destTypeName);
-        }
-    }
-
-
-    public String toString() {
-        return "instance of " + referenceType().name() + "(id=" + uniqueID() + ")";
-    }
-
-    byte typeValueKey() {
-        return JDWP.Tag.OBJECT;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/ObsoleteMethodImpl.java b/ojluni/src/main/java/com/sun/tools/jdi/ObsoleteMethodImpl.java
deleted file mode 100755
index d7113e9..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/ObsoleteMethodImpl.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright (c) 2000, 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.
- */
-
-package com.sun.tools.jdi;
-
-import com.sun.jdi.*;
-
-import java.util.List;
-import java.util.ArrayList;
-
-/**
- * Represents methods which have changed when the class was redefined.
- */
-public class ObsoleteMethodImpl extends NonConcreteMethodImpl {
-
-    private Location location = null;
-
-    ObsoleteMethodImpl(VirtualMachine vm,
-                          ReferenceTypeImpl declaringType) {
-        super(vm, declaringType, 0, "<obsolete>", "", null, 0);
-    }
-
-    public boolean isObsolete() {
-        return true;
-    }
-
-    public String returnTypeName() {
-        return "<unknown>";
-    }
-
-    public Type returnType() throws ClassNotLoadedException {
-        throw new ClassNotLoadedException("type unknown");
-    }
-
-    public List<String> argumentTypeNames() {
-        return new ArrayList<String>();
-    }
-
-    public List<String> argumentSignatures() {
-        return new ArrayList<String>();
-    }
-
-    Type argumentType(int index) throws ClassNotLoadedException {
-        throw new ClassNotLoadedException("type unknown");
-    }
-
-    public List<Type> argumentTypes() throws ClassNotLoadedException {
-        return new ArrayList<Type>();
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/Packet.java b/ojluni/src/main/java/com/sun/tools/jdi/Packet.java
deleted file mode 100755
index 18f0392..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/Packet.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package com.sun.tools.jdi;
-
-import com.sun.jdi.*;
-import java.io.IOException;
-
-public class Packet extends Object {
-    public final static short NoFlags = 0x0;
-    public final static short Reply = 0x80;
-    public final static short ReplyNoError = 0x0;
-
-    static int uID = 1;
-    final static byte[] nullData = new byte[0];
-
-    // Note! flags, cmdSet, and cmd are all byte values.
-    // We represent them as shorts to make them easier
-    // to work with.
-    int id;
-    short flags;
-    short cmdSet;
-    short cmd;
-    short errorCode;
-    byte[] data;
-    volatile boolean replied = false;
-
-    /**
-     * Return byte representation of the packet
-     */
-    public byte[] toByteArray() {
-        int len = data.length + 11;
-        byte b[] = new byte[len];
-        b[0] = (byte)((len >>> 24) & 0xff);
-        b[1] = (byte)((len >>> 16) & 0xff);
-        b[2] = (byte)((len >>>  8) & 0xff);
-        b[3] = (byte)((len >>>  0) & 0xff);
-        b[4] = (byte)((id >>> 24) & 0xff);
-        b[5] = (byte)((id >>> 16) & 0xff);
-        b[6] = (byte)((id >>>  8) & 0xff);
-        b[7] = (byte)((id >>>  0) & 0xff);
-        b[8] = (byte)flags;
-        if ((flags & Packet.Reply) == 0) {
-            b[9] = (byte)cmdSet;
-            b[10] = (byte)cmd;
-        } else {
-            b[9] = (byte)((errorCode >>>  8) & 0xff);
-            b[10] = (byte)((errorCode >>>  0) & 0xff);
-        }
-        if (data.length > 0) {
-            System.arraycopy(data, 0, b, 11, data.length);
-        }
-        return b;
-    }
-
-    /**
-     * Create a packet from its byte array representation
-     */
-    public static Packet fromByteArray(byte b[]) throws IOException {
-        if (b.length < 11) {
-            throw new IOException("packet is insufficient size");
-        }
-
-        int b0 = b[0] & 0xff;
-        int b1 = b[1] & 0xff;
-        int b2 = b[2] & 0xff;
-        int b3 = b[3] & 0xff;
-        int len = ((b0 << 24) | (b1 << 16) | (b2 << 8) | (b3 << 0));
-        if (len != b.length) {
-            throw new IOException("length size mis-match");
-        }
-
-        int b4 = b[4] & 0xff;
-        int b5 = b[5] & 0xff;
-        int b6 = b[6] & 0xff;
-        int b7 = b[7] & 0xff;
-
-        Packet p = new Packet();
-        p.id = ((b4 << 24) | (b5 << 16) | (b6 << 8) | (b7 << 0));
-
-        p.flags = (short)(b[8] & 0xff);
-
-        if ((p.flags & Packet.Reply) == 0) {
-            p.cmdSet = (short)(b[9] & 0xff);
-            p.cmd = (short)(b[10] & 0xff);
-        } else {
-            short b9 = (short)(b[9] & 0xff);
-            short b10 = (short)(b[10] & 0xff);
-            p.errorCode = (short)((b9 << 8) + (b10 << 0));
-        }
-
-        p.data = new byte[b.length - 11];
-        System.arraycopy(b, 11, p.data, 0, p.data.length);
-        return p;
-    }
-
-    Packet()
-    {
-        id = uniqID();
-        flags = NoFlags;
-        data = nullData;
-    }
-
-    static synchronized private int uniqID()
-    {
-        /*
-         * JDWP spec does not require this id to be sequential and
-         * increasing, but our implementation does. See
-         * VirtualMachine.notifySuspend, for example.
-         */
-        return uID++;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/PacketStream.java b/ojluni/src/main/java/com/sun/tools/jdi/PacketStream.java
deleted file mode 100755
index a0cd2f3..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/PacketStream.java
+++ /dev/null
@@ -1,628 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package com.sun.tools.jdi;
-
-import com.sun.jdi.*;
-import java.util.*;
-import java.io.ByteArrayOutputStream;
-
-class PacketStream {
-    final VirtualMachineImpl vm;
-    private int inCursor = 0;
-    final Packet pkt;
-    private ByteArrayOutputStream dataStream = new ByteArrayOutputStream();
-    private boolean isCommitted = false;
-
-    PacketStream(VirtualMachineImpl vm, int cmdSet, int cmd) {
-        this.vm = vm;
-        this.pkt = new Packet();
-        pkt.cmdSet = (short)cmdSet;
-        pkt.cmd = (short)cmd;
-    }
-
-    PacketStream(VirtualMachineImpl vm, Packet pkt) {
-        this.vm = vm;
-        this.pkt = pkt;
-        this.isCommitted = true; /* read only stream */
-    }
-
-    int id() {
-        return pkt.id;
-    }
-
-    void send() {
-        if (!isCommitted) {
-            pkt.data = dataStream.toByteArray();
-            vm.sendToTarget(pkt);
-            isCommitted = true;
-        }
-    }
-
-    void waitForReply() throws JDWPException {
-        if (!isCommitted) {
-            throw new InternalException("waitForReply without send");
-        }
-
-        vm.waitForTargetReply(pkt);
-
-        if (pkt.errorCode != Packet.ReplyNoError) {
-            throw new JDWPException(pkt.errorCode);
-        }
-    }
-
-    void writeBoolean(boolean data) {
-        if(data) {
-            dataStream.write( 1 );
-        } else {
-            dataStream.write( 0 );
-        }
-    }
-
-    void writeByte(byte data) {
-        dataStream.write( data );
-    }
-
-    void writeChar(char data) {
-        dataStream.write( (byte)((data >>> 8) & 0xFF) );
-        dataStream.write( (byte)((data >>> 0) & 0xFF) );
-    }
-
-    void writeShort(short data) {
-        dataStream.write( (byte)((data >>> 8) & 0xFF) );
-        dataStream.write( (byte)((data >>> 0) & 0xFF) );
-    }
-
-    void writeInt(int data) {
-        dataStream.write( (byte)((data >>> 24) & 0xFF) );
-        dataStream.write( (byte)((data >>> 16) & 0xFF) );
-        dataStream.write( (byte)((data >>> 8) & 0xFF) );
-        dataStream.write( (byte)((data >>> 0) & 0xFF) );
-    }
-
-    void writeLong(long data) {
-        dataStream.write( (byte)((data >>> 56) & 0xFF) );
-        dataStream.write( (byte)((data >>> 48) & 0xFF) );
-        dataStream.write( (byte)((data >>> 40) & 0xFF) );
-        dataStream.write( (byte)((data >>> 32) & 0xFF) );
-
-        dataStream.write( (byte)((data >>> 24) & 0xFF) );
-        dataStream.write( (byte)((data >>> 16) & 0xFF) );
-        dataStream.write( (byte)((data >>> 8) & 0xFF) );
-        dataStream.write( (byte)((data >>> 0) & 0xFF) );
-    }
-
-    void writeFloat(float data) {
-        writeInt(Float.floatToIntBits(data));
-    }
-
-    void writeDouble(double data) {
-        writeLong(Double.doubleToLongBits(data));
-    }
-
-    void writeID(int size, long data) {
-        switch (size) {
-            case 8:
-                writeLong(data);
-                break;
-            case 4:
-                writeInt((int)data);
-                break;
-            case 2:
-                writeShort((short)data);
-                break;
-            default:
-                throw new UnsupportedOperationException("JDWP: ID size not supported: " + size);
-        }
-    }
-
-    void writeNullObjectRef() {
-        writeObjectRef(0);
-    }
-
-    void writeObjectRef(long data) {
-        writeID(vm.sizeofObjectRef, data);
-    }
-
-    void writeClassRef(long data) {
-        writeID(vm.sizeofClassRef, data);
-    }
-
-    void writeMethodRef(long data) {
-        writeID(vm.sizeofMethodRef, data);
-    }
-
-    void writeFieldRef(long data) {
-        writeID(vm.sizeofFieldRef, data);
-    }
-
-    void writeFrameRef(long data) {
-        writeID(vm.sizeofFrameRef, data);
-    }
-
-    void writeByteArray(byte[] data) {
-        dataStream.write(data, 0, data.length);
-    }
-
-    void writeString(String string) {
-        try {
-            byte[] stringBytes = string.getBytes("UTF8");
-            writeInt(stringBytes.length);
-            writeByteArray(stringBytes);
-        } catch (java.io.UnsupportedEncodingException e) {
-            throw new InternalException("Cannot convert string to UTF8 bytes");
-        }
-    }
-
-    void writeLocation(Location location) {
-        ReferenceTypeImpl refType = (ReferenceTypeImpl)location.declaringType();
-        byte tag;
-        if (refType instanceof ClassType) {
-            tag = JDWP.TypeTag.CLASS;
-        } else if (refType instanceof InterfaceType) {
-            // It's possible to have executable code in an interface
-            tag = JDWP.TypeTag.INTERFACE;
-        } else {
-            throw new InternalException("Invalid Location");
-        }
-        writeByte(tag);
-        writeClassRef(refType.ref());
-        writeMethodRef(((MethodImpl)location.method()).ref());
-        writeLong(location.codeIndex());
-    }
-
-    void writeValue(Value val) {
-        try {
-            writeValueChecked(val);
-        } catch (InvalidTypeException exc) {  // should never happen
-            throw new RuntimeException(
-                "Internal error: Invalid Tag/Type pair");
-        }
-    }
-
-    void writeValueChecked(Value val) throws InvalidTypeException {
-        writeByte(ValueImpl.typeValueKey(val));
-        writeUntaggedValue(val);
-    }
-
-    void writeUntaggedValue(Value val) {
-        try {
-            writeUntaggedValueChecked(val);
-        } catch (InvalidTypeException exc) {  // should never happen
-            throw new RuntimeException(
-                "Internal error: Invalid Tag/Type pair");
-        }
-    }
-
-    void writeUntaggedValueChecked(Value val) throws InvalidTypeException {
-        byte tag = ValueImpl.typeValueKey(val);
-        if (isObjectTag(tag)) {
-            if (val == null) {
-                 writeObjectRef(0);
-            } else {
-                if (!(val instanceof ObjectReference)) {
-                    throw new InvalidTypeException();
-                }
-                writeObjectRef(((ObjectReferenceImpl)val).ref());
-            }
-        } else {
-            switch (tag) {
-                case JDWP.Tag.BYTE:
-                    if(!(val instanceof ByteValue))
-                        throw new InvalidTypeException();
-
-                    writeByte(((PrimitiveValue)val).byteValue());
-                    break;
-
-                case JDWP.Tag.CHAR:
-                    if(!(val instanceof CharValue))
-                        throw new InvalidTypeException();
-
-                    writeChar(((PrimitiveValue)val).charValue());
-                    break;
-
-                case JDWP.Tag.FLOAT:
-                    if(!(val instanceof FloatValue))
-                        throw new InvalidTypeException();
-
-                    writeFloat(((PrimitiveValue)val).floatValue());
-                    break;
-
-                case JDWP.Tag.DOUBLE:
-                    if(!(val instanceof DoubleValue))
-                        throw new InvalidTypeException();
-
-                    writeDouble(((PrimitiveValue)val).doubleValue());
-                    break;
-
-                case JDWP.Tag.INT:
-                    if(!(val instanceof IntegerValue))
-                        throw new InvalidTypeException();
-
-                    writeInt(((PrimitiveValue)val).intValue());
-                    break;
-
-                case JDWP.Tag.LONG:
-                    if(!(val instanceof LongValue))
-                        throw new InvalidTypeException();
-
-                    writeLong(((PrimitiveValue)val).longValue());
-                    break;
-
-                case JDWP.Tag.SHORT:
-                    if(!(val instanceof ShortValue))
-                        throw new InvalidTypeException();
-
-                    writeShort(((PrimitiveValue)val).shortValue());
-                    break;
-
-                case JDWP.Tag.BOOLEAN:
-                    if(!(val instanceof BooleanValue))
-                        throw new InvalidTypeException();
-
-                    writeBoolean(((PrimitiveValue)val).booleanValue());
-                    break;
-            }
-        }
-    }
-
-
-
-    /**
-     * Read byte represented as one bytes.
-     */
-    byte readByte() {
-        byte ret = pkt.data[inCursor];
-        inCursor += 1;
-        return ret;
-    }
-
-    /**
-     * Read boolean represented as one byte.
-     */
-    boolean readBoolean() {
-        byte ret = readByte();
-        return (ret != 0);
-    }
-
-    /**
-     * Read char represented as two bytes.
-     */
-    char readChar() {
-        int b1, b2;
-
-        b1 = pkt.data[inCursor++] & 0xff;
-        b2 = pkt.data[inCursor++] & 0xff;
-
-        return (char)((b1 << 8) + b2);
-    }
-
-    /**
-     * Read short represented as two bytes.
-     */
-    short readShort() {
-        int b1, b2;
-
-        b1 = pkt.data[inCursor++] & 0xff;
-        b2 = pkt.data[inCursor++] & 0xff;
-
-        return (short)((b1 << 8) + b2);
-    }
-
-    /**
-     * Read int represented as four bytes.
-     */
-    int readInt() {
-        int b1,b2,b3,b4;
-
-        b1 = pkt.data[inCursor++] & 0xff;
-        b2 = pkt.data[inCursor++] & 0xff;
-        b3 = pkt.data[inCursor++] & 0xff;
-        b4 = pkt.data[inCursor++] & 0xff;
-
-        return ((b1 << 24) + (b2 << 16) + (b3 << 8) + b4);
-    }
-
-    /**
-     * Read long represented as eight bytes.
-     */
-    long readLong() {
-        long b1,b2,b3,b4;
-        long b5,b6,b7,b8;
-
-        b1 = pkt.data[inCursor++] & 0xff;
-        b2 = pkt.data[inCursor++] & 0xff;
-        b3 = pkt.data[inCursor++] & 0xff;
-        b4 = pkt.data[inCursor++] & 0xff;
-
-        b5 = pkt.data[inCursor++] & 0xff;
-        b6 = pkt.data[inCursor++] & 0xff;
-        b7 = pkt.data[inCursor++] & 0xff;
-        b8 = pkt.data[inCursor++] & 0xff;
-
-        return ((b1 << 56) + (b2 << 48) + (b3 << 40) + (b4 << 32)
-                + (b5 << 24) + (b6 << 16) + (b7 << 8) + b8);
-    }
-
-    /**
-     * Read float represented as four bytes.
-     */
-    float readFloat() {
-        return Float.intBitsToFloat(readInt());
-    }
-
-    /**
-     * Read double represented as eight bytes.
-     */
-    double readDouble() {
-        return Double.longBitsToDouble(readLong());
-    }
-
-    /**
-     * Read string represented as four byte length followed by
-     * characters of the string.
-     */
-    String readString() {
-        String ret;
-        int len = readInt();
-
-        try {
-            ret = new String(pkt.data, inCursor, len, "UTF8");
-        } catch(java.io.UnsupportedEncodingException e) {
-            System.err.println(e);
-            ret = "Conversion error!";
-        }
-        inCursor += len;
-        return ret;
-    }
-
-    private long readID(int size) {
-        switch (size) {
-          case 8:
-              return readLong();
-          case 4:
-              return (long)readInt();
-          case 2:
-              return (long)readShort();
-          default:
-              throw new UnsupportedOperationException("JDWP: ID size not supported: " + size);
-        }
-    }
-
-    /**
-     * Read object represented as vm specific byte sequence.
-     */
-    long readObjectRef() {
-        return readID(vm.sizeofObjectRef);
-    }
-
-    long readClassRef() {
-        return readID(vm.sizeofClassRef);
-    }
-
-    ObjectReferenceImpl readTaggedObjectReference() {
-        byte typeKey = readByte();
-        return vm.objectMirror(readObjectRef(), typeKey);
-    }
-
-    ObjectReferenceImpl readObjectReference() {
-        return vm.objectMirror(readObjectRef());
-    }
-
-    StringReferenceImpl readStringReference() {
-        long ref = readObjectRef();
-        return vm.stringMirror(ref);
-    }
-
-    ArrayReferenceImpl readArrayReference() {
-        long ref = readObjectRef();
-        return vm.arrayMirror(ref);
-    }
-
-    ThreadReferenceImpl readThreadReference() {
-        long ref = readObjectRef();
-        return vm.threadMirror(ref);
-    }
-
-    ThreadGroupReferenceImpl readThreadGroupReference() {
-        long ref = readObjectRef();
-        return vm.threadGroupMirror(ref);
-    }
-
-    ClassLoaderReferenceImpl readClassLoaderReference() {
-        long ref = readObjectRef();
-        return vm.classLoaderMirror(ref);
-    }
-
-    ClassObjectReferenceImpl readClassObjectReference() {
-        long ref = readObjectRef();
-        return vm.classObjectMirror(ref);
-    }
-
-    ReferenceTypeImpl readReferenceType() {
-        byte tag = readByte();
-        long ref = readObjectRef();
-        return vm.referenceType(ref, tag);
-    }
-
-    /**
-     * Read method reference represented as vm specific byte sequence.
-     */
-    long readMethodRef() {
-        return readID(vm.sizeofMethodRef);
-    }
-
-    /**
-     * Read field reference represented as vm specific byte sequence.
-     */
-    long readFieldRef() {
-        return readID(vm.sizeofFieldRef);
-    }
-
-    /**
-     * Read field represented as vm specific byte sequence.
-     */
-    Field readField() {
-        ReferenceTypeImpl refType = readReferenceType();
-        long fieldRef = readFieldRef();
-        return refType.getFieldMirror(fieldRef);
-    }
-
-    /**
-     * Read frame represented as vm specific byte sequence.
-     */
-    long readFrameRef() {
-        return readID(vm.sizeofFrameRef);
-    }
-
-    /**
-     * Read a value, first byte describes type of value to read.
-     */
-    ValueImpl readValue() {
-        byte typeKey = readByte();
-        return readUntaggedValue(typeKey);
-    }
-
-    ValueImpl readUntaggedValue(byte typeKey) {
-        ValueImpl val = null;
-
-        if (isObjectTag(typeKey)) {
-            val = vm.objectMirror(readObjectRef(), typeKey);
-        } else {
-            switch(typeKey) {
-                case JDWP.Tag.BYTE:
-                    val = new ByteValueImpl(vm, readByte());
-                    break;
-
-                case JDWP.Tag.CHAR:
-                    val = new CharValueImpl(vm, readChar());
-                    break;
-
-                case JDWP.Tag.FLOAT:
-                    val = new FloatValueImpl(vm, readFloat());
-                    break;
-
-                case JDWP.Tag.DOUBLE:
-                    val = new DoubleValueImpl(vm, readDouble());
-                    break;
-
-                case JDWP.Tag.INT:
-                    val = new IntegerValueImpl(vm, readInt());
-                    break;
-
-                case JDWP.Tag.LONG:
-                    val = new LongValueImpl(vm, readLong());
-                    break;
-
-                case JDWP.Tag.SHORT:
-                    val = new ShortValueImpl(vm, readShort());
-                    break;
-
-                case JDWP.Tag.BOOLEAN:
-                    val = new BooleanValueImpl(vm, readBoolean());
-                    break;
-
-                case JDWP.Tag.VOID:
-                    val = new VoidValueImpl(vm);
-                    break;
-            }
-        }
-        return val;
-    }
-
-    /**
-     * Read location represented as vm specific byte sequence.
-     */
-    Location readLocation() {
-        byte tag = readByte();
-        long classRef = readObjectRef();
-        long methodRef = readMethodRef();
-        long codeIndex = readLong();
-        if (classRef != 0) {
-            /* Valid location */
-            ReferenceTypeImpl refType = vm.referenceType(classRef, tag);
-            return new LocationImpl(vm, refType, methodRef, codeIndex);
-        } else {
-            /* Null location (example: uncaught exception) */
-           return null;
-        }
-    }
-
-    byte[] readByteArray(int length) {
-        byte[] array = new byte[length];
-        System.arraycopy(pkt.data, inCursor, array, 0, length);
-        inCursor += length;
-        return array;
-    }
-
-    List<Value> readArrayRegion() {
-        byte typeKey = readByte();
-        int length = readInt();
-        List<Value> list = new ArrayList<Value>(length);
-        boolean gettingObjects = isObjectTag(typeKey);
-        for (int i = 0; i < length; i++) {
-            /*
-             * Each object comes back with a type key which might
-             * identify a more specific type than the type key we
-             * passed in, so we use it in the decodeValue call.
-             * (For primitives, we just use the original one)
-             */
-            if (gettingObjects) {
-                typeKey = readByte();
-            }
-            Value value = readUntaggedValue(typeKey);
-            list.add(value);
-        }
-
-        return list;
-    }
-
-    void writeArrayRegion(List<Value> srcValues) {
-        writeInt(srcValues.size());
-        for (int i = 0; i < srcValues.size(); i++) {
-            Value value = srcValues.get(i);
-            writeUntaggedValue(value);
-        }
-    }
-
-    int skipBytes(int n) {
-        inCursor += n;
-        return n;
-    }
-
-    byte command() {
-        return (byte)pkt.cmd;
-    }
-
-    static boolean isObjectTag(byte tag) {
-        return (tag == JDWP.Tag.OBJECT) ||
-               (tag == JDWP.Tag.ARRAY) ||
-               (tag == JDWP.Tag.STRING) ||
-               (tag == JDWP.Tag.THREAD) ||
-               (tag == JDWP.Tag.THREAD_GROUP) ||
-               (tag == JDWP.Tag.CLASS_LOADER) ||
-               (tag == JDWP.Tag.CLASS_OBJECT);
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/PrimitiveTypeImpl.java b/ojluni/src/main/java/com/sun/tools/jdi/PrimitiveTypeImpl.java
deleted file mode 100755
index 05d0370..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/PrimitiveTypeImpl.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (c) 1998, 1999, 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.tools.jdi;
-
-import com.sun.jdi.*;
-
-abstract class PrimitiveTypeImpl extends TypeImpl implements PrimitiveType {
-
-    PrimitiveTypeImpl(VirtualMachine vm) {
-        super(vm);
-    }
-
-    /*
-     * Converts the given primitive value to a value of this type.
-     */
-    abstract PrimitiveValue convert(PrimitiveValue value) throws InvalidTypeException;
-
-    public String toString() {
-        return name();
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/PrimitiveValueImpl.java b/ojluni/src/main/java/com/sun/tools/jdi/PrimitiveValueImpl.java
deleted file mode 100755
index 930ab68..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/PrimitiveValueImpl.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * Copyright (c) 1998, 2006, 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.tools.jdi;
-
-import com.sun.jdi.*;
-
-public abstract class PrimitiveValueImpl extends ValueImpl
-                                         implements PrimitiveValue {
-
-    PrimitiveValueImpl(VirtualMachine aVm) {
-        super(aVm);
-    }
-
-    abstract public boolean booleanValue();
-    abstract public byte byteValue();
-    abstract public char charValue();
-    abstract public short shortValue();
-    abstract public int intValue();
-    abstract public long longValue();
-    abstract public float floatValue();
-    abstract public double doubleValue();
-
-    /*
-     * The checked versions of the value accessors throw
-     * InvalidTypeException if the required conversion is
-     * narrowing and would result in the loss of information
-     * (either magnitude or precision).
-     *
-     * Default implementations here do no checking; subclasses
-     * override as necessary to do the proper checking.
-     */
-    byte checkedByteValue() throws InvalidTypeException {
-        return byteValue();
-    }
-    char checkedCharValue() throws InvalidTypeException {
-        return charValue();
-    }
-    short checkedShortValue() throws InvalidTypeException {
-        return shortValue();
-    }
-    int checkedIntValue() throws InvalidTypeException {
-        return intValue();
-    }
-    long checkedLongValue() throws InvalidTypeException {
-        return longValue();
-    }
-    float checkedFloatValue() throws InvalidTypeException {
-        return floatValue();
-    }
-
-    final boolean checkedBooleanValue() throws InvalidTypeException {
-        /*
-         * Always disallow a conversion to boolean from any other
-         * primitive
-         */
-        if (this instanceof BooleanValue) {
-            return booleanValue();
-        } else {
-            throw new InvalidTypeException("Can't convert non-boolean value to boolean");
-        }
-    }
-
-    final double checkedDoubleValue() throws InvalidTypeException {
-        /*
-         * Can't overflow by converting to double, so this method
-         * is never overridden
-         */
-        return doubleValue();
-    }
-
-    ValueImpl prepareForAssignmentTo(ValueContainer destination)
-                    throws InvalidTypeException {
-
-        return convertForAssignmentTo(destination);
-    }
-
-    ValueImpl convertForAssignmentTo(ValueContainer destination)
-                 throws InvalidTypeException {
-
-        /*
-         * TO DO: Centralize JNI signature knowledge
-         */
-        if (destination.signature().length() > 1) {
-            throw new InvalidTypeException("Can't assign primitive value to object");
-        }
-
-        if ((destination.signature().charAt(0) == 'Z') &&
-            (type().signature().charAt(0) != 'Z')) {
-            throw new InvalidTypeException("Can't assign non-boolean value to a boolean");
-        }
-
-        if ((destination.signature().charAt(0) != 'Z') &&
-            (type().signature().charAt(0) == 'Z')) {
-            throw new InvalidTypeException("Can't assign boolean value to an non-boolean");
-        }
-
-        if ("void".equals(destination.typeName())) {
-            throw new InvalidTypeException("Can't assign primitive value to a void");
-        }
-
-        try {
-            PrimitiveTypeImpl primitiveType = (PrimitiveTypeImpl)destination.type();
-            return (ValueImpl)(primitiveType.convert(this));
-        } catch (ClassNotLoadedException e) {
-            throw new InternalException("Signature and type inconsistent for: " +
-                                        destination.typeName());
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/ProcessAttachingConnector.java b/ojluni/src/main/java/com/sun/tools/jdi/ProcessAttachingConnector.java
deleted file mode 100755
index 6b5d055..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/ProcessAttachingConnector.java
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-package com.sun.tools.jdi;
-
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.util.Map;
-import java.util.Properties;
-
-import com.sun.jdi.Bootstrap;
-import com.sun.jdi.VirtualMachine;
-import com.sun.jdi.connect.*;
-import com.sun.jdi.connect.spi.*;
-
-/*
- * An AttachingConnector that connects to a debuggee by specifying the process
- * id (pid) as the connector argument. If the process is a debuggee listening
- * on a transport address then this connector reads the transport address
- * and attempts to attach to it using the appropriate transport.
- */
-
-public class ProcessAttachingConnector
-        extends ConnectorImpl implements AttachingConnector
-{
-    /*
-     * The arguments that this connector supports
-     */
-    static final String ARG_PID = "pid";
-    static final String ARG_TIMEOUT = "timeout";
-
-    com.sun.tools.attach.VirtualMachine vm;
-    Transport transport;
-
-    public ProcessAttachingConnector() {
-        addStringArgument(
-            ARG_PID,
-            getString("process_attaching.pid.label"),
-            getString("process_attaching.pid"),
-            "",
-            true);
-
-        addIntegerArgument(
-            ARG_TIMEOUT,
-            getString("generic_attaching.timeout.label"),       // use generic keys to keep
-            getString("generic_attaching.timeout"),             // resource bundle small
-            "",
-            false,
-            0, Integer.MAX_VALUE);
-
-        transport = new Transport() {
-            public String name() {
-                return "local";
-            }
-        };
-    }
-
-
-    /**
-     * Attach to a target VM using the specified address and Connector arguments.
-     */
-    public VirtualMachine attach(Map<String,? extends Connector.Argument> args)
-                throws IOException, IllegalConnectorArgumentsException
-    {
-        String pid = argument(ARG_PID, args).value();
-        String t = argument(ARG_TIMEOUT, args).value();
-        int timeout = 0;
-        if (t.length() > 0) {
-            timeout = Integer.decode(t).intValue();
-        }
-
-        // Use Attach API to attach to target VM and read value of
-        // sun.jdwp.listenAddress property.
-
-        String address = null;
-        com.sun.tools.attach.VirtualMachine vm = null;
-        try {
-            vm = com.sun.tools.attach.VirtualMachine.attach(pid);
-            Properties props = vm.getAgentProperties();
-            address = props.getProperty("sun.jdwp.listenerAddress");
-        } catch (Exception x) {
-            throw new IOException(x.getMessage());
-        } finally {
-            if (vm != null) vm.detach();
-        }
-
-        // check that the property value is formatted correctly
-
-        if (address == null) {
-            throw new IOException("Not a debuggee, or not listening for debugger to attach");
-        }
-        int pos = address.indexOf(':');
-        if (pos < 1) {
-            throw new IOException("Unable to determine transport endpoint");
-        }
-
-        // parse into transport library name and address
-
-        final String lib = address.substring(0, pos);
-        address = address.substring(pos+1, address.length());
-
-        TransportService ts = null;
-        if (lib.equals("dt_socket")) {
-            ts = new SocketTransportService();
-        } else {
-            if (lib.equals("dt_shmem")) {
-                try {
-                    Class c = Class.forName("com.sun.tools.jdi.SharedMemoryTransportService");
-                    ts = (TransportService)c.newInstance();
-                } catch (Exception x) { }
-            }
-        }
-        if (ts == null) {
-            throw new IOException("Transport " + lib + " not recognized");
-        }
-
-        // connect to the debuggee
-
-        Connection connection = ts.attach(address, timeout, 0);
-        return Bootstrap.virtualMachineManager().createVirtualMachine(connection);
-    }
-
-    public String name() {
-        return "com.sun.jdi.ProcessAttach";
-    }
-
-    public String description() {
-        return getString("process_attaching.description");
-    }
-
-    public Transport transport() {
-        if (transport == null) {
-            return new Transport() {
-                public String name() {
-                    return "local";
-                }
-            };
-        }
-        return transport;
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/RawCommandLineLauncher.java b/ojluni/src/main/java/com/sun/tools/jdi/RawCommandLineLauncher.java
deleted file mode 100755
index 133193c..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/RawCommandLineLauncher.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-package com.sun.tools.jdi;
-
-import com.sun.tools.jdi.*;
-import com.sun.jdi.connect.*;
-import com.sun.jdi.connect.spi.*;
-import com.sun.jdi.VirtualMachine;
-import java.util.Map;
-import java.io.IOException;
-
-public class RawCommandLineLauncher extends AbstractLauncher implements LaunchingConnector {
-
-    static private final String ARG_COMMAND = "command";
-    static private final String ARG_ADDRESS = "address";
-    static private final String ARG_QUOTE   = "quote";
-
-    TransportService transportService;
-    Transport transport;
-
-    public TransportService transportService() {
-        return transportService;
-    }
-
-    public Transport transport() {
-        return transport;
-    }
-
-    public RawCommandLineLauncher() {
-        super();
-
-        try {
-            Class c = Class.forName("com.sun.tools.jdi.SharedMemoryTransportService");
-            transportService = (TransportService)c.newInstance();
-            transport = new Transport() {
-                public String name() {
-                    return "dt_shmem";
-                }
-            };
-        } catch (ClassNotFoundException x) {
-        } catch (UnsatisfiedLinkError x) {
-        } catch (InstantiationException x) {
-        } catch (IllegalAccessException x) {
-        };
-
-        if (transportService == null) {
-            transportService = new SocketTransportService();
-            transport = new Transport() {
-                public String name() {
-                    return "dt_socket";
-                }
-            };
-        }
-
-        addStringArgument(
-                ARG_COMMAND,
-                getString("raw.command.label"),
-                getString("raw.command"),
-                "",
-                true);
-        addStringArgument(
-                ARG_QUOTE,
-                getString("raw.quote.label"),
-                getString("raw.quote"),
-                "\"",
-                true);
-
-        addStringArgument(
-                ARG_ADDRESS,
-                getString("raw.address.label"),
-                getString("raw.address"),
-                "",
-                true);
-    }
-
-
-    public VirtualMachine
-        launch(Map<String,? extends Connector.Argument> arguments)
-        throws IOException, IllegalConnectorArgumentsException,
-               VMStartException
-    {
-        String command = argument(ARG_COMMAND, arguments).value();
-        String address = argument(ARG_ADDRESS, arguments).value();
-
-        String quote = argument(ARG_QUOTE, arguments).value();
-
-        if (quote.length() > 1) {
-            throw new IllegalConnectorArgumentsException("Invalid length",
-                                                         ARG_QUOTE);
-        }
-
-        TransportService.ListenKey listener = transportService.startListening(address);
-
-        try {
-            return launch(tokenizeCommand(command, quote.charAt(0)),
-                          address, listener, transportService);
-        } finally {
-            transportService.stopListening(listener);
-        }
-    }
-
-    public String name() {
-        return "com.sun.jdi.RawCommandLineLaunch";
-    }
-
-    public String description() {
-        return getString("raw.description");
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/ReferenceTypeImpl.java b/ojluni/src/main/java/com/sun/tools/jdi/ReferenceTypeImpl.java
deleted file mode 100755
index ec09090..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/ReferenceTypeImpl.java
+++ /dev/null
@@ -1,1170 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package com.sun.tools.jdi;
-
-import com.sun.jdi.*;
-
-import java.util.*;
-import java.lang.ref.SoftReference;
-
-public abstract class ReferenceTypeImpl extends TypeImpl
-implements ReferenceType {
-    protected long ref;
-    private String signature = null;
-    private String genericSignature = null;
-    private boolean genericSignatureGotten = false;
-    private String baseSourceName = null;
-    private String baseSourceDir = null;
-    private String baseSourcePath = null;
-    protected int modifiers = -1;
-    private SoftReference<List<Field>> fieldsRef = null;
-    private SoftReference<List<Method>> methodsRef = null;
-    private SoftReference<SDE> sdeRef = null;
-
-    private boolean isClassLoaderCached = false;
-    private ClassLoaderReference classLoader = null;
-    private ClassObjectReference classObject = null;
-
-    private int status = 0;
-    private boolean isPrepared = false;
-
-
-    private boolean versionNumberGotten = false;
-    private int majorVersion;
-    private int minorVersion;
-
-    private boolean constantPoolInfoGotten = false;
-    private int constanPoolCount;
-    private byte[] constantPoolBytes;
-    private SoftReference<byte[]> constantPoolBytesRef = null;
-
-    /* to mark a SourceFile request that returned a genuine JDWP.Error.ABSENT_INFORMATION */
-    private static final String ABSENT_BASE_SOURCE_NAME = "**ABSENT_BASE_SOURCE_NAME**";
-
-    /* to mark when no info available */
-    static final SDE NO_SDE_INFO_MARK = new SDE();
-
-    // bits set when initialization was attempted (succeeded or failed)
-    private static final int INITIALIZED_OR_FAILED =
-        JDWP.ClassStatus.INITIALIZED | JDWP.ClassStatus.ERROR;
-
-
-    protected ReferenceTypeImpl(VirtualMachine aVm, long aRef) {
-        super(aVm);
-        ref = aRef;
-        genericSignatureGotten = false;
-    }
-
-    void noticeRedefineClass() {
-        //Invalidate information previously fetched and cached.
-        //These will be refreshed later on demand.
-        baseSourceName = null;
-        baseSourcePath = null;
-        modifiers = -1;
-        fieldsRef = null;
-        methodsRef = null;
-        sdeRef = null;
-        versionNumberGotten = false;
-        constantPoolInfoGotten = false;
-    }
-
-    Method getMethodMirror(long ref) {
-        if (ref == 0) {
-            // obsolete method
-            return new ObsoleteMethodImpl(vm, this);
-        }
-        // Fetch all methods for the class, check performance impact
-        // Needs no synchronization now, since methods() returns
-        // unmodifiable local data
-        Iterator it = methods().iterator();
-        while (it.hasNext()) {
-            MethodImpl method = (MethodImpl)it.next();
-            if (method.ref() == ref) {
-                return method;
-            }
-        }
-        throw new IllegalArgumentException("Invalid method id: " + ref);
-    }
-
-    Field getFieldMirror(long ref) {
-        // Fetch all fields for the class, check performance impact
-        // Needs no synchronization now, since fields() returns
-        // unmodifiable local data
-        Iterator it = fields().iterator();
-        while (it.hasNext()) {
-            FieldImpl field = (FieldImpl)it.next();
-            if (field.ref() == ref) {
-                return field;
-            }
-        }
-        throw new IllegalArgumentException("Invalid field id: " + ref);
-    }
-
-    public boolean equals(Object obj) {
-        if ((obj != null) && (obj instanceof ReferenceTypeImpl)) {
-            ReferenceTypeImpl other = (ReferenceTypeImpl)obj;
-            return (ref() == other.ref()) &&
-                (vm.equals(other.virtualMachine()));
-        } else {
-            return false;
-        }
-    }
-
-    public int hashCode() {
-        return(int)ref();
-    }
-
-    public int compareTo(ReferenceType object) {
-        /*
-         * Note that it is critical that compareTo() == 0
-         * implies that equals() == true. Otherwise, TreeSet
-         * will collapse classes.
-         *
-         * (Classes of the same name loaded by different class loaders
-         * or in different VMs must not return 0).
-         */
-        ReferenceTypeImpl other = (ReferenceTypeImpl)object;
-        int comp = name().compareTo(other.name());
-        if (comp == 0) {
-            long rf1 = ref();
-            long rf2 = other.ref();
-            // optimize for typical case: refs equal and VMs equal
-            if (rf1 == rf2) {
-                // sequenceNumbers are always positive
-                comp = vm.sequenceNumber -
-                 ((VirtualMachineImpl)(other.virtualMachine())).sequenceNumber;
-            } else {
-                comp = (rf1 < rf2)? -1 : 1;
-            }
-        }
-        return comp;
-    }
-
-    public String signature() {
-        if (signature == null) {
-            // Does not need synchronization, since worst-case
-            // static info is fetched twice
-            if (vm.canGet1_5LanguageFeatures()) {
-                /*
-                 * we might as well get both the signature and the
-                 * generic signature.
-                 */
-                genericSignature();
-            } else {
-                try {
-                    signature = JDWP.ReferenceType.Signature.
-                        process(vm, this).signature;
-                } catch (JDWPException exc) {
-                    throw exc.toJDIException();
-                }
-            }
-        }
-        return signature;
-    }
-
-    public String genericSignature() {
-        // This gets both the signature and the generic signature
-        if (vm.canGet1_5LanguageFeatures() && !genericSignatureGotten) {
-            // Does not need synchronization, since worst-case
-            // static info is fetched twice
-            JDWP.ReferenceType.SignatureWithGeneric result;
-            try {
-                result = JDWP.ReferenceType.SignatureWithGeneric.
-                    process(vm, this);
-            } catch (JDWPException exc) {
-                throw exc.toJDIException();
-            }
-            signature = result.signature;
-            setGenericSignature(result.genericSignature);
-        }
-        return genericSignature;
-    }
-
-    public ClassLoaderReference classLoader() {
-        if (!isClassLoaderCached) {
-            // Does not need synchronization, since worst-case
-            // static info is fetched twice
-            try {
-                classLoader = (ClassLoaderReference)
-                    JDWP.ReferenceType.ClassLoader.
-                    process(vm, this).classLoader;
-                isClassLoaderCached = true;
-            } catch (JDWPException exc) {
-                throw exc.toJDIException();
-            }
-        }
-        return classLoader;
-    }
-
-    public boolean isPublic() {
-        if (modifiers == -1)
-            getModifiers();
-
-        return((modifiers & VMModifiers.PUBLIC) > 0);
-    }
-
-    public boolean isProtected() {
-        if (modifiers == -1)
-            getModifiers();
-
-        return((modifiers & VMModifiers.PROTECTED) > 0);
-    }
-
-    public boolean isPrivate() {
-        if (modifiers == -1)
-            getModifiers();
-
-        return((modifiers & VMModifiers.PRIVATE) > 0);
-    }
-
-    public boolean isPackagePrivate() {
-        return !isPublic() && !isPrivate() && !isProtected();
-    }
-
-    public boolean isAbstract() {
-        if (modifiers == -1)
-            getModifiers();
-
-        return((modifiers & VMModifiers.ABSTRACT) > 0);
-    }
-
-    public boolean isFinal() {
-        if (modifiers == -1)
-            getModifiers();
-
-        return((modifiers & VMModifiers.FINAL) > 0);
-    }
-
-    public boolean isStatic() {
-        if (modifiers == -1)
-            getModifiers();
-
-        return((modifiers & VMModifiers.STATIC) > 0);
-    }
-
-    public boolean isPrepared() {
-        // This ref type may have been prepared before we were getting
-        // events, so get it once.  After that,
-        // this status flag is updated through the ClassPrepareEvent,
-        // there is no need for the expense of a JDWP query.
-        if (status == 0) {
-            updateStatus();
-        }
-        return isPrepared;
-    }
-
-    public boolean isVerified() {
-        // Once true, it never resets, so we don't need to update
-        if ((status & JDWP.ClassStatus.VERIFIED) == 0) {
-            updateStatus();
-        }
-        return (status & JDWP.ClassStatus.VERIFIED) != 0;
-    }
-
-    public boolean isInitialized() {
-        // Once initialization succeeds or fails, it never resets,
-        // so we don't need to update
-        if ((status & INITIALIZED_OR_FAILED) == 0) {
-            updateStatus();
-        }
-        return (status & JDWP.ClassStatus.INITIALIZED) != 0;
-    }
-
-    public boolean failedToInitialize() {
-        // Once initialization succeeds or fails, it never resets,
-        // so we don't need to update
-        if ((status & INITIALIZED_OR_FAILED) == 0) {
-            updateStatus();
-        }
-        return (status & JDWP.ClassStatus.ERROR) != 0;
-    }
-
-    public List<Field> fields() {
-        List<Field> fields = (fieldsRef == null) ? null : fieldsRef.get();
-        if (fields == null) {
-            if (vm.canGet1_5LanguageFeatures()) {
-                JDWP.ReferenceType.FieldsWithGeneric.FieldInfo[] jdwpFields;
-                try {
-                    jdwpFields = JDWP.ReferenceType.FieldsWithGeneric.process(vm, this).declared;
-                } catch (JDWPException exc) {
-                    throw exc.toJDIException();
-                }
-                fields = new ArrayList<Field>(jdwpFields.length);
-                for (int i=0; i<jdwpFields.length; i++) {
-                    JDWP.ReferenceType.FieldsWithGeneric.FieldInfo fi
-                        = jdwpFields[i];
-
-                    Field field = new FieldImpl(vm, this, fi.fieldID,
-                                                fi.name, fi.signature,
-                                                fi.genericSignature,
-                                                fi.modBits);
-                    fields.add(field);
-                }
-            } else {
-                JDWP.ReferenceType.Fields.FieldInfo[] jdwpFields;
-                try {
-                    jdwpFields = JDWP.ReferenceType.Fields.
-                        process(vm, this).declared;
-                } catch (JDWPException exc) {
-                    throw exc.toJDIException();
-                }
-                fields = new ArrayList<Field>(jdwpFields.length);
-                for (int i=0; i<jdwpFields.length; i++) {
-                    JDWP.ReferenceType.Fields.FieldInfo fi = jdwpFields[i];
-
-                    Field field = new FieldImpl(vm, this, fi.fieldID,
-                                            fi.name, fi.signature,
-                                            null,
-                                            fi.modBits);
-                    fields.add(field);
-                }
-            }
-
-            fields = Collections.unmodifiableList(fields);
-            fieldsRef = new SoftReference<List<Field>>(fields);
-        }
-        return fields;
-    }
-
-    abstract List<? extends ReferenceType> inheritedTypes();
-
-    void addVisibleFields(List<Field> visibleList, Map<String, Field> visibleTable, List<String> ambiguousNames) {
-        for (Field field : visibleFields()) {
-            String name = field.name();
-            if (!ambiguousNames.contains(name)) {
-                Field duplicate = visibleTable.get(name);
-                if (duplicate == null) {
-                    visibleList.add(field);
-                    visibleTable.put(name, field);
-                } else if (!field.equals(duplicate)) {
-                    ambiguousNames.add(name);
-                    visibleTable.remove(name);
-                    visibleList.remove(duplicate);
-                } else {
-                    // identical field from two branches; do nothing
-                }
-            }
-        }
-    }
-
-    public List<Field> visibleFields() {
-        /*
-         * Maintain two different collections of visible fields. The
-         * list maintains a reasonable order for return. The
-         * hash map provides an efficient way to lookup visible fields
-         * by name, important for finding hidden or ambiguous fields.
-         */
-        List<Field> visibleList = new ArrayList<Field>();
-        Map<String, Field>  visibleTable = new HashMap<String, Field>();
-
-        /* Track fields removed from above collection due to ambiguity */
-        List<String> ambiguousNames = new ArrayList<String>();
-
-        /* Add inherited, visible fields */
-        List<? extends ReferenceType> types = inheritedTypes();
-        Iterator iter = types.iterator();
-        while (iter.hasNext()) {
-            /*
-             * TO DO: Be defensive and check for cyclic interface inheritance
-             */
-            ReferenceTypeImpl type = (ReferenceTypeImpl)iter.next();
-            type.addVisibleFields(visibleList, visibleTable, ambiguousNames);
-        }
-
-        /*
-         * Insert fields from this type, removing any inherited fields they
-         * hide.
-         */
-        List<Field> retList = new ArrayList<Field>(fields());
-        for (Field field : retList) {
-            Field hidden = visibleTable.get(field.name());
-            if (hidden != null) {
-                visibleList.remove(hidden);
-            }
-        }
-        retList.addAll(visibleList);
-        return retList;
-    }
-
-    void addAllFields(List<Field> fieldList, Set<ReferenceType> typeSet) {
-        /* Continue the recursion only if this type is new */
-        if (!typeSet.contains(this)) {
-            typeSet.add((ReferenceType)this);
-
-            /* Add local fields */
-            fieldList.addAll(fields());
-
-            /* Add inherited fields */
-            List<? extends ReferenceType> types = inheritedTypes();
-            Iterator iter = types.iterator();
-            while (iter.hasNext()) {
-                ReferenceTypeImpl type = (ReferenceTypeImpl)iter.next();
-                type.addAllFields(fieldList, typeSet);
-            }
-        }
-    }
-    public List<Field> allFields() {
-        List<Field> fieldList = new ArrayList<Field>();
-        Set<ReferenceType> typeSet = new HashSet<ReferenceType>();
-        addAllFields(fieldList, typeSet);
-        return fieldList;
-    }
-
-    public Field fieldByName(String fieldName) {
-        java.util.List searchList;
-        Field f;
-
-        searchList = visibleFields();
-
-        for (int i=0; i<searchList.size(); i++) {
-            f = (Field)searchList.get(i);
-
-            if (f.name().equals(fieldName)) {
-                return f;
-            }
-        }
-        //throw new NoSuchFieldException("Field '" + fieldName + "' not found in " + name());
-        return null;
-    }
-
-    public List<Method> methods() {
-        List<Method> methods = (methodsRef == null) ? null : methodsRef.get();
-        if (methods == null) {
-            if (!vm.canGet1_5LanguageFeatures()) {
-                methods = methods1_4();
-            } else {
-                JDWP.ReferenceType.MethodsWithGeneric.MethodInfo[] declared;
-                try {
-                    declared = JDWP.ReferenceType.MethodsWithGeneric.
-                        process(vm, this).declared;
-                } catch (JDWPException exc) {
-                    throw exc.toJDIException();
-                }
-                methods = new ArrayList<Method>(declared.length);
-                for (int i=0; i<declared.length; i++) {
-                    JDWP.ReferenceType.MethodsWithGeneric.MethodInfo
-                        mi = declared[i];
-
-                    Method method = MethodImpl.createMethodImpl(vm, this,
-                                                         mi.methodID,
-                                                         mi.name, mi.signature,
-                                                         mi.genericSignature,
-                                                         mi.modBits);
-                    methods.add(method);
-                }
-            }
-            methods = Collections.unmodifiableList(methods);
-            methodsRef = new SoftReference<List<Method>>(methods);
-        }
-        return methods;
-    }
-
-    private List<Method> methods1_4() {
-        List<Method> methods;
-        JDWP.ReferenceType.Methods.MethodInfo[] declared;
-        try {
-            declared = JDWP.ReferenceType.Methods.
-                process(vm, this).declared;
-        } catch (JDWPException exc) {
-            throw exc.toJDIException();
-        }
-        methods = new ArrayList<Method>(declared.length);
-        for (int i=0; i<declared.length; i++) {
-            JDWP.ReferenceType.Methods.MethodInfo mi = declared[i];
-
-            Method method = MethodImpl.createMethodImpl(vm, this,
-                                                        mi.methodID,
-                                                        mi.name, mi.signature,
-                                                        null,
-                                                        mi.modBits);
-            methods.add(method);
-        }
-        return methods;
-    }
-
-    /*
-     * Utility method used by subclasses to build lists of visible
-     * methods.
-     */
-    void addToMethodMap(Map<String, Method> methodMap, List<Method> methodList) {
-        for (Method method : methodList)
-            methodMap.put(method.name().concat(method.signature()), method);
-        }
-
-    abstract void addVisibleMethods(Map<String, Method> methodMap);
-
-    public List<Method> visibleMethods() {
-        /*
-         * Build a collection of all visible methods. The hash
-         * map allows us to do this efficiently by keying on the
-         * concatenation of name and signature.
-         */
-        Map<String, Method> map = new HashMap<String, Method>();
-        addVisibleMethods(map);
-
-        /*
-         * ... but the hash map destroys order. Methods should be
-         * returned in a sensible order, as they are in allMethods().
-         * So, start over with allMethods() and use the hash map
-         * to filter that ordered collection.
-         */
-        List<Method> list = allMethods();
-        list.retainAll(map.values());
-        return list;
-    }
-
-    abstract public List<Method> allMethods();
-
-    public List<Method> methodsByName(String name) {
-        List<Method> methods = visibleMethods();
-        ArrayList<Method> retList = new ArrayList<Method>(methods.size());
-        for (Method candidate : methods) {
-            if (candidate.name().equals(name)) {
-                retList.add(candidate);
-            }
-        }
-        retList.trimToSize();
-        return retList;
-    }
-
-    public List<Method> methodsByName(String name, String signature) {
-        List<Method> methods = visibleMethods();
-        ArrayList<Method> retList = new ArrayList<Method>(methods.size());
-        for (Method candidate : methods) {
-            if (candidate.name().equals(name) &&
-                candidate.signature().equals(signature)) {
-                retList.add(candidate);
-            }
-        }
-        retList.trimToSize();
-        return retList;
-    }
-
-    List<InterfaceType> getInterfaces() {
-        InterfaceTypeImpl[] intfs;
-        try {
-            intfs = JDWP.ReferenceType.Interfaces.
-                                         process(vm, this).interfaces;
-        } catch (JDWPException exc) {
-            throw exc.toJDIException();
-        }
-        return Arrays.asList((InterfaceType[])intfs);
-    }
-
-    public List<ReferenceType> nestedTypes() {
-        List all = vm.allClasses();
-        List<ReferenceType> nested = new ArrayList<ReferenceType>();
-        String outername = name();
-        int outerlen = outername.length();
-        Iterator iter = all.iterator();
-        while (iter.hasNext()) {
-            ReferenceType refType = (ReferenceType)iter.next();
-            String name = refType.name();
-            int len = name.length();
-            /* The separator is historically '$' but could also be '#' */
-            if ( len > outerlen && name.startsWith(outername) ) {
-                char c = name.charAt(outerlen);
-                if ( c =='$' || c== '#' ) {
-                    nested.add(refType);
-                }
-            }
-        }
-        return nested;
-    }
-
-    public Value getValue(Field sig) {
-        List<Field> list = new ArrayList<Field>(1);
-        list.add(sig);
-        Map map = getValues(list);
-        return(Value)map.get(sig);
-    }
-
-
-    void validateFieldAccess(Field field) {
-        /*
-         * Field must be in this object's class, a superclass, or
-         * implemented interface
-         */
-        ReferenceTypeImpl declType = (ReferenceTypeImpl)field.declaringType();
-        if (!declType.isAssignableFrom(this)) {
-            throw new IllegalArgumentException("Invalid field");
-        }
-    }
-
-    void validateFieldSet(Field field) {
-        validateFieldAccess(field);
-        if (field.isFinal()) {
-            throw new IllegalArgumentException("Cannot set value of final field");
-        }
-    }
-
-    /**
-     * Returns a map of field values
-     */
-    public Map<Field,Value> getValues(List<? extends Field> theFields) {
-        validateMirrors(theFields);
-
-        int size = theFields.size();
-        JDWP.ReferenceType.GetValues.Field[] queryFields =
-                         new JDWP.ReferenceType.GetValues.Field[size];
-
-        for (int i=0; i<size; i++) {
-            FieldImpl field = (FieldImpl)theFields.get(i);
-
-            validateFieldAccess(field);
-
-            // Do more validation specific to ReferenceType field getting
-            if (!field.isStatic()) {
-                throw new IllegalArgumentException(
-                     "Attempt to use non-static field with ReferenceType");
-            }
-            queryFields[i] = new JDWP.ReferenceType.GetValues.Field(
-                                         field.ref());
-        }
-
-        Map<Field, Value> map = new HashMap<Field, Value>(size);
-
-        ValueImpl[] values;
-        try {
-            values = JDWP.ReferenceType.GetValues.
-                                     process(vm, this, queryFields).values;
-        } catch (JDWPException exc) {
-            throw exc.toJDIException();
-        }
-
-        if (size != values.length) {
-            throw new InternalException(
-                         "Wrong number of values returned from target VM");
-        }
-        for (int i=0; i<size; i++) {
-            FieldImpl field = (FieldImpl)theFields.get(i);
-            map.put(field, values[i]);
-        }
-
-        return map;
-    }
-
-    public ClassObjectReference classObject() {
-        if (classObject == null) {
-            // Are classObjects unique for an Object, or
-            // created each time? Is this spec'ed?
-            synchronized(this) {
-                if (classObject == null) {
-                    try {
-                        classObject = JDWP.ReferenceType.ClassObject.
-                            process(vm, this).classObject;
-                    } catch (JDWPException exc) {
-                        throw exc.toJDIException();
-                    }
-                }
-            }
-        }
-        return classObject;
-    }
-
-    SDE.Stratum stratum(String stratumID) {
-        SDE sde = sourceDebugExtensionInfo();
-        if (!sde.isValid()) {
-            sde = NO_SDE_INFO_MARK;
-        }
-        return sde.stratum(stratumID);
-    }
-
-    public String sourceName() throws AbsentInformationException {
-        return sourceNames(vm.getDefaultStratum()).get(0);
-    }
-
-    public List<String> sourceNames(String stratumID)
-                                throws AbsentInformationException {
-        SDE.Stratum stratum = stratum(stratumID);
-        if (stratum.isJava()) {
-            List<String> result = new ArrayList<String>(1);
-            result.add(baseSourceName());
-            return result;
-        }
-        return stratum.sourceNames(this);
-    }
-
-    public List<String> sourcePaths(String stratumID)
-                                throws AbsentInformationException {
-        SDE.Stratum stratum = stratum(stratumID);
-        if (stratum.isJava()) {
-            List<String> result = new ArrayList<String>(1);
-            result.add(baseSourceDir() + baseSourceName());
-            return result;
-        }
-        return stratum.sourcePaths(this);
-    }
-
-    String baseSourceName() throws AbsentInformationException {
-        String bsn = baseSourceName;
-        if (bsn == null) {
-            // Does not need synchronization, since worst-case
-            // static info is fetched twice
-            try {
-                bsn = JDWP.ReferenceType.SourceFile.
-                    process(vm, this).sourceFile;
-            } catch (JDWPException exc) {
-                if (exc.errorCode() == JDWP.Error.ABSENT_INFORMATION) {
-                    bsn = ABSENT_BASE_SOURCE_NAME;
-                } else {
-                    throw exc.toJDIException();
-                }
-            }
-            baseSourceName = bsn;
-        }
-        if (bsn == ABSENT_BASE_SOURCE_NAME) {
-            throw new AbsentInformationException();
-        }
-        return bsn;
-    }
-
-    String baseSourcePath() throws AbsentInformationException {
-        String bsp = baseSourcePath;
-        if (bsp == null) {
-            bsp = baseSourceDir() + baseSourceName();
-            baseSourcePath = bsp;
-        }
-        return bsp;
-    }
-
-    String baseSourceDir() {
-        if (baseSourceDir == null) {
-            String typeName = name();
-            StringBuffer sb = new StringBuffer(typeName.length() + 10);
-            int index = 0;
-            int nextIndex;
-
-            while ((nextIndex = typeName.indexOf('.', index)) > 0) {
-                sb.append(typeName.substring(index, nextIndex));
-                sb.append(java.io.File.separatorChar);
-                index = nextIndex + 1;
-            }
-            baseSourceDir = sb.toString();
-        }
-        return baseSourceDir;
-    }
-
-    public String sourceDebugExtension()
-                           throws AbsentInformationException {
-        if (!vm.canGetSourceDebugExtension()) {
-            throw new UnsupportedOperationException();
-        }
-        SDE sde = sourceDebugExtensionInfo();
-        if (sde == NO_SDE_INFO_MARK) {
-            throw new AbsentInformationException();
-        }
-        return sde.sourceDebugExtension;
-    }
-
-    private SDE sourceDebugExtensionInfo() {
-        if (!vm.canGetSourceDebugExtension()) {
-            return NO_SDE_INFO_MARK;
-        }
-        SDE sde = (sdeRef == null) ?  null : sdeRef.get();
-        if (sde == null) {
-            String extension = null;
-            try {
-                extension = JDWP.ReferenceType.SourceDebugExtension.
-                    process(vm, this).extension;
-            } catch (JDWPException exc) {
-                if (exc.errorCode() != JDWP.Error.ABSENT_INFORMATION) {
-                    sdeRef = new SoftReference<SDE>(NO_SDE_INFO_MARK);
-                    throw exc.toJDIException();
-                }
-            }
-            if (extension == null) {
-                sde = NO_SDE_INFO_MARK;
-            } else {
-                sde = new SDE(extension);
-            }
-            sdeRef = new SoftReference<SDE>(sde);
-        }
-        return sde;
-    }
-
-    public List<String> availableStrata() {
-        SDE sde = sourceDebugExtensionInfo();
-        if (sde.isValid()) {
-            return sde.availableStrata();
-        } else {
-            List<String> strata = new ArrayList<String>();
-            strata.add(SDE.BASE_STRATUM_NAME);
-            return strata;
-        }
-    }
-
-    /**
-     * Always returns non-null stratumID
-     */
-    public String defaultStratum() {
-        SDE sdei = sourceDebugExtensionInfo();
-        if (sdei.isValid()) {
-            return sdei.defaultStratumId;
-        } else {
-            return SDE.BASE_STRATUM_NAME;
-        }
-    }
-
-    public int modifiers() {
-        if (modifiers == -1)
-            getModifiers();
-
-        return modifiers;
-    }
-
-    public List<Location> allLineLocations()
-                            throws AbsentInformationException {
-        return allLineLocations(vm.getDefaultStratum(), null);
-    }
-
-    public List<Location> allLineLocations(String stratumID, String sourceName)
-                            throws AbsentInformationException {
-        boolean someAbsent = false; // A method that should have info, didn't
-        SDE.Stratum stratum = stratum(stratumID);
-        List<Location> list = new ArrayList<Location>();  // location list
-
-        for (Iterator iter = methods().iterator(); iter.hasNext(); ) {
-            MethodImpl method = (MethodImpl)iter.next();
-            try {
-                list.addAll(
-                   method.allLineLocations(stratum, sourceName));
-            } catch(AbsentInformationException exc) {
-                someAbsent = true;
-            }
-        }
-
-        // If we retrieved no line info, and at least one of the methods
-        // should have had some (as determined by an
-        // AbsentInformationException being thrown) then we rethrow
-        // the AbsentInformationException.
-        if (someAbsent && list.size() == 0) {
-            throw new AbsentInformationException();
-        }
-        return list;
-    }
-
-    public List<Location> locationsOfLine(int lineNumber)
-                           throws AbsentInformationException {
-        return locationsOfLine(vm.getDefaultStratum(),
-                               null,
-                               lineNumber);
-    }
-
-    public List<Location> locationsOfLine(String stratumID,
-                                String sourceName,
-                                int lineNumber)
-                           throws AbsentInformationException {
-        // A method that should have info, didn't
-        boolean someAbsent = false;
-        // A method that should have info, did
-        boolean somePresent = false;
-        List<Method> methods = methods();
-        SDE.Stratum stratum = stratum(stratumID);
-
-        List<Location> list = new ArrayList<Location>();
-
-        Iterator iter = methods.iterator();
-        while(iter.hasNext()) {
-            MethodImpl method = (MethodImpl)iter.next();
-            // eliminate native and abstract to eliminate
-            // false positives
-            if (!method.isAbstract() &&
-                !method.isNative()) {
-                try {
-                    list.addAll(
-                       method.locationsOfLine(stratum,
-                                              sourceName,
-                                              lineNumber));
-                    somePresent = true;
-                } catch(AbsentInformationException exc) {
-                    someAbsent = true;
-                }
-            }
-        }
-        if (someAbsent && !somePresent) {
-            throw new AbsentInformationException();
-        }
-        return list;
-    }
-
-    public List<ObjectReference> instances(long maxInstances) {
-        if (!vm.canGetInstanceInfo()) {
-            throw new UnsupportedOperationException(
-                "target does not support getting instances");
-        }
-
-        if (maxInstances < 0) {
-            throw new IllegalArgumentException("maxInstances is less than zero: "
-                                              + maxInstances);
-        }
-        int intMax = (maxInstances > Integer.MAX_VALUE)?
-            Integer.MAX_VALUE: (int)maxInstances;
-        // JDWP can't currently handle more than this (in mustang)
-
-        try {
-            return Arrays.asList(
-                (ObjectReference[])JDWP.ReferenceType.Instances.
-                        process(vm, this, intMax).instances);
-        } catch (JDWPException exc) {
-            throw exc.toJDIException();
-        }
-    }
-
-    private void getClassFileVersion() {
-        if (!vm.canGetClassFileVersion()) {
-            throw new UnsupportedOperationException();
-        }
-        JDWP.ReferenceType.ClassFileVersion classFileVersion;
-        if (versionNumberGotten) {
-            return;
-        } else {
-            try {
-                classFileVersion = JDWP.ReferenceType.ClassFileVersion.process(vm, this);
-            } catch (JDWPException exc) {
-                if (exc.errorCode() == JDWP.Error.ABSENT_INFORMATION) {
-                    majorVersion = 0;
-                    minorVersion = 0;
-                    versionNumberGotten = true;
-                    return;
-                } else {
-                    throw exc.toJDIException();
-                }
-            }
-            majorVersion = classFileVersion.majorVersion;
-            minorVersion = classFileVersion.minorVersion;
-            versionNumberGotten = true;
-        }
-    }
-
-    public int majorVersion() {
-        try {
-            getClassFileVersion();
-        } catch (RuntimeException exc) {
-            throw exc;
-        }
-        return majorVersion;
-    }
-
-    public int minorVersion() {
-        try {
-            getClassFileVersion();
-        } catch (RuntimeException exc) {
-            throw exc;
-        }
-        return minorVersion;
-    }
-
-    private void getConstantPoolInfo() {
-        JDWP.ReferenceType.ConstantPool jdwpCPool;
-        if (!vm.canGetConstantPool()) {
-            throw new UnsupportedOperationException();
-        }
-        if (constantPoolInfoGotten) {
-            return;
-        } else {
-            try {
-                jdwpCPool = JDWP.ReferenceType.ConstantPool.process(vm, this);
-            } catch (JDWPException exc) {
-                if (exc.errorCode() == JDWP.Error.ABSENT_INFORMATION) {
-                    constanPoolCount = 0;
-                    constantPoolBytesRef = null;
-                    constantPoolInfoGotten = true;
-                    return;
-                } else {
-                    throw exc.toJDIException();
-                }
-            }
-            byte[] cpbytes;
-            constanPoolCount = jdwpCPool.count;
-            cpbytes = jdwpCPool.bytes;
-            constantPoolBytesRef = new SoftReference<byte[]>(cpbytes);
-            constantPoolInfoGotten = true;
-        }
-    }
-
-    public int constantPoolCount() {
-        try {
-            getConstantPoolInfo();
-        } catch (RuntimeException exc) {
-            throw exc;
-        }
-        return constanPoolCount;
-    }
-
-    public byte[] constantPool() {
-        try {
-            getConstantPoolInfo();
-        } catch (RuntimeException exc) {
-            throw exc;
-        }
-        if (constantPoolBytesRef != null) {
-            byte[] cpbytes = constantPoolBytesRef.get();
-            /*
-             * Arrays are always modifiable, so it is a little unsafe
-             * to return the cached bytecodes directly; instead, we
-             * make a clone at the cost of using more memory.
-             */
-            return cpbytes.clone();
-        } else {
-            return null;
-        }
-    }
-
-    // Does not need synchronization, since worst-case
-    // static info is fetched twice
-    void getModifiers() {
-        if (modifiers != -1) {
-            return;
-        }
-        try {
-            modifiers = JDWP.ReferenceType.Modifiers.
-                                  process(vm, this).modBits;
-        } catch (JDWPException exc) {
-            throw exc.toJDIException();
-        }
-    }
-
-    void decodeStatus(int status) {
-        this.status = status;
-        if ((status & JDWP.ClassStatus.PREPARED) != 0) {
-            isPrepared = true;
-        }
-    }
-
-    void updateStatus() {
-        try {
-            decodeStatus(JDWP.ReferenceType.Status.process(vm, this).status);
-        } catch (JDWPException exc) {
-            throw exc.toJDIException();
-        }
-    }
-
-    void markPrepared() {
-        isPrepared = true;
-    }
-
-    long ref() {
-        return ref;
-    }
-
-    int indexOf(Method method) {
-        // Make sure they're all here - the obsolete method
-        // won't be found and so will have index -1
-        return methods().indexOf(method);
-    }
-
-    int indexOf(Field field) {
-        // Make sure they're all here
-        return fields().indexOf(field);
-    }
-
-    /*
-     * Return true if an instance of this type
-     * can be assigned to a variable of the given type
-     */
-    abstract boolean isAssignableTo(ReferenceType type);
-
-    boolean isAssignableFrom(ReferenceType type) {
-        return ((ReferenceTypeImpl)type).isAssignableTo(this);
-    }
-
-    boolean isAssignableFrom(ObjectReference object) {
-        return object == null ||
-               isAssignableFrom(object.referenceType());
-    }
-
-    void setStatus(int status) {
-        decodeStatus(status);
-    }
-
-    void setSignature(String signature) {
-        this.signature = signature;
-    }
-
-    void setGenericSignature(String signature) {
-        if (signature != null && signature.length() == 0) {
-            this.genericSignature = null;
-        } else{
-            this.genericSignature = signature;
-        }
-        this.genericSignatureGotten = true;
-    }
-
-    private static boolean isPrimitiveArray(String signature) {
-        int i = signature.lastIndexOf('[');
-        /*
-         * TO DO: Centralize JNI signature knowledge.
-         *
-         * Ref:
-         *  jdk1.4/doc/guide/jpda/jdi/com/sun/jdi/doc-files/signature.html
-         */
-        boolean isPA;
-        if (i < 0) {
-            isPA = false;
-        } else {
-            char c = signature.charAt(i + 1);
-            isPA = (c != 'L');
-        }
-        return isPA;
-    }
-
-    Type findType(String signature) throws ClassNotLoadedException {
-        Type type;
-        if (signature.length() == 1) {
-            /* OTI FIX: Must be a primitive type or the void type */
-            char sig = signature.charAt(0);
-            if (sig == 'V') {
-                type = vm.theVoidType();
-            } else {
-                type = vm.primitiveTypeMirror((byte)sig);
-            }
-        } else {
-            // Must be a reference type.
-            ClassLoaderReferenceImpl loader =
-                       (ClassLoaderReferenceImpl)classLoader();
-            if ((loader == null) ||
-                (isPrimitiveArray(signature)) //Work around 4450091
-                ) {
-                // Caller wants type of boot class field
-                type = vm.findBootType(signature);
-            } else {
-                // Caller wants type of non-boot class field
-                type = loader.findType(signature);
-            }
-        }
-        return type;
-    }
-
-    String loaderString() {
-        if (classLoader() != null) {
-            return "loaded by " + classLoader().toString();
-        } else {
-            return "no class loader";
-        }
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/SDE.java b/ojluni/src/main/java/com/sun/tools/jdi/SDE.java
deleted file mode 100755
index b2389f7..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/SDE.java
+++ /dev/null
@@ -1,686 +0,0 @@
-/*
- * Copyright (c) 2001, 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.
- */
-
-package com.sun.tools.jdi;
-
-import com.sun.jdi.*;
-
-import java.util.*;
-import java.io.File;
-
-class SDE {
-    private static final int INIT_SIZE_FILE = 3;
-    private static final int INIT_SIZE_LINE = 100;
-    private static final int INIT_SIZE_STRATUM = 3;
-
-    static final String BASE_STRATUM_NAME = "Java";
-
-    /* for C capatibility */
-    static final String NullString = null;
-
-    private class FileTableRecord {
-        int fileId;
-        String sourceName;
-        String sourcePath; // do not read - use accessor
-        boolean isConverted = false;
-
-        /**
-         * Return the sourcePath, computing it if not set.
-         * If set, convert '/' in the sourcePath to the
-         * local file separator.
-         */
-        String getSourcePath(ReferenceTypeImpl refType) {
-            if (!isConverted) {
-                if (sourcePath == null) {
-                    sourcePath = refType.baseSourceDir() + sourceName;
-                } else {
-                    StringBuffer buf = new StringBuffer();
-                    for (int i = 0; i < sourcePath.length(); ++i) {
-                        char ch = sourcePath.charAt(i);
-                        if (ch == '/') {
-                            buf.append(File.separatorChar);
-                        } else {
-                            buf.append(ch);
-                        }
-                    }
-                    sourcePath = buf.toString();
-                }
-                isConverted = true;
-            }
-            return sourcePath;
-        }
-    }
-
-    private class LineTableRecord {
-        int jplsStart;
-        int jplsEnd;
-        int jplsLineInc;
-        int njplsStart;
-        int njplsEnd;
-        int fileId;
-    }
-
-    private class StratumTableRecord {
-        String id;
-        int fileIndex;
-        int lineIndex;
-    }
-
-    class Stratum {
-        private final int sti; /* stratum index */
-
-        private Stratum(int sti) {
-            this.sti = sti;
-        }
-
-        String id() {
-            return stratumTable[sti].id;
-        }
-
-        boolean isJava() {
-            return sti == baseStratumIndex;
-        }
-
-        /**
-         * Return all the sourceNames for this stratum.
-         * Look from our starting fileIndex upto the starting
-         * fileIndex of next stratum - can do this since there
-         * is always a terminator stratum.
-         * Default sourceName (the first one) must be first.
-         */
-        List<String> sourceNames(ReferenceTypeImpl refType) {
-            int i;
-            int fileIndexStart = stratumTable[sti].fileIndex;
-            /* one past end */
-            int fileIndexEnd = stratumTable[sti+1].fileIndex;
-            List<String> result = new ArrayList<String>(fileIndexEnd - fileIndexStart);
-            for (i = fileIndexStart; i < fileIndexEnd; ++i) {
-                result.add(fileTable[i].sourceName);
-            }
-            return result;
-        }
-
-        /**
-         * Return all the sourcePaths for this stratum.
-         * Look from our starting fileIndex upto the starting
-         * fileIndex of next stratum - can do this since there
-         * is always a terminator stratum.
-         * Default sourcePath (the first one) must be first.
-         */
-        List<String> sourcePaths(ReferenceTypeImpl refType) {
-            int i;
-            int fileIndexStart = stratumTable[sti].fileIndex;
-            /* one past end */
-            int fileIndexEnd = stratumTable[sti+1].fileIndex;
-            List<String> result = new ArrayList<String>(fileIndexEnd - fileIndexStart);
-            for (i = fileIndexStart; i < fileIndexEnd; ++i) {
-                result.add(fileTable[i].getSourcePath(refType));
-            }
-            return result;
-        }
-
-        LineStratum lineStratum(ReferenceTypeImpl refType,
-                                int jplsLine) {
-            int lti = stiLineTableIndex(sti, jplsLine);
-            if (lti < 0) {
-                return null;
-            } else {
-                return new LineStratum(sti, lti, refType,
-                                       jplsLine);
-            }
-        }
-    }
-
-    class LineStratum {
-        private final int sti; /* stratum index */
-        private final int lti; /* line table index */
-        private final ReferenceTypeImpl refType;
-        private final int jplsLine;
-        private String sourceName = null;
-        private String sourcePath = null;
-
-        private LineStratum(int sti, int lti,
-                            ReferenceTypeImpl refType,
-                            int jplsLine) {
-            this.sti = sti;
-            this.lti = lti;
-            this.refType = refType;
-            this.jplsLine = jplsLine;
-        }
-
-        public boolean equals(Object obj) {
-            if ((obj != null) && (obj instanceof LineStratum)) {
-                LineStratum other = (LineStratum)obj;
-                return (lti == other.lti) &&
-                       (sti == other.sti) &&
-                       (lineNumber() == other.lineNumber()) &&
-                       (refType.equals(other.refType));
-            } else {
-                return false;
-            }
-        }
-
-        int lineNumber() {
-            return stiLineNumber(sti, lti, jplsLine);
-        }
-
-        /**
-         * Fetch the source name and source path for
-         * this line, converting or constructing
-         * the source path if needed.
-         */
-        void getSourceInfo() {
-            if (sourceName != null) {
-                // already done
-                return;
-            }
-            int fti = stiFileTableIndex(sti, lti);
-            if (fti == -1) {
-                throw new InternalError(
-              "Bad SourceDebugExtension, no matching source id " +
-              lineTable[lti].fileId + " jplsLine: " + jplsLine);
-            }
-            FileTableRecord ftr = fileTable[fti];
-            sourceName = ftr.sourceName;
-            sourcePath = ftr.getSourcePath(refType);
-        }
-
-        String sourceName() {
-            getSourceInfo();
-            return sourceName;
-        }
-
-        String sourcePath() {
-            getSourceInfo();
-            return sourcePath;
-        }
-    }
-
-    private FileTableRecord[] fileTable = null;
-    private LineTableRecord[] lineTable = null;
-    private StratumTableRecord[] stratumTable = null;
-
-    private int fileIndex = 0;
-    private int lineIndex = 0;
-    private int stratumIndex = 0;
-    private int currentFileId = 0;
-
-    private int defaultStratumIndex = -1;
-    private int baseStratumIndex = -2; /* so as not to match -1 above */
-    private int sdePos = 0;
-
-    final String sourceDebugExtension;
-    String jplsFilename = null;
-    String defaultStratumId = null;
-    boolean isValid = false;
-
-    SDE(String sourceDebugExtension) {
-        this.sourceDebugExtension = sourceDebugExtension;
-        decode();
-    }
-
-    SDE() {
-        this.sourceDebugExtension = null;
-        createProxyForAbsentSDE();
-    }
-
-    char sdePeek() {
-        if (sdePos >= sourceDebugExtension.length()) {
-            syntax();
-        }
-        return sourceDebugExtension.charAt(sdePos);
-    }
-
-    char sdeRead() {
-        if (sdePos >= sourceDebugExtension.length()) {
-            syntax();
-        }
-        return sourceDebugExtension.charAt(sdePos++);
-    }
-
-    void sdeAdvance() {
-        sdePos++;
-    }
-
-    void syntax() {
-        throw new InternalError("bad SourceDebugExtension syntax - position " +
-                                sdePos);
-    }
-
-    void syntax(String msg) {
-        throw new InternalError("bad SourceDebugExtension syntax: " + msg);
-    }
-
-    void assureLineTableSize() {
-        int len = lineTable == null? 0 : lineTable.length;
-        if (lineIndex >= len) {
-            int i;
-            int newLen = len == 0? INIT_SIZE_LINE : len * 2;
-            LineTableRecord[] newTable = new LineTableRecord[newLen];
-            for (i = 0; i < len; ++i) {
-                newTable[i] = lineTable[i];
-            }
-            for (; i < newLen; ++i) {
-                newTable[i] = new LineTableRecord();
-            }
-            lineTable = newTable;
-        }
-    }
-
-    void assureFileTableSize() {
-        int len = fileTable == null? 0 : fileTable.length;
-        if (fileIndex >= len) {
-            int i;
-            int newLen = len == 0? INIT_SIZE_FILE : len * 2;
-            FileTableRecord[] newTable = new FileTableRecord[newLen];
-            for (i = 0; i < len; ++i) {
-                newTable[i] = fileTable[i];
-            }
-            for (; i < newLen; ++i) {
-                newTable[i] = new FileTableRecord();
-            }
-            fileTable = newTable;
-        }
-    }
-
-    void assureStratumTableSize() {
-        int len = stratumTable == null? 0 : stratumTable.length;
-        if (stratumIndex >= len) {
-            int i;
-            int newLen = len == 0? INIT_SIZE_STRATUM : len * 2;
-            StratumTableRecord[] newTable = new StratumTableRecord[newLen];
-            for (i = 0; i < len; ++i) {
-                newTable[i] = stratumTable[i];
-            }
-            for (; i < newLen; ++i) {
-                newTable[i] = new StratumTableRecord();
-            }
-            stratumTable = newTable;
-        }
-    }
-
-    String readLine() {
-        StringBuffer sb = new StringBuffer();
-        char ch;
-
-        ignoreWhite();
-        while (((ch = sdeRead()) != '\n') && (ch != '\r')) {
-            sb.append(ch);
-        }
-        // check for CR LF
-        if ((ch == '\r') && (sdePeek() == '\n')) {
-            sdeRead();
-        }
-        ignoreWhite(); // leading white
-        return sb.toString();
-    }
-
-    private int defaultStratumTableIndex() {
-        if ((defaultStratumIndex == -1) && (defaultStratumId != null)) {
-            defaultStratumIndex =
-                stratumTableIndex(defaultStratumId);
-        }
-        return defaultStratumIndex;
-    }
-
-    int stratumTableIndex(String stratumId) {
-        int i;
-
-        if (stratumId == null) {
-            return defaultStratumTableIndex();
-        }
-        for (i = 0; i < (stratumIndex-1); ++i) {
-            if (stratumTable[i].id.equals(stratumId)) {
-                return i;
-            }
-        }
-        return defaultStratumTableIndex();
-    }
-
-    Stratum stratum(String stratumID) {
-        int sti = stratumTableIndex(stratumID);
-        return new Stratum(sti);
-    }
-
-    List<String> availableStrata() {
-        List<String> strata = new ArrayList<String>();
-
-        for (int i = 0; i < (stratumIndex-1); ++i) {
-            StratumTableRecord rec = stratumTable[i];
-            strata.add(rec.id);
-        }
-        return strata;
-    }
-
-/*****************************
- * below functions/methods are written to compile under either Java or C
- *
- * Needed support functions:
- *   sdePeek()
- *   sdeRead()
- *   sdeAdvance()
- *   readLine()
- *   assureLineTableSize()
- *   assureFileTableSize()
- *   assureStratumTableSize()
- *   syntax()
- *
- *   stratumTableIndex(String)
- *
- * Needed support variables:
- *   lineTable
- *   lineIndex
- *   fileTable
- *   fileIndex
- *   currentFileId
- *
- * Needed types:
- *   String
- *
- * Needed constants:
- *   NullString
- */
-
-    void ignoreWhite() {
-        char ch;
-
-        while (((ch = sdePeek()) == ' ') || (ch == '\t')) {
-            sdeAdvance();
-        }
-    }
-
-    void ignoreLine() {
-        char ch;
-
-        while (((ch = sdeRead()) != '\n') && (ch != '\r')) {
-        }
-        /* check for CR LF */
-        if ((ch == '\r') && (sdePeek() == '\n')) {
-            sdeAdvance();
-        }
-        ignoreWhite(); /* leading white */
-    }
-
-    int readNumber() {
-        int value = 0;
-        char ch;
-
-        ignoreWhite();
-        while (((ch = sdePeek()) >= '0') && (ch <= '9')) {
-            sdeAdvance();
-            value = (value * 10) + ch - '0';
-        }
-        ignoreWhite();
-        return value;
-    }
-
-    void storeFile(int fileId, String sourceName, String sourcePath) {
-        assureFileTableSize();
-        fileTable[fileIndex].fileId = fileId;
-        fileTable[fileIndex].sourceName = sourceName;
-        fileTable[fileIndex].sourcePath = sourcePath;
-        ++fileIndex;
-    }
-
-    void fileLine() {
-        int hasAbsolute = 0; /* acts as boolean */
-        int fileId;
-        String sourceName;
-        String sourcePath = null;
-
-        /* is there an absolute filename? */
-        if (sdePeek() == '+') {
-            sdeAdvance();
-            hasAbsolute = 1;
-        }
-        fileId = readNumber();
-        sourceName = readLine();
-        if (hasAbsolute == 1) {
-            sourcePath = readLine();
-        }
-
-        storeFile(fileId, sourceName, sourcePath);
-    }
-
-    void storeLine(int jplsStart, int jplsEnd, int jplsLineInc,
-                  int njplsStart, int njplsEnd, int fileId) {
-        assureLineTableSize();
-        lineTable[lineIndex].jplsStart = jplsStart;
-        lineTable[lineIndex].jplsEnd = jplsEnd;
-        lineTable[lineIndex].jplsLineInc = jplsLineInc;
-        lineTable[lineIndex].njplsStart = njplsStart;
-        lineTable[lineIndex].njplsEnd = njplsEnd;
-        lineTable[lineIndex].fileId = fileId;
-        ++lineIndex;
-    }
-
-    /**
-     * Parse line translation info.  Syntax is
-     *     <NJ-start-line> [ # <file-id> ] [ , <line-count> ] :
-     *                 <J-start-line> [ , <line-increment> ] CR
-     */
-    void lineLine() {
-        int lineCount = 1;
-        int lineIncrement = 1;
-        int njplsStart;
-        int jplsStart;
-
-        njplsStart = readNumber();
-
-        /* is there a fileID? */
-        if (sdePeek() == '#') {
-            sdeAdvance();
-            currentFileId = readNumber();
-        }
-
-        /* is there a line count? */
-        if (sdePeek() == ',') {
-            sdeAdvance();
-            lineCount = readNumber();
-        }
-
-        if (sdeRead() != ':') {
-            syntax();
-        }
-        jplsStart = readNumber();
-        if (sdePeek() == ',') {
-            sdeAdvance();
-            lineIncrement = readNumber();
-        }
-        ignoreLine(); /* flush the rest */
-
-        storeLine(jplsStart,
-                  jplsStart + (lineCount * lineIncrement) -1,
-                  lineIncrement,
-                  njplsStart,
-                  njplsStart + lineCount -1,
-                  currentFileId);
-    }
-
-    /**
-     * Until the next stratum section, everything after this
-     * is in stratumId - so, store the current indicies.
-     */
-    void storeStratum(String stratumId) {
-        /* remove redundant strata */
-        if (stratumIndex > 0) {
-            if ((stratumTable[stratumIndex-1].fileIndex
-                                            == fileIndex) &&
-                (stratumTable[stratumIndex-1].lineIndex
-                                            == lineIndex)) {
-                /* nothing changed overwrite it */
-                --stratumIndex;
-            }
-        }
-        /* store the results */
-        assureStratumTableSize();
-        stratumTable[stratumIndex].id = stratumId;
-        stratumTable[stratumIndex].fileIndex = fileIndex;
-        stratumTable[stratumIndex].lineIndex = lineIndex;
-        ++stratumIndex;
-        currentFileId = 0;
-    }
-
-    /**
-     * The beginning of a stratum's info
-     */
-    void stratumSection() {
-        storeStratum(readLine());
-    }
-
-    void fileSection() {
-        ignoreLine();
-        while (sdePeek() != '*') {
-            fileLine();
-        }
-    }
-
-    void lineSection() {
-        ignoreLine();
-        while (sdePeek() != '*') {
-            lineLine();
-        }
-    }
-
-    /**
-     * Ignore a section we don't know about.
-     */
-    void ignoreSection() {
-        ignoreLine();
-        while (sdePeek() != '*') {
-            ignoreLine();
-        }
-    }
-
-    /**
-     * A base "Java" stratum is always available, though
-     * it is not in the SourceDebugExtension.
-     * Create the base stratum.
-     */
-    void createJavaStratum() {
-        baseStratumIndex = stratumIndex;
-        storeStratum(BASE_STRATUM_NAME);
-        storeFile(1, jplsFilename, NullString);
-        /* JPL line numbers cannot exceed 65535 */
-        storeLine(1, 65536, 1, 1, 65536, 1);
-        storeStratum("Aux"); /* in case they don't declare */
-    }
-
-    /**
-     * Decode a SourceDebugExtension which is in SourceMap format.
-     * This is the entry point into the recursive descent parser.
-     */
-    void decode() {
-        /* check for "SMAP" - allow EOF if not ours */
-        if ((sourceDebugExtension.length() < 4) ||
-            (sdeRead() != 'S') ||
-            (sdeRead() != 'M') ||
-            (sdeRead() != 'A') ||
-            (sdeRead() != 'P')) {
-            return; /* not our info */
-        }
-        ignoreLine(); /* flush the rest */
-        jplsFilename = readLine();
-        defaultStratumId = readLine();
-        createJavaStratum();
-        while (true) {
-            if (sdeRead() != '*') {
-                syntax();
-            }
-            switch (sdeRead()) {
-                case 'S':
-                    stratumSection();
-                    break;
-                case 'F':
-                    fileSection();
-                    break;
-                case 'L':
-                    lineSection();
-                    break;
-                case 'E':
-                    /* set end points */
-                    storeStratum("*terminator*");
-                    isValid = true;
-                    return;
-                default:
-                    ignoreSection();
-            }
-        }
-    }
-
-    void createProxyForAbsentSDE() {
-        jplsFilename = null;
-        defaultStratumId = BASE_STRATUM_NAME;
-        defaultStratumIndex = stratumIndex;
-        createJavaStratum();
-        storeStratum("*terminator*");
-    }
-
-    /***************** query functions ***********************/
-
-    private int stiLineTableIndex(int sti, int jplsLine) {
-        int i;
-        int lineIndexStart;
-        int lineIndexEnd;
-
-        lineIndexStart = stratumTable[sti].lineIndex;
-        /* one past end */
-        lineIndexEnd = stratumTable[sti+1].lineIndex;
-        for (i = lineIndexStart; i < lineIndexEnd; ++i) {
-            if ((jplsLine >= lineTable[i].jplsStart) &&
-                            (jplsLine <= lineTable[i].jplsEnd)) {
-                return i;
-            }
-        }
-        return -1;
-    }
-
-    private int stiLineNumber(int sti, int lti, int jplsLine) {
-        return lineTable[lti].njplsStart +
-                (((jplsLine - lineTable[lti].jplsStart) /
-                                   lineTable[lti].jplsLineInc));
-    }
-
-    private int fileTableIndex(int sti, int fileId) {
-        int i;
-        int fileIndexStart = stratumTable[sti].fileIndex;
-        /* one past end */
-        int fileIndexEnd = stratumTable[sti+1].fileIndex;
-        for (i = fileIndexStart; i < fileIndexEnd; ++i) {
-            if (fileTable[i].fileId == fileId) {
-                return i;
-            }
-        }
-        return -1;
-    }
-
-    private int stiFileTableIndex(int sti, int lti) {
-        return fileTableIndex(sti, lineTable[lti].fileId);
-    }
-
-    boolean isValid() {
-        return isValid;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/ShortTypeImpl.java b/ojluni/src/main/java/com/sun/tools/jdi/ShortTypeImpl.java
deleted file mode 100755
index fa8795b..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/ShortTypeImpl.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (c) 1998, 1999, 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.tools.jdi;
-
-import com.sun.jdi.*;
-
-public class ShortTypeImpl extends PrimitiveTypeImpl implements ShortType {
-    ShortTypeImpl(VirtualMachine vm) {
-        super(vm);
-    }
-
-
-    public String signature() {
-        return String.valueOf((char)JDWP.Tag.SHORT);
-    }
-
-    PrimitiveValue convert(PrimitiveValue value) throws InvalidTypeException {
-        return vm.mirrorOf(((PrimitiveValueImpl)value).checkedShortValue());
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/ShortValueImpl.java b/ojluni/src/main/java/com/sun/tools/jdi/ShortValueImpl.java
deleted file mode 100755
index 7ed631d..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/ShortValueImpl.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package com.sun.tools.jdi;
-
-import com.sun.jdi.*;
-
-public class ShortValueImpl extends PrimitiveValueImpl
-                            implements ShortValue {
-    private short value;
-
-    ShortValueImpl(VirtualMachine aVm,short aValue) {
-        super(aVm);
-
-        value = aValue;
-    }
-
-    public boolean equals(Object obj) {
-        if ((obj != null) && (obj instanceof ShortValue)) {
-            return (value == ((ShortValue)obj).value()) &&
-                   super.equals(obj);
-        } else {
-            return false;
-        }
-    }
-
-    public int hashCode() {
-        /*
-         * TO DO: Better hash code
-         */
-        return intValue();
-    }
-
-    public int compareTo(ShortValue obj) {
-        short other = obj.value();
-        return value() - other;
-    }
-
-    public Type type() {
-        return vm.theShortType();
-    }
-
-    public short value() {
-        return value;
-    }
-
-    public boolean booleanValue() {
-        return(value == 0)?false:true;
-    }
-
-    public byte byteValue() {
-        return(byte)value;
-    }
-
-    public char charValue() {
-        return(char)value;
-    }
-
-    public short shortValue() {
-        return(short)value;
-    }
-
-    public int intValue() {
-        return(int)value;
-    }
-
-    public long longValue() {
-        return(long)value;
-    }
-
-    public float floatValue() {
-        return(float)value;
-    }
-
-    public double doubleValue() {
-        return(double)value;
-    }
-
-    byte checkedByteValue() throws InvalidTypeException {
-        if ((value > Byte.MAX_VALUE) || (value < Byte.MIN_VALUE)) {
-            throw new InvalidTypeException("Can't convert " + value + " to byte");
-        } else {
-            return super.checkedByteValue();
-        }
-    }
-
-    char checkedCharValue() throws InvalidTypeException {
-        if ((value > Character.MAX_VALUE) || (value < Character.MIN_VALUE)) {
-            throw new InvalidTypeException("Can't convert " + value + " to char");
-        } else {
-            return super.checkedCharValue();
-        }
-    }
-
-    public String toString() {
-        return "" + value;
-    }
-
-    byte typeValueKey() {
-        return JDWP.Tag.SHORT;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/SocketAttachingConnector.java b/ojluni/src/main/java/com/sun/tools/jdi/SocketAttachingConnector.java
deleted file mode 100755
index 992dacdf..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/SocketAttachingConnector.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-package com.sun.tools.jdi;
-
-import com.sun.jdi.VirtualMachine;
-import com.sun.jdi.connect.*;
-import com.sun.jdi.connect.spi.*;
-import java.util.Map;
-import java.util.HashMap;
-import java.io.IOException;
-import java.net.InetAddress;
-import java.net.UnknownHostException;
-
-/*
- * An AttachingConnector that uses the SocketTransportService
- */
-public class SocketAttachingConnector extends GenericAttachingConnector {
-
-    static final String ARG_PORT = "port";
-    static final String ARG_HOST = "hostname";
-
-    public SocketAttachingConnector() {
-        super(new SocketTransportService());
-
-        String defaultHostName;
-        try {
-            defaultHostName = InetAddress.getLocalHost().getHostName();
-        } catch (UnknownHostException e) {
-            defaultHostName = "";
-        }
-
-        addStringArgument(
-            ARG_HOST,
-            getString("socket_attaching.host.label"),
-            getString("socket_attaching.host"),
-            defaultHostName,
-            false);
-
-        addIntegerArgument(
-            ARG_PORT,
-            getString("socket_attaching.port.label"),
-            getString("socket_attaching.port"),
-            "",
-            true,
-            0, Integer.MAX_VALUE);
-
-        transport = new Transport() {
-            public String name() {
-                return "dt_socket";     // for compatability reasons
-            }
-        };
-
-    }
-
-    /*
-     * Create an "address" from the hostname and port connector
-     * arguments and attach to the target VM.
-     */
-    public VirtualMachine
-        attach(Map<String,? extends Connector.Argument> arguments)
-        throws IOException, IllegalConnectorArgumentsException
-    {
-        String host = argument(ARG_HOST, arguments).value();
-        if (host.length() > 0) {
-            host = host + ":";
-        }
-        String address = host + argument(ARG_PORT, arguments).value();
-        return super.attach(address, arguments);
-    }
-
-    public String name() {
-       return "com.sun.jdi.SocketAttach";
-    }
-
-    public String description() {
-       return getString("socket_attaching.description");
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/SocketListeningConnector.java b/ojluni/src/main/java/com/sun/tools/jdi/SocketListeningConnector.java
deleted file mode 100755
index acfda94..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/SocketListeningConnector.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-package com.sun.tools.jdi;
-
-import com.sun.jdi.connect.*;
-import com.sun.jdi.connect.spi.*;
-import java.util.Map;
-import java.util.HashMap;
-import java.io.IOException;
-
-/*
- * An ListeningConnector that uses the SocketTransportService
- */
-public class SocketListeningConnector extends GenericListeningConnector {
-
-    static final String ARG_PORT = "port";
-    static final String ARG_LOCALADDR = "localAddress";
-
-    public SocketListeningConnector() {
-        super(new SocketTransportService());
-
-        addIntegerArgument(
-            ARG_PORT,
-            getString("socket_listening.port.label"),
-            getString("socket_listening.port"),
-            "",
-            false,
-            0, Integer.MAX_VALUE);
-
-        addStringArgument(
-            ARG_LOCALADDR,
-            getString("socket_listening.localaddr.label"),
-            getString("socket_listening.localaddr"),
-            "",                                         // default is wildcard
-            false);
-
-        transport = new Transport() {
-            public String name() {
-                return "dt_socket";     // for compatability reasons
-            }
-        };
-    }
-
-
-    public String
-        startListening(Map<String,? extends Connector.Argument> args)
-        throws IOException, IllegalConnectorArgumentsException
-    {
-        String port = argument(ARG_PORT, args).value();
-        String localaddr = argument(ARG_LOCALADDR, args).value();
-
-        // default to system chosen port
-        if (port.length() == 0) {
-            port = "0";
-        }
-
-        if (localaddr.length() > 0) {
-           localaddr = localaddr + ":" + port;
-        } else {
-           localaddr = port;
-        }
-
-        return super.startListening(localaddr, args);
-    }
-
-    public String name() {
-        return "com.sun.jdi.SocketListen";
-    }
-
-    public String description() {
-        return getString("socket_listening.description");
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/SocketTransportService.java b/ojluni/src/main/java/com/sun/tools/jdi/SocketTransportService.java
deleted file mode 100755
index 5585a00..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/SocketTransportService.java
+++ /dev/null
@@ -1,536 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package com.sun.tools.jdi;
-
-import com.sun.jdi.*;
-import com.sun.jdi.connect.*;
-import com.sun.jdi.connect.spi.*;
-import java.net.*;
-import java.io.*;
-import java.util.Map;
-import java.util.ResourceBundle;
-
-/*
- * A transport service based on a TCP connection between the
- * debugger and debugee.
- */
-
-public class SocketTransportService extends TransportService {
-    private ResourceBundle messages = null;
-
-    /**
-     * The listener returned by startListening encapsulates
-     * the ServerSocket.
-     */
-    static class SocketListenKey extends ListenKey {
-        ServerSocket ss;
-
-        SocketListenKey(ServerSocket ss) {
-            this.ss = ss;
-        }
-
-        ServerSocket socket() {
-            return ss;
-        }
-
-        /*
-         * Returns the string representation of the address that this
-         * listen key represents.
-         */
-        public String address() {
-            InetAddress address = ss.getInetAddress();
-
-            /*
-             * If bound to the wildcard address then use current local
-             * hostname. In the event that we don't know our own hostname
-             * then assume that host supports IPv4 and return something to
-             * represent the loopback address.
-             */
-            if (address.isAnyLocalAddress()) {
-                try {
-                    address = InetAddress.getLocalHost();
-                } catch (UnknownHostException uhe) {
-                    byte[] loopback = {0x7f,0x00,0x00,0x01};
-                    try {
-                        address = InetAddress.getByAddress("127.0.0.1", loopback);
-                    } catch (UnknownHostException x) {
-                        throw new InternalError("unable to get local hostname");
-                    }
-                }
-            }
-
-            /*
-             * Now decide if we return a hostname or IP address. Where possible
-             * return a hostname but in the case that we are bound to an
-             * address that isn't registered in the name service then we
-             * return an address.
-             */
-            String result;
-            String hostname = address.getHostName();
-            String hostaddr = address.getHostAddress();
-            if (hostname.equals(hostaddr)) {
-                if (address instanceof Inet6Address) {
-                    result = "[" + hostaddr + "]";
-                } else {
-                    result = hostaddr;
-                }
-            } else {
-                result = hostname;
-            }
-
-            /*
-             * Finally return "hostname:port", "ipv4-address:port" or
-             * "[ipv6-address]:port".
-             */
-            return result + ":" + ss.getLocalPort();
-        }
-
-        public String toString() {
-            return address();
-        }
-    }
-
-    /**
-     * Handshake with the debuggee
-     */
-    void handshake(Socket s, long timeout) throws IOException {
-        s.setSoTimeout((int)timeout);
-
-        byte[] hello = "JDWP-Handshake".getBytes("UTF-8");
-        s.getOutputStream().write(hello);
-
-        byte[] b = new byte[hello.length];
-        int received = 0;
-        while (received < hello.length) {
-            int n;
-            try {
-                n = s.getInputStream().read(b, received, hello.length-received);
-            } catch (SocketTimeoutException x) {
-                throw new IOException("handshake timeout");
-            }
-            if (n < 0) {
-                s.close();
-                throw new IOException("handshake failed - connection prematurally closed");
-            }
-            received += n;
-        }
-        for (int i=0; i<hello.length; i++) {
-            if (b[i] != hello[i]) {
-                throw new IOException("handshake failed - unrecognized message from target VM");
-            }
-        }
-
-        // disable read timeout
-        s.setSoTimeout(0);
-    }
-
-    /**
-     * No-arg constructor
-     */
-    public SocketTransportService() {
-    }
-
-    /**
-     * The name of this transport service
-     */
-    public String name() {
-        return "Socket";
-    }
-
-    /**
-     * Return localized description of this transport service
-     */
-    public String description() {
-        synchronized (this) {
-            if (messages == null) {
-                messages = ResourceBundle.getBundle("com.sun.tools.jdi.resources.jdi");
-            }
-        }
-        return messages.getString("socket_transportservice.description");
-    }
-
-    /**
-     * Return the capabilities of this transport service
-     */
-    public Capabilities capabilities() {
-        return new SocketTransportServiceCapabilities();
-    }
-
-
-    /**
-     * Attach to the specified address with optional attach and handshake
-     * timeout.
-     */
-    public Connection attach(String address, long attachTimeout, long handshakeTimeout)
-        throws IOException {
-
-        if (address == null) {
-            throw new NullPointerException("address is null");
-        }
-        if (attachTimeout < 0 || handshakeTimeout < 0) {
-            throw new IllegalArgumentException("timeout is negative");
-        }
-
-        int splitIndex = address.indexOf(':');
-        String host;
-        String portStr;
-        if (splitIndex < 0) {
-            host = InetAddress.getLocalHost().getHostName();
-            portStr = address;
-        } else {
-            host = address.substring(0, splitIndex);
-            portStr = address.substring(splitIndex+1);
-        }
-
-        int port;
-        try {
-            port = Integer.decode(portStr).intValue();
-        } catch (NumberFormatException e) {
-            throw new IllegalArgumentException(
-                "unable to parse port number in address");
-        }
-
-
-        // open TCP connection to VM
-
-        InetSocketAddress sa = new InetSocketAddress(host, port);
-        Socket s = new Socket();
-        try {
-            s.connect(sa, (int)attachTimeout);
-        } catch (SocketTimeoutException exc) {
-            try {
-                s.close();
-            } catch (IOException x) { }
-            throw new TransportTimeoutException("timed out trying to establish connection");
-        }
-
-        // handshake with the target VM
-        try {
-            handshake(s, handshakeTimeout);
-        } catch (IOException exc) {
-            try {
-                s.close();
-            } catch (IOException x) { }
-            throw exc;
-        }
-
-        return new SocketConnection(s);
-    }
-
-    /*
-     * Listen on the specified address and port. Return a listener
-     * that encapsulates the ServerSocket.
-     */
-    ListenKey startListening(String localaddress, int port) throws IOException {
-        InetSocketAddress sa;
-        if (localaddress == null) {
-            sa = new InetSocketAddress(port);
-        } else {
-            sa = new InetSocketAddress(localaddress, port);
-        }
-        ServerSocket ss = new ServerSocket();
-        ss.bind(sa);
-        return new SocketListenKey(ss);
-    }
-
-    /**
-     * Listen on the specified address
-     */
-    public ListenKey startListening(String address) throws IOException {
-        // use ephemeral port if address isn't specified.
-        if (address == null || address.length() == 0) {
-            address = "0";
-        }
-
-        int splitIndex = address.indexOf(':');
-        String localaddr = null;
-        if (splitIndex >= 0) {
-            localaddr = address.substring(0, splitIndex);
-            address = address.substring(splitIndex+1);
-        }
-
-        int port;
-        try {
-            port = Integer.decode(address).intValue();
-        } catch (NumberFormatException e) {
-            throw new IllegalArgumentException(
-                    "unable to parse port number in address");
-        }
-
-        return startListening(localaddr, port);
-    }
-
-    /**
-     * Listen on the default address
-     */
-    public ListenKey startListening() throws IOException {
-        return startListening(null, 0);
-    }
-
-    /**
-     * Stop the listener
-     */
-    public void stopListening(ListenKey listener) throws IOException {
-        if (!(listener instanceof SocketListenKey)) {
-            throw new IllegalArgumentException("Invalid listener");
-        }
-
-        synchronized (listener) {
-            ServerSocket ss = ((SocketListenKey)listener).socket();
-
-            // if the ServerSocket has been closed it means
-            // the listener is invalid
-            if (ss.isClosed()) {
-                throw new IllegalArgumentException("Invalid listener");
-            }
-            ss.close();
-        }
-    }
-
-    /**
-     * Accept a connection from a debuggee and handshake with it.
-     */
-    public Connection accept(ListenKey listener, long acceptTimeout, long handshakeTimeout) throws IOException {
-        if (acceptTimeout < 0 || handshakeTimeout < 0) {
-            throw new IllegalArgumentException("timeout is negative");
-        }
-        if (!(listener instanceof SocketListenKey)) {
-            throw new IllegalArgumentException("Invalid listener");
-        }
-        ServerSocket ss;
-
-        // obtain the ServerSocket from the listener - if the
-        // socket is closed it means the listener is invalid
-        synchronized (listener) {
-            ss = ((SocketListenKey)listener).socket();
-            if (ss.isClosed()) {
-               throw new IllegalArgumentException("Invalid listener");
-            }
-        }
-
-        // from here onwards it's possible that the ServerSocket
-        // may be closed by a call to stopListening - that's okay
-        // because the ServerSocket methods will throw an
-        // IOException indicating the socket is closed.
-        //
-        // Additionally, it's possible that another thread calls accept
-        // with a different accept timeout - that creates a same race
-        // condition between setting the timeout and calling accept.
-        // As it is such an unlikely scenario (requires both threads
-        // to be using the same listener we've chosen to ignore the issue).
-
-        ss.setSoTimeout((int)acceptTimeout);
-        Socket s;
-        try {
-            s = ss.accept();
-        } catch (SocketTimeoutException x) {
-            throw new TransportTimeoutException("timeout waiting for connection");
-        }
-
-        // handshake here
-        handshake(s, handshakeTimeout);
-
-        return new SocketConnection(s);
-    }
-
-    public String toString() {
-       return name();
-    }
-}
-
-
-/*
- * The Connection returned by attach and accept is one of these
- */
-class SocketConnection extends Connection {
-    private Socket socket;
-    private boolean closed = false;
-    private OutputStream socketOutput;
-    private InputStream socketInput;
-    private Object receiveLock = new Object();
-    private Object sendLock = new Object();
-    private Object closeLock = new Object();
-
-    SocketConnection(Socket socket) throws IOException {
-        this.socket = socket;
-        socket.setTcpNoDelay(true);
-        socketInput = socket.getInputStream();
-        socketOutput = socket.getOutputStream();
-    }
-
-    public void close() throws IOException {
-        synchronized (closeLock) {
-           if (closed) {
-                return;
-           }
-           socketOutput.close();
-           socketInput.close();
-           socket.close();
-           closed = true;
-        }
-    }
-
-    public boolean isOpen() {
-        synchronized (closeLock) {
-            return !closed;
-        }
-    }
-
-    public byte[] readPacket() throws IOException {
-        if (!isOpen()) {
-            throw new ClosedConnectionException("connection is closed");
-        }
-        synchronized (receiveLock) {
-            int b1,b2,b3,b4;
-
-            // length
-            try {
-                b1 = socketInput.read();
-                b2 = socketInput.read();
-                b3 = socketInput.read();
-                b4 = socketInput.read();
-            } catch (IOException ioe) {
-                if (!isOpen()) {
-                    throw new ClosedConnectionException("connection is closed");
-                } else {
-                    throw ioe;
-                }
-            }
-
-            // EOF
-            if (b1<0) {
-               return new byte[0];
-            }
-
-            if (b2<0 || b3<0 || b4<0) {
-                throw new IOException("protocol error - premature EOF");
-            }
-
-            int len = ((b1 << 24) | (b2 << 16) | (b3 << 8) | (b4 << 0));
-
-            if (len < 0) {
-                throw new IOException("protocol error - invalid length");
-            }
-
-            byte b[] = new byte[len];
-            b[0] = (byte)b1;
-            b[1] = (byte)b2;
-            b[2] = (byte)b3;
-            b[3] = (byte)b4;
-
-            int off = 4;
-            len -= off;
-
-            while (len > 0) {
-                int count;
-                try {
-                    count = socketInput.read(b, off, len);
-                } catch (IOException ioe) {
-                    if (!isOpen()) {
-                        throw new ClosedConnectionException("connection is closed");
-                    } else {
-                        throw ioe;
-                    }
-                }
-                if (count < 0) {
-                    throw new IOException("protocol error - premature EOF");
-                }
-                len -= count;
-                off += count;
-            }
-
-            return b;
-        }
-    }
-
-    public void writePacket(byte b[]) throws IOException {
-        if (!isOpen()) {
-            throw new ClosedConnectionException("connection is closed");
-        }
-
-        /*
-         * Check the packet size
-         */
-        if (b.length < 11) {
-            throw new IllegalArgumentException("packet is insufficient size");
-        }
-        int b0 = b[0] & 0xff;
-        int b1 = b[1] & 0xff;
-        int b2 = b[2] & 0xff;
-        int b3 = b[3] & 0xff;
-        int len = ((b0 << 24) | (b1 << 16) | (b2 << 8) | (b3 << 0));
-        if (len < 11) {
-            throw new IllegalArgumentException("packet is insufficient size");
-        }
-
-        /*
-         * Check that the byte array contains the complete packet
-         */
-        if (len > b.length) {
-            throw new IllegalArgumentException("length mis-match");
-        }
-
-        synchronized (sendLock) {
-            try {
-                /*
-                 * Send the packet (ignoring any bytes that follow
-                 * the packet in the byte array).
-                 */
-                socketOutput.write(b, 0, len);
-            } catch (IOException ioe) {
-                if (!isOpen()) {
-                    throw new ClosedConnectionException("connection is closed");
-                } else {
-                    throw ioe;
-                }
-            }
-        }
-    }
-}
-
-
-/*
- * The capabilities of the socket transport service
- */
-class SocketTransportServiceCapabilities extends TransportService.Capabilities {
-
-    public boolean supportsMultipleConnections() {
-        return true;
-    }
-
-    public boolean supportsAttachTimeout() {
-        return true;
-    }
-
-    public boolean supportsAcceptTimeout() {
-        return true;
-    }
-
-    public boolean supportsHandshakeTimeout() {
-        return true;
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/StackFrameImpl.java b/ojluni/src/main/java/com/sun/tools/jdi/StackFrameImpl.java
deleted file mode 100755
index 04eeea1..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/StackFrameImpl.java
+++ /dev/null
@@ -1,404 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package com.sun.tools.jdi;
-
-import com.sun.jdi.*;
-
-import java.util.List;
-import java.util.Map;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Collections;
-
-public class StackFrameImpl extends MirrorImpl
-                            implements StackFrame, ThreadListener
-{
-    /* Once false, frame should not be used.
-     * access synchronized on (vm.state())
-     */
-    private boolean isValid = true;
-
-    private final ThreadReferenceImpl thread;
-    private final long id;
-    private final Location location;
-    private Map<String, LocalVariable> visibleVariables =  null;
-    private ObjectReference thisObject = null;
-
-    StackFrameImpl(VirtualMachine vm, ThreadReferenceImpl thread,
-                   long id, Location location) {
-        super(vm);
-        this.thread = thread;
-        this.id = id;
-        this.location = location;
-        thread.addListener(this);
-    }
-
-    /*
-     * ThreadListener implementation
-     * Must be synchronized since we must protect against
-     * sending defunct (isValid == false) stack ids to the back-end.
-     */
-    public boolean threadResumable(ThreadAction action) {
-        synchronized (vm.state()) {
-            if (isValid) {
-                isValid = false;
-                return false;   /* remove this stack frame as a listener */
-            } else {
-                throw new InternalException(
-                                  "Invalid stack frame thread listener");
-            }
-        }
-    }
-
-    void validateStackFrame() {
-        if (!isValid) {
-            throw new InvalidStackFrameException("Thread has been resumed");
-        }
-    }
-
-    /**
-     * Return the frame location.
-     * Need not be synchronized since it cannot be provably stale.
-     */
-    public Location location() {
-        validateStackFrame();
-        return location;
-    }
-
-    /**
-     * Return the thread holding the frame.
-     * Need not be synchronized since it cannot be provably stale.
-     */
-    public ThreadReference thread() {
-        validateStackFrame();
-        return thread;
-    }
-
-    public boolean equals(Object obj) {
-        if ((obj != null) && (obj instanceof StackFrameImpl)) {
-            StackFrameImpl other = (StackFrameImpl)obj;
-            return (id == other.id) &&
-                   (thread().equals(other.thread())) &&
-                   (location().equals(other.location())) &&
-                    super.equals(obj);
-        } else {
-            return false;
-        }
-    }
-
-    public int hashCode() {
-        return (thread().hashCode() << 4) + ((int)id);
-    }
-
-    public ObjectReference thisObject() {
-        validateStackFrame();
-        MethodImpl currentMethod = (MethodImpl)location.method();
-        if (currentMethod.isStatic() || currentMethod.isNative()) {
-            return null;
-        } else {
-            if (thisObject == null) {
-                PacketStream ps;
-
-                /* protect against defunct frame id */
-                synchronized (vm.state()) {
-                    validateStackFrame();
-                    ps = JDWP.StackFrame.ThisObject.
-                                      enqueueCommand(vm, thread, id);
-                }
-
-                /* actually get it, now that order is guaranteed */
-                try {
-                    thisObject = JDWP.StackFrame.ThisObject.
-                                      waitForReply(vm, ps).objectThis;
-                } catch (JDWPException exc) {
-                    switch (exc.errorCode()) {
-                    case JDWP.Error.INVALID_FRAMEID:
-                    case JDWP.Error.THREAD_NOT_SUSPENDED:
-                    case JDWP.Error.INVALID_THREAD:
-                        throw new InvalidStackFrameException();
-                    default:
-                        throw exc.toJDIException();
-                    }
-                }
-            }
-        }
-        return thisObject;
-    }
-
-    /**
-     * Build the visible variable map.
-     * Need not be synchronized since it cannot be provably stale.
-     */
-    private void createVisibleVariables() throws AbsentInformationException {
-        if (visibleVariables == null) {
-            List<LocalVariable> allVariables = location.method().variables();
-            Map<String, LocalVariable> map = new HashMap<String, LocalVariable>(allVariables.size());
-
-            for (LocalVariable variable : allVariables) {
-                String name = variable.name();
-                if (variable.isVisible(this)) {
-                    LocalVariable existing = map.get(name);
-                    if ((existing == null) ||
-                        ((LocalVariableImpl)variable).hides(existing)) {
-                        map.put(name, variable);
-                    }
-                }
-            }
-            visibleVariables = map;
-        }
-    }
-
-    /**
-     * Return the list of visible variable in the frame.
-     * Need not be synchronized since it cannot be provably stale.
-     */
-    public List<LocalVariable> visibleVariables() throws AbsentInformationException {
-        validateStackFrame();
-        createVisibleVariables();
-        List<LocalVariable> mapAsList = new ArrayList<LocalVariable>(visibleVariables.values());
-        Collections.sort(mapAsList);
-        return mapAsList;
-    }
-
-    /**
-     * Return a particular variable in the frame.
-     * Need not be synchronized since it cannot be provably stale.
-     */
-    public LocalVariable visibleVariableByName(String name) throws AbsentInformationException  {
-        validateStackFrame();
-        createVisibleVariables();
-        return visibleVariables.get(name);
-    }
-
-    public Value getValue(LocalVariable variable) {
-        List<LocalVariable> list = new ArrayList<LocalVariable>(1);
-        list.add(variable);
-        return getValues(list).get(variable);
-    }
-
-    public Map<LocalVariable, Value> getValues(List<? extends LocalVariable> variables) {
-        validateStackFrame();
-        validateMirrors(variables);
-
-        int count = variables.size();
-        JDWP.StackFrame.GetValues.SlotInfo[] slots =
-                           new JDWP.StackFrame.GetValues.SlotInfo[count];
-
-        for (int i=0; i<count; ++i) {
-            LocalVariableImpl variable = (LocalVariableImpl)variables.get(i);
-            if (!variable.isVisible(this)) {
-                throw new IllegalArgumentException(variable.name() +
-                                 " is not valid at this frame location");
-            }
-            slots[i] = new JDWP.StackFrame.GetValues.SlotInfo(variable.slot(),
-                                      (byte)variable.signature().charAt(0));
-        }
-
-        PacketStream ps;
-
-        /* protect against defunct frame id */
-        synchronized (vm.state()) {
-            validateStackFrame();
-            ps = JDWP.StackFrame.GetValues.enqueueCommand(vm, thread, id, slots);
-        }
-
-        /* actually get it, now that order is guaranteed */
-        ValueImpl[] values;
-        try {
-            values = JDWP.StackFrame.GetValues.waitForReply(vm, ps).values;
-        } catch (JDWPException exc) {
-            switch (exc.errorCode()) {
-                case JDWP.Error.INVALID_FRAMEID:
-                case JDWP.Error.THREAD_NOT_SUSPENDED:
-                case JDWP.Error.INVALID_THREAD:
-                    throw new InvalidStackFrameException();
-                default:
-                    throw exc.toJDIException();
-            }
-        }
-
-        if (count != values.length) {
-            throw new InternalException(
-                      "Wrong number of values returned from target VM");
-        }
-        Map<LocalVariable, Value> map = new HashMap<LocalVariable, Value>(count);
-        for (int i=0; i<count; ++i) {
-            LocalVariableImpl variable = (LocalVariableImpl)variables.get(i);
-            map.put(variable, values[i]);
-        }
-        return map;
-    }
-
-    public void setValue(LocalVariable variableIntf, Value valueIntf)
-        throws InvalidTypeException, ClassNotLoadedException {
-
-        validateStackFrame();
-        validateMirror(variableIntf);
-        validateMirrorOrNull(valueIntf);
-
-        LocalVariableImpl variable = (LocalVariableImpl)variableIntf;
-        ValueImpl value = (ValueImpl)valueIntf;
-
-        if (!variable.isVisible(this)) {
-            throw new IllegalArgumentException(variable.name() +
-                             " is not valid at this frame location");
-        }
-
-        try {
-            // Validate and convert value if necessary
-            value = ValueImpl.prepareForAssignment(value, variable);
-
-            JDWP.StackFrame.SetValues.SlotInfo[] slotVals =
-                new JDWP.StackFrame.SetValues.SlotInfo[1];
-            slotVals[0] = new JDWP.StackFrame.SetValues.
-                                       SlotInfo(variable.slot(), value);
-
-            PacketStream ps;
-
-            /* protect against defunct frame id */
-            synchronized (vm.state()) {
-                validateStackFrame();
-                ps = JDWP.StackFrame.SetValues.
-                                     enqueueCommand(vm, thread, id, slotVals);
-            }
-
-            /* actually set it, now that order is guaranteed */
-            try {
-                JDWP.StackFrame.SetValues.waitForReply(vm, ps);
-            } catch (JDWPException exc) {
-                switch (exc.errorCode()) {
-                case JDWP.Error.INVALID_FRAMEID:
-                case JDWP.Error.THREAD_NOT_SUSPENDED:
-                case JDWP.Error.INVALID_THREAD:
-                    throw new InvalidStackFrameException();
-                default:
-                    throw exc.toJDIException();
-                }
-            }
-        } catch (ClassNotLoadedException e) {
-            /*
-             * Since we got this exception,
-             * the variable type must be a reference type. The value
-             * we're trying to set is null, but if the variable's
-             * class has not yet been loaded through the enclosing
-             * class loader, then setting to null is essentially a
-             * no-op, and we should allow it without an exception.
-             */
-            if (value != null) {
-                throw e;
-            }
-        }
-    }
-
-    public List<Value> getArgumentValues() {
-        validateStackFrame();
-        MethodImpl mmm = (MethodImpl)location.method();
-        List<String> argSigs = mmm.argumentSignatures();
-        int count = argSigs.size();
-        JDWP.StackFrame.GetValues.SlotInfo[] slots =
-                           new JDWP.StackFrame.GetValues.SlotInfo[count];
-
-        int slot;
-        if (mmm.isStatic()) {
-            slot = 0;
-        } else {
-            slot = 1;
-        }
-        for (int ii = 0; ii < count; ++ii) {
-            char sigChar = argSigs.get(ii).charAt(0);
-            slots[ii] = new JDWP.StackFrame.GetValues.SlotInfo(slot++,(byte)sigChar);
-            if (sigChar == 'J' || sigChar == 'D') {
-                slot++;
-            }
-        }
-
-        PacketStream ps;
-
-        /* protect against defunct frame id */
-        synchronized (vm.state()) {
-            validateStackFrame();
-            ps = JDWP.StackFrame.GetValues.enqueueCommand(vm, thread, id, slots);
-        }
-
-        ValueImpl[] values;
-        try {
-            values = JDWP.StackFrame.GetValues.waitForReply(vm, ps).values;
-        } catch (JDWPException exc) {
-            switch (exc.errorCode()) {
-                case JDWP.Error.INVALID_FRAMEID:
-                case JDWP.Error.THREAD_NOT_SUSPENDED:
-                case JDWP.Error.INVALID_THREAD:
-                    throw new InvalidStackFrameException();
-                default:
-                    throw exc.toJDIException();
-            }
-        }
-
-        if (count != values.length) {
-            throw new InternalException(
-                      "Wrong number of values returned from target VM");
-        }
-        return Arrays.asList((Value[])values);
-    }
-
-    void pop() throws IncompatibleThreadStateException {
-        validateStackFrame();
-        // flush caches and disable caching until command completion
-        CommandSender sender =
-            new CommandSender() {
-                public PacketStream send() {
-                    return JDWP.StackFrame.PopFrames.enqueueCommand(vm,
-                                 thread, id);
-                }
-        };
-        try {
-            PacketStream stream = thread.sendResumingCommand(sender);
-            JDWP.StackFrame.PopFrames.waitForReply(vm, stream);
-        } catch (JDWPException exc) {
-            switch (exc.errorCode()) {
-            case JDWP.Error.THREAD_NOT_SUSPENDED:
-                throw new IncompatibleThreadStateException(
-                         "Thread not current or suspended");
-            case JDWP.Error.INVALID_THREAD:   /* zombie */
-                throw new IncompatibleThreadStateException("zombie");
-            case JDWP.Error.NO_MORE_FRAMES:
-                throw new InvalidStackFrameException(
-                         "No more frames on the stack");
-            default:
-                throw exc.toJDIException();
-            }
-        }
-
-        // enable caching - suspended again
-        vm.state().freeze();
-    }
-
-    public String toString() {
-       return location.toString() + " in thread " + thread.toString();
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/StratumLineInfo.java b/ojluni/src/main/java/com/sun/tools/jdi/StratumLineInfo.java
deleted file mode 100755
index 197b5bd..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/StratumLineInfo.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (c) 2001, 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.tools.jdi;
-
-import com.sun.jdi.*;
-
-class StratumLineInfo implements LineInfo {
-    private final String stratumID;
-    private final int lineNumber;
-    private final String sourceName;
-    private final String sourcePath;
-
-    StratumLineInfo(String stratumID, int lineNumber,
-                    String sourceName, String sourcePath) {
-        this.stratumID = stratumID;
-        this.lineNumber = lineNumber;
-        this.sourceName = sourceName;
-        this.sourcePath = sourcePath;
-    }
-
-    public String liStratum() {
-        return stratumID;
-    }
-
-    public int liLineNumber() {
-        return lineNumber;
-    }
-
-    public String liSourceName()
-                            throws AbsentInformationException {
-        if (sourceName == null) {
-            throw new AbsentInformationException();
-        }
-        return sourceName;
-    }
-
-    public String liSourcePath()
-                            throws AbsentInformationException {
-        if (sourcePath == null) {
-            throw new AbsentInformationException();
-        }
-        return sourcePath;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/StringReferenceImpl.java b/ojluni/src/main/java/com/sun/tools/jdi/StringReferenceImpl.java
deleted file mode 100755
index eeeec68..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/StringReferenceImpl.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (c) 1998, 1999, 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.tools.jdi;
-
-import com.sun.jdi.*;
-
-public class StringReferenceImpl extends ObjectReferenceImpl
-    implements StringReference
-{
-    private String value;
-
-    StringReferenceImpl(VirtualMachine aVm,long aRef) {
-        super(aVm,aRef);
-    }
-
-    public String value() {
-        if(value == null) {
-            // Does not need synchronization, since worst-case
-            // static info is fetched twice
-            try {
-                value = JDWP.StringReference.Value.
-                    process(vm, this).stringValue;
-            } catch (JDWPException exc) {
-                throw exc.toJDIException();
-            }
-        }
-        return value;
-    }
-
-    public String toString() {
-        return "\"" + value() + "\"";
-    }
-
-    byte typeValueKey() {
-        return JDWP.Tag.STRING;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/SunCommandLineLauncher.java b/ojluni/src/main/java/com/sun/tools/jdi/SunCommandLineLauncher.java
deleted file mode 100755
index 80317cf..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/SunCommandLineLauncher.java
+++ /dev/null
@@ -1,252 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package com.sun.tools.jdi;
-
-import com.sun.tools.jdi.*;
-import com.sun.jdi.connect.*;
-import com.sun.jdi.connect.spi.*;
-import com.sun.jdi.VirtualMachine;
-import java.util.Map;
-import java.util.HashMap;
-import java.util.Random;
-import java.io.IOException;
-import java.io.File;
-
-public class SunCommandLineLauncher extends AbstractLauncher implements LaunchingConnector {
-
-    static private final String ARG_HOME = "home";
-    static private final String ARG_OPTIONS = "options";
-    static private final String ARG_MAIN = "main";
-    static private final String ARG_INIT_SUSPEND = "suspend";
-    static private final String ARG_QUOTE = "quote";
-    static private final String ARG_VM_EXEC = "vmexec";
-
-    TransportService transportService;
-    Transport transport;
-    boolean usingSharedMemory = false;
-
-    TransportService transportService() {
-        return transportService;
-    }
-
-    public Transport transport() {
-        return transport;
-    }
-
-    public SunCommandLineLauncher() {
-        super();
-
-        /**
-         * By default this connector uses either the shared memory
-         * transport or the socket transport
-         */
-        try {
-            Class c = Class.forName("com.sun.tools.jdi.SharedMemoryTransportService");
-            transportService = (TransportService)c.newInstance();
-            transport = new Transport() {
-                public String name() {
-                    return "dt_shmem";
-                }
-            };
-            usingSharedMemory = true;
-        } catch (ClassNotFoundException x) {
-        } catch (UnsatisfiedLinkError x) {
-        } catch (InstantiationException x) {
-        } catch (IllegalAccessException x) {
-        };
-        if (transportService == null) {
-            transportService = new SocketTransportService();
-            transport = new Transport() {
-                public String name() {
-                    return "dt_socket";
-                }
-            };
-        }
-
-        addStringArgument(
-                ARG_HOME,
-                getString("sun.home.label"),
-                getString("sun.home"),
-                System.getProperty("java.home"),
-                false);
-        addStringArgument(
-                ARG_OPTIONS,
-                getString("sun.options.label"),
-                getString("sun.options"),
-                "",
-                false);
-        addStringArgument(
-                ARG_MAIN,
-                getString("sun.main.label"),
-                getString("sun.main"),
-                "",
-                true);
-
-        addBooleanArgument(
-                ARG_INIT_SUSPEND,
-                getString("sun.init_suspend.label"),
-                getString("sun.init_suspend"),
-                true,
-                false);
-
-        addStringArgument(
-                ARG_QUOTE,
-                getString("sun.quote.label"),
-                getString("sun.quote"),
-                "\"",
-                true);
-        addStringArgument(
-                ARG_VM_EXEC,
-                getString("sun.vm_exec.label"),
-                getString("sun.vm_exec"),
-                "java",
-                true);
-    }
-
-    static boolean hasWhitespace(String string) {
-        int length = string.length();
-        for (int i = 0; i < length; i++) {
-            if (Character.isWhitespace(string.charAt(i))) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    public VirtualMachine
-        launch(Map<String,? extends Connector.Argument> arguments)
-        throws IOException, IllegalConnectorArgumentsException,
-               VMStartException
-    {
-        VirtualMachine vm;
-
-        String home = argument(ARG_HOME, arguments).value();
-        String options = argument(ARG_OPTIONS, arguments).value();
-        String mainClassAndArgs = argument(ARG_MAIN, arguments).value();
-        boolean wait = ((BooleanArgumentImpl)argument(ARG_INIT_SUSPEND,
-                                                  arguments)).booleanValue();
-        String quote = argument(ARG_QUOTE, arguments).value();
-        String exe = argument(ARG_VM_EXEC, arguments).value();
-        String exePath = null;
-
-        if (quote.length() > 1) {
-            throw new IllegalConnectorArgumentsException("Invalid length",
-                                                         ARG_QUOTE);
-        }
-
-        if ((options.indexOf("-Djava.compiler=") != -1) &&
-            (options.toLowerCase().indexOf("-djava.compiler=none") == -1)) {
-            throw new IllegalConnectorArgumentsException("Cannot debug with a JIT compiler",
-                                                         ARG_OPTIONS);
-        }
-
-        /*
-         * Start listening.
-         * If we're using the shared memory transport then we pick a
-         * random address rather than using the (fixed) default.
-         * Random() uses System.currentTimeMillis() as the seed
-         * which can be a problem on windows (many calls to
-         * currentTimeMillis can return the same value), so
-         * we do a few retries if we get an IOException (we
-         * assume the IOException is the filename is already in use.)
-         */
-        TransportService.ListenKey listenKey;
-        if (usingSharedMemory) {
-            Random rr = new Random();
-            int failCount = 0;
-            while(true) {
-                try {
-                    String address = "javadebug" +
-                        String.valueOf(rr.nextInt(100000));
-                    listenKey = transportService().startListening(address);
-                    break;
-                } catch (IOException ioe) {
-                    if (++failCount > 5) {
-                        throw ioe;
-                    }
-                }
-            }
-        } else {
-            listenKey = transportService().startListening();
-        }
-        String address = listenKey.address();
-
-        try {
-            if (home.length() > 0) {
-                /*
-                 * A wrinkle in the environment:
-                 * 64-bit executables are stored under $JAVA_HOME/bin/os_arch
-                 * 32-bit executables are stored under $JAVA_HOME/bin
-                 */
-                String os_arch = System.getProperty("os.arch");
-                if ("SunOS".equals(System.getProperty("os.name")) &&
-                   ("sparcv9".equals(os_arch) || "amd64".equals(os_arch))) {
-                    exePath = home + File.separator + "bin" + File.separator +
-                        os_arch + File.separator + exe;
-                } else {
-                    exePath = home + File.separator + "bin" + File.separator + exe;
-                }
-            } else {
-                exePath = exe;
-            }
-            // Quote only if necessary in case the quote arg value is bogus
-            if (hasWhitespace(exePath)) {
-                exePath = quote + exePath + quote;
-            }
-
-            String xrun = "transport=" + transport().name() +
-                          ",address=" + address +
-                          ",suspend=" + (wait? 'y' : 'n');
-            // Quote only if necessary in case the quote arg value is bogus
-            if (hasWhitespace(xrun)) {
-                xrun = quote + xrun + quote;
-            }
-
-            String command = exePath + ' ' +
-                             options + ' ' +
-                             "-Xdebug " +
-                             "-Xrunjdwp:" + xrun + ' ' +
-                             mainClassAndArgs;
-
-            // System.err.println("Command: \"" + command + '"');
-            vm = launch(tokenizeCommand(command, quote.charAt(0)), address, listenKey,
-                        transportService());
-        } finally {
-            transportService().stopListening(listenKey);
-        }
-
-        return vm;
-    }
-
-    public String name() {
-        return "com.sun.jdi.CommandLineLaunch";
-    }
-
-    public String description() {
-        return getString("sun.description");
-
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/TargetVM.java b/ojluni/src/main/java/com/sun/tools/jdi/TargetVM.java
deleted file mode 100755
index 2853e01..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/TargetVM.java
+++ /dev/null
@@ -1,375 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package com.sun.tools.jdi;
-
-import com.sun.jdi.*;
-import com.sun.jdi.event.*;
-import com.sun.jdi.connect.spi.Connection;
-import com.sun.jdi.event.EventSet;
-
-import java.util.*;
-import java.io.IOException;
-
-public class TargetVM implements Runnable {
-    private Map<String, Packet> waitingQueue = new HashMap<String, Packet>(32,0.75f);
-    private boolean shouldListen = true;
-    private List<EventQueue> eventQueues = Collections.synchronizedList(new ArrayList<EventQueue>(2));
-    private VirtualMachineImpl vm;
-    private Connection connection;
-    private Thread readerThread;
-    private EventController eventController = null;
-    private boolean eventsHeld = false;
-
-    /*
-     * TO DO: The limit numbers below are somewhat arbitrary and should
-     * be configurable in the future.
-     */
-    static private final int OVERLOADED_QUEUE = 2000;
-    static private final int UNDERLOADED_QUEUE = 100;
-
-    TargetVM(VirtualMachineImpl vm, Connection connection) {
-        this.vm = vm;
-        this.connection = connection;
-        this.readerThread = new Thread(vm.threadGroupForJDI(),
-                                       this, "JDI Target VM Interface");
-        this.readerThread.setDaemon(true);
-    }
-
-    void start() {
-        readerThread.start();
-    }
-
-    private void dumpPacket(Packet packet, boolean sending) {
-        String direction = sending ? "Sending" : "Receiving";
-        if (sending) {
-            vm.printTrace(direction + " Command. id=" + packet.id +
-                          ", length=" + packet.data.length +
-                          ", commandSet=" + packet.cmdSet +
-                          ", command=" + packet.cmd +
-                          ", flags=" + packet.flags);
-        } else {
-            String type = (packet.flags & Packet.Reply) != 0 ?
-                          "Reply" : "Event";
-            vm.printTrace(direction + " " + type + ". id=" + packet.id +
-                          ", length=" + packet.data.length +
-                          ", errorCode=" + packet.errorCode +
-                          ", flags=" + packet.flags);
-        }
-        StringBuffer line = new StringBuffer(80);
-        line.append("0000: ");
-        for (int i = 0; i < packet.data.length; i++) {
-            if ((i > 0) && (i % 16 == 0)) {
-                vm.printTrace(line.toString());
-                line.setLength(0);
-                line.append(String.valueOf(i));
-                line.append(": ");
-                int len = line.length();
-                for (int j = 0; j < 6 - len; j++) {
-                    line.insert(0, '0');
-                }
-            }
-            int val = 0xff & packet.data[i];
-            String str = Integer.toHexString(val);
-            if (str.length() == 1) {
-                line.append('0');
-            }
-            line.append(str);
-            line.append(' ');
-        }
-        if (line.length() > 6) {
-            vm.printTrace(line.toString());
-        }
-    }
-
-    public void run() {
-        if ((vm.traceFlags & VirtualMachine.TRACE_SENDS) != 0) {
-            vm.printTrace("Target VM interface thread running");
-        }
-        Packet p=null,p2;
-        String idString;
-
-        while(shouldListen) {
-
-            boolean done = false;
-            try {
-                byte b[] = connection.readPacket();
-                if (b.length == 0) {
-                    done = true;
-                }
-                p = Packet.fromByteArray(b);
-            } catch (IOException e) {
-                done = true;
-            }
-
-            if (done) {
-                shouldListen = false;
-                try {
-                    connection.close();
-                } catch (IOException ioe) { }
-                break;
-            }
-
-            if ((vm.traceFlags & VirtualMachineImpl.TRACE_RAW_RECEIVES) != 0)  {
-                dumpPacket(p, false);
-            }
-
-            if((p.flags & Packet.Reply) == 0) {
-                // It's a command
-                handleVMCommand(p);
-            } else {
-                /*if(p.errorCode != Packet.ReplyNoError) {
-                    System.err.println("Packet " + p.id + " returned failure = " + p.errorCode);
-                }*/
-
-                vm.state().notifyCommandComplete(p.id);
-                idString = String.valueOf(p.id);
-
-                synchronized(waitingQueue) {
-                    p2 = waitingQueue.get(idString);
-
-                    if (p2 != null)
-                        waitingQueue.remove(idString);
-                }
-
-                if(p2 == null) {
-                    // Whoa! a reply without a sender. Problem.
-                    // FIX ME! Need to post an error.
-
-                    System.err.println("Recieved reply with no sender!");
-                    continue;
-                }
-                p2.errorCode = p.errorCode;
-                p2.data = p.data;
-                p2.replied = true;
-
-                synchronized(p2) {
-                    p2.notify();
-                }
-            }
-        }
-
-        // inform the VM mamager that this VM is history
-        vm.vmManager.disposeVirtualMachine(vm);
-
-        // close down all the event queues
-        // Closing a queue causes a VMDisconnectEvent to
-        // be put onto the queue.
-        synchronized(eventQueues) {
-            Iterator iter = eventQueues.iterator();
-            while (iter.hasNext()) {
-                ((EventQueueImpl)iter.next()).close();
-            }
-        }
-
-        // indirectly throw VMDisconnectedException to
-        // command requesters.
-        synchronized(waitingQueue) {
-            Iterator iter = waitingQueue.values().iterator();
-            while (iter.hasNext()) {
-                Packet packet = (Packet)iter.next();
-                synchronized(packet) {
-                    packet.notify();
-                }
-            }
-            waitingQueue.clear();
-        }
-
-        if ((vm.traceFlags & VirtualMachine.TRACE_SENDS) != 0) {
-            vm.printTrace("Target VM interface thread exiting");
-        }
-    }
-
-    protected void handleVMCommand(Packet p) {
-        switch (p.cmdSet) {
-            case JDWP.Event.COMMAND_SET:
-                handleEventCmdSet(p);
-                break;
-
-            default:
-                System.err.println("Ignoring cmd " + p.id + "/" +
-                                   p.cmdSet + "/" + p.cmd + " from the VM");
-                return;
-        }
-    }
-
-    /* Events should not be constructed on this thread (the thread
-     * which reads all data from the transport). This means that the
-     * packet cannot be converted to real JDI objects as that may
-     * involve further communications with the back end which would
-     * deadlock.
-     *
-     * Instead the whole packet is passed for lazy eval by a queue
-     * reading thread.
-     */
-    protected void handleEventCmdSet(Packet p) {
-        EventSet eventSet = new EventSetImpl(vm, p);
-
-        if (eventSet != null) {
-            queueEventSet(eventSet);
-        }
-    }
-
-    private EventController eventController() {
-        if (eventController == null) {
-            eventController = new EventController(vm);
-        }
-        return eventController;
-    }
-
-    private synchronized void controlEventFlow(int maxQueueSize) {
-        if (!eventsHeld && (maxQueueSize > OVERLOADED_QUEUE)) {
-            eventController().hold();
-            eventsHeld = true;
-        } else if (eventsHeld && (maxQueueSize < UNDERLOADED_QUEUE)) {
-            eventController().release();
-            eventsHeld = false;
-        }
-    }
-
-    void notifyDequeueEventSet() {
-        int maxQueueSize = 0;
-        synchronized(eventQueues) {
-            Iterator iter = eventQueues.iterator();
-            while (iter.hasNext()) {
-                EventQueueImpl queue = (EventQueueImpl)iter.next();
-                maxQueueSize = Math.max(maxQueueSize, queue.size());
-            }
-        }
-        controlEventFlow(maxQueueSize);
-    }
-
-    private void queueEventSet(EventSet eventSet) {
-        int maxQueueSize = 0;
-
-        synchronized(eventQueues) {
-            Iterator iter = eventQueues.iterator();
-            while (iter.hasNext()) {
-                EventQueueImpl queue = (EventQueueImpl)iter.next();
-                queue.enqueue(eventSet);
-                maxQueueSize = Math.max(maxQueueSize, queue.size());
-            }
-        }
-
-        controlEventFlow(maxQueueSize);
-    }
-
-    void send(Packet packet) {
-        String id = String.valueOf(packet.id);
-
-        synchronized(waitingQueue) {
-            waitingQueue.put(id, packet);
-        }
-
-        if ((vm.traceFlags & VirtualMachineImpl.TRACE_RAW_SENDS) != 0) {
-            dumpPacket(packet, true);
-        }
-
-        try {
-            connection.writePacket(packet.toByteArray());
-        } catch (IOException e) {
-            throw new VMDisconnectedException(e.getMessage());
-        }
-    }
-
-    void waitForReply(Packet packet) {
-        synchronized(packet) {
-            while ((!packet.replied) && shouldListen) {
-                try { packet.wait(); } catch (InterruptedException e) {;}
-            }
-
-            if (!packet.replied) {
-                throw new VMDisconnectedException();
-            }
-        }
-    }
-
-    void addEventQueue(EventQueueImpl queue) {
-        if ((vm.traceFlags & VirtualMachine.TRACE_EVENTS) != 0) {
-            vm.printTrace("New event queue added");
-        }
-        eventQueues.add(queue);
-    }
-
-    void stopListening() {
-        if ((vm.traceFlags & VirtualMachine.TRACE_EVENTS) != 0) {
-            vm.printTrace("Target VM i/f closing event queues");
-        }
-        shouldListen = false;
-        try {
-            connection.close();
-        } catch (IOException ioe) { }
-    }
-
-    static private class EventController extends Thread {
-        VirtualMachineImpl vm;
-        int controlRequest = 0;
-
-        EventController(VirtualMachineImpl vm) {
-            super(vm.threadGroupForJDI(), "JDI Event Control Thread");
-            this.vm = vm;
-            setDaemon(true);
-            setPriority((MAX_PRIORITY + NORM_PRIORITY)/2);
-            super.start();
-        }
-
-        synchronized void hold() {
-            controlRequest++;
-            notifyAll();
-        }
-
-        synchronized void release() {
-            controlRequest--;
-            notifyAll();
-        }
-
-        public void run() {
-            while(true) {
-                int currentRequest;
-                synchronized(this) {
-                    while (controlRequest == 0) {
-                        try {wait();} catch (InterruptedException e) {}
-                    }
-                    currentRequest = controlRequest;
-                    controlRequest = 0;
-                }
-                try {
-                    if (currentRequest > 0) {
-                        JDWP.VirtualMachine.HoldEvents.process(vm);
-                    } else {
-                        JDWP.VirtualMachine.ReleaseEvents.process(vm);
-                    }
-                } catch (JDWPException e) {
-                    /*
-                     * Don't want to terminate the thread, so the
-                     * stack trace is printed and we continue.
-                     */
-                    e.toJDIException().printStackTrace(System.err);
-                }
-            }
-        }
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/ThreadAction.java b/ojluni/src/main/java/com/sun/tools/jdi/ThreadAction.java
deleted file mode 100755
index 5394341..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/ThreadAction.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (c) 1999, 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.tools.jdi;
-
-import com.sun.jdi.*;
-import java.util.EventObject;
-
-/*
- * The name "action" is used to avoid confusion
- * with JDI events.
- */
-class ThreadAction extends EventObject {
-    // Event ids
-    /*static final int THREAD_SUSPENDED = 1;*/
-    static final int THREAD_RESUMABLE = 2;
-
-    int id;
-
-    ThreadAction(ThreadReference thread, int id) {
-        super(thread);
-        this.id = id;
-    }
-    ThreadReference thread() {
-        return (ThreadReference)getSource();
-    }
-    int id() {
-        return id;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/ThreadGroupReferenceImpl.java b/ojluni/src/main/java/com/sun/tools/jdi/ThreadGroupReferenceImpl.java
deleted file mode 100755
index 3d5d203..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/ThreadGroupReferenceImpl.java
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package com.sun.tools.jdi;
-
-import com.sun.jdi.*;
-import java.util.*;
-
-public class ThreadGroupReferenceImpl extends ObjectReferenceImpl
-    implements ThreadGroupReference, VMListener
-{
-    // Cached components that cannot change
-    String name;
-    ThreadGroupReference parent;
-    boolean triedParent;
-
-    // This is cached only while the VM is suspended
-    private static class Cache extends ObjectReferenceImpl.Cache {
-        JDWP.ThreadGroupReference.Children kids = null;
-    }
-
-    protected ObjectReferenceImpl.Cache newCache() {
-        return new Cache();
-    }
-
-    ThreadGroupReferenceImpl(VirtualMachine aVm,long aRef) {
-        super(aVm,aRef);
-        vm.state().addListener(this);
-    }
-
-    protected String description() {
-        return "ThreadGroupReference " + uniqueID();
-    }
-
-    public String name() {
-        if (name == null) {
-            // Does not need synchronization, since worst-case
-            // static info is fetched twice (Thread group name
-            // cannot change)
-            try {
-                name = JDWP.ThreadGroupReference.Name.
-                                     process(vm, this).groupName;
-            } catch (JDWPException exc) {
-                throw exc.toJDIException();
-            }
-        }
-        return name;
-    }
-
-    public ThreadGroupReference parent() {
-        if (!triedParent) {
-            // Does not need synchronization, since worst-case
-            // static info is fetched twice (Thread group parent cannot
-            // change)
-            try {
-                parent = JDWP.ThreadGroupReference.Parent.
-                                 process(vm, this).parentGroup;
-                triedParent = true;
-            } catch (JDWPException exc) {
-                throw exc.toJDIException();
-            }
-        }
-       return parent;
-    }
-
-    public void suspend() {
-        for (ThreadReference thread : threads()) {
-            thread.suspend();
-        }
-
-        for (ThreadGroupReference threadGroup : threadGroups()) {
-            threadGroup.suspend();
-        }
-    }
-
-    public void resume() {
-        for (ThreadReference thread : threads()) {
-            thread.resume();
-        }
-
-        for (ThreadGroupReference threadGroup : threadGroups()) {
-            threadGroup.resume();
-        }
-    }
-
-    private JDWP.ThreadGroupReference.Children kids() {
-        JDWP.ThreadGroupReference.Children kids = null;
-        try {
-            Cache local = (Cache)getCache();
-
-            if (local != null) {
-                kids = local.kids;
-            }
-            if (kids == null) {
-                kids = JDWP.ThreadGroupReference.Children
-                                                  .process(vm, this);
-                if (local != null) {
-                    local.kids = kids;
-                    if ((vm.traceFlags & vm.TRACE_OBJREFS) != 0) {
-                        vm.printTrace(description() +
-                                      " temporarily caching children ");
-                    }
-                }
-            }
-        } catch (JDWPException exc) {
-            throw exc.toJDIException();
-        }
-        return kids;
-    }
-
-    public List<ThreadReference> threads() {
-        return Arrays.asList((ThreadReference[])kids().childThreads);
-    }
-
-    public List<ThreadGroupReference> threadGroups() {
-        return Arrays.asList((ThreadGroupReference[])kids().childGroups);
-    }
-
-    public String toString() {
-        return "instance of " + referenceType().name() +
-               "(name='" + name() + "', " + "id=" + uniqueID() + ")";
-    }
-
-    byte typeValueKey() {
-        return JDWP.Tag.THREAD_GROUP;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/ThreadListener.java b/ojluni/src/main/java/com/sun/tools/jdi/ThreadListener.java
deleted file mode 100755
index 787539e..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/ThreadListener.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (c) 1999, 2000, 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.tools.jdi;
-
-import com.sun.jdi.*;
-import java.util.EventListener;
-
-interface ThreadListener extends EventListener {
-    boolean threadResumable(ThreadAction action);
-    /*
-     * Not needed for current implemenation, and hard to implement
-     * correctly. (See TargetVM.handleEventCmdSet)
-     *   void threadSuspended(ThreadAction action);
-     */
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/ThreadReferenceImpl.java b/ojluni/src/main/java/com/sun/tools/jdi/ThreadReferenceImpl.java
deleted file mode 100755
index f694afc..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/ThreadReferenceImpl.java
+++ /dev/null
@@ -1,644 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package com.sun.tools.jdi;
-
-import com.sun.jdi.*;
-import com.sun.jdi.request.BreakpointRequest;
-import java.util.*;
-import java.lang.ref.WeakReference;
-
-public class ThreadReferenceImpl extends ObjectReferenceImpl
-             implements ThreadReference, VMListener {
-    static final int SUSPEND_STATUS_SUSPENDED = 0x1;
-    static final int SUSPEND_STATUS_BREAK = 0x2;
-
-    private int suspendedZombieCount = 0;
-
-    /*
-     * Some objects can only be created while a thread is suspended and are valid
-     * only while the thread remains suspended.  Examples are StackFrameImpl
-     * and MonitorInfoImpl.  When the thread resumes, these objects have to be
-     * marked as invalid so that their methods can throw
-     * InvalidStackFrameException if they are called.  To do this, such objects
-     * register themselves as listeners of the associated thread.  When the
-     * thread is resumed, its listeners are notified and mark themselves
-     * invalid.
-     * Also, note that ThreadReferenceImpl itself caches some info that
-     * is valid only as long as the thread is suspended.  When the thread
-     * is resumed, that cache must be purged.
-     * Lastly, note that ThreadReferenceImpl and its super, ObjectReferenceImpl
-     * cache some info that is only valid as long as the entire VM is suspended.
-     * If _any_ thread is resumed, this cache must be purged.  To handle this,
-     * both ThreadReferenceImpl and ObjectReferenceImpl register themselves as
-     * VMListeners so that they get notified when all threads are suspended and
-     * when any thread is resumed.
-     */
-
-    // This is cached for the life of the thread
-    private ThreadGroupReference threadGroup;
-
-    // This is cached only while this one thread is suspended.  Each time
-    // the thread is resumed, we abandon the current cache object and
-    // create a new intialized one.
-    private static class LocalCache {
-        JDWP.ThreadReference.Status status = null;
-        List<StackFrame> frames = null;
-        int framesStart = -1;
-        int framesLength = 0;
-        int frameCount = -1;
-        List<ObjectReference> ownedMonitors = null;
-        List<MonitorInfo> ownedMonitorsInfo = null;
-        ObjectReference contendedMonitor = null;
-        boolean triedCurrentContended = false;
-    }
-
-    /*
-     * The localCache instance var is set by resetLocalCache to an initialized
-     * object as shown above.  This occurs when the ThreadReference
-     * object is created, and when the mirrored thread is resumed.
-     * The fields are then filled in by the relevant methods as they
-     * are called.  A problem can occur if resetLocalCache is called
-     * (ie, a resume() is executed) at certain points in the execution
-     * of some of these methods - see 6751643.  To avoid this, each
-     * method that wants to use this cache must make a local copy of
-     * this variable and use that.  This means that each invocation of
-     * these methods will use a copy of the cache object that was in
-     * effect at the point that the copy was made; if a racy resume
-     * occurs, it won't affect the method's local copy.  This means that
-     * the values returned by these calls may not match the state of
-     * the debuggee at the time the caller gets the values.  EG,
-     * frameCount() is called and comes up with 5 frames.  But before
-     * it returns this, a resume of the debuggee thread is executed in a
-     * different debugger thread.  The thread is resumed and running at
-     * the time that the value 5 is returned.  Or even worse, the thread
-     * could be suspended again and have a different number of frames, eg, 24,
-     * but this call will still return 5.
-     */
-    private LocalCache localCache;
-
-    private void resetLocalCache() {
-        localCache = new LocalCache();
-    }
-
-    // This is cached only while all threads in the VM are suspended
-    // Yes, someone could change the name of a thread while it is suspended.
-    private static class Cache extends ObjectReferenceImpl.Cache {
-        String name = null;
-    }
-    protected ObjectReferenceImpl.Cache newCache() {
-        return new Cache();
-    }
-
-    // Listeners - synchronized on vm.state()
-    private List<WeakReference<ThreadListener>> listeners = new ArrayList<WeakReference<ThreadListener>>();
-
-
-    ThreadReferenceImpl(VirtualMachine aVm, long aRef) {
-        super(aVm,aRef);
-        resetLocalCache();
-        vm.state().addListener(this);
-    }
-
-    protected String description() {
-        return "ThreadReference " + uniqueID();
-    }
-
-    /*
-     * VMListener implementation
-     */
-    public boolean vmNotSuspended(VMAction action) {
-        if (action.resumingThread() == null) {
-            // all threads are being resumed
-            synchronized (vm.state()) {
-                processThreadAction(new ThreadAction(this,
-                                            ThreadAction.THREAD_RESUMABLE));
-            }
-
-        }
-
-        /*
-         * Othewise, only one thread is being resumed:
-         *   if it is us,
-         *      we have already done our processThreadAction to notify our
-         *      listeners when we processed the resume.
-         *   if it is not us,
-         *      we don't want to notify our listeners
-         *       because we are not being resumed.
-         */
-        return super.vmNotSuspended(action);
-    }
-
-    /**
-     * Note that we only cache the name string while the entire VM is suspended
-     * because the name can change via Thread.setName arbitrarily while this
-     * thread is running.
-     */
-    public String name() {
-        String name = null;
-        try {
-            Cache local = (Cache)getCache();
-
-            if (local != null) {
-                name = local.name;
-            }
-            if (name == null) {
-                name = JDWP.ThreadReference.Name.process(vm, this)
-                                                             .threadName;
-                if (local != null) {
-                    local.name = name;
-                }
-            }
-        } catch (JDWPException exc) {
-            throw exc.toJDIException();
-        }
-        return name;
-    }
-
-    /*
-     * Sends a command to the back end which is defined to do an
-     * implicit vm-wide resume.
-     */
-    PacketStream sendResumingCommand(CommandSender sender) {
-        synchronized (vm.state()) {
-            processThreadAction(new ThreadAction(this,
-                                        ThreadAction.THREAD_RESUMABLE));
-            return sender.send();
-        }
-    }
-
-    public void suspend() {
-        try {
-            JDWP.ThreadReference.Suspend.process(vm, this);
-        } catch (JDWPException exc) {
-            throw exc.toJDIException();
-        }
-        // Don't consider the thread suspended yet. On reply, notifySuspend()
-        // will be called.
-    }
-
-    public void resume() {
-        /*
-         * If it's a zombie, we can just update internal state without
-         * going to back end.
-         */
-        if (suspendedZombieCount > 0) {
-            suspendedZombieCount--;
-            return;
-        }
-
-        PacketStream stream;
-        synchronized (vm.state()) {
-            processThreadAction(new ThreadAction(this,
-                                      ThreadAction.THREAD_RESUMABLE));
-            stream = JDWP.ThreadReference.Resume.enqueueCommand(vm, this);
-        }
-        try {
-            JDWP.ThreadReference.Resume.waitForReply(vm, stream);
-        } catch (JDWPException exc) {
-            throw exc.toJDIException();
-        }
-    }
-
-    public int suspendCount() {
-        /*
-         * If it's a zombie, we maintain the count in the front end.
-         */
-        if (suspendedZombieCount > 0) {
-            return suspendedZombieCount;
-        }
-
-        try {
-            return JDWP.ThreadReference.SuspendCount.process(vm, this).suspendCount;
-        } catch (JDWPException exc) {
-            throw exc.toJDIException();
-        }
-    }
-
-    public void stop(ObjectReference throwable) throws InvalidTypeException {
-        validateMirror(throwable);
-        // Verify that the given object is a Throwable instance
-        List list = vm.classesByName("java.lang.Throwable");
-        ClassTypeImpl throwableClass = (ClassTypeImpl)list.get(0);
-        if ((throwable == null) ||
-            !throwableClass.isAssignableFrom(throwable)) {
-             throw new InvalidTypeException("Not an instance of Throwable");
-        }
-
-        try {
-            JDWP.ThreadReference.Stop.process(vm, this,
-                                         (ObjectReferenceImpl)throwable);
-        } catch (JDWPException exc) {
-            throw exc.toJDIException();
-        }
-    }
-
-    public void interrupt() {
-        try {
-            JDWP.ThreadReference.Interrupt.process(vm, this);
-        } catch (JDWPException exc) {
-            throw exc.toJDIException();
-        }
-    }
-
-    private JDWP.ThreadReference.Status jdwpStatus() {
-        LocalCache snapshot = localCache;
-        JDWP.ThreadReference.Status myStatus = snapshot.status;
-        try {
-             if (myStatus == null) {
-                 myStatus = JDWP.ThreadReference.Status.process(vm, this);
-                if ((myStatus.suspendStatus & SUSPEND_STATUS_SUSPENDED) != 0) {
-                    // thread is suspended, we can cache the status.
-                    snapshot.status = myStatus;
-                }
-            }
-         } catch (JDWPException exc) {
-            throw exc.toJDIException();
-        }
-        return myStatus;
-    }
-
-    public int status() {
-        return jdwpStatus().threadStatus;
-    }
-
-    public boolean isSuspended() {
-        return ((suspendedZombieCount > 0) ||
-                ((jdwpStatus().suspendStatus & SUSPEND_STATUS_SUSPENDED) != 0));
-    }
-
-    public boolean isAtBreakpoint() {
-        /*
-         * TO DO: This fails to take filters into account.
-         */
-        try {
-            StackFrame frame = frame(0);
-            Location location = frame.location();
-            List requests = vm.eventRequestManager().breakpointRequests();
-            Iterator iter = requests.iterator();
-            while (iter.hasNext()) {
-                BreakpointRequest request = (BreakpointRequest)iter.next();
-                if (location.equals(request.location())) {
-                    return true;
-                }
-            }
-            return false;
-        } catch (IndexOutOfBoundsException iobe) {
-            return false;  // no frames on stack => not at breakpoint
-        } catch (IncompatibleThreadStateException itse) {
-            // Per the javadoc, not suspended => return false
-            return false;
-        }
-    }
-
-    public ThreadGroupReference threadGroup() {
-        /*
-         * Thread group can't change, so it's cached once and for all.
-         */
-        if (threadGroup == null) {
-            try {
-                threadGroup = JDWP.ThreadReference.ThreadGroup.
-                    process(vm, this).group;
-            } catch (JDWPException exc) {
-                throw exc.toJDIException();
-            }
-        }
-        return threadGroup;
-    }
-
-    public int frameCount() throws IncompatibleThreadStateException  {
-        LocalCache snapshot = localCache;
-        try {
-            if (snapshot.frameCount == -1) {
-                snapshot.frameCount = JDWP.ThreadReference.FrameCount
-                                          .process(vm, this).frameCount;
-            }
-        } catch (JDWPException exc) {
-            switch (exc.errorCode()) {
-            case JDWP.Error.THREAD_NOT_SUSPENDED:
-            case JDWP.Error.INVALID_THREAD:   /* zombie */
-                throw new IncompatibleThreadStateException();
-            default:
-                throw exc.toJDIException();
-            }
-        }
-        return snapshot.frameCount;
-    }
-
-    public List<StackFrame> frames() throws IncompatibleThreadStateException  {
-        return privateFrames(0, -1);
-    }
-
-    public StackFrame frame(int index) throws IncompatibleThreadStateException  {
-        List list = privateFrames(index, 1);
-        return (StackFrame)list.get(0);
-    }
-
-    /**
-     * Is the requested subrange within what has been retrieved?
-     * local is known to be non-null.  Should only be called from
-     * a sync method.
-     */
-    private boolean isSubrange(LocalCache snapshot,
-                               int start, int length) {
-        if (start < snapshot.framesStart) {
-            return false;
-        }
-        if (length == -1) {
-            return (snapshot.framesLength == -1);
-        }
-        if (snapshot.framesLength == -1) {
-            if ((start + length) > (snapshot.framesStart +
-                                    snapshot.frames.size())) {
-                throw new IndexOutOfBoundsException();
-            }
-            return true;
-        }
-        return ((start + length) <= (snapshot.framesStart + snapshot.framesLength));
-    }
-
-    public List<StackFrame> frames(int start, int length)
-                              throws IncompatibleThreadStateException  {
-        if (length < 0) {
-            throw new IndexOutOfBoundsException(
-                "length must be greater than or equal to zero");
-        }
-        return privateFrames(start, length);
-    }
-
-    /**
-     * Private version of frames() allows "-1" to specify all
-     * remaining frames.
-     */
-    synchronized private List<StackFrame> privateFrames(int start, int length)
-                              throws IncompatibleThreadStateException  {
-
-        // Lock must be held while creating stack frames so if that two threads
-        // do this at the same time, one won't clobber the subset created by the other.
-        LocalCache snapshot = localCache;
-        try {
-            if (snapshot.frames == null || !isSubrange(snapshot, start, length)) {
-                JDWP.ThreadReference.Frames.Frame[] jdwpFrames
-                    = JDWP.ThreadReference.Frames.
-                    process(vm, this, start, length).frames;
-                int count = jdwpFrames.length;
-                snapshot.frames = new ArrayList<StackFrame>(count);
-
-                for (int i = 0; i<count; i++) {
-                    if (jdwpFrames[i].location == null) {
-                        throw new InternalException("Invalid frame location");
-                    }
-                    StackFrame frame = new StackFrameImpl(vm, this,
-                                                          jdwpFrames[i].frameID,
-                                                          jdwpFrames[i].location);
-                    // Add to the frame list
-                    snapshot.frames.add(frame);
-                }
-                snapshot.framesStart = start;
-                snapshot.framesLength = length;
-                return Collections.unmodifiableList(snapshot.frames);
-            } else {
-                int fromIndex = start - snapshot.framesStart;
-                int toIndex;
-                if (length == -1) {
-                    toIndex = snapshot.frames.size() - fromIndex;
-                } else {
-                    toIndex = fromIndex + length;
-                }
-                return Collections.unmodifiableList(snapshot.frames.subList(fromIndex, toIndex));
-            }
-        } catch (JDWPException exc) {
-            switch (exc.errorCode()) {
-            case JDWP.Error.THREAD_NOT_SUSPENDED:
-            case JDWP.Error.INVALID_THREAD:   /* zombie */
-                throw new IncompatibleThreadStateException();
-            default:
-                throw exc.toJDIException();
-            }
-        }
-    }
-
-    public List<ObjectReference> ownedMonitors()  throws IncompatibleThreadStateException  {
-        LocalCache snapshot = localCache;
-        try {
-            if (snapshot.ownedMonitors == null) {
-                snapshot.ownedMonitors = Arrays.asList(
-                                 (ObjectReference[])JDWP.ThreadReference.OwnedMonitors.
-                                         process(vm, this).owned);
-                if ((vm.traceFlags & vm.TRACE_OBJREFS) != 0) {
-                    vm.printTrace(description() +
-                                  " temporarily caching owned monitors"+
-                                  " (count = " + snapshot.ownedMonitors.size() + ")");
-                }
-            }
-        } catch (JDWPException exc) {
-            switch (exc.errorCode()) {
-            case JDWP.Error.THREAD_NOT_SUSPENDED:
-            case JDWP.Error.INVALID_THREAD:   /* zombie */
-                throw new IncompatibleThreadStateException();
-            default:
-                throw exc.toJDIException();
-            }
-        }
-        return snapshot.ownedMonitors;
-    }
-
-    public ObjectReference currentContendedMonitor()
-                              throws IncompatibleThreadStateException  {
-        LocalCache snapshot = localCache;
-        try {
-            if (snapshot.contendedMonitor == null &&
-                !snapshot.triedCurrentContended) {
-                snapshot.contendedMonitor = JDWP.ThreadReference.CurrentContendedMonitor.
-                    process(vm, this).monitor;
-                snapshot.triedCurrentContended = true;
-                if ((snapshot.contendedMonitor != null) &&
-                    ((vm.traceFlags & vm.TRACE_OBJREFS) != 0)) {
-                    vm.printTrace(description() +
-                                  " temporarily caching contended monitor"+
-                                  " (id = " + snapshot.contendedMonitor.uniqueID() + ")");
-                }
-            }
-        } catch (JDWPException exc) {
-            switch (exc.errorCode()) {
-            case JDWP.Error.THREAD_NOT_SUSPENDED:
-            case JDWP.Error.INVALID_THREAD:   /* zombie */
-                throw new IncompatibleThreadStateException();
-            default:
-                throw exc.toJDIException();
-            }
-        }
-        return snapshot.contendedMonitor;
-    }
-
-    public List<MonitorInfo> ownedMonitorsAndFrames()  throws IncompatibleThreadStateException  {
-        LocalCache snapshot = localCache;
-        try {
-            if (snapshot.ownedMonitorsInfo == null) {
-                JDWP.ThreadReference.OwnedMonitorsStackDepthInfo.monitor[] minfo;
-                minfo = JDWP.ThreadReference.OwnedMonitorsStackDepthInfo.process(vm, this).owned;
-
-                snapshot.ownedMonitorsInfo = new ArrayList<MonitorInfo>(minfo.length);
-
-                for (int i=0; i < minfo.length; i++) {
-                    JDWP.ThreadReference.OwnedMonitorsStackDepthInfo.monitor mi =
-                                                                         minfo[i];
-                    MonitorInfo mon = new MonitorInfoImpl(vm, minfo[i].monitor, this, minfo[i].stack_depth);
-                    snapshot.ownedMonitorsInfo.add(mon);
-                }
-
-                if ((vm.traceFlags & vm.TRACE_OBJREFS) != 0) {
-                    vm.printTrace(description() +
-                                  " temporarily caching owned monitors"+
-                                  " (count = " + snapshot.ownedMonitorsInfo.size() + ")");
-                    }
-                }
-
-        } catch (JDWPException exc) {
-            switch (exc.errorCode()) {
-            case JDWP.Error.THREAD_NOT_SUSPENDED:
-            case JDWP.Error.INVALID_THREAD:   /* zombie */
-                throw new IncompatibleThreadStateException();
-            default:
-                throw exc.toJDIException();
-            }
-        }
-        return snapshot.ownedMonitorsInfo;
-    }
-
-    public void popFrames(StackFrame frame) throws IncompatibleThreadStateException {
-        // Note that interface-wise this functionality belongs
-        // here in ThreadReference, but implementation-wise it
-        // belongs in StackFrame, so we just forward it.
-        if (!frame.thread().equals(this)) {
-            throw new IllegalArgumentException("frame does not belong to this thread");
-        }
-        if (!vm.canPopFrames()) {
-            throw new UnsupportedOperationException(
-                "target does not support popping frames");
-        }
-        ((StackFrameImpl)frame).pop();
-    }
-
-    public void forceEarlyReturn(Value  returnValue) throws InvalidTypeException,
-                                                            ClassNotLoadedException,
-                                             IncompatibleThreadStateException {
-        if (!vm.canForceEarlyReturn()) {
-            throw new UnsupportedOperationException(
-                "target does not support the forcing of a method to return early");
-        }
-
-        validateMirrorOrNull(returnValue);
-
-        StackFrameImpl sf;
-        try {
-           sf = (StackFrameImpl)frame(0);
-        } catch (IndexOutOfBoundsException exc) {
-           throw new InvalidStackFrameException("No more frames on the stack");
-        }
-        sf.validateStackFrame();
-        MethodImpl meth = (MethodImpl)sf.location().method();
-        ValueImpl convertedValue  = ValueImpl.prepareForAssignment(returnValue,
-                                                                   meth.getReturnValueContainer());
-
-        try {
-            JDWP.ThreadReference.ForceEarlyReturn.process(vm, this, convertedValue);
-        } catch (JDWPException exc) {
-            switch (exc.errorCode()) {
-            case JDWP.Error.OPAQUE_FRAME:
-                throw new NativeMethodException();
-            case JDWP.Error.THREAD_NOT_SUSPENDED:
-                throw new IncompatibleThreadStateException(
-                         "Thread not suspended");
-            case JDWP.Error.THREAD_NOT_ALIVE:
-                throw new IncompatibleThreadStateException(
-                                     "Thread has not started or has finished");
-            case JDWP.Error.NO_MORE_FRAMES:
-                throw new InvalidStackFrameException(
-                         "No more frames on the stack");
-            default:
-                throw exc.toJDIException();
-            }
-        }
-    }
-
-    public String toString() {
-        return "instance of " + referenceType().name() +
-               "(name='" + name() + "', " + "id=" + uniqueID() + ")";
-    }
-
-    byte typeValueKey() {
-        return JDWP.Tag.THREAD;
-    }
-
-    void addListener(ThreadListener listener) {
-        synchronized (vm.state()) {
-            listeners.add(new WeakReference<ThreadListener>(listener));
-        }
-    }
-
-    void removeListener(ThreadListener listener) {
-        synchronized (vm.state()) {
-            Iterator iter = listeners.iterator();
-            while (iter.hasNext()) {
-                WeakReference ref = (WeakReference)iter.next();
-                if (listener.equals(ref.get())) {
-                    iter.remove();
-                    break;
-                }
-            }
-        }
-    }
-
-    /**
-     * Propagate the the thread state change information
-     * to registered listeners.
-     * Must be entered while synchronized on vm.state()
-     */
-    private void processThreadAction(ThreadAction action) {
-        synchronized (vm.state()) {
-            Iterator iter = listeners.iterator();
-            while (iter.hasNext()) {
-                WeakReference ref = (WeakReference)iter.next();
-                ThreadListener listener = (ThreadListener)ref.get();
-                if (listener != null) {
-                    switch (action.id()) {
-                        case ThreadAction.THREAD_RESUMABLE:
-                            if (!listener.threadResumable(action)) {
-                                iter.remove();
-                            }
-                            break;
-                    }
-                } else {
-                    // Listener is unreachable; clean up
-                    iter.remove();
-                }
-            }
-
-            // Discard our local cache
-            resetLocalCache();
-        }
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/TypeComponentImpl.java b/ojluni/src/main/java/com/sun/tools/jdi/TypeComponentImpl.java
deleted file mode 100755
index 593940d..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/TypeComponentImpl.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package com.sun.tools.jdi;
-
-import com.sun.jdi.*;
-
-import java.util.List;
-
-abstract public class TypeComponentImpl extends MirrorImpl
-    implements TypeComponent
-{
-    protected final long ref;
-    protected final String name;
-    protected final String signature;
-    protected final String genericSignature;
-    protected final ReferenceTypeImpl declaringType;
-    private final int modifiers;
-
-    TypeComponentImpl(VirtualMachine vm, ReferenceTypeImpl declaringType,
-                      long ref,
-                      String name, String signature,
-                      String genericSignature, int modifiers) {
-        // The generic signature is set when this is created.
-        super(vm);
-        this.declaringType = declaringType;
-        this.ref = ref;
-        this.name = name;
-        this.signature = signature;
-        if (genericSignature != null && genericSignature.length() != 0) {
-            this.genericSignature = genericSignature;
-        } else {
-            this.genericSignature = null;
-        }
-        this.modifiers = modifiers;
-    }
-
-    public String name() {
-        return name;
-    }
-
-    public String signature() {
-        return signature;
-    }
-    public String genericSignature() {
-        return genericSignature;
-    }
-
-    public int modifiers() {
-        return modifiers;
-    }
-
-    public ReferenceType declaringType() {
-        return declaringType;
-    }
-
-    public boolean isStatic() {
-        return isModifierSet(VMModifiers.STATIC);
-    }
-
-    public boolean isFinal() {
-        return isModifierSet(VMModifiers.FINAL);
-    }
-
-    public boolean isPrivate() {
-        return isModifierSet(VMModifiers.PRIVATE);
-    }
-
-    public boolean isPackagePrivate() {
-        return !isModifierSet(VMModifiers.PRIVATE
-                              | VMModifiers.PROTECTED
-                              | VMModifiers.PUBLIC);
-    }
-
-    public boolean isProtected() {
-        return isModifierSet(VMModifiers.PROTECTED);
-    }
-
-    public boolean isPublic() {
-        return isModifierSet(VMModifiers.PUBLIC);
-    }
-
-    public boolean isSynthetic() {
-        return isModifierSet(VMModifiers.SYNTHETIC);
-    }
-
-    long ref() {
-        return ref;
-    }
-
-    boolean isModifierSet(int compareBits) {
-        return (modifiers & compareBits) != 0;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/TypeImpl.java b/ojluni/src/main/java/com/sun/tools/jdi/TypeImpl.java
deleted file mode 100755
index 5f851844..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/TypeImpl.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package com.sun.tools.jdi;
-
-import com.sun.jdi.*;
-
-public abstract class TypeImpl extends MirrorImpl implements Type
-{
-    private String myName = null;
-
-    TypeImpl(VirtualMachine vm)
-    {
-        super(vm);
-    }
-
-    public abstract String signature();
-
-    public String name() {
-        if (myName == null) {
-            JNITypeParser parser = new JNITypeParser(signature());
-            myName = parser.typeName();
-        }
-        return myName;
-    }
-
-    public boolean equals(Object obj) {
-        if ((obj != null) && (obj instanceof Type)) {
-            Type other = (Type)obj;
-            return signature().equals(other.signature()) &&
-                   super.equals(obj);
-        } else {
-            return false;
-        }
-    }
-
-    public int hashCode() {
-        return signature().hashCode();
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/VMAction.java b/ojluni/src/main/java/com/sun/tools/jdi/VMAction.java
deleted file mode 100755
index 7b9dc04..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/VMAction.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-package com.sun.tools.jdi;
-
-import com.sun.jdi.*;
-import java.util.EventObject;
-
-/*
- * The name "action" is used to avoid confusion
- * with JDI events.
- */
-class VMAction extends EventObject {
-    // Event ids
-    static final int VM_SUSPENDED = 1;
-    static final int VM_NOT_SUSPENDED = 2;
-
-    int id;
-    ThreadReference resumingThread;
-
-    VMAction(VirtualMachine vm, int id) {
-        this(vm, null, id);
-    }
-
-    // For id = VM_NOT_SUSPENDED, if resumingThread != null, then it is
-    // the only thread that is being resumed.
-     VMAction(VirtualMachine vm,  ThreadReference resumingThread, int id) {
-        super(vm);
-        this.id = id;
-        this.resumingThread = resumingThread;
-    }
-    VirtualMachine vm() {
-        return (VirtualMachine)getSource();
-    }
-    int id() {
-        return id;
-    }
-
-    ThreadReference resumingThread() {
-        return resumingThread;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/VMListener.java b/ojluni/src/main/java/com/sun/tools/jdi/VMListener.java
deleted file mode 100755
index 9da16b3..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/VMListener.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (c) 1999, 2000, 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.tools.jdi;
-
-import com.sun.jdi.*;
-import java.util.EventListener;
-
-interface VMListener extends EventListener {
-    boolean vmSuspended(VMAction action);
-    boolean vmNotSuspended(VMAction action);
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/VMModifiers.java b/ojluni/src/main/java/com/sun/tools/jdi/VMModifiers.java
deleted file mode 100755
index 8713521..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/VMModifiers.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package com.sun.tools.jdi;
-
-import com.sun.jdi.*;
-
-public interface VMModifiers
-{
-    int PUBLIC = 0x00000001;       /* visible to everyone */
-    int PRIVATE = 0x00000002;      /* visible only to the defining class */
-    int PROTECTED = 0x00000004;    /* visible to subclasses */
-    int STATIC = 0x00000008;       /* instance variable is static */
-    int FINAL = 0x00000010;        /* no further subclassing, overriding */
-    int SYNCHRONIZED = 0x00000020; /* wrap method call in monitor lock */
-    int VOLATILE = 0x00000040;     /* can cache in registers */
-    int BRIDGE = 0x00000040;       /* Bridge method generated by compiler */
-    int TRANSIENT = 0x00000080;    /* not persistant */
-    int VARARGS = 0x00000080;      /* Method accepts var. args*/
-    int NATIVE = 0x00000100;       /* implemented in C */
-    int INTERFACE = 0x00000200;    /* class is an interface */
-    int ABSTRACT = 0x00000400;     /* no definition provided */
-    int ENUM_CONSTANT = 0x00004000; /* enum constant field*/
-    int SYNTHETIC = 0xf0000000;    /* not in source code */
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/VMState.java b/ojluni/src/main/java/com/sun/tools/jdi/VMState.java
deleted file mode 100755
index de49e8a..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/VMState.java
+++ /dev/null
@@ -1,245 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-package com.sun.tools.jdi;
-
-import com.sun.jdi.*;
-
-import java.lang.ref.WeakReference;
-import java.util.*;
-
-class VMState {
-    private final VirtualMachineImpl vm;
-
-    // Listeners
-    private final List<WeakReference> listeners = new ArrayList<WeakReference>(); // synchronized (this)
-    private boolean notifyingListeners = false;  // synchronized (this)
-
-    /*
-     * Certain information can be cached only when the entire VM is
-     * suspended and there are no pending resumes. The fields below
-     * are used to track whether there are pending resumes. (There
-     * is an assumption that JDWP command ids are increasing over time.)
-     */
-    private int lastCompletedCommandId = 0;   // synchronized (this)
-    private int lastResumeCommandId = 0;      // synchronized (this)
-
-    // This is cached only while the VM is suspended
-    private static class Cache {
-        List<ThreadGroupReference> groups = null;  // cached Top Level ThreadGroups
-        List<ThreadReference> threads = null; // cached Threads
-    }
-
-    private Cache cache = null;               // synchronized (this)
-    private static final Cache markerCache = new Cache();
-
-    private void disableCache() {
-        synchronized (this) {
-            cache = null;
-        }
-    }
-
-    private void enableCache() {
-        synchronized (this) {
-            cache = markerCache;
-        }
-    }
-
-    private Cache getCache() {
-        synchronized (this) {
-            if (cache == markerCache) {
-                cache = new Cache();
-            }
-            return cache;
-        }
-    }
-
-    VMState(VirtualMachineImpl vm) {
-        this.vm = vm;
-    }
-
-    /**
-     * Is the VM currently suspended, for the purpose of caching?
-     * Must be called synchronized on vm.state()
-     */
-    boolean isSuspended() {
-        return cache != null;
-    }
-
-    /*
-     * A JDWP command has been completed (reply has been received).
-     * Update data that tracks pending resume commands.
-     */
-    synchronized void notifyCommandComplete(int id) {
-        lastCompletedCommandId = id;
-    }
-
-    synchronized void freeze() {
-        if (cache == null && (lastCompletedCommandId >= lastResumeCommandId)) {
-            /*
-             * No pending resumes to worry about. The VM is suspended
-             * and additional state can be cached. Notify all
-             * interested listeners.
-             */
-            processVMAction(new VMAction(vm, VMAction.VM_SUSPENDED));
-            enableCache();
-        }
-    }
-
-    synchronized PacketStream thawCommand(CommandSender sender) {
-        PacketStream stream = sender.send();
-        lastResumeCommandId = stream.id();
-        thaw();
-        return stream;
-    }
-
-    /**
-     * All threads are resuming
-     */
-    void thaw() {
-        thaw(null);
-    }
-
-    /**
-     * Tell listeners to invalidate suspend-sensitive caches.
-     * If resumingThread != null, then only that thread is being
-     * resumed.
-     */
-    synchronized void thaw(ThreadReference resumingThread) {
-        if (cache != null) {
-            if ((vm.traceFlags & vm.TRACE_OBJREFS) != 0) {
-                vm.printTrace("Clearing VM suspended cache");
-            }
-            disableCache();
-        }
-        processVMAction(new VMAction(vm, resumingThread, VMAction.VM_NOT_SUSPENDED));
-    }
-
-    private synchronized void processVMAction(VMAction action) {
-        if (!notifyingListeners) {
-            // Prevent recursion
-            notifyingListeners = true;
-
-            Iterator iter = listeners.iterator();
-            while (iter.hasNext()) {
-                WeakReference ref = (WeakReference)iter.next();
-                VMListener listener = (VMListener)ref.get();
-                if (listener != null) {
-                    boolean keep = true;
-                    switch (action.id()) {
-                        case VMAction.VM_SUSPENDED:
-                            keep = listener.vmSuspended(action);
-                            break;
-                        case VMAction.VM_NOT_SUSPENDED:
-                            keep = listener.vmNotSuspended(action);
-                            break;
-                    }
-                    if (!keep) {
-                        iter.remove();
-                    }
-                } else {
-                    // Listener is unreachable; clean up
-                    iter.remove();
-                }
-            }
-
-            notifyingListeners = false;
-        }
-    }
-
-    synchronized void addListener(VMListener listener) {
-        listeners.add(new WeakReference<VMListener>(listener));
-    }
-
-    synchronized boolean hasListener(VMListener listener) {
-        return listeners.contains(listener);
-    }
-
-    synchronized void removeListener(VMListener listener) {
-        Iterator iter = listeners.iterator();
-        while (iter.hasNext()) {
-            WeakReference ref = (WeakReference)iter.next();
-            if (listener.equals(ref.get())) {
-                iter.remove();
-                break;
-            }
-        }
-    }
-
-    List<ThreadReference> allThreads() {
-        List<ThreadReference> threads = null;
-        try {
-            Cache local = getCache();
-
-            if (local != null) {
-                // may be stale when returned, but not provably so
-                threads = local.threads;
-            }
-            if (threads == null) {
-                threads = Arrays.asList((ThreadReference[])JDWP.VirtualMachine.AllThreads.
-                                        process(vm).threads);
-                if (local != null) {
-                    local.threads = threads;
-                    if ((vm.traceFlags & vm.TRACE_OBJREFS) != 0) {
-                        vm.printTrace("Caching all threads (count = " +
-                                      threads.size() + ") while VM suspended");
-                    }
-                }
-            }
-        } catch (JDWPException exc) {
-            throw exc.toJDIException();
-        }
-        return threads;
-    }
-
-
-    List<ThreadGroupReference> topLevelThreadGroups() {
-        List<ThreadGroupReference> groups = null;
-        try {
-            Cache local = getCache();
-
-            if (local != null) {
-                groups = local.groups;
-            }
-            if (groups == null) {
-                groups = Arrays.asList(
-                                (ThreadGroupReference[])JDWP.VirtualMachine.TopLevelThreadGroups.
-                                       process(vm).groups);
-                if (local != null) {
-                    local.groups = groups;
-                    if ((vm.traceFlags & vm.TRACE_OBJREFS) != 0) {
-                        vm.printTrace(
-                          "Caching top level thread groups (count = " +
-                          groups.size() + ") while VM suspended");
-                    }
-                }
-            }
-        } catch (JDWPException exc) {
-            throw exc.toJDIException();
-        }
-        return groups;
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/ValueContainer.java b/ojluni/src/main/java/com/sun/tools/jdi/ValueContainer.java
deleted file mode 100755
index a0a5135..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/ValueContainer.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (c) 1999, 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.tools.jdi;
-
-import com.sun.jdi.*;
-
-/*
- * This interface allows us to pass fields, variables, and
- * array components through the same interfaces. This currently allows
- * more common code for type checking. In the future we could use it for
- * more.
- */
-interface ValueContainer {
-    Type type() throws ClassNotLoadedException;
-    Type findType(String signature) throws ClassNotLoadedException;
-    String typeName();
-    String signature();
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/ValueImpl.java b/ojluni/src/main/java/com/sun/tools/jdi/ValueImpl.java
deleted file mode 100755
index 6a9ca4b..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/ValueImpl.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (c) 1998, 1999, 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.tools.jdi;
-
-import com.sun.jdi.*;
-
-abstract class ValueImpl extends MirrorImpl implements Value {
-
-    ValueImpl(VirtualMachine aVm) {
-        super(aVm);
-    }
-
-    static ValueImpl prepareForAssignment(Value value,
-                                          ValueContainer destination)
-                  throws InvalidTypeException, ClassNotLoadedException {
-        if (value == null) {
-            /*
-             * TO DO: Centralize JNI signature knowledge
-             */
-            if (destination.signature().length() == 1) {
-                throw new InvalidTypeException("Can't set a primitive type to null");
-            }
-            return null;    // no further checking or conversion necessary
-        } else {
-            return ((ValueImpl)value).prepareForAssignmentTo(destination);
-        }
-    }
-
-    static byte typeValueKey(Value val) {
-        if (val == null) {
-            return JDWP.Tag.OBJECT;
-        } else {
-            return ((ValueImpl)val).typeValueKey();
-        }
-    }
-
-    abstract ValueImpl prepareForAssignmentTo(ValueContainer destination)
-                 throws InvalidTypeException, ClassNotLoadedException;
-
-    abstract byte typeValueKey();
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/VirtualMachineImpl.java b/ojluni/src/main/java/com/sun/tools/jdi/VirtualMachineImpl.java
deleted file mode 100755
index 7367b93..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/VirtualMachineImpl.java
+++ /dev/null
@@ -1,1442 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package com.sun.tools.jdi;
-
-import com.sun.jdi.*;
-import com.sun.jdi.connect.spi.Connection;
-import com.sun.jdi.request.EventRequestManager;
-import com.sun.jdi.request.EventRequest;
-import com.sun.jdi.request.BreakpointRequest;
-import com.sun.jdi.event.EventQueue;
-
-import java.util.*;
-import java.text.MessageFormat;
-import java.lang.ref.ReferenceQueue;
-import java.lang.ref.Reference;
-import java.lang.ref.SoftReference;
-import java.lang.ref.WeakReference;
-
-class VirtualMachineImpl extends MirrorImpl
-             implements PathSearchingVirtualMachine, ThreadListener {
-    // VM Level exported variables, these
-    // are unique to a given vm
-    public final int sizeofFieldRef;
-    public final int sizeofMethodRef;
-    public final int sizeofObjectRef;
-    public final int sizeofClassRef;
-    public final int sizeofFrameRef;
-
-    final int sequenceNumber;
-
-    private final TargetVM target;
-    private final EventQueueImpl eventQueue;
-    private final EventRequestManagerImpl internalEventRequestManager;
-    private final EventRequestManagerImpl eventRequestManager;
-    final VirtualMachineManagerImpl vmManager;
-    private final ThreadGroup threadGroupForJDI;
-
-    // Allow direct access to this field so that that tracing code slows down
-    // JDI as little as possible when not enabled.
-    int traceFlags = TRACE_NONE;
-
-    static int TRACE_RAW_SENDS     = 0x01000000;
-    static int TRACE_RAW_RECEIVES  = 0x02000000;
-
-    boolean traceReceives = false;   // pre-compute because of frequency
-
-    // ReferenceType access - updated with class prepare and unload events
-    // Protected by "synchronized(this)". "retrievedAllTypes" may be
-    // tested unsynchronized (since once true, it stays true), but must
-    // be set synchronously
-    private Map<Long, ReferenceType> typesByID;
-    private TreeSet<ReferenceType> typesBySignature;
-    private boolean retrievedAllTypes = false;
-
-    // For other languages support
-    private String defaultStratum = null;
-
-    // ObjectReference cache
-    // "objectsByID" protected by "synchronized(this)".
-    private final Map<Long, SoftObjectReference> objectsByID = new HashMap<Long, SoftObjectReference>();
-    private final ReferenceQueue<ObjectReferenceImpl> referenceQueue = new ReferenceQueue<ObjectReferenceImpl>();
-    static private final int DISPOSE_THRESHOLD = 50;
-    private final List<SoftObjectReference> batchedDisposeRequests =
-            Collections.synchronizedList(new ArrayList<SoftObjectReference>(DISPOSE_THRESHOLD + 10));
-
-    // These are cached once for the life of the VM
-    private JDWP.VirtualMachine.Version versionInfo;
-    private JDWP.VirtualMachine.ClassPaths pathInfo;
-    private JDWP.VirtualMachine.Capabilities capabilities = null;
-    private JDWP.VirtualMachine.CapabilitiesNew capabilitiesNew = null;
-
-    // Per-vm singletons for primitive types and for void.
-    // singleton-ness protected by "synchronized(this)".
-    private BooleanType theBooleanType;
-    private ByteType    theByteType;
-    private CharType    theCharType;
-    private ShortType   theShortType;
-    private IntegerType theIntegerType;
-    private LongType    theLongType;
-    private FloatType   theFloatType;
-    private DoubleType  theDoubleType;
-
-    private VoidType    theVoidType;
-
-    private VoidValue voidVal;
-
-    // Launched debuggee process
-    private Process process;
-
-    // coordinates state changes and corresponding listener notifications
-    private VMState state = new VMState(this);
-
-    private Object initMonitor = new Object();
-    private boolean initComplete = false;
-    private boolean shutdown = false;
-
-    private void notifyInitCompletion() {
-        synchronized(initMonitor) {
-            initComplete = true;
-            initMonitor.notifyAll();
-        }
-    }
-
-    void waitInitCompletion() {
-        synchronized(initMonitor) {
-            while (!initComplete) {
-                try {
-                    initMonitor.wait();
-                } catch (InterruptedException e) {
-                    // ignore
-                }
-            }
-        }
-    }
-
-    VMState state() {
-        return state;
-    }
-
-    /*
-     * ThreadListener implementation
-     */
-    public boolean threadResumable(ThreadAction action) {
-        /*
-         * If any thread is resumed, the VM is considered not suspended.
-         * Just one thread is being resumed so pass it to thaw.
-         */
-        state.thaw(action.thread());
-        return true;
-    }
-
-    VirtualMachineImpl(VirtualMachineManager manager,
-                       Connection connection, Process process,
-                       int sequenceNumber) {
-        super(null);  // Can't use super(this)
-        vm = this;
-
-        this.vmManager = (VirtualMachineManagerImpl)manager;
-        this.process = process;
-        this.sequenceNumber = sequenceNumber;
-
-        /* Create ThreadGroup to be used by all threads servicing
-         * this VM.
-         */
-        threadGroupForJDI = new ThreadGroup(vmManager.mainGroupForJDI(),
-                                            "JDI [" +
-                                            this.hashCode() + "]");
-
-        /*
-         * Set up a thread to communicate with the target VM over
-         * the specified transport.
-         */
-        target = new TargetVM(this, connection);
-
-        /*
-         * Set up a thread to handle events processed internally
-         * the JDI implementation.
-         */
-        EventQueueImpl internalEventQueue = new EventQueueImpl(this, target);
-        new InternalEventHandler(this, internalEventQueue);
-        /*
-         * Initialize client access to event setting and handling
-         */
-        eventQueue = new EventQueueImpl(this, target);
-        eventRequestManager = new EventRequestManagerImpl(this);
-
-        target.start();
-
-        /*
-         * Many ids are variably sized, depending on target VM.
-         * Find out the sizes right away.
-         */
-        JDWP.VirtualMachine.IDSizes idSizes;
-        try {
-            idSizes = JDWP.VirtualMachine.IDSizes.process(vm);
-        } catch (JDWPException exc) {
-            throw exc.toJDIException();
-        }
-        sizeofFieldRef  = idSizes.fieldIDSize;
-        sizeofMethodRef = idSizes.methodIDSize;
-        sizeofObjectRef = idSizes.objectIDSize;
-        sizeofClassRef = idSizes.referenceTypeIDSize;
-        sizeofFrameRef  = idSizes.frameIDSize;
-
-        /**
-         * Set up requests needed by internal event handler.
-         * Make sure they are distinguished by creating them with
-         * an internal event request manager.
-         *
-         * Warning: create events only with SUSPEND_NONE policy.
-         * In the current implementation other policies will not
-         * be handled correctly when the event comes in. (notfiySuspend()
-         * will not be properly called, and if the event is combined
-         * with external events in the same set, suspend policy is not
-         * correctly determined for the internal vs. external event sets)
-         */
-        internalEventRequestManager = new EventRequestManagerImpl(this);
-        EventRequest er = internalEventRequestManager.createClassPrepareRequest();
-        er.setSuspendPolicy(EventRequest.SUSPEND_NONE);
-        er.enable();
-        er = internalEventRequestManager.createClassUnloadRequest();
-        er.setSuspendPolicy(EventRequest.SUSPEND_NONE);
-        er.enable();
-
-        /*
-         * Tell other threads, notably TargetVM, that initialization
-         * is complete.
-         */
-        notifyInitCompletion();
-    }
-
-    EventRequestManagerImpl getInternalEventRequestManager() {
-        return internalEventRequestManager;
-    }
-
-    void validateVM() {
-        /*
-         * We no longer need to do this.  The spec now says
-         * that a VMDisconnected _may_ be thrown in these
-         * cases, not that it _will_ be thrown.
-         * So, to simplify things we will just let the
-         * caller's of this method proceed with their business.
-         * If the debuggee is disconnected, either because it
-         * crashed or finished or something, or because the
-         * debugger called exit() or dispose(), then if
-         * we end up trying to communicate with the debuggee,
-         * code in TargetVM will throw a VMDisconnectedException.
-         * This means that if we can satisfy a request without
-         * talking to the debuggee, (eg, with cached data) then
-         * VMDisconnectedException will _not_ be thrown.
-         * if (shutdown) {
-         *    throw new VMDisconnectedException();
-         * }
-         */
-    }
-
-    public boolean equals(Object obj) {
-        return this == obj;
-    }
-
-    public int hashCode() {
-        return System.identityHashCode(this);
-    }
-
-    public List<ReferenceType> classesByName(String className) {
-        validateVM();
-        String signature = JNITypeParser.typeNameToSignature(className);
-        List<ReferenceType> list;
-        if (retrievedAllTypes) {
-           list = findReferenceTypes(signature);
-        } else {
-           list = retrieveClassesBySignature(signature);
-        }
-        return Collections.unmodifiableList(list);
-    }
-
-    public List<ReferenceType> allClasses() {
-        validateVM();
-
-        if (!retrievedAllTypes) {
-            retrieveAllClasses();
-        }
-        ArrayList<ReferenceType> a;
-        synchronized (this) {
-            a = new ArrayList<ReferenceType>(typesBySignature);
-        }
-        return Collections.unmodifiableList(a);
-    }
-
-    public void
-        redefineClasses(Map<? extends ReferenceType,byte[]> classToBytes)
-    {
-        int cnt = classToBytes.size();
-        JDWP.VirtualMachine.RedefineClasses.ClassDef[] defs =
-            new JDWP.VirtualMachine.RedefineClasses.ClassDef[cnt];
-        validateVM();
-        if (!canRedefineClasses()) {
-            throw new UnsupportedOperationException();
-        }
-        Iterator it = classToBytes.entrySet().iterator();
-        for (int i = 0; it.hasNext(); i++) {
-            Map.Entry entry = (Map.Entry)it.next();
-            ReferenceTypeImpl refType = (ReferenceTypeImpl)entry.getKey();
-            validateMirror(refType);
-            defs[i] = new JDWP.VirtualMachine.RedefineClasses
-                       .ClassDef(refType, (byte[])entry.getValue());
-        }
-
-        // flush caches and disable caching until the next suspend
-        vm.state().thaw();
-
-        try {
-            JDWP.VirtualMachine.RedefineClasses.
-                process(vm, defs);
-        } catch (JDWPException exc) {
-            switch (exc.errorCode()) {
-            case JDWP.Error.INVALID_CLASS_FORMAT :
-                throw new ClassFormatError(
-                        "class not in class file format");
-            case JDWP.Error.CIRCULAR_CLASS_DEFINITION :
-                throw new ClassCircularityError(
-       "circularity has been detected while initializing a class");
-            case JDWP.Error.FAILS_VERIFICATION :
-                throw new VerifyError(
-   "verifier detected internal inconsistency or security problem");
-            case JDWP.Error.UNSUPPORTED_VERSION :
-                throw new UnsupportedClassVersionError(
-                    "version numbers of class are not supported");
-            case JDWP.Error.ADD_METHOD_NOT_IMPLEMENTED:
-                throw new UnsupportedOperationException(
-                              "add method not implemented");
-            case JDWP.Error.SCHEMA_CHANGE_NOT_IMPLEMENTED :
-                throw new UnsupportedOperationException(
-                              "schema change not implemented");
-            case JDWP.Error.HIERARCHY_CHANGE_NOT_IMPLEMENTED:
-                throw new UnsupportedOperationException(
-                              "hierarchy change not implemented");
-            case JDWP.Error.DELETE_METHOD_NOT_IMPLEMENTED :
-                throw new UnsupportedOperationException(
-                              "delete method not implemented");
-            case JDWP.Error.CLASS_MODIFIERS_CHANGE_NOT_IMPLEMENTED:
-                throw new UnsupportedOperationException(
-                       "changes to class modifiers not implemented");
-            case JDWP.Error.METHOD_MODIFIERS_CHANGE_NOT_IMPLEMENTED :
-                throw new UnsupportedOperationException(
-                       "changes to method modifiers not implemented");
-            case JDWP.Error.NAMES_DONT_MATCH :
-                throw new NoClassDefFoundError(
-                              "class names do not match");
-            default:
-                throw exc.toJDIException();
-            }
-        }
-
-        // Delete any record of the breakpoints
-        List<BreakpointRequest> toDelete = new ArrayList<BreakpointRequest>();
-        EventRequestManager erm = eventRequestManager();
-        it = erm.breakpointRequests().iterator();
-        while (it.hasNext()) {
-            BreakpointRequest req = (BreakpointRequest)it.next();
-            if (classToBytes.containsKey(req.location().declaringType())) {
-                toDelete.add(req);
-            }
-        }
-        erm.deleteEventRequests(toDelete);
-
-        // Invalidate any information cached for the classes just redefined.
-        it = classToBytes.keySet().iterator();
-        while (it.hasNext()) {
-            ReferenceTypeImpl rti = (ReferenceTypeImpl)it.next();
-            rti.noticeRedefineClass();
-        }
-    }
-
-    public List<ThreadReference> allThreads() {
-        validateVM();
-        return state.allThreads();
-    }
-
-    public List<ThreadGroupReference> topLevelThreadGroups() {
-        validateVM();
-        return state.topLevelThreadGroups();
-    }
-
-    /*
-     * Sends a command to the back end which is defined to do an
-     * implicit vm-wide resume. The VM can no longer be considered
-     * suspended, so certain cached data must be invalidated.
-     */
-    PacketStream sendResumingCommand(CommandSender sender) {
-        return state.thawCommand(sender);
-    }
-
-    /*
-     * The VM has been suspended. Additional caching can be done
-     * as long as there are no pending resumes.
-     */
-    void notifySuspend() {
-        state.freeze();
-    }
-
-    public void suspend() {
-        validateVM();
-        try {
-            JDWP.VirtualMachine.Suspend.process(vm);
-        } catch (JDWPException exc) {
-            throw exc.toJDIException();
-        }
-        notifySuspend();
-    }
-
-    public void resume() {
-        validateVM();
-        CommandSender sender =
-            new CommandSender() {
-                public PacketStream send() {
-                    return JDWP.VirtualMachine.Resume.enqueueCommand(vm);
-                }
-        };
-        try {
-            PacketStream stream = state.thawCommand(sender);
-            JDWP.VirtualMachine.Resume.waitForReply(vm, stream);
-        } catch (VMDisconnectedException exc) {
-            /*
-             * If the debugger makes a VMDeathRequest with SUSPEND_ALL,
-             * then when it does an EventSet.resume after getting the
-             * VMDeathEvent, the normal flow of events is that the
-             * BE shuts down, but the waitForReply comes back ok.  In this
-             * case, the run loop in TargetVM that is waiting for a packet
-             * gets an EOF because the socket closes. It generates a
-             * VMDisconnectedEvent and everyone is happy.
-             * However, sometimes, the BE gets shutdown before this
-             * waitForReply completes.  In this case, TargetVM.waitForReply
-             * gets awakened with no reply and so gens a VMDisconnectedException
-             * which is not what we want.  It might be possible to fix this
-             * in the BE, but it is ok to just ignore the VMDisconnectedException
-             * here.  This will allow the VMDisconnectedEvent to be generated
-             * correctly.  And, if the debugger should happen to make another
-             * request, it will get a VMDisconnectedException at that time.
-             */
-        } catch (JDWPException exc) {
-            switch (exc.errorCode()) {
-                case JDWP.Error.VM_DEAD:
-                    return;
-                default:
-                    throw exc.toJDIException();
-            }
-        }
-    }
-
-    public EventQueue eventQueue() {
-        /*
-         * No VM validation here. We allow access to the event queue
-         * after disconnection, so that there is access to the terminating
-         * events.
-         */
-        return eventQueue;
-    }
-
-    public EventRequestManager eventRequestManager() {
-        validateVM();
-        return eventRequestManager;
-    }
-
-    EventRequestManagerImpl eventRequestManagerImpl() {
-        return eventRequestManager;
-    }
-
-    public BooleanValue mirrorOf(boolean value) {
-        validateVM();
-        return new BooleanValueImpl(this,value);
-    }
-
-    public ByteValue mirrorOf(byte value) {
-        validateVM();
-        return new ByteValueImpl(this,value);
-    }
-
-    public CharValue mirrorOf(char value) {
-        validateVM();
-        return new CharValueImpl(this,value);
-    }
-
-    public ShortValue mirrorOf(short value) {
-        validateVM();
-        return new ShortValueImpl(this,value);
-    }
-
-    public IntegerValue mirrorOf(int value) {
-        validateVM();
-        return new IntegerValueImpl(this,value);
-    }
-
-    public LongValue mirrorOf(long value) {
-        validateVM();
-        return new LongValueImpl(this,value);
-    }
-
-    public FloatValue mirrorOf(float value) {
-        validateVM();
-        return new FloatValueImpl(this,value);
-    }
-
-    public DoubleValue mirrorOf(double value) {
-        validateVM();
-        return new DoubleValueImpl(this,value);
-    }
-
-    public StringReference mirrorOf(String value) {
-        validateVM();
-        try {
-            return (StringReference)JDWP.VirtualMachine.CreateString.
-                             process(vm, value).stringObject;
-        } catch (JDWPException exc) {
-            throw exc.toJDIException();
-        }
-    }
-
-    public VoidValue mirrorOfVoid() {
-        if (voidVal == null) {
-            voidVal = new VoidValueImpl(this);
-        }
-        return voidVal;
-    }
-
-    public long[] instanceCounts(List<? extends ReferenceType> classes) {
-        if (!canGetInstanceInfo()) {
-            throw new UnsupportedOperationException(
-                "target does not support getting instances");
-        }
-        long[] retValue ;
-        ReferenceTypeImpl[] rtArray = new ReferenceTypeImpl[classes.size()];
-        int ii = 0;
-        for (ReferenceType rti: classes) {
-            validateMirror(rti);
-            rtArray[ii++] = (ReferenceTypeImpl)rti;
-        }
-        try {
-            retValue = JDWP.VirtualMachine.InstanceCounts.
-                                process(vm, rtArray).counts;
-        } catch (JDWPException exc) {
-            throw exc.toJDIException();
-        }
-
-        return retValue;
-    }
-
-    public void dispose() {
-        validateVM();
-        shutdown = true;
-        try {
-            JDWP.VirtualMachine.Dispose.process(vm);
-        } catch (JDWPException exc) {
-            throw exc.toJDIException();
-        }
-        target.stopListening();
-    }
-
-    public void exit(int exitCode) {
-        validateVM();
-        shutdown = true;
-        try {
-            JDWP.VirtualMachine.Exit.process(vm, exitCode);
-        } catch (JDWPException exc) {
-            throw exc.toJDIException();
-        }
-        target.stopListening();
-    }
-
-    public Process process() {
-        validateVM();
-        return process;
-    }
-
-    private JDWP.VirtualMachine.Version versionInfo() {
-       try {
-           if (versionInfo == null) {
-               // Need not be synchronized since it is static information
-               versionInfo = JDWP.VirtualMachine.Version.process(vm);
-           }
-           return versionInfo;
-       } catch (JDWPException exc) {
-           throw exc.toJDIException();
-       }
-   }
-    public String description() {
-        validateVM();
-
-        return MessageFormat.format(vmManager.getString("version_format"),
-                                    "" + vmManager.majorInterfaceVersion(),
-                                    "" + vmManager.minorInterfaceVersion(),
-                                     versionInfo().description);
-    }
-
-    public String version() {
-        validateVM();
-        return versionInfo().vmVersion;
-    }
-
-    public String name() {
-        validateVM();
-        return versionInfo().vmName;
-    }
-
-    public boolean canWatchFieldModification() {
-        validateVM();
-        return capabilities().canWatchFieldModification;
-    }
-    public boolean canWatchFieldAccess() {
-        validateVM();
-        return capabilities().canWatchFieldAccess;
-    }
-    public boolean canGetBytecodes() {
-        validateVM();
-        return capabilities().canGetBytecodes;
-    }
-    public boolean canGetSyntheticAttribute() {
-        validateVM();
-        return capabilities().canGetSyntheticAttribute;
-    }
-    public boolean canGetOwnedMonitorInfo() {
-        validateVM();
-        return capabilities().canGetOwnedMonitorInfo;
-    }
-    public boolean canGetCurrentContendedMonitor() {
-        validateVM();
-        return capabilities().canGetCurrentContendedMonitor;
-    }
-    public boolean canGetMonitorInfo() {
-        validateVM();
-        return capabilities().canGetMonitorInfo;
-    }
-
-    private boolean hasNewCapabilities() {
-        return versionInfo().jdwpMajor > 1 ||
-            versionInfo().jdwpMinor >= 4;
-    }
-
-    boolean canGet1_5LanguageFeatures() {
-        return versionInfo().jdwpMajor > 1 ||
-            versionInfo().jdwpMinor >= 5;
-    }
-
-    public boolean canUseInstanceFilters() {
-        validateVM();
-        return hasNewCapabilities() &&
-            capabilitiesNew().canUseInstanceFilters;
-    }
-    public boolean canRedefineClasses() {
-        validateVM();
-        return hasNewCapabilities() &&
-            capabilitiesNew().canRedefineClasses;
-    }
-    public boolean canAddMethod() {
-        validateVM();
-        return hasNewCapabilities() &&
-            capabilitiesNew().canAddMethod;
-    }
-    public boolean canUnrestrictedlyRedefineClasses() {
-        validateVM();
-        return hasNewCapabilities() &&
-            capabilitiesNew().canUnrestrictedlyRedefineClasses;
-    }
-    public boolean canPopFrames() {
-        validateVM();
-        return hasNewCapabilities() &&
-            capabilitiesNew().canPopFrames;
-    }
-    public boolean canGetMethodReturnValues() {
-        return versionInfo().jdwpMajor > 1 ||
-            versionInfo().jdwpMinor >= 6;
-    }
-    public boolean canGetInstanceInfo() {
-        if (versionInfo().jdwpMajor < 1 ||
-            versionInfo().jdwpMinor < 6) {
-            return false;
-        }
-        validateVM();
-        return hasNewCapabilities() &&
-            capabilitiesNew().canGetInstanceInfo;
-    }
-    public boolean canUseSourceNameFilters() {
-        if (versionInfo().jdwpMajor < 1 ||
-            versionInfo().jdwpMinor < 6) {
-            return false;
-        }
-        return true;
-    }
-    public boolean canForceEarlyReturn() {
-        validateVM();
-        return hasNewCapabilities() &&
-            capabilitiesNew().canForceEarlyReturn;
-    }
-    public boolean canBeModified() {
-        return true;
-    }
-    public boolean canGetSourceDebugExtension() {
-        validateVM();
-        return hasNewCapabilities() &&
-            capabilitiesNew().canGetSourceDebugExtension;
-    }
-    public boolean canGetClassFileVersion() {
-        if ( versionInfo().jdwpMajor < 1 &&
-             versionInfo().jdwpMinor  < 6) {
-            return false;
-        } else {
-            return true;
-        }
-    }
-    public boolean canGetConstantPool() {
-        validateVM();
-        return hasNewCapabilities() &&
-            capabilitiesNew().canGetConstantPool;
-    }
-    public boolean canRequestVMDeathEvent() {
-        validateVM();
-        return hasNewCapabilities() &&
-            capabilitiesNew().canRequestVMDeathEvent;
-    }
-    public boolean canRequestMonitorEvents() {
-        validateVM();
-        return hasNewCapabilities() &&
-            capabilitiesNew().canRequestMonitorEvents;
-    }
-    public boolean canGetMonitorFrameInfo() {
-        validateVM();
-        return hasNewCapabilities() &&
-            capabilitiesNew().canGetMonitorFrameInfo;
-    }
-
-    public void setDebugTraceMode(int traceFlags) {
-        validateVM();
-        this.traceFlags = traceFlags;
-        this.traceReceives = (traceFlags & TRACE_RECEIVES) != 0;
-    }
-
-    void printTrace(String string) {
-        System.err.println("[JDI: " + string + "]");
-    }
-
-    void printReceiveTrace(int depth, String string) {
-        StringBuffer sb = new StringBuffer("Receiving:");
-        for (int i = depth; i > 0; --i) {
-            sb.append("    ");
-        }
-        sb.append(string);
-        printTrace(sb.toString());
-    }
-
-    private synchronized ReferenceTypeImpl addReferenceType(long id,
-                                                       int tag,
-                                                       String signature) {
-        if (typesByID == null) {
-            initReferenceTypes();
-        }
-        ReferenceTypeImpl type = null;
-        switch(tag) {
-            case JDWP.TypeTag.CLASS:
-                type = new ClassTypeImpl(vm, id);
-                break;
-            case JDWP.TypeTag.INTERFACE:
-                type = new InterfaceTypeImpl(vm, id);
-                break;
-            case JDWP.TypeTag.ARRAY:
-                type = new ArrayTypeImpl(vm, id);
-                break;
-            default:
-                throw new InternalException("Invalid reference type tag");
-        }
-
-        /*
-         * If a signature was specified, make sure to set it ASAP, to
-         * prevent any needless JDWP command to retrieve it. (for example,
-         * typesBySignature.add needs the signature, to maintain proper
-         * ordering.
-         */
-        if (signature != null) {
-            type.setSignature(signature);
-        }
-
-        typesByID.put(new Long(id), type);
-        typesBySignature.add(type);
-
-        if ((vm.traceFlags & VirtualMachine.TRACE_REFTYPES) != 0) {
-           vm.printTrace("Caching new ReferenceType, sig=" + signature +
-                         ", id=" + id);
-        }
-
-        return type;
-    }
-
-    synchronized void removeReferenceType(String signature) {
-        if (typesByID == null) {
-            return;
-        }
-        /*
-         * There can be multiple classes with the same name. Since
-         * we can't differentiate here, we first remove all
-         * matching classes from our cache...
-         */
-        Iterator iter = typesBySignature.iterator();
-        int matches = 0;
-        while (iter.hasNext()) {
-            ReferenceTypeImpl type = (ReferenceTypeImpl)iter.next();
-            int comp = signature.compareTo(type.signature());
-            if (comp == 0) {
-                matches++;
-                iter.remove();
-                typesByID.remove(new Long(type.ref()));
-                if ((vm.traceFlags & VirtualMachine.TRACE_REFTYPES) != 0) {
-                   vm.printTrace("Uncaching ReferenceType, sig=" + signature +
-                                 ", id=" + type.ref());
-                }
-/* fix for 4359077 , don't break out. list is no longer sorted
-        in the order we think
- */
-            }
-        }
-
-        /*
-         * ...and if there was more than one, re-retrieve the classes
-         * with that name
-         */
-        if (matches > 1) {
-            retrieveClassesBySignature(signature);
-        }
-    }
-
-    private synchronized List<ReferenceType> findReferenceTypes(String signature) {
-        if (typesByID == null) {
-            return new ArrayList<ReferenceType>(0);
-        }
-        Iterator iter = typesBySignature.iterator();
-        List<ReferenceType> list = new ArrayList<ReferenceType>();
-        while (iter.hasNext()) {
-            ReferenceTypeImpl type = (ReferenceTypeImpl)iter.next();
-            int comp = signature.compareTo(type.signature());
-            if (comp == 0) {
-                list.add(type);
-/* fix for 4359077 , don't break out. list is no longer sorted
-        in the order we think
- */
-            }
-        }
-        return list;
-    }
-
-    private void initReferenceTypes() {
-        typesByID = new HashMap<Long, ReferenceType>(300);
-        typesBySignature = new TreeSet<ReferenceType>();
-    }
-
-    ReferenceTypeImpl referenceType(long ref, byte tag) {
-        return referenceType(ref, tag, null);
-    }
-
-    ClassTypeImpl classType(long ref) {
-        return (ClassTypeImpl)referenceType(ref, JDWP.TypeTag.CLASS, null);
-    }
-
-    InterfaceTypeImpl interfaceType(long ref) {
-        return (InterfaceTypeImpl)referenceType(ref, JDWP.TypeTag.INTERFACE, null);
-    }
-
-    ArrayTypeImpl arrayType(long ref) {
-        return (ArrayTypeImpl)referenceType(ref, JDWP.TypeTag.ARRAY, null);
-    }
-
-    ReferenceTypeImpl referenceType(long id, int tag,
-                                                 String signature) {
-        if ((vm.traceFlags & VirtualMachine.TRACE_REFTYPES) != 0) {
-            StringBuffer sb = new StringBuffer();
-            sb.append("Looking up ");
-            if (tag == JDWP.TypeTag.CLASS) {
-                sb.append("Class");
-            } else if (tag == JDWP.TypeTag.INTERFACE) {
-                sb.append("Interface");
-            } else if (tag == JDWP.TypeTag.ARRAY) {
-                sb.append("ArrayType");
-            } else {
-                sb.append("UNKNOWN TAG: " + tag);
-            }
-            if (signature != null) {
-                sb.append(", signature='" + signature + "'");
-            }
-            sb.append(", id=" + id);
-            vm.printTrace(sb.toString());
-        }
-        if (id == 0) {
-            return null;
-        } else {
-            ReferenceTypeImpl retType = null;
-            synchronized (this) {
-                if (typesByID != null) {
-                    retType = (ReferenceTypeImpl)typesByID.get(new Long(id));
-                }
-                if (retType == null) {
-                    retType = addReferenceType(id, tag, signature);
-                }
-            }
-            return retType;
-        }
-    }
-
-    private JDWP.VirtualMachine.Capabilities capabilities() {
-        if (capabilities == null) {
-            try {
-                capabilities = JDWP.VirtualMachine
-                                 .Capabilities.process(vm);
-            } catch (JDWPException exc) {
-                throw exc.toJDIException();
-            }
-        }
-        return capabilities;
-    }
-
-    private JDWP.VirtualMachine.CapabilitiesNew capabilitiesNew() {
-        if (capabilitiesNew == null) {
-            try {
-                capabilitiesNew = JDWP.VirtualMachine
-                                 .CapabilitiesNew.process(vm);
-            } catch (JDWPException exc) {
-                throw exc.toJDIException();
-            }
-        }
-        return capabilitiesNew;
-    }
-
-    private List<ReferenceType> retrieveClassesBySignature(String signature) {
-        if ((vm.traceFlags & VirtualMachine.TRACE_REFTYPES) != 0) {
-            vm.printTrace("Retrieving matching ReferenceTypes, sig=" + signature);
-        }
-        JDWP.VirtualMachine.ClassesBySignature.ClassInfo[] cinfos;
-        try {
-            cinfos = JDWP.VirtualMachine.ClassesBySignature.
-                                      process(vm, signature).classes;
-        } catch (JDWPException exc) {
-            throw exc.toJDIException();
-        }
-
-        int count = cinfos.length;
-        List<ReferenceType> list = new ArrayList<ReferenceType>(count);
-
-        // Hold lock during processing to improve performance
-        synchronized (this) {
-            for (int i = 0; i < count; i++) {
-                JDWP.VirtualMachine.ClassesBySignature.ClassInfo ci =
-                                                               cinfos[i];
-                ReferenceTypeImpl type = referenceType(ci.typeID,
-                                                       ci.refTypeTag,
-                                                       signature);
-                type.setStatus(ci.status);
-                list.add(type);
-            }
-        }
-        return list;
-    }
-
-    private void retrieveAllClasses1_4() {
-        JDWP.VirtualMachine.AllClasses.ClassInfo[] cinfos;
-        try {
-            cinfos = JDWP.VirtualMachine.AllClasses.process(vm).classes;
-        } catch (JDWPException exc) {
-            throw exc.toJDIException();
-        }
-
-        // Hold lock during processing to improve performance
-        // and to have safe check/set of retrievedAllTypes
-        synchronized (this) {
-            if (!retrievedAllTypes) {
-                // Number of classes
-                int count = cinfos.length;
-                for (int i=0; i<count; i++) {
-                    JDWP.VirtualMachine.AllClasses.ClassInfo ci =
-                                                               cinfos[i];
-                    ReferenceTypeImpl type = referenceType(ci.typeID,
-                                                           ci.refTypeTag,
-                                                           ci.signature);
-                    type.setStatus(ci.status);
-                }
-                retrievedAllTypes = true;
-            }
-        }
-    }
-
-    private void retrieveAllClasses() {
-        if ((vm.traceFlags & VirtualMachine.TRACE_REFTYPES) != 0) {
-            vm.printTrace("Retrieving all ReferenceTypes");
-        }
-
-        if (!vm.canGet1_5LanguageFeatures()) {
-            retrieveAllClasses1_4();
-            return;
-        }
-
-        /*
-         * To save time (assuming the caller will be
-         * using then) we will get the generic sigs too.
-         */
-
-        JDWP.VirtualMachine.AllClassesWithGeneric.ClassInfo[] cinfos;
-        try {
-            cinfos = JDWP.VirtualMachine.AllClassesWithGeneric.process(vm).classes;
-        } catch (JDWPException exc) {
-            throw exc.toJDIException();
-        }
-
-        // Hold lock during processing to improve performance
-        // and to have safe check/set of retrievedAllTypes
-        synchronized (this) {
-            if (!retrievedAllTypes) {
-                // Number of classes
-                int count = cinfos.length;
-                for (int i=0; i<count; i++) {
-                    JDWP.VirtualMachine.AllClassesWithGeneric.ClassInfo ci =
-                                                               cinfos[i];
-                    ReferenceTypeImpl type = referenceType(ci.typeID,
-                                                           ci.refTypeTag,
-                                                           ci.signature);
-                    type.setGenericSignature(ci.genericSignature);
-                    type.setStatus(ci.status);
-                }
-                retrievedAllTypes = true;
-            }
-        }
-    }
-
-    void sendToTarget(Packet packet) {
-        target.send(packet);
-    }
-
-    void waitForTargetReply(Packet packet) {
-        target.waitForReply(packet);
-        /*
-         * If any object disposes have been batched up, send them now.
-         */
-        processBatchedDisposes();
-    }
-
-    Type findBootType(String signature) throws ClassNotLoadedException {
-        List types = allClasses();
-        Iterator iter = types.iterator();
-        while (iter.hasNext()) {
-            ReferenceType type = (ReferenceType)iter.next();
-            if ((type.classLoader() == null) &&
-                (type.signature().equals(signature))) {
-                return type;
-            }
-        }
-        JNITypeParser parser = new JNITypeParser(signature);
-        throw new ClassNotLoadedException(parser.typeName(),
-                                         "Type " + parser.typeName() + " not loaded");
-    }
-
-    BooleanType theBooleanType() {
-        if (theBooleanType == null) {
-            synchronized(this) {
-                if (theBooleanType == null) {
-                    theBooleanType = new BooleanTypeImpl(this);
-                }
-            }
-        }
-        return theBooleanType;
-    }
-
-    ByteType theByteType() {
-        if (theByteType == null) {
-            synchronized(this) {
-                if (theByteType == null) {
-                    theByteType = new ByteTypeImpl(this);
-                }
-            }
-        }
-        return theByteType;
-    }
-
-    CharType theCharType() {
-        if (theCharType == null) {
-            synchronized(this) {
-                if (theCharType == null) {
-                    theCharType = new CharTypeImpl(this);
-                }
-            }
-        }
-        return theCharType;
-    }
-
-    ShortType theShortType() {
-        if (theShortType == null) {
-            synchronized(this) {
-                if (theShortType == null) {
-                    theShortType = new ShortTypeImpl(this);
-                }
-            }
-        }
-        return theShortType;
-    }
-
-    IntegerType theIntegerType() {
-        if (theIntegerType == null) {
-            synchronized(this) {
-                if (theIntegerType == null) {
-                    theIntegerType = new IntegerTypeImpl(this);
-                }
-            }
-        }
-        return theIntegerType;
-    }
-
-    LongType theLongType() {
-        if (theLongType == null) {
-            synchronized(this) {
-                if (theLongType == null) {
-                    theLongType = new LongTypeImpl(this);
-                }
-            }
-        }
-        return theLongType;
-    }
-
-    FloatType theFloatType() {
-        if (theFloatType == null) {
-            synchronized(this) {
-                if (theFloatType == null) {
-                    theFloatType = new FloatTypeImpl(this);
-                }
-            }
-        }
-        return theFloatType;
-    }
-
-    DoubleType theDoubleType() {
-        if (theDoubleType == null) {
-            synchronized(this) {
-                if (theDoubleType == null) {
-                    theDoubleType = new DoubleTypeImpl(this);
-                }
-            }
-        }
-        return theDoubleType;
-    }
-
-    VoidType theVoidType() {
-        if (theVoidType == null) {
-            synchronized(this) {
-                if (theVoidType == null) {
-                    theVoidType = new VoidTypeImpl(this);
-                }
-            }
-        }
-        return theVoidType;
-    }
-
-    PrimitiveType primitiveTypeMirror(byte tag) {
-        switch (tag) {
-            case JDWP.Tag.BOOLEAN:
-                return theBooleanType();
-            case JDWP.Tag.BYTE:
-                return theByteType();
-            case JDWP.Tag.CHAR:
-                return theCharType();
-            case JDWP.Tag.SHORT:
-                return theShortType();
-            case JDWP.Tag.INT:
-                return theIntegerType();
-            case JDWP.Tag.LONG:
-                return theLongType();
-            case JDWP.Tag.FLOAT:
-                return theFloatType();
-            case JDWP.Tag.DOUBLE:
-                return theDoubleType();
-            default:
-                throw new IllegalArgumentException("Unrecognized primitive tag " + tag);
-        }
-    }
-
-    private void processBatchedDisposes() {
-        if (shutdown) {
-            return;
-        }
-
-        JDWP.VirtualMachine.DisposeObjects.Request[] requests = null;
-        synchronized(batchedDisposeRequests) {
-            int size = batchedDisposeRequests.size();
-            if (size >= DISPOSE_THRESHOLD) {
-                if ((traceFlags & TRACE_OBJREFS) != 0) {
-                    printTrace("Dispose threashold reached. Will dispose "
-                               + size + " object references...");
-                }
-                requests = new JDWP.VirtualMachine.DisposeObjects.Request[size];
-                for (int i = 0; i < requests.length; i++) {
-                    SoftObjectReference ref = batchedDisposeRequests.get(i);
-                    if ((traceFlags & TRACE_OBJREFS) != 0) {
-                        printTrace("Disposing object " + ref.key().longValue() +
-                                   " (ref count = " + ref.count() + ")");
-                    }
-
-                    // This is kludgy. We temporarily re-create an object
-                    // reference so that we can correctly pass its id to the
-                    // JDWP command.
-                    requests[i] =
-                        new JDWP.VirtualMachine.DisposeObjects.Request(
-                            new ObjectReferenceImpl(this, ref.key().longValue()),
-                            ref.count());
-                }
-                batchedDisposeRequests.clear();
-            }
-        }
-        if (requests != null) {
-            try {
-                JDWP.VirtualMachine.DisposeObjects.process(vm, requests);
-            } catch (JDWPException exc) {
-                throw exc.toJDIException();
-            }
-        }
-    }
-
-    private void batchForDispose(SoftObjectReference ref) {
-        if ((traceFlags & TRACE_OBJREFS) != 0) {
-            printTrace("Batching object " + ref.key().longValue() +
-                       " for dispose (ref count = " + ref.count() + ")");
-        }
-        batchedDisposeRequests.add(ref);
-    }
-
-    private void processQueue() {
-        Reference ref;
-        //if ((traceFlags & TRACE_OBJREFS) != 0) {
-        //    printTrace("Checking for softly reachable objects");
-        //}
-        while ((ref = referenceQueue.poll()) != null) {
-            SoftObjectReference softRef = (SoftObjectReference)ref;
-            removeObjectMirror(softRef);
-            batchForDispose(softRef);
-        }
-    }
-
-    synchronized ObjectReferenceImpl objectMirror(long id, int tag) {
-
-        // Handle any queue elements that are not strongly reachable
-        processQueue();
-
-        if (id == 0) {
-            return null;
-        }
-        ObjectReferenceImpl object = null;
-        Long key = new Long(id);
-
-        /*
-         * Attempt to retrieve an existing object object reference
-         */
-        SoftObjectReference ref = objectsByID.get(key);
-        if (ref != null) {
-            object = ref.object();
-        }
-
-        /*
-         * If the object wasn't in the table, or it's soft reference was
-         * cleared, create a new instance.
-         */
-        if (object == null) {
-            switch (tag) {
-                case JDWP.Tag.OBJECT:
-                    object = new ObjectReferenceImpl(vm, id);
-                    break;
-                case JDWP.Tag.STRING:
-                    object = new StringReferenceImpl(vm, id);
-                    break;
-                case JDWP.Tag.ARRAY:
-                    object = new ArrayReferenceImpl(vm, id);
-                    break;
-                case JDWP.Tag.THREAD:
-                    ThreadReferenceImpl thread =
-                        new ThreadReferenceImpl(vm, id);
-                    thread.addListener(this);
-                    object = thread;
-                    break;
-                case JDWP.Tag.THREAD_GROUP:
-                    object = new ThreadGroupReferenceImpl(vm, id);
-                    break;
-                case JDWP.Tag.CLASS_LOADER:
-                    object = new ClassLoaderReferenceImpl(vm, id);
-                    break;
-                case JDWP.Tag.CLASS_OBJECT:
-                    object = new ClassObjectReferenceImpl(vm, id);
-                    break;
-                default:
-                    throw new IllegalArgumentException("Invalid object tag: " + tag);
-            }
-            ref = new SoftObjectReference(key, object, referenceQueue);
-
-            /*
-             * If there was no previous entry in the table, we add one here
-             * If the previous entry was cleared, we replace it here.
-             */
-            objectsByID.put(key, ref);
-            if ((traceFlags & TRACE_OBJREFS) != 0) {
-                printTrace("Creating new " +
-                           object.getClass().getName() + " (id = " + id + ")");
-            }
-        } else {
-            ref.incrementCount();
-        }
-
-        return object;
-    }
-
-    synchronized void removeObjectMirror(ObjectReferenceImpl object) {
-
-        // Handle any queue elements that are not strongly reachable
-        processQueue();
-
-        SoftObjectReference ref = objectsByID.remove(new Long(object.ref()));
-        if (ref != null) {
-            batchForDispose(ref);
-        } else {
-            /*
-             * If there's a live ObjectReference about, it better be part
-             * of the cache.
-             */
-            throw new InternalException("ObjectReference " + object.ref() +
-                                        " not found in object cache");
-        }
-    }
-
-    synchronized void removeObjectMirror(SoftObjectReference ref) {
-        /*
-         * This will remove the soft reference if it has not been
-         * replaced in the cache.
-         */
-        objectsByID.remove(ref.key());
-    }
-
-    ObjectReferenceImpl objectMirror(long id) {
-        return objectMirror(id, JDWP.Tag.OBJECT);
-    }
-
-    StringReferenceImpl stringMirror(long id) {
-        return (StringReferenceImpl)objectMirror(id, JDWP.Tag.STRING);
-    }
-
-    ArrayReferenceImpl arrayMirror(long id) {
-       return (ArrayReferenceImpl)objectMirror(id, JDWP.Tag.ARRAY);
-    }
-
-    ThreadReferenceImpl threadMirror(long id) {
-        return (ThreadReferenceImpl)objectMirror(id, JDWP.Tag.THREAD);
-    }
-
-    ThreadGroupReferenceImpl threadGroupMirror(long id) {
-        return (ThreadGroupReferenceImpl)objectMirror(id,
-                                                      JDWP.Tag.THREAD_GROUP);
-    }
-
-    ClassLoaderReferenceImpl classLoaderMirror(long id) {
-        return (ClassLoaderReferenceImpl)objectMirror(id,
-                                                      JDWP.Tag.CLASS_LOADER);
-    }
-
-    ClassObjectReferenceImpl classObjectMirror(long id) {
-        return (ClassObjectReferenceImpl)objectMirror(id,
-                                                      JDWP.Tag.CLASS_OBJECT);
-    }
-
-    /*
-     * Implementation of PathSearchingVirtualMachine
-     */
-    private JDWP.VirtualMachine.ClassPaths getClasspath() {
-        if (pathInfo == null) {
-            try {
-                pathInfo = JDWP.VirtualMachine.ClassPaths.process(vm);
-            } catch (JDWPException exc) {
-                throw exc.toJDIException();
-            }
-        }
-        return pathInfo;
-    }
-
-   public List<String> classPath() {
-       return Arrays.asList(getClasspath().classpaths);
-   }
-
-   public List<String> bootClassPath() {
-       return Arrays.asList(getClasspath().bootclasspaths);
-   }
-
-   public String baseDirectory() {
-       return getClasspath().baseDir;
-   }
-
-    public void setDefaultStratum(String stratum) {
-        defaultStratum = stratum;
-        if (stratum == null) {
-            stratum = "";
-        }
-        try {
-            JDWP.VirtualMachine.SetDefaultStratum.process(vm,
-                                                          stratum);
-        } catch (JDWPException exc) {
-            throw exc.toJDIException();
-        }
-    }
-
-    public String getDefaultStratum() {
-        return defaultStratum;
-    }
-
-    ThreadGroup threadGroupForJDI() {
-        return threadGroupForJDI;
-    }
-
-   static private class SoftObjectReference extends SoftReference<ObjectReferenceImpl> {
-       int count;
-       Long key;
-
-       SoftObjectReference(Long key, ObjectReferenceImpl mirror,
-                           ReferenceQueue<ObjectReferenceImpl> queue) {
-           super(mirror, queue);
-           this.count = 1;
-           this.key = key;
-       }
-
-       int count() {
-           return count;
-       }
-
-       void incrementCount() {
-           count++;
-       }
-
-       Long key() {
-           return key;
-       }
-
-       ObjectReferenceImpl object() {
-           return get();
-       }
-   }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/VirtualMachineManagerImpl.java b/ojluni/src/main/java/com/sun/tools/jdi/VirtualMachineManagerImpl.java
deleted file mode 100755
index e41b295..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/VirtualMachineManagerImpl.java
+++ /dev/null
@@ -1,271 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package com.sun.tools.jdi;
-
-import com.sun.jdi.*;
-import com.sun.jdi.connect.*;
-import com.sun.jdi.connect.spi.*;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.ResourceBundle;
-import java.io.IOException;
-
-import java.util.ServiceLoader;
-
-/* Public for use by com.sun.jdi.Bootstrap */
-public class VirtualMachineManagerImpl implements VirtualMachineManagerService {
-    private List<Connector> connectors = new ArrayList<Connector>();
-    private LaunchingConnector defaultConnector = null;
-    private List<VirtualMachine> targets = new ArrayList<VirtualMachine>();
-    private final ThreadGroup mainGroupForJDI;
-    private ResourceBundle messages = null;
-    private int vmSequenceNumber = 0;
-    private static final int majorVersion = 1;
-    private static final int minorVersion = 6;
-
-    private static final Object lock = new Object();
-    private static VirtualMachineManagerImpl vmm;
-
-    public static VirtualMachineManager virtualMachineManager() {
-        SecurityManager sm = System.getSecurityManager();
-        if (sm != null) {
-            JDIPermission vmmPermission =
-                new JDIPermission("virtualMachineManager");
-            sm.checkPermission(vmmPermission);
-        }
-        synchronized (lock) {
-            if (vmm == null) {
-                vmm = new VirtualMachineManagerImpl();
-            }
-        }
-        return vmm;
-    }
-
-    protected VirtualMachineManagerImpl() {
-
-        /*
-         * Create a top-level thread group
-         */
-        ThreadGroup top = Thread.currentThread().getThreadGroup();
-        ThreadGroup parent = null;
-        while ((parent = top.getParent()) != null) {
-            top = parent;
-        }
-        mainGroupForJDI = new ThreadGroup(top, "JDI main");
-
-        /*
-         * Load the connectors
-         */
-        ServiceLoader<Connector> connectorLoader =
-            ServiceLoader.load(Connector.class, Connector.class.getClassLoader());
-
-        Iterator<Connector> connectors = connectorLoader.iterator();
-
-        while (connectors.hasNext()) {
-            Connector connector;
-
-            try {
-                connector = connectors.next();
-            } catch (ThreadDeath x) {
-                throw x;
-            } catch (Exception x) {
-                System.err.println(x);
-                continue;
-            } catch (Error x) {
-                System.err.println(x);
-                continue;
-            }
-
-            addConnector(connector);
-        }
-
-        /*
-         * Load any transport services and encapsulate them with
-         * an attaching and listening connector.
-         */
-        ServiceLoader<TransportService> transportLoader =
-            ServiceLoader.load(TransportService.class,
-                               TransportService.class.getClassLoader());
-
-        Iterator<TransportService> transportServices =
-            transportLoader.iterator();
-
-        while (transportServices.hasNext()) {
-            TransportService transportService;
-
-            try {
-                transportService = transportServices.next();
-            } catch (ThreadDeath x) {
-                throw x;
-            } catch (Exception x) {
-                System.err.println(x);
-                continue;
-            } catch (Error x) {
-                System.err.println(x);
-                continue;
-            }
-
-            addConnector(GenericAttachingConnector.create(transportService));
-            addConnector(GenericListeningConnector.create(transportService));
-        }
-
-        // no connectors found
-        if (allConnectors().size() == 0) {
-            throw new Error("no Connectors loaded");
-        }
-
-        // Set the default launcher. In order to be compatible
-        // 1.2/1.3/1.4 we try to make the default launcher
-        // "com.sun.jdi.CommandLineLaunch". If this connector
-        // isn't found then we arbitarly pick the first connector.
-        //
-        boolean found = false;
-        List<LaunchingConnector> launchers = launchingConnectors();
-        for (LaunchingConnector lc: launchers) {
-            if (lc.name().equals("com.sun.jdi.CommandLineLaunch")) {
-                setDefaultConnector(lc);
-                found = true;
-                break;
-            }
-        }
-        if (!found && launchers.size() > 0) {
-            setDefaultConnector(launchers.get(0));
-        }
-
-    }
-
-    public LaunchingConnector defaultConnector() {
-        if (defaultConnector == null) {
-            throw new Error("no default LaunchingConnector");
-        }
-        return defaultConnector;
-    }
-
-    public void setDefaultConnector(LaunchingConnector connector) {
-        defaultConnector = connector;
-    }
-
-    public List<LaunchingConnector> launchingConnectors() {
-        List<LaunchingConnector> launchingConnectors = new ArrayList<LaunchingConnector>(connectors.size());
-        for (Connector connector: connectors) {
-            if (connector instanceof LaunchingConnector) {
-                launchingConnectors.add((LaunchingConnector)connector);
-            }
-        }
-        return Collections.unmodifiableList(launchingConnectors);
-    }
-
-    public List<AttachingConnector> attachingConnectors() {
-        List<AttachingConnector> attachingConnectors = new ArrayList<AttachingConnector>(connectors.size());
-        for (Connector connector: connectors) {
-            if (connector instanceof AttachingConnector) {
-                attachingConnectors.add((AttachingConnector)connector);
-            }
-        }
-        return Collections.unmodifiableList(attachingConnectors);
-    }
-
-    public List<ListeningConnector> listeningConnectors() {
-        List<ListeningConnector> listeningConnectors = new ArrayList<ListeningConnector>(connectors.size());
-        for (Connector connector: connectors) {
-            if (connector instanceof ListeningConnector) {
-                listeningConnectors.add((ListeningConnector)connector);
-            }
-        }
-        return Collections.unmodifiableList(listeningConnectors);
-    }
-
-    public List<Connector> allConnectors() {
-        return Collections.unmodifiableList(connectors);
-    }
-
-    public List<VirtualMachine> connectedVirtualMachines() {
-        return Collections.unmodifiableList(targets);
-    }
-
-    public void addConnector(Connector connector) {
-        connectors.add(connector);
-    }
-
-    public void removeConnector(Connector connector) {
-        connectors.remove(connector);
-    }
-
-    public synchronized VirtualMachine createVirtualMachine(
-                                        Connection connection,
-                                        Process process) throws IOException {
-
-        if (!connection.isOpen()) {
-            throw new IllegalStateException("connection is not open");
-        }
-
-        VirtualMachine vm;
-        try {
-            vm = new VirtualMachineImpl(this, connection, process,
-                                                   ++vmSequenceNumber);
-        } catch (VMDisconnectedException e) {
-            throw new IOException(e.getMessage());
-        }
-        targets.add(vm);
-        return vm;
-    }
-
-    public VirtualMachine createVirtualMachine(Connection connection) throws IOException {
-        return createVirtualMachine(connection, null);
-    }
-
-    public void addVirtualMachine(VirtualMachine vm) {
-        targets.add(vm);
-    }
-
-    void disposeVirtualMachine(VirtualMachine vm) {
-        targets.remove(vm);
-    }
-
-    public int majorInterfaceVersion() {
-        return majorVersion;
-    }
-
-    public int minorInterfaceVersion() {
-        return minorVersion;
-    }
-
-    ThreadGroup mainGroupForJDI() {
-        return mainGroupForJDI;
-    }
-
-    String getString(String key) {
-        if (messages == null) {
-            messages = ResourceBundle.getBundle("com.sun.tools.jdi.resources.jdi");
-        }
-        return messages.getString(key);
-    }
-
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/VirtualMachineManagerService.java b/ojluni/src/main/java/com/sun/tools/jdi/VirtualMachineManagerService.java
deleted file mode 100755
index 55252ad..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/VirtualMachineManagerService.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package com.sun.tools.jdi;
-
-import com.sun.jdi.connect.*;
-import com.sun.jdi.VirtualMachine;
-import com.sun.jdi.VirtualMachineManager;
-import java.io.IOException;
-
-/**
- * VirtualMachineManager SPI
- */
-public interface VirtualMachineManagerService extends VirtualMachineManager {
-    /**
-     * Replaces the default connector.
-     *
-     * @return the default {@link LaunchingConnector}
-     * @throws java.lang.IllegalArgumentException if the given
-     * connector is not a member of the list returned by
-     * {@link #launchingConnectors}
-     *
-     * @param connector the new default connector
-     */
-    void setDefaultConnector(LaunchingConnector connector);
-
-    /**
-     * Adds a connector to the list of known connectors.
-     *
-     * @param connector the connector to be added
-     */
-    void addConnector(Connector connector);
-
-    /**
-     * Removes a connector from the list of known connectors.
-     *
-     * @param connector the connector to be removed
-     */
-    void removeConnector(Connector connector);
-
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/VoidTypeImpl.java b/ojluni/src/main/java/com/sun/tools/jdi/VoidTypeImpl.java
deleted file mode 100755
index dba2a86..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/VoidTypeImpl.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (c) 1998, 1999, 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.tools.jdi;
-
-import com.sun.jdi.*;
-
-public class VoidTypeImpl extends TypeImpl implements VoidType {
-    VoidTypeImpl(VirtualMachine vm) {
-        super(vm);
-    }
-
-    public String signature() {
-        return String.valueOf((char)JDWP.Tag.VOID);
-    }
-
-    public String toString() {
-        return name();
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/VoidValueImpl.java b/ojluni/src/main/java/com/sun/tools/jdi/VoidValueImpl.java
deleted file mode 100755
index 8ad5f64..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/VoidValueImpl.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright (c) 1998, 2006, 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.tools.jdi;
-
-import com.sun.jdi.*;
-
-public class VoidValueImpl extends ValueImpl implements VoidValue {
-
-    VoidValueImpl(VirtualMachine aVm) {
-        super(aVm);
-    }
-
-    public boolean equals(Object obj) {
-        return (obj != null) && (obj instanceof VoidValue) && super.equals(obj);
-    }
-
-    public int hashCode() {
-        /*
-         * TO DO: Better hash code
-         */
-        return 47245;
-    }
-
-    public Type type() {
-        return vm.theVoidType();
-    }
-
-    ValueImpl prepareForAssignmentTo(ValueContainer destination)
-                    throws InvalidTypeException {
-        if ("void".equals(destination.typeName())) {
-            return this;
-        }
-        throw new InvalidTypeException();
-    }
-
-    public String toString() {
-        return "<void value>";
-    }
-
-    byte typeValueKey() {
-        return JDWP.Tag.VOID;
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/resources/jdi.properties b/ojluni/src/main/java/com/sun/tools/jdi/resources/jdi.properties
deleted file mode 100755
index 44ee7d7..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/resources/jdi.properties
+++ /dev/null
@@ -1,52 +0,0 @@
-true = true
-false = false
-version_format = Java Debug Interface (Reference Implementation) version {0}.{1} \n{2}
-raw.command = Raw command to start the debugged application VM
-raw.command.label = Command
-raw.address = Address from which to listen for a connection after the raw command is run
-raw.address.label = Address
-raw.quote = Character used to combine space-delimited text into a single command line argument
-raw.quote.label = Quote
-raw.description = Launches target using user-specified command line and attaches to it
-sun.home = Home directory of the SDK or runtime environment used to launch the application
-sun.home.label = Home 
-sun.options = Launched VM options
-sun.options.label = Options
-sun.main = Main class and arguments, or if -jar is an option, the main jar file and arguments
-sun.main.label = Main
-sun.init_suspend = All threads will be suspended before execution of main
-sun.init_suspend.label = Suspend
-sun.quote = Character used to combine space-delimited text into a single command line argument
-sun.quote.label = Quote
-sun.vm_exec = Name of the Java VM launcher
-sun.vm_exec.label = Launcher
-sun.description = Launches target using Sun Java VM command line and attaches to it
-generic_attaching.address = Address to which to attach for VM connections
-generic_attaching.address.label = Address
-generic_attaching.timeout = Timeout while waiting to attach 
-generic_attaching.timeout.label = Timeout
-generic_listening.address = Address to listen for VM connections
-generic_listening.address.label = Address
-generic_listening.timeout = Timeout while waiting for connection
-generic_listening.timeout.label = Timeout
-socket_transportservice.description = Connects debugger and debugee using a TCP connection
-memory_transportservice.description = Connects debugger and debugee using a shared memory connection
-socket_attaching.host = Machine name to which to attach for VM connections
-socket_attaching.host.label = Host
-socket_attaching.port = Port number to which to attach for VM connections
-socket_attaching.port.label = Port
-socket_attaching.description = Attaches by socket to other VMs
-socket_listening.localaddr = Local address that the listener binds to
-socket_listening.localaddr.label = Local address
-socket_listening.port = Port number at which to listen for VM connections
-socket_listening.port.label = Port
-socket_listening.description = Accepts socket connections initiated by other VMs
-memory_attaching.name = Name of the shared memory area to which to attach for VM connections
-memory_attaching.name.label = Name
-memory_attaching.description = Attaches by shared memory to other VMs
-memory_listening.name = Name of the shared memory area at which to listen for VM connection
-memory_listening.name.label = Name
-memory_listening.description = Accepts shared memory connections initiated by other VMs
-process_attaching.description = Attaches to debuggee by process-id (pid)
-process_attaching.pid = pid
-process_attaching.pid.label = Process-id (pid) of debuggee
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/resources/jdi_ja.properties b/ojluni/src/main/java/com/sun/tools/jdi/resources/jdi_ja.properties
deleted file mode 100755
index 2d8d4e5..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/resources/jdi_ja.properties
+++ /dev/null
@@ -1,52 +0,0 @@
-true = true
-false = false
-version_format = Java Debug Interface(\u30EA\u30D5\u30A1\u30EC\u30F3\u30B9\u5B9F\u88C5)\u30D0\u30FC\u30B8\u30E7\u30F3{0}.{1}\n{2}
-raw.command = \u30C7\u30D0\u30C3\u30B0\u3059\u308B\u30A2\u30D7\u30EA\u30B1\u30FC\u30B7\u30E7\u30F3VM\u3092\u8D77\u52D5\u3055\u305B\u308Braw\u30B3\u30DE\u30F3\u30C9
-raw.command.label = \u30B3\u30DE\u30F3\u30C9
-raw.address = raw\u30B3\u30DE\u30F3\u30C9\u5B9F\u884C\u5F8C\u306B\u63A5\u7D9A\u3092\u30EA\u30B9\u30CB\u30F3\u30B0\u3059\u308B\u30A2\u30C9\u30EC\u30B9
-raw.address.label = \u30A2\u30C9\u30EC\u30B9
-raw.quote = \u5358\u4E00\u306E\u30B3\u30DE\u30F3\u30C9\u30E9\u30A4\u30F3\u5F15\u6570\u5185\u306B\u30B9\u30DA\u30FC\u30B9\u3067\u533A\u5207\u3089\u308C\u305F\u30C6\u30AD\u30B9\u30C8\u3092\u7D50\u3073\u4ED8\u3051\u308B\u305F\u3081\u306B\u4F7F\u7528\u3055\u308C\u308B\u6587\u5B57
-raw.quote.label = \u5F15\u7528\u7B26
-raw.description = \u30E6\u30FC\u30B6\u30FC\u304C\u6307\u5B9A\u3057\u305F\u30B3\u30DE\u30F3\u30C9\u30E9\u30A4\u30F3\u3092\u4F7F\u7528\u3057\u3066\u30BF\u30FC\u30B2\u30C3\u30C8\u3092\u8D77\u52D5\u3057\u3001\u63A5\u7D9A\u3057\u307E\u3059
-sun.home = SDK\u306E\u30DB\u30FC\u30E0\u30FB\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u307E\u305F\u306F\u3001\u30A2\u30D7\u30EA\u30B1\u30FC\u30B7\u30E7\u30F3\u306E\u8D77\u52D5\u306B\u4F7F\u7528\u3055\u308C\u308B\u5B9F\u884C\u74B0\u5883
-sun.home.label = \u30DB\u30FC\u30E0 
-sun.options = \u8D77\u52D5\u3059\u308BVM\u306E\u30AA\u30D7\u30B7\u30E7\u30F3
-sun.options.label = \u30AA\u30D7\u30B7\u30E7\u30F3
-sun.main = \u30E1\u30A4\u30F3\u30FB\u30AF\u30E9\u30B9\u3068\u5F15\u6570\u3001\u307E\u305F\u306F-jar\u304C\u30AA\u30D7\u30B7\u30E7\u30F3\u306E\u5834\u5408\u306B\u306F\u30E1\u30A4\u30F3jar\u30D5\u30A1\u30A4\u30EB\u3068\u5F15\u6570
-sun.main.label = \u30E1\u30A4\u30F3
-sun.init_suspend = \u30E1\u30A4\u30F3\u306E\u5B9F\u884C\u524D\u306B\u3059\u3079\u3066\u306E\u30B9\u30EC\u30C3\u30C9\u304C\u4E2D\u65AD\u3055\u308C\u307E\u3059\u3002
-sun.init_suspend.label = \u4E2D\u65AD
-sun.quote = \u5358\u4E00\u306E\u30B3\u30DE\u30F3\u30C9\u30E9\u30A4\u30F3\u5F15\u6570\u5185\u306B\u30B9\u30DA\u30FC\u30B9\u3067\u533A\u5207\u3089\u308C\u305F\u30C6\u30AD\u30B9\u30C8\u3092\u7D50\u3073\u4ED8\u3051\u308B\u305F\u3081\u306B\u4F7F\u7528\u3055\u308C\u308B\u6587\u5B57
-sun.quote.label = \u5F15\u7528\u7B26
-sun.vm_exec = Java VM\u8D77\u52D5\u30C4\u30FC\u30EB\u540D
-sun.vm_exec.label = \u8D77\u52D5\u30C4\u30FC\u30EB
-sun.description = Sun\u306EJava VM\u30B3\u30DE\u30F3\u30C9\u30E9\u30A4\u30F3\u3092\u4F7F\u7528\u3057\u3066\u30BF\u30FC\u30B2\u30C3\u30C8\u3092\u8D77\u52D5\u3057\u3001\u63A5\u7D9A\u3057\u307E\u3059
-generic_attaching.address = VM\u306B\u63A5\u7D9A\u3059\u308B\u30A2\u30C9\u30EC\u30B9
-generic_attaching.address.label = \u30A2\u30C9\u30EC\u30B9
-generic_attaching.timeout = \u63A5\u7D9A\u3092\u5F85\u3064\u9593\u306E\u30BF\u30A4\u30E0\u30A2\u30A6\u30C8 
-generic_attaching.timeout.label = \u30BF\u30A4\u30E0\u30A2\u30A6\u30C8
-generic_listening.address = VM\u3078\u306E\u63A5\u7D9A\u3092\u30EA\u30B9\u30CB\u30F3\u30B0\u3059\u308B\u30A2\u30C9\u30EC\u30B9
-generic_listening.address.label = \u30A2\u30C9\u30EC\u30B9
-generic_listening.timeout = \u63A5\u7D9A\u3092\u5F85\u3064\u9593\u306E\u30BF\u30A4\u30E0\u30A2\u30A6\u30C8
-generic_listening.timeout.label = \u30BF\u30A4\u30E0\u30A2\u30A6\u30C8
-socket_transportservice.description = TCP\u63A5\u7D9A\u3067\u30C7\u30D0\u30C3\u30AC\u3068\u30BF\u30FC\u30B2\u30C3\u30C8\u3092\u63A5\u7D9A\u3057\u307E\u3059
-memory_transportservice.description = \u5171\u6709\u30E1\u30E2\u30EA\u30FC\u63A5\u7D9A\u3067\u30C7\u30D0\u30C3\u30AC\u3068\u30BF\u30FC\u30B2\u30C3\u30C8\u3092\u63A5\u7D9A\u3057\u307E\u3059
-socket_attaching.host = VM\u306B\u63A5\u7D9A\u3059\u308B\u30DE\u30B7\u30F3\u540D
-socket_attaching.host.label = \u30DB\u30B9\u30C8
-socket_attaching.port = VM\u306B\u63A5\u7D9A\u3059\u308B\u30DD\u30FC\u30C8\u756A\u53F7
-socket_attaching.port.label = \u30DD\u30FC\u30C8
-socket_attaching.description = \u30BD\u30B1\u30C3\u30C8\u3067\u305D\u306E\u4ED6\u306EVM\u306B\u63A5\u7D9A\u3057\u307E\u3059
-socket_listening.localaddr = \u30EA\u30B9\u30CA\u30FC\u306E\u30D0\u30A4\u30F3\u30C9\u5148\u30ED\u30FC\u30AB\u30EB\u30FB\u30A2\u30C9\u30EC\u30B9
-socket_listening.localaddr.label = \u30ED\u30FC\u30AB\u30EB\u30FB\u30A2\u30C9\u30EC\u30B9
-socket_listening.port = VM\u3078\u306E\u63A5\u7D9A\u3092\u30EA\u30B9\u30CB\u30F3\u30B0\u3059\u308B\u30DD\u30FC\u30C8\u756A\u53F7
-socket_listening.port.label = \u30DD\u30FC\u30C8
-socket_listening.description = \u305D\u306E\u4ED6\u306EVM\u306B\u3088\u308A\u958B\u59CB\u3055\u308C\u308B\u30BD\u30B1\u30C3\u30C8\u63A5\u7D9A\u3092\u53D7\u5165\u308C\u307E\u3059
-memory_attaching.name = VM\u3078\u306E\u63A5\u7D9A\u306B\u4F7F\u7528\u3055\u308C\u308B\u5171\u6709\u30E1\u30E2\u30EA\u30FC\u9818\u57DF\u540D
-memory_attaching.name.label = \u540D\u524D
-memory_attaching.description = \u5171\u6709\u30E1\u30E2\u30EA\u30FC\u3067\u305D\u306E\u4ED6\u306EVM\u306B\u63A5\u7D9A\u3057\u307E\u3059
-memory_listening.name = VM\u3078\u306E\u63A5\u7D9A\u3092\u30EA\u30B9\u30CB\u30F3\u30B0\u3059\u308B\u305F\u3081\u306E\u5171\u6709\u30E1\u30E2\u30EA\u30FC\u9818\u57DF\u540D
-memory_listening.name.label = \u540D\u524D
-memory_listening.description = \u305D\u306E\u4ED6\u306EVM\u306B\u3088\u308A\u958B\u59CB\u3055\u308C\u308B\u5171\u6709\u30E1\u30E2\u30EA\u30FC\u63A5\u7D9A\u3092\u53D7\u3051\u5165\u308C\u307E\u3059
-process_attaching.description = \u30C7\u30D0\u30C3\u30B0\u3059\u308B\u30D7\u30ED\u30BB\u30B9\u306B\u30D7\u30ED\u30BB\u30B9ID(pid)\u3092\u4F7F\u7528\u3057\u3066\u63A5\u7D9A\u3057\u307E\u3059
-process_attaching.pid = pid
-process_attaching.pid.label = \u30C7\u30D0\u30C3\u30B0\u3059\u308B\u30D7\u30ED\u30BB\u30B9ID(pid)
diff --git a/ojluni/src/main/java/com/sun/tools/jdi/resources/jdi_zh_CN.properties b/ojluni/src/main/java/com/sun/tools/jdi/resources/jdi_zh_CN.properties
deleted file mode 100755
index 743a203..0000000
--- a/ojluni/src/main/java/com/sun/tools/jdi/resources/jdi_zh_CN.properties
+++ /dev/null
@@ -1,52 +0,0 @@
-true = true
-false = false
-version_format = Java \u8C03\u8BD5\u63A5\u53E3 (\u53C2\u8003\u5B9E\u73B0) \u7248\u672C {0}.{1}\n{2}
-raw.command = \u7528\u4E8E\u542F\u52A8\u8C03\u8BD5\u5E94\u7528\u7A0B\u5E8F VM \u7684\u539F\u59CB\u547D\u4EE4
-raw.command.label = \u547D\u4EE4
-raw.address = \u8FD0\u884C\u539F\u59CB\u547D\u4EE4\u4E4B\u540E, \u76D1\u542C\u8FDE\u63A5\u65F6\u4F7F\u7528\u7684\u5730\u5740
-raw.address.label = \u5730\u5740
-raw.quote = \u7528\u4E8E\u5C06\u4EE5\u7A7A\u683C\u5206\u9694\u7684\u6587\u672C\u7EC4\u5408\u4E3A\u4E00\u4E2A\u547D\u4EE4\u884C\u53C2\u6570\u7684\u5B57\u7B26
-raw.quote.label = \u5F15\u53F7
-raw.description = \u4F7F\u7528\u7528\u6237\u6307\u5B9A\u7684\u547D\u4EE4\u884C\u542F\u52A8\u76EE\u6807\u5E76\u9644\u52A0\u5230\u8BE5\u76EE\u6807
-sun.home = \u7528\u4E8E\u542F\u52A8\u5E94\u7528\u7A0B\u5E8F\u7684 SDK \u6216\u8FD0\u884C\u65F6\u73AF\u5883\u7684\u4E3B\u76EE\u5F55
-sun.home.label = \u4E3B\u76EE\u5F55 
-sun.options = \u5DF2\u542F\u52A8\u7684 VM \u9009\u9879
-sun.options.label = \u9009\u9879
-sun.main = \u4E3B\u7C7B\u548C\u53C2\u6570, \u6216\u8005\u5982\u679C -jar \u662F\u4E00\u4E2A\u9009\u9879, \u5219\u4E3A\u4E3B jar \u6587\u4EF6\u548C\u53C2\u6570
-sun.main.label = \u4E3B
-sun.init_suspend = \u5728\u6267\u884C\u4E3B\u7C7B\u4E4B\u524D, \u5C06\u6302\u8D77\u6240\u6709\u7EBF\u7A0B
-sun.init_suspend.label = \u6302\u8D77
-sun.quote = \u7528\u4E8E\u5C06\u4EE5\u7A7A\u683C\u5206\u9694\u7684\u6587\u672C\u7EC4\u5408\u4E3A\u4E00\u4E2A\u547D\u4EE4\u884C\u53C2\u6570\u7684\u5B57\u7B26
-sun.quote.label = \u5F15\u53F7
-sun.vm_exec = Java VM \u542F\u52A8\u7A0B\u5E8F\u7684\u540D\u79F0
-sun.vm_exec.label = \u542F\u52A8\u7A0B\u5E8F
-sun.description = \u4F7F\u7528 Sun Java VM \u547D\u4EE4\u884C\u542F\u52A8\u76EE\u6807\u5E76\u9644\u52A0\u5230\u8BE5\u76EE\u6807
-generic_attaching.address = VM \u8FDE\u63A5\u6240\u9644\u52A0\u5230\u7684\u5730\u5740
-generic_attaching.address.label = \u5730\u5740
-generic_attaching.timeout = \u7B49\u5F85\u9644\u52A0\u64CD\u4F5C\u65F6\u7684\u8D85\u65F6
-generic_attaching.timeout.label = \u8D85\u65F6
-generic_listening.address = \u76D1\u542C VM \u8FDE\u63A5\u65F6\u4F7F\u7528\u7684\u5730\u5740
-generic_listening.address.label = \u5730\u5740
-generic_listening.timeout = \u7B49\u5F85\u8FDE\u63A5\u65F6\u7684\u8D85\u65F6
-generic_listening.timeout.label = \u8D85\u65F6
-socket_transportservice.description = \u4F7F\u7528 TCP \u8FDE\u63A5\u6765\u8FDE\u63A5\u8C03\u8BD5\u5668\u548C\u88AB\u8C03\u8BD5\u8FDB\u7A0B
-memory_transportservice.description = \u4F7F\u7528\u5171\u4EAB\u5185\u5B58\u8FDE\u63A5\u6765\u8FDE\u63A5\u8C03\u8BD5\u5668\u548C\u88AB\u8C03\u8BD5\u8FDB\u7A0B
-socket_attaching.host = VM \u8FDE\u63A5\u6240\u9644\u52A0\u5230\u7684\u8BA1\u7B97\u673A\u540D\u79F0
-socket_attaching.host.label = \u4E3B\u673A
-socket_attaching.port = VM \u8FDE\u63A5\u6240\u9644\u52A0\u5230\u7684\u7AEF\u53E3\u53F7
-socket_attaching.port.label = \u7AEF\u53E3
-socket_attaching.description = \u901A\u8FC7\u5957\u63A5\u5B57\u9644\u52A0\u5230\u5176\u4ED6 VM
-socket_listening.localaddr = \u76D1\u542C\u7A0B\u5E8F\u7ED1\u5B9A\u5230\u7684\u672C\u5730\u5730\u5740
-socket_listening.localaddr.label = \u672C\u5730\u5730\u5740
-socket_listening.port = \u76D1\u542C VM \u8FDE\u63A5\u65F6\u4F7F\u7528\u7684\u7AEF\u53E3\u53F7
-socket_listening.port.label = \u7AEF\u53E3
-socket_listening.description = \u63A5\u53D7\u7531\u5176\u4ED6 VM \u542F\u52A8\u7684\u5957\u63A5\u5B57\u8FDE\u63A5
-memory_attaching.name = VM \u8FDE\u63A5\u6240\u9644\u52A0\u5230\u7684\u5171\u4EAB\u5185\u5B58\u533A\u57DF\u7684\u540D\u79F0
-memory_attaching.name.label = \u540D\u79F0
-memory_attaching.description = \u901A\u8FC7\u5171\u4EAB\u5185\u5B58\u9644\u52A0\u5230\u5176\u4ED6 VM
-memory_listening.name = \u76D1\u542C VM \u8FDE\u63A5\u65F6\u6240\u5728\u7684\u5171\u4EAB\u5185\u5B58\u533A\u57DF\u7684\u540D\u79F0
-memory_listening.name.label = \u540D\u79F0
-memory_listening.description = \u63A5\u53D7\u7531\u5176\u4ED6 VM \u542F\u52A8\u7684\u5171\u4EAB\u5185\u5B58\u8FDE\u63A5
-process_attaching.description = \u901A\u8FC7\u8FDB\u7A0B ID (PID) \u9644\u52A0\u5230\u88AB\u8C03\u8BD5\u8FDB\u7A0B
-process_attaching.pid = PID
-process_attaching.pid.label = \u88AB\u8C03\u8BD5\u8FDB\u7A0B\u7684\u8FDB\u7A0B ID (PID)
diff --git a/ojluni/src/main/java/com/sun/tools/script/shell/Main.java b/ojluni/src/main/java/com/sun/tools/script/shell/Main.java
deleted file mode 100755
index a6b19a6..0000000
--- a/ojluni/src/main/java/com/sun/tools/script/shell/Main.java
+++ /dev/null
@@ -1,587 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-package com.sun.tools.script.shell;
-
-import java.io.*;
-import java.net.*;
-import java.text.*;
-import java.util.*;
-import javax.script.*;
-
-/**
- * This is the main class for Java script shell.
- */
-public class Main {
-    /**
-     * main entry point to the command line tool
-     * @param args command line argument array
-     */
-    public static void main(String[] args) {
-        // parse command line options
-        String[] scriptArgs = processOptions(args);
-
-        // process each script command
-        for (Command cmd : scripts) {
-            cmd.run(scriptArgs);
-        }
-
-        System.exit(EXIT_SUCCESS);
-    }
-
-    // Each -e or -f or interactive mode is represented
-    // by an instance of Command.
-    private static interface Command {
-        public void run(String[] arguments);
-    }
-
-    /**
-     * Parses and processes command line options.
-     * @param args command line argument array
-     */
-    private static String[] processOptions(String[] args) {
-        // current scripting language selected
-        String currentLanguage = DEFAULT_LANGUAGE;
-        // current script file encoding selected
-        String currentEncoding = null;
-
-        // check for -classpath or -cp first
-        checkClassPath(args);
-
-        // have we seen -e or -f ?
-        boolean seenScript = false;
-        // have we seen -f - already?
-        boolean seenStdin = false;
-        for (int i=0; i < args.length; i++) {
-            String arg = args[i];
-            if (arg.equals("-classpath") ||
-                    arg.equals("-cp")) {
-                // handled already, just continue
-                i++;
-                continue;
-            }
-
-            // collect non-option arguments and pass these as script arguments
-            if (!arg.startsWith("-")) {
-                int numScriptArgs;
-                int startScriptArg;
-                if (seenScript) {
-                    // if we have seen -e or -f already all non-option arguments
-                    // are passed as script arguments
-                    numScriptArgs = args.length - i;
-                    startScriptArg = i;
-                } else {
-                    // if we have not seen -e or -f, first non-option argument
-                    // is treated as script file name and rest of the non-option
-                    // arguments are passed to script as script arguments
-                    numScriptArgs = args.length - i - 1;
-                    startScriptArg = i + 1;
-                    ScriptEngine se = getScriptEngine(currentLanguage);
-                    addFileSource(se, args[i], currentEncoding);
-                }
-                // collect script arguments and return to main
-                String[] result = new String[numScriptArgs];
-                System.arraycopy(args, startScriptArg, result, 0, numScriptArgs);
-                return result;
-            }
-
-            if (arg.startsWith("-D")) {
-                String value = arg.substring(2);
-                int eq = value.indexOf('=');
-                if (eq != -1) {
-                    System.setProperty(value.substring(0, eq),
-                            value.substring(eq + 1));
-                } else {
-                    if (!value.equals("")) {
-                        System.setProperty(value, "");
-                    } else {
-                        // do not allow empty property name
-                        usage(EXIT_CMD_NO_PROPNAME);
-                    }
-                }
-                continue;
-            } else if (arg.equals("-?") || arg.equals("-help")) {
-                usage(EXIT_SUCCESS);
-            } else if (arg.equals("-e")) {
-                seenScript = true;
-                if (++i == args.length)
-                    usage(EXIT_CMD_NO_SCRIPT);
-
-                ScriptEngine se = getScriptEngine(currentLanguage);
-                addStringSource(se, args[i]);
-                continue;
-            } else if (arg.equals("-encoding")) {
-                if (++i == args.length)
-                    usage(EXIT_CMD_NO_ENCODING);
-                currentEncoding = args[i];
-                continue;
-            } else if (arg.equals("-f")) {
-                seenScript = true;
-                if (++i == args.length)
-                    usage(EXIT_CMD_NO_FILE);
-                ScriptEngine se = getScriptEngine(currentLanguage);
-                if (args[i].equals("-")) {
-                    if (seenStdin) {
-                        usage(EXIT_MULTIPLE_STDIN);
-                    } else {
-                        seenStdin = true;
-                    }
-                    addInteractiveMode(se);
-                } else {
-                    addFileSource(se, args[i], currentEncoding);
-                }
-                continue;
-            } else if (arg.equals("-l")) {
-                if (++i == args.length)
-                    usage(EXIT_CMD_NO_LANG);
-                currentLanguage = args[i];
-                continue;
-            } else if (arg.equals("-q")) {
-                listScriptEngines();
-            }
-            // some unknown option...
-            usage(EXIT_UNKNOWN_OPTION);
-        }
-
-        if (! seenScript) {
-            ScriptEngine se = getScriptEngine(currentLanguage);
-            addInteractiveMode(se);
-        }
-        return new String[0];
-    }
-
-    /**
-     * Adds interactive mode Command
-     * @param se ScriptEngine to use in interactive mode.
-     */
-    private static void addInteractiveMode(final ScriptEngine se) {
-        scripts.add(new Command() {
-            public void run(String[] args) {
-                setScriptArguments(se, args);
-                processSource(se, "-", null);
-            }
-        });
-    }
-
-    /**
-     * Adds script source file Command
-     * @param se ScriptEngine used to evaluate the script file
-     * @param fileName script file name
-     * @param encoding script file encoding
-     */
-    private static void addFileSource(final ScriptEngine se,
-            final String fileName,
-            final String encoding) {
-        scripts.add(new Command() {
-            public void run(String[] args) {
-                setScriptArguments(se, args);
-                processSource(se, fileName, encoding);
-            }
-        });
-    }
-
-    /**
-     * Adds script string source Command
-     * @param se ScriptEngine to be used to evaluate the script string
-     * @param source Script source string
-     */
-    private static void addStringSource(final ScriptEngine se,
-            final String source) {
-        scripts.add(new Command() {
-            public void run(String[] args) {
-                setScriptArguments(se, args);
-                String oldFile = setScriptFilename(se, "<string>");
-                try {
-                    evaluateString(se, source);
-                } finally {
-                    setScriptFilename(se, oldFile);
-                }
-            }
-        });
-    }
-
-    /**
-     * Prints list of script engines available and exits.
-     */
-    private static void listScriptEngines() {
-        List<ScriptEngineFactory> factories = engineManager.getEngineFactories();
-        for (ScriptEngineFactory factory: factories) {
-            getError().println(getMessage("engine.info",
-                    new Object[] { factory.getLanguageName(),
-                            factory.getLanguageVersion(),
-                            factory.getEngineName(),
-                            factory.getEngineVersion()
-            }));
-        }
-        System.exit(EXIT_SUCCESS);
-    }
-
-    /**
-     * Processes a given source file or standard input.
-     * @param se ScriptEngine to be used to evaluate
-     * @param filename file name, can be null
-     * @param encoding script file encoding, can be null
-     */
-    private static void processSource(ScriptEngine se, String filename,
-            String encoding) {
-        if (filename.equals("-")) {
-            BufferedReader in = new BufferedReader
-                    (new InputStreamReader(getIn()));
-            boolean hitEOF = false;
-            String prompt = getPrompt(se);
-            se.put(ScriptEngine.FILENAME, "<STDIN>");
-            while (!hitEOF) {
-                getError().print(prompt);
-                String source = "";
-                try {
-                    source = in.readLine();
-                } catch (IOException ioe) {
-                    getError().println(ioe.toString());
-                }
-                if (source == null) {
-                    hitEOF = true;
-                    break;
-                }
-                Object res = evaluateString(se, source, false);
-                if (res != null) {
-                    res = res.toString();
-                    if (res == null) {
-                        res = "null";
-                    }
-                    getError().println(res);
-                }
-            }
-        } else {
-            FileInputStream fis = null;
-            try {
-                fis = new FileInputStream(filename);
-            } catch (FileNotFoundException fnfe) {
-                getError().println(getMessage("file.not.found",
-                        new Object[] { filename }));
-                        System.exit(EXIT_FILE_NOT_FOUND);
-            }
-            evaluateStream(se, fis, filename, encoding);
-        }
-    }
-
-    /**
-     * Evaluates given script source
-     * @param se ScriptEngine to evaluate the string
-     * @param script Script source string
-     * @param exitOnError whether to exit the process on script error
-     */
-    private static Object evaluateString(ScriptEngine se,
-            String script, boolean exitOnError) {
-        try {
-            return se.eval(script);
-        } catch (ScriptException sexp) {
-            getError().println(getMessage("string.script.error",
-                    new Object[] { sexp.getMessage() }));
-                    if (exitOnError)
-                        System.exit(EXIT_SCRIPT_ERROR);
-        } catch (Exception exp) {
-            exp.printStackTrace(getError());
-            if (exitOnError)
-                System.exit(EXIT_SCRIPT_ERROR);
-        }
-
-        return null;
-    }
-
-    /**
-     * Evaluate script string source and exit on script error
-     * @param se ScriptEngine to evaluate the string
-     * @param script Script source string
-     */
-    private static void evaluateString(ScriptEngine se, String script) {
-        evaluateString(se, script, true);
-    }
-
-    /**
-     * Evaluates script from given reader
-     * @param se ScriptEngine to evaluate the string
-     * @param reader Reader from which is script is read
-     * @param name file name to report in error.
-     */
-    private static Object evaluateReader(ScriptEngine se,
-            Reader reader, String name) {
-        String oldFilename = setScriptFilename(se, name);
-        try {
-            return se.eval(reader);
-        } catch (ScriptException sexp) {
-            getError().println(getMessage("file.script.error",
-                    new Object[] { name, sexp.getMessage() }));
-                    System.exit(EXIT_SCRIPT_ERROR);
-        } catch (Exception exp) {
-            exp.printStackTrace(getError());
-            System.exit(EXIT_SCRIPT_ERROR);
-        } finally {
-            setScriptFilename(se, oldFilename);
-        }
-        return null;
-    }
-
-    /**
-     * Evaluates given input stream
-     * @param se ScriptEngine to evaluate the string
-     * @param is InputStream from which script is read
-     * @param name file name to report in error
-     */
-    private static Object evaluateStream(ScriptEngine se,
-            InputStream is, String name,
-            String encoding) {
-        BufferedReader reader = null;
-        if (encoding != null) {
-            try {
-                reader = new BufferedReader(new InputStreamReader(is,
-                        encoding));
-            } catch (UnsupportedEncodingException uee) {
-                getError().println(getMessage("encoding.unsupported",
-                        new Object[] { encoding }));
-                        System.exit(EXIT_NO_ENCODING_FOUND);
-            }
-        } else {
-            reader = new BufferedReader(new InputStreamReader(is));
-        }
-        return evaluateReader(se, reader, name);
-    }
-
-    /**
-     * Prints usage message and exits
-     * @param exitCode process exit code
-     */
-    private static void usage(int exitCode) {
-        getError().println(getMessage("main.usage",
-                new Object[] { PROGRAM_NAME }));
-                System.exit(exitCode);
-    }
-
-    /**
-     * Gets prompt for interactive mode
-     * @return prompt string to use
-     */
-    private static String getPrompt(ScriptEngine se) {
-        List<String> names = se.getFactory().getNames();
-        return names.get(0) + "> ";
-    }
-
-    /**
-     * Get formatted, localized error message
-     */
-    private static String getMessage(String key, Object[] params) {
-        return MessageFormat.format(msgRes.getString(key), params);
-    }
-
-    // input stream from where we will read
-    private static InputStream getIn() {
-        return System.in;
-    }
-
-    // stream to print error messages
-    private static PrintStream getError() {
-        return System.err;
-    }
-
-    // get current script engine
-    private static ScriptEngine getScriptEngine(String lang) {
-        ScriptEngine se = engines.get(lang);
-        if (se == null) {
-            se = engineManager.getEngineByName(lang);
-            if (se == null) {
-                getError().println(getMessage("engine.not.found",
-                        new Object[] { lang }));
-                        System.exit(EXIT_ENGINE_NOT_FOUND);
-            }
-
-            // initialize the engine
-            initScriptEngine(se);
-            // to avoid re-initialization of engine, store it in a map
-            engines.put(lang, se);
-        }
-        return se;
-    }
-
-    // initialize a given script engine
-    private static void initScriptEngine(ScriptEngine se) {
-        // put engine global variable
-        se.put("engine", se);
-
-        // load init.<ext> file from resource
-        List<String> exts = se.getFactory().getExtensions();
-        InputStream sysIn = null;
-        ClassLoader cl = Thread.currentThread().getContextClassLoader();
-        for (String ext : exts) {
-            sysIn = cl.getResourceAsStream("com/sun/tools/script/shell/init." +
-                    ext);
-            if (sysIn != null) break;
-        }
-        if (sysIn != null) {
-            evaluateStream(se, sysIn, "<system-init>", null);
-        }
-    }
-
-    /**
-     * Checks for -classpath, -cp in command line args. Creates a ClassLoader
-     * and sets it as Thread context loader for current thread.
-     *
-     * @param args command line argument array
-     */
-    private static void checkClassPath(String[] args) {
-        String classPath = null;
-        for (int i = 0; i < args.length; i++) {
-            if (args[i].equals("-classpath") ||
-                    args[i].equals("-cp")) {
-                if (++i == args.length) {
-                    // just -classpath or -cp with no value
-                    usage(EXIT_CMD_NO_CLASSPATH);
-                } else {
-                    classPath = args[i];
-                }
-            }
-        }
-
-        if (classPath != null) {
-            /* We create a class loader, configure it with specified
-             * classpath values and set the same as context loader.
-             * Note that ScriptEngineManager uses context loader to
-             * load script engines. So, this ensures that user defined
-             * script engines will be loaded. For classes referred
-             * from scripts, Rhino engine uses thread context loader
-             * but this is script engine dependent. We don't have
-             * script engine independent solution anyway. Unless we
-             * know the class loader used by a specific engine, we
-             * can't configure correct loader.
-             */
-            ClassLoader parent = Main.class.getClassLoader();
-            URL[] urls = pathToURLs(classPath);
-            URLClassLoader loader = new URLClassLoader(urls, parent);
-            Thread.currentThread().setContextClassLoader(loader);
-        }
-
-        // now initialize script engine manager. Note that this has to
-        // be done after setting the context loader so that manager
-        // will see script engines from user specified classpath
-        engineManager = new ScriptEngineManager();
-    }
-
-    /**
-     * Utility method for converting a search path string to an array
-     * of directory and JAR file URLs.
-     *
-     * @param path the search path string
-     * @return the resulting array of directory and JAR file URLs
-     */
-    private static URL[] pathToURLs(String path) {
-        String[] components = path.split(File.pathSeparator);
-        URL[] urls = new URL[components.length];
-        int count = 0;
-        while(count < components.length) {
-            URL url = fileToURL(new File(components[count]));
-            if (url != null) {
-                urls[count++] = url;
-            }
-        }
-        if (urls.length != count) {
-            URL[] tmp = new URL[count];
-            System.arraycopy(urls, 0, tmp, 0, count);
-            urls = tmp;
-        }
-        return urls;
-    }
-
-    /**
-     * Returns the directory or JAR file URL corresponding to the specified
-     * local file name.
-     *
-     * @param file the File object
-     * @return the resulting directory or JAR file URL, or null if unknown
-     */
-    private static URL fileToURL(File file) {
-        String name;
-        try {
-            name = file.getCanonicalPath();
-        } catch (IOException e) {
-            name = file.getAbsolutePath();
-        }
-        name = name.replace(File.separatorChar, '/');
-        if (!name.startsWith("/")) {
-            name = "/" + name;
-        }
-        // If the file does not exist, then assume that it's a directory
-        if (!file.isFile()) {
-            name = name + "/";
-        }
-        try {
-            return new URL("file", "", name);
-        } catch (MalformedURLException e) {
-            throw new IllegalArgumentException("file");
-        }
-    }
-
-    private static void setScriptArguments(ScriptEngine se, String[] args) {
-        se.put("arguments", args);
-        se.put(ScriptEngine.ARGV, args);
-    }
-
-    private static String setScriptFilename(ScriptEngine se, String name) {
-        String oldName = (String) se.get(ScriptEngine.FILENAME);
-        se.put(ScriptEngine.FILENAME, name);
-        return oldName;
-    }
-
-    // exit codes
-    private static final int EXIT_SUCCESS            = 0;
-    private static final int EXIT_CMD_NO_CLASSPATH   = 1;
-    private static final int EXIT_CMD_NO_FILE        = 2;
-    private static final int EXIT_CMD_NO_SCRIPT      = 3;
-    private static final int EXIT_CMD_NO_LANG        = 4;
-    private static final int EXIT_CMD_NO_ENCODING    = 5;
-    private static final int EXIT_CMD_NO_PROPNAME    = 6;
-    private static final int EXIT_UNKNOWN_OPTION     = 7;
-    private static final int EXIT_ENGINE_NOT_FOUND   = 8;
-    private static final int EXIT_NO_ENCODING_FOUND  = 9;
-    private static final int EXIT_SCRIPT_ERROR       = 10;
-    private static final int EXIT_FILE_NOT_FOUND     = 11;
-    private static final int EXIT_MULTIPLE_STDIN     = 12;
-
-    // default scripting language
-    private static final String DEFAULT_LANGUAGE = "js";
-    // list of scripts to process
-    private static List<Command> scripts;
-    // the script engine manager
-    private static ScriptEngineManager engineManager;
-    // map of engines we loaded
-    private static Map<String, ScriptEngine> engines;
-    // error messages resource
-    private static ResourceBundle msgRes;
-    private static String BUNDLE_NAME = "com.sun.tools.script.shell.messages";
-    private static String PROGRAM_NAME = "jrunscript";
-
-    static {
-        scripts = new ArrayList<Command>();
-        engines = new HashMap<String, ScriptEngine>();
-        msgRes = ResourceBundle.getBundle(BUNDLE_NAME, Locale.getDefault());
-    }
-}
diff --git a/ojluni/src/main/java/com/sun/tools/script/shell/init.js b/ojluni/src/main/java/com/sun/tools/script/shell/init.js
deleted file mode 100755
index 35256fa..0000000
--- a/ojluni/src/main/java/com/sun/tools/script/shell/init.js
+++ /dev/null
@@ -1,884 +0,0 @@
-/*
- * Copyright (c) 2005, 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
- * 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.
- */
-
-/**
- * jrunscript JavaScript built-in functions and objects.
- */
-
-/**
- * Creates an object that delegates all method calls on 
- * it to the 'invoke' method on the given delegate object.<br>
- *
- * Example:
- * <pre>
- * <code>
- *     var x  = { invoke: function(name, args) { //code...}
- *     var y = new JSInvoker(x);
- *     y.func(3, 3); // calls x.invoke('func', args); where args is array of arguments
- * </code>
- * </pre>
- * @param obj object to be wrapped by JSInvoker
- * @constructor
- */
-function JSInvoker(obj) {
-	return new JSAdapter({
-			__get__ : function(name) {
-				return function() {
-					return obj.invoke(name, arguments);
-				}
-			}
-		});
-}
-
-/**
- * This variable represents OS environment. Environment
- * variables can be accessed as fields of this object. For
- * example, env.PATH will return PATH value configured.
- */
-var env = new JSAdapter({
-	__get__ : function (name) {
-		return java.lang.System.getenv(name);
-	},
-	__has__ : function (name) {
-		return java.lang.System.getenv().containsKey(name);
-	},
-	__getIds__ : function() {
-		return java.lang.System.getenv().keySet().toArray();
-	},
-	__delete__ : function(name) {
-		println("can't delete env item");
-	},
-	__put__ : function (name, value) {
-		println("can't change env item");
-	},			
-	toString: function() {
-		return java.lang.System.getenv().toString();
-	}		
-});
-
-/**
- * Creates a convenient script object to deal with java.util.Map instances.
- * The result script object's field names are keys of the Map. For example,
- * scriptObj.keyName can be used to access value associated with given key.<br>
- * Example:
- * <pre>
- * <code>
- *     var x = java.lang.SystemProperties();
- *     var y = jmap(x);
- *     println(y['java.class.path']); // prints java.class.path System property
- *     delete y['java.class.path']; // remove java.class.path System property
- * </code>
- * </pre>
- * 
- * @param map java.util.Map instance that will be wrapped
- * @constructor
- */
-function jmap(map) {	
-	return new JSAdapter({
-		__get__ : function(name) {
-			if (map.containsKey(name)) {
-				return map.get(name);
-			} else {
-				return undefined;
-			}
-   		  },
-		__has__ :  function(name) {
-				return map.containsKey(name);
-			},
-
-		__delete__ : function (name) {
-				return map.remove(name);
-			},
-		__put__ : function(name, value) {
-				map.put(name, value);
-			},
-		__getIds__ : function() {
-				return map.keySet().toArray();		
-			},
-		toString: function() {
-				return map.toString();
-		}
-	});
-}
-
-/**
- * Creates a convenient script object to deal with java.util.List instances.
- * The result script object behaves like an array. For example,
- * scriptObj[index] syntax can be used to access values in the List instance.
- * 'length' field gives size of the List. <br>
- *
- * Example:
- * <pre>
- * <code>
- *    var x = new java.util.ArrayList(4);
- *    x.add('Java');
- *    x.add('JavaScript');
- *    x.add('SQL');
- *    x.add('XML');
- *
- *    var y = jlist(x);
- *    println(y[2]); // prints third element of list
- *    println(y.length); // prints size of the list
- *
- * @param map java.util.List instance that will be wrapped
- * @constructor
- */
-function jlist(list) {
-	function isValid(index) {
-		return typeof(index) == 'number' &&
-			index > -1 && index < list.size();
-	}
-	return new JSAdapter({
-		__get__ :  function(name) {
-			if (isValid(name)) {
-				return list.get(name);
-			} else if (name == 'length') {
-				return list.size();
-			} else {
-				return undefined;
-			}
-		},
-		__has__ : function (name) {
-			return isValid(name) || name == 'length';
-		},
-		__delete__ : function(name) {				
-			if (isValid(name)) {
-				list.remove(name);	
-			}
-		},
-		__put__ : function(name, value) {
-			if (isValid(name)) {
-				list.set(name, value);
-			}
-		},
-		__getIds__: function() {
-			var res = new Array(list.size());
-			for (var i = 0; i < res.length; i++) {
-				res[i] = i;
-			}
-			return res;
-		},
-		toString: function() {
-			return list.toString();
-		}				
-	});
-}
-
-/**
- * This is java.lang.System properties wrapped by jmap.
- * For eg. to access java.class.path property, you can use
- * the syntax sysProps["java.class.path"]
- */
-var sysProps = jmap(java.lang.System.getProperties());
-
-// stdout, stderr & stdin
-var out = java.lang.System.out;
-var err = java.lang.System.err;
-// can't use 'in' because it is a JavaScript keyword :-(
-var inp = java.lang.System["in"];
-
-// useful imports for often used io, net classes
-importPackage(java.io);
-importPackage(java.net);
-
-/**
- * Generic any object to input stream mapper
- * @param str input file name, URL or InputStream 
- * @return InputStream object
- * @private
- */
-function inStream(str) {
-	if (typeof(str) == "string") {
-		// '-' means standard input
-		if (str == '-') {
-			return java.lang.System["in"];
-		}
-		// try file first
-		var file = null;
-		try {
-			file = pathToFile(str);
-		} catch (e) {
-		}		
-		if (file && file.exists()) {
-			return new FileInputStream(file);
-		} else {
-			try {
-				// treat the string as URL
-				return new URL(str).openStream();
-			} catch (e) {
-				throw 'file or URL ' + str + ' not found';
-			}
-		}
-	} else {
-		if (str instanceof InputStream) {
-			return str;
-		} else if (str instanceof URL) {
-			return str.openStream();
-		} else if (str instanceof File) {
-			return new FileInputStream(str);
-		}
-	}
-	// everything failed, just give input stream
-	return java.lang.System["in"];
-}
-
-/**
- * Generic any object to output stream mapper
- * 
- * @param out output file name or stream
- * @return OutputStream object
- * @private
- */
-function outStream(out) {
-	if (typeof(out) == "string") {
-		if (out == '>') {
-			return java.lang.System.out;
-		} else {
-			// treat it as file			
-			return new FileOutputStream(pathToFile(out));
-		}
-	} else {
-		if (out instanceof OutputStream) {
-			return out;
-		} else if (out instanceof File) {
-			return new FileOutputStream(out);
-		}
-	}
-
-	// everything failed, just return System.out
-	return java.lang.System.out;
-}
-
-/**
- * stream close takes care not to close stdin, out & err.
- * @private
- */
-function streamClose(stream) {
-	if (stream) {
-		if (stream != java.lang.System["in"] &&
-			stream != java.lang.System.out &&
-			stream != java.lang.System.err) {
-			try {
-				stream.close();
-			} catch (e) {
-				println(e);
-			}
-		}
-	}
-}
-
-/**
- * Loads and evaluates JavaScript code from a stream or file or URL<br>
- *
- * Examples:
- * <pre>
- * <code>
- *    load('test.js'); // load script file 'test.js'
- *    load('http://java.sun.com/foo.js'); // load from a URL
- * </code>
- * </pre>
- *
- * @param str input from which script is loaded and evaluated
- */
-function load(str) {
-	var stream = inStream(str);
-	var bstream = new BufferedInputStream(stream);
-	var reader = new BufferedReader(new InputStreamReader(bstream));
-	var oldFilename = engine.get(engine.FILENAME);
-	engine.put(engine.FILENAME, str);	
-	try {
-		engine.eval(reader);
-	} finally {
-		engine.put(engine.FILENAME, oldFilename);
-	        streamClose(stream);
-	}
-}
-
-// file system utilities
-
-/**
- * Creates a Java byte[] of given length
- * @param len size of the array to create
- * @private
- */
-function javaByteArray(len) {
-	return java.lang.reflect.Array.newInstance(java.lang.Byte.TYPE, len);
-}
-
-var curDir = new File('.');
-
-/**
- * Print present working directory
- */
-function pwd() {
-	println(curDir.getAbsolutePath());
-}
-
-/**
- * Changes present working directory to given directory
- * @param target directory to change to. optional, defaults to user's HOME
- */
-function cd(target) {
-	if (target == undefined) {
-		target = sysProps["user.home"];
-	}
-	if (!(target instanceof File)) {
-		target = pathToFile(target);
-	}
-	if (target.exists() && target.isDirectory()) {
-		curDir = target;
-	} else {
-		println(target + " is not a directory");
-	}
-}
-
-/**
- * Converts path to java.io.File taking care of shell present working dir
- *
- * @param pathname file path to be converted
- * @private
- */
-function pathToFile(pathname) {
-	var tmp = pathname;
-	if (!(tmp instanceof File)) {
-		tmp = new File(tmp);
-	}
-	if (!tmp.isAbsolute()) {
-		return new File(curDir, pathname);
-	} else {
-		return tmp;
-	}
-}
-
-/**
- * Copies a file or URL or stream to another file or stream
- *
- * @param from input file or URL or stream
- * @param to output stream or file
- */
-function cp(from, to) {
-	if (from == to) {
-		println("file " + from + " cannot be copied onto itself!");
-		return;
-	}
-	var inp = inStream(from);
-	var out = outStream(to);
-	var binp = new BufferedInputStream(inp);
-	var bout = new BufferedOutputStream(out);
-	var buff = javaByteArray(1024);
-	var len;
-	while ((len = binp.read(buff)) > 0 )
-		bout.write(buff, 0, len);
-
-	bout.flush();
-	streamClose(inp);
-	streamClose(out);	
-}
-
-/**
- * Shows the content of a file or URL or any InputStream<br>
- * Examples:
- * <pre>
- * <code>
- *    cat('test.txt'); // show test.txt file contents
- *    cat('http://java.net'); // show the contents from the URL http://java.net 
- * </code>
- * </pre>
- * @param obj input to show
- * @param pattern optional. show only the lines matching the pattern
- */
-function cat(obj, pattern) {
-	if (obj instanceof File && obj.isDirectory()) {
-		ls(obj);
-		return;
-	}
-	
-	var inp = null;
-	if (!(obj instanceof Reader)) {
-		inp = inStream(obj);
-		obj = new BufferedReader(new InputStreamReader(inp));
-	}
-	var line;
-	if (pattern) {
-		var count = 1;
-		while ((line=obj.readLine()) != null) {
-			if (line.match(pattern)) {
-				println(count + "\t: " + line);
-			}
-			count++;
-		}
-	} else {
-		while ((line=obj.readLine()) != null) {
-			println(line);
-		}
-	}
-}
-
-/**
- * Returns directory part of a filename
- *
- * @param pathname input path name
- * @return directory part of the given file name
- */
-function dirname(pathname) {
-	var dirName = ".";
-	// Normalize '/' to local file separator before work.
-	var i = pathname.replace('/', File.separatorChar ).lastIndexOf( 
-		File.separator );
-	if ( i != -1 )
-		dirName = pathname.substring(0, i);
-	return dirName;
-}
-
-/**
- * Creates a new dir of given name
- *
- * @param dir name of the new directory
- */
-function mkdir(dir) {
-	var dir = pathToFile(dir);
-	println(dir.mkdir()? "created" : "can not create dir");
-}
-
-/**
- * Creates the directory named by given pathname, including 
- * any necessary but nonexistent parent directories.
- *
- * @param dir input path name
- */
-function mkdirs(dir) {
-	var dir = pathToFile(dir);
-	println(dir.mkdirs()? "created" : "can not create dirs");
-}
-	
-/**
- * Removes a given file 
- *
- * @param pathname name of the file 
- */
-function rm(pathname) {
-    	file = pathToFile(pathname);
-	if (!file.exists()) {
-		println("file not found: " + pathname);
-		return false;
-	}
-	// note that delete is a keyword in JavaScript!
-	println(file["delete"]()? "deleted" : "can not delete");
-}
-
-/**
- * Removes a given directory
- *
- * @param pathname name of the directory
- */
-function rmdir(pathname) {
-	rm(pathname);
-}
-
-/**
- * Synonym for 'rm'
- */
-function del(pathname) {
-	rm(pathname);
-}
-
-/**
- * Moves a file to another
- *
- * @param from original name of the file
- * @param to new name for the file
- */
-function mv(from, to) {
-	println(pathToFile(from).renameTo(pathToFile(to))? 
-		"moved" : "can not move");
-}
-
-/**
- * Synonym for 'mv'.
- */
-function ren(from, to) {
-	mv(from, to);
-}
-
-var months = [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", 
-		"Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ];
-
-/**
- * Helper function called by ls
- * @private
- */	
-function printFile(f) {
-	var sb = new java.lang.StringBuffer();
-	sb.append(f.isDirectory()? "d" : "-");
-	sb.append(f.canRead() ? "r": "-" );
-	sb.append(f.canWrite() ? "w": "-" );		
-	sb.append(" ");
-
-	var d = new java.util.Date(f.lastModified());
-	var c = new java.util.GregorianCalendar();
-	c.setTime(d);
-	var day	= c.get(java.util.Calendar.DAY_OF_MONTH);
-	sb.append(months[c.get(java.util.Calendar.MONTH)]
-		 + " " + day );
-	if (day < 10) {
-		sb.append(" ");
-	}
-
-	// to get fixed length 'length' field
-	var fieldlen = 8;
-	var len = new java.lang.StringBuffer();
-	for(var j=0; j<fieldlen; j++)
-		len.append(" ");
-	len.insert(0, java.lang.Long.toString(f.length()));
-	len.setLength(fieldlen);
-	// move the spaces to the front
-	var si = len.toString().indexOf(" ");
-	if ( si != -1 ) {
-		var pad = len.toString().substring(si);
-		len.setLength(si);
-		len.insert(0, pad);
-	}
-	sb.append(len.toString());
-	sb.append(" ");
-	sb.append(f.getName());
-	if (f.isDirectory()) {
-		sb.append('/');
-	}
-	println(sb.toString());
-}
-
-/**
- * Lists the files in a directory
- *
- * @param dir directory from which to list the files. optional, default to pwd
- * @param filter pattern to filter the files listed. optional, default is '.'.
- */
-function ls(dir, filter) {
-	if (dir) {
-		dir = pathToFile(dir);		
-	} else {
-		dir = curDir;
-	}
-	if (dir.isDirectory()) {
-		var files = dir.listFiles();
-		for (var i in files) {
-			var f = files[i];
-			if (filter) {			
-				if(!f.getName().match(filter)) {
-					continue;
-				}
-			}
-			printFile(f);
-		}
-	} else {
-		printFile(dir);
-	}
-}
-
-/**
- * Synonym for 'ls'.
- */
-function dir(d, filter) {
-	ls(d, filter);
-}
-
-/**
- * Unix-like grep, but accepts JavaScript regex patterns
- *
- * @param pattern to search in files
- * @param files one or more files
- */
-function grep(pattern, files /*, one or more files */) {
-	if (arguments.length < 2) return;
-	for (var i = 1; i < arguments.length; i++) {
-		println(arguments[i] + ":");
-		cat(arguments[i], pattern);
-	}
-}
-
-/**
- * Find in files. Calls arbitrary callback function
- * for each matching file.<br>
- *
- * Examples: 
- * <pre>
- * <code>
- *    find('.') 
- *    find('.', '.*\.class', rm);  // remove all .class files 
- *    find('.', '.*\.java');       // print fullpath of each .java file 
- *    find('.', '.*\.java', cat);  // print all .java files 
- * </code>
- * </pre>
- *
- * @param dir directory to search files
- * @param pattern to search in the files
- * @param callback function to call for matching files
- */
-function find(dir, pattern, callback) {
-	dir = pathToFile(dir);
-	if (!callback) callback = print;
-	var files = dir.listFiles();
-	for (var f in files) {
-		var file = files[f];
-		if (file.isDirectory()) {
-			find(file, pattern, callback);
-		} else {
-			if (pattern) {
-				if (file.getName().match(pattern)) {
-					callback(file);
-				}
-			} else {
-				callback(file);
-			}
-		}
-	}	
-}
-
-// process utilities
-
-/**
- * Exec's a child process, waits for completion &amp; returns exit code
- *
- * @param cmd command to execute in child process
- */
-function exec(cmd) {
-	var process = java.lang.Runtime.getRuntime().exec(cmd);
-	var inp = new DataInputStream(process.getInputStream());
-	var line = null;
-	while ((line = inp.readLine()) != null) {
-		println(line);
-	}
-	process.waitFor();
-	$exit = process.exitValue();
-}
-
-/**
- * Exit the shell program.
- *
- * @param exitCode integer code returned to OS shell.
- * optional, defaults to 0
- */
-function exit(code) {
-	if (code) {
-		java.lang.System.exit(code + 0);		
-	} else {
-		java.lang.System.exit(0);		
-	}
-}
-
-/**
- * synonym for exit
- */
-function quit(code) {
-	exit(code);
-}
-
-// XML utilities
-
-/** 
- * Converts input to DOM Document object
- *
- * @param inp file or reader. optional, without this param,
- * this function returns a new DOM Document.
- * @return returns a DOM Document object
- */
-function XMLDocument(inp) {
-	var factory = javax.xml.parsers.DocumentBuilderFactory.newInstance();
-	var builder = factory.newDocumentBuilder();
-	if (inp) {
-		if (typeof(inp) == "string") {
-			return builder.parse(pathToFile(inp));
-		} else {
-			return builder.parse(inp);
-		}
-	} else {
-		return builder.newDocument();
-	}
-}
-
-/**
- * Converts arbitrary stream, file, URL to XMLSource
- *
- * @param inp input stream or file or URL
- * @return XMLSource object
- */
-function XMLSource(inp) {
-	if (inp instanceof javax.xml.transform.Source) {
-		return inp;
-	} else if (inp instanceof Packages.org.w3c.dom.Document) {
-		return new javax.xml.transform.dom.DOMSource(inp);
-	} else {
-		inp = new BufferedInputStream(inStream(inp));
-		return new javax.xml.transform.stream.StreamSource(inp);
-	}
-}
-
-/**
- * Converts arbitrary stream, file to XMLResult
- *
- * @param inp output stream or file
- * @return XMLResult object
- */
-function XMLResult(out) {
-	if (out instanceof javax.xml.transform.Result) {
-		return out;
-	} else if (out instanceof Packages.org.w3c.dom.Document) {
-		return new javax.xml.transform.dom.DOMResult(out);
-	} else {
-		out = new BufferedOutputStream(outStream(out));
-		return new javax.xml.transform.stream.StreamResult(out);
-	}
-}
-
-/**
- * Perform XSLT transform 
- *
- * @param inp Input XML to transform (URL, File or InputStream)
- * @param style XSL Stylesheet to be used (URL, File or InputStream). optional.
- * @param out Output XML (File or OutputStream
- */
-function XSLTransform(inp, style, out) {
-	switch (arguments.length) {
-	case 2:
-		inp = arguments[0];
-		out = arguments[1];
-		break;
-	case 3:
-		inp = arguments[0];
-		style = arguments[1];
-		out = arguments[2];
-		break;
-	default:
-		println("XSL tranform requires 2 or 3 arguments");
-		return;
-	}
-
-	var factory = javax.xml.transform.TransformerFactory.newInstance();
-	var tranformer;
-	if (style) {		
-		transformer = factory.newTransformer(XMLSource(style));	
-	} else {
-		transformer = factory.newTransformer();
-	}
-	var source = XMLSource(inp);
-	var result = XMLResult(out);
-	transformer.transform(source, result);
-	if (source.getInputStream) {
-		streamClose(source.getInputStream());
-	}
-	if (result.getOutputStream) {
-		streamClose(result.getOutputStream());
-	}
-}
-
-// miscellaneous utilities
-
-/**
- * Prints which command is selected from PATH 
- *
- * @param cmd name of the command searched from PATH
- */
-function which(cmd) {
-	var st = new java.util.StringTokenizer(env.PATH, File.pathSeparator);
-	while (st.hasMoreTokens()) {
-		var file = new File(st.nextToken(), cmd);
-		if (file.exists()) {
-			println(file.getAbsolutePath());
-			return;
-		}
-	}
-}
-
-/**
- * Prints IP addresses of given domain name
- *
- * @param name domain name
- */
-function ip(name) {
-	var addrs = InetAddress.getAllByName(name);	
-	for (var i in addrs) {
-		println(addrs[i]);
-	}
-}
-
-/**
- * Prints current date in current locale
- */
-function date() {
-	println(new Date().toLocaleString());
-}
-
-/**
- * Echoes the given string arguments
- */
-function echo(x) {
-	for (var i = 0; i < arguments.length; i++) {
-		println(arguments[i]);
-	}
-}
-
-/**
- * This is C-like printf 
- *
- * @param format string to format the rest of the print items
- * @param args variadic argument list
- */
-function printf(format, args/*, more args*/) {	
-	var array = java.lang.reflect.Array.newInstance(java.lang.Object, 
-			arguments.length - 1);
-	for (var i = 0; i < array.length; i++) {
-		array[i] = arguments[i+1];
-	}
-	return java.lang.System.out.printf(format, array);
-}
-
-/**
- * Reads one or more lines from stdin after printing prompt
- *
- * @param prompt optional, default is '>'
- * @param multiline to tell whether to read single line or multiple lines
- */
-function read(prompt, multiline) {
-	if (!prompt) {
-		prompt = '>';
-	}	
-	var inp = java.lang.System["in"];
-	var reader = new BufferedReader(new InputStreamReader(inp));
-	if (multiline) {
-		var line = '';
-		while (true) {
-			java.lang.System.err.print(prompt);
-			java.lang.System.err.flush();
-			var tmp = reader.readLine();
-			if (tmp == '' || tmp == null) break;
-			line += tmp + '\n';
-		}
-		return line;
-	} else {
-		java.lang.System.err.print(prompt);
-		java.lang.System.err.flush();	
-		return reader.readLine();
-	}
-}
diff --git a/ojluni/src/main/java/com/sun/tools/script/shell/messages.properties b/ojluni/src/main/java/com/sun/tools/script/shell/messages.properties
deleted file mode 100755
index 9caf20e..0000000
--- a/ojluni/src/main/java/com/sun/tools/script/shell/messages.properties
+++ /dev/null
@@ -1,66 +0,0 @@
-#
-# Copyright (c) 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.
-#
-
-string.script.error=\
-	script error: {0}
-
-file.script.error=\
-	script error in file {0} : {1}
-
-file.not.found=\
-	script file {0} is not found
-
-engine.not.found=\
-	script engine for language {0} can not be found
-
-engine.info=\
-	Language {0} {1} implemention "{2}" {3}
-
-encoding.unsupported=\
-	encoding {0} is not supported
-
-main.usage=\
-Usage: {0} [options] [arguments...]\n\
-\n\
-where [options] include:\n\
-\  \-classpath <path>    Specify where to find user class files \n\
-\  \-cp <path>           Specify where to find user class files \n\
-\  \-D<name>=<value>     Set a system property \n\
-\  \-J<flag>             Pass <flag> directly to the runtime system \n\
-\  \-l <language>        Use specified scripting language \n\
-\  \-e <script>          Evaluate given script \n\
-\  \-encoding <encoding> Specify character encoding used by script files \n\
-\  \-f <script file>     Evaluate given script file \n\
-\  \-f -                 Interactive mode, read script from standard input \n\
-\  \                     If this is used, this should be the last -f option \n\
-\  \-help                Print this usage message and exit \n\
-\  \-?                   Print this usage message and exit \n\
-\  \-q                   List all scripting engines available and exit \n\
-\  \n\
-If [arguments..] are present and if no -e or -f option is used, then first\n\
-argument is script file and the rest of the arguments, if any, are passed\n\
-as script arguments. If [arguments..] and -e or -f option is used, then all\n\
-[arguments..] are passed as script arguments. If [arguments..], -e, -f are\n\
-missing, then interactive mode is used.
diff --git a/ojluni/src/main/java/com/sun/tracing/Probe.java b/ojluni/src/main/java/com/sun/tracing/Probe.java
deleted file mode 100755
index d5c51b5..0000000
--- a/ojluni/src/main/java/com/sun/tracing/Probe.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-package com.sun.tracing;
-
-/**
- * The {@code Probe} interface represents a tracepoint.
- *
- * A {@code Probe} instance is obtained by calling the
- * {@code Provider.getProbe()} method of a provider instance created by
- * {@code ProviderFactory.createProvider()}.  A {@code Probe} can be used to
- * trigger a probe manually (provided the correct arguments are passed to
- * it), or to check a probe to see if anything is currently tracing it.
- * <p>
- * A tracing check can be used to avoid lengthy work that might be
- * needed to set up the probe's arguments.  However, checking
- * whether the probe is enabled generally takes the same amount of time
- * as actually triggering the probe. So, you should only check a probe's status
- * without triggering it if setting up the arguments is very expensive.
- * <p>
- * Users do not need to implement this interface: instances are
- * created automatically by the system when a {@code Provider)} instance is
- * created.
- * <p>
- * @since 1.7
- */
-
-public interface Probe {
-    /**
-     * Checks whether there is an active trace of this probe.
-     *
-     * @return true if an active trace is detected.
-     */
-    boolean isEnabled();
-
-    /**
-     * Determines whether a tracepoint is enabled.
-     *
-     * Typically, users do not need to use this method. It is called
-     * automatically when a Provider's instance method is called. Calls to
-     * this method expect the arguments to match the declared parameters for
-     * the method associated with the probe.
-     *
-     * @param args the parameters to pass to the method.
-     * @throws IllegalArgumentException if the provided parameters do not
-     * match the method declaration for this probe.
-     */
-    void trigger(Object ... args);
-}
diff --git a/ojluni/src/main/java/com/sun/tracing/ProbeName.java b/ojluni/src/main/java/com/sun/tracing/ProbeName.java
deleted file mode 100755
index e9a4fa5..0000000
--- a/ojluni/src/main/java/com/sun/tracing/ProbeName.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-package com.sun.tracing;
-
-import java.lang.annotation.Target;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.ElementType;
-
-/**
- * An annotation used to override the name of a probe.
- * <p>
- * This annotation can be added to a method in a user-defined {@code Provider}
- * interface, to set the name that will be used for the generated probe
- * associated with that method.  Without this annotation, the name will be the
- * name of the method.
- * <p>
- * @since 1.7
- */
-@Retention(RetentionPolicy.RUNTIME)
-@Target(ElementType.METHOD)
-public @interface ProbeName {
-    String value();
-}
-
diff --git a/ojluni/src/main/java/com/sun/tracing/Provider.java b/ojluni/src/main/java/com/sun/tracing/Provider.java
deleted file mode 100755
index bf03569..0000000
--- a/ojluni/src/main/java/com/sun/tracing/Provider.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-package com.sun.tracing;
-
-/**
- * {@code Provider} is a superinterface for user-defined tracing providers.
- * <p>
- * To define tracepoints, users must extend this interface
- * and then use a {@code ProviderFactory} to create an instance of the
- * newly-defined interface.  Each method in the defined interface represents a
- * tracepoint (or probe), which can be triggered by calling the associated
- * method on the returned instance.
- * <p>
- * This interface also contains a {@code getProbe()} method, which can be
- * used to get direct handles to the {@code Probe} objects themselves.
- * {@code Probe} objects can be triggered manually, or they can be queried to
- * check their state.
- * <p>
- * When an application has finished triggering probes, it should call
- * {@code dispose()} to free up any system resources associated with the
- * Provider.
- * <p>
- * All methods declared in a subclass of this interface should have a
- * {@code void} return type. Methods can have parameters, and when called the
- * values of the arguments will be passed to the tracing implementation.
- * If any methods do not have a {@code void} return type, an
- * {@code java.lang.IllegalArgumentException} will be thrown when the
- * provider is registered.
- * @since 1.7
- */
-
-public interface Provider {
-    /**
-     * Retrieves a reference to a Probe object, which is used to check status
-     * or to trigger the probe manually.
-     *
-     * If the provided method parameter is not a method of the provider
-     * interface,  or if the provider interface has been disposed, then
-     * this returns null
-     *
-     * @param method a method declared in the provider.
-     * @return the specified probe represented by that method, or null.
-     */
-    Probe getProbe(java.lang.reflect.Method method);
-
-    /**
-     * Disposes system resources associated with this provider.
-     *
-     * After calling this method, triggering the probes will have no effect.
-     * Additional calls to this method after the first call are ignored.
-     */
-    void dispose();
-}
diff --git a/ojluni/src/main/java/com/sun/tracing/ProviderFactory.java b/ojluni/src/main/java/com/sun/tracing/ProviderFactory.java
deleted file mode 100755
index 1a4f064..0000000
--- a/ojluni/src/main/java/com/sun/tracing/ProviderFactory.java
+++ /dev/null
@@ -1,114 +0,0 @@
-
-package com.sun.tracing;
-
-import java.util.HashSet;
-import java.io.PrintStream;
-import java.lang.reflect.Field;
-import java.security.AccessController;
-import java.security.PrivilegedActionException;
-import java.security.PrivilegedExceptionAction;
-import sun.security.action.GetPropertyAction;
-
-import sun.tracing.NullProviderFactory;
-import sun.tracing.PrintStreamProviderFactory;
-import sun.tracing.MultiplexProviderFactory;
-import sun.tracing.dtrace.DTraceProviderFactory;
-
-/**
- * {@code ProviderFactory} is a factory class used to create instances of
- * providers.
- *
- * To enable tracing in an application, this class must be used to create
- * instances of the provider interfaces defined by users.
- * The system-defined factory is obtained by using the
- * {@code getDefaultFactory()} static method.  The resulting instance can be
- * used to create any number of providers.
- *
- * @since 1.7
- */
-public abstract class ProviderFactory {
-
-    protected ProviderFactory() {}
-
-    /**
-     * Creates an implementation of a Provider interface.
-     *
-     * @param cls the provider interface to be defined.
-     * @return an implementation of {@code cls}, whose methods, when called,
-     * will trigger tracepoints in the application.
-     * @throws NullPointerException if cls is null
-     * @throws IllegalArgumentException if the class definition contains
-     * non-void methods
-     */
-    public abstract <T extends Provider> T createProvider(Class<T> cls);
-
-    /**
-     * Returns an implementation of a {@code ProviderFactory} which
-     * creates instances of Providers.
-     *
-     * The created Provider instances will be linked to all appropriate
-     * and enabled system-defined tracing mechanisms in the JDK.
-     *
-     * @return a {@code ProviderFactory} that is used to create Providers.
-     */
-    public static ProviderFactory getDefaultFactory() {
-        HashSet<ProviderFactory> factories = new HashSet<ProviderFactory>();
-
-        // Try to instantiate a DTraceProviderFactory
-        String prop = AccessController.doPrivileged(
-            new GetPropertyAction("com.sun.tracing.dtrace"));
-
-        if ( (prop == null || !prop.equals("disable")) &&
-             DTraceProviderFactory.isSupported() ) {
-            factories.add(new DTraceProviderFactory());
-        }
-
-        // Try to instantiate an output stream factory
-        prop = AccessController.doPrivileged(
-            new GetPropertyAction("sun.tracing.stream"));
-        if (prop != null) {
-            for (String spec : prop.split(",")) {
-                PrintStream ps = getPrintStreamFromSpec(spec);
-                if (ps != null) {
-                    factories.add(new PrintStreamProviderFactory(ps));
-                }
-            }
-        }
-
-        // See how many factories we instantiated, and return an appropriate
-        // factory that encapsulates that.
-        if (factories.size() == 0) {
-            return new NullProviderFactory();
-        } else if (factories.size() == 1) {
-            return factories.toArray(new ProviderFactory[1])[0];
-        } else {
-            return new MultiplexProviderFactory(factories);
-        }
-    }
-
-    private static PrintStream getPrintStreamFromSpec(final String spec) {
-        try {
-            // spec is in the form of <class>.<field>, where <class> is
-            // a fully specified class name, and <field> is a static member
-            // in that class.  The <field> must be a 'PrintStream' or subtype
-            // in order to be used.
-            final int fieldpos = spec.lastIndexOf('.');
-            final Class<?> cls = Class.forName(spec.substring(0, fieldpos));
-
-            Field f = AccessController.doPrivileged(new PrivilegedExceptionAction<Field>() {
-                public Field run() throws NoSuchFieldException {
-                    return cls.getField(spec.substring(fieldpos + 1));
-                }
-            });
-
-            return (PrintStream)f.get(null);
-        } catch (ClassNotFoundException e) {
-            throw new AssertionError(e);
-        } catch (IllegalAccessException e) {
-            throw new AssertionError(e);
-        } catch (PrivilegedActionException e) {
-            throw new AssertionError(e);
-        }
-    }
-}
-
diff --git a/ojluni/src/main/java/com/sun/tracing/ProviderName.java b/ojluni/src/main/java/com/sun/tracing/ProviderName.java
deleted file mode 100755
index 3941c76..0000000
--- a/ojluni/src/main/java/com/sun/tracing/ProviderName.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-package com.sun.tracing;
-
-import java.lang.annotation.Target;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.ElementType;
-
-/**
- * An annotation used to specify the name of a provider.
- * <p>
- * This annotation can be added to a user-defined {@code Provider}
- * interface, to set the name that will be used
- * for the provider in the generated probes.  Without this annotation,
- * the simple class name of the provider interface is used.
- * <p>
- * @since 1.7
- */
-@Retention(RetentionPolicy.RUNTIME)
-@Target(ElementType.TYPE)
-public @interface ProviderName {
-    String value();
-}
-
diff --git a/ojluni/src/main/java/com/sun/tracing/dtrace/ArgsAttributes.java b/ojluni/src/main/java/com/sun/tracing/dtrace/ArgsAttributes.java
deleted file mode 100755
index 4adeb35..0000000
--- a/ojluni/src/main/java/com/sun/tracing/dtrace/ArgsAttributes.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-package com.sun.tracing.dtrace;
-
-import java.lang.annotation.Target;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.ElementType;
-
-
-/**
- * This annotation describes the interface attributes of the probe arguments in
- * a single provider.
- *
- * This annotation can be added to a user-defined {@code Provider} specification
- * interface to set the stability attributes of the probe arguments, for
- * all the probes specified in that provider.
- * <p>
- * If this annotation is not present, the interface attributes for the
- * arguments are Private/Private/Unknown.
- * <p>
- * @see <a href="http://docs.sun.com/app/docs/doc/817-6223/6mlkidlnp?a=view">Solaris Dynamic Tracing Guide, Chapter 39: Stability</a>
- * @since 1.7
- */
-
-@Retention(RetentionPolicy.RUNTIME)
-@Target({ ElementType.TYPE })
-public @interface ArgsAttributes {
-  Attributes value();
-}
diff --git a/ojluni/src/main/java/com/sun/tracing/dtrace/Attributes.java b/ojluni/src/main/java/com/sun/tracing/dtrace/Attributes.java
deleted file mode 100755
index 500ac37..0000000
--- a/ojluni/src/main/java/com/sun/tracing/dtrace/Attributes.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-package com.sun.tracing.dtrace;
-
-import java.lang.annotation.Target;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.ElementType;
-
-
-/**
- * This annotation describes the interface's field attributes
- * for the probes in a provider.
- *
- * This annotation provides the contents of field-specific annotations
- * that specify the stability attributes and dependency class of a
- * particular field, for the probes in a provider.
- * <p>
- * The default interface attributes for unspecified fields is
- * Private/Private/Unknown.
- * <p>
- * @see <a href="http://docs.sun.com/app/docs/doc/817-6223/6mlkidlnp?a=view">Solaris Dynamic Tracing Guide, Chapter 39: Stability</a>
- * @since 1.7
- */
-
-@Retention(RetentionPolicy.RUNTIME)
-@Target({})
-public @interface Attributes {
-  /**
-   * The stability level of the name.
-   */
-  StabilityLevel name() default StabilityLevel.PRIVATE;
-
-  /**
-   * The stability level of the data.
-   */
-  StabilityLevel data() default StabilityLevel.PRIVATE;
-
-  /**
-   * The interface attribute's dependency class.
-   */
-  DependencyClass dependency()  default DependencyClass.UNKNOWN;
-}
diff --git a/ojluni/src/main/java/com/sun/tracing/dtrace/DependencyClass.java b/ojluni/src/main/java/com/sun/tracing/dtrace/DependencyClass.java
deleted file mode 100755
index ed27513..0000000
--- a/ojluni/src/main/java/com/sun/tracing/dtrace/DependencyClass.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-package com.sun.tracing.dtrace;
-
-/**
- * Enumeration for the DTrace dependency classes.
- *
- * @see <a href="http://docs.sun.com/app/docs/doc/817-6223/6mlkidlnp?a=view">Solaris Dynamic Tracing Guide for details, Chapter 39: Stability</a>
- * @since 1.7
- */
-public enum DependencyClass {
-    /**
-     * The interface has an unknown set of architectural dependencies.
-     */
-    UNKNOWN  (0),
-    /**
-     * The interface is specific to the CPU model of the current system.
-     */
-    CPU      (1),
-    /**
-     * The interface is specific to the hardware platform of the current
-     * system.
-     */
-    PLATFORM (2),
-    /**
-     * The interface is specific to the hardware platform group of the
-     * current system.
-     */
-    GROUP    (3),
-    /**
-     * The interface is specific to the instruction set architecture (ISA)
-     * supported by the microprocessors on this system.
-     */
-    ISA      (4),
-    /**
-     * The interface is common to all Solaris systems regardless of the
-     * underlying hardware.
-     */
-    COMMON   (5);
-
-    public String toDisplayString() {
-        return toString().substring(0,1) +
-               toString().substring(1).toLowerCase();
-    }
-
-    public int getEncoding() { return encoding; }
-
-    private int encoding;
-
-    private DependencyClass(int encoding) {
-        this.encoding = encoding;
-    }
-}
-
diff --git a/ojluni/src/main/java/com/sun/tracing/dtrace/FunctionAttributes.java b/ojluni/src/main/java/com/sun/tracing/dtrace/FunctionAttributes.java
deleted file mode 100755
index ee4f85a..0000000
--- a/ojluni/src/main/java/com/sun/tracing/dtrace/FunctionAttributes.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-package com.sun.tracing.dtrace;
-
-import java.lang.annotation.Target;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.ElementType;
-
-/**
- * This annotation describes the interface attributes of the
- * {@code function} field for a single provider.
- *
- * This annotation can be added to a user-defined {@code Provider} specification
- * interface to set the stability attributes of the {@code function} field for
- * all probes specified in that provider.
- * <p>
- * If this annotation is not present, the interface attributes for the
- * {@code function} field are Private/Private/Unknown.
- * <p>
- * @see <a href="http://docs.sun.com/app/docs/doc/817-6223/6mlkidlnp?a=view">Solaris Dynamic Tracing Guide, Chapter 39: Stability</a>
- * @since 1.7
- */
-@Retention(RetentionPolicy.RUNTIME)
-@Target({ ElementType.TYPE })
-public @interface FunctionAttributes {
-    Attributes value();
-}
diff --git a/ojluni/src/main/java/com/sun/tracing/dtrace/FunctionName.java b/ojluni/src/main/java/com/sun/tracing/dtrace/FunctionName.java
deleted file mode 100755
index a1ad675..0000000
--- a/ojluni/src/main/java/com/sun/tracing/dtrace/FunctionName.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-package com.sun.tracing.dtrace;
-
-import java.lang.annotation.Target;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.ElementType;
-
-/**
- * An annotation used to specify the {@code function} field for a DTrace probe.
- *
- * This annotation can be added to a method in a user-defined Provider
- * specification interface to set the {@code function} field that is used
- * for the generated DTrace probe associated with that method.
- * <p>
- * @since 1.7
- */
-@Retention(RetentionPolicy.RUNTIME)
-@Target(ElementType.METHOD)
-public @interface FunctionName {
-    String value();
-}
-
diff --git a/ojluni/src/main/java/com/sun/tracing/dtrace/ModuleAttributes.java b/ojluni/src/main/java/com/sun/tracing/dtrace/ModuleAttributes.java
deleted file mode 100755
index af2f795..0000000
--- a/ojluni/src/main/java/com/sun/tracing/dtrace/ModuleAttributes.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-package com.sun.tracing.dtrace;
-
-import java.lang.annotation.Target;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.ElementType;
-
-/**
- * This annotation is used to describe the interface attributes of the
- * {@code module} field for a single provider.
- *
- * This annotation can be added to a user-defined Provider specification
- * interface to set the stability attributes of the {@code module} field for
- * all probes specified in that provider.
- * <p>
- * If this annotation is not present, the interface attributes for the
- * {@code module} field is Private/Private/Unknown.
- * <p>
- * @see <a href="http://docs.sun.com/app/docs/doc/817-6223/6mlkidlnp?a=view">Solaris Dynamic Tracing Guide, Chapter 39: Stability</a>
- * @since 1.7
- */
-@Retention(RetentionPolicy.RUNTIME)
-@Target({ ElementType.TYPE })
-public @interface ModuleAttributes {
-    Attributes value();
-}
diff --git a/ojluni/src/main/java/com/sun/tracing/dtrace/ModuleName.java b/ojluni/src/main/java/com/sun/tracing/dtrace/ModuleName.java
deleted file mode 100755
index ed511eb..0000000
--- a/ojluni/src/main/java/com/sun/tracing/dtrace/ModuleName.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-package com.sun.tracing.dtrace;
-
-import java.lang.annotation.Target;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.ElementType;
-
-/**
- * An annotation used to specify the {@code module} field for a DTrace probe.
- *
- * This annotation can be added to a method in a user-defined Provider
- * specification interface to set the {@code module} field that will be used
- * for the generated DTrace probe associated with that method.
- * <p>
- * @since 1.7
- */
-@Retention(RetentionPolicy.RUNTIME)
-@Target(ElementType.TYPE)
-public @interface ModuleName {
-    String value();
-}
-
diff --git a/ojluni/src/main/java/com/sun/tracing/dtrace/NameAttributes.java b/ojluni/src/main/java/com/sun/tracing/dtrace/NameAttributes.java
deleted file mode 100755
index 0752c2b..0000000
--- a/ojluni/src/main/java/com/sun/tracing/dtrace/NameAttributes.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-package com.sun.tracing.dtrace;
-
-import java.lang.annotation.Target;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.ElementType;
-
-/**
- * This annotation describes the interface attributes of the
- * {@code name} field for a single provider.
- *
- * This annotation can be added to a user-defined Provider specification
- * interface to set the stability attributes of the {@code name} field for
- * all probes specified in that provider.
- * <p>
- * If this annotation is not present, the interface attributes for the
- * {@code name} field will be Private/Private/Unknown.
- * <p>
- * @see <a href="http://docs.sun.com/app/docs/doc/817-6223/6mlkidlnp?a=view">Solaris Dynamic Tracing Guide, Chapter 39: Stability</a>
- * @since 1.7
- */
-@Retention(RetentionPolicy.RUNTIME)
-@Target({ ElementType.TYPE })
-public @interface NameAttributes {
-    Attributes value();
-}
diff --git a/ojluni/src/main/java/com/sun/tracing/dtrace/ProviderAttributes.java b/ojluni/src/main/java/com/sun/tracing/dtrace/ProviderAttributes.java
deleted file mode 100755
index 31982ab..0000000
--- a/ojluni/src/main/java/com/sun/tracing/dtrace/ProviderAttributes.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-package com.sun.tracing.dtrace;
-
-import java.lang.annotation.Target;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.ElementType;
-
-/**
- * This annotation is used to describe the interface attributes of the
- * {@code provider} field for a single provider.
- *
- * This annotation can be added to a user-defined Provider specification
- * interface to set the stability attributes of the {@code provider} field for
- * all probes specified in that provider.
- * <p>
- * If this annotation is not present, the interface attributes for the
- * {@code provider} field will be Private/Private/Unknown.
- * <p>
- * @see <a href="http://docs.sun.com/app/docs/doc/817-6223/6mlkidlnp?a=view">Solaris Dynamic Tracing Guide, Chapter 39: Stability</a>
- * @since 1.7
- */
-@Retention(RetentionPolicy.RUNTIME)
-@Target({ ElementType.TYPE })
-public @interface ProviderAttributes {
-    Attributes value();
-}
diff --git a/ojluni/src/main/java/com/sun/tracing/dtrace/StabilityLevel.java b/ojluni/src/main/java/com/sun/tracing/dtrace/StabilityLevel.java
deleted file mode 100755
index ad029cd..0000000
--- a/ojluni/src/main/java/com/sun/tracing/dtrace/StabilityLevel.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-package com.sun.tracing.dtrace;
-
-/**
- * Enumeration for the DTrace stability levels.
- *
- * @see <a href="http://docs.sun.com/app/docs/doc/817-6223/6mlkidlnp?a=view">Solaris Dynamic Tracing Guide, Chapter 39: Stability</a>
- * @since 1.7
- */
-public enum StabilityLevel {
-    /**
-     * The interface is private to DTrace and represents an implementation
-     * detail of DTrace.
-     */
-    INTERNAL  (0),
-    /**
-     * The interface is private to Sun for use by other Sun products. It is
-     * not yet publicly documented for use by customers and ISVs.
-     */
-    PRIVATE  (1),
-    /**
-     * The interface is supported in the current release but is scheduled
-     * to be removed, most likely in a future minor release.
-     */
-    OBSOLETE (2),
-    /**
-     * The interface is controlled by an entity other than Sun.
-     */
-    EXTERNAL (3),
-    /**
-     * The interface gives developers early access to new or
-     * rapidly changing technology or to an implementation artifact that is
-     * essential for observing or debugging system behavior. A more
-     * stable solution is anticipated in the future.
-     */
-    UNSTABLE (4),
-    /**
-     * The interface might eventually become Standard or Stable but is
-     * still in transition.
-     */
-    EVOLVING (5),
-    /**
-     * The interface is a mature interface under Sun's control.
-     */
-    STABLE   (6),
-    /**
-     * The interface complies with an industry standard.
-     */
-    STANDARD (7);
-
-    String toDisplayString() {
-        return toString().substring(0,1) +
-               toString().substring(1).toLowerCase();
-    }
-
-    public int getEncoding() { return encoding; }
-
-    private int encoding;
-
-    private StabilityLevel(int encoding) {
-        this.encoding = encoding;
-    }
-}
-
diff --git a/ojluni/src/main/java/com/sun/tracing/dtrace/package-info.java b/ojluni/src/main/java/com/sun/tracing/dtrace/package-info.java
deleted file mode 100755
index 1a0c10d..0000000
--- a/ojluni/src/main/java/com/sun/tracing/dtrace/package-info.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-/**
- * This package contains annotations and enumerations that are used to
- * add DTrace-specific information to a tracing provider.
- * <p>
- * The DTrace-specific annotations modify the attributes of a DTrace provider
- * implementation when it is used by the tracing subsystem.  The annotations are
- * added to a {@code com.sun.tracing} provider specification to control
- * specific attributes of the provider as it relates to DTrace.
- * <p>
- * Any other tracing subsystems supported by the system will ignore these
- * annotations.
- * <p>
- * DTrace probes have additional fields and stability attributes that are
- * not accounted for in the generic tracing package.  If unspecified, the
- * default values are used for the stability and dependency attributes of
- * probes, as well as for the module and field names of the generated probes.
- * The values can be specified by adding the appropriate annotations to the
- * provider specification.
- * <p>
- * The {@code FunctionName} annotation is used to annotate the tracepoint
- * methods defined in the provider specification.  The value of this annotation
- * is used as the {@code function} field in the generated DTrace probes. It
- * is typically set to the name of the enclosing function where the
- * tracepoint is triggered.
- * <p>
- * The {@code ModuleName} annotation is used to annotate the provider
- * specification itself and applies to all the probes in the provider.  It
- * sets the value of the {@code module} field in the generated DTrace probes.
- * <p>
- * The remaining annotations, are also applied to the provider itself, and
- * are used to set the stability and dependency attributes of all probes in
- * that provider.  Each probe field and the probe arguments can be
- * independently assigned interface attributes to control the stability
- * ratings of the probes.
- * <p>
- * Here is an example of how to declare a provider, specifying additional DTrace
- * data:
-<PRE>
-    &#064;ProviderName("my_app_provider")
-    &#064;ModuleName("app.jar")
-    &#064;ProviderAttributes(&#064;Attributes={
-        name=StabilityLevel.STABLE,data=StabilityLevel.STABLE,
-        dependency=DependencyClass.COMMON})
-    &#064;ProbeAttributes(&#064;Attributes={
-        name=StabilityLevel.STABLE,data=StabilityLevel.STABLE,
-        dependency=DependencyClass.COMMON})
-    &#064;ModuleAttributes(&#064;Attributes={name=StabilityLevel.UNSTABLE})
-    public class MyProvider {
-        &#064;FunctionName("main") void startProbe();
-    }
-</PRE>
- * <p>
- * @see <a href="http://docs.sun.com/app/docs/doc/817-6223/6mlkidlms?a=view">Solaris Dynamic Tracing Guide, Chapter 34: Statically Defined Tracing for User Applications</a>
- * @see <a href="http://docs.sun.com/app/docs/doc/817-6223/6mlkidlnp?a=view">Solaris Dynamic Tracing Guide, Chapter 39: Stability</a>
- */
-
-package com.sun.tracing.dtrace;
diff --git a/ojluni/src/main/java/com/sun/tracing/package-info.java b/ojluni/src/main/java/com/sun/tracing/package-info.java
deleted file mode 100755
index 44644ce..0000000
--- a/ojluni/src/main/java/com/sun/tracing/package-info.java
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-/**
- * This package provides a mechanism for defining and
- * inserting tracepoints into Java-technology based applications, which
- * can then be monitored by the tracing tools available on the system.
- * <p>
- * To add tracepoints to a program, you must first decide where to place the
- * tracepoints, what the logical names are for these points, what information
- * will be available to the tracing mechanisms at each point, and decide upon
- * any logical grouping.
- * <p>
- * You add instrumentation to a program in three steps:
- * <ul>
- * <li>First, declare tracepoints by creating interfaces to define
- * them, and include these interfaces in the program definition.
- * The declared interfaces are standard Java technology-based
- * interfaces and are compiled with the program.</li>
- * <li>Second, add code in the application to create an instance of the
- * interface at some point during the initialization of the application,
- * using a factory class provided by the system. The reference to the
- * instance can be stored as a global static, or passed as context to all
- * the places where it is needed.</li>
- * <li>Finally, add the actual tracepoints to the desired locations in the
- * application by inserting a call to one of the methods defined in the
- * interface, via the factory-created reference.</li>
- * </ul>
- * <p>
- * The method calls representing the tracepoints have no logical
- * impact on the program.  The side effect of the call is that any
- * activated tracing mechanisms will be notified that the tracepoint has
- * been hit, and will take whatever actions are appropriate (for example,
- * logging  the tracepoint, or triggering a DTrace probe, etc.).  In most
- * cases, the impact on performance of adding tracepoints to the application
- * will be minimal.
- * <p>
- * Each logical grouping of tracepoints should be defined in a common
- * interface, called a <i>provider</i>.  An application can have one or many
- * providers.  Each provider is independent and can be created whenever
- * it is appropriate for that provider, for example, when a subsytem is
- * initialized.  Providers should be disposed of when they are no longer
- * needed, to free up any associated system resources.  Each tracepoint
- * in a provider is represented by a method in that interface.  These methods
- * are referred to as <i>probes</i>.  The method signature determines the probe
- * parameters.  A call to the method with the specified parameters triggers
- * the probe and makes its parameter values visible to any associated tracing
- * mechanism.
- * <p>
- * User-defined interfaces which represent providers must extend the
- * {@code Provider} interface.  To activate the system-defined
- * tracing mechanisms, you must obtain an instance of the
- * {@code ProviderFactory} class, and pass the class of the provider to
- * the {@code createProvider()} method.  The returned instance is then used to
- * trigger the probes later in the application.
- * <p>
- * In addition to triggering the probes, the provider instance can be used
- * to obtain direct references to the {@code Probe} objects, which can be used
- * directly for triggering, or can be queried to determine whether the probe is
- * currently being traced.  The {@code Provider} interface also defines a
- * {@code Provider.dispose()} method which is used to free up any resources
- * that might be associated with that provider.
- * <p>
- * When a probe is triggered, any activated tracing system will be given
- * the provider name, the probe name, and the values of the probe arguments.
- * The tracing system is free to consume this data is whatever way is
- * appropriate.
- * By default, the provider name is the same as the class name of the interface
- * that defines the provider. Similarly, the probe name is
- * the name of the method that defines the probe. These default values
- * can be over-ridden by annotations.  The provider definition can be
- * annotated with the {@code @ProviderName} annotation, whose value will
- * indicate the provider name that the tracing system will use.  Similarly,
- * the {@code @ProbeName} annotation annotates a declared method and
- * indicates the probe name that should be used in the place of the
- * method name.  These annotations can be used to define providers and
- * probes with the same name, in cases where the semantics of the Java language
- * may prevent this.
- * <p>
- * Here is a very small and simple usage example:
- * <p>
- *
-<PRE>
-   import com.sun.tracing.Provider;
-   import com.sun.tracing.ProviderFactory;
-
-   interface MyProvider extends Provider {
-       void startProbe();
-       void finishProbe(int value);
-   }
-
-   public class MyApplication {
-       public static void main(String argv[]) {
-           ProviderFactory factory = ProviderFactory.getDefaultFactory();
-           MyProvider trace = factory.createProvider(MyProvider.class);
-
-           trace.startProbe();
-           int result = foo();
-           trace.finishProbe(result);
-
-           trace.dispose();
-       }
-   }
-</PRE>
- * <p>
- * The Java Development Kit (JDK) currently only includes one system-defined
- * tracing framework: DTrace. DTrace is enabled automatically whenever an
- * application is run on a system and a JDK release that supports it. When
- * DTrace is enabled, probes are made available for listing and matching by
- * DTrace scripts as soon as the provider is created. At the tracepoint, an
- * associated DTrace script is informed of the creation of the provider, and
- * it takes whatever action it is designed to take. Tracepoints in the
- * program have the following DTrace probe names:<br>
- *   {@code <provider><pid>:<module>:<function>:<probe>}
- * Where:
- * <ul>
- * <li>{@code <provider>} the provider name as specified by the application</li>
- * <li>{@code <pid>} the operating system process ID</li>
- * <li>{@code <module>} undefined, unless specified by the application</li>
- * <li>{@code <function>} undefined, unless specified by the application</li>
- * <li>{@code <probe>} the probe name as specified by the application</li>
- * </ul>
- * <p>
- * The {@code com.sun.tracing.dtrace} package contains additional
- * annotations that can be used to control the names used for the
- * <code>module</code> and <code>function</code> fields, as well as annotations
- * that can be added to the provider to control probe stability and dependency
- * attributes.
- * <p>
- * Integer, float and string probe parameters are made available to DTrace
- * using
- * the built-in argument variables, {@code arg0 ... arg_n}.  Integer-types
- * are passed by value (boxed values are unboxed), floating-point types are
- * passed as encoded integer
- * arguments, and {@code java.lang.String} objects are converted
- * to UTF8 strings, so they can be read into the DTrace script using the
- * {@code copyinstr()} intrinsic.  Non-string and non-boxed primitive
- * reference arguments are only
- * placeholders and have no value.
- * <p>
- * Using the example above, with a theoretical process ID of 123, these are
- * the probes that can be traced from DTrace:
-<PRE>
-    MyProvider123:::startProbe
-    MyProvider123:::finishProbe
-</PRE>
- * When {@code finishProbe} executes, {@code arg0} will contain the
- * value of {@code result}.
- * <p>
- * The DTrace tracing mechanism is enabled for all providers, apart from in the
- * following circumstances:
- * <ul>
- * <li>DTrace is not supported on the underlying system.</li>
- * <li>The property {@code com.sun.tracing.dtrace} is set to "disable".</li>
- * <li>The RuntimePermission {@code com.sun.tracing.dtrace.createProvider}
- * is denied to the process.</li>
- * </ul>
- * <p>
- */
-
-package com.sun.tracing;